This commit is contained in:
Robert Jelic
2025-10-07 00:15:46 +02:00
3 changed files with 4337 additions and 4333 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -1,439 +1,439 @@
return {
["metadata"] = {
["version"] = "2.0",
["generated"] = "Mon Oct 6 19:46:10 2025",
},
["categories"] = {
["core"] = {
["files"] = {
["render"] = {
["requires"] = {
},
["path"] = "render.lua",
["size"] = 12422,
["description"] = "",
["default"] = true,
},
["main"] = {
["requires"] = {
},
["path"] = "main.lua",
["size"] = 14085,
["description"] = "",
["default"] = true,
},
["elementManager"] = {
["requires"] = {
},
["path"] = "elementManager.lua",
["size"] = 6297,
["description"] = "",
["default"] = true,
},
["errorManager"] = {
["requires"] = {
},
["path"] = "errorManager.lua",
["size"] = 3789,
["description"] = "",
["default"] = true,
},
["log"] = {
["requires"] = {
},
["path"] = "log.lua",
["size"] = 3142,
["description"] = "",
["default"] = true,
},
["init"] = {
["requires"] = {
},
["path"] = "init.lua",
["size"] = 622,
["description"] = "",
["default"] = true,
},
["propertySystem"] = {
["requires"] = {
},
["path"] = "propertySystem.lua",
["size"] = 15524,
["description"] = "",
["default"] = true,
},
},
["description"] = "Core Files",
},
["libraries"] = {
["files"] = {
["utils"] = {
["default"] = true,
["description"] = "",
["requires"] = {
},
["path"] = "libraries/utils.lua",
["size"] = 2661,
["description"] = "",
["default"] = true,
["path"] = "libraries/utils.lua",
},
["expect"] = {
["default"] = true,
["description"] = "",
["requires"] = {
},
["path"] = "libraries/expect.lua",
["size"] = 846,
["description"] = "",
["default"] = true,
["path"] = "libraries/expect.lua",
},
["colorHex"] = {
["default"] = true,
["description"] = "",
["requires"] = {
},
["path"] = "libraries/colorHex.lua",
["size"] = 132,
["description"] = "",
["default"] = true,
["path"] = "libraries/colorHex.lua",
},
},
["description"] = "Libraries",
},
["plugins"] = {
["files"] = {
["animation"] = {
["requires"] = {
},
["path"] = "plugins/animation.lua",
["size"] = 18421,
["description"] = "",
["default"] = true,
},
["debug"] = {
["requires"] = {
},
["path"] = "plugins/debug.lua",
["size"] = 6250,
["description"] = "",
["default"] = true,
},
["theme"] = {
["requires"] = {
},
["path"] = "plugins/theme.lua",
["size"] = 7042,
["description"] = "",
["default"] = true,
},
["benchmark"] = {
["requires"] = {
[1] = "VisualElement",
},
["path"] = "plugins/benchmark.lua",
["size"] = 12581,
["description"] = "",
["default"] = true,
},
["reactive"] = {
["requires"] = {
},
["path"] = "plugins/reactive.lua",
["size"] = 8619,
["description"] = "",
["default"] = true,
},
["state"] = {
["default"] = true,
["description"] = "",
["requires"] = {
[1] = "Container",
},
["path"] = "plugins/state.lua",
["size"] = 6896,
["description"] = "",
["default"] = true,
},
["canvas"] = {
["requires"] = {
},
["path"] = "plugins/canvas.lua",
["size"] = 7873,
["description"] = "",
["default"] = true,
["path"] = "plugins/state.lua",
},
["xml"] = {
["default"] = true,
["description"] = "",
["requires"] = {
},
["path"] = "plugins/xml.lua",
["size"] = 9940,
["description"] = "",
["path"] = "plugins/xml.lua",
},
["reactive"] = {
["default"] = true,
["description"] = "",
["requires"] = {
},
["size"] = 8619,
["path"] = "plugins/reactive.lua",
},
["debug"] = {
["default"] = true,
["description"] = "",
["requires"] = {
},
["size"] = 6250,
["path"] = "plugins/debug.lua",
},
["canvas"] = {
["default"] = true,
["description"] = "",
["requires"] = {
},
["size"] = 7873,
["path"] = "plugins/canvas.lua",
},
["theme"] = {
["default"] = true,
["description"] = "",
["requires"] = {
},
["size"] = 7042,
["path"] = "plugins/theme.lua",
},
["benchmark"] = {
["default"] = true,
["description"] = "",
["requires"] = {
[1] = "VisualElement",
},
["size"] = 12581,
["path"] = "plugins/benchmark.lua",
},
["animation"] = {
["default"] = true,
["description"] = "",
["requires"] = {
},
["size"] = 18421,
["path"] = "plugins/animation.lua",
},
},
["description"] = "Plugins",
},
["elements"] = {
["files"] = {
["LineChart"] = {
["requires"] = {
},
["path"] = "elements/LineChart.lua",
["size"] = 3227,
["description"] = "",
["default"] = false,
},
["Slider"] = {
["List"] = {
["default"] = true,
["description"] = "A scrollable list of selectable items",
["requires"] = {
[1] = "VisualElement",
},
["path"] = "elements/Slider.lua",
["size"] = 4977,
["description"] = "",
["default"] = true,
},
["ProgressBar"] = {
["requires"] = {
[1] = "VisualElement",
},
["path"] = "elements/ProgressBar.lua",
["size"] = 3397,
["description"] = "",
["default"] = true,
["size"] = 8758,
["path"] = "elements/List.lua",
},
["BigFont"] = {
["requires"] = {
[1] = "VisualElement",
},
["path"] = "elements/BigFont.lua",
["size"] = 21649,
["default"] = false,
["description"] = "",
["default"] = false,
},
["Display"] = {
["requires"] = {
[1] = "VisualElement",
},
["path"] = "elements/Display.lua",
["size"] = 5071,
["description"] = "The Display is a special element which uses the CC Window API which you can use.",
["default"] = false,
["size"] = 21649,
["path"] = "elements/BigFont.lua",
},
["Menu"] = {
["FlexBox"] = {
["default"] = true,
["description"] = "A flexbox container that arranges its children in a flexible layout.",
["requires"] = {
[1] = "Container",
},
["size"] = 32431,
["path"] = "elements/FlexBox.lua",
},
["TextBox"] = {
["default"] = false,
["description"] = "A multi-line text editor component with cursor support and text manipulation features",
["requires"] = {
[1] = "VisualElement",
},
["size"] = 43466,
["path"] = "elements/TextBox.lua",
},
["VisualElement"] = {
["default"] = true,
["description"] = "The Visual Element class which is the base class for all visual UI elements",
["requires"] = {
[1] = "BaseElement",
},
["size"] = 22480,
["path"] = "elements/VisualElement.lua",
},
["LineChart"] = {
["default"] = false,
["description"] = "",
["requires"] = {
},
["size"] = 3227,
["path"] = "elements/LineChart.lua",
},
["DropDown"] = {
["default"] = false,
["description"] = "A DropDown menu that shows a list of selectable items",
["requires"] = {
[1] = "List",
},
["path"] = "elements/Menu.lua",
["size"] = 4679,
["description"] = "A horizontal menu bar with selectable items.",
["default"] = true,
["size"] = 7642,
["path"] = "elements/DropDown.lua",
},
["ScrollBar"] = {
["Graph"] = {
["default"] = false,
["description"] = "A point based graph element",
["requires"] = {
},
["size"] = 6989,
["path"] = "elements/Graph.lua",
},
["Frame"] = {
["default"] = true,
["description"] = "A frame element that serves as a grouping container for other elements.",
["requires"] = {
[1] = "Container",
},
["size"] = 6508,
["path"] = "elements/Frame.lua",
},
["Display"] = {
["default"] = false,
["description"] = "The Display is a special element which uses the CC Window API which you can use.",
["requires"] = {
[1] = "VisualElement",
},
["path"] = "elements/ScrollBar.lua",
["size"] = 9665,
["description"] = "A ScrollBar element that can be attached to other elements to control their scroll properties.",
["size"] = 5071,
["path"] = "elements/Display.lua",
},
["Container"] = {
["default"] = true,
["description"] = "The container class. It is a visual element that can contain other elements. It is the base class for all containers",
["requires"] = {
[1] = "VisualElement",
},
["size"] = 26148,
["path"] = "elements/Container.lua",
},
["Button"] = {
["default"] = true,
["description"] = "The Button is a standard button element with click handling and state management.",
["requires"] = {
[1] = "VisualElement",
},
["path"] = "elements/Button.lua",
["size"] = 2540,
["description"] = "The Button is a standard button element with click handling and state management.",
["path"] = "elements/Button.lua",
},
["TabControl"] = {
["default"] = true,
["description"] = "A TabControl element that provides tabbed interface with multiple content areas.",
["requires"] = {
[1] = "Container",
},
["size"] = 15348,
["path"] = "elements/TabControl.lua",
},
["Image"] = {
["default"] = false,
["description"] = "An element that displays an image in bimg format",
["requires"] = {
[1] = "VisualElement",
},
["size"] = 15125,
["path"] = "elements/Image.lua",
},
["Table"] = {
["default"] = true,
["description"] = "",
["requires"] = {
[1] = "VisualElement",
},
["size"] = 16214,
["path"] = "elements/Table.lua",
},
["Input"] = {
["default"] = true,
["description"] = "A text input field with various features",
["requires"] = {
[1] = "VisualElement",
},
["size"] = 9558,
["path"] = "elements/Input.lua",
},
["Slider"] = {
["default"] = true,
["description"] = "",
["requires"] = {
[1] = "VisualElement",
},
["size"] = 4977,
["path"] = "elements/Slider.lua",
},
["Menu"] = {
["default"] = true,
["description"] = "A horizontal menu bar with selectable items.",
["requires"] = {
[1] = "List",
},
["size"] = 4679,
["path"] = "elements/Menu.lua",
},
["BaseElement"] = {
["default"] = true,
["description"] = "The base class for all UI elements in Basalt.",
["requires"] = {
},
["size"] = 10012,
["path"] = "elements/BaseElement.lua",
},
["CheckBox"] = {
["default"] = true,
["description"] = "This is a checkbox. It is a visual element that can be checked.",
["requires"] = {
},
["size"] = 3731,
["path"] = "elements/CheckBox.lua",
},
["ProgressBar"] = {
["default"] = true,
["description"] = "",
["requires"] = {
[1] = "VisualElement",
},
["size"] = 3397,
["path"] = "elements/ProgressBar.lua",
},
["Tree"] = {
["default"] = true,
["description"] = "",
["requires"] = {
[1] = "VisualElement",
},
["size"] = 8457,
["path"] = "elements/Tree.lua",
},
["Label"] = {
["default"] = true,
["description"] = "A simple text display element that automatically resizes its width based on the text content.",
["requires"] = {
[1] = "VisualElement",
},
["size"] = 3092,
["path"] = "elements/Label.lua",
},
["Program"] = {
["default"] = true,
["description"] = "",
["requires"] = {
[1] = "VisualElement",
},
["size"] = 11430,
["path"] = "elements/Program.lua",
},
["ComboBox"] = {
["default"] = false,
["description"] = "A ComboBox that combines dropdown selection with editable text input",
["requires"] = {
[1] = "DropDown",
},
["path"] = "elements/ComboBox.lua",
["size"] = 15122,
["description"] = "A ComboBox that combines dropdown selection with editable text input",
["default"] = false,
},
["Tree"] = {
["requires"] = {
[1] = "VisualElement",
},
["path"] = "elements/Tree.lua",
["size"] = 7942,
["description"] = "",
["default"] = true,
},
["Graph"] = {
["requires"] = {
},
["path"] = "elements/Graph.lua",
["size"] = 6989,
["description"] = "A point based graph element",
["default"] = false,
},
["List"] = {
["requires"] = {
[1] = "VisualElement",
},
["path"] = "elements/List.lua",
["size"] = 8758,
["description"] = "A scrollable list of selectable items",
["default"] = true,
},
["CheckBox"] = {
["requires"] = {
},
["path"] = "elements/CheckBox.lua",
["size"] = 3731,
["description"] = "This is a checkbox. It is a visual element that can be checked.",
["default"] = true,
},
["TabControl"] = {
["requires"] = {
[1] = "Container",
},
["path"] = "elements/TabControl.lua",
["size"] = 15348,
["description"] = "A TabControl element that provides tabbed interface with multiple content areas.",
["default"] = true,
},
["Label"] = {
["requires"] = {
[1] = "VisualElement",
},
["path"] = "elements/Label.lua",
["size"] = 3092,
["description"] = "A simple text display element that automatically resizes its width based on the text content.",
["default"] = true,
},
["Frame"] = {
["requires"] = {
[1] = "Container",
},
["path"] = "elements/Frame.lua",
["size"] = 6508,
["description"] = "A frame element that serves as a grouping container for other elements.",
["default"] = true,
},
["TextBox"] = {
["requires"] = {
[1] = "VisualElement",
},
["path"] = "elements/TextBox.lua",
["size"] = 43466,
["description"] = "A multi-line text editor component with cursor support and text manipulation features",
["default"] = false,
},
["FlexBox"] = {
["requires"] = {
[1] = "Container",
},
["path"] = "elements/FlexBox.lua",
["size"] = 32431,
["description"] = "A flexbox container that arranges its children in a flexible layout.",
["default"] = true,
},
["Input"] = {
["requires"] = {
[1] = "VisualElement",
},
["path"] = "elements/Input.lua",
["size"] = 9558,
["description"] = "A text input field with various features",
["default"] = true,
["path"] = "elements/ComboBox.lua",
},
["Switch"] = {
["default"] = true,
["description"] = "The Switch is a standard Switch element with click handling and state management.",
["requires"] = {
[1] = "VisualElement",
},
["path"] = "elements/Switch.lua",
["size"] = 3269,
["description"] = "The Switch is a standard Switch element with click handling and state management.",
["default"] = true,
},
["VisualElement"] = {
["requires"] = {
[1] = "BaseElement",
},
["path"] = "elements/VisualElement.lua",
["size"] = 22480,
["description"] = "The Visual Element class which is the base class for all visual UI elements",
["default"] = true,
["path"] = "elements/Switch.lua",
},
["BaseFrame"] = {
["default"] = true,
["description"] = "This is the base frame class. It is the root element of all elements and the only element without a parent.",
["requires"] = {
[1] = "Container",
},
["path"] = "elements/BaseFrame.lua",
["size"] = 9017,
["description"] = "This is the base frame class. It is the root element of all elements and the only element without a parent.",
["default"] = true,
},
["Container"] = {
["requires"] = {
[1] = "VisualElement",
},
["path"] = "elements/Container.lua",
["size"] = 26148,
["description"] = "The container class. It is a visual element that can contain other elements. It is the base class for all containers",
["default"] = true,
},
["BarChart"] = {
["requires"] = {
},
["path"] = "elements/BarChart.lua",
["size"] = 3590,
["description"] = "",
["default"] = true,
["path"] = "elements/BaseFrame.lua",
},
["Timer"] = {
["default"] = true,
["description"] = "",
["requires"] = {
[1] = "BaseElement",
},
["path"] = "elements/Timer.lua",
["size"] = 2914,
["description"] = "",
["default"] = true,
["path"] = "elements/Timer.lua",
},
["Image"] = {
["BarChart"] = {
["default"] = true,
["description"] = "",
["requires"] = {
},
["size"] = 3590,
["path"] = "elements/BarChart.lua",
},
["ScrollBar"] = {
["default"] = true,
["description"] = "A ScrollBar element that can be attached to other elements to control their scroll properties.",
["requires"] = {
[1] = "VisualElement",
},
["path"] = "elements/Image.lua",
["size"] = 15125,
["description"] = "An element that displays an image in bimg format",
["default"] = false,
},
["Program"] = {
["requires"] = {
[1] = "VisualElement",
},
["path"] = "elements/Program.lua",
["size"] = 11430,
["description"] = "",
["default"] = true,
},
["DropDown"] = {
["requires"] = {
[1] = "List",
},
["path"] = "elements/DropDown.lua",
["size"] = 7642,
["description"] = "A DropDown menu that shows a list of selectable items",
["default"] = false,
},
["Table"] = {
["requires"] = {
[1] = "VisualElement",
},
["path"] = "elements/Table.lua",
["size"] = 16214,
["description"] = "",
["default"] = true,
},
["BaseElement"] = {
["requires"] = {
},
["path"] = "elements/BaseElement.lua",
["size"] = 10012,
["description"] = "The base class for all UI elements in Basalt.",
["default"] = true,
["size"] = 9665,
["path"] = "elements/ScrollBar.lua",
},
},
["description"] = "UI Elements",
},
},
["metadata"] = {
["generated"] = "Fri Oct 3 01:26:34 2025",
["version"] = "2.0",
["core"] = {
["files"] = {
["propertySystem"] = {
["default"] = true,
["description"] = "",
["requires"] = {
},
["size"] = 15524,
["path"] = "propertySystem.lua",
},
["errorManager"] = {
["default"] = true,
["description"] = "",
["requires"] = {
},
["size"] = 3789,
["path"] = "errorManager.lua",
},
["init"] = {
["default"] = true,
["description"] = "",
["requires"] = {
},
["size"] = 622,
["path"] = "init.lua",
},
["render"] = {
["default"] = true,
["description"] = "",
["requires"] = {
},
["size"] = 12422,
["path"] = "render.lua",
},
["log"] = {
["default"] = true,
["description"] = "",
["requires"] = {
},
["size"] = 3142,
["path"] = "log.lua",
},
["elementManager"] = {
["default"] = true,
["description"] = "",
["requires"] = {
},
["size"] = 6297,
["path"] = "elementManager.lua",
},
["main"] = {
["default"] = true,
["description"] = "",
["requires"] = {
},
["size"] = 14085,
["path"] = "main.lua",
},
},
["description"] = "Core Files",
},
},
}

View File

@@ -1550,61 +1550,65 @@ if not self:isType("BaseFrame")then
for bc,cc in
ipairs(self._values.children)do if cc.destroy then cc:destroy()end end;self:removeAllObservers()ab.destroy(self)return self else
_b.header="Basalt Error"_b.error("Cannot destroy a BaseFrame.")end end;return db end
project["elements/Tree.lua"] = function(...) local _a=require("elements/VisualElement")local aa=string.sub
local ba=setmetatable({},_a)ba.__index=ba
ba.defineProperty(ba,"nodes",{default={},type="table",canTriggerRender=true,setter=function(da,_b)if#_b>0 then
da.get("expandedNodes")[_b[1]]=true end;return _b end})
ba.defineProperty(ba,"selectedNode",{default=nil,type="table",canTriggerRender=true})
ba.defineProperty(ba,"expandedNodes",{default={},type="table",canTriggerRender=true})
ba.defineProperty(ba,"scrollOffset",{default=0,type="number",canTriggerRender=true})
ba.defineProperty(ba,"horizontalOffset",{default=0,type="number",canTriggerRender=true})
ba.defineProperty(ba,"nodeColor",{default=colors.white,type="color"})
ba.defineProperty(ba,"selectedColor",{default=colors.lightBlue,type="color"})ba.defineEvent(ba,"mouse_click")
ba.defineEvent(ba,"mouse_scroll")function ba.new()local da=setmetatable({},ba):__init()
da.class=ba;da.set("width",30)da.set("height",10)da.set("z",5)
return da end
function ba:init(da,_b)
_a.init(self,da,_b)self.set("type","Tree")return self end;function ba:expandNode(da)self.get("expandedNodes")[da]=true
project["elements/Tree.lua"] = function(...) local aa=require("elements/VisualElement")local ba=string.sub
local ca=require("libraries/colorHex")local da=setmetatable({},aa)da.__index=da
da.defineProperty(da,"nodes",{default={},type="table",canTriggerRender=true,setter=function(ab,bb)if#bb>0 then
ab.get("expandedNodes")[bb[1]]=true end;return bb end})
da.defineProperty(da,"selectedNode",{default=nil,type="table",canTriggerRender=true})
da.defineProperty(da,"expandedNodes",{default={},type="table",canTriggerRender=true})
da.defineProperty(da,"scrollOffset",{default=0,type="number",canTriggerRender=true})
da.defineProperty(da,"horizontalOffset",{default=0,type="number",canTriggerRender=true})
da.defineProperty(da,"selectedForegroundColor",{default=colors.white,type="color"})
da.defineProperty(da,"selectedBackgroundColor",{default=colors.lightBlue,type="color"})da.defineEvent(da,"mouse_click")
da.defineEvent(da,"mouse_scroll")function da.new()local ab=setmetatable({},da):__init()
ab.class=da;ab.set("width",30)ab.set("height",10)ab.set("z",5)
return ab end
function da:init(ab,bb)
aa.init(self,ab,bb)self.set("type","Tree")return self end;function da:expandNode(ab)self.get("expandedNodes")[ab]=true
self:updateRender()return self end
function ba:collapseNode(da)self.get("expandedNodes")[da]=
nil;self:updateRender()return self end;function ba:toggleNode(da)if self.get("expandedNodes")[da]then
self:collapseNode(da)else self:expandNode(da)end
function da:collapseNode(ab)self.get("expandedNodes")[ab]=
nil;self:updateRender()return self end;function da:toggleNode(ab)if self.get("expandedNodes")[ab]then
self:collapseNode(ab)else self:expandNode(ab)end
return self end
local function ca(da,_b,ab,bb)bb=bb or{}ab=
ab or 0;for cb,db in ipairs(da)do table.insert(bb,{node=db,level=ab})
local function _b(ab,bb,cb,db)db=db or{}cb=
cb or 0;for _c,ac in ipairs(ab)do table.insert(db,{node=ac,level=cb})
if
_b[db]and db.children then ca(db.children,_b,ab+1,bb)end end;return bb end
function ba:mouse_click(da,_b,ab)
if _a.mouse_click(self,da,_b,ab)then
local bb,cb=self:getRelativePosition(_b,ab)
local db=ca(self.get("nodes"),self.get("expandedNodes"))local _c=cb+self.get("scrollOffset")
if db[_c]then local ac=db[_c]
local bc=ac.node
if bb<=ac.level*2 +2 then self:toggleNode(bc)end;self.set("selectedNode",bc)
self:fireEvent("node_select",bc)end;return true end;return false end
function ba:onSelect(da)self:registerCallback("node_select",da)return self end
function ba:mouse_scroll(da,_b,ab)
if _a.mouse_scroll(self,da,_b,ab)then
local bb=ca(self.get("nodes"),self.get("expandedNodes"))
local cb=math.max(0,#bb-self.get("height"))
local db=math.min(cb,math.max(0,self.get("scrollOffset")+da))self.set("scrollOffset",db)return true end;return false end
function ba:getNodeSize()local da,_b=0,0
local ab=ca(self.get("nodes"),self.get("expandedNodes"))for bb,cb in ipairs(ab)do
da=math.max(da,cb.level+#cb.node.text)end;_b=#ab;return da,_b end
function ba:render()_a.render(self)
local da=ca(self.get("nodes"),self.get("expandedNodes"))local _b=self.get("height")local ab=self.get("selectedNode")
local bb=self.get("expandedNodes")local cb=self.get("scrollOffset")
local db=self.get("horizontalOffset")
for y=1,_b do local _c=da[y+cb]
if _c then local ac=_c.node;local bc=_c.level
local cc=string.rep(" ",bc)local dc=" "if ac.children and#ac.children>0 then
dc=bb[ac]and"\31"or"\16"end
local _d=
ac==ab and self.get("selectedColor")or self.get("background")
local ad=cc..dc.." ".. (ac.text or"Node")local bd=aa(ad,db+1,db+self.get("width"))
self:textFg(1,y,
bd..string.rep(" ",self.get("width")-#bd),self.get("foreground"))else
self:textFg(1,y,string.rep(" ",self.get("width")),self.get("foreground"),self.get("background"))end end end;return ba end
bb[ac]and ac.children then _b(ac.children,bb,cb+1,db)end end;return db end
function da:mouse_click(ab,bb,cb)
if aa.mouse_click(self,ab,bb,cb)then
local db,_c=self:getRelativePosition(bb,cb)
local ac=_b(self.get("nodes"),self.get("expandedNodes"))local bc=_c+self.get("scrollOffset")
if ac[bc]then local cc=ac[bc]
local dc=cc.node
if db<=cc.level*2 +2 then self:toggleNode(dc)end;self.set("selectedNode",dc)
self:fireEvent("node_select",dc)end;return true end;return false end
function da:onSelect(ab)self:registerCallback("node_select",ab)return self end
function da:mouse_scroll(ab,bb,cb)
if aa.mouse_scroll(self,ab,bb,cb)then
local db=_b(self.get("nodes"),self.get("expandedNodes"))
local _c=math.max(0,#db-self.get("height"))
local ac=math.min(_c,math.max(0,self.get("scrollOffset")+ab))self.set("scrollOffset",ac)return true end;return false end
function da:getNodeSize()local ab,bb=0,0
local cb=_b(self.get("nodes"),self.get("expandedNodes"))for db,_c in ipairs(cb)do
ab=math.max(ab,_c.level+#_c.node.text)end;bb=#cb;return ab,bb end
function da:render()aa.render(self)
local ab=_b(self.get("nodes"),self.get("expandedNodes"))local bb=self.get("height")local cb=self.get("selectedNode")
local db=self.get("expandedNodes")local _c=self.get("scrollOffset")
local ac=self.get("horizontalOffset")
for y=1,bb do local bc=ab[y+_c]
if bc then local cc=bc.node;local dc=bc.level
local _d=string.rep(" ",dc)local ad=" "if cc.children and#cc.children>0 then
ad=db[cc]and"\31"or"\16"end;local bd=cc==cb
local cd=bd and
self.get("selectedBackgroundColor")or self.get("background")local dd=bd and self.get("selectedForegroundColor")or
self.get("foreground")
local __a=_d..ad.." ".. (
cc.text or"Node")local a_a=ba(__a,ac+1,ac+self.get("width"))
local b_a=a_a..string.rep(" ",
self.get("width")-#a_a)
local c_a=ca[cd]:rep(#b_a)or ca[colors.black]:rep(#b_a)
local d_a=ca[dd]:rep(#b_a)or ca[colors.white]:rep(#b_a)self:blit(1,y,b_a,d_a,c_a)else
self:blit(1,y,string.rep(" ",self.get("width")),ca[self.get("foreground")]:rep(self.get("width")),ca[self.get("background")]:rep(self.get("width")))end end end;return da end
project["elements/DropDown.lua"] = function(...) local _a=require("elements/VisualElement")
local aa=require("elements/List")local ba=require("libraries/colorHex")
local ca=setmetatable({},aa)ca.__index=ca