-- Example: Theming and Custom Components -- This demonstrates how to use themes and create custom components local FlexLove = require("libs.FlexLove") local ThemeExample = {} function ThemeExample:new() local obj = { themeIndex = 1, themes = { "space", "metal" }, } setmetatable(obj, { __index = self }) return obj end function ThemeExample:render() local flex = FlexLove.new({ x = "10%", y = "10%", width = "80%", height = "80%", positioning = "flex", flexDirection = "vertical", gap = 10, padding = { horizontal = 10, vertical = 10 }, }) -- Title FlexLove.new({ parent = flex, text = "Theming and Custom Components Example", textAlign = "center", textSize = "2xl", width = "100%", height = "10%", }) -- Theme selector local themeSelector = FlexLove.new({ parent = flex, positioning = "flex", flexDirection = "horizontal", justifyContent = "space-between", alignItems = "center", width = "100%", height = "10%", backgroundColor = "#2d3748", borderRadius = 8, padding = { horizontal = 10 }, }) FlexLove.new({ parent = themeSelector, text = "Current Theme: " .. self.themes[self.themeIndex], textAlign = "left", textSize = "md", width = "50%", }) FlexLove.new({ parent = themeSelector, themeComponent = "buttonv2", text = "Switch Theme", textAlign = "center", width = "30%", onEvent = function(_, event) if event.type == "release" then self.themeIndex = (self.themeIndex % #self.themes) + 1 -- In a real app, you'd update the theme here print("Theme switched to: " .. self.themes[self.themeIndex]) end end, }) -- Custom component example - A styled card local customCard = FlexLove.new({ parent = flex, positioning = "flex", flexDirection = "vertical", justifyContent = "center", alignItems = "center", width = "100%", height = "40%", themeComponent = "cardv2", -- Uses theme styling padding = { horizontal = 20, vertical = 20 }, margin = { top = 10 }, }) FlexLove.new({ parent = customCard, text = "Custom Card Component", textAlign = "center", textSize = "lg", width = "100%", height = "30%", }) FlexLove.new({ parent = customCard, text = "This demonstrates how to create reusable components with theme support", textAlign = "center", textSize = "sm", width = "100%", height = "50%", color = "#a0aec0", -- Light gray text }) -- Another custom component - Status indicator local statusIndicator = FlexLove.new({ parent = flex, positioning = "flex", flexDirection = "horizontal", justifyContent = "space-between", alignItems = "center", width = "100%", height = "20%", backgroundColor = "#4a5568", borderRadius = 8, padding = { horizontal = 15 }, }) FlexLove.new({ parent = statusIndicator, text = "Status: Active", textAlign = "left", textSize = "md", width = "50%", }) local statusDot = FlexLove.new({ parent = statusIndicator, positioning = "flex", width = 20, height = 20, backgroundColor = "#48bb78", -- Green dot borderRadius = 10, -- Circle }) return flex end return ThemeExample