local library = loadstring(game:HttpGet("https://raw.githubusercontent.
com/vozoid/
ui-libraries/main/drawing/void/source.lua"))()
local watermark = library:Watermark("watermark | 60 fps | v4.20 | dev")
-- watermark:Set("Watermark Set")
-- watermark:Hide() -- toggles watermark
local main = library:Load{
Name = "vozoid hax or something",
SizeX = 600,
SizeY = 650,
Theme = "Midnight",
Extension = "json", -- config file extension
Folder = "vozoid ui or something" -- config folder name
}
-- library.Extension = "txt" (config file extension)
-- library.Folder = "config folder name"
local tab = main:Tab("Tab")
local section = tab:Section{
Name = "Section",
Side = "Left"
}
local label = section:Label("Label")
--label:Set("Label Set")
section:Button{
Name = "Button",
Callback = function()
print("Button clicked")
end
}
local seperator = section:Separator("Separator")
--separator:Set("Separator Set")
local toggle = section:Toggle{
Name = "Toggle",
Flag = "Toggle 1",
--Default = true,
Callback = function(bool)
print("Toggle 1 is now " .. (bool and "enabled" or "disabled"))
end
}
local togglepicker1 = toggle:ColorPicker{
Default = Color3.fromRGB(255, 0, 0),
Flag = "Toggle 1 Picker 1",
Callback = function(color)
print("Toggle 1 Picker 1 is now " .. string.format("%s, %s, %s, %s",
math.round(color.R * 255), math.round(color.G * 255), math.round(color.B * 255),
math.floor(color.A * 100) / 100))
end
}
--togglepicker1:Set(Color3.fromRGB(255, 255, 255))
local togglepicker2 = toggle:ColorPicker{
Default = Color3.fromRGB(0, 255, 0),
Flag = "Toggle 1 Picker 2",
Callback = function(color)
print("Toggle 1 Picker 2 is now " .. string.format("%s, %s, %s, %s",
math.round(color.R * 255), math.round(color.G * 255), math.round(color.B * 255),
math.floor(color.A * 100) / 100))
end
}
--togglepicker2:Set(Color3.fromRGB(255, 255, 255))
--toggle:Toggle(true)
local toggle2 = section:Toggle{
Name = "Toggle 2",
Flag = "Toggle 2",
--Default = true,
Callback = function(bool)
print("Toggle 2 is now " .. (bool and "enabled" or "disabled"))
end
}
toggle2:Keybind{
--Default = Enum.KeyCode.A,
Blacklist = {Enum.UserInputType.MouseButton1},
Flag = "Toggle 2 Keybind 1",
Mode = "Toggle", -- mode to nil if u dont want it to toggle the toggle
Callback = function(key, fromsetting)
if fromsetting then
print("Toggle 2 Keybind 1 is now " .. tostring(key))
else
print("Toggle 2 Keybind 1 was pressed")
end
end
}
local toggle3 = section:Toggle{
Name = "Toggle 3",
Flag = "Toggle 3",
--Default = true,
Callback = function(bool)
print("Toggle 3 is now " .. (bool and "enabled" or "disabled"))
end
}
toggle3:Slider{
Text = "[value]/5",
--Default = 5,
Min = 0,
Max = 5,
Float = 0.5,
Flag = "Slider 1",
Callback = function(value)
print("Toggle 3 Slider 1 is now " .. value)
end
}
local toggle4 = section:Toggle{
Name = "Toggle 4",
Flag = "Toggle 4",
--Default = true,
Callback = function(bool)
print("Toggle 4 is now " .. (bool and "enabled" or "disabled"))
end
}
toggle4:Dropdown{
--Default = "Option 1",
Content = {
"Option 1",
"Option 2",
"Option 3"
},
--Max = 5, -- turns into multidropdown
--Scrollable = true, -- makes it scrollable
--ScrollingMax = 5, -- caps the amount it contains before scrolling
Flag = "Dropdown 1",
Callback = function(option)
print("Dropdown 1 is now " .. tostring(option))
end
}
local box = section:Box{
Name = "Box",
--Default = "hi",
Placeholder = "Box Placeholder",
Flag = "Box 1",
Callback = function(text)
print("Box 1 is now " .. text)
end
}
--box:Set("New box text")
local slider = section:Slider{
Name = "Slider",
Text = "[value]/1",
--Default = 0.1,
Min = 0,
Max = 1,
Float = 0.1,
Flag = "Slider 1",
Callback = function(value)
print("Slider 1 is now " .. value)
end
}
--slider:Set(1)
local dropdown = section:Dropdown{
Name = "Dropdown",
--Default = "Option 1",
Content = {
"Option 1",
"Option 2",
"Option 3"
},
Flag = "Dropdown 1",
Callback = function(option)
print("Dropdown 1 is now " .. tostring(option))
end
}
dropdown:Set() -- using this without any args or with wrong args will unset the
dropdown
--dropdown:Set("option 6") wont work and will unset
dropdown:Refresh{
"Refreshed option 1",
"Refreshed option 2",
"Refreshed option 3"
}
dropdown:Set("Refreshed option 1")
dropdown:Add("Option 4")
dropdown:Remove("Option 4")
local multidropdown = section:Dropdown{
Name = "Multi dropdown",
--Default = {"Option 1"},
Max = 3, -- makes it multi
Content = {
"Option 1",
"Option 2",
"Option 3"
},
Flag = "Multi dropdown 1",
Callback = function(option)
print("Multi dropdown 1 is now " .. table.concat(option, ", "))
end
}
multidropdown:Set() -- using this without any args or with wrong args will unset
the dropdown
multidropdown:Set{} -- using this without any args or with wrong args will unset
the dropdown
--multidropdown:Set{"option 12321313"} wont work and will unset
--multidropdown:Set("hello") wont work and will unset
multidropdown:Refresh{
"Refreshed option 1",
"Refreshed option 2",
"Refreshed option 3",
"Refreshed option 4"
}
multidropdown:Set{
"Refreshed option 1",
"Refreshed option 2"
}
multidropdown:Add("Option 5")
multidropdown:Remove("Option 5")
local dropdown = section:Dropdown{
Name = "Scrolling Dropdown",
--Default = "Option 1",
Scrollable = true,
ScrollingMax = 5,
Content = {
"Option 1",
"Option 2",
"Option 3",
"Option 4",
"Option 5",
"Option 6",
"Option 7"
},
Flag = "Scrolling Dropdown 1",
Callback = function(option)
print("Scrolling Dropdown 1 is now " .. tostring(option))
end
}
local colorpicker = section:ColorPicker{
Name = "Color picker",
Default = Color3.fromRGB(0, 255, 0),
Flag = "Color picker 1",
Callback = function(color)
print("Color picker 1 is now: " .. string.format("%s, %s, %s, %s",
math.round(color.R * 255), math.round(color.G * 255), math.round(color.B * 255),
math.floor(color.A * 100) / 100))
end
}
--colorpicker:Set(Color3.fromRGB(255, 255, 255))
local colorpickerpicker1 = colorpicker:ColorPicker{
Default = Color3.fromRGB(0, 255, 255),
DefaultAlpha = 0.5,
Flag = "Color picker picker 1",
Callback = function(color)
print("Color picker 1 picker 1 is now: " .. string.format("%s, %s, %s, %s",
math.round(color.R * 255), math.round(color.G * 255), math.round(color.B * 255),
math.floor(color.A * 100) / 100))
end
}
--colorpickerpicker1:Set(Color3.fromRGB(255, 255, 255))
local colorpickerpicker2 = colorpicker:ColorPicker{
Default = Color3.fromRGB(255, 255, 255),
Flag = "Color picker picker 2",
Callback = function(color)
print("Color picker 1 picker 2 is now " .. string.format("%s, %s, %s, %s",
math.round(color.R * 255), math.round(color.G * 255), math.round(color.B * 255),
math.floor(color.A * 100) / 100))
end
}
--colorpickerpicker2:Set(Color3.fromRGB(255, 255, 255))
local keybind = section:Keybind{
Name = "Keybind",
--Default = Enum.KeyCode.A,
--Blacklist = {Enum.UserInputType.MouseButton1,
Enum.UserInputType.MouseButton2},
Flag = "Keybind 1",
Callback = function(key, fromsetting)
if fromsetting then
print("Keybind 1 is now " .. tostring(key))
else
print("Keybind 1 was pressed")
end
end
}
--library:SaveConfig("config", true) -- universal config
--library:SaveConfig("config") -- game specific config
--library:DeleteConfig("config", true) -- universal config
--library:DeleteConfig("config") -- game specific config
--library:GetConfigs(true) -- return universal and game specific configs (table)
--library:GetConfigs() -- return game specific configs (table)
--library:LoadConfig("config", true) -- load universal config
--library:LoadConfig("config") -- load game specific config
local configs = main:Tab("Configuration")
local themes = configs:Section{Name = "Theme", Side = "Left"}
local themepickers = {}
local themelist = themes:Dropdown{
Name = "Theme",
Default = library.currenttheme,
Content = library:GetThemes(),
Flag = "Theme Dropdown",
Callback = function(option)
if option then
library:SetTheme(option)
for option, picker in next, themepickers do
picker:Set(library.theme[option])
end
end
end
}
library:ConfigIgnore("Theme Dropdown")
local namebox = themes:Box{
Name = "Custom Theme Name",
Placeholder = "Custom Theme",
Flag = "Custom Theme"
}
library:ConfigIgnore("Custom Theme")
themes:Button{
Name = "Save Custom Theme",
Callback = function()
if library:SaveCustomTheme(library.flags["Custom Theme"]) then
themelist:Refresh(library:GetThemes())
themelist:Set(library.flags["Custom Theme"])
namebox:Set("")
end
end
}
local customtheme = configs:Section{Name = "Custom Theme", Side = "Right"}
themepickers["Accent"] = customtheme:ColorPicker{
Name = "Accent",
Default = library.theme["Accent"],
Flag = "Accent",
Callback = function(color)
library:ChangeThemeOption("Accent", color)
end
}
library:ConfigIgnore("Accent")
themepickers["Window Background"] = customtheme:ColorPicker{
Name = "Window Background",
Default = library.theme["Window Background"],
Flag = "Window Background",
Callback = function(color)
library:ChangeThemeOption("Window Background", color)
end
}
library:ConfigIgnore("Window Background")
themepickers["Window Border"] = customtheme:ColorPicker{
Name = "Window Border",
Default = library.theme["Window Border"],
Flag = "Window Border",
Callback = function(color)
library:ChangeThemeOption("Window Border", color)
end
}
library:ConfigIgnore("Window Border")
themepickers["Tab Background"] = customtheme:ColorPicker{
Name = "Tab Background",
Default = library.theme["Tab Background"],
Flag = "Tab Background",
Callback = function(color)
library:ChangeThemeOption("Tab Background", color)
end
}
library:ConfigIgnore("Tab Background")
themepickers["Tab Border"] = customtheme:ColorPicker{
Name = "Tab Border",
Default = library.theme["Tab Border"],
Flag = "Tab Border",
Callback = function(color)
library:ChangeThemeOption("Tab Border", color)
end
}
library:ConfigIgnore("Tab Border")
themepickers["Tab Toggle Background"] = customtheme:ColorPicker{
Name = "Tab Toggle Background",
Default = library.theme["Tab Toggle Background"],
Flag = "Tab Toggle Background",
Callback = function(color)
library:ChangeThemeOption("Tab Toggle Background", color)
end
}
library:ConfigIgnore("Tab Toggle Background")
themepickers["Section Background"] = customtheme:ColorPicker{
Name = "Section Background",
Default = library.theme["Section Background"],
Flag = "Section Background",
Callback = function(color)
library:ChangeThemeOption("Section Background", color)
end
}
library:ConfigIgnore("Section Background")
themepickers["Section Border"] = customtheme:ColorPicker{
Name = "Section Border",
Default = library.theme["Section Border"],
Flag = "Section Border",
Callback = function(color)
library:ChangeThemeOption("Section Border", color)
end
}
library:ConfigIgnore("Section Border")
themepickers["Text"] = customtheme:ColorPicker{
Name = "Text",
Default = library.theme["Text"],
Flag = "Text",
Callback = function(color)
library:ChangeThemeOption("Text", color)
end
}
library:ConfigIgnore("Text")
themepickers["Disabled Text"] = customtheme:ColorPicker{
Name = "Disabled Text",
Default = library.theme["Disabled Text"],
Flag = "Disabled Text",
Callback = function(color)
library:ChangeThemeOption("Disabled Text", color)
end
}
library:ConfigIgnore("Disabled Text")
themepickers["Object Background"] = customtheme:ColorPicker{
Name = "Object Background",
Default = library.theme["Object Background"],
Flag = "Object Background",
Callback = function(color)
library:ChangeThemeOption("Object Background", color)
end
}
library:ConfigIgnore("Object Background")
themepickers["Object Border"] = customtheme:ColorPicker{
Name = "Object Border",
Default = library.theme["Object Border"],
Flag = "Object Border",
Callback = function(color)
library:ChangeThemeOption("Object Border", color)
end
}
library:ConfigIgnore("Object Border")
themepickers["Dropdown Option Background"] = customtheme:ColorPicker{
Name = "Dropdown Option Background",
Default = library.theme["Dropdown Option Background"],
Flag = "Dropdown Option Background",
Callback = function(color)
library:ChangeThemeOption("Dropdown Option Background", color)
end
}
library:ConfigIgnore("Dropdown Option Background")
local configsection = configs:Section{Name = "Configs", Side = "Left"}
local configlist = configsection:Dropdown{
Name = "Configs",
Content = library:GetConfigs(), -- GetConfigs(true) if you want universal
configs
Flag = "Config Dropdown"
}
library:ConfigIgnore("Config Dropdown")
local loadconfig = configsection:Button{
Name = "Load Config",
Callback = function()
library:LoadConfig(library.flags["Config Dropdown"]) --
LoadConfig(library.flags["Config Dropdown"], true) if you want universal configs
end
}
local delconfig = configsection:Button{
Name = "Delete Config",
Callback = function()
library:DeleteConfig(library.flags["Config Dropdown"]) --
DeleteConfig(library.flags["Config Dropdown"], true) if you want universal configs
configlist:Refresh(library:GetConfigs())
end
}
local configbox = configsection:Box{
Name = "Config Name",
Placeholder = "Config Name",
Flag = "Config Name"
}
library:ConfigIgnore("Config Name")
local save = configsection:Button{
Name = "Save Config",
Callback = function()
library:SaveConfig(library.flags["Config Dropdown"] or
library.flags["Config Name"]) -- SaveConfig(library.flags["Config Name"], true) if
you want universal configs
configlist:Refresh(library:GetConfigs())
end
}
local keybindsection = configs:Section{Name = "UI Toggle Keybind", Side = "Left"}
keybindsection:Keybind{
Name = "UI Toggle",
Flag = "UI Toggle",
Default = Enum.KeyCode.RightShift,
Blacklist = {Enum.UserInputType.MouseButton1, Enum.UserInputType.MouseButton2,
Enum.UserInputType.MouseButton3},
Callback = function(_, fromsetting)
if not fromsetting then
library:Close()
end
end
}
local scrolling = main:Tab("Scrolling Columns")
for i = 1, 20 do
local sec = scrolling:Section{
Name = tostring(math.random(2000, 20000000)),
Side = math.random(1, 2) == 1 and "Left" or "Right"
}
for i = 1, math.random(3, 10) do
if math.random(1, 2) == 1 then
sec:Label(tostring(math.random(2000, 20000000)))
else
sec:Button{Name = tostring(math.random(2000, 20000000))}
end
end
end
--library:Close()
--library:Unload()