local FlexLove = require("libs.FlexLove") local Color = FlexLove.Color ---@class ScrollableContentExample ---@field window Element ---@field container Element ---@field scrollContainer Element local ScrollableContentExample = {} ScrollableContentExample.__index = ScrollableContentExample function ScrollableContentExample.new() local self = setmetatable({}, ScrollableContentExample) -- Create main window with backdrop blur self.window = FlexLove.new({ x = "25%", y = "10%", z = 1000, width = "50vw", height = "80vh", themeComponent = "framev3", scaleCorners = 3, positioning = "flex", flexDirection = "vertical", justifyContent = "center", alignItems = "center", gap = 10, backdropBlur = { radius = 20, quality = 10 }, backgroundColor = Color.new(0.1, 0.1, 0.1, 0.8), }) -- Header FlexLove.new({ parent = self.window, text = "Scrollable Content Example", textAlign = "center", textSize = "2xl", width = "100%", textColor = Color.new(1, 1, 1, 1), margin = { bottom = 10 }, }) -- Create scroll container with overflow handling self.scrollContainer = FlexLove.new({ parent = self.window, width = "90%", height = "70%", positioning = "flex", flexDirection = "vertical", overflowY = "scroll", gap = 5, padding = { horizontal = 10, vertical = 5 }, themeComponent = "framev3", backgroundColor = Color.new(0.2, 0.2, 0.2, 0.5), }) -- Add multiple scrollable elements to demonstrate scrolling for i = 1, 30 do local text = string.format( "Item %d - This is a long line of content that should wrap and show how scrolling works in FlexLove when content exceeds the container bounds", i ) FlexLove.new({ parent = self.scrollContainer, text = text, textAlign = "start", textSize = "md", width = "100%", textColor = Color.new(0.9, 0.9, 0.9, 1), padding = { vertical = 5 }, themeComponent = i % 3 == 0 and "panel" or "cardv2", backgroundColor = i % 3 == 0 and Color.new(0.3, 0.3, 0.3, 0.7) or Color.new(0.4, 0.4, 0.4, 0.5), }) end -- Footer with instructions FlexLove.new({ parent = self.window, text = "Scroll using the mouse wheel or drag the scrollbar", textAlign = "center", textSize = "sm", width = "100%", textColor = Color.new(0.7, 0.7, 0.7, 1), margin = { top = 10 }, }) return self end function ScrollableContentExample:destroy() if self.window then self.window:destroy() self.window = nil end end return ScrollableContentExample