This commit is contained in:
Robert Jelic
2025-03-04 10:37:44 +01:00
3 changed files with 394 additions and 324 deletions

View File

@@ -1,370 +1,385 @@
return {
["metadata"] = {
["generated"] = "Mon Mar 3 22:44:55 2025",
["version"] = "2.0",
},
["categories"] = {
["core"] = {
["files"] = {
["propertySystem"] = {
["path"] = "propertySystem.lua",
["default"] = true,
["size"] = 15225,
["requires"] = {
},
["description"] = "",
},
["main"] = {
["path"] = "main.lua",
["default"] = true,
["size"] = 8158,
["requires"] = {
},
["description"] = "",
},
["init"] = {
["path"] = "init.lua",
["default"] = true,
["size"] = 519,
["requires"] = {
},
["description"] = "",
},
["render"] = {
["path"] = "render.lua",
["default"] = true,
["size"] = 10935,
["requires"] = {
},
["description"] = "",
},
["log"] = {
["path"] = "log.lua",
["default"] = true,
["size"] = 3142,
["requires"] = {
},
["description"] = "",
},
["elementManager"] = {
["path"] = "elementManager.lua",
["default"] = true,
["size"] = 6297,
["requires"] = {
},
["description"] = "",
},
["errorManager"] = {
["path"] = "errorManager.lua",
["default"] = true,
["size"] = 3789,
["requires"] = {
},
["description"] = "",
},
},
["description"] = "Core Files",
},
["elements"] = {
["files"] = {
["Program"] = {
["path"] = "elements/Program.lua",
["description"] = "",
["requires"] = {
[1] = "VisualElement",
},
["size"] = 6295,
["BaseElement"] = {
["path"] = "elements/BaseElement.lua",
["default"] = true,
},
["Dropdown"] = {
["path"] = "elements/Dropdown.lua",
["description"] = "A dropdown menu that shows a list of selectable items",
["size"] = 8911,
["requires"] = {
[1] = "List",
},
["size"] = 5896,
["default"] = false,
},
["Container"] = {
["path"] = "elements/Container.lua",
["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"] = 23180,
["default"] = true,
},
["Menu"] = {
["path"] = "elements/Menu.lua",
["description"] = "A horizontal menu bar with selectable items.",
["requires"] = {
[1] = "List",
},
["size"] = 4657,
["default"] = true,
["description"] = "The base class for all UI elements in Basalt.",
},
["ProgressBar"] = {
["path"] = "elements/ProgressBar.lua",
["description"] = "",
["default"] = true,
["size"] = 2272,
["requires"] = {
[1] = "VisualElement",
},
["size"] = 2272,
["default"] = true,
},
["BaseFrame"] = {
["path"] = "elements/BaseFrame.lua",
["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",
},
["size"] = 5868,
["default"] = true,
["description"] = "",
},
["Tree"] = {
["path"] = "elements/Tree.lua",
["description"] = "",
["requires"] = {
[1] = "VisualElement",
},
["default"] = true,
["size"] = 7885,
["default"] = true,
},
["Scrollbar"] = {
["path"] = "elements/Scrollbar.lua",
["requires"] = {
[1] = "VisualElement",
},
["description"] = "",
["requires"] = {
[1] = "VisualElement",
},
["size"] = 9164,
["default"] = true,
},
["Button"] = {
["path"] = "elements/Button.lua",
["description"] = "",
["requires"] = {
[1] = "VisualElement",
},
["size"] = 1632,
["default"] = true,
},
["Checkbox"] = {
["path"] = "elements/Checkbox.lua",
["description"] = "",
["requires"] = {
[1] = "VisualElement",
},
["size"] = 2872,
["default"] = true,
},
["Table"] = {
["path"] = "elements/Table.lua",
["description"] = "",
["requires"] = {
[1] = "VisualElement",
},
["size"] = 7586,
["default"] = true,
},
["BigFont"] = {
["path"] = "elements/BigFont.lua",
["description"] = "",
["requires"] = {
[1] = "VisualElement",
},
["size"] = 20332,
["default"] = false,
},
["List"] = {
["path"] = "elements/List.lua",
["description"] = "A scrollable list of selectable items",
["requires"] = {
[1] = "VisualElement",
},
["size"] = 8643,
["default"] = true,
},
["Input"] = {
["path"] = "elements/Input.lua",
["description"] = "A text input field with various features",
["requires"] = {
[1] = "VisualElement",
},
["size"] = 7997,
["default"] = true,
},
["Label"] = {
["path"] = "elements/Label.lua",
["description"] = "A simple text display element that automatically resizes its width based on the text content.",
["requires"] = {
[1] = "VisualElement",
},
["size"] = 3069,
["default"] = true,
},
["Image"] = {
["path"] = "elements/Image.lua",
["description"] = "An element that displays an image in bimg format",
["requires"] = {
[1] = "VisualElement",
},
["size"] = 13312,
["default"] = false,
},
["Slider"] = {
["path"] = "elements/Slider.lua",
["description"] = "",
["requires"] = {
[1] = "VisualElement",
},
["size"] = 4676,
["default"] = true,
},
["Frame"] = {
["path"] = "elements/Frame.lua",
["description"] = "A frame element that serves as a grouping container for other elements.",
["requires"] = {
[1] = "Container",
},
["size"] = 4435,
["default"] = true,
},
["Flexbox"] = {
["path"] = "elements/Flexbox.lua",
["description"] = "A flexbox container that arranges its children in a flexible layout.",
["requires"] = {
[1] = "Container",
},
["size"] = 11530,
["default"] = true,
},
["TextBox"] = {
["path"] = "elements/TextBox.lua",
["description"] = "A multi-line text editor component with cursor support and text manipulation features",
["requires"] = {
[1] = "VisualElement",
},
["size"] = 10904,
["default"] = false,
},
["VisualElement"] = {
["path"] = "elements/VisualElement.lua",
["description"] = "The Visual Element class which is the base class for all visual UI elements",
["default"] = true,
["size"] = 17105,
["requires"] = {
[1] = "BaseElement",
},
["size"] = 17105,
["default"] = true,
["description"] = "The Visual Element class which is the base class for all visual UI elements",
},
["BaseElement"] = {
["path"] = "elements/BaseElement.lua",
["description"] = "The base class for all UI elements in Basalt.",
["requires"] = {
},
["size"] = 8911,
["Input"] = {
["path"] = "elements/Input.lua",
["default"] = true,
},
["Graph"] = {
["path"] = "elements/Graph.lua",
["description"] = "---@configDefault false",
["size"] = 7997,
["requires"] = {
[1] = "VisualElement",
},
["size"] = 2014,
["description"] = "A text input field with various features",
},
["Frame"] = {
["path"] = "elements/Frame.lua",
["default"] = true,
["size"] = 4435,
["requires"] = {
[1] = "Container",
},
["description"] = "A frame element that serves as a grouping container for other elements.",
},
["BaseFrame"] = {
["path"] = "elements/BaseFrame.lua",
["default"] = true,
["size"] = 5868,
["requires"] = {
[1] = "Container",
},
["description"] = "This is the base frame class. It is the root element of all elements and the only element without a parent.",
},
["Image"] = {
["path"] = "elements/Image.lua",
["default"] = false,
["size"] = 13312,
["requires"] = {
[1] = "VisualElement",
},
["description"] = "An element that displays an image in bimg format",
},
["Dropdown"] = {
["path"] = "elements/Dropdown.lua",
["default"] = false,
["size"] = 5896,
["requires"] = {
[1] = "List",
},
["description"] = "A dropdown menu that shows a list of selectable items",
},
["Flexbox"] = {
["path"] = "elements/Flexbox.lua",
["default"] = true,
["size"] = 11530,
["requires"] = {
[1] = "Container",
},
["description"] = "A flexbox container that arranges its children in a flexible layout.",
},
["Table"] = {
["path"] = "elements/Table.lua",
["default"] = true,
["size"] = 7586,
["requires"] = {
[1] = "VisualElement",
},
["description"] = "",
},
["Program"] = {
["path"] = "elements/Program.lua",
["default"] = true,
["size"] = 6295,
["requires"] = {
[1] = "VisualElement",
},
["description"] = "",
},
["TextBox"] = {
["path"] = "elements/TextBox.lua",
["default"] = false,
["size"] = 10904,
["requires"] = {
[1] = "VisualElement",
},
["description"] = "A multi-line text editor component with cursor support and text manipulation features",
},
["LineChart"] = {
["path"] = "elements/LineChart.lua",
["default"] = false,
["size"] = 2707,
["requires"] = {
},
["description"] = "",
},
["Menu"] = {
["path"] = "elements/Menu.lua",
["default"] = true,
["size"] = 4657,
["requires"] = {
[1] = "List",
},
["description"] = "A horizontal menu bar with selectable items.",
},
["BarChart"] = {
["path"] = "elements/BarChart.lua",
["default"] = false,
["size"] = 2634,
["requires"] = {
},
["description"] = "",
},
["Slider"] = {
["path"] = "elements/Slider.lua",
["default"] = true,
["size"] = 4676,
["requires"] = {
[1] = "VisualElement",
},
["description"] = "",
},
["Checkbox"] = {
["path"] = "elements/Checkbox.lua",
["default"] = true,
["size"] = 2872,
["requires"] = {
[1] = "VisualElement",
},
["description"] = "",
},
["Label"] = {
["path"] = "elements/Label.lua",
["default"] = true,
["size"] = 3069,
["requires"] = {
[1] = "VisualElement",
},
["description"] = "A simple text display element that automatically resizes its width based on the text content.",
},
["Graph"] = {
["path"] = "elements/Graph.lua",
["default"] = false,
["size"] = 5940,
["requires"] = {
},
["description"] = "A point based graph element",
},
["BigFont"] = {
["path"] = "elements/BigFont.lua",
["default"] = false,
["size"] = 20332,
["requires"] = {
[1] = "VisualElement",
},
["description"] = "",
},
["Button"] = {
["path"] = "elements/Button.lua",
["default"] = true,
["size"] = 1632,
["requires"] = {
[1] = "VisualElement",
},
["description"] = "",
},
["Container"] = {
["path"] = "elements/Container.lua",
["default"] = true,
["size"] = 23180,
["requires"] = {
[1] = "VisualElement",
},
["description"] = "The container class. It is a visual element that can contain other elements. It is the base class for all containers",
},
["List"] = {
["path"] = "elements/List.lua",
["default"] = true,
["size"] = 8643,
["requires"] = {
[1] = "VisualElement",
},
["description"] = "A scrollable list of selectable items",
},
["Scrollbar"] = {
["path"] = "elements/Scrollbar.lua",
["default"] = true,
["size"] = 9164,
["requires"] = {
[1] = "VisualElement",
},
["description"] = "",
},
},
["description"] = "UI Elements",
},
["libraries"] = {
["files"] = {
["expect"] = {
["path"] = "libraries/expect.lua",
["description"] = "",
["requires"] = {
},
["size"] = 846,
["default"] = true,
},
["colorHex"] = {
["path"] = "libraries/colorHex.lua",
["description"] = "",
["default"] = true,
["size"] = 132,
["requires"] = {
},
["size"] = 132,
["description"] = "",
},
["expect"] = {
["path"] = "libraries/expect.lua",
["default"] = true,
["size"] = 846,
["requires"] = {
},
["description"] = "",
},
["utils"] = {
["path"] = "libraries/utils.lua",
["description"] = "",
["default"] = true,
["size"] = 2661,
["requires"] = {
},
["size"] = 2661,
["default"] = true,
["description"] = "",
},
},
["description"] = "Libraries",
},
["plugins"] = {
["files"] = {
["state"] = {
["path"] = "plugins/state.lua",
["description"] = "",
["requires"] = {
},
["size"] = 5867,
["default"] = true,
},
["reactive"] = {
["path"] = "plugins/reactive.lua",
["description"] = "",
["requires"] = {
},
["size"] = 6962,
["default"] = true,
},
["animation"] = {
["path"] = "plugins/animation.lua",
["description"] = "",
["requires"] = {
},
["size"] = 14116,
["default"] = true,
},
["benchmark"] = {
["path"] = "plugins/benchmark.lua",
["description"] = "",
["requires"] = {
},
["default"] = true,
["size"] = 12515,
["default"] = true,
},
["xml"] = {
["path"] = "plugins/xml.lua",
["description"] = "",
["requires"] = {
},
["size"] = 17568,
["default"] = true,
["description"] = "",
},
["theme"] = {
["path"] = "plugins/theme.lua",
["description"] = "",
["default"] = true,
["size"] = 5885,
["requires"] = {
},
["size"] = 5885,
["description"] = "",
},
["state"] = {
["path"] = "plugins/state.lua",
["default"] = true,
["size"] = 5867,
["requires"] = {
},
["description"] = "",
},
["reactive"] = {
["path"] = "plugins/reactive.lua",
["default"] = true,
["size"] = 6962,
["requires"] = {
},
["description"] = "",
},
["animation"] = {
["path"] = "plugins/animation.lua",
["default"] = true,
["size"] = 14116,
["requires"] = {
},
["description"] = "",
},
["debug"] = {
["path"] = "plugins/debug.lua",
["description"] = "",
["default"] = true,
["size"] = 6175,
["requires"] = {
},
["size"] = 6175,
["description"] = "",
},
["xml"] = {
["path"] = "plugins/xml.lua",
["default"] = true,
["size"] = 17568,
["requires"] = {
},
["description"] = "",
},
},
["description"] = "Plugins",
},
["core"] = {
["files"] = {
["render"] = {
["path"] = "render.lua",
["description"] = "",
["requires"] = {
},
["size"] = 10935,
["default"] = true,
},
["propertySystem"] = {
["path"] = "propertySystem.lua",
["description"] = "",
["requires"] = {
},
["size"] = 15225,
["default"] = true,
},
["errorManager"] = {
["path"] = "errorManager.lua",
["description"] = "",
["requires"] = {
},
["size"] = 3789,
["default"] = true,
},
["init"] = {
["path"] = "init.lua",
["description"] = "",
["requires"] = {
},
["size"] = 519,
["default"] = true,
},
["elementManager"] = {
["path"] = "elementManager.lua",
["description"] = "",
["requires"] = {
},
["size"] = 6297,
["default"] = true,
},
["main"] = {
["path"] = "main.lua",
["description"] = "",
["requires"] = {
},
["size"] = 8158,
["default"] = true,
},
["log"] = {
["path"] = "log.lua",
["description"] = "",
["requires"] = {
},
["size"] = 3142,
["default"] = true,
},
},
["description"] = "Core Files",
},
},
["metadata"] = {
["generated"] = "Tue Mar 4 00:54:15 2025",
["version"] = "2.0",
},
}

View File

@@ -7,6 +7,7 @@ local baseRequire = require
require = function(path) if(project[path..".lua"])then if(loadedProject[path]==nil)then loadedProject[path] = project[path..".lua"]() end return loadedProject[path] end return baseRequire(path) end
minified_elementDirectory["BigFont"] = {}
minified_elementDirectory["TextBox"] = {}
minified_elementDirectory["LineChart"] = {}
minified_elementDirectory["Container"] = {}
minified_elementDirectory["Image"] = {}
minified_elementDirectory["Flexbox"] = {}
@@ -27,6 +28,7 @@ minified_elementDirectory["Slider"] = {}
minified_elementDirectory["ProgressBar"] = {}
minified_elementDirectory["List"] = {}
minified_elementDirectory["Dropdown"] = {}
minified_elementDirectory["BarChart"] = {}
minified_elementDirectory["Menu"] = {}
minified_pluginDirectory["xml"] = {}
minified_pluginDirectory["state"] = {}
@@ -440,6 +442,28 @@ if self.get("focused")then local bd=self.get("cursorX")-ac;local cd=
self.get("cursorY")-bc;if
bd>=1 and bd<=cc and cd>=1 and cd<=dc then
self:setCursor(bd,cd,true,self.get("cursorColor")or self.get("foreground"))end end end;return _b end
project["elements/LineChart.lua"] = function(...) local ba=require("elementManager")
local ca=ba.getElement("VisualElement")local da=ba.getElement("Graph")
local _b=require("libraries/colorHex")local ab=setmetatable({},da)ab.__index=ab;function ab.new()
local cb=setmetatable({},ab):__init()return cb end;function ab:init(cb,db)da.init(self,cb,db)
self.set("type","LineChart")return self end
local function bb(cb,db,_c,ac,bc,cc,dc,_d)local ad=ac-db;local bd=bc-_c
local cd=math.max(math.abs(ad),math.abs(bd))
for i=0,cd do local dd=cd==0 and 0 or i/cd
local __a=math.floor(db+ad*dd)local a_a=math.floor(_c+bd*dd)
if
__a>=1 and __a<=cb.get("width")and a_a>=1 and a_a<=cb.get("height")then cb:blit(__a,a_a,cc,_b[dc],_b[_d])end end end
function ab:render()ca.render(self)local cb=self.get("width")
local db=self.get("height")local _c=self.get("minValue")local ac=self.get("maxValue")
local bc=self.get("series")
for cc,dc in pairs(bc)do
if(dc.visible)then local _d,ad;local bd=#dc.data
local cd=(cb-1)/math.max((bd-1),1)
for dd,__a in ipairs(dc.data)do local a_a=math.floor(( (dd-1)*cd)+1)local b_a=
(__a-_c)/ (ac-_c)
local c_a=math.floor(db- (b_a* (db-1)))c_a=math.max(1,math.min(c_a,db))if _d then
bb(self,_d,ad,a_a,c_a,dc.symbol,dc.bgColor,dc.fgColor)end;_d,ad=a_a,c_a end end end end;return ab end
project["elements/Container.lua"] = function(...) local ca=require("elementManager")
local da=ca.getElement("VisualElement")local _b=require("libraries/expect")
local ab=require("libraries/utils").split;local bb=setmetatable({},da)bb.__index=bb
@@ -1214,27 +1238,47 @@ nil;self._values=nil;self.basalt=nil;self.parent=nil
self.__index=nil;setmetatable(self,nil)end
function aa:updateRender()if(self.parent)then self.parent:updateRender()else
self._renderUpdate=true end end;return aa end
project["elements/Graph.lua"] = function(...) local d=require("elementManager")
local _a=d.getElement("elements/VisualElement")local aa=setmetatable({},_a)aa.__index=aa
aa.defineProperty(aa,"data",{default={},type="table",canTriggerRender=true})
aa.defineProperty(aa,"minValue",{default=0,type="number",canTriggerRender=true})
aa.defineProperty(aa,"maxValue",{default=100,type="number",canTriggerRender=true})
aa.defineProperty(aa,"graphColor",{default=colors.yellow,type="color",canTriggerRender=true})
aa.defineProperty(aa,"graphSymbol",{default="\127",type="string",canTriggerRender=true})
function aa.new()local ba=setmetatable({},aa):__init()return ba end;function aa:init(ba,ca)_a.init(self,ba,ca)self.set("type","Graph")
return self end
function aa:setPoint(ba,ca)
local da=self.get("data")da[ba]=ca;self:updateRender()end;function aa:addPoint(ba)local ca=self.get("data")table.insert(ca,ba)while#ca>
self.get("width")do table.remove(ca,1)end
self:updateRender()end
function aa:render()
_a.render(self)local ba=self.get("data")local ca=self.get("width")
local da=self.get("height")local _b=self.get("minValue")local ab=self.get("maxValue")
local bb=self.get("graphSymbol")local cb=self.get("graphColor")
for x=1,ca do
if ba[x]then
local db=(ba[x]-_b)/ (ab-_b)local _c=math.floor(da- (db* (da-1)))
_c=math.max(1,math.min(_c,da))self:textFg(x,_c,bb,cb)end end end;return aa end
project["elements/Graph.lua"] = function(...) local _a=require("elementManager")
local aa=_a.getElement("VisualElement")local ba=require("libraries/colorHex")
local ca=setmetatable({},aa)ca.__index=ca
ca.defineProperty(ca,"minValue",{default=0,type="number",canTriggerRender=true})
ca.defineProperty(ca,"maxValue",{default=100,type="number",canTriggerRender=true})
ca.defineProperty(ca,"series",{default={},type="table",canTriggerRender=true})
function ca.new()local da=setmetatable({},ca):__init()return da end
function ca:init(da,_b)aa.init(self,da,_b)self.set("type","Graph")
self.set("width",20)self.set("height",10)return self end
function ca:addSeries(da,_b,ab,bb,cb)local db=self.get("series")
table.insert(db,{name=da,symbol=_b or" ",bgColor=ab or colors.white,fgColor=
bb or colors.black,pointCount=cb or self.get("width"),data={},visible=true})self:updateRender()return self end
function ca:removeSeries(da)local _b=self.get("series")for ab,bb in ipairs(_b)do if bb.name==da then
table.remove(_b,ab)break end end
self:updateRender()return self end
function ca:getSeries(da)local _b=self.get("series")for ab,bb in ipairs(_b)do
if bb.name==da then return bb end end;return nil end
function ca:changeSeriesVisibility(da,_b)local ab=self.get("series")for bb,cb in ipairs(ab)do if cb.name==da then
cb.visible=_b;break end end
self:updateRender()return self end
function ca:addPoint(da,_b)local ab=self.get("series")
for bb,cb in ipairs(ab)do if cb.name==da then
table.insert(cb.data,_b)
while#cb.data>cb.pointCount do table.remove(cb.data,1)end;break end end;self:updateRender()return self end
function ca:focusSeries(da)local _b=self.get("series")
for ab,bb in ipairs(_b)do if bb.name==da then
table.remove(_b,ab)table.insert(_b,bb)break end end;self:updateRender()return self end
function ca:setSeriesPointCount(da,_b)local ab=self.get("series")
for bb,cb in ipairs(ab)do if cb.name==da then
cb.pointCount=_b;while#cb.data>_b do table.remove(cb.data,1)end
break end end;self:updateRender()return self end
function ca:render()aa.render(self)local da=self.get("width")
local _b=self.get("height")local ab=self.get("minValue")local bb=self.get("maxValue")
local cb=self.get("series")
for db,_c in pairs(cb)do
if(_c.visible)then local ac=#_c.data
local bc=(da-1)/math.max((ac-1),1)
for cc,dc in ipairs(_c.data)do local _d=math.floor(( (cc-1)*bc)+1)local ad=
(dc-ab)/ (bb-ab)
local bd=math.floor(_b- (ad* (_b-1)))bd=math.max(1,math.min(bd,_b))
self:blit(_d,bd,_c.symbol,ba[_c.bgColor],ba[_c.fgColor])end end end end;return ca end
project["elements/Frame.lua"] = function(...) local _a=require("elementManager")
local aa=_a.getElement("VisualElement")local ba=_a.getElement("Container")local ca=setmetatable({},ba)
ca.__index=ca
@@ -1551,6 +1595,25 @@ local cc=bc and
local dc=
bc and(_c.selectedForeground or self.get("selectedForeground"))or(_c.foreground or self.get("foreground"))self:textBg(1,i+1,string.rep(" ",cb),cc)self:textFg(1,
i+1,ac,dc)end end end end end;return ca end
project["elements/BarChart.lua"] = function(...) local aa=require("elementManager")
local ba=aa.getElement("VisualElement")local ca=aa.getElement("Graph")
local da=require("libraries/colorHex")local _b=setmetatable({},ca)_b.__index=_b;function _b.new()
local ab=setmetatable({},_b):__init()return ab end;function _b:init(ab,bb)ca.init(self,ab,bb)
self.set("type","BarChart")return self end
function _b:render()
ba.render(self)local ab=self.get("width")local bb=self.get("height")
local cb=self.get("minValue")local db=self.get("maxValue")local _c=self.get("series")local ac=0
local bc={}
for ad,bd in pairs(_c)do if(bd.visible)then
if#bd.data>0 then ac=ac+1;table.insert(bc,bd)end end end;local cc=ac;local dc=1
local _d=math.min(bc[1]and bc[1].pointCount or 0,math.floor((ab+dc)/ (
cc+dc)))
for groupIndex=1,_d do local ad=( (groupIndex-1)* (cc+dc))+1
for bd,cd in ipairs(bc)do
local dd=cd.data[groupIndex]
if dd then local __a=ad+ (bd-1)local a_a=(dd-cb)/ (db-cb)
local b_a=math.floor(bb- (a_a* (bb-1)))b_a=math.max(1,math.min(b_a,bb))for barY=b_a,bb do
self:blit(__a,barY,cd.symbol,da[cd.fgColor],da[cd.bgColor])end end end end end;return _b end
project["elements/Menu.lua"] = function(...) local _a=require("elements/VisualElement")
local aa=require("elements/List")local ba=require("libraries/colorHex")
local ca=setmetatable({},aa)ca.__index=ca

View File

@@ -415,14 +415,6 @@ function Container:addFrame()
return self
end
--- Adds a new Graph to the container
---@generic Element: Container
---@param self Element
---@return Graph
function Container:addGraph()
return self
end
--- Adds a new Image to the container
---@generic Element: Container
---@param self Element