litegui.ts 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"litegui.js","mappings":"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","sources":["webpack://LiteGUI/./node_modules/@simonwep/pickr/dist/pickr.min.js","webpack://LiteGUI/./src/area.ts","webpack://LiteGUI/./src/console.ts","webpack://LiteGUI/./src/core.ts","webpack://LiteGUI/./src/dialog.ts","webpack://LiteGUI/./src/dragger.ts","webpack://LiteGUI/./src/inspector/array.ts","webpack://LiteGUI/./src/inspector/button.ts","webpack://LiteGUI/./src/inspector/checkbox.ts","webpack://LiteGUI/./src/inspector/color.ts","webpack://LiteGUI/./src/inspector/combo.ts","webpack://LiteGUI/./src/inspector/dataTree.ts","webpack://LiteGUI/./src/inspector/file.ts","webpack://LiteGUI/./src/inspector/flag.ts","webpack://LiteGUI/./src/inspector/icon.ts","webpack://LiteGUI/./src/inspector/index.ts","webpack://LiteGUI/./src/inspector/info.ts","webpack://LiteGUI/./src/inspector/inspector.ts","webpack://LiteGUI/./src/inspector/line.ts","webpack://LiteGUI/./src/inspector/list.ts","webpack://LiteGUI/./src/inspector/number.ts","webpack://LiteGUI/./src/inspector/pad.ts","webpack://LiteGUI/./src/inspector/seperator.ts","webpack://LiteGUI/./src/inspector/slider.ts","webpack://LiteGUI/./src/inspector/string.ts","webpack://LiteGUI/./src/inspector/stringButton.ts","webpack://LiteGUI/./src/inspector/tags.ts","webpack://LiteGUI/./src/inspector/textArea.ts","webpack://LiteGUI/./src/inspector/tree.ts","webpack://LiteGUI/./src/inspector/vector.ts","webpack://LiteGUI/./src/menubar.ts","webpack://LiteGUI/./src/panel.ts","webpack://LiteGUI/./src/table.ts","webpack://LiteGUI/./src/tabs.ts","webpack://LiteGUI/./src/utilities.ts","webpack://LiteGUI/./src/widgets/button.ts","webpack://LiteGUI/./src/widgets/checkbox.ts","webpack://LiteGUI/./src/widgets/complexList.ts","webpack://LiteGUI/./src/widgets/contextMenu.ts","webpack://LiteGUI/./src/widgets/index.ts","webpack://LiteGUI/./src/widgets/lineEditor.ts","webpack://LiteGUI/./src/widgets/list.ts","webpack://LiteGUI/./src/widgets/listBox.ts","webpack://LiteGUI/./src/widgets/searchBox.ts","webpack://LiteGUI/./src/widgets/slider.ts","webpack://LiteGUI/./src/widgets/tree.ts","webpack://LiteGUI/webpack/bootstrap","webpack://LiteGUI/webpack/before-startup","webpack://LiteGUI/webpack/startup","webpack://LiteGUI/webpack/after-startup"],"sourcesContent":["/*! Pickr 1.9.1 MIT | https://github.com/Simonwep/pickr */\n!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.Pickr=e():t.Pickr=e()}(self,(()=>(()=>{\"use strict\";var t={d:(e,o)=>{for(var n in o)t.o(o,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:o[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})}},e={};t.d(e,{default:()=>E});var o={};function n(t,e,o,n,i={}){e instanceof HTMLCollection||e instanceof NodeList?e=Array.from(e):Array.isArray(e)||(e=[e]),Array.isArray(o)||(o=[o]);for(const s of e)for(const e of o)s[t](e,n,{capture:!1,...i});return Array.prototype.slice.call(arguments,1)}t.r(o),t.d(o,{adjustableInputNumbers:()=>p,createElementFromString:()=>r,createFromTemplate:()=>a,eventPath:()=>l,off:()=>s,on:()=>i,resolveElement:()=>c});const i=n.bind(null,\"addEventListener\"),s=n.bind(null,\"removeEventListener\");function r(t){const e=document.createElement(\"div\");return e.innerHTML=t.trim(),e.firstElementChild}function a(t){const e=(t,e)=>{const o=t.getAttribute(e);return t.removeAttribute(e),o},o=(t,n={})=>{const i=e(t,\":obj\"),s=e(t,\":ref\"),r=i?n[i]={}:n;s&&(n[s]=t);for(const n of Array.from(t.children)){const t=e(n,\":arr\"),i=o(n,t?{}:r);t&&(r[t]||(r[t]=[])).push(Object.keys(i).length?i:n)}return n};return o(r(t))}function l(t){let e=t.path||t.composedPath&&t.composedPath();if(e)return e;let o=t.target.parentElement;for(e=[t.target,o];o=o.parentElement;)e.push(o);return e.push(document,window),e}function c(t){return t instanceof Element?t:\"string\"==typeof t?t.split(/>>/g).reduce(((t,e,o,n)=>(t=t.querySelector(e),o<n.length-1?t.shadowRoot:t)),document):null}function p(t,e=(t=>t)){function o(o){const n=[.001,.01,.1][Number(o.shiftKey||2*o.ctrlKey)]*(o.deltaY<0?1:-1);let i=0,s=t.selectionStart;t.value=t.value.replace(/[\\d.]+/g,((t,o)=>o<=s&&o+t.length>=s?(s=o,e(Number(t),n,i)):(i++,t))),t.focus(),t.setSelectionRange(s,s),o.preventDefault(),t.dispatchEvent(new Event(\"input\"))}i(t,\"focus\",(()=>i(window,\"wheel\",o,{passive:!1}))),i(t,\"blur\",(()=>s(window,\"wheel\",o)))}const{min:u,max:h,floor:d,round:m}=Math;function f(t,e,o){e/=100,o/=100;const n=d(t=t/360*6),i=t-n,s=o*(1-e),r=o*(1-i*e),a=o*(1-(1-i)*e),l=n%6;return[255*[o,r,s,s,a,o][l],255*[a,o,o,r,s,s][l],255*[s,s,a,o,o,r][l]]}function v(t,e,o){const n=(2-(e/=100))*(o/=100)/2;return 0!==n&&(e=1===n?0:n<.5?e*o/(2*n):e*o/(2-2*n)),[t,100*e,100*n]}function b(t,e,o){const n=u(t/=255,e/=255,o/=255),i=h(t,e,o),s=i-n;let r,a;if(0===s)r=a=0;else{a=s/i;const n=((i-t)/6+s/2)/s,l=((i-e)/6+s/2)/s,c=((i-o)/6+s/2)/s;t===i?r=c-l:e===i?r=1/3+n-c:o===i&&(r=2/3+l-n),r<0?r+=1:r>1&&(r-=1)}return[360*r,100*a,100*i]}function y(t,e,o,n){e/=100,o/=100;return[...b(255*(1-u(1,(t/=100)*(1-(n/=100))+n)),255*(1-u(1,e*(1-n)+n)),255*(1-u(1,o*(1-n)+n)))]}function g(t,e,o){e/=100;const n=2*(e*=(o/=100)<.5?o:1-o)/(o+e)*100,i=100*(o+e);return[t,isNaN(n)?0:n,i]}function _(t){return b(...t.match(/.{2}/g).map((t=>parseInt(t,16))))}function w(t){t=t.match(/^[a-zA-Z]+$/)?function(t){if(\"black\"===t.toLowerCase())return\"#000\";const e=document.createElement(\"canvas\").getContext(\"2d\");return e.fillStyle=t,\"#000\"===e.fillStyle?null:e.fillStyle}(t):t;const e={cmyk:/^cmyk\\D+([\\d.]+)\\D+([\\d.]+)\\D+([\\d.]+)\\D+([\\d.]+)/i,rgba:/^rgba?\\D+([\\d.]+)(%?)\\D+([\\d.]+)(%?)\\D+([\\d.]+)(%?)\\D*?(([\\d.]+)(%?)|$)/i,hsla:/^hsla?\\D+([\\d.]+)\\D+([\\d.]+)\\D+([\\d.]+)\\D*?(([\\d.]+)(%?)|$)/i,hsva:/^hsva?\\D+([\\d.]+)\\D+([\\d.]+)\\D+([\\d.]+)\\D*?(([\\d.]+)(%?)|$)/i,hexa:/^#?(([\\dA-Fa-f]{3,4})|([\\dA-Fa-f]{6})|([\\dA-Fa-f]{8}))$/i},o=t=>t.map((t=>/^(|\\d+)\\.\\d+|\\d+$/.test(t)?Number(t):void 0));let n;t:for(const i in e)if(n=e[i].exec(t))switch(i){case\"cmyk\":{const[,t,e,s,r]=o(n);if(t>100||e>100||s>100||r>100)break t;return{values:y(t,e,s,r),type:i}}case\"rgba\":{let[,t,,e,,s,,,r]=o(n);if(t=\"%\"===n[2]?t/100*255:t,e=\"%\"===n[4]?e/100*255:e,s=\"%\"===n[6]?s/100*255:s,r=\"%\"===n[9]?r/100:r,t>255||e>255||s>255||r<0||r>1)break t;return{values:[...b(t,e,s),r],a:r,type:i}}case\"hexa\":{let[,t]=n;4!==t.length&&3!==t.length||(t=t.split(\"\").map((t=>t+t)).join(\"\"));const e=t.substring(0,6);let o=t.substring(6);return o=o?parseInt(o,16)/255:void 0,{values:[..._(e),o],a:o,type:i}}case\"hsla\":{let[,t,e,s,,r]=o(n);if(r=\"%\"===n[6]?r/100:r,t>360||e>100||s>100||r<0||r>1)break t;return{values:[...g(t,e,s),r],a:r,type:i}}case\"hsva\":{let[,t,e,s,,r]=o(n);if(r=\"%\"===n[6]?r/100:r,t>360||e>100||s>100||r<0||r>1)break t;return{values:[t,e,s,r],a:r,type:i}}}return{values:null,type:null}}function A(t=0,e=0,o=0,n=1){const i=(t,e)=>(o=-1)=>e(~o?t.map((t=>Number(t.toFixed(o)))):t),s={h:t,s:e,v:o,a:n,toHSVA(){const t=[s.h,s.s,s.v,s.a];return t.toString=i(t,(t=>`hsva(${t[0]}, ${t[1]}%, ${t[2]}%, ${s.a})`)),t},toHSLA(){const t=[...v(s.h,s.s,s.v),s.a];return t.toString=i(t,(t=>`hsla(${t[0]}, ${t[1]}%, ${t[2]}%, ${s.a})`)),t},toRGBA(){const t=[...f(s.h,s.s,s.v),s.a];return t.toString=i(t,(t=>`rgba(${t[0]}, ${t[1]}, ${t[2]}, ${s.a})`)),t},toCMYK(){const t=function(t,e,o){const n=f(t,e,o),i=n[0]/255,s=n[1]/255,r=n[2]/255,a=u(1-i,1-s,1-r);return[100*(1===a?0:(1-i-a)/(1-a)),100*(1===a?0:(1-s-a)/(1-a)),100*(1===a?0:(1-r-a)/(1-a)),100*a]}(s.h,s.s,s.v);return t.toString=i(t,(t=>`cmyk(${t[0]}%, ${t[1]}%, ${t[2]}%, ${t[3]}%)`)),t},toHEXA(){const t=function(t,e,o){return f(t,e,o).map((t=>m(t).toString(16).padStart(2,\"0\")))}(s.h,s.s,s.v),e=s.a>=1?\"\":Number((255*s.a).toFixed(0)).toString(16).toUpperCase().padStart(2,\"0\");return e&&t.push(e),t.toString=()=>`#${t.join(\"\").toUpperCase()}`,t},clone:()=>A(s.h,s.s,s.v,s.a)};return s}const $=t=>Math.max(Math.min(t,1),0);function C(t){const e={options:Object.assign({lock:null,onchange:()=>0,onstop:()=>0},t),_keyboard(t){const{options:o}=e,{type:n,key:i}=t;if(document.activeElement===o.wrapper){const{lock:o}=e.options,s=\"ArrowUp\"===i,r=\"ArrowRight\"===i,a=\"ArrowDown\"===i,l=\"ArrowLeft\"===i;if(\"keydown\"===n&&(s||r||a||l)){let n=0,i=0;\"v\"===o?n=s||r?1:-1:\"h\"===o?n=s||r?-1:1:(i=s?-1:a?1:0,n=l?-1:r?1:0),e.update($(e.cache.x+.01*n),$(e.cache.y+.01*i)),t.preventDefault()}else i.startsWith(\"Arrow\")&&(e.options.onstop(),t.preventDefault())}},_tapstart(t){i(document,[\"mouseup\",\"touchend\",\"touchcancel\"],e._tapstop),i(document,[\"mousemove\",\"touchmove\"],e._tapmove),t.cancelable&&t.preventDefault(),e._tapmove(t)},_tapmove(t){const{options:o,cache:n}=e,{lock:i,element:s,wrapper:r}=o,a=r.getBoundingClientRect();let l=0,c=0;if(t){const e=t&&t.touches&&t.touches[0];l=t?(e||t).clientX:0,c=t?(e||t).clientY:0,l<a.left?l=a.left:l>a.left+a.width&&(l=a.left+a.width),c<a.top?c=a.top:c>a.top+a.height&&(c=a.top+a.height),l-=a.left,c-=a.top}else n&&(l=n.x*a.width,c=n.y*a.height);\"h\"!==i&&(s.style.left=`calc(${l/a.width*100}% - ${s.offsetWidth/2}px)`),\"v\"!==i&&(s.style.top=`calc(${c/a.height*100}% - ${s.offsetHeight/2}px)`),e.cache={x:l/a.width,y:c/a.height};const p=$(l/a.width),u=$(c/a.height);switch(i){case\"v\":return o.onchange(p);case\"h\":return o.onchange(u);default:return o.onchange(p,u)}},_tapstop(){e.options.onstop(),s(document,[\"mouseup\",\"touchend\",\"touchcancel\"],e._tapstop),s(document,[\"mousemove\",\"touchmove\"],e._tapmove)},trigger(){e._tapmove()},update(t=0,o=0){const{left:n,top:i,width:s,height:r}=e.options.wrapper.getBoundingClientRect();\"h\"===e.options.lock&&(o=t),e._tapmove({clientX:n+s*t,clientY:i+r*o})},destroy(){const{options:t,_tapstart:o,_keyboard:n}=e;s(document,[\"keydown\",\"keyup\"],n),s([t.wrapper,t.element],\"mousedown\",o),s([t.wrapper,t.element],\"touchstart\",o,{passive:!1})}},{options:o,_tapstart:n,_keyboard:r}=e;return i([o.wrapper,o.element],\"mousedown\",n),i([o.wrapper,o.element],\"touchstart\",n,{passive:!1}),i(document,[\"keydown\",\"keyup\"],r),e}function k(t={}){t=Object.assign({onchange:()=>0,className:\"\",elements:[]},t);const e=i(t.elements,\"click\",(e=>{t.elements.forEach((o=>o.classList[e.target===o?\"add\":\"remove\"](t.className))),t.onchange(e),e.stopPropagation()}));return{destroy:()=>s(...e)}}const S={variantFlipOrder:{start:\"sme\",middle:\"mse\",end:\"ems\"},positionFlipOrder:{top:\"tbrl\",right:\"rltb\",bottom:\"btrl\",left:\"lrbt\"},position:\"bottom\",margin:8,padding:0},O=(t,e,o)=>{const n=\"object\"!=typeof t||t instanceof HTMLElement?{reference:t,popper:e,...o}:t;return{update(t=n){const{reference:e,popper:o}=Object.assign(n,t);if(!o||!e)throw new Error(\"Popper- or reference-element missing.\");return((t,e,o)=>{const{container:n,arrow:i,margin:s,padding:r,position:a,variantFlipOrder:l,positionFlipOrder:c}={container:document.documentElement.getBoundingClientRect(),...S,...o},{left:p,top:u}=e.style;e.style.left=\"0\",e.style.top=\"0\";const h=t.getBoundingClientRect(),d=e.getBoundingClientRect(),m={t:h.top-d.height-s,b:h.bottom+s,r:h.right+s,l:h.left-d.width-s},f={vs:h.left,vm:h.left+h.width/2-d.width/2,ve:h.left+h.width-d.width,hs:h.top,hm:h.bottom-h.height/2-d.height/2,he:h.bottom-d.height},[v,b=\"middle\"]=a.split(\"-\"),y=c[v],g=l[b],{top:_,left:w,bottom:A,right:$}=n;for(const t of y){const o=\"t\"===t||\"b\"===t;let n=m[t];const[s,a]=o?[\"top\",\"left\"]:[\"left\",\"top\"],[l,c]=o?[d.height,d.width]:[d.width,d.height],[p,u]=o?[A,$]:[$,A],[v,b]=o?[_,w]:[w,_];if(!(n<v||n+l+r>p))for(const p of g){let m=f[(o?\"v\":\"h\")+p];if(!(m<b||m+c+r>u)){if(m-=d[a],n-=d[s],e.style[a]=`${m}px`,e.style[s]=`${n}px`,i){const e=o?h.width/2:h.height/2,r=c/2,u=e>r,d=m+{s:u?r:e,m:r,e:u?r:c-e}[p],f=n+{t:l,b:0,r:0,l}[t];i.style[a]=`${d}px`,i.style[s]=`${f}px`}return t+p}}}return e.style.left=p,e.style.top=u,null})(e,o,n)}}};class E{static utils=o;static version=\"1.9.1\";static I18N_DEFAULTS={\"ui:dialog\":\"color picker dialog\",\"btn:toggle\":\"toggle color picker dialog\",\"btn:swatch\":\"color swatch\",\"btn:last-color\":\"use previous color\",\"btn:save\":\"Save\",\"btn:cancel\":\"Cancel\",\"btn:clear\":\"Clear\",\"aria:btn:save\":\"save and close\",\"aria:btn:cancel\":\"cancel and close\",\"aria:btn:clear\":\"clear and close\",\"aria:input\":\"color input field\",\"aria:palette\":\"color selection area\",\"aria:hue\":\"hue selection slider\",\"aria:opacity\":\"selection slider\"};static DEFAULT_OPTIONS={appClass:null,theme:\"classic\",useAsButton:!1,padding:8,disabled:!1,comparison:!0,closeOnScroll:!1,outputPrecision:0,lockOpacity:!1,autoReposition:!0,container:\"body\",components:{interaction:{}},i18n:{},swatches:null,inline:!1,sliders:null,default:\"#42445a\",defaultRepresentation:null,position:\"bottom-middle\",adjustableNumbers:!0,showAlways:!1,closeWithKey:\"Escape\"};_initializingActive=!0;_recalc=!0;_nanopop=null;_root=null;_color=A();_lastColor=A();_swatchColors=[];_setupAnimationFrame=null;_eventListener={init:[],save:[],hide:[],show:[],clear:[],change:[],changestop:[],cancel:[],swatchselect:[]};constructor(t){this.options=t=Object.assign({...E.DEFAULT_OPTIONS},t);const{swatches:e,components:o,theme:n,sliders:i,lockOpacity:s,padding:r}=t;[\"nano\",\"monolith\"].includes(n)&&!i&&(t.sliders=\"h\"),o.interaction||(o.interaction={});const{preview:a,opacity:l,hue:c,palette:p}=o;o.opacity=!s&&l,o.palette=p||a||l||c,this._preBuild(),this._buildComponents(),this._bindEvents(),this._finalBuild(),e&&e.length&&e.forEach((t=>this.addSwatch(t)));const{button:u,app:h}=this._root;this._nanopop=O(u,h,{margin:r}),u.setAttribute(\"role\",\"button\"),u.setAttribute(\"aria-label\",this._t(\"btn:toggle\"));const d=this;this._setupAnimationFrame=requestAnimationFrame((function e(){if(!h.offsetWidth)return requestAnimationFrame(e);d.setColor(t.default),d._rePositioningPicker(),t.defaultRepresentation&&(d._representation=t.defaultRepresentation,d.setColorRepresentation(d._representation)),t.showAlways&&d.show(),d._initializingActive=!1,d._emit(\"init\")}))}static create=t=>new E(t);_preBuild(){const{options:t}=this;for(const e of[\"el\",\"container\"])t[e]=c(t[e]);this._root=(t=>{const{components:e,useAsButton:o,inline:n,appClass:i,theme:s,lockOpacity:r}=t.options,l=t=>t?\"\":'style=\"display:none\" hidden',c=e=>t._t(e),p=a(`\\n <div :ref=\"root\" class=\"pickr\">\\n\\n ${o?\"\":'<button type=\"button\" :ref=\"button\" class=\"pcr-button\"></button>'}\\n\\n <div :ref=\"app\" class=\"pcr-app ${i||\"\"}\" data-theme=\"${s}\" ${n?'style=\"position: unset\"':\"\"} aria-label=\"${c(\"ui:dialog\")}\" role=\"window\">\\n <div class=\"pcr-selection\" ${l(e.palette)}>\\n <div :obj=\"preview\" class=\"pcr-color-preview\" ${l(e.preview)}>\\n <button type=\"button\" :ref=\"lastColor\" class=\"pcr-last-color\" aria-label=\"${c(\"btn:last-color\")}\"></button>\\n <div :ref=\"currentColor\" class=\"pcr-current-color\"></div>\\n </div>\\n\\n <div :obj=\"palette\" class=\"pcr-color-palette\">\\n <div :ref=\"picker\" class=\"pcr-picker\"></div>\\n <div :ref=\"palette\" class=\"pcr-palette\" tabindex=\"0\" aria-label=\"${c(\"aria:palette\")}\" role=\"listbox\"></div>\\n </div>\\n\\n <div :obj=\"hue\" class=\"pcr-color-chooser\" ${l(e.hue)}>\\n <div :ref=\"picker\" class=\"pcr-picker\"></div>\\n <div :ref=\"slider\" class=\"pcr-hue pcr-slider\" tabindex=\"0\" aria-label=\"${c(\"aria:hue\")}\" role=\"slider\"></div>\\n </div>\\n\\n <div :obj=\"opacity\" class=\"pcr-color-opacity\" ${l(e.opacity)}>\\n <div :ref=\"picker\" class=\"pcr-picker\"></div>\\n <div :ref=\"slider\" class=\"pcr-opacity pcr-slider\" tabindex=\"0\" aria-label=\"${c(\"aria:opacity\")}\" role=\"slider\"></div>\\n </div>\\n </div>\\n\\n <div class=\"pcr-swatches ${e.palette?\"\":\"pcr-last\"}\" :ref=\"swatches\"></div>\\n\\n <div :obj=\"interaction\" class=\"pcr-interaction\" ${l(Object.keys(e.interaction).length)}>\\n <input :ref=\"result\" class=\"pcr-result\" type=\"text\" spellcheck=\"false\" ${l(e.interaction.input)} aria-label=\"${c(\"aria:input\")}\">\\n\\n <input :arr=\"options\" class=\"pcr-type\" data-type=\"HEXA\" value=\"${r?\"HEX\":\"HEXA\"}\" type=\"button\" ${l(e.interaction.hex)}>\\n <input :arr=\"options\" class=\"pcr-type\" data-type=\"RGBA\" value=\"${r?\"RGB\":\"RGBA\"}\" type=\"button\" ${l(e.interaction.rgba)}>\\n <input :arr=\"options\" class=\"pcr-type\" data-type=\"HSLA\" value=\"${r?\"HSL\":\"HSLA\"}\" type=\"button\" ${l(e.interaction.hsla)}>\\n <input :arr=\"options\" class=\"pcr-type\" data-type=\"HSVA\" value=\"${r?\"HSV\":\"HSVA\"}\" type=\"button\" ${l(e.interaction.hsva)}>\\n <input :arr=\"options\" class=\"pcr-type\" data-type=\"CMYK\" value=\"CMYK\" type=\"button\" ${l(e.interaction.cmyk)}>\\n\\n <input :ref=\"save\" class=\"pcr-save\" value=\"${c(\"btn:save\")}\" type=\"button\" ${l(e.interaction.save)} aria-label=\"${c(\"aria:btn:save\")}\">\\n <input :ref=\"cancel\" class=\"pcr-cancel\" value=\"${c(\"btn:cancel\")}\" type=\"button\" ${l(e.interaction.cancel)} aria-label=\"${c(\"aria:btn:cancel\")}\">\\n <input :ref=\"clear\" class=\"pcr-clear\" value=\"${c(\"btn:clear\")}\" type=\"button\" ${l(e.interaction.clear)} aria-label=\"${c(\"aria:btn:clear\")}\">\\n </div>\\n </div>\\n </div>\\n `),u=p.interaction;return u.options.find((t=>!t.hidden&&!t.classList.add(\"active\"))),u.type=()=>u.options.find((t=>t.classList.contains(\"active\"))),p})(this),t.useAsButton&&(this._root.button=t.el),t.container.appendChild(this._root.root)}_finalBuild(){const t=this.options,e=this._root;if(t.container.removeChild(e.root),t.inline){const o=t.el.parentElement;t.el.nextSibling?o.insertBefore(e.app,t.el.nextSibling):o.appendChild(e.app)}else t.container.appendChild(e.app);t.useAsButton?t.inline&&t.el.remove():t.el.parentNode.replaceChild(e.root,t.el),t.disabled&&this.disable(),t.comparison||(e.button.style.transition=\"none\",t.useAsButton||(e.preview.lastColor.style.transition=\"none\")),this.hide()}_buildComponents(){const t=this,e=this.options.components,o=(t.options.sliders||\"v\").repeat(2),[n,i]=o.match(/^[vh]+$/g)?o:[],s=()=>this._color||(this._color=this._lastColor.clone()),r={palette:C({element:t._root.palette.picker,wrapper:t._root.palette.palette,onstop:()=>t._emit(\"changestop\",\"slider\",t),onchange(o,n){if(!e.palette)return;const i=s(),{_root:r,options:a}=t,{lastColor:l,currentColor:c}=r.preview;t._recalc&&(i.s=100*o,i.v=100-100*n,i.v<0&&(i.v=0),t._updateOutput(\"slider\"));const p=i.toRGBA().toString(0);this.element.style.background=p,this.wrapper.style.background=`\\n linear-gradient(to top, rgba(0, 0, 0, ${i.a}), transparent),\\n linear-gradient(to left, hsla(${i.h}, 100%, 50%, ${i.a}), rgba(255, 255, 255, ${i.a}))\\n `,a.comparison?a.useAsButton||t._lastColor||l.style.setProperty(\"--pcr-color\",p):(r.button.style.setProperty(\"--pcr-color\",p),r.button.classList.remove(\"clear\"));const u=i.toHEXA().toString();for(const{el:e,color:o}of t._swatchColors)e.classList[u===o.toHEXA().toString()?\"add\":\"remove\"](\"pcr-active\");c.style.setProperty(\"--pcr-color\",p)}}),hue:C({lock:\"v\"===i?\"h\":\"v\",element:t._root.hue.picker,wrapper:t._root.hue.slider,onstop:()=>t._emit(\"changestop\",\"slider\",t),onchange(o){if(!e.hue||!e.palette)return;const n=s();t._recalc&&(n.h=360*o),this.element.style.backgroundColor=`hsl(${n.h}, 100%, 50%)`,r.palette.trigger()}}),opacity:C({lock:\"v\"===n?\"h\":\"v\",element:t._root.opacity.picker,wrapper:t._root.opacity.slider,onstop:()=>t._emit(\"changestop\",\"slider\",t),onchange(o){if(!e.opacity||!e.palette)return;const n=s();t._recalc&&(n.a=Math.round(100*o)/100),this.element.style.background=`rgba(0, 0, 0, ${n.a})`,r.palette.trigger()}}),selectable:k({elements:t._root.interaction.options,className:\"active\",onchange(e){t._representation=e.target.getAttribute(\"data-type\").toUpperCase(),t._recalc&&t._updateOutput(\"swatch\")}})};this._components=r}_bindEvents(){const{_root:t,options:e}=this,o=[i(t.interaction.clear,\"click\",(()=>this._clearColor())),i([t.interaction.cancel,t.preview.lastColor],\"click\",(()=>{this.setHSVA(...(this._lastColor||this._color).toHSVA(),!0),this._emit(\"cancel\")})),i(t.interaction.save,\"click\",(()=>{!this.applyColor()&&!e.showAlways&&this.hide()})),i(t.interaction.result,[\"keyup\",\"input\"],(t=>{this.setColor(t.target.value,!0)&&!this._initializingActive&&(this._emit(\"change\",this._color,\"input\",this),this._emit(\"changestop\",\"input\",this)),t.stopImmediatePropagation()})),i(t.interaction.result,[\"focus\",\"blur\"],(t=>{this._recalc=\"blur\"===t.type,this._recalc&&this._updateOutput(null)})),i([t.palette.palette,t.palette.picker,t.hue.slider,t.hue.picker,t.opacity.slider,t.opacity.picker],[\"mousedown\",\"touchstart\"],(()=>this._recalc=!0),{passive:!0})];if(!e.showAlways){const n=e.closeWithKey;o.push(i(t.button,\"click\",(()=>this.isOpen()?this.hide():this.show())),i(document,\"keyup\",(t=>this.isOpen()&&(t.key===n||t.code===n)&&this.hide())),i(document,[\"touchstart\",\"mousedown\"],(e=>{this.isOpen()&&!l(e).some((e=>e===t.app||e===t.button))&&this.hide()}),{capture:!0}))}if(e.adjustableNumbers){const e={rgba:[255,255,255,1],hsva:[360,100,100,1],hsla:[360,100,100,1],cmyk:[100,100,100,100]};p(t.interaction.result,((t,o,n)=>{const i=e[this.getColorRepresentation().toLowerCase()];if(i){const e=i[n],s=t+(e>=100?1e3*o:o);return s<=0?0:Number((s<e?s:e).toPrecision(3))}return t}))}if(e.autoReposition&&!e.inline){let t=null;const n=this;o.push(i(window,[\"scroll\",\"resize\"],(()=>{n.isOpen()&&(e.closeOnScroll&&n.hide(),null===t?(t=setTimeout((()=>t=null),100),requestAnimationFrame((function e(){n._rePositioningPicker(),null!==t&&requestAnimationFrame(e)}))):(clearTimeout(t),t=setTimeout((()=>t=null),100)))}),{capture:!0}))}this._eventBindings=o}_rePositioningPicker(){const{options:t}=this;if(!t.inline){if(!this._nanopop.update({container:document.body.getBoundingClientRect(),position:t.position})){const t=this._root.app,e=t.getBoundingClientRect();t.style.top=(window.innerHeight-e.height)/2+\"px\",t.style.left=(window.innerWidth-e.width)/2+\"px\"}}}_updateOutput(t){const{_root:e,_color:o,options:n}=this;if(e.interaction.type()){const t=`to${e.interaction.type().getAttribute(\"data-type\")}`;e.interaction.result.value=\"function\"==typeof o[t]?o[t]().toString(n.outputPrecision):\"\"}!this._initializingActive&&this._recalc&&this._emit(\"change\",o,t,this)}_clearColor(t=!1){const{_root:e,options:o}=this;o.useAsButton||e.button.style.setProperty(\"--pcr-color\",\"rgba(0, 0, 0, 0.15)\"),e.button.classList.add(\"clear\"),o.showAlways||this.hide(),this._lastColor=null,this._initializingActive||t||(this._emit(\"save\",null),this._emit(\"clear\"))}_parseLocalColor(t){const{values:e,type:o,a:n}=w(t),{lockOpacity:i}=this.options,s=void 0!==n&&1!==n;return e&&3===e.length&&(e[3]=void 0),{values:!e||i&&s?null:e,type:o}}_t(t){return this.options.i18n[t]||E.I18N_DEFAULTS[t]}_emit(t,...e){this._eventListener[t].forEach((t=>t(...e,this)))}on(t,e){return this._eventListener[t].push(e),this}off(t,e){const o=this._eventListener[t]||[],n=o.indexOf(e);return~n&&o.splice(n,1),this}addSwatch(t){const{values:e}=this._parseLocalColor(t);if(e){const{_swatchColors:t,_root:o}=this,n=A(...e),s=r(`<button type=\"button\" style=\"--pcr-color: ${n.toRGBA().toString(0)}\" aria-label=\"${this._t(\"btn:swatch\")}\"/>`);return o.swatches.appendChild(s),t.push({el:s,color:n}),this._eventBindings.push(i(s,\"click\",(()=>{this.setHSVA(...n.toHSVA(),!0),this._emit(\"swatchselect\",n),this._emit(\"change\",n,\"swatch\",this)}))),!0}return!1}removeSwatch(t){const e=this._swatchColors[t];if(e){const{el:o}=e;return this._root.swatches.removeChild(o),this._swatchColors.splice(t,1),!0}return!1}applyColor(t=!1){const{preview:e,button:o}=this._root,n=this._color.toRGBA().toString(0);return e.lastColor.style.setProperty(\"--pcr-color\",n),this.options.useAsButton||o.style.setProperty(\"--pcr-color\",n),o.classList.remove(\"clear\"),this._lastColor=this._color.clone(),this._initializingActive||t||this._emit(\"save\",this._color),this}destroy(){cancelAnimationFrame(this._setupAnimationFrame),this._eventBindings.forEach((t=>s(...t))),Object.keys(this._components).forEach((t=>this._components[t].destroy()))}destroyAndRemove(){this.destroy();const{root:t,app:e}=this._root;t.parentElement&&t.parentElement.removeChild(t),e.parentElement.removeChild(e),Object.keys(this).forEach((t=>this[t]=null))}hide(){return!!this.isOpen()&&(this._root.app.classList.remove(\"visible\"),this._emit(\"hide\"),!0)}show(){return!this.options.disabled&&!this.isOpen()&&(this._root.app.classList.add(\"visible\"),this._rePositioningPicker(),this._emit(\"show\",this._color),this)}isOpen(){return this._root.app.classList.contains(\"visible\")}setHSVA(t=360,e=0,o=0,n=1,i=!1){const s=this._recalc;if(this._recalc=!1,t<0||t>360||e<0||e>100||o<0||o>100||n<0||n>1)return!1;this._color=A(t,e,o,n);const{hue:r,opacity:a,palette:l}=this._components;return r.update(t/360),a.update(n),l.update(e/100,1-o/100),i||this.applyColor(),s&&this._updateOutput(),this._recalc=s,!0}setColor(t,e=!1){if(null===t)return this._clearColor(e),!0;const{values:o,type:n}=this._parseLocalColor(t);if(o){const t=n.toUpperCase(),{options:i}=this._root.interaction,s=i.find((e=>e.getAttribute(\"data-type\")===t));if(s&&!s.hidden)for(const t of i)t.classList[t===s?\"add\":\"remove\"](\"active\");return!!this.setHSVA(...o,e)&&this.setColorRepresentation(t)}return!1}setColorRepresentation(t){return t=t.toUpperCase(),!!this._root.interaction.options.find((e=>e.getAttribute(\"data-type\").startsWith(t)&&!e.click()))}getColorRepresentation(){return this._representation}getColor(){return this._color}getSelectedColor(){return this._lastColor}getRoot(){return this._root}disable(){return this.hide(),this.options.disabled=!0,this._root.button.classList.add(\"disabled\"),this}enable(){return this.options.disabled=!1,this._root.button.classList.remove(\"disabled\"),this}}return e=e.default})()));\n//# sourceMappingURL=pickr.min.js.map","import { LiteGUIObject } from \"./@types/globals\";\nimport { LiteGUI } from \"./core\";\nimport { Trigger } from \"./utilities\";\n\n/**\n * Configuration options for the Area component.\n */\nexport interface AreaOptions\n{\n /**\n * Minimum size for the split sections.\n * @default 10\n */\n minSplitSize?: number;\n /**\n * If true, the resize event will be fired while dragging the splitter.\n */\n immediateResize?: boolean;\n /**\n * Unique identifier for the area's root element.\n */\n id?: string,\n /**\n * CSS class name to add to the root element.\n */\n className?: string,\n /**\n * Width of the area. Can be a number (pixels) or string (CSS value).\n * @default \"100%\"\n */\n width?: number | string,\n /**\n * Height of the area. Can be a number (pixels) or string (CSS value).\n * @default \"100%\"\n */\n height?: number | string,\n /**\n * ID to assign to the content element of the area.\n */\n contentId?: string,\n /**\n * If true, the area will listen to the global LiteGUI 'resized' event.\n */\n autoresize?: boolean,\n /**\n * Indicates if this is the main area.\n */\n main?: boolean\n /**\n * Callback fired on resize.\n */\n onResize?: () => void;\n}\n\n/**\n * Interface extending HTMLDivElement to include a reference to the Area instance.\n */\nexport interface AreaElement extends HTMLDivElement\n{\n /**\n * Reference to the Area instance associated with this element.\n */\n litearea?: Area,\n}\n\n/**\n * An Area is an stretched container.\n * Areas can be split several times horizontally or vertically to fit different columns or rows\n *\n * @class Area\n * @param {AreaOptions} [options] Configuration options.\n * @example\n * ```typescript\n * const mainArea = new LiteGUI.Area({ id: \"main\", contentId: \"canvasarea\", height: \"100%\" });\n * mainArea.split(\"vertical\", [\"50%\", null], true);\n * ```\n */\nexport class Area implements LiteGUIObject\n{\n\t/**\n\t * The root HTML element of the area.\n\t */\n\troot: AreaElement;\n\t/**\n\t * Configuration options.\n\t */\n\toptions: AreaOptions;\n\t/**\n\t * The content element of the area.\n\t */\n\tcontent: HTMLDivElement;\n\t/**\n\t * Direction of the split (\"vertical\", \"horizontal\" or \"none\").\n\t */\n\tsplitDirection: string;\n\t/**\n\t * Sub-sections of this area if split.\n\t */\n\tsections: Area[];\n\t/**\n\t * Current direction.\n\t */\n\tdirection?: string;\n\t/**\n\t * Split bar element if split.\n\t */\n\tsplitbar?: HTMLDivElement;\n\t/**\n\t * Reference to the dynamic section (the one that resizes).\n\t */\n\tdynamicSection?: Area;\n\t/**\n\t * Size of the area.\n\t */\n\tsize?: number | string | null;\n\t/**\n\t * @private Computed size.\n\t */\n\tprivate _computedSize: number[];\n\n\t/**\n\t * Vertical constant.\n\t */\n\tpublic static VERTICAL: \"vertical\" = \"vertical\" as const;\n\t/**\n\t * Horizontal constant.\n\t */\n\tpublic static HORIZONTAL: \"horizontal\" = \"horizontal\" as const;\n\t/**\n\t * Default size of the splitbar.\n\t */\n\tpublic static splitbarSize = 4;\n\n\t/**\n\t * Creates an instance of the Area class.\n\t * @param {AreaOptions} [options] Configuration options.\n\t */\n\tconstructor(options: AreaOptions = {})\n\t{\n\t\t/* The root element containing all sections */\n\t\tconst root = document.createElement(\"div\") as AreaElement;\n\t\troot.className = \"litearea\";\n\t\tif (options?.id) { root.id = options.id; }\n\t\tif (options?.className) { root.className += ` ${options.className}`; }\n\n\t\tthis.root = root;\n\t\tthis.root.litearea = this;\n\n\t\tlet width = options?.width || \"100%\";\n\t\tlet height = options?.height || \"100%\";\n\n\t\tif (typeof (width) == 'number' && width < 0)\n\t\t{\n\t\t\twidth = `calc( 100% - ${Math.abs(width)}px)`;\n\t\t}\n\t\tif (typeof (height) == 'number' && height < 0)\n\t\t{\n\t\t\theight = `calc( 100% - ${Math.abs(height)}px)`;\n\t\t}\n\n\t\troot.style.width = typeof width === 'number' ? `${width}px` : width;\n\t\troot.style.height = typeof height === 'number' ? `${height}px` : height;\n\n\t\tthis.options = options;\n\n\t\tthis._computedSize = [this.root.offsetWidth, this.root.offsetHeight];\n\n\t\tconst content = document.createElement(\"div\");\n\t\tif (options?.contentId) { content.id = options.contentId; }\n\t\tcontent.className = \"liteareacontent\";\n\t\tcontent.style.width = \"100%\";\n\t\tcontent.style.height = \"100%\";\n\t\tthis.root.appendChild(content);\n\t\tthis.content = content;\n\n\t\tthis.splitDirection = \"none\";\n\t\tthis.sections = [];\n\n\t\tif (options?.autoresize)\n\t\t{\n\t\t\tLiteGUI.bind(LiteGUI, \"resized\", () =>\n\t\t\t{\n\t\t\t\tthis.onResize();\n\t\t\t});\n\t\t}\n\t}\n\t/**\n\t * Get section by index.\n\t * @param {number} num Index of the section (0 or 1).\n\t * @returns {Area | null} The section area or null if not found.\n\t */\n\tgetSection(num: number)\n\t{\n\t\tnum = num ?? 0;\n\t\tif (this.sections.length > num)\n\t\t{\n\t\t\treturn this.sections[num];\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t * Callback fired when the area is resized.\n\t * @param {PointerEvent | MouseEvent} [event] Event object.\n\t */\n\tonResize(event?: PointerEvent | MouseEvent)\n\t{\n\t\tconst computedSize = [this.root.offsetWidth, this.root.offsetHeight];\n\t\tif (event && this._computedSize && computedSize[0] ==\n this._computedSize[0] && computedSize[1] == this._computedSize[1])\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.sendResizeEvent(event);\n\t}\n\n\t/**\n\t * Sends the resize event to all the sections.\n\t * @param {PointerEvent | MouseEvent} [e] Event object.\n\t */\n\tsendResizeEvent(e?: PointerEvent | MouseEvent)\n\t{\n\t\tif (this.sections.length)\n\t\t{\n\t\t\tfor (const i in this.sections)\n\t\t\t{\n\t\t\t\tconst section = this.sections[i];\n\t\t\t\tsection.onResize(e);\n\t\t\t}\n\t\t}\n\t\telse // Send it to the children\n\t\t{\n\t\t\tfor (let j = 0; j < this.root.childNodes.length; j++)\n\t\t\t{\n\t\t\t\tconst element = this.root.childNodes[j] as AreaElement;\n\t\t\t\tif (element.litearea)\n\t\t\t\t{\n\t\t\t\t\telement.litearea.onResize();\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tLiteGUI.trigger(element, \"resize\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tLiteGUI.sizeToCSS();\n\t\t// Inner callback\n\t\tif (this.options.onResize) { this.options.onResize(); }\n\t}\n\n\t/**\n\t * Gets the width of the root element.\n\t * @type {number}\n\t */\n\tpublic get getWidth(): number | null | string\n\t{\n\t\treturn this.root.offsetWidth;\n\t}\n\n\t/**\n\t * Gets the height of the root element.\n\t * @type {number}\n\t */\n\tpublic get getHeight(): number | null | string\n\t{\n\t\treturn this.root.offsetHeight;\n\t}\n\n\t/**\n\t * Checks if the area is visible.\n\t * @type {boolean}\n\t */\n\tpublic get isVisible(): boolean\n\t{\n\t\treturn this.root.style.display != \"none\";\n\t}\n\n\t/**\n\t * Adjusts the height of the area to fill the remaining space in the parent.\n\t */\n\tadjustHeight()\n\t{\n\t\tif (!this.root.parentNode)\n\t\t{\n\t\t\tconsole.error(\"Cannot adjust height of LiteGUI.Area without parent\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst parentHeight = (this.root.parentNode as AreaElement).offsetHeight;\n\n\t\t// Check position\n\t\tconst y = this.root.getClientRects()[0].top + parentHeight;\n\n\t\t// Adjust height\n\t\tthis.root.style.height = \"calc( 100% - \" + y + \"px )\";\n\t}\n\n\t/**\n\t * Splits the area into two sections.\n\t * @param {\"vertical\" | \"horizontal\"} direction Direction of the split.\n\t * @param {(string | null | number)[]} sizes Array containing the sizes. One must be null to be dynamic.\n\t * @param {boolean} editable If true, a draggable bar is created.\n\t */\n\tsplit(direction: \"vertical\" | \"horizontal\", sizes?: (string | null | number)[], editable?: boolean)\n\t{\n\t\tif (typeof direction !== 'string')\n\t\t{\n\t\t\tthrow (\"First parameter must be a string: 'vertical' or 'horizontal'\");\n\t\t}\n\n\t\tif (direction != \"vertical\" && direction != \"horizontal\")\n\t\t{\n\t\t\tthrow (\"First parameter must be a string: 'vertical' or 'horizontal'\");\n\t\t}\n\n\t\tsizes = sizes ?? [\"50%\", null];\n\n\t\tif (this.sections.length) { throw \"cannot split twice\"; }\n\n\t\t// Create areas\n\t\tconst area1 = new Area({ contentId: this.content.id } as AreaOptions);\n\t\tarea1.root.style.display = \"inline-block\";\n\t\tconst area2 = new Area();\n\t\tarea2.root.style.display = \"inline-block\";\n\n\t\tlet splitinfo = \"\";\n\t\tlet splitbar: HTMLDivElement | undefined;\n\t\tlet dynamicSection: Area | undefined;\n\t\tconst _onMouseDown = (e: MouseEvent) =>\n\t\t{\n\t\t\tconst doc = this.root.ownerDocument;\n\t\t\tdoc.addEventListener(\"mousemove\", _onMouseMove);\n\t\t\tdoc.addEventListener(\"mouseup\", _onMouseUp);\n\t\t\tlastPos[0] = e.pageX;\n\t\t\tlastPos[1] = e.pageY;\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t};\n\t\tif (editable)\n\t\t{\n\t\t\tsplitinfo = ` - ${(Area.splitbarSize + 2)}px`;\n\t\t\tsplitbar = document.createElement(\"div\");\n\t\t\tsplitbar.className = `litesplitbar ${direction}`;\n\t\t\tif (direction == \"vertical\")\n\t\t\t{\n\t\t\t\tsplitbar.style.height = `${Area.splitbarSize}px`;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tsplitbar.style.width = `${Area.splitbarSize}px`;\n\t\t\t}\n\t\t\tthis.splitbar = splitbar;\n\t\t\tsplitbar.addEventListener(\"mousedown\", _onMouseDown);\n\t\t}\n\n\t\tif (direction == \"vertical\")\n\t\t{\n\t\t\tarea1.root.style.width = \"100%\";\n\t\t\tarea2.root.style.width = \"100%\";\n\n\t\t\tif (sizes[0] == null)\n\t\t\t{\n\t\t\t\tlet h = sizes[1];\n\t\t\t\tif (typeof (h) == \"number\")\n\t\t\t\t{\n\t\t\t\t\th = `${sizes[1]}px`;\n\t\t\t\t}\n\n\t\t\t\tarea1.root.style.height = `calc( 100% - ${h + splitinfo} )`;\n\t\t\t\tarea2.root.style.height = h!;\n\t\t\t\tarea2.size = h;\n\t\t\t\tdynamicSection = area1;\n\t\t\t}\n\t\t\telse if (sizes[1] == null)\n\t\t\t{\n\t\t\t\tlet h = sizes[0];\n\t\t\t\tif (typeof (h) == \"number\")\n\t\t\t\t{\n\t\t\t\t\th = `${sizes[0]}px`;\n\t\t\t\t}\n\n\t\t\t\tarea1.root.style.height = h;\n\t\t\t\tarea1.size = h;\n\t\t\t\tarea2.root.style.height = `calc( 100% - ${h + splitinfo} )`;\n\t\t\t\tdynamicSection = area2;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tlet h1 = sizes[0];\n\t\t\t\tif (typeof (h1) == \"number\")\n\t\t\t\t{\n\t\t\t\t\th1 = `${sizes[0]}px`;\n\t\t\t\t}\n\t\t\t\tlet h2 = sizes[1];\n\t\t\t\tif (typeof (h2) == \"number\")\n\t\t\t\t{\n\t\t\t\t\th2 = `${sizes[1]}px`;\n\t\t\t\t}\n\t\t\t\tarea1.root.style.height = h1;\n\t\t\t\tarea1.size = h1;\n\t\t\t\tarea2.root.style.height = h2;\n\t\t\t\tarea2.size = h2;\n\t\t\t}\n\t\t}\n\t\telse // Horizontal\n\t\t{\n\t\t\tarea1.root.style.height = \"100%\";\n\t\t\tarea2.root.style.height = \"100%\";\n\n\t\t\tif (sizes[0] == null)\n\t\t\t{\n\t\t\t\tlet w = sizes[1];\n\t\t\t\tif (typeof (w) == \"number\")\n\t\t\t\t{\n\t\t\t\t\tw = `${sizes[1]}px`;\n\t\t\t\t}\n\t\t\t\tarea1.root.style.width = `calc( 100% - ${w + splitinfo} )`;\n\t\t\t\tarea2.root.style.width = w!;\n\t\t\t\tarea2.size = sizes[1];\n\t\t\t\tdynamicSection = area1;\n\t\t\t}\n\t\t\telse if (sizes[1] == null)\n\t\t\t{\n\t\t\t\tlet w = sizes[0];\n\t\t\t\tif (typeof (w) == \"number\")\n\t\t\t\t{\n\t\t\t\t\tw = `${sizes[0]}px`;\n\t\t\t\t}\n\n\t\t\t\tarea1.root.style.width = w;\n\t\t\t\tarea1.size = w;\n\t\t\t\tarea2.root.style.width = `calc( 100% - ${w + splitinfo} )`;\n\t\t\t\tdynamicSection = area2;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tlet w1 = sizes[0];\n\t\t\t\tif (typeof (w1) == \"number\")\n\t\t\t\t{\n\t\t\t\t\tw1 = `${sizes[0]}px`;\n\t\t\t\t}\n\t\t\t\tlet w2 = sizes[1];\n\t\t\t\tif (typeof (w2) == \"number\")\n\t\t\t\t{\n\t\t\t\t\tw2 = `${sizes[1]}px`;\n\t\t\t\t}\n\n\t\t\t\tarea1.root.style.width = w1;\n\t\t\t\tarea1.size = w1;\n\t\t\t\tarea2.root.style.width = w2;\n\t\t\t\tarea2.size = w2;\n\t\t\t}\n\t\t}\n\n\t\tarea1.root.removeChild(area1.content);\n\t\tarea1.root.appendChild(this.content);\n\t\tarea1.content = this.content;\n\n\t\tthis.root.appendChild(area1.root);\n\t\tif (splitbar) { this.root.appendChild(splitbar); }\n\t\tthis.root.appendChild(area2.root);\n\n\t\tthis.sections = [area1, area2];\n\t\tthis.dynamicSection = dynamicSection;\n\t\tthis.direction = direction;\n\n\t\t// SPLITTER DRAGGER INTERACTION\n\t\tconst lastPos = [0, 0];\n\n\t\tconst _onMouseMove = (e: MouseEvent) =>\n\t\t{\n\t\t\tif (direction == \"horizontal\")\n\t\t\t{\n\t\t\t\tif (lastPos[0] != e.pageX)\n\t\t\t\t{\n\t\t\t\t\tthis.moveSplit(lastPos[0] - e.pageX);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (direction == \"vertical\")\n\t\t\t{\n\t\t\t\tif (lastPos[1] != e.pageY)\n\t\t\t\t{\n\t\t\t\t\tthis.moveSplit(e.pageY - lastPos[1]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlastPos[0] = e.pageX;\n\t\t\tlastPos[1] = e.pageY;\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t};\n\n\t\tconst _onMouseUp = (e: MouseEvent) =>\n\t\t{\n\t\t\tconst doc = this.root.ownerDocument;\n\t\t\tdoc.removeEventListener(\"mousemove\", _onMouseMove);\n\t\t\tdoc.removeEventListener(\"mouseup\", _onMouseUp);\n\t\t\tthis.onResize(e);\n\t\t};\n\t}\n\n\t/**\n\t * Hides the area.\n\t */\n\thide()\n\t{\n\t\tthis.root.style.display = \"none\";\n\t}\n\n\t/**\n\t * Shows the area.\n\t */\n\tshow()\n\t{\n\t\tthis.root.style.display = \"block\";\n\t}\n\n\t/**\n\t * Shows a specific section.\n\t * @param {number} num Index of the section (0 or 1).\n\t */\n\tshowSection(num: number)\n\t{\n\t\tlet section = this.sections[num];\n\t\tlet size: string | number = 0;\n\n\t\tif (section && section.root.style.display != \"none\") { return; } // Already visible\n\n\t\tif (this.direction == \"horizontal\")\n\t\t{\n\t\t\tsize = section.root.style.width;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tsize = section.root.style.height;\n\t\t}\n\n\t\tif (size.indexOf(\"calc\") != -1) { size = \"50%\"; }\n\n\t\tfor (const i in this.sections)\n\t\t{\n\t\t\tsection = this.sections[i];\n\n\t\t\tif (i == num.toString())\n\t\t\t{\n\t\t\t\tsection.root.style.display = \"inline-block\";\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (this.direction == \"horizontal\")\n\t\t\t\t{\n\t\t\t\t\tsection.root.style.width = `calc( 100% - ${size} - 5px)`;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tsection.root.style.height = `calc( 100% - ${size} - 5px)`;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this.splitbar) { this.splitbar.style.display = \"inline-block\"; }\n\n\t\tthis.sendResizeEvent();\n\t}\n\n\t/**\n\t * Hides a specific section.\n\t * @param {number} num Index of the section (0 or 1).\n\t */\n\thideSection(num: number)\n\t{\n\t\tfor (const i in this.sections)\n\t\t{\n\t\t\tconst section = this.sections[i];\n\n\t\t\tif (i == num.toString())\n\t\t\t{\n\t\t\t\tsection.root.style.display = \"none\";\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (this.direction == \"horizontal\")\n\t\t\t\t{\n\t\t\t\t\tsection.root.style.width = \"100%\";\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tsection.root.style.height = \"100%\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this.splitbar) { this.splitbar.style.display = \"none\"; }\n\n\t\tthis.sendResizeEvent();\n\t}\n\n\t/**\n\t * Moves the split bar by a certain delta.\n\t * @param {number} delta Amount to move in pixels.\n\t */\n\tmoveSplit(delta: number)\n\t{\n\t\tif (!this.sections) { return; }\n\n\t\tconst area1 = this.sections[0];\n\t\tconst area2 = this.sections[1];\n\t\tconst splitinfo = ` - ${Area.splitbarSize}px`;\n\n\t\tconst minSize = this.options?.minSplitSize ?? 10;\n\n\t\tif (this.direction == \"horizontal\")\n\t\t{\n\n\t\t\tif (this.dynamicSection == area1)\n\t\t\t{\n\t\t\t\tlet size = (area2.root.offsetWidth + delta);\n\t\t\t\tif (size < minSize)\n\t\t\t\t{\n\t\t\t\t\tsize = minSize;\n\t\t\t\t}\n\t\t\t\tarea1.root.style.width = `calc( 100% - ${size}px ${splitinfo} )`;\n\t\t\t\tarea2.root.style.width = `${size}px`; // Other split\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tlet size = (area1.root.offsetWidth - delta);\n\t\t\t\tif (size < minSize)\n\t\t\t\t{\n\t\t\t\t\tsize = minSize;\n\t\t\t\t}\n\t\t\t\tarea2.root.style.width = `calc( 100% - ${size}px ${splitinfo} )`;\n\t\t\t\tarea1.root.style.width = `${size}px`; // Other split\n\t\t\t}\n\t\t}\n\t\telse if (this.direction == \"vertical\")\n\t\t{\n\t\t\tif (this.dynamicSection == area1)\n\t\t\t{\n\t\t\t\tlet size = (area2.root.offsetHeight - delta);\n\t\t\t\tif (size < minSize)\n\t\t\t\t{\n\t\t\t\t\tsize = minSize;\n\t\t\t\t}\n\t\t\t\tarea1.root.style.height = `calc( 100% - ${size}px ${splitinfo} )`;\n\t\t\t\tarea2.root.style.height = `${size}px`; // Other split\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tlet size = (area1.root.offsetHeight + delta);\n\t\t\t\tif (size < minSize)\n\t\t\t\t{\n\t\t\t\t\tsize = minSize;\n\t\t\t\t}\n\t\t\t\tarea2.root.style.height = `calc( 100% - ${size}px ${splitinfo} )`;\n\t\t\t\tarea1.root.style.height = `${size}px`; // Other split\n\t\t\t}\n\t\t}\n\n\t\tTrigger(this.root, \"split_moved\");\n\t\t// Trigger split_moved event in all areas inside this area\n\t\tconst areas = this.root.querySelectorAll(\".litearea\");\n\t\tfor (let i = 0; i < areas.length; ++i)\n\t\t{\n\t\t\tTrigger(areas[i], \"split_moved\");\n\t\t}\n\t}\n\n\t/**\n\t * Adds an event listener to the root element.\n\t * @param {string} a Event name.\n\t * @param {(e: Event) => void} b Callback function.\n\t * @param {boolean | AddEventListenerOptions} [c] Options.\n\t */\n\taddEventListener(a: string, b: (e: Event) => void, c?: boolean | AddEventListenerOptions)\n\t{\n\t\treturn this.root.addEventListener(a, b, c);\n\t}\n\n\t/**\n\t * Sets the size of a specific section area.\n\t * @param {Area} area The area instance to resize.\n\t * @param {number} size New size in pixels.\n\t */\n\tsetAreaSize(area: Area, size: number)\n\t{\n\t\tconst splitinfo = `${size + Area.splitbarSize}px`;\n\t\tarea.root.style.width = `calc( 100% - ${splitinfo} )`;\n\t}\n\n\t/**\n\t * Merges the split sections back into one.\n\t * @param {number} [mainSection=0] Index of the section to keep as main content.\n\t */\n\tmerge(mainSection?: number)\n\t{\n\t\tif (this.sections.length == 0) { throw \"not splitted\"; }\n\n\t\tconst main = this.sections[mainSection || 0];\n\n\t\tthis.root.appendChild(main.content);\n\t\tthis.content = main.content;\n\n\t\tthis.root.removeChild(this.sections[0].root);\n\t\tthis.root.removeChild(this.sections[1].root);\n\n\t\tthis.sections = [];\n\t\tthis._computedSize = [];\n\t\tthis.onResize();\n\t}\n\n\t/**\n\t * Adds content to the area.\n\t * @param {LiteGUIObject | HTMLElement | string} value Content to add (Element, LiteGUIObject with root, or HTML string).\n\t */\n\tadd(value: LiteGUIObject | HTMLElement | string)\n\t{\n\t\tif (typeof (value) == \"string\")\n\t\t{\n\t\t\tconst element = document.createElement(\"div\");\n\t\t\telement.innerHTML = value;\n\t\t\tvalue = element;\n\t\t}\n\n\t\tthis.content.appendChild(\"root\" in value ? value.root : value);\n\t}\n\n\t/**\n\t * Queries for an element inside the area's root.\n\t * @param {string} value CSS selector.\n\t * @returns {Element | null} The found element.\n\t */\n\tquery(value: string)\n\t{\n\t\treturn this.root.querySelector(value);\n\t}\n}\n\n/** *************** SPLIT ******************/\n\n/**\n * Interface extending HTMLDivElement for Split sections.\n */\nexport interface SplitElement extends HTMLDivElement\n{\n /**\n * Adds a child to the section.\n */\n add: (value: LiteGUIObject | HTMLElement) => void;\n /**\n * Height of the section, if number it will be converted to percentage.\n */\n height?: string | number;\n /**\n * Width of the section, if number it will be converted to percentage.\n */\n width?: string | number;\n}\n\n/**\n * Configuration options for the Split component.\n */\nexport interface SplitOptions\n{\n id?: string;\n vertical?: boolean;\n parent?: LiteGUIObject | HTMLElement;\n}\n\n/**\n * Split component that divides an area into multiple sections.\n *\n * @class Split\n */\nexport class Split\n{\n\t/**\n\t * The root HTML element.\n\t */\n\troot: HTMLElement;\n\t/**\n\t * Array of section elements.\n\t */\n\tsections: SplitElement[];\n\n\t/**\n\t * Creates an instance of Split.\n\t * @param {Array<string | number | SplitElement>} sections Definition of sections.\n\t * @param {SplitOptions} [options] Options (parent, vertical, id).\n\t */\n\tconstructor(sections: Array<string | number | SplitElement>, options: SplitOptions)\n\t{\n\t\toptions = options ?? {};\n\n\t\tconst root = document.createElement(\"div\") as HTMLElement;\n\t\tthis.root = root;\n\t\tif (options.id) { root.id = options.id; }\n\t\troot.className = `litesplit ${options.vertical ? \"vsplit\" : \"hsplit\"}`;\n\t\tthis.sections = [];\n\n\t\tfor (const i in sections)\n\t\t{\n\t\t\tconst section = sections[i];\n\t\t\tconst newSection = document.createElement(\"div\") as SplitElement;\n\n\t\t\tnewSection.className = `Zsplit-section split${i}`;\n\t\t\tif (typeof section == \"number\")\n\t\t\t{\n\t\t\t\tif (options.vertical)\n\t\t\t\t{\n\t\t\t\t\tnewSection.style.height = `${section.toFixed(1)}%`;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tnewSection.style.width = `${section.toFixed(1)}%`;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (typeof section == \"string\")\n\t\t\t{\n\t\t\t\tif (options.vertical)\n\t\t\t\t{\n\t\t\t\t\tnewSection.style.height = section;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tnewSection.style.width = section;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (section.id)\n\t\t\t\t{\n\t\t\t\t\tnewSection.id = section.id;\n\t\t\t\t}\n\t\t\t\tif (options.vertical)\n\t\t\t\t{\n\t\t\t\t\tconst height: string | number = section.height ?? \"100%\";\n\t\t\t\t\tnewSection.style.height = (typeof (height) == \"number\" ?\n\t\t\t\t\t\t`${height.toFixed(1)}%` : height);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tconst width: string | number = section.width ?? \"100%\";\n\t\t\t\t\tnewSection.style.width = (typeof (width) == \"number\" ?\n\t\t\t\t\t\t`${width.toFixed(1)}%` : width);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnewSection.add = function (element: LiteGUIObject | HTMLElement)\n\t\t\t{\n\t\t\t\tthis.appendChild(\"root\" in element ? element.root : element);\n\t\t\t};\n\n\t\t\tthis.sections.push(newSection);\n\t\t\troot.appendChild(newSection);\n\t\t}\n\n\t\tif (options.parent)\n\t\t{\n\t\t\tif (\"root\" in options.parent)\n\t\t\t{\n\t\t\t\toptions.parent.root.appendChild(root);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\toptions.parent.appendChild(root);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Gets a section by index.\n\t * @param {number} index Index of the section.\n\t * @returns {SplitElement} The section element.\n\t */\n\tgetSection(index: number)\n\t{\n\t\treturn this.sections[index];\n\t}\n}","import { LiteGUIObject } from \"./@types/globals\";\n\nexport interface ConsoleOptions\n{\n\tprompt: string;\n}\n\nexport interface ConsoleElement extends HTMLElement\n{\n\tupdate?: (v: string) => void;\n}\n\nexport class Console implements LiteGUIObject\n{\n\toptions: ConsoleOptions;\n\troot: HTMLDivElement;\n\tlogElement: Element;\n\tinput: HTMLInputElement;\n\thistory: string[];\n\tprivate _prompt: string;\n\tprivate _historyOffset: number;\n\tprivate _inputBlocked?: boolean;\n\n\tconstructor(options: ConsoleOptions)\n\t{\n\t\toptions = options ?? { prompt: \">\" };\n\t\toptions.prompt = options.prompt ?? \">\";\n\t\tthis.options = options;\n\n\t\tthis.root = document.createElement(\"div\");\n\t\tthis.root.className = \"liteconsole\";\n\t\tthis.root.innerHTML = \"<div class='log'></div><div class='foot'><input type='text'/></div>\";\n\n\t\tthis.logElement = this.root.querySelector('.log')!;\n\t\tthis.input = this.root.querySelector('input')!;\n\n\t\tthis.input?.addEventListener(\"keydown\", this.processKeyDown.bind(this));\n\t\tthis._prompt = this.options.prompt;\n\n\t\tthis.history = [];\n\t\tthis._historyOffset = 0;\n\t}\n\n\tprocessKeyDown(e: KeyboardEvent)\n\t{\n\t\tif (this._inputBlocked || !this.input) { return; }\n\n\t\tswitch (e.key)\n\t\t{\n\t\tcase \"Enter\":\n\t\t{\n\t\t\tconst value = this.input.value;\n\t\t\tconst cmd = value.trim();\n\t\t\tthis.addMessage(this._prompt + cmd, \"me\", true);\n\t\t\tthis.input.value = \"\";\n\t\t\tthis.history.push(cmd);\n\t\t\tif (this.history.length > 10) { this.history.shift(); }\n\t\t\tthis.onProcessCommand(cmd);\n\t\t\tthis._historyOffset = 0;\n\t\t\tbreak;\n\t\t}\n\t\t// Up & down history\n\t\tcase \"ArrowUp\":\n\t\tcase \"ArrowDown\":\n\t\t{\n\t\t\tthis._historyOffset += (e.key == \"ArrowUp\" ? -1 : 1);\n\t\t\tif (this._historyOffset > 0)\n\t\t\t{\n\t\t\t\tthis._historyOffset = 0;\n\t\t\t}\n\t\t\telse if (this._historyOffset < -this.history.length)\n\t\t\t{\n\t\t\t\tthis._historyOffset = -this.history.length;\n\t\t\t}\n\t\t\tconst pos = this.history.length + this._historyOffset;\n\t\t\tif (pos < 0) { return; }\n\t\t\tif (pos >= this.history.length)\n\t\t\t{\n\t\t\t\tthis.input.value = \"\";\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.input.value = this.history[pos];\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\t// Tab autocompletion\n\t\tcase \"Tab\":\n\t\t{\n\t\t\tthis.input.value = this.onAutocomplete(this.input.value);\n\t\t\tbreak;\n\t\t}\n\t\t/* Falls through */\n\t\tdefault:\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\t}\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t}\n\n\taddMessage(text: string | string[], className: string, asText: boolean = true)\n\t{\n\t\tconst content = this.logElement;\n\t\t// Contains the last message sent\n\t\tlet element: ConsoleElement | null = null;\n\n\t\tfunction add(txt: string)\n\t\t{\n\t\t\telement = document.createElement(\"pre\") as ConsoleElement;\n\t\t\tif (asText)\n\t\t\t{\n\t\t\t\telement.innerText = txt;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\telement.innerHTML = txt;\n\t\t\t}\n\t\t\telement.className = \"msg\";\n\t\t\tif (className)\n\t\t\t{\n\t\t\t\telement.className += \" \" + className;\n\t\t\t}\n\t\t\tcontent.appendChild(element);\n\t\t\tif (content.children.length > 1000)\n\t\t\t{\n\t\t\t\tcontent.removeChild(content.children[0]);\n\t\t\t}\n\t\t}\n\n\t\tif (Array.isArray(text))\n\t\t{\n\t\t\tfor (let i = 0; i < text.length; ++i)\n\t\t\t{\n\t\t\t\tadd(text[i]);\n\t\t\t}\n\t\t}\n\t\telse if (typeof text !== \"string\")\n\t\t{\n\t\t\tadd(JSON.stringify(text, null, \"\"));\n\t\t}\n\t\telse\n\t\t{\n\t\t\tadd(text);\n\t\t}\n\n\t\tthis.logElement.scrollTop = 1000000;\n\n\t\tif (!element) { return; }\n\n\t\t(element as ConsoleElement).update = (function (this: ConsoleElement, v: string)\n\t\t{\n\t\t\tthis.innerHTML = v;\n\t\t}).bind(element);\n\n\t\treturn element;\n\t}\n\n\tlog(...args: unknown[])\n\t{\n\t\tconst d = args.join(\",\");\n\t\treturn this.addMessage(d, \"msglog\");\n\t}\n\n\twarn(...args: unknown[])\n\t{\n\t\tconst d = args.join(\",\");\n\t\treturn this.addMessage(d, \"msgwarn\");\n\t}\n\n\terror(...args: unknown[])\n\t{\n\t\tconst d = args.join(\",\");\n\t\treturn this.addMessage(d, \"msgerror\");\n\t}\n\n\tclear()\n\t{\n\t\tif (this.logElement)\n\t\t{\n\t\t\tthis.logElement.innerHTML = \"\";\n\t\t}\n\t}\n\n\t// TODO: Implement autocomplete\n\tonAutocomplete(value: string)\n\t{\n\t\t// This wasn't declared, just used so...\n\n\t\t// The function is supposed to return something so I will return the same parameter\n\t\treturn value;\n\t}\n\n\t// TODO: Implement command processing\n\tonProcessCommand(cmd: string): void\n\t{\n\t\t// This wasn't declared, just used so...\n\t\tconsole.log(cmd);\n\t}\n}","import { Area, Split } from \"./area\";\nimport { Dialog } from \"./dialog\";\nimport { Menubar } from \"./menubar\";\nimport { Panel } from \"./panel\";\nimport { Tabs } from \"./tabs\";\nimport\n{\n\tButton, SearchBox, ContextMenu, Checkbox, ListBox, List, Slider,\n\tComplexList, LineEditor\n} from \"./widgets\";\nimport { Console } from \"./console\";\nimport { Tree } from \"./widgets/tree\";\nimport { Inspector } from \"./inspector\";\nimport { Dragger } from \"./dragger\";\nimport { Table } from \"./table\";\nimport\n{\n\tLiteGUIObject\n} from \"./@types/globals\";\nimport\n{\n\tBlurElement, FocusElement, SizeToCSS, Trigger,\n\tBind, Unbind, RemoveClass, GetById, IsCursorOverElement, GetRect, ToClipboard,\n\tAddCSS, RequireCSS, Request, RequestText, RequestJSON, RequestBinary,\n\tRequireScript, RequireScriptSerial, CreateElement, CreateListItem, CreateButton,\n\tGetParents, NewWindow, DownloadURL, DownloadFile, GetUrlVars, GetUrlVar,\n\tDraggable, CloneObject, SafeName, HTMLEncode, HTMLDecode, GetElementWindow,\n\tCreateDropArea, RemoveElement, ShowMessage, ChoiceDialog, PromptDialog, ConfirmDialog,\n\tAlertDialog, PopupDialog\n} from \"./utilities\";\n\n/**\n * Common HTML unicode symbols for UI icons.\n */\nexport enum SpecialCode\n{\n\t/** Close icon (X) */\n\tclose = \"&#10005;\",\n\t/** Hamburger menu icon */\n\tnavicon = \"&#9776;\",\n\t/** Refresh arrow icon */\n\trefresh = \"&#8634;\",\n\t/** Gear/Settings icon */\n\tgear = \"&#9881;\",\n\t/** Open folder icon */\n\topenFolder = \"&#128194;\",\n\t/** Download icon */\n\tdownload = \"&#11123;\",\n\t/** Checkmark tick icon */\n\ttick = \"&#10003;\",\n\t/** Trash bin icon */\n\ttrash = \"&#128465;\"\n}\n\n/**\n * Options to configure the LiteGUI Core initialization.\n */\nexport interface CoreOptions\n{\n\t/** Width of the window/container */\n\twidth?: number,\n\t/** Height of the window/container */\n\theight?: number,\n\t/** ID of the container element */\n\tcontainer?: string,\n\t/** Whether to wrap the content in a root div */\n\twrapped?: boolean,\n\t/** Whether to create a menubar automatically */\n\tmenubar?: boolean,\n\t/** Callback function to be executed after initialization */\n\tcallback?: () => void\n}\n\n/**\n * Core namespace of LiteGUI library, it holds some useful functions\n *\n * @class LiteGUI\n */\nexport class Core\n{\n\t/** Root element of the LiteGUI instance */\n\troot?: HTMLElement;\n\t/** Main content container */\n\tcontent?: HTMLElement;\n\t/** Parent container element */\n\tcontainer?: HTMLElement;\n\t/** Reference to the main menu element */\n\tmainMenu?: HTMLElement;\n\t/** Reference to the Menubar widget */\n\tmenubar?: Menubar;\n\t/** Reference to the Tabs widget */\n\ttabs?: Tabs;\n\t/** Background element for modal dialogs (overlays the screen) */\n\tmodalBackground?: HTMLElement;\n\t/** Registry of active panels */\n\tpanels: Record<string, Panel> = {};\n\t/** Registry of open windows (popped out) */\n\twindows: Window[] = [];\n\n\tArea: typeof Area = Area;\n\tSplit: typeof Split = Split;\n\tMenubar: typeof Menubar = Menubar;\n\tDialog: typeof Dialog = Dialog;\n\tPanel: typeof Panel = Panel;\n\tButton: typeof Button = Button;\n\tSearchBox: typeof SearchBox = SearchBox;\n\tContextMenu: typeof ContextMenu = ContextMenu;\n\tCheckbox: typeof Checkbox = Checkbox;\n\tListBox: typeof ListBox = ListBox;\n\tList: typeof List = List;\n\tSlider: typeof Slider = Slider;\n\tLineEditor: typeof LineEditor = LineEditor;\n\tComplexList: typeof ComplexList = ComplexList;\n\tTabs: typeof Tabs = Tabs;\n\tTree: typeof Tree = Tree;\n\tConsole: typeof Console = Console;\n\tInspector: typeof Inspector = Inspector;\n\tDragger: typeof Dragger = Dragger;\n\tTable: typeof Table = Table;\n\tSpecialCode: typeof SpecialCode = SpecialCode;\n\n\t/**\n\t * Initializes the LiteGUI library.\n\t * @param {CoreOptions} [options] Configuration options.\n\t */\n\tinit(options?: CoreOptions): void\n\t{\n\t\toptions = options ?? {};\n\n\t\t// Choose main container\n\t\tif (options.container)\n\t\t{\n\t\t\tthis.container = document.getElementById(options.container) ?? undefined;\n\t\t}\n\t\tif (!this.container) { this.container = document.body; }\n\n\t\tif (options.wrapped)\n\t\t{\n\t\t\t// Create litegui root element\n\t\t\tconst root: HTMLElement = document.createElement(\"div\");\n\t\t\troot.style.position = \"relative\";\n\t\t\troot.style.overflow = \"hidden\";\n\t\t\tthis.root = root;\n\t\t\tthis.container.appendChild(root);\n\n\t\t\t// Content: the main container for everything\n\t\t\tconst content: HTMLElement = document.createElement(\"div\");\n\t\t\tthis.content = content;\n\t\t\tthis.root.appendChild(content);\n\n\t\t\t// Maximize\n\t\t\tif (this.root.classList.contains(\"fullscreen\"))\n\t\t\t{\n\t\t\t\twindow.addEventListener(\"resize\", () =>\n\t\t\t\t{\n\t\t\t\t\tthis.maximizeWindow();\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.root = this.content = this.container;\n\t\t}\n\n\t\tif (options.width && options.height)\n\t\t{\n\t\t\tthis.setWindowSize(options.width, options.height);\n\t\t}\n\n\t\tthis.root.className = \"litegui-wrap fullscreen\";\n\t\tthis.content.className = \"litegui-maincontent\";\n\n\t\t// Create modal dialogs container\n\t\tconst modalbg = this.modalBackground = document.createElement(\"div\");\n\t\tthis.modalBackground.className = \"litemodalbg\";\n\t\tthis.root.appendChild(this.modalBackground);\n\t\tmodalbg.style.display = \"none\";\n\n\t\t// Create menubar\n\t\tif (options.menubar)\n\t\t{\n\t\t\tthis.createMenubar();\n\t\t}\n\n\t\t// Called before anything\n\t\tif (options.callback)\n\t\t{\n\t\t\toptions.callback();\n\t\t}\n\n\t\t// External windows\n\t\twindow.addEventListener(\"beforeunload\", () =>\n\t\t{\n\t\t\tfor (let i = 0; i < this.windows.length; ++i)\n\t\t\t{\n\t\t\t\tthis.windows[i].close();\n\t\t\t}\n\t\t\tthis.windows = [];\n\t\t});\n\t}\n\n\t/**\n\t * Triggers a simple event in an object (similar to jQuery.trigger)\n\t * @param {unknown} element could be an HTMLEntity or a regular object\n\t * @param {string} eventName the type of the event\n\t * @param {unknown} params it will be stored in e.detail\n\t */\n\ttrigger = Trigger;\n\n\t/**\n\t * Binds an event in an object (similar to jQuery.bind)\n\t * If the element is not an HTML entity a new one is created, attached to the object (as non-enumerable, called __events) and used\n\t * @param {string | Object | Object[] | NodeListOf<HTMLElement>} element could be an HTMLEntity, a regular object, a query string or a regular Array of entities\n\t * @param {String} event the string defining the event\n\t * @param {EventListenerOrEventListenerObject} callback where to call\n\t */\n\tbind = Bind;\n\n\t/**\n\t * Unbinds an event in an object (similar to jQuery.unbind)\n\t * @param {Object} element could be an HTMLEntity or a regular object\n\t * @param {String} event the string defining the event\n\t * @param {EventListenerOrEventListenerObject} callback where to call\n\t */\n\tunbind = Unbind;\n\n\t/**\n\t * Removes a class\n\t * @param {HTMLElement} elem\n\t * @param {String} selector\n\t * @param {String} className\n\t */\n\tremoveClass = RemoveClass;\n\n\t/**\n\t * Appends litegui widget to the global interface\n\t * @param {LiteGUIObject | HTMLElement} element\n\t */\n\tadd(element: LiteGUIObject | HTMLElement): void\n\t{\n\t\tthis.content?.appendChild(\"root\" in element ? element.root : element);\n\t}\n\n\t/**\n\t * Remove from the interface, it is is an HTML element it is removed from its parent, if it is a widget the same.\n\t * @param {string | LiteGUIObject | HTMLElement | HTMLElement[] | NodeListOf<HTMLElement>} element it also supports HTMLentity, selector string or Array of elements\n\t */\n\tremove = RemoveElement;\n\n\t/**\n\t * Wrapper of document.getElementById\n\t * @param {String} id\n\t * return {HTMLEntity}\n\t *\n\t */\n\tgetById = GetById;\n\n\t/**\n\t * Creates and attaches the main application menubar.\n\t */\n\tcreateMenubar(): void\n\t{\n\t\tthis.menubar = new LiteGUI.Menubar(\"mainmenubar\");\n\t\tthis.add(this.menubar);\n\t}\n\n\t/**\n\t * Sets the size of the main window.\n\t * @param {number} [w] Width in pixels.\n\t * @param {number} [h] Height in pixels.\n\t */\n\tsetWindowSize(w?: number, h?: number): void\n\t{\n\t\tconst style = this.root?.style;\n\n\t\tif (w && h)\n\t\t{\n\t\t\tstyle!.width = w + \"px\";\n\t\t\tstyle!.height = h + \"px\";\n\t\t\tstyle!.boxShadow = \"0 0 4px black\";\n\t\t\tthis.root?.classList.remove(\"fullscreen\");\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (this.root?.classList.contains(\"fullscreen\")) { return; }\n\t\t\tthis.root?.classList.add(\"fullscreen\");\n\t\t\tstyle!.width = \"100%\";\n\t\t\tstyle!.height = \"100%\";\n\t\t\tstyle!.boxShadow = \"0 0 0\";\n\t\t}\n\t\tif (this.root)\n\t\t{\n\t\t\tthis.trigger(this.root, \"resized\", undefined);\n\t\t}\n\t}\n\n\t/**\n\t * Maximizes the window to fill the container.\n\t */\n\tmaximizeWindow(): void\n\t{\n\t\tthis.setWindowSize(undefined, undefined);\n\t}\n\n\t/**\n\t * Change cursor style of the root element.\n\t * @param {string} name CSS cursor property value.\n\t */\n\tsetCursor(name: string): void\n\t{\n\t\tif (this.root) { this.root.style.cursor = name; }\n\t}\n\n\t/**\n\t * Test if the cursor is inside an element\n\t * @param {MouseEvent} event\n\t * @param {HTMLElement} element\n\t *\n\t */\n\tisCursorOverElement = IsCursorOverElement;\n\n\t/**\n\t * Returns the bounding client rect of an element.\n\t * @param {HTMLElement} element The element to measure.\n\t * @returns {DOMRect} The bounding rectangle.\n\t */\n\tgetRect = GetRect;\n\n\t/**\n\t * Copy a string to the clipboard (it needs to be invoqued from a click event)\n\t * @param {String | Record<string, unknown>} data\n\t */\n\ttoClipboard = ToClipboard;\n\n\t/**\n\t * Insert some CSS code to the website\n\t * @param {String|CSSStyleDeclaration} code it could be a string with CSS rules, or an object with the style syntax.\n\t *\n\t */\n\taddCSS = AddCSS;\n\n\t/**\n\t * Requires a new CSS\n\t * @param {String} url string with url or an array with several urls\n\t * @param {Function} onComplete\n\t *\n\t */\n\trequireCSS = RequireCSS;\n\n\t/**\n\t * Request file from url (it could be a binary, text, etc.). If you want a simplied version use\n\t * @param {RequestOptions} request object with all the parameters like data (for sending forms), dataType, success, error\n\t */\n\trequest = Request;\n\n\t/**\n\t * Request file from url\n\t * @param {String} url\n\t * @param {(data: string, xhr: XMLHttpRequest) => void} onComplete\n\t * @param {(err: string | ProgressEvent<EventTarget>) => void} onError\n\t *\n\t */\n\trequestText = RequestText;\n\n\t/**\n\t * Request file from url\n\t * @param {String} url\n\t * @param {(data: object, xhr: XMLHttpRequest) => void} onComplete\n\t * @param {(err: string | ProgressEvent<EventTarget>) => void} onError\n\t *\n\t */\n\trequestJSON = RequestJSON;\n\n\t/**\n\t * Request binary file from url\n\t * @param {String} url\n\t * @param {(data: ArrayBuffer | unknown, xhr: XMLHttpRequest) => void} onComplete\n\t * @param {(err: string | ProgressEvent<EventTarget>) => void} onError\n\t *\n\t */\n\trequestBinary = RequestBinary;\n\n\n\t/**\n\t * Request script and inserts it in the DOM\n\t * @param {String|Array} url the url of the script or an array containing several urls\n\t * @param {(scripts: Array<CoreScriptElement>) => void} onComplete\n\t * @param {(err: string | Event, src: string, num: number) => void} onError\n\t * @param {(src: string, num: number) => void} onProgress (if several files are required, onProgress is called after every file is added to the DOM)\n\t *\n\t */\n\trequireScript = RequireScript;\n\n\n\t/**\n\t * Loads scripts sequentially from a list of URLs.\n\t * @param {string | string[]} url Single URL or array of URLs to load.\n\t * @param {(loadedScripts: GlobalEventHandlers[]) => void} onComplete Callback when all scripts are loaded.\n\t * @param {(url: string, remaining: number) => void} onProgress Callback for progress updates.\n\t */\n\trequireScriptSerial = RequireScriptSerial;\n\n\t/**\n\t * Creates a new div element with specified ID and code.\n\t * @param {string} id\n\t * @param {string} code Inner HTML content.\n\t * @returns {HTMLElement} The created div.\n\t */\n\tnewDiv(id: string, code: string)\n\t{\n\t\treturn this.createElement(\"div\", id, code, undefined, undefined);\n\t}\n\n\t/**\n\t * Creates an HTML element\n\t * @param {String} tag\n\t * @param {String} classID string containing id and classes, example: \"myid .someclass .anotherclass\"\n\t * @param {String} content\n\t * @param {string | CSSStyleDeclaration} [style]\n\t * @param {EventListenerOrEventListenerObject[]} [events]\n\t */\n\tcreateElement = CreateElement;\n\n\t/**\n\t * Useful to create elements from a text like '<div><span class=\"title\"></span></div>' and an object like { \".title\":\"mytitle\" }\n\t * @param {String} code\n\t * @param {Record<string, string>} values it will use innerText in the elements that matches that selector\n\t * @param {CSSStyleDeclaration} style\n\t * @return {HTMLElement}\n\t *\n\t */\n\tcreateListItem = CreateListItem;\n\n\t/**\n\t * Creates a button element\n\t * @param {String} classID ID or class\n\t * @param {String} content\n\t * @param {(ev: PointerEvent) => void} callback when the button is pressed\n\t * @param {CSSStyleDeclaration|String} style\n\t *\n\t */\n\tcreateButton = CreateButton;\n\n\t/**\n\t * Retrieves all parent elements of the given element up to the document root.\n\t * @param {HTMLElement} element The starting element.\n\t * @returns {HTMLElement[]} Array of parent elements.\n\t */\n\tgetParents = GetParents;\n\n\t/**\n\t * Opens a new window with copied styles and optional scripts.\n\t * @param {string} title syntax title for the new window.\n\t * @param {number} width Width of the window.\n\t * @param {number} height Height of the window.\n\t * @param {{ scripts?: boolean, content?: string }} [options] Configuration object.\n\t * @param {boolean} [options.scripts] Whether to copy scripts to the new window.\n\t * @param {string} [options.content] HTML content to inject into the new window.\n\t * @returns {Window} The newly created window object.\n\t */\n\tnewWindow = NewWindow;\n\n\t//* DIALOGS *******************\n\n\t/**\n\t * Shows or hides the modal background overlay.\n\t * @param {boolean} value True to show, false to hide.\n\t */\n\tshowModalBackground(value: boolean)\n\t{\n\t\tif (this.modalBackground)\n\t\t{\n\t\t\tthis.modalBackground.style.display = value ? \"block\" : \"none\";\n\t\t}\n\t}\n\n\t/**\n\t * Shows a generic message dialog.\n\t * @param {string} content The message content.\n\t * @param {DialogOptions} [options] Configuration options.\n\t * @returns {Dialog} The created Dialog instance.\n\t */\n\tshowMessage = ShowMessage;\n\n\t/**\n\t * Shows a dialog with a message\n\t * @param {String} content\n\t * @param {DialogOptions} [options]\n\t * @returns {Dialog}\n\t */\n\tpopup = PopupDialog;\n\n\t/**\n\t * Shows an alert dialog with a message\n\t * @param {String} content\n\t * @param {MessageOptions} [options]\n\t * @returns {Dialog}\n\t */\n\talert = AlertDialog;\n\n\t/**\n\t * Shows a confirm dialog with a message\n\t * @param {String} content\n\t * @param {(value: boolean) => void} callback\n\t * @param {MessageOptions} [options]\n\t * @returns {Dialog}\n\t */\n\tconfirm = ConfirmDialog;\n\n\t/**\n\t * Shows a prompt dialog with a message\n\t * @param {String} content\n\t * @param {(value?: string) => void} callback\n\t * @param {MessageOptions} [options]\n\t * @returns {Dialog}\n\t */\n\tprompt = PromptDialog;\n\n\t/**\n\t * Shows a choice dialog with a message\n\t * @param {String} content\n\t * @param {Array<string|ContentHolder>} choices\n\t * @param {(value: string | ContentHolder) => void} callback\n\t * @param {MessageOptions} [options]\n\t * @returns {Dialog}\n\t */\n\tchoice = ChoiceDialog;\n\n\t/**\n\t * Triggers a download of the resource at the specified URL.\n\t * @param {string} url The URL of the resource to download.\n\t * @param {string} filename The name to save the file as.\n\t */\n\tdownloadURL = DownloadURL;\n\n\t/**\n\t * Triggers a download of a File or Blob object.\n\t * @param {string} filename The name to save the file as.\n\t * @param {File | Blob} data The file data.\n\t * @param {string} dataType MIME type of the data if not specified in the Blob.\n\t */\n\tdownloadFile = DownloadFile;\n\n\t/**\n\t * Returns the URL vars ( ?foo=faa&foo2=etc )\n\t *\n\t */\n\tgetUrlVars = GetUrlVars;\n\n\t/**\n\t * Retrieves a specific query parameter from the URL.\n\t * @param {string} name The name of the parameter.\n\t * @returns {string} The value of the parameter.\n\t */\n\tgetUrlVar = GetUrlVar;\n\n\t/**\n\t * Focuses an element.\n\t * @param {HTMLElement | Window} element The element to focus.\n\t */\n\tfocus = FocusElement;\n\n\t/**\n\t * Blurs an element.\n\t * @param {HTMLElement | Window} element The element to blur.\n\t */\n\tblur = BlurElement;\n\n\t/**\n\t * Makes one element draggable\n\t * @param {HTMLElement} container the element that will be dragged\n\t * @param {HTMLElement} dragger the area to start the dragging\n\t * @param {(container: HTMLElement, e: MouseEvent) => void} onStart Callback when the dragging starts.\n\t * @param {(container: HTMLElement, e: MouseEvent) => void} onFinish Callback when the dragging finishes.\n\t * @param {(container: HTMLElement, e: MouseEvent) => boolean} onIsDraggable Callback to determine if the element is currently draggable.\n\t */\n\tdraggable = Draggable;\n\n\t/**\n\t * Clones object content\n\t * @param {Object} source\n\t * @param {Object} target\n\t *\n\t */\n\tcloneObject = CloneObject;\n\n\t/**\n\t * Removing spaces and dots from a string.\n\t * @param {string} str The input string.\n\t * @returns {string} The sanitized string.\n\t */\n\tsafeName = SafeName;\n\n\t/**\n\t * Encodes an HTML string by replacing special characters with unicode.\n\t * @param {string} htmlCode The HTML string to encode.\n\t * @returns {string} The encoded string (text content).\n\t */\n\thtmlEncode = HTMLEncode;\n\n\t/**\n\t * Decodes a unicode string back to HTML.\n\t * @param {string} unicodeCharacter The string to decode.\n\t * @returns {string} The decoded HTML string.\n\t */\n\thtmlDecode = HTMLDecode;\n\n\t/**\n\t * Convert sizes in any format to a valid CSS format (number to string, negative number to calc( 100% - number px )\n\t * @param {string|Number} value\n\t * @return {string|undefined} valid css size string\n\t *\n\t */\n\tsizeToCSS = SizeToCSS;\n\n\t/**\n\t * Returns the window where this element is attached (used in multi window applications)\n\t * @param {HTMLElement} element\n\t * @return {Window} the window element\n\t *\n\t */\n\tgetElementWindow = GetElementWindow;\n\n\t/**\n\t * Helper, makes drag and drop easier by enabling drag and drop in a given element\n\t * @param {HTMLElement} element the element where users could drop items\n\t * @param {(evt: DragEvent) => boolean} onDrop function to call when the user drops the item\n\t * @param {(evt: DragEvent, element: HTMLElement) => void} onEnter [optional] function to call when the user drags something inside\n\t * @param {(evt: DragEvent, element: HTMLElement) => void} onExit [optional] function to call when the user drags something outside\n\t *\n\t */\n\tcreateDropArea = CreateDropArea;\n}\n\n// Low quality templating system\nObject.defineProperty(String.prototype, \"template\", {\n\tvalue: function (data: object, evalCode: string)\n\t{\n\t\t// eslint-disable-next-line @typescript-eslint/no-this-alias\n\t\tlet tpl = this;\n\t\tconst re = /{{([^}}]+)?}}/g;\n\t\tlet match;\n\t\twhile (match)\n\t\t{\n\t\t\tconst str = evalCode ? (new Function(`with(this) { try { return ${match[1]} } catch(e) { return 'error';} }`)).call(data) : data[match[1] as keyof object];\n\t\t\ttpl = tpl.replace(match[0], str);\n\t\t\tmatch = re.exec(tpl);\n\t\t}\n\t\treturn tpl;\n\t},\n\tenumerable: false\n});\n\nexport const LiteGUI = new Core();","import { LiteGUIObject } from \"./@types/globals\";\nimport { CoreDocument } from \"./utilities\";\nimport { LiteGUI, SpecialCode } from \"./core\";\n\n/**\n * Options for a button in the dialog.\n */\nexport interface DialogButtonOptions\n{\n\t/**\n\t * Text to display on the button.\n\t */\n\tname?: string;\n\t/**\n\t * CSS class to add to the button.\n\t */\n\tclassName?: string;\n\t/**\n\t * Callback function to execute when the button is clicked.\n\t */\n\tcallback?: (button: HTMLButtonElement) => void;\n\t/**\n\t * Whether clicking the button should close the dialog.\n\t */\n\tclose?: boolean;\n}\n\n/**\n * Configuration options for the Dialog.\n */\nexport interface DialogOptions\n{\n\t/**\n\t * Parent element to attach the dialog to.\n\t */\n\tparent?: string | HTMLDivElement;\n\t/**\n\t * Whether to attach the dialog to the DOM immediately.\n\t */\n\tattach?: boolean;\n\t/**\n\t * Whether the content should be scrollable.\n\t */\n\tscroll?: boolean;\n\t/**\n\t * Array of buttons to show in the footer.\n\t */\n\tbuttons?: DialogButtonOptions[];\n\t/**\n\t * Whether the content should take the full height of the dialog.\n\t */\n\tfullContent?: boolean;\n\t/**\n\t * Whether the dialog can be closed.\n\t */\n\tclosable?: boolean;\n\t/**\n\t * The type of animation to use when closing the dialog.\n\t */\n\tclose?: string;\n\t/**\n\t * Whether the dialog can be detached to a new window.\n\t */\n\tdetachable?: boolean;\n\t/**\n\t * Whether to show the hide button.\n\t */\n\thide?: boolean;\n\t/**\n\t * Whether to show the minimize button.\n\t */\n\tminimize?: boolean;\n\t/**\n\t * Title of the dialog.\n\t */\n\ttitle?: string;\n\t/**\n\t * CSS class to add to the dialog.\n\t */\n\tclassName?: string;\n\t/**\n\t * HTML content of the dialog.\n\t */\n\tcontent?: string;\n\t/**\n\t * Minimum height of the dialog.\n\t */\n\tminHeight?: number | number;\n\t/**\n\t * Minimum width of the dialog.\n\t */\n\tminWidth?: number | number;\n\t/**\n\t * Height of the dialog.\n\t */\n\theight?: string | number;\n\t/**\n\t * Width of the dialog.\n\t */\n\twidth?: string | number;\n\t/**\n\t * Unique identifier for the dialog element.\n\t */\n\tid?: string;\n\t/**\n\t * Whether the dialog is resizable.\n\t */\n\tresizable?: boolean;\n\t/**\n\t * Whether the dialog is draggable.\n\t */\n\tdraggable?: boolean;\n\t/**\n\t * Callback function to execute when the dialog is closed.\n\t */\n\tonClose?: () => void;\n}\n\n/**\n * Interface extending HTMLDivElement to include a reference to the Dialog instance.\n */\nexport interface DialogRoot extends HTMLDivElement\n{\n\t/**\n\t * Reference to the document.\n\t */\n\townerDocument: CoreDocument;\n\t/**\n\t * Reference to the Dialog instance associated with this element.\n\t */\n\tdialog: Dialog;\n\t/**\n\t * Unique identifier for the dialog element.\n\t */\n\tid: string;\n}\n\nexport type DockType = 'full' | 'left' | 'right' | 'bottom' | 'top';\n\n/**\n * Class representing a Dialog window.\n *\n * @example\n * ```typescript\n * const dialog = new LiteGUI.Dialog({ title: \"My Dialog\", width: 400, height: 300 });\n * dialog.show();\n * ```\n */\nexport class Dialog implements LiteGUIObject\n{\n\t/**\n\t * Width of the dialog.\n\t */\n\twidth?: string | number;\n\t/**\n\t * Height of the dialog.\n\t */\n\theight?: string | number;\n\t/**\n\t * Minimum width of the dialog.\n\t */\n\tminWidth?: number;\n\t/**\n\t * Minimum height of the dialog.\n\t */\n\tminHeight?: number;\n\t/**\n\t * The content element of the dialog.\n\t */\n\tcontent!: HTMLDivElement;\n\t/**\n\t * The root element of the dialog.\n\t */\n\troot: DialogRoot;\n\t/**\n\t * The footer element of the dialog.\n\t */\n\tfooter?: HTMLDivElement;\n\t/**\n\t * The header element of the dialog.\n\t */\n\theader?: HTMLDivElement;\n\t/**\n\t * Whether the dialog is resizable.\n\t */\n\tresizable: boolean = false;\n\t/**\n\t * Whether the dialog is draggable.\n\t */\n\tdraggable: boolean = false;\n\t/**\n\t * Callback triggered when the dialog is resized.\n\t */\n\tonResize?: (evt?: MouseEvent, width?: number, height?: number) => void;\n\t/**\n\t * Callback triggered when the dialog is closed.\n\t */\n\tonClose?: () => void;\n\t/**\n\t * Callback triggered when the dialog is attached to the DOM.\n\t */\n\tonAttachedToDOM?: () => void;\n\t/**\n\t * Callback triggered when the dialog is detached from the DOM.\n\t */\n\tonDetachedFromDOM?: () => void;\n\n\t/**\n\t * Reference to the detached window.\n\t * @private\n\t */\n\tprivate _dialogWindow?: Window;\n\t/**\n\t * List of minimized dialogs.\n\t * @private\n\t */\n\tprivate _minimized: Dialog[] = [];\n\t/**\n\t * Whether the window is detached.\n\t * @private\n\t */\n\tprivate _isWindowDetached?: boolean;\n\t/**\n\t * Stores the old client rect before minimizing or maximizing.\n\t * @private\n\t */\n\tprivate _oldBox?: DOMRect;\n\t/**\n\t * Stores the old height before detaching.\n\t * @private\n\t */\n\tprivate _oldHeight?: string;\n\t/**\n\t * Default height of the dialog title.\n\t */\n\tpublic static TITLE_HEIGHT: string = \"20px\";\n\t/**\n\t * Width of the dialog when minimized.\n\t */\n\tpublic static MINIMIZED_WIDTH = 200;\n\n\t/**\n\t * Creates an instance of the Dialog.\n\t * @param {DialogOptions | string} [options] Configuration options or the ID of the dialog.\n\t */\n\tconstructor(options?: DialogOptions | string)\n\t{\n\t\tif (typeof options == 'string')\n\t\t{\n\t\t\tconst id = options;\n\t\t\toptions = { id: id };\n\t\t}\n\t\toptions = options ?? {};\n\n\t\tthis.root = <DialogRoot>document.createElement(\"div\");\n\t\tthis.width = options.width;\n\t\tthis.height = options.height;\n\t\tthis.minWidth = options.minWidth ?? 150;\n\t\tthis.minHeight = options.minHeight ?? 100;\n\n\t\tconst root = <DialogRoot>document.createElement(\"div\");\n\t\tif (options.id) { root.id = options.id; }\n\n\t\troot.className = `litedialog ${options.className ?? \"\"}`;\n\t\troot.dialog = this;\n\n\t\tlet code = \"\";\n\t\tif (options.title)\n\t\t{\n\t\t\tcode += `<div class='panel-header'>${options.title}</div><div class='buttons'>`;\n\t\t\tif (options.minimize)\n\t\t\t{\n\t\t\t\tcode += \"<button class='litebutton mini-button minimize-button'>-</button>\";\n\t\t\t\tcode += \"<button class='litebutton mini-button maximize-button' style='display:none'></button>\";\n\t\t\t}\n\t\t\tif (options.hide) { code += \"<button class='litebutton mini-button hide-button'></button>\"; }\n\t\t\tif (options.detachable) { code += \"<button class='litebutton mini-button detach-button'></button>\"; }\n\n\t\t\tif (options.close || options.closable)\n\t\t\t{\n\t\t\t\tcode += `<button class='litebutton mini-button close-button'>${SpecialCode.close}</button>`;\n\t\t\t}\n\t\t\tcode += \"</div>\";\n\t\t}\n\t\tcode += `<div class='content'>${options.content ?? \"\"}</div>`;\n\t\tcode += \"<div class='panel-footer'></div>\";\n\t\troot.innerHTML = code;\n\n\t\tthis.root = root;\n\t\tthis.header = root.querySelector(\".panel-header\") as HTMLDivElement;\n\t\tthis.content = root.querySelector(\".content\") as HTMLDivElement;\n\t\tthis.footer = root.querySelector(\".panel-footer\") as HTMLDivElement;\n\n\t\tif (options.fullContent)\n\t\t{\n\t\t\tthis.content.style.width = \"100%\";\n\t\t\tthis.content.style.height = options.title ? `calc( 100% - ${Dialog.TITLE_HEIGHT} )` : \"100%\";\n\t\t}\n\n\t\tif (options.buttons)\n\t\t{\n\t\t\tfor (const button of options.buttons)\n\t\t\t{\n\t\t\t\tthis.addButton(button.name, button);\n\t\t\t}\n\t\t}\n\n\t\tif (options.scroll == true) { this.content!.style.overflow = \"auto\"; }\n\n\t\t// Buttons *********************************\n\t\tconst closeButton = root.querySelector(\".close-button\");\n\t\tif (closeButton)\n\t\t{\n\t\t\tcloseButton.addEventListener(\"click\", this.close.bind(this));\n\t\t}\n\n\t\tconst maximizeButton = root.querySelector(\".maximize-button\");\n\t\tif (maximizeButton)\n\t\t{\n\t\t\tmaximizeButton.addEventListener(\"click\", this.maximize.bind(this));\n\t\t}\n\n\t\tconst minimizeButton = root.querySelector(\".minimize-button\");\n\t\tminimizeButton?.addEventListener(\"click\", this.minimize.bind(this));\n\n\t\tconst hideButton = root.querySelector(\".hide-button\");\n\t\thideButton?.addEventListener(\"click\", this.hide.bind(this));\n\n\t\tconst detachButton = root.querySelector(\".detach-button\");\n\t\tdetachButton?.addEventListener(\"click\", () => { this.detachWindow(undefined, undefined); });\n\n\t\t// Size, draggable, resizable, etc\n\t\tthis.enableProperties(options);\n\n\t\tthis.root.addEventListener(\"DOMNodeInsertedIntoDocument\", () =>\n\t\t{\n\t\t\tif (this.onAttachedToDOM) { this.onAttachedToDOM(); }\n\t\t\tif (this.onResize) { this.onResize(); }\n\t\t});\n\t\tthis.root.addEventListener(\"DOMNodeRemovedFromDocument\", () =>\n\t\t{\n\t\t\tif (this.onDetachedFromDOM)\n\t\t\t{\n\t\t\t\tthis.onDetachedFromDOM();\n\t\t\t}\n\t\t});\n\n\n\t\t// Attach\n\t\tif (options.attach || options.parent)\n\t\t{\n\t\t\tlet parent = null;\n\t\t\tif (options.parent)\n\t\t\t{\n\t\t\t\tparent = typeof (options.parent) == \"string\" ?\n\t\t\t\t\tdocument.querySelector(options.parent) : options.parent;\n\t\t\t}\n\t\t\tif (!parent) { parent = LiteGUI.root; }\n\t\t\tparent?.appendChild(this.root);\n\t\t\tthis.center();\n\t\t}\n\t}\n\n\t/**\n\t * Get a dialog from the document by its ID.\n\t * @param {string} id The unique identifier of the dialog.\n\t * @returns {Dialog | undefined} The dialog instance if found, otherwise undefined.\n\t */\n\tgetDialog(id: string)\n\t{\n\t\tconst element = <DialogRoot>document.getElementById(id);\n\t\tif (!element) { return; }\n\t\treturn element.dialog;\n\t}\n\n\t/**\n\t * Add widget or HTML element to the content of the dialog.\n\t * @param {LiteGUIObject} item The item to add.\n\t */\n\tadd(item: LiteGUIObject)\n\t{\n\t\tif (item.root)\n\t\t{\n\t\t\tthis.content?.appendChild(item.root);\n\t\t}\n\t}\n\n\t/**\n\t * Enables the properties of the dialog (draggable, resizable, etc).\n\t * @param {DialogOptions} [options] Configuration options to enable specific properties.\n\t */\n\tenableProperties(options?: DialogOptions)\n\t{\n\t\toptions = options ?? {};\n\n\t\tconst panel = this.root;\n\t\tpanel.style.position = \"absolute\";\n\t\t// Panel.style.display = \"none\";\n\n\t\tpanel.style.minWidth = this.minWidth + \"px\";\n\t\tpanel.style.minHeight = this.minHeight + \"px\";\n\n\t\tif (this.width) { panel.style.width = this.width + \"px\"; }\n\n\t\tif (this.height)\n\t\t{\n\t\t\tif (typeof (this.height) == \"number\")\n\t\t\t{\n\t\t\t\tpanel.style.height = this.height + \"px\";\n\t\t\t}\n\t\t\telse if (this.height.indexOf(\"%\") != -1)\n\t\t\t{\n\t\t\t\tpanel.style.height = this.height;\n\t\t\t}\n\n\t\t\tthis.content.style.height = \"calc( \" + this.height + \"px - 24px )\";\n\t\t}\n\n\t\tpanel.style.boxShadow = \"0 0 3px black\";\n\n\t\tif (options.draggable)\n\t\t{\n\t\t\tthis.draggable = true;\n\t\t\tconst element = panel.querySelector(\".panel-header\") as HTMLElement | null;\n\t\t\tif (element)\n\t\t\t{\n\t\t\t\tLiteGUI.draggable(panel, element, () =>\n\t\t\t\t{\n\t\t\t\t\tthis.bringToFront();\n\t\t\t\t}, () => { }, () =>\n\t\t\t\t{\n\t\t\t\t\treturn !this._minimized.includes(this);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (options.resizable)\n\t\t{ this.setResizable(); }\n\t}\n\n\t/**\n\t * Sets the dialog as resizable.\n\t */\n\tsetResizable()\n\t{\n\t\tif (this.resizable) { return; }\n\n\t\tconst root = this.root;\n\t\tthis.resizable = true;\n\t\tconst footer = this.footer;\n\t\tif (footer)\n\t\t{\n\t\t\tfooter.style.minHeight = \"4px\";\n\t\t\tfooter.classList.add(\"resizable\");\n\t\t}\n\n\t\tconst corner = document.createElement(\"div\");\n\t\tcorner.className = \"resizable-corner\";\n\t\tthis.root?.appendChild(corner);\n\n\t\tconst mouse = [0, 0];\n\t\tlet isCorner = false;\n\n\t\tconst _onMouse = (e: MouseEvent) =>\n\t\t{\n\t\t\tconst el = e.target;\n\t\t\tif (e.type == \"mousedown\")\n\t\t\t{\n\t\t\t\tdocument.body.addEventListener(\"mousemove\", _onMouse);\n\t\t\t\tdocument.body.addEventListener(\"mouseup\", _onMouse);\n\t\t\t\tisCorner = el == corner;\n\t\t\t\tmouse[0] = e.pageX;\n\t\t\t\tmouse[1] = e.pageY;\n\t\t\t}\n\t\t\telse if (e.type == \"mousemove\")\n\t\t\t{\n\t\t\t\tconst rect = LiteGUI.getRect(root);\n\t\t\t\tconst w = rect.width;\n\t\t\t\tconst newW = w - (mouse[0] - e.pageX);\n\n\t\t\t\tconst h = rect.height;\n\t\t\t\tconst newH = h - (mouse[1] - e.pageY);\n\n\t\t\t\tif (isCorner) { root.style.width = newW + \"px\"; }\n\t\t\t\troot.style.height = newH + \"px\";\n\n\t\t\t\tmouse[0] = e.pageX;\n\t\t\t\tmouse[1] = e.pageY;\n\t\t\t\tthis.content.style.height = \"calc( 100% - 24px )\";\n\n\t\t\t\tif (this.onResize && (w != newW || h != newH))\n\t\t\t\t{\n\t\t\t\t\tthis.onResize(e, newW, newH);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (e.type == \"mouseup\")\n\t\t\t{\n\t\t\t\tdocument.body.removeEventListener(\"mousemove\", _onMouse);\n\t\t\t\tdocument.body.removeEventListener(\"mouseup\", _onMouse);\n\t\t\t\tisCorner = false;\n\t\t\t}\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\treturn false;\n\t\t};\n\n\t\tfooter?.addEventListener(\"mousedown\", _onMouse);\n\t\tcorner.addEventListener(\"mousedown\", _onMouse, true);\n\t}\n\n\t/**\n\t * Docks the dialog to the parent.\n\t * @param {LiteGUIObject | HTMLElement | string} parent The parent element to dock to.\n\t * @param {DockType} [dockType] The docking type (full, left, right, bottom, top).\n\t * @param {string | number} [titleHeight] The height of the title bar to adjust content height.\n\t */\n\tdockTo(parent?: LiteGUIObject | HTMLElement | string, dockType?: DockType, titleHeight?: string | number)\n\t{\n\t\tif (parent == undefined) { return; }\n\n\t\tdockType = dockType ?? \"full\";\n\n\t\tconst panel = this.root;\n\t\tpanel.style.top = \"0\";\n\t\tpanel.style.left = \"0\";\n\n\t\tpanel.style.boxShadow = \"0 0 0\";\n\n\t\tif (dockType == \"full\")\n\t\t{\n\t\t\tpanel.style.position = \"relative\";\n\t\t\tpanel.style.width = \"100%\";\n\t\t\tpanel.style.height = \"100%\";\n\t\t\tthis.content.style.width = \"100%\";\n\t\t\tthis.content.style.height = \"calc(100% - \" + (titleHeight ?? LiteGUI.Panel.TITLE_HEIGHT) + \")\"; // Title offset: 20px\n\t\t\tthis.content.style.overflow = \"auto\";\n\t\t}\n\t\telse if (dockType == 'left' || dockType == 'right')\n\t\t{\n\t\t\tpanel.style.position = \"absolute\";\n\t\t\tpanel.style.top = \"0\";\n\t\t\tpanel.style[dockType] = \"0\";\n\n\t\t\tpanel.style.width = this.width + \"px\";\n\t\t\tpanel.style.height = \"100%\";\n\t\t\tthis.content.style.height = \"calc(100% - \" + (titleHeight ?? LiteGUI.Panel.TITLE_HEIGHT) + \")\";\n\t\t\tthis.content.style.overflow = \"auto\";\n\n\t\t\tif (dockType == 'right')\n\t\t\t{\n\t\t\t\tpanel.style.left = \"auto\";\n\t\t\t\tpanel.style.right = \"0\";\n\t\t\t}\n\t\t}\n\t\telse if (dockType == 'bottom' || dockType == 'top')\n\t\t{\n\t\t\tpanel.style.width = \"100%\";\n\t\t\tpanel.style.height = this.height + \"px\";\n\t\t\tif (dockType == 'bottom')\n\t\t\t{\n\t\t\t\tpanel.style.bottom = \"0\";\n\t\t\t\tpanel.style.top = \"auto\";\n\t\t\t}\n\t\t}\n\n\t\tif (this.draggable)\n\t\t{\n\t\t\tLiteGUI.draggable(panel);\n\t\t}\n\n\t\tif (typeof (parent) == \"string\")\n\t\t{\n\t\t\tconst parentElem = document.querySelector<HTMLElement>(parent);\n\t\t\tif (parentElem)\n\t\t\t{\n\t\t\t\tparentElem.appendChild(panel);\n\t\t\t}\n\t\t}\n\t\telse if (parent && \"content\" in parent)\n\t\t{\n\t\t\t(parent as { content: HTMLElement }).content.appendChild(panel);\n\t\t}\n\t\telse if (parent && \"root\" in parent)\n\t\t{\n\t\t\t(parent as { root: HTMLElement }).root.appendChild(panel);\n\t\t}\n\t\telse if (parent && \"appendChild\" in parent)\n\t\t{\n\t\t\t(parent as HTMLElement).appendChild(panel);\n\t\t}\n\t}\n\n\t/**\n\t * Adds a button to the dialog.\n\t * @param {string} [name] The text to display on the button.\n\t * @param {DialogButtonOptions | Function} [options] Options for the button or a callback function.\n\t * @returns {HTMLButtonElement} The created button element.\n\t */\n\taddButton(name?: string, options?: DialogButtonOptions |\n\t\t((button: HTMLButtonElement) => void))\n\t{\n\t\tif (options == undefined)\n\t\t{\n\t\t\toptions = {} as DialogButtonOptions;\n\t\t}\n\n\t\tif (options.constructor === Function)\n\t\t{\n\t\t\toptions = { callback: options } as DialogButtonOptions;\n\t\t}\n\n\t\tconst buttonOptions = options as DialogButtonOptions;\n\t\tconst button = document.createElement(\"button\");\n\t\tbutton.className = \"litebutton\";\n\n\t\tif (name != undefined) { button.innerHTML = name; }\n\t\tif (typeof buttonOptions.className == 'string')\n\t\t{\n\t\t\tbutton.className += \" \" + buttonOptions.className;\n\t\t}\n\n\t\tthis.root?.querySelector(\".panel-footer\")!.appendChild(button);\n\n\t\tconst buttonCallback = () =>\n\t\t{\n\t\t\tif (buttonOptions.callback)\n\t\t\t{\n\t\t\t\tbuttonOptions.callback(button);\n\t\t\t}\n\n\t\t\tif (buttonOptions.close)\n\t\t\t{\n\t\t\t\tthis.close();\n\t\t\t}\n\t\t};\n\t\tbutton.addEventListener(\"click\", buttonCallback.bind(button));\n\n\t\treturn button;\n\t}\n\n\t/**\n\t * Destroys the dialog.\n\t */\n\tclose()\n\t{\n\t\tLiteGUI.remove(this.root);\n\t\tLiteGUI.trigger(this.root, \"closed\", this);\n\t\tif (this.onClose) { this.onClose(); }\n\t\tif (this._dialogWindow)\n\t\t{\n\t\t\tthis._dialogWindow.close();\n\t\t\tthis._dialogWindow = undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Highlights the dialog.\n\t * @param {number} [delay] The duration of the highlight in milliseconds.\n\t */\n\thighlight(delay: number = 100)\n\t{\n\t\tthis.root.style.outline = \"1px solid white\";\n\t\tconst doc = this.root.ownerDocument;\n\t\tconst w = doc.defaultView ?? doc.parentWindow;\n\t\tw?.focus();\n\t\tsetTimeout((() =>\n\t\t{\n\t\t\tthis.root.style.outline = null!;\n\t\t}), delay);\n\t}\n\n\t/**\n\t * Minimizes the dialog.\n\t */\n\tminimize()\n\t{\n\t\tif (this._minimized.length) { return; }\n\n\t\t/* This.minimized = true; */\n\t\tthis._oldBox = this.root?.getBoundingClientRect();\n\n\t\tif (!(this.root.querySelector(\".content\") as HTMLElement)) { return; }\n\t\t(this.root.querySelector(\".content\") as HTMLElement).style.display = \"none\";\n\n\t\tconst minimizeButton = this.root.querySelector(\".minimize-button\") as HTMLElement;\n\t\tif (minimizeButton) { minimizeButton.style.display = \"none\"; }\n\n\t\tconst maximizeButton = this.root.querySelector(\".maximize-button\") as HTMLElement;\n\t\tif (maximizeButton) { maximizeButton.style.display = \"\"; }\n\n\t\tthis.root.style.width = LiteGUI.Dialog.MINIMIZED_WIDTH + \"px\";\n\n\t\tconst closeCallback = (_e: Event): void =>\n\t\t{\n\t\t\tconst el = _e.target as unknown as Dialog;\n\t\t\tthis._minimized.splice(this._minimized.indexOf(el), 1);\n\t\t\tthis.arrangeMinimized();\n\t\t};\n\t\tLiteGUI.bind(this.root, \"closed\", closeCallback);\n\n\t\tthis._minimized.push(this);\n\t\tthis.arrangeMinimized();\n\n\n\t\tLiteGUI.trigger(this.root, \"minimizing\");\n\t}\n\n\t/**\n\t * Arranges the minimized dialogs.\n\t */\n\tarrangeMinimized()\n\t{\n\t\tfor (const i in this._minimized)\n\t\t{\n\t\t\tconst dialog = this._minimized[i];\n\t\t\tconst parent = dialog.root.parentNode as Element;\n\t\t\tconst pos = (parent?.getBoundingClientRect().height ?? 20) - 20;\n\t\t\tdialog.root.style.left = (LiteGUI.Dialog.MINIMIZED_WIDTH * parseInt(i)).toString();\n\t\t\tdialog.root.style.top = pos + \"px\";\n\t\t}\n\t}\n\n\t/**\n\t * Maximizes the dialog.\n\t */\n\tmaximize()\n\t{\n\t\tif (this._minimized.length == 0) { return; }\n\t\tthis._minimized = [];\n\n\t\tthis.content.style.display = \"\";\n\t\tLiteGUI.draggable(this.root);\n\t\tif (this._oldBox)\n\t\t{\n\t\t\tthis.root.style.left = this._oldBox.left + \"px\";\n\t\t\tthis.root.style.top = this._oldBox.top + \"px\";\n\t\t\tthis.root.style.width = this._oldBox.width + \"px\";\n\t\t\tthis.root.style.height = this._oldBox.height + \"px\";\n\t\t}\n\n\t\tconst minimizeButton = this.root.querySelector(\".minimize-button\") as HTMLElement;\n\t\tif (minimizeButton) { minimizeButton.style.display = \"\"; }\n\n\t\tconst maximizeButton = this.root.querySelector(\".maximize-button\") as HTMLElement;\n\t\tif (maximizeButton) { maximizeButton.style.display = \"none\"; }\n\n\t\tthis._minimized.splice(this._minimized.indexOf(this), 1);\n\t\tthis.arrangeMinimized();\n\t\tLiteGUI.trigger(this.root, \"maximizing\");\n\t}\n\n\t/**\n\t * Makes the dialog modal.\n\t */\n\tmakeModal()\n\t{\n\t\tLiteGUI.showModalBackground(true);\n\t\tLiteGUI.modalBackground?.appendChild(this.root); // Add panel\n\t\tthis.show();\n\t\tthis.center();\n\n\t\tLiteGUI.bind(this.root, \"closed\", _onClosed);\n\n\t\tfunction _onClosed()\n\t\t{\n\t\t\tLiteGUI.showModalBackground(false);\n\t\t}\n\t}\n\n\t/**\n\t * Brings the dialog to the front.\n\t */\n\tbringToFront()\n\t{\n\t\tconst parent = this.root.parentNode;\n\t\tif (parent)\n\t\t{\n\t\t\tparent.removeChild(this.root);\n\t\t\tparent.appendChild(this.root);\n\t\t}\n\t}\n\n\t/**\n\t * Shows a hidden dialog.\n\t * @param {CoreDocument} [ownerDocument] The document where the dialog should be shown.\n\t */\n\tshow(ownerDocument?: CoreDocument)\n\t{\n\t\tif (!this.root.parentNode)\n\t\t{\n\t\t\tif (!ownerDocument)\n\t\t\t{\n\t\t\t\tLiteGUI.add(this);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tconst doc = ownerDocument;\n\t\t\t\tconst parent = doc.querySelector(\".litegui-wrap\") ?? doc.body;\n\t\t\t\tparent.appendChild(this.root);\n\t\t\t\tconst w = doc.defaultView ?? doc.parentWindow;\n\t\t\t\tw!.focus();\n\t\t\t}\n\t\t\tthis.center();\n\t\t}\n\n\t\tif (!this._isWindowDetached)\n\t\t{\n\t\t\tthis.root.style.display = \"\";\n\t\t\tLiteGUI.trigger(this.root, \"shown\");\n\t\t}\n\t}\n\n\t/**\n\t * Hides the dialog.\n\t */\n\thide()\n\t{\n\t\tthis.root.style.display = \"none\";\n\t\tLiteGUI.trigger(this.root, \"hidden\");\n\t}\n\n\t/**\n\t * Fades in the dialog.\n\t * @param {number} [time=1000] Duration of the fade-in animation in milliseconds.\n\t * @param {number} [delay=100] Delay before starting the animation in milliseconds.\n\t */\n\tfadeIn(time: number = 1000, delay: number = 100)\n\t{\n\t\tthis.root.style.display = \"\";\n\t\tthis.root.style.opacity = \"0\";\n\t\tsetTimeout(() =>\n\t\t{\n\t\t\tthis.root.style.transition = `opacity ${time}ms`;\n\t\t\tthis.root.style.opacity = \"1\";\n\t\t}, delay);\n\t}\n\n\t/**\n\t * Sets the position of the dialog.\n\t * @param {number} x The x coordinate.\n\t * @param {number} y The y coordinate.\n\t */\n\tsetPosition(x: number, y: number)\n\t{\n\t\tif (!this.root.parentNode)\n\t\t{\n\t\t\tconsole.warn(\"LiteGUI.Dialog: Cannot set position of dialog if it is not in the DOM\");\n\t\t}\n\n\t\tthis.root.style.position = \"absolute\";\n\t\tthis.root.style.left = x + \"px\";\n\t\tthis.root.style.top = y + \"px\";\n\t}\n\n\t/**\n\t * Sets the size of the dialog.\n\t * @param {number} w The width.\n\t * @param {number} h The height.\n\t */\n\tsetSize(w: number, h: number)\n\t{\n\t\tthis.root.style.width = typeof (w) == \"number\" ? w + \"px\" : w;\n\t\tthis.root.style.height = typeof (h) == \"number\" ? h + \"px\" : h;\n\t}\n\n\t/**\n\t * Sets the title of the dialog.\n\t * @param {string} text The new title.\n\t */\n\tsetTitle(text: string)\n\t{\n\t\tif (!this.header) { return; }\n\t\tthis.header.innerHTML = text;\n\t}\n\n\t/**\n\t * Centers the dialog on the web page.\n\t */\n\tcenter()\n\t{\n\t\tif (!this.root.parentNode) { return; }\n\n\t\tthis.root.style.position = \"absolute\";\n\t\tconst width = this.root.offsetWidth;\n\t\tconst height = this.root.offsetHeight;\n\t\tconst parentNode = this.root.parentNode as HTMLElement;\n\t\tconst parentWidth = parentNode.offsetWidth;\n\t\tconst parentHeight = parentNode.offsetHeight;\n\t\tthis.root.style.left = Math.floor((parentWidth - width) * 0.5) + \"px\";\n\t\tthis.root.style.top = Math.floor((parentHeight - height) * 0.5) + \"px\";\n\t}\n\n\t/**\n\t * Adjust the size of the dialog to the size of the content.\n\t * @param {number} [margin=0] Additional margin to add.\n\t * @param {boolean} [skipTimeout] Whether to skip the timeout wait.\n\t */\n\tadjustSize(margin: number = 0, skipTimeout?: boolean)\n\t{\n\t\tthis.content.style.height = \"auto\";\n\n\t\tif (this.content.offsetHeight == 0 && !skipTimeout) // Happens sometimes if the dialog is not yet visible\n\t\t{\n\t\t\tsetTimeout(() => { this.adjustSize(margin, true); }, 1);\n\t\t\treturn;\n\t\t}\n\n\t\tlet extra = 0;\n\t\tconst footer = this.root.querySelector(\".panel-footer\") as HTMLElement;\n\t\tif (footer) { extra += footer.offsetHeight; }\n\n\t\tconst width = this.content.offsetWidth;\n\t\tconst height = this.content.offsetHeight + 20 + margin + extra;\n\n\t\tthis.setSize(width, height);\n\t}\n\n\t/**\n\t * Clears the content of the dialog.\n\t */\n\tclear()\n\t{\n\t\tthis.content.innerHTML = \"\";\n\t}\n\n\t/**\n\t * Detaches the window from the DOM.\n\t * @param {() => void} [onComplete] Callback executed when detachment is complete.\n\t * @param {() => void} [onClose] Callback executed when the new window is closed.\n\t * @returns {Window | undefined} The created window object or undefined if failed.\n\t */\n\tdetachWindow(onComplete?: () => void, onClose?: () => void): Window | undefined\n\t{\n\t\tif (this._minimized.length > 0)\n\t\t{\n\t\t\tthis.maximize();\n\t\t}\n\t\tif (this._dialogWindow)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\t// Create window\n\t\tconst rect = this.root!.getClientRects()[0];\n\t\tconst w = rect.width;\n\t\tconst h = rect.height;\n\t\tlet title = \"Window\";\n\t\tif (this.header)\n\t\t{\n\t\t\ttitle = this.header.textContent ?? '';\n\t\t}\n\n\t\tconst dialogWindow = window.open(\"\", \"\", \"width=\" + w + \", height=\" + h + \", location=no, status=no, menubar=no, titlebar=no, fullscreen=yes\") as Window;\n\t\tdialogWindow.document.writeln(\"<head><title>\" + title + \"</title>\");\n\t\tthis._dialogWindow = dialogWindow;\n\n\t\t// Transfer style\n\t\tconst styles = document.querySelectorAll(\"link[rel='stylesheet'],style\");\n\t\tfor (let i = 0; i < styles.length; i++)\n\t\t{ dialogWindow.document.writeln(styles[i].outerHTML); }\n\t\tdialogWindow.document.writeln(\"</head><body></body>\");\n\t\tdialogWindow.document.close();\n\n\t\t// Closing event\n\t\tdialogWindow.onbeforeunload = function ()\n\t\t{\n\t\t\tconst index = LiteGUI.windows.indexOf(dialogWindow);\n\t\t\tif (index != -1) { LiteGUI.windows.splice(index, 1); }\n\t\t\tif (onClose) { onClose(); }\n\t\t};\n\n\t\t// Move the content there\n\t\tdialogWindow.document.body.appendChild(this.content);\n\t\tthis.root!.style.display = \"none\"; // Hide\n\t\tthis._oldHeight = this.content.style.height;\n\t\tthis.content.style.height = \"100%\";\n\n\t\tLiteGUI.windows.push(dialogWindow);\n\n\t\tif (onComplete) { onComplete(); }\n\n\t\treturn dialogWindow;\n\t}\n\n\t/**\n\t * Reattaches the window to the DOM.\n\t * @param {() => void} [onComplete] Callback executed when reattachment is complete.\n\t */\n\treattachWindow(onComplete?: () => void)\n\t{\n\t\tif (!this._dialogWindow) { return; }\n\n\t\tthis.root.appendChild(this.content);\n\t\tthis.root.style.display = \"\"; // Show\n\t\tif (this._oldHeight)\n\t\t{\n\t\t\tthis.content.style.height = this._oldHeight;\n\t\t\tthis._oldHeight = undefined;\n\t\t}\n\n\t\tthis._dialogWindow.close();\n\t\tconst index = LiteGUI.windows.indexOf(this._dialogWindow);\n\t\tif (index != -1) { LiteGUI.windows.splice(index, 1); }\n\t\tthis._dialogWindow = undefined;\n\n\t\tif (onComplete) { onComplete(); }\n\t}\n\n\t/**\n\t * Shows all the dialogs.\n\t */\n\tshowAll()\n\t{\n\t\tconst dialogs = document.body.querySelectorAll(\"litedialog\");\n\t\tfor (let i = 0; i < dialogs.length; i++)\n\t\t{\n\t\t\tconst dialog = dialogs[i] as DialogRoot;\n\t\t\tdialog.dialog?.show();\n\t\t}\n\t}\n\n\t/**\n\t * Hides all the dialogs.\n\t */\n\thideAll()\n\t{\n\t\tconst dialogs = document.body.querySelectorAll(\"litedialog\");\n\t\tfor (let i = 0; i < dialogs.length; i++)\n\t\t{\n\t\t\tconst dialog = dialogs[i] as DialogRoot;\n\t\t\tdialog.dialog?.hide();\n\t\t}\n\t}\n\n\t/**\n\t * Closes all the dialogs.\n\t */\n\tcloseAll()\n\t{\n\t\tconst dialogs = document.body.querySelectorAll(\"litedialog\");\n\t\tfor (let i = 0; i < dialogs.length; i++)\n\t\t{\n\t\t\tconst dialog = dialogs[i] as DialogRoot;\n\t\t\tdialog.dialog?.close();\n\t\t}\n\t}\n}","import { LiteGUIObject } from \"./@types/globals\";\nimport { LiteGUI } from \"./core\";\n\n/**\n * Configuration options for the Dragger widget.\n */\nexport interface DraggerOptions\n{\n\t/**\n\t * Number of decimal places to display.\n\t */\n\tprecision?: number;\n\n\t/**\n\t * Additional CSS class to apply to the dragger element.\n\t */\n\textraClass?: string;\n\n\t/**\n\t * Whether the dragger should take full width.\n\t */\n\tfull?: boolean;\n\n\t/**\n\t * Whether the dragger is disabled.\n\t */\n\tdisabled?: boolean;\n\n\t/**\n\t * Specific class for the dragger element.\n\t */\n\tdraggerClass?: string;\n\n\t/**\n\t * Tab index for the input element.\n\t */\n\ttabIndex?: number;\n\n\t/**\n\t * Unit suffix to display (e.g., \"px\", \"%\").\n\t */\n\tunits?: string;\n\n\t/**\n\t * Whether dragging should be horizontal.\n\t */\n\thorizontal?: boolean;\n\n\t/**\n\t * Whether the dragging response should be linear.\n\t */\n\tlinear?: boolean;\n\n\t/**\n\t * Step size for incrementing/decrementing value.\n\t */\n\tstep?: number;\n\n\t/**\n\t * Minimum allowed value.\n\t */\n\tmin?: number;\n\n\t/**\n\t * Maximum allowed value.\n\t */\n\tmax?: number;\n}\n\n/**\n * Interface extending HTMLDivElement to include a reference to the Dragger instance parts.\n */\nexport interface DraggerRootDivElement extends HTMLDivElement\n{\n\t/**\n\t * Reference to the input element associated with this root.\n\t */\n\tinput?: HTMLInputElement;\n\n\t/**\n\t * Reference to the draggable div element associated with this root.\n\t */\n\tdragger?: DraggerDivElement;\n}\n\n/**\n * Interface extending HTMLDivElement for the draggable area.\n */\nexport interface DraggerDivElement extends HTMLDivElement\n{\n\t/**\n\t * Storage for drag data (e.g., coordinates).\n\t */\n\tdata?: number[];\n}\n\n/** *** DRAGGER **********/\n\n/**\n * Widget that provides a draggable number input.\n * @class Dragger\n * @example\n * ```typescript\n * const dragger = new Dragger(10, { min: 0, max: 100, step: 0.1 });\n * parentElement.appendChild(dragger.root);\n * ```\n */\nexport class Dragger implements LiteGUIObject\n{\n\t/**\n\t * Current value of the dragger.\n\t */\n\tvalue: number;\n\n\t/**\n\t * Root HTML element of the widget.\n\t */\n\troot: DraggerRootDivElement;\n\n\t/**\n\t * Configuration options.\n\t */\n\toptions: DraggerOptions;\n\n\t/**\n\t * Input element displaying the value.\n\t */\n\tinput: HTMLInputElement;\n\n\t/**\n\t * Whether the user is currently dragging.\n\t */\n\tdragging: boolean = false;\n\n\t/**\n\t * Creates an instance of the Dragger widget.\n\t * @param {number} value Initial value.\n\t * @param {DraggerOptions} [options] Configuration options.\n\t */\n\tconstructor(value: number, options?: DraggerOptions)\n\t{\n\t\tvalue = value ?? 0;\n\t\tif (typeof value === \"string\")\n\t\t{\n\t\t\tvalue = parseFloat(value);\n\t\t}\n\t\telse if (typeof value !== \"number\")\n\t\t{\n\t\t\tvalue = 0;\n\t\t}\n\n\t\tthis.value = value;\n\t\tthis.options = options = options ?? {};\n\t\tconst precision = options.precision ?? 3; // Num decimals\n\n\t\tconst element = document.createElement(\"div\") as DraggerRootDivElement;\n\t\telement.className = `dragger ${options.extraClass}`;\n\t\tthis.root = element;\n\n\t\tconst wrap = document.createElement(\"span\");\n\t\twrap.className = `inputfield ${options.extraClass} ${options.full ? \"full\" : \"\"}`;\n\t\tif (options.disabled) { wrap.className += \" disabled\"; }\n\t\telement.appendChild(wrap);\n\n\t\tconst draggerClass = options.draggerClass || \"full\";\n\n\t\tconst input = document.createElement(\"input\");\n\t\tinput.className = `text number ${draggerClass}`;\n\t\tinput.value = value.toFixed(precision) + (options.units ? options.units : \"\");\n\t\tinput.tabIndex = options.tabIndex ?? 0;\n\t\tthis.input = input;\n\t\telement.input = input;\n\n\t\tif (options.disabled) { input.disabled = true; }\n\t\tif (options.tabIndex) { input.tabIndex = options.tabIndex; }\n\t\twrap.appendChild(input);\n\n\t\tinput.addEventListener(\"keydown\", (e: KeyboardEvent) =>\n\t\t{\n\t\t\tconst keyCode = e.key;\n\t\t\t// Arrow key handling\n\t\t\tswitch (keyCode)\n\t\t\t{\n\t\t\tcase \"ArrowUp\":\n\t\t\t\t_onEvent(1, e);\n\t\t\t\tbreak;\n\t\t\tcase \"ArrowDown\":\n\t\t\t\t_onEvent(-1, e);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\treturn true;\n\t\t});\n\n\t\tconst dragger = document.createElement(\"div\") as DraggerDivElement;\n\t\tdragger.className = \"drag_widget\";\n\t\tif (options.disabled) { dragger.className += \" disabled\"; }\n\n\t\twrap.appendChild(dragger);\n\t\telement.dragger = dragger;\n\n\t\tconst _onMouseDown = (e: MouseEvent) =>\n\t\t{\n\t\t\tdocBound = input.ownerDocument;\n\n\t\t\tdocBound.removeEventListener(\"mousemove\", _onMouseMove);\n\t\t\tdocBound.removeEventListener(\"mouseup\", _onMouseUp);\n\n\t\t\tif (!options!.disabled)\n\t\t\t{\n\t\t\t\tif (element.requestPointerLock) { element.requestPointerLock(); }\n\t\t\t\tdocBound.addEventListener(\"mousemove\", _onMouseMove);\n\t\t\t\tdocBound.addEventListener(\"mouseup\", _onMouseUp);\n\n\t\t\t\tdragger.data = [e.screenX, e.screenY];\n\n\t\t\t\tthis.dragging = true;\n\t\t\t\tLiteGUI.trigger(element, \"start_dragging\");\n\t\t\t}\n\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t};\n\n\t\tdragger.addEventListener(\"mousedown\", _onMouseDown);\n\n\t\tconst _onMouseWheel = function (e: WheelEvent)\n\t\t{\n\t\t\tif (document.activeElement !== input) { return; }\n\t\t\tconst delta = (e.deltaY ? -e.deltaY / 3 : 0);\n\t\t\t_onEvent(delta > 0 ? 1 : -1, e);\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t};\n\t\tinput.addEventListener(\"wheel\", _onMouseWheel.bind(input), false);\n\n\t\tlet docBound: Document | null = null;\n\n\t\tfunction _onMouseMove(e: MouseEvent)\n\t\t{\n\t\t\tconst deltaX = e.screenX - (dragger.data ? dragger.data[0] : 0);\n\t\t\tconst deltaY = (dragger.data ? dragger.data[1] : 0) - e.screenY;\n\t\t\tlet diff = [deltaX, deltaY];\n\t\t\tif (e.movementX !== undefined) { diff = [e.movementX, -e.movementY]; }\n\t\t\tdragger.data = [e.screenX, e.screenY];\n\t\t\tconst axis = options!.horizontal ? 0 : 1;\n\t\t\t_onEvent(diff[axis], e);\n\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\treturn false;\n\t\t}\n\n\t\tconst _onMouseUp = (e: MouseEvent) =>\n\t\t{\n\t\t\tthis.dragging = false;\n\t\t\tLiteGUI.trigger(element, \"stop_dragging\");\n\t\t\tconst doc = docBound || document;\n\t\t\tdocBound = null;\n\t\t\tdoc.removeEventListener(\"mousemove\", _onMouseMove);\n\t\t\tdoc.removeEventListener(\"mouseup\", _onMouseUp);\n\t\t\tif (doc.exitPointerLock) { doc.exitPointerLock(); }\n\t\t\tLiteGUI.trigger(dragger, \"blur\");\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\treturn false;\n\t\t};\n\n\t\tfunction _onEvent(v: number, e: KeyboardEvent | MouseEvent | WheelEvent)\n\t\t{\n\t\t\tlet value = v;\n\t\t\tif (!options!.linear)\n\t\t\t{\n\t\t\t\tvalue = value > 0 ? Math.pow(value, 1.2) : Math.pow(Math.abs(value), 1.2) * -1;\n\t\t\t}\n\t\t\tlet scale = (options!.step ? options!.step : 1.0);\n\t\t\tif (e && e.shiftKey)\n\t\t\t{\n\t\t\t\tscale *= 10;\n\t\t\t}\n\t\t\telse if (e && e.ctrlKey)\n\t\t\t{\n\t\t\t\tscale *= 0.1;\n\t\t\t}\n\t\t\tlet result = parseFloat(input.value) + value * scale;\n\t\t\tif (typeof options!.max == \"number\" && result > options!.max)\n\t\t\t{\n\t\t\t\tresult = options!.max;\n\t\t\t}\n\t\t\tif (typeof options!.min == \"number\" && result < options!.min)\n\t\t\t{\n\t\t\t\tresult = options!.min;\n\t\t\t}\n\n\t\t\tinput.value = result.toFixed(precision);\n\t\t\tif (options!.units) { input.value += options!.units; }\n\t\t\tLiteGUI.trigger(input, \"change\");\n\t\t}\n\t}\n\n\t/**\n\t * Sets the range of allowed values.\n\t * @param {number} min Minimum value.\n\t * @param {number} max Maximum value.\n\t */\n\tsetRange(min: number, max: number)\n\t{\n\t\tthis.options.min = min;\n\t\tthis.options.max = max;\n\t}\n\n\t/**\n\t * Sets the value of the dragger.\n\t * @param {string | number} value New value.\n\t * @param {boolean} skipEvent Whether to skip triggering the 'change' event.\n\t */\n\tsetValue(value: string | number, skipEvent: boolean)\n\t{\n\t\tthis.value = typeof value == \"string\" ? parseFloat(value) : value;\n\t\tlet stringValue: string;\n\t\tif (this.options.precision)\n\t\t{\n\t\t\tstringValue = this.value.toFixed(this.options.precision);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tstringValue = this.value.toString();\n\t\t}\n\n\t\tif (this.options.units) { stringValue += this.options.units; }\n\t\tthis.input.value = stringValue;\n\t\tif (!skipEvent) { LiteGUI.trigger(this.input, \"change\"); }\n\t}\n\n\t/**\n\t * Gets the current value of the dragger.\n\t * @returns {number} The current value.\n\t */\n\tgetValue(): number\n\t{\n\t\treturn this.value;\n\t}\n}","import { AddContainerOptions, CreateWidgetOptions, InspectorWidgetTypes, WidgetChangeOptions, InspectorContainer, GenericCreationOptions, PropertyOptions, InspectorWidget, InspectorValue } from \"src/@types/Inspector\";\nimport { Inspector } from \"./inspector\";\nimport { LiteGUI } from \"../core\";\n\n/**\n * Type representing the values that can be edited in the array inspector.\n * It can be a string, number, or a record object.\n */\nexport type InspectorArrayEditableValue = string | number | boolean |\n\tRecord<string, string | number | boolean> | number[] | string[] | boolean[];\n\n/**\n * Interface for the container element of the array widget.\n * Extends the standard InspectorContainer to include value management methods.\n */\nexport interface ArrayWidgetContainer extends InspectorContainer, InspectorWidget\n{\n\t/**\n\t * The current array of values being edited.\n\t */\n\tvalue: InspectorArrayEditableValue[];\n\t/**\n\t * Method to set multiple values at once.\n\t * @param {InspectorArrayEditableValue[]} value The array of values to set.\n\t */\n\tsetValue: (value: InspectorValue, skipEvent?: boolean) => void;\n\t/**\n\t * Method to retrieve the current array of values.\n\t * @returns {InspectorArrayEditableValue[]} The current array of values.\n\t */\n\tgetValue: () => InspectorArrayEditableValue[];\n}\n\n/**\n * Configuration options for creating an array widget.\n */\nexport interface AddArrayOptions extends CreateWidgetOptions, Omit<WidgetChangeOptions, \"callback\">, AddContainerOptions\n{\n\t/**\n\t * The type of data held in the array (e.g., 'string', 'number').\n\t * Defaults to 'string'.\n\t */\n\tdataType?: InspectorWidgetTypes;\n\t/**\n\t * The maximum number of items to display in the array inspector.\n\t * Defaults to 100.\n\t */\n\tmaxItems?: number;\n\t/**\n\t * Configuration options for the widgets created for each item in the array.\n\t */\n\tdataOptions?: GenericCreationOptions;\n\t/**\n\t * Callback function triggered when an item in the array is changed, added, or removed.\n\t * @param value The updated array of values.\n\t * @param index The index of the item that changed, or -1 if an item was removed.\n\t */\n\tcallback?: (value: InspectorArrayEditableValue[], index: number) => void;\n\t/**\n\t * Whether to show the length input field in the controls.\n\t */\n\tshowLength?: boolean;\n}\n\n/**\n * Widget to edit an array of values of a certain type\n * @function AddArray\n * @param {Inspector} that The inspector instance\n * @param {string} name The name/label of the widget\n * @param {InspectorArrayEditableValue[]} value The initial array of values\n * @param {AddArrayOptions} options Configuration options for the widget. Common options include:\n * - `dataType`: The type of every value inside the array (default: \"string\").\n * - `maxItems`: Max number of items to show from the array (default: 100).\n * - `dataOptions`: Options passed to the widget created for each item.\n * - `callback`: Function called when the array changes.\n * @return {ArrayWidgetContainer} The container element of the widget\n */\nexport function AddArray(that: Inspector, name: string, value: InspectorArrayEditableValue[], options: AddArrayOptions = {})\n{\n\tconst type = options.dataType ?? \"string\";\n\tconst maxItems = options.maxItems ?? 100;\n\n\t// Helper for default values\n\tconst getDefaultValueForType = (t: InspectorWidgetTypes) =>\n\t{\n\t\tswitch (t)\n\t\t{\n\t\tcase \"number\":\n\t\tcase \"slide\":\n\t\t\treturn 0;\n\t\tcase \"string\":\n\t\tcase \"text\":\n\t\tcase \"textarea\":\n\t\t\treturn \"\";\n\t\tcase \"boolean\":\n\t\tcase \"checkbox\":\n\t\t\treturn false;\n\t\tcase \"vec2\":\n\t\tcase \"vector2\":\n\t\t\treturn [0, 0];\n\t\tcase \"vec3\":\n\t\tcase \"vector3\":\n\t\t\treturn [0, 0, 0];\n\t\tcase \"vec4\":\n\t\tcase \"vector 4\":\n\t\t\treturn [0, 0, 0, 0];\n\t\tcase \"color\":\n\t\t\treturn [1, 1, 1];\n\t\tdefault:\n\t\t\treturn null;\n\t\t}\n\t};\n\n\t/*\n\t * Create the main widget\n\t * We use createWidget to get the standard wrapper, but we'll populate it manually\n\t */\n\tconst widget = that.createWidget(name, undefined, { ...options, width: \"100%\" }) as ArrayWidgetContainer;\n\twidget.className += \" array-widget\";\n\n\t// Create the header that holds the name and controls\n\tconst header = document.createElement(\"div\");\n\theader.className = \"array-header\";\n\n\t// Name (Label)\n\tconst title = document.createElement(\"span\");\n\ttitle.className = \"wname\";\n\ttitle.innerText = name;\n\ttitle.title = name;\n\tif (options.nameWidth)\n\t{\n\t\ttitle.style.width = LiteGUI.sizeToCSS(options.nameWidth) as string;\n\t}\n\theader.appendChild(title);\n\n\t// Controls Container (Buttons + Input)\n\tconst controls = document.createElement(\"div\");\n\tcontrols.className = \"array-controls\";\n\n\t// +/- Buttons\n\tconst btnPlus = document.createElement(\"button\");\n\tbtnPlus.className = \"litebutton\";\n\tbtnPlus.innerText = \"+\";\n\tbtnPlus.addEventListener(\"click\", () =>\n\t{\n\t\tconst def = getDefaultValueForType(type) ?? \"\";\n\t\tif (Array.isArray(def))\n\t\t{\n\t\t\tvalue.push([...def]);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvalue.push(def);\n\t\t}\n\t\trefresh();\n\t\ttriggerChange(value.length - 1);\n\t});\n\n\tconst btnMinus = document.createElement(\"button\");\n\tbtnMinus.className = \"litebutton\";\n\tbtnMinus.innerText = \"-\";\n\tbtnMinus.addEventListener(\"click\", () =>\n\t{\n\t\tif (value.length > 0)\n\t\t{\n\t\t\tvalue.length = value.length - 1;\n\t\t\trefresh();\n\t\t\ttriggerChange(value.length);\n\t\t}\n\t});\n\n\t// Length Input\n\tlet lengthInput: HTMLInputElement | undefined;\n\n\tcontrols.appendChild(btnPlus);\n\tcontrols.appendChild(btnMinus);\n\n\tif (options.showLength)\n\t{\n\t\tlengthInput = document.createElement(\"input\");\n\t\tlengthInput.type = \"text\";\n\t\tlengthInput.className = \"array-length\";\n\t\tlengthInput.value = value.length.toString();\n\t\tlengthInput.addEventListener(\"change\", (e: Event) =>\n\t\t{\n\t\t\tconst rv = parseInt((e.target as HTMLInputElement).value);\n\t\t\tif (!isNaN(rv))\n\t\t\t{\n\t\t\t\tif (rv > value.length)\n\t\t\t\t{\n\t\t\t\t\tfor (let i = value.length; i < rv; ++i)\n\t\t\t\t\t{\n\t\t\t\t\t\tconst def = getDefaultValueForType(type) ?? \"\";\n\t\t\t\t\t\tif (Array.isArray(def))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvalue.push([...def]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvalue.push(def);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tvalue.length = Math.max(0, rv);\n\t\t\t\t}\n\t\t\t\trefresh();\n\t\t\t\ttriggerChange();\n\t\t\t}\n\t\t});\n\n\t\tcontrols.appendChild(lengthInput);\n\t}\n\n\theader.appendChild(controls);\n\n\twidget.innerHTML = \"\"; // Clear default structure\n\twidget.appendChild(header);\n\n\t// Container for items\n\tconst container = document.createElement(\"div\");\n\tcontainer.className = \"wcontainer array-items\";\n\twidget.value = value;\n\twidget.appendChild(container);\n\n\t// Attach widget to inspector\n\tthat.appendWidget(widget);\n\n\t// Implementation of Logic\n\tconst assign = function (a: { value: InspectorArrayEditableValue[]; index: number }, v: unknown)\n\t{\n\t\ta.value[a.index] = v as InspectorArrayEditableValue;\n\t\ttriggerChange(a.index);\n\t};\n\n\tconst triggerChange = (index: number = -1) =>\n\t{\n\t\tif (lengthInput) { lengthInput.value = value.length.toString(); }\n\t\tif (options.callback)\n\t\t{\n\t\t\toptions.callback(value, index);\n\t\t}\n\t\tthat.onWidgetChange(widget, name, value, options as unknown as WidgetChangeOptions);\n\t};\n\n\tconst refresh = function ()\n\t{\n\t\tconst size = Math.min(value.length, maxItems);\n\t\tif (lengthInput) { lengthInput.value = value.length.toString(); }\n\n\t\tcontainer.innerHTML = \"\";\n\t\tconst oldWidgetsPerRow = that.widgetsPerRow;\n\t\tthat.widgetsPerRow = 1;\n\n\t\tfor (let i = 0; i < size; ++i)\n\t\t{\n\t\t\tif (value[i] === undefined)\n\t\t\t{\n\t\t\t\tconst def = getDefaultValueForType(type) ?? \"\";\n\t\t\t\tif (Array.isArray(def))\n\t\t\t\t{\n\t\t\t\t\tvalue[i] = [...def];\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tvalue[i] = def;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst v: InspectorArrayEditableValue = value[i];\n\n\t\t\tconst row = document.createElement(\"div\");\n\t\t\trow.className = \"array-row\";\n\t\t\trow.innerHTML = `<span class='row-index'>${i}</span><span class='row-cell'></span><button style='width: 30px;' class='litebutton single row-trash'></button>`;\n\t\t\tcontainer.appendChild(row);\n\n\t\t\tconst widgetRowContainer = row.querySelector('.row-cell') as HTMLDivElement;\n\n\t\t\tconst itemOptions: PropertyOptions = {\n\t\t\t\t...options.dataOptions,\n\t\t\t\twidgetParent: widgetRowContainer,\n\t\t\t\tcallback: assign.bind(undefined, { value: value, index: i })\n\t\t\t};\n\n\t\t\tthat.add(type, undefined, v, itemOptions);\n\n\t\t\tconst trashBtn = row.querySelector('.row-trash');\n\t\t\tif (trashBtn)\n\t\t\t{\n\t\t\t\ttrashBtn.addEventListener(\"click\", () =>\n\t\t\t\t{\n\t\t\t\t\tif (value && value.length > i)\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue.splice(i, 1);\n\t\t\t\t\t\trefresh();\n\t\t\t\t\t\ttriggerChange(-1);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tthat.widgetsPerRow = oldWidgetsPerRow;\n\t};\n\n\trefresh();\n\n\twidget.setValue = function (v: InspectorValue)\n\t{\n\t\tif (v === undefined || !Array.isArray(v)) { return; }\n\t\tconst val = v as InspectorArrayEditableValue[];\n\t\tthis.value = val;\n\t\tvalue.length = 0;\n\t\t// Copy to keep reference\n\t\tfor (let i = 0; i < val.length; ++i) {value[i] = val[i];}\n\t\trefresh();\n\t};\n\n\twidget.getValue = function ()\n\t{\n\t\treturn this.value;\n\t};\n\n\treturn widget;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddArray(name: string, value: InspectorArrayEditableValue[], options?: AddArrayOptions): ArrayWidgetContainer;\n\t}\n}\n\nInspector.prototype.addArray = function (name: string, value: InspectorArrayEditableValue[], options?: AddArrayOptions): ArrayWidgetContainer\n{\n\treturn AddArray(this, name, value, options);\n};\n\nInspector.widgetConstructors.array = \"addArray\";","import { CreateWidgetOptions, InspectorValue, InspectorWidget, WidgetChangeOptions } from \"../@types/Inspector\";\nimport { LiteGUI } from \"../core\";\nimport { Inspector } from \"./inspector\";\n\n/**\n * Options for creating a button widget.\n */\nexport interface AddButtonOptions extends CreateWidgetOptions, Omit<WidgetChangeOptions, 'callback'>\n{\n\t/**\n\t * Whether the button should be disabled.\n\t * @default false\n\t */\n\tdisabled?: boolean;\n\t/**\n\t * Whether to use the micro style for the button.\n\t * @default false\n\t */\n\tmicro?: boolean;\n\t/**\n\t * The text to display on the button.\n\t */\n\tbuttonText?: string;\n\t/**\n\t * Callback function to be executed when the button is clicked.\n\t */\n\tcallback?: (value?: string) => void;\n}\n\n/**\n * Interface representing the button widget in the Inspector.\n */\nexport interface InspectorButtonWidget extends InspectorWidget\n{\n\t/**\n\t * Adds a callback for the widget click event.\n\t * @param {(event: Event) => void} callback - The function to call on click.\n\t */\n\twclick: (callback: (event: Event) => void) => void;\n}\n\n/**\n * Creates an HTML button widget with optional name, value, and options.\n * @function AddButton\n * @param {Inspector} that - The Inspector instance.\n * @param {string} [name] - The name of the button.\n * @param {string} [value] - The value of the button (text label).\n * @param {AddButtonOptions | (() => void)} [options] - The options for the button or a callback function.\n * @returns {InspectorButtonWidget} - The created button widget element.\n */\nexport function AddButton(that: Inspector, name?: string, value?: string, options?: AddButtonOptions | (() => void)): InspectorButtonWidget\n{\n\tconst processedOptions = that.processOptions(options) as AddButtonOptions;\n\tvalue = processedOptions.buttonText ?? value;\n\tvalue = value ?? \"\";\n\tname = name ?? value;\n\n\t// Create a valid ID for the widget if one wasn't provided\n\tconst id = that.getValueName(name, processedOptions);\n\tif (!processedOptions.widgetName)\n\t{\n\t\tprocessedOptions.widgetName = id;\n\t}\n\n\tlet buttonClassName = \"\";\n\tif (!name) { buttonClassName = \"single\"; } // Single button without label\n\tif (processedOptions.micro) { buttonClassName += \" micro\"; } // Micro style\n\n\tlet attrs = \"\";\n\tif (processedOptions.disabled) { attrs = \"disabled='disabled'\"; }\n\n\tconst title = processedOptions.title?.toString() ?? \"\";\n\n\t// Create the widget structure\n\tconst element = that.createWidget(name, \"<button tabIndex='\" +\n\t\tthat.tabIndex + \"' \" + attrs + \"></button>\", processedOptions) as InspectorButtonWidget;\n\tthat.tabIndex++;\n\n\t// Configure the button element\n\tconst button = element.querySelector(\"button\") as HTMLButtonElement;\n\tbutton.setAttribute(\"title\", title);\n\tbutton.className = \"litebutton \" + buttonClassName;\n\tbutton.innerHTML = value;\n\n\t// Add click event listener\n\tbutton.addEventListener(\"click\", (event: MouseEvent) =>\n\t{\n\t\tthat.onWidgetChange(element, name, button.innerHTML, processedOptions as unknown as WidgetChangeOptions, false, event);\n\t\tLiteGUI.trigger(button, \"wclick\", value);\n\t});\n\tthat.appendWidget(element, processedOptions);\n\n\telement.wclick = function (callback: (event: Event) => void)\n\t{\n\t\tif (!processedOptions.disabled)\n\t\t{\n\t\t\tLiteGUI.bind(element, \"wclick\", callback);\n\t\t}\n\t};\n\n\telement.setValue = function (value: InspectorValue)\n\t{\n\t\tif (value === undefined || (typeof value !== 'string')) { return; }\n\t\tbutton.innerHTML = value;\n\t};\n\n\telement.disable = function () { button.disabled = true; };\n\telement.enable = function () { button.disabled = false; };\n\n\tthat.processElement(element, processedOptions);\n\treturn element;\n}\n\n/**\n * Creates a widget with multiple HTML buttons.\n * @function AddButtons\n * @param {Inspector} that - The Inspector instance.\n * @param {string} [name] - The name of the widget.\n * @param {string[]} [values] - Array of strings to be displayed on the buttons.\n * @param {AddButtonOptions | ((name: string) => void)} [options] - The options for the buttons or a callback function.\n * @returns {InspectorButtonWidget} - The element containing the buttons.\n */\nexport function AddButtons(that: Inspector, name?: string, values?: string[], options?: AddButtonOptions | ((name: string) => void)): InspectorButtonWidget\n{\n\tconst processedOptions = that.processOptions(options) as AddButtonOptions;\n\tvalues = values ?? [];\n\n\t// Create a valid ID for the widget\n\tconst id = that.getValueName(name, processedOptions);\n\tif (!processedOptions.widgetName)\n\t{\n\t\tprocessedOptions.widgetName = id;\n\t}\n\n\tlet code = \"\";\n\t// Calculate width for each button to fit in the row\n\tconst w = `calc( ${(100 / values.length).toFixed(3)}% - 4px )`;\n\tconst style = `width: ${w}; width: -moz-${w}; width: -webkit-${w}; margin: 2px;`;\n\n\t// Generate HTML for each button\n\tfor (const i in values)\n\t{\n\t\tlet title = \"\";\n\t\tif (processedOptions.title)\n\t\t{\n\t\t\tif (Array.isArray(processedOptions.title))\n\t\t\t{\n\t\t\t\ttitle = processedOptions.title[i];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ttitle = processedOptions.title as string;\n\t\t\t}\n\t\t}\n\t\tcode += `<button class='litebutton' title='${title}' tabIndex='${that.tabIndex}' style='${style}'>${values[i]}</button>`;\n\t\tthat.tabIndex++;\n\t}\n\n\tconst element = that.createWidget(name, code, processedOptions) as InspectorButtonWidget;\n\tconst buttons = element.querySelectorAll(\"button\");\n\n\t// Callback wrapper to handle button clicks\n\tconst buttonCallback = function (button: HTMLButtonElement, evt: PointerEvent)\n\t{\n\t\tthat.onWidgetChange(element, id, button.innerHTML, processedOptions as unknown as WidgetChangeOptions, false, evt);\n\t};\n\n\t// Attach event listeners to all buttons\n\tfor (let i = 0; i < buttons.length; ++i)\n\t{\n\t\tconst button = buttons[i];\n\t\tbutton.addEventListener(\"click\", buttonCallback.bind(undefined, button));\n\t}\n\n\tthat.appendWidget(element, processedOptions);\n\tthat.processElement(element, processedOptions);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddButton(name?: string, value?: string, options?: AddButtonOptions | (() => void)): InspectorButtonWidget;\n\t\taddButtons(name?: string, values?: string[], options?: AddButtonOptions | ((name: string) => void)): InspectorButtonWidget;\n\t}\n}\n\nInspector.prototype.addButton = function (name?: string, value?: string, options?: AddButtonOptions | (() => void)): InspectorButtonWidget\n{\n\treturn AddButton(this, name, value, options);\n};\n\nInspector.prototype.addButtons = function (name?: string, values?: string[], options?: AddButtonOptions | ((name: string) => void)): InspectorButtonWidget\n{\n\treturn AddButtons(this, name, values, options);\n};\n\nInspector.widgetConstructors.button = \"addButton\";\nInspector.widgetConstructors.buttons = \"addButtons\";\n","import { CreateWidgetOptions, InspectorActiveWidget, InspectorValue, WidgetChangeOptions } from \"../@types/Inspector\";\nimport { LiteGUI } from \"../core\";\nimport { Inspector } from \"./inspector\";\n\n/**\n * Options for creating a checkbox widget.\n */\nexport interface AddCheckboxOptions extends CreateWidgetOptions, Omit<WidgetChangeOptions, 'callback'>\n{\n\t/**\n\t * Text to show. If labelOn or labelOff aren't set it will take this value.\n\t */\n\tlabel?: string;\n\n\t/**\n\t * Text to show when the checkbox is 'on'.\n\t */\n\tlabelOn?: string;\n\n\t/**\n\t * Text to show when the checkbox is 'off'.\n\t */\n\tlabelOff?: string;\n\n\t/**\n\t * Callback function to call once the value changes.\n\t */\n\tcallback?: (value: boolean) => void;\n}\n\n/**\n * Interface representing the checkbox widget.\n */\nexport interface InspectorCheckboxWidget extends InspectorActiveWidget\n{\n\t/**\n\t * Updates the value of the checkbox.\n\t * @param {boolean} [value] The new value.\n\t * @param {boolean} [skipEvent] If true, the callback will not be triggered.\n\t */\n\tsetValue: (value?: InspectorValue, skipEvent?: boolean) => void;\n}\n\n/**\n * Widget to edit a boolean value using a checkbox.\n * @function AddCheckbox\n * @param {Inspector} that The Inspector instance.\n * @param {string} name The name/label of the widget.\n * @param {boolean} value The initial boolean value.\n * @param {AddCheckboxOptions} [options] Configuration options for the checkbox.\n * @returns {InspectorCheckboxWidget} The created checkbox widget element.\n */\nexport function AddCheckbox(that: Inspector, name: string, value: boolean, options?: AddCheckboxOptions): InspectorCheckboxWidget\n{\n\tvalue = value ?? false;\n\toptions = options ?? {};\n\tconst valueName = that.getValueName(name, options);\n\tthat.values.set(valueName, value);\n\n\t// Determine labels for on/off states\n\tconst labelOn = options.labelOn ?? options.label ?? \"on\";\n\tconst labelOff = options.labelOff ?? options.label ?? \"off\";\n\tconst label = (value ? labelOn : labelOff);\n\n\t// Create the widget element\n\tconst element = that.createWidget(name,\n\t\t`<span class='inputfield'><span tabIndex='${that.tabIndex}' class='fixed flag checkbox ${value ? \"on\" : \"off\"}'>${label}</span></span>`,\n\t\toptions) as InspectorCheckboxWidget;\n\tthat.tabIndex++;\n\n\t// Event handling for keypress (Space) to toggle checkbox\n\tconst checkbox = element.querySelector(\".wcontent .checkbox\") as HTMLElement;\n\tcheckbox.addEventListener(\"keypress\", (e: KeyboardEvent) =>\n\t{\n\t\tif (e.code === \"Space\" || e.key === \" \") { LiteGUI.trigger(checkbox, \"click\"); }\n\t});\n\n\t// Toggle value on click\n\telement.addEventListener(\"click\", () =>\n\t{\n\t\tvalue = !value;\n\t\telement.querySelector(\"span.flag\")!.innerHTML = value ? labelOn : labelOff;\n\t\tif (value)\n\t\t{\n\t\t\tcheckbox.classList.add(\"on\");\n\t\t}\n\t\telse\n\t\t{\n\t\t\tcheckbox.classList.remove(\"on\");\n\t\t}\n\t\tthat.onWidgetChange(element, valueName, value, options as unknown as WidgetChangeOptions);\n\t});\n\n\telement.getValue = function ()\n\t{\n\t\treturn value;\n\t};\n\n\telement.setValue = (v?: InspectorValue, skipEvent?: boolean) =>\n\t{\n\t\tif (v === undefined || typeof v !== 'boolean') { return; }\n\t\tif (value != v)\n\t\t{\n\t\t\tvalue = v;\n\t\t\tthat.values.set(valueName, v);\n\t\t\tif (!skipEvent)\n\t\t\t{\n\t\t\t\tLiteGUI.trigger(checkbox, \"click\");\n\t\t\t}\n\t\t}\n\t};\n\n\tthat.appendWidget(element, options);\n\tthat.processElement(element, options);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddCheckbox(name: string, value: boolean, options?: AddCheckboxOptions): InspectorCheckboxWidget;\n\t}\n}\n\nInspector.prototype.addCheckbox = function (name: string, value: boolean, options?: AddCheckboxOptions): InspectorCheckboxWidget\n{\n\treturn AddCheckbox(this, name, value, options);\n};\n\nInspector.widgetConstructors.checkbox = \"addCheckbox\";\nInspector.widgetConstructors.boolean = \"addCheckbox\";\n","import { RGBAToHEXA } from \"../utilities\";\nimport { CreateWidgetOptions, InspectorValue, InspectorWidget } from \"../@types/Inspector\";\nimport { LiteGUI } from \"../core\";\nimport { Inspector } from \"./inspector\";\nimport Pickr from \"@simonwep/pickr\";\n\n/**\n * Configuration options for the Color widget.\n */\nexport interface AddColorOptions extends CreateWidgetOptions\n{\n\t/**\n\t * Whether to show the numeric RGB representation alongside the color picker.\n\t */\n\tshowRGB?: boolean;\n\n\t/**\n\t * Callback function triggered when the color changes.\n\t */\n\tcallback?: (value: number[], hex: string) => void;\n\n\t/**\n\t * Alias for callback.\n\t */\n\tonChange?: (value: number[], hex: string) => void;\n\n\t/**\n\t * Whether to enable opacity (alpha) control in the color picker.\n\t */\n\topacityControl?: boolean;\n\n\t/**\n\t * Whether the color picker is disabled.\n\t */\n\tdisabled?: boolean;\n}\n\n/**\n * Adds a color input widget to the Inspector.\n * @function AddColor\n * @param {Inspector} that - The Inspector instance.\n * @param {string} name - The name of the color input.\n * @param {number[]} [value=[0, 0, 0, 255]] - The initial RGBA value of the color input.\n * @param {AddColorOptions} [options] - Additional options for the color input.\n * @returns {InspectorWidget} The created color input widget.\n */\nexport function AddColor(that: Inspector, name: string,\n\tvalue: [number, number, number, number] | [number, number, number] = [0, 0, 0, 255],\n\toptions: AddColorOptions = {})\n{\n\t// Normalize value to RGBA\n\tif (value.length === 3)\n\t{\n\t\tvalue = value.concat(255) as [number, number, number, number];\n\t}\n\tthat.values.set(name, value);\n\tconst processedOptions = that.processOptions(options) as AddColorOptions;\n\n\t// Create the widget HTML structure\n\tlet code = `<div class='input_container' style='display: inline-block; width: calc(100% - 4px);'><input tabIndex='${that.tabIndex}' id='colorpicker-${name}' class='color' value='${value[0]},${value[1]},${value[2]},${value[3]}' ${processedOptions.disabled ? \"disabled\" : \"\"}/></div>`;\n\tthat.tabIndex++;\n\n\tif (processedOptions.showRGB)\n\t{\n\t\tcode += `<span class='rgb-color'>${Inspector.parseColor(value.concat() as [number, number, number, number])}</span>`;\n\t}\n\tconst element = that.createWidget(name, code, processedOptions) as InspectorWidget;\n\tthat.appendWidget(element, processedOptions); // Add now or won't work\n\n\tconst input_element = element.querySelector(\"input.color\") as HTMLInputElement;\n\n\t// Pickr setup and initialization\n\tconst pickr = new Pickr({\n\t\tel: input_element,\n\t\ttheme: 'nano', // Or 'classic', or 'monolith', or 'nano'\n\t\tdefault: RGBAToHEXA(value),\n\t\tcomponents: {\n\t\t\t// Main components\n\t\t\tpreview: true,\n\t\t\topacity: processedOptions.opacityControl ?? false,\n\t\t\thue: true,\n\n\t\t\t// Input / output Options\n\t\t\tinteraction: {\n\t\t\t\thex: true,\n\t\t\t\trgba: true,\n\t\t\t\thsla: false,\n\t\t\t\thsva: false,\n\t\t\t\tcmyk: false,\n\t\t\t\tinput: true,\n\t\t\t\tclear: false,\n\t\t\t\tcancel: true,\n\t\t\t\tsave: true\n\t\t\t}\n\t\t},\n\t\tposition: 'bottom-start',\n\t\tdisabled: processedOptions.disabled\n\t});\n\n\t// Helper to update widget state from Pickr events\n\tconst _updateFromPickr = (color: Pickr.HSVaColor) =>\n\t{\n\t\t// Color is a Pickr color object\n\t\tif (!color) {return;}\n\n\t\tconst rgba = color.toRGBA(); // Returns [r, g, b, a]\n\t\trgba[3] = rgba[3] * 255;\n\t\tconst hex = color.toHEXA().toString();\n\n\t\tconst rgbelement = element.querySelector(\".rgb-color\");\n\t\tif (rgbelement)\n\t\t{\n\t\t\trgbelement.innerHTML = Inspector.parseColor(\n\t\t\t\trgba.concat() as [number, number, number, number]);\n\t\t}\n\n\t\tthat.values.set(name, rgba.concat());\n\n\t\t// Trigger callbacks and events\n\t\tconst event_data = [rgba.concat(), hex];\n\n\t\tLiteGUI.trigger(element, \"wbeforechange\", event_data);\n\n\t\tif (processedOptions.callback)\n\t\t{\n\t\t\tprocessedOptions.callback.call(element, rgba.concat(), hex);\n\t\t}\n\t\telse if (processedOptions.onChange)\n\t\t{\n\t\t\tprocessedOptions.onChange.call(element, rgba.concat(), hex);\n\t\t}\n\n\t\tLiteGUI.trigger(element, \"wchange\", event_data);\n\t\tif (that.onChange) { that.onChange(name, rgba.concat(), element); }\n\t};\n\n\t// Save event listener\n\tpickr.on('save', (color: Pickr.HSVaColor) =>\n\t{\n\t\t_updateFromPickr(color);\n\t\tpickr.hide();\n\t});\n\n\t// Change event listener (handling dragging)\n\tpickr.on('change', (color: Pickr.HSVaColor) =>\n\t{\n\t\t// Use this for \"dragging\" / immediate updates\n\t\t_updateFromPickr(color);\n\t});\n\n\t// Handle external value updates\n\telement.setValue = function (v: InspectorValue, skipEvent?: boolean)\n\t{\n\t\tif (v === undefined || !Array.isArray(v) || v.length < 3) { return; }\n\t\tconst val = v as number[];\n\t\tconst cssVal = `rgba(${val[0]},${val[1]},${val[2]},${(val.length > 3 ? val[3] : 255)})`;\n\t\tpickr.setColor(cssVal);\n\n\t\tif (!skipEvent)\n\t\t{\n\t\t\tconst color = pickr.getColor();\n\t\t\t_updateFromPickr(color);\n\t\t}\n\t};\n\n\telement.getValue = function ()\n\t{\n\t\treturn that.values.get(name);\n\t};\n\n\tthat.processElement(element, processedOptions);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddColor(name: string, value?: [number, number, number, number] | [number, number, number], options?: AddColorOptions): InspectorWidget;\n\t}\n}\n\nInspector.prototype.addColor = function (name: string, value?: [number, number, number, number] | [number, number, number], options?: AddColorOptions): InspectorWidget\n{\n\treturn AddColor(this, name, value, options);\n};\n\nInspector.widgetConstructors.color = \"addColor\";","import { LiteGUI } from \"../core\";\nimport { CreateWidgetOptions, InspectorActiveWidget, InspectorValue, InspectorWidget, WidgetChangeOptions } from \"../@types/Inspector\";\nimport { Inspector } from \"./inspector\";\n\n/**\n * Options for creating a Combo widget.\n */\nexport interface AddComboOptions extends CreateWidgetOptions, Omit<WidgetChangeOptions, 'callback'>\n{\n\t/**\n\t * List of values to be displayed in the dropdown or as buttons.\n\t */\n\tvalues?: string[];\n\n\t/**\n\t * Whether the widget is disabled.\n\t */\n\tdisabled?: boolean;\n\n\t/**\n\t * Callback function triggered when the value changes.\n\t */\n\tcallback?: (value: string) => void;\n}\n\n/**\n * Interface for the Combo widget element.\n */\nexport interface InspectorComboWidget extends InspectorActiveWidget\n{\n\t/**\n\t * Updates the values of the dropdown options.\n\t * @param {string[]} values Array of string values for the options.\n\t * @param {string} [selected] Optional value to be selected.\n\t */\n\tsetOptionValues: (values: string[], selected?: string) => void;\n\n\t/**\n\t * Sets the selected value of the combo box.\n\t * @param {string} value The value to select.\n\t * @param {boolean} [skipEvent] Whether to skip triggering the change event.\n\t */\n\tsetValue: (value: InspectorValue, skipEvent?: boolean) => void;\n}\n\n/**\n * Interface for the Combo Buttons widget element.\n */\nexport interface InspectorComboButtonsWidget extends InspectorWidget\n{\n\t/**\n\t * List of button elements contained in the widget.\n\t */\n\tbuttons: NodeListOf<HTMLButtonElement>;\n}\n\n/**\n * Adds a dropdown combo widget to the Inspector.\n * @function AddCombo\n * @param {Inspector} that - The Inspector instance.\n * @param {string} [name] - The name/label of the widget.\n * @param {string} [value=''] - The initial selected value.\n * @param {AddComboOptions} [options] - Configuration options.\n * @param {string[]} [options.values] - List of values (strings) to populate the dropdown.\n * @param {boolean} [options.disabled] - If true, the widget is disabled.\n * @param {Function} [options.callback] - Function to call on change.\n * @returns {InspectorComboWidget} The created combo widget.\n */\nexport function AddCombo(that: Inspector, name?: string, value?: string, options?: AddComboOptions): InspectorComboWidget\n{\n\tvalue = value ?? '';\n\toptions = options ?? {};\n\tconst valueName = that.getValueName(name, options);\n\tthat.values.set(valueName, value);\n\n\t// Increment tabindex for accessibility\n\tthat.tabIndex++;\n\n\tconst isDisabledText = options.disabled ? \"disabled\" : \"\";\n\tconst element = that.createWidget(name, \"<span class='inputfield full inputcombo \" +\n\t\tisDisabledText + \"'></span>\", options) as InspectorComboWidget;\n\telement.options = options;\n\n\tlet values: string[] = options.values ?? [];\n\n\t// Create inner structure\n\tconst code = \"<select tabIndex='\" + that.tabIndex + \"' \" + isDisabledText + \" class='\" + isDisabledText + \"'></select>\";\n\telement.querySelector(\"span.inputcombo\")!.innerHTML = code;\n\tsetValues(values);\n\n\tlet _stopEvent = false; // Used internally\n\n\t// Event listener for change\n\tconst select = element.querySelector(\".wcontent select\") as HTMLSelectElement;\n\tselect.addEventListener(\"change\", (e: Event) =>\n\t{\n\t\tconst v = (e.target as HTMLSelectElement).value;\n\t\tvalue = v;\n\t\tif (_stopEvent) { return; }\n\t\tthat.onWidgetChange(element, valueName, value, options as unknown as WidgetChangeOptions);\n\t});\n\n\telement.getValue = function ()\n\t{\n\t\treturn value;\n\t};\n\n\telement.setValue = function (v: InspectorValue, skipEvent?: boolean)\n\t{\n\t\tif (v === undefined || typeof v !== 'string') { return; }\n\t\tvalue = v;\n\t\tconst select = element.querySelector(\"select\") as HTMLSelectElement;\n\t\tconst items = select.querySelectorAll(\"option\");\n\t\tconst index = values.indexOf(v) ?? -1;\n\t\tif (index == -1) { return; }\n\n\t\t_stopEvent = skipEvent ?? false;\n\n\t\t// Update DOM elements to reflect value\n\t\tfor (const i in items)\n\t\t{\n\t\t\tconst item = items[i];\n\t\t\tif (!item || !item.dataset) { continue; }\n\t\t\tconst setIndex = item.dataset['index'];\n\t\t\tif (setIndex && parseFloat(setIndex) == index)\n\t\t\t{\n\t\t\t\titem.selected = true;\n\t\t\t\tselect.selectedIndex = index;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\titem.removeAttribute(\"selected\");\n\t\t\t}\n\t\t}\n\n\t\t_stopEvent = false;\n\t};\n\n\tfunction setValues(v: string[], selected?: string)\n\t{\n\t\tvalues = v;\n\t\tif (selected) { value = selected; }\n\t\tlet code = \"\";\n\t\tfor (const i in values)\n\t\t{\n\t\t\tcode += \"<option value='\" + i + \"' \" + (values[i] == value ? \" selected\" : \"\") + \" data-index='\" + i + \"'>\" + values[i] + \"</option>\";\n\t\t}\n\t\telement.querySelector(\"select\")!.innerHTML = code;\n\t}\n\n\telement.setOptionValues = setValues;\n\n\tthat.appendWidget(element, options);\n\tthat.processElement(element, options);\n\treturn element;\n}\n\n/**\n * Adds a widget with an array of buttons, where clicking one selects it.\n * @function AddComboButtons\n * @param {Inspector} that - The Inspector instance.\n * @param {string} [name] - The name/label of the widget.\n * @param {string} [value=''] - The initial selected value.\n * @param {AddComboOptions} [options] - Configuration options.\n * @param {string[]} [options.values] - List of values for the buttons.\n * @returns {InspectorComboButtonsWidget} The created combo buttons widget.\n */\nexport function AddComboButtons(that: Inspector, name?: string, value?: string, options?: AddComboOptions): InspectorComboButtonsWidget\n{\n\tvalue = value ?? '';\n\toptions = options ?? {};\n\tconst valueName = that.getValueName(name, options);\n\tthat.values.set(valueName, value);\n\n\tlet code = \"\";\n\tif (options.values)\n\t{\n\t\tfor (const i in options.values)\n\t\t{\n\t\t\tcode += `<button class='wcombobutton ${value == options.values[i] ? \"selected\" : \"\"}' data-name='${options.values[i]}'>${options.values[i]}</button>`;\n\t\t}\n\t}\n\n\t// Generate buttons for each value\n\tconst element = that.createWidget(name, code, options) as InspectorComboButtonsWidget;\n\tconst buttons = element.querySelectorAll(\".wcontent button\") as NodeListOf<HTMLButtonElement>;\n\telement.buttons = buttons;\n\n\t// Bind click events\n\tLiteGUI.bind(buttons, \"click\", (e: Event) =>\n\t{\n\t\tconst el = e.target as HTMLElement;\n\t\tconst buttonName = el.innerHTML;\n\t\tthat.values.set(valueName, buttonName);\n\n\t\tconst elements = element.querySelectorAll(\".selected\");\n\t\tfor (let i = 0; i < elements.length; ++i)\n\t\t{\n\t\t\telements[i].classList.remove(\"selected\");\n\t\t}\n\t\tel.classList.add(\"selected\");\n\n\t\tthat.onWidgetChange(element, valueName, buttonName, options as unknown as WidgetChangeOptions);\n\t});\n\n\tthat.appendWidget(element, options);\n\tthat.processElement(element, options);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddCombo(name?: string, value?: string, options?: AddComboOptions): InspectorComboWidget;\n\t\taddComboButtons(name?: string, value?: string, options?: AddComboOptions): InspectorComboButtonsWidget;\n\t}\n}\n\nInspector.prototype.addCombo = function (name?: string, value?: string, options?: AddComboOptions): InspectorComboWidget\n{\n\treturn AddCombo(this, name, value, options);\n};\n\nInspector.prototype.addComboButtons = function (name?: string, value?: string, options?: AddComboOptions): InspectorComboButtonsWidget\n{\n\treturn AddComboButtons(this, name, value, options);\n};\n\nInspector.widgetConstructors.combo = \"addCombo\";\nInspector.widgetConstructors.enum = \"addCombo\";\nInspector.widgetConstructors.dropdown = \"addCombo\";\nInspector.widgetConstructors.combobuttons = \"addComboButtons\";\n\n","import { TreeData } from \"../widgets/tree\";\nimport { CreateWidgetOptions } from \"../@types/Inspector\";\nimport { Inspector } from \"./inspector\";\nimport { InspectorTreeWidget } from \"./tree\";\n\n/**\n * Adds a tree widget to the inspector using arrays of strings as their tree data.\n * @function AddDataTree\n * @param {Inspector} that - The reference to the inspector.\n * @param {string} name - The name of the tree widget.\n * @param {TreeData} value - The tree data object to display.\n * @param {CreateWidgetOptions} [options] - Configuration options for the widget.\n * @returns {InspectorTreeWidget} The created tree widget instance.\n */\nexport function AddDataTree(that: Inspector, name: string, value: TreeData, options?: CreateWidgetOptions)\n{\n\t// Create the widget structure\n\tconst element = that.createWidget(name, \"<div class='wtree'></div>\", options) as InspectorTreeWidget;\n\n\tconst treeRoot: HTMLDivElement | null = element.querySelector(\".wtree\");\n\tif (!treeRoot) { return; }\n\n\t// Recursively build the tree nodes\n\t_Recursive(treeRoot, value);\n\n\t// Apply height and overflow styles if specified\n\tif (options && options.height)\n\t{\n\t\ttreeRoot.style.height = typeof (options.height) == \"number\" ? options.height + \"px\" : options.height;\n\t\ttreeRoot.style.overflow = \"auto\";\n\t}\n\n\t/**\n\t * Recursively builds the DOM structure for the tree data.\n\t * @function innerRecursive\n\t * @param {HTMLDivElement} rootNode - The parent DOM element to append nodes to.\n\t * @param {TreeData} data - The current level of tree data to process.\n\t */\n\tfunction _Recursive(rootNode: HTMLDivElement, data: TreeData)\n\t{\n\t\tfor (const i in data)\n\t\t{\n\t\t\t// Create container for the tree node\n\t\t\tconst e = document.createElement(\"div\");\n\t\t\te.className = \"treenode\";\n\t\t\tconst value = data[i];\n\n\t\t\t// Handle object values (nested nodes)\n\t\t\tif (typeof value == \"object\" && !Array.isArray(value))\n\t\t\t{\n\t\t\t\te.innerHTML = `<span class='itemname'>${i}</span><span class='itemcontent'></span>`;\n\t\t\t\tconst content: HTMLDivElement | null = e.querySelector(\".itemcontent\");\n\t\t\t\tif (content == null) { throw new Error(\"TreeNode wasn't properly created\"); }\n\t\t\t\t_Recursive(content, value as TreeData);\n\t\t\t}\n\t\t\t// Handle primitive values (leaf nodes)\n\t\t\telse\n\t\t\t{\n\t\t\t\te.innerHTML = `<span class='itemname'>${i}</span><span class='itemvalue'>${value}</span>`;\n\t\t\t}\n\t\t\trootNode.appendChild(e);\n\t\t}\n\t}\n\n\tthat.appendWidget(element, options);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddDataTree(name: string, value: TreeData, options?: CreateWidgetOptions): InspectorTreeWidget | undefined;\n\t}\n}\n\nInspector.prototype.addDataTree = function (name: string, value: TreeData, options?: CreateWidgetOptions): InspectorTreeWidget | undefined\n{\n\treturn AddDataTree(this, name, value, options);\n};\n\nInspector.widgetConstructors.datatable = \"addDataTree\";","import { CreateWidgetOptions, WidgetChangeOptions } from \"../@types/Inspector\";\nimport { Inspector } from \"./inspector\";\n\n/**\n * Interface representing the response data when a file is added.\n * Extends the standard File interface.\n */\nexport interface FileAddedResponse extends File\n{\n\t/**\n\t * The list of files selected.\n\t */\n\tfiles: FileList,\n\t/**\n\t * The generated object URL for the file, if requested.\n\t */\n\turl?: string,\n\t/**\n\t * The file content, read as binary, data URL, or text.\n\t */\n\tdata?: string | ArrayBuffer | null\n}\n\n/**\n * Configuration options for the file input widget.\n */\nexport interface AddFileOptions extends CreateWidgetOptions, WidgetChangeOptions\n{\n\t/**\n\t * The types of files that the server accepts (e.g., \".jpg, .png\" or [\"image/*\"]).\n\t */\n\taccept?: string | string[];\n\t/**\n\t * If true, creates an object URL for the selected file.\n\t */\n\tgenerateURL?: boolean;\n\t/**\n\t * Format to read the file content in.\n\t */\n\treadFile?: \"binary\" | \"data_url\" | string;\n\t/**\n\t * Callback function to execute when a file is added/changed.\n\t */\n\tcallbacks?: (data: FileAddedResponse) => void;\n}\n\n/**\n * Adds a file input widget to the inspector.\n * @function AddFile\n * @param {Inspector} that The inspector instance.\n * @param {string} name The name of the widget.\n * @param {string} [value] The initial value (filename).\n * @param {((data: FileAddedResponse) => void) | AddFileOptions} [options] The options for the widget or a callback.\n * @returns {HTMLElement} The created widget element.\n */\nexport function AddFile(that: Inspector, name: string, value?: string, options?: ((data: FileAddedResponse) => void) | AddFileOptions)\n{\n\tthat.values.set(name, { name: value ?? \"\" });\n\tconst processedOptions: AddFileOptions = that.processOptions(options);\n\n\t// Create the widget HTML structure\n\tconst element = that.createWidget(name, \"<span class='inputfield full whidden' style='width: calc(100% - 26px)'><span class='filename'></span></span><button class='litebutton' style='width:20px; margin-left: 2px;'>...</button><input type='file' size='100' class='file' value='\" + value + \"'/>\", processedOptions);\n\tconst content = element.querySelector(\".wcontent\") as HTMLElement;\n\tcontent.style.position = \"relative\";\n\tconst input = element.querySelector(\".wcontent input\") as HTMLInputElement;\n\n\t// Set accept attribute if provided\n\tif (processedOptions.accept)\n\t{\n\t\tinput.accept = typeof (processedOptions.accept) === \"string\" ? processedOptions.accept : processedOptions.accept.toString();\n\t}\n\tconst filenameEl = element.querySelector(\".wcontent .filename\") as HTMLElement;\n\tif (value) { filenameEl.innerText = value; }\n\n\t// Handle file selection change\n\tinput.addEventListener(\"change\", (e: Event) =>\n\t{\n\t\tif (!e || !e.target) { return; }\n\t\tconst target = e.target as HTMLInputElement;\n\t\tif (!target.files) { return; }\n\t\tif (!target.files.length)\n\t\t{\n\t\t\t// Clear filename if no file selected\n\t\t\tfilenameEl.innerText = \"\";\n\t\t\tthat.onWidgetChange(element, name, undefined, processedOptions);\n\t\t\treturn;\n\t\t}\n\n\t\tconst result = target.files[0] as FileAddedResponse;\n\t\tresult.files = target.files;\n\t\tif (processedOptions.generateURL) { result.url = URL.createObjectURL(target.files[0]); }\n\t\tfilenameEl.innerText = result.name;\n\n\t\t// Read file content if requested\n\t\tif (processedOptions.readFile)\n\t\t{\n\t\t\tconst reader = new FileReader();\n\t\t\treader.onload = (e2: ProgressEvent<FileReader>) =>\n\t\t\t{\n\t\t\t\tresult.data = e2.target?.result;\n\t\t\t\tthat.onWidgetChange(element, name, result, processedOptions);\n\t\t\t};\n\t\t\tif (processedOptions.readFile == \"binary\")\n\t\t\t{\n\t\t\t\treader.readAsArrayBuffer(result);\n\t\t\t}\n\t\t\telse if (processedOptions.readFile == \"data_url\")\n\t\t\t{\n\t\t\t\treader.readAsDataURL(result);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treader.readAsText(result);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthat.onWidgetChange(element, name, result, processedOptions);\n\t\t}\n\t});\n\n\tthat.appendWidget(element, processedOptions);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddFile(name: string, value?: string, options?: ((data: FileAddedResponse) => void) | AddFileOptions): HTMLElement;\n\t}\n}\n\nInspector.prototype.addFile = function (name: string, value?: string, options?: ((data: FileAddedResponse) => void) | AddFileOptions): HTMLElement\n{\n\treturn AddFile(this, name, value, options);\n};\n\nInspector.widgetConstructors.file = \"addFile\";","import { AddCheckboxOptions, InspectorCheckboxWidget } from \"./checkbox\";\nimport { Inspector } from \"./inspector\";\n\nexport interface AddFlagsOptions\n{\n\t/**\n\t * Default options applied to all checkboxes unless overridden.\n\t */\n\tdefault: AddCheckboxOptions,\n\t/**\n\t * Specific options for individual flags, keyed by flag name.\n\t */\n\t[key: string]: AddCheckboxOptions\n}\n\n/**\n * Creates a set of checkboxes to edit multiple boolean values (flags).\n * @function AddFlags\n * @param {Inspector} that - The Inspector instance.\n * @param {{ [key: string]: boolean }} flags - Object containing the boolean flags to edit.\n * @param {{ [key: string]: (boolean | undefined) }} [forceFlags] - Optional object with extra flags to include, even if not present in the main flags object.\n * @param {AddCheckboxOptions | AddFlagsOptions} [options] - Configuration options. Can be a single options object for all, or an AddFlagsOptions map.\n * @returns {InspectorCheckboxWidget[]} An array of the created checkbox widgets.\n */\nexport function AddFlags(that: Inspector, flags: { [key: string]: boolean }, forceFlags?: { [key: string]: (boolean | undefined) },\n\toptions?: AddCheckboxOptions | AddFlagsOptions): InspectorCheckboxWidget[]\n{\n\toptions = options ?? {};\n\n\t// Create a local copy of flags to iterate over, ensuring we capture all keys\n\tconst f: { [key: string]: boolean } = {};\n\tfor (const i in flags)\n\t{\n\t\tf[i] = flags[i];\n\t}\n\n\t// Merge forced flags if provided\n\tif (forceFlags)\n\t{\n\t\tfor (const i in forceFlags)\n\t\t{\n\t\t\t// Only add if not already present in the source flags\n\t\t\tif (typeof f[i] == \"undefined\")\n\t\t\t{\n\t\t\t\tf[i] = forceFlags[i] ?? false;\n\t\t\t}\n\t\t}\n\t}\n\n\tlet defaultOpt: AddCheckboxOptions | undefined = undefined;\n\t// Check if options contains a 'default' configuration\n\tif (\"default\" in options)\n\t{\n\t\tdefaultOpt = (options as AddFlagsOptions).default;\n\t}\n\n\tconst result: InspectorCheckboxWidget[] = [];\n\tfor (const i in f)\n\t{\n\t\tlet opt: AddCheckboxOptions | undefined = undefined;\n\n\t\t// Determine options for this specific flag\n\t\tif (i in options)\n\t\t{\n\t\t\topt = (options as AddFlagsOptions)[i];\n\t\t}\n\t\telse if (defaultOpt)\n\t\t{\n\t\t\topt = defaultOpt;\n\t\t}\n\t\telse\n\t\t{\n\t\t\topt = options as AddCheckboxOptions;\n\t\t}\n\n\t\tconst flagOptions: AddCheckboxOptions = { ...opt };\n\n\t\t// Callback to update the original flags object\n\t\tflagOptions.callback = function (v: boolean)\n\t\t{\n\t\t\tflags[i] = v;\n\t\t};\n\n\t\tresult.push(that.addCheckbox(i, f[i], flagOptions));\n\t}\n\treturn result;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddFlags(flags: { [key: string]: boolean }, forceFlags?: { [key: string]: (boolean | undefined) }, options?: AddCheckboxOptions | AddFlagsOptions): InspectorCheckboxWidget[];\n\t}\n}\n\nInspector.prototype.addFlags = function (flags: { [key: string]: boolean }, forceFlags?: { [key: string]: (boolean | undefined) }, options?: AddCheckboxOptions | AddFlagsOptions): InspectorCheckboxWidget[]\n{\n\treturn AddFlags(this, flags, forceFlags, options);\n};\n\nInspector.widgetConstructors.flags = \"addFlags\";\n","import { LiteGUI } from \"../core\";\nimport { Inspector } from \"./inspector\";\nimport { CreateWidgetOptions, InspectorValue, InspectorWidget, WidgetChangeOptions } from \"../@types/Inspector\";\n\n/**\n * Options for configuring the Icon widget.\n * Extends universal widget options with icon-specific properties.\n */\nexport interface AddIconOptions extends CreateWidgetOptions, Omit<WidgetChangeOptions, 'callback'>\n{\n\t/**\n\t * URL of the image to use as the icon.\n\t */\n\timageURL?: string;\n\t/**\n\t * Size of the icon in pixels (width and height).\n\t */\n\tsize?: number;\n\t/**\n\t * X offset for the background position.\n\t */\n\tx?: number;\n\t/**\n\t * Index to calculate x offset (-index * width).\n\t */\n\tindex?: number;\n\t/**\n\t * If false, the icon acts as a momentary button (blinks) instead of a toggle.\n\t * @default true\n\t */\n\ttoggle?: boolean;\n\t/**\n\t * Callback function triggered when value changes.\n\t */\n\tcallback?: (value: boolean) => void;\n}\n\n/**\n * Interface representing the DOM element for an Icon widget.\n */\nexport interface InspectorIconWidget extends InspectorWidget\n{\n\t/**\n\t * Updates the value (state) of the icon.\n\t * @param {boolean} value New value (true for active/toggled).\n\t * @param {boolean} [skipEvent] If true, prevents triggering the change event.\n\t */\n\tsetValue: (value: InspectorValue, skipEvent?: boolean) => void;\n}\n\n\n/**\n * Adds an icon widget to the Inspector.\n * @function AddIcon\n * @param {Inspector} that The Inspector instance calling this function.\n * @param {string} [name] The name/label of the icon widget.\n * @param {boolean} [value] The initial toggle state of the icon.\n * @param {AddIconOptions} [options] Configuration options for the icon.\n * @returns {InspectorIconWidget} The created icon widget element.\n */\nexport function AddIcon(that: Inspector, name?: string,\n\tvalue?: boolean, options?: AddIconOptions): InspectorIconWidget\n{\n\tconst processedOptions = that.processOptions(options) as AddIconOptions;\n\n\t// Initialize defaults\n\tname = name ?? '';\n\tvalue = value ?? false;\n\tconst imgURL = processedOptions.imageURL ?? \"\";\n\tconst width = processedOptions.width ?? processedOptions.size ?? 20;\n\tconst height = processedOptions.height ?? processedOptions.size ?? 20;\n\n\t// Create widget structure\n\tconst element = that.createWidget(name, `<span class='icon' ${processedOptions.title ?\n\t\t`title='${processedOptions.title}'` : \"\"} tabIndex='${that.tabIndex}'></span>`,\n\tprocessedOptions) as InspectorIconWidget;\n\tthat.tabIndex++;\n\tconst content = element.querySelector(\"span.wcontent\") as HTMLElement;\n\tconst icon = element.querySelector(\"span.icon\") as HTMLElement;\n\n\t// Calculate background position\n\tlet x = processedOptions.x ?? 0;\n\tif (processedOptions.index) { x = processedOptions.index * -width; }\n\tconst y = value ? height : 0;\n\n\t// Apply styles to elements\n\telement.style.margin = \"0 2px\";\n\telement.style.padding = \"0\";\n\tcontent.style.margin = \"0\";\n\tcontent.style.padding = \"0\";\n\n\ticon.style.display = \"inline-block\";\n\ticon.style.cursor = \"pointer\";\n\ticon.style.width = `${width}px`;\n\ticon.style.height = `${height}px`;\n\tif (imgURL) { icon.style.backgroundImage = `url('${imgURL}')`; }\n\ticon.style.backgroundSize = \"contain\";\n\ticon.style.backgroundPosition = `${x}px ${y}px`;\n\n\t// Handle user interaction\n\ticon.addEventListener(\"mousedown\", (e: MouseEvent) =>\n\t{\n\t\te.preventDefault();\n\t\tvalue = !value;\n\t\tconst ret = that.onWidgetChange(element, name!, value, processedOptions as unknown as WidgetChangeOptions);\n\t\tLiteGUI.trigger(element, \"wclick\", value);\n\n\t\tif (ret !== undefined) { value = ret; }\n\n\t\tconst y = value ? height : 0;\n\t\ticon.style.backgroundPosition = `${x}px ${y}px`;\n\n\t\t// Momentary switch logic: blink and return to off state if toggle is false\n\t\tif (processedOptions.toggle === false)\n\t\t{\n\t\t\tsetTimeout(() =>\n\t\t\t{\n\t\t\t\ticon.style.backgroundPosition = `${x}px 0px`;\n\t\t\t\tvalue = false;\n\t\t\t}, 200);\n\t\t}\n\n\t});\n\tthat.appendWidget(element, options);\n\n\t// Define public methods\n\telement.setValue = (v: InspectorValue, skipEvent?: boolean) =>\n\t{\n\t\tif (v === undefined || typeof v !== 'boolean') { return; }\n\t\tvalue = v;\n\t\tconst y = value ? height : 0;\n\t\ticon.style.backgroundPosition = `${x}px ${y}px`;\n\t\tif (!skipEvent)\n\t\t{\n\t\t\tthat.onWidgetChange(element, name!, value, processedOptions as unknown as WidgetChangeOptions);\n\t\t}\n\t};\n\telement.getValue = function () { return value; };\n\tthat.processElement(element, processedOptions);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddIcon(name?: string, value?: boolean, options?: AddIconOptions): InspectorIconWidget;\n\t}\n}\n\nInspector.prototype.addIcon = function (name?: string, value?: boolean, options?: AddIconOptions): InspectorIconWidget\n{\n\treturn AddIcon(this, name, value, options);\n};\n\nInspector.widgetConstructors.icon = \"addIcon\";","export * from \"./inspector\";\nexport * from \"./string\";\nexport * from \"./button\";\nexport * from \"./checkbox\";\nexport * from \"./color\";\nexport * from \"./combo\";\nexport * from \"./file\";\nexport * from \"./flag\";\nexport * from \"./icon\";\nexport * from \"./info\";\nexport * from \"./list\";\nexport * from \"./number\";\nexport * from \"./pad\";\nexport * from \"./slider\";\nexport * from \"./stringButton\";\nexport * from \"./tags\";\nexport * from \"./textArea\";\nexport * from \"./vector\";\nexport * from \"./line\";\nexport * from \"./seperator\";\nexport * from \"./tree\";\nexport * from \"./dataTree\";\nexport * from \"./array\";\n","import { CreateWidgetOptions, InspectorActiveWidget, InspectorValue, WidgetChangeOptions } from \"../@types/Inspector\";\nimport { LiteGUI } from \"../core\";\nimport { Inspector } from \"./inspector\";\n\n\n/**\n * Options for creating an Info widget.\n */\nexport interface AddInfoOptions extends CreateWidgetOptions, Omit<WidgetChangeOptions, 'callback'>\n{\n\t/**\n\t * Callback function to execute when the widget is clicked.\n\t */\n\tcallback?: () => void;\n}\n\n/**\n * Interface representing the Info widget, which displays non-interactive HTML content.\n */\nexport interface InspectorInfoWidget extends InspectorActiveWidget\n{\n\t/**\n\t * Appends a node to the content area of the info widget.\n\t * @param {Node} e The node to append.\n\t */\n\tadd: (e: Node) => void;\n\n\t/**\n\t * Updates the HTML content of the info widget.\n\t * @param {string} [value] The new HTML string to display.\n\t */\n\tsetValue: (value?: InspectorValue) => void;\n\n\t/**\n\t * Scrolls the content area to the bottom.\n\t */\n\tscrollToBottom: () => void;\n}\n\n/**\n * Widget to show plain information in HTML (not interactive).\n * @function AddInfo\n *\n * @param {Inspector} that The inspector instance.\n * @param {string} [name] The label name for the widget.\n * @param {string} [value] The HTML content to display.\n * @param {AddInfoOptions} [options] Configuration options.\n * @returns {InspectorInfoWidget} The created widget element.\n */\nexport function AddInfo(that: Inspector, name?: string, value?: string, options?: AddInfoOptions): InspectorInfoWidget\n{\n\tvalue = value ?? '';\n\toptions = options ?? {};\n\n\t// Get unique identifier for the value and store it\n\tconst valueName = that.getValueName(name, options);\n\tthat.values.set(valueName, value);\n\n\tlet element: InspectorInfoWidget | undefined = undefined;\n\n\t// Create widget structure based on whether it has a label\n\tif (name !== undefined)\n\t{\n\t\telement = that.createWidget(name, value, options) as InspectorInfoWidget;\n\t}\n\telse\n\t{\n\t\telement = document.createElement(\"div\") as InspectorInfoWidget;\n\t\tif (options.className) { element.className = options.className; }\n\n\t\telement.innerHTML = `<span class='winfo'>${value}</span>`;\n\t}\n\n\tconst info: HTMLElement = element.querySelector(\".winfo\") ??\n\t\telement.querySelector(\".wcontent\") as HTMLElement;\n\n\tif (options.callback) { element.addEventListener(\"click\", options.callback.bind(element)); }\n\n\t// Method to update the displayed value and internal state\n\telement.setValue = function (v?: InspectorValue)\n\t{\n\t\tif (v === undefined || (typeof v !== 'string' && typeof v !== 'number' && typeof v !== 'boolean')) { return; }\n\t\tconst strVal = v.toString();\n\t\tif (info) { info.innerHTML = strVal; }\n\t\tthat.values.set(valueName, v);\n\t};\n\n\tlet content = element.querySelector(\"span.info_content\") as HTMLElement;\n\tif (!content) { content = element.querySelector(\".winfo\") as HTMLElement; }\n\telement.content = content;\n\n\t// Apply custom width if specified\n\tif (options.width)\n\t{\n\t\telement.style.width = LiteGUI.sizeToCSS(options.width) ?? '0';\n\t\telement.style.display = \"inline-block\";\n\t\tif (!name) { info.style.margin = \"2px\"; }\n\t}\n\n\t// Apply custom height if specified\n\tif (options.height)\n\t{\n\t\tcontent.style.height = LiteGUI.sizeToCSS(options.height) ?? '0';\n\t\tcontent.style.overflow = \"auto\";\n\t}\n\n\telement.scrollToBottom = function ()\n\t{\n\t\tcontent.scrollTop = content.offsetTop;\n\t};\n\n\telement.add = function (e: Node)\n\t{\n\t\tcontent.appendChild(e);\n\t};\n\n\telement.getValue = function ()\n\t{\n\t\treturn that.values.get(valueName);\n\t};\n\n\tthat.appendWidget(element, options);\n\tthat.processElement(element, options);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddInfo(name?: string, value?: string, options?: AddInfoOptions): InspectorInfoWidget;\n\t}\n}\n\nInspector.prototype.addInfo = function (name?: string, value?: string, options?: AddInfoOptions): InspectorInfoWidget\n{\n\treturn AddInfo(this, name, value, options);\n};\n\nInspector.widgetConstructors.info = \"addInfo\";","import type\n{\n\tHTMLDivElementOptions,\n\tInspectorSection,\n\tInspectorValue,\n\tInspectorWidget,\n\tInspectorWidgetTypes,\n\tGenericCreationOptions,\n\tAppendOptions,\n\tCreateWidgetOptions,\n\tProcessElementOptions,\n\tWidgetChangeOptions,\n\tInspectorOptions,\n\tPropertyOptions,\n\tBeginGroupOptions,\n\tAddTitleOptions,\n\tAddContainerOptions,\n\tInspectorContainer,\n\tInspectorGroupWidget\n} from \"../@types/Inspector\";\nimport\n{\n\tCloneInsides,\n\tPurgeElement,\n\tTrigger,\n\tSizeToCSS,\n\tCollectProperties,\n\tInstanceHolder,\n\tAssignValue\n} from \"../utilities\";\nimport { LiteGUIObject } from \"../@types/globals\";\n\n\n\n/**\n * Inspector class for creating property inspectors.\n * @class Inspector\n * @example\n * ```typescript\n * const inspector = new Inspector();\n * inspector.add(\"string\", \"Name\", \"unnamed\");\n * inspector.appendTo(document.body);\n * ```\n */\nexport class Inspector implements LiteGUIObject\n{\n\t/**\n\t * The root HTML element of the inspector.\n\t */\n\troot: HTMLDivElement;\n\t/**\n\t * List of sections within the inspector.\n\t */\n\tsections: InspectorSection[] = [];\n\t/**\n\t * Map of values managed by the inspector.\n\t */\n\tvalues: Map<string, InspectorValue> = new Map<string, InspectorValue>();\n\t/**\n\t * List of all widgets in the inspector.\n\t */\n\twidgets: InspectorWidget[] = [];\n\t/**\n\t * Map of widgets indexed by their name.\n\t */\n\twidgetsByName: Map<string, InspectorWidget> = new Map<string, InspectorWidget>();\n\t// Used to detect if element is even (cannot use CSS, special cases everywhere)\n\t/**\n\t * Internal row counter for styling even/odd rows.\n\t */\n\trowNumber: number = 0;\n\t/**\n\t * Width of the name column.\n\t */\n\tnameWidth?: number;\n\t/**\n\t * Default width for widgets.\n\t */\n\twidgetsWidth?: number;\n\t/**\n\t * Current tab index for accessibility.\n\t */\n\ttabIndex: number;\n\t/**\n\t * Callback triggered when any value in the inspector changes.\n\t */\n\tonChange?: (name?: string, value?: InspectorValue, element?: InspectorWidget) => void;\n\t/**\n\t * CSS class name for the root element.\n\t */\n\tclassName: string;\n\t/**\n\t * Number of widgets to display per row.\n\t */\n\twidgetsPerRow: number;\n\t/**\n\t * If true, displays the inspector in a single line.\n\t */\n\toneLine?: boolean | null = null;\n\t/**\n\t * The currently active section.\n\t */\n\tcurrentSection?: InspectorSection;\n\n\t/**\n\t * Stack of active containers.\n\t * @private\n\t */\n\tprivate _currentContainerStack: InspectorContainer[] = [];\n\n\t/**\n\t * The current container where widgets are appended.\n\t * @private\n\t */\n\tprivate _currentContainer?: InspectorContainer;\n\t/**\n\t * Callback triggered to refresh the inspector.\n\t */\n\tonRefresh?: () => void;\n\t/**\n\t * Hook called when a property is added.\n\t */\n\tonAddProperty?: (name: string, instance: unknown, varname: string | number, value: unknown, options?: unknown) => void;\n\t/**\n\t * Name of the inspector instance.\n\t */\n\tname: string = \"\";\n\t/**\n\t * Configuration options.\n\t */\n\toptions: InspectorOptions;\n\t/**\n\t * Height of the inspector.\n\t */\n\theight?: string | number;\n\t/**\n\t * Counter for generating unique names for empty widgets.\n\t */\n\temptyWidgetIndex: number = 0;\n\n\t/**\n\t * Creates an instance of the Inspector.\n\t * @param {InspectorOptions} [options] Configuration options.\n\t */\n\tconstructor(options?: InspectorOptions)\n\t{\n\t\tthis.options = options ?? {};\n\t\tconst root = document.createElement(\"DIV\") as HTMLDivElement;\n\t\tthis.root = root;\n\t\tthis.root.className = `inspector ${this.options.full ? \"full\" : \"\"}${this.options.className ?? \"\"}`;\n\t\tthis.root.id = this.options.id ?? \"\";\n\t\tif (this.options.oneLine)\n\t\t{\n\t\t\tthis.oneLine = true;\n\t\t\tthis.root.className += \" one_line\";\n\t\t}\n\n\t\tthis.addEmptyContainer({}); // Add empty container\n\t\tthis.tabIndex = Math.floor(Math.random() * 10000);\n\n\t\tif (this.options.width) { this.root.style.width = SizeToCSS(this.options.width)!.toString(); }\n\t\tif (this.options.height)\n\t\t{\n\t\t\tthis.root.style.height = SizeToCSS(this.options.height)!.toString();\n\t\t\tif (!this.options.oneLine) { this.root.style.overflow = \"auto\"; }\n\t\t}\n\n\t\tif (this.options.nameWidth) { this.nameWidth = this.options.nameWidth; }\n\t\tif (this.options.widgetsWidth) { this.widgetsWidth = this.options.widgetsWidth; }\n\n\t\tif (this.options.noscroll) { this.root.style.overflow = \"hidden\"; }\n\n\t\tif (this.options.onChange) { this.onChange = this.options.onChange; }\n\n\t\tif (this.options.parent) { this.appendTo(this.options.parent); }\n\n\t\tthis.className = this.root.className;\n\n\t\tthis.widgetsPerRow = this.options.widgetsPerRow || 1;\n\t}\n\n\t/**\n\t * Retrieves all values from the widgets in the inspector.\n\t * @returns {Map<string, InspectorValue>} A map of widget names to their values.\n\t */\n\tgetValues()\n\t{\n\t\tconst r = new Map<string, InspectorValue>();\n\t\tfor (const i in this.widgetsByName)\n\t\t{\n\t\t\tconst widget = this.widgetsByName.get(i);\n\t\t\tif (widget && widget.getValue)\n\t\t\t{\n\t\t\t\tconst w = widget.getValue();\n\t\t\t\t// If (!w) { continue; }\n\t\t\t\tr.set(i, w);\n\t\t\t}\n\t\t}\n\t\treturn r;\n\t}\n\n\t/**\n\t * Sets values for multiple widgets in the inspector.\n\t * @param {{ [key: string]: InspectorValue }} values An object where keys are widget names and values are the new values.\n\t */\n\tsetValues(values: { [key: string]: InspectorValue })\n\t{\n\t\tfor (const i in values)\n\t\t{\n\t\t\tconst widget = this.widgetsByName.get(i);\n\t\t\tif (widget && widget.setValue)\n\t\t\t{\n\t\t\t\twidget.setValue(values[i]);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Appends the inspector to a parent element.\n\t * @param {HTMLElement | string} parent The parent element or its selector string.\n\t * @param {boolean} [atFront] If true, inserts the inspector at the beginning of the parent.\n\t */\n\tappendTo(parent?: HTMLElement | string, atFront?: boolean)\n\t{\n\t\tif (!parent) { return; }\n\n\t\tif (typeof parent === 'string')\n\t\t{\n\t\t\tparent = document.querySelector(parent) as HTMLElement;\n\t\t\tif (!parent) { return; }\n\t\t}\n\n\t\tif (atFront)\n\t\t{\n\t\t\tparent.insertBefore(this.root, parent.firstChild);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tparent.appendChild(this.root);\n\t\t}\n\t}\n\n\t/**\n\t * Removes all the widgets inside the inspector\n\t */\n\tclear()\n\t{\n\t\tPurgeElement(this.root);\n\n\t\twhile (this.root.hasChildNodes())\n\t\t{\n\t\t\tthis.root.removeChild(this.root.lastChild!);\n\t\t}\n\n\t\tthis.root.className = this.className;\n\n\t\tthis.rowNumber = 0;\n\t\tthis.values.clear();\n\t\tthis.widgets = [];\n\t\tthis.widgetsByName.clear();\n\t\tthis.sections = [];\n\t\tthis.currentSection = undefined;\n\t\tthis._currentContainer = undefined;\n\t\tthis._currentContainerStack = [];\n\t\tthis.addEmptyContainer();\n\t}\n\n\t/**\n\t * Tries to refresh (calls on_refresh)\n\t */\n\trefresh()\n\t{\n\t\tif (this.onRefresh)\n\t\t{\n\t\t\tthis.onRefresh();\n\t\t}\n\t}\n\n\t/**\n\t * Append widget to this inspector\n\t * @param {InspectorWidget} widget The widget to append.\n\t * @param {AppendOptions} options Configuration options for appending.\n\t */\n\tappendWidget(widget: InspectorWidget, options?: AppendOptions)\n\t{\n\t\toptions = options ?? {};\n\n\t\tconst root = options.widgetParent ?? this._currentContainer ?? this.root;\n\n\t\tif (options.replace && options.replace.parentNode)\n\t\t{\n\t\t\toptions.replace.parentNode.replaceChild(widget, options.replace);\n\t\t}\n\t\telse\n\t\t{\n\t\t\twidget.section = this.currentSection;\n\t\t\troot.appendChild(widget);\n\t\t}\n\t}\n\n\t/**\n\t * Pushes a container onto the stack, making it the current active container for new widgets.\n\t * @param {InspectorContainer} container The container element to push.\n\t */\n\tpushContainer(container: InspectorContainer)\n\t{\n\t\tif (!this._currentContainerStack)\n\t\t{\n\t\t\tthis._currentContainerStack = [container];\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (this._currentContainerStack.indexOf(container) != -1)\n\t\t\t{\n\t\t\t\tconsole.warn(\"Container already in the stack\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._currentContainerStack.push(container);\n\t\t}\n\n\t\tthis._currentContainer = container;\n\t}\n\n\t/**\n\t * Checks if a container is currently in the stack.\n\t * @param {InspectorContainer} container The container to check.\n\t * @returns {boolean} True if the container is in the stack.\n\t */\n\tisContainerInStack(container: InspectorContainer)\n\t{\n\t\tif (!this._currentContainerStack) { return false; }\n\t\tif (this._currentContainerStack.indexOf(container) != -1) { return true; }\n\t\treturn false;\n\t}\n\n\t/**\n\t * Pops a container from the stack, reverting to the previous container.\n\t * @param {HTMLElement} [container] Optional specific container to pop up to.\n\t */\n\tpopContainer(container?: HTMLElement)\n\t{\n\t\tthis.rowNumber = 0;\n\t\tif (this._currentContainerStack && this._currentContainerStack.length)\n\t\t{\n\t\t\tif (container)\n\t\t\t{\n\t\t\t\tlet aux = this._currentContainerStack.pop();\n\t\t\t\twhile (aux && aux != container)\n\t\t\t\t{ aux = this._currentContainerStack.pop(); }\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis._currentContainerStack.pop();\n\t\t\t}\n\t\t\tthis._currentContainer = this._currentContainerStack[this._currentContainerStack.length - 1];\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis._currentContainer = undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Configures the inspector with a list of widget creation options.\n\t * @param {GenericCreationOptions[]} info Array of widget configuration objects.\n\t */\n\tsetup(info: GenericCreationOptions[])\n\t{\n\t\tfor (const i in info)\n\t\t{\n\t\t\tconst widgetOptions = info[i];\n\t\t\tthis.add(widgetOptions.type, widgetOptions.name, widgetOptions.value, widgetOptions.options);\n\t\t}\n\t}\n\n\t/**\n\t * Returns the widget given the name.\n\t * @param {string | number} name The name of the widget supplied when creating it or the index of the widget.\n\t * @returns {InspectorWidget | undefined} The widget object or undefined if not found.\n\t */\n\tgetWidget(name: string | number)\n\t{\n\t\tif (name.constructor === Number)\n\t\t{\n\t\t\treturn this.widgets[name];\n\t\t}\n\t\treturn this.widgetsByName.get(name as string);\n\t}\n\n\t/**\n\t * Inspects an instance and creates widgets for its properties.\n\t * @param {unknown} instance The instance that you want to inspect, attributes will be collected from this object.\n\t * @param {{[key:string]: unknown}} [properties] An object with all the names of the properties you want to inspect.\n\t *\t\t If not specified then it calls getProperties, otherwise collect them and tries to guess the type.\n\t * @param {{ [key: string]: unknown }} [propertiesInfoExample] It overwrites the info about properties found in the object (in case the automatically guessed type is wrong).\n\t * @param {string[]} [skipProperties] This properties will be ignored.\n\t */\n\tinspectInstance(instance: Record<string, unknown>, properties?: Record<string, unknown>,\n\t\tpropertiesInfoExample?: Record<string, unknown>, skipProperties?: string[])\n\t{\n\t\tif (!instance) { return; }\n\n\t\tconst inst = instance as Record<string, unknown>;\n\n\t\tif (!properties)\n\t\t{\n\t\t\tconst instWithGetProperties = instance as { getProperties?: () => Record<string, unknown> };\n\t\t\tif (instWithGetProperties.getProperties)\n\t\t\t{\n\t\t\t\tproperties = instWithGetProperties.getProperties();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tproperties = CollectProperties(instance);\n\t\t\t}\n\t\t}\n\n\t\tconst classObject = inst.constructor;\n\t\tif (!propertiesInfoExample && classObject && \"properties\" in classObject)\n\t\t{\n\t\t\tpropertiesInfoExample = classObject.properties as Record<string, unknown>;\n\t\t}\n\n\t\t/*\n\t\t * Properties info contains name:type for every property\n\t\t * Must be cloned to ensure there is no overlap between widgets reusing the same container\n\t\t */\n\t\tlet propertiesValues: Record<string, unknown> = {};\n\n\t\tif (\"getInspectorProperties\" in instance && typeof instance.getInspectorProperties === \"function\")\n\t\t{\n\t\t\tpropertiesValues = instance.getInspectorProperties();\n\t\t}\n\t\telse if (properties)\n\t\t{\n\t\t\t// Add to propertiesInfo the ones that are not specified\n\t\t\tfor (const i in properties)\n\t\t\t{\n\t\t\t\tif (propertiesInfoExample && propertiesInfoExample[i])\n\t\t\t\t{\n\t\t\t\t\t// Clone\n\t\t\t\t\tpropertiesValues[i] = CloneInsides(propertiesInfoExample[i] as Record<string, unknown>);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst value = properties[i];\n\t\t\t\tif (classObject && (\"@\" + i) in classObject) // Guess from class object info\n\t\t\t\t{\n\t\t\t\t\tconst sharedOptions = (classObject as unknown as Record<string, unknown>)[\"@\" + i] as Record<string, unknown>;\n\t\t\t\t\tif (sharedOptions && \"widget\" in sharedOptions && !sharedOptions.widget) { continue; } // Skip\n\t\t\t\t\tpropertiesValues[i] = CloneInsides(sharedOptions);\n\t\t\t\t}\n\t\t\t\telse if (instance[\"@\" + i]) // Guess from instance info\n\t\t\t\t{\n\t\t\t\t\tpropertiesValues[i] = instance[\"@\" + i];\n\t\t\t\t}\n\t\t\t\telse if (i === null || i === undefined) // Are you sure?\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tswitch (typeof value)\n\t\t\t\t\t{\n\t\t\t\t\tcase 'number': propertiesValues[i] = { type: \"number\", step: 0.1 } as GenericCreationOptions; break;\n\t\t\t\t\tcase 'string': propertiesValues[i] = { type: \"string\" }; break;\n\t\t\t\t\tcase 'boolean': propertiesValues[i] = { type: \"boolean\" }; break;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (value && Array.isArray(value)) // Array or typed_array\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconst isNumber = (value[0] && typeof value[0] === \"number\");\n\t\t\t\t\t\t\tswitch ((value as Array<unknown>).length)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcase 2: propertiesValues[i] = { type: isNumber ? \"vec2\" : \"array\", step: 0.1 } as GenericCreationOptions; break;\n\t\t\t\t\t\t\tcase 3: propertiesValues[i] = { type: isNumber ? \"vec3\" : \"array\", step: 0.1 } as GenericCreationOptions; break;\n\t\t\t\t\t\t\tcase 4: propertiesValues[i] = { type: isNumber ? \"vec4\" : \"array\", step: 0.1 } as GenericCreationOptions; break;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tpropertiesValues[i] = { type: \"array\" };\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (skipProperties)\n\t\t{\n\t\t\tfor (const i in skipProperties)\n\t\t\t{\n\t\t\t\tpropertiesValues[skipProperties[i] as keyof typeof propertiesValues] = undefined;\n\t\t\t}\n\t\t}\n\n\t\t// Allows to establish the order of the properties in the inspector\n\t\tif (classObject && \"properties_order\" in classObject)\n\t\t{\n\t\t\tconst propertiesOrder = classObject.properties_order as string[];\n\t\t\tconst sortedProperties: Record<string, unknown> = {};\n\t\t\tfor (const i in propertiesOrder)\n\t\t\t{\n\t\t\t\tconst name = propertiesOrder[i];\n\t\t\t\tif (propertiesValues[name])\n\t\t\t\t{\n\t\t\t\t\tsortedProperties[name] = propertiesValues[name];\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tconsole.warn(\"property not found in instance:\", name);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const i in propertiesValues) // Add the missing ones at the end (should this be optional?)\n\t\t\t{\n\t\t\t\tif (!sortedProperties[i])\n\t\t\t\t{\n\t\t\t\t\tsortedProperties[i] = propertiesValues[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\tpropertiesValues = sortedProperties;\n\t\t}\n\n\n\t\t// ShowAttributes doesn't return anything but just in case...\n\t\treturn this.showProperties(instance, propertiesValues as Record<string, GenericCreationOptions | undefined>);\n\t}\n\n\t/**\n\t * Adds the widgets for the properties specified in the info of instance, it will create callback and onUpdate.\n\t * @param {any} instance The instance that you want to inspect.\n\t * @param {{[key:string]:GenericCreationOptions|undefined}} info Object containing \"property name\" :{ type: value, widget:..., min:..., max:... } or just \"property\":\"type\".\n\t * @param {string[]} [skipProperties] These properties will be ignored.\n\t */\n\tshowProperties(instance: Record<string, unknown>, info: { [key: string]: GenericCreationOptions | undefined }, skipProperties?: string[])\n\t{\n\t\t// For every enumerable property create widget\n\t\tfor (const i in info)\n\t\t{\n\t\t\tlet varname = i;\n\t\t\tif (skipProperties && skipProperties.includes(varname))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!info[i])\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst options: PropertyOptions = info[i]!;\n\n\t\t\tif (options.name)\n\t\t\t{\n\t\t\t\toptions.varname = i;\n\t\t\t\tvarname = options.name;\n\t\t\t\tif (skipProperties && skipProperties.includes(varname))\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!options.callback) // Generate default callback to modify data\n\t\t\t{\n\t\t\t\tconst o: InstanceHolder = { instance: instance, name: varname, options: options as Record<string, unknown> };\n\t\t\t\tif (options.type != \"function\") { options.callback = AssignValue.bind(o) as (v?: unknown, e?: Event) => void; }\n\t\t\t}\n\t\t\tif (!options.onUpdate) // Generate default refresh\n\t\t\t{\n\t\t\t\tconst o: InstanceHolder = { instance: instance, name: varname };\n\t\t\t\toptions.onUpdate = function ()\n\t\t\t\t{\n\t\t\t\t\treturn o.instance[o.name];\n\t\t\t\t};\n\t\t\t}\n\n\t\t\toptions.instance = instance;\n\n\t\t\tconst type = (options.widget as string) || options.type || \"string\";\n\n\t\t\t// Used to hook stuff on special occasions\n\t\t\tif (this.onAddProperty)\n\t\t\t{\n\t\t\t\tthis.onAddProperty(type, instance, varname, instance[varname], options);\n\t\t\t}\n\t\t\tthis.add(type, varname, instance[varname] as InspectorValue, options);\n\t\t}\n\n\t\t// Extra widgets inserted by the object (stored in the constructor)\n\t\tif (\"widgets\" in instance.constructor)\n\t\t{\n\t\t\tconst widgets = instance.constructor.widgets as Record<string, unknown>;\n\t\t\tfor (const i in widgets)\n\t\t\t{\n\t\t\t\tconst w = widgets[i] as Record<string, unknown>;\n\t\t\t\tthis.add(w.widget as string, w.name as string, w.value as InspectorValue, w as PropertyOptions);\n\t\t\t}\n\t\t}\n\n\t\t// Used to add extra widgets at the end\n\t\tif (\"onShowProperties\" in instance && typeof instance.onShowProperties === \"function\")\n\t\t{\n\t\t\tinstance.onShowProperties(this);\n\t\t}\n\t\tif (\"onShowProperties\" in instance.constructor &&\n\t\t\ttypeof instance.constructor.onShowProperties === \"function\")\n\t\t{\n\t\t\tinstance.constructor.onShowProperties(instance, this);\n\t\t}\n\t}\n\n\t/**\n\t * Used by all widgets to create the container of one widget.\n\t * @param {string} [name] The string to show at the left side of the widget, if null this element wont be created and the value part will use the full width.\n\t * @param {string | number | boolean | HTMLElement} [content] The string with the html of the elements that conform the interactive part of the widget.\n\t * @param {CreateWidgetOptions} [options] Some generic options that any widget could have:\n\t * - widgetName: the name used to store this widget in the widgetsByName container, if omitted the parameter name is used\n\t * - width: the width of the widget (if omitted it will use the Inspector widgetsWidth, otherwise 100%\n\t * - nameWidth: the width of the name part of the widget, if not specified it will use Inspector nameWidth, otherwise css default\n\t * - contentWidth: the width of the widget content area\n\t * - preTitle: string to append to the left side of the name, this is helpful if you want to add icons with behaviour when clicked\n\t * - title: string or string[] to replace the name, sometimes you want to supply a different name than the one you want to show (this is helpful to retrieve values from an inspector)\n\t * @returns {InspectorWidget} The created widget element.\n\t */\n\tcreateWidget(name?: string, content?: string | number | boolean | HTMLElement,\n\t\toptions?: CreateWidgetOptions): InspectorWidget\n\t{\n\t\toptions = options ?? {};\n\t\tcontent = content ?? \"\";\n\t\tconst element = document.createElement(\"DIV\") as InspectorWidget;\n\t\telement.className = \"widget \" + (options.className ?? \"\");\n\t\telement.inspector = this;\n\t\telement.options = options;\n\t\telement.name = (typeof name === \"string\" && !name.includes(\"_EMPTY_\")) ? name : undefined;\n\n\t\tthis.rowNumber += this.widgetsPerRow;\n\t\tif (this.rowNumber % 2 == 0) { element.className += \" even\"; }\n\n\t\tconst width = options.width ?? this.widgetsWidth;\n\t\tif (width)\n\t\t{\n\t\t\tconst cssWidth = SizeToCSS(width);\n\t\t\tif (cssWidth)\n\t\t\t{\n\t\t\t\telement.style.width = cssWidth.toString();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\telement.style.width = `calc(${SizeToCSS(width)})`;\n\t\t\t}\n\t\t\telement.style.minWidth = \"auto\";\n\t\t}\n\t\tconst height = options.height ?? this.height;\n\t\tif (height)\n\t\t{\n\t\t\tconst cssHeight = SizeToCSS(height);\n\t\t\tif (cssHeight)\n\t\t\t{\n\t\t\t\telement.style.height = cssHeight.toString();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\telement.style.height = `calc(${SizeToCSS(height)})`;\n\t\t\t}\n\t\t\telement.style.minHeight = \"auto\";\n\t\t}\n\n\t\t// Store widgets\n\t\tthis.widgets.push(element);\n\t\tif (options.widgetName || name)\n\t\t{\n\t\t\tthis.widgetsByName.set(options.widgetName ?? name ?? '', element);\n\t\t}\n\n\t\tif (this.widgetsPerRow != 1)\n\t\t{\n\t\t\tif (!options.width) { element.style.width = (100 / this.widgetsPerRow).toFixed(2) + \"%\"; }\n\t\t\telement.style.display = \"inline-block\";\n\t\t}\n\n\t\tlet nameWidth = \"\";\n\t\tlet contentWidth = \"\";\n\t\tif ((name !== undefined && name !== null) && (this.nameWidth || options.nameWidth) && !this.oneLine)\n\t\t{\n\t\t\tconst w = SizeToCSS(options.nameWidth ?? this.nameWidth ?? undefined);\n\t\t\tnameWidth = `style='width: calc(${w} - 0px); width: -webkit-calc(${w} - 0px); width: -moz-calc(${w} - 0px); '`; // Hack\n\t\t\tcontentWidth = `style='width: calc( 100% - ${w}); width: -webkit-calc(100% - ${w}); width: -moz-calc( 100% - ${w}); '`;\n\t\t}\n\n\t\tif (options.nameWidth) { nameWidth = `style='width: ${SizeToCSS(options.nameWidth)} '`; }\n\t\tif (options.contentWidth) { contentWidth = `style='width: ${SizeToCSS(options.contentWidth)} '`; }\n\n\t\tlet code = \"\";\n\t\tlet content_class = \"wcontent \";\n\t\tif (name === null || name === undefined)\n\t\t{\n\t\t\tcontent_class += \" full\";\n\t\t}\n\t\telse\n\t\t{\n\t\t\tlet preTitle = \"\";\n\t\t\tif (options.preTitle) { preTitle = options.preTitle; }\n\n\t\t\tlet title: string | string[] = name;\n\t\t\tif (options.title) { title = options.title; }\n\n\t\t\tconst filling = this.oneLine ? \"\" : \"<span class='filling'></span>\";\n\t\t\tif (name === \"\")\n\t\t\t{\n\t\t\t\tcode += `<span class='wname' title='${title}' ${nameWidth}>${preTitle}</span>`;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tcode += `<span class='wname' title='${title}' ${nameWidth}>${preTitle}${name}${filling}</span>`;\n\t\t\t}\n\t\t}\n\n\t\tconst contentType = typeof content;\n\t\tswitch (contentType)\n\t\t{\n\t\tcase \"string\":\n\t\tcase \"number\":\n\t\tcase \"boolean\":\n\t\t\telement.innerHTML = `${code}<span class='info_content ${content_class}' ${contentWidth}>${content}</span>`;\n\t\t\tbreak;\n\t\tdefault:\n\t\t{\n\t\t\telement.innerHTML = `${code}<span class='info_content ${content_class}' ${contentWidth}></span>`;\n\t\t\tconst contentElement = element.querySelector(\"span.info_content\");\n\t\t\tif (contentElement) { contentElement.appendChild(content as HTMLElement); }\n\t\t\tbreak;\n\t\t}\n\t\t}\n\n\t\telement.content = element.querySelector<HTMLElement>(\"span.info_content\") ?? undefined;\n\t\telement.remove = function ()\n\t\t{\n\t\t\tif (this.parentNode) { this.parentNode.removeChild(this); }\n\t\t};\n\n\t\treturn element;\n\t}\n\n\t/**\n\t * Internal method called when a widget's value changes.\n\t * Handles callbacks, events, and value updates.\n\t * @param {InspectorWidget} element The widget element.\n\t * @param {string} name The name of the value/widget.\n\t * @param {InspectorValue} value The new value.\n\t * @param {WidgetChangeOptions} options Options containing callbacks.\n\t * @param {boolean} [expand_value] If true and value is array, spreads arguments applied to callback.\n\t * @param {Event} [event] The original event that triggered the change.\n\t * @returns {any} The result of the callback.\n\t */\n\tonWidgetChange(element: InspectorWidget, name: string, value: InspectorValue, options: WidgetChangeOptions, expand_value?: boolean, event?: Event)\n\t{\n\t\tconst section = element.section; // This.current_section\n\n\t\tif (!options.skipWChange)\n\t\t{\n\t\t\tif (section) { Trigger(section, \"wbeforechange\", value); }\n\t\t\tTrigger(element, \"wbeforechange\", value);\n\t\t}\n\n\t\t// Assign and launch callbacks\n\t\tthis.values.set(name, value);\n\t\tlet r = undefined;\n\t\tif (options.callback)\n\t\t{\n\t\t\tif (expand_value && Array.isArray(value))\n\t\t\t{\n\t\t\t\tconst callback = options.callback as (...args: InspectorValue[]) => void;\n\t\t\t\tr = callback.apply(element, value);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tconst callback = options.callback as (value: InspectorValue, e?: Event) => void;\n\t\t\t\tr = callback.call(element, value, event);\n\t\t\t}\n\t\t}\n\n\t\tif (!options.skipWChange)\n\t\t{\n\t\t\tif (section) { Trigger(section, \"wchange\", value); }\n\t\t\tTrigger(element, \"wchange\", value);\n\t\t}\n\n\t\tif (this.onChange) { this.onChange(name, value, element); }\n\t\treturn r;\n\t}\n\n\t/**\n\t * Resolves the proper name for a value/widget, generating a unique one if missing.\n\t * @param {string} [widgetName] The proposed name.\n\t * @param {GenericCreationOptions} [options] Options potentially containing a widget_name.\n\t * @returns {string} The resolved name.\n\t */\n\tgetValueName(widgetName?: string, options?: GenericCreationOptions): string\n\t{\n\t\toptions = options ?? {};\n\t\tif (widgetName === undefined && options.widgetName === undefined)\n\t\t{\n\t\t\twidgetName = `_EMPTY_NAME_WIDGET_${this.emptyWidgetIndex++}`;\n\t\t}\n\t\treturn widgetName ?? options.widgetName!;\n\t}\n\n\t/**\n\t * Registry of available widget constructors.\n\t * Maps widget type strings to function names or instances.\n\t */\n\tpublic static widgetConstructors: {\n [key: string]: string |\n ((name?: string, value?: InspectorValue, options?: CreateWidgetOptions) => InspectorWidget)\n } =\n\t\t\t{\n\t\t\t\t\"null\": 'doNothing',\n\t\t\t\t\"undefined\": 'doNothing',\n\t\t\t\ttitle: 'addTitle',\n\t\t\t};\n\n\t/**\n\t * Registers a new custom widget type.\n\t * @param {string} name The type name of the widget.\n\t * @param {string | Function} constructor The constructor function or method name.\n\t */\n\tpublic static registerWidget(name: string, constructor: string |\n ((name?: string, value?: InspectorValue, options?: CreateWidgetOptions) => InspectorWidget))\n\t{\n\t\tInspector.widgetConstructors[name.toLowerCase()] = constructor;\n\t}\n\n\t/**\n\t * Unregisters a widget type.\n\t * @param {string} name The type name of the widget to unregister.\n\t */\n\tpublic static unregisterWidget(name: string)\n\t{\n\t\tif (Inspector.widgetConstructors[name.toLowerCase()])\n\t\t{\n\t\t\tdelete Inspector.widgetConstructors[name.toLowerCase()];\n\t\t}\n\t}\n\n\t/**\n\t * Adds a widget to the inspector, its a way to provide the widget type from a string.\n\t * @param {InspectorWidgetTypes | string} [type] String specifying the name of the widget to use (check Inspector.widget_constructors for a complete list).\n\t * @param {string} [name] The string to show at the left side of the widget, if null this element wont be created and the value part will use the full width.\n\t * @param {InspectorValue} [value] The value to assign to the widget.\n\t * @param {GenericCreationOptions} [options] Some generic options that any widget could have:\n\t * - type: overwrites the type\n\t * - callback: function to call when the user interacts with the widget and changes the value\n\t * [For a bigger list check createWidget and every widget in particular]\n\t * @returns {InspectorWidget | undefined} The widget in the form of the DOM element that contains it.\n\t */\n\tadd(type?: InspectorWidgetTypes | string, name?: string, value?: InspectorValue, options?: GenericCreationOptions): InspectorWidget | undefined\n\t{\n\t\toptions = options ?? {};\n\t\tif (options.type) { type = options.type; }\n\t\tif (options.name) { name = options.name; }\n\t\tif (options.value) { value = options.value; }\n\n\t\tlet func: string | ((name?: string, value?: InspectorValue, options?: CreateWidgetOptions) => InspectorWidget) | undefined =\n Inspector.widgetConstructors[type?.toLowerCase() ?? 'null'];\n\t\tif (!func)\n\t\t{\n\t\t\tconsole.warn(\"LiteGUI.Inspector: Widget not found: \" + type);\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof func === 'string')\n\t\t{\n\t\t\tconst protoMethod = Inspector.prototype[func as keyof Inspector] as ((name?: string, value?: InspectorValue, options?: CreateWidgetOptions) => InspectorWidget) | undefined;\n\t\t\tif (!protoMethod)\n\t\t\t{\n\t\t\t\tconsole.warn(\"LiteGUI.Inspector: Widget method not found:\", func);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfunc = protoMethod;\n\t\t}\n\n\t\tif (typeof (func) !== 'function')\n\t\t{\n\t\t\tconsole.warn(\"LiteGUI.Inspector: Widget method not found or not a function:\", type, func);\n\t\t\treturn;\n\t\t}\n\t\telse if (typeof (func) === 'function')\n\t\t{\n\t\t\treturn func.call(this, name, value, options);\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\n\t/**\n\t * Retrieves the value of a specific widget by name.\n\t * @param {string} name The name of the widget.\n\t * @returns {InspectorValue} The value of the widget.\n\t */\n\tgetValue(name: string): InspectorValue\n\t{\n\t\treturn this.values.get(name);\n\t}\n\n\t/**\n\t * Applies standard options (id, classes, style) to a container element.\n\t * @param {HTMLDivElement} element The DOM element to modify.\n\t * @param {HTMLDivElementOptions} options The options containing id, className, width, height, etc.\n\t */\n\tapplyOptions(element: HTMLDivElement, options: HTMLDivElementOptions)\n\t{\n\t\tif (!element || !options) { return; }\n\n\t\tif (options.className) { element.className += \" \" + options.className; }\n\t\tif (options.id) { element.id = options.id; }\n\t\tif (options.width) { element.style.width = SizeToCSS(options.width) ?? '0px'; }\n\t\tif (options.height) { element.style.height = SizeToCSS(options.height) ?? '0px'; }\n\t}\n\n\t/**\n\t * Helper method that does nothing. Used as a placeholder for invalid widget types.\n\t * @private\n\t * @returns {undefined} Always returns undefined.\n\t */\n\tprivate _doNothing()\n\t{\n\t\treturn undefined;\n\t}\n\n\t//* **** Containers ********/\n\t/**\n\t * Creates an empty container but does not set it as the active stack container.\n\t * @param {AddContainerOptions} [options] Configuration options.\n\t * @returns {InspectorContainer} The created container element.\n\t */\n\taddEmptyContainer(options?: AddContainerOptions)\n\t{\n\t\toptions = options ?? {};\n\t\tconst element = this.startContainer(options);\n\t\tthis.endContainer();\n\t\treturn element;\n\t}\n\n\t/**\n\t * Creates a new container and sets it as the active container for subsequent widgets.\n\t * @param {AddContainerOptions} options Configuration options.\n\t * @returns {InspectorContainer} The created container element.\n\t */\n\tstartContainer(options: AddContainerOptions)\n\t{\n\t\tconst element = document.createElement(\"DIV\") as InspectorContainer;\n\t\telement.className = \"wcontainer\";\n\t\tthis.applyOptions(element, options);\n\t\tthis.rowNumber = 0;\n\n\t\tthis.appendWidget(element);\n\t\tthis.pushContainer(element);\n\n\t\tif (options.widgetPerRow)\n\t\t{\n\t\t\tthis.widgetsPerRow = options.widgetPerRow;\n\t\t}\n\n\t\tif (options.height)\n\t\t{\n\t\t\telement.style.height = SizeToCSS(options.height) ?? '0px';\n\t\t\telement.style.overflow = \"auto\";\n\t\t}\n\n\t\telement.refresh = function ()\n\t\t{\n\t\t\tif (element.onRefresh) { element.onRefresh.call(this, element); }\n\t\t};\n\n\t\treturn element;\n\t}\n\n\t/**\n\t * Closes the current container and pops it from the stack.\n\t */\n\tendContainer()\n\t{\n\t\tthis.popContainer();\n\t}\n\n\t/**\n\t * Adds a collapsible section to the inspector. Sections cannot be nested inside containers, but they contain a container.\n\t * @param {string} [name] Title of the section.\n\t * @param {InspectorOptions} [options] Configuration options for the section.\n\t * @returns {InspectorSection} The created section element.\n\t */\n\taddSection(name?: string, options?: InspectorOptions): InspectorSection\n\t{\n\t\tif (options == undefined) { options = {}; }\n\t\tif (this.currentSection) { this.currentSection.end(); }\n\n\t\tconst element = document.createElement(\"DIV\") as InspectorSection;\n\t\telement.className = \"wsection\";\n\t\tif (!name) { element.className += \" notitle\"; }\n\t\tif (options.className)\n\t\t{\n\t\t\telement.className += \" \" + options.className;\n\t\t}\n\t\tif (options.collapsed && !options.noCollapse)\n\t\t{\n\t\t\telement.className += \" collapsed\";\n\t\t}\n\n\t\tif (options.id)\n\t\t{\n\t\t\telement.id = options.id ?? \"\";\n\t\t}\n\t\tif (options.instance)\n\t\t{\n\t\t\telement.instance = options.instance ?? {};\n\t\t}\n\n\t\tlet code = \"\";\n\t\tif (name)\n\t\t{\n\t\t\tcode += `<div class='wsectiontitle'>${options.noCollapse ? \"\" :\n\t\t\t\t\"<span class='switch-section-button'></span>\"}${name}</div>`;\n\t\t}\n\t\tcode += \"<div class='wsectioncontent'></div>\";\n\t\telement.innerHTML = code;\n\n\t\t// Append to inspector\n\t\telement.lastContainerStack = this._currentContainerStack.concat();\n\t\t// This.appendWidget( element ); //sections are added to the root, not to the current container\n\t\tthis.root.appendChild(element);\n\t\tthis.sections.push(element);\n\n\t\telement.sectionTitle = element.querySelector(\".wsectiontitle\")!;\n\n\t\tif (name && !options.noCollapse)\n\t\t{\n\t\t\telement.sectionTitle?.addEventListener(\"click\", (e: Event) =>\n\t\t\t{\n\t\t\t\tif ((e.target as HTMLElement).localName == \"button\") { return; }\n\t\t\t\telement.classList.toggle(\"collapsed\");\n\t\t\t\tconst seccont: HTMLElement = element.querySelector(\".wsectioncontent\")!;\n\t\t\t\tseccont.style.display = seccont.style.display === \"none\" ? \"\" : \"none\";\n\t\t\t\tif (options.callback)\n\t\t\t\t{\n\t\t\t\t\toptions.callback.call(element, element.classList.contains(\"collapsed\"));\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (options.collapsed && !options.noCollapse)\n\t\t{\n\t\t\tconst seccont: HTMLElement = element.querySelector(\".wsectioncontent\")!;\n\t\t\tseccont.style.display = \"none\";\n\t\t}\n\n\t\tthis.setCurrentSection(element);\n\n\t\tif (options.widgetsPerRow)\n\t\t{\n\t\t\tthis.widgetsPerRow = options.widgetsPerRow;\n\t\t}\n\n\t\telement.refresh = function ()\n\t\t{\n\t\t\tif (element.onRefresh)\n\t\t\t{\n\t\t\t\telement.onRefresh.call(this, element);\n\t\t\t}\n\t\t};\n\n\t\telement.end = () =>\n\t\t{\n\t\t\tif (this.currentSection != element) { return; }\n\n\t\t\tthis._currentContainerStack = element.lastContainerStack!;\n\t\t\tthis._currentContainer = undefined;\n\n\t\t\tconst content = element.querySelector(\".wsectioncontent\") as InspectorContainer;\n\t\t\tif (!content) { return; }\n\t\t\tif (this.isContainerInStack(content)) { this.popContainer(content); }\n\t\t\tthis.currentSection = undefined;\n\t\t};\n\n\t\treturn element;\n\t}\n\n\t/**\n\t * Changes the current active section to the specified one.\n\t * @param {InspectorSection} section The section to make active.\n\t */\n\tsetCurrentSection(section: InspectorSection)\n\t{\n\t\tif (this.currentSection == section) { return; }\n\n\t\tthis.currentSection = section;\n\n\t\tconst parent = section.parentNode as HTMLElement;\n\t\tif (!parent) { return; }\n\t\tthis.popContainer(parent); // Go back till that container\n\n\t\tconst content = section.querySelector(\".wsectioncontent\") as InspectorContainer;\n\t\tif (!content) { return; }\n\t\tthis.pushContainer(content);\n\t}\n\n\t/**\n\t * Retrieves the currently active section.\n\t * @returns {HTMLElement | null} The section element or null if no section is active.\n\t */\n\tgetCurrentSection()\n\t{\n\t\tfor (let i = this._currentContainerStack.length - 1; i >= 0; --i)\n\t\t{\n\t\t\tconst container = this._currentContainerStack[i];\n\t\t\tif (container.classList.contains(\"wsectioncontent\"))\n\t\t\t{ return container.parentNode; }\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t * Ends the current section, popping it from the stack.\n\t */\n\tendCurrentSection()\n\t{\n\t\tif (this.currentSection) { this.currentSection.end(); }\n\t}\n\n\t/**\n\t * Begins a new group of widgets. Groups provide a visual grouping and can be collapsed.\n\t * @param {string} [name] The title of the group.\n\t * @param {BeginGroupOptions} [options] Configuration options.\n\t * @returns {InspectorGroupWidget} The group element.\n\t */\n\tbeginGroup(name?: string, options?: BeginGroupOptions)\n\t{\n\t\tconst element = document.createElement(\"DIV\") as InspectorGroupWidget;\n\t\telement.className = \"wgroup\";\n\t\tname = name ?? \"\";\n\t\toptions = options ?? {};\n\t\telement.innerHTML = `<div class='wgroupheader ${options.title ? \"wtitle\" : \"\"}'><span class='switch-section-button'></span>${name}</div>`;\n\t\telement.group = true;\n\n\t\tconst content = document.createElement(\"DIV\") as InspectorContainer;\n\t\tcontent.className = \"wgroupcontent\";\n\t\tif (options.collapsed) { content.style.display = \"none\"; }\n\n\t\tif (options.height) { content.style.height = SizeToCSS(options.height)!; }\n\t\tif (options.scrollable) { content.style.overflow = \"auto\"; }\n\n\t\telement.appendChild(content);\n\n\t\tlet collapsed = options.collapsed ?? false;\n\t\tconst header = element.querySelector(\".wgroupheader\") as HTMLElement;\n\t\tif (!header) { throw new Error(\"Header not found\"); }\n\t\tif (collapsed) { header.classList.add(\"collapsed\"); }\n\t\theader.addEventListener(\"click\", (e: Event) =>\n\t\t{\n\t\t\tconst style = (element.querySelector(\".wgroupcontent\") as HTMLElement).style;\n\t\t\tstyle.display = style.display === \"none\" ? \"\" : \"none\";\n\t\t\tcollapsed = !collapsed;\n\t\t\tif (collapsed)\n\t\t\t{\n header!.classList.add(\"collapsed\");\n\t\t\t}\n\t\t\telse\n\t\t\t{\n header!.classList.remove(\"collapsed\");\n\t\t\t}\n\t\t\te.preventDefault();\n\t\t});\n\n\t\tthis.appendWidget(element, options);\n\t\tthis.pushContainer(content);\n\t\treturn element;\n\t}\n\n\t/**\n\t * Ends the current group, popping it from the stack.\n\t */\n\tendGroup()\n\t{\n\t\tdo\n\t\t{\n\t\t\tthis.popContainer();\n\t\t}\n\t\twhile (this._currentContainer && !this._currentContainer.classList.contains(\"wgroupcontent\"));\n\t}\n\n\t/**\n\t * Creates a title bar in the widgets list to help separate widgets.\n\t * @param {string} title The text to display in the title.\n\t * @param {AddTitleOptions} [options] Configuration options.\n\t * @returns {HTMLDivElement} The title widget element.\n\t */\n\taddTitle(title: string, options?: AddTitleOptions)\n\t{\n\t\toptions = this.processOptions(options);\n\t\tconst element = document.createElement(\"DIV\") as InspectorWidget;\n\t\tlet code = `<span class='wtitle'><span class='text'>${title}</span>`;\n\t\tif (options.help)\n\t\t{\n\t\t\tcode += `<span class='help'><div class='help-content'>${options.help}</div></span>`;\n\t\t}\n\t\tcode += \"</span>\";\n\t\telement.innerHTML = code;\n\t\telement.setValue = function (v: InspectorValue)\n\t\t{\n\t\t\tif (typeof v !== 'string') { return; }\n\t\t\tconst tempo = this.querySelector(\".text\");\n\t\t\tif (tempo) {tempo.innerHTML = v;}\n\t\t};\n\t\tthis.rowNumber = 0;\n\t\tthis.appendWidget(element, options);\n\t\treturn element;\n\t}\n\n\t/**\n\t * Scrolls the inspector to show the element with the specified ID.\n\t * @param {string} id The ID of the element to scroll to.\n\t */\n\tscrollTo(id: string)\n\t{\n\t\tconst element = this.root.querySelector(`#${id}`) as HTMLElement;\n\t\tif (!element) { return; }\n\t\tconst top = this.root.offsetTop;\n\t\tconst delta = element.offsetTop - top;\n\t\tif (!this.root.parentNode?.parentNode) { return; }\n\t\t(this.root.parentNode.parentNode as HTMLElement).scrollTop = delta;\n\t}\n\n\t/**\n\t * Processes options, ensuring they are in an object format.\n\t * @param {Record<string, unknown> | (...args: unknown[]) => unknown} options The options to process.\n\t * @returns {Record<string, unknown>} The processed options object.\n\t */\n\tprocessOptions(options?: object | ((...args: unknown[]) => unknown)): object\n\t{\n\t\treturn typeof options === 'function' ? { callback: options } : options ?? {};\n\t}\n\n\t/**\n\t * Processes a widget element, applying update hooks if provided.\n\t * @param {InspectorWidget} element The widget element.\n\t * @param {ProcessElementOptions} options Options containing update hooks.\n\t */\n\tprocessElement(element: InspectorWidget, options: ProcessElementOptions)\n\t{\n\t\tif (options.onUpdate && element.setValue)\n\t\t{\n\t\t\telement.onWidgetUpdate = function ()\n\t\t\t{\n element.setValue!(options.onUpdate?.call(element) as InspectorValue, true);\n\t\t\t};\n\t\t}\n\t}\n\n\t/**\n\t * Updates all widgets that have an onWidgetUpdate hook.\n\t */\n\tupdateWidgets()\n\t{\n\t\tfor (let i = 0; i < this.widgets.length; ++i)\n\t\t{\n\t\t\tconst widget = this.widgets[i];\n\t\t\tif (widget.onWidgetUpdate) { widget.onWidgetUpdate(widget); }\n\t\t}\n\t}\n\n\t/**\n\t * Helper to parse a color array into a styled HTML string.\n\t * @param {[number, number, number, number]} color The color array [r, g, b, a].\n\t * @returns {string} The styled HTML string representing the color.\n\t */\n\tpublic static parseColor(color: [number, number, number, number])\n\t{\n\t\treturn \"<span style='color: #FAAAA'>\" + color[0].toFixed(2) +\n \"</span>,<span style='color: #AFAAA'>\" + color[1].toFixed(2) +\n \"</span>,<span style='color: #AAFAA'>\" + color[2].toFixed(2) +\n \"</span>,<span style='color: #AAAAF'>\" + color[3].toFixed(2) + \"</span>\";\n\t}\n}","import { LiteGUI } from \"../core\";\nimport { Inspector } from \"./inspector\";\nimport { LineEditor, LineEditorElement, LineEditorOptions } from \"../widgets\";\nimport { InspectorWidget, WidgetChangeOptions } from \"../@types/Inspector\";\n\n/**\n * Adds a line editor widget to the inspector with the specified name, value, and options.\n * @function AddLine\n *\n * @param {Inspector} that - The reference to the inspector\n * @param {string} name - The name of the line widget.\n * @param {number[][]} value - The initial value of the file input widget.\n * @param {LineEditorOptions} [options] - The options for the file input widget.\n * @returns The created file input widget element.\n */\nexport function AddLineEditor(that: Inspector, name: string, value: number[][], options: LineEditorOptions)\n{\n\tthat.values.set(name, value);\n\n\tconst element = that.createWidget(name, \"<span class='line-editor'></span>\", options);\n\telement.style.width = \"100%\";\n\n\tconst lineEditor: LineEditor = new LineEditor(value, options);\n\tconst lineEditorSpan: HTMLElement | null = element.querySelector(\"span.line-editor\");\n\tlineEditorSpan?.appendChild(lineEditor.root);\n\n\tLiteGUI.bind(lineEditor, \"change\", (e: Event) =>\n\t{\n\t\tconst target = e.target as LineEditorElement;\n\t\tLiteGUI.trigger(element, \"wbeforechange\", target.valuesArray);\n\t\tif (options.callback) { options.callback.call(element, target.valuesArray, e); }\n\t\tLiteGUI.trigger(element, \"wchange\", target.valuesArray);\n\t\tthat.onWidgetChange(element, name, target.valuesArray, options as unknown as WidgetChangeOptions);\n\t});\n\n\tthat.appendWidget(element, options);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddLineEditor(name: string, value: number[][], options?: LineEditorOptions): InspectorWidget;\n\t}\n}\n\nInspector.prototype.addLineEditor = function (name: string, value: number[][], options?: LineEditorOptions): InspectorWidget\n{\n\treturn AddLineEditor(this, name, value, options ?? {});\n};\n\nInspector.widgetConstructors.line = \"addLineEditor\";","import { CreateWidgetOptions, InspectorActiveWidget, InspectorValue, WidgetChangeOptions } from \"../@types/Inspector\";\nimport { LiteGUI } from \"../core\";\nimport { Inspector } from \"./inspector\";\n\n/**\n * Options for creating a List widget.\n */\nexport interface AddListOptions extends CreateWidgetOptions, Omit<WidgetChangeOptions, 'callback'>\n{\n\t/**\n\t * Height of the list in pixels.\n\t */\n\theight?: number;\n\t/**\n\t * Whether the list is disabled.\n\t * @default false\n\t */\n\tdisabled?: boolean;\n\t/**\n\t * Allow multiple items to be selected.\n\t * @default false\n\t */\n\tmultiSelection?: boolean;\n\t/**\n\t * The initially selected item value.\n\t */\n\tselected?: string;\n\t/**\n\t * Callback function to execute when an item is double-clicked.\n\t */\n\tonDoubleClick?: (value: string) => void;\n}\n\n/**\n * Represents an item in the list.\n */\nexport interface ListItemOptions\n{\n\t/**\n\t * Content to display for the item (can be HTML).\n\t */\n\tcontent: string;\n\t/**\n\t * Title tooltip for the item.\n\t */\n\ttitle: string;\n\t/**\n\t * Unique name/identifier for the item.\n\t */\n\tname: string;\n\t/**\n\t * Inline CSS styles for the item.\n\t */\n\tstyle: string;\n\t/**\n\t * URL of an icon to display with the item.\n\t */\n\ticon: string;\n\t/**\n\t * Whether the item is selected.\n\t */\n\tselected: boolean;\n}\n\n/**\n * Interface representing the List widget.\n */\nexport interface InspectorListWidget extends InspectorActiveWidget\n{\n\t/**\n\t * Adds a new item to the list.\n\t * @param {string} value The value/name of the item.\n\t * @param {boolean} selected Whether the item should be selected.\n\t */\n\taddItem: (value: string, selected: boolean) => void;\n\t/**\n\t * Removes an item from the list by name.\n\t * @param {string} value The value/name of the item to remove.\n\t */\n\tremoveItem: (value: string) => void;\n\t/**\n\t * Updates the entire list of items.\n\t * @param {string[]} new_values Array of new item values.\n\t * @param {string} [item_selected] The value of the item to select.\n\t */\n\tupdateItems: (new_values: string[], item_selected?: string) => void;\n\t/**\n\t * Retrieves the currently selected items.\n\t * @returns {string[]} Array of selected item names.\n\t */\n\tgetSelected: () => string[];\n\t/**\n\t * Gets the list item element by its index.\n\t * @param {number} index The index of the item.\n\t * @returns {HTMLElement} The list item element.\n\t */\n\tgetByIndex: (index: number) => HTMLElement;\n\t/**\n\t * Selects an item by its index.\n\t * @param {number} index The index of the item to select.\n\t * @param {boolean} [add_to_selection] If true, adds to existing selection instead of replacing it.\n\t * @returns {HTMLElement} The selected list item element.\n\t */\n\tselectIndex: (index: number, add_to_selection?: boolean) => HTMLElement;\n\t/**\n\t * Deselects an item by its index.\n\t * @param {number} index The index of the item to deselect.\n\t * @returns {HTMLElement} The deselected list item element.\n\t */\n\tdeselectIndex: (index: number) => HTMLElement;\n\t/**\n\t * Scrolls the list to ensure the item at the specified index is visible.\n\t * @param {number} index The index of the item to scroll to.\n\t */\n\tscrollToIndex: (index: number) => void;\n\t/**\n\t * Selects all items in the list.\n\t */\n\tselectAll: () => void;\n\t/**\n\t * Deselects all items in the list.\n\t */\n\tdeselectAll: () => void;\n\t/**\n\t * Sets the values (items) of the list.\n\t * @param {string[]} value Array of item values.\n\t */\n\tsetValue: (value: InspectorValue) => void;\n\t/**\n\t * Returns the number of items in the list.\n\t */\n\tgetNumberOfItems: () => void;\n\t/**\n\t * Filters the list items based on a callback or string match.\n\t * @param {string | ((value: number, item: HTMLElement, selected: boolean) => boolean)} [callback] filter string or callback function.\n\t * @param {boolean} [case_sensitive] Whether the string filter is case sensitive.\n\t */\n\tfilter: (callback?: string |\n\t\t((value: number, item: HTMLElement, selected: boolean) => boolean),\n\t\tcase_sensitive?: boolean) => void;\n\t/**\n\t * Selects items that match a filter callback.\n\t * @param {(value: number, item: HTMLElement, selected: boolean) => boolean} callback Function to determine if an item should be selected.\n\t */\n\tselectByFilter: (callback: ((value: number, item: HTMLElement, selected: boolean) => boolean)) => void;\n}\n\n\n/**\n * Widget to select from a list of items.\n * @function AddList\n * @param {Inspector} that The inspector instance.\n * @param {string} [name] The name of the widget.\n * @param {string[]} [values] Array of string values for the list items.\n * @param {AddListOptions} [options] Configuration options.\n * @returns {InspectorListWidget} The created list widget element.\n */\nexport function AddList(that: Inspector, name?: string, values?: string[], options?: AddListOptions): InspectorListWidget\n{\n\tvalues = values ?? [];\n\toptions = options ?? {};\n\tconst valueName = that.getValueName(name, options);\n\n\tlet listHeight = \"\";\n\tif (options.height) { listHeight = \"style='height: 100%; overflow: auto;'\"; }\n\n\tconst code = `<ul class='lite-list' ${listHeight} tabIndex='${that.tabIndex}'><ul>`;\n\tthat.tabIndex++;\n\n\tconst element = that.createWidget(name, `<span class='inputfield full ${options.disabled ?\n\t\t\"disabled\" : \"\"}' style='height: 100%;'>${code}</span>`, options) as InspectorListWidget;\n\n\tconst infoContent = element.querySelector(\".info_content\") as HTMLElement;\n\tinfoContent.style.height = \"100%\";\n\n\telement.querySelector(\".lite-list\");\n\tconst inputField = element.querySelector(\".inputfield\") as HTMLInputElement;\n\tinputField.style.height = \"100%\";\n\tinputField.style.paddingBottom = \"0.2em\";\n\n\tconst ul_elements = element.querySelectorAll(\"ul\");\n\n\tconst _onKey = function (e: KeyboardEvent)\n\t{\n\t\tconst selected = element.querySelector(\"li.selected\") as HTMLLIElement;\n\t\tif (!selected) { return; }\n\n\t\tif (e.code == 'Enter') // Intro\n\t\t{\n\t\t\tif (!selected) { return; }\n\t\t\tlet pos: string | number | undefined = selected.dataset[\"pos\"];\n\t\t\tif (pos == undefined) { return; }\n\t\t\tpos = typeof pos == \"string\" ? parseFloat(pos) : 0;\n\t\t\tconst value = values![pos];\n\t\t\tif (options!.onDoubleClick) { options!.onDoubleClick.call(that, value); }\n\t\t}\n\t\telse if (e.code == 'ArrowDown') // Arrow down\n\t\t{\n\t\t\tconst next = selected.nextSibling;\n\t\t\tif (next) { LiteGUI.trigger(next, \"click\"); }\n\t\t\tselected.scrollIntoView({ block: \"end\", behavior: \"smooth\" });\n\t\t}\n\t\telse if (e.code == 'ArrowUp') // Arrow up\n\t\t{\n\t\t\tconst prev = selected.previousSibling;\n\t\t\tif (prev) { LiteGUI.trigger(prev, \"click\"); }\n\t\t\tselected.scrollIntoView({ block: \"end\", behavior: \"smooth\" });\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\treturn true;\n\t};\n\tconst _onItemClick = (e: MouseEvent): void =>\n\t{\n\t\tconst el = e.target as HTMLLIElement;\n\t\tif (options!.multiSelection)\n\t\t{\n\t\t\tel.classList.toggle(\"selected\");\n\t\t}\n\t\telse\n\t\t{\n\t\t\tconst lis = element.querySelectorAll(\"li\");\n\t\t\tfor (let i = 0; i < lis.length; ++i)\n\t\t\t{\n\t\t\t\tlis[i].classList.remove(\"selected\");\n\t\t\t}\n\t\t\tel.classList.add(\"selected\");\n\t\t}\n\n\t\tlet pos: string | number | undefined = el.dataset[\"pos\"];\n\t\tif (pos == undefined) { return; }\n\t\tpos = typeof pos == \"string\" ? parseFloat(pos) : 0;\n\t\tconst value = values![pos];\n\t\tthat.onWidgetChange(element, valueName, value, options);\n\t\tLiteGUI.trigger(element, \"wadded\", value);\n\t};\n\tconst _onItemDblClick = function (e: MouseEvent)\n\t{\n\t\tconst el = e.target as HTMLLIElement;\n\t\tlet pos: string | number | undefined = el.dataset[\"pos\"];\n\t\tif (pos == undefined) { return; }\n\t\tpos = typeof pos == \"string\" ? parseFloat(pos) : 0;\n\t\tconst value = values![pos];\n\t\tif (options!.onDoubleClick) { options!.onDoubleClick.call(that, value); }\n\t};\n\tconst _focusCallback = function ()\n\t{\n\t\tdocument.addEventListener(\"keydown\", _onKey, true);\n\t};\n\tconst _blurCallback = function ()\n\t{\n\t\tdocument.removeEventListener(\"keydown\", _onKey, true);\n\t};\n\n\tfor (let i = 0; i < ul_elements.length; ++i)\n\t{\n\t\tconst ul = ul_elements[i];\n\t\tul.addEventListener(\"focus\", _focusCallback);\n\t\tul.addEventListener(\"blur\", _blurCallback);\n\t}\n\n\n\telement.updateItems = function (newValues: string[], itemSelected?: string)\n\t{\n\t\titemSelected = itemSelected ?? options!.selected;\n\t\tif (!itemSelected && newValues.length > 0)\n\t\t{\n\t\t\titemSelected = newValues[0] ?? '';\n\t\t}\n\t\tvalues = newValues;\n\t\tconst ul = this.querySelector(\"ul\") as HTMLElement;\n\t\tul.innerHTML = \"\";\n\n\t\tif (values)\n\t\t{\n\t\t\tfor (const i in values)\n\t\t\t{\n\t\t\t\tconst liElement = _insertItem(values[i], itemSelected == values[i] ? true : false, i);\n\t\t\t\tul.appendChild(liElement);\n\t\t\t}\n\t\t}\n\n\t\tconst li = ul.querySelectorAll(\"li\");\n\t\tLiteGUI.bind(li, \"click\", { handleEvent: _onItemClick });\n\t};\n\n\tfunction _insertItem(value: string | number | ListItemOptions, selected: boolean, index?: string)\n\t{\n\t\tconst itemIndex = index; // To reference it\n\t\tlet itemTitle = \"\"; // To show in the list\n\n\t\tlet itemStyle = null;\n\t\tlet icon = \"\";\n\n\t\tif (typeof value === \"string\" || typeof value === \"number\")\n\t\t{\n\t\t\titemTitle = value.toString();\n\t\t}\n\t\telse\n\t\t{\n\t\t\titemTitle = value.content ?? value.title ?? value.name ?? index;\n\t\t\titemStyle = value.style;\n\t\t\tif (value.icon) { icon = `<img src='${value.icon}' class='icon' /> `; }\n\t\t\tif (value.selected) { selected = true; }\n\t\t}\n\n\n\t\tlet itemName = itemTitle;\n\t\titemName = itemName.replace(/<(?:.|\\n)*?>/gm, ''); // Remove html tags that could break the html\n\n\t\tconst liItem = document.createElement(\"li\");\n\t\tliItem.classList.add(`item-${LiteGUI.safeName(itemIndex ?? \"\")}`);\n\t\tif (selected) { liItem.classList.add('selected'); }\n\t\tliItem.dataset[\"name\"] = itemName;\n\t\tliItem.dataset[\"pos\"] = itemIndex;\n\t\tliItem.value = (value as number);\n\t\tif (itemStyle) { liItem.setAttribute(\"style\", itemStyle); }\n\t\tliItem.innerHTML = icon + itemTitle;\n\t\tliItem.addEventListener(\"click\", _onItemClick);\n\t\tif (options!.onDoubleClick)\n\t\t{\n\t\t\tliItem.addEventListener(\"dblclick\", _onItemDblClick);\n\t\t}\n\t\treturn liItem;\n\t}\n\n\telement.addItem = function (value: string, selected: boolean)\n\t{\n\t\tvalues!.push(value);\n\t\tconst ul = this.querySelector(\"ul\") as HTMLElement;\n\t\tconst liElement = _insertItem(value, selected);\n\t\tul.appendChild(liElement);\n\t};\n\n\telement.removeItem = function (name: string)\n\t{\n\t\tconst items = element.querySelectorAll(\".wcontent li\") as NodeListOf<HTMLLIElement>;\n\t\tfor (let i = 0; i < items.length; i++)\n\t\t{\n\t\t\tif (items[i].dataset[\"name\"] == name)\n\t\t\t{\n\t\t\t\tLiteGUI.remove(items[i]);\n\t\t\t}\n\t\t}\n\t};\n\n\telement.updateItems(values, options.selected);\n\tthat.appendWidget(element, options);\n\n\telement.getSelected = function ()\n\t{\n\t\tconst r: string[] = [];\n\t\tconst selected = this.querySelectorAll(\"ul li.selected\") as NodeListOf<HTMLLIElement>;\n\t\tfor (let i = 0; i < selected.length; ++i)\n\t\t{\n\t\t\tr.push(selected[i].dataset[\"name\"] as string);\n\t\t}\n\t\treturn r;\n\t};\n\n\telement.getByIndex = function (index: number)\n\t{\n\t\tconst items = this.querySelectorAll(\"ul li\") as NodeListOf<HTMLLIElement>;\n\t\treturn items[index] as HTMLElement;\n\t};\n\n\telement.selectIndex = function (num: number, add_to_selection?: boolean)\n\t{\n\t\tconst items = this.querySelectorAll(\"ul li\") as NodeListOf<HTMLLIElement>;\n\t\tfor (let i = 0; i < items.length; ++i)\n\t\t{\n\t\t\tconst item = items[i];\n\t\t\tif (i == num)\n\t\t\t{\n\t\t\t\titem.classList.add(\"selected\");\n\t\t\t}\n\t\t\telse if (!add_to_selection)\n\t\t\t{\n\t\t\t\titem.classList.remove(\"selected\");\n\t\t\t}\n\t\t}\n\t\treturn items[num];\n\t};\n\n\telement.deselectIndex = function (num: number)\n\t{\n\t\tconst items = this.querySelectorAll(\"ul li\") as NodeListOf<HTMLLIElement>;\n\t\tconst item = items[num];\n\t\tif (item) { item.classList.remove(\"selected\"); }\n\t\treturn item;\n\t};\n\n\telement.scrollToIndex = function (num: number)\n\t{\n\t\tconst items = this.querySelectorAll(\"ul li\") as NodeListOf<HTMLLIElement>;\n\t\tconst item = items[num];\n\t\tif (!item) { return; }\n\t\tthis.scrollTop = item.offsetTop;\n\t};\n\n\telement.selectAll = function ()\n\t{\n\t\tconst items = this.querySelectorAll(\"ul li\");\n\t\tfor (let i = 0; i < items.length; ++i)\n\t\t{\n\t\t\tconst item = items[i];\n\t\t\tif (item.classList.contains(\"selected\")) { continue; }\n\t\t\tLiteGUI.trigger(item, \"click\");\n\t\t}\n\t};\n\n\telement.deselectAll = function ()\n\t{\n\t\tconst items = this.querySelectorAll(\"ul li\");\n\t\tfor (let i = 0; i < items.length; ++i)\n\t\t{\n\t\t\tconst item = items[i];\n\t\t\tif (!item.classList.contains(\"selected\")) { continue; }\n\t\t\tLiteGUI.trigger(item, \"click\");\n\t\t}\n\t};\n\n\telement.setValue = function (v: InspectorValue)\n\t{\n\t\tif (v === undefined || !Array.isArray(v)) { return; }\n\t\tthis.updateItems(v as string[]);\n\t};\n\n\telement.getNumberOfItems = function ()\n\t{\n\t\tconst items = this.querySelectorAll(\"ul li\");\n\t\treturn items.length;\n\t};\n\n\telement.filter = function (callback?: string |\n\t\t((value: number, item: HTMLElement, selected: boolean) => boolean),\n\tcaseSensitive?: boolean)\n\t{\n\t\tconst items = this.querySelectorAll(\"ul li\") as NodeListOf<HTMLLIElement>;\n\t\tlet useString = false;\n\t\tlet onStringChange: ((value: string, item: HTMLElement, selected: boolean) => boolean) | undefined = undefined;\n\n\t\tif (typeof callback == 'string')\n\t\t{\n\t\t\tconst needle = callback;\n\t\t\tif (caseSensitive) { needle.toLowerCase(); }\n\t\t\tuseString = true;\n\t\t\tonStringChange = function (v: string) { return ((caseSensitive ? v : v.toLowerCase()).indexOf(needle) != -1); };\n\t\t}\n\n\t\tfor (let i = 0; i < items.length; ++i)\n\t\t{\n\t\t\tconst item = items[i];\n\t\t\tif (callback == undefined)\n\t\t\t{\n\t\t\t\titem.style.display = \"\";\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet value: number | string = item.value;\n\t\t\tif (useString && typeof value !== \"string\" && onStringChange)\n\t\t\t{\n\t\t\t\tvalue = item.innerHTML;\n\t\t\t\tif (!onStringChange(value, item, item.classList.contains(\"selected\")))\n\t\t\t\t{\n\t\t\t\t\titem.style.display = \"none\";\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\titem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (typeof callback != \"string\")\n\t\t\t{\n\t\t\t\tif (!callback(value, item, item.classList.contains(\"selected\")))\n\t\t\t\t{\n\t\t\t\t\titem.style.display = \"none\";\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\titem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\telement.selectByFilter = function (callback: ((value: number, item: HTMLElement, selected: boolean) => boolean))\n\t{\n\t\tconst items = this.querySelectorAll(\"ul li\") as NodeListOf<HTMLLIElement>;\n\t\tfor (let i = 0; i < items.length; ++i)\n\t\t{\n\t\t\tconst item = items[i];\n\t\t\tconst r = callback(item.value, item, item.classList.contains(\"selected\"));\n\t\t\tif (r === true)\n\t\t\t{\n\t\t\t\titem.classList.add(\"selected\");\n\t\t\t}\n\t\t\telse if (r === false)\n\t\t\t{\n\t\t\t\titem.classList.remove(\"selected\");\n\t\t\t}\n\t\t}\n\t};\n\n\t// Ensure the initial selected value is stored in the inspector\n\tconst initialSelection = element.getSelected();\n\tif (initialSelection.length > 0)\n\t{\n\t\tif (options.multiSelection)\n\t\t{\n\t\t\tthat.values.set(valueName, initialSelection);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthat.values.set(valueName, initialSelection[0]);\n\t\t}\n\t}\n\n\tif (options.height) { element.scrollTop = 0; }\n\tthat.processElement(element, options);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddList(name?: string, values?: string[], options?: AddListOptions): InspectorListWidget;\n\t}\n}\n\nInspector.prototype.addList = function (name?: string, values?: string[], options?: AddListOptions): InspectorListWidget\n{\n\treturn AddList(this, name, values, options);\n};\n\nInspector.widgetConstructors.list = \"addList\";","import { Inspector } from \"./inspector\";\nimport { Dragger, DraggerOptions } from \"../dragger\";\nimport { CreateWidgetOptions, WidgetChangeOptions, InspectorActiveWidget, InspectorValue } from \"../@types/Inspector\";\nimport { FocusElement, Trigger } from \"../utilities\";\n\n/**\n * Options for creating a Number widget.\n */\nexport interface AddNumberOptions extends CreateWidgetOptions, DraggerOptions, Omit<WidgetChangeOptions, 'callback'>\n{\n\t/**\n\t * Tab index for the input element.\n\t */\n\ttabIndex?: number;\n\t/**\n\t * CSS class to apply to the widget.\n\t */\n\textraClass?: string;\n\t/**\n\t * Whether to use full number width.\n\t */\n\tfullNumWidth?: boolean;\n\t/**\n\t * Number of digits after the decimal point.\n\t */\n\tprecision?: number;\n\t/**\n\t * Step value for incrementing/decrementing.\n\t */\n\tstep?: number;\n\t/**\n\t * Unit string to display after the number (e.g. \"px\", \"%\").\n\t */\n\tunits?: string;\n\t/**\n\t * Whether the widget is disabled.\n\t */\n\tdisabled?: boolean;\n\t/**\n\t * Callback function triggered when the value changes visually.\n\t */\n\tonChange?: (value: number) => number | void;\n\t/**\n\t * Callback function triggered after the value changes logically.\n\t */\n\tcallback?: (value: number) => void;\n\t/**\n\t * Callback function triggered before the value changes (on start dragging).\n\t */\n\tpreCallback?: () => void;\n}\n\n/**\n * Interface representing the Number widget.\n */\nexport interface InspectorNumberWidget extends InspectorActiveWidget\n{\n\t/**\n\t * Reference to the internal Dragger instance.\n\t */\n\tdragger: Dragger;\n\t/**\n\t * Sets the valid range for the number.\n\t * @param {number} min Minimum value.\n\t * @param {number} max Maximum value.\n\t */\n\tsetRange: (min: number, max: number) => void;\n\t/**\n\t * Sets the value of the widget.\n\t * @param {number | string} [value] The new value.\n\t * @param {boolean} [skipEvent] If true, change event is not triggered.\n\t */\n\tsetValue: (value?: InspectorValue, skipEvent?: boolean) => void;\n}\n\n/**\n * Widget to edit numbers (it adds a dragging mini widget in the right side).\n * @function AddNumber\n * @param {Inspector} that The inspector instance.\n * @param {string | undefined} name The name of the widget.\n * @param {number | undefined} value The initial value.\n * @param {AddNumberOptions | undefined} options Configuration options.\n * @returns {InspectorNumberWidget} The created number widget element.\n */\nexport function AddNumber(that: Inspector, name?: string, value?: number, options?: AddNumberOptions): InspectorNumberWidget\n{\n\tvalue = value ?? 0;\n\toptions = options ?? {};\n\tconst valueName = that.getValueName(name, options);\n\tthat.values.set(valueName, value);\n\n\tconst element = that.createWidget(name, \"\", options) as InspectorNumberWidget;\n\tthat.appendWidget(element, options);\n\n\toptions.extraClass = \"full\";\n\toptions.tabIndex = that.tabIndex;\n\toptions.fullNumWidth = true;\n\toptions.precision = options.precision ?? 2;\n\toptions.step = options.step ?? (options.precision == 0 ? 1 : 0.1);\n\n\tthat.tabIndex++;\n\n\tconst dragger = new Dragger(value, options);\n\tdragger.root.style.width = \"calc( 100% - 1px )\";\n\telement.querySelector(\".wcontent\")!.appendChild(dragger.root);\n\n\tconst _preChange = function (options: AddNumberOptions)\n\t{\n\t\tif (options.preCallback) { options.preCallback.call(element); }\n\t};\n\tdragger.root.addEventListener(\"start_dragging\", _preChange.bind(undefined, options));\n\telement.dragger = dragger;\n\n\tif (options.disabled) { dragger.input.setAttribute(\"disabled\", \"disabled\"); }\n\n\tconst input = element.querySelector(\"input\") as HTMLInputElement;\n\tinput.addEventListener(\"change\", (e: Event) =>\n\t{\n\t\tconst el = e.target as HTMLInputElement;\n\t\tTrigger(element, \"wbeforechange\", el.value);\n\n\t\tthat.values.set(valueName, el.value);\n\t\tif (options == undefined || typeof (options) == \"function\") { return; }\n\t\tif (options.onChange && dragger.dragging)\n\t\t{\n\t\t\tconst ret = options.onChange.call(element, parseFloat(el.value));\n\t\t\tif (typeof (ret) == \"number\") { el.value = ret.toString(); }\n\t\t}\n\t\telse if ((options.onChange || options.callback) && !dragger.dragging)\n\t\t{\n\t\t\tlet ret = undefined;\n\t\t\tif (options.callback)\n\t\t\t{\n\t\t\t\tret = options.callback.call(element, parseFloat(el.value));\n\t\t\t}\n\t\t\telse if (options.onChange)\n\t\t\t{\n\t\t\t\tret = options.onChange.call(element, parseFloat(el.value));\n\t\t\t}\n\t\t\tif (typeof (ret) == \"number\") { el.value = ret.toString(); }\n\t\t}\n\t\tTrigger(element, \"wchange\", el.value);\n\t\tif (that.onChange) { that.onChange(valueName, el.value, element); }\n\t});\n\n\tdragger.root.addEventListener(\"stop_dragging\", () =>\n\t{\n\t\tTrigger(input, \"change\");\n\t});\n\n\telement.setValue = function (value?: InspectorValue, skipEvent?: boolean)\n\t{\n\t\tif (options == undefined || typeof options == \"function\") { return; }\n\t\tif (value === undefined || (typeof value !== 'number' && typeof value !== 'string')) { return; }\n\n\t\tlet numValue = (typeof value === 'string') ? parseFloat(value) : value;\n\t\tif (options.precision) { numValue = parseFloat(numValue.toFixed(options.precision)); }\n\t\tlet strValue = numValue.toString();\n\t\tstrValue += options.units ?? '';\n\t\tif (input.value == strValue) { return; }\n\t\tinput.value = strValue;\n\t\tif (!skipEvent) { Trigger(input, \"change\"); }\n\t};\n\n\telement.setRange = function (min: number, max: number) { dragger.setRange(min, max); };\n\telement.getValue = function () { return parseFloat(input.value); };\n\telement.focus = function () { FocusElement(input); };\n\telement.disable = function () { input.disabled = true; };\n\telement.enable = function () { input.disabled = false; };\n\tthat.processElement(element, options);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddNumber(name?: string, value?: number, options?: AddNumberOptions): InspectorNumberWidget;\n\t}\n}\n\nInspector.prototype.addNumber = function (name?: string, value?: number, options?: AddNumberOptions): InspectorNumberWidget\n{\n\treturn AddNumber(this, name, value, options);\n};\n\nInspector.widgetConstructors.number = \"addNumber\";","import { LiteGUI } from \"../core\";\nimport { Inspector } from \"./inspector\";\nimport { CreateWidgetOptions, InspectorActiveWidget, InspectorValue, WidgetChangeOptions } from \"../@types/Inspector\";\nimport { DraggerOptions } from \"../dragger\";\n\n/**\n * Options for creating a Pad widget.\n */\nexport interface AddPadOptions extends CreateWidgetOptions, DraggerOptions, Omit<WidgetChangeOptions, 'callback'>\n{\n\t/**\n\t * Minimum value for both axes (shorthand).\n\t */\n\tmin?: number;\n\t/**\n\t * Maximum value for both axes (shorthand).\n\t */\n\tmax?: number;\n\t/**\n\t * Minimum X value.\n\t */\n\tminX?: number;\n\t/**\n\t * Minimum Y value.\n\t */\n\tminY?: number;\n\t/**\n\t * Maximum X value.\n\t */\n\tmaxX?: number;\n\t/**\n\t * Maximum Y value.\n\t */\n\tmaxY?: number;\n\t/**\n\t * URL of the background image for the pad.\n\t */\n\tbackground?: string;\n\t/**\n\t * Callback function triggered when value changes.\n\t */\n\tcallback?: (values: [number, number]) => [number, number];\n}\n\n/**\n * Interface representing the Pad widget.\n */\nexport interface InspectorPadWidget extends InspectorActiveWidget\n{\n\t/**\n\t * Sets the values for the pad.\n\t * @param {[number, number]} [values] The new X and Y values.\n\t */\n\tsetValue: (values?: InspectorValue) => void;\n}\n\n/**\n * Widget to edit two numbers using a rectangular pad where you can drag horizontally and vertically a handler.\n * @function AddPad\n * @param {Inspector} that The inspector instance.\n * @param {string} name The name of the widget.\n * @param {[number, number]} [value] Initial values [x, y].\n * @param {AddPadOptions | ((value: [number, number]) => [number, number])} [options] Configuration options or callback function.\n * @returns {InspectorPadWidget} The created pad widget element.\n */\nexport function AddPad(that: Inspector, name: string,\n\tvalue: [number, number] = [0, 0],\n\toptions: AddPadOptions | ((value: [number, number]) => [number, number]) = {}):\n\tInspectorPadWidget\n{\n\tif (typeof options === \"function\")\n\t{\n\t\toptions = { callback: options };\n\t}\n\tconst valueName = that.getValueName(name, options);\n\tthat.values.set(valueName, value);\n\n\tconst element = that.createWidget(name, \"\", options) as InspectorPadWidget;\n\n\toptions.step = options.step ?? 0.1;\n\toptions.tabIndex = that.tabIndex;\n\toptions.full = true;\n\tthat.tabIndex++;\n\n\tconst minX = options.minX ?? options.min ?? 0;\n\tconst minY = options.minY ?? options.min ?? 0;\n\tconst maxX = options.maxX ?? options.max ?? 1;\n\tconst maxY = options.maxY ?? options.max ?? 1;\n\n\tconst wcontent = element.querySelector(\".wcontent\") as HTMLElement;\n\n\tconst pad = document.createElement(\"div\") as HTMLDivElement;\n\tpad.className = \"litepad\";\n\twcontent.appendChild(pad);\n\tpad.style.width = \"100%\";\n\tpad.style.height = \"100px\";\n\tif (options.background)\n\t{\n\t\tpad.style.backgroundImage = `url('${options.background}')`;\n\t\tpad.style.backgroundSize = \"100%\";\n\t\tpad.style.backgroundRepeat = \"no-repeat\";\n\t}\n\n\tconst handler = document.createElement(\"div\");\n\thandler.className = \"litepad-handler\";\n\tpad.appendChild(handler);\n\n\toptions.tabIndex = that.tabIndex;\n\tthat.tabIndex++;\n\n\tfunction mouseDown(e: MouseEvent)\n\t{\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\n\t}\n\n\tfunction mouseMove(e: MouseEvent)\n\t{\n\t\tconst b = pad.getBoundingClientRect();\n\n\t\tconst mouse_x = e.pageX - b.left;\n\t\tconst mouse_y = e.pageY - b.top;\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tlet x = mouse_x / (b.width);\n\t\tlet y = mouse_y / (b.height);\n\n\t\tx = x * (maxX - minX) + minX;\n\t\ty = y * (maxY - minY) + minX;\n\n\t\tconst r = [x, y] as [number, number];\n\n\t\tLiteGUI.trigger(element, \"wbeforechange\", [r]);\n\t\telement.setValue(r);\n\n\t\tif (options && (options as AddPadOptions).callback)\n\t\t{\n\t\t\tconst new_val = (options as AddPadOptions).callback?.call(element, r);\n\t\t\tif (new_val && new_val.length >= 2)\n\t\t\t{\n\t\t\t\telement.setValue(new_val);\n\t\t\t}\n\t\t}\n\n\t\tLiteGUI.trigger(element, \"wchange\", [r]);\n\t\tif (that.onChange) { that.onChange(valueName, r, element); }\n\t}\n\n\tfunction mouseUp(e: MouseEvent)\n\t{\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\n\t\tdocument.body.removeEventListener(\"mouseup\", mouseUp);\n\t}\n\n\tpad.addEventListener(\"mousedown\", mouseDown);\n\n\telement.setValue = function (value?: InspectorValue)\n\t{\n\t\tif (value === undefined || !Array.isArray(value) || value.length < 2) { return; }\n\t\tif (typeof value[0] !== 'number' || typeof value[1] !== 'number') { return; }\n\n\t\tconst b = pad.getBoundingClientRect();\n\t\tlet x = (value[0] - minX) / (maxX - minX);\n\t\tlet y = (value[1] - minY) / (maxY - minY);\n\t\tx = Math.max(0, Math.min(x, 1)); // Clamp\n\t\ty = Math.max(0, Math.min(y, 1));\n\n\t\tconst w = ((b.width - 10) / b.width) * 100;\n\t\tconst h = ((b.height - 10) / b.height) * 100;\n\t\thandler.style.left = `${(x * w).toFixed(1)}%`;\n\t\thandler.style.top = `${(y * h).toFixed(1)}%`;\n\t};\n\n\tthat.appendWidget(element, options);\n\telement.setValue(value);\n\tthat.processElement(element, options);\n\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddPad(name: string, value?: [number, number], options?: AddPadOptions | ((value: [number, number]) => [number, number])): InspectorPadWidget;\n\t}\n}\n\nInspector.prototype.addPad = function (name: string, value?: [number, number], options?: AddPadOptions | ((value: [number, number]) => [number, number])): InspectorPadWidget\n{\n\treturn AddPad(this, name, value, options);\n};\n\nInspector.widgetConstructors.pad = \"addPad\";\n","import type { InspectorWidget } from \"../@types/Inspector\";\nimport { Inspector } from \"./inspector\";\n\n/**\n * Creates a horizontal separator line in the inspector.\n * @function AddSeparator\n * @param {Inspector} that The inspector instance.\n * @returns {InspectorWidget} The separator widget element.\n */\nexport function AddSeparator(that: Inspector)\n{\n\tconst element = document.createElement(\"DIV\") as InspectorWidget;\n\telement.className = \"separator\";\n\tthat.appendWidget(element);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n interface Inspector\n {\n addSeparator(): InspectorWidget;\n }\n}\n\nInspector.prototype.addSeparator = function (): InspectorWidget\n{\n\treturn AddSeparator(this);\n};\n\nInspector.widgetConstructors.separator = \"addSeparator\";","import { Slider } from \"../widgets\";\nimport type { CreateWidgetOptions, InspectorActiveWidget, InspectorValue, WidgetChangeOptions } from \"../@types/Inspector\";\nimport { Inspector } from \"./inspector\";\n\n/**\n * Options for creating a Slider widget.\n */\nexport interface AddSliderOptions extends CreateWidgetOptions, Omit<WidgetChangeOptions, 'callback'>\n{\n\t/**\n\t * Minimum value of the range.\n\t */\n\tmin?: number;\n\t/**\n\t * Maximum value of the range.\n\t */\n\tmax?: number;\n\t/**\n\t * Step size for the slider.\n\t */\n\tstep?: number;\n\t/**\n\t * Callback function triggered when value changes.\n\t */\n\tcallback?: (value: number) => void;\n}\n\n/**\n * Interface representing the Slider widget.\n */\nexport interface InspectorSliderWidget extends InspectorActiveWidget\n{\n\t/**\n\t * Reference to the internal Slider widget.\n\t */\n\tslider: Slider;\n\t/**\n\t * Sets the value of the slider.\n\t * @param {number} [value] The new value.\n\t * @param {boolean} [skipEvent] If true, prevents triggering the change event.\n\t */\n\tsetValue: (value?: InspectorValue, skipEvent?: boolean) => void;\n}\n\n/**\n * Widget to edit a number using a slider.\n * @function AddSlider\n * @param {Inspector} that The inspector instance.\n * @param {string | undefined} name The name of the widget.\n * @param {number | undefined} value The initial value.\n * @param {AddSliderOptions | undefined} options Configuration options.\n * @returns {InspectorSliderWidget} The created slider widget element.\n */\nexport function AddSlider(that: Inspector, name?: string, value?: number, options?: AddSliderOptions): InspectorSliderWidget\n{\n\tvalue = value ?? 0;\n\toptions = options ?? {};\n\toptions.min = options.min ?? 0;\n\toptions.max = options.max ?? 1;\n\toptions.step = options.step || 0.01;\n\tconst valueName = that.getValueName(name, options);\n\tthat.values.set(valueName, value);\n\n\tconst element = that.createWidget(name,\n\t\t\"<span class='inputfield full'>\\n<input tabIndex='\" + that.tabIndex +\n\t\t\"' type='text' class='slider-text fixed liteslider-value' value='' /><span class='slider-container'></span></span>\",\n\t\toptions) as InspectorSliderWidget;\n\n\tconst slider_container = element.querySelector(\".slider-container\") as HTMLElement;\n\n\tconst slider = new Slider(value, options);\n\telement.slider = slider;\n\tslider_container.appendChild(slider.root);\n\n\t// Text change -> update slider\n\tconst skip_change = false; // Used to avoid recursive loops\n\tconst textInput = element.querySelector(\".slider-text\") as HTMLInputElement;\n\ttextInput.value = value.toString();\n\ttextInput.addEventListener('change', () =>\n\t{\n\t\tif (skip_change) { return; }\n\t\tconst v = parseFloat(textInput.value);\n\t\tvalue = v;\n\t\tslider.setValue(v);\n\t\tthat.onWidgetChange(element, valueName, v, options as unknown as WidgetChangeOptions);\n\t});\n\n\t// Slider change -> update Text\n\tslider.onChange = (value: number) =>\n\t{\n\t\ttextInput.value = value.toString();\n\t\tthat.onWidgetChange(element, valueName, value, options as unknown as WidgetChangeOptions);\n\t};\n\n\tthat.appendWidget(element, options);\n\n\telement.setValue = function (v?: InspectorValue, skipEvent?: boolean)\n\t{\n\t\tif (v === undefined || typeof v !== 'number') { return; }\n\t\tvalue = v;\n\t\tslider.setValue(v, skipEvent);\n\t};\n\telement.getValue = function ()\n\t{\n\t\treturn value;\n\t};\n\n\tthat.processElement(element, options);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddSlider(name?: string, value?: number, options?: AddSliderOptions): InspectorSliderWidget;\n\t}\n}\n\nInspector.prototype.addSlider = function (name?: string, value?: number, options?: AddSliderOptions): InspectorSliderWidget\n{\n\treturn AddSlider(this, name, value, options);\n};\n\nInspector.widgetConstructors.slider = \"addSlider\";","import { CreateWidgetOptions, InspectorActiveWidget, InspectorValue, WidgetChangeOptions } from \"../@types/Inspector\";\nimport { Trigger } from \"../utilities\";\nimport { Inspector } from \"./inspector\";\n\n/**\n * Options for creating a String widget.\n */\nexport interface AddStringOptions extends CreateWidgetOptions, Omit<WidgetChangeOptions, 'callback'>\n{\n\t/**\n\t * If true, the input type will be 'password' to hide characters.\n\t */\n\tpassword?: true;\n\t/**\n\t * If true, automatically sets focus to this input.\n\t */\n\tfocus?: boolean;\n\t/**\n\t * If true, triggers the callback on 'keyup' instead of 'change'.\n\t */\n\timmediate?: boolean;\n\t/**\n\t * Whether the input is disabled.\n\t */\n\tdisabled?: boolean;\n\t/**\n\t * Placeholder text for the input field.\n\t */\n\tplaceHolder?: string;\n\t/**\n\t * Text alignment (e.g., 'right').\n\t */\n\talign?: string;\n\t/**\n\t * URL of an icon to display inside the input.\n\t */\n\ticon?: string;\n\t/**\n\t * Callback function triggered when the Enter key is pressed.\n\t */\n\tonEnter?: () => void;\n}\n\n/**\n * Interface representing the String widget.\n */\nexport interface InspectorStringWidget extends InspectorActiveWidget\n{\n\t/**\n\t * Sets the value of the string input.\n\t * @param {string} [value] The new string value.\n\t * @param {boolean} [skipEvent] If true, prevents triggering the change event.\n\t */\n\tsetValue: (value?: InspectorValue, skipEvent?: boolean) => void;\n\t/**\n\t * Sets an icon inside the input field.\n\t * @param {string} img URL of the icon image.\n\t */\n\tsetIcon: (img: string) => void;\n}\n\n/**\n * Widget to edit strings.\n * @function AddString\n * @param {Inspector} that The inspector instance.\n * @param {string} [name] The name/label of the widget.\n * @param {string} [value] The initial value.\n * @param {AddStringOptions} [options] Configuration options.\n * @returns {InspectorStringWidget} The created string widget element.\n */\nexport function AddString(that: Inspector, name?: string, value?: string, options?: AddStringOptions): InspectorStringWidget\n{\n\tvalue = value ?? '';\n\toptions = options ?? {};\n\tconst valueName = that.getValueName(name, options);\n\tthat.values.set(valueName, value);\n\n\tconst inputType = options.password ? \"password\" : \"text\";\n\tconst focus = options.focus ? \"autofocus\" : \"\";\n\tconst isDisabledText = options.disabled ? \"disabled\" : \"\";\n\n\tconst element = that.createWidget(name, \"<span class='inputfield full \" + isDisabledText +\n\t\t\"'><input type='\" + inputType + \"' tabIndex='\" + that.tabIndex + \"' \" + focus + \" class='text string' value='\" +\n\t\tvalue + \"' \" + isDisabledText + \"/></span>\", options) as InspectorStringWidget;\n\tconst input = element.querySelector(\".wcontent input\") as HTMLInputElement;\n\n\tif (options.placeHolder) { input.setAttribute(\"placeHolder\", options.placeHolder); }\n\n\tif (options.align == \"right\")\n\t{\n\t\tinput.style.direction = \"rtl\";\n\t}\n\n\tinput.addEventListener(options.immediate ? \"keyup\" : \"change\", (e: Event) =>\n\t{\n\t\tconst target = e.target as HTMLInputElement;\n\t\tconst value = target.value;\n\t\tconst r = that.onWidgetChange(element, valueName, value, options!);\n\t\tif (r !== undefined) { input.value = r; }\n\t});\n\n\tif (options.onEnter)\n\t{\n\t\tinput.addEventListener(\"keydown\", (e: KeyboardEvent) =>\n\t\t{\n\t\t\tif (e.key === 'Enter')\n\t\t\t{\n\t\t\t\tconst target = e.target as HTMLInputElement;\n\t\t\t\tconst value = target.value;\n\t\t\t\tthat.onWidgetChange(element, name!, value, options!);\n\t\t\t\tif (options!.onEnter) { options!.onEnter(); }\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t});\n\t}\n\n\tthat.tabIndex += 1;\n\n\telement.setIcon = function (img: string)\n\t{\n\t\tif (!img)\n\t\t{\n\t\t\tinput.style.background = \"\";\n\t\t\tinput.style.paddingLeft = \"\";\n\t\t}\n\t\telse\n\t\t{\n\t\t\tinput.style.background = `transparent url('${img}') no-repeat left 4px center`;\n\t\t\tinput.style.paddingLeft = \"1.7em\";\n\t\t}\n\t};\n\tif (options.icon) { element.setIcon(options.icon); }\n\n\telement.setValue = function (value?: InspectorValue, skipEvent?: boolean)\n\t{\n\t\tif (value === undefined || value === input.value) { return; }\n\t\tif (typeof value !== 'string') { return; }\n\t\tinput.value = value;\n\t\tif (!skipEvent) { Trigger(input, \"change\"); }\n\t};\n\telement.getValue = function () { return input.value; };\n\telement.focus = function () { this.querySelector(\"input\")?.focus(); };\n\telement.disable = function () { input.disabled = true; };\n\telement.enable = function () { input.disabled = false; };\n\tthat.appendWidget(element, options);\n\tthat.processElement(element, options);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddString(name?: string, value?: string, options?: AddStringOptions): InspectorStringWidget;\n\t}\n}\n\nInspector.prototype.addString = function (name?: string, value?: string, options?: AddStringOptions): InspectorStringWidget\n{\n\treturn AddString(this, name, value, options);\n};\n\nInspector.widgetConstructors.string = \"addString\";\nInspector.widgetConstructors.text = \"addString\";\n","import { FocusElement, SizeToCSS, Trigger } from \"../utilities\";\nimport { CreateWidgetOptions, InspectorValue, WidgetChangeOptions } from \"../@types/Inspector\";\nimport { Inspector } from \"./inspector\";\nimport { InspectorStringWidget } from \"./string\";\n\n/**\n * Options for creating a StringButton widget.\n */\nexport interface AddStringButtonOptions extends CreateWidgetOptions, WidgetChangeOptions\n{\n\t/**\n\t * Whether the input is disabled.\n\t */\n\tdisabled?: boolean;\n\t/**\n\t * Text to display on the button.\n\t * @default \"...\"\n\t */\n\tbutton?: string;\n\t/**\n\t * URL of an icon to display inside the input.\n\t */\n\ticon?: string;\n\t/**\n\t * Width of the button, auto by default.\n\t */\n\tbuttonWidth?: string | number;\n\t/**\n\t * Callback function triggered when the button is clicked.\n\t */\n\tonClick?: (value: string, e: Event) => void;\n}\n\n/**\n * Widget to edit strings, but it adds a button behind (useful to search values somewhere in case the user does not remember the name).\n * @function AddStringButton\n * @param {Inspector} that The inspector instance.\n * @param {string} [name] The name of the field.\n * @param {string} [value] The string to show.\n * @param {AddStringButtonOptions} [options] Configuration options.\n * @returns {InspectorStringWidget} The created string widget element.\n */\nexport function AddStringButton(that: Inspector, name?: string, value?: string, options?: AddStringButtonOptions): InspectorStringWidget\n{\n\tvalue = value ?? '';\n\toptions = options ?? {};\n\tconst valueName = that.getValueName(name, options);\n\tthat.values.set(valueName!, value);\n\n\tconst element = that.createWidget(name,\n\t\t`<span class='inputfield button'><input type='text' tabIndex='${that.tabIndex}' ` +\n\t\t`class='text string' value='' ${options.disabled ? \"disabled\" : \"\"}/></span>` +\n\t\t`<button class='micro'>${options.button ?? \"...\"}</button>`, options) as InspectorStringWidget;\n\tconst input = element.querySelector(\".wcontent input\") as HTMLInputElement;\n\tinput.value = value;\n\tinput.addEventListener(\"change\", (e: Event) =>\n\t{\n\t\tconst r = that.onWidgetChange(element, valueName, (e.target as HTMLInputElement)!.value, options as unknown as WidgetChangeOptions);\n\t\tif (r !== undefined) { input.value = r; }\n\t});\n\n\tif (options.disabled) { input.setAttribute(\"disabled\", \"disabled\"); }\n\n\tconst button = element.querySelector(\".wcontent button\") as HTMLInputElement;\n\n\telement.setIcon = function (img: string)\n\t{\n\t\tif (!img)\n\t\t{\n\t\t\tbutton.style.backgroundColor = \"\";\n\t\t\tbutton.style.backgroundImage = \"\";\n\t\t\tbutton.style.backgroundRepeat = \"\";\n\t\t\tbutton.style.backgroundPosition = \"\";\n\t\t\tbutton.style.backgroundSize = \"\";\n\t\t\tbutton.style.paddingLeft = \"\";\n\t\t\tbutton.innerHTML = options.button ?? \"...\";\n\t\t}\n\t\telse\n\t\t{\n\t\t\tbutton.innerHTML = \"\";\n\t\t\tbutton.style.backgroundColor = \"transparent\";\n\t\t\tbutton.style.backgroundImage = `url('${img}')`;\n\t\t\tbutton.style.backgroundRepeat = \"no-repeat\";\n\t\t\tbutton.style.backgroundPosition = \"center\";\n\t\t\tbutton.style.backgroundSize = \"contain\";\n\t\t\tbutton.style.paddingLeft = \"\";\n\t\t\tbutton.style.width = \"2em\";\n\t\t\tbutton.style.minWidth = \"2em\";\n\t\t\tbutton.style.height = \"100%\";\n\t\t\tbutton.style.minHeight = \"1.5em\";\n\t\t\tbutton.style.padding = \"0\";\n\t\t\tbutton.style.flexShrink = \"0\";\n\t\t}\n\t};\n\n\tbutton.addEventListener(\"click\", (e: Event) =>\n\t{\n\t\tif (options!.onClick)\n\t\t{\n options!.onClick.call(element, input.value, e);\n\t\t}\n\t});\n\n\toptions.buttonWidth = options.buttonWidth ?? 'auto';\n\tif (options.buttonWidth)\n\t{\n\t\tconst buttonContent = element.querySelector('.wcontent') as HTMLElement;\n\t\tif (options.buttonWidth === 'auto' || options.buttonWidth === 'fit-content')\n\t\t{\n\t\t\tbuttonContent.style.display = 'flex';\n\t\t\tbuttonContent.style.alignItems = 'center';\n\t\t\tconst inputField = element.querySelector(\".inputfield\") as HTMLInputElement;\n\t\t\tinputField.style.width = 'auto';\n\t\t\tinputField.style.flexGrow = '1';\n\t\t\tbutton.style.width = 'auto';\n\t\t\tbutton.style.whiteSpace = 'nowrap';\n\t\t\tbutton.style.padding = '0 10px';\n\t\t\tbutton.style.margin = '0 0 0 4px';\n\t\t}\n\t\telse\n\t\t{\n\t\t\tbutton.style.width = SizeToCSS(options.buttonWidth) ?? '0px';\n\t\t\tconst inputField = element.querySelector(\".inputfield\") as HTMLInputElement;\n\t\t\tinputField.style.width = `calc( 100% - ${button.style.width} - 6px)`;\n\t\t}\n\t}\n\n\n\tthat.tabIndex += 1;\n\tthat.appendWidget(element, options);\n\telement.setValue = function (value?: InspectorValue, skipEvent?: boolean)\n\t{\n\t\tif (value === undefined || value === input.value) { return; }\n\t\tif (typeof value !== 'string') { return; }\n\t\tinput.value = value;\n\t\tif (!skipEvent) { Trigger(input, \"change\"); }\n\t};\n\telement.disable = function () { input.disabled = true; button.disabled = true; };\n\telement.enable = function () { input.disabled = false; button.disabled = false; };\n\telement.getValue = function () { return input.value; };\n\telement.focus = function () { FocusElement(input); };\n\tthat.processElement(element, options);\n\tif (options.icon) { element.setIcon(options.icon); }\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddStringButton(name?: string, value?: string, options?: AddStringButtonOptions): InspectorStringWidget;\n\t}\n}\n\nInspector.prototype.addStringButton = function (name?: string, value?: string, options?: AddStringButtonOptions): InspectorStringWidget\n{\n\treturn AddStringButton(this, name, value, options);\n};\n\nInspector.widgetConstructors.stringbutton = \"addStringButton\";","import { CreateWidgetOptions, InspectorWidget, WidgetChangeOptions } from \"../@types/Inspector\";\nimport { LiteGUI } from \"../core\";\nimport { Inspector } from \"./inspector\";\n\n/**\n * Options for creating an InspectorTags widget.\n */\nexport interface AddTagOptions extends CreateWidgetOptions, Omit<WidgetChangeOptions, 'callback'>\n{\n\t/**\n\t * If true, the widget will be disabled and non-interactive.\n\t * @default false\n\t */\n\tdisabled?: boolean;\n\n\t/**\n\t * Callback function triggered when the tags state changes.\n\t * The value parameter contains a map of tag names to their active state (true/false).\n\t */\n\tcallback?: (value: { [key: string]: boolean }) => void;\n}\n\n/**\n * Interface representing the Tags widget structure.\n */\nexport interface InspectorTagsWidget extends InspectorWidget\n{\n\t/**\n\t * Map of current tags and their active state (true = active/selected, false = inactive).\n\t */\n\ttags: { [key: string]: boolean };\n}\n\n/**\n * Internal interface for the tag DOM element.\n */\ninterface TagElement extends HTMLDivElement\n{\n\t/**\n\t * The name of the tag associated with this element.\n\t */\n\tdata: string;\n}\n\n/**\n * Adds a \"Tags\" widget to the Inspector.\n *\n * This widget manages a list of tags that can be toggled or removed.\n * - **Active Tags**: Displayed in a brighter color (value stored as `true`).\n * - **Inactive Tags**: Displayed in a darker color (value stored as `false`).\n * - **Adding**: Users can type a new tag name and press Enter to add it.\n * - **Removing**: Each tag has a closing 'X' button to remove it from the list.\n * @function AddTags\n *\n * @param {Inspector} that The Inspector instance to attach this widget to.\n * @param {string} [name] The label/name for the widget, used for internal state management.\n * @param {string[]} [values] Initial list of tag names to populate the widget with.\n * @param {AddTagOptions} [options] Configuration options for the widget (see `AddTagOptions`).\n * @returns {InspectorTagsWidget} The created widget HTML element.\n */\nexport function AddTags(that: Inspector, name?: string, values?: string[], options?: AddTagOptions)\n{\n\t// Normalize options and defaults\n\tvalues = values ?? [];\n\toptions = options ?? {};\n\n\t// Determine the property name to bind to\n\tconst valueName = that.getValueName(name, options);\n\n\t// Initialize the internal value for this widget in the inspector\n\tthat.values.set(valueName, {});\n\n\t// Create the HTML structure: input field and a container for tag elements\n\tconst code = \"<input type='text' class='wtaginput inputfield' placeholder='Add tag...'/>\" +\n\t\t\"<div class='wtagscontainer'></div>\";\n\n\t// Create the main widget element leveraging the Inspector's helper\n\tconst element = that.createWidget(name, `<div class='wtagswrapper'>${code}</div>`, options) as InspectorTagsWidget;\n\telement.tags = {};\n\n\t// Cache references to the DOM elements\n\tconst container = element.querySelector(\".wtagscontainer\") as HTMLElement;\n\tconst input = element.querySelector(\".wtaginput\") as HTMLInputElement;\n\n\t// Event listener: Add tag when user presses 'Enter' in the input field\n\tinput.addEventListener(\"keydown\", (e) =>\n\t{\n\t\tif (e.key === \"Enter\")\n\t\t{\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tif (input.value)\n\t\t\t{\n\t\t\t\t_onAddTag(input.value);\n\t\t\t\tinput.value = \"\"; // Clear input after adding\n\t\t\t}\n\t\t}\n\t});\n\n\t// Populate widget with initial values\n\tif (values)\n\t{\n\t\tfor (const i in values)\n\t\t{\n\t\t\t_onAddTag(values[i]);\n\t\t}\n\t}\n\n\t/**\n\t * Internal helper to create and append a single tag element.\n\t * @param {string} tagname Name of the tag to add.\n\t */\n\tfunction _onAddTag(tagname: string)\n\t{\n\t\t// Prevent duplicate tags\n\t\tif (element.tags[tagname] !== undefined) { return; }\n\n\t\t// Register the new tag as active by default\n\t\telement.tags[tagname] = true;\n\n\t\t// Create the DOM element for the tag\n\t\tconst tag = document.createElement(\"div\") as TagElement;\n\t\ttag.data = tagname;\n\t\ttag.className = \"wtag\";\n\t\ttag.innerHTML = `${tagname}<span class='close'>X</span>`;\n\n\t\t// Event listener: Toggle active state on click (unless clicking 'close')\n\t\ttag.addEventListener(\"click\", (e: MouseEvent) =>\n\t\t{\n\t\t\t/*\n\t\t\t * Specific check for the close button is handled in its own listener below,\n\t\t\t * but we ensure we don't process it here if bubbling reaches this far (though propagation is stopped below)\n\t\t\t */\n\t\t\tif ((e.target as HTMLElement).classList.contains(\"close\"))\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Toggle state\n\t\t\telement.tags[tagname] = !element.tags[tagname];\n\n\t\t\t// Update visual appearance\n\t\t\tif (element.tags[tagname])\n\t\t\t{\n\t\t\t\ttag.classList.remove(\"disabled\");\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ttag.classList.add(\"disabled\");\n\t\t\t}\n\n\t\t\t// Notify changes\n\t\t\ttriggerChange();\n\t\t});\n\n\t\t// Event listener: Remove tag when 'close' is clicked\n\t\ttag.querySelector(\".close\")!.addEventListener(\"click\", (e: Event) =>\n\t\t{\n\t\t\te.stopPropagation(); // Prevent triggering the toggle click on parent\n\t\t\tconst tagname = tag.data;\n\n\t\t\t// Update state\n\t\t\tdelete element.tags[tagname];\n\n\t\t\t// Remove from DOM\n\t\t\tLiteGUI.remove(tag);\n\n\t\t\t// Notify removal and changes\n\t\t\tLiteGUI.trigger(element, \"wremoved\", tagname);\n\t\t\ttriggerChange();\n\t\t});\n\n\t\t// Append to container\n\t\tcontainer.appendChild(tag);\n\n\t\t// Notify addition and changes\n\t\ttriggerChange();\n\t\tLiteGUI.trigger(element, \"wadded\", tagname);\n\t}\n\n\t/**\n\t * Helper to propagate changes to the Inspector and callbacks.\n\t */\n\tfunction triggerChange()\n\t{\n\t\tthat.values.set(valueName, element.tags);\n\t\tif (options!.callback) { options!.callback.call(element, element.tags); }\n\t\tLiteGUI.trigger(element, \"wchange\", element.tags);\n\t\tif (that.onChange) { that.onChange(valueName, element.tags, element); }\n\t}\n\n\t// Finalize widget attachment to the Inspector\n\tthat.appendWidget(element, options);\n\tthat.processElement(element, options);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddTags(name?: string, values?: string[], options?: AddTagOptions): InspectorTagsWidget;\n\t}\n}\n\nInspector.prototype.addTags = function (name?: string, values?: string[], options?: AddTagOptions): InspectorTagsWidget\n{\n\treturn AddTags(this, name, values, options);\n};\n\nInspector.widgetConstructors.tags = \"addTags\";","import { CreateWidgetOptions, InspectorValue, WidgetChangeOptions } from \"../@types/Inspector\";\nimport { LiteGUI } from \"../core\";\nimport { Inspector } from \"./inspector\";\nimport { InspectorStringWidget } from \"./string\";\n\n/**\n * Options for creating a TextArea widget.\n */\nexport interface AddTextAreaOptions extends CreateWidgetOptions, WidgetChangeOptions\n{\n\t/**\n\t * If true, triggers the callback on 'keyup' instead of 'change'.\n\t */\n\timmediate?: boolean;\n\t/**\n\t * Whether the textarea is disabled.\n\t */\n\tdisabled?: boolean;\n\t/**\n\t * Placeholder text.\n\t */\n\tplaceHolder?: string;\n\t/**\n\t * Text alignment.\n\t */\n\talign?: string;\n\t/**\n\t * URL of an icon (though typically used in inputs, might be supported here).\n\t */\n\ticon?: string;\n\t/**\n\t * Callback triggered on 'keydown' event.\n\t */\n\tonKeyDown?: () => void;\n}\n\n/**\n * Widget to edit strings with multiline support.\n * @function AddTextArea\n * @param {Inspector} that The inspector instance.\n * @param {string} [name] The name of the widget.\n * @param {string} [value] The initial text value.\n * @param {AddTextAreaOptions} [options] Configuration options.\n * @returns {InspectorStringWidget} The created text area widget.\n */\nexport function AddTextArea(that: Inspector, name?: string, value?: string, options?: AddTextAreaOptions): InspectorStringWidget\n{\n\tvalue = value ?? \"\";\n\tconst opt = options ?? {};\n\tconst valueName = that.getValueName(name, opt);\n\tthat.values.set(valueName!, value);\n\n\tconst isDisabledText = opt.disabled ? \"disabled\" : \"\";\n\tconst element = that.createWidget(name, \"<span class='inputfield textarea \" +\n\t\tisDisabledText + \"'><textarea tabIndex='\" + that.tabIndex + \"' \" +\n\t\tisDisabledText + \"></textarea></span>\", opt) as InspectorStringWidget;\n\tthat.tabIndex++;\n\tconst textarea = element.querySelector(\".wcontent textarea\") as HTMLTextAreaElement;\n\ttextarea.value = value;\n\tif (opt.placeHolder) { textarea.setAttribute(\"placeHolder\", opt.placeHolder); }\n\ttextarea.addEventListener(opt.immediate ? \"keyup\" : \"change\", (e: Event) =>\n\t{\n\t\tthat.onWidgetChange(element, valueName, (e.target as HTMLTextAreaElement)?.value, opt, false, e);\n\t});\n\tif (opt.onKeyDown)\n\t{\n\t\ttextarea.addEventListener(\"keydown\", opt.onKeyDown);\n\t}\n\n\tif (opt.height)\n\t{\n\t\ttextarea.style.height = \"calc( \" + LiteGUI.sizeToCSS(opt.height) + \" - 5px )\";\n\t}\n\t// Textarea.style.height = LiteGUI.sizeToCSS( opt.height );\n\tthat.appendWidget(element, opt);\n\telement.setValue = function (result?: InspectorValue, skipEvent?: boolean)\n\t{\n\t\tif (result === undefined || typeof result !== 'string' || result == textarea.value) { return; }\n\t\tvalue = result;\n\t\ttextarea.value = result;\n\t\tif (!skipEvent) { LiteGUI.trigger(textarea, \"change\"); }\n\t};\n\telement.getValue = function ()\n\t{\n\t\treturn textarea.value;\n\t};\n\telement.focus = function () { LiteGUI.focus(textarea); };\n\telement.disable = function () { textarea.disabled = true; };\n\telement.enable = function () { textarea.disabled = false; };\n\tthat.processElement(element, opt);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddTextArea(name?: string, value?: string, options?: AddTextAreaOptions): InspectorStringWidget;\n\t}\n}\n\nInspector.prototype.addTextArea = function (name?: string, value?: string, options?: AddTextAreaOptions): InspectorStringWidget\n{\n\treturn AddTextArea(this, name, value, options);\n};\n\nInspector.widgetConstructors.textarea = \"addTextArea\";","import type { Tree, TreeData, TreeNode, TreeOptions } from \"../widgets/tree\";\nimport { CreateWidgetOptions, InspectorValue, InspectorWidget } from \"../@types/Inspector\";\nimport { LiteGUI } from \"../core\";\nimport { Inspector } from \"./inspector\";\n\n/**\n * Options for creating a Tree widget.\n */\nexport interface addTreeOptions extends CreateWidgetOptions\n{\n\t/**\n\t * Options passed to the underlying Tree widget.\n\t */\n\ttreeOptions?: TreeOptions;\n\t/**\n\t * Callback function triggered when a tree node is selected.\n\t */\n\tcallback?: (node: TreeNode, data: TreeData) => void;\n}\n\n/**\n * Interface representing the Inspector Tree widget.\n */\nexport interface InspectorTreeWidget extends InspectorWidget\n{\n\t/**\n\t * Reference to the internal Tree instance.\n\t */\n\ttree: Tree;\n}\n\n/**\n * Adds a tree widget to the inspector.\n * @function AddTree\n * @param {Inspector} that The inspector instance.\n * @param {string} name - The name of the tree widget.\n * @param {TreeData} value The tree data to display.\n * @param {addTreeOptions} [options] Configuration options.\n * @returns {InspectorTreeWidget} The created tree widget instance.\n */\nexport function AddTree(that: Inspector, name: string, value: TreeData, options: addTreeOptions = {})\n{\n\tconst element = that.createWidget(name, \"<div class='wtree inputfield full'></div>\", options) as InspectorTreeWidget;\n\n\tconst treeRoot: HTMLDivElement | null = element.querySelector(\".wtree\");\n\tif (!treeRoot) { return; }\n\n\tif (options.height)\n\t{\n\t\ttreeRoot.style.height = typeof (options.height) == \"number\" ? options.height + \"px\" : options.height;\n\t\ttreeRoot.style.overflow = \"auto\";\n\t}\n\n\tconst tree = element.tree = new LiteGUI.Tree(value, options.treeOptions);\n\ttree.onItemSelected = function (data: TreeData, node: TreeNode)\n\t{\n\t\tif (options.callback) { options.callback.call(element, node, data); }\n\t};\n\n\ttreeRoot.appendChild(tree.root);\n\n\telement.setValue = function (v: InspectorValue)\n\t{\n\t\tif (v && typeof v === 'object' && !Array.isArray(v))\n\t\t{\n\t\t\ttree.updateTree(v as TreeData);\n\t\t}\n\t};\n\n\tthat.appendWidget(element, options);\n\tthat.processElement(element, options);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddTree(name: string, value: TreeData, options?: addTreeOptions): InspectorTreeWidget | undefined;\n\t}\n}\n\nInspector.prototype.addTree = function (name: string, value: TreeData, options?: addTreeOptions): InspectorTreeWidget | undefined\n{\n\treturn AddTree(this, name, value, options);\n};\n\nInspector.widgetConstructors.tree = \"addTree\";","import { LiteGUI } from \"../core\";\nimport { Inspector } from \"./inspector\";\nimport { CreateWidgetOptions, InspectorActiveWidget, InspectorValue, WidgetChangeOptions } from \"../@types/Inspector\";\nimport { Dragger, DraggerOptions } from \"../dragger\";\n\n/**\n * Options for creating a Vector widget.\n */\nexport interface AddVectorOptions extends CreateWidgetOptions, DraggerOptions, Omit<WidgetChangeOptions, 'callback'>\n{\n\t/**\n\t * Internal flag to indicate full vector width usage.\n\t */\n\tfullVector?: boolean;\n\t/**\n\t * Callback function triggered when value changes.\n\t */\n\tcallback?: (value: number[]) => void;\n\t/**\n\t * Callback function triggered on change (alternative).\n\t */\n\tonChange?: (value: number[]) => number[] | void;\n\t/**\n\t * Callback function triggered before change (start dragging).\n\t */\n\tpreCallback?: (e: Event) => void;\n}\n\n/**\n * Interface representing a numeric Vector widget.\n */\nexport interface InspectorNumberVectorWidget extends InspectorActiveWidget\n{\n\t/**\n\t * Array of draggers used to edit each component of the vector.\n\t */\n\tdraggers: Dragger[];\n\t/**\n\t * Sets the range for all draggers.\n\t * @param {number} min Minimum value.\n\t * @param {number} max Maximum value.\n\t */\n\tsetRange: (min: number, max: number) => void;\n\t/**\n\t * Sets the value of the vector.\n\t * @param {InspectorValue} [value] The new vector values.\n\t * @param {boolean} [skipEvent] If true, prevents triggering change events.\n\t */\n\tsetValue: (value?: InspectorValue, skipEvent?: boolean) => void;\n}\n\ninterface VectorInput extends HTMLInputElement\n{\n\tdragger: Dragger;\n}\n\n/**\n * Widget to edit an array of numbers from 2 to 4 (it adds a dragging mini widget in the right side).\n * @function AddVector\n * @param {Inspector} that The inspector instance.\n * @param {string | undefined} name The name/label of the widget.\n * @param {number[]} value The initial vector values.\n * @param {AddVectorOptions} [options] Configuration options.\n * @returns {InspectorNumberVectorWidget} The created vector widget element.\n */\nexport function AddVector(that: Inspector, name: string | undefined,\n\tvalue: number[], options: AddVectorOptions = {}): InspectorNumberVectorWidget\n{\n\tconst valueName = that.getValueName(name, options);\n\tthat.values.set(valueName, value);\n\n\tconst element = that.createWidget(name, \"\", options) as InspectorNumberVectorWidget;\n\tconst initLength = value.length;\n\toptions.step = options.step ?? 0.1;\n\toptions.tabIndex = that.tabIndex;\n\toptions.fullVector = true;\n\tif (!options.step) { options.step = 0.1; }\n\tthat.tabIndex++;\n\n\tconst draggers: Dragger[] = element.draggers = [];\n\n\tconst _preChange = function (e: Event)\n\t{\n\t\tif (options!.preCallback) { options!.preCallback(e); }\n\t};\n\n\tfor (let i = 0; i < value.length; i++)\n\t{\n\t\tconst dragger: Dragger = new LiteGUI.Dragger(value[i], options);\n\t\tdragger.root.style.marginLeft = '0';\n\t\tdragger.root.style.width = \"calc( 25% - 1px )\";\n\t\telement.querySelector(\".wcontent\")!.appendChild(dragger.root);\n\t\toptions.tabIndex = that.tabIndex;\n\t\tthat.tabIndex++;\n\t\tdragger.root.addEventListener(\"start_dragging\", _preChange);\n\t\tdraggers.push(dragger);\n\t}\n\n\tconst inputs = element.querySelectorAll(\"input\") as NodeListOf<VectorInput>;\n\tconst onChangeCallback = (e: Event) =>\n\t{\n\t\t// Gather all three parameters\n\t\tlet r = [];\n\t\tfor (let j = 0; j < inputs.length; j++)\n\t\t{\n\t\t\tr.push(parseFloat(inputs[j].value));\n\t\t}\n\n\t\tLiteGUI.trigger(element, \"wbeforechange\", [r]);\n\n\t\tthat.values.set(valueName, r);\n\n\t\tconst dragger = (e.target as VectorInput).dragger;\n\t\tif (options.onChange && dragger.dragging)\n\t\t{\n\t\t\tconst new_val = options.onChange.call(element, r);\n\n\t\t\tif (Array.isArray(new_val) && new_val.length >= initLength)\n\t\t\t{\n\t\t\t\tfor (let j = 0; j < inputs.length; j++)\n\t\t\t\t{\n\t\t\t\t\tinputs[j].value = new_val[j].toString();\n\t\t\t\t}\n\t\t\t\tr = new_val;\n\t\t\t}\n\t\t}\n\t\telse if ((options.onChange || options.callback) && !dragger.dragging)\n\t\t{\n\t\t\tlet new_val = undefined;\n\t\t\tif (options.callback)\n\t\t\t{\n\t\t\t\tnew_val = options.callback.call(element, r);\n\t\t\t}\n\t\t\telse if (options.onChange)\n\t\t\t{\n\t\t\t\tnew_val = options.onChange.call(element, r);\n\t\t\t}\n\n\t\t\tif (Array.isArray(new_val) && new_val.length >= initLength)\n\t\t\t{\n\t\t\t\tfor (let j = 0; j < inputs.length; j++)\n\t\t\t\t{\n\t\t\t\t\tinputs[j].value = new_val[j].toString();\n\t\t\t\t}\n\t\t\t\tr = new_val;\n\t\t\t}\n\t\t}\n\n\t\tLiteGUI.trigger(element, \"wchange\", [r]);\n\t\tif (that.onChange) { that.onChange(valueName, r, element); }\n\t};\n\tconst onStopDragging = function (input: VectorInput)\n\t{\n\t\tLiteGUI.trigger(input, \"change\");\n\t};\n\tfor (let i = 0; i < inputs.length; ++i)\n\t{\n\t\tconst dragger = draggers[i];\n\t\tconst input = inputs[i];\n\t\tinput.dragger = dragger;\n\t\tinput.addEventListener(\"change\", onChangeCallback);\n\t\tdragger.root.addEventListener(\"stop_dragging\", onStopDragging.bind(undefined, input));\n\t}\n\n\tthat.appendWidget(element, options);\n\n\telement.setValue = function (value?: InspectorValue, skipEvent?: boolean)\n\t{\n\t\tif (value === undefined || !Array.isArray(value)) { return; }\n\t\tconst valArray = value as (number | string)[];\n\t\tfor (let i = 0; i < draggers.length; i++)\n\t\t{\n\t\t\tdraggers[i].setValue(valArray[i], skipEvent ?? i < draggers.length - 1);\n\t\t}\n\t};\n\telement.setRange = function (min: number, max: number) { for (const i in draggers) { draggers[i].setRange(min, max); } };\n\n\tthat.processElement(element, options);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddVector(name: string, value: number[], options?: AddVectorOptions): InspectorNumberVectorWidget;\n\t\taddVector2(name: string, value: [number, number], options?: AddVectorOptions): InspectorNumberVectorWidget;\n\t\taddVector3(name: string, value: [number, number, number], options?: AddVectorOptions): InspectorNumberVectorWidget;\n\t\taddVector4(name: string, value: [number, number, number, number], options?: AddVectorOptions): InspectorNumberVectorWidget;\n\t}\n}\n\nInspector.prototype.addVector = function (name: string, value: number[], options?: AddVectorOptions): InspectorNumberVectorWidget\n{\n\treturn AddVector(this, name, value, options);\n};\n\nInspector.prototype.addVector2 = function (name: string, value: [number, number], options?: AddVectorOptions): InspectorNumberVectorWidget\n{\n\tvalue = value ?? [0, 0];\n\toptions = options ?? {};\n\treturn AddVector(this, name, value, options);\n};\n\nInspector.prototype.addVector3 = function (name: string, value: [number, number, number], options?: AddVectorOptions): InspectorNumberVectorWidget\n{\n\tvalue = value ?? [0, 0, 0];\n\toptions = options ?? {};\n\treturn AddVector(this, name, value, options);\n};\n\nInspector.prototype.addVector4 = function (name: string, value: [number, number, number, number], options?: AddVectorOptions): InspectorNumberVectorWidget\n{\n\tvalue = value ?? [0, 0, 0, 0];\n\toptions = options ?? {};\n\treturn AddVector(this, name, value, options);\n};\n\nInspector.widgetConstructors.vector = \"addVector\";\nInspector.widgetConstructors.vec2 = \"addVector2\";\nInspector.widgetConstructors.vector2 = \"addVector2\";\nInspector.widgetConstructors.vec3 = \"addVector3\";\nInspector.widgetConstructors.vector3 = \"addVector3\";\nInspector.widgetConstructors.vec4 = \"addVector4\";\nInspector.widgetConstructors.vector4 = \"addVector4\";\n","import { LiteGUIObject } from \"./@types/globals\";\nimport { LiteGUI } from \"./core\";\nimport { Panel } from \"./panel\";\n\n/**\n * Configuration options for the menubar.\n */\nexport interface MenubarOptions\n{\n\t/**\n\t * Whether the menu opens automatically on mouse over.\n\t */\n\tautoOpen: boolean;\n\t/**\n\t * Whether to sort entries alphabetically.\n\t */\n\tsortEntries: boolean;\n}\n\n/**\n * Interface for the root HTML element of a menu bar.\n */\nexport interface MenuBarElement extends HTMLElement\n{\n\t/**\n\t * Name of the menu bar element.\n\t */\n\tname?: string;\n\t/**\n\t * Data associated with the menu bar element.\n\t */\n\tdata?: MenuBarElementData;\n}\n\n/**\n * Data associated with a menu item.\n */\nexport interface MenuBarElementData\n{\n\t/**\n\t * Type of the menu item (e.g., 'checkbox').\n\t */\n\ttype?: 'checkbox',\n\t/**\n\t * The object instance if this menu item controls a property.\n\t */\n\tinstance?: { [property: string]: boolean },\n\t/**\n\t * The property name of the instance to control.\n\t */\n\tproperty?: string,\n\t/**\n\t * Fixed value to set when clicked.\n\t */\n\tvalue?: boolean,\n\t/**\n\t * Boolean state for the checkbox.\n\t */\n\tcheckbox?: boolean,\n\t/**\n\t * Whether the menu item is disabled.\n\t */\n\tdisabled?: boolean,\n\t/**\n\t * Whether the menu should remain open after clicking.\n\t */\n\tkeepOpen?: boolean,\n\t/**\n\t * Function to determine if the item is checked.\n\t */\n\tisChecked?: (instance?: { [property: string]: boolean }, data?: MenuBarElementData) => void,\n\t/**\n\t * Callback function executed when the item is clicked.\n\t */\n\tcallback?: (value: { checkbox?: boolean }) => void,\n\t/**\n\t * Whether the submenu opens automatically on mouse over.\n\t */\n\tautoOpen?: boolean;\n}\n\n/**\n * Interface for paragraph elements representing menu entries.\n */\nexport interface MenuBarParagraphElement extends HTMLParagraphElement\n{\n\t/**\n\t * SubMenu data associated with this element.\n\t */\n\tdata?: SubMenu;\n}\n\n/**\n * Options for adding a new menu item.\n */\nexport interface AddMenuOptions\n{\n\t/**\n\t * Whether the item acts as a checkbox.\n\t */\n\tcheckbox?: boolean;\n\t/**\n\t * Whether the menu should keep open after interaction.\n\t */\n\tkeepOpen?: boolean;\n\t/**\n\t * Whether the item is disabled.\n\t */\n\tdisabled?: boolean;\n\t/**\n\t * Callback function to execute on click.\n\t */\n\tcallback?: (value: { checkbox?: boolean }) => void;\n\t/**\n\t * Whether the submenu opens automatically on mouse over.\n\t */\n\tautoOpen?: boolean;\n}\n\n/**\n * Interface representing a submenu structure.\n */\nexport interface SubMenu\n{\n\t/**\n\t * Display name of the submenu.\n\t */\n\tname: string;\n\t/**\n\t * Parent submenu, if any.\n\t */\n\tparent?: SubMenu;\n\t/**\n\t * Child submenus.\n\t */\n\tchildren?: SubMenu[];\n\t/**\n\t * Data associated with the submenu item.\n\t */\n\tdata?: MenuBarElementData;\n\t/**\n\t * Function to disable this submenu item.\n\t */\n\tdisable?: () => void;\n\t/**\n\t * Function to enable this submenu item.\n\t */\n\tenable?: () => void;\n\t/**\n\t * Flag to indicate if this item is a separator.\n\t */\n\tseparator?: boolean;\n\t/**\n\t * Order index for sorting.\n\t */\n\torder?: number;\n\t/**\n\t * The HTML element associated with this submenu.\n\t */\n\telement?: SubMenuElement;\n}\n\n/**\n * Interface for list items representing submenus.\n */\nexport interface SubMenuElement extends HTMLLIElement\n{\n\t/**\n\t * Data associated with this element.\n\t */\n\tdata?: SubMenu;\n}\n\n/** ************ MENUBAR ************************/\n/**\n * Class representing a MenuBar widget.\n * @class Menubar\n * @example\n * ```typescript\n * const menubar = new Menubar(\"main-menubar\");\n * menubar.add(\"File/Open\", { callback: () => console.log(\"Open\") });\n * menubar.attachToPanel(myPanel);\n * ```\n */\nexport class Menubar implements LiteGUIObject\n{\n\t/**\n\t * Time in milliseconds before the menu closes automatically.\n\t */\n\tclosingTime: number;\n\t/**\n\t * Configuration options for the menubar.\n\t */\n\toptions: MenubarOptions;\n\t/**\n\t * The root HTML element of the menubar.\n\t */\n\troot: MenuBarElement;\n\t/**\n\t * Array of submenu structures.\n\t */\n\tmenu: SubMenu[];\n\t/**\n\t * Array of panel elements used for dropdowns.\n\t */\n\tpanels: HTMLDivElement[];\n\t/**\n\t * The unordered list element containing the main menu items.\n\t */\n\tcontent: HTMLUListElement;\n\t/**\n\t * Whether the menu is currently open.\n\t */\n\tisOpen: boolean;\n\t/**\n\t * Whether the menu opens automatically on hover.\n\t */\n\tautoOpen: boolean;\n\t/**\n\t * Whether to sort entries alphabetically.\n\t */\n\tsortEntries: boolean;\n\t/**\n\t * Default options used when adding menus.\n\t */\n\tdata?: AddMenuOptions;\n\t/**\n\t * Timer identifier for closing the menu.\n\t */\n\tclosingByLeave?: NodeJS.Timeout | null;\n\n\t/**\n\t * Creates an instance of the Menubar widget.\n\t * @param {string} id Unique identifier for the menubar.\n\t * @param {MenubarOptions} [options] Configuration options.\n\t */\n\tconstructor(id: string, options?: MenubarOptions)\n\t{\n\t\tthis.options = options ?? { autoOpen: false, sortEntries: false };\n\n\t\tthis.menu = [];\n\t\tthis.panels = [];\n\n\t\tthis.root = document.createElement(\"div\");\n\t\tthis.root.id = id;\n\t\tthis.root.className = \"litemenubar\";\n\n\t\tthis.content = document.createElement(\"ul\");\n\t\tthis.root.appendChild(this.content);\n\n\t\tthis.isOpen = false;\n\t\tthis.autoOpen = this.options.autoOpen;\n\t\tthis.sortEntries = this.options.sortEntries;\n\t\tthis.closingTime = 500;\n\t}\n\n\t/**\n\t * Clears all menu items and panels.\n\t */\n\tclear()\n\t{\n\t\tthis.content.innerHTML = \"\";\n\t\tthis.menu = [];\n\t\tthis.panels = [];\n\t}\n\n\t/**\n\t * Attaches the menubar to a specific panel.\n\t * @param {Panel} panel The panel to attach the menubar to.\n\t */\n\tattachToPanel(panel: Panel)\n\t{\n\t\tpanel.content.insertBefore(this.root, panel.content.firstChild);\n\t}\n\n\t/**\n\t * Adds a menu item to the menubar.\n\t * @param {string} path The path of the menu item (e.g., \"File/Open\").\n\t * @param {((value?: { checkbox?: boolean }) => void) | AddMenuOptions} [data={}] Callback function or options object.\n\t */\n\tadd(path: string, data: ((value?: { checkbox?: boolean }) => void) | AddMenuOptions = {})\n\t{\n\t\tif (typeof (data) == \"function\")\n\t\t{\n\t\t\tthis.data = { callback: data };\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.data = data;\n\t\t}\n\n\t\tconst prevLength = this.menu.length;\n\n\t\tconst tokens = path.split(\"/\");\n\t\tlet currentToken = 0;\n\t\tlet currentPos = 0;\n\t\tlet menu = this.menu;\n\t\tlet lastItem: SubMenu | undefined = undefined;\n\n\t\twhile (menu)\n\t\t{\n\t\t\tif (currentToken > 5) { throw (\"Error: Menubar too deep\"); }\n\t\t\t// Token not found in this menu, create it\n\t\t\tif (menu.length == currentPos)\n\t\t\t{\n\t\t\t\tconst subMenu: SubMenu = {\n\t\t\t\t\tname: \"\", parent: lastItem, children: [], data: undefined,\n\t\t\t\t\tdisable: function ()\n\t\t\t\t\t{\n\t\t\t\t\t\tif (this.data) { this.data.disabled = true; }\n\t\t\t\t\t},\n\t\t\t\t\tenable: function ()\n\t\t\t\t\t{\n\t\t\t\t\t\tif (this.data) { this.data.disabled = undefined; }\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tlastItem = subMenu;\n\n\t\t\t\tif (currentToken == tokens.length - 1) { subMenu.data = this.data; }\n\n\t\t\t\tsubMenu.name = tokens[currentToken];\n\t\t\t\tmenu.push(subMenu);\n\t\t\t\tcurrentToken++;\n\n\t\t\t\tif (currentToken == tokens.length) { break; }\n\n\t\t\t\tsubMenu.children = [];\n\t\t\t\tmenu = subMenu.children;\n\t\t\t\tcurrentPos = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Token found in this menu, get inside for next token\n\t\t\tif (menu[currentPos] && tokens[currentToken] == menu[currentPos].name)\n\t\t\t{\n\t\t\t\tif (currentToken < tokens.length - 1)\n\t\t\t\t{\n\t\t\t\t\tlastItem = menu[currentPos];\n\t\t\t\t\tif (menu[currentPos].children != undefined)\n\t\t\t\t\t{\n\t\t\t\t\t\tmenu = menu[currentPos].children!;\n\t\t\t\t\t}\n\t\t\t\t\tcurrentPos = 0;\n\t\t\t\t\tcurrentToken++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\telse // Last token\n\t\t\t\t{\n\t\t\t\t\tconsole.warn(`Warning: Adding menu that already exists: ${path}`);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcurrentPos++;\n\t\t}\n\n\t\tif (prevLength != this.menu.length) { this.updateMenu(); }\n\t}\n\n\t/**\n\t * Removes a menu item by its path.\n\t * @param {string} path The path of the menu item to remove.\n\t */\n\tremove(path: string)\n\t{\n\t\tconst menu = this.findMenu(path);\n\t\tif (!menu) { return; }\n\n\t\tif (Array.isArray(menu))\n\t\t{\n\t\t\t// This means that it's intended to delete a list and this is not allowed\n\t\t\treturn console.warn(\"Can't remove an entire list\");\n\t\t}\n\t\t// We are going to remove a single menu\n\t\tif (menu.parent && menu.parent.children)\n\t\t{\n\t\t\tconst index = menu.parent.children.indexOf(menu);\n\t\t\tif (index != -1)\n\t\t\t{\n\t\t\t\tmenu.parent.children.splice(index, 1);\n\t\t\t\tif (this.isOpen)\n\t\t\t\t{\n\t\t\t\t\tthis.hidePanels();\n\t\t\t\t\tconst evt = new PointerEvent(\"click\", {\n\t\t\t\t\t\tview: window,\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcancelable: true,\n\t\t\t\t\t\tclientX: 0,\n\t\t\t\t\t\tclientY: 0\n\t\t\t\t\t});\n\t\t\t\t\tif (menu.parent.element)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.showMenu(menu.parent, evt, menu.parent.element);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tconst index = this.menu.indexOf(menu);\n\t\t\tif (index != -1)\n\t\t\t{\n\t\t\t\tthis.menu.splice(index, 1);\n\t\t\t\tif (this.isOpen)\n\t\t\t\t{\n\t\t\t\t\tthis.hidePanels();\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Adds a separator to a menu.\n\t * @param {string} path The path where the separator should be added.\n\t * @param {number} [order] Optional order index.\n\t */\n\tseparator(path: string, order?: number)\n\t{\n\t\tconst menu = this.findMenu(path);\n\t\tif (!menu) { return; }\n\t\tif (Array.isArray(menu))\n\t\t{\n\t\t\t// This means that it's intended to delete a list and this is not allowed\n\t\t\treturn console.warn(\"Can't separate an entire list\");\n\t\t}\n\t\tif (menu.children)\n\t\t{\n\t\t\tmenu.children.push({\n\t\t\t\tname: \"\",\n\t\t\t\tchildren: undefined,\n\t\t\t\tdata: undefined,\n\t\t\t\tseparator: true,\n\t\t\t\torder: order ?? 10\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Returns the menu entry that matches this path.\n\t * @param {string} path The path to search for.\n\t * @returns {SubMenu | SubMenu[] | undefined} The found submenu or undefined.\n\t */\n\tfindMenu(path: string): SubMenu | SubMenu[] | undefined\n\t{\n\t\tconst tokens = path.split(\"/\");\n\t\tlet currentToken = 0;\n\t\tlet currentPos = 0;\n\t\tlet menu = this.menu;\n\n\t\twhile (currentToken <= 5)\n\t\t{\n\t\t\t// No more tokens, return last found menu\n\t\t\tif (currentToken == tokens.length) { return menu; }\n\n\t\t\t// This menu doesn't have more entries\n\t\t\tif (menu.length <= currentPos) { return undefined; }\n\n\t\t\tif (tokens[currentToken] == \"*\") { return menu[currentPos].children; }\n\n\t\t\t// Token found in this menu, get inside for next token\n\t\t\tif (tokens[currentToken] == menu[currentPos].name)\n\t\t\t{\n\t\t\t\tif (currentToken == tokens.length - 1) // Last token\n\t\t\t\t{\n\t\t\t\t\treturn menu[currentPos];\n\t\t\t\t}\n\t\t\t\tif (menu[currentPos].children)\n\t\t\t\t{menu = menu[currentPos].children!;}\n\t\t\t\tcurrentPos = 0;\n\t\t\t\tcurrentToken++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Check next entry in this menu\n\t\t\tcurrentPos++;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Updates the top main menu display based on the internal structure.\n\t */\n\tupdateMenu()\n\t{\n\t\tthis.content.innerHTML = \"\";\n\t\tconst clickCallback = (element: SubMenuElement, e: PointerEvent) =>\n\t\t{\n\t\t\tconst el = element;\n\t\t\tconst item = el.data;\n\n\t\t\tif (item && item.data && item.data.callback && typeof (item.data.callback) == \"function\")\n\t\t\t{\n\t\t\t\titem.data.callback(item.data);\n\t\t\t}\n\n\t\t\tif (!this.isOpen && item)\n\t\t\t{\n\t\t\t\tthis.isOpen = true;\n\t\t\t\tthis.showMenu(item, e, el);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.isOpen = false;\n\t\t\t\tthis.hidePanels();\n\t\t\t}\n\t\t};\n\t\tconst mouseOverCallback = (element: SubMenuElement, e: MouseEvent) =>\n\t\t{\n\t\t\tthis.hidePanels();\n\t\t\tif (this.isOpen || this.autoOpen)\n\t\t\t{\n\t\t\t\tconst el = element;\n\t\t\t\tif (el.data)\n\t\t\t\t{\n\t\t\t\t\tthis.showMenu(el.data, e, el);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tfor (const i in this.menu)\n\t\t{\n\t\t\tconst element = document.createElement(\"li\") as SubMenuElement;\n\t\t\telement.innerHTML = \"<span class='icon'></span><span class='name'>\" + this.menu[i].name + \"</span>\";\n\t\t\tthis.content.appendChild(element);\n\t\t\telement.data = this.menu[i];\n\t\t\tthis.menu[i].element = element;\n\n\t\t\t/* ON CLICK TOP MAIN MENU ITEM */\n\t\t\telement.addEventListener(\"click\", clickCallback.bind(undefined, element));\n\t\t\telement.addEventListener(\"mouseover\", mouseOverCallback.bind(undefined, element));\n\t\t}\n\t}\n\n\t/**\n\t * Hides all open dropdown panels.\n\t */\n\thidePanels()\n\t{\n\t\tif (!this.panels.length) { return; }\n\n\t\tthis.isOpen = false;\n\t\tfor (const i in this.panels)\n\t\t{\n\t\t\tLiteGUI.remove(this.panels[i]);\n\t\t}\n\t\tthis.panels = [];\n\t}\n\n\t/**\n\t * Creates the panel with the drop menu and shows it.\n\t * @param {SubMenu} menu The submenu structure to display.\n\t * @param {MouseEvent} e The mouse event that triggered the show.\n\t * @param {HTMLElement} root The element relative to which the menu is shown.\n\t * @param {boolean} [isSubmenu=false] Whether this is a nested submenu.\n\t */\n\tshowMenu(menu: SubMenu, e: MouseEvent, root: HTMLElement, isSubmenu: boolean = false)\n\t{\n\t\tthis.isOpen = true;\n\t\tif (!isSubmenu) { this.hidePanels(); }\n\n\t\tif (!menu.children || !menu.children.length) { return; }\n\n\t\tif (this.closingByLeave) { clearInterval(this.closingByLeave); }\n\n\t\tconst element = document.createElement(\"div\");\n\t\telement.className = \"litemenubar-panel\";\n\n\t\tconst sortedEntries = [];\n\t\tfor (const i in menu.children)\n\t\t{\n\t\t\tsortedEntries.push(menu.children[i]);\n\t\t}\n\n\t\tif (this.sortEntries)\n\t\t{\n\t\t\tsortedEntries.sort((a, b) =>\n\t\t\t{\n\t\t\t\tlet aOrder = 10;\n\t\t\t\tlet bOrder = 10;\n\t\t\t\tconst aa = a;\n\t\t\t\tconst bb = b;\n\t\t\t\tif (aa && aa.order != null) { aOrder = aa.order; }\n\t\t\t\tif (aa && aa.separator && aa.order != null) { aOrder = aa.order; }\n\t\t\t\tif (bb && bb.order != null) { bOrder = bb.order; }\n\t\t\t\tif (bb && bb.separator && bb.order != null) { bOrder = bb.order; }\n\t\t\t\treturn aOrder - bOrder;\n\t\t\t});\n\t\t}\n\n\t\t/* ON CLICK SUBMENU ITEM */\n\t\tconst clickCallback = (element: MenuBarParagraphElement, e: PointerEvent) =>\n\t\t{\n\t\t\tconst el = element;\n\t\t\tconst item = el.data;\n\t\t\tif (item && item.data)\n\t\t\t{\n\t\t\t\tif (item.data.disabled) { return; }\n\n\t\t\t\t// To change variables directly\n\t\t\t\tif (item.data.instance && item.data.property)\n\t\t\t\t{\n\t\t\t\t\tif (item.data.type == \"checkbox\")\n\t\t\t\t\t{\n\t\t\t\t\t\titem.data.instance[item.data.property] = !item.data.instance[item.data.property];\n\t\t\t\t\t\tif (item.data.instance[item.data.property])\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tel.classList.add(\"checked\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tel.classList.remove(\"checked\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (\"value\" in item.data)\n\t\t\t\t\t{\n\t\t\t\t\t\tconst prop = item.data.property;\n\t\t\t\t\t\tif (prop)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t(item.data.instance)[prop] = item.data.value ?? false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// To have a checkbox behavior\n\t\t\t\tif (item.data.checkbox != null)\n\t\t\t\t{\n\t\t\t\t\titem.data.checkbox = !item.data.checkbox;\n\t\t\t\t\tif (item.data.checkbox)\n\t\t\t\t\t{\n\t\t\t\t\t\tel.classList.add(\"checked\");\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tel.classList.remove(\"checked\");\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Execute a function\n\t\t\t\tif (item.data && typeof (item.data.callback) == \"function\")\n\t\t\t\t{\n\t\t\t\t\titem.data.callback(item.data);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// More menus\n\t\t\tif (item && item.children && item.children.length)\n\t\t\t{\n\t\t\t\tthis.showMenu(item, e, el, true);\n\t\t\t}\n\t\t\telse if (item && !item.data?.keepOpen)\n\t\t\t{\n\t\t\t\tthis.isOpen = false;\n\t\t\t\tthis.hidePanels();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.isOpen = false;\n\t\t\t\tthis.hidePanels();\n\t\t\t\tthis.isOpen = true;\n\t\t\t\tthis.showMenu(menu, e, root, isSubmenu);\n\t\t\t}\n\t\t};\n\t\tfor (const i in sortedEntries)\n\t\t{\n\t\t\tconst item = document.createElement(\"p\") as MenuBarParagraphElement;\n\t\t\tconst menuItem = sortedEntries[i];\n\n\t\t\titem.className = 'litemenu-entry ' + (item.children ? \" submenu\" : \"\");\n\t\t\tconst hasSubmenu = menuItem.children && menuItem.children.length;\n\n\t\t\tif (hasSubmenu) { item.classList.add(\"has_submenu\"); }\n\n\t\t\tif (menuItem && menuItem.name)\n\t\t\t{\n\t\t\t\titem.innerHTML = \"<span class='icon'></span><span class='name'>\" + menuItem.name + (hasSubmenu ? \"<span class='more'>+</span>\" : \"\") + \"</span>\";\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\titem.classList.add(\"separator\");\n\t\t\t\t// Item.innerHTML = \"<span class='separator'></span>\";\n\t\t\t}\n\n\t\t\titem.data = menuItem;\n\n\t\t\t// Check if it has to show the item being 'checked'\n\t\t\tif (item.data.data)\n\t\t\t{\n\t\t\t\tconst data = item.data.data;\n\n\t\t\t\tconst checked = (data.type == \"checkbox\" && data.instance && data.property &&\n\t\t\t\t\tdata.instance[data.property] == true) || data.checkbox == true ||\n\t\t\t\t\t(data.instance && data.property && \"value\" in data && data.instance[data.property] == data.value) ||\n\t\t\t\t\t(typeof (data.isChecked) == \"function\" && data.isChecked(data.instance, data));\n\n\t\t\t\tif (checked) { item.className += \" checked\"; }\n\n\t\t\t\tif (data.disabled) { item.className += \" disabled\"; }\n\t\t\t}\n\n\t\t\titem.addEventListener(\"click\", clickCallback.bind(undefined, item));\n\n\t\t\titem.addEventListener(\"mouseenter\", () =>\n\t\t\t{\n\t\t\t\tif ((this.autoOpen || (item.data && item.data.data && item.data.data.autoOpen)) && item.classList.contains(\"has_submenu\"))\n\t\t\t\t{\n\t\t\t\t\titem.click();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\telement.appendChild(item);\n\t\t}\n\n\t\telement.addEventListener(\"mouseleave\", () =>\n\t\t{\n\t\t\tif (this.closingByLeave)\n\t\t\t{\n\t\t\t\tclearInterval(this.closingByLeave);\n\t\t\t}\n\n\t\t\tthis.closingByLeave = setTimeout(() =>\n\t\t\t{\n\t\t\t\tthis.isOpen = false;\n\t\t\t\tthis.hidePanels();\n\t\t\t}, this.closingTime);\n\t\t});\n\n\t\telement.addEventListener(\"mouseenter\", () =>\n\t\t{\n\t\t\tif (this.closingByLeave)\n\t\t\t{\n\t\t\t\tclearInterval(this.closingByLeave);\n\t\t\t}\n\t\t\tthis.closingByLeave = null;\n\t\t});\n\n\t\t// Compute X and Y for menu\n\t\tconst box = root.getBoundingClientRect();\n\t\tif (isSubmenu)\n\t\t{\n\t\t\telement.style.left = `${box.right - 5}px`;\n\t\t\telement.style.top = `${box.top - 4}px`;\n\t\t}\n\t\telse\n\t\t{\n\t\t\telement.style.left = `${box.left}px`;\n\t\t\telement.style.top = `${box.bottom}px`;\n\t\t}\n\n\t\tthis.panels.push(element);\n\t\tdocument.body.appendChild(element);\n\t}\n}","import { LiteGUIObject } from \"./@types/globals\";\nimport { SizeToCSS, Trigger } from \"./utilities\";\nimport { SpecialCode } from \"./core\";\n\n/**\n * Interface extending HTMLDivElement to include a reference to the Panel instance.\n */\nexport interface PanelRoot extends HTMLDivElement\n{\n\t/**\n\t * Reference to the Panel instance associated with this element.\n\t */\n\tpanel: Panel;\n\t/**\n\t * Unique identifier for the panel element.\n\t */\n\tid: string;\n}\n\n/**\n * Options for configuring a Panel.\n */\nexport interface PanelOptions\n{\n\t/**\n\t * Optional unique identifier for the panel.\n\t */\n\tid?: string;\n\t/**\n\t * Whether the panel content should be scrollable.\n\t * @default false\n\t */\n\tscrollable?: boolean;\n\t/**\n\t * Absolute position of the panel as [left, top].\n\t */\n\tposition?: (number | string)[];\n\t/**\n\t * Height of the panel.\n\t */\n\theight?: number | string;\n\t/**\n\t * Width of the panel.\n\t */\n\twidth?: number | string;\n\t/**\n\t * Title to display in the panel header.\n\t */\n\ttitle?: string;\n\t/**\n\t * Additional CSS class names for the panel.\n\t */\n\tclassName?: string;\n\t/**\n\t * Initial HTML content string for the panel.\n\t */\n\tcontent?: string;\n\t/**\n\t * Whether to handle the visibility of the panel.\n\t */\n\thide?: boolean;\n\t/**\n\t * Whether to show the close button.\n\t */\n\tclose?: boolean | string;\n}\n\n/** **************** PANEL **************/\n\n/**\n * Panel class for creating a UI panel with a header, content area, and footer.\n * @class Panel\n * @example\n * ```typescript\n * const panel = new Panel(\"my-panel\", { title: \"Settings\", width: 300 });\n * document.body.appendChild(panel.root);\n * ```\n */\nexport class Panel implements LiteGUIObject\n{\n\t/**\n\t * Default height for the panel title.\n\t */\n\tstatic TITLE_HEIGHT: string = \"20px\";\n\n\t/**\n\t * The root HTMLDivElement of the panel.\n\t */\n\troot: PanelRoot;\n\n\t/**\n\t * Configuration options for the panel.\n\t */\n\toptions: PanelOptions;\n\n\t/**\n\t * The content container element.\n\t */\n\tcontent: HTMLDivElement;\n\n\t/**\n\t * The footer container element.\n\t */\n\tprivate _footer: HTMLDivElement;\n\n\t/**\n\t * The header container element, if title is provided.\n\t */\n\tprivate _header?: HTMLDivElement;\n\n\t/**\n\t * Creates an instance of the Panel.\n\t * @param {string | PanelOptions} id The unique identifier or an options object.\n\t * @param {PanelOptions} [options] Configuration options if the first argument is an ID.\n\t */\n\tconstructor(id: string | PanelOptions, options?: PanelOptions)\n\t{\n\t\tif (typeof id != 'string')\n\t\t{\n\t\t\tconst temp = id;\n\t\t\tid = temp.id ?? \"\";\n\t\t\tif (!options && temp != undefined)\n\t\t\t{\n\t\t\t\toptions = temp;\n\t\t\t}\n\t\t}\n\n\t\tconst op = this.options = options = options ?? {};\n\n\t\tconst root = this.root = document.createElement(\"div\") as PanelRoot;\n\t\troot.id = id;\n\n\t\troot.className = `litepanel ${op.className ?? \"\"}`;\n\t\troot.panel = this;\n\n\t\tlet code = \"\";\n\t\tif (op.title || op.close)\n\t\t{\n\t\t\tlet headerContent = \"\";\n\t\t\tif (op.title)\n\t\t\t{headerContent += `${op.title}`;}\n\n\t\t\tif (op.close)\n\t\t\t{\n\t\t\t\theaderContent += `<div class='buttons'><button class='litebutton mini-button close-button'>${SpecialCode.close}</button></div>`;\n\t\t\t}\n\n\t\t\tcode += `<div class='panel-header'>${headerContent}</div>`;\n\t\t}\n\t\tcode += `<div class='content'>${op.content ?? \"\"}</div>`;\n\t\tcode += \"<div class='panel-footer'></div>\";\n\t\troot.innerHTML = code;\n\n\t\tif (op.title || op.close)\n\t\t{\n\t\t\tthis._header = this.root.querySelector(\".panel-header\")!;\n\t\t\tif (op.close)\n\t\t\t{\n\t\t\t\tconst closeButton = this._header.querySelector(\".close-button\");\n\t\t\t\tif (closeButton)\n\t\t\t\t{closeButton.addEventListener(\"click\", this.close.bind(this));}\n\t\t\t}\n\t\t}\n\n\t\tthis.content = this.root.querySelector(\".content\") as HTMLDivElement;\n\t\tthis._footer = this.root.querySelector(\".panel-footer\") as HTMLDivElement;\n\n\t\tif (op.width) { this.root.style.width = SizeToCSS(op.width) as string; }\n\t\tif (op.height) { this.root.style.height = SizeToCSS(op.height) as string; }\n\t\tif (op.position)\n\t\t{\n\t\t\tthis.root.style.position = \"absolute\";\n\t\t\tthis.root.style.left = SizeToCSS(op.position[0]) as string;\n\t\t\tthis.root.style.top = SizeToCSS(op.position[1]) as string;\n\t\t}\n\n\t\tif (op.scrollable == true) { this.content.style.overflow = \"auto\"; }\n\n\t\tif (op.hide) { this.hide(); }\n\t}\n\n\t/**\n\t * Adds an item to the panel's content area.\n\t * @param {LiteGUIObject | HTMLElement} item The item to add (either a LiteGUI component or an HTMLElement).\n\t */\n\tadd(item: LiteGUIObject | HTMLElement)\n\t{\n\t\tthis.content.appendChild(\"root\" in item ? item.root : item);\n\t}\n\n\t/**\n\t * Shows the panel.\n\t */\n\tshow()\n\t{\n\t\tthis.root.style.display = \"\";\n\t\tTrigger(this.root, \"shown\");\n\t}\n\n\t/**\n\t * Hides the panel.\n\t */\n\thide()\n\t{\n\t\tthis.root.style.display = \"none\";\n\t\tTrigger(this.root, \"hidden\");\n\t}\n\n\t/**\n\t * Closes the panel (removes it from DOM).\n\t */\n\tclose()\n\t{\n\t\tif (this.root.parentNode)\n\t\t{\n\t\t\tthis.root.parentNode.removeChild(this.root);\n\t\t}\n\t\tTrigger(this.root, \"closed\");\n\t}\n\n\t/**\n\t * Clears all content from the panel.\n\t */\n\tclear()\n\t{\n\t\tconst content = this.content;\n\t\twhile (content.firstChild != undefined)\n\t\t{\n\t\t\tcontent.removeChild(content.firstChild);\n\t\t}\n\t}\n}","import { LiteGUIObject } from \"./@types/globals\";\nimport { SizeToCSS } from \"./utilities\";\n\n/**\n * Configuration options for the Table widget.\n */\nexport interface TableOptions\n{\n\t/** Initial data for the table rows. */\n\tdata?: (string | number | (string | number)[] | Record<string, string | number>)[];\n\t/** Pre-existing row elements to include. */\n\trows?: Array<HTMLTableRowElement>;\n\t/** Specific height for the table. */\n\theight?: number | string;\n\t/** Whether the table should have a scrollbar. */\n\tscrollable?: boolean;\n\t/** Column definitions. */\n\tcolumns?: Array<string | TableColumn>;\n}\n\n/**\n * Definition of a column in the table.\n */\nexport interface TableColumn\n{\n\t/** The header cell element for this column. */\n\ttableElement?: HTMLTableCellElement;\n\t/** CSS class to apply to cells in this column. */\n\tclassName?: string;\n\t/** The property name in the data object mapping to this column. */\n\tfield?: string;\n\t/** Width of the column (e.g., \"100px\", \"50%\"). */\n\twidth?: string | number;\n\t/** Display name of the column in the header. */\n\tname?: string;\n}\n\n/**\n * A widget for displaying tabular data.\n * @class Table\n * @example\n * ```typescript\n * const table = new LiteGUI.Table({\n * columns: [{ name: \"Name\", field: \"name\" }, { name: \"Age\", field: \"age\" }],\n * data: [{ name: \"Alice\", age: 30 }, { name: \"Bob\", age: 25 }]\n * });\n * parent.appendChild(table.root);\n * ```\n */\nexport class Table implements LiteGUIObject\n{\n\t/** The root HTMLTableElement of the widget. */\n\troot: HTMLTableElement;\n\t/** Array of column definitions. */\n\tcolumns: Array<TableColumn>;\n\t/** Array of row elements. */\n\trows: Array<HTMLTableRowElement>;\n\t/** Array of field names corresponding to columns. */\n\tcolumnFields: Array<string>;\n\t/** The data currently displayed in the table. */\n\tdata: (string | number | (string | number)[] | Record<string, string | number>)[];\n\t/** The header row element. */\n\theader?: HTMLTableRowElement;\n\t/** Current selected value (internal usage). */\n\tvalue?: string;\n\n\t/** Internal flag to trigger header update. */\n\tprivate _mustUpdateHeader: boolean;\n\n\t/**\n\t * Creates an instance of the Table widget.\n\t * @param {TableOptions} [options] Configuration options.\n\t */\n\tconstructor(options?: TableOptions)\n\t{\n\t\toptions = options ?? {};\n\n\t\tthis.root = document.createElement(\"table\");\n\t\tthis.root.classList.add(\"litetable\");\n\n\t\tthis.columns = [];\n\t\tthis.columnFields = [];\n\t\tthis.rows = [];\n\t\tthis.data = [];\n\n\t\tthis._mustUpdateHeader = true;\n\n\t\tif (options.scrollable) { this.root.style.overflow = \"auto\"; }\n\n\t\tif (options.height) { this.root.style.height = SizeToCSS(options.height) as string; }\n\n\t\tif (options.columns) { this.setColumns(options.columns); }\n\n\t\tif (options.rows && options.data) { this.setRows(options.data); }\n\t}\n\n\t/**\n\t * Sets the rows of the table with new data.\n\t * @param {(string | number | (string | number)[] | Record<string, string | number>)[]} data The new data array.\n\t * @param {boolean} [reuse=false] Whether to try to reuse existing row elements (optimization).\n\t */\n\tsetRows(data: (string | number | (string | number)[] | Record<string, string | number>)[],\n\t\treuse: boolean = false)\n\t{\n\t\tthis.data = data;\n\t\tthis.updateContent(reuse);\n\t}\n\n\t/**\n\t * Adds a single row to the table.\n\t * @param {string | number | (string | number)[] | Record<string, string | number>} row The data for the row.\n\t * @param {boolean} skipAdd If true, does not add the row to the internal data array (used when rebuilding from existing data).\n\t * @returns {HTMLTableRowElement} The created row element.\n\t */\n\taddRow(row: string | number | (string | number)[] | Record<string, string | number>,\n\t\tskipAdd: boolean): HTMLTableRowElement\n\t{\n\t\tconst tr = document.createElement(\"tr\");\n\n\t\t// Create cells\n\t\tfor (let j = 0; j < this.columnFields.length; ++j)\n\t\t{\n\t\t\tconst td = document.createElement(\"td\");\n\n\t\t\tlet value: string | string[] | Record<string, string | number> | undefined | number;\n\n\t\t\tif (Array.isArray(row))\n\t\t\t{\n\t\t\t\tvalue = row[j];\n\t\t\t}\n\t\t\telse // Object\n\t\t\t{\n\t\t\t\tvalue = row[this.columnFields[j] as keyof object];\n\t\t\t}\n\t\t\tvalue = value ?? \"\";\n\n\t\t\ttd.innerHTML = value as string;\n\t\t\tthis.value = this.columnFields[j];\n\n\t\t\tconst column = this.columns[j] as TableColumn;\n\t\t\tif (column === undefined) { break; }\n\t\t\tif (column.className) { td.className = column.className; }\n\t\t\tif (column.width) { td.style.width = column.width as string; }\n\t\t\ttr.appendChild(td);\n\t\t}\n\n\t\tthis.root.appendChild(tr);\n\t\tthis.rows.push(tr);\n\t\tif (!skipAdd) { this.data.push(row); }\n\n\t\treturn tr;\n\t}\n\n\t/**\n\t * Updates an existing row with new data.\n\t * @param {number} index The index of the row to update.\n\t * @param {string | number | (string | number)[] | Record<string, string | number>} row The new data for the row.\n\t * @returns {HTMLTableRowElement | undefined} The updated row element, or undefined if not found.\n\t */\n\tupdateRow(index: number,\n\t\trow: string | number | (string | number)[] | Record<string, string | number>)\n\t{\n\t\tthis.data[index] = row;\n\n\t\tconst tr = this.rows[index];\n\t\tif (!tr)\n\t\t{ return; }\n\n\t\tconst cells = tr.querySelectorAll(\"td\");\n\t\tfor (let j = 0; j < cells.length; ++j)\n\t\t{\n\t\t\tconst column = this.columns[j];\n\n\t\t\tlet value: string | number | string[] | Record<string, string | number> | undefined;\n\n\t\t\tif (Array.isArray(row))\n\t\t\t{\n\t\t\t\tvalue = row[j];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvalue = row[column.field as keyof object];\n\t\t\t}\n\n\t\t\tvalue = value ?? \"\";\n\n\t\t\tcells[j].innerHTML = value as string;\n\t\t}\n\t\treturn tr;\n\t}\n\n\t/**\n\t * Updates the content of a specific cell.\n\t * @param {number} row The row index.\n\t * @param {number} cell The cell (column) index.\n\t * @param {string} data The new HTML content.\n\t * @returns {HTMLElement | undefined} The updated cell element, or undefined if not found.\n\t */\n\tupdateCell(row: number, cell: number, data: string)\n\t{\n\t\tconst tr = this.rows[row];\n\t\tif (!tr) { return; }\n\t\tconst newCell = tr.childNodes[cell] as HTMLElement | null;\n\t\tif (!newCell) { return; }\n\t\tnewCell.innerHTML = data;\n\t\treturn newCell;\n\t}\n\n\n\t/**\n\t * Defines the columns for the table.\n\t * @param {(string | number | TableColumn)[]} columns Array of column names or definitions.\n\t */\n\tsetColumns(columns: (string | number | TableColumn)[])\n\t{\n\t\tthis.columns.length = 0;\n\t\tthis.columnFields.length = 0;\n\n\t\tconst avgWidth = ((Math.floor(100 / columns.length)).toFixed(1)) + \"%\";\n\n\t\tconst rest = [];\n\n\t\tfor (let i = 0; i < columns.length; ++i)\n\t\t{\n\t\t\tlet col: string | number | object | TableColumn = columns[i];\n\n\t\t\tif (col === null || col === undefined) { continue; }\n\n\t\t\t// Allow to pass just strings or numbers instead of objects\n\t\t\tif (typeof col === \"string\" || typeof col === \"number\") { col = { name: String(col) }; }\n\n\t\t\tconst tableCol = col as TableColumn;\n\n\t\t\tconst column: TableColumn = {\n\t\t\t\tname: tableCol.name || \"\",\n\t\t\t\twidth: SizeToCSS(tableCol.width || avgWidth) as string,\n\t\t\t\tfield: (tableCol.field || tableCol.name || \"\").toLowerCase(),\n\t\t\t\tclassName: tableCol.className\n\t\t\t};\n\n\t\t\t// Last\n\t\t\tif (i == columns.length - 1)\n\t\t\t{\n\t\t\t\tcolumn.width = `calc( 100% - ( ${rest.join(\" + \")}) )`;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\trest.push(column.width);\n\t\t\t}\n\n\t\t\tthis.columns.push(column);\n\t\t\tthis.columnFields.push(column.field as string);\n\t\t}\n\n\t\tthis._mustUpdateHeader = true;\n\t\tthis.updateContent();\n\t}\n\n\t/**\n\t * Rebuilds or updates the table content based on the current data.\n\t * @param {boolean} [reuse=false] Whether to reuse existing DOM elements.\n\t */\n\tupdateContent(reuse: boolean = false)\n\t{\n\t\tthis.root.innerHTML = \"\";\n\n\t\t// Update header\n\t\tif (this._mustUpdateHeader)\n\t\t{\n\t\t\tthis.header = document.createElement(\"tr\");\n\t\t\tfor (let i = 0; i < this.columns.length; ++i)\n\t\t\t{\n\t\t\t\tconst column = this.columns[i] as TableColumn;\n\t\t\t\tconst th = document.createElement(\"th\");\n\t\t\t\tth.innerHTML = column.name as string;\n\t\t\t\tif (column.width)\n\t\t\t\t{\n\t\t\t\t\tth.style.width = column.width as string;\n\t\t\t\t}\n\t\t\t\tcolumn.tableElement = th;\n\t\t\t\tthis.header.appendChild(th);\n\t\t\t}\n\t\t\tthis._mustUpdateHeader = false;\n\t\t}\n\t\tthis.root.appendChild(this.header as HTMLTableRowElement);\n\n\t\tif (!this.data) { return; }\n\n\t\tif (this.data.length != this.rows.length) { reuse = false; }\n\n\t\tif (reuse)\n\t\t{\n\t\t\tfor (let i = 0; i < this.rows.length; ++i)\n\t\t\t{\n\t\t\t\tconst dataRow = this.data[i];\n\t\t\t\tconst tr = this.updateRow(i, dataRow);\n\t\t\t\tthis.root.appendChild(tr!);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.rows.length = 0;\n\n\t\t\t// Create rows\n\t\t\tfor (let i = 0; i < this.data.length; ++i)\n\t\t\t{\n\t\t\t\tconst row = this.data[i];\n\t\t\t\tthis.addRow(row, true);\n\t\t\t}\n\t\t}\n\t}\n}","import { SpecialCode } from \"./core\";\nimport { LiteGUIObject } from \"./@types/globals/index\";\nimport { Trigger } from \"./utilities\";\n\n/**\n * Interface extending HTMLDivElement to include a reference to the Tabs instance.\n */\nexport interface TabsRootDivElement extends HTMLDivElement\n{\n\t/**\n\t * Reference to the Tabs widget instance associated with this element.\n\t */\n\ttabs?: Tabs;\n}\n\n/**\n * Interface extending HTMLLIElement to include tab-specific properties.\n */\nexport interface TabInfoLIElement extends HTMLLIElement\n{\n\t/**\n\t * Indicates if this tab is currently selected.\n\t */\n\tselected?: boolean;\n\t/**\n\t * Options associated with this specific tab.\n\t */\n\toptions?: TabsOptions;\n\t/**\n\t * Reference to the parent Tabs instance.\n\t */\n\ttabs?: Tabs;\n\t/**\n\t * Reference to the TabInfo object associated with this element.\n\t */\n\tinfo?: TabInfo;\n}\n\n/**\n * Represents a single tab within the Tabs widget.\n * Stores references to the DOM elements and state of the tab.\n * @class TabInfo\n */\nexport class TabInfo\n{\n\t/**\n\t * Unique identifier for the tab.\n\t */\n\tid: string;\n\t/**\n\t * The list item element representing the tab in the tab bar.\n\t */\n\ttab: TabInfoLIElement;\n\t/**\n\t * The container element for the tab's content.\n\t */\n\tcontent: HTMLDivElement;\n\t/**\n\t * The element containing the tab's title text.\n\t */\n\ttitle: Element;\n\t/**\n\t * Callback function triggered when the tab is closed.\n\t */\n\tonClose?: (tab: TabInfo) => void;\n\t/**\n\t * Indicates if the tab is currently selected.\n\t */\n\tselected?: boolean;\n\n\t/**\n\t * Creates a new TabInfo instance.\n\t * @param {string} id Unique identifier for the tab.\n\t * @param {TabInfoLIElement} tab The list item element.\n\t * @param {HTMLDivElement} content The content container element.\n\t * @param {Element} title The title element.\n\t */\n\tconstructor(id: string, tab: TabInfoLIElement, content: HTMLDivElement, title: Element)\n\t{\n\t\tthis.id = id;\n\t\tthis.tab = tab;\n\t\tthis.content = content;\n\t\tthis.title = title;\n\t}\n\n\t/**\n\t * Appends an element to the tab's content area.\n\t * @param {LiteGUIObject | HTMLElement} element The element to append.\n\t */\n\tadd(element: LiteGUIObject | HTMLElement)\n\t{\n\t\tif (!element) { return; }\n\t\tthis.content.appendChild(\"root\" in element ? element.root : element);\n\t}\n\n\t/**\n\t * Sets the title of the tab.\n\t * @param {string} title The new title text.\n\t */\n\tsetTitle(title: string)\n\t{\n\t\tthis.title.innerHTML = title;\n\t}\n\n\t/**\n\t * Simulates a click on the tab.\n\t */\n\tclick()\n\t{\n\t\tTrigger(this.tab, \"click\");\n\t}\n}\n\n/**\n * Configuration options for the Tabs widget or individual tabs.\n */\nexport interface TabsOptions\n{\n\t/**\n\t * If true, the tab will be initially selected.\n\t */\n\tselected?: boolean;\n\t/**\n\t * Callback triggered when a tab is closed.\n\t */\n\tonClose?: (tab: TabInfo) => void;\n\t/**\n\t * Callback triggered when a tab is selected/clicked.\n\t */\n\tcallback?: (tab: string, event: PointerEvent | boolean) => void;\n\t/**\n\t * Callback triggered when leaving a tab.\n\t */\n\tonLeave?: (tab: TabInfo) => void;\n\t/**\n\t * Callback triggered on right-click (context menu).\n\t */\n\tonContextCall?: (tab: TabInfo) => void;\n\t/**\n\t * Function to check if a tab can be opened. If it returns false, the tab won't open.\n\t */\n\tonCanOpen?: (tab: TabInfoLIElement) => boolean;\n\t/**\n\t * Additional CSS class names for the tab content container.\n\t */\n\tclassName?: string;\n\t/**\n\t * Parent element to append the tabs widget to.\n\t */\n\tparent?: string | HTMLDivElement;\n\t/**\n\t * Height of the widget.\n\t */\n\theight?: string | number;\n\t/**\n\t * Width of the widget.\n\t */\n\twidth?: string | number;\n\t/**\n\t * Index to insert the tab at.\n\t */\n\tindex?: number;\n\t/**\n\t * HTML string for a large icon.\n\t */\n\tbigicon?: string;\n\t/**\n\t * Title text of the tab.\n\t */\n\ttitle?: string;\n\t/**\n\t * If true, events won't be triggered during setup.\n\t */\n\tskipCallbacks?: boolean;\n\t/**\n\t * Initial HTML content or element for the tab.\n\t */\n\tcontent?: string | HTMLElement;\n\t/**\n\t * If true, the tab will have a close button.\n\t */\n\tclosable?: boolean;\n\t/**\n\t * Width of the tab element itself.\n\t */\n\ttabWidth?: number | string;\n\t/**\n\t * Additional CSS class names for the tab element.\n\t */\n\ttabClassName?: string;\n\t/**\n\t * ID for the widget or tab.\n\t */\n\tid?: string;\n\t/**\n\t * Size options (e.g., \"full\").\n\t */\n\tsize?: string | number;\n\t/**\n\t * Layout mode: \"horizontal\" or \"vertical\".\n\t */\n\tmode?: \"horizontal\" | \"vertical\";\n\t/**\n\t * If true, acts as a button rather than a switchable tab.\n\t */\n\tbutton?: boolean;\n\t/**\n\t * If true, tabs switch automatically on hover/drag.\n\t */\n\tautoswitch?: boolean;\n\t/**\n\t * If true, adds a \"+\" tab for creating new tabs.\n\t */\n\taddPlusTab?: boolean;\n\t/**\n\t * If true, allows double-clicking the tab title to rename it.\n\t */\n\tallowRename?: boolean;\n}\n\n/**\n * Widget that manages multiple tabs and their associated content.\n * Supports horizontal and vertical modes, dynamic adding/removing of tabs, and various events.\n *\n * @class Tabs\n * @example\n * ```typescript\n * const tabs = new Tabs({ mode: \"horizontal\", size: \"full\" });\n * tabs.addTab(\"Home\", { title: \"Home\", content: \"Welcome!\" });\n * parent.appendChild(tabs.root);\n * ```\n */\nexport class Tabs implements LiteGUIObject\n{\n\troot: TabsRootDivElement;\n\toptions: TabsOptions;\n\tmode: \"horizontal\" | \"vertical\";\n\tcurrentTab: number;\n\tpreviousTab: number;\n\tlist: HTMLUListElement;\n\ttabsRoot: HTMLElement;\n\ttabs: { [key: string]: TabInfo } = {};\n\ttabsByIndex: TabInfo[];\n\tselected?: string;\n\tonchange?: CallableFunction;\n\tplusTab?: TabInfo;\n\tplusTabCallbacks: ((tab: string, event: PointerEvent | boolean) => void)[] = [];\n\tprivate _timeoutMouseOver?: NodeJS.Timeout;\n\tstatic TABS_WIDTH: number = 64;\n\tstatic TABS_HEIGHT: number = 26;\n\n\t/**\n\t * Creates an instance of the Tabs widget.\n\t * @param {TabsOptions} [options] Configuration options.\n\t * @param {\"horizontal\" | \"vertical\"} [options.mode=\"horizontal\"] Layout mode: \"vertical\" or \"horizontal\".\n\t * @param {string|number} [options.size] Size of the widget (e.g., \"full\" for 100%).\n\t * @param {string|number} [options.width] Explicit width.\n\t * @param {string|number} [options.height] Explicit height.\n\t * @param {boolean} [options.autoswitch] If true, switches tabs on hover/drag.\n\t * @param {boolean} [options.addPlusTab] If true, adds a \"+\" tab for creating new tabs.\n\t * @param {string|HTMLDivElement} [options.parent] Parent element to attach the widget to.\n\t */\n\tconstructor(options?: TabsOptions)\n\t{\n\t\tconst op = options ?? {};\n\t\tthis.options = op;\n\n\t\tconst mode = this.mode = op.mode ?? \"horizontal\";\n\n\t\tconst root = document.createElement(\"div\") as TabsRootDivElement;\n\t\tif (op.id) { root.id = op.id; }\n\t\troot.className = \"litetabs \" + mode;\n\t\troot.tabs = this;\n\t\tthis.root = root;\n\n\t\t// Initialize tab tracking variables, using -1 to indicate no tab selected.\n\t\tthis.currentTab = -1;\n\t\tthis.previousTab = -1;\n\t\tif (mode == \"horizontal\")\n\t\t{\n\t\t\t// Handle size options for horizontal mode\n\t\t\tif (op.size)\n\t\t\t{\n\t\t\t\tif (op.size == \"full\")\n\t\t\t\t{\n\t\t\t\t\tthis.root.style.height = \"100%\";\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.root.style.height = op.size.toString();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (mode == \"vertical\")\n\t\t{\n\t\t\t// Handle size options for vertical mode\n\t\t\tif (op.size)\n\t\t\t{\n\t\t\t\tif (op.size == \"full\")\n\t\t\t\t{\n\t\t\t\t\tthis.root.style.width = \"100%\";\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.root.style.width = op.size.toString();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (op.width) { this.root.style.width = op.width.constructor === Number ? op.width.toFixed(0) + \"px\" : op.width.toString(); }\n\t\tif (op.height) { this.root.style.height = op.height.constructor === Number ? op.height.toFixed(0) + \"px\" : op.height.toString(); }\n\n\t\t/*\n\t\t * Container of tab elements (the actual tabs you click on)\n\t\t * This UL element holds the LI elements representing each tab\n\t\t */\n\t\tconst list = document.createElement(\"ul\");\n\t\tlist.className = \"wtabcontainer\";\n\t\tif (mode == \"vertical\") { list.style.width = Tabs.TABS_WIDTH + \"px\"; }\n\t\telse { list.style.height = Tabs.TABS_HEIGHT + \"px\"; }\n\n\t\t// Allows to use the wheel to see hidden tabs\n\t\tlist.addEventListener(\"wheel\", this.onMouseWheel);\n\n\t\tthis.list = list;\n\t\tthis.root.appendChild(this.list);\n\t\tthis.tabsRoot = list;\n\n\t\tthis.tabsByIndex = [];\n\n\t\tif (op.addPlusTab)\n\t\t{\n\t\t\tthis.createPlusTab();\n\t\t}\n\n\t\tif (op.parent) { this.appendTo(op.parent as HTMLDivElement); }\n\t}\n\n\t/**\n\t * Handles mouse wheel events on the tab strings list to scroll hidden tabs.\n\t * @param {WheelEvent} e The mouse wheel event.\n\t */\n\tonMouseWheel(e: WheelEvent)\n\t{\n\t\tif (e.deltaY) { this.list.scrollLeft += e.deltaY; }\n\t}\n\n\t/**\n\t * Shows the Tabs widget.\n\t */\n\tshow()\n\t{\n\t\tthis.root.style.display = \"block\";\n\t}\n\n\t/**\n\t * Hides the Tabs widget.\n\t */\n\thide()\n\t{\n\t\tthis.root.style.display = \"none\";\n\t}\n\n\n\t/**\n\t * Returns the currently selected tab object.\n\t * @returns {TabInfoLIElement | undefined} The tab list item element, or undefined if none selected.\n\t */\n\tgetCurrentTab()\n\t{\n\t\tif (this.currentTab > -1 && this.tabsByIndex[this.currentTab])\n\t\t{\n\t\t\treturn this.tabsByIndex[this.currentTab].tab;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Returns the ID of the currently selected tab.\n\t * @returns {string | undefined} The ID of the current tab, or undefined if none selected.\n\t */\n\tgetCurrentTabId()\n\t{\n\t\tif (this.currentTab > -1 && this.tabsByIndex[this.currentTab])\n\t\t{\n\t\t\treturn this.tabsByIndex[this.currentTab].id;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Returns the tab that was selected before the current one.\n\t * @returns {TabInfoLIElement | undefined} The previous tab list item element.\n\t */\n\tgetPreviousTab()\n\t{\n\t\tif (this.previousTab > -1 && this.tabsByIndex[this.previousTab])\n\t\t{\n\t\t\treturn this.tabsByIndex[this.previousTab].tab;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Appends the Tabs widget to a parent element.\n\t * @param {HTMLElement | string} parent The parent element or a CSS selector string.\n\t * @param {boolean} [atFront=false] If true, prepends the widget instead of appending.\n\t */\n\tappendTo(parent: HTMLElement | string, atFront?: boolean)\n\t{\n\t\tif (typeof parent === \"string\")\n\t\t{\n\t\t\tconst found = document.querySelector(parent);\n\t\t\tif (!found)\n\t\t\t{\n\t\t\t\tconsole.warn(\"Tabs.appendTo: element not found \" + parent);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tparent = found as HTMLElement;\n\t\t}\n\n\t\tif (atFront)\n\t\t{\n\t\t\tparent.prepend(this.root);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tparent.appendChild(this.root);\n\t\t}\n\t}\n\n\t/**\n\t * Retrieves a TabInfo object by its ID.\n\t * @param {string} id The ID of the tab.\n\t * @returns {TabInfo | undefined} The TabInfo object if found.\n\t */\n\tgetTab(id: string)\n\t{\n\t\tif (id in this.tabs)\n\t\t{\n\t\t\treturn this.tabs[id];\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Retrieves a TabInfo object by its numerical index.\n\t * @param {number} index The index in the tabs array.\n\t * @returns {TabInfo} The TabInfo object.\n\t */\n\tgetTabByIndex(index: number)\n\t{\n\t\treturn this.tabsByIndex[index];\n\t}\n\n\t/**\n\t * Returns the total number of tabs.\n\t * @returns {number} The count of tabs.\n\t */\n\tgetNumOfTabs()\n\t{\n\t\treturn this.tabsByIndex.length;\n\t}\n\n\t/**\n\t * Retrieves the content element of a specific tab.\n\t * @param {string} id The ID of the tab.\n\t * @returns {HTMLDivElement | undefined} The content div element.\n\t */\n\tgetTabContent(id: string)\n\t{\n\t\tconst tab = this.getTab(id);\n\t\tif (tab) { return tab.content; }\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Returns the internal index of a tab given its ID.\n\t * @param {string} id The ID of the tab.\n\t * @returns {number} The index of the tab, or -1 if not found.\n\t */\n\tgetIndexOfTab(id: string)\n\t{\n\t\tfor (let i = 0; i < this.tabsByIndex.length; i++)\n\t\t{\n\t\t\tconst tab = this.tabsByIndex[i];\n\t\t\tif (tab && tab.id == id)\n\t\t\t{\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\n\t/**\n\t * Returns the DOM index of the tab element within its parent container.\n\t * @param {string} id The ID of the tab.\n\t * @returns {number} The child node index, or -1 if not found.\n\t */\n\tgetIndexOfNodeList(id: string)\n\t{\n\t\tconst tab = this.getTab(id);\n\t\tif (!tab) { return -1; }\n\t\tfor (let i = 0; i < this.list.childNodes.length; i++)\n\t\t{\n\t\t\tif (this.list.childNodes[i] == tab.tab)\n\t\t\t{\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\n\n\t/**\n\t * Adds a new tab to the widget.\n\t *\n\t * @param {string} id Unique identifier for the tab. If null, a random ID is generated.\n\t * @param {TabsOptions | Function} options Configuration options for the tab, or a callback function for selection.\n\t * - If options is a **function**, it is treated as the `callback` property.\n\t * - If options is an **object**, it configures the tab.\n\t * @param {string} [options.title] Text to display on the tab.\n\t * @param {string|HTMLElement} [options.content] HTML content to display when selected.\n\t * @param {Function} [options.callback] Function called when the tab is clicked. `(tabID, event) => void`.\n\t * @param {Function} [options.onClose] Function called when the tab is closed. `(tabInfo) => void`.\n\t * @param {boolean} [options.selected] If true, this tab becomes the active one.\n\t * @param {boolean} [options.closable] If true, shows a close button.\n\t * @param {string} [options.bigicon] URL or HTML for a large icon.\n\t * @param {boolean} [options.button] If true, acts as a button (no content switch).\n\t * @returns {TabInfo} The created TabInfo object.\n\t */\n\taddTab(id: string, options: TabsOptions | ((tab: string, event: PointerEvent | boolean) => void))\n\t{\n\t\tif (typeof (options) == \"function\") { options = { callback: options }; }\n\t\tconst tabOptions = options ?? {};\n\t\tconst op = tabOptions;\n\t\tid = id ?? `rand_${(Math.random() * 1000000) | 0}`;\n\n\t\t// Create the tab element (list item)\n\t\tconst element = document.createElement(\"li\") as TabInfoLIElement;\n\t\tconst safeID = id.replace(/ /gi, \"_\");\n\t\telement.className = `wtab wtab-${safeID}`;\n\t\t// If(options.selected) element.className += \" selected\";\n\t\telement.dataset.id = id;\n\t\telement.innerHTML = `<span class='tabtitle'>${op.title ?? id}</span>`;\n\n\t\tif (op.button) { element.className += \" button \"; }\n\t\tif (op.tabClassName) { element.className += op.tabClassName; }\n\t\tif (op.bigicon) { element.innerHTML = `<img class='tabbigicon' src='${op.bigicon}'/>` + element.innerHTML; }\n\t\tif (op.closable)\n\t\t{\n\t\t\telement.innerHTML += `<span class='tabclose'>${SpecialCode.close}</span>`;\n\t\t\telement.querySelector(\"span.tabclose\")?.addEventListener(\"click\", (e) =>\n\t\t\t{\n\t\t\t\tthis.removeTab(id);\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t}, true);\n\t\t}\n\n\t\t// Determine insertion position\n\t\tif (op.index !== undefined)\n\t\t{\n\t\t\t// Insert at specific index if provided\n\t\t\tconst after = this.list.childNodes[op.index];\n\t\t\tif (after)\n\t\t\t{\n\t\t\t\tthis.list.insertBefore(element, after);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.list.appendChild(element);\n\t\t\t}\n\t\t}\n\t\telse if (this.plusTab)\n\t\t{\n\t\t\t// If 'plus' tab exists, insert before it (it should always be last)\n\t\t\tthis.list.insertBefore(element, this.plusTab.tab);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.list.appendChild(element);\n\t\t}\n\n\t\tif (op.tabWidth)\n\t\t{\n\t\t\telement.style.width = typeof op.tabWidth === \"number\" ? `${op.tabWidth.toFixed(0)}px` : op.tabWidth.toString();\n\t\t\telement.style.minWidth = \"0\";\n\t\t}\n\n\t\t// Autoswitch behavior: switch tabs when dragging an item over them\n\t\tif (this.options.autoswitch)\n\t\t{\n\t\t\telement.classList.add(\"autoswitch\");\n\t\t\tconst dragEnterCallback = (e: DragEvent) =>\n\t\t\t{\n\t\t\t\tconst el = e.target;\n\t\t\t\t// Debounce the switch to avoid flickering\n\t\t\t\tif (this._timeoutMouseOver) { clearTimeout(this._timeoutMouseOver); }\n\t\t\t\tthis._timeoutMouseOver = setTimeout((() =>\n\t\t\t\t{\n\t\t\t\t\tTrigger(el as EventTarget, \"click\");\n\t\t\t\t\tthis._timeoutMouseOver = undefined;\n\t\t\t\t}), 500);\n\t\t\t};\n\t\t\telement.addEventListener(\"dragenter\", dragEnterCallback);\n\n\t\t\telement.addEventListener(\"dragleave\", () =>\n\t\t\t{\n\t\t\t\tif (this._timeoutMouseOver)\n\t\t\t\t{\n\t\t\t\t\tclearTimeout(this._timeoutMouseOver);\n\t\t\t\t\tthis._timeoutMouseOver = undefined;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// The content container for this tab\n\t\tconst content = document.createElement(\"div\");\n\t\tif (op.id) { content.id = op.id; }\n\n\t\tcontent.className = `wtabcontent wtabcontent-${safeID} ${op.className ?? \"\"}`;\n\t\tcontent.dataset.id = id;\n\t\tcontent.style.display = \"none\";\n\n\t\t// Adapt content height based on mode and size options\n\t\tif (this.mode == \"horizontal\")\n\t\t{\n\t\t\tif (op.size)\n\t\t\t{\n\t\t\t\tcontent.style.overflow = \"auto\";\n\t\t\t\tif (op.size == \"full\")\n\t\t\t\t{\n\t\t\t\t\t// Subtract tab header height calculation\n\t\t\t\t\tcontent.style.width = \"100%\";\n\t\t\t\t\tcontent.style.height = `calc( 100% - ${Tabs.TABS_HEIGHT}px )`;\n\t\t\t\t}\n\t\t\t\telse { content.style.height = op.size.toString(); }\n\t\t\t}\n\t\t}\n\t\telse if (this.mode == \"vertical\")\n\t\t{\n\t\t\tif (op.size)\n\t\t\t{\n\t\t\t\tcontent.style.overflow = \"auto\";\n\t\t\t\tif (op.size == \"full\")\n\t\t\t\t{\n\t\t\t\t\t// Subtract tab width calculation\n\t\t\t\t\tcontent.style.height = \"100%\";\n\t\t\t\t\tcontent.style.width = `calc( 100% - ${Tabs.TABS_WIDTH}px )`;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tcontent.style.width = op.size.toString();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Overwrite dimensions if explicitly provided in options\n\t\tif (op.width !== undefined)\n\t\t{\n\t\t\tcontent.style.width = typeof (op.width) === \"string\" ? op.width : `${op.width}px`;\n\t\t}\n\t\tif (op.height !== undefined)\n\t\t{\n\t\t\tcontent.style.height = typeof (op.height) === \"string\" ? op.height : `${op.height}px`;\n\t\t}\n\n\t\t// Add content to the container\n\t\tif (op.content)\n\t\t{\n\t\t\tif (typeof (op.content) == \"string\")\n\t\t\t{\n\t\t\t\tcontent.innerHTML = op.content;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tcontent.appendChild(op.content);\n\t\t\t}\n\t\t}\n\n\t\tthis.root.appendChild(content);\n\n\t\t// Bind click events\n\t\tif (!op.button)\n\t\t{\n\t\t\telement.addEventListener(\"click\", this._onTabClicked.bind(this, element));\n\t\t}\n\t\telse\n\t\t{\n\t\t\tconst clickCallback = (e: PointerEvent) =>\n\t\t\t{\n\t\t\t\tif (!e.target) { return; }\n\t\t\t\tconst tabID = element.dataset.id;\n\t\t\t\tif (typeof tabID === \"string\" && op.callback) { op.callback(tabID, e); }\n\t\t\t};\n\t\t\telement.addEventListener(\"click\", clickCallback.bind(element));\n\t\t}\n\n\t\telement.options = options;\n\t\telement.tabs = this;\n\n\t\tconst title = element.querySelector(\"span.tabtitle\");\n\n\t\tconst tabInfo: TabInfo = new TabInfo(id, element, content, title!);\n\t\telement.info = tabInfo;\n\n\t\tif (op.onClose) { tabInfo.onClose = op.onClose; }\n\t\tconst tempo = this.tabsByIndex.length;\n\t\tthis.tabsByIndex[tempo] = tabInfo;\n\t\tthis.tabs[id] = tabInfo;\n\n\t\t// Recompute indices to keep arrays in sync with DOM order\n\t\tthis.recomputeTabsByIndex();\n\n\t\t// Context menu handler (Right-click)\n\t\telement.addEventListener(\"contextmenu\", ((e) =>\n\t\t{\n\t\t\tif (e.button != 2) { return false; }// Right button\n\t\t\te.preventDefault();\n\t\t\tif (op.onContextCall) { op.onContextCall(tabInfo); }\n\t\t\treturn false;\n\t\t}));\n\n\t\t// Rename functionality via double-click\n\t\tif (this.options.allowRename)\n\t\t{\n\t\t\telement.addEventListener(\"dblclick\", () =>\n\t\t\t{\n\t\t\t\tconst titleSpan = element.querySelector<HTMLSpanElement>(\".tabtitle\");\n\t\t\t\tif (!titleSpan) {return;}\n\n\t\t\t\tconst originalTitle = titleSpan.innerText;\n\t\t\t\ttitleSpan.style.display = \"none\"; // Hide title\n\n\t\t\t\t// Create temporary input for renaming\n\t\t\t\tconst input = document.createElement(\"input\");\n\t\t\t\tinput.type = \"text\";\n\t\t\t\tinput.value = originalTitle;\n\t\t\t\tinput.className = \"tab-rename-input\";\n\t\t\t\tinput.style.width = \"80px\";\n\t\t\t\tlet isProcessed = false;\n\t\t\t\tconst processRename = () =>\n\t\t\t\t{\n\t\t\t\t\tif (isProcessed) {return;}\n\t\t\t\t\tisProcessed = true;\n\t\t\t\t\tconst newTitle = input.value.trim();\n\t\t\t\t\tif (newTitle)\n\t\t\t\t\t{\n\t\t\t\t\t\ttitleSpan.innerText = newTitle;\n\t\t\t\t\t}\n\t\t\t\t\tinput.remove();\n\t\t\t\t\ttitleSpan.style.display = \"\";\n\t\t\t\t};\n\n\t\t\t\tinput.addEventListener(\"keydown\", (e) =>\n\t\t\t\t{\n\t\t\t\t\tif (e.key === \"Enter\")\n\t\t\t\t\t{\n\t\t\t\t\t\tprocessRename();\n\t\t\t\t\t}\n\t\t\t\t\telse if (e.key === \"Escape\")\n\t\t\t\t\t{\n\t\t\t\t\t\tif (isProcessed) {return;}\n\t\t\t\t\t\tisProcessed = true;\n\t\t\t\t\t\tinput.remove();\n\t\t\t\t\t\ttitleSpan.style.display = \"\";\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tinput.addEventListener(\"blur\", () =>\n\t\t\t\t{\n\t\t\t\t\tprocessRename();\n\t\t\t\t});\n\n\t\t\t\telement.insertBefore(input, titleSpan);\n\t\t\t\tinput.focus();\n\t\t\t});\n\t\t}\n\n\t\tif (op.selected == true || this.selected == null)\n\t\t{\n\t\t\tthis.selectTab(id, op.skipCallbacks);\n\t\t}\n\n\t\treturn tabInfo;\n\t}\n\n\t/**\n\t * Returns the 'Plus' tab if it exists.\n\t * @returns {TabInfo | undefined} The plus tab info.\n\t */\n\tgetPlusTab()\n\t{\n\t\treturn this.plusTab;\n\t}\n\n\t/**\n\t * Adds a callback function to be executed when the 'Plus' tab is clicked.\n\t * @param {Function} callback Function receiving tab ID and event: `(tab: string, event: PointerEvent | boolean) => void`.\n\t */\n\taddPlusTab(callback: (tab: string, event: PointerEvent | boolean) => void)\n\t{\n\t\tthis.addPlusTabCallback(callback);\n\t}\n\n\t/**\n\t * Creates the 'Plus' tab internally if it doesn't exist.\n\t */\n\tcreatePlusTab()\n\t{\n\t\tif (this.plusTab) {return;}\n\t\tthis.plusTab = this.addTab(\"plus_tab\", {\n\t\t\ttitle: \"+\",\n\t\t\ttabWidth: 20,\n\t\t\tbutton: true,\n\t\t\ttabClassName: \"wtabplus\",\n\t\t\tcallback: this.onPlusTabClick.bind(this),\n\t\t\tskipCallbacks: true\n\t\t});\n\t\t// Ensure it is at the end\n\t\tthis.list.appendChild(this.plusTab.tab);\n\t}\n\n\t/**\n\t * Registers a callback for the 'Plus' tab click event.\n\t * @param {Function} callback The callback function: `(tab: string, event: PointerEvent | boolean) => void`.\n\t */\n\taddPlusTabCallback(callback: (tab: string, event: PointerEvent | boolean) => void)\n\t{\n\t\tif (!this.plusTab)\n\t\t{\n\t\t\tthis.createPlusTab();\n\t\t}\n\t\tthis.plusTabCallbacks.push(callback);\n\t}\n\n\t/**\n\t * Removes a previously registered 'Plus' tab callback.\n\t * @param {Function} callback The callback function to remove.\n\t */\n\tremovePlusTabCallback(callback: (tab: string, event: PointerEvent | boolean) => void)\n\t{\n\t\tconst index = this.plusTabCallbacks.indexOf(callback);\n\t\tif (index > -1)\n\t\t{\n\t\t\tthis.plusTabCallbacks.splice(index, 1);\n\t\t}\n\t}\n\n\t/**\n\t * Handles the click event on the 'Plus' tab.\n\t * Creates a ghost tab for user input and triggers callbacks.\n\t * @param {string} tab The tab ID.\n\t * @param {PointerEvent | boolean} event The event object.\n\t */\n\tonPlusTabClick(tab: string, event: PointerEvent | boolean)\n\t{\n\t\t// Internal behavior: Create Ghost Tab for user input\n\t\tthis.createGhostTab();\n\n\t\t// Execute any registered external callbacks\n\t\tfor (const callback of this.plusTabCallbacks)\n\t\t{\n\t\t\tcallback(tab, event);\n\t\t}\n\t}\n\n\t/**\n\t * Creates a temporary \"ghost\" tab that allows the user to input a name for a new tab.\n\t */\n\tcreateGhostTab()\n\t{\n\t\tconst element = document.createElement(\"li\") as TabInfoLIElement;\n\t\telement.className = \"wtab wtabghost\";\n\n\t\t// Input field for the new tab name\n\t\tconst input = document.createElement(\"input\");\n\t\tinput.type = \"text\";\n\t\tinput.placeholder = \"New Tab\";\n\t\tinput.className = \"wtabghostinput\";\n\n\t\telement.appendChild(input);\n\n\t\t// Insert before plus tab so it appears 'inside' the list\n\t\tif (this.plusTab)\n\t\t{\n\t\t\tthis.list.insertBefore(element, this.plusTab.tab);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.list.appendChild(element);\n\t\t}\n\n\t\tlet isProcessed = false;\n\n\t\tconst confirm = () =>\n\t\t{\n\t\t\tif (isProcessed) {return;}\n\t\t\tisProcessed = true;\n\t\t\tconst name = input.value.trim();\n\t\t\tif (name)\n\t\t\t{\n\t\t\t\tthis.addTab(null!, { title: name, selected: true });\n\t\t\t}\n\t\t\telement.remove();\n\t\t};\n\n\t\tconst cancel = () =>\n\t\t{\n\t\t\tif (isProcessed) {return;}\n\t\t\tisProcessed = true;\n\t\t\telement.remove();\n\t\t};\n\n\t\tinput.addEventListener(\"keydown\", (e) =>\n\t\t{\n\t\t\tif (e.key === \"Enter\")\n\t\t\t{\n\t\t\t\tconfirm();\n\t\t\t}\n\t\t\telse if (e.key === \"Escape\")\n\t\t\t{\n\t\t\t\tcancel();\n\t\t\t}\n\t\t});\n\n\t\tinput.addEventListener(\"blur\", () =>\n\t\t{\n\t\t\t// If empty, cancel. If text, confirm\n\t\t\tconst name = input.value.trim();\n\t\t\tif (!name)\n\t\t\t{\n\t\t\t\tcancel();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tconfirm();\n\t\t\t}\n\t\t});\n\n\t\tinput.focus();\n\t}\n\n\t/**\n\t * Adds a tab acting as a button (not user-selectable context switch).\n\t * @param {string} id Unique identifier.\n\t * @param {string} title Text to display.\n\t * @param {Function} callback Function triggered on click.\n\t * @returns {TabInfo} The created TabInfo object.\n\t */\n\taddButtonTab(id: string, title: string, callback: (tab: string, event: PointerEvent | boolean) => void)\n\t{\n\t\treturn this.addTab(id, { title: title, button: true, callback: callback, skipCallbacks: true });\n\t}\n\n\t/**\n\t * Internal handler for tab click events.\n\t * @private\n\t * @param {TabInfoLIElement} element The tab element clicked.\n\t * @param {PointerEvent | boolean} [event] The event triggering the click.\n\t */\n\tprivate _onTabClicked(element: TabInfoLIElement, event?: PointerEvent | boolean)\n\t{\n\t\t// Skip if already selected\n\t\tif (element.selected) { return; }\n\n\t\tif (!element.parentNode) { return; } // Safety check: element might have been removed\n\n\t\tconst options = this.options;\n\t\tif (!this) { throw (\"tabs not found\"); }\n\n\t\t// Check if this tab is allowed to be opened\n\t\tif (options.onCanOpen && options.onCanOpen(element) == false) { return; }\n\n\t\tconst tabId = element.dataset.id;\n\t\t// Trigger 'onLeave' event for the tab being exited\n\t\tif (this.currentTab != -1 &&\n\t\t\tthis.tabsByIndex[this.currentTab].id != tabId &&\n\t\t\tthis.tabsByIndex[this.currentTab].content &&\n\t\t\telement.options?.onLeave)\n\t\t{\n\t\t\tconst curTab = this.tabsByIndex[this.currentTab];\n\t\t\telement.options.onLeave(curTab);\n\t\t}\n\n\t\tlet tabContent = null;\n\n\t\t// Iterate over all tabs to update visibility and selection state\n\t\tfor (const name in this.tabs)\n\t\t{\n\t\t\tconst tabInfo = this.tabs[name];\n\n\t\t\tif (tabInfo.id == tabId)\n\t\t\t{\n\t\t\t\t// Show the selected tab content\n\t\t\t\ttabInfo.selected = true;\n\t\t\t\ttabInfo.content.style.display = \"\";\n\t\t\t\ttabContent = tabInfo.content;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// Hide other tabs\n\t\t\t\ttabInfo.selected = false;\n\t\t\t\ttabInfo.content.style.display = \"none\";\n\t\t\t}\n\t\t}\n\n\t\tconst list = this.list.querySelectorAll<TabInfoLIElement>(\"li.wtab\");\n\t\tfor (const tabInfo of list)\n\t\t{\n\t\t\ttabInfo.classList.remove(\"selected\");\n\t\t\ttabInfo.selected = false;\n\t\t}\n\t\telement.selected = true;\n\t\telement.classList.add(\"selected\");\n\n\t\t// Change current tab index\n\t\tthis.previousTab = this.currentTab;\n\t\tthis.currentTab = this.getIndexOfTab(tabId!);\n\n\t\tif (event) // User clicked\n\t\t{\n\t\t\t// Trigger callback function\n\t\t\tif (typeof tabId === \"string\")\n\t\t\t{\n\t\t\t\tif (options.callback) { options.callback(tabId, event); }\n\t\t\t\tif (element.options && element.options.callback) { element.options.callback(tabId, event); }\n\t\t\t}\n\n\t\t\t// Trigger global change events\n\t\t\tTrigger(this.root, \"wchange\", [tabId, tabContent]);\n\t\t\tif (this.onchange) { this.onchange(tabId, tabContent); }\n\t\t}\n\n\t\t// Update selected ID property\n\t\tthis.selected = tabId;\n\t}\n\n\t/**\n\t * Selects a tab by its ID.\n\t * @param {string} id The ID of the tab to select.\n\t * @param {boolean} [skipEvents=false] If true, prevents triggering callbacks.\n\t */\n\tselectTab(id: string, skipEvents: boolean = false)\n\t{\n\t\tif (!id) { return; }\n\n\t\tconst tabs = this.list.querySelectorAll<TabInfoLIElement>(\"li.wtab\");\n\t\tfor (const tabInfo of tabs)\n\t\t{\n\t\t\tif (id == tabInfo.dataset[\"id\"])\n\t\t\t{\n\t\t\t\tthis._onTabClicked(tabInfo, !skipEvents);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Sets the visibility of a tab and its content.\n\t * @param {string} id The ID of the tab.\n\t * @param {boolean} visible True to show, false to hide.\n\t */\n\tsetTabVisibility(id: string, visible: boolean)\n\t{\n\t\tconst tab = this.getTab(id);\n\t\tif (!tab) { return; }\n\n\t\ttab.tab.style.display = visible ? \"\" : \"none\";\n\t\ttab.content.style.display = visible ? \"\" : \"none\";\n\t}\n\n\t/**\n\t * Re-indexes the `tabsByIndex` array based on the current DOM order.\n\t */\n\trecomputeTabsByIndex()\n\t{\n\t\tthis.tabsByIndex = [];\n\n\t\tfor (const i in this.tabs)\n\t\t{\n\t\t\tconst tab = this.tabs[i];\n\n\t\t\t// Derive index from DOM position\n\t\t\tlet index = 0;\n\t\t\tlet child = tab.tab.previousSibling;\n\t\t\twhile (child)\n\t\t\t{\n\t\t\t\tindex++;\n\t\t\t\tchild = child.previousSibling as TabInfoLIElement;\n\t\t\t}\n\n\t\t\tthis.tabsByIndex[index] = tab;\n\t\t}\n\t}\n\n\t/**\n\t * Removes a tab by its ID.\n\t * @param {string} id The ID of the tab to remove.\n\t */\n\tremoveTab(id: string)\n\t{\n\t\tconst tab = this.getTab(id);\n\t\tif (!tab)\n\t\t{\n\t\t\tconsole.warn(`tab not found: ${id}`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (tab.onClose) { tab.onClose(tab); }\n\t\tif (tab.tab.parentNode) { tab.tab.parentNode.removeChild(tab.tab); }\n\t\tif (tab.content.parentNode) { tab.content.parentNode.removeChild(tab.content); }\n\n\t\tconst index = this.getIndexOfTab(id);\n\t\tthis.tabsByIndex.splice(index, 1);\n\t\tdelete this.tabs[id];\n\n\t\tthis.recomputeTabsByIndex();\n\t}\n\n\t/**\n\t * Removes all tabs.\n\t * @param {boolean} [keepPlus=false] If true, preserves the 'Plus' tab.\n\t */\n\tremoveAllTabs(keepPlus: boolean = false)\n\t{\n\t\tconst tabs = [];\n\t\tfor (const i in this.tabs)\n\t\t{\n\t\t\ttabs.push(this.tabs[i]);\n\t\t}\n\n\t\tfor (const i in tabs)\n\t\t{\n\t\t\tconst tab = tabs[i];\n\t\t\tif (tab == this.plusTab && keepPlus) { continue; }\n\t\t\tif (tab.tab.parentNode) { tab.tab.parentNode.removeChild(tab.tab); }\n\t\t\tif (tab.content.parentNode) { tab.content.parentNode.removeChild(tab.content); }\n\t\t\tconst index = this.getIndexOfTab(tab.id);\n\t\t\tthis.tabsByIndex.splice(index, 1);\n\t\t\tdelete this.tabs[tab.id];\n\t\t}\n\n\t\tthis.recomputeTabsByIndex();\n\t}\n\n\t/**\n\t * Alias for removing all tabs.\n\t */\n\tclear()\n\t{\n\t\tthis.removeAllTabs();\n\t}\n\n\t/**\n\t * Hides a specific tab.\n\t * @param {string} id The ID of the tab to hide.\n\t */\n\thideTab(id: string)\n\t{\n\t\tthis.setTabVisibility(id, false);\n\t}\n\n\t/**\n\t * Shows a previously hidden tab.\n\t * @param {string} id The ID of the tab to show.\n\t */\n\tshowTab(id: string)\n\t{\n\t\tthis.setTabVisibility(id, true);\n\t}\n\n\t/**\n\t * Transfers a tab from this widget to another Tabs widget.\n\t * @param {string} id The ID of the tab to transfer.\n\t * @param {Tabs} targetTabs The destination Tabs widget.\n\t * @param {number} [index=0] The index to insert the tab at in the target widget.\n\t */\n\ttransferTab(id: string, targetTabs: Tabs, index: number = 0)\n\t{\n\t\tconst tab = this.getTab(id);\n\t\tif (!tab) { return; }\n\n\t\ttargetTabs.tabs[id] = tab;\n\n\t\t// Insert tab into the new position in the list\n\t\tif (index !== 0)\n\t\t{\n\t\t\ttargetTabs.list.insertBefore(tab.tab, targetTabs.list.childNodes[index]);\n\t\t}\n\t\telse\n\t\t{\n\t\t\ttargetTabs.list.appendChild(tab.tab);\n\t\t}\n\n\t\t// Move content element to target's root\n\t\ttargetTabs.root.appendChild(tab.content);\n\n\t\t// Remove from current tabs\n\t\tdelete this.tabs[id];\n\t\tthis.tabsByIndex.splice(this.getIndexOfTab(id), 1);\n\n\t\t// Auto-select another tab if the current one was moved\n\t\tlet newtab = \"\";\n\t\tfor (const i in this.tabs)\n\t\t{\n\t\t\tnewtab = i;\n\t\t\tif (newtab) { break; }\n\t\t}\n\n\t\tif (newtab) { this.selectTab(newtab); }\n\n\n\t\t// Remove selection style from transferred tab\n\t\ttab.tab.selected = false;\n\n\t\t// Update state in target\n\t\ttargetTabs.recomputeTabsByIndex();\n\t\ttargetTabs.selectTab(id);\n\t}\n\n\t/**\n\t * Detaches a tab into a new window.\n\t * @param {string} id The ID of the tab to detach.\n\t * @param {Function} [onComplete] Callback triggering when detachment is complete.\n\t * @param {Function} [onClose] Callback triggering when the new window is closed.\n\t * @returns {Window | undefined} The new window object.\n\t */\n\tdetachTab(id: string, onComplete?: () => void, onClose?: () => void)\n\t{\n\t\tconst index = this.getIndexOfNodeList(id);\n\t\tconst tab = this.tabs[id];\n\t\tif (!tab) { return; }\n\n\t\t// Create new window\n\t\tconst w = 800;\n\t\tconst h = 600;\n\t\tconst tabWindow = window.open(\"\", \"\", `width=${w}, height=${h}, location=no, status=no, menubar=no, titlebar=no, fullscreen=yes`);\n\t\tif (!tabWindow) { return; }\n\t\ttabWindow.document.writeln(`<head><title>${id}</title>`);\n\n\t\t// Transfer stylesheets to the new window to maintain look and feel\n\t\tconst styles = document.querySelectorAll(\"link[rel='stylesheet'],style\");\n\t\tfor (let i = 0; i < styles.length; i++) { tabWindow.document.writeln(styles[i].outerHTML); }\n\t\ttabWindow.document.writeln(\"</head><body></body>\");\n\t\ttabWindow.document.close();\n\n\t\t// Transfer content after a while so the window is properly created\n\t\tconst newTabs = new Tabs(this.options);\n\t\ttabWindow.tabs = newTabs;\n\n\t\t// Handle window closing event to re-attach tab\n\t\ttabWindow.onbeforeunload = () =>\n\t\t{\n\t\t\tnewTabs.transferTab(id, this, index);\n\t\t\tif (onClose) { onClose(); }\n\t\t};\n\n\t\t// Move the content to the new window\n\t\tnewTabs.list.style.height = \"20px\";\n\t\ttabWindow.document.body.appendChild(newTabs.root);\n\t\tthis.transferTab(id, newTabs, index);\n\n\t\t// Ensure the transferred tab is selected in the new window\n\t\tnewTabs.tabs[id].tab.selected = true;\n\t\tthis.recomputeTabsByIndex();\n\n\t\tif (onComplete) { onComplete(); }\n\n\t\treturn tabWindow;\n\t}\n}","import { LiteGUIObject } from \"./@types/globals\";\nimport { Dialog, DialogOptions } from \"./dialog\";\n\n/**\n * Removes event listeners (assigned as properties) and references from a DOM element and its children.\n * Used to help with garbage collection and memory leaks by breaking circular references.\n * @function PurgeElement\n * @param {HTMLElement} element The DOM element to purge.\n */\nexport function PurgeElement(element: HTMLElement)\n{\n\tconst a = element.attributes;\n\tlet i, n;\n\n\tif (a)\n\t{\n\t\tfor (i = a.length - 1; i >= 0; i -= 1)\n\t\t{\n\t\t\tn = a[i].name;\n\t\t\tif (typeof (element as unknown as Record<string, unknown>)[n] === 'function')\n\t\t\t{\n\t\t\t\t(element as unknown as Record<string, unknown | null>)[n] = null;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst b = element.childNodes;\n\tif (b)\n\t{\n\t\tconst l = b.length;\n\t\tfor (let i = 0; i < l; i += 1)\n\t\t{\n\t\t\tPurgeElement(b[i] as HTMLElement);\n\t\t}\n\t}\n}\n\n/**\n * Basic object cloner. Copies own enumerable properties from original to target.\n * @function CloneInsides\n * @param {{ [key: string]: unknown }} [original] The source object to clone from.\n * @param {{ [key: string]: unknown }} [target] The target object to copy to. If null, a new object is created.\n * @returns {{ [key: string]: unknown }} The target object with copied properties.\n */\nexport function CloneInsides(original?: Record<string, unknown>, target?: Record<string, unknown>): Record<string, unknown>\n{\n\ttarget = target ?? {};\n\tfor (const j in original)\n\t{\n\t\ttarget[j] = original[j];\n\t}\n\treturn target;\n}\n\n/**\n * Focuses an element.\n * @function FocusElement\n * @param {HTMLElement | Window} element The element to focus.\n */\nexport function FocusElement(element: HTMLElement | Window)\n{\n\telement.focus();\n}\n\n/**\n * Blurs an element.\n * @function BlurElement\n * @param {HTMLElement | Window} element The element to blur.\n */\nexport function BlurElement(element: HTMLElement | Window)\n{\n\telement.blur();\n}\n\n/**\n * Interface to hold a reference to an object property and its options.\n */\nexport interface InstanceHolder\n{\n\t/** The instance object containing the property. */\n\tinstance: Record<string, unknown>;\n\t/** The name of the property. */\n\tname: string;\n\t/** Options associated with the property. */\n\toptions?: Record<string, unknown>;\n}\n\n/**\n * Tries to assign a value to the instance stored in an instance holder\n * @function AssignValue\n * @param {InstanceHolder} holder The instance holder containing the instance and property name.\n * @param {string | null | unknown[] | unknown} value The value to assign.\n */\nexport function AssignValue(holder: InstanceHolder, value: string | null | unknown[] | unknown)\n{\n\tconst instance = holder.instance as Record<string, unknown>;\n\tconst currentValue = instance[holder.name];\n\n\tif (currentValue == null || value == null || (holder.options as { type?: string })?.type == \"enum\")\n\t{\n\t\tinstance[holder.name] = value;\n\t}\n\telse if (typeof (currentValue) == \"number\")\n\t{\n\t\tinstance[holder.name] = parseFloat(value.toString());\n\t}\n\telse if (typeof (currentValue) == \"string\")\n\t{\n\t\tinstance[holder.name] = value;\n\t}\n\telse if (value && (value as unknown[]).length && currentValue && (currentValue as unknown[]).length &&\n\t\t(!Object.getOwnPropertyDescriptor(instance, holder.name) ||\n\t\t\t!Object.getOwnPropertyDescriptor(instance, holder.name)?.set) &&\n\t\t(!Object.getOwnPropertyDescriptor(Object.getPrototypeOf(instance), holder.name) ||\n\t\t\t!Object.getOwnPropertyDescriptor(Object.getPrototypeOf(instance), holder.name)?.set))\n\t{\n\t\tfor (let i = 0; i < (value as unknown[]).length; ++i)\n\t\t{\n\t\t\t(currentValue as unknown[])[i] = (value as unknown[])[i];\n\t\t}\n\t}\n\telse\n\t{\n\t\tinstance[holder.name] = value;\n\t}\n}\n\n/**\n * Extract all attributes from an instance (enumerable properties that are not function and a name starting with alphabetic character)\n *\n * @function CollectProperties\n * @param {unknown} instance extract enumerable and public (name do not start with '_' ) properties from an object\n * @returns {{[key:string]: unknown}} Object with \"name\" : value for every property\n *\n */\nexport function CollectProperties(instance: unknown): { [key: string]: unknown }\n{\n\tconst properties: { [key: string]: unknown } = {};\n\tconst obj = instance as Record<string, unknown>;\n\n\tfor (const i in obj)\n\t{\n\t\t// Skip vars with _ (they are private)\n\t\tif (i[0] == \"_\" || i[0] == \"@\" || i.substring(0, 6) == \"jQuery\")\n\t\t{\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst v = obj[i];\n\t\tconst inst = instance as { constructor?: { [key: string]: unknown } };\n\t\tif (v && typeof v.constructor == \"function\" && !inst.constructor?.[`@${i}`])\n\t\t{\n\t\t\tcontinue;\n\t\t}\n\t\tproperties[i] = v;\n\t}\n\treturn properties;\n}\n\n// Useful functions\n\n// From stackoverflow http://stackoverflow.com/questions/1354064/how-to-convert-characters-to-html-entities-using-plain-javascript\n\n/**\n * Internal helper to escape HTML entities in a string.\n * Uses a mapping table for characters.\n */\nconst escapeHtmlEntityTable: Record<number, string> = {\n\t34: 'quot',\n\t38: 'amp',\n\t39: 'apos',\n\t60: 'lt',\n\t62: 'gt',\n\t160: 'nbsp',\n\t161: 'iexcl',\n\t162: 'cent',\n\t163: 'pound',\n\t164: 'curren',\n\t165: 'yen',\n\t166: 'brvbar',\n\t167: 'sect',\n\t168: 'uml',\n\t169: 'copy',\n\t170: 'ordf',\n\t171: 'laquo',\n\t172: 'not',\n\t173: 'shy',\n\t174: 'reg',\n\t175: 'macr',\n\t176: 'deg',\n\t177: 'plusmn',\n\t178: 'sup2',\n\t179: 'sup3',\n\t180: 'acute',\n\t181: 'micro',\n\t182: 'para',\n\t183: 'middot',\n\t184: 'cedil',\n\t185: 'sup1',\n\t186: 'ordm',\n\t187: 'raquo',\n\t188: 'frac14',\n\t189: 'frac12',\n\t190: 'frac34',\n\t191: 'iquest',\n\t192: 'Agrave',\n\t193: 'Aacute',\n\t194: 'Acirc',\n\t195: 'Atilde',\n\t196: 'Auml',\n\t197: 'Aring',\n\t198: 'AElig',\n\t199: 'Ccedil',\n\t200: 'Egrave',\n\t201: 'Eacute',\n\t202: 'Ecirc',\n\t203: 'Euml',\n\t204: 'Igrave',\n\t205: 'Iacute',\n\t206: 'Icirc',\n\t207: 'Iuml',\n\t208: 'ETH',\n\t209: 'Ntilde',\n\t210: 'Ograve',\n\t211: 'Oacute',\n\t212: 'Ocirc',\n\t213: 'Otilde',\n\t214: 'Ouml',\n\t215: 'times',\n\t216: 'Oslash',\n\t217: 'Ugrave',\n\t218: 'Uacute',\n\t219: 'Ucirc',\n\t220: 'Uuml',\n\t221: 'Yacute',\n\t222: 'THORN',\n\t223: 'szlig',\n\t224: 'agrave',\n\t225: 'aacute',\n\t226: 'acirc',\n\t227: 'atilde',\n\t228: 'auml',\n\t229: 'aring',\n\t230: 'aelig',\n\t231: 'ccedil',\n\t232: 'egrave',\n\t233: 'eacute',\n\t234: 'ecirc',\n\t235: 'euml',\n\t236: 'igrave',\n\t237: 'iacute',\n\t238: 'icirc',\n\t239: 'iuml',\n\t240: 'eth',\n\t241: 'ntilde',\n\t242: 'ograve',\n\t243: 'oacute',\n\t244: 'ocirc',\n\t245: 'otilde',\n\t246: 'ouml',\n\t247: 'divide',\n\t248: 'oslash',\n\t249: 'ugrave',\n\t250: 'uacute',\n\t251: 'ucirc',\n\t252: 'uuml',\n\t253: 'yacute',\n\t254: 'thorn',\n\t255: 'yuml',\n\t402: 'fnof',\n\t913: 'Alpha',\n\t914: 'Beta',\n\t915: 'Gamma',\n\t916: 'Delta',\n\t917: 'Epsilon',\n\t918: 'Zeta',\n\t919: 'Eta',\n\t920: 'Theta',\n\t921: 'Iota',\n\t922: 'Kappa',\n\t923: 'Lambda',\n\t924: 'Mu',\n\t925: 'Nu',\n\t926: 'Xi',\n\t927: 'Omicron',\n\t928: 'Pi',\n\t929: 'Rho',\n\t931: 'Sigma',\n\t932: 'Tau',\n\t933: 'Upsilon',\n\t934: 'Phi',\n\t935: 'Chi',\n\t936: 'Psi',\n\t937: 'Omega',\n\t945: 'alpha',\n\t946: 'beta',\n\t947: 'gamma',\n\t948: 'delta',\n\t949: 'epsilon',\n\t950: 'zeta',\n\t951: 'eta',\n\t952: 'theta',\n\t953: 'iota',\n\t954: 'kappa',\n\t955: 'lambda',\n\t956: 'mu',\n\t957: 'nu',\n\t958: 'xi',\n\t959: 'omicron',\n\t960: 'pi',\n\t961: 'rho',\n\t962: 'sigmaf',\n\t963: 'sigma',\n\t964: 'tau',\n\t965: 'upsilon',\n\t966: 'phi',\n\t967: 'chi',\n\t968: 'psi',\n\t969: 'omega',\n\t977: 'thetasym',\n\t978: 'upsih',\n\t982: 'piv',\n\t8226: 'bull',\n\t8230: 'hellip',\n\t8242: 'prime',\n\t8243: 'Prime',\n\t8254: 'oline',\n\t8260: 'frasl',\n\t8472: 'weierp',\n\t8465: 'image',\n\t8476: 'real',\n\t8482: 'trade',\n\t8501: 'alefsym',\n\t8592: 'larr',\n\t8593: 'uarr',\n\t8594: 'rarr',\n\t8595: 'darr',\n\t8596: 'harr',\n\t8629: 'crarr',\n\t8656: 'lArr',\n\t8657: 'uArr',\n\t8658: 'rArr',\n\t8659: 'dArr',\n\t8660: 'hArr',\n\t8704: 'forall',\n\t8706: 'part',\n\t8707: 'exist',\n\t8709: 'empty',\n\t8711: 'nabla',\n\t8712: 'isin',\n\t8713: 'notin',\n\t8715: 'ni',\n\t8719: 'prod',\n\t8721: 'sum',\n\t8722: 'minus',\n\t8727: 'lowast',\n\t8730: 'radic',\n\t8733: 'prop',\n\t8734: 'infin',\n\t8736: 'ang',\n\t8743: 'and',\n\t8744: 'or',\n\t8745: 'cap',\n\t8746: 'cup',\n\t8747: 'int',\n\t8756: 'there4',\n\t8764: 'sim',\n\t8773: 'cong',\n\t8776: 'asymp',\n\t8800: 'ne',\n\t8801: 'equiv',\n\t8804: 'le',\n\t8805: 'ge',\n\t8834: 'sub',\n\t8835: 'sup',\n\t8836: 'nsub',\n\t8838: 'sube',\n\t8839: 'supe',\n\t8853: 'oplus',\n\t8855: 'otimes',\n\t8869: 'perp',\n\t8901: 'sdot',\n\t8968: 'lceil',\n\t8969: 'rceil',\n\t8970: 'lfloor',\n\t8971: 'rfloor',\n\t9001: 'lang',\n\t9002: 'rang',\n\t9674: 'loz',\n\t9824: 'spades',\n\t9827: 'clubs',\n\t9829: 'hearts',\n\t9830: 'diams',\n\t338: 'OElig',\n\t339: 'oelig',\n\t352: 'Scaron',\n\t353: 'scaron',\n\t376: 'Yuml',\n\t710: 'circ',\n\t732: 'tilde',\n\t8194: 'ensp',\n\t8195: 'emsp',\n\t8201: 'thinsp',\n\t8204: 'zwnj',\n\t8205: 'zwj',\n\t8206: 'lrm',\n\t8207: 'rlm',\n\t8211: 'ndash',\n\t8212: 'mdash',\n\t8216: 'lsquo',\n\t8217: 'rsquo',\n\t8218: 'sbquo',\n\t8220: 'ldquo',\n\t8221: 'rdquo',\n\t8222: 'bdquo',\n\t8224: 'dagger',\n\t8225: 'Dagger',\n\t8240: 'permil',\n\t8249: 'lsaquo',\n\t8250: 'rsaquo',\n\t8364: 'euro'\n};\n\nexport function EscapeHtmlEntities(text: string): string\n{\n\treturn text.replace(/[\\u00A0-\\u2666<>&]/g, (c) =>\n\t{\n\t\treturn `&${escapeHtmlEntityTable[c.charCodeAt(0)] || `#${c.charCodeAt(0)}`};`;\n\t});\n}\n\n/**\n * Syntax highlights a string of code by wrapping parts in HTML spans with classes.\n * @function BeautifyCode\n * @param {string} code The source code string to beautify.\n * @param {string[]} reserved Array of reserved keywords to highlight.\n * @param {boolean} skipCSS If true, suppresses the generation of the <style> block.\n * @returns {string} The HTML string containing the beautified code.\n */\nexport function BeautifyCode(code: string, reserved: string[], skipCSS: boolean)\n{\n\treserved = reserved || [\"abstract\", \"else\", \"instanceof\", \"super\", \"boolean\", \"enum\", \"int\", \"switch\", \"break\", \"export\", \"interface\", \"synchronized\", \"byte\", \"extends\", \"let\", \"this\", \"case\", \"false\", \"long\", \"throw\", \"catch\", \"final\", \"native\", \"throws\", \"char\", \"finally\", \"new\", \"transient\", \"class\", \"float\", \"null\", \"true\", \"const\", \"for\", \"package\", \"try\", \"continue\", \"function\", \"private\", \"typeof\", \"debugger\", \"goto\", \"protected\", \"var\", \"default\", \"if\", \"public\", \"void\", \"delete\", \"implements\", \"return\", \"volatile\", \"do\", \"import\", \"short\", \"while\", \"double\", \"in\", \"static\", \"with\"];\n\n\t// Reserved words\n\tcode = code.replace(/\\b(\\w+)\\b/g, (v) =>\n\t{\n\t\tif (reserved.indexOf(v) != -1) { return `<span class='rsv'>${v}</span>`; }\n\t\treturn v;\n\t});\n\n\t// Numbers\n\tcode = code.replace(/\\b([0-9]+)\\b/g, (v) =>\n\t{\n\t\treturn `<span class='num'>${v}</span>`;\n\t});\n\n\t// Obj.function\n\tcode = code.replace(/(\\w+\\.\\w+)/g, (v) =>\n\t{\n\t\tconst t = v.split(\".\");\n\t\treturn `<span class='obj'>${t[0]}</span>.<span class='prop'>${t[1]}</span>`;\n\t});\n\n\t// Function\n\tcode = code.replace(/(\\w+)\\(/g, (v) =>\n\t{\n\t\treturn `<span class='prop'>${v.substring(0, v.length - 1)}</span>(`;\n\t});\n\n\t// Strings\n\tcode = code.replace(/(\"(\\\\.|[^\"])*\")/g, (v) =>\n\t{\n\t\treturn `<span class='str'>${v}</span>`;\n\t});\n\n\t// Comments\n\tcode = code.replace(/\\/\\*[\\s\\S]*?\\*\\/|([^\\\\:]|^)\\/\\/.*$/gm, (v) =>\n\t{ // /(\\/\\/[a-zA-Z0-9\\?\\!\\(\\)_ ]*)/g\n\t\treturn `<span class='cmnt'>${v.replace(/<[^>]*>/g, \"\")}</span>`;\n\t});\n\n\n\tif (!skipCSS)\n\t{\n\t\tcode = `<style>.obj { color: #79B; } .prop { color: #B97; }\t.str,.num { color: #A79; } .cmnt { color: #798; } .rsv { color: #9AB; } </style>${code}`;\n\t}\n\n\treturn code;\n}\n\n/**\n * Syntax highlights a JSON string or object by wrapping parts in HTML spans.\n * @function BeautifyJSON\n * @param {string | object} code The JSON string or object to beautify.\n * @param {boolean} skipCSS If true, suppresses the generation of the <style> block.\n * @returns {string} The HTML string containing the beautified JSON.\n */\nexport function BeautifyJSON(code: string, skipCSS: boolean)\n{\n\tif (typeof (code) == \"object\")\n\t{ code = JSON.stringify(code); }\n\n\tconst reserved = [\"false\", \"true\", \"null\"];\n\n\t// Reserved words\n\tcode = code.replace(/(\\w+)/g, (v) =>\n\t{\n\t\tif (reserved.indexOf(v) != -1) { return `<span class='rsv'>${v}</span>`; }\n\t\treturn v;\n\t});\n\n\n\t// Numbers\n\tcode = code.replace(/([0-9]+)/g, (v) =>\n\t{\n\t\treturn `<span class='num'>${v}</span>`;\n\t});\n\n\t// Obj.function\n\tcode = code.replace(/(\\w+\\.\\w+)/g, (v) =>\n\t{\n\t\tconst t = v.split(\".\");\n\t\treturn `<span class='obj'>${t[0]}</span>.<span class='prop'>${t[1]}</span>`;\n\t});\n\n\t// Strings\n\tcode = code.replace(/(\"(\\\\.|[^\"])*\")/g, (v) =>\n\t{\n\t\treturn `<span class='str'>${v}</span>`;\n\t});\n\n\t// Comments\n\tcode = code.replace(/(\\/\\/[a-zA-Z0-9?!()_ ]*)/g, (v) =>\n\t{\n\t\treturn `<span class='cmnt'>${v}</span>`;\n\t});\n\n\tif (!skipCSS)\n\t{\n\t\tcode = `<style>.obj { color: #79B; } .prop { color: #B97; }\t.str { color: #A79; } .num { color: #B97; } .cmnt { color: #798; } .rsv { color: #9AB; } </style>${code}`;\n\t}\n\n\treturn code;\n}\n\n/**\n * Converts a Data URI string into a Blob object.\n * @function DataURItoBlob\n * @param {string} dataURI The data URI string (e.g., \"data:image/png;base64,...\").\n * @returns {Blob} The resulting Blob object.\n */\nexport function DataURItoBlob(dataURI: string)\n{\n\tconst pos = dataURI.indexOf(\",\");\n\t// Convert to binary\n\tconst byteString = atob(dataURI.substring(pos + 1));\n\t// Copy from string to array\n\tconst ab = new ArrayBuffer(byteString.length);\n\tconst ia = new Uint8Array(ab);\n\tconst l = byteString.length;\n\tfor (let i = 0; i < l; i++)\n\t{\n\t\tia[i] = byteString.charCodeAt(i);\n\t}\n\n\tlet mime = dataURI.substring(5, pos - 5);\n\tmime = mime.substring(0, mime.length - 7); // Strip \";base64\"\n\treturn new Blob([ab], { type: mime });\n}\n\n/**\n * Converts an RGBA array to a HEXA color string.\n * @function RGBAToHEXA\n * @param {[number, number, number, number]} rgba Array containing r, g, b, a values.\n * @returns {string} The HEXA color string (e.g., \"#RRGGBBAA\").\n */\nexport function RGBAToHEXA(rgba: [number, number, number, number])\n{\n\t// Extract R, G, B, and A values\n\tconst r = rgba[0];\n\tconst g = rgba[1];\n\tconst b = rgba[2];\n\tconst a = rgba[3]; // Alpha value\n\n\t// Convert RGB to HEX\n\tconst toHex = (value: number) =>\n\t{\n\t\tconst hex = value.toString(16);\n\t\treturn hex.length === 1 ? \"0\" + hex : hex;\n\t};\n\n\t// Convert alpha to HEX (multiply by 255 and convert to hex)\n\tconst alphaHex = Math.round(a).toString(16);\n\tconst paddedAlphaHex = alphaHex.length === 1 ? \"0\" + alphaHex : alphaHex;\n\n\t// Combine to form the HEX color with alpha\n\treturn `#${toHex(r)}${toHex(g)}${toHex(b)}${paddedAlphaHex}`;\n}\n\n/**\n * Convert sizes in any format to a valid CSS format (number to string, negative number to calc( 100% - number px )\n * @function SizeToCSS\n * @param {string|Number} value\n * @return {string|undefined} valid css size string\n *\n */\nexport function SizeToCSS(value?: number | string): string | undefined\n{\n\tif (value === undefined || value === null) { return undefined; }\n\tif (value.constructor === String) { return value as string; }\n\tif (typeof (value) == 'number' && value >= 0) { return (value as number | 0) + \"px\"; }\n\treturn \"calc( 100% - \" + Math.abs(value as number | 0) + \"px )\";\n}\n\n/**\n * Triggers a simple event in an object (similar to jQuery.trigger)\n * @function Trigger\n * @param {unknown} element could be an HTMLEntity or a regular object\n * @param {string} eventName the type of the event\n * @param {unknown} params it will be stored in e.detail\n */\nexport function Trigger(element: unknown, eventName: string, params?: unknown): CustomEvent<unknown>\n{\n\tconst evt = new CustomEvent(eventName, { detail: params });\n\n\tif (!element || typeof (element) !== \"object\") { return evt; }\n\n\tif (\"dispatchEvent\" in element)\n\t{\n\t\t(element as DispatchableElement).dispatchEvent(evt);\n\t}\n\telse if (\"__events\" in element)\n\t{\n\t\t(element as TriggerableElement).__events.dispatchEvent(evt);\n\t}\n\n\t// Else nothing seems binded here so nothing to do\n\treturn evt;\n}\n\n// -- Moved from core.ts --\n\n/**\n * Interface for elements that can trigger events via a hidden __events property.\n */\nexport interface TriggerableElement\n{\n\t/** Hidden event target for handling custom events. */\n\t__events: EventTarget;\n}\n\n/**\n * Interface for elements that can dispatch events.\n */\nexport interface DispatchableElement\n{\n\t/** Dispatches a custom event. */\n\tdispatchEvent: (event: CustomEvent<unknown>) => boolean;\n}\n\n/**\n * Interface for objects that hold content within an HTMLDivElement.\n */\nexport interface ContentHolder\n{\n\t/** The HTML container for the content. */\n\tcontent: HTMLDivElement;\n}\n\n/**\n * Interface mixing LiteGUIObject and HTMLElement, with an add function.\n */\nexport interface EmptyLiteGUIObject extends LiteGUIObject, HTMLElement\n{\n\t/** Adds a child element or widget. */\n\tadd: (v: HTMLDivElement | LiteGUIObject) => void;\n}\n\n/**\n * Interface mixing LiteGUIObject and HTMLButtonElement.\n */\nexport interface EmptyLiteGUIButton extends LiteGUIObject, HTMLButtonElement\n{\n}\n\n/**\n * Interface for HTMLSpanElements that reference a widget.\n */\nexport interface TriggerableSpan extends HTMLSpanElement\n{\n\t/** Reference to the widget associated with this span. */\n\twidget: object;\n}\n\n/**\n * Interface for script elements with additional metadata used by the core.\n */\nexport interface CoreScriptElement extends HTMLScriptElement\n{\n\t/** The original source URL of the script. */\n\toriginalSrc: string;\n\t/** The numeric index or identifier of the script. */\n\tnum: number;\n}\n\n/**\n * Interface extending the standard Document to include parentWindow reference.\n */\nexport interface CoreDocument extends Document\n{\n\t/** Reference to the parent window if applicable. */\n\tparentWindow?: Window;\n}\n\n/**\n * Remove from the interface, it is is an HTML element it is removed from its parent, if it is a widget the same.\n * @function RemoveElement\n * @param {string | LiteGUIObject | HTMLElement | HTMLElement[] | NodeListOf<HTMLElement>} element it also supports HTMLentity, selector string or Array of elements\n */\nexport function RemoveElement(element: string | LiteGUIObject | HTMLElement | HTMLElement[] | NodeListOf<HTMLElement>): void\n{\n\tif (!element) { return; }\n\n\tif (typeof element === 'string') // Selector\n\t{\n\t\tconst elements = document.querySelectorAll(element);\n\t\tfor (let i = 0; i < elements.length; ++i)\n\t\t{\n\t\t\tconst element = elements[i];\n\t\t\tif (element && element.parentNode)\n\t\t\t{\n\t\t\t\telement.parentNode.removeChild(element);\n\t\t\t}\n\t\t}\n\t}\n\telse if (Array.isArray(element) || element instanceof NodeList)\n\t{\n\t\tfor (const i in element)\n\t\t{\n\t\t\tRemoveElement(element[i]);\n\t\t}\n\t}\n\telse if (\"root\" in element) // LiteGUI widget\n\t{\n\t\telement.root?.parentNode?.removeChild(element.root);\n\t}\n\telse if (\"parentNode\" in element) // Regular HTML entity\n\t{\n\t\telement.parentNode?.removeChild(element);\n\t}\n}\n\n/**\n * Binds an event in an object (similar to jQuery.bind)\n * If the element is not an HTML entity a new one is created, attached to the object (as non-enumerable, called __events) and used\n * @function Bind\n * @param {string | Object | Object[] | NodeListOf<HTMLElement>} element could be an HTMLEntity, a regular object, a query string or a regular Array of entities\n * @param {String} event the string defining the event\n * @param {EventListenerOrEventListenerObject} callback where to call\n */\nexport function Bind(element: string | object | object[] | NodeListOf<HTMLElement>, event: string, callback: EventListenerOrEventListenerObject): void\n{\n\tif (!element)\n\t{\n\t\tthrow (\"Cannot bind to null\");\n\t}\n\tif (!event)\n\t{\n\t\tthrow (\"Event bind missing\");\n\t}\n\tif (!callback)\n\t{\n\t\tthrow (\"Bind callback missing\");\n\t}\n\n\tif (typeof element === \"string\")\n\t{\n\t\telement = document.querySelectorAll(element);\n\t}\n\n\tfunction inner(element: HTMLElement | TriggerableElement)\n\t{\n\t\tif (!element) { return; }\n\n\t\tif (\"addEventListener\" in element)\n\t\t{\n\t\t\telement.addEventListener(event, callback);\n\t\t}\n\t\telse if (\"__events\" in element)\n\t\t{\n\t\t\telement.__events.addEventListener(event, callback);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tconst triggerable = element as TriggerableElement;\n\t\t\t// Create a dummy HTMLentity so we can use it to bind HTML events\n\t\t\tconst dummy = document.createElement(\"span\") as TriggerableSpan;\n\t\t\tdummy.widget = element; // Double link\n\t\t\tObject.defineProperty(triggerable, \"__events\", {\n\t\t\t\tenumerable: false,\n\t\t\t\tconfigurable: false,\n\t\t\t\twritable: false,\n\t\t\t\tvalue: dummy\n\t\t\t});\n\t\t\ttriggerable.__events.addEventListener(event, callback);\n\t\t}\n\t}\n\n\tif (Array.isArray(element) || element.constructor === NodeList)\n\t{\n\t\tfor (let i = 0; i < element.length; ++i)\n\t\t{\n\t\t\tinner(element[i]);\n\t\t}\n\t}\n\telse\n\t{\n\t\tinner(element as TriggerableElement);\n\t}\n}\n\n/**\n * Unbinds an event in an object (similar to jQuery.unbind)\n * @function Unbind\n * @param {Object} element could be an HTMLEntity or a regular object\n * @param {String} event the string defining the event\n * @param {EventListenerOrEventListenerObject} callback where to call\n */\nexport function Unbind(element: HTMLElement | TriggerableElement, event: string, callback: EventListenerOrEventListenerObject): void\n{\n\tif (\"removeEventListener\" in element)\n\t{\n\t\telement.removeEventListener(event, callback);\n\t}\n\telse if (\"__events\" in element)\n\t{\n\t\telement.__events.removeEventListener(event, callback);\n\t}\n}\n\n/**\n * Removes a class\n * @function RemoveClass\n * @param {HTMLElement} elem\n * @param {String} selector\n * @param {String} className\n */\nexport function RemoveClass(elem: HTMLElement, selector: string, className?: string): void\n{\n\tif (!className)\n\t{\n\t\tclassName = selector;\n\t\tselector = \".\" + selector;\n\t}\n\tconst list = (elem || document).querySelectorAll(selector);\n\tfor (let i = 0; i < list.length; ++i)\n\t{ list[i].classList.remove(className); }\n}\n\n/**\n * Wrapper of document.getElementById\n * @function GetById\n * @param {String} id\n * return {HTMLEntity}\n *\n */\nexport function GetById(id: string): HTMLElement | null\n{\n\treturn document.getElementById(id);\n}\n\n/**\n * Test if the cursor is inside an element\n * @function IsCursorOverElement\n * @param {MouseEvent} event\n * @param {HTMLElement} element\n *\n */\nexport function IsCursorOverElement(event: MouseEvent, element: HTMLElement): boolean\n{\n\tconst left = event.pageX;\n\tconst top = event.pageY;\n\tconst rect = element.getBoundingClientRect();\n\tif (!rect) { return false; }\n\tif (top > rect.top && top < (rect.top + rect.height) &&\n\t\tleft > rect.left && left < (rect.left + rect.width))\n\t{\n\t\treturn true;\n\t}\n\treturn false;\n}\n\n/**\n * Returns the bounding client rect of an element.\n * @function getRect\n * @param {HTMLElement} element The element to measure.\n * @returns {DOMRect} The bounding rectangle.\n */\nexport function GetRect(element: HTMLElement): DOMRect\n{\n\treturn element.getBoundingClientRect();\n}\n\n/**\n * Copy a string to the clipboard (it needs to be invoqued from a click event)\n * @function ToClipboard\n * @param {String | Record<string, unknown>} data\n */\nexport function ToClipboard(data: string | Record<string, unknown>): void\n{\n\tif (typeof data !== \"string\")\n\t{\n\t\tdata = JSON.stringify(data);\n\t}\n\n\ttry\n\t{\n\t\tconst copyPromise = navigator.clipboard.writeText(data);\n\t\tcopyPromise.then(() =>\n\t\t{\n\t\t\tconsole.log(\"Saved to clipboard\");\n\t\t}).catch((err) =>\n\t\t{\n\t\t\tconsole.warn(\"Problem saving to clipboard\", err);\n\t\t});\n\t}\n\tcatch (err)\n\t{\n\t\tconsole.warn('Oops, unable to copy using the true clipboard', err);\n\t}\n}\n\n/**\n * Insert some CSS code to the website\n * @function AddCSS\n * @param {String|CSSStyleDeclaration} code it could be a string with CSS rules, or an object with the style syntax.\n *\n */\nexport function AddCSS(code: string | CSSStyleDeclaration)\n{\n\tif (!code) { return; }\n\n\tif (typeof code === \"string\")\n\t{\n\t\tconst style = document.createElement('style') as HTMLStyleElement;\n\t\tstyle.innerHTML = code;\n\t\tdocument.getElementsByTagName('head')[0].appendChild(style);\n\t\treturn;\n\t}\n\n\tfor (const i in code)\n\t{\n\t\tdocument.body.style[i] = code[i];\n\t}\n\n}\n\n/**\n * Requires a new CSS\n * @function RequireCSS\n * @param {String} url string with url or an array with several urls\n * @param {Function} onComplete\n *\n */\nexport function RequireCSS(url: string | Array<string>, onComplete: (ev: Event) => void)\n{\n\tif (typeof (url) == \"string\")\n\t{ url = [url]; }\n\n\twhile (url.length)\n\t{\n\t\tconst link = document.createElement('link') as HTMLLinkElement;\n\t\t// Link.id = cssId;\n\t\tlink.rel = 'stylesheet';\n\t\tlink.type = 'text/css';\n\t\tlink.href = url.shift(/* 1 */) as string;\n\t\tlink.media = 'all';\n\t\tconst head = document.getElementsByTagName('head')[0];\n\t\thead.appendChild(link);\n\t\tif (url.length == 0)\n\t\t{\n\t\t\tlink.onload = onComplete;\n\t\t}\n\t}\n}\n\nexport interface RequestOptions\n{\n\turl: string,\n\tdataType: string,\n\tmimeType?: string,\n\tdata?: Array<string>,\n\tnocache?: boolean,\n\terror?: (err: string | ProgressEvent<EventTarget>) => void,\n\tsuccess?: (data: unknown, xhr: XMLHttpRequest) => void\n}\n\n/**\n * Request file from url (it could be a binary, text, etc.). If you want a simplied version use\n * @function Request\n * @param {RequestOptions} request object with all the parameters like data (for sending forms), dataType, success, error\n */\nexport function Request(request: RequestOptions)\n{\n\tlet dataType = request.dataType ?? \"text\";\n\tif (dataType == \"json\") // Parse it locally\n\t{\n\t\tdataType = \"text\";\n\t}\n\telse if (dataType == \"xml\") // Parse it locally\n\t{\n\t\tdataType = \"text\";\n\t}\n\telse if (dataType == \"binary\")\n\t{\n\t\t// Request.mimeType = \"text/plain; charset=x-user-defined\";\n\t\tdataType = \"arraybuffer\";\n\t\trequest.mimeType = \"application/octet-stream\";\n\t}\n\n\t// Regular case, use AJAX call\n\tconst xhr = new XMLHttpRequest();\n\txhr.open(request.data ? 'POST' : 'GET', request.url, true);\n\tif (dataType)\n\t{\n\t\txhr.responseType = dataType as XMLHttpRequestResponseType;\n\t}\n\tif (request.mimeType)\n\t{\n\t\txhr.overrideMimeType(request.mimeType);\n\t}\n\tif (request.nocache)\n\t{\n\t\txhr.setRequestHeader('Cache-Control', 'no-cache');\n\t}\n\n\txhr.onload = function ()\n\t{\n\t\tlet response = this.response;\n\t\tif (this.status != 200)\n\t\t{\n\t\t\tconst err = \"Error \" + this.status;\n\t\t\tif (request.error)\n\t\t\t{\n\t\t\t\trequest.error(err);\n\t\t\t}\n\t\t\tTrigger(xhr, \"fail\", this.status);\n\t\t\treturn;\n\t\t}\n\n\t\tif (request.dataType == \"json\") // Chrome doesnt support json format\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tresponse = JSON.parse(response);\n\t\t\t}\n\t\t\tcatch (err)\n\t\t\t{\n\t\t\t\tif (request.error)\n\t\t\t\t{\n\t\t\t\t\trequest.error(err as string);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (request.dataType == \"xml\")\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tconst xmlparser = new DOMParser();\n\t\t\t\tresponse = xmlparser.parseFromString(response, \"text/xml\");\n\t\t\t}\n\t\t\tcatch (err)\n\t\t\t{\n\t\t\t\tif (request.error)\n\t\t\t\t{\n\t\t\t\t\trequest.error(err as string);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (request.success)\n\t\t{\n\t\t\trequest.success.call(this, response, this);\n\t\t}\n\t};\n\txhr.onerror = function (err)\n\t{\n\t\tif (request.error) { request.error(err); }\n\t};\n\n\tconst data = new FormData();\n\tif (request.data)\n\t{\n\t\tfor (const i in request.data)\n\t\t{\n\t\t\tdata.append(i, request.data[i]);\n\t\t}\n\t}\n\n\txhr.send(data);\n\treturn xhr;\n}\n\n/**\n * Request file from url\n * @function RequestText\n * @param {String} url\n * @param {(data: string, xhr: XMLHttpRequest) => void} onComplete\n * @param {(err: string | ProgressEvent<EventTarget>) => void} onError\n *\n */\nexport function RequestText(url: string,\n\tonComplete: (data: unknown | string, xhr: XMLHttpRequest) => void,\n\tonError: (err: string | ProgressEvent<EventTarget>) => void)\n{\n\treturn Request({ url: url, dataType: \"text\", success: onComplete, error: onError });\n}\n\n/**\n * Request file from url\n * @function RequestJSON\n * @param {String} url\n * @param {(data: object, xhr: XMLHttpRequest) => void} onComplete\n * @param {(err: string | ProgressEvent<EventTarget>) => void} onError\n *\n */\nexport function RequestJSON(url: string,\n\tonComplete: (data: object | unknown, xhr: XMLHttpRequest) => void,\n\tonError: (err: string | ProgressEvent<EventTarget>) => void)\n{\n\treturn Request({ url: url, dataType: \"json\", success: onComplete, error: onError });\n}\n\n/**\n * Request binary file from url\n * @function RequestBinary\n * @param {String} url\n * @param {(data: ArrayBuffer | unknown, xhr: XMLHttpRequest) => void} onComplete\n * @param {(err: string | ProgressEvent<EventTarget>) => void} onError\n *\n */\nexport function RequestBinary(url: string,\n\tonComplete: (data: ArrayBuffer | unknown, xhr: XMLHttpRequest) => void,\n\tonError: (err: string | ProgressEvent<EventTarget>) => void)\n{\n\treturn Request({ url: url, dataType: \"binary\", success: onComplete, error: onError });\n}\n\n\n/**\n * Request script and inserts it in the DOM\n * @function RequireScript\n * @param {String|Array} url the url of the script or an array containing several urls\n * @param {(scripts: Array<CoreScriptElement>) => void} onComplete\n * @param {(err: string | Event, src: string, num: number) => void} onError\n * @param {(src: string, num: number) => void} onProgress (if several files are required, onProgress is called after every file is added to the DOM)\n *\n */\nexport function RequireScript(url: string | Array<string>,\n\tonComplete: (scripts: Array<CoreScriptElement>) => void,\n\tonError: (err: string | Event, src: string, num: number) => void,\n\tonProgress: (src: string, num: number) => void,\n\tversion: number)\n{\n\tif (!url) { throw (\"invalid URL\"); }\n\n\tif (typeof url === \"string\") { url = [url]; }\n\n\tlet total = url.length;\n\tconst loadedScripts: Array<CoreScriptElement> = [];\n\tconst onload = function (script: CoreScriptElement)\n\t{\n\t\ttotal--;\n\t\tloadedScripts.push(script);\n\t\tif (total)\n\t\t{\n\t\t\tif (onProgress) { onProgress(script.originalSrc, script.num); }\n\t\t}\n\t\telse if (onComplete)\n\t\t{\n\t\t\tonComplete(loadedScripts);\n\t\t}\n\t};\n\n\tfor (const i in url)\n\t{\n\t\tconst script = document.createElement('script') as CoreScriptElement;\n\t\tscript.num = parseInt(i);\n\t\tscript.type = 'text/javascript';\n\t\tscript.src = url[script.num] + (version ? \"?version=\" + version : \"\");\n\t\tscript.originalSrc = url[script.num];\n\t\tscript.async = false;\n\t\tscript.onload = onload.bind(undefined, script);\n\t\tif (onError)\n\t\t{\n\t\t\tscript.onerror = function (err: string | Event)\n\t\t\t{\n\t\t\t\tonError(err, this.originalSrc, this.num);\n\t\t\t};\n\t\t}\n\t\tdocument.getElementsByTagName('head')[0].appendChild(script);\n\t}\n}\n\n/**\n * Shows a generic message dialog.\n * @function ShowMessage\n * @param {string} content The message content.\n * @param {DialogOptions} [options] Configuration options.\n * @returns {Dialog} The created Dialog instance.\n */\nexport function ShowMessage(content: string, options?: DialogOptions)\n{\n\toptions = options ?? {};\n\n\toptions.title = options.title ?? \"Attention\";\n\toptions.content = content;\n\toptions.close = 'fade';\n\tconst dialog = new Dialog(options);\n\tif (options.closable) { dialog.addButton(\"Close\", { close: true }); }\n\n\tdialog.makeModal();\n\treturn dialog;\n}\n\n/**\n * Shows a dialog with a message\n * @function PopupDialog\n * @param {String} content\n * @param {DialogOptions} [options]\n * @returns {Dialog}\n */\nexport function PopupDialog(content: string, options?: DialogOptions): Dialog\n{\n\toptions = options ?? {};\n\n\toptions.minHeight = 140;\n\tif (typeof content == \"string\") { content = `<p>${content}</p>`; }\n\n\toptions.content = content;\n\toptions.close = 'fade';\n\n\tconst dialog = new Dialog(options);\n\tif (options.closable) { dialog.addButton(\"Close\", { close: true }); }\n\tdialog.show();\n\treturn dialog;\n}\n\n\n/**\n * Options for configuring message dialogs (alert, confirm, prompt).\n */\nexport interface MessageOptions\n{\n\t/** Whether to show a textarea for input. */\n\ttextarea?: boolean;\n\t/** Initial value for input fields. */\n\tvalue?: string;\n\t/** Custom CSS class name for the dialog. */\n\tclassName?: string;\n\t/** Title of the dialog. */\n\ttitle?: string;\n\t/** Width of the dialog in pixels. */\n\twidth?: number;\n\t/** Height of the dialog in pixels. */\n\theight?: number;\n\t/** HTML content to display in the dialog. */\n\tcontent?: string;\n\t/** If true, the dialog cannot be closed by the user. */\n\tnoclose?: boolean;\n}\n\n/**\n * Shows an alert dialog with a message\n * @function AlertDialog\n * @param {String} content\n * @param {MessageOptions} [options]\n * @returns {Dialog}\n */\nexport function AlertDialog(content: string, options?: MessageOptions): Dialog\n{\n\toptions = options ?? {};\n\n\toptions.className = \"alert\";\n\toptions.title = options.title ?? \"Alert\";\n\toptions.width = options.width ?? 280;\n\toptions.height = options.height ?? 140;\n\tif (typeof content == \"string\") { content = `<p>${content}</p>`; }\n\n\tRemoveElement(\".litepanel.alert\"); // Kill other panels\n\treturn ShowMessage(content, options);\n}\n\n/**\n * Shows a confirm dialog with a message\n * @function ConfirmDialog\n * @param {String} content\n * @param {(value: boolean) => void} callback\n * @param {MessageOptions} [options]\n * @returns {Dialog}\n */\nexport function ConfirmDialog(content: string,\n\tcallback: (value: boolean) => void,\n\toptions?: MessageOptions): Dialog\n{\n\toptions = options ?? {};\n\toptions.className = \"alert\";\n\toptions.title = options.title ?? \"Confirm\";\n\toptions.width = options.width ?? 280;\n\tif (typeof (content) == \"string\")\n\t{\n\t\tcontent = `<p>${content}</p>`;\n\t}\n\n\tcontent += \"<button class='litebutton' data-value='yes' style='width:45%; margin-left: 10px'>Yes</button><button class='litebutton' data-value='no' style='width:45%'>No</button>\";\n\toptions.noclose = true;\n\n\tconst dialog = ShowMessage(content, options);\n\tdialog.content.style.paddingBottom = \"10px\";\n\tconst buttons = dialog.content.querySelectorAll(\"button\");\n\n\tconst _onClick = (v: PointerEvent) =>\n\t{\n\t\tconst button = v.target as HTMLButtonElement;\n\t\tconst value = button.dataset.value == \"yes\";\n\t\tdialog.close(); // Close before callback\n\t\tif (callback)\n\t\t{\n\t\t\tcallback(value);\n\t\t}\n\t};\n\tfor (let i = 0; i < buttons.length; i++)\n\t{\n\t\tconst button = buttons[i];\n\t\tbutton.addEventListener(\"click\", _onClick);\n\t}\n\tbuttons[0].focus();\n\n\treturn dialog;\n}\n\n/**\n * Shows a prompt dialog with a message\n * @function PromptDialog\n * @param {String} content\n * @param {(value?: string) => void} callback\n * @param {MessageOptions} [options]\n * @returns {Dialog}\n */\nexport function PromptDialog(content: string,\n\tcallback: (value?: string) => void,\n\toptions?: MessageOptions): Dialog\n{\n\toptions = options ?? {};\n\toptions.className = \"alert\";\n\toptions.title = options.title ?? \"Prompt\";\n\toptions.width = options.width ?? 280;\n\n\tif (typeof (content) == \"string\")\n\t{\n\t\tcontent = `<p>${content}</p>`;\n\t}\n\n\tconst value = options.value ?? \"\";\n\tlet textinput = `<input type='text' value='${value}'/>`;\n\tif (options.textarea)\n\t{\n\t\ttextinput = `<textarea class='textfield' style='width:95%'>${value}</textarea>`;\n\t}\n\n\tcontent += `<p>${textinput}</p><button class='litebutton' data-value='accept' style='width:45%; margin-left: 10px; margin-bottom: 10px'>Accept</button><button class='litebutton' data-value='cancel' style='width:45%'>Cancel</button>`;\n\toptions.noclose = true;\n\tconst dialog = ShowMessage(content, options);\n\n\tconst buttons = dialog.content.querySelectorAll(\"button\");\n\tconst input = dialog.content.querySelector(\"input,textarea\") as HTMLInputElement;\n\n\tconst _onEvent = function (e: Event)\n\t{\n\t\tconst button = e.target as HTMLButtonElement;\n\t\tlet value: string | undefined = input.value;\n\t\tif (button && button.dataset && button.dataset.value == \"cancel\")\n\t\t{\n\t\t\tvalue = undefined;\n\t\t}\n\t\tdialog.close(); // Close before callback\n\t\tif (callback) { callback(value); }\n\t};\n\n\tfor (let i = 0; i < buttons.length; i++)\n\t{\n\t\tbuttons[i].addEventListener(\"click\", _onEvent);\n\t}\n\n\tconst _onKeyDown = function (e: KeyboardEvent)\n\t{\n\t\tif (e.key == \"Enter\")\n\t\t{\n\t\t\t_onEvent(e);\n\t\t\treturn false;\n\t\t}\n\t\tif (e.key == \"Escape\") { dialog.close(); }\n\t\treturn;\n\t};\n\n\tinput?.addEventListener(\"keydown\", _onKeyDown, true);\n\n\tinput?.focus();\n\treturn dialog;\n}\n\n\n/**\n * Shows a choice dialog with a message\n * @function ChoiceDialog\n * @param {String} content\n * @param {Array<string|ContentHolder>} choices\n * @param {(value: string | ContentHolder) => void} callback\n * @param {MessageOptions} [options]\n * @returns {Dialog}\n */\nexport function ChoiceDialog(content: string, choices: Array<string | ContentHolder>, callback: (value: string | ContentHolder) => void, options?: MessageOptions): Dialog\n{\n\toptions = options ?? {};\n\toptions.className = \"alert\";\n\toptions.title = options.title ?? \"Select one option\";\n\toptions.width = options.width ?? 280;\n\t// Options.height = 100;\n\tif (typeof (content) == \"string\")\n\t{\n\t\tcontent = `<p>${content}</p>`;\n\t}\n\n\tfor (const i in choices)\n\t{\n\t\tconst choice = typeof choices[i] === \"string\" ? choices[i] : choices[i].content;\n\t\tcontent += `<button class='litebutton' data-value='${i}' style='width:45%; margin-left: 10px'>${choice}</button>`;\n\t}\n\toptions.noclose = true;\n\n\tconst dialog = ShowMessage(content, options);\n\tdialog.content.style.paddingBottom = \"10px\";\n\tconst buttons = dialog.content.querySelectorAll(\"button\");\n\n\tconst inner = (v: PointerEvent) =>\n\t{\n\t\tconst button = v.target as HTMLButtonElement;\n\t\tconst value = choices[button.dataset.value as keyof object];\n\t\tdialog.close(); // Close before callback\n\t\tif (callback) { callback(value); }\n\t};\n\tfor (let i = 0; i < buttons.length; i++)\n\t{\n\t\tbuttons[i].onclick = inner;\n\t}\n\n\treturn dialog;\n}\n\n\n// Old version, it loads one by one, so it is slower\n/**\n * Loads scripts sequentially from a list of URLs.\n * @function RequireScriptSerial\n * @param {string | string[]} url Single URL or array of URLs to load.\n * @param {(loadedScripts: GlobalEventHandlers[]) => void} onComplete Callback when all scripts are loaded.\n * @param {(url: string, remaining: number) => void} onProgress Callback for progress updates.\n */\nexport function RequireScriptSerial(url: string | string[],\n\tonComplete: (loadedScripts: GlobalEventHandlers[]) => void,\n\tonProgress: (url: string, remaining: number) => void)\n{\n\tif (typeof (url) == \"string\")\n\t{\n\t\turl = [url];\n\t}\n\n\tconst loadedScripts: GlobalEventHandlers[] = [];\n\tfunction addScript()\n\t{\n\t\tconst script = document.createElement('script');\n\t\tscript.type = 'text/javascript';\n\t\tscript.src = (url as string[]).shift() as string;\n\t\tscript.onload = function ()\n\t\t{\n\t\t\tif (url.length)\n\t\t\t{\n\t\t\t\tif (onProgress)\n\t\t\t\t{\n\t\t\t\t\tonProgress(url[0], url.length);\n\t\t\t\t}\n\n\t\t\t\taddScript();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tloadedScripts.push(this);\n\n\t\t\tif (onComplete)\n\t\t\t{\n\t\t\t\tonComplete(loadedScripts);\n\t\t\t}\n\t\t};\n\t\tdocument.getElementsByTagName('head')[0].appendChild(script);\n\t}\n\n\taddScript();\n}\n\n/**\n * Creates an HTML element\n * @function CreateElement\n * @param {String} tag\n * @param {String} classID string containing id and classes, example: \"myid .someclass .anotherclass\"\n * @param {String} content\n * @param {string | CSSStyleDeclaration} [style]\n * @param {EventListenerOrEventListenerObject[]} [events]\n */\nexport function CreateElement(tag: string,\n\tclassID: string,\n\tcontent: string,\n\tstyle?: string | CSSStyleDeclaration,\n\tevents?: EventListenerOrEventListenerObject[])\n{\n\tconst elem = document.createElement(tag) as EmptyLiteGUIObject;\n\tif (classID)\n\t{\n\t\tconst t = classID.split(\" \");\n\t\tfor (let i = 0; i < t.length; i++)\n\t\t{\n\t\t\tif (t[i][0] == \".\")\n\t\t\t{\n\t\t\t\telem.classList.add(t[i].substring(1));\n\t\t\t}\n\t\t\telse if (t[i][0] == \"#\")\n\t\t\t{\n\t\t\t\telem.id = t[i].substring(1);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\telem.id = t[i];\n\t\t\t}\n\t\t}\n\t}\n\telem.root = elem;\n\n\tif (content)\n\t{\n\t\telem.innerHTML = content;\n\t}\n\telem.add = function (v: HTMLDivElement | LiteGUIObject)\n\t{\n\t\tthis.appendChild(\"root\" in v ? v.root : v);\n\t};\n\n\tif (style)\n\t{\n\t\tif (typeof style === \"string\")\n\t\t{\n\t\t\telem.setAttribute(\"style\", style);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfor (const i in style)\n\t\t\t{\n\t\t\t\telem.style[i] = style[i];\n\t\t\t}\n\t\t}\n\t}\n\n\tif (events)\n\t{\n\t\tfor (const i in events)\n\t\t{\n\t\t\telem.addEventListener(i, events[i]);\n\t\t}\n\t}\n\treturn elem;\n}\n\n/**\n * Useful to create elements from a text like '<div><span class=\"title\"></span></div>' and an object like { \".title\":\"mytitle\" }\n * @function CreateListItem\n * @param {String} code\n * @param {Record<string, string>} values it will use innerText in the elements that matches that selector\n * @param {CSSStyleDeclaration} style\n * @return {HTMLElement}\n *\n */\nexport function CreateListItem(code: string,\n\tvalues: Record<string, string>,\n\tstyle?: Partial<CSSStyleDeclaration> | Record<string, string>)\n{\n\tlet elem: HTMLSpanElement = document.createElement(\"span\");\n\telem.innerHTML = code;\n\tconst first = elem.childNodes[0];\n\n\tif (!first) { throw (\"Error creating list item\"); }\n\n\telem = first as HTMLElement;\n\n\tif (values)\n\t{\n\t\tfor (const i in values)\n\t\t{\n\t\t\tconst subelem = elem.querySelector(i) as HTMLElement;\n\t\t\tif (subelem) { subelem.innerText = values[i]; }\n\t\t}\n\t}\n\n\tif (style)\n\t{\n\t\tfor (const i in style)\n\t\t{\n\t\t\tconst value = (style as Record<string, unknown>)[i];\n\t\t\tif (typeof value === \"string\")\n\t\t\t{\n\t\t\t\t(elem.style as unknown as Record<string, string>)[i] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn elem;\n}\n\n/**\n * Creates a button element\n * @function CreateButton\n * @param {String} classID ID or class\n * @param {String} content\n * @param {(ev: PointerEvent) => void} callback when the button is pressed\n * @param {CSSStyleDeclaration|String} style\n *\n */\nexport function CreateButton(classID: string, content: string,\n\tcallback: (ev: PointerEvent) => void,\n\tstyle: CSSStyleDeclaration | string)\n{\n\tconst elem = document.createElement(\"button\") as EmptyLiteGUIButton;\n\telem.className = \"litegui litebutton button\";\n\tif (classID)\n\t{\n\t\tconst t = classID.split(\" \");\n\t\tfor (let i = 0; i < t.length; i++)\n\t\t{\n\t\t\tif (t[i][0] == \".\")\n\t\t\t{\n\t\t\t\telem.classList.add(t[i].substring(1));\n\t\t\t}\n\t\t\telse if (t[i][0] == \"#\")\n\t\t\t{\n\t\t\t\telem.id = t[i].substring(1);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\telem.id = t[i];\n\t\t\t}\n\t\t}\n\t}\n\n\telem.root = elem;\n\tif (content !== undefined)\n\t{\n\t\telem.innerHTML = content;\n\t}\n\n\tif (callback)\n\t{\n\t\telem.onclick = callback;\n\t}\n\n\tif (style)\n\t{\n\t\tif (typeof style === \"string\")\n\t\t{\n\t\t\telem.setAttribute(\"style\", style);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfor (const i in style)\n\t\t\t{\n\t\t\t\telem.style[i] = style[i];\n\t\t\t}\n\t\t}\n\t}\n\treturn elem;\n}\n\n/**\n * Retrieves all parent elements of the given element up to the document root.\n * @function GetParents\n * @param {HTMLElement} element The starting element.\n * @returns {HTMLElement[]} Array of parent elements.\n */\nexport function GetParents(element: HTMLElement): Array<HTMLElement>\n{\n\tconst elements = [];\n\tlet curElement = element.parentElement;\n\twhile (curElement !== null)\n\t{\n\t\tif (element.nodeType !== Node.ELEMENT_NODE)\n\t\t{\n\t\t\tcontinue;\n\t\t}\n\t\telements.push(element);\n\t\tcurElement = curElement.parentElement;\n\t}\n\treturn elements;\n}\n\n/**\n * Opens a new window with copied styles and optional scripts.\n * @function NewWindow\n * @param {string} title syntax title for the new window.\n * @param {number} width Width of the window.\n * @param {number} height Height of the window.\n * @param {{ scripts?: boolean, content?: string }} [options] Configuration object.\n * @param {boolean} [options.scripts] Whether to copy scripts to the new window.\n * @param {string} [options.content] HTML content to inject into the new window.\n * @returns {Window} The newly created window object.\n */\nexport function NewWindow(title: string, width: number, height: number,\n\toptions?: { scripts?: boolean, content?: string }): Window\n{\n\toptions = options ?? {};\n\tconst newWindow = window.open(\"\", \"\", `width=${width}, height=${height}, location=no, status=no, menubar=no, titlebar=no, fullscreen=yes`) as Window;\n\tnewWindow.document.writeln(`<html><head><title>${title}</title>`);\n\n\t// Transfer style\n\tconst styles = document.querySelectorAll(\"link[rel='stylesheet'],style\");\n\tfor (let i = 0; i < styles.length; i++)\n\t{\n\t\tnewWindow.document.writeln(styles[i].outerHTML);\n\t}\n\n\t// Transfer scripts (optional because it can produce some errors)\n\tif (options.scripts)\n\t{\n\t\tconst scripts = document.querySelectorAll(\"script\");\n\t\tfor (let i = 0; i < scripts.length; i++)\n\t\t{\n\t\t\tif (scripts[i].src) // Avoid inline scripts, otherwise a cloned website would be created\n\t\t\t{\n\t\t\t\tnewWindow.document.writeln(scripts[i].outerHTML);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst content = options.content ?? \"\";\n\tnewWindow.document.writeln(`</head><body>${content}</body></html>`);\n\tnewWindow.document.close();\n\treturn newWindow;\n}\n\n/**\n * Triggers a download of the resource at the specified URL.\n * @function DownloadURL\n * @param {string} url The URL of the resource to download.\n * @param {string} filename The name to save the file as.\n */\nexport function DownloadURL(url: string, filename: string)\n{\n\tconst link = document.createElement('a');\n\tlink.href = url;\n\tlink.download = filename;\n\tdocument.body.appendChild(link);\n\tlink.click();\n\tdocument.body.removeChild(link);\n}\n\n/**\n * Triggers a download of a File or Blob object.\n * @function DownloadFile\n * @param {string} filename The name to save the file as.\n * @param {File | Blob} data The file data.\n * @param {string} dataType MIME type of the data if not specified in the Blob.\n */\nexport function DownloadFile(filename: string, data: File | Blob, dataType: string)\n{\n\tif (!data)\n\t{\n\t\tconsole.warn(\"No file provided to download\");\n\t\treturn;\n\t}\n\n\tif (!dataType)\n\t{\n\t\tif (data.constructor === String)\n\t\t{ dataType = 'text/plain'; }\n\t\telse\n\t\t{ dataType = 'application/octet-stream'; }\n\t}\n\n\tlet file = null;\n\tif (!(data instanceof File) && !(data instanceof Blob))\n\t{\n\t\tfile = new Blob([data], { type: dataType });\n\t}\n\telse\n\t{\n\t\tfile = data;\n\t}\n\n\tconst url = URL.createObjectURL(file);\n\tconst element = document.createElement(\"a\");\n\telement.setAttribute('href', url);\n\telement.setAttribute('download', filename);\n\telement.style.display = 'none';\n\tdocument.body.appendChild(element);\n\telement.click();\n\tdocument.body.removeChild(element);\n\tsetTimeout(() => { URL.revokeObjectURL(url); }, 1000 * 60); // Wait one minute to revoke url\n}\n\n/**\n * Returns the URL vars ( ?foo=faa&foo2=etc )\n * @function GetUrlVars\n *\n */\nexport function GetUrlVars(): Array<string>\n{\n\tconst vars = [];\n\tlet hash;\n\tconst hashes: string | Array<string> = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');\n\tfor (let i = 0; i < hashes.length; i++)\n\t{\n\t\thash = hashes[i].split('=');\n\t\tvars.push(hash[0]);\n\t\tvars[hash[0] as keyof object] = hash[1];\n\t}\n\treturn vars;\n}\n\n/**\n * Retrieves a specific query parameter from the URL.\n * @function GetUrlVar\n * @param {string} name The name of the parameter.\n * @returns {string} The value of the parameter.\n */\nexport function GetUrlVar(name: string): string\n{\n\treturn GetUrlVars()[name as keyof object];\n}\n\n/**\n * Makes one element draggable\n * @function Draggable\n * @param {HTMLElement} container the element that will be dragged\n * @param {HTMLElement} dragger the area to start the dragging\n * @param {(container: HTMLElement, e: MouseEvent) => void} onStart Callback when the dragging starts.\n * @param {(container: HTMLElement, e: MouseEvent) => void} onFinish Callback when the dragging finishes.\n * @param {(container: HTMLElement, e: MouseEvent) => boolean} onIsDraggable Callback to determine if the element is currently draggable.\n */\nexport function Draggable(container: HTMLElement,\n\tdragger?: HTMLElement,\n\tonStart?: (container: HTMLElement, e: MouseEvent) => void,\n\tonFinish?: (container: HTMLElement, e: MouseEvent) => void,\n\tonIsDraggable?: (container: HTMLElement, e: MouseEvent) => boolean)\n{\n\tdragger = dragger ?? container;\n\tdragger.addEventListener(\"mousedown\", _onMouseEvent);\n\tdragger.style.cursor = \"move\";\n\tlet prevX = 0;\n\tlet prevY = 0;\n\n\tlet rect = container.getClientRects()[0];\n\tlet x = rect ? rect.left : 0;\n\tlet y = rect ? rect.top : 0;\n\n\tcontainer.style.position = \"absolute\";\n\tcontainer.style.left = x + \"px\";\n\tcontainer.style.top = y + \"px\";\n\n\tfunction _onMouseEvent(e: MouseEvent)\n\t{\n\t\tif (e.type == \"mousedown\")\n\t\t{\n\t\t\tif (!rect)\n\t\t\t{\n\t\t\t\trect = container.getClientRects()[0];\n\t\t\t\tx = rect ? rect.left : 0;\n\t\t\t\ty = rect ? rect.top : 0;\n\t\t\t}\n\n\t\t\tif (onIsDraggable && onIsDraggable(container, e) == false)\n\t\t\t{\n\t\t\t\te.stopPropagation();\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tprevX = e.clientX;\n\t\t\tprevY = e.clientY;\n\t\t\tdocument.addEventListener(\"mousemove\", _onMouseEvent);\n\t\t\tdocument.addEventListener(\"mouseup\", _onMouseEvent);\n\t\t\tif (onStart) { onStart(container, e); }\n\t\t\te.stopPropagation();\n\t\t\treturn false;\n\t\t}\n\n\t\tif (e.type == \"mouseup\")\n\t\t{\n\t\t\tdocument.removeEventListener(\"mousemove\", _onMouseEvent);\n\t\t\tdocument.removeEventListener(\"mouseup\", _onMouseEvent);\n\n\t\t\tif (onFinish) { onFinish(container, e); }\n\t\t\treturn;\n\t\t}\n\n\t\tif (e.type == \"mousemove\")\n\t\t{\n\t\t\tconst deltax = e.clientX - prevX;\n\t\t\tconst deltay = e.clientY - prevY;\n\t\t\tprevX = e.clientX;\n\t\t\tprevY = e.clientY;\n\t\t\tx += deltax;\n\t\t\ty += deltay;\n\t\t\tcontainer.style.left = x + \"px\";\n\t\t\tcontainer.style.top = y + \"px\";\n\t\t}\n\t\treturn;\n\t}\n}\n\n/**\n * Clones object content\n * @function CloneObject\n * @param {Object} source\n * @param {Object} target\n *\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function CloneObject(source: any, target: any)\n{\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tconst o: any = typeof target !== \"object\" ? {} : target;\n\tfor (const i in source)\n\t{\n\t\tif (i[0] == \"_\" || i.substring(0, 5) == \"jQuery\") // Skip vars with _ (they are private)\n\t\t{\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst v = source[i];\n\t\tif (v == null)\n\t\t{\n\t\t\to[i] = null;\n\t\t}\n\t\telse if (typeof v === 'function')\n\t\t{\n\t\t\tcontinue;\n\t\t}\n\t\telse if (typeof v == \"number\" || typeof v == \"string\")\n\t\t{\n\t\t\to[i] = v;\n\t\t}\n\t\telse if (typeof v == \"object\" && \"constructor\" in v && v.constructor == Float32Array) // Typed arrays are ugly when serialized\n\t\t{\n\t\t\to[i] = Array.from(v); // Clone\n\t\t}\n\t\telse if (Array.isArray(v))\n\t\t{\n\t\t\tif (o[i] && o[i].constructor == Float32Array) // Reuse old container\n\t\t\t{\n\t\t\t\to[i].set(v);\n\t\t\t}\n\t\t\telse // Not safe using slice because it doesn't clone content, only container\n\t\t\t{\n\t\t\t\to[i] = JSON.parse(JSON.stringify(v));\n\t\t\t}\n\t\t}\n\t\telse // Slow but safe\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\t// Prevent circular recursions\n\t\t\t\to[i] = JSON.parse(JSON.stringify(v));\n\t\t\t}\n\t\t\tcatch (err)\n\t\t\t{\n\t\t\t\tconsole.error(err);\n\t\t\t}\n\t\t}\n\t}\n\treturn o;\n}\n\n/**\n * Removing spaces and dots from a string.\n * @function SafeName\n * @param {string} str The input string.\n * @returns {string} The sanitized string.\n */\nexport function SafeName(str: string): string\n{\n\treturn String(str).replace(/[\\s.]/g, '');\n}\n\n/**\n * Encodes an HTML string by replacing special characters with unicode.\n * @function HTMLEncode\n * @param {string} htmlCode The HTML string to encode.\n * @returns {string} The encoded string (text content).\n */\nexport function HTMLEncode(htmlCode: string): string\n{\n\tconst e = document.createElement(\"div\");\n\te.innerHTML = htmlCode;\n\treturn e.innerText;\n}\n\n/**\n * Decodes a unicode string back to HTML.\n * @function HTMLDecode\n * @param {string} unicodeCharacter The string to decode.\n * @returns {string} The decoded HTML string.\n */\nexport function HTMLDecode(unicodeCharacter: string): string\n{\n\tconst e = document.createElement(\"div\");\n\te.innerText = unicodeCharacter;\n\treturn e.innerHTML;\n}\n\n/**\n * Returns the window where this element is attached (used in multi window applications)\n * @function GetElementWindow\n * @param {HTMLElement} element\n * @return {Window} the window element\n *\n */\nexport function GetElementWindow(element: HTMLElement): Window | undefined\n{\n\tconst doc = element.ownerDocument as CoreDocument;\n\treturn doc.defaultView || doc.parentWindow;\n}\n\n/**\n * Helper, makes drag and drop easier by enabling drag and drop in a given element\n * @function CreateDropArea\n * @param {HTMLElement} element the element where users could drop items\n * @param {(evt: DragEvent) => boolean} onDrop function to call when the user drops the item\n * @param {(evt: DragEvent, element: HTMLElement) => void} onEnter [optional] function to call when the user drags something inside\n * @param {(evt: DragEvent, element: HTMLElement) => void} onExit [optional] function to call when the user drags something outside\n *\n */\nexport function CreateDropArea(element: HTMLElement,\n\tonDrop: (evt: DragEvent) => boolean,\n\tonEnter?: (evt: DragEvent, element: HTMLElement) => void,\n\tonExit?: (evt: DragEvent, element: HTMLElement) => void)\n{\n\telement.addEventListener(\"dragenter\", onDragEvent);\n\n\tfunction onDragEvent(evt: DragEvent)\n\t{\n\t\telement.addEventListener(\"dragexit\", onDragEvent as EventListenerOrEventListenerObject);\n\t\telement.addEventListener(\"dragover\", onDragEvent);\n\t\telement.addEventListener(\"drop\", _onDrop);\n\t\tevt.stopPropagation();\n\t\tevt.preventDefault();\n\t\tif (evt.type == \"dragenter\" && onEnter)\n\t\t{\n\t\t\tonEnter(evt, element);\n\t\t}\n\t\tif (evt.type == \"dragexit\" && onExit)\n\t\t{\n\t\t\tonExit(evt, element);\n\t\t}\n\t}\n\n\tfunction _onDrop(evt: DragEvent)\n\t{\n\t\tevt.stopPropagation();\n\t\tevt.preventDefault();\n\n\t\telement.removeEventListener(\"dragexit\", onDragEvent as EventListenerOrEventListenerObject);\n\t\telement.removeEventListener(\"dragover\", onDragEvent);\n\t\telement.removeEventListener(\"drop\", _onDrop);\n\n\t\tlet r = undefined;\n\t\tif (onDrop)\n\t\t{\n\t\t\tr = onDrop(evt);\n\t\t}\n\t\tif (r)\n\t\t{\n\t\t\tevt.stopPropagation();\n\t\t\tevt.stopImmediatePropagation();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n}","import { LiteGUIObject } from \"../@types/globals\";\n\n/**\n * The options for the standard button class construction.\n */\nexport interface ButtonOptions\n{\n\t/**\n\t * Callback function to be executed when the button is clicked.\n\t */\n\tcallback?: () => void;\n}\n\n/**\n * Standard button class.\n * @class Button\n */\nexport class Button implements LiteGUIObject\n{\n\t/** Root element of the widget */\n\tpublic root: HTMLDivElement;\n\t/** Button element inside the root */\n\tpublic content: HTMLButtonElement;\n\t/** Callback function to be executed when the button is clicked */\n\tpublic callback?: () => void;\n\n\t/**\n\t * Creates an instance of the Button widget.\n\t * @param {string} value - The text to be displayed on the button.\n\t * @param {ButtonOptions | Function} [options] - Configuration options or a callback function.\n\t */\n\tconstructor(value: string, options: (() => void) | ButtonOptions = {})\n\t{\n\t\tif (typeof (options) === \"function\") { options = { callback: options }; }\n\n\t\tconst element = document.createElement(\"div\") as HTMLDivElement;\n\t\telement.className = \"litegui button\";\n\n\t\tthis.root = element;\n\t\tconst button = document.createElement(\"button\");\n\t\tbutton.className = \"litebutton\";\n\t\tthis.content = button;\n\t\telement.appendChild(button);\n\n\t\tbutton.innerHTML = value;\n\t\tbutton.addEventListener(\"click\", () =>\n\t\t{\n\t\t\tthis.click();\n\t\t});\n\n\t\tif (options.callback) { this.callback = options.callback; }\n\t}\n\n\t/**\n\t * Triggers the click event on the button.\n\t */\n\tclick()\n\t{\n\t\tif (this.callback) { this.callback(); }\n\t}\n}\n","import { LiteGUIObject } from \"../@types/globals\";\n\n/**\n * Standard checkbox class.\n * @class Checkbox\n */\nexport class Checkbox implements LiteGUIObject\n{\n\t/** Root element of the widget */\n\troot: HTMLSpanElement;\n\t/** Current value of the checkbox */\n\tvalue: boolean;\n\t/** Element representing the checkbox state */\n\telement: HTMLSpanElement;\n\t/** Callback function executed when value changes */\n\tonChange: (value: boolean) => void;\n\n\t/**\n\t * Creates an instance of the Checkbox widget.\n\t * @param {boolean} value - Initial value.\n\t * @param {Function} onChange - Callback function when value changes.\n\t */\n\tconstructor(value: boolean, onChange: (value: boolean) => void)\n\t{\n\t\tthis.value = value;\n\n\t\tconst root = this.root = document.createElement(\"span\") as HTMLSpanElement;\n\t\troot.className = \"litecheckbox inputfield\";\n\t\troot.dataset[\"value\"] = value.toString();\n\n\t\tconst element = this.element = document.createElement(\"span\") as HTMLSpanElement;\n\t\telement.className = `fixed flag checkbox ${value ? \"on\" : \"off\"}`;\n\t\troot.appendChild(element);\n\t\troot.addEventListener(\"click\", this.onClick.bind(this));\n\t\tthis.onChange = onChange;\n\t}\n\n\t/**\n\t * Sets the value of the checkbox.\n\t * @param {boolean} value - New value.\n\t */\n\tsetValue(value: boolean)\n\t{\n\t\tif (this.value === value || !this.root || !this.element) { return; }\n\n\t\tif (this.root.dataset[\"value\"] == value.toString()) { return; }\n\n\t\tthis.root.dataset[\"value\"] = value.toString();\n\n\t\tif (value)\n\t\t{\n\t\t\tthis.element.classList.remove(\"off\");\n\t\t\tthis.element.classList.add(\"on\");\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.element.classList.remove(\"on\");\n\t\t\tthis.element.classList.add(\"off\");\n\t\t}\n\n\t\tthis.value = value;\n\t\tthis.onChange(value);\n\t}\n\n\t/**\n\t * Gets the current value of the checkbox.\n\t * @returns {boolean} The current value.\n\t */\n\tgetValue()\n\t{\n\t\treturn this.root.dataset[\"value\"] == \"true\";\n\t}\n\n\t/**\n\t * Handles click event to toggle value.\n\t */\n\tonClick()\n\t{\n\t\tthis.setValue(this.root.dataset[\"value\"] != \"true\");\n\t}\n}\n","import { LiteGUIObject } from \"../@types/globals\";\nimport { LiteGUI, SpecialCode } from \"../core\";\n\n/**\n * Options for the ComplexList widget.\n */\nexport interface ComplexListOptions\n{\n\t/** Height of the list */\n\theight?: string | number;\n\t/** Custom HTML code for items */\n\titemCode?: string;\n\t/** Callback when an item is selected */\n\tonItemSelected?: (node: ComplexListDivElement | number, data: ComplexListSpanElement) => void;\n\t/** Callback when an item is toggled (tick) */\n\tonItemToggled?: (node: ComplexListDivElement | number, data: ComplexListSpanElement, isEnabled: boolean) => void;\n\t/** Callback when an item is removed (trash) */\n\tonItemRemoved?: (node: ComplexListDivElement | number, data: ComplexListSpanElement) => void;\n}\n\n/**\n * Interface for the list item element (span).\n */\nexport interface ComplexListSpanElement extends HTMLSpanElement\n{\n\thide: () => void;\n\tshow: () => void;\n\tsetSelected: (v: boolean) => void;\n\tsetContent: (v: string, isHTML: boolean) => void;\n\ttoggleEnabled: () => void;\n\titem?: ComplexListDivElement | number;\n}\n\n/**\n * Interface for the data object of a list item.\n */\nexport interface ComplexListDivElement extends HTMLDivElement\n{\n\tcontent?: string;\n\tname?: string;\n}\n\n/**\n * ComplexList widget for advanced lists with icons and buttons.\n * @class ComplexList\n */\nexport class ComplexList implements LiteGUIObject\n{\n\t/** Root element */\n\troot: HTMLDivElement;\n\t/** Configuration options */\n\toptions: ComplexListOptions;\n\t/** HTML template code for items */\n\titemCode: string;\n\t/** Currently selected item */\n\tselected?: HTMLDivElement | number;\n\n\tonItemSelected?: (node: ComplexListDivElement | number, data: ComplexListSpanElement) => void;\n\tonItemToggled?: (node: ComplexListDivElement | number, data: ComplexListSpanElement, isEnabled: boolean) => void;\n\tonItemRemoved?: (node: ComplexListDivElement | number, data: ComplexListSpanElement) => void;\n\n\t/**\n\t * Creates an instance of the ComplexList widget.\n\t * @param {ComplexListOptions} [options] - Configuration options.\n\t */\n\tconstructor(options: ComplexListOptions = {})\n\t{\n\t\tthis.options = options;\n\n\t\tthis.root = document.createElement(\"div\");\n\t\tthis.root.className = \"litecomplexlist\";\n\n\t\tthis.itemCode = this.options.itemCode || \"<div class='listitem'><span class='tick'><span>\" + SpecialCode.tick + \"</span></span><span class='title'></span><button class='trash'>\" + SpecialCode.close + \"</button></div>\";\n\n\t\tif (this.options.height)\n\t\t{\n\t\t\tthis.root.style.height = LiteGUI.sizeToCSS(this.options.height) ?? '';\n\t\t}\n\n\t\tthis.onItemSelected = options.onItemSelected;\n\t\tthis.onItemToggled = options.onItemToggled;\n\t\tthis.onItemRemoved = options.onItemRemoved;\n\t}\n\n\t/**\n\t * Adds a title/header to the list.\n\t * @param {string} text - Title text.\n\t * @returns {HTMLElement} The title element.\n\t */\n\taddTitle(text: string)\n\t{\n\t\tconst elem = LiteGUI.createElement(\"div\", \".listtitle\", text);\n\t\tthis.root.appendChild(elem);\n\t\treturn elem;\n\t}\n\n\t/**\n\t * Adds a custom HTML element to the list.\n\t * @param {string} html - HTML content.\n\t * @param {Function} [onClick] - Click handler.\n\t * @returns {HTMLElement} The created element.\n\t */\n\taddHTML(html: string, onClick?: () => void)\n\t{\n\t\tconst elem = LiteGUI.createElement(\"div\", \".listtext\", html);\n\t\tif (onClick) { elem.addEventListener(\"mousedown\", onClick); }\n\t\tthis.root.appendChild(elem);\n\t\treturn elem;\n\t}\n\n\t/**\n\t * Clears the list content.\n\t */\n\tclear()\n\t{\n\t\tthis.root.innerHTML = \"\";\n\t}\n\n\t/**\n\t * Adds an item to the list.\n\t * @param {ComplexListDivElement | number} item - Data object or ID.\n\t * @param {string} text - Display text.\n\t * @param {boolean} isEnabled - Whether it is enabled (checked).\n\t * @param {boolean} canBeRemoved - Whether it can be removed (trash icon).\n\t * @returns {ComplexListSpanElement} The created list item element.\n\t */\n\taddItem(item: ComplexListDivElement | number, text: string, isEnabled: boolean, canBeRemoved: boolean)\n\t{\n\t\tconst title = text ?? ((typeof item === 'object') ? (item.content || item.name) ?? \"\" : \"\");\n\t\tconst elem = LiteGUI.createListItem(this.itemCode, { \".title\": title }) as ComplexListSpanElement;\n\t\telem.item = item;\n\n\t\tif (isEnabled) { elem.classList.add(\"enabled\"); }\n\n\t\tif (!canBeRemoved)\n\t\t{\n\t\t\tconst trash = elem.querySelector<HTMLElement>(\".trash\");\n\t\t\tif (trash) { trash.style.display = \"none\"; }\n\t\t}\n\n\t\telem.addEventListener(\"mousedown\", (e: MouseEvent) =>\n\t\t{\n\t\t\te.preventDefault();\n\t\t\telem.setSelected(true);\n\t\t\tif (this.onItemSelected)\n\t\t\t{\n\t\t\t\tthis.onItemSelected(item, elem);\n\t\t\t}\n\t\t});\n\n\t\tconst tick: HTMLElement | null = elem.querySelector(\".tick\");\n\t\tif (tick)\n\t\t{\n\t\t\ttick.addEventListener(\"mousedown\", (e: MouseEvent) =>\n\t\t\t{\n\t\t\t\te.preventDefault();\n\t\t\t\telem.classList.toggle(\"enabled\");\n\t\t\t\tif (this.onItemToggled)\n\t\t\t\t{\n\t\t\t\t\tthis.onItemToggled(item, elem, elem.classList.contains(\"enabled\"));\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tconst trash: HTMLElement | null = elem.querySelector(\".trash\");\n\t\tif (trash)\n\t\t{\n\t\t\ttrash.addEventListener(\"mousedown\", (e: MouseEvent) =>\n\t\t\t{\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t\telem.remove();\n\t\t\t\tif (this.onItemRemoved)\n\t\t\t\t{\n\t\t\t\t\tthis.onItemRemoved(item, elem);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\telem.setContent = function (value: string, isHTML: boolean)\n\t\t{\n\t\t\tconst title: HTMLElement | null = elem.querySelector(\".title\");\n\t\t\tif (title)\n\t\t\t{\n\t\t\t\tif (isHTML)\n\t\t\t\t{\n\t\t\t\t\ttitle.innerHTML = value;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\ttitle.innerText = value;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\telem.toggleEnabled = function ()\n\t\t{\n\t\t\telem.classList.toggle(\"enabled\");\n\t\t};\n\n\t\telem.setSelected = (selected: boolean) =>\n\t\t{\n\t\t\tLiteGUI.removeClass(this.root, \"selected\");\n\t\t\tif (selected)\n\t\t\t{\n\t\t\t\telem.classList.add(\"selected\");\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\telem.classList.remove(\"selected\");\n\t\t\t}\n\t\t\tthis.selected = elem.item;\n\t\t};\n\n\t\telem.show = function () { this.style.display = \"\"; };\n\t\telem.hide = function () { this.style.display = \"none\"; };\n\n\t\tthis.root.appendChild(elem);\n\t\treturn elem;\n\t}\n}","import { LiteGUIObject } from \"../@types/globals\";\nimport { LiteGUI } from \"../core\";\n\n/**\n * Data structure representing a menu item in the ContextMenu.\n */\nexport interface ContextMenuItemData\n{\n\t/** Text content of the item */\n\tcontent?: string;\n\t/** Title (same as content usually) */\n\ttitle?: string;\n\t/** Submenu associated with this item */\n\tsubmenu?: ContextMenu;\n\t/** Whether it has a submenu */\n\thasSubmenu?: boolean;\n\t/** Whether the item is disabled */\n\tdisabled?: boolean;\n\t/** Options for the item (submenu options) */\n\toptions?: ContextMenuOptions\n\t/** Callback function when clicked */\n\tcallback?: (e: PointerEvent | MouseEvent, item: ContextMenuItemData, menu: ContextMenu, options?: ContextMenuOptions) => boolean;\n}\n\n/**\n * HTMLDivElement extending interface for a menu item element.\n */\nexport interface ContextMenuItem extends HTMLDivElement\n{\n\t/** Data associated with the item */\n\tvalue?: ContextMenuItemData;\n}\n\n/**\n * Configuration options for the ContextMenu.\n */\nexport interface ContextMenuOptions\n{\n\t/** Automatically open submenus on hover */\n\tautoOpen?: boolean;\n\t/** Ignore item callbacks and only use global callback */\n\tignoreItemCallbacks?: boolean;\n\t/** Global callback function */\n\tcallback?: (e: PointerEvent | MouseEvent, item: ContextMenuItemData, menu: ContextMenu, options?: ContextMenuOptions) => boolean;\n\t/** Top position */\n\ttop?: number;\n\t/** Left position */\n\tleft?: number;\n\t/** Title of the menu */\n\ttitle?: string;\n\t/** Event that triggered the menu (for positioning) */\n\tevent?: PointerEvent | PointerEvent | MouseEvent | CustomEvent;\n\t/** Parent menu if this is a submenu */\n\tparentMenu?: ContextMenu;\n}\n\n/**\n * ContextMenu widget.\n * @class ContextMenu\n */\nexport class ContextMenu implements LiteGUIObject\n{\n\t/** Root element */\n\troot: HTMLDivElement;\n\t/** Configuration options */\n\toptions: ContextMenuOptions;\n\t/** Parent menu */\n\tparentMenu?: ContextMenu;\n\t/** Whether the menu is locked (open) */\n\tlock?: boolean;\n\t/** Currently open submenu */\n\tcurrentSubmenu?: ContextMenu;\n\t/** Timer for closing the menu */\n\tclosingTimer?: NodeJS.Timeout;\n\n\t/**\n\t * Creates an instance of the ContextMenu widget.\n\t * @param {ContextMenuItemData[] | Record<string,ContextMenu>} values - Items to display.\n\t * @param {ContextMenuOptions} [options] - Configuration options.\n\t */\n\tconstructor(values: (ContextMenuItemData|string)[] | Record<string,ContextMenu>, options?: ContextMenuOptions)\n\t{\n\t\toptions = options ?? {};\n\t\tthis.options = options;\n\n\t\t// To link a menu with its parent\n\t\tif (options.parentMenu)\n\t\t{\n\t\t\tif (options.parentMenu.constructor !== this.constructor)\n\t\t\t{\n\t\t\t\tconsole.error(\"parentMenu must be of class ContextMenu, ignoring it\");\n\t\t\t\toptions.parentMenu = undefined;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.parentMenu = options.parentMenu;\n\t\t\t\tthis.parentMenu.lock = true;\n\t\t\t\tthis.parentMenu.currentSubmenu = this;\n\t\t\t}\n\t\t}\n\n\t\tif (options.event &&\n\t\t\t!(options.event.constructor.name === \"PointerEvent\" ||\n\t\t\t\toptions.event.constructor.name === \"MouseEvent\" ||\n\t\t\t\toptions.event.constructor.name === \"CustomEvent\"))\n\t\t{\n\t\t\tconsole.error(\"Event passed to ContextMenu is not of type PointerEvent, MouseEvent or CustomEvent. Ignoring it.\");\n\t\t\toptions.event = undefined;\n\t\t}\n\n\t\tconst root = document.createElement(\"div\");\n\t\troot.className = \"litecontextmenu litemenubar-panel\";\n\t\troot.style.minWidth = \"100px\";\n\t\troot.style.minHeight = \"100px\";\n\t\troot.style.pointerEvents = \"none\";\n\t\tsetTimeout(() => { root.style.pointerEvents = \"auto\"; }, 100); // Delay so the mouse up event is not caught by this element\n\n\t\t// This prevents the default context browser menu to open in case this menu was created when pressing right button\n\t\troot.addEventListener(\"mouseup\", (e: MouseEvent) =>\n\t\t{\n\t\t\te.preventDefault();\n\t\t\treturn true;\n\t\t}, true);\n\n\t\troot.addEventListener(\"contextmenu\", (e: PointerEvent) =>\n\t\t{\n\t\t\t// Right button\n\t\t\tif (e.button != 2) { return false; }\n\t\t\te.preventDefault();\n\t\t\treturn false;\n\t\t}, true);\n\n\t\troot.addEventListener(\"mousedown\", (e: MouseEvent) =>\n\t\t{\n\t\t\tif (e.button == 2)\n\t\t\t{\n\t\t\t\tthis.close.bind(this, e);\n\t\t\t\te.preventDefault();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}, true);\n\n\t\tthis.root = root;\n\n\t\t// Title\n\t\tif (options.title)\n\t\t{\n\t\t\tconst element = document.createElement(\"div\") as HTMLDivElement;\n\t\t\telement.className = \"litemenu-title\";\n\t\t\telement.innerHTML = options.title;\n\t\t\troot.appendChild(element);\n\t\t}\n\n\t\t// Entries\n\t\tif (values)\n\t\t{\n\t\t\tlet keys: string[] = [];\n\t\t\tlet limit: number;\n\t\t\tif (values && !Array.isArray(values))\n\t\t\t{\n\t\t\t\tkeys = Object.keys(values);\n\t\t\t\tlimit = keys.length;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tlimit = values.length;\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < limit; i++)\n\t\t\t{\n\t\t\t\tlet name: string;\n\t\t\t\tlet value: ContextMenuItemData | string;\n\t\t\t\tif (Array.isArray(values))\n\t\t\t\t{\n\t\t\t\t\tname = i.toString();\n\t\t\t\t\tvalue = values[i];\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tname = keys[i];\n\t\t\t\t\tvalue = values[name];\n\t\t\t\t}\n\t\t\t\tthis.addItem(name, value, options);\n\t\t\t}\n\t\t}\n\n\t\t// Close on leave\n\t\troot.addEventListener(\"mouseleave\", (e: MouseEvent) =>\n\t\t{\n\t\t\tif (this.lock || !this.root) { return; }\n\t\t\tif (this.closingTimer) { clearTimeout(this.closingTimer); }\n\t\t\tthis.closingTimer = setTimeout(this.close.bind(this, e), 500);\n\t\t});\n\n\t\troot.addEventListener(\"mouseenter\", () =>\n\t\t{\n\t\t\tif (this.closingTimer) { clearTimeout(this.closingTimer); }\n\t\t});\n\n\t\tfunction _onMouseWheel(e: WheelEvent)\n\t\t{\n\t\t\tconst pos = parseInt(root.style.top);\n\t\t\troot.style.top = (pos + e.deltaY * 0.1).toFixed() + \"px\";\n\t\t\te.preventDefault();\n\t\t\treturn true;\n\t\t}\n\n\t\troot.addEventListener(\"wheel\", _onMouseWheel, true);\n\n\t\t// Insert before checking position\n\t\tlet doc = document;\n\t\tif (options.event && options.event.target && (options.event.target as HTMLInputElement).ownerDocument)\n\t\t{\n\t\t\tdoc = (options.event.target as HTMLInputElement).ownerDocument;\n\t\t}\n\t\tdoc.body.appendChild(root);\n\n\t\t// Compute best position\n\t\tlet left = options.left ?? 0;\n\t\tlet top = options.top ?? 0;\n\t\tif (options.event)\n\t\t{\n\t\t\tif (options.event.constructor.name !== \"PointerEvent\" && options.event.constructor.name !== \"MouseEvent\" && options.event.constructor.name !== \"CustomEvent\")\n\t\t\t{\n\t\t\t\tconsole.warn(\"Event passed to ContextMenu is not of type PointerEvent\");\n\t\t\t\toptions.event = undefined;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tleft = ((options.event as PointerEvent | PointerEvent).pageX - 10);\n\t\t\t\ttop = ((options.event as PointerEvent | PointerEvent).pageY - 10);\n\t\t\t\tif (options.title) { top -= 20; }\n\n\t\t\t\tif (options.parentMenu)\n\t\t\t\t{\n\t\t\t\t\tconst rect = options.parentMenu.root.getBoundingClientRect();\n\t\t\t\t\tleft = rect.left + rect.width;\n\t\t\t\t}\n\n\t\t\t\tconst body_rect = document.body.getBoundingClientRect();\n\t\t\t\tconst root_rect = root.getBoundingClientRect();\n\n\t\t\t\tif (left > (body_rect.width - root_rect.width - 10)) { left = (body_rect.width - root_rect.width - 10); }\n\t\t\t\tif (top > (body_rect.height - root_rect.height - 10)) { top = (body_rect.height - root_rect.height - 10); }\n\t\t\t}\n\t\t}\n\n\t\troot.style.left = left + \"px\";\n\t\troot.style.top = top + \"px\";\n\t}\n\n\t/**\n\t * Closes the context menu.\n\t * @param {MouseEvent} [e] - Event that triggered the close (optional).\n\t * @param {boolean} [ignoreParent] - If true, does not close the parent menu.\n\t */\n\tclose(e?: MouseEvent, ignoreParent?: boolean)\n\t{\n\t\tif (this.root.parentNode) { this.root.parentNode.removeChild(this.root); }\n\n\t\tif (this.parentMenu && !ignoreParent)\n\t\t{\n\t\t\tthis.parentMenu.lock = false;\n\t\t\tthis.parentMenu.currentSubmenu = undefined;\n\t\t\tif (e === undefined)\n\t\t\t{\n\t\t\t\tthis.parentMenu.close(e);\n\t\t\t}\n\t\t\telse if (e && !LiteGUI.isCursorOverElement(e, this.parentMenu.root))\n\t\t\t{\n\t\t\t\tLiteGUI.trigger(this.parentMenu.root, \"mouseleave\", e);\n\t\t\t}\n\t\t}\n\n\t\tif (this.currentSubmenu) { this.currentSubmenu.close(e, true); }\n\t\tif (this.closingTimer) { clearTimeout(this.closingTimer); }\n\t}\n\n\t/**\n\t * Returns the top most menu.\n\t * @returns {ContextMenu} The top most menu.\n\t */\n\tgetTopMenu(): ContextMenu\n\t{\n\t\tif (this.options.parentMenu) { return this.options.parentMenu.getTopMenu(); }\n\t\treturn this;\n\t}\n\n\t/**\n\t * Returns the first event that triggered the menu.\n\t * @returns {MouseEvent | PointerEvent | CustomEvent | undefined} The event.\n\t */\n\tgetFirstEvent(): MouseEvent | PointerEvent | CustomEvent | undefined\n\t{\n\t\tif (this.options.parentMenu) { return this.options.parentMenu.getFirstEvent(); }\n\t\treturn this.options.event;\n\t}\n\n\t/**\n\t * Adds an item to the menu.\n\t * @param {string} name - Name/ID of the item.\n\t * @param {ContextMenuItemData | () => void} [value] - Data or callback.\n\t * @param {ContextMenuOptions} [options] - Options.\n\t * @returns {ContextMenuItem} The created element.\n\t */\n\taddItem(name: string, value?: string | ContextMenuItemData | (() => void), options?: ContextMenuOptions)\n\t{\n\t\toptions = options ?? {};\n\n\t\tconst element = document.createElement(\"div\") as ContextMenuItem;\n\t\telement.className = \"litemenu-entry submenu\";\n\n\t\tlet disabled = false;\n\n\t\tif (!value)\n\t\t{\n\t\t\telement.classList.add(\"separator\");\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (typeof value == \"function\")\n\t\t\t{\n\t\t\t\telement.innerHTML = name;\n\t\t\t\telement.dataset[\"value\"] = name;\n\t\t\t\telement.onclick = value;\n\t\t\t}\n\t\t\telse if (typeof value == \"string\")\n\t\t\t{\n\t\t\t\telement.innerHTML = value;\n\t\t\t\telement.dataset[\"value\"] = value;\n\t\t\t\telement.classList.add(\"disabled\");\n\t\t\t}\n\t\t\telse if (value)\n\t\t\t{\n\t\t\t\telement.innerHTML = value.title ?? \"\";\n\t\t\t\tif (value.disabled)\n\t\t\t\t{\n\t\t\t\t\tdisabled = true;\n\t\t\t\t\telement.classList.add(\"disabled\");\n\t\t\t\t}\n\t\t\t\tif (value.submenu || value.hasSubmenu)\n\t\t\t\t{\n\t\t\t\t\telement.classList.add(\"has_submenu\");\n\t\t\t\t}\n\t\t\t\telement.value = value;\n\t\t\t}\n\t\t}\n\n\t\tthis.root.appendChild(element);\n\n\t\t// Menu option clicked\n\t\tconst _OnMouseClick = (e: MouseEvent) =>\n\t\t{\n\t\t\tconst value = element.value;\n\t\t\tlet closeParent = true;\n\n\t\t\tif (this.currentSubmenu)\n\t\t\t{\n\t\t\t\tthis.currentSubmenu.close(e);\n\t\t\t}\n\n\t\t\t// global callback\n\t\t\tif (options && options.callback)\n\t\t\t{\n\t\t\t\tconst r = options.callback.call(this, e, value ?? {}, this, options);\n\t\t\t\tif (r) { closeParent = false; }\n\t\t\t}\n\n\t\t\t// Special cases\n\t\t\tif (value)\n\t\t\t{\n\t\t\t\tif (value.callback && !options?.ignoreItemCallbacks && value.disabled !== true) // Item callback\n\t\t\t\t{\n\t\t\t\t\tconst r = value.callback.call(this, e, value, this, options);\n\t\t\t\t\tif (r === true) { closeParent = false; }\n\t\t\t\t}\n\t\t\t\tif (value.submenu)\n\t\t\t\t{\n\t\t\t\t\tif (!value.submenu.options)\n\t\t\t\t\t{\n\t\t\t\t\t\tthrow (\"ContextMenu submenu needs options\");\n\t\t\t\t\t}\n\t\t\t\t\tnew LiteGUI.ContextMenu([value.submenu.options], {\n\t\t\t\t\t\tcallback: value.submenu.options.callback,\n\t\t\t\t\t\tignoreItemCallbacks: value.submenu.options.ignoreItemCallbacks,\n\t\t\t\t\t\ttitle: value.submenu.options.title,\n\t\t\t\t\t\tevent: e,\n\t\t\t\t\t\tparentMenu: this,\n\t\t\t\t\t\tautoOpen: options?.autoOpen\n\t\t\t\t\t});\n\t\t\t\t\tcloseParent = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (closeParent && !this.lock) { this.close(e, true); }\n\t\t};\n\n\t\tconst _onMouseOver = (e: MouseEvent) =>\n\t\t{\n\t\t\tconst value = element.value;\n\t\t\tif (!value || !value.hasSubmenu) { return; }\n\t\t\t_OnMouseClick.call(element, e);\n\t\t};\n\n\t\tif (!disabled)\n\t\t{\n\t\t\telement.addEventListener(\"click\", _OnMouseClick.bind(element));\n\t\t}\n\t\tif (options && options.autoOpen)\n\t\t{\n\t\t\telement.addEventListener(\"mouseenter\", _onMouseOver.bind(element));\n\t\t}\n\n\t\treturn element;\n\t}\n}\n","export * from './lineEditor';\nexport * from './list';\nexport * from './complexList';\nexport * from './contextMenu';\nexport * from './checkbox';\nexport * from './button';\nexport * from './listBox';\nexport * from './searchBox';\nexport * from './slider';","import { AppendOptions } from \"../@types/Inspector\";\nimport { LiteGUIObject } from \"../@types/globals\";\nimport { Trigger } from \"../utilities\";\n\n/**\n * Options for the LineEditor widget.\n */\nexport interface LineEditorOptions extends AppendOptions\n{\n\t/** Callback function when value changes */\n\tcallback?: (value: number[][], e?: Event) => void;\n\t/** Height of the editor */\n\theight?: number;\n\t/** Width of the editor */\n\twidth?: number;\n\t/** Number of samples to show */\n\tshowSamples?: number;\n\t/** Prevent crossing lines (monotonic function) */\n\tnoTrespassing?: boolean;\n\t/** Default Y value */\n\tdefaultY?: number;\n\t/** X axis range [min, max] */\n\txRange?: number[];\n\t/** Y axis range [min, max] */\n\tyRange?: number[];\n\t/** Color of the line */\n\tlineColor?: string;\n\t/** Color of the points */\n\tpointsColor?: string;\n\t/** Background color */\n\tbgColor?: string;\n\t/** Extra CSS class */\n\textraClass?: string;\n}\n\n/**\n * Element interface containing LineEditor properties.\n */\nexport interface LineEditorElement extends HTMLDivElement\n{\n\tcanvas: HTMLCanvasElement;\n\tvaluesArray: number[][];\n\tcallback?: (values: number[][]) => void;\n\theight?: number;\n\twidth?: number;\n\tshowSamples?: number;\n\tnoTrespassing?: boolean;\n\tdefaultY: number;\n\txRange: number[];\n\tyRange: number[];\n\tlineColor: string;\n\tpointsColor?: string;\n\tbgColor?: string;\n\textraClass?: string;\n\toptions?: LineEditorOptions;\n}\n\n/**\n * Line editor widget for editing curves.\n * @class LineEditor\n */\nexport class LineEditor implements LiteGUIObject\n{\n\troot: LineEditorElement;\n\toptions: LineEditorOptions;\n\tcanvas: HTMLCanvasElement;\n\tselected: number;\n\tlastMousePos: number[];\n\n\tmouseMoveBind = this.onMouseMove.bind(this);\n\tmouseUpBind = this.onMouseUp.bind(this);\n\n\t/**\n\t * Creates an instance of the LineEditor widget.\n\t * @param {number[][]} value - Array of points [x, y].\n\t * @param {LineEditorOptions} [options] - Configuration options.\n\t */\n\tconstructor(value: number[][], options: LineEditorOptions = {})\n\t{\n\t\tthis.options = options;\n\t\tconst element = this.root = <LineEditorElement>document.createElement(\"div\");\n\t\telement.className = \"curve \" + (this.options.extraClass ?? \"\");\n\t\telement.style.minHeight = \"50px\";\n\t\telement.style.width = this.options.width?.toString() ?? \"100%\";\n\n\t\telement.bgColor = this.options.bgColor ?? \"#222\";\n\t\telement.pointsColor = this.options.pointsColor ?? \"#5AF\";\n\t\telement.lineColor = this.options.lineColor ?? \"#444\";\n\n\t\telement.valuesArray = value ?? [];\n\t\telement.xRange = this.options.xRange ?? [0, 1]; // Min,max\n\t\telement.yRange = this.options.yRange ?? [0, 1]; // Min,max\n\t\telement.defaultY = this.options.defaultY ?? 0.5;\n\t\telement.noTrespassing = this.options.noTrespassing ?? false;\n\t\telement.showSamples = this.options.showSamples ?? 0;\n\t\telement.options = options;\n\t\telement.style.minWidth = \"50px\";\n\t\telement.style.minHeight = \"20px\";\n\n\t\tconst canvas = this.canvas = document.createElement(\"canvas\");\n\t\tcanvas.width = this.options.width ?? 200;\n\t\tcanvas.height = this.options.height ?? 50;\n\t\telement.appendChild(canvas);\n\t\telement.canvas = canvas;\n\n\t\telement.addEventListener(\"mousedown\", this.onMouseDown.bind(this));\n\n\t\tthis.selected = -1;\n\n\t\tthis.lastMousePos = [0, 0];\n\n\t\tthis.redraw();\n\t}\n\n\t/**\n\t * Gets value at given x coordinate (interpolates).\n\t * @param {number} x - X coordinate.\n\t * @returns {number} The interpolated Y value.\n\t */\n\tgetValueAt(x: number)\n\t{\n\t\tif (x < this.root.xRange[0] || x > this.root.xRange[1])\n\t\t{\n\t\t\treturn this.root.defaultY;\n\t\t}\n\n\t\tlet last = <number[]>[this.root.xRange[0], this.root.defaultY];\n\t\tlet f = 0, v: number[];\n\t\tfor (let i = 0; i < this.root.valuesArray.length; i++)\n\t\t{\n\t\t\tv = this.root.valuesArray[i];\n\t\t\tif (x == v[0]) { return v[1]; }\n\t\t\tif (x < v[0])\n\t\t\t{\n\t\t\t\tf = (x - last[0]) / (v[0] - last[0]);\n\t\t\t\treturn last[1] * (1 - f) + v[1] * f;\n\t\t\t}\n\t\t\tlast = v;\n\t\t}\n\n\t\tv = [this.root.xRange[1], this.root.defaultY];\n\t\tf = (x - last[0]) / (v[0] - last[0]);\n\t\treturn last[1] * (1 - f) + v[1] * f;\n\t}\n\n\t/**\n\t * Resamples line editor to fixed number of samples.\n\t * @param {number} samples - Number of samples.\n\t * @returns {number[]} Array of sampled values.\n\t */\n\tresample(samples: number)\n\t{\n\t\tconst r: number[] = [];\n\t\tconst dx = (this.root.xRange[1] - this.root.xRange[0]) / samples;\n\t\tfor (let i = this.root.xRange[0]; i <= this.root.xRange[1]; i += dx)\n\t\t{\n\t\t\tconst v = this.getValueAt(i);\n\t\t\tif (v) { r.push(v); }\n\t\t}\n\t\treturn r;\n\t}\n\n\t/**\n\t * Adds a point to the line.\n\t * @param {number[]} v - Point [x, y].\n\t */\n\taddValue(v: number[])\n\t{\n\t\tfor (let i = 0; i < this.root.valuesArray.length; i++)\n\t\t{\n\t\t\tconst value = this.root.valuesArray[i];\n\t\t\tif (value[0] < v[0]) { continue; }\n\t\t\tthis.root.valuesArray.splice(i, 0, v);\n\t\t\tthis.redraw();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.root.valuesArray.push(v);\n\t\tthis.redraw();\n\t}\n\n\t/**\n\t * Converts value to canvas coordinates.\n\t * @param {number[]} v - Point in value space [x, y].\n\t * @returns {number[]} Point in canvas space [x, y].\n\t */\n\tconvert(v: number[])\n\t{\n\t\treturn [this.canvas.width * ((this.root.xRange[1] - this.root.xRange[0]) * v[0] + this.root.xRange[0]),\n\t\t\tthis.canvas.height * ((this.root.yRange[1] - this.root.yRange[0]) * v[1] + this.root.yRange[0])];\n\t}\n\n\t/**\n\t * Deconverts canvas coordinates to value space.\n\t * @param {number[]} v - Point in canvas space [x, y].\n\t * @returns {number[]} Point in value space [x, y].\n\t */\n\tdeconvert(v: number[])\n\t{\n\t\treturn [(v[0] / this.canvas.width - this.root.xRange[0]) / (this.root.xRange[1] - this.root.xRange[0]),\n\t\t\t(v[1] / this.canvas.height - this.root.yRange[0]) / (this.root.yRange[1] - this.root.yRange[0])];\n\t}\n\n\t/**\n\t * Redraws the canvas.\n\t */\n\tredraw()\n\t{\n\t\tif (!this.canvas || !this.canvas.parentNode) { return; }\n\t\tconst rect = this.canvas.getBoundingClientRect();\n\t\tif (rect && this.canvas.width != rect.width && rect.width && rect.width < 1000) { this.canvas.width = rect.width; }\n\t\tif (rect && this.canvas.height != rect.height && rect.height && rect.height < 1000) { this.canvas.height = rect.height; }\n\n\t\tconst ctx = this.canvas.getContext(\"2d\");\n\t\tif (!ctx) { return; }\n\t\tctx.setTransform(1, 0, 0, 1, 0, 0);\n\t\tctx.translate(0, this.canvas.height);\n\t\tctx.scale(1, -1);\n\n\t\tctx.fillStyle = this.root.bgColor as string;\n\t\tctx.fillRect(0, 0, this.canvas.width, this.canvas.height);\n\n\t\tctx.strokeStyle = this.root.lineColor as string;\n\t\tctx.beginPath();\n\n\t\t// Draw line\n\t\tlet pos = this.convert([this.root.xRange[0], this.root.defaultY]);\n\t\tctx.moveTo(pos[0], pos[1]);\n\n\t\tfor (const i in this.root.valuesArray)\n\t\t{\n\t\t\tconst value: number[] = this.root.valuesArray[parseInt(i)];\n\t\t\tpos = this.convert(value);\n\t\t\tctx.lineTo(pos[0], pos[1]);\n\t\t}\n\n\t\tpos = this.convert([this.root.xRange[1], this.root.defaultY]);\n\t\tctx.lineTo(pos[0], pos[1]);\n\t\tctx.stroke();\n\n\t\t// Draw points\n\t\tfor (let i = 0; i < this.root.valuesArray.length; i += 1)\n\t\t{\n\t\t\tconst value = this.root.valuesArray[i];\n\t\t\tpos = this.convert(value);\n\t\t\tif (this.selected == i) { ctx.fillStyle = \"white\"; }\n\t\t\telse { ctx.fillStyle = this.root.pointsColor as string; }\n\t\t\tctx.beginPath();\n\t\t\tctx.arc(pos[0], pos[1], this.selected == i ? 4 : 2, 0, Math.PI * 2);\n\t\t\tctx.fill();\n\t\t}\n\n\t\tif (this.root.showSamples)\n\t\t{\n\t\t\tconst samples = this.resample(this.root.showSamples);\n\t\t\tctx.fillStyle = \"#888\";\n\t\t\tfor (let i = 0; i < samples.length; i += 1)\n\t\t\t{\n\t\t\t\tconst value = [i * ((this.root.xRange[1] - this.root.xRange[0]) / this.root.showSamples) + this.root.xRange[0], samples[i]] as number[];\n\t\t\t\tpos = this.convert(value);\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.arc(pos[0], pos[1], 2, 0, Math.PI * 2);\n\t\t\t\tctx.fill();\n\t\t\t}\n\t\t}\n\t}\n\n\tonMouseDown(evt: MouseEvent)\n\t{\n\t\tdocument.addEventListener(\"mousemove\", this.mouseMoveBind);\n\t\tdocument.addEventListener(\"mouseup\", this.mouseUpBind);\n\n\t\tconst rect = this.canvas.getBoundingClientRect();\n\t\tconst mouseX = evt.clientX - rect.left;\n\t\tconst mouseY = evt.clientY - rect.top;\n\n\t\tthis.selected = this.computeSelected(mouseX, this.canvas.height - mouseY);\n\n\t\tif (this.selected == -1)\n\t\t{\n\t\t\tconst v = this.deconvert([mouseX, this.canvas.height - mouseY]);\n\t\t\tthis.root.valuesArray.push(v);\n\t\t\tthis.sortValues();\n\t\t\tthis.selected = this.root.valuesArray.indexOf(v);\n\t\t}\n\n\t\tthis.lastMousePos = [mouseX, mouseY];\n\t\tthis.redraw();\n\t\tevt.preventDefault();\n\t\tevt.stopPropagation();\n\t}\n\n\tonMouseMove(evt: MouseEvent)\n\t{\n\t\tconst rect = this.canvas.getBoundingClientRect();\n\t\tlet mouseX = evt.clientX - rect.left;\n\t\tlet mouseY = evt.clientY - rect.top;\n\n\t\tif (mouseX < 0)\n\t\t{\n\t\t\tmouseX = 0;\n\t\t}\n\t\telse if (mouseX > this.canvas.width)\n\t\t{\n\t\t\tmouseX = this.canvas.width;\n\t\t}\n\n\t\tif (mouseY < 0)\n\t\t{\n\t\t\tmouseY = 0;\n\t\t}\n\t\telse if (mouseY > this.canvas.height)\n\t\t{\n\t\t\tmouseY = this.canvas.height;\n\t\t}\n\n\t\t// Dragging to remove\n\t\tif (this.selected != -1 && this.distance([evt.clientX - rect.left, evt.clientY - rect.top], [mouseX, mouseY]) > this.canvas.height * 0.5)\n\t\t{\n\t\t\tthis.root.valuesArray.splice(this.selected, 1);\n\t\t\tthis.onMouseUp(evt);\n\t\t\treturn;\n\t\t}\n\n\t\tconst dx = this.lastMousePos[0] - mouseX;\n\t\tconst dy = this.lastMousePos[1] - mouseY;\n\t\tconst delta = this.deconvert([-dx, dy]);\n\t\tif (this.selected != -1)\n\t\t{\n\t\t\tlet minX = this.root.xRange[0];\n\t\t\tlet maxX = this.root.xRange[1];\n\n\t\t\tif (this.root.noTrespassing)\n\t\t\t{\n\t\t\t\tif (this.selected > 0)\n\t\t\t\t{\n\t\t\t\t\tminX = this.root.valuesArray[this.selected - 1][0];\n\t\t\t\t}\n\t\t\t\tif (this.selected < (this.root.valuesArray.length - 1))\n\t\t\t\t{\n\t\t\t\t\tmaxX = this.root.valuesArray[this.selected + 1][0];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst v = this.root.valuesArray[this.selected];\n\t\t\tv[0] += delta[0];\n\t\t\tv[1] += delta[1];\n\t\t\tif (v[0] < minX)\n\t\t\t{\n\t\t\t\tv[0] = minX;\n\t\t\t}\n\t\t\telse if (v[0] > maxX)\n\t\t\t{\n\t\t\t\tv[0] = maxX;\n\t\t\t}\n\n\t\t\tif (v[1] < this.root.yRange[0])\n\t\t\t{\n\t\t\t\tv[1] = this.root.yRange[0];\n\t\t\t}\n\t\t\telse if (v[1] > this.root.yRange[1])\n\t\t\t{\n\t\t\t\tv[1] = this.root.yRange[1];\n\t\t\t}\n\t\t}\n\n\t\tthis.sortValues();\n\t\tthis.redraw();\n\t\tthis.lastMousePos[0] = mouseX;\n\t\tthis.lastMousePos[1] = mouseY;\n\t\tthis.onChange();\n\n\t\tevt.preventDefault();\n\t\tevt.stopPropagation();\n\t}\n\n\tonMouseUp(evt: MouseEvent)\n\t{\n\t\tthis.selected = -1;\n\t\tthis.redraw();\n\t\tdocument.removeEventListener(\"mousemove\", this.mouseMoveBind);\n\t\tdocument.removeEventListener(\"mouseup\", this.mouseUpBind);\n\t\tthis.onChange();\n\t\tevt.preventDefault();\n\t\tevt.stopPropagation();\n\t}\n\n\tonResize()\n\t{\n\t\tthis.redraw();\n\t}\n\n\tonChange()\n\t{\n\t\tif (this.options.callback) { this.options.callback.call(this.root, this.root.valuesArray); }\n\t\telse { Trigger(this.root, \"change\"); }\n\t}\n\n\tdistance(a: [number, number], b: [number, number])\n\t{\n\t\treturn Math.sqrt(Math.pow(b[0] - a[0], 2) + Math.pow(b[1] - a[1], 2));\n\t}\n\n\tcomputeSelected(x: number, y: number)\n\t{\n\t\tlet minDist = 100000;\n\t\tconst maxDist = 8; // Pixels\n\t\tlet selected = -1;\n\t\tfor (let i = 0; i < this.root.valuesArray.length; i++)\n\t\t{\n\t\t\tconst value = this.root.valuesArray[i];\n\t\t\tconst pos = this.convert(value) as [number, number];\n\t\t\tif (pos.length >= 2)\n\t\t\t{\n\t\t\t\tconst dist = this.distance([x, y], pos);\n\t\t\t\tif (dist < minDist && dist < maxDist)\n\t\t\t\t{\n\t\t\t\t\tminDist = dist;\n\t\t\t\t\tselected = i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn selected;\n\t}\n\n\tsortValues()\n\t{\n\t\tlet v: number[] | undefined = undefined;\n\t\tif (this.selected != -1)\n\t\t{\n\t\t\tv = this.root.valuesArray[this.selected];\n\t\t}\n\t\tthis.root.valuesArray.sort((a: number[], b: number[]) =>\n\t\t{ return a[0] - b[0]; });\n\n\t\tif (v) { this.selected = this.root.valuesArray.indexOf(v); }\n\t}\n}\n","import { LiteGUIObject } from \"../@types/globals\";\nimport { Trigger } from \"../utilities\";\n\n/**\n * Structure of a list item.\n */\nexport interface ListItem\n{\n\tname: string, title: string, id: string\n}\n\n/**\n * Options for the List widget.\n */\nexport interface ListOptions\n{\n\t/** Parent element to append to */\n\tparent?: LiteGUIObject | HTMLElement;\n\t/** Callback function when selection changes */\n\tcallback?: (value: string | ListItem) => void;\n}\n\n/**\n * Event target interface for List events.\n */\nexport interface ListEventTarget extends EventTarget\n{\n\tdata: string | ListItem;\n\tclassList: DOMTokenList;\n}\n\n/**\n * HTMLLIElement extending interface for list items.\n */\nexport interface ListLIElement extends HTMLLIElement\n{\n\tdata: string | ListItem;\n}\n\n/**\n * List widget.\n * @class List\n */\nexport class List implements LiteGUIObject\n{\n\t/** Root element */\n\troot: HTMLUListElement;\n\t/** Callback function */\n\tcallback?: (value: string | ListItem) => void;\n\n\t/**\n\t * Creates an instance of the List widget.\n\t * @param {string} id - Identifier for the list.\n\t * @param {Array<string | ListItem>} items - Items to display.\n\t * @param {ListOptions} [options] - Configuration options.\n\t */\n\tconstructor(id: string, items: Array<string | ListItem>, options?: ListOptions)\n\t{\n\t\toptions = options! || {};\n\n\t\tconst root = this.root = document.createElement(\"ul\") as HTMLUListElement;\n\t\troot.id = id;\n\t\troot.className = \"litelist\";\n\n\t\tthis.callback = options.callback;\n\n\t\tconst onClickCallback = (e: PointerEvent) =>\n\t\t{\n\t\t\tconst el = e.target as ListEventTarget;\n\t\t\tif (!el) { return; }\n\n\t\t\tconst list = root.querySelectorAll(\".list-item.selected\");\n\t\t\tfor (let j = 0; j < list.length; ++j)\n\t\t\t{\n\t\t\t\tlist[j].classList.remove(\"selected\");\n\t\t\t}\n\t\t\tel.classList.add(\"selected\");\n\t\t\tTrigger(this.root, \"wchanged\", el);\n\n\t\t\tif (this.callback) { this.callback(el.data); }\n\t\t};\n\t\tfor (const i in items)\n\t\t{\n\t\t\tconst liItem = document.createElement(\"li\") as ListLIElement;\n\t\t\tliItem.className = \"list-item\";\n\t\t\tliItem.data = items[i];\n\t\t\tliItem.dataset[\"value\"] = items[i].toString();\n\n\t\t\tlet content = \"\";\n\t\t\tconst item = items[i];\n\t\t\tif (typeof item == \"string\")\n\t\t\t{\n\t\t\t\tcontent = item + \"<span class='arrow'></span>\";\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tcontent = (item.name || item.title || \"\") + \"<span class='arrow'></span>\";\n\t\t\t\tif (item.id)\n\t\t\t\t{\n\t\t\t\t\tliItem.id = item.id;\n\t\t\t\t}\n\t\t\t}\n\t\t\tliItem.innerHTML = content;\n\n\t\t\tliItem.addEventListener(\"click\", onClickCallback.bind(liItem));\n\n\t\t\troot.appendChild(liItem);\n\t\t}\n\n\t\tif (options.parent)\n\t\t{\n\t\t\tif ('root' in options.parent)\n\t\t\t{\n\t\t\t\toptions.parent.root.appendChild(root);\n\t\t\t}\n\t\t\telse if ('appendChild' in options.parent)\n\t\t\t{\n\t\t\t\toptions.parent.appendChild(root);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Gets the selected item.\n\t * @returns {Element | null} The selected element.\n\t */\n\tgetSelectedItem()\n\t{\n\t\treturn this.root.querySelector(\".list-item.selected\");\n\t}\n\n\t/**\n\t * Sets the selected item by name/id.\n\t * @param {string} name - Name or ID of the item to select.\n\t */\n\tsetSelectedItem(name: string)\n\t{\n\t\tconst items = this.root.querySelectorAll(\".list-item\");\n\t\tfor (let i = 0; i < items.length; i++)\n\t\t{\n\t\t\tconst item: ListLIElement = items[i] as ListLIElement;\n\t\t\tif (item.data == name || (typeof item.data !== \"string\" && item.data.id == name))\n\t\t\t{\n\t\t\t\tTrigger(item, \"click\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n","import { LiteGUIObject } from \"../@types/globals\";\n\n/**\n * HTMLSpanElement extending interface for ListBox element.\n */\nexport interface ListBoxSpanElement extends HTMLSpanElement\n{\n\t/** Sets the open/closed state */\n\tsetValue: (value: boolean) => void;\n\t/** Gets the current state */\n\tgetValue: () => string;\n\t/** Sets if the listbox is empty */\n\tsetEmpty: (value: boolean) => void;\n\t/** Expands the listbox */\n\texpand: () => void;\n\t/** Collapses the listbox */\n\tcollapse: () => void;\n\t/** Reference to the ListBox instance */\n\tlistBox: ListBox;\n\t/** Reference to the ListBox instance (alias) */\n\tparent: ListBox\n}\n/**\n * The tiny box to expand the children of a node.\n * @class ListBox\n */\nexport class ListBox implements LiteGUIObject\n{\n\t/** Root element */\n\troot: ListBoxSpanElement;\n\t/** Whether to stop event propagation */\n\tstopPropagation: boolean = false;\n\n\t/**\n\t * Creates an instance of the ListBox widget.\n\t * @param {boolean} state - Initial state (true: open, false: closed).\n\t * @param {Function} onChange - Callback when state changes.\n\t */\n\tconstructor(state: boolean, onChange: (value: string) => void)\n\t{\n\t\tconst element = document.createElement(\"span\") as ListBoxSpanElement;\n\t\tthis.root = element;\n\t\telement.parent = this;\n\t\telement.listBox = this;\n\t\telement.className = \"listbox \" + (state ? \"listopen\" : \"listclosed\");\n\t\telement.innerHTML = state ? \"&#9660;\" : \"&#9658;\";\n\t\telement.dataset.value = state ? \"open\" : \"closed\";\n\n\t\telement.onclick = function (e: PointerEvent)\n\t\t{\n\t\t\telement.setValue(element.dataset.value == \"open\" ? false : true);\n\t\t\tif (element.parent.stopPropagation) { e.stopPropagation(); }\n\t\t};\n\n\t\telement.onchange = function ()\n\t\t{\n\t\t\tonChange(element.dataset.value ?? \"closed\");\n\t\t};\n\n\t\telement.setEmpty = function (value: boolean)\n\t\t{\n\t\t\tif (value)\n\t\t\t{\n\t\t\t\tthis.classList.add(\"empty\");\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.classList.remove(\"empty\");\n\t\t\t}\n\t\t};\n\n\t\telement.setValue = function (value: boolean)\n\t\t{\n\t\t\tif (this.dataset.value == (value ? \"open\" : \"closed\"))\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!value)\n\t\t\t{\n\t\t\t\tthis.dataset.value = \"closed\";\n\t\t\t\tthis.innerHTML = \"&#9658;\";\n\t\t\t\tthis.classList.remove(\"listopen\");\n\t\t\t\tthis.classList.add(\"listclosed\");\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.dataset.value = \"open\";\n\t\t\t\tthis.innerHTML = \"&#9660;\";\n\t\t\t\tthis.classList.add(\"listopen\");\n\t\t\t\tthis.classList.remove(\"listclosed\");\n\t\t\t}\n\n\t\t\tif (onChange)\n\t\t\t{\n\t\t\t\tonChange(this.dataset.value);\n\t\t\t}\n\t\t};\n\n\t\telement.expand = function ()\n\t\t{\n\t\t\tthis.setValue(true);\n\t\t};\n\n\t\telement.collapse = function ()\n\t\t{\n\t\t\tthis.setValue(false);\n\t\t};\n\t}\n\n\t/**\n\t * Sets the value of the listbox (open/closed).\n\t * @param {boolean} value - True to open, false to collapse.\n\t */\n\tsetValue(value: boolean)\n\t{\n\t\tthis.root.setValue(value);\n\t}\n\n\t/**\n\t * Gets the current value (\"open\" or \"closed\").\n\t * @returns {string} The current state.\n\t */\n\tgetValue()\n\t{\n\t\treturn this.root.dataset.value;\n\t}\n}\n","import { LiteGUIObject } from \"../@types/globals\";\n\n/**\n * Options for the SearchBox widget.\n */\nexport interface SearchBoxOptions\n{\n\t/** Placeholder text */\n\tplaceholder?: string;\n\t/** Callback function executed when value changes */\n\tcallback?: (value: string) => void;\n}\n\n/**\n * SearchBox widget.\n * @class SearchBox\n */\nexport class SearchBox implements LiteGUIObject\n{\n\t/** Root element of the widget */\n\troot: HTMLDivElement;\n\t/** Configuration options */\n\toptions: SearchBoxOptions;\n\t/** Current value */\n\tvalue: string;\n\t/** Input element */\n\tinput: HTMLInputElement;\n\t/** Callback function executed when value changes */\n\tcallback?: (value: string) => void;\n\n\t/**\n\t * Creates an instance of the SearchBox widget.\n\t * @param {string} [value=''] - Initial value.\n\t * @param {SearchBoxOptions} [options] - Configuration options.\n\t */\n\tconstructor(value: string = '', options: SearchBoxOptions = {})\n\t{\n\t\tthis.options = options;\n\t\tthis.value = value;\n\t\tconst element = document.createElement(\"div\") as HTMLDivElement;\n\t\telement.className = \"litegui searchbox\";\n\t\tconst placeholder = options.placeholder ?? \"Search\";\n\t\telement.innerHTML = `<input value='${value}' placeholder='${placeholder}'/>`;\n\t\tthis.input = element.querySelector(\"input\")!;\n\t\tthis.root = element;\n\n\t\tthis.input.onchange = () =>\n\t\t{\n\t\t\tconst value = this.input.value;\n\t\t\tif (options.callback) { options.callback(value); }\n\t\t};\n\t}\n\n\t/**\n\t * Sets the value of the search box.\n\t * @param {string} value - New value.\n\t */\n\tsetValue(value: string)\n\t{\n\t\tthis.input.value = value;\n\t\tif (this.input.onchange) { this.input.onchange(new Event(\"change\")); }\n\t}\n\n\t/**\n\t * Gets the current value of the search box.\n\t * @returns {string} The current value.\n\t */\n\tgetValue()\n\t{\n\t\treturn this.input.value;\n\t}\n}\n","import { Trigger } from \"../utilities\";\nimport { LiteGUIObject } from \"../@types/globals\";\n\n/**\n * Configuration options for the Slider widget.\n */\nexport interface SliderOptions\n{\n\t/** Minimum value */\n\tmin?: number;\n\t/** Maximum value */\n\tmax?: number;\n}\n\n/**\n * Slider widget.\n * @class Slider\n */\nexport class Slider implements LiteGUIObject\n{\n\t/** Root element of the widget */\n\troot: HTMLDivElement;\n\t/** Current value */\n\tvalue: number;\n\t/** Configuration options */\n\toptions: SliderOptions;\n\t/** Document reference for drag events */\n\tdocBinded?: Document;\n\t/** Callback executing when value changes */\n\tonChange?: (value: number) => void;\n\tmouseMoveBind = this.onMouseMove.bind(this);\n\tmouseUpBind = this.onMouseUp.bind(this);\n\n\t/**\n\t * Creates an instance of the Slider widget.\n\t * @param {number} value - Initial value.\n\t * @param {SliderOptions} [options] - Configuration options.\n\t */\n\tconstructor(value: number, options?: SliderOptions)\n\t{\n\t\tthis.options = options ?? {};\n\n\t\tconst root = this.root = document.createElement(\"div\") as HTMLDivElement;\n\t\tthis.value = value;\n\t\troot.className = \"liteslider\";\n\t\tthis.docBinded = root.ownerDocument;\n\t\tthis.root.addEventListener(\"mousedown\", this.onMouseDown.bind(this));\n\t\tthis.setValue(value);\n\t}\n\n\t/**\n\t * Sets the value from an X coordinate (relative to client).\n\t * @param {number} x - X coordinate.\n\t */\n\tsetFromX(x: number)\n\t{\n\t\tconst rect = this.root.getBoundingClientRect();\n\t\tif (!rect) { return; }\n\t\tconst width = rect.width;\n\t\tconst norm = x / width;\n\t\tconst min = this.options.min ?? 0.0;\n\t\tconst max = this.options.max ?? 1.0;\n\t\tconst range = max - min;\n\t\tthis.setValue(range * norm + min);\n\t}\n\n\t/**\n\t * Handles mouse down event.\n\t * @param {MouseEvent} e - The mouse event.\n\t */\n\tonMouseDown(e: MouseEvent)\n\t{\n\t\tlet mouseX: number;\n\t\tif (e.offsetX)\n\t\t{\n\t\t\tmouseX = e.offsetX;\n\t\t}\n\t\telse if (e.layerX)\n\t\t{\n\t\t\tmouseX = e.layerX;\n\t\t}\n\n\t\tthis.setFromX(mouseX!);\n\n\t\tif (!this.docBinded) { return; }\n\n\t\tthis.root.addEventListener(\"mousemove\", this.mouseMoveBind, false);\n\t\tthis.root.addEventListener(\"mouseup\", this.mouseUpBind, false);\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t}\n\n\t/**\n\t * Handles mouse move event (dragging).\n\t * @param {MouseEvent} e - The mouse event.\n\t */\n\tonMouseMove(e: MouseEvent)\n\t{\n\t\tconst rect = this.root.getBoundingClientRect();\n\t\tif (!rect) { return; }\n\t\tconst x = e.x === undefined ? e.pageX : e.x;\n\t\tconst mouseX = x - rect.left;\n\t\tthis.setFromX(mouseX);\n\t\tif (typeof e.preventDefault == 'function')\n\t\t{e.preventDefault();}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Handles mouse up event (drop).\n\t * @param {MouseEvent} e - The mouse event.\n\t */\n\tonMouseUp(e: MouseEvent)\n\t{\n\t\tif (!this.docBinded) { return false; }\n\t\tthis.root.removeEventListener(\"mousemove\", this.mouseMoveBind, false);\n\t\tthis.root.removeEventListener(\"mouseup\", this.mouseUpBind, false);\n\t\tif (typeof e.preventDefault == 'function')\n\t\t{e.preventDefault();}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Sets the value of the slider.\n\t * @param {number} value - New value.\n\t * @param {boolean} [skipEvent=false] - Whether to skip triggering events.\n\t */\n\tsetValue(value: number, skipEvent: boolean = false)\n\t{\n\t\t// Var width = canvas.getClientRects()[0].width;\n\t\tconst min = this.options.min || 0.0;\n\t\tconst max = this.options.max || 1.0;\n\t\tif (value < min) { value = min; }\n\t\telse if (value > max) { value = max; }\n\t\tconst range = max - min;\n\t\tconst norm = (value - min) / range;\n\t\tconst percentage = (norm * 100).toFixed(1) + \"%\";\n\n\t\tconst percentage2 = \"calc(\" + percentage + \" + 2px)\";\n\t\tthis.root.style.background = \"linear-gradient(to right, #999 \" + percentage + \", #FC0 \" + percentage + \", #FC0 \" + percentage2 + \", #333 \" + percentage2 + \")\";\n\n\t\tif (value != this.value)\n\t\t{\n\t\t\tthis.value = value;\n\t\t\tif (!skipEvent)\n\t\t\t{\n\t\t\t\tTrigger(this.root, \"change\", value);\n\t\t\t\tif (this.onChange) { this.onChange(value); }\n\t\t\t}\n\t\t}\n\t}\n}\n","\nimport { Trigger } from \"../utilities\";\nimport { ListBox, ListBoxSpanElement } from \".\";\nimport { LiteGUIObject } from \"../@types/globals\";\n\n/**\n * EventTarget extending interface for Tree related events.\n */\nexport interface TreeEventTarget extends EventTarget\n{\n\tparentNode: TreeNode;\n}\n\n/**\n * Configuration options for the Tree widget.\n */\nexport interface TreeOptions\n{\n\tallowDrag?: boolean;\n\tallowRename?: boolean;\n\tallowMultiSelection?: boolean;\n\tselected?: boolean;\n\tcollapsed?: boolean;\n\tcollapsed_depth?: number;\n\tindentOffset?: number;\n\tid?: string;\n\theight?: string | number;\n}\n\n/**\n * HTMLDivElement extending interface for the title element of a tree node.\n */\nexport interface TreeTitleElement extends HTMLDivElement\n{\n\toldName?: string;\n\tisEditing?: boolean;\n}\n\nexport interface TreeCollection extends HTMLCollection\n{\n\t[index: number]: TreeNode\n}\n\n/**\n * HTMLLIElement extending interface for a tree node.\n */\nexport interface TreeNode extends HTMLLIElement\n{\n\tid: string;\n\tdata: TreeData;\n\tparentId: string;\n\tlistBox?: ListBoxSpanElement;\n\ttitleElement: TreeTitleElement;\n\tdataset: {\n\t\titemID: string;\n\t\t[index: string]: string };\n\tchildNodes: NodeListOf<TreeNode>;\n\tchildren: TreeCollection;\n\tcontent?: string;\n\tskipDrag?: boolean;\n\tonDragData?: () => Record<string, string>;\n\tcallback?: (node?: TreeNode) => boolean;\n\tvisible?: boolean;\n\tpostContent?: string;\n\tpreContent?: string;\n\tparentNode: TreeNode | ParentNode | null;\n}\n\n/**\n * Data structure representing a tree node's data.\n */\nexport interface TreeData\n{\n\tchildren?: TreeData[];\n\tonDragData?: () => Record<string, string>;\n\tskipDrag?: boolean;\n\t[index: string]: string | number | boolean | TreeData | TreeData[] | ((...args: unknown[]) => unknown) | Record<string, unknown> | undefined;\n}\n\n/**\n * Root element for the Tree widget.\n */\nexport interface TreeRoot extends HTMLDivElement\n{\n\tchildNodes: NodeListOf<TreeNode>;\n\tchildren: TreeCollection;\n}\n\n/**\n * Widget to create interactive trees (useful for folders or hierarchies).\n * @class Tree\n */\nexport class Tree implements LiteGUIObject\n{\n\troot: TreeRoot;\n\ttree: TreeData;\n\toptions: TreeOptions;\n\trootItem?: TreeNode;\n\tparentNode?: ParentNode;\n\tindentOffset: number;\n\tcollapsedDepth: number;\n\tonItemSelected?: (data: TreeData, node: TreeNode) => void;\n\tonItemContextMenu?: (event: PointerEvent, { item, data }: { item: TreeNode, data: TreeData }) => void;\n\tonBackgroundClicked?: (event: PointerEvent, tree: Tree) => void;\n\tonContextMenu?: (event: PointerEvent) => void;\n\tonItemAddToSelection?: (data: TreeData, node: TreeNode) => void;\n\tonMoveItem?: (item?: TreeNode, parent?: TreeNode) => boolean;\n\tonDropItem?: (event: DragEvent, data: TreeData) => void;\n\n\tprotected _skipScroll: boolean = false;\n\n\tstatic INDENT = 20;\n\n\t/**\n\t * Creates an instance of the Tree widget.\n\t * @param {TreeData} data - The data to initialize the tree with.\n\t * @param {TreeOptions} [options] - Configuration options.\n\t */\n\tconstructor(data: TreeData, options?: TreeOptions)\n\t{\n\t\toptions = options ?? {};\n\n\t\tconst root = document.createElement(\"div\") as TreeRoot;\n\t\tthis.root = root;\n\t\tif (options.id) { root.id = options.id; }\n\n\t\troot.className = \"litetree\";\n\t\tthis.tree = data;\n\t\toptions = options ?? { allowRename: false, allowDrag: true, allowMultiSelection: false };\n\t\tthis.options = options;\n\t\tthis.indentOffset = options.indentOffset || 0;\n\n\t\tif (options.height)\n\t\t{\n\t\t\tthis.root.style.height = typeof (options.height) == \"string\" ? options.height : Math.round(options.height) + \"px\";\n\t\t}\n\n\t\tthis.collapsedDepth = 3;\n\t\tif (options.collapsed_depth != null) { this.collapsedDepth = options.collapsed_depth; }\n\n\t\t// Bg click\n\t\troot.addEventListener(\"click\", (e) =>\n\t\t{\n\t\t\tif (e.target != this.root) { return; }\n\t\t\tif (this.onBackgroundClicked) { this.onBackgroundClicked(e, this); }\n\t\t});\n\n\t\t// Bg click right mouse\n\t\troot.addEventListener(\"contextmenu\", (e: PointerEvent) =>\n\t\t{\n\t\t\tif (e.button != 2) { return false; } // Right button\n\n\t\t\tif (this.onContextMenu) { this.onContextMenu(e); }\n\t\t\te.preventDefault();\n\t\t\treturn false;\n\t\t});\n\n\n\t\tconst rootItem = this.createAndInsert(data, options);\n\t\tif (!rootItem)\n\t\t{\n\t\t\tthrow (\"Error in LiteGUI.Tree, createAndInsert returned null\");\n\t\t}\n\t\trootItem.className += \" root_item\";\n\t\tthis.rootItem = rootItem;\n\n\t}\n\n\t/**\n\t * Update tree with new data (old data will be thrown away).\n\t * @param {TreeData} data - New data to display references.\n\t */\n\tupdateTree(data: TreeData)\n\t{\n\t\tthis.root.innerHTML = \"\";\n\t\tconst rootItem = this.createAndInsert(data, this.options);\n\t\tif (rootItem)\n\t\t{\n\t\t\trootItem.className += \" root_item\";\n\t\t\tthis.rootItem = rootItem;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.rootItem = undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Inserts an item into the tree.\n\t * @param {TreeData | TreeNode} data - Data to create the item from.\n\t * @param {string} [parentID] - ID of the parent item.\n\t * @param {number} [position] - Index in case you want to add it before the last position.\n\t * @param {TreeOptions} [options] - Options for the item.\n\t * @returns {TreeNode | undefined} The created item.\n\t */\n\tinsertItem(data: TreeData | TreeNode, parentID: string | undefined, position: number, options: TreeOptions = {}): TreeNode | undefined\n\t{\n\t\tif (!parentID)\n\t\t{\n\t\t\tconst root = this.root.childNodes[0];\n\t\t\tif (root)\n\t\t\t{\n\t\t\t\tparentID = root.dataset.itemID;\n\t\t\t}\n\t\t}\n\n\t\tconst element = this.createAndInsert(data, options, parentID, position);\n\n\t\t// Update parent collapse button\n\t\tif (parentID)\n\t\t{\n\t\t\tconst r = this._findElement(parentID);\n\t\t\tif (r)\n\t\t\t{\n\t\t\t\tthis._updateListBox(r); // No options here, this is the parent\n\t\t\t}\n\t\t}\n\n\t\treturn element;\n\t}\n\n\t/**\n\t * Creates and inserts an item.\n\t * @param {TreeData | TreeNode} data - Data for the item.\n\t * @param {TreeOptions} options - Options for the tree.\n\t * @param {string} [parentID] - Parent ID.\n\t * @param {number} [elementIndex] - Index to insert at.\n\t * @returns {TreeNode | undefined} The created node.\n\t */\n\tcreateAndInsert(data: TreeData | TreeNode, options: TreeOptions, parentID?: string, elementIndex?: number): TreeNode | undefined\n\t{\n\t\t// Find parent\n\t\tlet parentIndex = -1; // Root\n\t\tif (typeof parentID === \"string\")\n\t\t{\n\t\t\tparentIndex = this._findElementIndex(parentID);\n\t\t}\n\n\t\tlet parent: TreeNode | undefined = undefined;\n\t\tlet childLevel = 0;\n\n\t\t// Find level\n\t\tif (parentIndex != -1)\n\t\t{\n\t\t\tparent = this.root.childNodes[parentIndex];\n\t\t\tchildLevel = parseInt(parent.dataset.level ?? \"0\") + 1;\n\t\t}\n\n\t\t// Create\n\t\tconst element = this.createTreeItem(data, options, childLevel.toString());\n\t\tif (!element) { return; } // Error creating element\n\n\t\telement.parentId = parentID ?? \"0\";\n\n\t\t// Check\n\t\tconst existingItem = this.getItem(element.dataset.itemID as string);\n\t\tif (existingItem) { console.warn(\"There another item with the same ID in this tree\"); }\n\n\t\t// Insert\n\t\tif (parentIndex == -1)\n\t\t{\n\t\t\tthis.root.appendChild(element);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis._insertInside(element, parentIndex, elementIndex);\n\t\t}\n\n\t\t// Compute visibility according to parents\n\t\tif (parent && parentID && !this._isNodeChildrenVisible(parentID))\n\t\t{\n\t\t\telement.classList.add(\"hidden\");\n\t\t}\n\n\t\t// Children\n\t\tif (\"children\" in data && Array.isArray(data.children))\n\t\t{\n\t\t\tfor (const child of data.children)\n\t\t\t{\n\t\t\t\tif (\"id\" in child)\n\t\t\t\t{\n\t\t\t\t\tthis.createAndInsert(child, options, element.dataset.itemID);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Update collapse button\n\t\tthis._updateListBox(element, options, childLevel);\n\n\t\tif (options && options.selected)\n\t\t{\n\t\t\tthis._markAsSelected(element, true);\n\t\t}\n\n\t\treturn element;\n\t}\n\n\t/**\n\t * Inserts a node inside another node (parent).\n\t * @private\n\t * @param {TreeNode} element - The node to insert.\n\t * @param {number} parentIndex - The index of the parent node.\n\t * @param {number} [offsetIndex] - Optional offset index.\n\t * @param {number} [level] - Optional level.\n\t */\n\tprivate _insertInside(element: TreeNode, parentIndex: number, offsetIndex?: number, level?: number)\n\t{\n\t\tconst parent = this.root.childNodes[parentIndex];\n\t\tif (!parent)\n\t\t{\n\t\t\tthrow (`No parent node found, index: ${parentIndex}, nodes: ${this.root.childNodes.length}`);\n\t\t}\n\n\t\tconst parentLevel = parseInt(parent.dataset.level ?? \"0\");\n\t\tconst childLevel = level !== undefined ? level : parentLevel + 1;\n\n\t\tconst indent = element.querySelector(\".indentblock\") as HTMLSpanElement;\n\t\tif (indent)\n\t\t{\n\t\t\tindent.style.paddingLeft = ((childLevel + this.indentOffset) * Tree.INDENT) + \"px\"; // Inner padding\n\t\t}\n\t\telement.dataset.level = childLevel.toString();\n\n\t\t// Update level class\n\t\tconst classes = Array.from(element.classList);\n\t\tfor (const cls of classes)\n\t\t{\n\t\t\tif (cls.startsWith(\"ltree-level-\"))\n\t\t\t{\n\t\t\t\telement.classList.remove(cls);\n\t\t\t}\n\t\t}\n\t\telement.classList.add(\"ltree-level-\" + childLevel);\n\n\t\t// Under level nodes\n\t\tfor (let j = parentIndex + 1; j < this.root.childNodes.length; ++j)\n\t\t{\n\t\t\tconst newChildNode = this.root.childNodes[j];\n\t\t\tif (!newChildNode.classList || !newChildNode.classList.contains(\"ltreeitem\"))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst currentLevel = parseInt(newChildNode.dataset.level ?? \"\");\n\n\t\t\tif (currentLevel == childLevel && offsetIndex)\n\t\t\t{\n\t\t\t\toffsetIndex--;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Last position\n\t\t\tif (currentLevel < childLevel || (offsetIndex === 0 && currentLevel === childLevel))\n\t\t\t{\n\t\t\t\tthis.root.insertBefore(element, newChildNode);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// Ended\n\t\tthis.root.appendChild(element);\n\t}\n\n\t/**\n\t * Creates a tree item HTML element.\n\t * @param {TreeData | TreeNode} data - Data for the item.\n\t * @param {TreeOptions} options - Options.\n\t * @param {string} level - Level of indentation.\n\t * @returns {TreeNode | undefined} The created tree node.\n\t */\n\tcreateTreeItem(data: TreeData | TreeNode, options: TreeOptions, level: string): TreeNode | undefined\n\t{\n\t\tif (!data)\n\t\t{\n\t\t\tconsole.error(\"Tree item cannot be null\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst isHTMLElement = data instanceof HTMLElement;\n\n\t\toptions = options ?? this.options;\n\n\t\tconst root = document.createElement(\"li\") as TreeNode;\n\t\troot.className = \"ltreeitem\";\n\n\t\t// IDs are not used because they could collide, classes instead\n\t\tif (\"id\" in data && typeof data.id === \"string\")\n\t\t{\n\t\t\tconst safeID = data.id.replace(/\\s/g, \"_\");\n\t\t\troot.className += ` ltreeitem-${safeID}`;\n\t\t\troot.dataset.itemID = data.id;\n\t\t}\n\n\t\tif (\"dataset\" in data && typeof data.dataset === \"object\")\n\t\t{\n\t\t\tfor (const i in data.dataset)\n\t\t\t{\n\t\t\t\tconst dataset = data.dataset as Record<string, string>;\n\t\t\t\tif (typeof dataset[i] === \"string\")\n\t\t\t\t{\n\t\t\t\t\troot.dataset[i] = dataset[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (isHTMLElement && data.data)\n\t\t{\n\t\t\troot.data = data.data;\n\t\t}\n\t\telse\n\t\t{\n\t\t\troot.data = data as TreeData;\n\t\t}\n\n\t\tif (level !== undefined)\n\t\t{\n\t\t\troot.dataset.level = level;\n\t\t\troot.classList.add(\"ltree-level-\" + level);\n\t\t}\n\n\t\tconst titleElement = document.createElement(\"div\");\n\t\ttitleElement.className = \"ltreeitemtitle\";\n\t\tif (\"className\" in data && typeof data.className === \"string\")\n\t\t{\n\t\t\ttitleElement.className += ` ${data.className}`;\n\t\t}\n\n\t\ttitleElement.innerHTML = \"<span class='precontent'></span><span class='indentblock'></span><span class='collapsebox'></span><span class='incontent'></span><span class='postcontent'></span>\";\n\n\t\tconst content_text = (\"content\" in data ? data.content : (\"id\" in data ? data.id : \"\")) as string;\n\t\tconst inContent = titleElement.querySelector(\".incontent\") as HTMLSpanElement;\n\t\tif (inContent)\n\t\t{\n\t\t\tinContent.innerHTML = content_text;\n\t\t}\n\n\t\tif (\"preContent\" in data && typeof data.preContent === \"string\")\n\t\t{\n\t\t\tconst preContent = titleElement.querySelector(\".precontent\");\n\t\t\tif (preContent)\n\t\t\t{\n\t\t\t\tpreContent.innerHTML = data.preContent;\n\t\t\t}\n\t\t}\n\n\t\tif (\"postContent\" in data && typeof data.postContent === \"string\")\n\t\t{\n\t\t\tconst postContent = titleElement.querySelector(\".postcontent\");\n\t\t\tif (postContent)\n\t\t\t{\n\t\t\t\tpostContent.innerHTML = data.postContent;\n\t\t\t}\n\t\t}\n\n\t\troot.appendChild(titleElement);\n\t\troot.titleElement = titleElement;\n\n\t\tif (\"visible\" in data && data.visible === false)\n\t\t{\n\t\t\troot.style.display = \"none\";\n\t\t}\n\n\t\tconst row = root;\n\t\tconst onNodeSelected = (e: PointerEvent) =>\n\t\t{\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\n\t\t\tconst node = row;\n\t\t\tconst title = node.titleElement;\n\n\t\t\tif (title?.isEditing) { return; }\n\n\t\t\tif (e.ctrlKey && this.options.allowMultiSelection)\n\t\t\t{\n\t\t\t\t// Check if selected\n\t\t\t\tif (this._isNodeSelected(node))\n\t\t\t\t{\n\t\t\t\t\tnode.classList.remove(\"selected\");\n\t\t\t\t\tTrigger(this.root, \"item_remove_from_selection\", { item: node, data: node.data }); // LEGACY\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Mark as selected\n\t\t\t\tthis._markAsSelected(node, true);\n\t\t\t\tTrigger(this.root, \"item_add_to_selection\", { item: node, data: node.data }); // LEGACY\n\t\t\t\tlet r = false;\n\t\t\t\tif (isHTMLElement && data.callback)\n\t\t\t\t{\n\t\t\t\t\tr = data.callback.call(this, node);\n\t\t\t\t}\n\n\t\t\t\tif (!r && this.onItemAddToSelection)\n\t\t\t\t{\n\t\t\t\t\tthis.onItemAddToSelection(node.data, node);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (e.shiftKey && this.options.allowMultiSelection)\n\t\t\t{\n\t\t\t\t// Select from current selection till here current\n\t\t\t\tconst last_item = this.getSelectedItem();\n\t\t\t\tif (!last_item) { return; }\n\n\t\t\t\tif (last_item === node) { return; }\n\n\t\t\t\tconst nodeList = Array.prototype.slice.call(last_item.parentNode!.children);\n\t\t\t\tconst last_index = nodeList.indexOf(last_item);\n\t\t\t\tconst current_index = nodeList.indexOf(node);\n\n\t\t\t\tconst items = current_index > last_index ? nodeList.slice(last_index, current_index) : nodeList.slice(current_index, last_index);\n\t\t\t\tfor (let i = 0; i < items.length; ++i)\n\t\t\t\t{\n\t\t\t\t\tconst item = items[i];\n\t\t\t\t\t// Mark as selected\n\t\t\t\t\tthis._markAsSelected(item, true);\n\t\t\t\t\tTrigger(this.root, \"item_add_to_selection\", { item: item, data: item.data }); // LEGACY\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// Mark as selected\n\t\t\t\tthis._markAsSelected(node);\n\n\t\t\t\tthis._skipScroll = true; // Avoid scrolling while user clicks something\n\t\t\t\tTrigger(this.root, \"item_selected\", { item: node, data: node.data }); // LEGACY\n\t\t\t\tlet r = false;\n\t\t\t\tif (isHTMLElement && data.callback)\n\t\t\t\t{\n\t\t\t\t\tr = data.callback.call(this, node);\n\t\t\t\t}\n\n\t\t\t\tif (!r && this.onItemSelected)\n\t\t\t\t{\n\t\t\t\t\tthis.onItemSelected(node.data, node);\n\t\t\t\t}\n\t\t\t\tthis._skipScroll = false;\n\t\t\t}\n\t\t};\n\n\t\tconst onNodeDblClicked = (e: MouseEvent) =>\n\t\t{\n\t\t\tconst node = row;\n\t\t\tconst title = node.titleElement.querySelector(\".incontent\") as TreeTitleElement;\n\n\t\t\tTrigger(this.root, \"item_dblclicked\", node); // LEGACY\n\n\t\t\tif (!title.isEditing && this.options.allowRename)\n\t\t\t{\n\t\t\t\ttitle.isEditing = true;\n\t\t\t\ttitle.oldName = title.innerHTML;\n\t\t\t\tconst that2 = title;\n\t\t\t\ttitle.innerHTML = `<input type='text' value='${title.innerHTML}' />`;\n\t\t\t\tconst input = title.querySelector(\"input\");\n\n\t\t\t\tif (input)\n\t\t\t\t{\n\t\t\t\t\t// Loose focus when renaming\n\t\t\t\t\tinput.addEventListener(\"blur\", (e: FocusEvent) =>\n\t\t\t\t\t{\n\t\t\t\t\t\tconst target = e?.target;\n\t\t\t\t\t\tconst newName = target ? (target as HTMLInputElement).value ?? \"\" : \"\";\n\t\t\t\t\t\t// Bug fix, if I destroy input inside the event, it produce a NotFoundError\n\t\t\t\t\t\tsetTimeout(() => { that2.innerHTML = newName; }, 1);\n\t\t\t\t\t\tdelete that2.isEditing;\n\t\t\t\t\t\tTrigger(this.root, \"item_renamed\", { oldName: that2.oldName, newName: newName, item: node, data: node.data });\n\t\t\t\t\t\tdelete that2.oldName;\n\t\t\t\t\t});\n\n\t\t\t\t\t// Finishes renaming\n\t\t\t\t\tinput.addEventListener(\"keydown\", (e: KeyboardEvent) =>\n\t\t\t\t\t{\n\t\t\t\t\t\tif (e.key != \"Enter\") { return; }\n\t\t\t\t\t\tinput.blur();\n\t\t\t\t\t});\n\n\t\t\t\t\t// Set on focus\n\t\t\t\t\tinput.focus();\n\t\t\t\t}\n\n\t\t\t\te.preventDefault();\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t};\n\t\trow.addEventListener(\"click\", onNodeSelected.bind(row));\n\t\trow.addEventListener(\"dblclick\", onNodeDblClicked.bind(row));\n\t\tconst contextMenuCallback = (e: PointerEvent) =>\n\t\t{\n\t\t\tconst item = row;\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\n\t\t\tif (e.button != 2) { return; } // Right button\n\n\t\t\tif (this.onItemContextMenu)\n\t\t\t{\n\t\t\t\treturn this.onItemContextMenu(e, { item: item, data: item.data });\n\t\t\t}\n\n\t\t\treturn false;\n\t\t};\n\t\trow.addEventListener(\"contextmenu\", contextMenuCallback);\n\n\t\t// Dragging element on tree\n\t\tconst draggableElement = titleElement;\n\t\tif (this.options.allowDrag)\n\t\t{\n\t\t\tdraggableElement.draggable = true;\n\n\t\t\t// Starts dragging this element\n\t\t\tdraggableElement.addEventListener(\"dragstart\", (ev: DragEvent) =>\n\t\t\t{\n\t\t\t\tev.dataTransfer?.setData(\"itemID\",\n\t\t\t\t\t(draggableElement.parentNode && \"dataset\" in draggableElement.parentNode &&\n\t\t\t\t\t\tdraggableElement.parentNode.dataset ?\n\t\t\t\t\t\t(draggableElement.parentNode as TreeNode).dataset.itemID ?? \"\" : \"\"));\n\t\t\t\tif (data.onDragData)\n\t\t\t\t{\n\t\t\t\t\tconst dragData = data.onDragData();\n\t\t\t\t\tif (dragData)\n\t\t\t\t\t{\n\t\t\t\t\t\tfor (const i in dragData)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tev.dataTransfer?.setData(i, dragData[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tlet count = 0;\n\n\t\t// Something being dragged entered\n\t\tdraggableElement.addEventListener(\"dragenter\", (ev) =>\n\t\t{\n\t\t\tev.preventDefault();\n\t\t\tif (\"skipDrag\" in data && data.skipDrag) { return false; }\n\n\t\t\tif (count == 0) { titleElement.classList.add(\"dragover\"); }\n\t\t\tcount++;\n\t\t\treturn;\n\t\t});\n\n\t\tdraggableElement.addEventListener(\"dragleave\", (ev) =>\n\t\t{\n\t\t\tev.preventDefault();\n\t\t\tcount--;\n\t\t\tif (count == 0)\n\t\t\t{\n\t\t\t\ttitleElement.classList.remove(\"dragover\");\n\t\t\t}\n\t\t\treturn;\n\t\t});\n\n\t\t// Test if allows to drag stuff on top?\n\t\tdraggableElement.addEventListener(\"dragover\", _onDragOver);\n\t\tfunction _onDragOver(ev: DragEvent)\n\t\t{\n\t\t\tev.preventDefault();\n\t\t}\n\n\t\tdraggableElement.addEventListener(\"drop\", (ev: DragEvent) =>\n\t\t{\n\t\t\tconst el = ev.target as HTMLElement;\n\t\t\tdraggableElement.classList.remove(\"dragover\");\n\t\t\tev.preventDefault();\n\t\t\tcount = 0;\n\t\t\tif (\"skipDrag\" in data && data.skipDrag) { return false; }\n\n\t\t\tconst itemID = ev.dataTransfer?.getData(\"itemID\");\n\t\t\t// Find the closest tree item (li) being dropped onto\n\t\t\tconst parentNode = el.closest(\"li\") as TreeNode;\n\n\t\t\tif (!itemID)\n\t\t\t{\n\t\t\t\tTrigger(this.root, \"drop_on_item\", { item: el, event: ev });\n\t\t\t\t// Use parentNode data if available, otherwise fallback (or just don't crash)\n\t\t\t\tif (this.onDropItem && parentNode) { this.onDropItem(ev, parentNode.data); }\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!parentNode || !(\"dataset\" in parentNode)) { return; }\n\t\t\tconst parentID = parentNode.dataset.itemID;\n\n\t\t\tif (parentID && (!this.onMoveItem || (this.onMoveItem && this.onMoveItem(this.getItem(itemID), this.getItem(parentID)) != false)))\n\t\t\t{\n\t\t\t\tif (this.moveItem(itemID, parentID))\n\t\t\t\t{\n\t\t\t\t\tTrigger(this.root, \"item_moved\", { item: this.getItem(itemID), parent_item: this.getItem(parentID) });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.onDropItem) { this.onDropItem(ev, parentNode.data); }\n\t\t\treturn;\n\t\t});\n\n\t\treturn root;\n\t}\n\n\t/**\n\t * Remove from the tree the items that do not have a name that matches the string.\n\t * @param {string} name - The string to search for.\n\t */\n\tfilterByName(name: string): void\n\t{\n\t\tfor (let i = 0; i < this.root.childNodes.length; ++i)\n\t\t{\n\t\t\tconst childNode = this.root.childNodes[i] as TreeNode; // Ltreeitem\n\t\t\tif (!childNode.classList || !childNode.classList.contains(\"ltreeitem\"))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst content = childNode.querySelector(\".incontent\");\n\t\t\tif (!content) { continue; }\n\n\t\t\tconst str = content.innerHTML.toLowerCase();\n\n\t\t\tif (!name || str.indexOf(name.toLowerCase()) != -1)\n\t\t\t{\n\t\t\t\tif (childNode.data && childNode.data.visible)\n\t\t\t\t{\n\t\t\t\t\tchildNode.classList.remove(\"filtered\");\n\t\t\t\t}\n\t\t\t\tconst indent = childNode.querySelector(\".indentblock\") as HTMLElement;\n\t\t\t\tif (indent)\n\t\t\t\t{\n\t\t\t\t\tif (name)\n\t\t\t\t\t{\n\t\t\t\t\t\tindent.style.paddingLeft = \"0px\";\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tindent.style.paddingLeft = /* PaddingLeft = */ ((parseInt(childNode.dataset.level ?? \"\") + this.indentOffset) * Tree.INDENT) + \"px\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tchildNode.classList.add(\"filtered\");\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Remove from the tree the items that do not match the rule.\n\t * @param {Function} filterCallback - Callback that returns true if item should be kept.\n\t * @param {string} name - Name to pass to the callback.\n\t */\n\tfilterByRule(filterCallback: (data: TreeData, content: HTMLElement, name: string) => boolean,\n\t\tname: string): void\n\t{\n\t\tif (!filterCallback) { throw (\"filterByRule requires a callback\"); }\n\t\tfor (let i = 0; i < this.root.childNodes.length; ++i)\n\t\t{\n\t\t\tconst childNode = this.root.childNodes[i] as TreeNode; // Ltreeitem\n\t\t\tif (!childNode.classList || !childNode.classList.contains(\"ltreeitem\"))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst content = childNode.querySelector(\".incontent\") as HTMLElement;\n\t\t\tif (!content) { continue; }\n\n\t\t\tif (filterCallback(childNode.data, content, name))\n\t\t\t{\n\t\t\t\tif (childNode.data && childNode.data.visible !== false)\n\t\t\t\t{\n\t\t\t\t\tchildNode.classList.remove(\"filtered\");\n\t\t\t\t}\n\t\t\t\tconst indent = childNode.querySelector(\".indentblock\") as HTMLElement;\n\t\t\t\tif (indent)\n\t\t\t\t{\n\t\t\t\t\tif (name)\n\t\t\t\t\t{\n\t\t\t\t\t\tindent.style.paddingLeft = \"0px\";\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tindent.style.paddingLeft = ((parseInt(childNode.dataset.level ?? \"\") + this.indentOffset) * Tree.INDENT) + \"px\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tchildNode.classList.add(\"filtered\");\n\t\t\t}\n\t\t}\n\t}\n\n\n\t/**\n\t * Get the item with that id, returns the HTML element.\n\t * @param {string | TreeNode} id - ID or the node itself.\n\t * @returns {TreeNode | undefined} The tree node.\n\t */\n\tgetItem(id: string | TreeNode): TreeNode | undefined\n\t{\n\t\tif (!id) { return undefined; }\n\n\t\tif (typeof id != \"string\" && id.classList) { return id; } // If it is already a node\n\n\t\tfor (let i = 0; i < this.root.childNodes.length; ++i)\n\t\t{\n\t\t\tconst childNode = this.root.childNodes[i];\n\t\t\tif (!childNode.classList || !childNode.classList.contains(\"ltreeitem\"))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (childNode.dataset.itemID === id)\n\t\t\t{\n\t\t\t\treturn childNode;\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * In case an item is collapsed, it expands it to show children.\n\t * @param {string | TreeNode} id - ID or the node to expand.\n\t * @param {boolean} [parents] - If true, expands parents as well.\n\t */\n\texpandItem(id: string | TreeNode, parents: boolean): void\n\t{\n\t\tconst item = this.getItem(id);\n\t\tif (!item) { return; }\n\t\tif (typeof item == \"string\") { return; }\n\t\tif (!item.listBox) { return; }\n\n\t\titem.listBox.setValue(true); // This propagates changes\n\n\t\tif (!parents) { return; }\n\n\t\tconst parent = this.getParent(item);\n\t\tif (parent) { this.expandItem(parent, parents); }\n\t}\n\n\t/**\n\t * In case an item is expanded, it collapses it to hide children.\n\t * @param {string} id - ID of the item to collapse.\n\t */\n\tcollapseItem(id: string): void\n\t{\n\t\tconst item = this.getItem(id) as TreeNode;\n\t\tif (!item) { return; }\n\n\t\tif (!item.listBox) { return; }\n\n\t\titem.listBox.setValue(false); // This propagates changes\n\t}\n\n\n\t/**\n\t * Tells you if the item its out of the view due to the scrolling.\n\t * @param {string | TreeNode} id - ID or the node to check.\n\t * @returns {boolean} True if inside the visible area.\n\t */\n\tisInsideArea(id: string): boolean\n\t{\n\t\tconst item = typeof id === \"string\" ? this.getItem(id) : id;\n\t\tif (!item) { return false; }\n\n\t\tconst rects = this.root.getClientRects();\n\t\tif (!rects.length) { return false; }\n\t\tconst r = rects[0];\n\t\tconst h = r.height;\n\t\tconst y = item.offsetTop;\n\n\t\tif (this.root.scrollTop < y && y < (this.root.scrollTop + h))\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Scrolls to center this item.\n\t * @param {string | TreeNode} item - ID or the node to scroll to.\n\t */\n\tscrollToItem(item: string | TreeNode): void\n\t{\n\t\titem = (typeof item === \"string\" ? this.getItem(item) : item) as TreeNode;\n\t\tif (!item) { return; }\n\n\t\tconst container = this.root.parentNode as HTMLDivElement;\n\n\t\tif (!container) { return; }\n\n\t\tconst rect = container.getBoundingClientRect();\n\t\tconst h = rect.height; // If this function is misbehaving then remove this line and find another way to get \"h\"\n\t\tif (!rect) { return; }\n\t\tconst x = (parseInt(item.dataset.level ?? \"0\") + this.indentOffset) * Tree.INDENT + 50;\n\n\t\tcontainer.scrollTop = item.offsetTop - (h * 0.5) | 0;\n\t\tif (rect.width * 0.75 < x)\n\t\t{\n\t\t\tcontainer.scrollLeft = x;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tcontainer.scrollLeft = 0;\n\t\t}\n\t}\n\n\t/**\n\t * Mark item as selected.\n\t * @param {string} id - ID of the item to select.\n\t * @param {boolean} [scroll] - whether to scroll to the item.\n\t * @param {boolean} [sendEvent] - whether to trigger click event.\n\t * @returns {string | TreeNode | null | undefined} The selected node.\n\t */\n\tsetSelectedItem(id: string, scroll: boolean, sendEvent: boolean): string | TreeNode | null | undefined\n\t{\n\t\tif (!id)\n\t\t{\n\t\t\t// Clear selection\n\t\t\tthis._unmarkAllAsSelected();\n\t\t\treturn;\n\t\t}\n\n\t\tconst node = this.getItem(id);\n\t\tif (!node) { return null; }// Not found\n\n\t\t// Already selected\n\t\tif ((node as TreeNode).classList.contains(\"selected\")) { return; }\n\n\t\tthis._markAsSelected(node as TreeNode);\n\t\tif (scroll && !this._skipScroll) { this.scrollToItem(node); }\n\n\t\t// Expand parents\n\t\tthis.expandItem(node, true);\n\n\t\tif (sendEvent) { Trigger(node, \"click\"); }\n\n\t\treturn node;\n\t}\n\n\t/**\n\t * Adds item to selection (multiple selection).\n\t * @param {string} id - ID of the item.\n\t * @returns {string | TreeNode | null | undefined} The selected node.\n\t */\n\taddItemToSelection(id: string): string | TreeNode | null | undefined\n\t{\n\t\tif (!id) { return; }\n\n\t\tconst node = this.getItem(id);\n\t\tif (!node) { return null; } // Not found\n\n\t\tthis._markAsSelected(node as TreeNode, true);\n\t\treturn node;\n\t}\n\n\t/**\n\t * Remove item from selection (multiple selection).\n\t * @param {string} id - ID of the item.\n\t */\n\tremoveItemFromSelection(id: string)\n\t{\n\t\tif (!id) { return; }\n\t\tconst node = this.getItem(id);\n\t\tif (!node) { return null; } // Not found\n\t\t(node as TreeNode).classList.remove(\"selected\");\n\t\treturn;\n\t}\n\n\t/**\n\t * Returns the first selected item (its HTML element).\n\t * @returns {Element | null} The selected element.\n\t */\n\tgetSelectedItem(): Element | null\n\t{\n\t\treturn this.root.querySelector(\".ltreeitem.selected\");\n\t}\n\n\t/**\n\t * Returns an array with the selected items (its HTML elements).\n\t * @returns {NodeListOf<Element>} The selected elements.\n\t */\n\tgetSelectedItems(): NodeListOf<Element>\n\t{\n\t\treturn this.root.querySelectorAll(\".ltreeitem.selected\");\n\t}\n\n\t/**\n\t * Returns if an item is selected.\n\t * @param {string} id - ID of the item.\n\t * @returns {boolean} True if selected.\n\t */\n\tisItemSelected(id: string): boolean\n\t{\n\t\tconst node = this.getItem(id);\n\t\tif (!node) { return false; }\n\t\treturn this._isNodeSelected(node as TreeNode);\n\t}\n\n\t/**\n\t * Returns the children of an item.\n\t * @param {string | TreeNode} id - could be string or node directly.\n\t * @param {boolean} [onlyDirectChildren=false] - to get only direct children.\n\t * @returns {TreeNode[] | undefined} The children nodes.\n\t */\n\tgetChildren(id: string | TreeNode, onlyDirectChildren: boolean = false): TreeNode[] | undefined\n\t{\n\t\tif (typeof id !== \"string\")\n\t\t{\n\t\t\tid = id.dataset.itemID as string;\n\t\t}\n\t\treturn this._findChildElements(id, onlyDirectChildren);\n\t}\n\n\t/**\n\t * Returns the parent of a item.\n\t * @param {string | TreeNode} id - ID or node.\n\t * @returns {TreeNode | undefined} The parent node.\n\t */\n\tgetParent(id: string | TreeNode): TreeNode | undefined\n\t{\n\t\tconst element = this.getItem(id);\n\t\tif (element) { return this.getItem(element.parentId); }\n\t\treturn;\n\t}\n\n\t/**\n\t * Returns an array with all the ancestors\n\t * @param {string | TreeNode} id - ID or node.\n\t * @param {Array<string | TreeNode>} result - Array to store results.\n\t * @returns {Array<TreeNode | string>} The ancestors.\n\t */\n\tgetAncestors(id: string | TreeNode, result: Array<string | TreeNode>): Array<TreeNode | string>\n\t{\n\t\tresult = result ?? [];\n\t\tconst element = this.getItem(id);\n\t\tif (element)\n\t\t{\n\t\t\tresult.push(element);\n\t\t\treturn this.getAncestors(element.parentId, result);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Checks if a node is an ancestor of another.\n\t * @param {string | TreeNode} child - Child node.\n\t * @param {string | TreeNode} node - Potential ancestor.\n\t * @returns {boolean | Array<TreeNode | string>} True if is ancestor (or returns array/boolean? implementation returns boolean usually but type says Array|boolean).\n\t */\n\tisAncestor(child: string | TreeNode, node: string | TreeNode): Array<TreeNode | string> | boolean\n\t{\n\t\tconst element = this.getItem(child) as TreeNode;\n\t\tif (!element) { return false; }\n\t\tconst dest = this.getItem(node);\n\t\tconst parent = this.getItem(element.parentId);\n\t\tif (!parent) { return false; }\n\t\tif (parent == dest) { return true; }\n\t\treturn this.isAncestor(parent, node);\n\t}\n\n\t/**\n\t * Move item with id to be child of parent_id.\n\t * @param {string} id - ID of the item to move.\n\t * @param {string} parentId - ID of the new parent.\n\t * @returns {boolean} True if moved.\n\t */\n\tmoveItem(id: string, parentId: string): boolean\n\t{\n\t\tif (id === parentId) { return false; }\n\n\t\tconst node = this.getItem(id) as TreeNode;\n\t\tconst parent = this.getItem(parentId);\n\n\t\tif (!parent || !node) { return false; }\n\n\t\tif (this.isAncestor(parent, node)) { return false; }\n\n\t\tconst parentLevel = parseInt(parent.dataset.level ?? \"0\");\n\t\tconst oldParent = this.getParent(node);\n\t\tif (!oldParent)\n\t\t{\n\t\t\tconsole.error(\"node parent not found by id, maybe id has changed\");\n\t\t\treturn false;\n\t\t}\n\t\tconst oldParentLevel = parseInt(oldParent.dataset.level ?? \"0\");\n\t\tconst leveOffset = parentLevel - oldParentLevel;\n\n\t\tif (parent == oldParent) { return false; }\n\n\t\t// Replace parent info\n\t\tnode.parentId = parentId;\n\n\t\t// Get all children and reinsert them in the new level\n\t\tconst children = this.getChildren(node);\n\t\tif (children)\n\t\t{\n\t\t\tchildren.unshift(node); // Add the node at the beginning\n\n\t\t\t// Remove all children\n\t\t\tfor (let i = 0; i < children.length; i++)\n\t\t\t{\n\t\t\t\tchildren[i].parentNode!.removeChild(children[i]);\n\t\t\t}\n\n\t\t\t// Update levels\n\t\t\tfor (let i = 0; i < children.length; i++)\n\t\t\t{\n\t\t\t\tconst child = children[i];\n\t\t\t\tconst newLevel = parseInt(child.dataset.level ?? \"0\") + leveOffset;\n\t\t\t\tchild.dataset.level = newLevel.toString();\n\t\t\t}\n\n\t\t\t// Reinsert\n\t\t\tfor (let i = 0; i < children.length; i++)\n\t\t\t{\n\t\t\t\tconst child = children[i];\n\t\t\t\tlet currentParentIndex = -1;\n\n\t\t\t\tif (child === node)\n\t\t\t\t{\n\t\t\t\t\tcurrentParentIndex = this._findElementIndex(parent);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tcurrentParentIndex = this._findElementIndex(child.parentId);\n\t\t\t\t}\n\n\t\t\t\tif (currentParentIndex === -1)\n\t\t\t\t{\n\t\t\t\t\tconsole.error(\"Parent not found for reinsertion\", child);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Use a large offset to append to the end\n\t\t\t\tthis._insertInside(child, currentParentIndex, 999999, parseInt(child.dataset.level ?? \"0\"));\n\t\t\t}\n\t\t}\n\n\t\t// Update collapse button\n\t\tthis._updateListBox(parent as TreeNode);\n\t\tif (oldParent) { this._updateListBox(oldParent); }\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Remove item with given id.\n\t * @param {string | TreeNode} item - ID or node to remove.\n\t * @param {boolean} removeChildren - whether to remove children as well.\n\t * @returns {boolean} True if removed.\n\t */\n\tremoveItem(item: string | TreeNode, removeChildren: boolean): boolean\n\t{\n\t\tlet node = item;\n\t\tif (typeof (item) == \"string\") { node = this.getItem(item)!; }\n\t\tif (!node) { return false; }\n\n\t\t// Get parent\n\t\tconst parent = this.getParent(node);\n\n\t\t// Get all descendants\n\t\tlet child_nodes = null;\n\t\tif (removeChildren) { child_nodes = this.getChildren(node); }\n\n\t\t// Remove html element\n\t\tthis.root.removeChild(node as TreeNode);\n\n\t\t// Remove all children\n\t\tif (child_nodes)\n\t\t{\n\t\t\tfor (let i = 0; i < child_nodes.length; i++)\n\t\t\t{\n\t\t\t\tthis.root.removeChild(child_nodes[i]);\n\t\t\t}\n\t\t}\n\n\t\t// Update parent collapse button\n\t\tif (parent) { this._updateListBox(parent as TreeNode); }\n\t\treturn true;\n\t}\n\n\t/**\n\t * Update a given item with new data.\n\t * @param {string} id - ID of the item to update.\n\t * @param {TreeData | TreeNode} data - New data.\n\t * @returns {boolean} True if updated.\n\t */\n\tupdateItem(id: string, data: TreeData | TreeNode): boolean\n\t{\n\t\tconst node = this.getItem(id) as TreeNode;\n\t\tif (!node) { return false; }\n\n\t\tconst isTreeNode = data instanceof HTMLElement;\n\n\t\tnode.data = isTreeNode ? node.data : data;\n\t\tif (isTreeNode && data.id) { node.id = data.id; }\n\t\tif (isTreeNode && data.content)\n\t\t{\n\t\t\tconst inContent = node.titleElement?.querySelector(\".incontent\");\n\t\t\tif (inContent)\n\t\t\t{\n\t\t\t\tinContent.innerHTML = data.content;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Update a given item id and the link with its children.\n\t * @param {string} oldId - Old ID.\n\t * @param {string} newId - New ID.\n\t * @returns {boolean} True if updated.\n\t */\n\tupdateItemId(oldId: string, newId: string): boolean\n\t{\n\t\tconst node = this.getItem(oldId) as TreeNode;\n\t\tif (!node) { return false; }\n\n\t\tconst children = this.getChildren(oldId, true);\n\t\tnode.id = newId;\n\n\t\tif (!children) { return false; }\n\n\t\tfor (let i = 0; i < children.length; ++i)\n\t\t{\n\t\t\tconst child = children[i];\n\t\t\tchild.parentId = newId;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\n\t/**\n\t * Clears all the items.\n\t * @param {boolean} keepRoot - if you want to keep the root item.\n\t */\n\tclear(keepRoot: boolean)\n\t{\n\t\tif (!keepRoot)\n\t\t{\n\t\t\tthis.root.innerHTML = \"\";\n\t\t\treturn;\n\t\t}\n\n\t\tconst items = this.root.querySelectorAll(\".ltreeitem\");\n\t\tfor (let i = 1; i < items.length; i++)\n\t\t{\n\t\t\tconst item = items[i];\n\t\t\tthis.root.removeChild(item);\n\t\t}\n\t}\n\n\n\t/**\n\t * Gets a node by its index in the DOM.\n\t * @param {number} index - Index of the node.\n\t * @returns {Element} The node element.\n\t */\n\tgetNodeByIndex(index: number): Element\n\t{\n\t\tconst items = this.root.querySelectorAll(\".ltreeitem\");\n\t\treturn items[index];\n\t}\n\n\t// Private\n\n\t/**\n\t * Checks if the children of a node are visible.\n\t * @private\n\t * @param {string | TreeNode} id - The ID or the node itself.\n\t * @returns {boolean} True if children are visible.\n\t */\n\tprivate _isNodeChildrenVisible(id: string | TreeNode): boolean\n\t{\n\t\tconst node = this.getItem(id);\n\t\tif (!node) { return false; }\n\t\tif (node.classList.contains(\"hidden\")) { return false; }\n\n\t\t// Check listboxes\n\t\tconst listbox = node.querySelector(\".listbox\") as ListBoxSpanElement;\n\t\tif (!listbox) { return true; }\n\t\tif (listbox.listBox?.getValue() == \"closed\") { return false; }\n\t\treturn true;\n\t}\n\n\t/**\n\t * Finds a node element by its ID.\n\t * @private\n\t * @param {string} id - The item's ID.\n\t * @returns {TreeNode | undefined} Thefound node or undefined.\n\t */\n\tprivate _findElement(id: string)\n\t{\n\t\tif (!id || typeof id !== \"string\")\n\t\t{\n\t\t\tthrow (\"findElement param must be string with item id\");\n\t\t}\n\t\tfor (let i = 0; i < this.root.childNodes.length; ++i)\n\t\t{\n\t\t\tconst childNode = this.root.childNodes[i];\n\t\t\tif (!childNode.classList || !childNode.classList.contains(\"ltreeitem\"))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (childNode.classList.contains(\"ltreeitem-\" + id))\n\t\t\t{\n\t\t\t\treturn childNode;\n\t\t\t}\n\t\t}\n\n\t\treturn;\n\t}\n\n\t/**\n\t * Finds the index of a node in the DOM list.\n\t * @private\n\t * @param {string | TreeNode} id - The ID or the node itself.\n\t * @returns {number} The index, or -1 if not found.\n\t */\n\tprivate _findElementIndex(id: string | TreeNode): number\n\t{\n\t\tfor (let i = 0; i < this.root.childNodes.length; ++i)\n\t\t{\n\t\t\tconst childNode = this.root.childNodes[i];\n\t\t\tif (!childNode.classList || !childNode.classList.contains(\"ltreeitem\"))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (typeof (id) === \"string\")\n\t\t\t{\n\t\t\t\tif (childNode.dataset.itemID === id)\n\t\t\t\t{\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (childNode === id)\n\t\t\t{\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t}\n\n\t/**\n\t * Finds the index of the last child of a node.\n\t * @private\n\t * @param {number} startIndex - The index of the parent node.\n\t * @returns {number} The index of the last child.\n\t */\n\tprivate _findElementLastChildIndex(startIndex: number): number\n\t{\n\t\tif (startIndex == -1)\n\t\t{\n\t\t\treturn -1;\n\t\t}\n\n\t\tconst level = parseInt(this.root.childNodes[startIndex].dataset.level ?? \"0\");\n\n\t\tfor (let i = startIndex + 1; i < this.root.childNodes.length; ++i)\n\t\t{\n\t\t\tconst childNode = this.root.childNodes[i] as TreeNode;\n\t\t\tif (!childNode.classList || !childNode.classList.contains(\"ltreeitem\"))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst currentLevel = parseInt(childNode.dataset.level ?? \"0\");\n\t\t\tif (currentLevel == level)\n\t\t\t{\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t}\n\n\t/**\n\t * Finds child elements of a node.\n\t * @private\n\t * @param {string} id - The parent ID.\n\t * @param {boolean} onlyDirectChildren - If true, returns only direct children.\n\t * @returns {TreeNode[] | undefined} Array of child nodes.\n\t */\n\tprivate _findChildElements(id: string, onlyDirectChildren: boolean): TreeNode[] | undefined\n\t{\n\t\tconst parentIndex = this._findElementIndex(id);\n\t\tif (parentIndex == -1)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tconst parent = this.root.childNodes[parentIndex];\n\t\tconst parentLevel = parseInt(parent.dataset.level ?? \"0\");\n\n\t\tconst result = [];\n\n\t\tfor (let i = parentIndex + 1; i < this.root.childNodes.length; ++i)\n\t\t{\n\t\t\tconst childNode = this.root.childNodes[i];\n\t\t\tif (!childNode.classList || !childNode.classList.contains(\"ltreeitem\"))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst currentLevel = parseInt(childNode.dataset.level ?? \"0\");\n\t\t\tif (onlyDirectChildren && currentLevel > (parentLevel + 1)) { continue; }\n\t\t\tif (currentLevel <= parentLevel) { return result; }\n\n\t\t\tresult.push(childNode);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Unmarks all nodes as selected.\n\t * @private\n\t */\n\tprivate _unmarkAllAsSelected()\n\t{\n\t\tthis.root.classList.remove(\"selected\");\n\t\tconst selected_array = this.root.querySelectorAll(\".ltreeitem.selected\");\n\t\tif (selected_array)\n\t\t{\n\t\t\tfor (let i = 0; i < selected_array.length; i++)\n\t\t\t{\n\t\t\t\tselected_array[i].classList.remove(\"selected\");\n\t\t\t}\n\t\t}\n\t\tconst semiSelected = this.root.querySelectorAll(\".ltreeitem.semiselected\");\n\t\tfor (let i = 0; i < semiSelected.length; i++)\n\t\t{\n\t\t\tsemiSelected[i].classList.remove(\"semiselected\");\n\t\t}\n\t}\n\n\t/**\n\t * Checks if a node is selected.\n\t * @private\n\t * @param {TreeNode} node - The node to check.\n\t * @returns {boolean} True if selected.\n\t */\n\tprivate _isNodeSelected(node: TreeNode): boolean\n\t{\n\t\t// Already selected\n\t\tif (node.classList.contains(\"selected\")) { return true; }\n\t\treturn false;\n\t}\n\n\t/**\n\t * Marks a node as selected.\n\t * @private\n\t * @param {TreeNode} node - The node to select.\n\t * @param {boolean} [addToExistingSelection=false] - If true, adds to current selection instead of clearing it.\n\t */\n\tprivate _markAsSelected(node: TreeNode, addToExistingSelection: boolean = false)\n\t{\n\t\t// Already selected\n\t\tif (node.classList.contains(\"selected\")) { return; }\n\n\t\t// Clear old selection\n\t\tif (!addToExistingSelection) { this._unmarkAllAsSelected(); }\n\n\t\t// Mark as selected (it was node.titleElement?)\n\t\tnode.classList.add(\"selected\");\n\n\t\t// Go up and soft select\n\t\tlet parent = this.getParent(node);\n\t\tconst visited = [];\n\t\twhile (parent && visited.indexOf(parent) == -1)\n\t\t{\n\t\t\tparent.classList.add(\"semiselected\");\n\t\t\tvisited.push(parent);\n\t\t\tparent = this.getParent(parent) as TreeNode;\n\t\t}\n\t}\n\n\t/**\n\t * Updates the listbox (collapse/expand icon) of a node.\n\t * @private\n\t * @param {TreeNode} node - The node to update.\n\t * @param {TreeOptions} [options] - Options.\n\t * @param {number} [currentLevel=0] - Current indentation level.\n\t */\n\tprivate _updateListBox(node: TreeNode, options?: TreeOptions, currentLevel: number = 0)\n\t{\n\t\tif (!node) { return; }\n\n\t\tif (!node.listBox)\n\t\t{\n\t\t\tconst pre = node.titleElement?.querySelector(\".collapsebox\");\n\t\t\tif (!pre) { return; }\n\n\t\t\tconst box = new ListBox(true, (value: string) =>\n\t\t\t{\n\t\t\t\tthis._onClickBox(node);\n\t\t\t\tTrigger(this.root, \"item_collapse_change\",\n\t\t\t\t\t{\n\t\t\t\t\t\titem: node,\n\t\t\t\t\t\tdata: value\n\t\t\t\t\t});\n\t\t\t});\n\t\t\tconst element = box.root;\n\t\t\tif (element)\n\t\t\t{\n\t\t\t\tbox.stopPropagation = true;\n\t\t\t\telement.setEmpty(true);\n\t\t\t\tpre.appendChild(element);\n\t\t\t\tnode.listBox = element;\n\t\t\t}\n\t\t}\n\n\t\tif ((options && options.collapsed) || currentLevel >= this.collapsedDepth)\n\t\t{\n\t\t\tnode.listBox?.collapse();\n\t\t}\n\n\t\tconst children = this.getChildren(node.dataset.itemID ?? \"\");\n\t\tif (!children) { return; }\n\n\t\tif (children.length)\n\t\t{\n\t\t\tnode.listBox?.setEmpty(false);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tnode.listBox?.setEmpty(true);\n\t\t}\n\t}\n\n\tprivate _onClickBox(node: string | TreeNode)\n\t{\n\t\tconst children = this.getChildren(node);\n\n\t\tif (!children) { return; }\n\n\t\t// Update children visibility\n\t\tfor (let i = 0; i < children.length; ++i)\n\t\t{\n\t\t\tconst child = children[i];\n\n\t\t\tconst child_parent = this.getParent(child);\n\t\t\tlet visible = true;\n\t\t\tif (child_parent) { visible = this._isNodeChildrenVisible(child_parent); }\n\t\t\tif (visible)\n\t\t\t{\n\t\t\t\tchild.classList.remove(\"hidden\");\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tchild.classList.add(\"hidden\");\n\t\t\t}\n\t\t}\n\t}\n\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(1969);\n",""],"names":[],"sourceRoot":""}
1
+ {"version":3,"file":"litegui.js","mappings":"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","sources":["webpack://LiteGUI/./node_modules/@simonwep/pickr/dist/pickr.min.js","webpack://LiteGUI/./src/area.ts","webpack://LiteGUI/./src/console.ts","webpack://LiteGUI/./src/core.ts","webpack://LiteGUI/./src/dialog.ts","webpack://LiteGUI/./src/dragger.ts","webpack://LiteGUI/./src/inspector/array.ts","webpack://LiteGUI/./src/inspector/button.ts","webpack://LiteGUI/./src/inspector/checkbox.ts","webpack://LiteGUI/./src/inspector/color.ts","webpack://LiteGUI/./src/inspector/combo.ts","webpack://LiteGUI/./src/inspector/dataTree.ts","webpack://LiteGUI/./src/inspector/file.ts","webpack://LiteGUI/./src/inspector/flag.ts","webpack://LiteGUI/./src/inspector/icon.ts","webpack://LiteGUI/./src/inspector/index.ts","webpack://LiteGUI/./src/inspector/info.ts","webpack://LiteGUI/./src/inspector/inspector.ts","webpack://LiteGUI/./src/inspector/line.ts","webpack://LiteGUI/./src/inspector/list.ts","webpack://LiteGUI/./src/inspector/number.ts","webpack://LiteGUI/./src/inspector/pad.ts","webpack://LiteGUI/./src/inspector/seperator.ts","webpack://LiteGUI/./src/inspector/slider.ts","webpack://LiteGUI/./src/inspector/string.ts","webpack://LiteGUI/./src/inspector/stringButton.ts","webpack://LiteGUI/./src/inspector/tags.ts","webpack://LiteGUI/./src/inspector/textArea.ts","webpack://LiteGUI/./src/inspector/tree.ts","webpack://LiteGUI/./src/inspector/vector.ts","webpack://LiteGUI/./src/menubar.ts","webpack://LiteGUI/./src/panel.ts","webpack://LiteGUI/./src/table.ts","webpack://LiteGUI/./src/tabs.ts","webpack://LiteGUI/./src/utilities.ts","webpack://LiteGUI/./src/widgets/button.ts","webpack://LiteGUI/./src/widgets/checkbox.ts","webpack://LiteGUI/./src/widgets/complexList.ts","webpack://LiteGUI/./src/widgets/contextMenu.ts","webpack://LiteGUI/./src/widgets/index.ts","webpack://LiteGUI/./src/widgets/lineEditor.ts","webpack://LiteGUI/./src/widgets/list.ts","webpack://LiteGUI/./src/widgets/listBox.ts","webpack://LiteGUI/./src/widgets/searchBox.ts","webpack://LiteGUI/./src/widgets/slider.ts","webpack://LiteGUI/./src/widgets/tree.ts","webpack://LiteGUI/webpack/bootstrap","webpack://LiteGUI/webpack/before-startup","webpack://LiteGUI/webpack/startup","webpack://LiteGUI/webpack/after-startup"],"sourcesContent":["/*! Pickr 1.9.1 MIT | https://github.com/Simonwep/pickr */\n!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.Pickr=e():t.Pickr=e()}(self,(()=>(()=>{\"use strict\";var t={d:(e,o)=>{for(var n in o)t.o(o,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:o[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})}},e={};t.d(e,{default:()=>E});var o={};function n(t,e,o,n,i={}){e instanceof HTMLCollection||e instanceof NodeList?e=Array.from(e):Array.isArray(e)||(e=[e]),Array.isArray(o)||(o=[o]);for(const s of e)for(const e of o)s[t](e,n,{capture:!1,...i});return Array.prototype.slice.call(arguments,1)}t.r(o),t.d(o,{adjustableInputNumbers:()=>p,createElementFromString:()=>r,createFromTemplate:()=>a,eventPath:()=>l,off:()=>s,on:()=>i,resolveElement:()=>c});const i=n.bind(null,\"addEventListener\"),s=n.bind(null,\"removeEventListener\");function r(t){const e=document.createElement(\"div\");return e.innerHTML=t.trim(),e.firstElementChild}function a(t){const e=(t,e)=>{const o=t.getAttribute(e);return t.removeAttribute(e),o},o=(t,n={})=>{const i=e(t,\":obj\"),s=e(t,\":ref\"),r=i?n[i]={}:n;s&&(n[s]=t);for(const n of Array.from(t.children)){const t=e(n,\":arr\"),i=o(n,t?{}:r);t&&(r[t]||(r[t]=[])).push(Object.keys(i).length?i:n)}return n};return o(r(t))}function l(t){let e=t.path||t.composedPath&&t.composedPath();if(e)return e;let o=t.target.parentElement;for(e=[t.target,o];o=o.parentElement;)e.push(o);return e.push(document,window),e}function c(t){return t instanceof Element?t:\"string\"==typeof t?t.split(/>>/g).reduce(((t,e,o,n)=>(t=t.querySelector(e),o<n.length-1?t.shadowRoot:t)),document):null}function p(t,e=(t=>t)){function o(o){const n=[.001,.01,.1][Number(o.shiftKey||2*o.ctrlKey)]*(o.deltaY<0?1:-1);let i=0,s=t.selectionStart;t.value=t.value.replace(/[\\d.]+/g,((t,o)=>o<=s&&o+t.length>=s?(s=o,e(Number(t),n,i)):(i++,t))),t.focus(),t.setSelectionRange(s,s),o.preventDefault(),t.dispatchEvent(new Event(\"input\"))}i(t,\"focus\",(()=>i(window,\"wheel\",o,{passive:!1}))),i(t,\"blur\",(()=>s(window,\"wheel\",o)))}const{min:u,max:h,floor:d,round:m}=Math;function f(t,e,o){e/=100,o/=100;const n=d(t=t/360*6),i=t-n,s=o*(1-e),r=o*(1-i*e),a=o*(1-(1-i)*e),l=n%6;return[255*[o,r,s,s,a,o][l],255*[a,o,o,r,s,s][l],255*[s,s,a,o,o,r][l]]}function v(t,e,o){const n=(2-(e/=100))*(o/=100)/2;return 0!==n&&(e=1===n?0:n<.5?e*o/(2*n):e*o/(2-2*n)),[t,100*e,100*n]}function b(t,e,o){const n=u(t/=255,e/=255,o/=255),i=h(t,e,o),s=i-n;let r,a;if(0===s)r=a=0;else{a=s/i;const n=((i-t)/6+s/2)/s,l=((i-e)/6+s/2)/s,c=((i-o)/6+s/2)/s;t===i?r=c-l:e===i?r=1/3+n-c:o===i&&(r=2/3+l-n),r<0?r+=1:r>1&&(r-=1)}return[360*r,100*a,100*i]}function y(t,e,o,n){e/=100,o/=100;return[...b(255*(1-u(1,(t/=100)*(1-(n/=100))+n)),255*(1-u(1,e*(1-n)+n)),255*(1-u(1,o*(1-n)+n)))]}function g(t,e,o){e/=100;const n=2*(e*=(o/=100)<.5?o:1-o)/(o+e)*100,i=100*(o+e);return[t,isNaN(n)?0:n,i]}function _(t){return b(...t.match(/.{2}/g).map((t=>parseInt(t,16))))}function w(t){t=t.match(/^[a-zA-Z]+$/)?function(t){if(\"black\"===t.toLowerCase())return\"#000\";const e=document.createElement(\"canvas\").getContext(\"2d\");return e.fillStyle=t,\"#000\"===e.fillStyle?null:e.fillStyle}(t):t;const e={cmyk:/^cmyk\\D+([\\d.]+)\\D+([\\d.]+)\\D+([\\d.]+)\\D+([\\d.]+)/i,rgba:/^rgba?\\D+([\\d.]+)(%?)\\D+([\\d.]+)(%?)\\D+([\\d.]+)(%?)\\D*?(([\\d.]+)(%?)|$)/i,hsla:/^hsla?\\D+([\\d.]+)\\D+([\\d.]+)\\D+([\\d.]+)\\D*?(([\\d.]+)(%?)|$)/i,hsva:/^hsva?\\D+([\\d.]+)\\D+([\\d.]+)\\D+([\\d.]+)\\D*?(([\\d.]+)(%?)|$)/i,hexa:/^#?(([\\dA-Fa-f]{3,4})|([\\dA-Fa-f]{6})|([\\dA-Fa-f]{8}))$/i},o=t=>t.map((t=>/^(|\\d+)\\.\\d+|\\d+$/.test(t)?Number(t):void 0));let n;t:for(const i in e)if(n=e[i].exec(t))switch(i){case\"cmyk\":{const[,t,e,s,r]=o(n);if(t>100||e>100||s>100||r>100)break t;return{values:y(t,e,s,r),type:i}}case\"rgba\":{let[,t,,e,,s,,,r]=o(n);if(t=\"%\"===n[2]?t/100*255:t,e=\"%\"===n[4]?e/100*255:e,s=\"%\"===n[6]?s/100*255:s,r=\"%\"===n[9]?r/100:r,t>255||e>255||s>255||r<0||r>1)break t;return{values:[...b(t,e,s),r],a:r,type:i}}case\"hexa\":{let[,t]=n;4!==t.length&&3!==t.length||(t=t.split(\"\").map((t=>t+t)).join(\"\"));const e=t.substring(0,6);let o=t.substring(6);return o=o?parseInt(o,16)/255:void 0,{values:[..._(e),o],a:o,type:i}}case\"hsla\":{let[,t,e,s,,r]=o(n);if(r=\"%\"===n[6]?r/100:r,t>360||e>100||s>100||r<0||r>1)break t;return{values:[...g(t,e,s),r],a:r,type:i}}case\"hsva\":{let[,t,e,s,,r]=o(n);if(r=\"%\"===n[6]?r/100:r,t>360||e>100||s>100||r<0||r>1)break t;return{values:[t,e,s,r],a:r,type:i}}}return{values:null,type:null}}function A(t=0,e=0,o=0,n=1){const i=(t,e)=>(o=-1)=>e(~o?t.map((t=>Number(t.toFixed(o)))):t),s={h:t,s:e,v:o,a:n,toHSVA(){const t=[s.h,s.s,s.v,s.a];return t.toString=i(t,(t=>`hsva(${t[0]}, ${t[1]}%, ${t[2]}%, ${s.a})`)),t},toHSLA(){const t=[...v(s.h,s.s,s.v),s.a];return t.toString=i(t,(t=>`hsla(${t[0]}, ${t[1]}%, ${t[2]}%, ${s.a})`)),t},toRGBA(){const t=[...f(s.h,s.s,s.v),s.a];return t.toString=i(t,(t=>`rgba(${t[0]}, ${t[1]}, ${t[2]}, ${s.a})`)),t},toCMYK(){const t=function(t,e,o){const n=f(t,e,o),i=n[0]/255,s=n[1]/255,r=n[2]/255,a=u(1-i,1-s,1-r);return[100*(1===a?0:(1-i-a)/(1-a)),100*(1===a?0:(1-s-a)/(1-a)),100*(1===a?0:(1-r-a)/(1-a)),100*a]}(s.h,s.s,s.v);return t.toString=i(t,(t=>`cmyk(${t[0]}%, ${t[1]}%, ${t[2]}%, ${t[3]}%)`)),t},toHEXA(){const t=function(t,e,o){return f(t,e,o).map((t=>m(t).toString(16).padStart(2,\"0\")))}(s.h,s.s,s.v),e=s.a>=1?\"\":Number((255*s.a).toFixed(0)).toString(16).toUpperCase().padStart(2,\"0\");return e&&t.push(e),t.toString=()=>`#${t.join(\"\").toUpperCase()}`,t},clone:()=>A(s.h,s.s,s.v,s.a)};return s}const $=t=>Math.max(Math.min(t,1),0);function C(t){const e={options:Object.assign({lock:null,onchange:()=>0,onstop:()=>0},t),_keyboard(t){const{options:o}=e,{type:n,key:i}=t;if(document.activeElement===o.wrapper){const{lock:o}=e.options,s=\"ArrowUp\"===i,r=\"ArrowRight\"===i,a=\"ArrowDown\"===i,l=\"ArrowLeft\"===i;if(\"keydown\"===n&&(s||r||a||l)){let n=0,i=0;\"v\"===o?n=s||r?1:-1:\"h\"===o?n=s||r?-1:1:(i=s?-1:a?1:0,n=l?-1:r?1:0),e.update($(e.cache.x+.01*n),$(e.cache.y+.01*i)),t.preventDefault()}else i.startsWith(\"Arrow\")&&(e.options.onstop(),t.preventDefault())}},_tapstart(t){i(document,[\"mouseup\",\"touchend\",\"touchcancel\"],e._tapstop),i(document,[\"mousemove\",\"touchmove\"],e._tapmove),t.cancelable&&t.preventDefault(),e._tapmove(t)},_tapmove(t){const{options:o,cache:n}=e,{lock:i,element:s,wrapper:r}=o,a=r.getBoundingClientRect();let l=0,c=0;if(t){const e=t&&t.touches&&t.touches[0];l=t?(e||t).clientX:0,c=t?(e||t).clientY:0,l<a.left?l=a.left:l>a.left+a.width&&(l=a.left+a.width),c<a.top?c=a.top:c>a.top+a.height&&(c=a.top+a.height),l-=a.left,c-=a.top}else n&&(l=n.x*a.width,c=n.y*a.height);\"h\"!==i&&(s.style.left=`calc(${l/a.width*100}% - ${s.offsetWidth/2}px)`),\"v\"!==i&&(s.style.top=`calc(${c/a.height*100}% - ${s.offsetHeight/2}px)`),e.cache={x:l/a.width,y:c/a.height};const p=$(l/a.width),u=$(c/a.height);switch(i){case\"v\":return o.onchange(p);case\"h\":return o.onchange(u);default:return o.onchange(p,u)}},_tapstop(){e.options.onstop(),s(document,[\"mouseup\",\"touchend\",\"touchcancel\"],e._tapstop),s(document,[\"mousemove\",\"touchmove\"],e._tapmove)},trigger(){e._tapmove()},update(t=0,o=0){const{left:n,top:i,width:s,height:r}=e.options.wrapper.getBoundingClientRect();\"h\"===e.options.lock&&(o=t),e._tapmove({clientX:n+s*t,clientY:i+r*o})},destroy(){const{options:t,_tapstart:o,_keyboard:n}=e;s(document,[\"keydown\",\"keyup\"],n),s([t.wrapper,t.element],\"mousedown\",o),s([t.wrapper,t.element],\"touchstart\",o,{passive:!1})}},{options:o,_tapstart:n,_keyboard:r}=e;return i([o.wrapper,o.element],\"mousedown\",n),i([o.wrapper,o.element],\"touchstart\",n,{passive:!1}),i(document,[\"keydown\",\"keyup\"],r),e}function k(t={}){t=Object.assign({onchange:()=>0,className:\"\",elements:[]},t);const e=i(t.elements,\"click\",(e=>{t.elements.forEach((o=>o.classList[e.target===o?\"add\":\"remove\"](t.className))),t.onchange(e),e.stopPropagation()}));return{destroy:()=>s(...e)}}const S={variantFlipOrder:{start:\"sme\",middle:\"mse\",end:\"ems\"},positionFlipOrder:{top:\"tbrl\",right:\"rltb\",bottom:\"btrl\",left:\"lrbt\"},position:\"bottom\",margin:8,padding:0},O=(t,e,o)=>{const n=\"object\"!=typeof t||t instanceof HTMLElement?{reference:t,popper:e,...o}:t;return{update(t=n){const{reference:e,popper:o}=Object.assign(n,t);if(!o||!e)throw new Error(\"Popper- or reference-element missing.\");return((t,e,o)=>{const{container:n,arrow:i,margin:s,padding:r,position:a,variantFlipOrder:l,positionFlipOrder:c}={container:document.documentElement.getBoundingClientRect(),...S,...o},{left:p,top:u}=e.style;e.style.left=\"0\",e.style.top=\"0\";const h=t.getBoundingClientRect(),d=e.getBoundingClientRect(),m={t:h.top-d.height-s,b:h.bottom+s,r:h.right+s,l:h.left-d.width-s},f={vs:h.left,vm:h.left+h.width/2-d.width/2,ve:h.left+h.width-d.width,hs:h.top,hm:h.bottom-h.height/2-d.height/2,he:h.bottom-d.height},[v,b=\"middle\"]=a.split(\"-\"),y=c[v],g=l[b],{top:_,left:w,bottom:A,right:$}=n;for(const t of y){const o=\"t\"===t||\"b\"===t;let n=m[t];const[s,a]=o?[\"top\",\"left\"]:[\"left\",\"top\"],[l,c]=o?[d.height,d.width]:[d.width,d.height],[p,u]=o?[A,$]:[$,A],[v,b]=o?[_,w]:[w,_];if(!(n<v||n+l+r>p))for(const p of g){let m=f[(o?\"v\":\"h\")+p];if(!(m<b||m+c+r>u)){if(m-=d[a],n-=d[s],e.style[a]=`${m}px`,e.style[s]=`${n}px`,i){const e=o?h.width/2:h.height/2,r=c/2,u=e>r,d=m+{s:u?r:e,m:r,e:u?r:c-e}[p],f=n+{t:l,b:0,r:0,l}[t];i.style[a]=`${d}px`,i.style[s]=`${f}px`}return t+p}}}return e.style.left=p,e.style.top=u,null})(e,o,n)}}};class E{static utils=o;static version=\"1.9.1\";static I18N_DEFAULTS={\"ui:dialog\":\"color picker dialog\",\"btn:toggle\":\"toggle color picker dialog\",\"btn:swatch\":\"color swatch\",\"btn:last-color\":\"use previous color\",\"btn:save\":\"Save\",\"btn:cancel\":\"Cancel\",\"btn:clear\":\"Clear\",\"aria:btn:save\":\"save and close\",\"aria:btn:cancel\":\"cancel and close\",\"aria:btn:clear\":\"clear and close\",\"aria:input\":\"color input field\",\"aria:palette\":\"color selection area\",\"aria:hue\":\"hue selection slider\",\"aria:opacity\":\"selection slider\"};static DEFAULT_OPTIONS={appClass:null,theme:\"classic\",useAsButton:!1,padding:8,disabled:!1,comparison:!0,closeOnScroll:!1,outputPrecision:0,lockOpacity:!1,autoReposition:!0,container:\"body\",components:{interaction:{}},i18n:{},swatches:null,inline:!1,sliders:null,default:\"#42445a\",defaultRepresentation:null,position:\"bottom-middle\",adjustableNumbers:!0,showAlways:!1,closeWithKey:\"Escape\"};_initializingActive=!0;_recalc=!0;_nanopop=null;_root=null;_color=A();_lastColor=A();_swatchColors=[];_setupAnimationFrame=null;_eventListener={init:[],save:[],hide:[],show:[],clear:[],change:[],changestop:[],cancel:[],swatchselect:[]};constructor(t){this.options=t=Object.assign({...E.DEFAULT_OPTIONS},t);const{swatches:e,components:o,theme:n,sliders:i,lockOpacity:s,padding:r}=t;[\"nano\",\"monolith\"].includes(n)&&!i&&(t.sliders=\"h\"),o.interaction||(o.interaction={});const{preview:a,opacity:l,hue:c,palette:p}=o;o.opacity=!s&&l,o.palette=p||a||l||c,this._preBuild(),this._buildComponents(),this._bindEvents(),this._finalBuild(),e&&e.length&&e.forEach((t=>this.addSwatch(t)));const{button:u,app:h}=this._root;this._nanopop=O(u,h,{margin:r}),u.setAttribute(\"role\",\"button\"),u.setAttribute(\"aria-label\",this._t(\"btn:toggle\"));const d=this;this._setupAnimationFrame=requestAnimationFrame((function e(){if(!h.offsetWidth)return requestAnimationFrame(e);d.setColor(t.default),d._rePositioningPicker(),t.defaultRepresentation&&(d._representation=t.defaultRepresentation,d.setColorRepresentation(d._representation)),t.showAlways&&d.show(),d._initializingActive=!1,d._emit(\"init\")}))}static create=t=>new E(t);_preBuild(){const{options:t}=this;for(const e of[\"el\",\"container\"])t[e]=c(t[e]);this._root=(t=>{const{components:e,useAsButton:o,inline:n,appClass:i,theme:s,lockOpacity:r}=t.options,l=t=>t?\"\":'style=\"display:none\" hidden',c=e=>t._t(e),p=a(`\\n <div :ref=\"root\" class=\"pickr\">\\n\\n ${o?\"\":'<button type=\"button\" :ref=\"button\" class=\"pcr-button\"></button>'}\\n\\n <div :ref=\"app\" class=\"pcr-app ${i||\"\"}\" data-theme=\"${s}\" ${n?'style=\"position: unset\"':\"\"} aria-label=\"${c(\"ui:dialog\")}\" role=\"window\">\\n <div class=\"pcr-selection\" ${l(e.palette)}>\\n <div :obj=\"preview\" class=\"pcr-color-preview\" ${l(e.preview)}>\\n <button type=\"button\" :ref=\"lastColor\" class=\"pcr-last-color\" aria-label=\"${c(\"btn:last-color\")}\"></button>\\n <div :ref=\"currentColor\" class=\"pcr-current-color\"></div>\\n </div>\\n\\n <div :obj=\"palette\" class=\"pcr-color-palette\">\\n <div :ref=\"picker\" class=\"pcr-picker\"></div>\\n <div :ref=\"palette\" class=\"pcr-palette\" tabindex=\"0\" aria-label=\"${c(\"aria:palette\")}\" role=\"listbox\"></div>\\n </div>\\n\\n <div :obj=\"hue\" class=\"pcr-color-chooser\" ${l(e.hue)}>\\n <div :ref=\"picker\" class=\"pcr-picker\"></div>\\n <div :ref=\"slider\" class=\"pcr-hue pcr-slider\" tabindex=\"0\" aria-label=\"${c(\"aria:hue\")}\" role=\"slider\"></div>\\n </div>\\n\\n <div :obj=\"opacity\" class=\"pcr-color-opacity\" ${l(e.opacity)}>\\n <div :ref=\"picker\" class=\"pcr-picker\"></div>\\n <div :ref=\"slider\" class=\"pcr-opacity pcr-slider\" tabindex=\"0\" aria-label=\"${c(\"aria:opacity\")}\" role=\"slider\"></div>\\n </div>\\n </div>\\n\\n <div class=\"pcr-swatches ${e.palette?\"\":\"pcr-last\"}\" :ref=\"swatches\"></div>\\n\\n <div :obj=\"interaction\" class=\"pcr-interaction\" ${l(Object.keys(e.interaction).length)}>\\n <input :ref=\"result\" class=\"pcr-result\" type=\"text\" spellcheck=\"false\" ${l(e.interaction.input)} aria-label=\"${c(\"aria:input\")}\">\\n\\n <input :arr=\"options\" class=\"pcr-type\" data-type=\"HEXA\" value=\"${r?\"HEX\":\"HEXA\"}\" type=\"button\" ${l(e.interaction.hex)}>\\n <input :arr=\"options\" class=\"pcr-type\" data-type=\"RGBA\" value=\"${r?\"RGB\":\"RGBA\"}\" type=\"button\" ${l(e.interaction.rgba)}>\\n <input :arr=\"options\" class=\"pcr-type\" data-type=\"HSLA\" value=\"${r?\"HSL\":\"HSLA\"}\" type=\"button\" ${l(e.interaction.hsla)}>\\n <input :arr=\"options\" class=\"pcr-type\" data-type=\"HSVA\" value=\"${r?\"HSV\":\"HSVA\"}\" type=\"button\" ${l(e.interaction.hsva)}>\\n <input :arr=\"options\" class=\"pcr-type\" data-type=\"CMYK\" value=\"CMYK\" type=\"button\" ${l(e.interaction.cmyk)}>\\n\\n <input :ref=\"save\" class=\"pcr-save\" value=\"${c(\"btn:save\")}\" type=\"button\" ${l(e.interaction.save)} aria-label=\"${c(\"aria:btn:save\")}\">\\n <input :ref=\"cancel\" class=\"pcr-cancel\" value=\"${c(\"btn:cancel\")}\" type=\"button\" ${l(e.interaction.cancel)} aria-label=\"${c(\"aria:btn:cancel\")}\">\\n <input :ref=\"clear\" class=\"pcr-clear\" value=\"${c(\"btn:clear\")}\" type=\"button\" ${l(e.interaction.clear)} aria-label=\"${c(\"aria:btn:clear\")}\">\\n </div>\\n </div>\\n </div>\\n `),u=p.interaction;return u.options.find((t=>!t.hidden&&!t.classList.add(\"active\"))),u.type=()=>u.options.find((t=>t.classList.contains(\"active\"))),p})(this),t.useAsButton&&(this._root.button=t.el),t.container.appendChild(this._root.root)}_finalBuild(){const t=this.options,e=this._root;if(t.container.removeChild(e.root),t.inline){const o=t.el.parentElement;t.el.nextSibling?o.insertBefore(e.app,t.el.nextSibling):o.appendChild(e.app)}else t.container.appendChild(e.app);t.useAsButton?t.inline&&t.el.remove():t.el.parentNode.replaceChild(e.root,t.el),t.disabled&&this.disable(),t.comparison||(e.button.style.transition=\"none\",t.useAsButton||(e.preview.lastColor.style.transition=\"none\")),this.hide()}_buildComponents(){const t=this,e=this.options.components,o=(t.options.sliders||\"v\").repeat(2),[n,i]=o.match(/^[vh]+$/g)?o:[],s=()=>this._color||(this._color=this._lastColor.clone()),r={palette:C({element:t._root.palette.picker,wrapper:t._root.palette.palette,onstop:()=>t._emit(\"changestop\",\"slider\",t),onchange(o,n){if(!e.palette)return;const i=s(),{_root:r,options:a}=t,{lastColor:l,currentColor:c}=r.preview;t._recalc&&(i.s=100*o,i.v=100-100*n,i.v<0&&(i.v=0),t._updateOutput(\"slider\"));const p=i.toRGBA().toString(0);this.element.style.background=p,this.wrapper.style.background=`\\n linear-gradient(to top, rgba(0, 0, 0, ${i.a}), transparent),\\n linear-gradient(to left, hsla(${i.h}, 100%, 50%, ${i.a}), rgba(255, 255, 255, ${i.a}))\\n `,a.comparison?a.useAsButton||t._lastColor||l.style.setProperty(\"--pcr-color\",p):(r.button.style.setProperty(\"--pcr-color\",p),r.button.classList.remove(\"clear\"));const u=i.toHEXA().toString();for(const{el:e,color:o}of t._swatchColors)e.classList[u===o.toHEXA().toString()?\"add\":\"remove\"](\"pcr-active\");c.style.setProperty(\"--pcr-color\",p)}}),hue:C({lock:\"v\"===i?\"h\":\"v\",element:t._root.hue.picker,wrapper:t._root.hue.slider,onstop:()=>t._emit(\"changestop\",\"slider\",t),onchange(o){if(!e.hue||!e.palette)return;const n=s();t._recalc&&(n.h=360*o),this.element.style.backgroundColor=`hsl(${n.h}, 100%, 50%)`,r.palette.trigger()}}),opacity:C({lock:\"v\"===n?\"h\":\"v\",element:t._root.opacity.picker,wrapper:t._root.opacity.slider,onstop:()=>t._emit(\"changestop\",\"slider\",t),onchange(o){if(!e.opacity||!e.palette)return;const n=s();t._recalc&&(n.a=Math.round(100*o)/100),this.element.style.background=`rgba(0, 0, 0, ${n.a})`,r.palette.trigger()}}),selectable:k({elements:t._root.interaction.options,className:\"active\",onchange(e){t._representation=e.target.getAttribute(\"data-type\").toUpperCase(),t._recalc&&t._updateOutput(\"swatch\")}})};this._components=r}_bindEvents(){const{_root:t,options:e}=this,o=[i(t.interaction.clear,\"click\",(()=>this._clearColor())),i([t.interaction.cancel,t.preview.lastColor],\"click\",(()=>{this.setHSVA(...(this._lastColor||this._color).toHSVA(),!0),this._emit(\"cancel\")})),i(t.interaction.save,\"click\",(()=>{!this.applyColor()&&!e.showAlways&&this.hide()})),i(t.interaction.result,[\"keyup\",\"input\"],(t=>{this.setColor(t.target.value,!0)&&!this._initializingActive&&(this._emit(\"change\",this._color,\"input\",this),this._emit(\"changestop\",\"input\",this)),t.stopImmediatePropagation()})),i(t.interaction.result,[\"focus\",\"blur\"],(t=>{this._recalc=\"blur\"===t.type,this._recalc&&this._updateOutput(null)})),i([t.palette.palette,t.palette.picker,t.hue.slider,t.hue.picker,t.opacity.slider,t.opacity.picker],[\"mousedown\",\"touchstart\"],(()=>this._recalc=!0),{passive:!0})];if(!e.showAlways){const n=e.closeWithKey;o.push(i(t.button,\"click\",(()=>this.isOpen()?this.hide():this.show())),i(document,\"keyup\",(t=>this.isOpen()&&(t.key===n||t.code===n)&&this.hide())),i(document,[\"touchstart\",\"mousedown\"],(e=>{this.isOpen()&&!l(e).some((e=>e===t.app||e===t.button))&&this.hide()}),{capture:!0}))}if(e.adjustableNumbers){const e={rgba:[255,255,255,1],hsva:[360,100,100,1],hsla:[360,100,100,1],cmyk:[100,100,100,100]};p(t.interaction.result,((t,o,n)=>{const i=e[this.getColorRepresentation().toLowerCase()];if(i){const e=i[n],s=t+(e>=100?1e3*o:o);return s<=0?0:Number((s<e?s:e).toPrecision(3))}return t}))}if(e.autoReposition&&!e.inline){let t=null;const n=this;o.push(i(window,[\"scroll\",\"resize\"],(()=>{n.isOpen()&&(e.closeOnScroll&&n.hide(),null===t?(t=setTimeout((()=>t=null),100),requestAnimationFrame((function e(){n._rePositioningPicker(),null!==t&&requestAnimationFrame(e)}))):(clearTimeout(t),t=setTimeout((()=>t=null),100)))}),{capture:!0}))}this._eventBindings=o}_rePositioningPicker(){const{options:t}=this;if(!t.inline){if(!this._nanopop.update({container:document.body.getBoundingClientRect(),position:t.position})){const t=this._root.app,e=t.getBoundingClientRect();t.style.top=(window.innerHeight-e.height)/2+\"px\",t.style.left=(window.innerWidth-e.width)/2+\"px\"}}}_updateOutput(t){const{_root:e,_color:o,options:n}=this;if(e.interaction.type()){const t=`to${e.interaction.type().getAttribute(\"data-type\")}`;e.interaction.result.value=\"function\"==typeof o[t]?o[t]().toString(n.outputPrecision):\"\"}!this._initializingActive&&this._recalc&&this._emit(\"change\",o,t,this)}_clearColor(t=!1){const{_root:e,options:o}=this;o.useAsButton||e.button.style.setProperty(\"--pcr-color\",\"rgba(0, 0, 0, 0.15)\"),e.button.classList.add(\"clear\"),o.showAlways||this.hide(),this._lastColor=null,this._initializingActive||t||(this._emit(\"save\",null),this._emit(\"clear\"))}_parseLocalColor(t){const{values:e,type:o,a:n}=w(t),{lockOpacity:i}=this.options,s=void 0!==n&&1!==n;return e&&3===e.length&&(e[3]=void 0),{values:!e||i&&s?null:e,type:o}}_t(t){return this.options.i18n[t]||E.I18N_DEFAULTS[t]}_emit(t,...e){this._eventListener[t].forEach((t=>t(...e,this)))}on(t,e){return this._eventListener[t].push(e),this}off(t,e){const o=this._eventListener[t]||[],n=o.indexOf(e);return~n&&o.splice(n,1),this}addSwatch(t){const{values:e}=this._parseLocalColor(t);if(e){const{_swatchColors:t,_root:o}=this,n=A(...e),s=r(`<button type=\"button\" style=\"--pcr-color: ${n.toRGBA().toString(0)}\" aria-label=\"${this._t(\"btn:swatch\")}\"/>`);return o.swatches.appendChild(s),t.push({el:s,color:n}),this._eventBindings.push(i(s,\"click\",(()=>{this.setHSVA(...n.toHSVA(),!0),this._emit(\"swatchselect\",n),this._emit(\"change\",n,\"swatch\",this)}))),!0}return!1}removeSwatch(t){const e=this._swatchColors[t];if(e){const{el:o}=e;return this._root.swatches.removeChild(o),this._swatchColors.splice(t,1),!0}return!1}applyColor(t=!1){const{preview:e,button:o}=this._root,n=this._color.toRGBA().toString(0);return e.lastColor.style.setProperty(\"--pcr-color\",n),this.options.useAsButton||o.style.setProperty(\"--pcr-color\",n),o.classList.remove(\"clear\"),this._lastColor=this._color.clone(),this._initializingActive||t||this._emit(\"save\",this._color),this}destroy(){cancelAnimationFrame(this._setupAnimationFrame),this._eventBindings.forEach((t=>s(...t))),Object.keys(this._components).forEach((t=>this._components[t].destroy()))}destroyAndRemove(){this.destroy();const{root:t,app:e}=this._root;t.parentElement&&t.parentElement.removeChild(t),e.parentElement.removeChild(e),Object.keys(this).forEach((t=>this[t]=null))}hide(){return!!this.isOpen()&&(this._root.app.classList.remove(\"visible\"),this._emit(\"hide\"),!0)}show(){return!this.options.disabled&&!this.isOpen()&&(this._root.app.classList.add(\"visible\"),this._rePositioningPicker(),this._emit(\"show\",this._color),this)}isOpen(){return this._root.app.classList.contains(\"visible\")}setHSVA(t=360,e=0,o=0,n=1,i=!1){const s=this._recalc;if(this._recalc=!1,t<0||t>360||e<0||e>100||o<0||o>100||n<0||n>1)return!1;this._color=A(t,e,o,n);const{hue:r,opacity:a,palette:l}=this._components;return r.update(t/360),a.update(n),l.update(e/100,1-o/100),i||this.applyColor(),s&&this._updateOutput(),this._recalc=s,!0}setColor(t,e=!1){if(null===t)return this._clearColor(e),!0;const{values:o,type:n}=this._parseLocalColor(t);if(o){const t=n.toUpperCase(),{options:i}=this._root.interaction,s=i.find((e=>e.getAttribute(\"data-type\")===t));if(s&&!s.hidden)for(const t of i)t.classList[t===s?\"add\":\"remove\"](\"active\");return!!this.setHSVA(...o,e)&&this.setColorRepresentation(t)}return!1}setColorRepresentation(t){return t=t.toUpperCase(),!!this._root.interaction.options.find((e=>e.getAttribute(\"data-type\").startsWith(t)&&!e.click()))}getColorRepresentation(){return this._representation}getColor(){return this._color}getSelectedColor(){return this._lastColor}getRoot(){return this._root}disable(){return this.hide(),this.options.disabled=!0,this._root.button.classList.add(\"disabled\"),this}enable(){return this.options.disabled=!1,this._root.button.classList.remove(\"disabled\"),this}}return e=e.default})()));\n//# sourceMappingURL=pickr.min.js.map","import { LiteGUIObject } from \"./@types/globals\";\nimport { LiteGUI } from \"./core\";\nimport { Trigger } from \"./utilities\";\n\n/**\n * Configuration options for the Area component.\n */\nexport interface AreaOptions\n{\n /**\n * Minimum size for the split sections.\n * @default 10\n */\n minSplitSize?: number;\n /**\n * If true, the resize event will be fired while dragging the splitter.\n */\n immediateResize?: boolean;\n /**\n * Unique identifier for the area's root element.\n */\n id?: string,\n /**\n * CSS class name to add to the root element.\n */\n className?: string,\n /**\n * Width of the area. Can be a number (pixels) or string (CSS value).\n * @default \"100%\"\n */\n width?: number | string,\n /**\n * Height of the area. Can be a number (pixels) or string (CSS value).\n * @default \"100%\"\n */\n height?: number | string,\n /**\n * ID to assign to the content element of the area.\n */\n contentId?: string,\n /**\n * If true, the area will listen to the global LiteGUI 'resized' event.\n */\n autoresize?: boolean,\n /**\n * Indicates if this is the main area.\n */\n main?: boolean\n /**\n * Callback fired on resize.\n */\n onResize?: () => void;\n}\n\n/**\n * Interface extending HTMLDivElement to include a reference to the Area instance.\n */\nexport interface AreaElement extends HTMLDivElement\n{\n /**\n * Reference to the Area instance associated with this element.\n */\n litearea?: Area,\n}\n\n/**\n * An Area is an stretched container.\n * Areas can be split several times horizontally or vertically to fit different columns or rows\n *\n * @class Area\n * @param {AreaOptions} [options] Configuration options.\n * @example\n * ```typescript\n * const mainArea = new LiteGUI.Area({ id: \"main\", contentId: \"canvasarea\", height: \"100%\" });\n * mainArea.split(\"vertical\", [\"50%\", null], true);\n * ```\n */\nexport class Area implements LiteGUIObject\n{\n\t/**\n\t * The root HTML element of the area.\n\t */\n\troot: AreaElement;\n\t/**\n\t * Configuration options.\n\t */\n\toptions: AreaOptions;\n\t/**\n\t * The content element of the area.\n\t */\n\tcontent: HTMLDivElement;\n\t/**\n\t * Direction of the split (\"vertical\", \"horizontal\" or \"none\").\n\t */\n\tsplitDirection: string;\n\t/**\n\t * Sub-sections of this area if split.\n\t */\n\tsections: Area[];\n\t/**\n\t * Current direction.\n\t */\n\tdirection?: string;\n\t/**\n\t * Split bar element if split.\n\t */\n\tsplitbar?: HTMLDivElement;\n\t/**\n\t * Reference to the dynamic section (the one that resizes).\n\t */\n\tdynamicSection?: Area;\n\t/**\n\t * Size of the area.\n\t */\n\tsize?: number | string | null;\n\t/**\n\t * @private Computed size.\n\t */\n\tprivate _computedSize: number[];\n\n\t/**\n\t * Vertical constant.\n\t */\n\tpublic static VERTICAL: \"vertical\" = \"vertical\" as const;\n\t/**\n\t * Horizontal constant.\n\t */\n\tpublic static HORIZONTAL: \"horizontal\" = \"horizontal\" as const;\n\t/**\n\t * Default size of the splitbar.\n\t */\n\tpublic static splitbarSize = 4;\n\n\t/**\n\t * Creates an instance of the Area class.\n\t * @param {AreaOptions} [options] Configuration options.\n\t */\n\tconstructor(options: AreaOptions = {})\n\t{\n\t\t/* The root element containing all sections */\n\t\tconst root = document.createElement(\"div\") as AreaElement;\n\t\troot.className = \"litearea\";\n\t\tif (options?.id) { root.id = options.id; }\n\t\tif (options?.className) { root.className += ` ${options.className}`; }\n\n\t\tthis.root = root;\n\t\tthis.root.litearea = this;\n\n\t\tlet width = options?.width || \"100%\";\n\t\tlet height = options?.height || \"100%\";\n\n\t\tif (typeof (width) == 'number' && width < 0)\n\t\t{\n\t\t\twidth = `calc( 100% - ${Math.abs(width)}px)`;\n\t\t}\n\t\tif (typeof (height) == 'number' && height < 0)\n\t\t{\n\t\t\theight = `calc( 100% - ${Math.abs(height)}px)`;\n\t\t}\n\n\t\troot.style.width = typeof width === 'number' ? `${width}px` : width;\n\t\troot.style.height = typeof height === 'number' ? `${height}px` : height;\n\n\t\tthis.options = options;\n\n\t\tthis._computedSize = [this.root.offsetWidth, this.root.offsetHeight];\n\n\t\tconst content = document.createElement(\"div\");\n\t\tif (options?.contentId) { content.id = options.contentId; }\n\t\tcontent.className = \"liteareacontent\";\n\t\tcontent.style.width = \"100%\";\n\t\tcontent.style.height = \"100%\";\n\t\tthis.root.appendChild(content);\n\t\tthis.content = content;\n\n\t\tthis.splitDirection = \"none\";\n\t\tthis.sections = [];\n\n\t\tif (options?.autoresize)\n\t\t{\n\t\t\tLiteGUI.bind(LiteGUI, \"resized\", () =>\n\t\t\t{\n\t\t\t\tthis.onResize();\n\t\t\t});\n\t\t}\n\t}\n\t/**\n\t * Get section by index.\n\t * @param {number} num Index of the section (0 or 1).\n\t * @returns {Area | null} The section area or null if not found.\n\t */\n\tgetSection(num: number)\n\t{\n\t\tnum = num ?? 0;\n\t\tif (this.sections.length > num)\n\t\t{\n\t\t\treturn this.sections[num];\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t * Callback fired when the area is resized.\n\t * @param {PointerEvent | MouseEvent} [event] Event object.\n\t */\n\tonResize(event?: PointerEvent | MouseEvent)\n\t{\n\t\tconst computedSize = [this.root.offsetWidth, this.root.offsetHeight];\n\t\tif (event && this._computedSize && computedSize[0] ==\n this._computedSize[0] && computedSize[1] == this._computedSize[1])\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.sendResizeEvent(event);\n\t}\n\n\t/**\n\t * Sends the resize event to all the sections.\n\t * @param {PointerEvent | MouseEvent} [e] Event object.\n\t */\n\tsendResizeEvent(e?: PointerEvent | MouseEvent)\n\t{\n\t\tif (this.sections.length)\n\t\t{\n\t\t\tfor (const i in this.sections)\n\t\t\t{\n\t\t\t\tconst section = this.sections[i];\n\t\t\t\tsection.onResize(e);\n\t\t\t}\n\t\t}\n\t\telse // Send it to the children\n\t\t{\n\t\t\tfor (let j = 0; j < this.root.childNodes.length; j++)\n\t\t\t{\n\t\t\t\tconst element = this.root.childNodes[j] as AreaElement;\n\t\t\t\tif (element.litearea)\n\t\t\t\t{\n\t\t\t\t\telement.litearea.onResize();\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tLiteGUI.trigger(element, \"resize\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tLiteGUI.sizeToCSS();\n\t\t// Inner callback\n\t\tif (this.options.onResize) { this.options.onResize(); }\n\t}\n\n\t/**\n\t * Gets the width of the root element.\n\t * @type {number}\n\t */\n\tpublic get getWidth(): number | null | string\n\t{\n\t\treturn this.root.offsetWidth;\n\t}\n\n\t/**\n\t * Gets the height of the root element.\n\t * @type {number}\n\t */\n\tpublic get getHeight(): number | null | string\n\t{\n\t\treturn this.root.offsetHeight;\n\t}\n\n\t/**\n\t * Checks if the area is visible.\n\t * @type {boolean}\n\t */\n\tpublic get isVisible(): boolean\n\t{\n\t\treturn this.root.style.display != \"none\";\n\t}\n\n\t/**\n\t * Adjusts the height of the area to fill the remaining space in the parent.\n\t */\n\tadjustHeight()\n\t{\n\t\tif (!this.root.parentNode)\n\t\t{\n\t\t\tconsole.error(\"Cannot adjust height of LiteGUI.Area without parent\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst parentHeight = (this.root.parentNode as AreaElement).offsetHeight;\n\n\t\t// Check position\n\t\tconst y = this.root.getClientRects()[0].top + parentHeight;\n\n\t\t// Adjust height\n\t\tthis.root.style.height = \"calc( 100% - \" + y + \"px )\";\n\t}\n\n\t/**\n\t * Splits the area into two sections.\n\t * @param {\"vertical\" | \"horizontal\"} direction Direction of the split.\n\t * @param {(string | null | number)[]} sizes Array containing the sizes. One must be null to be dynamic.\n\t * @param {boolean} editable If true, a draggable bar is created.\n\t */\n\tsplit(direction: \"vertical\" | \"horizontal\", sizes?: (string | null | number)[], editable?: boolean)\n\t{\n\t\tif (typeof direction !== 'string')\n\t\t{\n\t\t\tthrow (\"First parameter must be a string: 'vertical' or 'horizontal'\");\n\t\t}\n\n\t\tif (direction != \"vertical\" && direction != \"horizontal\")\n\t\t{\n\t\t\tthrow (\"First parameter must be a string: 'vertical' or 'horizontal'\");\n\t\t}\n\n\t\tsizes = sizes ?? [\"50%\", null];\n\n\t\tif (this.sections.length) { throw \"cannot split twice\"; }\n\n\t\t// Create areas\n\t\tconst area1 = new Area({ contentId: this.content.id } as AreaOptions);\n\t\tarea1.root.style.display = \"inline-block\";\n\t\tconst area2 = new Area();\n\t\tarea2.root.style.display = \"inline-block\";\n\n\t\tlet splitinfo = \"\";\n\t\tlet splitbar: HTMLDivElement | undefined;\n\t\tlet dynamicSection: Area | undefined;\n\t\tconst _onMouseDown = (e: MouseEvent) =>\n\t\t{\n\t\t\tconst doc = this.root.ownerDocument;\n\t\t\tdoc.addEventListener(\"mousemove\", _onMouseMove);\n\t\t\tdoc.addEventListener(\"mouseup\", _onMouseUp);\n\t\t\tlastPos[0] = e.pageX;\n\t\t\tlastPos[1] = e.pageY;\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t};\n\t\tif (editable)\n\t\t{\n\t\t\tsplitinfo = ` - ${(Area.splitbarSize + 2)}px`;\n\t\t\tsplitbar = document.createElement(\"div\");\n\t\t\tsplitbar.className = `litesplitbar ${direction}`;\n\t\t\tif (direction == \"vertical\")\n\t\t\t{\n\t\t\t\tsplitbar.style.height = `${Area.splitbarSize}px`;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tsplitbar.style.width = `${Area.splitbarSize}px`;\n\t\t\t}\n\t\t\tthis.splitbar = splitbar;\n\t\t\tsplitbar.addEventListener(\"mousedown\", _onMouseDown);\n\t\t}\n\n\t\tif (direction == \"vertical\")\n\t\t{\n\t\t\tarea1.root.style.width = \"100%\";\n\t\t\tarea2.root.style.width = \"100%\";\n\n\t\t\tif (sizes[0] == null)\n\t\t\t{\n\t\t\t\tlet h = sizes[1];\n\t\t\t\tif (typeof (h) == \"number\")\n\t\t\t\t{\n\t\t\t\t\th = `${sizes[1]}px`;\n\t\t\t\t}\n\n\t\t\t\tarea1.root.style.height = `calc( 100% - ${h + splitinfo} )`;\n\t\t\t\tarea2.root.style.height = h!;\n\t\t\t\tarea2.size = h;\n\t\t\t\tdynamicSection = area1;\n\t\t\t}\n\t\t\telse if (sizes[1] == null)\n\t\t\t{\n\t\t\t\tlet h = sizes[0];\n\t\t\t\tif (typeof (h) == \"number\")\n\t\t\t\t{\n\t\t\t\t\th = `${sizes[0]}px`;\n\t\t\t\t}\n\n\t\t\t\tarea1.root.style.height = h;\n\t\t\t\tarea1.size = h;\n\t\t\t\tarea2.root.style.height = `calc( 100% - ${h + splitinfo} )`;\n\t\t\t\tdynamicSection = area2;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tlet h1 = sizes[0];\n\t\t\t\tif (typeof (h1) == \"number\")\n\t\t\t\t{\n\t\t\t\t\th1 = `${sizes[0]}px`;\n\t\t\t\t}\n\t\t\t\tlet h2 = sizes[1];\n\t\t\t\tif (typeof (h2) == \"number\")\n\t\t\t\t{\n\t\t\t\t\th2 = `${sizes[1]}px`;\n\t\t\t\t}\n\t\t\t\tarea1.root.style.height = h1;\n\t\t\t\tarea1.size = h1;\n\t\t\t\tarea2.root.style.height = h2;\n\t\t\t\tarea2.size = h2;\n\t\t\t}\n\t\t}\n\t\telse // Horizontal\n\t\t{\n\t\t\tarea1.root.style.height = \"100%\";\n\t\t\tarea2.root.style.height = \"100%\";\n\n\t\t\tif (sizes[0] == null)\n\t\t\t{\n\t\t\t\tlet w = sizes[1];\n\t\t\t\tif (typeof (w) == \"number\")\n\t\t\t\t{\n\t\t\t\t\tw = `${sizes[1]}px`;\n\t\t\t\t}\n\t\t\t\tarea1.root.style.width = `calc( 100% - ${w + splitinfo} )`;\n\t\t\t\tarea2.root.style.width = w!;\n\t\t\t\tarea2.size = sizes[1];\n\t\t\t\tdynamicSection = area1;\n\t\t\t}\n\t\t\telse if (sizes[1] == null)\n\t\t\t{\n\t\t\t\tlet w = sizes[0];\n\t\t\t\tif (typeof (w) == \"number\")\n\t\t\t\t{\n\t\t\t\t\tw = `${sizes[0]}px`;\n\t\t\t\t}\n\n\t\t\t\tarea1.root.style.width = w;\n\t\t\t\tarea1.size = w;\n\t\t\t\tarea2.root.style.width = `calc( 100% - ${w + splitinfo} )`;\n\t\t\t\tdynamicSection = area2;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tlet w1 = sizes[0];\n\t\t\t\tif (typeof (w1) == \"number\")\n\t\t\t\t{\n\t\t\t\t\tw1 = `${sizes[0]}px`;\n\t\t\t\t}\n\t\t\t\tlet w2 = sizes[1];\n\t\t\t\tif (typeof (w2) == \"number\")\n\t\t\t\t{\n\t\t\t\t\tw2 = `${sizes[1]}px`;\n\t\t\t\t}\n\n\t\t\t\tarea1.root.style.width = w1;\n\t\t\t\tarea1.size = w1;\n\t\t\t\tarea2.root.style.width = w2;\n\t\t\t\tarea2.size = w2;\n\t\t\t}\n\t\t}\n\n\t\tarea1.root.removeChild(area1.content);\n\t\tarea1.root.appendChild(this.content);\n\t\tarea1.content = this.content;\n\n\t\tthis.root.appendChild(area1.root);\n\t\tif (splitbar) { this.root.appendChild(splitbar); }\n\t\tthis.root.appendChild(area2.root);\n\n\t\tthis.sections = [area1, area2];\n\t\tthis.dynamicSection = dynamicSection;\n\t\tthis.direction = direction;\n\n\t\t// SPLITTER DRAGGER INTERACTION\n\t\tconst lastPos = [0, 0];\n\n\t\tconst _onMouseMove = (e: MouseEvent) =>\n\t\t{\n\t\t\tif (direction == \"horizontal\")\n\t\t\t{\n\t\t\t\tif (lastPos[0] != e.pageX)\n\t\t\t\t{\n\t\t\t\t\tthis.moveSplit(lastPos[0] - e.pageX);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (direction == \"vertical\")\n\t\t\t{\n\t\t\t\tif (lastPos[1] != e.pageY)\n\t\t\t\t{\n\t\t\t\t\tthis.moveSplit(e.pageY - lastPos[1]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlastPos[0] = e.pageX;\n\t\t\tlastPos[1] = e.pageY;\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t};\n\n\t\tconst _onMouseUp = (e: MouseEvent) =>\n\t\t{\n\t\t\tconst doc = this.root.ownerDocument;\n\t\t\tdoc.removeEventListener(\"mousemove\", _onMouseMove);\n\t\t\tdoc.removeEventListener(\"mouseup\", _onMouseUp);\n\t\t\tthis.onResize(e);\n\t\t};\n\t}\n\n\t/**\n\t * Hides the area.\n\t */\n\thide()\n\t{\n\t\tthis.root.style.display = \"none\";\n\t}\n\n\t/**\n\t * Shows the area.\n\t */\n\tshow()\n\t{\n\t\tthis.root.style.display = \"block\";\n\t}\n\n\t/**\n\t * Shows a specific section.\n\t * @param {number} num Index of the section (0 or 1).\n\t */\n\tshowSection(num: number)\n\t{\n\t\tlet section = this.sections[num];\n\t\tlet size: string | number = 0;\n\n\t\tif (section && section.root.style.display != \"none\") { return; } // Already visible\n\n\t\tif (this.direction == \"horizontal\")\n\t\t{\n\t\t\tsize = section.root.style.width;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tsize = section.root.style.height;\n\t\t}\n\n\t\tif (size.indexOf(\"calc\") != -1) { size = \"50%\"; }\n\n\t\tfor (const i in this.sections)\n\t\t{\n\t\t\tsection = this.sections[i];\n\n\t\t\tif (i == num.toString())\n\t\t\t{\n\t\t\t\tsection.root.style.display = \"inline-block\";\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (this.direction == \"horizontal\")\n\t\t\t\t{\n\t\t\t\t\tsection.root.style.width = `calc( 100% - ${size} - 5px)`;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tsection.root.style.height = `calc( 100% - ${size} - 5px)`;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this.splitbar) { this.splitbar.style.display = \"inline-block\"; }\n\n\t\tthis.sendResizeEvent();\n\t}\n\n\t/**\n\t * Hides a specific section.\n\t * @param {number} num Index of the section (0 or 1).\n\t */\n\thideSection(num: number)\n\t{\n\t\tfor (const i in this.sections)\n\t\t{\n\t\t\tconst section = this.sections[i];\n\n\t\t\tif (i == num.toString())\n\t\t\t{\n\t\t\t\tsection.root.style.display = \"none\";\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (this.direction == \"horizontal\")\n\t\t\t\t{\n\t\t\t\t\tsection.root.style.width = \"100%\";\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tsection.root.style.height = \"100%\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this.splitbar) { this.splitbar.style.display = \"none\"; }\n\n\t\tthis.sendResizeEvent();\n\t}\n\n\t/**\n\t * Moves the split bar by a certain delta.\n\t * @param {number} delta Amount to move in pixels.\n\t */\n\tmoveSplit(delta: number)\n\t{\n\t\tif (!this.sections) { return; }\n\n\t\tconst area1 = this.sections[0];\n\t\tconst area2 = this.sections[1];\n\t\tconst splitinfo = ` - ${Area.splitbarSize}px`;\n\n\t\tconst minSize = this.options?.minSplitSize ?? 10;\n\n\t\tif (this.direction == \"horizontal\")\n\t\t{\n\n\t\t\tif (this.dynamicSection == area1)\n\t\t\t{\n\t\t\t\tlet size = (area2.root.offsetWidth + delta);\n\t\t\t\tif (size < minSize)\n\t\t\t\t{\n\t\t\t\t\tsize = minSize;\n\t\t\t\t}\n\t\t\t\tarea1.root.style.width = `calc( 100% - ${size}px ${splitinfo} )`;\n\t\t\t\tarea2.root.style.width = `${size}px`; // Other split\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tlet size = (area1.root.offsetWidth - delta);\n\t\t\t\tif (size < minSize)\n\t\t\t\t{\n\t\t\t\t\tsize = minSize;\n\t\t\t\t}\n\t\t\t\tarea2.root.style.width = `calc( 100% - ${size}px ${splitinfo} )`;\n\t\t\t\tarea1.root.style.width = `${size}px`; // Other split\n\t\t\t}\n\t\t}\n\t\telse if (this.direction == \"vertical\")\n\t\t{\n\t\t\tif (this.dynamicSection == area1)\n\t\t\t{\n\t\t\t\tlet size = (area2.root.offsetHeight - delta);\n\t\t\t\tif (size < minSize)\n\t\t\t\t{\n\t\t\t\t\tsize = minSize;\n\t\t\t\t}\n\t\t\t\tarea1.root.style.height = `calc( 100% - ${size}px ${splitinfo} )`;\n\t\t\t\tarea2.root.style.height = `${size}px`; // Other split\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tlet size = (area1.root.offsetHeight + delta);\n\t\t\t\tif (size < minSize)\n\t\t\t\t{\n\t\t\t\t\tsize = minSize;\n\t\t\t\t}\n\t\t\t\tarea2.root.style.height = `calc( 100% - ${size}px ${splitinfo} )`;\n\t\t\t\tarea1.root.style.height = `${size}px`; // Other split\n\t\t\t}\n\t\t}\n\n\t\tTrigger(this.root, \"split_moved\");\n\t\t// Trigger split_moved event in all areas inside this area\n\t\tconst areas = this.root.querySelectorAll(\".litearea\");\n\t\tfor (let i = 0; i < areas.length; ++i)\n\t\t{\n\t\t\tTrigger(areas[i], \"split_moved\");\n\t\t}\n\t}\n\n\t/**\n\t * Adds an event listener to the root element.\n\t * @param {string} a Event name.\n\t * @param {(e: Event) => void} b Callback function.\n\t * @param {boolean | AddEventListenerOptions} [c] Options.\n\t */\n\taddEventListener(a: string, b: (e: Event) => void, c?: boolean | AddEventListenerOptions)\n\t{\n\t\treturn this.root.addEventListener(a, b, c);\n\t}\n\n\t/**\n\t * Sets the size of a specific section area.\n\t * @param {Area} area The area instance to resize.\n\t * @param {number} size New size in pixels.\n\t */\n\tsetAreaSize(area: Area, size: number)\n\t{\n\t\tconst splitinfo = `${size + Area.splitbarSize}px`;\n\t\tarea.root.style.width = `calc( 100% - ${splitinfo} )`;\n\t}\n\n\t/**\n\t * Merges the split sections back into one.\n\t * @param {number} [mainSection=0] Index of the section to keep as main content.\n\t */\n\tmerge(mainSection?: number)\n\t{\n\t\tif (this.sections.length == 0) { throw \"not splitted\"; }\n\n\t\tconst main = this.sections[mainSection || 0];\n\n\t\tthis.root.appendChild(main.content);\n\t\tthis.content = main.content;\n\n\t\tthis.root.removeChild(this.sections[0].root);\n\t\tthis.root.removeChild(this.sections[1].root);\n\n\t\tthis.sections = [];\n\t\tthis._computedSize = [];\n\t\tthis.onResize();\n\t}\n\n\t/**\n\t * Adds content to the area.\n\t * @param {LiteGUIObject | HTMLElement | string} value Content to add (Element, LiteGUIObject with root, or HTML string).\n\t */\n\tadd(value: LiteGUIObject | HTMLElement | string)\n\t{\n\t\tif (typeof (value) == \"string\")\n\t\t{\n\t\t\tconst element = document.createElement(\"div\");\n\t\t\telement.innerHTML = value;\n\t\t\tvalue = element;\n\t\t}\n\n\t\tthis.content.appendChild(\"root\" in value ? value.root : value);\n\t}\n\n\t/**\n\t * Queries for an element inside the area's root.\n\t * @param {string} value CSS selector.\n\t * @returns {Element | null} The found element.\n\t */\n\tquery(value: string)\n\t{\n\t\treturn this.root.querySelector(value);\n\t}\n}\n\n/** *************** SPLIT ******************/\n\n/**\n * Interface extending HTMLDivElement for Split sections.\n */\nexport interface SplitElement extends HTMLDivElement\n{\n /**\n * Adds a child to the section.\n */\n add: (value: LiteGUIObject | HTMLElement) => void;\n /**\n * Height of the section, if number it will be converted to percentage.\n */\n height?: string | number;\n /**\n * Width of the section, if number it will be converted to percentage.\n */\n width?: string | number;\n}\n\n/**\n * Configuration options for the Split component.\n */\nexport interface SplitOptions\n{\n id?: string;\n vertical?: boolean;\n parent?: LiteGUIObject | HTMLElement;\n}\n\n/**\n * Split component that divides an area into multiple sections.\n *\n * @class Split\n */\nexport class Split\n{\n\t/**\n\t * The root HTML element.\n\t */\n\troot: HTMLElement;\n\t/**\n\t * Array of section elements.\n\t */\n\tsections: SplitElement[];\n\n\t/**\n\t * Creates an instance of Split.\n\t * @param {Array<string | number | SplitElement>} sections Definition of sections.\n\t * @param {SplitOptions} [options] Options (parent, vertical, id).\n\t */\n\tconstructor(sections: Array<string | number | SplitElement>, options: SplitOptions)\n\t{\n\t\toptions = options ?? {};\n\n\t\tconst root = document.createElement(\"div\") as HTMLElement;\n\t\tthis.root = root;\n\t\tif (options.id) { root.id = options.id; }\n\t\troot.className = `litesplit ${options.vertical ? \"vsplit\" : \"hsplit\"}`;\n\t\tthis.sections = [];\n\n\t\tfor (const i in sections)\n\t\t{\n\t\t\tconst section = sections[i];\n\t\t\tconst newSection = document.createElement(\"div\") as SplitElement;\n\n\t\t\tnewSection.className = `Zsplit-section split${i}`;\n\t\t\tif (typeof section == \"number\")\n\t\t\t{\n\t\t\t\tif (options.vertical)\n\t\t\t\t{\n\t\t\t\t\tnewSection.style.height = `${section.toFixed(1)}%`;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tnewSection.style.width = `${section.toFixed(1)}%`;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (typeof section == \"string\")\n\t\t\t{\n\t\t\t\tif (options.vertical)\n\t\t\t\t{\n\t\t\t\t\tnewSection.style.height = section;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tnewSection.style.width = section;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (section.id)\n\t\t\t\t{\n\t\t\t\t\tnewSection.id = section.id;\n\t\t\t\t}\n\t\t\t\tif (options.vertical)\n\t\t\t\t{\n\t\t\t\t\tconst height: string | number = section.height ?? \"100%\";\n\t\t\t\t\tnewSection.style.height = (typeof (height) == \"number\" ?\n\t\t\t\t\t\t`${height.toFixed(1)}%` : height);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tconst width: string | number = section.width ?? \"100%\";\n\t\t\t\t\tnewSection.style.width = (typeof (width) == \"number\" ?\n\t\t\t\t\t\t`${width.toFixed(1)}%` : width);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnewSection.add = function (element: LiteGUIObject | HTMLElement)\n\t\t\t{\n\t\t\t\tthis.appendChild(\"root\" in element ? element.root : element);\n\t\t\t};\n\n\t\t\tthis.sections.push(newSection);\n\t\t\troot.appendChild(newSection);\n\t\t}\n\n\t\tif (options.parent)\n\t\t{\n\t\t\tif (\"root\" in options.parent)\n\t\t\t{\n\t\t\t\toptions.parent.root.appendChild(root);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\toptions.parent.appendChild(root);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Gets a section by index.\n\t * @param {number} index Index of the section.\n\t * @returns {SplitElement} The section element.\n\t */\n\tgetSection(index: number)\n\t{\n\t\treturn this.sections[index];\n\t}\n}","import { LiteGUIObject } from \"./@types/globals\";\n\nexport interface ConsoleOptions\n{\n\tprompt: string;\n}\n\nexport interface ConsoleElement extends HTMLElement\n{\n\tupdate?: (v: string) => void;\n}\n\nexport class Console implements LiteGUIObject\n{\n\toptions: ConsoleOptions;\n\troot: HTMLDivElement;\n\tlogElement: Element;\n\tinput: HTMLInputElement;\n\thistory: string[];\n\tprivate _prompt: string;\n\tprivate _historyOffset: number;\n\tprivate _inputBlocked?: boolean;\n\n\tconstructor(options: ConsoleOptions)\n\t{\n\t\toptions = options ?? { prompt: \">\" };\n\t\toptions.prompt = options.prompt ?? \">\";\n\t\tthis.options = options;\n\n\t\tthis.root = document.createElement(\"div\");\n\t\tthis.root.className = \"liteconsole\";\n\t\tthis.root.innerHTML = \"<div class='log'></div><div class='foot'><input type='text'/></div>\";\n\n\t\tthis.logElement = this.root.querySelector('.log')!;\n\t\tthis.input = this.root.querySelector('input')!;\n\n\t\tthis.input?.addEventListener(\"keydown\", this.processKeyDown.bind(this));\n\t\tthis._prompt = this.options.prompt;\n\n\t\tthis.history = [];\n\t\tthis._historyOffset = 0;\n\t}\n\n\tprocessKeyDown(e: KeyboardEvent)\n\t{\n\t\tif (this._inputBlocked || !this.input) { return; }\n\n\t\tswitch (e.key)\n\t\t{\n\t\tcase \"Enter\":\n\t\t{\n\t\t\tconst value = this.input.value;\n\t\t\tconst cmd = value.trim();\n\t\t\tthis.addMessage(this._prompt + cmd, \"me\", true);\n\t\t\tthis.input.value = \"\";\n\t\t\tthis.history.push(cmd);\n\t\t\tif (this.history.length > 10) { this.history.shift(); }\n\t\t\tthis.onProcessCommand(cmd);\n\t\t\tthis._historyOffset = 0;\n\t\t\tbreak;\n\t\t}\n\t\t// Up & down history\n\t\tcase \"ArrowUp\":\n\t\tcase \"ArrowDown\":\n\t\t{\n\t\t\tthis._historyOffset += (e.key == \"ArrowUp\" ? -1 : 1);\n\t\t\tif (this._historyOffset > 0)\n\t\t\t{\n\t\t\t\tthis._historyOffset = 0;\n\t\t\t}\n\t\t\telse if (this._historyOffset < -this.history.length)\n\t\t\t{\n\t\t\t\tthis._historyOffset = -this.history.length;\n\t\t\t}\n\t\t\tconst pos = this.history.length + this._historyOffset;\n\t\t\tif (pos < 0) { return; }\n\t\t\tif (pos >= this.history.length)\n\t\t\t{\n\t\t\t\tthis.input.value = \"\";\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.input.value = this.history[pos];\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\t// Tab autocompletion\n\t\tcase \"Tab\":\n\t\t{\n\t\t\tthis.input.value = this.onAutocomplete(this.input.value);\n\t\t\tbreak;\n\t\t}\n\t\t/* Falls through */\n\t\tdefault:\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\t}\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t}\n\n\taddMessage(text: string | string[], className: string, asText: boolean = true)\n\t{\n\t\tconst content = this.logElement;\n\t\t// Contains the last message sent\n\t\tlet element: ConsoleElement | null = null;\n\n\t\tfunction add(txt: string)\n\t\t{\n\t\t\telement = document.createElement(\"pre\") as ConsoleElement;\n\t\t\tif (asText)\n\t\t\t{\n\t\t\t\telement.innerText = txt;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\telement.innerHTML = txt;\n\t\t\t}\n\t\t\telement.className = \"msg\";\n\t\t\tif (className)\n\t\t\t{\n\t\t\t\telement.className += \" \" + className;\n\t\t\t}\n\t\t\tcontent.appendChild(element);\n\t\t\tif (content.children.length > 1000)\n\t\t\t{\n\t\t\t\tcontent.removeChild(content.children[0]);\n\t\t\t}\n\t\t}\n\n\t\tif (Array.isArray(text))\n\t\t{\n\t\t\tfor (let i = 0; i < text.length; ++i)\n\t\t\t{\n\t\t\t\tadd(text[i]);\n\t\t\t}\n\t\t}\n\t\telse if (typeof text !== \"string\")\n\t\t{\n\t\t\tadd(JSON.stringify(text, null, \"\"));\n\t\t}\n\t\telse\n\t\t{\n\t\t\tadd(text);\n\t\t}\n\n\t\tthis.logElement.scrollTop = 1000000;\n\n\t\tif (!element) { return; }\n\n\t\t(element as ConsoleElement).update = (function (this: ConsoleElement, v: string)\n\t\t{\n\t\t\tthis.innerHTML = v;\n\t\t}).bind(element);\n\n\t\treturn element;\n\t}\n\n\tlog(...args: unknown[])\n\t{\n\t\tconst d = args.join(\",\");\n\t\treturn this.addMessage(d, \"msglog\");\n\t}\n\n\twarn(...args: unknown[])\n\t{\n\t\tconst d = args.join(\",\");\n\t\treturn this.addMessage(d, \"msgwarn\");\n\t}\n\n\terror(...args: unknown[])\n\t{\n\t\tconst d = args.join(\",\");\n\t\treturn this.addMessage(d, \"msgerror\");\n\t}\n\n\tclear()\n\t{\n\t\tif (this.logElement)\n\t\t{\n\t\t\tthis.logElement.innerHTML = \"\";\n\t\t}\n\t}\n\n\t// TODO: Implement autocomplete\n\tonAutocomplete(value: string)\n\t{\n\t\t// The function is supposed to return something so I will return the same parameter\n\t\treturn value;\n\t}\n\n\t// TODO: Implement command processing\n\tonProcessCommand(cmd: string): void\n\t{\n\t\t// Have to do this to avoid \"TS6133: 'cmd' is declared but its value is never read.\"\n\t\tconst test = `${cmd}`;\n\t\tif (test === \"clear\")\n\t\t{\n\t\t\treturn;\n\t\t}\n\t}\n}","import { Area, Split } from \"./area\";\nimport { Dialog } from \"./dialog\";\nimport { Menubar } from \"./menubar\";\nimport { Panel } from \"./panel\";\nimport { Tabs } from \"./tabs\";\nimport\n{\n\tButton, SearchBox, ContextMenu, Checkbox, ListBox, List, Slider,\n\tComplexList, LineEditor\n} from \"./widgets\";\nimport { Console } from \"./console\";\nimport { Tree } from \"./widgets/tree\";\nimport { Inspector } from \"./inspector\";\nimport { Dragger } from \"./dragger\";\nimport { Table } from \"./table\";\nimport\n{\n\tLiteGUIObject\n} from \"./@types/globals\";\nimport\n{\n\tBlurElement, FocusElement, SizeToCSS, Trigger,\n\tBind, Unbind, RemoveClass, GetById, IsCursorOverElement, GetRect, ToClipboard,\n\tAddCSS, RequireCSS, Request, RequestText, RequestJSON, RequestBinary,\n\tRequireScript, RequireScriptSerial, CreateElement, CreateListItem, CreateButton,\n\tGetParents, NewWindow, DownloadURL, DownloadFile, GetUrlVars, GetUrlVar,\n\tDraggable, CloneObject, SafeName, HTMLEncode, HTMLDecode, GetElementWindow,\n\tCreateDropArea, RemoveElement, ShowMessage, ChoiceDialog, PromptDialog, ConfirmDialog,\n\tAlertDialog, PopupDialog\n} from \"./utilities\";\n\n/**\n * Common HTML unicode symbols for UI icons.\n */\nexport enum SpecialCode\n{\n\t/** Close icon (X) */\n\tclose = \"&#10005;\",\n\t/** Hamburger menu icon */\n\tnavicon = \"&#9776;\",\n\t/** Refresh arrow icon */\n\trefresh = \"&#8634;\",\n\t/** Gear/Settings icon */\n\tgear = \"&#9881;\",\n\t/** Open folder icon */\n\topenFolder = \"&#128194;\",\n\t/** Download icon */\n\tdownload = \"&#11123;\",\n\t/** Checkmark tick icon */\n\ttick = \"&#10003;\",\n\t/** Trash bin icon */\n\ttrash = \"&#128465;\"\n}\n\n/**\n * Options to configure the LiteGUI Core initialization.\n */\nexport interface CoreOptions\n{\n\t/** Width of the window/container */\n\twidth?: number,\n\t/** Height of the window/container */\n\theight?: number,\n\t/** ID of the container element */\n\tcontainer?: string,\n\t/** Whether to wrap the content in a root div */\n\twrapped?: boolean,\n\t/** Whether to create a menubar automatically */\n\tmenubar?: boolean,\n\t/** Callback function to be executed after initialization */\n\tcallback?: () => void\n}\n\n/**\n * Core namespace of LiteGUI library, it holds some useful functions\n *\n * @class LiteGUI\n */\nexport class Core\n{\n\t/** Root element of the LiteGUI instance */\n\troot?: HTMLElement;\n\t/** Main content container */\n\tcontent?: HTMLElement;\n\t/** Parent container element */\n\tcontainer?: HTMLElement;\n\t/** Reference to the main menu element */\n\tmainMenu?: HTMLElement;\n\t/** Reference to the Menubar widget */\n\tmenubar?: Menubar;\n\t/** Reference to the Tabs widget */\n\ttabs?: Tabs;\n\t/** Background element for modal dialogs (overlays the screen) */\n\tmodalBackground?: HTMLElement;\n\t/** Registry of active panels */\n\tpanels: Record<string, Panel> = {};\n\t/** Registry of open windows (popped out) */\n\twindows: Window[] = [];\n\n\tArea: typeof Area = Area;\n\tSplit: typeof Split = Split;\n\tMenubar: typeof Menubar = Menubar;\n\tDialog: typeof Dialog = Dialog;\n\tPanel: typeof Panel = Panel;\n\tButton: typeof Button = Button;\n\tSearchBox: typeof SearchBox = SearchBox;\n\tContextMenu: typeof ContextMenu = ContextMenu;\n\tCheckbox: typeof Checkbox = Checkbox;\n\tListBox: typeof ListBox = ListBox;\n\tList: typeof List = List;\n\tSlider: typeof Slider = Slider;\n\tLineEditor: typeof LineEditor = LineEditor;\n\tComplexList: typeof ComplexList = ComplexList;\n\tTabs: typeof Tabs = Tabs;\n\tTree: typeof Tree = Tree;\n\tConsole: typeof Console = Console;\n\tInspector: typeof Inspector = Inspector;\n\tDragger: typeof Dragger = Dragger;\n\tTable: typeof Table = Table;\n\tSpecialCode: typeof SpecialCode = SpecialCode;\n\n\t/**\n\t * Initializes the LiteGUI library.\n\t * @param {CoreOptions} [options] Configuration options.\n\t */\n\tinit(options?: CoreOptions): void\n\t{\n\t\toptions = options ?? {};\n\n\t\t// Choose main container\n\t\tif (options.container)\n\t\t{\n\t\t\tthis.container = document.getElementById(options.container) ?? undefined;\n\t\t}\n\t\tif (!this.container) { this.container = document.body; }\n\n\t\tif (options.wrapped)\n\t\t{\n\t\t\t// Create litegui root element\n\t\t\tconst root: HTMLElement = document.createElement(\"div\");\n\t\t\troot.style.position = \"relative\";\n\t\t\troot.style.overflow = \"hidden\";\n\t\t\tthis.root = root;\n\t\t\tthis.container.appendChild(root);\n\n\t\t\t// Content: the main container for everything\n\t\t\tconst content: HTMLElement = document.createElement(\"div\");\n\t\t\tthis.content = content;\n\t\t\tthis.root.appendChild(content);\n\n\t\t\t// Maximize\n\t\t\tif (this.root.classList.contains(\"fullscreen\"))\n\t\t\t{\n\t\t\t\twindow.addEventListener(\"resize\", () =>\n\t\t\t\t{\n\t\t\t\t\tthis.maximizeWindow();\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.root = this.content = this.container;\n\t\t}\n\n\t\tif (options.width && options.height)\n\t\t{\n\t\t\tthis.setWindowSize(options.width, options.height);\n\t\t}\n\n\t\tthis.root.className = \"litegui-wrap fullscreen\";\n\t\tthis.content.className = \"litegui-maincontent\";\n\n\t\t// Create modal dialogs container\n\t\tconst modalbg = this.modalBackground = document.createElement(\"div\");\n\t\tthis.modalBackground.className = \"litemodalbg\";\n\t\tthis.root.appendChild(this.modalBackground);\n\t\tmodalbg.style.display = \"none\";\n\n\t\t// Create menubar\n\t\tif (options.menubar)\n\t\t{\n\t\t\tthis.createMenubar();\n\t\t}\n\n\t\t// Called before anything\n\t\tif (options.callback)\n\t\t{\n\t\t\toptions.callback();\n\t\t}\n\n\t\t// External windows\n\t\twindow.addEventListener(\"beforeunload\", () =>\n\t\t{\n\t\t\tfor (let i = 0; i < this.windows.length; ++i)\n\t\t\t{\n\t\t\t\tthis.windows[i].close();\n\t\t\t}\n\t\t\tthis.windows = [];\n\t\t});\n\t}\n\n\t/**\n\t * Triggers a simple event in an object (similar to jQuery.trigger)\n\t * @param {unknown} element could be an HTMLEntity or a regular object\n\t * @param {string} eventName the type of the event\n\t * @param {unknown} params it will be stored in e.detail\n\t */\n\ttrigger = Trigger;\n\n\t/**\n\t * Binds an event in an object (similar to jQuery.bind)\n\t * If the element is not an HTML entity a new one is created, attached to the object (as non-enumerable, called __events) and used\n\t * @param {string | Object | Object[] | NodeListOf<HTMLElement>} element could be an HTMLEntity, a regular object, a query string or a regular Array of entities\n\t * @param {String} event the string defining the event\n\t * @param {EventListenerOrEventListenerObject} callback where to call\n\t */\n\tbind = Bind;\n\n\t/**\n\t * Unbinds an event in an object (similar to jQuery.unbind)\n\t * @param {Object} element could be an HTMLEntity or a regular object\n\t * @param {String} event the string defining the event\n\t * @param {EventListenerOrEventListenerObject} callback where to call\n\t */\n\tunbind = Unbind;\n\n\t/**\n\t * Removes a class\n\t * @param {HTMLElement} elem\n\t * @param {String} selector\n\t * @param {String} className\n\t */\n\tremoveClass = RemoveClass;\n\n\t/**\n\t * Appends litegui widget to the global interface\n\t * @param {LiteGUIObject | HTMLElement} element\n\t */\n\tadd(element: LiteGUIObject | HTMLElement): void\n\t{\n\t\tthis.content?.appendChild(\"root\" in element ? element.root : element);\n\t}\n\n\t/**\n\t * Remove from the interface, it is is an HTML element it is removed from its parent, if it is a widget the same.\n\t * @param {string | LiteGUIObject | HTMLElement | HTMLElement[] | NodeListOf<HTMLElement>} element it also supports HTMLentity, selector string or Array of elements\n\t */\n\tremove = RemoveElement;\n\n\t/**\n\t * Wrapper of document.getElementById\n\t * @param {String} id\n\t * return {HTMLEntity}\n\t *\n\t */\n\tgetById = GetById;\n\n\t/**\n\t * Creates and attaches the main application menubar.\n\t */\n\tcreateMenubar(): void\n\t{\n\t\tthis.menubar = new LiteGUI.Menubar(\"mainmenubar\");\n\t\tthis.add(this.menubar);\n\t}\n\n\t/**\n\t * Sets the size of the main window.\n\t * @param {number} [w] Width in pixels.\n\t * @param {number} [h] Height in pixels.\n\t */\n\tsetWindowSize(w?: number, h?: number): void\n\t{\n\t\tconst style = this.root?.style;\n\n\t\tif (w && h)\n\t\t{\n\t\t\tstyle!.width = w + \"px\";\n\t\t\tstyle!.height = h + \"px\";\n\t\t\tstyle!.boxShadow = \"0 0 4px black\";\n\t\t\tthis.root?.classList.remove(\"fullscreen\");\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (this.root?.classList.contains(\"fullscreen\")) { return; }\n\t\t\tthis.root?.classList.add(\"fullscreen\");\n\t\t\tstyle!.width = \"100%\";\n\t\t\tstyle!.height = \"100%\";\n\t\t\tstyle!.boxShadow = \"0 0 0\";\n\t\t}\n\t\tif (this.root)\n\t\t{\n\t\t\tthis.trigger(this.root, \"resized\", undefined);\n\t\t}\n\t}\n\n\t/**\n\t * Maximizes the window to fill the container.\n\t */\n\tmaximizeWindow(): void\n\t{\n\t\tthis.setWindowSize(undefined, undefined);\n\t}\n\n\t/**\n\t * Change cursor style of the root element.\n\t * @param {string} name CSS cursor property value.\n\t */\n\tsetCursor(name: string): void\n\t{\n\t\tif (this.root) { this.root.style.cursor = name; }\n\t}\n\n\t/**\n\t * Test if the cursor is inside an element\n\t * @param {MouseEvent} event\n\t * @param {HTMLElement} element\n\t *\n\t */\n\tisCursorOverElement = IsCursorOverElement;\n\n\t/**\n\t * Returns the bounding client rect of an element.\n\t * @param {HTMLElement} element The element to measure.\n\t * @returns {DOMRect} The bounding rectangle.\n\t */\n\tgetRect = GetRect;\n\n\t/**\n\t * Copy a string to the clipboard (it needs to be invoqued from a click event)\n\t * @param {String | Record<string, unknown>} data\n\t */\n\ttoClipboard = ToClipboard;\n\n\t/**\n\t * Insert some CSS code to the website\n\t * @param {String|CSSStyleDeclaration} code it could be a string with CSS rules, or an object with the style syntax.\n\t *\n\t */\n\taddCSS = AddCSS;\n\n\t/**\n\t * Requires a new CSS\n\t * @param {String} url string with url or an array with several urls\n\t * @param {Function} onComplete\n\t *\n\t */\n\trequireCSS = RequireCSS;\n\n\t/**\n\t * Request file from url (it could be a binary, text, etc.). If you want a simplied version use\n\t * @param {RequestOptions} request object with all the parameters like data (for sending forms), dataType, success, error\n\t */\n\trequest = Request;\n\n\t/**\n\t * Request file from url\n\t * @param {String} url\n\t * @param {(data: string, xhr: XMLHttpRequest) => void} onComplete\n\t * @param {(err: string | ProgressEvent<EventTarget>) => void} onError\n\t *\n\t */\n\trequestText = RequestText;\n\n\t/**\n\t * Request file from url\n\t * @param {String} url\n\t * @param {(data: object, xhr: XMLHttpRequest) => void} onComplete\n\t * @param {(err: string | ProgressEvent<EventTarget>) => void} onError\n\t *\n\t */\n\trequestJSON = RequestJSON;\n\n\t/**\n\t * Request binary file from url\n\t * @param {String} url\n\t * @param {(data: ArrayBuffer | unknown, xhr: XMLHttpRequest) => void} onComplete\n\t * @param {(err: string | ProgressEvent<EventTarget>) => void} onError\n\t *\n\t */\n\trequestBinary = RequestBinary;\n\n\n\t/**\n\t * Request script and inserts it in the DOM\n\t * @param {String|Array} url the url of the script or an array containing several urls\n\t * @param {(scripts: Array<CoreScriptElement>) => void} onComplete\n\t * @param {(err: string | Event, src: string, num: number) => void} onError\n\t * @param {(src: string, num: number) => void} onProgress (if several files are required, onProgress is called after every file is added to the DOM)\n\t *\n\t */\n\trequireScript = RequireScript;\n\n\n\t/**\n\t * Loads scripts sequentially from a list of URLs.\n\t * @param {string | string[]} url Single URL or array of URLs to load.\n\t * @param {(loadedScripts: GlobalEventHandlers[]) => void} onComplete Callback when all scripts are loaded.\n\t * @param {(url: string, remaining: number) => void} onProgress Callback for progress updates.\n\t */\n\trequireScriptSerial = RequireScriptSerial;\n\n\t/**\n\t * Creates a new div element with specified ID and code.\n\t * @param {string} id\n\t * @param {string} code Inner HTML content.\n\t * @returns {HTMLElement} The created div.\n\t */\n\tnewDiv(id: string, code: string)\n\t{\n\t\treturn this.createElement(\"div\", id, code, undefined, undefined);\n\t}\n\n\t/**\n\t * Creates an HTML element\n\t * @param {String} tag\n\t * @param {String} classID string containing id and classes, example: \"myid .someclass .anotherclass\"\n\t * @param {String} content\n\t * @param {string | CSSStyleDeclaration} [style]\n\t * @param {EventListenerOrEventListenerObject[]} [events]\n\t */\n\tcreateElement = CreateElement;\n\n\t/**\n\t * Useful to create elements from a text like '<div><span class=\"title\"></span></div>' and an object like { \".title\":\"mytitle\" }\n\t * @param {String} code\n\t * @param {Record<string, string>} values it will use innerText in the elements that matches that selector\n\t * @param {CSSStyleDeclaration} style\n\t * @return {HTMLElement}\n\t *\n\t */\n\tcreateListItem = CreateListItem;\n\n\t/**\n\t * Creates a button element\n\t * @param {String} classID ID or class\n\t * @param {String} content\n\t * @param {(ev: PointerEvent) => void} callback when the button is pressed\n\t * @param {CSSStyleDeclaration|String} style\n\t *\n\t */\n\tcreateButton = CreateButton;\n\n\t/**\n\t * Retrieves all parent elements of the given element up to the document root.\n\t * @param {HTMLElement} element The starting element.\n\t * @returns {HTMLElement[]} Array of parent elements.\n\t */\n\tgetParents = GetParents;\n\n\t/**\n\t * Opens a new window with copied styles and optional scripts.\n\t * @param {string} title syntax title for the new window.\n\t * @param {number} width Width of the window.\n\t * @param {number} height Height of the window.\n\t * @param {{ scripts?: boolean, content?: string }} [options] Configuration object.\n\t * @param {boolean} [options.scripts] Whether to copy scripts to the new window.\n\t * @param {string} [options.content] HTML content to inject into the new window.\n\t * @returns {Window} The newly created window object.\n\t */\n\tnewWindow = NewWindow;\n\n\t//* DIALOGS *******************\n\n\t/**\n\t * Shows or hides the modal background overlay.\n\t * @param {boolean} value True to show, false to hide.\n\t */\n\tshowModalBackground(value: boolean)\n\t{\n\t\tif (this.modalBackground)\n\t\t{\n\t\t\tthis.modalBackground.style.display = value ? \"block\" : \"none\";\n\t\t}\n\t}\n\n\t/**\n\t * Shows a generic message dialog.\n\t * @param {string} content The message content.\n\t * @param {DialogOptions} [options] Configuration options.\n\t * @returns {Dialog} The created Dialog instance.\n\t */\n\tshowMessage = ShowMessage;\n\n\t/**\n\t * Shows a dialog with a message\n\t * @param {String} content\n\t * @param {DialogOptions} [options]\n\t * @returns {Dialog}\n\t */\n\tpopup = PopupDialog;\n\n\t/**\n\t * Shows an alert dialog with a message\n\t * @param {String} content\n\t * @param {MessageOptions} [options]\n\t * @returns {Dialog}\n\t */\n\talert = AlertDialog;\n\n\t/**\n\t * Shows a confirm dialog with a message\n\t * @param {String} content\n\t * @param {(value: boolean) => void} callback\n\t * @param {MessageOptions} [options]\n\t * @returns {Dialog}\n\t */\n\tconfirm = ConfirmDialog;\n\n\t/**\n\t * Shows a prompt dialog with a message\n\t * @param {String} content\n\t * @param {(value?: string) => void} callback\n\t * @param {MessageOptions} [options]\n\t * @returns {Dialog}\n\t */\n\tprompt = PromptDialog;\n\n\t/**\n\t * Shows a choice dialog with a message\n\t * @param {String} content\n\t * @param {Array<string|ContentHolder>} choices\n\t * @param {(value: string | ContentHolder) => void} callback\n\t * @param {MessageOptions} [options]\n\t * @returns {Dialog}\n\t */\n\tchoice = ChoiceDialog;\n\n\t/**\n\t * Triggers a download of the resource at the specified URL.\n\t * @param {string} url The URL of the resource to download.\n\t * @param {string} filename The name to save the file as.\n\t */\n\tdownloadURL = DownloadURL;\n\n\t/**\n\t * Triggers a download of a File or Blob object.\n\t * @param {string} filename The name to save the file as.\n\t * @param {File | Blob} data The file data.\n\t * @param {string} dataType MIME type of the data if not specified in the Blob.\n\t */\n\tdownloadFile = DownloadFile;\n\n\t/**\n\t * Returns the URL vars ( ?foo=faa&foo2=etc )\n\t *\n\t */\n\tgetUrlVars = GetUrlVars;\n\n\t/**\n\t * Retrieves a specific query parameter from the URL.\n\t * @param {string} name The name of the parameter.\n\t * @returns {string} The value of the parameter.\n\t */\n\tgetUrlVar = GetUrlVar;\n\n\t/**\n\t * Focuses an element.\n\t * @param {HTMLElement | Window} element The element to focus.\n\t */\n\tfocus = FocusElement;\n\n\t/**\n\t * Blurs an element.\n\t * @param {HTMLElement | Window} element The element to blur.\n\t */\n\tblur = BlurElement;\n\n\t/**\n\t * Makes one element draggable\n\t * @param {HTMLElement} container the element that will be dragged\n\t * @param {HTMLElement} dragger the area to start the dragging\n\t * @param {(container: HTMLElement, e: MouseEvent) => void} onStart Callback when the dragging starts.\n\t * @param {(container: HTMLElement, e: MouseEvent) => void} onFinish Callback when the dragging finishes.\n\t * @param {(container: HTMLElement, e: MouseEvent) => boolean} onIsDraggable Callback to determine if the element is currently draggable.\n\t */\n\tdraggable = Draggable;\n\n\t/**\n\t * Clones object content\n\t * @param {Object} source\n\t * @param {Object} target\n\t *\n\t */\n\tcloneObject = CloneObject;\n\n\t/**\n\t * Removing spaces and dots from a string.\n\t * @param {string} str The input string.\n\t * @returns {string} The sanitized string.\n\t */\n\tsafeName = SafeName;\n\n\t/**\n\t * Encodes an HTML string by replacing special characters with unicode.\n\t * @param {string} htmlCode The HTML string to encode.\n\t * @returns {string} The encoded string (text content).\n\t */\n\thtmlEncode = HTMLEncode;\n\n\t/**\n\t * Decodes a unicode string back to HTML.\n\t * @param {string} unicodeCharacter The string to decode.\n\t * @returns {string} The decoded HTML string.\n\t */\n\thtmlDecode = HTMLDecode;\n\n\t/**\n\t * Convert sizes in any format to a valid CSS format (number to string, negative number to calc( 100% - number px )\n\t * @param {string|Number} value\n\t * @return {string|undefined} valid css size string\n\t *\n\t */\n\tsizeToCSS = SizeToCSS;\n\n\t/**\n\t * Returns the window where this element is attached (used in multi window applications)\n\t * @param {HTMLElement} element\n\t * @return {Window} the window element\n\t *\n\t */\n\tgetElementWindow = GetElementWindow;\n\n\t/**\n\t * Helper, makes drag and drop easier by enabling drag and drop in a given element\n\t * @param {HTMLElement} element the element where users could drop items\n\t * @param {(evt: DragEvent) => boolean} onDrop function to call when the user drops the item\n\t * @param {(evt: DragEvent, element: HTMLElement) => void} onEnter [optional] function to call when the user drags something inside\n\t * @param {(evt: DragEvent, element: HTMLElement) => void} onExit [optional] function to call when the user drags something outside\n\t *\n\t */\n\tcreateDropArea = CreateDropArea;\n}\n\n// Low quality templating system\nObject.defineProperty(String.prototype, \"template\", {\n\tvalue: function (data: object, evalCode: string)\n\t{\n\t\t// eslint-disable-next-line @typescript-eslint/no-this-alias\n\t\tlet tpl = this;\n\t\tconst re = /{{([^}}]+)?}}/g;\n\t\tlet match;\n\t\twhile (match)\n\t\t{\n\t\t\tconst str = evalCode ? (new Function(`with(this) { try { return ${match[1]} } catch(e) { return 'error';} }`)).call(data) : data[match[1] as keyof object];\n\t\t\ttpl = tpl.replace(match[0], str);\n\t\t\tmatch = re.exec(tpl);\n\t\t}\n\t\treturn tpl;\n\t},\n\tenumerable: false\n});\n\nexport const LiteGUI = new Core();","import { LiteGUIObject } from \"./@types/globals\";\nimport { CoreDocument } from \"./utilities\";\nimport { LiteGUI, SpecialCode } from \"./core\";\n\n/**\n * Options for a button in the dialog.\n */\nexport interface DialogButtonOptions\n{\n\t/**\n\t * Text to display on the button.\n\t */\n\tname?: string;\n\t/**\n\t * CSS class to add to the button.\n\t */\n\tclassName?: string;\n\t/**\n\t * Callback function to execute when the button is clicked.\n\t */\n\tcallback?: (button: HTMLButtonElement) => void;\n\t/**\n\t * Whether clicking the button should close the dialog.\n\t */\n\tclose?: boolean;\n}\n\n/**\n * Configuration options for the Dialog.\n */\nexport interface DialogOptions\n{\n\t/**\n\t * Parent element to attach the dialog to.\n\t */\n\tparent?: string | HTMLDivElement;\n\t/**\n\t * Whether to attach the dialog to the DOM immediately.\n\t */\n\tattach?: boolean;\n\t/**\n\t * Whether the content should be scrollable.\n\t */\n\tscroll?: boolean;\n\t/**\n\t * Array of buttons to show in the footer.\n\t */\n\tbuttons?: DialogButtonOptions[];\n\t/**\n\t * Whether the content should take the full height of the dialog.\n\t */\n\tfullContent?: boolean;\n\t/**\n\t * Whether the dialog can be closed.\n\t */\n\tclosable?: boolean;\n\t/**\n\t * The type of animation to use when closing the dialog.\n\t */\n\tclose?: string;\n\t/**\n\t * Whether the dialog can be detached to a new window.\n\t */\n\tdetachable?: boolean;\n\t/**\n\t * Whether to show the hide button.\n\t */\n\thide?: boolean;\n\t/**\n\t * Whether to show the minimize button.\n\t */\n\tminimize?: boolean;\n\t/**\n\t * Title of the dialog.\n\t */\n\ttitle?: string;\n\t/**\n\t * CSS class to add to the dialog.\n\t */\n\tclassName?: string;\n\t/**\n\t * HTML content of the dialog.\n\t */\n\tcontent?: string;\n\t/**\n\t * Minimum height of the dialog.\n\t */\n\tminHeight?: number | number;\n\t/**\n\t * Minimum width of the dialog.\n\t */\n\tminWidth?: number | number;\n\t/**\n\t * Height of the dialog.\n\t */\n\theight?: string | number;\n\t/**\n\t * Width of the dialog.\n\t */\n\twidth?: string | number;\n\t/**\n\t * Unique identifier for the dialog element.\n\t */\n\tid?: string;\n\t/**\n\t * Whether the dialog is resizable.\n\t */\n\tresizable?: boolean;\n\t/**\n\t * Whether the dialog is draggable.\n\t */\n\tdraggable?: boolean;\n\t/**\n\t * Callback function to execute when the dialog is closed.\n\t */\n\tonClose?: () => void;\n}\n\n/**\n * Interface extending HTMLDivElement to include a reference to the Dialog instance.\n */\nexport interface DialogRoot extends HTMLDivElement\n{\n\t/**\n\t * Reference to the document.\n\t */\n\townerDocument: CoreDocument;\n\t/**\n\t * Reference to the Dialog instance associated with this element.\n\t */\n\tdialog: Dialog;\n\t/**\n\t * Unique identifier for the dialog element.\n\t */\n\tid: string;\n}\n\nexport type DockType = 'full' | 'left' | 'right' | 'bottom' | 'top';\n\n/**\n * Class representing a Dialog window.\n *\n * @example\n * ```typescript\n * const dialog = new LiteGUI.Dialog({ title: \"My Dialog\", width: 400, height: 300 });\n * dialog.show();\n * ```\n */\nexport class Dialog implements LiteGUIObject\n{\n\t/**\n\t * Width of the dialog.\n\t */\n\twidth?: string | number;\n\t/**\n\t * Height of the dialog.\n\t */\n\theight?: string | number;\n\t/**\n\t * Minimum width of the dialog.\n\t */\n\tminWidth?: number;\n\t/**\n\t * Minimum height of the dialog.\n\t */\n\tminHeight?: number;\n\t/**\n\t * The content element of the dialog.\n\t */\n\tcontent!: HTMLDivElement;\n\t/**\n\t * The root element of the dialog.\n\t */\n\troot: DialogRoot;\n\t/**\n\t * The footer element of the dialog.\n\t */\n\tfooter?: HTMLDivElement;\n\t/**\n\t * The header element of the dialog.\n\t */\n\theader?: HTMLDivElement;\n\t/**\n\t * Whether the dialog is resizable.\n\t */\n\tresizable: boolean = false;\n\t/**\n\t * Whether the dialog is draggable.\n\t */\n\tdraggable: boolean = false;\n\t/**\n\t * Callback triggered when the dialog is resized.\n\t */\n\tonResize?: (evt?: MouseEvent, width?: number, height?: number) => void;\n\t/**\n\t * Callback triggered when the dialog is closed.\n\t */\n\tonClose?: () => void;\n\t/**\n\t * Callback triggered when the dialog is attached to the DOM.\n\t */\n\tonAttachedToDOM?: () => void;\n\t/**\n\t * Callback triggered when the dialog is detached from the DOM.\n\t */\n\tonDetachedFromDOM?: () => void;\n\n\t/**\n\t * Reference to the detached window.\n\t * @private\n\t */\n\tprivate _dialogWindow?: Window;\n\t/**\n\t * List of minimized dialogs.\n\t * @private\n\t */\n\tprivate _minimized: Dialog[] = [];\n\t/**\n\t * Whether the window is detached.\n\t * @private\n\t */\n\tprivate _isWindowDetached?: boolean;\n\t/**\n\t * Stores the old client rect before minimizing or maximizing.\n\t * @private\n\t */\n\tprivate _oldBox?: DOMRect;\n\t/**\n\t * Stores the old height before detaching.\n\t * @private\n\t */\n\tprivate _oldHeight?: string;\n\t/**\n\t * Default height of the dialog title.\n\t */\n\tpublic static TITLE_HEIGHT: string = \"20px\";\n\t/**\n\t * Width of the dialog when minimized.\n\t */\n\tpublic static MINIMIZED_WIDTH = 200;\n\n\t/**\n\t * Creates an instance of the Dialog.\n\t * @param {DialogOptions | string} [options] Configuration options or the ID of the dialog.\n\t */\n\tconstructor(options?: DialogOptions | string)\n\t{\n\t\tif (typeof options == 'string')\n\t\t{\n\t\t\tconst id = options;\n\t\t\toptions = { id: id };\n\t\t}\n\t\toptions = options ?? {};\n\n\t\tthis.root = <DialogRoot>document.createElement(\"div\");\n\t\tthis.width = options.width;\n\t\tthis.height = options.height;\n\t\tthis.minWidth = options.minWidth ?? 150;\n\t\tthis.minHeight = options.minHeight ?? 100;\n\n\t\tconst root = <DialogRoot>document.createElement(\"div\");\n\t\tif (options.id) { root.id = options.id; }\n\n\t\troot.className = `litedialog ${options.className ?? \"\"}`;\n\t\troot.dialog = this;\n\n\t\tlet code = \"\";\n\t\tif (options.title)\n\t\t{\n\t\t\tcode += `<div class='panel-header'>${options.title}</div><div class='buttons'>`;\n\t\t\tif (options.minimize)\n\t\t\t{\n\t\t\t\tcode += \"<button class='litebutton mini-button minimize-button'>-</button>\";\n\t\t\t\tcode += \"<button class='litebutton mini-button maximize-button' style='display:none'></button>\";\n\t\t\t}\n\t\t\tif (options.hide) { code += \"<button class='litebutton mini-button hide-button'></button>\"; }\n\t\t\tif (options.detachable) { code += \"<button class='litebutton mini-button detach-button'></button>\"; }\n\n\t\t\tif (options.close || options.closable)\n\t\t\t{\n\t\t\t\tcode += `<button class='litebutton mini-button close-button'>${SpecialCode.close}</button>`;\n\t\t\t}\n\t\t\tcode += \"</div>\";\n\t\t}\n\t\tcode += `<div class='content'>${options.content ?? \"\"}</div>`;\n\t\tcode += \"<div class='panel-footer'></div>\";\n\t\troot.innerHTML = code;\n\n\t\tthis.root = root;\n\t\tthis.header = root.querySelector(\".panel-header\") as HTMLDivElement;\n\t\tthis.content = root.querySelector(\".content\") as HTMLDivElement;\n\t\tthis.footer = root.querySelector(\".panel-footer\") as HTMLDivElement;\n\n\t\tif (options.fullContent)\n\t\t{\n\t\t\tthis.content.style.width = \"100%\";\n\t\t\tthis.content.style.height = options.title ? `calc( 100% - ${Dialog.TITLE_HEIGHT} )` : \"100%\";\n\t\t}\n\n\t\tif (options.buttons)\n\t\t{\n\t\t\tfor (const button of options.buttons)\n\t\t\t{\n\t\t\t\tthis.addButton(button.name, button);\n\t\t\t}\n\t\t}\n\n\t\tif (options.scroll == true) { this.content!.style.overflow = \"auto\"; }\n\n\t\t// Buttons *********************************\n\t\tconst closeButton = root.querySelector(\".close-button\");\n\t\tif (closeButton)\n\t\t{\n\t\t\tcloseButton.addEventListener(\"click\", this.close.bind(this));\n\t\t}\n\n\t\tconst maximizeButton = root.querySelector(\".maximize-button\");\n\t\tif (maximizeButton)\n\t\t{\n\t\t\tmaximizeButton.addEventListener(\"click\", this.maximize.bind(this));\n\t\t}\n\n\t\tconst minimizeButton = root.querySelector(\".minimize-button\");\n\t\tminimizeButton?.addEventListener(\"click\", this.minimize.bind(this));\n\n\t\tconst hideButton = root.querySelector(\".hide-button\");\n\t\thideButton?.addEventListener(\"click\", this.hide.bind(this));\n\n\t\tconst detachButton = root.querySelector(\".detach-button\");\n\t\tdetachButton?.addEventListener(\"click\", () => { this.detachWindow(undefined, undefined); });\n\n\t\t// Size, draggable, resizable, etc\n\t\tthis.enableProperties(options);\n\n\t\tthis.root.addEventListener(\"DOMNodeInsertedIntoDocument\", () =>\n\t\t{\n\t\t\tif (this.onAttachedToDOM) { this.onAttachedToDOM(); }\n\t\t\tif (this.onResize) { this.onResize(); }\n\t\t});\n\t\tthis.root.addEventListener(\"DOMNodeRemovedFromDocument\", () =>\n\t\t{\n\t\t\tif (this.onDetachedFromDOM)\n\t\t\t{\n\t\t\t\tthis.onDetachedFromDOM();\n\t\t\t}\n\t\t});\n\n\n\t\t// Attach\n\t\tif (options.attach || options.parent)\n\t\t{\n\t\t\tlet parent = null;\n\t\t\tif (options.parent)\n\t\t\t{\n\t\t\t\tparent = typeof (options.parent) == \"string\" ?\n\t\t\t\t\tdocument.querySelector(options.parent) : options.parent;\n\t\t\t}\n\t\t\tif (!parent) { parent = LiteGUI.root; }\n\t\t\tparent?.appendChild(this.root);\n\t\t\tthis.center();\n\t\t}\n\t}\n\n\t/**\n\t * Get a dialog from the document by its ID.\n\t * @param {string} id The unique identifier of the dialog.\n\t * @returns {Dialog | undefined} The dialog instance if found, otherwise undefined.\n\t */\n\tgetDialog(id: string)\n\t{\n\t\tconst element = <DialogRoot>document.getElementById(id);\n\t\tif (!element) { return; }\n\t\treturn element.dialog;\n\t}\n\n\t/**\n\t * Add widget or HTML element to the content of the dialog.\n\t * @param {LiteGUIObject} item The item to add.\n\t */\n\tadd(item: LiteGUIObject)\n\t{\n\t\tif (item.root)\n\t\t{\n\t\t\tthis.content?.appendChild(item.root);\n\t\t}\n\t}\n\n\t/**\n\t * Enables the properties of the dialog (draggable, resizable, etc).\n\t * @param {DialogOptions} [options] Configuration options to enable specific properties.\n\t */\n\tenableProperties(options?: DialogOptions)\n\t{\n\t\toptions = options ?? {};\n\n\t\tconst panel = this.root;\n\t\tpanel.style.position = \"absolute\";\n\t\t// Panel.style.display = \"none\";\n\n\t\tpanel.style.minWidth = this.minWidth + \"px\";\n\t\tpanel.style.minHeight = this.minHeight + \"px\";\n\n\t\tif (this.width) { panel.style.width = this.width + \"px\"; }\n\n\t\tif (this.height)\n\t\t{\n\t\t\tif (typeof (this.height) == \"number\")\n\t\t\t{\n\t\t\t\tpanel.style.height = this.height + \"px\";\n\t\t\t}\n\t\t\telse if (this.height.indexOf(\"%\") != -1)\n\t\t\t{\n\t\t\t\tpanel.style.height = this.height;\n\t\t\t}\n\n\t\t\tthis.content.style.height = \"calc( \" + this.height + \"px - 24px )\";\n\t\t}\n\n\t\tpanel.style.boxShadow = \"0 0 3px black\";\n\n\t\tif (options.draggable)\n\t\t{\n\t\t\tthis.draggable = true;\n\t\t\tconst element = panel.querySelector(\".panel-header\") as HTMLElement | null;\n\t\t\tif (element)\n\t\t\t{\n\t\t\t\tLiteGUI.draggable(panel, element, () =>\n\t\t\t\t{\n\t\t\t\t\tthis.bringToFront();\n\t\t\t\t}, () => { }, () =>\n\t\t\t\t{\n\t\t\t\t\treturn !this._minimized.includes(this);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (options.resizable)\n\t\t{ this.setResizable(); }\n\t}\n\n\t/**\n\t * Sets the dialog as resizable.\n\t */\n\tsetResizable()\n\t{\n\t\tif (this.resizable) { return; }\n\n\t\tconst root = this.root;\n\t\tthis.resizable = true;\n\t\tconst footer = this.footer;\n\t\tif (footer)\n\t\t{\n\t\t\tfooter.style.minHeight = \"4px\";\n\t\t\tfooter.classList.add(\"resizable\");\n\t\t}\n\n\t\tconst corner = document.createElement(\"div\");\n\t\tcorner.className = \"resizable-corner\";\n\t\tthis.root?.appendChild(corner);\n\n\t\tconst mouse = [0, 0];\n\t\tlet isCorner = false;\n\n\t\tconst _onMouse = (e: MouseEvent) =>\n\t\t{\n\t\t\tconst el = e.target;\n\t\t\tif (e.type == \"mousedown\")\n\t\t\t{\n\t\t\t\tdocument.body.addEventListener(\"mousemove\", _onMouse);\n\t\t\t\tdocument.body.addEventListener(\"mouseup\", _onMouse);\n\t\t\t\tisCorner = el == corner;\n\t\t\t\tmouse[0] = e.pageX;\n\t\t\t\tmouse[1] = e.pageY;\n\t\t\t}\n\t\t\telse if (e.type == \"mousemove\")\n\t\t\t{\n\t\t\t\tconst rect = LiteGUI.getRect(root);\n\t\t\t\tconst w = rect.width;\n\t\t\t\tconst newW = w - (mouse[0] - e.pageX);\n\n\t\t\t\tconst h = rect.height;\n\t\t\t\tconst newH = h - (mouse[1] - e.pageY);\n\n\t\t\t\tif (isCorner) { root.style.width = newW + \"px\"; }\n\t\t\t\troot.style.height = newH + \"px\";\n\n\t\t\t\tmouse[0] = e.pageX;\n\t\t\t\tmouse[1] = e.pageY;\n\t\t\t\tthis.content.style.height = \"calc( 100% - 24px )\";\n\n\t\t\t\tif (this.onResize && (w != newW || h != newH))\n\t\t\t\t{\n\t\t\t\t\tthis.onResize(e, newW, newH);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (e.type == \"mouseup\")\n\t\t\t{\n\t\t\t\tdocument.body.removeEventListener(\"mousemove\", _onMouse);\n\t\t\t\tdocument.body.removeEventListener(\"mouseup\", _onMouse);\n\t\t\t\tisCorner = false;\n\t\t\t}\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\treturn false;\n\t\t};\n\n\t\tfooter?.addEventListener(\"mousedown\", _onMouse);\n\t\tcorner.addEventListener(\"mousedown\", _onMouse, true);\n\t}\n\n\t/**\n\t * Docks the dialog to the parent.\n\t * @param {LiteGUIObject | HTMLElement | string} parent The parent element to dock to.\n\t * @param {DockType} [dockType] The docking type (full, left, right, bottom, top).\n\t * @param {string | number} [titleHeight] The height of the title bar to adjust content height.\n\t */\n\tdockTo(parent?: LiteGUIObject | HTMLElement | string, dockType?: DockType, titleHeight?: string | number)\n\t{\n\t\tif (parent == undefined) { return; }\n\n\t\tdockType = dockType ?? \"full\";\n\n\t\tconst panel = this.root;\n\t\tpanel.style.top = \"0\";\n\t\tpanel.style.left = \"0\";\n\n\t\tpanel.style.boxShadow = \"0 0 0\";\n\n\t\tif (dockType == \"full\")\n\t\t{\n\t\t\tpanel.style.position = \"relative\";\n\t\t\tpanel.style.width = \"100%\";\n\t\t\tpanel.style.height = \"100%\";\n\t\t\tthis.content.style.width = \"100%\";\n\t\t\tthis.content.style.height = \"calc(100% - \" + (titleHeight ?? LiteGUI.Panel.TITLE_HEIGHT) + \")\"; // Title offset: 20px\n\t\t\tthis.content.style.overflow = \"auto\";\n\t\t}\n\t\telse if (dockType == 'left' || dockType == 'right')\n\t\t{\n\t\t\tpanel.style.position = \"absolute\";\n\t\t\tpanel.style.top = \"0\";\n\t\t\tpanel.style[dockType] = \"0\";\n\n\t\t\tpanel.style.width = this.width + \"px\";\n\t\t\tpanel.style.height = \"100%\";\n\t\t\tthis.content.style.height = \"calc(100% - \" + (titleHeight ?? LiteGUI.Panel.TITLE_HEIGHT) + \")\";\n\t\t\tthis.content.style.overflow = \"auto\";\n\n\t\t\tif (dockType == 'right')\n\t\t\t{\n\t\t\t\tpanel.style.left = \"auto\";\n\t\t\t\tpanel.style.right = \"0\";\n\t\t\t}\n\t\t}\n\t\telse if (dockType == 'bottom' || dockType == 'top')\n\t\t{\n\t\t\tpanel.style.width = \"100%\";\n\t\t\tpanel.style.height = this.height + \"px\";\n\t\t\tif (dockType == 'bottom')\n\t\t\t{\n\t\t\t\tpanel.style.bottom = \"0\";\n\t\t\t\tpanel.style.top = \"auto\";\n\t\t\t}\n\t\t}\n\n\t\tif (this.draggable)\n\t\t{\n\t\t\tLiteGUI.draggable(panel);\n\t\t}\n\n\t\tif (typeof (parent) == \"string\")\n\t\t{\n\t\t\tconst parentElem = document.querySelector<HTMLElement>(parent);\n\t\t\tif (parentElem)\n\t\t\t{\n\t\t\t\tparentElem.appendChild(panel);\n\t\t\t}\n\t\t}\n\t\telse if (parent && \"content\" in parent)\n\t\t{\n\t\t\t(parent as { content: HTMLElement }).content.appendChild(panel);\n\t\t}\n\t\telse if (parent && \"root\" in parent)\n\t\t{\n\t\t\t(parent as { root: HTMLElement }).root.appendChild(panel);\n\t\t}\n\t\telse if (parent && \"appendChild\" in parent)\n\t\t{\n\t\t\t(parent as HTMLElement).appendChild(panel);\n\t\t}\n\t}\n\n\t/**\n\t * Adds a button to the dialog.\n\t * @param {string} [name] The text to display on the button.\n\t * @param {DialogButtonOptions | Function} [options] Options for the button or a callback function.\n\t * @returns {HTMLButtonElement} The created button element.\n\t */\n\taddButton(name?: string, options?: DialogButtonOptions |\n\t\t((button: HTMLButtonElement) => void))\n\t{\n\t\tif (options == undefined)\n\t\t{\n\t\t\toptions = {} as DialogButtonOptions;\n\t\t}\n\n\t\tif (options.constructor === Function)\n\t\t{\n\t\t\toptions = { callback: options } as DialogButtonOptions;\n\t\t}\n\n\t\tconst buttonOptions = options as DialogButtonOptions;\n\t\tconst button = document.createElement(\"button\");\n\t\tbutton.className = \"litebutton\";\n\n\t\tif (name != undefined) { button.innerHTML = name; }\n\t\tif (typeof buttonOptions.className == 'string')\n\t\t{\n\t\t\tbutton.className += \" \" + buttonOptions.className;\n\t\t}\n\n\t\tthis.root?.querySelector(\".panel-footer\")!.appendChild(button);\n\n\t\tconst buttonCallback = () =>\n\t\t{\n\t\t\tif (buttonOptions.callback)\n\t\t\t{\n\t\t\t\tbuttonOptions.callback(button);\n\t\t\t}\n\n\t\t\tif (buttonOptions.close)\n\t\t\t{\n\t\t\t\tthis.close();\n\t\t\t}\n\t\t};\n\t\tbutton.addEventListener(\"click\", buttonCallback.bind(button));\n\n\t\treturn button;\n\t}\n\n\t/**\n\t * Destroys the dialog.\n\t */\n\tclose()\n\t{\n\t\tLiteGUI.remove(this.root);\n\t\tLiteGUI.trigger(this.root, \"closed\", this);\n\t\tif (this.onClose) { this.onClose(); }\n\t\tif (this._dialogWindow)\n\t\t{\n\t\t\tthis._dialogWindow.close();\n\t\t\tthis._dialogWindow = undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Highlights the dialog.\n\t * @param {number} [delay] The duration of the highlight in milliseconds.\n\t */\n\thighlight(delay: number = 100)\n\t{\n\t\tthis.root.style.outline = \"1px solid white\";\n\t\tconst doc = this.root.ownerDocument;\n\t\tconst w = doc.defaultView ?? doc.parentWindow;\n\t\tw?.focus();\n\t\tsetTimeout((() =>\n\t\t{\n\t\t\tthis.root.style.outline = null!;\n\t\t}), delay);\n\t}\n\n\t/**\n\t * Minimizes the dialog.\n\t */\n\tminimize()\n\t{\n\t\tif (this._minimized.length) { return; }\n\n\t\t/* This.minimized = true; */\n\t\tthis._oldBox = this.root?.getBoundingClientRect();\n\n\t\tif (!(this.root.querySelector(\".content\") as HTMLElement)) { return; }\n\t\t(this.root.querySelector(\".content\") as HTMLElement).style.display = \"none\";\n\n\t\tconst minimizeButton = this.root.querySelector(\".minimize-button\") as HTMLElement;\n\t\tif (minimizeButton) { minimizeButton.style.display = \"none\"; }\n\n\t\tconst maximizeButton = this.root.querySelector(\".maximize-button\") as HTMLElement;\n\t\tif (maximizeButton) { maximizeButton.style.display = \"\"; }\n\n\t\tthis.root.style.width = LiteGUI.Dialog.MINIMIZED_WIDTH + \"px\";\n\n\t\tconst closeCallback = (_e: Event): void =>\n\t\t{\n\t\t\tconst el = _e.target as unknown as Dialog;\n\t\t\tthis._minimized.splice(this._minimized.indexOf(el), 1);\n\t\t\tthis.arrangeMinimized();\n\t\t};\n\t\tLiteGUI.bind(this.root, \"closed\", closeCallback);\n\n\t\tthis._minimized.push(this);\n\t\tthis.arrangeMinimized();\n\n\n\t\tLiteGUI.trigger(this.root, \"minimizing\");\n\t}\n\n\t/**\n\t * Arranges the minimized dialogs.\n\t */\n\tarrangeMinimized()\n\t{\n\t\tfor (const i in this._minimized)\n\t\t{\n\t\t\tconst dialog = this._minimized[i];\n\t\t\tconst parent = dialog.root.parentNode as Element;\n\t\t\tconst pos = (parent?.getBoundingClientRect().height ?? 20) - 20;\n\t\t\tdialog.root.style.left = (LiteGUI.Dialog.MINIMIZED_WIDTH * parseInt(i)).toString();\n\t\t\tdialog.root.style.top = pos + \"px\";\n\t\t}\n\t}\n\n\t/**\n\t * Maximizes the dialog.\n\t */\n\tmaximize()\n\t{\n\t\tif (this._minimized.length == 0) { return; }\n\t\tthis._minimized = [];\n\n\t\tthis.content.style.display = \"\";\n\t\tLiteGUI.draggable(this.root);\n\t\tif (this._oldBox)\n\t\t{\n\t\t\tthis.root.style.left = this._oldBox.left + \"px\";\n\t\t\tthis.root.style.top = this._oldBox.top + \"px\";\n\t\t\tthis.root.style.width = this._oldBox.width + \"px\";\n\t\t\tthis.root.style.height = this._oldBox.height + \"px\";\n\t\t}\n\n\t\tconst minimizeButton = this.root.querySelector(\".minimize-button\") as HTMLElement;\n\t\tif (minimizeButton) { minimizeButton.style.display = \"\"; }\n\n\t\tconst maximizeButton = this.root.querySelector(\".maximize-button\") as HTMLElement;\n\t\tif (maximizeButton) { maximizeButton.style.display = \"none\"; }\n\n\t\tthis._minimized.splice(this._minimized.indexOf(this), 1);\n\t\tthis.arrangeMinimized();\n\t\tLiteGUI.trigger(this.root, \"maximizing\");\n\t}\n\n\t/**\n\t * Makes the dialog modal.\n\t */\n\tmakeModal()\n\t{\n\t\tLiteGUI.showModalBackground(true);\n\t\tLiteGUI.modalBackground?.appendChild(this.root); // Add panel\n\t\tthis.show();\n\t\tthis.center();\n\n\t\tLiteGUI.bind(this.root, \"closed\", _onClosed);\n\n\t\tfunction _onClosed()\n\t\t{\n\t\t\tLiteGUI.showModalBackground(false);\n\t\t}\n\t}\n\n\t/**\n\t * Brings the dialog to the front.\n\t */\n\tbringToFront()\n\t{\n\t\tconst parent = this.root.parentNode;\n\t\tif (parent)\n\t\t{\n\t\t\tparent.removeChild(this.root);\n\t\t\tparent.appendChild(this.root);\n\t\t}\n\t}\n\n\t/**\n\t * Shows a hidden dialog.\n\t * @param {CoreDocument} [ownerDocument] The document where the dialog should be shown.\n\t */\n\tshow(ownerDocument?: CoreDocument)\n\t{\n\t\tif (!this.root.parentNode)\n\t\t{\n\t\t\tif (!ownerDocument)\n\t\t\t{\n\t\t\t\tLiteGUI.add(this);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tconst doc = ownerDocument;\n\t\t\t\tconst parent = doc.querySelector(\".litegui-wrap\") ?? doc.body;\n\t\t\t\tparent.appendChild(this.root);\n\t\t\t\tconst w = doc.defaultView ?? doc.parentWindow;\n\t\t\t\tw!.focus();\n\t\t\t}\n\t\t\tthis.center();\n\t\t}\n\n\t\tif (!this._isWindowDetached)\n\t\t{\n\t\t\tthis.root.style.display = \"\";\n\t\t\tLiteGUI.trigger(this.root, \"shown\");\n\t\t}\n\t}\n\n\t/**\n\t * Hides the dialog.\n\t */\n\thide()\n\t{\n\t\tthis.root.style.display = \"none\";\n\t\tLiteGUI.trigger(this.root, \"hidden\");\n\t}\n\n\t/**\n\t * Fades in the dialog.\n\t * @param {number} [time=1000] Duration of the fade-in animation in milliseconds.\n\t * @param {number} [delay=100] Delay before starting the animation in milliseconds.\n\t */\n\tfadeIn(time: number = 1000, delay: number = 100)\n\t{\n\t\tthis.root.style.display = \"\";\n\t\tthis.root.style.opacity = \"0\";\n\t\tsetTimeout(() =>\n\t\t{\n\t\t\tthis.root.style.transition = `opacity ${time}ms`;\n\t\t\tthis.root.style.opacity = \"1\";\n\t\t}, delay);\n\t}\n\n\t/**\n\t * Sets the position of the dialog.\n\t * @param {number} x The x coordinate.\n\t * @param {number} y The y coordinate.\n\t */\n\tsetPosition(x: number, y: number)\n\t{\n\t\tif (!this.root.parentNode)\n\t\t{\n\t\t\tconsole.warn(\"LiteGUI.Dialog: Cannot set position of dialog if it is not in the DOM\");\n\t\t}\n\n\t\tthis.root.style.position = \"absolute\";\n\t\tthis.root.style.left = x + \"px\";\n\t\tthis.root.style.top = y + \"px\";\n\t}\n\n\t/**\n\t * Sets the size of the dialog.\n\t * @param {number} w The width.\n\t * @param {number} h The height.\n\t */\n\tsetSize(w: number, h: number)\n\t{\n\t\tthis.root.style.width = typeof (w) == \"number\" ? w + \"px\" : w;\n\t\tthis.root.style.height = typeof (h) == \"number\" ? h + \"px\" : h;\n\t}\n\n\t/**\n\t * Sets the title of the dialog.\n\t * @param {string} text The new title.\n\t */\n\tsetTitle(text: string)\n\t{\n\t\tif (!this.header) { return; }\n\t\tthis.header.innerHTML = text;\n\t}\n\n\t/**\n\t * Centers the dialog on the web page.\n\t */\n\tcenter()\n\t{\n\t\tif (!this.root.parentNode) { return; }\n\n\t\tthis.root.style.position = \"absolute\";\n\t\tconst width = this.root.offsetWidth;\n\t\tconst height = this.root.offsetHeight;\n\t\tconst parentNode = this.root.parentNode as HTMLElement;\n\t\tconst parentWidth = parentNode.offsetWidth;\n\t\tconst parentHeight = parentNode.offsetHeight;\n\t\tthis.root.style.left = Math.floor((parentWidth - width) * 0.5) + \"px\";\n\t\tthis.root.style.top = Math.floor((parentHeight - height) * 0.5) + \"px\";\n\t}\n\n\t/**\n\t * Adjust the size of the dialog to the size of the content.\n\t * @param {number} [margin=0] Additional margin to add.\n\t * @param {boolean} [skipTimeout] Whether to skip the timeout wait.\n\t */\n\tadjustSize(margin: number = 0, skipTimeout?: boolean)\n\t{\n\t\tthis.content.style.height = \"auto\";\n\n\t\tif (this.content.offsetHeight == 0 && !skipTimeout) // Happens sometimes if the dialog is not yet visible\n\t\t{\n\t\t\tsetTimeout(() => { this.adjustSize(margin, true); }, 1);\n\t\t\treturn;\n\t\t}\n\n\t\tlet extra = 0;\n\t\tconst footer = this.root.querySelector(\".panel-footer\") as HTMLElement;\n\t\tif (footer) { extra += footer.offsetHeight; }\n\n\t\tconst width = this.content.offsetWidth;\n\t\tconst height = this.content.offsetHeight + 20 + margin + extra;\n\n\t\tthis.setSize(width, height);\n\t}\n\n\t/**\n\t * Clears the content of the dialog.\n\t */\n\tclear()\n\t{\n\t\tthis.content.innerHTML = \"\";\n\t}\n\n\t/**\n\t * Detaches the window from the DOM.\n\t * @param {() => void} [onComplete] Callback executed when detachment is complete.\n\t * @param {() => void} [onClose] Callback executed when the new window is closed.\n\t * @returns {Window | undefined} The created window object or undefined if failed.\n\t */\n\tdetachWindow(onComplete?: () => void, onClose?: () => void): Window | undefined\n\t{\n\t\tif (this._minimized.length > 0)\n\t\t{\n\t\t\tthis.maximize();\n\t\t}\n\t\tif (this._dialogWindow)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\t// Create window\n\t\tconst rect = this.root!.getClientRects()[0];\n\t\tconst w = rect.width;\n\t\tconst h = rect.height;\n\t\tlet title = \"Window\";\n\t\tif (this.header)\n\t\t{\n\t\t\ttitle = this.header.textContent ?? '';\n\t\t}\n\n\t\tconst dialogWindow = window.open(\"\", \"\", \"width=\" + w + \", height=\" + h + \", location=no, status=no, menubar=no, titlebar=no, fullscreen=yes\") as Window;\n\t\tdialogWindow.document.writeln(\"<head><title>\" + title + \"</title>\");\n\t\tthis._dialogWindow = dialogWindow;\n\n\t\t// Transfer style\n\t\tconst styles = document.querySelectorAll(\"link[rel='stylesheet'],style\");\n\t\tfor (let i = 0; i < styles.length; i++)\n\t\t{ dialogWindow.document.writeln(styles[i].outerHTML); }\n\t\tdialogWindow.document.writeln(\"</head><body></body>\");\n\t\tdialogWindow.document.close();\n\n\t\t// Closing event\n\t\tdialogWindow.onbeforeunload = function ()\n\t\t{\n\t\t\tconst index = LiteGUI.windows.indexOf(dialogWindow);\n\t\t\tif (index != -1) { LiteGUI.windows.splice(index, 1); }\n\t\t\tif (onClose) { onClose(); }\n\t\t};\n\n\t\t// Move the content there\n\t\tdialogWindow.document.body.appendChild(this.content);\n\t\tthis.root!.style.display = \"none\"; // Hide\n\t\tthis._oldHeight = this.content.style.height;\n\t\tthis.content.style.height = \"100%\";\n\n\t\tLiteGUI.windows.push(dialogWindow);\n\n\t\tif (onComplete) { onComplete(); }\n\n\t\treturn dialogWindow;\n\t}\n\n\t/**\n\t * Reattaches the window to the DOM.\n\t * @param {() => void} [onComplete] Callback executed when reattachment is complete.\n\t */\n\treattachWindow(onComplete?: () => void)\n\t{\n\t\tif (!this._dialogWindow) { return; }\n\n\t\tthis.root.appendChild(this.content);\n\t\tthis.root.style.display = \"\"; // Show\n\t\tif (this._oldHeight)\n\t\t{\n\t\t\tthis.content.style.height = this._oldHeight;\n\t\t\tthis._oldHeight = undefined;\n\t\t}\n\n\t\tthis._dialogWindow.close();\n\t\tconst index = LiteGUI.windows.indexOf(this._dialogWindow);\n\t\tif (index != -1) { LiteGUI.windows.splice(index, 1); }\n\t\tthis._dialogWindow = undefined;\n\n\t\tif (onComplete) { onComplete(); }\n\t}\n\n\t/**\n\t * Shows all the dialogs.\n\t */\n\tshowAll()\n\t{\n\t\tconst dialogs = document.body.querySelectorAll(\"litedialog\");\n\t\tfor (let i = 0; i < dialogs.length; i++)\n\t\t{\n\t\t\tconst dialog = dialogs[i] as DialogRoot;\n\t\t\tdialog.dialog?.show();\n\t\t}\n\t}\n\n\t/**\n\t * Hides all the dialogs.\n\t */\n\thideAll()\n\t{\n\t\tconst dialogs = document.body.querySelectorAll(\"litedialog\");\n\t\tfor (let i = 0; i < dialogs.length; i++)\n\t\t{\n\t\t\tconst dialog = dialogs[i] as DialogRoot;\n\t\t\tdialog.dialog?.hide();\n\t\t}\n\t}\n\n\t/**\n\t * Closes all the dialogs.\n\t */\n\tcloseAll()\n\t{\n\t\tconst dialogs = document.body.querySelectorAll(\"litedialog\");\n\t\tfor (let i = 0; i < dialogs.length; i++)\n\t\t{\n\t\t\tconst dialog = dialogs[i] as DialogRoot;\n\t\t\tdialog.dialog?.close();\n\t\t}\n\t}\n}","import { LiteGUIObject } from \"./@types/globals\";\nimport { LiteGUI } from \"./core\";\n\n/**\n * Configuration options for the Dragger widget.\n */\nexport interface DraggerOptions\n{\n\t/**\n\t * Number of decimal places to display.\n\t */\n\tprecision?: number;\n\n\t/**\n\t * Additional CSS class to apply to the dragger element.\n\t */\n\textraClass?: string;\n\n\t/**\n\t * Whether the dragger should take full width.\n\t */\n\tfull?: boolean;\n\n\t/**\n\t * Whether the dragger is disabled.\n\t */\n\tdisabled?: boolean;\n\n\t/**\n\t * Specific class for the dragger element.\n\t */\n\tdraggerClass?: string;\n\n\t/**\n\t * Tab index for the input element.\n\t */\n\ttabIndex?: number;\n\n\t/**\n\t * Unit suffix to display (e.g., \"px\", \"%\").\n\t */\n\tunits?: string;\n\n\t/**\n\t * Whether dragging should be horizontal.\n\t */\n\thorizontal?: boolean;\n\n\t/**\n\t * Whether the dragging response should be linear.\n\t */\n\tlinear?: boolean;\n\n\t/**\n\t * Step size for incrementing/decrementing value.\n\t */\n\tstep?: number;\n\n\t/**\n\t * Minimum allowed value.\n\t */\n\tmin?: number;\n\n\t/**\n\t * Maximum allowed value.\n\t */\n\tmax?: number;\n}\n\n/**\n * Interface extending HTMLDivElement to include a reference to the Dragger instance parts.\n */\nexport interface DraggerRootDivElement extends HTMLDivElement\n{\n\t/**\n\t * Reference to the input element associated with this root.\n\t */\n\tinput?: HTMLInputElement;\n\n\t/**\n\t * Reference to the draggable div element associated with this root.\n\t */\n\tdragger?: DraggerDivElement;\n}\n\n/**\n * Interface extending HTMLDivElement for the draggable area.\n */\nexport interface DraggerDivElement extends HTMLDivElement\n{\n\t/**\n\t * Storage for drag data (e.g., coordinates).\n\t */\n\tdata?: number[];\n}\n\n/** *** DRAGGER **********/\n\n/**\n * Widget that provides a draggable number input.\n * @class Dragger\n * @example\n * ```typescript\n * const dragger = new Dragger(10, { min: 0, max: 100, step: 0.1 });\n * parentElement.appendChild(dragger.root);\n * ```\n */\nexport class Dragger implements LiteGUIObject\n{\n\t/**\n\t * Current value of the dragger.\n\t */\n\tvalue: number;\n\n\t/**\n\t * Root HTML element of the widget.\n\t */\n\troot: DraggerRootDivElement;\n\n\t/**\n\t * Configuration options.\n\t */\n\toptions: DraggerOptions;\n\n\t/**\n\t * Input element displaying the value.\n\t */\n\tinput: HTMLInputElement;\n\n\t/**\n\t * Whether the user is currently dragging.\n\t */\n\tdragging: boolean = false;\n\n\t/**\n\t * Creates an instance of the Dragger widget.\n\t * @param {number} value Initial value.\n\t * @param {DraggerOptions} [options] Configuration options.\n\t */\n\tconstructor(value: number, options?: DraggerOptions)\n\t{\n\t\tvalue = value ?? 0;\n\t\tif (typeof value === \"string\")\n\t\t{\n\t\t\tvalue = parseFloat(value);\n\t\t}\n\t\telse if (typeof value !== \"number\")\n\t\t{\n\t\t\tvalue = 0;\n\t\t}\n\n\t\tthis.value = value;\n\t\tthis.options = options = options ?? {};\n\t\tconst precision = options.precision ?? 3; // Num decimals\n\n\t\tconst element = document.createElement(\"div\") as DraggerRootDivElement;\n\t\telement.className = `dragger ${options.extraClass}`;\n\t\tthis.root = element;\n\n\t\tconst wrap = document.createElement(\"span\");\n\t\twrap.className = `inputfield ${options.extraClass} ${options.full ? \"full\" : \"\"}`;\n\t\tif (options.disabled) { wrap.className += \" disabled\"; }\n\t\telement.appendChild(wrap);\n\n\t\tconst draggerClass = options.draggerClass || \"full\";\n\n\t\tconst input = document.createElement(\"input\");\n\t\tinput.className = `text number ${draggerClass}`;\n\t\tinput.value = value.toFixed(precision) + (options.units ? options.units : \"\");\n\t\tinput.tabIndex = options.tabIndex ?? 0;\n\t\tthis.input = input;\n\t\telement.input = input;\n\n\t\tif (options.disabled) { input.disabled = true; }\n\t\tif (options.tabIndex) { input.tabIndex = options.tabIndex; }\n\t\twrap.appendChild(input);\n\n\t\tinput.addEventListener(\"keydown\", (e: KeyboardEvent) =>\n\t\t{\n\t\t\tconst keyCode = e.key;\n\t\t\t// Arrow key handling\n\t\t\tswitch (keyCode)\n\t\t\t{\n\t\t\tcase \"ArrowUp\":\n\t\t\t\t_onEvent(1, e);\n\t\t\t\tbreak;\n\t\t\tcase \"ArrowDown\":\n\t\t\t\t_onEvent(-1, e);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\treturn true;\n\t\t});\n\n\t\tconst dragger = document.createElement(\"div\") as DraggerDivElement;\n\t\tdragger.className = \"drag_widget\";\n\t\tif (options.disabled) { dragger.className += \" disabled\"; }\n\n\t\twrap.appendChild(dragger);\n\t\telement.dragger = dragger;\n\n\t\tconst _onMouseDown = (e: MouseEvent) =>\n\t\t{\n\t\t\tdocBound = input.ownerDocument;\n\n\t\t\tdocBound.removeEventListener(\"mousemove\", _onMouseMove);\n\t\t\tdocBound.removeEventListener(\"mouseup\", _onMouseUp);\n\n\t\t\tif (!options!.disabled)\n\t\t\t{\n\t\t\t\tif (element.requestPointerLock) { element.requestPointerLock(); }\n\t\t\t\tdocBound.addEventListener(\"mousemove\", _onMouseMove);\n\t\t\t\tdocBound.addEventListener(\"mouseup\", _onMouseUp);\n\n\t\t\t\tdragger.data = [e.screenX, e.screenY];\n\n\t\t\t\tthis.dragging = true;\n\t\t\t\tLiteGUI.trigger(element, \"start_dragging\");\n\t\t\t}\n\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t};\n\n\t\tdragger.addEventListener(\"mousedown\", _onMouseDown);\n\n\t\tconst _onMouseWheel = function (e: WheelEvent)\n\t\t{\n\t\t\tif (document.activeElement !== input) { return; }\n\t\t\tconst delta = (e.deltaY ? -e.deltaY / 3 : 0);\n\t\t\t_onEvent(delta > 0 ? 1 : -1, e);\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t};\n\t\tinput.addEventListener(\"wheel\", _onMouseWheel.bind(input), false);\n\n\t\tlet docBound: Document | null = null;\n\n\t\tfunction _onMouseMove(e: MouseEvent)\n\t\t{\n\t\t\tconst deltaX = e.screenX - (dragger.data ? dragger.data[0] : 0);\n\t\t\tconst deltaY = (dragger.data ? dragger.data[1] : 0) - e.screenY;\n\t\t\tlet diff = [deltaX, deltaY];\n\t\t\tif (e.movementX !== undefined) { diff = [e.movementX, -e.movementY]; }\n\t\t\tdragger.data = [e.screenX, e.screenY];\n\t\t\tconst axis = options!.horizontal ? 0 : 1;\n\t\t\t_onEvent(diff[axis], e);\n\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\treturn false;\n\t\t}\n\n\t\tconst _onMouseUp = (e: MouseEvent) =>\n\t\t{\n\t\t\tthis.dragging = false;\n\t\t\tLiteGUI.trigger(element, \"stop_dragging\");\n\t\t\tconst doc = docBound || document;\n\t\t\tdocBound = null;\n\t\t\tdoc.removeEventListener(\"mousemove\", _onMouseMove);\n\t\t\tdoc.removeEventListener(\"mouseup\", _onMouseUp);\n\t\t\tif (doc.exitPointerLock) { doc.exitPointerLock(); }\n\t\t\tLiteGUI.trigger(dragger, \"blur\");\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\treturn false;\n\t\t};\n\n\t\tfunction _onEvent(v: number, e: KeyboardEvent | MouseEvent | WheelEvent)\n\t\t{\n\t\t\tlet value = v;\n\t\t\tif (!options!.linear)\n\t\t\t{\n\t\t\t\tvalue = value > 0 ? Math.pow(value, 1.2) : Math.pow(Math.abs(value), 1.2) * -1;\n\t\t\t}\n\t\t\tlet scale = (options!.step ? options!.step : 1.0);\n\t\t\tif (e && e.shiftKey)\n\t\t\t{\n\t\t\t\tscale *= 10;\n\t\t\t}\n\t\t\telse if (e && e.ctrlKey)\n\t\t\t{\n\t\t\t\tscale *= 0.1;\n\t\t\t}\n\t\t\tlet result = parseFloat(input.value) + value * scale;\n\t\t\tif (typeof options!.max == \"number\" && result > options!.max)\n\t\t\t{\n\t\t\t\tresult = options!.max;\n\t\t\t}\n\t\t\tif (typeof options!.min == \"number\" && result < options!.min)\n\t\t\t{\n\t\t\t\tresult = options!.min;\n\t\t\t}\n\n\t\t\tinput.value = result.toFixed(precision);\n\t\t\tif (options!.units) { input.value += options!.units; }\n\t\t\tLiteGUI.trigger(input, \"change\");\n\t\t}\n\t}\n\n\t/**\n\t * Sets the range of allowed values.\n\t * @param {number} min Minimum value.\n\t * @param {number} max Maximum value.\n\t */\n\tsetRange(min: number, max: number)\n\t{\n\t\tthis.options.min = min;\n\t\tthis.options.max = max;\n\t}\n\n\t/**\n\t * Sets the value of the dragger.\n\t * @param {string | number} value New value.\n\t * @param {boolean} skipEvent Whether to skip triggering the 'change' event.\n\t */\n\tsetValue(value: string | number, skipEvent: boolean)\n\t{\n\t\tthis.value = typeof value == \"string\" ? parseFloat(value) : value;\n\t\tlet stringValue: string;\n\t\tif (this.options.precision)\n\t\t{\n\t\t\tstringValue = this.value.toFixed(this.options.precision);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tstringValue = this.value.toString();\n\t\t}\n\n\t\tif (this.options.units) { stringValue += this.options.units; }\n\t\tthis.input.value = stringValue;\n\t\tif (!skipEvent) { LiteGUI.trigger(this.input, \"change\"); }\n\t}\n\n\t/**\n\t * Gets the current value of the dragger.\n\t * @returns {number} The current value.\n\t */\n\tgetValue(): number\n\t{\n\t\treturn this.value;\n\t}\n}","import { AddContainerOptions, CreateWidgetOptions, InspectorWidgetTypes, WidgetChangeOptions, InspectorContainer, GenericCreationOptions, PropertyOptions, InspectorWidget, InspectorValue } from \"src/@types/Inspector\";\nimport { Inspector } from \"./inspector\";\nimport { LiteGUI } from \"../core\";\n\n/**\n * Type representing the values that can be edited in the array inspector.\n * It can be a string, number, or a record object.\n */\nexport type InspectorArrayEditableValue = string | number | boolean |\n\tRecord<string, string | number | boolean> | number[] | string[] | boolean[];\n\n/**\n * Interface for the container element of the array widget.\n * Extends the standard InspectorContainer to include value management methods.\n */\nexport interface ArrayWidgetContainer extends InspectorContainer, InspectorWidget\n{\n\t/**\n\t * The current array of values being edited.\n\t */\n\tvalue: InspectorArrayEditableValue[];\n\t/**\n\t * Method to set multiple values at once.\n\t * @param {InspectorArrayEditableValue[]} value The array of values to set.\n\t */\n\tsetValue: (value: InspectorValue, skipEvent?: boolean) => void;\n\t/**\n\t * Method to retrieve the current array of values.\n\t * @returns {InspectorArrayEditableValue[]} The current array of values.\n\t */\n\tgetValue: () => InspectorArrayEditableValue[];\n}\n\n/**\n * Configuration options for creating an array widget.\n */\nexport interface AddArrayOptions extends CreateWidgetOptions, Omit<WidgetChangeOptions, \"callback\">, AddContainerOptions\n{\n\t/**\n\t * The type of data held in the array (e.g., 'string', 'number').\n\t * Defaults to 'string'.\n\t */\n\tdataType?: InspectorWidgetTypes;\n\t/**\n\t * The maximum number of items to display in the array inspector.\n\t * Defaults to 100.\n\t */\n\tmaxItems?: number;\n\t/**\n\t * Configuration options for the widgets created for each item in the array.\n\t */\n\tdataOptions?: GenericCreationOptions;\n\t/**\n\t * Callback function triggered when an item in the array is changed, added, or removed.\n\t * @param value The updated array of values.\n\t * @param index The index of the item that changed, or -1 if an item was removed.\n\t */\n\tcallback?: (value: InspectorArrayEditableValue[], index: number) => void;\n\t/**\n\t * Whether to show the length input field in the controls.\n\t */\n\tshowLength?: boolean;\n}\n\n/**\n * Widget to edit an array of values of a certain type\n * @function AddArray\n * @param {Inspector} that The inspector instance\n * @param {string} name The name/label of the widget\n * @param {InspectorArrayEditableValue[]} value The initial array of values\n * @param {AddArrayOptions} options Configuration options for the widget. Common options include:\n * - `dataType`: The type of every value inside the array (default: \"string\").\n * - `maxItems`: Max number of items to show from the array (default: 100).\n * - `dataOptions`: Options passed to the widget created for each item.\n * - `callback`: Function called when the array changes.\n * @return {ArrayWidgetContainer} The container element of the widget\n */\nexport function AddArray(that: Inspector, name: string, value: InspectorArrayEditableValue[], options: AddArrayOptions = {})\n{\n\tconst type = options.dataType ?? \"string\";\n\tconst maxItems = options.maxItems ?? 100;\n\n\t// Helper for default values\n\tconst getDefaultValueForType = (t: InspectorWidgetTypes) =>\n\t{\n\t\tswitch (t)\n\t\t{\n\t\tcase \"number\":\n\t\tcase \"slide\":\n\t\t\treturn 0;\n\t\tcase \"string\":\n\t\tcase \"text\":\n\t\tcase \"textarea\":\n\t\t\treturn \"\";\n\t\tcase \"boolean\":\n\t\tcase \"checkbox\":\n\t\t\treturn false;\n\t\tcase \"vec2\":\n\t\tcase \"vector2\":\n\t\t\treturn [0, 0];\n\t\tcase \"vec3\":\n\t\tcase \"vector3\":\n\t\t\treturn [0, 0, 0];\n\t\tcase \"vec4\":\n\t\tcase \"vector 4\":\n\t\t\treturn [0, 0, 0, 0];\n\t\tcase \"color\":\n\t\t\treturn [1, 1, 1];\n\t\tdefault:\n\t\t\treturn null;\n\t\t}\n\t};\n\n\t/*\n\t * Create the main widget\n\t * We use createWidget to get the standard wrapper, but we'll populate it manually\n\t */\n\tconst widget = that.createWidget(name, undefined, { ...options, width: \"100%\" }) as ArrayWidgetContainer;\n\twidget.className += \" array-widget\";\n\n\t// Create the header that holds the name and controls\n\tconst header = document.createElement(\"div\");\n\theader.className = \"array-header\";\n\n\t// Name (Label)\n\tconst title = document.createElement(\"span\");\n\ttitle.className = \"wname\";\n\ttitle.innerText = name;\n\ttitle.title = name;\n\tif (options.nameWidth)\n\t{\n\t\ttitle.style.width = LiteGUI.sizeToCSS(options.nameWidth) as string;\n\t}\n\theader.appendChild(title);\n\n\t// Controls Container (Buttons + Input)\n\tconst controls = document.createElement(\"div\");\n\tcontrols.className = \"array-controls\";\n\n\t// +/- Buttons\n\tconst btnPlus = document.createElement(\"button\");\n\tbtnPlus.className = \"litebutton\";\n\tbtnPlus.innerText = \"+\";\n\tbtnPlus.addEventListener(\"click\", () =>\n\t{\n\t\tconst def = getDefaultValueForType(type) ?? \"\";\n\t\tif (Array.isArray(def))\n\t\t{\n\t\t\tvalue.push([...def]);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvalue.push(def);\n\t\t}\n\t\trefresh();\n\t\ttriggerChange(value.length - 1);\n\t});\n\n\tconst btnMinus = document.createElement(\"button\");\n\tbtnMinus.className = \"litebutton\";\n\tbtnMinus.innerText = \"-\";\n\tbtnMinus.addEventListener(\"click\", () =>\n\t{\n\t\tif (value.length > 0)\n\t\t{\n\t\t\tvalue.length = value.length - 1;\n\t\t\trefresh();\n\t\t\ttriggerChange(value.length);\n\t\t}\n\t});\n\n\t// Length Input\n\tlet lengthInput: HTMLInputElement | undefined;\n\n\tcontrols.appendChild(btnPlus);\n\tcontrols.appendChild(btnMinus);\n\n\tif (options.showLength)\n\t{\n\t\tlengthInput = document.createElement(\"input\");\n\t\tlengthInput.type = \"text\";\n\t\tlengthInput.className = \"array-length\";\n\t\tlengthInput.value = value.length.toString();\n\t\tlengthInput.addEventListener(\"change\", (e: Event) =>\n\t\t{\n\t\t\tconst rv = parseInt((e.target as HTMLInputElement).value);\n\t\t\tif (!isNaN(rv))\n\t\t\t{\n\t\t\t\tif (rv > value.length)\n\t\t\t\t{\n\t\t\t\t\tfor (let i = value.length; i < rv; ++i)\n\t\t\t\t\t{\n\t\t\t\t\t\tconst def = getDefaultValueForType(type) ?? \"\";\n\t\t\t\t\t\tif (Array.isArray(def))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvalue.push([...def]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvalue.push(def);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tvalue.length = Math.max(0, rv);\n\t\t\t\t}\n\t\t\t\trefresh();\n\t\t\t\ttriggerChange();\n\t\t\t}\n\t\t});\n\n\t\tcontrols.appendChild(lengthInput);\n\t}\n\n\theader.appendChild(controls);\n\n\twidget.innerHTML = \"\"; // Clear default structure\n\twidget.appendChild(header);\n\n\t// Container for items\n\tconst container = document.createElement(\"div\");\n\tcontainer.className = \"wcontainer array-items\";\n\twidget.value = value;\n\twidget.appendChild(container);\n\n\t// Attach widget to inspector\n\tthat.appendWidget(widget);\n\n\t// Implementation of Logic\n\tconst assign = function (a: { value: InspectorArrayEditableValue[]; index: number }, v: unknown)\n\t{\n\t\ta.value[a.index] = v as InspectorArrayEditableValue;\n\t\ttriggerChange(a.index);\n\t};\n\n\tconst triggerChange = (index: number = -1) =>\n\t{\n\t\tif (lengthInput) { lengthInput.value = value.length.toString(); }\n\t\tif (options.callback)\n\t\t{\n\t\t\toptions.callback(value, index);\n\t\t}\n\t\tthat.onWidgetChange(widget, name, value, options as unknown as WidgetChangeOptions);\n\t};\n\n\tconst refresh = function ()\n\t{\n\t\tconst size = Math.min(value.length, maxItems);\n\t\tif (lengthInput) { lengthInput.value = value.length.toString(); }\n\n\t\tcontainer.innerHTML = \"\";\n\t\tconst oldWidgetsPerRow = that.widgetsPerRow;\n\t\tthat.widgetsPerRow = 1;\n\n\t\tfor (let i = 0; i < size; ++i)\n\t\t{\n\t\t\tif (value[i] === undefined)\n\t\t\t{\n\t\t\t\tconst def = getDefaultValueForType(type) ?? \"\";\n\t\t\t\tif (Array.isArray(def))\n\t\t\t\t{\n\t\t\t\t\tvalue[i] = [...def];\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tvalue[i] = def;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst v: InspectorArrayEditableValue = value[i];\n\n\t\t\tconst row = document.createElement(\"div\");\n\t\t\trow.className = \"array-row\";\n\t\t\trow.innerHTML = `<span class='row-index'>${i}</span><span class='row-cell'></span><button style='width: 30px;' class='litebutton single row-trash'></button>`;\n\t\t\tcontainer.appendChild(row);\n\n\t\t\tconst widgetRowContainer = row.querySelector('.row-cell') as HTMLDivElement;\n\n\t\t\tconst itemOptions: PropertyOptions = {\n\t\t\t\t...options.dataOptions,\n\t\t\t\twidgetParent: widgetRowContainer,\n\t\t\t\tcallback: assign.bind(undefined, { value: value, index: i })\n\t\t\t};\n\n\t\t\tthat.add(type, undefined, v, itemOptions);\n\n\t\t\tconst trashBtn = row.querySelector('.row-trash');\n\t\t\tif (trashBtn)\n\t\t\t{\n\t\t\t\ttrashBtn.addEventListener(\"click\", () =>\n\t\t\t\t{\n\t\t\t\t\tif (value && value.length > i)\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue.splice(i, 1);\n\t\t\t\t\t\trefresh();\n\t\t\t\t\t\ttriggerChange(-1);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tthat.widgetsPerRow = oldWidgetsPerRow;\n\t};\n\n\trefresh();\n\n\twidget.setValue = function (v: InspectorValue)\n\t{\n\t\tif (v === undefined || !Array.isArray(v)) { return; }\n\t\tconst val = v as InspectorArrayEditableValue[];\n\t\tthis.value = val;\n\t\tvalue.length = 0;\n\t\t// Copy to keep reference\n\t\tfor (let i = 0; i < val.length; ++i) {value[i] = val[i];}\n\t\trefresh();\n\t};\n\n\twidget.getValue = function ()\n\t{\n\t\treturn this.value;\n\t};\n\n\treturn widget;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddArray(name: string, value: InspectorArrayEditableValue[], options?: AddArrayOptions): ArrayWidgetContainer;\n\t}\n}\n\nInspector.prototype.addArray = function (name: string, value: InspectorArrayEditableValue[], options?: AddArrayOptions): ArrayWidgetContainer\n{\n\treturn AddArray(this, name, value, options);\n};\n\nInspector.widgetConstructors.array = \"addArray\";","import { CreateWidgetOptions, InspectorValue, InspectorWidget, WidgetChangeOptions } from \"../@types/Inspector\";\nimport { LiteGUI } from \"../core\";\nimport { Inspector } from \"./inspector\";\n\n/**\n * Options for creating a button widget.\n */\nexport interface AddButtonOptions extends CreateWidgetOptions, Omit<WidgetChangeOptions, 'callback'>\n{\n\t/**\n\t * Whether the button should be disabled.\n\t * @default false\n\t */\n\tdisabled?: boolean;\n\t/**\n\t * Whether to use the micro style for the button.\n\t * @default false\n\t */\n\tmicro?: boolean;\n\t/**\n\t * The text to display on the button.\n\t */\n\tbuttonText?: string;\n\t/**\n\t * Callback function to be executed when the button is clicked.\n\t */\n\tcallback?: (value?: string) => void;\n}\n\n/**\n * Interface representing the button widget in the Inspector.\n */\nexport interface InspectorButtonWidget extends InspectorWidget\n{\n\t/**\n\t * Adds a callback for the widget click event.\n\t * @param {(event: Event) => void} callback - The function to call on click.\n\t */\n\twclick: (callback: (event: Event) => void) => void;\n}\n\n/**\n * Creates an HTML button widget with optional name, value, and options.\n * @function AddButton\n * @param {Inspector} that - The Inspector instance.\n * @param {string} [name] - The name of the button.\n * @param {string} [value] - The value of the button (text label).\n * @param {AddButtonOptions | (() => void)} [options] - The options for the button or a callback function.\n * @returns {InspectorButtonWidget} - The created button widget element.\n */\nexport function AddButton(that: Inspector, name?: string, value?: string, options?: AddButtonOptions | (() => void)): InspectorButtonWidget\n{\n\tconst processedOptions = that.processOptions(options) as AddButtonOptions;\n\tvalue = processedOptions.buttonText ?? value;\n\tvalue = value ?? \"\";\n\tname = name ?? value;\n\n\t// Create a valid ID for the widget if one wasn't provided\n\tconst id = that.getValueName(name, processedOptions);\n\tif (!processedOptions.widgetName)\n\t{\n\t\tprocessedOptions.widgetName = id;\n\t}\n\n\tlet buttonClassName = \"\";\n\tif (!name) { buttonClassName = \"single\"; } // Single button without label\n\tif (processedOptions.micro) { buttonClassName += \" micro\"; } // Micro style\n\n\tlet attrs = \"\";\n\tif (processedOptions.disabled) { attrs = \"disabled='disabled'\"; }\n\n\tconst title = processedOptions.title?.toString() ?? \"\";\n\n\t// Create the widget structure\n\tconst element = that.createWidget(name, \"<button tabIndex='\" +\n\t\tthat.tabIndex + \"' \" + attrs + \"></button>\", processedOptions) as InspectorButtonWidget;\n\tthat.tabIndex++;\n\n\t// Configure the button element\n\tconst button = element.querySelector(\"button\") as HTMLButtonElement;\n\tbutton.setAttribute(\"title\", title);\n\tbutton.className = \"litebutton \" + buttonClassName;\n\tbutton.innerHTML = value;\n\n\t// Add click event listener\n\tbutton.addEventListener(\"click\", (event: MouseEvent) =>\n\t{\n\t\tthat.onWidgetChange(element, name, button.innerHTML, processedOptions as unknown as WidgetChangeOptions, false, event);\n\t\tLiteGUI.trigger(button, \"wclick\", value);\n\t});\n\tthat.appendWidget(element, processedOptions);\n\n\telement.wclick = function (callback: (event: Event) => void)\n\t{\n\t\tif (!processedOptions.disabled)\n\t\t{\n\t\t\tLiteGUI.bind(element, \"wclick\", callback);\n\t\t}\n\t};\n\n\telement.setValue = function (value: InspectorValue)\n\t{\n\t\tif (value === undefined || (typeof value !== 'string')) { return; }\n\t\tbutton.innerHTML = value;\n\t};\n\n\telement.disable = function () { button.disabled = true; };\n\telement.enable = function () { button.disabled = false; };\n\n\tthat.processElement(element, processedOptions);\n\treturn element;\n}\n\n/**\n * Creates a widget with multiple HTML buttons.\n * @function AddButtons\n * @param {Inspector} that - The Inspector instance.\n * @param {string} [name] - The name of the widget.\n * @param {string[]} [values] - Array of strings to be displayed on the buttons.\n * @param {AddButtonOptions | ((name: string) => void)} [options] - The options for the buttons or a callback function.\n * @returns {InspectorButtonWidget} - The element containing the buttons.\n */\nexport function AddButtons(that: Inspector, name?: string, values?: string[], options?: AddButtonOptions | ((name: string) => void)): InspectorButtonWidget\n{\n\tconst processedOptions = that.processOptions(options) as AddButtonOptions;\n\tvalues = values ?? [];\n\n\t// Create a valid ID for the widget\n\tconst id = that.getValueName(name, processedOptions);\n\tif (!processedOptions.widgetName)\n\t{\n\t\tprocessedOptions.widgetName = id;\n\t}\n\n\tlet code = \"\";\n\t// Calculate width for each button to fit in the row\n\tconst w = `calc( ${(100 / values.length).toFixed(3)}% - 4px )`;\n\tconst style = `width: ${w}; width: -moz-${w}; width: -webkit-${w}; margin: 2px;`;\n\n\t// Generate HTML for each button\n\tfor (const i in values)\n\t{\n\t\tlet title = \"\";\n\t\tif (processedOptions.title)\n\t\t{\n\t\t\tif (Array.isArray(processedOptions.title))\n\t\t\t{\n\t\t\t\ttitle = processedOptions.title[i];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ttitle = processedOptions.title as string;\n\t\t\t}\n\t\t}\n\t\tcode += `<button class='litebutton' title='${title}' tabIndex='${that.tabIndex}' style='${style}'>${values[i]}</button>`;\n\t\tthat.tabIndex++;\n\t}\n\n\tconst element = that.createWidget(name, code, processedOptions) as InspectorButtonWidget;\n\tconst buttons = element.querySelectorAll(\"button\");\n\n\t// Callback wrapper to handle button clicks\n\tconst buttonCallback = function (button: HTMLButtonElement, evt: PointerEvent)\n\t{\n\t\tthat.onWidgetChange(element, id, button.innerHTML, processedOptions as unknown as WidgetChangeOptions, false, evt);\n\t};\n\n\t// Attach event listeners to all buttons\n\tfor (let i = 0; i < buttons.length; ++i)\n\t{\n\t\tconst button = buttons[i];\n\t\tbutton.addEventListener(\"click\", buttonCallback.bind(undefined, button));\n\t}\n\n\tthat.appendWidget(element, processedOptions);\n\tthat.processElement(element, processedOptions);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddButton(name?: string, value?: string, options?: AddButtonOptions | (() => void)): InspectorButtonWidget;\n\t\taddButtons(name?: string, values?: string[], options?: AddButtonOptions | ((name: string) => void)): InspectorButtonWidget;\n\t}\n}\n\nInspector.prototype.addButton = function (name?: string, value?: string, options?: AddButtonOptions | (() => void)): InspectorButtonWidget\n{\n\treturn AddButton(this, name, value, options);\n};\n\nInspector.prototype.addButtons = function (name?: string, values?: string[], options?: AddButtonOptions | ((name: string) => void)): InspectorButtonWidget\n{\n\treturn AddButtons(this, name, values, options);\n};\n\nInspector.widgetConstructors.button = \"addButton\";\nInspector.widgetConstructors.buttons = \"addButtons\";\n","import { CreateWidgetOptions, InspectorActiveWidget, InspectorValue, WidgetChangeOptions } from \"../@types/Inspector\";\nimport { LiteGUI } from \"../core\";\nimport { Inspector } from \"./inspector\";\n\n/**\n * Options for creating a checkbox widget.\n */\nexport interface AddCheckboxOptions extends CreateWidgetOptions, Omit<WidgetChangeOptions, 'callback'>\n{\n\t/**\n\t * Text to show. If labelOn or labelOff aren't set it will take this value.\n\t */\n\tlabel?: string;\n\n\t/**\n\t * Text to show when the checkbox is 'on'.\n\t */\n\tlabelOn?: string;\n\n\t/**\n\t * Text to show when the checkbox is 'off'.\n\t */\n\tlabelOff?: string;\n\n\t/**\n\t * Callback function to call once the value changes.\n\t */\n\tcallback?: (value: boolean) => void;\n}\n\n/**\n * Interface representing the checkbox widget.\n */\nexport interface InspectorCheckboxWidget extends InspectorActiveWidget\n{\n\t/**\n\t * Updates the value of the checkbox.\n\t * @param {boolean} [value] The new value.\n\t * @param {boolean} [skipEvent] If true, the callback will not be triggered.\n\t */\n\tsetValue: (value?: InspectorValue, skipEvent?: boolean) => void;\n}\n\n/**\n * Widget to edit a boolean value using a checkbox.\n * @function AddCheckbox\n * @param {Inspector} that The Inspector instance.\n * @param {string} name The name/label of the widget.\n * @param {boolean} value The initial boolean value.\n * @param {AddCheckboxOptions} [options] Configuration options for the checkbox.\n * @returns {InspectorCheckboxWidget} The created checkbox widget element.\n */\nexport function AddCheckbox(that: Inspector, name: string, value: boolean, options?: AddCheckboxOptions): InspectorCheckboxWidget\n{\n\tvalue = value ?? false;\n\toptions = options ?? {};\n\tconst valueName = that.getValueName(name, options);\n\tthat.values.set(valueName, value);\n\n\t// Determine labels for on/off states\n\tconst labelOn = options.labelOn ?? options.label ?? \"on\";\n\tconst labelOff = options.labelOff ?? options.label ?? \"off\";\n\tconst label = (value ? labelOn : labelOff);\n\n\t// Create the widget element\n\tconst element = that.createWidget(name,\n\t\t`<span class='inputfield'><span tabIndex='${that.tabIndex}' class='fixed flag checkbox ${value ? \"on\" : \"off\"}'>${label}</span></span>`,\n\t\toptions) as InspectorCheckboxWidget;\n\tthat.tabIndex++;\n\n\t// Event handling for keypress (Space) to toggle checkbox\n\tconst checkbox = element.querySelector(\".wcontent .checkbox\") as HTMLElement;\n\tcheckbox.addEventListener(\"keypress\", (e: KeyboardEvent) =>\n\t{\n\t\tif (e.code === \"Space\" || e.key === \" \") { LiteGUI.trigger(checkbox, \"click\"); }\n\t});\n\n\t// Toggle value on click\n\telement.addEventListener(\"click\", () =>\n\t{\n\t\tvalue = !value;\n\t\telement.querySelector(\"span.flag\")!.innerHTML = value ? labelOn : labelOff;\n\t\tif (value)\n\t\t{\n\t\t\tcheckbox.classList.add(\"on\");\n\t\t}\n\t\telse\n\t\t{\n\t\t\tcheckbox.classList.remove(\"on\");\n\t\t}\n\t\tthat.onWidgetChange(element, valueName, value, options as unknown as WidgetChangeOptions);\n\t});\n\n\telement.getValue = function ()\n\t{\n\t\treturn value;\n\t};\n\n\telement.setValue = (v?: InspectorValue, skipEvent?: boolean) =>\n\t{\n\t\tif (v === undefined || typeof v !== 'boolean') { return; }\n\t\tif (value != v)\n\t\t{\n\t\t\tvalue = v;\n\t\t\tthat.values.set(valueName, v);\n\t\t\tif (!skipEvent)\n\t\t\t{\n\t\t\t\tLiteGUI.trigger(checkbox, \"click\");\n\t\t\t}\n\t\t}\n\t};\n\n\tthat.appendWidget(element, options);\n\tthat.processElement(element, options);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddCheckbox(name: string, value: boolean, options?: AddCheckboxOptions): InspectorCheckboxWidget;\n\t}\n}\n\nInspector.prototype.addCheckbox = function (name: string, value: boolean, options?: AddCheckboxOptions): InspectorCheckboxWidget\n{\n\treturn AddCheckbox(this, name, value, options);\n};\n\nInspector.widgetConstructors.checkbox = \"addCheckbox\";\nInspector.widgetConstructors.boolean = \"addCheckbox\";\n","import { RGBAToHEXA } from \"../utilities\";\nimport { CreateWidgetOptions, InspectorValue, InspectorWidget } from \"../@types/Inspector\";\nimport { LiteGUI } from \"../core\";\nimport { Inspector } from \"./inspector\";\nimport Pickr from \"@simonwep/pickr\";\n\n/**\n * Configuration options for the Color widget.\n */\nexport interface AddColorOptions extends CreateWidgetOptions\n{\n\t/**\n\t * Whether to show the numeric RGB representation alongside the color picker.\n\t */\n\tshowRGB?: boolean;\n\n\t/**\n\t * Callback function triggered when the color changes.\n\t */\n\tcallback?: (value: number[], hex: string) => void;\n\n\t/**\n\t * Alias for callback.\n\t */\n\tonChange?: (value: number[], hex: string) => void;\n\n\t/**\n\t * Whether to enable opacity (alpha) control in the color picker.\n\t */\n\topacityControl?: boolean;\n\n\t/**\n\t * Whether the color picker is disabled.\n\t */\n\tdisabled?: boolean;\n}\n\n/**\n * Adds a color input widget to the Inspector.\n * @function AddColor\n * @param {Inspector} that - The Inspector instance.\n * @param {string} name - The name of the color input.\n * @param {number[]} [value=[0, 0, 0, 255]] - The initial RGBA value of the color input.\n * @param {AddColorOptions} [options] - Additional options for the color input.\n * @returns {InspectorWidget} The created color input widget.\n */\nexport function AddColor(that: Inspector, name: string,\n\tvalue: [number, number, number, number] | [number, number, number] = [0, 0, 0, 255],\n\toptions: AddColorOptions = {})\n{\n\t// Normalize value to RGBA\n\tif (value.length === 3)\n\t{\n\t\tvalue = value.concat(255) as [number, number, number, number];\n\t}\n\tthat.values.set(name, value);\n\tconst processedOptions = that.processOptions(options) as AddColorOptions;\n\n\t// Create the widget HTML structure\n\tlet code = `<div class='input_container' style='display: inline-block; width: calc(100% - 4px);'><input tabIndex='${that.tabIndex}' id='colorpicker-${name}' class='color' value='${value[0]},${value[1]},${value[2]},${value[3]}' ${processedOptions.disabled ? \"disabled\" : \"\"}/></div>`;\n\tthat.tabIndex++;\n\n\tif (processedOptions.showRGB)\n\t{\n\t\tcode += `<span class='rgb-color'>${Inspector.parseColor(value.concat() as [number, number, number, number])}</span>`;\n\t}\n\tconst element = that.createWidget(name, code, processedOptions) as InspectorWidget;\n\tthat.appendWidget(element, processedOptions); // Add now or won't work\n\n\tconst input_element = element.querySelector(\"input.color\") as HTMLInputElement;\n\n\t// Pickr setup and initialization\n\tconst pickr = new Pickr({\n\t\tel: input_element,\n\t\ttheme: 'nano', // Or 'classic', or 'monolith', or 'nano'\n\t\tdefault: RGBAToHEXA(value),\n\t\tcomponents: {\n\t\t\t// Main components\n\t\t\tpreview: true,\n\t\t\topacity: processedOptions.opacityControl ?? false,\n\t\t\thue: true,\n\n\t\t\t// Input / output Options\n\t\t\tinteraction: {\n\t\t\t\thex: true,\n\t\t\t\trgba: true,\n\t\t\t\thsla: false,\n\t\t\t\thsva: false,\n\t\t\t\tcmyk: false,\n\t\t\t\tinput: true,\n\t\t\t\tclear: false,\n\t\t\t\tcancel: true,\n\t\t\t\tsave: true\n\t\t\t}\n\t\t},\n\t\tposition: 'bottom-start',\n\t\tdisabled: processedOptions.disabled\n\t});\n\n\t// Helper to update widget state from Pickr events\n\tconst _updateFromPickr = (color: Pickr.HSVaColor) =>\n\t{\n\t\t// Color is a Pickr color object\n\t\tif (!color) {return;}\n\n\t\tconst rgba = color.toRGBA(); // Returns [r, g, b, a]\n\t\trgba[3] = rgba[3] * 255;\n\t\tconst hex = color.toHEXA().toString();\n\n\t\tconst rgbelement = element.querySelector(\".rgb-color\");\n\t\tif (rgbelement)\n\t\t{\n\t\t\trgbelement.innerHTML = Inspector.parseColor(\n\t\t\t\trgba.concat() as [number, number, number, number]);\n\t\t}\n\n\t\tthat.values.set(name, rgba.concat());\n\n\t\t// Trigger callbacks and events\n\t\tconst event_data = [rgba.concat(), hex];\n\n\t\tLiteGUI.trigger(element, \"wbeforechange\", event_data);\n\n\t\tif (processedOptions.callback)\n\t\t{\n\t\t\tprocessedOptions.callback.call(element, rgba.concat(), hex);\n\t\t}\n\t\telse if (processedOptions.onChange)\n\t\t{\n\t\t\tprocessedOptions.onChange.call(element, rgba.concat(), hex);\n\t\t}\n\n\t\tLiteGUI.trigger(element, \"wchange\", event_data);\n\t\tif (that.onChange) { that.onChange(name, rgba.concat(), element); }\n\t};\n\n\t// Save event listener\n\tpickr.on('save', (color: Pickr.HSVaColor) =>\n\t{\n\t\t_updateFromPickr(color);\n\t\tpickr.hide();\n\t});\n\n\t// Change event listener (handling dragging)\n\tpickr.on('change', (color: Pickr.HSVaColor) =>\n\t{\n\t\t// Use this for \"dragging\" / immediate updates\n\t\t_updateFromPickr(color);\n\t});\n\n\t// Handle external value updates\n\telement.setValue = function (v: InspectorValue, skipEvent?: boolean)\n\t{\n\t\tif (v === undefined || !Array.isArray(v) || v.length < 3) { return; }\n\t\tconst val = v as number[];\n\t\tconst cssVal = `rgba(${val[0]},${val[1]},${val[2]},${(val.length > 3 ? val[3] : 255)})`;\n\t\tpickr.setColor(cssVal);\n\n\t\tif (!skipEvent)\n\t\t{\n\t\t\tconst color = pickr.getColor();\n\t\t\t_updateFromPickr(color);\n\t\t}\n\t};\n\n\telement.getValue = function ()\n\t{\n\t\treturn that.values.get(name);\n\t};\n\n\tthat.processElement(element, processedOptions);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddColor(name: string, value?: [number, number, number, number] | [number, number, number], options?: AddColorOptions): InspectorWidget;\n\t}\n}\n\nInspector.prototype.addColor = function (name: string, value?: [number, number, number, number] | [number, number, number], options?: AddColorOptions): InspectorWidget\n{\n\treturn AddColor(this, name, value, options);\n};\n\nInspector.widgetConstructors.color = \"addColor\";","import { LiteGUI } from \"../core\";\nimport { CreateWidgetOptions, InspectorActiveWidget, InspectorValue, InspectorWidget, WidgetChangeOptions } from \"../@types/Inspector\";\nimport { Inspector } from \"./inspector\";\n\n/**\n * Options for creating a Combo widget.\n */\nexport interface AddComboOptions extends CreateWidgetOptions, Omit<WidgetChangeOptions, 'callback'>\n{\n\t/**\n\t * List of values to be displayed in the dropdown or as buttons.\n\t */\n\tvalues?: string[];\n\n\t/**\n\t * Whether the widget is disabled.\n\t */\n\tdisabled?: boolean;\n\n\t/**\n\t * Callback function triggered when the value changes.\n\t */\n\tcallback?: (value: string) => void;\n}\n\n/**\n * Interface for the Combo widget element.\n */\nexport interface InspectorComboWidget extends InspectorActiveWidget\n{\n\t/**\n\t * Updates the values of the dropdown options.\n\t * @param {string[]} values Array of string values for the options.\n\t * @param {string} [selected] Optional value to be selected.\n\t */\n\tsetOptionValues: (values: string[], selected?: string) => void;\n\n\t/**\n\t * Sets the selected value of the combo box.\n\t * @param {string} value The value to select.\n\t * @param {boolean} [skipEvent] Whether to skip triggering the change event.\n\t */\n\tsetValue: (value: InspectorValue, skipEvent?: boolean) => void;\n}\n\n/**\n * Interface for the Combo Buttons widget element.\n */\nexport interface InspectorComboButtonsWidget extends InspectorWidget\n{\n\t/**\n\t * List of button elements contained in the widget.\n\t */\n\tbuttons: NodeListOf<HTMLButtonElement>;\n}\n\n/**\n * Adds a dropdown combo widget to the Inspector.\n * @function AddCombo\n * @param {Inspector} that - The Inspector instance.\n * @param {string} [name] - The name/label of the widget.\n * @param {string} [value=''] - The initial selected value.\n * @param {AddComboOptions} [options] - Configuration options.\n * @param {string[]} [options.values] - List of values (strings) to populate the dropdown.\n * @param {boolean} [options.disabled] - If true, the widget is disabled.\n * @param {Function} [options.callback] - Function to call on change.\n * @returns {InspectorComboWidget} The created combo widget.\n */\nexport function AddCombo(that: Inspector, name?: string, value?: string, options?: AddComboOptions): InspectorComboWidget\n{\n\tvalue = value ?? '';\n\toptions = options ?? {};\n\tconst valueName = that.getValueName(name, options);\n\tthat.values.set(valueName, value);\n\n\t// Increment tabindex for accessibility\n\tthat.tabIndex++;\n\n\tconst isDisabledText = options.disabled ? \"disabled\" : \"\";\n\tconst element = that.createWidget(name, \"<span class='inputfield full inputcombo \" +\n\t\tisDisabledText + \"'></span>\", options) as InspectorComboWidget;\n\telement.options = options;\n\n\tlet values: string[] = options.values ?? [];\n\n\t// Create inner structure\n\tconst code = \"<select tabIndex='\" + that.tabIndex + \"' \" + isDisabledText + \" class='\" + isDisabledText + \"'></select>\";\n\telement.querySelector(\"span.inputcombo\")!.innerHTML = code;\n\tsetValues(values);\n\n\tlet _stopEvent = false; // Used internally\n\n\t// Event listener for change\n\tconst select = element.querySelector(\".wcontent select\") as HTMLSelectElement;\n\tselect.addEventListener(\"change\", (e: Event) =>\n\t{\n\t\tconst v = (e.target as HTMLSelectElement).value;\n\t\tvalue = v;\n\t\tif (_stopEvent) { return; }\n\t\tthat.onWidgetChange(element, valueName, value, options as unknown as WidgetChangeOptions);\n\t});\n\n\telement.getValue = function ()\n\t{\n\t\treturn value;\n\t};\n\n\telement.setValue = function (v: InspectorValue, skipEvent?: boolean)\n\t{\n\t\tif (v === undefined || typeof v !== 'string') { return; }\n\t\tvalue = v;\n\t\tconst select = element.querySelector(\"select\") as HTMLSelectElement;\n\t\tconst items = select.querySelectorAll(\"option\");\n\t\tconst index = values.indexOf(v) ?? -1;\n\t\tif (index == -1) { return; }\n\n\t\t_stopEvent = skipEvent ?? false;\n\n\t\t// Update DOM elements to reflect value\n\t\tfor (const i in items)\n\t\t{\n\t\t\tconst item = items[i];\n\t\t\tif (!item || !item.dataset) { continue; }\n\t\t\tconst setIndex = item.dataset['index'];\n\t\t\tif (setIndex && parseFloat(setIndex) == index)\n\t\t\t{\n\t\t\t\titem.selected = true;\n\t\t\t\tselect.selectedIndex = index;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\titem.removeAttribute(\"selected\");\n\t\t\t}\n\t\t}\n\n\t\t_stopEvent = false;\n\t};\n\n\tfunction setValues(v: string[], selected?: string)\n\t{\n\t\tvalues = v;\n\t\tif (selected) { value = selected; }\n\t\tlet code = \"\";\n\t\tfor (const i in values)\n\t\t{\n\t\t\tcode += \"<option value='\" + i + \"' \" + (values[i] == value ? \" selected\" : \"\") + \" data-index='\" + i + \"'>\" + values[i] + \"</option>\";\n\t\t}\n\t\telement.querySelector(\"select\")!.innerHTML = code;\n\t}\n\n\telement.setOptionValues = setValues;\n\n\tthat.appendWidget(element, options);\n\tthat.processElement(element, options);\n\treturn element;\n}\n\n/**\n * Adds a widget with an array of buttons, where clicking one selects it.\n * @function AddComboButtons\n * @param {Inspector} that - The Inspector instance.\n * @param {string} [name] - The name/label of the widget.\n * @param {string} [value=''] - The initial selected value.\n * @param {AddComboOptions} [options] - Configuration options.\n * @param {string[]} [options.values] - List of values for the buttons.\n * @returns {InspectorComboButtonsWidget} The created combo buttons widget.\n */\nexport function AddComboButtons(that: Inspector, name?: string, value?: string, options?: AddComboOptions): InspectorComboButtonsWidget\n{\n\tvalue = value ?? '';\n\toptions = options ?? {};\n\tconst valueName = that.getValueName(name, options);\n\tthat.values.set(valueName, value);\n\n\tlet code = \"\";\n\tif (options.values)\n\t{\n\t\tfor (const i in options.values)\n\t\t{\n\t\t\tcode += `<button class='wcombobutton ${value == options.values[i] ? \"selected\" : \"\"}' data-name='${options.values[i]}'>${options.values[i]}</button>`;\n\t\t}\n\t}\n\n\t// Generate buttons for each value\n\tconst element = that.createWidget(name, code, options) as InspectorComboButtonsWidget;\n\tconst buttons = element.querySelectorAll(\".wcontent button\") as NodeListOf<HTMLButtonElement>;\n\telement.buttons = buttons;\n\n\t// Bind click events\n\tLiteGUI.bind(buttons, \"click\", (e: Event) =>\n\t{\n\t\tconst el = e.target as HTMLElement;\n\t\tconst buttonName = el.innerHTML;\n\t\tthat.values.set(valueName, buttonName);\n\n\t\tconst elements = element.querySelectorAll(\".selected\");\n\t\tfor (let i = 0; i < elements.length; ++i)\n\t\t{\n\t\t\telements[i].classList.remove(\"selected\");\n\t\t}\n\t\tel.classList.add(\"selected\");\n\n\t\tthat.onWidgetChange(element, valueName, buttonName, options as unknown as WidgetChangeOptions);\n\t});\n\n\tthat.appendWidget(element, options);\n\tthat.processElement(element, options);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddCombo(name?: string, value?: string, options?: AddComboOptions): InspectorComboWidget;\n\t\taddComboButtons(name?: string, value?: string, options?: AddComboOptions): InspectorComboButtonsWidget;\n\t}\n}\n\nInspector.prototype.addCombo = function (name?: string, value?: string, options?: AddComboOptions): InspectorComboWidget\n{\n\treturn AddCombo(this, name, value, options);\n};\n\nInspector.prototype.addComboButtons = function (name?: string, value?: string, options?: AddComboOptions): InspectorComboButtonsWidget\n{\n\treturn AddComboButtons(this, name, value, options);\n};\n\nInspector.widgetConstructors.combo = \"addCombo\";\nInspector.widgetConstructors.enum = \"addCombo\";\nInspector.widgetConstructors.dropdown = \"addCombo\";\nInspector.widgetConstructors.combobuttons = \"addComboButtons\";\n\n","import { TreeData } from \"../widgets/tree\";\nimport { CreateWidgetOptions } from \"../@types/Inspector\";\nimport { Inspector } from \"./inspector\";\nimport { InspectorTreeWidget } from \"./tree\";\n\n/**\n * Adds a tree widget to the inspector using arrays of strings as their tree data.\n * @function AddDataTree\n * @param {Inspector} that - The reference to the inspector.\n * @param {string} name - The name of the tree widget.\n * @param {TreeData} value - The tree data object to display.\n * @param {CreateWidgetOptions} [options] - Configuration options for the widget.\n * @returns {InspectorTreeWidget} The created tree widget instance.\n */\nexport function AddDataTree(that: Inspector, name: string, value: TreeData, options?: CreateWidgetOptions)\n{\n\t// Create the widget structure\n\tconst element = that.createWidget(name, \"<div class='wtree'></div>\", options) as InspectorTreeWidget;\n\n\tconst treeRoot: HTMLDivElement | null = element.querySelector(\".wtree\");\n\tif (!treeRoot) { return; }\n\n\t// Recursively build the tree nodes\n\t_Recursive(treeRoot, value);\n\n\t// Apply height and overflow styles if specified\n\tif (options && options.height)\n\t{\n\t\ttreeRoot.style.height = typeof (options.height) == \"number\" ? options.height + \"px\" : options.height;\n\t\ttreeRoot.style.overflow = \"auto\";\n\t}\n\n\t/**\n\t * Recursively builds the DOM structure for the tree data.\n\t * @function innerRecursive\n\t * @param {HTMLDivElement} rootNode - The parent DOM element to append nodes to.\n\t * @param {TreeData} data - The current level of tree data to process.\n\t */\n\tfunction _Recursive(rootNode: HTMLDivElement, data: TreeData)\n\t{\n\t\tfor (const i in data)\n\t\t{\n\t\t\t// Create container for the tree node\n\t\t\tconst e = document.createElement(\"div\");\n\t\t\te.className = \"treenode\";\n\t\t\tconst value = data[i];\n\n\t\t\t// Handle object values (nested nodes)\n\t\t\tif (typeof value == \"object\" && !Array.isArray(value))\n\t\t\t{\n\t\t\t\te.innerHTML = `<span class='itemname'>${i}</span><span class='itemcontent'></span>`;\n\t\t\t\tconst content: HTMLDivElement | null = e.querySelector(\".itemcontent\");\n\t\t\t\tif (content == null) { throw new Error(\"TreeNode wasn't properly created\"); }\n\t\t\t\t_Recursive(content, value as TreeData);\n\t\t\t}\n\t\t\t// Handle primitive values (leaf nodes)\n\t\t\telse\n\t\t\t{\n\t\t\t\te.innerHTML = `<span class='itemname'>${i}</span><span class='itemvalue'>${value}</span>`;\n\t\t\t}\n\t\t\trootNode.appendChild(e);\n\t\t}\n\t}\n\n\tthat.appendWidget(element, options);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddDataTree(name: string, value: TreeData, options?: CreateWidgetOptions): InspectorTreeWidget | undefined;\n\t}\n}\n\nInspector.prototype.addDataTree = function (name: string, value: TreeData, options?: CreateWidgetOptions): InspectorTreeWidget | undefined\n{\n\treturn AddDataTree(this, name, value, options);\n};\n\nInspector.widgetConstructors.datatable = \"addDataTree\";","import { CreateWidgetOptions, WidgetChangeOptions } from \"../@types/Inspector\";\nimport { Inspector } from \"./inspector\";\n\n/**\n * Interface representing the response data when a file is added.\n * Extends the standard File interface.\n */\nexport interface FileAddedResponse extends File\n{\n\t/**\n\t * The list of files selected.\n\t */\n\tfiles: FileList,\n\t/**\n\t * The generated object URL for the file, if requested.\n\t */\n\turl?: string,\n\t/**\n\t * The file content, read as binary, data URL, or text.\n\t */\n\tdata?: string | ArrayBuffer | null\n}\n\n/**\n * Configuration options for the file input widget.\n */\nexport interface AddFileOptions extends CreateWidgetOptions, WidgetChangeOptions\n{\n\t/**\n\t * The types of files that the server accepts (e.g., \".jpg, .png\" or [\"image/*\"]).\n\t */\n\taccept?: string | string[];\n\t/**\n\t * If true, creates an object URL for the selected file.\n\t */\n\tgenerateURL?: boolean;\n\t/**\n\t * Format to read the file content in.\n\t */\n\treadFile?: \"binary\" | \"data_url\" | string;\n\t/**\n\t * Callback function to execute when a file is added/changed.\n\t */\n\tcallbacks?: (data: FileAddedResponse) => void;\n}\n\n/**\n * Adds a file input widget to the inspector.\n * @function AddFile\n * @param {Inspector} that The inspector instance.\n * @param {string} name The name of the widget.\n * @param {string} [value] The initial value (filename).\n * @param {((data: FileAddedResponse) => void) | AddFileOptions} [options] The options for the widget or a callback.\n * @returns {HTMLElement} The created widget element.\n */\nexport function AddFile(that: Inspector, name: string, value?: string, options?: ((data: FileAddedResponse) => void) | AddFileOptions)\n{\n\tthat.values.set(name, { name: value ?? \"\" });\n\tconst processedOptions: AddFileOptions = that.processOptions(options);\n\n\t// Create the widget HTML structure\n\tconst element = that.createWidget(name, \"<span class='inputfield full whidden' style='width: calc(100% - 26px)'><span class='filename'></span></span><button class='litebutton' style='width:20px; margin-left: 2px;'>...</button><input type='file' size='100' class='file' value='\" + value + \"'/>\", processedOptions);\n\tconst content = element.querySelector(\".wcontent\") as HTMLElement;\n\tcontent.style.position = \"relative\";\n\tconst input = element.querySelector(\".wcontent input\") as HTMLInputElement;\n\n\t// Set accept attribute if provided\n\tif (processedOptions.accept)\n\t{\n\t\tinput.accept = typeof (processedOptions.accept) === \"string\" ? processedOptions.accept : processedOptions.accept.toString();\n\t}\n\tconst filenameEl = element.querySelector(\".wcontent .filename\") as HTMLElement;\n\tif (value) { filenameEl.innerText = value; }\n\n\t// Handle file selection change\n\tinput.addEventListener(\"change\", (e: Event) =>\n\t{\n\t\tif (!e || !e.target) { return; }\n\t\tconst target = e.target as HTMLInputElement;\n\t\tif (!target.files) { return; }\n\t\tif (!target.files.length)\n\t\t{\n\t\t\t// Clear filename if no file selected\n\t\t\tfilenameEl.innerText = \"\";\n\t\t\tthat.onWidgetChange(element, name, undefined, processedOptions);\n\t\t\treturn;\n\t\t}\n\n\t\tconst result = target.files[0] as FileAddedResponse;\n\t\tresult.files = target.files;\n\t\tif (processedOptions.generateURL) { result.url = URL.createObjectURL(target.files[0]); }\n\t\tfilenameEl.innerText = result.name;\n\n\t\t// Read file content if requested\n\t\tif (processedOptions.readFile)\n\t\t{\n\t\t\tconst reader = new FileReader();\n\t\t\treader.onload = (e2: ProgressEvent<FileReader>) =>\n\t\t\t{\n\t\t\t\tresult.data = e2.target?.result;\n\t\t\t\tthat.onWidgetChange(element, name, result, processedOptions);\n\t\t\t};\n\t\t\tif (processedOptions.readFile == \"binary\")\n\t\t\t{\n\t\t\t\treader.readAsArrayBuffer(result);\n\t\t\t}\n\t\t\telse if (processedOptions.readFile == \"data_url\")\n\t\t\t{\n\t\t\t\treader.readAsDataURL(result);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treader.readAsText(result);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthat.onWidgetChange(element, name, result, processedOptions);\n\t\t}\n\t});\n\n\tthat.appendWidget(element, processedOptions);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddFile(name: string, value?: string, options?: ((data: FileAddedResponse) => void) | AddFileOptions): HTMLElement;\n\t}\n}\n\nInspector.prototype.addFile = function (name: string, value?: string, options?: ((data: FileAddedResponse) => void) | AddFileOptions): HTMLElement\n{\n\treturn AddFile(this, name, value, options);\n};\n\nInspector.widgetConstructors.file = \"addFile\";","import { AddCheckboxOptions, InspectorCheckboxWidget } from \"./checkbox\";\nimport { Inspector } from \"./inspector\";\n\nexport interface AddFlagsOptions\n{\n\t/**\n\t * Default options applied to all checkboxes unless overridden.\n\t */\n\tdefault: AddCheckboxOptions,\n\t/**\n\t * Specific options for individual flags, keyed by flag name.\n\t */\n\t[key: string]: AddCheckboxOptions\n}\n\n/**\n * Creates a set of checkboxes to edit multiple boolean values (flags).\n * @function AddFlags\n * @param {Inspector} that - The Inspector instance.\n * @param {{ [key: string]: boolean }} flags - Object containing the boolean flags to edit.\n * @param {{ [key: string]: (boolean | undefined) }} [forceFlags] - Optional object with extra flags to include, even if not present in the main flags object.\n * @param {AddCheckboxOptions | AddFlagsOptions} [options] - Configuration options. Can be a single options object for all, or an AddFlagsOptions map.\n * @returns {InspectorCheckboxWidget[]} An array of the created checkbox widgets.\n */\nexport function AddFlags(that: Inspector, flags: { [key: string]: boolean }, forceFlags?: { [key: string]: (boolean | undefined) },\n\toptions?: AddCheckboxOptions | AddFlagsOptions): InspectorCheckboxWidget[]\n{\n\toptions = options ?? {};\n\n\t// Create a local copy of flags to iterate over, ensuring we capture all keys\n\tconst f: { [key: string]: boolean } = {};\n\tfor (const i in flags)\n\t{\n\t\tf[i] = flags[i];\n\t}\n\n\t// Merge forced flags if provided\n\tif (forceFlags)\n\t{\n\t\tfor (const i in forceFlags)\n\t\t{\n\t\t\t// Only add if not already present in the source flags\n\t\t\tif (typeof f[i] == \"undefined\")\n\t\t\t{\n\t\t\t\tf[i] = forceFlags[i] ?? false;\n\t\t\t}\n\t\t}\n\t}\n\n\tlet defaultOpt: AddCheckboxOptions | undefined = undefined;\n\t// Check if options contains a 'default' configuration\n\tif (\"default\" in options)\n\t{\n\t\tdefaultOpt = (options as AddFlagsOptions).default;\n\t}\n\n\tconst result: InspectorCheckboxWidget[] = [];\n\tfor (const i in f)\n\t{\n\t\tlet opt: AddCheckboxOptions | undefined = undefined;\n\n\t\t// Determine options for this specific flag\n\t\tif (i in options)\n\t\t{\n\t\t\topt = (options as AddFlagsOptions)[i];\n\t\t}\n\t\telse if (defaultOpt)\n\t\t{\n\t\t\topt = defaultOpt;\n\t\t}\n\t\telse\n\t\t{\n\t\t\topt = options as AddCheckboxOptions;\n\t\t}\n\n\t\tconst flagOptions: AddCheckboxOptions = { ...opt };\n\n\t\t// Callback to update the original flags object\n\t\tflagOptions.callback = function (v: boolean)\n\t\t{\n\t\t\tflags[i] = v;\n\t\t};\n\n\t\tresult.push(that.addCheckbox(i, f[i], flagOptions));\n\t}\n\treturn result;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddFlags(flags: { [key: string]: boolean }, forceFlags?: { [key: string]: (boolean | undefined) }, options?: AddCheckboxOptions | AddFlagsOptions): InspectorCheckboxWidget[];\n\t}\n}\n\nInspector.prototype.addFlags = function (flags: { [key: string]: boolean }, forceFlags?: { [key: string]: (boolean | undefined) }, options?: AddCheckboxOptions | AddFlagsOptions): InspectorCheckboxWidget[]\n{\n\treturn AddFlags(this, flags, forceFlags, options);\n};\n\nInspector.widgetConstructors.flags = \"addFlags\";\n","import { LiteGUI } from \"../core\";\nimport { Inspector } from \"./inspector\";\nimport { CreateWidgetOptions, InspectorValue, InspectorWidget, WidgetChangeOptions } from \"../@types/Inspector\";\n\n/**\n * Options for configuring the Icon widget.\n * Extends universal widget options with icon-specific properties.\n */\nexport interface AddIconOptions extends CreateWidgetOptions, Omit<WidgetChangeOptions, 'callback'>\n{\n\t/**\n\t * URL of the image to use as the icon.\n\t */\n\timageURL?: string;\n\t/**\n\t * Size of the icon in pixels (width and height).\n\t */\n\tsize?: number;\n\t/**\n\t * X offset for the background position.\n\t */\n\tx?: number;\n\t/**\n\t * Index to calculate x offset (-index * width).\n\t */\n\tindex?: number;\n\t/**\n\t * If false, the icon acts as a momentary button (blinks) instead of a toggle.\n\t * @default true\n\t */\n\ttoggle?: boolean;\n\t/**\n\t * Callback function triggered when value changes.\n\t */\n\tcallback?: (value: boolean) => void;\n}\n\n/**\n * Interface representing the DOM element for an Icon widget.\n */\nexport interface InspectorIconWidget extends InspectorWidget\n{\n\t/**\n\t * Updates the value (state) of the icon.\n\t * @param {boolean} value New value (true for active/toggled).\n\t * @param {boolean} [skipEvent] If true, prevents triggering the change event.\n\t */\n\tsetValue: (value: InspectorValue, skipEvent?: boolean) => void;\n}\n\n\n/**\n * Adds an icon widget to the Inspector.\n * @function AddIcon\n * @param {Inspector} that The Inspector instance calling this function.\n * @param {string} [name] The name/label of the icon widget.\n * @param {boolean} [value] The initial toggle state of the icon.\n * @param {AddIconOptions} [options] Configuration options for the icon.\n * @returns {InspectorIconWidget} The created icon widget element.\n */\nexport function AddIcon(that: Inspector, name?: string,\n\tvalue?: boolean, options?: AddIconOptions): InspectorIconWidget\n{\n\tconst processedOptions = that.processOptions(options) as AddIconOptions;\n\n\t// Initialize defaults\n\tname = name ?? '';\n\tvalue = value ?? false;\n\tconst imgURL = processedOptions.imageURL ?? \"\";\n\tconst width = processedOptions.width ?? processedOptions.size ?? 20;\n\tconst height = processedOptions.height ?? processedOptions.size ?? 20;\n\n\t// Create widget structure\n\tconst element = that.createWidget(name, `<span class='icon' ${processedOptions.title ?\n\t\t`title='${processedOptions.title}'` : \"\"} tabIndex='${that.tabIndex}'></span>`,\n\tprocessedOptions) as InspectorIconWidget;\n\tthat.tabIndex++;\n\tconst content = element.querySelector(\"span.wcontent\") as HTMLElement;\n\tconst icon = element.querySelector(\"span.icon\") as HTMLElement;\n\n\t// Calculate background position\n\tlet x = processedOptions.x ?? 0;\n\tif (processedOptions.index) { x = processedOptions.index * -width; }\n\tconst y = value ? height : 0;\n\n\t// Apply styles to elements\n\telement.style.margin = \"0 2px\";\n\telement.style.padding = \"0\";\n\tcontent.style.margin = \"0\";\n\tcontent.style.padding = \"0\";\n\n\ticon.style.display = \"inline-block\";\n\ticon.style.cursor = \"pointer\";\n\ticon.style.width = `${width}px`;\n\ticon.style.height = `${height}px`;\n\tif (imgURL) { icon.style.backgroundImage = `url('${imgURL}')`; }\n\ticon.style.backgroundSize = \"contain\";\n\ticon.style.backgroundPosition = `${x}px ${y}px`;\n\n\t// Handle user interaction\n\ticon.addEventListener(\"mousedown\", (e: MouseEvent) =>\n\t{\n\t\te.preventDefault();\n\t\tvalue = !value;\n\t\tconst ret = that.onWidgetChange(element, name!, value, processedOptions as unknown as WidgetChangeOptions);\n\t\tLiteGUI.trigger(element, \"wclick\", value);\n\n\t\tif (ret !== undefined) { value = ret; }\n\n\t\tconst y = value ? height : 0;\n\t\ticon.style.backgroundPosition = `${x}px ${y}px`;\n\n\t\t// Momentary switch logic: blink and return to off state if toggle is false\n\t\tif (processedOptions.toggle === false)\n\t\t{\n\t\t\tsetTimeout(() =>\n\t\t\t{\n\t\t\t\ticon.style.backgroundPosition = `${x}px 0px`;\n\t\t\t\tvalue = false;\n\t\t\t}, 200);\n\t\t}\n\n\t});\n\tthat.appendWidget(element, options);\n\n\t// Define public methods\n\telement.setValue = (v: InspectorValue, skipEvent?: boolean) =>\n\t{\n\t\tif (v === undefined || typeof v !== 'boolean') { return; }\n\t\tvalue = v;\n\t\tconst y = value ? height : 0;\n\t\ticon.style.backgroundPosition = `${x}px ${y}px`;\n\t\tif (!skipEvent)\n\t\t{\n\t\t\tthat.onWidgetChange(element, name!, value, processedOptions as unknown as WidgetChangeOptions);\n\t\t}\n\t};\n\telement.getValue = function () { return value; };\n\tthat.processElement(element, processedOptions);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddIcon(name?: string, value?: boolean, options?: AddIconOptions): InspectorIconWidget;\n\t}\n}\n\nInspector.prototype.addIcon = function (name?: string, value?: boolean, options?: AddIconOptions): InspectorIconWidget\n{\n\treturn AddIcon(this, name, value, options);\n};\n\nInspector.widgetConstructors.icon = \"addIcon\";","export * from \"./inspector\";\nexport * from \"./string\";\nexport * from \"./button\";\nexport * from \"./checkbox\";\nexport * from \"./color\";\nexport * from \"./combo\";\nexport * from \"./file\";\nexport * from \"./flag\";\nexport * from \"./icon\";\nexport * from \"./info\";\nexport * from \"./list\";\nexport * from \"./number\";\nexport * from \"./pad\";\nexport * from \"./slider\";\nexport * from \"./stringButton\";\nexport * from \"./tags\";\nexport * from \"./textArea\";\nexport * from \"./vector\";\nexport * from \"./line\";\nexport * from \"./seperator\";\nexport * from \"./tree\";\nexport * from \"./dataTree\";\nexport * from \"./array\";\n","import { CreateWidgetOptions, InspectorActiveWidget, InspectorValue, WidgetChangeOptions } from \"../@types/Inspector\";\nimport { LiteGUI } from \"../core\";\nimport { Inspector } from \"./inspector\";\n\n\n/**\n * Options for creating an Info widget.\n */\nexport interface AddInfoOptions extends CreateWidgetOptions, Omit<WidgetChangeOptions, 'callback'>\n{\n\t/**\n\t * Callback function to execute when the widget is clicked.\n\t */\n\tcallback?: () => void;\n}\n\n/**\n * Interface representing the Info widget, which displays non-interactive HTML content.\n */\nexport interface InspectorInfoWidget extends InspectorActiveWidget\n{\n\t/**\n\t * Appends a node to the content area of the info widget.\n\t * @param {Node} e The node to append.\n\t */\n\tadd: (e: Node) => void;\n\n\t/**\n\t * Updates the HTML content of the info widget.\n\t * @param {string} [value] The new HTML string to display.\n\t */\n\tsetValue: (value?: InspectorValue) => void;\n\n\t/**\n\t * Scrolls the content area to the bottom.\n\t */\n\tscrollToBottom: () => void;\n}\n\n/**\n * Widget to show plain information in HTML (not interactive).\n * @function AddInfo\n *\n * @param {Inspector} that The inspector instance.\n * @param {string} [name] The label name for the widget.\n * @param {string} [value] The HTML content to display.\n * @param {AddInfoOptions} [options] Configuration options.\n * @returns {InspectorInfoWidget} The created widget element.\n */\nexport function AddInfo(that: Inspector, name?: string, value?: string, options?: AddInfoOptions): InspectorInfoWidget\n{\n\tvalue = value ?? '';\n\toptions = options ?? {};\n\n\t// Get unique identifier for the value and store it\n\tconst valueName = that.getValueName(name, options);\n\tthat.values.set(valueName, value);\n\n\tlet element: InspectorInfoWidget | undefined = undefined;\n\n\t// Create widget structure based on whether it has a label\n\tif (name !== undefined)\n\t{\n\t\telement = that.createWidget(name, value, options) as InspectorInfoWidget;\n\t}\n\telse\n\t{\n\t\telement = document.createElement(\"div\") as InspectorInfoWidget;\n\t\tif (options.className) { element.className = options.className; }\n\n\t\telement.innerHTML = `<span class='winfo'>${value}</span>`;\n\t}\n\n\tconst info: HTMLElement = element.querySelector(\".winfo\") ??\n\t\telement.querySelector(\".wcontent\") as HTMLElement;\n\n\tif (options.callback) { element.addEventListener(\"click\", options.callback.bind(element)); }\n\n\t// Method to update the displayed value and internal state\n\telement.setValue = function (v?: InspectorValue)\n\t{\n\t\tif (v === undefined || (typeof v !== 'string' && typeof v !== 'number' && typeof v !== 'boolean')) { return; }\n\t\tconst strVal = v.toString();\n\t\tif (info) { info.innerHTML = strVal; }\n\t\tthat.values.set(valueName, v);\n\t};\n\n\tlet content = element.querySelector(\"span.info_content\") as HTMLElement;\n\tif (!content) { content = element.querySelector(\".winfo\") as HTMLElement; }\n\telement.content = content;\n\n\t// Apply custom width if specified\n\tif (options.width)\n\t{\n\t\telement.style.width = LiteGUI.sizeToCSS(options.width) ?? '0';\n\t\telement.style.display = \"inline-block\";\n\t\tif (!name) { info.style.margin = \"2px\"; }\n\t}\n\n\t// Apply custom height if specified\n\tif (options.height)\n\t{\n\t\tcontent.style.height = LiteGUI.sizeToCSS(options.height) ?? '0';\n\t\tcontent.style.overflow = \"auto\";\n\t}\n\n\telement.scrollToBottom = function ()\n\t{\n\t\tcontent.scrollTop = content.offsetTop;\n\t};\n\n\telement.add = function (e: Node)\n\t{\n\t\tcontent.appendChild(e);\n\t};\n\n\telement.getValue = function ()\n\t{\n\t\treturn that.values.get(valueName);\n\t};\n\n\tthat.appendWidget(element, options);\n\tthat.processElement(element, options);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddInfo(name?: string, value?: string, options?: AddInfoOptions): InspectorInfoWidget;\n\t}\n}\n\nInspector.prototype.addInfo = function (name?: string, value?: string, options?: AddInfoOptions): InspectorInfoWidget\n{\n\treturn AddInfo(this, name, value, options);\n};\n\nInspector.widgetConstructors.info = \"addInfo\";","import type\n{\n\tHTMLDivElementOptions,\n\tInspectorSection,\n\tInspectorValue,\n\tInspectorWidget,\n\tInspectorWidgetTypes,\n\tGenericCreationOptions,\n\tAppendOptions,\n\tCreateWidgetOptions,\n\tProcessElementOptions,\n\tWidgetChangeOptions,\n\tInspectorOptions,\n\tPropertyOptions,\n\tBeginGroupOptions,\n\tAddTitleOptions,\n\tAddContainerOptions,\n\tInspectorContainer,\n\tInspectorGroupWidget\n} from \"../@types/Inspector\";\nimport\n{\n\tCloneInsides,\n\tPurgeElement,\n\tTrigger,\n\tSizeToCSS,\n\tCollectProperties,\n\tInstanceHolder,\n\tAssignValue\n} from \"../utilities\";\nimport { LiteGUIObject } from \"../@types/globals\";\n\n\n\n/**\n * Inspector class for creating property inspectors.\n * @class Inspector\n * @example\n * ```typescript\n * const inspector = new Inspector();\n * inspector.add(\"string\", \"Name\", \"unnamed\");\n * inspector.appendTo(document.body);\n * ```\n */\nexport class Inspector implements LiteGUIObject\n{\n\t/**\n\t * The root HTML element of the inspector.\n\t */\n\troot: HTMLDivElement;\n\t/**\n\t * List of sections within the inspector.\n\t */\n\tsections: InspectorSection[] = [];\n\t/**\n\t * Map of values managed by the inspector.\n\t */\n\tvalues: Map<string, InspectorValue> = new Map<string, InspectorValue>();\n\t/**\n\t * List of all widgets in the inspector.\n\t */\n\twidgets: InspectorWidget[] = [];\n\t/**\n\t * Map of widgets indexed by their name.\n\t */\n\twidgetsByName: Map<string, InspectorWidget> = new Map<string, InspectorWidget>();\n\t// Used to detect if element is even (cannot use CSS, special cases everywhere)\n\t/**\n\t * Internal row counter for styling even/odd rows.\n\t */\n\trowNumber: number = 0;\n\t/**\n\t * Width of the name column.\n\t */\n\tnameWidth?: number;\n\t/**\n\t * Default width for widgets.\n\t */\n\twidgetsWidth?: number;\n\t/**\n\t * Current tab index for accessibility.\n\t */\n\ttabIndex: number;\n\t/**\n\t * Callback triggered when any value in the inspector changes.\n\t */\n\tonChange?: (name?: string, value?: InspectorValue, element?: InspectorWidget) => void;\n\t/**\n\t * CSS class name for the root element.\n\t */\n\tclassName: string;\n\t/**\n\t * Number of widgets to display per row.\n\t */\n\twidgetsPerRow: number;\n\t/**\n\t * If true, displays the inspector in a single line.\n\t */\n\toneLine?: boolean | null = null;\n\t/**\n\t * The currently active section.\n\t */\n\tcurrentSection?: InspectorSection;\n\n\t/**\n\t * Stack of active containers.\n\t * @private\n\t */\n\tprivate _currentContainerStack: InspectorContainer[] = [];\n\n\t/**\n\t * The current container where widgets are appended.\n\t * @private\n\t */\n\tprivate _currentContainer?: InspectorContainer;\n\t/**\n\t * Callback triggered to refresh the inspector.\n\t */\n\tonRefresh?: () => void;\n\t/**\n\t * Hook called when a property is added.\n\t */\n\tonAddProperty?: (name: string, instance: unknown, varname: string | number, value: unknown, options?: unknown) => void;\n\t/**\n\t * Name of the inspector instance.\n\t */\n\tname: string = \"\";\n\t/**\n\t * Configuration options.\n\t */\n\toptions: InspectorOptions;\n\t/**\n\t * Height of the inspector.\n\t */\n\theight?: string | number;\n\t/**\n\t * Counter for generating unique names for empty widgets.\n\t */\n\temptyWidgetIndex: number = 0;\n\n\t/**\n\t * Creates an instance of the Inspector.\n\t * @param {InspectorOptions} [options] Configuration options.\n\t */\n\tconstructor(options?: InspectorOptions)\n\t{\n\t\tthis.options = options ?? {};\n\t\tconst root = document.createElement(\"DIV\") as HTMLDivElement;\n\t\tthis.root = root;\n\t\tthis.root.className = `inspector ${this.options.full ? \"full\" : \"\"}${this.options.className ?? \"\"}`;\n\t\tthis.root.id = this.options.id ?? \"\";\n\t\tif (this.options.oneLine)\n\t\t{\n\t\t\tthis.oneLine = true;\n\t\t\tthis.root.className += \" one_line\";\n\t\t}\n\n\t\tthis.addEmptyContainer({}); // Add empty container\n\t\tthis.tabIndex = Math.floor(Math.random() * 10000);\n\n\t\tif (this.options.width) { this.root.style.width = SizeToCSS(this.options.width)!.toString(); }\n\t\tif (this.options.height)\n\t\t{\n\t\t\tthis.root.style.height = SizeToCSS(this.options.height)!.toString();\n\t\t\tif (!this.options.oneLine) { this.root.style.overflow = \"auto\"; }\n\t\t}\n\n\t\tif (this.options.nameWidth) { this.nameWidth = this.options.nameWidth; }\n\t\tif (this.options.widgetsWidth) { this.widgetsWidth = this.options.widgetsWidth; }\n\n\t\tif (this.options.noscroll) { this.root.style.overflow = \"hidden\"; }\n\n\t\tif (this.options.onChange) { this.onChange = this.options.onChange; }\n\n\t\tif (this.options.parent) { this.appendTo(this.options.parent); }\n\n\t\tthis.className = this.root.className;\n\n\t\tthis.widgetsPerRow = this.options.widgetsPerRow || 1;\n\t}\n\n\t/**\n\t * Retrieves all values from the widgets in the inspector.\n\t * @returns {Map<string, InspectorValue>} A map of widget names to their values.\n\t */\n\tgetValues()\n\t{\n\t\tconst r = new Map<string, InspectorValue>();\n\t\tfor (const i in this.widgetsByName)\n\t\t{\n\t\t\tconst widget = this.widgetsByName.get(i);\n\t\t\tif (widget && widget.getValue)\n\t\t\t{\n\t\t\t\tconst w = widget.getValue();\n\t\t\t\t// If (!w) { continue; }\n\t\t\t\tr.set(i, w);\n\t\t\t}\n\t\t}\n\t\treturn r;\n\t}\n\n\t/**\n\t * Sets values for multiple widgets in the inspector.\n\t * @param {{ [key: string]: InspectorValue }} values An object where keys are widget names and values are the new values.\n\t */\n\tsetValues(values: { [key: string]: InspectorValue })\n\t{\n\t\tfor (const i in values)\n\t\t{\n\t\t\tconst widget = this.widgetsByName.get(i);\n\t\t\tif (widget && widget.setValue)\n\t\t\t{\n\t\t\t\twidget.setValue(values[i]);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Appends the inspector to a parent element.\n\t * @param {HTMLElement | string} parent The parent element or its selector string.\n\t * @param {boolean} [atFront] If true, inserts the inspector at the beginning of the parent.\n\t */\n\tappendTo(parent?: HTMLElement | string, atFront?: boolean)\n\t{\n\t\tif (!parent) { return; }\n\n\t\tif (typeof parent === 'string')\n\t\t{\n\t\t\tparent = document.querySelector(parent) as HTMLElement;\n\t\t\tif (!parent) { return; }\n\t\t}\n\n\t\tif (atFront)\n\t\t{\n\t\t\tparent.insertBefore(this.root, parent.firstChild);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tparent.appendChild(this.root);\n\t\t}\n\t}\n\n\t/**\n\t * Removes all the widgets inside the inspector\n\t */\n\tclear()\n\t{\n\t\tPurgeElement(this.root);\n\n\t\twhile (this.root.hasChildNodes())\n\t\t{\n\t\t\tthis.root.removeChild(this.root.lastChild!);\n\t\t}\n\n\t\tthis.root.className = this.className;\n\n\t\tthis.rowNumber = 0;\n\t\tthis.values.clear();\n\t\tthis.widgets = [];\n\t\tthis.widgetsByName.clear();\n\t\tthis.sections = [];\n\t\tthis.currentSection = undefined;\n\t\tthis._currentContainer = undefined;\n\t\tthis._currentContainerStack = [];\n\t\tthis.addEmptyContainer();\n\t}\n\n\t/**\n\t * Tries to refresh (calls on_refresh)\n\t */\n\trefresh()\n\t{\n\t\tif (this.onRefresh)\n\t\t{\n\t\t\tthis.onRefresh();\n\t\t}\n\t}\n\n\t/**\n\t * Append widget to this inspector\n\t * @param {InspectorWidget} widget The widget to append.\n\t * @param {AppendOptions} options Configuration options for appending.\n\t */\n\tappendWidget(widget: InspectorWidget, options?: AppendOptions)\n\t{\n\t\toptions = options ?? {};\n\n\t\tconst root = options.widgetParent ?? this._currentContainer ?? this.root;\n\n\t\tif (options.replace && options.replace.parentNode)\n\t\t{\n\t\t\toptions.replace.parentNode.replaceChild(widget, options.replace);\n\t\t}\n\t\telse\n\t\t{\n\t\t\twidget.section = this.currentSection;\n\t\t\troot.appendChild(widget);\n\t\t}\n\t}\n\n\t/**\n\t * Pushes a container onto the stack, making it the current active container for new widgets.\n\t * @param {InspectorContainer} container The container element to push.\n\t */\n\tpushContainer(container: InspectorContainer)\n\t{\n\t\tif (!this._currentContainerStack)\n\t\t{\n\t\t\tthis._currentContainerStack = [container];\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (this._currentContainerStack.indexOf(container) != -1)\n\t\t\t{\n\t\t\t\tconsole.warn(\"Container already in the stack\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._currentContainerStack.push(container);\n\t\t}\n\n\t\tthis._currentContainer = container;\n\t}\n\n\t/**\n\t * Checks if a container is currently in the stack.\n\t * @param {InspectorContainer} container The container to check.\n\t * @returns {boolean} True if the container is in the stack.\n\t */\n\tisContainerInStack(container: InspectorContainer)\n\t{\n\t\tif (!this._currentContainerStack) { return false; }\n\t\tif (this._currentContainerStack.indexOf(container) != -1) { return true; }\n\t\treturn false;\n\t}\n\n\t/**\n\t * Pops a container from the stack, reverting to the previous container.\n\t * @param {HTMLElement} [container] Optional specific container to pop up to.\n\t */\n\tpopContainer(container?: HTMLElement)\n\t{\n\t\tthis.rowNumber = 0;\n\t\tif (this._currentContainerStack && this._currentContainerStack.length)\n\t\t{\n\t\t\tif (container)\n\t\t\t{\n\t\t\t\tlet aux = this._currentContainerStack.pop();\n\t\t\t\twhile (aux && aux != container)\n\t\t\t\t{ aux = this._currentContainerStack.pop(); }\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis._currentContainerStack.pop();\n\t\t\t}\n\t\t\tthis._currentContainer = this._currentContainerStack[this._currentContainerStack.length - 1];\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis._currentContainer = undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Configures the inspector with a list of widget creation options.\n\t * @param {GenericCreationOptions[]} info Array of widget configuration objects.\n\t */\n\tsetup(info: GenericCreationOptions[])\n\t{\n\t\tfor (const i in info)\n\t\t{\n\t\t\tconst widgetOptions = info[i];\n\t\t\tthis.add(widgetOptions.type, widgetOptions.name, widgetOptions.value, widgetOptions.options);\n\t\t}\n\t}\n\n\t/**\n\t * Returns the widget given the name.\n\t * @param {string | number} name The name of the widget supplied when creating it or the index of the widget.\n\t * @returns {InspectorWidget | undefined} The widget object or undefined if not found.\n\t */\n\tgetWidget(name: string | number)\n\t{\n\t\tif (name.constructor === Number)\n\t\t{\n\t\t\treturn this.widgets[name];\n\t\t}\n\t\treturn this.widgetsByName.get(name as string);\n\t}\n\n\t/**\n\t * Inspects an instance and creates widgets for its properties.\n\t * @param {unknown} instance The instance that you want to inspect, attributes will be collected from this object.\n\t * @param {{[key:string]: unknown}} [properties] An object with all the names of the properties you want to inspect.\n\t *\t\t If not specified then it calls getProperties, otherwise collect them and tries to guess the type.\n\t * @param {{ [key: string]: unknown }} [propertiesInfoExample] It overwrites the info about properties found in the object (in case the automatically guessed type is wrong).\n\t * @param {string[]} [skipProperties] This properties will be ignored.\n\t */\n\tinspectInstance(instance: Record<string, unknown>, properties?: Record<string, unknown>,\n\t\tpropertiesInfoExample?: Record<string, unknown>, skipProperties?: string[])\n\t{\n\t\tif (!instance) { return; }\n\n\t\tconst inst = instance as Record<string, unknown>;\n\n\t\tif (!properties)\n\t\t{\n\t\t\tconst instWithGetProperties = instance as { getProperties?: () => Record<string, unknown> };\n\t\t\tif (instWithGetProperties.getProperties)\n\t\t\t{\n\t\t\t\tproperties = instWithGetProperties.getProperties();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tproperties = CollectProperties(instance);\n\t\t\t}\n\t\t}\n\n\t\tconst classObject = inst.constructor;\n\t\tif (!propertiesInfoExample && classObject && \"properties\" in classObject)\n\t\t{\n\t\t\tpropertiesInfoExample = classObject.properties as Record<string, unknown>;\n\t\t}\n\n\t\t/*\n\t\t * Properties info contains name:type for every property\n\t\t * Must be cloned to ensure there is no overlap between widgets reusing the same container\n\t\t */\n\t\tlet propertiesValues: Record<string, unknown> = {};\n\n\t\tif (\"getInspectorProperties\" in instance && typeof instance.getInspectorProperties === \"function\")\n\t\t{\n\t\t\tpropertiesValues = instance.getInspectorProperties();\n\t\t}\n\t\telse if (properties)\n\t\t{\n\t\t\t// Add to propertiesInfo the ones that are not specified\n\t\t\tfor (const i in properties)\n\t\t\t{\n\t\t\t\tif (propertiesInfoExample && propertiesInfoExample[i])\n\t\t\t\t{\n\t\t\t\t\t// Clone\n\t\t\t\t\tpropertiesValues[i] = CloneInsides(propertiesInfoExample[i] as Record<string, unknown>);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst value = properties[i];\n\t\t\t\tif (classObject && (\"@\" + i) in classObject) // Guess from class object info\n\t\t\t\t{\n\t\t\t\t\tconst sharedOptions = (classObject as unknown as Record<string, unknown>)[\"@\" + i] as Record<string, unknown>;\n\t\t\t\t\tif (sharedOptions && \"widget\" in sharedOptions && !sharedOptions.widget) { continue; } // Skip\n\t\t\t\t\tpropertiesValues[i] = CloneInsides(sharedOptions);\n\t\t\t\t}\n\t\t\t\telse if (instance[\"@\" + i]) // Guess from instance info\n\t\t\t\t{\n\t\t\t\t\tpropertiesValues[i] = instance[\"@\" + i];\n\t\t\t\t}\n\t\t\t\telse if (i === null || i === undefined) // Are you sure?\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tswitch (typeof value)\n\t\t\t\t\t{\n\t\t\t\t\tcase 'number': propertiesValues[i] = { type: \"number\", step: 0.1 } as GenericCreationOptions; break;\n\t\t\t\t\tcase 'string': propertiesValues[i] = { type: \"string\" }; break;\n\t\t\t\t\tcase 'boolean': propertiesValues[i] = { type: \"boolean\" }; break;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (value && Array.isArray(value)) // Array or typed_array\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconst isNumber = (value[0] && typeof value[0] === \"number\");\n\t\t\t\t\t\t\tswitch ((value as Array<unknown>).length)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcase 2: propertiesValues[i] = { type: isNumber ? \"vec2\" : \"array\", step: 0.1 } as GenericCreationOptions; break;\n\t\t\t\t\t\t\tcase 3: propertiesValues[i] = { type: isNumber ? \"vec3\" : \"array\", step: 0.1 } as GenericCreationOptions; break;\n\t\t\t\t\t\t\tcase 4: propertiesValues[i] = { type: isNumber ? \"vec4\" : \"array\", step: 0.1 } as GenericCreationOptions; break;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tpropertiesValues[i] = { type: \"array\" };\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (skipProperties)\n\t\t{\n\t\t\tfor (const i in skipProperties)\n\t\t\t{\n\t\t\t\tpropertiesValues[skipProperties[i] as keyof typeof propertiesValues] = undefined;\n\t\t\t}\n\t\t}\n\n\t\t// Allows to establish the order of the properties in the inspector\n\t\tif (classObject && \"properties_order\" in classObject)\n\t\t{\n\t\t\tconst propertiesOrder = classObject.properties_order as string[];\n\t\t\tconst sortedProperties: Record<string, unknown> = {};\n\t\t\tfor (const i in propertiesOrder)\n\t\t\t{\n\t\t\t\tconst name = propertiesOrder[i];\n\t\t\t\tif (propertiesValues[name])\n\t\t\t\t{\n\t\t\t\t\tsortedProperties[name] = propertiesValues[name];\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tconsole.warn(\"property not found in instance:\", name);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const i in propertiesValues) // Add the missing ones at the end (should this be optional?)\n\t\t\t{\n\t\t\t\tif (!sortedProperties[i])\n\t\t\t\t{\n\t\t\t\t\tsortedProperties[i] = propertiesValues[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\tpropertiesValues = sortedProperties;\n\t\t}\n\n\n\t\t// ShowAttributes doesn't return anything but just in case...\n\t\treturn this.showProperties(instance, propertiesValues as Record<string, GenericCreationOptions | undefined>);\n\t}\n\n\t/**\n\t * Adds the widgets for the properties specified in the info of instance, it will create callback and onUpdate.\n\t * @param {any} instance The instance that you want to inspect.\n\t * @param {{[key:string]:GenericCreationOptions|undefined}} info Object containing \"property name\" :{ type: value, widget:..., min:..., max:... } or just \"property\":\"type\".\n\t * @param {string[]} [skipProperties] These properties will be ignored.\n\t */\n\tshowProperties(instance: Record<string, unknown>, info: { [key: string]: GenericCreationOptions | undefined }, skipProperties?: string[])\n\t{\n\t\t// For every enumerable property create widget\n\t\tfor (const i in info)\n\t\t{\n\t\t\tlet varname = i;\n\t\t\tif (skipProperties && skipProperties.includes(varname))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!info[i])\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst options: PropertyOptions = info[i]!;\n\n\t\t\tif (options.name)\n\t\t\t{\n\t\t\t\toptions.varname = i;\n\t\t\t\tvarname = options.name;\n\t\t\t\tif (skipProperties && skipProperties.includes(varname))\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!options.callback) // Generate default callback to modify data\n\t\t\t{\n\t\t\t\tconst o: InstanceHolder = { instance: instance, name: varname, options: options as Record<string, unknown> };\n\t\t\t\tif (options.type != \"function\") { options.callback = AssignValue.bind(o) as (v?: unknown, e?: Event) => void; }\n\t\t\t}\n\t\t\tif (!options.onUpdate) // Generate default refresh\n\t\t\t{\n\t\t\t\tconst o: InstanceHolder = { instance: instance, name: varname };\n\t\t\t\toptions.onUpdate = function ()\n\t\t\t\t{\n\t\t\t\t\treturn o.instance[o.name];\n\t\t\t\t};\n\t\t\t}\n\n\t\t\toptions.instance = instance;\n\n\t\t\tconst type = (options.widget as string) || options.type || \"string\";\n\n\t\t\t// Used to hook stuff on special occasions\n\t\t\tif (this.onAddProperty)\n\t\t\t{\n\t\t\t\tthis.onAddProperty(type, instance, varname, instance[varname], options);\n\t\t\t}\n\t\t\tthis.add(type, varname, instance[varname] as InspectorValue, options);\n\t\t}\n\n\t\t// Extra widgets inserted by the object (stored in the constructor)\n\t\tif (\"widgets\" in instance.constructor)\n\t\t{\n\t\t\tconst widgets = instance.constructor.widgets as Record<string, unknown>;\n\t\t\tfor (const i in widgets)\n\t\t\t{\n\t\t\t\tconst w = widgets[i] as Record<string, unknown>;\n\t\t\t\tthis.add(w.widget as string, w.name as string, w.value as InspectorValue, w as PropertyOptions);\n\t\t\t}\n\t\t}\n\n\t\t// Used to add extra widgets at the end\n\t\tif (\"onShowProperties\" in instance && typeof instance.onShowProperties === \"function\")\n\t\t{\n\t\t\tinstance.onShowProperties(this);\n\t\t}\n\t\tif (\"onShowProperties\" in instance.constructor &&\n\t\t\ttypeof instance.constructor.onShowProperties === \"function\")\n\t\t{\n\t\t\tinstance.constructor.onShowProperties(instance, this);\n\t\t}\n\t}\n\n\t/**\n\t * Used by all widgets to create the container of one widget.\n\t * @param {string} [name] The string to show at the left side of the widget, if null this element wont be created and the value part will use the full width.\n\t * @param {string | number | boolean | HTMLElement} [content] The string with the html of the elements that conform the interactive part of the widget.\n\t * @param {CreateWidgetOptions} [options] Some generic options that any widget could have:\n\t * - widgetName: the name used to store this widget in the widgetsByName container, if omitted the parameter name is used\n\t * - width: the width of the widget (if omitted it will use the Inspector widgetsWidth, otherwise 100%\n\t * - nameWidth: the width of the name part of the widget, if not specified it will use Inspector nameWidth, otherwise css default\n\t * - contentWidth: the width of the widget content area\n\t * - preTitle: string to append to the left side of the name, this is helpful if you want to add icons with behaviour when clicked\n\t * - title: string or string[] to replace the name, sometimes you want to supply a different name than the one you want to show (this is helpful to retrieve values from an inspector)\n\t * @returns {InspectorWidget} The created widget element.\n\t */\n\tcreateWidget(name?: string, content?: string | number | boolean | HTMLElement,\n\t\toptions?: CreateWidgetOptions): InspectorWidget\n\t{\n\t\toptions = options ?? {};\n\t\tcontent = content ?? \"\";\n\t\tconst element = document.createElement(\"DIV\") as InspectorWidget;\n\t\telement.className = \"widget \" + (options.className ?? \"\");\n\t\telement.inspector = this;\n\t\telement.options = options;\n\t\telement.name = (typeof name === \"string\" && !name.includes(\"_EMPTY_\")) ? name : undefined;\n\n\t\tthis.rowNumber += this.widgetsPerRow;\n\t\tif (this.rowNumber % 2 == 0) { element.className += \" even\"; }\n\n\t\tconst width = options.width ?? this.widgetsWidth;\n\t\tif (width)\n\t\t{\n\t\t\tconst cssWidth = SizeToCSS(width);\n\t\t\tif (cssWidth)\n\t\t\t{\n\t\t\t\telement.style.width = cssWidth.toString();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\telement.style.width = `calc(${SizeToCSS(width)})`;\n\t\t\t}\n\t\t\telement.style.minWidth = \"auto\";\n\t\t}\n\t\tconst height = options.height ?? this.height;\n\t\tif (height)\n\t\t{\n\t\t\tconst cssHeight = SizeToCSS(height);\n\t\t\tif (cssHeight)\n\t\t\t{\n\t\t\t\telement.style.height = cssHeight.toString();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\telement.style.height = `calc(${SizeToCSS(height)})`;\n\t\t\t}\n\t\t\telement.style.minHeight = \"auto\";\n\t\t}\n\n\t\t// Store widgets\n\t\tthis.widgets.push(element);\n\t\tif (options.widgetName || name)\n\t\t{\n\t\t\tthis.widgetsByName.set(options.widgetName ?? name ?? '', element);\n\t\t}\n\n\t\tif (this.widgetsPerRow != 1)\n\t\t{\n\t\t\tif (!options.width) { element.style.width = (100 / this.widgetsPerRow).toFixed(2) + \"%\"; }\n\t\t\telement.style.display = \"inline-block\";\n\t\t}\n\n\t\tlet nameWidth = \"\";\n\t\tlet contentWidth = \"\";\n\t\tif ((name !== undefined && name !== null) && (this.nameWidth || options.nameWidth) && !this.oneLine)\n\t\t{\n\t\t\tconst w = SizeToCSS(options.nameWidth ?? this.nameWidth ?? undefined);\n\t\t\tnameWidth = `style='width: calc(${w} - 0px); width: -webkit-calc(${w} - 0px); width: -moz-calc(${w} - 0px); '`; // Hack\n\t\t\tcontentWidth = `style='width: calc( 100% - ${w}); width: -webkit-calc(100% - ${w}); width: -moz-calc( 100% - ${w}); '`;\n\t\t}\n\n\t\tif (options.nameWidth) { nameWidth = `style='width: ${SizeToCSS(options.nameWidth)} '`; }\n\t\tif (options.contentWidth) { contentWidth = `style='width: ${SizeToCSS(options.contentWidth)} '`; }\n\n\t\tlet code = \"\";\n\t\tlet content_class = \"wcontent \";\n\t\tif (name === null || name === undefined)\n\t\t{\n\t\t\tcontent_class += \" full\";\n\t\t}\n\t\telse\n\t\t{\n\t\t\tlet preTitle = \"\";\n\t\t\tif (options.preTitle) { preTitle = options.preTitle; }\n\n\t\t\tlet title: string | string[] = name;\n\t\t\tif (options.title) { title = options.title; }\n\n\t\t\tconst filling = this.oneLine ? \"\" : \"<span class='filling'></span>\";\n\t\t\tif (name === \"\")\n\t\t\t{\n\t\t\t\tcode += `<span class='wname' title='${title}' ${nameWidth}>${preTitle}</span>`;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tcode += `<span class='wname' title='${title}' ${nameWidth}>${preTitle}${name}${filling}</span>`;\n\t\t\t}\n\t\t}\n\n\t\tconst contentType = typeof content;\n\t\tswitch (contentType)\n\t\t{\n\t\tcase \"string\":\n\t\tcase \"number\":\n\t\tcase \"boolean\":\n\t\t\telement.innerHTML = `${code}<span class='info_content ${content_class}' ${contentWidth}>${content}</span>`;\n\t\t\tbreak;\n\t\tdefault:\n\t\t{\n\t\t\telement.innerHTML = `${code}<span class='info_content ${content_class}' ${contentWidth}></span>`;\n\t\t\tconst contentElement = element.querySelector(\"span.info_content\");\n\t\t\tif (contentElement) { contentElement.appendChild(content as HTMLElement); }\n\t\t\tbreak;\n\t\t}\n\t\t}\n\n\t\telement.content = element.querySelector<HTMLElement>(\"span.info_content\") ?? undefined;\n\t\telement.remove = function ()\n\t\t{\n\t\t\tif (this.parentNode) { this.parentNode.removeChild(this); }\n\t\t};\n\n\t\treturn element;\n\t}\n\n\t/**\n\t * Internal method called when a widget's value changes.\n\t * Handles callbacks, events, and value updates.\n\t * @param {InspectorWidget} element The widget element.\n\t * @param {string} name The name of the value/widget.\n\t * @param {InspectorValue} value The new value.\n\t * @param {WidgetChangeOptions} options Options containing callbacks.\n\t * @param {boolean} [expand_value] If true and value is array, spreads arguments applied to callback.\n\t * @param {Event} [event] The original event that triggered the change.\n\t * @returns {any} The result of the callback.\n\t */\n\tonWidgetChange(element: InspectorWidget, name: string, value: InspectorValue, options: WidgetChangeOptions, expand_value?: boolean, event?: Event)\n\t{\n\t\tconst section = element.section; // This.current_section\n\n\t\tif (!options.skipWChange)\n\t\t{\n\t\t\tif (section) { Trigger(section, \"wbeforechange\", value); }\n\t\t\tTrigger(element, \"wbeforechange\", value);\n\t\t}\n\n\t\t// Assign and launch callbacks\n\t\tthis.values.set(name, value);\n\t\tlet r = undefined;\n\t\tif (options.callback)\n\t\t{\n\t\t\tif (expand_value && Array.isArray(value))\n\t\t\t{\n\t\t\t\tconst callback = options.callback as (...args: InspectorValue[]) => void;\n\t\t\t\tr = callback.apply(element, value);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tconst callback = options.callback as (value: InspectorValue, e?: Event) => void;\n\t\t\t\tr = callback.call(element, value, event);\n\t\t\t}\n\t\t}\n\n\t\tif (!options.skipWChange)\n\t\t{\n\t\t\tif (section) { Trigger(section, \"wchange\", value); }\n\t\t\tTrigger(element, \"wchange\", value);\n\t\t}\n\n\t\tif (this.onChange) { this.onChange(name, value, element); }\n\t\treturn r;\n\t}\n\n\t/**\n\t * Resolves the proper name for a value/widget, generating a unique one if missing.\n\t * @param {string} [widgetName] The proposed name.\n\t * @param {GenericCreationOptions} [options] Options potentially containing a widget_name.\n\t * @returns {string} The resolved name.\n\t */\n\tgetValueName(widgetName?: string, options?: GenericCreationOptions): string\n\t{\n\t\toptions = options ?? {};\n\t\tif (widgetName === undefined && options.widgetName === undefined)\n\t\t{\n\t\t\twidgetName = `_EMPTY_NAME_WIDGET_${this.emptyWidgetIndex++}`;\n\t\t}\n\t\treturn widgetName ?? options.widgetName!;\n\t}\n\n\t/**\n\t * Registry of available widget constructors.\n\t * Maps widget type strings to function names or instances.\n\t */\n\tpublic static widgetConstructors: {\n [key: string]: string |\n ((name?: string, value?: InspectorValue, options?: CreateWidgetOptions) => InspectorWidget)\n } =\n\t\t\t{\n\t\t\t\t\"null\": 'doNothing',\n\t\t\t\t\"undefined\": 'doNothing',\n\t\t\t\ttitle: 'addTitle',\n\t\t\t};\n\n\t/**\n\t * Registers a new custom widget type.\n\t * @param {string} name The type name of the widget.\n\t * @param {string | Function} constructor The constructor function or method name.\n\t */\n\tpublic static registerWidget(name: string, constructor: string |\n ((name?: string, value?: InspectorValue, options?: CreateWidgetOptions) => InspectorWidget))\n\t{\n\t\tInspector.widgetConstructors[name.toLowerCase()] = constructor;\n\t}\n\n\t/**\n\t * Unregisters a widget type.\n\t * @param {string} name The type name of the widget to unregister.\n\t */\n\tpublic static unregisterWidget(name: string)\n\t{\n\t\tif (Inspector.widgetConstructors[name.toLowerCase()])\n\t\t{\n\t\t\tdelete Inspector.widgetConstructors[name.toLowerCase()];\n\t\t}\n\t}\n\n\t/**\n\t * Adds a widget to the inspector, its a way to provide the widget type from a string.\n\t * @param {InspectorWidgetTypes | string} [type] String specifying the name of the widget to use (check Inspector.widget_constructors for a complete list).\n\t * @param {string} [name] The string to show at the left side of the widget, if null this element wont be created and the value part will use the full width.\n\t * @param {InspectorValue} [value] The value to assign to the widget.\n\t * @param {GenericCreationOptions} [options] Some generic options that any widget could have:\n\t * - type: overwrites the type\n\t * - callback: function to call when the user interacts with the widget and changes the value\n\t * [For a bigger list check createWidget and every widget in particular]\n\t * @returns {InspectorWidget | undefined} The widget in the form of the DOM element that contains it.\n\t */\n\tadd(type?: InspectorWidgetTypes | string, name?: string, value?: InspectorValue, options?: GenericCreationOptions): InspectorWidget | undefined\n\t{\n\t\toptions = options ?? {};\n\t\tif (options.type) { type = options.type; }\n\t\tif (options.name) { name = options.name; }\n\t\tif (options.value) { value = options.value; }\n\n\t\tlet func: string | ((name?: string, value?: InspectorValue, options?: CreateWidgetOptions) => InspectorWidget) | undefined =\n Inspector.widgetConstructors[type?.toLowerCase() ?? 'null'];\n\t\tif (!func)\n\t\t{\n\t\t\tconsole.warn(\"LiteGUI.Inspector: Widget not found: \" + type);\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof func === 'string')\n\t\t{\n\t\t\tconst protoMethod = Inspector.prototype[func as keyof Inspector] as ((name?: string, value?: InspectorValue, options?: CreateWidgetOptions) => InspectorWidget) | undefined;\n\t\t\tif (!protoMethod)\n\t\t\t{\n\t\t\t\tconsole.warn(\"LiteGUI.Inspector: Widget method not found:\", func);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfunc = protoMethod;\n\t\t}\n\n\t\tif (typeof (func) !== 'function')\n\t\t{\n\t\t\tconsole.warn(\"LiteGUI.Inspector: Widget method not found or not a function:\", type, func);\n\t\t\treturn;\n\t\t}\n\t\telse if (typeof (func) === 'function')\n\t\t{\n\t\t\treturn func.call(this, name, value, options);\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\n\t/**\n\t * Retrieves the value of a specific widget by name.\n\t * @param {string} name The name of the widget.\n\t * @returns {InspectorValue} The value of the widget.\n\t */\n\tgetValue(name: string): InspectorValue\n\t{\n\t\treturn this.values.get(name);\n\t}\n\n\t/**\n\t * Applies standard options (id, classes, style) to a container element.\n\t * @param {HTMLDivElement} element The DOM element to modify.\n\t * @param {HTMLDivElementOptions} options The options containing id, className, width, height, etc.\n\t */\n\tapplyOptions(element: HTMLDivElement, options: HTMLDivElementOptions)\n\t{\n\t\tif (!element || !options) { return; }\n\n\t\tif (options.className) { element.className += \" \" + options.className; }\n\t\tif (options.id) { element.id = options.id; }\n\t\tif (options.width) { element.style.width = SizeToCSS(options.width) ?? '0px'; }\n\t\tif (options.height) { element.style.height = SizeToCSS(options.height) ?? '0px'; }\n\t}\n\n\t/**\n\t * Helper method that does nothing. Used as a placeholder for invalid widget types.\n\t * @private\n\t * @returns {undefined} Always returns undefined.\n\t */\n\tprivate _doNothing()\n\t{\n\t\treturn undefined;\n\t}\n\n\t//* **** Containers ********/\n\t/**\n\t * Creates an empty container but does not set it as the active stack container.\n\t * @param {AddContainerOptions} [options] Configuration options.\n\t * @returns {InspectorContainer} The created container element.\n\t */\n\taddEmptyContainer(options?: AddContainerOptions)\n\t{\n\t\toptions = options ?? {};\n\t\tconst element = this.startContainer(options);\n\t\tthis.endContainer();\n\t\treturn element;\n\t}\n\n\t/**\n\t * Creates a new container and sets it as the active container for subsequent widgets.\n\t * @param {AddContainerOptions} options Configuration options.\n\t * @returns {InspectorContainer} The created container element.\n\t */\n\tstartContainer(options: AddContainerOptions)\n\t{\n\t\tconst element = document.createElement(\"DIV\") as InspectorContainer;\n\t\telement.className = \"wcontainer\";\n\t\tthis.applyOptions(element, options);\n\t\tthis.rowNumber = 0;\n\n\t\tthis.appendWidget(element);\n\t\tthis.pushContainer(element);\n\n\t\tif (options.widgetPerRow)\n\t\t{\n\t\t\tthis.widgetsPerRow = options.widgetPerRow;\n\t\t}\n\n\t\tif (options.height)\n\t\t{\n\t\t\telement.style.height = SizeToCSS(options.height) ?? '0px';\n\t\t\telement.style.overflow = \"auto\";\n\t\t}\n\n\t\telement.refresh = function ()\n\t\t{\n\t\t\tif (element.onRefresh) { element.onRefresh.call(this, element); }\n\t\t};\n\n\t\treturn element;\n\t}\n\n\t/**\n\t * Closes the current container and pops it from the stack.\n\t */\n\tendContainer()\n\t{\n\t\tthis.popContainer();\n\t}\n\n\t/**\n\t * Adds a collapsible section to the inspector. Sections cannot be nested inside containers, but they contain a container.\n\t * @param {string} [name] Title of the section.\n\t * @param {InspectorOptions} [options] Configuration options for the section.\n\t * @returns {InspectorSection} The created section element.\n\t */\n\taddSection(name?: string, options?: InspectorOptions): InspectorSection\n\t{\n\t\tif (options == undefined) { options = {}; }\n\t\tif (this.currentSection) { this.currentSection.end(); }\n\n\t\tconst element = document.createElement(\"DIV\") as InspectorSection;\n\t\telement.className = \"wsection\";\n\t\tif (!name) { element.className += \" notitle\"; }\n\t\tif (options.className)\n\t\t{\n\t\t\telement.className += \" \" + options.className;\n\t\t}\n\t\tif (options.collapsed && !options.noCollapse)\n\t\t{\n\t\t\telement.className += \" collapsed\";\n\t\t}\n\n\t\tif (options.id)\n\t\t{\n\t\t\telement.id = options.id ?? \"\";\n\t\t}\n\t\tif (options.instance)\n\t\t{\n\t\t\telement.instance = options.instance ?? {};\n\t\t}\n\n\t\tlet code = \"\";\n\t\tif (name)\n\t\t{\n\t\t\tcode += `<div class='wsectiontitle'>${options.noCollapse ? \"\" :\n\t\t\t\t\"<span class='switch-section-button'></span>\"}${name}</div>`;\n\t\t}\n\t\tcode += \"<div class='wsectioncontent'></div>\";\n\t\telement.innerHTML = code;\n\n\t\t// Append to inspector\n\t\telement.lastContainerStack = this._currentContainerStack.concat();\n\t\t// This.appendWidget( element ); //sections are added to the root, not to the current container\n\t\tthis.root.appendChild(element);\n\t\tthis.sections.push(element);\n\n\t\telement.sectionTitle = element.querySelector(\".wsectiontitle\")!;\n\n\t\tif (name && !options.noCollapse)\n\t\t{\n\t\t\telement.sectionTitle?.addEventListener(\"click\", (e: Event) =>\n\t\t\t{\n\t\t\t\tif ((e.target as HTMLElement).localName == \"button\") { return; }\n\t\t\t\telement.classList.toggle(\"collapsed\");\n\t\t\t\tconst seccont: HTMLElement = element.querySelector(\".wsectioncontent\")!;\n\t\t\t\tseccont.style.display = seccont.style.display === \"none\" ? \"\" : \"none\";\n\t\t\t\tif (options.callback)\n\t\t\t\t{\n\t\t\t\t\toptions.callback.call(element, element.classList.contains(\"collapsed\"));\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (options.collapsed && !options.noCollapse)\n\t\t{\n\t\t\tconst seccont: HTMLElement = element.querySelector(\".wsectioncontent\")!;\n\t\t\tseccont.style.display = \"none\";\n\t\t}\n\n\t\tthis.setCurrentSection(element);\n\n\t\tif (options.widgetsPerRow)\n\t\t{\n\t\t\tthis.widgetsPerRow = options.widgetsPerRow;\n\t\t}\n\n\t\telement.refresh = function ()\n\t\t{\n\t\t\tif (element.onRefresh)\n\t\t\t{\n\t\t\t\telement.onRefresh.call(this, element);\n\t\t\t}\n\t\t};\n\n\t\telement.end = () =>\n\t\t{\n\t\t\tif (this.currentSection != element) { return; }\n\n\t\t\tthis._currentContainerStack = element.lastContainerStack!;\n\t\t\tthis._currentContainer = undefined;\n\n\t\t\tconst content = element.querySelector(\".wsectioncontent\") as InspectorContainer;\n\t\t\tif (!content) { return; }\n\t\t\tif (this.isContainerInStack(content)) { this.popContainer(content); }\n\t\t\tthis.currentSection = undefined;\n\t\t};\n\n\t\treturn element;\n\t}\n\n\t/**\n\t * Changes the current active section to the specified one.\n\t * @param {InspectorSection} section The section to make active.\n\t */\n\tsetCurrentSection(section: InspectorSection)\n\t{\n\t\tif (this.currentSection == section) { return; }\n\n\t\tthis.currentSection = section;\n\n\t\tconst parent = section.parentNode as HTMLElement;\n\t\tif (!parent) { return; }\n\t\tthis.popContainer(parent); // Go back till that container\n\n\t\tconst content = section.querySelector(\".wsectioncontent\") as InspectorContainer;\n\t\tif (!content) { return; }\n\t\tthis.pushContainer(content);\n\t}\n\n\t/**\n\t * Retrieves the currently active section.\n\t * @returns {HTMLElement | null} The section element or null if no section is active.\n\t */\n\tgetCurrentSection()\n\t{\n\t\tfor (let i = this._currentContainerStack.length - 1; i >= 0; --i)\n\t\t{\n\t\t\tconst container = this._currentContainerStack[i];\n\t\t\tif (container.classList.contains(\"wsectioncontent\"))\n\t\t\t{ return container.parentNode; }\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t * Ends the current section, popping it from the stack.\n\t */\n\tendCurrentSection()\n\t{\n\t\tif (this.currentSection) { this.currentSection.end(); }\n\t}\n\n\t/**\n\t * Begins a new group of widgets. Groups provide a visual grouping and can be collapsed.\n\t * @param {string} [name] The title of the group.\n\t * @param {BeginGroupOptions} [options] Configuration options.\n\t * @returns {InspectorGroupWidget} The group element.\n\t */\n\tbeginGroup(name?: string, options?: BeginGroupOptions)\n\t{\n\t\tconst element = document.createElement(\"DIV\") as InspectorGroupWidget;\n\t\telement.className = \"wgroup\";\n\t\tname = name ?? \"\";\n\t\toptions = options ?? {};\n\t\telement.innerHTML = `<div class='wgroupheader ${options.title ? \"wtitle\" : \"\"}'><span class='switch-section-button'></span>${name}</div>`;\n\t\telement.group = true;\n\n\t\tconst content = document.createElement(\"DIV\") as InspectorContainer;\n\t\tcontent.className = \"wgroupcontent\";\n\t\tif (options.collapsed) { content.style.display = \"none\"; }\n\n\t\tif (options.height) { content.style.height = SizeToCSS(options.height)!; }\n\t\tif (options.scrollable) { content.style.overflow = \"auto\"; }\n\n\t\telement.appendChild(content);\n\n\t\tlet collapsed = options.collapsed ?? false;\n\t\tconst header = element.querySelector(\".wgroupheader\") as HTMLElement;\n\t\tif (!header) { throw new Error(\"Header not found\"); }\n\t\tif (collapsed) { header.classList.add(\"collapsed\"); }\n\t\theader.addEventListener(\"click\", (e: Event) =>\n\t\t{\n\t\t\tconst style = (element.querySelector(\".wgroupcontent\") as HTMLElement).style;\n\t\t\tstyle.display = style.display === \"none\" ? \"\" : \"none\";\n\t\t\tcollapsed = !collapsed;\n\t\t\tif (collapsed)\n\t\t\t{\n header!.classList.add(\"collapsed\");\n\t\t\t}\n\t\t\telse\n\t\t\t{\n header!.classList.remove(\"collapsed\");\n\t\t\t}\n\t\t\te.preventDefault();\n\t\t});\n\n\t\tthis.appendWidget(element, options);\n\t\tthis.pushContainer(content);\n\t\treturn element;\n\t}\n\n\t/**\n\t * Ends the current group, popping it from the stack.\n\t */\n\tendGroup()\n\t{\n\t\tdo\n\t\t{\n\t\t\tthis.popContainer();\n\t\t}\n\t\twhile (this._currentContainer && !this._currentContainer.classList.contains(\"wgroupcontent\"));\n\t}\n\n\t/**\n\t * Creates a title bar in the widgets list to help separate widgets.\n\t * @param {string} title The text to display in the title.\n\t * @param {AddTitleOptions} [options] Configuration options.\n\t * @returns {HTMLDivElement} The title widget element.\n\t */\n\taddTitle(title: string, options?: AddTitleOptions)\n\t{\n\t\toptions = this.processOptions(options);\n\t\tconst element = document.createElement(\"DIV\") as InspectorWidget;\n\t\tlet code = `<span class='wtitle'><span class='text'>${title}</span>`;\n\t\tif (options.help)\n\t\t{\n\t\t\tcode += `<span class='help'><div class='help-content'>${options.help}</div></span>`;\n\t\t}\n\t\tcode += \"</span>\";\n\t\telement.innerHTML = code;\n\t\telement.setValue = function (v: InspectorValue)\n\t\t{\n\t\t\tif (typeof v !== 'string') { return; }\n\t\t\tconst tempo = this.querySelector(\".text\");\n\t\t\tif (tempo) {tempo.innerHTML = v;}\n\t\t};\n\t\tthis.rowNumber = 0;\n\t\tthis.appendWidget(element, options);\n\t\treturn element;\n\t}\n\n\t/**\n\t * Scrolls the inspector to show the element with the specified ID.\n\t * @param {string} id The ID of the element to scroll to.\n\t */\n\tscrollTo(id: string)\n\t{\n\t\tconst element = this.root.querySelector(`#${id}`) as HTMLElement;\n\t\tif (!element) { return; }\n\t\tconst top = this.root.offsetTop;\n\t\tconst delta = element.offsetTop - top;\n\t\tif (!this.root.parentNode?.parentNode) { return; }\n\t\t(this.root.parentNode.parentNode as HTMLElement).scrollTop = delta;\n\t}\n\n\t/**\n\t * Processes options, ensuring they are in an object format.\n\t * @param {Record<string, unknown> | (...args: unknown[]) => unknown} options The options to process.\n\t * @returns {Record<string, unknown>} The processed options object.\n\t */\n\tprocessOptions(options?: object | ((...args: unknown[]) => unknown)): object\n\t{\n\t\treturn typeof options === 'function' ? { callback: options } : options ?? {};\n\t}\n\n\t/**\n\t * Processes a widget element, applying update hooks if provided.\n\t * @param {InspectorWidget} element The widget element.\n\t * @param {ProcessElementOptions} options Options containing update hooks.\n\t */\n\tprocessElement(element: InspectorWidget, options: ProcessElementOptions)\n\t{\n\t\tif (options.onUpdate && element.setValue)\n\t\t{\n\t\t\telement.onWidgetUpdate = function ()\n\t\t\t{\n element.setValue!(options.onUpdate?.call(element) as InspectorValue, true);\n\t\t\t};\n\t\t}\n\t}\n\n\t/**\n\t * Updates all widgets that have an onWidgetUpdate hook.\n\t */\n\tupdateWidgets()\n\t{\n\t\tfor (let i = 0; i < this.widgets.length; ++i)\n\t\t{\n\t\t\tconst widget = this.widgets[i];\n\t\t\tif (widget.onWidgetUpdate) { widget.onWidgetUpdate(widget); }\n\t\t}\n\t}\n\n\t/**\n\t * Helper to parse a color array into a styled HTML string.\n\t * @param {[number, number, number, number]} color The color array [r, g, b, a].\n\t * @returns {string} The styled HTML string representing the color.\n\t */\n\tpublic static parseColor(color: [number, number, number, number])\n\t{\n\t\treturn \"<span style='color: #FAAAA'>\" + color[0].toFixed(2) +\n \"</span>,<span style='color: #AFAAA'>\" + color[1].toFixed(2) +\n \"</span>,<span style='color: #AAFAA'>\" + color[2].toFixed(2) +\n \"</span>,<span style='color: #AAAAF'>\" + color[3].toFixed(2) + \"</span>\";\n\t}\n}","import { LiteGUI } from \"../core\";\nimport { Inspector } from \"./inspector\";\nimport { LineEditor, LineEditorElement, LineEditorOptions } from \"../widgets\";\nimport { InspectorWidget, WidgetChangeOptions } from \"../@types/Inspector\";\n\n/**\n * Adds a line editor widget to the inspector with the specified name, value, and options.\n * @function AddLine\n *\n * @param {Inspector} that - The reference to the inspector\n * @param {string} name - The name of the line widget.\n * @param {number[][]} value - The initial value of the file input widget.\n * @param {LineEditorOptions} [options] - The options for the file input widget.\n * @returns The created file input widget element.\n */\nexport function AddLineEditor(that: Inspector, name: string, value: number[][], options: LineEditorOptions)\n{\n\tthat.values.set(name, value);\n\n\tconst element = that.createWidget(name, \"<span class='line-editor'></span>\", options);\n\telement.style.width = \"100%\";\n\n\tconst lineEditor: LineEditor = new LineEditor(value, options);\n\tconst lineEditorSpan: HTMLElement | null = element.querySelector(\"span.line-editor\");\n\tlineEditorSpan?.appendChild(lineEditor.root);\n\n\tLiteGUI.bind(lineEditor, \"change\", (e: Event) =>\n\t{\n\t\tconst target = e.target as LineEditorElement;\n\t\tLiteGUI.trigger(element, \"wbeforechange\", target.valuesArray);\n\t\tif (options.callback) { options.callback.call(element, target.valuesArray, e); }\n\t\tLiteGUI.trigger(element, \"wchange\", target.valuesArray);\n\t\tthat.onWidgetChange(element, name, target.valuesArray, options as unknown as WidgetChangeOptions);\n\t});\n\n\tthat.appendWidget(element, options);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddLineEditor(name: string, value: number[][], options?: LineEditorOptions): InspectorWidget;\n\t}\n}\n\nInspector.prototype.addLineEditor = function (name: string, value: number[][], options?: LineEditorOptions): InspectorWidget\n{\n\treturn AddLineEditor(this, name, value, options ?? {});\n};\n\nInspector.widgetConstructors.line = \"addLineEditor\";","import { CreateWidgetOptions, InspectorActiveWidget, InspectorValue, WidgetChangeOptions } from \"../@types/Inspector\";\nimport { LiteGUI } from \"../core\";\nimport { Inspector } from \"./inspector\";\n\n/**\n * Options for creating a List widget.\n */\nexport interface AddListOptions extends CreateWidgetOptions, Omit<WidgetChangeOptions, 'callback'>\n{\n\t/**\n\t * Height of the list in pixels.\n\t */\n\theight?: number;\n\t/**\n\t * Whether the list is disabled.\n\t * @default false\n\t */\n\tdisabled?: boolean;\n\t/**\n\t * Allow multiple items to be selected.\n\t * @default false\n\t */\n\tmultiSelection?: boolean;\n\t/**\n\t * The initially selected item value.\n\t */\n\tselected?: string;\n\t/**\n\t * Callback function to execute when an item is double-clicked.\n\t */\n\tonDoubleClick?: (value: string) => void;\n}\n\n/**\n * Represents an item in the list.\n */\nexport interface ListItemOptions\n{\n\t/**\n\t * Content to display for the item (can be HTML).\n\t */\n\tcontent: string;\n\t/**\n\t * Title tooltip for the item.\n\t */\n\ttitle: string;\n\t/**\n\t * Unique name/identifier for the item.\n\t */\n\tname: string;\n\t/**\n\t * Inline CSS styles for the item.\n\t */\n\tstyle: string;\n\t/**\n\t * URL of an icon to display with the item.\n\t */\n\ticon: string;\n\t/**\n\t * Whether the item is selected.\n\t */\n\tselected: boolean;\n}\n\n/**\n * Interface representing the List widget.\n */\nexport interface InspectorListWidget extends InspectorActiveWidget\n{\n\t/**\n\t * Adds a new item to the list.\n\t * @param {string} value The value/name of the item.\n\t * @param {boolean} selected Whether the item should be selected.\n\t */\n\taddItem: (value: string, selected: boolean) => void;\n\t/**\n\t * Removes an item from the list by name.\n\t * @param {string} value The value/name of the item to remove.\n\t */\n\tremoveItem: (value: string) => void;\n\t/**\n\t * Updates the entire list of items.\n\t * @param {string[]} new_values Array of new item values.\n\t * @param {string} [item_selected] The value of the item to select.\n\t */\n\tupdateItems: (new_values: string[], item_selected?: string) => void;\n\t/**\n\t * Retrieves the currently selected items.\n\t * @returns {string[]} Array of selected item names.\n\t */\n\tgetSelected: () => string[];\n\t/**\n\t * Gets the list item element by its index.\n\t * @param {number} index The index of the item.\n\t * @returns {HTMLElement} The list item element.\n\t */\n\tgetByIndex: (index: number) => HTMLElement;\n\t/**\n\t * Selects an item by its index.\n\t * @param {number} index The index of the item to select.\n\t * @param {boolean} [add_to_selection] If true, adds to existing selection instead of replacing it.\n\t * @returns {HTMLElement} The selected list item element.\n\t */\n\tselectIndex: (index: number, add_to_selection?: boolean) => HTMLElement;\n\t/**\n\t * Deselects an item by its index.\n\t * @param {number} index The index of the item to deselect.\n\t * @returns {HTMLElement} The deselected list item element.\n\t */\n\tdeselectIndex: (index: number) => HTMLElement;\n\t/**\n\t * Scrolls the list to ensure the item at the specified index is visible.\n\t * @param {number} index The index of the item to scroll to.\n\t */\n\tscrollToIndex: (index: number) => void;\n\t/**\n\t * Selects all items in the list.\n\t */\n\tselectAll: () => void;\n\t/**\n\t * Deselects all items in the list.\n\t */\n\tdeselectAll: () => void;\n\t/**\n\t * Sets the values (items) of the list.\n\t * @param {string[]} value Array of item values.\n\t */\n\tsetValue: (value: InspectorValue) => void;\n\t/**\n\t * Returns the number of items in the list.\n\t */\n\tgetNumberOfItems: () => void;\n\t/**\n\t * Filters the list items based on a callback or string match.\n\t * @param {string | ((value: number, item: HTMLElement, selected: boolean) => boolean)} [callback] filter string or callback function.\n\t * @param {boolean} [case_sensitive] Whether the string filter is case sensitive.\n\t */\n\tfilter: (callback?: string |\n\t\t((value: number, item: HTMLElement, selected: boolean) => boolean),\n\t\tcase_sensitive?: boolean) => void;\n\t/**\n\t * Selects items that match a filter callback.\n\t * @param {(value: number, item: HTMLElement, selected: boolean) => boolean} callback Function to determine if an item should be selected.\n\t */\n\tselectByFilter: (callback: ((value: number, item: HTMLElement, selected: boolean) => boolean)) => void;\n}\n\n\n/**\n * Widget to select from a list of items.\n * @function AddList\n * @param {Inspector} that The inspector instance.\n * @param {string} [name] The name of the widget.\n * @param {string[]} [values] Array of string values for the list items.\n * @param {AddListOptions} [options] Configuration options.\n * @returns {InspectorListWidget} The created list widget element.\n */\nexport function AddList(that: Inspector, name?: string, values?: string[], options?: AddListOptions): InspectorListWidget\n{\n\tvalues = values ?? [];\n\toptions = options ?? {};\n\tconst valueName = that.getValueName(name, options);\n\n\tlet listHeight = \"\";\n\tif (options.height) { listHeight = \"style='height: 100%; overflow: auto;'\"; }\n\n\tconst code = `<ul class='lite-list' ${listHeight} tabIndex='${that.tabIndex}'><ul>`;\n\tthat.tabIndex++;\n\n\tconst element = that.createWidget(name, `<span class='inputfield full ${options.disabled ?\n\t\t\"disabled\" : \"\"}' style='height: 100%;'>${code}</span>`, options) as InspectorListWidget;\n\n\tconst infoContent = element.querySelector(\".info_content\") as HTMLElement;\n\tinfoContent.style.height = \"100%\";\n\n\telement.querySelector(\".lite-list\");\n\tconst inputField = element.querySelector(\".inputfield\") as HTMLInputElement;\n\tinputField.style.height = \"100%\";\n\tinputField.style.paddingBottom = \"0.2em\";\n\n\tconst ul_elements = element.querySelectorAll(\"ul\");\n\n\tconst _onKey = function (e: KeyboardEvent)\n\t{\n\t\tconst selected = element.querySelector(\"li.selected\") as HTMLLIElement;\n\t\tif (!selected) { return; }\n\n\t\tif (e.code == 'Enter') // Intro\n\t\t{\n\t\t\tif (!selected) { return; }\n\t\t\tlet pos: string | number | undefined = selected.dataset[\"pos\"];\n\t\t\tif (pos == undefined) { return; }\n\t\t\tpos = typeof pos == \"string\" ? parseFloat(pos) : 0;\n\t\t\tconst value = values![pos];\n\t\t\tif (options!.onDoubleClick) { options!.onDoubleClick.call(that, value); }\n\t\t}\n\t\telse if (e.code == 'ArrowDown') // Arrow down\n\t\t{\n\t\t\tconst next = selected.nextSibling;\n\t\t\tif (next) { LiteGUI.trigger(next, \"click\"); }\n\t\t\tselected.scrollIntoView({ block: \"end\", behavior: \"smooth\" });\n\t\t}\n\t\telse if (e.code == 'ArrowUp') // Arrow up\n\t\t{\n\t\t\tconst prev = selected.previousSibling;\n\t\t\tif (prev) { LiteGUI.trigger(prev, \"click\"); }\n\t\t\tselected.scrollIntoView({ block: \"end\", behavior: \"smooth\" });\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\treturn true;\n\t};\n\tconst _onItemClick = (e: MouseEvent): void =>\n\t{\n\t\tconst el = e.target as HTMLLIElement;\n\t\tif (options!.multiSelection)\n\t\t{\n\t\t\tel.classList.toggle(\"selected\");\n\t\t}\n\t\telse\n\t\t{\n\t\t\tconst lis = element.querySelectorAll(\"li\");\n\t\t\tfor (let i = 0; i < lis.length; ++i)\n\t\t\t{\n\t\t\t\tlis[i].classList.remove(\"selected\");\n\t\t\t}\n\t\t\tel.classList.add(\"selected\");\n\t\t}\n\n\t\tlet pos: string | number | undefined = el.dataset[\"pos\"];\n\t\tif (pos == undefined) { return; }\n\t\tpos = typeof pos == \"string\" ? parseFloat(pos) : 0;\n\t\tconst value = values![pos];\n\t\tthat.onWidgetChange(element, valueName, value, options);\n\t\tLiteGUI.trigger(element, \"wadded\", value);\n\t};\n\tconst _onItemDblClick = function (e: MouseEvent)\n\t{\n\t\tconst el = e.target as HTMLLIElement;\n\t\tlet pos: string | number | undefined = el.dataset[\"pos\"];\n\t\tif (pos == undefined) { return; }\n\t\tpos = typeof pos == \"string\" ? parseFloat(pos) : 0;\n\t\tconst value = values![pos];\n\t\tif (options!.onDoubleClick) { options!.onDoubleClick.call(that, value); }\n\t};\n\tconst _focusCallback = function ()\n\t{\n\t\tdocument.addEventListener(\"keydown\", _onKey, true);\n\t};\n\tconst _blurCallback = function ()\n\t{\n\t\tdocument.removeEventListener(\"keydown\", _onKey, true);\n\t};\n\n\tfor (let i = 0; i < ul_elements.length; ++i)\n\t{\n\t\tconst ul = ul_elements[i];\n\t\tul.addEventListener(\"focus\", _focusCallback);\n\t\tul.addEventListener(\"blur\", _blurCallback);\n\t}\n\n\n\telement.updateItems = function (newValues: string[], itemSelected?: string)\n\t{\n\t\titemSelected = itemSelected ?? options!.selected;\n\t\tif (!itemSelected && newValues.length > 0)\n\t\t{\n\t\t\titemSelected = newValues[0] ?? '';\n\t\t}\n\t\tvalues = newValues;\n\t\tconst ul = this.querySelector(\"ul\") as HTMLElement;\n\t\tul.innerHTML = \"\";\n\n\t\tif (values)\n\t\t{\n\t\t\tfor (const i in values)\n\t\t\t{\n\t\t\t\tconst liElement = _insertItem(values[i], itemSelected == values[i] ? true : false, i);\n\t\t\t\tul.appendChild(liElement);\n\t\t\t}\n\t\t}\n\n\t\tconst li = ul.querySelectorAll(\"li\");\n\t\tLiteGUI.bind(li, \"click\", { handleEvent: _onItemClick });\n\t};\n\n\tfunction _insertItem(value: string | number | ListItemOptions, selected: boolean, index?: string)\n\t{\n\t\tconst itemIndex = index; // To reference it\n\t\tlet itemTitle = \"\"; // To show in the list\n\n\t\tlet itemStyle = null;\n\t\tlet icon = \"\";\n\n\t\tif (typeof value === \"string\" || typeof value === \"number\")\n\t\t{\n\t\t\titemTitle = value.toString();\n\t\t}\n\t\telse\n\t\t{\n\t\t\titemTitle = value.content ?? value.title ?? value.name ?? index;\n\t\t\titemStyle = value.style;\n\t\t\tif (value.icon) { icon = `<img src='${value.icon}' class='icon' /> `; }\n\t\t\tif (value.selected) { selected = true; }\n\t\t}\n\n\n\t\tlet itemName = itemTitle;\n\t\titemName = itemName.replace(/<(?:.|\\n)*?>/gm, ''); // Remove html tags that could break the html\n\n\t\tconst liItem = document.createElement(\"li\");\n\t\tliItem.classList.add(`item-${LiteGUI.safeName(itemIndex ?? \"\")}`);\n\t\tif (selected) { liItem.classList.add('selected'); }\n\t\tliItem.dataset[\"name\"] = itemName;\n\t\tliItem.dataset[\"pos\"] = itemIndex;\n\t\tliItem.value = (value as number);\n\t\tif (itemStyle) { liItem.setAttribute(\"style\", itemStyle); }\n\t\tliItem.innerHTML = icon + itemTitle;\n\t\tliItem.addEventListener(\"click\", _onItemClick);\n\t\tif (options!.onDoubleClick)\n\t\t{\n\t\t\tliItem.addEventListener(\"dblclick\", _onItemDblClick);\n\t\t}\n\t\treturn liItem;\n\t}\n\n\telement.addItem = function (value: string, selected: boolean)\n\t{\n\t\tvalues!.push(value);\n\t\tconst ul = this.querySelector(\"ul\") as HTMLElement;\n\t\tconst liElement = _insertItem(value, selected);\n\t\tul.appendChild(liElement);\n\t};\n\n\telement.removeItem = function (name: string)\n\t{\n\t\tconst items = element.querySelectorAll(\".wcontent li\") as NodeListOf<HTMLLIElement>;\n\t\tfor (let i = 0; i < items.length; i++)\n\t\t{\n\t\t\tif (items[i].dataset[\"name\"] == name)\n\t\t\t{\n\t\t\t\tLiteGUI.remove(items[i]);\n\t\t\t}\n\t\t}\n\t};\n\n\telement.updateItems(values, options.selected);\n\tthat.appendWidget(element, options);\n\n\telement.getSelected = function ()\n\t{\n\t\tconst r: string[] = [];\n\t\tconst selected = this.querySelectorAll(\"ul li.selected\") as NodeListOf<HTMLLIElement>;\n\t\tfor (let i = 0; i < selected.length; ++i)\n\t\t{\n\t\t\tr.push(selected[i].dataset[\"name\"] as string);\n\t\t}\n\t\treturn r;\n\t};\n\n\telement.getByIndex = function (index: number)\n\t{\n\t\tconst items = this.querySelectorAll(\"ul li\") as NodeListOf<HTMLLIElement>;\n\t\treturn items[index] as HTMLElement;\n\t};\n\n\telement.selectIndex = function (num: number, add_to_selection?: boolean)\n\t{\n\t\tconst items = this.querySelectorAll(\"ul li\") as NodeListOf<HTMLLIElement>;\n\t\tfor (let i = 0; i < items.length; ++i)\n\t\t{\n\t\t\tconst item = items[i];\n\t\t\tif (i == num)\n\t\t\t{\n\t\t\t\titem.classList.add(\"selected\");\n\t\t\t}\n\t\t\telse if (!add_to_selection)\n\t\t\t{\n\t\t\t\titem.classList.remove(\"selected\");\n\t\t\t}\n\t\t}\n\t\treturn items[num];\n\t};\n\n\telement.deselectIndex = function (num: number)\n\t{\n\t\tconst items = this.querySelectorAll(\"ul li\") as NodeListOf<HTMLLIElement>;\n\t\tconst item = items[num];\n\t\tif (item) { item.classList.remove(\"selected\"); }\n\t\treturn item;\n\t};\n\n\telement.scrollToIndex = function (num: number)\n\t{\n\t\tconst items = this.querySelectorAll(\"ul li\") as NodeListOf<HTMLLIElement>;\n\t\tconst item = items[num];\n\t\tif (!item) { return; }\n\t\tthis.scrollTop = item.offsetTop;\n\t};\n\n\telement.selectAll = function ()\n\t{\n\t\tconst items = this.querySelectorAll(\"ul li\");\n\t\tfor (let i = 0; i < items.length; ++i)\n\t\t{\n\t\t\tconst item = items[i];\n\t\t\tif (item.classList.contains(\"selected\")) { continue; }\n\t\t\tLiteGUI.trigger(item, \"click\");\n\t\t}\n\t};\n\n\telement.deselectAll = function ()\n\t{\n\t\tconst items = this.querySelectorAll(\"ul li\");\n\t\tfor (let i = 0; i < items.length; ++i)\n\t\t{\n\t\t\tconst item = items[i];\n\t\t\tif (!item.classList.contains(\"selected\")) { continue; }\n\t\t\tLiteGUI.trigger(item, \"click\");\n\t\t}\n\t};\n\n\telement.setValue = function (v: InspectorValue)\n\t{\n\t\tif (v === undefined || !Array.isArray(v)) { return; }\n\t\tthis.updateItems(v as string[]);\n\t};\n\n\telement.getNumberOfItems = function ()\n\t{\n\t\tconst items = this.querySelectorAll(\"ul li\");\n\t\treturn items.length;\n\t};\n\n\telement.filter = function (callback?: string |\n\t\t((value: number, item: HTMLElement, selected: boolean) => boolean),\n\tcaseSensitive?: boolean)\n\t{\n\t\tconst items = this.querySelectorAll(\"ul li\") as NodeListOf<HTMLLIElement>;\n\t\tlet useString = false;\n\t\tlet onStringChange: ((value: string, item: HTMLElement, selected: boolean) => boolean) | undefined = undefined;\n\n\t\tif (typeof callback == 'string')\n\t\t{\n\t\t\tconst needle = callback;\n\t\t\tif (caseSensitive) { needle.toLowerCase(); }\n\t\t\tuseString = true;\n\t\t\tonStringChange = function (v: string) { return ((caseSensitive ? v : v.toLowerCase()).indexOf(needle) != -1); };\n\t\t}\n\n\t\tfor (let i = 0; i < items.length; ++i)\n\t\t{\n\t\t\tconst item = items[i];\n\t\t\tif (callback == undefined)\n\t\t\t{\n\t\t\t\titem.style.display = \"\";\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet value: number | string = item.value;\n\t\t\tif (useString && typeof value !== \"string\" && onStringChange)\n\t\t\t{\n\t\t\t\tvalue = item.innerHTML;\n\t\t\t\tif (!onStringChange(value, item, item.classList.contains(\"selected\")))\n\t\t\t\t{\n\t\t\t\t\titem.style.display = \"none\";\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\titem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (typeof callback != \"string\")\n\t\t\t{\n\t\t\t\tif (!callback(value, item, item.classList.contains(\"selected\")))\n\t\t\t\t{\n\t\t\t\t\titem.style.display = \"none\";\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\titem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\telement.selectByFilter = function (callback: ((value: number, item: HTMLElement, selected: boolean) => boolean))\n\t{\n\t\tconst items = this.querySelectorAll(\"ul li\") as NodeListOf<HTMLLIElement>;\n\t\tfor (let i = 0; i < items.length; ++i)\n\t\t{\n\t\t\tconst item = items[i];\n\t\t\tconst r = callback(item.value, item, item.classList.contains(\"selected\"));\n\t\t\tif (r === true)\n\t\t\t{\n\t\t\t\titem.classList.add(\"selected\");\n\t\t\t}\n\t\t\telse if (r === false)\n\t\t\t{\n\t\t\t\titem.classList.remove(\"selected\");\n\t\t\t}\n\t\t}\n\t};\n\n\t// Ensure the initial selected value is stored in the inspector\n\tconst initialSelection = element.getSelected();\n\tif (initialSelection.length > 0)\n\t{\n\t\tif (options.multiSelection)\n\t\t{\n\t\t\tthat.values.set(valueName, initialSelection);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthat.values.set(valueName, initialSelection[0]);\n\t\t}\n\t}\n\n\tif (options.height) { element.scrollTop = 0; }\n\tthat.processElement(element, options);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddList(name?: string, values?: string[], options?: AddListOptions): InspectorListWidget;\n\t}\n}\n\nInspector.prototype.addList = function (name?: string, values?: string[], options?: AddListOptions): InspectorListWidget\n{\n\treturn AddList(this, name, values, options);\n};\n\nInspector.widgetConstructors.list = \"addList\";","import { Inspector } from \"./inspector\";\nimport { Dragger, DraggerOptions } from \"../dragger\";\nimport { CreateWidgetOptions, WidgetChangeOptions, InspectorActiveWidget, InspectorValue } from \"../@types/Inspector\";\nimport { FocusElement, Trigger } from \"../utilities\";\n\n/**\n * Options for creating a Number widget.\n */\nexport interface AddNumberOptions extends CreateWidgetOptions, DraggerOptions, Omit<WidgetChangeOptions, 'callback'>\n{\n\t/**\n\t * Tab index for the input element.\n\t */\n\ttabIndex?: number;\n\t/**\n\t * CSS class to apply to the widget.\n\t */\n\textraClass?: string;\n\t/**\n\t * Whether to use full number width.\n\t */\n\tfullNumWidth?: boolean;\n\t/**\n\t * Number of digits after the decimal point.\n\t */\n\tprecision?: number;\n\t/**\n\t * Step value for incrementing/decrementing.\n\t */\n\tstep?: number;\n\t/**\n\t * Unit string to display after the number (e.g. \"px\", \"%\").\n\t */\n\tunits?: string;\n\t/**\n\t * Whether the widget is disabled.\n\t */\n\tdisabled?: boolean;\n\t/**\n\t * Callback function triggered when the value changes visually.\n\t */\n\tonChange?: (value: number) => number | void;\n\t/**\n\t * Callback function triggered after the value changes logically.\n\t */\n\tcallback?: (value: number) => void;\n\t/**\n\t * Callback function triggered before the value changes (on start dragging).\n\t */\n\tpreCallback?: () => void;\n}\n\n/**\n * Interface representing the Number widget.\n */\nexport interface InspectorNumberWidget extends InspectorActiveWidget\n{\n\t/**\n\t * Reference to the internal Dragger instance.\n\t */\n\tdragger: Dragger;\n\t/**\n\t * Sets the valid range for the number.\n\t * @param {number} min Minimum value.\n\t * @param {number} max Maximum value.\n\t */\n\tsetRange: (min: number, max: number) => void;\n\t/**\n\t * Sets the value of the widget.\n\t * @param {number | string} [value] The new value.\n\t * @param {boolean} [skipEvent] If true, change event is not triggered.\n\t */\n\tsetValue: (value?: InspectorValue, skipEvent?: boolean) => void;\n}\n\n/**\n * Widget to edit numbers (it adds a dragging mini widget in the right side).\n * @function AddNumber\n * @param {Inspector} that The inspector instance.\n * @param {string | undefined} name The name of the widget.\n * @param {number | undefined} value The initial value.\n * @param {AddNumberOptions | undefined} options Configuration options.\n * @returns {InspectorNumberWidget} The created number widget element.\n */\nexport function AddNumber(that: Inspector, name?: string, value?: number, options?: AddNumberOptions): InspectorNumberWidget\n{\n\tvalue = value ?? 0;\n\toptions = options ?? {};\n\tconst valueName = that.getValueName(name, options);\n\tthat.values.set(valueName, value);\n\n\tconst element = that.createWidget(name, \"\", options) as InspectorNumberWidget;\n\tthat.appendWidget(element, options);\n\n\toptions.extraClass = \"full\";\n\toptions.tabIndex = that.tabIndex;\n\toptions.fullNumWidth = true;\n\toptions.precision = options.precision ?? 2;\n\toptions.step = options.step ?? (options.precision == 0 ? 1 : 0.1);\n\n\tthat.tabIndex++;\n\n\tconst dragger = new Dragger(value, options);\n\tdragger.root.style.width = \"calc( 100% - 1px )\";\n\telement.querySelector(\".wcontent\")!.appendChild(dragger.root);\n\n\tconst _preChange = function (options: AddNumberOptions)\n\t{\n\t\tif (options.preCallback) { options.preCallback.call(element); }\n\t};\n\tdragger.root.addEventListener(\"start_dragging\", _preChange.bind(undefined, options));\n\telement.dragger = dragger;\n\n\tif (options.disabled) { dragger.input.setAttribute(\"disabled\", \"disabled\"); }\n\n\tconst input = element.querySelector(\"input\") as HTMLInputElement;\n\tinput.addEventListener(\"change\", (e: Event) =>\n\t{\n\t\tconst el = e.target as HTMLInputElement;\n\t\tTrigger(element, \"wbeforechange\", el.value);\n\n\t\tthat.values.set(valueName, el.value);\n\t\tif (options == undefined || typeof (options) == \"function\") { return; }\n\t\tif (options.onChange && dragger.dragging)\n\t\t{\n\t\t\tconst ret = options.onChange.call(element, parseFloat(el.value));\n\t\t\tif (typeof (ret) == \"number\") { el.value = ret.toString(); }\n\t\t}\n\t\telse if ((options.onChange || options.callback) && !dragger.dragging)\n\t\t{\n\t\t\tlet ret = undefined;\n\t\t\tif (options.callback)\n\t\t\t{\n\t\t\t\tret = options.callback.call(element, parseFloat(el.value));\n\t\t\t}\n\t\t\telse if (options.onChange)\n\t\t\t{\n\t\t\t\tret = options.onChange.call(element, parseFloat(el.value));\n\t\t\t}\n\t\t\tif (typeof (ret) == \"number\") { el.value = ret.toString(); }\n\t\t}\n\t\tTrigger(element, \"wchange\", el.value);\n\t\tif (that.onChange) { that.onChange(valueName, el.value, element); }\n\t});\n\n\tdragger.root.addEventListener(\"stop_dragging\", () =>\n\t{\n\t\tTrigger(input, \"change\");\n\t});\n\n\telement.setValue = function (value?: InspectorValue, skipEvent?: boolean)\n\t{\n\t\tif (options == undefined || typeof options == \"function\") { return; }\n\t\tif (value === undefined || (typeof value !== 'number' && typeof value !== 'string')) { return; }\n\n\t\tlet numValue = (typeof value === 'string') ? parseFloat(value) : value;\n\t\tif (options.precision) { numValue = parseFloat(numValue.toFixed(options.precision)); }\n\t\tlet strValue = numValue.toString();\n\t\tstrValue += options.units ?? '';\n\t\tif (input.value == strValue) { return; }\n\t\tinput.value = strValue;\n\t\tif (!skipEvent) { Trigger(input, \"change\"); }\n\t};\n\n\telement.setRange = function (min: number, max: number) { dragger.setRange(min, max); };\n\telement.getValue = function () { return parseFloat(input.value); };\n\telement.focus = function () { FocusElement(input); };\n\telement.disable = function () { input.disabled = true; };\n\telement.enable = function () { input.disabled = false; };\n\tthat.processElement(element, options);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddNumber(name?: string, value?: number, options?: AddNumberOptions): InspectorNumberWidget;\n\t}\n}\n\nInspector.prototype.addNumber = function (name?: string, value?: number, options?: AddNumberOptions): InspectorNumberWidget\n{\n\treturn AddNumber(this, name, value, options);\n};\n\nInspector.widgetConstructors.number = \"addNumber\";","import { LiteGUI } from \"../core\";\nimport { Inspector } from \"./inspector\";\nimport { CreateWidgetOptions, InspectorActiveWidget, InspectorValue, WidgetChangeOptions } from \"../@types/Inspector\";\nimport { DraggerOptions } from \"../dragger\";\n\n/**\n * Options for creating a Pad widget.\n */\nexport interface AddPadOptions extends CreateWidgetOptions, DraggerOptions, Omit<WidgetChangeOptions, 'callback'>\n{\n\t/**\n\t * Minimum value for both axes (shorthand).\n\t */\n\tmin?: number;\n\t/**\n\t * Maximum value for both axes (shorthand).\n\t */\n\tmax?: number;\n\t/**\n\t * Minimum X value.\n\t */\n\tminX?: number;\n\t/**\n\t * Minimum Y value.\n\t */\n\tminY?: number;\n\t/**\n\t * Maximum X value.\n\t */\n\tmaxX?: number;\n\t/**\n\t * Maximum Y value.\n\t */\n\tmaxY?: number;\n\t/**\n\t * URL of the background image for the pad.\n\t */\n\tbackground?: string;\n\t/**\n\t * Callback function triggered when value changes.\n\t */\n\tcallback?: (values: [number, number]) => [number, number];\n}\n\n/**\n * Interface representing the Pad widget.\n */\nexport interface InspectorPadWidget extends InspectorActiveWidget\n{\n\t/**\n\t * Sets the values for the pad.\n\t * @param {[number, number]} [values] The new X and Y values.\n\t */\n\tsetValue: (values?: InspectorValue) => void;\n}\n\n/**\n * Widget to edit two numbers using a rectangular pad where you can drag horizontally and vertically a handler.\n * @function AddPad\n * @param {Inspector} that The inspector instance.\n * @param {string} name The name of the widget.\n * @param {[number, number]} [value] Initial values [x, y].\n * @param {AddPadOptions | ((value: [number, number]) => [number, number])} [options] Configuration options or callback function.\n * @returns {InspectorPadWidget} The created pad widget element.\n */\nexport function AddPad(that: Inspector, name: string,\n\tvalue: [number, number] = [0, 0],\n\toptions: AddPadOptions | ((value: [number, number]) => [number, number]) = {}):\n\tInspectorPadWidget\n{\n\tif (typeof options === \"function\")\n\t{\n\t\toptions = { callback: options };\n\t}\n\tconst valueName = that.getValueName(name, options);\n\tthat.values.set(valueName, value);\n\n\tconst element = that.createWidget(name, \"\", options) as InspectorPadWidget;\n\n\toptions.step = options.step ?? 0.1;\n\toptions.tabIndex = that.tabIndex;\n\toptions.full = true;\n\tthat.tabIndex++;\n\n\tconst minX = options.minX ?? options.min ?? 0;\n\tconst minY = options.minY ?? options.min ?? 0;\n\tconst maxX = options.maxX ?? options.max ?? 1;\n\tconst maxY = options.maxY ?? options.max ?? 1;\n\n\tconst wcontent = element.querySelector(\".wcontent\") as HTMLElement;\n\n\tconst pad = document.createElement(\"div\") as HTMLDivElement;\n\tpad.className = \"litepad\";\n\twcontent.appendChild(pad);\n\tpad.style.width = \"100%\";\n\tpad.style.height = \"100px\";\n\tif (options.background)\n\t{\n\t\tpad.style.backgroundImage = `url('${options.background}')`;\n\t\tpad.style.backgroundSize = \"100%\";\n\t\tpad.style.backgroundRepeat = \"no-repeat\";\n\t}\n\n\tconst handler = document.createElement(\"div\");\n\thandler.className = \"litepad-handler\";\n\tpad.appendChild(handler);\n\n\toptions.tabIndex = that.tabIndex;\n\tthat.tabIndex++;\n\n\tfunction mouseDown(e: MouseEvent)\n\t{\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\n\t}\n\n\tfunction mouseMove(e: MouseEvent)\n\t{\n\t\tconst b = pad.getBoundingClientRect();\n\n\t\tconst mouse_x = e.pageX - b.left;\n\t\tconst mouse_y = e.pageY - b.top;\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tlet x = mouse_x / (b.width);\n\t\tlet y = mouse_y / (b.height);\n\n\t\tx = x * (maxX - minX) + minX;\n\t\ty = y * (maxY - minY) + minX;\n\n\t\tconst r = [x, y] as [number, number];\n\n\t\tLiteGUI.trigger(element, \"wbeforechange\", [r]);\n\t\telement.setValue(r);\n\n\t\tif (options && (options as AddPadOptions).callback)\n\t\t{\n\t\t\tconst new_val = (options as AddPadOptions).callback?.call(element, r);\n\t\t\tif (new_val && new_val.length >= 2)\n\t\t\t{\n\t\t\t\telement.setValue(new_val);\n\t\t\t}\n\t\t}\n\n\t\tLiteGUI.trigger(element, \"wchange\", [r]);\n\t\tif (that.onChange) { that.onChange(valueName, r, element); }\n\t}\n\n\tfunction mouseUp(e: MouseEvent)\n\t{\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\n\t\tdocument.body.removeEventListener(\"mouseup\", mouseUp);\n\t}\n\n\tpad.addEventListener(\"mousedown\", mouseDown);\n\n\telement.setValue = function (value?: InspectorValue)\n\t{\n\t\tif (value === undefined || !Array.isArray(value) || value.length < 2) { return; }\n\t\tif (typeof value[0] !== 'number' || typeof value[1] !== 'number') { return; }\n\n\t\tconst b = pad.getBoundingClientRect();\n\t\tlet x = (value[0] - minX) / (maxX - minX);\n\t\tlet y = (value[1] - minY) / (maxY - minY);\n\t\tx = Math.max(0, Math.min(x, 1)); // Clamp\n\t\ty = Math.max(0, Math.min(y, 1));\n\n\t\tconst w = ((b.width - 10) / b.width) * 100;\n\t\tconst h = ((b.height - 10) / b.height) * 100;\n\t\thandler.style.left = `${(x * w).toFixed(1)}%`;\n\t\thandler.style.top = `${(y * h).toFixed(1)}%`;\n\t};\n\n\tthat.appendWidget(element, options);\n\telement.setValue(value);\n\tthat.processElement(element, options);\n\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddPad(name: string, value?: [number, number], options?: AddPadOptions | ((value: [number, number]) => [number, number])): InspectorPadWidget;\n\t}\n}\n\nInspector.prototype.addPad = function (name: string, value?: [number, number], options?: AddPadOptions | ((value: [number, number]) => [number, number])): InspectorPadWidget\n{\n\treturn AddPad(this, name, value, options);\n};\n\nInspector.widgetConstructors.pad = \"addPad\";\n","import type { InspectorWidget } from \"../@types/Inspector\";\nimport { Inspector } from \"./inspector\";\n\n/**\n * Creates a horizontal separator line in the inspector.\n * @function AddSeparator\n * @param {Inspector} that The inspector instance.\n * @returns {InspectorWidget} The separator widget element.\n */\nexport function AddSeparator(that: Inspector)\n{\n\tconst element = document.createElement(\"DIV\") as InspectorWidget;\n\telement.className = \"separator\";\n\tthat.appendWidget(element);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n interface Inspector\n {\n addSeparator(): InspectorWidget;\n }\n}\n\nInspector.prototype.addSeparator = function (): InspectorWidget\n{\n\treturn AddSeparator(this);\n};\n\nInspector.widgetConstructors.separator = \"addSeparator\";","import { Slider } from \"../widgets\";\nimport type { CreateWidgetOptions, InspectorActiveWidget, InspectorValue, WidgetChangeOptions } from \"../@types/Inspector\";\nimport { Inspector } from \"./inspector\";\n\n/**\n * Options for creating a Slider widget.\n */\nexport interface AddSliderOptions extends CreateWidgetOptions, Omit<WidgetChangeOptions, 'callback'>\n{\n\t/**\n\t * Minimum value of the range.\n\t */\n\tmin?: number;\n\t/**\n\t * Maximum value of the range.\n\t */\n\tmax?: number;\n\t/**\n\t * Step size for the slider.\n\t */\n\tstep?: number;\n\t/**\n\t * Callback function triggered when value changes.\n\t */\n\tcallback?: (value: number) => void;\n}\n\n/**\n * Interface representing the Slider widget.\n */\nexport interface InspectorSliderWidget extends InspectorActiveWidget\n{\n\t/**\n\t * Reference to the internal Slider widget.\n\t */\n\tslider: Slider;\n\t/**\n\t * Sets the value of the slider.\n\t * @param {number} [value] The new value.\n\t * @param {boolean} [skipEvent] If true, prevents triggering the change event.\n\t */\n\tsetValue: (value?: InspectorValue, skipEvent?: boolean) => void;\n}\n\n/**\n * Widget to edit a number using a slider.\n * @function AddSlider\n * @param {Inspector} that The inspector instance.\n * @param {string | undefined} name The name of the widget.\n * @param {number | undefined} value The initial value.\n * @param {AddSliderOptions | undefined} options Configuration options.\n * @returns {InspectorSliderWidget} The created slider widget element.\n */\nexport function AddSlider(that: Inspector, name?: string, value?: number, options?: AddSliderOptions): InspectorSliderWidget\n{\n\tvalue = value ?? 0;\n\toptions = options ?? {};\n\toptions.min = options.min ?? 0;\n\toptions.max = options.max ?? 1;\n\toptions.step = options.step || 0.01;\n\tconst valueName = that.getValueName(name, options);\n\tthat.values.set(valueName, value);\n\n\tconst element = that.createWidget(name,\n\t\t\"<span class='inputfield full'>\\n<input tabIndex='\" + that.tabIndex +\n\t\t\"' type='text' class='slider-text fixed liteslider-value' value='' /><span class='slider-container'></span></span>\",\n\t\toptions) as InspectorSliderWidget;\n\n\tconst slider_container = element.querySelector(\".slider-container\") as HTMLElement;\n\n\tconst slider = new Slider(value, options);\n\telement.slider = slider;\n\tslider_container.appendChild(slider.root);\n\n\t// Text change -> update slider\n\tconst skip_change = false; // Used to avoid recursive loops\n\tconst textInput = element.querySelector(\".slider-text\") as HTMLInputElement;\n\ttextInput.value = value.toString();\n\ttextInput.addEventListener('change', () =>\n\t{\n\t\tif (skip_change) { return; }\n\t\tconst v = parseFloat(textInput.value);\n\t\tvalue = v;\n\t\tslider.setValue(v);\n\t\tthat.onWidgetChange(element, valueName, v, options as unknown as WidgetChangeOptions);\n\t});\n\n\t// Slider change -> update Text\n\tslider.onChange = (value: number) =>\n\t{\n\t\ttextInput.value = value.toString();\n\t\tthat.onWidgetChange(element, valueName, value, options as unknown as WidgetChangeOptions);\n\t};\n\n\tthat.appendWidget(element, options);\n\n\telement.setValue = function (v?: InspectorValue, skipEvent?: boolean)\n\t{\n\t\tif (v === undefined || typeof v !== 'number') { return; }\n\t\tvalue = v;\n\t\tslider.setValue(v, skipEvent);\n\t};\n\telement.getValue = function ()\n\t{\n\t\treturn value;\n\t};\n\n\tthat.processElement(element, options);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddSlider(name?: string, value?: number, options?: AddSliderOptions): InspectorSliderWidget;\n\t}\n}\n\nInspector.prototype.addSlider = function (name?: string, value?: number, options?: AddSliderOptions): InspectorSliderWidget\n{\n\treturn AddSlider(this, name, value, options);\n};\n\nInspector.widgetConstructors.slider = \"addSlider\";","import { CreateWidgetOptions, InspectorActiveWidget, InspectorValue, WidgetChangeOptions } from \"../@types/Inspector\";\nimport { Trigger } from \"../utilities\";\nimport { Inspector } from \"./inspector\";\n\n/**\n * Options for creating a String widget.\n */\nexport interface AddStringOptions extends CreateWidgetOptions, Omit<WidgetChangeOptions, 'callback'>\n{\n\t/**\n\t * If true, the input type will be 'password' to hide characters.\n\t */\n\tpassword?: true;\n\t/**\n\t * If true, automatically sets focus to this input.\n\t */\n\tfocus?: boolean;\n\t/**\n\t * If true, triggers the callback on 'keyup' instead of 'change'.\n\t */\n\timmediate?: boolean;\n\t/**\n\t * Whether the input is disabled.\n\t */\n\tdisabled?: boolean;\n\t/**\n\t * Placeholder text for the input field.\n\t */\n\tplaceHolder?: string;\n\t/**\n\t * Text alignment (e.g., 'right').\n\t */\n\talign?: string;\n\t/**\n\t * URL of an icon to display inside the input.\n\t */\n\ticon?: string;\n\t/**\n\t * Callback function triggered when the Enter key is pressed.\n\t */\n\tonEnter?: () => void;\n}\n\n/**\n * Interface representing the String widget.\n */\nexport interface InspectorStringWidget extends InspectorActiveWidget\n{\n\t/**\n\t * Sets the value of the string input.\n\t * @param {string} [value] The new string value.\n\t * @param {boolean} [skipEvent] If true, prevents triggering the change event.\n\t */\n\tsetValue: (value?: InspectorValue, skipEvent?: boolean) => void;\n\t/**\n\t * Sets an icon inside the input field.\n\t * @param {string} img URL of the icon image.\n\t */\n\tsetIcon: (img: string) => void;\n}\n\n/**\n * Widget to edit strings.\n * @function AddString\n * @param {Inspector} that The inspector instance.\n * @param {string} [name] The name/label of the widget.\n * @param {string} [value] The initial value.\n * @param {AddStringOptions} [options] Configuration options.\n * @returns {InspectorStringWidget} The created string widget element.\n */\nexport function AddString(that: Inspector, name?: string, value?: string, options?: AddStringOptions): InspectorStringWidget\n{\n\tvalue = value ?? '';\n\toptions = options ?? {};\n\tconst valueName = that.getValueName(name, options);\n\tthat.values.set(valueName, value);\n\n\tconst inputType = options.password ? \"password\" : \"text\";\n\tconst focus = options.focus ? \"autofocus\" : \"\";\n\tconst isDisabledText = options.disabled ? \"disabled\" : \"\";\n\n\tconst element = that.createWidget(name, \"<span class='inputfield full \" + isDisabledText +\n\t\t\"'><input type='\" + inputType + \"' tabIndex='\" + that.tabIndex + \"' \" + focus + \" class='text string' value='\" +\n\t\tvalue + \"' \" + isDisabledText + \"/></span>\", options) as InspectorStringWidget;\n\tconst input = element.querySelector(\".wcontent input\") as HTMLInputElement;\n\n\tif (options.placeHolder) { input.setAttribute(\"placeHolder\", options.placeHolder); }\n\n\tif (options.align == \"right\")\n\t{\n\t\tinput.style.direction = \"rtl\";\n\t}\n\n\tinput.addEventListener(options.immediate ? \"keyup\" : \"change\", (e: Event) =>\n\t{\n\t\tconst target = e.target as HTMLInputElement;\n\t\tconst value = target.value;\n\t\tconst r = that.onWidgetChange(element, valueName, value, options!);\n\t\tif (r !== undefined) { input.value = r; }\n\t});\n\n\tif (options.onEnter)\n\t{\n\t\tinput.addEventListener(\"keydown\", (e: KeyboardEvent) =>\n\t\t{\n\t\t\tif (e.key === 'Enter')\n\t\t\t{\n\t\t\t\tconst target = e.target as HTMLInputElement;\n\t\t\t\tconst value = target.value;\n\t\t\t\tthat.onWidgetChange(element, name!, value, options!);\n\t\t\t\tif (options!.onEnter) { options!.onEnter(); }\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t});\n\t}\n\n\tthat.tabIndex += 1;\n\n\telement.setIcon = function (img: string)\n\t{\n\t\tif (!img)\n\t\t{\n\t\t\tinput.style.background = \"\";\n\t\t\tinput.style.paddingLeft = \"\";\n\t\t}\n\t\telse\n\t\t{\n\t\t\tinput.style.background = `transparent url('${img}') no-repeat left 4px center`;\n\t\t\tinput.style.paddingLeft = \"1.7em\";\n\t\t}\n\t};\n\tif (options.icon) { element.setIcon(options.icon); }\n\n\telement.setValue = function (value?: InspectorValue, skipEvent?: boolean)\n\t{\n\t\tif (value === undefined || value === input.value) { return; }\n\t\tif (typeof value !== 'string') { return; }\n\t\tinput.value = value;\n\t\tif (!skipEvent) { Trigger(input, \"change\"); }\n\t};\n\telement.getValue = function () { return input.value; };\n\telement.focus = function () { this.querySelector(\"input\")?.focus(); };\n\telement.disable = function () { input.disabled = true; };\n\telement.enable = function () { input.disabled = false; };\n\tthat.appendWidget(element, options);\n\tthat.processElement(element, options);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddString(name?: string, value?: string, options?: AddStringOptions): InspectorStringWidget;\n\t}\n}\n\nInspector.prototype.addString = function (name?: string, value?: string, options?: AddStringOptions): InspectorStringWidget\n{\n\treturn AddString(this, name, value, options);\n};\n\nInspector.widgetConstructors.string = \"addString\";\nInspector.widgetConstructors.text = \"addString\";\n","import { FocusElement, SizeToCSS, Trigger } from \"../utilities\";\nimport { CreateWidgetOptions, InspectorValue, WidgetChangeOptions } from \"../@types/Inspector\";\nimport { Inspector } from \"./inspector\";\nimport { InspectorStringWidget } from \"./string\";\n\n/**\n * Options for creating a StringButton widget.\n */\nexport interface AddStringButtonOptions extends CreateWidgetOptions, WidgetChangeOptions\n{\n\t/**\n\t * Whether the input is disabled.\n\t */\n\tdisabled?: boolean;\n\t/**\n\t * Text to display on the button.\n\t * @default \"...\"\n\t */\n\tbutton?: string;\n\t/**\n\t * URL of an icon to display inside the input.\n\t */\n\ticon?: string;\n\t/**\n\t * Width of the button, auto by default.\n\t */\n\tbuttonWidth?: string | number;\n\t/**\n\t * Callback function triggered when the button is clicked.\n\t */\n\tonClick?: (value: string, e: Event) => void;\n}\n\n/**\n * Widget to edit strings, but it adds a button behind (useful to search values somewhere in case the user does not remember the name).\n * @function AddStringButton\n * @param {Inspector} that The inspector instance.\n * @param {string} [name] The name of the field.\n * @param {string} [value] The string to show.\n * @param {AddStringButtonOptions} [options] Configuration options.\n * @returns {InspectorStringWidget} The created string widget element.\n */\nexport function AddStringButton(that: Inspector, name?: string, value?: string, options?: AddStringButtonOptions): InspectorStringWidget\n{\n\tvalue = value ?? '';\n\toptions = options ?? {};\n\tconst valueName = that.getValueName(name, options);\n\tthat.values.set(valueName!, value);\n\n\tconst element = that.createWidget(name,\n\t\t`<span class='inputfield button'><input type='text' tabIndex='${that.tabIndex}' ` +\n\t\t`class='text string' value='' ${options.disabled ? \"disabled\" : \"\"}/></span>` +\n\t\t`<button class='micro'>${options.button ?? \"...\"}</button>`, options) as InspectorStringWidget;\n\tconst input = element.querySelector(\".wcontent input\") as HTMLInputElement;\n\tinput.value = value;\n\tinput.addEventListener(\"change\", (e: Event) =>\n\t{\n\t\tconst r = that.onWidgetChange(element, valueName, (e.target as HTMLInputElement)!.value, options as unknown as WidgetChangeOptions);\n\t\tif (r !== undefined) { input.value = r; }\n\t});\n\n\tif (options.disabled) { input.setAttribute(\"disabled\", \"disabled\"); }\n\n\tconst button = element.querySelector(\".wcontent button\") as HTMLInputElement;\n\n\telement.setIcon = function (img: string)\n\t{\n\t\tif (!img)\n\t\t{\n\t\t\tbutton.style.backgroundColor = \"\";\n\t\t\tbutton.style.backgroundImage = \"\";\n\t\t\tbutton.style.backgroundRepeat = \"\";\n\t\t\tbutton.style.backgroundPosition = \"\";\n\t\t\tbutton.style.backgroundSize = \"\";\n\t\t\tbutton.style.paddingLeft = \"\";\n\t\t\tbutton.innerHTML = options.button ?? \"...\";\n\t\t}\n\t\telse\n\t\t{\n\t\t\tbutton.innerHTML = \"\";\n\t\t\tbutton.style.backgroundColor = \"transparent\";\n\t\t\tbutton.style.backgroundImage = `url('${img}')`;\n\t\t\tbutton.style.backgroundRepeat = \"no-repeat\";\n\t\t\tbutton.style.backgroundPosition = \"center\";\n\t\t\tbutton.style.backgroundSize = \"contain\";\n\t\t\tbutton.style.paddingLeft = \"\";\n\t\t\tbutton.style.width = \"2em\";\n\t\t\tbutton.style.minWidth = \"2em\";\n\t\t\tbutton.style.height = \"100%\";\n\t\t\tbutton.style.minHeight = \"1.5em\";\n\t\t\tbutton.style.padding = \"0\";\n\t\t\tbutton.style.flexShrink = \"0\";\n\t\t}\n\t};\n\n\tbutton.addEventListener(\"click\", (e: Event) =>\n\t{\n\t\tif (options!.onClick)\n\t\t{\n options!.onClick.call(element, input.value, e);\n\t\t}\n\t});\n\n\toptions.buttonWidth = options.buttonWidth ?? 'auto';\n\tif (options.buttonWidth)\n\t{\n\t\tconst buttonContent = element.querySelector('.wcontent') as HTMLElement;\n\t\tif (options.buttonWidth === 'auto' || options.buttonWidth === 'fit-content')\n\t\t{\n\t\t\tbuttonContent.style.display = 'flex';\n\t\t\tbuttonContent.style.alignItems = 'center';\n\t\t\tconst inputField = element.querySelector(\".inputfield\") as HTMLInputElement;\n\t\t\tinputField.style.width = 'auto';\n\t\t\tinputField.style.flexGrow = '1';\n\t\t\tbutton.style.width = 'auto';\n\t\t\tbutton.style.whiteSpace = 'nowrap';\n\t\t\tbutton.style.padding = '0 10px';\n\t\t\tbutton.style.margin = '0 0 0 4px';\n\t\t}\n\t\telse\n\t\t{\n\t\t\tbutton.style.width = SizeToCSS(options.buttonWidth) ?? '0px';\n\t\t\tconst inputField = element.querySelector(\".inputfield\") as HTMLInputElement;\n\t\t\tinputField.style.width = `calc( 100% - ${button.style.width} - 6px)`;\n\t\t}\n\t}\n\n\n\tthat.tabIndex += 1;\n\tthat.appendWidget(element, options);\n\telement.setValue = function (value?: InspectorValue, skipEvent?: boolean)\n\t{\n\t\tif (value === undefined || value === input.value) { return; }\n\t\tif (typeof value !== 'string') { return; }\n\t\tinput.value = value;\n\t\tif (!skipEvent) { Trigger(input, \"change\"); }\n\t};\n\telement.disable = function () { input.disabled = true; button.disabled = true; };\n\telement.enable = function () { input.disabled = false; button.disabled = false; };\n\telement.getValue = function () { return input.value; };\n\telement.focus = function () { FocusElement(input); };\n\tthat.processElement(element, options);\n\tif (options.icon) { element.setIcon(options.icon); }\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddStringButton(name?: string, value?: string, options?: AddStringButtonOptions): InspectorStringWidget;\n\t}\n}\n\nInspector.prototype.addStringButton = function (name?: string, value?: string, options?: AddStringButtonOptions): InspectorStringWidget\n{\n\treturn AddStringButton(this, name, value, options);\n};\n\nInspector.widgetConstructors.stringbutton = \"addStringButton\";","import { CreateWidgetOptions, InspectorWidget, WidgetChangeOptions } from \"../@types/Inspector\";\nimport { LiteGUI } from \"../core\";\nimport { Inspector } from \"./inspector\";\n\n/**\n * Options for creating an InspectorTags widget.\n */\nexport interface AddTagOptions extends CreateWidgetOptions, Omit<WidgetChangeOptions, 'callback'>\n{\n\t/**\n\t * If true, the widget will be disabled and non-interactive.\n\t * @default false\n\t */\n\tdisabled?: boolean;\n\n\t/**\n\t * Callback function triggered when the tags state changes.\n\t * The value parameter contains a map of tag names to their active state (true/false).\n\t */\n\tcallback?: (value: { [key: string]: boolean }) => void;\n}\n\n/**\n * Interface representing the Tags widget structure.\n */\nexport interface InspectorTagsWidget extends InspectorWidget\n{\n\t/**\n\t * Map of current tags and their active state (true = active/selected, false = inactive).\n\t */\n\ttags: { [key: string]: boolean };\n}\n\n/**\n * Internal interface for the tag DOM element.\n */\ninterface TagElement extends HTMLDivElement\n{\n\t/**\n\t * The name of the tag associated with this element.\n\t */\n\tdata: string;\n}\n\n/**\n * Adds a \"Tags\" widget to the Inspector.\n *\n * This widget manages a list of tags that can be toggled or removed.\n * - **Active Tags**: Displayed in a brighter color (value stored as `true`).\n * - **Inactive Tags**: Displayed in a darker color (value stored as `false`).\n * - **Adding**: Users can type a new tag name and press Enter to add it.\n * - **Removing**: Each tag has a closing 'X' button to remove it from the list.\n * @function AddTags\n *\n * @param {Inspector} that The Inspector instance to attach this widget to.\n * @param {string} [name] The label/name for the widget, used for internal state management.\n * @param {string[]} [values] Initial list of tag names to populate the widget with.\n * @param {AddTagOptions} [options] Configuration options for the widget (see `AddTagOptions`).\n * @returns {InspectorTagsWidget} The created widget HTML element.\n */\nexport function AddTags(that: Inspector, name?: string, values?: string[], options?: AddTagOptions)\n{\n\t// Normalize options and defaults\n\tvalues = values ?? [];\n\toptions = options ?? {};\n\n\t// Determine the property name to bind to\n\tconst valueName = that.getValueName(name, options);\n\n\t// Initialize the internal value for this widget in the inspector\n\tthat.values.set(valueName, {});\n\n\t// Create the HTML structure: input field and a container for tag elements\n\tconst code = \"<input type='text' class='wtaginput inputfield' placeholder='Add tag...'/>\" +\n\t\t\"<div class='wtagscontainer'></div>\";\n\n\t// Create the main widget element leveraging the Inspector's helper\n\tconst element = that.createWidget(name, `<div class='wtagswrapper'>${code}</div>`, options) as InspectorTagsWidget;\n\telement.tags = {};\n\n\t// Cache references to the DOM elements\n\tconst container = element.querySelector(\".wtagscontainer\") as HTMLElement;\n\tconst input = element.querySelector(\".wtaginput\") as HTMLInputElement;\n\n\t// Event listener: Add tag when user presses 'Enter' in the input field\n\tinput.addEventListener(\"keydown\", (e) =>\n\t{\n\t\tif (e.key === \"Enter\")\n\t\t{\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tif (input.value)\n\t\t\t{\n\t\t\t\t_onAddTag(input.value);\n\t\t\t\tinput.value = \"\"; // Clear input after adding\n\t\t\t}\n\t\t}\n\t});\n\n\t// Populate widget with initial values\n\tif (values)\n\t{\n\t\tfor (const i in values)\n\t\t{\n\t\t\t_onAddTag(values[i]);\n\t\t}\n\t}\n\n\t/**\n\t * Internal helper to create and append a single tag element.\n\t * @param {string} tagname Name of the tag to add.\n\t */\n\tfunction _onAddTag(tagname: string)\n\t{\n\t\t// Prevent duplicate tags\n\t\tif (element.tags[tagname] !== undefined) { return; }\n\n\t\t// Register the new tag as active by default\n\t\telement.tags[tagname] = true;\n\n\t\t// Create the DOM element for the tag\n\t\tconst tag = document.createElement(\"div\") as TagElement;\n\t\ttag.data = tagname;\n\t\ttag.className = \"wtag\";\n\t\ttag.innerHTML = `${tagname}<span class='close'>X</span>`;\n\n\t\t// Event listener: Toggle active state on click (unless clicking 'close')\n\t\ttag.addEventListener(\"click\", (e: MouseEvent) =>\n\t\t{\n\t\t\t/*\n\t\t\t * Specific check for the close button is handled in its own listener below,\n\t\t\t * but we ensure we don't process it here if bubbling reaches this far (though propagation is stopped below)\n\t\t\t */\n\t\t\tif ((e.target as HTMLElement).classList.contains(\"close\"))\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Toggle state\n\t\t\telement.tags[tagname] = !element.tags[tagname];\n\n\t\t\t// Update visual appearance\n\t\t\tif (element.tags[tagname])\n\t\t\t{\n\t\t\t\ttag.classList.remove(\"disabled\");\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ttag.classList.add(\"disabled\");\n\t\t\t}\n\n\t\t\t// Notify changes\n\t\t\ttriggerChange();\n\t\t});\n\n\t\t// Event listener: Remove tag when 'close' is clicked\n\t\ttag.querySelector(\".close\")!.addEventListener(\"click\", (e: Event) =>\n\t\t{\n\t\t\te.stopPropagation(); // Prevent triggering the toggle click on parent\n\t\t\tconst tagname = tag.data;\n\n\t\t\t// Update state\n\t\t\tdelete element.tags[tagname];\n\n\t\t\t// Remove from DOM\n\t\t\tLiteGUI.remove(tag);\n\n\t\t\t// Notify removal and changes\n\t\t\tLiteGUI.trigger(element, \"wremoved\", tagname);\n\t\t\ttriggerChange();\n\t\t});\n\n\t\t// Append to container\n\t\tcontainer.appendChild(tag);\n\n\t\t// Notify addition and changes\n\t\ttriggerChange();\n\t\tLiteGUI.trigger(element, \"wadded\", tagname);\n\t}\n\n\t/**\n\t * Helper to propagate changes to the Inspector and callbacks.\n\t */\n\tfunction triggerChange()\n\t{\n\t\tthat.values.set(valueName, element.tags);\n\t\tif (options!.callback) { options!.callback.call(element, element.tags); }\n\t\tLiteGUI.trigger(element, \"wchange\", element.tags);\n\t\tif (that.onChange) { that.onChange(valueName, element.tags, element); }\n\t}\n\n\t// Finalize widget attachment to the Inspector\n\tthat.appendWidget(element, options);\n\tthat.processElement(element, options);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddTags(name?: string, values?: string[], options?: AddTagOptions): InspectorTagsWidget;\n\t}\n}\n\nInspector.prototype.addTags = function (name?: string, values?: string[], options?: AddTagOptions): InspectorTagsWidget\n{\n\treturn AddTags(this, name, values, options);\n};\n\nInspector.widgetConstructors.tags = \"addTags\";","import { CreateWidgetOptions, InspectorValue, WidgetChangeOptions } from \"../@types/Inspector\";\nimport { LiteGUI } from \"../core\";\nimport { Inspector } from \"./inspector\";\nimport { InspectorStringWidget } from \"./string\";\n\n/**\n * Options for creating a TextArea widget.\n */\nexport interface AddTextAreaOptions extends CreateWidgetOptions, WidgetChangeOptions\n{\n\t/**\n\t * If true, triggers the callback on 'keyup' instead of 'change'.\n\t */\n\timmediate?: boolean;\n\t/**\n\t * Whether the textarea is disabled.\n\t */\n\tdisabled?: boolean;\n\t/**\n\t * Placeholder text.\n\t */\n\tplaceHolder?: string;\n\t/**\n\t * Text alignment.\n\t */\n\talign?: string;\n\t/**\n\t * URL of an icon (though typically used in inputs, might be supported here).\n\t */\n\ticon?: string;\n\t/**\n\t * Callback triggered on 'keydown' event.\n\t */\n\tonKeyDown?: () => void;\n}\n\n/**\n * Widget to edit strings with multiline support.\n * @function AddTextArea\n * @param {Inspector} that The inspector instance.\n * @param {string} [name] The name of the widget.\n * @param {string} [value] The initial text value.\n * @param {AddTextAreaOptions} [options] Configuration options.\n * @returns {InspectorStringWidget} The created text area widget.\n */\nexport function AddTextArea(that: Inspector, name?: string, value?: string, options?: AddTextAreaOptions): InspectorStringWidget\n{\n\tvalue = value ?? \"\";\n\tconst opt = options ?? {};\n\tconst valueName = that.getValueName(name, opt);\n\tthat.values.set(valueName!, value);\n\n\tconst isDisabledText = opt.disabled ? \"disabled\" : \"\";\n\tconst element = that.createWidget(name, \"<span class='inputfield textarea \" +\n\t\tisDisabledText + \"'><textarea tabIndex='\" + that.tabIndex + \"' \" +\n\t\tisDisabledText + \"></textarea></span>\", opt) as InspectorStringWidget;\n\tthat.tabIndex++;\n\tconst textarea = element.querySelector(\".wcontent textarea\") as HTMLTextAreaElement;\n\ttextarea.value = value;\n\tif (opt.placeHolder) { textarea.setAttribute(\"placeHolder\", opt.placeHolder); }\n\ttextarea.addEventListener(opt.immediate ? \"keyup\" : \"change\", (e: Event) =>\n\t{\n\t\tthat.onWidgetChange(element, valueName, (e.target as HTMLTextAreaElement)?.value, opt, false, e);\n\t});\n\tif (opt.onKeyDown)\n\t{\n\t\ttextarea.addEventListener(\"keydown\", opt.onKeyDown);\n\t}\n\n\tif (opt.height)\n\t{\n\t\ttextarea.style.height = \"calc( \" + LiteGUI.sizeToCSS(opt.height) + \" - 5px )\";\n\t}\n\t// Textarea.style.height = LiteGUI.sizeToCSS( opt.height );\n\tthat.appendWidget(element, opt);\n\telement.setValue = function (result?: InspectorValue, skipEvent?: boolean)\n\t{\n\t\tif (result === undefined || typeof result !== 'string' || result == textarea.value) { return; }\n\t\tvalue = result;\n\t\ttextarea.value = result;\n\t\tif (!skipEvent) { LiteGUI.trigger(textarea, \"change\"); }\n\t};\n\telement.getValue = function ()\n\t{\n\t\treturn textarea.value;\n\t};\n\telement.focus = function () { LiteGUI.focus(textarea); };\n\telement.disable = function () { textarea.disabled = true; };\n\telement.enable = function () { textarea.disabled = false; };\n\tthat.processElement(element, opt);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddTextArea(name?: string, value?: string, options?: AddTextAreaOptions): InspectorStringWidget;\n\t}\n}\n\nInspector.prototype.addTextArea = function (name?: string, value?: string, options?: AddTextAreaOptions): InspectorStringWidget\n{\n\treturn AddTextArea(this, name, value, options);\n};\n\nInspector.widgetConstructors.textarea = \"addTextArea\";","import type { Tree, TreeData, TreeNode, TreeOptions } from \"../widgets/tree\";\nimport { CreateWidgetOptions, InspectorValue, InspectorWidget } from \"../@types/Inspector\";\nimport { LiteGUI } from \"../core\";\nimport { Inspector } from \"./inspector\";\n\n/**\n * Options for creating a Tree widget.\n */\nexport interface addTreeOptions extends CreateWidgetOptions\n{\n\t/**\n\t * Options passed to the underlying Tree widget.\n\t */\n\ttreeOptions?: TreeOptions;\n\t/**\n\t * Callback function triggered when a tree node is selected.\n\t */\n\tcallback?: (node: TreeNode, data: TreeData) => void;\n}\n\n/**\n * Interface representing the Inspector Tree widget.\n */\nexport interface InspectorTreeWidget extends InspectorWidget\n{\n\t/**\n\t * Reference to the internal Tree instance.\n\t */\n\ttree: Tree;\n}\n\n/**\n * Adds a tree widget to the inspector.\n * @function AddTree\n * @param {Inspector} that The inspector instance.\n * @param {string} name - The name of the tree widget.\n * @param {TreeData} value The tree data to display.\n * @param {addTreeOptions} [options] Configuration options.\n * @returns {InspectorTreeWidget} The created tree widget instance.\n */\nexport function AddTree(that: Inspector, name: string, value: TreeData, options: addTreeOptions = {})\n{\n\tconst element = that.createWidget(name, \"<div class='wtree inputfield full'></div>\", options) as InspectorTreeWidget;\n\n\tconst treeRoot: HTMLDivElement | null = element.querySelector(\".wtree\");\n\tif (!treeRoot) { return; }\n\n\tif (options.height)\n\t{\n\t\ttreeRoot.style.height = typeof (options.height) == \"number\" ? options.height + \"px\" : options.height;\n\t\ttreeRoot.style.overflow = \"auto\";\n\t}\n\n\tconst tree = element.tree = new LiteGUI.Tree(value, options.treeOptions);\n\ttree.onItemSelected = function (data: TreeData, node: TreeNode)\n\t{\n\t\tif (options.callback) { options.callback.call(element, node, data); }\n\t};\n\n\ttreeRoot.appendChild(tree.root);\n\n\telement.setValue = function (v: InspectorValue)\n\t{\n\t\tif (v && typeof v === 'object' && !Array.isArray(v))\n\t\t{\n\t\t\ttree.updateTree(v as TreeData);\n\t\t}\n\t};\n\n\tthat.appendWidget(element, options);\n\tthat.processElement(element, options);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddTree(name: string, value: TreeData, options?: addTreeOptions): InspectorTreeWidget | undefined;\n\t}\n}\n\nInspector.prototype.addTree = function (name: string, value: TreeData, options?: addTreeOptions): InspectorTreeWidget | undefined\n{\n\treturn AddTree(this, name, value, options);\n};\n\nInspector.widgetConstructors.tree = \"addTree\";","import { LiteGUI } from \"../core\";\nimport { Inspector } from \"./inspector\";\nimport { CreateWidgetOptions, InspectorActiveWidget, InspectorValue, WidgetChangeOptions } from \"../@types/Inspector\";\nimport { Dragger, DraggerOptions } from \"../dragger\";\n\n/**\n * Options for creating a Vector widget.\n */\nexport interface AddVectorOptions extends CreateWidgetOptions, DraggerOptions, Omit<WidgetChangeOptions, 'callback'>\n{\n\t/**\n\t * Internal flag to indicate full vector width usage.\n\t */\n\tfullVector?: boolean;\n\t/**\n\t * Callback function triggered when value changes.\n\t */\n\tcallback?: (value: number[]) => void;\n\t/**\n\t * Callback function triggered on change (alternative).\n\t */\n\tonChange?: (value: number[]) => number[] | void;\n\t/**\n\t * Callback function triggered before change (start dragging).\n\t */\n\tpreCallback?: (e: Event) => void;\n}\n\n/**\n * Interface representing a numeric Vector widget.\n */\nexport interface InspectorNumberVectorWidget extends InspectorActiveWidget\n{\n\t/**\n\t * Array of draggers used to edit each component of the vector.\n\t */\n\tdraggers: Dragger[];\n\t/**\n\t * Sets the range for all draggers.\n\t * @param {number} min Minimum value.\n\t * @param {number} max Maximum value.\n\t */\n\tsetRange: (min: number, max: number) => void;\n\t/**\n\t * Sets the value of the vector.\n\t * @param {InspectorValue} [value] The new vector values.\n\t * @param {boolean} [skipEvent] If true, prevents triggering change events.\n\t */\n\tsetValue: (value?: InspectorValue, skipEvent?: boolean) => void;\n}\n\ninterface VectorInput extends HTMLInputElement\n{\n\tdragger: Dragger;\n}\n\n/**\n * Widget to edit an array of numbers from 2 to 4 (it adds a dragging mini widget in the right side).\n * @function AddVector\n * @param {Inspector} that The inspector instance.\n * @param {string | undefined} name The name/label of the widget.\n * @param {number[]} value The initial vector values.\n * @param {AddVectorOptions} [options] Configuration options.\n * @returns {InspectorNumberVectorWidget} The created vector widget element.\n */\nexport function AddVector(that: Inspector, name: string | undefined,\n\tvalue: number[], options: AddVectorOptions = {}): InspectorNumberVectorWidget\n{\n\tconst valueName = that.getValueName(name, options);\n\tthat.values.set(valueName, value);\n\n\tconst element = that.createWidget(name, \"\", options) as InspectorNumberVectorWidget;\n\tconst initLength = value.length;\n\toptions.step = options.step ?? 0.1;\n\toptions.tabIndex = that.tabIndex;\n\toptions.fullVector = true;\n\tif (!options.step) { options.step = 0.1; }\n\tthat.tabIndex++;\n\n\tconst draggers: Dragger[] = element.draggers = [];\n\n\tconst _preChange = function (e: Event)\n\t{\n\t\tif (options!.preCallback) { options!.preCallback(e); }\n\t};\n\n\tfor (let i = 0; i < value.length; i++)\n\t{\n\t\tconst dragger: Dragger = new LiteGUI.Dragger(value[i], options);\n\t\tdragger.root.style.marginLeft = '0';\n\t\tdragger.root.style.width = \"calc( 25% - 1px )\";\n\t\telement.querySelector(\".wcontent\")!.appendChild(dragger.root);\n\t\toptions.tabIndex = that.tabIndex;\n\t\tthat.tabIndex++;\n\t\tdragger.root.addEventListener(\"start_dragging\", _preChange);\n\t\tdraggers.push(dragger);\n\t}\n\n\tconst inputs = element.querySelectorAll(\"input\") as NodeListOf<VectorInput>;\n\tconst onChangeCallback = (e: Event) =>\n\t{\n\t\t// Gather all three parameters\n\t\tlet r = [];\n\t\tfor (let j = 0; j < inputs.length; j++)\n\t\t{\n\t\t\tr.push(parseFloat(inputs[j].value));\n\t\t}\n\n\t\tLiteGUI.trigger(element, \"wbeforechange\", [r]);\n\n\t\tthat.values.set(valueName, r);\n\n\t\tconst dragger = (e.target as VectorInput).dragger;\n\t\tif (options.onChange && dragger.dragging)\n\t\t{\n\t\t\tconst new_val = options.onChange.call(element, r);\n\n\t\t\tif (Array.isArray(new_val) && new_val.length >= initLength)\n\t\t\t{\n\t\t\t\tfor (let j = 0; j < inputs.length; j++)\n\t\t\t\t{\n\t\t\t\t\tinputs[j].value = new_val[j].toString();\n\t\t\t\t}\n\t\t\t\tr = new_val;\n\t\t\t}\n\t\t}\n\t\telse if ((options.onChange || options.callback) && !dragger.dragging)\n\t\t{\n\t\t\tlet new_val = undefined;\n\t\t\tif (options.callback)\n\t\t\t{\n\t\t\t\tnew_val = options.callback.call(element, r);\n\t\t\t}\n\t\t\telse if (options.onChange)\n\t\t\t{\n\t\t\t\tnew_val = options.onChange.call(element, r);\n\t\t\t}\n\n\t\t\tif (Array.isArray(new_val) && new_val.length >= initLength)\n\t\t\t{\n\t\t\t\tfor (let j = 0; j < inputs.length; j++)\n\t\t\t\t{\n\t\t\t\t\tinputs[j].value = new_val[j].toString();\n\t\t\t\t}\n\t\t\t\tr = new_val;\n\t\t\t}\n\t\t}\n\n\t\tLiteGUI.trigger(element, \"wchange\", [r]);\n\t\tif (that.onChange) { that.onChange(valueName, r, element); }\n\t};\n\tconst onStopDragging = function (input: VectorInput)\n\t{\n\t\tLiteGUI.trigger(input, \"change\");\n\t};\n\tfor (let i = 0; i < inputs.length; ++i)\n\t{\n\t\tconst dragger = draggers[i];\n\t\tconst input = inputs[i];\n\t\tinput.dragger = dragger;\n\t\tinput.addEventListener(\"change\", onChangeCallback);\n\t\tdragger.root.addEventListener(\"stop_dragging\", onStopDragging.bind(undefined, input));\n\t}\n\n\tthat.appendWidget(element, options);\n\n\telement.setValue = function (value?: InspectorValue, skipEvent?: boolean)\n\t{\n\t\tif (value === undefined || !Array.isArray(value)) { return; }\n\t\tconst valArray = value as (number | string)[];\n\t\tfor (let i = 0; i < draggers.length; i++)\n\t\t{\n\t\t\tdraggers[i].setValue(valArray[i], skipEvent ?? i < draggers.length - 1);\n\t\t}\n\t};\n\telement.setRange = function (min: number, max: number) { for (const i in draggers) { draggers[i].setRange(min, max); } };\n\n\tthat.processElement(element, options);\n\treturn element;\n}\n\ndeclare module \"./inspector\" {\n\tinterface Inspector\n\t{\n\t\taddVector(name: string, value: number[], options?: AddVectorOptions): InspectorNumberVectorWidget;\n\t\taddVector2(name: string, value: [number, number], options?: AddVectorOptions): InspectorNumberVectorWidget;\n\t\taddVector3(name: string, value: [number, number, number], options?: AddVectorOptions): InspectorNumberVectorWidget;\n\t\taddVector4(name: string, value: [number, number, number, number], options?: AddVectorOptions): InspectorNumberVectorWidget;\n\t}\n}\n\nInspector.prototype.addVector = function (name: string, value: number[], options?: AddVectorOptions): InspectorNumberVectorWidget\n{\n\treturn AddVector(this, name, value, options);\n};\n\nInspector.prototype.addVector2 = function (name: string, value: [number, number], options?: AddVectorOptions): InspectorNumberVectorWidget\n{\n\tvalue = value ?? [0, 0];\n\toptions = options ?? {};\n\treturn AddVector(this, name, value, options);\n};\n\nInspector.prototype.addVector3 = function (name: string, value: [number, number, number], options?: AddVectorOptions): InspectorNumberVectorWidget\n{\n\tvalue = value ?? [0, 0, 0];\n\toptions = options ?? {};\n\treturn AddVector(this, name, value, options);\n};\n\nInspector.prototype.addVector4 = function (name: string, value: [number, number, number, number], options?: AddVectorOptions): InspectorNumberVectorWidget\n{\n\tvalue = value ?? [0, 0, 0, 0];\n\toptions = options ?? {};\n\treturn AddVector(this, name, value, options);\n};\n\nInspector.widgetConstructors.vector = \"addVector\";\nInspector.widgetConstructors.vec2 = \"addVector2\";\nInspector.widgetConstructors.vector2 = \"addVector2\";\nInspector.widgetConstructors.vec3 = \"addVector3\";\nInspector.widgetConstructors.vector3 = \"addVector3\";\nInspector.widgetConstructors.vec4 = \"addVector4\";\nInspector.widgetConstructors.vector4 = \"addVector4\";\n","import { LiteGUIObject } from \"./@types/globals\";\nimport { LiteGUI } from \"./core\";\nimport { Panel } from \"./panel\";\n\n/**\n * Configuration options for the menubar.\n */\nexport interface MenubarOptions\n{\n\t/**\n\t * Whether the menu opens automatically on mouse over.\n\t */\n\tautoOpen: boolean;\n\t/**\n\t * Whether to sort entries alphabetically.\n\t */\n\tsortEntries: boolean;\n}\n\n/**\n * Interface for the root HTML element of a menu bar.\n */\nexport interface MenuBarElement extends HTMLElement\n{\n\t/**\n\t * Name of the menu bar element.\n\t */\n\tname?: string;\n\t/**\n\t * Data associated with the menu bar element.\n\t */\n\tdata?: MenuBarElementData;\n}\n\n/**\n * Data associated with a menu item.\n */\nexport interface MenuBarElementData\n{\n\t/**\n\t * Type of the menu item (e.g., 'checkbox').\n\t */\n\ttype?: 'checkbox',\n\t/**\n\t * The object instance if this menu item controls a property.\n\t */\n\tinstance?: { [property: string]: boolean },\n\t/**\n\t * The property name of the instance to control.\n\t */\n\tproperty?: string,\n\t/**\n\t * Fixed value to set when clicked.\n\t */\n\tvalue?: boolean,\n\t/**\n\t * Boolean state for the checkbox.\n\t */\n\tcheckbox?: boolean,\n\t/**\n\t * Whether the menu item is disabled.\n\t */\n\tdisabled?: boolean,\n\t/**\n\t * Whether the menu should remain open after clicking.\n\t */\n\tkeepOpen?: boolean,\n\t/**\n\t * Function to determine if the item is checked.\n\t */\n\tisChecked?: (instance?: { [property: string]: boolean }, data?: MenuBarElementData) => void,\n\t/**\n\t * Callback function executed when the item is clicked.\n\t */\n\tcallback?: (value: { checkbox?: boolean }) => void,\n\t/**\n\t * Whether the submenu opens automatically on mouse over.\n\t */\n\tautoOpen?: boolean;\n}\n\n/**\n * Interface for paragraph elements representing menu entries.\n */\nexport interface MenuBarParagraphElement extends HTMLParagraphElement\n{\n\t/**\n\t * SubMenu data associated with this element.\n\t */\n\tdata?: SubMenu;\n}\n\n/**\n * Options for adding a new menu item.\n */\nexport interface AddMenuOptions\n{\n\t/**\n\t * Whether the item acts as a checkbox.\n\t */\n\tcheckbox?: boolean;\n\t/**\n\t * Whether the menu should keep open after interaction.\n\t */\n\tkeepOpen?: boolean;\n\t/**\n\t * Whether the item is disabled.\n\t */\n\tdisabled?: boolean;\n\t/**\n\t * Callback function to execute on click.\n\t */\n\tcallback?: (value: { checkbox?: boolean }) => void;\n\t/**\n\t * Whether the submenu opens automatically on mouse over.\n\t */\n\tautoOpen?: boolean;\n}\n\n/**\n * Interface representing a submenu structure.\n */\nexport interface SubMenu\n{\n\t/**\n\t * Display name of the submenu.\n\t */\n\tname: string;\n\t/**\n\t * Parent submenu, if any.\n\t */\n\tparent?: SubMenu;\n\t/**\n\t * Child submenus.\n\t */\n\tchildren?: SubMenu[];\n\t/**\n\t * Data associated with the submenu item.\n\t */\n\tdata?: MenuBarElementData;\n\t/**\n\t * Function to disable this submenu item.\n\t */\n\tdisable?: () => void;\n\t/**\n\t * Function to enable this submenu item.\n\t */\n\tenable?: () => void;\n\t/**\n\t * Flag to indicate if this item is a separator.\n\t */\n\tseparator?: boolean;\n\t/**\n\t * Order index for sorting.\n\t */\n\torder?: number;\n\t/**\n\t * The HTML element associated with this submenu.\n\t */\n\telement?: SubMenuElement;\n}\n\n/**\n * Interface for list items representing submenus.\n */\nexport interface SubMenuElement extends HTMLLIElement\n{\n\t/**\n\t * Data associated with this element.\n\t */\n\tdata?: SubMenu;\n}\n\n/** ************ MENUBAR ************************/\n/**\n * Class representing a MenuBar widget.\n * @class Menubar\n * @example\n * ```typescript\n * const menubar = new Menubar(\"main-menubar\");\n * menubar.add(\"File/Open\", { callback: () => console.log(\"Open\") });\n * menubar.attachToPanel(myPanel);\n * ```\n */\nexport class Menubar implements LiteGUIObject\n{\n\t/**\n\t * Time in milliseconds before the menu closes automatically.\n\t */\n\tclosingTime: number;\n\t/**\n\t * Configuration options for the menubar.\n\t */\n\toptions: MenubarOptions;\n\t/**\n\t * The root HTML element of the menubar.\n\t */\n\troot: MenuBarElement;\n\t/**\n\t * Array of submenu structures.\n\t */\n\tmenu: SubMenu[];\n\t/**\n\t * Array of panel elements used for dropdowns.\n\t */\n\tpanels: HTMLDivElement[];\n\t/**\n\t * The unordered list element containing the main menu items.\n\t */\n\tcontent: HTMLUListElement;\n\t/**\n\t * Whether the menu is currently open.\n\t */\n\tisOpen: boolean;\n\t/**\n\t * Whether the menu opens automatically on hover.\n\t */\n\tautoOpen: boolean;\n\t/**\n\t * Whether to sort entries alphabetically.\n\t */\n\tsortEntries: boolean;\n\t/**\n\t * Default options used when adding menus.\n\t */\n\tdata?: AddMenuOptions;\n\t/**\n\t * Timer identifier for closing the menu.\n\t */\n\tclosingByLeave?: NodeJS.Timeout | null;\n\n\t/**\n\t * Creates an instance of the Menubar widget.\n\t * @param {string} id Unique identifier for the menubar.\n\t * @param {MenubarOptions} [options] Configuration options.\n\t */\n\tconstructor(id: string, options?: MenubarOptions)\n\t{\n\t\tthis.options = options ?? { autoOpen: false, sortEntries: false };\n\n\t\tthis.menu = [];\n\t\tthis.panels = [];\n\n\t\tthis.root = document.createElement(\"div\");\n\t\tthis.root.id = id;\n\t\tthis.root.className = \"litemenubar\";\n\n\t\tthis.content = document.createElement(\"ul\");\n\t\tthis.root.appendChild(this.content);\n\n\t\tthis.isOpen = false;\n\t\tthis.autoOpen = this.options.autoOpen;\n\t\tthis.sortEntries = this.options.sortEntries;\n\t\tthis.closingTime = 500;\n\t}\n\n\t/**\n\t * Clears all menu items and panels.\n\t */\n\tclear()\n\t{\n\t\tthis.content.innerHTML = \"\";\n\t\tthis.menu = [];\n\t\tthis.panels = [];\n\t}\n\n\t/**\n\t * Attaches the menubar to a specific panel.\n\t * @param {Panel} panel The panel to attach the menubar to.\n\t */\n\tattachToPanel(panel: Panel)\n\t{\n\t\tpanel.content.insertBefore(this.root, panel.content.firstChild);\n\t}\n\n\t/**\n\t * Adds a menu item to the menubar.\n\t * @param {string} path The path of the menu item (e.g., \"File/Open\").\n\t * @param {((value?: { checkbox?: boolean }) => void) | AddMenuOptions} [data={}] Callback function or options object.\n\t */\n\tadd(path: string, data: ((value?: { checkbox?: boolean }) => void) | AddMenuOptions = {})\n\t{\n\t\tif (typeof (data) == \"function\")\n\t\t{\n\t\t\tthis.data = { callback: data };\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.data = data;\n\t\t}\n\n\t\tconst prevLength = this.menu.length;\n\n\t\tconst tokens = path.split(\"/\");\n\t\tlet currentToken = 0;\n\t\tlet currentPos = 0;\n\t\tlet menu = this.menu;\n\t\tlet lastItem: SubMenu | undefined = undefined;\n\n\t\twhile (menu)\n\t\t{\n\t\t\tif (currentToken > 5) { throw (\"Error: Menubar too deep\"); }\n\t\t\t// Token not found in this menu, create it\n\t\t\tif (menu.length == currentPos)\n\t\t\t{\n\t\t\t\tconst subMenu: SubMenu = {\n\t\t\t\t\tname: \"\", parent: lastItem, children: [], data: undefined,\n\t\t\t\t\tdisable: function ()\n\t\t\t\t\t{\n\t\t\t\t\t\tif (this.data) { this.data.disabled = true; }\n\t\t\t\t\t},\n\t\t\t\t\tenable: function ()\n\t\t\t\t\t{\n\t\t\t\t\t\tif (this.data) { this.data.disabled = undefined; }\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tlastItem = subMenu;\n\n\t\t\t\tif (currentToken == tokens.length - 1) { subMenu.data = this.data; }\n\n\t\t\t\tsubMenu.name = tokens[currentToken];\n\t\t\t\tmenu.push(subMenu);\n\t\t\t\tcurrentToken++;\n\n\t\t\t\tif (currentToken == tokens.length) { break; }\n\n\t\t\t\tsubMenu.children = [];\n\t\t\t\tmenu = subMenu.children;\n\t\t\t\tcurrentPos = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Token found in this menu, get inside for next token\n\t\t\tif (menu[currentPos] && tokens[currentToken] == menu[currentPos].name)\n\t\t\t{\n\t\t\t\tif (currentToken < tokens.length - 1)\n\t\t\t\t{\n\t\t\t\t\tlastItem = menu[currentPos];\n\t\t\t\t\tif (menu[currentPos].children != undefined)\n\t\t\t\t\t{\n\t\t\t\t\t\tmenu = menu[currentPos].children!;\n\t\t\t\t\t}\n\t\t\t\t\tcurrentPos = 0;\n\t\t\t\t\tcurrentToken++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\telse // Last token\n\t\t\t\t{\n\t\t\t\t\tconsole.warn(`Warning: Adding menu that already exists: ${path}`);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcurrentPos++;\n\t\t}\n\n\t\tif (prevLength != this.menu.length) { this.updateMenu(); }\n\t}\n\n\t/**\n\t * Removes a menu item by its path.\n\t * @param {string} path The path of the menu item to remove.\n\t */\n\tremove(path: string)\n\t{\n\t\tconst menu = this.findMenu(path);\n\t\tif (!menu) { return; }\n\n\t\tif (Array.isArray(menu))\n\t\t{\n\t\t\t// This means that it's intended to delete a list and this is not allowed\n\t\t\treturn console.warn(\"Can't remove an entire list\");\n\t\t}\n\t\t// We are going to remove a single menu\n\t\tif (menu.parent && menu.parent.children)\n\t\t{\n\t\t\tconst index = menu.parent.children.indexOf(menu);\n\t\t\tif (index != -1)\n\t\t\t{\n\t\t\t\tmenu.parent.children.splice(index, 1);\n\t\t\t\tif (this.isOpen)\n\t\t\t\t{\n\t\t\t\t\tthis.hidePanels();\n\t\t\t\t\tconst evt = new PointerEvent(\"click\", {\n\t\t\t\t\t\tview: window,\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcancelable: true,\n\t\t\t\t\t\tclientX: 0,\n\t\t\t\t\t\tclientY: 0\n\t\t\t\t\t});\n\t\t\t\t\tif (menu.parent.element)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.showMenu(menu.parent, evt, menu.parent.element);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tconst index = this.menu.indexOf(menu);\n\t\t\tif (index != -1)\n\t\t\t{\n\t\t\t\tthis.menu.splice(index, 1);\n\t\t\t\tif (this.isOpen)\n\t\t\t\t{\n\t\t\t\t\tthis.hidePanels();\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Adds a separator to a menu.\n\t * @param {string} path The path where the separator should be added.\n\t * @param {number} [order] Optional order index.\n\t */\n\tseparator(path: string, order?: number)\n\t{\n\t\tconst menu = this.findMenu(path);\n\t\tif (!menu) { return; }\n\t\tif (Array.isArray(menu))\n\t\t{\n\t\t\t// This means that it's intended to delete a list and this is not allowed\n\t\t\treturn console.warn(\"Can't separate an entire list\");\n\t\t}\n\t\tif (menu.children)\n\t\t{\n\t\t\tmenu.children.push({\n\t\t\t\tname: \"\",\n\t\t\t\tchildren: undefined,\n\t\t\t\tdata: undefined,\n\t\t\t\tseparator: true,\n\t\t\t\torder: order ?? 10\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Returns the menu entry that matches this path.\n\t * @param {string} path The path to search for.\n\t * @returns {SubMenu | SubMenu[] | undefined} The found submenu or undefined.\n\t */\n\tfindMenu(path: string): SubMenu | SubMenu[] | undefined\n\t{\n\t\tconst tokens = path.split(\"/\");\n\t\tlet currentToken = 0;\n\t\tlet currentPos = 0;\n\t\tlet menu = this.menu;\n\n\t\twhile (currentToken <= 5)\n\t\t{\n\t\t\t// No more tokens, return last found menu\n\t\t\tif (currentToken == tokens.length) { return menu; }\n\n\t\t\t// This menu doesn't have more entries\n\t\t\tif (menu.length <= currentPos) { return undefined; }\n\n\t\t\tif (tokens[currentToken] == \"*\") { return menu[currentPos].children; }\n\n\t\t\t// Token found in this menu, get inside for next token\n\t\t\tif (tokens[currentToken] == menu[currentPos].name)\n\t\t\t{\n\t\t\t\tif (currentToken == tokens.length - 1) // Last token\n\t\t\t\t{\n\t\t\t\t\treturn menu[currentPos];\n\t\t\t\t}\n\t\t\t\tif (menu[currentPos].children)\n\t\t\t\t{menu = menu[currentPos].children!;}\n\t\t\t\tcurrentPos = 0;\n\t\t\t\tcurrentToken++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Check next entry in this menu\n\t\t\tcurrentPos++;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Updates the top main menu display based on the internal structure.\n\t */\n\tupdateMenu()\n\t{\n\t\tthis.content.innerHTML = \"\";\n\t\tconst clickCallback = (element: SubMenuElement, e: PointerEvent) =>\n\t\t{\n\t\t\tconst el = element;\n\t\t\tconst item = el.data;\n\n\t\t\tif (item && item.data && item.data.callback && typeof (item.data.callback) == \"function\")\n\t\t\t{\n\t\t\t\titem.data.callback(item.data);\n\t\t\t}\n\n\t\t\tif (!this.isOpen && item)\n\t\t\t{\n\t\t\t\tthis.isOpen = true;\n\t\t\t\tthis.showMenu(item, e, el);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.isOpen = false;\n\t\t\t\tthis.hidePanels();\n\t\t\t}\n\t\t};\n\t\tconst mouseOverCallback = (element: SubMenuElement, e: MouseEvent) =>\n\t\t{\n\t\t\tthis.hidePanels();\n\t\t\tif (this.isOpen || this.autoOpen)\n\t\t\t{\n\t\t\t\tconst el = element;\n\t\t\t\tif (el.data)\n\t\t\t\t{\n\t\t\t\t\tthis.showMenu(el.data, e, el);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tfor (const i in this.menu)\n\t\t{\n\t\t\tconst element = document.createElement(\"li\") as SubMenuElement;\n\t\t\telement.innerHTML = \"<span class='icon'></span><span class='name'>\" + this.menu[i].name + \"</span>\";\n\t\t\tthis.content.appendChild(element);\n\t\t\telement.data = this.menu[i];\n\t\t\tthis.menu[i].element = element;\n\n\t\t\t/* ON CLICK TOP MAIN MENU ITEM */\n\t\t\telement.addEventListener(\"click\", clickCallback.bind(undefined, element));\n\t\t\telement.addEventListener(\"mouseover\", mouseOverCallback.bind(undefined, element));\n\t\t}\n\t}\n\n\t/**\n\t * Hides all open dropdown panels.\n\t */\n\thidePanels()\n\t{\n\t\tif (!this.panels.length) { return; }\n\n\t\tthis.isOpen = false;\n\t\tfor (const i in this.panels)\n\t\t{\n\t\t\tLiteGUI.remove(this.panels[i]);\n\t\t}\n\t\tthis.panels = [];\n\t}\n\n\t/**\n\t * Creates the panel with the drop menu and shows it.\n\t * @param {SubMenu} menu The submenu structure to display.\n\t * @param {MouseEvent} e The mouse event that triggered the show.\n\t * @param {HTMLElement} root The element relative to which the menu is shown.\n\t * @param {boolean} [isSubmenu=false] Whether this is a nested submenu.\n\t */\n\tshowMenu(menu: SubMenu, e: MouseEvent, root: HTMLElement, isSubmenu: boolean = false)\n\t{\n\t\tthis.isOpen = true;\n\t\tif (!isSubmenu) { this.hidePanels(); }\n\n\t\tif (!menu.children || !menu.children.length) { return; }\n\n\t\tif (this.closingByLeave) { clearInterval(this.closingByLeave); }\n\n\t\tconst element = document.createElement(\"div\");\n\t\telement.className = \"litemenubar-panel\";\n\n\t\tconst sortedEntries = [];\n\t\tfor (const i in menu.children)\n\t\t{\n\t\t\tsortedEntries.push(menu.children[i]);\n\t\t}\n\n\t\tif (this.sortEntries)\n\t\t{\n\t\t\tsortedEntries.sort((a, b) =>\n\t\t\t{\n\t\t\t\tlet aOrder = 10;\n\t\t\t\tlet bOrder = 10;\n\t\t\t\tconst aa = a;\n\t\t\t\tconst bb = b;\n\t\t\t\tif (aa && aa.order != null) { aOrder = aa.order; }\n\t\t\t\tif (aa && aa.separator && aa.order != null) { aOrder = aa.order; }\n\t\t\t\tif (bb && bb.order != null) { bOrder = bb.order; }\n\t\t\t\tif (bb && bb.separator && bb.order != null) { bOrder = bb.order; }\n\t\t\t\treturn aOrder - bOrder;\n\t\t\t});\n\t\t}\n\n\t\t/* ON CLICK SUBMENU ITEM */\n\t\tconst clickCallback = (element: MenuBarParagraphElement, e: PointerEvent) =>\n\t\t{\n\t\t\tconst el = element;\n\t\t\tconst item = el.data;\n\t\t\tif (item && item.data)\n\t\t\t{\n\t\t\t\tif (item.data.disabled) { return; }\n\n\t\t\t\t// To change variables directly\n\t\t\t\tif (item.data.instance && item.data.property)\n\t\t\t\t{\n\t\t\t\t\tif (item.data.type == \"checkbox\")\n\t\t\t\t\t{\n\t\t\t\t\t\titem.data.instance[item.data.property] = !item.data.instance[item.data.property];\n\t\t\t\t\t\tif (item.data.instance[item.data.property])\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tel.classList.add(\"checked\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tel.classList.remove(\"checked\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (\"value\" in item.data)\n\t\t\t\t\t{\n\t\t\t\t\t\tconst prop = item.data.property;\n\t\t\t\t\t\tif (prop)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t(item.data.instance)[prop] = item.data.value ?? false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// To have a checkbox behavior\n\t\t\t\tif (item.data.checkbox != null)\n\t\t\t\t{\n\t\t\t\t\titem.data.checkbox = !item.data.checkbox;\n\t\t\t\t\tif (item.data.checkbox)\n\t\t\t\t\t{\n\t\t\t\t\t\tel.classList.add(\"checked\");\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tel.classList.remove(\"checked\");\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Execute a function\n\t\t\t\tif (item.data && typeof (item.data.callback) == \"function\")\n\t\t\t\t{\n\t\t\t\t\titem.data.callback(item.data);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// More menus\n\t\t\tif (item && item.children && item.children.length)\n\t\t\t{\n\t\t\t\tthis.showMenu(item, e, el, true);\n\t\t\t}\n\t\t\telse if (item && !item.data?.keepOpen)\n\t\t\t{\n\t\t\t\tthis.isOpen = false;\n\t\t\t\tthis.hidePanels();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.isOpen = false;\n\t\t\t\tthis.hidePanels();\n\t\t\t\tthis.isOpen = true;\n\t\t\t\tthis.showMenu(menu, e, root, isSubmenu);\n\t\t\t}\n\t\t};\n\t\tfor (const i in sortedEntries)\n\t\t{\n\t\t\tconst item = document.createElement(\"p\") as MenuBarParagraphElement;\n\t\t\tconst menuItem = sortedEntries[i];\n\n\t\t\titem.className = 'litemenu-entry ' + (item.children ? \" submenu\" : \"\");\n\t\t\tconst hasSubmenu = menuItem.children && menuItem.children.length;\n\n\t\t\tif (hasSubmenu) { item.classList.add(\"has_submenu\"); }\n\n\t\t\tif (menuItem && menuItem.name)\n\t\t\t{\n\t\t\t\titem.innerHTML = \"<span class='icon'></span><span class='name'>\" + menuItem.name + (hasSubmenu ? \"<span class='more'>+</span>\" : \"\") + \"</span>\";\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\titem.classList.add(\"separator\");\n\t\t\t\t// Item.innerHTML = \"<span class='separator'></span>\";\n\t\t\t}\n\n\t\t\titem.data = menuItem;\n\n\t\t\t// Check if it has to show the item being 'checked'\n\t\t\tif (item.data.data)\n\t\t\t{\n\t\t\t\tconst data = item.data.data;\n\n\t\t\t\tconst checked = (data.type == \"checkbox\" && data.instance && data.property &&\n\t\t\t\t\tdata.instance[data.property] == true) || data.checkbox == true ||\n\t\t\t\t\t(data.instance && data.property && \"value\" in data && data.instance[data.property] == data.value) ||\n\t\t\t\t\t(typeof (data.isChecked) == \"function\" && data.isChecked(data.instance, data));\n\n\t\t\t\tif (checked) { item.className += \" checked\"; }\n\n\t\t\t\tif (data.disabled) { item.className += \" disabled\"; }\n\t\t\t}\n\n\t\t\titem.addEventListener(\"click\", clickCallback.bind(undefined, item));\n\n\t\t\titem.addEventListener(\"mouseenter\", () =>\n\t\t\t{\n\t\t\t\tif ((this.autoOpen || (item.data && item.data.data && item.data.data.autoOpen)) && item.classList.contains(\"has_submenu\"))\n\t\t\t\t{\n\t\t\t\t\titem.click();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\telement.appendChild(item);\n\t\t}\n\n\t\telement.addEventListener(\"mouseleave\", () =>\n\t\t{\n\t\t\tif (this.closingByLeave)\n\t\t\t{\n\t\t\t\tclearInterval(this.closingByLeave);\n\t\t\t}\n\n\t\t\tthis.closingByLeave = setTimeout(() =>\n\t\t\t{\n\t\t\t\tthis.isOpen = false;\n\t\t\t\tthis.hidePanels();\n\t\t\t}, this.closingTime);\n\t\t});\n\n\t\telement.addEventListener(\"mouseenter\", () =>\n\t\t{\n\t\t\tif (this.closingByLeave)\n\t\t\t{\n\t\t\t\tclearInterval(this.closingByLeave);\n\t\t\t}\n\t\t\tthis.closingByLeave = null;\n\t\t});\n\n\t\t// Compute X and Y for menu\n\t\tconst box = root.getBoundingClientRect();\n\t\tif (isSubmenu)\n\t\t{\n\t\t\telement.style.left = `${box.right - 5}px`;\n\t\t\telement.style.top = `${box.top - 4}px`;\n\t\t}\n\t\telse\n\t\t{\n\t\t\telement.style.left = `${box.left}px`;\n\t\t\telement.style.top = `${box.bottom}px`;\n\t\t}\n\n\t\tthis.panels.push(element);\n\t\tdocument.body.appendChild(element);\n\t}\n}","import { LiteGUIObject } from \"./@types/globals\";\nimport { SizeToCSS, Trigger } from \"./utilities\";\nimport { SpecialCode } from \"./core\";\n\n/**\n * Interface extending HTMLDivElement to include a reference to the Panel instance.\n */\nexport interface PanelRoot extends HTMLDivElement\n{\n\t/**\n\t * Reference to the Panel instance associated with this element.\n\t */\n\tpanel: Panel;\n\t/**\n\t * Unique identifier for the panel element.\n\t */\n\tid: string;\n}\n\n/**\n * Options for configuring a Panel.\n */\nexport interface PanelOptions\n{\n\t/**\n\t * Optional unique identifier for the panel.\n\t */\n\tid?: string;\n\t/**\n\t * Whether the panel content should be scrollable.\n\t * @default false\n\t */\n\tscrollable?: boolean;\n\t/**\n\t * Absolute position of the panel as [left, top].\n\t */\n\tposition?: (number | string)[];\n\t/**\n\t * Height of the panel.\n\t */\n\theight?: number | string;\n\t/**\n\t * Width of the panel.\n\t */\n\twidth?: number | string;\n\t/**\n\t * Title to display in the panel header.\n\t */\n\ttitle?: string;\n\t/**\n\t * Additional CSS class names for the panel.\n\t */\n\tclassName?: string;\n\t/**\n\t * Initial HTML content string for the panel.\n\t */\n\tcontent?: string;\n\t/**\n\t * Whether to handle the visibility of the panel.\n\t */\n\thide?: boolean;\n\t/**\n\t * Whether to show the close button.\n\t */\n\tclose?: boolean | string;\n}\n\n/** **************** PANEL **************/\n\n/**\n * Panel class for creating a UI panel with a header, content area, and footer.\n * @class Panel\n * @example\n * ```typescript\n * const panel = new Panel(\"my-panel\", { title: \"Settings\", width: 300 });\n * document.body.appendChild(panel.root);\n * ```\n */\nexport class Panel implements LiteGUIObject\n{\n\t/**\n\t * Default height for the panel title.\n\t */\n\tstatic TITLE_HEIGHT: string = \"20px\";\n\n\t/**\n\t * The root HTMLDivElement of the panel.\n\t */\n\troot: PanelRoot;\n\n\t/**\n\t * Configuration options for the panel.\n\t */\n\toptions: PanelOptions;\n\n\t/**\n\t * The content container element.\n\t */\n\tcontent: HTMLDivElement;\n\n\t/**\n\t * The footer container element.\n\t */\n\tprivate _footer: HTMLDivElement;\n\n\t/**\n\t * The header container element, if title is provided.\n\t */\n\tprivate _header?: HTMLDivElement;\n\n\t/**\n\t * Creates an instance of the Panel.\n\t * @param {string | PanelOptions} id The unique identifier or an options object.\n\t * @param {PanelOptions} [options] Configuration options if the first argument is an ID.\n\t */\n\tconstructor(id: string | PanelOptions, options?: PanelOptions)\n\t{\n\t\tif (typeof id != 'string')\n\t\t{\n\t\t\tconst temp = id;\n\t\t\tid = temp.id ?? \"\";\n\t\t\tif (!options && temp != undefined)\n\t\t\t{\n\t\t\t\toptions = temp;\n\t\t\t}\n\t\t}\n\n\t\tconst op = this.options = options = options ?? {};\n\n\t\tconst root = this.root = document.createElement(\"div\") as PanelRoot;\n\t\troot.id = id;\n\n\t\troot.className = `litepanel ${op.className ?? \"\"}`;\n\t\troot.panel = this;\n\n\t\tlet code = \"\";\n\t\tif (op.title || op.close)\n\t\t{\n\t\t\tlet headerContent = \"\";\n\t\t\tif (op.title)\n\t\t\t{headerContent += `${op.title}`;}\n\n\t\t\tif (op.close)\n\t\t\t{\n\t\t\t\theaderContent += `<div class='buttons'><button class='litebutton mini-button close-button'>${SpecialCode.close}</button></div>`;\n\t\t\t}\n\n\t\t\tcode += `<div class='panel-header'>${headerContent}</div>`;\n\t\t}\n\t\tcode += `<div class='content'>${op.content ?? \"\"}</div>`;\n\t\tcode += \"<div class='panel-footer'></div>\";\n\t\troot.innerHTML = code;\n\n\t\tif (op.title || op.close)\n\t\t{\n\t\t\tthis._header = this.root.querySelector(\".panel-header\")!;\n\t\t\tif (op.close)\n\t\t\t{\n\t\t\t\tconst closeButton = this._header.querySelector(\".close-button\");\n\t\t\t\tif (closeButton)\n\t\t\t\t{closeButton.addEventListener(\"click\", this.close.bind(this));}\n\t\t\t}\n\t\t}\n\n\t\tthis.content = this.root.querySelector(\".content\") as HTMLDivElement;\n\t\tthis._footer = this.root.querySelector(\".panel-footer\") as HTMLDivElement;\n\n\t\tif (op.width) { this.root.style.width = SizeToCSS(op.width) as string; }\n\t\tif (op.height) { this.root.style.height = SizeToCSS(op.height) as string; }\n\t\tif (op.position)\n\t\t{\n\t\t\tthis.root.style.position = \"absolute\";\n\t\t\tthis.root.style.left = SizeToCSS(op.position[0]) as string;\n\t\t\tthis.root.style.top = SizeToCSS(op.position[1]) as string;\n\t\t}\n\n\t\tif (op.scrollable == true) { this.content.style.overflow = \"auto\"; }\n\n\t\tif (op.hide) { this.hide(); }\n\t}\n\n\t/**\n\t * Adds an item to the panel's content area.\n\t * @param {LiteGUIObject | HTMLElement} item The item to add (either a LiteGUI component or an HTMLElement).\n\t */\n\tadd(item: LiteGUIObject | HTMLElement)\n\t{\n\t\tthis.content.appendChild(\"root\" in item ? item.root : item);\n\t}\n\n\t/**\n\t * Shows the panel.\n\t */\n\tshow()\n\t{\n\t\tthis.root.style.display = \"\";\n\t\tTrigger(this.root, \"shown\");\n\t}\n\n\t/**\n\t * Hides the panel.\n\t */\n\thide()\n\t{\n\t\tthis.root.style.display = \"none\";\n\t\tTrigger(this.root, \"hidden\");\n\t}\n\n\t/**\n\t * Closes the panel (removes it from DOM).\n\t */\n\tclose()\n\t{\n\t\tif (this.root.parentNode)\n\t\t{\n\t\t\tthis.root.parentNode.removeChild(this.root);\n\t\t}\n\t\tTrigger(this.root, \"closed\");\n\t}\n\n\t/**\n\t * Clears all content from the panel.\n\t */\n\tclear()\n\t{\n\t\tconst content = this.content;\n\t\twhile (content.firstChild != undefined)\n\t\t{\n\t\t\tcontent.removeChild(content.firstChild);\n\t\t}\n\t}\n}","import { LiteGUIObject } from \"./@types/globals\";\nimport { SizeToCSS } from \"./utilities\";\n\n/**\n * Configuration options for the Table widget.\n */\nexport interface TableOptions\n{\n\t/** Initial data for the table rows. */\n\tdata?: (string | number | (string | number)[] | Record<string, string | number>)[];\n\t/** Pre-existing row elements to include. */\n\trows?: Array<HTMLTableRowElement>;\n\t/** Specific height for the table. */\n\theight?: number | string;\n\t/** Whether the table should have a scrollbar. */\n\tscrollable?: boolean;\n\t/** Column definitions. */\n\tcolumns?: Array<string | TableColumn>;\n}\n\n/**\n * Definition of a column in the table.\n */\nexport interface TableColumn\n{\n\t/** The header cell element for this column. */\n\ttableElement?: HTMLTableCellElement;\n\t/** CSS class to apply to cells in this column. */\n\tclassName?: string;\n\t/** The property name in the data object mapping to this column. */\n\tfield?: string;\n\t/** Width of the column (e.g., \"100px\", \"50%\"). */\n\twidth?: string | number;\n\t/** Display name of the column in the header. */\n\tname?: string;\n}\n\n/**\n * A widget for displaying tabular data.\n * @class Table\n * @example\n * ```typescript\n * const table = new LiteGUI.Table({\n * columns: [{ name: \"Name\", field: \"name\" }, { name: \"Age\", field: \"age\" }],\n * data: [{ name: \"Alice\", age: 30 }, { name: \"Bob\", age: 25 }]\n * });\n * parent.appendChild(table.root);\n * ```\n */\nexport class Table implements LiteGUIObject\n{\n\t/** The root HTMLTableElement of the widget. */\n\troot: HTMLTableElement;\n\t/** Array of column definitions. */\n\tcolumns: Array<TableColumn>;\n\t/** Array of row elements. */\n\trows: Array<HTMLTableRowElement>;\n\t/** Array of field names corresponding to columns. */\n\tcolumnFields: Array<string>;\n\t/** The data currently displayed in the table. */\n\tdata: (string | number | (string | number)[] | Record<string, string | number>)[];\n\t/** The header row element. */\n\theader?: HTMLTableRowElement;\n\t/** Current selected value (internal usage). */\n\tvalue?: string;\n\n\t/** Internal flag to trigger header update. */\n\tprivate _mustUpdateHeader: boolean;\n\n\t/**\n\t * Creates an instance of the Table widget.\n\t * @param {TableOptions} [options] Configuration options.\n\t */\n\tconstructor(options?: TableOptions)\n\t{\n\t\toptions = options ?? {};\n\n\t\tthis.root = document.createElement(\"table\");\n\t\tthis.root.classList.add(\"litetable\");\n\n\t\tthis.columns = [];\n\t\tthis.columnFields = [];\n\t\tthis.rows = [];\n\t\tthis.data = [];\n\n\t\tthis._mustUpdateHeader = true;\n\n\t\tif (options.scrollable) { this.root.style.overflow = \"auto\"; }\n\n\t\tif (options.height) { this.root.style.height = SizeToCSS(options.height) as string; }\n\n\t\tif (options.columns) { this.setColumns(options.columns); }\n\n\t\tif (options.rows && options.data) { this.setRows(options.data); }\n\t}\n\n\t/**\n\t * Sets the rows of the table with new data.\n\t * @param {(string | number | (string | number)[] | Record<string, string | number>)[]} data The new data array.\n\t * @param {boolean} [reuse=false] Whether to try to reuse existing row elements (optimization).\n\t */\n\tsetRows(data: (string | number | (string | number)[] | Record<string, string | number>)[],\n\t\treuse: boolean = false)\n\t{\n\t\tthis.data = data;\n\t\tthis.updateContent(reuse);\n\t}\n\n\t/**\n\t * Adds a single row to the table.\n\t * @param {string | number | (string | number)[] | Record<string, string | number>} row The data for the row.\n\t * @param {boolean} skipAdd If true, does not add the row to the internal data array (used when rebuilding from existing data).\n\t * @returns {HTMLTableRowElement} The created row element.\n\t */\n\taddRow(row: string | number | (string | number)[] | Record<string, string | number>,\n\t\tskipAdd: boolean): HTMLTableRowElement\n\t{\n\t\tconst tr = document.createElement(\"tr\");\n\n\t\t// Create cells\n\t\tfor (let j = 0; j < this.columnFields.length; ++j)\n\t\t{\n\t\t\tconst td = document.createElement(\"td\");\n\n\t\t\tlet value: string | string[] | Record<string, string | number> | undefined | number;\n\n\t\t\tif (Array.isArray(row))\n\t\t\t{\n\t\t\t\tvalue = row[j];\n\t\t\t}\n\t\t\telse // Object\n\t\t\t{\n\t\t\t\tvalue = row[this.columnFields[j] as keyof object];\n\t\t\t}\n\t\t\tvalue = value ?? \"\";\n\n\t\t\ttd.innerHTML = value as string;\n\t\t\tthis.value = this.columnFields[j];\n\n\t\t\tconst column = this.columns[j] as TableColumn;\n\t\t\tif (column === undefined) { break; }\n\t\t\tif (column.className) { td.className = column.className; }\n\t\t\tif (column.width) { td.style.width = column.width as string; }\n\t\t\ttr.appendChild(td);\n\t\t}\n\n\t\tthis.root.appendChild(tr);\n\t\tthis.rows.push(tr);\n\t\tif (!skipAdd) { this.data.push(row); }\n\n\t\treturn tr;\n\t}\n\n\t/**\n\t * Updates an existing row with new data.\n\t * @param {number} index The index of the row to update.\n\t * @param {string | number | (string | number)[] | Record<string, string | number>} row The new data for the row.\n\t * @returns {HTMLTableRowElement | undefined} The updated row element, or undefined if not found.\n\t */\n\tupdateRow(index: number,\n\t\trow: string | number | (string | number)[] | Record<string, string | number>)\n\t{\n\t\tthis.data[index] = row;\n\n\t\tconst tr = this.rows[index];\n\t\tif (!tr)\n\t\t{ return; }\n\n\t\tconst cells = tr.querySelectorAll(\"td\");\n\t\tfor (let j = 0; j < cells.length; ++j)\n\t\t{\n\t\t\tconst column = this.columns[j];\n\n\t\t\tlet value: string | number | string[] | Record<string, string | number> | undefined;\n\n\t\t\tif (Array.isArray(row))\n\t\t\t{\n\t\t\t\tvalue = row[j];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvalue = row[column.field as keyof object];\n\t\t\t}\n\n\t\t\tvalue = value ?? \"\";\n\n\t\t\tcells[j].innerHTML = value as string;\n\t\t}\n\t\treturn tr;\n\t}\n\n\t/**\n\t * Updates the content of a specific cell.\n\t * @param {number} row The row index.\n\t * @param {number} cell The cell (column) index.\n\t * @param {string} data The new HTML content.\n\t * @returns {HTMLElement | undefined} The updated cell element, or undefined if not found.\n\t */\n\tupdateCell(row: number, cell: number, data: string)\n\t{\n\t\tconst tr = this.rows[row];\n\t\tif (!tr) { return; }\n\t\tconst newCell = tr.childNodes[cell] as HTMLElement | null;\n\t\tif (!newCell) { return; }\n\t\tnewCell.innerHTML = data;\n\t\treturn newCell;\n\t}\n\n\n\t/**\n\t * Defines the columns for the table.\n\t * @param {(string | number | TableColumn)[]} columns Array of column names or definitions.\n\t */\n\tsetColumns(columns: (string | number | TableColumn)[])\n\t{\n\t\tthis.columns.length = 0;\n\t\tthis.columnFields.length = 0;\n\n\t\tconst avgWidth = ((Math.floor(100 / columns.length)).toFixed(1)) + \"%\";\n\n\t\tconst rest = [];\n\n\t\tfor (let i = 0; i < columns.length; ++i)\n\t\t{\n\t\t\tlet col: string | number | object | TableColumn = columns[i];\n\n\t\t\tif (col === null || col === undefined) { continue; }\n\n\t\t\t// Allow to pass just strings or numbers instead of objects\n\t\t\tif (typeof col === \"string\" || typeof col === \"number\") { col = { name: String(col) }; }\n\n\t\t\tconst tableCol = col as TableColumn;\n\n\t\t\tconst column: TableColumn = {\n\t\t\t\tname: tableCol.name || \"\",\n\t\t\t\twidth: SizeToCSS(tableCol.width || avgWidth) as string,\n\t\t\t\tfield: (tableCol.field || tableCol.name || \"\").toLowerCase(),\n\t\t\t\tclassName: tableCol.className\n\t\t\t};\n\n\t\t\t// Last\n\t\t\tif (i == columns.length - 1)\n\t\t\t{\n\t\t\t\tcolumn.width = `calc( 100% - ( ${rest.join(\" + \")}) )`;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\trest.push(column.width);\n\t\t\t}\n\n\t\t\tthis.columns.push(column);\n\t\t\tthis.columnFields.push(column.field as string);\n\t\t}\n\n\t\tthis._mustUpdateHeader = true;\n\t\tthis.updateContent();\n\t}\n\n\t/**\n\t * Rebuilds or updates the table content based on the current data.\n\t * @param {boolean} [reuse=false] Whether to reuse existing DOM elements.\n\t */\n\tupdateContent(reuse: boolean = false)\n\t{\n\t\tthis.root.innerHTML = \"\";\n\n\t\t// Update header\n\t\tif (this._mustUpdateHeader)\n\t\t{\n\t\t\tthis.header = document.createElement(\"tr\");\n\t\t\tfor (let i = 0; i < this.columns.length; ++i)\n\t\t\t{\n\t\t\t\tconst column = this.columns[i] as TableColumn;\n\t\t\t\tconst th = document.createElement(\"th\");\n\t\t\t\tth.innerHTML = column.name as string;\n\t\t\t\tif (column.width)\n\t\t\t\t{\n\t\t\t\t\tth.style.width = column.width as string;\n\t\t\t\t}\n\t\t\t\tcolumn.tableElement = th;\n\t\t\t\tthis.header.appendChild(th);\n\t\t\t}\n\t\t\tthis._mustUpdateHeader = false;\n\t\t}\n\t\tthis.root.appendChild(this.header as HTMLTableRowElement);\n\n\t\tif (!this.data) { return; }\n\n\t\tif (this.data.length != this.rows.length) { reuse = false; }\n\n\t\tif (reuse)\n\t\t{\n\t\t\tfor (let i = 0; i < this.rows.length; ++i)\n\t\t\t{\n\t\t\t\tconst dataRow = this.data[i];\n\t\t\t\tconst tr = this.updateRow(i, dataRow);\n\t\t\t\tthis.root.appendChild(tr!);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.rows.length = 0;\n\n\t\t\t// Create rows\n\t\t\tfor (let i = 0; i < this.data.length; ++i)\n\t\t\t{\n\t\t\t\tconst row = this.data[i];\n\t\t\t\tthis.addRow(row, true);\n\t\t\t}\n\t\t}\n\t}\n}","import { SpecialCode } from \"./core\";\nimport { LiteGUIObject } from \"./@types/globals/index\";\nimport { Trigger } from \"./utilities\";\n\n/**\n * Interface extending HTMLDivElement to include a reference to the Tabs instance.\n */\nexport interface TabsRootDivElement extends HTMLDivElement\n{\n\t/**\n\t * Reference to the Tabs widget instance associated with this element.\n\t */\n\ttabs?: Tabs;\n}\n\n/**\n * Interface extending HTMLLIElement to include tab-specific properties.\n */\nexport interface TabInfoLIElement extends HTMLLIElement\n{\n\t/**\n\t * Indicates if this tab is currently selected.\n\t */\n\tselected?: boolean;\n\t/**\n\t * Options associated with this specific tab.\n\t */\n\toptions?: TabsOptions;\n\t/**\n\t * Reference to the parent Tabs instance.\n\t */\n\ttabs?: Tabs;\n\t/**\n\t * Reference to the TabInfo object associated with this element.\n\t */\n\tinfo?: TabInfo;\n}\n\n/**\n * Represents a single tab within the Tabs widget.\n * Stores references to the DOM elements and state of the tab.\n * @class TabInfo\n */\nexport class TabInfo\n{\n\t/**\n\t * Unique identifier for the tab.\n\t */\n\tid: string;\n\t/**\n\t * The list item element representing the tab in the tab bar.\n\t */\n\ttab: TabInfoLIElement;\n\t/**\n\t * The container element for the tab's content.\n\t */\n\tcontent: HTMLDivElement;\n\t/**\n\t * The element containing the tab's title text.\n\t */\n\ttitle: Element;\n\t/**\n\t * Callback function triggered when the tab is closed.\n\t */\n\tonClose?: (tab: TabInfo) => void;\n\t/**\n\t * Indicates if the tab is currently selected.\n\t */\n\tselected?: boolean;\n\n\t/**\n\t * Creates a new TabInfo instance.\n\t * @param {string} id Unique identifier for the tab.\n\t * @param {TabInfoLIElement} tab The list item element.\n\t * @param {HTMLDivElement} content The content container element.\n\t * @param {Element} title The title element.\n\t */\n\tconstructor(id: string, tab: TabInfoLIElement, content: HTMLDivElement, title: Element)\n\t{\n\t\tthis.id = id;\n\t\tthis.tab = tab;\n\t\tthis.content = content;\n\t\tthis.title = title;\n\t}\n\n\t/**\n\t * Appends an element to the tab's content area.\n\t * @param {LiteGUIObject | HTMLElement} element The element to append.\n\t */\n\tadd(element: LiteGUIObject | HTMLElement)\n\t{\n\t\tif (!element) { return; }\n\t\tthis.content.appendChild(\"root\" in element ? element.root : element);\n\t}\n\n\t/**\n\t * Sets the title of the tab.\n\t * @param {string} title The new title text.\n\t */\n\tsetTitle(title: string)\n\t{\n\t\tthis.title.innerHTML = title;\n\t}\n\n\t/**\n\t * Simulates a click on the tab.\n\t */\n\tclick()\n\t{\n\t\tTrigger(this.tab, \"click\");\n\t}\n}\n\n/**\n * Configuration options for the Tabs widget or individual tabs.\n */\nexport interface TabsOptions\n{\n\t/**\n\t * If true, the tab will be initially selected.\n\t */\n\tselected?: boolean;\n\t/**\n\t * Callback triggered when a tab is closed.\n\t */\n\tonClose?: (tab: TabInfo) => void;\n\t/**\n\t * Callback triggered when a tab is selected/clicked.\n\t */\n\tcallback?: (tab: string, event: PointerEvent | boolean) => void;\n\t/**\n\t * Callback triggered when leaving a tab.\n\t */\n\tonLeave?: (tab: TabInfo) => void;\n\t/**\n\t * Callback triggered on right-click (context menu).\n\t */\n\tonContextCall?: (tab: TabInfo) => void;\n\t/**\n\t * Function to check if a tab can be opened. If it returns false, the tab won't open.\n\t */\n\tonCanOpen?: (tab: TabInfoLIElement) => boolean;\n\t/**\n\t * Additional CSS class names for the tab content container.\n\t */\n\tclassName?: string;\n\t/**\n\t * Parent element to append the tabs widget to.\n\t */\n\tparent?: string | HTMLDivElement;\n\t/**\n\t * Height of the widget.\n\t */\n\theight?: string | number;\n\t/**\n\t * Width of the widget.\n\t */\n\twidth?: string | number;\n\t/**\n\t * Index to insert the tab at.\n\t */\n\tindex?: number;\n\t/**\n\t * HTML string for a large icon.\n\t */\n\tbigicon?: string;\n\t/**\n\t * Title text of the tab.\n\t */\n\ttitle?: string;\n\t/**\n\t * If true, events won't be triggered during setup.\n\t */\n\tskipCallbacks?: boolean;\n\t/**\n\t * Initial HTML content or element for the tab.\n\t */\n\tcontent?: string | HTMLElement;\n\t/**\n\t * If true, the tab will have a close button.\n\t */\n\tclosable?: boolean;\n\t/**\n\t * Width of the tab element itself.\n\t */\n\ttabWidth?: number | string;\n\t/**\n\t * Additional CSS class names for the tab element.\n\t */\n\ttabClassName?: string;\n\t/**\n\t * ID for the widget or tab.\n\t */\n\tid?: string;\n\t/**\n\t * Size options (e.g., \"full\").\n\t */\n\tsize?: string | number;\n\t/**\n\t * Layout mode: \"horizontal\" or \"vertical\".\n\t */\n\tmode?: \"horizontal\" | \"vertical\";\n\t/**\n\t * If true, acts as a button rather than a switchable tab.\n\t */\n\tbutton?: boolean;\n\t/**\n\t * If true, tabs switch automatically on hover/drag.\n\t */\n\tautoswitch?: boolean;\n\t/**\n\t * If true, adds a \"+\" tab for creating new tabs.\n\t */\n\taddPlusTab?: boolean;\n\t/**\n\t * If true, allows double-clicking the tab title to rename it.\n\t */\n\tallowRename?: boolean;\n}\n\n/**\n * Widget that manages multiple tabs and their associated content.\n * Supports horizontal and vertical modes, dynamic adding/removing of tabs, and various events.\n *\n * @class Tabs\n * @example\n * ```typescript\n * const tabs = new Tabs({ mode: \"horizontal\", size: \"full\" });\n * tabs.addTab(\"Home\", { title: \"Home\", content: \"Welcome!\" });\n * parent.appendChild(tabs.root);\n * ```\n */\nexport class Tabs implements LiteGUIObject\n{\n\troot: TabsRootDivElement;\n\toptions: TabsOptions;\n\tmode: \"horizontal\" | \"vertical\";\n\tcurrentTab: number;\n\tpreviousTab: number;\n\tlist: HTMLUListElement;\n\ttabsRoot: HTMLElement;\n\ttabs: { [key: string]: TabInfo } = {};\n\ttabsByIndex: TabInfo[];\n\tselected?: string;\n\tonchange?: CallableFunction;\n\tplusTab?: TabInfo;\n\tplusTabCallbacks: ((tab: string, event: PointerEvent | boolean) => void)[] = [];\n\tprivate _timeoutMouseOver?: NodeJS.Timeout;\n\tstatic TABS_WIDTH: number = 64;\n\tstatic TABS_HEIGHT: number = 26;\n\n\t/**\n\t * Creates an instance of the Tabs widget.\n\t * @param {TabsOptions} [options] Configuration options.\n\t * @param {\"horizontal\" | \"vertical\"} [options.mode=\"horizontal\"] Layout mode: \"vertical\" or \"horizontal\".\n\t * @param {string|number} [options.size] Size of the widget (e.g., \"full\" for 100%).\n\t * @param {string|number} [options.width] Explicit width.\n\t * @param {string|number} [options.height] Explicit height.\n\t * @param {boolean} [options.autoswitch] If true, switches tabs on hover/drag.\n\t * @param {boolean} [options.addPlusTab] If true, adds a \"+\" tab for creating new tabs.\n\t * @param {string|HTMLDivElement} [options.parent] Parent element to attach the widget to.\n\t */\n\tconstructor(options?: TabsOptions)\n\t{\n\t\tconst op = options ?? {};\n\t\tthis.options = op;\n\n\t\tconst mode = this.mode = op.mode ?? \"horizontal\";\n\n\t\tconst root = document.createElement(\"div\") as TabsRootDivElement;\n\t\tif (op.id) { root.id = op.id; }\n\t\troot.className = \"litetabs \" + mode;\n\t\troot.tabs = this;\n\t\tthis.root = root;\n\n\t\t// Initialize tab tracking variables, using -1 to indicate no tab selected.\n\t\tthis.currentTab = -1;\n\t\tthis.previousTab = -1;\n\t\tif (mode == \"horizontal\")\n\t\t{\n\t\t\t// Handle size options for horizontal mode\n\t\t\tif (op.size)\n\t\t\t{\n\t\t\t\tif (op.size == \"full\")\n\t\t\t\t{\n\t\t\t\t\tthis.root.style.height = \"100%\";\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.root.style.height = op.size.toString();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (mode == \"vertical\")\n\t\t{\n\t\t\t// Handle size options for vertical mode\n\t\t\tif (op.size)\n\t\t\t{\n\t\t\t\tif (op.size == \"full\")\n\t\t\t\t{\n\t\t\t\t\tthis.root.style.width = \"100%\";\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.root.style.width = op.size.toString();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (op.width) { this.root.style.width = op.width.constructor === Number ? op.width.toFixed(0) + \"px\" : op.width.toString(); }\n\t\tif (op.height) { this.root.style.height = op.height.constructor === Number ? op.height.toFixed(0) + \"px\" : op.height.toString(); }\n\n\t\t/*\n\t\t * Container of tab elements (the actual tabs you click on)\n\t\t * This UL element holds the LI elements representing each tab\n\t\t */\n\t\tconst list = document.createElement(\"ul\");\n\t\tlist.className = \"wtabcontainer\";\n\t\tif (mode == \"vertical\") { list.style.width = Tabs.TABS_WIDTH + \"px\"; }\n\t\telse { list.style.height = Tabs.TABS_HEIGHT + \"px\"; }\n\n\t\t// Allows to use the wheel to see hidden tabs\n\t\tlist.addEventListener(\"wheel\", this.onMouseWheel);\n\n\t\tthis.list = list;\n\t\tthis.root.appendChild(this.list);\n\t\tthis.tabsRoot = list;\n\n\t\tthis.tabsByIndex = [];\n\n\t\tif (op.addPlusTab)\n\t\t{\n\t\t\tthis.createPlusTab();\n\t\t}\n\n\t\tif (op.parent) { this.appendTo(op.parent as HTMLDivElement); }\n\t}\n\n\t/**\n\t * Handles mouse wheel events on the tab strings list to scroll hidden tabs.\n\t * @param {WheelEvent} e The mouse wheel event.\n\t */\n\tonMouseWheel(e: WheelEvent)\n\t{\n\t\tif (e.deltaY) { this.list.scrollLeft += e.deltaY; }\n\t}\n\n\t/**\n\t * Shows the Tabs widget.\n\t */\n\tshow()\n\t{\n\t\tthis.root.style.display = \"block\";\n\t}\n\n\t/**\n\t * Hides the Tabs widget.\n\t */\n\thide()\n\t{\n\t\tthis.root.style.display = \"none\";\n\t}\n\n\n\t/**\n\t * Returns the currently selected tab object.\n\t * @returns {TabInfoLIElement | undefined} The tab list item element, or undefined if none selected.\n\t */\n\tgetCurrentTab()\n\t{\n\t\tif (this.currentTab > -1 && this.tabsByIndex[this.currentTab])\n\t\t{\n\t\t\treturn this.tabsByIndex[this.currentTab].tab;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Returns the ID of the currently selected tab.\n\t * @returns {string | undefined} The ID of the current tab, or undefined if none selected.\n\t */\n\tgetCurrentTabId()\n\t{\n\t\tif (this.currentTab > -1 && this.tabsByIndex[this.currentTab])\n\t\t{\n\t\t\treturn this.tabsByIndex[this.currentTab].id;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Returns the tab that was selected before the current one.\n\t * @returns {TabInfoLIElement | undefined} The previous tab list item element.\n\t */\n\tgetPreviousTab()\n\t{\n\t\tif (this.previousTab > -1 && this.tabsByIndex[this.previousTab])\n\t\t{\n\t\t\treturn this.tabsByIndex[this.previousTab].tab;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Appends the Tabs widget to a parent element.\n\t * @param {HTMLElement | string} parent The parent element or a CSS selector string.\n\t * @param {boolean} [atFront=false] If true, prepends the widget instead of appending.\n\t */\n\tappendTo(parent: HTMLElement | string, atFront?: boolean)\n\t{\n\t\tif (typeof parent === \"string\")\n\t\t{\n\t\t\tconst found = document.querySelector(parent);\n\t\t\tif (!found)\n\t\t\t{\n\t\t\t\tconsole.warn(\"Tabs.appendTo: element not found \" + parent);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tparent = found as HTMLElement;\n\t\t}\n\n\t\tif (atFront)\n\t\t{\n\t\t\tparent.prepend(this.root);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tparent.appendChild(this.root);\n\t\t}\n\t}\n\n\t/**\n\t * Retrieves a TabInfo object by its ID.\n\t * @param {string} id The ID of the tab.\n\t * @returns {TabInfo | undefined} The TabInfo object if found.\n\t */\n\tgetTab(id: string)\n\t{\n\t\tif (id in this.tabs)\n\t\t{\n\t\t\treturn this.tabs[id];\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Retrieves a TabInfo object by its numerical index.\n\t * @param {number} index The index in the tabs array.\n\t * @returns {TabInfo} The TabInfo object.\n\t */\n\tgetTabByIndex(index: number)\n\t{\n\t\treturn this.tabsByIndex[index];\n\t}\n\n\t/**\n\t * Returns the total number of tabs.\n\t * @returns {number} The count of tabs.\n\t */\n\tgetNumOfTabs()\n\t{\n\t\treturn this.tabsByIndex.length;\n\t}\n\n\t/**\n\t * Retrieves the content element of a specific tab.\n\t * @param {string} id The ID of the tab.\n\t * @returns {HTMLDivElement | undefined} The content div element.\n\t */\n\tgetTabContent(id: string)\n\t{\n\t\tconst tab = this.getTab(id);\n\t\tif (tab) { return tab.content; }\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Returns the internal index of a tab given its ID.\n\t * @param {string} id The ID of the tab.\n\t * @returns {number} The index of the tab, or -1 if not found.\n\t */\n\tgetIndexOfTab(id: string)\n\t{\n\t\tfor (let i = 0; i < this.tabsByIndex.length; i++)\n\t\t{\n\t\t\tconst tab = this.tabsByIndex[i];\n\t\t\tif (tab && tab.id == id)\n\t\t\t{\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\n\t/**\n\t * Returns the DOM index of the tab element within its parent container.\n\t * @param {string} id The ID of the tab.\n\t * @returns {number} The child node index, or -1 if not found.\n\t */\n\tgetIndexOfNodeList(id: string)\n\t{\n\t\tconst tab = this.getTab(id);\n\t\tif (!tab) { return -1; }\n\t\tfor (let i = 0; i < this.list.childNodes.length; i++)\n\t\t{\n\t\t\tif (this.list.childNodes[i] == tab.tab)\n\t\t\t{\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\n\n\t/**\n\t * Adds a new tab to the widget.\n\t *\n\t * @param {string} id Unique identifier for the tab. If null, a random ID is generated.\n\t * @param {TabsOptions | Function} options Configuration options for the tab, or a callback function for selection.\n\t * - If options is a **function**, it is treated as the `callback` property.\n\t * - If options is an **object**, it configures the tab.\n\t * @param {string} [options.title] Text to display on the tab.\n\t * @param {string|HTMLElement} [options.content] HTML content to display when selected.\n\t * @param {Function} [options.callback] Function called when the tab is clicked. `(tabID, event) => void`.\n\t * @param {Function} [options.onClose] Function called when the tab is closed. `(tabInfo) => void`.\n\t * @param {boolean} [options.selected] If true, this tab becomes the active one.\n\t * @param {boolean} [options.closable] If true, shows a close button.\n\t * @param {string} [options.bigicon] URL or HTML for a large icon.\n\t * @param {boolean} [options.button] If true, acts as a button (no content switch).\n\t * @returns {TabInfo} The created TabInfo object.\n\t */\n\taddTab(id: string, options: TabsOptions | ((tab: string, event: PointerEvent | boolean) => void))\n\t{\n\t\tif (typeof (options) == \"function\") { options = { callback: options }; }\n\t\tconst tabOptions = options ?? {};\n\t\tconst op = tabOptions;\n\t\tid = id ?? `rand_${(Math.random() * 1000000) | 0}`;\n\n\t\t// Create the tab element (list item)\n\t\tconst element = document.createElement(\"li\") as TabInfoLIElement;\n\t\tconst safeID = id.replace(/ /gi, \"_\");\n\t\telement.className = `wtab wtab-${safeID}`;\n\t\t// If(options.selected) element.className += \" selected\";\n\t\telement.dataset.id = id;\n\t\telement.innerHTML = `<span class='tabtitle'>${op.title ?? id}</span>`;\n\n\t\tif (op.button) { element.className += \" button \"; }\n\t\tif (op.tabClassName) { element.className += op.tabClassName; }\n\t\tif (op.bigicon) { element.innerHTML = `<img class='tabbigicon' src='${op.bigicon}'/>` + element.innerHTML; }\n\t\tif (op.closable)\n\t\t{\n\t\t\telement.innerHTML += `<span class='tabclose'>${SpecialCode.close}</span>`;\n\t\t\telement.querySelector(\"span.tabclose\")?.addEventListener(\"click\", (e) =>\n\t\t\t{\n\t\t\t\tthis.removeTab(id);\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t}, true);\n\t\t}\n\n\t\t// Determine insertion position\n\t\tif (op.index !== undefined)\n\t\t{\n\t\t\t// Insert at specific index if provided\n\t\t\tconst after = this.list.childNodes[op.index];\n\t\t\tif (after)\n\t\t\t{\n\t\t\t\tthis.list.insertBefore(element, after);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.list.appendChild(element);\n\t\t\t}\n\t\t}\n\t\telse if (this.plusTab)\n\t\t{\n\t\t\t// If 'plus' tab exists, insert before it (it should always be last)\n\t\t\tthis.list.insertBefore(element, this.plusTab.tab);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.list.appendChild(element);\n\t\t}\n\n\t\tif (op.tabWidth)\n\t\t{\n\t\t\telement.style.width = typeof op.tabWidth === \"number\" ? `${op.tabWidth.toFixed(0)}px` : op.tabWidth.toString();\n\t\t\telement.style.minWidth = \"0\";\n\t\t}\n\n\t\t// Autoswitch behavior: switch tabs when dragging an item over them\n\t\tif (this.options.autoswitch)\n\t\t{\n\t\t\telement.classList.add(\"autoswitch\");\n\t\t\tconst dragEnterCallback = (e: DragEvent) =>\n\t\t\t{\n\t\t\t\tconst el = e.target;\n\t\t\t\t// Debounce the switch to avoid flickering\n\t\t\t\tif (this._timeoutMouseOver) { clearTimeout(this._timeoutMouseOver); }\n\t\t\t\tthis._timeoutMouseOver = setTimeout((() =>\n\t\t\t\t{\n\t\t\t\t\tTrigger(el as EventTarget, \"click\");\n\t\t\t\t\tthis._timeoutMouseOver = undefined;\n\t\t\t\t}), 500);\n\t\t\t};\n\t\t\telement.addEventListener(\"dragenter\", dragEnterCallback);\n\n\t\t\telement.addEventListener(\"dragleave\", () =>\n\t\t\t{\n\t\t\t\tif (this._timeoutMouseOver)\n\t\t\t\t{\n\t\t\t\t\tclearTimeout(this._timeoutMouseOver);\n\t\t\t\t\tthis._timeoutMouseOver = undefined;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// The content container for this tab\n\t\tconst content = document.createElement(\"div\");\n\t\tif (op.id) { content.id = op.id; }\n\n\t\tcontent.className = `wtabcontent wtabcontent-${safeID} ${op.className ?? \"\"}`;\n\t\tcontent.dataset.id = id;\n\t\tcontent.style.display = \"none\";\n\n\t\t// Adapt content height based on mode and size options\n\t\tif (this.mode == \"horizontal\")\n\t\t{\n\t\t\tif (op.size)\n\t\t\t{\n\t\t\t\tcontent.style.overflow = \"auto\";\n\t\t\t\tif (op.size == \"full\")\n\t\t\t\t{\n\t\t\t\t\t// Subtract tab header height calculation\n\t\t\t\t\tcontent.style.width = \"100%\";\n\t\t\t\t\tcontent.style.height = `calc( 100% - ${Tabs.TABS_HEIGHT}px )`;\n\t\t\t\t}\n\t\t\t\telse { content.style.height = op.size.toString(); }\n\t\t\t}\n\t\t}\n\t\telse if (this.mode == \"vertical\")\n\t\t{\n\t\t\tif (op.size)\n\t\t\t{\n\t\t\t\tcontent.style.overflow = \"auto\";\n\t\t\t\tif (op.size == \"full\")\n\t\t\t\t{\n\t\t\t\t\t// Subtract tab width calculation\n\t\t\t\t\tcontent.style.height = \"100%\";\n\t\t\t\t\tcontent.style.width = `calc( 100% - ${Tabs.TABS_WIDTH}px )`;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tcontent.style.width = op.size.toString();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Overwrite dimensions if explicitly provided in options\n\t\tif (op.width !== undefined)\n\t\t{\n\t\t\tcontent.style.width = typeof (op.width) === \"string\" ? op.width : `${op.width}px`;\n\t\t}\n\t\tif (op.height !== undefined)\n\t\t{\n\t\t\tcontent.style.height = typeof (op.height) === \"string\" ? op.height : `${op.height}px`;\n\t\t}\n\n\t\t// Add content to the container\n\t\tif (op.content)\n\t\t{\n\t\t\tif (typeof (op.content) == \"string\")\n\t\t\t{\n\t\t\t\tcontent.innerHTML = op.content;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tcontent.appendChild(op.content);\n\t\t\t}\n\t\t}\n\n\t\tthis.root.appendChild(content);\n\n\t\t// Bind click events\n\t\tif (!op.button)\n\t\t{\n\t\t\telement.addEventListener(\"click\", this._onTabClicked.bind(this, element));\n\t\t}\n\t\telse\n\t\t{\n\t\t\tconst clickCallback = (e: PointerEvent) =>\n\t\t\t{\n\t\t\t\tif (!e.target) { return; }\n\t\t\t\tconst tabID = element.dataset.id;\n\t\t\t\tif (typeof tabID === \"string\" && op.callback) { op.callback(tabID, e); }\n\t\t\t};\n\t\t\telement.addEventListener(\"click\", clickCallback.bind(element));\n\t\t}\n\n\t\telement.options = options;\n\t\telement.tabs = this;\n\n\t\tconst title = element.querySelector(\"span.tabtitle\");\n\n\t\tconst tabInfo: TabInfo = new TabInfo(id, element, content, title!);\n\t\telement.info = tabInfo;\n\n\t\tif (op.onClose) { tabInfo.onClose = op.onClose; }\n\t\tconst tempo = this.tabsByIndex.length;\n\t\tthis.tabsByIndex[tempo] = tabInfo;\n\t\tthis.tabs[id] = tabInfo;\n\n\t\t// Recompute indices to keep arrays in sync with DOM order\n\t\tthis.recomputeTabsByIndex();\n\n\t\t// Context menu handler (Right-click)\n\t\telement.addEventListener(\"contextmenu\", ((e) =>\n\t\t{\n\t\t\tif (e.button != 2) { return false; }// Right button\n\t\t\te.preventDefault();\n\t\t\tif (op.onContextCall) { op.onContextCall(tabInfo); }\n\t\t\treturn false;\n\t\t}));\n\n\t\t// Rename functionality via double-click\n\t\tif (this.options.allowRename)\n\t\t{\n\t\t\telement.addEventListener(\"dblclick\", () =>\n\t\t\t{\n\t\t\t\tconst titleSpan = element.querySelector<HTMLSpanElement>(\".tabtitle\");\n\t\t\t\tif (!titleSpan) {return;}\n\n\t\t\t\tconst originalTitle = titleSpan.innerText;\n\t\t\t\ttitleSpan.style.display = \"none\"; // Hide title\n\n\t\t\t\t// Create temporary input for renaming\n\t\t\t\tconst input = document.createElement(\"input\");\n\t\t\t\tinput.type = \"text\";\n\t\t\t\tinput.value = originalTitle;\n\t\t\t\tinput.className = \"tab-rename-input\";\n\t\t\t\tinput.style.width = \"80px\";\n\t\t\t\tlet isProcessed = false;\n\t\t\t\tconst processRename = () =>\n\t\t\t\t{\n\t\t\t\t\tif (isProcessed) {return;}\n\t\t\t\t\tisProcessed = true;\n\t\t\t\t\tconst newTitle = input.value.trim();\n\t\t\t\t\tif (newTitle)\n\t\t\t\t\t{\n\t\t\t\t\t\ttitleSpan.innerText = newTitle;\n\t\t\t\t\t}\n\t\t\t\t\tinput.remove();\n\t\t\t\t\ttitleSpan.style.display = \"\";\n\t\t\t\t};\n\n\t\t\t\tinput.addEventListener(\"keydown\", (e) =>\n\t\t\t\t{\n\t\t\t\t\tif (e.key === \"Enter\")\n\t\t\t\t\t{\n\t\t\t\t\t\tprocessRename();\n\t\t\t\t\t}\n\t\t\t\t\telse if (e.key === \"Escape\")\n\t\t\t\t\t{\n\t\t\t\t\t\tif (isProcessed) {return;}\n\t\t\t\t\t\tisProcessed = true;\n\t\t\t\t\t\tinput.remove();\n\t\t\t\t\t\ttitleSpan.style.display = \"\";\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tinput.addEventListener(\"blur\", () =>\n\t\t\t\t{\n\t\t\t\t\tprocessRename();\n\t\t\t\t});\n\n\t\t\t\telement.insertBefore(input, titleSpan);\n\t\t\t\tinput.focus();\n\t\t\t});\n\t\t}\n\n\t\tif (op.selected == true || this.selected == null)\n\t\t{\n\t\t\tthis.selectTab(id, op.skipCallbacks);\n\t\t}\n\n\t\treturn tabInfo;\n\t}\n\n\t/**\n\t * Returns the 'Plus' tab if it exists.\n\t * @returns {TabInfo | undefined} The plus tab info.\n\t */\n\tgetPlusTab()\n\t{\n\t\treturn this.plusTab;\n\t}\n\n\t/**\n\t * Adds a callback function to be executed when the 'Plus' tab is clicked.\n\t * @param {Function} callback Function receiving tab ID and event: `(tab: string, event: PointerEvent | boolean) => void`.\n\t */\n\taddPlusTab(callback: (tab: string, event: PointerEvent | boolean) => void)\n\t{\n\t\tthis.addPlusTabCallback(callback);\n\t}\n\n\t/**\n\t * Creates the 'Plus' tab internally if it doesn't exist.\n\t */\n\tcreatePlusTab()\n\t{\n\t\tif (this.plusTab) {return;}\n\t\tthis.plusTab = this.addTab(\"plus_tab\", {\n\t\t\ttitle: \"+\",\n\t\t\ttabWidth: 20,\n\t\t\tbutton: true,\n\t\t\ttabClassName: \"wtabplus\",\n\t\t\tcallback: this.onPlusTabClick.bind(this),\n\t\t\tskipCallbacks: true\n\t\t});\n\t\t// Ensure it is at the end\n\t\tthis.list.appendChild(this.plusTab.tab);\n\t}\n\n\t/**\n\t * Registers a callback for the 'Plus' tab click event.\n\t * @param {Function} callback The callback function: `(tab: string, event: PointerEvent | boolean) => void`.\n\t */\n\taddPlusTabCallback(callback: (tab: string, event: PointerEvent | boolean) => void)\n\t{\n\t\tif (!this.plusTab)\n\t\t{\n\t\t\tthis.createPlusTab();\n\t\t}\n\t\tthis.plusTabCallbacks.push(callback);\n\t}\n\n\t/**\n\t * Removes a previously registered 'Plus' tab callback.\n\t * @param {Function} callback The callback function to remove.\n\t */\n\tremovePlusTabCallback(callback: (tab: string, event: PointerEvent | boolean) => void)\n\t{\n\t\tconst index = this.plusTabCallbacks.indexOf(callback);\n\t\tif (index > -1)\n\t\t{\n\t\t\tthis.plusTabCallbacks.splice(index, 1);\n\t\t}\n\t}\n\n\t/**\n\t * Handles the click event on the 'Plus' tab.\n\t * Creates a ghost tab for user input and triggers callbacks.\n\t * @param {string} tab The tab ID.\n\t * @param {PointerEvent | boolean} event The event object.\n\t */\n\tonPlusTabClick(tab: string, event: PointerEvent | boolean)\n\t{\n\t\t// Internal behavior: Create Ghost Tab for user input\n\t\tthis.createGhostTab();\n\n\t\t// Execute any registered external callbacks\n\t\tfor (const callback of this.plusTabCallbacks)\n\t\t{\n\t\t\tcallback(tab, event);\n\t\t}\n\t}\n\n\t/**\n\t * Creates a temporary \"ghost\" tab that allows the user to input a name for a new tab.\n\t */\n\tcreateGhostTab()\n\t{\n\t\tconst element = document.createElement(\"li\") as TabInfoLIElement;\n\t\telement.className = \"wtab wtabghost\";\n\n\t\t// Input field for the new tab name\n\t\tconst input = document.createElement(\"input\");\n\t\tinput.type = \"text\";\n\t\tinput.placeholder = \"New Tab\";\n\t\tinput.className = \"wtabghostinput\";\n\n\t\telement.appendChild(input);\n\n\t\t// Insert before plus tab so it appears 'inside' the list\n\t\tif (this.plusTab)\n\t\t{\n\t\t\tthis.list.insertBefore(element, this.plusTab.tab);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.list.appendChild(element);\n\t\t}\n\n\t\tlet isProcessed = false;\n\n\t\tconst confirm = () =>\n\t\t{\n\t\t\tif (isProcessed) {return;}\n\t\t\tisProcessed = true;\n\t\t\tconst name = input.value.trim();\n\t\t\tif (name)\n\t\t\t{\n\t\t\t\tthis.addTab(null!, { title: name, selected: true });\n\t\t\t}\n\t\t\telement.remove();\n\t\t};\n\n\t\tconst cancel = () =>\n\t\t{\n\t\t\tif (isProcessed) {return;}\n\t\t\tisProcessed = true;\n\t\t\telement.remove();\n\t\t};\n\n\t\tinput.addEventListener(\"keydown\", (e) =>\n\t\t{\n\t\t\tif (e.key === \"Enter\")\n\t\t\t{\n\t\t\t\tconfirm();\n\t\t\t}\n\t\t\telse if (e.key === \"Escape\")\n\t\t\t{\n\t\t\t\tcancel();\n\t\t\t}\n\t\t});\n\n\t\tinput.addEventListener(\"blur\", () =>\n\t\t{\n\t\t\t// If empty, cancel. If text, confirm\n\t\t\tconst name = input.value.trim();\n\t\t\tif (!name)\n\t\t\t{\n\t\t\t\tcancel();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tconfirm();\n\t\t\t}\n\t\t});\n\n\t\tinput.focus();\n\t}\n\n\t/**\n\t * Adds a tab acting as a button (not user-selectable context switch).\n\t * @param {string} id Unique identifier.\n\t * @param {string} title Text to display.\n\t * @param {Function} callback Function triggered on click.\n\t * @returns {TabInfo} The created TabInfo object.\n\t */\n\taddButtonTab(id: string, title: string, callback: (tab: string, event: PointerEvent | boolean) => void)\n\t{\n\t\treturn this.addTab(id, { title: title, button: true, callback: callback, skipCallbacks: true });\n\t}\n\n\t/**\n\t * Internal handler for tab click events.\n\t * @private\n\t * @param {TabInfoLIElement} element The tab element clicked.\n\t * @param {PointerEvent | boolean} [event] The event triggering the click.\n\t */\n\tprivate _onTabClicked(element: TabInfoLIElement, event?: PointerEvent | boolean)\n\t{\n\t\t// Skip if already selected\n\t\tif (element.selected) { return; }\n\n\t\tif (!element.parentNode) { return; } // Safety check: element might have been removed\n\n\t\tconst options = this.options;\n\t\tif (!this) { throw (\"tabs not found\"); }\n\n\t\t// Check if this tab is allowed to be opened\n\t\tif (options.onCanOpen && options.onCanOpen(element) == false) { return; }\n\n\t\tconst tabId = element.dataset.id;\n\t\t// Trigger 'onLeave' event for the tab being exited\n\t\tif (this.currentTab != -1 &&\n\t\t\tthis.tabsByIndex[this.currentTab].id != tabId &&\n\t\t\tthis.tabsByIndex[this.currentTab].content &&\n\t\t\telement.options?.onLeave)\n\t\t{\n\t\t\tconst curTab = this.tabsByIndex[this.currentTab];\n\t\t\telement.options.onLeave(curTab);\n\t\t}\n\n\t\tlet tabContent = null;\n\n\t\t// Iterate over all tabs to update visibility and selection state\n\t\tfor (const name in this.tabs)\n\t\t{\n\t\t\tconst tabInfo = this.tabs[name];\n\n\t\t\tif (tabInfo.id == tabId)\n\t\t\t{\n\t\t\t\t// Show the selected tab content\n\t\t\t\ttabInfo.selected = true;\n\t\t\t\ttabInfo.content.style.display = \"\";\n\t\t\t\ttabContent = tabInfo.content;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// Hide other tabs\n\t\t\t\ttabInfo.selected = false;\n\t\t\t\ttabInfo.content.style.display = \"none\";\n\t\t\t}\n\t\t}\n\n\t\tconst list = this.list.querySelectorAll<TabInfoLIElement>(\"li.wtab\");\n\t\tfor (const tabInfo of list)\n\t\t{\n\t\t\ttabInfo.classList.remove(\"selected\");\n\t\t\ttabInfo.selected = false;\n\t\t}\n\t\telement.selected = true;\n\t\telement.classList.add(\"selected\");\n\n\t\t// Change current tab index\n\t\tthis.previousTab = this.currentTab;\n\t\tthis.currentTab = this.getIndexOfTab(tabId!);\n\n\t\tif (event) // User clicked\n\t\t{\n\t\t\t// Trigger callback function\n\t\t\tif (typeof tabId === \"string\")\n\t\t\t{\n\t\t\t\tif (options.callback) { options.callback(tabId, event); }\n\t\t\t\tif (element.options && element.options.callback) { element.options.callback(tabId, event); }\n\t\t\t}\n\n\t\t\t// Trigger global change events\n\t\t\tTrigger(this.root, \"wchange\", [tabId, tabContent]);\n\t\t\tif (this.onchange) { this.onchange(tabId, tabContent); }\n\t\t}\n\n\t\t// Update selected ID property\n\t\tthis.selected = tabId;\n\t}\n\n\t/**\n\t * Selects a tab by its ID.\n\t * @param {string} id The ID of the tab to select.\n\t * @param {boolean} [skipEvents=false] If true, prevents triggering callbacks.\n\t */\n\tselectTab(id: string, skipEvents: boolean = false)\n\t{\n\t\tif (!id) { return; }\n\n\t\tconst tabs = this.list.querySelectorAll<TabInfoLIElement>(\"li.wtab\");\n\t\tfor (const tabInfo of tabs)\n\t\t{\n\t\t\tif (id == tabInfo.dataset[\"id\"])\n\t\t\t{\n\t\t\t\tthis._onTabClicked(tabInfo, !skipEvents);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Sets the visibility of a tab and its content.\n\t * @param {string} id The ID of the tab.\n\t * @param {boolean} visible True to show, false to hide.\n\t */\n\tsetTabVisibility(id: string, visible: boolean)\n\t{\n\t\tconst tab = this.getTab(id);\n\t\tif (!tab) { return; }\n\n\t\ttab.tab.style.display = visible ? \"\" : \"none\";\n\t\ttab.content.style.display = visible ? \"\" : \"none\";\n\t}\n\n\t/**\n\t * Re-indexes the `tabsByIndex` array based on the current DOM order.\n\t */\n\trecomputeTabsByIndex()\n\t{\n\t\tthis.tabsByIndex = [];\n\n\t\tfor (const i in this.tabs)\n\t\t{\n\t\t\tconst tab = this.tabs[i];\n\n\t\t\t// Derive index from DOM position\n\t\t\tlet index = 0;\n\t\t\tlet child = tab.tab.previousSibling;\n\t\t\twhile (child)\n\t\t\t{\n\t\t\t\tindex++;\n\t\t\t\tchild = child.previousSibling as TabInfoLIElement;\n\t\t\t}\n\n\t\t\tthis.tabsByIndex[index] = tab;\n\t\t}\n\t}\n\n\t/**\n\t * Removes a tab by its ID.\n\t * @param {string} id The ID of the tab to remove.\n\t */\n\tremoveTab(id: string)\n\t{\n\t\tconst tab = this.getTab(id);\n\t\tif (!tab)\n\t\t{\n\t\t\tconsole.warn(`tab not found: ${id}`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (tab.onClose) { tab.onClose(tab); }\n\t\tif (tab.tab.parentNode) { tab.tab.parentNode.removeChild(tab.tab); }\n\t\tif (tab.content.parentNode) { tab.content.parentNode.removeChild(tab.content); }\n\n\t\tconst index = this.getIndexOfTab(id);\n\t\tthis.tabsByIndex.splice(index, 1);\n\t\tdelete this.tabs[id];\n\n\t\tthis.recomputeTabsByIndex();\n\t}\n\n\t/**\n\t * Removes all tabs.\n\t * @param {boolean} [keepPlus=false] If true, preserves the 'Plus' tab.\n\t */\n\tremoveAllTabs(keepPlus: boolean = false)\n\t{\n\t\tconst tabs = [];\n\t\tfor (const i in this.tabs)\n\t\t{\n\t\t\ttabs.push(this.tabs[i]);\n\t\t}\n\n\t\tfor (const i in tabs)\n\t\t{\n\t\t\tconst tab = tabs[i];\n\t\t\tif (tab == this.plusTab && keepPlus) { continue; }\n\t\t\tif (tab.tab.parentNode) { tab.tab.parentNode.removeChild(tab.tab); }\n\t\t\tif (tab.content.parentNode) { tab.content.parentNode.removeChild(tab.content); }\n\t\t\tconst index = this.getIndexOfTab(tab.id);\n\t\t\tthis.tabsByIndex.splice(index, 1);\n\t\t\tdelete this.tabs[tab.id];\n\t\t}\n\n\t\tthis.recomputeTabsByIndex();\n\t}\n\n\t/**\n\t * Alias for removing all tabs.\n\t */\n\tclear()\n\t{\n\t\tthis.removeAllTabs();\n\t}\n\n\t/**\n\t * Hides a specific tab.\n\t * @param {string} id The ID of the tab to hide.\n\t */\n\thideTab(id: string)\n\t{\n\t\tthis.setTabVisibility(id, false);\n\t}\n\n\t/**\n\t * Shows a previously hidden tab.\n\t * @param {string} id The ID of the tab to show.\n\t */\n\tshowTab(id: string)\n\t{\n\t\tthis.setTabVisibility(id, true);\n\t}\n\n\t/**\n\t * Transfers a tab from this widget to another Tabs widget.\n\t * @param {string} id The ID of the tab to transfer.\n\t * @param {Tabs} targetTabs The destination Tabs widget.\n\t * @param {number} [index=0] The index to insert the tab at in the target widget.\n\t */\n\ttransferTab(id: string, targetTabs: Tabs, index: number = 0)\n\t{\n\t\tconst tab = this.getTab(id);\n\t\tif (!tab) { return; }\n\n\t\ttargetTabs.tabs[id] = tab;\n\n\t\t// Insert tab into the new position in the list\n\t\tif (index !== 0)\n\t\t{\n\t\t\ttargetTabs.list.insertBefore(tab.tab, targetTabs.list.childNodes[index]);\n\t\t}\n\t\telse\n\t\t{\n\t\t\ttargetTabs.list.appendChild(tab.tab);\n\t\t}\n\n\t\t// Move content element to target's root\n\t\ttargetTabs.root.appendChild(tab.content);\n\n\t\t// Remove from current tabs\n\t\tdelete this.tabs[id];\n\t\tthis.tabsByIndex.splice(this.getIndexOfTab(id), 1);\n\n\t\t// Auto-select another tab if the current one was moved\n\t\tlet newtab = \"\";\n\t\tfor (const i in this.tabs)\n\t\t{\n\t\t\tnewtab = i;\n\t\t\tif (newtab) { break; }\n\t\t}\n\n\t\tif (newtab) { this.selectTab(newtab); }\n\n\n\t\t// Remove selection style from transferred tab\n\t\ttab.tab.selected = false;\n\n\t\t// Update state in target\n\t\ttargetTabs.recomputeTabsByIndex();\n\t\ttargetTabs.selectTab(id);\n\t}\n\n\t/**\n\t * Detaches a tab into a new window.\n\t * @param {string} id The ID of the tab to detach.\n\t * @param {Function} [onComplete] Callback triggering when detachment is complete.\n\t * @param {Function} [onClose] Callback triggering when the new window is closed.\n\t * @returns {Window | undefined} The new window object.\n\t */\n\tdetachTab(id: string, onComplete?: () => void, onClose?: () => void)\n\t{\n\t\tconst index = this.getIndexOfNodeList(id);\n\t\tconst tab = this.tabs[id];\n\t\tif (!tab) { return; }\n\n\t\t// Create new window\n\t\tconst w = 800;\n\t\tconst h = 600;\n\t\tconst tabWindow = window.open(\"\", \"\", `width=${w}, height=${h}, location=no, status=no, menubar=no, titlebar=no, fullscreen=yes`);\n\t\tif (!tabWindow) { return; }\n\t\ttabWindow.document.writeln(`<head><title>${id}</title>`);\n\n\t\t// Transfer stylesheets to the new window to maintain look and feel\n\t\tconst styles = document.querySelectorAll(\"link[rel='stylesheet'],style\");\n\t\tfor (let i = 0; i < styles.length; i++) { tabWindow.document.writeln(styles[i].outerHTML); }\n\t\ttabWindow.document.writeln(\"</head><body></body>\");\n\t\ttabWindow.document.close();\n\n\t\t// Transfer content after a while so the window is properly created\n\t\tconst newTabs = new Tabs(this.options);\n\t\ttabWindow.tabs = newTabs;\n\n\t\t// Handle window closing event to re-attach tab\n\t\ttabWindow.onbeforeunload = () =>\n\t\t{\n\t\t\tnewTabs.transferTab(id, this, index);\n\t\t\tif (onClose) { onClose(); }\n\t\t};\n\n\t\t// Move the content to the new window\n\t\tnewTabs.list.style.height = \"20px\";\n\t\ttabWindow.document.body.appendChild(newTabs.root);\n\t\tthis.transferTab(id, newTabs, index);\n\n\t\t// Ensure the transferred tab is selected in the new window\n\t\tnewTabs.tabs[id].tab.selected = true;\n\t\tthis.recomputeTabsByIndex();\n\n\t\tif (onComplete) { onComplete(); }\n\n\t\treturn tabWindow;\n\t}\n}","import { LiteGUIObject } from \"./@types/globals\";\nimport { Dialog, DialogOptions } from \"./dialog\";\n\n/**\n * Removes event listeners (assigned as properties) and references from a DOM element and its children.\n * Used to help with garbage collection and memory leaks by breaking circular references.\n * @function PurgeElement\n * @param {HTMLElement} element The DOM element to purge.\n */\nexport function PurgeElement(element: HTMLElement)\n{\n\tconst a = element.attributes;\n\tlet i, n;\n\n\tif (a)\n\t{\n\t\tfor (i = a.length - 1; i >= 0; i -= 1)\n\t\t{\n\t\t\tn = a[i].name;\n\t\t\tif (typeof (element as unknown as Record<string, unknown>)[n] === 'function')\n\t\t\t{\n\t\t\t\t(element as unknown as Record<string, unknown | null>)[n] = null;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst b = element.childNodes;\n\tif (b)\n\t{\n\t\tconst l = b.length;\n\t\tfor (let i = 0; i < l; i += 1)\n\t\t{\n\t\t\tPurgeElement(b[i] as HTMLElement);\n\t\t}\n\t}\n}\n\n/**\n * Basic object cloner. Copies own enumerable properties from original to target.\n * @function CloneInsides\n * @param {{ [key: string]: unknown }} [original] The source object to clone from.\n * @param {{ [key: string]: unknown }} [target] The target object to copy to. If null, a new object is created.\n * @returns {{ [key: string]: unknown }} The target object with copied properties.\n */\nexport function CloneInsides(original?: Record<string, unknown>, target?: Record<string, unknown>): Record<string, unknown>\n{\n\ttarget = target ?? {};\n\tfor (const j in original)\n\t{\n\t\ttarget[j] = original[j];\n\t}\n\treturn target;\n}\n\n/**\n * Focuses an element.\n * @function FocusElement\n * @param {HTMLElement | Window} element The element to focus.\n */\nexport function FocusElement(element: HTMLElement | Window)\n{\n\telement.focus();\n}\n\n/**\n * Blurs an element.\n * @function BlurElement\n * @param {HTMLElement | Window} element The element to blur.\n */\nexport function BlurElement(element: HTMLElement | Window)\n{\n\telement.blur();\n}\n\n/**\n * Interface to hold a reference to an object property and its options.\n */\nexport interface InstanceHolder\n{\n\t/** The instance object containing the property. */\n\tinstance: Record<string, unknown>;\n\t/** The name of the property. */\n\tname: string;\n\t/** Options associated with the property. */\n\toptions?: Record<string, unknown>;\n}\n\n/**\n * Tries to assign a value to the instance stored in an instance holder\n * @function AssignValue\n * @param {InstanceHolder} holder The instance holder containing the instance and property name.\n * @param {string | null | unknown[] | unknown} value The value to assign.\n */\nexport function AssignValue(holder: InstanceHolder, value: string | null | unknown[] | unknown)\n{\n\tconst instance = holder.instance as Record<string, unknown>;\n\tconst currentValue = instance[holder.name];\n\n\tif (currentValue == null || value == null || (holder.options as { type?: string })?.type == \"enum\")\n\t{\n\t\tinstance[holder.name] = value;\n\t}\n\telse if (typeof (currentValue) == \"number\")\n\t{\n\t\tinstance[holder.name] = parseFloat(value.toString());\n\t}\n\telse if (typeof (currentValue) == \"string\")\n\t{\n\t\tinstance[holder.name] = value;\n\t}\n\telse if (value && (value as unknown[]).length && currentValue && (currentValue as unknown[]).length &&\n\t\t(!Object.getOwnPropertyDescriptor(instance, holder.name) ||\n\t\t\t!Object.getOwnPropertyDescriptor(instance, holder.name)?.set) &&\n\t\t(!Object.getOwnPropertyDescriptor(Object.getPrototypeOf(instance), holder.name) ||\n\t\t\t!Object.getOwnPropertyDescriptor(Object.getPrototypeOf(instance), holder.name)?.set))\n\t{\n\t\tfor (let i = 0; i < (value as unknown[]).length; ++i)\n\t\t{\n\t\t\t(currentValue as unknown[])[i] = (value as unknown[])[i];\n\t\t}\n\t}\n\telse\n\t{\n\t\tinstance[holder.name] = value;\n\t}\n}\n\n/**\n * Extract all attributes from an instance (enumerable properties that are not function and a name starting with alphabetic character)\n *\n * @function CollectProperties\n * @param {unknown} instance extract enumerable and public (name do not start with '_' ) properties from an object\n * @returns {{[key:string]: unknown}} Object with \"name\" : value for every property\n *\n */\nexport function CollectProperties(instance: unknown): { [key: string]: unknown }\n{\n\tconst properties: { [key: string]: unknown } = {};\n\tconst obj = instance as Record<string, unknown>;\n\n\tfor (const i in obj)\n\t{\n\t\t// Skip vars with _ (they are private)\n\t\tif (i[0] == \"_\" || i[0] == \"@\" || i.substring(0, 6) == \"jQuery\")\n\t\t{\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst v = obj[i];\n\t\tconst inst = instance as { constructor?: { [key: string]: unknown } };\n\t\tif (v && typeof v.constructor == \"function\" && !inst.constructor?.[`@${i}`])\n\t\t{\n\t\t\tcontinue;\n\t\t}\n\t\tproperties[i] = v;\n\t}\n\treturn properties;\n}\n\n// Useful functions\n\n// From stackoverflow http://stackoverflow.com/questions/1354064/how-to-convert-characters-to-html-entities-using-plain-javascript\n\n/**\n * Internal helper to escape HTML entities in a string.\n * Uses a mapping table for characters.\n */\nconst escapeHtmlEntityTable: Record<number, string> = {\n\t34: 'quot',\n\t38: 'amp',\n\t39: 'apos',\n\t60: 'lt',\n\t62: 'gt',\n\t160: 'nbsp',\n\t161: 'iexcl',\n\t162: 'cent',\n\t163: 'pound',\n\t164: 'curren',\n\t165: 'yen',\n\t166: 'brvbar',\n\t167: 'sect',\n\t168: 'uml',\n\t169: 'copy',\n\t170: 'ordf',\n\t171: 'laquo',\n\t172: 'not',\n\t173: 'shy',\n\t174: 'reg',\n\t175: 'macr',\n\t176: 'deg',\n\t177: 'plusmn',\n\t178: 'sup2',\n\t179: 'sup3',\n\t180: 'acute',\n\t181: 'micro',\n\t182: 'para',\n\t183: 'middot',\n\t184: 'cedil',\n\t185: 'sup1',\n\t186: 'ordm',\n\t187: 'raquo',\n\t188: 'frac14',\n\t189: 'frac12',\n\t190: 'frac34',\n\t191: 'iquest',\n\t192: 'Agrave',\n\t193: 'Aacute',\n\t194: 'Acirc',\n\t195: 'Atilde',\n\t196: 'Auml',\n\t197: 'Aring',\n\t198: 'AElig',\n\t199: 'Ccedil',\n\t200: 'Egrave',\n\t201: 'Eacute',\n\t202: 'Ecirc',\n\t203: 'Euml',\n\t204: 'Igrave',\n\t205: 'Iacute',\n\t206: 'Icirc',\n\t207: 'Iuml',\n\t208: 'ETH',\n\t209: 'Ntilde',\n\t210: 'Ograve',\n\t211: 'Oacute',\n\t212: 'Ocirc',\n\t213: 'Otilde',\n\t214: 'Ouml',\n\t215: 'times',\n\t216: 'Oslash',\n\t217: 'Ugrave',\n\t218: 'Uacute',\n\t219: 'Ucirc',\n\t220: 'Uuml',\n\t221: 'Yacute',\n\t222: 'THORN',\n\t223: 'szlig',\n\t224: 'agrave',\n\t225: 'aacute',\n\t226: 'acirc',\n\t227: 'atilde',\n\t228: 'auml',\n\t229: 'aring',\n\t230: 'aelig',\n\t231: 'ccedil',\n\t232: 'egrave',\n\t233: 'eacute',\n\t234: 'ecirc',\n\t235: 'euml',\n\t236: 'igrave',\n\t237: 'iacute',\n\t238: 'icirc',\n\t239: 'iuml',\n\t240: 'eth',\n\t241: 'ntilde',\n\t242: 'ograve',\n\t243: 'oacute',\n\t244: 'ocirc',\n\t245: 'otilde',\n\t246: 'ouml',\n\t247: 'divide',\n\t248: 'oslash',\n\t249: 'ugrave',\n\t250: 'uacute',\n\t251: 'ucirc',\n\t252: 'uuml',\n\t253: 'yacute',\n\t254: 'thorn',\n\t255: 'yuml',\n\t402: 'fnof',\n\t913: 'Alpha',\n\t914: 'Beta',\n\t915: 'Gamma',\n\t916: 'Delta',\n\t917: 'Epsilon',\n\t918: 'Zeta',\n\t919: 'Eta',\n\t920: 'Theta',\n\t921: 'Iota',\n\t922: 'Kappa',\n\t923: 'Lambda',\n\t924: 'Mu',\n\t925: 'Nu',\n\t926: 'Xi',\n\t927: 'Omicron',\n\t928: 'Pi',\n\t929: 'Rho',\n\t931: 'Sigma',\n\t932: 'Tau',\n\t933: 'Upsilon',\n\t934: 'Phi',\n\t935: 'Chi',\n\t936: 'Psi',\n\t937: 'Omega',\n\t945: 'alpha',\n\t946: 'beta',\n\t947: 'gamma',\n\t948: 'delta',\n\t949: 'epsilon',\n\t950: 'zeta',\n\t951: 'eta',\n\t952: 'theta',\n\t953: 'iota',\n\t954: 'kappa',\n\t955: 'lambda',\n\t956: 'mu',\n\t957: 'nu',\n\t958: 'xi',\n\t959: 'omicron',\n\t960: 'pi',\n\t961: 'rho',\n\t962: 'sigmaf',\n\t963: 'sigma',\n\t964: 'tau',\n\t965: 'upsilon',\n\t966: 'phi',\n\t967: 'chi',\n\t968: 'psi',\n\t969: 'omega',\n\t977: 'thetasym',\n\t978: 'upsih',\n\t982: 'piv',\n\t8226: 'bull',\n\t8230: 'hellip',\n\t8242: 'prime',\n\t8243: 'Prime',\n\t8254: 'oline',\n\t8260: 'frasl',\n\t8472: 'weierp',\n\t8465: 'image',\n\t8476: 'real',\n\t8482: 'trade',\n\t8501: 'alefsym',\n\t8592: 'larr',\n\t8593: 'uarr',\n\t8594: 'rarr',\n\t8595: 'darr',\n\t8596: 'harr',\n\t8629: 'crarr',\n\t8656: 'lArr',\n\t8657: 'uArr',\n\t8658: 'rArr',\n\t8659: 'dArr',\n\t8660: 'hArr',\n\t8704: 'forall',\n\t8706: 'part',\n\t8707: 'exist',\n\t8709: 'empty',\n\t8711: 'nabla',\n\t8712: 'isin',\n\t8713: 'notin',\n\t8715: 'ni',\n\t8719: 'prod',\n\t8721: 'sum',\n\t8722: 'minus',\n\t8727: 'lowast',\n\t8730: 'radic',\n\t8733: 'prop',\n\t8734: 'infin',\n\t8736: 'ang',\n\t8743: 'and',\n\t8744: 'or',\n\t8745: 'cap',\n\t8746: 'cup',\n\t8747: 'int',\n\t8756: 'there4',\n\t8764: 'sim',\n\t8773: 'cong',\n\t8776: 'asymp',\n\t8800: 'ne',\n\t8801: 'equiv',\n\t8804: 'le',\n\t8805: 'ge',\n\t8834: 'sub',\n\t8835: 'sup',\n\t8836: 'nsub',\n\t8838: 'sube',\n\t8839: 'supe',\n\t8853: 'oplus',\n\t8855: 'otimes',\n\t8869: 'perp',\n\t8901: 'sdot',\n\t8968: 'lceil',\n\t8969: 'rceil',\n\t8970: 'lfloor',\n\t8971: 'rfloor',\n\t9001: 'lang',\n\t9002: 'rang',\n\t9674: 'loz',\n\t9824: 'spades',\n\t9827: 'clubs',\n\t9829: 'hearts',\n\t9830: 'diams',\n\t338: 'OElig',\n\t339: 'oelig',\n\t352: 'Scaron',\n\t353: 'scaron',\n\t376: 'Yuml',\n\t710: 'circ',\n\t732: 'tilde',\n\t8194: 'ensp',\n\t8195: 'emsp',\n\t8201: 'thinsp',\n\t8204: 'zwnj',\n\t8205: 'zwj',\n\t8206: 'lrm',\n\t8207: 'rlm',\n\t8211: 'ndash',\n\t8212: 'mdash',\n\t8216: 'lsquo',\n\t8217: 'rsquo',\n\t8218: 'sbquo',\n\t8220: 'ldquo',\n\t8221: 'rdquo',\n\t8222: 'bdquo',\n\t8224: 'dagger',\n\t8225: 'Dagger',\n\t8240: 'permil',\n\t8249: 'lsaquo',\n\t8250: 'rsaquo',\n\t8364: 'euro'\n};\n\nexport function EscapeHtmlEntities(text: string): string\n{\n\treturn text.replace(/[\\u00A0-\\u2666<>&]/g, (c) =>\n\t{\n\t\treturn `&${escapeHtmlEntityTable[c.charCodeAt(0)] || `#${c.charCodeAt(0)}`};`;\n\t});\n}\n\n/**\n * Syntax highlights a string of code by wrapping parts in HTML spans with classes.\n * @function BeautifyCode\n * @param {string} code The source code string to beautify.\n * @param {string[]} reserved Array of reserved keywords to highlight.\n * @param {boolean} skipCSS If true, suppresses the generation of the <style> block.\n * @returns {string} The HTML string containing the beautified code.\n */\nexport function BeautifyCode(code: string, reserved: string[], skipCSS: boolean)\n{\n\treserved = reserved || [\"abstract\", \"else\", \"instanceof\", \"super\", \"boolean\", \"enum\", \"int\", \"switch\", \"break\", \"export\", \"interface\", \"synchronized\", \"byte\", \"extends\", \"let\", \"this\", \"case\", \"false\", \"long\", \"throw\", \"catch\", \"final\", \"native\", \"throws\", \"char\", \"finally\", \"new\", \"transient\", \"class\", \"float\", \"null\", \"true\", \"const\", \"for\", \"package\", \"try\", \"continue\", \"function\", \"private\", \"typeof\", \"debugger\", \"goto\", \"protected\", \"var\", \"default\", \"if\", \"public\", \"void\", \"delete\", \"implements\", \"return\", \"volatile\", \"do\", \"import\", \"short\", \"while\", \"double\", \"in\", \"static\", \"with\"];\n\n\t// Reserved words\n\tcode = code.replace(/\\b(\\w+)\\b/g, (v) =>\n\t{\n\t\tif (reserved.indexOf(v) != -1) { return `<span class='rsv'>${v}</span>`; }\n\t\treturn v;\n\t});\n\n\t// Numbers\n\tcode = code.replace(/\\b([0-9]+)\\b/g, (v) =>\n\t{\n\t\treturn `<span class='num'>${v}</span>`;\n\t});\n\n\t// Obj.function\n\tcode = code.replace(/(\\w+\\.\\w+)/g, (v) =>\n\t{\n\t\tconst t = v.split(\".\");\n\t\treturn `<span class='obj'>${t[0]}</span>.<span class='prop'>${t[1]}</span>`;\n\t});\n\n\t// Function\n\tcode = code.replace(/(\\w+)\\(/g, (v) =>\n\t{\n\t\treturn `<span class='prop'>${v.substring(0, v.length - 1)}</span>(`;\n\t});\n\n\t// Strings\n\tcode = code.replace(/(\"(\\\\.|[^\"])*\")/g, (v) =>\n\t{\n\t\treturn `<span class='str'>${v}</span>`;\n\t});\n\n\t// Comments\n\tcode = code.replace(/\\/\\*[\\s\\S]*?\\*\\/|([^\\\\:]|^)\\/\\/.*$/gm, (v) =>\n\t{ // /(\\/\\/[a-zA-Z0-9\\?\\!\\(\\)_ ]*)/g\n\t\treturn `<span class='cmnt'>${v.replace(/<[^>]*>/g, \"\")}</span>`;\n\t});\n\n\n\tif (!skipCSS)\n\t{\n\t\tcode = `<style>.obj { color: #79B; } .prop { color: #B97; }\t.str,.num { color: #A79; } .cmnt { color: #798; } .rsv { color: #9AB; } </style>${code}`;\n\t}\n\n\treturn code;\n}\n\n/**\n * Syntax highlights a JSON string or object by wrapping parts in HTML spans.\n * @function BeautifyJSON\n * @param {string | object} code The JSON string or object to beautify.\n * @param {boolean} skipCSS If true, suppresses the generation of the <style> block.\n * @returns {string} The HTML string containing the beautified JSON.\n */\nexport function BeautifyJSON(code: string, skipCSS: boolean)\n{\n\tif (typeof (code) == \"object\")\n\t{ code = JSON.stringify(code); }\n\n\tconst reserved = [\"false\", \"true\", \"null\"];\n\n\t// Reserved words\n\tcode = code.replace(/(\\w+)/g, (v) =>\n\t{\n\t\tif (reserved.indexOf(v) != -1) { return `<span class='rsv'>${v}</span>`; }\n\t\treturn v;\n\t});\n\n\n\t// Numbers\n\tcode = code.replace(/([0-9]+)/g, (v) =>\n\t{\n\t\treturn `<span class='num'>${v}</span>`;\n\t});\n\n\t// Obj.function\n\tcode = code.replace(/(\\w+\\.\\w+)/g, (v) =>\n\t{\n\t\tconst t = v.split(\".\");\n\t\treturn `<span class='obj'>${t[0]}</span>.<span class='prop'>${t[1]}</span>`;\n\t});\n\n\t// Strings\n\tcode = code.replace(/(\"(\\\\.|[^\"])*\")/g, (v) =>\n\t{\n\t\treturn `<span class='str'>${v}</span>`;\n\t});\n\n\t// Comments\n\tcode = code.replace(/(\\/\\/[a-zA-Z0-9?!()_ ]*)/g, (v) =>\n\t{\n\t\treturn `<span class='cmnt'>${v}</span>`;\n\t});\n\n\tif (!skipCSS)\n\t{\n\t\tcode = `<style>.obj { color: #79B; } .prop { color: #B97; }\t.str { color: #A79; } .num { color: #B97; } .cmnt { color: #798; } .rsv { color: #9AB; } </style>${code}`;\n\t}\n\n\treturn code;\n}\n\n/**\n * Converts a Data URI string into a Blob object.\n * @function DataURItoBlob\n * @param {string} dataURI The data URI string (e.g., \"data:image/png;base64,...\").\n * @returns {Blob} The resulting Blob object.\n */\nexport function DataURItoBlob(dataURI: string)\n{\n\tconst pos = dataURI.indexOf(\",\");\n\t// Convert to binary\n\tconst byteString = atob(dataURI.substring(pos + 1));\n\t// Copy from string to array\n\tconst ab = new ArrayBuffer(byteString.length);\n\tconst ia = new Uint8Array(ab);\n\tconst l = byteString.length;\n\tfor (let i = 0; i < l; i++)\n\t{\n\t\tia[i] = byteString.charCodeAt(i);\n\t}\n\n\tlet mime = dataURI.substring(5, pos - 5);\n\tmime = mime.substring(0, mime.length - 7); // Strip \";base64\"\n\treturn new Blob([ab], { type: mime });\n}\n\n/**\n * Converts an RGBA array to a HEXA color string.\n * @function RGBAToHEXA\n * @param {[number, number, number, number]} rgba Array containing r, g, b, a values.\n * @returns {string} The HEXA color string (e.g., \"#RRGGBBAA\").\n */\nexport function RGBAToHEXA(rgba: [number, number, number, number])\n{\n\t// Extract R, G, B, and A values\n\tconst r = rgba[0];\n\tconst g = rgba[1];\n\tconst b = rgba[2];\n\tconst a = rgba[3]; // Alpha value\n\n\t// Convert RGB to HEX\n\tconst toHex = (value: number) =>\n\t{\n\t\tconst hex = value.toString(16);\n\t\treturn hex.length === 1 ? \"0\" + hex : hex;\n\t};\n\n\t// Convert alpha to HEX (multiply by 255 and convert to hex)\n\tconst alphaHex = Math.round(a).toString(16);\n\tconst paddedAlphaHex = alphaHex.length === 1 ? \"0\" + alphaHex : alphaHex;\n\n\t// Combine to form the HEX color with alpha\n\treturn `#${toHex(r)}${toHex(g)}${toHex(b)}${paddedAlphaHex}`;\n}\n\n/**\n * Convert sizes in any format to a valid CSS format (number to string, negative number to calc( 100% - number px )\n * @function SizeToCSS\n * @param {string|Number} value\n * @return {string|undefined} valid css size string\n *\n */\nexport function SizeToCSS(value?: number | string): string | undefined\n{\n\tif (value === undefined || value === null) { return undefined; }\n\tif (value.constructor === String) { return value as string; }\n\tif (typeof (value) == 'number' && value >= 0) { return (value as number | 0) + \"px\"; }\n\treturn \"calc( 100% - \" + Math.abs(value as number | 0) + \"px )\";\n}\n\n/**\n * Triggers a simple event in an object (similar to jQuery.trigger)\n * @function Trigger\n * @param {unknown} element could be an HTMLEntity or a regular object\n * @param {string} eventName the type of the event\n * @param {unknown} params it will be stored in e.detail\n */\nexport function Trigger(element: unknown, eventName: string, params?: unknown): CustomEvent<unknown>\n{\n\tconst evt = new CustomEvent(eventName, { detail: params });\n\n\tif (!element || typeof (element) !== \"object\") { return evt; }\n\n\tif (\"dispatchEvent\" in element)\n\t{\n\t\t(element as DispatchableElement).dispatchEvent(evt);\n\t}\n\telse if (\"__events\" in element)\n\t{\n\t\t(element as TriggerableElement).__events.dispatchEvent(evt);\n\t}\n\n\t// Else nothing seems binded here so nothing to do\n\treturn evt;\n}\n\n// -- Moved from core.ts --\n\n/**\n * Interface for elements that can trigger events via a hidden __events property.\n */\nexport interface TriggerableElement\n{\n\t/** Hidden event target for handling custom events. */\n\t__events: EventTarget;\n}\n\n/**\n * Interface for elements that can dispatch events.\n */\nexport interface DispatchableElement\n{\n\t/** Dispatches a custom event. */\n\tdispatchEvent: (event: CustomEvent<unknown>) => boolean;\n}\n\n/**\n * Interface for objects that hold content within an HTMLDivElement.\n */\nexport interface ContentHolder\n{\n\t/** The HTML container for the content. */\n\tcontent: HTMLDivElement;\n}\n\n/**\n * Interface mixing LiteGUIObject and HTMLElement, with an add function.\n */\nexport interface EmptyLiteGUIObject extends LiteGUIObject, HTMLElement\n{\n\t/** Adds a child element or widget. */\n\tadd: (v: HTMLDivElement | LiteGUIObject) => void;\n}\n\n/**\n * Interface mixing LiteGUIObject and HTMLButtonElement.\n */\nexport interface EmptyLiteGUIButton extends LiteGUIObject, HTMLButtonElement\n{\n}\n\n/**\n * Interface for HTMLSpanElements that reference a widget.\n */\nexport interface TriggerableSpan extends HTMLSpanElement\n{\n\t/** Reference to the widget associated with this span. */\n\twidget: object;\n}\n\n/**\n * Interface for script elements with additional metadata used by the core.\n */\nexport interface CoreScriptElement extends HTMLScriptElement\n{\n\t/** The original source URL of the script. */\n\toriginalSrc: string;\n\t/** The numeric index or identifier of the script. */\n\tnum: number;\n}\n\n/**\n * Interface extending the standard Document to include parentWindow reference.\n */\nexport interface CoreDocument extends Document\n{\n\t/** Reference to the parent window if applicable. */\n\tparentWindow?: Window;\n}\n\n/**\n * Remove from the interface, it is is an HTML element it is removed from its parent, if it is a widget the same.\n * @function RemoveElement\n * @param {string | LiteGUIObject | HTMLElement | HTMLElement[] | NodeListOf<HTMLElement>} element it also supports HTMLentity, selector string or Array of elements\n */\nexport function RemoveElement(element: string | LiteGUIObject | HTMLElement | HTMLElement[] | NodeListOf<HTMLElement>): void\n{\n\tif (!element) { return; }\n\n\tif (typeof element === 'string') // Selector\n\t{\n\t\tconst elements = document.querySelectorAll(element);\n\t\tfor (let i = 0; i < elements.length; ++i)\n\t\t{\n\t\t\tconst element = elements[i];\n\t\t\tif (element && element.parentNode)\n\t\t\t{\n\t\t\t\telement.parentNode.removeChild(element);\n\t\t\t}\n\t\t}\n\t}\n\telse if (Array.isArray(element) || element instanceof NodeList)\n\t{\n\t\tfor (const i in element)\n\t\t{\n\t\t\tRemoveElement(element[i]);\n\t\t}\n\t}\n\telse if (\"root\" in element) // LiteGUI widget\n\t{\n\t\telement.root?.parentNode?.removeChild(element.root);\n\t}\n\telse if (\"parentNode\" in element) // Regular HTML entity\n\t{\n\t\telement.parentNode?.removeChild(element);\n\t}\n}\n\n/**\n * Binds an event in an object (similar to jQuery.bind)\n * If the element is not an HTML entity a new one is created, attached to the object (as non-enumerable, called __events) and used\n * @function Bind\n * @param {string | Object | Object[] | NodeListOf<HTMLElement>} element could be an HTMLEntity, a regular object, a query string or a regular Array of entities\n * @param {String} event the string defining the event\n * @param {EventListenerOrEventListenerObject} callback where to call\n */\nexport function Bind(element: string | object | object[] | NodeListOf<HTMLElement>, event: string, callback: EventListenerOrEventListenerObject): void\n{\n\tif (!element)\n\t{\n\t\tthrow (\"Cannot bind to null\");\n\t}\n\tif (!event)\n\t{\n\t\tthrow (\"Event bind missing\");\n\t}\n\tif (!callback)\n\t{\n\t\tthrow (\"Bind callback missing\");\n\t}\n\n\tif (typeof element === \"string\")\n\t{\n\t\telement = document.querySelectorAll(element);\n\t}\n\n\tfunction inner(element: HTMLElement | TriggerableElement)\n\t{\n\t\tif (!element) { return; }\n\n\t\tif (\"addEventListener\" in element)\n\t\t{\n\t\t\telement.addEventListener(event, callback);\n\t\t}\n\t\telse if (\"__events\" in element)\n\t\t{\n\t\t\telement.__events.addEventListener(event, callback);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tconst triggerable = element as TriggerableElement;\n\t\t\t// Create a dummy HTMLentity so we can use it to bind HTML events\n\t\t\tconst dummy = document.createElement(\"span\") as TriggerableSpan;\n\t\t\tdummy.widget = element; // Double link\n\t\t\tObject.defineProperty(triggerable, \"__events\", {\n\t\t\t\tenumerable: false,\n\t\t\t\tconfigurable: false,\n\t\t\t\twritable: false,\n\t\t\t\tvalue: dummy\n\t\t\t});\n\t\t\ttriggerable.__events.addEventListener(event, callback);\n\t\t}\n\t}\n\n\tif (Array.isArray(element) || element.constructor === NodeList)\n\t{\n\t\tfor (let i = 0; i < element.length; ++i)\n\t\t{\n\t\t\tinner(element[i]);\n\t\t}\n\t}\n\telse\n\t{\n\t\tinner(element as TriggerableElement);\n\t}\n}\n\n/**\n * Unbinds an event in an object (similar to jQuery.unbind)\n * @function Unbind\n * @param {Object} element could be an HTMLEntity or a regular object\n * @param {String} event the string defining the event\n * @param {EventListenerOrEventListenerObject} callback where to call\n */\nexport function Unbind(element: HTMLElement | TriggerableElement, event: string, callback: EventListenerOrEventListenerObject): void\n{\n\tif (\"removeEventListener\" in element)\n\t{\n\t\telement.removeEventListener(event, callback);\n\t}\n\telse if (\"__events\" in element)\n\t{\n\t\telement.__events.removeEventListener(event, callback);\n\t}\n}\n\n/**\n * Removes a class\n * @function RemoveClass\n * @param {HTMLElement} elem\n * @param {String} selector\n * @param {String} className\n */\nexport function RemoveClass(elem: HTMLElement, selector: string, className?: string): void\n{\n\tif (!className)\n\t{\n\t\tclassName = selector;\n\t\tselector = \".\" + selector;\n\t}\n\tconst list = (elem || document).querySelectorAll(selector);\n\tfor (let i = 0; i < list.length; ++i)\n\t{ list[i].classList.remove(className); }\n}\n\n/**\n * Wrapper of document.getElementById\n * @function GetById\n * @param {String} id\n * return {HTMLEntity}\n *\n */\nexport function GetById(id: string): HTMLElement | null\n{\n\treturn document.getElementById(id);\n}\n\n/**\n * Test if the cursor is inside an element\n * @function IsCursorOverElement\n * @param {MouseEvent} event\n * @param {HTMLElement} element\n *\n */\nexport function IsCursorOverElement(event: MouseEvent, element: HTMLElement): boolean\n{\n\tconst left = event.pageX;\n\tconst top = event.pageY;\n\tconst rect = element.getBoundingClientRect();\n\tif (!rect) { return false; }\n\tif (top > rect.top && top < (rect.top + rect.height) &&\n\t\tleft > rect.left && left < (rect.left + rect.width))\n\t{\n\t\treturn true;\n\t}\n\treturn false;\n}\n\n/**\n * Returns the bounding client rect of an element.\n * @function getRect\n * @param {HTMLElement} element The element to measure.\n * @returns {DOMRect} The bounding rectangle.\n */\nexport function GetRect(element: HTMLElement): DOMRect\n{\n\treturn element.getBoundingClientRect();\n}\n\n/**\n * Copy a string to the clipboard (it needs to be invoqued from a click event)\n * @function ToClipboard\n * @param {String | Record<string, unknown>} data\n */\nexport function ToClipboard(data: string | Record<string, unknown>): void\n{\n\tif (typeof data !== \"string\")\n\t{\n\t\tdata = JSON.stringify(data);\n\t}\n\n\ttry\n\t{\n\t\tconst copyPromise = navigator.clipboard.writeText(data);\n\t\tcopyPromise.then(() =>\n\t\t{\n\t\t\tconsole.log(\"Saved to clipboard\");\n\t\t}).catch((err) =>\n\t\t{\n\t\t\tconsole.warn(\"Problem saving to clipboard\", err);\n\t\t});\n\t}\n\tcatch (err)\n\t{\n\t\tconsole.warn('Oops, unable to copy using the true clipboard', err);\n\t}\n}\n\n/**\n * Insert some CSS code to the website\n * @function AddCSS\n * @param {String|CSSStyleDeclaration} code it could be a string with CSS rules, or an object with the style syntax.\n *\n */\nexport function AddCSS(code: string | CSSStyleDeclaration)\n{\n\tif (!code) { return; }\n\n\tif (typeof code === \"string\")\n\t{\n\t\tconst style = document.createElement('style') as HTMLStyleElement;\n\t\tstyle.innerHTML = code;\n\t\tdocument.getElementsByTagName('head')[0].appendChild(style);\n\t\treturn;\n\t}\n\n\tfor (const i in code)\n\t{\n\t\tdocument.body.style[i] = code[i];\n\t}\n\n}\n\n/**\n * Requires a new CSS\n * @function RequireCSS\n * @param {String} url string with url or an array with several urls\n * @param {Function} onComplete\n *\n */\nexport function RequireCSS(url: string | Array<string>, onComplete: (ev: Event) => void)\n{\n\tif (typeof (url) == \"string\")\n\t{ url = [url]; }\n\n\twhile (url.length)\n\t{\n\t\tconst link = document.createElement('link') as HTMLLinkElement;\n\t\t// Link.id = cssId;\n\t\tlink.rel = 'stylesheet';\n\t\tlink.type = 'text/css';\n\t\tlink.href = url.shift(/* 1 */) as string;\n\t\tlink.media = 'all';\n\t\tconst head = document.getElementsByTagName('head')[0];\n\t\thead.appendChild(link);\n\t\tif (url.length == 0)\n\t\t{\n\t\t\tlink.onload = onComplete;\n\t\t}\n\t}\n}\n\nexport interface RequestOptions\n{\n\turl: string,\n\tdataType: string,\n\tmimeType?: string,\n\tdata?: Array<string>,\n\tnocache?: boolean,\n\terror?: (err: string | ProgressEvent<EventTarget>) => void,\n\tsuccess?: (data: unknown, xhr: XMLHttpRequest) => void\n}\n\n/**\n * Request file from url (it could be a binary, text, etc.). If you want a simplied version use\n * @function Request\n * @param {RequestOptions} request object with all the parameters like data (for sending forms), dataType, success, error\n */\nexport function Request(request: RequestOptions)\n{\n\tlet dataType = request.dataType ?? \"text\";\n\tif (dataType == \"json\") // Parse it locally\n\t{\n\t\tdataType = \"text\";\n\t}\n\telse if (dataType == \"xml\") // Parse it locally\n\t{\n\t\tdataType = \"text\";\n\t}\n\telse if (dataType == \"binary\")\n\t{\n\t\t// Request.mimeType = \"text/plain; charset=x-user-defined\";\n\t\tdataType = \"arraybuffer\";\n\t\trequest.mimeType = \"application/octet-stream\";\n\t}\n\n\t// Regular case, use AJAX call\n\tconst xhr = new XMLHttpRequest();\n\txhr.open(request.data ? 'POST' : 'GET', request.url, true);\n\tif (dataType)\n\t{\n\t\txhr.responseType = dataType as XMLHttpRequestResponseType;\n\t}\n\tif (request.mimeType)\n\t{\n\t\txhr.overrideMimeType(request.mimeType);\n\t}\n\tif (request.nocache)\n\t{\n\t\txhr.setRequestHeader('Cache-Control', 'no-cache');\n\t}\n\n\txhr.onload = function ()\n\t{\n\t\tlet response = this.response;\n\t\tif (this.status != 200)\n\t\t{\n\t\t\tconst err = \"Error \" + this.status;\n\t\t\tif (request.error)\n\t\t\t{\n\t\t\t\trequest.error(err);\n\t\t\t}\n\t\t\tTrigger(xhr, \"fail\", this.status);\n\t\t\treturn;\n\t\t}\n\n\t\tif (request.dataType == \"json\") // Chrome doesnt support json format\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tresponse = JSON.parse(response);\n\t\t\t}\n\t\t\tcatch (err)\n\t\t\t{\n\t\t\t\tif (request.error)\n\t\t\t\t{\n\t\t\t\t\trequest.error(err as string);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (request.dataType == \"xml\")\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tconst xmlparser = new DOMParser();\n\t\t\t\tresponse = xmlparser.parseFromString(response, \"text/xml\");\n\t\t\t}\n\t\t\tcatch (err)\n\t\t\t{\n\t\t\t\tif (request.error)\n\t\t\t\t{\n\t\t\t\t\trequest.error(err as string);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (request.success)\n\t\t{\n\t\t\trequest.success.call(this, response, this);\n\t\t}\n\t};\n\txhr.onerror = function (err)\n\t{\n\t\tif (request.error) { request.error(err); }\n\t};\n\n\tconst data = new FormData();\n\tif (request.data)\n\t{\n\t\tfor (const i in request.data)\n\t\t{\n\t\t\tdata.append(i, request.data[i]);\n\t\t}\n\t}\n\n\txhr.send(data);\n\treturn xhr;\n}\n\n/**\n * Request file from url\n * @function RequestText\n * @param {String} url\n * @param {(data: string, xhr: XMLHttpRequest) => void} onComplete\n * @param {(err: string | ProgressEvent<EventTarget>) => void} onError\n *\n */\nexport function RequestText(url: string,\n\tonComplete: (data: unknown | string, xhr: XMLHttpRequest) => void,\n\tonError: (err: string | ProgressEvent<EventTarget>) => void)\n{\n\treturn Request({ url: url, dataType: \"text\", success: onComplete, error: onError });\n}\n\n/**\n * Request file from url\n * @function RequestJSON\n * @param {String} url\n * @param {(data: object, xhr: XMLHttpRequest) => void} onComplete\n * @param {(err: string | ProgressEvent<EventTarget>) => void} onError\n *\n */\nexport function RequestJSON(url: string,\n\tonComplete: (data: object | unknown, xhr: XMLHttpRequest) => void,\n\tonError: (err: string | ProgressEvent<EventTarget>) => void)\n{\n\treturn Request({ url: url, dataType: \"json\", success: onComplete, error: onError });\n}\n\n/**\n * Request binary file from url\n * @function RequestBinary\n * @param {String} url\n * @param {(data: ArrayBuffer | unknown, xhr: XMLHttpRequest) => void} onComplete\n * @param {(err: string | ProgressEvent<EventTarget>) => void} onError\n *\n */\nexport function RequestBinary(url: string,\n\tonComplete: (data: ArrayBuffer | unknown, xhr: XMLHttpRequest) => void,\n\tonError: (err: string | ProgressEvent<EventTarget>) => void)\n{\n\treturn Request({ url: url, dataType: \"binary\", success: onComplete, error: onError });\n}\n\n\n/**\n * Request script and inserts it in the DOM\n * @function RequireScript\n * @param {String|Array} url the url of the script or an array containing several urls\n * @param {(scripts: Array<CoreScriptElement>) => void} onComplete\n * @param {(err: string | Event, src: string, num: number) => void} onError\n * @param {(src: string, num: number) => void} onProgress (if several files are required, onProgress is called after every file is added to the DOM)\n *\n */\nexport function RequireScript(url: string | Array<string>,\n\tonComplete: (scripts: Array<CoreScriptElement>) => void,\n\tonError: (err: string | Event, src: string, num: number) => void,\n\tonProgress: (src: string, num: number) => void,\n\tversion: number)\n{\n\tif (!url) { throw (\"invalid URL\"); }\n\n\tif (typeof url === \"string\") { url = [url]; }\n\n\tlet total = url.length;\n\tconst loadedScripts: Array<CoreScriptElement> = [];\n\tconst onload = function (script: CoreScriptElement)\n\t{\n\t\ttotal--;\n\t\tloadedScripts.push(script);\n\t\tif (total)\n\t\t{\n\t\t\tif (onProgress) { onProgress(script.originalSrc, script.num); }\n\t\t}\n\t\telse if (onComplete)\n\t\t{\n\t\t\tonComplete(loadedScripts);\n\t\t}\n\t};\n\n\tfor (const i in url)\n\t{\n\t\tconst script = document.createElement('script') as CoreScriptElement;\n\t\tscript.num = parseInt(i);\n\t\tscript.type = 'text/javascript';\n\t\tscript.src = url[script.num] + (version ? \"?version=\" + version : \"\");\n\t\tscript.originalSrc = url[script.num];\n\t\tscript.async = false;\n\t\tscript.onload = onload.bind(undefined, script);\n\t\tif (onError)\n\t\t{\n\t\t\tscript.onerror = function (err: string | Event)\n\t\t\t{\n\t\t\t\tonError(err, this.originalSrc, this.num);\n\t\t\t};\n\t\t}\n\t\tdocument.getElementsByTagName('head')[0].appendChild(script);\n\t}\n}\n\n/**\n * Shows a generic message dialog.\n * @function ShowMessage\n * @param {string} content The message content.\n * @param {DialogOptions} [options] Configuration options.\n * @returns {Dialog} The created Dialog instance.\n */\nexport function ShowMessage(content: string, options?: DialogOptions)\n{\n\toptions = options ?? {};\n\n\toptions.title = options.title ?? \"Attention\";\n\toptions.content = content;\n\toptions.close = 'fade';\n\tconst dialog = new Dialog(options);\n\tif (options.closable) { dialog.addButton(\"Close\", { close: true }); }\n\n\tdialog.makeModal();\n\treturn dialog;\n}\n\n/**\n * Shows a dialog with a message\n * @function PopupDialog\n * @param {String} content\n * @param {DialogOptions} [options]\n * @returns {Dialog}\n */\nexport function PopupDialog(content: string, options?: DialogOptions): Dialog\n{\n\toptions = options ?? {};\n\n\toptions.minHeight = 140;\n\tif (typeof content == \"string\") { content = `<p>${content}</p>`; }\n\n\toptions.content = content;\n\toptions.close = 'fade';\n\n\tconst dialog = new Dialog(options);\n\tif (options.closable) { dialog.addButton(\"Close\", { close: true }); }\n\tdialog.show();\n\treturn dialog;\n}\n\n\n/**\n * Options for configuring message dialogs (alert, confirm, prompt).\n */\nexport interface MessageOptions\n{\n\t/** Whether to show a textarea for input. */\n\ttextarea?: boolean;\n\t/** Initial value for input fields. */\n\tvalue?: string;\n\t/** Custom CSS class name for the dialog. */\n\tclassName?: string;\n\t/** Title of the dialog. */\n\ttitle?: string;\n\t/** Width of the dialog in pixels. */\n\twidth?: number;\n\t/** Height of the dialog in pixels. */\n\theight?: number;\n\t/** HTML content to display in the dialog. */\n\tcontent?: string;\n\t/** If true, the dialog cannot be closed by the user. */\n\tnoclose?: boolean;\n}\n\n/**\n * Shows an alert dialog with a message\n * @function AlertDialog\n * @param {String} content\n * @param {MessageOptions} [options]\n * @returns {Dialog}\n */\nexport function AlertDialog(content: string, options?: MessageOptions): Dialog\n{\n\toptions = options ?? {};\n\n\toptions.className = \"alert\";\n\toptions.title = options.title ?? \"Alert\";\n\toptions.width = options.width ?? 280;\n\toptions.height = options.height ?? 140;\n\tif (typeof content == \"string\") { content = `<p>${content}</p>`; }\n\n\tRemoveElement(\".litepanel.alert\"); // Kill other panels\n\treturn ShowMessage(content, options);\n}\n\n/**\n * Shows a confirm dialog with a message\n * @function ConfirmDialog\n * @param {String} content\n * @param {(value: boolean) => void} callback\n * @param {MessageOptions} [options]\n * @returns {Dialog}\n */\nexport function ConfirmDialog(content: string,\n\tcallback: (value: boolean) => void,\n\toptions?: MessageOptions): Dialog\n{\n\toptions = options ?? {};\n\toptions.className = \"alert\";\n\toptions.title = options.title ?? \"Confirm\";\n\toptions.width = options.width ?? 280;\n\tif (typeof (content) == \"string\")\n\t{\n\t\tcontent = `<p>${content}</p>`;\n\t}\n\n\tcontent += \"<button class='litebutton' data-value='yes' style='width:45%; margin-left: 10px'>Yes</button><button class='litebutton' data-value='no' style='width:45%'>No</button>\";\n\toptions.noclose = true;\n\n\tconst dialog = ShowMessage(content, options);\n\tdialog.content.style.paddingBottom = \"10px\";\n\tconst buttons = dialog.content.querySelectorAll(\"button\");\n\n\tconst _onClick = (v: PointerEvent) =>\n\t{\n\t\tconst button = v.target as HTMLButtonElement;\n\t\tconst value = button.dataset.value == \"yes\";\n\t\tdialog.close(); // Close before callback\n\t\tif (callback)\n\t\t{\n\t\t\tcallback(value);\n\t\t}\n\t};\n\tfor (let i = 0; i < buttons.length; i++)\n\t{\n\t\tconst button = buttons[i];\n\t\tbutton.addEventListener(\"click\", _onClick);\n\t}\n\tbuttons[0].focus();\n\n\treturn dialog;\n}\n\n/**\n * Shows a prompt dialog with a message\n * @function PromptDialog\n * @param {String} content\n * @param {(value?: string) => void} callback\n * @param {MessageOptions} [options]\n * @returns {Dialog}\n */\nexport function PromptDialog(content: string,\n\tcallback: (value?: string) => void,\n\toptions?: MessageOptions): Dialog\n{\n\toptions = options ?? {};\n\toptions.className = \"alert\";\n\toptions.title = options.title ?? \"Prompt\";\n\toptions.width = options.width ?? 280;\n\n\tif (typeof (content) == \"string\")\n\t{\n\t\tcontent = `<p>${content}</p>`;\n\t}\n\n\tconst value = options.value ?? \"\";\n\tlet textinput = `<input type='text' value='${value}'/>`;\n\tif (options.textarea)\n\t{\n\t\ttextinput = `<textarea class='textfield' style='width:95%'>${value}</textarea>`;\n\t}\n\n\tcontent += `<p>${textinput}</p><button class='litebutton' data-value='accept' style='width:45%; margin-left: 10px; margin-bottom: 10px'>Accept</button><button class='litebutton' data-value='cancel' style='width:45%'>Cancel</button>`;\n\toptions.noclose = true;\n\tconst dialog = ShowMessage(content, options);\n\n\tconst buttons = dialog.content.querySelectorAll(\"button\");\n\tconst input = dialog.content.querySelector(\"input,textarea\") as HTMLInputElement;\n\n\tconst _onEvent = function (e: Event)\n\t{\n\t\tconst button = e.target as HTMLButtonElement;\n\t\tlet value: string | undefined = input.value;\n\t\tif (button && button.dataset && button.dataset.value == \"cancel\")\n\t\t{\n\t\t\tvalue = undefined;\n\t\t}\n\t\tdialog.close(); // Close before callback\n\t\tif (callback) { callback(value); }\n\t};\n\n\tfor (let i = 0; i < buttons.length; i++)\n\t{\n\t\tbuttons[i].addEventListener(\"click\", _onEvent);\n\t}\n\n\tconst _onKeyDown = function (e: KeyboardEvent)\n\t{\n\t\tif (e.key == \"Enter\")\n\t\t{\n\t\t\t_onEvent(e);\n\t\t\treturn false;\n\t\t}\n\t\tif (e.key == \"Escape\") { dialog.close(); }\n\t\treturn;\n\t};\n\n\tinput?.addEventListener(\"keydown\", _onKeyDown, true);\n\n\tinput?.focus();\n\treturn dialog;\n}\n\n\n/**\n * Shows a choice dialog with a message\n * @function ChoiceDialog\n * @param {String} content\n * @param {Array<string|ContentHolder>} choices\n * @param {(value: string | ContentHolder) => void} callback\n * @param {MessageOptions} [options]\n * @returns {Dialog}\n */\nexport function ChoiceDialog(content: string, choices: Array<string | ContentHolder>, callback: (value: string | ContentHolder) => void, options?: MessageOptions): Dialog\n{\n\toptions = options ?? {};\n\toptions.className = \"alert\";\n\toptions.title = options.title ?? \"Select one option\";\n\toptions.width = options.width ?? 280;\n\t// Options.height = 100;\n\tif (typeof (content) == \"string\")\n\t{\n\t\tcontent = `<p>${content}</p>`;\n\t}\n\n\tfor (const i in choices)\n\t{\n\t\tconst choice = typeof choices[i] === \"string\" ? choices[i] : choices[i].content;\n\t\tcontent += `<button class='litebutton' data-value='${i}' style='width:45%; margin-left: 10px'>${choice}</button>`;\n\t}\n\toptions.noclose = true;\n\n\tconst dialog = ShowMessage(content, options);\n\tdialog.content.style.paddingBottom = \"10px\";\n\tconst buttons = dialog.content.querySelectorAll(\"button\");\n\n\tconst inner = (v: PointerEvent) =>\n\t{\n\t\tconst button = v.target as HTMLButtonElement;\n\t\tconst value = choices[button.dataset.value as keyof object];\n\t\tdialog.close(); // Close before callback\n\t\tif (callback) { callback(value); }\n\t};\n\tfor (let i = 0; i < buttons.length; i++)\n\t{\n\t\tbuttons[i].onclick = inner;\n\t}\n\n\treturn dialog;\n}\n\n\n// Old version, it loads one by one, so it is slower\n/**\n * Loads scripts sequentially from a list of URLs.\n * @function RequireScriptSerial\n * @param {string | string[]} url Single URL or array of URLs to load.\n * @param {(loadedScripts: GlobalEventHandlers[]) => void} onComplete Callback when all scripts are loaded.\n * @param {(url: string, remaining: number) => void} onProgress Callback for progress updates.\n */\nexport function RequireScriptSerial(url: string | string[],\n\tonComplete: (loadedScripts: GlobalEventHandlers[]) => void,\n\tonProgress: (url: string, remaining: number) => void)\n{\n\tif (typeof (url) == \"string\")\n\t{\n\t\turl = [url];\n\t}\n\n\tconst loadedScripts: GlobalEventHandlers[] = [];\n\tfunction addScript()\n\t{\n\t\tconst script = document.createElement('script');\n\t\tscript.type = 'text/javascript';\n\t\tscript.src = (url as string[]).shift() as string;\n\t\tscript.onload = function ()\n\t\t{\n\t\t\tif (url.length)\n\t\t\t{\n\t\t\t\tif (onProgress)\n\t\t\t\t{\n\t\t\t\t\tonProgress(url[0], url.length);\n\t\t\t\t}\n\n\t\t\t\taddScript();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tloadedScripts.push(this);\n\n\t\t\tif (onComplete)\n\t\t\t{\n\t\t\t\tonComplete(loadedScripts);\n\t\t\t}\n\t\t};\n\t\tdocument.getElementsByTagName('head')[0].appendChild(script);\n\t}\n\n\taddScript();\n}\n\n/**\n * Creates an HTML element\n * @function CreateElement\n * @param {String} tag\n * @param {String} classID string containing id and classes, example: \"myid .someclass .anotherclass\"\n * @param {String} content\n * @param {string | CSSStyleDeclaration} [style]\n * @param {EventListenerOrEventListenerObject[]} [events]\n */\nexport function CreateElement(tag: string,\n\tclassID: string,\n\tcontent: string,\n\tstyle?: string | CSSStyleDeclaration,\n\tevents?: EventListenerOrEventListenerObject[])\n{\n\tconst elem = document.createElement(tag) as EmptyLiteGUIObject;\n\tif (classID)\n\t{\n\t\tconst t = classID.split(\" \");\n\t\tfor (let i = 0; i < t.length; i++)\n\t\t{\n\t\t\tif (t[i][0] == \".\")\n\t\t\t{\n\t\t\t\telem.classList.add(t[i].substring(1));\n\t\t\t}\n\t\t\telse if (t[i][0] == \"#\")\n\t\t\t{\n\t\t\t\telem.id = t[i].substring(1);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\telem.id = t[i];\n\t\t\t}\n\t\t}\n\t}\n\telem.root = elem;\n\n\tif (content)\n\t{\n\t\telem.innerHTML = content;\n\t}\n\telem.add = function (v: HTMLDivElement | LiteGUIObject)\n\t{\n\t\tthis.appendChild(\"root\" in v ? v.root : v);\n\t};\n\n\tif (style)\n\t{\n\t\tif (typeof style === \"string\")\n\t\t{\n\t\t\telem.setAttribute(\"style\", style);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfor (const i in style)\n\t\t\t{\n\t\t\t\telem.style[i] = style[i];\n\t\t\t}\n\t\t}\n\t}\n\n\tif (events)\n\t{\n\t\tfor (const i in events)\n\t\t{\n\t\t\telem.addEventListener(i, events[i]);\n\t\t}\n\t}\n\treturn elem;\n}\n\n/**\n * Useful to create elements from a text like '<div><span class=\"title\"></span></div>' and an object like { \".title\":\"mytitle\" }\n * @function CreateListItem\n * @param {String} code\n * @param {Record<string, string>} values it will use innerText in the elements that matches that selector\n * @param {CSSStyleDeclaration} style\n * @return {HTMLElement}\n *\n */\nexport function CreateListItem(code: string,\n\tvalues: Record<string, string>,\n\tstyle?: Partial<CSSStyleDeclaration> | Record<string, string>)\n{\n\tlet elem: HTMLSpanElement = document.createElement(\"span\");\n\telem.innerHTML = code;\n\tconst first = elem.childNodes[0];\n\n\tif (!first) { throw (\"Error creating list item\"); }\n\n\telem = first as HTMLElement;\n\n\tif (values)\n\t{\n\t\tfor (const i in values)\n\t\t{\n\t\t\tconst subelem = elem.querySelector(i) as HTMLElement;\n\t\t\tif (subelem) { subelem.innerText = values[i]; }\n\t\t}\n\t}\n\n\tif (style)\n\t{\n\t\tfor (const i in style)\n\t\t{\n\t\t\tconst value = (style as Record<string, unknown>)[i];\n\t\t\tif (typeof value === \"string\")\n\t\t\t{\n\t\t\t\t(elem.style as unknown as Record<string, string>)[i] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn elem;\n}\n\n/**\n * Creates a button element\n * @function CreateButton\n * @param {String} classID ID or class\n * @param {String} content\n * @param {(ev: PointerEvent) => void} callback when the button is pressed\n * @param {CSSStyleDeclaration|String} style\n *\n */\nexport function CreateButton(classID: string, content: string,\n\tcallback: (ev: PointerEvent) => void,\n\tstyle: CSSStyleDeclaration | string)\n{\n\tconst elem = document.createElement(\"button\") as EmptyLiteGUIButton;\n\telem.className = \"litegui litebutton button\";\n\tif (classID)\n\t{\n\t\tconst t = classID.split(\" \");\n\t\tfor (let i = 0; i < t.length; i++)\n\t\t{\n\t\t\tif (t[i][0] == \".\")\n\t\t\t{\n\t\t\t\telem.classList.add(t[i].substring(1));\n\t\t\t}\n\t\t\telse if (t[i][0] == \"#\")\n\t\t\t{\n\t\t\t\telem.id = t[i].substring(1);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\telem.id = t[i];\n\t\t\t}\n\t\t}\n\t}\n\n\telem.root = elem;\n\tif (content !== undefined)\n\t{\n\t\telem.innerHTML = content;\n\t}\n\n\tif (callback)\n\t{\n\t\telem.onclick = callback;\n\t}\n\n\tif (style)\n\t{\n\t\tif (typeof style === \"string\")\n\t\t{\n\t\t\telem.setAttribute(\"style\", style);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfor (const i in style)\n\t\t\t{\n\t\t\t\telem.style[i] = style[i];\n\t\t\t}\n\t\t}\n\t}\n\treturn elem;\n}\n\n/**\n * Retrieves all parent elements of the given element up to the document root.\n * @function GetParents\n * @param {HTMLElement} element The starting element.\n * @returns {HTMLElement[]} Array of parent elements.\n */\nexport function GetParents(element: HTMLElement): Array<HTMLElement>\n{\n\tconst elements = [];\n\tlet curElement = element.parentElement;\n\twhile (curElement !== null)\n\t{\n\t\tif (element.nodeType !== Node.ELEMENT_NODE)\n\t\t{\n\t\t\tcontinue;\n\t\t}\n\t\telements.push(element);\n\t\tcurElement = curElement.parentElement;\n\t}\n\treturn elements;\n}\n\n/**\n * Opens a new window with copied styles and optional scripts.\n * @function NewWindow\n * @param {string} title syntax title for the new window.\n * @param {number} width Width of the window.\n * @param {number} height Height of the window.\n * @param {{ scripts?: boolean, content?: string }} [options] Configuration object.\n * @param {boolean} [options.scripts] Whether to copy scripts to the new window.\n * @param {string} [options.content] HTML content to inject into the new window.\n * @returns {Window} The newly created window object.\n */\nexport function NewWindow(title: string, width: number, height: number,\n\toptions?: { scripts?: boolean, content?: string }): Window\n{\n\toptions = options ?? {};\n\tconst newWindow = window.open(\"\", \"\", `width=${width}, height=${height}, location=no, status=no, menubar=no, titlebar=no, fullscreen=yes`) as Window;\n\tnewWindow.document.writeln(`<html><head><title>${title}</title>`);\n\n\t// Transfer style\n\tconst styles = document.querySelectorAll(\"link[rel='stylesheet'],style\");\n\tfor (let i = 0; i < styles.length; i++)\n\t{\n\t\tnewWindow.document.writeln(styles[i].outerHTML);\n\t}\n\n\t// Transfer scripts (optional because it can produce some errors)\n\tif (options.scripts)\n\t{\n\t\tconst scripts = document.querySelectorAll(\"script\");\n\t\tfor (let i = 0; i < scripts.length; i++)\n\t\t{\n\t\t\tif (scripts[i].src) // Avoid inline scripts, otherwise a cloned website would be created\n\t\t\t{\n\t\t\t\tnewWindow.document.writeln(scripts[i].outerHTML);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst content = options.content ?? \"\";\n\tnewWindow.document.writeln(`</head><body>${content}</body></html>`);\n\tnewWindow.document.close();\n\treturn newWindow;\n}\n\n/**\n * Triggers a download of the resource at the specified URL.\n * @function DownloadURL\n * @param {string} url The URL of the resource to download.\n * @param {string} filename The name to save the file as.\n */\nexport function DownloadURL(url: string, filename: string)\n{\n\tconst link = document.createElement('a');\n\tlink.href = url;\n\tlink.download = filename;\n\tdocument.body.appendChild(link);\n\tlink.click();\n\tdocument.body.removeChild(link);\n}\n\n/**\n * Triggers a download of a File or Blob object.\n * @function DownloadFile\n * @param {string} filename The name to save the file as.\n * @param {File | Blob} data The file data.\n * @param {string} dataType MIME type of the data if not specified in the Blob.\n */\nexport function DownloadFile(filename: string, data: File | Blob, dataType: string)\n{\n\tif (!data)\n\t{\n\t\tconsole.warn(\"No file provided to download\");\n\t\treturn;\n\t}\n\n\tif (!dataType)\n\t{\n\t\tif (data.constructor === String)\n\t\t{ dataType = 'text/plain'; }\n\t\telse\n\t\t{ dataType = 'application/octet-stream'; }\n\t}\n\n\tlet file = null;\n\tif (!(data instanceof File) && !(data instanceof Blob))\n\t{\n\t\tfile = new Blob([data], { type: dataType });\n\t}\n\telse\n\t{\n\t\tfile = data;\n\t}\n\n\tconst url = URL.createObjectURL(file);\n\tconst element = document.createElement(\"a\");\n\telement.setAttribute('href', url);\n\telement.setAttribute('download', filename);\n\telement.style.display = 'none';\n\tdocument.body.appendChild(element);\n\telement.click();\n\tdocument.body.removeChild(element);\n\tsetTimeout(() => { URL.revokeObjectURL(url); }, 1000 * 60); // Wait one minute to revoke url\n}\n\n/**\n * Returns the URL vars ( ?foo=faa&foo2=etc )\n * @function GetUrlVars\n *\n */\nexport function GetUrlVars(): Array<string>\n{\n\tconst vars = [];\n\tlet hash;\n\tconst hashes: string | Array<string> = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');\n\tfor (let i = 0; i < hashes.length; i++)\n\t{\n\t\thash = hashes[i].split('=');\n\t\tvars.push(hash[0]);\n\t\tvars[hash[0] as keyof object] = hash[1];\n\t}\n\treturn vars;\n}\n\n/**\n * Retrieves a specific query parameter from the URL.\n * @function GetUrlVar\n * @param {string} name The name of the parameter.\n * @returns {string} The value of the parameter.\n */\nexport function GetUrlVar(name: string): string\n{\n\treturn GetUrlVars()[name as keyof object];\n}\n\n/**\n * Makes one element draggable\n * @function Draggable\n * @param {HTMLElement} container the element that will be dragged\n * @param {HTMLElement} dragger the area to start the dragging\n * @param {(container: HTMLElement, e: MouseEvent) => void} onStart Callback when the dragging starts.\n * @param {(container: HTMLElement, e: MouseEvent) => void} onFinish Callback when the dragging finishes.\n * @param {(container: HTMLElement, e: MouseEvent) => boolean} onIsDraggable Callback to determine if the element is currently draggable.\n */\nexport function Draggable(container: HTMLElement,\n\tdragger?: HTMLElement,\n\tonStart?: (container: HTMLElement, e: MouseEvent) => void,\n\tonFinish?: (container: HTMLElement, e: MouseEvent) => void,\n\tonIsDraggable?: (container: HTMLElement, e: MouseEvent) => boolean)\n{\n\tdragger = dragger ?? container;\n\tdragger.addEventListener(\"mousedown\", _onMouseEvent);\n\tdragger.style.cursor = \"move\";\n\tlet prevX = 0;\n\tlet prevY = 0;\n\n\tlet rect = container.getClientRects()[0];\n\tlet x = rect ? rect.left : 0;\n\tlet y = rect ? rect.top : 0;\n\n\tcontainer.style.position = \"absolute\";\n\tcontainer.style.left = x + \"px\";\n\tcontainer.style.top = y + \"px\";\n\n\tfunction _onMouseEvent(e: MouseEvent)\n\t{\n\t\tif (e.type == \"mousedown\")\n\t\t{\n\t\t\tif (!rect)\n\t\t\t{\n\t\t\t\trect = container.getClientRects()[0];\n\t\t\t\tx = rect ? rect.left : 0;\n\t\t\t\ty = rect ? rect.top : 0;\n\t\t\t}\n\n\t\t\tif (onIsDraggable && onIsDraggable(container, e) == false)\n\t\t\t{\n\t\t\t\te.stopPropagation();\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tprevX = e.clientX;\n\t\t\tprevY = e.clientY;\n\t\t\tdocument.addEventListener(\"mousemove\", _onMouseEvent);\n\t\t\tdocument.addEventListener(\"mouseup\", _onMouseEvent);\n\t\t\tif (onStart) { onStart(container, e); }\n\t\t\te.stopPropagation();\n\t\t\treturn false;\n\t\t}\n\n\t\tif (e.type == \"mouseup\")\n\t\t{\n\t\t\tdocument.removeEventListener(\"mousemove\", _onMouseEvent);\n\t\t\tdocument.removeEventListener(\"mouseup\", _onMouseEvent);\n\n\t\t\tif (onFinish) { onFinish(container, e); }\n\t\t\treturn;\n\t\t}\n\n\t\tif (e.type == \"mousemove\")\n\t\t{\n\t\t\tconst deltax = e.clientX - prevX;\n\t\t\tconst deltay = e.clientY - prevY;\n\t\t\tprevX = e.clientX;\n\t\t\tprevY = e.clientY;\n\t\t\tx += deltax;\n\t\t\ty += deltay;\n\t\t\tcontainer.style.left = x + \"px\";\n\t\t\tcontainer.style.top = y + \"px\";\n\t\t}\n\t\treturn;\n\t}\n}\n\n/**\n * Clones object content\n * @function CloneObject\n * @param {Object} source\n * @param {Object} target\n *\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function CloneObject(source: any, target: any)\n{\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tconst o: any = typeof target !== \"object\" ? {} : target;\n\tfor (const i in source)\n\t{\n\t\tif (i[0] == \"_\" || i.substring(0, 5) == \"jQuery\") // Skip vars with _ (they are private)\n\t\t{\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst v = source[i];\n\t\tif (v == null)\n\t\t{\n\t\t\to[i] = null;\n\t\t}\n\t\telse if (typeof v === 'function')\n\t\t{\n\t\t\tcontinue;\n\t\t}\n\t\telse if (typeof v == \"number\" || typeof v == \"string\")\n\t\t{\n\t\t\to[i] = v;\n\t\t}\n\t\telse if (typeof v == \"object\" && \"constructor\" in v && v.constructor == Float32Array) // Typed arrays are ugly when serialized\n\t\t{\n\t\t\to[i] = Array.from(v); // Clone\n\t\t}\n\t\telse if (Array.isArray(v))\n\t\t{\n\t\t\tif (o[i] && o[i].constructor == Float32Array) // Reuse old container\n\t\t\t{\n\t\t\t\to[i].set(v);\n\t\t\t}\n\t\t\telse // Not safe using slice because it doesn't clone content, only container\n\t\t\t{\n\t\t\t\to[i] = JSON.parse(JSON.stringify(v));\n\t\t\t}\n\t\t}\n\t\telse // Slow but safe\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\t// Prevent circular recursions\n\t\t\t\to[i] = JSON.parse(JSON.stringify(v));\n\t\t\t}\n\t\t\tcatch (err)\n\t\t\t{\n\t\t\t\tconsole.error(err);\n\t\t\t}\n\t\t}\n\t}\n\treturn o;\n}\n\n/**\n * Removing spaces and dots from a string.\n * @function SafeName\n * @param {string} str The input string.\n * @returns {string} The sanitized string.\n */\nexport function SafeName(str: string): string\n{\n\treturn String(str).replace(/[\\s.]/g, '');\n}\n\n/**\n * Encodes an HTML string by replacing special characters with unicode.\n * @function HTMLEncode\n * @param {string} htmlCode The HTML string to encode.\n * @returns {string} The encoded string (text content).\n */\nexport function HTMLEncode(htmlCode: string): string\n{\n\tconst e = document.createElement(\"div\");\n\te.innerHTML = htmlCode;\n\treturn e.innerText;\n}\n\n/**\n * Decodes a unicode string back to HTML.\n * @function HTMLDecode\n * @param {string} unicodeCharacter The string to decode.\n * @returns {string} The decoded HTML string.\n */\nexport function HTMLDecode(unicodeCharacter: string): string\n{\n\tconst e = document.createElement(\"div\");\n\te.innerText = unicodeCharacter;\n\treturn e.innerHTML;\n}\n\n/**\n * Returns the window where this element is attached (used in multi window applications)\n * @function GetElementWindow\n * @param {HTMLElement} element\n * @return {Window} the window element\n *\n */\nexport function GetElementWindow(element: HTMLElement): Window | undefined\n{\n\tconst doc = element.ownerDocument as CoreDocument;\n\treturn doc.defaultView || doc.parentWindow;\n}\n\n/**\n * Helper, makes drag and drop easier by enabling drag and drop in a given element\n * @function CreateDropArea\n * @param {HTMLElement} element the element where users could drop items\n * @param {(evt: DragEvent) => boolean} onDrop function to call when the user drops the item\n * @param {(evt: DragEvent, element: HTMLElement) => void} onEnter [optional] function to call when the user drags something inside\n * @param {(evt: DragEvent, element: HTMLElement) => void} onExit [optional] function to call when the user drags something outside\n *\n */\nexport function CreateDropArea(element: HTMLElement,\n\tonDrop: (evt: DragEvent) => boolean,\n\tonEnter?: (evt: DragEvent, element: HTMLElement) => void,\n\tonExit?: (evt: DragEvent, element: HTMLElement) => void)\n{\n\telement.addEventListener(\"dragenter\", onDragEvent);\n\n\tfunction onDragEvent(evt: DragEvent)\n\t{\n\t\telement.addEventListener(\"dragexit\", onDragEvent as EventListenerOrEventListenerObject);\n\t\telement.addEventListener(\"dragover\", onDragEvent);\n\t\telement.addEventListener(\"drop\", _onDrop);\n\t\tevt.stopPropagation();\n\t\tevt.preventDefault();\n\t\tif (evt.type == \"dragenter\" && onEnter)\n\t\t{\n\t\t\tonEnter(evt, element);\n\t\t}\n\t\tif (evt.type == \"dragexit\" && onExit)\n\t\t{\n\t\t\tonExit(evt, element);\n\t\t}\n\t}\n\n\tfunction _onDrop(evt: DragEvent)\n\t{\n\t\tevt.stopPropagation();\n\t\tevt.preventDefault();\n\n\t\telement.removeEventListener(\"dragexit\", onDragEvent as EventListenerOrEventListenerObject);\n\t\telement.removeEventListener(\"dragover\", onDragEvent);\n\t\telement.removeEventListener(\"drop\", _onDrop);\n\n\t\tlet r = undefined;\n\t\tif (onDrop)\n\t\t{\n\t\t\tr = onDrop(evt);\n\t\t}\n\t\tif (r)\n\t\t{\n\t\t\tevt.stopPropagation();\n\t\t\tevt.stopImmediatePropagation();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n}","import { LiteGUIObject } from \"../@types/globals\";\n\n/**\n * The options for the standard button class construction.\n */\nexport interface ButtonOptions\n{\n\t/**\n\t * Callback function to be executed when the button is clicked.\n\t */\n\tcallback?: () => void;\n}\n\n/**\n * Standard button class.\n * @class Button\n */\nexport class Button implements LiteGUIObject\n{\n\t/** Root element of the widget */\n\tpublic root: HTMLDivElement;\n\t/** Button element inside the root */\n\tpublic content: HTMLButtonElement;\n\t/** Callback function to be executed when the button is clicked */\n\tpublic callback?: () => void;\n\n\t/**\n\t * Creates an instance of the Button widget.\n\t * @param {string} value - The text to be displayed on the button.\n\t * @param {ButtonOptions | Function} [options] - Configuration options or a callback function.\n\t */\n\tconstructor(value: string, options: (() => void) | ButtonOptions = {})\n\t{\n\t\tif (typeof (options) === \"function\") { options = { callback: options }; }\n\n\t\tconst element = document.createElement(\"div\") as HTMLDivElement;\n\t\telement.className = \"litegui button\";\n\n\t\tthis.root = element;\n\t\tconst button = document.createElement(\"button\");\n\t\tbutton.className = \"litebutton\";\n\t\tthis.content = button;\n\t\telement.appendChild(button);\n\n\t\tbutton.innerHTML = value;\n\t\tbutton.addEventListener(\"click\", () =>\n\t\t{\n\t\t\tthis.click();\n\t\t});\n\n\t\tif (options.callback) { this.callback = options.callback; }\n\t}\n\n\t/**\n\t * Triggers the click event on the button.\n\t */\n\tclick()\n\t{\n\t\tif (this.callback) { this.callback(); }\n\t}\n}\n","import { LiteGUIObject } from \"../@types/globals\";\n\n/**\n * Standard checkbox class.\n * @class Checkbox\n */\nexport class Checkbox implements LiteGUIObject\n{\n\t/** Root element of the widget */\n\troot: HTMLSpanElement;\n\t/** Current value of the checkbox */\n\tvalue: boolean;\n\t/** Element representing the checkbox state */\n\telement: HTMLSpanElement;\n\t/** Callback function executed when value changes */\n\tonChange: (value: boolean) => void;\n\n\t/**\n\t * Creates an instance of the Checkbox widget.\n\t * @param {boolean} value - Initial value.\n\t * @param {Function} onChange - Callback function when value changes.\n\t */\n\tconstructor(value: boolean, onChange: (value: boolean) => void)\n\t{\n\t\tthis.value = value;\n\n\t\tconst root = this.root = document.createElement(\"span\") as HTMLSpanElement;\n\t\troot.className = \"litecheckbox inputfield\";\n\t\troot.dataset[\"value\"] = value.toString();\n\n\t\tconst element = this.element = document.createElement(\"span\") as HTMLSpanElement;\n\t\telement.className = `fixed flag checkbox ${value ? \"on\" : \"off\"}`;\n\t\troot.appendChild(element);\n\t\troot.addEventListener(\"click\", this.onClick.bind(this));\n\t\tthis.onChange = onChange;\n\t}\n\n\t/**\n\t * Sets the value of the checkbox.\n\t * @param {boolean} value - New value.\n\t */\n\tsetValue(value: boolean)\n\t{\n\t\tif (this.value === value || !this.root || !this.element) { return; }\n\n\t\tif (this.root.dataset[\"value\"] == value.toString()) { return; }\n\n\t\tthis.root.dataset[\"value\"] = value.toString();\n\n\t\tif (value)\n\t\t{\n\t\t\tthis.element.classList.remove(\"off\");\n\t\t\tthis.element.classList.add(\"on\");\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.element.classList.remove(\"on\");\n\t\t\tthis.element.classList.add(\"off\");\n\t\t}\n\n\t\tthis.value = value;\n\t\tthis.onChange(value);\n\t}\n\n\t/**\n\t * Gets the current value of the checkbox.\n\t * @returns {boolean} The current value.\n\t */\n\tgetValue()\n\t{\n\t\treturn this.root.dataset[\"value\"] == \"true\";\n\t}\n\n\t/**\n\t * Handles click event to toggle value.\n\t */\n\tonClick()\n\t{\n\t\tthis.setValue(this.root.dataset[\"value\"] != \"true\");\n\t}\n}\n","import { LiteGUIObject } from \"../@types/globals\";\nimport { LiteGUI, SpecialCode } from \"../core\";\n\n/**\n * Options for the ComplexList widget.\n */\nexport interface ComplexListOptions\n{\n\t/** Height of the list */\n\theight?: string | number;\n\t/** Custom HTML code for items */\n\titemCode?: string;\n\t/** Callback when an item is selected */\n\tonItemSelected?: (node: ComplexListDivElement | number, data: ComplexListSpanElement) => void;\n\t/** Callback when an item is toggled (tick) */\n\tonItemToggled?: (node: ComplexListDivElement | number, data: ComplexListSpanElement, isEnabled: boolean) => void;\n\t/** Callback when an item is removed (trash) */\n\tonItemRemoved?: (node: ComplexListDivElement | number, data: ComplexListSpanElement) => void;\n}\n\n/**\n * Interface for the list item element (span).\n */\nexport interface ComplexListSpanElement extends HTMLSpanElement\n{\n\thide: () => void;\n\tshow: () => void;\n\tsetSelected: (v: boolean) => void;\n\tsetContent: (v: string, isHTML: boolean) => void;\n\ttoggleEnabled: () => void;\n\titem?: ComplexListDivElement | number;\n}\n\n/**\n * Interface for the data object of a list item.\n */\nexport interface ComplexListDivElement extends HTMLDivElement\n{\n\tcontent?: string;\n\tname?: string;\n}\n\n/**\n * ComplexList widget for advanced lists with icons and buttons.\n * @class ComplexList\n */\nexport class ComplexList implements LiteGUIObject\n{\n\t/** Root element */\n\troot: HTMLDivElement;\n\t/** Configuration options */\n\toptions: ComplexListOptions;\n\t/** HTML template code for items */\n\titemCode: string;\n\t/** Currently selected item */\n\tselected?: HTMLDivElement | number;\n\n\tonItemSelected?: (node: ComplexListDivElement | number, data: ComplexListSpanElement) => void;\n\tonItemToggled?: (node: ComplexListDivElement | number, data: ComplexListSpanElement, isEnabled: boolean) => void;\n\tonItemRemoved?: (node: ComplexListDivElement | number, data: ComplexListSpanElement) => void;\n\n\t/**\n\t * Creates an instance of the ComplexList widget.\n\t * @param {ComplexListOptions} [options] - Configuration options.\n\t */\n\tconstructor(options: ComplexListOptions = {})\n\t{\n\t\tthis.options = options;\n\n\t\tthis.root = document.createElement(\"div\");\n\t\tthis.root.className = \"litecomplexlist\";\n\n\t\tthis.itemCode = this.options.itemCode || \"<div class='listitem'><span class='tick'><span>\" + SpecialCode.tick + \"</span></span><span class='title'></span><button class='trash'>\" + SpecialCode.close + \"</button></div>\";\n\n\t\tif (this.options.height)\n\t\t{\n\t\t\tthis.root.style.height = LiteGUI.sizeToCSS(this.options.height) ?? '';\n\t\t}\n\n\t\tthis.onItemSelected = options.onItemSelected;\n\t\tthis.onItemToggled = options.onItemToggled;\n\t\tthis.onItemRemoved = options.onItemRemoved;\n\t}\n\n\t/**\n\t * Adds a title/header to the list.\n\t * @param {string} text - Title text.\n\t * @returns {HTMLElement} The title element.\n\t */\n\taddTitle(text: string)\n\t{\n\t\tconst elem = LiteGUI.createElement(\"div\", \".listtitle\", text);\n\t\tthis.root.appendChild(elem);\n\t\treturn elem;\n\t}\n\n\t/**\n\t * Adds a custom HTML element to the list.\n\t * @param {string} html - HTML content.\n\t * @param {Function} [onClick] - Click handler.\n\t * @returns {HTMLElement} The created element.\n\t */\n\taddHTML(html: string, onClick?: () => void)\n\t{\n\t\tconst elem = LiteGUI.createElement(\"div\", \".listtext\", html);\n\t\tif (onClick) { elem.addEventListener(\"mousedown\", onClick); }\n\t\tthis.root.appendChild(elem);\n\t\treturn elem;\n\t}\n\n\t/**\n\t * Clears the list content.\n\t */\n\tclear()\n\t{\n\t\tthis.root.innerHTML = \"\";\n\t}\n\n\t/**\n\t * Adds an item to the list.\n\t * @param {ComplexListDivElement | number} item - Data object or ID.\n\t * @param {string} text - Display text.\n\t * @param {boolean} isEnabled - Whether it is enabled (checked).\n\t * @param {boolean} canBeRemoved - Whether it can be removed (trash icon).\n\t * @returns {ComplexListSpanElement} The created list item element.\n\t */\n\taddItem(item: ComplexListDivElement | number, text: string, isEnabled: boolean, canBeRemoved: boolean)\n\t{\n\t\tconst title = text ?? ((typeof item === 'object') ? (item.content || item.name) ?? \"\" : \"\");\n\t\tconst elem = LiteGUI.createListItem(this.itemCode, { \".title\": title }) as ComplexListSpanElement;\n\t\telem.item = item;\n\n\t\tif (isEnabled) { elem.classList.add(\"enabled\"); }\n\n\t\tif (!canBeRemoved)\n\t\t{\n\t\t\tconst trash = elem.querySelector<HTMLElement>(\".trash\");\n\t\t\tif (trash) { trash.style.display = \"none\"; }\n\t\t}\n\n\t\telem.addEventListener(\"mousedown\", (e: MouseEvent) =>\n\t\t{\n\t\t\te.preventDefault();\n\t\t\telem.setSelected(true);\n\t\t\tif (this.onItemSelected)\n\t\t\t{\n\t\t\t\tthis.onItemSelected(item, elem);\n\t\t\t}\n\t\t});\n\n\t\tconst tick: HTMLElement | null = elem.querySelector(\".tick\");\n\t\tif (tick)\n\t\t{\n\t\t\ttick.addEventListener(\"mousedown\", (e: MouseEvent) =>\n\t\t\t{\n\t\t\t\te.preventDefault();\n\t\t\t\telem.classList.toggle(\"enabled\");\n\t\t\t\tif (this.onItemToggled)\n\t\t\t\t{\n\t\t\t\t\tthis.onItemToggled(item, elem, elem.classList.contains(\"enabled\"));\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tconst trash: HTMLElement | null = elem.querySelector(\".trash\");\n\t\tif (trash)\n\t\t{\n\t\t\ttrash.addEventListener(\"mousedown\", (e: MouseEvent) =>\n\t\t\t{\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t\telem.remove();\n\t\t\t\tif (this.onItemRemoved)\n\t\t\t\t{\n\t\t\t\t\tthis.onItemRemoved(item, elem);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\telem.setContent = function (value: string, isHTML: boolean)\n\t\t{\n\t\t\tconst title: HTMLElement | null = elem.querySelector(\".title\");\n\t\t\tif (title)\n\t\t\t{\n\t\t\t\tif (isHTML)\n\t\t\t\t{\n\t\t\t\t\ttitle.innerHTML = value;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\ttitle.innerText = value;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\telem.toggleEnabled = function ()\n\t\t{\n\t\t\telem.classList.toggle(\"enabled\");\n\t\t};\n\n\t\telem.setSelected = (selected: boolean) =>\n\t\t{\n\t\t\tLiteGUI.removeClass(this.root, \"selected\");\n\t\t\tif (selected)\n\t\t\t{\n\t\t\t\telem.classList.add(\"selected\");\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\telem.classList.remove(\"selected\");\n\t\t\t}\n\t\t\tthis.selected = elem.item;\n\t\t};\n\n\t\telem.show = function () { this.style.display = \"\"; };\n\t\telem.hide = function () { this.style.display = \"none\"; };\n\n\t\tthis.root.appendChild(elem);\n\t\treturn elem;\n\t}\n}","import { LiteGUIObject } from \"../@types/globals\";\nimport { LiteGUI } from \"../core\";\n\n/**\n * Data structure representing a menu item in the ContextMenu.\n */\nexport interface ContextMenuItemData\n{\n\t/** Text content of the item */\n\tcontent?: string;\n\t/** Title (same as content usually) */\n\ttitle?: string;\n\t/** Submenu associated with this item */\n\tsubmenu?: ContextMenu;\n\t/** Whether it has a submenu */\n\thasSubmenu?: boolean;\n\t/** Whether the item is disabled */\n\tdisabled?: boolean;\n\t/** Options for the item (submenu options) */\n\toptions?: ContextMenuOptions\n\t/** Callback function when clicked */\n\tcallback?: (e: PointerEvent | MouseEvent, item: ContextMenuItemData, menu: ContextMenu, options?: ContextMenuOptions) => boolean;\n}\n\n/**\n * HTMLDivElement extending interface for a menu item element.\n */\nexport interface ContextMenuItem extends HTMLDivElement\n{\n\t/** Data associated with the item */\n\tvalue?: ContextMenuItemData;\n}\n\n/**\n * Configuration options for the ContextMenu.\n */\nexport interface ContextMenuOptions\n{\n\t/** Automatically open submenus on hover */\n\tautoOpen?: boolean;\n\t/** Ignore item callbacks and only use global callback */\n\tignoreItemCallbacks?: boolean;\n\t/** Global callback function */\n\tcallback?: (e: PointerEvent | MouseEvent, item: ContextMenuItemData, menu: ContextMenu, options?: ContextMenuOptions) => boolean;\n\t/** Top position */\n\ttop?: number;\n\t/** Left position */\n\tleft?: number;\n\t/** Title of the menu */\n\ttitle?: string;\n\t/** Event that triggered the menu (for positioning) */\n\tevent?: PointerEvent | PointerEvent | MouseEvent | CustomEvent;\n\t/** Parent menu if this is a submenu */\n\tparentMenu?: ContextMenu;\n}\n\n/**\n * ContextMenu widget.\n * @class ContextMenu\n */\nexport class ContextMenu implements LiteGUIObject\n{\n\t/** Root element */\n\troot: HTMLDivElement;\n\t/** Configuration options */\n\toptions: ContextMenuOptions;\n\t/** Parent menu */\n\tparentMenu?: ContextMenu;\n\t/** Whether the menu is locked (open) */\n\tlock?: boolean;\n\t/** Currently open submenu */\n\tcurrentSubmenu?: ContextMenu;\n\t/** Timer for closing the menu */\n\tclosingTimer?: NodeJS.Timeout;\n\n\t/**\n\t * Creates an instance of the ContextMenu widget.\n\t * @param {ContextMenuItemData[] | Record<string,ContextMenu>} values - Items to display.\n\t * @param {ContextMenuOptions} [options] - Configuration options.\n\t */\n\tconstructor(values: (ContextMenuItemData|string)[] | Record<string,ContextMenu>, options?: ContextMenuOptions)\n\t{\n\t\toptions = options ?? {};\n\t\tthis.options = options;\n\n\t\t// To link a menu with its parent\n\t\tif (options.parentMenu)\n\t\t{\n\t\t\tif (options.parentMenu.constructor !== this.constructor)\n\t\t\t{\n\t\t\t\tconsole.error(\"parentMenu must be of class ContextMenu, ignoring it\");\n\t\t\t\toptions.parentMenu = undefined;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.parentMenu = options.parentMenu;\n\t\t\t\tthis.parentMenu.lock = true;\n\t\t\t\tthis.parentMenu.currentSubmenu = this;\n\t\t\t}\n\t\t}\n\n\t\tif (options.event &&\n\t\t\t!(options.event.constructor.name === \"PointerEvent\" ||\n\t\t\t\toptions.event.constructor.name === \"MouseEvent\" ||\n\t\t\t\toptions.event.constructor.name === \"CustomEvent\"))\n\t\t{\n\t\t\tconsole.error(\"Event passed to ContextMenu is not of type PointerEvent, MouseEvent or CustomEvent. Ignoring it.\");\n\t\t\toptions.event = undefined;\n\t\t}\n\n\t\tconst root = document.createElement(\"div\");\n\t\troot.className = \"litecontextmenu litemenubar-panel\";\n\t\troot.style.minWidth = \"100px\";\n\t\troot.style.minHeight = \"100px\";\n\t\troot.style.pointerEvents = \"none\";\n\t\tsetTimeout(() => { root.style.pointerEvents = \"auto\"; }, 100); // Delay so the mouse up event is not caught by this element\n\n\t\t// This prevents the default context browser menu to open in case this menu was created when pressing right button\n\t\troot.addEventListener(\"mouseup\", (e: MouseEvent) =>\n\t\t{\n\t\t\te.preventDefault();\n\t\t\treturn true;\n\t\t}, true);\n\n\t\troot.addEventListener(\"contextmenu\", (e: PointerEvent) =>\n\t\t{\n\t\t\t// Right button\n\t\t\tif (e.button != 2) { return false; }\n\t\t\te.preventDefault();\n\t\t\treturn false;\n\t\t}, true);\n\n\t\troot.addEventListener(\"mousedown\", (e: MouseEvent) =>\n\t\t{\n\t\t\tif (e.button == 2)\n\t\t\t{\n\t\t\t\tthis.close.bind(this, e);\n\t\t\t\te.preventDefault();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}, true);\n\n\t\tthis.root = root;\n\n\t\t// Title\n\t\tif (options.title)\n\t\t{\n\t\t\tconst element = document.createElement(\"div\") as HTMLDivElement;\n\t\t\telement.className = \"litemenu-title\";\n\t\t\telement.innerHTML = options.title;\n\t\t\troot.appendChild(element);\n\t\t}\n\n\t\t// Entries\n\t\tif (values)\n\t\t{\n\t\t\tlet keys: string[] = [];\n\t\t\tlet limit: number;\n\t\t\tif (values && !Array.isArray(values))\n\t\t\t{\n\t\t\t\tkeys = Object.keys(values);\n\t\t\t\tlimit = keys.length;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tlimit = values.length;\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < limit; i++)\n\t\t\t{\n\t\t\t\tlet name: string;\n\t\t\t\tlet value: ContextMenuItemData | string;\n\t\t\t\tif (Array.isArray(values))\n\t\t\t\t{\n\t\t\t\t\tname = i.toString();\n\t\t\t\t\tvalue = values[i];\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tname = keys[i];\n\t\t\t\t\tvalue = values[name];\n\t\t\t\t}\n\t\t\t\tthis.addItem(name, value, options);\n\t\t\t}\n\t\t}\n\n\t\t// Close on leave\n\t\troot.addEventListener(\"mouseleave\", (e: MouseEvent) =>\n\t\t{\n\t\t\tif (this.lock || !this.root) { return; }\n\t\t\tif (this.closingTimer) { clearTimeout(this.closingTimer); }\n\t\t\tthis.closingTimer = setTimeout(this.close.bind(this, e), 500);\n\t\t});\n\n\t\troot.addEventListener(\"mouseenter\", () =>\n\t\t{\n\t\t\tif (this.closingTimer) { clearTimeout(this.closingTimer); }\n\t\t});\n\n\t\tfunction _onMouseWheel(e: WheelEvent)\n\t\t{\n\t\t\tconst pos = parseInt(root.style.top);\n\t\t\troot.style.top = (pos + e.deltaY * 0.1).toFixed() + \"px\";\n\t\t\te.preventDefault();\n\t\t\treturn true;\n\t\t}\n\n\t\troot.addEventListener(\"wheel\", _onMouseWheel, true);\n\n\t\t// Insert before checking position\n\t\tlet doc = document;\n\t\tif (options.event && options.event.target && (options.event.target as HTMLInputElement).ownerDocument)\n\t\t{\n\t\t\tdoc = (options.event.target as HTMLInputElement).ownerDocument;\n\t\t}\n\t\tdoc.body.appendChild(root);\n\n\t\t// Compute best position\n\t\tlet left = options.left ?? 0;\n\t\tlet top = options.top ?? 0;\n\t\tif (options.event)\n\t\t{\n\t\t\tif (options.event.constructor.name !== \"PointerEvent\" && options.event.constructor.name !== \"MouseEvent\" && options.event.constructor.name !== \"CustomEvent\")\n\t\t\t{\n\t\t\t\tconsole.warn(\"Event passed to ContextMenu is not of type PointerEvent\");\n\t\t\t\toptions.event = undefined;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tleft = ((options.event as PointerEvent | PointerEvent).pageX - 10);\n\t\t\t\ttop = ((options.event as PointerEvent | PointerEvent).pageY - 10);\n\t\t\t\tif (options.title) { top -= 20; }\n\n\t\t\t\tif (options.parentMenu)\n\t\t\t\t{\n\t\t\t\t\tconst rect = options.parentMenu.root.getBoundingClientRect();\n\t\t\t\t\tleft = rect.left + rect.width;\n\t\t\t\t}\n\n\t\t\t\tconst body_rect = document.body.getBoundingClientRect();\n\t\t\t\tconst root_rect = root.getBoundingClientRect();\n\n\t\t\t\tif (left > (body_rect.width - root_rect.width - 10)) { left = (body_rect.width - root_rect.width - 10); }\n\t\t\t\tif (top > (body_rect.height - root_rect.height - 10)) { top = (body_rect.height - root_rect.height - 10); }\n\t\t\t}\n\t\t}\n\n\t\troot.style.left = left + \"px\";\n\t\troot.style.top = top + \"px\";\n\t}\n\n\t/**\n\t * Closes the context menu.\n\t * @param {MouseEvent} [e] - Event that triggered the close (optional).\n\t * @param {boolean} [ignoreParent] - If true, does not close the parent menu.\n\t */\n\tclose(e?: MouseEvent, ignoreParent?: boolean)\n\t{\n\t\tif (this.root.parentNode) { this.root.parentNode.removeChild(this.root); }\n\n\t\tif (this.parentMenu && !ignoreParent)\n\t\t{\n\t\t\tthis.parentMenu.lock = false;\n\t\t\tthis.parentMenu.currentSubmenu = undefined;\n\t\t\tif (e === undefined)\n\t\t\t{\n\t\t\t\tthis.parentMenu.close(e);\n\t\t\t}\n\t\t\telse if (e && !LiteGUI.isCursorOverElement(e, this.parentMenu.root))\n\t\t\t{\n\t\t\t\tLiteGUI.trigger(this.parentMenu.root, \"mouseleave\", e);\n\t\t\t}\n\t\t}\n\n\t\tif (this.currentSubmenu) { this.currentSubmenu.close(e, true); }\n\t\tif (this.closingTimer) { clearTimeout(this.closingTimer); }\n\t}\n\n\t/**\n\t * Returns the top most menu.\n\t * @returns {ContextMenu} The top most menu.\n\t */\n\tgetTopMenu(): ContextMenu\n\t{\n\t\tif (this.options.parentMenu) { return this.options.parentMenu.getTopMenu(); }\n\t\treturn this;\n\t}\n\n\t/**\n\t * Returns the first event that triggered the menu.\n\t * @returns {MouseEvent | PointerEvent | CustomEvent | undefined} The event.\n\t */\n\tgetFirstEvent(): MouseEvent | PointerEvent | CustomEvent | undefined\n\t{\n\t\tif (this.options.parentMenu) { return this.options.parentMenu.getFirstEvent(); }\n\t\treturn this.options.event;\n\t}\n\n\t/**\n\t * Adds an item to the menu.\n\t * @param {string} name - Name/ID of the item.\n\t * @param {ContextMenuItemData | () => void} [value] - Data or callback.\n\t * @param {ContextMenuOptions} [options] - Options.\n\t * @returns {ContextMenuItem} The created element.\n\t */\n\taddItem(name: string, value?: string | ContextMenuItemData | (() => void), options?: ContextMenuOptions)\n\t{\n\t\toptions = options ?? {};\n\n\t\tconst element = document.createElement(\"div\") as ContextMenuItem;\n\t\telement.className = \"litemenu-entry submenu\";\n\n\t\tlet disabled = false;\n\n\t\tif (!value)\n\t\t{\n\t\t\telement.classList.add(\"separator\");\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (typeof value == \"function\")\n\t\t\t{\n\t\t\t\telement.innerHTML = name;\n\t\t\t\telement.dataset[\"value\"] = name;\n\t\t\t\telement.onclick = value;\n\t\t\t}\n\t\t\telse if (typeof value == \"string\")\n\t\t\t{\n\t\t\t\telement.innerHTML = value;\n\t\t\t\telement.dataset[\"value\"] = value;\n\t\t\t\telement.classList.add(\"disabled\");\n\t\t\t}\n\t\t\telse if (value)\n\t\t\t{\n\t\t\t\telement.innerHTML = value.title ?? \"\";\n\t\t\t\tif (value.disabled)\n\t\t\t\t{\n\t\t\t\t\tdisabled = true;\n\t\t\t\t\telement.classList.add(\"disabled\");\n\t\t\t\t}\n\t\t\t\tif (value.submenu || value.hasSubmenu)\n\t\t\t\t{\n\t\t\t\t\telement.classList.add(\"has_submenu\");\n\t\t\t\t}\n\t\t\t\telement.value = value;\n\t\t\t}\n\t\t}\n\n\t\tthis.root.appendChild(element);\n\n\t\t// Menu option clicked\n\t\tconst _OnMouseClick = (e: MouseEvent) =>\n\t\t{\n\t\t\tconst value = element.value;\n\t\t\tlet closeParent = true;\n\n\t\t\tif (this.currentSubmenu)\n\t\t\t{\n\t\t\t\tthis.currentSubmenu.close(e);\n\t\t\t}\n\n\t\t\t// global callback\n\t\t\tif (options && options.callback)\n\t\t\t{\n\t\t\t\tconst r = options.callback.call(this, e, value ?? {}, this, options);\n\t\t\t\tif (r) { closeParent = false; }\n\t\t\t}\n\n\t\t\t// Special cases\n\t\t\tif (value)\n\t\t\t{\n\t\t\t\tif (value.callback && !options?.ignoreItemCallbacks && value.disabled !== true) // Item callback\n\t\t\t\t{\n\t\t\t\t\tconst r = value.callback.call(this, e, value, this, options);\n\t\t\t\t\tif (r === true) { closeParent = false; }\n\t\t\t\t}\n\t\t\t\tif (value.submenu)\n\t\t\t\t{\n\t\t\t\t\tif (!value.submenu.options)\n\t\t\t\t\t{\n\t\t\t\t\t\tthrow (\"ContextMenu submenu needs options\");\n\t\t\t\t\t}\n\t\t\t\t\tnew LiteGUI.ContextMenu([value.submenu.options], {\n\t\t\t\t\t\tcallback: value.submenu.options.callback,\n\t\t\t\t\t\tignoreItemCallbacks: value.submenu.options.ignoreItemCallbacks,\n\t\t\t\t\t\ttitle: value.submenu.options.title,\n\t\t\t\t\t\tevent: e,\n\t\t\t\t\t\tparentMenu: this,\n\t\t\t\t\t\tautoOpen: options?.autoOpen\n\t\t\t\t\t});\n\t\t\t\t\tcloseParent = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (closeParent && !this.lock) { this.close(e, true); }\n\t\t};\n\n\t\tconst _onMouseOver = (e: MouseEvent) =>\n\t\t{\n\t\t\tconst value = element.value;\n\t\t\tif (!value || !value.hasSubmenu) { return; }\n\t\t\t_OnMouseClick.call(element, e);\n\t\t};\n\n\t\tif (!disabled)\n\t\t{\n\t\t\telement.addEventListener(\"click\", _OnMouseClick.bind(element));\n\t\t}\n\t\tif (options && options.autoOpen)\n\t\t{\n\t\t\telement.addEventListener(\"mouseenter\", _onMouseOver.bind(element));\n\t\t}\n\n\t\treturn element;\n\t}\n}\n","export * from './lineEditor';\nexport * from './list';\nexport * from './complexList';\nexport * from './contextMenu';\nexport * from './checkbox';\nexport * from './button';\nexport * from './listBox';\nexport * from './searchBox';\nexport * from './slider';","import { AppendOptions } from \"../@types/Inspector\";\nimport { LiteGUIObject } from \"../@types/globals\";\nimport { Trigger } from \"../utilities\";\n\n/**\n * Options for the LineEditor widget.\n */\nexport interface LineEditorOptions extends AppendOptions\n{\n\t/** Callback function when value changes */\n\tcallback?: (value: number[][], e?: Event) => void;\n\t/** Height of the editor */\n\theight?: number;\n\t/** Width of the editor */\n\twidth?: number;\n\t/** Number of samples to show */\n\tshowSamples?: number;\n\t/** Prevent crossing lines (monotonic function) */\n\tnoTrespassing?: boolean;\n\t/** Default Y value */\n\tdefaultY?: number;\n\t/** X axis range [min, max] */\n\txRange?: number[];\n\t/** Y axis range [min, max] */\n\tyRange?: number[];\n\t/** Color of the line */\n\tlineColor?: string;\n\t/** Color of the points */\n\tpointsColor?: string;\n\t/** Background color */\n\tbgColor?: string;\n\t/** Extra CSS class */\n\textraClass?: string;\n}\n\n/**\n * Element interface containing LineEditor properties.\n */\nexport interface LineEditorElement extends HTMLDivElement\n{\n\tcanvas: HTMLCanvasElement;\n\tvaluesArray: number[][];\n\tcallback?: (values: number[][]) => void;\n\theight?: number;\n\twidth?: number;\n\tshowSamples?: number;\n\tnoTrespassing?: boolean;\n\tdefaultY: number;\n\txRange: number[];\n\tyRange: number[];\n\tlineColor: string;\n\tpointsColor?: string;\n\tbgColor?: string;\n\textraClass?: string;\n\toptions?: LineEditorOptions;\n}\n\n/**\n * Line editor widget for editing curves.\n * @class LineEditor\n */\nexport class LineEditor implements LiteGUIObject\n{\n\troot: LineEditorElement;\n\toptions: LineEditorOptions;\n\tcanvas: HTMLCanvasElement;\n\tselected: number;\n\tlastMousePos: number[];\n\n\tmouseMoveBind = this.onMouseMove.bind(this);\n\tmouseUpBind = this.onMouseUp.bind(this);\n\n\t/**\n\t * Creates an instance of the LineEditor widget.\n\t * @param {number[][]} value - Array of points [x, y].\n\t * @param {LineEditorOptions} [options] - Configuration options.\n\t */\n\tconstructor(value: number[][], options: LineEditorOptions = {})\n\t{\n\t\tthis.options = options;\n\t\tconst element = this.root = <LineEditorElement>document.createElement(\"div\");\n\t\telement.className = \"curve \" + (this.options.extraClass ?? \"\");\n\t\telement.style.minHeight = \"50px\";\n\t\telement.style.width = this.options.width?.toString() ?? \"100%\";\n\n\t\telement.bgColor = this.options.bgColor ?? \"#222\";\n\t\telement.pointsColor = this.options.pointsColor ?? \"#5AF\";\n\t\telement.lineColor = this.options.lineColor ?? \"#444\";\n\n\t\telement.valuesArray = value ?? [];\n\t\telement.xRange = this.options.xRange ?? [0, 1]; // Min,max\n\t\telement.yRange = this.options.yRange ?? [0, 1]; // Min,max\n\t\telement.defaultY = this.options.defaultY ?? 0.5;\n\t\telement.noTrespassing = this.options.noTrespassing ?? false;\n\t\telement.showSamples = this.options.showSamples ?? 0;\n\t\telement.options = options;\n\t\telement.style.minWidth = \"50px\";\n\t\telement.style.minHeight = \"20px\";\n\n\t\tconst canvas = this.canvas = document.createElement(\"canvas\");\n\t\tcanvas.width = this.options.width ?? 200;\n\t\tcanvas.height = this.options.height ?? 50;\n\t\telement.appendChild(canvas);\n\t\telement.canvas = canvas;\n\n\t\telement.addEventListener(\"mousedown\", this.onMouseDown.bind(this));\n\n\t\tthis.selected = -1;\n\n\t\tthis.lastMousePos = [0, 0];\n\n\t\tthis.redraw();\n\t}\n\n\t/**\n\t * Gets value at given x coordinate (interpolates).\n\t * @param {number} x - X coordinate.\n\t * @returns {number} The interpolated Y value.\n\t */\n\tgetValueAt(x: number)\n\t{\n\t\tif (x < this.root.xRange[0] || x > this.root.xRange[1])\n\t\t{\n\t\t\treturn this.root.defaultY;\n\t\t}\n\n\t\tlet last = <number[]>[this.root.xRange[0], this.root.defaultY];\n\t\tlet f = 0, v: number[];\n\t\tfor (let i = 0; i < this.root.valuesArray.length; i++)\n\t\t{\n\t\t\tv = this.root.valuesArray[i];\n\t\t\tif (x == v[0]) { return v[1]; }\n\t\t\tif (x < v[0])\n\t\t\t{\n\t\t\t\tf = (x - last[0]) / (v[0] - last[0]);\n\t\t\t\treturn last[1] * (1 - f) + v[1] * f;\n\t\t\t}\n\t\t\tlast = v;\n\t\t}\n\n\t\tv = [this.root.xRange[1], this.root.defaultY];\n\t\tf = (x - last[0]) / (v[0] - last[0]);\n\t\treturn last[1] * (1 - f) + v[1] * f;\n\t}\n\n\t/**\n\t * Resamples line editor to fixed number of samples.\n\t * @param {number} samples - Number of samples.\n\t * @returns {number[]} Array of sampled values.\n\t */\n\tresample(samples: number)\n\t{\n\t\tconst r: number[] = [];\n\t\tconst dx = (this.root.xRange[1] - this.root.xRange[0]) / samples;\n\t\tfor (let i = this.root.xRange[0]; i <= this.root.xRange[1]; i += dx)\n\t\t{\n\t\t\tconst v = this.getValueAt(i);\n\t\t\tif (v) { r.push(v); }\n\t\t}\n\t\treturn r;\n\t}\n\n\t/**\n\t * Adds a point to the line.\n\t * @param {number[]} v - Point [x, y].\n\t */\n\taddValue(v: number[])\n\t{\n\t\tfor (let i = 0; i < this.root.valuesArray.length; i++)\n\t\t{\n\t\t\tconst value = this.root.valuesArray[i];\n\t\t\tif (value[0] < v[0]) { continue; }\n\t\t\tthis.root.valuesArray.splice(i, 0, v);\n\t\t\tthis.redraw();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.root.valuesArray.push(v);\n\t\tthis.redraw();\n\t}\n\n\t/**\n\t * Converts value to canvas coordinates.\n\t * @param {number[]} v - Point in value space [x, y].\n\t * @returns {number[]} Point in canvas space [x, y].\n\t */\n\tconvert(v: number[])\n\t{\n\t\treturn [this.canvas.width * ((this.root.xRange[1] - this.root.xRange[0]) * v[0] + this.root.xRange[0]),\n\t\t\tthis.canvas.height * ((this.root.yRange[1] - this.root.yRange[0]) * v[1] + this.root.yRange[0])];\n\t}\n\n\t/**\n\t * Deconverts canvas coordinates to value space.\n\t * @param {number[]} v - Point in canvas space [x, y].\n\t * @returns {number[]} Point in value space [x, y].\n\t */\n\tdeconvert(v: number[])\n\t{\n\t\treturn [(v[0] / this.canvas.width - this.root.xRange[0]) / (this.root.xRange[1] - this.root.xRange[0]),\n\t\t\t(v[1] / this.canvas.height - this.root.yRange[0]) / (this.root.yRange[1] - this.root.yRange[0])];\n\t}\n\n\t/**\n\t * Redraws the canvas.\n\t */\n\tredraw()\n\t{\n\t\tif (!this.canvas || !this.canvas.parentNode) { return; }\n\t\tconst rect = this.canvas.getBoundingClientRect();\n\t\tif (rect && this.canvas.width != rect.width && rect.width && rect.width < 1000) { this.canvas.width = rect.width; }\n\t\tif (rect && this.canvas.height != rect.height && rect.height && rect.height < 1000) { this.canvas.height = rect.height; }\n\n\t\tconst ctx = this.canvas.getContext(\"2d\");\n\t\tif (!ctx) { return; }\n\t\tctx.setTransform(1, 0, 0, 1, 0, 0);\n\t\tctx.translate(0, this.canvas.height);\n\t\tctx.scale(1, -1);\n\n\t\tctx.fillStyle = this.root.bgColor as string;\n\t\tctx.fillRect(0, 0, this.canvas.width, this.canvas.height);\n\n\t\tctx.strokeStyle = this.root.lineColor as string;\n\t\tctx.beginPath();\n\n\t\t// Draw line\n\t\tlet pos = this.convert([this.root.xRange[0], this.root.defaultY]);\n\t\tctx.moveTo(pos[0], pos[1]);\n\n\t\tfor (const i in this.root.valuesArray)\n\t\t{\n\t\t\tconst value: number[] = this.root.valuesArray[parseInt(i)];\n\t\t\tpos = this.convert(value);\n\t\t\tctx.lineTo(pos[0], pos[1]);\n\t\t}\n\n\t\tpos = this.convert([this.root.xRange[1], this.root.defaultY]);\n\t\tctx.lineTo(pos[0], pos[1]);\n\t\tctx.stroke();\n\n\t\t// Draw points\n\t\tfor (let i = 0; i < this.root.valuesArray.length; i += 1)\n\t\t{\n\t\t\tconst value = this.root.valuesArray[i];\n\t\t\tpos = this.convert(value);\n\t\t\tif (this.selected == i) { ctx.fillStyle = \"white\"; }\n\t\t\telse { ctx.fillStyle = this.root.pointsColor as string; }\n\t\t\tctx.beginPath();\n\t\t\tctx.arc(pos[0], pos[1], this.selected == i ? 4 : 2, 0, Math.PI * 2);\n\t\t\tctx.fill();\n\t\t}\n\n\t\tif (this.root.showSamples)\n\t\t{\n\t\t\tconst samples = this.resample(this.root.showSamples);\n\t\t\tctx.fillStyle = \"#888\";\n\t\t\tfor (let i = 0; i < samples.length; i += 1)\n\t\t\t{\n\t\t\t\tconst value = [i * ((this.root.xRange[1] - this.root.xRange[0]) / this.root.showSamples) + this.root.xRange[0], samples[i]] as number[];\n\t\t\t\tpos = this.convert(value);\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.arc(pos[0], pos[1], 2, 0, Math.PI * 2);\n\t\t\t\tctx.fill();\n\t\t\t}\n\t\t}\n\t}\n\n\tonMouseDown(evt: MouseEvent)\n\t{\n\t\tdocument.addEventListener(\"mousemove\", this.mouseMoveBind);\n\t\tdocument.addEventListener(\"mouseup\", this.mouseUpBind);\n\n\t\tconst rect = this.canvas.getBoundingClientRect();\n\t\tconst mouseX = evt.clientX - rect.left;\n\t\tconst mouseY = evt.clientY - rect.top;\n\n\t\tthis.selected = this.computeSelected(mouseX, this.canvas.height - mouseY);\n\n\t\tif (this.selected == -1)\n\t\t{\n\t\t\tconst v = this.deconvert([mouseX, this.canvas.height - mouseY]);\n\t\t\tthis.root.valuesArray.push(v);\n\t\t\tthis.sortValues();\n\t\t\tthis.selected = this.root.valuesArray.indexOf(v);\n\t\t}\n\n\t\tthis.lastMousePos = [mouseX, mouseY];\n\t\tthis.redraw();\n\t\tevt.preventDefault();\n\t\tevt.stopPropagation();\n\t}\n\n\tonMouseMove(evt: MouseEvent)\n\t{\n\t\tconst rect = this.canvas.getBoundingClientRect();\n\t\tlet mouseX = evt.clientX - rect.left;\n\t\tlet mouseY = evt.clientY - rect.top;\n\n\t\tif (mouseX < 0)\n\t\t{\n\t\t\tmouseX = 0;\n\t\t}\n\t\telse if (mouseX > this.canvas.width)\n\t\t{\n\t\t\tmouseX = this.canvas.width;\n\t\t}\n\n\t\tif (mouseY < 0)\n\t\t{\n\t\t\tmouseY = 0;\n\t\t}\n\t\telse if (mouseY > this.canvas.height)\n\t\t{\n\t\t\tmouseY = this.canvas.height;\n\t\t}\n\n\t\t// Dragging to remove\n\t\tif (this.selected != -1 && this.distance([evt.clientX - rect.left, evt.clientY - rect.top], [mouseX, mouseY]) > this.canvas.height * 0.5)\n\t\t{\n\t\t\tthis.root.valuesArray.splice(this.selected, 1);\n\t\t\tthis.onMouseUp(evt);\n\t\t\treturn;\n\t\t}\n\n\t\tconst dx = this.lastMousePos[0] - mouseX;\n\t\tconst dy = this.lastMousePos[1] - mouseY;\n\t\tconst delta = this.deconvert([-dx, dy]);\n\t\tif (this.selected != -1)\n\t\t{\n\t\t\tlet minX = this.root.xRange[0];\n\t\t\tlet maxX = this.root.xRange[1];\n\n\t\t\tif (this.root.noTrespassing)\n\t\t\t{\n\t\t\t\tif (this.selected > 0)\n\t\t\t\t{\n\t\t\t\t\tminX = this.root.valuesArray[this.selected - 1][0];\n\t\t\t\t}\n\t\t\t\tif (this.selected < (this.root.valuesArray.length - 1))\n\t\t\t\t{\n\t\t\t\t\tmaxX = this.root.valuesArray[this.selected + 1][0];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst v = this.root.valuesArray[this.selected];\n\t\t\tv[0] += delta[0];\n\t\t\tv[1] += delta[1];\n\t\t\tif (v[0] < minX)\n\t\t\t{\n\t\t\t\tv[0] = minX;\n\t\t\t}\n\t\t\telse if (v[0] > maxX)\n\t\t\t{\n\t\t\t\tv[0] = maxX;\n\t\t\t}\n\n\t\t\tif (v[1] < this.root.yRange[0])\n\t\t\t{\n\t\t\t\tv[1] = this.root.yRange[0];\n\t\t\t}\n\t\t\telse if (v[1] > this.root.yRange[1])\n\t\t\t{\n\t\t\t\tv[1] = this.root.yRange[1];\n\t\t\t}\n\t\t}\n\n\t\tthis.sortValues();\n\t\tthis.redraw();\n\t\tthis.lastMousePos[0] = mouseX;\n\t\tthis.lastMousePos[1] = mouseY;\n\t\tthis.onChange();\n\n\t\tevt.preventDefault();\n\t\tevt.stopPropagation();\n\t}\n\n\tonMouseUp(evt: MouseEvent)\n\t{\n\t\tthis.selected = -1;\n\t\tthis.redraw();\n\t\tdocument.removeEventListener(\"mousemove\", this.mouseMoveBind);\n\t\tdocument.removeEventListener(\"mouseup\", this.mouseUpBind);\n\t\tthis.onChange();\n\t\tevt.preventDefault();\n\t\tevt.stopPropagation();\n\t}\n\n\tonResize()\n\t{\n\t\tthis.redraw();\n\t}\n\n\tonChange()\n\t{\n\t\tif (this.options.callback) { this.options.callback.call(this.root, this.root.valuesArray); }\n\t\telse { Trigger(this.root, \"change\"); }\n\t}\n\n\tdistance(a: [number, number], b: [number, number])\n\t{\n\t\treturn Math.sqrt(Math.pow(b[0] - a[0], 2) + Math.pow(b[1] - a[1], 2));\n\t}\n\n\tcomputeSelected(x: number, y: number)\n\t{\n\t\tlet minDist = 100000;\n\t\tconst maxDist = 8; // Pixels\n\t\tlet selected = -1;\n\t\tfor (let i = 0; i < this.root.valuesArray.length; i++)\n\t\t{\n\t\t\tconst value = this.root.valuesArray[i];\n\t\t\tconst pos = this.convert(value) as [number, number];\n\t\t\tif (pos.length >= 2)\n\t\t\t{\n\t\t\t\tconst dist = this.distance([x, y], pos);\n\t\t\t\tif (dist < minDist && dist < maxDist)\n\t\t\t\t{\n\t\t\t\t\tminDist = dist;\n\t\t\t\t\tselected = i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn selected;\n\t}\n\n\tsortValues()\n\t{\n\t\tlet v: number[] | undefined = undefined;\n\t\tif (this.selected != -1)\n\t\t{\n\t\t\tv = this.root.valuesArray[this.selected];\n\t\t}\n\t\tthis.root.valuesArray.sort((a: number[], b: number[]) =>\n\t\t{ return a[0] - b[0]; });\n\n\t\tif (v) { this.selected = this.root.valuesArray.indexOf(v); }\n\t}\n}\n","import { LiteGUIObject } from \"../@types/globals\";\nimport { Trigger } from \"../utilities\";\n\n/**\n * Structure of a list item.\n */\nexport interface ListItem\n{\n\tname: string, title: string, id: string\n}\n\n/**\n * Options for the List widget.\n */\nexport interface ListOptions\n{\n\t/** Parent element to append to */\n\tparent?: LiteGUIObject | HTMLElement;\n\t/** Callback function when selection changes */\n\tcallback?: (value: string | ListItem) => void;\n}\n\n/**\n * Event target interface for List events.\n */\nexport interface ListEventTarget extends EventTarget\n{\n\tdata: string | ListItem;\n\tclassList: DOMTokenList;\n}\n\n/**\n * HTMLLIElement extending interface for list items.\n */\nexport interface ListLIElement extends HTMLLIElement\n{\n\tdata: string | ListItem;\n}\n\n/**\n * List widget.\n * @class List\n */\nexport class List implements LiteGUIObject\n{\n\t/** Root element */\n\troot: HTMLUListElement;\n\t/** Callback function */\n\tcallback?: (value: string | ListItem) => void;\n\n\t/**\n\t * Creates an instance of the List widget.\n\t * @param {string} id - Identifier for the list.\n\t * @param {Array<string | ListItem>} items - Items to display.\n\t * @param {ListOptions} [options] - Configuration options.\n\t */\n\tconstructor(id: string, items: Array<string | ListItem>, options?: ListOptions)\n\t{\n\t\toptions = options! || {};\n\n\t\tconst root = this.root = document.createElement(\"ul\") as HTMLUListElement;\n\t\troot.id = id;\n\t\troot.className = \"litelist\";\n\n\t\tthis.callback = options.callback;\n\n\t\tconst onClickCallback = (e: PointerEvent) =>\n\t\t{\n\t\t\tconst el = e.target as ListEventTarget;\n\t\t\tif (!el) { return; }\n\n\t\t\tconst list = root.querySelectorAll(\".list-item.selected\");\n\t\t\tfor (let j = 0; j < list.length; ++j)\n\t\t\t{\n\t\t\t\tlist[j].classList.remove(\"selected\");\n\t\t\t}\n\t\t\tel.classList.add(\"selected\");\n\t\t\tTrigger(this.root, \"wchanged\", el);\n\n\t\t\tif (this.callback) { this.callback(el.data); }\n\t\t};\n\t\tfor (const i in items)\n\t\t{\n\t\t\tconst liItem = document.createElement(\"li\") as ListLIElement;\n\t\t\tliItem.className = \"list-item\";\n\t\t\tliItem.data = items[i];\n\t\t\tliItem.dataset[\"value\"] = items[i].toString();\n\n\t\t\tlet content = \"\";\n\t\t\tconst item = items[i];\n\t\t\tif (typeof item == \"string\")\n\t\t\t{\n\t\t\t\tcontent = item + \"<span class='arrow'></span>\";\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tcontent = (item.name || item.title || \"\") + \"<span class='arrow'></span>\";\n\t\t\t\tif (item.id)\n\t\t\t\t{\n\t\t\t\t\tliItem.id = item.id;\n\t\t\t\t}\n\t\t\t}\n\t\t\tliItem.innerHTML = content;\n\n\t\t\tliItem.addEventListener(\"click\", onClickCallback.bind(liItem));\n\n\t\t\troot.appendChild(liItem);\n\t\t}\n\n\t\tif (options.parent)\n\t\t{\n\t\t\tif ('root' in options.parent)\n\t\t\t{\n\t\t\t\toptions.parent.root.appendChild(root);\n\t\t\t}\n\t\t\telse if ('appendChild' in options.parent)\n\t\t\t{\n\t\t\t\toptions.parent.appendChild(root);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Gets the selected item.\n\t * @returns {Element | null} The selected element.\n\t */\n\tgetSelectedItem()\n\t{\n\t\treturn this.root.querySelector(\".list-item.selected\");\n\t}\n\n\t/**\n\t * Sets the selected item by name/id.\n\t * @param {string} name - Name or ID of the item to select.\n\t */\n\tsetSelectedItem(name: string)\n\t{\n\t\tconst items = this.root.querySelectorAll(\".list-item\");\n\t\tfor (let i = 0; i < items.length; i++)\n\t\t{\n\t\t\tconst item: ListLIElement = items[i] as ListLIElement;\n\t\t\tif (item.data == name || (typeof item.data !== \"string\" && item.data.id == name))\n\t\t\t{\n\t\t\t\tTrigger(item, \"click\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n","import { LiteGUIObject } from \"../@types/globals\";\n\n/**\n * HTMLSpanElement extending interface for ListBox element.\n */\nexport interface ListBoxSpanElement extends HTMLSpanElement\n{\n\t/** Sets the open/closed state */\n\tsetValue: (value: boolean) => void;\n\t/** Gets the current state */\n\tgetValue: () => string;\n\t/** Sets if the listbox is empty */\n\tsetEmpty: (value: boolean) => void;\n\t/** Expands the listbox */\n\texpand: () => void;\n\t/** Collapses the listbox */\n\tcollapse: () => void;\n\t/** Reference to the ListBox instance */\n\tlistBox: ListBox;\n\t/** Reference to the ListBox instance (alias) */\n\tparent: ListBox\n}\n/**\n * The tiny box to expand the children of a node.\n * @class ListBox\n */\nexport class ListBox implements LiteGUIObject\n{\n\t/** Root element */\n\troot: ListBoxSpanElement;\n\t/** Whether to stop event propagation */\n\tstopPropagation: boolean = false;\n\n\t/**\n\t * Creates an instance of the ListBox widget.\n\t * @param {boolean} state - Initial state (true: open, false: closed).\n\t * @param {Function} onChange - Callback when state changes.\n\t */\n\tconstructor(state: boolean, onChange: (value: string) => void)\n\t{\n\t\tconst element = document.createElement(\"span\") as ListBoxSpanElement;\n\t\tthis.root = element;\n\t\telement.parent = this;\n\t\telement.listBox = this;\n\t\telement.className = \"listbox \" + (state ? \"listopen\" : \"listclosed\");\n\t\telement.innerHTML = state ? \"&#9660;\" : \"&#9658;\";\n\t\telement.dataset.value = state ? \"open\" : \"closed\";\n\n\t\telement.onclick = function (e: PointerEvent)\n\t\t{\n\t\t\telement.setValue(element.dataset.value == \"open\" ? false : true);\n\t\t\tif (element.parent.stopPropagation) { e.stopPropagation(); }\n\t\t};\n\n\t\telement.onchange = function ()\n\t\t{\n\t\t\tonChange(element.dataset.value ?? \"closed\");\n\t\t};\n\n\t\telement.setEmpty = function (value: boolean)\n\t\t{\n\t\t\tif (value)\n\t\t\t{\n\t\t\t\tthis.classList.add(\"empty\");\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.classList.remove(\"empty\");\n\t\t\t}\n\t\t};\n\n\t\telement.setValue = function (value: boolean)\n\t\t{\n\t\t\tif (this.dataset.value == (value ? \"open\" : \"closed\"))\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!value)\n\t\t\t{\n\t\t\t\tthis.dataset.value = \"closed\";\n\t\t\t\tthis.innerHTML = \"&#9658;\";\n\t\t\t\tthis.classList.remove(\"listopen\");\n\t\t\t\tthis.classList.add(\"listclosed\");\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.dataset.value = \"open\";\n\t\t\t\tthis.innerHTML = \"&#9660;\";\n\t\t\t\tthis.classList.add(\"listopen\");\n\t\t\t\tthis.classList.remove(\"listclosed\");\n\t\t\t}\n\n\t\t\tif (onChange)\n\t\t\t{\n\t\t\t\tonChange(this.dataset.value);\n\t\t\t}\n\t\t};\n\n\t\telement.expand = function ()\n\t\t{\n\t\t\tthis.setValue(true);\n\t\t};\n\n\t\telement.collapse = function ()\n\t\t{\n\t\t\tthis.setValue(false);\n\t\t};\n\t}\n\n\t/**\n\t * Sets the value of the listbox (open/closed).\n\t * @param {boolean} value - True to open, false to collapse.\n\t */\n\tsetValue(value: boolean)\n\t{\n\t\tthis.root.setValue(value);\n\t}\n\n\t/**\n\t * Gets the current value (\"open\" or \"closed\").\n\t * @returns {string} The current state.\n\t */\n\tgetValue()\n\t{\n\t\treturn this.root.dataset.value;\n\t}\n}\n","import { LiteGUIObject } from \"../@types/globals\";\n\n/**\n * Options for the SearchBox widget.\n */\nexport interface SearchBoxOptions\n{\n\t/** Placeholder text */\n\tplaceholder?: string;\n\t/** Callback function executed when value changes */\n\tcallback?: (value: string) => void;\n}\n\n/**\n * SearchBox widget.\n * @class SearchBox\n */\nexport class SearchBox implements LiteGUIObject\n{\n\t/** Root element of the widget */\n\troot: HTMLDivElement;\n\t/** Configuration options */\n\toptions: SearchBoxOptions;\n\t/** Current value */\n\tvalue: string;\n\t/** Input element */\n\tinput: HTMLInputElement;\n\t/** Callback function executed when value changes */\n\tcallback?: (value: string) => void;\n\n\t/**\n\t * Creates an instance of the SearchBox widget.\n\t * @param {string} [value=''] - Initial value.\n\t * @param {SearchBoxOptions} [options] - Configuration options.\n\t */\n\tconstructor(value: string = '', options: SearchBoxOptions = {})\n\t{\n\t\tthis.options = options;\n\t\tthis.value = value;\n\t\tconst element = document.createElement(\"div\") as HTMLDivElement;\n\t\telement.className = \"litegui searchbox\";\n\t\tconst placeholder = options.placeholder ?? \"Search\";\n\t\telement.innerHTML = `<input value='${value}' placeholder='${placeholder}'/>`;\n\t\tthis.input = element.querySelector(\"input\")!;\n\t\tthis.root = element;\n\n\t\tthis.input.onchange = () =>\n\t\t{\n\t\t\tconst value = this.input.value;\n\t\t\tif (options.callback) { options.callback(value); }\n\t\t};\n\t}\n\n\t/**\n\t * Sets the value of the search box.\n\t * @param {string} value - New value.\n\t */\n\tsetValue(value: string)\n\t{\n\t\tthis.input.value = value;\n\t\tif (this.input.onchange) { this.input.onchange(new Event(\"change\")); }\n\t}\n\n\t/**\n\t * Gets the current value of the search box.\n\t * @returns {string} The current value.\n\t */\n\tgetValue()\n\t{\n\t\treturn this.input.value;\n\t}\n}\n","import { Trigger } from \"../utilities\";\nimport { LiteGUIObject } from \"../@types/globals\";\n\n/**\n * Configuration options for the Slider widget.\n */\nexport interface SliderOptions\n{\n\t/** Minimum value */\n\tmin?: number;\n\t/** Maximum value */\n\tmax?: number;\n}\n\n/**\n * Slider widget.\n * @class Slider\n */\nexport class Slider implements LiteGUIObject\n{\n\t/** Root element of the widget */\n\troot: HTMLDivElement;\n\t/** Current value */\n\tvalue: number;\n\t/** Configuration options */\n\toptions: SliderOptions;\n\t/** Document reference for drag events */\n\tdocBinded?: Document;\n\t/** Callback executing when value changes */\n\tonChange?: (value: number) => void;\n\tmouseMoveBind = this.onMouseMove.bind(this);\n\tmouseUpBind = this.onMouseUp.bind(this);\n\n\t/**\n\t * Creates an instance of the Slider widget.\n\t * @param {number} value - Initial value.\n\t * @param {SliderOptions} [options] - Configuration options.\n\t */\n\tconstructor(value: number, options?: SliderOptions)\n\t{\n\t\tthis.options = options ?? {};\n\n\t\tconst root = this.root = document.createElement(\"div\") as HTMLDivElement;\n\t\tthis.value = value;\n\t\troot.className = \"liteslider\";\n\t\tthis.docBinded = root.ownerDocument;\n\t\tthis.root.addEventListener(\"mousedown\", this.onMouseDown.bind(this));\n\t\tthis.setValue(value);\n\t}\n\n\t/**\n\t * Sets the value from an X coordinate (relative to client).\n\t * @param {number} x - X coordinate.\n\t */\n\tsetFromX(x: number)\n\t{\n\t\tconst rect = this.root.getBoundingClientRect();\n\t\tif (!rect) { return; }\n\t\tconst width = rect.width;\n\t\tconst norm = x / width;\n\t\tconst min = this.options.min ?? 0.0;\n\t\tconst max = this.options.max ?? 1.0;\n\t\tconst range = max - min;\n\t\tthis.setValue(range * norm + min);\n\t}\n\n\t/**\n\t * Handles mouse down event.\n\t * @param {MouseEvent} e - The mouse event.\n\t */\n\tonMouseDown(e: MouseEvent)\n\t{\n\t\tlet mouseX: number;\n\t\tif (e.offsetX)\n\t\t{\n\t\t\tmouseX = e.offsetX;\n\t\t}\n\t\telse if (e.layerX)\n\t\t{\n\t\t\tmouseX = e.layerX;\n\t\t}\n\n\t\tthis.setFromX(mouseX!);\n\n\t\tif (!this.docBinded) { return; }\n\n\t\tthis.root.addEventListener(\"mousemove\", this.mouseMoveBind, false);\n\t\tthis.root.addEventListener(\"mouseup\", this.mouseUpBind, false);\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t}\n\n\t/**\n\t * Handles mouse move event (dragging).\n\t * @param {MouseEvent} e - The mouse event.\n\t */\n\tonMouseMove(e: MouseEvent)\n\t{\n\t\tconst rect = this.root.getBoundingClientRect();\n\t\tif (!rect) { return; }\n\t\tconst x = e.x === undefined ? e.pageX : e.x;\n\t\tconst mouseX = x - rect.left;\n\t\tthis.setFromX(mouseX);\n\t\tif (typeof e.preventDefault == 'function')\n\t\t{e.preventDefault();}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Handles mouse up event (drop).\n\t * @param {MouseEvent} e - The mouse event.\n\t */\n\tonMouseUp(e: MouseEvent)\n\t{\n\t\tif (!this.docBinded) { return false; }\n\t\tthis.root.removeEventListener(\"mousemove\", this.mouseMoveBind, false);\n\t\tthis.root.removeEventListener(\"mouseup\", this.mouseUpBind, false);\n\t\tif (typeof e.preventDefault == 'function')\n\t\t{e.preventDefault();}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Sets the value of the slider.\n\t * @param {number} value - New value.\n\t * @param {boolean} [skipEvent=false] - Whether to skip triggering events.\n\t */\n\tsetValue(value: number, skipEvent: boolean = false)\n\t{\n\t\t// Var width = canvas.getClientRects()[0].width;\n\t\tconst min = this.options.min || 0.0;\n\t\tconst max = this.options.max || 1.0;\n\t\tif (value < min) { value = min; }\n\t\telse if (value > max) { value = max; }\n\t\tconst range = max - min;\n\t\tconst norm = (value - min) / range;\n\t\tconst percentage = (norm * 100).toFixed(1) + \"%\";\n\n\t\tconst percentage2 = \"calc(\" + percentage + \" + 2px)\";\n\t\tthis.root.style.background = \"linear-gradient(to right, #999 \" + percentage + \", #FC0 \" + percentage + \", #FC0 \" + percentage2 + \", #333 \" + percentage2 + \")\";\n\n\t\tif (value != this.value)\n\t\t{\n\t\t\tthis.value = value;\n\t\t\tif (!skipEvent)\n\t\t\t{\n\t\t\t\tTrigger(this.root, \"change\", value);\n\t\t\t\tif (this.onChange) { this.onChange(value); }\n\t\t\t}\n\t\t}\n\t}\n}\n","\nimport { Trigger } from \"../utilities\";\nimport { ListBox, ListBoxSpanElement } from \".\";\nimport { LiteGUIObject } from \"../@types/globals\";\n\n/**\n * EventTarget extending interface for Tree related events.\n */\nexport interface TreeEventTarget extends EventTarget\n{\n\tparentNode: TreeNode;\n}\n\n/**\n * Configuration options for the Tree widget.\n */\nexport interface TreeOptions\n{\n\tallowDrag?: boolean;\n\tallowRename?: boolean;\n\tallowMultiSelection?: boolean;\n\tselected?: boolean;\n\tcollapsed?: boolean;\n\tcollapsed_depth?: number;\n\tindentOffset?: number;\n\tid?: string;\n\theight?: string | number;\n}\n\n/**\n * HTMLDivElement extending interface for the title element of a tree node.\n */\nexport interface TreeTitleElement extends HTMLDivElement\n{\n\toldName?: string;\n\tisEditing?: boolean;\n}\n\nexport interface TreeCollection extends HTMLCollection\n{\n\t[index: number]: TreeNode\n}\n\n/**\n * HTMLLIElement extending interface for a tree node.\n */\nexport interface TreeNode extends HTMLLIElement\n{\n\tid: string;\n\tdata: TreeData;\n\tparentId: string;\n\tlistBox?: ListBoxSpanElement;\n\ttitleElement: TreeTitleElement;\n\tdataset: {\n\t\titemID: string;\n\t\t[index: string]: string };\n\tchildNodes: NodeListOf<TreeNode>;\n\tchildren: TreeCollection;\n\tcontent?: string;\n\tskipDrag?: boolean;\n\tonDragData?: () => Record<string, string>;\n\tcallback?: (node?: TreeNode) => boolean;\n\tvisible?: boolean;\n\tpostContent?: string;\n\tpreContent?: string;\n\tparentNode: TreeNode | ParentNode | null;\n}\n\n/**\n * Data structure representing a tree node's data.\n */\nexport interface TreeData\n{\n\tchildren?: TreeData[];\n\tonDragData?: () => Record<string, string>;\n\tskipDrag?: boolean;\n\t[index: string]: string | number | boolean | TreeData | TreeData[] | ((...args: unknown[]) => unknown) | Record<string, unknown> | undefined;\n}\n\n/**\n * Root element for the Tree widget.\n */\nexport interface TreeRoot extends HTMLDivElement\n{\n\tchildNodes: NodeListOf<TreeNode>;\n\tchildren: TreeCollection;\n}\n\n/**\n * Widget to create interactive trees (useful for folders or hierarchies).\n * @class Tree\n */\nexport class Tree implements LiteGUIObject\n{\n\troot: TreeRoot;\n\ttree: TreeData;\n\toptions: TreeOptions;\n\trootItem?: TreeNode;\n\tparentNode?: ParentNode;\n\tindentOffset: number;\n\tcollapsedDepth: number;\n\tonItemSelected?: (data: TreeData, node: TreeNode) => void;\n\tonItemContextMenu?: (event: PointerEvent, { item, data }: { item: TreeNode, data: TreeData }) => void;\n\tonBackgroundClicked?: (event: PointerEvent, tree: Tree) => void;\n\tonContextMenu?: (event: PointerEvent) => void;\n\tonItemAddToSelection?: (data: TreeData, node: TreeNode) => void;\n\tonMoveItem?: (item?: TreeNode, parent?: TreeNode) => boolean;\n\tonDropItem?: (event: DragEvent, data: TreeData) => void;\n\n\tprotected _skipScroll: boolean = false;\n\n\tstatic INDENT = 20;\n\n\t/**\n\t * Creates an instance of the Tree widget.\n\t * @param {TreeData} data - The data to initialize the tree with.\n\t * @param {TreeOptions} [options] - Configuration options.\n\t */\n\tconstructor(data: TreeData, options?: TreeOptions)\n\t{\n\t\toptions = options ?? {};\n\n\t\tconst root = document.createElement(\"div\") as TreeRoot;\n\t\tthis.root = root;\n\t\tif (options.id) { root.id = options.id; }\n\n\t\troot.className = \"litetree\";\n\t\tthis.tree = data;\n\t\toptions = options ?? { allowRename: false, allowDrag: true, allowMultiSelection: false };\n\t\tthis.options = options;\n\t\tthis.indentOffset = options.indentOffset || 0;\n\n\t\tif (options.height)\n\t\t{\n\t\t\tthis.root.style.height = typeof (options.height) == \"string\" ? options.height : Math.round(options.height) + \"px\";\n\t\t}\n\n\t\tthis.collapsedDepth = 3;\n\t\tif (options.collapsed_depth != null) { this.collapsedDepth = options.collapsed_depth; }\n\n\t\t// Bg click\n\t\troot.addEventListener(\"click\", (e) =>\n\t\t{\n\t\t\tif (e.target != this.root) { return; }\n\t\t\tif (this.onBackgroundClicked) { this.onBackgroundClicked(e, this); }\n\t\t});\n\n\t\t// Bg click right mouse\n\t\troot.addEventListener(\"contextmenu\", (e: PointerEvent) =>\n\t\t{\n\t\t\tif (e.button != 2) { return false; } // Right button\n\n\t\t\tif (this.onContextMenu) { this.onContextMenu(e); }\n\t\t\te.preventDefault();\n\t\t\treturn false;\n\t\t});\n\n\n\t\tconst rootItem = this.createAndInsert(data, options);\n\t\tif (!rootItem)\n\t\t{\n\t\t\tthrow (\"Error in LiteGUI.Tree, createAndInsert returned null\");\n\t\t}\n\t\trootItem.className += \" root_item\";\n\t\tthis.rootItem = rootItem;\n\n\t}\n\n\t/**\n\t * Update tree with new data (old data will be thrown away).\n\t * @param {TreeData} data - New data to display references.\n\t */\n\tupdateTree(data: TreeData)\n\t{\n\t\tthis.root.innerHTML = \"\";\n\t\tconst rootItem = this.createAndInsert(data, this.options);\n\t\tif (rootItem)\n\t\t{\n\t\t\trootItem.className += \" root_item\";\n\t\t\tthis.rootItem = rootItem;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.rootItem = undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Inserts an item into the tree.\n\t * @param {TreeData | TreeNode} data - Data to create the item from.\n\t * @param {string} [parentID] - ID of the parent item.\n\t * @param {number} [position] - Index in case you want to add it before the last position.\n\t * @param {TreeOptions} [options] - Options for the item.\n\t * @returns {TreeNode | undefined} The created item.\n\t */\n\tinsertItem(data: TreeData | TreeNode, parentID: string | undefined, position: number, options: TreeOptions = {}): TreeNode | undefined\n\t{\n\t\tif (!parentID)\n\t\t{\n\t\t\tconst root = this.root.childNodes[0];\n\t\t\tif (root)\n\t\t\t{\n\t\t\t\tparentID = root.dataset.itemID;\n\t\t\t}\n\t\t}\n\n\t\tconst element = this.createAndInsert(data, options, parentID, position);\n\n\t\t// Update parent collapse button\n\t\tif (parentID)\n\t\t{\n\t\t\tconst r = this._findElement(parentID);\n\t\t\tif (r)\n\t\t\t{\n\t\t\t\tthis._updateListBox(r); // No options here, this is the parent\n\t\t\t}\n\t\t}\n\n\t\treturn element;\n\t}\n\n\t/**\n\t * Creates and inserts an item.\n\t * @param {TreeData | TreeNode} data - Data for the item.\n\t * @param {TreeOptions} options - Options for the tree.\n\t * @param {string} [parentID] - Parent ID.\n\t * @param {number} [elementIndex] - Index to insert at.\n\t * @returns {TreeNode | undefined} The created node.\n\t */\n\tcreateAndInsert(data: TreeData | TreeNode, options: TreeOptions, parentID?: string, elementIndex?: number): TreeNode | undefined\n\t{\n\t\t// Find parent\n\t\tlet parentIndex = -1; // Root\n\t\tif (typeof parentID === \"string\")\n\t\t{\n\t\t\tparentIndex = this._findElementIndex(parentID);\n\t\t}\n\n\t\tlet parent: TreeNode | undefined = undefined;\n\t\tlet childLevel = 0;\n\n\t\t// Find level\n\t\tif (parentIndex != -1)\n\t\t{\n\t\t\tparent = this.root.childNodes[parentIndex];\n\t\t\tchildLevel = parseInt(parent.dataset.level ?? \"0\") + 1;\n\t\t}\n\n\t\t// Create\n\t\tconst element = this.createTreeItem(data, options, childLevel.toString());\n\t\tif (!element) { return; } // Error creating element\n\n\t\telement.parentId = parentID ?? \"0\";\n\n\t\t// Check\n\t\tconst existingItem = this.getItem(element.dataset.itemID as string);\n\t\tif (existingItem) { console.warn(\"There another item with the same ID in this tree\"); }\n\n\t\t// Insert\n\t\tif (parentIndex == -1)\n\t\t{\n\t\t\tthis.root.appendChild(element);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis._insertInside(element, parentIndex, elementIndex);\n\t\t}\n\n\t\t// Compute visibility according to parents\n\t\tif (parent && parentID && !this._isNodeChildrenVisible(parentID))\n\t\t{\n\t\t\telement.classList.add(\"hidden\");\n\t\t}\n\n\t\t// Children\n\t\tif (\"children\" in data && Array.isArray(data.children))\n\t\t{\n\t\t\tfor (const child of data.children)\n\t\t\t{\n\t\t\t\tif (\"id\" in child)\n\t\t\t\t{\n\t\t\t\t\tthis.createAndInsert(child, options, element.dataset.itemID);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Update collapse button\n\t\tthis._updateListBox(element, options, childLevel);\n\n\t\tif (options && options.selected)\n\t\t{\n\t\t\tthis._markAsSelected(element, true);\n\t\t}\n\n\t\treturn element;\n\t}\n\n\t/**\n\t * Inserts a node inside another node (parent).\n\t * @private\n\t * @param {TreeNode} element - The node to insert.\n\t * @param {number} parentIndex - The index of the parent node.\n\t * @param {number} [offsetIndex] - Optional offset index.\n\t * @param {number} [level] - Optional level.\n\t */\n\tprivate _insertInside(element: TreeNode, parentIndex: number, offsetIndex?: number, level?: number)\n\t{\n\t\tconst parent = this.root.childNodes[parentIndex];\n\t\tif (!parent)\n\t\t{\n\t\t\tthrow (`No parent node found, index: ${parentIndex}, nodes: ${this.root.childNodes.length}`);\n\t\t}\n\n\t\tconst parentLevel = parseInt(parent.dataset.level ?? \"0\");\n\t\tconst childLevel = level !== undefined ? level : parentLevel + 1;\n\n\t\tconst indent = element.querySelector(\".indentblock\") as HTMLSpanElement;\n\t\tif (indent)\n\t\t{\n\t\t\tindent.style.paddingLeft = ((childLevel + this.indentOffset) * Tree.INDENT) + \"px\"; // Inner padding\n\t\t}\n\t\telement.dataset.level = childLevel.toString();\n\n\t\t// Update level class\n\t\tconst classes = Array.from(element.classList);\n\t\tfor (const cls of classes)\n\t\t{\n\t\t\tif (cls.startsWith(\"ltree-level-\"))\n\t\t\t{\n\t\t\t\telement.classList.remove(cls);\n\t\t\t}\n\t\t}\n\t\telement.classList.add(\"ltree-level-\" + childLevel);\n\n\t\t// Under level nodes\n\t\tfor (let j = parentIndex + 1; j < this.root.childNodes.length; ++j)\n\t\t{\n\t\t\tconst newChildNode = this.root.childNodes[j];\n\t\t\tif (!newChildNode.classList || !newChildNode.classList.contains(\"ltreeitem\"))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst currentLevel = parseInt(newChildNode.dataset.level ?? \"\");\n\n\t\t\tif (currentLevel == childLevel && offsetIndex)\n\t\t\t{\n\t\t\t\toffsetIndex--;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Last position\n\t\t\tif (currentLevel < childLevel || (offsetIndex === 0 && currentLevel === childLevel))\n\t\t\t{\n\t\t\t\tthis.root.insertBefore(element, newChildNode);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// Ended\n\t\tthis.root.appendChild(element);\n\t}\n\n\t/**\n\t * Creates a tree item HTML element.\n\t * @param {TreeData | TreeNode} data - Data for the item.\n\t * @param {TreeOptions} options - Options.\n\t * @param {string} level - Level of indentation.\n\t * @returns {TreeNode | undefined} The created tree node.\n\t */\n\tcreateTreeItem(data: TreeData | TreeNode, options: TreeOptions, level: string): TreeNode | undefined\n\t{\n\t\tif (!data)\n\t\t{\n\t\t\tconsole.error(\"Tree item cannot be null\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst isHTMLElement = data instanceof HTMLElement;\n\n\t\toptions = options ?? this.options;\n\n\t\tconst root = document.createElement(\"li\") as TreeNode;\n\t\troot.className = \"ltreeitem\";\n\n\t\t// IDs are not used because they could collide, classes instead\n\t\tif (\"id\" in data && typeof data.id === \"string\")\n\t\t{\n\t\t\tconst safeID = data.id.replace(/\\s/g, \"_\");\n\t\t\troot.className += ` ltreeitem-${safeID}`;\n\t\t\troot.dataset.itemID = data.id;\n\t\t}\n\n\t\tif (\"dataset\" in data && typeof data.dataset === \"object\")\n\t\t{\n\t\t\tfor (const i in data.dataset)\n\t\t\t{\n\t\t\t\tconst dataset = data.dataset as Record<string, string>;\n\t\t\t\tif (typeof dataset[i] === \"string\")\n\t\t\t\t{\n\t\t\t\t\troot.dataset[i] = dataset[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (isHTMLElement && data.data)\n\t\t{\n\t\t\troot.data = data.data;\n\t\t}\n\t\telse\n\t\t{\n\t\t\troot.data = data as TreeData;\n\t\t}\n\n\t\tif (level !== undefined)\n\t\t{\n\t\t\troot.dataset.level = level;\n\t\t\troot.classList.add(\"ltree-level-\" + level);\n\t\t}\n\n\t\tconst titleElement = document.createElement(\"div\");\n\t\ttitleElement.className = \"ltreeitemtitle\";\n\t\tif (\"className\" in data && typeof data.className === \"string\")\n\t\t{\n\t\t\ttitleElement.className += ` ${data.className}`;\n\t\t}\n\n\t\ttitleElement.innerHTML = \"<span class='precontent'></span><span class='indentblock'></span><span class='collapsebox'></span><span class='incontent'></span><span class='postcontent'></span>\";\n\n\t\tconst content_text = (\"content\" in data ? data.content : (\"id\" in data ? data.id : \"\")) as string;\n\t\tconst inContent = titleElement.querySelector(\".incontent\") as HTMLSpanElement;\n\t\tif (inContent)\n\t\t{\n\t\t\tinContent.innerHTML = content_text;\n\t\t}\n\n\t\tif (\"preContent\" in data && typeof data.preContent === \"string\")\n\t\t{\n\t\t\tconst preContent = titleElement.querySelector(\".precontent\");\n\t\t\tif (preContent)\n\t\t\t{\n\t\t\t\tpreContent.innerHTML = data.preContent;\n\t\t\t}\n\t\t}\n\n\t\tif (\"postContent\" in data && typeof data.postContent === \"string\")\n\t\t{\n\t\t\tconst postContent = titleElement.querySelector(\".postcontent\");\n\t\t\tif (postContent)\n\t\t\t{\n\t\t\t\tpostContent.innerHTML = data.postContent;\n\t\t\t}\n\t\t}\n\n\t\troot.appendChild(titleElement);\n\t\troot.titleElement = titleElement;\n\n\t\tif (\"visible\" in data && data.visible === false)\n\t\t{\n\t\t\troot.style.display = \"none\";\n\t\t}\n\n\t\tconst row = root;\n\t\tconst onNodeSelected = (e: PointerEvent) =>\n\t\t{\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\n\t\t\tconst node = row;\n\t\t\tconst title = node.titleElement;\n\n\t\t\tif (title?.isEditing) { return; }\n\n\t\t\tif (e.ctrlKey && this.options.allowMultiSelection)\n\t\t\t{\n\t\t\t\t// Check if selected\n\t\t\t\tif (this._isNodeSelected(node))\n\t\t\t\t{\n\t\t\t\t\tnode.classList.remove(\"selected\");\n\t\t\t\t\tTrigger(this.root, \"item_remove_from_selection\", { item: node, data: node.data }); // LEGACY\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Mark as selected\n\t\t\t\tthis._markAsSelected(node, true);\n\t\t\t\tTrigger(this.root, \"item_add_to_selection\", { item: node, data: node.data }); // LEGACY\n\t\t\t\tlet r = false;\n\t\t\t\tif (isHTMLElement && data.callback)\n\t\t\t\t{\n\t\t\t\t\tr = data.callback.call(this, node);\n\t\t\t\t}\n\n\t\t\t\tif (!r && this.onItemAddToSelection)\n\t\t\t\t{\n\t\t\t\t\tthis.onItemAddToSelection(node.data, node);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (e.shiftKey && this.options.allowMultiSelection)\n\t\t\t{\n\t\t\t\t// Select from current selection till here current\n\t\t\t\tconst last_item = this.getSelectedItem();\n\t\t\t\tif (!last_item) { return; }\n\n\t\t\t\tif (last_item === node) { return; }\n\n\t\t\t\tconst nodeList = Array.prototype.slice.call(last_item.parentNode!.children);\n\t\t\t\tconst last_index = nodeList.indexOf(last_item);\n\t\t\t\tconst current_index = nodeList.indexOf(node);\n\n\t\t\t\tconst items = current_index > last_index ? nodeList.slice(last_index, current_index) : nodeList.slice(current_index, last_index);\n\t\t\t\tfor (let i = 0; i < items.length; ++i)\n\t\t\t\t{\n\t\t\t\t\tconst item = items[i];\n\t\t\t\t\t// Mark as selected\n\t\t\t\t\tthis._markAsSelected(item, true);\n\t\t\t\t\tTrigger(this.root, \"item_add_to_selection\", { item: item, data: item.data }); // LEGACY\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// Mark as selected\n\t\t\t\tthis._markAsSelected(node);\n\n\t\t\t\tthis._skipScroll = true; // Avoid scrolling while user clicks something\n\t\t\t\tTrigger(this.root, \"item_selected\", { item: node, data: node.data }); // LEGACY\n\t\t\t\tlet r = false;\n\t\t\t\tif (isHTMLElement && data.callback)\n\t\t\t\t{\n\t\t\t\t\tr = data.callback.call(this, node);\n\t\t\t\t}\n\n\t\t\t\tif (!r && this.onItemSelected)\n\t\t\t\t{\n\t\t\t\t\tthis.onItemSelected(node.data, node);\n\t\t\t\t}\n\t\t\t\tthis._skipScroll = false;\n\t\t\t}\n\t\t};\n\n\t\tconst onNodeDblClicked = (e: MouseEvent) =>\n\t\t{\n\t\t\tconst node = row;\n\t\t\tconst title = node.titleElement.querySelector(\".incontent\") as TreeTitleElement;\n\n\t\t\tTrigger(this.root, \"item_dblclicked\", node); // LEGACY\n\n\t\t\tif (!title.isEditing && this.options.allowRename)\n\t\t\t{\n\t\t\t\ttitle.isEditing = true;\n\t\t\t\ttitle.oldName = title.innerHTML;\n\t\t\t\tconst that2 = title;\n\t\t\t\ttitle.innerHTML = `<input type='text' value='${title.innerHTML}' />`;\n\t\t\t\tconst input = title.querySelector(\"input\");\n\n\t\t\t\tif (input)\n\t\t\t\t{\n\t\t\t\t\t// Loose focus when renaming\n\t\t\t\t\tinput.addEventListener(\"blur\", (e: FocusEvent) =>\n\t\t\t\t\t{\n\t\t\t\t\t\tconst target = e?.target;\n\t\t\t\t\t\tconst newName = target ? (target as HTMLInputElement).value ?? \"\" : \"\";\n\t\t\t\t\t\t// Bug fix, if I destroy input inside the event, it produce a NotFoundError\n\t\t\t\t\t\tsetTimeout(() => { that2.innerHTML = newName; }, 1);\n\t\t\t\t\t\tdelete that2.isEditing;\n\t\t\t\t\t\tTrigger(this.root, \"item_renamed\", { oldName: that2.oldName, newName: newName, item: node, data: node.data });\n\t\t\t\t\t\tdelete that2.oldName;\n\t\t\t\t\t});\n\n\t\t\t\t\t// Finishes renaming\n\t\t\t\t\tinput.addEventListener(\"keydown\", (e: KeyboardEvent) =>\n\t\t\t\t\t{\n\t\t\t\t\t\tif (e.key != \"Enter\") { return; }\n\t\t\t\t\t\tinput.blur();\n\t\t\t\t\t});\n\n\t\t\t\t\t// Set on focus\n\t\t\t\t\tinput.focus();\n\t\t\t\t}\n\n\t\t\t\te.preventDefault();\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t};\n\t\trow.addEventListener(\"click\", onNodeSelected.bind(row));\n\t\trow.addEventListener(\"dblclick\", onNodeDblClicked.bind(row));\n\t\tconst contextMenuCallback = (e: PointerEvent) =>\n\t\t{\n\t\t\tconst item = row;\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\n\t\t\tif (e.button != 2) { return; } // Right button\n\n\t\t\tif (this.onItemContextMenu)\n\t\t\t{\n\t\t\t\treturn this.onItemContextMenu(e, { item: item, data: item.data });\n\t\t\t}\n\n\t\t\treturn false;\n\t\t};\n\t\trow.addEventListener(\"contextmenu\", contextMenuCallback);\n\n\t\t// Dragging element on tree\n\t\tconst draggableElement = titleElement;\n\t\tif (this.options.allowDrag)\n\t\t{\n\t\t\tdraggableElement.draggable = true;\n\n\t\t\t// Starts dragging this element\n\t\t\tdraggableElement.addEventListener(\"dragstart\", (ev: DragEvent) =>\n\t\t\t{\n\t\t\t\tev.dataTransfer?.setData(\"itemID\",\n\t\t\t\t\t(draggableElement.parentNode && \"dataset\" in draggableElement.parentNode &&\n\t\t\t\t\t\tdraggableElement.parentNode.dataset ?\n\t\t\t\t\t\t(draggableElement.parentNode as TreeNode).dataset.itemID ?? \"\" : \"\"));\n\t\t\t\tif (data.onDragData)\n\t\t\t\t{\n\t\t\t\t\tconst dragData = data.onDragData();\n\t\t\t\t\tif (dragData)\n\t\t\t\t\t{\n\t\t\t\t\t\tfor (const i in dragData)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tev.dataTransfer?.setData(i, dragData[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tlet count = 0;\n\n\t\t// Something being dragged entered\n\t\tdraggableElement.addEventListener(\"dragenter\", (ev) =>\n\t\t{\n\t\t\tev.preventDefault();\n\t\t\tif (\"skipDrag\" in data && data.skipDrag) { return false; }\n\n\t\t\tif (count == 0) { titleElement.classList.add(\"dragover\"); }\n\t\t\tcount++;\n\t\t\treturn;\n\t\t});\n\n\t\tdraggableElement.addEventListener(\"dragleave\", (ev) =>\n\t\t{\n\t\t\tev.preventDefault();\n\t\t\tcount--;\n\t\t\tif (count == 0)\n\t\t\t{\n\t\t\t\ttitleElement.classList.remove(\"dragover\");\n\t\t\t}\n\t\t\treturn;\n\t\t});\n\n\t\t// Test if allows to drag stuff on top?\n\t\tdraggableElement.addEventListener(\"dragover\", _onDragOver);\n\t\tfunction _onDragOver(ev: DragEvent)\n\t\t{\n\t\t\tev.preventDefault();\n\t\t}\n\n\t\tdraggableElement.addEventListener(\"drop\", (ev: DragEvent) =>\n\t\t{\n\t\t\tconst el = ev.target as HTMLElement;\n\t\t\tdraggableElement.classList.remove(\"dragover\");\n\t\t\tev.preventDefault();\n\t\t\tcount = 0;\n\t\t\tif (\"skipDrag\" in data && data.skipDrag) { return false; }\n\n\t\t\tconst itemID = ev.dataTransfer?.getData(\"itemID\");\n\t\t\t// Find the closest tree item (li) being dropped onto\n\t\t\tconst parentNode = el.closest(\"li\") as TreeNode;\n\n\t\t\tif (!itemID)\n\t\t\t{\n\t\t\t\tTrigger(this.root, \"drop_on_item\", { item: el, event: ev });\n\t\t\t\t// Use parentNode data if available, otherwise fallback (or just don't crash)\n\t\t\t\tif (this.onDropItem && parentNode) { this.onDropItem(ev, parentNode.data); }\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!parentNode || !(\"dataset\" in parentNode)) { return; }\n\t\t\tconst parentID = parentNode.dataset.itemID;\n\n\t\t\tif (parentID && (!this.onMoveItem || (this.onMoveItem && this.onMoveItem(this.getItem(itemID), this.getItem(parentID)) != false)))\n\t\t\t{\n\t\t\t\tif (this.moveItem(itemID, parentID))\n\t\t\t\t{\n\t\t\t\t\tTrigger(this.root, \"item_moved\", { item: this.getItem(itemID), parent_item: this.getItem(parentID) });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.onDropItem) { this.onDropItem(ev, parentNode.data); }\n\t\t\treturn;\n\t\t});\n\n\t\treturn root;\n\t}\n\n\t/**\n\t * Remove from the tree the items that do not have a name that matches the string.\n\t * @param {string} name - The string to search for.\n\t */\n\tfilterByName(name: string): void\n\t{\n\t\tfor (let i = 0; i < this.root.childNodes.length; ++i)\n\t\t{\n\t\t\tconst childNode = this.root.childNodes[i] as TreeNode; // Ltreeitem\n\t\t\tif (!childNode.classList || !childNode.classList.contains(\"ltreeitem\"))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst content = childNode.querySelector(\".incontent\");\n\t\t\tif (!content) { continue; }\n\n\t\t\tconst str = content.innerHTML.toLowerCase();\n\n\t\t\tif (!name || str.indexOf(name.toLowerCase()) != -1)\n\t\t\t{\n\t\t\t\tif (childNode.data && childNode.data.visible)\n\t\t\t\t{\n\t\t\t\t\tchildNode.classList.remove(\"filtered\");\n\t\t\t\t}\n\t\t\t\tconst indent = childNode.querySelector(\".indentblock\") as HTMLElement;\n\t\t\t\tif (indent)\n\t\t\t\t{\n\t\t\t\t\tif (name)\n\t\t\t\t\t{\n\t\t\t\t\t\tindent.style.paddingLeft = \"0px\";\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tindent.style.paddingLeft = /* PaddingLeft = */ ((parseInt(childNode.dataset.level ?? \"\") + this.indentOffset) * Tree.INDENT) + \"px\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tchildNode.classList.add(\"filtered\");\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Remove from the tree the items that do not match the rule.\n\t * @param {Function} filterCallback - Callback that returns true if item should be kept.\n\t * @param {string} name - Name to pass to the callback.\n\t */\n\tfilterByRule(filterCallback: (data: TreeData, content: HTMLElement, name: string) => boolean,\n\t\tname: string): void\n\t{\n\t\tif (!filterCallback) { throw (\"filterByRule requires a callback\"); }\n\t\tfor (let i = 0; i < this.root.childNodes.length; ++i)\n\t\t{\n\t\t\tconst childNode = this.root.childNodes[i] as TreeNode; // Ltreeitem\n\t\t\tif (!childNode.classList || !childNode.classList.contains(\"ltreeitem\"))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst content = childNode.querySelector(\".incontent\") as HTMLElement;\n\t\t\tif (!content) { continue; }\n\n\t\t\tif (filterCallback(childNode.data, content, name))\n\t\t\t{\n\t\t\t\tif (childNode.data && childNode.data.visible !== false)\n\t\t\t\t{\n\t\t\t\t\tchildNode.classList.remove(\"filtered\");\n\t\t\t\t}\n\t\t\t\tconst indent = childNode.querySelector(\".indentblock\") as HTMLElement;\n\t\t\t\tif (indent)\n\t\t\t\t{\n\t\t\t\t\tif (name)\n\t\t\t\t\t{\n\t\t\t\t\t\tindent.style.paddingLeft = \"0px\";\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tindent.style.paddingLeft = ((parseInt(childNode.dataset.level ?? \"\") + this.indentOffset) * Tree.INDENT) + \"px\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tchildNode.classList.add(\"filtered\");\n\t\t\t}\n\t\t}\n\t}\n\n\n\t/**\n\t * Get the item with that id, returns the HTML element.\n\t * @param {string | TreeNode} id - ID or the node itself.\n\t * @returns {TreeNode | undefined} The tree node.\n\t */\n\tgetItem(id: string | TreeNode): TreeNode | undefined\n\t{\n\t\tif (!id) { return undefined; }\n\n\t\tif (typeof id != \"string\" && id.classList) { return id; } // If it is already a node\n\n\t\tfor (let i = 0; i < this.root.childNodes.length; ++i)\n\t\t{\n\t\t\tconst childNode = this.root.childNodes[i];\n\t\t\tif (!childNode.classList || !childNode.classList.contains(\"ltreeitem\"))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (childNode.dataset.itemID === id)\n\t\t\t{\n\t\t\t\treturn childNode;\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * In case an item is collapsed, it expands it to show children.\n\t * @param {string | TreeNode} id - ID or the node to expand.\n\t * @param {boolean} [parents] - If true, expands parents as well.\n\t */\n\texpandItem(id: string | TreeNode, parents: boolean): void\n\t{\n\t\tconst item = this.getItem(id);\n\t\tif (!item) { return; }\n\t\tif (typeof item == \"string\") { return; }\n\t\tif (!item.listBox) { return; }\n\n\t\titem.listBox.setValue(true); // This propagates changes\n\n\t\tif (!parents) { return; }\n\n\t\tconst parent = this.getParent(item);\n\t\tif (parent) { this.expandItem(parent, parents); }\n\t}\n\n\t/**\n\t * In case an item is expanded, it collapses it to hide children.\n\t * @param {string} id - ID of the item to collapse.\n\t */\n\tcollapseItem(id: string): void\n\t{\n\t\tconst item = this.getItem(id) as TreeNode;\n\t\tif (!item) { return; }\n\n\t\tif (!item.listBox) { return; }\n\n\t\titem.listBox.setValue(false); // This propagates changes\n\t}\n\n\n\t/**\n\t * Tells you if the item its out of the view due to the scrolling.\n\t * @param {string | TreeNode} id - ID or the node to check.\n\t * @returns {boolean} True if inside the visible area.\n\t */\n\tisInsideArea(id: string): boolean\n\t{\n\t\tconst item = typeof id === \"string\" ? this.getItem(id) : id;\n\t\tif (!item) { return false; }\n\n\t\tconst rects = this.root.getClientRects();\n\t\tif (!rects.length) { return false; }\n\t\tconst r = rects[0];\n\t\tconst h = r.height;\n\t\tconst y = item.offsetTop;\n\n\t\tif (this.root.scrollTop < y && y < (this.root.scrollTop + h))\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Scrolls to center this item.\n\t * @param {string | TreeNode} item - ID or the node to scroll to.\n\t */\n\tscrollToItem(item: string | TreeNode): void\n\t{\n\t\titem = (typeof item === \"string\" ? this.getItem(item) : item) as TreeNode;\n\t\tif (!item) { return; }\n\n\t\tconst container = this.root.parentNode as HTMLDivElement;\n\n\t\tif (!container) { return; }\n\n\t\tconst rect = container.getBoundingClientRect();\n\t\tconst h = rect.height; // If this function is misbehaving then remove this line and find another way to get \"h\"\n\t\tif (!rect) { return; }\n\t\tconst x = (parseInt(item.dataset.level ?? \"0\") + this.indentOffset) * Tree.INDENT + 50;\n\n\t\tcontainer.scrollTop = item.offsetTop - (h * 0.5) | 0;\n\t\tif (rect.width * 0.75 < x)\n\t\t{\n\t\t\tcontainer.scrollLeft = x;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tcontainer.scrollLeft = 0;\n\t\t}\n\t}\n\n\t/**\n\t * Mark item as selected.\n\t * @param {string} id - ID of the item to select.\n\t * @param {boolean} [scroll] - whether to scroll to the item.\n\t * @param {boolean} [sendEvent] - whether to trigger click event.\n\t * @returns {string | TreeNode | null | undefined} The selected node.\n\t */\n\tsetSelectedItem(id: string, scroll: boolean, sendEvent: boolean): string | TreeNode | null | undefined\n\t{\n\t\tif (!id)\n\t\t{\n\t\t\t// Clear selection\n\t\t\tthis._unmarkAllAsSelected();\n\t\t\treturn;\n\t\t}\n\n\t\tconst node = this.getItem(id);\n\t\tif (!node) { return null; }// Not found\n\n\t\t// Already selected\n\t\tif ((node as TreeNode).classList.contains(\"selected\")) { return; }\n\n\t\tthis._markAsSelected(node as TreeNode);\n\t\tif (scroll && !this._skipScroll) { this.scrollToItem(node); }\n\n\t\t// Expand parents\n\t\tthis.expandItem(node, true);\n\n\t\tif (sendEvent) { Trigger(node, \"click\"); }\n\n\t\treturn node;\n\t}\n\n\t/**\n\t * Adds item to selection (multiple selection).\n\t * @param {string} id - ID of the item.\n\t * @returns {string | TreeNode | null | undefined} The selected node.\n\t */\n\taddItemToSelection(id: string): string | TreeNode | null | undefined\n\t{\n\t\tif (!id) { return; }\n\n\t\tconst node = this.getItem(id);\n\t\tif (!node) { return null; } // Not found\n\n\t\tthis._markAsSelected(node as TreeNode, true);\n\t\treturn node;\n\t}\n\n\t/**\n\t * Remove item from selection (multiple selection).\n\t * @param {string} id - ID of the item.\n\t */\n\tremoveItemFromSelection(id: string)\n\t{\n\t\tif (!id) { return; }\n\t\tconst node = this.getItem(id);\n\t\tif (!node) { return null; } // Not found\n\t\t(node as TreeNode).classList.remove(\"selected\");\n\t\treturn;\n\t}\n\n\t/**\n\t * Returns the first selected item (its HTML element).\n\t * @returns {Element | null} The selected element.\n\t */\n\tgetSelectedItem(): Element | null\n\t{\n\t\treturn this.root.querySelector(\".ltreeitem.selected\");\n\t}\n\n\t/**\n\t * Returns an array with the selected items (its HTML elements).\n\t * @returns {NodeListOf<Element>} The selected elements.\n\t */\n\tgetSelectedItems(): NodeListOf<Element>\n\t{\n\t\treturn this.root.querySelectorAll(\".ltreeitem.selected\");\n\t}\n\n\t/**\n\t * Returns if an item is selected.\n\t * @param {string} id - ID of the item.\n\t * @returns {boolean} True if selected.\n\t */\n\tisItemSelected(id: string): boolean\n\t{\n\t\tconst node = this.getItem(id);\n\t\tif (!node) { return false; }\n\t\treturn this._isNodeSelected(node as TreeNode);\n\t}\n\n\t/**\n\t * Returns the children of an item.\n\t * @param {string | TreeNode} id - could be string or node directly.\n\t * @param {boolean} [onlyDirectChildren=false] - to get only direct children.\n\t * @returns {TreeNode[] | undefined} The children nodes.\n\t */\n\tgetChildren(id: string | TreeNode, onlyDirectChildren: boolean = false): TreeNode[] | undefined\n\t{\n\t\tif (typeof id !== \"string\")\n\t\t{\n\t\t\tid = id.dataset.itemID as string;\n\t\t}\n\t\treturn this._findChildElements(id, onlyDirectChildren);\n\t}\n\n\t/**\n\t * Returns the parent of a item.\n\t * @param {string | TreeNode} id - ID or node.\n\t * @returns {TreeNode | undefined} The parent node.\n\t */\n\tgetParent(id: string | TreeNode): TreeNode | undefined\n\t{\n\t\tconst element = this.getItem(id);\n\t\tif (element) { return this.getItem(element.parentId); }\n\t\treturn;\n\t}\n\n\t/**\n\t * Returns an array with all the ancestors\n\t * @param {string | TreeNode} id - ID or node.\n\t * @param {Array<string | TreeNode>} result - Array to store results.\n\t * @returns {Array<TreeNode | string>} The ancestors.\n\t */\n\tgetAncestors(id: string | TreeNode, result: Array<string | TreeNode>): Array<TreeNode | string>\n\t{\n\t\tresult = result ?? [];\n\t\tconst element = this.getItem(id);\n\t\tif (element)\n\t\t{\n\t\t\tresult.push(element);\n\t\t\treturn this.getAncestors(element.parentId, result);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Checks if a node is an ancestor of another.\n\t * @param {string | TreeNode} child - Child node.\n\t * @param {string | TreeNode} node - Potential ancestor.\n\t * @returns {boolean | Array<TreeNode | string>} True if is ancestor (or returns array/boolean? implementation returns boolean usually but type says Array|boolean).\n\t */\n\tisAncestor(child: string | TreeNode, node: string | TreeNode): Array<TreeNode | string> | boolean\n\t{\n\t\tconst element = this.getItem(child) as TreeNode;\n\t\tif (!element) { return false; }\n\t\tconst dest = this.getItem(node);\n\t\tconst parent = this.getItem(element.parentId);\n\t\tif (!parent) { return false; }\n\t\tif (parent == dest) { return true; }\n\t\treturn this.isAncestor(parent, node);\n\t}\n\n\t/**\n\t * Move item with id to be child of parent_id.\n\t * @param {string} id - ID of the item to move.\n\t * @param {string} parentId - ID of the new parent.\n\t * @returns {boolean} True if moved.\n\t */\n\tmoveItem(id: string, parentId: string): boolean\n\t{\n\t\tif (id === parentId) { return false; }\n\n\t\tconst node = this.getItem(id) as TreeNode;\n\t\tconst parent = this.getItem(parentId);\n\n\t\tif (!parent || !node) { return false; }\n\n\t\tif (this.isAncestor(parent, node)) { return false; }\n\n\t\tconst parentLevel = parseInt(parent.dataset.level ?? \"0\");\n\t\tconst oldParent = this.getParent(node);\n\t\tif (!oldParent)\n\t\t{\n\t\t\tconsole.error(\"node parent not found by id, maybe id has changed\");\n\t\t\treturn false;\n\t\t}\n\t\tconst oldParentLevel = parseInt(oldParent.dataset.level ?? \"0\");\n\t\tconst leveOffset = parentLevel - oldParentLevel;\n\n\t\tif (parent == oldParent) { return false; }\n\n\t\t// Replace parent info\n\t\tnode.parentId = parentId;\n\n\t\t// Get all children and reinsert them in the new level\n\t\tconst children = this.getChildren(node);\n\t\tif (children)\n\t\t{\n\t\t\tchildren.unshift(node); // Add the node at the beginning\n\n\t\t\t// Remove all children\n\t\t\tfor (let i = 0; i < children.length; i++)\n\t\t\t{\n\t\t\t\tchildren[i].parentNode!.removeChild(children[i]);\n\t\t\t}\n\n\t\t\t// Update levels\n\t\t\tfor (let i = 0; i < children.length; i++)\n\t\t\t{\n\t\t\t\tconst child = children[i];\n\t\t\t\tconst newLevel = parseInt(child.dataset.level ?? \"0\") + leveOffset;\n\t\t\t\tchild.dataset.level = newLevel.toString();\n\t\t\t}\n\n\t\t\t// Reinsert\n\t\t\tfor (let i = 0; i < children.length; i++)\n\t\t\t{\n\t\t\t\tconst child = children[i];\n\t\t\t\tlet currentParentIndex = -1;\n\n\t\t\t\tif (child === node)\n\t\t\t\t{\n\t\t\t\t\tcurrentParentIndex = this._findElementIndex(parent);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tcurrentParentIndex = this._findElementIndex(child.parentId);\n\t\t\t\t}\n\n\t\t\t\tif (currentParentIndex === -1)\n\t\t\t\t{\n\t\t\t\t\tconsole.error(\"Parent not found for reinsertion\", child);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Use a large offset to append to the end\n\t\t\t\tthis._insertInside(child, currentParentIndex, 999999, parseInt(child.dataset.level ?? \"0\"));\n\t\t\t}\n\t\t}\n\n\t\t// Update collapse button\n\t\tthis._updateListBox(parent as TreeNode);\n\t\tif (oldParent) { this._updateListBox(oldParent); }\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Remove item with given id.\n\t * @param {string | TreeNode} item - ID or node to remove.\n\t * @param {boolean} removeChildren - whether to remove children as well.\n\t * @returns {boolean} True if removed.\n\t */\n\tremoveItem(item: string | TreeNode, removeChildren: boolean): boolean\n\t{\n\t\tlet node = item;\n\t\tif (typeof (item) == \"string\") { node = this.getItem(item)!; }\n\t\tif (!node) { return false; }\n\n\t\t// Get parent\n\t\tconst parent = this.getParent(node);\n\n\t\t// Get all descendants\n\t\tlet child_nodes = null;\n\t\tif (removeChildren) { child_nodes = this.getChildren(node); }\n\n\t\t// Remove html element\n\t\tthis.root.removeChild(node as TreeNode);\n\n\t\t// Remove all children\n\t\tif (child_nodes)\n\t\t{\n\t\t\tfor (let i = 0; i < child_nodes.length; i++)\n\t\t\t{\n\t\t\t\tthis.root.removeChild(child_nodes[i]);\n\t\t\t}\n\t\t}\n\n\t\t// Update parent collapse button\n\t\tif (parent) { this._updateListBox(parent as TreeNode); }\n\t\treturn true;\n\t}\n\n\t/**\n\t * Update a given item with new data.\n\t * @param {string} id - ID of the item to update.\n\t * @param {TreeData | TreeNode} data - New data.\n\t * @returns {boolean} True if updated.\n\t */\n\tupdateItem(id: string, data: TreeData | TreeNode): boolean\n\t{\n\t\tconst node = this.getItem(id) as TreeNode;\n\t\tif (!node) { return false; }\n\n\t\tconst isTreeNode = data instanceof HTMLElement;\n\n\t\tnode.data = isTreeNode ? node.data : data;\n\t\tif (isTreeNode && data.id) { node.id = data.id; }\n\t\tif (isTreeNode && data.content)\n\t\t{\n\t\t\tconst inContent = node.titleElement?.querySelector(\".incontent\");\n\t\t\tif (inContent)\n\t\t\t{\n\t\t\t\tinContent.innerHTML = data.content;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Update a given item id and the link with its children.\n\t * @param {string} oldId - Old ID.\n\t * @param {string} newId - New ID.\n\t * @returns {boolean} True if updated.\n\t */\n\tupdateItemId(oldId: string, newId: string): boolean\n\t{\n\t\tconst node = this.getItem(oldId) as TreeNode;\n\t\tif (!node) { return false; }\n\n\t\tconst children = this.getChildren(oldId, true);\n\t\tnode.id = newId;\n\n\t\tif (!children) { return false; }\n\n\t\tfor (let i = 0; i < children.length; ++i)\n\t\t{\n\t\t\tconst child = children[i];\n\t\t\tchild.parentId = newId;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\n\t/**\n\t * Clears all the items.\n\t * @param {boolean} keepRoot - if you want to keep the root item.\n\t */\n\tclear(keepRoot: boolean)\n\t{\n\t\tif (!keepRoot)\n\t\t{\n\t\t\tthis.root.innerHTML = \"\";\n\t\t\treturn;\n\t\t}\n\n\t\tconst items = this.root.querySelectorAll(\".ltreeitem\");\n\t\tfor (let i = 1; i < items.length; i++)\n\t\t{\n\t\t\tconst item = items[i];\n\t\t\tthis.root.removeChild(item);\n\t\t}\n\t}\n\n\n\t/**\n\t * Gets a node by its index in the DOM.\n\t * @param {number} index - Index of the node.\n\t * @returns {Element} The node element.\n\t */\n\tgetNodeByIndex(index: number): Element\n\t{\n\t\tconst items = this.root.querySelectorAll(\".ltreeitem\");\n\t\treturn items[index];\n\t}\n\n\t// Private\n\n\t/**\n\t * Checks if the children of a node are visible.\n\t * @private\n\t * @param {string | TreeNode} id - The ID or the node itself.\n\t * @returns {boolean} True if children are visible.\n\t */\n\tprivate _isNodeChildrenVisible(id: string | TreeNode): boolean\n\t{\n\t\tconst node = this.getItem(id);\n\t\tif (!node) { return false; }\n\t\tif (node.classList.contains(\"hidden\")) { return false; }\n\n\t\t// Check listboxes\n\t\tconst listbox = node.querySelector(\".listbox\") as ListBoxSpanElement;\n\t\tif (!listbox) { return true; }\n\t\tif (listbox.listBox?.getValue() == \"closed\") { return false; }\n\t\treturn true;\n\t}\n\n\t/**\n\t * Finds a node element by its ID.\n\t * @private\n\t * @param {string} id - The item's ID.\n\t * @returns {TreeNode | undefined} Thefound node or undefined.\n\t */\n\tprivate _findElement(id: string)\n\t{\n\t\tif (!id || typeof id !== \"string\")\n\t\t{\n\t\t\tthrow (\"findElement param must be string with item id\");\n\t\t}\n\t\tfor (let i = 0; i < this.root.childNodes.length; ++i)\n\t\t{\n\t\t\tconst childNode = this.root.childNodes[i];\n\t\t\tif (!childNode.classList || !childNode.classList.contains(\"ltreeitem\"))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (childNode.classList.contains(\"ltreeitem-\" + id))\n\t\t\t{\n\t\t\t\treturn childNode;\n\t\t\t}\n\t\t}\n\n\t\treturn;\n\t}\n\n\t/**\n\t * Finds the index of a node in the DOM list.\n\t * @private\n\t * @param {string | TreeNode} id - The ID or the node itself.\n\t * @returns {number} The index, or -1 if not found.\n\t */\n\tprivate _findElementIndex(id: string | TreeNode): number\n\t{\n\t\tfor (let i = 0; i < this.root.childNodes.length; ++i)\n\t\t{\n\t\t\tconst childNode = this.root.childNodes[i];\n\t\t\tif (!childNode.classList || !childNode.classList.contains(\"ltreeitem\"))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (typeof (id) === \"string\")\n\t\t\t{\n\t\t\t\tif (childNode.dataset.itemID === id)\n\t\t\t\t{\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (childNode === id)\n\t\t\t{\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t}\n\n\t/**\n\t * Finds the index of the last child of a node.\n\t * @private\n\t * @param {number} startIndex - The index of the parent node.\n\t * @returns {number} The index of the last child.\n\t */\n\tprivate _findElementLastChildIndex(startIndex: number): number\n\t{\n\t\tif (startIndex == -1)\n\t\t{\n\t\t\treturn -1;\n\t\t}\n\n\t\tconst level = parseInt(this.root.childNodes[startIndex].dataset.level ?? \"0\");\n\n\t\tfor (let i = startIndex + 1; i < this.root.childNodes.length; ++i)\n\t\t{\n\t\t\tconst childNode = this.root.childNodes[i] as TreeNode;\n\t\t\tif (!childNode.classList || !childNode.classList.contains(\"ltreeitem\"))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst currentLevel = parseInt(childNode.dataset.level ?? \"0\");\n\t\t\tif (currentLevel == level)\n\t\t\t{\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t}\n\n\t/**\n\t * Finds child elements of a node.\n\t * @private\n\t * @param {string} id - The parent ID.\n\t * @param {boolean} onlyDirectChildren - If true, returns only direct children.\n\t * @returns {TreeNode[] | undefined} Array of child nodes.\n\t */\n\tprivate _findChildElements(id: string, onlyDirectChildren: boolean): TreeNode[] | undefined\n\t{\n\t\tconst parentIndex = this._findElementIndex(id);\n\t\tif (parentIndex == -1)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tconst parent = this.root.childNodes[parentIndex];\n\t\tconst parentLevel = parseInt(parent.dataset.level ?? \"0\");\n\n\t\tconst result = [];\n\n\t\tfor (let i = parentIndex + 1; i < this.root.childNodes.length; ++i)\n\t\t{\n\t\t\tconst childNode = this.root.childNodes[i];\n\t\t\tif (!childNode.classList || !childNode.classList.contains(\"ltreeitem\"))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst currentLevel = parseInt(childNode.dataset.level ?? \"0\");\n\t\t\tif (onlyDirectChildren && currentLevel > (parentLevel + 1)) { continue; }\n\t\t\tif (currentLevel <= parentLevel) { return result; }\n\n\t\t\tresult.push(childNode);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Unmarks all nodes as selected.\n\t * @private\n\t */\n\tprivate _unmarkAllAsSelected()\n\t{\n\t\tthis.root.classList.remove(\"selected\");\n\t\tconst selected_array = this.root.querySelectorAll(\".ltreeitem.selected\");\n\t\tif (selected_array)\n\t\t{\n\t\t\tfor (let i = 0; i < selected_array.length; i++)\n\t\t\t{\n\t\t\t\tselected_array[i].classList.remove(\"selected\");\n\t\t\t}\n\t\t}\n\t\tconst semiSelected = this.root.querySelectorAll(\".ltreeitem.semiselected\");\n\t\tfor (let i = 0; i < semiSelected.length; i++)\n\t\t{\n\t\t\tsemiSelected[i].classList.remove(\"semiselected\");\n\t\t}\n\t}\n\n\t/**\n\t * Checks if a node is selected.\n\t * @private\n\t * @param {TreeNode} node - The node to check.\n\t * @returns {boolean} True if selected.\n\t */\n\tprivate _isNodeSelected(node: TreeNode): boolean\n\t{\n\t\t// Already selected\n\t\tif (node.classList.contains(\"selected\")) { return true; }\n\t\treturn false;\n\t}\n\n\t/**\n\t * Marks a node as selected.\n\t * @private\n\t * @param {TreeNode} node - The node to select.\n\t * @param {boolean} [addToExistingSelection=false] - If true, adds to current selection instead of clearing it.\n\t */\n\tprivate _markAsSelected(node: TreeNode, addToExistingSelection: boolean = false)\n\t{\n\t\t// Already selected\n\t\tif (node.classList.contains(\"selected\")) { return; }\n\n\t\t// Clear old selection\n\t\tif (!addToExistingSelection) { this._unmarkAllAsSelected(); }\n\n\t\t// Mark as selected (it was node.titleElement?)\n\t\tnode.classList.add(\"selected\");\n\n\t\t// Go up and soft select\n\t\tlet parent = this.getParent(node);\n\t\tconst visited = [];\n\t\twhile (parent && visited.indexOf(parent) == -1)\n\t\t{\n\t\t\tparent.classList.add(\"semiselected\");\n\t\t\tvisited.push(parent);\n\t\t\tparent = this.getParent(parent) as TreeNode;\n\t\t}\n\t}\n\n\t/**\n\t * Updates the listbox (collapse/expand icon) of a node.\n\t * @private\n\t * @param {TreeNode} node - The node to update.\n\t * @param {TreeOptions} [options] - Options.\n\t * @param {number} [currentLevel=0] - Current indentation level.\n\t */\n\tprivate _updateListBox(node: TreeNode, options?: TreeOptions, currentLevel: number = 0)\n\t{\n\t\tif (!node) { return; }\n\n\t\tif (!node.listBox)\n\t\t{\n\t\t\tconst pre = node.titleElement?.querySelector(\".collapsebox\");\n\t\t\tif (!pre) { return; }\n\n\t\t\tconst box = new ListBox(true, (value: string) =>\n\t\t\t{\n\t\t\t\tthis._onClickBox(node);\n\t\t\t\tTrigger(this.root, \"item_collapse_change\",\n\t\t\t\t\t{\n\t\t\t\t\t\titem: node,\n\t\t\t\t\t\tdata: value\n\t\t\t\t\t});\n\t\t\t});\n\t\t\tconst element = box.root;\n\t\t\tif (element)\n\t\t\t{\n\t\t\t\tbox.stopPropagation = true;\n\t\t\t\telement.setEmpty(true);\n\t\t\t\tpre.appendChild(element);\n\t\t\t\tnode.listBox = element;\n\t\t\t}\n\t\t}\n\n\t\tif ((options && options.collapsed) || currentLevel >= this.collapsedDepth)\n\t\t{\n\t\t\tnode.listBox?.collapse();\n\t\t}\n\n\t\tconst children = this.getChildren(node.dataset.itemID ?? \"\");\n\t\tif (!children) { return; }\n\n\t\tif (children.length)\n\t\t{\n\t\t\tnode.listBox?.setEmpty(false);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tnode.listBox?.setEmpty(true);\n\t\t}\n\t}\n\n\tprivate _onClickBox(node: string | TreeNode)\n\t{\n\t\tconst children = this.getChildren(node);\n\n\t\tif (!children) { return; }\n\n\t\t// Update children visibility\n\t\tfor (let i = 0; i < children.length; ++i)\n\t\t{\n\t\t\tconst child = children[i];\n\n\t\t\tconst child_parent = this.getParent(child);\n\t\t\tlet visible = true;\n\t\t\tif (child_parent) { visible = this._isNodeChildrenVisible(child_parent); }\n\t\t\tif (visible)\n\t\t\t{\n\t\t\t\tchild.classList.remove(\"hidden\");\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tchild.classList.add(\"hidden\");\n\t\t\t}\n\t\t}\n\t}\n\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(1969);\n",""],"names":[],"sourceRoot":""}