Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local Players = game:GetService("Players")
- local UserInputService = game:GetService("UserInputService")
- local RunService = game:GetService("RunService")
- local TweenService = game:GetService("TweenService")
- local Core = game:GetService("CoreGui")
- local Camera = workspace.CurrentCamera
- local Player = Players.LocalPlayer
- local Mouse = Player:GetMouse()
- local v2, v3 = Vector2.new, Vector3.new
- local udim2, udim = UDim2.new, UDim.new
- local rgb = Color3.fromRGB
- local Colors = {
- Primary = rgb(0, 153, 255), -- Framer blue
- PrimaryHover = rgb(0, 102, 204), -- darker blue for hover
- Background = rgb(26, 26, 26), -- dark background
- Surface = rgb(40, 40, 40), -- panels / cards
- Border = rgb(70, 70, 70), -- subtle borders
- TextPrimary = rgb(230, 230, 230), -- main text
- TextSecondary = rgb(160, 160, 160), -- secondary text
- TextTertiary = rgb(120, 120, 120), -- tertiary / muted text
- Divider = rgb(60, 60, 60), -- divider lines
- Hover = rgb(50, 50, 50) -- hover background for panels/buttons
- }
- local Modern = {}
- Modern.__index = Modern
- local function create(class, props)
- local obj = Instance.new(class)
- if props then
- for k,v in pairs(props) do
- obj[k] = v
- end
- end
- return obj
- end
- local function tween(obj, props, time, style, dir)
- local t = TweenService:Create(obj, TweenInfo.new(time or 0.2, style or Enum.EasingStyle.Quad, dir or Enum.EasingDirection.Out), props)
- t:Play()
- return t
- end
- local function roundCorners(parent, radius)
- local uc = create("UICorner", {Parent = parent, CornerRadius = UDim.new(0, radius or 8)})
- return uc
- end
- local function subtleStroke(parent, color, thickness)
- local s = create("UIStroke", {
- Parent = parent,
- Color = color or Colors.Border,
- Thickness = thickness or 1,
- Transparency = 0.6
- })
- return s
- end
- local Library = {
- Flags = {},
- Conns = {},
- ScreenGui = nil,
- TweenSpeed = 0.2
- }
- Library.__index = Library
- function Library:Connect(signal, fn)
- local c = signal:Connect(fn)
- table.insert(self.Conns, c)
- return c
- end
- function Library:Unload()
- for _,c in ipairs(self.Conns) do pcall(function() c:Disconnect() end) end
- if self.ScreenGui then pcall(function() self.ScreenGui:Destroy() end) end
- end
- function Library:Window(opts)
- opts = opts or {}
- local win = {}
- win.Name = opts.Name or "Liza"
- win.Size = opts.Size or udim2(0, 800, 0, 560)
- win.Tabs = {}
- win.CurrentTab = nil
- if self.ScreenGui then self.ScreenGui:Destroy() end
- self.ScreenGui = create("ScreenGui", {
- Parent = Core,
- ZIndexBehavior = Enum.ZIndexBehavior.Sibling,
- IgnoreGuiInset = true
- })
- -- Main container with subtle shadow effect
- local container = create("Frame", {
- Parent = self.ScreenGui,
- Size = win.Size,
- Position = udim2(0.5, -win.Size.X.Offset/2, 0.5, -win.Size.Y.Offset/2),
- BackgroundColor3 = Colors.Surface,
- BorderSizePixel = 0,
- ClipsDescendants = true
- })
- roundCorners(container, 12)
- subtleStroke(container, Colors.Border)
- -- Header
- local header = create("Frame", {
- Parent = container,
- Size = udim2(1, 0, 0, 56),
- Position = udim2(0, 0, 0, 0),
- BackgroundColor3 = Colors.Surface,
- BorderSizePixel = 0
- })
- local divider = create("Frame", {
- Parent = header,
- Size = udim2(1, 0, 0, 1),
- Position = udim2(0, 0, 1, -1),
- BackgroundColor3 = Colors.Divider,
- BorderSizePixel = 0
- })
- local title = create("TextLabel", {
- Parent = header,
- Position = udim2(0, 24, 0.5, 0),
- AnchorPoint = v2(0, 0.5),
- BackgroundTransparency = 1,
- Text = win.Name,
- Font = Enum.Font.SourceSansBold,
- TextSize = 20,
- TextColor3 = Colors.TextPrimary
- })
- -- Sidebar
- local sidebar = create("Frame", {
- Parent = container,
- Size = udim2(0, 200, 1, -56),
- Position = udim2(0, 0, 0, 56),
- BackgroundColor3 = Colors.Background,
- BorderSizePixel = 0
- })
- local sidebarDivider = create("Frame", {
- Parent = sidebar,
- Size = udim2(0, 1, 1, 0),
- Position = udim2(1, -1, 0, 0),
- BackgroundColor3 = Colors.Divider,
- BorderSizePixel = 0
- })
- local tabHolder = create("Frame", {
- Parent = sidebar,
- Size = udim2(1, -16, 1, -24),
- Position = udim2(0, 16, 0, 16),
- BackgroundTransparency = 1,
- })
- local list = create("UIListLayout", {
- Parent = tabHolder,
- Padding = UDim.new(0, 4),
- HorizontalAlignment = Enum.HorizontalAlignment.Left
- })
- -- Content area
- local contentArea = create("ScrollingFrame", {
- Parent = container,
- Size = udim2(1, -216, 1, -72),
- Position = udim2(0, 200, 0, 56),
- BackgroundTransparency = 1,
- ScrollBarThickness = 3,
- ScrollBarImageColor3 = Colors.Border,
- BorderSizePixel = 0,
- CanvasSize = UDim2.new(0, 0, 0, 0)
- })
- local contentLayout = create("UIListLayout", {
- Parent = contentArea,
- Padding = UDim.new(0, 16),
- SortOrder = Enum.SortOrder.LayoutOrder
- })
- contentLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function()
- contentArea.CanvasSize = UDim2.new(0, 0, 0, contentLayout.AbsoluteContentSize.Y + 20)
- end)
- win.Root = container
- win.Header = header
- win.Title = title
- win.Sidebar = sidebar
- win.TabHolder = tabHolder
- win.Content = contentArea
- -- Dragging functionality
- do
- local dragging, start, startPos
- header.InputBegan:Connect(function(input)
- if input.UserInputType == Enum.UserInputType.MouseButton1 then
- dragging = true
- start = input.Position
- startPos = container.Position
- end
- end)
- header.InputEnded:Connect(function(input)
- if input.UserInputType == Enum.UserInputType.MouseButton1 then
- dragging = false
- end
- end)
- self:Connect(UserInputService.InputChanged, function(input)
- if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then
- local delta = input.Position - start
- container.Position = UDim2.new(
- startPos.X.Scale, startPos.X.Offset + delta.X,
- startPos.Y.Scale, startPos.Y.Offset + delta.Y
- )
- end
- end)
- end
- return setmetatable(win, Library)
- end
- -- Tab methods
- function Library:Tab(opts)
- opts = opts or {}
- local tab = {}
- tab.Name = opts.Name or "Tab"
- tab.Icon = opts.Icon or ""
- -- Create tab button
- local tabBtn = create("TextButton", {
- Parent = self.TabHolder,
- Size = udim2(1, 0, 0, 40),
- BackgroundColor3 = Colors.Background,
- AutoButtonColor = false,
- Text = "",
- BorderSizePixel = 0,
- LayoutOrder = #self.Tabs
- })
- roundCorners(tabBtn, 6)
- local btnContent = create("Frame", {
- Parent = tabBtn,
- Size = udim2(1, -16, 1, -8),
- Position = udim2(0, 8, 0, 4),
- BackgroundTransparency = 1
- })
- local btnTitle = create("TextLabel", {
- Parent = btnContent,
- Size = udim2(1, 0, 1, 0),
- BackgroundTransparency = 1,
- Text = tab.Name,
- Font = Enum.Font.SourceSans,
- TextSize = 14,
- TextColor3 = Colors.TextSecondary,
- TextXAlignment = Enum.TextXAlignment.Left
- })
- -- Create tab content frame
- local content = create("Frame", {
- Parent = self.Content,
- Size = udim2(1, 0, 0, 0),
- BackgroundTransparency = 1,
- Visible = false
- })
- local contentList = create("UIListLayout", {
- Parent = content,
- Padding = UDim.new(0, 16),
- SortOrder = Enum.SortOrder.LayoutOrder
- })
- tab.Btn = tabBtn
- tab.Content = content
- tab.Elements = {}
- -- Hover effects
- self:Connect(tabBtn.MouseEnter, function()
- if self.CurrentTab ~= tab then
- tween(tabBtn, {BackgroundColor3 = Colors.Hover})
- tween(btnTitle, {TextColor3 = Colors.TextPrimary})
- end
- end)
- self:Connect(tabBtn.MouseLeave, function()
- if self.CurrentTab ~= tab then
- tween(tabBtn, {BackgroundColor3 = Colors.Background})
- tween(btnTitle, {TextColor3 = Colors.TextSecondary})
- end
- end)
- -- Tab switch logic
- self:Connect(tabBtn.MouseButton1Click, function()
- self:SwitchTab(tab)
- end)
- table.insert(self.Tabs, tab)
- -- Set first tab as active
- if #self.Tabs == 1 then
- self:SwitchTab(tab)
- end
- return setmetatable(tab, {__index = Library.TabMethods})
- end
- -- Tab methods table
- Library.TabMethods = {}
- function Library.TabMethods:Section(opts)
- opts = opts or {}
- local section = create("Frame", {
- Parent = self.Content,
- Size = udim2(1, 0, 0, 32),
- BackgroundTransparency = 1,
- LayoutOrder = #self.Elements
- })
- local sectionLabel = create("TextLabel", {
- Parent = section,
- Size = udim2(1, 0, 1, 0),
- BackgroundTransparency = 1,
- Text = string.upper(opts.Name or "SECTION"),
- Font = Enum.Font.SourceSansSemibold,
- TextSize = 12,
- TextColor3 = Colors.TextTertiary,
- TextXAlignment = Enum.TextXAlignment.Left
- })
- table.insert(self.Elements, section)
- return section
- end
- function Library.TabMethods:Button(opts)
- opts = opts or {}
- local button = create("TextButton", {
- Parent = self.Content,
- Size = udim2(1, 0, 0, 42),
- BackgroundColor3 = Colors.Surface,
- AutoButtonColor = false,
- Text = "",
- BorderSizePixel = 0,
- LayoutOrder = #self.Elements
- })
- roundCorners(button, 8)
- subtleStroke(button, Colors.Border)
- local btnContent = create("Frame", {
- Parent = button,
- Size = udim2(1, -24, 1, -16),
- Position = udim2(0, 12, 0, 8),
- BackgroundTransparency = 1
- })
- local btnTitle = create("TextLabel", {
- Parent = btnContent,
- Size = udim2(1, 0, 1, 0),
- BackgroundTransparency = 1,
- Text = opts.Name or "Button",
- Font = Enum.Font.SourceSans,
- TextSize = 14,
- TextColor3 = Colors.TextPrimary,
- TextXAlignment = Enum.TextXAlignment.Left
- })
- -- Hover effects
- self:Connect(button.MouseEnter, function()
- tween(button, {BackgroundColor3 = Colors.Hover})
- end)
- self:Connect(button.MouseLeave, function()
- tween(button, {BackgroundColor3 = Colors.Surface})
- end)
- self:Connect(button.MouseButton1Click, function()
- -- Click animation
- tween(button, {BackgroundColor3 = Colors.Primary, TextColor3 = Colors.Surface}, 0.1)
- wait(0.1)
- tween(button, {BackgroundColor3 = Colors.Hover}, 0.1)
- if opts.Callback then
- opts.Callback()
- end
- end)
- table.insert(self.Elements, button)
- return button
- end
- function Library.TabMethods:Toggle(opts)
- opts = opts or {}
- local toggle = create("Frame", {
- Parent = self.Content,
- Size = udim2(1, 0, 0, 42),
- BackgroundTransparency = 1,
- LayoutOrder = #self.Elements
- })
- local label = create("TextLabel", {
- Parent = toggle,
- Size = udim2(0.7, 0, 1, 0),
- BackgroundTransparency = 1,
- Text = opts.Name or "Toggle",
- Font = Enum.Font.SourceSans,
- TextSize = 14,
- TextColor3 = Colors.TextPrimary,
- TextXAlignment = Enum.TextXAlignment.Left
- })
- local toggleContainer = create("TextButton", {
- Parent = toggle,
- Size = udim2(0, 36, 0, 20),
- Position = udim2(1, -36, 0.5, -10),
- AnchorPoint = Vector2.new(1, 0.5),
- BackgroundColor3 = Colors.Border,
- AutoButtonColor = false,
- Text = "",
- BorderSizePixel = 0
- })
- roundCorners(toggleContainer, 10)
- local toggleCircle = create("Frame", {
- Parent = toggleContainer,
- Size = udim2(0, 16, 0, 16),
- Position = udim2(0, 2, 0.5, -8),
- AnchorPoint = Vector2.new(0, 0.5),
- BackgroundColor3 = Colors.Surface,
- BorderSizePixel = 0
- })
- roundCorners(toggleCircle, 8)
- local state = opts.Default or false
- local function updateToggle()
- if state then
- tween(toggleContainer, {BackgroundColor3 = Colors.Primary})
- tween(toggleCircle, {Position = UDim2.new(1, -18, 0.5, -8), BackgroundColor3 = Colors.Surface})
- else
- tween(toggleContainer, {BackgroundColor3 = Colors.Border})
- tween(toggleCircle, {Position = UDim2.new(0, 2, 0.5, -8), BackgroundColor3 = Colors.Surface})
- end
- end
- updateToggle()
- self:Connect(toggleContainer.MouseButton1Click, function()
- state = not state
- updateToggle()
- if opts.Callback then
- opts.Callback(state)
- end
- end)
- table.insert(self.Elements, toggle)
- return toggle
- end
- function Library:SwitchTab(tab)
- if self.CurrentTab then
- self.CurrentTab.Content.Visible = false
- tween(self.CurrentTab.Btn, {BackgroundColor3 = Colors.Background})
- tween(self.CurrentTab.Btn:FindFirstChildOfClass("TextLabel"), {TextColor3 = Colors.TextSecondary})
- end
- self.CurrentTab = tab
- tab.Content.Visible = true
- tween(tab.Btn, {BackgroundColor3 = Colors.Primary})
- tween(tab.Btn:FindFirstChildOfClass("TextLabel"), {TextColor3 = Colors.Surface})
- end
- function Library:Toggle()
- if self.Root then
- self.Root.Visible = not self.Root.Visible
- end
- end
- return setmetatable({
- New = function() return Library end,
- }, {__call = function(_, ...) return Library end})
Advertisement
Add Comment
Please, Sign In to add comment