diff --git a/examples/Checkbox/index.html b/examples/Checkbox/index.html
index 3e79e4ae..ec48a08b 100644
--- a/examples/Checkbox/index.html
+++ b/examples/Checkbox/index.html
@@ -19,7 +19,7 @@
-
+
diff --git a/examples/ClassificationsTree/index.html b/examples/ClassificationsTree/index.html
index d16e9beb..37dbe6fa 100644
--- a/examples/ClassificationsTree/index.html
+++ b/examples/ClassificationsTree/index.html
@@ -24,10 +24,10 @@
-
-
+
+
-
+
diff --git a/examples/ColorInput/index.html b/examples/ColorInput/index.html
index 8f096cfc..4f923eb6 100644
--- a/examples/ColorInput/index.html
+++ b/examples/ColorInput/index.html
@@ -23,7 +23,7 @@
-
+
diff --git a/examples/Component/index.html b/examples/Component/index.html
index a8c20d72..29bfc59d 100644
--- a/examples/Component/index.html
+++ b/examples/Component/index.html
@@ -21,7 +21,7 @@
-
+
diff --git a/examples/ContextMenu/index.html b/examples/ContextMenu/index.html
index 0359002d..f2d8c306 100644
--- a/examples/ContextMenu/index.html
+++ b/examples/ContextMenu/index.html
@@ -32,7 +32,7 @@
-
+
diff --git a/examples/Dropdown/index.html b/examples/Dropdown/index.html
index 33f0db7c..3368ed0d 100644
--- a/examples/Dropdown/index.html
+++ b/examples/Dropdown/index.html
@@ -29,7 +29,7 @@
-
+
diff --git a/examples/ElementProperties/index.html b/examples/ElementProperties/index.html
index 9443b57d..d6a89aa7 100644
--- a/examples/ElementProperties/index.html
+++ b/examples/ElementProperties/index.html
@@ -28,9 +28,9 @@
-
+
-
+
diff --git a/examples/EntityAttributes/index.html b/examples/EntityAttributes/index.html
index 075785dc..49d4da7e 100644
--- a/examples/EntityAttributes/index.html
+++ b/examples/EntityAttributes/index.html
@@ -34,9 +34,9 @@
-
+
-
+
diff --git a/examples/Grid/index.html b/examples/Grid/index.html
index 99f3072c..b0e29cc9 100644
--- a/examples/Grid/index.html
+++ b/examples/Grid/index.html
@@ -40,7 +40,7 @@
-
+
diff --git a/examples/Label/index.html b/examples/Label/index.html
index 22e7fd07..4af2456b 100644
--- a/examples/Label/index.html
+++ b/examples/Label/index.html
@@ -24,7 +24,7 @@
-
+
diff --git a/examples/ModelsList/index.html b/examples/ModelsList/index.html
index 7d8dce8e..c363fbc7 100644
--- a/examples/ModelsList/index.html
+++ b/examples/ModelsList/index.html
@@ -24,10 +24,10 @@
-
-
+
+
-
+
diff --git a/examples/NumberInput/index.html b/examples/NumberInput/index.html
index 9d2369b8..4825b14b 100644
--- a/examples/NumberInput/index.html
+++ b/examples/NumberInput/index.html
@@ -23,7 +23,7 @@
-
+
diff --git a/examples/Panel/index.html b/examples/Panel/index.html
index 77665e17..e3eae43d 100644
--- a/examples/Panel/index.html
+++ b/examples/Panel/index.html
@@ -46,7 +46,7 @@
-
+
diff --git a/examples/RelationsTree/index.html b/examples/RelationsTree/index.html
index 07f7a5b4..b2cba698 100644
--- a/examples/RelationsTree/index.html
+++ b/examples/RelationsTree/index.html
@@ -24,10 +24,10 @@
-
-
+
+
-
+
diff --git a/examples/Selector/index.html b/examples/Selector/index.html
index 0cad01c7..61062df4 100644
--- a/examples/Selector/index.html
+++ b/examples/Selector/index.html
@@ -23,7 +23,7 @@
-
+
diff --git a/examples/Table/DataTransform/index.html b/examples/Table/DataTransform/index.html
index ef1f37a9..76dcc0d1 100644
--- a/examples/Table/DataTransform/index.html
+++ b/examples/Table/DataTransform/index.html
@@ -26,7 +26,7 @@
-
+
diff --git a/examples/Table/ExportingData/index.html b/examples/Table/ExportingData/index.html
index 1a0f42ab..69cba376 100644
--- a/examples/Table/ExportingData/index.html
+++ b/examples/Table/ExportingData/index.html
@@ -26,7 +26,7 @@
-
+
diff --git a/examples/Table/LoadFunction/index.html b/examples/Table/LoadFunction/index.html
index 6876ba82..4151e53f 100644
--- a/examples/Table/LoadFunction/index.html
+++ b/examples/Table/LoadFunction/index.html
@@ -26,7 +26,7 @@
-
+
diff --git a/examples/Table/Searching/index.html b/examples/Table/Searching/index.html
index 52b0929b..5cd9bb68 100644
--- a/examples/Table/Searching/index.html
+++ b/examples/Table/Searching/index.html
@@ -26,7 +26,7 @@
-
+
diff --git a/examples/Table/index.html b/examples/Table/index.html
index 335e9d02..5560ee4a 100644
--- a/examples/Table/index.html
+++ b/examples/Table/index.html
@@ -26,7 +26,7 @@
-
+
diff --git a/examples/Tabs/index.html b/examples/Tabs/index.html
index 8a32dc37..5d4d8e06 100644
--- a/examples/Tabs/index.html
+++ b/examples/Tabs/index.html
@@ -36,7 +36,7 @@
-
+
diff --git a/examples/TextInput/index.html b/examples/TextInput/index.html
index 9d67ea3d..9ab5304c 100644
--- a/examples/TextInput/index.html
+++ b/examples/TextInput/index.html
@@ -26,7 +26,7 @@
-
+
diff --git a/examples/Toolbar/index.html b/examples/Toolbar/index.html
index 3f7f105d..95a38ff6 100644
--- a/examples/Toolbar/index.html
+++ b/examples/Toolbar/index.html
@@ -23,7 +23,7 @@
-
+
diff --git a/examples/TopicForm/index.html b/examples/TopicForm/index.html
index 21dbf32a..21b81866 100644
--- a/examples/TopicForm/index.html
+++ b/examples/TopicForm/index.html
@@ -27,7 +27,7 @@
-
+
diff --git a/examples/TopicsList/index.html b/examples/TopicsList/index.html
index 4458c0e2..a3eab12b 100644
--- a/examples/TopicsList/index.html
+++ b/examples/TopicsList/index.html
@@ -38,7 +38,7 @@
-
+
diff --git a/examples/ViewCube/index.html b/examples/ViewCube/index.html
index 2d017a6b..63cdc1a7 100644
--- a/examples/ViewCube/index.html
+++ b/examples/ViewCube/index.html
@@ -17,11 +17,11 @@
-
+
-
+
diff --git a/examples/World/index.html b/examples/World/index.html
index e0b1e929..25bdcf4e 100644
--- a/examples/World/index.html
+++ b/examples/World/index.html
@@ -19,11 +19,11 @@
-
+
-
+
diff --git a/examples/World2D/index.html b/examples/World2D/index.html
index dcf22715..603efd19 100644
--- a/examples/World2D/index.html
+++ b/examples/World2D/index.html
@@ -18,11 +18,11 @@
-
+
-
+
diff --git a/examples/WorldsConfiguration/index.html b/examples/WorldsConfiguration/index.html
index 45a5efc5..9a2b169a 100644
--- a/examples/WorldsConfiguration/index.html
+++ b/examples/WorldsConfiguration/index.html
@@ -28,9 +28,9 @@
-
+
-
+
diff --git a/examples/assets/button.js b/examples/assets/button.js
index f668c2a0..ec1c763f 100644
--- a/examples/assets/button.js
+++ b/examples/assets/button.js
@@ -1 +1 @@
-import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as t}from"./index-CcrzIsUO.js";import"./state-DYefyXr3.js";import"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";t.init();const e=document.body.querySelector("bim-button");e.addEventListener("click",()=>{alert("Your schedule has been created!")});const n=document.getElementById("context-btn");n.addEventListener("click",()=>{console.log("asdasd")});
+import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as t}from"./index-DyXslpcX.js";import"./state-DYefyXr3.js";import"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";t.init();const e=document.body.querySelector("bim-button");e.addEventListener("click",()=>{alert("Your schedule has been created!")});const n=document.getElementById("context-btn");n.addEventListener("click",()=>{console.log("asdasd")});
diff --git a/examples/assets/checkbox.js b/examples/assets/checkbox.js
index f7e9326c..ef0d146e 100644
--- a/examples/assets/checkbox.js
+++ b/examples/assets/checkbox.js
@@ -1 +1 @@
-import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as t}from"./index-CcrzIsUO.js";import"./state-DYefyXr3.js";import"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";t.init();const e=document.body.querySelector("bim-checkbox");e.addEventListener("change",()=>{const{checked:o}=e;alert(o?"You want BIM Tiles! :)":"You don't want BIM Tiles :(")});
+import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as t}from"./index-DyXslpcX.js";import"./state-DYefyXr3.js";import"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";t.init();const e=document.body.querySelector("bim-checkbox");e.addEventListener("change",()=>{const{checked:o}=e;alert(o?"You want BIM Tiles! :)":"You don't want BIM Tiles :(")});
diff --git a/examples/assets/classificationsTree.js b/examples/assets/classificationsTree.js
index e594faee..0293f367 100644
--- a/examples/assets/classificationsTree.js
+++ b/examples/assets/classificationsTree.js
@@ -1,4 +1,4 @@
-import"./modulepreload-polyfill-B5Qt9EMX.js";import{T as l,C as p,W as d,S as f,a as b,b as g,G as w,I as y,F as u,t as C,l as T,m as v}from"./index-N2x2mgv3.js";import{b as L}from"./index-DAXFTtA6.js";import{t as E}from"./index-BazQpUSZ.js";import"./lit-html-paDGiEfB.js";l.init();const e=new p,n=document.createElement("bim-viewport");n.name="viewer";const I=e.get(d),t=I.create(),o=new f(e);o.setup();t.scene=o;const r=new b(e,n);t.renderer=r;const c=new g(e);t.camera=c;n.addEventListener("resize",()=>{r.resize(),c.updateAspect()});const S=e.get(w);S.create(t);e.init();const F=e.get(y);await F.setup();const m=e.get(u);m.onFragmentsLoaded.add(s=>{t.scene&&t.scene.three.add(s)});const[G,z]=E.classificationTree({components:e,classifications:[]}),i=e.get(C);m.onFragmentsLoaded.add(async s=>{i.byEntity(s),await i.byPredefinedType(s),z({classifications:[{system:"entities",label:"Entities"},{system:"predefinedTypes",label:"Predefined Types"}]})});const M=T.create(()=>{const[s]=L.loadIfc({components:e});return v`
+import"./modulepreload-polyfill-B5Qt9EMX.js";import{T as l,C as p,W as d,S as f,a as b,b as g,G as w,I as y,F as u,t as C,l as T,m as v}from"./index-D2hR2zBN.js";import{b as L}from"./index-Cc7BUWEv.js";import{t as E}from"./index-CCTT9UP1.js";import"./lit-html-paDGiEfB.js";l.init();const e=new p,n=document.createElement("bim-viewport");n.name="viewer";const I=e.get(d),t=I.create(),o=new f(e);o.setup();t.scene=o;const r=new b(e,n);t.renderer=r;const c=new g(e);t.camera=c;n.addEventListener("resize",()=>{r.resize(),c.updateAspect()});const S=e.get(w);S.create(t);e.init();const F=e.get(y);await F.setup();const m=e.get(u);m.onFragmentsLoaded.add(s=>{t.scene&&t.scene.three.add(s)});const[G,z]=E.classificationTree({components:e,classifications:[]}),i=e.get(C);m.onFragmentsLoaded.add(async s=>{i.byEntity(s),await i.byPredefinedType(s),z({classifications:[{system:"entities",label:"Entities"},{system:"predefinedTypes",label:"Predefined Types"}]})});const M=T.create(()=>{const[s]=L.loadIfc({components:e});return v`
${s}
diff --git a/examples/assets/colorInput.js b/examples/assets/colorInput.js
index 256d1946..c2e640cc 100644
--- a/examples/assets/colorInput.js
+++ b/examples/assets/colorInput.js
@@ -1 +1 @@
-import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as r}from"./index-CcrzIsUO.js";import"./state-DYefyXr3.js";import"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";r.init();const o=document.body.querySelector("bim-color-input");o.addEventListener("input",()=>{const{color:t}=o;console.log(t)});
+import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as r}from"./index-DyXslpcX.js";import"./state-DYefyXr3.js";import"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";r.init();const o=document.body.querySelector("bim-color-input");o.addEventListener("input",()=>{const{color:t}=o;console.log(t)});
diff --git a/examples/assets/component.js b/examples/assets/component.js
index 65c88006..9c2e8910 100644
--- a/examples/assets/component.js
+++ b/examples/assets/component.js
@@ -1,4 +1,4 @@
-import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as c,C as t}from"./index-CcrzIsUO.js";import"./state-DYefyXr3.js";import{x as n}from"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";c.init();const b=t.create(()=>n`
+import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as c,C as t}from"./index-DyXslpcX.js";import"./state-DYefyXr3.js";import{x as n}from"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";c.init();const b=t.create(()=>n`
diff --git a/examples/assets/contextMenu.js b/examples/assets/contextMenu.js
index 205a3c47..78f5a488 100644
--- a/examples/assets/contextMenu.js
+++ b/examples/assets/contextMenu.js
@@ -1 +1 @@
-import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as i}from"./index-CcrzIsUO.js";import"./state-DYefyXr3.js";import"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";i.init();
+import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as i}from"./index-DyXslpcX.js";import"./state-DYefyXr3.js";import"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";i.init();
diff --git a/examples/assets/dataTransform.js b/examples/assets/dataTransform.js
index 730949b4..c7f84290 100644
--- a/examples/assets/dataTransform.js
+++ b/examples/assets/dataTransform.js
@@ -1,4 +1,4 @@
-import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as s,C as m,a as f,T as b}from"./index-CcrzIsUO.js";import"./state-DYefyXr3.js";import{x as t}from"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";s.init();const d=[{data:{Class:"IfcWall",PredefinedType:"EXTERNAL",Name:"Exterior Wall",Description:"Main structural exterior wall",LoadBearing:!0,Area:45.5}},{data:{Class:"IfcDoor",PredefinedType:"SINGLE_SWING_RIGHT",Name:"Entrance Door",Description:"Main entrance door",LoadBearing:!1,Area:2.1}},{data:{Class:"IfcWindow",PredefinedType:"STANDARD",Name:"Office Window",Description:"Double-pane office window",LoadBearing:!1,Area:3.6}},{data:{Class:"IfcColumn",PredefinedType:"ROUND",Name:"Support Column",Description:"Load-bearing column in lobby",LoadBearing:!0,Area:1.2}},{data:{Class:"IfcSlab",PredefinedType:"FLOOR",Name:"Main Floor Slab",Description:"Primary floor slab for ground level",LoadBearing:!0,Area:150}}],o=document.createElement("bim-table");o.data=d;const r=document.createElement("bim-table");r.data=d;r.dataTransform.Area=e=>`${e} m²`;r.dataTransform.LoadBearing=(e,a)=>t`
+import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as s,C as m,a as f,T as b}from"./index-DyXslpcX.js";import"./state-DYefyXr3.js";import{x as t}from"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";s.init();const d=[{data:{Class:"IfcWall",PredefinedType:"EXTERNAL",Name:"Exterior Wall",Description:"Main structural exterior wall",LoadBearing:!0,Area:45.5}},{data:{Class:"IfcDoor",PredefinedType:"SINGLE_SWING_RIGHT",Name:"Entrance Door",Description:"Main entrance door",LoadBearing:!1,Area:2.1}},{data:{Class:"IfcWindow",PredefinedType:"STANDARD",Name:"Office Window",Description:"Double-pane office window",LoadBearing:!1,Area:3.6}},{data:{Class:"IfcColumn",PredefinedType:"ROUND",Name:"Support Column",Description:"Load-bearing column in lobby",LoadBearing:!0,Area:1.2}},{data:{Class:"IfcSlab",PredefinedType:"FLOOR",Name:"Main Floor Slab",Description:"Primary floor slab for ground level",LoadBearing:!0,Area:150}}],o=document.createElement("bim-table");o.data=d;const r=document.createElement("bim-table");r.data=d;r.dataTransform.Area=e=>`${e} m²`;r.dataTransform.LoadBearing=(e,a)=>t`
{const n=l.target;n instanceof f&&(a.LoadBearing=n.checked,window.alert(`${a.Name} changed to LoadBearing = ${n.checked}`),o.requestUpdate())}} .checked=${e}>
`;r.dataTransform.Class=e=>{const a="padding: 0.125rem 0.375rem; border-radius: 999px";return e==="IfcDoor"||e==="IfcSlab"?t`
diff --git a/examples/assets/dropdown.js b/examples/assets/dropdown.js
index 627fbe9b..d7127339 100644
--- a/examples/assets/dropdown.js
+++ b/examples/assets/dropdown.js
@@ -1 +1 @@
-import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as d}from"./index-CcrzIsUO.js";import"./state-DYefyXr3.js";import"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";d.init();const t=document.getElementById("my-dropdown-1");t.addEventListener("change",()=>{const e=t.value;alert(`You've selected: ${e.join(", ")}.`)});const n=document.getElementById("my-dropdown-2");for(let e=0;e<300;e++){const o=document.createElement("bim-option");o.label=`Option ${e}`,o.value=e,n.append(o)}n.value=[100];
+import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as d}from"./index-DyXslpcX.js";import"./state-DYefyXr3.js";import"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";d.init();const t=document.getElementById("my-dropdown-1");t.addEventListener("change",()=>{const e=t.value;alert(`You've selected: ${e.join(", ")}.`)});const n=document.getElementById("my-dropdown-2");for(let e=0;e<300;e++){const o=document.createElement("bim-option");o.label=`Option ${e}`,o.value=e,n.append(o)}n.value=[100];
diff --git a/examples/assets/elementProperties.js b/examples/assets/elementProperties.js
index ef6734a4..80d36702 100644
--- a/examples/assets/elementProperties.js
+++ b/examples/assets/elementProperties.js
@@ -1,4 +1,4 @@
-import"./modulepreload-polyfill-B5Qt9EMX.js";import{T as w,C as x,W as y,S as v,a as h,b as C,G as S,I as T,p as I,u as E,l as P,m as A}from"./index-N2x2mgv3.js";import{t as L}from"./index-BazQpUSZ.js";import"./lit-html-paDGiEfB.js";w.init();const s=document.createElement("bim-viewport"),e=new x,$=e.get(y),n=$.create(),c=new v(e);c.setup();n.scene=c;const d=new h(e,s);n.renderer=d;const i=new C(e);n.camera=i;i.controls.setLookAt(10,5.5,5,-4,-1,-6.5);s.addEventListener("resize",()=>{d.resize(),i.updateAspect()});e.init();const k=e.get(S);k.create(n);const m=e.get(T);await m.setup();const z=await fetch("https://thatopen.github.io/engine_ui-components/resources/small.ifc"),G=await z.arrayBuffer(),M=new Uint8Array(G),u=await m.load(M);n.scene.three.add(u);const R=e.get(I);await R.process(u);const[t,b]=L.elementProperties({components:e,fragmentIdMap:{}});t.preserveStructureOnFilter=!0;t.indentationInText=!1;const p=e.get(E);p.setup({world:n});p.events.select.onHighlight.add(o=>{b({fragmentIdMap:o})});p.events.select.onClear.add(()=>b({fragmentIdMap:{}}));const V=P.create(()=>{const o=r=>{const a=r.target;t.queryString=a.value!==""?a.value:null},g=r=>{const a=r.target;t.expanded=!t.expanded,a.label=t.expanded?"Collapse":"Expand"},f=async()=>{await navigator.clipboard.writeText(t.tsv)};return A`
+import"./modulepreload-polyfill-B5Qt9EMX.js";import{T as w,C as x,W as y,S as v,a as h,b as C,G as S,I as T,p as I,u as E,l as P,m as A}from"./index-D2hR2zBN.js";import{t as L}from"./index-CCTT9UP1.js";import"./lit-html-paDGiEfB.js";w.init();const s=document.createElement("bim-viewport"),e=new x,$=e.get(y),n=$.create(),c=new v(e);c.setup();n.scene=c;const d=new h(e,s);n.renderer=d;const i=new C(e);n.camera=i;i.controls.setLookAt(10,5.5,5,-4,-1,-6.5);s.addEventListener("resize",()=>{d.resize(),i.updateAspect()});e.init();const k=e.get(S);k.create(n);const m=e.get(T);await m.setup();const z=await fetch("https://thatopen.github.io/engine_ui-components/resources/small.ifc"),G=await z.arrayBuffer(),M=new Uint8Array(G),u=await m.load(M);n.scene.three.add(u);const R=e.get(I);await R.process(u);const[t,b]=L.elementProperties({components:e,fragmentIdMap:{}});t.preserveStructureOnFilter=!0;t.indentationInText=!1;const p=e.get(E);p.setup({world:n});p.events.select.onHighlight.add(o=>{b({fragmentIdMap:o})});p.events.select.onClear.add(()=>b({fragmentIdMap:{}}));const V=P.create(()=>{const o=r=>{const a=r.target;t.queryString=a.value!==""?a.value:null},g=r=>{const a=r.target;t.expanded=!t.expanded,a.label=t.expanded?"Collapse":"Expand"},f=async()=>{await navigator.clipboard.writeText(t.tsv)};return A`
diff --git a/examples/assets/entityAttributes.js b/examples/assets/entityAttributes.js
index b280bfd9..e1a9dbc1 100644
--- a/examples/assets/entityAttributes.js
+++ b/examples/assets/entityAttributes.js
@@ -1,4 +1,4 @@
-import"./modulepreload-polyfill-B5Qt9EMX.js";import{T as v,C as T,W as k,S as A,a as P,b as $,G as E,I as L,p as W,u as N,l as R,m as p,$ as b,x as H,E as M}from"./index-N2x2mgv3.js";import{t as O}from"./index-BazQpUSZ.js";import"./lit-html-paDGiEfB.js";v.init();const o=new T,V=o.get(k),a=V.create(),S=new A(o);S.setup();a.scene=S;const d=document.createElement("bim-viewport"),w=new P(o,d);a.renderer=w;const m=new $(o);a.camera=m;m.controls.setLookAt(10,5.5,5,-4,-1,-6.5);d.addEventListener("resize",()=>{w.resize(),m.updateAspect()});o.init();const B=o.get(E);B.create(a);const C=o.get(L);await C.setup();const D=await fetch("https://thatopen.github.io/engine_ui-components/resources/small.ifc"),F=await D.arrayBuffer(),G=new Uint8Array(F),x=await C.load(G);a.scene.three.add(x);const J=o.get(W);await J.process(x);const l={padding:"0.25rem",borderRadius:"0.25rem"},z={Entity:t=>{let e={};return t===H[M]&&(e={...l,backgroundColor:"purple",color:"white"}),String(t).includes("IFCWALL")&&(e={...l,backgroundColor:"green",color:"white"}),p`${t}`},PredefinedType:t=>{const e=["#1c8d83","#3c1c8d","#386c19","#837c24"],c=Math.floor(Math.random()*e.length),g=e[c],f={...l,backgroundColor:g,color:"white"};return p`${t}`},NominalValue:t=>{let e={};return typeof t=="boolean"&&t===!1&&(e={...l,backgroundColor:"#b13535",color:"white"}),typeof t=="boolean"&&t===!0&&(e={...l,backgroundColor:"#18882c",color:"white"}),p`${t}`}},[n,u]=O.entityAttributes({components:o,fragmentIdMap:{},tableDefinition:z,attributesToInclude:()=>["Name","ContainedInStructure","HasProperties","HasPropertySets",e=>e.includes("Value"),e=>e.startsWith("Material"),e=>e.startsWith("Relating"),e=>{const c=["IsGroupedBy","IsDecomposedBy"];return e.startsWith("Is")&&!c.includes(e)}]});n.expanded=!0;n.indentationInText=!0;n.preserveStructureOnFilter=!0;const h=o.get(N);h.setup({world:a});h.events.select.onHighlight.add(t=>{u({fragmentIdMap:t})});h.events.select.onClear.add(()=>u({fragmentIdMap:{}}));const j=R.create(()=>p`
+import"./modulepreload-polyfill-B5Qt9EMX.js";import{T as v,C as T,W as k,S as A,a as P,b as $,G as E,I as L,p as W,u as N,l as R,m as p,$ as b,x as H,E as M}from"./index-D2hR2zBN.js";import{t as O}from"./index-CCTT9UP1.js";import"./lit-html-paDGiEfB.js";v.init();const o=new T,V=o.get(k),a=V.create(),S=new A(o);S.setup();a.scene=S;const d=document.createElement("bim-viewport"),w=new P(o,d);a.renderer=w;const m=new $(o);a.camera=m;m.controls.setLookAt(10,5.5,5,-4,-1,-6.5);d.addEventListener("resize",()=>{w.resize(),m.updateAspect()});o.init();const B=o.get(E);B.create(a);const C=o.get(L);await C.setup();const D=await fetch("https://thatopen.github.io/engine_ui-components/resources/small.ifc"),F=await D.arrayBuffer(),G=new Uint8Array(F),x=await C.load(G);a.scene.three.add(x);const J=o.get(W);await J.process(x);const l={padding:"0.25rem",borderRadius:"0.25rem"},z={Entity:t=>{let e={};return t===H[M]&&(e={...l,backgroundColor:"purple",color:"white"}),String(t).includes("IFCWALL")&&(e={...l,backgroundColor:"green",color:"white"}),p`${t}`},PredefinedType:t=>{const e=["#1c8d83","#3c1c8d","#386c19","#837c24"],c=Math.floor(Math.random()*e.length),g=e[c],f={...l,backgroundColor:g,color:"white"};return p`${t}`},NominalValue:t=>{let e={};return typeof t=="boolean"&&t===!1&&(e={...l,backgroundColor:"#b13535",color:"white"}),typeof t=="boolean"&&t===!0&&(e={...l,backgroundColor:"#18882c",color:"white"}),p`${t}`}},[n,u]=O.entityAttributes({components:o,fragmentIdMap:{},tableDefinition:z,attributesToInclude:()=>["Name","ContainedInStructure","HasProperties","HasPropertySets",e=>e.includes("Value"),e=>e.startsWith("Material"),e=>e.startsWith("Relating"),e=>{const c=["IsGroupedBy","IsDecomposedBy"];return e.startsWith("Is")&&!c.includes(e)}]});n.expanded=!0;n.indentationInText=!0;n.preserveStructureOnFilter=!0;const h=o.get(N);h.setup({world:a});h.events.select.onHighlight.add(t=>{u({fragmentIdMap:t})});h.events.select.onClear.add(()=>u({fragmentIdMap:{}}));const j=R.create(()=>p`
diff --git a/examples/assets/exportingData.js b/examples/assets/exportingData.js
index fca44408..5b0b08db 100644
--- a/examples/assets/exportingData.js
+++ b/examples/assets/exportingData.js
@@ -1,4 +1,4 @@
-import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as c,C as n,T as d,a as s}from"./index-CcrzIsUO.js";import"./state-DYefyXr3.js";import{x as a}from"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";c.init();const o=document.createElement("bim-table");o.expanded=!0;o.data=[{data:{Class:"IfcWall",PredefinedType:"EXTERNAL",Name:"Exterior Wall",Description:"Main structural exterior wall",LoadBearing:!0,Area:45.5},children:[{data:{Class:"IfcWindow",PredefinedType:"STANDARD",Name:"Office Window",Description:"Double-pane office window",LoadBearing:!1,Area:3.6}}]},{data:{Class:"IfcDoor",PredefinedType:"SINGLE_SWING_RIGHT",Name:"Entrance Door",Description:"Main entrance door",LoadBearing:!1,Area:2.1}},{data:{Class:"IfcColumn",PredefinedType:"ROUND",Name:"Support Column",Description:"Load-bearing column in lobby",LoadBearing:!0,Area:1.2}},{data:{Class:"IfcSlab",PredefinedType:"FLOOR",Name:"Main Floor Slab",Description:"Primary floor slab for ground level",LoadBearing:!0,Area:150}}];const p=n.create(()=>a`
+import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as c,C as n,T as d,a as s}from"./index-DyXslpcX.js";import"./state-DYefyXr3.js";import{x as a}from"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";c.init();const o=document.createElement("bim-table");o.expanded=!0;o.data=[{data:{Class:"IfcWall",PredefinedType:"EXTERNAL",Name:"Exterior Wall",Description:"Main structural exterior wall",LoadBearing:!0,Area:45.5},children:[{data:{Class:"IfcWindow",PredefinedType:"STANDARD",Name:"Office Window",Description:"Double-pane office window",LoadBearing:!1,Area:3.6}}]},{data:{Class:"IfcDoor",PredefinedType:"SINGLE_SWING_RIGHT",Name:"Entrance Door",Description:"Main entrance door",LoadBearing:!1,Area:2.1}},{data:{Class:"IfcColumn",PredefinedType:"ROUND",Name:"Support Column",Description:"Load-bearing column in lobby",LoadBearing:!0,Area:1.2}},{data:{Class:"IfcSlab",PredefinedType:"FLOOR",Name:"Main Floor Slab",Description:"Primary floor slab for ground level",LoadBearing:!0,Area:150}}];const p=n.create(()=>a`
{const t=e.target;t instanceof d&&(o.queryString=t.value)}} placeholder="Search...">
`),l=n.create(()=>a`
diff --git a/examples/assets/grid.js b/examples/assets/grid.js
index 2e133b30..34369981 100644
--- a/examples/assets/grid.js
+++ b/examples/assets/grid.js
@@ -1,4 +1,4 @@
-import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as p,C as s}from"./index-CcrzIsUO.js";import"./state-DYefyXr3.js";import{T as g,x as b}from"./lit-html-paDGiEfB.js";import{a as h,i as D,t as T,n as y}from"./ref-CInB0H-f.js";/**
+import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as p,C as s}from"./index-DyXslpcX.js";import"./state-DYefyXr3.js";import{T as g,x as b}from"./lit-html-paDGiEfB.js";import{a as h,i as D,t as T,n as y}from"./ref-CInB0H-f.js";/**
* @license
* Copyright 2018 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
diff --git a/examples/assets/index-BazQpUSZ.js b/examples/assets/index-CCTT9UP1.js
similarity index 99%
rename from examples/assets/index-BazQpUSZ.js
rename to examples/assets/index-CCTT9UP1.js
index 445a87e7..f5f7a8e0 100644
--- a/examples/assets/index-BazQpUSZ.js
+++ b/examples/assets/index-CCTT9UP1.js
@@ -1,4 +1,4 @@
-import{F as M,m as C,a0 as _,H as te,s as be,l as v,p as $,x as Y,t as he,N as ne,Y as oe,X as ie,_ as ye,E as se,J as re,R as Ce,K as Ie,Q as we,U as Ne,Z as xe,u as Te,y as Ae,W as ae,P as z,v as j,i as R,w as Re,D as Ee,A as $e,k as U,G as Se,$ as q,q as ce,T as le,r as ue}from"./index-N2x2mgv3.js";import"./lit-html-paDGiEfB.js";const De=n=>{const{components:i,actions:t,tags:l}=n,a=(t==null?void 0:t.dispose)??!0,c=(t==null?void 0:t.download)??!0,s=(t==null?void 0:t.visibility)??!0,d=(l==null?void 0:l.schema)??!0,r=(l==null?void 0:l.viewDefinition)??!0,o=i.get(M),p=({detail:f})=>{const{cell:e}=f;e.style.padding="0.25rem 0"};return C`
+import{F as M,m as C,a0 as _,H as te,s as be,l as v,p as $,x as Y,t as he,N as ne,Y as oe,X as ie,_ as ye,E as se,J as re,R as Ce,K as Ie,Q as we,U as Ne,Z as xe,u as Te,y as Ae,W as ae,P as z,v as j,i as R,w as Re,D as Ee,A as $e,k as U,G as Se,$ as q,q as ce,T as le,r as ue}from"./index-D2hR2zBN.js";import"./lit-html-paDGiEfB.js";const De=n=>{const{components:i,actions:t,tags:l}=n,a=(t==null?void 0:t.dispose)??!0,c=(t==null?void 0:t.download)??!0,s=(t==null?void 0:t.visibility)??!0,d=(l==null?void 0:l.schema)??!0,r=(l==null?void 0:l.viewDefinition)??!0,o=i.get(M),p=({detail:f})=>{const{cell:e}=f;e.style.padding="0.25rem 0"};return C`
{if(!f)return;const e=f;e.hiddenColumns=["modelID"];const m=[];for(const[,h]of o.groups){if(!h)continue;const N={data:{Name:h.name||h.uuid,modelID:h.uuid}};m.push(N)}e.dataTransform={Name:(h,N)=>{const{modelID:w}=N;if(typeof w!="string")return h;const x=o.groups.get(w);if(!x)return w;const g={};for(const S of x.items)g[S.id]=S.ids;let b;const{schema:y}=x.ifcMetadata;d&&y&&(b=C`
${y}
`);let I;if(r&&"viewDefinition"in x.ifcMetadata){const S=x.ifcMetadata.viewDefinition;I=C`
diff --git a/examples/assets/index-DAXFTtA6.js b/examples/assets/index-Cc7BUWEv.js
similarity index 90%
rename from examples/assets/index-DAXFTtA6.js
rename to examples/assets/index-Cc7BUWEv.js
index 28b55643..70c9dc13 100644
--- a/examples/assets/index-DAXFTtA6.js
+++ b/examples/assets/index-Cc7BUWEv.js
@@ -1,4 +1,4 @@
-import{I as r,m as f,l as s}from"./index-N2x2mgv3.js";const m=t=>{const{components:n}=t,c=n.get(r);return f`
+import{I as r,m as f,l as s}from"./index-D2hR2zBN.js";const m=t=>{const{components:n}=t,c=n.get(r);return f`
t in e?Eue(e,t,{enumerable:!0,configu
.caret svg {
fill: var(--bim-ui_bg-contrast-60);
}
- `;let Ble=Ule;tfe([un({type:Boolean,attribute:"children-hidden",reflect:!0})],Ble.prototype,"childrenHidden");var nfe=Object.defineProperty,JF=(e,t,n,s)=>{for(var l=void 0,r=e.length-1,a;r>=0;r--)(a=e[r])&&(l=a(t,n,l)||l);return l&&nfe(t,n,l),l};const Hle=class extends fr{constructor(){super(...arguments),this.selected=!1,this.columns=[],this.hiddenColumns=[],this.data={},this.isHeader=!1,this.table=this.closest("bim-table"),this.onTableColumnsChange=()=>{this.table&&(this.columns=this.table.columns)},this.onTableColumnsHidden=()=>{this.table&&(this.hiddenColumns=this.table.hiddenColumns)},this._observer=new IntersectionObserver(t=>{this._intersecting=t[0].isIntersecting},{rootMargin:"36px"})}get _columnNames(){return this.columns.filter(t=>!this.hiddenColumns.includes(t.name)).map(t=>t.name)}get _columnWidths(){return this.columns.filter(t=>!this.hiddenColumns.includes(t.name)).map(t=>t.width)}get _isSelected(){var t;return(t=this.table)==null?void 0:t.selection.has(this.data)}onSelectionChange(t){if(!this.table)return;const n=t.target;this.selected=n.value,n.value?(this.table.selection.add(this.data),this.table.dispatchEvent(new CustomEvent("rowselected",{detail:{data:this.data}}))):(this.table.selection.delete(this.data),this.table.dispatchEvent(new CustomEvent("rowdeselected",{detail:{data:this.data}})))}connectedCallback(){super.connectedCallback(),this._observer.observe(this),this.table&&(this.columns=this.table.columns,this.hiddenColumns=this.table.hiddenColumns,this.table.addEventListener("columnschange",this.onTableColumnsChange),this.table.addEventListener("columnshidden",this.onTableColumnsHidden),this.toggleAttribute("selected",this._isSelected))}disconnectedCallback(){super.disconnectedCallback(),this._observer.unobserve(this),this.table&&(this.columns=[],this.hiddenColumns=[],this.table.removeEventListener("columnschange",this.onTableColumnsChange),this.table.removeEventListener("columnshidden",this.onTableColumnsHidden),this.toggleAttribute("selected",!1))}compute(){if(!this.table)throw new Error("TableRow: parent table wasn't found!");const t=this.table.getRowIndentation(this.data)??0,n=this.isHeader?this.data:this.table.applyDataTransform(this.data)??this.data,s=[];for(const l in n){if(this.hiddenColumns.includes(l))continue;const r=n[l];let a;if(typeof r=="string"||typeof r=="boolean"||typeof r=="number"?(a=document.createElement("bim-label"),a.textContent=String(r)):r instanceof HTMLElement?a=r:(a=document.createDocumentFragment(),CF(r,a)),!a)continue;const c=document.createElement("bim-table-cell");c.append(a),c.column=l,this._columnNames.indexOf(l)===0&&(c.style.marginLeft=`${this.table.noIndentation?0:t+.75}rem`);const h=this._columnNames.indexOf(l);c.setAttribute("data-column-index",String(h)),c.toggleAttribute("data-no-indentation",h===0&&this.table.noIndentation),c.toggleAttribute("data-cell-header",this.isHeader),c.rowData=this.data,this.table.dispatchEvent(new CustomEvent("cellcreated",{detail:{cell:c}})),s.push(c)}return this.style.gridTemplateAreas=`"${this.table.selectableRows?"Selection":""} ${this._columnNames.join(" ")}"`,this.style.gridTemplateColumns=`${this.table.selectableRows?"1.6rem":""} ${this._columnWidths.join(" ")}`,ls`
- ${!this.isHeader&&this.table.selectableRows?ls`{for(var l=void 0,r=e.length-1,a;r>=0;r--)(a=e[r])&&(l=a(t,n,l)||l);return l&&nfe(t,n,l),l};const Hle=class extends fr{constructor(){super(...arguments),this.selected=!1,this.columns=[],this.hiddenColumns=[],this.data={},this.isHeader=!1,this.table=this.closest("bim-table"),this.onTableColumnsChange=()=>{this.table&&(this.columns=this.table.columns)},this.onTableColumnsHidden=()=>{this.table&&(this.hiddenColumns=this.table.hiddenColumns)},this._observer=new IntersectionObserver(t=>{this._intersecting=t[0].isIntersecting},{rootMargin:"36px"})}get _columnNames(){return this.columns.filter(t=>!this.hiddenColumns.includes(t.name)).map(t=>t.name)}get _columnWidths(){return this.columns.filter(t=>!this.hiddenColumns.includes(t.name)).map(t=>t.width)}get _isSelected(){var t;return(t=this.table)==null?void 0:t.selection.has(this.data)}onSelectionChange(t){if(!this.table)return;const n=t.target;this.selected=n.value,n.value?(this.table.selection.add(this.data),this.table.dispatchEvent(new CustomEvent("rowselected",{detail:{data:this.data}}))):(this.table.selection.delete(this.data),this.table.dispatchEvent(new CustomEvent("rowdeselected",{detail:{data:this.data}})))}connectedCallback(){super.connectedCallback(),this._observer.observe(this),this.table&&(this.columns=this.table.columns,this.hiddenColumns=this.table.hiddenColumns,this.table.addEventListener("columnschange",this.onTableColumnsChange),this.table.addEventListener("columnshidden",this.onTableColumnsHidden),this.toggleAttribute("selected",this._isSelected))}disconnectedCallback(){super.disconnectedCallback(),this._observer.unobserve(this),this.table&&(this.columns=[],this.hiddenColumns=[],this.table.removeEventListener("columnschange",this.onTableColumnsChange),this.table.removeEventListener("columnshidden",this.onTableColumnsHidden),this.toggleAttribute("selected",!1))}findAllCheckboxes(t,n=[]){return t&&(t.querySelectorAll("bim-checkbox").forEach(s=>{var l;const r=(l=s.shadowRoot)==null?void 0:l.querySelector('input[type="checkbox"]');r&&n.push(r)}),t.querySelectorAll("*").forEach(s=>{s.shadowRoot&&this.findAllCheckboxes(s.shadowRoot,n)})),n}toggleAll(t){if(!this.table)return;const n=this.findAllCheckboxes(this.table.shadowRoot);n.length!==0&&n.forEach(s=>{s.checked=t,s.dispatchEvent(new Event("change"))})}compute(){if(!this.table)throw new Error("TableRow: parent table wasn't found!");const t=this.table.getRowIndentation(this.data)??0,n=this.isHeader?this.data:this.table.applyDataTransform(this.data)??this.data,s=[];for(const l in n){if(this.hiddenColumns.includes(l))continue;const r=n[l];let a;if(typeof r=="string"||typeof r=="boolean"||typeof r=="number"?(a=document.createElement("bim-label"),a.textContent=String(r)):r instanceof HTMLElement?a=r:(a=document.createDocumentFragment(),CF(r,a)),!a)continue;const c=document.createElement("bim-table-cell");c.append(a),c.column=l,this._columnNames.indexOf(l)===0&&(c.style.marginLeft=`${this.table.noIndentation?0:t+.75}rem`);const h=this._columnNames.indexOf(l);c.setAttribute("data-column-index",String(h)),c.toggleAttribute("data-no-indentation",h===0&&this.table.noIndentation),c.toggleAttribute("data-cell-header",this.isHeader),c.rowData=this.data,this.table.dispatchEvent(new CustomEvent("cellcreated",{detail:{cell:c}})),s.push(c)}return this.style.gridTemplateAreas=`"${this.table.selectableRows?"Selection":""} ${this._columnNames.join(" ")}"`,this.style.gridTemplateColumns=`${this.table.selectableRows?"1.6rem":""} ${this._columnWidths.join(" ")}`,this.table.selectableRows=!0,this.isHeader&&this.toggleAll(!!this._isSelected),ls`
+ ${this.table.selectableRows?ls`this.maxRegenerateRetrys)throw new Error("Grid could not be regenerated");setTimeout(()=>this.regenerate,this._regenerateDelay);return}this._regenerateCounter=0,this._camera.updateMatrix(),this._camera.updateMatrixWorld();const e=this._frustumMat.multiplyMatrices(this._camera.projectionMatrix,this._camera.matrixWorldInverse);this._frustum.setFromProjectionMatrix(e);const{planes:i}=this._frustum,s=i[0].constant*-i[0].normal.x,r=i[1].constant*-i[1].normal.x,o=i[2].constant*-i[2].normal.y,k=i[3].constant*-i[3].normal.y,v=Math.abs(s-r),w=Math.abs(k-o),{clientWidth:Z,clientHeight:I}=this._container,U=Math.max(Z,I),M=Math.max(v,w)/U,q=Math.ceil(Math.log10(v/this.scaleX)),J=Math.ceil(Math.log10(w/this.scaleY)),p=10**(q-2)*this.scaleX,g=10**(J-2)*this.scaleY,d=p*this.gridsFactor,b=g*this.gridsFactor,K=Math.ceil(w/b),B=Math.ceil(v/d),Q=Math.ceil(w/g),tt=Math.ceil(v/p),et=p*Math.ceil(r/p),st=g*Math.ceil(o/g),R=d*Math.ceil(r/d),it=b*Math.ceil(o/b),rt=[...this.numbers.children];for(const a of rt)a.removeFromParent();this.numbers.children=[];const $=[],ot=9*M,u=1e4,F=R+this._offsetX,nt=Math.round(Math.abs(F/this.scaleX)*u)/u,at=(B-1)*d,ct=Math.round(Math.abs((F+at)/this.scaleX)*u)/u,lt=Math.max(nt,ct).toString().length*ot;let S=Math.ceil(lt/d)*d;for(let a=0;a.01)continue;const Y=this.newNumber((n+this._offsetX)/this.scaleX),mt=12*M;Y.position.set(n,o+mt,0)}for(let a=0;a{for(var s=Dt(t,e),r=l.length-1,o;r>=0;r--)(o=l[r])&&(s=o(t,e,s)||s);return s&&Yt(t,e,s),s};const L=class L extends E{constructor(){super(...arguments),this._grid=null,this._world=null,this.resize=()=>{this._world&&this._grid&&this._grid.regenerate()}}set gridColor(t){if(this._gridColor=t,!(t&&this._grid))return;const e=Number(t.replace("#","0x"));Number.isNaN(e)||this._grid.material.color.setHex(e)}get gridColor(){return this._gridColor}set gridScaleX(t){this._gridScaleX=t,t&&this._grid&&(this._grid.scaleX=t)}get gridScaleX(){return this._gridScaleX}set gridScaleY(t){this._gridScaleY=t,t&&this._grid&&(this._grid.scaleY=t)}get gridScaleY(){return this._gridScaleY}get gridOffsetX(){var t;return((t=this._grid)==null?void 0:t.offsetX)||0}set gridOffsetX(t){this._grid&&(this._grid.offsetX=t)}get gridOffsetY(){var t;return((t=this._grid)==null?void 0:t.offsetY)||0}set gridOffsetY(t){this._grid&&(this._grid.offsetY=t)}set components(t){this.dispose();const i=t.get(H).create();this._world=i,i.scene=new V(t),i.scene.setup(),i.renderer=new wt(t,this);const s=new W(t);i.camera=s;const r=new Ot(s.threeOrtho,this);this._grid=r,i.scene.three.add(r.get()),s.controls.addEventListener("update",()=>r.regenerate()),setTimeout(async()=>{i.camera.updateAspect(),s.set("Plan"),await s.controls.setLookAt(0,0,100,0,0,0),await s.projection.set("Orthographic"),s.controls.dollySpeed=3,s.controls.draggingSmoothTime=.085,s.controls.maxZoom=1e3,s.controls.zoom(4)})}get world(){return this._world}dispose(){var t;(t=this.world)==null||t.dispose(),this._world=null,this._grid=null}connectedCallback(){super.connectedCallback(),new ResizeObserver(this.resize).observe(this)}disconnectedCallback(){super.disconnectedCallback(),this.dispose()}render(){return P``}};L.styles=T`
+import{c as pt,V as gt,d as z,M as C,e as j,f as bt,L as _t,B as A,g as xt,h as vt,W as H,S as V,j as wt,O as W,i as yt,G as Ct,k as kt,T as D}from"./index-D2hR2zBN.js";import{r as E,i as T,n as c,a as Mt}from"./state-DYefyXr3.js";import{x as P}from"./lit-html-paDGiEfB.js";import{e as $t,n as St}from"./ref-CInB0H-f.js";class Xt extends pt{constructor(t=document.createElement("div")){super(),this.isCSS2DObject=!0,this.element=t,this.element.style.position="absolute",this.element.style.userSelect="none",this.element.setAttribute("draggable",!1),this.center=new gt(.5,.5),this.addEventListener("removed",function(){this.traverse(function(e){e.element instanceof Element&&e.element.parentNode!==null&&e.element.parentNode.removeChild(e.element)})})}copy(t,e){return super.copy(t,e),this.element=t.element.cloneNode(!0),this.center=t.center,this}}new z;new C;new C;new z;new z;class Ot{constructor(t,e){this._group=new j,this._frustum=new bt,this._frustumMat=new C,this._regenerateDelay=200,this._regenerateCounter=0,this.material=new _t({color:"#2e3338"}),this.numbers=new j,this.maxRegenerateRetrys=4,this.gridsFactor=5,this._scaleX=1,this._scaleY=1,this._offsetX=0,this._offsetY=0,this._camera=t,this._container=e;const i=this.newGrid(-1),s=this.newGrid(-2);this.grids={main:i,secondary:s},this._group.add(s,i,this.numbers)}set scaleX(t){this._scaleX=t,this.regenerate()}get scaleX(){return this._scaleX}set scaleY(t){this._scaleY=t,this.regenerate()}get scaleY(){return this._scaleY}set offsetX(t){this._offsetX=t,this.regenerate()}get offsetX(){return this._offsetX}set offsetY(t){this._offsetY=t,this.regenerate()}get offsetY(){return this._offsetY}get(){return this._group}dispose(){const{main:t,secondary:e}=this.grids;t.removeFromParent(),e.removeFromParent(),t.geometry.dispose(),t.material.dispose(),e.geometry.dispose(),e.material.dispose()}regenerate(){if(!this.isGridReady()){if(this._regenerateCounter++,this._regenerateCounter>this.maxRegenerateRetrys)throw new Error("Grid could not be regenerated");setTimeout(()=>this.regenerate,this._regenerateDelay);return}this._regenerateCounter=0,this._camera.updateMatrix(),this._camera.updateMatrixWorld();const e=this._frustumMat.multiplyMatrices(this._camera.projectionMatrix,this._camera.matrixWorldInverse);this._frustum.setFromProjectionMatrix(e);const{planes:i}=this._frustum,s=i[0].constant*-i[0].normal.x,r=i[1].constant*-i[1].normal.x,o=i[2].constant*-i[2].normal.y,k=i[3].constant*-i[3].normal.y,v=Math.abs(s-r),w=Math.abs(k-o),{clientWidth:Z,clientHeight:I}=this._container,U=Math.max(Z,I),M=Math.max(v,w)/U,q=Math.ceil(Math.log10(v/this.scaleX)),J=Math.ceil(Math.log10(w/this.scaleY)),p=10**(q-2)*this.scaleX,g=10**(J-2)*this.scaleY,d=p*this.gridsFactor,b=g*this.gridsFactor,K=Math.ceil(w/b),B=Math.ceil(v/d),Q=Math.ceil(w/g),tt=Math.ceil(v/p),et=p*Math.ceil(r/p),st=g*Math.ceil(o/g),R=d*Math.ceil(r/d),it=b*Math.ceil(o/b),rt=[...this.numbers.children];for(const a of rt)a.removeFromParent();this.numbers.children=[];const $=[],ot=9*M,u=1e4,F=R+this._offsetX,nt=Math.round(Math.abs(F/this.scaleX)*u)/u,at=(B-1)*d,ct=Math.round(Math.abs((F+at)/this.scaleX)*u)/u,lt=Math.max(nt,ct).toString().length*ot;let S=Math.ceil(lt/d)*d;for(let a=0;a.01)continue;const Y=this.newNumber((n+this._offsetX)/this.scaleX),mt=12*M;Y.position.set(n,o+mt,0)}for(let a=0;a{for(var s=Dt(t,e),r=l.length-1,o;r>=0;r--)(o=l[r])&&(s=o(t,e,s)||s);return s&&Yt(t,e,s),s};const L=class L extends E{constructor(){super(...arguments),this._grid=null,this._world=null,this.resize=()=>{this._world&&this._grid&&this._grid.regenerate()}}set gridColor(t){if(this._gridColor=t,!(t&&this._grid))return;const e=Number(t.replace("#","0x"));Number.isNaN(e)||this._grid.material.color.setHex(e)}get gridColor(){return this._gridColor}set gridScaleX(t){this._gridScaleX=t,t&&this._grid&&(this._grid.scaleX=t)}get gridScaleX(){return this._gridScaleX}set gridScaleY(t){this._gridScaleY=t,t&&this._grid&&(this._grid.scaleY=t)}get gridScaleY(){return this._gridScaleY}get gridOffsetX(){var t;return((t=this._grid)==null?void 0:t.offsetX)||0}set gridOffsetX(t){this._grid&&(this._grid.offsetX=t)}get gridOffsetY(){var t;return((t=this._grid)==null?void 0:t.offsetY)||0}set gridOffsetY(t){this._grid&&(this._grid.offsetY=t)}set components(t){this.dispose();const i=t.get(H).create();this._world=i,i.scene=new V(t),i.scene.setup(),i.renderer=new wt(t,this);const s=new W(t);i.camera=s;const r=new Ot(s.threeOrtho,this);this._grid=r,i.scene.three.add(r.get()),s.controls.addEventListener("update",()=>r.regenerate()),setTimeout(async()=>{i.camera.updateAspect(),s.set("Plan"),await s.controls.setLookAt(0,0,100,0,0,0),await s.projection.set("Orthographic"),s.controls.dollySpeed=3,s.controls.draggingSmoothTime=.085,s.controls.maxZoom=1e3,s.controls.zoom(4)})}get world(){return this._world}dispose(){var t;(t=this.world)==null||t.dispose(),this._world=null,this._grid=null}connectedCallback(){super.connectedCallback(),new ResizeObserver(this.resize).observe(this)}disconnectedCallback(){super.disconnectedCallback(),this.dispose()}render(){return P``}};L.styles=T`
:host {
position: relative;
display: flex;
diff --git a/examples/assets/index-CcrzIsUO.js b/examples/assets/index-DyXslpcX.js
similarity index 98%
rename from examples/assets/index-CcrzIsUO.js
rename to examples/assets/index-DyXslpcX.js
index 14bf7282..e7129a8d 100644
--- a/examples/assets/index-CcrzIsUO.js
+++ b/examples/assets/index-DyXslpcX.js
@@ -1302,8 +1302,8 @@ var qn=Object.defineProperty;var Wn=(i,t,e)=>t in i?qn(i,t,{enumerable:!0,config
.caret svg {
fill: var(--bim-ui_bg-contrast-60);
}
- `;let me=mi;no([u({type:Boolean,attribute:"children-hidden",reflect:!0})],me.prototype,"childrenHidden");var so=Object.defineProperty,jt=(i,t,e,s)=>{for(var n=void 0,r=i.length-1,o;r>=0;r--)(o=i[r])&&(n=o(t,e,n)||n);return n&&so(t,e,n),n};const bi=class bi extends ${constructor(){super(...arguments),this.selected=!1,this.columns=[],this.hiddenColumns=[],this.data={},this.isHeader=!1,this.table=this.closest("bim-table"),this.onTableColumnsChange=()=>{this.table&&(this.columns=this.table.columns)},this.onTableColumnsHidden=()=>{this.table&&(this.hiddenColumns=this.table.hiddenColumns)},this._observer=new IntersectionObserver(t=>{this._intersecting=t[0].isIntersecting},{rootMargin:"36px"})}get _columnNames(){return this.columns.filter(s=>!this.hiddenColumns.includes(s.name)).map(s=>s.name)}get _columnWidths(){return this.columns.filter(s=>!this.hiddenColumns.includes(s.name)).map(s=>s.width)}get _isSelected(){var t;return(t=this.table)==null?void 0:t.selection.has(this.data)}onSelectionChange(t){if(!this.table)return;const e=t.target;this.selected=e.value,e.value?(this.table.selection.add(this.data),this.table.dispatchEvent(new CustomEvent("rowselected",{detail:{data:this.data}}))):(this.table.selection.delete(this.data),this.table.dispatchEvent(new CustomEvent("rowdeselected",{detail:{data:this.data}})))}connectedCallback(){super.connectedCallback(),this._observer.observe(this),this.table&&(this.columns=this.table.columns,this.hiddenColumns=this.table.hiddenColumns,this.table.addEventListener("columnschange",this.onTableColumnsChange),this.table.addEventListener("columnshidden",this.onTableColumnsHidden),this.toggleAttribute("selected",this._isSelected))}disconnectedCallback(){super.disconnectedCallback(),this._observer.unobserve(this),this.table&&(this.columns=[],this.hiddenColumns=[],this.table.removeEventListener("columnschange",this.onTableColumnsChange),this.table.removeEventListener("columnshidden",this.onTableColumnsHidden),this.toggleAttribute("selected",!1))}compute(){if(!this.table)throw new Error("TableRow: parent table wasn't found!");const t=this.table.getRowIndentation(this.data)??0,e=this.isHeader?this.data:this.table.applyDataTransform(this.data)??this.data,s=[];for(const n in e){if(this.hiddenColumns.includes(n))continue;const r=e[n];let o;if(typeof r=="string"||typeof r=="boolean"||typeof r=="number"?(o=document.createElement("bim-label"),o.textContent=String(r)):r instanceof HTMLElement?o=r:(o=document.createDocumentFragment(),Ht(r,o)),!o)continue;const l=document.createElement("bim-table-cell");l.append(o),l.column=n,this._columnNames.indexOf(n)===0&&(l.style.marginLeft=`${this.table.noIndentation?0:t+.75}rem`);const a=this._columnNames.indexOf(n);l.setAttribute("data-column-index",String(a)),l.toggleAttribute("data-no-indentation",a===0&&this.table.noIndentation),l.toggleAttribute("data-cell-header",this.isHeader),l.rowData=this.data,this.table.dispatchEvent(new CustomEvent("cellcreated",{detail:{cell:l}})),s.push(l)}return this.style.gridTemplateAreas=`"${this.table.selectableRows?"Selection":""} ${this._columnNames.join(" ")}"`,this.style.gridTemplateColumns=`${this.table.selectableRows?"1.6rem":""} ${this._columnWidths.join(" ")}`,p`
- ${!this.isHeader&&this.table.selectableRows?p`{for(var n=void 0,r=i.length-1,o;r>=0;r--)(o=i[r])&&(n=o(t,e,n)||n);return n&&so(t,e,n),n};const bi=class bi extends ${constructor(){super(...arguments),this.selected=!1,this.columns=[],this.hiddenColumns=[],this.data={},this.isHeader=!1,this.table=this.closest("bim-table"),this.onTableColumnsChange=()=>{this.table&&(this.columns=this.table.columns)},this.onTableColumnsHidden=()=>{this.table&&(this.hiddenColumns=this.table.hiddenColumns)},this._observer=new IntersectionObserver(t=>{this._intersecting=t[0].isIntersecting},{rootMargin:"36px"})}get _columnNames(){return this.columns.filter(s=>!this.hiddenColumns.includes(s.name)).map(s=>s.name)}get _columnWidths(){return this.columns.filter(s=>!this.hiddenColumns.includes(s.name)).map(s=>s.width)}get _isSelected(){var t;return(t=this.table)==null?void 0:t.selection.has(this.data)}onSelectionChange(t){if(!this.table)return;const e=t.target;this.selected=e.value,e.value?(this.table.selection.add(this.data),this.table.dispatchEvent(new CustomEvent("rowselected",{detail:{data:this.data}}))):(this.table.selection.delete(this.data),this.table.dispatchEvent(new CustomEvent("rowdeselected",{detail:{data:this.data}})))}connectedCallback(){super.connectedCallback(),this._observer.observe(this),this.table&&(this.columns=this.table.columns,this.hiddenColumns=this.table.hiddenColumns,this.table.addEventListener("columnschange",this.onTableColumnsChange),this.table.addEventListener("columnshidden",this.onTableColumnsHidden),this.toggleAttribute("selected",this._isSelected))}disconnectedCallback(){super.disconnectedCallback(),this._observer.unobserve(this),this.table&&(this.columns=[],this.hiddenColumns=[],this.table.removeEventListener("columnschange",this.onTableColumnsChange),this.table.removeEventListener("columnshidden",this.onTableColumnsHidden),this.toggleAttribute("selected",!1))}findAllCheckboxes(t,e=[]){return t&&(t.querySelectorAll("bim-checkbox").forEach(n=>{var o;const r=(o=n.shadowRoot)==null?void 0:o.querySelector('input[type="checkbox"]');r&&e.push(r)}),t.querySelectorAll("*").forEach(n=>{n.shadowRoot&&this.findAllCheckboxes(n.shadowRoot,e)})),e}toggleAll(t){if(!this.table)return;const e=this.findAllCheckboxes(this.table.shadowRoot);e.length!==0&&e.forEach(s=>{s.checked=t,s.dispatchEvent(new Event("change"))})}compute(){if(!this.table)throw new Error("TableRow: parent table wasn't found!");const t=this.table.getRowIndentation(this.data)??0,e=this.isHeader?this.data:this.table.applyDataTransform(this.data)??this.data,s=[];for(const n in e){if(this.hiddenColumns.includes(n))continue;const r=e[n];let o;if(typeof r=="string"||typeof r=="boolean"||typeof r=="number"?(o=document.createElement("bim-label"),o.textContent=String(r)):r instanceof HTMLElement?o=r:(o=document.createDocumentFragment(),Ht(r,o)),!o)continue;const l=document.createElement("bim-table-cell");l.append(o),l.column=n,this._columnNames.indexOf(n)===0&&(l.style.marginLeft=`${this.table.noIndentation?0:t+.75}rem`);const a=this._columnNames.indexOf(n);l.setAttribute("data-column-index",String(a)),l.toggleAttribute("data-no-indentation",a===0&&this.table.noIndentation),l.toggleAttribute("data-cell-header",this.isHeader),l.rowData=this.data,this.table.dispatchEvent(new CustomEvent("cellcreated",{detail:{cell:l}})),s.push(l)}return this.style.gridTemplateAreas=`"${this.table.selectableRows?"Selection":""} ${this._columnNames.join(" ")}"`,this.style.gridTemplateColumns=`${this.table.selectableRows?"1.6rem":""} ${this._columnWidths.join(" ")}`,this.table.selectableRows=!0,this.isHeader&&this.toggleAll(!!this._isSelected),p`
+ ${this.table.selectableRows?p`a`
+import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as n,C as e}from"./index-DyXslpcX.js";import"./state-DYefyXr3.js";import{x as a}from"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";n.init();const t=document.createElement("bim-table"),r=e.create(()=>a`
diff --git a/examples/assets/modelsList.js b/examples/assets/modelsList.js
index 6391cacc..7ade02ac 100644
--- a/examples/assets/modelsList.js
+++ b/examples/assets/modelsList.js
@@ -1,4 +1,4 @@
-import"./modulepreload-polyfill-B5Qt9EMX.js";import{T as m,C as c,W as l,S as d,a as p,b,G as f,I as g,F as w,l as u,m as L}from"./index-N2x2mgv3.js";import{b as C}from"./index-DAXFTtA6.js";import{t as v}from"./index-BazQpUSZ.js";import"./lit-html-paDGiEfB.js";m.init();const e=new c,I=e.get(l),n=I.create(),s=new d(e);s.setup();n.scene=s;const a=document.createElement("bim-viewport"),r=new p(e,a);n.renderer=r;const i=new b(e);n.camera=i;a.addEventListener("resize",()=>{r.resize(),i.updateAspect()});const S=e.get(f);S.create(n);e.init();const F=e.get(g);await F.setup();const M=e.get(w);M.onFragmentsLoaded.add(t=>{n.scene&&n.scene.three.add(t)});const[y]=v.modelsList({components:e,tags:{schema:!0,viewDefinition:!1},actions:{download:!1}}),E=u.create(()=>{const[t]=C.loadIfc({components:e});return L`
+import"./modulepreload-polyfill-B5Qt9EMX.js";import{T as m,C as c,W as l,S as d,a as p,b,G as f,I as g,F as w,l as u,m as L}from"./index-D2hR2zBN.js";import{b as C}from"./index-Cc7BUWEv.js";import{t as v}from"./index-CCTT9UP1.js";import"./lit-html-paDGiEfB.js";m.init();const e=new c,I=e.get(l),n=I.create(),s=new d(e);s.setup();n.scene=s;const a=document.createElement("bim-viewport"),r=new p(e,a);n.renderer=r;const i=new b(e);n.camera=i;a.addEventListener("resize",()=>{r.resize(),i.updateAspect()});const S=e.get(f);S.create(n);e.init();const F=e.get(g);await F.setup();const M=e.get(w);M.onFragmentsLoaded.add(t=>{n.scene&&n.scene.three.add(t)});const[y]=v.modelsList({components:e,tags:{schema:!0,viewDefinition:!1},actions:{download:!1}}),E=u.create(()=>{const[t]=C.loadIfc({components:e});return L`
${t}
diff --git a/examples/assets/numberInput.js b/examples/assets/numberInput.js
index 74b4fb02..15ba84de 100644
--- a/examples/assets/numberInput.js
+++ b/examples/assets/numberInput.js
@@ -1 +1 @@
-import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as t}from"./index-CcrzIsUO.js";import"./state-DYefyXr3.js";import"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";t.init();const e=document.body.querySelector("bim-number-input");e.addEventListener("change",()=>{const o=e.value;console.log("Value is:",o)});
+import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as t}from"./index-DyXslpcX.js";import"./state-DYefyXr3.js";import"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";t.init();const e=document.body.querySelector("bim-number-input");e.addEventListener("change",()=>{const o=e.value;console.log("Value is:",o)});
diff --git a/examples/assets/panel.js b/examples/assets/panel.js
index 02d7e0b2..a3b6c1b2 100644
--- a/examples/assets/panel.js
+++ b/examples/assets/panel.js
@@ -1 +1 @@
-import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as o}from"./index-CcrzIsUO.js";import"./state-DYefyXr3.js";import"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";o.init();const r=document.getElementById("activation-buttons"),a=document.body.querySelector("bim-panel[name='panelA']"),c=document.getElementById("log-vector");c.addEventListener("click",()=>{alert(`Your vector is: ${JSON.stringify(a.value)}`)});const i=document.querySelectorAll("bim-panel");for(const t of i){const{activationButton:e}=t;e.labelHidden=!0,r.append(e)}const n=document.body.querySelector("bim-panel[name='panelB']");n.valueTransform={date:t=>t.trim()===""?t:new Date(t)};console.log(n);
+import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as o}from"./index-DyXslpcX.js";import"./state-DYefyXr3.js";import"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";o.init();const r=document.getElementById("activation-buttons"),a=document.body.querySelector("bim-panel[name='panelA']"),c=document.getElementById("log-vector");c.addEventListener("click",()=>{alert(`Your vector is: ${JSON.stringify(a.value)}`)});const i=document.querySelectorAll("bim-panel");for(const t of i){const{activationButton:e}=t;e.labelHidden=!0,r.append(e)}const n=document.body.querySelector("bim-panel[name='panelB']");n.valueTransform={date:t=>t.trim()===""?t:new Date(t)};console.log(n);
diff --git a/examples/assets/relationsTree.js b/examples/assets/relationsTree.js
index 363b1bcb..43e74064 100644
--- a/examples/assets/relationsTree.js
+++ b/examples/assets/relationsTree.js
@@ -1,4 +1,4 @@
-import"./modulepreload-polyfill-B5Qt9EMX.js";import{T as u,C as g,W as b,S as f,a as w,b as S,G as h,I as v,u as I,F as T,p as y,l as C,m as L}from"./index-N2x2mgv3.js";import{b as F}from"./index-DAXFTtA6.js";import{t as x}from"./index-BazQpUSZ.js";import"./lit-html-paDGiEfB.js";u.init();const e=new g,z=e.get(b),t=z.create(),o=new f(e);o.setup();t.scene=o;const r=document.createElement("bim-viewport"),s=new w(e,r);t.renderer=s;const i=new S(e);t.camera=i;r.addEventListener("resize",()=>{s.resize(),i.updateAspect()});const E=e.get(h);E.create(t);e.init();const G=e.get(v);await G.setup();const c=e.get(I);c.setup({world:t});c.zoomToSelection=!0;const p=e.get(T);p.onFragmentsLoaded.add(async n=>{t.scene&&t.scene.three.add(n)});const M=e.get(y);p.onFragmentsLoaded.add(async n=>{n.hasProperties&&await M.process(n)});const[a]=x.relationsTree({components:e,models:[]});a.preserveStructureOnFilter=!0;const R=C.create(()=>{const[n]=F.loadIfc({components:e});return L`
+import"./modulepreload-polyfill-B5Qt9EMX.js";import{T as u,C as g,W as b,S as f,a as w,b as S,G as h,I as v,u as I,F as T,p as y,l as C,m as L}from"./index-D2hR2zBN.js";import{b as F}from"./index-Cc7BUWEv.js";import{t as x}from"./index-CCTT9UP1.js";import"./lit-html-paDGiEfB.js";u.init();const e=new g,z=e.get(b),t=z.create(),o=new f(e);o.setup();t.scene=o;const r=document.createElement("bim-viewport"),s=new w(e,r);t.renderer=s;const i=new S(e);t.camera=i;r.addEventListener("resize",()=>{s.resize(),i.updateAspect()});const E=e.get(h);E.create(t);e.init();const G=e.get(v);await G.setup();const c=e.get(I);c.setup({world:t});c.zoomToSelection=!0;const p=e.get(T);p.onFragmentsLoaded.add(async n=>{t.scene&&t.scene.three.add(n)});const M=e.get(y);p.onFragmentsLoaded.add(async n=>{n.hasProperties&&await M.process(n)});const[a]=x.relationsTree({components:e,models:[]});a.preserveStructureOnFilter=!0;const R=C.create(()=>{const[n]=F.loadIfc({components:e});return L`
${n}
diff --git a/examples/assets/searching.js b/examples/assets/searching.js
index 97dd3405..9537e013 100644
--- a/examples/assets/searching.js
+++ b/examples/assets/searching.js
@@ -1,4 +1,4 @@
-import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as s,C as t,T as l,a as c}from"./index-CcrzIsUO.js";import"./state-DYefyXr3.js";import{x as n}from"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";s.init();const a=t.create(()=>n`
+import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as s,C as t,T as l,a as c}from"./index-DyXslpcX.js";import"./state-DYefyXr3.js";import{x as n}from"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";s.init();const a=t.create(()=>n`
No data to display!
diff --git a/examples/assets/selector.js b/examples/assets/selector.js
index d9bfd468..3b5fc713 100644
--- a/examples/assets/selector.js
+++ b/examples/assets/selector.js
@@ -1 +1 @@
-import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as e}from"./index-CcrzIsUO.js";import"./state-DYefyXr3.js";import"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";e.init();const t=document.body.querySelector("bim-selector"),r=t.querySelector("bim-option[label='Custom']"),i={data:"Hi!"};r.value=i;t.addEventListener("change",()=>{const o=t.value;alert(`Your new camera projection is: ${JSON.stringify(o)}.`)});
+import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as e}from"./index-DyXslpcX.js";import"./state-DYefyXr3.js";import"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";e.init();const t=document.body.querySelector("bim-selector"),r=t.querySelector("bim-option[label='Custom']"),i={data:"Hi!"};r.value=i;t.addEventListener("change",()=>{const o=t.value;alert(`Your new camera projection is: ${JSON.stringify(o)}.`)});
diff --git a/examples/assets/table.js b/examples/assets/table.js
index b4acb28c..b36bff86 100644
--- a/examples/assets/table.js
+++ b/examples/assets/table.js
@@ -1,4 +1,4 @@
-import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as u,C as o,B as c}from"./index-CcrzIsUO.js";import"./state-DYefyXr3.js";import{x as i}from"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";u.init();const e=document.createElement("bim-table");e.data=[{data:{Name:"Juan Hoyos",Age:28,Job:"BIM Software Developer",Company:"That Open Company",Bio:"Juan is a very cool guy, writing this tutorial so you know how to use a really powerful table in your projects."}},{data:{Name:"Ana Garcia",Age:32,Job:"Structural Engineer",Company:"Skyline Structures",Bio:"Ana is a meticulous engineer with a knack for ensuring that every project is structurally sound."}},{data:{Name:"Carlos Fernandez",Age:40,Job:"Project Manager",Company:"BuildSmart Ltd.",Bio:"Carlos coordinates projects from start to finish, making sure everything is on track and on budget."}},{data:{Name:"Elena Rios",Age:26,Job:"Architect",Company:"EcoDesign Studio",Bio:"Elena is a creative architect focused on sustainable designs that blend functionality and beauty."}},{data:{Name:"Diego Martinez",Age:35,Job:"Quantity Surveyor",Company:"CostControl Solutions",Bio:"Diego provides accurate cost estimates, helping projects stay within financial boundaries."}}];const a={data:{Name:"Sophia Wang",Age:29,Job:"MEP Engineer",Company:"FutureFlow Systems",Bio:"Sophia designs efficient mechanical, electrical, and plumbing systems for complex buildings."}};e.data.push(a);e.requestUpdate();const m=o.create(()=>i`
+import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as u,C as o,B as c}from"./index-DyXslpcX.js";import"./state-DYefyXr3.js";import{x as i}from"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";u.init();const e=document.createElement("bim-table");e.data=[{data:{Name:"Juan Hoyos",Age:28,Job:"BIM Software Developer",Company:"That Open Company",Bio:"Juan is a very cool guy, writing this tutorial so you know how to use a really powerful table in your projects."}},{data:{Name:"Ana Garcia",Age:32,Job:"Structural Engineer",Company:"Skyline Structures",Bio:"Ana is a meticulous engineer with a knack for ensuring that every project is structurally sound."}},{data:{Name:"Carlos Fernandez",Age:40,Job:"Project Manager",Company:"BuildSmart Ltd.",Bio:"Carlos coordinates projects from start to finish, making sure everything is on track and on budget."}},{data:{Name:"Elena Rios",Age:26,Job:"Architect",Company:"EcoDesign Studio",Bio:"Elena is a creative architect focused on sustainable designs that blend functionality and beauty."}},{data:{Name:"Diego Martinez",Age:35,Job:"Quantity Surveyor",Company:"CostControl Solutions",Bio:"Diego provides accurate cost estimates, helping projects stay within financial boundaries."}}];const a={data:{Name:"Sophia Wang",Age:29,Job:"MEP Engineer",Company:"FutureFlow Systems",Bio:"Sophia designs efficient mechanical, electrical, and plumbing systems for complex buildings."}};e.data.push(a);e.requestUpdate();const m=o.create(()=>i`
{if(typeof a.data.Bio!="string")return;const t=prompt(`Enter a new Bio for ${a.data.Name}:`,a.data.Bio);t&&t.trim()!==""&&(a.data.Bio=t,e.requestUpdate())}} label="Change ${a.data.Name} Bio">
`),p=o.create(()=>i`
{const n=t.target;if(!(n instanceof c))return;const l=e.data.filter(d=>d.data.Name!=="Elena Rios");e.data=l,n.disabled=!0}} label="Delete Elena Rios Record">
diff --git a/examples/assets/tabs.js b/examples/assets/tabs.js
index 205a3c47..78f5a488 100644
--- a/examples/assets/tabs.js
+++ b/examples/assets/tabs.js
@@ -1 +1 @@
-import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as i}from"./index-CcrzIsUO.js";import"./state-DYefyXr3.js";import"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";i.init();
+import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as i}from"./index-DyXslpcX.js";import"./state-DYefyXr3.js";import"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";i.init();
diff --git a/examples/assets/textInput.js b/examples/assets/textInput.js
index 4c9de4ab..02701bc9 100644
--- a/examples/assets/textInput.js
+++ b/examples/assets/textInput.js
@@ -1 +1 @@
-import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as e}from"./index-CcrzIsUO.js";import"./state-DYefyXr3.js";import"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";e.init();const t=document.querySelector("bim-text-input[name='name']");t.addEventListener("input",()=>{console.log(t.value)});
+import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as e}from"./index-DyXslpcX.js";import"./state-DYefyXr3.js";import"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";e.init();const t=document.querySelector("bim-text-input[name='name']");t.addEventListener("input",()=>{console.log(t.value)});
diff --git a/examples/assets/toolbar.js b/examples/assets/toolbar.js
index 205a3c47..78f5a488 100644
--- a/examples/assets/toolbar.js
+++ b/examples/assets/toolbar.js
@@ -1 +1 @@
-import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as i}from"./index-CcrzIsUO.js";import"./state-DYefyXr3.js";import"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";i.init();
+import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as i}from"./index-DyXslpcX.js";import"./state-DYefyXr3.js";import"./lit-html-paDGiEfB.js";import"./ref-CInB0H-f.js";i.init();
diff --git a/examples/assets/topicForm.js b/examples/assets/topicForm.js
index a263ac80..a05bcf4c 100644
--- a/examples/assets/topicForm.js
+++ b/examples/assets/topicForm.js
@@ -1,4 +1,4 @@
-import"./modulepreload-polyfill-B5Qt9EMX.js";import{q as R,z as s,T as g,m as r,a0 as I,a1 as H,l as M,C as N}from"./index-N2x2mgv3.js";import"./lit-html-paDGiEfB.js";import{e as B}from"./ref-CInB0H-f.js";const U={dueDate:t=>{if(typeof t=="string"&&t.trim()!=="")return new Date(t)},status:t=>{if(Array.isArray(t)&&t.length!==0)return t[0]},type:t=>{if(Array.isArray(t)&&t.length!==0)return t[0]},priority:t=>{if(Array.isArray(t)&&t.length!==0)return t[0]},stage:t=>{if(Array.isArray(t)&&t.length!==0)return t[0]},assignedTo:t=>{if(Array.isArray(t)&&t.length!==0)return t[0]},labels:t=>{if(Array.isArray(t))return new Set(t)}},E=t=>{const{components:$,topic:e,value:n,onCancel:C,onSubmit:_,styles:d}=t,w=_??(()=>{}),a=$.get(R),j=(n==null?void 0:n.title)??(e==null?void 0:e.title)??s.default.title,m=(n==null?void 0:n.status)??(e==null?void 0:e.status)??s.default.status,p=(n==null?void 0:n.type)??(e==null?void 0:e.type)??s.default.type,b=(n==null?void 0:n.priority)??(e==null?void 0:e.priority)??s.default.priority,u=(n==null?void 0:n.assignedTo)??(e==null?void 0:e.assignedTo)??s.default.assignedTo,c=(n==null?void 0:n.labels)??(e==null?void 0:e.labels)??s.default.labels,f=(n==null?void 0:n.stage)??(e==null?void 0:e.stage)??s.default.stage,q=(n==null?void 0:n.description)??(e==null?void 0:e.description)??s.default.description,L=e!=null&&e.dueDate?e.dueDate.toISOString().split("T")[0]:null,T=new Set([...a.config.statuses]);m&&T.add(m);const S=new Set([...a.config.types]);p&&S.add(p);const x=new Set([...a.config.priorities]);b&&x.add(b);const h=new Set([...a.config.users]);u&&h.add(u);const A=new Set([...a.config.labels]);if(c)for(const i of c)A.add(i);const D=new Set([...a.config.stages]);f&&D.add(f);const v=B(),O=async()=>{const{value:i}=v;if(!i)return;const o=H(i,U);if(e)e.set(o),await w(e);else{const l=a.create(o);await w(l)}},k=B(),z=i=>{const{value:o}=k;if(!o)return;const l=i.target;o.disabled=l.value.trim()===""},F=`btn-${g.newRandomId()}`,y=`btn-${g.newRandomId()}`;return r`
+import"./modulepreload-polyfill-B5Qt9EMX.js";import{q as R,z as s,T as g,m as r,a0 as I,a1 as H,l as M,C as N}from"./index-D2hR2zBN.js";import"./lit-html-paDGiEfB.js";import{e as B}from"./ref-CInB0H-f.js";const U={dueDate:t=>{if(typeof t=="string"&&t.trim()!=="")return new Date(t)},status:t=>{if(Array.isArray(t)&&t.length!==0)return t[0]},type:t=>{if(Array.isArray(t)&&t.length!==0)return t[0]},priority:t=>{if(Array.isArray(t)&&t.length!==0)return t[0]},stage:t=>{if(Array.isArray(t)&&t.length!==0)return t[0]},assignedTo:t=>{if(Array.isArray(t)&&t.length!==0)return t[0]},labels:t=>{if(Array.isArray(t))return new Set(t)}},E=t=>{const{components:$,topic:e,value:n,onCancel:C,onSubmit:_,styles:d}=t,w=_??(()=>{}),a=$.get(R),j=(n==null?void 0:n.title)??(e==null?void 0:e.title)??s.default.title,m=(n==null?void 0:n.status)??(e==null?void 0:e.status)??s.default.status,p=(n==null?void 0:n.type)??(e==null?void 0:e.type)??s.default.type,b=(n==null?void 0:n.priority)??(e==null?void 0:e.priority)??s.default.priority,u=(n==null?void 0:n.assignedTo)??(e==null?void 0:e.assignedTo)??s.default.assignedTo,c=(n==null?void 0:n.labels)??(e==null?void 0:e.labels)??s.default.labels,f=(n==null?void 0:n.stage)??(e==null?void 0:e.stage)??s.default.stage,q=(n==null?void 0:n.description)??(e==null?void 0:e.description)??s.default.description,L=e!=null&&e.dueDate?e.dueDate.toISOString().split("T")[0]:null,T=new Set([...a.config.statuses]);m&&T.add(m);const S=new Set([...a.config.types]);p&&S.add(p);const x=new Set([...a.config.priorities]);b&&x.add(b);const h=new Set([...a.config.users]);u&&h.add(u);const A=new Set([...a.config.labels]);if(c)for(const i of c)A.add(i);const D=new Set([...a.config.stages]);f&&D.add(f);const v=B(),O=async()=>{const{value:i}=v;if(!i)return;const o=H(i,U);if(e)e.set(o),await w(e);else{const l=a.create(o);await w(l)}},k=B(),z=i=>{const{value:o}=k;if(!o)return;const l=i.target;o.disabled=l.value.trim()===""},F=`btn-${g.newRandomId()}`,y=`btn-${g.newRandomId()}`;return r`