PeaAshMeter 393638bb71 add type hints for EVERYTHING
organize ui into folders
implement element:traverseUp
2026-05-04 02:48:30 +03:00

89 lines
2.5 KiB
Lua

local ScreenArea = require "lib.simple_ui.elements.screen_area"
local Placeholder = require "lib.simple_ui.elements.placeholder"
local Padding = require "lib.simple_ui.elements.padding"
local Builder = require "lib.simple_ui.core.builder"
local Flex = require "lib.simple_ui.elements.flex"
local SizedBox = require "lib.simple_ui.elements.sized_box"
local SingleChildElement = require "lib.simple_ui.core.single_child_element"
local MyWidget = setmetatable({}, SingleChildElement)
MyWidget.__index = MyWidget
local Canary = setmetatable({}, SingleChildElement)
Canary.__index = Canary
local reported = false
function Canary:build()
if not reported then
self:traverseUp(function(element)
print(element.type)
return true
end)
reported = true
end
return Placeholder:new {}
end
--- comment
--- @return Flex
function MyWidget:build()
return Flex:new {
key = "my_flex",
direction = "vertical",
mainAxisSize = "max",
children = {
Padding:new {
top = 8,
child = Flex:new {
key = "inner_flex",
mainAxisAlignment = "start",
mainAxisSize = "min",
children = {
SizedBox:new {
width = 100,
height = 100,
child = Placeholder:new {}
},
SizedBox:new {
width = 150,
height = 200,
child = Placeholder:new {}
},
SizedBox:new {
width = 100,
height = 100,
child = Canary:new {}
},
},
}
},
Flex:new {
key = "inner_flex2",
mainAxisAlignment = "center",
children = {
SizedBox:new {
width = 100,
height = 100,
child = Placeholder:new {}
},
SizedBox:new {
width = 100,
height = 100,
child = Placeholder:new {}
},
},
},
}
}
end
return Builder {
elementTree = ScreenArea:new {
child = MyWidget:new {}
}
}