Update config, LuaLS definitions, bundle and changelog

This commit is contained in:
github-actions[bot]
2025-02-21 17:42:33 +00:00
parent 792832c61d
commit e07da1c7f7
3 changed files with 165 additions and 369 deletions

View File

@@ -1,223 +1,8 @@
return {
["categories"] = {
["libraries"] = {
["files"] = {
[1] = {
["description"] = "No description available",
["path"] = "src/libraries/colorHex.lua",
["name"] = "colorHex",
},
[2] = {
["description"] = "No description available",
["path"] = "src/libraries/expect.lua",
["name"] = "expect",
},
[3] = {
["description"] = "No description available",
["path"] = "src/libraries/utils.lua",
["name"] = "utils",
},
},
["description"] = "Utility Libraries",
},
["core"] = {
["files"] = {
[1] = {
["description"] = "No description available",
["path"] = "src/LuaLS.lua",
["name"] = "LuaLS",
},
[2] = {
["description"] = "No description available",
["path"] = "src/elementManager.lua",
["name"] = "elementManager",
},
[3] = {
["description"] = "No description available",
["path"] = "src/errorManager.lua",
["name"] = "errorManager",
},
[4] = {
["description"] = "No description available",
["path"] = "src/init.lua",
["name"] = "init",
},
[5] = {
["description"] = "No description available",
["path"] = "src/log.lua",
["name"] = "log",
},
[6] = {
["description"] = "No description available",
["path"] = "src/main.lua",
["name"] = "main",
},
[7] = {
["description"] = "No description available",
["path"] = "src/propertySystem.lua",
["name"] = "propertySystem",
},
[8] = {
["description"] = "No description available",
["path"] = "src/render.lua",
["name"] = "render",
},
},
["description"] = "Core Framework Files",
},
["elements"] = {
["files"] = {
[1] = {
["description"] = "No description available",
["path"] = "src/elements/BaseElement.lua",
["name"] = "BaseElement",
},
[2] = {
["description"] = "No description available",
["path"] = "src/elements/BaseFrame.lua",
["name"] = "BaseFrame",
},
[3] = {
["description"] = "No description available",
["path"] = "src/elements/Button.lua",
["name"] = "Button",
},
[4] = {
["description"] = "No description available",
["path"] = "src/elements/Checkbox.lua",
["name"] = "Checkbox",
},
[5] = {
["description"] = "No description available",
["path"] = "src/elements/Container.lua",
["name"] = "Container",
},
[6] = {
["description"] = "No description available",
["path"] = "src/elements/Dropdown.lua",
["name"] = "Dropdown",
},
[7] = {
["description"] = "No description available",
["path"] = "src/elements/Flexbox.lua",
["name"] = "Flexbox",
},
[8] = {
["description"] = "No description available",
["path"] = "src/elements/Frame.lua",
["name"] = "Frame",
},
[9] = {
["description"] = "No description available",
["path"] = "src/elements/Input.lua",
["name"] = "Input",
},
[10] = {
["description"] = "No description available",
["path"] = "src/elements/Label.lua",
["name"] = "Label",
},
[11] = {
["description"] = "No description available",
["path"] = "src/elements/List.lua",
["name"] = "List",
},
[12] = {
["description"] = "No description available",
["path"] = "src/elements/Menu.lua",
["name"] = "Menu",
},
[13] = {
["description"] = "No description available",
["path"] = "src/elements/Program.lua",
["name"] = "Program",
},
[14] = {
["description"] = "No description available",
["path"] = "src/elements/ProgressBar.lua",
["name"] = "ProgressBar",
},
[15] = {
["description"] = "No description available",
["path"] = "src/elements/Scrollbar.lua",
["name"] = "Scrollbar",
},
[16] = {
["description"] = "No description available",
["path"] = "src/elements/Slider.lua",
["name"] = "Slider",
},
[17] = {
["description"] = "No description available",
["path"] = "src/elements/Table.lua",
["name"] = "Table",
},
[18] = {
["description"] = "No description available",
["path"] = "src/elements/TextBox.lua",
["name"] = "TextBox",
},
[19] = {
["description"] = "No description available",
["path"] = "src/elements/Tree.lua",
["name"] = "Tree",
},
[20] = {
["description"] = "No description available",
["path"] = "src/elements/VisualElement.lua",
["name"] = "VisualElement",
},
},
["description"] = "UI Elements",
},
["plugins"] = {
["files"] = {
[1] = {
["description"] = "No description available",
["path"] = "src/plugins/animation.lua",
["name"] = "animation",
},
[2] = {
["description"] = "No description available",
["path"] = "src/plugins/benchmark.lua",
["name"] = "benchmark",
},
[3] = {
["description"] = "No description available",
["path"] = "src/plugins/debug.lua",
["name"] = "debug",
},
[4] = {
["description"] = "No description available",
["path"] = "src/plugins/pluginTemplate.lua",
["name"] = "pluginTemplate",
},
[5] = {
["description"] = "No description available",
["path"] = "src/plugins/reactive.lua",
["name"] = "reactive",
},
[6] = {
["description"] = "No description available",
["path"] = "src/plugins/state.lua",
["name"] = "state",
},
[7] = {
["description"] = "No description available",
["path"] = "src/plugins/theme.lua",
["name"] = "theme",
},
[8] = {
["description"] = "No description available",
["path"] = "src/plugins/xml.lua",
["name"] = "xml",
},
},
["description"] = "Plugins and Extensions",
},
},
["metadata"] = {
["generated"] = "Fri Feb 21 17:42:27 2025",
["version"] = "2.0",
["generated"] = "Thu Feb 20 10:33:38 2025",
},
}

View File

@@ -593,7 +593,7 @@ if bb=="timer"then local cb=ab.get("animation")if
cb then cb:event(bb,...)end;return true end end
function _b.setup(ab)
ab.defineProperty(ab,"animation",{default=
nil,type="table"})ab.listenTo(ab,"timer")end
nil,type="table"})ab.defineEvent(ab,"timer")end
function _b:animate()local ab=da.new(self)self.set("animation",ab)return ab end;return{VisualElement=_b} end
project["plugins/state.lua"] = function(...) local d=require("propertySystem")
local _a=require("errorManager")local aa={}
@@ -758,8 +758,8 @@ aa.defineProperty(aa,"selectedColor",{default=colors.lightBlue,type="number"})
aa.defineProperty(aa,"gridColor",{default=colors.gray,type="number"})
aa.defineProperty(aa,"sortColumn",{default=nil,type="number"})
aa.defineProperty(aa,"sortDirection",{default="asc",type="string"})
aa.defineProperty(aa,"scrollOffset",{default=0,type="number",canTriggerRender=true})aa.listenTo(aa,"mouse_click")
aa.listenTo(aa,"mouse_scroll")
aa.defineProperty(aa,"scrollOffset",{default=0,type="number",canTriggerRender=true})aa.defineEvent(aa,"mouse_click")
aa.defineEvent(aa,"mouse_scroll")
function aa.new()local ba=setmetatable({},aa):__init()
ba.set("width",30)ba.set("height",10)ba.set("z",5)return ba end
function aa:init(ba,ca)d.init(self,ba,ca)self.set("type","Table")return self end
@@ -861,14 +861,15 @@ if cb.separator then
table.insert(_b,{text=cb.text or"|",selectable=false})ab=ab+1 else local db=" "..cb.text.." "cb.text=db
table.insert(_b,cb)ab=ab+#db end end;self.set("width",ab)return aa.setItems(self,_b)end
function ca:render()_a.render(self)local da=1
for _b,ab in ipairs(self.get("items"))do local bb=_b==
self.get("selectedIndex")
for _b,ab in ipairs(self.get("items"))do if type(ab)==
"string"then ab={text=" "..ab.." "}
self.get("items")[i]=ab end;local bb=ab.selected
local cb=ab.selectable==false and
self.get("separatorColor")or(bb and
(ab.selectedForeground or self.get("foreground"))or
(ab.selectedForeground or self.get("selectedForeground"))or
(ab.foreground or self.get("foreground")))
local db=
bb and(ab.selectedBackground or self.get("selectedColor"))or(ab.background or self.get("background"))
bb and(ab.selectedBackground or self.get("selectedBackground"))or(ab.background or self.get("background"))
self:blit(da,1,ab.text,string.rep(ba[cb],#ab.text),string.rep(ba[db],#ab.text))da=da+#ab.text end end
function ca:mouse_click(da,_b,ab)
if not _a.mouse_click(self,da,_b,ab)then return false end
@@ -877,25 +878,28 @@ local bb=select(1,self:getRelativePosition(_b,ab))local cb=1
for db,_c in ipairs(self.get("items"))do
if
bb>=cb and bb<cb+#_c.text then
if _c.selectable~=false then self.set("selectedIndex",db)
if _c.selectable~=false then if type(_c)=="string"then _c={text=_c}
self.get("items")[db]=_c end
if
type(_c)=="table"then if _c.callback then _c.callback(self)end end;self:fireEvent("select",db,_c)end;return true end;cb=cb+#_c.text end;return false end;return ca end
not self.get("multiSelection")then for ac,bc in ipairs(self.get("items"))do
if type(bc)=="table"then bc.selected=false end end end;_c.selected=not _c.selected
if _c.callback then _c.callback(self)end;self:fireEvent("select",db,_c)end;return true end;cb=cb+#_c.text end;return false end;return ca end
project["elements/Frame.lua"] = function(...) local d=require("elementManager")
local _a=d.getElement("Container")local aa=setmetatable({},_a)aa.__index=aa
aa.listenTo(aa,"resize")
function aa.new()local ba=setmetatable({},aa):__init()
ba.set("width",12)ba.set("height",6)
function aa.new()
local ba=setmetatable({},aa):__init()ba.set("width",12)ba.set("height",6)
ba.set("background",colors.gray)ba.set("z",10)return ba end;function aa:init(ba,ca)_a.init(self,ba,ca)self.set("type","Frame")
return self end;return aa end
project["elements/Button.lua"] = function(...) local _a=require("elementManager")
local aa=_a.getElement("VisualElement")
local ba=require("libraries/utils").getCenteredPosition;local ca=setmetatable({},aa)ca.__index=ca
ca.defineProperty(ca,"text",{default="Button",type="string",canTriggerRender=true})ca.listenTo(ca,"mouse_click")function ca.new(da,_b)
local ab=setmetatable({},ca):__init()ab:init(da,_b)ab.set("width",10)ab.set("height",3)
ab.set("z",5)return ab end;function ca:init(da,_b)
aa.init(self,da,_b)self.set("type","Button")end
function ca:render()
aa.render(self)local da=self.get("text")
ca.defineProperty(ca,"text",{default="Button",type="string",canTriggerRender=true})ca.defineEvent(ca,"mouse_click")
ca.defineEvent(ca,"mouse_up")
function ca.new()local da=setmetatable({},ca):__init()
da.set("width",10)da.set("height",3)da.set("z",5)return da end
function ca:init(da,_b)aa.init(self,da,_b)self.set("type","Button")end
function ca:render()aa.render(self)local da=self.get("text")
da=da:sub(1,self.get("width"))
local _b,ab=ba(da,self.get("width"),self.get("height"))
self:textFg(_b,ab,da,self.get("foreground"))end;return ca end
project["elements/Program.lua"] = function(...) local ba=require("elementManager")
@@ -903,10 +907,10 @@ local ca=ba.getElement("VisualElement")local da=require("errorManager")local _b=
_b.__index=_b
_b.defineProperty(_b,"program",{default=nil,type="table"})
_b.defineProperty(_b,"path",{default="",type="string"})
_b.defineProperty(_b,"running",{default=false,type="boolean"})_b.listenTo(_b,"key")_b.listenTo(_b,"char")
_b.listenTo(_b,"key_up")_b.listenTo(_b,"paste")
_b.listenTo(_b,"mouse_click")_b.listenTo(_b,"mouse_drag")
_b.listenTo(_b,"mouse_scroll")_b.listenTo(_b,"mouse_up")local ab={}ab.__index=ab
_b.defineProperty(_b,"running",{default=false,type="boolean"})_b.defineEvent(_b,"key")_b.defineEvent(_b,"char")
_b.defineEvent(_b,"key_up")_b.defineEvent(_b,"paste")
_b.defineEvent(_b,"mouse_click")_b.defineEvent(_b,"mouse_drag")
_b.defineEvent(_b,"mouse_scroll")_b.defineEvent(_b,"mouse_up")local ab={}ab.__index=ab
local bb=dofile("rom/modules/main/cc/require.lua").make
function ab.new()local cb=setmetatable({},ab)cb.env={}cb.args={}return cb end
function ab:run(cb,db,_c)
@@ -1175,10 +1179,9 @@ function bb:mouse_drag(_c,ac,bc)
if da.mouse_drag(self,_c,ac,bc)then
local cc=db(self,"mouse_drag",_c,ac,bc)
local dc,_d=self:callChildrenEvents(true,"mouse_drag",table.unpack(cc))if(dc)then return true end end;return false end
function bb:mouse_scroll(_c,ac,bc)
if da.mouse_scroll(self,_c,ac,bc)then
local cc=db(self,"mouse_scroll",_c,ac,bc)
local dc,_d=self:callChildrenEvents(true,"mouse_scroll",table.unpack(cc))if(dc)then return true end;return false end end;function bb:key(_c)if self.get("focusedChild")then return
function bb:mouse_scroll(_c,ac,bc)local cc=db(self,"mouse_scroll",_c,ac,bc)
local dc,_d=self:callChildrenEvents(true,"mouse_scroll",table.unpack(cc))if(dc)then return true end
if(da.mouse_scroll(self,_c,ac,bc))then return true end;return false end;function bb:key(_c)if self.get("focusedChild")then return
self.get("focusedChild"):dispatchEvent("key",_c)end
return true end
function bb:char(_c)if
@@ -1198,6 +1201,11 @@ ac<1 or ac>_d then return self end;local ad=_c<1 and(2 -_c)or 1
local bd=math.min(#bc-
ad+1,dc-math.max(1,_c)+1)if bd<=0 then return self end
da.textFg(self,math.max(1,_c),math.max(1,ac),bc:sub(ad,ad+bd-1),cc)return self end
function bb:textBg(_c,ac,bc,cc)local dc,_d=self.get("width"),self.get("height")if
ac<1 or ac>_d then return self end;local ad=_c<1 and(2 -_c)or 1
local bd=math.min(#bc-
ad+1,dc-math.max(1,_c)+1)if bd<=0 then return self end
da.textBg(self,math.max(1,_c),math.max(1,ac),bc:sub(ad,ad+bd-1),cc)return self end
function bb:blit(_c,ac,bc,cc,dc)local _d,ad=self.get("width"),self.get("height")if
ac<1 or ac>ad then return self end;local bd=_c<1 and(2 -_c)or 1
local cd=math.min(#bc-
@@ -1221,8 +1229,8 @@ d.defineProperty(d,"step",{default=1,type="number",canTriggerRender=true})
d.defineProperty(d,"max",{default=100,type="number"})
d.defineProperty(d,"horizontal",{default=true,type="boolean",canTriggerRender=true})
d.defineProperty(d,"barColor",{default=colors.gray,type="number",canTriggerRender=true})
d.defineProperty(d,"sliderColor",{default=colors.blue,type="number",canTriggerRender=true})d.listenTo(d,"mouse_click")
d.listenTo(d,"mouse_drag")d.listenTo(d,"mouse_up")function d.new()
d.defineProperty(d,"sliderColor",{default=colors.blue,type="number",canTriggerRender=true})d.defineEvent(d,"mouse_click")
d.defineEvent(d,"mouse_drag")d.defineEvent(d,"mouse_up")function d.new()
local _a=setmetatable({},d):__init()_a.set("width",8)_a.set("height",1)
_a.set("backgroundEnabled",false)return _a end;function d:init(_a,aa)
c.init(self,_a,aa)self.set("type","Slider")end
@@ -1259,18 +1267,26 @@ da~=nil and da<1 then return ba._values.type end;return ba._values.type[
da or 1]end})
aa.defineProperty(aa,"id",{default="",type="string",readonly=true})
aa.defineProperty(aa,"name",{default="",type="string"})
aa.defineProperty(aa,"eventCallbacks",{default={},type="table"})function aa.listenTo(ba,ca,da)if not ba._events then ba._events={}end
ba._events[ca]={enabled=true,name=ca,event=da}end;function aa.new()
local ba=setmetatable({},aa):__init()return ba end
function aa:init(ba,ca)self._props=ba
self._values.id=_a()self.basalt=ca;self._registeredEvents={}
if aa._events then
for da,_b in pairs(aa._events)do self._registeredEvents[
_b.event or _b.name]=true
local ab="on"..
_b.name:gsub("_(%l)",function(bb)return
bb:upper()end):gsub("^%l",string.upper)
self[ab]=function(bb,...)bb:registerCallback(_b.name,...)return bb end end end;return self end
aa.defineProperty(aa,"eventCallbacks",{default={},type="table"})
function aa.defineEvent(ba,ca,da)
if not rawget(ba,'_eventConfigs')then ba._eventConfigs={}end;ba._eventConfigs[ca]={requires=da and da or ca}end
function aa.registerEventCallback(ba,ca,...)
local da=ca:match("^on")and ca or"on"..ca;local _b={...}local ab=_b[1]
ba[da]=function(bb,...)
for cb,db in ipairs(_b)do if not bb._registeredEvents[db]then
bb:listenEvent(db,true)end end;bb:registerCallback(ab,...)return bb end end
function aa.new()local ba=setmetatable({},aa):__init()return ba end
function aa:init(ba,ca)self._props=ba;self._values.id=_a()self.basalt=ca
self._registeredEvents={}local da=getmetatable(self).__index;local _b={}da=self
while da do
if
type(da)=="table"and da._eventConfigs then for ab,bb in pairs(da._eventConfigs)do
if not _b[ab]then _b[ab]=bb end end end
da=getmetatable(da)and getmetatable(da).__index end
for ab,bb in pairs(_b)do self._registeredEvents[bb.requires]=true end;if self._callbacks then
for ab,bb in pairs(self._callbacks)do self[bb]=function(cb,...)
cb:registerCallback(ab,...)return cb end end end
return self end
function aa:postInit()if(self._props)then
for ba,ca in pairs(self._props)do self.set(ba,ca)end end;self._props=nil;return self end;function aa:isType(ba)
for ca,da in ipairs(self._values.type)do if da==ba then return true end end;return false end
@@ -1288,8 +1304,8 @@ if
not self._values.eventCallbacks[ba]then self._values.eventCallbacks[ba]={}end
table.insert(self._values.eventCallbacks[ba],ca)return self end
function aa:fireEvent(ba,...)
if self._values.eventCallbacks[ba]then for ca,da in
ipairs(self._values.eventCallbacks[ba])do local _b=da(self,...)return _b end end;return self end;function aa:dispatchEvent(ba,...)if self[ba]then return self[ba](self,...)end;return
if self.get("eventCallbacks")[ba]then for ca,da in
ipairs(self.get("eventCallbacks")[ba])do local _b=da(self,...)return _b end end;return self end;function aa:dispatchEvent(ba,...)if self[ba]then return self[ba](self,...)end;return
self:handleEvent(ba,...)end;function aa:handleEvent(ba,...)return
false end
function aa:getBaseFrame()if self.parent then return
@@ -1308,7 +1324,7 @@ d.defineProperty(d,"text",{default=" ",type="string",canTriggerRender=true,sette
local ca=math.max(#aa,#ba)if(_a.get("autoSize"))then _a.set("width",ca)end;return aa end})
d.defineProperty(d,"checkedText",{default="x",type="string",canTriggerRender=true,setter=function(_a,aa)local ba=_a.get("text")
local ca=math.max(#aa,#ba)if(_a.get("autoSize"))then _a.set("width",ca)end;return aa end})
d.defineProperty(d,"autoSize",{default=true,type="boolean"})d.listenTo(d,"mouse_click")function d.new()
d.defineProperty(d,"autoSize",{default=true,type="boolean"})d.defineEvent(d,"mouse_click")function d.new()
local _a=setmetatable({},d):__init()return _a end;function d:init(_a,aa)c.init(self,_a,aa)
self.set("type","Checkbox")end
function d:mouse_click(_a,aa,ba)
@@ -1329,11 +1345,11 @@ aa.defineProperty(aa,"placeholder",{default="...",type="string"})
aa.defineProperty(aa,"placeholderColor",{default=colors.gray,type="number"})
aa.defineProperty(aa,"focusedColor",{default=colors.blue,type="number"})
aa.defineProperty(aa,"pattern",{default=nil,type="string"})
aa.defineProperty(aa,"cursorColor",{default=nil,type="number"})aa.listenTo(aa,"mouse_click")aa.listenTo(aa,"key")
aa.listenTo(aa,"char")function aa.new()local ba=setmetatable({},aa):__init()
ba.set("width",8)ba.set("z",3)return ba end
function aa:init(ba,ca)
d.init(self,ba,ca)self.set("type","Input")return self end
aa.defineProperty(aa,"cursorColor",{default=nil,type="number"})aa.defineEvent(aa,"mouse_click")
aa.defineEvent(aa,"key")aa.defineEvent(aa,"char")
function aa.new()
local ba=setmetatable({},aa):__init()ba.set("width",8)ba.set("z",3)return ba end
function aa:init(ba,ca)d.init(self,ba,ca)self.set("type","Input")return self end
function aa:char(ba)if not self.get("focused")then return false end
local ca=self.get("text")local da=self.get("cursorPos")local _b=self.get("maxLength")
local ab=self.get("pattern")if _b and#ca>=_b then return end
@@ -1399,9 +1415,14 @@ if(cb.parent~=nil)then
cb.parent.set("childrenSorted",false)cb.parent.set("childrenEventsSorted",false)end;return db end})
_b.defineProperty(_b,"ignoreOffset",{default=false,type="boolean"})_b.combineProperties(_b,"position","x","y")
_b.combineProperties(_b,"size","width","height")
_b.combineProperties(_b,"color","foreground","background")_b.listenTo(_b,"focus")_b.listenTo(_b,"blur")
_b.listenTo(_b,"mouse_enter","mouse_move")_b.listenTo(_b,"mouse_leave","mouse_move")
_b.listenTo(_b,"mouse_scroll")local ab,bb=math.max,math.min;function _b.new()
_b.combineProperties(_b,"color","foreground","background")_b.defineEvent(_b,"focus")
_b.defineEvent(_b,"blur")
_b.registerEventCallback(_b,"MouseClick","mouse_click","mouse_up")
_b.registerEventCallback(_b,"MouseUp","mouse_up","mouse_click")
_b.registerEventCallback(_b,"MouseDrag","mouse_drag","mouse_click","mouse_up")
_b.registerEventCallback(_b,"MouseScroll","mouse_scroll")
_b.registerEventCallback(_b,"MouseEnter","mouse_enter","mouse_move")_b.registerEventCallback(_b,"Focus","focus","blur")
_b.registerEventCallback(_b,"Blur","blur","focus")local ab,bb=math.max,math.min;function _b.new()
local cb=setmetatable({},_b):__init()return cb end;function _b:init(cb,db)ca.init(self,cb,db)
self.set("type","VisualElement")end;function _b:multiBlit(cb,db,_c,ac,bc,cc,dc)
local _d,ad=self:calculatePosition()cb=cb+_d-1;db=db+ad-1
@@ -1473,9 +1494,9 @@ ca.defineProperty(ca,"attachedProperty",{default=nil,type="string"})
ca.defineProperty(ca,"minValue",{default=0,type="number"})
ca.defineProperty(ca,"maxValue",{default=100,type="number"})
ca.defineProperty(ca,"orientation",{default="vertical",type="string",canTriggerRender=true})
ca.defineProperty(ca,"handleSize",{default=2,type="number",canTriggerRender=true})ca.listenTo(ca,"mouse_click")
ca.listenTo(ca,"mouse_release")ca.listenTo(ca,"mouse_drag")
ca.listenTo(ca,"mouse_scroll")
ca.defineProperty(ca,"handleSize",{default=2,type="number",canTriggerRender=true})ca.defineEvent(ca,"mouse_click")
ca.defineEvent(ca,"mouse_release")ca.defineEvent(ca,"mouse_drag")
ca.defineEvent(ca,"mouse_scroll")
function ca.new()local ab=setmetatable({},ca):__init()
ab.set("width",1)ab.set("height",10)return ab end;function ca:init(ab,bb)aa.init(self,ab,bb)self.set("type","Scrollbar")return
self end
@@ -1524,11 +1545,12 @@ self:blit(i,1,db,ba[_c],ba[ac])end end end;return ca end
project["elements/List.lua"] = function(...) local c=require("elements/VisualElement")
local d=setmetatable({},c)d.__index=d
d.defineProperty(d,"items",{default={},type="table",canTriggerRender=true})
d.defineProperty(d,"selectedIndex",{default=0,type="number",canTriggerRender=true})
d.defineProperty(d,"selectable",{default=true,type="boolean"})
d.defineProperty(d,"multiSelection",{default=false,type="boolean"})
d.defineProperty(d,"offset",{default=0,type="number",canTriggerRender=true})
d.defineProperty(d,"selectedColor",{default=colors.blue,type="number"})d.listenTo(d,"mouse_click")
d.listenTo(d,"mouse_scroll")
d.defineProperty(d,"selectedBackground",{default=colors.blue,type="number"})
d.defineProperty(d,"selectedForeground",{default=colors.white,type="number"})d.defineEvent(d,"mouse_click")
d.defineEvent(d,"mouse_scroll")
function d.new()local _a=setmetatable({},d):__init()
_a.set("width",16)_a.set("height",8)_a.set("z",5)
_a.set("background",colors.gray)return _a end
@@ -1536,16 +1558,20 @@ function d:init(_a,aa)c.init(self,_a,aa)self.set("type","List")return self end;f
self:updateRender()return self end
function d:removeItem(_a)
local aa=self.get("items")table.remove(aa,_a)self:updateRender()return self end
function d:clear()self.set("items",{})
self.set("selectedIndex",0)self:updateRender()return self end
function d:clear()self.set("items",{})self:updateRender()return self end
function d:getSelectedItems()local _a={}for aa,ba in ipairs(self.get("items"))do
if
type(ba)=="table"and ba.selected then table.insert(_a,{index=aa,item=ba})end end;return _a end
function d:mouse_click(_a,aa,ba)
if
_a==1 and self:isInBounds(aa,ba)and self.get("selectable")then local ca,da=self:getRelativePosition(aa,ba)
local _b=da+self.get("offset")local ab=self.get("items")
if _b<=#ab then local bb=ab[_b]
self.set("selectedIndex",_b)
if type(bb)=="table"and bb.callback then bb.callback(self)end;self:fireEvent("select",_b,bb)self:updateRender()return
true end end;return false end
if _b<=#ab then local bb=ab[_b]if type(bb)=="string"then
bb={text=bb}ab[_b]=bb end;if
not self.get("multiSelection")then
for cb,db in ipairs(ab)do if type(db)=="table"then db.selected=false end end end
bb.selected=not bb.selected;if bb.callback then bb.callback(self)end
self:fireEvent("select",_b,bb)self:updateRender()return true end end;return false end
function d:mouse_scroll(_a,aa,ba)
if self:isInBounds(aa,ba)then local ca=self.get("offset")
local da=math.max(0,#
@@ -1553,22 +1579,21 @@ self.get("items")-self.get("height"))ca=math.min(da,math.max(0,ca+_a))
self.set("offset",ca)return true end;return false end
function d:onSelect(_a)self:registerCallback("select",_a)return self end
function d:render()c.render(self)local _a=self.get("items")
local aa=self.get("height")local ba=self.get("offset")
local ca=self.get("selectedIndex")local da=self.get("width")
for i=1,aa do local _b=i+ba;local ab=_a[_b]
if ab then
if type(ab)=="table"and
ab.separator then local bb=(ab.text or"-"):sub(1,1)
local cb=string.rep(bb,da)local db=ab.foreground or self.get("foreground")local _c=
ab.background or self.get("background")
self:textBg(1,i,string.rep(" ",da),_c)self:textFg(1,i,cb,db)else
local bb=type(ab)=="table"and ab.text or ab;local cb=_b==ca
local db=cb and
(ab.selectedBackground or self.get("selectedColor"))or
(ab.background or self.get("background"))
local _c=cb and(ab.selectedForeground or colors.white)or(ab.foreground or
self.get("foreground"))self:textBg(1,i,string.rep(" ",da),db)
self:textFg(1,i,bb,_c)end end end end;return d end
local aa=self.get("height")local ba=self.get("offset")local ca=self.get("width")
for i=1,aa do local da=i+ba
local _b=_a[da]
if _b then if type(_b)=="string"then _b={text=_b}_a[da]=_b end
if
_b.separator then local ab=(_b.text or"-"):sub(1,1)
local bb=string.rep(ab,ca)local cb=_b.foreground or self.get("foreground")local db=
_b.background or self.get("background")
self:textBg(1,i,string.rep(" ",ca),db)self:textFg(1,i,bb,cb)else local ab=_b.text;local bb=_b.selected
local cb=bb and(_b.selectedBackground or
self.get("selectedBackground"))or(_b.background or
self.get("background"))
local db=
bb and(_b.selectedForeground or self.get("selectedForeground"))or(_b.foreground or self.get("foreground"))self:textBg(1,i,string.rep(" ",ca),cb)
self:textFg(1,i,ab,db)end end end end;return d 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})
@@ -1577,8 +1602,8 @@ ba.defineProperty(ba,"expandedNodes",{default={},type="table",canTriggerRender=t
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="number"})
ba.defineProperty(ba,"selectedColor",{default=colors.lightBlue,type="number"})ba.listenTo(ba,"mouse_click")
ba.listenTo(ba,"mouse_scroll")
ba.defineProperty(ba,"selectedColor",{default=colors.lightBlue,type="number"})ba.defineEvent(ba,"mouse_click")
ba.defineEvent(ba,"mouse_scroll")
function ba.new()local da=setmetatable({},ba):__init()
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
@@ -1633,10 +1658,11 @@ _b.defineProperty(_b,"scrollX",{default=0,type="number",canTriggerRender=true})
_b.defineProperty(_b,"scrollY",{default=0,type="number",canTriggerRender=true})
_b.defineProperty(_b,"editable",{default=true,type="boolean"})
_b.defineProperty(_b,"syntaxPatterns",{default={},type="table"})
_b.defineProperty(_b,"cursorColor",{default=nil,type="number"})_b.listenTo(_b,"mouse_click")_b.listenTo(_b,"key")
_b.listenTo(_b,"char")_b.listenTo(_b,"mouse_scroll")
function _b.new()
local _c=setmetatable({},_b):__init()_c.set("width",20)_c.set("height",10)return _c end;function _b:init(_c,ac)ca.init(self,_c,ac)self.set("type","TextBox")
_b.defineProperty(_b,"cursorColor",{default=nil,type="number"})_b.defineEvent(_b,"mouse_click")
_b.defineEvent(_b,"key")_b.defineEvent(_b,"char")
_b.defineEvent(_b,"mouse_scroll")
function _b.new()local _c=setmetatable({},_b):__init()
_c.set("width",20)_c.set("height",10)return _c end;function _b:init(_c,ac)ca.init(self,_c,ac)self.set("type","TextBox")
return self end;function _b:addSyntaxPattern(_c,ac)
table.insert(self.get("syntaxPatterns"),{pattern=_c,color=ac})return self end
local function ab(_c,ac)
@@ -1727,37 +1753,16 @@ self.set("isOpen",not self.get("isOpen"))if not self.get("isOpen")then self.set(
self.set("height",1 +math.min(self.get("dropdownHeight"),
#self.get("items")))end
return true elseif self.get("isOpen")and cb>1 then
local db=cb-1 +self.get("offset")local _c=self.get("items")
if db<=#_c then local ac=_c[db]if type(ac)=="table"and
ac.separator then return false end
self.set("selectedIndex",db)self.set("isOpen",false)self.set("height",1)
if type(ac)==
"table"and ac.callback then ac.callback(self)end;self:fireEvent("select",db,ac)return true end end;return false end
aa.mouse_click(self,da,_b,ab)self.set("isOpen",false)self.set("height",1)return true end;return false end
function ca:render()_a.render(self)local da=self.get("selectedText")
if
#da==0 and self.get("selectedIndex")>0 then
local _b=self.get("items")[self.get("selectedIndex")]
da=type(_b)=="table"and _b.text or tostring(_b)end
#da==0 then local _b=self:getSelectedItems()if#_b>0 then local ab=_b[1].item
da=ab.text or""end end
self:blit(1,1,da..
string.rep(" ",self.get("width")-#da-1).. (self.get("isOpen")and"\31"or"\17"),string.rep(ba[self.get("foreground")],self.get("width")),string.rep(ba[self.get("background")],self.get("width")))
if self.get("isOpen")then local _b=self.get("items")
local ab=self.get("offset")local bb=self.get("selectedIndex")local cb=self.get("width")
for i=2,self.get("height")
do local db=i-1 +ab;local _c=_b[db]
if _c then
if type(_c)=="table"and _c.separator then local ac=(
_c.text or"-"):sub(1,1)
local bc=string.rep(ac,cb)local cc=_c.foreground or self.get("foreground")local dc=
_c.background or self.get("background")
self:textBg(1,i,string.rep(" ",cb),dc)self:textFg(1,i,bc,cc)else local ac=type(_c)=="table"and _c.text or
tostring(_c)local bc=db==bb
local cc=bc and(_c.selectedBackground or
self.get("selectedColor"))or(_c.background or
self.get("background"))
local dc=bc and(_c.selectedForeground or colors.white)or(_c.foreground or
self.get("foreground"))self:textBg(1,i,string.rep(" ",cb),cc)
self:textFg(1,i,ac,dc)end end end end end;return ca end
if self.get("isOpen")then local _b=self.get("offset")
self.set("offset",_b+1)aa.render(self)self.set("offset",_b)end end;return ca end
project["render.lua"] = function(...) local _a=require("libraries/colorHex")local aa=require("log")
local ba={}ba.__index=ba;local ca=string.sub
function ba.new(da)local _b=setmetatable({},ba)

View File

@@ -551,19 +551,6 @@ function Dropdown:setDropSymbol(dropSymbol)
end
---@class Frame
local Frame = {}
--- {width number, height number} Fired when the frame is resized
---@generic Element: Frame
---@param self Element
---@param callback function
---@return Element
function Frame:onOnResize(callback)
return self
end
---@class Input
---@field text string
---@field cursorPos number
@@ -745,13 +732,14 @@ end
---@class List
---@field items table
---@field selectedIndex number
---@field selectable boolean
---@field multiSelection boolean
---@field offset number
---@field selectedColor color
---@field selectedBackground color
---@field selectedForeground color
local List = {}
--- Gets the List of items to display. Items can be strings or tables with properties
--- Gets the List of items to display. Items can be tables with properties including selected state
---@generic Element: List
---@param self Element
---@return table
@@ -759,7 +747,7 @@ function List:getItems()
return self.items
end
--- Sets the List of items to display. Items can be strings or tables with properties
--- Sets the List of items to display. Items can be tables with properties including selected state
---@generic Element: List
---@param self Element
---@param items table
@@ -769,24 +757,6 @@ function List:setItems(items)
return self
end
--- Gets the Index of the currently selected item (0 means no selection)
---@generic Element: List
---@param self Element
---@return number
function List:getSelectedIndex()
return self.selectedIndex
end
--- Sets the Index of the currently selected item (0 means no selection)
---@generic Element: List
---@param self Element
---@param selectedIndex number
---@return Element
function List:setSelectedIndex(selectedIndex)
self.selectedIndex = selectedIndex
return self
end
--- Gets the Whether items in the list can be selected
---@generic Element: List
---@param self Element
@@ -805,6 +775,24 @@ function List:setSelectable(selectable)
return self
end
--- Gets the Whether multiple items can be selected at once
---@generic Element: List
---@param self Element
---@return boolean
function List:getMultiSelection()
return self.multiSelection
end
--- Sets the Whether multiple items can be selected at once
---@generic Element: List
---@param self Element
---@param multiSelection boolean
---@return Element
function List:setMultiSelection(multiSelection)
self.multiSelection = multiSelection
return self
end
--- Gets the Current scroll offset for viewing long lists
---@generic Element: List
---@param self Element
@@ -823,21 +811,39 @@ function List:setOffset(offset)
return self
end
--- Gets the Background color for the selected item
--- Gets the Background color for selected items
---@generic Element: List
---@param self Element
---@return color
function List:getSelectedColor()
return self.selectedColor
function List:getSelectedBackground()
return self.selectedBackground
end
--- Sets the Background color for the selected item
--- Sets the Background color for selected items
---@generic Element: List
---@param self Element
---@param selectedColor color
---@param selectedBackground color
---@return Element
function List:setSelectedColor(selectedColor)
self.selectedColor = selectedColor
function List:setSelectedBackground(selectedBackground)
self.selectedBackground = selectedBackground
return self
end
--- Gets the Text color for selected items
---@generic Element: List
---@param self Element
---@return color
function List:getSelectedForeground()
return self.selectedForeground
end
--- Sets the Text color for selected items
---@generic Element: List
---@param self Element
---@param selectedForeground color
---@return Element
function List:setSelectedForeground(selectedForeground)
self.selectedForeground = selectedForeground
return self
end