diff --git a/config.lua b/config.lua index ccc3387..99d066d 100644 --- a/config.lua +++ b/config.lua @@ -1,361 +1,370 @@ return { ["categories"] = { - ["core"] = { - ["files"] = { - ["errorManager"] = { - ["path"] = "errorManager.lua", - ["size"] = 3789, - ["default"] = true, - ["requires"] = { - }, - ["description"] = "", - }, - ["main"] = { - ["path"] = "main.lua", - ["size"] = 7905, - ["default"] = true, - ["requires"] = { - }, - ["description"] = "", - }, - ["log"] = { - ["path"] = "log.lua", - ["size"] = 3142, - ["default"] = true, - ["requires"] = { - }, - ["description"] = "", - }, - ["init"] = { - ["path"] = "init.lua", - ["size"] = 519, - ["default"] = true, - ["requires"] = { - }, - ["description"] = "", - }, - ["propertySystem"] = { - ["path"] = "propertySystem.lua", - ["size"] = 15225, - ["default"] = true, - ["requires"] = { - }, - ["description"] = "", - }, - ["elementManager"] = { - ["path"] = "elementManager.lua", - ["size"] = 6297, - ["default"] = true, - ["requires"] = { - }, - ["description"] = "", - }, - ["render"] = { - ["path"] = "render.lua", - ["size"] = 10935, - ["default"] = true, - ["requires"] = { - }, - ["description"] = "", - }, - }, - ["description"] = "Core Files", - }, ["libraries"] = { + ["description"] = "Libraries", ["files"] = { - ["expect"] = { - ["path"] = "libraries/expect.lua", - ["size"] = 846, - ["default"] = true, - ["requires"] = { - }, - ["description"] = "", - }, ["colorHex"] = { ["path"] = "libraries/colorHex.lua", ["size"] = 132, - ["default"] = true, ["requires"] = { }, + ["default"] = true, ["description"] = "", }, ["utils"] = { ["path"] = "libraries/utils.lua", ["size"] = 2661, - ["default"] = true, ["requires"] = { }, + ["default"] = true, + ["description"] = "", + }, + ["expect"] = { + ["path"] = "libraries/expect.lua", + ["size"] = 846, + ["requires"] = { + }, + ["default"] = true, ["description"] = "", }, }, - ["description"] = "Libraries", - }, - ["elements"] = { - ["files"] = { - ["Input"] = { - ["path"] = "elements/Input.lua", - ["size"] = 7848, - ["default"] = true, - ["requires"] = { - [1] = "VisualElement", - }, - ["description"] = "A text input field with various features", - }, - ["VisualElement"] = { - ["path"] = "elements/VisualElement.lua", - ["size"] = 16876, - ["default"] = true, - ["requires"] = { - [1] = "BaseElement", - }, - ["description"] = "The Visual Element class which is the base class for all visual UI elements", - }, - ["ProgressBar"] = { - ["path"] = "elements/ProgressBar.lua", - ["size"] = 2272, - ["default"] = true, - ["requires"] = { - [1] = "VisualElement", - }, - ["description"] = "", - }, - ["Frame"] = { - ["path"] = "elements/Frame.lua", - ["size"] = 4435, - ["default"] = true, - ["requires"] = { - [1] = "Container", - }, - ["description"] = "A frame element that serves as a grouping container for other elements.", - }, - ["BaseElement"] = { - ["path"] = "elements/BaseElement.lua", - ["size"] = 8911, - ["default"] = true, - ["requires"] = { - }, - ["description"] = "The base class for all UI elements in Basalt.", - }, - ["BaseFrame"] = { - ["path"] = "elements/BaseFrame.lua", - ["size"] = 5868, - ["default"] = true, - ["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.", - }, - ["Checkbox"] = { - ["path"] = "elements/Checkbox.lua", - ["size"] = 2872, - ["default"] = true, - ["requires"] = { - [1] = "VisualElement", - }, - ["description"] = "", - }, - ["TextBox"] = { - ["path"] = "elements/TextBox.lua", - ["size"] = 10904, - ["default"] = false, - ["requires"] = { - [1] = "VisualElement", - }, - ["description"] = "A multi-line text editor component with cursor support and text manipulation features", - }, - ["List"] = { - ["path"] = "elements/List.lua", - ["size"] = 8300, - ["default"] = true, - ["requires"] = { - [1] = "VisualElement", - }, - ["description"] = "A scrollable list of selectable items", - }, - ["Button"] = { - ["path"] = "elements/Button.lua", - ["size"] = 1632, - ["default"] = true, - ["requires"] = { - [1] = "VisualElement", - }, - ["description"] = "", - }, - ["Table"] = { - ["path"] = "elements/Table.lua", - ["size"] = 7586, - ["default"] = true, - ["requires"] = { - [1] = "VisualElement", - }, - ["description"] = "", - }, - ["Container"] = { - ["path"] = "elements/Container.lua", - ["size"] = 23180, - ["default"] = true, - ["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", - }, - ["Image"] = { - ["path"] = "elements/Image.lua", - ["size"] = 13262, - ["default"] = false, - ["requires"] = { - [1] = "VisualElement", - }, - ["description"] = "An element that displays an image in bimg format", - }, - ["BigFont"] = { - ["path"] = "elements/BigFont.lua", - ["size"] = 20332, - ["default"] = false, - ["requires"] = { - [1] = "VisualElement", - }, - ["description"] = "", - }, - ["Scrollbar"] = { - ["path"] = "elements/Scrollbar.lua", - ["size"] = 9164, - ["default"] = true, - ["requires"] = { - [1] = "VisualElement", - }, - ["description"] = "", - }, - ["Tree"] = { - ["path"] = "elements/Tree.lua", - ["size"] = 7885, - ["default"] = true, - ["requires"] = { - [1] = "VisualElement", - }, - ["description"] = "", - }, - ["Menu"] = { - ["path"] = "elements/Menu.lua", - ["size"] = 4657, - ["default"] = true, - ["requires"] = { - [1] = "List", - }, - ["description"] = "A horizontal menu bar with selectable items.", - }, - ["Dropdown"] = { - ["path"] = "elements/Dropdown.lua", - ["size"] = 5896, - ["default"] = false, - ["requires"] = { - [1] = "List", - }, - ["description"] = "A dropdown menu that shows a list of selectable items", - }, - ["Program"] = { - ["path"] = "elements/Program.lua", - ["size"] = 6295, - ["default"] = true, - ["requires"] = { - [1] = "VisualElement", - }, - ["description"] = "", - }, - ["Label"] = { - ["path"] = "elements/Label.lua", - ["size"] = 3069, - ["default"] = true, - ["requires"] = { - [1] = "VisualElement", - }, - ["description"] = "A simple text display element that automatically resizes its width based on the text content.", - }, - ["Slider"] = { - ["path"] = "elements/Slider.lua", - ["size"] = 4676, - ["default"] = true, - ["requires"] = { - [1] = "VisualElement", - }, - ["description"] = "", - }, - ["Flexbox"] = { - ["path"] = "elements/Flexbox.lua", - ["size"] = 11530, - ["default"] = true, - ["requires"] = { - [1] = "Container", - }, - ["description"] = "A flexbox container that arranges its children in a flexible layout.", - }, - }, - ["description"] = "UI Elements", }, ["plugins"] = { + ["description"] = "Plugins", ["files"] = { - ["xml"] = { - ["path"] = "plugins/xml.lua", - ["size"] = 6389, - ["default"] = true, - ["requires"] = { - }, - ["description"] = "", - }, ["benchmark"] = { ["path"] = "plugins/benchmark.lua", ["size"] = 12515, - ["default"] = true, ["requires"] = { }, - ["description"] = "", - }, - ["reactive"] = { - ["path"] = "plugins/reactive.lua", - ["size"] = 6962, ["default"] = true, - ["requires"] = { - }, ["description"] = "", }, ["animation"] = { ["path"] = "plugins/animation.lua", ["size"] = 14116, - ["default"] = true, ["requires"] = { }, + ["default"] = true, ["description"] = "", }, - ["theme"] = { - ["path"] = "plugins/theme.lua", - ["size"] = 5885, - ["default"] = true, + ["xml"] = { + ["path"] = "plugins/xml.lua", + ["size"] = 6389, ["requires"] = { }, + ["default"] = true, ["description"] = "", }, ["debug"] = { ["path"] = "plugins/debug.lua", ["size"] = 6175, - ["default"] = true, ["requires"] = { }, + ["default"] = true, + ["description"] = "", + }, + ["reactive"] = { + ["path"] = "plugins/reactive.lua", + ["size"] = 6962, + ["requires"] = { + }, + ["default"] = true, + ["description"] = "", + }, + ["theme"] = { + ["path"] = "plugins/theme.lua", + ["size"] = 5885, + ["requires"] = { + }, + ["default"] = true, ["description"] = "", }, ["state"] = { ["path"] = "plugins/state.lua", ["size"] = 5867, - ["default"] = true, ["requires"] = { }, + ["default"] = true, + ["description"] = "", + }, + }, + }, + ["elements"] = { + ["description"] = "UI Elements", + ["files"] = { + ["BaseFrame"] = { + ["path"] = "elements/BaseFrame.lua", + ["size"] = 5868, + ["requires"] = { + [1] = "Container", + }, + ["default"] = true, + ["description"] = "This is the base frame class. It is the root element of all elements and the only element without a parent.", + }, + ["Button"] = { + ["path"] = "elements/Button.lua", + ["size"] = 1632, + ["requires"] = { + [1] = "VisualElement", + }, + ["default"] = true, + ["description"] = "", + }, + ["Input"] = { + ["path"] = "elements/Input.lua", + ["size"] = 7848, + ["requires"] = { + [1] = "VisualElement", + }, + ["default"] = true, + ["description"] = "A text input field with various features", + }, + ["Frame"] = { + ["path"] = "elements/Frame.lua", + ["size"] = 4435, + ["requires"] = { + [1] = "Container", + }, + ["default"] = true, + ["description"] = "A frame element that serves as a grouping container for other elements.", + }, + ["Image"] = { + ["path"] = "elements/Image.lua", + ["size"] = 13312, + ["requires"] = { + [1] = "VisualElement", + }, + ["default"] = false, + ["description"] = "An element that displays an image in bimg format", + }, + ["Table"] = { + ["path"] = "elements/Table.lua", + ["size"] = 7586, + ["requires"] = { + [1] = "VisualElement", + }, + ["default"] = true, + ["description"] = "", + }, + ["Flexbox"] = { + ["path"] = "elements/Flexbox.lua", + ["size"] = 11530, + ["requires"] = { + [1] = "Container", + }, + ["default"] = true, + ["description"] = "A flexbox container that arranges its children in a flexible layout.", + }, + ["Container"] = { + ["path"] = "elements/Container.lua", + ["size"] = 23180, + ["requires"] = { + [1] = "VisualElement", + }, + ["default"] = true, + ["description"] = "The container class. It is a visual element that can contain other elements. It is the base class for all containers", + }, + ["Label"] = { + ["path"] = "elements/Label.lua", + ["size"] = 3069, + ["requires"] = { + [1] = "VisualElement", + }, + ["default"] = true, + ["description"] = "A simple text display element that automatically resizes its width based on the text content.", + }, + ["Dropdown"] = { + ["path"] = "elements/Dropdown.lua", + ["size"] = 5896, + ["requires"] = { + [1] = "List", + }, + ["default"] = false, + ["description"] = "A dropdown menu that shows a list of selectable items", + }, + ["Program"] = { + ["path"] = "elements/Program.lua", + ["size"] = 6295, + ["requires"] = { + [1] = "VisualElement", + }, + ["default"] = true, + ["description"] = "", + }, + ["Tree"] = { + ["path"] = "elements/Tree.lua", + ["size"] = 7885, + ["requires"] = { + [1] = "VisualElement", + }, + ["default"] = true, + ["description"] = "", + }, + ["List"] = { + ["path"] = "elements/List.lua", + ["size"] = 8643, + ["requires"] = { + [1] = "VisualElement", + }, + ["default"] = true, + ["description"] = "A scrollable list of selectable items", + }, + ["BigFont"] = { + ["path"] = "elements/BigFont.lua", + ["size"] = 20332, + ["requires"] = { + [1] = "VisualElement", + }, + ["default"] = false, + ["description"] = "", + }, + ["VisualElement"] = { + ["path"] = "elements/VisualElement.lua", + ["size"] = 16876, + ["requires"] = { + [1] = "BaseElement", + }, + ["default"] = true, + ["description"] = "The Visual Element class which is the base class for all visual UI elements", + }, + ["ProgressBar"] = { + ["path"] = "elements/ProgressBar.lua", + ["size"] = 2272, + ["requires"] = { + [1] = "VisualElement", + }, + ["default"] = true, + ["description"] = "", + }, + ["TextBox"] = { + ["path"] = "elements/TextBox.lua", + ["size"] = 10904, + ["requires"] = { + [1] = "VisualElement", + }, + ["default"] = false, + ["description"] = "A multi-line text editor component with cursor support and text manipulation features", + }, + ["Graph"] = { + ["path"] = "elements/Graph.lua", + ["size"] = 2014, + ["requires"] = { + [1] = "VisualElement", + }, + ["default"] = false, + ["description"] = "---@configDefault false", + }, + ["Slider"] = { + ["path"] = "elements/Slider.lua", + ["size"] = 4676, + ["requires"] = { + [1] = "VisualElement", + }, + ["default"] = true, + ["description"] = "", + }, + ["Menu"] = { + ["path"] = "elements/Menu.lua", + ["size"] = 4657, + ["requires"] = { + [1] = "List", + }, + ["default"] = true, + ["description"] = "A horizontal menu bar with selectable items.", + }, + ["Checkbox"] = { + ["path"] = "elements/Checkbox.lua", + ["size"] = 2872, + ["requires"] = { + [1] = "VisualElement", + }, + ["default"] = true, + ["description"] = "", + }, + ["BaseElement"] = { + ["path"] = "elements/BaseElement.lua", + ["size"] = 8911, + ["requires"] = { + }, + ["default"] = true, + ["description"] = "The base class for all UI elements in Basalt.", + }, + ["Scrollbar"] = { + ["path"] = "elements/Scrollbar.lua", + ["size"] = 9164, + ["requires"] = { + [1] = "VisualElement", + }, + ["default"] = true, + ["description"] = "", + }, + }, + }, + ["core"] = { + ["description"] = "Core Files", + ["files"] = { + ["log"] = { + ["path"] = "log.lua", + ["size"] = 3142, + ["requires"] = { + }, + ["default"] = true, + ["description"] = "", + }, + ["propertySystem"] = { + ["path"] = "propertySystem.lua", + ["size"] = 15225, + ["requires"] = { + }, + ["default"] = true, + ["description"] = "", + }, + ["elementManager"] = { + ["path"] = "elementManager.lua", + ["size"] = 6297, + ["requires"] = { + }, + ["default"] = true, + ["description"] = "", + }, + ["render"] = { + ["path"] = "render.lua", + ["size"] = 10935, + ["requires"] = { + }, + ["default"] = true, + ["description"] = "", + }, + ["main"] = { + ["path"] = "main.lua", + ["size"] = 8158, + ["requires"] = { + }, + ["default"] = true, + ["description"] = "", + }, + ["init"] = { + ["path"] = "init.lua", + ["size"] = 519, + ["requires"] = { + }, + ["default"] = true, + ["description"] = "", + }, + ["errorManager"] = { + ["path"] = "errorManager.lua", + ["size"] = 3789, + ["requires"] = { + }, + ["default"] = true, ["description"] = "", }, }, - ["description"] = "Plugins", }, }, ["metadata"] = { - ["generated"] = "Sun Mar 2 21:04:18 2025", + ["generated"] = "Mon Mar 3 16:38:57 2025", ["version"] = "2.0", }, } \ No newline at end of file diff --git a/release/basalt.lua b/release/basalt.lua index cde07cf..5eaa2bd 100644 --- a/release/basalt.lua +++ b/release/basalt.lua @@ -18,6 +18,7 @@ minified_elementDirectory["Button"] = {} minified_elementDirectory["Input"] = {} minified_elementDirectory["BaseFrame"] = {} minified_elementDirectory["BaseElement"] = {} +minified_elementDirectory["Graph"] = {} minified_elementDirectory["Frame"] = {} minified_elementDirectory["Checkbox"] = {} minified_elementDirectory["Program"] = {} @@ -689,10 +690,10 @@ self:setFg(cb,db,ac)end;if bc then self:setBg(cb,db,bc)end;return self end function _b:nextFrame() if not self.get("bimg").animation then return self end;local cb=self.get("bimg")local db=self.get("currentFrame") local _c=db+1;if _c>#cb then _c=1 end;self.set("currentFrame",_c)return self end -function _b:addFrame()local cb=self.get("bimg")local db={} -local _c=string.rep(" ",self.get("width"))local ac=string.rep("f",self.get("width")) -local bc=string.rep("0",self.get("width"))for y=1,self.get("height")do db[y]={_c,ac,bc}end -table.insert(cb,db)return self end;function _b:updateFrame(cb,db)local _c=self.get("bimg")_c[cb]=db +function _b:addFrame()local cb=self.get("bimg") +local db=cb.width or#cb[1][1][1]local _c=cb.height or#cb[1]local ac={}local bc=string.rep(" ",db) +local cc=string.rep("f",db)local dc=string.rep("0",db)for y=1,_c do ac[y]={bc,cc,dc}end +table.insert(cb,ac)return self end;function _b:updateFrame(cb,db)local _c=self.get("bimg")_c[cb]=db self:updateRender()return self end;function _b:getFrame(cb) local db=self.get("bimg") return db[cb or self.get("currentFrame")]end @@ -1206,6 +1207,27 @@ 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/Frame.lua"] = function(...) local _a=require("elementManager") local aa=_a.getElement("VisualElement")local ba=_a.getElement("Container")local ca=setmetatable({},ba) ca.__index=ca @@ -1435,6 +1457,9 @@ 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 local ca=ba;ca.index=aa;table.insert(_a,ca)end end;return _a end +function d:getSelectedItem()local _a=self.get("items")for aa,ba in ipairs(_a)do if +type(ba)=="table"and ba.selected then return ba end end;return +nil 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) @@ -1600,7 +1625,8 @@ function bd.run(_ba)dd=_ba;if(_ba==nil)then dd=true end;local function aba() daa() while dd do caa(os.pullEventRaw())if(dd)then daa()end end end while dd do local bba,cba=pcall(aba)if not(bba)then -dc.header="Basalt Runtime Error"dc.error(cba)end end end;function bd.getAPI(_ba)return cc.getAPI(_ba)end;return bd end +dc.header="Basalt Runtime Error"dc.error(cba)end end end;function bd.getElementClass(_ba)return cc.getElement(_ba)end;function bd.getAPI(_ba)return +cc.getAPI(_ba)end;return bd end project["libraries/colorHex.lua"] = function(...) local b={}for i=0,15 do b[2 ^i]=("%x"):format(i) b[("%x"):format(i)]=2 ^i end;return b end project["libraries/utils.lua"] = function(...) local d,_a=math.floor,string.len;local aa={} diff --git a/src/LuaLS.lua b/src/LuaLS.lua index 34d99da..4c9e9c3 100644 --- a/src/LuaLS.lua +++ b/src/LuaLS.lua @@ -415,6 +415,14 @@ 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