-- thermohell.gg
-- discord.gg/jcYpUJzKjF
--!nolint
--!nocheck
--!optimize 2
--[[
Wave UI — packed, Fluent-compatible single file
------------------------------------------------------------------------
GENERATED FILE — DO NOT EDIT BY HAND.
Rbuild with: node Tools/WavePacker/pack.mjs
This bundles the Wave UI (42 modules) and exposes the FLUENT
RENEWED API. To port a Fluent script: replace its Fluent loadstring with this
one and it renders in Wave. SaveManager / InterfaceManager work best-effort.
local Fluent = loadstring(game:HttpGet(URL))()
-- or, to keep the 3-line Fluent style working unchanged:
local Fluent, SaveManager, InterfaceManager = loadstring(game:HttpGet(URL))()
Wave UI by the Wave Hub authors. Fluent API shape by Fluent Renewed (dawid /
Actual Master Oogway); this only emulates that shape over Wave.
Built: 2026-06-19T21:15:25.559Z
]]
-- =====================================================================
-- Module registry (every Wave UI file, inlined as a closure)
-- =====================================================================
local R = {}
R["Assets/UI-Icons.lua"] = function(...)
local UIIcons = {
InterFont = "rbxassetid://12187365364",
Fingerprint = "rbxassetid://10723375250",
ToggleBackground = "rbxassetid://18772190202",
TogglerHead = "rbxassetid://18772309008",
ButtonImage = "rbxassetid://10709791437",
SearchIcon = "rbxassetid://86737463322606",
ColorWheel = "rbxassetid://2849458409",
ColorTarget = "rbxassetid://73265255323268",
Grid = "rbxassetid://121484455191370",
Globe = "rbxassetid://108952102602834",
Transform = "rbxassetid://90336395745819",
Dropdown = "rbxassetid://18865373378",
PackageClosed = "rbxassetid://115850571462696",
PackageOpened = "rbxassetid://84706930964206",
SliderBar = "rbxassetid://18772615246",
SliderHead = "rbxassetid://18772834246",
StyleOneWallpaper = "rbxassetid://98449888558787",
StyleTwoWallpaper = "rbxassetid://95194237233246",
ShadowImage = "rbxassetid://8992230677",
UserInfoBlurred = "rbxassetid://18824089198",
IconUserAddress = "rbxassetid://80776764639016",
IconPingAddress = "rbxassetid://10709773755",
IconFramesAddress = "rbxassetid://83292249340711",
IconTimeAddress = "rbxassetid://10709805144",
IconCalendarAddress = "rbxassetid://10709789505",
IconClearLogs = "rbxassetid://10747362393",
IconStopLogs = "rbxassetid://10734906975",
IconOutputIcon = "rbxassetid://10734943193",
IconSearchImageLabel = "rbxassetid://86737463322606",
SearchButton = "rbxassetid://137043667632406",
SearchToggle = "rbxassetid://106609001100159",
SearchDropdown = "rbxassetid://80911450866035",
SearchColorPicker = "rbxassetid://83633879603959",
SearchKeybind = "rbxassetid://127901356375611",
SearchInput = "rbxassetid://125309904583288",
SearchRangeSlider = "rbxassetid://137031123766399",
SearchCheckBox = "rbxassetid://100384781966167",
SearchPlayerDropdown = "rbxassetid://85596878024517",
SearchSlider = "rbxassetid://101837522900050",
Universal = "rbxassetid://75879036116151",
DotGradient = "rbxassetid://94772639579159",
Null = "rbxassetid://0",
}
local AssetList = {}
for Name, AssetId in pairs(UIIcons) do
local TempInstance = Instance.new("ImageLabel")
TempInstance.Image = AssetId
table.insert(AssetList, TempInstance)
end
local LoadedCount = 0
Services.ContentProvider:PreloadAsync(AssetList, function(AssetId, Status)
LoadedCount = LoadedCount + 1
end)
return UIIcons
end
R["Wave/Modules/Services.lua"] = function(...)
local ServiceCache = {}
local GetService = game.GetService
local CloneRefServices = {
CoreGui = true,
RunService = true
}
local NoCloneRefServices = {
Players = true
}
getgenv().Services = setmetatable({}, {
__index = function(self, ServiceName)
local Cache = ServiceCache[ServiceName]
if Cache then
return Cache
end
local ShouldCloneRef = CloneRefServices[ServiceName] and not NoCloneRefServices[ServiceName]
local Service = ShouldCloneRef and cloneref(GetService(game, ServiceName)) or GetService(game, ServiceName)
ServiceCache[ServiceName] = Service
return Service
end
})
return Services
end
R["Wave/Modules/Utility.lua"] = function(...)
local Utility = {}
Utility.__index = Utility
local MetaUtility = setmetatable({
NameCallMethods = {},
_initialized = false
}, {
__index = function(self, key)
return Utility[key]
end,
__newindex = function(self, key, value)
rawset(self, key, value)
end,
__call = function(self)
return setmetatable({}, self)
end
})
function Utility:GetPlayer()
return Services.Players.LocalPlayer
end
function Utility:GetPlayerScripts()
return self:GetPlayer().PlayerScripts
end
function Utility:GetCharacter()
return self:GetPlayer().Character or self:GetPlayer().CharacterAdded:Wait()
end
function Utility:GetCharacterTimeout()
return self:GetPlayer().Character or false
end
function Utility:GetUserInterface()
return self:GetPlayer().PlayerGui or self:GetPlayer():WaitForChild("PlayerGui")
end
function Utility:GetUserBackpack()
return self:GetPlayer().Backpack or self:GetPlayer():WaitForChild("Backpack")
end
function Utility:GetHumanoidRootPart()
local Character = self:GetCharacter()
return Character and Character:FindFirstChild("HumanoidRootPart")
end
function Utility:GetHumanoid()
local Character = self:GetCharacter()
return Character and Character:FindFirstChild("Humanoid")
end
function Utility:GetMouse()
return cloneref(self:GetPlayer():GetMouse())
end
function Utility:GetCamera()
return Services.Workspace.CurrentCamera
end
function Utility:GetPing(Round)
local Ping = self:GetPlayer():GetNetworkPing() * 2000
return Round and math.round(Ping) or Ping
end
function Utility:GetAllPlayers(IncludeSelf)
local TotalPlayers = {}
local LocalPlayer = self:GetPlayer()
for _, Player in pairs(Services.Players:GetPlayers()) do
if Player ~= LocalPlayer then
table.insert(TotalPlayers, Player)
elseif IncludeSelf then
table.insert(TotalPlayers, Player)
end
end
return TotalPlayers
end
function Utility:GetAllCharacters(IncludeSelf)
local TotalCharacters = {}
local LocalPlayer = self:GetPlayer()
for _, Player in pairs(Services.Players:GetPlayers()) do
if Player ~= LocalPlayer and Player.Character then
table.insert(TotalCharacters, Player.Character)
elseif IncludeSelf and Player.Character then
table.insert(TotalCharacters, Player.Character)
end
end
return TotalCharacters
end
function Utility:GetAllCharactersHumanoidRootParts(IncludeSelf)
local AllHumanoidRootParts = {}
local LocalPlayer = self:GetPlayer()
for _, Player in pairs(Services.Players:GetPlayers()) do
if Player.Character then
local HumanoidRootPart = Player.Character:FindFirstChild("HumanoidRootPart")
if HumanoidRootPart then
if Player ~= LocalPlayer then
table.insert(AllHumanoidRootParts, HumanoidRootPart)
elseif IncludeSelf then
table.insert(AllHumanoidRootParts, HumanoidRootPart)
end
end
end
end
return AllHumanoidRootParts
end
function Utility:FindClosestPlayer(Settings)
local MousePosition = Vector2.new(self:GetMouse().X, self:GetMouse().Y)
local ShortestDistance = math.huge
local ClosestPlayer = nil
Settings = Settings or {}
local MaxRange = Settings.AimbotRange or 100000
local FieldRadius = Settings.FieldRadius or 10000
local TeamState = Settings.TeamState or false
local UseFieldCircle = Settings.UseFieldCircle or false
for _, Player in ipairs(self:GetAllPlayers()) do
if TeamState then
if Settings.TeamCheckCallback and Settings.TeamCheckCallback(Player) then
continue
elseif self:GetPlayer().Team and Player.Team == self:GetPlayer().Team then
continue
end
end
if not Player.Character then
continue
end
local HumanoidRootPart = Player.Character:FindFirstChild("HumanoidRootPart")
local Humanoid = Player.Character:FindFirstChild("Humanoid")
if not HumanoidRootPart or (Humanoid and Humanoid.Health <= 0) then
continue
end
local ScreenPosition, OnScreen = workspace.CurrentCamera:WorldToViewportPoint(HumanoidRootPart.Position)
if OnScreen then
local ScreenDistance = (MousePosition - Vector2.new(ScreenPosition.X, ScreenPosition.Y)).Magnitude
local WorldDistance = (HumanoidRootPart.Position - workspace.CurrentCamera.CFrame.Position).Magnitude
if UseFieldCircle and ScreenDistance > FieldRadius then
continue
end
if WorldDistance > MaxRange then
continue
end
if ScreenDistance < ShortestDistance then
ShortestDistance = ScreenDistance
ClosestPlayer = Player
end
end
end
return ClosestPlayer
end
function Utility:GeneratePlayerList(Properties)
local UseTargetPlayers = Properties.UseTargetPlayers
local UseSafePlayers = Properties.UseSafePlayers
local TargetPlayers = Properties.TargetPlayers or {}
local SafePlayers = Properties.SafePlayers or {}
if UseTargetPlayers and #TargetPlayers == 0 then
return {}
end
local TotalPlayers = {}
for _, Player in pairs(self:GetAllPlayers()) do
if UseSafePlayers and #SafePlayers > 0 and table.find(SafePlayers, Player.Name) then
continue
end
if UseTargetPlayers then
if table.find(TargetPlayers, Player) then
table.insert(TotalPlayers, Player)
end
else
table.insert(TotalPlayers, Player)
end
end
return TotalPlayers
end
function Utility:State(Flag)
return WaveLibrary:ReturnFeatures()[Flag].State
end
function Utility:Value(Flag)
return WaveLibrary:ReturnFeatures()[Flag] and WaveLibrary:ReturnFeatures()[Flag].Value or "Could not find Feature."
end
function Utility:OptionSelected(Flag)
if typeof(Flag) == "table" then
local Selected = {}
local Count = 0
for Key, IsSelected in pairs(Flag) do
if IsSelected then
Count = Count + 1
Selected[Count] = Key
end
end
if Count == 0 then
return false
elseif Count == 1 then
return Selected[1]
else
return Selected
end
else
return self:OptionSelected(WaveLibrary:ReturnFeatures()[Flag]:GetOptions())
end
end
function Utility:PropertyTween(Instance, TweenInfo, PropertyTable)
return Services.TweenService:Create(Instance, TweenInfo, PropertyTable)
end
function Utility:QuickTween(Instance, Properties)
local QuickPlay = Services.TweenService:Create(Instance, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), Properties)
QuickPlay:Play()
return QuickPlay
end
function Utility:ProgressiveTween(Instance, Speed, Properties, WaitToComplete)
if not Instance then
return
end
local CurrentPosition = Instance.Position
local TargetPosition = Properties.Position or (Properties.CFrame and Properties.CFrame.Position)
if not TargetPosition then
return
end
local Distance = (CurrentPosition - TargetPosition).Magnitude
local TweenInformation = TweenInfo.new(Distance / Speed, Enum.EasingStyle.Linear)
Maid.ProgressiveCreatedTween = Services.TweenService:Create(Instance, TweenInformation, Properties)
Maid.ProgressiveCreatedTween:Play()
if WaitToComplete then
Maid.ProgressiveCreatedTween.Completed:Wait()
end
return Maid.ProgressiveCreatedTween
end
function Utility:AttachToBack(Toggle, Target, Custom)
if not Toggle then
if Maid.UtilAttachToBack then
Maid.UtilAttachToBack:Disconnect()
end
Maid.UtilAttachToBack = nil
return
end
local Offset = Custom or CFrame.new(0, 0, 5)
Maid.UtilAttachToBack = Services.RunService.Heartbeat:Connect(function()
if Target then
local TargetHRP = Target:FindFirstChild("HumanoidRootPart")
local MyHRP = self:GetHumanoidRootPart()
if TargetHRP and MyHRP then
MyHRP.CFrame = TargetHRP.CFrame * Offset
end
end
end)
end
function Utility:LerpReturn(Alpha, Beta, Time)
return Alpha + (Beta - Alpha) * Time
end
function Utility:Color3ToHex(Color)
return string.format("#%02X%02X%02X", math.floor(Color.R * 255), math.floor(Color.G * 255), math.floor(Color.B * 255))
end
function Utility:HexToColor3(Hex)
local R = tonumber(string.sub(Hex, 2, 3), 16) / 255
local G = tonumber(string.sub(Hex, 4, 5), 16) / 255
local B = tonumber(string.sub(Hex, 6, 7), 16) / 255
return Color3.new(R, G, B)
end
function Utility:FindFirstDescendant(Location, Name)
return Location:FindFirstChild(Name, true)
end
function Utility:FindFirstChildThatMatchesWith(Parent, Condition)
for _, Child in pairs(Parent:GetChildren()) do
if Child.Name:match(Condition) then
return Child
end
end
return nil
end
function Utility:FindFirstDescendantThatMatchesWith(Parent, Condition)
for _, Child in pairs(Parent:GetDescendants()) do
if Child.Name:match(Condition) then
return Child
end
end
return nil
end
function Utility:FindAndModifyInTable(Table, TargetKey, NewValue)
if type(Table) ~= "table" then
return
end
for Key, Value in pairs(Table) do
if Key == TargetKey then
Table[Key] = NewValue
end
if type(Value) == "table" then
self:FindAndModifyInTable(Value, TargetKey, NewValue)
end
end
end
function Utility:Notify(NotifyTitle, NotifyDescription, NotifyLifetime)
if not typeof(NotifyDescription) == "string" then
NotifyDescription = tostring(NotifyDescription)
end
WaveLibrary:Notify({
Title = NotifyTitle or WaveLibrary.Settings.Title,
Description = NotifyDescription,
Lifetime = NotifyLifetime or 5
})
end
function Utility:Prompt(NotifyTitle, NotifyDescription, Options)
WaveLibrary:Dialog({
Title = NotifyTitle or WaveLibrary.Settings.Title,
Description = NotifyDescription,
Buttons = {
{
Name = Options.FirstName,
Callback = Options.FirstCallback,
},
{
Name = Options.SecondName,
Callback = Options.SecondCallback,
}
}
})
end
function Utility:Inform(NotifyTitle, NotifyDescription, Options)
WaveLibrary:Dialog({
Title = NotifyTitle or WaveLibrary.Settings.Title,
Description = NotifyDescription,
Buttons = {
{
Name = Options.FirstName,
Callback = Options.Callback,
},
}
})
end
function Utility:Encounter(Settings)
return WaveLibrary:Encounter(Settings)
end
function Utility:PrintTable(Table, Index)
Index = Index or 0
local Spacing = string.rep(" ", Index)
if type(Table) ~= "table" then
print("The provided argument is not a table.")
return
end
for Key, Value in pairs(Table) do
if type(Value) == "table" then
print(Spacing .. tostring(Key) .. ":")
self:PrintTable(Value, Index + 1)
else
print(Spacing .. tostring(Key) .. " = " .. tostring(Value))
end
end
end
function Utility:CheckFile(File)
return isfile("Wave-Hub/" .. File)
end
function Utility:ListFiles(Location)
return listfiles("Wave-Hub/" .. Location)
end
function Utility:ListManager(Location, KeepExtension)
local Files = listfiles("Wave-Hub/" .. Location)
local Results = {}
for _, Path in ipairs(Files) do
local Name = string.match(Path, "[^\\/]+$") or Path
if not KeepExtension then
Name = string.match(Name, "^(.*)%.") or Name
end
Results[Name] = Path
end
return Results
end
function Utility:ReadFile(File, Parameter)
local FilePath
local FileName = string.match(File, "[^/\\]+$") or File
if string.sub(File, 1, 9) == "Wave-Hub/" or string.sub(File, 1, 9) == "Wave-Hub\\" then
FilePath = File
else
FilePath = "Wave-Hub/" .. File
end
local Success, Result = pcall(function()
return loadstring(readfile(FilePath) or nil)
end)
if not Success then
print("Error in " .. FileName .. "| ReadFile:", Result)
return nil
end
return Result
end
function Utility:LoadFile(File, Parameter)
local FileName = string.match(File, "[^/\\]+$") or File
local FilePath = (string.sub(File, 1, 9) == "Wave-Hub/" or string.sub(File, 1, 9) == "Wave-Hub\\")
and File or "Wave-Hub/" .. File
local FileContent
local Success, ErrorMessage = pcall(function()
FileContent = readfile(FilePath)
end)
if not Success then
warn("Failed to read file:", FileName, "| Error:", ErrorMessage)
return nil
end
if type(FileContent) == "table" then
return FileContent
elseif type(FileContent) ~= "string" then
warn("Unsupported file content type for:", FileName, "| Got:", typeof(FileContent))
return nil
end
local Chunk, LoadError = loadstring(FileContent, Parameter or FileName)
if not Chunk then
warn("Failed to compile file:", FileName, "| Error:", LoadError)
return nil
end
local Result
local ExecSuccess, ExecError = pcall(function()
Result = Chunk()
end)
if not ExecSuccess then
warn("Failed to execute file:", FileName, "| Error:", ExecError)
return nil
end
return Result
end
function Utility:LoadAddon(AddonName)
local FileDirectory = ("Wave-Hub/Games/Addons/%s Addons/"):format(GameLoading) .. AddonName .. ".lua"
local FileToCheck = isfile(FileDirectory)
if not FileToCheck then
return nil
end
return loadstring(readfile(FileDirectory))()
end
function Utility:IsSetting(Setting, Globalize, Path)
local FileDirectory = "WaveHubSettings/settings/startup/" .. Setting .. ".wave"
local FileToCheck = isfile(FileDirectory)
if Globalize then
getgenv()[Setting] = FileToCheck
end
return Path and FileDirectory or FileToCheck
end
function Utility:SaveOpened(Check, Save)
local FullPath = self:IsSetting("TerminalSaved", false, true)
if Check then
if not isfile(FullPath) and Save then
writefile(FullPath, "")
elseif isfile(FullPath) and not Save then
delfile(FullPath)
end
end
return isfile(FullPath)
end
function Utility:LoadActor(File, Actor)
if getgenv().WaveRunningOnActor then
return "Running"
end
if getgenv().WAVE_BUNDLE_MODE and getgenv().WAVE_ACTOR_INIT then
local InitCode = getgenv().WAVE_ACTOR_INIT()
run_on_actor(Actor, InitCode)
run_on_actor(Actor, [=[
getgenv().WaveRunningOnActor = true
]=])
else
run_on_actor(Actor, [=[
getgenv().WaveRunningOnActor = true
]=])
end
local FilePath
if string.sub(File, 1, 9) == "Wave-Hub/" or string.sub(File, 1, 9) == "Wave-Hub\\" then
FilePath = File
else
FilePath = "Wave-Hub/" .. File
end
local FileContent = readfile(FilePath)
run_on_actor(Actor, FileContent)
return "Initiated"
end
function Utility:SecureCallFunction(DesiredOutcome)
local function SecuredFunction()
setthreadidentity(2)
DesiredOutcome()
setthreadidentity(7)
end
return SecuredFunction()
end
function Utility:InitializeMethods()
if not Utility.NameCallMethods then
Utility.NameCallMethods = {}
end
if not Utility.BlockedRemotes then
Utility.BlockedRemotes = {}
end
local GameRawMetatable = getrawmetatable(game)
setreadonly(GameRawMetatable, false)
if not Maid.InitializedNamecall then
Maid.InitializedNamecall = true
local InitialNameCall = GameRawMetatable.__namecall
GameRawMetatable.__namecall = function(Self, ...)
if checkcaller() then
return InitialNameCall(Self, ...)
end
local Method = getnamecallmethod()
for _, BlockedRemote in pairs(Utility.BlockedRemotes) do
if BlockedRemote.Method == Method and Self.Name == BlockedRemote.Server then
if BlockedRemote.Condition ~= nil then
if typeof(BlockRemote.Condition) == "function" then
if not BlockRemote.Condition() then
continue
end
elseif not BlockRemote.Condition then
continue
end
end
if BlockedRemote.CustomCallback then
return BlockedRemote.CustomCallback
end
return
end
end
local Arguments = {...}
for _, NameCallInfo in pairs(Utility.NameCallMethods) do
if NameCallInfo.Method == Method and Self.Name == NameCallInfo.Server and (NameCallInfo.Condition and NameCallInfo.Condition() or not NameCallInfo.Condition) then
if typeof(NameCallInfo.Arguments) == "table" then
for Index, ArgumentIndex in ipairs(NameCallInfo.Arguments) do
if Arguments[ArgumentIndex] ~= nil then
local EditedValue
if typeof(NameCallInfo.Edited) == "table" then
EditedValue = NameCallInfo.Edited[Index]
else
EditedValue = NameCallInfo.Edited
end
if typeof(EditedValue) == "function" then
EditedValue = EditedValue()
end
if EditedValue ~= nil then
Arguments[ArgumentIndex] = EditedValue
end
end
end
elseif typeof(NameCallInfo.Arguments) == "number" then
if Arguments[NameCallInfo.Arguments] ~= nil then
local EditedValue = NameCallInfo.Edited
if typeof(EditedValue) == "function" then
EditedValue = EditedValue()
end
if EditedValue ~= nil then
Arguments[NameCallInfo.Arguments] = EditedValue
end
end
end
return InitialNameCall(Self, unpack(Arguments))
end
end
return InitialNameCall(Self, ...)
end
end
setreadonly(GameRawMetatable, true)
Utility._initialized = true
end
function Utility:BlockRemote(Method, Server, Condition, CustomCallback)
if not Utility._initialized then
self:InitializeMethods()
end
if not Utility.BlockedRemotes then
Utility.BlockedRemotes = {}
end
for _, BlockedRemote in pairs(Utility.BlockedRemotes) do
if BlockedRemote.Method == Method and BlockedRemote.Server == Server then
return false
end
end
table.insert(Utility.BlockedRemotes, {
Method = Method,
Server = Server,
Condition = Condition,
CustomCallback = CustomCallback or nil,
})
return true
end
function Utility:UnblockRemote(Method, Server)
if not Utility.BlockedRemotes then
return false
end
for _, BlockedRemote in pairs(Utility.BlockedRemotes) do
if BlockedRemote.Server == Server then
BlockedRemote.Server = " \nUnblocked"
end
end
end
function Utility:IsRemoteBlocked(Method, Server)
if not Utility.BlockedRemotes then
return false
end
for _, BlockedRemote in pairs(Utility.BlockedRemotes) do
if BlockedRemote.Method == Method and BlockedRemote.Server == Server then
return true
end
end
return false
end
function Utility:UpdateMethod(Method, Server, Arguments, Edited, Condition, TemporarySeconds)
if not Utility._initialized then
self:InitializeMethods()
end
if not Utility.NameCallMethods then
Utility.NameCallMethods = {}
end
local EditedSuccess = self:EditMethod(Method, Server, Arguments, Edited, Condition, TemporarySeconds)
if EditedSuccess then
return "Edited"
end
table.insert(Utility.NameCallMethods, {
Method = Method,
Server = Server,
Arguments = Arguments,
Edited = Edited,
Condition = Condition or false
})
if TemporarySeconds and TemporarySeconds > 0 then
task.delay(TemporarySeconds, function()
self:RemoveMethod(Method, Server)
end)
end
return "Inserted"
end
function Utility:HookGetAttribute(Condition)
if not Utility._initialized then
self:InitializeMethods()
end
local GameRawMetatable = getrawmetatable(game)
setreadonly(GameRawMetatable, false)
if not Maid.OriginalIndex then
Maid.OriginalIndex = GameRawMetatable.__index
GameRawMetatable.__index = newcclosure(function(Self, Key)
if Key == "GetAttribute" then
return function(_, AttributeName)
if Condition and Condition(AttributeName) then
return nil
end
return Maid.OriginalIndex(Self, Key)(Self, AttributeName)
end
end
return Maid.OriginalIndex(Self, Key)
end)
end
setreadonly(GameRawMetatable, true)
end
function Utility:EditMethod(Method, Server, Arguments, Edited, Condition, TemporarySeconds)
if not Utility.NameCallMethods then
return false
end
for Index, Info in ipairs(Utility.NameCallMethods) do
if Info.Method == Method and Info.Server == Server then
local Original = {
Arguments = Info.Arguments,
Edited = Info.Edited,
Condition = Info.Condition
}
Utility.NameCallMethods[Index] = {
Method = Method,
Server = Server,
Arguments = Arguments or Info.Arguments,
Edited = Edited or Info.Edited,
Condition = Condition ~= nil and Condition or Info.Condition,
Original = Original
}
if TemporarySeconds and TemporarySeconds > 0 then
task.delay(TemporarySeconds, function()
if Utility.NameCallMethods[Index] and Utility.NameCallMethods[Index].Original then
Utility.NameCallMethods[Index].Arguments = Original.Arguments
Utility.NameCallMethods[Index].Edited = Original.Edited
Utility.NameCallMethods[Index].Condition = Original.Condition
Utility.NameCallMethods[Index].Original = nil
end
end)
end
return true
end
end
return false
end
function Utility:RemoveMethod(Method, Server)
if not Utility.NameCallMethods then
return false
end
for Index, Info in ipairs(Utility.NameCallMethods) do
if Info.Method == Method and Info.Server == Server then
table.remove(Utility.NameCallMethods, Index)
return true
end
end
return false
end
function Utility:IsActiveMethod(Method, Server)
if not Utility.NameCallMethods then
return false
end
for _, Info in ipairs(Utility.NameCallMethods) do
if Info.Method == Method and Info.Server == Server then
return true
end
end
return false
end
function Utility:VirtualInputMachineClick(Element)
local Inset = Services.Services.GuiService:GetGuiInset()
local GuiElement = Element
local AbsPos = GuiElement.AbsolutePosition
local AbsSize = GuiElement.AbsoluteSize
local ClickX = AbsPos.X + (AbsSize.X / 2) + Inset.X
local ClickY = AbsPos.Y + (AbsSize.Y / 2) + Inset.Y
VirtualInputMachine:SendMouseButtonEvent(ClickX or 0, ClickY or 0, 0, true, game, 1)
task.wait(0.1)
VirtualInputMachine:SendMouseButtonEvent(ClickX or 0, ClickY or 0, 0, false, game, 1)
end
function Utility:SendKey(Key, Time, EndTime)
VirtualInputMachine:SendKeyEvent(true, Enum.KeyCode[Key], false, game)
task.wait(Time or 0)
VirtualInputMachine:SendKeyEvent(false, Enum.KeyCode[Key], false, game)
end
function Utility:FindBestServer(GameId)
local Success, Result = pcall(function()
return self:ExecuteHTTPGet("https://games.roblox.com/v1/games/" .. GameId .. "/servers/Public?sortOrder=Asc&limit=100")
end)
if not Success then
return nil
end
local Data = Services.Services.HttpService:JSONDecode(Result)
if not Data or not Data.data then
return nil
end
for _, Server in ipairs(Data.data) do
if Server.playing > 5 and Server.playing < Server.maxPlayers - 2 then
return Server.id
end
end
if #Data.data > 0 then
return Data.data[1].id
end
return nil
end
function Utility:TeleportToGame(GameName, Options)
Options = Options or {}
local GameInfo = nil
for _, Game in ipairs(GameData) do
if Game.Name == GameName then
GameInfo = Game
break
end
end
if not GameInfo then
self:Notify("Teleport Error", "Game '" .. GameName .. "' not found in database.", 5)
return false
end
if not GameInfo.Available then
self:Notify("Coming Soon", GameName .. " teleport will be available soon!", 3)
return false
end
local GameId = GameInfo.Id
if type(GameId) == "table" then
GameId = GameId[1]
end
if GameId == 0 then
self:Notify("Coming Soon", GameName .. " teleport will be available soon!", 3)
return false
end
self:Notify("Teleporting", "Preparing to teleport to " .. GameName .. "...", 3)
wait(1)
local TeleportOptions = Instance.new("TeleportOptions")
if Options.ReserveServer then
TeleportOptions.ReservedServerAccessCode = Options.ReserveServer
end
if Options.ServerJobId then
TeleportOptions.ServerInstanceId = Options.ServerJobId
elseif Options.FindBestServer then
local BestServerId = self:FindBestServer(GameId)
if BestServerId then
TeleportOptions.ServerInstanceId = BestServerId
self:Notify("Server Found", "Found a good server! Teleporting...", 2)
end
end
local Success, ErrorMessage = pcall(function()
Services.Services.TeleportService:TeleportAsync(GameId, {self:GetPlayer()}, TeleportOptions)
end)
if not Success then
local FriendlyMessage = "Failed to teleport. Please check your internet connection."
if string.find(ErrorMessage, "unauthorized") or string.find(ErrorMessage, "Unauthorized") then
FriendlyMessage = "Please enable 'Allow Third Party Teleports' in your Roblox account settings."
elseif string.find(ErrorMessage, "flooded") then
FriendlyMessage = "Too many teleport requests. Please wait 30 seconds and try again."
elseif string.find(ErrorMessage, "not found") then
FriendlyMessage = "Game is currently unavailable. Please try again later."
end
self:Notify("Teleport Failed", FriendlyMessage, 7)
return false
end
return true
end
function Utility:TeleportWithPrompt(GameName, Options)
self:Prompt(false, "Are you sure you want to teleport to " .. GameName .. "?", {
FirstName = "Yes",
SecondName = "Cancel",
FirstCallback = function()
self:TeleportToGame(GameName, Options)
end,
SecondCallback = function()
self:Notify("Cancelled", "Teleport cancelled.", 2)
end,
})
end
function Utility:GetGameLink(GameName)
for _, GameInfo in ipairs(GameData) do
if GameInfo.Name == GameName then
return GameInfo.Link
end
end
return nil
end
function Utility:CopyGameLink(GameName)
local Link = self:GetGameLink(GameName)
if Link then
setclipboard(Link)
self:Notify("Link Copied", "Game link copied to clipboard!", 3)
else
self:Notify("Error", "Game link not available.", 3)
end
end
function Utility:QueueScript()
if not getgenv().QueuedTeleport then
queue_on_teleport(readfile("Wave-Hub/Script-Loader.lua"))
getgenv().QueuedTeleport = true
end
end
function Utility:DisableResetOnSpawn()
Maid.ScreenGuisWithResetOnSpawn = {}
local UserInterface = self:GetUserInterface()
if UserInterface then
for _, Object in pairs(UserInterface:GetChildren()) do
if Object:IsA("ScreenGui") and Object.ResetOnSpawn then
table.insert(Maid.ScreenGuisWithResetOnSpawn, Object)
Object.ResetOnSpawn = false
end
end
end
end
function Utility:EnableResetOnSpawn()
for _, ScreenGui in pairs(Maid.ScreenGuisWithResetOnSpawn) do
if ScreenGui and ScreenGui.Parent then
ScreenGui.ResetOnSpawn = true
end
end
Maid.ScreenGuisWithResetOnSpawn = {}
end
function Utility:CreateCommunicationChannel()
local Identity, Channel = create_comm_channel()
return Identity, Channel
end
function Utility:ExecuteFunction(Arguments)
return function()
local OnStart = Arguments.OnStart
local Callback = Arguments.Callback
local OnCompleted = Arguments.OnCompleted
local Results = {
OnStartResult = nil,
CallbackResult = nil,
OnCompletedResult = nil,
StartingNotification = nil,
Success = true,
Errors = {},
}
if OnStart and type(OnStart) == "function" then
local Success, Result = pcall(OnStart)
if Success then
Results.OnStartResult = Result
else
Results.Success = false
table.insert(Results.Errors, {Stage = "OnStart", Error = Result})
end
elseif OnStart and type(OnStart) == "string" then
local Notification = WaveLibrary:Notify({
Title = getgenv().WaveLibrary.Settings.Title,
Description = (OnStart)
})
if Arguments.StartingLoadingEffect then
Results.StartingNotification = Notification
task.spawn(function()
local Dots = {"", ".", "..", "..."}
local Index = 1
while Arguments.StartingLoadingEffect do
Notification:UpdateDescription(OnStart .. Dots[Index])
Index = Index % #Dots + 1
task.wait(0.25)
end
end)
end
end
if Callback and type(Callback) == "function" then
local Success, Result = pcall(Callback)
if Success then
Results.CallbackResult = Result
else
Results.Success = false
table.insert(Results.Errors, {Stage = "Callback", Error = Result})
end
end
if OnCompleted and type(OnCompleted) == "function" then
local Success, Result = pcall(OnCompleted)
if Success then
Results.OnCompletedResult = Result
else
Results.Success = false
table.insert(Results.Errors, {Stage = "OnCompleted", Error = Result})
end
elseif OnCompleted and type(OnCompleted) == "string" then
if Results.StartingNotification then
Results.StartingNotification:Cancel()
end
WaveLibrary:Notify({
Title = getgenv().WaveLibrary.Settings.Title,
Description = (OnCompleted)
})
end
return Results
end
end
function Utility:ExecuteHTTPGet(Link, Async)
return Async and game:HttpGetAsync(Link) or game:HttpGet(Link)
end
function Utility:RenderWait(Time)
return function()
local Current = tick()
Time = Time or 0
repeat Services.RunService.Heartbeat:Wait()
until tick() - Current >= Time
return tick() - Current
end
end
function Utility:KillMaidInstance(Name)
if Maid[Name] then
if type(Maid[Name]) == "thread" then
task.cancel(Maid[Name])
elseif type(Maid[Name]) == "RBXScriptConnection" then
Maid[Name]:Disconnect()
end
end
Maid[Name] = nil
end
function Utility:Reload()
if getgenv().WaveLibrary then
WaveLibrary:Unload()
end
end
function Utility:IsWaveExecutor()
return getexecutorname():match("Wave") ~= nil
end
function Utility:IsPremiumHubUser()
return true
end
function Utility:CheckHubStatus(PrimaryAccentColor)
if self:IsWaveExecutor() and not self:IsPremiumHubUser() then
return 'Free'
elseif self:IsWaveExecutor() and self:IsPremiumHubUser() then
return string.format('Premium', PrimaryAccentColor.R * 255, PrimaryAccentColor.G * 255, PrimaryAccentColor.B * 255)
end
return 'Demo'
end
-- [packed] Services is provided by the bundle bootstrap
return MetaUtility
end
R["Wave/Modules/Maid.lua"] = function(...)
local Maid = {}
Maid.ClassName = "Maid"
function Maid.New()
return setmetatable({
_Tasks = {}
}, Maid)
end
function Maid.IsMaid(Value)
return type(Value) == "table" and Value.ClassName == "Maid"
end
function Maid:__index(Index)
if Maid[Index] then
return Maid[Index]
else
return self._Tasks[Index]
end
end
function Maid:__newindex(Index, NewTask)
if Maid[Index] ~= nil then
error(string.format("Cannot use '%s' as a Maid key", tostring(Index)), 2)
end
local Tasks = self._Tasks
local OldTask = Tasks[Index]
if OldTask == NewTask then
return
end
Tasks[Index] = NewTask
if OldTask then
self:_CleanupTask(OldTask)
end
end
function Maid:_CleanupTask(Task)
local TaskType = typeof(Task)
if TaskType == "function" then
Task()
elseif TaskType == "thread" then
local Success = pcall(function()
if coroutine.status(Task) ~= "dead" then
task.cancel(Task)
end
end)
if not Success then
task.defer(function()
pcall(task.cancel, Task)
end)
end
elseif TaskType == "RBXScriptConnection" then
if Task.Connected then
Task:Disconnect()
end
elseif TaskType == "Instance" then
if Task.Parent ~= nil then
Task:Destroy()
end
elseif TaskType == "table" then
if type(Task.Destroy) == "function" then
Task:Destroy()
elseif type(Task.Disconnect) == "function" then
Task:Disconnect()
end
end
end
function Maid:Add(Task)
if not Task then
error("Task cannot be false or nil", 2)
end
local TaskId = #self._Tasks + 1
self._Tasks[TaskId] = Task
if type(Task) == "table" and (not Task.Destroy) and (not Task.Disconnect) then
warn("[Maid.Add] - Gave table task without .Destroy or .Disconnect\n\n" .. debug.traceback())
end
return Task
end
function Maid:GiveTask(Task)
if not Task then
error("Task cannot be false or nil", 2)
end
local TaskId = #self._Tasks + 1
self._Tasks[TaskId] = Task
if type(Task) == "table" and (not Task.Destroy) and (not Task.Disconnect) then
warn("[Maid.GiveTask] - Gave table task without .Destroy or .Disconnect\n\n" .. debug.traceback())
end
return TaskId
end
function Maid:GivePromise(Promise)
if not Promise:IsPending() then
return Promise
end
local NewPromise = Promise.resolved(Promise)
local Id = self:GiveTask(NewPromise)
NewPromise:Finally(function()
self[Id] = nil
end)
return NewPromise
end
function Maid:AddCleanupTask(Task)
if typeof(Task) ~= "function" then
return
end
if not self._CleanupTasks then
self._CleanupTasks = {}
end
table.insert(self._CleanupTasks, Task)
end
function Maid:DoCleaning()
local PrecleanupTasks = self._CleanupTasks
local Tasks = self._Tasks
if PrecleanupTasks then
for _, Task in pairs (PrecleanupTasks) do
Task()
end
end
local TasksToClean = {}
for Index, Task in pairs(Tasks) do
TasksToClean[Index] = Task
Tasks[Index] = nil
end
for _, Task in pairs(TasksToClean) do
self:_CleanupTask(Task)
end
end
function Maid:Destroy()
local Tasks = self._Tasks
local TaskSnapshot = {}
for Index, Task in pairs(Tasks) do
table.insert(TaskSnapshot, Task)
Tasks[Index] = nil
end
for _, Task in ipairs(TaskSnapshot) do
pcall(function()
self:_CleanupTask(Task)
end)
end
table.clear(self._Tasks)
setmetatable(self, nil)
end
return Maid
end
R["Wave/Modules/Sound.lua"] = function(...)
local Sound = {}
Sound.__index = Sound
function Sound.New(FilePath, Speed, Volume, IsLink, Link)
local self = setmetatable({}, Sound)
if IsLink and not isfile(FilePath) then
writefile(FilePath, Utility:ExecuteHTTPGet(Link))
end
self.SoundAsset = getcustomasset(FilePath)
self.Speed = Speed or 1
self.Volume = Volume or 1
self.Sound = Instance.new("Sound", Services.CoreGui)
self.Sound.SoundId = self.SoundAsset
self.Sound.PlaybackSpeed = self.Speed
self.Sound.Volume = self.Volume
return self
end
function Sound:Play()
self.Sound:Play()
end
function Sound:Stop()
self.Sound:Stop()
end
function Sound:SetSpeed(Speed)
self.Speed = Speed
self.Sound.PlaybackSpeed = Speed
end
function Sound:SetVolume(Volume)
self.Volume = Volume
self.Sound.Volume = Volume
end
function Sound:Destroy()
self.Sound:Destroy()
self.Sound = nil
end
return Sound
end
R["Wave/UserInterface/WaveUI.lua"] = function(...)
local WaveLibrary = { Options = {}, LoadedFully = false, Folder = "WaveHubSettings", TabSettings = {}, Unloaded = false, WindowState = nil, AcrylicBlur = true, InitializedGlobalSettings = false, Tabs = {} }
function WaveLibrary:CreateShadow(Options)
local ShadowContainer = Instance.new("ImageLabel")
ShadowContainer.Name = "Shadow" .. math.random(0, 10000)
ShadowContainer.Size = UDim2.new(1, 100, 1, 96)
ShadowContainer.Position = UDim2.new(0, -50, 0, -28)
ShadowContainer.AnchorPoint = Vector2.new(0, 0)
ShadowContainer.BackgroundTransparency = 1
ShadowContainer.BackgroundColor3 = Color3.new(0.639216, 0.635294, 0.647059)
ShadowContainer.Image = Assets.ShadowImage
ShadowContainer.ImageTransparency = 0.3
ShadowContainer.ImageColor3 = Color3.new(1, 1, 1)
ShadowContainer.ImageRectOffset = Vector2.new(0, 0)
ShadowContainer.ImageRectSize = Vector2.new(0, 0)
ShadowContainer.ScaleType = Enum.ScaleType.Slice
ShadowContainer.SliceCenter = Rect.new(99, 99, 99, 99)
ShadowContainer.SliceScale = 1
ShadowContainer.TileSize = UDim2.new(1, 0, 1, 0)
ShadowContainer.BorderSizePixel = 0
ShadowContainer.BorderColor3 = Color3.new(0.105882, 0.164706, 0.207843)
ShadowContainer.BorderMode = Enum.BorderMode.Outline
ShadowContainer.ZIndex = -1
ShadowContainer.Visible = true
ShadowContainer.Active = false
ShadowContainer.ClipsDescendants = false
ShadowContainer.Selectable = false
ShadowContainer.AutoLocalize = true
ShadowContainer.SizeConstraint = Enum.SizeConstraint.RelativeXY
ShadowContainer.NextSelectionUp = nil
ShadowContainer.NextSelectionDown = nil
ShadowContainer.NextSelectionLeft = nil
ShadowContainer.NextSelectionRight = nil
ShadowContainer.SelectionImageObject = nil
if Options.Gradient then
local UIGradient = Instance.new("UIGradient")
if Options.Gradient.Color then
UIGradient.Color = Options.Gradient.Color
end
if Options.Gradient.Transparency then
UIGradient.Transparency = Options.Gradient.Transparency
end
if Options.Gradient.Rotation then
UIGradient.Rotation = Options.Gradient.Rotation
end
if Options.Gradient.Offset then
UIGradient.Offset = Options.Gradient.Offset
end
UIGradient.Parent = ShadowContainer
end
if Options.Color and not Options.Gradient then
ShadowContainer.ImageColor3 = Options.Color
end
table.insert(Maid.Shadows, ShadowContainer)
local ReplicationConnection
if Options.ObjectReplication then
local function UpdateShadowProperties()
local TargetObject = Options.ObjectReplication
local AbsoluteSize = TargetObject.AbsoluteSize
ShadowContainer.Size = UDim2.new(0, AbsoluteSize.X + 100, 0, AbsoluteSize.Y + 106)
local AbsolutePosition = TargetObject.AbsolutePosition
ShadowContainer.Position = UDim2.new(0, AbsolutePosition.X - 50, 0, AbsolutePosition.Y + 10)
if Options.ReplicateVisible then
if Options.ReplicateVisible[2] then
if not Options.ReplicateVisible[1].Visible then
ShadowContainer.Visible = Options.ReplicateVisible[1].Visible
elseif Options.ReplicateVisible[1].Visible and not Options.ReplicateVisible[2].Visible then
ShadowContainer.Visible = Options.ReplicateVisible[2].Visible
else
ShadowContainer.Visible = Options.ReplicateVisible[1].Visible
end
else
ShadowContainer.Visible = Options.ReplicateVisible[1].Visible
end
else
ShadowContainer.Visible = TargetObject.Visible
end
ShadowContainer.AnchorPoint = Vector2.new(0, 0)
ShadowContainer.ZIndex = TargetObject.ZIndex - 1
if TargetObject.Rotation then
ShadowContainer.Rotation = TargetObject.Rotation
end
if TargetObject.LayoutOrder then
ShadowContainer.LayoutOrder = TargetObject.LayoutOrder - 1
end
end
UpdateShadowProperties()
ReplicationConnection = Services.RunService.Heartbeat:Connect(UpdateShadowProperties)
end
if Options.Object:FindFirstChildOfClass("UIListLayout") then
ShadowContainer.LayoutOrder = -9999
else
ShadowContainer.Parent = Options.Object
end
if ReplicationConnection then
ShadowContainer.AncestryChanged:Connect(function()
if not ShadowContainer.Parent then
ReplicationConnection:Disconnect()
end
end)
end
return ShadowContainer
end
function WaveLibrary:SetupSettings(Settings)
if WaveLibrary.TabSettings then
WaveLibrary.TabSettings = nil
end
WaveLibrary.TabSettings = {}
WaveLibrary.LoadedFully = false
WaveLibrary.TabSettings.InitializeTab = nil
WaveLibrary.TabSettings.CurrentTab = nil
if Maid.Shadows ~= {} and Maid.Shadows ~= nil then
for _, Container in pairs(Maid.Shadows) do
Container:Destroy()
end
Maid.Shadows = nil
end
Maid.Shadows = {}
if Settings.AcrylicBlur ~= nil then
WaveLibrary.AcrylicBlur = Settings.AcrylicBlur
end
if Maid.MenuKeybind ~= nil then
Maid.MenuKeybind:Disconnect()
end
Maid.MenuKeybind = nil
Maid.TabIndex = 0
Maid.RegisteredKeybinds = {}
Maid.HiddenKeybinds = {}
WaveLibrary.Unloaded = false
WaveLibrary.InitializedGlobalSettings = false
WaveLibrary.WindowState = nil
WaveLibrary.Tabs = {}
WaveLibrary.Options = {}
end
function WaveLibrary:Window(Settings)
local WindowFunctions = {Settings = Settings}
self:SetupSettings(Settings)
local ComponentManager = Utility:LoadFile("Wave/UserInterface/Managers/ComponentManager.lua")
local TerminalModule = Utility:LoadFile("Wave/UserInterface/Imports/Terminal/TerminalModule.lua")
local ThemeColorSchemes = Utility:LoadFile("Wave/UserInterface/Imports/Themes/ThemeColorSchemes.lua")
local ThemeTemplates = Utility:LoadFile("Wave/UserInterface/Imports/Themes/ThemeTemplates.lua")
local PerformanceModes = Utility:LoadFile("Wave/UserInterface/Imports/Themes/PerformanceModes.lua")
local ThemeUtility = Utility:LoadFile("Wave/UserInterface/Imports/Themes/ThemeUtility.lua")
local Themes = ThemeUtility:RetrieveThemes(WaveLibrary)
local ClassParser = {
["Toggle"] = {
Save = function(Flag, Data)
return {
ClassType = "Toggle",
Flag = Flag,
State = Data.State or false,
Keybind = ComponentManager:CheckFlagKeybind(Flag)
}
end,
Load = function(Flag, Data)
if WaveLibrary.Options[Flag] then
if Data.State then
WaveLibrary.Options[Flag]:UpdateState(Data.State)
end
if Data.Keybind then
ComponentManager.AddFlagKeybind(Flag, Data.Keybind)
end
end
end
},
["Button"] = {
Save = function(Flag, Data)
return {
ClassType = "Button",
Flag = Flag,
Keybind = ComponentManager:CheckFlagKeybind(Flag)
}
end,
Load = function(Flag, Data)
if WaveLibrary.Options[Flag] then
if Data.Keybind then
ComponentManager.AddFlagKeybind(Flag, Data.Keybind)
end
end
end
},
["CheckBox"] = {
Save = function(Flag, Data)
return {
ClassType = "CheckBox",
Flag = Flag,
State = Data.State or false
}
end,
Load = function(Flag, Data)
if WaveLibrary.Options[Flag] and Data.State then
WaveLibrary.Options[Flag]:UpdateState(Data.State)
end
end
},
["Slider"] = {
Save = function(Flag, Data)
return {
ClassType = "Slider",
Flag = Flag,
Value = (Data.Value and tostring(Data.Value)) or false
}
end,
Load = function(Flag, Data)
if WaveLibrary.Options[Flag] and Data.Value then
WaveLibrary.Options[Flag]:UpdateValue(Data.Value)
end
end
},
["RangeSlider"] = {
Save = function(Flag, Data)
return {
ClassType = "RangeSlider",
Flag = Flag,
Minimum = Data.MinValue,
Maximum = Data.MaxValue
}
end,
Load = function(Flag, Data)
if WaveLibrary.Options[Flag] and Data.Minimum and Data.Maximum then
WaveLibrary.Options[Flag]:UpdateRange(Data.Minimum, Data.Maximum)
end
end
},
["Input"] = {
Save = function(Flag, Data)
return {
ClassType = "Input",
Flag = Flag,
Input = Data.Text
}
end,
Load = function(Flag, Data)
if WaveLibrary.Options[Flag] and Data.Input and type(Data.Input) == "string" then
WaveLibrary.Options[Flag]:UpdateText(Data.Input)
end
end
},
["Keybind"] = {
Save = function(Flag, Data)
return {
ClassType = "Keybind",
Flag = Flag,
Bind = Data:GetBind().Name
}
end,
Load = function(Flag, Data)
if WaveLibrary.Options[Flag] and Data.Bind then
WaveLibrary.Options[Flag]:Bind(Enum.KeyCode[Data.Bind])
end
end
},
["Dropdown"] = {
Save = function(Flag, Data)
return {
ClassType = "Dropdown",
Flag = Flag,
Selections = Data.Value
}
end,
Load = function(Flag, Data)
if WaveLibrary.Options[Flag] and Data.Selections then
WaveLibrary.Options[Flag]:UpdateSelection(Data.Selections)
end
end
},
["ColorPicker"] = {
Save = function(Flag, Data)
return {
ClassType = "ColorPicker",
Flag = Flag,
Color = Utility:Color3ToHex(Data.Color) or nil,
Alpha = Data.Alpha
}
end,
Load = function(Flag, Data)
if WaveLibrary.Options[Flag] and Data.Color then
WaveLibrary.Options[Flag]:SetColor(Utility:HexToColor3(Data.Color))
if Data.Alpha then
WaveLibrary.Options[Flag]:SetAlpha(Data.Alpha)
end
end
end
}
}
local WaveLibraryUI = Instance.new("ScreenGui")
WaveLibraryUI.Name = "WaveLibrary"
WaveLibraryUI.ResetOnSpawn = false
WaveLibraryUI.DisplayOrder = 100
WaveLibraryUI.IgnoreGuiInset = true
WaveLibraryUI.ScreenInsets = Enum.ScreenInsets.None
WaveLibraryUI.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
WaveLibraryUI.Parent = gethui()
local Notifications = Instance.new("Frame")
Notifications.Name = "Notifications"
Notifications.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Notifications.BackgroundTransparency = 1
Notifications.BorderColor3 = Color3.fromRGB(0, 0, 0)
Notifications.BorderSizePixel = 0
Notifications.Size = UDim2.fromScale(1, 1)
Notifications.Parent = WaveLibraryUI
Notifications.ZIndex = 2
Notifications.Visible = not HiddenMode
local StatusHub = Instance.new("Frame")
StatusHub.Name = "ExteralStatus"
StatusHub.AnchorPoint = Vector2.new(0.5, 0.5)
StatusHub.BackgroundColor3 = Color3.fromRGB(15, 15, 15)
StatusHub.BackgroundTransparency = WaveLibrary.AcrylicBlur and 0.05 or 0
StatusHub.BorderColor3 = Color3.fromRGB(0, 0, 0)
StatusHub.BorderSizePixel = 0
StatusHub.Position = UDim2.fromScale(0.955, 0.5)
StatusHub.Size = UDim2.fromOffset(200, 200)
StatusHub.Parent = WaveLibraryUI
StatusHub.Visible = false
local StatusDivider = Instance.new("Frame")
StatusDivider.Name = "Divider"
StatusDivider.AnchorPoint = Vector2.new(0, 1)
StatusDivider.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
StatusDivider.BackgroundTransparency = 0.9
StatusDivider.BorderColor3 = Color3.fromRGB(0, 0, 0)
StatusDivider.BorderSizePixel = 0
StatusDivider.Position = UDim2.fromScale(0.25, 0.15)
StatusDivider.Size = UDim2.new(0.5, 0, 0, 1)
StatusDivider.Parent = StatusHub
local StatusTitle = Instance.new("TextLabel")
StatusTitle.Name = "StatusTitle"
StatusTitle.FontFace = Font.new(
Assets.InterFont,
Enum.FontWeight.SemiBold,
Enum.FontStyle.Normal
)
StatusTitle.TextColor3 = Color3.fromRGB(255, 255, 255)
StatusTitle.RichText = true
StatusTitle.TextSize = 18
StatusTitle.TextTransparency = 0.1
StatusTitle.TextTruncate = Enum.TextTruncate.SplitWord
StatusTitle.TextXAlignment = Enum.TextXAlignment.Center
StatusTitle.TextYAlignment = Enum.TextYAlignment.Bottom
StatusTitle.AutomaticSize = Enum.AutomaticSize.Y
StatusTitle.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
StatusTitle.BackgroundTransparency = 1
StatusTitle.BorderColor3 = Color3.fromRGB(0, 0, 0)
StatusTitle.BorderSizePixel = 0
StatusTitle.Position = UDim2.fromScale(0, 0.0255)
StatusTitle.Size = UDim2.new(1, 0, 0, 0)
StatusTitle.Parent = StatusHub
local StatusHandle = Instance.new("Frame")
StatusHandle.Name = "Status"
StatusHandle.AnchorPoint = Vector2.new(0.5, 0.5)
StatusHandle.BackgroundTransparency = 1
StatusHandle.BorderColor3 = Color3.fromRGB(0, 0, 0)
StatusHandle.BorderSizePixel = 0
StatusHandle.Position = UDim2.new(0.5, 0, 0.5, 15)
StatusHandle.Size = UDim2.new(1, 0, 1, -50)
StatusHandle.Parent = StatusHub
local StatusUIListLayout = Instance.new("UIListLayout")
StatusUIListLayout.Name = "StatusUIListLayout"
StatusUIListLayout.Padding = UDim.new(0, 10)
StatusUIListLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center
StatusUIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
StatusUIListLayout.VerticalAlignment = Enum.VerticalAlignment.Top
StatusUIListLayout.Parent = StatusHandle
local StatusUIStroke = Instance.new("UIStroke")
StatusUIStroke.Name = "StatusUIStroke"
StatusUIStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
StatusUIStroke.Color = Color3.fromRGB(255, 255, 255)
StatusUIStroke.Transparency = 0.9
StatusUIStroke.Parent = StatusHub
local StatusUICorner = Instance.new("UICorner")
StatusUICorner.Name = "BaseUICorner"
StatusUICorner.CornerRadius = UDim.new(0, 10)
StatusUICorner.Parent = StatusHub
local StatusWallpaper = Instance.new("ImageLabel")
StatusWallpaper.Name = "Wallpaper"
StatusWallpaper.Image = Assets.StyleOneWallpaper
StatusWallpaper.Size = UDim2.fromOffset(200, 200)
StatusWallpaper.Position = UDim2.new(0, 0, 0, 0)
StatusWallpaper.BackgroundTransparency = 1
StatusWallpaper.ImageTransparency = 0.65
StatusWallpaper.ImageColor3 = Color3.fromRGB(32, 32, 32)
StatusWallpaper.ScaleType = Enum.ScaleType.Crop
StatusWallpaper.Parent = StatusHub
local StatusWallpaperUICorner = Instance.new("UICorner")
StatusWallpaperUICorner.Name = "WallpaperUICorner"
StatusWallpaperUICorner.CornerRadius = UDim.new(0, 10)
StatusWallpaperUICorner.Parent = StatusWallpaper
local NotificationsUIListLayout = Instance.new("UIListLayout")
NotificationsUIListLayout.Name = "NotificationsUIListLayout"
NotificationsUIListLayout.Padding = UDim.new(0, 10)
NotificationsUIListLayout.HorizontalAlignment = Enum.HorizontalAlignment.Right
NotificationsUIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
NotificationsUIListLayout.VerticalAlignment = Enum.VerticalAlignment.Bottom
NotificationsUIListLayout.Parent = Notifications
local NotificationsUIPadding = Instance.new("UIPadding")
NotificationsUIPadding.Name = "NotificationsUIPadding"
NotificationsUIPadding.PaddingBottom = UDim.new(0, 10)
NotificationsUIPadding.PaddingLeft = UDim.new(0, 10)
NotificationsUIPadding.PaddingRight = UDim.new(0, 10)
NotificationsUIPadding.PaddingTop = UDim.new(0, 10)
NotificationsUIPadding.Parent = Notifications
local Base = Instance.new("Frame")
Base.Name = "Base"
Base.AnchorPoint = Vector2.new(0.5, 0.5)
Base.BackgroundColor3 = Color3.fromRGB(15, 15, 15)
Base.BackgroundTransparency = WaveLibrary.AcrylicBlur and 1 or 0
Base.BorderColor3 = Color3.fromRGB(0, 0, 0)
Base.BorderSizePixel = 0
Base.Position = UDim2.fromScale(0.5, 0.5)
Base.Size = Settings.Size or UDim2.fromOffset(868, 650)
Base.Visible = false
local BaseUIScale = Instance.new("UIScale")
BaseUIScale.Name = "BaseUIScale"
BaseUIScale.Parent = Base
local BaseUICorner = Instance.new("UICorner")
BaseUICorner.Name = "BaseUICorner"
BaseUICorner.CornerRadius = UDim.new(0, 10)
BaseUICorner.Parent = Base
local BaseUIStroke = Instance.new("UIStroke")
BaseUIStroke.Name = "BaseUIStroke"
BaseUIStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
BaseUIStroke.Color = Color3.fromRGB(255, 255, 255)
BaseUIStroke.Transparency = 0.7
BaseUIStroke.Parent = Base
WaveLibrary:CreateShadow({Object = WaveLibraryUI, ObjectReplication = Base, Gradient = {
Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.new(0, 0, 0.2)),
ColorSequenceKeypoint.new(1, Color3.new(0.4, 0.6, 1))
}),
}})
local Sidebar = Instance.new("Frame")
Sidebar.Name = "Sidebar"
Sidebar.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
Sidebar.BackgroundTransparency = 0.7
Sidebar.BorderColor3 = Color3.fromRGB(0, 0, 0)
Sidebar.BorderSizePixel = 0
Sidebar.Position = UDim2.fromScale(-3.52e-08, 4.69e-08)
Sidebar.Size = UDim2.fromScale(0.255, 1)
local SidebarUICorner = Instance.new("UICorner")
SidebarUICorner.Name = "SideUICorner"
SidebarUICorner.CornerRadius = UDim.new(0, 10)
SidebarUICorner.Parent = Sidebar
local SidebarDivider = Instance.new("UIStroke")
SidebarDivider.Name = "SidebarUIStroke"
SidebarDivider.Thickness = 1
SidebarDivider.Transparency = 0.9
SidebarDivider.Color = Color3.fromRGB(255, 255, 255)
SidebarDivider.Parent = Sidebar
local Divider = Instance.new("Frame")
Divider.Name = "Divider"
Divider.AnchorPoint = Vector2.new(1, 0)
Divider.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Divider.BackgroundTransparency = 1
Divider.BorderColor3 = Color3.fromRGB(0, 0, 0)
Divider.BorderSizePixel = 0
Divider.Position = UDim2.fromScale(1, 0)
Divider.Size = UDim2.new(0, 1, 1, 0)
Divider.Parent = Sidebar
local DividerInteract = Instance.new("TextButton")
DividerInteract.Name = "DividerInteract"
DividerInteract.AnchorPoint = Vector2.new(0.5, 0)
DividerInteract.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
DividerInteract.BackgroundTransparency = 1
DividerInteract.BorderColor3 = Color3.fromRGB(0, 0, 0)
DividerInteract.BorderSizePixel = 0
DividerInteract.FontFace = Font.new("rbxasset://fonts/families/SourceSansPro.json")
DividerInteract.Position = UDim2.fromScale(0.5, 0)
DividerInteract.Size = UDim2.new(1, 6, 1, 0)
DividerInteract.Text = ""
DividerInteract.TextColor3 = Color3.fromRGB(0, 0, 0)
DividerInteract.TextSize = 14
DividerInteract.Parent = Divider
local WindowControls = Instance.new("Frame")
WindowControls.Name = "WindowControls"
WindowControls.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
WindowControls.BackgroundTransparency = 1
WindowControls.BorderColor3 = Color3.fromRGB(0, 0, 0)
WindowControls.BorderSizePixel = 0
WindowControls.Size = UDim2.new(1, 0, 0, 31)
local Controls = Instance.new("Frame")
Controls.Name = "Controls"
Controls.BackgroundColor3 = Color3.fromRGB(119, 174, 94)
Controls.BackgroundTransparency = 1
Controls.BorderColor3 = Color3.fromRGB(0, 0, 0)
Controls.BorderSizePixel = 0
Controls.Size = UDim2.fromScale(1, 1)
local UIListLayout = Instance.new("UIListLayout")
UIListLayout.Name = "UIListLayout"
UIListLayout.Padding = UDim.new(0, 5)
UIListLayout.FillDirection = Enum.FillDirection.Horizontal
UIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
UIListLayout.VerticalAlignment = Enum.VerticalAlignment.Center
UIListLayout.Parent = Controls
local UIPadding = Instance.new("UIPadding")
UIPadding.Name = "UIPadding"
UIPadding.PaddingLeft = UDim.new(0, 11)
UIPadding.Parent = Controls
local WindowControlSettings = {
Sizes = { Enabled = UDim2.fromOffset(8, 8), Disabled = UDim2.fromOffset(7, 7) },
Transparencies = { Enabled = 0, Disabled = 1 },
StrokeTransparency = 0.9,
}
local Stroke = Instance.new("UIStroke")
Stroke.Name = "BaseUIStroke"
Stroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
Stroke.Color = Color3.fromRGB(255, 255, 255)
Stroke.Transparency = WindowControlSettings.StrokeTransparency
local Exit = Instance.new("TextButton")
Exit.Name = "Exit"
Exit.FontFace = Font.new("rbxasset://fonts/families/SourceSansPro.json")
Exit.Text = ""
Exit.TextColor3 = Color3.fromRGB(0, 0, 0)
Exit.TextSize = 14
Exit.AutoButtonColor = false
Exit.BackgroundColor3 = Color3.fromRGB(0, 0, 102)
Exit.BorderColor3 = Color3.fromRGB(0, 0, 0)
Exit.BorderSizePixel = 0
Exit.LayoutOrder = 1
Exit.Parent = Controls
local ExitUICorner = Instance.new("UICorner")
ExitUICorner.Name = "UICorner"
ExitUICorner.CornerRadius = UDim.new(1, 0)
ExitUICorner.Parent = Exit
local Minimize = Instance.new("TextButton")
Minimize.Name = "Minimize"
Minimize.FontFace = Font.new("rbxasset://fonts/families/SourceSansPro.json")
Minimize.Text = ""
Minimize.TextColor3 = Color3.fromRGB(0, 0, 0)
Minimize.TextSize = 14
Minimize.AutoButtonColor = false
Minimize.BackgroundColor3 = Color3.fromRGB(51, 153, 255)
Minimize.BorderColor3 = Color3.fromRGB(0, 0, 0)
Minimize.BorderSizePixel = 0
Minimize.LayoutOrder = 2
Minimize.Parent = Controls
local MinimizeUICorner = Instance.new("UICorner")
MinimizeUICorner.Name = "UICorner"
MinimizeUICorner.CornerRadius = UDim.new(1, 0)
MinimizeUICorner.Parent = Minimize
local GlobalSettingsButton = Instance.new("ImageButton")
GlobalSettingsButton.Name = "GlobalSettingsButton"
GlobalSettingsButton.Image = Assets.Globe
GlobalSettingsButton.ImageTransparency = 0.5
GlobalSettingsButton.AnchorPoint = Vector2.new(1, 0.5)
GlobalSettingsButton.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
GlobalSettingsButton.BackgroundTransparency = 1
GlobalSettingsButton.BorderColor3 = Color3.fromRGB(0, 0, 0)
GlobalSettingsButton.BorderSizePixel = 0
GlobalSettingsButton.LayoutOrder = 5
GlobalSettingsButton.Position = UDim2.fromScale(1, 0.5)
GlobalSettingsButton.Size = UDim2.fromOffset(12,12)
GlobalSettingsButton.Parent = Controls
local function ApplyState(Button, Enabled)
local Size = Enabled and WindowControlSettings.Sizes.Enabled or WindowControlSettings.Sizes.Disabled
local Transparency = Enabled and WindowControlSettings.Transparencies.Enabled or WindowControlSettings.Transparencies.Disabled
Button.Size = Size
Button.BackgroundTransparency = Transparency
Button.Active = Enabled
Button.Interactable = Enabled
for _, Child in ipairs(Button:GetChildren()) do
if Child:IsA("UIStroke") then
Child.Transparency = Transparency
end
end
if not Enabled then
Stroke:Clone().Parent = Button
end
end
local ControlsList = {Exit, Minimize}
for _, Button in pairs(ControlsList) do
local ButtonName = Button.Name
local IsEnabled = true
if Settings.DisabledWindowControls and table.find(Settings.DisabledWindowControls, ButtonName) then
IsEnabled = false
end
ApplyState(Button, IsEnabled)
end
Controls.Parent = WindowControls
WindowControls.Parent = Sidebar
local Information = Instance.new("Frame")
Information.Name = "Information"
Information.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Information.BackgroundTransparency = 0.98
Information.BorderColor3 = Color3.fromRGB(0, 0, 0)
Information.BorderSizePixel = 0
Information.Position = UDim2.new(0.5, 0, 0, 40)
Information.Size = UDim2.new(0.925, 0, 0, 60)
Information.AnchorPoint = Vector2.new(0.5, 0)
local InformationUICorner = Instance.new("UICorner")
InformationUICorner.Name = "InformationUICorner"
InformationUICorner.CornerRadius = UDim.new(0, 10)
InformationUICorner.Parent = Information
local InformationHolderUIStroke = Instance.new("UIStroke")
InformationHolderUIStroke.Name = "InformationHolderUIStroke"
InformationHolderUIStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
InformationHolderUIStroke.Color = Color3.fromRGB(255, 255, 255)
InformationHolderUIStroke.Transparency = 0.9
InformationHolderUIStroke.Parent = Information
local Divider1 = Instance.new("Frame")
Divider1.Name = "Divider"
Divider1.AnchorPoint = Vector2.new(0, 1)
Divider1.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Divider1.BackgroundTransparency = 0.9
Divider1.BorderColor3 = Color3.fromRGB(0, 0, 0)
Divider1.BorderSizePixel = 0
Divider1.Position = UDim2.new(0, 0, 0, -12.5)
Divider1.Size = UDim2.new(1, 0, 0, 1)
Divider1.Parent = Information
local Divider2 = Instance.new("Frame")
Divider2.Name = "Divider"
Divider2.AnchorPoint = Vector2.new(0, 1)
Divider2.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Divider2.BackgroundTransparency = 0.9
Divider2.BorderColor3 = Color3.fromRGB(0, 0, 0)
Divider2.BorderSizePixel = 0
Divider2.Position = UDim2.new(0, 0, 1, 12.5)
Divider2.Size = UDim2.new(1, 0, 0, 1)
Divider2.Parent = Information
local InformationHolder = Instance.new("Frame")
InformationHolder.Name = "InformationHolder"
InformationHolder.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
InformationHolder.BackgroundTransparency = 1
InformationHolder.BorderColor3 = Color3.fromRGB(0, 0, 0)
InformationHolder.BorderSizePixel = 0
InformationHolder.Size = UDim2.fromScale(1, 1)
local InformationHolderUIPadding = Instance.new("UIPadding")
InformationHolderUIPadding.Name = "InformationHolderUIPadding"
InformationHolderUIPadding.PaddingBottom = UDim.new(0, 10)
InformationHolderUIPadding.PaddingLeft = UDim.new(0, 23)
InformationHolderUIPadding.PaddingRight = UDim.new(0, 22)
InformationHolderUIPadding.PaddingTop = UDim.new(0, 10)
InformationHolderUIPadding.Parent = InformationHolder
local function ChangeGlobalSettingsButtonState(State)
if State == "Default" then
Utility:PropertyTween(GlobalSettingsButton, TweenInfo.new(0.2, Enum.EasingStyle.Sine), {
ImageTransparency = 0.5
}):Play()
elseif State == "Hover" then
Utility:PropertyTween(GlobalSettingsButton, TweenInfo.new(0.2, Enum.EasingStyle.Sine), {
ImageTransparency = 0
}):Play()
end
end
GlobalSettingsButton.MouseEnter:Connect(function()
ChangeGlobalSettingsButtonState("Hover")
end)
GlobalSettingsButton.MouseLeave:Connect(function()
ChangeGlobalSettingsButtonState("Default")
end)
local TitleFrame = Instance.new("Frame")
TitleFrame.Name = "TitleFrame"
TitleFrame.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
TitleFrame.BackgroundTransparency = 1
TitleFrame.BorderColor3 = Color3.fromRGB(0, 0, 0)
TitleFrame.BorderSizePixel = 0
TitleFrame.Size = UDim2.fromScale(1, 1)
local Title = Instance.new("TextLabel")
Title.Name = "Title"
Title.FontFace = Font.new(
Assets.InterFont,
Enum.FontWeight.SemiBold,
Enum.FontStyle.Normal
)
Title.Text = Settings.Title
Title.TextColor3 = Color3.fromRGB(255, 255, 255)
Title.RichText = true
Title.TextSize = 18
Title.TextTransparency = 0.1
Title.TextTruncate = Enum.TextTruncate.SplitWord
Title.TextXAlignment = Enum.TextXAlignment.Left
Title.TextYAlignment = Enum.TextYAlignment.Top
Title.AutomaticSize = Enum.AutomaticSize.Y
Title.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Title.BackgroundTransparency = 1
Title.BorderColor3 = Color3.fromRGB(0, 0, 0)
Title.BorderSizePixel = 0
Title.Size = UDim2.new(1, 0, 0, 0)
Title.Parent = TitleFrame
local Subtitle = Instance.new("TextLabel")
Subtitle.Name = "Subtitle"
Subtitle.FontFace = Font.new(
Assets.InterFont,
Enum.FontWeight.Medium,
Enum.FontStyle.Normal
)
Subtitle.RichText = true
Subtitle.Text = Settings.Subtitle or ""
if Settings.Subtitle and Settings.Subtitle ~= "" then
-- Caller supplied an explicit subtitle; keep the theme engine from
-- replacing it with the "Build - | " template.
Subtitle:SetAttribute("CustomSubtitle", true)
end
Subtitle.RichText = true
Subtitle.TextColor3 = Color3.fromRGB(255, 255, 255)
Subtitle.TextSize = 12
Subtitle.TextTransparency = 0.4
Subtitle.TextTruncate = Enum.TextTruncate.SplitWord
Subtitle.TextXAlignment = Enum.TextXAlignment.Left
Subtitle.TextYAlignment = Enum.TextYAlignment.Top
Subtitle.AutomaticSize = Enum.AutomaticSize.Y
Subtitle.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Subtitle.BackgroundTransparency = 1
Subtitle.BorderColor3 = Color3.fromRGB(0, 0, 0)
Subtitle.BorderSizePixel = 0
Subtitle.LayoutOrder = 1
Subtitle.Size = UDim2.new(1, 0, 0, 0)
Subtitle.Parent = TitleFrame
local TitleFrameUIListLayout = Instance.new("UIListLayout")
TitleFrameUIListLayout.Name = "TitleFrameUIListLayout"
TitleFrameUIListLayout.Padding = UDim.new(0, 3)
TitleFrameUIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
TitleFrameUIListLayout.VerticalAlignment = Enum.VerticalAlignment.Center
TitleFrameUIListLayout.Parent = TitleFrame
TitleFrame.Parent = InformationHolder
InformationHolder.Parent = Information
Information.Parent = Sidebar
local SidebarGroup = Instance.new("Frame")
SidebarGroup.Name = "SidebarGroup"
SidebarGroup.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
SidebarGroup.BackgroundTransparency = 1
SidebarGroup.BorderColor3 = Color3.fromRGB(0, 0, 0)
SidebarGroup.BorderSizePixel = 0
SidebarGroup.Position = UDim2.fromOffset(0, 91)
SidebarGroup.Size = UDim2.new(1, 0, 1, -91)
local UserInfo = Instance.new("Frame")
UserInfo.Name = "UserInfo"
UserInfo.AnchorPoint = Vector2.new(0, 1)
UserInfo.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
UserInfo.BackgroundTransparency = 1
UserInfo.BorderColor3 = Color3.fromRGB(0, 0, 0)
UserInfo.BorderSizePixel = 0
UserInfo.Position = UDim2.fromScale(0, 1)
UserInfo.Size = UDim2.new(1, 0, 0, 107)
local InformationGroup = Instance.new("Frame")
InformationGroup.Name = "InformationGroup"
InformationGroup.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
InformationGroup.BackgroundTransparency = 1
InformationGroup.BorderColor3 = Color3.fromRGB(0, 0, 0)
InformationGroup.BorderSizePixel = 0
InformationGroup.Size = UDim2.fromScale(1, 1)
InformationGroup.ZIndex = 2
local InformationGroupHighlight = Instance.new("Frame")
InformationGroupHighlight.Name = "InformationGroupHighlight"
InformationGroupHighlight.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
InformationGroupHighlight.BackgroundTransparency = 0.98
InformationGroupHighlight.BorderColor3 = Color3.fromRGB(0, 0, 0)
InformationGroupHighlight.BorderSizePixel = 0
InformationGroupHighlight.Size = UDim2.fromScale(1, 0.5)
InformationGroupHighlight.Position = UDim2.fromScale(0, 0.175)
InformationGroup.ZIndex = 1
local HighlightUICorner = Instance.new("UICorner")
HighlightUICorner.Name = "HighlightUICornerUICorner"
HighlightUICorner.CornerRadius = UDim.new(1, 0)
HighlightUICorner.Parent = InformationGroupHighlight
local HighlightStroke = Instance.new("UIStroke")
HighlightStroke.Name = "HighlightStroke"
HighlightStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
HighlightStroke.Color = Color3.fromRGB(255, 255, 255)
HighlightStroke.Transparency = 0.9
HighlightStroke.Parent = InformationGroupHighlight
local InformationGroupUIPadding = Instance.new("UIPadding")
InformationGroupUIPadding.Name = "InformationGroupUIPadding"
InformationGroupUIPadding.PaddingBottom = UDim.new(0, 17)
InformationGroupUIPadding.PaddingLeft = UDim.new(0, 25)
InformationGroupUIPadding.Parent = InformationGroup
local InformationGroupUIListLayout = Instance.new("UIListLayout")
InformationGroupUIListLayout.Name = "InformationGroupUIListLayout"
InformationGroupUIListLayout.FillDirection = Enum.FillDirection.Horizontal
InformationGroupUIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
InformationGroupUIListLayout.VerticalAlignment = Enum.VerticalAlignment.Center
InformationGroupUIListLayout.Parent = InformationGroup
local UserId = Utility:GetPlayer().UserId
local ThumbType = Enum.ThumbnailType.AvatarBust
local ThumbSize = Enum.ThumbnailSize.Size48x48
local HeadshotImage, IsReady = Services.Players:GetUserThumbnailAsync(UserId, ThumbType, ThumbSize)
local Headshot = Instance.new("ImageLabel")
Headshot.Name = "Headshot"
Headshot.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Headshot.BackgroundTransparency = 1
Headshot.BorderColor3 = Color3.fromRGB(0, 0, 0)
Headshot.BorderSizePixel = 0
Headshot.Size = UDim2.fromOffset(32, 32)
Headshot.Image = (IsReady and HeadshotImage) or Assets.Null
local Wallpaper = Instance.new("ImageLabel")
Wallpaper.Name = "Wallpaper"
Wallpaper.Image = Assets.StyleOneWallpaper
Wallpaper.Size = UDim2.new(1, 0, 1, 0)
Wallpaper.Position = UDim2.new(0, 0, 0, 0)
Wallpaper.BackgroundTransparency = 1
Wallpaper.ImageTransparency = 0.65
Wallpaper.ImageColor3 = Color3.fromRGB(32, 32, 32)
Wallpaper.ScaleType = Enum.ScaleType.Crop
Wallpaper.Parent = Base
local WallpaperUICorner = Instance.new("UICorner")
WallpaperUICorner.Name = "WallpaperUICorner"
WallpaperUICorner.CornerRadius = UDim.new(0, 10)
WallpaperUICorner.Parent = Wallpaper
local UICorner3 = Instance.new("UICorner")
UICorner3.Name = "UICorner"
UICorner3.CornerRadius = UDim.new(1, 0)
UICorner3.Parent = Headshot
local BaseUIStroke2 = Instance.new("UIStroke")
BaseUIStroke2.Name = "BaseUIStroke"
BaseUIStroke2.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
BaseUIStroke2.Color = Color3.fromRGB(255, 255, 255)
BaseUIStroke2.Transparency = 0.9
BaseUIStroke2.Parent = Headshot
Headshot.Parent = InformationGroup
local UserAndDisplayFrame = Instance.new("Frame")
UserAndDisplayFrame.Name = "UserAndDisplayFrame"
UserAndDisplayFrame.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
UserAndDisplayFrame.BackgroundTransparency = 1
UserAndDisplayFrame.BorderColor3 = Color3.fromRGB(0, 0, 0)
UserAndDisplayFrame.BorderSizePixel = 0
UserAndDisplayFrame.LayoutOrder = 1
UserAndDisplayFrame.Size = UDim2.new(1, -42, 0, 32)
-- grow to fit the extra key-status line beneath the username
UserAndDisplayFrame.AutomaticSize = Enum.AutomaticSize.Y
local DisplayName = Instance.new("TextLabel")
DisplayName.Name = "DisplayName"
DisplayName.FontFace = Font.new(
Assets.InterFont,
Enum.FontWeight.SemiBold,
Enum.FontStyle.Normal
)
if Utility:GetPlayer() then
DisplayName.Text = Utility:GetPlayer().DisplayName
else
DisplayName.Text = "Unknown"
end
DisplayName.TextColor3 = Color3.fromRGB(255, 255, 255)
DisplayName.TextSize = 13
DisplayName.TextTransparency = 0.1
DisplayName.TextTruncate = Enum.TextTruncate.SplitWord
DisplayName.TextXAlignment = Enum.TextXAlignment.Left
DisplayName.TextYAlignment = Enum.TextYAlignment.Top
DisplayName.AutomaticSize = Enum.AutomaticSize.XY
DisplayName.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
DisplayName.BackgroundTransparency = 1
DisplayName.BorderColor3 = Color3.fromRGB(0, 0, 0)
DisplayName.BorderSizePixel = 0
DisplayName.Parent = UserAndDisplayFrame
DisplayName.Size = UDim2.fromScale(1,0)
local UserAndDisplayFrameUIPadding = Instance.new("UIPadding")
UserAndDisplayFrameUIPadding.Name = "UserAndDisplayFrameUIPadding"
UserAndDisplayFrameUIPadding.PaddingLeft = UDim.new(0, 8)
UserAndDisplayFrameUIPadding.PaddingTop = UDim.new(0, 3)
UserAndDisplayFrameUIPadding.Parent = UserAndDisplayFrame
local UserAndDisplayFrameUIListLayout = Instance.new("UIListLayout")
UserAndDisplayFrameUIListLayout.Name = "UserAndDisplayFrameUIListLayout"
UserAndDisplayFrameUIListLayout.Padding = UDim.new(0, 1)
UserAndDisplayFrameUIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
UserAndDisplayFrameUIListLayout.Parent = UserAndDisplayFrame
local Username = Instance.new("TextLabel")
Username.Name = "Username"
Username.FontFace = Font.new(
Assets.InterFont,
Enum.FontWeight.SemiBold,
Enum.FontStyle.Normal
)
Username.Text = Utility:GetPlayer() and "@" .. Utility:GetPlayer().Name or "@" .. "Unknown"
Username.TextColor3 = Color3.fromRGB(255, 255, 255)
Username.TextSize = 12
Username.TextTransparency = 0.7
Username.TextTruncate = Enum.TextTruncate.SplitWord
Username.TextXAlignment = Enum.TextXAlignment.Left
Username.TextYAlignment = Enum.TextYAlignment.Top
Username.AutomaticSize = Enum.AutomaticSize.XY
Username.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Username.BackgroundTransparency = 1
Username.BorderColor3 = Color3.fromRGB(0, 0, 0)
Username.BorderSizePixel = 0
Username.LayoutOrder = 1
Username.Parent = UserAndDisplayFrame
Username.Size = UDim2.fromScale(1,0)
-- Key-system status line under the username (premium/free + remaining time).
-- Wrapped in a do-block so its locals are freed immediately (this whole
-- function sits near Luau's per-function local limit). Reads the loader's
-- getgenv().UserDataTable { IsUserPremium, UserTime (hours) }.
do
local KeyStatus = Instance.new("TextLabel")
KeyStatus.Name = "KeyStatus"
KeyStatus.FontFace = Font.new(
Assets.InterFont,
Enum.FontWeight.SemiBold,
Enum.FontStyle.Normal
)
KeyStatus.RichText = true
KeyStatus.Text = ""
KeyStatus.TextColor3 = Color3.fromRGB(255, 255, 255)
KeyStatus.TextSize = 11
KeyStatus.TextTransparency = 0.15
KeyStatus.TextTruncate = Enum.TextTruncate.SplitWord
KeyStatus.TextXAlignment = Enum.TextXAlignment.Left
KeyStatus.TextYAlignment = Enum.TextYAlignment.Top
KeyStatus.AutomaticSize = Enum.AutomaticSize.XY
KeyStatus.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
KeyStatus.BackgroundTransparency = 1
KeyStatus.BorderColor3 = Color3.fromRGB(0, 0, 0)
KeyStatus.BorderSizePixel = 0
KeyStatus.LayoutOrder = 2
KeyStatus.Size = UDim2.fromScale(1, 0)
KeyStatus.Parent = UserAndDisplayFrame
local function FormatKeyDuration(Hours)
Hours = math.max(0, math.floor(tonumber(Hours) or 0))
if Hours <= 0 then
return nil
elseif Hours < 24 then
return Hours .. "h"
end
local Days = math.floor(Hours / 24)
local RemHours = Hours % 24
if RemHours == 0 then
return Days .. "d"
end
return Days .. "d " .. RemHours .. "h"
end
local function UpdateKeyStatus()
local Data
pcall(function()
if typeof(getgenv) == "function" then
Data = getgenv().UserDataTable
end
end)
local Hours = Data and tonumber(Data.UserTime) or 0
-- premium if the key system flagged it, or more than 13 hours remain
local IsPremium = (Data and Data.IsUserPremium == true) or (Hours > 13)
local Word = IsPremium and "Premium" or "Free"
local WordColor = IsPremium and "#FFCF85" or "#AEB2BE"
local Text = string.format('%s', WordColor, Word)
local Duration = FormatKeyDuration(Hours)
if Duration then
Text = Text .. string.format(' · %s left', Duration)
end
KeyStatus.Text = Text
end
UpdateKeyStatus()
task.spawn(function()
-- settle quickly (the key check may fill the table just after load),
-- then refresh slowly so the remaining time stays roughly current.
for _ = 1, 10 do
task.wait(0.5)
if not KeyStatus.Parent then
return
end
UpdateKeyStatus()
end
while KeyStatus.Parent do
task.wait(60)
UpdateKeyStatus()
end
end)
end
UserAndDisplayFrame.Parent = InformationGroup
InformationGroup.Parent = UserInfo
InformationGroupHighlight.Parent = UserInfo
local UserInfoUIPadding = Instance.new("UIPadding")
UserInfoUIPadding.Name = "UserInfoUIPadding"
UserInfoUIPadding.PaddingLeft = UDim.new(0, 10)
UserInfoUIPadding.PaddingRight = UDim.new(0, 10)
UserInfoUIPadding.Parent = UserInfo
UserInfo.Parent = SidebarGroup
local SidebarGroupUIPadding = Instance.new("UIPadding")
SidebarGroupUIPadding.Name = "SidebarGroupUIPadding"
SidebarGroupUIPadding.PaddingLeft = UDim.new(0, 10)
SidebarGroupUIPadding.PaddingRight = UDim.new(0, 10)
SidebarGroupUIPadding.PaddingTop = UDim.new(0, 31)
SidebarGroupUIPadding.Parent = SidebarGroup
local TabSwitchers = Instance.new("Frame")
TabSwitchers.Name = "TabSwitchers"
TabSwitchers.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
TabSwitchers.BackgroundTransparency = 1
TabSwitchers.BorderColor3 = Color3.fromRGB(0, 0, 0)
TabSwitchers.BorderSizePixel = 0
TabSwitchers.Size = UDim2.new(1, 0, 1, -107)
local TabSwitchersScrollingFrame = Instance.new("ScrollingFrame")
TabSwitchersScrollingFrame.Name = "TabSwitchersScrollingFrame"
TabSwitchersScrollingFrame.AutomaticCanvasSize = Enum.AutomaticSize.Y
TabSwitchersScrollingFrame.BottomImage = ""
TabSwitchersScrollingFrame.CanvasSize = UDim2.new()
TabSwitchersScrollingFrame.ScrollBarImageTransparency = 0.8
TabSwitchersScrollingFrame.ScrollBarThickness = 1
TabSwitchersScrollingFrame.TopImage = ""
TabSwitchersScrollingFrame.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
TabSwitchersScrollingFrame.BackgroundTransparency = 1
TabSwitchersScrollingFrame.BorderColor3 = Color3.fromRGB(0, 0, 0)
TabSwitchersScrollingFrame.BorderSizePixel = 0
TabSwitchersScrollingFrame.Size = UDim2.fromScale(1, 1)
local TabSwitchersScrollingFrameUIListLayout = Instance.new("UIListLayout")
TabSwitchersScrollingFrameUIListLayout.Name = "TabSwitchersScrollingFrameUIListLayout"
TabSwitchersScrollingFrameUIListLayout.Padding = UDim.new(0, 17)
TabSwitchersScrollingFrameUIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
TabSwitchersScrollingFrameUIListLayout.Parent = TabSwitchersScrollingFrame
local TabSwitchersScrollingFrameUIPadding = Instance.new("UIPadding")
TabSwitchersScrollingFrameUIPadding.Name = "TabSwitchersScrollingFrameUIPadding"
TabSwitchersScrollingFrameUIPadding.PaddingTop = UDim.new(0, 2)
TabSwitchersScrollingFrameUIPadding.Parent = TabSwitchersScrollingFrame
TabSwitchersScrollingFrame.Parent = TabSwitchers
TabSwitchers.Parent = SidebarGroup
SidebarGroup.Parent = Sidebar
Sidebar.Parent = Base
local Content = Instance.new("Frame")
Content.Name = "Content"
Content.AnchorPoint = Vector2.new(1, 0)
Content.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Content.BackgroundTransparency = 1
Content.BorderColor3 = Color3.fromRGB(0, 0, 0)
Content.BorderSizePixel = 0
Content.Position = UDim2.fromScale(1, 4.69e-08)
Content.Size = UDim2.new(0, (Base.AbsoluteSize.X - Sidebar.AbsoluteSize.X), 1, 0)
local ResizingContent = false
local DefaultSidebarWidth = Sidebar.AbsoluteSize.X
local InitialMouseX, InitialSidebarWidth
local SnapRange = 20
local MinSidebarWidth = 107
local MaxSidebarWidth = Base.AbsoluteSize.X - MinSidebarWidth
local TweenSettings = {
DefaultTransparency = 0.9,
HoverTransparency = 0.85,
EasingStyle = Enum.EasingStyle.Sine
}
local function ChangeState(State)
Utility:PropertyTween(Divider, TweenInfo.new(0.2, TweenSettings.EasingStyle), {
BackgroundTransparency = State == "Idle" and TweenSettings.DefaultTransparency or TweenSettings.HoverTransparency
}):Play()
end
DividerInteract.MouseButton1Down:Connect(function()
ResizingContent = true
InitialMouseX = Services.UserInputService:GetMouseLocation().X
InitialSidebarWidth = Sidebar.AbsoluteSize.X
end)
Services.UserInputService.InputEnded:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 then
ResizingContent = false
end
end)
Services.UserInputService.InputChanged:Connect(function(Input)
if ResizingContent and Input.UserInputType == Enum.UserInputType.MouseMovement then
local DeltaX = Services.UserInputService:GetMouseLocation().X - InitialMouseX
local NewSidebarWidth = InitialSidebarWidth + DeltaX
if math.abs(NewSidebarWidth - DefaultSidebarWidth) < SnapRange then
NewSidebarWidth = DefaultSidebarWidth
else
NewSidebarWidth = math.clamp(NewSidebarWidth, MinSidebarWidth, MaxSidebarWidth)
end
Sidebar.Size = UDim2.new(0, NewSidebarWidth, 1, 0)
Content.Size = UDim2.new(0, Base.AbsoluteSize.X - NewSidebarWidth, 1, 0)
end
end)
local Topbar = Instance.new("Frame")
Topbar.Name = "Topbar"
Topbar.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Topbar.BackgroundTransparency = 1
Topbar.BorderColor3 = Color3.fromRGB(0, 0, 0)
Topbar.BorderSizePixel = 0
Topbar.Size = UDim2.new(1, 0, 0, 63)
Topbar.ZIndex = 2
local Divider4 = Instance.new("Frame")
Divider4.Name = "Divider"
Divider4.AnchorPoint = Vector2.new(0, 1)
Divider4.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Divider4.BackgroundTransparency = 0.9
Divider4.BorderColor3 = Color3.fromRGB(0, 0, 0)
Divider4.BorderSizePixel = 0
Divider4.Position = UDim2.fromScale(0, 1)
Divider4.Size = UDim2.new(1, 0, 0, 1)
Divider4.Parent = Topbar
local Elements = Instance.new("Frame")
Elements.Name = "Elements"
Elements.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Elements.BackgroundTransparency = 1
Elements.BorderColor3 = Color3.fromRGB(0, 0, 0)
Elements.BorderSizePixel = 0
Elements.Size = UDim2.fromScale(1, 1)
local UIPadding2 = Instance.new("UIPadding")
UIPadding2.Name = "UIPadding"
UIPadding2.PaddingLeft = UDim.new(0, 20)
UIPadding2.PaddingRight = UDim.new(0, 20)
UIPadding2.Parent = Elements
local TopbarFolder = Instance.new("Frame")
TopbarFolder.Name = "TopbarFolder"
TopbarFolder.Parent = Elements
TopbarFolder.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
TopbarFolder.BackgroundTransparency = 1
TopbarFolder.BorderColor3 = Color3.fromRGB(0, 0, 0)
TopbarFolder.BorderSizePixel = 0
TopbarFolder.Size = UDim2.fromScale(1, 1)
TopbarFolder.Position = UDim2.fromScale(0, 0)
TopbarFolder.AnchorPoint = Vector2.new(0, 0)
TopbarFolder.Parent = Elements
local TopbarUIListLayout = Instance.new("UIListLayout")
TopbarUIListLayout.Name = "TopbarUIListLayout"
TopbarUIListLayout.FillDirection = Enum.FillDirection.Horizontal
TopbarUIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
TopbarUIListLayout.HorizontalAlignment = Enum.HorizontalAlignment.Right
TopbarUIListLayout.VerticalAlignment = Enum.VerticalAlignment.Center
TopbarUIListLayout.Padding = UDim.new(0, 10)
TopbarUIListLayout.Parent = TopbarFolder
local MoveIcon = Instance.new("ImageButton")
MoveIcon.Name = "MoveIcon"
MoveIcon.Image = Assets.Transform
MoveIcon.ImageTransparency = 0.7
MoveIcon.AnchorPoint = Vector2.new(1, 0.5)
MoveIcon.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
MoveIcon.BackgroundTransparency = 1
MoveIcon.BorderColor3 = Color3.fromRGB(0, 0, 0)
MoveIcon.BorderSizePixel = 0
MoveIcon.Position = UDim2.fromScale(1, 0.5)
MoveIcon.Size = UDim2.fromOffset(15, 15)
MoveIcon.Parent = TopbarFolder
MoveIcon.Visible = not Settings.DragStyle or Settings.DragStyle == 1
local Interact = Instance.new("TextButton")
Interact.Name = "Interact"
Interact.FontFace = Font.new("rbxasset://fonts/families/SourceSansPro.json")
Interact.Text = ""
Interact.TextColor3 = Color3.fromRGB(0, 0, 0)
Interact.TextSize = 14
Interact.AnchorPoint = Vector2.new(0.5, 0.5)
Interact.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Interact.BackgroundTransparency = 1
Interact.BorderColor3 = Color3.fromRGB(0, 0, 0)
Interact.BorderSizePixel = 0
Interact.Position = UDim2.fromScale(0.5, 0.5)
Interact.Size = UDim2.fromOffset(40, 40)
Interact.Parent = MoveIcon
local function ChangeMoveIconState(State)
if State == "Default" then
Utility:PropertyTween(MoveIcon, TweenInfo.new(0.2, Enum.EasingStyle.Sine), {
ImageTransparency = 0.7
}):Play()
elseif State == "Hover" then
Utility:PropertyTween(MoveIcon, TweenInfo.new(0.2, Enum.EasingStyle.Sine), {
ImageTransparency = 0.4
}):Play()
end
end
Interact.MouseEnter:Connect(function()
ChangeMoveIconState("Hover")
end)
Interact.MouseLeave:Connect(function()
ChangeMoveIconState("Default")
end)
local Dragging = false
local DragInput
local DragStart
local StartPos
local function Update(Input)
local Delta = Input.Position - DragStart
Base.Position = UDim2.new(StartPos.X.Scale, StartPos.X.Offset + Delta.X, StartPos.Y.Scale, StartPos.Y.Offset + Delta.Y)
end
local function OnDragStart(Input)
-- Don't start a window drag when the press began over an element that
-- captures its own drag (e.g. a viewport being orbited). Those set a
-- flag on WaveLibrary while hovered / pressed.
if WaveLibrary.ViewportHovering or WaveLibrary.ViewportCapturingDrag then
return
end
if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
Dragging = true
DragStart = Input.Position
StartPos = Base.Position
Input.Changed:Connect(function()
if Input.UserInputState == Enum.UserInputState.End then
Dragging = false
end
end)
end
end
local function OnDragUpdate(Input)
if Dragging and (Input.UserInputType == Enum.UserInputType.MouseMovement or Input.UserInputType == Enum.UserInputType.Touch) then
DragInput = Input
end
end
if not Settings.DragStyle or Settings.DragStyle == 1 then
Interact.InputBegan:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
OnDragStart(Input)
end
end)
Interact.InputChanged:Connect(OnDragUpdate)
Services.UserInputService.InputChanged:Connect(function(Input)
if Input == DragInput and Dragging then
Update(Input)
end
end)
Interact.InputEnded:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
Dragging = false
end
end)
elseif Settings.DragStyle == 2 then
Base.InputBegan:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
OnDragStart(Input)
end
end)
Base.InputChanged:Connect(OnDragUpdate)
Services.UserInputService.InputChanged:Connect(function(Input)
if Input == DragInput and Dragging then
Update(Input)
end
end)
Base.InputEnded:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
Dragging = false
end
end)
end
local SearchTab = Instance.new("Frame")
SearchTab.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
SearchTab.BackgroundTransparency = 0.95
SearchTab.BorderColor3 = Color3.fromRGB(0, 0, 0)
SearchTab.BorderSizePixel = 0
SearchTab.LayoutOrder = -1
SearchTab.Position = UDim2.fromScale(0, 0.3)
SearchTab.Size = UDim2.new(0, 240, 0, 30)
SearchTab.Name = "HeaderSearchBar"
SearchTab.Parent = Elements
local HeaderSearchOptions = Instance.new("ScrollingFrame")
HeaderSearchOptions.BackgroundColor3 = Color3.fromRGB(8, 8, 8)
HeaderSearchOptions.BackgroundTransparency = 0.6
HeaderSearchOptions.Position = UDim2.new(0, 0, 1, 10)
HeaderSearchOptions.Visible = false
HeaderSearchOptions.Size = UDim2.new(1, 0, 0, 0)
HeaderSearchOptions.AutomaticSize = Enum.AutomaticSize.Y
HeaderSearchOptions.Name = "HeaderSearchOptions"
HeaderSearchOptions.AutomaticCanvasSize = Enum.AutomaticSize.Y
HeaderSearchOptions.BottomImage = ""
HeaderSearchOptions.CanvasSize = UDim2.new()
HeaderSearchOptions.ScrollBarImageTransparency = 0.8
HeaderSearchOptions.ScrollBarThickness = 1
HeaderSearchOptions.TopImage = ""
HeaderSearchOptions.BorderColor3 = Color3.fromRGB(0, 0, 0)
HeaderSearchOptions.BorderSizePixel = 0
HeaderSearchOptions.Parent = SearchTab
local HeaderSearchOptionsUIStroke = Instance.new("UIStroke")
HeaderSearchOptionsUIStroke.Name = "HeaderSearchOptionsUIStroke"
HeaderSearchOptionsUIStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
HeaderSearchOptionsUIStroke.Color = Color3.fromRGB(255, 255, 255)
HeaderSearchOptionsUIStroke.Transparency = 0.9
HeaderSearchOptionsUIStroke.Parent = HeaderSearchOptions
local HeaderSearchOptionsUIPadding = Instance.new("UIPadding")
HeaderSearchOptionsUIPadding.Name = "HeaderSearchOptionsUIPadding"
HeaderSearchOptionsUIPadding.PaddingTop = UDim.new(0, 2)
HeaderSearchOptionsUIPadding.Parent = HeaderSearchOptions
local OptionsUIListLayout = Instance.new("UIListLayout")
OptionsUIListLayout.Name = "OptionsUIListLayout"
OptionsUIListLayout.Padding = UDim.new(0, 5)
OptionsUIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
OptionsUIListLayout.Parent = HeaderSearchOptions
local SearchTabUICorner = Instance.new("UICorner", SearchTab)
local SearchImageLabel = Instance.new("ImageLabel")
SearchImageLabel.Parent = SearchTab
SearchImageLabel.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
SearchImageLabel.BackgroundTransparency = 1.000
SearchImageLabel.BorderColor3 = Color3.fromRGB(0, 0, 0)
SearchImageLabel.BorderSizePixel = 0
SearchImageLabel.Position = UDim2.new(0.0366078243, 0, 0.300000012, 0)
SearchImageLabel.Size = UDim2.new(0, 12, 0, 12)
SearchImageLabel.Image = Assets.IconSearchImageLabel
SearchImageLabel.ImageColor3 = Color3.fromRGB(180, 180, 180)
local SearchTextBox = Instance.new("TextBox")
SearchTextBox.Name = "HeaderInputSearchBox"
SearchTextBox.Parent = SearchTab
SearchTextBox.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
SearchTextBox.BackgroundTransparency = 1.000
SearchTextBox.BorderColor3 = Color3.fromRGB(0, 0, 0)
SearchTextBox.BorderSizePixel = 0
SearchTextBox.Position = UDim2.new(0.1, 0, 0, 0)
SearchTextBox.Size = UDim2.new(0, 220, 0, 30)
SearchTextBox.FontFace = Font.new(Assets.InterFont)
SearchTextBox.PlaceholderText = "Search..."
SearchTextBox.Text = ""
SearchTextBox.TextColor3 = Color3.fromRGB(200, 200, 200)
SearchTextBox.TextSize = 14.000
SearchTextBox.TextXAlignment = Enum.TextXAlignment.Left
local CurrentTabDivider = Instance.new("Frame")
CurrentTabDivider.Name = "CurrentTabDivider"
CurrentTabDivider.AnchorPoint = Vector2.new(0, 1)
CurrentTabDivider.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
CurrentTabDivider.BackgroundTransparency = 0.9
CurrentTabDivider.BorderColor3 = Color3.fromRGB(0, 0, 0)
CurrentTabDivider.BorderSizePixel = 0
CurrentTabDivider.Visible = false
CurrentTabDivider.Position = UDim2.new(0.5, 0, 0, 42.5)
CurrentTabDivider.AnchorPoint = Vector2.new(0.5, 0)
CurrentTabDivider.Size = UDim2.new(0.05, 0, 0, 1)
CurrentTabDivider.Parent = Elements
local CurrentTab = Instance.new("TextLabel")
CurrentTab.Name = "CurrentTab"
CurrentTab.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.SemiBold)
CurrentTab.RichText = true
CurrentTab.Text = "Loading"
CurrentTab.RichText = true
CurrentTab.TextColor3 = Color3.fromRGB(255, 255, 255)
CurrentTab.TextSize = 18
CurrentTab.TextTransparency = 0.5
CurrentTab.TextTruncate = Enum.TextTruncate.SplitWord
CurrentTab.TextXAlignment = Enum.TextXAlignment.Center
CurrentTab.TextYAlignment = Enum.TextYAlignment.Top
CurrentTab.AnchorPoint = Vector2.new(0, 0.5)
CurrentTab.AutomaticSize = Enum.AutomaticSize.Y
CurrentTab.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
CurrentTab.BackgroundTransparency = 1
CurrentTab.BorderColor3 = Color3.fromRGB(0, 0, 0)
CurrentTab.BorderSizePixel = 0
CurrentTab.Position = UDim2.fromScale(0, 0.5)
CurrentTab.Size = UDim2.fromScale(1, 0)
CurrentTab.Parent = Elements
Elements.Parent = Topbar
Topbar.Parent = Content
Content.Parent = Base
local GlobalSettings = Instance.new("Frame")
GlobalSettings.Name = "Settings"
GlobalSettings.AutomaticSize = Enum.AutomaticSize.XY
GlobalSettings.BackgroundColor3 = Color3.fromRGB(15, 15, 15)
GlobalSettings.BorderColor3 = Color3.fromRGB(0, 0, 0)
GlobalSettings.BorderSizePixel = 0
GlobalSettings.Position = UDim2.fromScale(0.07, 0.025)
local GlobalSettingsUIStroke = Instance.new("UIStroke")
GlobalSettingsUIStroke.Name = "GlobalSettingsUIStroke"
GlobalSettingsUIStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
GlobalSettingsUIStroke.Color = Color3.fromRGB(255, 255, 255)
GlobalSettingsUIStroke.Transparency = 0.9
GlobalSettingsUIStroke.Parent = GlobalSettings
local GlobalSettingsUICorner = Instance.new("UICorner")
GlobalSettingsUICorner.Name = "GlobalSettingsUICorner"
GlobalSettingsUICorner.CornerRadius = UDim.new(0, 10)
GlobalSettingsUICorner.Parent = GlobalSettings
local GlobalSettingsUIPadding = Instance.new("UIPadding")
GlobalSettingsUIPadding.Name = "GlobalSettingsUIPadding"
GlobalSettingsUIPadding.PaddingBottom = UDim.new(0, 10)
GlobalSettingsUIPadding.PaddingTop = UDim.new(0, 10)
GlobalSettingsUIPadding.Parent = GlobalSettings
local GlobalSettingsUIListLayout = Instance.new("UIListLayout")
GlobalSettingsUIListLayout.Name = "GlobalSettingsUIListLayout"
GlobalSettingsUIListLayout.Padding = UDim.new(0, 5)
GlobalSettingsUIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
GlobalSettingsUIListLayout.Parent = GlobalSettings
local GlobalSettingsUIScale = Instance.new("UIScale")
GlobalSettingsUIScale.Name = "GlobalSettingsUIScale"
GlobalSettingsUIScale.Scale = 1e-07
GlobalSettingsUIScale.Parent = GlobalSettings
GlobalSettings.Parent = Base
Base.Parent = WaveLibraryUI
local Terminal = TerminalModule.new(Base, TopbarFolder, WaveLibrary, WaveLibraryUI, WindowFunctions)
WindowFunctions.Terminal = Terminal
function WindowFunctions:TerminalViewport(Options)
if Terminal and Terminal.Terminal then
Terminal.Terminal.Visible = true
end
return Terminal and Terminal:CreateModelViewport(Options)
end
-- Server browser: a slide-out panel of joinable servers (mirrors the Terminal, icon to its left).
-- Instantiated in a do-block so it adds no persistent local (this function is near Luau's limit);
-- the API below are separate WindowFunctions methods, which don't count toward that limit.
do
local SB = Utility:LoadFile("Wave/UserInterface/Imports/ServerBrowser/ServerBrowserModule.lua")
if SB then
WindowFunctions.ServerBrowser = SB.new(Base, TopbarFolder, WaveLibrary, WaveLibraryUI, WindowFunctions)
end
end
function WindowFunctions:AddServer(Options)
if self.ServerBrowser then
return self.ServerBrowser:AddServer(Options)
end
end
function WindowFunctions:ClearServers()
if self.ServerBrowser then
self.ServerBrowser:ClearServers()
end
return self
end
function WindowFunctions:SetServerRefresh(Callback)
if self.ServerBrowser then
self.ServerBrowser:SetRefreshCallback(Callback)
end
return self
end
function WindowFunctions:SetServerTitle(Text)
if self.ServerBrowser then
self.ServerBrowser:SetTitle(Text)
end
return self
end
function WindowFunctions:ToggleServerBrowser(State)
if self.ServerBrowser then
if State == nil then
State = not self.ServerBrowser.Open
end
self.ServerBrowser:SetOpen(State)
end
return self
end
local Hovering
local Toggled = GlobalSettingsUIScale.Scale == 1 and true or false
local function Toggle()
if not Toggled then
local InTween = Utility:PropertyTween(GlobalSettingsUIScale, TweenInfo.new(0.2, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {
Scale = 1
})
InTween:Play()
InTween.Completed:Wait()
Toggled = true
elseif Toggled then
local OutTween = Utility:PropertyTween(GlobalSettingsUIScale, TweenInfo.new(0.2, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {
Scale = 0
})
OutTween:Play()
OutTween.Completed:Wait()
Toggled = false
end
end
GlobalSettingsButton.MouseButton1Click:Connect(function()
if not WaveLibrary.InitializedGlobalSettings then
return
end
Toggle()
end)
GlobalSettings.MouseEnter:Connect(function()
Hovering = true
end)
GlobalSettings.MouseLeave:Connect(function()
Hovering = false
end)
Services.UserInputService.InputEnded:Connect(function(Inp)
if Inp.UserInputType == Enum.UserInputType.MouseButton1 and Toggled and not Hovering then
Toggle()
end
end)
local BlurTargets = {Base, Base.Terminal}
local Camera = Utility:GetCamera()
local WedgeGuid = Services.HttpService:GenerateGUID(true)
local Binds = {}
local DepthOfField
local CreatedInstances = {}
local function CleanupExistingBlur()
for _, LightInstance in pairs(Services.Lighting:GetChildren()) do
if LightInstance:IsA("DepthOfFieldEffect") and LightInstance:HasTag(".") then
LightInstance:Destroy()
end
end
for _, BlurTarget in ipairs(BlurTargets) do
for _, Child in pairs(BlurTarget:GetChildren()) do
if Child:IsA("Frame") and Child.Name:match("%x+-%x+-%x+-%x+-%x+") then
Child:Destroy()
end
end
end
for _, Part in pairs(Camera:GetChildren()) do
if Part:IsA("Part") and Part.Name:match("%x+-%x+-%x+-%x+-%x+") then
Part:Destroy()
end
end
end
CleanupExistingBlur()
for _, LightInstance in pairs(Services.Lighting:GetChildren()) do
if LightInstance:IsA("DepthOfFieldEffect") and LightInstance:HasTag(".") then
DepthOfField = LightInstance
break
end
end
if not DepthOfField then
DepthOfField = Instance.new('DepthOfFieldEffect')
DepthOfField.FarIntensity = 0
DepthOfField.FocusDistance = 51.6
DepthOfField.InFocusRadius = 50
DepthOfField.NearIntensity = 1
DepthOfField.Name = Services.HttpService:GenerateGUID(true)
DepthOfField:AddTag(".")
end
table.insert(CreatedInstances, DepthOfField)
local function IsNotNaN(Value)
return Value == Value
end
local Continue = IsNotNaN(Camera:ScreenPointToRay(0, 0).Origin.x)
while not Continue do
Services.RunService.RenderStepped:wait()
Continue = IsNotNaN(Camera:ScreenPointToRay(0, 0).Origin.x)
end
local ArcCosine = math.acos
local Maximum = math.max
local Pi = math.pi
local SquareRoot = math.sqrt
local Size = 0.2
local function DrawTriangle(Vertex1, Vertex2, Vertex3, Part0, Part1)
local Side1 = (Vertex1 - Vertex2).magnitude
local Side2 = (Vertex2 - Vertex3).magnitude
local Side3 = (Vertex3 - Vertex1).magnitude
local SideMaximum = Maximum(Side1, Side2, Side3)
local VertexA, VertexB, VertexC
if Side1 == SideMaximum then
VertexA, VertexB, VertexC = Vertex1, Vertex2, Vertex3
elseif Side2 == SideMaximum then
VertexA, VertexB, VertexC = Vertex2, Vertex3, Vertex1
else
VertexA, VertexB, VertexC = Vertex3, Vertex1, Vertex2
end
local Parallel = ((VertexB - VertexA).x * (VertexC - VertexA).x + (VertexB - VertexA).y * (VertexC - VertexA).y + (VertexB - VertexA).z * (VertexC - VertexA).z) / (VertexA - VertexB).magnitude
local Perpendicular = SquareRoot((VertexC - VertexA).magnitude^2 - Parallel * Parallel)
local DifferenceParallel = (VertexA - VertexB).magnitude - Parallel
local Start = CFrame.new(VertexB, VertexA)
local ZAngle = CFrame.Angles(Pi / 2, 0, 0)
local CoordinateFrame0 = Start
local TopLookVector = (CoordinateFrame0 * ZAngle).lookVector
local MidPoint = VertexA + CFrame.new(VertexA, VertexB).lookVector * Parallel
local NeededLookVector = CFrame.new(MidPoint, VertexC).lookVector
local DotProduct = TopLookVector.x * NeededLookVector.x + TopLookVector.y * NeededLookVector.y + TopLookVector.z * NeededLookVector.z
local AngleCFrame = CFrame.Angles(0, 0, ArcCosine(DotProduct))
CoordinateFrame0 = CoordinateFrame0 * AngleCFrame
if ((CoordinateFrame0 * ZAngle).lookVector - NeededLookVector).magnitude > 0.01 then
CoordinateFrame0 = CoordinateFrame0 * CFrame.Angles(0, 0, -2 * ArcCosine(DotProduct))
end
CoordinateFrame0 = CoordinateFrame0 * CFrame.new(0, Perpendicular / 2, -(DifferenceParallel + Parallel / 2))
local CoordinateFrame1 = Start * AngleCFrame * CFrame.Angles(0, Pi, 0)
if ((CoordinateFrame1 * ZAngle).lookVector - NeededLookVector).magnitude > 0.01 then
CoordinateFrame1 = CoordinateFrame1 * CFrame.Angles(0, 0, 2 * ArcCosine(DotProduct))
end
CoordinateFrame1 = CoordinateFrame1 * CFrame.new(0, Perpendicular / 2, DifferenceParallel / 2)
if not Part0 or not Part0:IsA("Part") or not Part0.Parent then
Part0 = Instance.new('Part')
Part0.FormFactor = 'Custom'
Part0.TopSurface = 0
Part0.BottomSurface = 0
Part0.Anchored = true
Part0.CanCollide = false
Part0.CastShadow = false
Part0.Material = "Glass"
Part0.Size = Vector3.new(Size, Size, Size)
Part0.Name = Services.HttpService:GenerateGUID(true)
local Mesh = Instance.new('SpecialMesh', Part0)
Mesh.MeshType = 2
Mesh.Name = WedgeGuid
end
if Part0 and Part0:FindFirstChild(WedgeGuid) then
Part0[WedgeGuid].Scale = Vector3.new(0, Perpendicular / Size, Parallel / Size)
Part0.CFrame = CoordinateFrame0
end
if not Part1 or not Part1:IsA("Part") or not Part1.Parent then
Part1 = Part0:clone()
end
if Part1 and Part1:FindFirstChild(WedgeGuid) then
Part1[WedgeGuid].Scale = Vector3.new(0, Perpendicular / Size, DifferenceParallel / Size)
Part1.CFrame = CoordinateFrame1
end
return Part0, Part1
end
function DrawQuad(Vertex1, Vertex2, Vertex3, Vertex4, Parts)
Parts[1], Parts[2] = DrawTriangle(Vertex1, Vertex2, Vertex3, Parts[1], Parts[2])
Parts[3], Parts[4] = DrawTriangle(Vertex3, Vertex2, Vertex4, Parts[3], Parts[4])
end
local function CleanupBlur()
for Frame, Data in pairs(Binds) do
if Data.Connection then
Data.Connection:Disconnect()
Data.Connection = nil
end
if Data.Parts then
for _, Part in pairs(Data.Parts) do
if Part and Part.Parent then
Part.Parent = nil
end
if Part then
pcall(function() Part:Destroy() end)
end
end
Data.Parts = {}
end
if Frame and Frame.Parent then
pcall(function() Frame:Destroy() end)
end
end
Binds = {}
if DepthOfField then
DepthOfField.Enabled = false
if DepthOfField.Parent then
DepthOfField.Parent = nil
end
pcall(function() DepthOfField:Destroy() end)
DepthOfField = nil
end
if WaveLibrary.UpdateOrientation then
WaveLibrary.UpdateOrientation:Disconnect()
WaveLibrary.UpdateOrientation = nil
end
for _, Instance in ipairs(CreatedInstances) do
if Instance and Instance.Parent then
pcall(function() Instance:Destroy() end)
end
end
CreatedInstances = {}
end
if WaveLibrary.Unloaded then
CleanupBlur()
return
end
for _, BlurTarget in ipairs(BlurTargets) do
local Frame = Instance.new('Frame')
Frame.Parent = BlurTarget
Frame.Size = UDim2.new(0.97, 0, 0.97, 0)
Frame.Position = UDim2.new(0.5, 0, 0.5, 0)
Frame.AnchorPoint = Vector2.new(0.5, 0.5)
Frame.BackgroundTransparency = 1
Frame.Name = Services.HttpService:GenerateGUID(true)
table.insert(CreatedInstances, Frame)
if Binds[Frame] then
continue
end
local Parts = {}
local Parents = {}
local function Add(Child)
if Child:IsA'GuiObject' then
Parents[#Parents + 1] = Child
Add(Child.Parent)
end
end
Add(Frame)
local function IsVisible(Instance)
while Instance do
if Instance:IsA("GuiObject") then
if not Instance.Visible then
return false
end
elseif Instance:IsA("ScreenGui") then
if not Instance.Enabled then
return false
end
break
end
Instance = Instance.Parent
end
return true
end
local function UpdateOrientation(FetchProperties)
if not IsVisible(Frame) or not WaveLibrary.AcrylicBlur or WaveLibrary.Unloaded then
for i, Part in pairs(Parts) do
if Part and Part.Parent then
Part.Parent = nil
end
if Part then
pcall(function() Part:Destroy() end)
end
Parts[i] = nil
end
if DepthOfField then
pcall(function()
DepthOfField.Enabled = false
DepthOfField.Parent = nil
end)
end
return
end
if DepthOfField and not DepthOfField.Parent then
pcall(function()
DepthOfField.Parent = Services.Lighting
end)
end
if DepthOfField then
pcall(function()
DepthOfField.Enabled = true
end)
end
local Properties = {
Transparency = 0.98;
BrickColor = BrickColor.new('Institutional white');
}
local ZIndex = 1 - 0.05 * Frame.ZIndex
local TopLeft = Frame.AbsolutePosition
local BottomRight = Frame.AbsolutePosition + Frame.AbsoluteSize
local TopRight = Vector2.new(BottomRight.x, TopLeft.y)
local BottomLeft = Vector2.new(TopLeft.x, BottomRight.y)
local Rotation = 0
for _, Parent in ipairs(Parents) do
Rotation = Rotation + Parent.Rotation
end
if Rotation ~= 0 and Rotation % 180 ~= 0 then
local Middle = TopLeft:lerp(BottomRight, 0.5)
local Sine = math.sin(math.rad(Rotation))
local Cosine = math.cos(math.rad(Rotation))
TopLeft = Vector2.new(Cosine * (TopLeft.x - Middle.x) - Sine * (TopLeft.y - Middle.y), Sine * (TopLeft.x - Middle.x) + Cosine * (TopLeft.y - Middle.y)) + Middle
TopRight = Vector2.new(Cosine * (TopRight.x - Middle.x) - Sine * (TopRight.y - Middle.y), Sine * (TopRight.x - Middle.x) + Cosine * (TopRight.y - Middle.y)) + Middle
BottomLeft = Vector2.new(Cosine * (BottomLeft.x - Middle.x) - Sine * (BottomLeft.y - Middle.y), Sine * (BottomLeft.x - Middle.x) + Cosine * (BottomLeft.y - Middle.y)) + Middle
BottomRight = Vector2.new(Cosine * (BottomRight.x - Middle.x) - Sine * (BottomRight.y - Middle.y), Sine * (BottomRight.x - Middle.x) + Cosine * (BottomRight.y - Middle.y)) + Middle
end
DrawQuad(
Camera:ScreenPointToRay(TopLeft.x, TopLeft.y, ZIndex).Origin,
Camera:ScreenPointToRay(TopRight.x, TopRight.y, ZIndex).Origin,
Camera:ScreenPointToRay(BottomLeft.x, BottomLeft.y, ZIndex).Origin,
Camera:ScreenPointToRay(BottomRight.x, BottomRight.y, ZIndex).Origin,
Parts
)
if FetchProperties then
for _, Part in pairs(Parts) do
if Part and Part:IsA("Part") then
Part.Parent = Camera
end
end
for PropertyName, PropertyValue in pairs(Properties) do
for _, Part in pairs(Parts) do
if Part and Part:IsA("Part") then
pcall(function()
Part[PropertyName] = PropertyValue
end)
end
end
end
end
end
local Connection = Services.RunService.RenderStepped:Connect(UpdateOrientation)
WaveLibrary.UpdateOrientation = Connection
Binds[Frame] = {Parts = Parts, Connection = Connection}
end
task.spawn(function()
while not WaveLibrary.Unloaded do
task.wait(0.1)
end
CleanupBlur()
end)
function WindowFunctions:AdjustSidebars(ValueOne, ValueTwo)
Sidebar.Size = UDim2.new(0, ValueOne, 1, 0)
Content.Size = UDim2.new(0, ValueTwo, 1, 0)
end
function WindowFunctions:GlobalSetting(Settings)
WaveLibrary.InitializedGlobalSettings = true
local GlobalSettingFunctions = {}
local GlobalSetting = Instance.new("TextButton")
GlobalSetting.Name = "GlobalSetting"
GlobalSetting.FontFace = Font.new("rbxasset://fonts/families/SourceSansPro.json")
GlobalSetting.Text = ""
GlobalSetting.TextColor3 = Color3.fromRGB(0, 0, 0)
GlobalSetting.TextSize = 14
GlobalSetting.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
GlobalSetting.BackgroundTransparency = 1
GlobalSetting.BorderColor3 = Color3.fromRGB(0, 0, 0)
GlobalSetting.BorderSizePixel = 0
GlobalSetting.Size = UDim2.fromOffset(200, 30)
local GlobalSettingToggleUIPadding = Instance.new("UIPadding")
GlobalSettingToggleUIPadding.Name = "GlobalSettingToggleUIPadding"
GlobalSettingToggleUIPadding.PaddingLeft = UDim.new(0, 15)
GlobalSettingToggleUIPadding.Parent = GlobalSetting
local SettingName = Instance.new("TextLabel")
SettingName.Name = "SettingName"
SettingName.FontFace = Font.new(Assets.InterFont)
SettingName.Text = Settings.Name
SettingName.RichText = true
SettingName.TextColor3 = Color3.fromRGB(255, 255, 255)
SettingName.TextSize = 13
SettingName.TextTransparency = 0.5
SettingName.TextTruncate = Enum.TextTruncate.SplitWord
SettingName.TextXAlignment = Enum.TextXAlignment.Left
SettingName.TextYAlignment = Enum.TextYAlignment.Top
SettingName.AnchorPoint = Vector2.new(0, 0.5)
SettingName.AutomaticSize = Enum.AutomaticSize.Y
SettingName.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
SettingName.BackgroundTransparency = 1
SettingName.BorderColor3 = Color3.fromRGB(0, 0, 0)
SettingName.BorderSizePixel = 0
SettingName.Position = UDim2.fromScale(1.3e-07, 0.5)
SettingName.Size = UDim2.new(1,-40,0,0)
SettingName.Parent = GlobalSetting
local GlobalSettingToggleUIListLayout = Instance.new("UIListLayout")
GlobalSettingToggleUIListLayout.Name = "GlobalSettingToggleUIListLayout"
GlobalSettingToggleUIListLayout.Padding = UDim.new(0, 10)
GlobalSettingToggleUIListLayout.FillDirection = Enum.FillDirection.Horizontal
GlobalSettingToggleUIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
GlobalSettingToggleUIListLayout.VerticalAlignment = Enum.VerticalAlignment.Center
GlobalSettingToggleUIListLayout.Parent = GlobalSetting
local Checkmark = Instance.new("TextLabel")
Checkmark.Name = "Checkmark"
Checkmark.FontFace = Font.new(
Assets.InterFont,
Enum.FontWeight.Medium,
Enum.FontStyle.Normal
)
Checkmark.Text = "✓"
Checkmark.TextColor3 = Color3.fromRGB(255, 255, 255)
Checkmark.TextSize = 13
Checkmark.TextTransparency = 1
Checkmark.TextXAlignment = Enum.TextXAlignment.Left
Checkmark.TextYAlignment = Enum.TextYAlignment.Top
Checkmark.AnchorPoint = Vector2.new(0, 0.5)
Checkmark.AutomaticSize = Enum.AutomaticSize.Y
Checkmark.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Checkmark.BackgroundTransparency = 1
Checkmark.BorderColor3 = Color3.fromRGB(0, 0, 0)
Checkmark.BorderSizePixel = 0
Checkmark.LayoutOrder = -1
Checkmark.Position = UDim2.fromScale(1.3e-07, 0.5)
Checkmark.Size = UDim2.fromOffset(-10, 0)
Checkmark.Parent = GlobalSetting
GlobalSetting.Parent = GlobalSettings
local TweenSettings = {
Duration = 0.2,
EasingStyle = Enum.EasingStyle.Quint,
TransparencyIn = 0.2,
TransparencyOut = 0.5,
CheckSizeIncrease = 12,
CheckSizeDecrease = -GlobalSettingToggleUIListLayout.Padding.Offset,
WaitTime = 1
}
local Tweens = {
CheckIn = Utility:PropertyTween(Checkmark, TweenInfo.new(TweenSettings.Duration, TweenSettings.EasingStyle), {
Size = UDim2.new(Checkmark.Size.X.Scale, TweenSettings.CheckSizeIncrease, Checkmark.Size.Y.Scale, Checkmark.Size.Y.Offset)
}),
CheckOut = Utility:PropertyTween(Checkmark, TweenInfo.new(TweenSettings.Duration, TweenSettings.EasingStyle),{
Size = UDim2.new(Checkmark.Size.X.Scale, TweenSettings.CheckSizeDecrease, Checkmark.Size.Y.Scale, Checkmark.Size.Y.Offset)
}),
NameIn = Utility:PropertyTween(SettingName, TweenInfo.new(TweenSettings.Duration, TweenSettings.EasingStyle),{
TextTransparency = TweenSettings.TransparencyIn
}),
NameOut = Utility:PropertyTween(SettingName, TweenInfo.new(TweenSettings.Duration, TweenSettings.EasingStyle),{
TextTransparency = TweenSettings.TransparencyOut
})
}
local function Toggle(State)
if not State then
Tweens.CheckOut:Play()
Tweens.NameOut:Play()
Checkmark:GetPropertyChangedSignal("AbsoluteSize"):Connect(function()
if Checkmark.AbsoluteSize.X <= 0 then
Checkmark.TextTransparency = 1
end
end)
else
Tweens.CheckIn:Play()
Tweens.NameIn:Play()
Checkmark:GetPropertyChangedSignal("AbsoluteSize"):Connect(function()
if Checkmark.AbsoluteSize.X > 0 then
Checkmark.TextTransparency = 0
end
end)
end
end
local IsToggled = Settings.Default
Toggle(IsToggled)
GlobalSetting.MouseButton1Click:Connect(function()
IsToggled = not IsToggled
Toggle(IsToggled)
task.spawn(function()
if Settings.Callback then
Settings.Callback(IsToggled)
end
end)
end)
function GlobalSettingFunctions:UpdateName(NewName)
SettingName.Text = NewName
end
function GlobalSettingFunctions:UpdateState(NewState)
Toggle(NewState)
IsToggled = NewState
end
return GlobalSettingFunctions
end
function WindowFunctions:TabGroup(GroupLabel)
local SectionFunctions = {}
local TabGroup = Instance.new("Frame")
TabGroup.Name = "Section"
TabGroup.AutomaticSize = Enum.AutomaticSize.Y
TabGroup.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
TabGroup.BackgroundTransparency = 1
TabGroup.BorderColor3 = Color3.fromRGB(0, 0, 0)
TabGroup.BorderSizePixel = 0
TabGroup.Size = UDim2.fromScale(1, 0)
-- (The old full-width straight "Divider" line was removed — the labelled
-- dot + gradient divider below is the only group separator now.)
local SectionTabSwitchers = Instance.new("Frame")
SectionTabSwitchers.Name = "SectionTabSwitchers"
SectionTabSwitchers.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
SectionTabSwitchers.BackgroundTransparency = 1
SectionTabSwitchers.BorderColor3 = Color3.fromRGB(0, 0, 0)
SectionTabSwitchers.BorderSizePixel = 0
SectionTabSwitchers.Size = UDim2.fromScale(1, 1)
local UIListLayout1 = Instance.new("UIListLayout")
UIListLayout1.Name = "UIListLayout"
UIListLayout1.Padding = UDim.new(0, 15)
UIListLayout1.HorizontalAlignment = Enum.HorizontalAlignment.Center
UIListLayout1.SortOrder = Enum.SortOrder.LayoutOrder
UIListLayout1.Parent = SectionTabSwitchers
local UIPadding1 = Instance.new("UIPadding")
UIPadding1.Name = "UIPadding"
UIPadding1.PaddingBottom = UDim.new(0, 15)
UIPadding1.Parent = SectionTabSwitchers
if GroupLabel and GroupLabel ~= "" then
-- GetCurrentThemeAttribute is only attached after Initialize() (which
-- runs on the first tab). Some scripts call Window:Divider() BEFORE the
-- first tab, which would call a missing method and crash the whole UI
-- build — so resolve theme colours defensively.
local function GroupAttr(Name, Fallback)
local Getter = WindowFunctions.GetCurrentThemeAttribute
if Getter then
local ok, value = pcall(Getter, WindowFunctions, Name)
if ok and value ~= nil then
return value
end
end
return Fallback
end
local Accent = GroupAttr("AccentPrimary", Color3.fromRGB(96, 165, 250))
local LabelHolder = Instance.new("Frame")
LabelHolder.Name = "TabGroupLabel"
LabelHolder.BackgroundTransparency = 1
LabelHolder.ClipsDescendants = true
LabelHolder.Size = UDim2.new(1, 0, 0, 24)
LabelHolder.LayoutOrder = -100
LabelHolder:SetAttribute("NoApplyTheme", true)
local LabelPadding = Instance.new("UIPadding")
LabelPadding.PaddingLeft = UDim.new(0, 18)
LabelPadding.PaddingRight = UDim.new(0, 16)
LabelPadding.PaddingBottom = UDim.new(0, 4)
LabelPadding.Parent = LabelHolder
local LabelRow = Instance.new("UIListLayout")
LabelRow.FillDirection = Enum.FillDirection.Horizontal
LabelRow.VerticalAlignment = Enum.VerticalAlignment.Center
LabelRow.SortOrder = Enum.SortOrder.LayoutOrder
LabelRow.Padding = UDim.new(0, 8)
LabelRow.Parent = LabelHolder
local Dot = Instance.new("Frame")
Dot.Name = "Dot"
Dot.Size = UDim2.fromOffset(5, 5)
Dot.BackgroundColor3 = Accent
Dot.BackgroundTransparency = 0.05
Dot.BorderSizePixel = 0
Dot.LayoutOrder = 0
Dot:SetAttribute("NoApplyTheme", true)
Dot.Parent = LabelHolder
local DotCorner = Instance.new("UICorner")
DotCorner.CornerRadius = UDim.new(1, 0)
DotCorner.Parent = Dot
local DotGlow = Instance.new("UIStroke")
DotGlow.Color = Accent
DotGlow.Thickness = 3
DotGlow.Transparency = 0.8
DotGlow.Parent = Dot
local GroupLabelText = Instance.new("TextLabel")
GroupLabelText.Name = "Text"
GroupLabelText.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.SemiBold, Enum.FontStyle.Normal)
GroupLabelText.Text = string.upper(GroupLabel)
GroupLabelText.RichText = true
GroupLabelText.TextColor3 = GroupAttr("TextSecondary", Color3.fromRGB(158, 158, 170))
GroupLabelText.TextTransparency = 0.12
GroupLabelText.TextSize = 11
GroupLabelText.TextXAlignment = Enum.TextXAlignment.Left
GroupLabelText.TextYAlignment = Enum.TextYAlignment.Center
GroupLabelText.AutomaticSize = Enum.AutomaticSize.X
GroupLabelText.BackgroundTransparency = 1
GroupLabelText.Size = UDim2.new(0, 0, 1, 0)
GroupLabelText.LayoutOrder = 1
GroupLabelText:SetAttribute("NoApplyTheme", true)
GroupLabelText.Parent = LabelHolder
local Line = Instance.new("Frame")
Line.Name = "Line"
Line.BackgroundColor3 = GroupAttr("BorderColor", Color3.fromRGB(255, 255, 255))
Line.BackgroundTransparency = 0.8
Line.BorderSizePixel = 0
Line.Size = UDim2.new(1, 0, 0, 1)
Line.LayoutOrder = 2
Line:SetAttribute("NoApplyTheme", true)
Line.Parent = LabelHolder
local LineGradient = Instance.new("UIGradient")
LineGradient.Color = ColorSequence.new(Accent, GroupAttr("BorderColor", Color3.fromRGB(255, 255, 255)))
LineGradient.Transparency = NumberSequence.new({
NumberSequenceKeypoint.new(0, 0.4),
NumberSequenceKeypoint.new(0.5, 0),
NumberSequenceKeypoint.new(1, 1),
})
LineGradient.Parent = Line
LabelHolder.Parent = SectionTabSwitchers
end
SectionTabSwitchers.Parent = TabGroup
TabGroup.Parent = TabSwitchersScrollingFrame
function SectionFunctions:Tab(Settings)
local TabFunctions = {Settings = Settings}
if not WaveLibrary.TabSettings.InitializeTab or WaveLibrary.TabSettings.InitializeTab == nil then
WaveLibrary.TabSettings.InitializeTab = Settings.Name
end
local TabSwitcher = Instance.new("TextButton")
TabSwitcher.Name = "TabSwitcher"
TabSwitcher.FontFace = Font.new("rbxasset://fonts/families/SourceSansPro.json")
TabSwitcher.Text = ""
TabSwitcher.Visible = not TabFunctions.Settings.Hidden
TabSwitcher.TextColor3 = Color3.fromRGB(0, 0, 0)
TabSwitcher.TextSize = 14
TabSwitcher.AutoButtonColor = false
TabSwitcher.AnchorPoint = Vector2.new(0.5, 0)
TabSwitcher.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
TabSwitcher.BackgroundTransparency = 1
TabSwitcher.BorderColor3 = Color3.fromRGB(0, 0, 0)
TabSwitcher.BorderSizePixel = 0
TabSwitcher.Position = UDim2.fromScale(0.5, 0)
TabSwitcher.Size = UDim2.new(1, -21, 0, 40)
Maid.TabIndex += 1
TabSwitcher.LayoutOrder = Maid.TabIndex
local TabSwitcherUICorner = Instance.new("UICorner")
TabSwitcherUICorner.Name = "TabSwitcherUICorner"
TabSwitcherUICorner.Parent = TabSwitcher
local TabSwitcherUIStroke = Instance.new("UIStroke")
TabSwitcherUIStroke.Name = "TabSwitcherUIStroke"
TabSwitcherUIStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
TabSwitcherUIStroke.Color = Color3.fromRGB(255, 255, 255)
TabSwitcherUIStroke.Transparency = 1
TabSwitcherUIStroke.Parent = TabSwitcher
local TabSwitcherUIListLayout = Instance.new("UIListLayout")
TabSwitcherUIListLayout.Name = "TabSwitcherUIListLayout"
TabSwitcherUIListLayout.Padding = UDim.new(0, 9)
TabSwitcherUIListLayout.FillDirection = Enum.FillDirection.Horizontal
TabSwitcherUIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
TabSwitcherUIListLayout.VerticalAlignment = Enum.VerticalAlignment.Center
TabSwitcherUIListLayout.Parent = TabSwitcher
local TabSwitcherIndicator = Instance.new("Frame")
TabSwitcherIndicator.Name = "TabSwitcherIndicator"
TabSwitcherIndicator.Size = UDim2.new(0, 4, 0.5, 0)
TabSwitcherIndicator.Position = UDim2.new(0.08, 0, 0, 0)
TabSwitcherIndicator.BackgroundTransparency = 0.4
TabSwitcherIndicator.BorderColor3 = Color3.fromRGB(0, 0, 0)
TabSwitcherIndicator.BorderSizePixel = 0
TabSwitcherIndicator.Parent = TabSwitcher
local TabSwitcherIndicatorUICorner = Instance.new("UICorner")
TabSwitcherIndicatorUICorner.Name = "TabSwitcherIndicatorUICorner"
TabSwitcherIndicatorUICorner.Parent = TabSwitcherIndicator
local TabImage
if TabFunctions.Settings.Image then
TabImage = Instance.new("ImageLabel")
TabImage.Name = "TabImage"
TabImage.Image = Settings.Image
-- Sprite-sheet icons (Lucide / Phosphor) pass a rect into the sheet.
if Settings.ImageRectOffset then
TabImage.ImageRectOffset = Settings.ImageRectOffset
end
if Settings.ImageRectSize then
TabImage.ImageRectSize = Settings.ImageRectSize
end
TabImage.ImageTransparency = 0.5
TabImage.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
TabImage.BackgroundTransparency = 1
TabImage.BorderColor3 = Color3.fromRGB(0, 0, 0)
TabImage.BorderSizePixel = 0
TabImage.Size = UDim2.fromOffset(18, 18)
TabImage.Parent = TabSwitcher
end
local TabSwitcherName = Instance.new("TextLabel")
TabSwitcherName.Name = "TabSwitcherName"
TabSwitcherName.FontFace = Font.new(
Assets.InterFont,
Enum.FontWeight.Medium,
Enum.FontStyle.Normal
)
TabSwitcherName.Text = TabFunctions.Settings.Name
TabSwitcherName.RichText = true
TabSwitcherName.TextColor3 = Color3.fromRGB(255, 255, 255)
TabSwitcherName.TextSize = 16
TabSwitcherName.TextTransparency = 0.5
TabSwitcherName.TextTruncate = Enum.TextTruncate.SplitWord
TabSwitcherName.TextXAlignment = Enum.TextXAlignment.Left
TabSwitcherName.TextYAlignment = Enum.TextYAlignment.Top
TabSwitcherName.AutomaticSize = Enum.AutomaticSize.Y
TabSwitcherName.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
TabSwitcherName.BackgroundTransparency = 1
TabSwitcherName.BorderColor3 = Color3.fromRGB(0, 0, 0)
TabSwitcherName.BorderSizePixel = 0
TabSwitcherName.Size = UDim2.fromScale(1, 0)
TabSwitcherName.Parent = TabSwitcher
TabSwitcherName.LayoutOrder = 1
local TabSwitcherUIPadding = Instance.new("UIPadding")
TabSwitcherUIPadding.Name = "TabSwitcherUIPadding"
TabSwitcherUIPadding.PaddingLeft = UDim.new(0, 24)
TabSwitcherUIPadding.PaddingRight = UDim.new(0, 35)
TabSwitcherUIPadding.PaddingTop = UDim.new(0, 1)
TabSwitcherUIPadding.Parent = TabSwitcher
TabSwitcher.Parent = SectionTabSwitchers
local Elements1 = Instance.new("Frame")
Elements1.Name = "Elements"
Elements1.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Elements1.BackgroundTransparency = 1
Elements1.BorderColor3 = Color3.fromRGB(0, 0, 0)
Elements1.BorderSizePixel = 0
Elements1.Position = UDim2.fromOffset(0, 63)
Elements1.Size = UDim2.new(1, 0, 1, -63)
Elements1.ClipsDescendants = true
local ElementsUIPadding = Instance.new("UIPadding")
ElementsUIPadding.Name = "ElementsUIPadding"
ElementsUIPadding.PaddingRight = UDim.new(0, 5)
ElementsUIPadding.PaddingTop = UDim.new(0, 10)
ElementsUIPadding.PaddingBottom = UDim.new(0, 10)
ElementsUIPadding.Parent = Elements1
local ElementsScrolling = Instance.new("ScrollingFrame")
ElementsScrolling.Name = "ElementsScrolling"
-- AutomaticCanvasSize under-measures a column that holds a fixed-height
-- ViewportFrame (the bottom becomes unreachable), so drive the canvas
-- from the columns' own auto-sized height instead — see below.
ElementsScrolling.AutomaticCanvasSize = Enum.AutomaticSize.None
ElementsScrolling.BottomImage = ""
ElementsScrolling.CanvasSize = UDim2.new()
ElementsScrolling.ScrollBarImageTransparency = 0.5
ElementsScrolling.ScrollBarThickness = 1
ElementsScrolling.TopImage = ""
ElementsScrolling.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
ElementsScrolling.BackgroundTransparency = 1
ElementsScrolling.BorderColor3 = Color3.fromRGB(0, 0, 0)
ElementsScrolling.BorderSizePixel = 0
ElementsScrolling.Size = UDim2.fromScale(1, 1)
ElementsScrolling.ClipsDescendants = false
local ElementsScrollingUIPadding = Instance.new("UIPadding")
ElementsScrollingUIPadding.Name = "ElementsScrollingUIPadding"
ElementsScrollingUIPadding.PaddingBottom = UDim.new(0, 5)
ElementsScrollingUIPadding.PaddingLeft = UDim.new(0, 11)
ElementsScrollingUIPadding.PaddingRight = UDim.new(0, 3)
ElementsScrollingUIPadding.PaddingTop = UDim.new(0, 5)
ElementsScrollingUIPadding.Parent = ElementsScrolling
local ElementsScrollingUIListLayout = Instance.new("UIListLayout")
ElementsScrollingUIListLayout.Name = "ElementsScrollingUIListLayout"
ElementsScrollingUIListLayout.Padding = UDim.new(0, 15)
ElementsScrollingUIListLayout.FillDirection = Enum.FillDirection.Horizontal
ElementsScrollingUIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
ElementsScrollingUIListLayout.Parent = ElementsScrolling
local Left = Instance.new("Frame")
Left.Name = "Left"
Left.AutomaticSize = Enum.AutomaticSize.Y
Left.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
Left.BackgroundTransparency = 1
Left.BorderColor3 = Color3.fromRGB(0, 0, 0)
Left.BorderSizePixel = 0
Left.Position = UDim2.fromScale(0.512, 0)
Left.Size = UDim2.new(0.5, -10, 0, 0)
local LeftUIListLayout = Instance.new("UIListLayout")
LeftUIListLayout.Name = "LeftUIListLayout"
LeftUIListLayout.Padding = UDim.new(0, 15)
LeftUIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
LeftUIListLayout.Parent = Left
local Right = Instance.new("Frame")
Right.Name = "Right"
Right.AutomaticSize = Enum.AutomaticSize.Y
Right.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
Right.BackgroundTransparency = 1
Right.BorderColor3 = Color3.fromRGB(0, 0, 0)
Right.BorderSizePixel = 0
Right.LayoutOrder = 1
Right.Position = UDim2.fromScale(0.512, 0)
Right.Size = UDim2.new(0.5, -10, 0, 0)
local RightUIListLayout = Instance.new("UIListLayout")
RightUIListLayout.Name = "RightUIListLayout"
RightUIListLayout.Padding = UDim.new(0, 15)
RightUIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
RightUIListLayout.Parent = Right
local Middle = Instance.new("ScrollingFrame")
Middle.Name = "Middle"
Middle.AutomaticSize = Enum.AutomaticSize.Y
Middle.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Middle.BackgroundTransparency = 1
Middle.BorderColor3 = Color3.fromRGB(0, 0, 0)
Middle.BorderSizePixel = 0
Middle.Position = UDim2.fromScale(0.512, 0)
Middle.Size = UDim2.new(1, -10, 1, 0)
Middle.ScrollBarImageTransparency = 0.8
Middle.ScrollBarThickness = 1
Middle.CanvasSize = UDim2.new(0, 0, 15, 0)
SearchTextBox:GetPropertyChangedSignal("Text"):Connect(function()
if not WindowFunctions.Settings.SearchCallback then
return
end
WindowFunctions.Settings.SearchCallback({
Text = SearchTextBox.Text,
Middle = Middle,
Options = WaveLibrary.Options,
HeaderSearchOptions = HeaderSearchOptions,
})
end)
if not Maid.Focused then
Maid.Focused = SearchTextBox.Focused:Connect(function()
if not WindowFunctions.Settings.SearchFocused then
return
end
WindowFunctions.Settings.SearchFocused({
HeaderSearchOptions = HeaderSearchOptions,
Options = WaveLibrary.Options
})
end)
end
if not Maid.UnFocused then
Maid.UnFocused = SearchTextBox.FocusLost:Connect(function()
if not WindowFunctions.Settings.SearchUnFocused then
return
end
WindowFunctions.Settings.SearchUnFocused({
HeaderSearchOptions = HeaderSearchOptions,
Options = WaveLibrary.Options
})
end)
end
if TabFunctions.Settings.MiddleFrame then
Middle.Parent = ElementsScrolling
local MiddleFrameUIList = Instance.new("UIListLayout")
for Property, Value in pairs(TabFunctions.Settings.FrameSettings) do
if MiddleFrameUIList[Property] ~= nil then
MiddleFrameUIList[Property] = Value
end
end
MiddleFrameUIList.Parent = Middle
else
Left.Parent = ElementsScrolling
Right.Parent = ElementsScrolling
-- Keep the scroll canvas as tall as the taller column. AutomaticSize
-- only fills AbsoluteSize (not Size.Offset), so read that and divide
-- out the window UI scale to get canvas-offset units — this always
-- lets you reach the bottom, even with a tall ViewportFrame inside.
local function UpdateElementsCanvas()
local Scale = (BaseUIScale and BaseUIScale.Scale) or 1
if Scale <= 0 then Scale = 1 end
local Tallest = math.max(Left.AbsoluteSize.Y, Right.AbsoluteSize.Y) / Scale
ElementsScrolling.CanvasSize = UDim2.new(0, 0, 0, Tallest + 10)
end
Left:GetPropertyChangedSignal("AbsoluteSize"):Connect(UpdateElementsCanvas)
Right:GetPropertyChangedSignal("AbsoluteSize"):Connect(UpdateElementsCanvas)
BaseUIScale:GetPropertyChangedSignal("Scale"):Connect(UpdateElementsCanvas)
UpdateElementsCanvas()
end
ElementsScrolling.Parent = Elements1
function TabFunctions:Card(Item)
Item.Parent = Middle
end
function TabFunctions:HideContents()
Middle.Visible = false
end
function TabFunctions:ShowContents()
Middle.Visible = true
end
function TabFunctions:CreateLoading()
local LoadingContainer = Instance.new("Frame")
LoadingContainer.Name = "LoadingContainer"
LoadingContainer.BackgroundTransparency = 1
LoadingContainer.Size = UDim2.fromScale(1, 1)
LoadingContainer.Position = UDim2.fromScale(0, 0)
LoadingContainer.Parent = ElementsScrolling
local LoadingFrame = Instance.new("Frame")
LoadingFrame.Name = "LoadingFrame"
LoadingFrame.BackgroundTransparency = 1
LoadingFrame.Size = UDim2.fromOffset(120, 40)
LoadingFrame.Position = UDim2.fromScale(0.5, 0.5)
LoadingFrame.AnchorPoint = Vector2.new(0.5, 0.5)
LoadingFrame.Parent = LoadingContainer
local Dots = {}
local DotCount = 5
local DotSize = 8
local Spacing = 20
for I = 1, DotCount do
local Dot = Instance.new("Frame")
Dot.Name = "LoadingDot" .. I
Dot.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Dot.BackgroundTransparency = 0.3
Dot.BorderSizePixel = 0
Dot.Size = UDim2.fromOffset(DotSize, DotSize)
Dot.Position = UDim2.fromOffset((I - 1) * Spacing + (120 - (DotCount - 1) * Spacing) / 2, 16)
Dot.Parent = LoadingFrame
local Corner = Instance.new("UICorner")
Corner.CornerRadius = UDim.new(1, 0)
Corner.Parent = Dot
table.insert(Dots, Dot)
end
local function AnimateDots()
local AnimationDelay = 0.15
local AnimationDuration = 0.4
local ScaleFactor = 1.5
spawn(function()
while LoadingContainer.Parent do
for I, Dot in ipairs(Dots) do
spawn(function()
local ScaleUpTween = Services.TweenService:Create(
Dot,
TweenInfo.new(AnimationDuration / 2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out),
{
Size = UDim2.fromOffset(DotSize * ScaleFactor, DotSize * ScaleFactor),
BackgroundTransparency = 0.1
}
)
local ScaleDownTween = Services.TweenService:Create(
Dot,
TweenInfo.new(AnimationDuration / 2, Enum.EasingStyle.Quart, Enum.EasingDirection.In),
{
Size = UDim2.fromOffset(DotSize, DotSize),
BackgroundTransparency = 0.3
}
)
ScaleUpTween:Play()
ScaleUpTween.Completed:Connect(function()
ScaleDownTween:Play()
end)
end)
task.wait(AnimationDelay)
end
task.wait(0.3)
end
end)
end
AnimateDots()
return LoadingContainer
end
function TabFunctions:RemoveLoading()
local LoadingContainer = ElementsScrolling:FindFirstChild("LoadingContainer")
if LoadingContainer then
LoadingContainer:Destroy()
end
end
function TabFunctions:CreateCustomElementPanel()
local CustomPanel = Instance.new("Frame")
CustomPanel.Name = "CustomElementPanel"
CustomPanel.BackgroundColor3 = Color3.fromRGB(15, 15, 15)
CustomPanel.BackgroundTransparency = 0.25
CustomPanel.BorderSizePixel = 0
CustomPanel.Size = UDim2.fromScale(1, 1)
CustomPanel.Position = UDim2.fromScale(0, 0)
CustomPanel.Parent = ElementsScrolling
local PanelCorner = Instance.new("UICorner")
PanelCorner.CornerRadius = UDim.new(0, 12)
PanelCorner.Parent = CustomPanel
local PanelStroke = Instance.new("UIStroke")
PanelStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
PanelStroke.LineJoinMode = Enum.LineJoinMode.Round
PanelStroke.Color = Color3.fromRGB(60, 60, 70)
PanelStroke.Thickness = 1
PanelStroke.Transparency = 0.5
PanelStroke.Parent = CustomPanel
local PanelPadding = Instance.new("UIPadding")
PanelPadding.PaddingTop = UDim.new(0, 20)
PanelPadding.PaddingBottom = UDim.new(0, 20)
PanelPadding.PaddingLeft = UDim.new(0, 20)
PanelPadding.PaddingRight = UDim.new(0, 20)
PanelPadding.Parent = CustomPanel
return CustomPanel
end
function TabFunctions:Section(Settings)
local SectionFunctions = {}
local Section = Instance.new("Frame")
Section.Name = "Section"
Section.AutomaticSize = Enum.AutomaticSize.Y
Section.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Section.BackgroundTransparency = 0.98
Section.BorderColor3 = Color3.fromRGB(0, 0, 0)
Section.BorderSizePixel = 0
Section.Position = UDim2.fromScale(0, 6.78e-08)
Section.Size = UDim2.fromScale(1, 0)
Section.ClipsDescendants = true
Section.Parent = Settings.Side == "Left" and Left or Right
local SectionPropertiesFolder = Instance.new("Folder")
SectionPropertiesFolder.Name = "SectionPropertiesFolder"
SectionPropertiesFolder.Parent = Section
local SectionToggleVisible = Instance.new("ImageButton")
SectionToggleVisible.Name = "SectionToggleVisible"
SectionToggleVisible.Image = Assets.ButtonImage
SectionToggleVisible.ImageColor3 = Color3.fromRGB(87, 86, 86)
SectionToggleVisible.AutoButtonColor = false
SectionToggleVisible.AnchorPoint = Vector2.new(1, 0.5)
SectionToggleVisible.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
SectionToggleVisible.BackgroundTransparency = 1
SectionToggleVisible.BorderColor3 = Color3.fromRGB(0, 0, 0)
SectionToggleVisible.BorderSizePixel = 0
SectionToggleVisible.Size = UDim2.fromOffset(20, 20)
SectionToggleVisible.ImageTransparency = 0
SectionToggleVisible.ZIndex = 100
SectionToggleVisible.Rotation = 90
SectionToggleVisible.Position = UDim2.new(1, 0, 0, 12.5)
SectionToggleVisible.Parent = SectionPropertiesFolder
local SavedElements = false
SectionToggleVisible.MouseButton1Click:Connect(function()
if SavedElements then
for _, Element in pairs(SavedElements) do
if Element:IsA("Frame") then
Element.Visible = true
end
end
SavedElements = false
Utility:QuickTween(SectionToggleVisible, {Rotation = 90})
else
SavedElements = {}
local DetectedHeaders = 0
for _, Element in pairs(Section:GetChildren()) do
if Element:IsA("Frame") and Element.Visible and Element.Name ~= "Header" then
SavedElements[Element] = Element
Element.Visible = false
elseif Element:IsA("Frame") and Element.Visible and Element.Name == "Header" then
DetectedHeaders += 1
if DetectedHeaders == 2 then
SavedElements[Element] = Element
Element.Visible = false
end
end
end
Utility:QuickTween(SectionToggleVisible, {Rotation = 0})
end
end)
local SectionUICorner = Instance.new("UICorner")
SectionUICorner.Name = "SectionUICorner"
SectionUICorner.Parent = Section
local SectionUIStroke = Instance.new("UIStroke")
SectionUIStroke.Name = "SectionUIStroke"
SectionUIStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
SectionUIStroke.Color = Color3.fromRGB(255, 255, 255)
SectionUIStroke.Transparency = 0.95
SectionUIStroke.Parent = Section
local SectionUIListLayout = Instance.new("UIListLayout")
SectionUIListLayout.Name = "SectionUIListLayout"
SectionUIListLayout.Padding = UDim.new(0, 16)
SectionUIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
SectionUIListLayout.Parent = Section
local SectionUIPadding = Instance.new("UIPadding")
SectionUIPadding.Name = "SectionUIPadding"
SectionUIPadding.PaddingBottom = UDim.new(0, 24)
SectionUIPadding.PaddingLeft = UDim.new(0, 22)
SectionUIPadding.PaddingRight = UDim.new(0, 20)
SectionUIPadding.PaddingTop = UDim.new(0, 24)
SectionUIPadding.Parent = Section
local ComponentDirectory = "Wave/UserInterface/Components"
for Name, Component in pairs(Utility:ListManager(ComponentDirectory)) do
Utility:LoadFile(Component)({
Section = Section,
WindowFunctions = WindowFunctions,
WaveLibraryUI = WaveLibraryUI,
WaveLibrary = WaveLibrary,
SectionFunctions = SectionFunctions,
BaseUIScale = BaseUIScale,
Base = Base,
ComponentManager = ComponentManager,
TabName = TabFunctions.Settings.Name
})
end
function SectionFunctions:Replication()
if Settings.Replication then
local ReplicationGame, ReplicationSection = Settings.Replication.GameDirectory, Settings.Replication.SectionName
Utility:LoadFile("Games/Game Features/" .. ReplicationGame .. "/" .. ReplicationSection .. ".lua")
return true
end
return false
end
function SectionFunctions:DisplayTitle()
if Settings.DisplayTitle then
SectionFunctions:Header({Name = Settings.DisplayTitle})
end
return Settings.DisplayTitle
end
return SectionFunctions
end
local function TabSelection()
local EaseTime = 0.25
local EaseStyle = Enum.EasingStyle.Quad
local EaseDirection = Enum.EasingDirection.Out
local VerticalOffset = 80
if WaveLibrary.TabSettings.CurrentTab then
WaveLibrary.TabSettings.CurrentTab.Parent = nil
end
if Settings.OnTouchCallback then
Settings.OnTouchCallback()
end
for Switcher, TabInfo in pairs(WaveLibrary.Tabs) do
Utility:PropertyTween(Switcher, TweenInfo.new(EaseTime, EaseStyle, EaseDirection), {
BackgroundTransparency = (Switcher == TabSwitcher and 0.98 or 1)
}):Play()
if TabInfo.TabIndicator then
TabInfo.TabIndicator.BackgroundColor3 = WindowFunctions:GetCurrentThemeAttribute("AccentPrimary")
Utility:PropertyTween(TabInfo.TabIndicator, TweenInfo.new(EaseTime, EaseStyle, EaseDirection), {
BackgroundTransparency = (Switcher == TabSwitcher and 0.5 or 1)
}):Play()
end
if TabInfo.TabStroke then
Utility:PropertyTween(TabInfo.TabStroke, TweenInfo.new(EaseTime, EaseStyle, EaseDirection), {
Transparency = (Switcher == TabSwitcher and 0.95 or 1)
}):Play()
end
if TabInfo.SwitcherImage then
Utility:PropertyTween(TabInfo.SwitcherImage, TweenInfo.new(EaseTime, EaseStyle, EaseDirection), {
ImageTransparency = (Switcher == TabSwitcher and 0.1 or 0.5)
}):Play()
end
if TabInfo.SwitcherName then
Utility:PropertyTween(TabInfo.SwitcherName, TweenInfo.new(EaseTime, EaseStyle, EaseDirection), {
TextTransparency = (Switcher == TabSwitcher and 0.1 or 0.5)
}):Play()
end
end
local TabContent = WaveLibrary.Tabs[TabSwitcher].TabContent
local function StoreCurrentState(Element)
if Element:IsA("GuiObject") then
Element:SetAttribute("CurrentBackgroundTransparency", Element.BackgroundTransparency)
if Element:IsA("TextLabel") or Element:IsA("TextButton") or Element:IsA("TextBox") then
Element:SetAttribute("CurrentTextTransparency", Element.TextTransparency)
end
if Element:IsA("ImageLabel") or Element:IsA("ImageButton") then
Element:SetAttribute("CurrentImageTransparency", Element.ImageTransparency)
end
local Stroke = Element:FindFirstChildOfClass("UIStroke")
if Stroke then
Element:SetAttribute("CurrentStrokeTransparency", Stroke.Transparency)
end
for _, Child in pairs(Element:GetChildren()) do
StoreCurrentState(Child)
end
end
end
if not TabContent:GetAttribute("OriginalStateStored") then
local function StoreOriginalTransparencies(Element)
if Element:IsA("GuiObject") then
Element:SetAttribute("OriginalBackgroundTransparency", Element.BackgroundTransparency)
if Element:IsA("TextLabel") or Element:IsA("TextButton") or Element:IsA("TextBox") then
Element:SetAttribute("OriginalTextTransparency", Element.TextTransparency)
end
if Element:IsA("ImageLabel") or Element:IsA("ImageButton") then
Element:SetAttribute("OriginalImageTransparency", Element.ImageTransparency)
end
local Stroke = Element:FindFirstChildOfClass("UIStroke")
if Stroke then
Element:SetAttribute("OriginalStrokeTransparency", Stroke.Transparency)
end
for _, Child in pairs(Element:GetChildren()) do
StoreOriginalTransparencies(Child)
end
end
end
StoreOriginalTransparencies(TabContent)
TabContent:SetAttribute("OriginalStateStored", true)
else
StoreCurrentState(TabContent)
end
local function SetFullyTransparent(Element)
if Element:IsA("GuiObject") then
Element.BackgroundTransparency = 1
if Element:IsA("TextLabel") or Element:IsA("TextButton") or Element:IsA("TextBox") then
Element.TextTransparency = 1
end
if Element:IsA("ImageLabel") or Element:IsA("ImageButton") then
Element.ImageTransparency = 1
end
local Stroke = Element:FindFirstChildOfClass("UIStroke")
if Stroke and not Element:FindFirstAncestor("CheckBoxButton") and not Element:FindFirstAncestor("CheckBox") then
Stroke.Transparency = 1
end
for _, Child in pairs(Element:GetChildren()) do
SetFullyTransparent(Child)
end
end
end
TabContent.Position = UDim2.new(0, 0, 0, VerticalOffset)
SetFullyTransparent(TabContent)
TabContent.Parent = Content
if WindowFunctions:GetCurrentTheme() then
WindowFunctions:ApplyCurrentTheme()
end
local function AnimateToCurrentTransparency(Element)
if Element:IsA("GuiObject") then
local CurrentTheme = WindowFunctions:GetCurrentTheme()
local ThemeData = CurrentTheme and WindowFunctions:GetTheme(CurrentTheme)
local function GetThemeValue(ElementType, PropertyType)
if not ThemeData then return nil end
local ThemeMapping = {
Base = {
BackgroundTransparency = ThemeData.BackgroundTransparency,
BackgroundColor3 = ThemeData.Background
},
Terminal = {
BackgroundTransparency = ThemeData.BackgroundTransparency,
BackgroundColor3 = ThemeData.Background
},
Sidebar = {
BackgroundTransparency = ThemeData.SidebarTransparency,
BackgroundColor3 = ThemeData.SidebarColor
},
Section = {
BackgroundColor3 = ThemeData.Foreground
},
Surface = {
BackgroundColor3 = ThemeData.Surface,
BackgroundTransparency = ThemeData.SurfaceTransparency
},
Title = {
TextColor3 = ThemeData.HeaderColor,
TextTransparency = ThemeData.HeaderTransparency
},
ParagraphHeader = {
TextColor3 = ThemeData.HeaderColor,
TextTransparency = ThemeData.HeaderTransparency
},
HeaderText = {
TextColor3 = ThemeData.HeaderColor,
TextTransparency = ThemeData.HeaderTransparency
},
Wallpaper = {
ImageTransparency = ThemeData.WallpaperEnabled and ThemeData.WallpaperTransparency or 1
},
OutputWallpaper = {
ImageTransparency = ThemeData.WallpaperEnabled and ThemeData.WallpaperTransparency or 1
}
}
local ElementTheme = ThemeMapping[Element.Name]
return ElementTheme and ElementTheme[PropertyType]
end
local TargetBackgroundTransparency = GetThemeValue(Element.Name, "BackgroundTransparency")
if TargetBackgroundTransparency == nil then
local CurrentBackgroundTransparency = Element:GetAttribute("CurrentBackgroundTransparency")
local OriginalBackgroundTransparency = Element:GetAttribute("OriginalBackgroundTransparency")
TargetBackgroundTransparency = CurrentBackgroundTransparency or OriginalBackgroundTransparency
end
if TargetBackgroundTransparency ~= nil then
local Properties = {
BackgroundTransparency = TargetBackgroundTransparency
}
if Element:IsA("TextLabel") or Element:IsA("TextButton") or Element:IsA("TextBox") then
local TargetTextTransparency = nil
if Element.Name == "Title" or Element.Name == "ParagraphHeader" or Element.Name == "HeaderText" then
TargetTextTransparency = ThemeData and ThemeData.HeaderTransparency
elseif Element:IsA("TextBox") then
TargetTextTransparency = ThemeData and ThemeData.InputFieldTransparency
end
if TargetTextTransparency == nil then
local CurrentTextTransparency = Element:GetAttribute("CurrentTextTransparency")
local OriginalTextTransparency = Element:GetAttribute("OriginalTextTransparency")
TargetTextTransparency = CurrentTextTransparency or OriginalTextTransparency
end
if TargetTextTransparency ~= nil then
Properties.TextTransparency = TargetTextTransparency
end
local ThemeTextColor = GetThemeValue(Element.Name, "TextColor3")
if ThemeTextColor then
Properties.TextColor3 = ThemeTextColor
end
end
if Element:IsA("ImageLabel") or Element:IsA("ImageButton") then
local TargetImageTransparency = GetThemeValue(Element.Name, "ImageTransparency")
if TargetImageTransparency == nil then
local CurrentImageTransparency = Element:GetAttribute("CurrentImageTransparency")
local OriginalImageTransparency = Element:GetAttribute("OriginalImageTransparency")
TargetImageTransparency = CurrentImageTransparency or OriginalImageTransparency
end
if TargetImageTransparency ~= nil then
Properties.ImageTransparency = TargetImageTransparency
end
end
Utility:PropertyTween(Element, TweenInfo.new(EaseTime, EaseStyle, EaseDirection), Properties):Play()
local Stroke = Element:FindFirstChildOfClass("UIStroke")
if Stroke and not Stroke:FindFirstAncestor("CheckBoxButton") then
local TargetStrokeTransparency = ThemeData and ThemeData.StrokeTransparency
if TargetStrokeTransparency == nil then
local CurrentStrokeTransparency = Element:GetAttribute("CurrentStrokeTransparency")
local OriginalStrokeTransparency = Element:GetAttribute("OriginalStrokeTransparency")
TargetStrokeTransparency = CurrentStrokeTransparency or OriginalStrokeTransparency
end
if TargetStrokeTransparency ~= nil then
local StrokeProperties = {
Transparency = TargetStrokeTransparency
}
if ThemeData and ThemeData.BorderColor then
StrokeProperties.Color = ThemeData.BorderColor
end
Utility:PropertyTween(Stroke, TweenInfo.new(EaseTime, EaseStyle, EaseDirection), StrokeProperties):Play()
end
end
end
for _, Child in pairs(Element:GetChildren()) do
AnimateToCurrentTransparency(Child)
end
end
end
Utility:PropertyTween(TabContent, TweenInfo.new(EaseTime, EaseStyle, EaseDirection), {
Position = UDim2.new(0, 0, 0, 63)
}):Play()
AnimateToCurrentTransparency(TabContent)
WaveLibrary.TabSettings.CurrentTab = TabContent
CurrentTab.Text = Settings.Name
local Widith = CurrentTab.TextBounds.X
local Margin = 8
CurrentTabDivider.Size = UDim2.new(0, math.max(0, Widith - Margin), 0, 1)
CurrentTabDivider.Visible = CurrentTab.Text ~= "" and true or false
SearchTab.Visible = true
end
TabSwitcher.MouseButton1Click:Connect(function()
if TabSwitcher:GetAttribute("Debounce") or WaveLibrary.TabSettings.CurrentTab == nil then
return
end
TabSwitcher:SetAttribute("Debounce", true)
TabSelection()
Maid:GiveTask(task.delay(0.5, function()
TabSwitcher:SetAttribute("Debounce", false)
end))
end)
function TabFunctions:Select()
TabSelection()
end
function TabFunctions:RetrieveFirstTab()
return Settings.Name == WaveLibrary.TabSettings.InitializeTab
end
local CurrentTheme = "Default"
local LivePreviewEnabled = true
function WindowFunctions:Initialize()
Themes.Custom = table.clone(Themes.Default)
self:LoadStartupTheme()
end
local SettingsDirectory = "Wave/UserInterface/Imports/Settings"
for Name, Component in pairs(Utility:ListManager(SettingsDirectory)) do
Utility:LoadFile(Component)({
WindowFunctions = WindowFunctions,
WaveLibraryUI = WaveLibraryUI,
WaveLibrary = WaveLibrary,
TabFunctions = TabFunctions,
ThemeColorSchemes = ThemeColorSchemes,
ThemeTemplates = ThemeTemplates,
PerformanceModes = PerformanceModes,
ThemeUtility = ThemeUtility,
Themes = Themes,
Subtitle = Subtitle,
Exit = Exit,
Minimize = Minimize
})
end
WaveLibrary.Tabs[TabSwitcher] = {
TabContent = Elements1,
TabStroke = TabSwitcherUIStroke,
SwitcherImage = TabImage,
SwitcherName = TabSwitcherName,
TabIndicator = TabSwitcherIndicator,
Select = TabSelection
}
return TabFunctions
end
return SectionFunctions
end
function WindowFunctions:SelectTab(TabName)
for TabSwitcher, TabInfo in pairs(WaveLibrary.Tabs) do
if TabInfo.SwitcherName and TabInfo.SwitcherName.Text == TabName then
-- Already showing this tab? nothing to do.
if WaveLibrary.TabSettings.CurrentTab == TabInfo.TabContent then
return true
end
if TabSwitcher:GetAttribute("Debounce") then
return false, "Tab is debounced"
end
-- Delegate to the exact path a real click uses: fade animation,
-- active-tab highlight, breadcrumb title and the search bar all
-- stay in sync.
if TabInfo.Select then
TabSwitcher:SetAttribute("Debounce", true)
TabInfo.Select()
Maid:GiveTask(task.delay(0.5, function()
TabSwitcher:SetAttribute("Debounce", false)
end))
return true
end
return false, "Tab has no selector"
end
end
return false, "Tab not found: " .. tostring(TabName)
end
function WindowFunctions:BuildTree()
local PathTree = {
WaveLibrary.Folder,
WaveLibrary.Folder .. "/settings",
WaveLibrary.Folder .. "/settings/startup",
}
for Increment = 1, #PathTree do
local String = PathTree[Increment]
if not isfolder(String) then
makefolder(String)
end
end
end
function WindowFunctions:CreateOption(Requirements, Option)
local OptionInstance = Instance.new("Frame")
OptionInstance.AutomaticSize = Enum.AutomaticSize.Y
OptionInstance.Name = Option.Settings.Name
OptionInstance.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
OptionInstance.Visible = false
OptionInstance.BackgroundTransparency = 1
OptionInstance.BorderSizePixel = 0
OptionInstance.Size = UDim2.new(1, 0, 0, 20)
OptionInstance.Parent = Requirements.HeaderSearchOptions
local OptionIcon = Instance.new("ImageLabel")
OptionIcon.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
OptionIcon.Position = UDim2.new(0, 5, 0.5, 0)
OptionIcon.AnchorPoint = Vector2.new(0, 0.25)
OptionIcon.Name = "OptionIcon"
OptionIcon.BackgroundTransparency = 1
OptionIcon.BorderSizePixel = 0
OptionIcon.Size = UDim2.new(0, 17.5, 0, 17.5)
OptionIcon.Image = Assets["Search" .. Option.Class]
OptionIcon.Parent = OptionInstance
local OptionDetails = Instance.new("TextLabel")
OptionDetails.FontFace = Font.new(Assets.InterFont)
OptionDetails.Name = "OptionDetails"
OptionDetails.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
OptionDetails.AnchorPoint = Vector2.new(0, 0.25)
OptionDetails.Position = UDim2.new(0, 30, 0.5, 0)
OptionDetails.BackgroundTransparency = 1
OptionDetails.BorderSizePixel = 0
OptionDetails.Size = UDim2.new(1, -30, 0, 20)
OptionDetails.TextTruncate = Enum.TextTruncate.SplitWord
OptionDetails.TextSize = 10
OptionDetails.RichText = true
OptionDetails.Text = "" .. Option.Settings.Name .. " | " .. Option:ReturnClass() .. " - " .. Option:ReturnTab() .. ""
OptionDetails.TextXAlignment = Enum.TextXAlignment.Left
OptionDetails.Parent = OptionInstance
local OptionButton = Instance.new("TextButton")
OptionButton.Name = "OptionButton"
OptionButton.BackgroundTransparency = 1
OptionButton.BorderSizePixel = 0
OptionButton.Size = UDim2.new(1, 0, 1, 0)
OptionButton.Position = UDim2.new(0, 0, 0, 0)
OptionButton.Text = ""
OptionButton.ZIndex = 5
OptionButton.Parent = OptionInstance
local function CreateHoverAnimation()
local IconTween = Services.TweenService:Create(
OptionIcon,
TweenInfo.new(0.2, Enum.EasingStyle.Back, Enum.EasingDirection.Out),
{Size = UDim2.new(0, 22, 0, 22)}
)
local TextTween = Services.TweenService:Create(
OptionDetails,
TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),
{Position = UDim2.new(0, 35, 0.5, 0)}
)
return {IconTween, TextTween}
end
local function CreateUnhoverAnimation()
local IconTween = Services.TweenService:Create(
OptionIcon,
TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),
{Size = UDim2.new(0, 20, 0, 20)}
)
local TextTween = Services.TweenService:Create(
OptionDetails,
TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),
{Position = UDim2.new(0, 30, 0.5, 0)}
)
return {IconTween, TextTween}
end
local function CreateClickAnimation()
local ShrinkTween = Services.TweenService:Create(
OptionInstance,
TweenInfo.new(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),
{Size = UDim2.new(0.98, 0, 0, 18)}
)
local IconShrinkTween = Services.TweenService:Create(
OptionIcon,
TweenInfo.new(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),
{Size = UDim2.new(0, 18, 0, 18)}
)
local FlashTween = Services.TweenService:Create(
OptionInstance,
TweenInfo.new(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),
{BackgroundTransparency = 0.85}
)
ShrinkTween:Play()
IconShrinkTween:Play()
FlashTween:Play()
ShrinkTween.Completed:Connect(function()
local BounceTween = Services.TweenService:Create(
OptionInstance,
TweenInfo.new(0.15, Enum.EasingStyle.Back, Enum.EasingDirection.Out),
{Size = UDim2.new(1, 0, 0, 20)}
)
local IconBounceTween = Services.TweenService:Create(
OptionIcon,
TweenInfo.new(0.15, Enum.EasingStyle.Back, Enum.EasingDirection.Out),
{Size = UDim2.new(0, 22, 0, 22)}
)
BounceTween:Play()
IconBounceTween:Play()
end)
end
OptionButton.MouseEnter:Connect(function()
local Animations = CreateHoverAnimation()
for _, Animation in ipairs(Animations) do
Animation:Play()
end
end)
OptionButton.MouseLeave:Connect(function()
local Animations = CreateUnhoverAnimation()
for _, Animation in ipairs(Animations) do
Animation:Play()
end
end)
OptionButton.MouseButton1Down:Connect(function()
CreateClickAnimation()
end)
OptionButton.MouseButton1Click:Connect(function()
self:SelectTab(Option:ReturnTab())
end)
return OptionInstance
end
function WindowFunctions:EnableStatusHub()
StatusHub.Visible = true
end
function WindowFunctions:DisableStatusHub()
StatusHub.Visible = false
end
function WindowFunctions:SetStatusHubTitle(Name)
StatusTitle.Text = Name or "No Title"
end
function WindowFunctions:AddStatusInfo(StatusName, Value)
local Section = Instance.new("TextLabel")
Section.Name = "StatusSection"
Section.AutomaticSize = Enum.AutomaticSize.Y
Section.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Section.BackgroundTransparency = 0.98
Section.BorderColor3 = Color3.fromRGB(0, 0, 0)
Section.BorderSizePixel = 0
Section.Position = UDim2.fromScale(0, 0)
Section.ClipsDescendants = true
Section.Parent = StatusHandle
local SectionUICorner = Instance.new("UICorner")
SectionUICorner.Name = "SectionUICorner"
SectionUICorner.Parent = Section
local SectionUIStroke = Instance.new("UIStroke")
SectionUIStroke.Name = "SectionUIStroke"
SectionUIStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
SectionUIStroke.Color = Color3.fromRGB(255, 255, 255)
SectionUIStroke.Transparency = 0.95
SectionUIStroke.Parent = Section
Section.FontFace = Font.new(
Assets.InterFont,
Enum.FontWeight.Medium,
Enum.FontStyle.Normal
)
Section.RichText = true
Section.Text = StatusName .. " • " .. tostring(Value)
Section.TextColor3 = Color3.fromRGB(255, 255, 255)
Section.TextSize = 12
Section.TextTransparency = 0
task.defer(function()
Section.Size = UDim2.new(0, Section.TextBounds.X + 15, 0, Section.TextBounds.Y + 5)
end)
end
function WindowFunctions:EditStatusInfo(Flag, Value)
for _, Child in ipairs(StatusHandle:GetChildren()) do
if Child:IsA("TextLabel") and Child.Text:match("^" .. Flag) then
Child.Text = Flag .. " • " .. tostring(Value)
task.defer(function()
Child.Size = UDim2.new(0, Child.TextBounds.X + 15, 0, Child.TextBounds.Y + 5)
end)
return
end
end
end
function WindowFunctions:Notify(Settings)
local NotificationFunctions = {}
local function ThemeAttr(Name, Fallback)
local ok, value = pcall(function()
return WindowFunctions:GetCurrentThemeAttribute(Name)
end)
if ok and value ~= nil then
return value
end
return Fallback
end
local AccentColors = {
None = ThemeAttr("AccentPrimary", Color3.fromRGB(96, 165, 250)),
Info = ThemeAttr("InfoColor", Color3.fromRGB(96, 165, 250)),
Confirm = ThemeAttr("SuccessColor", Color3.fromRGB(74, 222, 128)),
Success = ThemeAttr("SuccessColor", Color3.fromRGB(74, 222, 128)),
Cancel = ThemeAttr("ErrorColor", Color3.fromRGB(248, 113, 113)),
Error = ThemeAttr("ErrorColor", Color3.fromRGB(248, 113, 113)),
Warning = ThemeAttr("WarningColor", Color3.fromRGB(250, 204, 21)),
}
local Glyphs = {
Confirm = "✓", Success = "✓", Cancel = "✕", Error = "✕",
Warning = "!", Info = "i", None = "i",
}
local Accent = AccentColors[Settings.Style] or ThemeAttr("AccentPrimary", Color3.fromRGB(96, 165, 250))
local Glyph = Glyphs[Settings.Style] or "i"
local TextPrimary = ThemeAttr("TextPrimary", Color3.fromRGB(236, 236, 241))
local TextSecondary = ThemeAttr("TextSecondary", Color3.fromRGB(168, 168, 178))
local StrokeTransparency = ThemeAttr("StrokeTransparency", 0.85)
local Notification = Instance.new("Frame")
Notification.Name = "Notification"
Notification.AutomaticSize = Enum.AutomaticSize.Y
Notification.Size = UDim2.fromOffset(Settings.SizeX or 285, 0)
Notification.BackgroundColor3 = ThemeAttr("NotificationColor", Color3.fromRGB(22, 22, 27))
Notification.BackgroundTransparency = 1
Notification.BorderSizePixel = 0
Notification.ClipsDescendants = true
Notification:SetAttribute("NoApplyTheme", true)
Notification.Parent = Notifications
local NotificationUICorner = Instance.new("UICorner")
NotificationUICorner.CornerRadius = UDim.new(0, 12)
NotificationUICorner.Parent = Notification
local NotificationUIStroke = Instance.new("UIStroke")
NotificationUIStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
NotificationUIStroke.Color = ThemeAttr("BorderColor", Color3.fromRGB(255, 255, 255))
NotificationUIStroke.Transparency = 1
NotificationUIStroke.Parent = Notification
local NotificationUIScale = Instance.new("UIScale")
NotificationUIScale.Scale = 0.9
NotificationUIScale.Parent = Notification
local AccentBar = Instance.new("Frame")
AccentBar.Name = "AccentBar"
AccentBar.BackgroundColor3 = Accent
AccentBar.BackgroundTransparency = 1
AccentBar.BorderSizePixel = 0
AccentBar.Position = UDim2.fromScale(0, 0)
AccentBar.Size = UDim2.new(0, 3, 1, 0)
AccentBar:SetAttribute("NoApplyTheme", true)
AccentBar.Parent = Notification
local Content = Instance.new("Frame")
Content.Name = "Content"
Content.BackgroundTransparency = 1
Content.AutomaticSize = Enum.AutomaticSize.Y
Content.Size = UDim2.new(1, 0, 0, 0)
Content.Parent = Notification
local ContentPadding = Instance.new("UIPadding")
ContentPadding.PaddingTop = UDim.new(0, 13)
ContentPadding.PaddingBottom = UDim.new(0, 15)
ContentPadding.PaddingLeft = UDim.new(0, 15)
ContentPadding.PaddingRight = UDim.new(0, 14)
ContentPadding.Parent = Content
local Row = Instance.new("UIListLayout")
Row.FillDirection = Enum.FillDirection.Horizontal
Row.SortOrder = Enum.SortOrder.LayoutOrder
Row.VerticalAlignment = Enum.VerticalAlignment.Top
Row.Padding = UDim.new(0, 11)
Row.Parent = Content
local IconHolder = Instance.new("Frame")
IconHolder.Name = "NotifIcon"
IconHolder.Size = UDim2.fromOffset(26, 26)
IconHolder.BackgroundColor3 = Accent
IconHolder.BackgroundTransparency = 1
IconHolder.BorderSizePixel = 0
IconHolder:SetAttribute("NoApplyTheme", true)
IconHolder.Parent = Content
local IconCorner = Instance.new("UICorner")
IconCorner.CornerRadius = UDim.new(1, 0)
IconCorner.Parent = IconHolder
local IconGlyph = Instance.new("TextLabel")
IconGlyph.Name = "Result_Glyph"
IconGlyph.BackgroundTransparency = 1
IconGlyph.Size = UDim2.fromScale(1, 1)
IconGlyph.Text = Glyph
IconGlyph.TextColor3 = Accent
IconGlyph.TextTransparency = 1
IconGlyph.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.Bold, Enum.FontStyle.Normal)
IconGlyph.TextSize = 15
IconGlyph:SetAttribute("NoApplyTheme", true)
IconGlyph.Parent = IconHolder
local TextColumn = Instance.new("Frame")
TextColumn.Name = "TextColumn"
TextColumn.BackgroundTransparency = 1
TextColumn.AutomaticSize = Enum.AutomaticSize.Y
TextColumn.Size = UDim2.new(1, -37, 0, 0)
TextColumn.LayoutOrder = 1
TextColumn.Parent = Content
local ColumnLayout = Instance.new("UIListLayout")
ColumnLayout.SortOrder = Enum.SortOrder.LayoutOrder
ColumnLayout.Padding = UDim.new(0, 3)
ColumnLayout.Parent = TextColumn
local NotificationTitle = Instance.new("TextLabel")
NotificationTitle.Name = "Result_Title"
NotificationTitle.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.SemiBold, Enum.FontStyle.Normal)
NotificationTitle.RichText = true
NotificationTitle.Text = Settings.Title or "Notification"
NotificationTitle.TextColor3 = TextPrimary
NotificationTitle.TextTransparency = 1
NotificationTitle.TextSize = 14
NotificationTitle.TextXAlignment = Enum.TextXAlignment.Left
NotificationTitle.TextYAlignment = Enum.TextYAlignment.Top
NotificationTitle.TextWrapped = true
NotificationTitle.AutomaticSize = Enum.AutomaticSize.Y
NotificationTitle.BackgroundTransparency = 1
NotificationTitle.Size = UDim2.new(1, -18, 0, 0)
NotificationTitle:SetAttribute("NoApplyTheme", true)
NotificationTitle.Parent = TextColumn
local NotificationDescription = Instance.new("TextLabel")
NotificationDescription.Name = "Result_Description"
NotificationDescription.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.Medium, Enum.FontStyle.Normal)
NotificationDescription.RichText = true
NotificationDescription.Text = Settings.Description or ""
NotificationDescription.TextColor3 = TextSecondary
NotificationDescription.TextTransparency = 1
NotificationDescription.TextSize = 12
NotificationDescription.TextXAlignment = Enum.TextXAlignment.Left
NotificationDescription.TextYAlignment = Enum.TextYAlignment.Top
NotificationDescription.TextWrapped = true
NotificationDescription.AutomaticSize = Enum.AutomaticSize.Y
NotificationDescription.BackgroundTransparency = 1
NotificationDescription.LayoutOrder = 1
NotificationDescription.Size = UDim2.new(1, 0, 0, 0)
NotificationDescription.Visible = (Settings.Description ~= nil and Settings.Description ~= "")
NotificationDescription:SetAttribute("NoApplyTheme", true)
NotificationDescription.Parent = TextColumn
local Close = Instance.new("TextButton")
Close.Name = "Result_Close"
Close.AnchorPoint = Vector2.new(1, 0)
Close.Position = UDim2.new(1, -10, 0, 11)
Close.Size = UDim2.fromOffset(18, 18)
Close.BackgroundTransparency = 1
Close.AutoButtonColor = false
Close.Text = "✕"
Close.TextColor3 = TextSecondary
Close.TextTransparency = 1
Close.TextSize = 12
Close.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.Bold, Enum.FontStyle.Normal)
Close.ZIndex = 3
Close:SetAttribute("NoApplyTheme", true)
Close.Parent = Notification
local ProgressTrack = Instance.new("Frame")
ProgressTrack.Name = "ProgressTrack"
ProgressTrack.AnchorPoint = Vector2.new(0, 1)
ProgressTrack.Position = UDim2.fromScale(0, 1)
ProgressTrack.Size = UDim2.new(1, 0, 0, 3)
ProgressTrack.BackgroundColor3 = Accent
ProgressTrack.BackgroundTransparency = 1
ProgressTrack.BorderSizePixel = 0
ProgressTrack:SetAttribute("NoApplyTheme", true)
ProgressTrack.Parent = Notification
local ProgressFill = Instance.new("Frame")
ProgressFill.Name = "ProgressFill"
ProgressFill.Size = UDim2.fromScale(1, 1)
ProgressFill.BackgroundColor3 = Accent
ProgressFill.BackgroundTransparency = 1
ProgressFill.BorderSizePixel = 0
ProgressFill:SetAttribute("NoApplyTheme", true)
ProgressFill.Parent = ProgressTrack
local Lifetime = Settings.Lifetime == nil and 3 or Settings.Lifetime
local FinalScale = Settings.Scale or 1
local Alive = true
-- Elements faded together on enter / exit (CanvasGroup proved unreliable).
local FadeTargets = {
{ Notification, "BackgroundTransparency", 0.03 },
{ NotificationUIStroke, "Transparency", StrokeTransparency },
{ AccentBar, "BackgroundTransparency", 0.1 },
{ IconHolder, "BackgroundTransparency", 0.82 },
{ IconGlyph, "TextTransparency", 0 },
{ NotificationTitle, "TextTransparency", 0 },
{ NotificationDescription, "TextTransparency", 0.15 },
{ Close, "TextTransparency", 0.3 },
{ ProgressTrack, "BackgroundTransparency", 0.85 },
{ ProgressFill, "BackgroundTransparency", 0.1 },
}
local function Dismiss()
if not Alive then
return
end
Alive = false
Utility:PropertyTween(NotificationUIScale, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), { Scale = 0.9 }):Play()
local last
for _, item in ipairs(FadeTargets) do
last = Utility:PropertyTween(item[1], TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), { [item[2]] = 1 })
last:Play()
end
if last then
last.Completed:Once(function()
Notification:Destroy()
end)
else
Notification:Destroy()
end
end
Close.MouseButton1Click:Connect(function()
Dismiss()
if Settings.Callback then
task.spawn(Settings.Callback)
end
end)
Close.MouseEnter:Connect(function()
if Alive then
Utility:QuickTween(Close, { TextTransparency = 0 })
end
end)
Close.MouseLeave:Connect(function()
if Alive then
Utility:QuickTween(Close, { TextTransparency = 0.3 })
end
end)
local AnimateNotification = task.spawn(function()
Utility:PropertyTween(NotificationUIScale, TweenInfo.new(0.34, Enum.EasingStyle.Back, Enum.EasingDirection.Out), { Scale = FinalScale }):Play()
for _, item in ipairs(FadeTargets) do
Utility:PropertyTween(item[1], TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), { [item[2]] = item[3] }):Play()
end
if Lifetime and Lifetime > 0 then
Utility:PropertyTween(ProgressFill, TweenInfo.new(Lifetime, Enum.EasingStyle.Linear), { Size = UDim2.fromScale(0, 1) }):Play()
task.wait(Lifetime)
Dismiss()
else
ProgressTrack.Visible = false
end
end)
function NotificationFunctions:UpdateTitle(New)
NotificationTitle.Text = New
end
function NotificationFunctions:UpdateDescription(New)
NotificationDescription.Text = New
NotificationDescription.Visible = New ~= nil and New ~= ""
end
function NotificationFunctions:Resize(X)
Notification.Size = UDim2.fromOffset(X or 285, 0)
end
function NotificationFunctions:Cancel()
pcall(task.cancel, AnimateNotification)
Dismiss()
end
return NotificationFunctions
end
function WindowFunctions:Dialog(Settings)
local DialogFunctions = {}
local DialogCanvas = Instance.new("CanvasGroup")
DialogCanvas.Name = "DialogCanvas"
DialogCanvas.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
DialogCanvas.BackgroundTransparency = 1
DialogCanvas.BorderColor3 = Color3.fromRGB(0, 0, 0)
DialogCanvas.BorderSizePixel = 0
DialogCanvas.Size = UDim2.fromScale(1, 1)
DialogCanvas.GroupTransparency = 1
DialogCanvas.Parent = Base
local Dialog = Instance.new("Frame")
Dialog.Name = "Dialog"
Dialog.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
Dialog.BackgroundTransparency = 0.5
Dialog.BorderColor3 = Color3.fromRGB(0, 0, 0)
Dialog.BorderSizePixel = 0
Dialog.Size = UDim2.fromScale(1, 1)
local DialogUICorner = Instance.new("UICorner")
DialogUICorner.Name = "DialogUICorner"
DialogUICorner.CornerRadius = UDim.new(0, 10)
DialogUICorner.Parent = Dialog
local Prompt = Instance.new("Frame")
Prompt.Name = "Prompt"
Prompt.AnchorPoint = Vector2.new(0.5, 0.5)
Prompt.AutomaticSize = Enum.AutomaticSize.Y
Prompt.BackgroundColor3 = Color3.fromRGB(15, 15, 15)
Prompt.BorderColor3 = Color3.fromRGB(0, 0, 0)
Prompt.BorderSizePixel = 0
Prompt.Position = UDim2.fromScale(0.5, 0.5)
Prompt.Size = UDim2.fromOffset(280, 0)
local PromptUIScale = Instance.new("UIScale")
PromptUIScale.Name = "PromptUIScale"
PromptUIScale.Parent = Prompt
PromptUIScale.Scale = 0.95
local GlobalUIStroke = Instance.new("UIStroke")
GlobalUIStroke.Name = "GlobalUIStroke"
GlobalUIStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
GlobalUIStroke.Color = Color3.fromRGB(255, 255, 255)
GlobalUIStroke.Transparency = 0.9
GlobalUIStroke.Parent = Prompt
local GlobalUICorner = Instance.new("UICorner")
GlobalUICorner.Name = "GlobalUICorner"
GlobalUICorner.CornerRadius = UDim.new(0, 10)
GlobalUICorner.Parent = Prompt
local GlobalUIPadding = Instance.new("UIPadding")
GlobalUIPadding.Name = "GlobalUIPadding"
GlobalUIPadding.PaddingBottom = UDim.new(0, 20)
GlobalUIPadding.PaddingLeft = UDim.new(0, 20)
GlobalUIPadding.PaddingRight = UDim.new(0, 20)
GlobalUIPadding.PaddingTop = UDim.new(0, 20)
GlobalUIPadding.Parent = Prompt
local Paragraph = Instance.new("Frame")
Paragraph.Name = "Paragraph"
Paragraph.AutomaticSize = Enum.AutomaticSize.Y
Paragraph.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
Paragraph.BackgroundTransparency = 1
Paragraph.BorderColor3 = Color3.fromRGB(0, 0, 0)
Paragraph.BorderSizePixel = 0
Paragraph.Size = UDim2.new(1, 0, 0, 38)
local ParagraphHeader = Instance.new("TextLabel")
ParagraphHeader.Name = "ParagraphHeader"
ParagraphHeader.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.Medium, Enum.FontStyle.Normal)
ParagraphHeader.RichText = true
ParagraphHeader.Text = Settings.Title
ParagraphHeader.TextColor3 = Color3.fromRGB(255, 255, 255)
ParagraphHeader.TextSize = 18
ParagraphHeader.TextTransparency = 0.4
ParagraphHeader.TextWrapped = true
ParagraphHeader.AutomaticSize = Enum.AutomaticSize.Y
ParagraphHeader.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
ParagraphHeader.BackgroundTransparency = 1
ParagraphHeader.BorderColor3 = Color3.fromRGB(0, 0, 0)
ParagraphHeader.BorderSizePixel = 0
ParagraphHeader.Size = UDim2.fromScale(1, 0)
ParagraphHeader.Parent = Paragraph
local ParagraphLayout = Instance.new("UIListLayout")
ParagraphLayout.Name = "ParagraphLayout"
ParagraphLayout.Padding = UDim.new(0, 15)
ParagraphLayout.SortOrder = Enum.SortOrder.LayoutOrder
ParagraphLayout.Parent = Paragraph
local ParagraphBody = Instance.new("TextLabel")
ParagraphBody.Name = "ParagraphBody"
ParagraphBody.FontFace = Font.new(Assets.InterFont)
ParagraphBody.RichText = true
ParagraphBody.Text = Settings.Description
ParagraphBody.TextColor3 = Color3.fromRGB(255, 255, 255)
ParagraphBody.TextSize = 14
ParagraphBody.TextTransparency = 0.5
ParagraphBody.TextWrapped = true
ParagraphBody.AutomaticSize = Enum.AutomaticSize.Y
ParagraphBody.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
ParagraphBody.BackgroundTransparency = 1
ParagraphBody.BorderColor3 = Color3.fromRGB(0, 0, 0)
ParagraphBody.BorderSizePixel = 0
ParagraphBody.LayoutOrder = 1
ParagraphBody.Size = UDim2.fromScale(1, 0)
ParagraphBody.Parent = Paragraph
Paragraph.Parent = Prompt
local Interactions = Instance.new("Frame")
Interactions.Name = "Interactions"
Interactions.AutomaticSize = Enum.AutomaticSize.Y
Interactions.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
Interactions.BackgroundTransparency = 1
Interactions.BorderColor3 = Color3.fromRGB(0, 0, 0)
Interactions.BorderSizePixel = 0
Interactions.LayoutOrder = 1
Interactions.Size = UDim2.fromScale(1, 0)
local InteractionLayout = Instance.new("UIListLayout")
InteractionLayout.Name = "InteractionLayout"
InteractionLayout.Padding = UDim.new(0, 10)
InteractionLayout.SortOrder = Enum.SortOrder.LayoutOrder
InteractionLayout.Parent = Interactions
local InteractionPadding = Instance.new("UIPadding")
InteractionPadding.Name = "InteractionPadding"
InteractionPadding.PaddingTop = UDim.new(0, 20)
InteractionPadding.Parent = Interactions
Interactions.Parent = Prompt
local PromptLayout = Instance.new("UIListLayout")
PromptLayout.Name = "PromptLayout"
PromptLayout.SortOrder = Enum.SortOrder.LayoutOrder
PromptLayout.Parent = Prompt
Prompt.Parent = Dialog
Dialog.Parent = DialogCanvas
local CanvasIn = Utility:PropertyTween(DialogCanvas, TweenInfo.new(0.1, Enum.EasingStyle.Sine), { GroupTransparency = 0 })
local CanvasOut = Utility:PropertyTween(DialogCanvas, TweenInfo.new(0.1, Enum.EasingStyle.Sine), { GroupTransparency = 1 })
local ScaleIn = Utility:PropertyTween(PromptUIScale, TweenInfo.new(0.1, Enum.EasingStyle.Sine), { Scale = 1 })
local ScaleOut = Utility:PropertyTween(PromptUIScale, TweenInfo.new(0.1, Enum.EasingStyle.Sine), { Scale = 0.95 })
local function DialogIn()
CanvasIn:Play()
ScaleIn:Play()
CanvasIn.Completed:Wait()
Dialog.Parent = Base
end
local function DialogOut()
Dialog.Parent = DialogCanvas
CanvasOut:Play()
ScaleOut:Play()
CanvasOut.Completed:Wait()
DialogCanvas:Destroy()
end
for _, InstanceButton in pairs(Settings.Buttons) do
local Button = Instance.new("TextButton")
Button.Name = "Button"
Button.FontFace = Font.new(Assets.InterFont)
Button.Text = InstanceButton.Name
Button.TextColor3 = Color3.fromRGB(255, 255, 255)
Button.TextSize = 15
Button.TextTransparency = 0.5
Button.TextTruncate = Enum.TextTruncate.AtEnd
Button.AutoButtonColor = false
Button.AutomaticSize = Enum.AutomaticSize.Y
Button.BackgroundColor3 = Color3.fromRGB(25, 25, 25)
Button.BorderColor3 = Color3.fromRGB(0, 0, 0)
Button.BorderSizePixel = 0
Button.Size = UDim2.fromScale(1, 0)
local ButtonPadding = Instance.new("UIPadding")
ButtonPadding.Name = "ButtonPadding"
ButtonPadding.PaddingBottom = UDim.new(0, 9)
ButtonPadding.PaddingLeft = UDim.new(0, 10)
ButtonPadding.PaddingRight = UDim.new(0, 10)
ButtonPadding.PaddingTop = UDim.new(0, 9)
ButtonPadding.Parent = Button
local ButtonUICorner = Instance.new("UICorner")
ButtonUICorner.Name = "ButtonUICorner"
ButtonUICorner.CornerRadius = UDim.new(0, 10)
ButtonUICorner.Parent = Button
Button.Parent = Interactions
local TweenSettings = {
DefaultTransparency = 0,
DefaultTransparency2 = 0.5,
HoverTransparency = 0.3,
HoverTransparency2 = 0.6,
EasingStyle = Enum.EasingStyle.Sine
}
local function ChangeState(State)
if State == "Idle" then
Utility:PropertyTween(Button, TweenInfo.new(0.2, TweenSettings.EasingStyle), {
BackgroundTransparency = TweenSettings.DefaultTransparency,
TextTransparency = TweenSettings.DefaultTransparency2
}):Play()
elseif State == "Hover" then
Utility:PropertyTween(Button, TweenInfo.new(0.2, TweenSettings.EasingStyle), {
BackgroundTransparency = TweenSettings.HoverTransparency,
TextTransparency = TweenSettings.HoverTransparency2
}):Play()
end
end
Button.MouseButton1Click:Connect(function()
if DialogCanvas.GroupTransparency ~= 0 then return end
if InstanceButton.Callback then
InstanceButton.Callback()
end
if WaveLibrary.Unloaded then
return
end
DialogOut()
end)
Button.MouseEnter:Connect(function()
ChangeState("Hover")
end)
Button.MouseLeave:Connect(function()
ChangeState("Idle")
end)
end
DialogIn()
function DialogFunctions:UpdateTitle(New)
ParagraphHeader.Text = New
end
function DialogFunctions:UpdateDescription(New)
ParagraphBody.Text = New
end
function DialogFunctions:Cancel()
DialogOut()
end
WindowFunctions:ApplyCurrentTheme()
return DialogFunctions
end
function WindowFunctions:Encounter(Settings)
local EncounterFunctions = {}
Settings = Settings or {}
local EncounterCanvas = Instance.new("CanvasGroup")
EncounterCanvas.Name = "EncounterCanvas"
EncounterCanvas.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
EncounterCanvas.BackgroundTransparency = 1
EncounterCanvas.BorderColor3 = Color3.fromRGB(0, 0, 0)
EncounterCanvas.BorderSizePixel = 0
EncounterCanvas.Size = UDim2.fromScale(1, 1)
EncounterCanvas.GroupTransparency = 1
EncounterCanvas.Parent = Base
local Encounter = Instance.new("Frame")
Encounter.Name = "Encounter"
Encounter.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
Encounter.BackgroundTransparency = 0.5
Encounter.BorderColor3 = Color3.fromRGB(0, 0, 0)
Encounter.BorderSizePixel = 0
Encounter.Size = UDim2.fromScale(1, 1)
Encounter.Active = true
local EncounterUICorner = Instance.new("UICorner")
EncounterUICorner.Name = "BaseUICorner"
EncounterUICorner.CornerRadius = UDim.new(0, 10)
EncounterUICorner.Parent = Encounter
local ContentContainer = Instance.new("ScrollingFrame")
ContentContainer.Name = "ContentContainer"
ContentContainer.AutomaticCanvasSize = Enum.AutomaticSize.XY
ContentContainer.BackgroundTransparency = 1
ContentContainer.BorderColor3 = Color3.fromRGB(0, 0, 0)
ContentContainer.BorderSizePixel = 0
ContentContainer.Size = UDim2.fromScale(1, 1)
ContentContainer.ScrollBarThickness = 4
ContentContainer.ScrollBarImageColor3 = Color3.fromRGB(255, 255, 255)
ContentContainer.ScrollBarImageTransparency = 0.8
ContentContainer.CanvasSize = UDim2.new(0, 0, 0, 0)
ContentContainer.Active = true
local ContentUIPadding = Instance.new("UIPadding")
ContentUIPadding.Name = "ContentUIPadding"
ContentUIPadding.PaddingBottom = UDim.new(0, Settings.ContainerPaddingBottom or 20)
ContentUIPadding.PaddingLeft = UDim.new(0, Settings.ContainerPaddingLeft or 20)
ContentUIPadding.PaddingRight = UDim.new(0, Settings.ContainerPaddingRight or 20)
ContentUIPadding.PaddingTop = UDim.new(0, Settings.ContainerPaddingTop or 20)
ContentUIPadding.Parent = ContentContainer
local CardsContainer = Instance.new("Frame")
CardsContainer.Name = "CardsContainer"
CardsContainer.AnchorPoint = Vector2.new(0.5, 0.5)
CardsContainer.Position = UDim2.fromScale(0.5, 0.5)
CardsContainer.AutomaticSize = Enum.AutomaticSize.XY
CardsContainer.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
CardsContainer.BackgroundTransparency = 1
CardsContainer.BorderColor3 = Color3.fromRGB(0, 0, 0)
CardsContainer.BorderSizePixel = 0
CardsContainer.Parent = ContentContainer
local UIListLayout = Instance.new("UIListLayout")
UIListLayout.Name = "UIListLayout"
UIListLayout.Padding = UDim.new(0, Settings.CardSpacing or 15)
UIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
UIListLayout.FillDirection = Settings.FillDirection or Enum.FillDirection.Horizontal
UIListLayout.HorizontalAlignment = Settings.HorizontalAlignment or Enum.HorizontalAlignment.Center
UIListLayout.VerticalAlignment = Settings.VerticalAlignment or Enum.VerticalAlignment.Top
UIListLayout.Wraps = true
UIListLayout.Parent = CardsContainer
local CardsContainerPadding = Instance.new("UIPadding")
CardsContainerPadding.Name = "CardsContainerPadding"
CardsContainerPadding.PaddingBottom = UDim.new(0, Settings.CardsPaddingBottom or 0)
CardsContainerPadding.PaddingLeft = UDim.new(0, Settings.CardsPaddingLeft or 0)
CardsContainerPadding.PaddingRight = UDim.new(0, Settings.CardsPaddingRight or 0)
CardsContainerPadding.PaddingTop = UDim.new(0, Settings.CardsPaddingTop or 0)
CardsContainerPadding.Parent = CardsContainer
ContentContainer.Parent = Encounter
Encounter.Parent = EncounterCanvas
Encounter.InputBegan:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 then
EncounterFunctions:Delete()
end
end)
local CanvasIn = Utility:PropertyTween(EncounterCanvas, TweenInfo.new(0.1, Enum.EasingStyle.Sine), { GroupTransparency = 0 })
local CanvasOut = Utility:PropertyTween(EncounterCanvas, TweenInfo.new(0.1, Enum.EasingStyle.Sine), { GroupTransparency = 1 })
local function EncounterIn()
CanvasIn:Play()
CanvasIn.Completed:Wait()
Encounter.Parent = Base
end
local function EncounterOut()
Encounter.Parent = EncounterCanvas
CanvasOut:Play()
CanvasOut.Completed:Wait()
EncounterCanvas:Destroy()
end EncounterIn()
function EncounterFunctions:AddCard(Card)
if typeof(Card) ~= "Instance" then
error("AddCard expects an Instance (GuiObject) as parameter")
end
Card.Parent = CardsContainer
return Card
end
function EncounterFunctions:CreateDefaultCard(CardSettings)
CardSettings = CardSettings or {}
local Card = Instance.new("Frame")
Card.Name = CardSettings.Name or "Card"
Card.Size = CardSettings.Size or UDim2.fromOffset(170, 220)
Card.BackgroundColor3 = CardSettings.BackgroundColor or Color3.fromRGB(25, 25, 25)
Card.BorderColor3 = Color3.fromRGB(0, 0, 0)
Card.BorderSizePixel = 0
local CardUICorner = Instance.new("UICorner")
CardUICorner.CornerRadius = UDim.new(0, 8)
CardUICorner.Parent = Card
local CardUIStroke = Instance.new("UIStroke")
CardUIStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
CardUIStroke.Color = Color3.fromRGB(255, 255, 255)
CardUIStroke.Transparency = 0.95
CardUIStroke.Parent = Card
local CardPadding = Instance.new("UIPadding")
CardPadding.PaddingBottom = UDim.new(0, 10)
CardPadding.PaddingLeft = UDim.new(0, 10)
CardPadding.PaddingRight = UDim.new(0, 10)
CardPadding.PaddingTop = UDim.new(0, 10)
CardPadding.Parent = Card
local CardLayout = Instance.new("UIListLayout")
CardLayout.Padding = UDim.new(0, 8)
CardLayout.SortOrder = Enum.SortOrder.LayoutOrder
CardLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center
CardLayout.Parent = Card
if CardSettings.Image then
local CardImage = Instance.new("ImageLabel")
CardImage.Name = "CardImage"
CardImage.Image = CardSettings.Image
CardImage.ImageColor3 = CardSettings.ImageColor or Color3.fromRGB(255, 255, 255)
CardImage.ImageTransparency = CardSettings.ImageTransparency or 0
CardImage.BackgroundTransparency = 1
CardImage.Size = UDim2.new(1, -20, 0, 80)
CardImage.ScaleType = Enum.ScaleType.Fit
CardImage.Parent = Card
end
if CardSettings.Title then
local CardTitle = Instance.new("TextLabel")
CardTitle.Name = "CardTitle"
CardTitle.FontFace = Font.new(
Assets.InterFont,
Enum.FontWeight.Medium,
Enum.FontStyle.Normal
)
CardTitle.Text = CardSettings.Title
CardTitle.TextColor3 = Color3.fromRGB(255, 255, 255)
CardTitle.TextSize = 16
CardTitle.TextTransparency = 0.3
CardTitle.TextWrapped = true
CardTitle.BackgroundTransparency = 1
CardTitle.Size = UDim2.new(1, 0, 0, 20)
CardTitle.LayoutOrder = 1
CardTitle.Parent = Card
end
if CardSettings.Description then
local CardDescription = Instance.new("TextLabel")
CardDescription.Name = "CardDescription"
CardDescription.FontFace = Font.new(Assets.InterFont)
CardDescription.Text = CardSettings.Description
CardDescription.TextColor3 = Color3.fromRGB(255, 255, 255)
CardDescription.TextSize = 13
CardDescription.TextTransparency = 0.5
CardDescription.TextWrapped = true
CardDescription.BackgroundTransparency = 1
CardDescription.AutomaticSize = Enum.AutomaticSize.Y
CardDescription.Size = UDim2.fromScale(1, 0)
CardDescription.LayoutOrder = 2
CardDescription.Parent = Card
end
if CardSettings.ButtonText then
local CardButton = Instance.new("TextButton")
CardButton.Name = "CardButton"
CardButton.FontFace = Font.new(Assets.InterFont)
CardButton.Text = CardSettings.ButtonText
CardButton.TextColor3 = Color3.fromRGB(255, 255, 255)
CardButton.TextSize = 14
CardButton.TextTransparency = 0.4
CardButton.AutoButtonColor = false
CardButton.BackgroundColor3 = Color3.fromRGB(35, 35, 35)
CardButton.BorderSizePixel = 0
CardButton.Size = UDim2.new(1, 0, 0, 30)
CardButton.LayoutOrder = 3
local ButtonUICorner = Instance.new("UICorner")
ButtonUICorner.CornerRadius = UDim.new(0, 6)
ButtonUICorner.Parent = CardButton
CardButton.Parent = Card
CardButton.MouseButton1Click:Connect(function()
if CardSettings.Callback then
CardSettings.Callback()
end
end)
CardButton.MouseEnter:Connect(function()
Utility:PropertyTween(CardButton, TweenInfo.new(0.2, Enum.EasingStyle.Sine), {
BackgroundColor3 = Color3.fromRGB(45, 45, 45)
}):Play()
end)
CardButton.MouseLeave:Connect(function()
Utility:PropertyTween(CardButton, TweenInfo.new(0.2, Enum.EasingStyle.Sine), {
BackgroundColor3 = Color3.fromRGB(35, 35, 35)
}):Play()
end)
end
Card.MouseEnter:Connect(function()
Utility:PropertyTween(Card, TweenInfo.new(0.2, Enum.EasingStyle.Sine), {
BackgroundTransparency = 0.1
}):Play()
Utility:PropertyTween(CardUIStroke, TweenInfo.new(0.2, Enum.EasingStyle.Sine), {
Transparency = 0.9
}):Play()
end)
Card.MouseLeave:Connect(function()
Utility:PropertyTween(Card, TweenInfo.new(0.2, Enum.EasingStyle.Sine), {
BackgroundTransparency = 0
}):Play()
Utility:PropertyTween(CardUIStroke, TweenInfo.new(0.2, Enum.EasingStyle.Sine), {
Transparency = 0.95
}):Play()
end)
return Card
end
function EncounterFunctions:Delete()
EncounterOut()
end
return EncounterFunctions
end
function WindowFunctions:SetNotificationsState(State)
Notifications.Visible = State
end
function WindowFunctions:GetNotificationsState(State)
return Notifications.Visible
end
function WindowFunctions:SetWindowState(State)
WaveLibrary.WindowState = State
end
function WindowFunctions:SetState(State)
WaveLibrary.WindowState = State
Base.Visible = State
end
function WindowFunctions:GetState()
return WaveLibrary.WindowState
end
local InformationPanel = Instance.new("TextButton")
InformationPanel.Name = "InformationResult"
InformationPanel.AnchorPoint = Vector2.new(0.5, 0.5)
InformationPanel.BackgroundColor3 = Color3.fromRGB(15, 15, 15)
InformationPanel.BackgroundTransparency = WaveLibrary.AcrylicBlur and 0.05 or 0
InformationPanel.BorderColor3 = Color3.fromRGB(0, 0, 0)
InformationPanel.BorderSizePixel = 0
InformationPanel.Position = UDim2.fromScale(0.5, -0.25)
InformationPanel.Size = UDim2.fromOffset(460, 55)
InformationPanel.Parent = WaveLibraryUI
InformationPanel.FontFace = Font.new(Assets.InterFont)
InformationPanel.RichText = true
InformationPanel.TextSize = 18
InformationPanel.Text = ""
InformationPanel.TextTruncate = Enum.TextTruncate.SplitWord
InformationPanel.TextColor3 = Color3.fromRGB(255, 255, 255)
InformationPanel.Visible = false
local InformationUIStroke = Instance.new("UIStroke")
InformationUIStroke.Name = "InformationUIStroke"
InformationUIStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
InformationUIStroke.Color = Color3.fromRGB(255, 255, 255)
InformationUIStroke.Transparency = 0.9
InformationUIStroke.Parent = InformationPanel
local InformationUICorner = Instance.new("UICorner")
InformationUICorner.Name = "InformationUICorner"
InformationUICorner.CornerRadius = UDim.new(0, 50)
InformationUICorner.Parent = InformationPanel
local InformationWallpaper = Instance.new("ImageLabel")
InformationWallpaper.Name = "InformationWallpaper"
InformationWallpaper.Image = Assets.StyleOneWallpaper
InformationWallpaper.Size = UDim2.new(1, 0, 1, 0)
InformationWallpaper.Position = UDim2.new(0, 0, 0, 0)
InformationWallpaper.BackgroundTransparency = 1
InformationWallpaper.ImageTransparency = 0.65
InformationWallpaper.ImageColor3 = Color3.fromRGB(32, 32, 32)
InformationWallpaper.ScaleType = Enum.ScaleType.Crop
InformationWallpaper.Parent = InformationPanel
local InformationLabel = Instance.new("TextLabel")
InformationLabel.Name = "InformationWallpaper"
InformationLabel.BackgroundColor3 = Color3.fromRGB(15, 15, 15)
InformationLabel.BackgroundTransparency = WaveLibrary.AcrylicBlur and 0.05 or 0
InformationLabel.BorderColor3 = Color3.fromRGB(0, 0, 0)
InformationLabel.BorderSizePixel = 0
InformationLabel.FontFace = Font.new(Assets.InterFont)
InformationLabel.RichText = true
InformationLabel.TextSize = 18
InformationLabel.Text = ""
InformationLabel.TextTruncate = Enum.TextTruncate.SplitWord
InformationLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
InformationLabel.Visible = true
InformationLabel.Size = UDim2.new(1, 0, 1, 0)
InformationLabel.Position = UDim2.new(0, 0, 0, 0)
InformationLabel.BackgroundTransparency = 1
InformationLabel.ZIndex = 5
InformationLabel.Parent = InformationPanel
local InformationWallpaperUICorner = Instance.new("UICorner")
InformationWallpaperUICorner.Name = "WallpaperUICorner"
InformationWallpaperUICorner.CornerRadius = UDim.new(0, 50)
InformationWallpaperUICorner.Parent = InformationWallpaper
function WindowFunctions:NotifyInformation(Message, Duration)
InformationLabel.Text = Message or "No Message Shown."
InformationPanel.Visible = true
Utility:PropertyTween(InformationPanel, TweenInfo.new(0.75, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {
Position = UDim2.fromScale(0.5, 0.05)
}):Play()
if Duration then
task.delay(Duration, function()
Utility:PropertyTween(InformationPanel, TweenInfo.new(1, Enum.EasingStyle.Back, Enum.EasingDirection.In), {
Position = UDim2.fromScale(0.5, -0.25)
}):Play()
end)
task.delay(Duration + 1, function()
InformationPanel.Visible = false
end)
end
end;
function WindowFunctions:SubWindowsUnload()
for _, SubWindow in pairs(SubWindows) do
SubWindow:Unload()
end
end
function WindowFunctions:Unload()
task.spawn(function()
getgenv().QueuedTeleport = nil
clearteleportqueue()
self:SubWindowsUnload()
for _, Item in pairs(WaveLibrary.Options) do
if Item.Class == "Toggle" and Item:GetState() and not Item.Settings.Default and not Item.Settings.GlobalSetting then
Item.Settings.Callback(false)
end
end
ComponentManager:Unload()
if OnUnloadCallback then
OnUnloadCallback()
end
for NameOfConnection, Item in pairs(Maid) do
if typeof(Item) == "RBXScriptConnection" then
Item:Disconnect()
elseif typeof(Item) == "thread" then
task.cancel(Item)
elseif typeof(Item) == "function" then
Item()
end
Item = nil
end
Maid:DoCleaning()
WaveLibraryUI:Destroy()
WaveLibrary.Unloaded = true
end)
end
function WindowFunctions.OnUnloaded(Callback)
OnUnloadCallback = Callback
end
local MenuKeybind = Settings.Keybind or Enum.KeyCode.RightControl
local KeybindFile = WaveLibrary.Folder .. "/settings/startup/KeybindSaved.wave"
if isfile(KeybindFile) then
local KeybindDetected = readfile(KeybindFile)
MenuKeybind = Enum.KeyCode[KeybindDetected]
end
local function ToggleMenu()
local WindowState = not WindowFunctions:GetState()
WindowFunctions:SetState(WindowState)
if getgenv().LockBehaviorBasedOnState then
if WindowState then
Services.UserInputService.MouseBehavior = Enum.MouseBehavior.Default
else
Services.UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
end
end
end
-- Floating toggle button — fallback for when the status bar is disabled (otherwise the
-- status-bar eye is the toggle). Lives in WaveLibraryUI (a sibling of Base), so it stays
-- on screen even when the window is hidden. Drag to move it, tap to show/hide the menu.
if Settings.ToggleButton and not Settings.StatusBar then
local ToggleButton = Instance.new("ImageButton")
ToggleButton.Name = "WaveToggleButton"
ToggleButton.AnchorPoint = Vector2.new(0, 0)
ToggleButton.Position = UDim2.new(0, 16, 0, 92)
ToggleButton.Size = UDim2.fromOffset(40, 40)
ToggleButton.BackgroundColor3 = Color3.fromRGB(18, 18, 24)
ToggleButton.BackgroundTransparency = 0.08
ToggleButton.AutoButtonColor = false
ToggleButton.Image = ""
ToggleButton.ZIndex = 9999
ToggleButton.Parent = WaveLibraryUI
local TBCorner = Instance.new("UICorner")
TBCorner.CornerRadius = UDim.new(0, 11)
TBCorner.Parent = ToggleButton
local TBStroke = Instance.new("UIStroke")
TBStroke.Color = Color3.fromRGB(255, 255, 255)
TBStroke.Transparency = 0.82
TBStroke.Thickness = 1
TBStroke.Parent = ToggleButton
local Glyph = Instance.new("Frame")
Glyph.Name = "Glyph"
Glyph.AnchorPoint = Vector2.new(0.5, 0.5)
Glyph.Position = UDim2.fromScale(0.5, 0.5)
Glyph.Size = UDim2.fromOffset(16, 16)
Glyph.BackgroundTransparency = 1
Glyph.ZIndex = 10000
Glyph.Parent = ToggleButton
local DotAnchors = { Vector2.new(0, 0), Vector2.new(1, 0), Vector2.new(0, 1), Vector2.new(1, 1) }
local DotPositions = { UDim2.fromScale(0, 0), UDim2.fromScale(1, 0), UDim2.fromScale(0, 1), UDim2.fromScale(1, 1) }
for i = 1, 4 do
local Dot = Instance.new("Frame")
Dot.Size = UDim2.fromOffset(6, 6)
Dot.AnchorPoint = DotAnchors[i]
Dot.Position = DotPositions[i]
Dot.BackgroundColor3 = Color3.fromRGB(236, 236, 245)
Dot.BorderSizePixel = 0
Dot.ZIndex = 10000
Dot.Parent = Glyph
local DotCorner = Instance.new("UICorner")
DotCorner.CornerRadius = UDim.new(0, 2)
DotCorner.Parent = Dot
end
local Dragging, DragInput, DragStart, StartPos, Moved = false, nil, nil, nil, false
ToggleButton.InputBegan:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
Dragging, Moved = true, false
DragStart, StartPos = Input.Position, ToggleButton.Position
end
end)
ToggleButton.InputChanged:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseMovement or Input.UserInputType == Enum.UserInputType.Touch then
DragInput = Input
end
end)
Maid.ToggleButtonMove = Services.UserInputService.InputChanged:Connect(function(Input)
if Dragging and Input == DragInput then
local Delta = Input.Position - DragStart
if Delta.Magnitude > 6 then
Moved = true
end
-- only move once it's clearly a drag, so a tap never nudges it
if Moved then
ToggleButton.Position = UDim2.new(StartPos.X.Scale, StartPos.X.Offset + Delta.X, StartPos.Y.Scale, StartPos.Y.Offset + Delta.Y)
end
end
end)
Maid.ToggleButtonEnd = Services.UserInputService.InputEnded:Connect(function(Input)
if (Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch) and Dragging then
Dragging = false
if not Moved then
ToggleMenu()
end
end
end)
ToggleButton.MouseEnter:Connect(function()
Utility:PropertyTween(ToggleButton, TweenInfo.new(0.15), { BackgroundTransparency = 0 }):Play()
Utility:PropertyTween(TBStroke, TweenInfo.new(0.15), { Transparency = 0.6 }):Play()
end)
ToggleButton.MouseLeave:Connect(function()
Utility:PropertyTween(ToggleButton, TweenInfo.new(0.15), { BackgroundTransparency = 0.08 }):Play()
Utility:PropertyTween(TBStroke, TweenInfo.new(0.15), { Transparency = 0.82 }):Play()
end)
end
-- Top-right status bar: avatar + @username, live FPS, game name (auto-fetched).
-- A drawer that expands when the window is shown and collapses to a rotating
-- arrow when it's hidden; the arrow re-opens it any time (handy on mobile).
if Settings.StatusBar then
local Player = Services.Players.LocalPlayer
-- shared icon sheet (the adapter's tab-icon resolver reuses this cache)
local IconSheet = getgenv().__WaveIconSheet
if IconSheet == nil then
local ok, sheet = pcall(function() return Utility:LoadFile("Wave/UserInterface/Imports/Icons.lua") end)
IconSheet = (ok and type(sheet) == "table") and sheet or false
getgenv().__WaveIconSheet = IconSheet
end
local StatusBar = Instance.new("Frame")
StatusBar.Name = "WaveStatusBar"
StatusBar.AnchorPoint = Vector2.new(1, 0)
StatusBar.Position = UDim2.new(1, -16, 0, 14)
StatusBar.AutomaticSize = Enum.AutomaticSize.X
StatusBar.Size = UDim2.new(0, 0, 0, 34)
StatusBar.BackgroundColor3 = Color3.fromRGB(16, 16, 22)
StatusBar.BackgroundTransparency = 0.04
StatusBar.BorderSizePixel = 0
StatusBar.ZIndex = 9998
StatusBar.Parent = WaveLibraryUI
local SBCorner = Instance.new("UICorner")
SBCorner.CornerRadius = UDim.new(0, 9)
SBCorner.Parent = StatusBar
local SBStroke = Instance.new("UIStroke")
SBStroke.Name = "StatusStroke"
SBStroke.Color = Color3.fromRGB(255, 255, 255)
SBStroke.Transparency = 0.85
SBStroke.Thickness = 1
SBStroke.Parent = StatusBar
local SBPadding = Instance.new("UIPadding")
SBPadding.PaddingLeft = UDim.new(0, 9)
SBPadding.PaddingRight = UDim.new(0, 9)
SBPadding.Parent = StatusBar
local SBLayout = Instance.new("UIListLayout")
SBLayout.FillDirection = Enum.FillDirection.Horizontal
SBLayout.VerticalAlignment = Enum.VerticalAlignment.Center
SBLayout.SortOrder = Enum.SortOrder.LayoutOrder
SBLayout.Padding = UDim.new(0, 0) -- no layout gap; the arrow gap collapses with the drawer, the eye gap is a spacer
SBLayout.Parent = StatusBar
-- Responsive scale: the bar is a sibling of the window (not under BaseUIScale), so we size it
-- for small / mobile screens ourselves, toward the top-right anchor. The floor is higher than
-- the window's so text stays legible and the arrow / eye stay tappable. Viewport changes are
-- picked up by WindowFunctions:UpdateResponsiveScale (below); here we set the initial value.
-- (Kept to a single new local on purpose -- CreateWindow is near Luau's 200-locals limit.)
do
local StatusScale = Instance.new("UIScale")
StatusScale.Name = "StatusScale"
local Camera = Services.Workspace.CurrentCamera
local V = Camera and Camera.ViewportSize
if V and V.X >= 1 and V.Y >= 1 then
local Margin = (V.X < 700) and 12 or 36
StatusScale.Scale = math.clamp(math.min(1, (V.X - Margin) / 868, (V.Y - Margin) / 650), 0.72, 1)
end
StatusScale.Parent = StatusBar
end
-- the drawer: clips so its content slides in / out on expand & collapse
local ContentClip = Instance.new("Frame")
ContentClip.Name = "StatusContentClip"
ContentClip.BackgroundTransparency = 1
ContentClip.ClipsDescendants = true
ContentClip.Size = UDim2.new(0, 0, 1, 0)
ContentClip.LayoutOrder = 0
ContentClip.ZIndex = 9999
ContentClip.Parent = StatusBar
local Content = Instance.new("Frame")
Content.Name = "StatusContent"
Content.AnchorPoint = Vector2.new(1, 0.5)
Content.Position = UDim2.new(1, 0, 0.5, 0)
Content.AutomaticSize = Enum.AutomaticSize.X
Content.Size = UDim2.new(0, 0, 1, 0)
Content.BackgroundTransparency = 1
Content.ZIndex = 9999
Content.Parent = ContentClip
local ContentLayout = Instance.new("UIListLayout")
ContentLayout.FillDirection = Enum.FillDirection.Horizontal
ContentLayout.VerticalAlignment = Enum.VerticalAlignment.Center
ContentLayout.SortOrder = Enum.SortOrder.LayoutOrder
ContentLayout.Padding = UDim.new(0, 10)
ContentLayout.Parent = Content
local ContentPad = Instance.new("UIPadding") -- gaps that collapse with the drawer
ContentPad.PaddingLeft = UDim.new(0, 8) -- breathing room so the FPS dot's glow stroke isn't clipped
ContentPad.PaddingRight = UDim.new(0, 8) -- gap to the arrow; collapses with the drawer so the closed pill hugs the arrow
ContentPad.Parent = Content
local function MakeDivider(order)
local D = Instance.new("Frame")
D.Name = "StatusDivider"
D.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
D.BackgroundTransparency = 0.86
D.BorderSizePixel = 0
D.Size = UDim2.fromOffset(1, 15)
D.LayoutOrder = order
D.ZIndex = 9999
D.Parent = Content
end
-- FPS
local FpsHolder = Instance.new("Frame")
FpsHolder.Name = "FpsHolder"
FpsHolder.BackgroundTransparency = 1
FpsHolder.AutomaticSize = Enum.AutomaticSize.X
FpsHolder.Size = UDim2.new(0, 0, 1, 0)
FpsHolder.LayoutOrder = 0
FpsHolder.ZIndex = 9999
FpsHolder.Parent = Content
local FpsRow = Instance.new("UIListLayout")
FpsRow.FillDirection = Enum.FillDirection.Horizontal
FpsRow.VerticalAlignment = Enum.VerticalAlignment.Center
FpsRow.SortOrder = Enum.SortOrder.LayoutOrder
FpsRow.Padding = UDim.new(0, 7)
FpsRow.Parent = FpsHolder
local FpsDot = Instance.new("Frame")
FpsDot.Name = "StatusDot"
FpsDot.Size = UDim2.fromOffset(7, 7)
FpsDot.BackgroundColor3 = Color3.fromRGB(80, 220, 130)
FpsDot.BorderSizePixel = 0
FpsDot.LayoutOrder = 0
FpsDot.ZIndex = 9999
FpsDot.Parent = FpsHolder
local FpsDotCorner = Instance.new("UICorner")
FpsDotCorner.CornerRadius = UDim.new(1, 0)
FpsDotCorner.Parent = FpsDot
local FpsDotGlow = Instance.new("UIStroke")
FpsDotGlow.Color = FpsDot.BackgroundColor3
FpsDotGlow.Thickness = 3
FpsDotGlow.Transparency = 0.76
FpsDotGlow.Parent = FpsDot
local FpsText = Instance.new("TextLabel")
FpsText.Name = "StatusValue"
FpsText.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.SemiBold, Enum.FontStyle.Normal)
FpsText.Text = "-- FPS"
FpsText.TextColor3 = Color3.fromRGB(238, 238, 245)
FpsText.TextSize = 13
FpsText.AutomaticSize = Enum.AutomaticSize.X
FpsText.Size = UDim2.new(0, 0, 1, 0)
FpsText.BackgroundTransparency = 1
FpsText.TextXAlignment = Enum.TextXAlignment.Left
FpsText.LayoutOrder = 1
FpsText.ZIndex = 9999
FpsText.Parent = FpsHolder
MakeDivider(1)
-- avatar + username
local UserHolder = Instance.new("Frame")
UserHolder.Name = "UserHolder"
UserHolder.BackgroundTransparency = 1
UserHolder.AutomaticSize = Enum.AutomaticSize.X
UserHolder.Size = UDim2.new(0, 0, 1, 0)
UserHolder.LayoutOrder = 2
UserHolder.ZIndex = 9999
UserHolder.Parent = Content
local UserRow = Instance.new("UIListLayout")
UserRow.FillDirection = Enum.FillDirection.Horizontal
UserRow.VerticalAlignment = Enum.VerticalAlignment.Center
UserRow.SortOrder = Enum.SortOrder.LayoutOrder
UserRow.Padding = UDim.new(0, 6)
UserRow.Parent = UserHolder
local Avatar = Instance.new("ImageLabel")
Avatar.Name = "StatusAvatar"
Avatar.Size = UDim2.fromOffset(18, 18)
Avatar.BackgroundColor3 = Color3.fromRGB(44, 44, 54)
Avatar.BackgroundTransparency = 0.2
Avatar.BorderSizePixel = 0
Avatar.Image = ""
Avatar.ScaleType = Enum.ScaleType.Crop
Avatar.LayoutOrder = 0
Avatar.ZIndex = 9999
Avatar.Parent = UserHolder
local AvatarCorner = Instance.new("UICorner")
AvatarCorner.CornerRadius = UDim.new(1, 0)
AvatarCorner.Parent = Avatar
local AvatarStroke = Instance.new("UIStroke")
AvatarStroke.Color = Color3.fromRGB(255, 255, 255)
AvatarStroke.Transparency = 0.8
AvatarStroke.Thickness = 1
AvatarStroke.Parent = Avatar
local UserText = Instance.new("TextLabel")
UserText.Name = "StatusMuted"
UserText.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.Medium, Enum.FontStyle.Normal)
UserText.Text = "@" .. (Player and Player.Name or "player")
UserText.TextColor3 = Color3.fromRGB(170, 170, 182)
UserText.TextSize = 13
UserText.AutomaticSize = Enum.AutomaticSize.X
UserText.Size = UDim2.new(0, 0, 1, 0)
UserText.BackgroundTransparency = 1
UserText.TextXAlignment = Enum.TextXAlignment.Left
UserText.LayoutOrder = 1
UserText.ZIndex = 9999
UserText.Parent = UserHolder
MakeDivider(3)
local GameText = Instance.new("TextLabel")
GameText.Name = "StatusMuted"
GameText.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.Medium, Enum.FontStyle.Normal)
GameText.Text = "…"
GameText.TextColor3 = Color3.fromRGB(170, 170, 182)
GameText.TextSize = 13
GameText.AutomaticSize = Enum.AutomaticSize.X
GameText.Size = UDim2.new(0, 0, 1, 0)
GameText.TextTruncate = Enum.TextTruncate.AtEnd
GameText.BackgroundTransparency = 1
GameText.TextXAlignment = Enum.TextXAlignment.Left
GameText.LayoutOrder = 4
GameText.ZIndex = 9999
GameText.Parent = Content
local GameConstraint = Instance.new("UISizeConstraint")
GameConstraint.MaxSize = Vector2.new(190, math.huge)
GameConstraint.Parent = GameText
-- arrow toggle (collapses the drawer; rotates 180 between states)
local Arrow = Instance.new("TextButton")
Arrow.Name = "StatusArrow"
Arrow.AutoButtonColor = false
Arrow.Text = ""
Arrow.BackgroundTransparency = 1
Arrow.Size = UDim2.fromOffset(18, 18)
Arrow.LayoutOrder = 1
Arrow.ZIndex = 9999
Arrow.Parent = StatusBar
local Chevron = Instance.new("ImageLabel")
Chevron.Name = "StatusChevron"
Chevron.AnchorPoint = Vector2.new(0.5, 0.5)
Chevron.Position = UDim2.fromScale(0.5, 0.5)
Chevron.Size = UDim2.fromOffset(16, 16)
Chevron.BackgroundTransparency = 1
Chevron.ImageColor3 = Color3.fromRGB(192, 192, 206)
Chevron.ImageTransparency = 0.1
Chevron.ZIndex = 9999
Chevron.Parent = Arrow
if IconSheet then
pcall(function() IconSheet:SetIcon(Chevron, "chevron-left") end)
end
-- eye toggle: shows / hides the whole UI, sitting to the right of the arrow. Always on
-- screen (even when the UI is hidden) so it's the way back in -- replaces the old floating
-- button. Icon is "eye" while the UI is shown and "eye-off" while it's hidden.
local EyeIcon
local function SetEyeIcon(Shown)
if EyeIcon and IconSheet then
pcall(function() IconSheet:SetIcon(EyeIcon, Shown and "eye" or "eye-off") end)
end
end
if Settings.ToggleButton then
-- fixed gap between the arrow and the eye (the layout itself has no padding)
local EyeGap = Instance.new("Frame")
EyeGap.Name = "StatusEyeGap"
EyeGap.BackgroundTransparency = 1
EyeGap.Size = UDim2.fromOffset(6, 1)
EyeGap.LayoutOrder = 2
EyeGap.ZIndex = 9999
EyeGap.Parent = StatusBar
local EyeButton = Instance.new("TextButton")
EyeButton.Name = "StatusEye"
EyeButton.AutoButtonColor = false
EyeButton.Text = ""
EyeButton.BackgroundTransparency = 1
EyeButton.Size = UDim2.fromOffset(20, 18)
EyeButton.LayoutOrder = 3
EyeButton.ZIndex = 9999
EyeButton.Parent = StatusBar
EyeIcon = Instance.new("ImageLabel")
EyeIcon.Name = "StatusEyeIcon"
EyeIcon.AnchorPoint = Vector2.new(0.5, 0.5)
EyeIcon.Position = UDim2.fromScale(0.5, 0.5)
EyeIcon.Size = UDim2.fromOffset(17, 17)
EyeIcon.BackgroundTransparency = 1
EyeIcon.ImageColor3 = Color3.fromRGB(192, 192, 206)
EyeIcon.ImageTransparency = 0.1
EyeIcon.ZIndex = 9999
EyeIcon.Parent = EyeButton
SetEyeIcon(WaveLibrary.WindowState ~= false)
EyeButton.MouseButton1Click:Connect(function()
ToggleMenu()
end)
EyeButton.MouseEnter:Connect(function()
Utility:PropertyTween(EyeIcon, TweenInfo.new(0.12), { ImageTransparency = 0 }):Play()
end)
EyeButton.MouseLeave:Connect(function()
Utility:PropertyTween(EyeIcon, TweenInfo.new(0.12), { ImageTransparency = 0.1 }):Play()
end)
end
-- expand / collapse. The clip width is driven explicitly from the row's measured width.
-- (The clip can't AutomaticSize itself: the row is anchored to the clip's right edge, so the
-- size would be circular and resolve to 0.) Content auto-sizes its *own* children reliably,
-- so FullWidth is cached every time the row re-measures -- even while collapsed (the FPS digits
-- keep it fresh) -- and reopening tweens straight to that cached width instead of reading a
-- stale/under-measured value mid-collapse and snapping. Re-sync is suppressed during the
-- animation so a re-measure can't jump the drawer to full while it's tweening open.
local StatusExpanded = true
local Animating = false
-- AbsoluteSize already includes StatusScale, but the clip width we set is a local offset, so
-- divide the scale back out (otherwise it would be applied twice and the drawer would mis-size).
local FullWidth = Content.AbsoluteSize.X / StatusBar.StatusScale.Scale
local function SyncWidth()
local Scale = StatusBar.StatusScale.Scale
local w = Content.AbsoluteSize.X / (Scale > 0 and Scale or 1)
if w > 0 then
FullWidth = w
end
if StatusExpanded and not Animating then
ContentClip.Size = UDim2.new(0, FullWidth, 1, 0)
end
end
Content:GetPropertyChangedSignal("AbsoluteSize"):Connect(SyncWidth)
task.defer(SyncWidth)
local function SetExpanded(State, Animate)
if StatusExpanded == State then
return
end
StatusExpanded = State
Animating = true
local Info = TweenInfo.new(Animate and 0.34 or 0, Enum.EasingStyle.Quint, Enum.EasingDirection.Out)
local Tween = Utility:PropertyTween(ContentClip, Info, { Size = UDim2.new(0, State and FullWidth or 0, 1, 0) })
Tween.Completed:Connect(function(playState)
if playState ~= Enum.PlaybackState.Completed then
return -- superseded by a newer toggle; let that one settle
end
Animating = false
if StatusExpanded then
ContentClip.Size = UDim2.new(0, FullWidth, 1, 0) -- settle on the exact width
end
end)
Tween:Play()
Utility:PropertyTween(Chevron, Info, { Rotation = State and 0 or 180 }):Play()
end
Arrow.MouseButton1Click:Connect(function()
SetExpanded(not StatusExpanded, true)
end)
Arrow.MouseEnter:Connect(function()
Utility:PropertyTween(Chevron, TweenInfo.new(0.12), { ImageTransparency = 0 }):Play()
end)
Arrow.MouseLeave:Connect(function()
Utility:PropertyTween(Chevron, TweenInfo.new(0.12), { ImageTransparency = 0.1 }):Play()
end)
-- avatar headshot (async)
task.spawn(function()
local url
pcall(function()
url = Services.Players:GetUserThumbnailAsync(Player.UserId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size48x48)
end)
if url and Avatar and Avatar.Parent then
Avatar.Image = url
end
end)
-- game name (async, non-blocking)
task.spawn(function()
local name
pcall(function()
name = game:GetService("MarketplaceService"):GetProductInfo(game.PlaceId).Name
end)
if not name or name == "" then
pcall(function() name = game.Name end)
end
name = (name and name ~= "") and name or "Roblox"
if not (GameText and GameText.Parent) then
return
end
GameText.Text = name
-- Freeze GameText to a fixed width. Because it uses TextTruncate, while the drawer is clipped
-- shut it would otherwise measure 0 (it "truncates to nothing"), making the row under-measure
-- so the open animation under-shoots and snaps the last chunk in at the end. A fixed width
-- measures the same open or closed. Capped at 190 (truncation still applies past that).
local w
pcall(function()
local Params = Instance.new("GetTextBoundsParams")
Params.Text = name
Params.Font = GameText.FontFace
Params.Size = GameText.TextSize
Params.Width = 100000
w = game:GetService("TextService"):GetTextBoundsAsync(Params).X
end)
w = math.min(math.ceil((w and w > 0) and w or 90) + 1, 190)
GameText.AutomaticSize = Enum.AutomaticSize.None
GameText.Size = UDim2.new(0, w, 1, 0)
end)
-- live FPS + follow the window's shown/hidden state
local Accum, Frames, LastUiState = 0, 0, true
Maid.StatusFps = Services.RunService.RenderStepped:Connect(function(dt)
local UiState = (WaveLibrary.WindowState ~= false)
if UiState ~= LastUiState then
LastUiState = UiState
SetExpanded(UiState, true)
SetEyeIcon(UiState)
end
Accum = Accum + dt
Frames = Frames + 1
if Accum >= 0.5 then
local Fps = math.floor(Frames / Accum + 0.5)
Accum, Frames = 0, 0
FpsText.Text = Fps .. " FPS"
local Col = (Fps >= 50 and Color3.fromRGB(80, 220, 130))
or (Fps >= 30 and Color3.fromRGB(245, 205, 90))
or Color3.fromRGB(245, 110, 110)
FpsDot.BackgroundColor3 = Col
FpsDotGlow.Color = Col
end
end)
end
Maid.MenuKeybind = Services.UserInputService.InputEnded:Connect(function(Input, Typing)
if Typing then
return
end
if Input.KeyCode == MenuKeybind then
ToggleMenu()
end
end)
Minimize.MouseButton1Click:Connect(ToggleMenu)
Exit.MouseButton1Click:Connect(function()
WindowFunctions:Dialog({
Title = Settings.Title,
Description = "Are you sure you want to exit the menu? You will lose any unsaved configurations.",
Buttons = {
{
Name = "Confirm",
Callback = function()
WindowFunctions:Unload()
if Services.CoreGui:FindFirstChild("StartupScreen") then
Services.CoreGui:FindFirstChild("StartupScreen"):Destroy()
end
end,
},
{
Name = "Cancel"
}
}
})
end)
function WindowFunctions:SetKeybind(Keycode)
local KeybindFile = WaveLibrary.Folder .. "/settings/startup/KeybindSaved.wave"
writefile(KeybindFile, Keycode.Name)
MenuKeybind = Keycode
end
function WindowFunctions:SetAcrylicBlurState(State)
WaveLibrary.AcrylicBlur = State
Base.BackgroundTransparency = WindowFunctions:GetCurrentThemeAttribute("BackgroundTransparency")
end
function WindowFunctions:GetAcrylicBlurState()
return WaveLibrary.AcrylicBlur
end
local function _SetUserInfoState(State)
ShowUserInfo = State
task.spawn(function()
if State then
Headshot.Image = (IsReady and HeadshotImage) or Assets.Null
if Utility:GetPlayer() then
Username.Text = "@" .. Utility:GetPlayer().Name
DisplayName.Text = Utility:GetPlayer().DisplayName
else
Username.Text = "@" .. "Unknown"
DisplayName.Text = "Unknown"
end
else
Headshot.Image = Assets.UserInfoBlurred
local nameLength = #Utility:GetPlayer().Name
local displayNameLength = #Utility:GetPlayer().DisplayName
Username.Text = "@" .. string.rep(".", nameLength)
DisplayName.Text = string.rep(".", displayNameLength)
end
end)
end
function WindowFunctions:SetUserInfoState(State)
_SetUserInfoState(State)
end _SetUserInfoState(Settings.ShowUserInfo ~= nil and Settings.ShowUserInfo or true)
function WindowFunctions:GetUserInfoState(State)
return ShowUserInfo
end
function WindowFunctions:SetSize(Size)
Base.Size = Size
end
function WindowFunctions:GetSize(Size)
return Base.Size
end
function WindowFunctions:SetScale(Scale)
BaseUIScale.Scale = Scale
end
function WindowFunctions:GetScale()
return BaseUIScale.Scale
end
function WindowFunctions:GetResponsiveScale()
local Camera = Services.Workspace.CurrentCamera
if not Camera then
return 1
end
local Viewport = Camera.ViewportSize
if Viewport.X < 1 or Viewport.Y < 1 then
return 1
end
local DesignWidth = (Settings.Size and Settings.Size.X.Offset) or 868
local DesignHeight = (Settings.Size and Settings.Size.Y.Offset) or 650
local Margin = (Viewport.X < 700) and 12 or 36
local Fit = math.min(1, (Viewport.X - Margin) / DesignWidth, (Viewport.Y - Margin) / DesignHeight)
return math.clamp(Fit, 0.4, 1)
end
function WindowFunctions:UpdateResponsiveScale()
local Scale = WindowFunctions:GetResponsiveScale()
BaseUIScale.Scale = Scale
-- keep the top-right status bar in step (it lives outside BaseUIScale), with a higher floor
local SB = BaseUIScale.Parent and BaseUIScale.Parent.Parent and BaseUIScale.Parent.Parent:FindFirstChild("WaveStatusBar")
local SS = SB and SB:FindFirstChild("StatusScale")
if SS then
SS.Scale = math.clamp(Scale, 0.72, 1)
end
end
local function HookResponsiveScale()
local Camera = Services.Workspace.CurrentCamera
if Camera then
Maid.ResponsiveViewport = Camera:GetPropertyChangedSignal("ViewportSize"):Connect(function()
WindowFunctions:UpdateResponsiveScale()
end)
end
end
HookResponsiveScale()
Maid.ResponsiveCameraSwap = Services.Workspace:GetPropertyChangedSignal("CurrentCamera"):Connect(HookResponsiveScale)
function WindowFunctions:ReturnFeatures()
return WaveLibrary.Options
end
function WindowFunctions:RetrieveFeature(Feature)
return WaveLibrary.Options[Feature]
end
function WindowFunctions:GetKeybindSet(Flag)
for BoundFlag, BoundKey in pairs(Maid.ToggleKeybinds) do
if BoundFlag == Flag then
return BoundKey
end
end
return nil
end
local function BuildFolderTree()
local Paths = {
WaveLibrary.Folder,
WaveLibrary.Folder .. "/settings",
WaveLibrary.Folder .. "/settings/" .. game.GameId,
}
for Index = 1, #Paths do
local PathString = Paths[Index]
if not isfolder(PathString) then
makefolder(PathString)
end
end
end
function WaveLibrary:LoadAutoLoadConfig()
if isfile(WaveLibrary.Folder .. "/settings/" .. game.GameId .. "/" .. "autoload.txt") then
local Name = readfile(WaveLibrary.Folder .. "/settings/" .. game.GameId .. "/" .. "autoload.txt")
local Success, ErrorMessage = WaveLibrary:LoadConfig(Name)
if not Success then
WindowFunctions:Notify({
Title = "Interface",
Description = "Error loading autoload config: " .. ErrorMessage
})
end
WindowFunctions:Notify({
Title = "Interface",
Description = string.format("Autoloaded config: %q", Name),
})
end
end
function WaveLibrary:SetFolder(Folder)
WaveLibrary.Folder = Folder or "WaveHubSettings"
BuildFolderTree()
end
function WaveLibrary:SaveConfig(Path)
if (not Path) then
return false, "Please select a config file."
end
local FullPath = WaveLibrary.Folder .. "/settings/" .. game.GameId .. "/" .. Path .. ".json"
local Data = {
Objects = {}
}
for Flag, Option in next, WaveLibrary.Options do
if not ClassParser[Option.Class] then
continue
end
if Option.IgnoreConfig then
continue
end
table.insert(Data.Objects, ClassParser[Option.Class].Save(Flag, Option))
end
local Success, Encoded = pcall(Services.HttpService.JSONEncode, Services.HttpService, Data)
if not Success then
return false, "Unable to encode into JSON data"
end
writefile(FullPath, Encoded)
return true
end
function WaveLibrary:LoadConfig(Path)
if (not Path) then
return false, "Please select a config file."
end
local File = WaveLibrary.Folder .. "/settings/" .. game.GameId .. "/" .. Path .. ".json"
if not isfile(File) then
return false, "Invalid file"
end
local Success, Decoded = pcall(Services.HttpService.JSONDecode, Services.HttpService, readfile(File))
if not Success then
return false, "Unable to decode JSON data."
end
for _, Option in next, Decoded.Objects do
if ClassParser[Option.ClassType] then
ClassParser[Option.ClassType].Load(Option.Flag, Option)
end
end
return true
end
function WaveLibrary:DeleteConfig(Path)
if (not Path) then
return false, "Please select a config file."
end
local FullPath = WaveLibrary.Folder .. "/settings/" .. game.GameId .. "/" .. Path .. ".json"
if not isfile(FullPath) then
return false, "Config file does not exist."
end
local Success, Error = pcall(delfile, FullPath)
if not Success then
return false, "Unable to delete config file: " .. tostring(Error)
end
return true
end
function WaveLibrary:DeleteAllConfigs()
local ConfigFolder = WaveLibrary.Folder .. "/settings/" .. game.GameId
if not isfolder(ConfigFolder) then
return false, "No configs folder found."
end
local Files = listfiles(ConfigFolder)
local DeletedCount = 0
local Errors = {}
for _, FilePath in next, Files do
if FilePath:match("%.json$") then
local Success, Error = pcall(delfile, FilePath)
if Success then
DeletedCount = DeletedCount + 1
else
table.insert(Errors, FilePath .. ": " .. tostring(Error))
end
end
end
if #Errors > 0 then
return false, "Deleted " .. DeletedCount .. " configs, but encountered errors: " .. table.concat(Errors, ", ")
end
return true, "Successfully deleted " .. DeletedCount .. " config(s)."
end
function WaveLibrary:RefreshConfigList()
if not isfolder(WaveLibrary.Folder) or not isfolder(WaveLibrary.Folder .. "/settings") or not isfolder(WaveLibrary.Folder .. "/settings/" .. game.GameId) then
WaveLibrary:SetFolder("WaveHubSettings")
end
local List = listfiles(WaveLibrary.Folder .. "/settings/" .. game.GameId .. "/")
local Out = {}
for Index = 1, #List do
local File = List[Index]
if File:sub(-5) == ".json" then
local Pos = File:find(".json", 1, true)
local Start = Pos
local Char = File:sub(Pos, Pos)
while Char ~= "/" and Char ~= "\\" and Char ~= "" do
Pos = Pos - 1
Char = File:sub(Pos, Pos)
end
if Char == "/" or Char == "\\" then
local Name = File:sub(Pos + 1, Start - 1)
if Name ~= "options" then
table.insert(Out, Name)
end
end
end
end
return Out
end
local _ = HiddenMode and WindowFunctions:SetWindowState(false)
WaveLibrary.WindowState = true
Base.Visible = false
Base.Position = UDim2.fromScale(0.5, 0.5)
Base.AnchorPoint = Vector2.new(0.5, 0.5)
BaseUIScale.Scale = WindowFunctions:GetResponsiveScale() * 0.93
Base.BackgroundTransparency = 1
for _, Child in ipairs(Base:GetChildren()) do
if Child:IsA("GuiObject") and Child.Name ~= "Terminal" then
ThemeUtility:MakeInvisible(Child)
end
end
if Base:FindFirstChild("Terminal") then
local Terminal = Base.Terminal
Terminal:SetAttribute("OriginalBackgroundTransparency", Terminal.BackgroundTransparency)
Terminal.BackgroundTransparency = 1
for _, Element in pairs(Terminal:GetDescendants()) do
if Element:IsA("GuiObject") then
Element:SetAttribute("OriginalBackgroundTransparency", Element.BackgroundTransparency)
Element.BackgroundTransparency = 1
if Element:IsA("TextLabel") or Element:IsA("TextButton") or Element:IsA("TextBox") then
Element:SetAttribute("OriginalTextTransparency", Element.TextTransparency)
Element.TextTransparency = 1
elseif Element:IsA("ImageLabel") or Element:IsA("ImageButton") then
Element:SetAttribute("OriginalImageTransparency", Element.ImageTransparency)
Element.ImageTransparency = 1
end
local Stroke = Element:FindFirstChildOfClass("UIStroke")
if Stroke then
Element:SetAttribute("OriginalStrokeTransparency", Stroke.Transparency)
Stroke.Transparency = 1
end
end
end
if Terminal:FindFirstChild("OutputUIStroke") then
Terminal.OutputUIStroke:SetAttribute("OriginalTransparency", Terminal.OutputUIStroke.Transparency)
Terminal.OutputUIStroke.Transparency = 1
end
Terminal.Visible = Utility:SaveOpened()
end
local function AnimateOutputScreen(DelayTime, Duration)
if not Base:FindFirstChild("Terminal") then return end
local Terminal = Base.Terminal
local ShouldBeVisible = Terminal:GetAttribute("OriginalVisibility")
if ShouldBeVisible == false then
return
end
Utility:PropertyTween(Terminal, TweenInfo.new(Duration, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
BackgroundTransparency = WindowFunctions:GetCurrentThemeAttribute("BackgroundTransparency")
}):Play()
if Terminal:FindFirstChild("OutputUIStroke") then
Utility:PropertyTween(Terminal.OutputUIStroke, TweenInfo.new(Duration, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
Transparency = Terminal:GetAttribute("StrokeTransparency")
}):Play()
end
local DescendantDelay = 0
for _, Element in pairs(Terminal:GetDescendants()) do
if Element:IsA("GuiObject") and Element.Name ~= "OutputWallpaper" then
task.delay(DelayTime + DescendantDelay, function()
local Properties = {}
local BackgroundTransparency = Element:GetAttribute("OriginalBackgroundTransparency")
if BackgroundTransparency ~= nil then
Properties.BackgroundTransparency = BackgroundTransparency
end
if Element:IsA("TextLabel") or Element:IsA("TextButton") or Element:IsA("TextBox") then
local TextTransparency = Element:GetAttribute("OriginalTextTransparency")
if TextTransparency ~= nil then
Properties.TextTransparency = TextTransparency
end
elseif Element:IsA("ImageLabel") or Element:IsA("ImageButton") then
local ImageTransparency = Element:GetAttribute("OriginalImageTransparency")
if ImageTransparency ~= nil then
Properties.ImageTransparency = ImageTransparency
end
end
if next(Properties) ~= nil then
Utility:PropertyTween(Element, TweenInfo.new(Duration, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), Properties):Play()
end
local Stroke = Element:FindFirstChildOfClass("UIStroke")
if Stroke then
local StrokeTransparency = Element:GetAttribute("OriginalStrokeTransparency")
if StrokeTransparency ~= nil then
Utility:PropertyTween(Stroke, TweenInfo.new(Duration, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
Transparency = StrokeTransparency
}):Play()
end
end
end)
DescendantDelay = DescendantDelay + 0.01
end
end
if Terminal:FindFirstChild("OutputWallpaper") then
Utility:PropertyTween(Terminal.OutputWallpaper, TweenInfo.new(Duration, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
ImageTransparency = WindowFunctions:GetCurrentThemeAttribute("WallpaperTransparency")
}):Play()
end
end
task.delay(0.1, function()
if not HiddenMode then
Base.Visible = true
end
Utility:PropertyTween(BaseUIScale, TweenInfo.new(0.5, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {
Scale = WindowFunctions:GetResponsiveScale()
}):Play()
Utility:PropertyTween(Base, TweenInfo.new(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
BackgroundTransparency = WindowFunctions:GetCurrentThemeAttribute("BackgroundTransparency")
}):Play()
if Wallpaper then
Utility:PropertyTween(Wallpaper, TweenInfo.new(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
ImageTransparency = WindowFunctions:GetCurrentThemeAttribute("WallpaperTransparency")
}):Play()
end
if BaseUIStroke then
Utility:PropertyTween(BaseUIStroke, TweenInfo.new(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
Transparency = WindowFunctions:GetCurrentThemeAttribute("StrokeTransparency")
}):Play()
end
task.delay(0.1, function()
if Sidebar then
Utility:PropertyTween(Sidebar, TweenInfo.new(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
BackgroundTransparency = WindowFunctions:GetCurrentThemeAttribute("SidebarTransparency")
}):Play()
if SidebarDivider then
Utility:PropertyTween(SidebarDivider, TweenInfo.new(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
Transparency = WindowFunctions:GetCurrentThemeAttribute("StrokeTransparency")
}):Play()
end
ThemeUtility:AnimateIn(Sidebar, 0.1, 0.3)
end
if Content then
ThemeUtility:AnimateIn(Content, 0.2, 0.3)
task.delay(0.3, function()
if TabSwitcher and TabSelection then
TabSelection()
end
end)
end
task.delay(0.1, function()
AnimateOutputScreen(0.1, 0.4)
end)
end)
end)
return WindowFunctions
end
return WaveLibrary
end
R["Wave/UserInterface/Managers/ComponentManager.lua"] = function(...)
local ComponentManager = {}
ComponentManager.__index = ComponentManager
local ActiveKeybindListeners = {}
local RegisteredKeybinds = {}
local KeybindElements = {}
local KeyShortcuts = {
Space = "SP",
LeftShift = "LS",
RightShift = "RS",
LeftControl = "LC",
RightControl = "RC",
LeftAlt = "LA",
RightAlt = "RA",
MouseButton1 = "M1",
MouseButton2 = "M2",
MouseButton3 = "M3",
CapsLock = "CL",
NumLock = "NL",
ScrollLock = "SL",
Backspace = "BS",
Return = "RT",
Escape = "ES",
Delete = "DL",
Insert = "IN",
PageUp = "PU",
PageDown = "PD",
Home = "HM",
End = "EN",
F1 = "F1",
F2 = "F2",
F3 = "F3",
F4 = "F4",
F5 = "F5",
F6 = "F6",
F7 = "F7",
F8 = "F8",
F9 = "F9",
F10 = "F10",
F11 = "F11",
F12 = "F12",
KeypadEnter = "KE",
KeypadPlus = "KP+",
KeypadMinus = "KP-",
KeypadMultiply = "KP*",
KeypadDivide = "KP/",
KeypadZero = "K0",
KeypadOne = "K1",
KeypadTwo = "K2",
KeypadThree = "K3",
KeypadFour = "K4",
KeypadFive = "K5",
KeypadSix = "K6",
KeypadSeven = "K7",
KeypadEight = "K8",
KeypadNine = "K9",
Up = "UP",
Down = "DN",
Left = "LT",
Right = "RT",
Print = "PR",
Pause = "PA",
Menu = "MN",
Unknown = "NA"
}
local ClassOffsets = {
Button = 0.9,
Toggle = 0.825,
}
local function CleanupConnection(ConnectionTable, Key)
if ConnectionTable[Key] then
if type(ConnectionTable[Key]) == "userdata" and ConnectionTable[Key].Disconnect then
ConnectionTable[Key]:Disconnect()
end
ConnectionTable[Key] = nil
end
end
local function FormatKeyDisplay(InputDescription)
local DisplayKey = InputDescription:gsub("Enum.KeyCode.", ""):gsub("Enum.UserInputType.", "")
return KeyShortcuts[DisplayKey] or DisplayKey
end
function ComponentManager.RemoveComponentBind(KeybindButton, KeybindLabel, Flag)
if not RegisteredKeybinds[Flag] then
Utility:Notify("Keybind Action", "No Keybind set for this feature.", 1)
return
end
Utility:Notify("Keybind Action", "Keep holding to Unbind.", 1)
task.delay(1, function()
if Services.UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton2) then
RegisteredKeybinds[Flag] = nil
Utility:Notify("Keybind Action", "Unbounded Key " .. Flag, 1)
local TextTween = Utility:PropertyTween(
KeybindLabel,
TweenInfo.new(0.25, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out),
{TextTransparency = 1}
)
TextTween:Play()
TextTween.Completed:Wait()
KeybindLabel.Text = ""
end
end)
end
function ComponentManager.RegisterComponentKeybind(KeybindButton, KeybindLabel, Flag, MaidTable)
if ActiveKeybindListeners[Flag] then
return
end
ActiveKeybindListeners[Flag] = true
Utility:Notify("Keybind Action", "The next key you click will be the keybind!", 3)
MaidTable.KeybindInput = Services.UserInputService.InputBegan:Connect(function(Key, Typing)
if Typing then
return
end
local InputData = {}
if Key.KeyCode ~= Enum.KeyCode.Unknown then
InputData.Input = Key.KeyCode
InputData.Description = tostring(Key.KeyCode.Name)
elseif Key.UserInputType and string.find(tostring(Key.UserInputType), "MouseButton") then
InputData.Input = Key.UserInputType
InputData.Description = tostring(Key.UserInputType.Name)
else
InputData.Input = Key
InputData.Description = tostring(Key)
end
InputData.KeybindSetTime = os.time()
RegisteredKeybinds[Flag] = InputData
if KeybindLabel == "" then
KeybindLabel.TextTransparency = 1
end
Utility:Notify("Keybind Action", "Set Keybind to " .. InputData.Description, 3)
KeybindLabel.Text = FormatKeyDisplay(InputData.Description)
Utility:PropertyTween(
KeybindLabel,
TweenInfo.new(0.25, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out),
{TextTransparency = 0.45}
):Play()
CleanupConnection(MaidTable, "KeybindInput")
ActiveKeybindListeners[Flag] = nil
end)
end
function ComponentManager.CreateKeybindAssignments(KeybindButton, KeybindLabel, Arguments)
Arguments.Maid.KeybindClick = KeybindButton.MouseButton1Click:Connect(function()
if not Arguments.Functions:ReturnHidden() then
ComponentManager.RegisterComponentKeybind(KeybindButton, KeybindLabel, Arguments.Flag, Arguments.Maid)
end
end)
Arguments.Maid.KeybindRightClick = KeybindButton.MouseButton2Down:Connect(function()
if not Arguments.Functions:ReturnHidden() then
ComponentManager.RemoveComponentBind(KeybindButton, KeybindLabel, Arguments.Flag, Arguments.Maid)
end
end)
local PreviousKeybindTransparency = KeybindButton.ImageTransparency
Arguments.Maid.KeybindHover = KeybindButton.MouseEnter:Connect(function()
if not Arguments.Functions:ReturnHidden() then
PreviousKeybindTransparency = KeybindButton.ImageTransparency
Utility:QuickTween(KeybindButton, {ImageTransparency = 0})
end
end)
Arguments.Maid.KeybindLeave = KeybindButton.MouseLeave:Connect(function()
if not Arguments.Functions:ReturnHidden() then
Utility:QuickTween(KeybindButton, {ImageTransparency = PreviousKeybindTransparency})
end
end)
end
function ComponentManager.CreateKeybindComponents(Arguments)
if not Arguments.Settings.KeybindEnabled then
return
end
local KeybindButton = Instance.new("ImageButton")
KeybindButton.Name = "KeybindButton"
KeybindButton.Image = Assets.Fingerprint
KeybindButton.ImageColor3 = Color3.fromRGB(255, 255, 255)
KeybindButton.AutoButtonColor = false
KeybindButton.AnchorPoint = Vector2.new(1, 0.5)
KeybindButton.BackgroundTransparency = 1
KeybindButton.BorderSizePixel = 0
KeybindButton.Position = UDim2.fromScale(ClassOffsets[Arguments.Class], 0.5)
KeybindButton.Size = UDim2.fromOffset(20, 20)
KeybindButton.ImageTransparency = 0.45
KeybindButton.Parent = Arguments.Ancestor
local KeybindLabel = Instance.new("TextLabel")
KeybindLabel.Name = "KeybindLabel"
KeybindLabel.Size = UDim2.fromScale(1, 1)
KeybindLabel.TextTransparency = 1
KeybindLabel.TextStrokeTransparency = 0
KeybindLabel.BackgroundTransparency = 1
KeybindLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
KeybindLabel.TextScaled = true
KeybindLabel.Font = Enum.Font.SourceSansBold
KeybindLabel.Text = ""
KeybindLabel.Parent = KeybindButton
ComponentManager.CreateKeybindAssignments(KeybindButton, KeybindLabel, Arguments)
local Elements = {
KeybindButton = KeybindButton,
KeybindLabel = KeybindLabel
}
KeybindElements[Arguments.Flag] = Elements
return Elements
end
function ComponentManager.UpdateKeybindDetection(State, Flag, Elements)
if RegisteredKeybinds[Flag] then
RegisteredKeybinds[Flag].DetectionState = State
end
local TWEEN_INFO = TweenInfo.new(0.2, Enum.EasingStyle.Sine)
if not Elements.KeybindButton or not Elements.KeybindLabel then
return
end
if State then
Services.TweenService:Create(Elements.KeybindButton, TWEEN_INFO, {ImageTransparency = 0.9}):Play()
Services.TweenService:Create(Elements.KeybindLabel, TWEEN_INFO, {TextTransparency = 0.8}):Play()
else
Services.TweenService:Create(Elements.KeybindButton, TWEEN_INFO, {ImageTransparency = 0.45}):Play()
Services.TweenService:Create(Elements.KeybindLabel, TWEEN_INFO, {TextTransparency = 0.45}):Play()
end
end
function ComponentManager.AddFlagKeybind(Flag, Input)
if not Flag or not Input then
return false
end
local InputData = {}
if typeof(Input) == "string" then
local Keycode, UserInput
pcall(function()
Keycode = Enum.KeyCode[Input]
end)
pcall(function()
UserInput = Enum.UserInputType[Input]
end)
if Keycode then
InputData.Input = Keycode
InputData.Description = Keycode.Name
elseif UserInput then
InputData.Input = UserInput
InputData.Description = UserInput.Name
else
return false
end
elseif typeof(Input) == "EnumItem" then
InputData.Input = Input
InputData.Description = Input.Name
else
return false
end
InputData.KeybindSetTime = os.time()
InputData.DetectionState = true
RegisteredKeybinds[Flag] = InputData
if KeybindElements[Flag] and KeybindElements[Flag].KeybindLabel then
local KeybindLabel = KeybindElements[Flag].KeybindLabel
KeybindLabel.Text = FormatKeyDisplay(InputData.Description)
Utility:PropertyTween(
KeybindLabel,
TweenInfo.new(0.25, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out),
{TextTransparency = 0.45}
):Play()
end
return true
end
function ComponentManager:CheckFlagKeybind(Flag)
if not Flag then
return
end
if RegisteredKeybinds[Flag] then
Utility:PrintTable(RegisteredKeybinds[Flag])
return RegisteredKeybinds[Flag].Description
end
return nil
end
function ComponentManager:Unload()
if ComponentManager.KeybindHandler ~= nil then
ComponentManager.KeybindHandler:Disconnect()
end
ComponentManager.KeybindHandler = nil
end
ComponentManager.KeybindHandler = Services.UserInputService.InputBegan:Connect(function(Key, Typing)
if Typing then
return
end
local InputData = {}
if Key.KeyCode ~= Enum.KeyCode.Unknown then
InputData.Input = Key.KeyCode
elseif Key.UserInputType and string.find(tostring(Key.UserInputType), "MouseButton") then
InputData.Input = Key.UserInputType
else
InputData.Input = Key
end
InputData.KeybindHit = os.time()
for Flag, Data in pairs(RegisteredKeybinds) do
if Data.DetectionState ~= nil and not Data.DetectionState then
continue
end
if Data.Input == InputData.Input and (InputData.KeybindHit - Data.KeybindSetTime) ~= 0 then
local ClassType, Component = WaveLibrary:ReturnFeatures()[Flag]:ReturnClass(), WaveLibrary:ReturnFeatures()[Flag]
if ClassType == "Toggle" then
Component:Toggle()
elseif ClassType == "Button" then
Component:RunCallback()
end
end
end
end)
return ComponentManager
end
R["Wave/UserInterface/Managers/SettingManager.lua"] = function(...)
end
R["Wave/UserInterface/Components/Button.lua"] = function(...)
return function(Requirements)
local Section = Requirements.Section
local WindowFunctions = Requirements.WindowFunctions
local WaveLibraryUI = Requirements.WaveLibraryUI
local WaveLibrary = Requirements.WaveLibrary
local SectionFunctions = Requirements.SectionFunctions
local BaseUIScale = Requirements.BaseUIScale
local ComponentManager = Requirements.ComponentManager
function SectionFunctions:Button(Settings, Flag)
local ButtonFunctions = {
Settings = Settings,
IgnoreConfig = Settings.IgnoreConfig,
Tab = Requirements.TabName,
Class = "Button",
IsHidden = false,
Maid = {},
Elements = {}
}
if not Flag or Flag == "WriteHere" or Flag == "AutoWriteFlag" then
Flag = string.gsub(Settings.Name, " ", "_")
end
local TWEEN_INFO = TweenInfo.new(0.2, Enum.EasingStyle.Sine)
local TRANSPARENCY = {
Default = 0.5,
Hover = 0,
Hidden = 0.9
}
local ButtonAccent = WindowFunctions:GetCurrentThemeAttribute("AccentPrimary") or Color3.fromRGB(96, 165, 250)
local ButtonBaseColor = WindowFunctions:GetCurrentThemeAttribute("ButtonColor") or Color3.fromRGB(40, 40, 48)
local function CreateElements()
local Elements = {}
Elements.Button = Instance.new("Frame")
Elements.Button.Name = "Button"
Elements.Button.AutomaticSize = Enum.AutomaticSize.Y
Elements.Button.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
Elements.Button.BackgroundTransparency = 1
Elements.Button.BorderSizePixel = 0
Elements.Button.Size = UDim2.new(1, 0, 0, 38)
Elements.Button.Parent = Section
Elements.ButtonBackground = Instance.new("Frame")
Elements.ButtonBackground.Name = "ButtonBG"
Elements.ButtonBackground.BackgroundColor3 = WindowFunctions:GetCurrentThemeAttribute("HoverColor") or Color3.fromRGB(255, 255, 255)
Elements.ButtonBackground.BackgroundTransparency = 1
Elements.ButtonBackground.BorderSizePixel = 0
Elements.ButtonBackground.AnchorPoint = Vector2.new(0.5, 0.5)
Elements.ButtonBackground.Position = UDim2.fromScale(0.5, 0.5)
Elements.ButtonBackground.Size = UDim2.new(1, 16, 1, 2)
Elements.ButtonBackground.ZIndex = 0
Elements.ButtonBackground:SetAttribute("NoApplyTheme", true)
Elements.ButtonBackground.Parent = Elements.Button
local ButtonBGCorner = Instance.new("UICorner")
ButtonBGCorner.CornerRadius = UDim.new(0, 8)
ButtonBGCorner.Parent = Elements.ButtonBackground
Elements.ButtonInteract = Instance.new("TextButton")
Elements.ButtonInteract.Name = "ButtonInteract"
Elements.ButtonInteract.FontFace = Font.new(Assets.InterFont)
Elements.ButtonInteract.RichText = true
Elements.ButtonInteract.TextColor3 = Color3.fromRGB(255, 255, 255)
Elements.ButtonInteract.TextSize = 13
Elements.ButtonInteract.TextTransparency = TRANSPARENCY.Default
Elements.ButtonInteract.TextTruncate = Enum.TextTruncate.AtEnd
Elements.ButtonInteract.TextXAlignment = Enum.TextXAlignment.Left
Elements.ButtonInteract.BackgroundTransparency = 1
Elements.ButtonInteract.BorderSizePixel = 0
Elements.ButtonInteract.Size = UDim2.fromScale(1, 1)
Elements.ButtonInteract.Text = Settings.Name
Elements.ButtonInteract.Parent = Elements.Button
if Settings.PremiumFeature then
Elements.ButtonInteract.TextTransparency = 0
local PremiumGradient = Instance.new("UIGradient")
PremiumGradient.Color = WindowFunctions:GetCurrentThemeAttribute("PremiumGradientColor") or ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(0, 106, 255)),
ColorSequenceKeypoint.new(0.2, Color3.fromRGB(163, 201, 255)),
ColorSequenceKeypoint.new(0.4, Color3.fromRGB(255, 255, 255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(163, 201, 255))
})
PremiumGradient.Parent = Elements.ButtonInteract
end
Elements.ButtonImage = Instance.new("ImageLabel")
Elements.ButtonImage.Name = "ButtonImage"
Elements.ButtonImage.Image = Assets.ButtonImage
Elements.ButtonImage.ImageTransparency = TRANSPARENCY.Default
Elements.ButtonImage.AnchorPoint = Vector2.new(1, 0.5)
Elements.ButtonImage.BackgroundTransparency = 1
Elements.ButtonImage.BorderSizePixel = 0
Elements.ButtonImage.Position = UDim2.fromScale(1, 0.5)
Elements.ButtonImage.Size = UDim2.fromOffset(15, 15)
Elements.ButtonImage.Parent = Elements.Button
return Elements
end
local function CreateKeybind()
local KeybindComponents = ComponentManager.CreateKeybindComponents({
Ancestor = ButtonFunctions.Elements.Button,
Class = ButtonFunctions.Class,
Maid = ButtonFunctions.Maid,
Functions = ButtonFunctions,
Settings = Settings,
Flag = Flag
})
if KeybindComponents then
ButtonFunctions.Elements.KeybindButton = KeybindComponents.KeybindButton
ButtonFunctions.Elements.KeybindLabel = KeybindComponents.KeybindLabel
end
end
local function HandleButtonClick()
if ButtonFunctions.IsHidden then return end
if Settings.Callback then
Settings.Callback()
end
end
local function ChangeState(State)
if ButtonFunctions.IsHidden then return end
local Hovering = State == "Hover"
local TextTransparency = Hovering and TRANSPARENCY.Hover or TRANSPARENCY.Default
local ImageTransparency = Hovering and TRANSPARENCY.Hover or TRANSPARENCY.Default
Utility:PropertyTween(ButtonFunctions.Elements.ButtonBackground, TWEEN_INFO, {
BackgroundTransparency = Hovering and 0.93 or 1
}):Play()
if not Settings.PremiumFeature then
Utility:PropertyTween(ButtonFunctions.Elements.ButtonInteract, TWEEN_INFO, {
TextTransparency = TextTransparency
}):Play()
end
if Utility:IsPremiumHubUser() then
Utility:PropertyTween(ButtonFunctions.Elements.ButtonImage, TWEEN_INFO, {
ImageTransparency = ImageTransparency
}):Play()
end
end
local function SetupConnections()
ButtonFunctions.Maid.ButtonClick = ButtonFunctions.Elements.ButtonInteract.MouseButton1Click:Connect(HandleButtonClick)
ButtonFunctions.Maid.ButtonPress = ButtonFunctions.Elements.ButtonInteract.MouseButton1Down:Connect(function()
if ButtonFunctions.IsHidden then return end
Utility:PropertyTween(ButtonFunctions.Elements.ButtonBackground, TweenInfo.new(0.08), {BackgroundTransparency = 0.86}):Play()
end)
ButtonFunctions.Maid.ButtonRelease = ButtonFunctions.Elements.ButtonInteract.MouseButton1Up:Connect(function()
Utility:PropertyTween(ButtonFunctions.Elements.ButtonBackground, TweenInfo.new(0.14), {BackgroundTransparency = 0.93}):Play()
end)
ButtonFunctions.Maid.ButtonHover = ButtonFunctions.Elements.ButtonInteract.MouseEnter:Connect(function()
if ButtonFunctions.IsHidden then return end
ChangeState("Hover")
end)
ButtonFunctions.Maid.ButtonLeave = ButtonFunctions.Elements.ButtonInteract.MouseLeave:Connect(function()
ChangeState("Idle")
if WaveLibraryUI:FindFirstChild("HoverFrame") then
WaveLibraryUI:FindFirstChild("HoverFrame"):Destroy()
end
end)
end
local function IsPlaceIdAllowed(PlaceIdSetting)
if not PlaceIdSetting then return true end
local CurrentPlaceId = game.PlaceId
if type(PlaceIdSetting) == "table" then
for _, PlaceId in pairs(PlaceIdSetting) do
if CurrentPlaceId == PlaceId then return true end
end
return false
else
return CurrentPlaceId == PlaceIdSetting
end
end
local function IsPlaceIdForbidden(PlaceIdSetting)
if not PlaceIdSetting then return false end
local CurrentPlaceId = game.PlaceId
if type(PlaceIdSetting) == "table" then
for _, PlaceId in pairs(PlaceIdSetting) do
if CurrentPlaceId == PlaceId then return true end
end
return false
else
return CurrentPlaceId == PlaceIdSetting
end
end
function ButtonFunctions:UpdateName(Name)
ButtonFunctions.Elements.ButtonInteract.Text = Name
end
function ButtonFunctions:SetVisibility(State)
ButtonFunctions.Elements.Button.Visible = State
end
function ButtonFunctions:GetState()
return not ButtonFunctions.IsHidden
end
function ButtonFunctions:ReturnHidden()
return ButtonFunctions.IsHidden
end
function ButtonFunctions:ReturnSettings()
return Settings
end
function ButtonFunctions:ReturnClass()
return ButtonFunctions.Class
end
function ButtonFunctions:ReturnTab()
return ButtonFunctions.Tab
end
function ButtonFunctions:RunCallback()
HandleButtonClick()
end
function ButtonFunctions:SetHidden(State, Reason)
if Reason then
self:SetToolTip(Reason)
end
ButtonFunctions.IsHidden = State
ComponentManager.UpdateKeybindDetection(State, Flag, {
KeybindButton = ButtonFunctions.Elements.KeybindButton,
KeybindLabel = ButtonFunctions.Elements.KeybindLabel,
})
if State then
Services.TweenService:Create(ButtonFunctions.Elements.ButtonImage, TWEEN_INFO, {ImageTransparency = TRANSPARENCY.Hidden}):Play()
if not Settings.PremiumFeature then
Services.TweenService:Create(ButtonFunctions.Elements.ButtonInteract, TWEEN_INFO, {TextTransparency = TRANSPARENCY.Hidden}):Play()
end
if ButtonFunctions.Maid.ButtonClick then
ButtonFunctions.Maid.ButtonClick:Disconnect()
ButtonFunctions.Maid.ButtonClick = nil
end
else
Services.TweenService:Create(ButtonFunctions.Elements.ButtonImage, TWEEN_INFO, {ImageTransparency = TRANSPARENCY.Default}):Play()
if not Settings.PremiumFeature then
Services.TweenService:Create(ButtonFunctions.Elements.ButtonInteract, TWEEN_INFO, {TextTransparency = TRANSPARENCY.Default}):Play()
end
ButtonFunctions.Maid.ButtonClick = ButtonFunctions.Elements.ButtonInteract.MouseButton1Click:Connect(HandleButtonClick)
end
end
function ButtonFunctions:SetToolTip(Tip)
if ButtonFunctions.Elements.Button:FindFirstChild("ToolTipFrame") then
ButtonFunctions.Elements.Button:FindFirstChild("ToolTipFrame"):Destroy()
end
if not Tip or Tip == "" then return end
local ToolTipFrame = Instance.new("Frame")
ToolTipFrame.Name = "ToolTipFrame"
ToolTipFrame.BackgroundColor3 = Color3.fromRGB(18, 18, 18)
ToolTipFrame.BackgroundTransparency = 1
ToolTipFrame.BorderSizePixel = 0
ToolTipFrame.AnchorPoint = Vector2.new(0.5, 1)
ToolTipFrame.Position = UDim2.new(0.5, 0, 0, -5)
ToolTipFrame.Visible = false
ToolTipFrame.ZIndex = 200
ToolTipFrame.Parent = ButtonFunctions.Elements.Button
local TooltipCorner = Instance.new("UICorner")
TooltipCorner.CornerRadius = UDim.new(0, 6)
TooltipCorner.Parent = ToolTipFrame
local TooltipStroke = Instance.new("UIStroke")
TooltipStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
TooltipStroke.LineJoinMode = Enum.LineJoinMode.Round
TooltipStroke.Color = Color3.fromRGB(255, 255, 255)
TooltipStroke.Thickness = 0.1
TooltipStroke.Transparency = 0.2
TooltipStroke.Parent = ToolTipFrame
local TooltipText = Instance.new("TextLabel")
TooltipText.Text = Tip
TooltipText.FontFace = Font.new(Assets.InterFont)
TooltipText.TextColor3 = Color3.fromRGB(200, 220, 200)
TooltipText.TextSize = 12
TooltipText.TextTransparency = 1
TooltipText.BackgroundTransparency = 1
TooltipText.TextXAlignment = Enum.TextXAlignment.Center
TooltipText.TextYAlignment = Enum.TextYAlignment.Center
TooltipText.Size = UDim2.new(1, -12, 1, 0)
TooltipText.Position = UDim2.new(0, 6, 0, 0)
TooltipText.Parent = ToolTipFrame
local TextBounds = Services.TextService:GetTextSize(Tip, TooltipText.TextSize, Enum.Font.SourceSansBold, Vector2.new(math.huge, math.huge))
local TooltipWidth = math.max(80, TextBounds.X + 50)
local TooltipHeight = math.max(28, TextBounds.Y + 12)
ToolTipFrame.Size = UDim2.new(0, TooltipWidth, 0, TooltipHeight)
local function ShowTooltip()
ToolTipFrame.Visible = true
Services.TweenService:Create(ToolTipFrame, TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {BackgroundTransparency = 0.1}):Play()
Services.TweenService:Create(TooltipText, TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {TextTransparency = 0}):Play()
Services.TweenService:Create(TooltipStroke, TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Transparency = 0.8}):Play()
end
local function HideTooltip()
Services.TweenService:Create(ToolTipFrame, TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {BackgroundTransparency = 1}):Play()
Services.TweenService:Create(TooltipText, TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {TextTransparency = 1}):Play()
Services.TweenService:Create(TooltipStroke, TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Transparency = 1}):Play()
task.spawn(function()
task.wait(0.2)
if ToolTipFrame and ToolTipFrame.Parent then
ToolTipFrame.Visible = false
end
end)
end
ButtonFunctions.Maid.TooltipShow = ButtonFunctions.Elements.ButtonInteract.MouseEnter:Connect(ShowTooltip)
ButtonFunctions.Maid.TooltipHide = ButtonFunctions.Elements.ButtonInteract.MouseLeave:Connect(HideTooltip)
end
function ButtonFunctions:Destroy()
for ConnectionName, Connection in pairs(ButtonFunctions.Maid) do
if type(Connection) == "userdata" and Connection.Disconnect then
Connection:Disconnect()
end
end
table.clear(ButtonFunctions.Maid)
if ButtonFunctions.Elements.Button then
ButtonFunctions.Elements.Button:Destroy()
end
if Flag and WaveLibrary.Options[Flag] then
WaveLibrary.Options[Flag] = nil
end
end
ButtonFunctions.Elements = CreateElements()
CreateKeybind()
SetupConnections()
if Settings.Hidden then
if typeof(Settings.Hidden) == "table" then
ButtonFunctions:SetHidden(Settings.Hidden[1], Settings.Hidden[2])
else
ButtonFunctions:SetHidden(Settings.Hidden)
end
end
if Settings.ToolTip then
ButtonFunctions:SetToolTip(Settings.ToolTip)
end
if Settings.PremiumFeature and not Utility:IsPremiumHubUser() then
ButtonFunctions:SetHidden(true, "Premium Feature")
end
if not IsPlaceIdAllowed(Settings.AllowedPlaceId) then
ButtonFunctions:SetHidden(true, "Not in the right PlaceId to use this feature.")
end
if IsPlaceIdForbidden(Settings.ForbiddenPlaceId) then
ButtonFunctions:SetHidden(true, "Not in the right PlaceId to use this feature.")
end
if Flag then
WaveLibrary.Options[Flag] = ButtonFunctions
end
return ButtonFunctions
end
end
end
R["Wave/UserInterface/Components/Callout.lua"] = function(...)
return function(Requirements)
local Section = Requirements.Section
local WindowFunctions = Requirements.WindowFunctions
local WaveLibrary = Requirements.WaveLibrary
local SectionFunctions = Requirements.SectionFunctions
local function ThemeAttr(Name, Fallback)
local ok, value = pcall(function()
return WindowFunctions:GetCurrentThemeAttribute(Name)
end)
if ok and value ~= nil then return value end
return Fallback
end
function SectionFunctions:Callout(Settings, Flag)
Settings = Settings or {}
local CalloutFunctions = { Settings = Settings, Class = "Callout", Tab = Requirements.TabName }
local AccentMap = {
Info = ThemeAttr("InfoColor", Color3.fromRGB(96, 165, 250)),
None = ThemeAttr("AccentPrimary", Color3.fromRGB(96, 165, 250)),
Success = ThemeAttr("SuccessColor", Color3.fromRGB(74, 222, 128)),
Warning = ThemeAttr("WarningColor", Color3.fromRGB(250, 204, 21)),
Error = ThemeAttr("ErrorColor", Color3.fromRGB(248, 113, 113)),
}
local Glyphs = { Info = "i", None = "i", Success = "✓", Warning = "!", Error = "✕" }
local Style = Settings.Style or "Info"
local Accent = AccentMap[Style] or AccentMap.Info
local Glyph = Glyphs[Style] or "i"
local TextPrimary = ThemeAttr("TextPrimary", Color3.fromRGB(236, 236, 241))
local TextSecondary = ThemeAttr("TextSecondary", Color3.fromRGB(168, 168, 178))
local HasTitle = (Settings.Title ~= nil and Settings.Title ~= "")
local BodyValue = Settings.Content or Settings.Text or Settings.Description or ""
local Card = Instance.new("Frame")
Card.Name = "Callout"
Card.BackgroundColor3 = Accent
Card.BackgroundTransparency = 0.9
Card.BorderSizePixel = 0
Card.AutomaticSize = Enum.AutomaticSize.Y
Card.Size = UDim2.new(1, 0, 0, 0)
Card:SetAttribute("NoApplyTheme", true)
Card.Parent = Section
local CardCorner = Instance.new("UICorner")
CardCorner.CornerRadius = UDim.new(0, 10)
CardCorner.Parent = Card
local CardStroke = Instance.new("UIStroke")
CardStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
CardStroke.Color = Accent
CardStroke.Transparency = 0.78
CardStroke.Parent = Card
local AccentBar = Instance.new("Frame")
AccentBar.Name = "AccentBar"
AccentBar.BackgroundColor3 = Accent
AccentBar.BackgroundTransparency = 0.05
AccentBar.BorderSizePixel = 0
AccentBar.AnchorPoint = Vector2.new(0, 0.5)
AccentBar.Position = UDim2.new(0, 6, 0.5, 0)
AccentBar.Size = UDim2.new(0, 3, 1, -18)
AccentBar:SetAttribute("NoApplyTheme", true)
AccentBar.Parent = Card
local AccentBarCorner = Instance.new("UICorner")
AccentBarCorner.CornerRadius = UDim.new(1, 0)
AccentBarCorner.Parent = AccentBar
local Content = Instance.new("Frame")
Content.Name = "Content"
Content.BackgroundTransparency = 1
Content.AutomaticSize = Enum.AutomaticSize.Y
Content.Size = UDim2.new(1, 0, 0, 0)
Content.Parent = Card
local ContentPadding = Instance.new("UIPadding")
ContentPadding.PaddingTop = UDim.new(0, 11)
ContentPadding.PaddingBottom = UDim.new(0, 12)
ContentPadding.PaddingLeft = UDim.new(0, 17)
ContentPadding.PaddingRight = UDim.new(0, 13)
ContentPadding.Parent = Content
local ColumnLayout = Instance.new("UIListLayout")
ColumnLayout.SortOrder = Enum.SortOrder.LayoutOrder
ColumnLayout.Padding = UDim.new(0, 3)
ColumnLayout.Parent = Content
-- Top line: the main line (title, or body when there's no title) on the
-- left and the status icon docked right, vertically centred with it.
local TopLine = Instance.new("Frame")
TopLine.Name = "TopLine"
TopLine.BackgroundTransparency = 1
TopLine.Parent = Content
if HasTitle then
TopLine.Size = UDim2.new(1, 0, 0, 22)
else
TopLine.AutomaticSize = Enum.AutomaticSize.Y
TopLine.Size = UDim2.new(1, 0, 0, 0)
end
local IconHolder = Instance.new("Frame")
IconHolder.Name = "IconHolder"
IconHolder.Size = UDim2.fromOffset(22, 22)
IconHolder.BackgroundColor3 = Accent
IconHolder.BackgroundTransparency = 0.8
IconHolder.BorderSizePixel = 0
IconHolder:SetAttribute("NoApplyTheme", true)
if HasTitle then
IconHolder.AnchorPoint = Vector2.new(1, 0.5)
IconHolder.Position = UDim2.new(1, 0, 0.5, 0)
else
IconHolder.AnchorPoint = Vector2.new(1, 0)
IconHolder.Position = UDim2.new(1, 0, 0, 0)
end
IconHolder.Parent = TopLine
local IconCorner = Instance.new("UICorner")
IconCorner.CornerRadius = UDim.new(1, 0)
IconCorner.Parent = IconHolder
local IconGlyph = Instance.new("TextLabel")
IconGlyph.Name = "Result_Glyph"
IconGlyph.BackgroundTransparency = 1
IconGlyph.Size = UDim2.fromScale(1, 1)
IconGlyph.Text = Glyph
IconGlyph.TextColor3 = Accent
IconGlyph.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.Bold, Enum.FontStyle.Normal)
IconGlyph.TextSize = 13
IconGlyph:SetAttribute("NoApplyTheme", true)
IconGlyph.Parent = IconHolder
local MainText = Instance.new("TextLabel")
MainText.Name = HasTitle and "Result_Title" or "Result_Body"
MainText.FontFace = Font.new(Assets.InterFont, HasTitle and Enum.FontWeight.SemiBold or Enum.FontWeight.Medium, Enum.FontStyle.Normal)
MainText.RichText = true
MainText.Text = HasTitle and Settings.Title or BodyValue
MainText.TextColor3 = HasTitle and TextPrimary or TextSecondary
MainText.TextTransparency = HasTitle and 0 or 0.1
MainText.TextSize = HasTitle and 13 or 12
MainText.TextXAlignment = Enum.TextXAlignment.Left
MainText.BackgroundTransparency = 1
MainText:SetAttribute("NoApplyTheme", true)
if HasTitle then
MainText.TextYAlignment = Enum.TextYAlignment.Center
MainText.TextTruncate = Enum.TextTruncate.AtEnd
MainText.Size = UDim2.new(1, -30, 1, 0)
else
MainText.TextYAlignment = Enum.TextYAlignment.Top
MainText.TextWrapped = true
MainText.AutomaticSize = Enum.AutomaticSize.Y
MainText.Size = UDim2.new(1, -30, 0, 0)
end
MainText.Parent = TopLine
local BodyText
if HasTitle then
BodyText = Instance.new("TextLabel")
BodyText.Name = "Result_Body"
BodyText.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.Medium, Enum.FontStyle.Normal)
BodyText.RichText = true
BodyText.Text = BodyValue
BodyText.TextColor3 = TextSecondary
BodyText.TextTransparency = 0.1
BodyText.TextSize = 12
BodyText.TextXAlignment = Enum.TextXAlignment.Left
BodyText.TextYAlignment = Enum.TextYAlignment.Top
BodyText.TextWrapped = true
BodyText.AutomaticSize = Enum.AutomaticSize.Y
BodyText.BackgroundTransparency = 1
BodyText.LayoutOrder = 1
BodyText.Size = UDim2.new(1, 0, 0, 0)
BodyText.Visible = (BodyValue ~= "")
BodyText:SetAttribute("NoApplyTheme", true)
BodyText.Parent = Content
else
BodyText = MainText
end
function CalloutFunctions:SetContent(New)
BodyText.Text = New
if HasTitle then BodyText.Visible = (New ~= nil and New ~= "") end
return self
end
CalloutFunctions.SetValue = CalloutFunctions.SetContent
function CalloutFunctions:SetTitle(New)
if HasTitle then MainText.Text = New end
return self
end
function CalloutFunctions:SetVisibility(State)
Card.Visible = State
end
function CalloutFunctions:ReturnClass()
return "Callout"
end
function CalloutFunctions:Destroy()
Card:Destroy()
end
if Flag then
WaveLibrary.Options[Flag] = CalloutFunctions
end
return CalloutFunctions
end
end
end
R["Wave/UserInterface/Components/CheckBox.lua"] = function(...)
return function(Requirements)
local Section = Requirements.Section
local WindowFunctions = Requirements.WindowFunctions
local WaveLibraryUI = Requirements.WaveLibraryUI
local WaveLibrary = Requirements.WaveLibrary
local SectionFunctions = Requirements.SectionFunctions
local BaseUIScale = Requirements.BaseUIScale
function SectionFunctions:CheckBox(Settings, Flag)
local CheckBoxFunctions = {
Settings = Settings,
IgnoreConfig = Settings.IgnoreConfig,
Tab = Requirements.TabName,
Class = "CheckBox",
State = Settings.Default or false,
IsHidden = false,
Maid = {},
Elements = {}
}
if not Flag or Flag == "WriteHere" or Flag == "AutoWriteFlag" then
Flag = string.gsub(Settings.Name, " ", "_")
end
local TWEEN_INFO = TweenInfo.new(0.2, Enum.EasingStyle.Sine)
local function CreateElements()
local Elements = {}
Elements.CheckBox = Instance.new("Frame")
Elements.CheckBox.Name = "CheckBox"
Elements.CheckBox.AutomaticSize = Enum.AutomaticSize.Y
Elements.CheckBox.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
Elements.CheckBox.BackgroundTransparency = 1
Elements.CheckBox.BorderSizePixel = 0
Elements.CheckBox.Size = UDim2.new(1, 0, 0, 38)
Elements.CheckBox.Parent = Section
Elements.CheckBoxName = Instance.new("TextLabel")
Elements.CheckBoxName.Name = "CheckBoxName"
Elements.CheckBoxName.FontFace = Font.new(Assets.InterFont)
Elements.CheckBoxName.Text = Settings.Name
Elements.CheckBoxName.RichText = true
Elements.CheckBoxName.TextColor3 = WindowFunctions:GetCurrentThemeAttribute("TextPrimary")
Elements.CheckBoxName.TextSize = 13
Elements.CheckBoxName.TextTransparency = 0.5
Elements.CheckBoxName.TextTruncate = Enum.TextTruncate.AtEnd
Elements.CheckBoxName.TextXAlignment = Enum.TextXAlignment.Left
Elements.CheckBoxName.TextYAlignment = Enum.TextYAlignment.Top
Elements.CheckBoxName.AnchorPoint = Vector2.new(0, 0.5)
Elements.CheckBoxName.AutomaticSize = Enum.AutomaticSize.Y
Elements.CheckBoxName.BackgroundTransparency = 1
Elements.CheckBoxName.Position = UDim2.fromScale(0, 0.5)
Elements.CheckBoxName.Size = UDim2.new(1, -35, 0, 0)
Elements.CheckBoxName.Parent = Elements.CheckBox
if Settings.PremiumFeature then
Elements.CheckBoxName.TextTransparency = 0
local PremiumGradient = Instance.new("UIGradient")
PremiumGradient.Color = WindowFunctions:GetCurrentThemeAttribute("PremiumGradientColor") or ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(0, 106, 255)),
ColorSequenceKeypoint.new(0.2, Color3.fromRGB(163, 201, 255)),
ColorSequenceKeypoint.new(0.4, Color3.fromRGB(255, 255, 255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(163, 201, 255))
})
PremiumGradient.Parent = Elements.CheckBoxName
end
Elements.CheckBoxButton = Instance.new("TextButton")
Elements.CheckBoxButton.Name = "CheckBoxButton"
Elements.CheckBoxButton.Text = ""
Elements.CheckBoxButton.AutoButtonColor = false
Elements.CheckBoxButton.AnchorPoint = Vector2.new(1, 0.5)
Elements.CheckBoxButton.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Elements.CheckBoxButton.BackgroundTransparency = 0.9
Elements.CheckBoxButton.BorderSizePixel = 0
Elements.CheckBoxButton.Position = UDim2.fromScale(1, 0.5)
Elements.CheckBoxButton.Size = UDim2.fromOffset(18, 18)
Elements.CheckBoxButton.Parent = Elements.CheckBox
local CheckBoxUICorner = Instance.new("UICorner")
CheckBoxUICorner.CornerRadius = UDim.new(0, 4)
CheckBoxUICorner.Parent = Elements.CheckBoxButton
local CheckBoxUIStroke = Instance.new("UIStroke")
CheckBoxUIStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
CheckBoxUIStroke.Color = Color3.fromRGB(255, 255, 255)
CheckBoxUIStroke.Thickness = 1
CheckBoxUIStroke.Transparency = 0.8
CheckBoxUIStroke.Parent = Elements.CheckBoxButton
Elements.Checkmark = Instance.new("TextLabel")
Elements.Checkmark.Name = "Checkmark"
Elements.Checkmark.Text = "✓"
Elements.Checkmark.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.Bold)
Elements.Checkmark.TextColor3 = Color3.fromRGB(255, 255, 255)
Elements.Checkmark.TextSize = 12
Elements.Checkmark.TextScaled = true
Elements.Checkmark.TextTransparency = 1
Elements.Checkmark.BackgroundTransparency = 1
Elements.Checkmark.BorderSizePixel = 0
Elements.Checkmark.Position = UDim2.fromScale(0, 0)
Elements.Checkmark.Size = UDim2.fromScale(1, 1)
Elements.Checkmark.TextXAlignment = Enum.TextXAlignment.Center
Elements.Checkmark.TextYAlignment = Enum.TextYAlignment.Center
Elements.Checkmark.ZIndex = 2
Elements.Checkmark.Parent = Elements.CheckBoxButton
return Elements
end
local function UpdateCheckBoxState(State)
if State then
Utility:PropertyTween(CheckBoxFunctions.Elements.CheckBoxButton, TWEEN_INFO, {
BackgroundTransparency = 0.7,
BackgroundColor3 = WindowFunctions:GetCurrentThemeAttribute("AccentPrimary")
}):Play()
Utility:PropertyTween(CheckBoxFunctions.Elements.CheckBoxButton.UICorner, TWEEN_INFO, {
CornerRadius = UDim.new(0, 1)
}):Play()
Utility:PropertyTween(CheckBoxFunctions.Elements.Checkmark, TWEEN_INFO, {
TextTransparency = 0
}):Play()
local StrokeTween = Utility:PropertyTween(CheckBoxFunctions.Elements.CheckBoxButton:FindFirstChild("UIStroke"), TWEEN_INFO, {
Transparency = 0.3,
Color = WindowFunctions:GetCurrentThemeAttribute("AccentPrimary")
})
if StrokeTween then StrokeTween:Play() end
else
Utility:PropertyTween(CheckBoxFunctions.Elements.CheckBoxButton, TWEEN_INFO, {
BackgroundTransparency = 0.9,
BackgroundColor3 = Color3.fromRGB(255, 255, 255)
}):Play()
Utility:PropertyTween(CheckBoxFunctions.Elements.CheckBoxButton.UICorner, TWEEN_INFO, {
CornerRadius = UDim.new(0, 12)
}):Play()
Utility:PropertyTween(CheckBoxFunctions.Elements.Checkmark, TWEEN_INFO, {
TextTransparency = 1
}):Play()
local StrokeTween = Utility:PropertyTween(CheckBoxFunctions.Elements.CheckBoxButton:FindFirstChild("UIStroke"), TWEEN_INFO, {
Transparency = 0.8,
Color = Color3.fromRGB(255, 255, 255)
})
if StrokeTween then StrokeTween:Play() end
end
CheckBoxFunctions.State = State
end
local function CheckBoxTrigger()
if Settings.Fixed or CheckBoxFunctions.IsHidden then return end
CheckBoxFunctions.State = not CheckBoxFunctions.State
UpdateCheckBoxState(CheckBoxFunctions.State)
if Settings.Callback then
Settings.Callback(CheckBoxFunctions.State)
end
end
local function SetupConnections()
CheckBoxFunctions.Maid.CheckBoxClick = CheckBoxFunctions.Elements.CheckBoxButton.MouseButton1Click:Connect(CheckBoxTrigger)
if not Settings.PremiumFeature then
local PreviousTransparency = CheckBoxFunctions.Elements.CheckBoxName.TextTransparency
CheckBoxFunctions.Maid.CheckBoxHover = CheckBoxFunctions.Elements.CheckBoxButton.MouseEnter:Connect(function()
if CheckBoxFunctions.IsHidden then return end
PreviousTransparency = CheckBoxFunctions.Elements.CheckBoxName.TextTransparency
Utility:QuickTween(CheckBoxFunctions.Elements.CheckBoxName, {TextTransparency = 0})
end)
CheckBoxFunctions.Maid.CheckBoxLeave = CheckBoxFunctions.Elements.CheckBoxButton.MouseLeave:Connect(function()
if CheckBoxFunctions.IsHidden then return end
Utility:QuickTween(CheckBoxFunctions.Elements.CheckBoxName, {TextTransparency = PreviousTransparency})
end)
end
end
local function IsPlaceIdAllowed(PlaceIdSetting)
if not PlaceIdSetting then return true end
local CurrentPlaceId = game.PlaceId
if type(PlaceIdSetting) == "table" then
for _, PlaceId in pairs(PlaceIdSetting) do
if CurrentPlaceId == PlaceId then return true end
end
return false
else
return CurrentPlaceId == PlaceIdSetting
end
end
local function IsPlaceIdForbidden(PlaceIdSetting)
if not PlaceIdSetting then return false end
local CurrentPlaceId = game.PlaceId
if type(PlaceIdSetting) == "table" then
for _, PlaceId in pairs(PlaceIdSetting) do
if CurrentPlaceId == PlaceId then return true end
end
return false
else
return CurrentPlaceId == PlaceIdSetting
end
end
function CheckBoxFunctions:Check()
CheckBoxTrigger()
end
function CheckBoxFunctions:ServerCheck()
CheckBoxFunctions.State = not CheckBoxFunctions.State
UpdateCheckBoxState(CheckBoxFunctions.State)
if Settings.Callback then
Settings.Callback(CheckBoxFunctions.State)
end
end
function CheckBoxFunctions:UpdateState(State, Callback)
CheckBoxFunctions.State = State
UpdateCheckBoxState(CheckBoxFunctions.State)
if Callback then
if Settings.Callback then
Settings.Callback(CheckBoxFunctions.State)
end
end
end
function CheckBoxFunctions:GetState()
return CheckBoxFunctions.State
end
function CheckBoxFunctions:ReturnSettings()
return Settings
end
function CheckBoxFunctions:ReturnTab()
return CheckBoxFunctions.Tab
end
function CheckBoxFunctions:ReturnClass()
return CheckBoxFunctions.Class
end
function CheckBoxFunctions:UpdateName(Name)
CheckBoxFunctions.Elements.CheckBoxName.Text = Name
end
function CheckBoxFunctions:SetToolTip(Tip)
if CheckBoxFunctions.Elements.CheckBox:FindFirstChild("ToolTipFrame") then
CheckBoxFunctions.Elements.CheckBox:FindFirstChild("ToolTipFrame"):Destroy()
end
if not Tip or Tip == "" then return end
local ToolTipFrame = Instance.new("Frame")
ToolTipFrame.Name = "ToolTipFrame"
ToolTipFrame.BackgroundColor3 = Color3.fromRGB(18, 18, 18)
ToolTipFrame.BackgroundTransparency = 1
ToolTipFrame.BorderSizePixel = 0
ToolTipFrame.AnchorPoint = Vector2.new(0.5, 1)
ToolTipFrame.Position = UDim2.new(0.5, 0, 0, -5)
ToolTipFrame.Visible = false
ToolTipFrame.ZIndex = 200
ToolTipFrame.Parent = CheckBoxFunctions.Elements.CheckBox
local TooltipCorner = Instance.new("UICorner")
TooltipCorner.CornerRadius = UDim.new(0, 6)
TooltipCorner.Parent = ToolTipFrame
local TooltipStroke = Instance.new("UIStroke")
TooltipStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
TooltipStroke.LineJoinMode = Enum.LineJoinMode.Round
TooltipStroke.Color = Color3.fromRGB(255, 255, 255)
TooltipStroke.Thickness = 0.1
TooltipStroke.Transparency = 0.2
TooltipStroke.Parent = ToolTipFrame
local TooltipText = Instance.new("TextLabel")
TooltipText.Text = Tip
TooltipText.FontFace = Font.new(Assets.InterFont)
TooltipText.TextColor3 = Color3.fromRGB(200, 220, 200)
TooltipText.TextSize = 12
TooltipText.TextTransparency = 1
TooltipText.BackgroundTransparency = 1
TooltipText.TextXAlignment = Enum.TextXAlignment.Center
TooltipText.TextYAlignment = Enum.TextYAlignment.Center
TooltipText.Size = UDim2.new(1, -12, 1, 0)
TooltipText.Position = UDim2.new(0, 6, 0, 0)
TooltipText.Parent = ToolTipFrame
local TextBounds = Services.TextService:GetTextSize(Tip, TooltipText.TextSize, Enum.Font.SourceSansBold, Vector2.new(math.huge, math.huge))
local TooltipWidth = math.max(80, TextBounds.X + 50)
local TooltipHeight = math.max(28, TextBounds.Y + 12)
ToolTipFrame.Size = UDim2.new(0, TooltipWidth, 0, TooltipHeight)
CheckBoxFunctions.Maid.TooltipShow = CheckBoxFunctions.Elements.CheckBoxButton.MouseEnter:Connect(function()
ToolTipFrame.Visible = true
Services.TweenService:Create(ToolTipFrame, TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {BackgroundTransparency = 0.1}):Play()
Services.TweenService:Create(TooltipText, TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {TextTransparency = 0}):Play()
Services.TweenService:Create(TooltipStroke, TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Transparency = 0.8}):Play()
end)
CheckBoxFunctions.Maid.TooltipHide = CheckBoxFunctions.Elements.CheckBoxButton.MouseLeave:Connect(function()
Services.TweenService:Create(ToolTipFrame, TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {BackgroundTransparency = 1}):Play()
Services.TweenService:Create(TooltipText, TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {TextTransparency = 1}):Play()
Services.TweenService:Create(TooltipStroke, TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Transparency = 1}):Play()
task.wait(0.2)
if ToolTipFrame and ToolTipFrame.Parent then
ToolTipFrame.Visible = false
end
end)
end
function CheckBoxFunctions:SetHidden(State, Reason)
if Reason then
self:SetToolTip(Reason)
end
CheckBoxFunctions.IsHidden = State
if State then
Services.TweenService:Create(CheckBoxFunctions.Elements.CheckBoxButton, TweenInfo.new(0.2), {BackgroundTransparency = 0.99}):Play()
Services.TweenService:Create(CheckBoxFunctions.Elements.Checkmark, TweenInfo.new(0.2), {TextTransparency = 0.9}):Play()
local Stroke = CheckBoxFunctions.Elements.CheckBoxButton:FindFirstChild("UIStroke")
if Stroke then
Services.TweenService:Create(Stroke, TweenInfo.new(0.2), {Transparency = 0.95}):Play()
end
if not Settings.PremiumFeature then
Services.TweenService:Create(CheckBoxFunctions.Elements.CheckBoxName, TweenInfo.new(0.2), {TextTransparency = 0.9}):Play()
end
if CheckBoxFunctions.Maid.CheckBoxClick then
CheckBoxFunctions.Maid.CheckBoxClick:Disconnect()
CheckBoxFunctions.Maid.CheckBoxClick = nil
end
else
UpdateCheckBoxState(CheckBoxFunctions.State)
if not Settings.PremiumFeature then
Services.TweenService:Create(CheckBoxFunctions.Elements.CheckBoxName, TweenInfo.new(0.2), {TextTransparency = 0.5}):Play()
end
CheckBoxFunctions.Maid.CheckBoxClick = CheckBoxFunctions.Elements.CheckBoxButton.MouseButton1Click:Connect(CheckBoxTrigger)
end
end
function CheckBoxFunctions:SetVisibility(State)
CheckBoxFunctions.Elements.CheckBox.Visible = State
end
function CheckBoxFunctions:Destroy()
for ConnectionName, Connection in pairs(CheckBoxFunctions.Maid) do
if type(Connection) == "userdata" and Connection.Disconnect then
Connection:Disconnect()
end
end
table.clear(CheckBoxFunctions.Maid)
if CheckBoxFunctions.Elements.CheckBox then
CheckBoxFunctions.Elements.CheckBox:Destroy()
end
if Flag and WaveLibrary.Options[Flag] then
WaveLibrary.Options[Flag] = nil
end
end
CheckBoxFunctions.Elements = CreateElements()
SetupConnections()
UpdateCheckBoxState(CheckBoxFunctions.State)
if Settings.Hidden then
if typeof(Settings.Hidden) == "table" then
CheckBoxFunctions:SetHidden(Settings.Hidden[1], Settings.Hidden[2])
else
CheckBoxFunctions:SetHidden(Settings.Hidden)
end
end
if Settings.Default == true and Settings.Callback then
task.defer(function()
Settings.Callback(Settings.Default)
end)
end
if Settings.ToolTip then
CheckBoxFunctions:SetToolTip(Settings.ToolTip)
end
if Settings.PremiumFeature and not Utility:IsPremiumHubUser() then
CheckBoxFunctions:SetHidden(true, "Premium Feature")
end
if not IsPlaceIdAllowed(Settings.AllowedPlaceId) then
CheckBoxFunctions:SetHidden(true, "Not in the right PlaceId to use this feature.")
end
if IsPlaceIdForbidden(Settings.ForbiddenPlaceId) then
CheckBoxFunctions:SetHidden(true, "Not in the right PlaceId to use this feature.")
end
if Flag then
WaveLibrary.Options[Flag] = CheckBoxFunctions
end
return CheckBoxFunctions
end
end
end
R["Wave/UserInterface/Components/ColorPicker.lua"] = function(...)
return function(Requirements)
local Section = Requirements.Section
local WindowFunctions = Requirements.WindowFunctions
local WaveLibraryUI = Requirements.WaveLibraryUI
local WaveLibrary = Requirements.WaveLibrary
local SectionFunctions = Requirements.SectionFunctions
local BaseUIScale = Requirements.BaseUIScale
local Base = Requirements.Base
function SectionFunctions:ColorPicker(Settings, Flag)
local ColorPickerFunctions = {
Settings = Settings,
Class = "ColorPicker",
IgnoreConfig = Settings.IgnoreConfig,
Tab = Requirements.TabName,
Color = Settings.Default or Color3.new(1, 1, 1),
Alpha = Settings.Alpha or 0,
IsHidden = false,
Maid = {},
Elements = {},
State = {
Hue = 0,
Saturation = 0,
Value = 1,
WheelDown = false,
SlideDown = false
}
}
if not Flag or Flag == "WriteHere" or Flag == "AutoWriteFlag" then
Flag = string.gsub(Settings.Name, " ", "_")
end
local TWEEN_INFO = TweenInfo.new(0.2, Enum.EasingStyle.Sine)
local TRANSPARENCY = {
Default = 0.5,
Hover = 0,
Hidden = 0.9
}
local UI_CONSTANTS = {
MAIN_HEIGHT = 38,
COLOR_SIZE = 21,
CORNER_RADIUS = {
Small = UDim.new(0, 4),
Medium = UDim.new(0, 6),
Large = UDim.new(0, 10)
},
PADDING = {
Small = UDim.new(0, 5),
Medium = UDim.new(0, 10),
Large = UDim.new(0, 20)
}
}
local function CreateMainElements()
local Elements = {}
Elements.ColorPicker = Instance.new("Frame")
Elements.ColorPicker.Name = "ColorPicker"
Elements.ColorPicker.AutomaticSize = Enum.AutomaticSize.Y
Elements.ColorPicker.BackgroundTransparency = 1
Elements.ColorPicker.BorderSizePixel = 0
Elements.ColorPicker.Size = UDim2.new(1, 0, 0, UI_CONSTANTS.MAIN_HEIGHT)
Elements.ColorPicker.Parent = Section
Elements.ColorPickerName = Instance.new("TextLabel")
Elements.ColorPickerName.Name = "ColorPickerName"
Elements.ColorPickerName.FontFace = Font.new(Assets.InterFont)
Elements.ColorPickerName.Text = Settings.Name
Elements.ColorPickerName.RichText = true
Elements.ColorPickerName.TextColor3 = Color3.fromRGB(255, 255, 255)
Elements.ColorPickerName.TextSize = 13
Elements.ColorPickerName.TextTransparency = TRANSPARENCY.Default
Elements.ColorPickerName.TextTruncate = Enum.TextTruncate.AtEnd
Elements.ColorPickerName.TextXAlignment = Enum.TextXAlignment.Left
Elements.ColorPickerName.TextYAlignment = Enum.TextYAlignment.Top
Elements.ColorPickerName.AnchorPoint = Vector2.new(0, 0.5)
Elements.ColorPickerName.AutomaticSize = Enum.AutomaticSize.XY
Elements.ColorPickerName.BackgroundTransparency = 1
Elements.ColorPickerName.Position = UDim2.fromScale(0, 0.5)
Elements.ColorPickerName.Parent = Elements.ColorPicker
if Settings.PremiumFeature then
Elements.ColorPickerName.TextTransparency = 0
local PremiumGradient = Instance.new("UIGradient")
PremiumGradient.Color = WindowFunctions:GetCurrentThemeAttribute("PremiumGradientColor") or ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(0, 106, 255)),
ColorSequenceKeypoint.new(0.2, Color3.fromRGB(163, 201, 255)),
ColorSequenceKeypoint.new(0.4, Color3.fromRGB(255, 255, 255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(163, 201, 255))
})
PremiumGradient.Parent = Elements.ColorPickerName
end
Elements.ColorBackground = Instance.new("ImageLabel")
Elements.ColorBackground.Name = "ColorBackground"
Elements.ColorBackground.Image = Assets.Grid
Elements.ColorBackground.ScaleType = Enum.ScaleType.Tile
Elements.ColorBackground.TileSize = UDim2.fromOffset(500, 500)
Elements.ColorBackground.AnchorPoint = Vector2.new(1, 0.5)
Elements.ColorBackground.BackgroundTransparency = 1
Elements.ColorBackground.Position = UDim2.fromScale(1, 0.5)
Elements.ColorBackground.Size = UDim2.fromOffset(UI_CONSTANTS.COLOR_SIZE, UI_CONSTANTS.COLOR_SIZE)
Elements.ColorBackground.Parent = Elements.ColorPicker
Elements.ColorDisplay = Instance.new("Frame")
Elements.ColorDisplay.Name = "ColorDisplay"
Elements.ColorDisplay.AnchorPoint = Vector2.new(0.5, 0.5)
Elements.ColorDisplay.BackgroundColor3 = ColorPickerFunctions.Color
Elements.ColorDisplay.BorderSizePixel = 0
Elements.ColorDisplay.Position = UDim2.fromScale(0.5, 0.5)
Elements.ColorDisplay.Size = UDim2.fromScale(1, 1)
Elements.ColorDisplay.BackgroundTransparency = ColorPickerFunctions.Alpha
Elements.ColorDisplay.Parent = Elements.ColorBackground
Elements.ColorInteract = Instance.new("TextButton")
Elements.ColorInteract.Name = "ColorInteract"
Elements.ColorInteract.Text = ""
Elements.ColorInteract.BackgroundTransparency = 1
Elements.ColorInteract.Size = UDim2.fromScale(1, 1)
Elements.ColorInteract.Parent = Elements.ColorDisplay
local DisplayCorner = Instance.new("UICorner")
DisplayCorner.CornerRadius = UI_CONSTANTS.CORNER_RADIUS.Medium
DisplayCorner.Parent = Elements.ColorDisplay
local BackgroundCorner = Instance.new("UICorner")
BackgroundCorner.CornerRadius = UDim.new(0, 8)
BackgroundCorner.Parent = Elements.ColorBackground
return Elements
end
local function CreateColorDialog()
local Dialog = {}
Dialog.Overlay = Instance.new("Frame")
Dialog.Overlay.Name = "ColorPickerOverlay"
Dialog.Overlay.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
Dialog.Overlay.BackgroundTransparency = 0.5
Dialog.Overlay.BorderSizePixel = 0
Dialog.Overlay.Size = UDim2.fromScale(1, 1)
Dialog.Overlay.Visible = false
local OverlayCorner = Instance.new("UICorner")
OverlayCorner.CornerRadius = UI_CONSTANTS.CORNER_RADIUS.Large
OverlayCorner.Parent = Dialog.Overlay
Dialog.Prompt = Instance.new("Frame")
Dialog.Prompt.Name = "ColorPrompt"
Dialog.Prompt.AnchorPoint = Vector2.new(0.5, 0.5)
Dialog.Prompt.AutomaticSize = Enum.AutomaticSize.Y
Dialog.Prompt.BackgroundColor3 = Color3.fromRGB(15, 15, 15)
Dialog.Prompt.BorderSizePixel = 0
Dialog.Prompt.Position = UDim2.fromScale(0.5, 0.5)
Dialog.Prompt.Size = UDim2.fromOffset(420, 0)
Dialog.Prompt.Parent = Dialog.Overlay
local PromptScale = Instance.new("UIScale")
PromptScale.Scale = 0.95
PromptScale.Parent = Dialog.Prompt
local PromptStroke = Instance.new("UIStroke")
PromptStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
PromptStroke.Color = Color3.fromRGB(255, 255, 255)
PromptStroke.Transparency = 0.9
PromptStroke.Parent = Dialog.Prompt
local PromptCorner = Instance.new("UICorner")
PromptCorner.CornerRadius = UI_CONSTANTS.CORNER_RADIUS.Large
PromptCorner.Parent = Dialog.Prompt
local PromptLayout = Instance.new("UIListLayout")
PromptLayout.Padding = UI_CONSTANTS.PADDING.Medium
PromptLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center
PromptLayout.SortOrder = Enum.SortOrder.LayoutOrder
PromptLayout.Parent = Dialog.Prompt
local PromptPadding = Instance.new("UIPadding")
PromptPadding.PaddingBottom = UI_CONSTANTS.PADDING.Large
PromptPadding.PaddingLeft = UI_CONSTANTS.PADDING.Large
PromptPadding.PaddingRight = UI_CONSTANTS.PADDING.Large
PromptPadding.PaddingTop = UI_CONSTANTS.PADDING.Large
PromptPadding.Parent = Dialog.Prompt
return Dialog
end
local function CreateColorControls(Parent)
local Controls = {}
Controls.Header = Instance.new("Frame")
Controls.Header.Name = "Header"
Controls.Header.AutomaticSize = Enum.AutomaticSize.Y
Controls.Header.BackgroundTransparency = 1
Controls.Header.Size = UDim2.fromScale(1, 0)
Controls.Header.Parent = Parent
local HeaderLayout = Instance.new("UIListLayout")
HeaderLayout.Padding = UDim.new(0, 15)
HeaderLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center
HeaderLayout.SortOrder = Enum.SortOrder.LayoutOrder
HeaderLayout.Parent = Controls.Header
local HeaderPadding = Instance.new("UIPadding")
HeaderPadding.PaddingBottom = UDim.new(0, 15)
HeaderPadding.Parent = Controls.Header
Controls.Title = Instance.new("TextLabel")
Controls.Title.Name = "Title"
Controls.Title.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.SemiBold)
Controls.Title.RichText = true
Controls.Title.Text = Settings.Name
Controls.Title.TextColor3 = Color3.fromRGB(255, 255, 255)
Controls.Title.TextSize = 18
Controls.Title.TextTransparency = 0.4
Controls.Title.TextWrapped = true
Controls.Title.TextYAlignment = Enum.TextYAlignment.Top
Controls.Title.AutomaticSize = Enum.AutomaticSize.XY
Controls.Title.BackgroundTransparency = 1
Controls.Title.Size = UDim2.fromScale(1, 0)
Controls.Title.Parent = Controls.Header
local TitleLine = Instance.new("Frame")
TitleLine.Name = "Line"
TitleLine.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
TitleLine.BackgroundTransparency = 0.9
TitleLine.BorderSizePixel = 0
TitleLine.LayoutOrder = 1
TitleLine.Size = UDim2.new(1, 0, 0, 1)
TitleLine.Parent = Controls.Header
Controls.ColorOptions = Instance.new("Frame")
Controls.ColorOptions.Name = "ColorOptions"
Controls.ColorOptions.AutomaticSize = Enum.AutomaticSize.XY
Controls.ColorOptions.BackgroundTransparency = 1
Controls.ColorOptions.LayoutOrder = 1
Controls.ColorOptions.Size = UDim2.fromScale(1, 0)
Controls.ColorOptions.Parent = Parent
local OptionsLayout = Instance.new("UIListLayout")
OptionsLayout.Padding = UDim.new(0, 25)
OptionsLayout.SortOrder = Enum.SortOrder.LayoutOrder
OptionsLayout.Parent = Controls.ColorOptions
return Controls
end
local function CreateColorWheel(Parent)
local Wheel = {}
Wheel.Container = Instance.new("Frame")
Wheel.Container.Name = "WheelContainer"
Wheel.Container.AutomaticSize = Enum.AutomaticSize.Y
Wheel.Container.BackgroundTransparency = 1
Wheel.Container.Size = UDim2.new(1, 0, 0, 100)
Wheel.Container.Parent = Parent
Wheel.ColorWheel = Instance.new("ImageButton")
Wheel.ColorWheel.Name = "ColorWheel"
Wheel.ColorWheel.Image = Assets.ColorWheel
Wheel.ColorWheel.AutoButtonColor = false
Wheel.ColorWheel.BackgroundTransparency = 1
Wheel.ColorWheel.Size = UDim2.fromOffset(220, 220)
Wheel.ColorWheel.SizeConstraint = Enum.SizeConstraint.RelativeYY
Wheel.ColorWheel.Parent = Wheel.Container
Wheel.Target = Instance.new("ImageLabel")
Wheel.Target.Name = "Target"
Wheel.Target.Image = Assets.ColorTarget
Wheel.Target.ImageColor3 = Color3.fromRGB(0, 0, 0)
Wheel.Target.AnchorPoint = Vector2.new(0.5, 0.5)
Wheel.Target.BackgroundTransparency = 1
Wheel.Target.Position = UDim2.fromScale(0.5, 0.5)
Wheel.Target.Size = UDim2.fromOffset(22, 22)
Wheel.Target.SizeConstraint = Enum.SizeConstraint.RelativeYY
Wheel.Target.Parent = Wheel.ColorWheel
Wheel.ValueSlider = Instance.new("TextButton")
Wheel.ValueSlider.Name = "ValueSlider"
Wheel.ValueSlider.Text = ""
Wheel.ValueSlider.AutoButtonColor = false
Wheel.ValueSlider.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Wheel.ValueSlider.BorderSizePixel = 0
Wheel.ValueSlider.LayoutOrder = 1
Wheel.ValueSlider.Size = UDim2.new(1, 0, 0, 15)
Wheel.ValueSlider.Position = UDim2.new(0, 0, 0, 15)
Wheel.ValueSlider.Parent = ColorPickerFunctions.Elements.Controls.ColorOptions
local SliderGradient = Instance.new("UIGradient")
SliderGradient.Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 255, 255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(0, 0, 0))
})
SliderGradient.Parent = Wheel.ValueSlider
local SliderCorner = Instance.new("UICorner")
SliderCorner.CornerRadius = UI_CONSTANTS.CORNER_RADIUS.Medium
SliderCorner.Parent = Wheel.ValueSlider
local SliderStroke = Instance.new("UIStroke")
SliderStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
SliderStroke.Color = Color3.fromRGB(255, 255, 255)
SliderStroke.Transparency = 0.9
SliderStroke.Parent = Wheel.ValueSlider
Wheel.SliderHandle = Instance.new("Frame")
Wheel.SliderHandle.Name = "SliderHandle"
Wheel.SliderHandle.AnchorPoint = Vector2.new(0, 0.5)
Wheel.SliderHandle.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Wheel.SliderHandle.BorderSizePixel = 0
Wheel.SliderHandle.Position = UDim2.fromScale(0, 0.5)
Wheel.SliderHandle.Size = UDim2.new(0, 13, 1, 8)
Wheel.SliderHandle.Parent = Wheel.ValueSlider
local HandleCorner = Instance.new("UICorner")
HandleCorner.CornerRadius = UDim.new(1, 0)
HandleCorner.Parent = Wheel.SliderHandle
local HandleStroke = Instance.new("UIStroke")
HandleStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
HandleStroke.Transparency = 0.5
HandleStroke.Parent = Wheel.SliderHandle
return Wheel
end
local function CreateInputFields(Parent)
local Inputs = {}
Inputs.Container = Instance.new("Frame")
Inputs.Container.Name = "InputsContainer"
Inputs.Container.AnchorPoint = Vector2.new(1, 0.5)
Inputs.Container.AutomaticSize = Enum.AutomaticSize.XY
Inputs.Container.BackgroundTransparency = 1
Inputs.Container.LayoutOrder = 1
Inputs.Container.Position = UDim2.fromScale(1, 0.5)
Inputs.Container.Parent = Parent
local InputsLayout = Instance.new("UIListLayout")
InputsLayout.Padding = UI_CONSTANTS.PADDING.Small
InputsLayout.SortOrder = Enum.SortOrder.LayoutOrder
InputsLayout.Parent = Inputs.Container
local inputNames = {"Red", "Green", "Blue"}
if Settings.Alpha then
table.insert(inputNames, "Alpha")
end
table.insert(inputNames, "Hex")
for i, name in ipairs(inputNames) do
Inputs[name] = CreateInputField(name, i, Inputs.Container)
end
return Inputs
end
function CreateInputField(name, layoutOrder, parent)
local Field = {}
Field.Container = Instance.new("Frame")
Field.Container.Name = name .. "Input"
Field.Container.AutomaticSize = Enum.AutomaticSize.XY
Field.Container.BackgroundTransparency = 1
Field.Container.LayoutOrder = layoutOrder
Field.Container.Size = UDim2.fromOffset(0, 38)
Field.Container.Parent = parent
local FieldLayout = Instance.new("UIListLayout")
FieldLayout.Padding = UDim.new(0, 15)
FieldLayout.FillDirection = Enum.FillDirection.Horizontal
FieldLayout.SortOrder = Enum.SortOrder.LayoutOrder
FieldLayout.VerticalAlignment = Enum.VerticalAlignment.Center
FieldLayout.Parent = Field.Container
Field.Label = Instance.new("TextLabel")
Field.Label.Name = "Label"
Field.Label.FontFace = Font.new(Assets.InterFont)
Field.Label.Text = name
Field.Label.TextColor3 = Color3.fromRGB(255, 255, 255)
Field.Label.TextSize = 13
Field.Label.TextTransparency = 0.5
Field.Label.TextTruncate = Enum.TextTruncate.AtEnd
Field.Label.TextXAlignment = Enum.TextXAlignment.Left
Field.Label.TextYAlignment = Enum.TextYAlignment.Top
Field.Label.AnchorPoint = Vector2.new(0, 0.5)
Field.Label.AutomaticSize = Enum.AutomaticSize.XY
Field.Label.BackgroundTransparency = 1
Field.Label.LayoutOrder = 2
Field.Label.Position = UDim2.fromScale(0, 0.5)
Field.Label.Parent = Field.Container
Field.Input = Instance.new("TextBox")
Field.Input.Name = "Input"
Field.Input.ClearTextOnFocus = false
Field.Input.FontFace = Font.new(Assets.InterFont)
Field.Input.Text = name == "Hex" and "#FFFFFF" or (name == "Alpha" and "0" or "255")
Field.Input.TextColor3 = Color3.fromRGB(255, 255, 255)
Field.Input.TextSize = 12
Field.Input.TextTransparency = 0.1
Field.Input.TextXAlignment = Enum.TextXAlignment.Left
Field.Input.AnchorPoint = Vector2.new(1, 0.5)
Field.Input.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Field.Input.BackgroundTransparency = 0.95
Field.Input.BorderSizePixel = 0
Field.Input.ClipsDescendants = true
Field.Input.LayoutOrder = 1
Field.Input.Position = UDim2.fromScale(1, 0.5)
Field.Input.Size = UDim2.fromOffset(75, 25)
Field.Input.Parent = Field.Container
local InputCorner = Instance.new("UICorner")
InputCorner.CornerRadius = UI_CONSTANTS.CORNER_RADIUS.Small
InputCorner.Parent = Field.Input
local InputStroke = Instance.new("UIStroke")
InputStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
InputStroke.Color = Color3.fromRGB(255, 255, 255)
InputStroke.Transparency = 0.9
InputStroke.Parent = Field.Input
local InputPadding = Instance.new("UIPadding")
InputPadding.PaddingLeft = UDim.new(0, 8)
InputPadding.PaddingRight = UDim.new(0, 10)
InputPadding.Parent = Field.Input
return Field
end
local function CreateActionButtons(Parent)
local Buttons = {}
Buttons.Container = Instance.new("Frame")
Buttons.Container.Name = "ActionsContainer"
Buttons.Container.AutomaticSize = Enum.AutomaticSize.Y
Buttons.Container.BackgroundTransparency = 1
Buttons.Container.LayoutOrder = 2
Buttons.Container.Size = UDim2.fromScale(1, 0)
Buttons.Container.Parent = Parent
local ButtonsLayout = Instance.new("UIListLayout")
ButtonsLayout.Padding = UI_CONSTANTS.PADDING.Medium
ButtonsLayout.SortOrder = Enum.SortOrder.LayoutOrder
ButtonsLayout.Parent = Buttons.Container
local ButtonsPadding = Instance.new("UIPadding")
ButtonsPadding.PaddingTop = UI_CONSTANTS.PADDING.Medium
ButtonsPadding.Parent = Buttons.Container
Buttons.Confirm = Instance.new("TextButton")
Buttons.Confirm.Name = "Confirm"
Buttons.Confirm.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.Medium)
Buttons.Confirm.Text = "Confirm"
Buttons.Confirm.TextColor3 = Color3.fromRGB(255, 255, 255)
Buttons.Confirm.TextSize = 15
Buttons.Confirm.TextTransparency = 0.5
Buttons.Confirm.AutoButtonColor = false
Buttons.Confirm.AutomaticSize = Enum.AutomaticSize.Y
Buttons.Confirm.BackgroundColor3 = Color3.fromRGB(25, 25, 25)
Buttons.Confirm.BorderSizePixel = 0
Buttons.Confirm.Size = UDim2.fromScale(1, 0)
Buttons.Confirm.Parent = Buttons.Container
Buttons.Cancel = Instance.new("TextButton")
Buttons.Cancel.Name = "Cancel"
Buttons.Cancel.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.Medium)
Buttons.Cancel.Text = "Cancel"
Buttons.Cancel.TextColor3 = Color3.fromRGB(255, 255, 255)
Buttons.Cancel.TextSize = 15
Buttons.Cancel.TextTransparency = 0.5
Buttons.Cancel.AutoButtonColor = false
Buttons.Cancel.AutomaticSize = Enum.AutomaticSize.Y
Buttons.Cancel.BackgroundColor3 = Color3.fromRGB(25, 25, 25)
Buttons.Cancel.BorderSizePixel = 0
Buttons.Cancel.Size = UDim2.fromScale(1, 0)
Buttons.Cancel.Parent = Buttons.Container
for _, button in pairs({Buttons.Confirm, Buttons.Cancel}) do
local corner = Instance.new("UICorner")
corner.CornerRadius = UI_CONSTANTS.CORNER_RADIUS.Large
corner.Parent = button
local padding = Instance.new("UIPadding")
padding.PaddingBottom = UDim.new(0, 9)
padding.PaddingLeft = UI_CONSTANTS.PADDING.Medium
padding.PaddingRight = UI_CONSTANTS.PADDING.Medium
padding.PaddingTop = UDim.new(0, 9)
padding.Parent = button
end
return Buttons
end
local ColorUtils = {}
function ColorUtils.HSVToRGB(h, s, v)
return Color3.fromHSV(h, s, v)
end
function ColorUtils.RGBToHSV(Color)
return Color:ToHSV()
end
function ColorUtils.RGBToHex(Color)
return string.format("#%02X%02X%02X",
math.floor(Color.R * 255 + 0.5),
math.floor(Color.G * 255 + 0.5),
math.floor(Color.B * 255 + 0.5)
)
end
function ColorUtils.HexToRGB(hex)
hex = hex:gsub("#", "")
if #hex ~= 6 then return Color3.new(1, 1, 1) end
local r = tonumber(hex:sub(1, 2), 16) or 255
local g = tonumber(hex:sub(3, 4), 16) or 255
local b = tonumber(hex:sub(5, 6), 16) or 255
return Color3.fromRGB(r, g, b)
end
function ColorUtils.ClampValue(value, min, max)
local num = tonumber(value)
return num and math.clamp(num, min, max) or min
end
local function ShowColorDialog()
if ColorPickerFunctions.IsHidden then return end
if Settings.PremiumFeature and not Utility:IsPremiumHubUser() then return end
local canvas = Instance.new("CanvasGroup")
canvas.Name = "ColorPickerCanvas"
canvas.BackgroundTransparency = 1
canvas.BorderSizePixel = 0
canvas.Size = UDim2.fromScale(1, 1)
canvas.ZIndex = 5
canvas.GroupTransparency = 1
canvas.Visible = true
canvas.Parent = Base
ColorPickerFunctions.Elements.Dialog.Overlay.Visible = true
ColorPickerFunctions.Elements.Dialog.Overlay.Parent = canvas
local canvasTween = Utility:PropertyTween(canvas, TWEEN_INFO, {GroupTransparency = 0})
local scaleTween = Utility:PropertyTween(ColorPickerFunctions.Elements.Dialog.Prompt:FindFirstChild("UIScale"), TWEEN_INFO, {Scale = 1})
canvasTween:Play()
if scaleTween then scaleTween:Play() end
canvasTween.Completed:Connect(function()
ColorPickerFunctions.Elements.Dialog.Overlay.Parent = OverlayFolder
canvas:Destroy()
end)
end
local function HideColorDialog()
local canvas = Instance.new("CanvasGroup")
canvas.Name = "ColorPickerCanvas"
canvas.BackgroundTransparency = 1
canvas.BorderSizePixel = 0
canvas.Size = UDim2.fromScale(1, 1)
canvas.ZIndex = 5
canvas.GroupTransparency = 0
canvas.Visible = true
canvas.Parent = Base
ColorPickerFunctions.Elements.Dialog.Overlay.Parent = canvas
local canvasTween = Utility:PropertyTween(canvas, TWEEN_INFO, {GroupTransparency = 1})
local scaleTween = Utility:PropertyTween(ColorPickerFunctions.Elements.Dialog.Prompt:FindFirstChild("UIScale"), TWEEN_INFO, {Scale = 0.95})
canvasTween:Play()
if scaleTween then scaleTween:Play() end
canvasTween.Completed:Connect(function()
ColorPickerFunctions.Elements.Dialog.Overlay.Visible = false
ColorPickerFunctions.Elements.Dialog.Overlay.Parent = OverlayFolder
canvas:Destroy()
end)
end
local function UpdateColorDisplay()
local Color = ColorUtils.HSVToRGB(ColorPickerFunctions.State.Hue, ColorPickerFunctions.State.Saturation, ColorPickerFunctions.State.Value)
ColorPickerFunctions.Elements.ColorDisplay.BackgroundColor3 = Color
ColorPickerFunctions.Elements.ColorDisplay.BackgroundTransparency = Settings.Alpha and ColorPickerFunctions.Alpha or 0
if ColorPickerFunctions.Elements.Inputs then
ColorPickerFunctions.Elements.Inputs.Red.Input.Text = tostring(math.floor(Color.R * 255 + 0.5))
ColorPickerFunctions.Elements.Inputs.Green.Input.Text = tostring(math.floor(Color.G * 255 + 0.5))
ColorPickerFunctions.Elements.Inputs.Blue.Input.Text = tostring(math.floor(Color.B * 255 + 0.5))
ColorPickerFunctions.Elements.Inputs.Hex.Input.Text = ColorUtils.RGBToHex(Color)
if ColorPickerFunctions.Elements.Inputs.Alpha and Settings.Alpha then
ColorPickerFunctions.Elements.Inputs.Alpha.Input.Text = tostring(ColorPickerFunctions.Alpha)
end
end
end
local function HandleWheelInput(inputPos)
local wheel = ColorPickerFunctions.Elements.Wheel.ColorWheel
local wheelRadius = wheel.AbsoluteSize.X / 2
local mouseOffset = inputPos - (wheel.AbsolutePosition + wheel.AbsoluteSize / 2)
if mouseOffset:Dot(mouseOffset) > wheelRadius * wheelRadius then
mouseOffset = mouseOffset.Unit * wheelRadius
end
ColorPickerFunctions.Elements.Wheel.Target.Position = UDim2.new(0.5, mouseOffset.X, 0.5, mouseOffset.Y)
local angle = math.atan2(-mouseOffset.Y, mouseOffset.X)
local distance = mouseOffset.Magnitude
ColorPickerFunctions.State.Hue = ((angle + math.pi) / (2 * math.pi)) % 1
ColorPickerFunctions.State.Saturation = math.clamp(distance / wheelRadius, 0, 1)
local hueColor = ColorUtils.HSVToRGB(ColorPickerFunctions.State.Hue, ColorPickerFunctions.State.Saturation, 1)
ColorPickerFunctions.Elements.Wheel.ValueSlider.BackgroundColor3 = hueColor
UpdateColorDisplay()
end
local function HandleSliderInput(inputX)
local slider = ColorPickerFunctions.Elements.Wheel.ValueSlider
local handle = ColorPickerFunctions.Elements.Wheel.SliderHandle
local relativeX = inputX - slider.AbsolutePosition.X
local clampedX = math.clamp(relativeX, 0, slider.AbsoluteSize.X - handle.AbsoluteSize.X)
handle.Position = UDim2.new(0, clampedX, 0.5, 0)
ColorPickerFunctions.State.Value = 1 - (clampedX / (slider.AbsoluteSize.X - handle.AbsoluteSize.X))
UpdateColorDisplay()
end
local function UpdateFromInputs()
if not ColorPickerFunctions.Elements.Inputs then return end
local inputs = ColorPickerFunctions.Elements.Inputs
local r = ColorUtils.ClampValue(inputs.Red.Input.Text, 0, 255)
local g = ColorUtils.ClampValue(inputs.Green.Input.Text, 0, 255)
local b = ColorUtils.ClampValue(inputs.Blue.Input.Text, 0, 255)
inputs.Red.Input.Text = tostring(r)
inputs.Green.Input.Text = tostring(g)
inputs.Blue.Input.Text = tostring(b)
local Color = Color3.fromRGB(r, g, b)
ColorPickerFunctions.State.Hue, ColorPickerFunctions.State.Saturation, ColorPickerFunctions.State.Value = ColorUtils.RGBToHSV(Color)
UpdateColorDisplay()
end
local function UpdateFromHex()
if not ColorPickerFunctions.Elements.Inputs then return end
local hex = ColorPickerFunctions.Elements.Inputs.Hex.Input.Text
local Color = ColorUtils.HexToRGB(hex)
ColorPickerFunctions.State.Hue, ColorPickerFunctions.State.Saturation, ColorPickerFunctions.State.Value = ColorUtils.RGBToHSV(Color)
ColorPickerFunctions.Elements.Inputs.Red.Input.Text = tostring(math.floor(Color.R * 255 + 0.5))
ColorPickerFunctions.Elements.Inputs.Green.Input.Text = tostring(math.floor(Color.G * 255 + 0.5))
ColorPickerFunctions.Elements.Inputs.Blue.Input.Text = tostring(math.floor(Color.B * 255 + 0.5))
UpdateColorDisplay()
end
local function SetupConnections()
local mouse = Utility:GetMouse()
ColorPickerFunctions.Maid.ColorClick = ColorPickerFunctions.Elements.ColorInteract.MouseButton1Click:Connect(ShowColorDialog)
if not Settings.PremiumFeature then
ColorPickerFunctions.Maid.ColorHover = ColorPickerFunctions.Elements.ColorInteract.MouseEnter:Connect(function()
if ColorPickerFunctions.IsHidden then return end
Utility:QuickTween(ColorPickerFunctions.Elements.ColorPickerName, {TextTransparency = 0})
end)
ColorPickerFunctions.Maid.ColorLeave = ColorPickerFunctions.Elements.ColorInteract.MouseLeave:Connect(function()
if ColorPickerFunctions.IsHidden then return end
Utility:QuickTween(ColorPickerFunctions.Elements.ColorPickerName, {TextTransparency = TRANSPARENCY.Default})
end)
end
if ColorPickerFunctions.Elements.Dialog then
ColorPickerFunctions.Maid.CancelClick = ColorPickerFunctions.Elements.Buttons.Cancel.MouseButton1Click:Connect(HideColorDialog)
ColorPickerFunctions.Maid.ConfirmClick = ColorPickerFunctions.Elements.Buttons.Confirm.MouseButton1Click:Connect(function()
HideColorDialog()
local finalColor = ColorUtils.HSVToRGB(ColorPickerFunctions.State.Hue, ColorPickerFunctions.State.Saturation, ColorPickerFunctions.State.Value)
ColorPickerFunctions.Color = finalColor
if Settings.Alpha then
ColorPickerFunctions.Alpha = ColorUtils.ClampValue(ColorPickerFunctions.Elements.Inputs.Alpha.Input.Text, 0, 1)
end
ColorPickerFunctions.Elements.ColorDisplay.BackgroundColor3 = ColorPickerFunctions.Color
ColorPickerFunctions.Elements.ColorDisplay.BackgroundTransparency = Settings.Alpha and ColorPickerFunctions.Alpha or 0
if Settings.Callback then
task.spawn(function()
Settings.Callback(ColorPickerFunctions.Color, Settings.Alpha and ColorPickerFunctions.Alpha or nil)
end)
end
end)
ColorPickerFunctions.Maid.WheelDown = ColorPickerFunctions.Elements.Wheel.ColorWheel.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
ColorPickerFunctions.State.WheelDown = true
HandleWheelInput(Vector2.new(mouse.X, mouse.Y))
end
end)
ColorPickerFunctions.Maid.WheelUp = ColorPickerFunctions.Elements.Wheel.ColorWheel.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
ColorPickerFunctions.State.WheelDown = false
end
end)
ColorPickerFunctions.Maid.SliderDown = ColorPickerFunctions.Elements.Wheel.ValueSlider.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
ColorPickerFunctions.State.SlideDown = true
HandleSliderInput(mouse.X)
end
end)
ColorPickerFunctions.Maid.SliderUp = ColorPickerFunctions.Elements.Wheel.ValueSlider.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
ColorPickerFunctions.State.SlideDown = false
end
end)
ColorPickerFunctions.Maid.MouseMove = Services.UserInputService.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
if ColorPickerFunctions.State.WheelDown then
HandleWheelInput(Vector2.new(mouse.X, mouse.Y))
elseif ColorPickerFunctions.State.SlideDown then
HandleSliderInput(mouse.X)
end
end
end)
if ColorPickerFunctions.Elements.Inputs then
local inputs = ColorPickerFunctions.Elements.Inputs
ColorPickerFunctions.Maid.RedInput = inputs.Red.Input.FocusLost:Connect(UpdateFromInputs)
ColorPickerFunctions.Maid.GreenInput = inputs.Green.Input.FocusLost:Connect(UpdateFromInputs)
ColorPickerFunctions.Maid.BlueInput = inputs.Blue.Input.FocusLost:Connect(UpdateFromInputs)
ColorPickerFunctions.Maid.HexInput = inputs.Hex.Input.FocusLost:Connect(UpdateFromHex)
if inputs.Alpha and Settings.Alpha then
ColorPickerFunctions.Maid.AlphaInput = inputs.Alpha.Input.FocusLost:Connect(function()
ColorPickerFunctions.Alpha = ColorUtils.ClampValue(inputs.Alpha.Input.Text, 0, 1)
inputs.Alpha.Input.Text = tostring(ColorPickerFunctions.Alpha)
UpdateColorDisplay()
end)
end
end
end
end
local function IsPlaceIdAllowed(placeIdSetting)
if not placeIdSetting then return true end
local currentPlaceId = game.PlaceId
if type(placeIdSetting) == "table" then
for _, placeId in pairs(placeIdSetting) do
if currentPlaceId == placeId then return true end
end
return false
else
return currentPlaceId == placeIdSetting
end
end
local function IsPlaceIdForbidden(placeIdSetting)
if not placeIdSetting then return false end
local currentPlaceId = game.PlaceId
if type(placeIdSetting) == "table" then
for _, placeId in pairs(placeIdSetting) do
if currentPlaceId == placeId then return true end
end
return false
else
return currentPlaceId == placeIdSetting
end
end
function ColorPickerFunctions:ReturnClass()
return ColorPickerFunctions.Class
end
function ColorPickerFunctions:ReturnTab()
return ColorPickerFunctions.Tab
end
function ColorPickerFunctions:SetColor(Color)
if not Color then Color = Color3.new(1, 1, 1) end
ColorPickerFunctions.Color = Color
ColorPickerFunctions.State.Hue, ColorPickerFunctions.State.Saturation, ColorPickerFunctions.State.Value = ColorUtils.RGBToHSV(Color)
ColorPickerFunctions.Elements.ColorDisplay.BackgroundColor3 = Color
if Settings.Callback then
task.spawn(function()
Settings.Callback(ColorPickerFunctions.Color, Settings.Alpha and ColorPickerFunctions.Alpha or nil)
end)
end
end
function ColorPickerFunctions:SetAlpha(Alpha)
if Settings.Alpha then
ColorPickerFunctions.Alpha = math.clamp(Alpha or 0, 0, 1)
ColorPickerFunctions.Elements.ColorDisplay.BackgroundTransparency = ColorPickerFunctions.Alpha
end
end
function ColorPickerFunctions:GetColor()
return ColorPickerFunctions.Color
end
function ColorPickerFunctions:GetAlpha()
return Settings.Alpha and ColorPickerFunctions.Alpha or nil
end
function ColorPickerFunctions:UpdateName(Name)
ColorPickerFunctions.Elements.ColorPickerName.Text = Name
if ColorPickerFunctions.Elements.Controls and ColorPickerFunctions.Elements.Controls.Title then
ColorPickerFunctions.Elements.Controls.Title.Text = Name
end
end
function ColorPickerFunctions:SetVisibility(State)
ColorPickerFunctions.Elements.ColorPicker.Visible = State
end
function ColorPickerFunctions:GetState()
return not ColorPickerFunctions.IsHidden
end
function ColorPickerFunctions:SetToolTip(tip)
if ColorPickerFunctions.Elements.ColorPicker:FindFirstChild("ToolTipFrame") then
ColorPickerFunctions.Elements.ColorPicker:FindFirstChild("ToolTipFrame"):Destroy()
end
if not tip or tip == "" then return end
local toolTipFrame = Instance.new("Frame")
toolTipFrame.Name = "ToolTipFrame"
toolTipFrame.BackgroundColor3 = Color3.fromRGB(18, 18, 18)
toolTipFrame.BackgroundTransparency = 1
toolTipFrame.BorderSizePixel = 0
toolTipFrame.AnchorPoint = Vector2.new(0.5, 1)
toolTipFrame.Position = UDim2.new(0.5, 0, 0, -5)
toolTipFrame.Visible = false
toolTipFrame.ZIndex = 200
toolTipFrame.Parent = ColorPickerFunctions.Elements.ColorPicker
local tooltipCorner = Instance.new("UICorner")
tooltipCorner.CornerRadius = UI_CONSTANTS.CORNER_RADIUS.Medium
tooltipCorner.Parent = toolTipFrame
local tooltipStroke = Instance.new("UIStroke")
tooltipStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
tooltipStroke.LineJoinMode = Enum.LineJoinMode.Round
tooltipStroke.Color = Color3.fromRGB(255, 255, 255)
tooltipStroke.Thickness = 0.1
tooltipStroke.Transparency = 0.2
tooltipStroke.Parent = toolTipFrame
local tooltipText = Instance.new("TextLabel")
tooltipText.Text = tip
tooltipText.FontFace = Font.new(Assets.InterFont)
tooltipText.TextColor3 = Color3.fromRGB(200, 220, 200)
tooltipText.TextSize = 12
tooltipText.TextTransparency = 1
tooltipText.BackgroundTransparency = 1
tooltipText.TextXAlignment = Enum.TextXAlignment.Center
tooltipText.TextYAlignment = Enum.TextYAlignment.Center
tooltipText.Size = UDim2.new(1, -12, 1, 0)
tooltipText.Position = UDim2.new(0, 6, 0, 0)
tooltipText.Parent = toolTipFrame
local textBounds = Services.TextService:GetTextSize(tip, tooltipText.TextSize, Enum.Font.SourceSansBold, Vector2.new(math.huge, math.huge))
local tooltipWidth = math.max(80, textBounds.X + 50)
local tooltipHeight = math.max(28, textBounds.Y + 12)
toolTipFrame.Size = UDim2.new(0, tooltipWidth, 0, tooltipHeight)
local function showTooltip()
toolTipFrame.Visible = true
Services.TweenService:Create(toolTipFrame, TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {BackgroundTransparency = 0.1}):Play()
Services.TweenService:Create(tooltipText, TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {TextTransparency = 0}):Play()
Services.TweenService:Create(tooltipStroke, TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Transparency = 0.8}):Play()
end
local function hideTooltip()
Services.TweenService:Create(toolTipFrame, TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {BackgroundTransparency = 1}):Play()
Services.TweenService:Create(tooltipText, TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {TextTransparency = 1}):Play()
Services.TweenService:Create(tooltipStroke, TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Transparency = 1}):Play()
task.spawn(function()
task.wait(0.2)
if toolTipFrame and toolTipFrame.Parent then
toolTipFrame.Visible = false
end
end)
end
ColorPickerFunctions.Maid.TooltipShow = ColorPickerFunctions.Elements.ColorInteract.MouseEnter:Connect(showTooltip)
ColorPickerFunctions.Maid.TooltipHide = ColorPickerFunctions.Elements.ColorInteract.MouseLeave:Connect(hideTooltip)
end
function ColorPickerFunctions:SetHidden(state, reason)
if reason then
self:SetToolTip(reason)
end
ColorPickerFunctions.IsHidden = state
if state then
Services.TweenService:Create(ColorPickerFunctions.Elements.ColorBackground, TWEEN_INFO, {ImageTransparency = TRANSPARENCY.Hidden}):Play()
if not Settings.PremiumFeature then
Services.TweenService:Create(ColorPickerFunctions.Elements.ColorPickerName, TWEEN_INFO, {TextTransparency = TRANSPARENCY.Hidden}):Play()
end
if ColorPickerFunctions.Maid.ColorClick then
ColorPickerFunctions.Maid.ColorClick:Disconnect()
ColorPickerFunctions.Maid.ColorClick = nil
end
else
Services.TweenService:Create(ColorPickerFunctions.Elements.ColorBackground, TWEEN_INFO, {ImageTransparency = 0}):Play()
if not Settings.PremiumFeature then
Services.TweenService:Create(ColorPickerFunctions.Elements.ColorPickerName, TWEEN_INFO, {TextTransparency = TRANSPARENCY.Default}):Play()
end
ColorPickerFunctions.Maid.ColorClick = ColorPickerFunctions.Elements.ColorInteract.MouseButton1Click:Connect(ShowColorDialog)
end
end
function ColorPickerFunctions:Destroy()
for connectionName, connection in pairs(ColorPickerFunctions.Maid) do
if type(connection) == "userdata" and connection.Disconnect then
connection:Disconnect()
end
end
table.clear(ColorPickerFunctions.Maid)
if ColorPickerFunctions.Elements.ColorPicker then
ColorPickerFunctions.Elements.ColorPicker:Destroy()
end
if ColorPickerFunctions.Elements.Dialog and ColorPickerFunctions.Elements.Dialog.Overlay then
ColorPickerFunctions.Elements.Dialog.Overlay:Destroy()
end
if Flag and WaveLibrary.Options[Flag] then
WaveLibrary.Options[Flag] = nil
end
end
local function Initialize()
ColorPickerFunctions.Elements = CreateMainElements()
ColorPickerFunctions.Elements.Dialog = CreateColorDialog()
ColorPickerFunctions.Elements.Controls = CreateColorControls(ColorPickerFunctions.Elements.Dialog.Prompt)
ColorPickerFunctions.Elements.Wheel = CreateColorWheel(ColorPickerFunctions.Elements.Controls.ColorOptions)
ColorPickerFunctions.Elements.Inputs = CreateInputFields(ColorPickerFunctions.Elements.Wheel.Container)
local ColorWells = Instance.new("Frame")
ColorWells.Name = "ColorWells"
ColorWells.AutomaticSize = Enum.AutomaticSize.Y
ColorWells.BackgroundTransparency = 1
ColorWells.LayoutOrder = 2
ColorWells.Size = UDim2.fromScale(1, 0)
ColorWells.Parent = ColorPickerFunctions.Elements.Controls.ColorOptions
local WellsGrid = Instance.new("UIGridLayout")
WellsGrid.CellPadding = UDim2.fromOffset(10, 0)
WellsGrid.CellSize = UDim2.new(0.5, -5, 0, 30)
WellsGrid.SortOrder = Enum.SortOrder.LayoutOrder
WellsGrid.Parent = ColorWells
local NewColorWell = Instance.new("ImageLabel")
NewColorWell.Name = "NewColor"
NewColorWell.Image = Assets.Grid
NewColorWell.ScaleType = Enum.ScaleType.Tile
NewColorWell.TileSize = UDim2.fromOffset(500, 500)
NewColorWell.BackgroundTransparency = 1
NewColorWell.Parent = ColorWells
local NewColorDisplay = Instance.new("Frame")
NewColorDisplay.Name = "Color"
NewColorDisplay.AnchorPoint = Vector2.new(0.5, 0.5)
NewColorDisplay.BorderSizePixel = 0
NewColorDisplay.Position = UDim2.fromScale(0.5, 0.5)
NewColorDisplay.Size = UDim2.new(1, 0, 1, 0)
NewColorDisplay.Parent = NewColorWell
local OldColorWell = Instance.new("ImageLabel")
OldColorWell.Name = "OldColor"
OldColorWell.Image = Assets.Grid
OldColorWell.ScaleType = Enum.ScaleType.Tile
OldColorWell.TileSize = UDim2.fromOffset(500, 500)
OldColorWell.BackgroundTransparency = 1
OldColorWell.LayoutOrder = 1
OldColorWell.Parent = ColorWells
local OldColorDisplay = Instance.new("Frame")
OldColorDisplay.Name = "Color"
OldColorDisplay.AnchorPoint = Vector2.new(0.5, 0.5)
OldColorDisplay.BorderSizePixel = 0
OldColorDisplay.Position = UDim2.fromScale(0.5, 0.5)
OldColorDisplay.Size = UDim2.new(1, 0, 1, 0)
OldColorDisplay.BackgroundColor3 = ColorPickerFunctions.Color
OldColorDisplay.BackgroundTransparency = Settings.Alpha and ColorPickerFunctions.Alpha or 0
OldColorDisplay.Parent = OldColorWell
for _, Well in pairs({NewColorWell, OldColorWell}) do
local corner = Instance.new("UICorner")
corner.Parent = Well
local colorCorner = Instance.new("UICorner")
colorCorner.Parent = Well:FindFirstChild("Color")
end
ColorPickerFunctions.Elements.NewColorDisplay = NewColorDisplay
ColorPickerFunctions.Elements.OldColorDisplay = OldColorDisplay
ColorPickerFunctions.Elements.Buttons = CreateActionButtons(ColorPickerFunctions.Elements.Dialog.Prompt)
ColorPickerFunctions.State.Hue, ColorPickerFunctions.State.Saturation, ColorPickerFunctions.State.Value = ColorUtils.RGBToHSV(ColorPickerFunctions.Color)
SetupConnections()
UpdateColorDisplay()
if not Base:FindFirstChild("OverlayFolder") then
OverlayFolder = Instance.new("Folder")
OverlayFolder.Name = "OverlayFolder"
OverlayFolder.Parent = Base
end
ColorPickerFunctions.Elements.Dialog.Overlay.Parent = OverlayFolder
end
local function ApplyInitialSettings()
if Settings.Hidden then
if typeof(Settings.Hidden) == "table" then
ColorPickerFunctions:SetHidden(Settings.Hidden[1], Settings.Hidden[2])
else
ColorPickerFunctions:SetHidden(Settings.Hidden)
end
end
if Settings.ToolTip then
ColorPickerFunctions:SetToolTip(Settings.ToolTip)
end
if Settings.PremiumFeature and not Utility:IsPremiumHubUser() then
ColorPickerFunctions:SetHidden(true, "Premium Feature")
end
if not IsPlaceIdAllowed(Settings.AllowedPlaceId) then
ColorPickerFunctions:SetHidden(true, "Not in the right PlaceId to use this feature.")
end
if IsPlaceIdForbidden(Settings.ForbiddenPlaceId) then
ColorPickerFunctions:SetHidden(true, "Not in the right PlaceId to use this feature.")
end
end
Initialize()
ApplyInitialSettings()
if Flag then
WaveLibrary.Options[Flag] = ColorPickerFunctions
end
return ColorPickerFunctions
end
end
end
R["Wave/UserInterface/Components/Divider.lua"] = function(...)
return function(Requirements)
local Section = Requirements.Section
local WindowFunctions = Requirements.WindowFunctions
local WaveLibraryUI = Requirements.WaveLibraryUI
local WaveLibrary = Requirements.WaveLibrary
local SectionFunctions = Requirements.SectionFunctions
local BaseUIScale = Requirements.BaseUIScale
function SectionFunctions:Divider(Settings)
Settings = Settings or {}
local Label = (type(Settings) == "string" and Settings)
or Settings.Text or Settings.Name or Settings.Label or Settings.Title
local HasLabel = Label ~= nil and Label ~= ""
local DividerFunctions = {}
local function ThemeAttr(Name, Fallback)
local ok, value = pcall(function()
return WindowFunctions:GetCurrentThemeAttribute(Name)
end)
if ok and value ~= nil then return value end
return Fallback
end
local Divider = Instance.new("Frame")
Divider.Name = "Divider"
Divider.BackgroundTransparency = 1
Divider.BorderSizePixel = 0
Divider.ClipsDescendants = true
Divider.Size = UDim2.new(1, 0, 0, HasLabel and 20 or 11)
Divider.Parent = Section
local Layout = Instance.new("UIListLayout")
Layout.FillDirection = Enum.FillDirection.Horizontal
Layout.VerticalAlignment = Enum.VerticalAlignment.Center
Layout.SortOrder = Enum.SortOrder.LayoutOrder
Layout.Padding = UDim.new(0, 9)
Layout.Parent = Divider
local LineColor = ThemeAttr("BorderColor", Color3.fromRGB(255, 255, 255))
if HasLabel then
local LabelText = Instance.new("TextLabel")
LabelText.Name = "DividerLabel"
LabelText.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.SemiBold, Enum.FontStyle.Normal)
LabelText.Text = Label
LabelText.TextColor3 = ThemeAttr("TextSecondary", Color3.fromRGB(168, 168, 178))
LabelText.TextTransparency = 0.1
LabelText.TextSize = 12
LabelText.TextXAlignment = Enum.TextXAlignment.Left
LabelText.TextYAlignment = Enum.TextYAlignment.Center
LabelText.AutomaticSize = Enum.AutomaticSize.X
LabelText.BackgroundTransparency = 1
LabelText.Size = UDim2.new(0, 0, 1, 0)
LabelText:SetAttribute("NoApplyTheme", true)
LabelText.Parent = Divider
DividerFunctions._label = LabelText
end
local Line = Instance.new("Frame")
Line.Name = "Line"
Line.BackgroundColor3 = LineColor
Line.BackgroundTransparency = 0.8
Line.BorderSizePixel = 0
Line.Size = UDim2.new(1, 0, 0, 1)
Line.LayoutOrder = 1
Line:SetAttribute("NoApplyTheme", true)
Line.Parent = Divider
if not HasLabel then
-- soft fade at both ends for a cleaner standalone divider
local Gradient = Instance.new("UIGradient")
Gradient.Transparency = NumberSequence.new({
NumberSequenceKeypoint.new(0, 1),
NumberSequenceKeypoint.new(0.1, 0),
NumberSequenceKeypoint.new(0.9, 0),
NumberSequenceKeypoint.new(1, 1),
})
Gradient.Parent = Line
end
function DividerFunctions:Remove()
Divider:Destroy()
end
function DividerFunctions:SetVisibility(State)
Divider.Visible = State
end
function DividerFunctions:UpdateName(New)
if DividerFunctions._label then
DividerFunctions._label.Text = New
end
end
return DividerFunctions
end
end
end
R["Wave/UserInterface/Components/Dropdown.lua"] = function(...)
return function(Requirements)
local Section = Requirements.Section
local WindowFunctions = Requirements.WindowFunctions
local WaveLibraryUI = Requirements.WaveLibraryUI
local WaveLibrary = Requirements.WaveLibrary
local SectionFunctions = Requirements.SectionFunctions
local BaseUIScale = Requirements.BaseUIScale
function SectionFunctions:Dropdown(Settings, Flag)
local DropdownFunctions = {
Settings = Settings,
Class = "Dropdown",
IgnoreConfig = Settings.IgnoreConfig,
Tab = Requirements.TabName,
Value = nil,
IsHidden = false,
Dropped = false,
Debounce = false,
Selected = {},
OptionObjs = {},
Maid = {},
Elements = {}
}
if not Flag or Flag == "WriteHere" or Flag == "AutoWriteFlag" then
Flag = string.gsub(Settings.Name, " ", "_")
end
local TWEEN_SETTINGS = {
Duration = 0.2,
EasingStyle = Enum.EasingStyle.Quint,
TransparencyIn = 0,
TransparencyOut = 0.5,
CheckSizeIncrease = 12,
CheckSizeDecrease = -13
}
local function CreateElements()
local Elements = {}
Elements.Dropdown = Instance.new("Frame")
Elements.Dropdown.Name = "Dropdown"
Elements.Dropdown.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Elements.Dropdown.BackgroundTransparency = 0.985
Elements.Dropdown.BorderSizePixel = 0
Elements.Dropdown.Size = UDim2.new(1, 0, 0, 38)
Elements.Dropdown.ClipsDescendants = true
Elements.Dropdown.Parent = Section
local DropdownUIPadding = Instance.new("UIPadding")
DropdownUIPadding.PaddingLeft = UDim.new(0, 15)
DropdownUIPadding.PaddingRight = UDim.new(0, 15)
DropdownUIPadding.Parent = Elements.Dropdown
local DropdownUIStroke = Instance.new("UIStroke")
DropdownUIStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
DropdownUIStroke.Color = Color3.fromRGB(255, 255, 255)
DropdownUIStroke.Transparency = 0.95
DropdownUIStroke.Parent = Elements.Dropdown
local DropdownUICorner = Instance.new("UICorner")
DropdownUICorner.CornerRadius = UDim.new(0, 6)
DropdownUICorner.Parent = Elements.Dropdown
Elements.Interact = Instance.new("TextButton")
Elements.Interact.Name = "Interact"
Elements.Interact.FontFace = Font.new("rbxasset://fonts/families/SourceSansPro.json")
Elements.Interact.Text = ""
Elements.Interact.BackgroundTransparency = 1
Elements.Interact.BorderSizePixel = 0
Elements.Interact.Size = UDim2.new(1, 0, 0, 38)
Elements.Interact.Parent = Elements.Dropdown
Elements.DropdownName = Instance.new("TextLabel")
Elements.DropdownName.Name = "DropdownName"
Elements.DropdownName.FontFace = Font.new(Assets.InterFont)
Elements.DropdownName.Text = Settings.Default and (Settings.Name .. " • " .. table.concat(DropdownFunctions.Selected, ", ")) or (Settings.Name .. "...")
Elements.DropdownName.RichText = true
Elements.DropdownName.TextColor3 = WindowFunctions:GetCurrentThemeAttribute("TextPrimary")
Elements.DropdownName.TextSize = 13
Elements.DropdownName.TextTransparency = 0.5
Elements.DropdownName.TextTruncate = Enum.TextTruncate.SplitWord
Elements.DropdownName.TextXAlignment = Enum.TextXAlignment.Left
Elements.DropdownName.AutomaticSize = Enum.AutomaticSize.Y
Elements.DropdownName.BackgroundTransparency = 1
Elements.DropdownName.BorderSizePixel = 0
Elements.DropdownName.Size = UDim2.new(1, -20, 0, 38)
Elements.DropdownName.Parent = Elements.Dropdown
if Settings.PremiumFeature then
Elements.DropdownName.TextTransparency = 0
local PremiumGradient = Instance.new("UIGradient")
PremiumGradient.Color = WindowFunctions:GetCurrentThemeAttribute("PremiumGradientColor") or ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(0, 106, 255)),
ColorSequenceKeypoint.new(0.2, Color3.fromRGB(163, 201, 255)),
ColorSequenceKeypoint.new(0.4, Color3.fromRGB(255, 255, 255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(163, 201, 255))
})
PremiumGradient.Parent = Elements.DropdownName
end
Elements.DropdownImage = Instance.new("ImageLabel")
Elements.DropdownImage.Name = "DropdownImage"
Elements.DropdownImage.Image = Assets.PackageClosed
Elements.DropdownImage.ImageTransparency = 0.5
Elements.DropdownImage.AnchorPoint = Vector2.new(1, 0)
Elements.DropdownImage.BackgroundTransparency = 1
Elements.DropdownImage.BorderSizePixel = 0
Elements.DropdownImage.Position = UDim2.new(1, 2, 0, 10)
Elements.DropdownImage.Size = UDim2.fromOffset(18, 18)
Elements.DropdownImage.Parent = Elements.Dropdown
if Settings.DropdownEditor then
Elements.EditorButton = Instance.new("ImageButton")
Elements.EditorButton.Name = "EditorButton"
Elements.EditorButton.Image = Assets.Dropdown
Elements.EditorButton.ImageTransparency = 0.5
Elements.EditorButton.AnchorPoint = Vector2.new(1, 0)
Elements.EditorButton.BackgroundTransparency = 1
Elements.EditorButton.BorderSizePixel = 0
Elements.EditorButton.Position = UDim2.new(1, -20, 0, 12)
Elements.EditorButton.Size = UDim2.fromOffset(14, 14)
Elements.EditorButton.Parent = Elements.Dropdown
end
-- The option list is its OWN ScrollingFrame, sitting BELOW the 38px
-- header. On mobile, an Active + scrollable inner ScrollingFrame
-- captures the touch-drag, so dragging the options scrolls THIS list
-- (reaching items below the fold) instead of the tab content behind
-- it. Sized below the header so scrolled options never overlap the title.
Elements.DropdownFrame = Instance.new("ScrollingFrame")
Elements.DropdownFrame.Name = "DropdownFrame"
Elements.DropdownFrame.BackgroundTransparency = 1
Elements.DropdownFrame.BorderSizePixel = 0
Elements.DropdownFrame.ClipsDescendants = true
Elements.DropdownFrame.Position = UDim2.new(0, 0, 0, 38)
Elements.DropdownFrame.Size = UDim2.new(1, 0, 1, -38)
Elements.DropdownFrame.Visible = false
Elements.DropdownFrame.Active = true
Elements.DropdownFrame.AutomaticCanvasSize = Enum.AutomaticSize.Y
Elements.DropdownFrame.CanvasSize = UDim2.new()
Elements.DropdownFrame.ScrollingDirection = Enum.ScrollingDirection.Y
Elements.DropdownFrame.ScrollBarThickness = 3
Elements.DropdownFrame.ScrollBarImageColor3 = Color3.fromRGB(255, 255, 255)
Elements.DropdownFrame.ScrollBarImageTransparency = 0.5
Elements.DropdownFrame.BottomImage = ""
Elements.DropdownFrame.TopImage = ""
Elements.DropdownFrame.Parent = Elements.Dropdown
local DropdownFrameUIPadding = Instance.new("UIPadding")
DropdownFrameUIPadding.PaddingTop = UDim.new(0, 4)
DropdownFrameUIPadding.PaddingBottom = UDim.new(0, 10)
DropdownFrameUIPadding.Parent = Elements.DropdownFrame
Elements.DropdownFrameUIListLayout = Instance.new("UIListLayout")
Elements.DropdownFrameUIListLayout.Padding = UDim.new(0, 5)
Elements.DropdownFrameUIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
Elements.DropdownFrameUIListLayout.Parent = Elements.DropdownFrame
return Elements
end
local function CreateSearchBox()
if not Settings.Search or Settings.Editor then return end
DropdownFunctions.Elements.Search = Instance.new("Frame")
DropdownFunctions.Elements.Search.Name = "Search"
DropdownFunctions.Elements.Search.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
DropdownFunctions.Elements.Search.BackgroundTransparency = 0.95
DropdownFunctions.Elements.Search.BorderSizePixel = 0
DropdownFunctions.Elements.Search.LayoutOrder = -1
DropdownFunctions.Elements.Search.Size = UDim2.new(1, 0, 0, 30)
DropdownFunctions.Elements.Search.Visible = true
DropdownFunctions.Elements.Search.Parent = DropdownFunctions.Elements.DropdownFrame
local SectionUICorner = Instance.new("UICorner")
SectionUICorner.Parent = DropdownFunctions.Elements.Search
DropdownFunctions.Elements.SearchIcon = Instance.new("ImageLabel")
DropdownFunctions.Elements.SearchIcon.Name = "SearchIcon"
DropdownFunctions.Elements.SearchIcon.Image = Assets.SearchIcon
DropdownFunctions.Elements.SearchIcon.ImageColor3 = Color3.fromRGB(180, 180, 180)
DropdownFunctions.Elements.SearchIcon.AnchorPoint = Vector2.new(0, 0.5)
DropdownFunctions.Elements.SearchIcon.BackgroundTransparency = 1
DropdownFunctions.Elements.SearchIcon.BorderSizePixel = 0
DropdownFunctions.Elements.SearchIcon.Position = UDim2.fromScale(0, 0.5)
DropdownFunctions.Elements.SearchIcon.Size = UDim2.fromOffset(12, 12)
DropdownFunctions.Elements.SearchIcon.Parent = DropdownFunctions.Elements.Search
if not Utility:IsPremiumHubUser() and Settings.PremiumFeature then
DropdownFunctions.Elements.SearchIcon.ImageTransparency = 0.6
end
local UIPadding = Instance.new("UIPadding")
UIPadding.PaddingLeft = UDim.new(0, 15)
UIPadding.Parent = DropdownFunctions.Elements.Search
DropdownFunctions.Elements.SearchBox = Instance.new("TextBox")
DropdownFunctions.Elements.SearchBox.Name = "SearchBox"
DropdownFunctions.Elements.SearchBox.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.Medium, Enum.FontStyle.Normal)
DropdownFunctions.Elements.SearchBox.PlaceholderColor3 = Color3.fromRGB(150, 150, 150)
DropdownFunctions.Elements.SearchBox.PlaceholderText = "Search..."
DropdownFunctions.Elements.SearchBox.Text = ""
DropdownFunctions.Elements.SearchBox.TextColor3 = Color3.fromRGB(200, 200, 200)
DropdownFunctions.Elements.SearchBox.TextSize = 14
DropdownFunctions.Elements.SearchBox.TextXAlignment = Enum.TextXAlignment.Left
DropdownFunctions.Elements.SearchBox.BackgroundTransparency = 1
DropdownFunctions.Elements.SearchBox.BorderSizePixel = 0
DropdownFunctions.Elements.SearchBox.Size = UDim2.fromScale(1, 1)
DropdownFunctions.Elements.SearchBox.Parent = DropdownFunctions.Elements.Search
local UIPadding1 = Instance.new("UIPadding")
UIPadding1.PaddingLeft = UDim.new(0, 23)
UIPadding1.Parent = DropdownFunctions.Elements.SearchBox
end
local function CreateEditor()
if not Settings.Editor then return end
DropdownFunctions.Elements.Editor = Instance.new("Frame")
DropdownFunctions.Elements.Editor.Name = "Editor"
DropdownFunctions.Elements.Editor.BackgroundTransparency = 1
DropdownFunctions.Elements.Editor.BorderSizePixel = 0
DropdownFunctions.Elements.Editor.LayoutOrder = -1
DropdownFunctions.Elements.Editor.Size = UDim2.new(1, 0, 0, 30)
DropdownFunctions.Elements.Editor.Visible = true
DropdownFunctions.Elements.Editor.Parent = DropdownFunctions.Elements.DropdownFrame
local EditorUIListLayout = Instance.new("UIListLayout")
EditorUIListLayout.Padding = UDim.new(0, 8)
EditorUIListLayout.FillDirection = Enum.FillDirection.Horizontal
EditorUIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
EditorUIListLayout.VerticalAlignment = Enum.VerticalAlignment.Center
EditorUIListLayout.Parent = DropdownFunctions.Elements.Editor
DropdownFunctions.Elements.SelectAllButton = Instance.new("TextButton")
DropdownFunctions.Elements.SelectAllButton.Name = "SelectAllButton"
DropdownFunctions.Elements.SelectAllButton.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.Medium, Enum.FontStyle.Normal)
DropdownFunctions.Elements.SelectAllButton.Text = "Select All"
DropdownFunctions.Elements.SelectAllButton.TextColor3 = Color3.fromRGB(180, 180, 180)
DropdownFunctions.Elements.SelectAllButton.TextSize = 12
DropdownFunctions.Elements.SelectAllButton.TextXAlignment = Enum.TextXAlignment.Center
DropdownFunctions.Elements.SelectAllButton.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
DropdownFunctions.Elements.SelectAllButton.BackgroundTransparency = 0.95
DropdownFunctions.Elements.SelectAllButton.BorderSizePixel = 0
DropdownFunctions.Elements.SelectAllButton.Size = UDim2.new(0.5, -4, 1, 0)
DropdownFunctions.Elements.SelectAllButton.Parent = DropdownFunctions.Elements.Editor
local SelectAllCorner = Instance.new("UICorner")
SelectAllCorner.CornerRadius = UDim.new(0, 4)
SelectAllCorner.Parent = DropdownFunctions.Elements.SelectAllButton
DropdownFunctions.Elements.ClearAllButton = Instance.new("TextButton")
DropdownFunctions.Elements.ClearAllButton.Name = "ClearAllButton"
DropdownFunctions.Elements.ClearAllButton.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.Medium, Enum.FontStyle.Normal)
DropdownFunctions.Elements.ClearAllButton.Text = "Clear All"
DropdownFunctions.Elements.ClearAllButton.TextColor3 = Color3.fromRGB(180, 180, 180)
DropdownFunctions.Elements.ClearAllButton.TextSize = 12
DropdownFunctions.Elements.ClearAllButton.TextXAlignment = Enum.TextXAlignment.Center
DropdownFunctions.Elements.ClearAllButton.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
DropdownFunctions.Elements.ClearAllButton.BackgroundTransparency = 0.95
DropdownFunctions.Elements.ClearAllButton.BorderSizePixel = 0
DropdownFunctions.Elements.ClearAllButton.Size = UDim2.new(0.5, -4, 1, 0)
DropdownFunctions.Elements.ClearAllButton.Parent = DropdownFunctions.Elements.Editor
local ClearAllCorner = Instance.new("UICorner")
ClearAllCorner.CornerRadius = UDim.new(0, 4)
ClearAllCorner.Parent = DropdownFunctions.Elements.ClearAllButton
if not Utility:IsPremiumHubUser() and Settings.PremiumFeature then
DropdownFunctions.Elements.SelectAllButton.TextTransparency = 0.6
DropdownFunctions.Elements.ClearAllButton.TextTransparency = 0.6
end
end
local function CreateDropdownEditor()
if not Settings.DropdownEditor then return end
DropdownFunctions.Elements.EditorSettings = Instance.new("Frame")
DropdownFunctions.Elements.EditorSettings.Name = "EditorSettings"
DropdownFunctions.Elements.EditorSettings.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
DropdownFunctions.Elements.EditorSettings.BackgroundTransparency = 0.98
DropdownFunctions.Elements.EditorSettings.BorderSizePixel = 0
DropdownFunctions.Elements.EditorSettings.LayoutOrder = -2
DropdownFunctions.Elements.EditorSettings.Size = UDim2.new(1, 0, 0, 150)
DropdownFunctions.Elements.EditorSettings.Visible = false
DropdownFunctions.Elements.EditorSettings.Parent = DropdownFunctions.Elements.DropdownFrame
local EditorCorner = Instance.new("UICorner")
EditorCorner.CornerRadius = UDim.new(0, 6)
EditorCorner.Parent = DropdownFunctions.Elements.EditorSettings
local EditorStroke = Instance.new("UIStroke")
EditorStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
EditorStroke.Color = Color3.fromRGB(255, 255, 255)
EditorStroke.Transparency = 0.95
EditorStroke.Parent = DropdownFunctions.Elements.EditorSettings
local EditorPadding = Instance.new("UIPadding")
EditorPadding.PaddingLeft = UDim.new(0, 15)
EditorPadding.PaddingRight = UDim.new(0, 15)
EditorPadding.PaddingTop = UDim.new(0, 10)
EditorPadding.PaddingBottom = UDim.new(0, 10)
EditorPadding.Parent = DropdownFunctions.Elements.EditorSettings
local EditorLayout = Instance.new("UIListLayout")
EditorLayout.Padding = UDim.new(0, 8)
EditorLayout.SortOrder = Enum.SortOrder.LayoutOrder
EditorLayout.Parent = DropdownFunctions.Elements.EditorSettings
local function CreateToggleOption(Name, DefaultValue)
local ToggleFrame = Instance.new("Frame")
ToggleFrame.Name = Name .. "Frame"
ToggleFrame.BackgroundTransparency = 1
ToggleFrame.Size = UDim2.new(1, 0, 0, 25)
ToggleFrame.Parent = DropdownFunctions.Elements.EditorSettings
local ToggleLabel = Instance.new("TextLabel")
ToggleLabel.Name = Name .. "Label"
ToggleLabel.FontFace = Font.new(Assets.InterFont)
ToggleLabel.Text = Name:gsub("Enable", ""):gsub("(%l)(%u)", "%1 %2")
ToggleLabel.TextColor3 = Color3.fromRGB(200, 200, 200)
ToggleLabel.TextSize = 12
ToggleLabel.TextXAlignment = Enum.TextXAlignment.Left
ToggleLabel.BackgroundTransparency = 1
ToggleLabel.Size = UDim2.new(1, -30, 1, 0)
ToggleLabel.Parent = ToggleFrame
local ToggleButton = Instance.new("ImageButton")
ToggleButton.Name = Name .. "Button"
ToggleButton.Image = Assets.ToggleBackground
ToggleButton.ImageColor3 = Color3.fromRGB(87, 86, 86)
ToggleButton.ImageTransparency = DefaultValue and 0 or 0.5
ToggleButton.AutoButtonColor = false
ToggleButton.AnchorPoint = Vector2.new(1, 0.5)
ToggleButton.BackgroundTransparency = 1
ToggleButton.Position = UDim2.new(1, 0, 0.5, 0)
ToggleButton.Size = UDim2.fromOffset(25, 13)
ToggleButton.Parent = ToggleFrame
local ToggleHead = Instance.new("ImageLabel")
ToggleHead.Name = Name .. "Head"
ToggleHead.Image = Assets.TogglerHead
ToggleHead.ImageColor3 = Color3.fromRGB(255, 255, 255)
ToggleHead.ImageTransparency = DefaultValue and 0 or 0.85
ToggleHead.AnchorPoint = Vector2.new(1, 0.5)
ToggleHead.BackgroundTransparency = 1
ToggleHead.Position = DefaultValue and UDim2.new(1, 0, 0.5, 0) or UDim2.new(0.5, 0, 0.5, 0)
ToggleHead.Size = UDim2.fromOffset(9, 9)
ToggleHead.ZIndex = 2
ToggleHead.Parent = ToggleButton
return ToggleFrame, ToggleButton, ToggleHead
end
local EnableSearchFrame, EnableSearchButton, EnableSearchHead = CreateToggleOption("EnableSearch", Settings.Search)
local EnableClearFrame, EnableClearButton, EnableClearHead = CreateToggleOption("EnableClear", Settings.Editor)
local EnableSelectFrame, EnableSelectButton, EnableSelectHead = CreateToggleOption("EnableSelect", Settings.Editor)
local AddOptionFrame = Instance.new("Frame")
AddOptionFrame.Name = "AddOptionFrame"
AddOptionFrame.BackgroundTransparency = 1
AddOptionFrame.Size = UDim2.new(1, 0, 0, 25)
AddOptionFrame.Parent = DropdownFunctions.Elements.EditorSettings
local AddOptionBox = Instance.new("TextBox")
AddOptionBox.Name = "AddOptionBox"
AddOptionBox.FontFace = Font.new(Assets.InterFont)
AddOptionBox.PlaceholderText = "Add Option..."
AddOptionBox.Text = ""
AddOptionBox.TextColor3 = Color3.fromRGB(200, 200, 200)
AddOptionBox.TextSize = 12
AddOptionBox.TextXAlignment = Enum.TextXAlignment.Left
AddOptionBox.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
AddOptionBox.BackgroundTransparency = 0.95
AddOptionBox.BorderSizePixel = 0
AddOptionBox.Size = UDim2.new(1, -30, 1, 0)
AddOptionBox.Parent = AddOptionFrame
local AddOptionCorner = Instance.new("UICorner")
AddOptionCorner.CornerRadius = UDim.new(0, 4)
AddOptionCorner.Parent = AddOptionBox
local AddOptionPadding = Instance.new("UIPadding")
AddOptionPadding.PaddingLeft = UDim.new(0, 8)
AddOptionPadding.Parent = AddOptionBox
local AddOptionButton = Instance.new("ImageButton")
AddOptionButton.Name = "AddOptionButton"
AddOptionButton.Image = "rbxassetid://7733964046"
AddOptionButton.ImageColor3 = Color3.fromRGB(180, 180, 180)
AddOptionButton.ImageTransparency = 0.3
AddOptionButton.AnchorPoint = Vector2.new(1, 0.5)
AddOptionButton.BackgroundTransparency = 1
AddOptionButton.Position = UDim2.new(1, 0, 0.5, 0)
AddOptionButton.Size = UDim2.fromOffset(20, 20)
AddOptionButton.Parent = AddOptionFrame
DropdownFunctions.Elements.EditorToggles = {
Search = {Button = EnableSearchButton, Head = EnableSearchHead, State = Settings.Search},
Clear = {Button = EnableClearButton, Head = EnableClearHead, State = Settings.Editor},
Select = {Button = EnableSelectButton, Head = EnableSelectHead, State = Settings.Editor},
AddBox = AddOptionBox,
AddButton = AddOptionButton
}
end
-- Dropdown header is a fixed 38px bar at the top; the option list lives
-- in the ScrollingFrame below it. We cap the option window so long lists
-- (e.g. a big shop) scroll INSIDE the dropdown instead of expanding the
-- whole tab off-screen.
local DROPDOWN_HEADER_HEIGHT = 38
local MAX_OPTIONS_HEIGHT = 200
local function CalculateDropdownSize()
local TotalHeight = 0
local VisibleChildrenCount = 0
local Padding = DropdownFunctions.Elements.DropdownFrame:FindFirstChild("UIPadding")
local PaddingOffset = Padding and (Padding.PaddingTop.Offset + Padding.PaddingBottom.Offset) or 0
for _, V in pairs(DropdownFunctions.Elements.DropdownFrame:GetChildren()) do
if not V:IsA("UIComponent") and V.Visible then
TotalHeight += V.AbsoluteSize.Y
VisibleChildrenCount += 1
end
end
local Spacing = DropdownFunctions.Elements.DropdownFrameUIListLayout.Padding.Offset * math.max(0, VisibleChildrenCount - 1)
local OptionsHeight = TotalHeight + Spacing + PaddingOffset
-- Cap so the inner ScrollingFrame takes over for long option lists.
if OptionsHeight > MAX_OPTIONS_HEIGHT then
OptionsHeight = MAX_OPTIONS_HEIGHT
end
return DROPDOWN_HEADER_HEIGHT + OptionsHeight
end
local function FindOption()
if not DropdownFunctions.Elements.SearchBox then return end
local SearchTerm = DropdownFunctions.Elements.SearchBox.Text:lower()
for _, V in pairs(DropdownFunctions.OptionObjs) do
local OptionText = V.NameLabel.Text:lower()
local IsVisible = string.find(OptionText, SearchTerm) ~= nil
V.Button.Visible = IsVisible
end
if DropdownFunctions.Dropped then
DropdownFunctions.Elements.Dropdown.Size = UDim2.new(1, 0, 0, CalculateDropdownSize())
end
end
local function Toggle(OptionName, State)
local Option = DropdownFunctions.OptionObjs[OptionName]
if not Option then return end
local Checkmark = Option.Checkmark
local OptionNameLabel = Option.NameLabel
if State then
if Settings.Multi then
if not table.find(DropdownFunctions.Selected, OptionName) then
table.insert(DropdownFunctions.Selected, OptionName)
DropdownFunctions.Value = DropdownFunctions.Selected
end
else
for Name, Opt in pairs(DropdownFunctions.OptionObjs) do
if Name ~= OptionName then
Utility:PropertyTween(Opt.Checkmark, TweenInfo.new(TWEEN_SETTINGS.Duration, TWEEN_SETTINGS.EasingStyle), {
Size = UDim2.new(Opt.Checkmark.Size.X.Scale, TWEEN_SETTINGS.CheckSizeDecrease, Opt.Checkmark.Size.Y.Scale, Opt.Checkmark.Size.Y.Offset)
}):Play()
Utility:PropertyTween(Opt.NameLabel, TweenInfo.new(TWEEN_SETTINGS.Duration, TWEEN_SETTINGS.EasingStyle), {
TextTransparency = TWEEN_SETTINGS.TransparencyOut
}):Play()
Opt.Checkmark.TextTransparency = 1
end
end
DropdownFunctions.Selected = {OptionName}
DropdownFunctions.Value = DropdownFunctions.Selected[1]
end
Utility:PropertyTween(Checkmark, TweenInfo.new(TWEEN_SETTINGS.Duration, TWEEN_SETTINGS.EasingStyle), {
Size = UDim2.new(Checkmark.Size.X.Scale, TWEEN_SETTINGS.CheckSizeIncrease, Checkmark.Size.Y.Scale, Checkmark.Size.Y.Offset)
}):Play()
Utility:PropertyTween(OptionNameLabel, TweenInfo.new(TWEEN_SETTINGS.Duration, TWEEN_SETTINGS.EasingStyle), {
TextTransparency = TWEEN_SETTINGS.TransparencyIn
}):Play()
Checkmark.TextTransparency = 0
else
if Settings.Multi then
local Idx = table.find(DropdownFunctions.Selected, OptionName)
if Idx then table.remove(DropdownFunctions.Selected, Idx) end
else
DropdownFunctions.Selected = {}
end
Utility:PropertyTween(Checkmark, TweenInfo.new(TWEEN_SETTINGS.Duration, TWEEN_SETTINGS.EasingStyle), {
Size = UDim2.new(Checkmark.Size.X.Scale, TWEEN_SETTINGS.CheckSizeDecrease, Checkmark.Size.Y.Scale, Checkmark.Size.Y.Offset)
}):Play()
Utility:PropertyTween(OptionNameLabel, TweenInfo.new(TWEEN_SETTINGS.Duration, TWEEN_SETTINGS.EasingStyle), {
TextTransparency = TWEEN_SETTINGS.TransparencyOut
}):Play()
Checkmark.TextTransparency = 1
end
if Settings.Required and #DropdownFunctions.Selected == 0 and not State then
return
end
if #DropdownFunctions.Selected > 0 then
DropdownFunctions.Elements.DropdownName.Text = Settings.Name .. " • " .. table.concat(DropdownFunctions.Selected, ", ")
else
DropdownFunctions.Elements.DropdownName.Text = Settings.Name .. "..."
end
end
local function ToggleDropdown()
if DropdownFunctions.IsHidden or DropdownFunctions.Debounce then return end
if not Utility:IsPremiumHubUser() and Settings.PremiumFeature then return end
DropdownFunctions.Debounce = true
local DefaultDropdownSize = 38
local IsDropdownOpen = not DropdownFunctions.Dropped
local TargetSize = IsDropdownOpen and UDim2.new(1, 0, 0, CalculateDropdownSize()) or UDim2.new(1, 0, 0, DefaultDropdownSize)
local DropTween = Utility:PropertyTween(DropdownFunctions.Elements.Dropdown, TweenInfo.new(0.2, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {
Size = TargetSize
})
Utility:PropertyTween(DropdownFunctions.Elements.DropdownImage, TweenInfo.new(0.075, Enum.EasingStyle.Quad, Enum.EasingDirection.Out, 0, true), {
ImageTransparency = 0.8
}):Play()
task.delay(0.05, function()
DropdownFunctions.Elements.DropdownImage.Image = IsDropdownOpen and Assets.PackageOpened or Assets.PackageClosed
end)
DropTween:Play()
if IsDropdownOpen then
DropdownFunctions.Elements.DropdownFrame.Visible = true
DropTween.Completed:Connect(function()
DropdownFunctions.Debounce = false
end)
else
DropTween.Completed:Connect(function()
DropdownFunctions.Elements.DropdownFrame.Visible = false
DropdownFunctions.Debounce = false
end)
end
DropdownFunctions.Dropped = IsDropdownOpen
end
local function ToggleEditorSettings()
if DropdownFunctions.IsHidden or not DropdownFunctions.Elements.EditorSettings then return end
local IsVisible = DropdownFunctions.Elements.EditorSettings.Visible
DropdownFunctions.Elements.EditorSettings.Visible = not IsVisible
if DropdownFunctions.Dropped then
DropdownFunctions.Elements.Dropdown.Size = UDim2.new(1, 0, 0, CalculateDropdownSize())
end
end
local function HandleEditorToggle(ToggleName)
local ToggleData = DropdownFunctions.Elements.EditorToggles[ToggleName]
if not ToggleData then return end
ToggleData.State = not ToggleData.State
local TransparencyValues = ToggleData.State and {0, 0} or {0.5, 0.85}
local Position = ToggleData.State and UDim2.new(1, 0, 0.5, 0) or UDim2.new(0.5, 0, 0.5, 0)
Utility:PropertyTween(ToggleData.Button, TweenInfo.new(0.2, Enum.EasingStyle.Sine), {
ImageTransparency = TransparencyValues[1]
}):Play()
Utility:PropertyTween(ToggleData.Head, TweenInfo.new(0.2, Enum.EasingStyle.Sine), {
ImageTransparency = TransparencyValues[2],
Position = Position
}):Play()
if ToggleName == "Search" then
if DropdownFunctions.Elements.Search then
DropdownFunctions.Elements.Search.Visible = ToggleData.State
end
elseif ToggleName == "Clear" or ToggleName == "Select" then
if DropdownFunctions.Elements.Editor then
local ShouldShow = DropdownFunctions.Elements.EditorToggles.Clear.State or DropdownFunctions.Elements.EditorToggles.Select.State
DropdownFunctions.Elements.Editor.Visible = ShouldShow
if DropdownFunctions.Elements.SelectAllButton then
DropdownFunctions.Elements.SelectAllButton.Visible = DropdownFunctions.Elements.EditorToggles.Select.State
end
if DropdownFunctions.Elements.ClearAllButton then
DropdownFunctions.Elements.ClearAllButton.Visible = DropdownFunctions.Elements.EditorToggles.Clear.State
end
end
end
if DropdownFunctions.Dropped then
DropdownFunctions.Elements.Dropdown.Size = UDim2.new(1, 0, 0, CalculateDropdownSize())
end
end
local function HandleAddOption()
local OptionText = DropdownFunctions.Elements.EditorToggles.AddBox.Text:match("^%s*(.-)%s*$")
if OptionText == "" or DropdownFunctions.OptionObjs[OptionText] then return end
AddOption(#DropdownFunctions.OptionObjs + 1, OptionText)
DropdownFunctions.Elements.EditorToggles.AddBox.Text = ""
if DropdownFunctions.Dropped then
DropdownFunctions.Elements.Dropdown.Size = UDim2.new(1, 0, 0, CalculateDropdownSize())
end
end
local function AddOption(I, V, C)
if typeof(V) == "table" then
C = V.Color
V = V.Name
end
local Option = Instance.new("TextButton")
Option.Name = "Option"
Option.FontFace = Font.new("rbxasset://fonts/families/SourceSansPro.json")
Option.Text = ""
Option.BackgroundTransparency = 1
Option.BorderSizePixel = 0
Option.Size = UDim2.new(1, 0, 0, 30)
local OptionUIPadding = Instance.new("UIPadding")
OptionUIPadding.PaddingLeft = UDim.new(0, 15)
OptionUIPadding.Parent = Option
local OptionUIListLayout = Instance.new("UIListLayout")
OptionUIListLayout.Padding = UDim.new(0, 10)
OptionUIListLayout.FillDirection = Enum.FillDirection.Horizontal
OptionUIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
OptionUIListLayout.VerticalAlignment = Enum.VerticalAlignment.Center
OptionUIListLayout.Parent = Option
local Checkmark = Instance.new("TextLabel")
Checkmark.Name = "Checkmark"
Checkmark.FontFace = Font.new(Assets.InterFont)
Checkmark.Text = "✓"
Checkmark.TextColor3 = Color3.fromRGB(255, 255, 255)
Checkmark.TextSize = 13
Checkmark.TextTransparency = 1
Checkmark.TextXAlignment = Enum.TextXAlignment.Left
Checkmark.TextYAlignment = Enum.TextYAlignment.Top
Checkmark.AnchorPoint = Vector2.new(0, 0.5)
Checkmark.AutomaticSize = Enum.AutomaticSize.Y
Checkmark.BackgroundTransparency = 1
Checkmark.BorderSizePixel = 0
Checkmark.LayoutOrder = -1
Checkmark.Position = UDim2.fromScale(0, 0.5)
Checkmark.Size = UDim2.fromOffset(-OptionUIListLayout.Padding.Offset, 0)
Checkmark.Parent = Option
local OptionName = Instance.new("TextLabel")
OptionName.Name = "OptionName"
OptionName.FontFace = Font.new(Assets.InterFont)
OptionName.Text = V
OptionName.RichText = true
OptionName.TextColor3 = C or Color3.fromRGB(255, 255, 255)
OptionName.TextSize = 13
OptionName.TextTransparency = 0.5
OptionName.TextTruncate = Enum.TextTruncate.AtEnd
OptionName.TextXAlignment = Enum.TextXAlignment.Left
OptionName.TextYAlignment = Enum.TextYAlignment.Top
OptionName.AnchorPoint = Vector2.new(0, 0.5)
OptionName.AutomaticSize = Enum.AutomaticSize.XY
OptionName.BackgroundTransparency = 1
OptionName.BorderSizePixel = 0
OptionName.Position = UDim2.fromScale(0, 0.5)
OptionName.Parent = Option
if C then
OptionName:SetAttribute("NoApplyTheme", true)
end
Option.Parent = DropdownFunctions.Elements.DropdownFrame
DropdownFunctions.OptionObjs[V] = {
Index = I,
Button = Option,
NameLabel = OptionName,
Checkmark = Checkmark
}
if Settings.Default and typeof(Settings.Options) ~= "string" then
if Settings.Multi then
if type(Settings.Default) == "number" then
Toggle(Settings.Options[Settings.Default], true)
else
Toggle(V, table.find(Settings.Default, V) and true or false)
end
elseif type(Settings.Default) == "number" then
Toggle(Settings.Options[Settings.Default], true)
end
end
-- The inner DropdownFrame ScrollingFrame handles touch scrolling
-- natively; a drag over an option scrolls the list and Roblox
-- cancels the click, so taps still select cleanly.
DropdownFunctions.Maid["Option" .. V .. "Click"] = Option.MouseButton1Click:Connect(function()
if DropdownFunctions.IsHidden then return end
local IsSelected = table.find(DropdownFunctions.Selected, V) and true or false
local NewSelected = not IsSelected
if Settings.Required and not NewSelected and #DropdownFunctions.Selected <= 1 then
return
end
Toggle(V, NewSelected)
task.spawn(function()
if Settings.Callback then
if Settings.Multi then
local Return = {}
for _, Opt in ipairs(DropdownFunctions.Selected) do
Return[Opt] = true
end
Settings.Callback(Return)
else
if NewSelected then
Settings.Callback(DropdownFunctions.Selected[1] or nil)
end
end
end
end)
end)
if not Settings.PremiumFeature then
DropdownFunctions.Maid["Option" .. V .. "Hover"] = Option.MouseEnter:Connect(function()
if DropdownFunctions.IsHidden then return end
Utility:QuickTween(OptionName, {TextTransparency = 0})
end)
DropdownFunctions.Maid["Option" .. V .. "Leave"] = Option.MouseLeave:Connect(function()
if DropdownFunctions.IsHidden then return end
Utility:QuickTween(OptionName, {
TextTransparency = table.find(DropdownFunctions.Selected, V) and 0 or 0.5
})
end)
end
if DropdownFunctions.Dropped then
DropdownFunctions.Elements.Dropdown.Size = UDim2.new(1, 0, 0, CalculateDropdownSize())
end
end
local function SetupConnections()
DropdownFunctions.Maid.DropdownClick = DropdownFunctions.Elements.Interact.MouseButton1Click:Connect(ToggleDropdown)
if not Settings.PremiumFeature then
DropdownFunctions.Maid.DropdownHover = DropdownFunctions.Elements.Interact.MouseEnter:Connect(function()
if DropdownFunctions.IsHidden then return end
Utility:QuickTween(DropdownFunctions.Elements.DropdownName, {TextTransparency = 0})
Utility:QuickTween(DropdownFunctions.Elements.DropdownImage, {ImageTransparency = 0})
end)
DropdownFunctions.Maid.DropdownLeave = DropdownFunctions.Elements.Interact.MouseLeave:Connect(function()
if DropdownFunctions.IsHidden then return end
Utility:QuickTween(DropdownFunctions.Elements.DropdownName, {TextTransparency = 0.5})
Utility:QuickTween(DropdownFunctions.Elements.DropdownImage, {ImageTransparency = 0.5})
end)
end
if DropdownFunctions.Elements.SearchBox then
DropdownFunctions.Maid.SearchTextChanged = DropdownFunctions.Elements.SearchBox:GetPropertyChangedSignal("Text"):Connect(FindOption)
end
if DropdownFunctions.Elements.SelectAllButton then
if not Settings.PremiumFeature then
DropdownFunctions.Maid.SelectAllHover = DropdownFunctions.Elements.SelectAllButton.MouseEnter:Connect(function()
if DropdownFunctions.IsHidden then return end
Utility:QuickTween(DropdownFunctions.Elements.SelectAllButton, {
TextTransparency = 0,
BackgroundTransparency = 0.9
})
end)
DropdownFunctions.Maid.SelectAllLeave = DropdownFunctions.Elements.SelectAllButton.MouseLeave:Connect(function()
if DropdownFunctions.IsHidden then return end
Utility:QuickTween(DropdownFunctions.Elements.SelectAllButton, {
TextTransparency = 0.3,
BackgroundTransparency = 0.95
})
end)
end
DropdownFunctions.Maid.SelectAllClick = DropdownFunctions.Elements.SelectAllButton.MouseButton1Click:Connect(function()
if DropdownFunctions.IsHidden then return end
if not Utility:IsPremiumHubUser() and Settings.PremiumFeature then return end
local SelectedOptions = {}
for OptionName, OptionData in pairs(DropdownFunctions.OptionObjs) do
if OptionData.Button.Visible then
Toggle(OptionName, true)
table.insert(SelectedOptions, OptionName)
end
end
task.spawn(function()
if Settings.Callback then
if Settings.Multi then
local Return = {}
for _, Opt in ipairs(SelectedOptions) do
Return[Opt] = true
end
Settings.Callback(Return)
else
Settings.Callback(SelectedOptions[1] or nil)
end
end
end)
end)
end
if DropdownFunctions.Elements.ClearAllButton then
if not Settings.PremiumFeature then
DropdownFunctions.Maid.ClearAllHover = DropdownFunctions.Elements.ClearAllButton.MouseEnter:Connect(function()
if DropdownFunctions.IsHidden then return end
Utility:QuickTween(DropdownFunctions.Elements.ClearAllButton, {
TextTransparency = 0,
BackgroundTransparency = 0.9
})
end)
DropdownFunctions.Maid.ClearAllLeave = DropdownFunctions.Elements.ClearAllButton.MouseLeave:Connect(function()
if DropdownFunctions.IsHidden then return end
Utility:QuickTween(DropdownFunctions.Elements.ClearAllButton, {
TextTransparency = 0.3,
BackgroundTransparency = 0.95
})
end)
end
DropdownFunctions.Maid.ClearAllClick = DropdownFunctions.Elements.ClearAllButton.MouseButton1Click:Connect(function()
if DropdownFunctions.IsHidden then return end
if not Utility:IsPremiumHubUser() and Settings.PremiumFeature then return end
if Settings.Required and #DropdownFunctions.Selected <= 1 then return end
for OptionName, _ in pairs(DropdownFunctions.OptionObjs) do
Toggle(OptionName, false)
end
task.spawn(function()
if Settings.Callback then
if Settings.Multi then
Settings.Callback({})
else
Settings.Callback(nil)
end
end
end)
end)
end
if DropdownFunctions.Elements.EditorButton then
DropdownFunctions.Maid.EditorClick = DropdownFunctions.Elements.EditorButton.MouseButton1Click:Connect(ToggleEditorSettings)
end
if DropdownFunctions.Elements.EditorToggles then
for ToggleName, ToggleData in pairs(DropdownFunctions.Elements.EditorToggles) do
if ToggleName ~= "AddBox" and ToggleName ~= "AddButton" and ToggleData.Button then
DropdownFunctions.Maid["Editor" .. ToggleName .. "Click"] = ToggleData.Button.MouseButton1Click:Connect(function()
HandleEditorToggle(ToggleName)
end)
end
end
if DropdownFunctions.Elements.EditorToggles.AddButton then
DropdownFunctions.Maid.AddOptionClick = DropdownFunctions.Elements.EditorToggles.AddButton.MouseButton1Click:Connect(HandleAddOption)
end
if DropdownFunctions.Elements.EditorToggles.AddBox then
DropdownFunctions.Maid.AddOptionEnter = DropdownFunctions.Elements.EditorToggles.AddBox.FocusLost:Connect(function(EnterPressed)
if EnterPressed then HandleAddOption() end
end)
end
end
end
function DropdownFunctions:SetToolTip(Tip)
if DropdownFunctions.Maid.TooltipShow then
DropdownFunctions.Maid.TooltipShow:Disconnect()
DropdownFunctions.Maid.TooltipShow = nil
end
if DropdownFunctions.Maid.TooltipHide then
DropdownFunctions.Maid.TooltipHide:Disconnect()
DropdownFunctions.Maid.TooltipHide = nil
end
if DropdownFunctions.Elements.Dropdown:FindFirstChild("ToolTipFrame") then
DropdownFunctions.Elements.Dropdown:FindFirstChild("ToolTipFrame"):Destroy()
end
if not Tip or Tip == "" then return end
local ToolTipFrame = Instance.new("Frame")
ToolTipFrame.Name = "ToolTipFrame"
ToolTipFrame.BackgroundColor3 = Color3.fromRGB(18, 18, 18)
ToolTipFrame.BackgroundTransparency = 1
ToolTipFrame.BorderSizePixel = 0
ToolTipFrame.AnchorPoint = Vector2.new(0.5, 1)
ToolTipFrame.Position = UDim2.new(0.5, 0, 0, -5)
ToolTipFrame.Visible = false
ToolTipFrame.ZIndex = 200
ToolTipFrame.Parent = DropdownFunctions.Elements.Dropdown
local TooltipCorner = Instance.new("UICorner")
TooltipCorner.CornerRadius = UDim.new(0, 6)
TooltipCorner.Parent = ToolTipFrame
local TooltipStroke = Instance.new("UIStroke")
TooltipStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
TooltipStroke.LineJoinMode = Enum.LineJoinMode.Round
TooltipStroke.Color = Color3.fromRGB(255, 255, 255)
TooltipStroke.Thickness = 0.1
TooltipStroke.Transparency = 0.2
TooltipStroke.Parent = ToolTipFrame
local TooltipText = Instance.new("TextLabel")
TooltipText.Text = Tip
TooltipText.FontFace = Font.new(Assets.InterFont)
TooltipText.TextColor3 = Color3.fromRGB(200, 220, 200)
TooltipText.TextSize = 12
TooltipText.TextTransparency = 1
TooltipText.BackgroundTransparency = 1
TooltipText.TextXAlignment = Enum.TextXAlignment.Center
TooltipText.TextYAlignment = Enum.TextYAlignment.Center
TooltipText.Size = UDim2.new(1, -12, 1, 0)
TooltipText.Position = UDim2.new(0, 6, 0, 0)
TooltipText.Parent = ToolTipFrame
local TextBounds = Services.TextService:GetTextSize(Tip, TooltipText.TextSize, Enum.Font.SourceSansBold, Vector2.new(math.huge, math.huge))
local TooltipWidth = math.max(80, TextBounds.X + 50)
local TooltipHeight = math.max(28, TextBounds.Y + 12)
ToolTipFrame.Size = UDim2.new(0, TooltipWidth, 0, TooltipHeight)
local function ShowTooltip()
DropdownFunctions.Elements.Dropdown.ClipsDescendants = false
ToolTipFrame.Visible = true
Services.TweenService:Create(ToolTipFrame, TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {BackgroundTransparency = 0.1}):Play()
Services.TweenService:Create(TooltipText, TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {TextTransparency = 0}):Play()
Services.TweenService:Create(TooltipStroke, TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Transparency = 0.8}):Play()
end
local function HideTooltip()
DropdownFunctions.Elements.Dropdown.ClipsDescendants = true
Services.TweenService:Create(ToolTipFrame, TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {BackgroundTransparency = 1}):Play()
Services.TweenService:Create(TooltipText, TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {TextTransparency = 1}):Play()
Services.TweenService:Create(TooltipStroke, TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Transparency = 1}):Play()
task.spawn(function()
task.wait(0.2)
if ToolTipFrame and ToolTipFrame.Parent then
ToolTipFrame.Visible = false
end
end)
end
if not DropdownFunctions.IsHidden then
DropdownFunctions.Maid.TooltipShow = DropdownFunctions.Elements.Interact.MouseEnter:Connect(ShowTooltip)
DropdownFunctions.Maid.TooltipHide = DropdownFunctions.Elements.Interact.MouseLeave:Connect(HideTooltip)
end
end
function DropdownFunctions:SetHidden(State, Reason)
if Reason then
self:SetToolTip(Reason)
end
DropdownFunctions.IsHidden = State
local PreviousTransparency = 0.5
if State then
if not Settings.PremiumFeature then
PreviousTransparency = DropdownFunctions.Elements.DropdownName.TextTransparency
end
if DropdownFunctions.Dropped then
ToggleDropdown()
end
Services.TweenService:Create(DropdownFunctions.Elements.DropdownName, TweenInfo.new(0.2), {
TextTransparency = Settings.PremiumFeature and DropdownFunctions.Elements.DropdownName.TextTransparency or 0.9
}):Play()
Services.TweenService:Create(DropdownFunctions.Elements.DropdownImage, TweenInfo.new(0.2), {ImageTransparency = 0.9}):Play()
Services.TweenService:Create(DropdownFunctions.Elements.Dropdown, TweenInfo.new(0.2), {BackgroundTransparency = 0.99}):Play()
local DropdownUIStroke = DropdownFunctions.Elements.Dropdown:FindFirstChild("UIStroke")
if DropdownUIStroke then
Services.TweenService:Create(DropdownUIStroke, TweenInfo.new(0.2), {Transparency = 0.98}):Play()
end
if DropdownFunctions.Elements.SearchIcon then
Services.TweenService:Create(DropdownFunctions.Elements.SearchIcon, TweenInfo.new(0.2), {ImageTransparency = 0.9}):Play()
end
if DropdownFunctions.Elements.SearchBox then
Services.TweenService:Create(DropdownFunctions.Elements.SearchBox, TweenInfo.new(0.2), {TextTransparency = 0.9}):Play()
DropdownFunctions.Elements.SearchBox.TextEditable = false
end
if DropdownFunctions.Elements.SelectAllButton then
Services.TweenService:Create(DropdownFunctions.Elements.SelectAllButton, TweenInfo.new(0.2), {
TextTransparency = 0.9,
BackgroundTransparency = 0.98
}):Play()
end
if DropdownFunctions.Elements.ClearAllButton then
Services.TweenService:Create(DropdownFunctions.Elements.ClearAllButton, TweenInfo.new(0.2), {
TextTransparency = 0.9,
BackgroundTransparency = 0.98
}):Play()
end
if DropdownFunctions.Maid.TooltipShow then
DropdownFunctions.Maid.TooltipShow:Disconnect()
DropdownFunctions.Maid.TooltipShow = nil
end
if DropdownFunctions.Maid.TooltipHide then
DropdownFunctions.Maid.TooltipHide:Disconnect()
DropdownFunctions.Maid.TooltipHide = nil
end
else
local OriginalImageTransparency = (not Utility:IsPremiumHubUser() and Settings.PremiumFeature) and 0.9 or 0.5
local OriginalSearchTransparency = (not Utility:IsPremiumHubUser() and Settings.PremiumFeature) and 0.6 or 0
Services.TweenService:Create(DropdownFunctions.Elements.DropdownName, TweenInfo.new(0.2), {
TextTransparency = Settings.PremiumFeature and DropdownFunctions.Elements.DropdownName.TextTransparency or PreviousTransparency
}):Play()
Services.TweenService:Create(DropdownFunctions.Elements.DropdownImage, TweenInfo.new(0.2), {ImageTransparency = OriginalImageTransparency}):Play()
Services.TweenService:Create(DropdownFunctions.Elements.Dropdown, TweenInfo.new(0.2), {BackgroundTransparency = 0.985}):Play()
local DropdownUIStroke = DropdownFunctions.Elements.Dropdown:FindFirstChild("UIStroke")
if DropdownUIStroke then
Services.TweenService:Create(DropdownUIStroke, TweenInfo.new(0.2), {Transparency = 0.95}):Play()
end
if DropdownFunctions.Elements.SearchIcon then
Services.TweenService:Create(DropdownFunctions.Elements.SearchIcon, TweenInfo.new(0.2), {ImageTransparency = OriginalSearchTransparency}):Play()
end
if DropdownFunctions.Elements.SearchBox then
Services.TweenService:Create(DropdownFunctions.Elements.SearchBox, TweenInfo.new(0.2), {TextTransparency = 0}):Play()
DropdownFunctions.Elements.SearchBox.TextEditable = not (not Utility:IsPremiumHubUser() and Settings.PremiumFeature)
end
if DropdownFunctions.Elements.SelectAllButton then
Services.TweenService:Create(DropdownFunctions.Elements.SelectAllButton, TweenInfo.new(0.2), {
TextTransparency = (not Utility:IsPremiumHubUser() and Settings.PremiumFeature) and 0.6 or 0.3,
BackgroundTransparency = 0.95
}):Play()
end
if DropdownFunctions.Elements.ClearAllButton then
Services.TweenService:Create(DropdownFunctions.Elements.ClearAllButton, TweenInfo.new(0.2), {
TextTransparency = (not Utility:IsPremiumHubUser() and Settings.PremiumFeature) and 0.6 or 0.3,
BackgroundTransparency = 0.95
}):Play()
end
local ExistingTooltip = DropdownFunctions.Elements.Dropdown:FindFirstChild("ToolTipFrame")
if ExistingTooltip then
local TooltipText = ExistingTooltip:FindFirstChild("TooltipText")
if TooltipText and TooltipText.Text ~= "" then
self:SetToolTip(TooltipText.Text)
end
end
end
end
function DropdownFunctions:GetState()
return not DropdownFunctions.IsHidden
end
function DropdownFunctions:ReturnClass()
return DropdownFunctions.Class
end
function DropdownFunctions:ReturnTab()
return DropdownFunctions.Tab
end
function DropdownFunctions:UpdateName(New)
DropdownFunctions.Elements.DropdownName.Text = New
end
function DropdownFunctions:SetVisibility(State)
DropdownFunctions.Elements.Dropdown.Visible = State
end
function DropdownFunctions:ToggleOption(DfOption, DfToggle)
if DropdownFunctions.IsHidden then return end
local SelectedOptions = {}
for CurrentOption, CurrentSelected in pairs(self:GetOptions()) do
if CurrentSelected then
table.insert(SelectedOptions, CurrentOption)
end
end
if table.find(SelectedOptions, DfOption) and not DfToggle then
Toggle(DfOption, false)
local Index = table.find(SelectedOptions, DfOption)
if Index then table.remove(SelectedOptions, Index) end
elseif not table.find(SelectedOptions, DfOption) and DfToggle then
table.insert(SelectedOptions, DfOption)
Toggle(DfOption, true)
end
if Settings.Callback then
if Settings.Multi then
local Return = {}
for _, Opt in ipairs(SelectedOptions) do
Return[Opt] = true
end
Settings.Callback(Return)
else
Settings.Callback(SelectedOptions[1] or nil)
end
end
end
function DropdownFunctions:UpdateSelection(NewSelection)
if not NewSelection or DropdownFunctions.IsHidden then return end
for Option, _ in pairs(DropdownFunctions.OptionObjs) do
Toggle(Option, false)
end
local SelectedOptions = {}
if type(NewSelection) == "number" then
for Option, Data in pairs(DropdownFunctions.OptionObjs) do
local IsSelected = Data.Index == NewSelection
if IsSelected then
Toggle(Option, true)
table.insert(SelectedOptions, Option)
end
end
elseif type(NewSelection) == "string" then
for Option, Data in pairs(DropdownFunctions.OptionObjs) do
local IsSelected = Option == NewSelection
if IsSelected then
Toggle(Option, true)
table.insert(SelectedOptions, Option)
end
end
elseif type(NewSelection) == "table" then
for Option, _ in pairs(DropdownFunctions.OptionObjs) do
local IsSelected = table.find(NewSelection, Option) ~= nil
if IsSelected then
Toggle(Option, true)
table.insert(SelectedOptions, Option)
end
end
end
if Settings.Callback then
if Settings.Multi then
local Return = {}
for _, Opt in ipairs(SelectedOptions) do
Return[Opt] = true
end
Settings.Callback(Return)
else
Settings.Callback(SelectedOptions[1] or nil)
end
end
end
function DropdownFunctions:InsertOptions(NewOptions)
if not NewOptions or DropdownFunctions.IsHidden then return end
Settings.Options = NewOptions
for I, V in pairs(NewOptions) do
AddOption(I, V)
end
end
function DropdownFunctions:ClearOptions()
for OptionName, OptionData in pairs(DropdownFunctions.OptionObjs) do
OptionData.Button:Destroy()
if DropdownFunctions.Maid["Option" .. OptionName .. "Click"] then
DropdownFunctions.Maid["Option" .. OptionName .. "Click"]:Disconnect()
DropdownFunctions.Maid["Option" .. OptionName .. "Click"] = nil
end
if DropdownFunctions.Maid["Option" .. OptionName .. "Hover"] then
DropdownFunctions.Maid["Option" .. OptionName .. "Hover"]:Disconnect()
DropdownFunctions.Maid["Option" .. OptionName .. "Hover"] = nil
end
if DropdownFunctions.Maid["Option" .. OptionName .. "Leave"] then
DropdownFunctions.Maid["Option" .. OptionName .. "Leave"]:Disconnect()
DropdownFunctions.Maid["Option" .. OptionName .. "Leave"] = nil
end
end
DropdownFunctions.OptionObjs = {}
DropdownFunctions.Selected = {}
if DropdownFunctions.Dropped then
DropdownFunctions.Elements.Dropdown.Size = UDim2.new(1, 0, 0, CalculateDropdownSize())
end
DropdownFunctions.Elements.DropdownName.Text = Settings.Name .. "..."
end
function DropdownFunctions:GetOptions()
local OptionsStatus = {}
for Option, Data in pairs(DropdownFunctions.OptionObjs) do
local IsSelected = table.find(DropdownFunctions.Selected, Option) and true or false
OptionsStatus[Option] = IsSelected
end
return OptionsStatus
end
function DropdownFunctions:GetSelected()
local Options = self:GetOptions()
return Utility:OptionSelected(Options)
end
function DropdownFunctions:IsSelected(Desired)
local Options = self:GetOptions()
local Selected = Utility:OptionSelected(Options)
if typeof(Selected) == "string" then
if Desired == Selected then
return true
end
elseif typeof(Selected) == "table" then
for _, Option in pairs(Selected) do
if Desired == Option then
return true
end
end
else
return Selected
end
return false
end
function DropdownFunctions:RemoveOptions(Remove)
if not Remove then return end
for _, OptionName in ipairs(Remove) do
local OptionData = DropdownFunctions.OptionObjs[OptionName]
if OptionData then
for I = #DropdownFunctions.Selected, 1, -1 do
if DropdownFunctions.Selected[I] == OptionName then
table.remove(DropdownFunctions.Selected, I)
end
end
OptionData.Button:Destroy()
if DropdownFunctions.Maid["Option" .. OptionName .. "Click"] then
DropdownFunctions.Maid["Option" .. OptionName .. "Click"]:Disconnect()
DropdownFunctions.Maid["Option" .. OptionName .. "Click"] = nil
end
if DropdownFunctions.Maid["Option" .. OptionName .. "Hover"] then
DropdownFunctions.Maid["Option" .. OptionName .. "Hover"]:Disconnect()
DropdownFunctions.Maid["Option" .. OptionName .. "Hover"] = nil
end
if DropdownFunctions.Maid["Option" .. OptionName .. "Leave"] then
DropdownFunctions.Maid["Option" .. OptionName .. "Leave"]:Disconnect()
DropdownFunctions.Maid["Option" .. OptionName .. "Leave"] = nil
end
DropdownFunctions.OptionObjs[OptionName] = nil
end
end
if DropdownFunctions.Dropped then
DropdownFunctions.Elements.Dropdown.Size = UDim2.new(1, 0, 0, CalculateDropdownSize())
end
if #DropdownFunctions.Selected > 0 then
DropdownFunctions.Elements.DropdownName.Text = Settings.Name .. " • " .. table.concat(DropdownFunctions.Selected, ", ")
else
DropdownFunctions.Elements.DropdownName.Text = Settings.Name .. "..."
end
end
function DropdownFunctions:ReplaceOptions(NewOptions)
if not NewOptions then return end
self:ClearOptions()
self:InsertOptions(NewOptions)
end
function DropdownFunctions:IsOption(OptionName)
if not OptionName then return false end
return DropdownFunctions.OptionObjs[OptionName] ~= nil
end
function DropdownFunctions:Destroy()
for ConnectionName, Connection in pairs(DropdownFunctions.Maid) do
if type(Connection) == "userdata" and Connection.Disconnect then
Connection:Disconnect()
end
end
table.clear(DropdownFunctions.Maid)
for _, OptionData in pairs(DropdownFunctions.OptionObjs) do
if OptionData.Button then
OptionData.Button:Destroy()
end
end
if DropdownFunctions.Elements.Dropdown then
DropdownFunctions.Elements.Dropdown:Destroy()
end
if Flag and WaveLibrary.Options[Flag] then
WaveLibrary.Options[Flag] = nil
end
end
local function IsPlaceIdAllowed(PlaceIdSetting)
if not PlaceIdSetting then return true end
local CurrentPlaceId = game.PlaceId
if type(PlaceIdSetting) == "table" then
for _, PlaceId in pairs(PlaceIdSetting) do
if CurrentPlaceId == PlaceId then return true end
end
return false
else
return CurrentPlaceId == PlaceIdSetting
end
end
local function IsPlaceIdForbidden(PlaceIdSetting)
if not PlaceIdSetting then return false end
local CurrentPlaceId = game.PlaceId
if type(PlaceIdSetting) == "table" then
for _, PlaceId in pairs(PlaceIdSetting) do
if CurrentPlaceId == PlaceId then return true end
end
return false
else
return CurrentPlaceId == PlaceIdSetting
end
end
DropdownFunctions.Elements = CreateElements()
CreateSearchBox()
CreateEditor()
CreateDropdownEditor()
SetupConnections()
if Settings.Options then
for I, V in pairs(Settings.Options) do
AddOption(I, V)
end
end
if Settings.Hidden then
if typeof(Settings.Hidden) == "table" then
DropdownFunctions:SetHidden(Settings.Hidden[1], Settings.Hidden[2])
else
DropdownFunctions:SetHidden(Settings.Hidden)
end
end
if Settings.ToolTip then
DropdownFunctions:SetToolTip(Settings.ToolTip)
end
if Settings.PremiumFeature and not Utility:IsPremiumHubUser() then
DropdownFunctions:SetHidden(true, "Premium Feature")
end
if not IsPlaceIdAllowed(Settings.AllowedPlaceId) then
DropdownFunctions:SetHidden(true, "Not in the right PlaceId to use this feature.")
end
if IsPlaceIdForbidden(Settings.ForbiddenPlaceId) then
DropdownFunctions:SetHidden(true, "Not in the right PlaceId to use this feature.")
end
if Flag then
WaveLibrary.Options[Flag] = DropdownFunctions
end
return DropdownFunctions
end
end
end
R["Wave/UserInterface/Components/Header.lua"] = function(...)
return function(Requirements)
local Section = Requirements.Section
local WindowFunctions = Requirements.WindowFunctions
local WaveLibraryUI = Requirements.WaveLibraryUI
local WaveLibrary = Requirements.WaveLibrary
local SectionFunctions = Requirements.SectionFunctions
local BaseUIScale = Requirements.BaseUIScale
function SectionFunctions:Header(Settings, Flag)
local HeaderFunctions = { Settings = Settings }
local Header = Instance.new("Frame")
Header.Name = "Header"
Header.AutomaticSize = Enum.AutomaticSize.Y
Header.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
Header.BackgroundTransparency = 1
Header.BorderColor3 = Color3.fromRGB(0, 0, 0)
Header.BorderSizePixel = 0
Header.LayoutOrder = 0
Header.Size = UDim2.fromScale(1, 0)
Header.Parent = Section
local UIPadding = Instance.new("UIPadding")
UIPadding.Name = "UIPadding"
UIPadding.PaddingBottom = UDim.new(0, 5)
UIPadding.Parent = Header
local HeaderText = Instance.new("TextLabel")
HeaderText.Name = "HeaderText"
HeaderText.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.Medium, Enum.FontStyle.Normal)
HeaderText.RichText = true
HeaderText.Text = HeaderFunctions.Settings.Text or HeaderFunctions.Settings.Name
HeaderText.TextColor3 = Color3.fromRGB(255, 255, 255)
HeaderText.TextSize = 16
HeaderText.TextTransparency = 0.3
HeaderText.TextWrapped = true
HeaderText.TextXAlignment = Enum.TextXAlignment.Left
HeaderText.AutomaticSize = Enum.AutomaticSize.Y
HeaderText.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
HeaderText.BackgroundTransparency = 1
HeaderText.BorderColor3 = Color3.fromRGB(0, 0, 0)
HeaderText.BorderSizePixel = 0
HeaderText.Size = UDim2.fromScale(1, 0)
HeaderText.Parent = Header
function HeaderFunctions:UpdateName(New)
HeaderText.Text = New
end
function HeaderFunctions:SetVisibility(State)
Header.Visible = State
end
if Flag then
WaveLibrary.Options[Flag] = HeaderFunctions
end
return HeaderFunctions
end
end
end
R["Wave/UserInterface/Components/Image.lua"] = function(...)
return function(Requirements)
local Section = Requirements.Section
local WindowFunctions = Requirements.WindowFunctions
local WaveLibrary = Requirements.WaveLibrary
local SectionFunctions = Requirements.SectionFunctions
local function ThemeAttr(Name, Fallback)
local ok, value = pcall(function()
return WindowFunctions:GetCurrentThemeAttribute(Name)
end)
if ok and value ~= nil then return value end
return Fallback
end
function SectionFunctions:Image(Settings, Flag)
Settings = Settings or {}
if type(Settings) == "string" then
Settings = { Image = Settings }
end
local ImageFunctions = { Settings = Settings, Class = "Image", Tab = Requirements.TabName }
local Holder = Instance.new("Frame")
Holder.Name = "Image"
Holder.BackgroundColor3 = ThemeAttr("DropdownColor", Color3.fromRGB(20, 20, 26))
Holder.BackgroundTransparency = Settings.Image and 1 or 0.4
Holder.BorderSizePixel = 0
Holder.Size = UDim2.new(1, 0, 0, Settings.Height or 140)
Holder:SetAttribute("NoApplyTheme", true)
Holder.Parent = Section
local Corner = Instance.new("UICorner")
Corner.CornerRadius = UDim.new(0, Settings.CornerRadius or 10)
Corner.Parent = Holder
local Image = Instance.new("ImageLabel")
Image.Name = "Result_Image"
Image.BackgroundTransparency = 1
Image.Image = Settings.Image or Settings.Url or ""
Image.ScaleType = Settings.ScaleType or Enum.ScaleType.Crop
Image.Size = UDim2.fromScale(1, 1)
Image:SetAttribute("NoApplyTheme", true)
Image.Parent = Holder
local ImageCorner = Instance.new("UICorner")
ImageCorner.CornerRadius = UDim.new(0, Settings.CornerRadius or 10)
ImageCorner.Parent = Image
if Settings.AspectRatio then
local Ratio = Instance.new("UIAspectRatioConstraint")
Ratio.AspectRatio = Settings.AspectRatio
Ratio.DominantAxis = Enum.DominantAxis.Width
Ratio.Parent = Holder
end
if Settings.Transparency then
Image.ImageTransparency = Settings.Transparency
end
local Stroke = Instance.new("UIStroke")
Stroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
Stroke.Color = ThemeAttr("BorderColor", Color3.fromRGB(255, 255, 255))
Stroke.Transparency = 0.88
Stroke.Parent = Holder
function ImageFunctions:SetImage(New)
Image.Image = New
Holder.BackgroundTransparency = 1
return self
end
ImageFunctions.SetValue = ImageFunctions.SetImage
function ImageFunctions:SetVisibility(State)
Holder.Visible = State
end
function ImageFunctions:ReturnClass()
return "Image"
end
function ImageFunctions:Destroy()
Holder:Destroy()
end
if Flag then
WaveLibrary.Options[Flag] = ImageFunctions
end
return ImageFunctions
end
end
end
R["Wave/UserInterface/Components/Input.lua"] = function(...)
return function(Requirements)
local Section = Requirements.Section
local WindowFunctions = Requirements.WindowFunctions
local WaveLibraryUI = Requirements.WaveLibraryUI
local WaveLibrary = Requirements.WaveLibrary
local SectionFunctions = Requirements.SectionFunctions
local BaseUIScale = Requirements.BaseUIScale
function SectionFunctions:Input(Settings, Flag)
local InputFunctions = {
Settings = Settings,
IgnoreConfig = Settings.IgnoreConfig,
Tab = Requirements.TabName,
Class = "Input"
}
if not Flag then
Flag = "WriteHere"
end
if Flag == "WriteHere" or Flag == "AutoWriteFlag" then
Flag = string.gsub(InputFunctions.Settings.Name, " ", "_")
end
local Input = Instance.new("Frame")
Input.Name = "Input"
Input.AutomaticSize = Enum.AutomaticSize.Y
Input.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
Input.BackgroundTransparency = 1
Input.BorderColor3 = Color3.fromRGB(0, 0, 0)
Input.BorderSizePixel = 0
Input.Size = UDim2.new(1, 0, 0, 38)
Input.Parent = Section
local InputName = Instance.new("TextLabel")
InputName.Name = "InputName"
InputName.FontFace = Font.new(Assets.InterFont)
InputName.Text = InputFunctions.Settings.Name
InputName.RichText = true
InputName.TextColor3 = Color3.fromRGB(255, 255, 255)
InputName.TextSize = 13
InputName.TextTransparency = 0.5
InputName.TextTruncate = Enum.TextTruncate.AtEnd
InputName.TextXAlignment = Enum.TextXAlignment.Left
InputName.TextYAlignment = Enum.TextYAlignment.Top
InputName.AnchorPoint = Vector2.new(0, 0.5)
InputName.AutomaticSize = Enum.AutomaticSize.XY
InputName.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
InputName.BackgroundTransparency = 1
InputName.BorderColor3 = Color3.fromRGB(0, 0, 0)
InputName.BorderSizePixel = 0
InputName.Position = UDim2.fromScale(0, 0.5)
InputName.Parent = Input
if Settings.PremiumFeature then
InputName.TextTransparency = 0
local PremiumGradient = Instance.new("UIGradient")
PremiumGradient.Color = WindowFunctions:GetCurrentThemeAttribute("PremiumGradientColor") or ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(0, 106, 255)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(163, 201, 255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 255, 255))
})
PremiumGradient.Rotation = 0
PremiumGradient.Parent = InputName
end
local InputBox = Instance.new("TextBox")
InputBox.Name = "InputBox"
InputBox.FontFace = Font.new(Assets.InterFont)
InputBox.Text = "Hello world!"
InputBox.TextColor3 = Color3.fromRGB(255, 255, 255)
InputBox.TextSize = 12
InputBox.TextTransparency = 0.1
InputBox.AnchorPoint = Vector2.new(1, 0.5)
InputBox.AutomaticSize = Enum.AutomaticSize.X
InputBox.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
InputBox.BackgroundTransparency = 0.95
InputBox.BorderColor3 = Color3.fromRGB(0, 0, 0)
InputBox.BorderSizePixel = 0
InputBox.ClipsDescendants = true
InputBox.LayoutOrder = 1
InputBox.Position = UDim2.fromScale(1, 0.5)
InputBox.Size = UDim2.fromOffset(21, 21)
InputBox.TextXAlignment = Enum.TextXAlignment.Right
local IsHidden = false
local PreviousNameTransparency = 0.5
local PreviousBoxTransparency = 0.1
if not Settings.PremiumFeature then
InputBox.MouseEnter:Connect(function()
if IsHidden then return end
Utility:QuickTween(InputName, {
TextTransparency = 0
})
end)
InputBox.MouseLeave:Connect(function()
if IsHidden then return end
Utility:QuickTween(InputName, {
TextTransparency = PreviousNameTransparency
})
end)
end
if not Utility:IsPremiumHubUser() and Settings.PremiumFeature then
InputBox.TextEditable = false
InputBox.ClearTextOnFocus = false
InputBox.TextTransparency = 0.8
end
local InputBoxUICorner = Instance.new("UICorner")
InputBoxUICorner.Name = "InputBoxUICorner"
InputBoxUICorner.CornerRadius = UDim.new(0, 2)
InputBoxUICorner.Parent = InputBox
local InputBoxUIStroke = Instance.new("UIStroke")
InputBoxUIStroke.Name = "InputBoxUIStroke"
InputBoxUIStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
InputBoxUIStroke.Color = Color3.fromRGB(255, 255, 255)
InputBoxUIStroke.Transparency = 0.9
InputBoxUIStroke.Parent = InputBox
local InputBoxUIPadding = Instance.new("UIPadding")
InputBoxUIPadding.Name = "InputBoxUIPadding"
InputBoxUIPadding.PaddingLeft = UDim.new(0, 5)
InputBoxUIPadding.PaddingRight = UDim.new(0, 5)
InputBoxUIPadding.Parent = InputBox
local InputBoxUISizeConstraint = Instance.new("UISizeConstraint")
InputBoxUISizeConstraint.Name = "InputBoxUISizeConstraint"
InputBoxUISizeConstraint.Parent = InputBox
InputBox.Parent = Input
local InputElement = Input
local InputBoxElement = InputBox
local InputNameElement = InputName
local Constraint = InputBoxUISizeConstraint
local function ApplyCharacterLimit(Value)
if InputFunctions.Settings.CharacterLimit then
return Value:sub(1, InputFunctions.Settings.CharacterLimit)
end
return Value
end
local CharacterSubs = {
All = function(Value)
return ApplyCharacterLimit(Value)
end,
Numeric = function(Value)
local Result = Value:match("^%-?%d*$") and Value or Value:gsub("[^%d-]", ""):gsub("(%-)", function(Match, Pos)
return Pos == 1 and Match or ""
end)
return ApplyCharacterLimit(Result)
end,
Alphabetic = function(Value)
return ApplyCharacterLimit(Value:gsub("[^a-zA-Z ]", ""))
end,
AlphaNumeric = function(Value)
return ApplyCharacterLimit(Value:gsub("[^a-zA-Z0-9]", ""))
end,
}
local AcceptedCharacters
if type(InputFunctions.Settings.AcceptedCharacters) == "function" then
AcceptedCharacters = InputFunctions.Settings.AcceptedCharacters
else
AcceptedCharacters = CharacterSubs[InputFunctions.Settings.AcceptedCharacters] or CharacterSubs.All
end
InputBoxElement.AutomaticSize = Enum.AutomaticSize.X
local function CheckSize()
local NameWidth = InputNameElement.AbsoluteSize.X
local TotalWidth = InputElement.AbsoluteSize.X
local MaxWidth = (TotalWidth - NameWidth - 20) / BaseUIScale.Scale
Constraint.MaxSize = Vector2.new(MaxWidth, 9e9)
end
CheckSize()
InputNameElement:GetPropertyChangedSignal("AbsoluteSize"):Connect(CheckSize)
InputBoxElement.FocusLost:Connect(function()
if IsHidden then return end
local InputText = InputBoxElement.Text
local FilteredText = AcceptedCharacters(InputText)
InputBoxElement.Text = FilteredText
task.spawn(function()
if InputFunctions.Settings.Callback then
InputFunctions.Settings.Callback(FilteredText)
end
end)
end)
InputBoxElement.Text = InputFunctions.Settings.Default or ""
InputBoxElement.PlaceholderText = InputFunctions.Settings.Placeholder or ""
InputBoxElement:GetPropertyChangedSignal("Text"):Connect(function()
if IsHidden then return end
InputBoxElement.Text = AcceptedCharacters(InputBoxElement.Text)
if InputFunctions.Settings.OnChanged then
InputFunctions.Settings.OnChanged(InputBoxElement.Text)
end
InputFunctions.Text = InputBoxElement.Text
end)
function InputFunctions:SetToolTip(Tip)
if Input:FindFirstChild("ToolTipFrame") then
Input:FindFirstChild("ToolTipFrame"):Destroy()
end
if not Tip or Tip == "" then
return
end
local ToolTipFrame = Instance.new("Frame")
ToolTipFrame.Name = "ToolTipFrame"
ToolTipFrame.BackgroundColor3 = Color3.fromRGB(18, 18, 18)
ToolTipFrame.BackgroundTransparency = 1
ToolTipFrame.BorderSizePixel = 0
ToolTipFrame.AnchorPoint = Vector2.new(0.5, 1)
ToolTipFrame.Position = UDim2.new(0.5, 0, 0, -5)
ToolTipFrame.Visible = false
ToolTipFrame.ZIndex = 200
ToolTipFrame.Parent = Input
local TooltipCorner = Instance.new("UICorner")
TooltipCorner.CornerRadius = UDim.new(0, 6)
TooltipCorner.Parent = ToolTipFrame
local TooltipStroke = Instance.new("UIStroke")
TooltipStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
TooltipStroke.LineJoinMode = Enum.LineJoinMode.Round
TooltipStroke.Color = Color3.fromRGB(255, 255, 255)
TooltipStroke.Thickness = 0.1
TooltipStroke.Transparency = 0.2
TooltipStroke.Parent = ToolTipFrame
local TooltipText = Instance.new("TextLabel")
TooltipText.Name = "TooltipText"
TooltipText.Text = Tip
TooltipText.FontFace = Font.new(Assets.InterFont)
TooltipText.TextColor3 = Color3.fromRGB(200, 220, 200)
TooltipText.TextSize = 12
TooltipText.TextTransparency = 1
TooltipText.BackgroundTransparency = 1
TooltipText.TextXAlignment = Enum.TextXAlignment.Center
TooltipText.TextYAlignment = Enum.TextYAlignment.Center
TooltipText.TextWrapped = false
TooltipText.Size = UDim2.new(1, -12, 1, 0)
TooltipText.Position = UDim2.new(0, 6, 0, 0)
TooltipText.Parent = ToolTipFrame
local TextBounds = Services.TextService:GetTextSize(
Tip,
TooltipText.TextSize,
Enum.Font.SourceSansBold,
Vector2.new(math.huge, math.huge)
)
local TooltipWidth = math.max(80, TextBounds.X + 50)
local TooltipHeight = math.max(28, TextBounds.Y + 12)
ToolTipFrame.Size = UDim2.new(0, TooltipWidth, 0, TooltipHeight)
local function ShowTooltip()
ToolTipFrame.Visible = true
ToolTipFrame.BackgroundTransparency = 1
TooltipText.TextTransparency = 1
Services.TweenService:Create(
ToolTipFrame,
TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out),
{BackgroundTransparency = 0.1}
):Play()
Services.TweenService:Create(
TooltipText,
TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out),
{TextTransparency = 0}
):Play()
Services.TweenService:Create(
TooltipStroke,
TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out),
{Transparency = 0.8}
):Play()
end
local function HideTooltip()
Services.TweenService:Create(
ToolTipFrame,
TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out),
{BackgroundTransparency = 1}
):Play()
Services.TweenService:Create(
TooltipText,
TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out),
{TextTransparency = 1}
):Play()
Services.TweenService:Create(
TooltipStroke,
TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out),
{Transparency = 1}
):Play()
task.spawn(function()
task.wait(0.2)
if ToolTipFrame and ToolTipFrame.Parent then
ToolTipFrame.Visible = false
end
end)
end
InputBox.MouseEnter:Connect(ShowTooltip)
InputBox.MouseLeave:Connect(HideTooltip)
end
function InputFunctions:SetHidden(State, Reason)
if Reason then
self:SetToolTip(Reason)
end
IsHidden = State
if State then
if not Settings.PremiumFeature then
PreviousNameTransparency = InputName.TextTransparency
end
PreviousBoxTransparency = InputBox.TextTransparency
Services.TweenService:Create(
InputBox,
TweenInfo.new(0.2),
{ TextTransparency = 0.9, BackgroundTransparency = 0.99 }
):Play()
Services.TweenService:Create(
InputBoxUIStroke,
TweenInfo.new(0.2),
{ Transparency = 0.95 }
):Play()
if not Settings.PremiumFeature then
Services.TweenService:Create(
InputName,
TweenInfo.new(0.2),
{ TextTransparency = 0.9 }
):Play()
end
InputBox.TextEditable = false
else
local originalBoxTransparency = (not Utility:IsPremiumHubUser() and Settings.PremiumFeature) and 0.8 or 0.1
local boxEditable = not (not Utility:IsPremiumHubUser() and Settings.PremiumFeature)
Services.TweenService:Create(
InputBox,
TweenInfo.new(0.2),
{ TextTransparency = originalBoxTransparency, BackgroundTransparency = 0.95 }
):Play()
Services.TweenService:Create(
InputBoxUIStroke,
TweenInfo.new(0.2),
{ Transparency = 0.9 }
):Play()
if not Settings.PremiumFeature then
Services.TweenService:Create(
InputName,
TweenInfo.new(0.2),
{ TextTransparency = PreviousNameTransparency }
):Play()
end
InputBox.TextEditable = boxEditable
end
end
function InputFunctions:GetState()
return not IsHidden
end
function InputFunctions:ReturnClass()
return InputFunctions.Class
end
function InputFunctions:ReturnTab()
return InputFunctions.Tab
end
function InputFunctions:ReturnSettings()
return Settings
end
function InputFunctions:UpdateName(Name)
InputName.Text = Name
end
function InputFunctions:SetVisibility(State)
Input.Visible = State
end
function InputFunctions:GetInput()
return InputBox.Text
end
function InputFunctions:UpdatePlaceholder(Placeholder)
InputBox.PlaceholderText = Placeholder
end
function InputFunctions:UpdateText(Text)
local FilteredText = AcceptedCharacters(Text)
InputBox.Text = FilteredText
InputFunctions.Text = FilteredText
task.spawn(function()
if InputFunctions.Settings.Callback then
InputFunctions.Settings.Callback(FilteredText)
end
end)
end
function InputFunctions:Destroy()
if Input then
Input:Destroy()
end
if Flag and WaveLibrary.Options[Flag] then
WaveLibrary.Options[Flag] = nil
end
end
local function IsPlaceIdAllowed(PlaceIdSetting)
if not PlaceIdSetting then return true end
local CurrentPlaceId = game.PlaceId
if type(PlaceIdSetting) == "table" then
for _, PlaceId in pairs(PlaceIdSetting) do
if CurrentPlaceId == PlaceId then
return true
end
end
return false
else
return CurrentPlaceId == PlaceIdSetting
end
end
local function IsPlaceIdForbidden(PlaceIdSetting)
if not PlaceIdSetting then return false end
local CurrentPlaceId = game.PlaceId
if type(PlaceIdSetting) == "table" then
for _, PlaceId in pairs(PlaceIdSetting) do
if CurrentPlaceId == PlaceId then
return true
end
end
return false
else
return CurrentPlaceId == PlaceIdSetting
end
end
if InputFunctions.Settings.Hidden then
if typeof(InputFunctions.Settings.Hidden) == "table" then
InputFunctions:SetHidden(InputFunctions.Settings.Hidden[1], InputFunctions.Settings.Hidden[2])
else
InputFunctions:SetHidden(InputFunctions.Settings.Hidden)
end
end
if InputFunctions.Settings.ToolTip then
InputFunctions:SetToolTip(Settings.ToolTip)
end
if Settings.PremiumFeature and not Utility:IsPremiumHubUser() then
InputFunctions:SetHidden(true, "Premium Feature")
end
if not IsPlaceIdAllowed(Settings.AllowedPlaceId) then
InputFunctions:SetHidden(true, "Not in the right PlaceId to use this feature.")
end
if IsPlaceIdForbidden(Settings.ForbiddenPlaceId) then
InputFunctions:SetHidden(true, "Not in the right PlaceId to use this feature.")
end
if Flag then
WaveLibrary.Options[Flag] = InputFunctions
end
return InputFunctions
end
end
end
R["Wave/UserInterface/Components/Keybind.lua"] = function(...)
return function(Requirements)
local Section = Requirements.Section
local WindowFunctions = Requirements.WindowFunctions
local WaveLibraryUI = Requirements.WaveLibraryUI
local WaveLibrary = Requirements.WaveLibrary
local SectionFunctions = Requirements.SectionFunctions
local BaseUIScale = Requirements.BaseUIScale
function SectionFunctions:Keybind(Settings, Flag)
local KeybindFunctions = {
Settings = Settings,
IgnoreConfig = Settings.IgnoreConfig,
Tab = Requirements.TabName,
Class = "Keybind"
}
if not Flag then
Flag = "WriteHere"
end
if Flag == "WriteHere" or Flag == "AutoWriteFlag" then
Flag = string.gsub(KeybindFunctions.Settings.Name, " ", "_")
end
local Keybind = Instance.new("Frame")
Keybind.Name = "Keybind"
Keybind.AutomaticSize = Enum.AutomaticSize.Y
Keybind.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
Keybind.BackgroundTransparency = 1
Keybind.BorderColor3 = Color3.fromRGB(0, 0, 0)
Keybind.BorderSizePixel = 0
Keybind.Size = UDim2.new(1, 0, 0, 38)
Keybind.Parent = Section
local KeybindName = Instance.new("TextLabel")
KeybindName.Name = "KeybindName"
KeybindName.FontFace = Font.new(Assets.InterFont)
KeybindName.Text = KeybindFunctions.Settings.Name
KeybindName.RichText = true
KeybindName.TextColor3 = WindowFunctions:GetCurrentThemeAttribute("TextPrimary")
KeybindName.TextSize = 13
KeybindName.TextTransparency = 0.5
KeybindName.TextTruncate = Enum.TextTruncate.AtEnd
KeybindName.TextXAlignment = Enum.TextXAlignment.Left
KeybindName.TextYAlignment = Enum.TextYAlignment.Top
KeybindName.AnchorPoint = Vector2.new(0, 0.5)
KeybindName.AutomaticSize = Enum.AutomaticSize.XY
KeybindName.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
KeybindName.BackgroundTransparency = 1
KeybindName.BorderColor3 = Color3.fromRGB(0, 0, 0)
KeybindName.BorderSizePixel = 0
KeybindName.Position = UDim2.fromScale(0, 0.5)
KeybindName.Parent = Keybind
if Settings.PremiumFeature then
KeybindName.TextTransparency = 0
local PremiumGradient = Instance.new("UIGradient")
PremiumGradient.Color = WindowFunctions:GetCurrentThemeAttribute("PremiumGradientColor") or ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(0, 106, 255)),
ColorSequenceKeypoint.new(0.2, Color3.fromRGB(163, 201, 255)),
ColorSequenceKeypoint.new(0.4, Color3.fromRGB(163, 201, 255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 255, 255))
})
PremiumGradient.Rotation = 0
PremiumGradient.Parent = KeybindName
end
local BinderBox = Instance.new("TextBox")
BinderBox.Name = "BinderBox"
BinderBox.CursorPosition = -1
BinderBox.FontFace = Font.new(Assets.InterFont)
BinderBox.PlaceholderText = "..."
BinderBox.Text = ""
BinderBox.TextColor3 = Color3.fromRGB(255, 255, 255)
BinderBox.TextSize = 12
BinderBox.TextTransparency = 0.1
BinderBox.AnchorPoint = Vector2.new(1, 0.5)
BinderBox.AutomaticSize = Enum.AutomaticSize.X
BinderBox.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
BinderBox.BackgroundTransparency = 0.95
BinderBox.BorderColor3 = Color3.fromRGB(0, 0, 0)
BinderBox.BorderSizePixel = 0
BinderBox.ClipsDescendants = true
BinderBox.LayoutOrder = 1
BinderBox.Position = UDim2.fromScale(1, 0.5)
BinderBox.Size = UDim2.fromOffset(21, 21)
if not Settings.PremiumFeature then
BinderBox.MouseEnter:Connect(function()
Utility:QuickTween(KeybindName, {
TextTransparency = 0
})
end)
BinderBox.MouseLeave:Connect(function()
Utility:QuickTween(KeybindName, {
TextTransparency = 0.5
})
end)
end
local BinderBoxUICorner = Instance.new("UICorner")
BinderBoxUICorner.Name = "BinderBoxUICorner"
BinderBoxUICorner.CornerRadius = UDim.new(0, 4)
BinderBoxUICorner.Parent = BinderBox
local BinderBoxUIStroke = Instance.new("UIStroke")
BinderBoxUIStroke.Name = "BinderBoxUIStroke"
BinderBoxUIStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
BinderBoxUIStroke.Color = Color3.fromRGB(255, 255, 255)
BinderBoxUIStroke.Transparency = 0.9
BinderBoxUIStroke.Parent = BinderBox
local BinderBoxUIPadding = Instance.new("UIPadding")
BinderBoxUIPadding.Name = "BinderBoxUIPadding"
BinderBoxUIPadding.PaddingLeft = UDim.new(0, 5)
BinderBoxUIPadding.PaddingRight = UDim.new(0, 5)
BinderBoxUIPadding.Parent = BinderBox
local BinderBoxUISizeConstraint = Instance.new("UISizeConstraint")
BinderBoxUISizeConstraint.Name = "BinderBoxUISizeConstraint"
BinderBoxUISizeConstraint.Parent = BinderBox
BinderBox.Parent = Keybind
local Focused
local IsBinding = false
local Reset = false
local Binded = KeybindFunctions.Settings.Default
local function ResetFocusState()
Focused = false
IsBinding = false
BinderBox:ReleaseFocus()
end
if Binded then
BinderBox.Text = Binded.Name
end
BinderBox.Focused:Connect(function()
Focused = true
end)
BinderBox.FocusLost:Connect(function()
Focused = false
end)
Services.UserInputService.InputBegan:Connect(function(Inp)
if Focused and not IsBinding then
IsBinding = true
local Event
Event = Services.UserInputService.InputBegan:Connect(function(Input)
if KeybindFunctions.Settings.Blacklist and (table.find(KeybindFunctions.KeybindFunctions.Settings.Blacklist, Input.KeyCode) or table.find(KeybindFunctions.Settings.Blacklist, Input.UserInputType)) then
BinderBox:ReleaseFocus()
ResetFocusState()
Event:Disconnect()
return
end
if Input.UserInputType == Enum.UserInputType.Keyboard then
Binded = Input.KeyCode
BinderBox.Text = Input.KeyCode.Name
elseif Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.MouseButton2 then
Binded = Input.UserInputType
BinderBox.Text = Input.UserInputType.Name
end
if KeybindFunctions.Settings.OnBinded then
KeybindFunctions.Settings.OnBinded(Binded)
end
Reset = true
ResetFocusState()
Event:Disconnect()
end)
else
if not Reset and (Inp.KeyCode == Binded or Inp.UserInputType == Binded) then
if KeybindFunctions.Settings.Callback then
KeybindFunctions.Settings.Callback(Binded)
end
if KeybindFunctions.Settings.OnBindHeld then
KeybindFunctions.Settings.OnBindHeld(true, Binded)
end
else
Reset = false
end
end
end)
Services.UserInputService.InputEnded:Connect(function(Inp)
if not Focused and not IsBinding then
if Inp.KeyCode == Binded or Inp.UserInputType == Binded then
if Settings.OnBindHeld then
Settings.OnBindHeld(false, Binded)
end
end
end
end)
function KeybindFunctions:Bind(Key)
Binded = Key
BinderBox.Text = Key.Name
if KeybindFunctions.Settings.Callback then
KeybindFunctions.Settings.Callback(Binded)
end
end
function KeybindFunctions:Unbind()
Binded = nil
BinderBox.Text = ""
end
function KeybindFunctions:ReturnClass()
return KeybindFunctions.Class
end
function KeybindFunctions:ReturnTab()
return KeybindFunctions.Tab
end
function KeybindFunctions:GetBind()
return Binded
end
function KeybindFunctions:UpdateName(Name)
KeybindName.Text = Name
end
function KeybindFunctions:SetVisibility(State)
Keybind.Visible = State
end
function KeybindFunctions:Destroy()
if Keybind then
Keybind:Destroy()
end
if Flag and WaveLibrary.Options[Flag] then
WaveLibrary.Options[Flag] = nil
end
end
if Flag then
WaveLibrary.Options[Flag] = KeybindFunctions
end
return KeybindFunctions
end
end
end
R["Wave/UserInterface/Components/Label.lua"] = function(...)
return function(Requirements)
local Section = Requirements.Section
local WindowFunctions = Requirements.WindowFunctions
local WaveLibraryUI = Requirements.WaveLibraryUI
local WaveLibrary = Requirements.WaveLibrary
local SectionFunctions = Requirements.SectionFunctions
local BaseUIScale = Requirements.BaseUIScale
function SectionFunctions:Label(Settings, Flag)
local LabelFunctions = { Settings = Settings }
local Label = Instance.new("Frame")
Label.Name = "Label"
Label.AutomaticSize = Enum.AutomaticSize.Y
Label.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
Label.BackgroundTransparency = 1
Label.BorderColor3 = Color3.fromRGB(0, 0, 0)
Label.BorderSizePixel = 0
Label.Size = UDim2.new(1, 0, 0, 38)
Label.Parent = Section
local LabelText = Instance.new("TextLabel")
LabelText.Name = "LabelText"
LabelText.FontFace = Font.new(Assets.InterFont)
LabelText.RichText = true
LabelText.Text = LabelFunctions.Settings.Text or LabelFunctions.Settings.Name
LabelText.TextColor3 = WindowFunctions:GetCurrentThemeAttribute("TextPrimary")
LabelText.TextSize = 13
LabelText.TextTransparency = 0.5
LabelText.TextWrapped = true
LabelText.TextXAlignment = Enum.TextXAlignment.Left
LabelText.AutomaticSize = Enum.AutomaticSize.Y
LabelText.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
LabelText.BackgroundTransparency = 1
LabelText.BorderColor3 = Color3.fromRGB(0, 0, 0)
LabelText.BorderSizePixel = 0
LabelText.Size = UDim2.fromScale(1, 1)
LabelText.Parent = Label
function LabelFunctions:UpdateName(New)
LabelText.Text = New
end
function LabelFunctions:SetVisibility(State)
Label.Visible = State
end
if Flag then
WaveLibrary.Options[Flag] = LabelFunctions
end
return LabelFunctions
end
end
end
R["Wave/UserInterface/Components/Paragraph.lua"] = function(...)
return function(Requirements)
local Section = Requirements.Section
local WindowFunctions = Requirements.WindowFunctions
local WaveLibraryUI = Requirements.WaveLibraryUI
local WaveLibrary = Requirements.WaveLibrary
local SectionFunctions = Requirements.SectionFunctions
local BaseUIScale = Requirements.BaseUIScale
function SectionFunctions:Paragraph(Settings, Flag)
local ParagraphFunctions = { Settings = Settings }
local Paragraph = Instance.new("Frame")
Paragraph.Name = "Paragraph"
Paragraph.AutomaticSize = Enum.AutomaticSize.Y
Paragraph.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
Paragraph.BackgroundTransparency = 1
Paragraph.BorderColor3 = Color3.fromRGB(0, 0, 0)
Paragraph.BorderSizePixel = 0
Paragraph.Size = UDim2.new(1, 0, 0, 38)
Paragraph.Parent = Section
local ParagraphHeader = Instance.new("TextLabel")
ParagraphHeader.Name = "ParagraphHeader"
ParagraphHeader.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.Medium, Enum.FontStyle.Normal)
ParagraphHeader.RichText = true
ParagraphHeader.Text = ParagraphFunctions.Settings.Header
ParagraphHeader.TextColor3 = Color3.fromRGB(255, 255, 255)
ParagraphHeader.TextSize = 15
ParagraphHeader.TextTransparency = 0.4
ParagraphHeader.TextWrapped = true
ParagraphHeader.TextXAlignment = Enum.TextXAlignment.Left
ParagraphHeader.AutomaticSize = Enum.AutomaticSize.Y
ParagraphHeader.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
ParagraphHeader.BackgroundTransparency = 1
ParagraphHeader.BorderColor3 = Color3.fromRGB(0, 0, 0)
ParagraphHeader.BorderSizePixel = 0
ParagraphHeader.Size = UDim2.fromScale(1, 0)
ParagraphHeader.Parent = Paragraph
local UIListLayout = Instance.new("UIListLayout")
UIListLayout.Name = "UIListLayout"
UIListLayout.Padding = UDim.new(0, 5)
UIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
UIListLayout.Parent = Paragraph
local ParagraphBody = Instance.new("TextLabel")
ParagraphBody.Name = "ParagraphBody"
ParagraphBody.FontFace = Font.new(Assets.InterFont)
ParagraphBody.RichText = true
ParagraphBody.Text = ParagraphFunctions.Settings.Body
ParagraphBody.TextColor3 = Color3.fromRGB(255, 255, 255)
ParagraphBody.TextSize = 13
ParagraphBody.TextTransparency = 0.5
ParagraphBody.TextWrapped = true
ParagraphBody.TextXAlignment = Enum.TextXAlignment.Left
ParagraphBody.AutomaticSize = Enum.AutomaticSize.Y
ParagraphBody.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
ParagraphBody.BackgroundTransparency = 1
ParagraphBody.BorderColor3 = Color3.fromRGB(0, 0, 0)
ParagraphBody.BorderSizePixel = 0
ParagraphBody.LayoutOrder = 1
ParagraphBody.Size = UDim2.fromScale(1, 0)
ParagraphBody.Parent = Paragraph
function ParagraphFunctions:UpdateHeader(New)
ParagraphHeader.Text = New
end
function ParagraphFunctions:UpdateBody(New)
ParagraphBody.Text = New
end
function ParagraphFunctions:SetVisibility(State)
Paragraph.Visible = State
end
if Flag then
WaveLibrary.Options[Flag] = ParagraphFunctions
end
return ParagraphFunctions
end
end
end
R["Wave/UserInterface/Components/PlayerDropdown.lua"] = function(...)
return function(Requirements)
local Section = Requirements.Section
local WindowFunctions = Requirements.WindowFunctions
local WaveLibraryUI = Requirements.WaveLibraryUI
local WaveLibrary = Requirements.WaveLibrary
local SectionFunctions = Requirements.SectionFunctions
local BaseUIScale = Requirements.BaseUIScale
function SectionFunctions:PlayerDropdown(Settings, Flag)
local DropdownFunctions = {
Settings = Settings,
IgnoreConfig = false,
Class = "PlayerDropdown",
Tab = Requirements.TabName,
Value = nil
}
if not Flag or Flag == "WriteHere" or Flag == "AutoWriteFlag" then
Flag = string.gsub(DropdownFunctions.Settings.Name, " ", "_")
end
local Selected = {}
local OptionObjs = {}
local PlayerConnections = {}
local Dropped = false
local DB = false
local IsHidden = false
local PreviousTransparency = 0.5
local TooltipConnections = {}
local Dropdown = Instance.new("Frame")
Dropdown.Name = "PlayerDropdown"
Dropdown.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Dropdown.BackgroundTransparency = 0.985
Dropdown.BorderColor3 = Color3.fromRGB(0, 0, 0)
Dropdown.BorderSizePixel = 0
Dropdown.Size = UDim2.new(1, 0, 0, 38)
Dropdown.Parent = Section
Dropdown.ClipsDescendants = true
local DropdownUIPadding = Instance.new("UIPadding")
DropdownUIPadding.Name = "DropdownUIPadding"
DropdownUIPadding.PaddingLeft = UDim.new(0, 15)
DropdownUIPadding.PaddingRight = UDim.new(0, 15)
DropdownUIPadding.Parent = Dropdown
local Interact = Instance.new("TextButton")
Interact.Name = "Interact"
Interact.FontFace = Font.new("rbxasset://fonts/families/SourceSansPro.json")
Interact.Text = ""
Interact.TextColor3 = Color3.fromRGB(0, 0, 0)
Interact.TextSize = 14
Interact.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Interact.BackgroundTransparency = 1
Interact.BorderColor3 = Color3.fromRGB(0, 0, 0)
Interact.BorderSizePixel = 0
Interact.Size = UDim2.new(1, 0, 0, 38)
Interact.Parent = Dropdown
local DropdownName = Instance.new("TextLabel")
DropdownName.Name = "DropdownName"
DropdownName.FontFace = Font.new(Assets.InterFont)
DropdownName.Text = Settings.Default and (DropdownFunctions.Settings.Name .. " • " .. table.concat(Selected, ", ")) or (DropdownFunctions.Settings.Name .. "...")
DropdownName.RichText = true
DropdownName.TextColor3 = WindowFunctions:GetCurrentThemeAttribute("TextPrimary")
DropdownName.TextSize = 13
DropdownName.TextTransparency = 0.5
DropdownName.TextTruncate = Enum.TextTruncate.SplitWord
DropdownName.TextXAlignment = Enum.TextXAlignment.Left
DropdownName.AutomaticSize = Enum.AutomaticSize.Y
DropdownName.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
DropdownName.BackgroundTransparency = 1
DropdownName.BorderColor3 = Color3.fromRGB(0, 0, 0)
DropdownName.BorderSizePixel = 0
DropdownName.Size = UDim2.new(1, -20, 0, 38)
DropdownName.Parent = Dropdown
if Settings.PremiumFeature then
DropdownName.TextTransparency = 0
local PremiumGradient = Instance.new("UIGradient")
PremiumGradient.Color = WindowFunctions:GetCurrentThemeAttribute("PremiumGradientColor") or ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(0, 106, 255)),
ColorSequenceKeypoint.new(0.2, Color3.fromRGB(163, 201, 255)),
ColorSequenceKeypoint.new(0.4, Color3.fromRGB(255, 255, 255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(163, 201, 255))
})
PremiumGradient.Rotation = 0
PremiumGradient.Parent = DropdownName
end
local DropdownUIStroke = Instance.new("UIStroke")
DropdownUIStroke.Name = "DropdownUIStroke"
DropdownUIStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
DropdownUIStroke.Color = Color3.fromRGB(255, 255, 255)
DropdownUIStroke.Transparency = 0.95
DropdownUIStroke.Parent = Dropdown
local DropdownUICorner = Instance.new("UICorner")
DropdownUICorner.Name = "DropdownUICorner"
DropdownUICorner.CornerRadius = UDim.new(0, 6)
DropdownUICorner.Parent = Dropdown
local DropdownImage = Instance.new("ImageLabel")
DropdownImage.Name = "DropdownImage"
DropdownImage.Image = Assets.Dropdown
DropdownImage.ImageTransparency = 0.5
DropdownImage.AnchorPoint = Vector2.new(1, 0)
DropdownImage.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
DropdownImage.BackgroundTransparency = 1
DropdownImage.BorderColor3 = Color3.fromRGB(0, 0, 0)
DropdownImage.BorderSizePixel = 0
DropdownImage.Position = UDim2.new(1, 0, 0, 12)
DropdownImage.Size = UDim2.fromOffset(14, 14)
DropdownImage.Parent = Dropdown
-- Inner option list is a ScrollingFrame below the 38px header so long
-- player lists scroll inside the dropdown on mobile (see Dropdown.lua).
local DropdownFrame = Instance.new("ScrollingFrame")
DropdownFrame.Name = "DropdownFrame"
DropdownFrame.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
DropdownFrame.BackgroundTransparency = 1
DropdownFrame.BorderColor3 = Color3.fromRGB(0, 0, 0)
DropdownFrame.BorderSizePixel = 0
DropdownFrame.ClipsDescendants = true
DropdownFrame.Position = UDim2.new(0, 0, 0, 38)
DropdownFrame.Size = UDim2.new(1, 0, 1, -38)
DropdownFrame.Visible = false
DropdownFrame.Active = true
DropdownFrame.AutomaticCanvasSize = Enum.AutomaticSize.Y
DropdownFrame.CanvasSize = UDim2.new()
DropdownFrame.ScrollingDirection = Enum.ScrollingDirection.Y
DropdownFrame.ScrollBarThickness = 3
DropdownFrame.ScrollBarImageColor3 = Color3.fromRGB(255, 255, 255)
DropdownFrame.ScrollBarImageTransparency = 0.5
DropdownFrame.BottomImage = ""
DropdownFrame.TopImage = ""
local DropdownFrameUIPadding = Instance.new("UIPadding")
DropdownFrameUIPadding.Name = "DropdownFrameUIPadding"
DropdownFrameUIPadding.PaddingTop = UDim.new(0, 4)
DropdownFrameUIPadding.PaddingBottom = UDim.new(0, 10)
DropdownFrameUIPadding.Parent = DropdownFrame
local DropdownFrameUIListLayout = Instance.new("UIListLayout")
DropdownFrameUIListLayout.Name = "DropdownFrameUIListLayout"
DropdownFrameUIListLayout.Padding = UDim.new(0, 5)
DropdownFrameUIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
DropdownFrameUIListLayout.Parent = DropdownFrame
local Search = Instance.new("Frame")
Search.Name = "Search"
Search.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Search.BackgroundTransparency = 0.95
Search.BorderColor3 = Color3.fromRGB(0, 0, 0)
Search.BorderSizePixel = 0
Search.LayoutOrder = -1
Search.Size = UDim2.new(1, 0, 0, 30)
Search.Parent = DropdownFrame
Search.Visible = DropdownFunctions.Settings.Search ~= false
local SectionUICorner = Instance.new("UICorner")
SectionUICorner.Name = "SectionUICorner"
SectionUICorner.Parent = Search
local SearchIcon = Instance.new("ImageLabel")
SearchIcon.Name = "SearchIcon"
SearchIcon.Image = Assets.SearchIcon
SearchIcon.ImageColor3 = Color3.fromRGB(180, 180, 180)
SearchIcon.AnchorPoint = Vector2.new(0, 0.5)
SearchIcon.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
SearchIcon.BackgroundTransparency = 1
SearchIcon.BorderColor3 = Color3.fromRGB(0, 0, 0)
SearchIcon.BorderSizePixel = 0
SearchIcon.Position = UDim2.fromScale(0, 0.5)
SearchIcon.Size = UDim2.fromOffset(12, 12)
SearchIcon.Parent = Search
if not Utility:IsPremiumHubUser() and Settings.PremiumFeature then
SearchIcon.ImageTransparency = 0.6
DropdownImage.ImageTransparency = 0.9
end
local UIPadding = Instance.new("UIPadding")
UIPadding.Name = "UIPadding"
UIPadding.PaddingLeft = UDim.new(0, 15)
UIPadding.Parent = Search
local SearchBox = Instance.new("TextBox")
SearchBox.Name = "SearchBox"
SearchBox.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.Medium, Enum.FontStyle.Normal)
SearchBox.PlaceholderColor3 = Color3.fromRGB(150, 150, 150)
SearchBox.PlaceholderText = "Search players..."
SearchBox.Text = ""
SearchBox.TextColor3 = Color3.fromRGB(200, 200, 200)
SearchBox.TextSize = 14
SearchBox.TextXAlignment = Enum.TextXAlignment.Left
SearchBox.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
SearchBox.BackgroundTransparency = 1
SearchBox.BorderColor3 = Color3.fromRGB(0, 0, 0)
SearchBox.BorderSizePixel = 0
SearchBox.Size = UDim2.fromScale(1, 1)
local UIPadding1 = Instance.new("UIPadding")
UIPadding1.Name = "UIPadding"
UIPadding1.PaddingLeft = UDim.new(0, 23)
UIPadding1.Parent = SearchBox
SearchBox.Parent = Search
DropdownFrame.Parent = Dropdown
local TweenSettings = {
Duration = 0.2,
EasingStyle = Enum.EasingStyle.Quint,
TransparencyIn = 0,
TransparencyOut = 0.5,
CheckSizeIncrease = 12,
CheckSizeDecrease = -13,
WaitTime = 1
}
local DROPDOWN_HEADER_HEIGHT = 38
local MAX_OPTIONS_HEIGHT = 200
local function CalculateDropdownSize()
local TotalHeight = 0
local VisibleChildrenCount = 0
local Padding = DropdownFrame:FindFirstChild("DropdownFrameUIPadding")
local PaddingOffset = Padding and (Padding.PaddingTop.Offset + Padding.PaddingBottom.Offset) or 0
for _, V in pairs(DropdownFrame:GetChildren()) do
if not V:IsA("UIComponent") and V.Visible then
TotalHeight += V.AbsoluteSize.Y
VisibleChildrenCount += 1
end
end
local Spacing = DropdownFrameUIListLayout.Padding.Offset * math.max(0, VisibleChildrenCount - 1)
local OptionsHeight = TotalHeight + Spacing + PaddingOffset
if OptionsHeight > MAX_OPTIONS_HEIGHT then
OptionsHeight = MAX_OPTIONS_HEIGHT
end
return DROPDOWN_HEADER_HEIGHT + OptionsHeight
end
local function FindOption()
local SearchTerm = SearchBox.Text:lower()
for _, V in pairs(OptionObjs) do
local OptionText = V.NameLabel.Text:lower()
local IsVisible = string.find(OptionText, SearchTerm) ~= nil
V.Button.Visible = IsVisible
end
if Dropped then
Dropdown.Size = UDim2.new(1, 0, 0, CalculateDropdownSize())
end
end
SearchBox:GetPropertyChangedSignal("Text"):Connect(FindOption)
local function Toggle(OptionName, State)
local Option = OptionObjs[OptionName]
if not Option then return end
local Checkmark = Option.Checkmark
local OptionNameLabel = Option.NameLabel
if State then
if DropdownFunctions.Settings.Multi then
if not table.find(Selected, OptionName) then
table.insert(Selected, OptionName)
DropdownFunctions.Value = Selected
end
else
for Name, Opt in pairs(OptionObjs) do
if Name ~= OptionName then
Utility:PropertyTween(Opt.Checkmark, TweenInfo.new(TweenSettings.Duration, TweenSettings.EasingStyle), {
Size = UDim2.new(Opt.Checkmark.Size.X.Scale, TweenSettings.CheckSizeDecrease, Opt.Checkmark.Size.Y.Scale, Opt.Checkmark.Size.Y.Offset)
}):Play()
Utility:PropertyTween(Opt.NameLabel, TweenInfo.new(TweenSettings.Duration, TweenSettings.EasingStyle), {
TextTransparency = TweenSettings.TransparencyOut
}):Play()
Opt.Checkmark.TextTransparency = 1
end
end
Selected = {OptionName}
DropdownFunctions.Value = Selected[1]
end
Utility:PropertyTween(Checkmark, TweenInfo.new(TweenSettings.Duration, TweenSettings.EasingStyle), {
Size = UDim2.new(Checkmark.Size.X.Scale, TweenSettings.CheckSizeIncrease, Checkmark.Size.Y.Scale, Checkmark.Size.Y.Offset)
}):Play()
Utility:PropertyTween(OptionNameLabel, TweenInfo.new(TweenSettings.Duration, TweenSettings.EasingStyle), {
TextTransparency = TweenSettings.TransparencyIn
}):Play()
Checkmark.TextTransparency = 0
else
if DropdownFunctions.Settings.Multi then
local Idx = table.find(Selected, OptionName)
if Idx then
table.remove(Selected, Idx)
end
else
Selected = {}
end
Utility:PropertyTween(Checkmark, TweenInfo.new(TweenSettings.Duration, TweenSettings.EasingStyle), {
Size = UDim2.new(Checkmark.Size.X.Scale, TweenSettings.CheckSizeDecrease, Checkmark.Size.Y.Scale, Checkmark.Size.Y.Offset)
}):Play()
Utility:PropertyTween(OptionNameLabel, TweenInfo.new(TweenSettings.Duration, TweenSettings.EasingStyle), {
TextTransparency = TweenSettings.TransparencyOut
}):Play()
Checkmark.TextTransparency = 1
end
if Settings.Required and #Selected == 0 and not State then
return
end
if #Selected > 0 then
DropdownName.Text = DropdownFunctions.Settings.Name .. " • " .. table.concat(Selected, ", ")
else
DropdownName.Text = DropdownFunctions.Settings.Name .. "..."
end
end
local function SetupHoverEffects()
if not Settings.PremiumFeature then
Interact.MouseEnter:Connect(function()
if IsHidden then return end
Utility:QuickTween(DropdownName, {
TextTransparency = 0
})
Utility:QuickTween(DropdownImage, {
ImageTransparency = 0
})
end)
Interact.MouseLeave:Connect(function()
if IsHidden then return end
Utility:QuickTween(DropdownName, {
TextTransparency = 0.5
})
Utility:QuickTween(DropdownImage, {
ImageTransparency = 0.5
})
end)
end
end
SetupHoverEffects()
local function ToggleDropdown()
if IsHidden then return end
if not Utility:IsPremiumHubUser() and Settings.PremiumFeature then return end
if DB then return end
DB = true
local DefaultDropdownSize = 38
local IsDropdownOpen = not Dropped
local TargetSize = IsDropdownOpen and UDim2.new(1, 0, 0, CalculateDropdownSize()) or UDim2.new(1, 0, 0, DefaultDropdownSize)
local DropTween = Utility:PropertyTween(Dropdown, TweenInfo.new(0.2, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {
Size = TargetSize
})
local IconTween = Utility:PropertyTween(DropdownImage, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
Rotation = IsDropdownOpen and -90 or 0
})
DropTween:Play()
IconTween:Play()
if IsDropdownOpen then
DropdownFrame.Visible = true
DropTween.Completed:Connect(function()
DB = false
end)
else
DropTween.Completed:Connect(function()
DropdownFrame.Visible = false
DB = false
end)
end
Dropped = IsDropdownOpen
end
Interact.MouseButton1Click:Connect(ToggleDropdown)
local function AddOption(I, V, Display)
local Option = Instance.new("TextButton")
Option.Name = "Option"
Option.FontFace = Font.new("rbxasset://fonts/families/SourceSansPro.json")
Option.Text = ""
Option.TextColor3 = Color3.fromRGB(0, 0, 0)
Option.TextSize = 14
Option.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Option.BackgroundTransparency = 1
Option.BorderColor3 = Color3.fromRGB(0, 0, 0)
Option.BorderSizePixel = 0
Option.Size = UDim2.new(1, 0, 0, 30)
local OptionUIPadding = Instance.new("UIPadding")
OptionUIPadding.Name = "OptionUIPadding"
OptionUIPadding.PaddingLeft = UDim.new(0, 15)
OptionUIPadding.Parent = Option
local OptionUIListLayout = Instance.new("UIListLayout")
OptionUIListLayout.Name = "OptionUIListLayout"
OptionUIListLayout.Padding = UDim.new(0, 10)
OptionUIListLayout.FillDirection = Enum.FillDirection.Horizontal
OptionUIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
OptionUIListLayout.VerticalAlignment = Enum.VerticalAlignment.Center
OptionUIListLayout.Parent = Option
local Checkmark = Instance.new("TextLabel")
Checkmark.Name = "Checkmark"
Checkmark.FontFace = Font.new(Assets.InterFont)
Checkmark.Text = "✓"
Checkmark.TextColor3 = Color3.fromRGB(255, 255, 255)
Checkmark.TextSize = 13
Checkmark.TextTransparency = 1
Checkmark.TextXAlignment = Enum.TextXAlignment.Left
Checkmark.TextYAlignment = Enum.TextYAlignment.Top
Checkmark.AnchorPoint = Vector2.new(0, 0.5)
Checkmark.AutomaticSize = Enum.AutomaticSize.Y
Checkmark.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Checkmark.BackgroundTransparency = 1
Checkmark.BorderColor3 = Color3.fromRGB(0, 0, 0)
Checkmark.BorderSizePixel = 0
Checkmark.LayoutOrder = -1
Checkmark.Position = UDim2.fromScale(1.3e-07, 0.5)
Checkmark.Size = UDim2.fromOffset(-OptionUIListLayout.Padding.Offset, 0)
Checkmark.Parent = Option
local OptionName = Instance.new("TextLabel")
OptionName.Name = "OptionName"
OptionName.FontFace = Font.new(Assets.InterFont)
OptionName.Text = Display
OptionName.RichText = true
OptionName.TextColor3 = Color3.fromRGB(255, 255, 255)
OptionName.TextSize = 13
OptionName.TextTransparency = 0.5
OptionName.TextTruncate = Enum.TextTruncate.AtEnd
OptionName.TextXAlignment = Enum.TextXAlignment.Left
OptionName.TextYAlignment = Enum.TextYAlignment.Top
OptionName.AnchorPoint = Vector2.new(0, 0.5)
OptionName.AutomaticSize = Enum.AutomaticSize.XY
OptionName.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
OptionName.BackgroundTransparency = 1
OptionName.BorderColor3 = Color3.fromRGB(0, 0, 0)
OptionName.BorderSizePixel = 0
OptionName.Position = UDim2.fromScale(1.3e-07, 0.5)
OptionName.Parent = Option
if not Settings.PremiumFeature then
Option.MouseEnter:Connect(function()
if IsHidden then return end
Utility:QuickTween(OptionName, {
TextTransparency = 0
})
end)
Option.MouseLeave:Connect(function()
if IsHidden then return end
Utility:QuickTween(OptionName, {
TextTransparency = table.find(Selected, V) and 0 or 0.5
})
end)
end
Option.Parent = DropdownFrame
OptionObjs[V] = {
Index = I,
Button = Option,
NameLabel = OptionName,
Checkmark = Checkmark
}
Option.MouseButton1Click:Connect(function()
if IsHidden then return end
local IsSelected = table.find(Selected, V) and true or false
local NewSelected = not IsSelected
if DropdownFunctions.Settings.Required and not NewSelected and #Selected <= 1 then
return
end
Toggle(V, NewSelected)
task.spawn(function()
if DropdownFunctions.Settings.Callback then
if DropdownFunctions.Settings.Multi then
local Return = {}
for _, Opt in ipairs(Selected) do
Return[Opt] = true
end
DropdownFunctions.Settings.Callback(Return)
else
if NewSelected then
DropdownFunctions.Settings.Callback(Selected[1] or nil)
end
end
end
end)
end)
if Dropped then
Dropdown.Size = UDim2.new(1, 0, 0, CalculateDropdownSize())
end
end
local function RefreshPlayers()
for _, OptionData in pairs(OptionObjs) do
OptionData.Button:Destroy()
end
OptionObjs = {}
local Players = Services.Players:GetPlayers()
for I, Player in ipairs(Players) do
if Player ~= Utility:GetPlayer() or DropdownFunctions.Settings.IncludeSelf then
AddOption(I, Player.Name, Player.DisplayName)
end
end
if Dropped then
Dropdown.Size = UDim2.new(1, 0, 0, CalculateDropdownSize())
end
end
local function OnPlayerAdded(Player)
if Player ~= Utility:GetPlayer() or DropdownFunctions.Settings.IncludeSelf then
local PlayerCount = 0
for _ in pairs(OptionObjs) do
PlayerCount += 1
end
AddOption(PlayerCount + 1, Player.Name, Player.DisplayName)
end
end
local function OnPlayerRemoving(Player)
local PlayerName = Player.Name
local OptionData = OptionObjs[PlayerName]
if OptionData then
for I = #Selected, 1, -1 do
if Selected[I] == PlayerName then
table.remove(Selected, I)
end
end
if #Selected > 0 then
DropdownName.Text = DropdownFunctions.Settings.Name .. " • " .. table.concat(Selected, ", ")
else
DropdownName.Text = DropdownFunctions.Settings.Name .. "..."
end
OptionData.Button:Destroy()
OptionObjs[PlayerName] = nil
if Dropped then
Dropdown.Size = UDim2.new(1, 0, 0, CalculateDropdownSize())
end
if DropdownFunctions.Settings.Callback then
if DropdownFunctions.Settings.Multi then
local Return = {}
for _, Opt in ipairs(Selected) do
Return[Opt] = true
end
DropdownFunctions.Settings.Callback(Return)
else
DropdownFunctions.Settings.Callback(Selected[1] or nil)
end
end
end
end
PlayerConnections.PlayerAdded = Services.Players.PlayerAdded:Connect(OnPlayerAdded)
PlayerConnections.PlayerRemoving = Services.Players.PlayerRemoving:Connect(OnPlayerRemoving)
RefreshPlayers()
function DropdownFunctions:SetToolTip(Tip)
for _, connection in pairs(TooltipConnections) do
if connection then
connection:Disconnect()
end
end
TooltipConnections = {}
if Dropdown:FindFirstChild("ToolTipFrame") then
Dropdown:FindFirstChild("ToolTipFrame"):Destroy()
end
if not Tip or Tip == "" then
return
end
local ToolTipFrame = Instance.new("Frame")
ToolTipFrame.Name = "ToolTipFrame"
ToolTipFrame.BackgroundColor3 = Color3.fromRGB(18, 18, 18)
ToolTipFrame.BackgroundTransparency = 1
ToolTipFrame.BorderSizePixel = 0
ToolTipFrame.AnchorPoint = Vector2.new(0.5, 1)
ToolTipFrame.Position = UDim2.new(0.5, 0, 0, -5)
ToolTipFrame.Visible = false
ToolTipFrame.ZIndex = 200
ToolTipFrame.Parent = Dropdown
local TooltipCorner = Instance.new("UICorner")
TooltipCorner.CornerRadius = UDim.new(0, 6)
TooltipCorner.Parent = ToolTipFrame
local TooltipStroke = Instance.new("UIStroke")
TooltipStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
TooltipStroke.LineJoinMode = Enum.LineJoinMode.Round
TooltipStroke.Color = Color3.fromRGB(255, 255, 255)
TooltipStroke.Thickness = 0.1
TooltipStroke.Transparency = 0.2
TooltipStroke.Parent = ToolTipFrame
local TooltipText = Instance.new("TextLabel")
TooltipText.Name = "TooltipText"
TooltipText.Text = Tip
TooltipText.FontFace = Font.new(Assets.InterFont)
TooltipText.TextColor3 = Color3.fromRGB(200, 220, 200)
TooltipText.TextSize = 12
TooltipText.TextTransparency = 1
TooltipText.BackgroundTransparency = 1
TooltipText.TextXAlignment = Enum.TextXAlignment.Center
TooltipText.TextYAlignment = Enum.TextYAlignment.Center
TooltipText.TextWrapped = false
TooltipText.Size = UDim2.new(1, -12, 1, 0)
TooltipText.Position = UDim2.new(0, 6, 0, 0)
TooltipText.Parent = ToolTipFrame
local TextBounds = Services.TextService:GetTextSize(
Tip,
TooltipText.TextSize,
Enum.Font.SourceSansBold,
Vector2.new(math.huge, math.huge)
)
local TooltipWidth = math.max(80, TextBounds.X + 50)
local TooltipHeight = math.max(28, TextBounds.Y + 12)
ToolTipFrame.Size = UDim2.new(0, TooltipWidth, 0, TooltipHeight)
local function ShowTooltip()
Dropdown.ClipsDescendants = false
ToolTipFrame.Visible = true
ToolTipFrame.BackgroundTransparency = 1
TooltipText.TextTransparency = 1
Services.TweenService:Create(
ToolTipFrame,
TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out),
{BackgroundTransparency = 0.1}
):Play()
Services.TweenService:Create(
TooltipText,
TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out),
{TextTransparency = 0}
):Play()
Services.TweenService:Create(
TooltipStroke,
TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out),
{Transparency = 0.8}
):Play()
end
local function HideTooltip()
Dropdown.ClipsDescendants = true
Services.TweenService:Create(
ToolTipFrame,
TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out),
{BackgroundTransparency = 1}
):Play()
Services.TweenService:Create(
TooltipText,
TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out),
{TextTransparency = 1}
):Play()
Services.TweenService:Create(
TooltipStroke,
TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out),
{Transparency = 1}
):Play()
task.spawn(function()
task.wait(0.2)
if ToolTipFrame and ToolTipFrame.Parent then
ToolTipFrame.Visible = false
end
end)
end
if not IsHidden then
TooltipConnections[#TooltipConnections + 1] = Interact.MouseEnter:Connect(ShowTooltip)
TooltipConnections[#TooltipConnections + 1] = Interact.MouseLeave:Connect(HideTooltip)
end
end
function DropdownFunctions:SetHidden(State, Reason)
if Reason then
self:SetToolTip(Reason)
end
IsHidden = State
if State then
if not Settings.PremiumFeature then
PreviousTransparency = DropdownName.TextTransparency
end
Interact.AutoButtonColor = false
if Dropped then
ToggleDropdown()
end
Services.TweenService:Create(
DropdownName,
TweenInfo.new(0.2),
{ TextTransparency = Settings.PremiumFeature and DropdownName.TextTransparency or 0.9 }
):Play()
Services.TweenService:Create(
DropdownImage,
TweenInfo.new(0.2),
{ ImageTransparency = 0.9 }
):Play()
Services.TweenService:Create(
Dropdown,
TweenInfo.new(0.2),
{ BackgroundTransparency = 0.99 }
):Play()
Services.TweenService:Create(
Dropdown:FindFirstChild("DropdownUIStroke"),
TweenInfo.new(0.2),
{ Transparency = 0.98 }
):Play()
if SearchIcon then
Services.TweenService:Create(
SearchIcon,
TweenInfo.new(0.2),
{ ImageTransparency = 0.9 }
):Play()
end
if SearchBox then
Services.TweenService:Create(
SearchBox,
TweenInfo.new(0.2),
{ TextTransparency = 0.9 }
):Play()
SearchBox.TextEditable = false
end
for _, connection in pairs(TooltipConnections) do
if connection then
connection:Disconnect()
end
end
TooltipConnections = {}
else
Interact.AutoButtonColor = false
local originalImageTransparency = (not Utility:IsPremiumHubUser() and Settings.PremiumFeature) and 0.9 or 0.5
local originalSearchTransparency = (not Utility:IsPremiumHubUser() and Settings.PremiumFeature) and 0.6 or 0
Services.TweenService:Create(
DropdownName,
TweenInfo.new(0.2),
{ TextTransparency = Settings.PremiumFeature and DropdownName.TextTransparency or PreviousTransparency }
):Play()
Services.TweenService:Create(
DropdownImage,
TweenInfo.new(0.2),
{ ImageTransparency = originalImageTransparency }
):Play()
Services.TweenService:Create(
Dropdown,
TweenInfo.new(0.2),
{ BackgroundTransparency = 0.985 }
):Play()
Services.TweenService:Create(
Dropdown:FindFirstChild("DropdownUIStroke"),
TweenInfo.new(0.2),
{ Transparency = 0.95 }
):Play()
if SearchIcon then
Services.TweenService:Create(
SearchIcon,
TweenInfo.new(0.2),
{ ImageTransparency = originalSearchTransparency }
):Play()
end
if SearchBox then
Services.TweenService:Create(
SearchBox,
TweenInfo.new(0.2),
{ TextTransparency = 0 }
):Play()
SearchBox.TextEditable = not (not Utility:IsPremiumHubUser() and Settings.PremiumFeature)
end
local existingTooltip = Dropdown:FindFirstChild("ToolTipFrame")
if existingTooltip then
local tooltipText = existingTooltip:FindFirstChild("TooltipText")
if tooltipText and tooltipText.Text ~= "" then
self:SetToolTip(tooltipText.Text)
end
end
end
end
function DropdownFunctions:GetState()
return not IsHidden
end
function DropdownFunctions:UpdateName(New)
DropdownName.Text = New
end
function DropdownFunctions:SetVisibility(State)
Dropdown.Visible = State
end
function DropdownFunctions:ToggleOption(DfOption, DfToggle)
if IsHidden then return end
local SelectedOptions = {}
for CurrentOption, CurrentSelected in pairs(self:GetOptions()) do
if CurrentSelected then
table.insert(SelectedOptions, CurrentOption)
end
end
if table.find(SelectedOptions, DfOption) and not DfToggle then
Toggle(DfOption, false)
local index = table.find(SelectedOptions, DfOption)
if index then
table.remove(SelectedOptions, index)
end
elseif not table.find(SelectedOptions, DfOption) and DfToggle then
table.insert(SelectedOptions, DfOption)
Toggle(DfOption, true)
end
if DropdownFunctions.Settings.Callback then
if DropdownFunctions.Settings.Multi then
local Return = {}
for _, Opt in ipairs(SelectedOptions) do
Return[Opt] = true
end
DropdownFunctions.Settings.Callback(Return)
else
DropdownFunctions.Settings.Callback(SelectedOptions[1] or nil)
end
end
end
function DropdownFunctions:UpdateSelection(NewSelection)
if not NewSelection or IsHidden then return end
for Option, _ in pairs(OptionObjs) do
Toggle(Option, false)
end
local SelectedOptions = {}
if type(NewSelection) == "string" then
for Option, Data in pairs(OptionObjs) do
local IsSelected = Option == NewSelection
if IsSelected then
Toggle(Option, true)
table.insert(SelectedOptions, Option)
end
end
elseif type(NewSelection) == "table" then
for Option, _ in pairs(OptionObjs) do
local IsSelected = table.find(NewSelection, Option) ~= nil
if IsSelected then
Toggle(Option, true)
table.insert(SelectedOptions, Option)
end
end
end
if DropdownFunctions.Settings.Callback then
if DropdownFunctions.Settings.Multi then
local Return = {}
for _, Opt in ipairs(SelectedOptions) do
Return[Opt] = true
end
DropdownFunctions.Settings.Callback(Return)
else
DropdownFunctions.Settings.Callback(SelectedOptions[1] or nil)
end
end
end
function DropdownFunctions:RefreshPlayers()
RefreshPlayers()
end
function DropdownFunctions:ReturnTab()
return DropdownFunctions.Tab
end
function DropdownFunctions:ReturnClass()
return DropdownFunctions.Class
end
function DropdownFunctions:GetOptions()
local OptionsStatus = {}
for Option, Data in pairs(OptionObjs) do
local IsSelected = table.find(Selected, Option) and true or false
OptionsStatus[Option] = IsSelected
end
return OptionsStatus
end
function DropdownFunctions:GetSelectedPlayers()
if #Selected <= 0 then
return {}
end
if #Selected > 1 then
local SelectedPlayers = {}
for _, PlayerName in ipairs(Selected) do
local Player = Services.Players:FindFirstChild(PlayerName)
if Player then
table.insert(SelectedPlayers, Player)
end
end
return SelectedPlayers
else
local Player = Services.Players:FindFirstChild(Selected[1])
return Player and {Player} or {}
end
end
function DropdownFunctions:Destroy()
if PlayerConnections.PlayerAdded then
PlayerConnections.PlayerAdded:Disconnect()
end
if PlayerConnections.PlayerRemoving then
PlayerConnections.PlayerRemoving:Disconnect()
end
for _, connection in pairs(TooltipConnections) do
if connection then
connection:Disconnect()
end
end
if Dropdown then
Dropdown:Destroy()
end
for _, OptionData in pairs(OptionObjs) do
if OptionData.Button then
OptionData.Button:Destroy()
end
end
OptionObjs = {}
if Flag and WaveLibrary.Options[Flag] then
WaveLibrary.Options[Flag] = nil
end
end
if DropdownFunctions.Settings.Hidden then
if typeof(DropdownFunctions.Settings.Hidden) == "table" then
DropdownFunctions:SetHidden(DropdownFunctions.Settings.Hidden[1], DropdownFunctions.Settings.Hidden[2])
else
DropdownFunctions:SetHidden(DropdownFunctions.Settings.Hidden)
end
end
if Flag then
WaveLibrary.Options[Flag] = DropdownFunctions
end
return DropdownFunctions
end
end
end
R["Wave/UserInterface/Components/ProgressBar.lua"] = function(...)
return function(Requirements)
local Section = Requirements.Section
local WindowFunctions = Requirements.WindowFunctions
local WaveLibraryUI = Requirements.WaveLibraryUI
local WaveLibrary = Requirements.WaveLibrary
local SectionFunctions = Requirements.SectionFunctions
local BaseUIScale = Requirements.BaseUIScale
function SectionFunctions:ProgressBar(Settings, Flag)
local ProgressBarFunctions = {
Settings = Settings,
IgnoreConfig = false,
Class = "ProgressBar",
CurrentValue = Settings.Default or Settings.Minimum or 0,
IsHidden = false,
Maid = {},
Elements = {}
}
if not Flag or Flag == "WriteHere" or Flag == "AutoWriteFlag" then
Flag = string.gsub(Settings.Name, " ", "_")
end
local TWEEN_INFO = TweenInfo.new(0.3, Enum.EasingStyle.Sine)
local TRANSPARENCY = {
Default = 0.5,
Hidden = 0.9
}
local function CreateElements()
local Elements = {}
Elements.ProgressBar = Instance.new("Frame")
Elements.ProgressBar.Name = "ProgressBar"
Elements.ProgressBar.AutomaticSize = Enum.AutomaticSize.Y
Elements.ProgressBar.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
Elements.ProgressBar.BackgroundTransparency = 1
Elements.ProgressBar.BorderSizePixel = 0
Elements.ProgressBar.Size = UDim2.new(1, 0, 0, 48)
Elements.ProgressBar.Parent = Section
Elements.ProgressBarName = Instance.new("TextLabel")
Elements.ProgressBarName.Name = "ProgressBarName"
Elements.ProgressBarName.FontFace = Font.new(Assets.InterFont)
Elements.ProgressBarName.Text = Settings.Name
Elements.ProgressBarName.RichText = true
Elements.ProgressBarName.TextColor3 = WindowFunctions:GetCurrentThemeAttribute("TextPrimary")
Elements.ProgressBarName.TextSize = 13
Elements.ProgressBarName.TextTransparency = 0.5
Elements.ProgressBarName.TextTruncate = Enum.TextTruncate.AtEnd
Elements.ProgressBarName.TextXAlignment = Enum.TextXAlignment.Left
Elements.ProgressBarName.TextYAlignment = Enum.TextYAlignment.Top
Elements.ProgressBarName.AnchorPoint = Vector2.new(0, 0)
Elements.ProgressBarName.AutomaticSize = Enum.AutomaticSize.XY
Elements.ProgressBarName.BackgroundTransparency = 1
Elements.ProgressBarName.Position = UDim2.fromScale(0, 0)
Elements.ProgressBarName.Parent = Elements.ProgressBar
if Settings.PremiumFeature then
Elements.ProgressBarName.TextTransparency = 0
local PremiumGradient = Instance.new("UIGradient")
PremiumGradient.Color = WindowFunctions:GetCurrentThemeAttribute("PremiumGradientColor") or ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(0, 106, 255)),
ColorSequenceKeypoint.new(0.2, Color3.fromRGB(163, 201, 255)),
ColorSequenceKeypoint.new(0.4, Color3.fromRGB(255, 255, 255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(163, 201, 255))
})
PremiumGradient.Parent = Elements.ProgressBarName
end
Elements.ProgressValue = Instance.new("TextLabel")
Elements.ProgressValue.Name = "ProgressValue"
Elements.ProgressValue.FontFace = Font.new(Assets.InterFont)
Elements.ProgressValue.TextColor3 = Color3.fromRGB(255, 255, 255)
Elements.ProgressValue.TextSize = 12
Elements.ProgressValue.TextTransparency = 0.3
Elements.ProgressValue.TextXAlignment = Enum.TextXAlignment.Right
Elements.ProgressValue.TextYAlignment = Enum.TextYAlignment.Top
Elements.ProgressValue.AnchorPoint = Vector2.new(1, 0)
Elements.ProgressValue.AutomaticSize = Enum.AutomaticSize.XY
Elements.ProgressValue.BackgroundTransparency = 1
Elements.ProgressValue.Position = UDim2.fromScale(1, 0)
Elements.ProgressValue.Parent = Elements.ProgressBar
Elements.ProgressContainer = Instance.new("Frame")
Elements.ProgressContainer.Name = "ProgressContainer"
Elements.ProgressContainer.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Elements.ProgressContainer.BackgroundTransparency = 0.92
Elements.ProgressContainer.BorderSizePixel = 0
Elements.ProgressContainer.Position = UDim2.new(0, 0, 0, 20)
Elements.ProgressContainer.Size = UDim2.new(1, 0, 0, 6)
Elements.ProgressContainer.Parent = Elements.ProgressBar
local ProgressContainerUICorner = Instance.new("UICorner")
ProgressContainerUICorner.CornerRadius = UDim.new(1, 0)
ProgressContainerUICorner.Parent = Elements.ProgressContainer
local ProgressContainerUIStroke = Instance.new("UIStroke")
ProgressContainerUIStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
ProgressContainerUIStroke.Color = Color3.fromRGB(255, 255, 255)
ProgressContainerUIStroke.Thickness = 0.5
ProgressContainerUIStroke.Transparency = 0.85
ProgressContainerUIStroke.Parent = Elements.ProgressContainer
Elements.ProgressFill = Instance.new("Frame")
Elements.ProgressFill.Name = "ProgressFill"
Elements.ProgressFill.BackgroundColor3 = WindowFunctions:GetCurrentThemeAttribute("AccentPrimary") or Color3.fromRGB(0, 162, 255)
Elements.ProgressFill.BackgroundTransparency = 0.2
Elements.ProgressFill.BorderSizePixel = 0
Elements.ProgressFill.Size = UDim2.fromScale(0, 1)
Elements.ProgressFill.Parent = Elements.ProgressContainer
local ProgressFillUICorner = Instance.new("UICorner")
ProgressFillUICorner.CornerRadius = UDim.new(1, 0)
ProgressFillUICorner.Parent = Elements.ProgressFill
if Settings.ShowIndicator ~= false then
Elements.ProgressIndicator = Instance.new("Frame")
Elements.ProgressIndicator.Name = "ProgressIndicator"
Elements.ProgressIndicator.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Elements.ProgressIndicator.BackgroundTransparency = 0.1
Elements.ProgressIndicator.BorderSizePixel = 0
Elements.ProgressIndicator.AnchorPoint = Vector2.new(0.5, 0.5)
Elements.ProgressIndicator.Position = UDim2.fromScale(0, 0.5)
Elements.ProgressIndicator.Size = UDim2.fromOffset(10, 10)
Elements.ProgressIndicator.Parent = Elements.ProgressContainer
local ProgressIndicatorUICorner = Instance.new("UICorner")
ProgressIndicatorUICorner.CornerRadius = UDim.new(1, 0)
ProgressIndicatorUICorner.Parent = Elements.ProgressIndicator
local ProgressIndicatorUIStroke = Instance.new("UIStroke")
ProgressIndicatorUIStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
ProgressIndicatorUIStroke.Color = WindowFunctions:GetCurrentThemeAttribute("AccentPrimary") or Color3.fromRGB(0, 162, 255)
ProgressIndicatorUIStroke.Thickness = 1.5
ProgressIndicatorUIStroke.Transparency = 0.3
ProgressIndicatorUIStroke.Parent = Elements.ProgressIndicator
end
if Settings.AnimatedFill then
local PulseGradient = Instance.new("UIGradient")
PulseGradient.Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 255, 255)),
ColorSequenceKeypoint.new(0.5, WindowFunctions:GetCurrentThemeAttribute("AccentPrimary") or Color3.fromRGB(0, 162, 255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 255, 255))
})
PulseGradient.Transparency = NumberSequence.new({
NumberSequenceKeypoint.new(0, 0.8),
NumberSequenceKeypoint.new(0.5, 0.2),
NumberSequenceKeypoint.new(1, 0.8)
})
PulseGradient.Parent = Elements.ProgressFill
task.spawn(function()
while Elements.ProgressFill and Elements.ProgressFill.Parent do
Services.TweenService:Create(PulseGradient,
TweenInfo.new(1.5, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut, -1, true),
{Offset = Vector2.new(1, 0)}
):Play()
task.wait(1.5)
end
end)
end
return Elements
end
local DisplayMethods = {
Thousandths = function(Value)
return string.format("%.3f", Value)
end,
Hundredths = function(Value)
return string.format("%.2f", Value)
end,
Tenths = function(Value)
return string.format("%.1f", Value)
end,
Round = function(Value, Precision)
if Precision then
return string.format("%." .. Precision .. "f", Value)
else
return tostring(math.round(Value))
end
end,
Percent = function(Value, Min, Max, Precision)
local Percentage = ((Value - Min) / (Max - Min)) * 100
return Precision and string.format("%." .. Precision .. "f", Percentage) .. "%" or tostring(math.round(Percentage)) .. "%"
end,
Ratio = function(Value, Min, Max, Precision)
local Ratio = (Value - Min) / (Max - Min)
return Precision and string.format("%." .. Precision .. "f", Ratio) or string.format("%.2f", Ratio)
end,
Value = function(Value, Precision)
return Precision and string.format("%." .. Precision .. "f", Value) or tostring(Value)
end,
Fraction = function(Value, Min, Max)
return tostring(math.round(Value)) .. "/" .. tostring(Max - Min)
end
}
local ValueDisplayMethod = DisplayMethods[Settings.DisplayMethod] or DisplayMethods.Value
local function UpdateProgress(NewValue, IgnoreCallback)
local MinValue = Settings.Minimum or 0
local MaxValue = Settings.Maximum or 100
NewValue = math.clamp(NewValue, MinValue, MaxValue)
ProgressBarFunctions.CurrentValue = NewValue
local ProgressPercent = (NewValue - MinValue) / (MaxValue - MinValue)
Utility:PropertyTween(ProgressBarFunctions.Elements.ProgressFill, TWEEN_INFO, {
Size = UDim2.fromScale(ProgressPercent, 1)
}):Play()
if ProgressBarFunctions.Elements.ProgressIndicator then
Utility:PropertyTween(ProgressBarFunctions.Elements.ProgressIndicator, TWEEN_INFO, {
Position = UDim2.fromScale(ProgressPercent, 0.5)
}):Play()
end
local DisplayText
if Settings.DisplayMethod == "Percent" then
DisplayText = ValueDisplayMethod(NewValue, MinValue, MaxValue, Settings.Precision)
else
DisplayText = ValueDisplayMethod(NewValue, Settings.Precision)
end
ProgressBarFunctions.Elements.ProgressValue.Text = (Settings.Prefix or "") .. DisplayText .. (Settings.Suffix or "")
if not IgnoreCallback and Settings.Callback then
task.spawn(function()
Settings.Callback(NewValue, ProgressPercent)
end)
end
end
local function IsPlaceIdAllowed(PlaceIdSetting)
if not PlaceIdSetting then return true end
local CurrentPlaceId = game.PlaceId
if type(PlaceIdSetting) == "table" then
for _, PlaceId in pairs(PlaceIdSetting) do
if CurrentPlaceId == PlaceId then return true end
end
return false
else
return CurrentPlaceId == PlaceIdSetting
end
end
local function IsPlaceIdForbidden(PlaceIdSetting)
if not PlaceIdSetting then return false end
local CurrentPlaceId = game.PlaceId
if type(PlaceIdSetting) == "table" then
for _, PlaceId in pairs(PlaceIdSetting) do
if CurrentPlaceId == PlaceId then return true end
end
return false
else
return CurrentPlaceId == PlaceIdSetting
end
end
function ProgressBarFunctions:UpdateProgress(Value)
UpdateProgress(Value)
end
function ProgressBarFunctions:SetProgress(Value)
UpdateProgress(Value, true)
end
function ProgressBarFunctions:GetProgress()
return ProgressBarFunctions.CurrentValue
end
function ProgressBarFunctions:GetProgressPercent()
local MinValue = Settings.Minimum or 0
local MaxValue = Settings.Maximum or 100
return (ProgressBarFunctions.CurrentValue - MinValue) / (MaxValue - MinValue)
end
function ProgressBarFunctions:UpdateName(Name)
ProgressBarFunctions.Elements.ProgressBarName.Text = Name
end
function ProgressBarFunctions:SetVisibility(State)
ProgressBarFunctions.Elements.ProgressBar.Visible = State
end
function ProgressBarFunctions:GetState()
return not ProgressBarFunctions.IsHidden
end
function ProgressBarFunctions:ReturnSettings()
return Settings
end
function ProgressBarFunctions:SetToolTip(Tip)
if ProgressBarFunctions.Elements.ProgressBar:FindFirstChild("ToolTipFrame") then
ProgressBarFunctions.Elements.ProgressBar:FindFirstChild("ToolTipFrame"):Destroy()
end
if not Tip or Tip == "" then return end
local ToolTipFrame = Instance.new("Frame")
ToolTipFrame.Name = "ToolTipFrame"
ToolTipFrame.BackgroundColor3 = Color3.fromRGB(18, 18, 18)
ToolTipFrame.BackgroundTransparency = 1
ToolTipFrame.BorderSizePixel = 0
ToolTipFrame.AnchorPoint = Vector2.new(0.5, 1)
ToolTipFrame.Position = UDim2.new(0.5, 0, 0, -5)
ToolTipFrame.Visible = false
ToolTipFrame.ZIndex = 200
ToolTipFrame.Parent = ProgressBarFunctions.Elements.ProgressBar
local TooltipCorner = Instance.new("UICorner")
TooltipCorner.CornerRadius = UDim.new(0, 6)
TooltipCorner.Parent = ToolTipFrame
local TooltipStroke = Instance.new("UIStroke")
TooltipStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
TooltipStroke.LineJoinMode = Enum.LineJoinMode.Round
TooltipStroke.Color = Color3.fromRGB(255, 255, 255)
TooltipStroke.Thickness = 0.1
TooltipStroke.Transparency = 0.2
TooltipStroke.Parent = ToolTipFrame
local TooltipText = Instance.new("TextLabel")
TooltipText.Text = Tip
TooltipText.FontFace = Font.new(Assets.InterFont)
TooltipText.TextColor3 = Color3.fromRGB(200, 220, 200)
TooltipText.TextSize = 12
TooltipText.TextTransparency = 1
TooltipText.BackgroundTransparency = 1
TooltipText.TextXAlignment = Enum.TextXAlignment.Center
TooltipText.TextYAlignment = Enum.TextYAlignment.Center
TooltipText.Size = UDim2.new(1, -12, 1, 0)
TooltipText.Position = UDim2.new(0, 6, 0, 0)
TooltipText.Parent = ToolTipFrame
local TextBounds = Services.TextService:GetTextSize(Tip, TooltipText.TextSize, Enum.Font.SourceSansBold, Vector2.new(math.huge, math.huge))
local TooltipWidth = math.max(80, TextBounds.X + 50)
local TooltipHeight = math.max(28, TextBounds.Y + 12)
ToolTipFrame.Size = UDim2.new(0, TooltipWidth, 0, TooltipHeight)
local function ShowTooltip()
ToolTipFrame.Visible = true
Services.TweenService:Create(ToolTipFrame, TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {BackgroundTransparency = 0.1}):Play()
Services.TweenService:Create(TooltipText, TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {TextTransparency = 0}):Play()
Services.TweenService:Create(TooltipStroke, TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Transparency = 0.8}):Play()
end
local function HideTooltip()
Services.TweenService:Create(ToolTipFrame, TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {BackgroundTransparency = 1}):Play()
Services.TweenService:Create(TooltipText, TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {TextTransparency = 1}):Play()
Services.TweenService:Create(TooltipStroke, TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Transparency = 1}):Play()
task.spawn(function()
task.wait(0.2)
if ToolTipFrame and ToolTipFrame.Parent then
ToolTipFrame.Visible = false
end
end)
end
ProgressBarFunctions.Maid.TooltipShow = ProgressBarFunctions.Elements.ProgressContainer.MouseEnter:Connect(ShowTooltip)
ProgressBarFunctions.Maid.TooltipHide = ProgressBarFunctions.Elements.ProgressContainer.MouseLeave:Connect(HideTooltip)
end
function ProgressBarFunctions:SetHidden(State, Reason)
if Reason then
self:SetToolTip(Reason)
end
ProgressBarFunctions.IsHidden = State
if State then
Services.TweenService:Create(ProgressBarFunctions.Elements.ProgressContainer, TWEEN_INFO, {BackgroundTransparency = 0.98}):Play()
Services.TweenService:Create(ProgressBarFunctions.Elements.ProgressFill, TWEEN_INFO, {BackgroundTransparency = 0.9}):Play()
Services.TweenService:Create(ProgressBarFunctions.Elements.ProgressValue, TWEEN_INFO, {TextTransparency = 0.9}):Play()
if ProgressBarFunctions.Elements.ProgressIndicator then
Services.TweenService:Create(ProgressBarFunctions.Elements.ProgressIndicator, TWEEN_INFO, {BackgroundTransparency = 0.9}):Play()
end
local ContainerStroke = ProgressBarFunctions.Elements.ProgressContainer:FindFirstChild("UIStroke")
if ContainerStroke then
Services.TweenService:Create(ContainerStroke, TWEEN_INFO, {Transparency = 0.95}):Play()
end
if not Settings.PremiumFeature then
Services.TweenService:Create(ProgressBarFunctions.Elements.ProgressBarName, TWEEN_INFO, {TextTransparency = 0.9}):Play()
end
else
Services.TweenService:Create(ProgressBarFunctions.Elements.ProgressContainer, TWEEN_INFO, {BackgroundTransparency = 0.92}):Play()
Services.TweenService:Create(ProgressBarFunctions.Elements.ProgressFill, TWEEN_INFO, {BackgroundTransparency = 0.2}):Play()
Services.TweenService:Create(ProgressBarFunctions.Elements.ProgressValue, TWEEN_INFO, {TextTransparency = 0.3}):Play()
if ProgressBarFunctions.Elements.ProgressIndicator then
Services.TweenService:Create(ProgressBarFunctions.Elements.ProgressIndicator, TWEEN_INFO, {BackgroundTransparency = 0.1}):Play()
end
local ContainerStroke = ProgressBarFunctions.Elements.ProgressContainer:FindFirstChild("UIStroke")
if ContainerStroke then
Services.TweenService:Create(ContainerStroke, TWEEN_INFO, {Transparency = 0.85}):Play()
end
if not Settings.PremiumFeature then
Services.TweenService:Create(ProgressBarFunctions.Elements.ProgressBarName, TWEEN_INFO, {TextTransparency = 0.5}):Play()
end
end
end
function ProgressBarFunctions:Destroy()
for ConnectionName, Connection in pairs(ProgressBarFunctions.Maid) do
if type(Connection) == "userdata" and Connection.Disconnect then
Connection:Disconnect()
end
end
table.clear(ProgressBarFunctions.Maid)
if ProgressBarFunctions.Elements.ProgressBar then
ProgressBarFunctions.Elements.ProgressBar:Destroy()
end
if Flag and WaveLibrary.Options[Flag] then
WaveLibrary.Options[Flag] = nil
end
end
ProgressBarFunctions.Elements = CreateElements()
UpdateProgress(ProgressBarFunctions.CurrentValue, true)
if Settings.Hidden then
if typeof(Settings.Hidden) == "table" then
ProgressBarFunctions:SetHidden(Settings.Hidden[1], Settings.Hidden[2])
else
ProgressBarFunctions:SetHidden(Settings.Hidden)
end
end
if Settings.ToolTip then
ProgressBarFunctions:SetToolTip(Settings.ToolTip)
end
if Settings.PremiumFeature and not Utility:IsPremiumHubUser() then
ProgressBarFunctions:SetHidden(true, "Premium Feature")
end
if not IsPlaceIdAllowed(Settings.AllowedPlaceId) then
ProgressBarFunctions:SetHidden(true, "Not in the right PlaceId to use this feature.")
end
if IsPlaceIdForbidden(Settings.ForbiddenPlaceId) then
ProgressBarFunctions:SetHidden(true, "Not in the right PlaceId to use this feature.")
end
if Flag then
WaveLibrary.Options[Flag] = ProgressBarFunctions
end
return ProgressBarFunctions
end
end
end
R["Wave/UserInterface/Components/RangeSlider.lua"] = function(...)
return function(Requirements)
local Section = Requirements.Section
local WindowFunctions = Requirements.WindowFunctions
local WaveLibraryUI = Requirements.WaveLibraryUI
local WaveLibrary = Requirements.WaveLibrary
local SectionFunctions = Requirements.SectionFunctions
local BaseUIScale = Requirements.BaseUIScale
function SectionFunctions:RangeSlider(Settings, Flag)
local RangeSliderFunctions = {
Settings = Settings,
IgnoreConfig = Settings.IgnoreConfig,
Tab = Requirements.TabName,
Class = "RangeSlider",
MinValue = Settings.DefaultMin or Settings.Minimum,
MaxValue = Settings.DefaultMax or Settings.Maximum
}
if not Flag then
Flag = "WriteHere"
end
if Flag == "WriteHere" or Flag == "AutoWriteFlag" then
Flag = string.gsub(RangeSliderFunctions.Settings.Name, " ", "_")
end
local RangeSlider = Instance.new("Frame")
RangeSlider.Name = "RangeSlider"
RangeSlider.AutomaticSize = Enum.AutomaticSize.Y
RangeSlider.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
RangeSlider.BackgroundTransparency = 1
RangeSlider.BorderSizePixel = 0
RangeSlider.Size = UDim2.new(1, 0, 0, 38)
RangeSlider.Parent = Section
local RangeSliderName = Instance.new("TextLabel")
RangeSliderName.Name = "RangeSliderName"
RangeSliderName.FontFace = Font.new(Assets.InterFont)
RangeSliderName.Text = RangeSliderFunctions.Settings.Name
RangeSliderName.RichText = true
RangeSliderName.TextColor3 = WindowFunctions:GetCurrentThemeAttribute("TextPrimary")
RangeSliderName.TextSize = 13
RangeSliderName.TextTransparency = 0.5
RangeSliderName.TextTruncate = Enum.TextTruncate.AtEnd
RangeSliderName.TextXAlignment = Enum.TextXAlignment.Left
RangeSliderName.TextYAlignment = Enum.TextYAlignment.Top
RangeSliderName.AnchorPoint = Vector2.new(0, 0.5)
RangeSliderName.AutomaticSize = Enum.AutomaticSize.XY
RangeSliderName.BackgroundTransparency = 1
RangeSliderName.Position = UDim2.fromScale(0, 0.5)
RangeSliderName.Parent = RangeSlider
if Settings.PremiumFeature then
RangeSliderName.TextTransparency = 0
local PremiumGradient = Instance.new("UIGradient")
PremiumGradient.Color = WindowFunctions:GetCurrentThemeAttribute("PremiumGradientColor") or ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(0, 106, 255)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(163, 201, 255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 255, 255))
})
PremiumGradient.Rotation = 0
PremiumGradient.Parent = RangeSliderName
end
local RangeSliderElements = Instance.new("Frame")
RangeSliderElements.Name = "RangeSliderElements"
RangeSliderElements.AnchorPoint = Vector2.new(1, 0)
RangeSliderElements.BackgroundTransparency = 1
RangeSliderElements.Position = UDim2.fromScale(1, 0)
RangeSliderElements.Size = UDim2.fromScale(1, 1)
RangeSliderElements.Parent = RangeSlider
local MinValueInput = Instance.new("TextBox")
MinValueInput.Name = "MinValueInput"
MinValueInput.FontFace = Font.new(Assets.InterFont)
MinValueInput.TextColor3 = Color3.fromRGB(255, 255, 255)
MinValueInput.TextSize = 12
MinValueInput.TextTransparency = 0.1
MinValueInput.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
MinValueInput.BackgroundTransparency = 0.95
MinValueInput.BorderSizePixel = 0
MinValueInput.LayoutOrder = 1
MinValueInput.Size = UDim2.fromOffset(41, 21)
MinValueInput.ClipsDescendants = true
local MinValueUICorner = Instance.new("UICorner")
MinValueUICorner.CornerRadius = UDim.new(0, 4)
MinValueUICorner.Parent = MinValueInput
local MinValueUIStroke = Instance.new("UIStroke")
MinValueUIStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
MinValueUIStroke.Color = Color3.fromRGB(255, 255, 255)
MinValueUIStroke.Transparency = 0.9
MinValueUIStroke.Parent = MinValueInput
local MinValueUIPadding = Instance.new("UIPadding")
MinValueUIPadding.PaddingLeft = UDim.new(0, 2)
MinValueUIPadding.PaddingRight = UDim.new(0, 2)
MinValueUIPadding.Parent = MinValueInput
MinValueInput.Parent = RangeSliderElements
local MaxValueInput = Instance.new("TextBox")
MaxValueInput.Name = "MaxValueInput"
MaxValueInput.FontFace = Font.new(Assets.InterFont)
MaxValueInput.TextColor3 = Color3.fromRGB(255, 255, 255)
MaxValueInput.TextSize = 12
MaxValueInput.TextTransparency = 0.1
MaxValueInput.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
MaxValueInput.BackgroundTransparency = 0.95
MaxValueInput.BorderSizePixel = 0
MaxValueInput.LayoutOrder = 3
MaxValueInput.Size = UDim2.fromOffset(41, 21)
MaxValueInput.ClipsDescendants = true
local MaxValueUICorner = Instance.new("UICorner")
MaxValueUICorner.CornerRadius = UDim.new(0, 4)
MaxValueUICorner.Parent = MaxValueInput
local MaxValueUIStroke = Instance.new("UIStroke")
MaxValueUIStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
MaxValueUIStroke.Color = Color3.fromRGB(255, 255, 255)
MaxValueUIStroke.Transparency = 0.9
MaxValueUIStroke.Parent = MaxValueInput
local MaxValueUIPadding = Instance.new("UIPadding")
MaxValueUIPadding.PaddingLeft = UDim.new(0, 2)
MaxValueUIPadding.PaddingRight = UDim.new(0, 2)
MaxValueUIPadding.Parent = MaxValueInput
MaxValueInput.Parent = RangeSliderElements
if not Utility:IsPremiumHubUser() and Settings.PremiumFeature then
MinValueInput.TextEditable = false
MinValueInput.ClearTextOnFocus = false
MinValueInput.TextTransparency = 0.8
MaxValueInput.TextEditable = false
MaxValueInput.ClearTextOnFocus = false
MaxValueInput.TextTransparency = 0.8
end
local RangeSliderElementsUIListLayout = Instance.new("UIListLayout")
RangeSliderElementsUIListLayout.Padding = UDim.new(0, 5)
RangeSliderElementsUIListLayout.FillDirection = Enum.FillDirection.Horizontal
RangeSliderElementsUIListLayout.HorizontalAlignment = Enum.HorizontalAlignment.Right
RangeSliderElementsUIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
RangeSliderElementsUIListLayout.VerticalAlignment = Enum.VerticalAlignment.Center
RangeSliderElementsUIListLayout.Parent = RangeSliderElements
local SliderBarContainer = Instance.new("Frame")
SliderBarContainer.Name = "SliderBarContainer"
SliderBarContainer.BackgroundTransparency = 1
SliderBarContainer.LayoutOrder = 2
SliderBarContainer.Size = UDim2.fromOffset(123, 21)
SliderBarContainer.Parent = RangeSliderElements
local SliderBar = Instance.new("ImageLabel")
SliderBar.Name = "SliderBar"
SliderBar.Image = Assets.SliderBar
SliderBar.ImageColor3 = Color3.fromRGB(87, 86, 86)
SliderBar.BackgroundTransparency = 1
SliderBar.AnchorPoint = Vector2.new(0, 0.5)
SliderBar.Position = UDim2.fromScale(0, 0.5)
SliderBar.Size = UDim2.fromOffset(123, 3)
SliderBar.Parent = SliderBarContainer
local RangeBar = Instance.new("Frame")
RangeBar.Name = "RangeBar"
RangeBar.BackgroundColor3 = WindowFunctions:GetCurrentThemeAttribute("AccentPrimary") or Color3.fromRGB(0, 162, 255)
RangeBar.BackgroundTransparency = 0.3
RangeBar.BorderSizePixel = 0
RangeBar.AnchorPoint = Vector2.new(0, 0.5)
RangeBar.Position = UDim2.fromScale(0, 0.5)
RangeBar.Size = UDim2.fromOffset(0, 3)
RangeBar.Parent = SliderBarContainer
local RangeBarUICorner = Instance.new("UICorner")
RangeBarUICorner.CornerRadius = UDim.new(1, 0)
RangeBarUICorner.Parent = RangeBar
local MinSliderHead = Instance.new("ImageButton")
MinSliderHead.Name = "MinSliderHead"
MinSliderHead.Image = Assets.SliderHead
MinSliderHead.AnchorPoint = Vector2.new(0.5, 0.5)
MinSliderHead.BackgroundTransparency = 1
MinSliderHead.Position = UDim2.fromScale(0, 0.5)
MinSliderHead.Size = UDim2.fromOffset(12, 12)
MinSliderHead.Parent = SliderBarContainer
local MaxSliderHead = Instance.new("ImageButton")
MaxSliderHead.Name = "MaxSliderHead"
MaxSliderHead.Image = Assets.SliderHead
MaxSliderHead.AnchorPoint = Vector2.new(0.5, 0.5)
MaxSliderHead.BackgroundTransparency = 1
MaxSliderHead.Position = UDim2.fromScale(1, 0.5)
MaxSliderHead.Size = UDim2.fromOffset(12, 12)
MaxSliderHead.Parent = SliderBarContainer
local RangeSliderElementsUIPadding = Instance.new("UIPadding")
RangeSliderElementsUIPadding.PaddingTop = UDim.new(0, 3)
RangeSliderElementsUIPadding.Parent = RangeSliderElements
local IsHidden = false
local DraggingMin = false
local DraggingMax = false
local SliderConnection = nil
local PreviousNameTransparency = 0.5
local DisplayMethods = {
Thousandths = function(SliderValue)
return string.format("%.3f", SliderValue)
end,
Hundredths = function(SliderValue)
return string.format("%.2f", SliderValue)
end,
Tenths = function(SliderValue)
return string.format("%.1f", SliderValue)
end,
Round = function(SliderValue, Precision)
if Precision then
return string.format("%." .. Precision .. "f", SliderValue)
else
return tostring(math.round(SliderValue))
end
end,
Degrees = function(SliderValue, Precision)
local FormattedValue = Precision and string.format("%." .. Precision .. "f", SliderValue) or tostring(SliderValue)
return FormattedValue .. "°"
end,
Percent = function(SliderValue, Precision)
local Percentage = (SliderValue - RangeSliderFunctions.Settings.Minimum) / (RangeSliderFunctions.Settings.Maximum - RangeSliderFunctions.Settings.Minimum) * 100
return Precision and string.format("%." .. Precision .. "f", Percentage) .. "%" or tostring(math.round(Percentage)) .. "%"
end,
Value = function(SliderValue, Precision)
return Precision and string.format("%." .. Precision .. "f", SliderValue) or tostring(SliderValue)
end,
Time24Hour = function(SliderValue)
local TotalSeconds = math.floor(SliderValue)
local Hours = math.floor(TotalSeconds / 3600) % 24
local Minutes = math.floor((TotalSeconds % 3600) / 60)
local Seconds = TotalSeconds % 60
return string.format("%02d:%02d", Hours, Minutes)
end,
Time12Hour = function(SliderValue)
local TotalSeconds = math.floor(SliderValue)
local Hours24 = math.floor(TotalSeconds / 3600) % 24
local Minutes = math.floor((TotalSeconds % 3600) / 60)
local Hours12 = Hours24 % 12
if Hours12 == 0 then Hours12 = 12 end
local Period = Hours24 >= 12 and "PM" or "AM"
return string.format("%02d:%02d %s", Hours12, Minutes, Period)
end
}
local ValueDisplayMethod = DisplayMethods[RangeSliderFunctions.Settings.DisplayMethod] or DisplayMethods.Value
local function UpdateRange(IgnoreCallback)
local MinPercent = (RangeSliderFunctions.MinValue - Settings.Minimum) / (Settings.Maximum - Settings.Minimum)
local MaxPercent = (RangeSliderFunctions.MaxValue - Settings.Minimum) / (Settings.Maximum - Settings.Minimum)
MinPercent = math.clamp(MinPercent, 0, 1)
MaxPercent = math.clamp(MaxPercent, 0, 1)
MinSliderHead.Position = UDim2.fromScale(MinPercent, 0.5)
MaxSliderHead.Position = UDim2.fromScale(MaxPercent, 0.5)
local RangeWidth = MaxPercent - MinPercent
RangeBar.Position = UDim2.fromScale(MinPercent, 0.5)
RangeBar.Size = UDim2.new(RangeWidth, 0, 0, 3)
MinValueInput.Text = (Settings.Prefix or "") .. ValueDisplayMethod(RangeSliderFunctions.MinValue, Settings.Precision) .. (Settings.Suffix or "")
MaxValueInput.Text = (Settings.Prefix or "") .. ValueDisplayMethod(RangeSliderFunctions.MaxValue, Settings.Precision) .. (Settings.Suffix or "")
if not IgnoreCallback and Settings.Callback then
task.spawn(function()
Settings.Callback(RangeSliderFunctions.MinValue, RangeSliderFunctions.MaxValue)
end)
end
end
local function SetMinValue(Val, IgnoreCallback)
local PosXScale
if typeof(Val) == "Instance" then
local Input = Val
PosXScale = math.clamp((Input.Position.X - SliderBar.AbsolutePosition.X) / SliderBar.AbsoluteSize.X, 0, 1)
else
local Value = Val
PosXScale = (Value - Settings.Minimum) / (Settings.Maximum - Settings.Minimum)
end
local NewValue = PosXScale * (Settings.Maximum - Settings.Minimum) + Settings.Minimum
NewValue = math.clamp(NewValue, Settings.Minimum, RangeSliderFunctions.MaxValue)
RangeSliderFunctions.MinValue = NewValue
UpdateRange(IgnoreCallback)
end
local function SetMaxValue(Val, IgnoreCallback)
local PosXScale
if typeof(Val) == "Instance" then
local Input = Val
PosXScale = math.clamp((Input.Position.X - SliderBar.AbsolutePosition.X) / SliderBar.AbsoluteSize.X, 0, 1)
else
local Value = Val
PosXScale = (Value - Settings.Minimum) / (Settings.Maximum - Settings.Minimum)
end
local NewValue = PosXScale * (Settings.Maximum - Settings.Minimum) + Settings.Minimum
NewValue = math.clamp(NewValue, RangeSliderFunctions.MinValue, Settings.Maximum)
RangeSliderFunctions.MaxValue = NewValue
UpdateRange(IgnoreCallback)
end
UpdateRange(true)
if not Utility:IsPremiumHubUser() and Settings.PremiumFeature then
SliderBar.ImageTransparency = 0.6
MinSliderHead.ImageTransparency = 0.3
MaxSliderHead.ImageTransparency = 0.3
RangeBar.BackgroundTransparency = 0.7
end
if not Settings.PremiumFeature then
local function AddHoverEffect(Element)
Element.MouseEnter:Connect(function()
if IsHidden then return end
Utility:QuickTween(RangeSliderName, { TextTransparency = 0 })
end)
Element.MouseLeave:Connect(function()
if IsHidden then return end
Utility:QuickTween(RangeSliderName, { TextTransparency = PreviousNameTransparency })
end)
end
AddHoverEffect(MinSliderHead)
AddHoverEffect(MaxSliderHead)
AddHoverEffect(MinValueInput)
AddHoverEffect(MaxValueInput)
end
local function ConnectSliderEvents()
MinSliderHead.InputBegan:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
if not Utility:IsPremiumHubUser() and Settings.PremiumFeature then return end
if IsHidden then return end
DraggingMin = true
SetMinValue(Input)
end
end)
MinSliderHead.InputEnded:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
DraggingMin = false
if Settings.OnInputComplete then
Settings.OnInputComplete(RangeSliderFunctions.MinValue, RangeSliderFunctions.MaxValue)
end
end
end)
MaxSliderHead.InputBegan:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
if not Utility:IsPremiumHubUser() and Settings.PremiumFeature then return end
if IsHidden then return end
DraggingMax = true
SetMaxValue(Input)
end
end)
MaxSliderHead.InputEnded:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
DraggingMax = false
if Settings.OnInputComplete then
Settings.OnInputComplete(RangeSliderFunctions.MinValue, RangeSliderFunctions.MaxValue)
end
end
end)
MinValueInput.FocusLost:Connect(function(EnterPressed)
if IsHidden then return end
local InputText = MinValueInput.Text
local Value = tonumber(InputText:match("(%-?%d+%.?%d*)"))
if Value then
local NewValue = math.clamp(Value, Settings.Minimum, RangeSliderFunctions.MaxValue)
RangeSliderFunctions.MinValue = NewValue
UpdateRange()
else
MinValueInput.Text = ValueDisplayMethod(RangeSliderFunctions.MinValue, Settings.Precision)
end
if Settings.OnInputComplete then
Settings.OnInputComplete(RangeSliderFunctions.MinValue, RangeSliderFunctions.MaxValue)
end
end)
MaxValueInput.FocusLost:Connect(function(EnterPressed)
if IsHidden then return end
local InputText = MaxValueInput.Text
local Value = tonumber(InputText:match("(%-?%d+%.?%d*)"))
if Value then
local NewValue = math.clamp(Value, RangeSliderFunctions.MinValue, Settings.Maximum)
RangeSliderFunctions.MaxValue = NewValue
UpdateRange()
else
MaxValueInput.Text = ValueDisplayMethod(RangeSliderFunctions.MaxValue, Settings.Precision)
end
if Settings.OnInputComplete then
Settings.OnInputComplete(RangeSliderFunctions.MinValue, RangeSliderFunctions.MaxValue)
end
end)
SliderConnection = Services.UserInputService.InputChanged:Connect(function(Input)
if not IsHidden and (Input.UserInputType == Enum.UserInputType.MouseMovement or Input.UserInputType == Enum.UserInputType.Touch) then
if DraggingMin then
SetMinValue(Input)
elseif DraggingMax then
SetMaxValue(Input)
end
end
end)
end
ConnectSliderEvents()
local function UpdateSliderBarSize()
local Padding = RangeSliderElementsUIListLayout.Padding.Offset
local MinValueWidth = MinValueInput.AbsoluteSize.X
local MaxValueWidth = MaxValueInput.AbsoluteSize.X
local SliderNameWidth = RangeSliderName.AbsoluteSize.X
local TotalWidth = RangeSliderElements.AbsoluteSize.X
local NewBarWidth = (TotalWidth - (Padding + MinValueWidth + MaxValueWidth + SliderNameWidth + 15)) / BaseUIScale.Scale
SliderBar.Size = UDim2.new(0, NewBarWidth, 0, 3)
SliderBarContainer.Size = UDim2.new(0, NewBarWidth, 0, 20)
end
UpdateSliderBarSize()
RangeSliderName:GetPropertyChangedSignal("AbsoluteSize"):Connect(UpdateSliderBarSize)
Section:GetPropertyChangedSignal("AbsoluteSize"):Connect(UpdateSliderBarSize)
function RangeSliderFunctions:SetToolTip(Tip)
if RangeSlider:FindFirstChild("ToolTipFrame") then
RangeSlider:FindFirstChild("ToolTipFrame"):Destroy()
end
if not Tip or Tip == "" then return end
local ToolTipFrame = Instance.new("Frame")
ToolTipFrame.Name = "ToolTipFrame"
ToolTipFrame.BackgroundColor3 = Color3.fromRGB(18, 18, 18)
ToolTipFrame.BackgroundTransparency = 1
ToolTipFrame.BorderSizePixel = 0
ToolTipFrame.AnchorPoint = Vector2.new(0.5, 1)
ToolTipFrame.Position = UDim2.new(0.5, 0, 0, -5)
ToolTipFrame.Visible = false
ToolTipFrame.ZIndex = 200
ToolTipFrame.Parent = RangeSlider
local TooltipCorner = Instance.new("UICorner")
TooltipCorner.CornerRadius = UDim.new(0, 6)
TooltipCorner.Parent = ToolTipFrame
local TooltipStroke = Instance.new("UIStroke")
TooltipStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
TooltipStroke.LineJoinMode = Enum.LineJoinMode.Round
TooltipStroke.Color = Color3.fromRGB(255, 255, 255)
TooltipStroke.Thickness = 0.1
TooltipStroke.Transparency = 0.2
TooltipStroke.Parent = ToolTipFrame
local TooltipText = Instance.new("TextLabel")
TooltipText.Name = "TooltipText"
TooltipText.Text = Tip
TooltipText.FontFace = Font.new(Assets.InterFont)
TooltipText.TextColor3 = Color3.fromRGB(200, 220, 200)
TooltipText.TextSize = 12
TooltipText.TextTransparency = 1
TooltipText.BackgroundTransparency = 1
TooltipText.TextXAlignment = Enum.TextXAlignment.Center
TooltipText.TextYAlignment = Enum.TextYAlignment.Center
TooltipText.Size = UDim2.new(1, -12, 1, 0)
TooltipText.Position = UDim2.new(0, 6, 0, 0)
TooltipText.Parent = ToolTipFrame
local TextBounds = Services.TextService:GetTextSize(Tip, TooltipText.TextSize, Enum.Font.SourceSansBold, Vector2.new(math.huge, math.huge))
local TooltipWidth = math.max(80, TextBounds.X + 50)
local TooltipHeight = math.max(28, TextBounds.Y + 12)
ToolTipFrame.Size = UDim2.new(0, TooltipWidth, 0, TooltipHeight)
local function ShowTooltip()
ToolTipFrame.Visible = true
Services.TweenService:Create(ToolTipFrame, TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {BackgroundTransparency = 0.1}):Play()
Services.TweenService:Create(TooltipText, TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {TextTransparency = 0}):Play()
Services.TweenService:Create(TooltipStroke, TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Transparency = 0.8}):Play()
end
local function HideTooltip()
Services.TweenService:Create(ToolTipFrame, TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {BackgroundTransparency = 1}):Play()
Services.TweenService:Create(TooltipText, TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {TextTransparency = 1}):Play()
Services.TweenService:Create(TooltipStroke, TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Transparency = 1}):Play()
task.spawn(function()
task.wait(0.2)
if ToolTipFrame and ToolTipFrame.Parent then
ToolTipFrame.Visible = false
end
end)
end
MinSliderHead.MouseEnter:Connect(ShowTooltip)
MinSliderHead.MouseLeave:Connect(HideTooltip)
MaxSliderHead.MouseEnter:Connect(ShowTooltip)
MaxSliderHead.MouseLeave:Connect(HideTooltip)
end
function RangeSliderFunctions:SetHidden(State, Reason)
if Reason then
self:SetToolTip(Reason)
end
IsHidden = State
if State then
Services.TweenService:Create(SliderBar, TweenInfo.new(0.2), {ImageTransparency = 0.9}):Play()
Services.TweenService:Create(MinSliderHead, TweenInfo.new(0.2), {ImageTransparency = 0.9}):Play()
Services.TweenService:Create(MaxSliderHead, TweenInfo.new(0.2), {ImageTransparency = 0.9}):Play()
Services.TweenService:Create(RangeBar, TweenInfo.new(0.2), {BackgroundTransparency = 0.95}):Play()
if not Settings.PremiumFeature then
Services.TweenService:Create(RangeSliderName, TweenInfo.new(0.2), {TextTransparency = 0.9}):Play()
end
Services.TweenService:Create(MinValueInput, TweenInfo.new(0.2), {TextTransparency = 0.9, BackgroundTransparency = 0.99}):Play()
Services.TweenService:Create(MaxValueInput, TweenInfo.new(0.2), {TextTransparency = 0.9, BackgroundTransparency = 0.99}):Play()
Services.TweenService:Create(MinValueUIStroke, TweenInfo.new(0.2), {Transparency = 0.95}):Play()
Services.TweenService:Create(MaxValueUIStroke, TweenInfo.new(0.2), {Transparency = 0.95}):Play()
MinValueInput.TextEditable = false
MaxValueInput.TextEditable = false
if SliderConnection then
SliderConnection:Disconnect()
SliderConnection = nil
end
else
local originalBarTransparency = (not Utility:IsPremiumHubUser() and Settings.PremiumFeature) and 0.6 or 0
local originalHeadTransparency = (not Utility:IsPremiumHubUser() and Settings.PremiumFeature) and 0.3 or 0
Services.TweenService:Create(SliderBar, TweenInfo.new(0.2), {ImageTransparency = originalBarTransparency}):Play()
Services.TweenService:Create(MinSliderHead, TweenInfo.new(0.2), {ImageTransparency = originalHeadTransparency}):Play()
Services.TweenService:Create(MaxSliderHead, TweenInfo.new(0.2), {ImageTransparency = originalHeadTransparency}):Play()
Services.TweenService:Create(RangeBar, TweenInfo.new(0.2), {BackgroundTransparency = Settings.PremiumFeature and not Utility:IsPremiumHubUser() and 0.7 or 0.3}):Play()
if not Settings.PremiumFeature then
Services.TweenService:Create(RangeSliderName, TweenInfo.new(0.2), {TextTransparency = PreviousNameTransparency}):Play()
end
local valueTransparency = (not Utility:IsPremiumHubUser() and Settings.PremiumFeature) and 0.8 or 0.1
local valueEditable = not (not Utility:IsPremiumHubUser() and Settings.PremiumFeature)
Services.TweenService:Create(MinValueInput, TweenInfo.new(0.2), {TextTransparency = valueTransparency, BackgroundTransparency = 0.95}):Play()
Services.TweenService:Create(MaxValueInput, TweenInfo.new(0.2), {TextTransparency = valueTransparency, BackgroundTransparency = 0.95}):Play()
Services.TweenService:Create(MinValueUIStroke, TweenInfo.new(0.2), {Transparency = 0.9}):Play()
Services.TweenService:Create(MaxValueUIStroke, TweenInfo.new(0.2), {Transparency = 0.9}):Play()
MinValueInput.TextEditable = valueEditable
MaxValueInput.TextEditable = valueEditable
if not SliderConnection then
ConnectSliderEvents()
end
end
end
function RangeSliderFunctions:UpdateName(Name)
RangeSliderName.Text = Name
end
function RangeSliderFunctions:SetVisibility(State)
RangeSlider.Visible = State
end
function RangeSliderFunctions:UpdateRange(MinValue, MaxValue)
RangeSliderFunctions.MinValue = math.clamp(MinValue or RangeSliderFunctions.MinValue, Settings.Minimum, Settings.Maximum)
RangeSliderFunctions.MaxValue = math.clamp(MaxValue or RangeSliderFunctions.MaxValue, Settings.Minimum, Settings.Maximum)
if RangeSliderFunctions.MinValue > RangeSliderFunctions.MaxValue then
RangeSliderFunctions.MinValue = RangeSliderFunctions.MaxValue
end
UpdateRange(true)
end
function RangeSliderFunctions:GetRange(Tabled)
return Tabled and {RangeSliderFunctions.MinValue, RangeSliderFunctions.MaxValue} or RangeSliderFunctions.MinValue, RangeSliderFunctions.MaxValue
end
function RangeSliderFunctions:GetMinimum()
return RangeSliderFunctions.MinValue
end
function RangeSliderFunctions:GetMaximum()
return RangeSliderFunctions.MaxValue
end
function RangeSliderFunctions:GetState()
return not IsHidden
end
function RangeSliderFunctions:ReturnSettings()
return Settings
end
function RangeSliderFunctions:ReturnTab()
return RangeSliderFunctions.Tab
end
function RangeSliderFunctions:ReturnClass()
return RangeSliderFunctions.Class
end
function RangeSliderFunctions:Destroy()
if SliderConnection then
SliderConnection:Disconnect()
end
if RangeSlider then
RangeSlider:Destroy()
end
if Flag and WaveLibrary.Options[Flag] then
WaveLibrary.Options[Flag] = nil
end
end
if Settings.Hidden then
if typeof(Settings.Hidden) == "table" then
RangeSliderFunctions:SetHidden(Settings.Hidden[1], Settings.Hidden[2])
else
RangeSliderFunctions:SetHidden(Settings.Hidden)
end
end
if Settings.ToolTip then
RangeSliderFunctions:SetToolTip(Settings.ToolTip)
end
local function IsPlaceIdAllowed(PlaceIdSetting)
if not PlaceIdSetting then return true end
local CurrentPlaceId = game.PlaceId
if type(PlaceIdSetting) == "table" then
for _, PlaceId in pairs(PlaceIdSetting) do
if CurrentPlaceId == PlaceId then return true end
end
return false
else
return CurrentPlaceId == PlaceIdSetting
end
end
local function IsPlaceIdForbidden(PlaceIdSetting)
if not PlaceIdSetting then return false end
local CurrentPlaceId = game.PlaceId
if type(PlaceIdSetting) == "table" then
for _, PlaceId in pairs(PlaceIdSetting) do
if CurrentPlaceId == PlaceId then return true end
end
return false
else
return CurrentPlaceId == PlaceIdSetting
end
end
if not IsPlaceIdAllowed(Settings.AllowedPlaceId) then
RangeSliderFunctions:SetHidden(true, "Not in the right PlaceId to use this feature.")
end
if IsPlaceIdForbidden(Settings.ForbiddenPlaceId) then
RangeSliderFunctions:SetHidden(true, "Not in the right PlaceId to use this feature.")
end
if Settings.PremiumFeature and not Utility:IsPremiumHubUser() then
RangeSliderFunctions:SetHidden(true, "Premium Feature")
end
if Flag then
WaveLibrary.Options[Flag] = RangeSliderFunctions
end
return RangeSliderFunctions
end
end
end
R["Wave/UserInterface/Components/Segmented.lua"] = function(...)
return function(Requirements)
local Section = Requirements.Section
local WindowFunctions = Requirements.WindowFunctions
local WaveLibrary = Requirements.WaveLibrary
local SectionFunctions = Requirements.SectionFunctions
local function ThemeAttr(Name, Fallback)
local ok, value = pcall(function()
return WindowFunctions:GetCurrentThemeAttribute(Name)
end)
if ok and value ~= nil then return value end
return Fallback
end
function SectionFunctions:Segmented(Settings, Flag)
Settings = Settings or {}
local Options = Settings.Options or Settings.Values or {}
local SegmentedFunctions = {
Settings = Settings,
Class = "Segmented",
Value = Settings.Default or Options[1],
Tab = Requirements.TabName,
_changed = {},
}
if not Flag or Flag == "WriteHere" or Flag == "AutoWriteFlag" then
Flag = string.gsub(Settings.Name or Settings.Title or "Segmented", " ", "_")
end
local Accent = ThemeAttr("AccentPrimary", Color3.fromRGB(96, 165, 250))
local TextPrimary = ThemeAttr("TextPrimary", Color3.fromRGB(235, 235, 240))
local TextSecondary = ThemeAttr("TextSecondary", Color3.fromRGB(165, 165, 175))
-- Pick a text colour that reads on top of the accent (dark on light accents).
local function ContrastText(Color)
local Luminance = 0.299 * Color.R + 0.587 * Color.G + 0.114 * Color.B
return Luminance > 0.5 and Color3.fromRGB(18, 18, 22) or Color3.fromRGB(246, 246, 250)
end
local ActiveTextColor = ContrastText(Accent)
local Container = Instance.new("Frame")
Container.Name = "Segmented"
Container.BackgroundTransparency = 1
Container.Size = UDim2.new(1, 0, 0, 38)
Container.Parent = Section
local NameLabel = Instance.new("TextLabel")
NameLabel.Name = "Result_Name"
NameLabel.FontFace = Font.new(Assets.InterFont)
NameLabel.Text = Settings.Name or Settings.Title or ""
NameLabel.TextColor3 = TextPrimary
NameLabel.TextTransparency = 0.5
NameLabel.TextSize = 13
NameLabel.TextXAlignment = Enum.TextXAlignment.Left
NameLabel.TextTruncate = Enum.TextTruncate.AtEnd
NameLabel.AnchorPoint = Vector2.new(0, 0.5)
NameLabel.Position = UDim2.fromScale(0, 0.5)
NameLabel.Size = UDim2.new(0.4, 0, 1, 0)
NameLabel.BackgroundTransparency = 1
NameLabel:SetAttribute("NoApplyTheme", true)
NameLabel.Parent = Container
local Bar = Instance.new("Frame")
Bar.Name = "Bar"
Bar.AnchorPoint = Vector2.new(1, 0.5)
Bar.Position = UDim2.fromScale(1, 0.5)
Bar.Size = UDim2.new(0, 0, 0, 27)
Bar.AutomaticSize = Enum.AutomaticSize.X
Bar.BackgroundColor3 = ThemeAttr("DropdownColor", Color3.fromRGB(28, 28, 34))
Bar.BackgroundTransparency = 0.35
Bar:SetAttribute("NoApplyTheme", true)
Bar.Parent = Container
local BarCorner = Instance.new("UICorner")
BarCorner.CornerRadius = UDim.new(0, 8)
BarCorner.Parent = Bar
local BarPadding = Instance.new("UIPadding")
BarPadding.PaddingLeft = UDim.new(0, 3)
BarPadding.PaddingRight = UDim.new(0, 3)
BarPadding.PaddingTop = UDim.new(0, 3)
BarPadding.PaddingBottom = UDim.new(0, 3)
BarPadding.Parent = Bar
local BarLayout = Instance.new("UIListLayout")
BarLayout.FillDirection = Enum.FillDirection.Horizontal
BarLayout.VerticalAlignment = Enum.VerticalAlignment.Center
BarLayout.SortOrder = Enum.SortOrder.LayoutOrder
BarLayout.Padding = UDim.new(0, 2)
BarLayout.Parent = Bar
local Pills = {}
local function Select(Option, Fire)
SegmentedFunctions.Value = Option
for Value, Pill in pairs(Pills) do
local Active = (Value == Option)
Utility:QuickTween(Pill.Bg, { BackgroundTransparency = Active and 0.06 or 1 })
Utility:QuickTween(Pill.Label, {
TextTransparency = Active and 0 or 0.4,
TextColor3 = Active and ActiveTextColor or TextSecondary,
})
end
if Fire then
if Settings.Callback then
Settings.Callback(Option)
end
for _, fn in ipairs(SegmentedFunctions._changed) do
fn(Option)
end
end
end
for _, Option in ipairs(Options) do
local Pill = Instance.new("TextButton")
Pill.Name = "Pill"
Pill.AutoButtonColor = false
Pill.Text = ""
Pill.BackgroundTransparency = 1
Pill.AutomaticSize = Enum.AutomaticSize.X
Pill.Size = UDim2.new(0, 0, 1, 0)
Pill.Parent = Bar
local Bg = Instance.new("Frame")
Bg.Name = "Bg"
Bg.BackgroundColor3 = Accent
Bg.BackgroundTransparency = 1
Bg.BorderSizePixel = 0
Bg.Size = UDim2.fromScale(1, 1)
Bg:SetAttribute("NoApplyTheme", true)
Bg.Parent = Pill
local BgCorner = Instance.new("UICorner")
BgCorner.CornerRadius = UDim.new(0, 6)
BgCorner.Parent = Bg
local Label = Instance.new("TextLabel")
Label.Name = "Result_PillLabel"
Label.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.SemiBold, Enum.FontStyle.Normal)
Label.Text = tostring(Option)
Label.TextColor3 = TextSecondary
Label.TextTransparency = 0.4
Label.TextSize = 12
Label.AutomaticSize = Enum.AutomaticSize.X
Label.Size = UDim2.new(0, 0, 1, 0)
Label.BackgroundTransparency = 1
Label:SetAttribute("NoApplyTheme", true)
Label.Parent = Pill
local LabelPadding = Instance.new("UIPadding")
LabelPadding.PaddingLeft = UDim.new(0, 11)
LabelPadding.PaddingRight = UDim.new(0, 11)
LabelPadding.Parent = Label
Pills[Option] = { Bg = Bg, Label = Label }
Pill.MouseButton1Click:Connect(function()
Select(Option, true)
end)
end
function SegmentedFunctions:OnChanged(fn)
if type(fn) == "function" then
table.insert(self._changed, fn)
end
return self
end
function SegmentedFunctions:SetValue(Option)
Select(Option, true)
return self
end
function SegmentedFunctions:GetValue()
return self.Value
end
function SegmentedFunctions:SetVisibility(State)
Container.Visible = State
end
function SegmentedFunctions:ReturnClass()
return "Segmented"
end
function SegmentedFunctions:Destroy()
Container:Destroy()
end
Select(SegmentedFunctions.Value, false)
if Flag then
WaveLibrary.Options[Flag] = SegmentedFunctions
end
return SegmentedFunctions
end
end
end
R["Wave/UserInterface/Components/Slider.lua"] = function(...)
return function(Requirements)
local Section = Requirements.Section
local WindowFunctions = Requirements.WindowFunctions
local WaveLibraryUI = Requirements.WaveLibraryUI
local WaveLibrary = Requirements.WaveLibrary
local SectionFunctions = Requirements.SectionFunctions
local BaseUIScale = Requirements.BaseUIScale
function SectionFunctions:Slider(Settings, Flag)
local SliderFunctions = {
Settings = Settings,
IgnoreConfig = Settings.IgnoreConfig,
Class = "Slider",
Tab = Requirements.TabName,
}
if not Flag then
Flag = "WriteHere"
end
if Flag == "WriteHere" or Flag == "AutoWriteFlag" then
Flag = string.gsub(SliderFunctions.Settings.Name, " ", "_")
end
local Slider = Instance.new("Frame")
Slider.Name = "Slider"
Slider.AutomaticSize = Enum.AutomaticSize.Y
Slider.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
Slider.BackgroundTransparency = 1
Slider.BorderColor3 = Color3.fromRGB(0, 0, 0)
Slider.BorderSizePixel = 0
Slider.Size = UDim2.new(1, 0, 0, 38)
Slider.Parent = Section
local SliderName = Instance.new("TextLabel")
SliderName.Name = "SliderName"
SliderName.FontFace = Font.new(Assets.InterFont)
SliderName.Text = SliderFunctions.Settings.Name
SliderName.RichText = true
SliderName.TextColor3 = WindowFunctions:GetCurrentThemeAttribute("TextPrimary")
SliderName.TextSize = 13
SliderName.TextTransparency = 0.5
SliderName.TextTruncate = Enum.TextTruncate.AtEnd
SliderName.TextXAlignment = Enum.TextXAlignment.Left
SliderName.TextYAlignment = Enum.TextYAlignment.Top
SliderName.AnchorPoint = Vector2.new(0, 0.5)
SliderName.AutomaticSize = Enum.AutomaticSize.XY
SliderName.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
SliderName.BackgroundTransparency = 1
SliderName.BorderColor3 = Color3.fromRGB(0, 0, 0)
SliderName.BorderSizePixel = 0
SliderName.Position = UDim2.fromScale(1.3e-07, 0.5)
SliderName.Parent = Slider
if Settings.PremiumFeature then
SliderName.TextTransparency = 0
local PremiumGradient = Instance.new("UIGradient")
PremiumGradient.Color = WindowFunctions:GetCurrentThemeAttribute("PremiumGradientColor") or ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(0, 106, 255)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(163, 201, 255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 255, 255))
})
PremiumGradient.Rotation = 0
PremiumGradient.Parent = SliderName
end
local SliderElements = Instance.new("Frame")
SliderElements.Name = "SliderElements"
SliderElements.AnchorPoint = Vector2.new(1, 0)
SliderElements.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
SliderElements.BackgroundTransparency = 1
SliderElements.BorderColor3 = Color3.fromRGB(0, 0, 0)
SliderElements.BorderSizePixel = 0
SliderElements.Position = UDim2.fromScale(1, 0)
SliderElements.Size = UDim2.fromScale(1, 1)
local SliderValue = Instance.new("TextBox")
SliderValue.Name = "SliderValue"
SliderValue.FontFace = Font.new(Assets.InterFont)
SliderValue.TextColor3 = Color3.fromRGB(255, 255, 255)
SliderValue.TextSize = 12
SliderValue.TextTransparency = 0.1
SliderValue.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
SliderValue.BackgroundTransparency = 0.95
SliderValue.BorderColor3 = Color3.fromRGB(0, 0, 0)
SliderValue.BorderSizePixel = 0
SliderValue.LayoutOrder = 1
SliderValue.Position = UDim2.fromScale(-0.0789, 0.171)
SliderValue.Size = UDim2.fromOffset(41, 21)
SliderValue.ClipsDescendants = true
if not Utility:IsPremiumHubUser() and Settings.PremiumFeature then
SliderValue.TextEditable = false
SliderValue.ClearTextOnFocus = false
SliderValue.TextTransparency = 0.8
end
local SliderValueUICorner = Instance.new("UICorner")
SliderValueUICorner.Name = "SliderValueUICorner"
SliderValueUICorner.CornerRadius = UDim.new(0, 4)
SliderValueUICorner.Parent = SliderValue
local SliderValueUIStroke = Instance.new("UIStroke")
SliderValueUIStroke.Name = "SliderValueUIStroke"
SliderValueUIStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
SliderValueUIStroke.Color = Color3.fromRGB(255, 255, 255)
SliderValueUIStroke.Transparency = 0.9
SliderValueUIStroke.Parent = SliderValue
local SliderValueUIPadding = Instance.new("UIPadding")
SliderValueUIPadding.Name = "SliderValueUIPadding"
SliderValueUIPadding.PaddingLeft = UDim.new(0, 2)
SliderValueUIPadding.PaddingRight = UDim.new(0, 2)
SliderValueUIPadding.Parent = SliderValue
SliderValue.Parent = SliderElements
local SliderElementsUIListLayout = Instance.new("UIListLayout")
SliderElementsUIListLayout.Name = "SliderElementsUIListLayout"
SliderElementsUIListLayout.Padding = UDim.new(0, 20)
SliderElementsUIListLayout.FillDirection = Enum.FillDirection.Horizontal
SliderElementsUIListLayout.HorizontalAlignment = Enum.HorizontalAlignment.Right
SliderElementsUIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
SliderElementsUIListLayout.VerticalAlignment = Enum.VerticalAlignment.Center
SliderElementsUIListLayout.Parent = SliderElements
local SliderBar = Instance.new("ImageLabel")
SliderBar.Name = "SliderBar"
SliderBar.Image = Assets.SliderBar
SliderBar.ImageColor3 = Color3.fromRGB(87, 86, 86)
SliderBar.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
SliderBar.BackgroundTransparency = 1
SliderBar.BorderColor3 = Color3.fromRGB(0, 0, 0)
SliderBar.BorderSizePixel = 0
SliderBar.Position = UDim2.fromScale(0.219, 0.457)
SliderBar.Size = UDim2.fromOffset(123, 3)
local SliderHead = Instance.new("ImageButton")
SliderHead.Name = "SliderHead"
SliderHead.Image = Assets.SliderHead
SliderHead.AnchorPoint = Vector2.new(0.5, 0.5)
SliderHead.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
SliderHead.BackgroundTransparency = 1
SliderHead.BorderColor3 = Color3.fromRGB(0, 0, 0)
SliderHead.BorderSizePixel = 0
SliderHead.Position = UDim2.fromScale(1, 0.5)
SliderHead.Size = UDim2.fromOffset(12, 12)
SliderHead.Parent = SliderBar
local IsHidden = false
local SliderConnection = nil
local PreviousNameTransparency = 0.5
local PreviousValueTransparency = 0.1
local Dragging = false
if not Settings.PremiumFeature then
SliderHead.MouseEnter:Connect(function()
if IsHidden then return end
Utility:QuickTween(SliderName, {
TextTransparency = 0
})
end)
SliderHead.MouseLeave:Connect(function()
if IsHidden then return end
Utility:QuickTween(SliderName, {
TextTransparency = PreviousNameTransparency
})
end)
SliderValue.MouseEnter:Connect(function()
if IsHidden then return end
Utility:QuickTween(SliderName, {
TextTransparency = 0
})
end)
SliderValue.MouseLeave:Connect(function()
if IsHidden then return end
Utility:QuickTween(SliderName, {
TextTransparency = PreviousNameTransparency
})
end)
end
if not Utility:IsPremiumHubUser() and Settings.PremiumFeature then
SliderBar.ImageTransparency = 0.6
SliderHead.ImageTransparency = 0.3
end
SliderBar.Parent = SliderElements
local SliderElementsUIPadding = Instance.new("UIPadding")
SliderElementsUIPadding.Name = "SliderElementsUIPadding"
SliderElementsUIPadding.PaddingTop = UDim.new(0, 3)
SliderElementsUIPadding.Parent = SliderElements
SliderElements.Parent = Slider
local DisplayMethods = {
Thousandths = function(SliderDisplayValue)
return string.format("%.3f", SliderDisplayValue)
end,
Hundredths = function(SliderDisplayValue)
return string.format("%.2f", SliderDisplayValue)
end,
Tenths = function(SliderDisplayValue)
return string.format("%.1f", SliderDisplayValue)
end,
Round = function(SliderDisplayValue, Precision)
local NumericValue = tonumber(SliderDisplayValue) or 0
if Precision then
return string.format("%." .. Precision .. "f", NumericValue)
else
return tostring(math.round(NumericValue))
end
end,
Degrees = function(SliderDisplayValue, Precision)
local FormattedValue = Precision and string.format("%." .. Precision .. "f", SliderDisplayValue) or tostring(SliderDisplayValue)
return FormattedValue .. "°"
end,
Percent = function(SliderDisplayValue, Precision)
local Percentage = (SliderDisplayValue - SliderFunctions.Settings.Minimum) / (SliderFunctions.Settings.Maximum - SliderFunctions.Settings.Minimum) * 100
return Precision and string.format("%." .. Precision .. "f", Percentage) .. "%" or tostring(math.round(Percentage)) .. "%"
end,
Value = function(SliderDisplayValue, Precision)
return Precision and string.format("%." .. Precision .. "f", SliderDisplayValue) or tostring(SliderDisplayValue)
end,
Time24Hour = function(SliderDisplayValue)
local TotalSeconds = math.floor(SliderDisplayValue)
local Hours = math.floor(TotalSeconds / 3600) % 24
local Minutes = math.floor((TotalSeconds % 3600) / 60)
local Seconds = TotalSeconds % 60
return string.format("%02d:%02d:%02d", Hours, Minutes, Seconds)
end,
Time12Hour = function(SliderDisplayValue)
local TotalSeconds = math.floor(SliderDisplayValue)
local Hours24 = math.floor(TotalSeconds / 3600) % 24
local Minutes = math.floor((TotalSeconds % 3600) / 60)
local Seconds = TotalSeconds % 60
local Hours12 = Hours24 % 12
if Hours12 == 0 then Hours12 = 12 end
local Period = Hours24 >= 12 and "PM" or "AM"
return string.format("%02d:%02d:%02d %s", Hours12, Minutes, Seconds, Period)
end
}
local ValueDisplayMethod = DisplayMethods[SliderFunctions.Settings.DisplayMethod] or DisplayMethods.Value
local FinalValue
local function SetValue(Val, IgnoreCallback)
local PosXScale
if typeof(Val) == "Instance" then
local Input = Val
PosXScale = math.clamp((Input.Position.X - SliderBar.AbsolutePosition.X) / SliderBar.AbsoluteSize.X, 0, 1)
else
local Value = Val
PosXScale = (Value - SliderFunctions.Settings.Minimum) / (SliderFunctions.Settings.Maximum - Settings.Minimum)
end
local Pos = UDim2.new(PosXScale, 0, 0.5, 0)
SliderHead.Position = Pos
FinalValue = PosXScale * (SliderFunctions.Settings.Maximum - SliderFunctions.Settings.Minimum) + Settings.Minimum
SliderValue.Text = (Settings.Prefix or "") .. ValueDisplayMethod(FinalValue, SliderFunctions.Settings.Precision) .. (Settings.Suffix or "")
if not IgnoreCallback then
task.spawn(function()
if SliderFunctions.Settings.Callback then
SliderFunctions.Settings.Callback(FinalValue)
end
end)
end
SliderFunctions.Value = FinalValue
end
SetValue(SliderFunctions.Settings.Default, true)
local function ConnectSliderEvents()
SliderHead.InputBegan:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
if not Utility:IsPremiumHubUser() and Settings.PremiumFeature then
return
end
if IsHidden then
return
end
Dragging = true
SetValue(Input)
end
end)
SliderHead.InputEnded:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
if not Utility:IsPremiumHubUser() and Settings.PremiumFeature then
return
end
if IsHidden then
return
end
Dragging = false
if SliderFunctions.Settings.OnInputComplete then
SliderFunctions.Settings.OnInputComplete(FinalValue)
end
end
end)
SliderValue.FocusLost:Connect(function(EnterPressed)
if IsHidden then return end
local InputText = SliderValue.Text
local Value, IsPercent = InputText:match("^(%-?%d+%.?%d*)(%%?)$")
if Value then
Value = tonumber(Value)
IsPercent = IsPercent == "%"
if IsPercent then
Value = SliderFunctions.Settings.Minimum + (Value / 100) * (SliderFunctions.Settings.Maximum - SliderFunctions.Settings.Minimum)
end
local NewValue = math.clamp(Value, SliderFunctions.Settings.Minimum, SliderFunctions.Settings.Maximum)
SetValue(NewValue)
else
SliderValue.Text = ValueDisplayMethod(SliderValue)
end
if SliderFunctions.Settings.OnInputComplete then
SliderFunctions.Settings.OnInputComplete(FinalValue)
end
end)
SliderConnection = Services.UserInputService.InputChanged:Connect(function(Input)
if Dragging and not IsHidden and (Input.UserInputType == Enum.UserInputType.MouseMovement or Input.UserInputType == Enum.UserInputType.Touch) then
SetValue(Input)
end
end)
end
ConnectSliderEvents()
local function UpdateSliderBarSize()
local Padding = SliderElementsUIListLayout.Padding.Offset
local SliderValueWidth = SliderValue.AbsoluteSize.X
local SliderNameWidth = SliderName.AbsoluteSize.X
local TotalWidth = SliderElements.AbsoluteSize.X
local NewBarWidth = (TotalWidth - (Padding + SliderValueWidth + SliderNameWidth + 20)) / BaseUIScale.Scale
SliderBar.Size = UDim2.new(SliderBar.Size.X.Scale, NewBarWidth, SliderBar.Size.Y.Scale, SliderBar.Size.Y.Offset)
end
UpdateSliderBarSize()
SliderName:GetPropertyChangedSignal("AbsoluteSize"):Connect(UpdateSliderBarSize)
Section:GetPropertyChangedSignal("AbsoluteSize"):Connect(UpdateSliderBarSize)
function SliderFunctions:SetToolTip(Tip)
if Slider:FindFirstChild("ToolTipFrame") then
Slider:FindFirstChild("ToolTipFrame"):Destroy()
end
if not Tip or Tip == "" then
return
end
local ToolTipFrame = Instance.new("Frame")
ToolTipFrame.Name = "ToolTipFrame"
ToolTipFrame.BackgroundColor3 = Color3.fromRGB(18, 18, 18)
ToolTipFrame.BackgroundTransparency = 1
ToolTipFrame.BorderSizePixel = 0
ToolTipFrame.AnchorPoint = Vector2.new(0.5, 1)
ToolTipFrame.Position = UDim2.new(0.5, 0, 0, -5)
ToolTipFrame.Visible = false
ToolTipFrame.ZIndex = 200
ToolTipFrame.Parent = Slider
local TooltipCorner = Instance.new("UICorner")
TooltipCorner.CornerRadius = UDim.new(0, 6)
TooltipCorner.Parent = ToolTipFrame
local TooltipStroke = Instance.new("UIStroke")
TooltipStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
TooltipStroke.LineJoinMode = Enum.LineJoinMode.Round
TooltipStroke.Color = Color3.fromRGB(255, 255, 255)
TooltipStroke.Thickness = 0.1
TooltipStroke.Transparency = 0.2
TooltipStroke.Parent = ToolTipFrame
local TooltipText = Instance.new("TextLabel")
TooltipText.Name = "TooltipText"
TooltipText.Text = Tip
TooltipText.FontFace = Font.new(Assets.InterFont)
TooltipText.TextColor3 = Color3.fromRGB(200, 220, 200)
TooltipText.TextSize = 12
TooltipText.TextTransparency = 1
TooltipText.BackgroundTransparency = 1
TooltipText.TextXAlignment = Enum.TextXAlignment.Center
TooltipText.TextYAlignment = Enum.TextYAlignment.Center
TooltipText.TextWrapped = false
TooltipText.Size = UDim2.new(1, -12, 1, 0)
TooltipText.Position = UDim2.new(0, 6, 0, 0)
TooltipText.Parent = ToolTipFrame
local TextBounds = Services.TextService:GetTextSize(
Tip,
TooltipText.TextSize,
Enum.Font.SourceSansBold,
Vector2.new(math.huge, math.huge)
)
local TooltipWidth = math.max(80, TextBounds.X + 50)
local TooltipHeight = math.max(28, TextBounds.Y + 12)
ToolTipFrame.Size = UDim2.new(0, TooltipWidth, 0, TooltipHeight)
local function ShowTooltip()
ToolTipFrame.Visible = true
ToolTipFrame.BackgroundTransparency = 1
TooltipText.TextTransparency = 1
Services.TweenService:Create(
ToolTipFrame,
TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out),
{BackgroundTransparency = 0.1}
):Play()
Services.TweenService:Create(
TooltipText,
TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out),
{TextTransparency = 0}
):Play()
Services.TweenService:Create(
TooltipStroke,
TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out),
{Transparency = 0.8}
):Play()
end
local function HideTooltip()
Services.TweenService:Create(
ToolTipFrame,
TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out),
{BackgroundTransparency = 1}
):Play()
Services.TweenService:Create(
TooltipText,
TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out),
{TextTransparency = 1}
):Play()
Services.TweenService:Create(
TooltipStroke,
TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out),
{Transparency = 1}
):Play()
task.spawn(function()
task.wait(0.2)
if ToolTipFrame and ToolTipFrame.Parent then
ToolTipFrame.Visible = false
end
end)
end
SliderHead.MouseEnter:Connect(ShowTooltip)
SliderHead.MouseLeave:Connect(HideTooltip)
SliderValue.MouseEnter:Connect(ShowTooltip)
SliderValue.MouseLeave:Connect(HideTooltip)
end
function SliderFunctions:SetHidden(State, Reason)
if Reason then
self:SetToolTip(Reason)
end
IsHidden = State
if State then
if not Settings.PremiumFeature then
PreviousNameTransparency = SliderName.TextTransparency
end
PreviousValueTransparency = SliderValue.TextTransparency
Services.TweenService:Create(
SliderBar,
TweenInfo.new(0.2),
{ ImageTransparency = 0.9 }
):Play()
Services.TweenService:Create(
SliderHead,
TweenInfo.new(0.2),
{ ImageTransparency = 0.9 }
):Play()
if not Settings.PremiumFeature then
Services.TweenService:Create(
SliderName,
TweenInfo.new(0.2),
{ TextTransparency = 0.9 }
):Play()
end
Services.TweenService:Create(
SliderValue,
TweenInfo.new(0.2),
{ TextTransparency = 0.9, BackgroundTransparency = 0.99 }
):Play()
Services.TweenService:Create(
SliderValueUIStroke,
TweenInfo.new(0.2),
{ Transparency = 0.95 }
):Play()
SliderValue.TextEditable = false
SliderHead.AutoButtonColor = false
if SliderConnection then
SliderConnection:Disconnect()
SliderConnection = nil
end
else
local originalBarTransparency = (not Utility:IsPremiumHubUser() and Settings.PremiumFeature) and 0.6 or 0
local originalHeadTransparency = (not Utility:IsPremiumHubUser() and Settings.PremiumFeature) and 0.3 or 0
Services.TweenService:Create(
SliderBar,
TweenInfo.new(0.2),
{ ImageTransparency = originalBarTransparency }
):Play()
Services.TweenService:Create(
SliderHead,
TweenInfo.new(0.2),
{ ImageTransparency = originalHeadTransparency }
):Play()
if not Settings.PremiumFeature then
Services.TweenService:Create(
SliderName,
TweenInfo.new(0.2),
{ TextTransparency = PreviousNameTransparency }
):Play()
end
local valueTransparency = (not Utility:IsPremiumHubUser() and Settings.PremiumFeature) and 0.8 or 0.1
local valueEditable = not (not Utility:IsPremiumHubUser() and Settings.PremiumFeature)
Services.TweenService:Create(
SliderValue,
TweenInfo.new(0.2),
{ TextTransparency = valueTransparency, BackgroundTransparency = 0.95 }
):Play()
Services.TweenService:Create(
SliderValueUIStroke,
TweenInfo.new(0.2),
{ Transparency = 0.9 }
):Play()
SliderValue.TextEditable = valueEditable
SliderHead.AutoButtonColor = false
if not SliderConnection then
SliderConnection = Services.UserInputService.InputChanged:Connect(function(Input)
if Dragging and not IsHidden and (Input.UserInputType == Enum.UserInputType.MouseMovement or Input.UserInputType == Enum.UserInputType.Touch) then
SetValue(Input)
end
end)
end
end
end
function SliderFunctions:UpdateName(Name)
SliderName.Text = Name
end
function SliderFunctions:SetVisibility(State)
Slider.Visible = State
end
function SliderFunctions:UpdateValue(Value, IgnoreCallback)
SetValue(tonumber(Value), IgnoreCallback or false)
end
function SliderFunctions:GetValue()
return FinalValue
end
function SliderFunctions:ReturnClass()
return SliderFunctions.Class
end
function SliderFunctions:ReturnTab()
return SliderFunctions.Tab
end
function SliderFunctions:GetState()
return not IsHidden
end
function SliderFunctions:ReturnSettings()
return Settings
end
function SliderFunctions:Destroy()
if SliderConnection then
SliderConnection:Disconnect()
end
if Slider then
Slider:Destroy()
end
if Flag and WaveLibrary.Options[Flag] then
WaveLibrary.Options[Flag] = nil
end
end
if SliderFunctions.Settings.Hidden then
if typeof(SliderFunctions.Settings.Hidden) == "table" then
SliderFunctions:SetHidden(SliderFunctions.Settings.Hidden[1], SliderFunctions.Settings.Hidden[2])
else
SliderFunctions:SetHidden(SliderFunctions.Settings.Hidden)
end
end
if SliderFunctions.Settings.ToolTip then
SliderFunctions:SetToolTip(Settings.ToolTip)
end
local function IsPlaceIdAllowed(PlaceIdSetting)
if not PlaceIdSetting then return true end
local CurrentPlaceId = game.PlaceId
if type(PlaceIdSetting) == "table" then
for _, PlaceId in pairs(PlaceIdSetting) do
if CurrentPlaceId == PlaceId then
return true
end
end
return false
else
return CurrentPlaceId == PlaceIdSetting
end
end
local function IsPlaceIdForbidden(PlaceIdSetting)
if not PlaceIdSetting then return false end
local CurrentPlaceId = game.PlaceId
if type(PlaceIdSetting) == "table" then
for _, PlaceId in pairs(PlaceIdSetting) do
if CurrentPlaceId == PlaceId then
return true
end
end
return false
else
return CurrentPlaceId == PlaceIdSetting
end
end
if not IsPlaceIdAllowed(Settings.AllowedPlaceId) then
SliderFunctions:SetHidden(true, "Not in the right PlaceId to use this feature.")
end
if IsPlaceIdForbidden(Settings.ForbiddenPlaceId) then
SliderFunctions:SetHidden(true, "Not in the right PlaceId to use this feature.")
end
if Settings.PremiumFeature and not Utility:IsPremiumHubUser() then
SliderFunctions:SetHidden(true, "Premium Feature")
end
if Flag then
WaveLibrary.Options[Flag] = SliderFunctions
end
return SliderFunctions
end
end
end
R["Wave/UserInterface/Components/Spacer.lua"] = function(...)
return function(Requirements)
local Section = Requirements.Section
local WindowFunctions = Requirements.WindowFunctions
local WaveLibraryUI = Requirements.WaveLibraryUI
local WaveLibrary = Requirements.WaveLibrary
local SectionFunctions = Requirements.SectionFunctions
local BaseUIScale = Requirements.BaseUIScale
function SectionFunctions:Spacer()
local SpacerFunctions = {}
local Spacer = Instance.new("Frame")
Spacer.Name = "Spacer"
Spacer.AnchorPoint = Vector2.new(0, 1)
Spacer.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Spacer.BackgroundTransparency = 1
Spacer.BorderColor3 = Color3.fromRGB(0, 0, 0)
Spacer.BorderSizePixel = 0
Spacer.Position = UDim2.fromScale(0, 1)
Spacer.Parent = Section
function SpacerFunctions:Remove()
Spacer:Destroy()
end
function SpacerFunctions:SetVisibility(State)
Spacer.Visible = State
end
return SpacerFunctions
end
end
end
R["Wave/UserInterface/Components/Stat.lua"] = function(...)
return function(Requirements)
local Section = Requirements.Section
local WindowFunctions = Requirements.WindowFunctions
local WaveLibrary = Requirements.WaveLibrary
local SectionFunctions = Requirements.SectionFunctions
local function ThemeAttr(Name, Fallback)
local ok, value = pcall(function()
return WindowFunctions:GetCurrentThemeAttribute(Name)
end)
if ok and value ~= nil then return value end
return Fallback
end
function SectionFunctions:Stat(Settings, Flag)
Settings = Settings or {}
local StatFunctions = {
Settings = Settings,
Class = "Stat",
Value = Settings.Value,
Tab = Requirements.TabName,
}
local Accent = ThemeAttr("AccentPrimary", Color3.fromRGB(96, 165, 250))
local TextPrimary = ThemeAttr("TextPrimary", Color3.fromRGB(236, 236, 241))
local TextSecondary = ThemeAttr("TextSecondary", Color3.fromRGB(160, 160, 172))
local Card = Instance.new("Frame")
Card.Name = "Stat"
Card.BackgroundColor3 = ThemeAttr("Surface", Color3.fromRGB(26, 26, 32))
Card.BackgroundTransparency = 0.5
Card.BorderSizePixel = 0
Card.Size = UDim2.new(1, 0, 0, 58)
Card:SetAttribute("NoApplyTheme", true)
Card.Parent = Section
local CardCorner = Instance.new("UICorner")
CardCorner.CornerRadius = UDim.new(0, 10)
CardCorner.Parent = Card
local CardStroke = Instance.new("UIStroke")
CardStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
CardStroke.Color = ThemeAttr("BorderColor", Color3.fromRGB(255, 255, 255))
CardStroke.Transparency = 0.9
CardStroke.Parent = Card
local CardPadding = Instance.new("UIPadding")
CardPadding.PaddingLeft = UDim.new(0, 14)
CardPadding.PaddingRight = UDim.new(0, 14)
CardPadding.Parent = Card
local Row = Instance.new("UIListLayout")
Row.FillDirection = Enum.FillDirection.Horizontal
Row.VerticalAlignment = Enum.VerticalAlignment.Center
Row.SortOrder = Enum.SortOrder.LayoutOrder
Row.Padding = UDim.new(0, 12)
Row.Parent = Card
if Settings.Icon then
local IconHolder = Instance.new("Frame")
IconHolder.Name = "IconHolder"
IconHolder.Size = UDim2.fromOffset(34, 34)
IconHolder.BackgroundColor3 = Accent
IconHolder.BackgroundTransparency = 0.82
IconHolder.BorderSizePixel = 0
IconHolder:SetAttribute("NoApplyTheme", true)
IconHolder.Parent = Card
local IconCorner = Instance.new("UICorner")
IconCorner.CornerRadius = UDim.new(0, 9)
IconCorner.Parent = IconHolder
local Icon = Instance.new("ImageLabel")
Icon.Name = "Result_Icon"
Icon.AnchorPoint = Vector2.new(0.5, 0.5)
Icon.Position = UDim2.fromScale(0.5, 0.5)
Icon.Size = UDim2.fromOffset(18, 18)
Icon.BackgroundTransparency = 1
Icon.Image = Settings.Icon
Icon.ImageColor3 = Accent
Icon:SetAttribute("NoApplyTheme", true)
Icon.Parent = IconHolder
end
local TextColumn = Instance.new("Frame")
TextColumn.Name = "TextColumn"
TextColumn.BackgroundTransparency = 1
TextColumn.AutomaticSize = Enum.AutomaticSize.X
TextColumn.Size = UDim2.new(0, 0, 1, 0)
TextColumn.LayoutOrder = 1
TextColumn.Parent = Card
local ColumnLayout = Instance.new("UIListLayout")
ColumnLayout.SortOrder = Enum.SortOrder.LayoutOrder
ColumnLayout.VerticalAlignment = Enum.VerticalAlignment.Center
ColumnLayout.Padding = UDim.new(0, 1)
ColumnLayout.Parent = TextColumn
local LabelText = Instance.new("TextLabel")
LabelText.Name = "Result_Label"
LabelText.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.Medium, Enum.FontStyle.Normal)
LabelText.Text = string.upper(Settings.Title or Settings.Name or "Stat")
LabelText.TextColor3 = TextSecondary
LabelText.TextTransparency = 0.25
LabelText.TextSize = 11
LabelText.TextXAlignment = Enum.TextXAlignment.Left
LabelText.AutomaticSize = Enum.AutomaticSize.XY
LabelText.BackgroundTransparency = 1
LabelText:SetAttribute("NoApplyTheme", true)
LabelText.Parent = TextColumn
local ValueText = Instance.new("TextLabel")
ValueText.Name = "Result_Value"
ValueText.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.Bold, Enum.FontStyle.Normal)
ValueText.RichText = true
ValueText.Text = tostring(Settings.Value ~= nil and Settings.Value or "—")
ValueText.TextColor3 = TextPrimary
ValueText.TextSize = 19
ValueText.TextXAlignment = Enum.TextXAlignment.Left
ValueText.AutomaticSize = Enum.AutomaticSize.XY
ValueText.BackgroundTransparency = 1
ValueText.LayoutOrder = 1
ValueText:SetAttribute("NoApplyTheme", true)
ValueText.Parent = TextColumn
function StatFunctions:SetValue(New)
self.Value = New
ValueText.Text = tostring(New)
return self
end
StatFunctions.UpdateValue = StatFunctions.SetValue
function StatFunctions:SetLabel(New)
LabelText.Text = string.upper(New)
return self
end
StatFunctions.UpdateName = StatFunctions.SetLabel
function StatFunctions:SetVisibility(State)
Card.Visible = State
end
function StatFunctions:ReturnClass()
return "Stat"
end
function StatFunctions:Destroy()
Card:Destroy()
end
if Flag then
WaveLibrary.Options[Flag] = StatFunctions
end
return StatFunctions
end
end
end
R["Wave/UserInterface/Components/SubLabel.lua"] = function(...)
return function(Requirements)
local Section = Requirements.Section
local WindowFunctions = Requirements.WindowFunctions
local WaveLibraryUI = Requirements.WaveLibraryUI
local WaveLibrary = Requirements.WaveLibrary
local SectionFunctions = Requirements.SectionFunctions
local BaseUIScale = Requirements.BaseUIScale
function SectionFunctions:SubLabel(Settings, Flag)
local SubLabelFunctions = { Settings = Settings }
local SubLabel = Instance.new("Frame")
SubLabel.Name = "SubLabel"
SubLabel.AutomaticSize = Enum.AutomaticSize.Y
SubLabel.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
SubLabel.BackgroundTransparency = 1
SubLabel.BorderColor3 = Color3.fromRGB(0, 0, 0)
SubLabel.BorderSizePixel = 0
SubLabel.Size = UDim2.new(1, 0, 0, 0)
SubLabel.Parent = Section
local SubLabelText = Instance.new("TextLabel")
SubLabelText.Name = "SubLabelText"
SubLabelText.FontFace = Font.new(Assets.InterFont)
SubLabelText.RichText = true
SubLabelText.Text = SubLabelFunctions.Settings.Text or SubLabelFunctions.Settings.Name
SubLabelText.TextColor3 = WindowFunctions:GetCurrentThemeAttribute("TextPrimary")
SubLabelText.TextSize = 12
SubLabelText.TextTransparency = 0.7
SubLabelText.TextWrapped = true
SubLabelText.TextXAlignment = Enum.TextXAlignment.Left
SubLabelText.AutomaticSize = Enum.AutomaticSize.Y
SubLabelText.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
SubLabelText.BackgroundTransparency = 1
SubLabelText.BorderColor3 = Color3.fromRGB(0, 0, 0)
SubLabelText.BorderSizePixel = 0
SubLabelText.Size = UDim2.fromScale(1, 1)
SubLabelText.Parent = SubLabel
function SubLabelFunctions:UpdateName(New)
SubLabelText.Text = New
end
function SubLabelFunctions:SetVisibility(State)
SubLabel.Visible = State
end
if Flag then
WaveLibrary.Options[Flag] = SubLabelFunctions
end
return SubLabelFunctions
end
end
end
R["Wave/UserInterface/Components/Toggle.lua"] = function(...)
return function(Requirements)
local Section = Requirements.Section
local WindowFunctions = Requirements.WindowFunctions
local WaveLibraryUI = Requirements.WaveLibraryUI
local WaveLibrary = Requirements.WaveLibrary
local SectionFunctions = Requirements.SectionFunctions
local BaseUIScale = Requirements.BaseUIScale
local ComponentManager = Requirements.ComponentManager
function SectionFunctions:Toggle(Settings, Flag)
local ToggleFunctions = {
Settings = Settings,
Tab = Requirements.TabName,
IgnoreConfig = Settings.IgnoreConfig,
Class = "Toggle",
State = Settings.Default or false,
IsHidden = false,
Maid = {},
Elements = {}
}
if not Flag or Flag == "WriteHere" or Flag == "AutoWriteFlag" then
Flag = string.gsub(Settings.Name, " ", "_")
end
local TWEEN_INFO = TweenInfo.new(0.2, Enum.EasingStyle.Sine)
local TRANSPARENCY = {
Enabled = {Toggle = 0, Head = 0},
Disabled = {Toggle = 0.5, Head = 0.05}
}
local POSITIONS = {
Enabled = UDim2.new(1, 0, 0.5, 0),
Disabled = UDim2.new(0.5, 0, 0.5, 0)
}
local ToggleOnColor = WindowFunctions:GetCurrentThemeAttribute("AccentPrimary") or Color3.fromRGB(96, 165, 250)
local ToggleOffColor = WindowFunctions:GetCurrentThemeAttribute("ToggleColor") or Color3.fromRGB(72, 72, 84)
-- Keep the knob readable on top of the ON track: a dark knob on a light
-- accent (e.g. the Dark theme's near-white accent), white otherwise.
local function ContrastColor(Color)
local Luminance = 0.299 * Color.R + 0.587 * Color.G + 0.114 * Color.B
return Luminance > 0.5 and Color3.fromRGB(28, 28, 34) or Color3.fromRGB(255, 255, 255)
end
local HeadOnColor = ContrastColor(ToggleOnColor)
local HeadOffColor = Color3.fromRGB(255, 255, 255)
local function CreateElements()
local Elements = {}
Elements.Toggle = Instance.new("Frame")
Elements.Toggle.Name = "Toggle"
Elements.Toggle.AutomaticSize = Enum.AutomaticSize.Y
Elements.Toggle.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
Elements.Toggle.BackgroundTransparency = 1
Elements.Toggle.BorderSizePixel = 0
Elements.Toggle.Size = UDim2.new(1, 0, 0, 38)
Elements.Toggle.Parent = Section
Elements.Highlight = Instance.new("Frame")
Elements.Highlight.Name = "ToggleHighlight"
Elements.Highlight.BackgroundColor3 = WindowFunctions:GetCurrentThemeAttribute("HoverColor") or Color3.fromRGB(255, 255, 255)
Elements.Highlight.BackgroundTransparency = 1
Elements.Highlight.BorderSizePixel = 0
Elements.Highlight.AnchorPoint = Vector2.new(0.5, 0.5)
Elements.Highlight.Position = UDim2.fromScale(0.5, 0.5)
Elements.Highlight.Size = UDim2.new(1, 16, 1, 2)
Elements.Highlight.ZIndex = 0
Elements.Highlight:SetAttribute("NoApplyTheme", true)
Elements.Highlight.Parent = Elements.Toggle
local HighlightCorner = Instance.new("UICorner")
HighlightCorner.CornerRadius = UDim.new(0, 8)
HighlightCorner.Parent = Elements.Highlight
Elements.ToggleName = Instance.new("TextLabel")
Elements.ToggleName.Name = "ToggleName"
Elements.ToggleName.FontFace = Font.new(Assets.InterFont)
Elements.ToggleName.Text = Settings.Name
Elements.ToggleName.RichText = true
Elements.ToggleName.TextColor3 = WindowFunctions:GetCurrentThemeAttribute("TextPrimary")
Elements.ToggleName.TextSize = 13
Elements.ToggleName.TextTransparency = 0.5
Elements.ToggleName.TextTruncate = Enum.TextTruncate.AtEnd
Elements.ToggleName.TextXAlignment = Enum.TextXAlignment.Left
Elements.ToggleName.TextYAlignment = Enum.TextYAlignment.Top
Elements.ToggleName.AnchorPoint = Vector2.new(0, 0.5)
Elements.ToggleName.AutomaticSize = Enum.AutomaticSize.Y
Elements.ToggleName.BackgroundTransparency = 1
Elements.ToggleName.Position = UDim2.fromScale(0, 0.5)
Elements.ToggleName.Size = UDim2.new(1, -50, 0, 0)
Elements.ToggleName.Parent = Elements.Toggle
if Settings.PremiumFeature then
Elements.ToggleName.TextTransparency = 0
local PremiumGradient = Instance.new("UIGradient")
PremiumGradient.Color = WindowFunctions:GetCurrentThemeAttribute("PremiumGradientColor") or ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(0, 106, 255)),
ColorSequenceKeypoint.new(0.2, Color3.fromRGB(163, 201, 255)),
ColorSequenceKeypoint.new(0.4, Color3.fromRGB(255, 255, 255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(163, 201, 255))
})
PremiumGradient.Parent = Elements.ToggleName
end
Elements.ToggleButton = Instance.new("ImageButton")
Elements.ToggleButton.Name = "ToggleButton"
Elements.ToggleButton.Image = Assets.ToggleBackground
Elements.ToggleButton.ImageColor3 = ToggleOffColor
Elements.ToggleButton.AutoButtonColor = false
Elements.ToggleButton.AnchorPoint = Vector2.new(1, 0.5)
Elements.ToggleButton.BackgroundTransparency = 1
Elements.ToggleButton.BorderSizePixel = 0
Elements.ToggleButton.Position = UDim2.fromScale(1, 0.5)
Elements.ToggleButton.Size = UDim2.fromOffset(41, 21)
Elements.ToggleButton.ImageTransparency = 0.8
Elements.ToggleButton:SetAttribute("NoApplyTheme", true)
Elements.ToggleButton.Parent = Elements.Toggle
local ToggleUIPadding = Instance.new("UIPadding")
ToggleUIPadding.PaddingBottom = UDim.new(0, 1)
ToggleUIPadding.PaddingLeft = UDim.new(0, -2)
ToggleUIPadding.PaddingRight = UDim.new(0, 3)
ToggleUIPadding.PaddingTop = UDim.new(0, 1)
ToggleUIPadding.Parent = Elements.ToggleButton
Elements.TogglerHead = Instance.new("ImageLabel")
Elements.TogglerHead.Name = "TogglerHead"
Elements.TogglerHead.Image = Assets.TogglerHead
Elements.TogglerHead.ImageColor3 = Color3.fromRGB(255, 255, 255)
Elements.TogglerHead.AnchorPoint = Vector2.new(1, 0.5)
Elements.TogglerHead.BackgroundTransparency = 1
Elements.TogglerHead.BorderSizePixel = 0
Elements.TogglerHead.Position = UDim2.fromScale(0.5, 0.5)
Elements.TogglerHead.Size = UDim2.fromOffset(15, 15)
Elements.TogglerHead.ZIndex = 2
Elements.TogglerHead.ImageTransparency = 0.8
Elements.TogglerHead:SetAttribute("NoApplyTheme", true)
Elements.TogglerHead.Parent = Elements.ToggleButton
return Elements
end
local function CreateKeybind()
local KeybindComponents = ComponentManager.CreateKeybindComponents({
Ancestor = ToggleFunctions.Elements.Toggle,
Class = ToggleFunctions.Class,
Maid = ToggleFunctions.Maid,
Functions = ToggleFunctions,
Settings = Settings,
Flag = Flag
})
if KeybindComponents then
ToggleFunctions.Elements.KeybindButton = KeybindComponents.KeybindButton
ToggleFunctions.Elements.KeybindLabel = KeybindComponents.KeybindLabel
end
end
local function UpdateToggleState(State)
local TransparencyValues = State and TRANSPARENCY.Enabled or TRANSPARENCY.Disabled
local Position = State and POSITIONS.Enabled or POSITIONS.Disabled
Utility:PropertyTween(ToggleFunctions.Elements.ToggleButton, TWEEN_INFO, {
ImageTransparency = TransparencyValues.Toggle,
ImageColor3 = State and ToggleOnColor or ToggleOffColor
}):Play()
Utility:PropertyTween(ToggleFunctions.Elements.TogglerHead, TWEEN_INFO, {
ImageTransparency = TransparencyValues.Head,
Position = Position,
ImageColor3 = State and HeadOnColor or HeadOffColor
}):Play()
ToggleFunctions.State = State
end
local function ToggleTrigger()
if Settings.Fixed or ToggleFunctions.IsHidden then return end
ToggleFunctions.State = not ToggleFunctions.State
UpdateToggleState(ToggleFunctions.State)
if Settings.Callback then
if Settings.ToggleOffActive then
for _, SignalToDisable in pairs(Settings.ToggleOffActive) do
end
end
Settings.Callback(ToggleFunctions.State)
end
end
local function SetupConnections()
ToggleFunctions.Maid.ToggleClick = ToggleFunctions.Elements.ToggleButton.MouseButton1Click:Connect(ToggleTrigger)
if not Settings.PremiumFeature then
ToggleFunctions.Maid.ToggleHover = ToggleFunctions.Elements.Toggle.MouseEnter:Connect(function()
if ToggleFunctions.IsHidden then return end
Utility:QuickTween(ToggleFunctions.Elements.Highlight, {BackgroundTransparency = 0.93})
Utility:QuickTween(ToggleFunctions.Elements.ToggleName, {TextTransparency = 0})
end)
ToggleFunctions.Maid.ToggleLeave = ToggleFunctions.Elements.Toggle.MouseLeave:Connect(function()
if ToggleFunctions.IsHidden then return end
Utility:QuickTween(ToggleFunctions.Elements.Highlight, {BackgroundTransparency = 1})
Utility:QuickTween(ToggleFunctions.Elements.ToggleName, {TextTransparency = 0.5})
end)
end
end
local function IsPlaceIdAllowed(PlaceIdSetting)
if not PlaceIdSetting then return true end
local CurrentPlaceId = game.PlaceId
if type(PlaceIdSetting) == "table" then
for _, PlaceId in pairs(PlaceIdSetting) do
if CurrentPlaceId == PlaceId then return true end
end
return false
else
return CurrentPlaceId == PlaceIdSetting
end
end
local function IsPlaceIdForbidden(PlaceIdSetting)
if not PlaceIdSetting then return false end
local CurrentPlaceId = game.PlaceId
if type(PlaceIdSetting) == "table" then
for _, PlaceId in pairs(PlaceIdSetting) do
if CurrentPlaceId == PlaceId then return true end
end
return false
else
return CurrentPlaceId == PlaceIdSetting
end
end
function ToggleFunctions:Toggle()
ToggleTrigger()
end
function ToggleFunctions:ServerToggle()
ToggleFunctions.State = not ToggleFunctions.State
UpdateToggleState(ToggleFunctions.State)
if Settings.Callback then
Settings.Callback(ToggleFunctions.State)
end
end
function ToggleFunctions:UpdateState(State, Callback)
ToggleFunctions.State = State
UpdateToggleState(ToggleFunctions.State)
if Callback then
if Settings.Callback then
Settings.Callback(ToggleFunctions.State)
end
end
end
function ToggleFunctions:GetState()
return ToggleFunctions.State
end
function ToggleFunctions:ReturnHidden()
return ToggleFunctions.IsHidden
end
function ToggleFunctions:ReturnSettings()
return Settings
end
function ToggleFunctions:ReturnClass()
return ToggleFunctions.Class
end
function ToggleFunctions:ReturnTab()
return ToggleFunctions.Tab
end
function ToggleFunctions:UpdateName(Name)
ToggleFunctions.Elements.ToggleName.Text = Name
end
function ToggleFunctions:SetToolTip(Tip)
if ToggleFunctions.Elements.Toggle:FindFirstChild("ToolTipFrame") then
ToggleFunctions.Elements.Toggle:FindFirstChild("ToolTipFrame"):Destroy()
end
if not Tip or Tip == "" then return end
local ToolTipFrame = Instance.new("Frame")
ToolTipFrame.Name = "ToolTipFrame"
ToolTipFrame.BackgroundColor3 = Color3.fromRGB(18, 18, 18)
ToolTipFrame.BackgroundTransparency = 1
ToolTipFrame.BorderSizePixel = 0
ToolTipFrame.AnchorPoint = Vector2.new(0.5, 1)
ToolTipFrame.Position = UDim2.new(0.5, 0, 0, -5)
ToolTipFrame.Visible = false
ToolTipFrame.ZIndex = 200
ToolTipFrame.Parent = ToggleFunctions.Elements.Toggle
local TooltipCorner = Instance.new("UICorner")
TooltipCorner.CornerRadius = UDim.new(0, 6)
TooltipCorner.Parent = ToolTipFrame
local TooltipStroke = Instance.new("UIStroke")
TooltipStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
TooltipStroke.LineJoinMode = Enum.LineJoinMode.Round
TooltipStroke.Color = Color3.fromRGB(255, 255, 255)
TooltipStroke.Thickness = 0.1
TooltipStroke.Transparency = 0.2
TooltipStroke.Parent = ToolTipFrame
local TooltipText = Instance.new("TextLabel")
TooltipText.Text = Tip
TooltipText.FontFace = Font.new(Assets.InterFont)
TooltipText.TextColor3 = Color3.fromRGB(200, 220, 200)
TooltipText.TextSize = 12
TooltipText.TextTransparency = 1
TooltipText.BackgroundTransparency = 1
TooltipText.TextXAlignment = Enum.TextXAlignment.Center
TooltipText.TextYAlignment = Enum.TextYAlignment.Center
TooltipText.Size = UDim2.new(1, -12, 1, 0)
TooltipText.Position = UDim2.new(0, 6, 0, 0)
TooltipText.Parent = ToolTipFrame
local TextBounds = Services.TextService:GetTextSize(Tip, TooltipText.TextSize, Enum.Font.SourceSansBold, Vector2.new(math.huge, math.huge))
local TooltipWidth = math.max(80, TextBounds.X + 50)
local TooltipHeight = math.max(28, TextBounds.Y + 12)
ToolTipFrame.Size = UDim2.new(0, TooltipWidth, 0, TooltipHeight)
ToggleFunctions.Maid.TooltipShow = ToggleFunctions.Elements.ToggleButton.MouseEnter:Connect(function()
ToolTipFrame.Visible = true
Services.TweenService:Create(ToolTipFrame, TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {BackgroundTransparency = 0.1}):Play()
Services.TweenService:Create(TooltipText, TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {TextTransparency = 0}):Play()
Services.TweenService:Create(TooltipStroke, TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Transparency = 0.8}):Play()
end)
ToggleFunctions.Maid.TooltipHide = ToggleFunctions.Elements.ToggleButton.MouseLeave:Connect(function()
Services.TweenService:Create(ToolTipFrame, TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {BackgroundTransparency = 1}):Play()
Services.TweenService:Create(TooltipText, TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {TextTransparency = 1}):Play()
Services.TweenService:Create(TooltipStroke, TweenInfo.new(0.2, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Transparency = 1}):Play()
task.wait(0.2)
if ToolTipFrame and ToolTipFrame.Parent then
ToolTipFrame.Visible = false
end
end)
end
function ToggleFunctions:SetHidden(State, Reason)
if Reason then
self:SetToolTip(Reason)
end
ToggleFunctions.IsHidden = State
ComponentManager.UpdateKeybindDetection(State, Flag, {
KeybindButton = ToggleFunctions.Elements.KeybindButton,
KeybindLabel = ToggleFunctions.Elements.KeybindLabel,
})
if State then
Services.TweenService:Create(ToggleFunctions.Elements.ToggleButton, TweenInfo.new(0.2), {ImageTransparency = 0.9}):Play()
if not Settings.PremiumFeature then
Services.TweenService:Create(ToggleFunctions.Elements.ToggleName, TweenInfo.new(0.2), {TextTransparency = 0.9}):Play()
end
if ToggleFunctions.Maid.ToggleClick then
ToggleFunctions.Maid.ToggleClick:Disconnect()
ToggleFunctions.Maid.ToggleClick = nil
end
else
Services.TweenService:Create(ToggleFunctions.Elements.ToggleButton, TweenInfo.new(0.2), {ImageTransparency = 0.5}):Play()
if not Settings.PremiumFeature then
Services.TweenService:Create(ToggleFunctions.Elements.ToggleName, TweenInfo.new(0.2), {TextTransparency = 0.5}):Play()
end
ToggleFunctions.Maid.ToggleClick = ToggleFunctions.Elements.ToggleButton.MouseButton1Click:Connect(ToggleTrigger)
end
end
function ToggleFunctions:SetVisibility(State)
ToggleFunctions.Elements.Toggle.Visible = State
end
function ToggleFunctions:Destroy()
for ConnectionName, Connection in pairs(ToggleFunctions.Maid) do
if type(Connection) == "userdata" and Connection.Disconnect then
Connection:Disconnect()
end
end
table.clear(ToggleFunctions.Maid)
if ToggleFunctions.Elements.Toggle then
ToggleFunctions.Elements.Toggle:Destroy()
end
if Flag and WaveLibrary.Options[Flag] then
WaveLibrary.Options[Flag] = nil
end
end
ToggleFunctions.Elements = CreateElements()
CreateKeybind()
SetupConnections()
UpdateToggleState(ToggleFunctions.State)
if Settings.Hidden then
if typeof(Settings.Hidden) == "table" then
ToggleFunctions:SetHidden(Settings.Hidden[1], Settings.Hidden[2])
else
ToggleFunctions:SetHidden(Settings.Hidden)
end
end
if Settings.Default == true and not Settings.IgnoreDefault and Settings.Callback then
task.defer(function()
Settings.Callback(Settings.Default)
end)
end
if Settings.ToolTip then
ToggleFunctions:SetToolTip(Settings.ToolTip)
end
if Settings.PremiumFeature and not Utility:IsPremiumHubUser() then
ToggleFunctions:SetHidden(true, "Premium Feature")
end
if not IsPlaceIdAllowed(Settings.AllowedPlaceId) then
ToggleFunctions:SetHidden(true, "Not in the right PlaceId to use this feature.")
end
if IsPlaceIdForbidden(Settings.ForbiddenPlaceId) then
ToggleFunctions:SetHidden(true, "Not in the right PlaceId to use this feature.")
end
if Flag then
WaveLibrary.Options[Flag] = ToggleFunctions
end
return ToggleFunctions
end
end
end
R["Wave/UserInterface/Components/Viewport.lua"] = function(...)
return function(Requirements)
local Section = Requirements.Section
local WindowFunctions = Requirements.WindowFunctions
local WaveLibrary = Requirements.WaveLibrary
local SectionFunctions = Requirements.SectionFunctions
local RunService = Services.RunService
local UserInputService = Services.UserInputService
local function ThemeAttr(Name, Fallback)
local ok, value = pcall(function()
return WindowFunctions:GetCurrentThemeAttribute(Name)
end)
if ok and value ~= nil then
return value
end
return Fallback
end
function SectionFunctions:Viewport(Settings, Flag)
Settings = Settings or {}
local Height = Settings.Height or 200
local HasTitle = Settings.Title ~= nil and Settings.Title ~= ""
local ViewportFunctions = {
Settings = Settings,
Class = "Viewport",
Tab = Requirements.TabName,
}
-- ---- visual container ---------------------------------------------
local Holder = Instance.new("Frame")
Holder.Name = "Viewport"
Holder.BackgroundTransparency = 1
Holder.AutomaticSize = Enum.AutomaticSize.Y
Holder.Size = UDim2.new(1, 0, 0, 0)
Holder.Parent = Section
local HolderLayout = Instance.new("UIListLayout")
HolderLayout.Padding = UDim.new(0, 8)
HolderLayout.SortOrder = Enum.SortOrder.LayoutOrder
HolderLayout.Parent = Holder
if HasTitle then
local HeaderText = Instance.new("TextLabel")
HeaderText.Name = "HeaderText"
HeaderText.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.Medium, Enum.FontStyle.Normal)
HeaderText.Text = Settings.Title
HeaderText.RichText = true
HeaderText.TextColor3 = ThemeAttr("HeaderColor", Color3.fromRGB(220, 220, 220))
HeaderText.TextTransparency = ThemeAttr("HeaderTransparency", 0.3)
HeaderText.TextSize = 15
HeaderText.TextXAlignment = Enum.TextXAlignment.Left
HeaderText.AutomaticSize = Enum.AutomaticSize.Y
HeaderText.BackgroundTransparency = 1
HeaderText.Size = UDim2.new(1, 0, 0, 0)
HeaderText.Parent = Holder
end
local ViewportFrame = Instance.new("ViewportFrame")
ViewportFrame.Name = "ViewportDisplay"
ViewportFrame.Size = UDim2.new(1, 0, 0, Height)
ViewportFrame.LayoutOrder = 1
ViewportFrame.BackgroundColor3 = ThemeAttr("DropdownColor", Color3.fromRGB(20, 20, 26))
ViewportFrame.BackgroundTransparency = 0.1
ViewportFrame.BorderSizePixel = 0
ViewportFrame.Ambient = Color3.fromRGB(170, 170, 180)
ViewportFrame.LightColor = Color3.fromRGB(255, 255, 255)
ViewportFrame.LightDirection = Vector3.new(-0.6, -1, -0.4)
-- Active so the orbit drag is sunk here and never reaches the window's
-- whole-window drag handler (otherwise rotating also moves the window).
ViewportFrame.Active = true
ViewportFrame.Parent = Holder
ViewportFrame:SetAttribute("NoApplyTheme", true)
local Corner = Instance.new("UICorner")
Corner.CornerRadius = UDim.new(0, math.max(ThemeAttr("CornerRadius", 10) - 2, 4))
Corner.Parent = ViewportFrame
local Stroke = Instance.new("UIStroke")
Stroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
Stroke.Color = ThemeAttr("BorderColor", Color3.fromRGB(120, 120, 130))
Stroke.Transparency = ThemeAttr("StrokeTransparency", 0.7)
Stroke.Parent = ViewportFrame
local Gradient = Instance.new("UIGradient")
Gradient.Rotation = 90
Gradient.Color = ColorSequence.new(Color3.fromRGB(255, 255, 255), Color3.fromRGB(205, 205, 215))
Gradient.Parent = ViewportFrame
-- subtle "drag to rotate" hint
local Hint = Instance.new("TextLabel")
Hint.Name = "Hint"
Hint.AnchorPoint = Vector2.new(1, 1)
Hint.Position = UDim2.new(1, -8, 1, -6)
Hint.Size = UDim2.fromOffset(120, 14)
Hint.BackgroundTransparency = 1
Hint.Text = "drag to rotate"
Hint.FontFace = Font.new(Assets.InterFont)
Hint.TextColor3 = Color3.fromRGB(255, 255, 255)
Hint.TextTransparency = 0.55
Hint.TextSize = 11
Hint.TextXAlignment = Enum.TextXAlignment.Right
Hint.ZIndex = 5
Hint.Parent = ViewportFrame
local Camera = Instance.new("Camera")
Camera.FieldOfView = 50
Camera.Parent = ViewportFrame
ViewportFrame.CurrentCamera = Camera
-- ---- camera / model state -----------------------------------------
local Connections = {}
local CurrentModel
local Target = Vector3.zero
local Azimuth, Elevation, Distance = math.rad(35), math.rad(12), 12
local BaseDistance = Distance
local MinDistance, MaxDistance = 4, 40
local Dragging, LastPosition = false, nil
local function UpdateCamera()
local x = math.cos(Elevation) * math.sin(Azimuth)
local y = math.sin(Elevation)
local z = math.cos(Elevation) * math.cos(Azimuth)
local position = Target + Vector3.new(x, y, z) * Distance
Camera.CFrame = CFrame.lookAt(position, Target)
end
local function SetModel(Model)
if CurrentModel then
CurrentModel:Destroy()
CurrentModel = nil
end
if not Model then
return
end
-- Player characters (and some models) are Archivable=false, which makes
-- :Clone() return nil. Temporarily flip it on the whole tree, then restore.
local ok, clone = pcall(function()
local restore = {}
if not Model.Archivable then
Model.Archivable = true
restore[#restore + 1] = Model
end
for _, descendant in ipairs(Model:GetDescendants()) do
if not descendant.Archivable then
descendant.Archivable = true
restore[#restore + 1] = descendant
end
end
local result = Model:Clone()
for _, instance in ipairs(restore) do
instance.Archivable = false
end
return result
end)
if not ok or not clone then
return
end
for _, descendant in ipairs(clone:GetDescendants()) do
if descendant:IsA("BasePart") then
descendant.Anchored = true
descendant.CanCollide = false
descendant.CanQuery = false
descendant.CanTouch = false
elseif descendant:IsA("LuaSourceContainer") or descendant:IsA("ParticleEmitter") or descendant:IsA("Sound") then
descendant:Destroy()
end
end
clone.Parent = ViewportFrame
CurrentModel = clone
local center, size
if clone:IsA("Model") then
local okBox, cf, sz = pcall(function()
return clone:GetBoundingBox()
end)
if okBox then
center, size = cf.Position, sz
end
elseif clone:IsA("BasePart") then
center, size = clone.Position, clone.Size
end
center = center or Vector3.zero
size = size or Vector3.new(4, 4, 4)
-- Recenter to origin so framing is stable no matter where the model
-- lives in the world (characters sit far from 0,0,0).
local offset = CFrame.new(-center)
if clone:IsA("Model") then
for _, part in ipairs(clone:GetDescendants()) do
if part:IsA("BasePart") then
part.CFrame = offset * part.CFrame
end
end
elseif clone:IsA("BasePart") then
clone.CFrame = offset * clone.CFrame
end
Target = Vector3.zero
Distance = math.clamp(size.Magnitude * 1.4, 5, 1000)
BaseDistance = Distance
MinDistance = math.max(Distance * 0.35, 2)
MaxDistance = Distance * 2.75
Azimuth, Elevation = math.rad(35), math.rad(12)
UpdateCamera()
end
-- The scrolling section we live in, so we can lock its scroll while the
-- cursor is over the viewport (wheel = zoom the model, not scroll page).
local ScrollAncestor
do
local parent = Holder.Parent
while parent and parent ~= game do
if parent:IsA("ScrollingFrame") then
ScrollAncestor = parent
break
end
parent = parent.Parent
end
end
-- ---- interaction (mouse + touch orbit, scroll zoom) ----------------
Connections.Began = ViewportFrame.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
Dragging = true
LastPosition = input.Position
WaveLibrary.ViewportCapturingDrag = true -- block window drag (covers touch)
end
end)
-- Hovering a viewport blocks the whole-window drag (covers mouse) and
-- locks the section scroll so the wheel only zooms the model.
Connections.Enter = ViewportFrame.MouseEnter:Connect(function()
WaveLibrary.ViewportHovering = true
if ScrollAncestor then ScrollAncestor.ScrollingEnabled = false end
end)
Connections.Leave = ViewportFrame.MouseLeave:Connect(function()
WaveLibrary.ViewportHovering = false
if ScrollAncestor then ScrollAncestor.ScrollingEnabled = true end
end)
Connections.Changed = UserInputService.InputChanged:Connect(function(input)
if Dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) and LastPosition then
local delta = input.Position - LastPosition
LastPosition = input.Position
Azimuth = Azimuth - delta.X * 0.0075
Elevation = math.clamp(Elevation + delta.Y * 0.0075, -1.45, 1.45)
UpdateCamera()
elseif input.UserInputType == Enum.UserInputType.MouseWheel then
-- only zoom when the cursor is over the viewport
local position, size = ViewportFrame.AbsolutePosition, ViewportFrame.AbsoluteSize
local mouse = UserInputService:GetMouseLocation() - Vector2.new(0, 36)
if mouse.X >= position.X and mouse.X <= position.X + size.X and mouse.Y >= position.Y and mouse.Y <= position.Y + size.Y then
Distance = math.clamp(Distance - input.Position.Z * (Distance * 0.12), MinDistance, MaxDistance)
UpdateCamera()
end
end
end)
Connections.Ended = UserInputService.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
Dragging = false
WaveLibrary.ViewportCapturingDrag = false
end
end)
-- ---- culling: only render when actually on-screen ------------------
local function IsOnScreen()
if not Holder.Visible or Holder.Parent == nil then
return false
end
local okState, state = pcall(function()
return WindowFunctions:GetState()
end)
if okState and state == false then
return false
end
local position, size = ViewportFrame.AbsolutePosition, ViewportFrame.AbsoluteSize
if size.X <= 1 or size.Y <= 1 then
return false
end
if ScrollAncestor then
local sp, ss = ScrollAncestor.AbsolutePosition, ScrollAncestor.AbsoluteSize
if position.X + size.X < sp.X or position.X > sp.X + ss.X
or position.Y + size.Y < sp.Y or position.Y > sp.Y + ss.Y then
return false
end
end
return true
end
local OnScreen = true
local Accumulator = 0
Connections.Render = RunService.Heartbeat:Connect(function(dt)
if WaveLibrary.Unloaded then
ViewportFunctions:Destroy()
return
end
Accumulator = Accumulator + dt
if Accumulator >= 0.15 then
Accumulator = 0
local onScreen = IsOnScreen()
if OnScreen ~= onScreen then
OnScreen = onScreen
-- Optimisation: keep the frame itself visible and just drop
-- the camera so the 3D scene stops rendering off-screen,
-- instead of hiding the whole viewport (which made it pop).
ViewportFrame.CurrentCamera = onScreen and Camera or nil
if not onScreen then
WaveLibrary.ViewportHovering = false -- can't be hovering it off-screen
if ScrollAncestor then ScrollAncestor.ScrollingEnabled = true end
end
end
end
-- only spend per-frame time when actually drawn
if OnScreen and Settings.AutoRotate and not Dragging then
Azimuth = Azimuth + dt * (Settings.RotateSpeed or 0.5)
UpdateCamera()
end
end)
Connections.Ancestry = Holder.AncestryChanged:Connect(function()
if Holder.Parent == nil then
ViewportFunctions:Destroy()
end
end)
-- ---- public API ----------------------------------------------------
function ViewportFunctions:SetModel(Model)
SetModel(Model)
return self
end
function ViewportFunctions:Clear()
SetModel(nil)
return self
end
function ViewportFunctions:GetModel()
return CurrentModel
end
function ViewportFunctions:GetCamera()
return Camera
end
function ViewportFunctions:SetCamera(NewCamera)
if typeof(NewCamera) == "Instance" and NewCamera:IsA("Camera") then
NewCamera.Parent = ViewportFrame
ViewportFrame.CurrentCamera = NewCamera
Camera = NewCamera
elseif typeof(NewCamera) == "CFrame" then
Camera.CFrame = NewCamera
end
return self
end
function ViewportFunctions:SetAutoRotate(State)
Settings.AutoRotate = State and true or false
return self
end
function ViewportFunctions:ResetView()
Azimuth, Elevation, Distance = math.rad(35), math.rad(12), BaseDistance
UpdateCamera()
return self
end
function ViewportFunctions:SetVisibility(State)
Holder.Visible = State
return self
end
function ViewportFunctions:ReturnClass()
return "Viewport"
end
function ViewportFunctions:ReturnTab()
return Requirements.TabName
end
function ViewportFunctions:Destroy()
WaveLibrary.ViewportHovering = false
WaveLibrary.ViewportCapturingDrag = false
if ScrollAncestor then ScrollAncestor.ScrollingEnabled = true end
for _, connection in pairs(Connections) do
if typeof(connection) == "RBXScriptConnection" then
connection:Disconnect()
end
end
table.clear(Connections)
if CurrentModel then
CurrentModel:Destroy()
CurrentModel = nil
end
if Holder then
Holder:Destroy()
end
end
UpdateCamera()
if Settings.Model or Settings.Object then
SetModel(Settings.Model or Settings.Object)
end
if Flag then
WaveLibrary.Options[Flag] = ViewportFunctions
end
return ViewportFunctions
end
end
end
R["Wave/UserInterface/Imports/AssetCloak.lua"] = function(...)
-- AssetCloak: hide our UI's asset ids from ContentProvider-based detection.
--
-- What it intercepts (only for ids in the cloaked set):
-- ContentProvider:GetAssetFetchStatus(id) -> Enum.AssetFetchStatus.None
-- ContentProvider:GetAssetFetchStatusChangedSignal(id) -> dead signal (never fires)
-- Everything else passes through untouched. Foreign asset ids stay real.
--
-- Install strategy LADDER (each step is best-effort; we install as many as we can):
-- 1. hookmetamethod(game, "__namecall", ...) -- modern (Synapse, Wave, Xeno, Solara)
-- 2. raw __namecall swap via getrawmetatable -- legacy executors
-- 3. hookfunction on the resolved method closures
-- -- catches the dot-syntax bypass: cp.GetAssetFetchStatus(cp, id) doesn't
-- go through __namecall, so a pure namecall hook misses it.
--
-- Replacements are wrapped in newcclosure when available so debug.info("s")
-- and iscclosure() see "[C]" the same way the original does. cloneref'd
-- ContentProvider refs are matched by rawequal-then-ClassName, so the hook
-- still fires when self is a different ref than the one we captured.
local AssetCloak = {}
-- ---- env probes (each executor exposes a different subset) -----------------
local function safe(fn) return type(fn) == "function" and fn or nil end
local hookmetamethod_fn = safe(hookmetamethod)
local getnamecallmethod_fn = safe(getnamecallmethod)
local getrawmetatable_fn = safe(getrawmetatable) or safe(debug and debug.getmetatable)
local setreadonly_fn = safe(setreadonly) or safe(make_writeable) or safe(makewriteable)
local hookfunction_fn = safe(hookfunction) or safe(replaceclosure) or safe(detour_function)
local newcclosure_fn = safe(newcclosure) or function(f) return f end
-- ---- state -----------------------------------------------------------------
local Cloaked = {}
local Installed = false
local InstallMethods = {} -- list of strategies that actually patched
local Enabled = true
local cp
local NoneStatus
local DeadSignal
local DeadBindable -- kept rooted so the Event isn't GC'd
local OriginalNamecall -- set by strategy 1 or 2
local OriginalStatus -- set by strategy 3
local OriginalSignal -- set by strategy 3
-- ---- id helpers ------------------------------------------------------------
local function ExtractId(value)
local t = type(value)
if t == "string" then
return value:match("rbxassetid://(%d+)")
or value:match("rbxasset://(%d+)")
or value:match("^(%d+)$")
elseif t == "number" and value > 0 then
return tostring(math.floor(value))
end
return nil
end
function AssetCloak.Cloak(value)
local id = ExtractId(value)
if id then Cloaked[id] = true end
end
function AssetCloak.Uncloak(value)
local id = ExtractId(value)
if id then Cloaked[id] = nil end
end
function AssetCloak.IsCloaked(value)
local id = ExtractId(value)
return id ~= nil and Cloaked[id] == true
end
-- Recursively scan a table for asset ids in any form and cloak them.
-- Bare-digit values shorter than 6 characters are ignored so we don't
-- accidentally cloak things like font weights or short numeric flags.
function AssetCloak.Harvest(t)
local seen = {}
local function walk(v)
if type(v) == "table" then
if seen[v] then return end
seen[v] = true
for _, child in pairs(v) do walk(child) end
else
local id = ExtractId(v)
if id and #id >= 6 then Cloaked[id] = true end
end
end
walk(t)
end
function AssetCloak.SetEnabled(b) Enabled = b and true or false end
function AssetCloak.IsInstalled() return Installed end
function AssetCloak.GetInstallMethods() return table.concat(InstallMethods, "+") end
function AssetCloak.Count()
local n = 0
for _ in pairs(Cloaked) do n = n + 1 end
return n
end
-- ---- self matching (used only by the dot-syntax fallback) ------------------
-- The two namecall strategies do their own inline rawequal check on the hot
-- path. Strategy 3 (hookfunction) can fire with any self the caller passes,
-- so it uses this slightly more forgiving check.
local function IsContentProvider(self)
if rawequal(self, cp) then return true end
local ok, cls = pcall(function() return self.ClassName end)
return ok and cls == "ContentProvider"
end
-- ---- strategy 1: hookmetamethod (preferred) --------------------------------
-- HOT-PATH NOTE: __namecall fires on EVERY method call on EVERY instance in
-- the game (Connect, FindFirstChild, GetDescendants, every property read via
-- namecall, every tween signal). Anything we do here costs cumulatively across
-- the whole UI. The body MUST early-out when self isn't the ContentProvider.
local function tryHookmetamethod()
if not (hookmetamethod_fn and getnamecallmethod_fn) then return false end
local body = function(self, ...)
-- Fast path: 99.999% of namecalls go here. Single rawequal + return.
if not rawequal(self, cp) then
return OriginalNamecall(self, ...)
end
-- Slow path: only ContentProvider calls land below.
local m = getnamecallmethod_fn()
if m == "GetAssetFetchStatus" then
if Enabled then
local id = ExtractId((...))
if id and Cloaked[id] then return NoneStatus end
end
elseif m == "GetAssetFetchStatusChangedSignal" then
if Enabled then
local id = ExtractId((...))
if id and Cloaked[id] then return DeadSignal end
end
end
return OriginalNamecall(self, ...)
end
local ok, old = pcall(hookmetamethod_fn, game, "__namecall", newcclosure_fn(body))
if ok and type(old) == "function" then
OriginalNamecall = old
InstallMethods[#InstallMethods + 1] = "hookmetamethod"
return true
end
return false
end
-- ---- strategy 2: raw metatable swap (legacy fallback) ----------------------
local function tryRawMetatable()
if OriginalNamecall then return false end -- strategy 1 already won
if not getrawmetatable_fn then return false end
local ok, mt = pcall(getrawmetatable_fn, game)
if not ok or type(mt) ~= "table" then return false end
if setreadonly_fn then pcall(setreadonly_fn, mt, false) end
local old = rawget(mt, "__namecall")
if type(old) ~= "function" then
if setreadonly_fn then pcall(setreadonly_fn, mt, true) end
return false
end
OriginalNamecall = old
local getmethod = getnamecallmethod_fn or function() return "" end
-- Same hot-path discipline as strategy 1: short-circuit on non-CP self.
local body = function(self, ...)
if not rawequal(self, cp) then
return OriginalNamecall(self, ...)
end
local m = getmethod()
if m == "GetAssetFetchStatus" then
if Enabled then
local id = ExtractId((...))
if id and Cloaked[id] then return NoneStatus end
end
elseif m == "GetAssetFetchStatusChangedSignal" then
if Enabled then
local id = ExtractId((...))
if id and Cloaked[id] then return DeadSignal end
end
end
return OriginalNamecall(self, ...)
end
local okPatch = pcall(function() mt.__namecall = newcclosure_fn(body) end)
if setreadonly_fn then pcall(setreadonly_fn, mt, true) end
if okPatch then
InstallMethods[#InstallMethods + 1] = "rawmetatable"
return true
end
OriginalNamecall = nil
return false
end
-- ---- strategy 3: hookfunction the resolved methods -------------------------
-- Closes the dot-syntax hole: `cp.GetAssetFetchStatus(cp, id)` does NOT go
-- through __namecall, so a namecall hook alone won't catch it. Patching the
-- method closure directly covers both call shapes.
local function tryHookFunction()
if not hookfunction_fn then return false end
local origS, origG = cp.GetAssetFetchStatus, cp.GetAssetFetchStatusChangedSignal
if type(origS) ~= "function" or type(origG) ~= "function" then return false end
local replS = newcclosure_fn(function(self, asset, ...)
if Enabled and IsContentProvider(self) then
local id = ExtractId(asset)
if id and Cloaked[id] then return NoneStatus end
end
return OriginalStatus(self, asset, ...)
end)
local replG = newcclosure_fn(function(self, asset, ...)
if Enabled and IsContentProvider(self) then
local id = ExtractId(asset)
if id and Cloaked[id] then return DeadSignal end
end
return OriginalSignal(self, asset, ...)
end)
local okS, oldS = pcall(hookfunction_fn, origS, replS)
local okG, oldG = pcall(hookfunction_fn, origG, replG)
if okS and type(oldS) == "function" then OriginalStatus = oldS end
if okG and type(oldG) == "function" then OriginalSignal = oldG end
if OriginalStatus or OriginalSignal then
InstallMethods[#InstallMethods + 1] = "hookfunction"
return true
end
return false
end
-- ---- install ---------------------------------------------------------------
function AssetCloak.Install()
if Installed then return true end
local ok, contentProvider = pcall(game.GetService, game, "ContentProvider")
if not ok or not contentProvider then return false end
cp = contentProvider
DeadBindable = Instance.new("BindableEvent")
DeadSignal = DeadBindable.Event
local okE, none = pcall(function() return Enum.AssetFetchStatus.None end)
NoneStatus = (okE and none) or 0 -- the integer 0 also reads as "None" on older builds
pcall(tryHookmetamethod)
pcall(tryRawMetatable)
pcall(tryHookFunction)
Installed = #InstallMethods > 0
return Installed
end
return AssetCloak
end
R["Wave/UserInterface/Imports/Icons.lua"] = function(...)
local icons_1 = 'rbxassetid://124334518624683'
local icons_2 = 'rbxassetid://113826256227095'
local icons_3 = 'rbxassetid://129900432084566'
local icons_4 = 'rbxassetid://118976126805967'
local icons_5 = 'rbxassetid://125298981894618'
local icons_6 = 'rbxassetid://131738208650267'
local icons_7 = 'rbxassetid://110728422432625'
local icons_8 = 'rbxassetid://135200213477510'
local icons_9 = 'rbxassetid://134392099945785'
local icons_10 = 'rbxassetid://79415505456349'
local icons_11 = 'rbxassetid://94499019266816'
local icons_12 = 'rbxassetid://72284904787415'
local icons_13 = 'rbxassetid://72284904787415'
local icons_14 = 'rbxassetid://102465529977025'
local icons_15 = 'rbxassetid://108796161822566'
local icons_16 = 'rbxassetid://104034552823126'
local icons_17 = 'rbxassetid://115396960406352'
local icons_18 = 'rbxassetid://88000092080903'
local icons_19 = 'rbxassetid://74902412828188'
local icons_20 = 'rbxassetid://95092644481468'
local icons_21 = 'rbxassetid://116618277156257'
local icons_22 = 'rbxassetid://101225869294852'
local icons_23 = 'rbxassetid://130974669650190'
local icons_24 = 'rbxassetid://122510634246659'
local icons_25 = 'rbxassetid://130565723724393'
local icons_26 = 'rbxassetid://130172565496219'
local icons_27 = 'rbxassetid://100537559853437'
local icons_28 = 'rbxassetid://77444842975129'
local icons_29 = 'rbxassetid://133795234078681'
local icons_30 = 'rbxassetid://88182585007332'
local icons_31 = 'rbxassetid://123183581552431'
local icons_32 = 'rbxassetid://108153633480449'
local icons_33 = 'rbxassetid://116280890977475'
local icons_34 = 'rbxassetid://97148406853110'
local icons_35 = 'rbxassetid://138968597001035'
local icons_36 = 'rbxassetid://129030569615452'
local icons_37 = 'rbxassetid://97278475063854'
local icons_38 = 'rbxassetid://138343757151795'
local icons_39 = 'rbxassetid://131684019420923'
local icons_40 = 'rbxassetid://139123669104105'
local icons_41 = 'rbxassetid://83798598825627'
local icons_42 = 'rbxassetid://93555120675964'
local VEC2 = {['0_0'] = Vector2.new(0, 0), ['64_0'] = Vector2.new(64, 0), ['128_0'] = Vector2.new(128, 0), ['192_0'] = Vector2.new(192, 0), ['256_0'] = Vector2.new(256, 0), ['320_0'] = Vector2.new(320, 0), ['384_0'] = Vector2.new(384, 0), ['448_0'] = Vector2.new(448, 0), ['512_0'] = Vector2.new(512, 0), ['576_0'] = Vector2.new(576, 0), ['640_0'] = Vector2.new(640, 0), ['704_0'] = Vector2.new(704, 0), ['768_0'] = Vector2.new(768, 0), ['832_0'] = Vector2.new(832, 0), ['896_0'] = Vector2.new(896, 0), ['960_0'] = Vector2.new(960, 0), ['0_64'] = Vector2.new(0, 64), ['64_64'] = Vector2.new(64, 64), ['128_64'] = Vector2.new(128, 64), ['192_64'] = Vector2.new(192, 64), ['256_64'] = Vector2.new(256, 64), ['320_64'] = Vector2.new(320, 64), ['384_64'] = Vector2.new(384, 64), ['448_64'] = Vector2.new(448, 64), ['512_64'] = Vector2.new(512, 64), ['576_64'] = Vector2.new(576, 64), ['640_64'] = Vector2.new(640, 64), ['704_64'] = Vector2.new(704, 64), ['768_64'] = Vector2.new(768, 64), ['832_64'] = Vector2.new(832, 64), ['896_64'] = Vector2.new(896, 64), ['960_64'] = Vector2.new(960, 64), ['0_128'] = Vector2.new(0, 128), ['64_128'] = Vector2.new(64, 128), ['128_128'] = Vector2.new(128, 128), ['192_128'] = Vector2.new(192, 128), ['256_128'] = Vector2.new(256, 128), ['320_128'] = Vector2.new(320, 128), ['384_128'] = Vector2.new(384, 128), ['448_128'] = Vector2.new(448, 128), ['512_128'] = Vector2.new(512, 128), ['576_128'] = Vector2.new(576, 128), ['640_128'] = Vector2.new(640, 128), ['704_128'] = Vector2.new(704, 128), ['768_128'] = Vector2.new(768, 128), ['832_128'] = Vector2.new(832, 128), ['896_128'] = Vector2.new(896, 128), ['960_128'] = Vector2.new(960, 128), ['0_192'] = Vector2.new(0, 192), ['64_192'] = Vector2.new(64, 192), ['128_192'] = Vector2.new(128, 192), ['192_192'] = Vector2.new(192, 192), ['256_192'] = Vector2.new(256, 192), ['320_192'] = Vector2.new(320, 192), ['384_192'] = Vector2.new(384, 192), ['448_192'] = Vector2.new(448, 192), ['512_192'] = Vector2.new(512, 192), ['576_192'] = Vector2.new(576, 192), ['640_192'] = Vector2.new(640, 192), ['704_192'] = Vector2.new(704, 192), ['768_192'] = Vector2.new(768, 192), ['832_192'] = Vector2.new(832, 192), ['896_192'] = Vector2.new(896, 192), ['960_192'] = Vector2.new(960, 192), ['0_256'] = Vector2.new(0, 256), ['64_256'] = Vector2.new(64, 256), ['128_256'] = Vector2.new(128, 256), ['192_256'] = Vector2.new(192, 256), ['256_256'] = Vector2.new(256, 256), ['320_256'] = Vector2.new(320, 256), ['384_256'] = Vector2.new(384, 256), ['448_256'] = Vector2.new(448, 256), ['512_256'] = Vector2.new(512, 256), ['576_256'] = Vector2.new(576, 256), ['640_256'] = Vector2.new(640, 256), ['704_256'] = Vector2.new(704, 256), ['768_256'] = Vector2.new(768, 256), ['832_256'] = Vector2.new(832, 256), ['896_256'] = Vector2.new(896, 256), ['960_256'] = Vector2.new(960, 256), ['0_320'] = Vector2.new(0, 320), ['64_320'] = Vector2.new(64, 320), ['128_320'] = Vector2.new(128, 320), ['192_320'] = Vector2.new(192, 320), ['256_320'] = Vector2.new(256, 320), ['320_320'] = Vector2.new(320, 320), ['384_320'] = Vector2.new(384, 320), ['448_320'] = Vector2.new(448, 320), ['512_320'] = Vector2.new(512, 320), ['576_320'] = Vector2.new(576, 320), ['640_320'] = Vector2.new(640, 320), ['704_320'] = Vector2.new(704, 320), ['768_320'] = Vector2.new(768, 320), ['832_320'] = Vector2.new(832, 320), ['896_320'] = Vector2.new(896, 320), ['960_320'] = Vector2.new(960, 320), ['0_384'] = Vector2.new(0, 384), ['64_384'] = Vector2.new(64, 384), ['128_384'] = Vector2.new(128, 384), ['192_384'] = Vector2.new(192, 384), ['256_384'] = Vector2.new(256, 384), ['320_384'] = Vector2.new(320, 384), ['384_384'] = Vector2.new(384, 384), ['448_384'] = Vector2.new(448, 384), ['512_384'] = Vector2.new(512, 384), ['576_384'] = Vector2.new(576, 384), ['640_384'] = Vector2.new(640, 384), ['704_384'] = Vector2.new(704, 384), ['768_384'] = Vector2.new(768, 384), ['832_384'] = Vector2.new(832, 384), ['896_384'] = Vector2.new(896, 384), ['960_384'] = Vector2.new(960, 384), ['0_448'] = Vector2.new(0, 448), ['64_448'] = Vector2.new(64, 448), ['128_448'] = Vector2.new(128, 448), ['192_448'] = Vector2.new(192, 448), ['256_448'] = Vector2.new(256, 448), ['320_448'] = Vector2.new(320, 448), ['384_448'] = Vector2.new(384, 448), ['448_448'] = Vector2.new(448, 448), ['512_448'] = Vector2.new(512, 448), ['576_448'] = Vector2.new(576, 448), ['640_448'] = Vector2.new(640, 448), ['704_448'] = Vector2.new(704, 448), ['768_448'] = Vector2.new(768, 448), ['832_448'] = Vector2.new(832, 448), ['896_448'] = Vector2.new(896, 448), ['960_448'] = Vector2.new(960, 448), ['0_512'] = Vector2.new(0, 512), ['64_512'] = Vector2.new(64, 512), ['128_512'] = Vector2.new(128, 512), ['192_512'] = Vector2.new(192, 512), ['256_512'] = Vector2.new(256, 512), ['320_512'] = Vector2.new(320, 512), ['384_512'] = Vector2.new(384, 512), ['448_512'] = Vector2.new(448, 512), ['512_512'] = Vector2.new(512, 512), ['576_512'] = Vector2.new(576, 512), ['640_512'] = Vector2.new(640, 512), ['704_512'] = Vector2.new(704, 512), ['768_512'] = Vector2.new(768, 512), ['832_512'] = Vector2.new(832, 512), ['896_512'] = Vector2.new(896, 512), ['960_512'] = Vector2.new(960, 512), ['0_576'] = Vector2.new(0, 576), ['64_576'] = Vector2.new(64, 576), ['128_576'] = Vector2.new(128, 576), ['192_576'] = Vector2.new(192, 576), ['256_576'] = Vector2.new(256, 576), ['320_576'] = Vector2.new(320, 576), ['384_576'] = Vector2.new(384, 576), ['448_576'] = Vector2.new(448, 576), ['512_576'] = Vector2.new(512, 576), ['576_576'] = Vector2.new(576, 576), ['640_576'] = Vector2.new(640, 576), ['704_576'] = Vector2.new(704, 576), ['768_576'] = Vector2.new(768, 576), ['832_576'] = Vector2.new(832, 576), ['896_576'] = Vector2.new(896, 576), ['960_576'] = Vector2.new(960, 576), ['0_640'] = Vector2.new(0, 640), ['64_640'] = Vector2.new(64, 640), ['128_640'] = Vector2.new(128, 640), ['192_640'] = Vector2.new(192, 640), ['256_640'] = Vector2.new(256, 640), ['320_640'] = Vector2.new(320, 640), ['384_640'] = Vector2.new(384, 640), ['448_640'] = Vector2.new(448, 640), ['512_640'] = Vector2.new(512, 640), ['576_640'] = Vector2.new(576, 640), ['640_640'] = Vector2.new(640, 640), ['704_640'] = Vector2.new(704, 640), ['768_640'] = Vector2.new(768, 640), ['832_640'] = Vector2.new(832, 640), ['896_640'] = Vector2.new(896, 640), ['960_640'] = Vector2.new(960, 640), ['0_704'] = Vector2.new(0, 704), ['64_704'] = Vector2.new(64, 704), ['128_704'] = Vector2.new(128, 704), ['192_704'] = Vector2.new(192, 704), ['256_704'] = Vector2.new(256, 704), ['320_704'] = Vector2.new(320, 704), ['384_704'] = Vector2.new(384, 704), ['448_704'] = Vector2.new(448, 704), ['512_704'] = Vector2.new(512, 704), ['576_704'] = Vector2.new(576, 704), ['640_704'] = Vector2.new(640, 704), ['704_704'] = Vector2.new(704, 704), ['768_704'] = Vector2.new(768, 704), ['832_704'] = Vector2.new(832, 704), ['896_704'] = Vector2.new(896, 704), ['960_704'] = Vector2.new(960, 704), ['0_768'] = Vector2.new(0, 768), ['64_768'] = Vector2.new(64, 768), ['128_768'] = Vector2.new(128, 768), ['192_768'] = Vector2.new(192, 768), ['256_768'] = Vector2.new(256, 768), ['320_768'] = Vector2.new(320, 768), ['384_768'] = Vector2.new(384, 768), ['448_768'] = Vector2.new(448, 768), ['512_768'] = Vector2.new(512, 768), ['576_768'] = Vector2.new(576, 768), ['640_768'] = Vector2.new(640, 768), ['704_768'] = Vector2.new(704, 768), ['768_768'] = Vector2.new(768, 768), ['832_768'] = Vector2.new(832, 768), ['896_768'] = Vector2.new(896, 768), ['960_768'] = Vector2.new(960, 768), ['0_832'] = Vector2.new(0, 832), ['64_832'] = Vector2.new(64, 832), ['128_832'] = Vector2.new(128, 832), ['192_832'] = Vector2.new(192, 832), ['256_832'] = Vector2.new(256, 832), ['320_832'] = Vector2.new(320, 832), ['384_832'] = Vector2.new(384, 832), ['448_832'] = Vector2.new(448, 832), ['512_832'] = Vector2.new(512, 832), ['576_832'] = Vector2.new(576, 832), ['640_832'] = Vector2.new(640, 832), ['704_832'] = Vector2.new(704, 832), ['768_832'] = Vector2.new(768, 832), ['832_832'] = Vector2.new(832, 832), ['896_832'] = Vector2.new(896, 832), ['960_832'] = Vector2.new(960, 832), ['0_896'] = Vector2.new(0, 896), ['64_896'] = Vector2.new(64, 896), ['128_896'] = Vector2.new(128, 896), ['192_896'] = Vector2.new(192, 896), ['256_896'] = Vector2.new(256, 896), ['320_896'] = Vector2.new(320, 896), ['384_896'] = Vector2.new(384, 896), ['448_896'] = Vector2.new(448, 896), ['512_896'] = Vector2.new(512, 896), ['576_896'] = Vector2.new(576, 896), ['640_896'] = Vector2.new(640, 896), ['704_896'] = Vector2.new(704, 896), ['768_896'] = Vector2.new(768, 896), ['832_896'] = Vector2.new(832, 896), ['896_896'] = Vector2.new(896, 896), ['960_896'] = Vector2.new(960, 896), ['0_960'] = Vector2.new(0, 960), ['64_960'] = Vector2.new(64, 960), ['128_960'] = Vector2.new(128, 960), ['192_960'] = Vector2.new(192, 960), ['256_960'] = Vector2.new(256, 960), ['320_960'] = Vector2.new(320, 960), ['384_960'] = Vector2.new(384, 960), ['448_960'] = Vector2.new(448, 960), ['512_960'] = Vector2.new(512, 960), ['576_960'] = Vector2.new(576, 960), ['640_960'] = Vector2.new(640, 960), ['704_960'] = Vector2.new(704, 960), ['768_960'] = Vector2.new(768, 960), ['832_960'] = Vector2.new(832, 960), ['896_960'] = Vector2.new(896, 960), ['960_960'] = Vector2.new(960, 960)}
local M = {
SetIcon = function(self, Image, IconName)
local IconData = self[IconName]
if typeof(IconData) ~= 'table' then
local nearestName = nil
local nearestDistance = math.huge
for name, value in next, self do
if typeof(value) ~= "table" or math.abs(#name - #IconName) > 2 then continue end
local s, t = name, IconName
local m, n = #s, #t
local d = {}
for i = 0, m do
d[i] = {}
d[i][0] = i
end
for j = 0, n do
d[0][j] = j
end
for i = 1, m do
for j = 1, n do
local cost = (s:sub(i, i) == t:sub(j, j)) and 0 or 1
d[i][j] = math.min(d[i-1][j] + 1, d[i][j-1] + 1, d[i-1][j-1] + cost)
end
end
local distance = d[m][n]
if distance < nearestDistance then
nearestDistance = distance
nearestName = name
end
end
if nearestName then
IconData = self[nearestName]
if typeof(IconData) ~= 'table' then
return error(debug.traceback(`Argument #2 '{IconName}' is not a valid Icon. Did you mean '{nearestName}'?`))
end
else
return error(debug.traceback(`Argument #2 '{IconName}' is not a valid Icon. No similar names found.`))
end
end
-- Icon sprite atlases load from their ORIGINAL rbxassetid (crisp). They are NOT in
-- BAC's flagged list (window buttons/acrylic/scrollbar/colorpicker localise separately
-- via Creator.SafeImage); the thumbnail API caps at 700px so it cannot reproduce a
-- 1024px atlas without blurring every 64px icon to mush (the removed localiseSheet path).
Image.ImageRectSize = IconData.ImageRectSize
Image.ImageRectOffset = IconData.ImageRectOffset
Image.Image = IconData.Image
return nil
end,
['Close'] = "rbxassetid://9886659671",
['Min'] = "rbxassetid://9886659276",
['Max'] = "rbxassetid://9886659406",
['Restore'] = "rbxassetid://9886659001",
}
local _ICONDATA = "a-arrow-down,0_0,1;a-arrow-up,64_0,1;a-large-small,128_0,1;accessibility,192_0,1;activity,256_0,1;air-vent,320_0,1;airplay,384_0,1;alarm-clock-check,448_0,1;alarm-clock-minus,512_0,1;alarm-clock-off,576_0,1;alarm-clock-plus,640_0,1;alarm-clock,704_0,1;alarm-smoke,768_0,1;album,832_0,1;align-center-horizontal,896_0,1;align-center-vertical,960_0,1;align-center,0_64,1;align-end-horizontal,64_64,1;align-end-vertical,128_64,1;align-horizontal-distribute-center,192_64,1;align-horizontal-distribute-end,256_64,1;align-horizontal-distribute-start,320_64,1;align-horizontal-justify-center,384_64,1;align-horizontal-justify-end,448_64,1;align-horizontal-justify-start,512_64,1;align-horizontal-space-around,576_64,1;align-horizontal-space-between,640_64,1;align-justify,704_64,1;align-left,768_64,1;align-right,832_64,1;align-start-horizontal,896_64,1;align-start-vertical,960_64,1;align-vertical-distribute-center,0_128,1;align-vertical-distribute-end,64_128,1;align-vertical-distribute-start,128_128,1;align-vertical-justify-center,192_128,1;align-vertical-justify-end,256_128,1;align-vertical-justify-start,320_128,1;align-vertical-space-around,384_128,1;align-vertical-space-between,448_128,1;ambulance,512_128,1;ampersand,576_128,1;ampersands,640_128,1;amphora,704_128,1;anchor,768_128,1;angry,832_128,1;annoyed,896_128,1;antenna,960_128,1;anvil,0_192,1;aperture,64_192,1;app-window-mac,128_192,1;app-window,192_192,1;apple,256_192,1;archive-restore,320_192,1;archive-x,384_192,1;archive,448_192,1;armchair,512_192,1;arrow-big-down-dash,576_192,1;arrow-big-down,640_192,1;arrow-big-left-dash,704_192,1;arrow-big-left,768_192,1;arrow-big-right-dash,832_192,1;arrow-big-right,896_192,1;arrow-big-up-dash,960_192,1;arrow-big-up,0_256,1;arrow-down-0-1,64_256,1;arrow-down-1-0,128_256,1;arrow-down-a-z,192_256,1;arrow-down-from-line,256_256,1;arrow-down-left,320_256,1;arrow-down-narrow-wide,384_256,1;arrow-down-right,448_256,1;arrow-down-to-dot,512_256,1;arrow-down-to-line,576_256,1;arrow-down-up,640_256,1;arrow-down-wide-narrow,704_256,1;arrow-down-z-a,768_256,1;arrow-down,832_256,1;arrow-left-from-line,896_256,1;arrow-left-right,960_256,1;arrow-left-to-line,0_320,1;arrow-left,64_320,1;arrow-right-from-line,128_320,1;arrow-right-left,192_320,1;arrow-right-to-line,256_320,1;arrow-right,320_320,1;arrow-up-0-1,384_320,1;arrow-up-1-0,448_320,1;arrow-up-a-z,512_320,1;arrow-up-down,576_320,1;arrow-up-from-dot,640_320,1;arrow-up-from-line,704_320,1;arrow-up-left,768_320,1;arrow-up-narrow-wide,832_320,1;arrow-up-right,896_320,1;arrow-up-to-line,960_320,1;arrow-up-wide-narrow,0_384,1;arrow-up-z-a,64_384,1;arrow-up,128_384,1;arrows-up-from-line,192_384,1;asterisk,256_384,1;at-sign,320_384,1;atom,384_384,1;audio-lines,448_384,1;audio-waveform,512_384,1;award,576_384,1;axe,640_384,1;axis-3d,704_384,1;baby,768_384,1;backpack,832_384,1;badge-alert,896_384,1;badge-cent,960_384,1;badge-check,0_448,1;badge-dollar-sign,64_448,1;badge-euro,128_448,1;badge-help,192_448,1;badge-indian-rupee,256_448,1;badge-info,320_448,1;badge-japanese-yen,384_448,1;badge-minus,448_448,1;badge-percent,512_448,1;badge-plus,576_448,1;badge-pound-sterling,640_448,1;badge-russian-ruble,704_448,1;badge-swiss-franc,768_448,1;badge-x,832_448,1;badge,896_448,1;baggage-claim,960_448,1;ban,0_512,1;banana,64_512,1;bandage,128_512,1;banknote,192_512,1;barcode,256_512,1;baseline,320_512,1;bath,384_512,1;battery-charging,448_512,1;battery-full,512_512,1;battery-low,576_512,1;battery-medium,640_512,1;battery-warning,704_512,1;battery,768_512,1;beaker,832_512,1;bean-off,896_512,1;bean,960_512,1;bed-double,0_576,1;bed-single,64_576,1;bed,128_576,1;beef,192_576,1;beer-off,256_576,1;beer,320_576,1;bell-dot,384_576,1;bell-electric,448_576,1;bell-minus,512_576,1;bell-off,576_576,1;bell-plus,640_576,1;bell-ring,704_576,1;bell,768_576,1;between-horizontal-end,832_576,1;between-horizontal-start,896_576,1;between-vertical-end,960_576,1;between-vertical-start,0_640,1;biceps-flexed,64_640,1;bike,128_640,1;binary,192_640,1;binoculars,256_640,1;biohazard,320_640,1;bird,384_640,1;bitcoin,448_640,1;blend,512_640,1;blinds,576_640,1;blocks,640_640,1;bluetooth-connected,704_640,1;bluetooth-off,768_640,1;bluetooth-searching,832_640,1;bluetooth,896_640,1;bold,960_640,1;bolt,0_704,1;bomb,64_704,1;bone,128_704,1;book-a,192_704,1;book-audio,256_704,1;book-check,320_704,1;book-copy,384_704,1;book-dashed,448_704,1;book-down,512_704,1;book-headphones,576_704,1;book-heart,640_704,1;book-image,704_704,1;book-key,768_704,1;book-lock,832_704,1;book-marked,896_704,1;book-minus,960_704,1;book-open-check,0_768,1;book-open-text,64_768,1;book-open,128_768,1;book-plus,192_768,1;book-text,256_768,1;book-type,320_768,1;book-up-2,384_768,1;book-up,448_768,1;book-user,512_768,1;book-x,576_768,1;book,640_768,1;bookmark-check,704_768,1;bookmark-minus,768_768,1;bookmark-plus,832_768,1;bookmark-x,896_768,1;bookmark,960_768,1;boom-box,0_832,1;bot-message-square,64_832,1;bot-off,128_832,1;bot,192_832,1;box,256_832,1;boxes,320_832,1;braces,384_832,1;brackets,448_832,1;brain-circuit,512_832,1;brain-cog,576_832,1;brain,640_832,1;brick-wall,704_832,1;briefcase-business,768_832,1;briefcase-conveyor-belt,832_832,1;briefcase-medical,896_832,1;briefcase,960_832,1;bring-to-front,0_896,1;brush,64_896,1;bug-off,128_896,1;bug-play,192_896,1;bug,256_896,1;building-2,320_896,1;building,384_896,1;bus-front,448_896,1;bus,512_896,1;cable-car,576_896,1;cable,640_896,1;cake-slice,704_896,1;cake,768_896,1;calculator,832_896,1;calendar-1,896_896,1;calendar-arrow-down,960_896,1;calendar-arrow-up,0_960,1;calendar-check-2,64_960,1;calendar-check,128_960,1;calendar-clock,192_960,1;calendar-cog,256_960,1;calendar-days,320_960,1;calendar-fold,384_960,1;calendar-heart,448_960,1;calendar-minus-2,512_960,1;calendar-minus,576_960,1;calendar-off,640_960,1;calendar-plus-2,704_960,1;calendar-plus,768_960,1;calendar-range,832_960,1;calendar-search,896_960,1;calendar-sync,960_960,1;calendar-x-2,0_0,2;calendar-x,64_0,2;calendar,128_0,2;camera-off,192_0,2;camera,256_0,2;candy-cane,320_0,2;candy-off,384_0,2;candy,448_0,2;cannabis,512_0,2;captions-off,576_0,2;captions,640_0,2;car-front,704_0,2;car-taxi-front,768_0,2;car,832_0,2;caravan,896_0,2;carrot,960_0,2;case-lower,0_64,2;case-sensitive,64_64,2;case-upper,128_64,2;cassette-tape,192_64,2;cast,256_64,2;castle,320_64,2;cat,384_64,2;cctv,448_64,2;chart-area,512_64,2;chart-bar-big,576_64,2;chart-bar-decreasing,640_64,2;chart-bar-increasing,704_64,2;chart-bar-stacked,768_64,2;chart-bar,832_64,2;chart-candlestick,896_64,2;chart-column-big,960_64,2;chart-column-decreasing,0_128,2;chart-column-increasing,64_128,2;chart-column-stacked,128_128,2;chart-column,192_128,2;chart-gantt,256_128,2;chart-line,320_128,2;chart-network,384_128,2;chart-no-axes-column-decreasing,448_128,2;chart-no-axes-column-increasing,512_128,2;chart-no-axes-column,576_128,2;chart-no-axes-combined,640_128,2;chart-no-axes-gantt,704_128,2;chart-pie,768_128,2;chart-scatter,832_128,2;chart-spline,896_128,2;check-check,960_128,2;check,0_192,2;chef-hat,64_192,2;cherry,128_192,2;chevron-down,192_192,2;chevron-first,256_192,2;chevron-last,320_192,2;chevron-left,384_192,2;chevron-right,448_192,2;chevron-up,512_192,2;chevrons-down-up,576_192,2;chevrons-down,640_192,2;chevrons-left-right-ellipsis,704_192,2;chevrons-left-right,768_192,2;chevrons-left,832_192,2;chevrons-right-left,896_192,2;chevrons-right,960_192,2;chevrons-up-down,0_256,2;chevrons-up,64_256,2;chrome,128_256,2;church,192_256,2;cigarette-off,256_256,2;cigarette,320_256,2;circle-alert,384_256,2;circle-arrow-down,448_256,2;circle-arrow-left,512_256,2;circle-arrow-out-down-left,576_256,2;circle-arrow-out-down-right,640_256,2;circle-arrow-out-up-left,704_256,2;circle-arrow-out-up-right,768_256,2;circle-arrow-right,832_256,2;circle-arrow-up,896_256,2;circle-check-big,960_256,2;circle-check,0_320,2;circle-chevron-down,64_320,2;circle-chevron-left,128_320,2;circle-chevron-right,192_320,2;circle-chevron-up,256_320,2;circle-dashed,320_320,2;circle-divide,384_320,2;circle-dollar-sign,448_320,2;circle-dot-dashed,512_320,2;circle-dot,576_320,2;circle-ellipsis,640_320,2;circle-equal,704_320,2;circle-fading-arrow-up,768_320,2;circle-fading-plus,832_320,2;circle-gauge,896_320,2;circle-help,960_320,2;circle-minus,0_384,2;circle-off,64_384,2;circle-parking-off,128_384,2;circle-parking,192_384,2;circle-pause,256_384,2;circle-percent,320_384,2;circle-play,384_384,2;circle-plus,448_384,2;circle-power,512_384,2;circle-slash-2,576_384,2;circle-slash,640_384,2;circle-stop,704_384,2;circle-user-round,768_384,2;circle-user,832_384,2;circle-x,896_384,2;circle,960_384,2;circuit-board,0_448,2;citrus,64_448,2;clapperboard,128_448,2;clipboard-check,192_448,2;clipboard-copy,256_448,2;clipboard-list,320_448,2;clipboard-minus,384_448,2;clipboard-paste,448_448,2;clipboard-pen-line,512_448,2;clipboard-pen,576_448,2;clipboard-plus,640_448,2;clipboard-type,704_448,2;clipboard-x,768_448,2;clipboard,832_448,2;clock-1,896_448,2;clock-10,960_448,2;clock-11,0_512,2;clock-12,64_512,2;clock-2,128_512,2;clock-3,192_512,2;clock-4,256_512,2;clock-5,320_512,2;clock-6,384_512,2;clock-7,448_512,2;clock-8,512_512,2;clock-9,576_512,2;clock-alert,640_512,2;clock-arrow-down,704_512,2;clock-arrow-up,768_512,2;clock,832_512,2;cloud-alert,896_512,2;cloud-cog,960_512,2;cloud-download,0_576,2;cloud-drizzle,64_576,2;cloud-fog,128_576,2;cloud-hail,192_576,2;cloud-lightning,256_576,2;cloud-moon-rain,320_576,2;cloud-moon,384_576,2;cloud-off,448_576,2;cloud-rain-wind,512_576,2;cloud-rain,576_576,2;cloud-snow,640_576,2;cloud-sun-rain,704_576,2;cloud-sun,768_576,2;cloud-upload,832_576,2;cloud,896_576,2;cloudy,960_576,2;clover,0_640,2;club,64_640,2;code-xml,128_640,2;code,192_640,2;codepen,256_640,2;codesandbox,320_640,2;coffee,384_640,2;cog,448_640,2;coins,512_640,2;columns-2,576_640,2;columns-3,640_640,2;columns-4,704_640,2;combine,768_640,2;command,832_640,2;compass,896_640,2;component,960_640,2;computer,0_704,2;concierge-bell,64_704,2;cone,128_704,2;construction,192_704,2;contact-round,256_704,2;contact,320_704,2;container,384_704,2;contrast,448_704,2;cookie,512_704,2;cooking-pot,576_704,2;copy-check,640_704,2;copy-minus,704_704,2;copy-plus,768_704,2;copy-slash,832_704,2;copy-x,896_704,2;copy,960_704,2;copyleft,0_768,2;copyright,64_768,2;corner-down-left,128_768,2;corner-down-right,192_768,2;corner-left-down,256_768,2;corner-left-up,320_768,2;corner-right-down,384_768,2;corner-right-up,448_768,2;corner-up-left,512_768,2;corner-up-right,576_768,2;cpu,640_768,2;creative-commons,704_768,2;credit-card,768_768,2;croissant,832_768,2;crop,896_768,2;cross,960_768,2;crosshair,0_832,2;crown,64_832,2;cuboid,128_832,2;cup-soda,192_832,2;currency,256_832,2;cylinder,320_832,2;dam,384_832,2;database-backup,448_832,2;database-zap,512_832,2;database,576_832,2;delete,640_832,2;dessert,704_832,2;diameter,768_832,2;diamond-minus,832_832,2;diamond-percent,896_832,2;diamond-plus,960_832,2;diamond,0_896,2;dice-1,64_896,2;dice-2,128_896,2;dice-3,192_896,2;dice-4,256_896,2;dice-5,320_896,2;dice-6,384_896,2;dices,448_896,2;diff,512_896,2;disc-2,576_896,2;disc-3,640_896,2;disc-album,704_896,2;disc,768_896,2;divide,832_896,2;dna-off,896_896,2;dna,960_896,2;dock,0_960,2;dog,64_960,2;dollar-sign,128_960,2;donut,192_960,2;door-closed,256_960,2;door-open,320_960,2;dot,384_960,2;download,448_960,2;drafting-compass,512_960,2;drama,576_960,2;dribbble,640_960,2;drill,704_960,2;droplet-off,768_960,2;droplet,832_960,2;droplets,896_960,2;drum,960_960,2;drumstick,0_0,3;dumbbell,64_0,3;ear-off,128_0,3;ear,192_0,3;earth-lock,256_0,3;earth,320_0,3;eclipse,384_0,3;egg-fried,448_0,3;egg-off,512_0,3;egg,576_0,3;ellipsis-vertical,640_0,3;ellipsis,704_0,3;equal-approximately,768_0,3;equal-not,832_0,3;equal,896_0,3;eraser,960_0,3;ethernet-port,0_64,3;euro,64_64,3;expand,128_64,3;external-link,192_64,3;eye-closed,256_64,3;eye-off,320_64,3;eye,384_64,3;facebook,448_64,3;factory,512_64,3;fan,576_64,3;fast-forward,640_64,3;feather,704_64,3;fence,768_64,3;ferris-wheel,832_64,3;figma,896_64,3;file-archive,960_64,3;file-audio-2,0_128,3;file-audio,64_128,3;file-axis-3d,128_128,3;file-badge-2,192_128,3;file-badge,256_128,3;file-box,320_128,3;file-chart-column-increasing,384_128,3;file-chart-column,448_128,3;file-chart-line,512_128,3;file-chart-pie,576_128,3;file-check-2,640_128,3;file-check,704_128,3;file-clock,768_128,3;file-code-2,832_128,3;file-code,896_128,3;file-cog,960_128,3;file-diff,0_192,3;file-digit,64_192,3;file-down,128_192,3;file-heart,192_192,3;file-image,256_192,3;file-input,320_192,3;file-json-2,384_192,3;file-json,448_192,3;file-key-2,512_192,3;file-key,576_192,3;file-lock-2,640_192,3;file-lock,704_192,3;file-minus-2,768_192,3;file-minus,832_192,3;file-music,896_192,3;file-output,960_192,3;file-pen-line,0_256,3;file-pen,64_256,3;file-plus-2,128_256,3;file-plus,192_256,3;file-question,256_256,3;file-scan,320_256,3;file-search-2,384_256,3;file-search,448_256,3;file-sliders,512_256,3;file-spreadsheet,576_256,3;file-stack,640_256,3;file-symlink,704_256,3;file-terminal,768_256,3;file-text,832_256,3;file-type-2,896_256,3;file-type,960_256,3;file-up,0_320,3;file-user,64_320,3;file-video-2,128_320,3;file-video,192_320,3;file-volume-2,256_320,3;file-volume,320_320,3;file-warning,384_320,3;file-x-2,448_320,3;file-x,512_320,3;file,576_320,3;files,640_320,3;film,704_320,3;filter-x,768_320,3;filter,832_320,3;fingerprint,896_320,3;fire-extinguisher,960_320,3;fish-off,0_384,3;fish-symbol,64_384,3;fish,128_384,3;flag-off,192_384,3;flag-triangle-left,256_384,3;flag-triangle-right,320_384,3;flag,384_384,3;flame-kindling,448_384,3;flame,512_384,3;flashlight-off,576_384,3;flashlight,640_384,3;flask-conical-off,704_384,3;flask-conical,768_384,3;flask-round,832_384,3;flip-horizontal-2,896_384,3;flip-horizontal,960_384,3;flip-vertical-2,0_448,3;flip-vertical,64_448,3;flower-2,128_448,3;flower,192_448,3;focus,256_448,3;fold-horizontal,320_448,3;fold-vertical,384_448,3;folder-archive,448_448,3;folder-check,512_448,3;folder-clock,576_448,3;folder-closed,640_448,3;folder-code,704_448,3;folder-cog,768_448,3;folder-dot,832_448,3;folder-down,896_448,3;folder-git-2,960_448,3;folder-git,0_512,3;folder-heart,64_512,3;folder-input,128_512,3;folder-kanban,192_512,3;folder-key,256_512,3;folder-lock,320_512,3;folder-minus,384_512,3;folder-open-dot,448_512,3;folder-open,512_512,3;folder-output,576_512,3;folder-pen,640_512,3;folder-plus,704_512,3;folder-root,768_512,3;folder-search-2,832_512,3;folder-search,896_512,3;folder-symlink,960_512,3;folder-sync,0_576,3;folder-tree,64_576,3;folder-up,128_576,3;folder-x,192_576,3;folder,256_576,3;folders,320_576,3;footprints,384_576,3;forklift,448_576,3;forward,512_576,3;frame,576_576,3;framer,640_576,3;frown,704_576,3;fuel,768_576,3;fullscreen,832_576,3;gallery-horizontal-end,896_576,3;gallery-horizontal,960_576,3;gallery-thumbnails,0_640,3;gallery-vertical-end,64_640,3;gallery-vertical,128_640,3;gamepad-2,192_640,3;gamepad,256_640,3;gauge,320_640,3;gavel,384_640,3;gem,448_640,3;ghost,512_640,3;gift,576_640,3;git-branch-plus,640_640,3;git-branch,704_640,3;git-commit-horizontal,768_640,3;git-commit-vertical,832_640,3;git-compare-arrows,896_640,3;git-compare,960_640,3;git-fork,0_704,3;git-graph,64_704,3;git-merge,128_704,3;git-pull-request-arrow,192_704,3;git-pull-request-closed,256_704,3;git-pull-request-create-arrow,320_704,3;git-pull-request-create,384_704,3;git-pull-request-draft,448_704,3;git-pull-request,512_704,3;github,576_704,3;gitlab,640_704,3;glass-water,704_704,3;glasses,768_704,3;globe-lock,832_704,3;globe,896_704,3;goal,960_704,3;grab,0_768,3;graduation-cap,64_768,3;grape,128_768,3;grid-2x2-check,192_768,3;grid-2x2-plus,256_768,3;grid-2x2-x,320_768,3;grid-2x2,384_768,3;grid-3x3,448_768,3;grip-horizontal,512_768,3;grip-vertical,576_768,3;grip,640_768,3;group,704_768,3;guitar,768_768,3;ham,832_768,3;hammer,896_768,3;hand-coins,960_768,3;hand-heart,0_832,3;hand-helping,64_832,3;hand-metal,128_832,3;hand-platter,192_832,3;hand,256_832,3;handshake,320_832,3;hard-drive-download,384_832,3;hard-drive-upload,448_832,3;hard-drive,512_832,3;hard-hat,576_832,3;hash,640_832,3;haze,704_832,3;hdmi-port,768_832,3;heading-1,832_832,3;heading-2,896_832,3;heading-3,960_832,3;heading-4,0_896,3;heading-5,64_896,3;heading-6,128_896,3;heading,192_896,3;headphone-off,256_896,3;headphones,320_896,3;headset,384_896,3;heart-crack,448_896,3;heart-handshake,512_896,3;heart-off,576_896,3;heart-pulse,640_896,3;heart,704_896,3;heater,768_896,3;hexagon,832_896,3;highlighter,896_896,3;history,960_896,3;hop-off,0_960,3;hop,64_960,3;hospital,128_960,3;hotel,192_960,3;hourglass,256_960,3;house-plug,320_960,3;house-plus,384_960,3;house,448_960,3;ice-cream-bowl,512_960,3;ice-cream-cone,576_960,3;id-card,640_960,3;image-down,704_960,3;image-minus,768_960,3;image-off,832_960,3;image-play,896_960,3;image-plus,960_960,3;image-up,0_0,4;image-upscale,64_0,4;image,128_0,4;images,192_0,4;import,256_0,4;inbox,320_0,4;indent-decrease,384_0,4;indent-increase,448_0,4;indian-rupee,512_0,4;infinity,576_0,4;info,640_0,4;inspection-panel,704_0,4;instagram,768_0,4;italic,832_0,4;iteration-ccw,896_0,4;iteration-cw,960_0,4;japanese-yen,0_64,4;joystick,64_64,4;kanban,128_64,4;key-round,192_64,4;key-square,256_64,4;key,320_64,4;keyboard-music,384_64,4;keyboard-off,448_64,4;keyboard,512_64,4;lamp-ceiling,576_64,4;lamp-desk,640_64,4;lamp-floor,704_64,4;lamp-wall-down,768_64,4;lamp-wall-up,832_64,4;lamp,896_64,4;land-plot,960_64,4;landmark,0_128,4;languages,64_128,4;laptop-minimal-check,128_128,4;laptop-minimal,192_128,4;laptop,256_128,4;lasso-select,320_128,4;lasso,384_128,4;laugh,448_128,4;layers-2,512_128,4;layers,576_128,4;layout-dashboard,640_128,4;layout-grid,704_128,4;layout-list,768_128,4;layout-panel-left,832_128,4;layout-panel-top,896_128,4;layout-template,960_128,4;leaf,0_192,4;leafy-green,64_192,4;lectern,128_192,4;letter-text,192_192,4;library-big,256_192,4;library,320_192,4;life-buoy,384_192,4;ligature,448_192,4;lightbulb-off,512_192,4;lightbulb,576_192,4;link-2-off,640_192,4;link-2,704_192,4;link,768_192,4;linkedin,832_192,4;list-check,896_192,4;list-checks,960_192,4;list-collapse,0_256,4;list-end,64_256,4;list-filter-plus,128_256,4;list-filter,192_256,4;list-minus,256_256,4;list-music,320_256,4;list-ordered,384_256,4;list-plus,448_256,4;list-restart,512_256,4;list-start,576_256,4;list-todo,640_256,4;list-tree,704_256,4;list-video,768_256,4;list-x,832_256,4;list,896_256,4;loader-circle,960_256,4;loader-pinwheel,0_320,4;loader,64_320,4;locate-fixed,128_320,4;locate-off,192_320,4;locate,256_320,4;lock-keyhole-open,320_320,4;lock-keyhole,384_320,4;lock-open,448_320,4;lock,512_320,4;log-in,576_320,4;log-out,640_320,4;logs,704_320,4;lollipop,768_320,4;luggage,832_320,4;magnet,896_320,4;mail-check,960_320,4;mail-minus,0_384,4;mail-open,64_384,4;mail-plus,128_384,4;mail-question,192_384,4;mail-search,256_384,4;mail-warning,320_384,4;mail-x,384_384,4;mail,448_384,4;mailbox,512_384,4;mails,576_384,4;map-pin-check-inside,640_384,4;map-pin-check,704_384,4;map-pin-house,768_384,4;map-pin-minus-inside,832_384,4;map-pin-minus,896_384,4;map-pin-off,960_384,4;map-pin-plus-inside,0_448,4;map-pin-plus,64_448,4;map-pin-x-inside,128_448,4;map-pin-x,192_448,4;map-pin,256_448,4;map-pinned,320_448,4;map,384_448,4;martini,448_448,4;maximize-2,512_448,4;maximize,576_448,4;medal,640_448,4;megaphone-off,704_448,4;megaphone,768_448,4;meh,832_448,4;memory-stick,896_448,4;menu,960_448,4;merge,0_512,4;message-circle-code,64_512,4;message-circle-dashed,128_512,4;message-circle-heart,192_512,4;message-circle-more,256_512,4;message-circle-off,320_512,4;message-circle-plus,384_512,4;message-circle-question,448_512,4;message-circle-reply,512_512,4;message-circle-warning,576_512,4;message-circle-x,640_512,4;message-circle,704_512,4;message-square-code,768_512,4;message-square-dashed,832_512,4;message-square-diff,896_512,4;message-square-dot,960_512,4;message-square-heart,0_576,4;message-square-lock,64_576,4;message-square-more,128_576,4;message-square-off,192_576,4;message-square-plus,256_576,4;message-square-quote,320_576,4;message-square-reply,384_576,4;message-square-share,448_576,4;message-square-text,512_576,4;message-square-warning,576_576,4;message-square-x,640_576,4;message-square,704_576,4;messages-square,768_576,4;mic-off,832_576,4;mic-vocal,896_576,4;mic,960_576,4;microchip,0_640,4;microscope,64_640,4;microwave,128_640,4;milestone,192_640,4;milk-off,256_640,4;milk,320_640,4;minimize-2,384_640,4;minimize,448_640,4;minus,512_640,4;monitor-check,576_640,4;monitor-cog,640_640,4;monitor-dot,704_640,4;monitor-down,768_640,4;monitor-off,832_640,4;monitor-pause,896_640,4;monitor-play,960_640,4;monitor-smartphone,0_704,4;monitor-speaker,64_704,4;monitor-stop,128_704,4;monitor-up,192_704,4;monitor-x,256_704,4;monitor,320_704,4;moon-star,384_704,4;moon,448_704,4;mountain-snow,512_704,4;mountain,576_704,4;mouse-off,640_704,4;mouse-pointer-2,704_704,4;mouse-pointer-ban,768_704,4;mouse-pointer-click,832_704,4;mouse-pointer,896_704,4;mouse,960_704,4;move-3d,0_768,4;move-diagonal-2,64_768,4;move-diagonal,128_768,4;move-down-left,192_768,4;move-down-right,256_768,4;move-down,320_768,4;move-horizontal,384_768,4;move-left,448_768,4;move-right,512_768,4;move-up-left,576_768,4;move-up-right,640_768,4;move-up,704_768,4;move-vertical,768_768,4;move,832_768,4;music-2,896_768,4;music-3,960_768,4;music-4,0_832,4;music,64_832,4;navigation-2-off,128_832,4;navigation-2,192_832,4;navigation-off,256_832,4;navigation,320_832,4;network,384_832,4;newspaper,448_832,4;nfc,512_832,4;notebook-pen,576_832,4;notebook-tabs,640_832,4;notebook-text,704_832,4;notebook,768_832,4;notepad-text-dashed,832_832,4;notepad-text,896_832,4;nut-off,960_832,4;nut,0_896,4;octagon-alert,64_896,4;octagon-minus,128_896,4;octagon-pause,192_896,4;octagon-x,256_896,4;octagon,320_896,4;omega,384_896,4;option,448_896,4;orbit,512_896,4;origami,576_896,4;package-2,640_896,4;package-check,704_896,4;package-minus,768_896,4;package-open,832_896,4;package-plus,896_896,4;package-search,960_896,4;package-x,0_960,4;package,64_960,4;paint-bucket,128_960,4;paint-roller,192_960,4;paintbrush-vertical,256_960,4;paintbrush,320_960,4;palette,384_960,4;panel-bottom-close,448_960,4;panel-bottom-dashed,512_960,4;panel-bottom-open,576_960,4;panel-bottom,640_960,4;panel-left-close,704_960,4;panel-left-dashed,768_960,4;panel-left-open,832_960,4;panel-left,896_960,4;panel-right-close,960_960,4;panel-right-dashed,0_0,5;panel-right-open,64_0,5;panel-right,128_0,5;panel-top-close,192_0,5;panel-top-dashed,256_0,5;panel-top-open,320_0,5;panel-top,384_0,5;panels-left-bottom,448_0,5;panels-right-bottom,512_0,5;panels-top-left,576_0,5;paperclip,640_0,5;parentheses,704_0,5;parking-meter,768_0,5;party-popper,832_0,5;pause,896_0,5;paw-print,960_0,5;pc-case,0_64,5;pen-line,64_64,5;pen-off,128_64,5;pen-tool,192_64,5;pen,256_64,5;pencil-line,320_64,5;pencil-off,384_64,5;pencil-ruler,448_64,5;pencil,512_64,5;pentagon,576_64,5;percent,640_64,5;person-standing,704_64,5;philippine-peso,768_64,5;phone-call,832_64,5;phone-forwarded,896_64,5;phone-incoming,960_64,5;phone-missed,0_128,5;phone-off,64_128,5;phone-outgoing,128_128,5;phone,192_128,5;phosphor-acorn-bold,256_128,5;phosphor-acorn-duotone,320_128,5;phosphor-acorn-fill,384_128,5;phosphor-acorn-light,448_128,5;phosphor-acorn-thin,512_128,5;phosphor-acorn,576_128,5;phosphor-address-book-bold,640_128,5;phosphor-address-book-duotone,704_128,5;phosphor-address-book-fill,768_128,5;phosphor-address-book-light,832_128,5;phosphor-address-book-tabs-bold,896_128,5;phosphor-address-book-tabs-duotone,960_128,5;phosphor-address-book-tabs-fill,0_192,5;phosphor-address-book-tabs-light,64_192,5;phosphor-address-book-tabs-thin,128_192,5;phosphor-address-book-tabs,192_192,5;phosphor-address-book-thin,256_192,5;phosphor-address-book,320_192,5;phosphor-air-traffic-control-bold,384_192,5;phosphor-air-traffic-control-duotone,448_192,5;phosphor-air-traffic-control-fill,512_192,5;phosphor-air-traffic-control-light,576_192,5;phosphor-air-traffic-control-thin,640_192,5;phosphor-air-traffic-control,704_192,5;phosphor-airplane-bold,768_192,5;phosphor-airplane-duotone,832_192,5;phosphor-airplane-fill,896_192,5;phosphor-airplane-in-flight-bold,960_192,5;phosphor-airplane-in-flight-duotone,0_256,5;phosphor-airplane-in-flight-fill,64_256,5;phosphor-airplane-in-flight-light,128_256,5;phosphor-airplane-in-flight-thin,192_256,5;phosphor-airplane-in-flight,256_256,5;phosphor-airplane-landing-bold,320_256,5;phosphor-airplane-landing-duotone,384_256,5;phosphor-airplane-landing-fill,448_256,5;phosphor-airplane-landing-light,512_256,5;phosphor-airplane-landing-thin,576_256,5;phosphor-airplane-landing,640_256,5;phosphor-airplane-light,704_256,5;phosphor-airplane-takeoff-bold,768_256,5;phosphor-airplane-takeoff-duotone,832_256,5;phosphor-airplane-takeoff-fill,896_256,5;phosphor-airplane-takeoff-light,960_256,5;phosphor-airplane-takeoff-thin,0_320,5;phosphor-airplane-takeoff,64_320,5;phosphor-airplane-taxiing-bold,128_320,5;phosphor-airplane-taxiing-duotone,192_320,5;phosphor-airplane-taxiing-fill,256_320,5;phosphor-airplane-taxiing-light,320_320,5;phosphor-airplane-taxiing-thin,384_320,5;phosphor-airplane-taxiing,448_320,5;phosphor-airplane-thin,512_320,5;phosphor-airplane-tilt-bold,576_320,5;phosphor-airplane-tilt-duotone,640_320,5;phosphor-airplane-tilt-fill,704_320,5;phosphor-airplane-tilt-light,768_320,5;phosphor-airplane-tilt-thin,832_320,5;phosphor-airplane-tilt,896_320,5;phosphor-airplane,960_320,5;phosphor-airplay-bold,0_384,5;phosphor-airplay-duotone,64_384,5;phosphor-airplay-fill,128_384,5;phosphor-airplay-light,192_384,5;phosphor-airplay-thin,256_384,5;phosphor-airplay,320_384,5;phosphor-alarm-bold,384_384,5;phosphor-alarm-duotone,448_384,5;phosphor-alarm-fill,512_384,5;phosphor-alarm-light,576_384,5;phosphor-alarm-thin,640_384,5;phosphor-alarm,704_384,5;phosphor-alien-bold,768_384,5;phosphor-alien-duotone,832_384,5;phosphor-alien-fill,896_384,5;phosphor-alien-light,960_384,5;phosphor-alien-thin,0_448,5;phosphor-alien,64_448,5;phosphor-align-bottom-bold,128_448,5;phosphor-align-bottom-duotone,192_448,5;phosphor-align-bottom-fill,256_448,5;phosphor-align-bottom-light,320_448,5;phosphor-align-bottom-simple-bold,384_448,5;phosphor-align-bottom-simple-duotone,448_448,5;phosphor-align-bottom-simple-fill,512_448,5;phosphor-align-bottom-simple-light,576_448,5;phosphor-align-bottom-simple-thin,640_448,5;phosphor-align-bottom-simple,704_448,5;phosphor-align-bottom-thin,768_448,5;phosphor-align-bottom,832_448,5;phosphor-align-center-horizontal-bold,896_448,5;phosphor-align-center-horizontal-duotone,960_448,5;phosphor-align-center-horizontal-fill,0_512,5;phosphor-align-center-horizontal-light,64_512,5;phosphor-align-center-horizontal-simple-bold,128_512,5;phosphor-align-center-horizontal-simple-duotone,192_512,5;phosphor-align-center-horizontal-simple-fill,256_512,5;phosphor-align-center-horizontal-simple-light,320_512,5;phosphor-align-center-horizontal-simple-thin,384_512,5;phosphor-align-center-horizontal-simple,448_512,5;phosphor-align-center-horizontal-thin,512_512,5;phosphor-align-center-horizontal,576_512,5;phosphor-align-center-vertical-bold,640_512,5;phosphor-align-center-vertical-duotone,704_512,5;phosphor-align-center-vertical-fill,768_512,5;phosphor-align-center-vertical-light,832_512,5;phosphor-align-center-vertical-simple-bold,896_512,5;phosphor-align-center-vertical-simple-duotone,960_512,5;phosphor-align-center-vertical-simple-fill,0_576,5;phosphor-align-center-vertical-simple-light,64_576,5;phosphor-align-center-vertical-simple-thin,128_576,5;phosphor-align-center-vertical-simple,192_576,5;phosphor-align-center-vertical-thin,256_576,5;phosphor-align-center-vertical,320_576,5;phosphor-align-left-bold,384_576,5;phosphor-align-left-duotone,448_576,5;phosphor-align-left-fill,512_576,5;phosphor-align-left-light,576_576,5;phosphor-align-left-simple-bold,640_576,5;phosphor-align-left-simple-duotone,704_576,5;phosphor-align-left-simple-fill,768_576,5;phosphor-align-left-simple-light,832_576,5;phosphor-align-left-simple-thin,896_576,5;phosphor-align-left-simple,960_576,5;phosphor-align-left-thin,0_640,5;phosphor-align-left,64_640,5;phosphor-align-right-bold,128_640,5;phosphor-align-right-duotone,192_640,5;phosphor-align-right-fill,256_640,5;phosphor-align-right-light,320_640,5;phosphor-align-right-simple-bold,384_640,5;phosphor-align-right-simple-duotone,448_640,5;phosphor-align-right-simple-fill,512_640,5;phosphor-align-right-simple-light,576_640,5;phosphor-align-right-simple-thin,640_640,5;phosphor-align-right-simple,704_640,5;phosphor-align-right-thin,768_640,5;phosphor-align-right,832_640,5;phosphor-align-top-bold,896_640,5;phosphor-align-top-duotone,960_640,5;phosphor-align-top-fill,0_704,5;phosphor-align-top-light,64_704,5;phosphor-align-top-simple-bold,128_704,5;phosphor-align-top-simple-duotone,192_704,5;phosphor-align-top-simple-fill,256_704,5;phosphor-align-top-simple-light,320_704,5;phosphor-align-top-simple-thin,384_704,5;phosphor-align-top-simple,448_704,5;phosphor-align-top-thin,512_704,5;phosphor-align-top,576_704,5;phosphor-amazon-logo-bold,640_704,5;phosphor-amazon-logo-duotone,704_704,5;phosphor-amazon-logo-fill,768_704,5;phosphor-amazon-logo-light,832_704,5;phosphor-amazon-logo-thin,896_704,5;phosphor-amazon-logo,960_704,5;phosphor-ambulance-bold,0_768,5;phosphor-ambulance-duotone,64_768,5;phosphor-ambulance-fill,128_768,5;phosphor-ambulance-light,192_768,5;phosphor-ambulance-thin,256_768,5;phosphor-ambulance,320_768,5;phosphor-anchor-bold,384_768,5;phosphor-anchor-duotone,448_768,5;phosphor-anchor-fill,512_768,5;phosphor-anchor-light,576_768,5;phosphor-anchor-simple-bold,640_768,5;phosphor-anchor-simple-duotone,704_768,5;phosphor-anchor-simple-fill,768_768,5;phosphor-anchor-simple-light,832_768,5;phosphor-anchor-simple-thin,896_768,5;phosphor-anchor-simple,960_768,5;phosphor-anchor-thin,0_832,5;phosphor-anchor,64_832,5;phosphor-android-logo-bold,128_832,5;phosphor-android-logo-duotone,192_832,5;phosphor-android-logo-fill,256_832,5;phosphor-android-logo-light,320_832,5;phosphor-android-logo-thin,384_832,5;phosphor-android-logo,448_832,5;phosphor-angle-bold,512_832,5;phosphor-angle-duotone,576_832,5;phosphor-angle-fill,640_832,5;phosphor-angle-light,704_832,5;phosphor-angle-thin,768_832,5;phosphor-angle,832_832,5;phosphor-angular-logo-bold,896_832,5;phosphor-angular-logo-duotone,960_832,5;phosphor-angular-logo-fill,0_896,5;phosphor-angular-logo-light,64_896,5;phosphor-angular-logo-thin,128_896,5;phosphor-angular-logo,192_896,5;phosphor-aperture-bold,256_896,5;phosphor-aperture-duotone,320_896,5;phosphor-aperture-fill,384_896,5;phosphor-aperture-light,448_896,5;phosphor-aperture-thin,512_896,5;phosphor-aperture,576_896,5;phosphor-app-store-logo-bold,640_896,5;phosphor-app-store-logo-duotone,704_896,5;phosphor-app-store-logo-fill,768_896,5;phosphor-app-store-logo-light,832_896,5;phosphor-app-store-logo-thin,896_896,5;phosphor-app-store-logo,960_896,5;phosphor-app-window-bold,0_960,5;phosphor-app-window-duotone,64_960,5;phosphor-app-window-fill,128_960,5;phosphor-app-window-light,192_960,5;phosphor-app-window-thin,256_960,5;phosphor-app-window,320_960,5;phosphor-apple-logo-bold,384_960,5;phosphor-apple-logo-duotone,448_960,5;phosphor-apple-logo-fill,512_960,5;phosphor-apple-logo-light,576_960,5;phosphor-apple-logo-thin,640_960,5;phosphor-apple-logo,704_960,5;phosphor-apple-podcasts-logo-bold,768_960,5;phosphor-apple-podcasts-logo-duotone,832_960,5;phosphor-apple-podcasts-logo-fill,896_960,5;phosphor-apple-podcasts-logo-light,960_960,5;phosphor-apple-podcasts-logo-thin,0_0,6;phosphor-apple-podcasts-logo,64_0,6;phosphor-approximate-equals-bold,128_0,6;phosphor-approximate-equals-duotone,192_0,6;phosphor-approximate-equals-fill,256_0,6;phosphor-approximate-equals-light,320_0,6;phosphor-approximate-equals-thin,384_0,6;phosphor-approximate-equals,448_0,6;phosphor-archive-bold,512_0,6;phosphor-archive-duotone,576_0,6;phosphor-archive-fill,640_0,6;phosphor-archive-light,704_0,6;phosphor-archive-thin,768_0,6;phosphor-archive,832_0,6;phosphor-armchair-bold,896_0,6;phosphor-armchair-duotone,960_0,6;phosphor-armchair-fill,0_64,6;phosphor-armchair-light,64_64,6;phosphor-armchair-thin,128_64,6;phosphor-armchair,192_64,6;phosphor-arrow-arc-left-bold,256_64,6;phosphor-arrow-arc-left-duotone,320_64,6;phosphor-arrow-arc-left-fill,384_64,6;phosphor-arrow-arc-left-light,448_64,6;phosphor-arrow-arc-left-thin,512_64,6;phosphor-arrow-arc-left,576_64,6;phosphor-arrow-arc-right-bold,640_64,6;phosphor-arrow-arc-right-duotone,704_64,6;phosphor-arrow-arc-right-fill,768_64,6;phosphor-arrow-arc-right-light,832_64,6;phosphor-arrow-arc-right-thin,896_64,6;phosphor-arrow-arc-right,960_64,6;phosphor-arrow-bend-double-up-left-bold,0_128,6;phosphor-arrow-bend-double-up-left-duotone,64_128,6;phosphor-arrow-bend-double-up-left-fill,128_128,6;phosphor-arrow-bend-double-up-left-light,192_128,6;phosphor-arrow-bend-double-up-left-thin,256_128,6;phosphor-arrow-bend-double-up-left,320_128,6;phosphor-arrow-bend-double-up-right-bold,384_128,6;phosphor-arrow-bend-double-up-right-duotone,448_128,6;phosphor-arrow-bend-double-up-right-fill,512_128,6;phosphor-arrow-bend-double-up-right-light,576_128,6;phosphor-arrow-bend-double-up-right-thin,640_128,6;phosphor-arrow-bend-double-up-right,704_128,6;phosphor-arrow-bend-down-left-bold,768_128,6;phosphor-arrow-bend-down-left-duotone,832_128,6;phosphor-arrow-bend-down-left-fill,896_128,6;phosphor-arrow-bend-down-left-light,960_128,6;phosphor-arrow-bend-down-left-thin,0_192,6;phosphor-arrow-bend-down-left,64_192,6;phosphor-arrow-bend-down-right-bold,128_192,6;phosphor-arrow-bend-down-right-duotone,192_192,6;phosphor-arrow-bend-down-right-fill,256_192,6;phosphor-arrow-bend-down-right-light,320_192,6;phosphor-arrow-bend-down-right-thin,384_192,6;phosphor-arrow-bend-down-right,448_192,6;phosphor-arrow-bend-left-down-bold,512_192,6;phosphor-arrow-bend-left-down-duotone,576_192,6;phosphor-arrow-bend-left-down-fill,640_192,6;phosphor-arrow-bend-left-down-light,704_192,6;phosphor-arrow-bend-left-down-thin,768_192,6;phosphor-arrow-bend-left-down,832_192,6;phosphor-arrow-bend-left-up-bold,896_192,6;phosphor-arrow-bend-left-up-duotone,960_192,6;phosphor-arrow-bend-left-up-fill,0_256,6;phosphor-arrow-bend-left-up-light,64_256,6;phosphor-arrow-bend-left-up-thin,128_256,6;phosphor-arrow-bend-left-up,192_256,6;phosphor-arrow-bend-right-down-bold,256_256,6;phosphor-arrow-bend-right-down-duotone,320_256,6;phosphor-arrow-bend-right-down-fill,384_256,6;phosphor-arrow-bend-right-down-light,448_256,6;phosphor-arrow-bend-right-down-thin,512_256,6;phosphor-arrow-bend-right-down,576_256,6;phosphor-arrow-bend-right-up-bold,640_256,6;phosphor-arrow-bend-right-up-duotone,704_256,6;phosphor-arrow-bend-right-up-fill,768_256,6;phosphor-arrow-bend-right-up-light,832_256,6;phosphor-arrow-bend-right-up-thin,896_256,6;phosphor-arrow-bend-right-up,960_256,6;phosphor-arrow-bend-up-left-bold,0_320,6;phosphor-arrow-bend-up-left-duotone,64_320,6;phosphor-arrow-bend-up-left-fill,128_320,6;phosphor-arrow-bend-up-left-light,192_320,6;phosphor-arrow-bend-up-left-thin,256_320,6;phosphor-arrow-bend-up-left,320_320,6;phosphor-arrow-bend-up-right-bold,384_320,6;phosphor-arrow-bend-up-right-duotone,448_320,6;phosphor-arrow-bend-up-right-fill,512_320,6;phosphor-arrow-bend-up-right-light,576_320,6;phosphor-arrow-bend-up-right-thin,640_320,6;phosphor-arrow-bend-up-right,704_320,6;phosphor-arrow-circle-down-bold,768_320,6;phosphor-arrow-circle-down-duotone,832_320,6;phosphor-arrow-circle-down-fill,896_320,6;phosphor-arrow-circle-down-left-bold,960_320,6;phosphor-arrow-circle-down-left-duotone,0_384,6;phosphor-arrow-circle-down-left-fill,64_384,6;phosphor-arrow-circle-down-left-light,128_384,6;phosphor-arrow-circle-down-left-thin,192_384,6;phosphor-arrow-circle-down-left,256_384,6;phosphor-arrow-circle-down-light,320_384,6;phosphor-arrow-circle-down-right-bold,384_384,6;phosphor-arrow-circle-down-right-duotone,448_384,6;phosphor-arrow-circle-down-right-fill,512_384,6;phosphor-arrow-circle-down-right-light,576_384,6;phosphor-arrow-circle-down-right-thin,640_384,6;phosphor-arrow-circle-down-right,704_384,6;phosphor-arrow-circle-down-thin,768_384,6;phosphor-arrow-circle-down,832_384,6;phosphor-arrow-circle-left-bold,896_384,6;phosphor-arrow-circle-left-duotone,960_384,6;phosphor-arrow-circle-left-fill,0_448,6;phosphor-arrow-circle-left-light,64_448,6;phosphor-arrow-circle-left-thin,128_448,6;phosphor-arrow-circle-left,192_448,6;phosphor-arrow-circle-right-bold,256_448,6;phosphor-arrow-circle-right-duotone,320_448,6;phosphor-arrow-circle-right-fill,384_448,6;phosphor-arrow-circle-right-light,448_448,6;phosphor-arrow-circle-right-thin,512_448,6;phosphor-arrow-circle-right,576_448,6;phosphor-arrow-circle-up-bold,640_448,6;phosphor-arrow-circle-up-duotone,704_448,6;phosphor-arrow-circle-up-fill,768_448,6;phosphor-arrow-circle-up-left-bold,832_448,6;phosphor-arrow-circle-up-left-duotone,896_448,6;phosphor-arrow-circle-up-left-fill,960_448,6;phosphor-arrow-circle-up-left-light,0_512,6;phosphor-arrow-circle-up-left-thin,64_512,6;phosphor-arrow-circle-up-left,128_512,6;phosphor-arrow-circle-up-light,192_512,6;phosphor-arrow-circle-up-right-bold,256_512,6;phosphor-arrow-circle-up-right-duotone,320_512,6;phosphor-arrow-circle-up-right-fill,384_512,6;phosphor-arrow-circle-up-right-light,448_512,6;phosphor-arrow-circle-up-right-thin,512_512,6;phosphor-arrow-circle-up-right,576_512,6;phosphor-arrow-circle-up-thin,640_512,6;phosphor-arrow-circle-up,704_512,6;phosphor-arrow-clockwise-bold,768_512,6;phosphor-arrow-clockwise-duotone,832_512,6;phosphor-arrow-clockwise-fill,896_512,6;phosphor-arrow-clockwise-light,960_512,6;phosphor-arrow-clockwise-thin,0_576,6;phosphor-arrow-clockwise,64_576,6;phosphor-arrow-counter-clockwise-bold,128_576,6;phosphor-arrow-counter-clockwise-duotone,192_576,6;phosphor-arrow-counter-clockwise-fill,256_576,6;phosphor-arrow-counter-clockwise-light,320_576,6;phosphor-arrow-counter-clockwise-thin,384_576,6;phosphor-arrow-counter-clockwise,448_576,6;phosphor-arrow-down-bold,512_576,6;phosphor-arrow-down-duotone,576_576,6;phosphor-arrow-down-fill,640_576,6;phosphor-arrow-down-left-bold,704_576,6;phosphor-arrow-down-left-duotone,768_576,6;phosphor-arrow-down-left-fill,832_576,6;phosphor-arrow-down-left-light,896_576,6;phosphor-arrow-down-left-thin,960_576,6;phosphor-arrow-down-left,0_640,6;phosphor-arrow-down-light,64_640,6;phosphor-arrow-down-right-bold,128_640,6;phosphor-arrow-down-right-duotone,192_640,6;phosphor-arrow-down-right-fill,256_640,6;phosphor-arrow-down-right-light,320_640,6;phosphor-arrow-down-right-thin,384_640,6;phosphor-arrow-down-right,448_640,6;phosphor-arrow-down-thin,512_640,6;phosphor-arrow-down,576_640,6;phosphor-arrow-elbow-down-left-bold,640_640,6;phosphor-arrow-elbow-down-left-duotone,704_640,6;phosphor-arrow-elbow-down-left-fill,768_640,6;phosphor-arrow-elbow-down-left-light,832_640,6;phosphor-arrow-elbow-down-left-thin,896_640,6;phosphor-arrow-elbow-down-left,960_640,6;phosphor-arrow-elbow-down-right-bold,0_704,6;phosphor-arrow-elbow-down-right-duotone,64_704,6;phosphor-arrow-elbow-down-right-fill,128_704,6;phosphor-arrow-elbow-down-right-light,192_704,6;phosphor-arrow-elbow-down-right-thin,256_704,6;phosphor-arrow-elbow-down-right,320_704,6;phosphor-arrow-elbow-left-bold,384_704,6;phosphor-arrow-elbow-left-down-bold,448_704,6;phosphor-arrow-elbow-left-down-duotone,512_704,6;phosphor-arrow-elbow-left-down-fill,576_704,6;phosphor-arrow-elbow-left-down-light,640_704,6;phosphor-arrow-elbow-left-down-thin,704_704,6;phosphor-arrow-elbow-left-down,768_704,6;phosphor-arrow-elbow-left-duotone,832_704,6;phosphor-arrow-elbow-left-fill,896_704,6;phosphor-arrow-elbow-left-light,960_704,6;phosphor-arrow-elbow-left-thin,0_768,6;phosphor-arrow-elbow-left-up-bold,64_768,6;phosphor-arrow-elbow-left-up-duotone,128_768,6;phosphor-arrow-elbow-left-up-fill,192_768,6;phosphor-arrow-elbow-left-up-light,256_768,6;phosphor-arrow-elbow-left-up-thin,320_768,6;phosphor-arrow-elbow-left-up,384_768,6;phosphor-arrow-elbow-left,448_768,6;phosphor-arrow-elbow-right-bold,512_768,6;phosphor-arrow-elbow-right-down-bold,576_768,6;phosphor-arrow-elbow-right-down-duotone,640_768,6;phosphor-arrow-elbow-right-down-fill,704_768,6;phosphor-arrow-elbow-right-down-light,768_768,6;phosphor-arrow-elbow-right-down-thin,832_768,6;phosphor-arrow-elbow-right-down,896_768,6;phosphor-arrow-elbow-right-duotone,960_768,6;phosphor-arrow-elbow-right-fill,0_832,6;phosphor-arrow-elbow-right-light,64_832,6;phosphor-arrow-elbow-right-thin,128_832,6;phosphor-arrow-elbow-right-up-bold,192_832,6;phosphor-arrow-elbow-right-up-duotone,256_832,6;phosphor-arrow-elbow-right-up-fill,320_832,6;phosphor-arrow-elbow-right-up-light,384_832,6;phosphor-arrow-elbow-right-up-thin,448_832,6;phosphor-arrow-elbow-right-up,512_832,6;phosphor-arrow-elbow-right,576_832,6;phosphor-arrow-elbow-up-left-bold,640_832,6;phosphor-arrow-elbow-up-left-duotone,704_832,6;phosphor-arrow-elbow-up-left-fill,768_832,6;phosphor-arrow-elbow-up-left-light,832_832,6;phosphor-arrow-elbow-up-left-thin,896_832,6;phosphor-arrow-elbow-up-left,960_832,6;phosphor-arrow-elbow-up-right-bold,0_896,6;phosphor-arrow-elbow-up-right-duotone,64_896,6;phosphor-arrow-elbow-up-right-fill,128_896,6;phosphor-arrow-elbow-up-right-light,192_896,6;phosphor-arrow-elbow-up-right-thin,256_896,6;phosphor-arrow-elbow-up-right,320_896,6;phosphor-arrow-fat-down-bold,384_896,6;phosphor-arrow-fat-down-duotone,448_896,6;phosphor-arrow-fat-down-fill,512_896,6;phosphor-arrow-fat-down-light,576_896,6;phosphor-arrow-fat-down-thin,640_896,6;phosphor-arrow-fat-down,704_896,6;phosphor-arrow-fat-left-bold,768_896,6;phosphor-arrow-fat-left-duotone,832_896,6;phosphor-arrow-fat-left-fill,896_896,6;phosphor-arrow-fat-left-light,960_896,6;phosphor-arrow-fat-left-thin,0_960,6;phosphor-arrow-fat-left,64_960,6;phosphor-arrow-fat-line-down-bold,128_960,6;phosphor-arrow-fat-line-down-duotone,192_960,6;phosphor-arrow-fat-line-down-fill,256_960,6;phosphor-arrow-fat-line-down-light,320_960,6;phosphor-arrow-fat-line-down-thin,384_960,6;phosphor-arrow-fat-line-down,448_960,6;phosphor-arrow-fat-line-left-bold,512_960,6;phosphor-arrow-fat-line-left-duotone,576_960,6;phosphor-arrow-fat-line-left-fill,640_960,6;phosphor-arrow-fat-line-left-light,704_960,6;phosphor-arrow-fat-line-left-thin,768_960,6;phosphor-arrow-fat-line-left,832_960,6;phosphor-arrow-fat-line-right-bold,896_960,6;phosphor-arrow-fat-line-right-duotone,960_960,6;phosphor-arrow-fat-line-right-fill,0_0,7;phosphor-arrow-fat-line-right-light,64_0,7;phosphor-arrow-fat-line-right-thin,128_0,7;phosphor-arrow-fat-line-right,192_0,7;phosphor-arrow-fat-line-up-bold,256_0,7;phosphor-arrow-fat-line-up-duotone,320_0,7;phosphor-arrow-fat-line-up-fill,384_0,7;phosphor-arrow-fat-line-up-light,448_0,7;phosphor-arrow-fat-line-up-thin,512_0,7;phosphor-arrow-fat-line-up,576_0,7;phosphor-arrow-fat-lines-down-bold,640_0,7;phosphor-arrow-fat-lines-down-duotone,704_0,7;phosphor-arrow-fat-lines-down-fill,768_0,7;phosphor-arrow-fat-lines-down-light,832_0,7;phosphor-arrow-fat-lines-down-thin,896_0,7;phosphor-arrow-fat-lines-down,960_0,7;phosphor-arrow-fat-lines-left-bold,0_64,7;phosphor-arrow-fat-lines-left-duotone,64_64,7;phosphor-arrow-fat-lines-left-fill,128_64,7;phosphor-arrow-fat-lines-left-light,192_64,7;phosphor-arrow-fat-lines-left-thin,256_64,7;phosphor-arrow-fat-lines-left,320_64,7;phosphor-arrow-fat-lines-right-bold,384_64,7;phosphor-arrow-fat-lines-right-duotone,448_64,7;phosphor-arrow-fat-lines-right-fill,512_64,7;phosphor-arrow-fat-lines-right-light,576_64,7;phosphor-arrow-fat-lines-right-thin,640_64,7;phosphor-arrow-fat-lines-right,704_64,7;phosphor-arrow-fat-lines-up-bold,768_64,7;phosphor-arrow-fat-lines-up-duotone,832_64,7;phosphor-arrow-fat-lines-up-fill,896_64,7;phosphor-arrow-fat-lines-up-light,960_64,7;phosphor-arrow-fat-lines-up-thin,0_128,7;phosphor-arrow-fat-lines-up,64_128,7;phosphor-arrow-fat-right-bold,128_128,7;phosphor-arrow-fat-right-duotone,192_128,7;phosphor-arrow-fat-right-fill,256_128,7;phosphor-arrow-fat-right-light,320_128,7;phosphor-arrow-fat-right-thin,384_128,7;phosphor-arrow-fat-right,448_128,7;phosphor-arrow-fat-up-bold,512_128,7;phosphor-arrow-fat-up-duotone,576_128,7;phosphor-arrow-fat-up-fill,640_128,7;phosphor-arrow-fat-up-light,704_128,7;phosphor-arrow-fat-up-thin,768_128,7;phosphor-arrow-fat-up,832_128,7;phosphor-arrow-left-bold,896_128,7;phosphor-arrow-left-duotone,960_128,7;phosphor-arrow-left-fill,0_192,7;phosphor-arrow-left-light,64_192,7;phosphor-arrow-left-thin,128_192,7;phosphor-arrow-left,192_192,7;phosphor-arrow-line-down-bold,256_192,7;phosphor-arrow-line-down-duotone,320_192,7;phosphor-arrow-line-down-fill,384_192,7;phosphor-arrow-line-down-left-bold,448_192,7;phosphor-arrow-line-down-left-duotone,512_192,7;phosphor-arrow-line-down-left-fill,576_192,7;phosphor-arrow-line-down-left-light,640_192,7;phosphor-arrow-line-down-left-thin,704_192,7;phosphor-arrow-line-down-left,768_192,7;phosphor-arrow-line-down-light,832_192,7;phosphor-arrow-line-down-right-bold,896_192,7;phosphor-arrow-line-down-right-duotone,960_192,7;phosphor-arrow-line-down-right-fill,0_256,7;phosphor-arrow-line-down-right-light,64_256,7;phosphor-arrow-line-down-right-thin,128_256,7;phosphor-arrow-line-down-right,192_256,7;phosphor-arrow-line-down-thin,256_256,7;phosphor-arrow-line-down,320_256,7;phosphor-arrow-line-left-bold,384_256,7;phosphor-arrow-line-left-duotone,448_256,7;phosphor-arrow-line-left-fill,512_256,7;phosphor-arrow-line-left-light,576_256,7;phosphor-arrow-line-left-thin,640_256,7;phosphor-arrow-line-left,704_256,7;phosphor-arrow-line-right-bold,768_256,7;phosphor-arrow-line-right-duotone,832_256,7;phosphor-arrow-line-right-fill,896_256,7;phosphor-arrow-line-right-light,960_256,7;phosphor-arrow-line-right-thin,0_320,7;phosphor-arrow-line-right,64_320,7;phosphor-arrow-line-up-bold,128_320,7;phosphor-arrow-line-up-duotone,192_320,7;phosphor-arrow-line-up-fill,256_320,7;phosphor-arrow-line-up-left-bold,320_320,7;phosphor-arrow-line-up-left-duotone,384_320,7;phosphor-arrow-line-up-left-fill,448_320,7;phosphor-arrow-line-up-left-light,512_320,7;phosphor-arrow-line-up-left-thin,576_320,7;phosphor-arrow-line-up-left,640_320,7;phosphor-arrow-line-up-light,704_320,7;phosphor-arrow-line-up-right-bold,768_320,7;phosphor-arrow-line-up-right-duotone,832_320,7;phosphor-arrow-line-up-right-fill,896_320,7;phosphor-arrow-line-up-right-light,960_320,7;phosphor-arrow-line-up-right-thin,0_384,7;phosphor-arrow-line-up-right,64_384,7;phosphor-arrow-line-up-thin,128_384,7;phosphor-arrow-line-up,192_384,7;phosphor-arrow-right-bold,256_384,7;phosphor-arrow-right-duotone,320_384,7;phosphor-arrow-right-fill,384_384,7;phosphor-arrow-right-light,448_384,7;phosphor-arrow-right-thin,512_384,7;phosphor-arrow-right,576_384,7;phosphor-arrow-square-down-bold,640_384,7;phosphor-arrow-square-down-duotone,704_384,7;phosphor-arrow-square-down-fill,768_384,7;phosphor-arrow-square-down-left-bold,832_384,7;phosphor-arrow-square-down-left-duotone,896_384,7;phosphor-arrow-square-down-left-fill,960_384,7;phosphor-arrow-square-down-left-light,0_448,7;phosphor-arrow-square-down-left-thin,64_448,7;phosphor-arrow-square-down-left,128_448,7;phosphor-arrow-square-down-light,192_448,7;phosphor-arrow-square-down-right-bold,256_448,7;phosphor-arrow-square-down-right-duotone,320_448,7;phosphor-arrow-square-down-right-fill,384_448,7;phosphor-arrow-square-down-right-light,448_448,7;phosphor-arrow-square-down-right-thin,512_448,7;phosphor-arrow-square-down-right,576_448,7;phosphor-arrow-square-down-thin,640_448,7;phosphor-arrow-square-down,704_448,7;phosphor-arrow-square-in-bold,768_448,7;phosphor-arrow-square-in-duotone,832_448,7;phosphor-arrow-square-in-fill,896_448,7;phosphor-arrow-square-in-light,960_448,7;phosphor-arrow-square-in-thin,0_512,7;phosphor-arrow-square-in,64_512,7;phosphor-arrow-square-left-bold,128_512,7;phosphor-arrow-square-left-duotone,192_512,7;phosphor-arrow-square-left-fill,256_512,7;phosphor-arrow-square-left-light,320_512,7;phosphor-arrow-square-left-thin,384_512,7;phosphor-arrow-square-left,448_512,7;phosphor-arrow-square-out-bold,512_512,7;phosphor-arrow-square-out-duotone,576_512,7;phosphor-arrow-square-out-fill,640_512,7;phosphor-arrow-square-out-light,704_512,7;phosphor-arrow-square-out-thin,768_512,7;phosphor-arrow-square-out,832_512,7;phosphor-arrow-square-right-bold,896_512,7;phosphor-arrow-square-right-duotone,960_512,7;phosphor-arrow-square-right-fill,0_576,7;phosphor-arrow-square-right-light,64_576,7;phosphor-arrow-square-right-thin,128_576,7;phosphor-arrow-square-right,192_576,7;phosphor-arrow-square-up-bold,256_576,7;phosphor-arrow-square-up-duotone,320_576,7;phosphor-arrow-square-up-fill,384_576,7;phosphor-arrow-square-up-left-bold,448_576,7;phosphor-arrow-square-up-left-duotone,512_576,7;phosphor-arrow-square-up-left-fill,576_576,7;phosphor-arrow-square-up-left-light,640_576,7;phosphor-arrow-square-up-left-thin,704_576,7;phosphor-arrow-square-up-left,768_576,7;phosphor-arrow-square-up-light,832_576,7;phosphor-arrow-square-up-right-bold,896_576,7;phosphor-arrow-square-up-right-duotone,960_576,7;phosphor-arrow-square-up-right-fill,0_640,7;phosphor-arrow-square-up-right-light,64_640,7;phosphor-arrow-square-up-right-thin,128_640,7;phosphor-arrow-square-up-right,192_640,7;phosphor-arrow-square-up-thin,256_640,7;phosphor-arrow-square-up,320_640,7;phosphor-arrow-u-down-left-bold,384_640,7;phosphor-arrow-u-down-left-duotone,448_640,7;phosphor-arrow-u-down-left-fill,512_640,7;phosphor-arrow-u-down-left-light,576_640,7;phosphor-arrow-u-down-left-thin,640_640,7;phosphor-arrow-u-down-left,704_640,7;phosphor-arrow-u-down-right-bold,768_640,7;phosphor-arrow-u-down-right-duotone,832_640,7;phosphor-arrow-u-down-right-fill,896_640,7;phosphor-arrow-u-down-right-light,960_640,7;phosphor-arrow-u-down-right-thin,0_704,7;phosphor-arrow-u-down-right,64_704,7;phosphor-arrow-u-left-down-bold,128_704,7;phosphor-arrow-u-left-down-duotone,192_704,7;phosphor-arrow-u-left-down-fill,256_704,7;phosphor-arrow-u-left-down-light,320_704,7;phosphor-arrow-u-left-down-thin,384_704,7;phosphor-arrow-u-left-down,448_704,7;phosphor-arrow-u-left-up-bold,512_704,7;phosphor-arrow-u-left-up-duotone,576_704,7;phosphor-arrow-u-left-up-fill,640_704,7;phosphor-arrow-u-left-up-light,704_704,7;phosphor-arrow-u-left-up-thin,768_704,7;phosphor-arrow-u-left-up,832_704,7;phosphor-arrow-u-right-down-bold,896_704,7;phosphor-arrow-u-right-down-duotone,960_704,7;phosphor-arrow-u-right-down-fill,0_768,7;phosphor-arrow-u-right-down-light,64_768,7;phosphor-arrow-u-right-down-thin,128_768,7;phosphor-arrow-u-right-down,192_768,7;phosphor-arrow-u-right-up-bold,256_768,7;phosphor-arrow-u-right-up-duotone,320_768,7;phosphor-arrow-u-right-up-fill,384_768,7;phosphor-arrow-u-right-up-light,448_768,7;phosphor-arrow-u-right-up-thin,512_768,7;phosphor-arrow-u-right-up,576_768,7;phosphor-arrow-u-up-left-bold,640_768,7;phosphor-arrow-u-up-left-duotone,704_768,7;phosphor-arrow-u-up-left-fill,768_768,7;phosphor-arrow-u-up-left-light,832_768,7;phosphor-arrow-u-up-left-thin,896_768,7;phosphor-arrow-u-up-left,960_768,7;phosphor-arrow-u-up-right-bold,0_832,7;phosphor-arrow-u-up-right-duotone,64_832,7;phosphor-arrow-u-up-right-fill,128_832,7;phosphor-arrow-u-up-right-light,192_832,7;phosphor-arrow-u-up-right-thin,256_832,7;phosphor-arrow-u-up-right,320_832,7;phosphor-arrow-up-bold,384_832,7;phosphor-arrow-up-duotone,448_832,7;phosphor-arrow-up-fill,512_832,7;phosphor-arrow-up-left-bold,576_832,7;phosphor-arrow-up-left-duotone,640_832,7;phosphor-arrow-up-left-fill,704_832,7;phosphor-arrow-up-left-light,768_832,7;phosphor-arrow-up-left-thin,832_832,7;phosphor-arrow-up-left,896_832,7;phosphor-arrow-up-light,960_832,7;phosphor-arrow-up-right-bold,0_896,7;phosphor-arrow-up-right-duotone,64_896,7;phosphor-arrow-up-right-fill,128_896,7;phosphor-arrow-up-right-light,192_896,7;phosphor-arrow-up-right-thin,256_896,7;phosphor-arrow-up-right,320_896,7;phosphor-arrow-up-thin,384_896,7;phosphor-arrow-up,448_896,7;phosphor-arrows-clockwise-bold,512_896,7;phosphor-arrows-clockwise-duotone,576_896,7;phosphor-arrows-clockwise-fill,640_896,7;phosphor-arrows-clockwise-light,704_896,7;phosphor-arrows-clockwise-thin,768_896,7;phosphor-arrows-clockwise,832_896,7;phosphor-arrows-counter-clockwise-bold,896_896,7;phosphor-arrows-counter-clockwise-duotone,960_896,7;phosphor-arrows-counter-clockwise-fill,0_960,7;phosphor-arrows-counter-clockwise-light,64_960,7;phosphor-arrows-counter-clockwise-thin,128_960,7;phosphor-arrows-counter-clockwise,192_960,7;phosphor-arrows-down-up-bold,256_960,7;phosphor-arrows-down-up-duotone,320_960,7;phosphor-arrows-down-up-fill,384_960,7;phosphor-arrows-down-up-light,448_960,7;phosphor-arrows-down-up-thin,512_960,7;phosphor-arrows-down-up,576_960,7;phosphor-arrows-horizontal-bold,640_960,7;phosphor-arrows-horizontal-duotone,704_960,7;phosphor-arrows-horizontal-fill,768_960,7;phosphor-arrows-horizontal-light,832_960,7;phosphor-arrows-horizontal-thin,896_960,7;phosphor-arrows-horizontal,960_960,7;phosphor-arrows-in-bold,0_0,8;phosphor-arrows-in-cardinal-bold,64_0,8;phosphor-arrows-in-cardinal-duotone,128_0,8;phosphor-arrows-in-cardinal-fill,192_0,8;phosphor-arrows-in-cardinal-light,256_0,8;phosphor-arrows-in-cardinal-thin,320_0,8;phosphor-arrows-in-cardinal,384_0,8;phosphor-arrows-in-duotone,448_0,8;phosphor-arrows-in-fill,512_0,8;phosphor-arrows-in-light,576_0,8;phosphor-arrows-in-line-horizontal-bold,640_0,8;phosphor-arrows-in-line-horizontal-duotone,704_0,8;phosphor-arrows-in-line-horizontal-fill,768_0,8;phosphor-arrows-in-line-horizontal-light,832_0,8;phosphor-arrows-in-line-horizontal-thin,896_0,8;phosphor-arrows-in-line-horizontal,960_0,8;phosphor-arrows-in-line-vertical-bold,0_64,8;phosphor-arrows-in-line-vertical-duotone,64_64,8;phosphor-arrows-in-line-vertical-fill,128_64,8;phosphor-arrows-in-line-vertical-light,192_64,8;phosphor-arrows-in-line-vertical-thin,256_64,8;phosphor-arrows-in-line-vertical,320_64,8;phosphor-arrows-in-simple-bold,384_64,8;phosphor-arrows-in-simple-duotone,448_64,8;phosphor-arrows-in-simple-fill,512_64,8;phosphor-arrows-in-simple-light,576_64,8;phosphor-arrows-in-simple-thin,640_64,8;phosphor-arrows-in-simple,704_64,8;phosphor-arrows-in-thin,768_64,8;phosphor-arrows-in,832_64,8;phosphor-arrows-left-right-bold,896_64,8;phosphor-arrows-left-right-duotone,960_64,8;phosphor-arrows-left-right-fill,0_128,8;phosphor-arrows-left-right-light,64_128,8;phosphor-arrows-left-right-thin,128_128,8;phosphor-arrows-left-right,192_128,8;phosphor-arrows-merge-bold,256_128,8;phosphor-arrows-merge-duotone,320_128,8;phosphor-arrows-merge-fill,384_128,8;phosphor-arrows-merge-light,448_128,8;phosphor-arrows-merge-thin,512_128,8;phosphor-arrows-merge,576_128,8;phosphor-arrows-out-bold,640_128,8;phosphor-arrows-out-cardinal-bold,704_128,8;phosphor-arrows-out-cardinal-duotone,768_128,8;phosphor-arrows-out-cardinal-fill,832_128,8;phosphor-arrows-out-cardinal-light,896_128,8;phosphor-arrows-out-cardinal-thin,960_128,8;phosphor-arrows-out-cardinal,0_192,8;phosphor-arrows-out-duotone,64_192,8;phosphor-arrows-out-fill,128_192,8;phosphor-arrows-out-light,192_192,8;phosphor-arrows-out-line-horizontal-bold,256_192,8;phosphor-arrows-out-line-horizontal-duotone,320_192,8;phosphor-arrows-out-line-horizontal-fill,384_192,8;phosphor-arrows-out-line-horizontal-light,448_192,8;phosphor-arrows-out-line-horizontal-thin,512_192,8;phosphor-arrows-out-line-horizontal,576_192,8;phosphor-arrows-out-line-vertical-bold,640_192,8;phosphor-arrows-out-line-vertical-duotone,704_192,8;phosphor-arrows-out-line-vertical-fill,768_192,8;phosphor-arrows-out-line-vertical-light,832_192,8;phosphor-arrows-out-line-vertical-thin,896_192,8;phosphor-arrows-out-line-vertical,960_192,8;phosphor-arrows-out-simple-bold,0_256,8;phosphor-arrows-out-simple-duotone,64_256,8;phosphor-arrows-out-simple-fill,128_256,8;phosphor-arrows-out-simple-light,192_256,8;phosphor-arrows-out-simple-thin,256_256,8;phosphor-arrows-out-simple,320_256,8;phosphor-arrows-out-thin,384_256,8;phosphor-arrows-out,448_256,8;phosphor-arrows-split-bold,512_256,8;phosphor-arrows-split-duotone,576_256,8;phosphor-arrows-split-fill,640_256,8;phosphor-arrows-split-light,704_256,8;phosphor-arrows-split-thin,768_256,8;phosphor-arrows-split,832_256,8;phosphor-arrows-vertical-bold,896_256,8;phosphor-arrows-vertical-duotone,960_256,8;phosphor-arrows-vertical-fill,0_320,8;phosphor-arrows-vertical-light,64_320,8;phosphor-arrows-vertical-thin,128_320,8;phosphor-arrows-vertical,192_320,8;phosphor-article-bold,256_320,8;phosphor-article-duotone,320_320,8;phosphor-article-fill,384_320,8;phosphor-article-light,448_320,8;phosphor-article-medium-bold,512_320,8;phosphor-article-medium-duotone,576_320,8;phosphor-article-medium-fill,640_320,8;phosphor-article-medium-light,704_320,8;phosphor-article-medium-thin,768_320,8;phosphor-article-medium,832_320,8;phosphor-article-ny-times-bold,896_320,8;phosphor-article-ny-times-duotone,960_320,8;phosphor-article-ny-times-fill,0_384,8;phosphor-article-ny-times-light,64_384,8;phosphor-article-ny-times-thin,128_384,8;phosphor-article-ny-times,192_384,8;phosphor-article-thin,256_384,8;phosphor-article,320_384,8;phosphor-asclepius-bold,384_384,8;phosphor-asclepius-duotone,448_384,8;phosphor-asclepius-fill,512_384,8;phosphor-asclepius-light,576_384,8;phosphor-asclepius-thin,640_384,8;phosphor-asclepius,704_384,8;phosphor-asterisk-bold,768_384,8;phosphor-asterisk-duotone,832_384,8;phosphor-asterisk-fill,896_384,8;phosphor-asterisk-light,960_384,8;phosphor-asterisk-simple-bold,0_448,8;phosphor-asterisk-simple-duotone,64_448,8;phosphor-asterisk-simple-fill,128_448,8;phosphor-asterisk-simple-light,192_448,8;phosphor-asterisk-simple-thin,256_448,8;phosphor-asterisk-simple,320_448,8;phosphor-asterisk-thin,384_448,8;phosphor-asterisk,448_448,8;phosphor-at-bold,512_448,8;phosphor-at-duotone,576_448,8;phosphor-at-fill,640_448,8;phosphor-at-light,704_448,8;phosphor-at-thin,768_448,8;phosphor-at,832_448,8;phosphor-atom-bold,896_448,8;phosphor-atom-duotone,960_448,8;phosphor-atom-fill,0_512,8;phosphor-atom-light,64_512,8;phosphor-atom-thin,128_512,8;phosphor-atom,192_512,8;phosphor-avocado-bold,256_512,8;phosphor-avocado-duotone,320_512,8;phosphor-avocado-fill,384_512,8;phosphor-avocado-light,448_512,8;phosphor-avocado-thin,512_512,8;phosphor-avocado,576_512,8;phosphor-axe-bold,640_512,8;phosphor-axe-duotone,704_512,8;phosphor-axe-fill,768_512,8;phosphor-axe-light,832_512,8;phosphor-axe-thin,896_512,8;phosphor-axe,960_512,8;phosphor-baby-bold,0_576,8;phosphor-baby-carriage-bold,64_576,8;phosphor-baby-carriage-duotone,128_576,8;phosphor-baby-carriage-fill,192_576,8;phosphor-baby-carriage-light,256_576,8;phosphor-baby-carriage-thin,320_576,8;phosphor-baby-carriage,384_576,8;phosphor-baby-duotone,448_576,8;phosphor-baby-fill,512_576,8;phosphor-baby-light,576_576,8;phosphor-baby-thin,640_576,8;phosphor-baby,704_576,8;phosphor-backpack-bold,768_576,8;phosphor-backpack-duotone,832_576,8;phosphor-backpack-fill,896_576,8;phosphor-backpack-light,960_576,8;phosphor-backpack-thin,0_640,8;phosphor-backpack,64_640,8;phosphor-backspace-bold,128_640,8;phosphor-backspace-duotone,192_640,8;phosphor-backspace-fill,256_640,8;phosphor-backspace-light,320_640,8;phosphor-backspace-thin,384_640,8;phosphor-backspace,448_640,8;phosphor-bag-bold,512_640,8;phosphor-bag-duotone,576_640,8;phosphor-bag-fill,640_640,8;phosphor-bag-light,704_640,8;phosphor-bag-simple-bold,768_640,8;phosphor-bag-simple-duotone,832_640,8;phosphor-bag-simple-fill,896_640,8;phosphor-bag-simple-light,960_640,8;phosphor-bag-simple-thin,0_704,8;phosphor-bag-simple,64_704,8;phosphor-bag-thin,128_704,8;phosphor-bag,192_704,8;phosphor-balloon-bold,256_704,8;phosphor-balloon-duotone,320_704,8;phosphor-balloon-fill,384_704,8;phosphor-balloon-light,448_704,8;phosphor-balloon-thin,512_704,8;phosphor-balloon,576_704,8;phosphor-bandaids-bold,640_704,8;phosphor-bandaids-duotone,704_704,8;phosphor-bandaids-fill,768_704,8;phosphor-bandaids-light,832_704,8;phosphor-bandaids-thin,896_704,8;phosphor-bandaids,960_704,8;phosphor-bank-bold,0_768,8;phosphor-bank-duotone,64_768,8;phosphor-bank-fill,128_768,8;phosphor-bank-light,192_768,8;phosphor-bank-thin,256_768,8;phosphor-bank,320_768,8;phosphor-barbell-bold,384_768,8;phosphor-barbell-duotone,448_768,8;phosphor-barbell-fill,512_768,8;phosphor-barbell-light,576_768,8;phosphor-barbell-thin,640_768,8;phosphor-barbell,704_768,8;phosphor-barcode-bold,768_768,8;phosphor-barcode-duotone,832_768,8;phosphor-barcode-fill,896_768,8;phosphor-barcode-light,960_768,8;phosphor-barcode-thin,0_832,8;phosphor-barcode,64_832,8;phosphor-barn-bold,128_832,8;phosphor-barn-duotone,192_832,8;phosphor-barn-fill,256_832,8;phosphor-barn-light,320_832,8;phosphor-barn-thin,384_832,8;phosphor-barn,448_832,8;phosphor-barricade-bold,512_832,8;phosphor-barricade-duotone,576_832,8;phosphor-barricade-fill,640_832,8;phosphor-barricade-light,704_832,8;phosphor-barricade-thin,768_832,8;phosphor-barricade,832_832,8;phosphor-baseball-bold,896_832,8;phosphor-baseball-cap-bold,960_832,8;phosphor-baseball-cap-duotone,0_896,8;phosphor-baseball-cap-fill,64_896,8;phosphor-baseball-cap-light,128_896,8;phosphor-baseball-cap-thin,192_896,8;phosphor-baseball-cap,256_896,8;phosphor-baseball-duotone,320_896,8;phosphor-baseball-fill,384_896,8;phosphor-baseball-helmet-bold,448_896,8;phosphor-baseball-helmet-duotone,512_896,8;phosphor-baseball-helmet-fill,576_896,8;phosphor-baseball-helmet-light,640_896,8;phosphor-baseball-helmet-thin,704_896,8;phosphor-baseball-helmet,768_896,8;phosphor-baseball-light,832_896,8;phosphor-baseball-thin,896_896,8;phosphor-baseball,960_896,8;phosphor-basket-bold,0_960,8;phosphor-basket-duotone,64_960,8;phosphor-basket-fill,128_960,8;phosphor-basket-light,192_960,8;phosphor-basket-thin,256_960,8;phosphor-basket,320_960,8;phosphor-basketball-bold,384_960,8;phosphor-basketball-duotone,448_960,8;phosphor-basketball-fill,512_960,8;phosphor-basketball-light,576_960,8;phosphor-basketball-thin,640_960,8;phosphor-basketball,704_960,8;phosphor-bathtub-bold,768_960,8;phosphor-bathtub-duotone,832_960,8;phosphor-bathtub-fill,896_960,8;phosphor-bathtub-light,960_960,8;phosphor-bathtub-thin,0_0,9;phosphor-bathtub,64_0,9;phosphor-battery-charging-bold,128_0,9;phosphor-battery-charging-duotone,192_0,9;phosphor-battery-charging-fill,256_0,9;phosphor-battery-charging-light,320_0,9;phosphor-battery-charging-thin,384_0,9;phosphor-battery-charging-vertical-bold,448_0,9;phosphor-battery-charging-vertical-duotone,512_0,9;phosphor-battery-charging-vertical-fill,576_0,9;phosphor-battery-charging-vertical-light,640_0,9;phosphor-battery-charging-vertical-thin,704_0,9;phosphor-battery-charging-vertical,768_0,9;phosphor-battery-charging,832_0,9;phosphor-battery-empty-bold,896_0,9;phosphor-battery-empty-duotone,960_0,9;phosphor-battery-empty-fill,0_64,9;phosphor-battery-empty-light,64_64,9;phosphor-battery-empty-thin,128_64,9;phosphor-battery-empty,192_64,9;phosphor-battery-full-bold,256_64,9;phosphor-battery-full-duotone,320_64,9;phosphor-battery-full-fill,384_64,9;phosphor-battery-full-light,448_64,9;phosphor-battery-full-thin,512_64,9;phosphor-battery-full,576_64,9;phosphor-battery-high-bold,640_64,9;phosphor-battery-high-duotone,704_64,9;phosphor-battery-high-fill,768_64,9;phosphor-battery-high-light,832_64,9;phosphor-battery-high-thin,896_64,9;phosphor-battery-high,960_64,9;phosphor-battery-low-bold,0_128,9;phosphor-battery-low-duotone,64_128,9;phosphor-battery-low-fill,128_128,9;phosphor-battery-low-light,192_128,9;phosphor-battery-low-thin,256_128,9;phosphor-battery-low,320_128,9;phosphor-battery-medium-bold,384_128,9;phosphor-battery-medium-duotone,448_128,9;phosphor-battery-medium-fill,512_128,9;phosphor-battery-medium-light,576_128,9;phosphor-battery-medium-thin,640_128,9;phosphor-battery-medium,704_128,9;phosphor-battery-plus-bold,768_128,9;phosphor-battery-plus-duotone,832_128,9;phosphor-battery-plus-fill,896_128,9;phosphor-battery-plus-light,960_128,9;phosphor-battery-plus-thin,0_192,9;phosphor-battery-plus-vertical-bold,64_192,9;phosphor-battery-plus-vertical-duotone,128_192,9;phosphor-battery-plus-vertical-fill,192_192,9;phosphor-battery-plus-vertical-light,256_192,9;phosphor-battery-plus-vertical-thin,320_192,9;phosphor-battery-plus-vertical,384_192,9;phosphor-battery-plus,448_192,9;phosphor-battery-vertical-empty-bold,512_192,9;phosphor-battery-vertical-empty-duotone,576_192,9;phosphor-battery-vertical-empty-fill,640_192,9;phosphor-battery-vertical-empty-light,704_192,9;phosphor-battery-vertical-empty-thin,768_192,9;phosphor-battery-vertical-empty,832_192,9;phosphor-battery-vertical-full-bold,896_192,9;phosphor-battery-vertical-full-duotone,960_192,9;phosphor-battery-vertical-full-fill,0_256,9;phosphor-battery-vertical-full-light,64_256,9;phosphor-battery-vertical-full-thin,128_256,9;phosphor-battery-vertical-full,192_256,9;phosphor-battery-vertical-high-bold,256_256,9;phosphor-battery-vertical-high-duotone,320_256,9;phosphor-battery-vertical-high-fill,384_256,9;phosphor-battery-vertical-high-light,448_256,9;phosphor-battery-vertical-high-thin,512_256,9;phosphor-battery-vertical-high,576_256,9;phosphor-battery-vertical-low-bold,640_256,9;phosphor-battery-vertical-low-duotone,704_256,9;phosphor-battery-vertical-low-fill,768_256,9;phosphor-battery-vertical-low-light,832_256,9;phosphor-battery-vertical-low-thin,896_256,9;phosphor-battery-vertical-low,960_256,9;phosphor-battery-vertical-medium-bold,0_320,9;phosphor-battery-vertical-medium-duotone,64_320,9;phosphor-battery-vertical-medium-fill,128_320,9;phosphor-battery-vertical-medium-light,192_320,9;phosphor-battery-vertical-medium-thin,256_320,9;phosphor-battery-vertical-medium,320_320,9;phosphor-battery-warning-bold,384_320,9;phosphor-battery-warning-duotone,448_320,9;phosphor-battery-warning-fill,512_320,9;phosphor-battery-warning-light,576_320,9;phosphor-battery-warning-thin,640_320,9;phosphor-battery-warning-vertical-bold,704_320,9;phosphor-battery-warning-vertical-duotone,768_320,9;phosphor-battery-warning-vertical-fill,832_320,9;phosphor-battery-warning-vertical-light,896_320,9;phosphor-battery-warning-vertical-thin,960_320,9;phosphor-battery-warning-vertical,0_384,9;phosphor-battery-warning,64_384,9;phosphor-beach-ball-bold,128_384,9;phosphor-beach-ball-duotone,192_384,9;phosphor-beach-ball-fill,256_384,9;phosphor-beach-ball-light,320_384,9;phosphor-beach-ball-thin,384_384,9;phosphor-beach-ball,448_384,9;phosphor-beanie-bold,512_384,9;phosphor-beanie-duotone,576_384,9;phosphor-beanie-fill,640_384,9;phosphor-beanie-light,704_384,9;phosphor-beanie-thin,768_384,9;phosphor-beanie,832_384,9;phosphor-bed-bold,896_384,9;phosphor-bed-duotone,960_384,9;phosphor-bed-fill,0_448,9;phosphor-bed-light,64_448,9;phosphor-bed-thin,128_448,9;phosphor-bed,192_448,9;phosphor-beer-bottle-bold,256_448,9;phosphor-beer-bottle-duotone,320_448,9;phosphor-beer-bottle-fill,384_448,9;phosphor-beer-bottle-light,448_448,9;phosphor-beer-bottle-thin,512_448,9;phosphor-beer-bottle,576_448,9;phosphor-beer-stein-bold,640_448,9;phosphor-beer-stein-duotone,704_448,9;phosphor-beer-stein-fill,768_448,9;phosphor-beer-stein-light,832_448,9;phosphor-beer-stein-thin,896_448,9;phosphor-beer-stein,960_448,9;phosphor-behance-logo-bold,0_512,9;phosphor-behance-logo-duotone,64_512,9;phosphor-behance-logo-fill,128_512,9;phosphor-behance-logo-light,192_512,9;phosphor-behance-logo-thin,256_512,9;phosphor-behance-logo,320_512,9;phosphor-bell-bold,384_512,9;phosphor-bell-duotone,448_512,9;phosphor-bell-fill,512_512,9;phosphor-bell-light,576_512,9;phosphor-bell-ringing-bold,640_512,9;phosphor-bell-ringing-duotone,704_512,9;phosphor-bell-ringing-fill,768_512,9;phosphor-bell-ringing-light,832_512,9;phosphor-bell-ringing-thin,896_512,9;phosphor-bell-ringing,960_512,9;phosphor-bell-simple-bold,0_576,9;phosphor-bell-simple-duotone,64_576,9;phosphor-bell-simple-fill,128_576,9;phosphor-bell-simple-light,192_576,9;phosphor-bell-simple-ringing-bold,256_576,9;phosphor-bell-simple-ringing-duotone,320_576,9;phosphor-bell-simple-ringing-fill,384_576,9;phosphor-bell-simple-ringing-light,448_576,9;phosphor-bell-simple-ringing-thin,512_576,9;phosphor-bell-simple-ringing,576_576,9;phosphor-bell-simple-slash-bold,640_576,9;phosphor-bell-simple-slash-duotone,704_576,9;phosphor-bell-simple-slash-fill,768_576,9;phosphor-bell-simple-slash-light,832_576,9;phosphor-bell-simple-slash-thin,896_576,9;phosphor-bell-simple-slash,960_576,9;phosphor-bell-simple-thin,0_640,9;phosphor-bell-simple-z-bold,64_640,9;phosphor-bell-simple-z-duotone,128_640,9;phosphor-bell-simple-z-fill,192_640,9;phosphor-bell-simple-z-light,256_640,9;phosphor-bell-simple-z-thin,320_640,9;phosphor-bell-simple-z,384_640,9;phosphor-bell-simple,448_640,9;phosphor-bell-slash-bold,512_640,9;phosphor-bell-slash-duotone,576_640,9;phosphor-bell-slash-fill,640_640,9;phosphor-bell-slash-light,704_640,9;phosphor-bell-slash-thin,768_640,9;phosphor-bell-slash,832_640,9;phosphor-bell-thin,896_640,9;phosphor-bell-z-bold,960_640,9;phosphor-bell-z-duotone,0_704,9;phosphor-bell-z-fill,64_704,9;phosphor-bell-z-light,128_704,9;phosphor-bell-z-thin,192_704,9;phosphor-bell-z,256_704,9;phosphor-bell,320_704,9;phosphor-belt-bold,384_704,9;phosphor-belt-duotone,448_704,9;phosphor-belt-fill,512_704,9;phosphor-belt-light,576_704,9;phosphor-belt-thin,640_704,9;phosphor-belt,704_704,9;phosphor-bezier-curve-bold,768_704,9;phosphor-bezier-curve-duotone,832_704,9;phosphor-bezier-curve-fill,896_704,9;phosphor-bezier-curve-light,960_704,9;phosphor-bezier-curve-thin,0_768,9;phosphor-bezier-curve,64_768,9;phosphor-bicycle-bold,128_768,9;phosphor-bicycle-duotone,192_768,9;phosphor-bicycle-fill,256_768,9;phosphor-bicycle-light,320_768,9;phosphor-bicycle-thin,384_768,9;phosphor-bicycle,448_768,9;phosphor-binary-bold,512_768,9;phosphor-binary-duotone,576_768,9;phosphor-binary-fill,640_768,9;phosphor-binary-light,704_768,9;phosphor-binary-thin,768_768,9;phosphor-binary,832_768,9;phosphor-binoculars-bold,896_768,9;phosphor-binoculars-duotone,960_768,9;phosphor-binoculars-fill,0_832,9;phosphor-binoculars-light,64_832,9;phosphor-binoculars-thin,128_832,9;phosphor-binoculars,192_832,9;phosphor-biohazard-bold,256_832,9;phosphor-biohazard-duotone,320_832,9;phosphor-biohazard-fill,384_832,9;phosphor-biohazard-light,448_832,9;phosphor-biohazard-thin,512_832,9;phosphor-biohazard,576_832,9;phosphor-bird-bold,640_832,9;phosphor-bird-duotone,704_832,9;phosphor-bird-fill,768_832,9;phosphor-bird-light,832_832,9;phosphor-bird-thin,896_832,9;phosphor-bird,960_832,9;phosphor-blueprint-bold,0_896,9;phosphor-blueprint-duotone,64_896,9;phosphor-blueprint-fill,128_896,9;phosphor-blueprint-light,192_896,9;phosphor-blueprint-thin,256_896,9;phosphor-blueprint,320_896,9;phosphor-bluetooth-bold,384_896,9;phosphor-bluetooth-connected-bold,448_896,9;phosphor-bluetooth-connected-duotone,512_896,9;phosphor-bluetooth-connected-fill,576_896,9;phosphor-bluetooth-connected-light,640_896,9;phosphor-bluetooth-connected-thin,704_896,9;phosphor-bluetooth-connected,768_896,9;phosphor-bluetooth-duotone,832_896,9;phosphor-bluetooth-fill,896_896,9;phosphor-bluetooth-light,960_896,9;phosphor-bluetooth-slash-bold,0_960,9;phosphor-bluetooth-slash-duotone,64_960,9;phosphor-bluetooth-slash-fill,128_960,9;phosphor-bluetooth-slash-light,192_960,9;phosphor-bluetooth-slash-thin,256_960,9;phosphor-bluetooth-slash,320_960,9;phosphor-bluetooth-thin,384_960,9;phosphor-bluetooth-x-bold,448_960,9;phosphor-bluetooth-x-duotone,512_960,9;phosphor-bluetooth-x-fill,576_960,9;phosphor-bluetooth-x-light,640_960,9;phosphor-bluetooth-x-thin,704_960,9;phosphor-bluetooth-x,768_960,9;phosphor-bluetooth,832_960,9;phosphor-boat-bold,896_960,9;phosphor-boat-duotone,960_960,9;phosphor-boat-fill,0_0,10;phosphor-boat-light,64_0,10;phosphor-boat-thin,128_0,10;phosphor-boat,192_0,10;phosphor-bomb-bold,256_0,10;phosphor-bomb-duotone,320_0,10;phosphor-bomb-fill,384_0,10;phosphor-bomb-light,448_0,10;phosphor-bomb-thin,512_0,10;phosphor-bomb,576_0,10;phosphor-bone-bold,640_0,10;phosphor-bone-duotone,704_0,10;phosphor-bone-fill,768_0,10;phosphor-bone-light,832_0,10;phosphor-bone-thin,896_0,10;phosphor-bone,960_0,10;phosphor-book-bold,0_64,10;phosphor-book-bookmark-bold,64_64,10;phosphor-book-bookmark-duotone,128_64,10;phosphor-book-bookmark-fill,192_64,10;phosphor-book-bookmark-light,256_64,10;phosphor-book-bookmark-thin,320_64,10;phosphor-book-bookmark,384_64,10;phosphor-book-duotone,448_64,10;phosphor-book-fill,512_64,10;phosphor-book-light,576_64,10;phosphor-book-open-bold,640_64,10;phosphor-book-open-duotone,704_64,10;phosphor-book-open-fill,768_64,10;phosphor-book-open-light,832_64,10;phosphor-book-open-text-bold,896_64,10;phosphor-book-open-text-duotone,960_64,10;phosphor-book-open-text-fill,0_128,10;phosphor-book-open-text-light,64_128,10;phosphor-book-open-text-thin,128_128,10;phosphor-book-open-text,192_128,10;phosphor-book-open-thin,256_128,10;phosphor-book-open-user-bold,320_128,10;phosphor-book-open-user-duotone,384_128,10;phosphor-book-open-user-fill,448_128,10;phosphor-book-open-user-light,512_128,10;phosphor-book-open,576_128,10;phosphor-book-thin,640_128,10;phosphor-book-user-thin,704_128,10;phosphor-book-user,768_128,10;phosphor-book,832_128,10;phosphor-bookmark-bold,896_128,10;phosphor-bookmark-duotone,960_128,10;phosphor-bookmark-fill,0_192,10;phosphor-bookmark-light,64_192,10;phosphor-bookmark-simple-bold,128_192,10;phosphor-bookmark-simple-duotone,192_192,10;phosphor-bookmark-simple-fill,256_192,10;phosphor-bookmark-simple-light,320_192,10;phosphor-bookmark-simple-thin,384_192,10;phosphor-bookmark-simple,448_192,10;phosphor-bookmark-thin,512_192,10;phosphor-bookmark,576_192,10;phosphor-bookmarks-bold,640_192,10;phosphor-bookmarks-duotone,704_192,10;phosphor-bookmarks-fill,768_192,10;phosphor-bookmarks-light,832_192,10;phosphor-bookmarks-simple-bold,896_192,10;phosphor-bookmarks-simple-duotone,960_192,10;phosphor-bookmarks-simple-fill,0_256,10;phosphor-bookmarks-simple-light,64_256,10;phosphor-bookmarks-simple-thin,128_256,10;phosphor-bookmarks-simple,192_256,10;phosphor-bookmarks-thin,256_256,10;phosphor-bookmarks,320_256,10;phosphor-books-bold,384_256,10;phosphor-books-duotone,448_256,10;phosphor-books-fill,512_256,10;phosphor-books-light,576_256,10;phosphor-books-thin,640_256,10;phosphor-books,704_256,10;phosphor-boot-bold,768_256,10;phosphor-boot-duotone,832_256,10;phosphor-boot-fill,896_256,10;phosphor-boot-light,960_256,10;phosphor-boot-thin,0_320,10;phosphor-boot,64_320,10;phosphor-boules-bold,128_320,10;phosphor-boules-duotone,192_320,10;phosphor-boules-fill,256_320,10;phosphor-boules-light,320_320,10;phosphor-boules-thin,384_320,10;phosphor-boules,448_320,10;phosphor-bounding-box-bold,512_320,10;phosphor-bounding-box-duotone,576_320,10;phosphor-bounding-box-fill,640_320,10;phosphor-bounding-box-light,704_320,10;phosphor-bounding-box-thin,768_320,10;phosphor-bounding-box,832_320,10;phosphor-bowl-food-bold,896_320,10;phosphor-bowl-food-duotone,960_320,10;phosphor-bowl-food-fill,0_384,10;phosphor-bowl-food-light,64_384,10;phosphor-bowl-food-thin,128_384,10;phosphor-bowl-food,192_384,10;phosphor-bowl-steam-bold,256_384,10;phosphor-bowl-steam-duotone,320_384,10;phosphor-bowl-steam-fill,384_384,10;phosphor-bowl-steam-light,448_384,10;phosphor-bowl-steam-thin,512_384,10;phosphor-bowl-steam,576_384,10;phosphor-bowling-ball-bold,640_384,10;phosphor-bowling-ball-duotone,704_384,10;phosphor-bowling-ball-fill,768_384,10;phosphor-bowling-ball-light,832_384,10;phosphor-bowling-ball-thin,896_384,10;phosphor-bowling-ball,960_384,10;phosphor-box-arrow-down-bold,0_448,10;phosphor-box-arrow-down-duotone,64_448,10;phosphor-box-arrow-down-fill,128_448,10;phosphor-box-arrow-down-light,192_448,10;phosphor-box-arrow-down-thin,256_448,10;phosphor-box-arrow-down,320_448,10;phosphor-box-arrow-up-bold,384_448,10;phosphor-box-arrow-up-duotone,448_448,10;phosphor-box-arrow-up-fill,512_448,10;phosphor-box-arrow-up-light,576_448,10;phosphor-box-arrow-up-thin,640_448,10;phosphor-box-arrow-up,704_448,10;phosphor-boxing-glove-bold,768_448,10;phosphor-boxing-glove-duotone,832_448,10;phosphor-boxing-glove-fill,896_448,10;phosphor-boxing-glove-light,960_448,10;phosphor-boxing-glove-thin,0_512,10;phosphor-boxing-glove,64_512,10;phosphor-brackets-angle-bold,128_512,10;phosphor-brackets-angle-duotone,192_512,10;phosphor-brackets-angle-fill,256_512,10;phosphor-brackets-angle-light,320_512,10;phosphor-brackets-angle-thin,384_512,10;phosphor-brackets-angle,448_512,10;phosphor-brackets-curly-bold,512_512,10;phosphor-brackets-curly-duotone,576_512,10;phosphor-brackets-curly-fill,640_512,10;phosphor-brackets-curly-light,704_512,10;phosphor-brackets-curly-thin,768_512,10;phosphor-brackets-curly,832_512,10;phosphor-brackets-round-bold,896_512,10;phosphor-brackets-round-duotone,960_512,10;phosphor-brackets-round-fill,0_576,10;phosphor-brackets-round-light,64_576,10;phosphor-brackets-round-thin,128_576,10;phosphor-brackets-round,192_576,10;phosphor-brackets-square-bold,256_576,10;phosphor-brackets-square-duotone,320_576,10;phosphor-brackets-square-fill,384_576,10;phosphor-brackets-square-light,448_576,10;phosphor-brackets-square-thin,512_576,10;phosphor-brackets-square,576_576,10;phosphor-brain-bold,640_576,10;phosphor-brain-duotone,704_576,10;phosphor-brain-fill,768_576,10;phosphor-brain-light,832_576,10;phosphor-brain-thin,896_576,10;phosphor-brain,960_576,10;phosphor-brandy-bold,0_640,10;phosphor-brandy-duotone,64_640,10;phosphor-brandy-fill,128_640,10;phosphor-brandy-light,192_640,10;phosphor-brandy-thin,256_640,10;phosphor-brandy,320_640,10;phosphor-bread-bold,384_640,10;phosphor-bread-duotone,448_640,10;phosphor-bread-fill,512_640,10;phosphor-bread-light,576_640,10;phosphor-bread-thin,640_640,10;phosphor-bread,704_640,10;phosphor-bridge-bold,768_640,10;phosphor-bridge-duotone,832_640,10;phosphor-bridge-fill,896_640,10;phosphor-bridge-light,960_640,10;phosphor-bridge-thin,0_704,10;phosphor-bridge,64_704,10;phosphor-briefcase-bold,128_704,10;phosphor-briefcase-duotone,192_704,10;phosphor-briefcase-fill,256_704,10;phosphor-briefcase-light,320_704,10;phosphor-briefcase-metal-bold,384_704,10;phosphor-briefcase-metal-duotone,448_704,10;phosphor-briefcase-metal-fill,512_704,10;phosphor-briefcase-metal-light,576_704,10;phosphor-briefcase-metal-thin,640_704,10;phosphor-briefcase-metal,704_704,10;phosphor-briefcase-thin,768_704,10;phosphor-briefcase,832_704,10;phosphor-broadcast-bold,896_704,10;phosphor-broadcast-duotone,960_704,10;phosphor-broadcast-fill,0_768,10;phosphor-broadcast-light,64_768,10;phosphor-broadcast-thin,128_768,10;phosphor-broadcast,192_768,10;phosphor-broom-bold,256_768,10;phosphor-broom-duotone,320_768,10;phosphor-broom-fill,384_768,10;phosphor-broom-light,448_768,10;phosphor-broom-thin,512_768,10;phosphor-broom,576_768,10;phosphor-browser-bold,640_768,10;phosphor-browser-duotone,704_768,10;phosphor-browser-fill,768_768,10;phosphor-browser-light,832_768,10;phosphor-browser-thin,896_768,10;phosphor-browser,960_768,10;phosphor-browsers-bold,0_832,10;phosphor-browsers-duotone,64_832,10;phosphor-browsers-fill,128_832,10;phosphor-browsers-light,192_832,10;phosphor-browsers-thin,256_832,10;phosphor-browsers,320_832,10;phosphor-bug-beetle-bold,384_832,10;phosphor-bug-beetle-duotone,448_832,10;phosphor-bug-beetle-fill,512_832,10;phosphor-bug-beetle-light,576_832,10;phosphor-bug-beetle-thin,640_832,10;phosphor-bug-beetle,704_832,10;phosphor-bug-bold,768_832,10;phosphor-bug-droid-bold,832_832,10;phosphor-bug-droid-duotone,896_832,10;phosphor-bug-droid-fill,960_832,10;phosphor-bug-droid-light,0_896,10;phosphor-bug-droid-thin,64_896,10;phosphor-bug-droid,128_896,10;phosphor-bug-duotone,192_896,10;phosphor-bug-fill,256_896,10;phosphor-bug-light,320_896,10;phosphor-bug-thin,384_896,10;phosphor-bug,448_896,10;phosphor-building-apartment-bold,512_896,10;phosphor-building-apartment-duotone,576_896,10;phosphor-building-apartment-fill,640_896,10;phosphor-building-apartment-light,704_896,10;phosphor-building-apartment-thin,768_896,10;phosphor-building-apartment,832_896,10;phosphor-building-bold,896_896,10;phosphor-building-duotone,960_896,10;phosphor-building-fill,0_960,10;phosphor-building-light,64_960,10;phosphor-building-office-bold,128_960,10;phosphor-building-office-duotone,192_960,10;phosphor-building-office-fill,256_960,10;phosphor-building-office-light,320_960,10;phosphor-building-office-thin,384_960,10;phosphor-building-office,448_960,10;phosphor-building-thin,512_960,10;phosphor-building,576_960,10;phosphor-buildings-bold,640_960,10;phosphor-buildings-duotone,704_960,10;phosphor-buildings-fill,768_960,10;phosphor-buildings-light,832_960,10;phosphor-buildings-thin,896_960,10;phosphor-buildings,960_960,10;phosphor-bulldozer-bold,0_0,11;phosphor-bulldozer-duotone,64_0,11;phosphor-bulldozer-fill,128_0,11;phosphor-bulldozer-light,192_0,11;phosphor-bulldozer-thin,256_0,11;phosphor-bulldozer,320_0,11;phosphor-bus-bold,384_0,11;phosphor-bus-duotone,448_0,11;phosphor-bus-fill,512_0,11;phosphor-bus-light,576_0,11;phosphor-bus-thin,640_0,11;phosphor-bus,704_0,11;phosphor-butterfly-bold,768_0,11;phosphor-butterfly-duotone,832_0,11;phosphor-butterfly-fill,896_0,11;phosphor-butterfly-light,960_0,11;phosphor-butterfly-thin,0_64,11;phosphor-butterfly,64_64,11;phosphor-cable-car-bold,128_64,11;phosphor-cable-car-duotone,192_64,11;phosphor-cable-car-fill,256_64,11;phosphor-cable-car-light,320_64,11;phosphor-cable-car-thin,384_64,11;phosphor-cable-car,448_64,11;phosphor-cactus-bold,512_64,11;phosphor-cactus-duotone,576_64,11;phosphor-cactus-fill,640_64,11;phosphor-cactus-light,704_64,11;phosphor-cactus-thin,768_64,11;phosphor-cactus,832_64,11;phosphor-cake-bold,896_64,11;phosphor-cake-duotone,960_64,11;phosphor-cake-fill,0_128,11;phosphor-cake-light,64_128,11;phosphor-cake-thin,128_128,11;phosphor-cake,192_128,11;phosphor-calculator-bold,256_128,11;phosphor-calculator-duotone,320_128,11;phosphor-calculator-fill,384_128,11;phosphor-calculator-light,448_128,11;phosphor-calculator-thin,512_128,11;phosphor-calculator,576_128,11;phosphor-calendar-blank-bold,640_128,11;phosphor-calendar-blank-duotone,704_128,11;phosphor-calendar-blank-fill,768_128,11;phosphor-calendar-blank-light,832_128,11;phosphor-calendar-blank-thin,896_128,11;phosphor-calendar-blank,960_128,11;phosphor-calendar-bold,0_192,11;phosphor-calendar-check-bold,64_192,11;phosphor-calendar-check-duotone,128_192,11;phosphor-calendar-check-fill,192_192,11;phosphor-calendar-check-light,256_192,11;phosphor-calendar-check-thin,320_192,11;phosphor-calendar-check,384_192,11;phosphor-calendar-dot-bold,448_192,11;phosphor-calendar-dot-duotone,512_192,11;phosphor-calendar-dot-fill,576_192,11;phosphor-calendar-dot-light,640_192,11;phosphor-calendar-dot-thin,704_192,11;phosphor-calendar-dot,768_192,11;phosphor-calendar-dots-bold,832_192,11;phosphor-calendar-dots-duotone,896_192,11;phosphor-calendar-dots-fill,960_192,11;phosphor-calendar-dots-light,0_256,11;phosphor-calendar-dots-thin,64_256,11;phosphor-calendar-dots,128_256,11;phosphor-calendar-duotone,192_256,11;phosphor-calendar-fill,256_256,11;phosphor-calendar-heart-bold,320_256,11;phosphor-calendar-heart-duotone,384_256,11;phosphor-calendar-heart-fill,448_256,11;phosphor-calendar-heart-light,512_256,11;phosphor-calendar-heart-thin,576_256,11;phosphor-calendar-heart,640_256,11;phosphor-calendar-light,704_256,11;phosphor-calendar-minus-bold,768_256,11;phosphor-calendar-minus-duotone,832_256,11;phosphor-calendar-minus-fill,896_256,11;phosphor-calendar-minus-light,960_256,11;phosphor-calendar-minus-thin,0_320,11;phosphor-calendar-minus,64_320,11;phosphor-calendar-plus-bold,128_320,11;phosphor-calendar-plus-duotone,192_320,11;phosphor-calendar-plus-fill,256_320,11;phosphor-calendar-plus-light,320_320,11;phosphor-calendar-plus-thin,384_320,11;phosphor-calendar-plus,448_320,11;phosphor-calendar-slash-bold,512_320,11;phosphor-calendar-slash-duotone,576_320,11;phosphor-calendar-slash-fill,640_320,11;phosphor-calendar-slash-light,704_320,11;phosphor-calendar-slash-thin,768_320,11;phosphor-calendar-slash,832_320,11;phosphor-calendar-star-bold,896_320,11;phosphor-calendar-star-duotone,960_320,11;phosphor-calendar-star-fill,0_384,11;phosphor-calendar-star-light,64_384,11;phosphor-calendar-star-thin,128_384,11;phosphor-calendar-star,192_384,11;phosphor-calendar-thin,256_384,11;phosphor-calendar-x-bold,320_384,11;phosphor-calendar-x-duotone,384_384,11;phosphor-calendar-x-fill,448_384,11;phosphor-calendar-x-light,512_384,11;phosphor-calendar-x-thin,576_384,11;phosphor-calendar-x,640_384,11;phosphor-calendar,704_384,11;phosphor-call-bell-bold,768_384,11;phosphor-call-bell-duotone,832_384,11;phosphor-call-bell-fill,896_384,11;phosphor-call-bell-light,960_384,11;phosphor-call-bell-thin,0_448,11;phosphor-call-bell,64_448,11;phosphor-camera-bold,128_448,11;phosphor-camera-duotone,192_448,11;phosphor-camera-fill,256_448,11;phosphor-camera-light,320_448,11;phosphor-camera-plus-bold,384_448,11;phosphor-camera-plus-duotone,448_448,11;phosphor-camera-plus-fill,512_448,11;phosphor-camera-plus-light,576_448,11;phosphor-camera-plus-thin,640_448,11;phosphor-camera-plus,704_448,11;phosphor-camera-rotate-bold,768_448,11;phosphor-camera-rotate-duotone,832_448,11;phosphor-camera-rotate-fill,896_448,11;phosphor-camera-rotate-light,960_448,11;phosphor-camera-rotate-thin,0_512,11;phosphor-camera-rotate,64_512,11;phosphor-camera-slash-bold,128_512,11;phosphor-camera-slash-duotone,192_512,11;phosphor-camera-slash-fill,256_512,11;phosphor-camera-slash-light,320_512,11;phosphor-camera-slash-thin,384_512,11;phosphor-camera-slash,448_512,11;phosphor-camera-thin,512_512,11;phosphor-camera,576_512,11;phosphor-campfire-bold,640_512,11;phosphor-campfire-duotone,704_512,11;phosphor-campfire-fill,768_512,11;phosphor-campfire-light,832_512,11;phosphor-campfire-thin,896_512,11;phosphor-campfire,960_512,11;phosphor-car-battery-bold,0_576,11;phosphor-car-battery-duotone,64_576,11;phosphor-car-battery-fill,128_576,11;phosphor-car-battery-light,192_576,11;phosphor-car-battery-thin,256_576,11;phosphor-car-battery,320_576,11;phosphor-car-bold,384_576,11;phosphor-car-duotone,448_576,11;phosphor-car-fill,512_576,11;phosphor-car-light,576_576,11;phosphor-car-profile-bold,640_576,11;phosphor-car-profile-duotone,704_576,11;phosphor-car-profile-fill,768_576,11;phosphor-car-profile-light,832_576,11;phosphor-car-profile-thin,896_576,11;phosphor-car-profile,960_576,11;phosphor-car-simple-bold,0_640,11;phosphor-car-simple-duotone,64_640,11;phosphor-car-simple-fill,128_640,11;phosphor-car-simple-light,192_640,11;phosphor-car-simple-thin,256_640,11;phosphor-car-simple,320_640,11;phosphor-car-thin,384_640,11;phosphor-car,448_640,11;phosphor-cardholder-bold,512_640,11;phosphor-cardholder-duotone,576_640,11;phosphor-cardholder-fill,640_640,11;phosphor-cardholder-light,704_640,11;phosphor-cardholder-thin,768_640,11;phosphor-cardholder,832_640,11;phosphor-cards-bold,896_640,11;phosphor-cards-duotone,960_640,11;phosphor-cards-fill,0_704,11;phosphor-cards-light,64_704,11;phosphor-cards-thin,128_704,11;phosphor-cards-three-bold,192_704,11;phosphor-cards-three-duotone,256_704,11;phosphor-cards-three-fill,320_704,11;phosphor-cards-three-light,384_704,11;phosphor-cards-three-thin,448_704,11;phosphor-cards-three,512_704,11;phosphor-cards,576_704,11;phosphor-caret-circle-double-down-bold,640_704,11;phosphor-caret-circle-double-down-duotone,704_704,11;phosphor-caret-circle-double-down-fill,768_704,11;phosphor-caret-circle-double-down-light,832_704,11;phosphor-caret-circle-double-down-thin,896_704,11;phosphor-caret-circle-double-down,960_704,11;phosphor-caret-circle-double-left-bold,0_768,11;phosphor-caret-circle-double-left-duotone,64_768,11;phosphor-caret-circle-double-left-fill,128_768,11;phosphor-caret-circle-double-left-light,192_768,11;phosphor-caret-circle-double-left-thin,256_768,11;phosphor-caret-circle-double-left,320_768,11;phosphor-caret-circle-double-right-bold,384_768,11;phosphor-caret-circle-double-right-duotone,448_768,11;phosphor-caret-circle-double-right-fill,512_768,11;phosphor-caret-circle-double-right-light,576_768,11;phosphor-caret-circle-double-right-thin,640_768,11;phosphor-caret-circle-double-right,704_768,11;phosphor-caret-circle-double-up-bold,768_768,11;phosphor-caret-circle-double-up-duotone,832_768,11;phosphor-caret-circle-double-up-fill,896_768,11;phosphor-caret-circle-double-up-light,960_768,11;phosphor-caret-circle-double-up-thin,0_832,11;phosphor-caret-circle-double-up,64_832,11;phosphor-caret-circle-down-bold,128_832,11;phosphor-caret-circle-down-duotone,192_832,11;phosphor-caret-circle-down-fill,256_832,11;phosphor-caret-circle-down-light,320_832,11;phosphor-caret-circle-down-thin,384_832,11;phosphor-caret-circle-down,448_832,11;phosphor-caret-circle-left-bold,512_832,11;phosphor-caret-circle-left-duotone,576_832,11;phosphor-caret-circle-left-fill,640_832,11;phosphor-caret-circle-left-light,704_832,11;phosphor-caret-circle-left-thin,768_832,11;phosphor-caret-circle-left,832_832,11;phosphor-caret-circle-right-bold,896_832,11;phosphor-caret-circle-right-duotone,960_832,11;phosphor-caret-circle-right-fill,0_896,11;phosphor-caret-circle-right-light,64_896,11;phosphor-caret-circle-right-thin,128_896,11;phosphor-caret-circle-right,192_896,11;phosphor-caret-circle-up-bold,256_896,11;phosphor-caret-circle-up-down-bold,320_896,11;phosphor-caret-circle-up-down-duotone,384_896,11;phosphor-caret-circle-up-down-fill,448_896,11;phosphor-caret-circle-up-down-light,512_896,11;phosphor-caret-circle-up-down-thin,576_896,11;phosphor-caret-circle-up-down,640_896,11;phosphor-caret-circle-up-duotone,704_896,11;phosphor-caret-circle-up-fill,768_896,11;phosphor-caret-circle-up-light,832_896,11;phosphor-caret-circle-up-thin,896_896,11;phosphor-caret-circle-up,960_896,11;phosphor-caret-double-down-bold,0_960,11;phosphor-caret-double-down-duotone,64_960,11;phosphor-caret-double-down-fill,128_960,11;phosphor-caret-double-down-light,192_960,11;phosphor-caret-double-down-thin,256_960,11;phosphor-caret-double-down,320_960,11;phosphor-caret-double-left-bold,384_960,11;phosphor-caret-double-left-duotone,448_960,11;phosphor-caret-double-left-fill,512_960,11;phosphor-caret-double-left-light,576_960,11;phosphor-caret-double-left-thin,640_960,11;phosphor-caret-double-left,704_960,11;phosphor-caret-double-right-bold,768_960,11;phosphor-caret-double-right-duotone,832_960,11;phosphor-caret-double-right-fill,896_960,11;phosphor-caret-double-right-light,960_960,11;phosphor-caret-double-right-thin,0_0,12;phosphor-caret-double-right,64_0,12;phosphor-caret-double-up-bold,128_0,12;phosphor-caret-double-up-duotone,192_0,12;phosphor-caret-double-up-fill,256_0,12;phosphor-caret-double-up-light,320_0,12;phosphor-caret-double-up-thin,384_0,12;phosphor-caret-double-up,448_0,12;phosphor-caret-down-bold,512_0,12;phosphor-caret-down-duotone,576_0,12;phosphor-caret-down-fill,640_0,12;phosphor-caret-down-light,704_0,12;phosphor-caret-down-thin,768_0,12;phosphor-caret-down,832_0,12;phosphor-caret-left-bold,896_0,12;phosphor-caret-left-duotone,960_0,12;phosphor-caret-left-fill,0_64,12;phosphor-caret-left-light,64_64,12;phosphor-caret-left-thin,128_64,12;phosphor-caret-left,192_64,12;phosphor-caret-line-down-bold,256_64,12;phosphor-caret-line-down-duotone,320_64,12;phosphor-caret-line-down-fill,384_64,12;phosphor-caret-line-down-light,448_64,12;phosphor-caret-line-down-thin,512_64,12;phosphor-caret-line-down,576_64,12;phosphor-caret-line-left-bold,640_64,12;phosphor-caret-line-left-duotone,704_64,12;phosphor-caret-line-left-fill,768_64,12;phosphor-caret-line-left-light,832_64,12;phosphor-caret-line-left-thin,896_64,12;phosphor-caret-line-left,960_64,12;phosphor-caret-line-right-bold,0_128,12;phosphor-caret-line-right-duotone,64_128,12;phosphor-caret-line-right-fill,128_128,12;phosphor-caret-line-right-light,192_128,12;phosphor-caret-line-right-thin,256_128,12;phosphor-caret-line-right,320_128,12;phosphor-caret-line-up-bold,384_128,12;phosphor-caret-line-up-duotone,448_128,12;phosphor-caret-line-up-fill,512_128,12;phosphor-caret-line-up-light,576_128,12;phosphor-caret-line-up-thin,640_128,12;phosphor-caret-line-up,704_128,12;phosphor-caret-right-bold,768_128,12;phosphor-caret-right-duotone,832_128,12;phosphor-caret-right-fill,896_128,12;phosphor-caret-right-light,960_128,12;phosphor-caret-right-thin,0_192,12;phosphor-caret-right,64_192,12;phosphor-caret-up-bold,128_192,12;phosphor-caret-up-down-bold,192_192,12;phosphor-caret-up-down-duotone,256_192,12;phosphor-caret-up-down-fill,320_192,12;phosphor-caret-up-down-light,384_192,12;phosphor-caret-up-down-thin,448_192,12;phosphor-caret-up-down,512_192,12;phosphor-caret-up-duotone,576_192,12;phosphor-caret-up-fill,640_192,12;phosphor-caret-up-light,704_192,12;phosphor-caret-up-thin,768_192,12;phosphor-caret-up,832_192,12;phosphor-carrot-bold,896_192,12;phosphor-carrot-duotone,960_192,12;phosphor-carrot-fill,0_256,12;phosphor-carrot-light,64_256,12;phosphor-carrot-thin,128_256,12;phosphor-carrot,192_256,12;phosphor-cash-register-bold,256_256,12;phosphor-cash-register-duotone,320_256,12;phosphor-cash-register-fill,384_256,12;phosphor-cash-register-light,448_256,12;phosphor-cash-register-thin,512_256,12;phosphor-cash-register,576_256,12;phosphor-cassette-tape-bold,640_256,12;phosphor-cassette-tape-duotone,704_256,12;phosphor-cassette-tape-fill,768_256,12;phosphor-cassette-tape-light,832_256,12;phosphor-cassette-tape-thin,896_256,12;phosphor-cassette-tape,960_256,12;phosphor-castle-turret-bold,0_320,12;phosphor-castle-turret-duotone,64_320,12;phosphor-castle-turret-fill,128_320,12;phosphor-castle-turret-light,192_320,12;phosphor-castle-turret-thin,256_320,12;phosphor-castle-turret,320_320,12;phosphor-cat-bold,384_320,12;phosphor-cat-duotone,448_320,12;phosphor-cat-fill,512_320,12;phosphor-cat-light,576_320,12;phosphor-cat-thin,640_320,12;phosphor-cat,704_320,12;phosphor-cell-signal-full-bold,768_320,12;phosphor-cell-signal-full-duotone,832_320,12;phosphor-cell-signal-full-fill,896_320,12;phosphor-cell-signal-full-light,960_320,12;phosphor-cell-signal-full-thin,0_384,12;phosphor-cell-signal-full,64_384,12;phosphor-cell-signal-high-bold,128_384,12;phosphor-cell-signal-high-duotone,192_384,12;phosphor-cell-signal-high-fill,256_384,12;phosphor-cell-signal-high-light,320_384,12;phosphor-cell-signal-high-thin,384_384,12;phosphor-cell-signal-high,448_384,12;phosphor-cell-signal-low-bold,512_384,12;phosphor-cell-signal-low-duotone,576_384,12;phosphor-cell-signal-low-fill,640_384,12;phosphor-cell-signal-low-light,704_384,12;phosphor-cell-signal-low-thin,768_384,12;phosphor-cell-signal-low,832_384,12;phosphor-cell-signal-medium-bold,896_384,12;phosphor-cell-signal-medium-duotone,960_384,12;phosphor-cell-signal-medium-fill,0_448,12;phosphor-cell-signal-medium-light,64_448,12;phosphor-cell-signal-medium-thin,128_448,12;phosphor-cell-signal-medium,192_448,12;phosphor-cell-signal-none-bold,256_448,12;phosphor-cell-signal-none-duotone,320_448,12;phosphor-cell-signal-none-fill,384_448,12;phosphor-cell-signal-none-light,448_448,12;phosphor-cell-signal-none-thin,512_448,12;phosphor-cell-signal-none,576_448,12;phosphor-cell-signal-slash-bold,640_448,12;phosphor-cell-signal-slash-duotone,704_448,12;phosphor-cell-signal-slash-fill,768_448,12;phosphor-cell-signal-slash-light,832_448,12;phosphor-cell-signal-slash-thin,896_448,12;phosphor-cell-signal-slash,960_448,12;phosphor-cell-signal-x-bold,0_512,12;phosphor-cell-signal-x-duotone,64_512,12;phosphor-cell-signal-x-fill,128_512,12;phosphor-cell-signal-x-light,192_512,12;phosphor-cell-signal-x-thin,256_512,12;phosphor-cell-signal-x,320_512,12;phosphor-cell-tower-bold,384_512,12;phosphor-cell-tower-duotone,448_512,12;phosphor-cell-tower-fill,512_512,12;phosphor-cell-tower-light,576_512,12;phosphor-cell-tower-thin,640_512,12;phosphor-cell-tower,704_512,12;phosphor-certificate-bold,768_512,12;phosphor-certificate-duotone,832_512,12;phosphor-certificate-fill,896_512,12;phosphor-certificate-light,960_512,12;phosphor-certificate-thin,0_576,12;phosphor-certificate,64_576,12;phosphor-chair-bold,128_576,12;phosphor-chair-duotone,192_576,12;phosphor-chair-fill,256_576,12;phosphor-chair-light,320_576,12;phosphor-chair-thin,384_576,12;phosphor-chair,448_576,12;phosphor-chalkboard-bold,512_576,12;phosphor-chalkboard-duotone,576_576,12;phosphor-chalkboard-fill,640_576,12;phosphor-chalkboard-light,704_576,12;phosphor-chalkboard-simple-bold,768_576,12;phosphor-chalkboard-simple-duotone,832_576,12;phosphor-chalkboard-simple-fill,896_576,12;phosphor-chalkboard-simple-light,960_576,12;phosphor-chalkboard-simple-thin,0_640,12;phosphor-chalkboard-simple,64_640,12;phosphor-chalkboard-teacher-bold,128_640,12;phosphor-chalkboard-teacher-duotone,192_640,12;phosphor-chalkboard-teacher-fill,256_640,12;phosphor-chalkboard-teacher-light,320_640,12;phosphor-chalkboard-teacher-thin,384_640,12;phosphor-chalkboard-teacher,448_640,12;phosphor-chalkboard-thin,512_640,12;phosphor-chalkboard,576_640,12;phosphor-champagne-bold,640_640,12;phosphor-champagne-duotone,704_640,12;phosphor-champagne-fill,768_640,12;phosphor-champagne-light,832_640,12;phosphor-champagne-thin,896_640,12;phosphor-champagne,960_640,12;phosphor-charging-station-bold,0_704,12;phosphor-charging-station-duotone,64_704,12;phosphor-charging-station-fill,128_704,12;phosphor-charging-station-light,192_704,12;phosphor-charging-station-thin,256_704,12;phosphor-charging-station,320_704,12;phosphor-chart-bar-bold,384_704,12;phosphor-chart-bar-duotone,448_704,12;phosphor-chart-bar-fill,512_704,12;phosphor-chart-bar-horizontal-bold,576_704,12;phosphor-chart-bar-horizontal-duotone,640_704,12;phosphor-chart-bar-horizontal-fill,704_704,12;phosphor-chart-bar-horizontal-light,768_704,12;phosphor-chart-bar-horizontal-thin,832_704,12;phosphor-chart-bar-horizontal,896_704,12;phosphor-chart-bar-light,960_704,12;phosphor-chart-bar-thin,0_768,12;phosphor-chart-bar,64_768,12;phosphor-chart-donut-bold,128_768,12;phosphor-chart-donut-duotone,192_768,12;phosphor-chart-donut-fill,256_768,12;phosphor-chart-donut-light,320_768,12;phosphor-chart-donut-thin,384_768,12;phosphor-chart-donut,448_768,12;phosphor-chart-line-bold,512_768,12;phosphor-chart-line-down-bold,576_768,12;phosphor-chart-line-down-duotone,640_768,12;phosphor-chart-line-down-fill,704_768,12;phosphor-chart-line-down-light,768_768,12;phosphor-chart-line-down-thin,832_768,12;phosphor-chart-line-down,896_768,12;phosphor-chart-line-duotone,960_768,12;phosphor-chart-line-fill,0_832,12;phosphor-chart-line-light,64_832,12;phosphor-chart-line-thin,128_832,12;phosphor-chart-line-up-bold,192_832,12;phosphor-chart-line-up-duotone,256_832,12;phosphor-chart-line-up-fill,320_832,12;phosphor-chart-line-up-light,384_832,12;phosphor-chart-line-up-thin,448_832,12;phosphor-chart-line-up,512_832,12;phosphor-chart-line,576_832,12;phosphor-chart-pie-bold,640_832,12;phosphor-chart-pie-duotone,704_832,12;phosphor-chart-pie-fill,768_832,12;phosphor-chart-pie-light,832_832,12;phosphor-chart-pie-slice-bold,896_832,12;phosphor-chart-pie-slice-duotone,960_832,12;phosphor-chart-pie-slice-fill,0_896,12;phosphor-chart-pie-slice-light,64_896,12;phosphor-chart-pie-slice-thin,128_896,12;phosphor-chart-pie-slice,192_896,12;phosphor-chart-pie-thin,256_896,12;phosphor-chart-pie,320_896,12;phosphor-chart-polar-bold,384_896,12;phosphor-chart-polar-duotone,448_896,12;phosphor-chart-polar-fill,512_896,12;phosphor-chart-polar-light,576_896,12;phosphor-chart-polar-thin,640_896,12;phosphor-chart-polar,704_896,12;phosphor-chart-scatter-bold,768_896,12;phosphor-chart-scatter-duotone,832_896,12;phosphor-chart-scatter-fill,896_896,12;phosphor-chart-scatter-light,960_896,12;phosphor-chart-scatter-thin,0_960,12;phosphor-chart-scatter,64_960,12;phosphor-chat-bold,128_960,12;phosphor-chat-centered-bold,192_960,12;phosphor-chat-centered-dots-bold,256_960,12;phosphor-chat-centered-dots-duotone,320_960,12;phosphor-chat-centered-dots-fill,384_960,12;phosphor-chat-centered-dots-light,448_960,12;phosphor-chat-centered-dots-thin,512_960,12;phosphor-chat-centered-dots,576_960,12;phosphor-chat-centered-duotone,640_960,12;phosphor-chat-centered-fill,704_960,12;phosphor-chat-centered-light,768_960,12;phosphor-chat-centered-slash-bold,832_960,12;phosphor-chat-centered-slash-duotone,896_960,12;phosphor-chat-centered-slash-fill,960_960,12;phosphor-chat-centered-slash-light,0_0,13;phosphor-chat-centered-slash-thin,64_0,13;phosphor-chat-centered-slash,128_0,13;phosphor-chat-centered-text-bold,192_0,13;phosphor-chat-centered-text-duotone,256_0,13;phosphor-chat-centered-text-fill,320_0,13;phosphor-chat-centered-text-light,384_0,13;phosphor-chat-centered-text-thin,448_0,13;phosphor-chat-centered-text,512_0,13;phosphor-chat-centered-thin,576_0,13;phosphor-chat-centered,640_0,13;phosphor-chat-circle-bold,704_0,13;phosphor-chat-circle-dots-bold,768_0,13;phosphor-chat-circle-dots-duotone,832_0,13;phosphor-chat-circle-dots-fill,896_0,13;phosphor-chat-circle-dots-light,960_0,13;phosphor-chat-circle-dots-thin,0_64,13;phosphor-chat-circle-dots,64_64,13;phosphor-chat-circle-duotone,128_64,13;phosphor-chat-circle-fill,192_64,13;phosphor-chat-circle-light,256_64,13;phosphor-chat-circle-slash-bold,320_64,13;phosphor-chat-circle-slash-duotone,384_64,13;phosphor-chat-circle-slash-fill,448_64,13;phosphor-chat-circle-slash-light,512_64,13;phosphor-chat-circle-slash-thin,576_64,13;phosphor-chat-circle-slash,640_64,13;phosphor-chat-circle-text-bold,704_64,13;phosphor-chat-circle-text-duotone,768_64,13;phosphor-chat-circle-text-fill,832_64,13;phosphor-chat-circle-text-light,896_64,13;phosphor-chat-circle-text-thin,960_64,13;phosphor-chat-circle-text,0_128,13;phosphor-chat-circle-thin,64_128,13;phosphor-chat-circle,128_128,13;phosphor-chat-dots-bold,192_128,13;phosphor-chat-dots-duotone,256_128,13;phosphor-chat-dots-fill,320_128,13;phosphor-chat-dots-light,384_128,13;phosphor-chat-dots-thin,448_128,13;phosphor-chat-dots,512_128,13;phosphor-chat-duotone,576_128,13;phosphor-chat-fill,640_128,13;phosphor-chat-light,704_128,13;phosphor-chat-slash-bold,768_128,13;phosphor-chat-slash-duotone,832_128,13;phosphor-chat-slash-fill,896_128,13;phosphor-chat-slash-light,960_128,13;phosphor-chat-slash-thin,0_192,13;phosphor-chat-slash,64_192,13;phosphor-chat-teardrop-bold,128_192,13;phosphor-chat-teardrop-dots-bold,192_192,13;phosphor-chat-teardrop-dots-duotone,256_192,13;phosphor-chat-teardrop-dots-fill,320_192,13;phosphor-chat-teardrop-dots-light,384_192,13;phosphor-chat-teardrop-dots-thin,448_192,13;phosphor-chat-teardrop-dots,512_192,13;phosphor-chat-teardrop-duotone,576_192,13;phosphor-chat-teardrop-fill,640_192,13;phosphor-chat-teardrop-light,704_192,13;phosphor-chat-teardrop-slash-bold,768_192,13;phosphor-chat-teardrop-slash-duotone,832_192,13;phosphor-chat-teardrop-slash-fill,896_192,13;phosphor-chat-teardrop-slash-light,960_192,13;phosphor-chat-teardrop-slash-thin,0_256,13;phosphor-chat-teardrop-slash,64_256,13;phosphor-chat-teardrop-text-bold,128_256,13;phosphor-chat-teardrop-text-duotone,192_256,13;phosphor-chat-teardrop-text-fill,256_256,13;phosphor-chat-teardrop-text-light,320_256,13;phosphor-chat-teardrop-text-thin,384_256,13;phosphor-chat-teardrop-text,448_256,13;phosphor-chat-teardrop-thin,512_256,13;phosphor-chat-teardrop,576_256,13;phosphor-chat-text-bold,640_256,13;phosphor-chat-text-duotone,704_256,13;phosphor-chat-text-fill,768_256,13;phosphor-chat-text-light,832_256,13;phosphor-chat-text-thin,896_256,13;phosphor-chat-text,960_256,13;phosphor-chat-thin,0_320,13;phosphor-chat,64_320,13;phosphor-chats-bold,128_320,13;phosphor-chats-circle-bold,192_320,13;phosphor-chats-circle-duotone,256_320,13;phosphor-chats-circle-fill,320_320,13;phosphor-chats-circle-light,384_320,13;phosphor-chats-circle-thin,448_320,13;phosphor-chats-circle,512_320,13;phosphor-chats-duotone,576_320,13;phosphor-chats-fill,640_320,13;phosphor-chats-light,704_320,13;phosphor-chats-teardrop-bold,768_320,13;phosphor-chats-teardrop-duotone,832_320,13;phosphor-chats-teardrop-fill,896_320,13;phosphor-chats-teardrop-light,960_320,13;phosphor-chats-teardrop-thin,0_384,13;phosphor-chats-teardrop,64_384,13;phosphor-chats-thin,128_384,13;phosphor-chats,192_384,13;phosphor-check-bold,256_384,13;phosphor-check-circle-bold,320_384,13;phosphor-check-circle-duotone,384_384,13;phosphor-check-circle-fill,448_384,13;phosphor-check-circle-light,512_384,13;phosphor-check-circle-thin,576_384,13;phosphor-check-circle,640_384,13;phosphor-check-duotone,704_384,13;phosphor-check-fat-bold,768_384,13;phosphor-check-fat-duotone,832_384,13;phosphor-check-fat-fill,896_384,13;phosphor-check-fat-light,960_384,13;phosphor-check-fat-thin,0_448,13;phosphor-check-fat,64_448,13;phosphor-check-fill,128_448,13;phosphor-check-light,192_448,13;phosphor-check-square-bold,256_448,13;phosphor-check-square-duotone,320_448,13;phosphor-check-square-fill,384_448,13;phosphor-check-square-light,448_448,13;phosphor-check-square-offset-bold,512_448,13;phosphor-check-square-offset-duotone,576_448,13;phosphor-check-square-offset-fill,640_448,13;phosphor-check-square-offset-light,704_448,13;phosphor-check-square-offset-thin,768_448,13;phosphor-check-square-offset,832_448,13;phosphor-check-square-thin,896_448,13;phosphor-check-square,960_448,13;phosphor-check-thin,0_512,13;phosphor-check,64_512,13;phosphor-checkerboard-bold,128_512,13;phosphor-checkerboard-duotone,192_512,13;phosphor-checkerboard-fill,256_512,13;phosphor-checkerboard-light,320_512,13;phosphor-checkerboard-thin,384_512,13;phosphor-checkerboard,448_512,13;phosphor-checks-bold,512_512,13;phosphor-checks-duotone,576_512,13;phosphor-checks-fill,640_512,13;phosphor-checks-light,704_512,13;phosphor-checks-thin,768_512,13;phosphor-checks,832_512,13;phosphor-cheers-bold,896_512,13;phosphor-cheers-duotone,960_512,13;phosphor-cheers-fill,0_576,13;phosphor-cheers-light,64_576,13;phosphor-cheers-thin,128_576,13;phosphor-cheers,192_576,13;phosphor-cheese-bold,256_576,13;phosphor-cheese-duotone,320_576,13;phosphor-cheese-fill,384_576,13;phosphor-cheese-light,448_576,13;phosphor-cheese-thin,512_576,13;phosphor-cheese,576_576,13;phosphor-chef-hat-bold,640_576,13;phosphor-chef-hat-duotone,704_576,13;phosphor-chef-hat-fill,768_576,13;phosphor-chef-hat-light,832_576,13;phosphor-chef-hat-thin,896_576,13;phosphor-chef-hat,960_576,13;phosphor-cherries-bold,0_640,13;phosphor-cherries-duotone,64_640,13;phosphor-cherries-fill,128_640,13;phosphor-cherries-light,192_640,13;phosphor-cherries-thin,256_640,13;phosphor-cherries,320_640,13;phosphor-church-bold,384_640,13;phosphor-church-duotone,448_640,13;phosphor-church-fill,512_640,13;phosphor-church-light,576_640,13;phosphor-church-thin,640_640,13;phosphor-church,704_640,13;phosphor-cigarette-bold,768_640,13;phosphor-cigarette-duotone,832_640,13;phosphor-cigarette-fill,896_640,13;phosphor-cigarette-light,960_640,13;phosphor-cigarette-slash-bold,0_704,13;phosphor-cigarette-slash-duotone,64_704,13;phosphor-cigarette-slash-fill,128_704,13;phosphor-cigarette-slash-light,192_704,13;phosphor-cigarette-slash-thin,256_704,13;phosphor-cigarette-slash,320_704,13;phosphor-cigarette-thin,384_704,13;phosphor-cigarette,448_704,13;phosphor-circle-bold,512_704,13;phosphor-circle-dashed-bold,576_704,13;phosphor-circle-dashed-duotone,640_704,13;phosphor-circle-dashed-fill,704_704,13;phosphor-circle-dashed-light,768_704,13;phosphor-circle-dashed-thin,832_704,13;phosphor-circle-dashed,896_704,13;phosphor-circle-duotone,960_704,13;phosphor-circle-fill,0_768,13;phosphor-circle-half-bold,64_768,13;phosphor-circle-half-duotone,128_768,13;phosphor-circle-half-fill,192_768,13;phosphor-circle-half-light,256_768,13;phosphor-circle-half-thin,320_768,13;phosphor-circle-half-tilt-bold,384_768,13;phosphor-circle-half-tilt-duotone,448_768,13;phosphor-circle-half-tilt-fill,512_768,13;phosphor-circle-half-tilt-light,576_768,13;phosphor-circle-half-tilt-thin,640_768,13;phosphor-circle-half-tilt,704_768,13;phosphor-circle-half,768_768,13;phosphor-circle-light,832_768,13;phosphor-circle-notch-bold,896_768,13;phosphor-circle-notch-duotone,960_768,13;phosphor-circle-notch-fill,0_832,13;phosphor-circle-notch-light,64_832,13;phosphor-circle-notch-thin,128_832,13;phosphor-circle-notch,192_832,13;phosphor-circle-thin,256_832,13;phosphor-circle,320_832,13;phosphor-circles-four-bold,384_832,13;phosphor-circles-four-duotone,448_832,13;phosphor-circles-four-fill,512_832,13;phosphor-circles-four-light,576_832,13;phosphor-circles-four-thin,640_832,13;phosphor-circles-four,704_832,13;phosphor-circles-three-bold,768_832,13;phosphor-circles-three-duotone,832_832,13;phosphor-circles-three-fill,896_832,13;phosphor-circles-three-light,960_832,13;phosphor-circles-three-plus-bold,0_896,13;phosphor-circles-three-plus-duotone,64_896,13;phosphor-circles-three-plus-fill,128_896,13;phosphor-circles-three-plus-light,192_896,13;phosphor-circles-three-plus-thin,256_896,13;phosphor-circles-three-plus,320_896,13;phosphor-circles-three-thin,384_896,13;phosphor-circles-three,448_896,13;phosphor-circuitry-bold,512_896,13;phosphor-circuitry-duotone,576_896,13;phosphor-circuitry-fill,640_896,13;phosphor-circuitry-light,704_896,13;phosphor-circuitry-thin,768_896,13;phosphor-circuitry,832_896,13;phosphor-city-bold,896_896,13;phosphor-city-duotone,960_896,13;phosphor-city-fill,0_960,13;phosphor-city-light,64_960,13;phosphor-city-thin,128_960,13;phosphor-city,192_960,13;phosphor-clipboard-bold,256_960,13;phosphor-clipboard-duotone,320_960,13;phosphor-clipboard-fill,384_960,13;phosphor-clipboard-light,448_960,13;phosphor-clipboard-text-bold,512_960,13;phosphor-clipboard-text-duotone,576_960,13;phosphor-clipboard-text-fill,640_960,13;phosphor-clipboard-text-light,704_960,13;phosphor-clipboard-text-thin,768_960,13;phosphor-clipboard-text,832_960,13;phosphor-clipboard-thin,896_960,13;phosphor-clipboard,960_960,13;phosphor-clock-afternoon-bold,0_0,14;phosphor-clock-afternoon-duotone,64_0,14;phosphor-clock-afternoon-fill,128_0,14;phosphor-clock-afternoon-light,192_0,14;phosphor-clock-afternoon-thin,256_0,14;phosphor-clock-afternoon,320_0,14;phosphor-clock-bold,384_0,14;phosphor-clock-clockwise-bold,448_0,14;phosphor-clock-clockwise-duotone,512_0,14;phosphor-clock-clockwise-fill,576_0,14;phosphor-clock-clockwise-light,640_0,14;phosphor-clock-clockwise-thin,704_0,14;phosphor-clock-clockwise,768_0,14;phosphor-clock-countdown-bold,832_0,14;phosphor-clock-countdown-duotone,896_0,14;phosphor-clock-countdown-fill,960_0,14;phosphor-clock-countdown-light,0_64,14;phosphor-clock-countdown-thin,64_64,14;phosphor-clock-countdown,128_64,14;phosphor-clock-counter-clockwise-bold,192_64,14;phosphor-clock-counter-clockwise-duotone,256_64,14;phosphor-clock-counter-clockwise-fill,320_64,14;phosphor-clock-counter-clockwise-light,384_64,14;phosphor-clock-counter-clockwise-thin,448_64,14;phosphor-clock-counter-clockwise,512_64,14;phosphor-clock-duotone,576_64,14;phosphor-clock-fill,640_64,14;phosphor-clock-light,704_64,14;phosphor-clock-thin,768_64,14;phosphor-clock-user-bold,832_64,14;phosphor-clock-user-duotone,896_64,14;phosphor-clock-user-fill,960_64,14;phosphor-clock-user-light,0_128,14;phosphor-clock-user-thin,64_128,14;phosphor-clock-user,128_128,14;phosphor-clock,192_128,14;phosphor-closed-captioning-bold,256_128,14;phosphor-closed-captioning-duotone,320_128,14;phosphor-closed-captioning-fill,384_128,14;phosphor-closed-captioning-light,448_128,14;phosphor-closed-captioning-thin,512_128,14;phosphor-closed-captioning,576_128,14;phosphor-cloud-arrow-down-bold,640_128,14;phosphor-cloud-arrow-down-duotone,704_128,14;phosphor-cloud-arrow-down-fill,768_128,14;phosphor-cloud-arrow-down-light,832_128,14;phosphor-cloud-arrow-down-thin,896_128,14;phosphor-cloud-arrow-down,960_128,14;phosphor-cloud-arrow-up-bold,0_192,14;phosphor-cloud-arrow-up-duotone,64_192,14;phosphor-cloud-arrow-up-fill,128_192,14;phosphor-cloud-arrow-up-light,192_192,14;phosphor-cloud-arrow-up-thin,256_192,14;phosphor-cloud-arrow-up,320_192,14;phosphor-cloud-bold,384_192,14;phosphor-cloud-check-bold,448_192,14;phosphor-cloud-check-duotone,512_192,14;phosphor-cloud-check-fill,576_192,14;phosphor-cloud-check-light,640_192,14;phosphor-cloud-check-thin,704_192,14;phosphor-cloud-check,768_192,14;phosphor-cloud-duotone,832_192,14;phosphor-cloud-fill,896_192,14;phosphor-cloud-fog-bold,960_192,14;phosphor-cloud-fog-duotone,0_256,14;phosphor-cloud-fog-fill,64_256,14;phosphor-cloud-fog-light,128_256,14;phosphor-cloud-fog-thin,192_256,14;phosphor-cloud-fog,256_256,14;phosphor-cloud-light,320_256,14;phosphor-cloud-lightning-bold,384_256,14;phosphor-cloud-lightning-duotone,448_256,14;phosphor-cloud-lightning-fill,512_256,14;phosphor-cloud-lightning-light,576_256,14;phosphor-cloud-lightning-thin,640_256,14;phosphor-cloud-lightning,704_256,14;phosphor-cloud-moon-bold,768_256,14;phosphor-cloud-moon-duotone,832_256,14;phosphor-cloud-moon-fill,896_256,14;phosphor-cloud-moon-light,960_256,14;phosphor-cloud-moon-thin,0_320,14;phosphor-cloud-moon,64_320,14;phosphor-cloud-rain-bold,128_320,14;phosphor-cloud-rain-duotone,192_320,14;phosphor-cloud-rain-fill,256_320,14;phosphor-cloud-rain-light,320_320,14;phosphor-cloud-rain-thin,384_320,14;phosphor-cloud-rain,448_320,14;phosphor-cloud-slash-bold,512_320,14;phosphor-cloud-slash-duotone,576_320,14;phosphor-cloud-slash-fill,640_320,14;phosphor-cloud-slash-light,704_320,14;phosphor-cloud-slash-thin,768_320,14;phosphor-cloud-slash,832_320,14;phosphor-cloud-snow-bold,896_320,14;phosphor-cloud-snow-duotone,960_320,14;phosphor-cloud-snow-fill,0_384,14;phosphor-cloud-snow-light,64_384,14;phosphor-cloud-snow-thin,128_384,14;phosphor-cloud-snow,192_384,14;phosphor-cloud-sun-bold,256_384,14;phosphor-cloud-sun-duotone,320_384,14;phosphor-cloud-sun-fill,384_384,14;phosphor-cloud-sun-light,448_384,14;phosphor-cloud-sun-thin,512_384,14;phosphor-cloud-sun,576_384,14;phosphor-cloud-thin,640_384,14;phosphor-cloud-warning-bold,704_384,14;phosphor-cloud-warning-duotone,768_384,14;phosphor-cloud-warning-fill,832_384,14;phosphor-cloud-warning-light,896_384,14;phosphor-cloud-warning-thin,960_384,14;phosphor-cloud-warning,0_448,14;phosphor-cloud-x-bold,64_448,14;phosphor-cloud-x-duotone,128_448,14;phosphor-cloud-x-fill,192_448,14;phosphor-cloud-x-light,256_448,14;phosphor-cloud-x-thin,320_448,14;phosphor-cloud-x,384_448,14;phosphor-cloud,448_448,14;phosphor-clover-bold,512_448,14;phosphor-clover-duotone,576_448,14;phosphor-clover-fill,640_448,14;phosphor-clover-light,704_448,14;phosphor-clover-thin,768_448,14;phosphor-clover,832_448,14;phosphor-club-bold,896_448,14;phosphor-club-duotone,960_448,14;phosphor-club-fill,0_512,14;phosphor-club-light,64_512,14;phosphor-club-thin,128_512,14;phosphor-club,192_512,14;phosphor-coat-hanger-bold,256_512,14;phosphor-coat-hanger-duotone,320_512,14;phosphor-coat-hanger-fill,384_512,14;phosphor-coat-hanger-light,448_512,14;phosphor-coat-hanger-thin,512_512,14;phosphor-coat-hanger,576_512,14;phosphor-coda-logo-bold,640_512,14;phosphor-coda-logo-duotone,704_512,14;phosphor-coda-logo-fill,768_512,14;phosphor-coda-logo-light,832_512,14;phosphor-coda-logo-thin,896_512,14;phosphor-coda-logo,960_512,14;phosphor-code-block-bold,0_576,14;phosphor-code-block-duotone,64_576,14;phosphor-code-block-fill,128_576,14;phosphor-code-block-light,192_576,14;phosphor-code-block-thin,256_576,14;phosphor-code-block,320_576,14;phosphor-code-bold,384_576,14;phosphor-code-duotone,448_576,14;phosphor-code-fill,512_576,14;phosphor-code-light,576_576,14;phosphor-code-simple-bold,640_576,14;phosphor-code-simple-duotone,704_576,14;phosphor-code-simple-fill,768_576,14;phosphor-code-simple-light,832_576,14;phosphor-code-simple-thin,896_576,14;phosphor-code-simple,960_576,14;phosphor-code-thin,0_640,14;phosphor-code,64_640,14;phosphor-codepen-logo-bold,128_640,14;phosphor-codepen-logo-duotone,192_640,14;phosphor-codepen-logo-fill,256_640,14;phosphor-codepen-logo-light,320_640,14;phosphor-codepen-logo-thin,384_640,14;phosphor-codepen-logo,448_640,14;phosphor-codesandbox-logo-bold,512_640,14;phosphor-codesandbox-logo-duotone,576_640,14;phosphor-codesandbox-logo-fill,640_640,14;phosphor-codesandbox-logo-light,704_640,14;phosphor-codesandbox-logo-thin,768_640,14;phosphor-codesandbox-logo,832_640,14;phosphor-coffee-bean-bold,896_640,14;phosphor-coffee-bean-duotone,960_640,14;phosphor-coffee-bean-fill,0_704,14;phosphor-coffee-bean-light,64_704,14;phosphor-coffee-bean-thin,128_704,14;phosphor-coffee-bean,192_704,14;phosphor-coffee-bold,256_704,14;phosphor-coffee-duotone,320_704,14;phosphor-coffee-fill,384_704,14;phosphor-coffee-light,448_704,14;phosphor-coffee-thin,512_704,14;phosphor-coffee,576_704,14;phosphor-coin-bold,640_704,14;phosphor-coin-duotone,704_704,14;phosphor-coin-fill,768_704,14;phosphor-coin-light,832_704,14;phosphor-coin-thin,896_704,14;phosphor-coin-vertical-bold,960_704,14;phosphor-coin-vertical-duotone,0_768,14;phosphor-coin-vertical-fill,64_768,14;phosphor-coin-vertical-light,128_768,14;phosphor-coin-vertical-thin,192_768,14;phosphor-coin-vertical,256_768,14;phosphor-coin,320_768,14;phosphor-coins-bold,384_768,14;phosphor-coins-duotone,448_768,14;phosphor-coins-fill,512_768,14;phosphor-coins-light,576_768,14;phosphor-coins-thin,640_768,14;phosphor-coins,704_768,14;phosphor-columns-bold,768_768,14;phosphor-columns-duotone,832_768,14;phosphor-columns-fill,896_768,14;phosphor-columns-light,960_768,14;phosphor-columns-plus-left-bold,0_832,14;phosphor-columns-plus-left-duotone,64_832,14;phosphor-columns-plus-left-fill,128_832,14;phosphor-columns-plus-left-light,192_832,14;phosphor-columns-plus-left-thin,256_832,14;phosphor-columns-plus-left,320_832,14;phosphor-columns-plus-right-bold,384_832,14;phosphor-columns-plus-right-duotone,448_832,14;phosphor-columns-plus-right-fill,512_832,14;phosphor-columns-plus-right-light,576_832,14;phosphor-columns-plus-right-thin,640_832,14;phosphor-columns-plus-right,704_832,14;phosphor-columns-thin,768_832,14;phosphor-columns,832_832,14;phosphor-command-bold,896_832,14;phosphor-command-duotone,960_832,14;phosphor-command-fill,0_896,14;phosphor-command-light,64_896,14;phosphor-command-thin,128_896,14;phosphor-command,192_896,14;phosphor-compass-bold,256_896,14;phosphor-compass-duotone,320_896,14;phosphor-compass-fill,384_896,14;phosphor-compass-light,448_896,14;phosphor-compass-rose-bold,512_896,14;phosphor-compass-rose-duotone,576_896,14;phosphor-compass-rose-fill,640_896,14;phosphor-compass-rose-light,704_896,14;phosphor-compass-rose-thin,768_896,14;phosphor-compass-rose,832_896,14;phosphor-compass-thin,896_896,14;phosphor-compass-tool-bold,960_896,14;phosphor-compass-tool-duotone,0_960,14;phosphor-compass-tool-fill,64_960,14;phosphor-compass-tool-light,128_960,14;phosphor-compass-tool-thin,192_960,14;phosphor-compass-tool,256_960,14;phosphor-compass,320_960,14;phosphor-computer-tower-bold,384_960,14;phosphor-computer-tower-duotone,448_960,14;phosphor-computer-tower-fill,512_960,14;phosphor-computer-tower-light,576_960,14;phosphor-computer-tower-thin,640_960,14;phosphor-computer-tower,704_960,14;phosphor-confetti-bold,768_960,14;phosphor-confetti-duotone,832_960,14;phosphor-confetti-fill,896_960,14;phosphor-confetti-light,960_960,14;phosphor-confetti-thin,0_0,15;phosphor-confetti,64_0,15;phosphor-contactless-payment-bold,128_0,15;phosphor-contactless-payment-duotone,192_0,15;phosphor-contactless-payment-fill,256_0,15;phosphor-contactless-payment-light,320_0,15;phosphor-contactless-payment-thin,384_0,15;phosphor-contactless-payment,448_0,15;phosphor-control-bold,512_0,15;phosphor-control-duotone,576_0,15;phosphor-control-fill,640_0,15;phosphor-control-light,704_0,15;phosphor-control-thin,768_0,15;phosphor-control,832_0,15;phosphor-cookie-bold,896_0,15;phosphor-cookie-duotone,960_0,15;phosphor-cookie-fill,0_64,15;phosphor-cookie-light,64_64,15;phosphor-cookie-thin,128_64,15;phosphor-cookie,192_64,15;phosphor-cooking-pot-bold,256_64,15;phosphor-cooking-pot-duotone,320_64,15;phosphor-cooking-pot-fill,384_64,15;phosphor-cooking-pot-light,448_64,15;phosphor-cooking-pot-thin,512_64,15;phosphor-cooking-pot,576_64,15;phosphor-copy-bold,640_64,15;phosphor-copy-duotone,704_64,15;phosphor-copy-fill,768_64,15;phosphor-copy-light,832_64,15;phosphor-copy-simple-bold,896_64,15;phosphor-copy-simple-duotone,960_64,15;phosphor-copy-simple-fill,0_128,15;phosphor-copy-simple-light,64_128,15;phosphor-copy-simple-thin,128_128,15;phosphor-copy-simple,192_128,15;phosphor-copy-thin,256_128,15;phosphor-copy,320_128,15;phosphor-copyleft-bold,384_128,15;phosphor-copyleft-duotone,448_128,15;phosphor-copyleft-fill,512_128,15;phosphor-copyleft-light,576_128,15;phosphor-copyleft-thin,640_128,15;phosphor-copyleft,704_128,15;phosphor-copyright-bold,768_128,15;phosphor-copyright-duotone,832_128,15;phosphor-copyright-fill,896_128,15;phosphor-copyright-light,960_128,15;phosphor-copyright-thin,0_192,15;phosphor-copyright,64_192,15;phosphor-corners-in-bold,128_192,15;phosphor-corners-in-duotone,192_192,15;phosphor-corners-in-fill,256_192,15;phosphor-corners-in-light,320_192,15;phosphor-corners-in-thin,384_192,15;phosphor-corners-in,448_192,15;phosphor-corners-out-bold,512_192,15;phosphor-corners-out-duotone,576_192,15;phosphor-corners-out-fill,640_192,15;phosphor-corners-out-light,704_192,15;phosphor-corners-out-thin,768_192,15;phosphor-corners-out,832_192,15;phosphor-couch-bold,896_192,15;phosphor-couch-duotone,960_192,15;phosphor-couch-fill,0_256,15;phosphor-couch-light,64_256,15;phosphor-couch-thin,128_256,15;phosphor-couch,192_256,15;phosphor-court-basketball-bold,256_256,15;phosphor-court-basketball-duotone,320_256,15;phosphor-court-basketball-fill,384_256,15;phosphor-court-basketball-light,448_256,15;phosphor-court-basketball-thin,512_256,15;phosphor-court-basketball,576_256,15;phosphor-cow-bold,640_256,15;phosphor-cow-duotone,704_256,15;phosphor-cow-fill,768_256,15;phosphor-cow-light,832_256,15;phosphor-cow-thin,896_256,15;phosphor-cow,960_256,15;phosphor-cowboy-hat-bold,0_320,15;phosphor-cowboy-hat-duotone,64_320,15;phosphor-cowboy-hat-fill,128_320,15;phosphor-cowboy-hat-light,192_320,15;phosphor-cowboy-hat-thin,256_320,15;phosphor-cowboy-hat,320_320,15;phosphor-cpu-bold,384_320,15;phosphor-cpu-duotone,448_320,15;phosphor-cpu-fill,512_320,15;phosphor-cpu-light,576_320,15;phosphor-cpu-thin,640_320,15;phosphor-cpu,704_320,15;phosphor-crane-bold,768_320,15;phosphor-crane-duotone,832_320,15;phosphor-crane-fill,896_320,15;phosphor-crane-light,960_320,15;phosphor-crane-thin,0_384,15;phosphor-crane-tower-bold,64_384,15;phosphor-crane-tower-duotone,128_384,15;phosphor-crane-tower-fill,192_384,15;phosphor-crane-tower-light,256_384,15;phosphor-crane-tower-thin,320_384,15;phosphor-crane-tower,384_384,15;phosphor-crane,448_384,15;phosphor-credit-card-bold,512_384,15;phosphor-credit-card-duotone,576_384,15;phosphor-credit-card-fill,640_384,15;phosphor-credit-card-light,704_384,15;phosphor-credit-card-thin,768_384,15;phosphor-credit-card,832_384,15;phosphor-cricket-bold,896_384,15;phosphor-cricket-duotone,960_384,15;phosphor-cricket-fill,0_448,15;phosphor-cricket-light,64_448,15;phosphor-cricket-thin,128_448,15;phosphor-cricket,192_448,15;phosphor-crop-bold,256_448,15;phosphor-crop-duotone,320_448,15;phosphor-crop-fill,384_448,15;phosphor-crop-light,448_448,15;phosphor-crop-thin,512_448,15;phosphor-crop,576_448,15;phosphor-cross-bold,640_448,15;phosphor-cross-duotone,704_448,15;phosphor-cross-fill,768_448,15;phosphor-cross-light,832_448,15;phosphor-cross-thin,896_448,15;phosphor-cross,960_448,15;phosphor-crosshair-bold,0_512,15;phosphor-crosshair-duotone,64_512,15;phosphor-crosshair-fill,128_512,15;phosphor-crosshair-light,192_512,15;phosphor-crosshair-simple-bold,256_512,15;phosphor-crosshair-simple-duotone,320_512,15;phosphor-crosshair-simple-fill,384_512,15;phosphor-crosshair-simple-light,448_512,15;phosphor-crosshair-simple-thin,512_512,15;phosphor-crosshair-simple,576_512,15;phosphor-crosshair-thin,640_512,15;phosphor-crosshair,704_512,15;phosphor-crown-bold,768_512,15;phosphor-crown-cross-bold,832_512,15;phosphor-crown-cross-duotone,896_512,15;phosphor-crown-cross-fill,960_512,15;phosphor-crown-cross-light,0_576,15;phosphor-crown-cross-thin,64_576,15;phosphor-crown-cross,128_576,15;phosphor-crown-duotone,192_576,15;phosphor-crown-fill,256_576,15;phosphor-crown-light,320_576,15;phosphor-crown-simple-bold,384_576,15;phosphor-crown-simple-duotone,448_576,15;phosphor-crown-simple-fill,512_576,15;phosphor-crown-simple-light,576_576,15;phosphor-crown-simple-thin,640_576,15;phosphor-crown-simple,704_576,15;phosphor-crown-thin,768_576,15;phosphor-crown,832_576,15;phosphor-cube-bold,896_576,15;phosphor-cube-duotone,960_576,15;phosphor-cube-fill,0_640,15;phosphor-cube-focus-bold,64_640,15;phosphor-cube-focus-duotone,128_640,15;phosphor-cube-focus-fill,192_640,15;phosphor-cube-focus-light,256_640,15;phosphor-cube-focus-thin,320_640,15;phosphor-cube-focus,384_640,15;phosphor-cube-light,448_640,15;phosphor-cube-thin,512_640,15;phosphor-cube-transparent-bold,576_640,15;phosphor-cube-transparent-duotone,640_640,15;phosphor-cube-transparent-fill,704_640,15;phosphor-cube-transparent-light,768_640,15;phosphor-cube-transparent-thin,832_640,15;phosphor-cube-transparent,896_640,15;phosphor-cube,960_640,15;phosphor-currency-btc-bold,0_704,15;phosphor-currency-btc-duotone,64_704,15;phosphor-currency-btc-fill,128_704,15;phosphor-currency-btc-light,192_704,15;phosphor-currency-btc-thin,256_704,15;phosphor-currency-btc,320_704,15;phosphor-currency-circle-dollar-bold,384_704,15;phosphor-currency-circle-dollar-duotone,448_704,15;phosphor-currency-circle-dollar-fill,512_704,15;phosphor-currency-circle-dollar-light,576_704,15;phosphor-currency-circle-dollar-thin,640_704,15;phosphor-currency-circle-dollar,704_704,15;phosphor-currency-cny-bold,768_704,15;phosphor-currency-cny-duotone,832_704,15;phosphor-currency-cny-fill,896_704,15;phosphor-currency-cny-light,960_704,15;phosphor-currency-cny-thin,0_768,15;phosphor-currency-cny,64_768,15;phosphor-currency-dollar-bold,128_768,15;phosphor-currency-dollar-duotone,192_768,15;phosphor-currency-dollar-fill,256_768,15;phosphor-currency-dollar-light,320_768,15;phosphor-currency-dollar-simple-bold,384_768,15;phosphor-currency-dollar-simple-duotone,448_768,15;phosphor-currency-dollar-simple-fill,512_768,15;phosphor-currency-dollar-simple-light,576_768,15;phosphor-currency-dollar-simple-thin,640_768,15;phosphor-currency-dollar-simple,704_768,15;phosphor-currency-dollar-thin,768_768,15;phosphor-currency-dollar,832_768,15;phosphor-currency-eth-bold,896_768,15;phosphor-currency-eth-duotone,960_768,15;phosphor-currency-eth-fill,0_832,15;phosphor-currency-eth-light,64_832,15;phosphor-currency-eth-thin,128_832,15;phosphor-currency-eth,192_832,15;phosphor-currency-eur-bold,256_832,15;phosphor-currency-eur-duotone,320_832,15;phosphor-currency-eur-fill,384_832,15;phosphor-currency-eur-light,448_832,15;phosphor-currency-eur-thin,512_832,15;phosphor-currency-eur,576_832,15;phosphor-currency-gbp-bold,640_832,15;phosphor-currency-gbp-duotone,704_832,15;phosphor-currency-gbp-fill,768_832,15;phosphor-currency-gbp-light,832_832,15;phosphor-currency-gbp-thin,896_832,15;phosphor-currency-gbp,960_832,15;phosphor-currency-inr-bold,0_896,15;phosphor-currency-inr-duotone,64_896,15;phosphor-currency-inr-fill,128_896,15;phosphor-currency-inr-light,192_896,15;phosphor-currency-inr-thin,256_896,15;phosphor-currency-inr,320_896,15;phosphor-currency-jpy-bold,384_896,15;phosphor-currency-jpy-duotone,448_896,15;phosphor-currency-jpy-fill,512_896,15;phosphor-currency-jpy-light,576_896,15;phosphor-currency-jpy-thin,640_896,15;phosphor-currency-jpy,704_896,15;phosphor-currency-krw-bold,768_896,15;phosphor-currency-krw-duotone,832_896,15;phosphor-currency-krw-fill,896_896,15;phosphor-currency-krw-light,960_896,15;phosphor-currency-krw-thin,0_960,15;phosphor-currency-krw,64_960,15;phosphor-currency-kzt-bold,128_960,15;phosphor-currency-kzt-duotone,192_960,15;phosphor-currency-kzt-fill,256_960,15;phosphor-currency-kzt-light,320_960,15;phosphor-currency-kzt-thin,384_960,15;phosphor-currency-kzt,448_960,15;phosphor-currency-ngn-bold,512_960,15;phosphor-currency-ngn-duotone,576_960,15;phosphor-currency-ngn-fill,640_960,15;phosphor-currency-ngn-light,704_960,15;phosphor-currency-ngn-thin,768_960,15;phosphor-currency-ngn,832_960,15;phosphor-currency-rub-bold,896_960,15;phosphor-currency-rub-duotone,960_960,15;phosphor-currency-rub-fill,0_0,16;phosphor-currency-rub-light,64_0,16;phosphor-currency-rub-thin,128_0,16;phosphor-currency-rub,192_0,16;phosphor-cursor-bold,256_0,16;phosphor-cursor-click-bold,320_0,16;phosphor-cursor-click-duotone,384_0,16;phosphor-cursor-click-fill,448_0,16;phosphor-cursor-click-light,512_0,16;phosphor-cursor-click-thin,576_0,16;phosphor-cursor-click,640_0,16;phosphor-cursor-duotone,704_0,16;phosphor-cursor-fill,768_0,16;phosphor-cursor-light,832_0,16;phosphor-cursor-text-bold,896_0,16;phosphor-cursor-text-duotone,960_0,16;phosphor-cursor-text-fill,0_64,16;phosphor-cursor-text-light,64_64,16;phosphor-cursor-text-thin,128_64,16;phosphor-cursor-text,192_64,16;phosphor-cursor-thin,256_64,16;phosphor-cursor,320_64,16;phosphor-cylinder-bold,384_64,16;phosphor-cylinder-duotone,448_64,16;phosphor-cylinder-fill,512_64,16;phosphor-cylinder-light,576_64,16;phosphor-cylinder-thin,640_64,16;phosphor-cylinder,704_64,16;phosphor-database-bold,768_64,16;phosphor-database-duotone,832_64,16;phosphor-database-fill,896_64,16;phosphor-database-light,960_64,16;phosphor-database-thin,0_128,16;phosphor-database,64_128,16;phosphor-desk-bold,128_128,16;phosphor-desk-duotone,192_128,16;phosphor-desk-fill,256_128,16;phosphor-desk-light,320_128,16;phosphor-desk-thin,384_128,16;phosphor-desk,448_128,16;phosphor-desktop-bold,512_128,16;phosphor-desktop-duotone,576_128,16;phosphor-desktop-fill,640_128,16;phosphor-desktop-light,704_128,16;phosphor-desktop-thin,768_128,16;phosphor-desktop-tower-bold,832_128,16;phosphor-desktop-tower-duotone,896_128,16;phosphor-desktop-tower-fill,960_128,16;phosphor-desktop-tower-light,0_192,16;phosphor-desktop-tower-thin,64_192,16;phosphor-desktop-tower,128_192,16;phosphor-desktop,192_192,16;phosphor-detective-bold,256_192,16;phosphor-detective-duotone,320_192,16;phosphor-detective-fill,384_192,16;phosphor-detective-light,448_192,16;phosphor-detective-thin,512_192,16;phosphor-detective,576_192,16;phosphor-dev-to-logo-bold,640_192,16;phosphor-dev-to-logo-duotone,704_192,16;phosphor-dev-to-logo-fill,768_192,16;phosphor-dev-to-logo-light,832_192,16;phosphor-dev-to-logo-thin,896_192,16;phosphor-dev-to-logo,960_192,16;phosphor-device-mobile-bold,0_256,16;phosphor-device-mobile-camera-bold,64_256,16;phosphor-device-mobile-camera-duotone,128_256,16;phosphor-device-mobile-camera-fill,192_256,16;phosphor-device-mobile-camera-light,256_256,16;phosphor-device-mobile-camera-thin,320_256,16;phosphor-device-mobile-camera,384_256,16;phosphor-device-mobile-duotone,448_256,16;phosphor-device-mobile-fill,512_256,16;phosphor-device-mobile-light,576_256,16;phosphor-device-mobile-slash-bold,640_256,16;phosphor-device-mobile-slash-duotone,704_256,16;phosphor-device-mobile-slash-fill,768_256,16;phosphor-device-mobile-slash-light,832_256,16;phosphor-device-mobile-slash-thin,896_256,16;phosphor-device-mobile-slash,960_256,16;phosphor-device-mobile-speaker-bold,0_320,16;phosphor-device-mobile-speaker-duotone,64_320,16;phosphor-device-mobile-speaker-fill,128_320,16;phosphor-device-mobile-speaker-light,192_320,16;phosphor-device-mobile-speaker-thin,256_320,16;phosphor-device-mobile-speaker,320_320,16;phosphor-device-mobile-thin,384_320,16;phosphor-device-mobile,448_320,16;phosphor-device-rotate-bold,512_320,16;phosphor-device-rotate-duotone,576_320,16;phosphor-device-rotate-fill,640_320,16;phosphor-device-rotate-light,704_320,16;phosphor-device-rotate-thin,768_320,16;phosphor-device-rotate,832_320,16;phosphor-device-tablet-bold,896_320,16;phosphor-device-tablet-camera-bold,960_320,16;phosphor-device-tablet-camera-duotone,0_384,16;phosphor-device-tablet-camera-fill,64_384,16;phosphor-device-tablet-camera-light,128_384,16;phosphor-device-tablet-camera-thin,192_384,16;phosphor-device-tablet-camera,256_384,16;phosphor-device-tablet-duotone,320_384,16;phosphor-device-tablet-fill,384_384,16;phosphor-device-tablet-light,448_384,16;phosphor-device-tablet-speaker-bold,512_384,16;phosphor-device-tablet-speaker-duotone,576_384,16;phosphor-device-tablet-speaker-fill,640_384,16;phosphor-device-tablet-speaker-light,704_384,16;phosphor-device-tablet-speaker-thin,768_384,16;phosphor-device-tablet-speaker,832_384,16;phosphor-device-tablet-thin,896_384,16;phosphor-device-tablet,960_384,16;phosphor-devices-bold,0_448,16;phosphor-devices-duotone,64_448,16;phosphor-devices-fill,128_448,16;phosphor-devices-light,192_448,16;phosphor-devices-thin,256_448,16;phosphor-devices,320_448,16;phosphor-diamond-bold,384_448,16;phosphor-diamond-duotone,448_448,16;phosphor-diamond-fill,512_448,16;phosphor-diamond-light,576_448,16;phosphor-diamond-thin,640_448,16;phosphor-diamond,704_448,16;phosphor-diamonds-four-bold,768_448,16;phosphor-diamonds-four-duotone,832_448,16;phosphor-diamonds-four-fill,896_448,16;phosphor-diamonds-four-light,960_448,16;phosphor-diamonds-four-thin,0_512,16;phosphor-diamonds-four,64_512,16;phosphor-dice-five-bold,128_512,16;phosphor-dice-five-duotone,192_512,16;phosphor-dice-five-fill,256_512,16;phosphor-dice-five-light,320_512,16;phosphor-dice-five-thin,384_512,16;phosphor-dice-five,448_512,16;phosphor-dice-four-bold,512_512,16;phosphor-dice-four-duotone,576_512,16;phosphor-dice-four-fill,640_512,16;phosphor-dice-four-light,704_512,16;phosphor-dice-four-thin,768_512,16;phosphor-dice-four,832_512,16;phosphor-dice-one-bold,896_512,16;phosphor-dice-one-duotone,960_512,16;phosphor-dice-one-fill,0_576,16;phosphor-dice-one-light,64_576,16;phosphor-dice-one-thin,128_576,16;phosphor-dice-one,192_576,16;phosphor-dice-six-bold,256_576,16;phosphor-dice-six-duotone,320_576,16;phosphor-dice-six-fill,384_576,16;phosphor-dice-six-light,448_576,16;phosphor-dice-six-thin,512_576,16;phosphor-dice-six,576_576,16;phosphor-dice-three-bold,640_576,16;phosphor-dice-three-duotone,704_576,16;phosphor-dice-three-fill,768_576,16;phosphor-dice-three-light,832_576,16;phosphor-dice-three-thin,896_576,16;phosphor-dice-three,960_576,16;phosphor-dice-two-bold,0_640,16;phosphor-dice-two-duotone,64_640,16;phosphor-dice-two-fill,128_640,16;phosphor-dice-two-light,192_640,16;phosphor-dice-two-thin,256_640,16;phosphor-dice-two,320_640,16;phosphor-disc-bold,384_640,16;phosphor-disc-duotone,448_640,16;phosphor-disc-fill,512_640,16;phosphor-disc-light,576_640,16;phosphor-disc-thin,640_640,16;phosphor-disc,704_640,16;phosphor-disco-ball-bold,768_640,16;phosphor-disco-ball-duotone,832_640,16;phosphor-disco-ball-fill,896_640,16;phosphor-disco-ball-light,960_640,16;phosphor-disco-ball-thin,0_704,16;phosphor-disco-ball,64_704,16;phosphor-discord-logo-bold,128_704,16;phosphor-discord-logo-duotone,192_704,16;phosphor-discord-logo-fill,256_704,16;phosphor-discord-logo-light,320_704,16;phosphor-discord-logo-thin,384_704,16;phosphor-discord-logo,448_704,16;phosphor-divide-bold,512_704,16;phosphor-divide-duotone,576_704,16;phosphor-divide-fill,640_704,16;phosphor-divide-light,704_704,16;phosphor-divide-thin,768_704,16;phosphor-divide,832_704,16;phosphor-dna-bold,896_704,16;phosphor-dna-duotone,960_704,16;phosphor-dna-fill,0_768,16;phosphor-dna-light,64_768,16;phosphor-dna-thin,128_768,16;phosphor-dna,192_768,16;phosphor-dog-bold,256_768,16;phosphor-dog-duotone,320_768,16;phosphor-dog-fill,384_768,16;phosphor-dog-light,448_768,16;phosphor-dog-thin,512_768,16;phosphor-dog,576_768,16;phosphor-door-bold,640_768,16;phosphor-door-duotone,704_768,16;phosphor-door-fill,768_768,16;phosphor-door-light,832_768,16;phosphor-door-open-bold,896_768,16;phosphor-door-open-duotone,960_768,16;phosphor-door-open-fill,0_832,16;phosphor-door-open-light,64_832,16;phosphor-door-open-thin,128_832,16;phosphor-door-open,192_832,16;phosphor-door-thin,256_832,16;phosphor-door,320_832,16;phosphor-dot-bold,384_832,16;phosphor-dot-duotone,448_832,16;phosphor-dot-fill,512_832,16;phosphor-dot-light,576_832,16;phosphor-dot-outline-bold,640_832,16;phosphor-dot-outline-duotone,704_832,16;phosphor-dot-outline-fill,768_832,16;phosphor-dot-outline-light,832_832,16;phosphor-dot-outline-thin,896_832,16;phosphor-dot-outline,960_832,16;phosphor-dot-thin,0_896,16;phosphor-dot,64_896,16;phosphor-dots-nine-bold,128_896,16;phosphor-dots-nine-duotone,192_896,16;phosphor-dots-nine-fill,256_896,16;phosphor-dots-nine-light,320_896,16;phosphor-dots-nine-thin,384_896,16;phosphor-dots-nine,448_896,16;phosphor-dots-six-bold,512_896,16;phosphor-dots-six-duotone,576_896,16;phosphor-dots-six-fill,640_896,16;phosphor-dots-six-light,704_896,16;phosphor-dots-six-thin,768_896,16;phosphor-dots-six-vertical-bold,832_896,16;phosphor-dots-six-vertical-duotone,896_896,16;phosphor-dots-six-vertical-fill,960_896,16;phosphor-dots-six-vertical-light,0_960,16;phosphor-dots-six-vertical-thin,64_960,16;phosphor-dots-six-vertical,128_960,16;phosphor-dots-six,192_960,16;phosphor-dots-three-bold,256_960,16;phosphor-dots-three-circle-bold,320_960,16;phosphor-dots-three-circle-duotone,384_960,16;phosphor-dots-three-circle-fill,448_960,16;phosphor-dots-three-circle-light,512_960,16;phosphor-dots-three-circle-thin,576_960,16;phosphor-dots-three-circle-vertical-bold,640_960,16;phosphor-dots-three-circle-vertical-duotone,704_960,16;phosphor-dots-three-circle-vertical-fill,768_960,16;phosphor-dots-three-circle-vertical-light,832_960,16;phosphor-dots-three-circle-vertical-thin,896_960,16;phosphor-dots-three-circle-vertical,960_960,16;phosphor-dots-three-circle,0_0,17;phosphor-dots-three-duotone,64_0,17;phosphor-dots-three-fill,128_0,17;phosphor-dots-three-light,192_0,17;phosphor-dots-three-outline-bold,256_0,17;phosphor-dots-three-outline-duotone,320_0,17;phosphor-dots-three-outline-fill,384_0,17;phosphor-dots-three-outline-light,448_0,17;phosphor-dots-three-outline-thin,512_0,17;phosphor-dots-three-outline-vertical-bold,576_0,17;phosphor-dots-three-outline-vertical-duotone,640_0,17;phosphor-dots-three-outline-vertical-fill,704_0,17;phosphor-dots-three-outline-vertical-light,768_0,17;phosphor-dots-three-outline-vertical-thin,832_0,17;phosphor-dots-three-outline-vertical,896_0,17;phosphor-dots-three-outline,960_0,17;phosphor-dots-three-thin,0_64,17;phosphor-dots-three-vertical-bold,64_64,17;phosphor-dots-three-vertical-duotone,128_64,17;phosphor-dots-three-vertical-fill,192_64,17;phosphor-dots-three-vertical-light,256_64,17;phosphor-dots-three-vertical-thin,320_64,17;phosphor-dots-three-vertical,384_64,17;phosphor-dots-three,448_64,17;phosphor-download-bold,512_64,17;phosphor-download-duotone,576_64,17;phosphor-download-fill,640_64,17;phosphor-download-light,704_64,17;phosphor-download-simple-bold,768_64,17;phosphor-download-simple-duotone,832_64,17;phosphor-download-simple-fill,896_64,17;phosphor-download-simple-light,960_64,17;phosphor-download-simple-thin,0_128,17;phosphor-download-simple,64_128,17;phosphor-download-thin,128_128,17;phosphor-download,192_128,17;phosphor-dress-bold,256_128,17;phosphor-dress-duotone,320_128,17;phosphor-dress-fill,384_128,17;phosphor-dress-light,448_128,17;phosphor-dress-thin,512_128,17;phosphor-dress,576_128,17;phosphor-dresser-bold,640_128,17;phosphor-dresser-duotone,704_128,17;phosphor-dresser-fill,768_128,17;phosphor-dresser-light,832_128,17;phosphor-dresser-thin,896_128,17;phosphor-dresser,960_128,17;phosphor-dribbble-logo-bold,0_192,17;phosphor-dribbble-logo-duotone,64_192,17;phosphor-dribbble-logo-fill,128_192,17;phosphor-dribbble-logo-light,192_192,17;phosphor-dribbble-logo-thin,256_192,17;phosphor-dribbble-logo,320_192,17;phosphor-drone-bold,384_192,17;phosphor-drone-duotone,448_192,17;phosphor-drone-fill,512_192,17;phosphor-drone-light,576_192,17;phosphor-drone-thin,640_192,17;phosphor-drone,704_192,17;phosphor-drop-bold,768_192,17;phosphor-drop-duotone,832_192,17;phosphor-drop-fill,896_192,17;phosphor-drop-half-bold,960_192,17;phosphor-drop-half-bottom-bold,0_256,17;phosphor-drop-half-bottom-duotone,64_256,17;phosphor-drop-half-bottom-fill,128_256,17;phosphor-drop-half-bottom-light,192_256,17;phosphor-drop-half-bottom-thin,256_256,17;phosphor-drop-half-bottom,320_256,17;phosphor-drop-half-duotone,384_256,17;phosphor-drop-half-fill,448_256,17;phosphor-drop-half-light,512_256,17;phosphor-drop-half-thin,576_256,17;phosphor-drop-half,640_256,17;phosphor-drop-light,704_256,17;phosphor-drop-simple-bold,768_256,17;phosphor-drop-simple-duotone,832_256,17;phosphor-drop-simple-fill,896_256,17;phosphor-drop-simple-light,960_256,17;phosphor-drop-simple-thin,0_320,17;phosphor-drop-simple,64_320,17;phosphor-drop-slash-bold,128_320,17;phosphor-drop-slash-duotone,192_320,17;phosphor-drop-slash-fill,256_320,17;phosphor-drop-slash-light,320_320,17;phosphor-drop-slash-thin,384_320,17;phosphor-drop-slash,448_320,17;phosphor-drop-thin,512_320,17;phosphor-drop,576_320,17;phosphor-dropbox-logo-bold,640_320,17;phosphor-dropbox-logo-duotone,704_320,17;phosphor-dropbox-logo-fill,768_320,17;phosphor-dropbox-logo-light,832_320,17;phosphor-dropbox-logo-thin,896_320,17;phosphor-dropbox-logo,960_320,17;phosphor-ear-bold,0_384,17;phosphor-ear-duotone,64_384,17;phosphor-ear-fill,128_384,17;phosphor-ear-light,192_384,17;phosphor-ear-slash-bold,256_384,17;phosphor-ear-slash-duotone,320_384,17;phosphor-ear-slash-fill,384_384,17;phosphor-ear-slash-light,448_384,17;phosphor-ear-slash-thin,512_384,17;phosphor-ear-slash,576_384,17;phosphor-ear-thin,640_384,17;phosphor-ear,704_384,17;phosphor-egg-bold,768_384,17;phosphor-egg-crack-bold,832_384,17;phosphor-egg-crack-duotone,896_384,17;phosphor-egg-crack-fill,960_384,17;phosphor-egg-crack-light,0_448,17;phosphor-egg-crack-thin,64_448,17;phosphor-egg-crack,128_448,17;phosphor-egg-duotone,192_448,17;phosphor-egg-fill,256_448,17;phosphor-egg-light,320_448,17;phosphor-egg-thin,384_448,17;phosphor-egg,448_448,17;phosphor-eject-bold,512_448,17;phosphor-eject-duotone,576_448,17;phosphor-eject-fill,640_448,17;phosphor-eject-light,704_448,17;phosphor-eject-simple-bold,768_448,17;phosphor-eject-simple-duotone,832_448,17;phosphor-eject-simple-fill,896_448,17;phosphor-eject-simple-light,960_448,17;phosphor-eject-simple-thin,0_512,17;phosphor-eject-simple,64_512,17;phosphor-eject-thin,128_512,17;phosphor-eject,192_512,17;phosphor-elevator-bold,256_512,17;phosphor-elevator-duotone,320_512,17;phosphor-elevator-fill,384_512,17;phosphor-elevator-light,448_512,17;phosphor-elevator-thin,512_512,17;phosphor-elevator,576_512,17;phosphor-empty-bold,640_512,17;phosphor-empty-duotone,704_512,17;phosphor-empty-fill,768_512,17;phosphor-empty-light,832_512,17;phosphor-empty-thin,896_512,17;phosphor-empty,960_512,17;phosphor-engine-bold,0_576,17;phosphor-engine-duotone,64_576,17;phosphor-engine-fill,128_576,17;phosphor-engine-light,192_576,17;phosphor-engine-thin,256_576,17;phosphor-engine,320_576,17;phosphor-envelope-bold,384_576,17;phosphor-envelope-duotone,448_576,17;phosphor-envelope-fill,512_576,17;phosphor-envelope-light,576_576,17;phosphor-envelope-open-bold,640_576,17;phosphor-envelope-open-duotone,704_576,17;phosphor-envelope-open-fill,768_576,17;phosphor-envelope-open-light,832_576,17;phosphor-envelope-open-thin,896_576,17;phosphor-envelope-open,960_576,17;phosphor-envelope-simple-bold,0_640,17;phosphor-envelope-simple-duotone,64_640,17;phosphor-envelope-simple-fill,128_640,17;phosphor-envelope-simple-light,192_640,17;phosphor-envelope-simple-open-bold,256_640,17;phosphor-envelope-simple-open-duotone,320_640,17;phosphor-envelope-simple-open-fill,384_640,17;phosphor-envelope-simple-open-light,448_640,17;phosphor-envelope-simple-open-thin,512_640,17;phosphor-envelope-simple-open,576_640,17;phosphor-envelope-simple-thin,640_640,17;phosphor-envelope-simple,704_640,17;phosphor-envelope-thin,768_640,17;phosphor-envelope,832_640,17;phosphor-equalizer-bold,896_640,17;phosphor-equalizer-duotone,960_640,17;phosphor-equalizer-fill,0_704,17;phosphor-equalizer-light,64_704,17;phosphor-equalizer-thin,128_704,17;phosphor-equalizer,192_704,17;phosphor-equals-bold,256_704,17;phosphor-equals-duotone,320_704,17;phosphor-equals-fill,384_704,17;phosphor-equals-light,448_704,17;phosphor-equals-thin,512_704,17;phosphor-equals,576_704,17;phosphor-eraser-bold,640_704,17;phosphor-eraser-duotone,704_704,17;phosphor-eraser-fill,768_704,17;phosphor-eraser-light,832_704,17;phosphor-eraser-thin,896_704,17;phosphor-eraser,960_704,17;phosphor-escalator-down-bold,0_768,17;phosphor-escalator-down-duotone,64_768,17;phosphor-escalator-down-fill,128_768,17;phosphor-escalator-down-light,192_768,17;phosphor-escalator-down-thin,256_768,17;phosphor-escalator-down,320_768,17;phosphor-escalator-up-bold,384_768,17;phosphor-escalator-up-duotone,448_768,17;phosphor-escalator-up-fill,512_768,17;phosphor-escalator-up-light,576_768,17;phosphor-escalator-up-thin,640_768,17;phosphor-escalator-up,704_768,17;phosphor-exam-bold,768_768,17;phosphor-exam-duotone,832_768,17;phosphor-exam-fill,896_768,17;phosphor-exam-light,960_768,17;phosphor-exam-thin,0_832,17;phosphor-exam,64_832,17;phosphor-exclamation-mark-bold,128_832,17;phosphor-exclamation-mark-duotone,192_832,17;phosphor-exclamation-mark-fill,256_832,17;phosphor-exclamation-mark-light,320_832,17;phosphor-exclamation-mark-thin,384_832,17;phosphor-exclamation-mark,448_832,17;phosphor-exclude-bold,512_832,17;phosphor-exclude-duotone,576_832,17;phosphor-exclude-fill,640_832,17;phosphor-exclude-light,704_832,17;phosphor-exclude-square-bold,768_832,17;phosphor-exclude-square-duotone,832_832,17;phosphor-exclude-square-fill,896_832,17;phosphor-exclude-square-light,960_832,17;phosphor-exclude-square-thin,0_896,17;phosphor-exclude-square,64_896,17;phosphor-exclude-thin,128_896,17;phosphor-exclude,192_896,17;phosphor-export-bold,256_896,17;phosphor-export-duotone,320_896,17;phosphor-export-fill,384_896,17;phosphor-export-light,448_896,17;phosphor-export-thin,512_896,17;phosphor-export,576_896,17;phosphor-eye-bold,640_896,17;phosphor-eye-closed-bold,704_896,17;phosphor-eye-closed-duotone,768_896,17;phosphor-eye-closed-fill,832_896,17;phosphor-eye-closed-light,896_896,17;phosphor-eye-closed-thin,960_896,17;phosphor-eye-closed,0_960,17;phosphor-eye-duotone,64_960,17;phosphor-eye-fill,128_960,17;phosphor-eye-light,192_960,17;phosphor-eye-slash-bold,256_960,17;phosphor-eye-slash-duotone,320_960,17;phosphor-eye-slash-fill,384_960,17;phosphor-eye-slash-light,448_960,17;phosphor-eye-slash-thin,512_960,17;phosphor-eye-slash,576_960,17;phosphor-eye-thin,640_960,17;phosphor-eye,704_960,17;phosphor-eyedropper-bold,768_960,17;phosphor-eyedropper-duotone,832_960,17;phosphor-eyedropper-fill,896_960,17;phosphor-eyedropper-light,960_960,17;phosphor-eyedropper-sample-bold,0_0,18;phosphor-eyedropper-sample-duotone,64_0,18;phosphor-eyedropper-sample-fill,128_0,18;phosphor-eyedropper-sample-light,192_0,18;phosphor-eyedropper-sample-thin,256_0,18;phosphor-eyedropper-sample,320_0,18;phosphor-eyedropper-thin,384_0,18;phosphor-eyedropper,448_0,18;phosphor-eyeglasses-bold,512_0,18;phosphor-eyeglasses-duotone,576_0,18;phosphor-eyeglasses-fill,640_0,18;phosphor-eyeglasses-light,704_0,18;phosphor-eyeglasses-thin,768_0,18;phosphor-eyeglasses,832_0,18;phosphor-eyes-bold,896_0,18;phosphor-eyes-duotone,960_0,18;phosphor-eyes-fill,0_64,18;phosphor-eyes-light,64_64,18;phosphor-eyes-thin,128_64,18;phosphor-eyes,192_64,18;phosphor-face-mask-bold,256_64,18;phosphor-face-mask-duotone,320_64,18;phosphor-face-mask-fill,384_64,18;phosphor-face-mask-light,448_64,18;phosphor-face-mask-thin,512_64,18;phosphor-face-mask,576_64,18;phosphor-facebook-logo-bold,640_64,18;phosphor-facebook-logo-duotone,704_64,18;phosphor-facebook-logo-fill,768_64,18;phosphor-facebook-logo-light,832_64,18;phosphor-facebook-logo-thin,896_64,18;phosphor-facebook-logo,960_64,18;phosphor-factory-bold,0_128,18;phosphor-factory-duotone,64_128,18;phosphor-factory-fill,128_128,18;phosphor-factory-light,192_128,18;phosphor-factory-thin,256_128,18;phosphor-factory,320_128,18;phosphor-faders-bold,384_128,18;phosphor-faders-duotone,448_128,18;phosphor-faders-fill,512_128,18;phosphor-faders-horizontal-bold,576_128,18;phosphor-faders-horizontal-duotone,640_128,18;phosphor-faders-horizontal-fill,704_128,18;phosphor-faders-horizontal-light,768_128,18;phosphor-faders-horizontal-thin,832_128,18;phosphor-faders-horizontal,896_128,18;phosphor-faders-light,960_128,18;phosphor-faders-thin,0_192,18;phosphor-faders,64_192,18;phosphor-fallout-shelter-bold,128_192,18;phosphor-fallout-shelter-duotone,192_192,18;phosphor-fallout-shelter-fill,256_192,18;phosphor-fallout-shelter-light,320_192,18;phosphor-fallout-shelter-thin,384_192,18;phosphor-fallout-shelter,448_192,18;phosphor-fan-bold,512_192,18;phosphor-fan-duotone,576_192,18;phosphor-fan-fill,640_192,18;phosphor-fan-light,704_192,18;phosphor-fan-thin,768_192,18;phosphor-fan,832_192,18;phosphor-farm-bold,896_192,18;phosphor-farm-duotone,960_192,18;phosphor-farm-fill,0_256,18;phosphor-farm-light,64_256,18;phosphor-farm-thin,128_256,18;phosphor-farm,192_256,18;phosphor-fast-forward-bold,256_256,18;phosphor-fast-forward-circle-bold,320_256,18;phosphor-fast-forward-circle-duotone,384_256,18;phosphor-fast-forward-circle-fill,448_256,18;phosphor-fast-forward-circle-light,512_256,18;phosphor-fast-forward-circle-thin,576_256,18;phosphor-fast-forward-circle,640_256,18;phosphor-fast-forward-duotone,704_256,18;phosphor-fast-forward-fill,768_256,18;phosphor-fast-forward-light,832_256,18;phosphor-fast-forward-thin,896_256,18;phosphor-fast-forward,960_256,18;phosphor-feather-bold,0_320,18;phosphor-feather-duotone,64_320,18;phosphor-feather-fill,128_320,18;phosphor-feather-light,192_320,18;phosphor-feather-thin,256_320,18;phosphor-feather,320_320,18;phosphor-fediverse-logo-bold,384_320,18;phosphor-fediverse-logo-duotone,448_320,18;phosphor-fediverse-logo-fill,512_320,18;phosphor-fediverse-logo-light,576_320,18;phosphor-fediverse-logo-thin,640_320,18;phosphor-fediverse-logo,704_320,18;phosphor-figma-logo-bold,768_320,18;phosphor-figma-logo-duotone,832_320,18;phosphor-figma-logo-fill,896_320,18;phosphor-figma-logo-light,960_320,18;phosphor-figma-logo-thin,0_384,18;phosphor-figma-logo,64_384,18;phosphor-file-archive-bold,128_384,18;phosphor-file-archive-duotone,192_384,18;phosphor-file-archive-fill,256_384,18;phosphor-file-archive-light,320_384,18;phosphor-file-archive-thin,384_384,18;phosphor-file-archive,448_384,18;phosphor-file-arrow-down-bold,512_384,18;phosphor-file-arrow-down-duotone,576_384,18;phosphor-file-arrow-down-fill,640_384,18;phosphor-file-arrow-down-light,704_384,18;phosphor-file-arrow-down-thin,768_384,18;phosphor-file-arrow-down,832_384,18;phosphor-file-arrow-up-bold,896_384,18;phosphor-file-arrow-up-duotone,960_384,18;phosphor-file-arrow-up-fill,0_448,18;phosphor-file-arrow-up-light,64_448,18;phosphor-file-arrow-up-thin,128_448,18;phosphor-file-arrow-up,192_448,18;phosphor-file-audio-bold,256_448,18;phosphor-file-audio-duotone,320_448,18;phosphor-file-audio-fill,384_448,18;phosphor-file-audio-light,448_448,18;phosphor-file-audio-thin,512_448,18;phosphor-file-audio,576_448,18;phosphor-file-bold,640_448,18;phosphor-file-c-bold,704_448,18;phosphor-file-c-duotone,768_448,18;phosphor-file-c-fill,832_448,18;phosphor-file-c-light,896_448,18;phosphor-file-c-sharp-bold,960_448,18;phosphor-file-c-sharp-duotone,0_512,18;phosphor-file-c-sharp-fill,64_512,18;phosphor-file-c-sharp-light,128_512,18;phosphor-file-c-sharp-thin,192_512,18;phosphor-file-c-sharp,256_512,18;phosphor-file-c-thin,320_512,18;phosphor-file-c,384_512,18;phosphor-file-cloud-bold,448_512,18;phosphor-file-cloud-duotone,512_512,18;phosphor-file-cloud-fill,576_512,18;phosphor-file-cloud-light,640_512,18;phosphor-file-cloud-thin,704_512,18;phosphor-file-cloud,768_512,18;phosphor-file-code-bold,832_512,18;phosphor-file-code-duotone,896_512,18;phosphor-file-code-fill,960_512,18;phosphor-file-code-light,0_576,18;phosphor-file-code-thin,64_576,18;phosphor-file-code,128_576,18;phosphor-file-cpp-bold,192_576,18;phosphor-file-cpp-duotone,256_576,18;phosphor-file-cpp-fill,320_576,18;phosphor-file-cpp-light,384_576,18;phosphor-file-cpp-thin,448_576,18;phosphor-file-cpp,512_576,18;phosphor-file-css-bold,576_576,18;phosphor-file-css-duotone,640_576,18;phosphor-file-css-fill,704_576,18;phosphor-file-css-light,768_576,18;phosphor-file-css-thin,832_576,18;phosphor-file-css,896_576,18;phosphor-file-csv-bold,960_576,18;phosphor-file-csv-duotone,0_640,18;phosphor-file-csv-fill,64_640,18;phosphor-file-csv-light,128_640,18;phosphor-file-csv-thin,192_640,18;phosphor-file-csv,256_640,18;phosphor-file-dashed-bold,320_640,18;phosphor-file-dashed-duotone,384_640,18;phosphor-file-dashed-fill,448_640,18;phosphor-file-dashed-light,512_640,18;phosphor-file-dashed-thin,576_640,18;phosphor-file-dashed,640_640,18;phosphor-file-doc-bold,704_640,18;phosphor-file-doc-duotone,768_640,18;phosphor-file-doc-fill,832_640,18;phosphor-file-doc-light,896_640,18;phosphor-file-doc-thin,960_640,18;phosphor-file-doc,0_704,18;phosphor-file-duotone,64_704,18;phosphor-file-fill,128_704,18;phosphor-file-html-bold,192_704,18;phosphor-file-html-duotone,256_704,18;phosphor-file-html-fill,320_704,18;phosphor-file-html-light,384_704,18;phosphor-file-html-thin,448_704,18;phosphor-file-html,512_704,18;phosphor-file-image-bold,576_704,18;phosphor-file-image-duotone,640_704,18;phosphor-file-image-fill,704_704,18;phosphor-file-image-light,768_704,18;phosphor-file-image-thin,832_704,18;phosphor-file-image,896_704,18;phosphor-file-ini-bold,960_704,18;phosphor-file-ini-duotone,0_768,18;phosphor-file-ini-fill,64_768,18;phosphor-file-ini-light,128_768,18;phosphor-file-ini-thin,192_768,18;phosphor-file-ini,256_768,18;phosphor-file-jpg-bold,320_768,18;phosphor-file-jpg-duotone,384_768,18;phosphor-file-jpg-fill,448_768,18;phosphor-file-jpg-light,512_768,18;phosphor-file-jpg-thin,576_768,18;phosphor-file-jpg,640_768,18;phosphor-file-js-bold,704_768,18;phosphor-file-js-duotone,768_768,18;phosphor-file-js-fill,832_768,18;phosphor-file-js-light,896_768,18;phosphor-file-js-thin,960_768,18;phosphor-file-js,0_832,18;phosphor-file-jsx-bold,64_832,18;phosphor-file-jsx-duotone,128_832,18;phosphor-file-jsx-fill,192_832,18;phosphor-file-jsx-light,256_832,18;phosphor-file-jsx-thin,320_832,18;phosphor-file-jsx,384_832,18;phosphor-file-light,448_832,18;phosphor-file-lock-bold,512_832,18;phosphor-file-lock-duotone,576_832,18;phosphor-file-lock-fill,640_832,18;phosphor-file-lock-light,704_832,18;phosphor-file-lock-thin,768_832,18;phosphor-file-lock,832_832,18;phosphor-file-magnifying-glass-bold,896_832,18;phosphor-file-magnifying-glass-duotone,960_832,18;phosphor-file-magnifying-glass-fill,0_896,18;phosphor-file-magnifying-glass-light,64_896,18;phosphor-file-magnifying-glass-thin,128_896,18;phosphor-file-magnifying-glass,192_896,18;phosphor-file-md-bold,256_896,18;phosphor-file-md-duotone,320_896,18;phosphor-file-md-fill,384_896,18;phosphor-file-md-light,448_896,18;phosphor-file-md-thin,512_896,18;phosphor-file-md,576_896,18;phosphor-file-minus-bold,640_896,18;phosphor-file-minus-duotone,704_896,18;phosphor-file-minus-fill,768_896,18;phosphor-file-minus-light,832_896,18;phosphor-file-minus-thin,896_896,18;phosphor-file-minus,960_896,18;phosphor-file-pdf-bold,0_960,18;phosphor-file-pdf-duotone,64_960,18;phosphor-file-pdf-fill,128_960,18;phosphor-file-pdf-light,192_960,18;phosphor-file-pdf-thin,256_960,18;phosphor-file-pdf,320_960,18;phosphor-file-plus-bold,384_960,18;phosphor-file-plus-duotone,448_960,18;phosphor-file-plus-fill,512_960,18;phosphor-file-plus-light,576_960,18;phosphor-file-plus-thin,640_960,18;phosphor-file-plus,704_960,18;phosphor-file-png-bold,768_960,18;phosphor-file-png-duotone,832_960,18;phosphor-file-png-fill,896_960,18;phosphor-file-png-light,960_960,18;phosphor-file-png-thin,0_0,19;phosphor-file-png,64_0,19;phosphor-file-ppt-bold,128_0,19;phosphor-file-ppt-duotone,192_0,19;phosphor-file-ppt-fill,256_0,19;phosphor-file-ppt-light,320_0,19;phosphor-file-ppt-thin,384_0,19;phosphor-file-ppt,448_0,19;phosphor-file-py-bold,512_0,19;phosphor-file-py-duotone,576_0,19;phosphor-file-py-fill,640_0,19;phosphor-file-py-light,704_0,19;phosphor-file-py-thin,768_0,19;phosphor-file-py,832_0,19;phosphor-file-rs-bold,896_0,19;phosphor-file-rs-duotone,960_0,19;phosphor-file-rs-fill,0_64,19;phosphor-file-rs-light,64_64,19;phosphor-file-rs-thin,128_64,19;phosphor-file-rs,192_64,19;phosphor-file-sql-bold,256_64,19;phosphor-file-sql-duotone,320_64,19;phosphor-file-sql-fill,384_64,19;phosphor-file-sql-light,448_64,19;phosphor-file-sql-thin,512_64,19;phosphor-file-sql,576_64,19;phosphor-file-svg-bold,640_64,19;phosphor-file-svg-duotone,704_64,19;phosphor-file-svg-fill,768_64,19;phosphor-file-svg-light,832_64,19;phosphor-file-svg-thin,896_64,19;phosphor-file-svg,960_64,19;phosphor-file-text-bold,0_128,19;phosphor-file-text-duotone,64_128,19;phosphor-file-text-fill,128_128,19;phosphor-file-text-light,192_128,19;phosphor-file-text-thin,256_128,19;phosphor-file-text,320_128,19;phosphor-file-thin,384_128,19;phosphor-file-ts-bold,448_128,19;phosphor-file-ts-duotone,512_128,19;phosphor-file-ts-fill,576_128,19;phosphor-file-ts-light,640_128,19;phosphor-file-ts-thin,704_128,19;phosphor-file-ts,768_128,19;phosphor-file-tsx-bold,832_128,19;phosphor-file-tsx-duotone,896_128,19;phosphor-file-tsx-fill,960_128,19;phosphor-file-tsx-light,0_192,19;phosphor-file-tsx-thin,64_192,19;phosphor-file-tsx,128_192,19;phosphor-file-txt-bold,192_192,19;phosphor-file-txt-duotone,256_192,19;phosphor-file-txt-fill,320_192,19;phosphor-file-txt-light,384_192,19;phosphor-file-txt-thin,448_192,19;phosphor-file-txt,512_192,19;phosphor-file-video-bold,576_192,19;phosphor-file-video-duotone,640_192,19;phosphor-file-video-fill,704_192,19;phosphor-file-video-light,768_192,19;phosphor-file-video-thin,832_192,19;phosphor-file-video,896_192,19;phosphor-file-vue-bold,960_192,19;phosphor-file-vue-duotone,0_256,19;phosphor-file-vue-fill,64_256,19;phosphor-file-vue-light,128_256,19;phosphor-file-vue-thin,192_256,19;phosphor-file-vue,256_256,19;phosphor-file-x-bold,320_256,19;phosphor-file-x-duotone,384_256,19;phosphor-file-x-fill,448_256,19;phosphor-file-x-light,512_256,19;phosphor-file-x-thin,576_256,19;phosphor-file-x,640_256,19;phosphor-file-xls-bold,704_256,19;phosphor-file-xls-duotone,768_256,19;phosphor-file-xls-fill,832_256,19;phosphor-file-xls-light,896_256,19;phosphor-file-xls-thin,960_256,19;phosphor-file-xls,0_320,19;phosphor-file-zip-bold,64_320,19;phosphor-file-zip-duotone,128_320,19;phosphor-file-zip-fill,192_320,19;phosphor-file-zip-light,256_320,19;phosphor-file-zip-thin,320_320,19;phosphor-file-zip,384_320,19;phosphor-file,448_320,19;phosphor-files-bold,512_320,19;phosphor-files-duotone,576_320,19;phosphor-files-fill,640_320,19;phosphor-files-light,704_320,19;phosphor-files-thin,768_320,19;phosphor-files,832_320,19;phosphor-film-reel-bold,896_320,19;phosphor-film-reel-duotone,960_320,19;phosphor-film-reel-fill,0_384,19;phosphor-film-reel-light,64_384,19;phosphor-film-reel-thin,128_384,19;phosphor-film-reel,192_384,19;phosphor-film-script-bold,256_384,19;phosphor-film-script-duotone,320_384,19;phosphor-film-script-fill,384_384,19;phosphor-film-script-light,448_384,19;phosphor-film-script-thin,512_384,19;phosphor-film-script,576_384,19;phosphor-film-slate-bold,640_384,19;phosphor-film-slate-duotone,704_384,19;phosphor-film-slate-fill,768_384,19;phosphor-film-slate-light,832_384,19;phosphor-film-slate-thin,896_384,19;phosphor-film-slate,960_384,19;phosphor-film-strip-bold,0_448,19;phosphor-film-strip-duotone,64_448,19;phosphor-film-strip-fill,128_448,19;phosphor-film-strip-light,192_448,19;phosphor-film-strip-thin,256_448,19;phosphor-film-strip,320_448,19;phosphor-fingerprint-bold,384_448,19;phosphor-fingerprint-duotone,448_448,19;phosphor-fingerprint-fill,512_448,19;phosphor-fingerprint-light,576_448,19;phosphor-fingerprint-simple-bold,640_448,19;phosphor-fingerprint-simple-duotone,704_448,19;phosphor-fingerprint-simple-fill,768_448,19;phosphor-fingerprint-simple-light,832_448,19;phosphor-fingerprint-simple-thin,896_448,19;phosphor-fingerprint-simple,960_448,19;phosphor-fingerprint-thin,0_512,19;phosphor-fingerprint,64_512,19;phosphor-finn-the-human-bold,128_512,19;phosphor-finn-the-human-duotone,192_512,19;phosphor-finn-the-human-fill,256_512,19;phosphor-finn-the-human-light,320_512,19;phosphor-finn-the-human-thin,384_512,19;phosphor-finn-the-human,448_512,19;phosphor-fire-bold,512_512,19;phosphor-fire-duotone,576_512,19;phosphor-fire-extinguisher-bold,640_512,19;phosphor-fire-extinguisher-duotone,704_512,19;phosphor-fire-extinguisher-fill,768_512,19;phosphor-fire-extinguisher-light,832_512,19;phosphor-fire-extinguisher-thin,896_512,19;phosphor-fire-extinguisher,960_512,19;phosphor-fire-fill,0_576,19;phosphor-fire-light,64_576,19;phosphor-fire-simple-bold,128_576,19;phosphor-fire-simple-duotone,192_576,19;phosphor-fire-simple-fill,256_576,19;phosphor-fire-simple-light,320_576,19;phosphor-fire-simple-thin,384_576,19;phosphor-fire-simple,448_576,19;phosphor-fire-thin,512_576,19;phosphor-fire-truck-bold,576_576,19;phosphor-fire-truck-duotone,640_576,19;phosphor-fire-truck-fill,704_576,19;phosphor-fire-truck-light,768_576,19;phosphor-fire-truck-thin,832_576,19;phosphor-fire-truck,896_576,19;phosphor-fire,960_576,19;phosphor-first-aid-bold,0_640,19;phosphor-first-aid-duotone,64_640,19;phosphor-first-aid-fill,128_640,19;phosphor-first-aid-kit-bold,192_640,19;phosphor-first-aid-kit-duotone,256_640,19;phosphor-first-aid-kit-fill,320_640,19;phosphor-first-aid-kit-light,384_640,19;phosphor-first-aid-kit-thin,448_640,19;phosphor-first-aid-kit,512_640,19;phosphor-first-aid-light,576_640,19;phosphor-first-aid-thin,640_640,19;phosphor-first-aid,704_640,19;phosphor-fish-bold,768_640,19;phosphor-fish-duotone,832_640,19;phosphor-fish-fill,896_640,19;phosphor-fish-light,960_640,19;phosphor-fish-simple-bold,0_704,19;phosphor-fish-simple-duotone,64_704,19;phosphor-fish-simple-fill,128_704,19;phosphor-fish-simple-light,192_704,19;phosphor-fish-simple-thin,256_704,19;phosphor-fish-simple,320_704,19;phosphor-fish-thin,384_704,19;phosphor-fish,448_704,19;phosphor-flag-banner-bold,512_704,19;phosphor-flag-banner-duotone,576_704,19;phosphor-flag-banner-fill,640_704,19;phosphor-flag-banner-fold-bold,704_704,19;phosphor-flag-banner-fold-duotone,768_704,19;phosphor-flag-banner-fold-fill,832_704,19;phosphor-flag-banner-fold-light,896_704,19;phosphor-flag-banner-fold-thin,960_704,19;phosphor-flag-banner-fold,0_768,19;phosphor-flag-banner-light,64_768,19;phosphor-flag-banner-thin,128_768,19;phosphor-flag-banner,192_768,19;phosphor-flag-bold,256_768,19;phosphor-flag-checkered-bold,320_768,19;phosphor-flag-checkered-duotone,384_768,19;phosphor-flag-checkered-fill,448_768,19;phosphor-flag-checkered-light,512_768,19;phosphor-flag-checkered-thin,576_768,19;phosphor-flag-checkered,640_768,19;phosphor-flag-duotone,704_768,19;phosphor-flag-fill,768_768,19;phosphor-flag-light,832_768,19;phosphor-flag-pennant-bold,896_768,19;phosphor-flag-pennant-duotone,960_768,19;phosphor-flag-pennant-fill,0_832,19;phosphor-flag-pennant-light,64_832,19;phosphor-flag-pennant-thin,128_832,19;phosphor-flag-pennant,192_832,19;phosphor-flag-thin,256_832,19;phosphor-flag,320_832,19;phosphor-flame-bold,384_832,19;phosphor-flame-duotone,448_832,19;phosphor-flame-fill,512_832,19;phosphor-flame-light,576_832,19;phosphor-flame-thin,640_832,19;phosphor-flame,704_832,19;phosphor-flashlight-bold,768_832,19;phosphor-flashlight-duotone,832_832,19;phosphor-flashlight-fill,896_832,19;phosphor-flashlight-light,960_832,19;phosphor-flashlight-thin,0_896,19;phosphor-flashlight,64_896,19;phosphor-flask-bold,128_896,19;phosphor-flask-duotone,192_896,19;phosphor-flask-fill,256_896,19;phosphor-flask-light,320_896,19;phosphor-flask-thin,384_896,19;phosphor-flask,448_896,19;phosphor-flip-horizontal-bold,512_896,19;phosphor-flip-horizontal-duotone,576_896,19;phosphor-flip-horizontal-fill,640_896,19;phosphor-flip-horizontal-light,704_896,19;phosphor-flip-horizontal-thin,768_896,19;phosphor-flip-horizontal,832_896,19;phosphor-flip-vertical-bold,896_896,19;phosphor-flip-vertical-duotone,960_896,19;phosphor-flip-vertical-fill,0_960,19;phosphor-flip-vertical-light,64_960,19;phosphor-flip-vertical-thin,128_960,19;phosphor-flip-vertical,192_960,19;phosphor-floppy-disk-back-bold,256_960,19;phosphor-floppy-disk-back-duotone,320_960,19;phosphor-floppy-disk-back-fill,384_960,19;phosphor-floppy-disk-back-light,448_960,19;phosphor-floppy-disk-back-thin,512_960,19;phosphor-floppy-disk-back,576_960,19;phosphor-floppy-disk-bold,640_960,19;phosphor-floppy-disk-duotone,704_960,19;phosphor-floppy-disk-fill,768_960,19;phosphor-floppy-disk-light,832_960,19;phosphor-floppy-disk-thin,896_960,19;phosphor-floppy-disk,960_960,19;phosphor-flow-arrow-bold,0_0,20;phosphor-flow-arrow-duotone,64_0,20;phosphor-flow-arrow-fill,128_0,20;phosphor-flow-arrow-light,192_0,20;phosphor-flow-arrow-thin,256_0,20;phosphor-flow-arrow,320_0,20;phosphor-flower-bold,384_0,20;phosphor-flower-duotone,448_0,20;phosphor-flower-fill,512_0,20;phosphor-flower-light,576_0,20;phosphor-flower-lotus-bold,640_0,20;phosphor-flower-lotus-duotone,704_0,20;phosphor-flower-lotus-fill,768_0,20;phosphor-flower-lotus-light,832_0,20;phosphor-flower-lotus-thin,896_0,20;phosphor-flower-lotus,960_0,20;phosphor-flower-thin,0_64,20;phosphor-flower-tulip-bold,64_64,20;phosphor-flower-tulip-duotone,128_64,20;phosphor-flower-tulip-fill,192_64,20;phosphor-flower-tulip-light,256_64,20;phosphor-flower-tulip-thin,320_64,20;phosphor-flower-tulip,384_64,20;phosphor-flower,448_64,20;phosphor-flying-saucer-bold,512_64,20;phosphor-flying-saucer-duotone,576_64,20;phosphor-flying-saucer-fill,640_64,20;phosphor-flying-saucer-light,704_64,20;phosphor-flying-saucer-thin,768_64,20;phosphor-flying-saucer,832_64,20;phosphor-folder-bold,896_64,20;phosphor-folder-dashed-bold,960_64,20;phosphor-folder-dashed-duotone,0_128,20;phosphor-folder-dashed-fill,64_128,20;phosphor-folder-dashed-light,128_128,20;phosphor-folder-dashed-thin,192_128,20;phosphor-folder-dashed,256_128,20;phosphor-folder-duotone,320_128,20;phosphor-folder-fill,384_128,20;phosphor-folder-light,448_128,20;phosphor-folder-lock-bold,512_128,20;phosphor-folder-lock-duotone,576_128,20;phosphor-folder-lock-fill,640_128,20;phosphor-folder-lock-light,704_128,20;phosphor-folder-lock-thin,768_128,20;phosphor-folder-lock,832_128,20;phosphor-folder-minus-bold,896_128,20;phosphor-folder-minus-duotone,960_128,20;phosphor-folder-minus-fill,0_192,20;phosphor-folder-minus-light,64_192,20;phosphor-folder-minus-thin,128_192,20;phosphor-folder-minus,192_192,20;phosphor-folder-open-bold,256_192,20;phosphor-folder-open-duotone,320_192,20;phosphor-folder-open-fill,384_192,20;phosphor-folder-open-light,448_192,20;phosphor-folder-open-thin,512_192,20;phosphor-folder-open,576_192,20;phosphor-folder-plus-bold,640_192,20;phosphor-folder-plus-duotone,704_192,20;phosphor-folder-plus-fill,768_192,20;phosphor-folder-plus-light,832_192,20;phosphor-folder-plus-thin,896_192,20;phosphor-folder-plus,960_192,20;phosphor-folder-simple-bold,0_256,20;phosphor-folder-simple-dashed-bold,64_256,20;phosphor-folder-simple-dashed-duotone,128_256,20;phosphor-folder-simple-dashed-fill,192_256,20;phosphor-folder-simple-dashed-light,256_256,20;phosphor-folder-simple-dashed-thin,320_256,20;phosphor-folder-simple-dashed,384_256,20;phosphor-folder-simple-duotone,448_256,20;phosphor-folder-simple-fill,512_256,20;phosphor-folder-simple-light,576_256,20;phosphor-folder-simple-lock-bold,640_256,20;phosphor-folder-simple-lock-duotone,704_256,20;phosphor-folder-simple-lock-fill,768_256,20;phosphor-folder-simple-lock-light,832_256,20;phosphor-folder-simple-lock-thin,896_256,20;phosphor-folder-simple-lock,960_256,20;phosphor-folder-simple-minus-bold,0_320,20;phosphor-folder-simple-minus-duotone,64_320,20;phosphor-folder-simple-minus-fill,128_320,20;phosphor-folder-simple-minus-light,192_320,20;phosphor-folder-simple-minus-thin,256_320,20;phosphor-folder-simple-minus,320_320,20;phosphor-folder-simple-plus-bold,384_320,20;phosphor-folder-simple-plus-duotone,448_320,20;phosphor-folder-simple-plus-fill,512_320,20;phosphor-folder-simple-plus-light,576_320,20;phosphor-folder-simple-plus-thin,640_320,20;phosphor-folder-simple-plus,704_320,20;phosphor-folder-simple-star-bold,768_320,20;phosphor-folder-simple-star-duotone,832_320,20;phosphor-folder-simple-star-fill,896_320,20;phosphor-folder-simple-star-light,960_320,20;phosphor-folder-simple-star-thin,0_384,20;phosphor-folder-simple-star,64_384,20;phosphor-folder-simple-thin,128_384,20;phosphor-folder-simple-user-bold,192_384,20;phosphor-folder-simple-user-duotone,256_384,20;phosphor-folder-simple-user-fill,320_384,20;phosphor-folder-simple-user-light,384_384,20;phosphor-folder-simple-user-thin,448_384,20;phosphor-folder-simple-user,512_384,20;phosphor-folder-simple,576_384,20;phosphor-folder-star-bold,640_384,20;phosphor-folder-star-duotone,704_384,20;phosphor-folder-star-fill,768_384,20;phosphor-folder-star-light,832_384,20;phosphor-folder-star-thin,896_384,20;phosphor-folder-star,960_384,20;phosphor-folder-thin,0_448,20;phosphor-folder-user-bold,64_448,20;phosphor-folder-user-duotone,128_448,20;phosphor-folder-user-fill,192_448,20;phosphor-folder-user-light,256_448,20;phosphor-folder-user-thin,320_448,20;phosphor-folder-user,384_448,20;phosphor-folder,448_448,20;phosphor-folders-bold,512_448,20;phosphor-folders-duotone,576_448,20;phosphor-folders-fill,640_448,20;phosphor-folders-light,704_448,20;phosphor-folders-thin,768_448,20;phosphor-folders,832_448,20;phosphor-football-bold,896_448,20;phosphor-football-duotone,960_448,20;phosphor-football-fill,0_512,20;phosphor-football-helmet-bold,64_512,20;phosphor-football-helmet-duotone,128_512,20;phosphor-football-helmet-fill,192_512,20;phosphor-football-helmet-light,256_512,20;phosphor-football-helmet-thin,320_512,20;phosphor-football-helmet,384_512,20;phosphor-football-light,448_512,20;phosphor-football-thin,512_512,20;phosphor-football,576_512,20;phosphor-footprints-bold,640_512,20;phosphor-footprints-duotone,704_512,20;phosphor-footprints-fill,768_512,20;phosphor-footprints-light,832_512,20;phosphor-footprints-thin,896_512,20;phosphor-footprints,960_512,20;phosphor-fork-knife-bold,0_576,20;phosphor-fork-knife-duotone,64_576,20;phosphor-fork-knife-fill,128_576,20;phosphor-fork-knife-light,192_576,20;phosphor-fork-knife-thin,256_576,20;phosphor-fork-knife,320_576,20;phosphor-four-k-bold,384_576,20;phosphor-four-k-duotone,448_576,20;phosphor-four-k-fill,512_576,20;phosphor-four-k-light,576_576,20;phosphor-four-k-thin,640_576,20;phosphor-four-k,704_576,20;phosphor-frame-corners-bold,768_576,20;phosphor-frame-corners-duotone,832_576,20;phosphor-frame-corners-fill,896_576,20;phosphor-frame-corners-light,960_576,20;phosphor-frame-corners-thin,0_640,20;phosphor-frame-corners,64_640,20;phosphor-framer-logo-bold,128_640,20;phosphor-framer-logo-duotone,192_640,20;phosphor-framer-logo-fill,256_640,20;phosphor-framer-logo-light,320_640,20;phosphor-framer-logo-thin,384_640,20;phosphor-framer-logo,448_640,20;phosphor-function-bold,512_640,20;phosphor-function-duotone,576_640,20;phosphor-function-fill,640_640,20;phosphor-function-light,704_640,20;phosphor-function-thin,768_640,20;phosphor-function,832_640,20;phosphor-funnel-bold,896_640,20;phosphor-funnel-duotone,960_640,20;phosphor-funnel-fill,0_704,20;phosphor-funnel-light,64_704,20;phosphor-funnel-simple-bold,128_704,20;phosphor-funnel-simple-duotone,192_704,20;phosphor-funnel-simple-fill,256_704,20;phosphor-funnel-simple-light,320_704,20;phosphor-funnel-simple-thin,384_704,20;phosphor-funnel-simple-x-bold,448_704,20;phosphor-funnel-simple-x-duotone,512_704,20;phosphor-funnel-simple-x-fill,576_704,20;phosphor-funnel-simple-x-light,640_704,20;phosphor-funnel-simple-x-thin,704_704,20;phosphor-funnel-simple-x,768_704,20;phosphor-funnel-simple,832_704,20;phosphor-funnel-thin,896_704,20;phosphor-funnel-x-bold,960_704,20;phosphor-funnel-x-duotone,0_768,20;phosphor-funnel-x-fill,64_768,20;phosphor-funnel-x-light,128_768,20;phosphor-funnel-x-thin,192_768,20;phosphor-funnel-x,256_768,20;phosphor-funnel,320_768,20;phosphor-game-controller-bold,384_768,20;phosphor-game-controller-duotone,448_768,20;phosphor-game-controller-fill,512_768,20;phosphor-game-controller-light,576_768,20;phosphor-game-controller-thin,640_768,20;phosphor-game-controller,704_768,20;phosphor-garage-bold,768_768,20;phosphor-garage-duotone,832_768,20;phosphor-garage-fill,896_768,20;phosphor-garage-light,960_768,20;phosphor-garage-thin,0_832,20;phosphor-garage,64_832,20;phosphor-gas-can-bold,128_832,20;phosphor-gas-can-duotone,192_832,20;phosphor-gas-can-fill,256_832,20;phosphor-gas-can-light,320_832,20;phosphor-gas-can-thin,384_832,20;phosphor-gas-can,448_832,20;phosphor-gas-pump-bold,512_832,20;phosphor-gas-pump-duotone,576_832,20;phosphor-gas-pump-fill,640_832,20;phosphor-gas-pump-light,704_832,20;phosphor-gas-pump-thin,768_832,20;phosphor-gas-pump,832_832,20;phosphor-gauge-bold,896_832,20;phosphor-gauge-duotone,960_832,20;phosphor-gauge-fill,0_896,20;phosphor-gauge-light,64_896,20;phosphor-gauge-thin,128_896,20;phosphor-gauge,192_896,20;phosphor-gavel-bold,256_896,20;phosphor-gavel-duotone,320_896,20;phosphor-gavel-fill,384_896,20;phosphor-gavel-light,448_896,20;phosphor-gavel-thin,512_896,20;phosphor-gavel,576_896,20;phosphor-gear-bold,640_896,20;phosphor-gear-duotone,704_896,20;phosphor-gear-fill,768_896,20;phosphor-gear-fine-bold,832_896,20;phosphor-gear-fine-duotone,896_896,20;phosphor-gear-fine-fill,960_896,20;phosphor-gear-fine-light,0_960,20;phosphor-gear-fine-thin,64_960,20;phosphor-gear-fine,128_960,20;phosphor-gear-light,192_960,20;phosphor-gear-six-bold,256_960,20;phosphor-gear-six-duotone,320_960,20;phosphor-gear-six-fill,384_960,20;phosphor-gear-six-light,448_960,20;phosphor-gear-six-thin,512_960,20;phosphor-gear-six,576_960,20;phosphor-gear-thin,640_960,20;phosphor-gear,704_960,20;phosphor-gender-female-bold,768_960,20;phosphor-gender-female-duotone,832_960,20;phosphor-gender-female-fill,896_960,20;phosphor-gender-female-light,960_960,20;phosphor-gender-female-thin,0_0,21;phosphor-gender-female,64_0,21;phosphor-gender-intersex-bold,128_0,21;phosphor-gender-intersex-duotone,192_0,21;phosphor-gender-intersex-fill,256_0,21;phosphor-gender-intersex-light,320_0,21;phosphor-gender-intersex-thin,384_0,21;phosphor-gender-intersex,448_0,21;phosphor-gender-male-bold,512_0,21;phosphor-gender-male-duotone,576_0,21;phosphor-gender-male-fill,640_0,21;phosphor-gender-male-light,704_0,21;phosphor-gender-male-thin,768_0,21;phosphor-gender-male,832_0,21;phosphor-gender-neuter-bold,896_0,21;phosphor-gender-neuter-duotone,960_0,21;phosphor-gender-neuter-fill,0_64,21;phosphor-gender-neuter-light,64_64,21;phosphor-gender-neuter-thin,128_64,21;phosphor-gender-neuter,192_64,21;phosphor-gender-nonbinary-bold,256_64,21;phosphor-gender-nonbinary-duotone,320_64,21;phosphor-gender-nonbinary-fill,384_64,21;phosphor-gender-nonbinary-light,448_64,21;phosphor-gender-nonbinary-thin,512_64,21;phosphor-gender-nonbinary,576_64,21;phosphor-gender-transgender-bold,640_64,21;phosphor-gender-transgender-duotone,704_64,21;phosphor-gender-transgender-fill,768_64,21;phosphor-gender-transgender-light,832_64,21;phosphor-gender-transgender-thin,896_64,21;phosphor-gender-transgender,960_64,21;phosphor-ghost-bold,0_128,21;phosphor-ghost-duotone,64_128,21;phosphor-ghost-fill,128_128,21;phosphor-ghost-light,192_128,21;phosphor-ghost-thin,256_128,21;phosphor-ghost,320_128,21;phosphor-gif-bold,384_128,21;phosphor-gif-duotone,448_128,21;phosphor-gif-fill,512_128,21;phosphor-gif-light,576_128,21;phosphor-gif-thin,640_128,21;phosphor-gif,704_128,21;phosphor-gift-bold,768_128,21;phosphor-gift-duotone,832_128,21;phosphor-gift-fill,896_128,21;phosphor-gift-light,960_128,21;phosphor-gift-thin,0_192,21;phosphor-gift,64_192,21;phosphor-git-branch-bold,128_192,21;phosphor-git-branch-duotone,192_192,21;phosphor-git-branch-fill,256_192,21;phosphor-git-branch-light,320_192,21;phosphor-git-branch-thin,384_192,21;phosphor-git-branch,448_192,21;phosphor-git-commit-bold,512_192,21;phosphor-git-commit-duotone,576_192,21;phosphor-git-commit-fill,640_192,21;phosphor-git-commit-light,704_192,21;phosphor-git-commit-thin,768_192,21;phosphor-git-commit,832_192,21;phosphor-git-diff-bold,896_192,21;phosphor-git-diff-duotone,960_192,21;phosphor-git-diff-fill,0_256,21;phosphor-git-diff-light,64_256,21;phosphor-git-diff-thin,128_256,21;phosphor-git-diff,192_256,21;phosphor-git-fork-bold,256_256,21;phosphor-git-fork-duotone,320_256,21;phosphor-git-fork-fill,384_256,21;phosphor-git-fork-light,448_256,21;phosphor-git-fork-thin,512_256,21;phosphor-git-fork,576_256,21;phosphor-git-merge-bold,640_256,21;phosphor-git-merge-duotone,704_256,21;phosphor-git-merge-fill,768_256,21;phosphor-git-merge-light,832_256,21;phosphor-git-merge-thin,896_256,21;phosphor-git-merge,960_256,21;phosphor-git-pull-request-bold,0_320,21;phosphor-git-pull-request-duotone,64_320,21;phosphor-git-pull-request-fill,128_320,21;phosphor-git-pull-request-light,192_320,21;phosphor-git-pull-request-thin,256_320,21;phosphor-git-pull-request,320_320,21;phosphor-github-logo-bold,384_320,21;phosphor-github-logo-duotone,448_320,21;phosphor-github-logo-fill,512_320,21;phosphor-github-logo-light,576_320,21;phosphor-github-logo-thin,640_320,21;phosphor-github-logo,704_320,21;phosphor-gitlab-logo-bold,768_320,21;phosphor-gitlab-logo-duotone,832_320,21;phosphor-gitlab-logo-fill,896_320,21;phosphor-gitlab-logo-light,960_320,21;phosphor-gitlab-logo-simple-bold,0_384,21;phosphor-gitlab-logo-simple-duotone,64_384,21;phosphor-gitlab-logo-simple-fill,128_384,21;phosphor-gitlab-logo-simple-light,192_384,21;phosphor-gitlab-logo-simple-thin,256_384,21;phosphor-gitlab-logo-simple,320_384,21;phosphor-gitlab-logo-thin,384_384,21;phosphor-gitlab-logo,448_384,21;phosphor-globe-bold,512_384,21;phosphor-globe-duotone,576_384,21;phosphor-globe-fill,640_384,21;phosphor-globe-hemisphere-east-bold,704_384,21;phosphor-globe-hemisphere-east-duotone,768_384,21;phosphor-globe-hemisphere-east-fill,832_384,21;phosphor-globe-hemisphere-east-light,896_384,21;phosphor-globe-hemisphere-east-thin,960_384,21;phosphor-globe-hemisphere-east,0_448,21;phosphor-globe-hemisphere-west-bold,64_448,21;phosphor-globe-hemisphere-west-duotone,128_448,21;phosphor-globe-hemisphere-west-fill,192_448,21;phosphor-globe-hemisphere-west-light,256_448,21;phosphor-globe-hemisphere-west-thin,320_448,21;phosphor-globe-hemisphere-west,384_448,21;phosphor-globe-light,448_448,21;phosphor-globe-simple-bold,512_448,21;phosphor-globe-simple-duotone,576_448,21;phosphor-globe-simple-fill,640_448,21;phosphor-globe-simple-light,704_448,21;phosphor-globe-simple-thin,768_448,21;phosphor-globe-simple-x-bold,832_448,21;phosphor-globe-simple-x-duotone,896_448,21;phosphor-globe-simple-x-fill,960_448,21;phosphor-globe-simple-x-light,0_512,21;phosphor-globe-simple-x-thin,64_512,21;phosphor-globe-simple-x,128_512,21;phosphor-globe-simple,192_512,21;phosphor-globe-stand-bold,256_512,21;phosphor-globe-stand-duotone,320_512,21;phosphor-globe-stand-fill,384_512,21;phosphor-globe-stand-light,448_512,21;phosphor-globe-stand-thin,512_512,21;phosphor-globe-stand,576_512,21;phosphor-globe-thin,640_512,21;phosphor-globe-x-bold,704_512,21;phosphor-globe-x-duotone,768_512,21;phosphor-globe-x-fill,832_512,21;phosphor-globe-x-light,896_512,21;phosphor-globe-x-thin,960_512,21;phosphor-globe-x,0_576,21;phosphor-globe,64_576,21;phosphor-goggles-bold,128_576,21;phosphor-goggles-duotone,192_576,21;phosphor-goggles-fill,256_576,21;phosphor-goggles-light,320_576,21;phosphor-goggles-thin,384_576,21;phosphor-goggles,448_576,21;phosphor-golf-bold,512_576,21;phosphor-golf-duotone,576_576,21;phosphor-golf-fill,640_576,21;phosphor-golf-light,704_576,21;phosphor-golf-thin,768_576,21;phosphor-golf,832_576,21;phosphor-goodreads-logo-bold,896_576,21;phosphor-goodreads-logo-duotone,960_576,21;phosphor-goodreads-logo-fill,0_640,21;phosphor-goodreads-logo-light,64_640,21;phosphor-goodreads-logo-thin,128_640,21;phosphor-goodreads-logo,192_640,21;phosphor-google-cardboard-logo-bold,256_640,21;phosphor-google-cardboard-logo-duotone,320_640,21;phosphor-google-cardboard-logo-fill,384_640,21;phosphor-google-cardboard-logo-light,448_640,21;phosphor-google-cardboard-logo-thin,512_640,21;phosphor-google-cardboard-logo,576_640,21;phosphor-google-chrome-logo-bold,640_640,21;phosphor-google-chrome-logo-duotone,704_640,21;phosphor-google-chrome-logo-fill,768_640,21;phosphor-google-chrome-logo-light,832_640,21;phosphor-google-chrome-logo-thin,896_640,21;phosphor-google-chrome-logo,960_640,21;phosphor-google-drive-logo-bold,0_704,21;phosphor-google-drive-logo-duotone,64_704,21;phosphor-google-drive-logo-fill,128_704,21;phosphor-google-drive-logo-light,192_704,21;phosphor-google-drive-logo-thin,256_704,21;phosphor-google-drive-logo,320_704,21;phosphor-google-logo-bold,384_704,21;phosphor-google-logo-duotone,448_704,21;phosphor-google-logo-fill,512_704,21;phosphor-google-logo-light,576_704,21;phosphor-google-logo-thin,640_704,21;phosphor-google-logo,704_704,21;phosphor-google-photos-logo-bold,768_704,21;phosphor-google-photos-logo-duotone,832_704,21;phosphor-google-photos-logo-fill,896_704,21;phosphor-google-photos-logo-light,960_704,21;phosphor-google-photos-logo-thin,0_768,21;phosphor-google-photos-logo,64_768,21;phosphor-google-play-logo-bold,128_768,21;phosphor-google-play-logo-duotone,192_768,21;phosphor-google-play-logo-fill,256_768,21;phosphor-google-play-logo-light,320_768,21;phosphor-google-play-logo-thin,384_768,21;phosphor-google-play-logo,448_768,21;phosphor-google-podcasts-logo-bold,512_768,21;phosphor-google-podcasts-logo-duotone,576_768,21;phosphor-google-podcasts-logo-fill,640_768,21;phosphor-google-podcasts-logo-light,704_768,21;phosphor-google-podcasts-logo-thin,768_768,21;phosphor-google-podcasts-logo,832_768,21;phosphor-gps-bold,896_768,21;phosphor-gps-duotone,960_768,21;phosphor-gps-fill,0_832,21;phosphor-gps-fix-bold,64_832,21;phosphor-gps-fix-duotone,128_832,21;phosphor-gps-fix-fill,192_832,21;phosphor-gps-fix-light,256_832,21;phosphor-gps-fix-thin,320_832,21;phosphor-gps-fix,384_832,21;phosphor-gps-light,448_832,21;phosphor-gps-slash-bold,512_832,21;phosphor-gps-slash-duotone,576_832,21;phosphor-gps-slash-fill,640_832,21;phosphor-gps-slash-light,704_832,21;phosphor-gps-slash-thin,768_832,21;phosphor-gps-slash,832_832,21;phosphor-gps-thin,896_832,21;phosphor-gps,960_832,21;phosphor-gradient-bold,0_896,21;phosphor-gradient-duotone,64_896,21;phosphor-gradient-fill,128_896,21;phosphor-gradient-light,192_896,21;phosphor-gradient-thin,256_896,21;phosphor-gradient,320_896,21;phosphor-graduation-cap-bold,384_896,21;phosphor-graduation-cap-duotone,448_896,21;phosphor-graduation-cap-fill,512_896,21;phosphor-graduation-cap-light,576_896,21;phosphor-graduation-cap-thin,640_896,21;phosphor-graduation-cap,704_896,21;phosphor-grains-bold,768_896,21;phosphor-grains-duotone,832_896,21;phosphor-grains-fill,896_896,21;phosphor-grains-light,960_896,21;phosphor-grains-slash-bold,0_960,21;phosphor-grains-slash-duotone,64_960,21;phosphor-grains-slash-fill,128_960,21;phosphor-grains-slash-light,192_960,21;phosphor-grains-slash-thin,256_960,21;phosphor-grains-slash,320_960,21;phosphor-grains-thin,384_960,21;phosphor-grains,448_960,21;phosphor-graph-bold,512_960,21;phosphor-graph-duotone,576_960,21;phosphor-graph-fill,640_960,21;phosphor-graph-light,704_960,21;phosphor-graph-thin,768_960,21;phosphor-graph,832_960,21;phosphor-graphics-card-bold,896_960,21;phosphor-graphics-card-duotone,960_960,21;phosphor-graphics-card-fill,0_0,22;phosphor-graphics-card-light,64_0,22;phosphor-graphics-card-thin,128_0,22;phosphor-graphics-card,192_0,22;phosphor-greater-than-bold,256_0,22;phosphor-greater-than-duotone,320_0,22;phosphor-greater-than-fill,384_0,22;phosphor-greater-than-light,448_0,22;phosphor-greater-than-or-equal-bold,512_0,22;phosphor-greater-than-or-equal-duotone,576_0,22;phosphor-greater-than-or-equal-fill,640_0,22;phosphor-greater-than-or-equal-light,704_0,22;phosphor-greater-than-or-equal-thin,768_0,22;phosphor-greater-than-or-equal,832_0,22;phosphor-greater-than-thin,896_0,22;phosphor-greater-than,960_0,22;phosphor-grid-four-bold,0_64,22;phosphor-grid-four-duotone,64_64,22;phosphor-grid-four-fill,128_64,22;phosphor-grid-four-light,192_64,22;phosphor-grid-four-thin,256_64,22;phosphor-grid-four,320_64,22;phosphor-grid-nine-bold,384_64,22;phosphor-grid-nine-duotone,448_64,22;phosphor-grid-nine-fill,512_64,22;phosphor-grid-nine-light,576_64,22;phosphor-grid-nine-thin,640_64,22;phosphor-grid-nine,704_64,22;phosphor-guitar-bold,768_64,22;phosphor-guitar-duotone,832_64,22;phosphor-guitar-fill,896_64,22;phosphor-guitar-light,960_64,22;phosphor-guitar-thin,0_128,22;phosphor-guitar,64_128,22;phosphor-hair-dryer-bold,128_128,22;phosphor-hair-dryer-duotone,192_128,22;phosphor-hair-dryer-fill,256_128,22;phosphor-hair-dryer-light,320_128,22;phosphor-hair-dryer-thin,384_128,22;phosphor-hair-dryer,448_128,22;phosphor-hamburger-bold,512_128,22;phosphor-hamburger-duotone,576_128,22;phosphor-hamburger-fill,640_128,22;phosphor-hamburger-light,704_128,22;phosphor-hamburger-thin,768_128,22;phosphor-hamburger,832_128,22;phosphor-hammer-bold,896_128,22;phosphor-hammer-duotone,960_128,22;phosphor-hammer-fill,0_192,22;phosphor-hammer-light,64_192,22;phosphor-hammer-thin,128_192,22;phosphor-hammer,192_192,22;phosphor-hand-arrow-down-bold,256_192,22;phosphor-hand-arrow-down-duotone,320_192,22;phosphor-hand-arrow-down-fill,384_192,22;phosphor-hand-arrow-down-light,448_192,22;phosphor-hand-arrow-down-thin,512_192,22;phosphor-hand-arrow-down,576_192,22;phosphor-hand-arrow-up-bold,640_192,22;phosphor-hand-arrow-up-duotone,704_192,22;phosphor-hand-arrow-up-fill,768_192,22;phosphor-hand-arrow-up-light,832_192,22;phosphor-hand-arrow-up-thin,896_192,22;phosphor-hand-arrow-up,960_192,22;phosphor-hand-bold,0_256,22;phosphor-hand-coins-bold,64_256,22;phosphor-hand-coins-duotone,128_256,22;phosphor-hand-coins-fill,192_256,22;phosphor-hand-coins-light,256_256,22;phosphor-hand-coins-thin,320_256,22;phosphor-hand-coins,384_256,22;phosphor-hand-deposit-bold,448_256,22;phosphor-hand-deposit-duotone,512_256,22;phosphor-hand-deposit-fill,576_256,22;phosphor-hand-deposit-light,640_256,22;phosphor-hand-deposit-thin,704_256,22;phosphor-hand-deposit,768_256,22;phosphor-hand-duotone,832_256,22;phosphor-hand-eye-bold,896_256,22;phosphor-hand-eye-duotone,960_256,22;phosphor-hand-eye-fill,0_320,22;phosphor-hand-eye-light,64_320,22;phosphor-hand-eye-thin,128_320,22;phosphor-hand-eye,192_320,22;phosphor-hand-fill,256_320,22;phosphor-hand-fist-bold,320_320,22;phosphor-hand-fist-duotone,384_320,22;phosphor-hand-fist-fill,448_320,22;phosphor-hand-fist-light,512_320,22;phosphor-hand-fist-thin,576_320,22;phosphor-hand-fist,640_320,22;phosphor-hand-grabbing-bold,704_320,22;phosphor-hand-grabbing-duotone,768_320,22;phosphor-hand-grabbing-fill,832_320,22;phosphor-hand-grabbing-light,896_320,22;phosphor-hand-grabbing-thin,960_320,22;phosphor-hand-grabbing,0_384,22;phosphor-hand-heart-bold,64_384,22;phosphor-hand-heart-duotone,128_384,22;phosphor-hand-heart-fill,192_384,22;phosphor-hand-heart-light,256_384,22;phosphor-hand-heart-thin,320_384,22;phosphor-hand-heart,384_384,22;phosphor-hand-light,448_384,22;phosphor-hand-palm-bold,512_384,22;phosphor-hand-palm-duotone,576_384,22;phosphor-hand-palm-fill,640_384,22;phosphor-hand-palm-light,704_384,22;phosphor-hand-palm-thin,768_384,22;phosphor-hand-palm,832_384,22;phosphor-hand-peace-bold,896_384,22;phosphor-hand-peace-duotone,960_384,22;phosphor-hand-peace-fill,0_448,22;phosphor-hand-peace-light,64_448,22;phosphor-hand-peace-thin,128_448,22;phosphor-hand-peace,192_448,22;phosphor-hand-pointing-bold,256_448,22;phosphor-hand-pointing-duotone,320_448,22;phosphor-hand-pointing-fill,384_448,22;phosphor-hand-pointing-light,448_448,22;phosphor-hand-pointing-thin,512_448,22;phosphor-hand-pointing,576_448,22;phosphor-hand-soap-bold,640_448,22;phosphor-hand-soap-duotone,704_448,22;phosphor-hand-soap-fill,768_448,22;phosphor-hand-soap-light,832_448,22;phosphor-hand-soap-thin,896_448,22;phosphor-hand-soap,960_448,22;phosphor-hand-swipe-left-bold,0_512,22;phosphor-hand-swipe-left-duotone,64_512,22;phosphor-hand-swipe-left-fill,128_512,22;phosphor-hand-swipe-left-light,192_512,22;phosphor-hand-swipe-left-thin,256_512,22;phosphor-hand-swipe-left,320_512,22;phosphor-hand-swipe-right-bold,384_512,22;phosphor-hand-swipe-right-duotone,448_512,22;phosphor-hand-swipe-right-fill,512_512,22;phosphor-hand-swipe-right-light,576_512,22;phosphor-hand-swipe-right-thin,640_512,22;phosphor-hand-swipe-right,704_512,22;phosphor-hand-tap-bold,768_512,22;phosphor-hand-tap-duotone,832_512,22;phosphor-hand-tap-fill,896_512,22;phosphor-hand-tap-light,960_512,22;phosphor-hand-tap-thin,0_576,22;phosphor-hand-tap,64_576,22;phosphor-hand-thin,128_576,22;phosphor-hand-waving-bold,192_576,22;phosphor-hand-waving-duotone,256_576,22;phosphor-hand-waving-fill,320_576,22;phosphor-hand-waving-light,384_576,22;phosphor-hand-waving-thin,448_576,22;phosphor-hand-waving,512_576,22;phosphor-hand-withdraw-bold,576_576,22;phosphor-hand-withdraw-duotone,640_576,22;phosphor-hand-withdraw-fill,704_576,22;phosphor-hand-withdraw-light,768_576,22;phosphor-hand-withdraw-thin,832_576,22;phosphor-hand-withdraw,896_576,22;phosphor-hand,960_576,22;phosphor-handbag-bold,0_640,22;phosphor-handbag-duotone,64_640,22;phosphor-handbag-fill,128_640,22;phosphor-handbag-light,192_640,22;phosphor-handbag-simple-bold,256_640,22;phosphor-handbag-simple-duotone,320_640,22;phosphor-handbag-simple-fill,384_640,22;phosphor-handbag-simple-light,448_640,22;phosphor-handbag-simple-thin,512_640,22;phosphor-handbag-simple,576_640,22;phosphor-handbag-thin,640_640,22;phosphor-handbag,704_640,22;phosphor-hands-clapping-bold,768_640,22;phosphor-hands-clapping-duotone,832_640,22;phosphor-hands-clapping-fill,896_640,22;phosphor-hands-clapping-light,960_640,22;phosphor-hands-clapping-thin,0_704,22;phosphor-hands-clapping,64_704,22;phosphor-hands-praying-bold,128_704,22;phosphor-hands-praying-duotone,192_704,22;phosphor-hands-praying-fill,256_704,22;phosphor-hands-praying-light,320_704,22;phosphor-hands-praying-thin,384_704,22;phosphor-hands-praying,448_704,22;phosphor-handshake-bold,512_704,22;phosphor-handshake-duotone,576_704,22;phosphor-handshake-fill,640_704,22;phosphor-handshake-light,704_704,22;phosphor-handshake-thin,768_704,22;phosphor-handshake,832_704,22;phosphor-hard-drive-bold,896_704,22;phosphor-hard-drive-duotone,960_704,22;phosphor-hard-drive-fill,0_768,22;phosphor-hard-drive-light,64_768,22;phosphor-hard-drive-thin,128_768,22;phosphor-hard-drive,192_768,22;phosphor-hard-drives-bold,256_768,22;phosphor-hard-drives-duotone,320_768,22;phosphor-hard-drives-fill,384_768,22;phosphor-hard-drives-light,448_768,22;phosphor-hard-drives-thin,512_768,22;phosphor-hard-drives,576_768,22;phosphor-hard-hat-bold,640_768,22;phosphor-hard-hat-duotone,704_768,22;phosphor-hard-hat-fill,768_768,22;phosphor-hard-hat-light,832_768,22;phosphor-hard-hat-thin,896_768,22;phosphor-hard-hat,960_768,22;phosphor-hash-bold,0_832,22;phosphor-hash-duotone,64_832,22;phosphor-hash-fill,128_832,22;phosphor-hash-light,192_832,22;phosphor-hash-straight-bold,256_832,22;phosphor-hash-straight-duotone,320_832,22;phosphor-hash-straight-fill,384_832,22;phosphor-hash-straight-light,448_832,22;phosphor-hash-straight-thin,512_832,22;phosphor-hash-straight,576_832,22;phosphor-hash-thin,640_832,22;phosphor-hash,704_832,22;phosphor-head-circuit-bold,768_832,22;phosphor-head-circuit-duotone,832_832,22;phosphor-head-circuit-fill,896_832,22;phosphor-head-circuit-light,960_832,22;phosphor-head-circuit-thin,0_896,22;phosphor-head-circuit,64_896,22;phosphor-headlights-bold,128_896,22;phosphor-headlights-duotone,192_896,22;phosphor-headlights-fill,256_896,22;phosphor-headlights-light,320_896,22;phosphor-headlights-thin,384_896,22;phosphor-headlights,448_896,22;phosphor-headphones-bold,512_896,22;phosphor-headphones-duotone,576_896,22;phosphor-headphones-fill,640_896,22;phosphor-headphones-light,704_896,22;phosphor-headphones-thin,768_896,22;phosphor-headphones,832_896,22;phosphor-headset-bold,896_896,22;phosphor-headset-duotone,960_896,22;phosphor-headset-fill,0_960,22;phosphor-headset-light,64_960,22;phosphor-headset-thin,128_960,22;phosphor-headset,192_960,22;phosphor-heart-bold,256_960,22;phosphor-heart-break-bold,320_960,22;phosphor-heart-break-duotone,384_960,22;phosphor-heart-break-fill,448_960,22;phosphor-heart-break-light,512_960,22;phosphor-heart-break-thin,576_960,22;phosphor-heart-break,640_960,22;phosphor-heart-duotone,704_960,22;phosphor-heart-fill,768_960,22;phosphor-heart-half-bold,832_960,22;phosphor-heart-half-duotone,896_960,22;phosphor-heart-half-fill,960_960,22;phosphor-heart-half-light,0_0,23;phosphor-heart-half-thin,64_0,23;phosphor-heart-half,128_0,23;phosphor-heart-light,192_0,23;phosphor-heart-straight-bold,256_0,23;phosphor-heart-straight-break-bold,320_0,23;phosphor-heart-straight-break-duotone,384_0,23;phosphor-heart-straight-break-fill,448_0,23;phosphor-heart-straight-break-light,512_0,23;phosphor-heart-straight-break-thin,576_0,23;phosphor-heart-straight-break,640_0,23;phosphor-heart-straight-duotone,704_0,23;phosphor-heart-straight-fill,768_0,23;phosphor-heart-straight-light,832_0,23;phosphor-heart-straight-thin,896_0,23;phosphor-heart-straight,960_0,23;phosphor-heart-thin,0_64,23;phosphor-heart,64_64,23;phosphor-heartbeat-bold,128_64,23;phosphor-heartbeat-duotone,192_64,23;phosphor-heartbeat-fill,256_64,23;phosphor-heartbeat-light,320_64,23;phosphor-heartbeat-thin,384_64,23;phosphor-heartbeat,448_64,23;phosphor-hexagon-bold,512_64,23;phosphor-hexagon-duotone,576_64,23;phosphor-hexagon-fill,640_64,23;phosphor-hexagon-light,704_64,23;phosphor-hexagon-thin,768_64,23;phosphor-hexagon,832_64,23;phosphor-high-definition-bold,896_64,23;phosphor-high-definition-duotone,960_64,23;phosphor-high-definition-fill,0_128,23;phosphor-high-definition-light,64_128,23;phosphor-high-definition-thin,128_128,23;phosphor-high-definition,192_128,23;phosphor-high-heel-bold,256_128,23;phosphor-high-heel-duotone,320_128,23;phosphor-high-heel-fill,384_128,23;phosphor-high-heel-light,448_128,23;phosphor-high-heel-thin,512_128,23;phosphor-high-heel,576_128,23;phosphor-highlighter-bold,640_128,23;phosphor-highlighter-circle-bold,704_128,23;phosphor-highlighter-circle-duotone,768_128,23;phosphor-highlighter-circle-fill,832_128,23;phosphor-highlighter-circle-light,896_128,23;phosphor-highlighter-circle-thin,960_128,23;phosphor-highlighter-circle,0_192,23;phosphor-highlighter-duotone,64_192,23;phosphor-highlighter-fill,128_192,23;phosphor-highlighter-light,192_192,23;phosphor-highlighter-thin,256_192,23;phosphor-highlighter,320_192,23;phosphor-hockey-bold,384_192,23;phosphor-hockey-duotone,448_192,23;phosphor-hockey-fill,512_192,23;phosphor-hockey-light,576_192,23;phosphor-hockey-thin,640_192,23;phosphor-hockey,704_192,23;phosphor-hoodie-bold,768_192,23;phosphor-hoodie-duotone,832_192,23;phosphor-hoodie-fill,896_192,23;phosphor-hoodie-light,960_192,23;phosphor-hoodie-thin,0_256,23;phosphor-hoodie,64_256,23;phosphor-horse-bold,128_256,23;phosphor-horse-duotone,192_256,23;phosphor-horse-fill,256_256,23;phosphor-horse-light,320_256,23;phosphor-horse-thin,384_256,23;phosphor-horse,448_256,23;phosphor-hospital-bold,512_256,23;phosphor-hospital-duotone,576_256,23;phosphor-hospital-fill,640_256,23;phosphor-hospital-light,704_256,23;phosphor-hospital-thin,768_256,23;phosphor-hospital,832_256,23;phosphor-hourglass-bold,896_256,23;phosphor-hourglass-duotone,960_256,23;phosphor-hourglass-fill,0_320,23;phosphor-hourglass-high-bold,64_320,23;phosphor-hourglass-high-duotone,128_320,23;phosphor-hourglass-high-fill,192_320,23;phosphor-hourglass-high-light,256_320,23;phosphor-hourglass-high-thin,320_320,23;phosphor-hourglass-high,384_320,23;phosphor-hourglass-light,448_320,23;phosphor-hourglass-low-bold,512_320,23;phosphor-hourglass-low-duotone,576_320,23;phosphor-hourglass-low-fill,640_320,23;phosphor-hourglass-low-light,704_320,23;phosphor-hourglass-low-thin,768_320,23;phosphor-hourglass-low,832_320,23;phosphor-hourglass-medium-bold,896_320,23;phosphor-hourglass-medium-duotone,960_320,23;phosphor-hourglass-medium-fill,0_384,23;phosphor-hourglass-medium-light,64_384,23;phosphor-hourglass-medium-thin,128_384,23;phosphor-hourglass-medium,192_384,23;phosphor-hourglass-simple-bold,256_384,23;phosphor-hourglass-simple-duotone,320_384,23;phosphor-hourglass-simple-fill,384_384,23;phosphor-hourglass-simple-high-bold,448_384,23;phosphor-hourglass-simple-high-duotone,512_384,23;phosphor-hourglass-simple-high-fill,576_384,23;phosphor-hourglass-simple-high-light,640_384,23;phosphor-hourglass-simple-high-thin,704_384,23;phosphor-hourglass-simple-high,768_384,23;phosphor-hourglass-simple-light,832_384,23;phosphor-hourglass-simple-low-bold,896_384,23;phosphor-hourglass-simple-low-duotone,960_384,23;phosphor-hourglass-simple-low-fill,0_448,23;phosphor-hourglass-simple-low-light,64_448,23;phosphor-hourglass-simple-low-thin,128_448,23;phosphor-hourglass-simple-low,192_448,23;phosphor-hourglass-simple-medium-bold,256_448,23;phosphor-hourglass-simple-medium-duotone,320_448,23;phosphor-hourglass-simple-medium-fill,384_448,23;phosphor-hourglass-simple-medium-light,448_448,23;phosphor-hourglass-simple-medium-thin,512_448,23;phosphor-hourglass-simple-medium,576_448,23;phosphor-hourglass-simple-thin,640_448,23;phosphor-hourglass-simple,704_448,23;phosphor-hourglass-thin,768_448,23;phosphor-hourglass,832_448,23;phosphor-house-bold,896_448,23;phosphor-house-duotone,960_448,23;phosphor-house-fill,0_512,23;phosphor-house-light,64_512,23;phosphor-house-line-bold,128_512,23;phosphor-house-line-duotone,192_512,23;phosphor-house-line-fill,256_512,23;phosphor-house-line-light,320_512,23;phosphor-house-line-thin,384_512,23;phosphor-house-line,448_512,23;phosphor-house-simple-bold,512_512,23;phosphor-house-simple-duotone,576_512,23;phosphor-house-simple-fill,640_512,23;phosphor-house-simple-light,704_512,23;phosphor-house-simple-thin,768_512,23;phosphor-house-simple,832_512,23;phosphor-house-thin,896_512,23;phosphor-house,960_512,23;phosphor-hurricane-bold,0_576,23;phosphor-hurricane-duotone,64_576,23;phosphor-hurricane-fill,128_576,23;phosphor-hurricane-light,192_576,23;phosphor-hurricane-thin,256_576,23;phosphor-hurricane,320_576,23;phosphor-ice-cream-bold,384_576,23;phosphor-ice-cream-duotone,448_576,23;phosphor-ice-cream-fill,512_576,23;phosphor-ice-cream-light,576_576,23;phosphor-ice-cream-thin,640_576,23;phosphor-ice-cream,704_576,23;phosphor-identification-badge-bold,768_576,23;phosphor-identification-badge-duotone,832_576,23;phosphor-identification-badge-fill,896_576,23;phosphor-identification-badge-light,960_576,23;phosphor-identification-badge-thin,0_640,23;phosphor-identification-badge,64_640,23;phosphor-identification-card-bold,128_640,23;phosphor-identification-card-duotone,192_640,23;phosphor-identification-card-fill,256_640,23;phosphor-identification-card-light,320_640,23;phosphor-identification-card-thin,384_640,23;phosphor-identification-card,448_640,23;phosphor-image-bold,512_640,23;phosphor-image-broken-bold,576_640,23;phosphor-image-broken-duotone,640_640,23;phosphor-image-broken-fill,704_640,23;phosphor-image-broken-light,768_640,23;phosphor-image-broken-thin,832_640,23;phosphor-image-broken,896_640,23;phosphor-image-duotone,960_640,23;phosphor-image-fill,0_704,23;phosphor-image-light,64_704,23;phosphor-image-square-bold,128_704,23;phosphor-image-square-duotone,192_704,23;phosphor-image-square-fill,256_704,23;phosphor-image-square-light,320_704,23;phosphor-image-square-thin,384_704,23;phosphor-image-square,448_704,23;phosphor-image-thin,512_704,23;phosphor-image,576_704,23;phosphor-images-bold,640_704,23;phosphor-images-duotone,704_704,23;phosphor-images-fill,768_704,23;phosphor-images-light,832_704,23;phosphor-images-square-bold,896_704,23;phosphor-images-square-duotone,960_704,23;phosphor-images-square-fill,0_768,23;phosphor-images-square-light,64_768,23;phosphor-images-square-thin,128_768,23;phosphor-images-square,192_768,23;phosphor-images-thin,256_768,23;phosphor-images,320_768,23;phosphor-infinity-bold,384_768,23;phosphor-infinity-duotone,448_768,23;phosphor-infinity-fill,512_768,23;phosphor-infinity-light,576_768,23;phosphor-infinity-thin,640_768,23;phosphor-infinity,704_768,23;phosphor-info-bold,768_768,23;phosphor-info-duotone,832_768,23;phosphor-info-fill,896_768,23;phosphor-info-light,960_768,23;phosphor-info-thin,0_832,23;phosphor-info,64_832,23;phosphor-instagram-logo-bold,128_832,23;phosphor-instagram-logo-duotone,192_832,23;phosphor-instagram-logo-fill,256_832,23;phosphor-instagram-logo-light,320_832,23;phosphor-instagram-logo-thin,384_832,23;phosphor-instagram-logo,448_832,23;phosphor-intersect-bold,512_832,23;phosphor-intersect-duotone,576_832,23;phosphor-intersect-fill,640_832,23;phosphor-intersect-light,704_832,23;phosphor-intersect-square-bold,768_832,23;phosphor-intersect-square-duotone,832_832,23;phosphor-intersect-square-fill,896_832,23;phosphor-intersect-square-light,960_832,23;phosphor-intersect-square-thin,0_896,23;phosphor-intersect-square,64_896,23;phosphor-intersect-thin,128_896,23;phosphor-intersect-three-bold,192_896,23;phosphor-intersect-three-duotone,256_896,23;phosphor-intersect-three-fill,320_896,23;phosphor-intersect-three-light,384_896,23;phosphor-intersect-three-thin,448_896,23;phosphor-intersect-three,512_896,23;phosphor-intersect,576_896,23;phosphor-intersection-bold,640_896,23;phosphor-intersection-duotone,704_896,23;phosphor-intersection-fill,768_896,23;phosphor-intersection-light,832_896,23;phosphor-intersection-thin,896_896,23;phosphor-intersection,960_896,23;phosphor-invoice-bold,0_960,23;phosphor-invoice-duotone,64_960,23;phosphor-invoice-fill,128_960,23;phosphor-invoice-light,192_960,23;phosphor-invoice-thin,256_960,23;phosphor-invoice,320_960,23;phosphor-island-bold,384_960,23;phosphor-island-duotone,448_960,23;phosphor-island-fill,512_960,23;phosphor-island-light,576_960,23;phosphor-island-thin,640_960,23;phosphor-island,704_960,23;phosphor-jar-bold,768_960,23;phosphor-jar-duotone,832_960,23;phosphor-jar-fill,896_960,23;phosphor-jar-label-bold,960_960,23;phosphor-jar-label-duotone,0_0,24;phosphor-jar-label-fill,64_0,24;phosphor-jar-label-light,128_0,24;phosphor-jar-label-thin,192_0,24;phosphor-jar-label,256_0,24;phosphor-jar-light,320_0,24;phosphor-jar-thin,384_0,24;phosphor-jar,448_0,24;phosphor-jeep-bold,512_0,24;phosphor-jeep-duotone,576_0,24;phosphor-jeep-fill,640_0,24;phosphor-jeep-light,704_0,24;phosphor-jeep-thin,768_0,24;phosphor-jeep,832_0,24;phosphor-joystick-bold,896_0,24;phosphor-joystick-duotone,960_0,24;phosphor-joystick-fill,0_64,24;phosphor-joystick-light,64_64,24;phosphor-joystick-thin,128_64,24;phosphor-joystick,192_64,24;phosphor-kanban-bold,256_64,24;phosphor-kanban-duotone,320_64,24;phosphor-kanban-fill,384_64,24;phosphor-kanban-light,448_64,24;phosphor-kanban-thin,512_64,24;phosphor-kanban,576_64,24;phosphor-key-bold,640_64,24;phosphor-key-duotone,704_64,24;phosphor-key-fill,768_64,24;phosphor-key-light,832_64,24;phosphor-key-return-bold,896_64,24;phosphor-key-return-duotone,960_64,24;phosphor-key-return-fill,0_128,24;phosphor-key-return-light,64_128,24;phosphor-key-return-thin,128_128,24;phosphor-key-return,192_128,24;phosphor-key-thin,256_128,24;phosphor-key,320_128,24;phosphor-keyboard-bold,384_128,24;phosphor-keyboard-duotone,448_128,24;phosphor-keyboard-fill,512_128,24;phosphor-keyboard-light,576_128,24;phosphor-keyboard-thin,640_128,24;phosphor-keyboard,704_128,24;phosphor-keyhole-bold,768_128,24;phosphor-keyhole-duotone,832_128,24;phosphor-keyhole-fill,896_128,24;phosphor-keyhole-light,960_128,24;phosphor-keyhole-thin,0_192,24;phosphor-keyhole,64_192,24;phosphor-knife-bold,128_192,24;phosphor-knife-duotone,192_192,24;phosphor-knife-fill,256_192,24;phosphor-knife-light,320_192,24;phosphor-knife-thin,384_192,24;phosphor-knife,448_192,24;phosphor-ladder-bold,512_192,24;phosphor-ladder-duotone,576_192,24;phosphor-ladder-fill,640_192,24;phosphor-ladder-light,704_192,24;phosphor-ladder-simple-bold,768_192,24;phosphor-ladder-simple-duotone,832_192,24;phosphor-ladder-simple-fill,896_192,24;phosphor-ladder-simple-light,960_192,24;phosphor-ladder-simple-thin,0_256,24;phosphor-ladder-simple,64_256,24;phosphor-ladder-thin,128_256,24;phosphor-ladder,192_256,24;phosphor-lamp-bold,256_256,24;phosphor-lamp-duotone,320_256,24;phosphor-lamp-fill,384_256,24;phosphor-lamp-light,448_256,24;phosphor-lamp-pendant-bold,512_256,24;phosphor-lamp-pendant-duotone,576_256,24;phosphor-lamp-pendant-fill,640_256,24;phosphor-lamp-pendant-light,704_256,24;phosphor-lamp-pendant-thin,768_256,24;phosphor-lamp-pendant,832_256,24;phosphor-lamp-thin,896_256,24;phosphor-lamp,960_256,24;phosphor-laptop-bold,0_320,24;phosphor-laptop-duotone,64_320,24;phosphor-laptop-fill,128_320,24;phosphor-laptop-light,192_320,24;phosphor-laptop-thin,256_320,24;phosphor-laptop,320_320,24;phosphor-lasso-bold,384_320,24;phosphor-lasso-duotone,448_320,24;phosphor-lasso-fill,512_320,24;phosphor-lasso-light,576_320,24;phosphor-lasso-thin,640_320,24;phosphor-lasso,704_320,24;phosphor-lastfm-logo-bold,768_320,24;phosphor-lastfm-logo-duotone,832_320,24;phosphor-lastfm-logo-fill,896_320,24;phosphor-lastfm-logo-light,960_320,24;phosphor-lastfm-logo-thin,0_384,24;phosphor-lastfm-logo,64_384,24;phosphor-layout-bold,128_384,24;phosphor-layout-duotone,192_384,24;phosphor-layout-fill,256_384,24;phosphor-layout-light,320_384,24;phosphor-layout-thin,384_384,24;phosphor-layout,448_384,24;phosphor-leaf-bold,512_384,24;phosphor-leaf-duotone,576_384,24;phosphor-leaf-fill,640_384,24;phosphor-leaf-light,704_384,24;phosphor-leaf-thin,768_384,24;phosphor-leaf,832_384,24;phosphor-lectern-bold,896_384,24;phosphor-lectern-duotone,960_384,24;phosphor-lectern-fill,0_448,24;phosphor-lectern-light,64_448,24;phosphor-lectern-thin,128_448,24;phosphor-lectern,192_448,24;phosphor-lego-bold,256_448,24;phosphor-lego-duotone,320_448,24;phosphor-lego-fill,384_448,24;phosphor-lego-light,448_448,24;phosphor-lego-smiley-bold,512_448,24;phosphor-lego-smiley-duotone,576_448,24;phosphor-lego-smiley-fill,640_448,24;phosphor-lego-smiley-light,704_448,24;phosphor-lego-smiley-thin,768_448,24;phosphor-lego-smiley,832_448,24;phosphor-lego-thin,896_448,24;phosphor-lego,960_448,24;phosphor-less-than-bold,0_512,24;phosphor-less-than-duotone,64_512,24;phosphor-less-than-fill,128_512,24;phosphor-less-than-light,192_512,24;phosphor-less-than-or-equal-bold,256_512,24;phosphor-less-than-or-equal-duotone,320_512,24;phosphor-less-than-or-equal-fill,384_512,24;phosphor-less-than-or-equal-light,448_512,24;phosphor-less-than-or-equal-thin,512_512,24;phosphor-less-than-or-equal,576_512,24;phosphor-less-than-thin,640_512,24;phosphor-less-than,704_512,24;phosphor-letter-circle-h-bold,768_512,24;phosphor-letter-circle-h-duotone,832_512,24;phosphor-letter-circle-h-fill,896_512,24;phosphor-letter-circle-h-light,960_512,24;phosphor-letter-circle-h-thin,0_576,24;phosphor-letter-circle-h,64_576,24;phosphor-letter-circle-p-bold,128_576,24;phosphor-letter-circle-p-duotone,192_576,24;phosphor-letter-circle-p-fill,256_576,24;phosphor-letter-circle-p-light,320_576,24;phosphor-letter-circle-p-thin,384_576,24;phosphor-letter-circle-p,448_576,24;phosphor-letter-circle-v-bold,512_576,24;phosphor-letter-circle-v-duotone,576_576,24;phosphor-letter-circle-v-fill,640_576,24;phosphor-letter-circle-v-light,704_576,24;phosphor-letter-circle-v-thin,768_576,24;phosphor-letter-circle-v,832_576,24;phosphor-lifebuoy-bold,896_576,24;phosphor-lifebuoy-duotone,960_576,24;phosphor-lifebuoy-fill,0_640,24;phosphor-lifebuoy-light,64_640,24;phosphor-lifebuoy-thin,128_640,24;phosphor-lifebuoy,192_640,24;phosphor-lightbulb-bold,256_640,24;phosphor-lightbulb-duotone,320_640,24;phosphor-lightbulb-filament-bold,384_640,24;phosphor-lightbulb-filament-duotone,448_640,24;phosphor-lightbulb-filament-fill,512_640,24;phosphor-lightbulb-filament-light,576_640,24;phosphor-lightbulb-filament-thin,640_640,24;phosphor-lightbulb-filament,704_640,24;phosphor-lightbulb-fill,768_640,24;phosphor-lightbulb-light,832_640,24;phosphor-lightbulb-thin,896_640,24;phosphor-lightbulb,960_640,24;phosphor-lighthouse-bold,0_704,24;phosphor-lighthouse-duotone,64_704,24;phosphor-lighthouse-fill,128_704,24;phosphor-lighthouse-light,192_704,24;phosphor-lighthouse-thin,256_704,24;phosphor-lighthouse,320_704,24;phosphor-lightning-a-bold,384_704,24;phosphor-lightning-a-duotone,448_704,24;phosphor-lightning-a-fill,512_704,24;phosphor-lightning-a-light,576_704,24;phosphor-lightning-a-thin,640_704,24;phosphor-lightning-a,704_704,24;phosphor-lightning-bold,768_704,24;phosphor-lightning-duotone,832_704,24;phosphor-lightning-fill,896_704,24;phosphor-lightning-light,960_704,24;phosphor-lightning-slash-bold,0_768,24;phosphor-lightning-slash-duotone,64_768,24;phosphor-lightning-slash-fill,128_768,24;phosphor-lightning-slash-light,192_768,24;phosphor-lightning-slash-thin,256_768,24;phosphor-lightning-slash,320_768,24;phosphor-lightning-thin,384_768,24;phosphor-lightning,448_768,24;phosphor-line-segment-bold,512_768,24;phosphor-line-segment-duotone,576_768,24;phosphor-line-segment-fill,640_768,24;phosphor-line-segment-light,704_768,24;phosphor-line-segment-thin,768_768,24;phosphor-line-segment,832_768,24;phosphor-line-segments-bold,896_768,24;phosphor-line-segments-duotone,960_768,24;phosphor-line-segments-fill,0_832,24;phosphor-line-segments-light,64_832,24;phosphor-line-segments-thin,128_832,24;phosphor-line-segments,192_832,24;phosphor-line-vertical-bold,256_832,24;phosphor-line-vertical-duotone,320_832,24;phosphor-line-vertical-fill,384_832,24;phosphor-line-vertical-light,448_832,24;phosphor-line-vertical-thin,512_832,24;phosphor-line-vertical,576_832,24;phosphor-link-bold,640_832,24;phosphor-link-break-bold,704_832,24;phosphor-link-break-duotone,768_832,24;phosphor-link-break-fill,832_832,24;phosphor-link-break-light,896_832,24;phosphor-link-break-thin,960_832,24;phosphor-link-break,0_896,24;phosphor-link-duotone,64_896,24;phosphor-link-fill,128_896,24;phosphor-link-light,192_896,24;phosphor-link-simple-bold,256_896,24;phosphor-link-simple-break-bold,320_896,24;phosphor-link-simple-break-duotone,384_896,24;phosphor-link-simple-break-fill,448_896,24;phosphor-link-simple-break-light,512_896,24;phosphor-link-simple-break-thin,576_896,24;phosphor-link-simple-break,640_896,24;phosphor-link-simple-duotone,704_896,24;phosphor-link-simple-fill,768_896,24;phosphor-link-simple-horizontal-bold,832_896,24;phosphor-link-simple-horizontal-break-bold,896_896,24;phosphor-link-simple-horizontal-break-duotone,960_896,24;phosphor-link-simple-horizontal-break-fill,0_960,24;phosphor-link-simple-horizontal-break-light,64_960,24;phosphor-link-simple-horizontal-break-thin,128_960,24;phosphor-link-simple-horizontal-break,192_960,24;phosphor-link-simple-horizontal-duotone,256_960,24;phosphor-link-simple-horizontal-fill,320_960,24;phosphor-link-simple-horizontal-light,384_960,24;phosphor-link-simple-horizontal-thin,448_960,24;phosphor-link-simple-horizontal,512_960,24;phosphor-link-simple-light,576_960,24;phosphor-link-simple-thin,640_960,24;phosphor-link-simple,704_960,24;phosphor-link-thin,768_960,24;phosphor-link,832_960,24;phosphor-linkedin-logo-bold,896_960,24;phosphor-linkedin-logo-duotone,960_960,24;phosphor-linkedin-logo-fill,0_0,25;phosphor-linkedin-logo-light,64_0,25;phosphor-linkedin-logo-thin,128_0,25;phosphor-linkedin-logo,192_0,25;phosphor-linktree-logo-bold,256_0,25;phosphor-linktree-logo-duotone,320_0,25;phosphor-linktree-logo-fill,384_0,25;phosphor-linktree-logo-light,448_0,25;phosphor-linktree-logo-thin,512_0,25;phosphor-linktree-logo,576_0,25;phosphor-linux-logo-bold,640_0,25;phosphor-linux-logo-duotone,704_0,25;phosphor-linux-logo-fill,768_0,25;phosphor-linux-logo-light,832_0,25;phosphor-linux-logo-thin,896_0,25;phosphor-linux-logo,960_0,25;phosphor-list-bold,0_64,25;phosphor-list-bullets-bold,64_64,25;phosphor-list-bullets-duotone,128_64,25;phosphor-list-bullets-fill,192_64,25;phosphor-list-bullets-light,256_64,25;phosphor-list-bullets-thin,320_64,25;phosphor-list-bullets,384_64,25;phosphor-list-checks-bold,448_64,25;phosphor-list-checks-duotone,512_64,25;phosphor-list-checks-fill,576_64,25;phosphor-list-checks-light,640_64,25;phosphor-list-checks-thin,704_64,25;phosphor-list-checks,768_64,25;phosphor-list-dashes-bold,832_64,25;phosphor-list-dashes-duotone,896_64,25;phosphor-list-dashes-fill,960_64,25;phosphor-list-dashes-light,0_128,25;phosphor-list-dashes-thin,64_128,25;phosphor-list-dashes,128_128,25;phosphor-list-duotone,192_128,25;phosphor-list-fill,256_128,25;phosphor-list-heart-bold,320_128,25;phosphor-list-heart-duotone,384_128,25;phosphor-list-heart-fill,448_128,25;phosphor-list-heart-light,512_128,25;phosphor-list-heart-thin,576_128,25;phosphor-list-heart,640_128,25;phosphor-list-light,704_128,25;phosphor-list-magnifying-glass-bold,768_128,25;phosphor-list-magnifying-glass-duotone,832_128,25;phosphor-list-magnifying-glass-fill,896_128,25;phosphor-list-magnifying-glass-light,960_128,25;phosphor-list-magnifying-glass-thin,0_192,25;phosphor-list-magnifying-glass,64_192,25;phosphor-list-numbers-bold,128_192,25;phosphor-list-numbers-duotone,192_192,25;phosphor-list-numbers-fill,256_192,25;phosphor-list-numbers-light,320_192,25;phosphor-list-numbers-thin,384_192,25;phosphor-list-numbers,448_192,25;phosphor-list-plus-bold,512_192,25;phosphor-list-plus-duotone,576_192,25;phosphor-list-plus-fill,640_192,25;phosphor-list-plus-light,704_192,25;phosphor-list-plus-thin,768_192,25;phosphor-list-plus,832_192,25;phosphor-list-star-bold,896_192,25;phosphor-list-star-duotone,960_192,25;phosphor-list-star-fill,0_256,25;phosphor-list-star-light,64_256,25;phosphor-list-star-thin,128_256,25;phosphor-list-star,192_256,25;phosphor-list-thin,256_256,25;phosphor-list,320_256,25;phosphor-lock-bold,384_256,25;phosphor-lock-duotone,448_256,25;phosphor-lock-fill,512_256,25;phosphor-lock-key-bold,576_256,25;phosphor-lock-key-duotone,640_256,25;phosphor-lock-key-fill,704_256,25;phosphor-lock-key-light,768_256,25;phosphor-lock-key-open-bold,832_256,25;phosphor-lock-key-open-duotone,896_256,25;phosphor-lock-key-open-fill,960_256,25;phosphor-lock-key-open-light,0_320,25;phosphor-lock-key-open-thin,64_320,25;phosphor-lock-key-open,128_320,25;phosphor-lock-key-thin,192_320,25;phosphor-lock-key,256_320,25;phosphor-lock-laminated-bold,320_320,25;phosphor-lock-laminated-duotone,384_320,25;phosphor-lock-laminated-fill,448_320,25;phosphor-lock-laminated-light,512_320,25;phosphor-lock-laminated-open-bold,576_320,25;phosphor-lock-laminated-open-duotone,640_320,25;phosphor-lock-laminated-open-fill,704_320,25;phosphor-lock-laminated-open-light,768_320,25;phosphor-lock-laminated-open-thin,832_320,25;phosphor-lock-laminated-open,896_320,25;phosphor-lock-laminated-thin,960_320,25;phosphor-lock-laminated,0_384,25;phosphor-lock-light,64_384,25;phosphor-lock-open-bold,128_384,25;phosphor-lock-open-duotone,192_384,25;phosphor-lock-open-fill,256_384,25;phosphor-lock-open-light,320_384,25;phosphor-lock-open-thin,384_384,25;phosphor-lock-open,448_384,25;phosphor-lock-simple-bold,512_384,25;phosphor-lock-simple-duotone,576_384,25;phosphor-lock-simple-fill,640_384,25;phosphor-lock-simple-light,704_384,25;phosphor-lock-simple-open-bold,768_384,25;phosphor-lock-simple-open-duotone,832_384,25;phosphor-lock-simple-open-fill,896_384,25;phosphor-lock-simple-open-light,960_384,25;phosphor-lock-simple-open-thin,0_448,25;phosphor-lock-simple-open,64_448,25;phosphor-lock-simple-thin,128_448,25;phosphor-lock-simple,192_448,25;phosphor-lock-thin,256_448,25;phosphor-lock,320_448,25;phosphor-lockers-bold,384_448,25;phosphor-lockers-duotone,448_448,25;phosphor-lockers-fill,512_448,25;phosphor-lockers-light,576_448,25;phosphor-lockers-thin,640_448,25;phosphor-lockers,704_448,25;phosphor-log-bold,768_448,25;phosphor-log-duotone,832_448,25;phosphor-log-fill,896_448,25;phosphor-log-light,960_448,25;phosphor-log-thin,0_512,25;phosphor-log,64_512,25;phosphor-magic-wand-bold,128_512,25;phosphor-magic-wand-duotone,192_512,25;phosphor-magic-wand-fill,256_512,25;phosphor-magic-wand-light,320_512,25;phosphor-magic-wand-thin,384_512,25;phosphor-magic-wand,448_512,25;phosphor-magnet-bold,512_512,25;phosphor-magnet-duotone,576_512,25;phosphor-magnet-fill,640_512,25;phosphor-magnet-light,704_512,25;phosphor-magnet-straight-bold,768_512,25;phosphor-magnet-straight-duotone,832_512,25;phosphor-magnet-straight-fill,896_512,25;phosphor-magnet-straight-light,960_512,25;phosphor-magnet-straight-thin,0_576,25;phosphor-magnet-straight,64_576,25;phosphor-magnet-thin,128_576,25;phosphor-magnet,192_576,25;phosphor-magnifying-glass-bold,256_576,25;phosphor-magnifying-glass-duotone,320_576,25;phosphor-magnifying-glass-fill,384_576,25;phosphor-magnifying-glass-light,448_576,25;phosphor-magnifying-glass-minus-bold,512_576,25;phosphor-magnifying-glass-minus-duotone,576_576,25;phosphor-magnifying-glass-minus-fill,640_576,25;phosphor-magnifying-glass-minus-light,704_576,25;phosphor-magnifying-glass-minus-thin,768_576,25;phosphor-magnifying-glass-minus,832_576,25;phosphor-magnifying-glass-plus-bold,896_576,25;phosphor-magnifying-glass-plus-duotone,960_576,25;phosphor-magnifying-glass-plus-fill,0_640,25;phosphor-magnifying-glass-plus-light,64_640,25;phosphor-magnifying-glass-plus-thin,128_640,25;phosphor-magnifying-glass-plus,192_640,25;phosphor-magnifying-glass-thin,256_640,25;phosphor-magnifying-glass,320_640,25;phosphor-mailbox-bold,384_640,25;phosphor-mailbox-duotone,448_640,25;phosphor-mailbox-fill,512_640,25;phosphor-mailbox-light,576_640,25;phosphor-mailbox-thin,640_640,25;phosphor-mailbox,704_640,25;phosphor-map-pin-area-bold,768_640,25;phosphor-map-pin-area-duotone,832_640,25;phosphor-map-pin-area-fill,896_640,25;phosphor-map-pin-area-light,960_640,25;phosphor-map-pin-area-thin,0_704,25;phosphor-map-pin-area,64_704,25;phosphor-map-pin-bold,128_704,25;phosphor-map-pin-duotone,192_704,25;phosphor-map-pin-fill,256_704,25;phosphor-map-pin-light,320_704,25;phosphor-map-pin-line-bold,384_704,25;phosphor-map-pin-line-duotone,448_704,25;phosphor-map-pin-line-fill,512_704,25;phosphor-map-pin-line-light,576_704,25;phosphor-map-pin-line-thin,640_704,25;phosphor-map-pin-line,704_704,25;phosphor-map-pin-plus-bold,768_704,25;phosphor-map-pin-plus-duotone,832_704,25;phosphor-map-pin-plus-fill,896_704,25;phosphor-map-pin-plus-light,960_704,25;phosphor-map-pin-plus-thin,0_768,25;phosphor-map-pin-plus,64_768,25;phosphor-map-pin-simple-area-bold,128_768,25;phosphor-map-pin-simple-area-duotone,192_768,25;phosphor-map-pin-simple-area-fill,256_768,25;phosphor-map-pin-simple-area-light,320_768,25;phosphor-map-pin-simple-area-thin,384_768,25;phosphor-map-pin-simple-area,448_768,25;phosphor-map-pin-simple-bold,512_768,25;phosphor-map-pin-simple-duotone,576_768,25;phosphor-map-pin-simple-fill,640_768,25;phosphor-map-pin-simple-light,704_768,25;phosphor-map-pin-simple-line-bold,768_768,25;phosphor-map-pin-simple-line-duotone,832_768,25;phosphor-map-pin-simple-line-fill,896_768,25;phosphor-map-pin-simple-line-light,960_768,25;phosphor-map-pin-simple-line-thin,0_832,25;phosphor-map-pin-simple-line,64_832,25;phosphor-map-pin-simple-thin,128_832,25;phosphor-map-pin-simple,192_832,25;phosphor-map-pin-thin,256_832,25;phosphor-map-pin,320_832,25;phosphor-map-trifold-bold,384_832,25;phosphor-map-trifold-duotone,448_832,25;phosphor-map-trifold-fill,512_832,25;phosphor-map-trifold-light,576_832,25;phosphor-map-trifold-thin,640_832,25;phosphor-map-trifold,704_832,25;phosphor-markdown-logo-bold,768_832,25;phosphor-markdown-logo-duotone,832_832,25;phosphor-markdown-logo-fill,896_832,25;phosphor-markdown-logo-light,960_832,25;phosphor-markdown-logo-thin,0_896,25;phosphor-markdown-logo,64_896,25;phosphor-marker-circle-bold,128_896,25;phosphor-marker-circle-duotone,192_896,25;phosphor-marker-circle-fill,256_896,25;phosphor-marker-circle-light,320_896,25;phosphor-marker-circle-thin,384_896,25;phosphor-marker-circle,448_896,25;phosphor-martini-bold,512_896,25;phosphor-martini-duotone,576_896,25;phosphor-martini-fill,640_896,25;phosphor-martini-light,704_896,25;phosphor-martini-thin,768_896,25;phosphor-martini,832_896,25;phosphor-mask-happy-bold,896_896,25;phosphor-mask-happy-duotone,960_896,25;phosphor-mask-happy-fill,0_960,25;phosphor-mask-happy-light,64_960,25;phosphor-mask-happy-thin,128_960,25;phosphor-mask-happy,192_960,25;phosphor-mask-sad-bold,256_960,25;phosphor-mask-sad-duotone,320_960,25;phosphor-mask-sad-fill,384_960,25;phosphor-mask-sad-light,448_960,25;phosphor-mask-sad-thin,512_960,25;phosphor-mask-sad,576_960,25;phosphor-mastodon-logo-bold,640_960,25;phosphor-mastodon-logo-duotone,704_960,25;phosphor-mastodon-logo-fill,768_960,25;phosphor-mastodon-logo-light,832_960,25;phosphor-mastodon-logo-thin,896_960,25;phosphor-mastodon-logo,960_960,25;phosphor-math-operations-bold,0_0,26;phosphor-math-operations-duotone,64_0,26;phosphor-math-operations-fill,128_0,26;phosphor-math-operations-light,192_0,26;phosphor-math-operations-thin,256_0,26;phosphor-math-operations,320_0,26;phosphor-matrix-logo-bold,384_0,26;phosphor-matrix-logo-duotone,448_0,26;phosphor-matrix-logo-fill,512_0,26;phosphor-matrix-logo-light,576_0,26;phosphor-matrix-logo-thin,640_0,26;phosphor-matrix-logo,704_0,26;phosphor-medal-bold,768_0,26;phosphor-medal-duotone,832_0,26;phosphor-medal-fill,896_0,26;phosphor-medal-light,960_0,26;phosphor-medal-military-bold,0_64,26;phosphor-medal-military-duotone,64_64,26;phosphor-medal-military-fill,128_64,26;phosphor-medal-military-light,192_64,26;phosphor-medal-military-thin,256_64,26;phosphor-medal-military,320_64,26;phosphor-medal-thin,384_64,26;phosphor-medal,448_64,26;phosphor-medium-logo-bold,512_64,26;phosphor-medium-logo-duotone,576_64,26;phosphor-medium-logo-fill,640_64,26;phosphor-medium-logo-light,704_64,26;phosphor-medium-logo-thin,768_64,26;phosphor-medium-logo,832_64,26;phosphor-megaphone-bold,896_64,26;phosphor-megaphone-duotone,960_64,26;phosphor-megaphone-fill,0_128,26;phosphor-megaphone-light,64_128,26;phosphor-megaphone-simple-bold,128_128,26;phosphor-megaphone-simple-duotone,192_128,26;phosphor-megaphone-simple-fill,256_128,26;phosphor-megaphone-simple-light,320_128,26;phosphor-megaphone-simple-thin,384_128,26;phosphor-megaphone-simple,448_128,26;phosphor-megaphone-thin,512_128,26;phosphor-megaphone,576_128,26;phosphor-member-of-bold,640_128,26;phosphor-member-of-duotone,704_128,26;phosphor-member-of-fill,768_128,26;phosphor-member-of-light,832_128,26;phosphor-member-of-thin,896_128,26;phosphor-member-of,960_128,26;phosphor-memory-bold,0_192,26;phosphor-memory-duotone,64_192,26;phosphor-memory-fill,128_192,26;phosphor-memory-light,192_192,26;phosphor-memory-thin,256_192,26;phosphor-memory,320_192,26;phosphor-messenger-logo-bold,384_192,26;phosphor-messenger-logo-duotone,448_192,26;phosphor-messenger-logo-fill,512_192,26;phosphor-messenger-logo-light,576_192,26;phosphor-messenger-logo-thin,640_192,26;phosphor-messenger-logo,704_192,26;phosphor-meta-logo-bold,768_192,26;phosphor-meta-logo-duotone,832_192,26;phosphor-meta-logo-fill,896_192,26;phosphor-meta-logo-light,960_192,26;phosphor-meta-logo-thin,0_256,26;phosphor-meta-logo,64_256,26;phosphor-meteor-bold,128_256,26;phosphor-meteor-duotone,192_256,26;phosphor-meteor-fill,256_256,26;phosphor-meteor-light,320_256,26;phosphor-meteor-thin,384_256,26;phosphor-meteor,448_256,26;phosphor-metronome-bold,512_256,26;phosphor-metronome-duotone,576_256,26;phosphor-metronome-fill,640_256,26;phosphor-metronome-light,704_256,26;phosphor-metronome-thin,768_256,26;phosphor-metronome,832_256,26;phosphor-microphone-bold,896_256,26;phosphor-microphone-duotone,960_256,26;phosphor-microphone-fill,0_320,26;phosphor-microphone-light,64_320,26;phosphor-microphone-slash-bold,128_320,26;phosphor-microphone-slash-duotone,192_320,26;phosphor-microphone-slash-fill,256_320,26;phosphor-microphone-slash-light,320_320,26;phosphor-microphone-slash-thin,384_320,26;phosphor-microphone-slash,448_320,26;phosphor-microphone-stage-bold,512_320,26;phosphor-microphone-stage-duotone,576_320,26;phosphor-microphone-stage-fill,640_320,26;phosphor-microphone-stage-light,704_320,26;phosphor-microphone-stage-thin,768_320,26;phosphor-microphone-stage,832_320,26;phosphor-microphone-thin,896_320,26;phosphor-microphone,960_320,26;phosphor-microscope-bold,0_384,26;phosphor-microscope-duotone,64_384,26;phosphor-microscope-fill,128_384,26;phosphor-microscope-light,192_384,26;phosphor-microscope-thin,256_384,26;phosphor-microscope,320_384,26;phosphor-microsoft-excel-logo-bold,384_384,26;phosphor-microsoft-excel-logo-duotone,448_384,26;phosphor-microsoft-excel-logo-fill,512_384,26;phosphor-microsoft-excel-logo-light,576_384,26;phosphor-microsoft-excel-logo-thin,640_384,26;phosphor-microsoft-excel-logo,704_384,26;phosphor-microsoft-outlook-logo-bold,768_384,26;phosphor-microsoft-outlook-logo-duotone,832_384,26;phosphor-microsoft-outlook-logo-fill,896_384,26;phosphor-microsoft-outlook-logo-light,960_384,26;phosphor-microsoft-outlook-logo-thin,0_448,26;phosphor-microsoft-outlook-logo,64_448,26;phosphor-microsoft-powerpoint-logo-bold,128_448,26;phosphor-microsoft-powerpoint-logo-duotone,192_448,26;phosphor-microsoft-powerpoint-logo-fill,256_448,26;phosphor-microsoft-powerpoint-logo-light,320_448,26;phosphor-microsoft-powerpoint-logo-thin,384_448,26;phosphor-microsoft-powerpoint-logo,448_448,26;phosphor-microsoft-teams-logo-bold,512_448,26;phosphor-microsoft-teams-logo-duotone,576_448,26;phosphor-microsoft-teams-logo-fill,640_448,26;phosphor-microsoft-teams-logo-light,704_448,26;phosphor-microsoft-teams-logo-thin,768_448,26;phosphor-microsoft-teams-logo,832_448,26;phosphor-microsoft-word-logo-bold,896_448,26;phosphor-microsoft-word-logo-duotone,960_448,26;phosphor-microsoft-word-logo-fill,0_512,26;phosphor-microsoft-word-logo-light,64_512,26;phosphor-microsoft-word-logo-thin,128_512,26;phosphor-microsoft-word-logo,192_512,26;phosphor-minus-bold,256_512,26;phosphor-minus-circle-bold,320_512,26;phosphor-minus-circle-duotone,384_512,26;phosphor-minus-circle-fill,448_512,26;phosphor-minus-circle-light,512_512,26;phosphor-minus-circle-thin,576_512,26;phosphor-minus-circle,640_512,26;phosphor-minus-duotone,704_512,26;phosphor-minus-fill,768_512,26;phosphor-minus-light,832_512,26;phosphor-minus-square-bold,896_512,26;phosphor-minus-square-duotone,960_512,26;phosphor-minus-square-fill,0_576,26;phosphor-minus-square-light,64_576,26;phosphor-minus-square-thin,128_576,26;phosphor-minus-square,192_576,26;phosphor-minus-thin,256_576,26;phosphor-minus,320_576,26;phosphor-money-bold,384_576,26;phosphor-money-duotone,448_576,26;phosphor-money-fill,512_576,26;phosphor-money-light,576_576,26;phosphor-money-thin,640_576,26;phosphor-money-wavy-bold,704_576,26;phosphor-money-wavy-duotone,768_576,26;phosphor-money-wavy-fill,832_576,26;phosphor-money-wavy-light,896_576,26;phosphor-money-wavy-thin,960_576,26;phosphor-money-wavy,0_640,26;phosphor-money,64_640,26;phosphor-monitor-arrow-up-bold,128_640,26;phosphor-monitor-arrow-up-duotone,192_640,26;phosphor-monitor-arrow-up-fill,256_640,26;phosphor-monitor-arrow-up-light,320_640,26;phosphor-monitor-arrow-up-thin,384_640,26;phosphor-monitor-arrow-up,448_640,26;phosphor-monitor-bold,512_640,26;phosphor-monitor-duotone,576_640,26;phosphor-monitor-fill,640_640,26;phosphor-monitor-light,704_640,26;phosphor-monitor-play-bold,768_640,26;phosphor-monitor-play-duotone,832_640,26;phosphor-monitor-play-fill,896_640,26;phosphor-monitor-play-light,960_640,26;phosphor-monitor-play-thin,0_704,26;phosphor-monitor-play,64_704,26;phosphor-monitor-thin,128_704,26;phosphor-monitor,192_704,26;phosphor-moon-bold,256_704,26;phosphor-moon-duotone,320_704,26;phosphor-moon-fill,384_704,26;phosphor-moon-light,448_704,26;phosphor-moon-stars-bold,512_704,26;phosphor-moon-stars-duotone,576_704,26;phosphor-moon-stars-fill,640_704,26;phosphor-moon-stars-light,704_704,26;phosphor-moon-stars-thin,768_704,26;phosphor-moon-stars,832_704,26;phosphor-moon-thin,896_704,26;phosphor-moon,960_704,26;phosphor-moped-bold,0_768,26;phosphor-moped-duotone,64_768,26;phosphor-moped-fill,128_768,26;phosphor-moped-front-bold,192_768,26;phosphor-moped-front-duotone,256_768,26;phosphor-moped-front-fill,320_768,26;phosphor-moped-front-light,384_768,26;phosphor-moped-front-thin,448_768,26;phosphor-moped-front,512_768,26;phosphor-moped-light,576_768,26;phosphor-moped-thin,640_768,26;phosphor-moped,704_768,26;phosphor-mosque-bold,768_768,26;phosphor-mosque-duotone,832_768,26;phosphor-mosque-fill,896_768,26;phosphor-mosque-light,960_768,26;phosphor-mosque-thin,0_832,26;phosphor-mosque,64_832,26;phosphor-motorcycle-bold,128_832,26;phosphor-motorcycle-duotone,192_832,26;phosphor-motorcycle-fill,256_832,26;phosphor-motorcycle-light,320_832,26;phosphor-motorcycle-thin,384_832,26;phosphor-motorcycle,448_832,26;phosphor-mountains-bold,512_832,26;phosphor-mountains-duotone,576_832,26;phosphor-mountains-fill,640_832,26;phosphor-mountains-light,704_832,26;phosphor-mountains-thin,768_832,26;phosphor-mountains,832_832,26;phosphor-mouse-bold,896_832,26;phosphor-mouse-duotone,960_832,26;phosphor-mouse-fill,0_896,26;phosphor-mouse-left-click-bold,64_896,26;phosphor-mouse-left-click-duotone,128_896,26;phosphor-mouse-left-click-fill,192_896,26;phosphor-mouse-left-click-light,256_896,26;phosphor-mouse-left-click-thin,320_896,26;phosphor-mouse-left-click,384_896,26;phosphor-mouse-light,448_896,26;phosphor-mouse-middle-click-bold,512_896,26;phosphor-mouse-middle-click-duotone,576_896,26;phosphor-mouse-middle-click-fill,640_896,26;phosphor-mouse-middle-click-light,704_896,26;phosphor-mouse-middle-click-thin,768_896,26;phosphor-mouse-middle-click,832_896,26;phosphor-mouse-right-click-bold,896_896,26;phosphor-mouse-right-click-duotone,960_896,26;phosphor-mouse-right-click-fill,0_960,26;phosphor-mouse-right-click-light,64_960,26;phosphor-mouse-right-click-thin,128_960,26;phosphor-mouse-right-click,192_960,26;phosphor-mouse-scroll-bold,256_960,26;phosphor-mouse-scroll-duotone,320_960,26;phosphor-mouse-scroll-fill,384_960,26;phosphor-mouse-scroll-light,448_960,26;phosphor-mouse-scroll-thin,512_960,26;phosphor-mouse-scroll,576_960,26;phosphor-mouse-simple-bold,640_960,26;phosphor-mouse-simple-duotone,704_960,26;phosphor-mouse-simple-fill,768_960,26;phosphor-mouse-simple-light,832_960,26;phosphor-mouse-simple-thin,896_960,26;phosphor-mouse-simple,960_960,26;phosphor-mouse-thin,0_0,27;phosphor-mouse,64_0,27;phosphor-music-note-bold,128_0,27;phosphor-music-note-duotone,192_0,27;phosphor-music-note-fill,256_0,27;phosphor-music-note-light,320_0,27;phosphor-music-note-simple-bold,384_0,27;phosphor-music-note-simple-duotone,448_0,27;phosphor-music-note-simple-fill,512_0,27;phosphor-music-note-simple-light,576_0,27;phosphor-music-note-simple-thin,640_0,27;phosphor-music-note-simple,704_0,27;phosphor-music-note-thin,768_0,27;phosphor-music-note,832_0,27;phosphor-music-notes-bold,896_0,27;phosphor-music-notes-duotone,960_0,27;phosphor-music-notes-fill,0_64,27;phosphor-music-notes-light,64_64,27;phosphor-music-notes-minus-bold,128_64,27;phosphor-music-notes-minus-duotone,192_64,27;phosphor-music-notes-minus-fill,256_64,27;phosphor-music-notes-minus-light,320_64,27;phosphor-music-notes-minus-thin,384_64,27;phosphor-music-notes-minus,448_64,27;phosphor-music-notes-plus-bold,512_64,27;phosphor-music-notes-plus-duotone,576_64,27;phosphor-music-notes-plus-fill,640_64,27;phosphor-music-notes-plus-light,704_64,27;phosphor-music-notes-plus-thin,768_64,27;phosphor-music-notes-plus,832_64,27;phosphor-music-notes-simple-bold,896_64,27;phosphor-music-notes-simple-duotone,960_64,27;phosphor-music-notes-simple-fill,0_128,27;phosphor-music-notes-simple-light,64_128,27;phosphor-music-notes-simple-thin,128_128,27;phosphor-music-notes-simple,192_128,27;phosphor-music-notes-thin,256_128,27;phosphor-music-notes,320_128,27;phosphor-navigation-arrow-bold,384_128,27;phosphor-navigation-arrow-duotone,448_128,27;phosphor-navigation-arrow-fill,512_128,27;phosphor-navigation-arrow-light,576_128,27;phosphor-navigation-arrow-thin,640_128,27;phosphor-navigation-arrow,704_128,27;phosphor-needle-bold,768_128,27;phosphor-needle-duotone,832_128,27;phosphor-needle-fill,896_128,27;phosphor-needle-light,960_128,27;phosphor-needle-thin,0_192,27;phosphor-needle,64_192,27;phosphor-network-bold,128_192,27;phosphor-network-duotone,192_192,27;phosphor-network-fill,256_192,27;phosphor-network-light,320_192,27;phosphor-network-slash-bold,384_192,27;phosphor-network-slash-duotone,448_192,27;phosphor-network-slash-fill,512_192,27;phosphor-network-slash-light,576_192,27;phosphor-network-slash-thin,640_192,27;phosphor-network-slash,704_192,27;phosphor-network-thin,768_192,27;phosphor-network-x-bold,832_192,27;phosphor-network-x-duotone,896_192,27;phosphor-network-x-fill,960_192,27;phosphor-network-x-light,0_256,27;phosphor-network-x-thin,64_256,27;phosphor-network-x,128_256,27;phosphor-network,192_256,27;phosphor-newspaper-bold,256_256,27;phosphor-newspaper-clipping-bold,320_256,27;phosphor-newspaper-clipping-duotone,384_256,27;phosphor-newspaper-clipping-fill,448_256,27;phosphor-newspaper-clipping-light,512_256,27;phosphor-newspaper-clipping-thin,576_256,27;phosphor-newspaper-clipping,640_256,27;phosphor-newspaper-duotone,704_256,27;phosphor-newspaper-fill,768_256,27;phosphor-newspaper-light,832_256,27;phosphor-newspaper-thin,896_256,27;phosphor-newspaper,960_256,27;phosphor-not-equals-bold,0_320,27;phosphor-not-equals-duotone,64_320,27;phosphor-not-equals-fill,128_320,27;phosphor-not-equals-light,192_320,27;phosphor-not-equals-thin,256_320,27;phosphor-not-equals,320_320,27;phosphor-not-member-of-bold,384_320,27;phosphor-not-member-of-duotone,448_320,27;phosphor-not-member-of-fill,512_320,27;phosphor-not-member-of-light,576_320,27;phosphor-not-member-of-thin,640_320,27;phosphor-not-member-of,704_320,27;phosphor-not-subset-of-bold,768_320,27;phosphor-not-subset-of-duotone,832_320,27;phosphor-not-subset-of-fill,896_320,27;phosphor-not-subset-of-light,960_320,27;phosphor-not-subset-of-thin,0_384,27;phosphor-not-subset-of,64_384,27;phosphor-not-superset-of-bold,128_384,27;phosphor-not-superset-of-duotone,192_384,27;phosphor-not-superset-of-fill,256_384,27;phosphor-not-superset-of-light,320_384,27;phosphor-not-superset-of-thin,384_384,27;phosphor-not-superset-of,448_384,27;phosphor-notches-bold,512_384,27;phosphor-notches-duotone,576_384,27;phosphor-notches-fill,640_384,27;phosphor-notches-light,704_384,27;phosphor-notches-thin,768_384,27;phosphor-notches,832_384,27;phosphor-note-blank-bold,896_384,27;phosphor-note-blank-duotone,960_384,27;phosphor-note-blank-fill,0_448,27;phosphor-note-blank-light,64_448,27;phosphor-note-blank-thin,128_448,27;phosphor-note-blank,192_448,27;phosphor-note-bold,256_448,27;phosphor-note-duotone,320_448,27;phosphor-note-fill,384_448,27;phosphor-note-light,448_448,27;phosphor-note-pencil-bold,512_448,27;phosphor-note-pencil-duotone,576_448,27;phosphor-note-pencil-fill,640_448,27;phosphor-note-pencil-light,704_448,27;phosphor-note-pencil-thin,768_448,27;phosphor-note-pencil,832_448,27;phosphor-note-thin,896_448,27;phosphor-note,960_448,27;phosphor-notebook-bold,0_512,27;phosphor-notebook-duotone,64_512,27;phosphor-notebook-fill,128_512,27;phosphor-notebook-light,192_512,27;phosphor-notebook-thin,256_512,27;phosphor-notebook,320_512,27;phosphor-notepad-bold,384_512,27;phosphor-notepad-duotone,448_512,27;phosphor-notepad-fill,512_512,27;phosphor-notepad-light,576_512,27;phosphor-notepad-thin,640_512,27;phosphor-notepad,704_512,27;phosphor-notification-bold,768_512,27;phosphor-notification-duotone,832_512,27;phosphor-notification-fill,896_512,27;phosphor-notification-light,960_512,27;phosphor-notification-thin,0_576,27;phosphor-notification,64_576,27;phosphor-notion-logo-bold,128_576,27;phosphor-notion-logo-duotone,192_576,27;phosphor-notion-logo-fill,256_576,27;phosphor-notion-logo-light,320_576,27;phosphor-notion-logo-thin,384_576,27;phosphor-notion-logo,448_576,27;phosphor-nuclear-plant-bold,512_576,27;phosphor-nuclear-plant-duotone,576_576,27;phosphor-nuclear-plant-fill,640_576,27;phosphor-nuclear-plant-light,704_576,27;phosphor-nuclear-plant-thin,768_576,27;phosphor-nuclear-plant,832_576,27;phosphor-number-circle-eight-bold,896_576,27;phosphor-number-circle-eight-duotone,960_576,27;phosphor-number-circle-eight-fill,0_640,27;phosphor-number-circle-eight-light,64_640,27;phosphor-number-circle-eight-thin,128_640,27;phosphor-number-circle-eight,192_640,27;phosphor-number-circle-five-bold,256_640,27;phosphor-number-circle-five-duotone,320_640,27;phosphor-number-circle-five-fill,384_640,27;phosphor-number-circle-five-light,448_640,27;phosphor-number-circle-five-thin,512_640,27;phosphor-number-circle-five,576_640,27;phosphor-number-circle-four-bold,640_640,27;phosphor-number-circle-four-duotone,704_640,27;phosphor-number-circle-four-fill,768_640,27;phosphor-number-circle-four-light,832_640,27;phosphor-number-circle-four-thin,896_640,27;phosphor-number-circle-four,960_640,27;phosphor-number-circle-nine-bold,0_704,27;phosphor-number-circle-nine-duotone,64_704,27;phosphor-number-circle-nine-fill,128_704,27;phosphor-number-circle-nine-light,192_704,27;phosphor-number-circle-nine-thin,256_704,27;phosphor-number-circle-nine,320_704,27;phosphor-number-circle-one-bold,384_704,27;phosphor-number-circle-one-duotone,448_704,27;phosphor-number-circle-one-fill,512_704,27;phosphor-number-circle-one-light,576_704,27;phosphor-number-circle-one-thin,640_704,27;phosphor-number-circle-one,704_704,27;phosphor-number-circle-seven-bold,768_704,27;phosphor-number-circle-seven-duotone,832_704,27;phosphor-number-circle-seven-fill,896_704,27;phosphor-number-circle-seven-light,960_704,27;phosphor-number-circle-seven-thin,0_768,27;phosphor-number-circle-seven,64_768,27;phosphor-number-circle-six-bold,128_768,27;phosphor-number-circle-six-duotone,192_768,27;phosphor-number-circle-six-fill,256_768,27;phosphor-number-circle-six-light,320_768,27;phosphor-number-circle-six-thin,384_768,27;phosphor-number-circle-six,448_768,27;phosphor-number-circle-three-bold,512_768,27;phosphor-number-circle-three-duotone,576_768,27;phosphor-number-circle-three-fill,640_768,27;phosphor-number-circle-three-light,704_768,27;phosphor-number-circle-three-thin,768_768,27;phosphor-number-circle-three,832_768,27;phosphor-number-circle-two-bold,896_768,27;phosphor-number-circle-two-duotone,960_768,27;phosphor-number-circle-two-fill,0_832,27;phosphor-number-circle-two-light,64_832,27;phosphor-number-circle-two-thin,128_832,27;phosphor-number-circle-two,192_832,27;phosphor-number-circle-zero-bold,256_832,27;phosphor-number-circle-zero-duotone,320_832,27;phosphor-number-circle-zero-fill,384_832,27;phosphor-number-circle-zero-light,448_832,27;phosphor-number-circle-zero-thin,512_832,27;phosphor-number-circle-zero,576_832,27;phosphor-number-eight-bold,640_832,27;phosphor-number-eight-duotone,704_832,27;phosphor-number-eight-fill,768_832,27;phosphor-number-eight-light,832_832,27;phosphor-number-eight-thin,896_832,27;phosphor-number-eight,960_832,27;phosphor-number-five-bold,0_896,27;phosphor-number-five-duotone,64_896,27;phosphor-number-five-fill,128_896,27;phosphor-number-five-light,192_896,27;phosphor-number-five-thin,256_896,27;phosphor-number-five,320_896,27;phosphor-number-four-bold,384_896,27;phosphor-number-four-duotone,448_896,27;phosphor-number-four-fill,512_896,27;phosphor-number-four-light,576_896,27;phosphor-number-four-thin,640_896,27;phosphor-number-four,704_896,27;phosphor-number-nine-bold,768_896,27;phosphor-number-nine-duotone,832_896,27;phosphor-number-nine-fill,896_896,27;phosphor-number-nine-light,960_896,27;phosphor-number-nine-thin,0_960,27;phosphor-number-nine,64_960,27;phosphor-number-one-bold,128_960,27;phosphor-number-one-duotone,192_960,27;phosphor-number-one-fill,256_960,27;phosphor-number-one-light,320_960,27;phosphor-number-one-thin,384_960,27;phosphor-number-one,448_960,27;phosphor-number-seven-bold,512_960,27;phosphor-number-seven-duotone,576_960,27;phosphor-number-seven-fill,640_960,27;phosphor-number-seven-light,704_960,27;phosphor-number-seven-thin,768_960,27;phosphor-number-seven,832_960,27;phosphor-number-six-bold,896_960,27;phosphor-number-six-duotone,960_960,27;phosphor-number-six-fill,0_0,28;phosphor-number-six-light,64_0,28;phosphor-number-six-thin,128_0,28;phosphor-number-six,192_0,28;phosphor-number-square-eight-bold,256_0,28;phosphor-number-square-eight-duotone,320_0,28;phosphor-number-square-eight-fill,384_0,28;phosphor-number-square-eight-light,448_0,28;phosphor-number-square-eight-thin,512_0,28;phosphor-number-square-eight,576_0,28;phosphor-number-square-five-bold,640_0,28;phosphor-number-square-five-duotone,704_0,28;phosphor-number-square-five-fill,768_0,28;phosphor-number-square-five-light,832_0,28;phosphor-number-square-five-thin,896_0,28;phosphor-number-square-five,960_0,28;phosphor-number-square-four-bold,0_64,28;phosphor-number-square-four-duotone,64_64,28;phosphor-number-square-four-fill,128_64,28;phosphor-number-square-four-light,192_64,28;phosphor-number-square-four-thin,256_64,28;phosphor-number-square-four,320_64,28;phosphor-number-square-nine-bold,384_64,28;phosphor-number-square-nine-duotone,448_64,28;phosphor-number-square-nine-fill,512_64,28;phosphor-number-square-nine-light,576_64,28;phosphor-number-square-nine-thin,640_64,28;phosphor-number-square-nine,704_64,28;phosphor-number-square-one-bold,768_64,28;phosphor-number-square-one-duotone,832_64,28;phosphor-number-square-one-fill,896_64,28;phosphor-number-square-one-light,960_64,28;phosphor-number-square-one-thin,0_128,28;phosphor-number-square-one,64_128,28;phosphor-number-square-seven-bold,128_128,28;phosphor-number-square-seven-duotone,192_128,28;phosphor-number-square-seven-fill,256_128,28;phosphor-number-square-seven-light,320_128,28;phosphor-number-square-seven-thin,384_128,28;phosphor-number-square-seven,448_128,28;phosphor-number-square-six-bold,512_128,28;phosphor-number-square-six-duotone,576_128,28;phosphor-number-square-six-fill,640_128,28;phosphor-number-square-six-light,704_128,28;phosphor-number-square-six-thin,768_128,28;phosphor-number-square-six,832_128,28;phosphor-number-square-three-bold,896_128,28;phosphor-number-square-three-duotone,960_128,28;phosphor-number-square-three-fill,0_192,28;phosphor-number-square-three-light,64_192,28;phosphor-number-square-three-thin,128_192,28;phosphor-number-square-three,192_192,28;phosphor-number-square-two-bold,256_192,28;phosphor-number-square-two-duotone,320_192,28;phosphor-number-square-two-fill,384_192,28;phosphor-number-square-two-light,448_192,28;phosphor-number-square-two-thin,512_192,28;phosphor-number-square-two,576_192,28;phosphor-number-square-zero-bold,640_192,28;phosphor-number-square-zero-duotone,704_192,28;phosphor-number-square-zero-fill,768_192,28;phosphor-number-square-zero-light,832_192,28;phosphor-number-square-zero-thin,896_192,28;phosphor-number-square-zero,960_192,28;phosphor-number-three-bold,0_256,28;phosphor-number-three-duotone,64_256,28;phosphor-number-three-fill,128_256,28;phosphor-number-three-light,192_256,28;phosphor-number-three-thin,256_256,28;phosphor-number-three,320_256,28;phosphor-number-two-bold,384_256,28;phosphor-number-two-duotone,448_256,28;phosphor-number-two-fill,512_256,28;phosphor-number-two-light,576_256,28;phosphor-number-two-thin,640_256,28;phosphor-number-two,704_256,28;phosphor-number-zero-bold,768_256,28;phosphor-number-zero-duotone,832_256,28;phosphor-number-zero-fill,896_256,28;phosphor-number-zero-light,960_256,28;phosphor-number-zero-thin,0_320,28;phosphor-number-zero,64_320,28;phosphor-numpad-bold,128_320,28;phosphor-numpad-duotone,192_320,28;phosphor-numpad-fill,256_320,28;phosphor-numpad-light,320_320,28;phosphor-numpad-thin,384_320,28;phosphor-numpad,448_320,28;phosphor-nut-bold,512_320,28;phosphor-nut-duotone,576_320,28;phosphor-nut-fill,640_320,28;phosphor-nut-light,704_320,28;phosphor-nut-thin,768_320,28;phosphor-nut,832_320,28;phosphor-ny-times-logo-bold,896_320,28;phosphor-ny-times-logo-duotone,960_320,28;phosphor-ny-times-logo-fill,0_384,28;phosphor-ny-times-logo-light,64_384,28;phosphor-ny-times-logo-thin,128_384,28;phosphor-ny-times-logo,192_384,28;phosphor-octagon-bold,256_384,28;phosphor-octagon-duotone,320_384,28;phosphor-octagon-fill,384_384,28;phosphor-octagon-light,448_384,28;phosphor-octagon-thin,512_384,28;phosphor-octagon,576_384,28;phosphor-office-chair-bold,640_384,28;phosphor-office-chair-duotone,704_384,28;phosphor-office-chair-fill,768_384,28;phosphor-office-chair-light,832_384,28;phosphor-office-chair-thin,896_384,28;phosphor-office-chair,960_384,28;phosphor-onigiri-bold,0_448,28;phosphor-onigiri-duotone,64_448,28;phosphor-onigiri-fill,128_448,28;phosphor-onigiri-light,192_448,28;phosphor-onigiri-thin,256_448,28;phosphor-onigiri,320_448,28;phosphor-open-ai-logo-bold,384_448,28;phosphor-open-ai-logo-duotone,448_448,28;phosphor-open-ai-logo-fill,512_448,28;phosphor-open-ai-logo-light,576_448,28;phosphor-open-ai-logo-thin,640_448,28;phosphor-open-ai-logo,704_448,28;phosphor-option-bold,768_448,28;phosphor-option-duotone,832_448,28;phosphor-option-fill,896_448,28;phosphor-option-light,960_448,28;phosphor-option-thin,0_512,28;phosphor-option,64_512,28;phosphor-orange-bold,128_512,28;phosphor-orange-duotone,192_512,28;phosphor-orange-fill,256_512,28;phosphor-orange-light,320_512,28;phosphor-orange-slice-bold,384_512,28;phosphor-orange-slice-duotone,448_512,28;phosphor-orange-slice-fill,512_512,28;phosphor-orange-slice-light,576_512,28;phosphor-orange-slice-thin,640_512,28;phosphor-orange-slice,704_512,28;phosphor-orange-thin,768_512,28;phosphor-orange,832_512,28;phosphor-oven-bold,896_512,28;phosphor-oven-duotone,960_512,28;phosphor-oven-fill,0_576,28;phosphor-oven-light,64_576,28;phosphor-oven-thin,128_576,28;phosphor-oven,192_576,28;phosphor-package-bold,256_576,28;phosphor-package-duotone,320_576,28;phosphor-package-fill,384_576,28;phosphor-package-light,448_576,28;phosphor-package-thin,512_576,28;phosphor-package,576_576,28;phosphor-paint-brush-bold,640_576,28;phosphor-paint-brush-broad-bold,704_576,28;phosphor-paint-brush-broad-duotone,768_576,28;phosphor-paint-brush-broad-fill,832_576,28;phosphor-paint-brush-broad-light,896_576,28;phosphor-paint-brush-broad-thin,960_576,28;phosphor-paint-brush-broad,0_640,28;phosphor-paint-brush-duotone,64_640,28;phosphor-paint-brush-fill,128_640,28;phosphor-paint-brush-household-bold,192_640,28;phosphor-paint-brush-household-duotone,256_640,28;phosphor-paint-brush-household-fill,320_640,28;phosphor-paint-brush-household-light,384_640,28;phosphor-paint-brush-household-thin,448_640,28;phosphor-paint-brush-household,512_640,28;phosphor-paint-brush-light,576_640,28;phosphor-paint-brush-thin,640_640,28;phosphor-paint-brush,704_640,28;phosphor-paint-bucket-bold,768_640,28;phosphor-paint-bucket-duotone,832_640,28;phosphor-paint-bucket-fill,896_640,28;phosphor-paint-bucket-light,960_640,28;phosphor-paint-bucket-thin,0_704,28;phosphor-paint-bucket,64_704,28;phosphor-paint-roller-bold,128_704,28;phosphor-paint-roller-duotone,192_704,28;phosphor-paint-roller-fill,256_704,28;phosphor-paint-roller-light,320_704,28;phosphor-paint-roller-thin,384_704,28;phosphor-paint-roller,448_704,28;phosphor-palette-bold,512_704,28;phosphor-palette-duotone,576_704,28;phosphor-palette-fill,640_704,28;phosphor-palette-light,704_704,28;phosphor-palette-thin,768_704,28;phosphor-palette,832_704,28;phosphor-panorama-bold,896_704,28;phosphor-panorama-duotone,960_704,28;phosphor-panorama-fill,0_768,28;phosphor-panorama-light,64_768,28;phosphor-panorama-thin,128_768,28;phosphor-panorama,192_768,28;phosphor-pants-bold,256_768,28;phosphor-pants-duotone,320_768,28;phosphor-pants-fill,384_768,28;phosphor-pants-light,448_768,28;phosphor-pants-thin,512_768,28;phosphor-pants,576_768,28;phosphor-paper-plane-bold,640_768,28;phosphor-paper-plane-duotone,704_768,28;phosphor-paper-plane-fill,768_768,28;phosphor-paper-plane-light,832_768,28;phosphor-paper-plane-right-bold,896_768,28;phosphor-paper-plane-right-duotone,960_768,28;phosphor-paper-plane-right-fill,0_832,28;phosphor-paper-plane-right-light,64_832,28;phosphor-paper-plane-right-thin,128_832,28;phosphor-paper-plane-right,192_832,28;phosphor-paper-plane-thin,256_832,28;phosphor-paper-plane-tilt-bold,320_832,28;phosphor-paper-plane-tilt-duotone,384_832,28;phosphor-paper-plane-tilt-fill,448_832,28;phosphor-paper-plane-tilt-light,512_832,28;phosphor-paper-plane-tilt-thin,576_832,28;phosphor-paper-plane-tilt,640_832,28;phosphor-paper-plane,704_832,28;phosphor-paperclip-bold,768_832,28;phosphor-paperclip-duotone,832_832,28;phosphor-paperclip-fill,896_832,28;phosphor-paperclip-horizontal-bold,960_832,28;phosphor-paperclip-horizontal-duotone,0_896,28;phosphor-paperclip-horizontal-fill,64_896,28;phosphor-paperclip-horizontal-light,128_896,28;phosphor-paperclip-horizontal-thin,192_896,28;phosphor-paperclip-horizontal,256_896,28;phosphor-paperclip-light,320_896,28;phosphor-paperclip-thin,384_896,28;phosphor-paperclip,448_896,28;phosphor-parachute-bold,512_896,28;phosphor-parachute-duotone,576_896,28;phosphor-parachute-fill,640_896,28;phosphor-parachute-light,704_896,28;phosphor-parachute-thin,768_896,28;phosphor-parachute,832_896,28;phosphor-paragraph-bold,896_896,28;phosphor-paragraph-duotone,960_896,28;phosphor-paragraph-fill,0_960,28;phosphor-paragraph-light,64_960,28;phosphor-paragraph-thin,128_960,28;phosphor-paragraph,192_960,28;phosphor-parallelogram-bold,256_960,28;phosphor-parallelogram-duotone,320_960,28;phosphor-parallelogram-fill,384_960,28;phosphor-parallelogram-light,448_960,28;phosphor-parallelogram-thin,512_960,28;phosphor-parallelogram,576_960,28;phosphor-park-bold,640_960,28;phosphor-park-duotone,704_960,28;phosphor-park-fill,768_960,28;phosphor-park-light,832_960,28;phosphor-park-thin,896_960,28;phosphor-park,960_960,28;phosphor-password-bold,0_0,29;phosphor-password-duotone,64_0,29;phosphor-password-fill,128_0,29;phosphor-password-light,192_0,29;phosphor-password-thin,256_0,29;phosphor-password,320_0,29;phosphor-path-bold,384_0,29;phosphor-path-duotone,448_0,29;phosphor-path-fill,512_0,29;phosphor-path-light,576_0,29;phosphor-path-thin,640_0,29;phosphor-path,704_0,29;phosphor-patreon-logo-bold,768_0,29;phosphor-patreon-logo-duotone,832_0,29;phosphor-patreon-logo-fill,896_0,29;phosphor-patreon-logo-light,960_0,29;phosphor-patreon-logo-thin,0_64,29;phosphor-patreon-logo,64_64,29;phosphor-pause-bold,128_64,29;phosphor-pause-circle-bold,192_64,29;phosphor-pause-circle-duotone,256_64,29;phosphor-pause-circle-fill,320_64,29;phosphor-pause-circle-light,384_64,29;phosphor-pause-circle-thin,448_64,29;phosphor-pause-circle,512_64,29;phosphor-pause-duotone,576_64,29;phosphor-pause-fill,640_64,29;phosphor-pause-light,704_64,29;phosphor-pause-thin,768_64,29;phosphor-pause,832_64,29;phosphor-paw-print-bold,896_64,29;phosphor-paw-print-duotone,960_64,29;phosphor-paw-print-fill,0_128,29;phosphor-paw-print-light,64_128,29;phosphor-paw-print-thin,128_128,29;phosphor-paw-print,192_128,29;phosphor-paypal-logo-bold,256_128,29;phosphor-paypal-logo-duotone,320_128,29;phosphor-paypal-logo-fill,384_128,29;phosphor-paypal-logo-light,448_128,29;phosphor-paypal-logo-thin,512_128,29;phosphor-paypal-logo,576_128,29;phosphor-peace-bold,640_128,29;phosphor-peace-duotone,704_128,29;phosphor-peace-fill,768_128,29;phosphor-peace-light,832_128,29;phosphor-peace-thin,896_128,29;phosphor-peace,960_128,29;phosphor-pen-bold,0_192,29;phosphor-pen-duotone,64_192,29;phosphor-pen-fill,128_192,29;phosphor-pen-light,192_192,29;phosphor-pen-nib-bold,256_192,29;phosphor-pen-nib-duotone,320_192,29;phosphor-pen-nib-fill,384_192,29;phosphor-pen-nib-light,448_192,29;phosphor-pen-nib-straight-bold,512_192,29;phosphor-pen-nib-straight-duotone,576_192,29;phosphor-pen-nib-straight-fill,640_192,29;phosphor-pen-nib-straight-light,704_192,29;phosphor-pen-nib-straight-thin,768_192,29;phosphor-pen-nib-straight,832_192,29;phosphor-pen-nib-thin,896_192,29;phosphor-pen-nib,960_192,29;phosphor-pen-thin,0_256,29;phosphor-pen,64_256,29;phosphor-pencil-bold,128_256,29;phosphor-pencil-circle-bold,192_256,29;phosphor-pencil-circle-duotone,256_256,29;phosphor-pencil-circle-fill,320_256,29;phosphor-pencil-circle-light,384_256,29;phosphor-pencil-circle-thin,448_256,29;phosphor-pencil-circle,512_256,29;phosphor-pencil-duotone,576_256,29;phosphor-pencil-fill,640_256,29;phosphor-pencil-light,704_256,29;phosphor-pencil-line-bold,768_256,29;phosphor-pencil-line-duotone,832_256,29;phosphor-pencil-line-fill,896_256,29;phosphor-pencil-line-light,960_256,29;phosphor-pencil-line-thin,0_320,29;phosphor-pencil-line,64_320,29;phosphor-pencil-ruler-bold,128_320,29;phosphor-pencil-ruler-duotone,192_320,29;phosphor-pencil-ruler-fill,256_320,29;phosphor-pencil-ruler-light,320_320,29;phosphor-pencil-ruler-thin,384_320,29;phosphor-pencil-ruler,448_320,29;phosphor-pencil-simple-bold,512_320,29;phosphor-pencil-simple-duotone,576_320,29;phosphor-pencil-simple-fill,640_320,29;phosphor-pencil-simple-light,704_320,29;phosphor-pencil-simple-line-bold,768_320,29;phosphor-pencil-simple-line-duotone,832_320,29;phosphor-pencil-simple-line-fill,896_320,29;phosphor-pencil-simple-line-light,960_320,29;phosphor-pencil-simple-line-thin,0_384,29;phosphor-pencil-simple-line,64_384,29;phosphor-pencil-simple-slash-bold,128_384,29;phosphor-pencil-simple-slash-duotone,192_384,29;phosphor-pencil-simple-slash-fill,256_384,29;phosphor-pencil-simple-slash-light,320_384,29;phosphor-pencil-simple-slash-thin,384_384,29;phosphor-pencil-simple-slash,448_384,29;phosphor-pencil-simple-thin,512_384,29;phosphor-pencil-simple,576_384,29;phosphor-pencil-slash-bold,640_384,29;phosphor-pencil-slash-duotone,704_384,29;phosphor-pencil-slash-fill,768_384,29;phosphor-pencil-slash-light,832_384,29;phosphor-pencil-slash-thin,896_384,29;phosphor-pencil-slash,960_384,29;phosphor-pencil-thin,0_448,29;phosphor-pencil,64_448,29;phosphor-pentagon-bold,128_448,29;phosphor-pentagon-duotone,192_448,29;phosphor-pentagon-fill,256_448,29;phosphor-pentagon-light,320_448,29;phosphor-pentagon-thin,384_448,29;phosphor-pentagon,448_448,29;phosphor-pentagram-bold,512_448,29;phosphor-pentagram-duotone,576_448,29;phosphor-pentagram-fill,640_448,29;phosphor-pentagram-light,704_448,29;phosphor-pentagram-thin,768_448,29;phosphor-pentagram,832_448,29;phosphor-pepper-bold,896_448,29;phosphor-pepper-duotone,960_448,29;phosphor-pepper-fill,0_512,29;phosphor-pepper-light,64_512,29;phosphor-pepper-thin,128_512,29;phosphor-pepper,192_512,29;phosphor-percent-bold,256_512,29;phosphor-percent-duotone,320_512,29;phosphor-percent-fill,384_512,29;phosphor-percent-light,448_512,29;phosphor-percent-thin,512_512,29;phosphor-percent,576_512,29;phosphor-person-arms-spread-bold,640_512,29;phosphor-person-arms-spread-duotone,704_512,29;phosphor-person-arms-spread-fill,768_512,29;phosphor-person-arms-spread-light,832_512,29;phosphor-person-arms-spread-thin,896_512,29;phosphor-person-arms-spread,960_512,29;phosphor-person-bold,0_576,29;phosphor-person-duotone,64_576,29;phosphor-person-fill,128_576,29;phosphor-person-light,192_576,29;phosphor-person-simple-bike-bold,256_576,29;phosphor-person-simple-bike-duotone,320_576,29;phosphor-person-simple-bike-fill,384_576,29;phosphor-person-simple-bike-light,448_576,29;phosphor-person-simple-bike-thin,512_576,29;phosphor-person-simple-bike,576_576,29;phosphor-person-simple-bold,640_576,29;phosphor-person-simple-circle-bold,704_576,29;phosphor-person-simple-circle-duotone,768_576,29;phosphor-person-simple-circle-fill,832_576,29;phosphor-person-simple-circle-light,896_576,29;phosphor-person-simple-circle-thin,960_576,29;phosphor-person-simple-circle,0_640,29;phosphor-person-simple-duotone,64_640,29;phosphor-person-simple-fill,128_640,29;phosphor-person-simple-hike-bold,192_640,29;phosphor-person-simple-hike-duotone,256_640,29;phosphor-person-simple-hike-fill,320_640,29;phosphor-person-simple-hike-light,384_640,29;phosphor-person-simple-hike-thin,448_640,29;phosphor-person-simple-hike,512_640,29;phosphor-person-simple-light,576_640,29;phosphor-person-simple-run-bold,640_640,29;phosphor-person-simple-run-duotone,704_640,29;phosphor-person-simple-run-fill,768_640,29;phosphor-person-simple-run-light,832_640,29;phosphor-person-simple-run-thin,896_640,29;phosphor-person-simple-run,960_640,29;phosphor-person-simple-ski-bold,0_704,29;phosphor-person-simple-ski-duotone,64_704,29;phosphor-person-simple-ski-fill,128_704,29;phosphor-person-simple-ski-light,192_704,29;phosphor-person-simple-ski-thin,256_704,29;phosphor-person-simple-ski,320_704,29;phosphor-person-simple-snowboard-bold,384_704,29;phosphor-person-simple-snowboard-duotone,448_704,29;phosphor-person-simple-snowboard-fill,512_704,29;phosphor-person-simple-snowboard-light,576_704,29;phosphor-person-simple-snowboard-thin,640_704,29;phosphor-person-simple-snowboard,704_704,29;phosphor-person-simple-swim-bold,768_704,29;phosphor-person-simple-swim-duotone,832_704,29;phosphor-person-simple-swim-fill,896_704,29;phosphor-person-simple-swim-light,960_704,29;phosphor-person-simple-swim-thin,0_768,29;phosphor-person-simple-swim,64_768,29;phosphor-person-simple-tai-chi-bold,128_768,29;phosphor-person-simple-tai-chi-duotone,192_768,29;phosphor-person-simple-tai-chi-fill,256_768,29;phosphor-person-simple-tai-chi-light,320_768,29;phosphor-person-simple-tai-chi-thin,384_768,29;phosphor-person-simple-tai-chi,448_768,29;phosphor-person-simple-thin,512_768,29;phosphor-person-simple-throw-bold,576_768,29;phosphor-person-simple-throw-duotone,640_768,29;phosphor-person-simple-throw-fill,704_768,29;phosphor-person-simple-throw-light,768_768,29;phosphor-person-simple-throw-thin,832_768,29;phosphor-person-simple-throw,896_768,29;phosphor-person-simple-walk-bold,960_768,29;phosphor-person-simple-walk-duotone,0_832,29;phosphor-person-simple-walk-fill,64_832,29;phosphor-person-simple-walk-light,128_832,29;phosphor-person-simple-walk-thin,192_832,29;phosphor-person-simple-walk,256_832,29;phosphor-person-simple,320_832,29;phosphor-person-thin,384_832,29;phosphor-person,448_832,29;phosphor-perspective-bold,512_832,29;phosphor-perspective-duotone,576_832,29;phosphor-perspective-fill,640_832,29;phosphor-perspective-light,704_832,29;phosphor-perspective-thin,768_832,29;phosphor-perspective,832_832,29;phosphor-phone-bold,896_832,29;phosphor-phone-call-bold,960_832,29;phosphor-phone-call-duotone,0_896,29;phosphor-phone-call-fill,64_896,29;phosphor-phone-call-light,128_896,29;phosphor-phone-call-thin,192_896,29;phosphor-phone-call,256_896,29;phosphor-phone-disconnect-bold,320_896,29;phosphor-phone-disconnect-duotone,384_896,29;phosphor-phone-disconnect-fill,448_896,29;phosphor-phone-disconnect-light,512_896,29;phosphor-phone-disconnect-thin,576_896,29;phosphor-phone-disconnect,640_896,29;phosphor-phone-duotone,704_896,29;phosphor-phone-fill,768_896,29;phosphor-phone-incoming-bold,832_896,29;phosphor-phone-incoming-duotone,896_896,29;phosphor-phone-incoming-fill,960_896,29;phosphor-phone-incoming-light,0_960,29;phosphor-phone-incoming-thin,64_960,29;phosphor-phone-incoming,128_960,29;phosphor-phone-light,192_960,29;phosphor-phone-list-bold,256_960,29;phosphor-phone-list-duotone,320_960,29;phosphor-phone-list-fill,384_960,29;phosphor-phone-list-light,448_960,29;phosphor-phone-list-thin,512_960,29;phosphor-phone-list,576_960,29;phosphor-phone-outgoing-bold,640_960,29;phosphor-phone-outgoing-duotone,704_960,29;phosphor-phone-outgoing-fill,768_960,29;phosphor-phone-outgoing-light,832_960,29;phosphor-phone-outgoing-thin,896_960,29;phosphor-phone-outgoing,960_960,29;phosphor-phone-pause-bold,0_0,30;phosphor-phone-pause-duotone,64_0,30;phosphor-phone-pause-fill,128_0,30;phosphor-phone-pause-light,192_0,30;phosphor-phone-pause-thin,256_0,30;phosphor-phone-pause,320_0,30;phosphor-phone-plus-bold,384_0,30;phosphor-phone-plus-duotone,448_0,30;phosphor-phone-plus-fill,512_0,30;phosphor-phone-plus-light,576_0,30;phosphor-phone-plus-thin,640_0,30;phosphor-phone-plus,704_0,30;phosphor-phone-slash-bold,768_0,30;phosphor-phone-slash-duotone,832_0,30;phosphor-phone-slash-fill,896_0,30;phosphor-phone-slash-light,960_0,30;phosphor-phone-slash-thin,0_64,30;phosphor-phone-slash,64_64,30;phosphor-phone-thin,128_64,30;phosphor-phone-transfer-bold,192_64,30;phosphor-phone-transfer-duotone,256_64,30;phosphor-phone-transfer-fill,320_64,30;phosphor-phone-transfer-light,384_64,30;phosphor-phone-transfer-thin,448_64,30;phosphor-phone-transfer,512_64,30;phosphor-phone-x-bold,576_64,30;phosphor-phone-x-duotone,640_64,30;phosphor-phone-x-fill,704_64,30;phosphor-phone-x-light,768_64,30;phosphor-phone-x-thin,832_64,30;phosphor-phone-x,896_64,30;phosphor-phone,960_64,30;phosphor-phosphor-logo-bold,0_128,30;phosphor-phosphor-logo-duotone,64_128,30;phosphor-phosphor-logo-fill,128_128,30;phosphor-phosphor-logo-light,192_128,30;phosphor-phosphor-logo-thin,256_128,30;phosphor-phosphor-logo,320_128,30;phosphor-pi-bold,384_128,30;phosphor-pi-duotone,448_128,30;phosphor-pi-fill,512_128,30;phosphor-pi-light,576_128,30;phosphor-pi-thin,640_128,30;phosphor-pi,704_128,30;phosphor-piano-keys-bold,768_128,30;phosphor-piano-keys-duotone,832_128,30;phosphor-piano-keys-fill,896_128,30;phosphor-piano-keys-light,960_128,30;phosphor-piano-keys-thin,0_192,30;phosphor-piano-keys,64_192,30;phosphor-picnic-table-bold,128_192,30;phosphor-picnic-table-duotone,192_192,30;phosphor-picnic-table-fill,256_192,30;phosphor-picnic-table-light,320_192,30;phosphor-picnic-table-thin,384_192,30;phosphor-picnic-table,448_192,30;phosphor-picture-in-picture-bold,512_192,30;phosphor-picture-in-picture-duotone,576_192,30;phosphor-picture-in-picture-fill,640_192,30;phosphor-picture-in-picture-light,704_192,30;phosphor-picture-in-picture-thin,768_192,30;phosphor-picture-in-picture,832_192,30;phosphor-piggy-bank-bold,896_192,30;phosphor-piggy-bank-duotone,960_192,30;phosphor-piggy-bank-fill,0_256,30;phosphor-piggy-bank-light,64_256,30;phosphor-piggy-bank-thin,128_256,30;phosphor-piggy-bank,192_256,30;phosphor-pill-bold,256_256,30;phosphor-pill-duotone,320_256,30;phosphor-pill-fill,384_256,30;phosphor-pill-light,448_256,30;phosphor-pill-thin,512_256,30;phosphor-pill,576_256,30;phosphor-ping-pong-bold,640_256,30;phosphor-ping-pong-duotone,704_256,30;phosphor-ping-pong-fill,768_256,30;phosphor-ping-pong-light,832_256,30;phosphor-ping-pong-thin,896_256,30;phosphor-ping-pong,960_256,30;phosphor-pint-glass-bold,0_320,30;phosphor-pint-glass-duotone,64_320,30;phosphor-pint-glass-fill,128_320,30;phosphor-pint-glass-light,192_320,30;phosphor-pint-glass-thin,256_320,30;phosphor-pint-glass,320_320,30;phosphor-pinterest-logo-bold,384_320,30;phosphor-pinterest-logo-duotone,448_320,30;phosphor-pinterest-logo-fill,512_320,30;phosphor-pinterest-logo-light,576_320,30;phosphor-pinterest-logo-thin,640_320,30;phosphor-pinterest-logo,704_320,30;phosphor-pinwheel-bold,768_320,30;phosphor-pinwheel-duotone,832_320,30;phosphor-pinwheel-fill,896_320,30;phosphor-pinwheel-light,960_320,30;phosphor-pinwheel-thin,0_384,30;phosphor-pinwheel,64_384,30;phosphor-pipe-bold,128_384,30;phosphor-pipe-duotone,192_384,30;phosphor-pipe-fill,256_384,30;phosphor-pipe-light,320_384,30;phosphor-pipe-thin,384_384,30;phosphor-pipe-wrench-bold,448_384,30;phosphor-pipe-wrench-duotone,512_384,30;phosphor-pipe-wrench-fill,576_384,30;phosphor-pipe-wrench-light,640_384,30;phosphor-pipe-wrench-thin,704_384,30;phosphor-pipe-wrench,768_384,30;phosphor-pipe,832_384,30;phosphor-pix-logo-bold,896_384,30;phosphor-pix-logo-duotone,960_384,30;phosphor-pix-logo-fill,0_448,30;phosphor-pix-logo-light,64_448,30;phosphor-pix-logo-thin,128_448,30;phosphor-pix-logo,192_448,30;phosphor-pizza-bold,256_448,30;phosphor-pizza-duotone,320_448,30;phosphor-pizza-fill,384_448,30;phosphor-pizza-light,448_448,30;phosphor-pizza-thin,512_448,30;phosphor-pizza,576_448,30;phosphor-placeholder-bold,640_448,30;phosphor-placeholder-duotone,704_448,30;phosphor-placeholder-fill,768_448,30;phosphor-placeholder-light,832_448,30;phosphor-placeholder-thin,896_448,30;phosphor-placeholder,960_448,30;phosphor-planet-bold,0_512,30;phosphor-planet-duotone,64_512,30;phosphor-planet-fill,128_512,30;phosphor-planet-light,192_512,30;phosphor-planet-thin,256_512,30;phosphor-planet,320_512,30;phosphor-plant-bold,384_512,30;phosphor-plant-duotone,448_512,30;phosphor-plant-fill,512_512,30;phosphor-plant-light,576_512,30;phosphor-plant-thin,640_512,30;phosphor-plant,704_512,30;phosphor-play-bold,768_512,30;phosphor-play-circle-bold,832_512,30;phosphor-play-circle-duotone,896_512,30;phosphor-play-circle-fill,960_512,30;phosphor-play-circle-light,0_576,30;phosphor-play-circle-thin,64_576,30;phosphor-play-circle,128_576,30;phosphor-play-duotone,192_576,30;phosphor-play-fill,256_576,30;phosphor-play-light,320_576,30;phosphor-play-pause-bold,384_576,30;phosphor-play-pause-duotone,448_576,30;phosphor-play-pause-fill,512_576,30;phosphor-play-pause-light,576_576,30;phosphor-play-pause-thin,640_576,30;phosphor-play-pause,704_576,30;phosphor-play-thin,768_576,30;phosphor-play,832_576,30;phosphor-playlist-bold,896_576,30;phosphor-playlist-duotone,960_576,30;phosphor-playlist-fill,0_640,30;phosphor-playlist-light,64_640,30;phosphor-playlist-thin,128_640,30;phosphor-playlist,192_640,30;phosphor-plug-bold,256_640,30;phosphor-plug-charging-bold,320_640,30;phosphor-plug-charging-duotone,384_640,30;phosphor-plug-charging-fill,448_640,30;phosphor-plug-charging-light,512_640,30;phosphor-plug-charging-thin,576_640,30;phosphor-plug-charging,640_640,30;phosphor-plug-duotone,704_640,30;phosphor-plug-fill,768_640,30;phosphor-plug-light,832_640,30;phosphor-plug-thin,896_640,30;phosphor-plug,960_640,30;phosphor-plugs-bold,0_704,30;phosphor-plugs-connected-bold,64_704,30;phosphor-plugs-connected-duotone,128_704,30;phosphor-plugs-connected-fill,192_704,30;phosphor-plugs-connected-light,256_704,30;phosphor-plugs-connected-thin,320_704,30;phosphor-plugs-connected,384_704,30;phosphor-plugs-duotone,448_704,30;phosphor-plugs-fill,512_704,30;phosphor-plugs-light,576_704,30;phosphor-plugs-thin,640_704,30;phosphor-plugs,704_704,30;phosphor-plus-bold,768_704,30;phosphor-plus-circle-bold,832_704,30;phosphor-plus-circle-duotone,896_704,30;phosphor-plus-circle-fill,960_704,30;phosphor-plus-circle-light,0_768,30;phosphor-plus-circle-thin,64_768,30;phosphor-plus-circle,128_768,30;phosphor-plus-duotone,192_768,30;phosphor-plus-fill,256_768,30;phosphor-plus-light,320_768,30;phosphor-plus-minus-bold,384_768,30;phosphor-plus-minus-duotone,448_768,30;phosphor-plus-minus-fill,512_768,30;phosphor-plus-minus-light,576_768,30;phosphor-plus-minus-thin,640_768,30;phosphor-plus-minus,704_768,30;phosphor-plus-square-bold,768_768,30;phosphor-plus-square-duotone,832_768,30;phosphor-plus-square-fill,896_768,30;phosphor-plus-square-light,960_768,30;phosphor-plus-square-thin,0_832,30;phosphor-plus-square,64_832,30;phosphor-plus-thin,128_832,30;phosphor-plus,192_832,30;phosphor-poker-chip-bold,256_832,30;phosphor-poker-chip-duotone,320_832,30;phosphor-poker-chip-fill,384_832,30;phosphor-poker-chip-light,448_832,30;phosphor-poker-chip-thin,512_832,30;phosphor-poker-chip,576_832,30;phosphor-police-car-bold,640_832,30;phosphor-police-car-duotone,704_832,30;phosphor-police-car-fill,768_832,30;phosphor-police-car-light,832_832,30;phosphor-police-car-thin,896_832,30;phosphor-police-car,960_832,30;phosphor-polygon-bold,0_896,30;phosphor-polygon-duotone,64_896,30;phosphor-polygon-fill,128_896,30;phosphor-polygon-light,192_896,30;phosphor-polygon-thin,256_896,30;phosphor-polygon,320_896,30;phosphor-popcorn-bold,384_896,30;phosphor-popcorn-duotone,448_896,30;phosphor-popcorn-fill,512_896,30;phosphor-popcorn-light,576_896,30;phosphor-popcorn-thin,640_896,30;phosphor-popcorn,704_896,30;phosphor-popsicle-bold,768_896,30;phosphor-popsicle-duotone,832_896,30;phosphor-popsicle-fill,896_896,30;phosphor-popsicle-light,960_896,30;phosphor-popsicle-thin,0_960,30;phosphor-popsicle,64_960,30;phosphor-potted-plant-bold,128_960,30;phosphor-potted-plant-duotone,192_960,30;phosphor-potted-plant-fill,256_960,30;phosphor-potted-plant-light,320_960,30;phosphor-potted-plant-thin,384_960,30;phosphor-potted-plant,448_960,30;phosphor-power-bold,512_960,30;phosphor-power-duotone,576_960,30;phosphor-power-fill,640_960,30;phosphor-power-light,704_960,30;phosphor-power-thin,768_960,30;phosphor-power,832_960,30;phosphor-prescription-bold,896_960,30;phosphor-prescription-duotone,960_960,30;phosphor-prescription-fill,0_0,31;phosphor-prescription-light,64_0,31;phosphor-prescription-thin,128_0,31;phosphor-prescription,192_0,31;phosphor-presentation-bold,256_0,31;phosphor-presentation-chart-bold,320_0,31;phosphor-presentation-chart-duotone,384_0,31;phosphor-presentation-chart-fill,448_0,31;phosphor-presentation-chart-light,512_0,31;phosphor-presentation-chart-thin,576_0,31;phosphor-presentation-chart,640_0,31;phosphor-presentation-duotone,704_0,31;phosphor-presentation-fill,768_0,31;phosphor-presentation-light,832_0,31;phosphor-presentation-thin,896_0,31;phosphor-presentation,960_0,31;phosphor-printer-bold,0_64,31;phosphor-printer-duotone,64_64,31;phosphor-printer-fill,128_64,31;phosphor-printer-light,192_64,31;phosphor-printer-thin,256_64,31;phosphor-printer,320_64,31;phosphor-prohibit-bold,384_64,31;phosphor-prohibit-duotone,448_64,31;phosphor-prohibit-fill,512_64,31;phosphor-prohibit-inset-bold,576_64,31;phosphor-prohibit-inset-duotone,640_64,31;phosphor-prohibit-inset-fill,704_64,31;phosphor-prohibit-inset-light,768_64,31;phosphor-prohibit-inset-thin,832_64,31;phosphor-prohibit-inset,896_64,31;phosphor-prohibit-light,960_64,31;phosphor-prohibit-thin,0_128,31;phosphor-prohibit,64_128,31;phosphor-projector-screen-bold,128_128,31;phosphor-projector-screen-chart-bold,192_128,31;phosphor-projector-screen-chart-duotone,256_128,31;phosphor-projector-screen-chart-fill,320_128,31;phosphor-projector-screen-chart-light,384_128,31;phosphor-projector-screen-chart-thin,448_128,31;phosphor-projector-screen-chart,512_128,31;phosphor-projector-screen-duotone,576_128,31;phosphor-projector-screen-fill,640_128,31;phosphor-projector-screen-light,704_128,31;phosphor-projector-screen-thin,768_128,31;phosphor-projector-screen,832_128,31;phosphor-pulse-bold,896_128,31;phosphor-pulse-duotone,960_128,31;phosphor-pulse-fill,0_192,31;phosphor-pulse-light,64_192,31;phosphor-pulse-thin,128_192,31;phosphor-pulse,192_192,31;phosphor-push-pin-bold,256_192,31;phosphor-push-pin-duotone,320_192,31;phosphor-push-pin-fill,384_192,31;phosphor-push-pin-light,448_192,31;phosphor-push-pin-simple-bold,512_192,31;phosphor-push-pin-simple-duotone,576_192,31;phosphor-push-pin-simple-fill,640_192,31;phosphor-push-pin-simple-light,704_192,31;phosphor-push-pin-simple-slash-bold,768_192,31;phosphor-push-pin-simple-slash-duotone,832_192,31;phosphor-push-pin-simple-slash-fill,896_192,31;phosphor-push-pin-simple-slash-light,960_192,31;phosphor-push-pin-simple-slash-thin,0_256,31;phosphor-push-pin-simple-slash,64_256,31;phosphor-push-pin-simple-thin,128_256,31;phosphor-push-pin-simple,192_256,31;phosphor-push-pin-slash-bold,256_256,31;phosphor-push-pin-slash-duotone,320_256,31;phosphor-push-pin-slash-fill,384_256,31;phosphor-push-pin-slash-light,448_256,31;phosphor-push-pin-slash-thin,512_256,31;phosphor-push-pin-slash,576_256,31;phosphor-push-pin-thin,640_256,31;phosphor-push-pin,704_256,31;phosphor-puzzle-piece-bold,768_256,31;phosphor-puzzle-piece-duotone,832_256,31;phosphor-puzzle-piece-fill,896_256,31;phosphor-puzzle-piece-light,960_256,31;phosphor-puzzle-piece-thin,0_320,31;phosphor-puzzle-piece,64_320,31;phosphor-qr-code-bold,128_320,31;phosphor-qr-code-duotone,192_320,31;phosphor-qr-code-fill,256_320,31;phosphor-qr-code-light,320_320,31;phosphor-qr-code-thin,384_320,31;phosphor-qr-code,448_320,31;phosphor-question-bold,512_320,31;phosphor-question-duotone,576_320,31;phosphor-question-fill,640_320,31;phosphor-question-light,704_320,31;phosphor-question-mark-bold,768_320,31;phosphor-question-mark-duotone,832_320,31;phosphor-question-mark-fill,896_320,31;phosphor-question-mark-light,960_320,31;phosphor-question-mark-thin,0_384,31;phosphor-question-mark,64_384,31;phosphor-question-thin,128_384,31;phosphor-question,192_384,31;phosphor-queue-bold,256_384,31;phosphor-queue-duotone,320_384,31;phosphor-queue-fill,384_384,31;phosphor-queue-light,448_384,31;phosphor-queue-thin,512_384,31;phosphor-queue,576_384,31;phosphor-quotes-bold,640_384,31;phosphor-quotes-duotone,704_384,31;phosphor-quotes-fill,768_384,31;phosphor-quotes-light,832_384,31;phosphor-quotes-thin,896_384,31;phosphor-quotes,960_384,31;phosphor-rabbit-bold,0_448,31;phosphor-rabbit-duotone,64_448,31;phosphor-rabbit-fill,128_448,31;phosphor-rabbit-light,192_448,31;phosphor-rabbit-thin,256_448,31;phosphor-rabbit,320_448,31;phosphor-racquet-bold,384_448,31;phosphor-racquet-duotone,448_448,31;phosphor-racquet-fill,512_448,31;phosphor-racquet-light,576_448,31;phosphor-racquet-thin,640_448,31;phosphor-racquet,704_448,31;phosphor-radical-bold,768_448,31;phosphor-radical-duotone,832_448,31;phosphor-radical-fill,896_448,31;phosphor-radical-light,960_448,31;phosphor-radical-thin,0_512,31;phosphor-radical,64_512,31;phosphor-radio-bold,128_512,31;phosphor-radio-button-bold,192_512,31;phosphor-radio-button-duotone,256_512,31;phosphor-radio-button-fill,320_512,31;phosphor-radio-button-light,384_512,31;phosphor-radio-button-thin,448_512,31;phosphor-radio-button,512_512,31;phosphor-radio-duotone,576_512,31;phosphor-radio-fill,640_512,31;phosphor-radio-light,704_512,31;phosphor-radio-thin,768_512,31;phosphor-radio,832_512,31;phosphor-radioactive-bold,896_512,31;phosphor-radioactive-duotone,960_512,31;phosphor-radioactive-fill,0_576,31;phosphor-radioactive-light,64_576,31;phosphor-radioactive-thin,128_576,31;phosphor-radioactive,192_576,31;phosphor-rainbow-bold,256_576,31;phosphor-rainbow-cloud-bold,320_576,31;phosphor-rainbow-cloud-duotone,384_576,31;phosphor-rainbow-cloud-fill,448_576,31;phosphor-rainbow-cloud-light,512_576,31;phosphor-rainbow-cloud-thin,576_576,31;phosphor-rainbow-cloud,640_576,31;phosphor-rainbow-duotone,704_576,31;phosphor-rainbow-fill,768_576,31;phosphor-rainbow-light,832_576,31;phosphor-rainbow-thin,896_576,31;phosphor-rainbow,960_576,31;phosphor-ranking-bold,0_640,31;phosphor-ranking-duotone,64_640,31;phosphor-ranking-fill,128_640,31;phosphor-ranking-light,192_640,31;phosphor-ranking-thin,256_640,31;phosphor-ranking,320_640,31;phosphor-read-cv-logo-bold,384_640,31;phosphor-read-cv-logo-duotone,448_640,31;phosphor-read-cv-logo-fill,512_640,31;phosphor-read-cv-logo-light,576_640,31;phosphor-read-cv-logo-thin,640_640,31;phosphor-read-cv-logo,704_640,31;phosphor-receipt-bold,768_640,31;phosphor-receipt-duotone,832_640,31;phosphor-receipt-fill,896_640,31;phosphor-receipt-light,960_640,31;phosphor-receipt-thin,0_704,31;phosphor-receipt-x-bold,64_704,31;phosphor-receipt-x-duotone,128_704,31;phosphor-receipt-x-fill,192_704,31;phosphor-receipt-x-light,256_704,31;phosphor-receipt-x-thin,320_704,31;phosphor-receipt-x,384_704,31;phosphor-receipt,448_704,31;phosphor-record-bold,512_704,31;phosphor-record-duotone,576_704,31;phosphor-record-fill,640_704,31;phosphor-record-light,704_704,31;phosphor-record-thin,768_704,31;phosphor-record,832_704,31;phosphor-rectangle-bold,896_704,31;phosphor-rectangle-dashed-bold,960_704,31;phosphor-rectangle-dashed-duotone,0_768,31;phosphor-rectangle-dashed-fill,64_768,31;phosphor-rectangle-dashed-light,128_768,31;phosphor-rectangle-dashed-thin,192_768,31;phosphor-rectangle-dashed,256_768,31;phosphor-rectangle-duotone,320_768,31;phosphor-rectangle-fill,384_768,31;phosphor-rectangle-light,448_768,31;phosphor-rectangle-thin,512_768,31;phosphor-rectangle,576_768,31;phosphor-recycle-bold,640_768,31;phosphor-recycle-duotone,704_768,31;phosphor-recycle-fill,768_768,31;phosphor-recycle-light,832_768,31;phosphor-recycle-thin,896_768,31;phosphor-recycle,960_768,31;phosphor-reddit-logo-bold,0_832,31;phosphor-reddit-logo-duotone,64_832,31;phosphor-reddit-logo-fill,128_832,31;phosphor-reddit-logo-light,192_832,31;phosphor-reddit-logo-thin,256_832,31;phosphor-reddit-logo,320_832,31;phosphor-repeat-bold,384_832,31;phosphor-repeat-duotone,448_832,31;phosphor-repeat-fill,512_832,31;phosphor-repeat-light,576_832,31;phosphor-repeat-once-bold,640_832,31;phosphor-repeat-once-duotone,704_832,31;phosphor-repeat-once-fill,768_832,31;phosphor-repeat-once-light,832_832,31;phosphor-repeat-once-thin,896_832,31;phosphor-repeat-once,960_832,31;phosphor-repeat-thin,0_896,31;phosphor-repeat,64_896,31;phosphor-replit-logo-bold,128_896,31;phosphor-replit-logo-duotone,192_896,31;phosphor-replit-logo-fill,256_896,31;phosphor-replit-logo-light,320_896,31;phosphor-replit-logo-thin,384_896,31;phosphor-replit-logo,448_896,31;phosphor-resize-bold,512_896,31;phosphor-resize-duotone,576_896,31;phosphor-resize-fill,640_896,31;phosphor-resize-light,704_896,31;phosphor-resize-thin,768_896,31;phosphor-resize,832_896,31;phosphor-rewind-bold,896_896,31;phosphor-rewind-circle-bold,960_896,31;phosphor-rewind-circle-duotone,0_960,31;phosphor-rewind-circle-fill,64_960,31;phosphor-rewind-circle-light,128_960,31;phosphor-rewind-circle-thin,192_960,31;phosphor-rewind-circle,256_960,31;phosphor-rewind-duotone,320_960,31;phosphor-rewind-fill,384_960,31;phosphor-rewind-light,448_960,31;phosphor-rewind-thin,512_960,31;phosphor-rewind,576_960,31;phosphor-road-horizon-bold,640_960,31;phosphor-road-horizon-duotone,704_960,31;phosphor-road-horizon-fill,768_960,31;phosphor-road-horizon-light,832_960,31;phosphor-road-horizon-thin,896_960,31;phosphor-road-horizon,960_960,31;phosphor-robot-bold,0_0,32;phosphor-robot-duotone,64_0,32;phosphor-robot-fill,128_0,32;phosphor-robot-light,192_0,32;phosphor-robot-thin,256_0,32;phosphor-robot,320_0,32;phosphor-rocket-bold,384_0,32;phosphor-rocket-duotone,448_0,32;phosphor-rocket-fill,512_0,32;phosphor-rocket-launch-bold,576_0,32;phosphor-rocket-launch-duotone,640_0,32;phosphor-rocket-launch-fill,704_0,32;phosphor-rocket-launch-light,768_0,32;phosphor-rocket-launch-thin,832_0,32;phosphor-rocket-launch,896_0,32;phosphor-rocket-light,960_0,32;phosphor-rocket-thin,0_64,32;phosphor-rocket,64_64,32;phosphor-rows-bold,128_64,32;phosphor-rows-duotone,192_64,32;phosphor-rows-fill,256_64,32;phosphor-rows-light,320_64,32;phosphor-rows-plus-bottom-bold,384_64,32;phosphor-rows-plus-bottom-duotone,448_64,32;phosphor-rows-plus-bottom-fill,512_64,32;phosphor-rows-plus-bottom-light,576_64,32;phosphor-rows-plus-bottom-thin,640_64,32;phosphor-rows-plus-bottom,704_64,32;phosphor-rows-plus-top-bold,768_64,32;phosphor-rows-plus-top-duotone,832_64,32;phosphor-rows-plus-top-fill,896_64,32;phosphor-rows-plus-top-light,960_64,32;phosphor-rows-plus-top-thin,0_128,32;phosphor-rows-plus-top,64_128,32;phosphor-rows-thin,128_128,32;phosphor-rows,192_128,32;phosphor-rss-bold,256_128,32;phosphor-rss-duotone,320_128,32;phosphor-rss-fill,384_128,32;phosphor-rss-light,448_128,32;phosphor-rss-simple-bold,512_128,32;phosphor-rss-simple-duotone,576_128,32;phosphor-rss-simple-fill,640_128,32;phosphor-rss-simple-light,704_128,32;phosphor-rss-simple-thin,768_128,32;phosphor-rss-simple,832_128,32;phosphor-rss-thin,896_128,32;phosphor-rss,960_128,32;phosphor-rug-bold,0_192,32;phosphor-rug-duotone,64_192,32;phosphor-rug-fill,128_192,32;phosphor-rug-light,192_192,32;phosphor-rug-thin,256_192,32;phosphor-rug,320_192,32;phosphor-ruler-bold,384_192,32;phosphor-ruler-duotone,448_192,32;phosphor-ruler-fill,512_192,32;phosphor-ruler-light,576_192,32;phosphor-ruler-thin,640_192,32;phosphor-ruler,704_192,32;phosphor-sailboat-bold,768_192,32;phosphor-sailboat-duotone,832_192,32;phosphor-sailboat-fill,896_192,32;phosphor-sailboat-light,960_192,32;phosphor-sailboat-thin,0_256,32;phosphor-sailboat,64_256,32;phosphor-scales-bold,128_256,32;phosphor-scales-duotone,192_256,32;phosphor-scales-fill,256_256,32;phosphor-scales-light,320_256,32;phosphor-scales-thin,384_256,32;phosphor-scales,448_256,32;phosphor-scan-bold,512_256,32;phosphor-scan-duotone,576_256,32;phosphor-scan-fill,640_256,32;phosphor-scan-light,704_256,32;phosphor-scan-smiley-bold,768_256,32;phosphor-scan-smiley-duotone,832_256,32;phosphor-scan-smiley-fill,896_256,32;phosphor-scan-smiley-light,960_256,32;phosphor-scan-smiley-thin,0_320,32;phosphor-scan-smiley,64_320,32;phosphor-scan-thin,128_320,32;phosphor-scan,192_320,32;phosphor-scissors-bold,256_320,32;phosphor-scissors-duotone,320_320,32;phosphor-scissors-fill,384_320,32;phosphor-scissors-light,448_320,32;phosphor-scissors-thin,512_320,32;phosphor-scissors,576_320,32;phosphor-scooter-bold,640_320,32;phosphor-scooter-duotone,704_320,32;phosphor-scooter-fill,768_320,32;phosphor-scooter-light,832_320,32;phosphor-scooter-thin,896_320,32;phosphor-scooter,960_320,32;phosphor-screencast-bold,0_384,32;phosphor-screencast-duotone,64_384,32;phosphor-screencast-fill,128_384,32;phosphor-screencast-light,192_384,32;phosphor-screencast-thin,256_384,32;phosphor-screencast,320_384,32;phosphor-screwdriver-bold,384_384,32;phosphor-screwdriver-duotone,448_384,32;phosphor-screwdriver-fill,512_384,32;phosphor-screwdriver-light,576_384,32;phosphor-screwdriver-thin,640_384,32;phosphor-screwdriver,704_384,32;phosphor-scribble-bold,768_384,32;phosphor-scribble-duotone,832_384,32;phosphor-scribble-fill,896_384,32;phosphor-scribble-light,960_384,32;phosphor-scribble-loop-bold,0_448,32;phosphor-scribble-loop-duotone,64_448,32;phosphor-scribble-loop-fill,128_448,32;phosphor-scribble-loop-light,192_448,32;phosphor-scribble-loop-thin,256_448,32;phosphor-scribble-loop,320_448,32;phosphor-scribble-thin,384_448,32;phosphor-scribble,448_448,32;phosphor-scroll-bold,512_448,32;phosphor-scroll-duotone,576_448,32;phosphor-scroll-fill,640_448,32;phosphor-scroll-light,704_448,32;phosphor-scroll-thin,768_448,32;phosphor-scroll,832_448,32;phosphor-seal-bold,896_448,32;phosphor-seal-check-bold,960_448,32;phosphor-seal-check-duotone,0_512,32;phosphor-seal-check-fill,64_512,32;phosphor-seal-check-light,128_512,32;phosphor-seal-check-thin,192_512,32;phosphor-seal-check,256_512,32;phosphor-seal-duotone,320_512,32;phosphor-seal-fill,384_512,32;phosphor-seal-light,448_512,32;phosphor-seal-percent-bold,512_512,32;phosphor-seal-percent-duotone,576_512,32;phosphor-seal-percent-fill,640_512,32;phosphor-seal-percent-light,704_512,32;phosphor-seal-percent-thin,768_512,32;phosphor-seal-percent,832_512,32;phosphor-seal-question-bold,896_512,32;phosphor-seal-question-duotone,960_512,32;phosphor-seal-question-fill,0_576,32;phosphor-seal-question-light,64_576,32;phosphor-seal-question-thin,128_576,32;phosphor-seal-question,192_576,32;phosphor-seal-thin,256_576,32;phosphor-seal-warning-bold,320_576,32;phosphor-seal-warning-duotone,384_576,32;phosphor-seal-warning-fill,448_576,32;phosphor-seal-warning-light,512_576,32;phosphor-seal-warning-thin,576_576,32;phosphor-seal-warning,640_576,32;phosphor-seal,704_576,32;phosphor-seat-bold,768_576,32;phosphor-seat-duotone,832_576,32;phosphor-seat-fill,896_576,32;phosphor-seat-light,960_576,32;phosphor-seat-thin,0_640,32;phosphor-seat,64_640,32;phosphor-seatbelt-bold,128_640,32;phosphor-seatbelt-duotone,192_640,32;phosphor-seatbelt-fill,256_640,32;phosphor-seatbelt-light,320_640,32;phosphor-seatbelt-thin,384_640,32;phosphor-seatbelt,448_640,32;phosphor-security-camera-bold,512_640,32;phosphor-security-camera-duotone,576_640,32;phosphor-security-camera-fill,640_640,32;phosphor-security-camera-light,704_640,32;phosphor-security-camera-thin,768_640,32;phosphor-security-camera,832_640,32;phosphor-selection-all-bold,896_640,32;phosphor-selection-all-duotone,960_640,32;phosphor-selection-all-fill,0_704,32;phosphor-selection-all-light,64_704,32;phosphor-selection-all-thin,128_704,32;phosphor-selection-all,192_704,32;phosphor-selection-background-bold,256_704,32;phosphor-selection-background-duotone,320_704,32;phosphor-selection-background-fill,384_704,32;phosphor-selection-background-light,448_704,32;phosphor-selection-background-thin,512_704,32;phosphor-selection-background,576_704,32;phosphor-selection-bold,640_704,32;phosphor-selection-duotone,704_704,32;phosphor-selection-fill,768_704,32;phosphor-selection-foreground-bold,832_704,32;phosphor-selection-foreground-duotone,896_704,32;phosphor-selection-foreground-fill,960_704,32;phosphor-selection-foreground-light,0_768,32;phosphor-selection-foreground-thin,64_768,32;phosphor-selection-foreground,128_768,32;phosphor-selection-inverse-bold,192_768,32;phosphor-selection-inverse-duotone,256_768,32;phosphor-selection-inverse-fill,320_768,32;phosphor-selection-inverse-light,384_768,32;phosphor-selection-inverse-thin,448_768,32;phosphor-selection-inverse,512_768,32;phosphor-selection-light,576_768,32;phosphor-selection-plus-bold,640_768,32;phosphor-selection-plus-duotone,704_768,32;phosphor-selection-plus-fill,768_768,32;phosphor-selection-plus-light,832_768,32;phosphor-selection-plus-thin,896_768,32;phosphor-selection-plus,960_768,32;phosphor-selection-slash-bold,0_832,32;phosphor-selection-slash-duotone,64_832,32;phosphor-selection-slash-fill,128_832,32;phosphor-selection-slash-light,192_832,32;phosphor-selection-slash-thin,256_832,32;phosphor-selection-slash,320_832,32;phosphor-selection-thin,384_832,32;phosphor-selection,448_832,32;phosphor-shapes-bold,512_832,32;phosphor-shapes-duotone,576_832,32;phosphor-shapes-fill,640_832,32;phosphor-shapes-light,704_832,32;phosphor-shapes-thin,768_832,32;phosphor-shapes,832_832,32;phosphor-share-bold,896_832,32;phosphor-share-duotone,960_832,32;phosphor-share-fat-bold,0_896,32;phosphor-share-fat-duotone,64_896,32;phosphor-share-fat-fill,128_896,32;phosphor-share-fat-light,192_896,32;phosphor-share-fat-thin,256_896,32;phosphor-share-fat,320_896,32;phosphor-share-fill,384_896,32;phosphor-share-light,448_896,32;phosphor-share-network-bold,512_896,32;phosphor-share-network-duotone,576_896,32;phosphor-share-network-fill,640_896,32;phosphor-share-network-light,704_896,32;phosphor-share-network-thin,768_896,32;phosphor-share-network,832_896,32;phosphor-share-thin,896_896,32;phosphor-share,960_896,32;phosphor-shield-bold,0_960,32;phosphor-shield-check-bold,64_960,32;phosphor-shield-check-duotone,128_960,32;phosphor-shield-check-fill,192_960,32;phosphor-shield-check-light,256_960,32;phosphor-shield-check-thin,320_960,32;phosphor-shield-check,384_960,32;phosphor-shield-checkered-bold,448_960,32;phosphor-shield-checkered-duotone,512_960,32;phosphor-shield-checkered-fill,576_960,32;phosphor-shield-checkered-light,640_960,32;phosphor-shield-checkered-thin,704_960,32;phosphor-shield-checkered,768_960,32;phosphor-shield-chevron-bold,832_960,32;phosphor-shield-chevron-duotone,896_960,32;phosphor-shield-chevron-fill,960_960,32;phosphor-shield-chevron-light,0_0,33;phosphor-shield-chevron-thin,64_0,33;phosphor-shield-chevron,128_0,33;phosphor-shield-duotone,192_0,33;phosphor-shield-fill,256_0,33;phosphor-shield-light,320_0,33;phosphor-shield-plus-bold,384_0,33;phosphor-shield-plus-duotone,448_0,33;phosphor-shield-plus-fill,512_0,33;phosphor-shield-plus-light,576_0,33;phosphor-shield-plus-thin,640_0,33;phosphor-shield-plus,704_0,33;phosphor-shield-slash-bold,768_0,33;phosphor-shield-slash-duotone,832_0,33;phosphor-shield-slash-fill,896_0,33;phosphor-shield-slash-light,960_0,33;phosphor-shield-slash-thin,0_64,33;phosphor-shield-slash,64_64,33;phosphor-shield-star-bold,128_64,33;phosphor-shield-star-duotone,192_64,33;phosphor-shield-star-fill,256_64,33;phosphor-shield-star-light,320_64,33;phosphor-shield-star-thin,384_64,33;phosphor-shield-star,448_64,33;phosphor-shield-thin,512_64,33;phosphor-shield-warning-bold,576_64,33;phosphor-shield-warning-duotone,640_64,33;phosphor-shield-warning-fill,704_64,33;phosphor-shield-warning-light,768_64,33;phosphor-shield-warning-thin,832_64,33;phosphor-shield-warning,896_64,33;phosphor-shield,960_64,33;phosphor-shipping-container-bold,0_128,33;phosphor-shipping-container-duotone,64_128,33;phosphor-shipping-container-fill,128_128,33;phosphor-shipping-container-light,192_128,33;phosphor-shipping-container-thin,256_128,33;phosphor-shipping-container,320_128,33;phosphor-shirt-folded-bold,384_128,33;phosphor-shirt-folded-duotone,448_128,33;phosphor-shirt-folded-fill,512_128,33;phosphor-shirt-folded-light,576_128,33;phosphor-shirt-folded-thin,640_128,33;phosphor-shirt-folded,704_128,33;phosphor-shooting-star-bold,768_128,33;phosphor-shooting-star-duotone,832_128,33;phosphor-shooting-star-fill,896_128,33;phosphor-shooting-star-light,960_128,33;phosphor-shooting-star-thin,0_192,33;phosphor-shooting-star,64_192,33;phosphor-shopping-bag-bold,128_192,33;phosphor-shopping-bag-duotone,192_192,33;phosphor-shopping-bag-fill,256_192,33;phosphor-shopping-bag-light,320_192,33;phosphor-shopping-bag-open-bold,384_192,33;phosphor-shopping-bag-open-duotone,448_192,33;phosphor-shopping-bag-open-fill,512_192,33;phosphor-shopping-bag-open-light,576_192,33;phosphor-shopping-bag-open-thin,640_192,33;phosphor-shopping-bag-open,704_192,33;phosphor-shopping-bag-thin,768_192,33;phosphor-shopping-bag,832_192,33;phosphor-shopping-cart-bold,896_192,33;phosphor-shopping-cart-duotone,960_192,33;phosphor-shopping-cart-fill,0_256,33;phosphor-shopping-cart-light,64_256,33;phosphor-shopping-cart-simple-bold,128_256,33;phosphor-shopping-cart-simple-duotone,192_256,33;phosphor-shopping-cart-simple-fill,256_256,33;phosphor-shopping-cart-simple-light,320_256,33;phosphor-shopping-cart-simple-thin,384_256,33;phosphor-shopping-cart-simple,448_256,33;phosphor-shopping-cart-thin,512_256,33;phosphor-shopping-cart,576_256,33;phosphor-shovel-bold,640_256,33;phosphor-shovel-duotone,704_256,33;phosphor-shovel-fill,768_256,33;phosphor-shovel-light,832_256,33;phosphor-shovel-thin,896_256,33;phosphor-shovel,960_256,33;phosphor-shower-bold,0_320,33;phosphor-shower-duotone,64_320,33;phosphor-shower-fill,128_320,33;phosphor-shower-light,192_320,33;phosphor-shower-thin,256_320,33;phosphor-shower,320_320,33;phosphor-shrimp-bold,384_320,33;phosphor-shrimp-duotone,448_320,33;phosphor-shrimp-fill,512_320,33;phosphor-shrimp-light,576_320,33;phosphor-shrimp-thin,640_320,33;phosphor-shrimp,704_320,33;phosphor-shuffle-angular-bold,768_320,33;phosphor-shuffle-angular-duotone,832_320,33;phosphor-shuffle-angular-fill,896_320,33;phosphor-shuffle-angular-light,960_320,33;phosphor-shuffle-angular-thin,0_384,33;phosphor-shuffle-angular,64_384,33;phosphor-shuffle-bold,128_384,33;phosphor-shuffle-duotone,192_384,33;phosphor-shuffle-fill,256_384,33;phosphor-shuffle-light,320_384,33;phosphor-shuffle-simple-bold,384_384,33;phosphor-shuffle-simple-duotone,448_384,33;phosphor-shuffle-simple-fill,512_384,33;phosphor-shuffle-simple-light,576_384,33;phosphor-shuffle-simple-thin,640_384,33;phosphor-shuffle-simple,704_384,33;phosphor-shuffle-thin,768_384,33;phosphor-shuffle,832_384,33;phosphor-sidebar-bold,896_384,33;phosphor-sidebar-duotone,960_384,33;phosphor-sidebar-fill,0_448,33;phosphor-sidebar-light,64_448,33;phosphor-sidebar-simple-bold,128_448,33;phosphor-sidebar-simple-duotone,192_448,33;phosphor-sidebar-simple-fill,256_448,33;phosphor-sidebar-simple-light,320_448,33;phosphor-sidebar-simple-thin,384_448,33;phosphor-sidebar-simple,448_448,33;phosphor-sidebar-thin,512_448,33;phosphor-sidebar,576_448,33;phosphor-sigma-bold,640_448,33;phosphor-sigma-duotone,704_448,33;phosphor-sigma-fill,768_448,33;phosphor-sigma-light,832_448,33;phosphor-sigma-thin,896_448,33;phosphor-sigma,960_448,33;phosphor-sign-in-bold,0_512,33;phosphor-sign-in-duotone,64_512,33;phosphor-sign-in-fill,128_512,33;phosphor-sign-in-light,192_512,33;phosphor-sign-in-thin,256_512,33;phosphor-sign-in,320_512,33;phosphor-sign-out-bold,384_512,33;phosphor-sign-out-duotone,448_512,33;phosphor-sign-out-fill,512_512,33;phosphor-sign-out-light,576_512,33;phosphor-sign-out-thin,640_512,33;phosphor-sign-out,704_512,33;phosphor-signature-bold,768_512,33;phosphor-signature-duotone,832_512,33;phosphor-signature-fill,896_512,33;phosphor-signature-light,960_512,33;phosphor-signature-thin,0_576,33;phosphor-signature,64_576,33;phosphor-signpost-bold,128_576,33;phosphor-signpost-duotone,192_576,33;phosphor-signpost-fill,256_576,33;phosphor-signpost-light,320_576,33;phosphor-signpost-thin,384_576,33;phosphor-signpost,448_576,33;phosphor-sim-card-bold,512_576,33;phosphor-sim-card-duotone,576_576,33;phosphor-sim-card-fill,640_576,33;phosphor-sim-card-light,704_576,33;phosphor-sim-card-thin,768_576,33;phosphor-sim-card,832_576,33;phosphor-siren-bold,896_576,33;phosphor-siren-duotone,960_576,33;phosphor-siren-fill,0_640,33;phosphor-siren-light,64_640,33;phosphor-siren-thin,128_640,33;phosphor-siren,192_640,33;phosphor-sketch-logo-bold,256_640,33;phosphor-sketch-logo-duotone,320_640,33;phosphor-sketch-logo-fill,384_640,33;phosphor-sketch-logo-light,448_640,33;phosphor-sketch-logo-thin,512_640,33;phosphor-sketch-logo,576_640,33;phosphor-skip-back-bold,640_640,33;phosphor-skip-back-circle-bold,704_640,33;phosphor-skip-back-circle-duotone,768_640,33;phosphor-skip-back-circle-fill,832_640,33;phosphor-skip-back-circle-light,896_640,33;phosphor-skip-back-circle-thin,960_640,33;phosphor-skip-back-circle,0_704,33;phosphor-skip-back-duotone,64_704,33;phosphor-skip-back-fill,128_704,33;phosphor-skip-back-light,192_704,33;phosphor-skip-back-thin,256_704,33;phosphor-skip-back,320_704,33;phosphor-skip-forward-bold,384_704,33;phosphor-skip-forward-circle-bold,448_704,33;phosphor-skip-forward-circle-duotone,512_704,33;phosphor-skip-forward-circle-fill,576_704,33;phosphor-skip-forward-circle-light,640_704,33;phosphor-skip-forward-circle-thin,704_704,33;phosphor-skip-forward-circle,768_704,33;phosphor-skip-forward-duotone,832_704,33;phosphor-skip-forward-fill,896_704,33;phosphor-skip-forward-light,960_704,33;phosphor-skip-forward-thin,0_768,33;phosphor-skip-forward,64_768,33;phosphor-skull-bold,128_768,33;phosphor-skull-duotone,192_768,33;phosphor-skull-fill,256_768,33;phosphor-skull-light,320_768,33;phosphor-skull-thin,384_768,33;phosphor-skull,448_768,33;phosphor-skype-logo-bold,512_768,33;phosphor-skype-logo-duotone,576_768,33;phosphor-skype-logo-fill,640_768,33;phosphor-skype-logo-light,704_768,33;phosphor-skype-logo-thin,768_768,33;phosphor-skype-logo,832_768,33;phosphor-slack-logo-bold,896_768,33;phosphor-slack-logo-duotone,960_768,33;phosphor-slack-logo-fill,0_832,33;phosphor-slack-logo-light,64_832,33;phosphor-slack-logo-thin,128_832,33;phosphor-slack-logo,192_832,33;phosphor-sliders-bold,256_832,33;phosphor-sliders-duotone,320_832,33;phosphor-sliders-fill,384_832,33;phosphor-sliders-horizontal-bold,448_832,33;phosphor-sliders-horizontal-duotone,512_832,33;phosphor-sliders-horizontal-fill,576_832,33;phosphor-sliders-horizontal-light,640_832,33;phosphor-sliders-horizontal-thin,704_832,33;phosphor-sliders-horizontal,768_832,33;phosphor-sliders-light,832_832,33;phosphor-sliders-thin,896_832,33;phosphor-sliders,960_832,33;phosphor-slideshow-bold,0_896,33;phosphor-slideshow-duotone,64_896,33;phosphor-slideshow-fill,128_896,33;phosphor-slideshow-light,192_896,33;phosphor-slideshow-thin,256_896,33;phosphor-slideshow,320_896,33;phosphor-smiley-angry-bold,384_896,33;phosphor-smiley-angry-duotone,448_896,33;phosphor-smiley-angry-fill,512_896,33;phosphor-smiley-angry-light,576_896,33;phosphor-smiley-angry-thin,640_896,33;phosphor-smiley-angry,704_896,33;phosphor-smiley-blank-bold,768_896,33;phosphor-smiley-blank-duotone,832_896,33;phosphor-smiley-blank-fill,896_896,33;phosphor-smiley-blank-light,960_896,33;phosphor-smiley-blank-thin,0_960,33;phosphor-smiley-blank,64_960,33;phosphor-smiley-bold,128_960,33;phosphor-smiley-duotone,192_960,33;phosphor-smiley-fill,256_960,33;phosphor-smiley-light,320_960,33;phosphor-smiley-meh-bold,384_960,33;phosphor-smiley-meh-duotone,448_960,33;phosphor-smiley-meh-fill,512_960,33;phosphor-smiley-meh-light,576_960,33;phosphor-smiley-meh-thin,640_960,33;phosphor-smiley-meh,704_960,33;phosphor-smiley-melting-bold,768_960,33;phosphor-smiley-melting-duotone,832_960,33;phosphor-smiley-melting-fill,896_960,33;phosphor-smiley-melting-light,960_960,33;phosphor-smiley-melting-thin,0_0,34;phosphor-smiley-melting,64_0,34;phosphor-smiley-nervous-bold,128_0,34;phosphor-smiley-nervous-duotone,192_0,34;phosphor-smiley-nervous-fill,256_0,34;phosphor-smiley-nervous-light,320_0,34;phosphor-smiley-nervous-thin,384_0,34;phosphor-smiley-nervous,448_0,34;phosphor-smiley-sad-bold,512_0,34;phosphor-smiley-sad-duotone,576_0,34;phosphor-smiley-sad-fill,640_0,34;phosphor-smiley-sad-light,704_0,34;phosphor-smiley-sad-thin,768_0,34;phosphor-smiley-sad,832_0,34;phosphor-smiley-sticker-bold,896_0,34;phosphor-smiley-sticker-duotone,960_0,34;phosphor-smiley-sticker-fill,0_64,34;phosphor-smiley-sticker-light,64_64,34;phosphor-smiley-sticker-thin,128_64,34;phosphor-smiley-sticker,192_64,34;phosphor-smiley-thin,256_64,34;phosphor-smiley-wink-bold,320_64,34;phosphor-smiley-wink-duotone,384_64,34;phosphor-smiley-wink-fill,448_64,34;phosphor-smiley-wink-light,512_64,34;phosphor-smiley-wink-thin,576_64,34;phosphor-smiley-wink,640_64,34;phosphor-smiley-x-eyes-bold,704_64,34;phosphor-smiley-x-eyes-duotone,768_64,34;phosphor-smiley-x-eyes-fill,832_64,34;phosphor-smiley-x-eyes-light,896_64,34;phosphor-smiley-x-eyes-thin,960_64,34;phosphor-smiley-x-eyes,0_128,34;phosphor-smiley,64_128,34;phosphor-snapchat-logo-bold,128_128,34;phosphor-snapchat-logo-duotone,192_128,34;phosphor-snapchat-logo-fill,256_128,34;phosphor-snapchat-logo-light,320_128,34;phosphor-snapchat-logo-thin,384_128,34;phosphor-snapchat-logo,448_128,34;phosphor-sneaker-bold,512_128,34;phosphor-sneaker-duotone,576_128,34;phosphor-sneaker-fill,640_128,34;phosphor-sneaker-light,704_128,34;phosphor-sneaker-move-bold,768_128,34;phosphor-sneaker-move-duotone,832_128,34;phosphor-sneaker-move-fill,896_128,34;phosphor-sneaker-move-light,960_128,34;phosphor-sneaker-move-thin,0_192,34;phosphor-sneaker-move,64_192,34;phosphor-sneaker-thin,128_192,34;phosphor-sneaker,192_192,34;phosphor-snowflake-bold,256_192,34;phosphor-snowflake-duotone,320_192,34;phosphor-snowflake-fill,384_192,34;phosphor-snowflake-light,448_192,34;phosphor-snowflake-thin,512_192,34;phosphor-snowflake,576_192,34;phosphor-soccer-ball-bold,640_192,34;phosphor-soccer-ball-duotone,704_192,34;phosphor-soccer-ball-fill,768_192,34;phosphor-soccer-ball-light,832_192,34;phosphor-soccer-ball-thin,896_192,34;phosphor-soccer-ball,960_192,34;phosphor-sock-bold,0_256,34;phosphor-sock-duotone,64_256,34;phosphor-sock-fill,128_256,34;phosphor-sock-light,192_256,34;phosphor-sock-thin,256_256,34;phosphor-sock,320_256,34;phosphor-solar-panel-bold,384_256,34;phosphor-solar-panel-duotone,448_256,34;phosphor-solar-panel-fill,512_256,34;phosphor-solar-panel-light,576_256,34;phosphor-solar-panel-thin,640_256,34;phosphor-solar-panel,704_256,34;phosphor-solar-roof-bold,768_256,34;phosphor-solar-roof-duotone,832_256,34;phosphor-solar-roof-fill,896_256,34;phosphor-solar-roof-light,960_256,34;phosphor-solar-roof-thin,0_320,34;phosphor-solar-roof,64_320,34;phosphor-sort-ascending-bold,128_320,34;phosphor-sort-ascending-duotone,192_320,34;phosphor-sort-ascending-fill,256_320,34;phosphor-sort-ascending-light,320_320,34;phosphor-sort-ascending-thin,384_320,34;phosphor-sort-ascending,448_320,34;phosphor-sort-descending-bold,512_320,34;phosphor-sort-descending-duotone,576_320,34;phosphor-sort-descending-fill,640_320,34;phosphor-sort-descending-light,704_320,34;phosphor-sort-descending-thin,768_320,34;phosphor-sort-descending,832_320,34;phosphor-soundcloud-logo-bold,896_320,34;phosphor-soundcloud-logo-duotone,960_320,34;phosphor-soundcloud-logo-fill,0_384,34;phosphor-soundcloud-logo-light,64_384,34;phosphor-soundcloud-logo-thin,128_384,34;phosphor-soundcloud-logo,192_384,34;phosphor-spade-bold,256_384,34;phosphor-spade-duotone,320_384,34;phosphor-spade-fill,384_384,34;phosphor-spade-light,448_384,34;phosphor-spade-thin,512_384,34;phosphor-spade,576_384,34;phosphor-sparkle-bold,640_384,34;phosphor-sparkle-duotone,704_384,34;phosphor-sparkle-fill,768_384,34;phosphor-sparkle-light,832_384,34;phosphor-sparkle-thin,896_384,34;phosphor-sparkle,960_384,34;phosphor-speaker-hifi-bold,0_448,34;phosphor-speaker-hifi-duotone,64_448,34;phosphor-speaker-hifi-fill,128_448,34;phosphor-speaker-hifi-light,192_448,34;phosphor-speaker-hifi-thin,256_448,34;phosphor-speaker-hifi,320_448,34;phosphor-speaker-high-bold,384_448,34;phosphor-speaker-high-duotone,448_448,34;phosphor-speaker-high-fill,512_448,34;phosphor-speaker-high-light,576_448,34;phosphor-speaker-high-thin,640_448,34;phosphor-speaker-high,704_448,34;phosphor-speaker-low-bold,768_448,34;phosphor-speaker-low-duotone,832_448,34;phosphor-speaker-low-fill,896_448,34;phosphor-speaker-low-light,960_448,34;phosphor-speaker-low-thin,0_512,34;phosphor-speaker-low,64_512,34;phosphor-speaker-none-bold,128_512,34;phosphor-speaker-none-duotone,192_512,34;phosphor-speaker-none-fill,256_512,34;phosphor-speaker-none-light,320_512,34;phosphor-speaker-none-thin,384_512,34;phosphor-speaker-none,448_512,34;phosphor-speaker-simple-high-bold,512_512,34;phosphor-speaker-simple-high-duotone,576_512,34;phosphor-speaker-simple-high-fill,640_512,34;phosphor-speaker-simple-high-light,704_512,34;phosphor-speaker-simple-high-thin,768_512,34;phosphor-speaker-simple-high,832_512,34;phosphor-speaker-simple-low-bold,896_512,34;phosphor-speaker-simple-low-duotone,960_512,34;phosphor-speaker-simple-low-fill,0_576,34;phosphor-speaker-simple-low-light,64_576,34;phosphor-speaker-simple-low-thin,128_576,34;phosphor-speaker-simple-low,192_576,34;phosphor-speaker-simple-none-bold,256_576,34;phosphor-speaker-simple-none-duotone,320_576,34;phosphor-speaker-simple-none-fill,384_576,34;phosphor-speaker-simple-none-light,448_576,34;phosphor-speaker-simple-none-thin,512_576,34;phosphor-speaker-simple-none,576_576,34;phosphor-speaker-simple-slash-bold,640_576,34;phosphor-speaker-simple-slash-duotone,704_576,34;phosphor-speaker-simple-slash-fill,768_576,34;phosphor-speaker-simple-slash-light,832_576,34;phosphor-speaker-simple-slash-thin,896_576,34;phosphor-speaker-simple-slash,960_576,34;phosphor-speaker-simple-x-bold,0_640,34;phosphor-speaker-simple-x-duotone,64_640,34;phosphor-speaker-simple-x-fill,128_640,34;phosphor-speaker-simple-x-light,192_640,34;phosphor-speaker-simple-x-thin,256_640,34;phosphor-speaker-simple-x,320_640,34;phosphor-speaker-slash-bold,384_640,34;phosphor-speaker-slash-duotone,448_640,34;phosphor-speaker-slash-fill,512_640,34;phosphor-speaker-slash-light,576_640,34;phosphor-speaker-slash-thin,640_640,34;phosphor-speaker-slash,704_640,34;phosphor-speaker-x-bold,768_640,34;phosphor-speaker-x-duotone,832_640,34;phosphor-speaker-x-fill,896_640,34;phosphor-speaker-x-light,960_640,34;phosphor-speaker-x-thin,0_704,34;phosphor-speaker-x,64_704,34;phosphor-speedometer-bold,128_704,34;phosphor-speedometer-duotone,192_704,34;phosphor-speedometer-fill,256_704,34;phosphor-speedometer-light,320_704,34;phosphor-speedometer-thin,384_704,34;phosphor-speedometer,448_704,34;phosphor-sphere-bold,512_704,34;phosphor-sphere-duotone,576_704,34;phosphor-sphere-fill,640_704,34;phosphor-sphere-light,704_704,34;phosphor-sphere-thin,768_704,34;phosphor-sphere,832_704,34;phosphor-spinner-ball-bold,896_704,34;phosphor-spinner-ball-duotone,960_704,34;phosphor-spinner-ball-fill,0_768,34;phosphor-spinner-ball-light,64_768,34;phosphor-spinner-ball-thin,128_768,34;phosphor-spinner-ball,192_768,34;phosphor-spinner-bold,256_768,34;phosphor-spinner-duotone,320_768,34;phosphor-spinner-fill,384_768,34;phosphor-spinner-gap-bold,448_768,34;phosphor-spinner-gap-duotone,512_768,34;phosphor-spinner-gap-fill,576_768,34;phosphor-spinner-gap-light,640_768,34;phosphor-spinner-gap-thin,704_768,34;phosphor-spinner-gap,768_768,34;phosphor-spinner-light,832_768,34;phosphor-spinner-thin,896_768,34;phosphor-spinner,960_768,34;phosphor-spiral-bold,0_832,34;phosphor-spiral-duotone,64_832,34;phosphor-spiral-fill,128_832,34;phosphor-spiral-light,192_832,34;phosphor-spiral-thin,256_832,34;phosphor-spiral,320_832,34;phosphor-split-horizontal-bold,384_832,34;phosphor-split-horizontal-duotone,448_832,34;phosphor-split-horizontal-fill,512_832,34;phosphor-split-horizontal-light,576_832,34;phosphor-split-horizontal-thin,640_832,34;phosphor-split-horizontal,704_832,34;phosphor-split-vertical-bold,768_832,34;phosphor-split-vertical-duotone,832_832,34;phosphor-split-vertical-fill,896_832,34;phosphor-split-vertical-light,960_832,34;phosphor-split-vertical-thin,0_896,34;phosphor-split-vertical,64_896,34;phosphor-spotify-logo-bold,128_896,34;phosphor-spotify-logo-duotone,192_896,34;phosphor-spotify-logo-fill,256_896,34;phosphor-spotify-logo-light,320_896,34;phosphor-spotify-logo-thin,384_896,34;phosphor-spotify-logo,448_896,34;phosphor-spray-bottle-bold,512_896,34;phosphor-spray-bottle-duotone,576_896,34;phosphor-spray-bottle-fill,640_896,34;phosphor-spray-bottle-light,704_896,34;phosphor-spray-bottle-thin,768_896,34;phosphor-spray-bottle,832_896,34;phosphor-square-bold,896_896,34;phosphor-square-duotone,960_896,34;phosphor-square-fill,0_960,34;phosphor-square-half-bold,64_960,34;phosphor-square-half-bottom-bold,128_960,34;phosphor-square-half-bottom-duotone,192_960,34;phosphor-square-half-bottom-fill,256_960,34;phosphor-square-half-bottom-light,320_960,34;phosphor-square-half-bottom-thin,384_960,34;phosphor-square-half-bottom,448_960,34;phosphor-square-half-duotone,512_960,34;phosphor-square-half-fill,576_960,34;phosphor-square-half-light,640_960,34;phosphor-square-half-thin,704_960,34;phosphor-square-half,768_960,34;phosphor-square-light,832_960,34;phosphor-square-logo-bold,896_960,34;phosphor-square-logo-duotone,960_960,34;phosphor-square-logo-fill,0_0,35;phosphor-square-logo-light,64_0,35;phosphor-square-logo-thin,128_0,35;phosphor-square-logo,192_0,35;phosphor-square-split-horizontal-bold,256_0,35;phosphor-square-split-horizontal-duotone,320_0,35;phosphor-square-split-horizontal-fill,384_0,35;phosphor-square-split-horizontal-light,448_0,35;phosphor-square-split-horizontal-thin,512_0,35;phosphor-square-split-horizontal,576_0,35;phosphor-square-split-vertical-bold,640_0,35;phosphor-square-split-vertical-duotone,704_0,35;phosphor-square-split-vertical-fill,768_0,35;phosphor-square-split-vertical-light,832_0,35;phosphor-square-split-vertical-thin,896_0,35;phosphor-square-split-vertical,960_0,35;phosphor-square-thin,0_64,35;phosphor-square,64_64,35;phosphor-squares-four-bold,128_64,35;phosphor-squares-four-duotone,192_64,35;phosphor-squares-four-fill,256_64,35;phosphor-squares-four-light,320_64,35;phosphor-squares-four-thin,384_64,35;phosphor-squares-four,448_64,35;phosphor-stack-bold,512_64,35;phosphor-stack-duotone,576_64,35;phosphor-stack-fill,640_64,35;phosphor-stack-light,704_64,35;phosphor-stack-minus-bold,768_64,35;phosphor-stack-minus-duotone,832_64,35;phosphor-stack-minus-fill,896_64,35;phosphor-stack-minus-light,960_64,35;phosphor-stack-minus-thin,0_128,35;phosphor-stack-minus,64_128,35;phosphor-stack-overflow-logo-bold,128_128,35;phosphor-stack-overflow-logo-duotone,192_128,35;phosphor-stack-overflow-logo-fill,256_128,35;phosphor-stack-overflow-logo-light,320_128,35;phosphor-stack-overflow-logo-thin,384_128,35;phosphor-stack-overflow-logo,448_128,35;phosphor-stack-plus-bold,512_128,35;phosphor-stack-plus-duotone,576_128,35;phosphor-stack-plus-fill,640_128,35;phosphor-stack-plus-light,704_128,35;phosphor-stack-plus-thin,768_128,35;phosphor-stack-plus,832_128,35;phosphor-stack-simple-bold,896_128,35;phosphor-stack-simple-duotone,960_128,35;phosphor-stack-simple-fill,0_192,35;phosphor-stack-simple-light,64_192,35;phosphor-stack-simple-thin,128_192,35;phosphor-stack-simple,192_192,35;phosphor-stack-thin,256_192,35;phosphor-stack,320_192,35;phosphor-stairs-bold,384_192,35;phosphor-stairs-duotone,448_192,35;phosphor-stairs-fill,512_192,35;phosphor-stairs-light,576_192,35;phosphor-stairs-thin,640_192,35;phosphor-stairs,704_192,35;phosphor-stamp-bold,768_192,35;phosphor-stamp-duotone,832_192,35;phosphor-stamp-fill,896_192,35;phosphor-stamp-light,960_192,35;phosphor-stamp-thin,0_256,35;phosphor-stamp,64_256,35;phosphor-standard-definition-bold,128_256,35;phosphor-standard-definition-duotone,192_256,35;phosphor-standard-definition-fill,256_256,35;phosphor-standard-definition-light,320_256,35;phosphor-standard-definition-thin,384_256,35;phosphor-standard-definition,448_256,35;phosphor-star-and-crescent-bold,512_256,35;phosphor-star-and-crescent-duotone,576_256,35;phosphor-star-and-crescent-fill,640_256,35;phosphor-star-and-crescent-light,704_256,35;phosphor-star-and-crescent-thin,768_256,35;phosphor-star-and-crescent,832_256,35;phosphor-star-bold,896_256,35;phosphor-star-duotone,960_256,35;phosphor-star-fill,0_320,35;phosphor-star-four-bold,64_320,35;phosphor-star-four-duotone,128_320,35;phosphor-star-four-fill,192_320,35;phosphor-star-four-light,256_320,35;phosphor-star-four-thin,320_320,35;phosphor-star-four,384_320,35;phosphor-star-half-bold,448_320,35;phosphor-star-half-duotone,512_320,35;phosphor-star-half-fill,576_320,35;phosphor-star-half-light,640_320,35;phosphor-star-half-thin,704_320,35;phosphor-star-half,768_320,35;phosphor-star-light,832_320,35;phosphor-star-of-david-bold,896_320,35;phosphor-star-of-david-duotone,960_320,35;phosphor-star-of-david-fill,0_384,35;phosphor-star-of-david-light,64_384,35;phosphor-star-of-david-thin,128_384,35;phosphor-star-of-david,192_384,35;phosphor-star-thin,256_384,35;phosphor-star,320_384,35;phosphor-steam-logo-bold,384_384,35;phosphor-steam-logo-duotone,448_384,35;phosphor-steam-logo-fill,512_384,35;phosphor-steam-logo-light,576_384,35;phosphor-steam-logo-thin,640_384,35;phosphor-steam-logo,704_384,35;phosphor-steering-wheel-bold,768_384,35;phosphor-steering-wheel-duotone,832_384,35;phosphor-steering-wheel-fill,896_384,35;phosphor-steering-wheel-light,960_384,35;phosphor-steering-wheel-thin,0_448,35;phosphor-steering-wheel,64_448,35;phosphor-steps-bold,128_448,35;phosphor-steps-duotone,192_448,35;phosphor-steps-fill,256_448,35;phosphor-steps-light,320_448,35;phosphor-steps-thin,384_448,35;phosphor-steps,448_448,35;phosphor-stethoscope-bold,512_448,35;phosphor-stethoscope-duotone,576_448,35;phosphor-stethoscope-fill,640_448,35;phosphor-stethoscope-light,704_448,35;phosphor-stethoscope-thin,768_448,35;phosphor-stethoscope,832_448,35;phosphor-sticker-bold,896_448,35;phosphor-sticker-duotone,960_448,35;phosphor-sticker-fill,0_512,35;phosphor-sticker-light,64_512,35;phosphor-sticker-thin,128_512,35;phosphor-sticker,192_512,35;phosphor-stool-bold,256_512,35;phosphor-stool-duotone,320_512,35;phosphor-stool-fill,384_512,35;phosphor-stool-light,448_512,35;phosphor-stool-thin,512_512,35;phosphor-stool,576_512,35;phosphor-stop-bold,640_512,35;phosphor-stop-circle-bold,704_512,35;phosphor-stop-circle-duotone,768_512,35;phosphor-stop-circle-fill,832_512,35;phosphor-stop-circle-light,896_512,35;phosphor-stop-circle-thin,960_512,35;phosphor-stop-circle,0_576,35;phosphor-stop-duotone,64_576,35;phosphor-stop-fill,128_576,35;phosphor-stop-light,192_576,35;phosphor-stop-thin,256_576,35;phosphor-stop,320_576,35;phosphor-storefront-bold,384_576,35;phosphor-storefront-duotone,448_576,35;phosphor-storefront-fill,512_576,35;phosphor-storefront-light,576_576,35;phosphor-storefront-thin,640_576,35;phosphor-storefront,704_576,35;phosphor-strategy-bold,768_576,35;phosphor-strategy-duotone,832_576,35;phosphor-strategy-fill,896_576,35;phosphor-strategy-light,960_576,35;phosphor-strategy-thin,0_640,35;phosphor-strategy,64_640,35;phosphor-stripe-logo-bold,128_640,35;phosphor-stripe-logo-duotone,192_640,35;phosphor-stripe-logo-fill,256_640,35;phosphor-stripe-logo-light,320_640,35;phosphor-stripe-logo-thin,384_640,35;phosphor-stripe-logo,448_640,35;phosphor-student-bold,512_640,35;phosphor-student-duotone,576_640,35;phosphor-student-fill,640_640,35;phosphor-student-light,704_640,35;phosphor-student-thin,768_640,35;phosphor-student,832_640,35;phosphor-subset-of-bold,896_640,35;phosphor-subset-of-duotone,960_640,35;phosphor-subset-of-fill,0_704,35;phosphor-subset-of-light,64_704,35;phosphor-subset-of-thin,128_704,35;phosphor-subset-of,192_704,35;phosphor-subset-proper-of-bold,256_704,35;phosphor-subset-proper-of-duotone,320_704,35;phosphor-subset-proper-of-fill,384_704,35;phosphor-subset-proper-of-light,448_704,35;phosphor-subset-proper-of-thin,512_704,35;phosphor-subset-proper-of,576_704,35;phosphor-subtitles-bold,640_704,35;phosphor-subtitles-duotone,704_704,35;phosphor-subtitles-fill,768_704,35;phosphor-subtitles-light,832_704,35;phosphor-subtitles-slash-bold,896_704,35;phosphor-subtitles-slash-duotone,960_704,35;phosphor-subtitles-slash-fill,0_768,35;phosphor-subtitles-slash-light,64_768,35;phosphor-subtitles-slash-thin,128_768,35;phosphor-subtitles-slash,192_768,35;phosphor-subtitles-thin,256_768,35;phosphor-subtitles,320_768,35;phosphor-subtract-bold,384_768,35;phosphor-subtract-duotone,448_768,35;phosphor-subtract-fill,512_768,35;phosphor-subtract-light,576_768,35;phosphor-subtract-square-bold,640_768,35;phosphor-subtract-square-duotone,704_768,35;phosphor-subtract-square-fill,768_768,35;phosphor-subtract-square-light,832_768,35;phosphor-subtract-square-thin,896_768,35;phosphor-subtract-square,960_768,35;phosphor-subtract-thin,0_832,35;phosphor-subtract,64_832,35;phosphor-subway-bold,128_832,35;phosphor-subway-duotone,192_832,35;phosphor-subway-fill,256_832,35;phosphor-subway-light,320_832,35;phosphor-subway-thin,384_832,35;phosphor-subway,448_832,35;phosphor-suitcase-bold,512_832,35;phosphor-suitcase-duotone,576_832,35;phosphor-suitcase-fill,640_832,35;phosphor-suitcase-light,704_832,35;phosphor-suitcase-rolling-bold,768_832,35;phosphor-suitcase-rolling-duotone,832_832,35;phosphor-suitcase-rolling-fill,896_832,35;phosphor-suitcase-rolling-light,960_832,35;phosphor-suitcase-rolling-thin,0_896,35;phosphor-suitcase-rolling,64_896,35;phosphor-suitcase-simple-bold,128_896,35;phosphor-suitcase-simple-duotone,192_896,35;phosphor-suitcase-simple-fill,256_896,35;phosphor-suitcase-simple-light,320_896,35;phosphor-suitcase-simple-thin,384_896,35;phosphor-suitcase-simple,448_896,35;phosphor-suitcase-thin,512_896,35;phosphor-suitcase,576_896,35;phosphor-sun-bold,640_896,35;phosphor-sun-dim-bold,704_896,35;phosphor-sun-dim-duotone,768_896,35;phosphor-sun-dim-fill,832_896,35;phosphor-sun-dim-light,896_896,35;phosphor-sun-dim-thin,960_896,35;phosphor-sun-dim,0_960,35;phosphor-sun-duotone,64_960,35;phosphor-sun-fill,128_960,35;phosphor-sun-horizon-bold,192_960,35;phosphor-sun-horizon-duotone,256_960,35;phosphor-sun-horizon-fill,320_960,35;phosphor-sun-horizon-light,384_960,35;phosphor-sun-horizon-thin,448_960,35;phosphor-sun-horizon,512_960,35;phosphor-sun-light,576_960,35;phosphor-sun-thin,640_960,35;phosphor-sun,704_960,35;phosphor-sunglasses-bold,768_960,35;phosphor-sunglasses-duotone,832_960,35;phosphor-sunglasses-fill,896_960,35;phosphor-sunglasses-light,960_960,35;phosphor-sunglasses-thin,0_0,36;phosphor-sunglasses,64_0,36;phosphor-superset-of-bold,128_0,36;phosphor-superset-of-duotone,192_0,36;phosphor-superset-of-fill,256_0,36;phosphor-superset-of-light,320_0,36;phosphor-superset-of-thin,384_0,36;phosphor-superset-of,448_0,36;phosphor-superset-proper-of-bold,512_0,36;phosphor-superset-proper-of-duotone,576_0,36;phosphor-superset-proper-of-fill,640_0,36;phosphor-superset-proper-of-light,704_0,36;phosphor-superset-proper-of-thin,768_0,36;phosphor-superset-proper-of,832_0,36;phosphor-swap-bold,896_0,36;phosphor-swap-duotone,960_0,36;phosphor-swap-fill,0_64,36;phosphor-swap-light,64_64,36;phosphor-swap-thin,128_64,36;phosphor-swap,192_64,36;phosphor-swatches-bold,256_64,36;phosphor-swatches-duotone,320_64,36;phosphor-swatches-fill,384_64,36;phosphor-swatches-light,448_64,36;phosphor-swatches-thin,512_64,36;phosphor-swatches,576_64,36;phosphor-swimming-pool-bold,640_64,36;phosphor-swimming-pool-duotone,704_64,36;phosphor-swimming-pool-fill,768_64,36;phosphor-swimming-pool-light,832_64,36;phosphor-swimming-pool-thin,896_64,36;phosphor-swimming-pool,960_64,36;phosphor-sword-bold,0_128,36;phosphor-sword-duotone,64_128,36;phosphor-sword-fill,128_128,36;phosphor-sword-light,192_128,36;phosphor-sword-thin,256_128,36;phosphor-sword,320_128,36;phosphor-synagogue-bold,384_128,36;phosphor-synagogue-duotone,448_128,36;phosphor-synagogue-fill,512_128,36;phosphor-synagogue-light,576_128,36;phosphor-synagogue-thin,640_128,36;phosphor-synagogue,704_128,36;phosphor-syringe-bold,768_128,36;phosphor-syringe-duotone,832_128,36;phosphor-syringe-fill,896_128,36;phosphor-syringe-light,960_128,36;phosphor-syringe-thin,0_192,36;phosphor-syringe,64_192,36;phosphor-t-shirt-bold,128_192,36;phosphor-t-shirt-duotone,192_192,36;phosphor-t-shirt-fill,256_192,36;phosphor-t-shirt-light,320_192,36;phosphor-t-shirt-thin,384_192,36;phosphor-t-shirt,448_192,36;phosphor-table-bold,512_192,36;phosphor-table-duotone,576_192,36;phosphor-table-fill,640_192,36;phosphor-table-light,704_192,36;phosphor-table-thin,768_192,36;phosphor-table,832_192,36;phosphor-tabs-bold,896_192,36;phosphor-tabs-duotone,960_192,36;phosphor-tabs-fill,0_256,36;phosphor-tabs-light,64_256,36;phosphor-tabs-thin,128_256,36;phosphor-tabs,192_256,36;phosphor-tag-bold,256_256,36;phosphor-tag-chevron-bold,320_256,36;phosphor-tag-chevron-duotone,384_256,36;phosphor-tag-chevron-fill,448_256,36;phosphor-tag-chevron-light,512_256,36;phosphor-tag-chevron-thin,576_256,36;phosphor-tag-chevron,640_256,36;phosphor-tag-duotone,704_256,36;phosphor-tag-fill,768_256,36;phosphor-tag-light,832_256,36;phosphor-tag-simple-bold,896_256,36;phosphor-tag-simple-duotone,960_256,36;phosphor-tag-simple-fill,0_320,36;phosphor-tag-simple-light,64_320,36;phosphor-tag-simple-thin,128_320,36;phosphor-tag-simple,192_320,36;phosphor-tag-thin,256_320,36;phosphor-tag,320_320,36;phosphor-target-bold,384_320,36;phosphor-target-duotone,448_320,36;phosphor-target-fill,512_320,36;phosphor-target-light,576_320,36;phosphor-target-thin,640_320,36;phosphor-target,704_320,36;phosphor-taxi-bold,768_320,36;phosphor-taxi-duotone,832_320,36;phosphor-taxi-fill,896_320,36;phosphor-taxi-light,960_320,36;phosphor-taxi-thin,0_384,36;phosphor-taxi,64_384,36;phosphor-tea-bag-bold,128_384,36;phosphor-tea-bag-duotone,192_384,36;phosphor-tea-bag-fill,256_384,36;phosphor-tea-bag-light,320_384,36;phosphor-tea-bag-thin,384_384,36;phosphor-tea-bag,448_384,36;phosphor-telegram-logo-bold,512_384,36;phosphor-telegram-logo-duotone,576_384,36;phosphor-telegram-logo-fill,640_384,36;phosphor-telegram-logo-light,704_384,36;phosphor-telegram-logo-thin,768_384,36;phosphor-telegram-logo,832_384,36;phosphor-television-bold,896_384,36;phosphor-television-duotone,960_384,36;phosphor-television-fill,0_448,36;phosphor-television-light,64_448,36;phosphor-television-simple-bold,128_448,36;phosphor-television-simple-duotone,192_448,36;phosphor-television-simple-fill,256_448,36;phosphor-television-simple-light,320_448,36;phosphor-television-simple-thin,384_448,36;phosphor-television-simple,448_448,36;phosphor-television-thin,512_448,36;phosphor-television,576_448,36;phosphor-tennis-ball-bold,640_448,36;phosphor-tennis-ball-duotone,704_448,36;phosphor-tennis-ball-fill,768_448,36;phosphor-tennis-ball-light,832_448,36;phosphor-tennis-ball-thin,896_448,36;phosphor-tennis-ball,960_448,36;phosphor-tent-bold,0_512,36;phosphor-tent-duotone,64_512,36;phosphor-tent-fill,128_512,36;phosphor-tent-light,192_512,36;phosphor-tent-thin,256_512,36;phosphor-tent,320_512,36;phosphor-terminal-bold,384_512,36;phosphor-terminal-duotone,448_512,36;phosphor-terminal-fill,512_512,36;phosphor-terminal-light,576_512,36;phosphor-terminal-thin,640_512,36;phosphor-terminal-window-bold,704_512,36;phosphor-terminal-window-duotone,768_512,36;phosphor-terminal-window-fill,832_512,36;phosphor-terminal-window-light,896_512,36;phosphor-terminal-window-thin,960_512,36;phosphor-terminal-window,0_576,36;phosphor-terminal,64_576,36;phosphor-test-tube-bold,128_576,36;phosphor-test-tube-duotone,192_576,36;phosphor-test-tube-fill,256_576,36;phosphor-test-tube-light,320_576,36;phosphor-test-tube-thin,384_576,36;phosphor-test-tube,448_576,36;phosphor-text-a-underline-bold,512_576,36;phosphor-text-a-underline-duotone,576_576,36;phosphor-text-a-underline-fill,640_576,36;phosphor-text-a-underline-light,704_576,36;phosphor-text-a-underline-thin,768_576,36;phosphor-text-a-underline,832_576,36;phosphor-text-aa-bold,896_576,36;phosphor-text-aa-duotone,960_576,36;phosphor-text-aa-fill,0_640,36;phosphor-text-aa-light,64_640,36;phosphor-text-aa-thin,128_640,36;phosphor-text-aa,192_640,36;phosphor-text-align-center-bold,256_640,36;phosphor-text-align-center-duotone,320_640,36;phosphor-text-align-center-fill,384_640,36;phosphor-text-align-center-light,448_640,36;phosphor-text-align-center-thin,512_640,36;phosphor-text-align-center,576_640,36;phosphor-text-align-justify-bold,640_640,36;phosphor-text-align-justify-duotone,704_640,36;phosphor-text-align-justify-fill,768_640,36;phosphor-text-align-justify-light,832_640,36;phosphor-text-align-justify-thin,896_640,36;phosphor-text-align-justify,960_640,36;phosphor-text-align-left-bold,0_704,36;phosphor-text-align-left-duotone,64_704,36;phosphor-text-align-left-fill,128_704,36;phosphor-text-align-left-light,192_704,36;phosphor-text-align-left-thin,256_704,36;phosphor-text-align-left,320_704,36;phosphor-text-align-right-bold,384_704,36;phosphor-text-align-right-duotone,448_704,36;phosphor-text-align-right-fill,512_704,36;phosphor-text-align-right-light,576_704,36;phosphor-text-align-right-thin,640_704,36;phosphor-text-align-right,704_704,36;phosphor-text-b-bold,768_704,36;phosphor-text-b-duotone,832_704,36;phosphor-text-b-fill,896_704,36;phosphor-text-b-light,960_704,36;phosphor-text-b-thin,0_768,36;phosphor-text-b,64_768,36;phosphor-text-columns-bold,128_768,36;phosphor-text-columns-duotone,192_768,36;phosphor-text-columns-fill,256_768,36;phosphor-text-columns-light,320_768,36;phosphor-text-columns-thin,384_768,36;phosphor-text-columns,448_768,36;phosphor-text-h-bold,512_768,36;phosphor-text-h-duotone,576_768,36;phosphor-text-h-fill,640_768,36;phosphor-text-h-five-bold,704_768,36;phosphor-text-h-five-duotone,768_768,36;phosphor-text-h-five-fill,832_768,36;phosphor-text-h-five-light,896_768,36;phosphor-text-h-five-thin,960_768,36;phosphor-text-h-five,0_832,36;phosphor-text-h-four-bold,64_832,36;phosphor-text-h-four-duotone,128_832,36;phosphor-text-h-four-fill,192_832,36;phosphor-text-h-four-light,256_832,36;phosphor-text-h-four-thin,320_832,36;phosphor-text-h-four,384_832,36;phosphor-text-h-light,448_832,36;phosphor-text-h-one-bold,512_832,36;phosphor-text-h-one-duotone,576_832,36;phosphor-text-h-one-fill,640_832,36;phosphor-text-h-one-light,704_832,36;phosphor-text-h-one-thin,768_832,36;phosphor-text-h-one,832_832,36;phosphor-text-h-six-bold,896_832,36;phosphor-text-h-six-duotone,960_832,36;phosphor-text-h-six-fill,0_896,36;phosphor-text-h-six-light,64_896,36;phosphor-text-h-six-thin,128_896,36;phosphor-text-h-six,192_896,36;phosphor-text-h-thin,256_896,36;phosphor-text-h-three-bold,320_896,36;phosphor-text-h-three-duotone,384_896,36;phosphor-text-h-three-fill,448_896,36;phosphor-text-h-three-light,512_896,36;phosphor-text-h-three-thin,576_896,36;phosphor-text-h-three,640_896,36;phosphor-text-h-two-bold,704_896,36;phosphor-text-h-two-duotone,768_896,36;phosphor-text-h-two-fill,832_896,36;phosphor-text-h-two-light,896_896,36;phosphor-text-h-two-thin,960_896,36;phosphor-text-h-two,0_960,36;phosphor-text-h,64_960,36;phosphor-text-indent-bold,128_960,36;phosphor-text-indent-duotone,192_960,36;phosphor-text-indent-fill,256_960,36;phosphor-text-indent-light,320_960,36;phosphor-text-indent-thin,384_960,36;phosphor-text-indent,448_960,36;phosphor-text-italic-bold,512_960,36;phosphor-text-italic-duotone,576_960,36;phosphor-text-italic-fill,640_960,36;phosphor-text-italic-light,704_960,36;phosphor-text-italic-thin,768_960,36;phosphor-text-italic,832_960,36;phosphor-text-outdent-bold,896_960,36;phosphor-text-outdent-duotone,960_960,36;phosphor-text-outdent-fill,0_0,37;phosphor-text-outdent-light,64_0,37;phosphor-text-outdent-thin,128_0,37;phosphor-text-outdent,192_0,37;phosphor-text-strikethrough-bold,256_0,37;phosphor-text-strikethrough-duotone,320_0,37;phosphor-text-strikethrough-fill,384_0,37;phosphor-text-strikethrough-light,448_0,37;phosphor-text-strikethrough-thin,512_0,37;phosphor-text-strikethrough,576_0,37;phosphor-text-subscript-bold,640_0,37;phosphor-text-subscript-duotone,704_0,37;phosphor-text-subscript-fill,768_0,37;phosphor-text-subscript-light,832_0,37;phosphor-text-subscript-thin,896_0,37;phosphor-text-subscript,960_0,37;phosphor-text-superscript-bold,0_64,37;phosphor-text-superscript-duotone,64_64,37;phosphor-text-superscript-fill,128_64,37;phosphor-text-superscript-light,192_64,37;phosphor-text-superscript-thin,256_64,37;phosphor-text-superscript,320_64,37;phosphor-text-t-bold,384_64,37;phosphor-text-t-duotone,448_64,37;phosphor-text-t-fill,512_64,37;phosphor-text-t-light,576_64,37;phosphor-text-t-slash-bold,640_64,37;phosphor-text-t-slash-duotone,704_64,37;phosphor-text-t-slash-fill,768_64,37;phosphor-text-t-slash-light,832_64,37;phosphor-text-t-slash-thin,896_64,37;phosphor-text-t-slash,960_64,37;phosphor-text-t-thin,0_128,37;phosphor-text-t,64_128,37;phosphor-text-underline-bold,128_128,37;phosphor-text-underline-duotone,192_128,37;phosphor-text-underline-fill,256_128,37;phosphor-text-underline-light,320_128,37;phosphor-text-underline-thin,384_128,37;phosphor-text-underline,448_128,37;phosphor-textbox-bold,512_128,37;phosphor-textbox-duotone,576_128,37;phosphor-textbox-fill,640_128,37;phosphor-textbox-light,704_128,37;phosphor-textbox-thin,768_128,37;phosphor-textbox,832_128,37;phosphor-thermometer-bold,896_128,37;phosphor-thermometer-cold-bold,960_128,37;phosphor-thermometer-cold-duotone,0_192,37;phosphor-thermometer-cold-fill,64_192,37;phosphor-thermometer-cold-light,128_192,37;phosphor-thermometer-cold-thin,192_192,37;phosphor-thermometer-cold,256_192,37;phosphor-thermometer-duotone,320_192,37;phosphor-thermometer-fill,384_192,37;phosphor-thermometer-hot-bold,448_192,37;phosphor-thermometer-hot-duotone,512_192,37;phosphor-thermometer-hot-fill,576_192,37;phosphor-thermometer-hot-light,640_192,37;phosphor-thermometer-hot-thin,704_192,37;phosphor-thermometer-hot,768_192,37;phosphor-thermometer-light,832_192,37;phosphor-thermometer-simple-bold,896_192,37;phosphor-thermometer-simple-duotone,960_192,37;phosphor-thermometer-simple-fill,0_256,37;phosphor-thermometer-simple-light,64_256,37;phosphor-thermometer-simple-thin,128_256,37;phosphor-thermometer-simple,192_256,37;phosphor-thermometer-thin,256_256,37;phosphor-thermometer,320_256,37;phosphor-threads-logo-bold,384_256,37;phosphor-threads-logo-duotone,448_256,37;phosphor-threads-logo-fill,512_256,37;phosphor-threads-logo-light,576_256,37;phosphor-threads-logo-thin,640_256,37;phosphor-threads-logo,704_256,37;phosphor-three-d-bold,768_256,37;phosphor-three-d-duotone,832_256,37;phosphor-three-d-fill,896_256,37;phosphor-three-d-light,960_256,37;phosphor-three-d-thin,0_320,37;phosphor-three-d,64_320,37;phosphor-thumbs-down-bold,128_320,37;phosphor-thumbs-down-duotone,192_320,37;phosphor-thumbs-down-fill,256_320,37;phosphor-thumbs-down-light,320_320,37;phosphor-thumbs-down-thin,384_320,37;phosphor-thumbs-down,448_320,37;phosphor-thumbs-up-bold,512_320,37;phosphor-thumbs-up-duotone,576_320,37;phosphor-thumbs-up-fill,640_320,37;phosphor-thumbs-up-light,704_320,37;phosphor-thumbs-up-thin,768_320,37;phosphor-thumbs-up,832_320,37;phosphor-ticket-bold,896_320,37;phosphor-ticket-duotone,960_320,37;phosphor-ticket-fill,0_384,37;phosphor-ticket-light,64_384,37;phosphor-ticket-thin,128_384,37;phosphor-ticket,192_384,37;phosphor-tidal-logo-bold,256_384,37;phosphor-tidal-logo-duotone,320_384,37;phosphor-tidal-logo-fill,384_384,37;phosphor-tidal-logo-light,448_384,37;phosphor-tidal-logo-thin,512_384,37;phosphor-tidal-logo,576_384,37;phosphor-tiktok-logo-bold,640_384,37;phosphor-tiktok-logo-duotone,704_384,37;phosphor-tiktok-logo-fill,768_384,37;phosphor-tiktok-logo-light,832_384,37;phosphor-tiktok-logo-thin,896_384,37;phosphor-tiktok-logo,960_384,37;phosphor-tilde-bold,0_448,37;phosphor-tilde-duotone,64_448,37;phosphor-tilde-fill,128_448,37;phosphor-tilde-light,192_448,37;phosphor-tilde-thin,256_448,37;phosphor-tilde,320_448,37;phosphor-timer-bold,384_448,37;phosphor-timer-duotone,448_448,37;phosphor-timer-fill,512_448,37;phosphor-timer-light,576_448,37;phosphor-timer-thin,640_448,37;phosphor-timer,704_448,37;phosphor-tip-jar-bold,768_448,37;phosphor-tip-jar-duotone,832_448,37;phosphor-tip-jar-fill,896_448,37;phosphor-tip-jar-light,960_448,37;phosphor-tip-jar-thin,0_512,37;phosphor-tip-jar,64_512,37;phosphor-tipi-bold,128_512,37;phosphor-tipi-duotone,192_512,37;phosphor-tipi-fill,256_512,37;phosphor-tipi-light,320_512,37;phosphor-tipi-thin,384_512,37;phosphor-tipi,448_512,37;phosphor-tire-bold,512_512,37;phosphor-tire-duotone,576_512,37;phosphor-tire-fill,640_512,37;phosphor-tire-light,704_512,37;phosphor-tire-thin,768_512,37;phosphor-tire,832_512,37;phosphor-toggle-left-bold,896_512,37;phosphor-toggle-left-duotone,960_512,37;phosphor-toggle-left-fill,0_576,37;phosphor-toggle-left-light,64_576,37;phosphor-toggle-left-thin,128_576,37;phosphor-toggle-left,192_576,37;phosphor-toggle-right-bold,256_576,37;phosphor-toggle-right-duotone,320_576,37;phosphor-toggle-right-fill,384_576,37;phosphor-toggle-right-light,448_576,37;phosphor-toggle-right-thin,512_576,37;phosphor-toggle-right,576_576,37;phosphor-toilet-bold,640_576,37;phosphor-toilet-duotone,704_576,37;phosphor-toilet-fill,768_576,37;phosphor-toilet-light,832_576,37;phosphor-toilet-paper-bold,896_576,37;phosphor-toilet-paper-duotone,960_576,37;phosphor-toilet-paper-fill,0_640,37;phosphor-toilet-paper-light,64_640,37;phosphor-toilet-paper-thin,128_640,37;phosphor-toilet-paper,192_640,37;phosphor-toilet-thin,256_640,37;phosphor-toilet,320_640,37;phosphor-toolbox-bold,384_640,37;phosphor-toolbox-duotone,448_640,37;phosphor-toolbox-fill,512_640,37;phosphor-toolbox-light,576_640,37;phosphor-toolbox-thin,640_640,37;phosphor-toolbox,704_640,37;phosphor-tooth-bold,768_640,37;phosphor-tooth-duotone,832_640,37;phosphor-tooth-fill,896_640,37;phosphor-tooth-light,960_640,37;phosphor-tooth-thin,0_704,37;phosphor-tooth,64_704,37;phosphor-tornado-bold,128_704,37;phosphor-tornado-duotone,192_704,37;phosphor-tornado-fill,256_704,37;phosphor-tornado-light,320_704,37;phosphor-tornado-thin,384_704,37;phosphor-tornado,448_704,37;phosphor-tote-bold,512_704,37;phosphor-tote-duotone,576_704,37;phosphor-tote-fill,640_704,37;phosphor-tote-light,704_704,37;phosphor-tote-simple-bold,768_704,37;phosphor-tote-simple-duotone,832_704,37;phosphor-tote-simple-fill,896_704,37;phosphor-tote-simple-light,960_704,37;phosphor-tote-simple-thin,0_768,37;phosphor-tote-simple,64_768,37;phosphor-tote-thin,128_768,37;phosphor-tote,192_768,37;phosphor-towel-bold,256_768,37;phosphor-towel-duotone,320_768,37;phosphor-towel-fill,384_768,37;phosphor-towel-light,448_768,37;phosphor-towel-thin,512_768,37;phosphor-towel,576_768,37;phosphor-tractor-bold,640_768,37;phosphor-tractor-duotone,704_768,37;phosphor-tractor-fill,768_768,37;phosphor-tractor-light,832_768,37;phosphor-tractor-thin,896_768,37;phosphor-tractor,960_768,37;phosphor-trademark-bold,0_832,37;phosphor-trademark-duotone,64_832,37;phosphor-trademark-fill,128_832,37;phosphor-trademark-light,192_832,37;phosphor-trademark-registered-bold,256_832,37;phosphor-trademark-registered-duotone,320_832,37;phosphor-trademark-registered-fill,384_832,37;phosphor-trademark-registered-light,448_832,37;phosphor-trademark-registered-thin,512_832,37;phosphor-trademark-registered,576_832,37;phosphor-trademark-thin,640_832,37;phosphor-trademark,704_832,37;phosphor-traffic-cone-bold,768_832,37;phosphor-traffic-cone-duotone,832_832,37;phosphor-traffic-cone-fill,896_832,37;phosphor-traffic-cone-light,960_832,37;phosphor-traffic-cone-thin,0_896,37;phosphor-traffic-cone,64_896,37;phosphor-traffic-sign-bold,128_896,37;phosphor-traffic-sign-duotone,192_896,37;phosphor-traffic-sign-fill,256_896,37;phosphor-traffic-sign-light,320_896,37;phosphor-traffic-sign-thin,384_896,37;phosphor-traffic-sign,448_896,37;phosphor-traffic-signal-bold,512_896,37;phosphor-traffic-signal-duotone,576_896,37;phosphor-traffic-signal-fill,640_896,37;phosphor-traffic-signal-light,704_896,37;phosphor-traffic-signal-thin,768_896,37;phosphor-traffic-signal,832_896,37;phosphor-train-bold,896_896,37;phosphor-train-duotone,960_896,37;phosphor-train-fill,0_960,37;phosphor-train-light,64_960,37;phosphor-train-regional-bold,128_960,37;phosphor-train-regional-duotone,192_960,37;phosphor-train-regional-fill,256_960,37;phosphor-train-regional-light,320_960,37;phosphor-train-regional-thin,384_960,37;phosphor-train-regional,448_960,37;phosphor-train-simple-bold,512_960,37;phosphor-train-simple-duotone,576_960,37;phosphor-train-simple-fill,640_960,37;phosphor-train-simple-light,704_960,37;phosphor-train-simple-thin,768_960,37;phosphor-train-simple,832_960,37;phosphor-train-thin,896_960,37;phosphor-train,960_960,37;phosphor-tram-bold,0_0,38;phosphor-tram-duotone,64_0,38;phosphor-tram-fill,128_0,38;phosphor-tram-light,192_0,38;phosphor-tram-thin,256_0,38;phosphor-tram,320_0,38;phosphor-translate-bold,384_0,38;phosphor-translate-duotone,448_0,38;phosphor-translate-fill,512_0,38;phosphor-translate-light,576_0,38;phosphor-translate-thin,640_0,38;phosphor-translate,704_0,38;phosphor-trash-bold,768_0,38;phosphor-trash-duotone,832_0,38;phosphor-trash-fill,896_0,38;phosphor-trash-light,960_0,38;phosphor-trash-simple-bold,0_64,38;phosphor-trash-simple-duotone,64_64,38;phosphor-trash-simple-fill,128_64,38;phosphor-trash-simple-light,192_64,38;phosphor-trash-simple-thin,256_64,38;phosphor-trash-simple,320_64,38;phosphor-trash-thin,384_64,38;phosphor-trash,448_64,38;phosphor-tray-arrow-down-bold,512_64,38;phosphor-tray-arrow-down-duotone,576_64,38;phosphor-tray-arrow-down-fill,640_64,38;phosphor-tray-arrow-down-light,704_64,38;phosphor-tray-arrow-down-thin,768_64,38;phosphor-tray-arrow-down,832_64,38;phosphor-tray-arrow-up-bold,896_64,38;phosphor-tray-arrow-up-duotone,960_64,38;phosphor-tray-arrow-up-fill,0_128,38;phosphor-tray-arrow-up-light,64_128,38;phosphor-tray-arrow-up-thin,128_128,38;phosphor-tray-arrow-up,192_128,38;phosphor-tray-bold,256_128,38;phosphor-tray-duotone,320_128,38;phosphor-tray-fill,384_128,38;phosphor-tray-light,448_128,38;phosphor-tray-thin,512_128,38;phosphor-tray,576_128,38;phosphor-treasure-chest-bold,640_128,38;phosphor-treasure-chest-duotone,704_128,38;phosphor-treasure-chest-fill,768_128,38;phosphor-treasure-chest-light,832_128,38;phosphor-treasure-chest-thin,896_128,38;phosphor-treasure-chest,960_128,38;phosphor-tree-bold,0_192,38;phosphor-tree-duotone,64_192,38;phosphor-tree-evergreen-bold,128_192,38;phosphor-tree-evergreen-duotone,192_192,38;phosphor-tree-evergreen-fill,256_192,38;phosphor-tree-evergreen-light,320_192,38;phosphor-tree-evergreen-thin,384_192,38;phosphor-tree-evergreen,448_192,38;phosphor-tree-fill,512_192,38;phosphor-tree-light,576_192,38;phosphor-tree-palm-bold,640_192,38;phosphor-tree-palm-duotone,704_192,38;phosphor-tree-palm-fill,768_192,38;phosphor-tree-palm-light,832_192,38;phosphor-tree-palm-thin,896_192,38;phosphor-tree-palm,960_192,38;phosphor-tree-structure-bold,0_256,38;phosphor-tree-structure-duotone,64_256,38;phosphor-tree-structure-fill,128_256,38;phosphor-tree-structure-light,192_256,38;phosphor-tree-structure-thin,256_256,38;phosphor-tree-structure,320_256,38;phosphor-tree-thin,384_256,38;phosphor-tree-view-bold,448_256,38;phosphor-tree-view-duotone,512_256,38;phosphor-tree-view-fill,576_256,38;phosphor-tree-view-light,640_256,38;phosphor-tree-view-thin,704_256,38;phosphor-tree-view,768_256,38;phosphor-tree,832_256,38;phosphor-trend-down-bold,896_256,38;phosphor-trend-down-duotone,960_256,38;phosphor-trend-down-fill,0_320,38;phosphor-trend-down-light,64_320,38;phosphor-trend-down-thin,128_320,38;phosphor-trend-down,192_320,38;phosphor-trend-up-bold,256_320,38;phosphor-trend-up-duotone,320_320,38;phosphor-trend-up-fill,384_320,38;phosphor-trend-up-light,448_320,38;phosphor-trend-up-thin,512_320,38;phosphor-trend-up,576_320,38;phosphor-triangle-bold,640_320,38;phosphor-triangle-dashed-bold,704_320,38;phosphor-triangle-dashed-duotone,768_320,38;phosphor-triangle-dashed-fill,832_320,38;phosphor-triangle-dashed-light,896_320,38;phosphor-triangle-dashed-thin,960_320,38;phosphor-triangle-dashed,0_384,38;phosphor-triangle-duotone,64_384,38;phosphor-triangle-fill,128_384,38;phosphor-triangle-light,192_384,38;phosphor-triangle-thin,256_384,38;phosphor-triangle,320_384,38;phosphor-trolley-bold,384_384,38;phosphor-trolley-duotone,448_384,38;phosphor-trolley-fill,512_384,38;phosphor-trolley-light,576_384,38;phosphor-trolley-suitcase-bold,640_384,38;phosphor-trolley-suitcase-duotone,704_384,38;phosphor-trolley-suitcase-fill,768_384,38;phosphor-trolley-suitcase-light,832_384,38;phosphor-trolley-suitcase-thin,896_384,38;phosphor-trolley-suitcase,960_384,38;phosphor-trolley-thin,0_448,38;phosphor-trolley,64_448,38;phosphor-trophy-bold,128_448,38;phosphor-trophy-duotone,192_448,38;phosphor-trophy-fill,256_448,38;phosphor-trophy-light,320_448,38;phosphor-trophy-thin,384_448,38;phosphor-trophy,448_448,38;phosphor-truck-bold,512_448,38;phosphor-truck-duotone,576_448,38;phosphor-truck-fill,640_448,38;phosphor-truck-light,704_448,38;phosphor-truck-thin,768_448,38;phosphor-truck-trailer-bold,832_448,38;phosphor-truck-trailer-duotone,896_448,38;phosphor-truck-trailer-fill,960_448,38;phosphor-truck-trailer-light,0_512,38;phosphor-truck-trailer-thin,64_512,38;phosphor-truck-trailer,128_512,38;phosphor-truck,192_512,38;phosphor-tumblr-logo-bold,256_512,38;phosphor-tumblr-logo-duotone,320_512,38;phosphor-tumblr-logo-fill,384_512,38;phosphor-tumblr-logo-light,448_512,38;phosphor-tumblr-logo-thin,512_512,38;phosphor-tumblr-logo,576_512,38;phosphor-twitch-logo-bold,640_512,38;phosphor-twitch-logo-duotone,704_512,38;phosphor-twitch-logo-fill,768_512,38;phosphor-twitch-logo-light,832_512,38;phosphor-twitch-logo-thin,896_512,38;phosphor-twitch-logo,960_512,38;phosphor-twitter-logo-bold,0_576,38;phosphor-twitter-logo-duotone,64_576,38;phosphor-twitter-logo-fill,128_576,38;phosphor-twitter-logo-light,192_576,38;phosphor-twitter-logo-thin,256_576,38;phosphor-twitter-logo,320_576,38;phosphor-umbrella-bold,384_576,38;phosphor-umbrella-duotone,448_576,38;phosphor-umbrella-fill,512_576,38;phosphor-umbrella-light,576_576,38;phosphor-umbrella-simple-bold,640_576,38;phosphor-umbrella-simple-duotone,704_576,38;phosphor-umbrella-simple-fill,768_576,38;phosphor-umbrella-simple-light,832_576,38;phosphor-umbrella-simple-thin,896_576,38;phosphor-umbrella-simple,960_576,38;phosphor-umbrella-thin,0_640,38;phosphor-umbrella,64_640,38;phosphor-union-bold,128_640,38;phosphor-union-duotone,192_640,38;phosphor-union-fill,256_640,38;phosphor-union-light,320_640,38;phosphor-union-thin,384_640,38;phosphor-union,448_640,38;phosphor-unite-bold,512_640,38;phosphor-unite-duotone,576_640,38;phosphor-unite-fill,640_640,38;phosphor-unite-light,704_640,38;phosphor-unite-square-bold,768_640,38;phosphor-unite-square-duotone,832_640,38;phosphor-unite-square-fill,896_640,38;phosphor-unite-square-light,960_640,38;phosphor-unite-square-thin,0_704,38;phosphor-unite-square,64_704,38;phosphor-unite-thin,128_704,38;phosphor-unite,192_704,38;phosphor-upload-bold,256_704,38;phosphor-upload-duotone,320_704,38;phosphor-upload-fill,384_704,38;phosphor-upload-light,448_704,38;phosphor-upload-simple-bold,512_704,38;phosphor-upload-simple-duotone,576_704,38;phosphor-upload-simple-fill,640_704,38;phosphor-upload-simple-light,704_704,38;phosphor-upload-simple-thin,768_704,38;phosphor-upload-simple,832_704,38;phosphor-upload-thin,896_704,38;phosphor-upload,960_704,38;phosphor-usb-bold,0_768,38;phosphor-usb-duotone,64_768,38;phosphor-usb-fill,128_768,38;phosphor-usb-light,192_768,38;phosphor-usb-thin,256_768,38;phosphor-usb,320_768,38;phosphor-user-bold,384_768,38;phosphor-user-check-bold,448_768,38;phosphor-user-check-duotone,512_768,38;phosphor-user-check-fill,576_768,38;phosphor-user-check-light,640_768,38;phosphor-user-check-thin,704_768,38;phosphor-user-check,768_768,38;phosphor-user-circle-bold,832_768,38;phosphor-user-circle-check-bold,896_768,38;phosphor-user-circle-check-duotone,960_768,38;phosphor-user-circle-check-fill,0_832,38;phosphor-user-circle-check-light,64_832,38;phosphor-user-circle-check-thin,128_832,38;phosphor-user-circle-check,192_832,38;phosphor-user-circle-dashed-bold,256_832,38;phosphor-user-circle-dashed-duotone,320_832,38;phosphor-user-circle-dashed-fill,384_832,38;phosphor-user-circle-dashed-light,448_832,38;phosphor-user-circle-dashed-thin,512_832,38;phosphor-user-circle-dashed,576_832,38;phosphor-user-circle-duotone,640_832,38;phosphor-user-circle-fill,704_832,38;phosphor-user-circle-gear-bold,768_832,38;phosphor-user-circle-gear-duotone,832_832,38;phosphor-user-circle-gear-fill,896_832,38;phosphor-user-circle-gear-light,960_832,38;phosphor-user-circle-gear-thin,0_896,38;phosphor-user-circle-gear,64_896,38;phosphor-user-circle-light,128_896,38;phosphor-user-circle-minus-bold,192_896,38;phosphor-user-circle-minus-duotone,256_896,38;phosphor-user-circle-minus-fill,320_896,38;phosphor-user-circle-minus-light,384_896,38;phosphor-user-circle-minus-thin,448_896,38;phosphor-user-circle-minus,512_896,38;phosphor-user-circle-plus-bold,576_896,38;phosphor-user-circle-plus-duotone,640_896,38;phosphor-user-circle-plus-fill,704_896,38;phosphor-user-circle-plus-light,768_896,38;phosphor-user-circle-plus-thin,832_896,38;phosphor-user-circle-plus,896_896,38;phosphor-user-circle-thin,960_896,38;phosphor-user-circle,0_960,38;phosphor-user-duotone,64_960,38;phosphor-user-fill,128_960,38;phosphor-user-focus-bold,192_960,38;phosphor-user-focus-duotone,256_960,38;phosphor-user-focus-fill,320_960,38;phosphor-user-focus-light,384_960,38;phosphor-user-focus-thin,448_960,38;phosphor-user-focus,512_960,38;phosphor-user-gear-bold,576_960,38;phosphor-user-gear-duotone,640_960,38;phosphor-user-gear-fill,704_960,38;phosphor-user-gear-light,768_960,38;phosphor-user-gear-thin,832_960,38;phosphor-user-gear,896_960,38;phosphor-user-light,960_960,38;phosphor-user-list-bold,0_0,39;phosphor-user-list-duotone,64_0,39;phosphor-user-list-fill,128_0,39;phosphor-user-list-light,192_0,39;phosphor-user-list-thin,256_0,39;phosphor-user-list,320_0,39;phosphor-user-minus-bold,384_0,39;phosphor-user-minus-duotone,448_0,39;phosphor-user-minus-fill,512_0,39;phosphor-user-minus-light,576_0,39;phosphor-user-minus-thin,640_0,39;phosphor-user-minus,704_0,39;phosphor-user-plus-bold,768_0,39;phosphor-user-plus-duotone,832_0,39;phosphor-user-plus-fill,896_0,39;phosphor-user-plus-light,960_0,39;phosphor-user-plus-thin,0_64,39;phosphor-user-plus,64_64,39;phosphor-user-rectangle-bold,128_64,39;phosphor-user-rectangle-duotone,192_64,39;phosphor-user-rectangle-fill,256_64,39;phosphor-user-rectangle-light,320_64,39;phosphor-user-rectangle-thin,384_64,39;phosphor-user-rectangle,448_64,39;phosphor-user-sound-bold,512_64,39;phosphor-user-sound-duotone,576_64,39;phosphor-user-sound-fill,640_64,39;phosphor-user-sound-light,704_64,39;phosphor-user-sound-thin,768_64,39;phosphor-user-sound,832_64,39;phosphor-user-square-bold,896_64,39;phosphor-user-square-duotone,960_64,39;phosphor-user-square-fill,0_128,39;phosphor-user-square-light,64_128,39;phosphor-user-square-thin,128_128,39;phosphor-user-square,192_128,39;phosphor-user-switch-bold,256_128,39;phosphor-user-switch-duotone,320_128,39;phosphor-user-switch-fill,384_128,39;phosphor-user-switch-light,448_128,39;phosphor-user-switch-thin,512_128,39;phosphor-user-switch,576_128,39;phosphor-user-thin,640_128,39;phosphor-user,704_128,39;phosphor-users-bold,768_128,39;phosphor-users-duotone,832_128,39;phosphor-users-fill,896_128,39;phosphor-users-four-bold,960_128,39;phosphor-users-four-duotone,0_192,39;phosphor-users-four-fill,64_192,39;phosphor-users-four-light,128_192,39;phosphor-users-four-thin,192_192,39;phosphor-users-four,256_192,39;phosphor-users-light,320_192,39;phosphor-users-thin,384_192,39;phosphor-users-three-bold,448_192,39;phosphor-users-three-duotone,512_192,39;phosphor-users-three-fill,576_192,39;phosphor-users-three-light,640_192,39;phosphor-users-three-thin,704_192,39;phosphor-users-three,768_192,39;phosphor-users,832_192,39;phosphor-van-bold,896_192,39;phosphor-van-duotone,960_192,39;phosphor-van-fill,0_256,39;phosphor-van-light,64_256,39;phosphor-van-thin,128_256,39;phosphor-van,192_256,39;phosphor-vault-bold,256_256,39;phosphor-vault-duotone,320_256,39;phosphor-vault-fill,384_256,39;phosphor-vault-light,448_256,39;phosphor-vault-thin,512_256,39;phosphor-vault,576_256,39;phosphor-vector-three-bold,640_256,39;phosphor-vector-three-duotone,704_256,39;phosphor-vector-three-fill,768_256,39;phosphor-vector-three-light,832_256,39;phosphor-vector-three-thin,896_256,39;phosphor-vector-three,960_256,39;phosphor-vector-two-bold,0_320,39;phosphor-vector-two-duotone,64_320,39;phosphor-vector-two-fill,128_320,39;phosphor-vector-two-light,192_320,39;phosphor-vector-two-thin,256_320,39;phosphor-vector-two,320_320,39;phosphor-vibrate-bold,384_320,39;phosphor-vibrate-duotone,448_320,39;phosphor-vibrate-fill,512_320,39;phosphor-vibrate-light,576_320,39;phosphor-vibrate-thin,640_320,39;phosphor-vibrate,704_320,39;phosphor-video-bold,768_320,39;phosphor-video-camera-bold,832_320,39;phosphor-video-camera-duotone,896_320,39;phosphor-video-camera-fill,960_320,39;phosphor-video-camera-light,0_384,39;phosphor-video-camera-slash-bold,64_384,39;phosphor-video-camera-slash-duotone,128_384,39;phosphor-video-camera-slash-fill,192_384,39;phosphor-video-camera-slash-light,256_384,39;phosphor-video-camera-slash-thin,320_384,39;phosphor-video-camera-slash,384_384,39;phosphor-video-camera-thin,448_384,39;phosphor-video-camera,512_384,39;phosphor-video-conference-bold,576_384,39;phosphor-video-conference-duotone,640_384,39;phosphor-video-conference-fill,704_384,39;phosphor-video-conference-light,768_384,39;phosphor-video-conference-thin,832_384,39;phosphor-video-conference,896_384,39;phosphor-video-duotone,960_384,39;phosphor-video-fill,0_448,39;phosphor-video-light,64_448,39;phosphor-video-thin,128_448,39;phosphor-video,192_448,39;phosphor-vignette-bold,256_448,39;phosphor-vignette-duotone,320_448,39;phosphor-vignette-fill,384_448,39;phosphor-vignette-light,448_448,39;phosphor-vignette-thin,512_448,39;phosphor-vignette,576_448,39;phosphor-vinyl-record-bold,640_448,39;phosphor-vinyl-record-duotone,704_448,39;phosphor-vinyl-record-fill,768_448,39;phosphor-vinyl-record-light,832_448,39;phosphor-vinyl-record-thin,896_448,39;phosphor-vinyl-record,960_448,39;phosphor-virtual-reality-bold,0_512,39;phosphor-virtual-reality-duotone,64_512,39;phosphor-virtual-reality-fill,128_512,39;phosphor-virtual-reality-light,192_512,39;phosphor-virtual-reality-thin,256_512,39;phosphor-virtual-reality,320_512,39;phosphor-virus-bold,384_512,39;phosphor-virus-duotone,448_512,39;phosphor-virus-fill,512_512,39;phosphor-virus-light,576_512,39;phosphor-virus-thin,640_512,39;phosphor-virus,704_512,39;phosphor-visor-bold,768_512,39;phosphor-visor-duotone,832_512,39;phosphor-visor-fill,896_512,39;phosphor-visor-light,960_512,39;phosphor-visor-thin,0_576,39;phosphor-visor,64_576,39;phosphor-voicemail-bold,128_576,39;phosphor-voicemail-duotone,192_576,39;phosphor-voicemail-fill,256_576,39;phosphor-voicemail-light,320_576,39;phosphor-voicemail-thin,384_576,39;phosphor-voicemail,448_576,39;phosphor-volleyball-bold,512_576,39;phosphor-volleyball-duotone,576_576,39;phosphor-volleyball-fill,640_576,39;phosphor-volleyball-light,704_576,39;phosphor-volleyball-thin,768_576,39;phosphor-volleyball,832_576,39;phosphor-wall-bold,896_576,39;phosphor-wall-duotone,960_576,39;phosphor-wall-fill,0_640,39;phosphor-wall-light,64_640,39;phosphor-wall-thin,128_640,39;phosphor-wall,192_640,39;phosphor-wallet-bold,256_640,39;phosphor-wallet-duotone,320_640,39;phosphor-wallet-fill,384_640,39;phosphor-wallet-light,448_640,39;phosphor-wallet-thin,512_640,39;phosphor-wallet,576_640,39;phosphor-warehouse-bold,640_640,39;phosphor-warehouse-duotone,704_640,39;phosphor-warehouse-fill,768_640,39;phosphor-warehouse-light,832_640,39;phosphor-warehouse-thin,896_640,39;phosphor-warehouse,960_640,39;phosphor-warning-bold,0_704,39;phosphor-warning-circle-bold,64_704,39;phosphor-warning-circle-duotone,128_704,39;phosphor-warning-circle-fill,192_704,39;phosphor-warning-circle-light,256_704,39;phosphor-warning-circle-thin,320_704,39;phosphor-warning-circle,384_704,39;phosphor-warning-diamond-bold,448_704,39;phosphor-warning-diamond-duotone,512_704,39;phosphor-warning-diamond-fill,576_704,39;phosphor-warning-diamond-light,640_704,39;phosphor-warning-diamond-thin,704_704,39;phosphor-warning-diamond,768_704,39;phosphor-warning-duotone,832_704,39;phosphor-warning-fill,896_704,39;phosphor-warning-light,960_704,39;phosphor-warning-octagon-bold,0_768,39;phosphor-warning-octagon-duotone,64_768,39;phosphor-warning-octagon-fill,128_768,39;phosphor-warning-octagon-light,192_768,39;phosphor-warning-octagon-thin,256_768,39;phosphor-warning-octagon,320_768,39;phosphor-warning-thin,384_768,39;phosphor-warning,448_768,39;phosphor-washing-machine-bold,512_768,39;phosphor-washing-machine-duotone,576_768,39;phosphor-washing-machine-fill,640_768,39;phosphor-washing-machine-light,704_768,39;phosphor-washing-machine-thin,768_768,39;phosphor-washing-machine,832_768,39;phosphor-watch-bold,896_768,39;phosphor-watch-duotone,960_768,39;phosphor-watch-fill,0_832,39;phosphor-watch-light,64_832,39;phosphor-watch-thin,128_832,39;phosphor-watch,192_832,39;phosphor-wave-sawtooth-bold,256_832,39;phosphor-wave-sawtooth-duotone,320_832,39;phosphor-wave-sawtooth-fill,384_832,39;phosphor-wave-sawtooth-light,448_832,39;phosphor-wave-sawtooth-thin,512_832,39;phosphor-wave-sawtooth,576_832,39;phosphor-wave-sine-bold,640_832,39;phosphor-wave-sine-duotone,704_832,39;phosphor-wave-sine-fill,768_832,39;phosphor-wave-sine-light,832_832,39;phosphor-wave-sine-thin,896_832,39;phosphor-wave-sine,960_832,39;phosphor-wave-square-bold,0_896,39;phosphor-wave-square-duotone,64_896,39;phosphor-wave-square-fill,128_896,39;phosphor-wave-square-light,192_896,39;phosphor-wave-square-thin,256_896,39;phosphor-wave-square,320_896,39;phosphor-wave-triangle-bold,384_896,39;phosphor-wave-triangle-duotone,448_896,39;phosphor-wave-triangle-fill,512_896,39;phosphor-wave-triangle-light,576_896,39;phosphor-wave-triangle-thin,640_896,39;phosphor-wave-triangle,704_896,39;phosphor-waveform-bold,768_896,39;phosphor-waveform-duotone,832_896,39;phosphor-waveform-fill,896_896,39;phosphor-waveform-light,960_896,39;phosphor-waveform-slash-bold,0_960,39;phosphor-waveform-slash-duotone,64_960,39;phosphor-waveform-slash-fill,128_960,39;phosphor-waveform-slash-light,192_960,39;phosphor-waveform-slash-thin,256_960,39;phosphor-waveform-slash,320_960,39;phosphor-waveform-thin,384_960,39;phosphor-waveform,448_960,39;phosphor-waves-bold,512_960,39;phosphor-waves-duotone,576_960,39;phosphor-waves-fill,640_960,39;phosphor-waves-light,704_960,39;phosphor-waves-thin,768_960,39;phosphor-waves,832_960,39;phosphor-webcam-bold,896_960,39;phosphor-webcam-duotone,960_960,39;phosphor-webcam-fill,0_0,40;phosphor-webcam-light,64_0,40;phosphor-webcam-slash-bold,128_0,40;phosphor-webcam-slash-duotone,192_0,40;phosphor-webcam-slash-fill,256_0,40;phosphor-webcam-slash-light,320_0,40;phosphor-webcam-slash-thin,384_0,40;phosphor-webcam-slash,448_0,40;phosphor-webcam-thin,512_0,40;phosphor-webcam,576_0,40;phosphor-webhooks-logo-bold,640_0,40;phosphor-webhooks-logo-duotone,704_0,40;phosphor-webhooks-logo-fill,768_0,40;phosphor-webhooks-logo-light,832_0,40;phosphor-webhooks-logo-thin,896_0,40;phosphor-webhooks-logo,960_0,40;phosphor-wechat-logo-bold,0_64,40;phosphor-wechat-logo-duotone,64_64,40;phosphor-wechat-logo-fill,128_64,40;phosphor-wechat-logo-light,192_64,40;phosphor-wechat-logo-thin,256_64,40;phosphor-wechat-logo,320_64,40;phosphor-whatsapp-logo-bold,384_64,40;phosphor-whatsapp-logo-duotone,448_64,40;phosphor-whatsapp-logo-fill,512_64,40;phosphor-whatsapp-logo-light,576_64,40;phosphor-whatsapp-logo-thin,640_64,40;phosphor-whatsapp-logo,704_64,40;phosphor-wheelchair-bold,768_64,40;phosphor-wheelchair-duotone,832_64,40;phosphor-wheelchair-fill,896_64,40;phosphor-wheelchair-light,960_64,40;phosphor-wheelchair-motion-bold,0_128,40;phosphor-wheelchair-motion-duotone,64_128,40;phosphor-wheelchair-motion-fill,128_128,40;phosphor-wheelchair-motion-light,192_128,40;phosphor-wheelchair-motion-thin,256_128,40;phosphor-wheelchair-motion,320_128,40;phosphor-wheelchair-thin,384_128,40;phosphor-wheelchair,448_128,40;phosphor-wifi-high-bold,512_128,40;phosphor-wifi-high-duotone,576_128,40;phosphor-wifi-high-fill,640_128,40;phosphor-wifi-high-light,704_128,40;phosphor-wifi-high-thin,768_128,40;phosphor-wifi-high,832_128,40;phosphor-wifi-low-bold,896_128,40;phosphor-wifi-low-duotone,960_128,40;phosphor-wifi-low-fill,0_192,40;phosphor-wifi-low-light,64_192,40;phosphor-wifi-low-thin,128_192,40;phosphor-wifi-low,192_192,40;phosphor-wifi-medium-bold,256_192,40;phosphor-wifi-medium-duotone,320_192,40;phosphor-wifi-medium-fill,384_192,40;phosphor-wifi-medium-light,448_192,40;phosphor-wifi-medium-thin,512_192,40;phosphor-wifi-medium,576_192,40;phosphor-wifi-none-bold,640_192,40;phosphor-wifi-none-duotone,704_192,40;phosphor-wifi-none-fill,768_192,40;phosphor-wifi-none-light,832_192,40;phosphor-wifi-none-thin,896_192,40;phosphor-wifi-none,960_192,40;phosphor-wifi-slash-bold,0_256,40;phosphor-wifi-slash-duotone,64_256,40;phosphor-wifi-slash-fill,128_256,40;phosphor-wifi-slash-light,192_256,40;phosphor-wifi-slash-thin,256_256,40;phosphor-wifi-slash,320_256,40;phosphor-wifi-x-bold,384_256,40;phosphor-wifi-x-duotone,448_256,40;phosphor-wifi-x-fill,512_256,40;phosphor-wifi-x-light,576_256,40;phosphor-wifi-x-thin,640_256,40;phosphor-wifi-x,704_256,40;phosphor-wind-bold,768_256,40;phosphor-wind-duotone,832_256,40;phosphor-wind-fill,896_256,40;phosphor-wind-light,960_256,40;phosphor-wind-thin,0_320,40;phosphor-wind,64_320,40;phosphor-windmill-bold,128_320,40;phosphor-windmill-duotone,192_320,40;phosphor-windmill-fill,256_320,40;phosphor-windmill-light,320_320,40;phosphor-windmill-thin,384_320,40;phosphor-windmill,448_320,40;phosphor-windows-logo-bold,512_320,40;phosphor-windows-logo-duotone,576_320,40;phosphor-windows-logo-fill,640_320,40;phosphor-windows-logo-light,704_320,40;phosphor-windows-logo-thin,768_320,40;phosphor-windows-logo,832_320,40;phosphor-wine-bold,896_320,40;phosphor-wine-duotone,960_320,40;phosphor-wine-fill,0_384,40;phosphor-wine-light,64_384,40;phosphor-wine-thin,128_384,40;phosphor-wine,192_384,40;phosphor-wrench-bold,256_384,40;phosphor-wrench-duotone,320_384,40;phosphor-wrench-fill,384_384,40;phosphor-wrench-light,448_384,40;phosphor-wrench-thin,512_384,40;phosphor-wrench,576_384,40;phosphor-x-bold,640_384,40;phosphor-x-circle-bold,704_384,40;phosphor-x-circle-duotone,768_384,40;phosphor-x-circle-fill,832_384,40;phosphor-x-circle-light,896_384,40;phosphor-x-circle-thin,960_384,40;phosphor-x-circle,0_448,40;phosphor-x-duotone,64_448,40;phosphor-x-fill,128_448,40;phosphor-x-light,192_448,40;phosphor-x-logo-bold,256_448,40;phosphor-x-logo-duotone,320_448,40;phosphor-x-logo-fill,384_448,40;phosphor-x-logo-light,448_448,40;phosphor-x-logo-thin,512_448,40;phosphor-x-logo,576_448,40;phosphor-x-square-bold,640_448,40;phosphor-x-square-duotone,704_448,40;phosphor-x-square-fill,768_448,40;phosphor-x-square-light,832_448,40;phosphor-x-square-thin,896_448,40;phosphor-x-square,960_448,40;phosphor-x-thin,0_512,40;phosphor-x,64_512,40;phosphor-yarn-bold,128_512,40;phosphor-yarn-duotone,192_512,40;phosphor-yarn-fill,256_512,40;phosphor-yarn-light,320_512,40;phosphor-yarn-thin,384_512,40;phosphor-yarn,448_512,40;phosphor-yin-yang-bold,512_512,40;phosphor-yin-yang-duotone,576_512,40;phosphor-yin-yang-fill,640_512,40;phosphor-yin-yang-light,704_512,40;phosphor-yin-yang-thin,768_512,40;phosphor-yin-yang,832_512,40;phosphor-youtube-logo-bold,896_512,40;phosphor-youtube-logo-duotone,960_512,40;phosphor-youtube-logo-fill,0_576,40;phosphor-youtube-logo-light,64_576,40;phosphor-youtube-logo-thin,128_576,40;phosphor-youtube-logo,192_576,40;pi,256_576,40;piano,320_576,40;pickaxe,384_576,40;picture-in-picture-2,448_576,40;picture-in-picture,512_576,40;piggy-bank,576_576,40;pilcrow-left,640_576,40;pilcrow-right,704_576,40;pilcrow,768_576,40;pill-bottle,832_576,40;pill,896_576,40;pin-off,960_576,40;pin,0_640,40;pipette,64_640,40;pizza,128_640,40;plane-landing,192_640,40;plane-takeoff,256_640,40;plane,320_640,40;play,384_640,40;plug-2,448_640,40;plug-zap,512_640,40;plug,576_640,40;plus,640_640,40;pocket-knife,704_640,40;pocket,768_640,40;podcast,832_640,40;pointer-off,896_640,40;pointer,960_640,40;popcorn,0_704,40;popsicle,64_704,40;pound-sterling,128_704,40;power-off,192_704,40;power,256_704,40;presentation,320_704,40;printer-check,384_704,40;printer,448_704,40;projector,512_704,40;proportions,576_704,40;puzzle,640_704,40;pyramid,704_704,40;qr-code,768_704,40;quote,832_704,40;rabbit,896_704,40;radar,960_704,40;radiation,0_768,40;radical,64_768,40;radio-receiver,128_768,40;radio-tower,192_768,40;radio,256_768,40;radius,320_768,40;rail-symbol,384_768,40;rainbow,448_768,40;rat,512_768,40;ratio,576_768,40;receipt-cent,640_768,40;receipt-euro,704_768,40;receipt-indian-rupee,768_768,40;receipt-japanese-yen,832_768,40;receipt-pound-sterling,896_768,40;receipt-russian-ruble,960_768,40;receipt-swiss-franc,0_832,40;receipt-text,64_832,40;receipt,128_832,40;rectangle-ellipsis,192_832,40;rectangle-horizontal,256_832,40;rectangle-vertical,320_832,40;recycle,384_832,40;redo-2,448_832,40;redo-dot,512_832,40;redo,576_832,40;refresh-ccw-dot,640_832,40;refresh-ccw,704_832,40;refresh-cw-off,768_832,40;refresh-cw,832_832,40;refrigerator,896_832,40;regex,960_832,40;remove-formatting,0_896,40;repeat-1,64_896,40;repeat-2,128_896,40;repeat,192_896,40;replace-all,256_896,40;replace,320_896,40;reply-all,384_896,40;reply,448_896,40;rewind,512_896,40;ribbon,576_896,40;rocket,640_896,40;rocking-chair,704_896,40;roller-coaster,768_896,40;rotate-3d,832_896,40;rotate-ccw-square,896_896,40;rotate-ccw,960_896,40;rotate-cw-square,0_960,40;rotate-cw,64_960,40;route-off,128_960,40;route,192_960,40;router,256_960,40;rows-2,320_960,40;rows-3,384_960,40;rows-4,448_960,40;rss,512_960,40;ruler,576_960,40;russian-ruble,640_960,40;sailboat,704_960,40;salad,768_960,40;sandwich,832_960,40;satellite-dish,896_960,40;satellite,960_960,40;save-all,0_0,41;save-off,64_0,41;save,128_0,41;scale-3d,192_0,41;scale,256_0,41;scaling,320_0,41;scan-barcode,384_0,41;scan-eye,448_0,41;scan-face,512_0,41;scan-heart,576_0,41;scan-line,640_0,41;scan-qr-code,704_0,41;scan-search,768_0,41;scan-text,832_0,41;scan,896_0,41;school,960_0,41;scissors-line-dashed,0_64,41;scissors,64_64,41;screen-share-off,128_64,41;screen-share,192_64,41;scroll-text,256_64,41;scroll,320_64,41;search-check,384_64,41;search-code,448_64,41;search-slash,512_64,41;search-x,576_64,41;search,640_64,41;section,704_64,41;send-horizontal,768_64,41;send-to-back,832_64,41;send,896_64,41;separator-horizontal,960_64,41;separator-vertical,0_128,41;server-cog,64_128,41;server-crash,128_128,41;server-off,192_128,41;server,256_128,41;settings-2,320_128,41;settings,384_128,41;shapes,448_128,41;share-2,512_128,41;share,576_128,41;sheet,640_128,41;shell,704_128,41;shield-alert,768_128,41;shield-ban,832_128,41;shield-check,896_128,41;shield-ellipsis,960_128,41;shield-half,0_192,41;shield-minus,64_192,41;shield-off,128_192,41;shield-plus,192_192,41;shield-question,256_192,41;shield-x,320_192,41;shield,384_192,41;ship-wheel,448_192,41;ship,512_192,41;shirt,576_192,41;shopping-bag,640_192,41;shopping-basket,704_192,41;shopping-cart,768_192,41;shovel,832_192,41;shower-head,896_192,41;shrink,960_192,41;shrub,0_256,41;shuffle,64_256,41;sigma,128_256,41;signal-high,192_256,41;signal-low,256_256,41;signal-medium,320_256,41;signal-zero,384_256,41;signal,448_256,41;signature,512_256,41;signpost-big,576_256,41;signpost,640_256,41;siren,704_256,41;skip-back,768_256,41;skip-forward,832_256,41;skull,896_256,41;slack,960_256,41;slash,0_320,41;slice,64_320,41;sliders-horizontal,128_320,41;sliders-vertical,192_320,41;smartphone-charging,256_320,41;smartphone-nfc,320_320,41;smartphone,384_320,41;smile-plus,448_320,41;smile,512_320,41;snail,576_320,41;snowflake,640_320,41;sofa,704_320,41;soup,768_320,41;space,832_320,41;spade,896_320,41;sparkle,960_320,41;sparkles,0_384,41;speaker,64_384,41;speech,128_384,41;spell-check-2,192_384,41;spell-check,256_384,41;spline,320_384,41;split,384_384,41;spray-can,448_384,41;sprout,512_384,41;square-activity,576_384,41;square-arrow-down-left,640_384,41;square-arrow-down-right,704_384,41;square-arrow-down,768_384,41;square-arrow-left,832_384,41;square-arrow-out-down-left,896_384,41;square-arrow-out-down-right,960_384,41;square-arrow-out-up-left,0_448,41;square-arrow-out-up-right,64_448,41;square-arrow-right,128_448,41;square-arrow-up-left,192_448,41;square-arrow-up-right,256_448,41;square-arrow-up,320_448,41;square-asterisk,384_448,41;square-bottom-dashed-scissors,448_448,41;square-chart-gantt,512_448,41;square-check-big,576_448,41;square-check,640_448,41;square-chevron-down,704_448,41;square-chevron-left,768_448,41;square-chevron-right,832_448,41;square-chevron-up,896_448,41;square-code,960_448,41;square-dashed-bottom-code,0_512,41;square-dashed-bottom,64_512,41;square-dashed-kanban,128_512,41;square-dashed-mouse-pointer,192_512,41;square-dashed,256_512,41;square-divide,320_512,41;square-dot,384_512,41;square-equal,448_512,41;square-function,512_512,41;square-kanban,576_512,41;square-library,640_512,41;square-m,704_512,41;square-menu,768_512,41;square-minus,832_512,41;square-mouse-pointer,896_512,41;square-parking-off,960_512,41;square-parking,0_576,41;square-pen,64_576,41;square-percent,128_576,41;square-pi,192_576,41;square-pilcrow,256_576,41;square-play,320_576,41;square-plus,384_576,41;square-power,448_576,41;square-radical,512_576,41;square-scissors,576_576,41;square-sigma,640_576,41;square-slash,704_576,41;square-split-horizontal,768_576,41;square-split-vertical,832_576,41;square-square,896_576,41;square-stack,960_576,41;square-terminal,0_640,41;square-user-round,64_640,41;square-user,128_640,41;square-x,192_640,41;square,256_640,41;squircle,320_640,41;squirrel,384_640,41;stamp,448_640,41;star-half,512_640,41;star-off,576_640,41;star,640_640,41;step-back,704_640,41;step-forward,768_640,41;stethoscope,832_640,41;sticker,896_640,41;sticky-note,960_640,41;store,0_704,41;stretch-horizontal,64_704,41;stretch-vertical,128_704,41;strikethrough,192_704,41;subscript,256_704,41;sun-dim,320_704,41;sun-medium,384_704,41;sun-moon,448_704,41;sun-snow,512_704,41;sun,576_704,41;sunrise,640_704,41;sunset,704_704,41;superscript,768_704,41;swatch-book,832_704,41;swiss-franc,896_704,41;switch-camera,960_704,41;sword,0_768,41;swords,64_768,41;syringe,128_768,41;table-2,192_768,41;table-cells-merge,256_768,41;table-cells-split,320_768,41;table-columns-split,384_768,41;table-of-contents,448_768,41;table-properties,512_768,41;table-rows-split,576_768,41;table,640_768,41;tablet-smartphone,704_768,41;tablet,768_768,41;tablets,832_768,41;tag,896_768,41;tags,960_768,41;tally-1,0_832,41;tally-2,64_832,41;tally-3,128_832,41;tally-4,192_832,41;tally-5,256_832,41;tangent,320_832,41;target,384_832,41;telescope,448_832,41;tent-tree,512_832,41;tent,576_832,41;terminal,640_832,41;test-tube-diagonal,704_832,41;test-tube,768_832,41;test-tubes,832_832,41;text-cursor-input,896_832,41;text-cursor,960_832,41;text-quote,0_896,41;text-search,64_896,41;text-select,128_896,41;text,192_896,41;theater,256_896,41;thermometer-snowflake,320_896,41;thermometer-sun,384_896,41;thermometer,448_896,41;thumbs-down,512_896,41;thumbs-up,576_896,41;ticket-check,640_896,41;ticket-minus,704_896,41;ticket-percent,768_896,41;ticket-plus,832_896,41;ticket-slash,896_896,41;ticket-x,960_896,41;ticket,0_960,41;tickets-plane,64_960,41;tickets,128_960,41;timer-off,192_960,41;timer-reset,256_960,41;timer,320_960,41;toggle-left,384_960,41;toggle-right,448_960,41;toilet,512_960,41;tornado,576_960,41;torus,640_960,41;touchpad-off,704_960,41;touchpad,768_960,41;tower-control,832_960,41;toy-brick,896_960,41;tractor,960_960,41;traffic-cone,0_0,42;train-front-tunnel,64_0,42;train-front,128_0,42;train-track,192_0,42;tram-front,256_0,42;trash-2,320_0,42;trash,384_0,42;tree-deciduous,448_0,42;tree-palm,512_0,42;tree-pine,576_0,42;trees,640_0,42;trello,704_0,42;trending-down,768_0,42;trending-up-down,832_0,42;trending-up,896_0,42;triangle-alert,960_0,42;triangle-right,0_64,42;triangle,64_64,42;trophy,128_64,42;truck,192_64,42;turtle,256_64,42;tv-minimal-play,320_64,42;tv-minimal,384_64,42;tv,448_64,42;twitch,512_64,42;twitter,576_64,42;type-outline,640_64,42;type,704_64,42;umbrella-off,768_64,42;umbrella,832_64,42;underline,896_64,42;undo-2,960_64,42;undo-dot,0_128,42;undo,64_128,42;unfold-horizontal,128_128,42;unfold-vertical,192_128,42;ungroup,256_128,42;university,320_128,42;unlink-2,384_128,42;unlink,448_128,42;unplug,512_128,42;upload,576_128,42;usb,640_128,42;user-check,704_128,42;user-cog,768_128,42;user-minus,832_128,42;user-pen,896_128,42;user-plus,960_128,42;user-round-check,0_192,42;user-round-cog,64_192,42;user-round-minus,128_192,42;user-round-pen,192_192,42;user-round-plus,256_192,42;user-round-search,320_192,42;user-round-x,384_192,42;user-round,448_192,42;user-search,512_192,42;user-x,576_192,42;user,640_192,42;users-round,704_192,42;users,768_192,42;utensils-crossed,832_192,42;utensils,896_192,42;utility-pole,960_192,42;variable,0_256,42;vault,64_256,42;vegan,128_256,42;venetian-mask,192_256,42;vibrate-off,256_256,42;vibrate,320_256,42;video-off,384_256,42;video,448_256,42;videotape,512_256,42;view,576_256,42;voicemail,640_256,42;volleyball,704_256,42;volume-1,768_256,42;volume-2,832_256,42;volume-off,896_256,42;volume-x,960_256,42;volume,0_320,42;vote,64_320,42;wallet-cards,128_320,42;wallet-minimal,192_320,42;wallet,256_320,42;wallpaper,320_320,42;wand-sparkles,384_320,42;wand,448_320,42;warehouse,512_320,42;washing-machine,576_320,42;watch,640_320,42;waves-ladder,704_320,42;waves,768_320,42;waypoints,832_320,42;webcam,896_320,42;webhook-off,960_320,42;webhook,0_384,42;weight,64_384,42;wheat-off,128_384,42;wheat,192_384,42;whole-word,256_384,42;wifi-high,320_384,42;wifi-low,384_384,42;wifi-off,448_384,42;wifi-zero,512_384,42;wifi,576_384,42;wind-arrow-down,640_384,42;wind,704_384,42;wine-off,768_384,42;wine,832_384,42;workflow,896_384,42;worm,960_384,42;wrap-text,0_448,42;wrench,64_448,42;x,128_448,42;youtube,192_448,42;zap-off,256_448,42;zap,320_448,42;zoom-in,384_448,42;zoom-out,448_448,42"
local IMAGES = {icons_1, icons_2, icons_3, icons_4, icons_5, icons_6, icons_7, icons_8, icons_9, icons_10, icons_11, icons_12, icons_13, icons_14, icons_15, icons_16, icons_17, icons_18, icons_19, icons_20, icons_21, icons_22, icons_23, icons_24, icons_25, icons_26, icons_27, icons_28, icons_29, icons_30, icons_31, icons_32, icons_33, icons_34, icons_35, icons_36, icons_37, icons_38, icons_39, icons_40, icons_41, icons_42}
local S64 = VEC2['64_64']
for _n, _o, _i in string.gmatch(_ICONDATA, "([^,]+),([^,]+),(%d+);?") do
M[_n] = { ImageRectSize = S64, ImageRectOffset = VEC2[_o], Image = IMAGES[tonumber(_i)] }
end
return M
end
R["Wave/UserInterface/Imports/ServerBrowser/ServerBrowserModule.lua"] = function(...)
-- Server browser: a slide-out panel (mirrors the Terminal's pattern) that lists
-- joinable servers as cards (image + title + description + Join button), with a
-- refresh button in the header. Driven by the script through WindowFunctions.
local ServerBrowser = {}
ServerBrowser.__index = ServerBrowser
local C = {
Width = 0.375, -- match the terminal's default width
IconSize = 15,
HeaderTextSize = 18,
HeaderHeight = 56,
CardHeight = 96,
CardPad = 12,
ImageSize = 72,
}
local function Attr(WindowFunctions, Name, Fallback)
local ok, v = pcall(function()
return WindowFunctions:GetCurrentThemeAttribute(Name)
end)
if ok and v ~= nil then
return v
end
return Fallback
end
local function GetIconSheet()
local sheet = getgenv().__WaveIconSheet
if sheet == nil then
local ok, s = pcall(function()
return Utility:LoadFile("Wave/UserInterface/Imports/Icons.lua")
end)
sheet = (ok and type(s) == "table") and s or false
getgenv().__WaveIconSheet = sheet
end
return sheet or nil
end
local function SetLucide(self, Image, Name)
if self.IconSheet then
pcall(function()
self.IconSheet:SetIcon(Image, Name)
end)
end
end
function ServerBrowser.new(Parent, TopbarFolder, WaveLibrary, WaveLibraryUI, WindowFunctions)
local self = setmetatable({}, ServerBrowser)
self.Parent = Parent
self.WaveLibrary = WaveLibrary
self.WaveLibraryUI = WaveLibraryUI
self.WindowFunctions = WindowFunctions
self.Cards = {}
self.RefreshCallback = nil
self.Open = false
self.ToggleDebounce = false
self.IconSheet = GetIconSheet()
self:CreatePanel()
self:CreateTopbarIcon(TopbarFolder)
self:Theme()
-- Hide cleanly with the window. The panel is a child of Base (so it follows Base.Visible), but its
-- glow lives outside Base and would otherwise linger -- drop both the instant the window toggles
-- off, and restore them to the panel's open/closed state when it comes back.
pcall(function()
self.Parent:GetPropertyChangedSignal("Visible"):Connect(function()
local shown = self.Parent.Visible
self.Panel.Visible = shown and self.Open or false
if self.Shadow then
self.Shadow.Visible = shown and self.Open or false
end
end)
end)
return self
end
function ServerBrowser:CreatePanel()
local Panel = Instance.new("Frame")
Panel.Name = "ServerBrowser"
Panel.AnchorPoint = Vector2.new(0.5, 0.5)
Panel.Size = UDim2.new(C.Width, 0, 1, 0)
Panel.Position = UDim2.new(1, 0, 0.5, 0) -- tucked behind the window's right edge
Panel.BackgroundColor3 = Color3.fromRGB(16, 16, 22)
Panel.BackgroundTransparency = 0
Panel.BorderSizePixel = 0
Panel.ZIndex = -10 -- sit behind the main window
Panel.Visible = false
Panel.Parent = self.Parent
self.Panel = Panel
local Corner = Instance.new("UICorner")
Corner.CornerRadius = UDim.new(0, 10)
Corner.Parent = Panel
local Stroke = Instance.new("UIStroke")
Stroke.Name = "ServerStroke"
Stroke.Color = Color3.fromRGB(255, 255, 255)
Stroke.Transparency = 0.85
Stroke.Thickness = 1
Stroke.Parent = Panel
self.Stroke = Stroke
-- wavy wallpaper, same image the terminal / main window use (kept subtle, behind the content)
local Wallpaper = Instance.new("ImageLabel")
Wallpaper.Name = "ServerWallpaper"
Wallpaper.Image = Assets.StyleOneWallpaper
Wallpaper.Size = UDim2.new(1, 0, 1, 0)
Wallpaper.Position = UDim2.new(0, 0, 0, 0)
Wallpaper.BackgroundTransparency = 1
Wallpaper.ImageTransparency = 0.65
Wallpaper.ImageColor3 = Color3.fromRGB(32, 32, 32)
Wallpaper.ScaleType = Enum.ScaleType.Crop
Wallpaper.ZIndex = 0
Wallpaper.Parent = Panel
local WallCorner = Instance.new("UICorner")
WallCorner.CornerRadius = UDim.new(0, 10)
WallCorner.Parent = Wallpaper
self.Wallpaper = Wallpaper
-- same glow as the main window, theme-driven via WindowFunctions:ApplyShadows
pcall(function()
self.Shadow = self.WaveLibrary:CreateShadow({
Object = self.WaveLibraryUI,
ReplicateVisible = { self.Parent, Panel },
ObjectReplication = Panel,
Gradient = {
Color = ColorSequence.new(Color3.new(0, 0, 0.2), Color3.new(0.4, 0.6, 1)),
},
})
end)
-- header: centered title (exactly like the terminal's "Terminal" label) + refresh (right)
local Title = Instance.new("TextLabel")
Title.Name = "ServerTitle"
Title.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.Bold)
Title.RichText = true
Title.Text = "Servers"
Title.TextColor3 = Color3.fromRGB(220, 220, 220)
Title.TextSize = C.HeaderTextSize
Title.TextTransparency = 0.5
Title.TextTruncate = Enum.TextTruncate.SplitWord
Title.TextXAlignment = Enum.TextXAlignment.Center
Title.TextYAlignment = Enum.TextYAlignment.Top
Title.BackgroundTransparency = 1
Title.AnchorPoint = Vector2.new(0, 0.5)
Title.AutomaticSize = Enum.AutomaticSize.Y
Title.Position = UDim2.fromScale(0.05, 0.05)
Title.Size = UDim2.fromScale(0.9, 0)
Title.ZIndex = 6
Title.Parent = Panel
self.TitleLabel = Title
-- the little centered bar under the title, same as the terminal's
local TitleBar = Instance.new("Frame")
TitleBar.Name = "ServerTitleBar"
TitleBar.AnchorPoint = Vector2.new(0.5, 0)
TitleBar.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
TitleBar.BackgroundTransparency = 0.9
TitleBar.BorderSizePixel = 0
TitleBar.Position = UDim2.new(0.5, 0, 0, 42.5)
TitleBar.Size = UDim2.new(0, 48, 0, 1)
TitleBar.ZIndex = 6
TitleBar.Parent = Panel
self.TitleBar = TitleBar
local Refresh = Instance.new("ImageButton")
Refresh.Name = "ServerRefresh"
Refresh.AnchorPoint = Vector2.new(1, 0.5)
Refresh.Position = UDim2.fromScale(0.935, 0.05) -- same spot as the terminal's bin icon
Refresh.Size = UDim2.fromOffset(15, 15) -- same size as the terminal's bin icon
Refresh.BackgroundTransparency = 1
Refresh.ImageColor3 = Color3.fromRGB(210, 210, 220)
Refresh.ImageTransparency = 0.25
Refresh.ZIndex = 6
Refresh.Parent = Panel
SetLucide(self, Refresh, "refresh-cw")
self.RefreshButton = Refresh
local Divider = Instance.new("Frame")
Divider.Name = "ServerDivider"
Divider.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Divider.BackgroundTransparency = 0.9
Divider.BorderSizePixel = 0
Divider.Position = UDim2.new(0, 0, 0, 63)
Divider.Size = UDim2.new(1, 0, 0, 1)
Divider.ZIndex = 6
Divider.Parent = Panel
self.Divider = Divider
-- scrolling list of cards
local Scroll = Instance.new("ScrollingFrame")
Scroll.Name = "ServerList"
Scroll.Active = true
Scroll.BackgroundTransparency = 1
Scroll.BorderSizePixel = 0
Scroll.Position = UDim2.new(0, 0, 0, 72)
Scroll.Size = UDim2.new(1, 0, 1, -84)
Scroll.CanvasSize = UDim2.new()
Scroll.AutomaticCanvasSize = Enum.AutomaticSize.Y
Scroll.ScrollBarThickness = 2
Scroll.ScrollBarImageColor3 = Color3.fromRGB(255, 255, 255)
Scroll.ScrollBarImageTransparency = 0.7
Scroll.ScrollingDirection = Enum.ScrollingDirection.Y
Scroll.ZIndex = 6
Scroll.Parent = Panel
self.Scroll = Scroll
local SPad = Instance.new("UIPadding")
SPad.PaddingLeft = UDim.new(0, 14)
SPad.PaddingRight = UDim.new(0, 14)
SPad.PaddingTop = UDim.new(0, 4)
SPad.PaddingBottom = UDim.new(0, 12)
SPad.Parent = Scroll
local SList = Instance.new("UIListLayout")
SList.FillDirection = Enum.FillDirection.Vertical
SList.SortOrder = Enum.SortOrder.LayoutOrder
SList.Padding = UDim.new(0, 10)
SList.Parent = Scroll
self.ListLayout = SList
-- empty-state hint
local Empty = Instance.new("TextLabel")
Empty.Name = "ServerEmpty"
Empty.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.Medium)
Empty.Text = "No servers yet — hit refresh."
Empty.TextColor3 = Color3.fromRGB(150, 150, 165)
Empty.TextSize = 13
Empty.TextWrapped = true
Empty.BackgroundTransparency = 1
Empty.AnchorPoint = Vector2.new(0.5, 0)
Empty.Position = UDim2.new(0.5, 0, 0, 28)
Empty.Size = UDim2.new(1, -40, 0, 40)
Empty.ZIndex = 6
Empty.Parent = Panel
self.EmptyLabel = Empty
-- refresh hover + click
Refresh.MouseEnter:Connect(function()
Utility:QuickTween(Refresh, { ImageTransparency = 0 })
end)
Refresh.MouseLeave:Connect(function()
Utility:QuickTween(Refresh, { ImageTransparency = 0.25 })
end)
Refresh.MouseButton1Click:Connect(function()
self:DoRefresh()
end)
end
function ServerBrowser:CreateTopbarIcon(TopbarFolder)
local Icon = Instance.new("ImageButton")
Icon.Name = "ServerIcon"
Icon.AnchorPoint = Vector2.new(1, 0.5)
Icon.BackgroundTransparency = 1
Icon.ImageColor3 = Color3.fromRGB(255, 255, 255)
Icon.ImageTransparency = 0.7
Icon.Position = UDim2.fromScale(1, 0.5)
Icon.Size = UDim2.fromOffset(C.IconSize, C.IconSize)
Icon.LayoutOrder = -1 -- left of the terminal icon (which is 0) in the right-aligned topbar
Icon.ZIndex = 5
Icon.Parent = TopbarFolder
SetLucide(self, Icon, "server")
self.TopbarIcon = Icon
Icon.MouseEnter:Connect(function()
Utility:QuickTween(Icon, { ImageTransparency = 0 })
end)
Icon.MouseLeave:Connect(function()
Utility:QuickTween(Icon, { ImageTransparency = self.Open and 0.15 or 0.7 })
end)
Icon.InputBegan:Connect(function(Input)
if self.ToggleDebounce then
return
end
if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
self.ToggleDebounce = true
self:SetOpen(not self.Open)
task.delay(0.3, function()
self.ToggleDebounce = false
end)
end
end)
end
function ServerBrowser:DoRefresh()
-- spin the icon once
pcall(function()
Utility:PropertyTween(self.RefreshButton, TweenInfo.new(0.45, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), { Rotation = self.RefreshButton.Rotation - 360 }):Play()
end)
if type(self.RefreshCallback) == "function" then
if self.WaveLibrary and self.WaveLibrary.SafeCallback then
self.WaveLibrary:SafeCallback(self.RefreshCallback)
else
pcall(self.RefreshCallback)
end
end
end
function ServerBrowser:SetRefreshCallback(fn)
self.RefreshCallback = fn
end
function ServerBrowser:SetTitle(text)
if self.TitleLabel then
self.TitleLabel.Text = tostring(text)
end
end
function ServerBrowser:UpdateCount()
if self.EmptyLabel then
self.EmptyLabel.Visible = (#self.Cards == 0)
end
end
function ServerBrowser:AddServer(opts)
opts = opts or {}
local Card = Instance.new("Frame")
Card.Name = "ServerCard"
Card.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Card.BackgroundTransparency = 0.965
Card.BorderSizePixel = 0
Card.Size = UDim2.new(1, 0, 0, C.CardHeight)
Card.LayoutOrder = #self.Cards + 1
Card.ZIndex = 7
Card.Parent = self.Scroll
local CardCorner = Instance.new("UICorner")
CardCorner.CornerRadius = UDim.new(0, 8)
CardCorner.Parent = Card
local CardStroke = Instance.new("UIStroke")
CardStroke.Name = "CardStroke"
CardStroke.Color = Color3.fromRGB(255, 255, 255)
CardStroke.Transparency = 0.9
CardStroke.Thickness = 1
CardStroke.Parent = Card
local Image = Instance.new("ImageLabel")
Image.Name = "CardImage"
Image.BackgroundColor3 = Color3.fromRGB(40, 40, 50)
Image.BackgroundTransparency = 0.3
Image.BorderSizePixel = 0
Image.AnchorPoint = Vector2.new(0, 0.5)
Image.Position = UDim2.new(0, C.CardPad, 0.5, 0)
Image.Size = UDim2.fromOffset(C.ImageSize, C.ImageSize)
Image.ScaleType = Enum.ScaleType.Crop
Image.Image = opts.Image and tostring(opts.Image) or ""
Image.ZIndex = 8
Image.Parent = Card
local ImageCorner = Instance.new("UICorner")
ImageCorner.CornerRadius = UDim.new(0, 7)
ImageCorner.Parent = Image
local TextLeft = C.CardPad + C.ImageSize + 12
local TitleL = Instance.new("TextLabel")
TitleL.Name = "CardTitle"
TitleL.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.SemiBold)
TitleL.Text = opts.Title and tostring(opts.Title) or "Server"
TitleL.TextColor3 = Color3.fromRGB(240, 240, 245)
TitleL.TextSize = 14
TitleL.TextXAlignment = Enum.TextXAlignment.Left
TitleL.TextYAlignment = Enum.TextYAlignment.Top
TitleL.TextTruncate = Enum.TextTruncate.AtEnd
TitleL.BackgroundTransparency = 1
TitleL.Position = UDim2.new(0, TextLeft, 0, 14)
TitleL.Size = UDim2.new(1, -(TextLeft + 14), 0, 18)
TitleL.ZIndex = 8
TitleL.Parent = Card
local DescL = Instance.new("TextLabel")
DescL.Name = "CardDescription"
DescL.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.Medium)
DescL.Text = opts.Description and tostring(opts.Description) or ""
DescL.TextColor3 = Color3.fromRGB(165, 165, 180)
DescL.TextSize = 12
DescL.TextXAlignment = Enum.TextXAlignment.Left
DescL.TextYAlignment = Enum.TextYAlignment.Top
DescL.TextWrapped = true
DescL.TextTruncate = Enum.TextTruncate.AtEnd
DescL.BackgroundTransparency = 1
DescL.Position = UDim2.new(0, TextLeft, 0, 34)
DescL.Size = UDim2.new(1, -(TextLeft + 14), 0, 30)
DescL.ZIndex = 8
DescL.Parent = Card
-- Join button: styled exactly like a main-UI Button -- transparent with a faint hover wash, dim
-- text that brightens on hover, and the standard action icon on the right.
local hoverColor = Attr(self.WindowFunctions, "HoverColor", Color3.fromRGB(255, 255, 255))
local Join = Instance.new("Frame")
Join.Name = "CardJoin"
Join.BackgroundTransparency = 1
Join.AnchorPoint = Vector2.new(1, 1)
Join.Position = UDim2.new(1, -12, 1, -12)
Join.Size = UDim2.fromOffset(52, 26)
Join.ZIndex = 9
Join.Parent = Card
local JoinBG = Instance.new("Frame") -- faint hover wash, same as the main-UI button
JoinBG.Name = "ButtonBG"
JoinBG.BackgroundColor3 = hoverColor
JoinBG.BackgroundTransparency = 1
JoinBG.BorderSizePixel = 0
JoinBG.AnchorPoint = Vector2.new(0.5, 0.5)
JoinBG.Position = UDim2.fromScale(0.5, 0.5)
JoinBG.Size = UDim2.new(1, 14, 1, 4)
JoinBG.ZIndex = 9
JoinBG.Parent = Join
local JoinBGCorner = Instance.new("UICorner")
JoinBGCorner.CornerRadius = UDim.new(0, 8)
JoinBGCorner.Parent = JoinBG
local JoinInteract = Instance.new("TextButton")
JoinInteract.Name = "CardJoinInteract"
JoinInteract.FontFace = Font.new(Assets.InterFont)
JoinInteract.RichText = true
JoinInteract.Text = "Join"
JoinInteract.TextColor3 = Color3.fromRGB(255, 255, 255)
JoinInteract.TextSize = 13
JoinInteract.TextTransparency = 0.5
JoinInteract.TextXAlignment = Enum.TextXAlignment.Right
JoinInteract.BackgroundTransparency = 1
JoinInteract.Size = UDim2.fromScale(1, 1)
JoinInteract.ZIndex = 10
JoinInteract.Parent = Join
local JoinInteractPad = Instance.new("UIPadding") -- keep "Join" snug just left of the arrow
JoinInteractPad.PaddingRight = UDim.new(0, 23)
JoinInteractPad.Parent = JoinInteract
local JoinImage = Instance.new("ImageLabel")
JoinImage.Name = "JoinImage"
JoinImage.Image = Assets.ButtonImage
JoinImage.ImageTransparency = 0.5
JoinImage.AnchorPoint = Vector2.new(1, 0.5)
JoinImage.BackgroundTransparency = 1
JoinImage.BorderSizePixel = 0
JoinImage.Position = UDim2.new(1, -3, 0.5, 0)
JoinImage.Size = UDim2.fromOffset(15, 15)
JoinImage.ZIndex = 10
JoinImage.Parent = Join
JoinInteract.MouseEnter:Connect(function()
Utility:QuickTween(JoinBG, { BackgroundTransparency = 0.93 })
Utility:QuickTween(JoinInteract, { TextTransparency = 0 })
Utility:QuickTween(JoinImage, { ImageTransparency = 0 })
end)
JoinInteract.MouseLeave:Connect(function()
Utility:QuickTween(JoinBG, { BackgroundTransparency = 1 })
Utility:QuickTween(JoinInteract, { TextTransparency = 0.5 })
Utility:QuickTween(JoinImage, { ImageTransparency = 0.5 })
end)
JoinInteract.MouseButton1Down:Connect(function()
Utility:QuickTween(JoinBG, { BackgroundTransparency = 0.86 })
end)
JoinInteract.MouseButton1Up:Connect(function()
Utility:QuickTween(JoinBG, { BackgroundTransparency = 0.93 })
end)
local Handle = {
Instance = Card,
Image = Image,
Title = TitleL,
Description = DescL,
JoinButton = Join,
}
Handle.Callback = opts.Callback or opts.Join or opts.OnJoin
JoinInteract.MouseButton1Click:Connect(function()
if type(Handle.Callback) == "function" then
if self.WaveLibrary and self.WaveLibrary.SafeCallback then
self.WaveLibrary:SafeCallback(Handle.Callback, Handle)
else
pcall(Handle.Callback, Handle)
end
end
end)
function Handle:SetTitle(t)
TitleL.Text = tostring(t)
return self
end
function Handle:SetDescription(d)
DescL.Text = tostring(d)
return self
end
function Handle:SetImage(id)
Image.Image = tostring(id)
return self
end
function Handle:OnJoin(fn)
Handle.Callback = fn
return self
end
local browser = self
function Handle:Remove()
for i, c in ipairs(browser.Cards) do
if c == Handle then
table.remove(browser.Cards, i)
break
end
end
pcall(function()
Card:Destroy()
end)
browser:UpdateCount()
end
Handle.Destroy = Handle.Remove
table.insert(self.Cards, Handle)
self:UpdateCount()
self:ThemeCard(Handle)
return Handle
end
function ServerBrowser:ClearServers()
for _, c in ipairs(self.Cards) do
pcall(function()
c.Instance:Destroy()
end)
end
self.Cards = {}
self:UpdateCount()
end
function ServerBrowser:SetOpen(state)
state = state and true or false
self.Open = state
if state then
-- mutually exclusive with the terminal: close it when we open
pcall(function()
if self.WindowFunctions.Terminal and self.WindowFunctions.Terminal.ToggleOutputScreen then
self.WindowFunctions.Terminal:ToggleOutputScreen(false, self.WindowFunctions)
end
end)
end
self.Panel.Visible = true
local goalPos = state and UDim2.new(1.2, 0, 0.5, 0) or UDim2.new(1, 0, 0.5, 0)
-- Open glides in; close snaps out fast so nothing lingers. Every background / image / stroke fades
-- (not just text) -- otherwise the card image placeholders stay on screen as dark squares.
local dur = state and 0.28 or 0.12
local info = TweenInfo.new(dur, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
local function fade(obj, props)
Utility:PropertyTween(obj, info, props):Play()
end
fade(self.Panel, { Position = goalPos, BackgroundTransparency = state and 0 or 1 })
if self.Stroke then
fade(self.Stroke, { Transparency = state and 0.82 or 1 })
end
if self.Shadow then
fade(self.Shadow, { ImageTransparency = state and (Attr(self.WindowFunctions, "ShadowTransparency", 0) or 0) or 1 })
end
if self.Wallpaper then
fade(self.Wallpaper, { ImageTransparency = state and (Attr(self.WindowFunctions, "WallpaperTransparency", 0.65) or 0.65) or 1 })
end
if self.TopbarIcon then
fade(self.TopbarIcon, { ImageTransparency = state and 0.15 or 0.7 })
end
for _, d in ipairs(self.Panel:GetDescendants()) do
if d == self.Wallpaper then
-- kept subtle (tweened above); don't let the generic pass force it fully opaque
elseif d.Name == "ButtonBG" then
fade(d, { BackgroundTransparency = 1 }) -- the join hover-wash idles invisible
elseif d.Name == "CardImage" then
fade(d, { ImageTransparency = state and 0 or 1, BackgroundTransparency = state and 0.35 or 1 })
elseif d.Name == "ServerCard" then
fade(d, { BackgroundTransparency = state and 0.965 or 1 })
elseif d:IsA("UIStroke") then
if d ~= self.Stroke then
fade(d, { Transparency = state and 0.9 or 1 })
end
elseif d:IsA("Frame") and (d.Name == "ServerTitleBar" or d.Name == "ServerDivider") then
-- the little bars (theme styling clobbers these, so re-assert on every toggle)
fade(d, { BackgroundTransparency = state and 0.85 or 1 })
elseif d.Name == "CardJoinInteract" then
fade(d, { TextTransparency = state and 0.5 or 1 }) -- main-UI button text idles dim
elseif d.Name == "JoinImage" then
fade(d, { ImageTransparency = state and 0.5 or 1 })
elseif d:IsA("TextLabel") or d:IsA("TextButton") then
-- the title sits at 0.5 like the terminal's; everything else stays fully legible
fade(d, { TextTransparency = state and (d.Name == "ServerTitle" and 0.5 or 0) or 1 })
elseif d:IsA("ImageLabel") or d:IsA("ImageButton") then
fade(d, { ImageTransparency = state and 0 or 1 })
end
end
-- once closed, hide right after the quick fade so nothing peeks past the window's edge
if not state then
local panel = self.Panel
task.delay(0.14, function()
if not self.Open and panel then
panel.Visible = false
end
end)
end
end
-- theme the card to the current palette
function ServerBrowser:ThemeCard(card)
local WF = self.WindowFunctions
local border = Attr(WF, "BorderColor", Color3.fromRGB(255, 255, 255))
local primary = Attr(WF, "TextPrimary", Color3.fromRGB(240, 240, 245))
local secondary = Attr(WF, "TextSecondary", Color3.fromRGB(165, 165, 180))
local hover = Attr(WF, "HoverColor", Color3.fromRGB(255, 255, 255))
pcall(function()
card.Title.TextColor3 = primary
card.Description.TextColor3 = secondary
local bg = card.JoinButton:FindFirstChild("ButtonBG")
if bg then
bg.BackgroundColor3 = hover
end
local cs = card.Instance:FindFirstChild("CardStroke")
if cs then
cs.Color = border
end
end)
end
function ServerBrowser:Theme()
local WF = self.WindowFunctions
local bg = Attr(WF, "Background", Color3.fromRGB(16, 16, 22))
local primary = Attr(WF, "HeaderColor", Attr(WF, "TextPrimary", Color3.fromRGB(240, 240, 245)))
local secondary = Attr(WF, "TextSecondary", Color3.fromRGB(170, 170, 185))
local border = Attr(WF, "BorderColor", Color3.fromRGB(255, 255, 255))
-- accent: try a few common names, else a sensible blue
self.AccentColor = Attr(WF, "Accent", Attr(WF, "AccentColor", Attr(WF, "ElementBorderHighlight", Color3.fromRGB(86, 130, 255))))
pcall(function()
self.Panel.BackgroundColor3 = bg
if self.Stroke then
self.Stroke.Color = border
end
self.TitleLabel.TextColor3 = primary
self.EmptyLabel.TextColor3 = secondary
self.RefreshButton.ImageColor3 = secondary
self.Divider.BackgroundColor3 = border
self.Divider.BackgroundTransparency = self.Open and 0.85 or 1
if self.TitleBar then
self.TitleBar.BackgroundColor3 = border
self.TitleBar.BackgroundTransparency = self.Open and 0.85 or 1
end
if self.Wallpaper then
self.Wallpaper.ImageColor3 = bg:Lerp(Color3.fromRGB(255, 255, 255), 0.2)
end
if self.TopbarIcon then
self.TopbarIcon.ImageColor3 = primary
end
end)
for _, c in ipairs(self.Cards) do
self:ThemeCard(c)
end
end
return ServerBrowser
end
R["Wave/UserInterface/Imports/Settings/InsertConfigSection.lua"] = function(...)
return function(Requirements)
local WindowFunctions = Requirements.WindowFunctions
local WaveLibrary = Requirements.WaveLibrary
local TabFunctions = Requirements.TabFunctions
function TabFunctions:InsertConfigSection(Side)
local ConfigSection = TabFunctions:Section({Side = Side})
ConfigSection:Header({Name = "Configuration Settings"})
local InputPath = nil
local SelectedConfig = nil
local AutoloadLabel = nil
local function GetAutoloadPath()
return WaveLibrary.Folder .. "/settings/" .. game.GameId .. "/autoload.txt"
end
local function ShowNotification(Description)
WindowFunctions:Notify({
Title = "Interface",
Description = Description
})
end
local function ShowErrorNotification(Message, ErrorDetails)
ShowNotification(Message .. ", return error: " .. ErrorDetails)
end
local function RefreshConfigDropdown(ConfigSelection)
ConfigSelection:ClearOptions()
ConfigSelection:InsertOptions(WaveLibrary:RefreshConfigList())
end
local function UpdateAutoloadLabel(ConfigName)
AutoloadLabel:UpdateName("Autoload config: " .. ConfigName)
end
local function InitializeAutoloadLabel()
local AutoloadPath = GetAutoloadPath()
if isfile(AutoloadPath) then
local ConfigName = readfile(AutoloadPath)
UpdateAutoloadLabel(ConfigName)
end
end
ConfigSection:Input({
Name = "Config Name",
Placeholder = "Name",
AcceptedCharacters = "All",
Callback = function(Input)
InputPath = Input
end
})
local ConfigSelection = ConfigSection:Dropdown({
Name = "Select Config",
Multi = false,
Required = false,
Options = WaveLibrary:RefreshConfigList(),
Callback = function(Value)
SelectedConfig = Value
end
})
ConfigSection:Button({
Name = "Create Config",
Callback = function()
if not InputPath or string.gsub(InputPath, " ", "") == "" then
ShowNotification("Config name cannot be empty.")
return
end
local Success, ErrorMessage = WaveLibrary:SaveConfig(InputPath)
if not Success then
ShowErrorNotification("Unable to save config", ErrorMessage)
return
end
ShowNotification(string.format("Created config %q", InputPath))
RefreshConfigDropdown(ConfigSelection)
end
})
ConfigSection:Button({
Name = "Load Config",
Callback = function()
local Success, ErrorMessage = WaveLibrary:LoadConfig(ConfigSelection.Value)
if not Success then
ShowErrorNotification("Unable to load config", ErrorMessage)
return
end
ShowNotification(string.format("Loaded config %q", ConfigSelection.Value))
end
})
ConfigSection:Button({
Name = "Overwrite Config",
Callback = function()
local Success, ErrorMessage = WaveLibrary:SaveConfig(ConfigSelection.Value)
if not Success then
ShowErrorNotification("Unable to overwrite config", ErrorMessage)
return
end
ShowNotification(string.format("Overwrote config %q", ConfigSelection.Value))
end
})
ConfigSection:Button({
Name = "Delete Config",
Callback = function()
local Success, ErrorMessage = WaveLibrary:DeleteConfig(ConfigSelection.Value)
if not Success then
ShowErrorNotification("Unable to delete config", ErrorMessage)
return
end
ShowNotification(string.format("Deleted config %q", ConfigSelection.Value))
RefreshConfigDropdown(ConfigSelection)
end
})
ConfigSection:Button({
Name = "Delete All Configs",
Callback = function()
local Success, Message = WaveLibrary:DeleteAllConfigs()
if not Success then
ShowErrorNotification("Unable to delete all configs", Message)
return
end
ShowNotification(Message)
RefreshConfigDropdown(ConfigSelection)
end
})
ConfigSection:Button({
Name = "Refresh Config List",
Callback = function()
RefreshConfigDropdown(ConfigSelection)
end
})
ConfigSection:Button({
Name = "Set as autoload",
Callback = function()
local ConfigName = ConfigSelection.Value
writefile(GetAutoloadPath(), ConfigName)
UpdateAutoloadLabel(ConfigName)
ShowNotification(string.format("Set %q as autoload", ConfigName))
end
})
AutoloadLabel = ConfigSection:Label({Text = "Autoload config: None"})
InitializeAutoloadLabel()
end
end
end
R["Wave/UserInterface/Imports/Settings/InsertGeneralSettings.lua"] = function(...)
return function(Requirements)
local WindowFunctions = Requirements.WindowFunctions
local WaveLibrary = Requirements.WaveLibrary
local TabFunctions = Requirements.TabFunctions
function TabFunctions:InsertGeneralSettings(Side)
local SettingsSection = TabFunctions:Section({Side = Side})
local function GetKeybindPath()
return WaveLibrary.Folder .. "/settings/startup/KeybindSaved.wave"
end
local function LoadSavedKeybind()
local KeybindPath = GetKeybindPath()
if isfile(KeybindPath) then
local KeybindName = readfile(KeybindPath)
return Enum.KeyCode[KeybindName]
end
return Enum.KeyCode.LeftAlt
end
local function ShowKeybindNotification(KeybindName)
WindowFunctions:Notify({
Title = WindowFunctions.Settings.Title,
Description = "Successfully Binded Keybind to - " .. KeybindName,
Lifetime = 3
})
end
local SavedKeybind = LoadSavedKeybind()
SettingsSection:Header({Name = "General Settings"})
SettingsSection:Slider({
Name = "Interface Scale",
Default = 1,
Minimum = 0.25,
Maximum = 1.5,
DisplayMethod = "Tenths",
Callback = function(Value)
WindowFunctions:SetScale(Value)
end
}, "Slider")
SettingsSection:Keybind({
Name = "Interface Keybind",
Blacklist = false,
Default = SavedKeybind,
OnBinded = function(Bind)
WindowFunctions:SetKeybind(Bind)
ShowKeybindNotification(tostring(Bind.Name))
end
}, "Keybind")
end
end
end
R["Wave/UserInterface/Imports/Settings/InsertThemeSettings.lua"] = function(...)
return function(Requirements)
local WindowFunctions = Requirements.WindowFunctions
local WaveLibraryUI = Requirements.WaveLibraryUI
local WaveLibrary = Requirements.WaveLibrary
local TabFunctions = Requirements.TabFunctions
local ThemeColorSchemes = Requirements.ThemeColorSchemes
local ThemeTemplates = Requirements.ThemeTemplates
local PerformanceModes = Requirements.PerformanceModes
local ThemeUtility = Requirements.ThemeUtility
local Themes = Requirements.Themes
local Subtitle = Requirements.Subtitle
local Exit = Requirements.Exit
local Minimize = Requirements.Minimize
local function GetThemeFilePath()
return WaveLibrary.Folder .. "/settings/startup/ThemeSaved.wave"
end
local function GetThemeFolderPath()
return WaveLibrary.Folder .. "/settings/themes"
end
local function GetBackupFolderPath()
return GetThemeFolderPath() .. "/backups"
end
local function EnsureFolderExists(Path)
if not isfolder(Path) then
makefolder(Path)
end
end
local function EnsureThemeFoldersExist()
EnsureFolderExists(WaveLibrary.Folder .. "/settings")
EnsureFolderExists(WaveLibrary.Folder .. "/settings/startup")
EnsureFolderExists(GetThemeFolderPath())
end
function WindowFunctions:GetThemeNames()
local Names = {}
for ThemeName, _ in pairs(Themes) do
table.insert(Names, ThemeName)
end
return Names
end
function WindowFunctions:GetTheme(ThemeName)
if ThemeName == "Glass" then
ThemeName = "Cherry" -- the Glass theme mirrors Cherry
end
return Themes[ThemeName] or Themes.Default
end
function WindowFunctions:GetCurrentTheme()
return CurrentTheme
end
function WindowFunctions:GetThemeAttribute(ThemeName, Attribute)
return self:GetTheme(ThemeName)[Attribute]
end
function WindowFunctions:GetCurrentThemeAttribute(Attribute)
return self:GetTheme(self:GetCurrentTheme())[Attribute]
end
function WindowFunctions:CreateCustomTheme(ThemeSettings)
if not ThemeSettings then
return false
end
for Key, Value in pairs(Themes.Default) do
if ThemeSettings[Key] == nil then
ThemeSettings[Key] = Value
end
end
Themes.Custom = ThemeSettings
if CurrentTheme == "Custom" then
self:ApplyTheme("Custom")
end
return true
end
function WindowFunctions:ExportTheme(ThemeName)
local Theme = Themes[ThemeName] or Themes.Custom
return Services.HttpService:JSONEncode(Theme)
end
function WindowFunctions:ImportTheme(ThemeData, ThemeName)
local Success, DecodedTheme = pcall(Services.HttpService.JSONDecode, Services.HttpService, ThemeData)
if not Success then
return false, "Invalid JSON format"
end
if not DecodedTheme.Background or not DecodedTheme.TextPrimary then
return false, "Invalid theme structure"
end
ThemeName = ThemeName or "Custom"
Themes[ThemeName] = DecodedTheme
return true, "Theme imported successfully"
end
function WindowFunctions:GenerateColorScheme(SchemeType, BaseColor)
if not ThemeColorSchemes[SchemeType] then
return false
end
local NewColors = ThemeColorSchemes[SchemeType](BaseColor)
for ColorName, ColorValue in pairs(NewColors) do
if Themes.Custom[ColorName] then
Themes.Custom[ColorName] = ColorValue
end
end
return true
end
function WindowFunctions:ApplyTemplate(TemplateName)
local Template = ThemeTemplates[TemplateName]
if not Template then
return false
end
for Property, Value in pairs(Template) do
Themes.Custom[Property] = Value
end
return true
end
function WindowFunctions:SetPerformanceMode(ModeName)
local Mode = PerformanceModes[ModeName]
if not Mode then
return false
end
for Setting, Value in pairs(Mode) do
Themes.Custom[Setting] = Value
end
return true
end
function WindowFunctions:GenerateRandomTheme()
local function RandomColor()
return Color3.fromRGB(math.random(0, 255), math.random(0, 255), math.random(0, 255))
end
local function RandomBool()
return math.random() > 0.5
end
Themes.Custom.Background = RandomColor()
Themes.Custom.Foreground = RandomColor()
Themes.Custom.AccentPrimary = RandomColor()
Themes.Custom.AccentSecondary = RandomColor()
Themes.Custom.TextPrimary = RandomColor()
Themes.Custom.CornerRadius = math.random(0, 25)
Themes.Custom.ShadowSize = math.random(0, 50)
Themes.Custom.GlowSize = math.random(0, 30)
Themes.Custom.AnimationSpeed = math.random(10, 50) / 100
Themes.Custom.GradientEnabled = RandomBool()
return true
end
function WindowFunctions:ApplyUICorners(Parent, CornerRadius)
for _, Child in ipairs(Parent:GetDescendants()) do
if Child:IsA("UICorner") and not Child:FindFirstAncestor("CustomElementPanel") and not Child:FindFirstAncestor("CheckBoxButton") then
Child.CornerRadius = UDim.new(0, CornerRadius)
end
end
end
function WindowFunctions:ApplyUIStrokes(Parent, Theme)
for _, Child in ipairs(Parent:GetDescendants()) do
if Child:IsA("UIStroke") and Child.Name ~= "TabSwitcherUIStroke" and Child.Name ~= "MainFrameStroke" and Child.Name ~= "NameStroke" and not Child:FindFirstAncestor("CustomElementPanel") then
Child.Color = Theme.BorderColor
if not Child:FindFirstAncestor("CheckBoxButton") then
Child.Transparency = Theme.StrokeTransparency
end
Child.Thickness = Theme.StrokeThickness
end
end
end
function WindowFunctions:ApplyScrollbarStyling(Parent, Theme)
for _, Child in ipairs(Parent:GetDescendants()) do
if Child:IsA("ScrollingFrame") and not Child:FindFirstAncestor("CustomElementPanel") then
Child.ScrollBarImageColor3 = Theme.ScrollbarColor
Child.ScrollBarImageTransparency = Theme.ScrollbarTransparency
end
end
end
function WindowFunctions:ApplyTextStyling(Parent, Theme)
for _, Child in ipairs(Parent:GetDescendants()) do
if Child:FindFirstAncestor("CustomElementPanel") then
continue
end
if Child:GetAttribute("NoApplyTheme") then
continue
end
if Child:IsA("TextLabel") or Child:IsA("TextButton") or Child:IsA("TextBox") then
if Child.Name == "Title" or Child.Name == "ParagraphHeader" or Child.Name == "HeaderText" then
Child.TextColor3 = Theme.HeaderColor
Child.TextTransparency = Theme.HeaderTransparency
elseif Child:IsA("TextBox") then
Child.TextColor3 = Theme.InputFieldColor
if Child.Name ~= "HeaderInputSearchBox" and Child.Name ~= "SearchBox" then
Child.BackgroundTransparency = Theme.InputValueBackground or Theme.InputFieldTransparency
end
if Child.BackgroundTransparency < 1 then
Child.BackgroundColor3 = Theme.Foreground
end
if Child.PlaceholderText and Child.PlaceholderText ~= "" then
Child.PlaceholderColor3 = Theme.TextSecondary
end
else
if not Child.Name:find("Result_") then
Child.TextColor3 = Theme.TextPrimary
end
end
end
end
end
function WindowFunctions:ApplyImageStyling(Parent, Theme)
local ExcludedNames = {"Wallpaper", "OutputWallpaper", "InformationWallpaper", "ColorWheel", "Toggle", "ToggleButton", "ToggleHead", "TogglerHead", "Banner", "Headshot", "LinkIcon", "InfoIcon"}
for _, Child in ipairs(Parent:GetDescendants()) do
if Child:FindFirstAncestor("CustomElementPanel") then
continue
end
if Child:IsA("ImageLabel") or Child:IsA("ImageButton") then
local IsExcluded = false
for _, ExcludedName in ipairs(ExcludedNames) do
if Child.Name == ExcludedName then
IsExcluded = true
break
end
end
if not IsExcluded then
Child.ImageColor3 = Theme.TextSecondary
end
end
end
end
function WindowFunctions:ApplyComponentStyling(Parent, Theme)
local ComponentStyles = {
Toggle = Theme.ToggleColor,
CheckBoxButton = Theme.AccentPrimary,
TogglerHead = Theme.TogglerHeadColor,
SliderBar = Theme.SliderColor,
RangeBar = Theme.SliderColor,
SliderHead = Theme.SliderHeadColor,
Dropdown = Theme.DropdownColor,
Option = Theme.DropdownColor,
Button = Theme.ButtonColor,
InformationGroupHighlight = Theme.AccentPrimary,
TabSwitcherIndicator = Theme.AccentPrimary,
Sidebar = function(Child)
Child.BackgroundTransparency = Theme.SidebarTransparency
Child.BackgroundColor3 = Theme.SidebarColor
end,
Surface = function(Child)
Child.BackgroundColor3 = Theme.Surface
Child.BackgroundTransparency = Theme.SurfaceTransparency
end,
Section = Theme.Foreground,
Notification = Theme.NotificationColor,
ExternalStatus = Theme.StatusColor,
}
for _, Child in ipairs(Parent:GetDescendants()) do
if Child:IsA("GuiObject") and not Child:IsA("ScrollingFrame") and Child.BackgroundTransparency < 1 and not Child:FindFirstAncestor("CustomElementPanel") then
local Style = ComponentStyles[Child.Name]
if Style then
if type(Style) == "function" then
Style(Child)
elseif Child:IsA("ImageButton") and (Child.Name == "Toggle" or Child.Name == "TogglerHead" or Child.Name == "SliderBar" or Child.Name == "SliderHead") and not Child:FindFirstAncestor("CustomElementPanel") then
Child.ImageColor3 = Style
else
Child.BackgroundColor3 = Style
end
end
end
end
end
function WindowFunctions:ApplyGradients(Parent, Theme)
if not Theme.GradientEnabled then
return
end
for _, Child in ipairs(Parent:GetDescendants()) do
if Child.Name == "Background" and Child:IsA("GuiObject") and not Child:FindFirstAncestor("CustomElementPanel") then
local Gradient = Child:FindFirstChild("UIGradient")
if not Gradient then
Gradient = Instance.new("UIGradient")
Gradient.Parent = Child
end
Gradient.Color = ColorSequence.new(Theme.GradientColors)
Gradient.Rotation = Theme.GradientRotation
end
end
end
function WindowFunctions:ApplyWallpaper(Base, Theme)
local function ApplyWallpaperToElement(Element)
if Element then
Element.ImageColor3 = Theme.Background:Lerp(Color3.fromRGB(255, 255, 255), 0.2)
Element.ImageTransparency = Theme.WallpaperEnabled and Theme.WallpaperTransparency or 1
end
end
ApplyWallpaperToElement(Base:FindFirstChild("Wallpaper"))
local Terminal = Base:FindFirstChild("Terminal")
if Terminal then
ApplyWallpaperToElement(Terminal:FindFirstChild("OutputWallpaper"))
end
end
function WindowFunctions:ApplyShadows(Theme)
if not Maid.Shadows then
return
end
for _, Shadow in pairs(Maid.Shadows) do
Shadow.ImageTransparency = Theme.ShadowTransparency
end
end
function WindowFunctions:ApplyShadowGradients(Theme)
if not Maid.Shadows then
return
end
for _, Shadow in pairs(Maid.Shadows) do
if Shadow and typeof(Theme.GlowColor) == "ColorSequence" then
local ShadowGradient = Shadow:FindFirstChildWhichIsA("UIGradient") or Instance.new("UIGradient")
ShadowGradient.Color = Theme.GlowColor
ShadowGradient.Parent = Shadow
Shadow.ImageColor3 = Color3.fromRGB(255, 255, 255)
elseif Shadow then
if Shadow:FindFirstChildWhichIsA("UIGradient") then
Shadow:FindFirstChildWhichIsA("UIGradient"):Destroy()
end
Shadow.ImageColor3 = Theme.GlowColor
end
end
end
function WindowFunctions:ApplyPremiumGradients(Content, Theme)
if not Content then
return
end
for _, Element in pairs(Content:GetDescendants()) do
if Element:IsA("UIGradient") and Element.Parent.Name ~= "Execute" and not Element:FindFirstAncestor("CustomElementPanel") then
Element.Color = Theme.PremiumGradientColor
end
end
end
function WindowFunctions:ApplyControlButtons(Theme)
if not Exit or not Minimize then
return
end
Exit.BackgroundColor3 = Theme.ExitColor
Minimize.BackgroundColor3 = Theme.MinimizeColor
end
function WindowFunctions:ApplyMenuGameCards(GameCardFolder, Theme)
if not GameCardFolder then
return
end
for _, Card in pairs(GameCardFolder:GetChildren()) do
if not Card:IsA("GuiObject") then
continue
end
local GlowFrame = Card:FindFirstChild("GlowFrame")
if GlowFrame then
GlowFrame.BackgroundColor3 = Theme.MinimizeColor
end
end
end
function WindowFunctions:AlreadyExistantTheme()
local ThemeFile = GetThemeFilePath()
if isfile(ThemeFile) then
return readfile(ThemeFile)
end
return false
end
-- One-walk replacement for the chain of ApplyUICorners + ApplyUIStrokes +
-- ApplyScrollbarStyling + ApplyTextStyling + ApplyImageStyling +
-- ApplyComponentStyling + ApplyGradients on the same Base. Each of those
-- did a fresh Base:GetDescendants() and a FindFirstAncestor per element;
-- this folds them into one pass with a single ancestor check per element.
-- The standalone Apply* methods are kept for callers that re-style a
-- single subtree after the fact (e.g. dynamically added components).
function WindowFunctions:ApplyDescendantStyling(Base, Theme)
local CornerUDim = UDim.new(0, Theme.CornerRadius)
local GradientEnabled = Theme.GradientEnabled
local GradientColors = Theme.GradientColors
local GradientRotation = Theme.GradientRotation
local ExcludedImageNames = {
Wallpaper = true, OutputWallpaper = true, InformationWallpaper = true,
ColorWheel = true, Toggle = true, ToggleButton = true, ToggleHead = true,
TogglerHead = true, Banner = true, Headshot = true, LinkIcon = true, InfoIcon = true,
}
local ExcludedStrokeNames = {
TabSwitcherUIStroke = true, MainFrameStroke = true, NameStroke = true,
}
local ToggleImageNames = {
Toggle = true, TogglerHead = true, SliderBar = true, SliderHead = true,
}
local ComponentStyles = {
Toggle = Theme.ToggleColor,
CheckBoxButton = Theme.AccentPrimary,
TogglerHead = Theme.TogglerHeadColor,
SliderBar = Theme.SliderColor,
RangeBar = Theme.SliderColor,
SliderHead = Theme.SliderHeadColor,
Dropdown = Theme.DropdownColor,
Option = Theme.DropdownColor,
Button = Theme.ButtonColor,
InformationGroupHighlight = Theme.AccentPrimary,
TabSwitcherIndicator = Theme.AccentPrimary,
Sidebar = function(c)
c.BackgroundTransparency = Theme.SidebarTransparency
c.BackgroundColor3 = Theme.SidebarColor
end,
Surface = function(c)
c.BackgroundColor3 = Theme.Surface
c.BackgroundTransparency = Theme.SurfaceTransparency
end,
Section = Theme.Foreground,
Notification = Theme.NotificationColor,
ExternalStatus = Theme.StatusColor,
}
for _, Child in ipairs(Base:GetDescendants()) do
-- ONE ancestor check covers every handler below.
if Child:FindFirstAncestor("CustomElementPanel") then continue end
local cn = Child.ClassName
local name = Child.Name
if cn == "UICorner" then
if not Child:FindFirstAncestor("CheckBoxButton") then
Child.CornerRadius = CornerUDim
end
elseif cn == "UIStroke" then
if not ExcludedStrokeNames[name] then
Child.Color = Theme.BorderColor
if not Child:FindFirstAncestor("CheckBoxButton") then
Child.Transparency = Theme.StrokeTransparency
end
Child.Thickness = Theme.StrokeThickness
end
elseif cn == "ScrollingFrame" then
Child.ScrollBarImageColor3 = Theme.ScrollbarColor
Child.ScrollBarImageTransparency = Theme.ScrollbarTransparency
-- ScrollingFrame is also a GuiObject but original ApplyComponentStyling skipped it.
else
-- Text styling
local isTextClass = (cn == "TextLabel" or cn == "TextButton" or cn == "TextBox")
if isTextClass and not Child:GetAttribute("NoApplyTheme") then
if name == "Title" or name == "ParagraphHeader" or name == "HeaderText" then
Child.TextColor3 = Theme.HeaderColor
Child.TextTransparency = Theme.HeaderTransparency
elseif cn == "TextBox" then
Child.TextColor3 = Theme.InputFieldColor
if name ~= "HeaderInputSearchBox" and name ~= "SearchBox" then
Child.BackgroundTransparency = Theme.InputValueBackground or Theme.InputFieldTransparency
end
if Child.BackgroundTransparency < 1 then
Child.BackgroundColor3 = Theme.Foreground
end
if Child.PlaceholderText and Child.PlaceholderText ~= "" then
Child.PlaceholderColor3 = Theme.TextSecondary
end
else
if not name:find("Result_") then
Child.TextColor3 = Theme.TextPrimary
end
end
end
-- Image styling
if cn == "ImageLabel" or cn == "ImageButton" then
if not ExcludedImageNames[name] then
Child.ImageColor3 = Theme.TextSecondary
end
end
-- Component styling (any GuiObject with a name in our style table)
if Child:IsA("GuiObject") and Child.BackgroundTransparency < 1 then
local Style = ComponentStyles[name]
if Style then
if type(Style) == "function" then
Style(Child)
elseif cn == "ImageButton" and ToggleImageNames[name] then
Child.ImageColor3 = Style
else
Child.BackgroundColor3 = Style
end
end
end
end
-- Background gradients (separate filter, separate target — keep its own check)
if GradientEnabled and name == "Background" and Child:IsA("GuiObject") then
local Gradient = Child:FindFirstChild("UIGradient")
if not Gradient then
Gradient = Instance.new("UIGradient")
Gradient.Parent = Child
end
Gradient.Color = ColorSequence.new(GradientColors)
Gradient.Rotation = GradientRotation
end
end
end
function WindowFunctions:ApplyTheme(ThemeName)
-- Route through GetTheme so aliases (e.g. Glass -> Cherry) apply to the
-- actual rendered colours, not just GetCurrentThemeAttribute lookups.
local Theme = self:GetTheme(ThemeName)
CurrentTheme = ThemeName
local Base = WaveLibraryUI:FindFirstChild("Base")
if not Base then
return false
end
Base.BackgroundColor3 = Theme.Background
Base.BackgroundTransparency = Theme.BackgroundTransparency
if not Subtitle:GetAttribute("CustomSubtitle") then
local ApplySubtitle = "Build - " .. Utility:CheckHubStatus(WindowFunctions:GetCurrentThemeAttribute("AccentPrimary")) .. " | " .. GameLoading
Subtitle.Text = ApplySubtitle
end
local BaseUIStroke = Base:FindFirstChild("BaseUIStroke")
if BaseUIStroke then
BaseUIStroke.Transparency = Theme.StrokeTransparency
BaseUIStroke.Color = Theme.BorderColor
BaseUIStroke.Thickness = Theme.StrokeThickness
end
local BaseUICorner = Base:FindFirstChild("BaseUICorner")
if BaseUICorner then
BaseUICorner.CornerRadius = UDim.new(0, Theme.CornerRadius)
end
-- Single walk replaces 6 prior Base passes (UICorners + UIStrokes +
-- Scrollbar + Text + Image + Component + Gradient). Roughly 6x fewer
-- GetDescendants allocations and per-element ancestor checks at boot.
self:ApplyDescendantStyling(Base, Theme)
self:ApplyControlButtons(Theme)
self:ApplyWallpaper(Base, Theme)
self:ApplyShadows(Theme)
self:ApplyShadowGradients(Theme)
-- Sub-section property pokes only — their descendants are children of
-- Base, so the single walk above already covered them. (Removing the
-- 4-per-section recursive Apply* calls = 16 redundant tree walks gone.)
local Sidebar = Base:FindFirstChild("Sidebar")
if Sidebar then
Sidebar.BackgroundColor3 = Theme.SidebarColor
Sidebar.BackgroundTransparency = Theme.SidebarTransparency
end
local Content = Base:FindFirstChild("Content")
if Content then
-- UIGradient walk on Content's subtree, separate filter from the
-- background-gradient pass above, so keep it as its own call.
self:ApplyPremiumGradients(Content, Theme)
local ElementsScrolling = Content:FindFirstChild("Elements") and Content.Elements:FindFirstChild("ElementsScrolling")
if ElementsScrolling and ElementsScrolling:FindFirstChild("Middle") then
local GameCards = ElementsScrolling:FindFirstChild("Middle")
self:ApplyMenuGameCards(GameCards, Theme)
end
end
local BottomBar = Base:FindFirstChild("BottomBar")
if BottomBar then
BottomBar.BackgroundColor3 = Theme.Background
BottomBar.BackgroundTransparency = Theme.BackgroundTransparency
end
local Terminal = Base:FindFirstChild("Terminal")
if Terminal then
Terminal.BackgroundColor3 = Theme.Background
-- Keep the console solid (no see-through) while still following the
-- theme colour; it sits over the un-covered screen edge.
Terminal.BackgroundTransparency = 0
end
-- Top-right status bar (sibling of Base in WaveLibraryUI). FPS dot keeps
-- its own health colour; everything else follows the theme.
local StatusBar = WaveLibraryUI:FindFirstChild("WaveStatusBar")
if StatusBar then
StatusBar.BackgroundColor3 = Theme.Background
StatusBar.BackgroundTransparency = 0
local SBStroke = StatusBar:FindFirstChild("StatusStroke")
if SBStroke then
SBStroke.Color = Theme.BorderColor
SBStroke.Transparency = math.clamp(Theme.StrokeTransparency or 0.85, 0.55, 0.92)
end
for _, Element in ipairs(StatusBar:GetDescendants()) do
if Element.Name == "StatusValue" then
Element.TextColor3 = Theme.HeaderColor or Theme.TextPrimary
elseif Element.Name == "StatusMuted" then
Element.TextColor3 = Theme.TextSecondary
elseif Element.Name == "StatusDivider" then
Element.BackgroundColor3 = Theme.BorderColor
elseif Element.Name == "StatusChevron" then
Element.ImageColor3 = Theme.TextSecondary
elseif Element.Name == "StatusEyeIcon" then
Element.ImageColor3 = Theme.TextSecondary
end
end
end
-- Server browser panel (slide-out, sibling of Base): re-skin to the active theme.
if self.ServerBrowser and self.ServerBrowser.Theme then
pcall(function()
self.ServerBrowser:Theme()
end)
end
-- Dialog subtrees are children of Base; the single-walk above already
-- restyled their UICorners / Strokes / Text / Component children, so
-- no separate Dialog walks are needed.
if ThemeName ~= "Custom" then
pcall(function()
EnsureThemeFoldersExist()
writefile(GetThemeFilePath(), ThemeName)
end)
end
return true
end
function WindowFunctions:ApplyCurrentTheme()
self:ApplyTheme(self:AlreadyExistantTheme() or self:GetCurrentTheme() or "Cobalt")
end
function WindowFunctions:SaveTheme(ThemeName)
ThemeName = ThemeName or "Custom"
pcall(function()
EnsureThemeFoldersExist()
local ThemeData = self:ExportTheme(ThemeName)
writefile(GetThemeFolderPath() .. "/" .. ThemeName:lower() .. ".json", ThemeData)
end)
return true
end
function WindowFunctions:LoadTheme(ThemeName)
ThemeName = ThemeName or "Custom"
local Success = pcall(function()
local FilePath = GetThemeFolderPath() .. "/" .. ThemeName:lower() .. ".json"
if isfile(FilePath) then
local ThemeData = readfile(FilePath)
local ImportSuccess, Message = self:ImportTheme(ThemeData, ThemeName)
if ImportSuccess then
self:ApplyTheme(ThemeName)
return true
end
end
end)
return Success
end
function WindowFunctions:BackupThemes()
pcall(function()
EnsureFolderExists(GetBackupFolderPath())
local BackupData = {
Timestamp = os.time(),
Themes = Themes,
Version = "2.0"
}
local BackupJSON = Services.HttpService:JSONEncode(BackupData)
local BackupName = "theme_backup_" .. os.date("%Y%m%d_%H%M%S") .. ".json"
writefile(GetBackupFolderPath() .. "/" .. BackupName, BackupJSON)
end)
return true
end
function WindowFunctions:RestoreThemes()
local Success = pcall(function()
local BackupFolder = GetBackupFolderPath()
if isfolder(BackupFolder) then
local BackupFiles = listfiles(BackupFolder)
if #BackupFiles > 0 then
local LatestBackup = BackupFiles[#BackupFiles]
local BackupData = readfile(LatestBackup)
local DecodedBackup = Services.HttpService:JSONDecode(BackupData)
Themes = DecodedBackup.Themes
return true
end
end
end)
return Success
end
function WindowFunctions:LoadStartupTheme()
pcall(function()
local ThemeFile = GetThemeFilePath()
if isfile(ThemeFile) then
local SavedTheme = readfile(ThemeFile)
for ThemeName, _ in pairs(Themes) do
if ThemeName == SavedTheme then
self:ApplyTheme(SavedTheme)
break
end
end
end
end)
end
function TabFunctions:InsertThemeSettings(Side)
local SettingsSection = TabFunctions:Section({Side = Side})
SettingsSection:Header({Name = "Theme Settings"})
local ThemeNames = WindowFunctions:GetThemeNames()
local ThemeDropdown = SettingsSection:Dropdown({
Name = "Theme Preset",
IgnoreConfig = true,
Multi = false,
Required = true,
Search = true,
Premium = true,
Options = ThemeNames,
Default = "Default",
Callback = function(ThemeName)
WindowFunctions:ApplyTheme(ThemeName)
end
}, "ThemeSelector")
SettingsSection:Divider()
SettingsSection:Header({Name = "Theme Customization"})
local function SwitchToCustomTheme()
if WindowFunctions:GetCurrentTheme() ~= "Custom" then
ThemeDropdown:UpdateSelection("Custom")
end
end
local function CreateCategoryDropdown()
return SettingsSection:Dropdown({
Name = "Customization Category",
IgnoreConfig = true,
Multi = false,
Required = true,
Options = {"Colors", "Layout", "Effects", "Typography", "Advanced", "ImportExport"},
Default = "Colors",
Callback = function(Category)
for Flag, Object in pairs(WindowFunctions:ReturnFeatures()) do
if type(Flag) == "string" and Object.SetVisibility and Flag:find("Custom_") then
local CategoryPrefix = "Custom_" .. Category
Object:SetVisibility(Flag:find(CategoryPrefix) ~= nil)
end
end
end
}, "ThemeCustomizationTab")
end
local function CreateColorPicker(Name, ThemeKey, Flag)
return SettingsSection:ColorPicker({
Name = Name,
IgnoreConfig = true,
Default = Themes.Default[ThemeKey],
Callback = function(Color)
SwitchToCustomTheme()
Themes.Custom[ThemeKey] = Color
WindowFunctions:ApplyTheme("Custom")
end
}, Flag):SetVisibility(false)
end
local function CreateLayoutSlider(Name, ThemeKey, Min, Max, DisplayMethod, Flag)
return SettingsSection:Slider({
Name = Name,
Default = Themes.Default[ThemeKey],
IgnoreConfig = true,
Minimum = Min,
Maximum = Max,
DisplayMethod = DisplayMethod,
Callback = function(Value)
SwitchToCustomTheme()
Themes.Custom[ThemeKey] = Value
WindowFunctions:ApplyTheme("Custom")
end
}, Flag):SetVisibility(false)
end
local function CreateEffectSlider(Name, ThemeKey, Min, Max, DisplayMethod, Flag)
return CreateLayoutSlider(Name, ThemeKey, Min, Max, DisplayMethod, Flag)
end
local function CreateToggle(Name, ThemeKey, Flag, ApplyTheme)
return SettingsSection:Toggle({
Name = Name,
IgnoreConfig = true,
IgnoreDefault = true,
Default = Themes.Default[ThemeKey],
Callback = function(Value)
if ApplyTheme then
SwitchToCustomTheme()
end
Themes.Custom[ThemeKey] = Value
if ApplyTheme then
WindowFunctions:ApplyTheme("Custom")
end
end
}, Flag):SetVisibility(false)
end
local function CreateDropdown(Name, ThemeKey, Options, Flag)
return SettingsSection:Dropdown({
Name = Name,
Multi = false,
Required = true,
Options = Options,
Default = Themes.Default[ThemeKey],
IgnoreConfig = true,
Callback = function(Value)
SwitchToCustomTheme()
Themes.Custom[ThemeKey] = Value
WindowFunctions:ApplyTheme("Custom")
end
}, Flag):SetVisibility(false)
end
local CategoryTabs = CreateCategoryDropdown()
local ColorPickers = {
Background = CreateColorPicker("Background Color", "Background", "Custom_Colors_Background"),
Foreground = CreateColorPicker("Foreground Color", "Foreground", "Custom_Colors_Foreground"),
Surface = CreateColorPicker("Surface Color", "Surface", "Custom_Colors_Surface"),
TextPrimary = CreateColorPicker("Primary Text Color", "TextPrimary", "Custom_Colors_TextPrimary"),
TextSecondary = CreateColorPicker("Secondary Text Color", "TextSecondary", "Custom_Colors_TextSecondary"),
TextDisabled = CreateColorPicker("Disabled Text Color", "TextDisabled", "Custom_Colors_TextDisabled"),
AccentPrimary = CreateColorPicker("Primary Accent Color", "AccentPrimary", "Custom_Colors_AccentPrimary"),
AccentSecondary = CreateColorPicker("Secondary Accent Color", "AccentSecondary", "Custom_Colors_AccentSecondary"),
AccentTertiary = CreateColorPicker("Tertiary Accent Color", "AccentTertiary", "Custom_Colors_AccentTertiary"),
SuccessColor = CreateColorPicker("Success Color", "SuccessColor", "Custom_Colors_SuccessColor"),
WarningColor = CreateColorPicker("Warning Color", "WarningColor", "Custom_Colors_WarningColor"),
ErrorColor = CreateColorPicker("Error Color", "ErrorColor", "Custom_Colors_ErrorColor"),
InfoColor = CreateColorPicker("Info Color", "InfoColor", "Custom_Colors_InfoColor"),
ShadowColor = CreateColorPicker("Shadow Color", "ShadowColor", "Custom_Colors_ShadowColor"),
HeaderColor = CreateColorPicker("Header Color", "HeaderColor", "Custom_Colors_HeaderColor"),
SidebarColor = CreateColorPicker("Sidebar Color", "SidebarColor", "Custom_Colors_SidebarColor"),
BorderColor = CreateColorPicker("Border Color", "BorderColor", "Custom_Colors_BorderColor"),
NotificationColor = CreateColorPicker("Notification Color", "NotificationColor", "Custom_Colors_NotificationColor"),
StatusColor = CreateColorPicker("Status Color", "StatusColor", "Custom_Colors_StatusColor"),
DialogColor = CreateColorPicker("Dialog Color", "DialogColor", "Custom_Colors_DialogColor"),
ButtonColor = CreateColorPicker("Button Color", "ButtonColor", "Custom_Colors_ButtonColor"),
ToggleColor = CreateColorPicker("Toggle Color", "ToggleColor", "Custom_Colors_ToggleColor"),
TogglerHeadColor = CreateColorPicker("Toggle Head Color", "TogglerHeadColor", "Custom_Colors_TogglerHeadColor"),
SliderColor = CreateColorPicker("Slider Color", "SliderColor", "Custom_Colors_SliderColor"),
SliderHeadColor = CreateColorPicker("Slider Head Color", "SliderHeadColor", "Custom_Colors_SliderHeadColor"),
DropdownColor = CreateColorPicker("Dropdown Color", "DropdownColor", "Custom_Colors_DropdownColor"),
InputFieldColor = CreateColorPicker("Input Field Color", "InputFieldColor", "Custom_Colors_InputFieldColor"),
ScrollbarColor = CreateColorPicker("Scrollbar Color", "ScrollbarColor", "Custom_Colors_ScrollbarColor"),
SelectionColor = CreateColorPicker("Selection Color", "SelectionColor", "Custom_Colors_SelectionColor"),
HoverColor = CreateColorPicker("Hover Color", "HoverColor", "Custom_Colors_HoverColor"),
ActiveColor = CreateColorPicker("Active Color", "ActiveColor", "Custom_Colors_ActiveColor"),
FocusColor = CreateColorPicker("Focus Color", "FocusColor", "Custom_Colors_FocusColor"),
DisabledOverlay = CreateColorPicker("Disabled Overlay Color", "DisabledOverlay", "Custom_Colors_DisabledOverlay"),
ParticleColor = CreateColorPicker("Particle Color", "ParticleColor", "Custom_Colors_ParticleColor"),
MinimizeColor = CreateColorPicker("Minimize Button Color", "MinimizeColor", "Custom_Colors_MinimizeColor"),
ExitColor = CreateColorPicker("Exit Button Color", "ExitColor", "Custom_Colors_ExitColor")
}
local LayoutSliders = {
CornerRadius = CreateLayoutSlider("Corner Radius", "CornerRadius", 0, 25, "Round", "Custom_Layout_CornerRadius"),
BackgroundTransparency = CreateLayoutSlider("Background Transparency", "BackgroundTransparency", 0, 1, "Hundredths", "Custom_Layout_BackgroundTransparency"),
SurfaceTransparency = CreateLayoutSlider("Surface Transparency", "SurfaceTransparency", 0, 1, "Hundredths", "Custom_Layout_SurfaceTransparency"),
StrokeTransparency = CreateLayoutSlider("Stroke Transparency", "StrokeTransparency", 0, 1, "Hundredths", "Custom_Layout_StrokeTransparency"),
StrokeThickness = CreateLayoutSlider("Stroke Thickness", "StrokeThickness", 0, 5, "Round", "Custom_Layout_StrokeThickness"),
HeaderTransparency = CreateLayoutSlider("Header Transparency", "HeaderTransparency", 0, 1, "Hundredths", "Custom_Layout_HeaderTransparency"),
SidebarTransparency = CreateLayoutSlider("Sidebar Transparency", "SidebarTransparency", 0, 1, "Hundredths", "Custom_Layout_SidebarTransparency"),
InputFieldTransparency = CreateLayoutSlider("Input Field Transparency", "InputFieldTransparency", 0, 1, "Hundredths", "Custom_Layout_InputFieldTransparency"),
ScrollbarTransparency = CreateLayoutSlider("Scrollbar Transparency", "ScrollbarTransparency", 0, 1, "Hundredths", "Custom_Layout_ScrollbarTransparency"),
HoverTransparency = CreateLayoutSlider("Hover Transparency", "HoverTransparency", 0, 1, "Hundredths", "Custom_Layout_HoverTransparency"),
DisabledTransparency = CreateLayoutSlider("Disabled Transparency", "DisabledTransparency", 0, 1, "Hundredths", "Custom_Layout_DisabledTransparency"),
WallpaperTransparency = CreateLayoutSlider("Wallpaper Transparency", "WallpaperTransparency", 0, 1, "Hundredths", "Custom_Layout_WallpaperTransparency")
}
local EffectsSliders = {
ShadowTransparency = CreateEffectSlider("Shadow Transparency", "ShadowTransparency", 0, 1, "Hundredths", "Custom_Effects_ShadowTransparency"),
GlowTransparency = CreateEffectSlider("Glow Transparency", "GlowTransparency", 0, 1, "Hundredths", "Custom_Effects_GlowTransparency"),
ShadowSize = CreateEffectSlider("Shadow Size", "ShadowSize", 0, 50, "Round", "Custom_Effects_ShadowSize"),
GlowSize = CreateEffectSlider("Glow Size", "GlowSize", 0, 50, "Round", "Custom_Effects_GlowSize"),
AnimationSpeed = CreateEffectSlider("Animation Speed", "AnimationSpeed", 0.05, 1, "Hundredths", "Custom_Effects_AnimationSpeed"),
BlurIntensity = CreateEffectSlider("Blur Intensity", "BlurIntensity", 0, 100, "Round", "Custom_Effects_BlurIntensity"),
NoiseScale = CreateEffectSlider("Noise Scale", "NoiseScale", 10, 200, "Round", "Custom_Effects_NoiseScale"),
NoiseTransparency = CreateEffectSlider("Noise Transparency", "NoiseTransparency", 0, 1, "Hundredths", "Custom_Effects_NoiseTransparency"),
ParticleCount = CreateEffectSlider("Particle Count", "ParticleCount", 0, 100, "Round", "Custom_Effects_ParticleCount"),
GradientRotation = CreateEffectSlider("Gradient Rotation", "GradientRotation", 0, 360, "Round", "Custom_Effects_GradientRotation")
}
local EffectsToggles = {
WallpaperEnabled = CreateToggle("Enable Wallpaper", "WallpaperEnabled", "Custom_Effects_WallpaperEnabled", false),
GradientEnabled = CreateToggle("Enable Gradient", "GradientEnabled", "Custom_Effects_GradientEnabled", true),
NoiseEnabled = CreateToggle("Enable Noise", "NoiseEnabled", "Custom_Effects_NoiseEnabled", true),
ParticlesEnabled = CreateToggle("Enable Particles", "ParticlesEnabled", "Custom_Effects_ParticlesEnabled", true)
}
local EffectsDropdowns = {
WallpaperBlending = CreateDropdown("Wallpaper Blending", "WallpaperBlending", {"Normal", "Multiply", "Overlay", "Screen", "SoftLight", "HardLight"}, "Custom_Effects_WallpaperBlending")
}
local TypographySliders = {
FontSize = CreateLayoutSlider("Font Size", "FontSize", 8, 24, "Round", "Custom_Typography_FontSize"),
LineHeight = CreateLayoutSlider("Line Height", "LineHeight", 1, 3, "Tenths", "Custom_Typography_LineHeight"),
LetterSpacing = CreateLayoutSlider("Letter Spacing", "LetterSpacing", -2, 5, "Tenths", "Custom_Typography_LetterSpacing")
}
local TypographyDropdowns = {
FontFamily = CreateDropdown("Font Family", "FontFamily", {"Inter", "Arial", "Helvetica", "Roboto", "Open Sans", "Source Sans Pro", "Lato", "Nunito", "Poppins", "Ubuntu", "JetBrains Mono", "Roboto Mono", "Courier New", "Comic Sans MS", "Segoe UI"}, "Custom_Typography_FontFamily"),
FontWeight = CreateDropdown("Font Weight", "FontWeight", {"Thin", "Light", "Regular", "Medium", "SemiBold", "Bold", "ExtraBold", "Black"}, "Custom_Typography_FontWeight")
}
local TypographyToggles = {
AntiAliasing = CreateToggle("Anti-Aliasing", "AntiAliasing", "Custom_Typography_AntiAliasing", false),
SubPixelRendering = CreateToggle("Sub-Pixel Rendering", "SubPixelRendering", "Custom_Typography_SubPixelRendering", false)
}
local AdvancedDropdowns = {
ThemeVariant = CreateDropdown("Theme Variant", "ThemeVariant", {"Auto", "Light", "Dark"}, "Custom_Advanced_ThemeVariant"),
AccentColorSource = CreateDropdown("Accent Color Source", "AccentColorSource", {"Manual", "System", "Auto"}, "Custom_Advanced_AccentColorSource")
}
local AdvancedToggles = {
AutoDarkMode = CreateToggle("Auto Dark Mode", "AutoDarkMode", "Custom_Advanced_AutoDarkMode", true)
}
local UtilityButtons = {
SaveTheme = SettingsSection:Button({
Name = "Save Custom Theme",
Callback = function()
if WindowFunctions:SaveTheme("Custom") then
WindowFunctions:Notify({
Title = "Theme Settings",
Description = "Custom theme saved successfully!",
Lifetime = 3
})
end
end
}, "Custom_ImportExport_SaveTheme"):SetVisibility(false),
ExportTheme = SettingsSection:Button({
Name = "Copy Theme to Clipboard",
Callback = function()
pcall(function()
local ThemeData = WindowFunctions:ExportTheme(WindowFunctions:GetCurrentTheme())
setclipboard(ThemeData)
WindowFunctions:Notify({
Title = "Theme Settings",
Description = "Theme data copied to clipboard!",
Lifetime = 3
})
end)
end
}, "Custom_ImportExport_ExportTheme"):SetVisibility(false),
RandomTheme = SettingsSection:Button({
Name = "Generate Random Theme",
Callback = function()
SwitchToCustomTheme()
WindowFunctions:GenerateRandomTheme()
WindowFunctions:ApplyTheme("Custom")
WindowFunctions:Notify({
Title = "Theme Settings",
Description = "Random theme generated!",
Lifetime = 3
})
end
}, "Custom_ImportExport_RandomTheme"):SetVisibility(false),
ResetTheme = SettingsSection:Button({
Name = "Reset to Default",
Callback = function()
Themes.Custom = table.clone(Themes.Default)
WindowFunctions:ApplyTheme("Custom")
WindowFunctions:Notify({
Title = "Theme Settings",
Description = "Theme reset to default values!",
Lifetime = 3
})
end
}, "Custom_ImportExport_ResetTheme"):SetVisibility(false)
}
WindowFunctions:Initialize()
WindowFunctions:ApplyCurrentTheme()
end
end
end
R["Wave/UserInterface/Imports/Terminal/TerminalModule.lua"] = function(...)
local TerminalModule = {}
TerminalModule.__index = TerminalModule
local TerminalConstants = {
DefaultWidth = 0.375,
MinWidth = 250,
MaxWidth = 1920,
SnapRange = 20,
ToggleDebounceTime = 0.3,
FadeOutDelay = 0.2,
MessageGroupingWindow = 2,
LogTextSize = 13,
HeaderTextSize = 18,
IconSize = 15,
ContextMenuWidth = 160,
ContextMenuHeight = 90,
ContextMenuItemHeight = 30,
DividerThickness = 1,
CornerRadius = 10,
ContentTopOffset = 80,
ScrollBarThickness = 1
}
local TweenSettings = {
DefaultTransparency = 0.9,
HoverTransparency = 0.85,
ActiveTransparency = 0,
EasingStyle = Enum.EasingStyle.Sine
}
local OutputSettings = {
ShowTimestamps = true,
ShowIcons = true,
SupportTables = true,
AutoScroll = true,
MaxTableDepth = 3,
TruncateStrings = 50,
MaxTableSize = 100,
MaxLogEntries = 100
}
function TerminalModule.new(Parent, TopbarFolder, WaveLibrary, WaveLibraryUI, WindowFunctions)
local self = setmetatable({}, TerminalModule)
self.ResizingOutput = false
self.DefaultOutputWidth = 0
self.InitialMouseX = 0
self.InitialOutputWidth = 0
self.InitialLeftEdge = 0
self.TerminalOffset = 0
self.ToggleDebounce = false
self.PrintLogs = true
self.LastMessage = nil
self.LastMessageCount = 0
self.LastOutputResult = nil
self.LastMessageTime = 0
self:CreateUI(Parent, TopbarFolder, WaveLibrary, WaveLibraryUI)
self:SetupEventHandlers(WindowFunctions)
self:InitializeLogging(WindowFunctions)
return self
end
function TerminalModule:CreateUI(Parent, TopbarFolder, WaveLibrary, WaveLibraryUI)
self.Terminal = self:CreateTerminalFrame(Parent, WaveLibrary)
self.ShadowContainer = self:CreateShadow(Parent, WaveLibrary, WaveLibraryUI)
self.OutputTab = self:CreateOutputTab()
self.OutputTabDivider = self:CreateDivider(UDim2.new(0.5, 0, 0, 42.5), UDim2.new(0, 48, 0, 1), 0.5)
self.ClearLogsButton = self:CreateIconButton("ClearLogsIcon", Assets.IconClearLogs, UDim2.fromScale(0.935, 0.05))
self.StopLogsButton = self:CreateIconButton("StopLogsIcon", Assets.IconStopLogs, UDim2.fromScale(0.85, 0.05))
self.DividerInteract = self:CreateDividerInteract()
self.OutputContent = self:CreateScrollingFrame()
self.OutputWallpaper = self:CreateWallpaper()
self.OutputUIScale = self:CreateUIScale()
self.OutputUICorner = self:CreateUICorner()
self.OutputUIStroke = self:CreateUIStroke()
self.OutputDivider = self:CreateDivider(UDim2.new(0, 0, 0, 63), UDim2.new(1, 0, 0, 1), 0)
self.OutputUIListLayout = self:CreateListLayout()
self.OutputIcon = self:CreateTopbarIcon(TopbarFolder)
self.OutputInteract = self:CreateTopbarInteract()
self.DefaultOutputWidth = self.Terminal.AbsoluteSize.X
end
-- Docks an optimized model viewport inside the terminal panel. Returns the
-- viewport handle (SetModel / Clear / GetCamera / SetAutoRotate / ...).
function TerminalModule:CreateModelViewport(Options)
Options = Options or {}
if self.ModelViewport then
if Options.Model or Options.Object then
self.ModelViewport:SetModel(Options.Model or Options.Object)
end
self.ModelViewport:SetVisible(true)
return self.ModelViewport
end
local BuildViewport = Utility:LoadFile("Wave/UserInterface/Imports/Terminal/ViewportEngine.lua")
if not BuildViewport then
return nil
end
local Holder = Instance.new("Frame")
Holder.Name = "TerminalModelViewport"
Holder.BackgroundTransparency = 1
if Options.Inline == false then
-- overlay the whole content area
Holder.Position = UDim2.new(0, 14, 0, 74)
Holder.Size = UDim2.new(1, -28, 1, -88)
Holder.ZIndex = 12
Holder.Parent = self.Terminal
else
-- flow inline with the logs, so log lines appear above and below it
Holder.Size = UDim2.new(1, -40, 0, Options.Height or 190)
Holder.LayoutOrder = Options.LayoutOrder or 0
Holder.Parent = self.OutputContent
end
self.ModelViewport = BuildViewport(Holder, Options)
return self.ModelViewport
end
function TerminalModule:HideModelViewport()
if self.ModelViewport then
self.ModelViewport:SetVisible(false)
end
end
function TerminalModule:CreateTerminalFrame(Parent, WaveLibrary)
local Terminal = Instance.new("Frame")
Terminal.Name = "Terminal"
Terminal.AnchorPoint = Vector2.new(0.5, 0.5)
Terminal.Size = UDim2.new(TerminalConstants.DefaultWidth, 0, 1, 0)
Terminal.Position = Utility:SaveOpened() and UDim2.new(1.2, 0, 0.5, 0) or UDim2.new(1, 0, 0.5, 0)
Terminal.BackgroundColor3 = Color3.fromRGB(15, 15, 15)
-- Solid: the terminal sits over the screen edge and is mostly empty, so any
-- see-through reads as washed-out. The theme sets the real colour later.
Terminal.BackgroundTransparency = 0
Terminal.BorderColor3 = Color3.fromRGB(0, 0, 0)
Terminal.BorderSizePixel = 0
Terminal.Parent = Parent
Terminal.ZIndex = -5
Terminal.Visible = Utility:SaveOpened()
return Terminal
end
function TerminalModule:CreateShadow(Base, WaveLibrary, WaveLibraryUI)
-- Same glow as the main window (registered in Maid.Shadows, so its
-- transparency follows the theme via WindowFunctions:ApplyShadows).
return WaveLibrary:CreateShadow({
Object = WaveLibraryUI,
ReplicateVisible = {Base, self.Terminal},
ObjectReplication = self.Terminal,
Gradient = {
Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.new(0, 0, 0.2)),
ColorSequenceKeypoint.new(1, Color3.new(0.4, 0.6, 1))
})
}
})
end
function TerminalModule:CreateOutputTab()
local OutputTab = Instance.new("TextLabel")
OutputTab.Name = "OutputTab"
OutputTab.FontFace = Font.new(Assets.InterFont, Enum.FontWeight.Bold)
OutputTab.RichText = true
OutputTab.Text = "Terminal"
OutputTab.TextColor3 = Color3.fromRGB(255, 255, 255)
OutputTab.TextSize = TerminalConstants.HeaderTextSize
OutputTab.TextTransparency = 0.5
OutputTab.TextTruncate = Enum.TextTruncate.SplitWord
OutputTab.TextXAlignment = Enum.TextXAlignment.Center
OutputTab.TextYAlignment = Enum.TextYAlignment.Top
OutputTab.AnchorPoint = Vector2.new(0, 0.5)
OutputTab.AutomaticSize = Enum.AutomaticSize.Y
OutputTab.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
OutputTab.BackgroundTransparency = 1
OutputTab.BorderColor3 = Color3.fromRGB(0, 0, 0)
OutputTab.BorderSizePixel = 0
OutputTab.Position = UDim2.fromScale(0.05, 0.05)
OutputTab.Size = UDim2.fromScale(0.9, 0)
OutputTab.Parent = self.Terminal
OutputTab.ZIndex = 155
return OutputTab
end
function TerminalModule:CreateDivider(Position, Size, AnchorPoint)
local Divider = Instance.new("Frame")
Divider.Name = "OutputDivider"
Divider.AnchorPoint = Vector2.new(AnchorPoint, 0)
Divider.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Divider.BackgroundTransparency = TweenSettings.DefaultTransparency
Divider.BorderColor3 = Color3.fromRGB(0, 0, 0)
Divider.BorderSizePixel = 0
Divider.Position = Position
Divider.Size = Size
Divider.Parent = self.Terminal
return Divider
end
function TerminalModule:CreateIconButton(Name, ImageAsset, Position)
local Button = Instance.new("ImageButton")
Button.Name = Name
Button.ZIndex = 5
Button.Image = ImageAsset
Button.ImageTransparency = 0.7
Button.AnchorPoint = Vector2.new(1, 0.5)
Button.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Button.BackgroundTransparency = 1
Button.BorderColor3 = Color3.fromRGB(0, 0, 0)
Button.BorderSizePixel = 0
Button.Position = Position
Button.Size = UDim2.fromOffset(TerminalConstants.IconSize, TerminalConstants.IconSize)
Button.Parent = self.Terminal
Button.Visible = true
return Button
end
function TerminalModule:CreateDividerInteract()
local Interact = Instance.new("TextButton")
Interact.Name = "DividerOutputInteract"
Interact.AnchorPoint = Vector2.new(0.5, 0)
Interact.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Interact.BackgroundTransparency = 1
Interact.BorderColor3 = Color3.fromRGB(0, 0, 0)
Interact.BorderSizePixel = 0
Interact.FontFace = Font.new("rbxasset://fonts/families/SourceSansPro.json")
Interact.Position = UDim2.fromScale(1, 0)
Interact.Size = UDim2.new(0, 5, 1, 0)
Interact.Text = ""
Interact.TextColor3 = Color3.fromRGB(0, 0, 0)
Interact.TextSize = 14
Interact.Parent = self.Terminal
return Interact
end
function TerminalModule:CreateScrollingFrame()
local Content = Instance.new("ScrollingFrame")
Content.Name = "Content"
Content.AnchorPoint = Vector2.new(1, 0)
Content.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Content.BackgroundTransparency = 1
Content.BorderColor3 = Color3.fromRGB(0, 0, 0)
Content.BorderSizePixel = 0
Content.Position = UDim2.new(1, 0, 0, TerminalConstants.ContentTopOffset)
Content.Size = UDim2.new(1, 0, 1, -TerminalConstants.ContentTopOffset)
Content.CanvasSize = UDim2.new(0, 0, 0, 0)
Content.ScrollBarThickness = TerminalConstants.ScrollBarThickness
Content.ScrollBarImageTransparency = 0.5
Content.Parent = self.Terminal
return Content
end
function TerminalModule:CreateWallpaper()
local Wallpaper = Instance.new("ImageLabel")
Wallpaper.Name = "OutputWallpaper"
Wallpaper.Image = Assets.StyleOneWallpaper
Wallpaper.Size = UDim2.new(1, 0, 1, 0)
Wallpaper.Position = UDim2.new(0, 0, 0, 0)
Wallpaper.BackgroundTransparency = 1
Wallpaper.ImageTransparency = 0.65
Wallpaper.ImageColor3 = Color3.fromRGB(32, 32, 32)
Wallpaper.ScaleType = Enum.ScaleType.Crop
Wallpaper.Parent = self.Terminal
local Corner = Instance.new("UICorner")
Corner.Name = "OutputWallpaperUICorner"
Corner.CornerRadius = UDim.new(0, TerminalConstants.CornerRadius)
Corner.Parent = Wallpaper
return Wallpaper
end
function TerminalModule:CreateUIScale()
local Scale = Instance.new("UIScale")
Scale.Name = "OutputUIScale"
Scale.Parent = self.Terminal
return Scale
end
function TerminalModule:CreateUICorner()
local Corner = Instance.new("UICorner")
Corner.Name = "OutputUICorner"
Corner.CornerRadius = UDim.new(0, TerminalConstants.CornerRadius)
Corner.Parent = self.Terminal
return Corner
end
function TerminalModule:CreateUIStroke()
local Stroke = Instance.new("UIStroke")
Stroke.Name = "OutputUIStroke"
Stroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
Stroke.Color = Color3.fromRGB(255, 255, 255)
Stroke.Transparency = 0.7
Stroke.Parent = self.Terminal
return Stroke
end
function TerminalModule:CreateListLayout()
local Layout = Instance.new("UIListLayout")
Layout.Name = "OutputUIListLayout"
Layout.HorizontalAlignment = Enum.HorizontalAlignment.Center
Layout.Padding = UDim.new(0, 10)
Layout.SortOrder = Enum.SortOrder.LayoutOrder
Layout.Parent = self.OutputContent
Layout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function()
self.OutputContent.CanvasSize = UDim2.new(0, 0, 0, Layout.AbsoluteContentSize.Y)
end)
return Layout
end
function TerminalModule:CreateTopbarIcon(TopbarFolder)
local Icon = Instance.new("ImageButton")
Icon.Name = "TerminalIcon"
Icon.Image = Assets.IconOutputIcon
Icon.ImageTransparency = 0.7
Icon.AnchorPoint = Vector2.new(1, 0.5)
Icon.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Icon.BackgroundTransparency = 1
Icon.BorderColor3 = Color3.fromRGB(0, 0, 0)
Icon.BorderSizePixel = 0
Icon.Position = UDim2.fromScale(1, 0.5)
Icon.Size = UDim2.fromOffset(TerminalConstants.IconSize, TerminalConstants.IconSize)
Icon.Parent = TopbarFolder
Icon.Visible = true
return Icon
end
function TerminalModule:CreateTopbarInteract()
local Interact = Instance.new("TextButton")
Interact.Name = "Interact"
Interact.FontFace = Font.new("rbxasset://fonts/families/SourceSansPro.json")
Interact.Text = ""
Interact.TextColor3 = Color3.fromRGB(0, 0, 0)
Interact.TextSize = 14
Interact.AnchorPoint = Vector2.new(0.5, 0.5)
Interact.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Interact.BackgroundTransparency = 1
Interact.BorderColor3 = Color3.fromRGB(0, 0, 0)
Interact.BorderSizePixel = 0
Interact.Position = UDim2.fromScale(0.5, 0.5)
Interact.Size = UDim2.fromOffset(40, 40)
Interact.Parent = self.OutputIcon
return Interact
end
function TerminalModule:SetupEventHandlers(WindowFunctions)
self:SetupResizeHandlers()
self:SetupHoverEffects()
self:SetupToggleHandler(WindowFunctions)
self:SetupClearLogsHandler()
self:SetupStopLogsHandler()
end
function TerminalModule:SetupResizeHandlers()
self.DividerInteract.MouseButton1Down:Connect(function()
self.ResizingOutput = true
self.InitialMouseX = Services.UserInputService:GetMouseLocation().X
self.InitialOutputWidth = self.Terminal.AbsoluteSize.X
self.InitialLeftEdge = self.Terminal.AbsolutePosition.X
end)
Services.UserInputService.InputEnded:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 then
self.ResizingOutput = false
end
end)
Services.UserInputService.InputChanged:Connect(function(Input)
if self.ResizingOutput and Input.UserInputType == Enum.UserInputType.MouseMovement then
self:HandleResize(Input)
end
end)
end
function TerminalModule:HandleResize(Input)
local DeltaX = Services.UserInputService:GetMouseLocation().X - self.InitialMouseX
local NewOutputWidth = self.InitialOutputWidth + DeltaX
if math.abs(NewOutputWidth - self.DefaultOutputWidth) < TerminalConstants.SnapRange then
NewOutputWidth = self.DefaultOutputWidth
else
NewOutputWidth = math.clamp(NewOutputWidth, TerminalConstants.MinWidth, TerminalConstants.MaxWidth)
end
self.Terminal.Size = UDim2.new(0, NewOutputWidth, self.Terminal.Size.Y.Scale, self.Terminal.Size.Y.Offset)
local CurrentLeftEdge = self.Terminal.AbsolutePosition.X
local LeftAdjustment = self.InitialLeftEdge - CurrentLeftEdge
local NewXOffset = self.Terminal.Position.X.Offset + LeftAdjustment
self.Terminal.Position = UDim2.new(
self.Terminal.Position.X.Scale,
NewXOffset,
self.Terminal.Position.Y.Scale,
self.Terminal.Position.Y.Offset
)
self.TerminalOffset = NewXOffset
self.OutputContent.Size = UDim2.new(0, NewOutputWidth, self.OutputContent.Size.Y.Scale, self.OutputContent.Size.Y.Offset)
end
function TerminalModule:SetupHoverEffects()
self.OutputInteract.MouseEnter:Connect(function()
Utility:QuickTween(self.OutputIcon, {ImageTransparency = TweenSettings.ActiveTransparency})
end)
self.OutputInteract.MouseLeave:Connect(function()
Utility:QuickTween(self.OutputIcon, {ImageTransparency = 0.7})
end)
self.ClearLogsButton.MouseEnter:Connect(function()
Utility:QuickTween(self.ClearLogsButton, {ImageTransparency = TweenSettings.ActiveTransparency})
end)
self.ClearLogsButton.MouseLeave:Connect(function()
Utility:QuickTween(self.ClearLogsButton, {ImageTransparency = 0.7})
end)
self.StopLogsButton.MouseEnter:Connect(function()
Utility:QuickTween(self.StopLogsButton, {ImageTransparency = TweenSettings.ActiveTransparency})
end)
self.StopLogsButton.MouseLeave:Connect(function()
Utility:QuickTween(self.StopLogsButton, {ImageTransparency = 0.7})
end)
end
function TerminalModule:SetupToggleHandler(WindowFunctions)
self.OutputInteract.InputBegan:Connect(function(Input)
if not self.ToggleDebounce and (Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch) then
local NewState = not self.Terminal.Visible
self:ToggleOutputScreen(NewState, WindowFunctions)
self.ToggleDebounce = true
Utility:SaveOpened(true, NewState)
task.delay(TerminalConstants.ToggleDebounceTime, function()
self.ToggleDebounce = false
end)
end
end)
end
function TerminalModule:SetupClearLogsHandler()
self.ClearLogsButton.InputBegan:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
self:ClearLogs()
end
end)
end
function TerminalModule:SetupStopLogsHandler()
self.StopLogsButton.InputBegan:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
self.PrintLogs = not self.PrintLogs
end
end)
end
function TerminalModule:ToggleOutputScreen(Visible, WindowFunctions)
-- mutually exclusive with the server browser: close it when the terminal opens
if Visible and WindowFunctions and WindowFunctions.ServerBrowser and WindowFunctions.ServerBrowser.Open then
pcall(function() WindowFunctions.ServerBrowser:SetOpen(false) end)
end
local TransparencyGoal = Visible and 0 or 1
local PositionGoal = Visible and UDim2.new(1.2, self.TerminalOffset, 0.5, 0) or UDim2.new(1, 0, 0.5, 0)
self.Terminal.Visible = true
for _, Child in ipairs(self.Terminal:GetChildren()) do
if Child:IsA("GuiObject") and Child.Name:sub(1, 1) == "{" then
Child.Visible = Visible
end
end
Utility:QuickTween(self.Terminal, {
Position = PositionGoal,
BackgroundTransparency = WaveLibrary.AcrylicBlur and (Visible and WindowFunctions:GetCurrentThemeAttribute("BackgroundTransparency") or 1) or TransparencyGoal
})
if self.OutputWallpaper then
Utility:QuickTween(self.OutputWallpaper, {
ImageTransparency = Visible and (WindowFunctions:GetCurrentThemeAttribute("WallpaperTransparency") or 0.65) or 1
})
end
if self.ShadowContainer then
Utility:QuickTween(self.ShadowContainer, {
ImageTransparency = Visible and (WindowFunctions:GetCurrentThemeAttribute("ShadowTransparency") or 0) or 1
})
end
if self.OutputUIStroke then
Utility:QuickTween(self.OutputUIStroke, {
Transparency = Visible and 0.6 or 1
})
end
if self.OutputDivider then
Utility:QuickTween(self.OutputDivider, {
Transparency = Visible and TweenSettings.DefaultTransparency or 1
})
end
for _, Descendant in ipairs(self.Terminal:GetDescendants()) do
if Descendant:IsA("TextLabel") or Descendant:IsA("TextButton") or Descendant:IsA("TextBox") then
if Descendant.Name:find("OutputResult_") then
Utility:QuickTween(Descendant, {TextTransparency = Visible and 0 or 1})
else
Utility:QuickTween(Descendant, {TextTransparency = Visible and 0.5 or 1})
end
elseif (Descendant:IsA("ImageButton") or Descendant:IsA("ImageLabel")) and Descendant ~= self.OutputWallpaper then
Utility:QuickTween(Descendant, {ImageTransparency = Visible and 0.7 or 1})
end
local Stroke = Descendant:FindFirstChildOfClass("UIStroke")
if Stroke then
Utility:QuickTween(Stroke, {Transparency = TransparencyGoal})
end
end
if not Visible then
task.delay(TerminalConstants.FadeOutDelay, function()
self.Terminal.Visible = false
end)
end
end
function TerminalModule:ClearLogs()
for _, Child in ipairs(self.OutputContent:GetChildren()) do
if Child:IsA("TextButton") then
Child:Destroy()
end
end
self.LastMessage = nil
self.LastMessageCount = 0
self.LastOutputResult = nil
end
function TerminalModule:InitializeLogging(WindowFunctions)
Services.LogService.MessageOut:Connect(function(Message, MessageType)
if not self.PrintLogs then
return
end
self:HandleLogMessage(Message, MessageType, WindowFunctions)
end)
end
function TerminalModule:HandleLogMessage(Message, MessageType, WindowFunctions)
if not self.PrintLogs or not self.Terminal.Visible then
return
end
local CurrentTime = os.time()
local FormattedTime = OutputSettings.ShowTimestamps and os.date("[%H:%M:%S] ", CurrentTime) or ""
local MessageId = tostring(math.random(10000000, 999999999))
local ProcessedMessage = self:ProcessMessage(Message)
if ProcessedMessage == self.LastMessage and self.LastOutputResult and self.LastOutputResult.Parent and (CurrentTime - self.LastMessageTime) < TerminalConstants.MessageGroupingWindow then
self:UpdateGroupedMessage(ProcessedMessage, MessageType, FormattedTime, WindowFunctions)
return
end
self.LastMessageCount = 1
self.LastMessageTime = CurrentTime
local MessageData = self:GetMessageData(MessageType, WindowFunctions)
local OutputResult = self:CreateLogEntry(ProcessedMessage, MessageData, FormattedTime, MessageId)
self.LastMessage = ProcessedMessage
self.LastOutputResult = OutputResult
end
function TerminalModule:ProcessMessage(RawMessage)
local MessageText = tostring(RawMessage)
return MessageText
end
function TerminalModule:CreateFallbackTableString(RawMessage, MessageText)
local FallbackSuccess, FallbackResult = pcall(function()
local TableString = "{"
local Count = 0
for Key, Value in pairs(RawMessage) do
if Count > 0 then
TableString = TableString .. ", "
end
TableString = TableString .. tostring(Key) .. " = " .. tostring(Value)
Count = Count + 1
if Count >= 5 then
TableString = TableString .. ", ..."
break
end
end
TableString = TableString .. "}"
return "[Table] " .. TableString
end)
return FallbackSuccess and FallbackResult or "[Table] " .. MessageText
end
function TerminalModule:UpdateGroupedMessage(ProcessedMessage, MessageType, FormattedTime, WindowFunctions)
self.LastMessageCount = self.LastMessageCount + 1
local DisplayText = ProcessedMessage .. " (x" .. self.LastMessageCount .. ")"
local MessageData = self:GetMessageData(MessageType, WindowFunctions)
self.LastOutputResult.Text = FormattedTime .. MessageData.Icon .. MessageData.Prefix .. ": " .. DisplayText
self.LastOutputResult.TextColor3 = MessageData.Color
end
function TerminalModule:GetMessageData(MessageType, WindowFunctions)
local UseWindowFunctions = WindowFunctions.GetCurrentThemeAttribute ~= nil
local Data = {
Prefix = "Info",
Icon = OutputSettings.ShowIcons and "ℹ️ " or "",
Color = UseWindowFunctions and WindowFunctions:GetCurrentThemeAttribute("InfoColor") or Color3.fromRGB(255, 255, 255)
}
if MessageType == Enum.MessageType.MessageError then
Data.Prefix = "Error"
Data.Icon = OutputSettings.ShowIcons and "🔴 " or ""
Data.Color = UseWindowFunctions and WindowFunctions:GetCurrentThemeAttribute("ErrorColor") or Color3.fromRGB(255, 255, 255)
elseif MessageType == Enum.MessageType.MessageWarning then
Data.Prefix = "Warning"
Data.Icon = OutputSettings.ShowIcons and "⚠️ " or ""
Data.Color = UseWindowFunctions and WindowFunctions:GetCurrentThemeAttribute("WarningColor") or Color3.fromRGB(255, 255, 255)
elseif MessageType == Enum.MessageType.MessageOutput then
Data.Prefix = "Output"
Data.Icon = OutputSettings.ShowIcons and "📤 " or ""
Data.Color = UseWindowFunctions and WindowFunctions:GetCurrentThemeAttribute("SuccessColor") or Color3.fromRGB(255, 255, 255)
end
return Data
end
function TerminalModule:EnforceLogLimit()
local LogEntries = {}
for _, Child in ipairs(self.OutputContent:GetChildren()) do
if Child:IsA("TextButton") and Child.Name:find("OutputResult_") then
table.insert(LogEntries, Child)
end
end
table.sort(LogEntries, function(A, B)
return A.AbsolutePosition.Y < B.AbsolutePosition.Y
end)
local ExcessCount = #LogEntries - OutputSettings.MaxLogEntries
if ExcessCount > 0 then
for I = 1, ExcessCount do
if LogEntries[I] then
LogEntries[I]:Destroy()
end
end
end
end
function TerminalModule:CreateLogEntry(ProcessedMessage, MessageData, FormattedTime, MessageId)
local OutputResult = Instance.new("TextButton")
OutputResult.Name = "OutputResult_" .. MessageId
OutputResult.FontFace = Font.new(Assets.InterFont)
OutputResult.RichText = true
OutputResult.TextSize = TerminalConstants.LogTextSize
OutputResult.TextTruncate = Enum.TextTruncate.SplitWord
OutputResult.TextXAlignment = Enum.TextXAlignment.Left
OutputResult.TextYAlignment = Enum.TextYAlignment.Top
OutputResult.AnchorPoint = Vector2.new(0, 0.5)
OutputResult.AutomaticSize = Enum.AutomaticSize.Y
OutputResult.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
OutputResult.BackgroundTransparency = 1
OutputResult.BorderColor3 = Color3.fromRGB(0, 0, 0)
OutputResult.BorderSizePixel = 0
OutputResult.Position = UDim2.fromScale(1.3e-07, 0.5)
OutputResult.Size = UDim2.new(1, -40, 0, 0)
OutputResult.Text = FormattedTime .. MessageData.Icon .. MessageData.Prefix .. ": " .. ProcessedMessage
OutputResult.TextColor3 = MessageData.Color
local ContextMenu = self:CreateContextMenu(ProcessedMessage, FormattedTime, MessageData.Prefix, OutputResult)
ContextMenu.Parent = OutputResult
self:SetupLogEntryInteractions(OutputResult, ProcessedMessage, MessageData.Color, ContextMenu)
task.spawn(function()
OutputResult.Parent = self.OutputContent
-- Enforce log limit after adding new entry
self:EnforceLogLimit()
if OutputSettings.AutoScroll then
task.wait()
if self.OutputContent then
self.OutputContent.CanvasPosition = Vector2.new(0, self.OutputContent.AbsoluteCanvasSize.Y)
end
end
end)
return OutputResult
end
function TerminalModule:CreateContextMenu(ProcessedMessage, FormattedTime, MessageLevel, OutputResult)
local ContextMenu = Instance.new("Frame")
ContextMenu.Name = "ContextMenu"
ContextMenu.BackgroundTransparency = 1
ContextMenu.BorderSizePixel = 0
ContextMenu.Size = UDim2.fromOffset(TerminalConstants.ContextMenuWidth, TerminalConstants.ContextMenuHeight)
ContextMenu.Visible = false
ContextMenu.ZIndex = 1000
local MenuCorner = Instance.new("UICorner")
MenuCorner.CornerRadius = UDim.new(0, 4)
MenuCorner.Parent = ContextMenu
local MenuList = Instance.new("UIListLayout")
MenuList.SortOrder = Enum.SortOrder.LayoutOrder
MenuList.Parent = ContextMenu
self:CreateContextMenuItem(ContextMenu, "📋 Copy Message", function()
self:SafeCopy(ProcessedMessage)
end)
self:CreateContextMenuItem(ContextMenu, "📋 Copy Full", function()
local FullLog = FormattedTime .. "[" .. MessageLevel .. "] " .. ProcessedMessage
self:SafeCopy(FullLog)
end)
self:CreateContextMenuItem(ContextMenu, "🗑️ Delete", function()
if OutputResult and OutputResult.Parent then
OutputResult:Destroy()
end
end)
return ContextMenu
end
function TerminalModule:CreateContextMenuItem(Parent, Text, Callback)
local Item = Instance.new("TextButton")
Item.BackgroundTransparency = 1
Item.BorderSizePixel = 0
Item.Size = UDim2.new(1, 0, 0, TerminalConstants.ContextMenuItemHeight)
Item.Text = Text
Item.TextColor3 = Color3.fromRGB(255, 255, 255)
Item.TextSize = 12
Item.FontFace = Font.new(Assets.InterFont)
Item.Parent = Parent
Item.MouseButton1Click:Connect(function()
Parent.Visible = false
task.spawn(Callback)
end)
return Item
end
function TerminalModule:SetupLogEntryInteractions(OutputResult, ProcessedMessage, MessageColor, ContextMenu)
local OriginalBackgroundColor = OutputResult.BackgroundColor3
OutputResult.MouseEnter:Connect(function()
Utility:QuickTween(OutputResult, {
BackgroundColor3 = Color3.fromRGB(50, 50, 50),
TextColor3 = Color3.fromRGB(92, 156, 255),
BackgroundTransparency = TweenSettings.DefaultTransparency
})
end)
OutputResult.MouseLeave:Connect(function()
Utility:QuickTween(OutputResult, {
BackgroundColor3 = OriginalBackgroundColor,
TextColor3 = MessageColor,
BackgroundTransparency = 1
})
end)
OutputResult.MouseButton1Click:Connect(function()
self:SafeCopy(ProcessedMessage)
end)
OutputResult.MouseButton2Click:Connect(function()
ContextMenu.Position = UDim2.fromOffset(10, 10)
ContextMenu.Visible = not ContextMenu.Visible
end)
end
function TerminalModule:SafeCopy(Text)
local Success = pcall(function()
if setclipboard then
setclipboard(Text)
return true
end
return false
end)
if Success then
if Utility and Utility.Notify then
Utility:Notify("Copied", "Message copied to clipboard!", 2)
elseif WindowFunctions and WindowFunctions.Notify then
WindowFunctions:Notify({
Title = "Copied",
Description = "Message copied to clipboard!"
})
else
print("Copied to clipboard!")
end
else
if Utility and Utility.Notify then
Utility:Notify("Error", "Could not copy to clipboard", 2)
else
print("Could not copy to clipboard")
end
end
end
function TerminalModule:Destroy()
if self.Terminal then
self.Terminal:Destroy()
end
if self.OutputIcon then
self.OutputIcon:Destroy()
end
if self.ShadowContainer then
self.ShadowContainer:Destroy()
end
end
return TerminalModule
end
R["Wave/UserInterface/Imports/Terminal/ViewportEngine.lua"] = function(...)
-- Reusable, optimized model viewport. Builds a ViewportFrame inside `Parent`
-- (filling it) and returns a handle with model + camera controls. Drag to orbit
-- (mouse + touch), scroll to zoom, and it stops rendering when off-screen.
return function(Parent, Options)
Options = Options or {}
local RunService = Services.RunService
local UserInputService = Services.UserInputService
local ViewportFrame = Instance.new("ViewportFrame")
ViewportFrame.Name = "ViewportEngine"
ViewportFrame.Size = UDim2.fromScale(1, 1)
ViewportFrame.BackgroundColor3 = Options.Background or Color3.fromRGB(16, 16, 22)
ViewportFrame.BackgroundTransparency = Options.BackgroundTransparency or 0.1
ViewportFrame.BorderSizePixel = 0
ViewportFrame.Ambient = Color3.fromRGB(170, 170, 180)
ViewportFrame.LightColor = Color3.fromRGB(255, 255, 255)
ViewportFrame.LightDirection = Vector3.new(-0.6, -1, -0.4)
ViewportFrame.ZIndex = (Parent.ZIndex or 1) + 1
-- Active so the orbit drag is sunk here and doesn't reach the window drag.
ViewportFrame.Active = true
ViewportFrame:SetAttribute("NoApplyTheme", true)
ViewportFrame.Parent = Parent
local Corner = Instance.new("UICorner")
Corner.CornerRadius = UDim.new(0, Options.CornerRadius or 8)
Corner.Parent = ViewportFrame
local Stroke = Instance.new("UIStroke")
Stroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
Stroke.Color = Options.StrokeColor or Color3.fromRGB(120, 120, 130)
Stroke.Transparency = Options.StrokeTransparency or 0.7
Stroke.Parent = ViewportFrame
if Options.Hint ~= false then
local Hint = Instance.new("TextLabel")
Hint.Name = "Hint"
Hint.AnchorPoint = Vector2.new(1, 1)
Hint.Position = UDim2.new(1, -8, 1, -6)
Hint.Size = UDim2.fromOffset(120, 14)
Hint.BackgroundTransparency = 1
Hint.Text = "drag to rotate"
Hint.FontFace = Font.new(Assets.InterFont)
Hint.TextColor3 = Color3.fromRGB(255, 255, 255)
Hint.TextTransparency = 0.55
Hint.TextSize = 11
Hint.TextXAlignment = Enum.TextXAlignment.Right
Hint.ZIndex = ViewportFrame.ZIndex + 2
Hint.Parent = ViewportFrame
end
local Camera = Instance.new("Camera")
Camera.FieldOfView = 50
Camera.Parent = ViewportFrame
ViewportFrame.CurrentCamera = Camera
local Connections = {}
local CurrentModel
local Target = Vector3.zero
local Azimuth, Elevation, Distance = math.rad(35), math.rad(12), 12
local BaseDistance = Distance
local MinDistance, MaxDistance = 4, 40
local Dragging, LastPosition = false, nil
local function UpdateCamera()
local x = math.cos(Elevation) * math.sin(Azimuth)
local y = math.sin(Elevation)
local z = math.cos(Elevation) * math.cos(Azimuth)
Camera.CFrame = CFrame.lookAt(Target + Vector3.new(x, y, z) * Distance, Target)
end
local Handle = { Frame = ViewportFrame, Camera = Camera }
function Handle:SetModel(Model)
if CurrentModel then
CurrentModel:Destroy()
CurrentModel = nil
end
if not Model then
return self
end
local ok, clone = pcall(function()
local restore = {}
if not Model.Archivable then
Model.Archivable = true
restore[#restore + 1] = Model
end
for _, descendant in ipairs(Model:GetDescendants()) do
if not descendant.Archivable then
descendant.Archivable = true
restore[#restore + 1] = descendant
end
end
local result = Model:Clone()
for _, instance in ipairs(restore) do
instance.Archivable = false
end
return result
end)
if not ok or not clone then
return self
end
for _, descendant in ipairs(clone:GetDescendants()) do
if descendant:IsA("BasePart") then
descendant.Anchored = true
descendant.CanCollide = false
descendant.CanQuery = false
descendant.CanTouch = false
elseif descendant:IsA("LuaSourceContainer") or descendant:IsA("ParticleEmitter") or descendant:IsA("Sound") then
descendant:Destroy()
end
end
clone.Parent = ViewportFrame
CurrentModel = clone
local center, size
if clone:IsA("Model") then
local okBox, cf, sz = pcall(function()
return clone:GetBoundingBox()
end)
if okBox then
center, size = cf.Position, sz
end
elseif clone:IsA("BasePart") then
center, size = clone.Position, clone.Size
end
center = center or Vector3.zero
size = size or Vector3.new(4, 4, 4)
local offset = CFrame.new(-center)
if clone:IsA("Model") then
for _, part in ipairs(clone:GetDescendants()) do
if part:IsA("BasePart") then
part.CFrame = offset * part.CFrame
end
end
elseif clone:IsA("BasePart") then
clone.CFrame = offset * clone.CFrame
end
Target = Vector3.zero
Distance = math.clamp(size.Magnitude * 1.4, 5, 1000)
BaseDistance = Distance
MinDistance = math.max(Distance * 0.35, 2)
MaxDistance = Distance * 2.75
Azimuth, Elevation = math.rad(35), math.rad(12)
UpdateCamera()
return self
end
function Handle:Clear()
return self:SetModel(nil)
end
function Handle:GetModel()
return CurrentModel
end
function Handle:GetCamera()
return Camera
end
function Handle:SetCamera(NewCamera)
if typeof(NewCamera) == "Instance" and NewCamera:IsA("Camera") then
NewCamera.Parent = ViewportFrame
ViewportFrame.CurrentCamera = NewCamera
Camera = NewCamera
elseif typeof(NewCamera) == "CFrame" then
Camera.CFrame = NewCamera
end
return self
end
function Handle:SetAutoRotate(State)
Options.AutoRotate = State and true or false
return self
end
function Handle:ResetView()
Azimuth, Elevation, Distance = math.rad(35), math.rad(12), BaseDistance
UpdateCamera()
return self
end
function Handle:SetVisible(State)
Parent.Visible = State
return self
end
function Handle:Destroy()
for _, connection in pairs(Connections) do
if typeof(connection) == "RBXScriptConnection" then
connection:Disconnect()
end
end
table.clear(Connections)
if CurrentModel then
CurrentModel:Destroy()
CurrentModel = nil
end
if Parent then
Parent:Destroy()
end
end
Connections.Began = ViewportFrame.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
Dragging = true
LastPosition = input.Position
end
end)
Connections.Changed = UserInputService.InputChanged:Connect(function(input)
if Dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) and LastPosition then
local delta = input.Position - LastPosition
LastPosition = input.Position
Azimuth = Azimuth - delta.X * 0.0075
Elevation = math.clamp(Elevation + delta.Y * 0.0075, -1.45, 1.45)
UpdateCamera()
elseif input.UserInputType == Enum.UserInputType.MouseWheel then
local position, vsize = ViewportFrame.AbsolutePosition, ViewportFrame.AbsoluteSize
local mouse = UserInputService:GetMouseLocation() - Vector2.new(0, 36)
if mouse.X >= position.X and mouse.X <= position.X + vsize.X and mouse.Y >= position.Y and mouse.Y <= position.Y + vsize.Y then
Distance = math.clamp(Distance - input.Position.Z * (Distance * 0.12), MinDistance, MaxDistance)
UpdateCamera()
end
end
end)
Connections.Ended = UserInputService.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
Dragging = false
end
end)
local function IsOnScreen()
if not ViewportFrame.Parent or not Parent.Visible then
return false
end
local position, vsize = ViewportFrame.AbsolutePosition, ViewportFrame.AbsoluteSize
if vsize.X <= 1 or vsize.Y <= 1 then
return false
end
local camera = workspace.CurrentCamera
if camera then
local screen = camera.ViewportSize
if position.X + vsize.X < 0 or position.X > screen.X or position.Y + vsize.Y < 0 or position.Y > screen.Y then
return false
end
end
return true
end
local Accumulator = 0
Connections.Render = RunService.Heartbeat:Connect(function(dt)
Accumulator = Accumulator + dt
if Accumulator >= 0.15 then
Accumulator = 0
local visible = IsOnScreen()
if ViewportFrame.Visible ~= visible then
ViewportFrame.Visible = visible
end
end
if ViewportFrame.Visible and Options.AutoRotate and not Dragging then
Azimuth = Azimuth + dt * (Options.RotateSpeed or 0.5)
UpdateCamera()
end
end)
UpdateCamera()
if Options.Model or Options.Object then
Handle:SetModel(Options.Model or Options.Object)
end
return Handle
end
end
R["Wave/UserInterface/Imports/Themes/PerformanceModes.lua"] = function(...)
return {
Quality = {
BlurIntensity = 100,
ShadowSize = 25,
AnimationSpeed = 0.3,
ParticlesEnabled = true,
MotionBlurEnabled = true
},
Balanced = {
BlurIntensity = 50,
ShadowSize = 15,
AnimationSpeed = 0.2,
ParticlesEnabled = false,
MotionBlurEnabled = false
},
Performance = {
BlurIntensity = 20,
ShadowSize = 5,
AnimationSpeed = 0.1,
ParticlesEnabled = false,
MotionBlurEnabled = false
},
Potato = {
BlurIntensity = 0,
ShadowSize = 0,
AnimationSpeed = 0.05,
ParticlesEnabled = false,
MotionBlurEnabled = false
}
}
end
R["Wave/UserInterface/Imports/Themes/ThemeColorSchemes.lua"] = function(...)
return {
Monochromatic = function(BaseColor)
local H, S, V = BaseColor:ToHSV()
return {
Background = Color3.fromHSV(H, S * 0.3, V * 0.2),
Foreground = Color3.fromHSV(H, S * 0.4, V * 0.3),
Surface = Color3.fromHSV(H, S * 0.5, V * 0.4),
AccentPrimary = Color3.fromHSV(H, S * 0.8, V * 0.9),
AccentSecondary = Color3.fromHSV(H, S * 0.6, V * 0.7)
}
end,
Complementary = function(BaseColor)
local H, S, V = BaseColor:ToHSV()
local CompH = (H + 0.5) % 1
return {
Background = Color3.fromHSV(H, S * 0.3, V * 0.2),
Foreground = Color3.fromHSV(H, S * 0.4, V * 0.3),
Surface = Color3.fromHSV(H, S * 0.5, V * 0.4),
AccentPrimary = Color3.fromHSV(CompH, S * 0.8, V * 0.9),
AccentSecondary = Color3.fromHSV(CompH, S * 0.6, V * 0.7)
}
end,
Triadic = function(BaseColor)
local H, S, V = BaseColor:ToHSV()
local H2 = (H + 0.333) % 1
local H3 = (H + 0.667) % 1
return {
Background = Color3.fromHSV(H, S * 0.3, V * 0.2),
Foreground = Color3.fromHSV(H2, S * 0.4, V * 0.3),
Surface = Color3.fromHSV(H3, S * 0.5, V * 0.4),
AccentPrimary = Color3.fromHSV(H2, S * 0.8, V * 0.9),
AccentSecondary = Color3.fromHSV(H3, S * 0.6, V * 0.7)
}
end
}
end
R["Wave/UserInterface/Imports/Themes/ThemeTemplates.lua"] = function(...)
return {
Gaming = {
Background = Color3.fromRGB(10, 10, 15),
AccentPrimary = Color3.fromRGB(0, 255, 127),
AccentSecondary = Color3.fromRGB(255, 20, 147),
CornerRadius = 0,
GlowSize = 25,
AnimationSpeed = 0.15
},
Professional = {
Background = Color3.fromRGB(248, 249, 250),
TextPrimary = Color3.fromRGB(33, 37, 41),
AccentPrimary = Color3.fromRGB(0, 123, 255),
CornerRadius = 4,
ShadowSize = 5,
AnimationSpeed = 0.3
},
Creative = {
Background = Color3.fromRGB(45, 55, 72),
AccentPrimary = Color3.fromRGB(167, 67, 238),
AccentSecondary = Color3.fromRGB(245, 101, 101),
GradientEnabled = true,
CornerRadius = 20
},
Minimal = {
Background = Color3.fromRGB(255, 255, 255),
TextPrimary = Color3.fromRGB(0, 0, 0),
AccentPrimary = Color3.fromRGB(0, 0, 0),
CornerRadius = 0,
ShadowSize = 0,
StrokeThickness = 1
},
Vibrant = {
Background = Color3.fromRGB(30, 30, 30),
AccentPrimary = Color3.fromRGB(255, 69, 0),
AccentSecondary = Color3.fromRGB(255, 215, 0),
AccentTertiary = Color3.fromRGB(50, 205, 50),
GlowSize = 30,
AnimationSpeed = 0.1
}
}
end
R["Wave/UserInterface/Imports/Themes/ThemeUtility.lua"] = function(...)
local ThemeUtility = {}
ThemeUtility.__index = ThemeUtility
local ThemeMetaUtility = setmetatable({
_initialized = false,
}, {
__index = function(self, key)
return ThemeUtility[key]
end,
__newindex = function(self, key, value)
rawset(self, key, value)
end,
__call = function(self)
return setmetatable({}, self)
end
})
function ThemeUtility:AnimateIn(Parent, DelayTime, Duration)
task.delay(DelayTime, function()
for _, Child in ipairs(Parent:GetChildren()) do
if Child:IsA("GuiObject") then
if Child.Name == "Terminal" then
continue
end
local Properties = {}
if Child:IsA("TextLabel") or Child:IsA("TextButton") or Child:IsA("TextBox") then
local OriginalTextTransparency = Child:GetAttribute("OriginalTextTransparency")
local OriginalBackgroundTransparency = Child:GetAttribute("OriginalBackgroundTransparency")
if OriginalTextTransparency ~= nil then
Properties.TextTransparency = OriginalTextTransparency
end
if OriginalBackgroundTransparency ~= nil then
Properties.BackgroundTransparency = OriginalBackgroundTransparency
end
elseif Child:IsA("ImageLabel") or Child:IsA("ImageButton") then
local OriginalImageTransparency = Child:GetAttribute("OriginalImageTransparency")
local OriginalBackgroundTransparency = Child:GetAttribute("OriginalBackgroundTransparency")
if OriginalImageTransparency ~= nil then
Properties.ImageTransparency = OriginalImageTransparency
end
if OriginalBackgroundTransparency ~= nil then
Properties.BackgroundTransparency = OriginalBackgroundTransparency
end
else
local OriginalBackgroundTransparency = Child:GetAttribute("OriginalBackgroundTransparency")
if OriginalBackgroundTransparency ~= nil then
Properties.BackgroundTransparency = OriginalBackgroundTransparency
end
end
if next(Properties) ~= nil then
Utility:PropertyTween(Child, TweenInfo.new(Duration, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), Properties):Play()
end
local Stroke = Child:FindFirstChildOfClass("UIStroke")
if Stroke then
local OriginalTransparency = Stroke:GetAttribute("OriginalTransparency")
if OriginalTransparency ~= nil then
Utility:PropertyTween(Stroke, TweenInfo.new(Duration, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
Transparency = OriginalTransparency
}):Play()
end
end
self:AnimateIn(Child, 0.02, Duration)
end
end
end)
end
function ThemeUtility:MakeInvisible(Parent)
for _, Child in ipairs(Parent:GetChildren()) do
if Child:IsA("GuiObject") then
if Child:IsA("TextLabel") or Child:IsA("TextButton") or Child:IsA("TextBox") then
Child:SetAttribute("OriginalTextTransparency", Child.TextTransparency)
Child:SetAttribute("OriginalBackgroundTransparency", Child.BackgroundTransparency)
Child.TextTransparency = 1
Child.BackgroundTransparency = 1
elseif Child:IsA("ImageLabel") or Child:IsA("ImageButton") then
Child:SetAttribute("OriginalImageTransparency", Child.ImageTransparency)
Child:SetAttribute("OriginalBackgroundTransparency", Child.BackgroundTransparency)
Child.ImageTransparency = 1
Child.BackgroundTransparency = 1
else
Child:SetAttribute("OriginalBackgroundTransparency", Child.BackgroundTransparency)
Child.BackgroundTransparency = 1
end
local Stroke = Child:FindFirstChildOfClass("UIStroke")
if Stroke then
Stroke:SetAttribute("OriginalTransparency", Stroke.Transparency)
Stroke.Transparency = 1
end
self:MakeInvisible(Child)
end
end
end
function ThemeUtility:RetrieveThemes(WaveLibrarySettings)
return {
Default = {
Name = "Default",
Background = Color3.fromRGB(15, 23, 35),
Foreground = Color3.fromRGB(220, 230, 245),
Surface = Color3.fromRGB(25, 35, 50),
TextPrimary = Color3.fromRGB(220, 230, 245),
TextSecondary = Color3.fromRGB(160, 180, 210),
TextDisabled = Color3.fromRGB(100, 120, 150),
AccentPrimary = Color3.fromRGB(45, 212, 240),
AccentSecondary = Color3.fromRGB(80, 150, 255),
AccentTertiary = Color3.fromRGB(100, 200, 255),
SuccessColor = Color3.fromRGB(46, 160, 67),
WarningColor = Color3.fromRGB(255, 193, 7),
ErrorColor = Color3.fromRGB(220, 53, 69),
InfoColor = Color3.fromRGB(45, 212, 240),
ShadowColor = Color3.fromRGB(0, 0, 0),
GlowColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(45, 212, 240)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(80, 150, 255))
}),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(80, 150, 255)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(45, 212, 240)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(100, 200, 255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(220, 230, 245))
}),
BackgroundTransparency = WaveLibrarySettings.AcrylicBlur and 0.05 or 0,
SurfaceTransparency = 0.02,
StrokeTransparency = 0.85,
ShadowTransparency = 0.2,
GlowTransparency = 0.75,
CornerRadius = 12,
StrokeThickness = 1,
ShadowSize = 25,
GlowSize = 18,
AnimationSpeed = 0.22,
BlurIntensity = 55,
ShadowOffset = Vector2.new(0, 4),
WallpaperEnabled = true,
WallpaperTransparency = 0.7,
WallpaperBlending = "Multiply",
HeaderColor = Color3.fromRGB(45, 212, 240),
HeaderTransparency = 0.15,
SidebarColor = Color3.fromRGB(10, 15, 25),
SidebarTransparency = 0.6,
BorderColor = Color3.fromRGB(45, 212, 240),
NotificationColor = Color3.fromRGB(20, 30, 45),
StatusColor = Color3.fromRGB(20, 30, 45),
DialogColor = Color3.fromRGB(25, 35, 50),
ButtonColor = Color3.fromRGB(30, 45, 65),
ToggleColor = Color3.fromRGB(50, 70, 95),
TogglerHeadColor = Color3.fromRGB(45, 212, 240),
SliderColor = Color3.fromRGB(50, 70, 95),
SliderHeadColor = Color3.fromRGB(45, 212, 240),
DropdownColor = Color3.fromRGB(28, 40, 58),
InputFieldColor = Color3.fromRGB(220, 230, 245),
InputValueBackground = 0.95,
InputFieldTransparency = 0.35,
ScrollbarColor = Color3.fromRGB(45, 212, 240),
ScrollbarTransparency = 0.75,
SelectionColor = Color3.fromRGB(45, 212, 240),
HoverColor = Color3.fromRGB(80, 150, 255),
HoverTransparency = 0.9,
ActiveColor = Color3.fromRGB(80, 150, 255),
FocusColor = Color3.fromRGB(100, 200, 255),
DisabledOverlay = Color3.fromRGB(0, 0, 0),
DisabledTransparency = 0.5,
GradientEnabled = true,
GradientRotation = 135,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(15, 23, 35)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(20, 30, 45)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(25, 38, 55))
},
NoiseEnabled = true,
NoiseScale = 100,
NoiseTransparency = 0.96,
ParticlesEnabled = false,
ParticleCount = 15,
ParticleColor = Color3.fromRGB(45, 212, 240),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.3,
FontFamily = "Inter",
FontWeight = "Medium",
FontSize = 14,
LineHeight = 1.4,
LetterSpacing = 0,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Dark",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(45, 212, 240),
MinimizeColor = Color3.fromRGB(45, 212, 240),
ExitColor = Color3.fromRGB(80, 150, 255),
Version = "2.0"
},
Cyber = {
Name = "Cyber",
Background = Color3.fromRGB(5, 8, 15),
Foreground = Color3.fromRGB(0, 255, 200),
Surface = Color3.fromRGB(15, 20, 30),
TextPrimary = Color3.fromRGB(0, 255, 200),
TextSecondary = Color3.fromRGB(100, 255, 220),
TextDisabled = Color3.fromRGB(50, 150, 130),
AccentPrimary = Color3.fromRGB(255, 0, 150),
AccentSecondary = Color3.fromRGB(0, 200, 255),
AccentTertiary = Color3.fromRGB(150, 255, 0),
SuccessColor = Color3.fromRGB(0, 255, 100),
WarningColor = Color3.fromRGB(255, 200, 0),
ErrorColor = Color3.fromRGB(255, 50, 100),
InfoColor = Color3.fromRGB(0, 150, 255),
ShadowColor = Color3.fromRGB(255, 0, 150),
GlowColor = Color3.fromRGB(0, 255, 200),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 0, 150)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(0, 255, 200)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(150, 255, 0)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(0, 200, 255))
}),
BackgroundTransparency = 0,
SurfaceTransparency = 0.03,
StrokeTransparency = 0.6,
ShadowTransparency = 0.3,
GlowTransparency = 0.5,
CornerRadius = 4,
StrokeThickness = 2,
ShadowSize = 35,
GlowSize = 40,
AnimationSpeed = 0.08,
BlurIntensity = 30,
ShadowOffset = Vector2.new(0, 6),
WallpaperEnabled = false,
WallpaperTransparency = 1,
WallpaperBlending = "Normal",
HeaderColor = Color3.fromRGB(0, 255, 200),
HeaderTransparency = 0.1,
SidebarColor = Color3.fromRGB(2, 5, 10),
SidebarTransparency = 0.5,
BorderColor = Color3.fromRGB(255, 0, 150),
NotificationColor = Color3.fromRGB(8, 12, 20),
StatusColor = Color3.fromRGB(8, 12, 20),
DialogColor = Color3.fromRGB(12, 18, 25),
ButtonColor = Color3.fromRGB(20, 30, 40),
ToggleColor = Color3.fromRGB(40, 60, 80),
TogglerHeadColor = Color3.fromRGB(255, 0, 150),
SliderColor = Color3.fromRGB(40, 60, 80),
SliderHeadColor = Color3.fromRGB(0, 255, 200),
DropdownColor = Color3.fromRGB(18, 25, 35),
InputFieldColor = Color3.fromRGB(0, 255, 200),
InputValueBackground = 0.95,
InputFieldTransparency = 0.15,
ScrollbarColor = Color3.fromRGB(255, 0, 150),
ScrollbarTransparency = 0.6,
SelectionColor = Color3.fromRGB(0, 255, 200),
HoverColor = Color3.fromRGB(255, 0, 150),
HoverTransparency = 0.85,
ActiveColor = Color3.fromRGB(150, 255, 0),
FocusColor = Color3.fromRGB(0, 200, 255),
DisabledOverlay = Color3.fromRGB(0, 0, 0),
DisabledTransparency = 0.8,
GradientEnabled = true,
GradientRotation = 45,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(5, 8, 15)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(15, 20, 30)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(25, 35, 45))
},
NoiseEnabled = true,
NoiseScale = 45,
NoiseTransparency = 0.9,
ParticlesEnabled = true,
ParticleCount = 50,
ParticleColor = Color3.fromRGB(0, 255, 200),
MotionBlurEnabled = true,
MotionBlurIntensity = 0.7,
FontFamily = "Consolas",
FontWeight = "Bold",
FontSize = 13,
LineHeight = 1.2,
LetterSpacing = 1.2,
AntiAliasing = false,
SubPixelRendering = false,
DynamicTypeScaling = false,
HighContrastMode = true,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Dark",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(0, 255, 200),
MinimizeColor = Color3.fromRGB(0, 255, 200),
ExitColor = Color3.fromRGB(255, 0, 150),
Version = "2.0"
},
Rose = {
Name = "Rose Garden",
Background = Color3.fromRGB(255, 248, 250),
Foreground = Color3.fromRGB(76, 29, 149),
Surface = Color3.fromRGB(253, 242, 248),
TextPrimary = Color3.fromRGB(76, 29, 149),
TextSecondary = Color3.fromRGB(136, 19, 55),
TextDisabled = Color3.fromRGB(190, 24, 93),
AccentPrimary = Color3.fromRGB(236, 72, 153),
AccentSecondary = Color3.fromRGB(190, 24, 93),
AccentTertiary = Color3.fromRGB(249, 168, 212),
SuccessColor = Color3.fromRGB(34, 197, 94),
WarningColor = Color3.fromRGB(251, 191, 36),
ErrorColor = Color3.fromRGB(239, 68, 68),
InfoColor = Color3.fromRGB(168, 85, 247),
ShadowColor = Color3.fromRGB(236, 72, 153),
GlowColor = Color3.fromRGB(236, 72, 153),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(190, 24, 93)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(236, 72, 153)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(249, 168, 212)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(253, 242, 248))
}),
BackgroundTransparency = 0,
SurfaceTransparency = 0.03,
StrokeTransparency = 0.82,
ShadowTransparency = 0.9,
GlowTransparency = 0.92,
CornerRadius = 18,
StrokeThickness = 1,
ShadowSize = 8,
GlowSize = 6,
AnimationSpeed = 0.32,
BlurIntensity = 12,
ShadowOffset = Vector2.new(0, 2),
WallpaperEnabled = false,
WallpaperTransparency = 1,
WallpaperBlending = "Normal",
HeaderColor = Color3.fromRGB(236, 72, 153),
HeaderTransparency = 0.08,
SidebarColor = Color3.fromRGB(255, 248, 250),
SidebarTransparency = 0.2,
BorderColor = Color3.fromRGB(251, 207, 232),
NotificationColor = Color3.fromRGB(255, 255, 255),
StatusColor = Color3.fromRGB(255, 255, 255),
DialogColor = Color3.fromRGB(255, 255, 255),
ButtonColor = Color3.fromRGB(252, 231, 243),
ToggleColor = Color3.fromRGB(251, 207, 232),
TogglerHeadColor = Color3.fromRGB(236, 72, 153),
SliderColor = Color3.fromRGB(251, 207, 232),
SliderHeadColor = Color3.fromRGB(236, 72, 153),
DropdownColor = Color3.fromRGB(255, 255, 255),
InputFieldColor = Color3.fromRGB(76, 29, 149),
InputValueBackground = 0.95,
InputFieldTransparency = 0.92,
ScrollbarColor = Color3.fromRGB(190, 24, 93),
ScrollbarTransparency = 0.7,
SelectionColor = Color3.fromRGB(236, 72, 153),
HoverColor = Color3.fromRGB(190, 24, 93),
HoverTransparency = 0.9,
ActiveColor = Color3.fromRGB(190, 24, 93),
FocusColor = Color3.fromRGB(249, 168, 212),
DisabledOverlay = Color3.fromRGB(255, 248, 250),
DisabledTransparency = 0.7,
GradientEnabled = true,
GradientRotation = 135,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 248, 250)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(254, 240, 248)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(253, 242, 248))
},
NoiseEnabled = false,
NoiseScale = 55,
NoiseTransparency = 0.99,
ParticlesEnabled = false,
ParticleCount = 12,
ParticleColor = Color3.fromRGB(236, 72, 153),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.2,
FontFamily = "Dancing Script",
FontWeight = "Regular",
FontSize = 14,
LineHeight = 1.6,
LetterSpacing = 0.4,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Light",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(236, 72, 153),
MinimizeColor = Color3.fromRGB(236, 72, 153),
ExitColor = Color3.fromRGB(190, 24, 93),
Version = "2.0"
},
Sandstorm = {
Name = "Sandstorm",
Background = Color3.fromRGB(28, 25, 20),
Foreground = Color3.fromRGB(255, 235, 205),
Surface = Color3.fromRGB(40, 35, 28),
TextPrimary = Color3.fromRGB(255, 235, 205),
TextSecondary = Color3.fromRGB(220, 190, 140),
TextDisabled = Color3.fromRGB(160, 140, 100),
AccentPrimary = Color3.fromRGB(255, 165, 0),
AccentSecondary = Color3.fromRGB(218, 165, 32),
AccentTertiary = Color3.fromRGB(255, 215, 0),
SuccessColor = Color3.fromRGB(85, 170, 85),
WarningColor = Color3.fromRGB(255, 140, 0),
ErrorColor = Color3.fromRGB(205, 92, 92),
InfoColor = Color3.fromRGB(100, 149, 237),
ShadowColor = Color3.fromRGB(0, 0, 0),
GlowColor = Color3.fromRGB(255, 165, 0),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(218, 165, 32)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(255, 165, 0)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(255, 215, 0)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 235, 205))
}),
BackgroundTransparency = WaveLibrarySettings.AcrylicBlur and 0.04 or 0,
SurfaceTransparency = 0.02,
StrokeTransparency = 0.85,
ShadowTransparency = 0.4,
GlowTransparency = 0.75,
CornerRadius = 6,
StrokeThickness = 1,
ShadowSize = 20,
GlowSize = 15,
AnimationSpeed = 0.15,
BlurIntensity = 35,
ShadowOffset = Vector2.new(0, 3),
WallpaperEnabled = true,
WallpaperTransparency = 0.8,
WallpaperBlending = "Overlay",
HeaderColor = Color3.fromRGB(255, 165, 0),
HeaderTransparency = 0.2,
SidebarColor = Color3.fromRGB(20, 18, 15),
SidebarTransparency = 0.7,
BorderColor = Color3.fromRGB(255, 165, 0),
NotificationColor = Color3.fromRGB(32, 28, 22),
StatusColor = Color3.fromRGB(32, 28, 22),
DialogColor = Color3.fromRGB(45, 40, 32),
ButtonColor = Color3.fromRGB(50, 45, 36),
ToggleColor = Color3.fromRGB(90, 80, 65),
TogglerHeadColor = Color3.fromRGB(255, 235, 205),
SliderColor = Color3.fromRGB(90, 80, 65),
SliderHeadColor = Color3.fromRGB(255, 165, 0),
DropdownColor = Color3.fromRGB(45, 38, 30),
InputFieldColor = Color3.fromRGB(255, 235, 205),
InputValueBackground = 0.95,
InputFieldTransparency = 0.4,
ScrollbarColor = Color3.fromRGB(255, 165, 0),
ScrollbarTransparency = 0.8,
SelectionColor = Color3.fromRGB(255, 165, 0),
HoverColor = Color3.fromRGB(255, 215, 0),
HoverTransparency = 0.9,
ActiveColor = Color3.fromRGB(218, 165, 32),
FocusColor = Color3.fromRGB(255, 215, 0),
DisabledOverlay = Color3.fromRGB(0, 0, 0),
DisabledTransparency = 0.6,
GradientEnabled = true,
GradientRotation = 315,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(28, 25, 20)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(40, 35, 28)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(55, 48, 38))
},
NoiseEnabled = true,
NoiseScale = 65,
NoiseTransparency = 0.92,
ParticlesEnabled = true,
ParticleCount = 28,
ParticleColor = Color3.fromRGB(255, 165, 0),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.3,
FontFamily = "Palatino",
FontWeight = "Regular",
FontSize = 14,
LineHeight = 1.45,
LetterSpacing = 0.3,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Dark",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(255, 165, 0),
MinimizeColor = Color3.fromRGB(255, 165, 0),
ExitColor = Color3.fromRGB(218, 165, 32),
Version = "2.0"
},
Arctic = {
Name = "Arctic Frost",
Background = Color3.fromRGB(248, 250, 252),
Foreground = Color3.fromRGB(30, 58, 138),
Surface = Color3.fromRGB(241, 245, 249),
TextPrimary = Color3.fromRGB(30, 58, 138),
TextSecondary = Color3.fromRGB(59, 130, 246),
TextDisabled = Color3.fromRGB(148, 163, 184),
AccentPrimary = Color3.fromRGB(59, 130, 246),
AccentSecondary = Color3.fromRGB(37, 99, 235),
AccentTertiary = Color3.fromRGB(147, 197, 253),
SuccessColor = Color3.fromRGB(16, 185, 129),
WarningColor = Color3.fromRGB(245, 158, 11),
ErrorColor = Color3.fromRGB(239, 68, 68),
InfoColor = Color3.fromRGB(14, 165, 233),
ShadowColor = Color3.fromRGB(59, 130, 246),
GlowColor = Color3.fromRGB(147, 197, 253),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(37, 99, 235)),
ColorSequenceKeypoint.new(0.4, Color3.fromRGB(59, 130, 246)),
ColorSequenceKeypoint.new(0.8, Color3.fromRGB(147, 197, 253)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(248, 250, 252))
}),
BackgroundTransparency = 0,
SurfaceTransparency = 0.05,
StrokeTransparency = 0.9,
ShadowTransparency = 0.95,
GlowTransparency = 0.88,
CornerRadius = 12,
StrokeThickness = 1,
ShadowSize = 6,
GlowSize = 8,
AnimationSpeed = 0.4,
BlurIntensity = 10,
ShadowOffset = Vector2.new(0, 1),
WallpaperEnabled = false,
WallpaperTransparency = 1,
WallpaperBlending = "Normal",
HeaderColor = Color3.fromRGB(59, 130, 246),
HeaderTransparency = 0.05,
SidebarColor = Color3.fromRGB(248, 250, 252),
SidebarTransparency = 0.1,
BorderColor = Color3.fromRGB(191, 219, 254),
NotificationColor = Color3.fromRGB(255, 255, 255),
StatusColor = Color3.fromRGB(255, 255, 255),
DialogColor = Color3.fromRGB(255, 255, 255),
ButtonColor = Color3.fromRGB(239, 246, 255),
ToggleColor = Color3.fromRGB(219, 234, 254),
TogglerHeadColor = Color3.fromRGB(59, 130, 246),
SliderColor = Color3.fromRGB(219, 234, 254),
SliderHeadColor = Color3.fromRGB(59, 130, 246),
DropdownColor = Color3.fromRGB(255, 255, 255),
InputFieldColor = Color3.fromRGB(30, 58, 138),
InputValueBackground = 0.95,
InputFieldTransparency = 0.98,
ScrollbarColor = Color3.fromRGB(147, 197, 253),
ScrollbarTransparency = 0.8,
SelectionColor = Color3.fromRGB(59, 130, 246),
HoverColor = Color3.fromRGB(37, 99, 235),
HoverTransparency = 0.95,
ActiveColor = Color3.fromRGB(37, 99, 235),
FocusColor = Color3.fromRGB(147, 197, 253),
DisabledOverlay = Color3.fromRGB(248, 250, 252),
DisabledTransparency = 0.8,
GradientEnabled = true,
GradientRotation = 180,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(248, 250, 252)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(241, 245, 249)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(239, 246, 255))
},
NoiseEnabled = false,
NoiseScale = 70,
NoiseTransparency = 1,
ParticlesEnabled = false,
ParticleCount = 5,
ParticleColor = Color3.fromRGB(147, 197, 253),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.1,
FontFamily = "Source Sans Pro",
FontWeight = "Regular",
FontSize = 14,
LineHeight = 1.5,
LetterSpacing = 0.1,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Light",
AccentColorSource = "Manual",
AutoDarkMode = true,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(59, 130, 246),
MinimizeColor = Color3.fromRGB(59, 130, 246),
ExitColor = Color3.fromRGB(37, 99, 235),
Version = "2.0"
},
Void = {
Name = "Void",
Background = Color3.fromRGB(0, 0, 0),
Foreground = Color3.fromRGB(160, 160, 180),
Surface = Color3.fromRGB(8, 8, 12),
TextPrimary = Color3.fromRGB(160, 160, 180),
TextSecondary = Color3.fromRGB(120, 120, 140),
TextDisabled = Color3.fromRGB(60, 60, 70),
AccentPrimary = Color3.fromRGB(100, 100, 140),
AccentSecondary = Color3.fromRGB(80, 80, 120),
AccentTertiary = Color3.fromRGB(140, 140, 180),
SuccessColor = Color3.fromRGB(60, 140, 60),
WarningColor = Color3.fromRGB(140, 120, 60),
ErrorColor = Color3.fromRGB(140, 60, 60),
InfoColor = Color3.fromRGB(60, 100, 140),
ShadowColor = Color3.fromRGB(0, 0, 0),
GlowColor = Color3.fromRGB(100, 100, 140),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(80, 80, 120)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(100, 100, 140)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(140, 140, 180)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(160, 160, 180))
}),
BackgroundTransparency = 0,
SurfaceTransparency = 0.01,
StrokeTransparency = 0.95,
ShadowTransparency = 0.3,
GlowTransparency = 0.9,
CornerRadius = 4,
StrokeThickness = 1,
ShadowSize = 15,
GlowSize = 10,
AnimationSpeed = 0.12,
BlurIntensity = 25,
ShadowOffset = Vector2.new(0, 2),
WallpaperEnabled = true,
WallpaperTransparency = 0.9,
WallpaperBlending = "Multiply",
HeaderColor = Color3.fromRGB(100, 100, 140),
HeaderTransparency = 0.4,
SidebarColor = Color3.fromRGB(0, 0, 0),
SidebarTransparency = 0.9,
BorderColor = Color3.fromRGB(100, 100, 140),
NotificationColor = Color3.fromRGB(4, 4, 6),
StatusColor = Color3.fromRGB(4, 4, 6),
DialogColor = Color3.fromRGB(6, 6, 10),
ButtonColor = Color3.fromRGB(12, 12, 18),
ToggleColor = Color3.fromRGB(40, 40, 50),
TogglerHeadColor = Color3.fromRGB(160, 160, 180),
SliderColor = Color3.fromRGB(40, 40, 50),
SliderHeadColor = Color3.fromRGB(100, 100, 140),
DropdownColor = Color3.fromRGB(10, 10, 15),
InputFieldColor = Color3.fromRGB(160, 160, 180),
InputValueBackground = 0.95,
InputFieldTransparency = 0.6,
ScrollbarColor = Color3.fromRGB(100, 100, 140),
ScrollbarTransparency = 0.9,
SelectionColor = Color3.fromRGB(100, 100, 140),
HoverColor = Color3.fromRGB(140, 140, 180),
HoverTransparency = 0.95,
ActiveColor = Color3.fromRGB(80, 80, 120),
FocusColor = Color3.fromRGB(140, 140, 180),
DisabledOverlay = Color3.fromRGB(0, 0, 0),
DisabledTransparency = 0.7,
GradientEnabled = false,
GradientRotation = 0,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(0, 0, 0)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(8, 8, 12))
},
NoiseEnabled = false,
NoiseScale = 100,
NoiseTransparency = 1,
ParticlesEnabled = false,
ParticleCount = 8,
ParticleColor = Color3.fromRGB(100, 100, 140),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.2,
FontFamily = "Trebuchet MS",
FontWeight = "Regular",
FontSize = 13,
LineHeight = 1.35,
LetterSpacing = 0.1,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = true,
ColorBlindMode = "None",
ThemeVariant = "Dark",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(100, 100, 140),
MinimizeColor = Color3.fromRGB(100, 100, 140),
ExitColor = Color3.fromRGB(80, 80, 120),
Version = "2.0"
},
Glass = {
Name = "Glass",
Background = Color3.fromRGB(255, 255, 255),
Foreground = Color3.fromRGB(255, 255, 255),
Surface = Color3.fromRGB(250, 250, 250),
TextPrimary = Color3.fromRGB(255, 255, 255),
TextSecondary = Color3.fromRGB(255, 255, 255),
TextDisabled = Color3.fromRGB(180, 180, 180),
AccentPrimary = Color3.fromRGB(255, 255, 255),
AccentSecondary = Color3.fromRGB(255, 255, 255),
AccentTertiary = Color3.fromRGB(255, 255, 255),
SuccessColor = Color3.fromRGB(16, 124, 16),
WarningColor = Color3.fromRGB(255, 185, 0),
ErrorColor = Color3.fromRGB(196, 43, 28),
InfoColor = Color3.fromRGB(0, 120, 215),
ShadowColor = Color3.fromRGB(0, 0, 0),
GlowColor = Color3.fromRGB(0, 120, 215),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(0, 120, 215)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(120, 180, 255)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(255, 255, 255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(240, 240, 240))
}),
BackgroundTransparency = 1,
SurfaceTransparency = 0.1,
StrokeTransparency = 0.8,
ShadowTransparency = 1,
GlowTransparency = 0,
CornerRadius = 12,
StrokeThickness = 1,
ShadowSize = 25,
GlowSize = 20,
AnimationSpeed = 0.3,
BlurIntensity = 80,
ShadowOffset = Vector2.new(0, 6),
WallpaperEnabled = false,
WallpaperTransparency = 1,
WallpaperBlending = "Normal",
HeaderColor = Color3.fromRGB(255, 255, 255),
HeaderTransparency = 0.2,
SidebarColor = Color3.fromRGB(250, 250, 250),
SidebarTransparency = 1,
BorderColor = Color3.fromRGB(200, 200, 200),
NotificationColor = Color3.fromRGB(255, 255, 255),
StatusColor = Color3.fromRGB(255, 255, 255),
DialogColor = Color3.fromRGB(255, 255, 255),
ButtonColor = Color3.fromRGB(240, 240, 240),
ToggleColor = Color3.fromRGB(200, 200, 200),
TogglerHeadColor = Color3.fromRGB(255, 255, 255),
SliderColor = Color3.fromRGB(200, 200, 200),
SliderHeadColor = Color3.fromRGB(0, 120, 215),
DropdownColor = Color3.fromRGB(245, 245, 245),
InputFieldColor = Color3.fromRGB(255, 255, 255),
InputValueBackground = 0.95,
InputFieldTransparency = 0.85,
ScrollbarColor = Color3.fromRGB(120, 120, 120),
ScrollbarTransparency = 0.6,
SelectionColor = Color3.fromRGB(255, 255, 255),
HoverColor = Color3.fromRGB(0, 0, 0),
HoverTransparency = 0.9,
ActiveColor = Color3.fromRGB(0, 120, 215),
FocusColor = Color3.fromRGB(0, 120, 215),
DisabledOverlay = Color3.fromRGB(255, 255, 255),
DisabledTransparency = 0.6,
GradientEnabled = true,
GradientRotation = 45,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 255, 255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(240, 240, 240))
},
NoiseEnabled = false,
NoiseScale = 50,
NoiseTransparency = 0.98,
ParticlesEnabled = false,
ParticleCount = 15,
ParticleColor = Color3.fromRGB(0, 120, 215),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.3,
FontFamily = "Segoe UI",
FontWeight = "Regular",
FontSize = 14,
LineHeight = 1.3,
LetterSpacing = 0.5,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Light",
AccentColorSource = "System",
AutoDarkMode = true,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(200, 200, 200),
MinimizeColor = Color3.fromRGB(200, 200, 200),
ExitColor = Color3.fromRGB(122, 122, 122),
Version = "2.0"
},
Dark = {
Name = "Dark",
Background = Color3.fromRGB(5, 5, 5),
Foreground = Color3.fromRGB(220, 220, 220),
Surface = Color3.fromRGB(20, 20, 20),
TextPrimary = Color3.fromRGB(220, 220, 220),
TextSecondary = Color3.fromRGB(140, 140, 140),
TextDisabled = Color3.fromRGB(90, 90, 90),
AccentPrimary = Color3.fromRGB(220, 220, 220),
AccentSecondary = Color3.fromRGB(48, 120, 230),
AccentTertiary = Color3.fromRGB(220, 220, 220),
SuccessColor = Color3.fromRGB(36, 120, 47),
WarningColor = Color3.fromRGB(190, 150, 0),
ErrorColor = Color3.fromRGB(180, 40, 55),
InfoColor = Color3.fromRGB(18, 130, 150),
ShadowColor = Color3.fromRGB(0, 0, 0),
GlowColor = Color3.fromRGB(80, 120, 200),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(0, 90, 220)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(80, 120, 200)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(220, 220, 220)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(140, 140, 140))
}),
BackgroundTransparency = WaveLibrarySettings.AcrylicBlur and 0.1 or 0,
SurfaceTransparency = 0.04,
StrokeTransparency = 0.9,
ShadowTransparency = 0,
GlowTransparency = 0.85,
CornerRadius = 10,
StrokeThickness = 1,
ShadowSize = 20,
GlowSize = 15,
AnimationSpeed = 0.2,
BlurIntensity = 60,
ShadowOffset = Vector2.new(0, 4),
WallpaperEnabled = true,
WallpaperTransparency = 0.75,
WallpaperBlending = "Multiply",
HeaderColor = Color3.fromRGB(200, 200, 200),
HeaderTransparency = 0.4,
SidebarColor = Color3.fromRGB(0, 0, 0),
SidebarTransparency = 0.8,
BorderColor = Color3.fromRGB(200, 200, 200),
NotificationColor = Color3.fromRGB(10, 10, 10),
StatusColor = Color3.fromRGB(10, 10, 10),
DialogColor = Color3.fromRGB(10, 10, 10),
ButtonColor = Color3.fromRGB(15, 15, 15),
ToggleColor = Color3.fromRGB(65, 65, 65),
TogglerHeadColor = Color3.fromRGB(220, 220, 220),
SliderColor = Color3.fromRGB(65, 65, 65),
SliderHeadColor = Color3.fromRGB(220, 220, 220),
DropdownColor = Color3.fromRGB(15, 15, 15),
InputFieldColor = Color3.fromRGB(200, 200, 200),
InputValueBackground = 0.95,
InputFieldTransparency = 0.5,
ScrollbarColor = Color3.fromRGB(200, 200, 200),
ScrollbarTransparency = 0.85,
SelectionColor = Color3.fromRGB(200, 200, 200),
HoverColor = Color3.fromRGB(200, 200, 200),
HoverTransparency = 0.95,
ActiveColor = Color3.fromRGB(0, 90, 220),
FocusColor = Color3.fromRGB(80, 120, 200),
DisabledOverlay = Color3.fromRGB(0, 0, 0),
DisabledTransparency = 0.55,
GradientEnabled = false,
GradientRotation = 0,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(5, 5, 5)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(15, 15, 15))
},
NoiseEnabled = false,
NoiseScale = 100,
NoiseTransparency = 0.97,
ParticlesEnabled = false,
ParticleCount = 20,
ParticleColor = Color3.fromRGB(200, 200, 200),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.5,
FontFamily = "Inter",
FontWeight = "Medium",
FontSize = 14,
LineHeight = 1.4,
LetterSpacing = 0,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Auto",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(220, 220, 220),
MinimizeColor = Color3.fromRGB(220, 220, 220),
ExitColor = Color3.fromRGB(154, 154, 154),
Version = "2.0"
},
Aurora = {
Name = "Aurora",
Background = Color3.fromRGB(10, 12, 28),
Foreground = Color3.fromRGB(220, 240, 255),
Surface = Color3.fromRGB(20, 25, 45),
TextPrimary = Color3.fromRGB(220, 240, 255),
TextSecondary = Color3.fromRGB(160, 180, 200),
TextDisabled = Color3.fromRGB(100, 120, 140),
AccentPrimary = Color3.fromRGB(120, 255, 196),
AccentSecondary = Color3.fromRGB(100, 180, 255),
AccentTertiary = Color3.fromRGB(240, 120, 255),
SuccessColor = Color3.fromRGB(40, 190, 130),
WarningColor = Color3.fromRGB(255, 200, 50),
ErrorColor = Color3.fromRGB(240, 60, 80),
InfoColor = Color3.fromRGB(60, 170, 255),
ShadowColor = Color3.fromRGB(0, 0, 0),
GlowColor = Color3.fromRGB(120, 255, 196),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(100, 180, 255)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(120, 255, 196)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(240, 120, 255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(220, 240, 255))
}),
BackgroundTransparency = WaveLibrarySettings.AcrylicBlur and 0.07 or 0,
SurfaceTransparency = 0.03,
StrokeTransparency = 0.9,
ShadowTransparency = 0,
GlowTransparency = 0.75,
CornerRadius = 12,
StrokeThickness = 1,
ShadowSize = 30,
GlowSize = 20,
AnimationSpeed = 0.25,
BlurIntensity = 60,
ShadowOffset = Vector2.new(0, 4),
WallpaperEnabled = true,
WallpaperTransparency = 0.6,
WallpaperBlending = "Overlay",
HeaderColor = Color3.fromRGB(120, 255, 196),
HeaderTransparency = 0.3,
SidebarColor = Color3.fromRGB(5, 10, 20),
SidebarTransparency = 0.7,
BorderColor = Color3.fromRGB(120, 255, 196),
NotificationColor = Color3.fromRGB(15, 15, 30),
StatusColor = Color3.fromRGB(20, 20, 35),
DialogColor = Color3.fromRGB(25, 30, 50),
ButtonColor = Color3.fromRGB(25, 35, 55),
ToggleColor = Color3.fromRGB(80, 130, 180),
TogglerHeadColor = Color3.fromRGB(240, 240, 255),
SliderColor = Color3.fromRGB(80, 130, 180),
SliderHeadColor = Color3.fromRGB(120, 255, 196),
DropdownColor = Color3.fromRGB(25, 35, 55),
InputFieldColor = Color3.fromRGB(220, 240, 255),
InputValueBackground = 0.95,
InputFieldTransparency = 0.4,
ScrollbarColor = Color3.fromRGB(220, 240, 255),
ScrollbarTransparency = 0.75,
SelectionColor = Color3.fromRGB(120, 255, 196),
HoverColor = Color3.fromRGB(255, 255, 255),
HoverTransparency = 0.95,
ActiveColor = Color3.fromRGB(100, 180, 255),
FocusColor = Color3.fromRGB(120, 255, 196),
DisabledOverlay = Color3.fromRGB(0, 0, 0),
DisabledTransparency = 0.5,
GradientEnabled = true,
GradientRotation = 45,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(10, 12, 28)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(25, 35, 60))
},
NoiseEnabled = true,
NoiseScale = 75,
NoiseTransparency = 0.96,
ParticlesEnabled = true,
ParticleCount = 25,
ParticleColor = Color3.fromRGB(120, 255, 196),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.4,
FontFamily = "Poppins",
FontWeight = "SemiBold",
FontSize = 14,
LineHeight = 1.4,
LetterSpacing = 0.2,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = true,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Dark",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(220, 240, 255),
MinimizeColor = Color3.fromRGB(220, 240, 255),
ExitColor = Color3.fromRGB(120, 255, 196),
Version = "2.0"
},
Neon = {
Name = "Neon",
Background = Color3.fromRGB(8, 8, 12),
Foreground = Color3.fromRGB(255, 20, 147),
Surface = Color3.fromRGB(18, 18, 25),
TextPrimary = Color3.fromRGB(255, 255, 255),
TextSecondary = Color3.fromRGB(255, 20, 147),
TextDisabled = Color3.fromRGB(100, 100, 120),
AccentPrimary = Color3.fromRGB(255, 20, 147),
AccentSecondary = Color3.fromRGB(0, 255, 255),
AccentTertiary = Color3.fromRGB(255, 255, 0),
SuccessColor = Color3.fromRGB(0, 255, 127),
WarningColor = Color3.fromRGB(255, 165, 0),
ErrorColor = Color3.fromRGB(255, 69, 0),
InfoColor = Color3.fromRGB(0, 191, 255),
ShadowColor = Color3.fromRGB(255, 20, 147),
GlowColor = Color3.fromRGB(255, 20, 147),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 20, 147)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(0, 255, 255)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(255, 255, 0)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 255, 255))
}),
BackgroundTransparency = 0,
SurfaceTransparency = 0.05,
StrokeTransparency = 0.7,
ShadowTransparency = 0,
GlowTransparency = 0.6,
CornerRadius = 8,
StrokeThickness = 2,
ShadowSize = 25,
GlowSize = 30,
AnimationSpeed = 0.15,
BlurIntensity = 40,
ShadowOffset = Vector2.new(0, 5),
WallpaperEnabled = false,
WallpaperTransparency = 1,
WallpaperBlending = "Normal",
HeaderColor = Color3.fromRGB(255, 20, 147),
HeaderTransparency = 0.2,
SidebarColor = Color3.fromRGB(5, 5, 8),
SidebarTransparency = 0.6,
BorderColor = Color3.fromRGB(255, 20, 147),
NotificationColor = Color3.fromRGB(12, 12, 18),
StatusColor = Color3.fromRGB(12, 12, 18),
DialogColor = Color3.fromRGB(15, 15, 22),
ButtonColor = Color3.fromRGB(30, 30, 40),
ToggleColor = Color3.fromRGB(60, 60, 80),
TogglerHeadColor = Color3.fromRGB(255, 20, 147),
SliderColor = Color3.fromRGB(60, 60, 80),
SliderHeadColor = Color3.fromRGB(0, 255, 255),
DropdownColor = Color3.fromRGB(25, 25, 35),
InputFieldColor = Color3.fromRGB(255, 255, 255),
InputValueBackground = 0.95,
InputFieldTransparency = 0.3,
ScrollbarColor = Color3.fromRGB(255, 20, 147),
ScrollbarTransparency = 0.7,
SelectionColor = Color3.fromRGB(255, 20, 147),
HoverColor = Color3.fromRGB(255, 20, 147),
HoverTransparency = 0.9,
ActiveColor = Color3.fromRGB(0, 255, 255),
FocusColor = Color3.fromRGB(255, 255, 0),
DisabledOverlay = Color3.fromRGB(0, 0, 0),
DisabledTransparency = 0.6,
GradientEnabled = true,
GradientRotation = 90,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(8, 8, 12)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(25, 25, 35))
},
NoiseEnabled = false,
NoiseScale = 80,
NoiseTransparency = 0.98,
ParticlesEnabled = true,
ParticleCount = 30,
ParticleColor = Color3.fromRGB(255, 20, 147),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.6,
FontFamily = "Roboto Mono",
FontWeight = "Bold",
FontSize = 14,
LineHeight = 1.3,
LetterSpacing = 0.5,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Dark",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(255, 20, 147),
MinimizeColor = Color3.fromRGB(255, 20, 147),
ExitColor = Color3.fromRGB(179, 14, 103),
Version = "2.0"
},
Forest = {
Name = "Forest",
Background = Color3.fromRGB(12, 20, 12),
Foreground = Color3.fromRGB(200, 220, 180),
Surface = Color3.fromRGB(25, 35, 25),
TextPrimary = Color3.fromRGB(200, 220, 180),
TextSecondary = Color3.fromRGB(150, 180, 130),
TextDisabled = Color3.fromRGB(100, 120, 90),
AccentPrimary = Color3.fromRGB(100, 200, 100),
AccentSecondary = Color3.fromRGB(80, 160, 80),
AccentTertiary = Color3.fromRGB(120, 180, 60),
SuccessColor = Color3.fromRGB(60, 180, 60),
WarningColor = Color3.fromRGB(200, 160, 60),
ErrorColor = Color3.fromRGB(180, 80, 60),
InfoColor = Color3.fromRGB(80, 140, 200),
ShadowColor = Color3.fromRGB(0, 0, 0),
GlowColor = Color3.fromRGB(100, 200, 100),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(80, 160, 80)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(100, 200, 100)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(120, 180, 60)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(200, 220, 180))
}),
BackgroundTransparency = WaveLibrarySettings.AcrylicBlur and 0.05 or 0,
SurfaceTransparency = 0.03,
StrokeTransparency = 0.9,
ShadowTransparency = 0,
GlowTransparency = 0.8,
CornerRadius = 15,
StrokeThickness = 1,
ShadowSize = 20,
GlowSize = 18,
AnimationSpeed = 0.3,
BlurIntensity = 55,
ShadowOffset = Vector2.new(0, 3),
WallpaperEnabled = true,
WallpaperTransparency = 0.7,
WallpaperBlending = "Overlay",
HeaderColor = Color3.fromRGB(100, 200, 100),
HeaderTransparency = 0.25,
SidebarColor = Color3.fromRGB(8, 15, 8),
SidebarTransparency = 0.75,
BorderColor = Color3.fromRGB(100, 200, 100),
NotificationColor = Color3.fromRGB(18, 25, 18),
StatusColor = Color3.fromRGB(18, 25, 18),
DialogColor = Color3.fromRGB(20, 30, 20),
ButtonColor = Color3.fromRGB(35, 45, 35),
ToggleColor = Color3.fromRGB(70, 90, 70),
TogglerHeadColor = Color3.fromRGB(200, 220, 180),
SliderColor = Color3.fromRGB(70, 90, 70),
SliderHeadColor = Color3.fromRGB(100, 200, 100),
DropdownColor = Color3.fromRGB(30, 40, 30),
InputFieldColor = Color3.fromRGB(200, 220, 180),
InputValueBackground = 0.95,
InputFieldTransparency = 0.4,
ScrollbarColor = Color3.fromRGB(100, 200, 100),
ScrollbarTransparency = 0.8,
SelectionColor = Color3.fromRGB(100, 200, 100),
HoverColor = Color3.fromRGB(100, 200, 100),
HoverTransparency = 0.93,
ActiveColor = Color3.fromRGB(80, 160, 80),
FocusColor = Color3.fromRGB(120, 180, 60),
DisabledOverlay = Color3.fromRGB(0, 0, 0),
DisabledTransparency = 0.5,
GradientEnabled = true,
GradientRotation = 30,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(12, 20, 12)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(30, 40, 25))
},
NoiseEnabled = true,
NoiseScale = 120,
NoiseTransparency = 0.97,
ParticlesEnabled = false,
ParticleCount = 15,
ParticleColor = Color3.fromRGB(100, 200, 100),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.3,
FontFamily = "Source Sans Pro",
FontWeight = "Regular",
FontSize = 14,
LineHeight = 1.5,
LetterSpacing = 0.1,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Dark",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(100, 200, 100),
MinimizeColor = Color3.fromRGB(100, 200, 100),
ExitColor = Color3.fromRGB(70, 140, 70),
Version = "2.0"
},
Sunset = {
Name = "Sunset",
Background = Color3.fromRGB(25, 15, 35),
Foreground = Color3.fromRGB(255, 200, 150),
Surface = Color3.fromRGB(40, 25, 50),
TextPrimary = Color3.fromRGB(255, 200, 150),
TextSecondary = Color3.fromRGB(220, 160, 120),
TextDisabled = Color3.fromRGB(150, 120, 100),
AccentPrimary = Color3.fromRGB(255, 140, 80),
AccentSecondary = Color3.fromRGB(255, 100, 150),
AccentTertiary = Color3.fromRGB(200, 80, 200),
SuccessColor = Color3.fromRGB(150, 200, 80),
WarningColor = Color3.fromRGB(255, 180, 60),
ErrorColor = Color3.fromRGB(255, 80, 80),
InfoColor = Color3.fromRGB(120, 160, 255),
ShadowColor = Color3.fromRGB(0, 0, 0),
GlowColor = Color3.fromRGB(255, 140, 80),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 100, 150)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(255, 140, 80)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(200, 80, 200)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 200, 150))
}),
BackgroundTransparency = WaveLibrarySettings.AcrylicBlur and 0.06 or 0,
SurfaceTransparency = 0.04,
StrokeTransparency = 0.85,
ShadowTransparency = 0,
GlowTransparency = 0.75,
CornerRadius = 14,
StrokeThickness = 1,
ShadowSize = 25,
GlowSize = 22,
AnimationSpeed = 0.25,
BlurIntensity = 65,
ShadowOffset = Vector2.new(0, 4),
WallpaperEnabled = true,
WallpaperTransparency = 0.6,
WallpaperBlending = "Overlay",
HeaderColor = Color3.fromRGB(255, 140, 80),
HeaderTransparency = 0.3,
SidebarColor = Color3.fromRGB(15, 10, 25),
SidebarTransparency = 0.7,
BorderColor = Color3.fromRGB(255, 140, 80),
NotificationColor = Color3.fromRGB(30, 20, 40),
StatusColor = Color3.fromRGB(30, 20, 40),
DialogColor = Color3.fromRGB(35, 25, 45),
ButtonColor = Color3.fromRGB(50, 35, 60),
ToggleColor = Color3.fromRGB(90, 70, 100),
TogglerHeadColor = Color3.fromRGB(255, 200, 150),
SliderColor = Color3.fromRGB(90, 70, 100),
SliderHeadColor = Color3.fromRGB(255, 140, 80),
DropdownColor = Color3.fromRGB(45, 30, 55),
InputFieldColor = Color3.fromRGB(255, 200, 150),
InputValueBackground = 0.95,
InputFieldTransparency = 0.42,
ScrollbarColor = Color3.fromRGB(255, 140, 80),
ScrollbarTransparency = 0.78,
SelectionColor = Color3.fromRGB(255, 140, 80),
HoverColor = Color3.fromRGB(255, 140, 80),
HoverTransparency = 0.92,
ActiveColor = Color3.fromRGB(255, 100, 150),
FocusColor = Color3.fromRGB(200, 80, 200),
DisabledOverlay = Color3.fromRGB(0, 0, 0),
DisabledTransparency = 0.52,
GradientEnabled = true,
GradientRotation = 135,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(25, 15, 35)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(45, 25, 55)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(60, 30, 45))
},
NoiseEnabled = false,
NoiseScale = 90,
NoiseTransparency = 0.95,
ParticlesEnabled = true,
ParticleCount = 20,
ParticleColor = Color3.fromRGB(255, 140, 80),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.4,
FontFamily = "Nunito",
FontWeight = "SemiBold",
FontSize = 14,
LineHeight = 1.4,
LetterSpacing = 0.3,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Dark",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(255, 140, 80),
MinimizeColor = Color3.fromRGB(255, 140, 80),
ExitColor = Color3.fromRGB(179, 98, 56),
Version = "2.0"
},
Ocean = {
Name = "Ocean",
Background = Color3.fromRGB(8, 25, 40),
Foreground = Color3.fromRGB(200, 230, 255),
Surface = Color3.fromRGB(15, 35, 55),
TextPrimary = Color3.fromRGB(200, 230, 255),
TextSecondary = Color3.fromRGB(150, 190, 220),
TextDisabled = Color3.fromRGB(100, 140, 170),
AccentPrimary = Color3.fromRGB(100, 200, 255),
AccentSecondary = Color3.fromRGB(50, 150, 255),
AccentTertiary = Color3.fromRGB(150, 220, 255),
SuccessColor = Color3.fromRGB(50, 200, 150),
WarningColor = Color3.fromRGB(255, 200, 100),
ErrorColor = Color3.fromRGB(255, 100, 120),
InfoColor = Color3.fromRGB(100, 180, 255),
ShadowColor = Color3.fromRGB(0, 0, 0),
GlowColor = Color3.fromRGB(100, 200, 255),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(50, 150, 255)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(100, 200, 255)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(150, 220, 255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(200, 230, 255))
}),
BackgroundTransparency = WaveLibrarySettings.AcrylicBlur and 0.08 or 0,
SurfaceTransparency = 0.05,
StrokeTransparency = 0.88,
ShadowTransparency = 0,
GlowTransparency = 0.78,
CornerRadius = 12,
StrokeThickness = 1,
ShadowSize = 22,
GlowSize = 20,
AnimationSpeed = 0.28,
BlurIntensity = 70,
ShadowOffset = Vector2.new(0, 5),
WallpaperEnabled = true,
WallpaperTransparency = 0.65,
WallpaperBlending = "Multiply",
HeaderColor = Color3.fromRGB(100, 200, 255),
HeaderTransparency = 0.28,
SidebarColor = Color3.fromRGB(5, 18, 30),
SidebarTransparency = 0.72,
BorderColor = Color3.fromRGB(100, 200, 255),
NotificationColor = Color3.fromRGB(12, 30, 45),
StatusColor = Color3.fromRGB(12, 30, 45),
DialogColor = Color3.fromRGB(18, 40, 60),
ButtonColor = Color3.fromRGB(25, 45, 70),
ToggleColor = Color3.fromRGB(60, 90, 120),
TogglerHeadColor = Color3.fromRGB(200, 230, 255),
SliderColor = Color3.fromRGB(60, 90, 120),
SliderHeadColor = Color3.fromRGB(100, 200, 255),
DropdownColor = Color3.fromRGB(20, 40, 65),
InputFieldColor = Color3.fromRGB(200, 230, 255),
InputValueBackground = 0.95,
InputFieldTransparency = 0.38,
ScrollbarColor = Color3.fromRGB(100, 200, 255),
ScrollbarTransparency = 0.76,
SelectionColor = Color3.fromRGB(100, 200, 255),
HoverColor = Color3.fromRGB(150, 220, 255),
HoverTransparency = 0.91,
ActiveColor = Color3.fromRGB(50, 150, 255),
FocusColor = Color3.fromRGB(150, 220, 255),
DisabledOverlay = Color3.fromRGB(0, 0, 0),
DisabledTransparency = 0.48,
GradientEnabled = true,
GradientRotation = 180,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(8, 25, 40)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(20, 40, 65))
},
NoiseEnabled = true,
NoiseScale = 110,
NoiseTransparency = 0.96,
ParticlesEnabled = true,
ParticleCount = 18,
ParticleColor = Color3.fromRGB(100, 200, 255),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.35,
FontFamily = "Open Sans",
FontWeight = "Regular",
FontSize = 14,
LineHeight = 1.45,
LetterSpacing = 0.2,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Dark",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(100, 200, 255),
MinimizeColor = Color3.fromRGB(100, 200, 255),
ExitColor = Color3.fromRGB(70, 140, 179),
Version = "2.0"
},
Midnight = {
Name = "Midnight",
Background = Color3.fromRGB(2, 2, 8),
Foreground = Color3.fromRGB(180, 180, 200),
Surface = Color3.fromRGB(8, 8, 18),
TextPrimary = Color3.fromRGB(180, 180, 200),
TextSecondary = Color3.fromRGB(120, 120, 150),
TextDisabled = Color3.fromRGB(70, 70, 90),
AccentPrimary = Color3.fromRGB(140, 140, 200),
AccentSecondary = Color3.fromRGB(100, 100, 180),
AccentTertiary = Color3.fromRGB(160, 160, 220),
SuccessColor = Color3.fromRGB(80, 160, 100),
WarningColor = Color3.fromRGB(200, 160, 80),
ErrorColor = Color3.fromRGB(180, 80, 80),
InfoColor = Color3.fromRGB(80, 120, 200),
ShadowColor = Color3.fromRGB(0, 0, 0),
GlowColor = Color3.fromRGB(140, 140, 200),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(100, 100, 180)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(140, 140, 200)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(160, 160, 220)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(180, 180, 200))
}),
BackgroundTransparency = WaveLibrarySettings.AcrylicBlur and 0.03 or 0,
SurfaceTransparency = 0.02,
StrokeTransparency = 0.92,
ShadowTransparency = 0,
GlowTransparency = 0.85,
CornerRadius = 8,
StrokeThickness = 1,
ShadowSize = 18,
GlowSize = 15,
AnimationSpeed = 0.18,
BlurIntensity = 45,
ShadowOffset = Vector2.new(0, 3),
WallpaperEnabled = true,
WallpaperTransparency = 0.8,
WallpaperBlending = "Multiply",
HeaderColor = Color3.fromRGB(140, 140, 200),
HeaderTransparency = 0.35,
SidebarColor = Color3.fromRGB(1, 1, 5),
SidebarTransparency = 0.8,
BorderColor = Color3.fromRGB(140, 140, 200),
NotificationColor = Color3.fromRGB(5, 5, 12),
StatusColor = Color3.fromRGB(5, 5, 12),
DialogColor = Color3.fromRGB(10, 10, 20),
ButtonColor = Color3.fromRGB(12, 12, 25),
ToggleColor = Color3.fromRGB(50, 50, 70),
TogglerHeadColor = Color3.fromRGB(180, 180, 200),
SliderColor = Color3.fromRGB(50, 50, 70),
SliderHeadColor = Color3.fromRGB(140, 140, 200),
DropdownColor = Color3.fromRGB(10, 10, 22),
InputFieldColor = Color3.fromRGB(180, 180, 200),
InputValueBackground = 0.95,
InputFieldTransparency = 0.5,
ScrollbarColor = Color3.fromRGB(140, 140, 200),
ScrollbarTransparency = 0.85,
SelectionColor = Color3.fromRGB(140, 140, 200),
HoverColor = Color3.fromRGB(160, 160, 220),
HoverTransparency = 0.94,
ActiveColor = Color3.fromRGB(100, 100, 180),
FocusColor = Color3.fromRGB(160, 160, 220),
DisabledOverlay = Color3.fromRGB(0, 0, 0),
DisabledTransparency = 0.6,
GradientEnabled = false,
GradientRotation = 0,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(2, 2, 8)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(8, 8, 18))
},
NoiseEnabled = false,
NoiseScale = 80,
NoiseTransparency = 0.98,
ParticlesEnabled = false,
ParticleCount = 12,
ParticleColor = Color3.fromRGB(140, 140, 200),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.3,
FontFamily = "JetBrains Mono",
FontWeight = "Regular",
FontSize = 13,
LineHeight = 1.3,
LetterSpacing = 0.1,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Dark",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(140, 140, 200),
MinimizeColor = Color3.fromRGB(140, 140, 200),
ExitColor = Color3.fromRGB(98, 98, 140),
Version = "2.0"
},
Cherry = {
Name = "Cherry",
Background = Color3.fromRGB(40, 8, 15),
Foreground = Color3.fromRGB(255, 200, 210),
Surface = Color3.fromRGB(55, 15, 25),
TextPrimary = Color3.fromRGB(255, 200, 210),
TextSecondary = Color3.fromRGB(220, 160, 180),
TextDisabled = Color3.fromRGB(150, 100, 120),
AccentPrimary = Color3.fromRGB(255, 100, 140),
AccentSecondary = Color3.fromRGB(200, 50, 100),
AccentTertiary = Color3.fromRGB(255, 150, 180),
SuccessColor = Color3.fromRGB(100, 200, 120),
WarningColor = Color3.fromRGB(255, 180, 80),
ErrorColor = Color3.fromRGB(255, 80, 100),
InfoColor = Color3.fromRGB(150, 100, 255),
ShadowColor = Color3.fromRGB(0, 0, 0),
GlowColor = Color3.fromRGB(255, 100, 140),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(200, 50, 100)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(255, 100, 140)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(255, 150, 180)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 200, 210))
}),
BackgroundTransparency = WaveLibrarySettings.AcrylicBlur and 0.06 or 0,
SurfaceTransparency = 0.04,
StrokeTransparency = 0.87,
ShadowTransparency = 0,
GlowTransparency = 0.72,
CornerRadius = 16,
StrokeThickness = 1,
ShadowSize = 24,
GlowSize = 25,
AnimationSpeed = 0.22,
BlurIntensity = 58,
ShadowOffset = Vector2.new(0, 4),
WallpaperEnabled = true,
WallpaperTransparency = 0.68,
WallpaperBlending = "Overlay",
HeaderColor = Color3.fromRGB(255, 100, 140),
HeaderTransparency = 0.25,
SidebarColor = Color3.fromRGB(25, 5, 10),
SidebarTransparency = 0.75,
BorderColor = Color3.fromRGB(255, 100, 140),
NotificationColor = Color3.fromRGB(45, 12, 20),
StatusColor = Color3.fromRGB(45, 12, 20),
DialogColor = Color3.fromRGB(50, 18, 28),
ButtonColor = Color3.fromRGB(65, 25, 35),
ToggleColor = Color3.fromRGB(100, 50, 70),
TogglerHeadColor = Color3.fromRGB(255, 200, 210),
SliderColor = Color3.fromRGB(100, 50, 70),
SliderHeadColor = Color3.fromRGB(255, 100, 140),
DropdownColor = Color3.fromRGB(60, 22, 32),
InputFieldColor = Color3.fromRGB(255, 200, 210),
InputValueBackground = 0.95,
InputFieldTransparency = 0.4,
ScrollbarColor = Color3.fromRGB(255, 100, 140),
ScrollbarTransparency = 0.75,
SelectionColor = Color3.fromRGB(255, 100, 140),
HoverColor = Color3.fromRGB(255, 150, 180),
HoverTransparency = 0.9,
ActiveColor = Color3.fromRGB(200, 50, 100),
FocusColor = Color3.fromRGB(255, 150, 180),
DisabledOverlay = Color3.fromRGB(0, 0, 0),
DisabledTransparency = 0.5,
GradientEnabled = true,
GradientRotation = 120,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(40, 8, 15)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(60, 20, 30))
},
NoiseEnabled = false,
NoiseScale = 95,
NoiseTransparency = 0.96,
ParticlesEnabled = true,
ParticleCount = 22,
ParticleColor = Color3.fromRGB(255, 100, 140),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.38,
FontFamily = "Lato",
FontWeight = "Medium",
FontSize = 14,
LineHeight = 1.4,
LetterSpacing = 0.25,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Dark",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(255, 100, 140),
MinimizeColor = Color3.fromRGB(255, 100, 140),
ExitColor = Color3.fromRGB(179, 70, 98),
Version = "2.0"
},
Volcano = {
Name = "Volcano",
Background = Color3.fromRGB(20, 8, 5),
Foreground = Color3.fromRGB(255, 180, 120),
Surface = Color3.fromRGB(35, 15, 10),
TextPrimary = Color3.fromRGB(255, 180, 120),
TextSecondary = Color3.fromRGB(220, 140, 80),
TextDisabled = Color3.fromRGB(150, 100, 60),
AccentPrimary = Color3.fromRGB(255, 120, 40),
AccentSecondary = Color3.fromRGB(220, 80, 20),
AccentTertiary = Color3.fromRGB(255, 160, 80),
SuccessColor = Color3.fromRGB(120, 180, 60),
WarningColor = Color3.fromRGB(255, 200, 60),
ErrorColor = Color3.fromRGB(255, 60, 40),
InfoColor = Color3.fromRGB(120, 160, 255),
ShadowColor = Color3.fromRGB(0, 0, 0),
GlowColor = Color3.fromRGB(255, 120, 40),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(220, 80, 20)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(255, 120, 40)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(255, 160, 80)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 180, 120))
}),
BackgroundTransparency = WaveLibrarySettings.AcrylicBlur and 0.05 or 0,
SurfaceTransparency = 0.03,
StrokeTransparency = 0.88,
ShadowTransparency = 0,
GlowTransparency = 0.7,
CornerRadius = 10,
StrokeThickness = 1,
ShadowSize = 28,
GlowSize = 30,
AnimationSpeed = 0.2,
BlurIntensity = 50,
ShadowOffset = Vector2.new(0, 5),
WallpaperEnabled = true,
WallpaperTransparency = 0.7,
WallpaperBlending = "Multiply",
HeaderColor = Color3.fromRGB(255, 120, 40),
HeaderTransparency = 0.2,
SidebarColor = Color3.fromRGB(12, 5, 3),
SidebarTransparency = 0.8,
BorderColor = Color3.fromRGB(255, 120, 40),
NotificationColor = Color3.fromRGB(25, 12, 8),
StatusColor = Color3.fromRGB(25, 12, 8),
DialogColor = Color3.fromRGB(30, 18, 12),
ButtonColor = Color3.fromRGB(45, 25, 15),
ToggleColor = Color3.fromRGB(80, 50, 30),
TogglerHeadColor = Color3.fromRGB(255, 180, 120),
SliderColor = Color3.fromRGB(80, 50, 30),
SliderHeadColor = Color3.fromRGB(255, 120, 40),
DropdownColor = Color3.fromRGB(40, 22, 15),
InputFieldColor = Color3.fromRGB(255, 180, 120),
InputValueBackground = 0.95,
InputFieldTransparency = 0.35,
ScrollbarColor = Color3.fromRGB(255, 120, 40),
ScrollbarTransparency = 0.75,
SelectionColor = Color3.fromRGB(255, 120, 40),
HoverColor = Color3.fromRGB(255, 160, 80),
HoverTransparency = 0.88,
ActiveColor = Color3.fromRGB(220, 80, 20),
FocusColor = Color3.fromRGB(255, 160, 80),
DisabledOverlay = Color3.fromRGB(0, 0, 0),
DisabledTransparency = 0.55,
GradientEnabled = true,
GradientRotation = 270,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(20, 8, 5)),
ColorSequenceKeypoint.new(0.6, Color3.fromRGB(40, 18, 10)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(60, 25, 15))
},
NoiseEnabled = true,
NoiseScale = 85,
NoiseTransparency = 0.94,
ParticlesEnabled = true,
ParticleCount = 35,
ParticleColor = Color3.fromRGB(255, 120, 40),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.45,
FontFamily = "Ubuntu",
FontWeight = "Medium",
FontSize = 14,
LineHeight = 1.35,
LetterSpacing = 0.15,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Dark",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(255, 120, 40),
MinimizeColor = Color3.fromRGB(255, 120, 40),
ExitColor = Color3.fromRGB(179, 84, 28),
Version = "2.0"
},
Ice = {
Name = "Ice",
Background = Color3.fromRGB(240, 248, 255),
Foreground = Color3.fromRGB(25, 55, 85),
Surface = Color3.fromRGB(250, 253, 255),
TextPrimary = Color3.fromRGB(25, 55, 85),
TextSecondary = Color3.fromRGB(60, 90, 120),
TextDisabled = Color3.fromRGB(120, 140, 160),
AccentPrimary = Color3.fromRGB(100, 180, 255),
AccentSecondary = Color3.fromRGB(60, 140, 220),
AccentTertiary = Color3.fromRGB(140, 200, 255),
SuccessColor = Color3.fromRGB(40, 180, 120),
WarningColor = Color3.fromRGB(255, 160, 40),
ErrorColor = Color3.fromRGB(220, 60, 80),
InfoColor = Color3.fromRGB(80, 160, 255),
ShadowColor = Color3.fromRGB(100, 150, 200),
GlowColor = Color3.fromRGB(100, 180, 255),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(60, 140, 220)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(100, 180, 255)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(140, 200, 255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(25, 55, 85))
}),
BackgroundTransparency = 0,
SurfaceTransparency = 0.05,
StrokeTransparency = 0.7,
ShadowTransparency = 0.8,
GlowTransparency = 0.9,
CornerRadius = 16,
StrokeThickness = 1,
ShadowSize = 15,
GlowSize = 12,
AnimationSpeed = 0.35,
BlurIntensity = 30,
ShadowOffset = Vector2.new(0, 2),
WallpaperEnabled = false,
WallpaperTransparency = 1,
WallpaperBlending = "Normal",
HeaderColor = Color3.fromRGB(100, 180, 255),
HeaderTransparency = 0.15,
SidebarColor = Color3.fromRGB(245, 250, 255),
SidebarTransparency = 0.3,
BorderColor = Color3.fromRGB(180, 210, 240),
NotificationColor = Color3.fromRGB(248, 252, 255),
StatusColor = Color3.fromRGB(248, 252, 255),
DialogColor = Color3.fromRGB(252, 254, 255),
ButtonColor = Color3.fromRGB(245, 250, 255),
ToggleColor = Color3.fromRGB(200, 220, 240),
TogglerHeadColor = Color3.fromRGB(25, 55, 85),
SliderColor = Color3.fromRGB(200, 220, 240),
SliderHeadColor = Color3.fromRGB(100, 180, 255),
DropdownColor = Color3.fromRGB(248, 252, 255),
InputFieldColor = Color3.fromRGB(25, 55, 85),
InputValueBackground = 0.95,
InputFieldTransparency = 0.9,
ScrollbarColor = Color3.fromRGB(150, 180, 210),
ScrollbarTransparency = 0.6,
SelectionColor = Color3.fromRGB(100, 180, 255),
HoverColor = Color3.fromRGB(60, 140, 220),
HoverTransparency = 0.85,
ActiveColor = Color3.fromRGB(60, 140, 220),
FocusColor = Color3.fromRGB(140, 200, 255),
DisabledOverlay = Color3.fromRGB(200, 220, 240),
DisabledTransparency = 0.7,
GradientEnabled = true,
GradientRotation = 45,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(240, 248, 255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(250, 253, 255))
},
NoiseEnabled = false,
NoiseScale = 60,
NoiseTransparency = 0.99,
ParticlesEnabled = false,
ParticleCount = 10,
ParticleColor = Color3.fromRGB(100, 180, 255),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.2,
FontFamily = "Arial",
FontWeight = "Regular",
FontSize = 14,
LineHeight = 1.5,
LetterSpacing = 0.1,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Light",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(100, 180, 255),
MinimizeColor = Color3.fromRGB(100, 180, 255),
ExitColor = Color3.fromRGB(70, 126, 179),
Version = "2.0"
},
Matrix = {
Name = "Matrix",
Background = Color3.fromRGB(0, 0, 0),
Foreground = Color3.fromRGB(0, 255, 65),
Surface = Color3.fromRGB(5, 5, 5),
TextPrimary = Color3.fromRGB(0, 255, 65),
TextSecondary = Color3.fromRGB(0, 200, 50),
TextDisabled = Color3.fromRGB(0, 120, 30),
AccentPrimary = Color3.fromRGB(0, 255, 65),
AccentSecondary = Color3.fromRGB(0, 200, 50),
AccentTertiary = Color3.fromRGB(100, 255, 150),
SuccessColor = Color3.fromRGB(0, 255, 100),
WarningColor = Color3.fromRGB(255, 255, 0),
ErrorColor = Color3.fromRGB(255, 0, 0),
InfoColor = Color3.fromRGB(0, 255, 255),
ShadowColor = Color3.fromRGB(0, 100, 25),
GlowColor = Color3.fromRGB(0, 255, 65),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(0, 200, 50)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(0, 255, 65)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(100, 255, 150)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 255, 255))
}),
BackgroundTransparency = 0,
SurfaceTransparency = 0.02,
StrokeTransparency = 0.75,
ShadowTransparency = 0.5,
GlowTransparency = 0.6,
CornerRadius = 4,
StrokeThickness = 1,
ShadowSize = 20,
GlowSize = 25,
AnimationSpeed = 0.1,
BlurIntensity = 20,
ShadowOffset = Vector2.new(0, 3),
WallpaperEnabled = false,
WallpaperTransparency = 1,
WallpaperBlending = "Normal",
HeaderColor = Color3.fromRGB(0, 255, 65),
HeaderTransparency = 0.1,
SidebarColor = Color3.fromRGB(0, 0, 0),
SidebarTransparency = 0.9,
BorderColor = Color3.fromRGB(0, 255, 65),
NotificationColor = Color3.fromRGB(2, 2, 2),
StatusColor = Color3.fromRGB(2, 2, 2),
DialogColor = Color3.fromRGB(3, 3, 3),
ButtonColor = Color3.fromRGB(8, 8, 8),
ToggleColor = Color3.fromRGB(20, 60, 20),
TogglerHeadColor = Color3.fromRGB(0, 255, 65),
SliderColor = Color3.fromRGB(20, 60, 20),
SliderHeadColor = Color3.fromRGB(0, 255, 65),
DropdownColor = Color3.fromRGB(5, 5, 5),
InputFieldColor = Color3.fromRGB(0, 255, 65),
InputValueBackground = 0.95,
InputFieldTransparency = 0.2,
ScrollbarColor = Color3.fromRGB(0, 255, 65),
ScrollbarTransparency = 0.7,
SelectionColor = Color3.fromRGB(0, 255, 65),
HoverColor = Color3.fromRGB(0, 255, 65),
HoverTransparency = 0.9,
ActiveColor = Color3.fromRGB(0, 200, 50),
FocusColor = Color3.fromRGB(100, 255, 150),
DisabledOverlay = Color3.fromRGB(0, 0, 0),
DisabledTransparency = 0.7,
GradientEnabled = false,
GradientRotation = 0,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(0, 0, 0)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(5, 5, 5))
},
NoiseEnabled = true,
NoiseScale = 50,
NoiseTransparency = 0.93,
ParticlesEnabled = true,
ParticleCount = 40,
ParticleColor = Color3.fromRGB(0, 255, 65),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.8,
FontFamily = "Courier New",
FontWeight = "Bold",
FontSize = 13,
LineHeight = 1.2,
LetterSpacing = 1,
AntiAliasing = false,
SubPixelRendering = false,
DynamicTypeScaling = false,
HighContrastMode = true,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Dark",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(0, 255, 65),
MinimizeColor = Color3.fromRGB(0, 255, 65),
ExitColor = Color3.fromRGB(0, 179, 45),
Version = "2.0"
},
Pastel = {
Name = "Pastel",
Background = Color3.fromRGB(252, 250, 255),
Foreground = Color3.fromRGB(80, 70, 90),
Surface = Color3.fromRGB(248, 245, 252),
TextPrimary = Color3.fromRGB(80, 70, 90),
TextSecondary = Color3.fromRGB(120, 110, 130),
TextDisabled = Color3.fromRGB(160, 150, 170),
AccentPrimary = Color3.fromRGB(200, 150, 255),
AccentSecondary = Color3.fromRGB(150, 200, 255),
AccentTertiary = Color3.fromRGB(255, 200, 200),
SuccessColor = Color3.fromRGB(150, 255, 180),
WarningColor = Color3.fromRGB(255, 220, 150),
ErrorColor = Color3.fromRGB(255, 170, 170),
InfoColor = Color3.fromRGB(170, 200, 255),
ShadowColor = Color3.fromRGB(200, 180, 220),
GlowColor = Color3.fromRGB(200, 150, 255),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(150, 200, 255)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(200, 150, 255)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(255, 200, 200)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(80, 70, 90))
}),
BackgroundTransparency = 0,
SurfaceTransparency = 0.08,
StrokeTransparency = 0.75,
ShadowTransparency = 0.85,
GlowTransparency = 0.9,
CornerRadius = 20,
StrokeThickness = 1,
ShadowSize = 12,
GlowSize = 10,
AnimationSpeed = 0.4,
BlurIntensity = 25,
ShadowOffset = Vector2.new(0, 2),
WallpaperEnabled = false,
WallpaperTransparency = 1,
WallpaperBlending = "Normal",
HeaderColor = Color3.fromRGB(200, 150, 255),
HeaderTransparency = 0.2,
SidebarColor = Color3.fromRGB(248, 245, 252),
SidebarTransparency = 0.4,
BorderColor = Color3.fromRGB(220, 200, 240),
NotificationColor = Color3.fromRGB(250, 248, 254),
StatusColor = Color3.fromRGB(250, 248, 254),
DialogColor = Color3.fromRGB(254, 252, 255),
ButtonColor = Color3.fromRGB(245, 240, 250),
ToggleColor = Color3.fromRGB(220, 200, 240),
TogglerHeadColor = Color3.fromRGB(80, 70, 90),
SliderColor = Color3.fromRGB(220, 200, 240),
SliderHeadColor = Color3.fromRGB(200, 150, 255),
DropdownColor = Color3.fromRGB(250, 245, 255),
InputFieldColor = Color3.fromRGB(80, 70, 90),
InputValueBackground = 0.95,
InputFieldTransparency = 0.85,
ScrollbarColor = Color3.fromRGB(180, 160, 200),
ScrollbarTransparency = 0.65,
SelectionColor = Color3.fromRGB(200, 150, 255),
HoverColor = Color3.fromRGB(150, 200, 255),
HoverTransparency = 0.8,
ActiveColor = Color3.fromRGB(150, 200, 255),
FocusColor = Color3.fromRGB(255, 200, 200),
DisabledOverlay = Color3.fromRGB(240, 230, 250),
DisabledTransparency = 0.75,
GradientEnabled = true,
GradientRotation = 60,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(252, 250, 255)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(250, 245, 255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(248, 245, 252))
},
NoiseEnabled = false,
NoiseScale = 40,
NoiseTransparency = 0.99,
ParticlesEnabled = false,
ParticleCount = 8,
ParticleColor = Color3.fromRGB(200, 150, 255),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.2,
FontFamily = "Comic Sans MS",
FontWeight = "Regular",
FontSize = 14,
LineHeight = 1.6,
LetterSpacing = 0.3,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Light",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(200, 150, 255),
MinimizeColor = Color3.fromRGB(200, 150, 255),
ExitColor = Color3.fromRGB(140, 105, 179),
Version = "2.0"
},
Corporate = {
Name = "Corporate",
Background = Color3.fromRGB(248, 250, 252),
Foreground = Color3.fromRGB(15, 23, 42),
Surface = Color3.fromRGB(255, 255, 255),
TextPrimary = Color3.fromRGB(15, 23, 42),
TextSecondary = Color3.fromRGB(71, 85, 105),
TextDisabled = Color3.fromRGB(148, 163, 184),
AccentPrimary = Color3.fromRGB(59, 130, 246),
AccentSecondary = Color3.fromRGB(37, 99, 235),
AccentTertiary = Color3.fromRGB(147, 197, 253),
SuccessColor = Color3.fromRGB(34, 197, 94),
WarningColor = Color3.fromRGB(251, 191, 36),
ErrorColor = Color3.fromRGB(239, 68, 68),
InfoColor = Color3.fromRGB(14, 165, 233),
ShadowColor = Color3.fromRGB(15, 23, 42),
GlowColor = Color3.fromRGB(59, 130, 246),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(37, 99, 235)),
ColorSequenceKeypoint.new(0.4, Color3.fromRGB(59, 130, 246)),
ColorSequenceKeypoint.new(0.8, Color3.fromRGB(147, 197, 253)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(248, 250, 252))
}),
BackgroundTransparency = 0,
SurfaceTransparency = 0.02,
StrokeTransparency = 0.85,
ShadowTransparency = 0.9,
GlowTransparency = 0.85,
CornerRadius = 8,
StrokeThickness = 1,
ShadowSize = 12,
GlowSize = 8,
AnimationSpeed = 0.25,
BlurIntensity = 20,
ShadowOffset = Vector2.new(0, 2),
WallpaperEnabled = false,
WallpaperTransparency = 1,
WallpaperBlending = "Normal",
HeaderColor = Color3.fromRGB(59, 130, 246),
HeaderTransparency = 0.05,
SidebarColor = Color3.fromRGB(248, 250, 252),
SidebarTransparency = 0.1,
BorderColor = Color3.fromRGB(226, 232, 240),
NotificationColor = Color3.fromRGB(255, 255, 255),
StatusColor = Color3.fromRGB(255, 255, 255),
DialogColor = Color3.fromRGB(255, 255, 255),
ButtonColor = Color3.fromRGB(248, 250, 252),
ToggleColor = Color3.fromRGB(203, 213, 225),
TogglerHeadColor = Color3.fromRGB(59, 130, 246),
SliderColor = Color3.fromRGB(203, 213, 225),
SliderHeadColor = Color3.fromRGB(59, 130, 246),
DropdownColor = Color3.fromRGB(255, 255, 255),
InputFieldColor = Color3.fromRGB(15, 23, 42),
InputValueBackground = 0.95,
InputFieldTransparency = 0.95,
ScrollbarColor = Color3.fromRGB(148, 163, 184),
ScrollbarTransparency = 0.7,
SelectionColor = Color3.fromRGB(59, 130, 246),
HoverColor = Color3.fromRGB(59, 130, 246),
HoverTransparency = 0.95,
ActiveColor = Color3.fromRGB(37, 99, 235),
FocusColor = Color3.fromRGB(147, 197, 253),
DisabledOverlay = Color3.fromRGB(248, 250, 252),
DisabledTransparency = 0.6,
GradientEnabled = true,
GradientRotation = 135,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(248, 250, 252)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 255, 255))
},
NoiseEnabled = false,
NoiseScale = 50,
NoiseTransparency = 0.98,
ParticlesEnabled = false,
ParticleCount = 5,
ParticleColor = Color3.fromRGB(59, 130, 246),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.2,
FontFamily = "Inter",
FontWeight = "Medium",
FontSize = 14,
LineHeight = 1.5,
LetterSpacing = 0,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Light",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(59, 130, 246),
MinimizeColor = Color3.fromRGB(59, 130, 246),
ExitColor = Color3.fromRGB(37, 99, 235),
Version = "2.0"
},
Executive = {
Name = "Executive",
Background = Color3.fromRGB(20, 20, 22),
Foreground = Color3.fromRGB(250, 204, 21),
Surface = Color3.fromRGB(30, 30, 35),
TextPrimary = Color3.fromRGB(255, 255, 255),
TextSecondary = Color3.fromRGB(212, 212, 216),
TextDisabled = Color3.fromRGB(115, 115, 115),
AccentPrimary = Color3.fromRGB(250, 204, 21),
AccentSecondary = Color3.fromRGB(234, 179, 8),
AccentTertiary = Color3.fromRGB(253, 224, 71),
SuccessColor = Color3.fromRGB(34, 197, 94),
WarningColor = Color3.fromRGB(251, 146, 60),
ErrorColor = Color3.fromRGB(239, 68, 68),
InfoColor = Color3.fromRGB(14, 165, 233),
ShadowColor = Color3.fromRGB(0, 0, 0),
GlowColor = Color3.fromRGB(250, 204, 21),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(234, 179, 8)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(250, 204, 21)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(253, 224, 71)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 255, 255))
}),
BackgroundTransparency = WaveLibrarySettings.AcrylicBlur and 0.03 or 0,
SurfaceTransparency = 0.02,
StrokeTransparency = 0.88,
ShadowTransparency = 0.2,
GlowTransparency = 0.75,
CornerRadius = 6,
StrokeThickness = 1,
ShadowSize = 25,
GlowSize = 18,
AnimationSpeed = 0.2,
BlurIntensity = 40,
ShadowOffset = Vector2.new(0, 4),
WallpaperEnabled = true,
WallpaperTransparency = 0.8,
WallpaperBlending = "Overlay",
HeaderColor = Color3.fromRGB(250, 204, 21),
HeaderTransparency = 0.1,
SidebarColor = Color3.fromRGB(15, 15, 18),
SidebarTransparency = 0.6,
BorderColor = Color3.fromRGB(250, 204, 21),
NotificationColor = Color3.fromRGB(25, 25, 28),
StatusColor = Color3.fromRGB(25, 25, 28),
DialogColor = Color3.fromRGB(35, 35, 40),
ButtonColor = Color3.fromRGB(40, 40, 45),
ToggleColor = Color3.fromRGB(75, 75, 80),
TogglerHeadColor = Color3.fromRGB(250, 204, 21),
SliderColor = Color3.fromRGB(75, 75, 80),
SliderHeadColor = Color3.fromRGB(250, 204, 21),
DropdownColor = Color3.fromRGB(35, 35, 40),
InputFieldColor = Color3.fromRGB(255, 255, 255),
InputValueBackground = 0.95,
InputFieldTransparency = 0.3,
ScrollbarColor = Color3.fromRGB(250, 204, 21),
ScrollbarTransparency = 0.7,
SelectionColor = Color3.fromRGB(250, 204, 21),
HoverColor = Color3.fromRGB(253, 224, 71),
HoverTransparency = 0.9,
ActiveColor = Color3.fromRGB(234, 179, 8),
FocusColor = Color3.fromRGB(253, 224, 71),
DisabledOverlay = Color3.fromRGB(0, 0, 0),
DisabledTransparency = 0.5,
GradientEnabled = true,
GradientRotation = 45,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(20, 20, 22)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(35, 35, 40))
},
NoiseEnabled = false,
NoiseScale = 80,
NoiseTransparency = 0.96,
ParticlesEnabled = false,
ParticleCount = 12,
ParticleColor = Color3.fromRGB(250, 204, 21),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.3,
FontFamily = "Playfair Display",
FontWeight = "Medium",
FontSize = 14,
LineHeight = 1.4,
LetterSpacing = 0.5,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Dark",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(250, 204, 21),
MinimizeColor = Color3.fromRGB(250, 204, 21),
ExitColor = Color3.fromRGB(234, 179, 8),
Version = "2.0"
},
Platinum = {
Name = "Platinum Elegance",
Background = Color3.fromRGB(247, 248, 250),
Foreground = Color3.fromRGB(28, 31, 35),
Surface = Color3.fromRGB(253, 254, 255),
TextPrimary = Color3.fromRGB(28, 31, 35),
TextSecondary = Color3.fromRGB(87, 96, 106),
TextDisabled = Color3.fromRGB(149, 157, 165),
AccentPrimary = Color3.fromRGB(106, 115, 125),
AccentSecondary = Color3.fromRGB(87, 96, 106),
AccentTertiary = Color3.fromRGB(149, 157, 165),
SuccessColor = Color3.fromRGB(40, 167, 69),
WarningColor = Color3.fromRGB(255, 193, 7),
ErrorColor = Color3.fromRGB(220, 53, 69),
InfoColor = Color3.fromRGB(23, 162, 184),
ShadowColor = Color3.fromRGB(87, 96, 106),
GlowColor = Color3.fromRGB(106, 115, 125),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(87, 96, 106)),
ColorSequenceKeypoint.new(0.4, Color3.fromRGB(106, 115, 125)),
ColorSequenceKeypoint.new(0.8, Color3.fromRGB(149, 157, 165)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(253, 254, 255))
}),
BackgroundTransparency = 0,
SurfaceTransparency = 0.01,
StrokeTransparency = 0.8,
ShadowTransparency = 0.85,
GlowTransparency = 0.9,
CornerRadius = 12,
StrokeThickness = 1,
ShadowSize = 8,
GlowSize = 6,
AnimationSpeed = 0.3,
BlurIntensity = 15,
ShadowOffset = Vector2.new(0, 1),
WallpaperEnabled = false,
WallpaperTransparency = 1,
WallpaperBlending = "Normal",
HeaderColor = Color3.fromRGB(106, 115, 125),
HeaderTransparency = 0.05,
SidebarColor = Color3.fromRGB(247, 248, 250),
SidebarTransparency = 0.2,
BorderColor = Color3.fromRGB(208, 215, 222),
NotificationColor = Color3.fromRGB(255, 255, 255),
StatusColor = Color3.fromRGB(255, 255, 255),
DialogColor = Color3.fromRGB(255, 255, 255),
ButtonColor = Color3.fromRGB(250, 251, 252),
ToggleColor = Color3.fromRGB(208, 215, 222),
TogglerHeadColor = Color3.fromRGB(106, 115, 125),
SliderColor = Color3.fromRGB(208, 215, 222),
SliderHeadColor = Color3.fromRGB(106, 115, 125),
DropdownColor = Color3.fromRGB(255, 255, 255),
InputFieldColor = Color3.fromRGB(28, 31, 35),
InputValueBackground = 0.95,
InputFieldTransparency = 0.97,
ScrollbarColor = Color3.fromRGB(149, 157, 165),
ScrollbarTransparency = 0.75,
SelectionColor = Color3.fromRGB(106, 115, 125),
HoverColor = Color3.fromRGB(87, 96, 106),
HoverTransparency = 0.93,
ActiveColor = Color3.fromRGB(87, 96, 106),
FocusColor = Color3.fromRGB(149, 157, 165),
DisabledOverlay = Color3.fromRGB(247, 248, 250),
DisabledTransparency = 0.7,
GradientEnabled = true,
GradientRotation = 180,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(247, 248, 250)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 255, 255))
},
NoiseEnabled = false,
NoiseScale = 60,
NoiseTransparency = 0.99,
ParticlesEnabled = false,
ParticleCount = 3,
ParticleColor = Color3.fromRGB(106, 115, 125),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.1,
FontFamily = "Georgia",
FontWeight = "Regular",
FontSize = 14,
LineHeight = 1.6,
LetterSpacing = 0.2,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Light",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(106, 115, 125),
MinimizeColor = Color3.fromRGB(106, 115, 125),
ExitColor = Color3.fromRGB(87, 96, 106),
Version = "2.0"
},
Crimson = {
Name = "Crimson Power",
Background = Color3.fromRGB(12, 4, 8),
Foreground = Color3.fromRGB(255, 240, 245),
Surface = Color3.fromRGB(25, 8, 15),
TextPrimary = Color3.fromRGB(255, 240, 245),
TextSecondary = Color3.fromRGB(220, 190, 205),
TextDisabled = Color3.fromRGB(140, 120, 130),
AccentPrimary = Color3.fromRGB(220, 38, 127),
AccentSecondary = Color3.fromRGB(190, 18, 60),
AccentTertiary = Color3.fromRGB(244, 114, 182),
SuccessColor = Color3.fromRGB(34, 197, 94),
WarningColor = Color3.fromRGB(251, 191, 36),
ErrorColor = Color3.fromRGB(239, 68, 68),
InfoColor = Color3.fromRGB(168, 85, 247),
ShadowColor = Color3.fromRGB(0, 0, 0),
GlowColor = Color3.fromRGB(220, 38, 127),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(190, 18, 60)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(220, 38, 127)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(244, 114, 182)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 240, 245))
}),
BackgroundTransparency = WaveLibrarySettings.AcrylicBlur and 0.04 or 0,
SurfaceTransparency = 0.03,
StrokeTransparency = 0.82,
ShadowTransparency = 0.15,
GlowTransparency = 0.65,
CornerRadius = 10,
StrokeThickness = 2,
ShadowSize = 30,
GlowSize = 25,
AnimationSpeed = 0.18,
BlurIntensity = 45,
ShadowOffset = Vector2.new(0, 6),
WallpaperEnabled = true,
WallpaperTransparency = 0.75,
WallpaperBlending = "Multiply",
HeaderColor = Color3.fromRGB(220, 38, 127),
HeaderTransparency = 0.15,
SidebarColor = Color3.fromRGB(8, 2, 5),
SidebarTransparency = 0.6,
BorderColor = Color3.fromRGB(220, 38, 127),
NotificationColor = Color3.fromRGB(18, 6, 12),
StatusColor = Color3.fromRGB(18, 6, 12),
DialogColor = Color3.fromRGB(30, 10, 18),
ButtonColor = Color3.fromRGB(35, 15, 25),
ToggleColor = Color3.fromRGB(80, 40, 60),
TogglerHeadColor = Color3.fromRGB(220, 38, 127),
SliderColor = Color3.fromRGB(80, 40, 60),
SliderHeadColor = Color3.fromRGB(244, 114, 182),
DropdownColor = Color3.fromRGB(30, 12, 20),
InputFieldColor = Color3.fromRGB(255, 240, 245),
InputValueBackground = 0.95,
InputFieldTransparency = 0.25,
ScrollbarColor = Color3.fromRGB(220, 38, 127),
ScrollbarTransparency = 0.7,
SelectionColor = Color3.fromRGB(220, 38, 127),
HoverColor = Color3.fromRGB(244, 114, 182),
HoverTransparency = 0.85,
ActiveColor = Color3.fromRGB(190, 18, 60),
FocusColor = Color3.fromRGB(244, 114, 182),
DisabledOverlay = Color3.fromRGB(0, 0, 0),
DisabledTransparency = 0.6,
GradientEnabled = true,
GradientRotation = 315,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(12, 4, 8)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(25, 8, 15)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(40, 15, 25))
},
NoiseEnabled = true,
NoiseScale = 70,
NoiseTransparency = 0.94,
ParticlesEnabled = true,
ParticleCount = 25,
ParticleColor = Color3.fromRGB(220, 38, 127),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.4,
FontFamily = "Roboto",
FontWeight = "Bold",
FontSize = 14,
LineHeight = 1.3,
LetterSpacing = 0.3,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Dark",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(220, 38, 127),
MinimizeColor = Color3.fromRGB(220, 38, 127),
ExitColor = Color3.fromRGB(190, 18, 60),
Version = "2.0"
},
Monochrome = {
Name = "Monochrome",
Background = Color3.fromRGB(255, 255, 255),
Foreground = Color3.fromRGB(0, 0, 0),
Surface = Color3.fromRGB(250, 250, 250),
TextPrimary = Color3.fromRGB(0, 0, 0),
TextSecondary = Color3.fromRGB(64, 64, 64),
TextDisabled = Color3.fromRGB(128, 128, 128),
AccentPrimary = Color3.fromRGB(32, 32, 32),
AccentSecondary = Color3.fromRGB(64, 64, 64),
AccentTertiary = Color3.fromRGB(96, 96, 96),
SuccessColor = Color3.fromRGB(80, 80, 80),
WarningColor = Color3.fromRGB(112, 112, 112),
ErrorColor = Color3.fromRGB(48, 48, 48),
InfoColor = Color3.fromRGB(64, 64, 64),
ShadowColor = Color3.fromRGB(0, 0, 0),
GlowColor = Color3.fromRGB(32, 32, 32),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(0, 0, 0)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(32, 32, 32)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(64, 64, 64)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 255, 255))
}),
BackgroundTransparency = 0,
SurfaceTransparency = 0.02,
StrokeTransparency = 0.7,
ShadowTransparency = 0.95,
GlowTransparency = 0.98,
CornerRadius = 2,
StrokeThickness = 1,
ShadowSize = 4,
GlowSize = 2,
AnimationSpeed = 0.15,
BlurIntensity = 5,
ShadowOffset = Vector2.new(0, 1),
WallpaperEnabled = false,
WallpaperTransparency = 1,
WallpaperBlending = "Normal",
HeaderColor = Color3.fromRGB(32, 32, 32),
HeaderTransparency = 0.02,
SidebarColor = Color3.fromRGB(250, 250, 250),
SidebarTransparency = 0.1,
BorderColor = Color3.fromRGB(192, 192, 192),
NotificationColor = Color3.fromRGB(255, 255, 255),
StatusColor = Color3.fromRGB(255, 255, 255),
DialogColor = Color3.fromRGB(255, 255, 255),
ButtonColor = Color3.fromRGB(245, 245, 245),
ToggleColor = Color3.fromRGB(224, 224, 224),
TogglerHeadColor = Color3.fromRGB(32, 32, 32),
SliderColor = Color3.fromRGB(224, 224, 224),
SliderHeadColor = Color3.fromRGB(32, 32, 32),
DropdownColor = Color3.fromRGB(255, 255, 255),
InputFieldColor = Color3.fromRGB(0, 0, 0),
InputValueBackground = 0.95,
InputFieldTransparency = 0.98,
ScrollbarColor = Color3.fromRGB(128, 128, 128),
ScrollbarTransparency = 0.8,
SelectionColor = Color3.fromRGB(32, 32, 32),
HoverColor = Color3.fromRGB(0, 0, 0),
HoverTransparency = 0.95,
ActiveColor = Color3.fromRGB(0, 0, 0),
FocusColor = Color3.fromRGB(64, 64, 64),
DisabledOverlay = Color3.fromRGB(240, 240, 240),
DisabledTransparency = 0.8,
GradientEnabled = false,
GradientRotation = 0,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 255, 255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(250, 250, 250))
},
NoiseEnabled = false,
NoiseScale = 100,
NoiseTransparency = 1,
ParticlesEnabled = false,
ParticleCount = 0,
ParticleColor = Color3.fromRGB(32, 32, 32),
MotionBlurEnabled = false,
MotionBlurIntensity = 0,
FontFamily = "Helvetica",
FontWeight = "Regular",
FontSize = 14,
LineHeight = 1.5,
LetterSpacing = 0,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = true,
ColorBlindMode = "None",
ThemeVariant = "Light",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(32, 32, 32),
MinimizeColor = Color3.fromRGB(32, 32, 32),
ExitColor = Color3.fromRGB(0, 0, 0),
Version = "2.0"
},
Emerald = {
Name = "Emerald",
Background = Color3.fromRGB(6, 20, 14),
Foreground = Color3.fromRGB(240, 253, 244),
Surface = Color3.fromRGB(15, 35, 25),
TextPrimary = Color3.fromRGB(240, 253, 244),
TextSecondary = Color3.fromRGB(187, 247, 208),
TextDisabled = Color3.fromRGB(134, 239, 172),
AccentPrimary = Color3.fromRGB(16, 185, 129),
AccentSecondary = Color3.fromRGB(5, 150, 105),
AccentTertiary = Color3.fromRGB(52, 211, 153),
SuccessColor = Color3.fromRGB(34, 197, 94),
WarningColor = Color3.fromRGB(245, 158, 11),
ErrorColor = Color3.fromRGB(239, 68, 68),
InfoColor = Color3.fromRGB(14, 165, 233),
ShadowColor = Color3.fromRGB(0, 0, 0),
GlowColor = Color3.fromRGB(16, 185, 129),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(5, 150, 105)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(16, 185, 129)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(52, 211, 153)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(240, 253, 244))
}),
BackgroundTransparency = WaveLibrarySettings.AcrylicBlur and 0.06 or 0,
SurfaceTransparency = 0.04,
StrokeTransparency = 0.85,
ShadowTransparency = 0.25,
GlowTransparency = 0.7,
CornerRadius = 14,
StrokeThickness = 1,
ShadowSize = 22,
GlowSize = 20,
AnimationSpeed = 0.25,
BlurIntensity = 55,
ShadowOffset = Vector2.new(0, 4),
WallpaperEnabled = true,
WallpaperTransparency = 0.7,
WallpaperBlending = "Overlay",
HeaderColor = Color3.fromRGB(16, 185, 129),
HeaderTransparency = 0.2,
SidebarColor = Color3.fromRGB(4, 15, 10),
SidebarTransparency = 0.65,
BorderColor = Color3.fromRGB(16, 185, 129),
NotificationColor = Color3.fromRGB(10, 25, 18),
StatusColor = Color3.fromRGB(10, 25, 18),
DialogColor = Color3.fromRGB(18, 40, 30),
ButtonColor = Color3.fromRGB(25, 50, 38),
ToggleColor = Color3.fromRGB(60, 100, 80),
TogglerHeadColor = Color3.fromRGB(240, 253, 244),
SliderColor = Color3.fromRGB(60, 100, 80),
SliderHeadColor = Color3.fromRGB(16, 185, 129),
DropdownColor = Color3.fromRGB(20, 45, 32),
InputFieldColor = Color3.fromRGB(240, 253, 244),
InputValueBackground = 0.95,
InputFieldTransparency = 0.35,
ScrollbarColor = Color3.fromRGB(16, 185, 129),
ScrollbarTransparency = 0.75,
SelectionColor = Color3.fromRGB(16, 185, 129),
HoverColor = Color3.fromRGB(52, 211, 153),
HoverTransparency = 0.88,
ActiveColor = Color3.fromRGB(5, 150, 105),
FocusColor = Color3.fromRGB(52, 211, 153),
DisabledOverlay = Color3.fromRGB(0, 0, 0),
DisabledTransparency = 0.55,
GradientEnabled = true,
GradientRotation = 225,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(6, 20, 14)),
ColorSequenceKeypoint.new(0.6, Color3.fromRGB(15, 35, 25)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(25, 55, 40))
},
NoiseEnabled = true,
NoiseScale = 90,
NoiseTransparency = 0.95,
ParticlesEnabled = true,
ParticleCount = 18,
ParticleColor = Color3.fromRGB(16, 185, 129),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.35,
FontFamily = "Montserrat",
FontWeight = "SemiBold",
FontSize = 14,
LineHeight = 1.4,
LetterSpacing = 0.4,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Dark",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(16, 185, 129),
MinimizeColor = Color3.fromRGB(16, 185, 129),
ExitColor = Color3.fromRGB(5, 150, 105),
Version = "2.0"
},
Royal = {
Name = "Royal Purple",
Background = Color3.fromRGB(16, 8, 35),
Foreground = Color3.fromRGB(250, 245, 255),
Surface = Color3.fromRGB(30, 18, 55),
TextPrimary = Color3.fromRGB(250, 245, 255),
TextSecondary = Color3.fromRGB(221, 214, 254),
TextDisabled = Color3.fromRGB(196, 181, 253),
AccentPrimary = Color3.fromRGB(147, 51, 234),
AccentSecondary = Color3.fromRGB(124, 58, 237),
AccentTertiary = Color3.fromRGB(168, 85, 247),
SuccessColor = Color3.fromRGB(34, 197, 94),
WarningColor = Color3.fromRGB(251, 191, 36),
ErrorColor = Color3.fromRGB(239, 68, 68),
InfoColor = Color3.fromRGB(14, 165, 233),
ShadowColor = Color3.fromRGB(0, 0, 0),
GlowColor = Color3.fromRGB(147, 51, 234),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(124, 58, 237)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(147, 51, 234)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(168, 85, 247)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(250, 245, 255))
}),
BackgroundTransparency = WaveLibrarySettings.AcrylicBlur and 0.05 or 0,
SurfaceTransparency = 0.03,
StrokeTransparency = 0.86,
ShadowTransparency = 0.2,
GlowTransparency = 0.72,
CornerRadius = 16,
StrokeThickness = 1,
ShadowSize = 28,
GlowSize = 22,
AnimationSpeed = 0.22,
BlurIntensity = 60,
ShadowOffset = Vector2.new(0, 5),
WallpaperEnabled = true,
WallpaperTransparency = 0.72,
WallpaperBlending = "Overlay",
HeaderColor = Color3.fromRGB(147, 51, 234),
HeaderTransparency = 0.18,
SidebarColor = Color3.fromRGB(10, 5, 25),
SidebarTransparency = 0.68,
BorderColor = Color3.fromRGB(147, 51, 234),
NotificationColor = Color3.fromRGB(20, 12, 40),
StatusColor = Color3.fromRGB(20, 12, 40),
DialogColor = Color3.fromRGB(35, 22, 60),
ButtonColor = Color3.fromRGB(45, 28, 75),
ToggleColor = Color3.fromRGB(80, 50, 120),
TogglerHeadColor = Color3.fromRGB(250, 245, 255),
SliderColor = Color3.fromRGB(80, 50, 120),
SliderHeadColor = Color3.fromRGB(147, 51, 234),
DropdownColor = Color3.fromRGB(38, 25, 65),
InputFieldColor = Color3.fromRGB(250, 245, 255),
InputValueBackground = 0.95,
InputFieldTransparency = 0.32,
ScrollbarColor = Color3.fromRGB(147, 51, 234),
ScrollbarTransparency = 0.73,
SelectionColor = Color3.fromRGB(147, 51, 234),
HoverColor = Color3.fromRGB(168, 85, 247),
HoverTransparency = 0.87,
ActiveColor = Color3.fromRGB(124, 58, 237),
FocusColor = Color3.fromRGB(168, 85, 247),
DisabledOverlay = Color3.fromRGB(0, 0, 0),
DisabledTransparency = 0.58,
GradientEnabled = true,
GradientRotation = 210,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(16, 8, 35)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(30, 18, 55)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(50, 30, 85))
},
NoiseEnabled = true,
NoiseScale = 85,
NoiseTransparency = 0.94,
ParticlesEnabled = true,
ParticleCount = 22,
ParticleColor = Color3.fromRGB(147, 51, 234),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.38,
FontFamily = "Times New Roman",
FontWeight = "Medium",
FontSize = 14,
LineHeight = 1.45,
LetterSpacing = 0.3,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Dark",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(147, 51, 234),
MinimizeColor = Color3.fromRGB(147, 51, 234),
ExitColor = Color3.fromRGB(124, 58, 237),
Version = "2.0"
},
Titanium = {
Name = "Titanium",
Background = Color3.fromRGB(45, 52, 58),
Foreground = Color3.fromRGB(248, 250, 252),
Surface = Color3.fromRGB(55, 65, 75),
TextPrimary = Color3.fromRGB(248, 250, 252),
TextSecondary = Color3.fromRGB(203, 213, 225),
TextDisabled = Color3.fromRGB(148, 163, 184),
AccentPrimary = Color3.fromRGB(100, 116, 139),
AccentSecondary = Color3.fromRGB(71, 85, 105),
AccentTertiary = Color3.fromRGB(148, 163, 184),
SuccessColor = Color3.fromRGB(34, 197, 94),
WarningColor = Color3.fromRGB(251, 191, 36),
ErrorColor = Color3.fromRGB(239, 68, 68),
InfoColor = Color3.fromRGB(14, 165, 233),
ShadowColor = Color3.fromRGB(0, 0, 0),
GlowColor = Color3.fromRGB(100, 116, 139),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(71, 85, 105)),
ColorSequenceKeypoint.new(0.4, Color3.fromRGB(100, 116, 139)),
ColorSequenceKeypoint.new(0.8, Color3.fromRGB(148, 163, 184)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(248, 250, 252))
}),
BackgroundTransparency = WaveLibrarySettings.AcrylicBlur and 0.04 or 0,
SurfaceTransparency = 0.02,
StrokeTransparency = 0.88,
ShadowTransparency = 0.3,
GlowTransparency = 0.8,
CornerRadius = 8,
StrokeThickness = 1,
ShadowSize = 18,
GlowSize = 12,
AnimationSpeed = 0.2,
BlurIntensity = 35,
ShadowOffset = Vector2.new(0, 3),
WallpaperEnabled = true,
WallpaperTransparency = 0.8,
WallpaperBlending = "Multiply",
HeaderColor = Color3.fromRGB(100, 116, 139),
HeaderTransparency = 0.15,
SidebarColor = Color3.fromRGB(35, 42, 48),
SidebarTransparency = 0.7,
BorderColor = Color3.fromRGB(100, 116, 139),
NotificationColor = Color3.fromRGB(50, 58, 65),
StatusColor = Color3.fromRGB(50, 58, 65),
DialogColor = Color3.fromRGB(60, 70, 80),
ButtonColor = Color3.fromRGB(65, 75, 85),
ToggleColor = Color3.fromRGB(90, 105, 120),
TogglerHeadColor = Color3.fromRGB(248, 250, 252),
SliderColor = Color3.fromRGB(90, 105, 120),
SliderHeadColor = Color3.fromRGB(100, 116, 139),
DropdownColor = Color3.fromRGB(60, 70, 80),
InputFieldColor = Color3.fromRGB(248, 250, 252),
InputValueBackground = 0.95,
InputFieldTransparency = 0.4,
ScrollbarColor = Color3.fromRGB(100, 116, 139),
ScrollbarTransparency = 0.75,
SelectionColor = Color3.fromRGB(100, 116, 139),
HoverColor = Color3.fromRGB(148, 163, 184),
HoverTransparency = 0.9,
ActiveColor = Color3.fromRGB(71, 85, 105),
FocusColor = Color3.fromRGB(148, 163, 184),
DisabledOverlay = Color3.fromRGB(0, 0, 0),
DisabledTransparency = 0.5,
GradientEnabled = true,
GradientRotation = 90,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(45, 52, 58)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(60, 70, 80))
},
NoiseEnabled = false,
NoiseScale = 75,
NoiseTransparency = 0.97,
ParticlesEnabled = false,
ParticleCount = 8,
ParticleColor = Color3.fromRGB(100, 116, 139),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.25,
FontFamily = "Segoe UI",
FontWeight = "Medium",
FontSize = 14,
LineHeight = 1.4,
LetterSpacing = 0.1,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Dark",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(100, 116, 139),
MinimizeColor = Color3.fromRGB(100, 116, 139),
ExitColor = Color3.fromRGB(71, 85, 105),
Version = "2.0"
},
Amber = {
Name = "Amber",
Background = Color3.fromRGB(251, 248, 244),
Foreground = Color3.fromRGB(69, 26, 3),
Surface = Color3.fromRGB(255, 252, 249),
TextPrimary = Color3.fromRGB(69, 26, 3),
TextSecondary = Color3.fromRGB(120, 53, 15),
TextDisabled = Color3.fromRGB(180, 83, 9),
AccentPrimary = Color3.fromRGB(217, 119, 6),
AccentSecondary = Color3.fromRGB(180, 83, 9),
AccentTertiary = Color3.fromRGB(251, 146, 60),
SuccessColor = Color3.fromRGB(34, 197, 94),
WarningColor = Color3.fromRGB(245, 158, 11),
ErrorColor = Color3.fromRGB(239, 68, 68),
InfoColor = Color3.fromRGB(14, 165, 233),
ShadowColor = Color3.fromRGB(217, 119, 6),
GlowColor = Color3.fromRGB(217, 119, 6),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(180, 83, 9)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(217, 119, 6)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(251, 146, 60)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(69, 26, 3))
}),
BackgroundTransparency = 0,
SurfaceTransparency = 0.02,
StrokeTransparency = 0.8,
ShadowTransparency = 0.0,
GlowTransparency = 0.9,
CornerRadius = 10,
StrokeThickness = 1,
ShadowSize = 10,
GlowSize = 8,
AnimationSpeed = 0.28,
BlurIntensity = 18,
ShadowOffset = Vector2.new(0, 2),
WallpaperEnabled = false,
WallpaperTransparency = 1,
WallpaperBlending = "Normal",
HeaderColor = Color3.fromRGB(217, 119, 6),
HeaderTransparency = 0.08,
SidebarColor = Color3.fromRGB(251, 248, 244),
SidebarTransparency = 0.15,
BorderColor = Color3.fromRGB(254, 215, 170),
NotificationColor = Color3.fromRGB(255, 255, 255),
StatusColor = Color3.fromRGB(255, 255, 255),
DialogColor = Color3.fromRGB(255, 255, 255),
ButtonColor = Color3.fromRGB(254, 243, 199),
ToggleColor = Color3.fromRGB(254, 215, 170),
TogglerHeadColor = Color3.fromRGB(217, 119, 6),
SliderColor = Color3.fromRGB(254, 215, 170),
SliderHeadColor = Color3.fromRGB(217, 119, 6),
DropdownColor = Color3.fromRGB(255, 255, 255),
InputFieldColor = Color3.fromRGB(69, 26, 3),
InputValueBackground = 0.95,
InputFieldTransparency = 0.95,
ScrollbarColor = Color3.fromRGB(180, 83, 9),
ScrollbarTransparency = 0.72,
SelectionColor = Color3.fromRGB(217, 119, 6),
HoverColor = Color3.fromRGB(180, 83, 9),
HoverTransparency = 0.92,
ActiveColor = Color3.fromRGB(180, 83, 9),
FocusColor = Color3.fromRGB(251, 146, 60),
DisabledOverlay = Color3.fromRGB(251, 248, 244),
DisabledTransparency = 0.65,
GradientEnabled = true,
GradientRotation = 45,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(251, 248, 244)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 252, 249))
},
NoiseEnabled = false,
NoiseScale = 65,
NoiseTransparency = 0.98,
ParticlesEnabled = false,
ParticleCount = 6,
ParticleColor = Color3.fromRGB(217, 119, 6),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.15,
FontFamily = "Libre Baskerville",
FontWeight = "Regular",
FontSize = 14,
LineHeight = 1.55,
LetterSpacing = 0.2,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Light",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(217, 119, 6),
MinimizeColor = Color3.fromRGB(217, 119, 6),
ExitColor = Color3.fromRGB(180, 83, 9),
Version = "2.0"
},
Cobalt = {
Name = "Cobalt",
Background = Color3.fromRGB(8, 15, 30),
Foreground = Color3.fromRGB(230, 240, 255),
Surface = Color3.fromRGB(18, 28, 48),
TextPrimary = Color3.fromRGB(230, 240, 255),
TextSecondary = Color3.fromRGB(185, 210, 245),
TextDisabled = Color3.fromRGB(130, 165, 210),
AccentPrimary = Color3.fromRGB(59, 130, 246),
AccentSecondary = Color3.fromRGB(29, 78, 216),
AccentTertiary = Color3.fromRGB(96, 165, 250),
SuccessColor = Color3.fromRGB(34, 197, 94),
WarningColor = Color3.fromRGB(251, 191, 36),
ErrorColor = Color3.fromRGB(239, 68, 68),
InfoColor = Color3.fromRGB(14, 165, 233),
ShadowColor = Color3.fromRGB(0, 0, 0),
GlowColor = Color3.fromRGB(59, 130, 246),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(29, 78, 216)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(59, 130, 246)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(96, 165, 250)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(230, 240, 255))
}),
BackgroundTransparency = WaveLibrarySettings.AcrylicBlur and 0.07 or 0,
SurfaceTransparency = 0.04,
StrokeTransparency = 0.84,
ShadowTransparency = 0,
GlowTransparency = 0.68,
CornerRadius = 12,
StrokeThickness = 2,
ShadowSize = 26,
GlowSize = 24,
AnimationSpeed = 0.2,
BlurIntensity = 50,
ShadowOffset = Vector2.new(0, 5),
WallpaperEnabled = true,
WallpaperTransparency = 0.78,
WallpaperBlending = "Multiply",
HeaderColor = Color3.fromRGB(59, 130, 246),
HeaderTransparency = 0.12,
SidebarColor = Color3.fromRGB(5, 10, 22),
SidebarTransparency = 0.65,
BorderColor = Color3.fromRGB(59, 130, 246),
NotificationColor = Color3.fromRGB(12, 22, 40),
StatusColor = Color3.fromRGB(12, 22, 40),
DialogColor = Color3.fromRGB(22, 35, 58),
ButtonColor = Color3.fromRGB(28, 42, 68),
ToggleColor = Color3.fromRGB(55, 85, 125),
TogglerHeadColor = Color3.fromRGB(230, 240, 255),
SliderColor = Color3.fromRGB(55, 85, 125),
SliderHeadColor = Color3.fromRGB(59, 130, 246),
DropdownColor = Color3.fromRGB(25, 38, 62),
InputFieldColor = Color3.fromRGB(230, 240, 255),
InputValueBackground = 0.95,
InputFieldTransparency = 0.28,
ScrollbarColor = Color3.fromRGB(59, 130, 246),
ScrollbarTransparency = 0.74,
SelectionColor = Color3.fromRGB(59, 130, 246),
HoverColor = Color3.fromRGB(96, 165, 250),
HoverTransparency = 0.86,
ActiveColor = Color3.fromRGB(29, 78, 216),
FocusColor = Color3.fromRGB(96, 165, 250),
DisabledOverlay = Color3.fromRGB(0, 0, 0),
DisabledTransparency = 0.6,
GradientEnabled = true,
GradientRotation = 135,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(8, 15, 30)),
ColorSequenceKeypoint.new(0.6, Color3.fromRGB(18, 28, 48)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(30, 45, 75))
},
NoiseEnabled = true,
NoiseScale = 80,
NoiseTransparency = 0.93,
ParticlesEnabled = true,
ParticleCount = 20,
ParticleColor = Color3.fromRGB(59, 130, 246),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.4,
FontFamily = "Source Code Pro",
FontWeight = "Medium",
FontSize = 14,
LineHeight = 1.35,
LetterSpacing = 0.2,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Dark",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(59, 130, 246),
MinimizeColor = Color3.fromRGB(59, 130, 246),
ExitColor = Color3.fromRGB(29, 78, 216),
Version = "2.0"
},
Lightning = {
Name = "Lightning Strike",
Background = Color3.fromRGB(15, 20, 35),
Foreground = Color3.fromRGB(255, 255, 120),
Surface = Color3.fromRGB(25, 35, 55),
TextPrimary = Color3.fromRGB(255, 255, 120),
TextSecondary = Color3.fromRGB(200, 200, 80),
TextDisabled = Color3.fromRGB(140, 140, 60),
AccentPrimary = Color3.fromRGB(255, 215, 0),
AccentSecondary = Color3.fromRGB(255, 165, 0),
AccentTertiary = Color3.fromRGB(255, 255, 200),
SuccessColor = Color3.fromRGB(144, 238, 144),
WarningColor = Color3.fromRGB(255, 140, 0),
ErrorColor = Color3.fromRGB(255, 69, 0),
InfoColor = Color3.fromRGB(135, 206, 250),
ShadowColor = Color3.fromRGB(255, 215, 0),
GlowColor = Color3.fromRGB(255, 255, 0),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 165, 0)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(255, 215, 0)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(255, 255, 200)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 255, 120))
}),
BackgroundTransparency = WaveLibrarySettings.AcrylicBlur and 0.05 or 0,
SurfaceTransparency = 0.03,
StrokeTransparency = 0.6,
ShadowTransparency = 0.1,
GlowTransparency = 0.5,
CornerRadius = 8,
StrokeThickness = 2,
ShadowSize = 30,
GlowSize = 35,
AnimationSpeed = 0.08,
BlurIntensity = 40,
ShadowOffset = Vector2.new(0, 6),
WallpaperEnabled = true,
WallpaperTransparency = 0.8,
WallpaperBlending = "Screen",
HeaderColor = Color3.fromRGB(255, 215, 0),
HeaderTransparency = 0.1,
SidebarColor = Color3.fromRGB(10, 15, 25),
SidebarTransparency = 0.6,
BorderColor = Color3.fromRGB(255, 255, 0),
NotificationColor = Color3.fromRGB(20, 25, 40),
StatusColor = Color3.fromRGB(20, 25, 40),
DialogColor = Color3.fromRGB(30, 40, 60),
ButtonColor = Color3.fromRGB(35, 50, 70),
ToggleColor = Color3.fromRGB(70, 90, 120),
TogglerHeadColor = Color3.fromRGB(255, 215, 0),
SliderColor = Color3.fromRGB(70, 90, 120),
SliderHeadColor = Color3.fromRGB(255, 255, 0),
DropdownColor = Color3.fromRGB(30, 45, 65),
InputFieldColor = Color3.fromRGB(255, 255, 120),
InputValueBackground = 0.95,
InputFieldTransparency = 0.2,
ScrollbarColor = Color3.fromRGB(255, 215, 0),
ScrollbarTransparency = 0.65,
SelectionColor = Color3.fromRGB(255, 215, 0),
HoverColor = Color3.fromRGB(255, 255, 0),
HoverTransparency = 0.8,
ActiveColor = Color3.fromRGB(255, 165, 0),
FocusColor = Color3.fromRGB(255, 255, 200),
DisabledOverlay = Color3.fromRGB(0, 0, 0),
DisabledTransparency = 0.7,
GradientEnabled = true,
GradientRotation = 90,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(15, 20, 35)),
ColorSequenceKeypoint.new(0.6, Color3.fromRGB(25, 35, 55)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(40, 55, 80))
},
NoiseEnabled = true,
NoiseScale = 35,
NoiseTransparency = 0.85,
ParticlesEnabled = true,
ParticleCount = 45,
ParticleColor = Color3.fromRGB(255, 255, 0),
MotionBlurEnabled = true,
MotionBlurIntensity = 0.6,
FontFamily = "Impact",
FontWeight = "Bold",
FontSize = 14,
LineHeight = 1.1,
LetterSpacing = 0.8,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = true,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Dark",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(255, 215, 0),
MinimizeColor = Color3.fromRGB(255, 215, 0),
ExitColor = Color3.fromRGB(255, 165, 0),
Version = "2.0"
},
Coral = {
Name = "Coral Reef",
Background = Color3.fromRGB(255, 250, 250),
Foreground = Color3.fromRGB(120, 53, 15),
Surface = Color3.fromRGB(255, 245, 238),
TextPrimary = Color3.fromRGB(120, 53, 15),
TextSecondary = Color3.fromRGB(244, 63, 94),
TextDisabled = Color3.fromRGB(251, 113, 133),
AccentPrimary = Color3.fromRGB(244, 63, 94),
AccentSecondary = Color3.fromRGB(225, 29, 72),
AccentTertiary = Color3.fromRGB(251, 113, 133),
SuccessColor = Color3.fromRGB(34, 197, 94),
WarningColor = Color3.fromRGB(245, 158, 11),
ErrorColor = Color3.fromRGB(239, 68, 68),
InfoColor = Color3.fromRGB(14, 165, 233),
ShadowColor = Color3.fromRGB(244, 63, 94),
GlowColor = Color3.fromRGB(251, 113, 133),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(225, 29, 72)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(244, 63, 94)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(251, 113, 133)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 245, 238))
}),
BackgroundTransparency = 0,
SurfaceTransparency = 0.04,
StrokeTransparency = 0.8,
ShadowTransparency = 0.92,
GlowTransparency = 0.9,
CornerRadius = 20,
StrokeThickness = 1,
ShadowSize = 6,
GlowSize = 8,
AnimationSpeed = 0.3,
BlurIntensity = 15,
ShadowOffset = Vector2.new(0, 2),
WallpaperEnabled = false,
WallpaperTransparency = 1,
WallpaperBlending = "Normal",
HeaderColor = Color3.fromRGB(244, 63, 94),
HeaderTransparency = 0.08,
SidebarColor = Color3.fromRGB(255, 250, 250),
SidebarTransparency = 0.15,
BorderColor = Color3.fromRGB(252, 165, 165),
NotificationColor = Color3.fromRGB(255, 255, 255),
StatusColor = Color3.fromRGB(255, 255, 255),
DialogColor = Color3.fromRGB(255, 255, 255),
ButtonColor = Color3.fromRGB(254, 226, 226),
ToggleColor = Color3.fromRGB(252, 165, 165),
TogglerHeadColor = Color3.fromRGB(244, 63, 94),
SliderColor = Color3.fromRGB(252, 165, 165),
SliderHeadColor = Color3.fromRGB(244, 63, 94),
DropdownColor = Color3.fromRGB(255, 255, 255),
InputFieldColor = Color3.fromRGB(120, 53, 15),
InputValueBackground = 0.95,
InputFieldTransparency = 0.9,
ScrollbarColor = Color3.fromRGB(225, 29, 72),
ScrollbarTransparency = 0.7,
SelectionColor = Color3.fromRGB(244, 63, 94),
HoverColor = Color3.fromRGB(225, 29, 72),
HoverTransparency = 0.9,
ActiveColor = Color3.fromRGB(225, 29, 72),
FocusColor = Color3.fromRGB(251, 113, 133),
DisabledOverlay = Color3.fromRGB(255, 250, 250),
DisabledTransparency = 0.75,
GradientEnabled = true,
GradientRotation = 45,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 250, 250)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(255, 245, 238)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(254, 240, 238))
},
NoiseEnabled = false,
NoiseScale = 50,
NoiseTransparency = 0.99,
ParticlesEnabled = false,
ParticleCount = 10,
ParticleColor = Color3.fromRGB(251, 113, 133),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.15,
FontFamily = "Quicksand",
FontWeight = "Regular",
FontSize = 14,
LineHeight = 1.55,
LetterSpacing = 0.3,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Light",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(244, 63, 94),
MinimizeColor = Color3.fromRGB(244, 63, 94),
ExitColor = Color3.fromRGB(225, 29, 72),
Version = "2.0"
},
Inferno = {
Name = "Inferno",
Background = Color3.fromRGB(35, 5, 0),
Foreground = Color3.fromRGB(255, 180, 100),
Surface = Color3.fromRGB(55, 15, 5),
TextPrimary = Color3.fromRGB(255, 180, 100),
TextSecondary = Color3.fromRGB(255, 100, 0),
TextDisabled = Color3.fromRGB(200, 80, 40),
AccentPrimary = Color3.fromRGB(255, 69, 0),
AccentSecondary = Color3.fromRGB(220, 20, 60),
AccentTertiary = Color3.fromRGB(255, 140, 0),
SuccessColor = Color3.fromRGB(255, 165, 0),
WarningColor = Color3.fromRGB(255, 215, 0),
ErrorColor = Color3.fromRGB(220, 20, 60),
InfoColor = Color3.fromRGB(255, 140, 0),
ShadowColor = Color3.fromRGB(139, 0, 0),
GlowColor = Color3.fromRGB(255, 69, 0),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(220, 20, 60)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(255, 69, 0)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(255, 140, 0)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 180, 100))
}),
BackgroundTransparency = WaveLibrarySettings.AcrylicBlur and 0.03 or 0,
SurfaceTransparency = 0.02,
StrokeTransparency = 0.7,
ShadowTransparency = 0,
GlowTransparency = 0.6,
CornerRadius = 6,
StrokeThickness = 2,
ShadowSize = 35,
GlowSize = 40,
AnimationSpeed = 0.12,
BlurIntensity = 45,
ShadowOffset = Vector2.new(0, 7),
WallpaperEnabled = true,
WallpaperTransparency = 0.8,
WallpaperBlending = "Screen",
HeaderColor = Color3.fromRGB(255, 69, 0),
HeaderTransparency = 0.1,
SidebarColor = Color3.fromRGB(25, 3, 0),
SidebarTransparency = 0.6,
BorderColor = Color3.fromRGB(255, 69, 0),
NotificationColor = Color3.fromRGB(40, 8, 2),
StatusColor = Color3.fromRGB(40, 8, 2),
DialogColor = Color3.fromRGB(50, 12, 5),
ButtonColor = Color3.fromRGB(70, 20, 10),
ToggleColor = Color3.fromRGB(120, 40, 20),
TogglerHeadColor = Color3.fromRGB(255, 69, 0),
SliderColor = Color3.fromRGB(120, 40, 20),
SliderHeadColor = Color3.fromRGB(255, 140, 0),
DropdownColor = Color3.fromRGB(60, 18, 8),
InputFieldColor = Color3.fromRGB(255, 180, 100),
InputValueBackground = 0.95,
InputFieldTransparency = 0.25,
ScrollbarColor = Color3.fromRGB(255, 69, 0),
ScrollbarTransparency = 0.7,
SelectionColor = Color3.fromRGB(255, 69, 0),
HoverColor = Color3.fromRGB(255, 140, 0),
HoverTransparency = 0.8,
ActiveColor = Color3.fromRGB(220, 20, 60),
FocusColor = Color3.fromRGB(255, 140, 0),
DisabledOverlay = Color3.fromRGB(0, 0, 0),
DisabledTransparency = 0.6,
GradientEnabled = true,
GradientRotation = 315,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(35, 5, 0)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(55, 15, 5)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(80, 25, 10))
},
NoiseEnabled = true,
NoiseScale = 30,
NoiseTransparency = 0.88,
ParticlesEnabled = true,
ParticleCount = 55,
ParticleColor = Color3.fromRGB(255, 69, 0),
MotionBlurEnabled = true,
MotionBlurIntensity = 0.7,
FontFamily = "Oswald",
FontWeight = "Bold",
FontSize = 14,
LineHeight = 1.25,
LetterSpacing = 0.6,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = true,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Dark",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(255, 69, 0),
MinimizeColor = Color3.fromRGB(255, 69, 0),
ExitColor = Color3.fromRGB(220, 20, 60),
Version = "2.0"
},
Lavender = {
Name = "Lavender Dreams",
Background = Color3.fromRGB(248, 245, 255),
Foreground = Color3.fromRGB(88, 28, 135),
Surface = Color3.fromRGB(243, 232, 255),
TextPrimary = Color3.fromRGB(88, 28, 135),
TextSecondary = Color3.fromRGB(126, 34, 206),
TextDisabled = Color3.fromRGB(196, 181, 253),
AccentPrimary = Color3.fromRGB(147, 51, 234),
AccentSecondary = Color3.fromRGB(126, 34, 206),
AccentTertiary = Color3.fromRGB(196, 181, 253),
SuccessColor = Color3.fromRGB(34, 197, 94),
WarningColor = Color3.fromRGB(245, 158, 11),
ErrorColor = Color3.fromRGB(239, 68, 68),
InfoColor = Color3.fromRGB(168, 85, 247),
ShadowColor = Color3.fromRGB(147, 51, 234),
GlowColor = Color3.fromRGB(196, 181, 253),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(126, 34, 206)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(147, 51, 234)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(196, 181, 253)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(248, 245, 255))
}),
BackgroundTransparency = 0,
SurfaceTransparency = 0.05,
StrokeTransparency = 0.82,
ShadowTransparency = 0.9,
GlowTransparency = 0.88,
CornerRadius = 16,
StrokeThickness = 1,
ShadowSize = 8,
GlowSize = 10,
AnimationSpeed = 0.35,
BlurIntensity = 12,
ShadowOffset = Vector2.new(0, 2),
WallpaperEnabled = false,
WallpaperTransparency = 1,
WallpaperBlending = "Normal",
HeaderColor = Color3.fromRGB(147, 51, 234),
HeaderTransparency = 0.06,
SidebarColor = Color3.fromRGB(248, 245, 255),
SidebarTransparency = 0.18,
BorderColor = Color3.fromRGB(221, 214, 254),
NotificationColor = Color3.fromRGB(255, 255, 255),
StatusColor = Color3.fromRGB(255, 255, 255),
DialogColor = Color3.fromRGB(255, 255, 255),
ButtonColor = Color3.fromRGB(237, 233, 254),
ToggleColor = Color3.fromRGB(221, 214, 254),
TogglerHeadColor = Color3.fromRGB(147, 51, 234),
SliderColor = Color3.fromRGB(221, 214, 254),
SliderHeadColor = Color3.fromRGB(147, 51, 234),
DropdownColor = Color3.fromRGB(255, 255, 255),
InputFieldColor = Color3.fromRGB(88, 28, 135),
InputValueBackground = 0.95,
InputFieldTransparency = 0.94,
ScrollbarColor = Color3.fromRGB(126, 34, 206),
ScrollbarTransparency = 0.72,
SelectionColor = Color3.fromRGB(147, 51, 234),
HoverColor = Color3.fromRGB(126, 34, 206),
HoverTransparency = 0.91,
ActiveColor = Color3.fromRGB(126, 34, 206),
FocusColor = Color3.fromRGB(196, 181, 253),
DisabledOverlay = Color3.fromRGB(248, 245, 255),
DisabledTransparency = 0.72,
GradientEnabled = true,
GradientRotation = 120,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(248, 245, 255)),
ColorSequenceKeypoint.new(0.4, Color3.fromRGB(243, 232, 255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(237, 233, 254))
},
NoiseEnabled = false,
NoiseScale = 65,
NoiseTransparency = 0.99,
ParticlesEnabled = false,
ParticleCount = 12,
ParticleColor = Color3.fromRGB(196, 181, 253),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.18,
FontFamily = "Crimson Text",
FontWeight = "Regular",
FontSize = 14,
LineHeight = 1.6,
LetterSpacing = 0.25,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Light",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(147, 51, 234),
MinimizeColor = Color3.fromRGB(147, 51, 234),
ExitColor = Color3.fromRGB(126, 34, 206),
Version = "2.0"
},
Velvet = {
Name = "Velvet Night",
Background = Color3.fromRGB(25, 12, 35),
Foreground = Color3.fromRGB(230, 200, 255),
Surface = Color3.fromRGB(40, 22, 55),
TextPrimary = Color3.fromRGB(230, 200, 255),
TextSecondary = Color3.fromRGB(180, 140, 220),
TextDisabled = Color3.fromRGB(130, 100, 170),
AccentPrimary = Color3.fromRGB(160, 90, 220),
AccentSecondary = Color3.fromRGB(120, 60, 180),
AccentTertiary = Color3.fromRGB(200, 150, 255),
SuccessColor = Color3.fromRGB(100, 200, 150),
WarningColor = Color3.fromRGB(255, 180, 100),
ErrorColor = Color3.fromRGB(255, 120, 150),
InfoColor = Color3.fromRGB(150, 180, 255),
ShadowColor = Color3.fromRGB(0, 0, 0),
GlowColor = Color3.fromRGB(160, 90, 220),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(120, 60, 180)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(160, 90, 220)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(200, 150, 255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(230, 200, 255))
}),
BackgroundTransparency = WaveLibrarySettings.AcrylicBlur and 0.08 or 0,
SurfaceTransparency = 0.05,
StrokeTransparency = 0.8,
ShadowTransparency = 0.3,
GlowTransparency = 0.7,
CornerRadius = 18,
StrokeThickness = 1,
ShadowSize = 20,
GlowSize = 18,
AnimationSpeed = 0.28,
BlurIntensity = 55,
ShadowOffset = Vector2.new(0, 4),
WallpaperEnabled = true,
WallpaperTransparency = 0.7,
WallpaperBlending = "Overlay",
HeaderColor = Color3.fromRGB(160, 90, 220),
HeaderTransparency = 0.22,
SidebarColor = Color3.fromRGB(18, 8, 28),
SidebarTransparency = 0.68,
BorderColor = Color3.fromRGB(160, 90, 220),
NotificationColor = Color3.fromRGB(30, 18, 42),
StatusColor = Color3.fromRGB(30, 18, 42),
DialogColor = Color3.fromRGB(45, 28, 62),
ButtonColor = Color3.fromRGB(55, 35, 75),
ToggleColor = Color3.fromRGB(90, 60, 120),
TogglerHeadColor = Color3.fromRGB(230, 200, 255),
SliderColor = Color3.fromRGB(90, 60, 120),
SliderHeadColor = Color3.fromRGB(160, 90, 220),
DropdownColor = Color3.fromRGB(48, 30, 68),
InputFieldColor = Color3.fromRGB(230, 200, 255),
InputValueBackground = 0.95,
InputFieldTransparency = 0.38,
ScrollbarColor = Color3.fromRGB(160, 90, 220),
ScrollbarTransparency = 0.76,
SelectionColor = Color3.fromRGB(160, 90, 220),
HoverColor = Color3.fromRGB(200, 150, 255),
HoverTransparency = 0.86,
ActiveColor = Color3.fromRGB(120, 60, 180),
FocusColor = Color3.fromRGB(200, 150, 255),
DisabledOverlay = Color3.fromRGB(0, 0, 0),
DisabledTransparency = 0.58,
GradientEnabled = true,
GradientRotation = 240,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(25, 12, 35)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(40, 22, 55)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(60, 35, 80))
},
NoiseEnabled = true,
NoiseScale = 90,
NoiseTransparency = 0.95,
ParticlesEnabled = true,
ParticleCount = 16,
ParticleColor = Color3.fromRGB(200, 150, 255),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.32,
FontFamily = "Playfair Display",
FontWeight = "Medium",
FontSize = 14,
LineHeight = 1.45,
LetterSpacing = 0.35,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Dark",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(160, 90, 220),
MinimizeColor = Color3.fromRGB(160, 90, 220),
ExitColor = Color3.fromRGB(120, 60, 180),
Version = "2.0"
},
Gold = {
Name = "Golden Hour",
Background = Color3.fromRGB(255, 251, 235),
Foreground = Color3.fromRGB(133, 77, 14),
Surface = Color3.fromRGB(254, 243, 199),
TextPrimary = Color3.fromRGB(133, 77, 14),
TextSecondary = Color3.fromRGB(217, 119, 6),
TextDisabled = Color3.fromRGB(251, 191, 36),
AccentPrimary = Color3.fromRGB(245, 158, 11),
AccentSecondary = Color3.fromRGB(217, 119, 6),
AccentTertiary = Color3.fromRGB(252, 211, 77),
SuccessColor = Color3.fromRGB(34, 197, 94),
WarningColor = Color3.fromRGB(245, 158, 11),
ErrorColor = Color3.fromRGB(239, 68, 68),
InfoColor = Color3.fromRGB(14, 165, 233),
ShadowColor = Color3.fromRGB(245, 158, 11),
GlowColor = Color3.fromRGB(252, 211, 77),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(217, 119, 6)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(245, 158, 11)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(252, 211, 77)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 251, 235))
}),
BackgroundTransparency = 0,
SurfaceTransparency = 0.03,
StrokeTransparency = 0.78,
ShadowTransparency = 0.88,
GlowTransparency = 0.85,
CornerRadius = 12,
StrokeThickness = 1,
ShadowSize = 10,
GlowSize = 12,
AnimationSpeed = 0.25,
BlurIntensity = 20,
ShadowOffset = Vector2.new(0, 3),
WallpaperEnabled = false,
WallpaperTransparency = 1,
WallpaperBlending = "Normal",
HeaderColor = Color3.fromRGB(245, 158, 11),
HeaderTransparency = 0.08,
SidebarColor = Color3.fromRGB(255, 251, 235),
SidebarTransparency = 0.12,
BorderColor = Color3.fromRGB(253, 230, 138),
NotificationColor = Color3.fromRGB(255, 255, 255),
StatusColor = Color3.fromRGB(255, 255, 255),
DialogColor = Color3.fromRGB(255, 255, 255),
ButtonColor = Color3.fromRGB(253, 230, 138),
ToggleColor = Color3.fromRGB(252, 211, 77),
TogglerHeadColor = Color3.fromRGB(245, 158, 11),
SliderColor = Color3.fromRGB(252, 211, 77),
SliderHeadColor = Color3.fromRGB(245, 158, 11),
DropdownColor = Color3.fromRGB(255, 255, 255),
InputFieldColor = Color3.fromRGB(133, 77, 14),
InputValueBackground = 0.95,
InputFieldTransparency = 0.92,
ScrollbarColor = Color3.fromRGB(217, 119, 6),
ScrollbarTransparency = 0.7,
SelectionColor = Color3.fromRGB(245, 158, 11),
HoverColor = Color3.fromRGB(217, 119, 6),
HoverTransparency = 0.9,
ActiveColor = Color3.fromRGB(217, 119, 6),
FocusColor = Color3.fromRGB(252, 211, 77),
DisabledOverlay = Color3.fromRGB(255, 251, 235),
DisabledTransparency = 0.7,
GradientEnabled = true,
GradientRotation = 60,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 251, 235)),
ColorSequenceKeypoint.new(0.6, Color3.fromRGB(254, 243, 199)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(253, 230, 138))
},
NoiseEnabled = false,
NoiseScale = 55,
NoiseTransparency = 0.99,
ParticlesEnabled = false,
ParticleCount = 8,
ParticleColor = Color3.fromRGB(252, 211, 77),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.12,
FontFamily = "Merriweather",
FontWeight = "Regular",
FontSize = 14,
LineHeight = 1.5,
LetterSpacing = 0.15,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Light",
AccentColorSource = "Manual",
AutoDarkMode = false,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(245, 158, 11),
MinimizeColor = Color3.fromRGB(245, 158, 11),
ExitColor = Color3.fromRGB(217, 119, 6),
Version = "2.0"
},
Smoke = {
Name = "Smoke Signal",
Background = Color3.fromRGB(28, 28, 30),
Foreground = Color3.fromRGB(199, 199, 204),
Surface = Color3.fromRGB(44, 44, 46),
TextPrimary = Color3.fromRGB(199, 199, 204),
TextSecondary = Color3.fromRGB(174, 174, 178),
TextDisabled = Color3.fromRGB(142, 142, 147),
AccentPrimary = Color3.fromRGB(120, 120, 128),
AccentSecondary = Color3.fromRGB(99, 99, 102),
AccentTertiary = Color3.fromRGB(174, 174, 178),
SuccessColor = Color3.fromRGB(52, 199, 89),
WarningColor = Color3.fromRGB(255, 214, 10),
ErrorColor = Color3.fromRGB(255, 69, 58),
InfoColor = Color3.fromRGB(90, 200, 250),
ShadowColor = Color3.fromRGB(0, 0, 0),
GlowColor = Color3.fromRGB(120, 120, 128),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(99, 99, 102)),
ColorSequenceKeypoint.new(0.4, Color3.fromRGB(120, 120, 128)),
ColorSequenceKeypoint.new(0.8, Color3.fromRGB(174, 174, 178)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(199, 199, 204))
}),
BackgroundTransparency = WaveLibrarySettings.AcrylicBlur and 0.04 or 0,
SurfaceTransparency = 0.02,
StrokeTransparency = 0.88,
ShadowTransparency = 0.5,
GlowTransparency = 0.85,
CornerRadius = 8,
StrokeThickness = 1,
ShadowSize = 12,
GlowSize = 8,
AnimationSpeed = 0.2,
BlurIntensity = 25,
ShadowOffset = Vector2.new(0, 2),
WallpaperEnabled = true,
WallpaperTransparency = 0.85,
WallpaperBlending = "Multiply",
HeaderColor = Color3.fromRGB(120, 120, 128),
HeaderTransparency = 0.15,
SidebarColor = Color3.fromRGB(22, 22, 24),
SidebarTransparency = 0.7,
BorderColor = Color3.fromRGB(72, 72, 74),
NotificationColor = Color3.fromRGB(36, 36, 38),
StatusColor = Color3.fromRGB(36, 36, 38),
DialogColor = Color3.fromRGB(48, 48, 50),
ButtonColor = Color3.fromRGB(58, 58, 60),
ToggleColor = Color3.fromRGB(72, 72, 74),
TogglerHeadColor = Color3.fromRGB(199, 199, 204),
SliderColor = Color3.fromRGB(72, 72, 74),
SliderHeadColor = Color3.fromRGB(120, 120, 128),
DropdownColor = Color3.fromRGB(48, 48, 50),
InputFieldColor = Color3.fromRGB(199, 199, 204),
InputValueBackground = 0.95,
InputFieldTransparency = 0.5,
ScrollbarColor = Color3.fromRGB(120, 120, 128),
ScrollbarTransparency = 0.8,
SelectionColor = Color3.fromRGB(120, 120, 128),
HoverColor = Color3.fromRGB(174, 174, 178),
HoverTransparency = 0.9,
ActiveColor = Color3.fromRGB(99, 99, 102),
FocusColor = Color3.fromRGB(174, 174, 178),
DisabledOverlay = Color3.fromRGB(0, 0, 0),
DisabledTransparency = 0.5,
GradientEnabled = true,
GradientRotation = 90,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(28, 28, 30)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(48, 48, 50))
},
NoiseEnabled = false,
NoiseScale = 100,
NoiseTransparency = 0.98,
ParticlesEnabled = false,
ParticleCount = 6,
ParticleColor = Color3.fromRGB(120, 120, 128),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.2,
FontFamily = "San Francisco",
FontWeight = "Medium",
FontSize = 14,
LineHeight = 1.4,
LetterSpacing = 0,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Dark",
AccentColorSource = "System",
AutoDarkMode = true,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(120, 120, 128),
MinimizeColor = Color3.fromRGB(120, 120, 128),
ExitColor = Color3.fromRGB(99, 99, 102),
Version = "2.0"
},
Sky = {
Name = "Sky Blue",
Background = Color3.fromRGB(240, 249, 255),
Foreground = Color3.fromRGB(12, 74, 110),
Surface = Color3.fromRGB(224, 242, 254),
TextPrimary = Color3.fromRGB(12, 74, 110),
TextSecondary = Color3.fromRGB(14, 165, 233),
TextDisabled = Color3.fromRGB(125, 211, 252),
AccentPrimary = Color3.fromRGB(2, 132, 199),
AccentSecondary = Color3.fromRGB(3, 105, 161),
AccentTertiary = Color3.fromRGB(56, 189, 248),
SuccessColor = Color3.fromRGB(34, 197, 94),
WarningColor = Color3.fromRGB(245, 158, 11),
ErrorColor = Color3.fromRGB(239, 68, 68),
InfoColor = Color3.fromRGB(14, 165, 233),
ShadowColor = Color3.fromRGB(2, 132, 199),
GlowColor = Color3.fromRGB(56, 189, 248),
PremiumGradientColor = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(3, 105, 161)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(2, 132, 199)),
ColorSequenceKeypoint.new(0.7, Color3.fromRGB(56, 189, 248)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(240, 249, 255))
}),
BackgroundTransparency = 0,
SurfaceTransparency = 0.04,
StrokeTransparency = 0.85,
ShadowTransparency = 0.92,
GlowTransparency = 0.88,
CornerRadius = 14,
StrokeThickness = 1,
ShadowSize = 6,
GlowSize = 8,
AnimationSpeed = 0.3,
BlurIntensity = 15,
ShadowOffset = Vector2.new(0, 2),
WallpaperEnabled = false,
WallpaperTransparency = 1,
WallpaperBlending = "Normal",
HeaderColor = Color3.fromRGB(2, 132, 199),
HeaderTransparency = 0.06,
SidebarColor = Color3.fromRGB(240, 249, 255),
SidebarTransparency = 0.15,
BorderColor = Color3.fromRGB(186, 230, 253),
NotificationColor = Color3.fromRGB(255, 255, 255),
StatusColor = Color3.fromRGB(255, 255, 255),
DialogColor = Color3.fromRGB(255, 255, 255),
ButtonColor = Color3.fromRGB(224, 242, 254),
ToggleColor = Color3.fromRGB(186, 230, 253),
TogglerHeadColor = Color3.fromRGB(2, 132, 199),
SliderColor = Color3.fromRGB(186, 230, 253),
SliderHeadColor = Color3.fromRGB(2, 132, 199),
DropdownColor = Color3.fromRGB(255, 255, 255),
InputFieldColor = Color3.fromRGB(12, 74, 110),
InputValueBackground = 0.95,
InputFieldTransparency = 0.96,
ScrollbarColor = Color3.fromRGB(56, 189, 248),
ScrollbarTransparency = 0.75,
SelectionColor = Color3.fromRGB(2, 132, 199),
HoverColor = Color3.fromRGB(3, 105, 161),
HoverTransparency = 0.92,
ActiveColor = Color3.fromRGB(3, 105, 161),
FocusColor = Color3.fromRGB(56, 189, 248),
DisabledOverlay = Color3.fromRGB(240, 249, 255),
DisabledTransparency = 0.75,
GradientEnabled = true,
GradientRotation = 135,
GradientColors = {
ColorSequenceKeypoint.new(0, Color3.fromRGB(240, 249, 255)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(224, 242, 254)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(186, 230, 253))
},
NoiseEnabled = false,
NoiseScale = 60,
NoiseTransparency = 1,
ParticlesEnabled = false,
ParticleCount = 5,
ParticleColor = Color3.fromRGB(56, 189, 248),
MotionBlurEnabled = false,
MotionBlurIntensity = 0.1,
FontFamily = "Oxygen",
FontWeight = "Regular",
FontSize = 14,
LineHeight = 1.5,
LetterSpacing = 0.1,
AntiAliasing = true,
SubPixelRendering = true,
DynamicTypeScaling = false,
HighContrastMode = false,
ReducedMotion = false,
ColorBlindMode = "None",
ThemeVariant = "Light",
AccentColorSource = "Manual",
AutoDarkMode = true,
ScheduledThemes = {},
CustomCSSOverrides = "",
MenuPrimaryColor = Color3.fromRGB(2, 132, 199),
MinimizeColor = Color3.fromRGB(2, 132, 199),
ExitColor = Color3.fromRGB(3, 105, 161),
Version = "2.0"
},
Custom = {}
}
end
return ThemeMetaUtility
end
-- =====================================================================
-- Bootstrap: stand up the globals + loaders Wave expects
-- =====================================================================
local genv = (getgenv and getgenv()) or _G
-- Services first (Utility references the Services global).
genv.Services = R["Wave/Modules/Services.lua"]()
-- Utility, then repoint its file loaders at the Registry.
genv.Utility = R["Wave/Modules/Utility.lua"]()
local function StripHub(File)
if type(File) ~= "string" then return File end
File = File:gsub("\\", "/")
File = File:gsub("^Wave%-Hub/", "")
return File
end
function genv.Utility:LoadFile(File, _Param)
local key = StripHub(File)
local mod = R[key]
if not mod then
warn("[WaveFluent] module not in bundle: " .. tostring(File))
return nil
end
return mod()
end
function genv.Utility:ReadFile(File)
local key = StripHub(File)
return R[key] and R[key] or nil
end
function genv.Utility:ListManager(Location, KeepExtension)
local prefix = StripHub(Location)
if prefix:sub(-1) ~= "/" then prefix = prefix .. "/" end
local results = {}
for key in next, R do
if key:sub(1, #prefix) == prefix then
local name = key:match("[^/]+$") or key
if not KeepExtension then name = name:match("^(.*)%.") or name end
results[name] = key
end
end
return results
end
function genv.Utility:ListFiles(Location)
local prefix = StripHub(Location)
if prefix:sub(-1) ~= "/" then prefix = prefix .. "/" end
local results = {}
for key in next, R do
if key:sub(1, #prefix) == prefix then results[#results + 1] = key end
end
return results
end
function genv.Utility:CheckFile(File)
return R[StripHub(File)] ~= nil
end
-- Remaining globals Wave reads while building a window.
genv.Maid = R["Wave/Modules/Maid.lua"]().New()
pcall(function() genv.Sound = R["Wave/Modules/Sound.lua"]() end)
genv.Assets = R["Assets/UI-Icons.lua"]()
-- AssetCloak: hook ContentProvider so our own asset ids report "not loaded"
-- to anti-cheats that watch GetAssetFetchStatus / ...ChangedSignal.
pcall(function()
local cloak = R["Wave/UserInterface/Imports/AssetCloak.lua"]()
cloak.Harvest(genv.Assets)
-- The icon module's 10,621 named entries all reference the SAME 42 sprite-
-- sheet ids, so harvesting the whole table is ~10k wasted iterations at
-- boot. Hardcode the 42 ids + the 7 loading-screen ids + a few extras.
for _, id in ipairs({
-- Lucide / Phosphor sprite atlases (icons_1..icons_42 in Icons.lua)
"124334518624683","113826256227095","129900432084566","118976126805967",
"125298981894618","131738208650267","110728422432625","135200213477510",
"134392099945785","79415505456349", "94499019266816", "72284904787415",
"102465529977025","108796161822566","104034552823126","115396960406352",
"88000092080903", "74902412828188", "95092644481468", "116618277156257",
"101225869294852","130974669650190","122510634246659","130565723724393",
"130172565496219","100537559853437","77444842975129", "133795234078681",
"88182585007332", "123183581552431","108153633480449","116280890977475",
"97148406853110", "138968597001035","129030569615452","97278475063854",
"138343757151795","131684019420923","139123669104105","83798598825627",
"93555120675964",
-- Window-control icons (also in the icon module's top section)
"9886659671","9886659276","9886659406","9886659001",
-- Loading-screen assets (live in a module-local table our Harvest can't see)
"12187365364","133291240952158","313486536","86728831115666",
"6015501643","9682988263","14696703504",
}) do cloak.Cloak(id) end
cloak.Install()
genv.AssetCloak = cloak
end)
genv.HiddenMode = false
genv.SubWindows = {}
if genv.GameLoading == nil then genv.GameLoading = "Universal" end
if genv.GameData == nil then genv.GameData = {} end
pcall(function()
if genv.VirtualInputMachine == nil then
genv.VirtualInputMachine = Instance.new("VirtualInputManager")
end
end)
genv.WaveUserInterface = R["Wave/UserInterface/WaveUI.lua"]()
local WaveUserInterface = genv.WaveUserInterface
-- =====================================================================
-- Fluent Renewed compatible adapter (Fluent API -> Wave backend)
-- =====================================================================
-- Fluent Renewed -> Wave adapter.
-- A 1:1-as-possible Fluent API over Wave. Supports stock Fluent Renewed AND the
-- custom fork: Window:Divider/Minimize/Maximize, Tab:Left/Right/Section, short
-- element aliases (Tab:Toggle / Section:Button), every element method
-- (:OnChanged/:SetValue/:SetTitle/:SetDesc/:Destroy/...), styled+range sliders,
-- Toggle:Keybind, every Wave theme, and full unload/close.
--
-- The packer prepends the inlined Wave UI + bootstrap; we use the globals it set.
local WaveUserInterface = WaveUserInterface or (getgenv and getgenv().WaveUserInterface)
local genv = (getgenv and getgenv()) or _G
-- Forward-declared LOCAL so every closure captures it as an upvalue.
local Library
-- Active splash-loader controller for the window currently being built.
-- Every element/tab creation calls activeSplash:bump() so the splash can tell
-- when the build has gone quiet (last element + its config value settled) and
-- reveal the UI then, instead of guessing with a fixed timer.
local activeSplash
local function warnf(...)
warn("[WaveFluent]", ...)
end
-- Fluent passes (flag, opts) for most elements but (opts) for buttons; normalize.
local function normArgs(a, b)
if type(a) == "table" then
return nil, a
end
return a, (type(b) == "table" and b) or {}
end
local function tip(o)
return o.Tooltip or o.Tip or o.ToolTip or o.Description
end
-- Lucide / Phosphor / Fluent icon name -> { Image, ImageRectOffset, ImageRectSize },
-- resolved once through the bundled icon sheet and cached. rbxasset / rbxthumb /
-- http / numeric ids (and nil) pass straight through.
local IconLib
local function getIconLib()
if IconLib == nil then
local cached = genv.__WaveIconSheet
if cached ~= nil then
IconLib = cached
else
local ok, lib = pcall(function()
return genv.Utility and genv.Utility:LoadFile("Wave/UserInterface/Imports/Icons.lua")
end)
IconLib = (ok and type(lib) == "table") and lib or false
genv.__WaveIconSheet = IconLib
end
end
return IconLib or nil
end
local function resolveIcon(icon)
if type(icon) ~= "string" or icon == "" then
return nil
end
if icon:match("^%d+$") then
return { Image = "rbxassetid://" .. icon }
end
if icon:match("^rbxasset") or icon:match("^rbxthumb") or icon:match("^http") then
return { Image = icon }
end
local lib = getIconLib()
if not lib then
return nil
end
local data = lib[icon]
if type(data) == "table" and data.Image then
return { Image = data.Image, ImageRectOffset = data.ImageRectOffset, ImageRectSize = data.ImageRectSize }
elseif type(data) == "string" then
return { Image = data }
end
-- fall back to the sheet's built-in fuzzy matcher (handles close / mistyped names)
local ok, res = pcall(function()
local tmp = Instance.new("ImageLabel")
lib:SetIcon(tmp, icon)
local out = { Image = tmp.Image, ImageRectOffset = tmp.ImageRectOffset, ImageRectSize = tmp.ImageRectSize }
tmp:Destroy()
return out
end)
if ok and res and res.Image and res.Image ~= "" then
return res
end
return nil
end
local MOUSE = {
MB1 = Enum.UserInputType.MouseButton1,
MB2 = Enum.UserInputType.MouseButton2,
MB3 = Enum.UserInputType.MouseButton3,
LeftMousebutton = Enum.UserInputType.MouseButton1,
RightMousebutton = Enum.UserInputType.MouseButton2,
}
local function toKeyEnum(v)
if typeof(v) == "EnumItem" then
return v
end
if type(v) == "string" then
if MOUSE[v] then
return MOUSE[v]
end
local ok, e = pcall(function()
return Enum.KeyCode[v]
end)
if ok and e then
return e
end
end
return Enum.KeyCode.Unknown
end
local CreatedAtCounter = 0
local function newStamp()
CreatedAtCounter = CreatedAtCounter + 1
return { CreatedAt = CreatedAtCounter }
end
-- :OnChanged registration shared by value elements.
local function attachChanged(el)
el._changed = {}
function el:OnChanged(fn)
if type(fn) == "function" then
table.insert(self._changed, fn)
Library:SafeCallback(fn, self.Value)
end
return self
end
function el:_fireChanged(...)
for _, fn in ipairs(self._changed) do
Library:SafeCallback(fn, ...)
end
end
end
-- Generic SetTitle/SetDesc/SetVisible/Destroy delegating to the Wave element.
local function attachCommon(el)
-- Mark build activity: each created element pushes the splash's "last
-- loaded" timestamp forward, so the reveal waits for the genuinely last one.
if activeSplash then activeSplash:bump() end
local wave = el._wave
function el:SetTitle(text)
pcall(function()
if wave.UpdateName then
wave:UpdateName(text)
elseif wave.UpdateHeader then
wave:UpdateHeader(text)
end
end)
return self
end
el.SetName = el.SetTitle
function el:SetDesc(text)
self.Description = text
pcall(function()
if wave.SetToolTip then
wave:SetToolTip(text)
end
end)
return self
end
el.SetDescription = el.SetDesc
function el:SetVisible(state)
pcall(function()
if wave.SetVisibility then
wave:SetVisibility(state ~= false)
end
end)
return self
end
el.SetVisibility = el.SetVisible
function el:Destroy()
pcall(function()
if wave.Destroy then
wave:Destroy()
elseif wave.Remove then
wave:Remove()
end
end)
if self.Flag and Library.Options[self.Flag] == self then
Library.Options[self.Flag] = nil
end
end
el.Remove = el.Destroy
return el
end
-- Dual signal: supports Sig:Connect(fn) AND Lib:OnUnload(fn) call forms.
-- Splash loader shown the instant CreateWindow is called. A small spinning
-- ring + "Loading…" caption fade in over a dimmed backdrop while the heavy
-- Wave window build runs synchronously underneath (RenderStepped keeps
-- ticking during script execution, so the ring keeps animating during the
-- freeze). When the build finishes and Wave's reveal kicks in, the splash
-- fades out so the two animations overlap and the window feels like it's
-- materialising out of the loader rather than popping into view.
--
-- Two-call API: build immediately, hide() runs the exit tween + destroys.
local function buildSplashLoader()
local Players = game:GetService("Players")
local TS = game:GetService("TweenService")
local parentHost
local ok, host = pcall(function() return gethui and gethui() end)
if ok and host then
parentHost = host
else
local lp = Players.LocalPlayer
parentHost = (lp and lp:FindFirstChildOfClass("PlayerGui")) or game:GetService("CoreGui")
end
local gui = Instance.new("ScreenGui")
gui.Name = "WaveSplash"
gui.ResetOnSpawn = false
gui.IgnoreGuiInset = true
gui.DisplayOrder = 250 -- above the Wave window so it covers the reveal
gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
pcall(function() gui.Parent = parentHost end)
local Backdrop = Instance.new("Frame")
Backdrop.Name = "Backdrop"
Backdrop.Size = UDim2.fromScale(1, 1)
Backdrop.BackgroundColor3 = Color3.fromRGB(8, 8, 12)
Backdrop.BackgroundTransparency = 1 -- fades in
Backdrop.BorderSizePixel = 0
Backdrop.Parent = gui
-- 72px centred container holds the spinning ring + dot
local Container = Instance.new("Frame")
Container.AnchorPoint = Vector2.new(0.5, 0.5)
Container.Position = UDim2.fromScale(0.5, 0.5)
Container.Size = UDim2.fromOffset(72, 72)
Container.BackgroundTransparency = 1
Container.Parent = Backdrop
-- Static faint background ring
local Ring = Instance.new("Frame")
Ring.Size = UDim2.fromScale(1, 1)
Ring.BackgroundTransparency = 1
Ring.Parent = Container
local RingCorner = Instance.new("UICorner")
RingCorner.CornerRadius = UDim.new(1, 0)
RingCorner.Parent = Ring
local RingStroke = Instance.new("UIStroke")
RingStroke.Thickness = 3
RingStroke.Color = Color3.fromRGB(255, 255, 255)
RingStroke.Transparency = 1 -- fades to 0.82
RingStroke.Parent = Ring
-- Rotator with an orbiting bright dot. Rotating the Rotator's Rotation
-- property carries the dot around the ring. Pure-frame spinner — no
-- external asset needed, works on every executor.
local Rotator = Instance.new("Frame")
Rotator.AnchorPoint = Vector2.new(0.5, 0.5)
Rotator.Position = UDim2.fromScale(0.5, 0.5)
Rotator.Size = UDim2.fromScale(1, 1)
Rotator.BackgroundTransparency = 1
Rotator.Parent = Container
local Dot = Instance.new("Frame")
Dot.AnchorPoint = Vector2.new(0.5, 0.5)
Dot.Position = UDim2.new(0.5, 0, 0, 0) -- top centre
Dot.Size = UDim2.fromOffset(10, 10)
Dot.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Dot.BackgroundTransparency = 1 -- fades in
Dot.Parent = Rotator
local DotCorner = Instance.new("UICorner")
DotCorner.CornerRadius = UDim.new(1, 0)
DotCorner.Parent = Dot
-- Subtle bloom around the dot so it reads as the head of an arc trail.
local DotGlow = Instance.new("UIStroke")
DotGlow.Thickness = 2
DotGlow.Color = Color3.fromRGB(160, 195, 255)
DotGlow.Transparency = 1
DotGlow.Parent = Dot
-- "Loading…" caption with a soft typewriter tail.
local Caption = Instance.new("TextLabel")
Caption.AnchorPoint = Vector2.new(0.5, 0)
Caption.Position = UDim2.new(0.5, 0, 0.5, 50)
Caption.Size = UDim2.fromOffset(160, 18)
Caption.BackgroundTransparency = 1
Caption.Text = "Loading"
Caption.TextColor3 = Color3.fromRGB(235, 240, 250)
Caption.TextTransparency = 1
Caption.TextSize = 13
Caption.Font = Enum.Font.GothamMedium
Caption.Parent = Backdrop
-- Animate the ring spin (one full turn per 0.95s, linear, infinite).
local spinAlive = true
task.spawn(function()
while spinAlive and Rotator.Parent do
local tween = TS:Create(Rotator, TweenInfo.new(0.95, Enum.EasingStyle.Linear), {
Rotation = Rotator.Rotation + 360,
})
tween:Play()
tween.Completed:Wait()
end
end)
-- Caption dot-cycle: "Loading" → "Loading." → "Loading.." → "Loading..."
task.spawn(function()
local dots = { "", ".", "..", "..." }
local i = 1
while spinAlive and Caption.Parent do
Caption.Text = "Loading" .. dots[i]
i = (i % #dots) + 1
task.wait(0.32)
end
end)
-- Fade-in.
local fadeIn = TweenInfo.new(0.25, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
TS:Create(Backdrop, fadeIn, { BackgroundTransparency = 0.45 }):Play()
TS:Create(RingStroke, fadeIn, { Transparency = 0.82 }):Play()
TS:Create(Dot, fadeIn, { BackgroundTransparency = 0 }):Play()
TS:Create(DotGlow, fadeIn, { Transparency = 0.4 }):Play()
TS:Create(Caption, fadeIn, { TextTransparency = 0.2 }):Play()
-- Controller: tracks build activity so callers can reveal on "quiet",
-- and exposes hide() for the fade-out + cleanup.
local controller = {
hidden = false,
elementCount = 0,
}
-- os.clock is unavailable in some sandboxes; fall back to tick/0.
local clock = (os and os.clock) or tick or function() return 0 end
controller.lastActivity = clock()
function controller:bump()
self.elementCount = self.elementCount + 1
self.lastActivity = clock()
end
function controller:hide()
if self.hidden then return end
self.hidden = true
spinAlive = false
local out = TweenInfo.new(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
TS:Create(Backdrop, out, { BackgroundTransparency = 1 }):Play()
TS:Create(RingStroke, out, { Transparency = 1 }):Play()
TS:Create(Dot, out, { BackgroundTransparency = 1 }):Play()
TS:Create(DotGlow, out, { Transparency = 1 }):Play()
TS:Create(Caption, out, { TextTransparency = 1 }):Play()
-- Subtle scale-down on the spinner as it fades.
TS:Create(Container, out, { Size = UDim2.fromOffset(56, 56) }):Play()
task.delay(0.45, function() pcall(function() gui:Destroy() end) end)
end
-- Watch for the build to go quiet, then reveal. "Quiet" = no new element
-- loaded for QUIET seconds AFTER at least one element exists -> the last
-- element (and its applied config value) has settled. A hard ceiling
-- guarantees the splash never hangs (e.g. a window with zero elements).
function controller:watch()
task.spawn(function()
local QUIET = 1.0 -- gap that means "nothing else is loading"
local MIN_SHOW = 0.35 -- keep the spinner up at least this long (no flash)
local MAX_WAIT = 12 -- absolute safety ceiling
local startedAt = clock()
while not self.hidden do
task.wait(0.05)
local now = clock()
local elapsed = now - startedAt
local quietFor = now - self.lastActivity
if elapsed >= MAX_WAIT then break end
if elapsed >= MIN_SHOW and self.elementCount > 0 and quietFor >= QUIET then
break
end
end
-- Stop routing element bumps to this (now finished) splash.
if activeSplash == self then activeSplash = nil end
self:hide()
end)
end
return controller
end
local function makeSignal()
local cbs = {}
local sig = {}
function sig:Connect(fn)
if type(fn) == "function" then
table.insert(cbs, fn)
end
return {
Disconnect = function()
for i, f in ipairs(cbs) do
if f == fn then
table.remove(cbs, i)
break
end
end
end,
}
end
sig.Once = sig.Connect
function sig:Fire(...)
for _, fn in ipairs(cbs) do
if Library and Library.SafeCallback then
Library:SafeCallback(fn, ...)
else
pcall(fn, ...)
end
end
end
return setmetatable(sig, {
__call = function(_, a, ...)
local fn = (type(a) == "function") and a or ...
return sig:Connect(fn)
end,
})
end
local BASES = {
"Button", "Toggle", "Slider", "Dropdown", "Colorpicker",
"Keybind", "Input", "Paragraph", "Divider", "Label", "Viewport",
"Segmented", "Stat", "Callout", "Image",
}
-- =====================================================================
-- Section facade
-- =====================================================================
local function makeSection(waveSection)
local S = { _wave = waveSection, Type = "Section" }
function S:CreateToggle(flag, o)
flag, o = normArgs(flag, o)
local el = { Type = "Toggle", Value = o.Default or o.Value or false, Flag = flag, Instance = newStamp() }
attachChanged(el)
local wave = waveSection:Toggle({
Name = o.Title or o.Name or "Toggle",
Default = o.Default or o.Value or false,
ToolTip = tip(o),
Callback = function(state)
el.Value = state
Library:SafeCallback(o.Callback, state)
el:_fireChanged(state)
end,
}, flag)
el._wave = wave
attachCommon(el)
function el:SetValue(v)
pcall(function()
wave:UpdateState(v and true or false, true)
end)
return self
end
function el:GetState()
return el.Value
end
function el:Keybind(kflag, kopts)
kopts = kopts or {}
return S:CreateKeybind(kflag, {
Title = kopts.Title or ((o.Title or "Toggle") .. " Bind"),
Default = kopts.Default or kopts.Value,
Mode = kopts.Mode or "Toggle",
ChangedCallback = kopts.ChangedCallback,
Callback = function()
el:SetValue(not el.Value)
end,
})
end
if flag then
Library.Options[flag] = el
end
return el
end
function S:CreateButton(a, b)
local _, o = normArgs(a, b)
local el = { Type = "Button", Instance = newStamp() }
local wave = waveSection:Button({
Name = o.Title or o.Name or "Button",
ToolTip = tip(o),
Callback = function()
Library:SafeCallback(o.Callback or o.Func)
end,
})
el._wave = wave
el.Description = o.Description
attachCommon(el)
return el
end
function S:CreateSlider(flag, o)
flag, o = normArgs(flag, o)
local isRange = (o.Style == "Range") or (o.Range == true) or (type(o.Default or o.Value) == "table")
if isRange then
local d = type(o.Default or o.Value) == "table" and (o.Default or o.Value) or {}
local lo = d.Min or d[1] or o.Min or 0
local hi = d.Max or d[2] or o.Max or 100
local el = { Type = "RangeSlider", Flag = flag, Instance = newStamp() }
el.Value = { Min = lo, Max = hi, lo, hi }
el.MinValue, el.MaxValue = lo, hi
attachChanged(el)
local wave = waveSection:RangeSlider({
Name = o.Title or o.Name or "Range",
ToolTip = tip(o),
Minimum = o.Min or o.Minimum or 0,
Maximum = o.Max or o.Maximum or 100,
DefaultMin = lo,
DefaultMax = hi,
Precision = o.Rounding or o.Precision,
Callback = function(mn, mx)
el.Value = { Min = mn, Max = mx, mn, mx }
el.MinValue, el.MaxValue = mn, mx
Library:SafeCallback(o.Callback or o.Changed, el.Value)
el:_fireChanged(el.Value)
end,
}, flag)
el._wave = wave
attachCommon(el)
function el:SetValue(v)
if type(v) == "table" then
pcall(function()
wave:UpdateRange(v.Min or v[1], v.Max or v[2])
end)
end
return self
end
if flag then
Library.Options[flag] = el
end
return el
end
local el = { Type = "Slider", Value = o.Default or o.Value or o.Min or 0, Flag = flag, Instance = newStamp() }
attachChanged(el)
local wave = waveSection:Slider({
Name = o.Title or o.Name or "Slider",
ToolTip = tip(o),
Default = o.Default or o.Value,
Minimum = o.Min or o.Minimum or 0,
Maximum = o.Max or o.Maximum or 100,
Precision = o.Rounding or o.Precision,
Callback = function(v)
el.Value = v
Library:SafeCallback(o.Callback or o.Changed, v)
el:_fireChanged(v)
end,
}, flag)
el._wave = wave
attachCommon(el)
function el:SetValue(v)
pcall(function()
wave:UpdateValue(v)
end)
return self
end
if flag then
Library.Options[flag] = el
end
return el
end
function S:CreateDropdown(flag, o)
flag, o = normArgs(flag, o)
local el = {
Type = "Dropdown",
Value = o.Default or o.Value,
Flag = flag,
Multi = o.Multi or false,
CustomDisplayer = nil,
Instance = newStamp(),
}
attachChanged(el)
local wave = waveSection:Dropdown({
Name = o.Title or o.Name or "Dropdown",
ToolTip = tip(o),
Options = o.Values or o.Options or {},
Default = o.Default or o.Value,
Multi = o.Multi or false,
Required = (o.AllowNull == false) or (o.AutoDeselect == false),
Search = o.Search or o.Searchable or false,
Callback = function(sel)
el.Value = sel
Library:SafeCallback(o.Callback or o.Changed, sel)
el:_fireChanged(sel)
end,
}, flag)
el._wave = wave
attachCommon(el)
function el:SetValue(v)
pcall(function()
wave:UpdateSelection(v)
end)
return self
end
function el:SetValues(list)
pcall(function()
local current = {}
for opt in next, wave:GetOptions() do
current[#current + 1] = opt
end
if #current > 0 then
wave:RemoveOptions(current)
end
if list and #list > 0 then
wave:InsertOptions(list)
end
end)
return self
end
el.SetOptions = el.SetValues
function el:GetActiveValues()
if el.Multi then
local out = {}
if type(el.Value) == "table" then
for v, on in next, el.Value do
if on then
out[#out + 1] = v
end
end
end
return out
end
return el.Value ~= nil and 1 or 0
end
-- Fluent-style "fire on load": the native dropdown selects a default but only fires its
-- Callback on user click (and skips string defaults). Applying the selection here -- during
-- construction, while no :OnChanged handlers are registered yet -- selects the default of any
-- type (index / string / list), resolves el.Value, and fires the options Callback once.
-- :OnChanged handlers fire themselves on registration, so nothing double-fires.
if (o.Default or o.Value) ~= nil then
pcall(function()
wave:UpdateSelection(o.Default or o.Value)
end)
end
if flag then
Library.Options[flag] = el
end
return el
end
function S:CreateColorpicker(flag, o)
flag, o = normArgs(flag, o)
local el = {
Type = "Colorpicker",
Value = o.Default or o.Value or Color3.new(1, 1, 1),
Transparency = o.Transparency or 0,
Flag = flag,
Instance = newStamp(),
}
attachChanged(el)
local wave = waveSection:ColorPicker({
Name = o.Title or o.Name or "Colorpicker",
ToolTip = tip(o),
Default = o.Default or o.Value or Color3.new(1, 1, 1),
Alpha = type(o.Transparency) == "number" and o.Transparency or nil,
Callback = function(color, alpha)
el.Value = color
if alpha ~= nil then
el.Transparency = alpha
end
Library:SafeCallback(o.Callback or o.Changed, color, alpha)
el:_fireChanged(color, alpha)
end,
}, flag)
el._wave = wave
attachCommon(el)
function el:SetValueRGB(color, transparency)
pcall(function()
wave:SetColor(color)
end)
if type(transparency) == "number" then
pcall(function()
wave:SetAlpha(transparency)
end)
end
return self
end
-- Fork's SetValue takes HSV {Hue,Sat,Vib}; also accept a Color3.
function el:SetValue(a, t)
if typeof(a) == "Color3" then
el:SetValueRGB(a, t)
elseif type(a) == "table" then
local h = a.Hue or a[1] or 0
local s = a.Sat or a[2] or 0
local v = a.Vib or a[3] or 0
el:SetValueRGB(Color3.fromHSV(h, s, v), t)
end
return self
end
if flag then
Library.Options[flag] = el
end
return el
end
function S:CreateKeybind(flag, o)
flag, o = normArgs(flag, o)
local el = {
Type = "Keybind",
Value = o.Default or o.Value,
Mode = o.Mode or "Toggle",
Toggled = false,
Flag = flag,
Instance = newStamp(),
_clicks = {},
}
attachChanged(el)
local function press()
if el.Mode == "Toggle" then
el.Toggled = not el.Toggled
else
el.Toggled = true
end
Library:SafeCallback(o.Callback, el.Toggled)
for _, fn in ipairs(el._clicks) do
Library:SafeCallback(fn, el.Toggled)
end
end
local wave = waveSection:Keybind({
Name = o.Title or o.Name or "Keybind",
ToolTip = tip(o),
Default = toKeyEnum(o.Default or o.Value),
Callback = function()
press()
end,
}, flag)
el._wave = wave
attachCommon(el)
function el:GetState()
if el.Mode == "Always" then
return true
end
return el.Toggled
end
function el:OnClick(fn)
if type(fn) == "function" then
table.insert(el._clicks, fn)
end
return el
end
function el:DoClick()
press()
return el
end
function el:SetValue(key, mode)
if mode then
el.Mode = mode
end
local e = toKeyEnum(key)
el.Value = e
pcall(function()
wave:Bind(e)
end)
Library:SafeCallback(o.ChangedCallback, e)
el:_fireChanged(e)
return el
end
function el:GetBind()
local ok, b = pcall(function()
return wave:GetBind()
end)
return (ok and b) or el.Value
end
if flag then
Library.Options[flag] = el
end
return el
end
function S:CreateInput(flag, o)
flag, o = normArgs(flag, o)
local el = { Type = "Input", Value = o.Default or o.Value or "", Flag = flag, Instance = newStamp() }
attachChanged(el)
local wave = waveSection:Input({
Name = o.Title or o.Name or "Input",
Default = o.Default or o.Value,
Placeholder = o.Placeholder,
AcceptedCharacters = o.Numeric and "Numeric" or "All",
Callback = function(text)
el.Value = text
Library:SafeCallback(o.Callback, text)
el:_fireChanged(text)
end,
}, flag)
el._wave = wave
attachCommon(el)
function el:SetValue(t)
pcall(function()
wave:UpdateText(tostring(t))
end)
return self
end
if flag then
Library.Options[flag] = el
end
return el
end
function S:CreateParagraph(flag, o)
flag, o = normArgs(flag, o)
local el = { Type = "Paragraph", Value = o.Content or o.Body or o.Value or "", Flag = flag, Instance = newStamp() }
attachChanged(el)
local wave = waveSection:Paragraph({
Header = o.Title or o.Header or "",
Body = o.Content or o.Body or o.Value or "",
}, flag)
el._wave = wave
attachCommon(el)
function el:SetContent(text)
el.Value = text
pcall(function()
wave:UpdateBody(text)
end)
el:_fireChanged(text)
return self
end
el.SetValue = el.SetContent
function el:SetTitle(text)
pcall(function()
wave:UpdateHeader(text)
end)
return self
end
if flag then
Library.Options[flag] = el
end
return el
end
function S:CreateDivider(label)
if type(label) == "table" then
label = label.Title or label.Text or label.Label or label.Name
end
local el = { Type = "Divider" }
el._wave = waveSection:Divider({ Text = label })
attachCommon(el)
return el
end
function S:CreateLabel(o)
local text = type(o) == "table" and (o.Title or o.Text or o.Name) or o
local el = { Type = "Label", _wave = waveSection:Label({ Name = text }) }
attachCommon(el)
return el
end
function S:CreateViewport(flag, o)
flag, o = normArgs(flag, o)
local el = { Type = "Viewport", Flag = flag, Instance = newStamp() }
local wave = waveSection:Viewport({
Title = o.Title or o.Name,
Height = o.Height,
Model = o.Model or o.Object,
AutoRotate = o.AutoRotate,
RotateSpeed = o.RotateSpeed,
}, flag)
el._wave = wave
attachCommon(el)
function el:SetModel(m)
pcall(function() wave:SetModel(m) end)
return self
end
function el:Clear()
pcall(function() wave:Clear() end)
return self
end
function el:GetModel()
local ok, m = pcall(function() return wave:GetModel() end)
return ok and m or nil
end
function el:SetAutoRotate(state)
pcall(function() wave:SetAutoRotate(state) end)
return self
end
function el:ResetView()
pcall(function() wave:ResetView() end)
return self
end
function el:GetCamera()
local ok, cam = pcall(function() return wave:GetCamera() end)
return ok and cam or nil
end
function el:SetCamera(cam)
pcall(function() wave:SetCamera(cam) end)
return self
end
if flag then
Library.Options[flag] = el
end
return el
end
function S:CreateSegmented(flag, o)
flag, o = normArgs(flag, o)
local el = { Type = "Segmented", Value = o.Default, Flag = flag, Instance = newStamp() }
attachChanged(el)
local wave = waveSection:Segmented({
Name = o.Title or o.Name,
Options = o.Values or o.Options,
Default = o.Default,
Callback = function(v)
el.Value = v
Library:SafeCallback(o.Callback, v)
el:_fireChanged(v)
end,
}, flag)
el._wave = wave
attachCommon(el)
function el:SetValue(v)
pcall(function() wave:SetValue(v) end)
return self
end
if flag then
Library.Options[flag] = el
end
return el
end
function S:CreateStat(flag, o)
flag, o = normArgs(flag, o)
local el = { Type = "Stat", Value = o.Value, Flag = flag, Instance = newStamp() }
local wave = waveSection:Stat({ Title = o.Title or o.Name, Value = o.Value, Icon = o.Icon }, flag)
el._wave = wave
attachCommon(el)
function el:SetValue(v)
el.Value = v
pcall(function() wave:SetValue(v) end)
return self
end
function el:SetLabel(t)
pcall(function() wave:SetLabel(t) end)
return self
end
if flag then
Library.Options[flag] = el
end
return el
end
function S:CreateCallout(flag, o)
flag, o = normArgs(flag, o)
local el = { Type = "Callout", Flag = flag, Instance = newStamp() }
local wave = waveSection:Callout({
Title = o.Title or o.Name,
Content = o.Content or o.Text or o.Description,
Style = o.Style,
}, flag)
el._wave = wave
attachCommon(el)
function el:SetContent(t)
pcall(function() wave:SetContent(t) end)
return self
end
el.SetValue = el.SetContent
if flag then
Library.Options[flag] = el
end
return el
end
function S:CreateImage(flag, o)
flag, o = normArgs(flag, o)
local image = o.Image or o.Url
if not image and type(flag) == "string" and (flag:find("rbxasset") or flag:find("http")) then
image, flag = flag, nil
end
local el = { Type = "Image", Flag = flag, Instance = newStamp() }
local wave = waveSection:Image({
Image = image,
Height = o.Height,
AspectRatio = o.AspectRatio,
Transparency = o.Transparency,
}, flag)
el._wave = wave
attachCommon(el)
function el:SetImage(i)
pcall(function() wave:SetImage(i) end)
return self
end
el.SetValue = el.SetImage
if flag then
Library.Options[flag] = el
end
return el
end
-- short + Add* aliases for every element
for _, bse in ipairs(BASES) do
local target = "Create" .. bse
S["Add" .. bse] = function(self, ...)
return self[target](self, ...)
end
S[bse] = function(self, ...)
return self[target](self, ...)
end
end
S.CreateColorPicker = S.CreateColorpicker
S.AddColorPicker = S.AddColorpicker
S.ColorPicker = S.Colorpicker
return S
end
-- =====================================================================
-- Tab facade
-- =====================================================================
local function makeTab(waveTab)
local T = { _wave = waveTab, Type = "Tab" }
local defaultSec, sectionCount = nil, 0
local function sectionWith(side, title)
local ws = waveTab:Section({ Side = side, DisplayTitle = title })
if title and title ~= "" then
pcall(function()
ws:DisplayTitle()
end)
end
return makeSection(ws)
end
local function getDefault()
if not defaultSec then
defaultSec = sectionWith("Left", nil)
end
return defaultSec
end
-- forward every element method to the default section
local function fwd(name)
return function(_, ...)
local d = getDefault()
return d[name](d, ...)
end
end
for _, bse in ipairs(BASES) do
T["Create" .. bse] = fwd("Create" .. bse)
T["Add" .. bse] = fwd("Create" .. bse)
T[bse] = fwd("Create" .. bse)
end
T.CreateColorPicker = T.CreateColorpicker
T.AddColorPicker = T.CreateColorpicker
T.ColorPicker = T.Colorpicker
function T:Left(title)
return sectionWith("Left", title)
end
T.AddLeft, T.CreateLeft = T.Left, T.Left
function T:Right(title)
return sectionWith("Right", title)
end
T.AddRight, T.CreateRight = T.Right, T.Right
function T:Section(title)
sectionCount = sectionCount + 1
local side = (sectionCount % 2 == 1) and "Left" or "Right"
return sectionWith(side, title)
end
T.CreateSection, T.AddSection = T.Section, T.Section
return T
end
-- =====================================================================
-- Library
-- =====================================================================
Library = {
Version = "Wave",
Options = {},
Themes = { "Cobalt" },
Theme = "Cobalt",
UseAcrylic = true,
Acrylic = true,
Transparency = true,
Loaded = true,
MinimizeKey = Enum.KeyCode.RightControl,
MinimizeKeybind = nil,
Window = nil,
CreatedWindow = nil,
DialogOpen = false,
}
Library.OnUnload = makeSignal()
Library.PostUnload = makeSignal()
Library.ThemeChanged = makeSignal()
-- live Unloaded flag, reads Wave's real state so ported loops stop on close
setmetatable(Library, {
__index = function(t, k)
if k == "Unloaded" then
if rawget(t, "_unloaded") then
return true
end
return (WaveUserInterface and WaveUserInterface.Unloaded) and true or false
end
return nil
end,
})
function Library:SafeCallback(fn, ...)
if type(fn) ~= "function" then
return
end
local args = table.pack(...)
local ok, err = pcall(function()
return fn(table.unpack(args, 1, args.n))
end)
if not ok then
warnf("callback error:", err)
end
end
function Library:Notify(opts)
opts = opts or {}
local desc = opts.Content or opts.Description or ""
if opts.SubContent and opts.SubContent ~= "" then
desc = (desc ~= "" and (desc .. "\n") or "") .. opts.SubContent
end
local w = rawget(self, "_waveWindow")
if w then
local ok, res = pcall(function()
return w:Notify({ Title = opts.Title or "Notification", Description = desc, Lifetime = opts.Duration })
end)
if ok then
return res
end
warnf("Notify failed:", res)
end
return nil
end
function Library:SetTheme(name)
self.Theme = name
local w = rawget(self, "_waveWindow")
if w then
pcall(function()
w:ApplyTheme(name)
end)
end
self.ThemeChanged:Fire(name)
end
function Library:GetCurrentTheme()
local w = rawget(self, "_waveWindow")
if w then
local ok, t = pcall(function()
return w:GetCurrentTheme()
end)
if ok and t then
return t
end
end
return self.Theme
end
function Library:ToggleAcrylic(state)
self.UseAcrylic, self.Acrylic = state, state
local w = rawget(self, "_waveWindow")
if w then
pcall(function()
w:SetAcrylicBlurState(state)
end)
end
end
function Library:ToggleTransparency(state)
self.Transparency = state
end
function Library:OnUnloadCallback(fn)
return self.OnUnload:Connect(fn)
end
function Library:Unload()
rawset(self, "_unloaded", true)
local w = rawget(self, "_waveWindow")
if w then
pcall(function()
w:Unload()
end)
end
self.OnUnload:Fire()
self.PostUnload:Fire()
end
Library.Destroy = Library.Unload
Library.Close = Library.Unload
-- Library.Utilities — minimal versions of Fluent's helpers
Library.Utilities = {}
function Library.Utilities:Truncate(number, decimals, round)
local factor = 10 ^ (decimals or 0)
if round then
return math.round(number * factor) / factor
end
return math.floor(number * factor) / factor
end
function Library.Utilities:Round(number, factor)
return self:Truncate(number, factor, true)
end
function Library.Utilities:Prettify(v)
if typeof(v) == "EnumItem" then
return (tostring(v):gsub("Enum.%w+%.", ""):gsub("(%l)(%u)", "%1 %2"))
elseif type(v) == "number" then
return self:Round(v, 2)
end
return tostring(v)
end
function Library.Utilities:GetOS()
return "Windows"
end
function Library.Utilities:Clone(x)
return x, true
end
function Library.Utilities:GetIcon()
return nil
end
function Library:CreateWindow(opts)
opts = opts or {}
-- Show the splash loader BEFORE the heavy Wave build runs. The single
-- task.wait() yields exactly one frame so the splash gets a chance to
-- render before the build freezes the main thread. RenderStepped keeps
-- the spinner rotating throughout the freeze, so users see continuous
-- motion instead of a stalled UI. Devs can opt out with Splash = false.
--
-- activeSplash is read by attachCommon (every element) so the splash knows
-- when the build is genuinely done (config-applied last element settled),
-- rather than revealing on a blind timer.
local splash
if opts.Splash ~= false then
splash = buildSplashLoader()
activeSplash = splash
task.wait()
else
activeSplash = nil
end
local waveWindow = WaveUserInterface:Window({
Title = opts.Title or "Wave",
Subtitle = opts.SubTitle or opts.Subtitle,
Size = opts.Size,
DragStyle = 2,
DisabledWindowControls = {},
AcrylicBlur = opts.Acrylic ~= false,
-- floating show/hide button that stays visible when minimized (opt out
-- with ToggleButton = false in your CreateWindow options)
ToggleButton = opts.ToggleButton ~= false,
-- top-right status bar: live FPS + @username + game name (opt out with
-- StatusBar = false)
StatusBar = opts.StatusBar ~= false,
})
genv.WaveLibrary = waveWindow
rawset(self, "_waveWindow", waveWindow)
-- Start the activity watcher: the splash reveals the UI once element/config
-- loading goes quiet (see controller:watch), so the reveal is tied to the
-- real end of the build, not a fixed delay. The window's own reveal anim
-- runs underneath in the meantime, so when the splash lifts the UI is
-- already in place and the fade-out reads as a smooth reveal.
if splash then
splash:watch()
end
pcall(function()
waveWindow.OnUnloaded(function()
rawset(Library, "_unloaded", true)
Library.OnUnload:Fire()
Library.PostUnload:Fire()
-- Defensive: if the user unloads before the splash finished
-- (rare, but cheap to guard), kill the splash too.
if splash then pcall(function() splash:hide() end) end
end)
end)
self.UseAcrylic = opts.Acrylic ~= false
self.Theme = opts.Theme or self.Theme
if opts.MinimizeKey then
self.MinimizeKey = opts.MinimizeKey
pcall(function()
waveWindow:SetKeybind(opts.MinimizeKey)
end)
end
local W = {
_wave = waveWindow,
_currentGroup = waveWindow:TabGroup(),
_tabs = {},
_order = {},
_themed = false,
_pendingTheme = opts.Theme or "Cobalt", -- default theme when a script doesn't specify one
Type = "Window",
}
self.CreatedWindow = W
local function wireThemes()
if W._themed then
return
end
W._themed = true
pcall(function()
waveWindow:Initialize()
end)
pcall(function()
local names = waveWindow:GetThemeNames()
if type(names) == "table" and #names > 0 then
table.sort(names)
Library.Themes = names
end
end)
if W._pendingTheme then
pcall(function()
waveWindow:ApplyTheme(W._pendingTheme)
end)
end
end
function W:CreateTab(tabOpts)
tabOpts = tabOpts or {}
local tabSettings = { Name = tabOpts.Title or "Tab" }
local icon = resolveIcon(tabOpts.Icon)
if icon then
tabSettings.Image = icon.Image
tabSettings.ImageRectOffset = icon.ImageRectOffset
tabSettings.ImageRectSize = icon.ImageRectSize
end
local waveTab = W._currentGroup:Tab(tabSettings)
local T = makeTab(waveTab)
table.insert(W._order, waveTab)
if tabOpts.Title then
W._tabs[tabOpts.Title] = waveTab
end
if #W._order == 1 then
pcall(function()
waveTab:Select()
end)
wireThemes()
end
return T
end
W.AddTab, W.Tab = W.CreateTab, W.CreateTab
function W:Divider(label)
if type(label) == "table" then
label = label.Title or label.Text or label.Label or label.Name
end
W._currentGroup = waveWindow:TabGroup(label)
return W
end
W.AddDivider, W.CreateDivider, W.TabDivider = W.Divider, W.Divider, W.Divider
function W:Minimize()
pcall(function()
waveWindow:SetWindowState(not waveWindow:GetState())
end)
end
function W:Maximize()
-- Wave has no maximize-to-viewport; best-effort no-op.
end
function W:Dialog(d)
d = d or {}
local buttons = {}
for _, b in ipairs(d.Buttons or {}) do
local cb = b.Callback
buttons[#buttons + 1] = {
Name = b.Title or b.Name or "OK",
Callback = function()
Library.DialogOpen = false
Library:SafeCallback(cb)
end,
}
end
Library.DialogOpen = true
local ok, res = pcall(function()
return waveWindow:Dialog({
Title = d.Title,
Description = d.Content or d.Description,
Buttons = buttons,
})
end)
if not ok then
Library.DialogOpen = false
warnf("Dialog failed:", res)
end
return ok and res or nil
end
function W:Notify(n)
return Library:Notify(n)
end
function W:TerminalViewport(opts)
opts = opts or {}
local ok, handle = pcall(function()
return waveWindow:TerminalViewport({
Model = opts.Model or opts.Object,
AutoRotate = opts.AutoRotate,
RotateSpeed = opts.RotateSpeed,
})
end)
return ok and handle or nil
end
-- Server browser: a slide-out panel (icon left of the terminal) listing joinable servers.
-- W:AddServer{ Image = "rbxassetid://..", Title = .., Description = .., Callback = function(card) end }
function W:AddServer(s)
s = s or {}
local handle
pcall(function()
handle = waveWindow:AddServer({
Image = s.Image or s.Thumbnail or s.Icon,
Title = s.Title or s.Name,
Description = s.Description or s.Desc or s.SubTitle or s.Subtitle,
Callback = s.Callback or s.Join or s.OnJoin or s.Func,
})
end)
return handle
end
W.CreateServer, W.Server = W.AddServer, W.AddServer
function W:ClearServers()
pcall(function()
waveWindow:ClearServers()
end)
return self
end
function W:OnServerRefresh(fn)
pcall(function()
waveWindow:SetServerRefresh(fn)
end)
return self
end
W.SetServerRefresh = W.OnServerRefresh
function W:SetServerTitle(t)
pcall(function()
waveWindow:SetServerTitle(t)
end)
return self
end
function W:ToggleServerBrowser(state)
pcall(function()
waveWindow:ToggleServerBrowser(state)
end)
return self
end
function W:OpenServerBrowser()
return W:ToggleServerBrowser(true)
end
function W:CloseServerBrowser()
return W:ToggleServerBrowser(false)
end
function W:SelectTab(i)
local t
if type(i) == "number" then
t = W._order[i]
elseif type(i) == "string" then
t = W._tabs[i]
elseif type(i) == "table" then
t = i._wave or i
end
if t then
pcall(function()
t:Select()
end)
end
end
function W:Unload()
return Library:Unload()
end
W.Destroy, W.Close = W.Unload, W.Unload
return W
end
Library.Window = Library.CreateWindow
Library.AddWindow = Library.CreateWindow
return Library