From 5ec0dca140af366d4a8aad20ab7f77f176f37365 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 14 Dec 2025 14:53:58 +0000 Subject: [PATCH 1/3] [AUTO] Upload built main.lua --- dist/main.lua | 2612 ++++++++++++++++++++++++------------------------- 1 file changed, 1306 insertions(+), 1306 deletions(-) diff --git a/dist/main.lua b/dist/main.lua index 00ec6fe..a1bcec0 100644 --- a/dist/main.lua +++ b/dist/main.lua @@ -4,7 +4,7 @@ | |/ |/ / / _ \/ _ / /_/ // / |__/|__/_/_//_/\_,_/\____/___/ - v1.6.62 | 2025-12-09 | Roblox UI Library for scripts + v1.6.62 | 2025-12-14 | Roblox UI Library for scripts To view the source code, see the `src/` folder on the official GitHub repository. @@ -249,25 +249,25 @@ table.insert(x,NumberSequenceKeypoint.new(B,A.Transparency or 0)) end end -table.sort(v,function(B,C)return B.Time0.68 then -return Color3.fromHSV(B/360,0,0.05) +return Color3.fromHSV(z/360,0,0.05) else -return Color3.fromHSV(B/360,0,0.98) +return Color3.fromHSV(z/360,0,0.98) end end function p.GetAverageColor(v) -local x,B,C=0,0,0 -local F=v.Color.Keypoints -for G,H in ipairs(F)do +local x,z,A=0,0,0 +local B=v.Color.Keypoints +for C,F in ipairs(B)do -x=x+H.Value.R -B=B+H.Value.G -C=C+H.Value.B +x=x+F.Value.R +z=z+F.Value.G +A=A+F.Value.B end -local J=#F -return Color3.new(x/J,B/J,C/J) +local C=#B +return Color3.new(x/C,z/C,A/C) end @@ -1174,54 +1174,54 @@ return f end function a.e() -local b=4294967296;local d=b-1;local function c(e,f)local g,h=0,1;while e~=0 or f~=0 do local j,l=e%2,f%2;local m=(j+l)%2;g=g+m*h;e=math.floor(e/2)f=math.floor(f/2)h=h*2 end;return g%b end;local function k(e,f,g,...)local h;if f then e=e%b;f=f%b;h=c(e,f)if g then h=k(h,g,...)end;return h elseif e then return e%b else return 0 end end;local function n(e,f,g,...)local h;if f then e=e%b;f=f%b;h=(e+f-c(e,f))/2;if g then h=n(h,g,...)end;return h elseif e then return e%b else return d end end;local function o(e)return d-e end;local function q(e,f)if f<0 then return lshift(e,-f)end;return math.floor(e%4294967296/2^f)end;local function s(e,f)if f>31 or f<-31 then return 0 end;return q(e%b,f)end;local function lshift(e,f)if f<0 then return s(e,-f)end;return e*2^f%4294967296 end;local function t(e,f)e=e%b;f=f%32;local g=n(e,2^f-1)return s(e,f)+lshift(g,32-f)end;local e={0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5,0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5,0xd807aa98,0x12835b01,0x243185be,0x550c7dc3,0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174,0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc,0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da,0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7,0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967,0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13,0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85,0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3,0xd192e819,0xd6990624,0xf40e3585,0x106aa070,0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5,0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3,0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208,0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2}local function w(f)return string.gsub(f,".",function(g)return string.format("%02x",string.byte(g))end)end;local function y(f,g)local h=""for j=1,g do local l=f%256;h=string.char(l)..h;f=(f-l)/256 end;return h end;local function D(f,g)local h=0;for j=g,g+3 do h=h*256+string.byte(f,j)end;return h end;local function E(f,g)local h=64-(g+9)%64;g=y(8*g,8)f=f.."\128"..string.rep("\0",h)..g;assert(#f%64==0)return f end;local function I(f)f[1]=0x6a09e667;f[2]=0xbb67ae85;f[3]=0x3c6ef372;f[4]=0xa54ff53a;f[5]=0x510e527f;f[6]=0x9b05688c;f[7]=0x1f83d9ab;f[8]=0x5be0cd19;return f end;local function K(f,g,h)local j={}for l=1,16 do j[l]=D(f,g+(l-1)*4)end;for l=17,64 do local m=j[l-15]local p=k(t(m,7),t(m,18),s(m,3))m=j[l-2]j[l]=(j[l-16]+p+j[l-7]+k(t(m,17),t(m,19),s(m,10)))%b end;local l,m,p,r,u,v,x,B=h[1],h[2],h[3],h[4],h[5],h[6],h[7],h[8]for C=1,64 do local F=k(t(l,2),t(l,13),t(l,22))local G=k(n(l,m),n(l,p),n(m,p))local H=(F+G)%b;local J=k(t(u,6),t(u,11),t(u,25))local L=k(n(u,v),n(o(u),x))local M=(B+J+L+e[C]+j[C])%b;B=x;x=v;v=u;u=(r+M)%b;r=p;p=m;m=l;l=(M+H)%b end;h[1]=(h[1]+l)%b;h[2]=(h[2]+m)%b;h[3]=(h[3]+p)%b;h[4]=(h[4]+r)%b;h[5]=(h[5]+u)%b;h[6]=(h[6]+v)%b;h[7]=(h[7]+x)%b;h[8]=(h[8]+B)%b end;local function Z(f)f=E(f,#f)local g=I{}for h=1,#f,64 do K(f,h,g)end;return w(y(g[1],4)..y(g[2],4)..y(g[3],4)..y(g[4],4)..y(g[5],4)..y(g[6],4)..y(g[7],4)..y(g[8],4))end;local f;local g={["\\"]="\\",["\""]="\"",["\b"]="b",["\f"]="f",["\n"]="n",["\r"]="r",["\t"]="t"}local h={["/"]="/"}for j,l in pairs(g)do h[l]=j end;local m=function(m)return"\\"..(g[m]or string.format("u%04x",m:byte()))end;local p=function(p)return"null"end;local r=function(r,u)local v={}u=u or{}if u[r]then error"circular reference"end;u[r]=true;if rawget(r,1)~=nil or next(r)==nil then local x=0;for B in pairs(r)do if type(B)~="number"then error"invalid table: mixed or invalid key types"end;x=x+1 end;if x~=#r then error"invalid table: sparse array"end;for C,F in ipairs(r)do table.insert(v,f(F,u))end;u[r]=nil;return"["..table.concat(v,",").."]"else for x,B in pairs(r)do if type(x)~="string"then error"invalid table: mixed or invalid key types"end;table.insert(v,f(x,u)..":"..f(B,u))end;u[r]=nil;return"{"..table.concat(v,",").."}"end end;local u=function(u)return'"'..u:gsub('[%z\1-\31\\"]',m)..'"'end;local v=function(v)if v~=v or v<=-math.huge or v>=math.huge then error("unexpected number value '"..tostring(v).."'")end;return string.format("%.14g",v)end;local x={["nil"]=p,table=r,string=u,number=v,boolean=tostring}f=function(B,C)local F=type(B)local G=x[F]if G then return G(B,C)end;error("unexpected type '"..F.."'")end;local B=function(B)return f(B)end;local C;local F=function(...)local F={}for G=1,select("#",...)do F[select(G,...)]=true end;return F end;local G=F(" ","\t","\r","\n")local H=F(" ","\t","\r","\n","]","}",",")local J=F("\\","/",'"',"b","f","n","r","t","u")local L=F("true","false","null")local M={["true"]=true,["false"]=false,null=nil}local N=function(N,O,P,Q)for R=O,#N do if P[N:sub(R,R)]~=Q then return R end end;return#N+1 end;local O=function(O,P,Q)local R=1;local S=1;for T=1,P-1 do S=S+1;if O:sub(T,T)=="\n"then R=R+1;S=1 end end;error(string.format("%s at line %d col %d",Q,R,S))end;local P=function(P)local Q=math.floor;if P<=0x7f then return string.char(P)elseif P<=0x7ff then return string.char(Q(P/64)+192,P%64+128)elseif P<=0xffff then return string.char(Q(P/4096)+224,Q(P%4096/64)+128,P%64+128)elseif P<=0x10ffff then return string.char(Q(P/262144)+240,Q(P%262144/4096)+128,Q(P%4096/64)+128,P%64+128)end;error(string.format("invalid unicode codepoint '%x'",P))end;local Q=function(Q)local R=tonumber(Q:sub(1,4),16)local S=tonumber(Q:sub(7,10),16)if S then return P((R-0xd800)*0x400+S-0xdc00+0x10000)else return P(R)end end;local R=function(R,S)local T=""local U=S+1;local V=U;while U<=#R do local W=R:byte(U)if W<32 then O(R,U,"control character in string")elseif W==92 then T=T..R:sub(V,U-1)U=U+1;local X=R:sub(U,U)if X=="u"then local Y=R:match("^[dD][89aAbB]%x%x\\u%x%x%x%x",U+1)or R:match("^%x%x%x%x",U+1)or O(R,U-1,"invalid unicode escape in string")T=T..Q(Y)U=U+#Y else if not J[X]then O(R,U-1,"invalid escape char '"..X.."' in string")end;T=T..h[X]end;V=U+1 elseif W==34 then T=T..R:sub(V,U-1)return T,U+1 end;U=U+1 end;O(R,S,"expected closing quote for string")end;local S=function(S,T)local U=N(S,T,H)local V=S:sub(T,U-1)local W=tonumber(V)if not W then O(S,T,"invalid number '"..V.."'")end;return W,U end;local T=function(T,U)local V=N(T,U,H)local W=T:sub(U,V-1)if not L[W]then O(T,U,"invalid literal '"..W.."'")end;return M[W],V end;local U=function(U,V)local W={}local X=1;V=V+1;while 1 do local Y;V=N(U,V,G,true)if U:sub(V,V)=="]"then V=V+1;break end;Y,V=C(U,V)W[X]=Y;X=X+1;V=N(U,V,G,true)local _=U:sub(V,V)V=V+1;if _=="]"then break end;if _~=","then O(U,V,"expected ']' or ','")end end;return W,V end;local aa=function(V,W)local X={}W=W+1;while 1 do local Y,_;W=N(V,W,G,true)if V:sub(W,W)=="}"then W=W+1;break end;if V:sub(W,W)~='"'then O(V,W,"expected string for key")end;Y,W=C(V,W)W=N(V,W,G,true)if V:sub(W,W)~=":"then O(V,W,"expected ':' after key")end;W=N(V,W+1,G,true)_,W=C(V,W)X[Y]=_;W=N(V,W,G,true)local aa=V:sub(W,W)W=W+1;if aa=="}"then break end;if aa~=","then O(V,W,"expected '}' or ','")end end;return X,W end;local V={['"']=R,["0"]=S,["1"]=S,["2"]=S,["3"]=S,["4"]=S,["5"]=S,["6"]=S,["7"]=S,["8"]=S,["9"]=S,["-"]=S,t=T,f=T,n=T,["["]=U,["{"]=aa}C=function(W,X)local Y=W:sub(X,X)local _=V[Y]if _ then return _(W,X)end;O(W,X,"unexpected character '"..Y.."'")end;local W=function(W)if type(W)~="string"then error("expected argument of type string, got "..type(W))end;local X,Y=C(W,N(W,1,G,true))Y=N(W,Y,G,true)if Y<=#W then O(W,Y,"trailing garbage")end;return X end; -local X,Y,_=B,W,Z; +local b=4294967296;local d=b-1;local function c(e,f)local g,h=0,1;while e~=0 or f~=0 do local j,l=e%2,f%2;local m=(j+l)%2;g=g+m*h;e=math.floor(e/2)f=math.floor(f/2)h=h*2 end;return g%b end;local function k(e,f,g,...)local h;if f then e=e%b;f=f%b;h=c(e,f)if g then h=k(h,g,...)end;return h elseif e then return e%b else return 0 end end;local function n(e,f,g,...)local h;if f then e=e%b;f=f%b;h=(e+f-c(e,f))/2;if g then h=n(h,g,...)end;return h elseif e then return e%b else return d end end;local function o(e)return d-e end;local function q(e,f)if f<0 then return lshift(e,-f)end;return math.floor(e%4294967296/2^f)end;local function s(e,f)if f>31 or f<-31 then return 0 end;return q(e%b,f)end;local function lshift(e,f)if f<0 then return s(e,-f)end;return e*2^f%4294967296 end;local function t(e,f)e=e%b;f=f%32;local g=n(e,2^f-1)return s(e,f)+lshift(g,32-f)end;local e={0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5,0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5,0xd807aa98,0x12835b01,0x243185be,0x550c7dc3,0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174,0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc,0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da,0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7,0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967,0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13,0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85,0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3,0xd192e819,0xd6990624,0xf40e3585,0x106aa070,0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5,0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3,0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208,0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2}local function w(f)return string.gsub(f,".",function(g)return string.format("%02x",string.byte(g))end)end;local function y(f,g)local h=""for j=1,g do local l=f%256;h=string.char(l)..h;f=(f-l)/256 end;return h end;local function D(f,g)local h=0;for j=g,g+3 do h=h*256+string.byte(f,j)end;return h end;local function E(f,g)local h=64-(g+9)%64;g=y(8*g,8)f=f.."\128"..string.rep("\0",h)..g;assert(#f%64==0)return f end;local function I(f)f[1]=0x6a09e667;f[2]=0xbb67ae85;f[3]=0x3c6ef372;f[4]=0xa54ff53a;f[5]=0x510e527f;f[6]=0x9b05688c;f[7]=0x1f83d9ab;f[8]=0x5be0cd19;return f end;local function K(f,g,h)local j={}for l=1,16 do j[l]=D(f,g+(l-1)*4)end;for l=17,64 do local m=j[l-15]local p=k(t(m,7),t(m,18),s(m,3))m=j[l-2]j[l]=(j[l-16]+p+j[l-7]+k(t(m,17),t(m,19),s(m,10)))%b end;local l,m,p,r,u,v,x,z=h[1],h[2],h[3],h[4],h[5],h[6],h[7],h[8]for A=1,64 do local B=k(t(l,2),t(l,13),t(l,22))local C=k(n(l,m),n(l,p),n(m,p))local F=(B+C)%b;local G=k(t(u,6),t(u,11),t(u,25))local H=k(n(u,v),n(o(u),x))local J=(z+G+H+e[A]+j[A])%b;z=x;x=v;v=u;u=(r+J)%b;r=p;p=m;m=l;l=(J+F)%b end;h[1]=(h[1]+l)%b;h[2]=(h[2]+m)%b;h[3]=(h[3]+p)%b;h[4]=(h[4]+r)%b;h[5]=(h[5]+u)%b;h[6]=(h[6]+v)%b;h[7]=(h[7]+x)%b;h[8]=(h[8]+z)%b end;local function Z(f)f=E(f,#f)local g=I{}for h=1,#f,64 do K(f,h,g)end;return w(y(g[1],4)..y(g[2],4)..y(g[3],4)..y(g[4],4)..y(g[5],4)..y(g[6],4)..y(g[7],4)..y(g[8],4))end;local f;local g={["\\"]="\\",["\""]="\"",["\b"]="b",["\f"]="f",["\n"]="n",["\r"]="r",["\t"]="t"}local h={["/"]="/"}for j,l in pairs(g)do h[l]=j end;local j=function(j)return"\\"..(g[j]or string.format("u%04x",j:byte()))end;local l=function(l)return"null"end;local m=function(m,p)local r={}p=p or{}if p[m]then error"circular reference"end;p[m]=true;if rawget(m,1)~=nil or next(m)==nil then local u=0;for v in pairs(m)do if type(v)~="number"then error"invalid table: mixed or invalid key types"end;u=u+1 end;if u~=#m then error"invalid table: sparse array"end;for v,x in ipairs(m)do table.insert(r,f(x,p))end;p[m]=nil;return"["..table.concat(r,",").."]"else for u,v in pairs(m)do if type(u)~="string"then error"invalid table: mixed or invalid key types"end;table.insert(r,f(u,p)..":"..f(v,p))end;p[m]=nil;return"{"..table.concat(r,",").."}"end end;local p=function(p)return'"'..p:gsub('[%z\1-\31\\"]',j)..'"'end;local r=function(r)if r~=r or r<=-math.huge or r>=math.huge then error("unexpected number value '"..tostring(r).."'")end;return string.format("%.14g",r)end;local u={["nil"]=l,table=m,string=p,number=r,boolean=tostring}f=function(v,x)local z=type(v)local A=u[z]if A then return A(v,x)end;error("unexpected type '"..z.."'")end;local v=function(v)return f(v)end;local x;local z=function(...)local z={}for A=1,select("#",...)do z[select(A,...)]=true end;return z end;local A=z(" ","\t","\r","\n")local B=z(" ","\t","\r","\n","]","}",",")local C=z("\\","/",'"',"b","f","n","r","t","u")local F=z("true","false","null")local G={["true"]=true,["false"]=false,null=nil}local H=function(H,J,L,M)for N=J,#H do if L[H:sub(N,N)]~=M then return N end end;return#H+1 end;local J=function(J,L,M)local N=1;local O=1;for P=1,L-1 do O=O+1;if J:sub(P,P)=="\n"then N=N+1;O=1 end end;error(string.format("%s at line %d col %d",M,N,O))end;local L=function(L)local M=math.floor;if L<=0x7f then return string.char(L)elseif L<=0x7ff then return string.char(M(L/64)+192,L%64+128)elseif L<=0xffff then return string.char(M(L/4096)+224,M(L%4096/64)+128,L%64+128)elseif L<=0x10ffff then return string.char(M(L/262144)+240,M(L%262144/4096)+128,M(L%4096/64)+128,L%64+128)end;error(string.format("invalid unicode codepoint '%x'",L))end;local M=function(M)local N=tonumber(M:sub(1,4),16)local O=tonumber(M:sub(7,10),16)if O then return L((N-0xd800)*0x400+O-0xdc00+0x10000)else return L(N)end end;local N=function(N,O)local P=""local Q=O+1;local R=Q;while Q<=#N do local S=N:byte(Q)if S<32 then J(N,Q,"control character in string")elseif S==92 then P=P..N:sub(R,Q-1)Q=Q+1;local T=N:sub(Q,Q)if T=="u"then local U=N:match("^[dD][89aAbB]%x%x\\u%x%x%x%x",Q+1)or N:match("^%x%x%x%x",Q+1)or J(N,Q-1,"invalid unicode escape in string")P=P..M(U)Q=Q+#U else if not C[T]then J(N,Q-1,"invalid escape char '"..T.."' in string")end;P=P..h[T]end;R=Q+1 elseif S==34 then P=P..N:sub(R,Q-1)return P,Q+1 end;Q=Q+1 end;J(N,O,"expected closing quote for string")end;local O=function(O,P)local Q=H(O,P,B)local R=O:sub(P,Q-1)local S=tonumber(R)if not S then J(O,P,"invalid number '"..R.."'")end;return S,Q end;local P=function(P,Q)local R=H(P,Q,B)local S=P:sub(Q,R-1)if not F[S]then J(P,Q,"invalid literal '"..S.."'")end;return G[S],R end;local Q=function(Q,R)local S={}local T=1;R=R+1;while 1 do local U;R=H(Q,R,A,true)if Q:sub(R,R)=="]"then R=R+1;break end;U,R=x(Q,R)S[T]=U;T=T+1;R=H(Q,R,A,true)local V=Q:sub(R,R)R=R+1;if V=="]"then break end;if V~=","then J(Q,R,"expected ']' or ','")end end;return S,R end;local R=function(R,S)local T={}S=S+1;while 1 do local U,V;S=H(R,S,A,true)if R:sub(S,S)=="}"then S=S+1;break end;if R:sub(S,S)~='"'then J(R,S,"expected string for key")end;U,S=x(R,S)S=H(R,S,A,true)if R:sub(S,S)~=":"then J(R,S,"expected ':' after key")end;S=H(R,S+1,A,true)V,S=x(R,S)T[U]=V;S=H(R,S,A,true)local W=R:sub(S,S)S=S+1;if W=="}"then break end;if W~=","then J(R,S,"expected '}' or ','")end end;return T,S end;local S={['"']=N,["0"]=O,["1"]=O,["2"]=O,["3"]=O,["4"]=O,["5"]=O,["6"]=O,["7"]=O,["8"]=O,["9"]=O,["-"]=O,t=P,f=P,n=P,["["]=Q,["{"]=R}x=function(T,U)local V=T:sub(U,U)local W=S[V]if W then return W(T,U)end;J(T,U,"unexpected character '"..V.."'")end;local T=function(T)if type(T)~="string"then error("expected argument of type string, got "..type(T))end;local U,V=x(T,H(T,1,A,true))V=H(T,V,A,true)if V<=#T then J(T,V,"trailing garbage")end;return U end; +local U,V,W=v,T,Z; -local ab={} +local X={} -local ac=(cloneref or clonereference or function(ac)return ac end) +local Y=(cloneref or clonereference or function(Y)return Y end) -function ab.New(ad,ae) +function X.New(_,aa) -local af=ad; -local ag=ae; -local ah=true; +local ab=_; +local ac=aa; +local ad=true; -local ai=function(ai)end; +local ae=function(ae)end; repeat task.wait(1)until game:IsLoaded(); -local aj=false; -local ak,al,am,an,ao,ap,aq,ar,as=setclipboard or toclipboard,request or http_request or syn_request,string.char,tostring,string.sub,os.time,math.random,math.floor,gethwid or function()return ac(game:GetService"Players").LocalPlayer.UserId end -local at,au="",0; +local af=false; +local ag,ah,ai,aj,ak,al,am,an,ao=setclipboard or toclipboard,request or http_request or syn_request,string.char,tostring,string.sub,os.time,math.random,math.floor,gethwid or function()return Y(game:GetService"Players").LocalPlayer.UserId end +local ap,aq="",0; -local av="https://api.platoboost.app"; -local aw=al{ -Url=av.."/public/connectivity", +local ar="https://api.platoboost.app"; +local as=ah{ +Url=ar.."/public/connectivity", Method="GET" }; -if aw.StatusCode~=200 and aw.StatusCode~=429 then -av="https://api.platoboost.net"; +if as.StatusCode~=200 and as.StatusCode~=429 then +ar="https://api.platoboost.net"; end function cacheLink() -if au+(600)aD and aE>10 then +if f>d and f>10 then aB=true al.Window.IsToggleDragging=false @@ -5610,13 +5610,13 @@ ad(aq.Frame.Bar,0.23,{ImageTransparency=0},Enum.EasingStyle.Quint,Enum.EasingDir return end -local aF=aC.Position.X-ay -local b=math.max(2,math.min(aA+aF,au-at-2))local d= +local g=b.Position.X-ay +local h=math.max(2,math.min(aA+g,au-at-2))local j= (aq.Frame.Position.X.Offset-2)/(au-at-4) ad(aq.Frame,0.05,{ -Position=UDim2.new(0,b,0.5,0) +Position=UDim2.new(0,h,0.5,0) },Enum.EasingStyle.Linear,Enum.EasingDirection.Out):Play() @@ -5630,8 +5630,8 @@ if as then as:Disconnect() end -as=ae.InputEnded:Connect(function(aC) -if al.Window.IsToggleDragging and(aC.UserInputType==Enum.UserInputType.MouseButton1 or aC.UserInputType==Enum.UserInputType.Touch)then +as=ae.InputEnded:Connect(function(b) +if al.Window.IsToggleDragging and(b.UserInputType==Enum.UserInputType.MouseButton1 or b.UserInputType==Enum.UserInputType.Touch)then al.Window.IsToggleDragging=false if ar then @@ -5648,17 +5648,17 @@ if aB then return end -local aD=aq.Frame.Position.X.Offset -local aE=math.abs(aC.Position.X-ay) +local d=aq.Frame.Position.X.Offset +local f=math.abs(b.Position.X-ay) -if aE<10 then -local aF=not ax.Value -ax:Set(aF,true,false) +if f<10 then +local g=not ax.Value +ax:Set(g,true,false) else -local aF=aD+at/2 -local b=au/2 -local d=aF>b -ax:Set(d,true,false) +local g=d+at/2 +local h=au/2 +local j=g>h +ax:Set(j,true,false) end ad(aq.Frame.Bar.UIScale,0.23,{Scale=1},Enum.EasingStyle.Quint,Enum.EasingDirection.Out):Play() @@ -6112,12 +6112,12 @@ ax.ScrollingEnabled=false ah=true local aB=al and aA.Position.X or aa:GetMouseLocation().X -local aC=math.clamp((aB-ak.UIElements.SliderIcon.AbsolutePosition.X)/ak.UIElements.SliderIcon.AbsoluteSize.X,0,1) -az=CalculateValue(ak.Value.Min+aC*(ak.Value.Max-ak.Value.Min)) +local b=math.clamp((aB-ak.UIElements.SliderIcon.AbsolutePosition.X)/ak.UIElements.SliderIcon.AbsoluteSize.X,0,1) +az=CalculateValue(ak.Value.Min+b*(ak.Value.Max-ak.Value.Min)) az=math.clamp(az,ak.Value.Min or 0,ak.Value.Max or 100) if az~=ap then -af(ak.UIElements.SliderIcon.Frame,0.05,{Size=UDim2.new(aC,0,1,0)}):Play() +af(ak.UIElements.SliderIcon.Frame,0.05,{Size=UDim2.new(b,0,1,0)}):Play() ak.UIElements.SliderContainer.TextBox.Text=FormatValue(az) if aw then aw.TitleFrame.Text=FormatValue(az)end ak.Value.Default=FormatValue(az) @@ -6126,12 +6126,12 @@ ad.SafeCallback(ak.Callback,FormatValue(az)) end am=ac.RenderStepped:Connect(function() -local aD=al and aA.Position.X or aa:GetMouseLocation().X -local aE=math.clamp((aD-ak.UIElements.SliderIcon.AbsolutePosition.X)/ak.UIElements.SliderIcon.AbsoluteSize.X,0,1) -az=CalculateValue(ak.Value.Min+aE*(ak.Value.Max-ak.Value.Min)) +local d=al and aA.Position.X or aa:GetMouseLocation().X +local f=math.clamp((d-ak.UIElements.SliderIcon.AbsolutePosition.X)/ak.UIElements.SliderIcon.AbsoluteSize.X,0,1) +az=CalculateValue(ak.Value.Min+f*(ak.Value.Max-ak.Value.Min)) if az~=ap then -af(ak.UIElements.SliderIcon.Frame,0.05,{Size=UDim2.new(aE,0,1,0)}):Play() +af(ak.UIElements.SliderIcon.Frame,0.05,{Size=UDim2.new(f,0,1,0)}):Play() ak.UIElements.SliderContainer.TextBox.Text=FormatValue(az) if aw then aw.TitleFrame.Text=FormatValue(az)end ak.Value.Default=FormatValue(az) @@ -6141,8 +6141,8 @@ end end) -an=aa.InputEnded:Connect(function(aD) -if(aD.UserInputType==Enum.UserInputType.MouseButton1 or aD.UserInputType==Enum.UserInputType.Touch)and aA==aD then +an=aa.InputEnded:Connect(function(d) +if(d.UserInputType==Enum.UserInputType.MouseButton1 or d.UserInputType==Enum.UserInputType.Touch)and aA==d then am:Disconnect() an:Disconnect() ah=false @@ -6755,12 +6755,12 @@ an.Tabs={} if an.SearchBarEnabled then if not as then -as=ai("Search...","search",an.UIElements.Menu,nil,function(ax) -for ay,az in next,an.Tabs do -if string.find(string.lower(az.Name),string.lower(ax),1,true)then -az.UIElements.TabItem.Visible=true +as=ai("Search...","search",an.UIElements.Menu,nil,function(av) +for aw,ax in next,an.Tabs do +if string.find(string.lower(ax.Name),string.lower(av),1,true)then +ax.UIElements.TabItem.Visible=true else -az.UIElements.TabItem.Visible=false +ax.UIElements.TabItem.Visible=false end RecalculateListSize() RecalculateCanvasSize() @@ -6772,38 +6772,38 @@ as.Name="SearchBar" end end -for ax,ay in next,au do -if(ay.Type~="Divider")then -local az={ -Name=typeof(ay)=="table"and ay.Title or ay, -Desc=typeof(ay)=="table"and ay.Desc or nil, -Icon=typeof(ay)=="table"and ay.Icon or nil, -Original=ay, +for av,aw in next,au do +if(aw.Type~="Divider")then +local ax={ +Name=typeof(aw)=="table"and aw.Title or aw, +Desc=typeof(aw)=="table"and aw.Desc or nil, +Icon=typeof(aw)=="table"and aw.Icon or nil, +Original=aw, Selected=false, -Locked=typeof(ay)=="table"and ay.Locked or false, +Locked=typeof(aw)=="table"and aw.Locked or false, UIElements={}, } -local aA -if az.Icon then -aA=aj.Image( -az.Icon, -az.Icon, +local ay +if ax.Icon then +ay=aj.Image( +ax.Icon, +ax.Icon, 0, am.Window.Folder, "Dropdown", true ) -aA.Size=UDim2.new(0,ao.TabIcon,0,ao.TabIcon) -aA.ImageLabel.ImageTransparency=aq=="Dropdown"and.2 or 0 -az.UIElements.TabIcon=aA +ay.Size=UDim2.new(0,ao.TabIcon,0,ao.TabIcon) +ay.ImageLabel.ImageTransparency=aq=="Dropdown"and.2 or 0 +ax.UIElements.TabIcon=ay end -az.UIElements.TabItem=aj.NewRoundFrame(ao.MenuCorner-ao.MenuPadding,"Squircle",{ +ax.UIElements.TabItem=aj.NewRoundFrame(ao.MenuCorner-ao.MenuPadding,"Squircle",{ Size=UDim2.new(1,0,0,36), -AutomaticSize=az.Desc and"Y", +AutomaticSize=ax.Desc and"Y", ImageTransparency=1, Parent=an.UIElements.Menu.Frame.ScrollingFrame, ImageColor3=Color3.new(1,1,1), -Active=not az.Locked, +Active=not ax.Locked, },{ aj.NewRoundFrame(ao.MenuCorner-ao.MenuPadding,"SquircleOutline",{ Size=UDim2.new(1,0,1,0), @@ -6843,15 +6843,15 @@ PaddingBottom=UDim.new(0,ao.TabPadding), ak("UICorner",{ CornerRadius=UDim.new(0,ao.MenuCorner-ao.MenuPadding) }), -aA, +ay, ak("Frame",{ -Size=UDim2.new(1,aA and-ao.TabPadding-ao.TabIcon or 0,0,0), +Size=UDim2.new(1,ay and-ao.TabPadding-ao.TabIcon or 0,0,0), BackgroundTransparency=1, AutomaticSize="Y", Name="Title", },{ ak("TextLabel",{ -Text=az.Name, +Text=ax.Name, TextXAlignment="Left", FontFace=Font.new(aj.Font,Enum.FontWeight.Medium), ThemeTag={ @@ -6866,7 +6866,7 @@ AutomaticSize="Y", Size=UDim2.new(1,0,0,0), }), ak("TextLabel",{ -Text=az.Desc or"", +Text=ax.Desc or"", TextXAlignment="Left", FontFace=Font.new(aj.Font,Enum.FontWeight.Regular), ThemeTag={ @@ -6880,7 +6880,7 @@ LayoutOrder=999, AutomaticSize="Y", TextWrapped=true, Size=UDim2.new(1,0,0,0), -Visible=az.Desc and true or false, +Visible=ax.Desc and true or false, Name="Desc", }), ak("UIListLayout",{ @@ -6891,119 +6891,119 @@ FillDirection="Vertical", }) },true) -if az.Locked then -az.UIElements.TabItem.Frame.Title.TextLabel.TextTransparency=0.6 -if az.UIElements.TabIcon then -az.UIElements.TabIcon.ImageLabel.ImageTransparency=0.6 +if ax.Locked then +ax.UIElements.TabItem.Frame.Title.TextLabel.TextTransparency=0.6 +if ax.UIElements.TabIcon then +ax.UIElements.TabIcon.ImageLabel.ImageTransparency=0.6 end end if an.Multi and typeof(an.Value)=="string"then -for aB,aC in next,an.Values do -if typeof(aC)=="table"then -if aC.Title==an.Value then an.Value={aC}end +for az,aA in next,an.Values do +if typeof(aA)=="table"then +if aA.Title==an.Value then an.Value={aA}end else -if aC==an.Value then an.Value={an.Value}end +if aA==an.Value then an.Value={an.Value}end end end end if an.Multi then -local aB=false +local az=false if typeof(an.Value)=="table"then -for aC,aD in ipairs(an.Value)do -local aE=typeof(aD)=="table"and aD.Title or aD -if aE==az.Name then -aB=true +for aA,aB in ipairs(an.Value)do +local b=typeof(aB)=="table"and aB.Title or aB +if b==ax.Name then +az=true break end end end -az.Selected=aB +ax.Selected=az else -local aB=typeof(an.Value)=="table"and an.Value.Title or an.Value -az.Selected=aB==az.Name +local az=typeof(an.Value)=="table"and an.Value.Title or an.Value +ax.Selected=az==ax.Name end -if az.Selected and not az.Locked then -az.UIElements.TabItem.ImageTransparency=.95 -az.UIElements.TabItem.Highlight.ImageTransparency=.75 -az.UIElements.TabItem.Frame.Title.TextLabel.TextTransparency=0 -if az.UIElements.TabIcon then -az.UIElements.TabIcon.ImageLabel.ImageTransparency=0 +if ax.Selected and not ax.Locked then +ax.UIElements.TabItem.ImageTransparency=.95 +ax.UIElements.TabItem.Highlight.ImageTransparency=.75 +ax.UIElements.TabItem.Frame.Title.TextLabel.TextTransparency=0 +if ax.UIElements.TabIcon then +ax.UIElements.TabIcon.ImageLabel.ImageTransparency=0 end end -an.Tabs[ax]=az +an.Tabs[av]=ax ar:Display() if aq=="Dropdown"then -aj.AddSignal(az.UIElements.TabItem.MouseButton1Click,function() -if az.Locked then return end +aj.AddSignal(ax.UIElements.TabItem.MouseButton1Click,function() +if ax.Locked then return end if an.Multi then -if not az.Selected then -az.Selected=true -al(az.UIElements.TabItem,0.1,{ImageTransparency=.95}):Play() -al(az.UIElements.TabItem.Highlight,0.1,{ImageTransparency=.75}):Play() -al(az.UIElements.TabItem.Frame.Title.TextLabel,0.1,{TextTransparency=0}):Play() -if az.UIElements.TabIcon then -al(az.UIElements.TabIcon.ImageLabel,0.1,{ImageTransparency=0}):Play() -end -table.insert(an.Value,az.Original) +if not ax.Selected then +ax.Selected=true +al(ax.UIElements.TabItem,0.1,{ImageTransparency=.95}):Play() +al(ax.UIElements.TabItem.Highlight,0.1,{ImageTransparency=.75}):Play() +al(ax.UIElements.TabItem.Frame.Title.TextLabel,0.1,{TextTransparency=0}):Play() +if ax.UIElements.TabIcon then +al(ax.UIElements.TabIcon.ImageLabel,0.1,{ImageTransparency=0}):Play() +end +table.insert(an.Value,ax.Original) else if not an.AllowNone and#an.Value==1 then return end -az.Selected=false -al(az.UIElements.TabItem,0.1,{ImageTransparency=1}):Play() -al(az.UIElements.TabItem.Highlight,0.1,{ImageTransparency=1}):Play() -al(az.UIElements.TabItem.Frame.Title.TextLabel,0.1,{TextTransparency=.4}):Play() -if az.UIElements.TabIcon then -al(az.UIElements.TabIcon.ImageLabel,0.1,{ImageTransparency=.2}):Play() +ax.Selected=false +al(ax.UIElements.TabItem,0.1,{ImageTransparency=1}):Play() +al(ax.UIElements.TabItem.Highlight,0.1,{ImageTransparency=1}):Play() +al(ax.UIElements.TabItem.Frame.Title.TextLabel,0.1,{TextTransparency=.4}):Play() +if ax.UIElements.TabIcon then +al(ax.UIElements.TabIcon.ImageLabel,0.1,{ImageTransparency=.2}):Play() end -for aB,aC in next,an.Value do -if typeof(aC)=="table"and(aC.Title==az.Name)or(aC==az.Name)then -table.remove(an.Value,aB) +for az,aA in next,an.Value do +if typeof(aA)=="table"and(aA.Title==ax.Name)or(aA==ax.Name)then +table.remove(an.Value,az) break end end end else -for aB,aC in next,an.Tabs do -al(aC.UIElements.TabItem,0.1,{ImageTransparency=1}):Play() -al(aC.UIElements.TabItem.Highlight,0.1,{ImageTransparency=1}):Play() -al(aC.UIElements.TabItem.Frame.Title.TextLabel,0.1,{TextTransparency=.4}):Play() -if aC.UIElements.TabIcon then -al(aC.UIElements.TabIcon.ImageLabel,0.1,{ImageTransparency=.2}):Play() +for az,aA in next,an.Tabs do +al(aA.UIElements.TabItem,0.1,{ImageTransparency=1}):Play() +al(aA.UIElements.TabItem.Highlight,0.1,{ImageTransparency=1}):Play() +al(aA.UIElements.TabItem.Frame.Title.TextLabel,0.1,{TextTransparency=.4}):Play() +if aA.UIElements.TabIcon then +al(aA.UIElements.TabIcon.ImageLabel,0.1,{ImageTransparency=.2}):Play() end -aC.Selected=false +aA.Selected=false end -az.Selected=true -al(az.UIElements.TabItem,0.1,{ImageTransparency=.95}):Play() -al(az.UIElements.TabItem.Highlight,0.1,{ImageTransparency=.75}):Play() -al(az.UIElements.TabItem.Frame.Title.TextLabel,0.1,{TextTransparency=0}):Play() -if az.UIElements.TabIcon then -al(az.UIElements.TabIcon.ImageLabel,0.1,{ImageTransparency=0}):Play() +ax.Selected=true +al(ax.UIElements.TabItem,0.1,{ImageTransparency=.95}):Play() +al(ax.UIElements.TabItem.Highlight,0.1,{ImageTransparency=.75}):Play() +al(ax.UIElements.TabItem.Frame.Title.TextLabel,0.1,{TextTransparency=0}):Play() +if ax.UIElements.TabIcon then +al(ax.UIElements.TabIcon.ImageLabel,0.1,{ImageTransparency=0}):Play() end -an.Value=az.Original +an.Value=ax.Original end Callback() end) elseif aq=="Menu"then -if not az.Locked then -aj.AddSignal(az.UIElements.TabItem.MouseEnter,function() -al(az.UIElements.TabItem,0.08,{ImageTransparency=.95}):Play() +if not ax.Locked then +aj.AddSignal(ax.UIElements.TabItem.MouseEnter,function() +al(ax.UIElements.TabItem,0.08,{ImageTransparency=.95}):Play() end) -aj.AddSignal(az.UIElements.TabItem.InputEnded,function() -al(az.UIElements.TabItem,0.08,{ImageTransparency=1}):Play() +aj.AddSignal(ax.UIElements.TabItem.InputEnded,function() +al(ax.UIElements.TabItem,0.08,{ImageTransparency=1}):Play() end) end -aj.AddSignal(az.UIElements.TabItem.MouseButton1Click,function() -if az.Locked then return end -Callback(ay.Callback or function()end) +aj.AddSignal(ax.UIElements.TabItem.MouseButton1Click,function() +if ax.Locked then return end +Callback(aw.Callback or function()end) end) end @@ -7014,16 +7014,16 @@ else a.load'I' end end -local az=an.MenuWidth or 0 -if az==0 then -for aA,aB in next,an.Tabs do -if aB.UIElements.TabItem.Frame.UIListLayout then -az=math.max(az,aB.UIElements.TabItem.Frame.UIListLayout.AbsoluteContentSize.X) +local av=an.MenuWidth or 0 +if av==0 then +for aw,ax in next,an.Tabs do +if ax.UIElements.TabItem.Frame.UIListLayout then +av=math.max(av,ax.UIElements.TabItem.Frame.UIListLayout.AbsoluteContentSize.X) end end end -an.UIElements.MenuCanvas.Size=UDim2.new(0,az+6+6+5+5+18+6+6,an.UIElements.MenuCanvas.Size.Y.Scale,an.UIElements.MenuCanvas.Size.Y.Offset) +an.UIElements.MenuCanvas.Size=UDim2.new(0,av+6+6+5+5+18+6+6,an.UIElements.MenuCanvas.Size.Y.Scale,an.UIElements.MenuCanvas.Size.Y.Offset) Callback() an.Values=au @@ -7800,7 +7800,7 @@ PaddingBottom=UDim.new(0,aw.TextPadding/2), -local aC=ae("Frame",{ +local b=ae("Frame",{ Size=UDim2.new(0,14,0,14), AnchorPoint=Vector2.new(0.5,0.5), Position=UDim2.new(0.5,0,0,0), @@ -7853,7 +7853,7 @@ NumberSequenceKeypoint.new(1.0,0.1), }) }), -aC, +b, }) aw.UIElements.Inputs=ae("Frame",{ @@ -7873,7 +7873,7 @@ FillDirection="Vertical", -local aD=ae("Frame",{ +local d=ae("Frame",{ BackgroundColor3=aw.Default, Size=UDim2.fromScale(1,1), BackgroundTransparency=aw.Transparency, @@ -7925,10 +7925,10 @@ NumberSequenceKeypoint.new(1.0,0.1), -aD, +d, }) -local aE=ae("Frame",{ +local f=ae("Frame",{ BackgroundColor3=aw.Default, Size=UDim2.fromScale(1,1), BackgroundTransparency=0, @@ -7981,31 +7981,31 @@ NumberSequenceKeypoint.new(1.0,0.1), } }) }), -aE, +f, }) -local aF={} +local g={} -for b=0,1,0.1 do -table.insert(aF,ColorSequenceKeypoint.new(b,Color3.fromHSV(b,1,1))) +for h=0,1,0.1 do +table.insert(g,ColorSequenceKeypoint.new(h,Color3.fromHSV(h,1,1))) end -local b=ae("UIGradient",{ -Color=ColorSequence.new(aF), +local h=ae("UIGradient",{ +Color=ColorSequence.new(g), Rotation=90, }) -local d=ae("Frame",{ +local j=ae("Frame",{ Size=UDim2.new(1,0,1,0), Position=UDim2.new(0,0,0,0), BackgroundTransparency=1, }) -local f=ae("Frame",{ +local l=ae("Frame",{ Size=UDim2.new(0,14,0,14), AnchorPoint=Vector2.new(0.5,0.5), Position=UDim2.new(0.5,0,0,0), -Parent=d, +Parent=j, BackgroundColor3=aw.Default @@ -8022,7 +8022,7 @@ CornerRadius=UDim.new(1,0), }) }) -local g=ae("Frame",{ +local m=ae("Frame",{ Size=UDim2.fromOffset(6,192), Position=UDim2.fromOffset(180,40+aw.TextPadding), Parent=ay.UIElements.Main, @@ -8030,13 +8030,13 @@ Parent=ay.UIElements.Main, ae("UICorner",{ CornerRadius=UDim.new(1,0), }), -b, -d, +h, +j, }) -function CreateNewInput(h,j) -local l=aq(h,nil,aw.UIElements.Inputs) +function CreateNewInput(p,r) +local u=aq(p,nil,aw.UIElements.Inputs) ae("TextLabel",{ BackgroundTransparency=1, @@ -8049,40 +8049,40 @@ TextColor3="Placeholder", }, AnchorPoint=Vector2.new(1,0.5), Position=UDim2.new(1,-12,0.5,0), -Parent=l.Frame, -Text=h, +Parent=u.Frame, +Text=p, }) ae("UIScale",{ -Parent=l, +Parent=u, Scale=.85, }) -l.Frame.Frame.TextBox.Text=j -l.Size=UDim2.new(0,150,0,42) +u.Frame.Frame.TextBox.Text=r +u.Size=UDim2.new(0,150,0,42) -return l +return u end -local function ToRGB(h) +local function ToRGB(p) return{ -R=math.floor(h.R*255), -G=math.floor(h.G*255), -B=math.floor(h.B*255) +R=math.floor(p.R*255), +G=math.floor(p.G*255), +B=math.floor(p.B*255) } end -local h=CreateNewInput("Hex","#"..aw.Default:ToHex()) +local p=CreateNewInput("Hex","#"..aw.Default:ToHex()) -local j=CreateNewInput("Red",ToRGB(aw.Default).R) -local l=CreateNewInput("Green",ToRGB(aw.Default).G) -local m=CreateNewInput("Blue",ToRGB(aw.Default).B) -local p +local r=CreateNewInput("Red",ToRGB(aw.Default).R) +local u=CreateNewInput("Green",ToRGB(aw.Default).G) +local v=CreateNewInput("Blue",ToRGB(aw.Default).B) +local x if aw.Transparency then -p=CreateNewInput("Alpha",((1-aw.Transparency)*100).."%") +x=CreateNewInput("Alpha",((1-aw.Transparency)*100).."%") end -local r=ae("Frame",{ +local z=ae("Frame",{ Size=UDim2.new(1,0,0,40), AutomaticSize="Y", Position=UDim2.new(0,0,0,254+aw.TextPadding), @@ -8103,7 +8103,7 @@ HorizontalAlignment="Right", }) -local u={ +local A={ { Title="Cancel", Variant="Secondary", @@ -8117,10 +8117,10 @@ Callback=function()av(Color3.fromHSV(aw.Hue,aw.Sat,aw.Vib),aw.Transparency)end } } -for v,x in next,u do -local B=ap(x.Title,x.Icon,x.Callback,x.Variant,r,ay,false) -B.Size=UDim2.new(0.5,-3,0,40) -B.AutomaticSize="None" +for B,C in next,A do +local F=ap(C.Title,C.Icon,C.Callback,C.Variant,z,ay,false) +F.Size=UDim2.new(0.5,-3,0,40) +F.AutomaticSize="None" end @@ -8210,24 +8210,24 @@ function aw.Update(G,H,J) if H then az,aA,aB=Color3.toHSV(H)else az,aA,aB=aw.Hue,aw.Sat,aw.Vib end aw.UIElements.SatVibMap.BackgroundColor3=Color3.fromHSV(az,1,1) -aC.Position=UDim2.new(aA,0,1-aB,0) -aC.BackgroundColor3=Color3.fromHSV(az,aA,aB) -aE.BackgroundColor3=Color3.fromHSV(az,aA,aB) -f.BackgroundColor3=Color3.fromHSV(az,1,1) -f.Position=UDim2.new(0.5,0,az,0) +b.Position=UDim2.new(aA,0,1-aB,0) +b.BackgroundColor3=Color3.fromHSV(az,aA,aB) +f.BackgroundColor3=Color3.fromHSV(az,aA,aB) +l.BackgroundColor3=Color3.fromHSV(az,1,1) +l.Position=UDim2.new(0.5,0,az,0) -h.Frame.Frame.TextBox.Text="#"..Color3.fromHSV(az,aA,aB):ToHex() -j.Frame.Frame.TextBox.Text=ToRGB(Color3.fromHSV(az,aA,aB)).R -l.Frame.Frame.TextBox.Text=ToRGB(Color3.fromHSV(az,aA,aB)).G -m.Frame.Frame.TextBox.Text=ToRGB(Color3.fromHSV(az,aA,aB)).B +p.Frame.Frame.TextBox.Text="#"..Color3.fromHSV(az,aA,aB):ToHex() +r.Frame.Frame.TextBox.Text=ToRGB(Color3.fromHSV(az,aA,aB)).R +u.Frame.Frame.TextBox.Text=ToRGB(Color3.fromHSV(az,aA,aB)).G +v.Frame.Frame.TextBox.Text=ToRGB(Color3.fromHSV(az,aA,aB)).B if J or aw.Transparency then -aE.BackgroundTransparency=aw.Transparency or J +f.BackgroundTransparency=aw.Transparency or J F.BackgroundColor3=Color3.fromHSV(az,aA,aB) C.BackgroundColor3=Color3.fromHSV(az,aA,aB) C.BackgroundTransparency=aw.Transparency or J C.Position=UDim2.new(0.5,0,1-aw.Transparency or J,0) -p.Frame.Frame.TextBox.Text=aw:Round((1-aw.Transparency or J)*100,0).."%" +x.Frame.Frame.TextBox.Text=aw:Round((1-aw.Transparency or J)*100,0).."%" end end @@ -8247,9 +8247,9 @@ local function clamp(G,H,J) return math.clamp(tonumber(G)or 0,H,J) end -aa.AddSignal(h.Frame.Frame.TextBox.FocusLost,function(G) +aa.AddSignal(p.Frame.Frame.TextBox.FocusLost,function(G) if G then -local H=h.Frame.Frame.TextBox.Text:gsub("#","") +local H=p.Frame.Frame.TextBox.Text:gsub("#","") local J,L=pcall(Color3.fromHex,H) if J and typeof(L)=="Color3"then aw.Hue,aw.Sat,aw.Vib=Color3.toHSV(L) @@ -8275,14 +8275,14 @@ end end) end -updateColorFromInput(j,"R") -updateColorFromInput(l,"G") -updateColorFromInput(m,"B") +updateColorFromInput(r,"R") +updateColorFromInput(u,"G") +updateColorFromInput(v,"B") if aw.Transparency then -aa.AddSignal(p.Frame.Frame.TextBox.FocusLost,function(G) +aa.AddSignal(x.Frame.Frame.TextBox.FocusLost,function(G) if G then -local H=p.Frame.Frame.TextBox +local H=x.Frame.Frame.TextBox local J=clamp(H.Text,0,100) H.Text=tostring(J) @@ -8315,11 +8315,11 @@ end end end) -aa.AddSignal(g.InputBegan,function(H) +aa.AddSignal(m.InputBegan,function(H) if H.UserInputType==Enum.UserInputType.MouseButton1 or H.UserInputType==Enum.UserInputType.Touch then while aj:IsMouseButtonPressed(Enum.UserInputType.MouseButton1)do -local J=g.AbsolutePosition.Y -local L=J+g.AbsoluteSize.Y +local J=m.AbsolutePosition.Y +local L=J+m.AbsoluteSize.Y local M=math.clamp(ao.Y,J,L) aw.Hue=((M-J)/(L-J)) @@ -8828,26 +8828,26 @@ table.insert(aq,at) end end -local au=#aq -if au==0 then return end +local as=#aq +if as==0 then return end -local av=1/au +local at=1/as -local aw=ap*(au-1) +local au=ap*(as-1) -local ax=-(aw+ar) +local av=-(au+ar) -local ay=math.floor(ax/au) -local az=ax-(ay*au) +local aw=math.floor(av/as) +local ax=av-(aw*as) -for aA,aB in next,aq do -local aC=ay -if aA<=math.abs(az)then -aC=aC-1 +for ay,az in next,aq do +local aA=aw +if ay<=math.abs(ax)then +aA=aA-1 end -if aB.ElementFrame then -aB.ElementFrame.Size=UDim2.new(av,aC,1,0) +if az.ElementFrame then +az.ElementFrame.Size=UDim2.new(at,aA,1,0) end end end, @@ -8895,57 +8895,57 @@ ar.WindUI=aj ar.UIScale=am ar.ElementsModule=al local -as, au=ap:New(ar) +as, at=ap:New(ar) if ar.Flag and typeof(ar.Flag)=="string"then if ah.CurrentConfig then -ah.CurrentConfig:Register(ar.Flag,au) +ah.CurrentConfig:Register(ar.Flag,at) if ah.PendingConfigData and ah.PendingConfigData[ar.Flag]then -local av=ah.PendingConfigData[ar.Flag] +local au=ah.PendingConfigData[ar.Flag] -local aw=ah.ConfigManager -if aw.Parser[av.__type]then +local av=ah.ConfigManager +if av.Parser[au.__type]then task.defer(function() -local ax,ay=pcall(function() -aw.Parser[av.__type].Load(au,av) +local aw,ax=pcall(function() +av.Parser[au.__type].Load(at,au) end) -if ax then +if aw then ah.PendingConfigData[ar.Flag]=nil else -warn("[ WindUI ] Failed to apply pending config for '"..ar.Flag.."': "..tostring(ay)) +warn("[ WindUI ] Failed to apply pending config for '"..ar.Flag.."': "..tostring(ax)) end end) end end else ah.PendingFlags=ah.PendingFlags or{} -ah.PendingFlags[ar.Flag]=au +ah.PendingFlags[ar.Flag]=at end end -local av -for aw,ax in next,au do -if typeof(ax)=="table"and aw~="ElementFrame"and aw:match"Frame$"then -av=ax +local au +for av,aw in next,at do +if typeof(aw)=="table"and av~="ElementFrame"and av:match"Frame$"then +au=aw break end end -if av then -au.ElementFrame=av.UIElements.Main -function au.SetTitle(ay,az) -av:SetTitle(az) +if au then +at.ElementFrame=au.UIElements.Main +function at.SetTitle(av,aw) +au:SetTitle(aw) end -function au.SetDesc(ay,az) -av:SetDesc(az) +function at.SetDesc(av,aw) +au:SetDesc(aw) end -function au.Highlight(ay) -av:Highlight() +function at.Highlight(av) +au:Highlight() end -function au.Destroy(ay) -av:Destroy() +function at.Destroy(av) +au:Destroy() table.remove(ah.AllElements,ar.GlobalIndex) table.remove(aa.Elements,ar.Index) @@ -8956,36 +8956,36 @@ end -ah.AllElements[ar.Index]=au -aa.Elements[ar.Index]=au -if an then an.Elements[ar.Index]=au end +ah.AllElements[ar.Index]=at +aa.Elements[ar.Index]=at +if an then an.Elements[ar.Index]=at end if ah.NewElements then aa:UpdateAllElementShapes(aa) end if ak then -ak(au,aa.Elements) +ak(at,aa.Elements) end -return au +return at end end -function aa.UpdateAllElementShapes(aq,ar) -for as,au in next,ar.Elements do -local av -for aw,ax in pairs(au)do -if typeof(ax)=="table"and aw:match"Frame$"then -av=ax +function aa.UpdateAllElementShapes(ao,ap) +for aq,ar in next,ap.Elements do +local as +for at,au in pairs(ar)do +if typeof(au)=="table"and at:match"Frame$"then +as=au break end end -if av then +if as then -av.Index=as -if av.UpdateShape then +as.Index=aq +if as.UpdateShape then -av.UpdateShape(ar) +as.UpdateShape(ap) end end end @@ -9148,7 +9148,7 @@ PaddingBottom=UDim.new(0,ap.TabPaddingY), local ar=0 local as -local au +local at if ap.Icon then as=af.Image( @@ -9213,7 +9213,7 @@ end -au=af.Image( +at=af.Image( ap.Icon, ap.Icon..":"..ap.Title, 0, @@ -9222,8 +9222,8 @@ ap.__type, true, ap.IconThemed ) -au.Size=UDim2.new(0,16,0,16) -au.ImageLabel.ImageTransparency=not ap.Locked and 0 or.7 +at.Size=UDim2.new(0,16,0,16) +at.ImageLabel.ImageTransparency=not ap.Locked and 0 or.7 ar=-30 @@ -9274,7 +9274,7 @@ BackgroundTransparency=1, Visible=ap.ShowTabTitle or false, Name="TabTitle" },{ -au, +at, ah("TextLabel",{ Text=ap.Title, ThemeTag={ @@ -9329,10 +9329,10 @@ if Window.ScrollBarEnabled then al(ap.UIElements.ContainerFrame,ap.UIElements.ContainerFrameCanvas,Window,3) end +local au local av local aw -local ax -local ay=false +local ax=false @@ -9340,22 +9340,22 @@ if ap.Desc then af.AddSignal(ap.UIElements.Main.InputBegan,function() -ay=true -aw=task.spawn(function() +ax=true +av=task.spawn(function() task.wait(0.35) -if ay and not av then -av=ak(ap.Desc,am.ToolTipParent,true) -av.Container.AnchorPoint=Vector2.new(0.5,0.5) +if ax and not au then +au=ak(ap.Desc,am.ToolTipParent,true) +au.Container.AnchorPoint=Vector2.new(0.5,0.5) local function updatePosition() -if av then -av.Container.Position=UDim2.new(0,ae.X,0,ae.Y-4) +if au then +au.Container.Position=UDim2.new(0,ae.X,0,ae.Y-4) end end updatePosition() -ax=ae.Move:Connect(updatePosition) -av:Open() +aw=ae.Move:Connect(updatePosition) +au:Open() end end) end) @@ -9369,18 +9369,18 @@ end end) af.AddSignal(ap.UIElements.Main.InputEnded,function() if ap.Desc then -ay=false +ax=false +if av then +task.cancel(av) +av=nil +end if aw then -task.cancel(aw) +aw:Disconnect() aw=nil end -if ax then -ax:Disconnect() -ax=nil -end -if av then -av:Close() -av=nil +if au then +au:Close() +au=nil end end @@ -9391,14 +9391,14 @@ end) -function ap.ScrollToTheElement(az,aA) +function ap.ScrollToTheElement(ay,az) ap.UIElements.ContainerFrame.ScrollingEnabled=false aj(ap.UIElements.ContainerFrame,.45, { CanvasPosition=Vector2.new( 0, -ap.Elements[aA].ElementFrame.AbsolutePosition.Y +ap.Elements[az].ElementFrame.AbsolutePosition.Y -ap.UIElements.ContainerFrame.AbsolutePosition.Y -ap.UIElements.ContainerFrame.UIPadding.PaddingTop.Offset ) @@ -9409,8 +9409,8 @@ Enum.EasingStyle.Quint,Enum.EasingDirection.Out task.spawn(function() task.wait(.48) -if ap.Elements[aA].Highlight then -ap.Elements[aA]:Highlight() +if ap.Elements[az].Highlight then +ap.Elements[az]:Highlight() ap.UIElements.ContainerFrame.ScrollingEnabled=true end end) @@ -9422,56 +9422,56 @@ end -local az=a.load'T' +local ay=a.load'T' -az.Load(ap,ap.UIElements.ContainerFrame,az.Elements,Window,WindUI,nil,az,ao) +ay.Load(ap,ap.UIElements.ContainerFrame,ay.Elements,Window,WindUI,nil,ay,ao) -function ap.LockAll(aA) +function ap.LockAll(az) -for aB,aC in next,Window.AllElements do -if aC.Tab and aC.Tab.Index and aC.Tab.Index==ap.Index and aC.Lock then -aC:Lock() +for aA,aB in next,Window.AllElements do +if aB.Tab and aB.Tab.Index and aB.Tab.Index==ap.Index and aB.Lock then +aB:Lock() end end end -function ap.UnlockAll(aA) -for aB,aC in next,Window.AllElements do -if aC.Tab and aC.Tab.Index and aC.Tab.Index==ap.Index and aC.Unlock then -aC:Unlock() +function ap.UnlockAll(az) +for aA,aB in next,Window.AllElements do +if aB.Tab and aB.Tab.Index and aB.Tab.Index==ap.Index and aB.Unlock then +aB:Unlock() end end end -function ap.GetLocked(aA) -local aB={} +function ap.GetLocked(az) +local aA={} -for aC,aD in next,Window.AllElements do -if aD.Tab and aD.Tab.Index and aD.Tab.Index==ap.Index and aD.Locked==true then -table.insert(aB,aD) +for aB,b in next,Window.AllElements do +if b.Tab and b.Tab.Index and b.Tab.Index==ap.Index and b.Locked==true then +table.insert(aA,b) end end -return aB +return aA end -function ap.GetUnlocked(aA) -local aB={} +function ap.GetUnlocked(az) +local aA={} -for aC,aD in next,Window.AllElements do -if aD.Tab and aD.Tab.Index and aD.Tab.Index==ap.Index and aD.Locked==false then -table.insert(aB,aD) +for aB,b in next,Window.AllElements do +if b.Tab and b.Tab.Index and b.Tab.Index==ap.Index and b.Locked==false then +table.insert(aA,b) end end -return aB +return aA end -function ap.Select(aA) +function ap.Select(az) return am:SelectTab(ap.Index) end task.spawn(function() -local aA=ah("Frame",{ +local az=ah("Frame",{ BackgroundTransparency=1, Size=UDim2.new(1,0,1,-Window.UIElements.Main.Main.Topbar.AbsoluteSize.Y), Parent=ap.UIElements.ContainerFrame @@ -9511,10 +9511,10 @@ FontFace=Font.new(af.Font,Enum.FontWeight.Medium), -local aB -aB=af.AddSignal(ap.UIElements.ContainerFrame.ChildAdded,function() -aA.Visible=false -aB:Disconnect() +local aA +aA=af.AddSignal(ap.UIElements.ContainerFrame.ChildAdded,function() +az.Visible=false +aA:Disconnect() end) end) @@ -9550,9 +9550,9 @@ am.Tabs[ao].Selected=true task.spawn(function() -for ar,as in next,am.Containers do -as.AnchorPoint=Vector2.new(0,0.05) -as.Visible=false +for ap,aq in next,am.Containers do +aq.AnchorPoint=Vector2.new(0,0.05) +aq.Visible=false end am.Containers[ao].Visible=true aj(am.Containers[ao],0.15,{AnchorPoint=Vector2.new(0,0)},Enum.EasingStyle.Quart,Enum.EasingDirection.Out):Play() @@ -9680,16 +9680,16 @@ VerticalAlignment="Bottom", }) -function ap.Tab(au,av) +function ap.Tab(at,au) if not ap.Expandable then ap.Expandable=true ar.Visible=true end -av.Parent=as.Content -return aj.New(av,an) +au.Parent=as.Content +return aj.New(au,an) end -function ap.Open(au) +function ap.Open(at) if ap.Expandable then ap.Opened=true ah(as,0.33,{ @@ -9699,7 +9699,7 @@ Size=UDim2.new(1,0,0,ap.HeaderSize+(as.Content.AbsoluteSize.Y/an)) ah(ar.ImageLabel,0.1,{Rotation=180},Enum.EasingStyle.Quint,Enum.EasingDirection.Out):Play() end end -function ap.Close(au) +function ap.Close(at) if ap.Expandable then ap.Opened=false ah(as,0.26,{ @@ -9959,12 +9959,12 @@ NumberSequenceKeypoint.new(1,0.6) }) }) -local function CreateSearchTab(au,av,aw,ax,ay,az) -local aA=ah("TextButton",{ +local function CreateSearchTab(at,au,av,aw,ax,ay) +local az=ah("TextButton",{ Size=UDim2.new(1,0,0,0), AutomaticSize="Y", BackgroundTransparency=1, -Parent=ax or nil +Parent=aw or nil },{ af.NewRoundFrame(an.Radius-11,"Squircle",{ Size=UDim2.new(1,0,0,0), @@ -10002,9 +10002,9 @@ PaddingRight=UDim.new(0,an.Padding), PaddingBottom=UDim.new(0,an.Padding-2), }), ah("ImageLabel",{ -Image=af.Icon(aw)[1], -ImageRectSize=af.Icon(aw)[2].ImageRectSize, -ImageRectOffset=af.Icon(aw)[2].ImageRectPosition, +Image=af.Icon(av)[1], +ImageRectSize=af.Icon(av)[2].ImageRectSize, +ImageRectOffset=af.Icon(av)[2].ImageRectPosition, BackgroundTransparency=1, ThemeTag={ ImageColor3="Icon", @@ -10017,7 +10017,7 @@ Size=UDim2.new(1,-an.IconSize-an.Padding,0,0), BackgroundTransparency=1, },{ ah("TextLabel",{ -Text=au, +Text=at, ThemeTag={ TextColor3="Text", }, @@ -10031,8 +10031,8 @@ AutomaticSize="Y", Name="Title" }), ah("TextLabel",{ -Text=av or"", -Visible=av and true or false, +Text=au or"", +Visible=au and true or false, ThemeTag={ TextColor3="Text", }, @@ -10062,7 +10062,7 @@ Name="ParentContainer", Size=UDim2.new(1,-an.Padding,0,0), AutomaticSize="Y", BackgroundTransparency=1, -Visible=ay, +Visible=ax, },{ af.NewRoundFrame(99,"Squircle",{ @@ -10093,114 +10093,114 @@ HorizontalAlignment="Right" -aA.Main.Size=UDim2.new( +az.Main.Size=UDim2.new( 1, 0, 0, -aA.Main.Outline.Frame.Desc.Visible and(((an.Padding-2)*2)+aA.Main.Outline.Frame.Title.TextBounds.Y+6+aA.Main.Outline.Frame.Desc.TextBounds.Y) -or(((an.Padding-2)*2)+aA.Main.Outline.Frame.Title.TextBounds.Y) +az.Main.Outline.Frame.Desc.Visible and(((an.Padding-2)*2)+az.Main.Outline.Frame.Title.TextBounds.Y+6+az.Main.Outline.Frame.Desc.TextBounds.Y) +or(((an.Padding-2)*2)+az.Main.Outline.Frame.Title.TextBounds.Y) ) -af.AddSignal(aA.Main.MouseEnter,function() -aj(aA.Main,.04,{ImageTransparency=.95}):Play() -aj(aA.Main.Outline,.04,{ImageTransparency=.7}):Play() +af.AddSignal(az.Main.MouseEnter,function() +aj(az.Main,.04,{ImageTransparency=.95}):Play() +aj(az.Main.Outline,.04,{ImageTransparency=.7}):Play() end) -af.AddSignal(aA.Main.InputEnded,function() -aj(aA.Main,.08,{ImageTransparency=1}):Play() -aj(aA.Main.Outline,.08,{ImageTransparency=1}):Play() +af.AddSignal(az.Main.InputEnded,function() +aj(az.Main,.08,{ImageTransparency=1}):Play() +aj(az.Main.Outline,.08,{ImageTransparency=1}):Play() end) -af.AddSignal(aA.Main.MouseButton1Click,function() -if az then -az() +af.AddSignal(az.Main.MouseButton1Click,function() +if ay then +ay() end end) -return aA +return az end -local function ContainsText(au,av) -if not av or av==""then +local function ContainsText(at,au) +if not au or au==""then return false end -if not au or au==""then +if not at or at==""then return false end +local av=string.lower(at) local aw=string.lower(au) -local ax=string.lower(av) -return string.find(aw,ax,1,true)~=nil +return string.find(av,aw,1,true)~=nil end -local function Search(au) -if not au or au==""then +local function Search(at) +if not at or at==""then return{} end -local av={} -for aw,ax in next,ak.Tabs do -local ay=ContainsText(ax.Title or"",au) -local az={} +local au={} +for av,aw in next,ak.Tabs do +local ax=ContainsText(aw.Title or"",at) +local ay={} -for aA,aB in next,ax.Elements do -if aB.__type~="Section"then -local aC=ContainsText(aB.Title or"",au) -local aD=ContainsText(aB.Desc or"",au) - -if aC or aD then -az[aA]={ -Title=aB.Title, -Desc=aB.Desc, -Original=aB, -__type=aB.__type, -Index=aA, +for az,aA in next,aw.Elements do +if aA.__type~="Section"then +local aB=ContainsText(aA.Title or"",at) +local b=ContainsText(aA.Desc or"",at) + +if aB or b then +ay[az]={ +Title=aA.Title, +Desc=aA.Desc, +Original=aA, +__type=aA.__type, +Index=az, } end end end -if ay or next(az)~=nil then -av[aw]={ -Tab=ax, -Title=ax.Title, -Icon=ax.Icon, -Elements=az, +if ax or next(ay)~=nil then +au[av]={ +Tab=aw, +Title=aw.Title, +Icon=aw.Icon, +Elements=ay, } end end -return av +return au end -function an.Search(au,av) -av=av or"" +function an.Search(at,au) +au=au or"" -local aw=Search(av) +local av=Search(au) aq.Visible=true ar.Frame.Results.Frame.Visible=true -for ax,ay in next,aq:GetChildren()do -if ay.ClassName~="UIListLayout"and ay.ClassName~="UIPadding"then -ay:Destroy() +for aw,ax in next,aq:GetChildren()do +if ax.ClassName~="UIListLayout"and ax.ClassName~="UIPadding"then +ax:Destroy() end end -if aw and next(aw)~=nil then -for az,aA in next,aw do -local aB=an.Icons.Tab -local aC=CreateSearchTab(aA.Title,nil,aB,aq,true,function() +if av and next(av)~=nil then +for aw,ax in next,av do +local ay=an.Icons.Tab +local az=CreateSearchTab(ax.Title,nil,ay,aq,true,function() an:Close() -ak:SelectTab(az) +ak:SelectTab(aw) end) -if aA.Elements and next(aA.Elements)~=nil then -for aD,aE in next,aA.Elements do -local aF=an.Icons[aE.__type] -CreateSearchTab(aE.Title,aE.Desc,aF,aC:FindFirstChild"ParentContainer"and aC.ParentContainer.Frame or nil,false,function() +if ax.Elements and next(ax.Elements)~=nil then +for aA,aB in next,ax.Elements do +local b=an.Icons[aB.__type] +CreateSearchTab(aB.Title,aB.Desc,b,az:FindFirstChild"ParentContainer"and az.ParentContainer.Frame or nil,false,function() an:Close() -ak:SelectTab(az) -if aA.Tab.ScrollToTheElement then +ak:SelectTab(aw) +if ax.Tab.ScrollToTheElement then -aA.Tab:ScrollToTheElement(aE.Index) +ax.Tab:ScrollToTheElement(aB.Index) end end) @@ -10208,7 +10208,7 @@ end) end end end -elseif av~=""then +elseif au~=""then ah("TextLabel",{ Size=UDim2.new(1,0,0,70), BackgroundTransparency=1, @@ -10249,7 +10249,7 @@ math.clamp(aq.UIListLayout.AbsoluteContentSize.Y+(an.Padding*2),0,an.MaxHeight) end) -function an.Open(au) +function an.Open(at) task.spawn(function() ar.Frame.Visible=true as.Visible=true @@ -10257,7 +10257,7 @@ aj(as.UIScale,.12,{Scale=1},Enum.EasingStyle.Quint,Enum.EasingDirection.Out):Pla end) end -function an.Close(au) +function an.Close(at) task.spawn(function() am() ar.Frame.Visible=false @@ -10381,12 +10381,12 @@ UIPadding=(as.NewElements and 10 or 13), UICorner=as.ElementsRadius or(as.NewElements and 23 or 12), } -local au=as.Size or UDim2.new(0,580,0,460) +local at=as.Size or UDim2.new(0,580,0,460) as.Size=UDim2.new( -au.X.Scale, -math.clamp(au.X.Offset,as.MinSize.X,as.MaxSize.X), -au.Y.Scale, -math.clamp(au.Y.Offset,as.MinSize.Y,as.MaxSize.Y) +at.X.Scale, +math.clamp(at.X.Offset,as.MinSize.X,as.MaxSize.X), +at.Y.Scale, +math.clamp(at.Y.Offset,as.MinSize.Y,as.MaxSize.Y) ) if as.Topbar=={}then @@ -10408,7 +10408,7 @@ makefolder(as.Folder.."/assets") end end -local av=ak("UICorner",{ +local au=ak("UICorner",{ CornerRadius=UDim.new(0,as.UICorner) }) @@ -10418,12 +10418,12 @@ end if as.Acrylic then local -aw, ax=ah.AcrylicPaint{UseAcrylic=as.Acrylic} +av=ah.AcrylicPaint{UseAcrylic=as.Acrylic} -as.AcrylicPaint=aw +as.AcrylicPaint=av end -local aw=ak("Frame",{ +local av=ak("Frame",{ Size=UDim2.new(0,32,0,32), Position=UDim2.new(1,0,1,0), AnchorPoint=Vector2.new(.5,.5), @@ -10440,7 +10440,7 @@ AnchorPoint=Vector2.new(0.5,0.5), ImageTransparency=1, }) }) -local ax=aj.NewRoundFrame(as.UICorner,"Squircle",{ +local aw=aj.NewRoundFrame(as.UICorner,"Squircle",{ Size=UDim2.new(1,0,1,0), ImageTransparency=1, ImageColor3=Color3.new(0,0,0), @@ -10459,7 +10459,7 @@ ImageTransparency=1, }), }) -local ay=aj.NewRoundFrame(as.UICorner,"Squircle",{ +local ax=aj.NewRoundFrame(as.UICorner,"Squircle",{ Size=UDim2.new(1,0,1,0), ImageTransparency=1, ImageColor3=Color3.new(0,0,0), @@ -10568,7 +10568,7 @@ PaddingBottom=UDim.new(0,as.UIPadding/2), }) }) -local az=ak("ImageLabel",{ +local ay=ak("ImageLabel",{ Image="rbxassetid://8992230677", ThemeTag={ ImageColor3="WindowShadow", @@ -10603,19 +10603,19 @@ end -local aA +local az if as.User then local function GetUserThumb()local -aB, aC=aa(game:GetService"Players"):GetUserThumbnailAsync( +aA=aa(game:GetService"Players"):GetUserThumbnailAsync( as.User.Anonymous and 1 or game.Players.LocalPlayer.UserId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size420x420 ) -return aB +return aA end -aA=ak("TextButton",{ +az=ak("TextButton",{ Size=UDim2.new(0, (as.UIElements.SideBarContainer.AbsoluteSize.X)-(as.UIPadding/2), 0, @@ -10720,22 +10720,22 @@ PaddingRight=UDim.new(0,as.UIPadding/2), }) -function as.User.Enable(aB) +function as.User.Enable(aA) as.User.Enabled=true al(as.UIElements.SideBarContainer,.25,{Size=UDim2.new(0,as.SideBarWidth,1,-as.Topbar.Height-42-(as.UIPadding*2))},Enum.EasingStyle.Quint,Enum.EasingDirection.Out):Play() -aA.Visible=true +az.Visible=true end -function as.User.Disable(aB) +function as.User.Disable(aA) as.User.Enabled=false al(as.UIElements.SideBarContainer,.25,{Size=UDim2.new(0,as.SideBarWidth,1,-as.Topbar.Height)},Enum.EasingStyle.Quint,Enum.EasingDirection.Out):Play() -aA.Visible=false +az.Visible=false end -function as.User.SetAnonymous(aB,aC) -if aC~=false then aC=true end -as.User.Anonymous=aC -aA.UserIcon.ImageLabel.Image=GetUserThumb() -aA.UserIcon.Frame.DisplayName.Text=aC and"Anonymous"or game.Players.LocalPlayer.DisplayName -aA.UserIcon.Frame.UserName.Text=aC and"anonymous"or game.Players.LocalPlayer.Name +function as.User.SetAnonymous(aA,aB) +if aB~=false then aB=true end +as.User.Anonymous=aB +az.UserIcon.ImageLabel.Image=GetUserThumb() +az.UserIcon.Frame.DisplayName.Text=aB and"Anonymous"or game.Players.LocalPlayer.DisplayName +az.UserIcon.Frame.UserName.Text=aB and"anonymous"or game.Players.LocalPlayer.Name end if as.User.Enabled then @@ -10745,72 +10745,72 @@ as.User:Disable() end if as.User.Callback then -aj.AddSignal(aA.MouseButton1Click,function() +aj.AddSignal(az.MouseButton1Click,function() as.User.Callback() end) -aj.AddSignal(aA.MouseEnter,function() -al(aA.UserIcon,0.04,{ImageTransparency=.95}):Play() -al(aA.Outline,0.04,{ImageTransparency=.85}):Play() +aj.AddSignal(az.MouseEnter,function() +al(az.UserIcon,0.04,{ImageTransparency=.95}):Play() +al(az.Outline,0.04,{ImageTransparency=.85}):Play() end) -aj.AddSignal(aA.InputEnded,function() -al(aA.UserIcon,0.04,{ImageTransparency=1}):Play() -al(aA.Outline,0.04,{ImageTransparency=1}):Play() +aj.AddSignal(az.InputEnded,function() +al(az.UserIcon,0.04,{ImageTransparency=1}):Play() +al(az.Outline,0.04,{ImageTransparency=1}):Play() end) end end +local aA local aB -local aC -local aD=false -local aE +local b=false +local d -local aF=typeof(as.Background)=="string"and string.match(as.Background,"^video:(.+)")or nil -local b=typeof(as.Background)=="string"and not aF and string.match(as.Background,"^https?://.+")or nil +local f=typeof(as.Background)=="string"and string.match(as.Background,"^video:(.+)")or nil +local g=typeof(as.Background)=="string"and not f and string.match(as.Background,"^https?://.+")or nil -local function GetImageExtension(d) -local f=d:match"%.(%w+)$"or d:match"%.(%w+)%?" -if f then -f=f:lower() -if f=="jpg"or f=="jpeg"or f=="png"or f=="webp"then -return"."..f +local function GetImageExtension(h) +local j=h:match"%.(%w+)$"or h:match"%.(%w+)%?" +if j then +j=j:lower() +if j=="jpg"or j=="jpeg"or j=="png"or j=="webp"then +return"."..j end end return".png" end -if typeof(as.Background)=="string"and aF then -aD=true +if typeof(as.Background)=="string"and f then +b=true -if string.find(aF,"http")then -local d=as.Folder.."/assets/."..aj.SanitizeFilename(aF)..".webm" -if not isfile(d)then -local f,g=pcall(function() -local f=aj.Request{Url=aF,Method="GET",Headers={["User-Agent"]="Roblox/Exploit"}} -writefile(d,f.Body) +if string.find(f,"http")then +local h=as.Folder.."/assets/."..aj.SanitizeFilename(f)..".webm" +if not isfile(h)then +local j,l=pcall(function() +local j=aj.Request{Url=f,Method="GET",Headers={["User-Agent"]="Roblox/Exploit"}} +writefile(h,j.Body) end) -if not f then -warn("[ WindUI.Window.Background ] Failed to download video: "..tostring(g)) +if not j then +warn("[ WindUI.Window.Background ] Failed to download video: "..tostring(l)) return end end -local f,g=pcall(function() -return getcustomasset(d) +local j,l=pcall(function() +return getcustomasset(h) end) -if not f then -warn("[ WindUI.Window.Background ] Failed to load custom asset: "..tostring(g)) +if not j then +warn("[ WindUI.Window.Background ] Failed to load custom asset: "..tostring(l)) return end warn"[ WindUI.Window.Background ] VideoFrame may not work with custom video" -aF=g +f=l end -aE=ak("VideoFrame",{ +d=ak("VideoFrame",{ BackgroundTransparency=1, Size=UDim2.new(1,0,1,0), -Video=aF, +Video=f, Looped=true, Volume=0, },{ @@ -10818,33 +10818,33 @@ ak("UICorner",{ CornerRadius=UDim.new(0,as.UICorner) }), }) -aE:Play() +d:Play() -elseif b then -local d=as.Folder.."/assets/."..aj.SanitizeFilename(b)..GetImageExtension(b) -if not isfile(d)then -local f,g=pcall(function() -local f=aj.Request{Url=b,Method="GET",Headers={["User-Agent"]="Roblox/Exploit"}} -writefile(d,f.Body) +elseif g then +local h=as.Folder.."/assets/."..aj.SanitizeFilename(g)..GetImageExtension(g) +if not isfile(h)then +local j,l=pcall(function() +local j=aj.Request{Url=g,Method="GET",Headers={["User-Agent"]="Roblox/Exploit"}} +writefile(h,j.Body) end) -if not f then -warn("[ Window.Background ] Failed to download image: "..tostring(g)) +if not j then +warn("[ Window.Background ] Failed to download image: "..tostring(l)) return end end -local f,g=pcall(function() -return getcustomasset(d) +local j,l=pcall(function() +return getcustomasset(h) end) -if not f then -warn("[ Window.Background ] Failed to load custom asset: "..tostring(g)) +if not j then +warn("[ Window.Background ] Failed to load custom asset: "..tostring(l)) return end -aE=ak("ImageLabel",{ +d=ak("ImageLabel",{ BackgroundTransparency=1, Size=UDim2.new(1,0,1,0), -Image=g, +Image=l, ImageTransparency=0, ScaleType="Crop", },{ @@ -10854,7 +10854,7 @@ CornerRadius=UDim.new(0,as.UICorner) }) elseif as.Background then -aE=ak("ImageLabel",{ +d=ak("ImageLabel",{ BackgroundTransparency=1, Size=UDim2.new(1,0,1,0), Image=typeof(as.Background)=="string"and as.Background or"", @@ -10868,7 +10868,7 @@ CornerRadius=UDim.new(0,as.UICorner) end -local d=aj.NewRoundFrame(99,"Squircle",{ +local h=aj.NewRoundFrame(99,"Squircle",{ ImageTransparency=.8, ImageColor3=Color3.new(1,1,1), Size=UDim2.new(0,0,0,4), @@ -10886,9 +10886,9 @@ Name="Frame", }) }) -function createAuthor(f) +function createAuthor(j) return ak("TextLabel",{ -Text=f, +Text=j, FontFace=Font.new(aj.Font,Enum.FontWeight.Medium), BackgroundTransparency=1, TextTransparency=0.35, @@ -10904,15 +10904,15 @@ Name="Author", }) end -local f -local g +local j +local l if as.Author then -f=createAuthor(as.Author) +j=createAuthor(as.Author) end -local h=ak("TextLabel",{ +local m=ak("TextLabel",{ Text=as.Title, FontFace=Font.new(aj.Font,Enum.FontWeight.SemiBold), BackgroundTransparency=1, @@ -10935,7 +10935,7 @@ Active=true, },{ ar.WindUI.UIScaleObj, as.AcrylicPaint and as.AcrylicPaint.Frame or nil, -az, +ay, aj.NewRoundFrame(as.UICorner,"Squircle",{ ImageTransparency=1, Size=UDim2.new(1,0,1,-240), @@ -10947,17 +10947,17 @@ ImageColor3="WindowBackground" }, },{ -aE, d, -aw, +h, +av, }), UIStroke, -av, +au, +aw, ax, -ay, ak("Frame",{ Size=UDim2.new(1,0,1,0), BackgroundTransparency=1, @@ -10972,16 +10972,16 @@ CornerRadius=UDim.new(0,as.UICorner) as.UIElements.SideBarContainer, as.UIElements.MainBar, -aA, +az, -aC, +aB, ak("Frame",{ Size=UDim2.new(1,0,0,as.Topbar.Height), BackgroundTransparency=1, BackgroundColor3=Color3.fromRGB(50,50,50), Name="Topbar" },{ -aB, +aA, @@ -11013,8 +11013,8 @@ SortOrder="LayoutOrder", FillDirection="Vertical", VerticalAlignment="Center", }), -h, -f, +m, +j, }), ak("UIPadding",{ PaddingLeft=UDim.new(0,4) @@ -11065,29 +11065,29 @@ PaddingBottom=UDim.new(0,as.UIPadding), }) aj.AddSignal(as.UIElements.Main.Main.Topbar.Left:GetPropertyChangedSignal"AbsoluteSize",function() -local j=0 -local l=as.UIElements.Main.Main.Topbar.Right.UIListLayout.AbsoluteContentSize.X/ar.WindUI.UIScale +local p=0 +local r=as.UIElements.Main.Main.Topbar.Right.UIListLayout.AbsoluteContentSize.X/ar.WindUI.UIScale -j=as.UIElements.Main.Main.Topbar.Left.AbsoluteSize.X/ar.WindUI.UIScale +p=as.UIElements.Main.Main.Topbar.Left.AbsoluteSize.X/ar.WindUI.UIScale if as.Topbar.ButtonsType~="Default"then -j=j+l+as.UIPadding-4 +p=p+r+as.UIPadding-4 end as.UIElements.Main.Main.Topbar.Center.Position=UDim2.new( 0, -j+(as.UIPadding/ar.WindUI.UIScale), +p+(as.UIPadding/ar.WindUI.UIScale), 0.5, 0 ) as.UIElements.Main.Main.Topbar.Center.Size=UDim2.new( 1, --j-l-((as.UIPadding*2)/ar.WindUI.UIScale), +-p-r-((as.UIPadding*2)/ar.WindUI.UIScale), 1, 0 ) @@ -11099,34 +11099,34 @@ as.UIElements.Main.Main.Topbar.Left.Position=UDim2.new(0,(as.UIElements.Main.Mai end) end -function as.CreateTopbarButton(j,l,m,p,r,u,v) -local x=aj.Image( -m, -m, +function as.CreateTopbarButton(p,r,u,v,x,z,A) +local B=aj.Image( +u, +u, 0, as.Folder, "WindowTopbarIcon", as.Topbar.ButtonsType=="Default"and true or false, -u, +z, "WindowTopbarButtonIcon" ) -x.Size=as.Topbar.ButtonsType=="Default"and UDim2.new(0,as.TopBarButtonIconSize,0,as.TopBarButtonIconSize)or UDim2.new(0,0,0,0) -x.AnchorPoint=Vector2.new(0.5,0.5) -x.Position=UDim2.new(0.5,0,0.5,0) -x.ImageLabel.ImageTransparency=as.Topbar.ButtonsType=="Default"and 0 or 1 +B.Size=as.Topbar.ButtonsType=="Default"and UDim2.new(0,as.TopBarButtonIconSize,0,as.TopBarButtonIconSize)or UDim2.new(0,0,0,0) +B.AnchorPoint=Vector2.new(0.5,0.5) +B.Position=UDim2.new(0.5,0,0.5,0) +B.ImageLabel.ImageTransparency=as.Topbar.ButtonsType=="Default"and 0 or 1 if as.Topbar.ButtonsType~="Default"then -x.ImageLabel.ImageColor3=aj.GetTextColorForHSB(v) +B.ImageLabel.ImageColor3=aj.GetTextColorForHSB(A) end -local B=aj.NewRoundFrame(as.Topbar.ButtonsType=="Default"and as.UICorner-(as.UIPadding/2)or 999,"Squircle",{ +local C=aj.NewRoundFrame(as.Topbar.ButtonsType=="Default"and as.UICorner-(as.UIPadding/2)or 999,"Squircle",{ Size=as.Topbar.ButtonsType=="Default"and UDim2.new(0,as.Topbar.Height-16,0,as.Topbar.Height-16)or UDim2.new(0,14,0,14), -LayoutOrder=r or 999, +LayoutOrder=x or 999, Parent=as.Topbar.ButtonsType=="Default"and as.UIElements.Main.Main.Topbar.Right or nil, ZIndex=9999, AnchorPoint=Vector2.new(0.5,0.5), Position=UDim2.new(0.5,0,0.5,0), -ImageColor3=as.Topbar.ButtonsType~="Default"and(v or Color3.fromHex"#ff3030")or nil, +ImageColor3=as.Topbar.ButtonsType~="Default"and(A or Color3.fromHex"#ff3030")or nil, ThemeTag=as.Topbar.ButtonsType=="Default"and{ ImageColor3="Text" }or nil, @@ -11154,77 +11154,77 @@ NumberSequenceKeypoint.new(1.0,0.1), } })or nil, }), -x +B },true) ak("Frame",{ Size=UDim2.new(0,24,0,24), BackgroundTransparency=1, Parent=as.Topbar.ButtonsType~="Default"and as.UIElements.Main.Main.Topbar.Right or nil, -LayoutOrder=r or 999 +LayoutOrder=x or 999 },{ -as.Topbar.ButtonsType~="Default"and B or nil, +as.Topbar.ButtonsType~="Default"and C or nil, }) -as.TopBarButtons[100-r]={ -Name=l, -Object=B +as.TopBarButtons[100-x]={ +Name=r, +Object=C } -aj.AddSignal(B.MouseButton1Click,function() -p() +aj.AddSignal(C.MouseButton1Click,function() +v() end) -aj.AddSignal(B.MouseEnter,function() +aj.AddSignal(C.MouseEnter,function() if as.Topbar.ButtonsType=="Default"then -al(B,.15,{ImageTransparency=.93}):Play() -al(B.Outline,.15,{ImageTransparency=.75}):Play() +al(C,.15,{ImageTransparency=.93}):Play() +al(C.Outline,.15,{ImageTransparency=.75}):Play() else -al(x.ImageLabel,.1,{ImageTransparency=0},Enum.EasingStyle.Quint,Enum.EasingDirection.Out):Play() -al(x,.1,{Size=UDim2.new(0,11,0,11)},Enum.EasingStyle.Quint,Enum.EasingDirection.Out):Play() +al(B.ImageLabel,.1,{ImageTransparency=0},Enum.EasingStyle.Quint,Enum.EasingDirection.Out):Play() +al(B,.1,{Size=UDim2.new(0,11,0,11)},Enum.EasingStyle.Quint,Enum.EasingDirection.Out):Play() end end) -aj.AddSignal(B.MouseLeave,function() +aj.AddSignal(C.MouseLeave,function() if as.Topbar.ButtonsType=="Default"then -al(B,.1,{ImageTransparency=1}):Play() -al(B.Outline,.1,{ImageTransparency=1}):Play() +al(C,.1,{ImageTransparency=1}):Play() +al(C.Outline,.1,{ImageTransparency=1}):Play() else -al(x.ImageLabel,.1,{ImageTransparency=1},Enum.EasingStyle.Quint,Enum.EasingDirection.Out):Play() -al(x,.1,{Size=UDim2.new(0,0,0,0)},Enum.EasingStyle.Quint,Enum.EasingDirection.Out):Play() +al(B.ImageLabel,.1,{ImageTransparency=1},Enum.EasingStyle.Quint,Enum.EasingDirection.Out):Play() +al(B,.1,{Size=UDim2.new(0,0,0,0)},Enum.EasingStyle.Quint,Enum.EasingDirection.Out):Play() end end) -return B +return C end -local j=aj.Drag( +local p=aj.Drag( as.UIElements.Main, -{as.UIElements.Main.Main.Topbar,d.Frame}, -function(j,l) +{as.UIElements.Main.Main.Topbar,h.Frame}, +function(p,r) if not as.Closed then -if j and l==d.Frame then -al(d,.1,{ImageTransparency=.35}):Play() +if p and r==h.Frame then +al(h,.1,{ImageTransparency=.35}):Play() else -al(d,.2,{ImageTransparency=.8}):Play() +al(h,.2,{ImageTransparency=.8}):Play() end as.Position=as.UIElements.Main.Position -as.Dragging=j +as.Dragging=p end end ) -if not aD and as.Background and typeof(as.Background)=="table"then +if not b and as.Background and typeof(as.Background)=="table"then -local l=ak"UIGradient" -for m,p in next,as.Background do -l[m]=p +local r=ak"UIGradient" +for u,v in next,as.Background do +r[u]=v end as.UIElements.BackgroundGradient=aj.NewRoundFrame(as.UICorner,"Squircle",{ @@ -11232,7 +11232,7 @@ Size=UDim2.new(1,0,1,0), Parent=as.UIElements.Main.Background, ImageTransparency=as.Transparent and ar.WindUI.TransparencyValue or 0 },{ -l +r }) end @@ -11255,13 +11255,13 @@ as.OpenButtonMain=a.load'x'.New(as) task.spawn(function() if as.Icon then -local l=ak("Frame",{ +local r=ak("Frame",{ Size=UDim2.new(0,22,0,22), BackgroundTransparency=1, Parent=as.UIElements.Main.Main.Topbar.Left, }) -g=aj.Image( +l=aj.Image( as.Icon, as.Title, 0, @@ -11271,10 +11271,10 @@ true, as.IconThemed, "WindowTopbarIcon" ) -g.Parent=l -g.Size=UDim2.new(0,as.IconSize,0,as.IconSize) -g.Position=UDim2.new(0.5,0,0.5,0) -g.AnchorPoint=Vector2.new(0.5,0.5) +l.Parent=r +l.Size=UDim2.new(0,as.IconSize,0,as.IconSize) +l.Position=UDim2.new(0.5,0,0.5,0) +l.AnchorPoint=Vector2.new(0.5,0.5) as.OpenButtonMain:SetIcon(as.Icon) @@ -11294,42 +11294,42 @@ as.OpenButtonMain:SetIcon(as.Icon) end end) -function as.SetToggleKey(l,m) -as.ToggleKey=m +function as.SetToggleKey(r,u) +as.ToggleKey=u end -function as.SetTitle(l,m) -as.Title=m -h.Text=m +function as.SetTitle(r,u) +as.Title=u +m.Text=u end -function as.SetAuthor(l,m) -as.Author=m -if not f then -f=createAuthor(as.Author) +function as.SetAuthor(r,u) +as.Author=u +if not j then +j=createAuthor(as.Author) end -f.Text=m +j.Text=u end -function as.SetBackgroundImage(l,m) -as.UIElements.Main.Background.ImageLabel.Image=m +function as.SetBackgroundImage(r,u) +as.UIElements.Main.Background.ImageLabel.Image=u end -function as.SetBackgroundImageTransparency(l,m) -if aE and aE:IsA"ImageLabel"then -aE.ImageTransparency=math.floor(m*10+0.5)/10 +function as.SetBackgroundImageTransparency(r,u) +if d and d:IsA"ImageLabel"then +d.ImageTransparency=math.floor(u*10+0.5)/10 end -as.BackgroundImageTransparency=math.floor(m*10+0.5)/10 +as.BackgroundImageTransparency=math.floor(u*10+0.5)/10 end -function as.SetBackgroundTransparency(l,m) -local p=math.floor(tonumber(m)*10+0.5)/10 -ar.WindUI.TransparencyValue=p -as:ToggleTransparency(p>0) +function as.SetBackgroundTransparency(r,u) +local v=math.floor(tonumber(u)*10+0.5)/10 +ar.WindUI.TransparencyValue=v +as:ToggleTransparency(v>0) end -local l -local m +local r +local u aj.Icon"minimize" aj.Icon"maximize" @@ -11337,14 +11337,14 @@ as:CreateTopbarButton("Fullscreen","maximize",function() as:ToggleFullscreen() end,(as.Topbar.ButtonsType=="Default"and 998 or 999),nil,Color3.fromHex"#60C762") -function as.ToggleFullscreen(p) -local r=as.IsFullscreen +function as.ToggleFullscreen(v) +local x=as.IsFullscreen -j:Set(r) +p:Set(x) -if not r then -l=as.UIElements.Main.Position -m=as.UIElements.Main.Size +if not x then +r=as.UIElements.Main.Position +u=as.UIElements.Main.Size as.CanResize=false else @@ -11353,13 +11353,13 @@ as.CanResize=true end end -al(as.UIElements.Main,0.45,{Size=r and m or UDim2.new(1,-20,1,-72)},Enum.EasingStyle.Quint,Enum.EasingDirection.Out):Play() +al(as.UIElements.Main,0.45,{Size=x and u or UDim2.new(1,-20,1,-72)},Enum.EasingStyle.Quint,Enum.EasingDirection.Out):Play() -al(as.UIElements.Main,0.45,{Position=r and l or UDim2.new(0.5,0,0.5,26)},Enum.EasingStyle.Quint,Enum.EasingDirection.Out):Play() +al(as.UIElements.Main,0.45,{Position=x and r or UDim2.new(0.5,0,0.5,26)},Enum.EasingStyle.Quint,Enum.EasingDirection.Out):Play() -as.IsFullscreen=not r +as.IsFullscreen=not x end @@ -11389,36 +11389,36 @@ as:Close() end,(as.Topbar.ButtonsType=="Default"and 997 or 998),nil,Color3.fromHex"#F4C948") -function as.OnOpen(p,r) -as.OnOpenCallback=r +function as.OnOpen(v,x) +as.OnOpenCallback=x end -function as.OnClose(p,r) -as.OnCloseCallback=r +function as.OnClose(v,x) +as.OnCloseCallback=x end -function as.OnDestroy(p,r) -as.OnDestroyCallback=r +function as.OnDestroy(v,x) +as.OnDestroyCallback=x end if ar.WindUI.UseAcrylic then as.AcrylicPaint.AddParent(as.UIElements.Main) end -function as.SetIconSize(p,r) -local u -if typeof(r)=="number"then -u=UDim2.new(0,r,0,r) -as.IconSize=r -elseif typeof(r)=="UDim2"then -u=r -as.IconSize=r.X.Offset +function as.SetIconSize(v,x) +local z +if typeof(x)=="number"then +z=UDim2.new(0,x,0,x) +as.IconSize=x +elseif typeof(x)=="UDim2"then +z=x +as.IconSize=x.X.Offset end -if g then -g.Size=u +if l then +l.Size=z end end -function as.Open(p) +function as.Open(v) task.spawn(function() if as.OnOpenCallback then task.spawn(function() @@ -11444,11 +11444,11 @@ al(as.UIElements.Main.Background,0.4,{ Size=UDim2.new(1,0,1,0), },Enum.EasingStyle.Exponential,Enum.EasingDirection.Out):Play() -if aE then -if aE:IsA"VideoFrame"then -aE.Visible=true +if d then +if d:IsA"VideoFrame"then +d.Visible=true else -al(aE,0.2,{ +al(d,0.2,{ ImageTransparency=as.BackgroundImageTransparency, },Enum.EasingStyle.Quint,Enum.EasingDirection.Out):Play() end @@ -11459,18 +11459,18 @@ as.OpenButtonMain:Visible(false) end -al(az,0.25,{ImageTransparency=as.ShadowTransparency},Enum.EasingStyle.Quint,Enum.EasingDirection.Out):Play() +al(ay,0.25,{ImageTransparency=as.ShadowTransparency},Enum.EasingStyle.Quint,Enum.EasingDirection.Out):Play() if UIStroke then al(UIStroke,0.25,{Transparency=.8},Enum.EasingStyle.Quint,Enum.EasingDirection.Out):Play() end task.spawn(function() task.wait(.3) -al(d,.45,{Size=UDim2.new(0,200,0,4),ImageTransparency=.8},Enum.EasingStyle.Exponential,Enum.EasingDirection.Out):Play() -j:Set(true) +al(h,.45,{Size=UDim2.new(0,200,0,4),ImageTransparency=.8},Enum.EasingStyle.Exponential,Enum.EasingDirection.Out):Play() +p:Set(true) task.wait(.45) if as.Resizable then -al(aw.ImageLabel,.45,{ImageTransparency=.8},Enum.EasingStyle.Exponential,Enum.EasingDirection.Out):Play() +al(av.ImageLabel,.45,{ImageTransparency=.8},Enum.EasingStyle.Exponential,Enum.EasingDirection.Out):Play() as.CanResize=true end end) @@ -11487,8 +11487,8 @@ ar.WindUI:ToggleAcrylic(true) end) end) end -function as.Close(p) -local r={} +function as.Close(v) +local x={} if as.OnCloseCallback then task.spawn(function() @@ -11517,23 +11517,23 @@ Size=UDim2.new(1,0,1,-240), },Enum.EasingStyle.Exponential,Enum.EasingDirection.InOut):Play() -if aE then -if aE:IsA"VideoFrame"then -aE.Visible=false +if d then +if d:IsA"VideoFrame"then +d.Visible=false else -al(aE,0.3,{ +al(d,0.3,{ ImageTransparency=1, },Enum.EasingStyle.Quint,Enum.EasingDirection.Out):Play() end end -al(az,0.25,{ImageTransparency=1},Enum.EasingStyle.Quint,Enum.EasingDirection.Out):Play() +al(ay,0.25,{ImageTransparency=1},Enum.EasingStyle.Quint,Enum.EasingDirection.Out):Play() if UIStroke then al(UIStroke,0.25,{Transparency=1},Enum.EasingStyle.Quint,Enum.EasingDirection.Out):Play() end -al(d,.3,{Size=UDim2.new(0,0,0,4),ImageTransparency=1},Enum.EasingStyle.Exponential,Enum.EasingDirection.InOut):Play() -al(aw.ImageLabel,.3,{ImageTransparency=1},Enum.EasingStyle.Exponential,Enum.EasingDirection.Out):Play() -j:Set(false) +al(h,.3,{Size=UDim2.new(0,0,0,4),ImageTransparency=1},Enum.EasingStyle.Exponential,Enum.EasingDirection.InOut):Play() +al(av.ImageLabel,.3,{ImageTransparency=1},Enum.EasingStyle.Exponential,Enum.EasingDirection.Out):Play() +p:Set(false) as.CanResize=false task.spawn(function() @@ -11545,7 +11545,7 @@ as.OpenButtonMain:Visible(true) end end) -function r.Destroy(u) +function x.Destroy(z) task.spawn(function() if as.OnDestroyCallback then task.spawn(function() @@ -11568,12 +11568,12 @@ return end) end -return r +return x end -function as.Destroy(p) +function as.Destroy(v) return as:Close():Destroy() end -function as.Toggle(p) +function as.Toggle(v) if as.Closed then as:Open() else @@ -11582,89 +11582,89 @@ end end -function as.ToggleTransparency(p,r) +function as.ToggleTransparency(v,x) -as.Transparent=r -ar.WindUI.Transparent=r +as.Transparent=x +ar.WindUI.Transparent=x -as.UIElements.Main.Background.ImageTransparency=r and ar.WindUI.TransparencyValue or 0 +as.UIElements.Main.Background.ImageTransparency=x and ar.WindUI.TransparencyValue or 0 -as.UIElements.MainBar.Background.ImageTransparency=r and 0.97 or 0.95 +as.UIElements.MainBar.Background.ImageTransparency=x and 0.97 or 0.95 end -function as.LockAll(p) -for r,u in next,as.AllElements do -if u.Lock then u:Lock()end +function as.LockAll(v) +for x,z in next,as.AllElements do +if z.Lock then z:Lock()end end end -function as.UnlockAll(p) -for r,u in next,as.AllElements do -if u.Unlock then u:Unlock()end +function as.UnlockAll(v) +for x,z in next,as.AllElements do +if z.Unlock then z:Unlock()end end end -function as.GetLocked(p) -local r={} +function as.GetLocked(v) +local x={} -for u,v in next,as.AllElements do -if v.Locked then table.insert(r,v)end +for z,A in next,as.AllElements do +if A.Locked then table.insert(x,A)end end -return r +return x end -function as.GetUnlocked(p) -local r={} +function as.GetUnlocked(v) +local x={} -for u,v in next,as.AllElements do -if v.Locked==false then table.insert(r,v)end +for z,A in next,as.AllElements do +if A.Locked==false then table.insert(x,A)end end -return r +return x end -function as.GetUIScale(p,r) +function as.GetUIScale(v,x) return ar.WindUI.UIScale end -function as.SetUIScale(p,r) -ar.WindUI.UIScale=r -al(ar.WindUI.UIScaleObj,.2,{Scale=r},Enum.EasingStyle.Quint,Enum.EasingDirection.Out):Play() +function as.SetUIScale(v,x) +ar.WindUI.UIScale=x +al(ar.WindUI.UIScaleObj,.2,{Scale=x},Enum.EasingStyle.Quint,Enum.EasingDirection.Out):Play() return as end -function as.SetToTheCenter(p) +function as.SetToTheCenter(v) al(as.UIElements.Main,0.45,{Position=UDim2.new(0.5,0,0.5,0)},Enum.EasingStyle.Quint,Enum.EasingDirection.Out):Play() return as end -function as.SetCurrentConfig(p,r) -as.CurrentConfig=r +function as.SetCurrentConfig(v,x) +as.CurrentConfig=x end do -local p=40 -local r=af.ViewportSize -local u=as.UIElements.Main.AbsoluteSize +local v=40 +local x=af.ViewportSize +local z=as.UIElements.Main.AbsoluteSize if not as.IsFullscreen and as.AutoScale then -local v=r.X-(p*2) -local x=r.Y-(p*2) +local A=x.X-(v*2) +local B=x.Y-(v*2) -local B=v/u.X -local C=x/u.Y +local C=A/z.X +local F=B/z.Y -local F=math.min(B,C) +local G=math.min(C,F) -local G=0.3 -local H=1.0 +local H=0.3 +local J=1.0 -local J=math.clamp(F,G,H) +local L=math.clamp(G,H,J) -local L=as:GetUIScale()or 1 -local M=0.05 +local M=as:GetUIScale()or 1 +local N=0.05 -if math.abs(J-L)>M then -as:SetUIScale(J) +if math.abs(L-M)>N then +as:SetUIScale(L) end end end @@ -11678,11 +11678,11 @@ as:Open() end) end -aj.AddSignal(ae.InputBegan,function(p,r) -if r then return end +aj.AddSignal(ae.InputBegan,function(v,x) +if x then return end if as.ToggleKey then -if p.KeyCode==as.ToggleKey then +if v.KeyCode==as.ToggleKey then as:Toggle() end end @@ -11693,8 +11693,8 @@ task.spawn(function() as:Open() end) -function as.EditOpenButton(p,r) -return as.OpenButtonMain:Edit(r) +function as.EditOpenButton(v,x) +return as.OpenButtonMain:Edit(x) end if as.OpenButton and typeof(as.OpenButton)=="table"then @@ -11702,33 +11702,33 @@ as:EditOpenButton(as.OpenButton) end -local p=a.load'U' -local r=a.load'V' -local u=p.Init(as,ar.WindUI,ar.WindUI.TooltipGui) -u:OnChange(function(v)as.CurrentTab=v end) +local v=a.load'U' +local x=a.load'V' +local z=v.Init(as,ar.WindUI,ar.WindUI.TooltipGui) +z:OnChange(function(A)as.CurrentTab=A end) -as.TabModule=p +as.TabModule=v -function as.Tab(v,x) -x.Parent=as.UIElements.SideBar.Frame -return u.New(x,ar.WindUI.UIScale) +function as.Tab(A,B) +B.Parent=as.UIElements.SideBar.Frame +return z.New(B,ar.WindUI.UIScale) end -function as.SelectTab(v,x) -u:SelectTab(x) +function as.SelectTab(A,B) +z:SelectTab(B) end -function as.Section(v,x) -return r.New(x,as.UIElements.SideBar.Frame,as.Folder,ar.WindUI.UIScale,as) +function as.Section(A,B) +return x.New(B,as.UIElements.SideBar.Frame,as.Folder,ar.WindUI.UIScale,as) end -function as.IsResizable(v,x) -as.Resizable=x -as.CanResize=x +function as.IsResizable(A,B) +as.Resizable=B +as.CanResize=B end -function as.Divider(v) -local x=ak("Frame",{ +function as.Divider(A) +local B=ak("Frame",{ Size=UDim2.new(1,0,0,1), Position=UDim2.new(0.5,0,0,0), AnchorPoint=Vector2.new(0.5,0), @@ -11737,97 +11737,97 @@ ThemeTag={ BackgroundColor3="Text" } }) -local B=ak("Frame",{ +local C=ak("Frame",{ Parent=as.UIElements.SideBar.Frame, Size=UDim2.new(1,-7,0,5), BackgroundTransparency=1, },{ -x +B }) -return B +return C end -local v=a.load'l'.Init(as,nil) -function as.Dialog(x,B) -local C={ -Title=B.Title or"Dialog", -Width=B.Width or 320, -Content=B.Content, -Buttons=B.Buttons or{}, +local A=a.load'l'.Init(as,nil) +function as.Dialog(B,C) +local F={ +Title=C.Title or"Dialog", +Width=C.Width or 320, +Content=C.Content, +Buttons=C.Buttons or{}, TextPadding=10, } -local F=v.Create(false) +local G=A.Create(false) -F.UIElements.Main.Size=UDim2.new(0,C.Width,0,0) +G.UIElements.Main.Size=UDim2.new(0,F.Width,0,0) -local G=ak("Frame",{ +local H=ak("Frame",{ Size=UDim2.new(1,0,0,0), AutomaticSize="Y", BackgroundTransparency=1, -Parent=F.UIElements.Main +Parent=G.UIElements.Main },{ ak("UIListLayout",{ FillDirection="Horizontal", -Padding=UDim.new(0,F.UIPadding), +Padding=UDim.new(0,G.UIPadding), VerticalAlignment="Center" }), ak("UIPadding",{ -PaddingTop=UDim.new(0,C.TextPadding/2), -PaddingLeft=UDim.new(0,C.TextPadding/2), -PaddingRight=UDim.new(0,C.TextPadding/2), +PaddingTop=UDim.new(0,F.TextPadding/2), +PaddingLeft=UDim.new(0,F.TextPadding/2), +PaddingRight=UDim.new(0,F.TextPadding/2), }) }) -local H -if B.Icon then -H=aj.Image( -B.Icon, -C.Title..":"..B.Icon, +local J +if C.Icon then +J=aj.Image( +C.Icon, +F.Title..":"..C.Icon, 0, as, "Dialog", true, -B.IconThemed +C.IconThemed ) -H.Size=UDim2.new(0,22,0,22) -H.Parent=G +J.Size=UDim2.new(0,22,0,22) +J.Parent=H end -F.UIElements.UIListLayout=ak("UIListLayout",{ +G.UIElements.UIListLayout=ak("UIListLayout",{ Padding=UDim.new(0,12), FillDirection="Vertical", HorizontalAlignment="Left", -Parent=F.UIElements.Main +Parent=G.UIElements.Main }) ak("UISizeConstraint",{ MinSize=Vector2.new(180,20), MaxSize=Vector2.new(400,math.huge), -Parent=F.UIElements.Main, +Parent=G.UIElements.Main, }) -F.UIElements.Title=ak("TextLabel",{ -Text=C.Title, +G.UIElements.Title=ak("TextLabel",{ +Text=F.Title, TextSize=20, FontFace=Font.new(aj.Font,Enum.FontWeight.SemiBold), TextXAlignment="Left", TextWrapped=true, RichText=true, -Size=UDim2.new(1,H and-26-F.UIPadding or 0,0,0), +Size=UDim2.new(1,J and-26-G.UIPadding or 0,0,0), AutomaticSize="Y", ThemeTag={ TextColor3="Text" }, BackgroundTransparency=1, -Parent=G +Parent=H }) -if C.Content then +if F.Content then ak("TextLabel",{ -Text=C.Content, +Text=F.Content, TextSize=18, TextTransparency=.4, TextWrapped=true, @@ -11841,30 +11841,30 @@ ThemeTag={ TextColor3="Text" }, BackgroundTransparency=1, -Parent=F.UIElements.Main +Parent=G.UIElements.Main },{ ak("UIPadding",{ -PaddingLeft=UDim.new(0,C.TextPadding/2), -PaddingRight=UDim.new(0,C.TextPadding/2), -PaddingBottom=UDim.new(0,C.TextPadding/2), +PaddingLeft=UDim.new(0,F.TextPadding/2), +PaddingRight=UDim.new(0,F.TextPadding/2), +PaddingBottom=UDim.new(0,F.TextPadding/2), }) }) end -local J=ak("UIListLayout",{ +local L=ak("UIListLayout",{ Padding=UDim.new(0,6), FillDirection="Horizontal", HorizontalAlignment="Right", }) -local L=ak("Frame",{ +local M=ak("Frame",{ Size=UDim2.new(1,0,0,40), AutomaticSize="None", BackgroundTransparency=1, -Parent=F.UIElements.Main, +Parent=G.UIElements.Main, LayoutOrder=4, },{ -J, +L, @@ -11874,68 +11874,68 @@ J, }) -local M={} +local N={} -for N,O in next,C.Buttons do -local P=an(O.Title,O.Icon,O.Callback,O.Variant,L,F,false) -table.insert(M,P) +for O,P in next,F.Buttons do +local Q=an(P.Title,P.Icon,P.Callback,P.Variant,M,G,false) +table.insert(N,Q) end local function CheckButtonsOverflow() -J.FillDirection=Enum.FillDirection.Horizontal -J.HorizontalAlignment=Enum.HorizontalAlignment.Right -J.VerticalAlignment=Enum.VerticalAlignment.Center -L.AutomaticSize=Enum.AutomaticSize.None +L.FillDirection=Enum.FillDirection.Horizontal +L.HorizontalAlignment=Enum.HorizontalAlignment.Right +L.VerticalAlignment=Enum.VerticalAlignment.Center +M.AutomaticSize=Enum.AutomaticSize.None -for P,Q in ipairs(M)do -Q.Size=UDim2.new(0,0,1,0) -Q.AutomaticSize=Enum.AutomaticSize.X +for O,P in ipairs(N)do +P.Size=UDim2.new(0,0,1,0) +P.AutomaticSize=Enum.AutomaticSize.X end wait() -local R=J.AbsoluteContentSize.X/ar.WindUI.UIScale -local S=L.AbsoluteSize.X/ar.WindUI.UIScale +local O=L.AbsoluteContentSize.X/ar.WindUI.UIScale +local P=M.AbsoluteSize.X/ar.WindUI.UIScale -if R>S then -J.FillDirection=Enum.FillDirection.Vertical -J.HorizontalAlignment=Enum.HorizontalAlignment.Right -J.VerticalAlignment=Enum.VerticalAlignment.Bottom -L.AutomaticSize=Enum.AutomaticSize.Y +if O>P then +L.FillDirection=Enum.FillDirection.Vertical +L.HorizontalAlignment=Enum.HorizontalAlignment.Right +L.VerticalAlignment=Enum.VerticalAlignment.Bottom +M.AutomaticSize=Enum.AutomaticSize.Y -for T,U in ipairs(M)do -U.Size=UDim2.new(1,0,0,40) -U.AutomaticSize=Enum.AutomaticSize.None +for Q,R in ipairs(N)do +R.Size=UDim2.new(1,0,0,40) +R.AutomaticSize=Enum.AutomaticSize.None end else -local T=S-R -if T>0 then -local U -local V=math.huge +local Q=P-O +if Q>0 then +local R +local S=math.huge -for W,X in ipairs(M)do -local Y=X.AbsoluteSize.X/ar.WindUI.UIScale -if Y Date: Sun, 14 Dec 2025 21:54:06 +0700 Subject: [PATCH 2/3] Fix color Tag --- src/components/ui/Tag.lua | 200 ++++++++++++++++++++++++++++++-------- 1 file changed, 158 insertions(+), 42 deletions(-) diff --git a/src/components/ui/Tag.lua b/src/components/ui/Tag.lua index 502c0ed..b814efd 100644 --- a/src/components/ui/Tag.lua +++ b/src/components/ui/Tag.lua @@ -1,10 +1,79 @@ -local Tag = {} +-- modules/Tag.lua (or wherever your Tag module is) +local Tag = {} -local Creator = require("../../modules/Creator") +local Creator = require("../../modules/Creator") -- Adjust path if needed local New = Creator.New local Tween = Creator.Tween +-- Toggle debug prints +local DEBUG = false + +local function dprint(...) + if DEBUG then + print("[Tag Debug]", ...) + end +end + +-- Convert Color3 to HSB (Hue, Saturation, Brightness) +local function Color3ToHSB(color) + local r, g, b = color.R, color.G, color.B + local max = math.max(r, g, b) + local min = math.min(r, g, b) + local delta = max - min + + local h = 0 + if delta ~= 0 then + if max == r then + h = ((g - b) / delta) % 6 + elseif max == g then + h = (b - r) / delta + 2 + else + h = (r - g) / delta + 4 + end + h = h * 60 + end + + local s = max == 0 and 0 or delta / max + local v = max + + return { h = math.floor(h + 0.5), s = s, b = v } +end + +-- Perceived brightness (luminance formula) +local function GetPerceivedBrightness(color) + return 0.299 * color.R + 0.587 * color.G + 0.114 * color.B +end + +-- Get high-contrast text color (dark on light bg, light on dark bg) +local function GetContrastTextColor(baseColor) + local brightness = GetPerceivedBrightness(baseColor) + dprint("Base brightness:", brightness, "→ Using", brightness > 0.5 and "dark" or "light", "text") + + local hsb = Color3ToHSB(baseColor) + if brightness > 0.5 then + return Color3.fromHSV(hsb.h / 360, 0, 0.05) -- Almost black + else + return Color3.fromHSV(hsb.h / 360, 0, 0.98) -- Almost white + end +end + +-- Average color from UIGradient +local function GetAverageColor(gradient) + local r, g, b = 0, 0, 0 + local keypoints = gradient.Color.Keypoints + local count = #keypoints + + for _, kp in ipairs(keypoints) do + r += kp.Value.R + g += kp.Value.G + b += kp.Value.B + end + + local avg = Color3.new(r / count, g / count, b / count) + dprint("Gradient average:", avg:ToHex()) + return avg +end function Tag:New(TagConfig, Parent) local TagModule = { @@ -19,7 +88,8 @@ function Tag:New(TagConfig, Parent) TextSize = 14, IconSize = 16, } - + + -- Create Icon if provided local TagIcon if TagModule.Icon then TagIcon = Creator.Image( @@ -30,86 +100,132 @@ function Tag:New(TagConfig, Parent) "Tag", false ) - - TagIcon.Size = UDim2.new(0,TagModule.IconSize,0,TagModule.IconSize) - TagIcon.ImageLabel.ImageColor3 = typeof(TagModule.Color) == "Color3" and Creator.GetTextColorForHSB(TagModule.Color) or nil + TagIcon.Size = UDim2.new(0, TagModule.IconSize, 0, TagModule.IconSize) end - + + -- Title label local TagTitle = New("TextLabel", { BackgroundTransparency = 1, AutomaticSize = "XY", TextSize = TagModule.TextSize, FontFace = Font.new(Creator.Font, Enum.FontWeight.SemiBold), Text = TagModule.Title, - TextColor3 = typeof(TagModule.Color) == "Color3" and Creator.GetTextColorForHSB(TagModule.Color) or nil, + TextColor3 = Color3.new(1, 1, 1), -- Temporary }) - + + -- Gradient holder local BackgroundGradient - - if typeof(TagModule.Color) == "table" then - - BackgroundGradient = New("UIGradient") - for key, value in next, TagModule.Color do - BackgroundGradient[key] = value + + -- Apply contrast based on current color + local function ApplyContrast() + local baseColor + if typeof(TagModule.Color) == "table" and BackgroundGradient then + baseColor = GetAverageColor(BackgroundGradient) + else + baseColor = TagModule.Color end + + local textColor = GetContrastTextColor(baseColor) + TagTitle.TextColor3 = textColor - TagTitle.TextColor3 = Creator.GetTextColorForHSB(Creator.GetAverageColor(BackgroundGradient)) if TagIcon then - TagIcon.ImageLabel.ImageColor3 = Creator.GetTextColorForHSB(Creator.GetAverageColor(BackgroundGradient)) + TagIcon.ImageLabel.ImageColor3 = textColor end + + dprint("Applied text color:", textColor:ToHex(), "for base:", baseColor:ToHex()) end - - - + + -- Setup gradient if needed + if typeof(TagModule.Color) == "table" then + BackgroundGradient = New("UIGradient") + for k, v in next, TagModule.Color do + BackgroundGradient[k] = v + end + end + + -- Create the tag frame local TagFrame = Creator.NewRoundFrame(TagModule.Radius, "Squircle", { AutomaticSize = "X", - Size = UDim2.new(0,0,0,TagModule.Height), + Size = UDim2.new(0, 0, 0, TagModule.Height), Parent = Parent, - ImageColor3 = typeof(TagModule.Color) == "Color3" and TagModule.Color or Color3.new(1,1,1), + ImageColor3 = typeof(TagModule.Color) == "Color3" and TagModule.Color or Color3.new(1, 1, 1), }, { BackgroundGradient, New("UIPadding", { - PaddingLeft = UDim.new(0,TagModule.Padding), - PaddingRight = UDim.new(0,TagModule.Padding), + PaddingLeft = UDim.new(0, TagModule.Padding), + PaddingRight = UDim.new(0, TagModule.Padding), }), TagIcon, TagTitle, New("UIListLayout", { FillDirection = "Horizontal", VerticalAlignment = "Center", - Padding = UDim.new(0,TagModule.Padding/1.5) + Padding = UDim.new(0, TagModule.Padding / 1.5) }) }) - - + + TagModule.TagFrame = TagFrame + + -- Initial apply + ApplyContrast() + + -- Protect text color from theme overrides + TagTitle:GetPropertyChangedSignal("TextColor3"):Connect(function() + if TagModule.Color then + task.defer(ApplyContrast) + end + end) + + if TagIcon then + TagIcon.ImageLabel:GetPropertyChangedSignal("ImageColor3"):Connect(function() + if TagModule.Color then + task.defer(ApplyContrast) + end + end) + end + + -- Handle theme change (WindUI uses function callback, not event) + if WindUI and typeof(WindUI.OnThemeChange) == "function" then + WindUI.OnThemeChange(function() + if TagModule.Color then + dprint("Theme changed → reapplying tag contrast") + ApplyContrast() + end + end) + end + + -- Public methods function TagModule:SetTitle(text) TagModule.Title = text TagTitle.Text = text end - + function TagModule:SetColor(color) TagModule.Color = color + dprint("SetColor →", typeof(color) == "table" and "gradient" or color:ToHex()) + if typeof(color) == "table" then - local avgColor = Creator.GetAverageColor(color) - Tween(TagTitle, .06, { TextColor3 = Creator.GetTextColorForHSB(avgColor) }):Play() - local gradient = TagFrame:FindFirstChildOfClass("UIGradient") or New("UIGradient", { Parent = TagFrame }) - for k, v in next, color do gradient[k] = v end - Tween(TagFrame, .06, { ImageColor3 = Color3.new(1,1,1) }):Play() + -- Gradient + if not BackgroundGradient then + BackgroundGradient = New("UIGradient", { Parent = TagFrame }) + end + for k, v in next, color do + BackgroundGradient[k] = v + end + Tween(TagFrame, 0.1, { ImageColor3 = Color3.new(1, 1, 1) }):Play() else + -- Solid color if BackgroundGradient then BackgroundGradient:Destroy() + BackgroundGradient = nil end - Tween(TagTitle, .06, { TextColor3 = Creator.GetTextColorForHSB(color) }):Play() - if TagIcon then - Tween(TagIcon.ImageLabel, .06, { ImageColor3 = Creator.GetTextColorForHSB(color) }):Play() - end - Tween(TagFrame, .06, { ImageColor3 = color }):Play() + Tween(TagFrame, 0.1, { ImageColor3 = color }):Play() end + + ApplyContrast() end - - + return TagModule end - -return Tag \ No newline at end of file +return Tag From 266632116b624d921a0b0808fa17708aa54e580d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 14 Dec 2025 14:54:32 +0000 Subject: [PATCH 3/3] [AUTO] Upload built main.lua --- dist/main.lua | 229 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 173 insertions(+), 56 deletions(-) diff --git a/dist/main.lua b/dist/main.lua index a1bcec0..ddf5a2d 100644 --- a/dist/main.lua +++ b/dist/main.lua @@ -3625,20 +3625,89 @@ end return aa end function a.v() -local aa={} +local aa={} + local ab=a.load'b' local ac=ab.New local ad=ab.Tween -function aa.New(ae,af,ag) -local ah={ -Title=af.Title or"Tag", -Icon=af.Icon, -Color=af.Color or Color3.fromHex"#315dff", -Radius=af.Radius or 999, +local ae=false + +local function dprint(...) +if ae then +print("[Tag Debug]",...) +end +end + + +local function Color3ToHSB(af) +local ag,ah,ai=af.R,af.G,af.B +local aj=math.max(ag,ah,ai) +local ak=math.min(ag,ah,ai) +local al=aj-ak + +local am=0 +if al~=0 then +if aj==ag then +am=((ah-ai)/al)%6 +elseif aj==ah then +am=(ai-ag)/al+2 +else +am=(ag-ah)/al+4 +end +am=am*60 +end + +local an=aj==0 and 0 or al/aj +local ao=aj + +return{h=math.floor(am+0.5),s=an,b=ao} +end + + +local function GetPerceivedBrightness(af) +return 0.299*af.R+0.587*af.G+0.114*af.B +end + + +local function GetContrastTextColor(af) +local ag=GetPerceivedBrightness(af) +dprint("Base brightness:",ag,"→ Using",ag>0.5 and"dark"or"light","text") + +local ah=Color3ToHSB(af) +if ag>0.5 then +return Color3.fromHSV(ah.h/360,0,0.05) +else +return Color3.fromHSV(ah.h/360,0,0.98) +end +end + + +local function GetAverageColor(af) +local ag,ah,ai=0,0,0 +local aj=af.Color.Keypoints +local ak=#aj + +for al,am in ipairs(aj)do +ag+=am.Value.R +ah+=am.Value.G +ai+=am.Value.B +end + +local al=Color3.new(ag/ak,ah/ak,ai/ak) +dprint("Gradient average:",al:ToHex()) +return al +end + +function aa.New(af,ag,ah) +local ai={ +Title=ag.Title or"Tag", +Icon=ag.Icon, +Color=ag.Color or Color3.fromHex"#315dff", +Radius=ag.Radius or 999, TagFrame=nil, Height=26, @@ -3647,99 +3716,147 @@ TextSize=14, IconSize=16, } -local ai -if ah.Icon then -ai=ab.Image( -ah.Icon, -ah.Icon, + +local aj +if ai.Icon then +aj=ab.Image( +ai.Icon, +ai.Icon, 0, -af.Window, +ag.Window, "Tag", false ) - -ai.Size=UDim2.new(0,ah.IconSize,0,ah.IconSize) -ai.ImageLabel.ImageColor3=typeof(ah.Color)=="Color3"and ab.GetTextColorForHSB(ah.Color)or nil +aj.Size=UDim2.new(0,ai.IconSize,0,ai.IconSize) end -local aj=ac("TextLabel",{ + +local ak=ac("TextLabel",{ BackgroundTransparency=1, AutomaticSize="XY", -TextSize=ah.TextSize, +TextSize=ai.TextSize, FontFace=Font.new(ab.Font,Enum.FontWeight.SemiBold), -Text=ah.Title, -TextColor3=typeof(ah.Color)=="Color3"and ab.GetTextColorForHSB(ah.Color)or nil, +Text=ai.Title, +TextColor3=Color3.new(1,1,1), }) -local ak -if typeof(ah.Color)=="table"then +local al + -ak=ac"UIGradient" -for al,am in next,ah.Color do -ak[al]=am +local function ApplyContrast() +local am +if typeof(ai.Color)=="table"and al then +am=GetAverageColor(al) +else +am=ai.Color end -aj.TextColor3=ab.GetTextColorForHSB(ab.GetAverageColor(ak)) -if ai then -ai.ImageLabel.ImageColor3=ab.GetTextColorForHSB(ab.GetAverageColor(ak)) +local an=GetContrastTextColor(am) +ak.TextColor3=an + +if aj then +aj.ImageLabel.ImageColor3=an end + +dprint("Applied text color:",an:ToHex(),"for base:",am:ToHex()) end +if typeof(ai.Color)=="table"then +al=ac"UIGradient" +for am,an in next,ai.Color do +al[am]=an +end +end + -local al=ab.NewRoundFrame(ah.Radius,"Squircle",{ +local am=ab.NewRoundFrame(ai.Radius,"Squircle",{ AutomaticSize="X", -Size=UDim2.new(0,0,0,ah.Height), -Parent=ag, -ImageColor3=typeof(ah.Color)=="Color3"and ah.Color or Color3.new(1,1,1), +Size=UDim2.new(0,0,0,ai.Height), +Parent=ah, +ImageColor3=typeof(ai.Color)=="Color3"and ai.Color or Color3.new(1,1,1), },{ -ak, +al, ac("UIPadding",{ -PaddingLeft=UDim.new(0,ah.Padding), -PaddingRight=UDim.new(0,ah.Padding), +PaddingLeft=UDim.new(0,ai.Padding), +PaddingRight=UDim.new(0,ai.Padding), }), -ai, aj, +ak, ac("UIListLayout",{ FillDirection="Horizontal", VerticalAlignment="Center", -Padding=UDim.new(0,ah.Padding/1.5) +Padding=UDim.new(0,ai.Padding/1.5) }) }) +ai.TagFrame=am -function ah.SetTitle(am,an) -ah.Title=an -aj.Text=an + +ApplyContrast() + + +ak:GetPropertyChangedSignal"TextColor3":Connect(function() +if ai.Color then +task.defer(ApplyContrast) end +end) -function ah.SetColor(am,an) -ah.Color=an -if typeof(an)=="table"then -local ao=ab.GetAverageColor(an) -ad(aj,.06,{TextColor3=ab.GetTextColorForHSB(ao)}):Play() -local ap=al:FindFirstChildOfClass"UIGradient"or ac("UIGradient",{Parent=al}) -for aq,ar in next,an do ap[aq]=ar end -ad(al,.06,{ImageColor3=Color3.new(1,1,1)}):Play() -else -if ak then -ak:Destroy() +if aj then +aj.ImageLabel:GetPropertyChangedSignal"ImageColor3":Connect(function() +if ai.Color then +task.defer(ApplyContrast) end -ad(aj,.06,{TextColor3=ab.GetTextColorForHSB(an)}):Play() -if ai then -ad(ai.ImageLabel,.06,{ImageColor3=ab.GetTextColorForHSB(an)}):Play() +end) +end + + +if WindUI and typeof(WindUI.OnThemeChange)=="function"then +WindUI.OnThemeChange(function() +if ai.Color then +dprint"Theme changed → reapplying tag contrast" +ApplyContrast() end -ad(al,.06,{ImageColor3=an}):Play() +end) end + + +function ai.SetTitle(an,ao) +ai.Title=ao +ak.Text=ao end +function ai.SetColor(an,ao) +ai.Color=ao +dprint("SetColor →",typeof(ao)=="table"and"gradient"or ao:ToHex()) -return ah +if typeof(ao)=="table"then + +if not al then +al=ac("UIGradient",{Parent=am}) +end +for ap,aq in next,ao do +al[ap]=aq +end +ad(am,0.1,{ImageColor3=Color3.new(1,1,1)}):Play() +else + +if al then +al:Destroy() +al=nil +end +ad(am,0.1,{ImageColor3=ao}):Play() +end + +ApplyContrast() end +return ai +end return aa end function a.w() + local aa=(cloneref or clonereference or function(aa)return aa end)