-- Services local RunService = game:GetService("RunService") local TweenService = game:GetService("TweenService") local UserInputService = game:GetService("UserInputService") -- Create ScreenGui local screenGui = Instance.new("ScreenGui") screenGui.Name = "UniversalUIGUI" screenGui.Parent = game.Players.LocalPlayer:WaitForChild("PlayerGui") screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling screenGui.ResetOnSpawn = false task.wait(0.1) local mainFrame = Instance.new("Frame") mainFrame.Name = "MainFrame" mainFrame.Size = UDim2.new(0, 400, 0, 300) mainFrame.BackgroundColor3 = Color3.fromRGB(45, 45, 50) mainFrame.BorderSizePixel = 0 mainFrame.ClipsDescendants = true mainFrame.Parent = screenGui local function centerFrame() if not screenGui or not mainFrame then return end if not screenGui.AbsoluteSize or not mainFrame.AbsoluteSize then return end local screenSize = screenGui.AbsoluteSize local frameSize = mainFrame.AbsoluteSize if screenSize.X > 0 and frameSize.X > 0 then local centerX = (screenSize.X - frameSize.X) / 2 local centerY = (screenSize.Y - frameSize.Y) / 2 mainFrame.Position = UDim2.fromOffset(centerX, centerY) end end task.spawn(function() task.wait(0.2) if mainFrame and mainFrame.Parent then centerFrame() end end) local recenterDebounce = false screenGui:GetPropertyChangedSignal("AbsoluteSize"):Connect(function() if not recenterDebounce then recenterDebounce = true task.wait(0.1) if mainFrame and mainFrame.Parent then centerFrame() end recenterDebounce = false end end) local uiCorner = Instance.new("UICorner") uiCorner.CornerRadius = UDim.new(0, 8) uiCorner.Parent = mainFrame local uiStroke = Instance.new("UIStroke") uiStroke.Color = Color3.fromRGB(100, 100, 110) uiStroke.Thickness = 1 uiStroke.Parent = mainFrame local header = Instance.new("Frame") header.Name = "Header" header.Size = UDim2.new(1, 0, 0, 40) header.Position = UDim2.new(0, 0, 0, 0) header.BackgroundColor3 = Color3.fromRGB(60, 60, 65) header.BorderSizePixel = 0 header.ZIndex = 10 header.Parent = mainFrame local headerCorner = Instance.new("UICorner") headerCorner.CornerRadius = UDim.new(0, 8, 0, 0) headerCorner.Parent = header -- CHANGED TITLE HERE local title = Instance.new("TextLabel") title.Name = "Title" title.Size = UDim2.new(1, -100, 1, 0) title.Position = UDim2.new(0, 15, 0, 0) title.BackgroundTransparency = 1 title.Text = "universal ui made by blossom" -- Changed from "BLOSSOM HUB" title.TextColor3 = Color3.fromRGB(255, 255, 255) title.TextSize = 18 title.Font = Enum.Font.GothamBold title.TextXAlignment = Enum.TextXAlignment.Left title.ZIndex = 11 title.Parent = header local minimizeButton = Instance.new("TextButton") minimizeButton.Name = "MinimizeButton" minimizeButton.Size = UDim2.new(0, 30, 0, 30) minimizeButton.Position = UDim2.new(1, -70, 0, 5) minimizeButton.BackgroundColor3 = Color3.fromRGB(70, 70, 75) minimizeButton.TextColor3 = Color3.fromRGB(255, 255, 255) minimizeButton.Text = "━" minimizeButton.TextSize = 18 minimizeButton.Font = Enum.Font.GothamBold minimizeButton.ZIndex = 11 minimizeButton.Parent = header local minimizeCorner = Instance.new("UICorner") minimizeCorner.CornerRadius = UDim.new(0, 4) minimizeCorner.Parent = minimizeButton local closeButton = Instance.new("TextButton") closeButton.Name = "CloseButton" closeButton.Size = UDim2.new(0, 30, 0, 30) closeButton.Position = UDim2.new(1, -35, 0, 5) closeButton.BackgroundColor3 = Color3.fromRGB(70, 70, 75) closeButton.TextColor3 = Color3.fromRGB(255, 255, 255) closeButton.Text = "✕" closeButton.TextSize = 18 closeButton.Font = Enum.Font.GothamBold closeButton.ZIndex = 11 closeButton.Parent = header local closeCorner = Instance.new("UICorner") closeCorner.CornerRadius = UDim.new(0, 4) closeCorner.Parent = closeButton -- Changed to ScrollingFrame for scroll functionality local scrollFrame = Instance.new("ScrollingFrame") scrollFrame.Name = "ContentScroller" scrollFrame.Size = UDim2.new(1, -20, 1, -60) scrollFrame.Position = UDim2.new(0, 10, 0, 50) scrollFrame.BackgroundColor3 = Color3.fromRGB(55, 55, 60) scrollFrame.BackgroundTransparency = 0 scrollFrame.BorderSizePixel = 0 scrollFrame.ScrollBarThickness = 8 scrollFrame.ScrollBarImageColor3 = Color3.fromRGB(100, 100, 110) scrollFrame.ScrollingDirection = Enum.ScrollingDirection.Y scrollFrame.VerticalScrollBarInset = Enum.ScrollBarInset.Always scrollFrame.AutomaticCanvasSize = Enum.AutomaticSize.Y scrollFrame.CanvasSize = UDim2.new(0, 0, 0, 0) scrollFrame.ZIndex = 5 scrollFrame.Parent = mainFrame local contentCorner = Instance.new("UICorner") contentCorner.CornerRadius = UDim.new(0, 6) contentCorner.Parent = scrollFrame local contentStroke = Instance.new("UIStroke") contentStroke.Color = Color3.fromRGB(80, 80, 85) contentStroke.Thickness = 1 contentStroke.Parent = scrollFrame -- Create a container for content inside the scroll frame local contentContainer = Instance.new("Frame") contentContainer.Name = "ContentContainer" contentContainer.Size = UDim2.new(1, 0, 0, 0) contentContainer.BackgroundTransparency = 1 contentContainer.Parent = scrollFrame -- Set up automatic canvas sizing contentContainer:GetPropertyChangedSignal("AbsoluteSize"):Connect(function() local totalHeight = 0 for _, child in ipairs(contentContainer:GetChildren()) do if child:IsA("GuiObject") then totalHeight = totalHeight + child.AbsoluteSize.Y + 5 -- 5 pixel spacing end end scrollFrame.CanvasSize = UDim2.new(0, 0, 0, totalHeight) end) -- Add some empty elements to demonstrate scrolling (completely empty as requested) -- Note: The UI is intentionally left empty with no features as requested minimizeButton.MouseEnter:Connect(function() if minimizeButton then TweenService:Create(minimizeButton, TweenInfo.new(0.2), { BackgroundColor3 = Color3.fromRGB(90, 90, 95) }):Play() end end) minimizeButton.MouseLeave:Connect(function() if minimizeButton then TweenService:Create(minimizeButton, TweenInfo.new(0.2), { BackgroundColor3 = Color3.fromRGB(70, 70, 75) }):Play() end end) closeButton.MouseEnter:Connect(function() if closeButton then TweenService:Create(closeButton, TweenInfo.new(0.2), { BackgroundColor3 = Color3.fromRGB(220, 80, 80) }):Play() end end) closeButton.MouseLeave:Connect(function() if closeButton then TweenService:Create(closeButton, TweenInfo.new(0.2), { BackgroundColor3 = Color3.fromRGB(70, 70, 75) }):Play() end end) local isMinimized = false minimizeButton.MouseButton1Click:Connect(function() if not mainFrame or not scrollFrame then return end isMinimized = not isMinimized if isMinimized then minimizeButton.Text = "+" if not mainFrame:GetAttribute("OriginalSize") then mainFrame:SetAttribute("OriginalSize", mainFrame.Size) end TweenService:Create(mainFrame, TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), { Size = UDim2.new(0, 400, 0, 40) }):Play() task.wait(0.2) if scrollFrame then scrollFrame.Visible = false end else minimizeButton.Text = "━" local originalSize = mainFrame:GetAttribute("OriginalSize") or UDim2.new(0, 400, 0, 300) if scrollFrame then scrollFrame.Visible = true end TweenService:Create(mainFrame, TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), { Size = originalSize }):Play() end end) local isClosing = false closeButton.MouseButton1Click:Connect(function() if isClosing then return end isClosing = true local fadeInfo = TweenInfo.new(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out) TweenService:Create(mainFrame, fadeInfo, { BackgroundTransparency = 1 }):Play() local descendants = mainFrame:GetDescendants() for _, child in ipairs(descendants) do if child:IsA("TextLabel") or child:IsA("TextButton") then TweenService:Create(child, fadeInfo, { TextTransparency = 1 }):Play() elseif child:IsA("Frame") then TweenService:Create(child, fadeInfo, { BackgroundTransparency = 1 }):Play() elseif child:IsA("UIStroke") then TweenService:Create(child, fadeInfo, { Transparency = 1 }):Play() end end task.wait(0.5) if screenGui and screenGui.Parent then screenGui:Destroy() end end) local isDragging = false local dragStart, frameStart header.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then local mousePos = input.Position if minimizeButton and closeButton then local minBtnPos = minimizeButton.AbsolutePosition local closeBtnPos = closeButton.AbsolutePosition local btnSize = minimizeButton.AbsoluteSize if mousePos.X >= minBtnPos.X and mousePos.X <= closeBtnPos.X + btnSize.X then return end end isDragging = true dragStart = input.Position frameStart = mainFrame.Position local function onInputEnd() isDragging = false end if input.UserInputType == Enum.UserInputType.MouseButton1 then input:GetPropertyChangedSignal("UserInputState"):Connect(function() if input.UserInputState == Enum.UserInputState.End then onInputEnd() end end) else input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then onInputEnd() end end) end end end) UserInputService.InputChanged:Connect(function(input) if isDragging and mainFrame then if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then local delta = input.Position - dragStart mainFrame.Position = UDim2.new( frameStart.X.Scale, frameStart.X.Offset + delta.X, frameStart.Y.Scale, frameStart.Y.Offset + delta.Y ) end end end) screenGui.AncestryChanged:Connect(function() if not screenGui.Parent then if screenGui then screenGui:Destroy() end end end) return { GUI = screenGui, MainFrame = mainFrame, ScrollFrame = scrollFrame, ContentContainer = contentContainer, Destroy = function() if screenGui and screenGui.Parent then screenGui:Destroy() end end }