diff --git a/examples/AngleMeasurement/index.html b/examples/AngleMeasurement/index.html
index 66368a7e3..68dc031c8 100644
--- a/examples/AngleMeasurement/index.html
+++ b/examples/AngleMeasurement/index.html
@@ -58,11 +58,10 @@
-
-
-
-
-
+
+
+
+
diff --git a/examples/AreaMeasurement/index.html b/examples/AreaMeasurement/index.html
index c1febedc3..189572a64 100644
--- a/examples/AreaMeasurement/index.html
+++ b/examples/AreaMeasurement/index.html
@@ -58,11 +58,10 @@
-
-
-
-
-
+
+
+
+
diff --git a/examples/BCFTopics/index.html b/examples/BCFTopics/index.html
index e9ac34907..131955170 100644
--- a/examples/BCFTopics/index.html
+++ b/examples/BCFTopics/index.html
@@ -40,11 +40,10 @@
}
-
-
-
-
-
+
+
+
+
diff --git a/examples/BoundingBoxer/index.html b/examples/BoundingBoxer/index.html
index 4ab3e0f87..80fa24ab0 100644
--- a/examples/BoundingBoxer/index.html
+++ b/examples/BoundingBoxer/index.html
@@ -58,11 +58,10 @@
-
-
-
-
-
+
+
+
+
diff --git a/examples/Civil3DNavigator/index.html b/examples/Civil3DNavigator/index.html
index 568d4958b..cffe59d9e 100644
--- a/examples/Civil3DNavigator/index.html
+++ b/examples/Civil3DNavigator/index.html
@@ -58,11 +58,10 @@
-
-
-
-
-
+
+
+
+
diff --git a/examples/CivilCrossSectionNavigator/index.html b/examples/CivilCrossSectionNavigator/index.html
index 6a69834c7..66104f2fe 100644
--- a/examples/CivilCrossSectionNavigator/index.html
+++ b/examples/CivilCrossSectionNavigator/index.html
@@ -76,13 +76,12 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/examples/CivilElevationNavigator/index.html b/examples/CivilElevationNavigator/index.html
index 5424a8a31..8ae315365 100644
--- a/examples/CivilElevationNavigator/index.html
+++ b/examples/CivilElevationNavigator/index.html
@@ -77,13 +77,12 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/examples/CivilPlanNavigator/index.html b/examples/CivilPlanNavigator/index.html
index 3a75ef028..061ab6d08 100644
--- a/examples/CivilPlanNavigator/index.html
+++ b/examples/CivilPlanNavigator/index.html
@@ -66,13 +66,12 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/examples/Classifier/index.html b/examples/Classifier/index.html
index 4f1b4f37a..15220835a 100644
--- a/examples/Classifier/index.html
+++ b/examples/Classifier/index.html
@@ -58,11 +58,10 @@
-
-
-
-
-
+
+
+
+
diff --git a/examples/ClipEdges/index.html b/examples/ClipEdges/index.html
index 028fba07d..b9c68bfa5 100644
--- a/examples/ClipEdges/index.html
+++ b/examples/ClipEdges/index.html
@@ -58,12 +58,11 @@
-
-
-
-
-
-
+
+
+
+
+
diff --git a/examples/Clipper/index.html b/examples/Clipper/index.html
index f4a9d4dbe..0307d8e34 100644
--- a/examples/Clipper/index.html
+++ b/examples/Clipper/index.html
@@ -58,11 +58,10 @@
-
-
-
-
-
+
+
+
+
diff --git a/examples/Cullers/index.html b/examples/Cullers/index.html
index decb4eeaf..3f76d11e8 100644
--- a/examples/Cullers/index.html
+++ b/examples/Cullers/index.html
@@ -58,10 +58,9 @@
-
-
-
-
+
+
+
diff --git a/examples/EdgeMeasurement/index.html b/examples/EdgeMeasurement/index.html
index b04ec9363..48fea66e9 100644
--- a/examples/EdgeMeasurement/index.html
+++ b/examples/EdgeMeasurement/index.html
@@ -58,11 +58,10 @@
-
-
-
-
-
+
+
+
+
diff --git a/examples/Exploder/index.html b/examples/Exploder/index.html
index 78129c22f..c3108ffbf 100644
--- a/examples/Exploder/index.html
+++ b/examples/Exploder/index.html
@@ -58,11 +58,10 @@
-
-
-
-
-
+
+
+
+
diff --git a/examples/FaceMeasurement/index.html b/examples/FaceMeasurement/index.html
index 44d95b078..26720988d 100644
--- a/examples/FaceMeasurement/index.html
+++ b/examples/FaceMeasurement/index.html
@@ -58,11 +58,10 @@
-
-
-
-
-
+
+
+
+
diff --git a/examples/FragmentsManager/index.html b/examples/FragmentsManager/index.html
index 8fc781f3f..b1f3118e6 100644
--- a/examples/FragmentsManager/index.html
+++ b/examples/FragmentsManager/index.html
@@ -58,11 +58,10 @@
-
-
-
-
-
+
+
+
+
diff --git a/examples/Grids/index.html b/examples/Grids/index.html
index 8462fccee..a7bc119d5 100644
--- a/examples/Grids/index.html
+++ b/examples/Grids/index.html
@@ -64,8 +64,10 @@
-
-
+
+
+
+
diff --git a/examples/Hider/index.html b/examples/Hider/index.html
index f36ece94b..d74e1c197 100644
--- a/examples/Hider/index.html
+++ b/examples/Hider/index.html
@@ -58,11 +58,10 @@
-
-
-
-
-
+
+
+
+
diff --git a/examples/Highlighter/index.html b/examples/Highlighter/index.html
index c71e0ba13..bc2fff01f 100644
--- a/examples/Highlighter/index.html
+++ b/examples/Highlighter/index.html
@@ -58,11 +58,10 @@
-
-
-
-
-
+
+
+
+
diff --git a/examples/IDSSpecifications/index.html b/examples/IDSSpecifications/index.html
new file mode 100644
index 000000000..32c165f07
--- /dev/null
+++ b/examples/IDSSpecifications/index.html
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+ IDS Specifications
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/IfcFinder/index.html b/examples/IfcFinder/index.html
new file mode 100644
index 000000000..208e61ad9
--- /dev/null
+++ b/examples/IfcFinder/index.html
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+ IfcFinder
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/IfcGeometryTiler/index.html b/examples/IfcGeometryTiler/index.html
index 8376c54f0..81a046a8d 100644
--- a/examples/IfcGeometryTiler/index.html
+++ b/examples/IfcGeometryTiler/index.html
@@ -58,11 +58,10 @@
-
-
-
-
-
+
+
+
+
diff --git a/examples/IfcJsonExporter/index.html b/examples/IfcJsonExporter/index.html
index 7f9f66853..b7e8d91c2 100644
--- a/examples/IfcJsonExporter/index.html
+++ b/examples/IfcJsonExporter/index.html
@@ -58,11 +58,10 @@
-
-
-
-
-
+
+
+
+
diff --git a/examples/IfcLoader/index.html b/examples/IfcLoader/index.html
index bc2690d2d..b1b6f58f2 100644
--- a/examples/IfcLoader/index.html
+++ b/examples/IfcLoader/index.html
@@ -58,11 +58,10 @@
-
-
-
-
-
+
+
+
+
diff --git a/examples/IfcPropertiesManager/index.html b/examples/IfcPropertiesManager/index.html
index 38b5d3acb..e7c0ade6e 100644
--- a/examples/IfcPropertiesManager/index.html
+++ b/examples/IfcPropertiesManager/index.html
@@ -6,9 +6,8 @@
Ifc Properties Manager
-
-
-
+
+
diff --git a/examples/IfcPropertiesTiler/index.html b/examples/IfcPropertiesTiler/index.html
index 72fa24d67..3074f025c 100644
--- a/examples/IfcPropertiesTiler/index.html
+++ b/examples/IfcPropertiesTiler/index.html
@@ -58,11 +58,10 @@
-
-
-
-
-
+
+
+
+
diff --git a/examples/IfcRelationsIndexer/index.html b/examples/IfcRelationsIndexer/index.html
index 94677deec..5d6c0e27e 100644
--- a/examples/IfcRelationsIndexer/index.html
+++ b/examples/IfcRelationsIndexer/index.html
@@ -58,12 +58,11 @@
-
-
-
-
-
-
+
+
+
+
+
diff --git a/examples/IfcStreamer/index.html b/examples/IfcStreamer/index.html
index 399ef183d..bd3e4af11 100644
--- a/examples/IfcStreamer/index.html
+++ b/examples/IfcStreamer/index.html
@@ -58,11 +58,10 @@
-
-
-
-
-
+
+
+
+
diff --git a/examples/LengthMeasurement/index.html b/examples/LengthMeasurement/index.html
index b836f7d3c..aa061be1c 100644
--- a/examples/LengthMeasurement/index.html
+++ b/examples/LengthMeasurement/index.html
@@ -58,12 +58,11 @@
-
-
-
-
-
-
+
+
+
+
+
diff --git a/examples/Marker/index.html b/examples/Marker/index.html
index cb1b0cbec..a5abc4899 100644
--- a/examples/Marker/index.html
+++ b/examples/Marker/index.html
@@ -58,11 +58,10 @@
-
-
-
-
-
+
+
+
+
diff --git a/examples/MeasurementUtils/index.html b/examples/MeasurementUtils/index.html
index 526dceeda..0d80b9b17 100644
--- a/examples/MeasurementUtils/index.html
+++ b/examples/MeasurementUtils/index.html
@@ -58,10 +58,9 @@
-
-
-
-
+
+
+
diff --git a/examples/MiniMap/index.html b/examples/MiniMap/index.html
index af925142f..9f9f52731 100644
--- a/examples/MiniMap/index.html
+++ b/examples/MiniMap/index.html
@@ -64,11 +64,10 @@
-
-
-
-
-
+
+
+
+
diff --git a/examples/OrthoPerspectiveCamera/index.html b/examples/OrthoPerspectiveCamera/index.html
index 9ad422359..8c9567b9c 100644
--- a/examples/OrthoPerspectiveCamera/index.html
+++ b/examples/OrthoPerspectiveCamera/index.html
@@ -58,11 +58,10 @@
-
-
-
-
-
+
+
+
+
diff --git a/examples/Plans/index.html b/examples/Plans/index.html
index d9e1d4c17..d30d6a820 100644
--- a/examples/Plans/index.html
+++ b/examples/Plans/index.html
@@ -58,12 +58,11 @@
-
-
-
-
-
-
+
+
+
+
+
diff --git a/examples/PostproductionRenderer/index.html b/examples/PostproductionRenderer/index.html
index f1b791af0..1f44cae16 100644
--- a/examples/PostproductionRenderer/index.html
+++ b/examples/PostproductionRenderer/index.html
@@ -58,12 +58,11 @@
-
-
-
-
-
-
+
+
+
+
+
diff --git a/examples/Raycasters/index.html b/examples/Raycasters/index.html
index 86cd2f1dd..2703c02a8 100644
--- a/examples/Raycasters/index.html
+++ b/examples/Raycasters/index.html
@@ -58,10 +58,9 @@
-
-
-
-
+
+
+
diff --git a/examples/Sections/index.html b/examples/Sections/index.html
index d46577b18..b07954cdb 100644
--- a/examples/Sections/index.html
+++ b/examples/Sections/index.html
@@ -58,12 +58,11 @@
-
-
-
-
-
-
+
+
+
+
+
diff --git a/examples/ShadowDropper/index.html b/examples/ShadowDropper/index.html
index e46c5e89c..69f986441 100644
--- a/examples/ShadowDropper/index.html
+++ b/examples/ShadowDropper/index.html
@@ -58,12 +58,11 @@
-
-
-
-
-
-
+
+
+
+
+
diff --git a/examples/ShadowedScene/index.html b/examples/ShadowedScene/index.html
index 73201da6b..2aeaf55a4 100644
--- a/examples/ShadowedScene/index.html
+++ b/examples/ShadowedScene/index.html
@@ -64,10 +64,9 @@
-
-
-
-
+
+
+
diff --git a/examples/VolumeMeasurement/index.html b/examples/VolumeMeasurement/index.html
index b3e45a1ba..8ab3440b1 100644
--- a/examples/VolumeMeasurement/index.html
+++ b/examples/VolumeMeasurement/index.html
@@ -58,11 +58,10 @@
-
-
-
-
-
+
+
+
+
diff --git a/examples/Worlds/index.html b/examples/Worlds/index.html
index 2f14e00d7..7810a56aa 100644
--- a/examples/Worlds/index.html
+++ b/examples/Worlds/index.html
@@ -58,11 +58,10 @@
-
-
-
-
-
+
+
+
+
diff --git a/examples/assets/_commonjsHelpers-Cpj98o6Y.js b/examples/assets/_commonjsHelpers-Cpj98o6Y.js
deleted file mode 100644
index b285ce543..000000000
--- a/examples/assets/_commonjsHelpers-Cpj98o6Y.js
+++ /dev/null
@@ -1 +0,0 @@
-var o=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function l(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}export{o as c,l as g};
diff --git a/examples/assets/angleMeasurement.js b/examples/assets/angleMeasurement.js
index 3ccb56577..88f2e0a02 100644
--- a/examples/assets/angleMeasurement.js
+++ b/examples/assets/angleMeasurement.js
@@ -1 +1 @@
-import{B as c,M as d,a as l}from"./web-ifc-api-JuXSH2nk.js";import{o as m,a as i,M as w,N as p,h as u}from"./index-DtdmE_hK.js";import{$ as b,a as f}from"./index-Cm7YlCft.js";import{S as g}from"./stats.min-GTpOrGrX.js";import"./_commonjsHelpers-Cpj98o6Y.js";const r=document.getElementById("container"),o=new m,h=o.get(i),e=h.create();e.scene=new w(o);e.renderer=new b(o,r);e.camera=new p(o);o.init();e.camera.controls.setLookAt(5,5,5,0,0,0);e.scene.setup();const y=o.get(u);y.create(e);e.scene.three.background=null;const M=new c(3,3,3),k=new d({color:"#6528D7"}),a=new l(M,k);a.position.set(0,1.5,0);e.scene.three.add(a);e.meshes.add(a);const t=o.get(f);t.world=e;t.enabled=!0;r.ondblclick=()=>t.create();window.onkeydown=s=>{(s.code==="Delete"||s.code==="Backspace")&&t.deleteAll()};const n=new g;n.showPanel(2);document.body.append(n.dom);n.dom.style.left="0px";n.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>n.begin());e.renderer.onAfterUpdate.add(()=>n.end());
+import{B as c,M as d,a as l}from"./web-ifc-api-Dlf_dxms.js";import{p as m,A as i,e as p,v as w,O as u}from"./index-6e07lNWw.js";import{P as b,a as f}from"./index-DDq_E_eW.js";import{S as g}from"./stats.min-bmkVNhZk.js";const r=document.getElementById("container"),n=new m,y=n.get(i),e=y.create();e.scene=new p(n);e.renderer=new b(n,r);e.camera=new w(n);n.init();e.camera.controls.setLookAt(5,5,5,0,0,0);e.scene.setup();const h=n.get(u);h.create(e);e.scene.three.background=null;const k=new c(3,3,3),A=new d({color:"#6528D7"}),s=new l(k,A);s.position.set(0,1.5,0);e.scene.three.add(s);e.meshes.add(s);const o=n.get(f);o.world=e;o.enabled=!0;r.ondblclick=()=>o.create();window.onkeydown=a=>{(a.code==="Delete"||a.code==="Backspace")&&o.deleteAll()};const t=new g;t.showPanel(2);document.body.append(t.dom);t.dom.style.left="0px";t.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>t.begin());e.renderer.onAfterUpdate.add(()=>t.end());
diff --git a/examples/assets/areaMeasurement.js b/examples/assets/areaMeasurement.js
index 66a8936f5..ce49c5d72 100644
--- a/examples/assets/areaMeasurement.js
+++ b/examples/assets/areaMeasurement.js
@@ -1 +1 @@
-import{B as c,M as d,a as m}from"./web-ifc-api-JuXSH2nk.js";import{S as l}from"./stats.min-GTpOrGrX.js";import{o as i,a as w,M as p,N as u,h as b}from"./index-DtdmE_hK.js";import{$ as f,J as h}from"./index-Cm7YlCft.js";import"./_commonjsHelpers-Cpj98o6Y.js";const a=document.getElementById("container"),n=new i,g=n.get(w),e=g.create();e.scene=new p(n);e.renderer=new f(n,a);e.camera=new u(n);n.init();e.camera.controls.setLookAt(5,5,5,0,0,0);e.scene.setup();const y=n.get(b);y.create(e);e.scene.three.background=null;const M=new c(3,3,3),k=new d({color:"#6528D7"}),s=new m(M,k);s.position.set(0,1.5,0);e.scene.three.add(s);e.meshes.add(s);const t=n.get(h);t.world=e;t.enabled=!0;a.ondblclick=()=>t.create();a.oncontextmenu=()=>t.endCreation();window.onkeydown=r=>{(r.code==="Delete"||r.code==="Backspace")&&t.deleteAll()};const o=new l;o.showPanel(2);document.body.append(o.dom);o.dom.style.left="0px";o.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>o.begin());e.renderer.onAfterUpdate.add(()=>o.end());
+import{B as c,M as d,a as m}from"./web-ifc-api-Dlf_dxms.js";import{S as l}from"./stats.min-bmkVNhZk.js";import{p as i,A as p,e as w,v as u,O as b}from"./index-6e07lNWw.js";import{P as f,o as g}from"./index-DDq_E_eW.js";const s=document.getElementById("container"),n=new i,y=n.get(p),e=y.create();e.scene=new w(n);e.renderer=new f(n,s);e.camera=new u(n);n.init();e.camera.controls.setLookAt(5,5,5,0,0,0);e.scene.setup();const h=n.get(b);h.create(e);e.scene.three.background=null;const k=new c(3,3,3),A=new d({color:"#6528D7"}),a=new m(k,A);a.position.set(0,1.5,0);e.scene.three.add(a);e.meshes.add(a);const t=n.get(g);t.world=e;t.enabled=!0;s.ondblclick=()=>t.create();s.oncontextmenu=()=>t.endCreation();window.onkeydown=r=>{(r.code==="Delete"||r.code==="Backspace")&&t.deleteAll()};const o=new l;o.showPanel(2);document.body.append(o.dom);o.dom.style.left="0px";o.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>o.begin());e.renderer.onAfterUpdate.add(()=>o.end());
diff --git a/examples/assets/bCFTopics.js b/examples/assets/bCFTopics.js
index c21b28412..88f10384d 100644
--- a/examples/assets/bCFTopics.js
+++ b/examples/assets/bCFTopics.js
@@ -1,4 +1,4 @@
-import{bb as I}from"./web-ifc-api-JuXSH2nk.js";import{d as S,R as f,m as w}from"./index-CqPyogbW.js";import{C as F,W as B,S as D,I as P,a as x,F as A,B as E,V as L}from"./index-BICSFNrK.js";import{S as M,a as R,G as T}from"./index-M03DNf7F.js";import"./_commonjsHelpers-Cpj98o6Y.js";S.init();const e=new F,j=e.get(B),n=j.create(),u=new M(e);u.setup();n.scene=u;n.scene.three.add(new I(10));const s=document.createElement("bim-viewport"),b=new R(e,s);n.renderer=b;const g=new D(e);n.camera=g;s.addEventListener("resize",()=>{b.resize(),g.updateAspect()});const l=document.createElement("bim-grid");l.floating=!0;s.append(l);const G=e.get(T);G.create(n);e.init();const y=e.get(P);await y.setup();const V=e.get(x),k=e.get(A);k.onFragmentsLoaded.add(async t=>{n.scene.three.add(t),t.hasProperties&&await V.process(t);for(const o of t.items)n.meshes.add(o.mesh)});const W=async t=>{const o=[];for(const i of t){const r=await(await fetch(i)).arrayBuffer(),c=new Uint8Array(r),m=await y.load(c);o.push(m)}return o},z=await W(["https://thatopen.github.io/engine_components/resources/small.ifc"]),H=z[0],a=e.get(E);a.setup({types:new Set([...a.config.types,"Information","Coordination"]),statuses:new Set(["Active","In Progress","Done","In Review","Closed"]),users:new Set(["juan.hoyos4@gmail.com"])});const U=e.get(L);l.layouts={main:{template:`
+import{bk as I}from"./web-ifc-api-Dlf_dxms.js";import{T as S,z as f,m as w}from"./index-DtbylpTq.js";import{C as F,W as B,S as D,I as P,d as T,F as x,B as A,V as E}from"./index-Cs1SYVzD.js";import{S as L,a as M,G as j}from"./index-DDyOrdLb.js";S.init();const e=new F,k=e.get(B),n=k.create(),u=new L(e);u.setup();n.scene=u;n.scene.three.add(new I(10));const s=document.createElement("bim-viewport"),b=new M(e,s);n.renderer=b;const g=new D(e);n.camera=g;s.addEventListener("resize",()=>{b.resize(),g.updateAspect()});const l=document.createElement("bim-grid");l.floating=!0;s.append(l);const z=e.get(j);z.create(n);e.init();const y=e.get(P);await y.setup();const G=e.get(T),V=e.get(x);V.onFragmentsLoaded.add(async t=>{n.scene.three.add(t),t.hasProperties&&await G.process(t);for(const o of t.items)n.meshes.add(o.mesh)});const R=async t=>{const o=[];for(const i of t){const r=await(await fetch(i)).arrayBuffer(),c=new Uint8Array(r),m=await y.load(c);o.push(m)}return o},W=await R(["https://thatopen.github.io/engine_components/resources/small.ifc"]),H=W[0],a=e.get(A);a.setup({types:new Set([...a.config.types,"Information","Coordination"]),statuses:new Set(["Active","In Progress","Done","In Review","Closed"]),users:new Set(["juan.hoyos4@gmail.com"])});const U=e.get(E);l.layouts={main:{template:`
"empty topicPanel" 1fr
/1fr 22rem
`,elements:{}}};const $=async t=>{const o={viewpoints:[],topics:[]};for(const i of t){const r=await(await fetch(i)).arrayBuffer(),{viewpoints:c,topics:m}=await a.load(new Uint8Array(r),n);o.viewpoints.push(...c),o.topics.push(...m)}return o};await $([]);const p=a.create({title:"Missing information",description:"It seems these elements are badly defined.",dueDate:new Date("08-01-2020"),type:"Clash",priority:"Major",stage:"Design",labels:new Set(["Architecture","Cost Estimation"]),assignedTo:"juan.hoyos4@gmail.com"}),d=U.create(n,{title:"Custom Viewpoint"});d.addComponentsFromMap(H.getFragmentMap([186]));p.viewpoints.add(d.guid);const h=p.createComment("What if we talk about this next meeting?");h.author="juan.hoyos4@gmail.com";p.createComment("Hi there! I agree.");h.viewpoint=d;const N=f.create(()=>w`
diff --git a/examples/assets/boundingBoxer.js b/examples/assets/boundingBoxer.js
index edb948db0..400800ac5 100644
--- a/examples/assets/boundingBoxer.js
+++ b/examples/assets/boundingBoxer.js
@@ -1,16 +1,16 @@
-import"./web-ifc-api-JuXSH2nk.js";import{S as c}from"./stats.min-GTpOrGrX.js";import{d as l,R as a,m as r}from"./index-CqPyogbW.js";import{o as d,a as m,M as p,v as b,N as u,h as g,_ as f,m as h}from"./index-DtdmE_hK.js";import"./_commonjsHelpers-Cpj98o6Y.js";const w=document.getElementById("container"),t=new d,y=t.get(m),e=y.create();e.scene=new p(t);e.renderer=new b(t,w);e.camera=new u(t);t.init();e.camera.controls.setLookAt(12,6,8,0,0,-10);e.scene.setup();const v=t.get(g);v.create(e);e.scene.three.background=null;const B=t.get(f),x=await fetch("https://thatopen.github.io/engine_components/resources/small.frag"),k=await x.arrayBuffer(),L=new Uint8Array(k),i=B.load(L);e.scene.three.add(i);const s=t.get(h);s.add(i);const M=s.getMesh();s.reset();const n=new c;n.showPanel(2);document.body.append(n.dom);n.dom.style.left="0px";n.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>n.begin());e.renderer.onAfterUpdate.add(()=>n.end());l.init();const o=a.create(()=>r`
+import"./web-ifc-api-Dlf_dxms.js";import{S as i}from"./stats.min-bmkVNhZk.js";import{T as l,z as a,m as r}from"./index-DtbylpTq.js";import{p as d,A as m,e as p,m as b,v as u,O as g,T as f,w}from"./index-6e07lNWw.js";const h=document.getElementById("container"),t=new d,y=t.get(m),e=y.create();e.scene=new p(t);e.renderer=new b(t,h);e.camera=new u(t);t.init();e.camera.controls.setLookAt(12,6,8,0,0,-10);e.scene.setup();const v=t.get(g);v.create(e);e.scene.three.background=null;const B=t.get(f),T=await fetch("https://thatopen.github.io/engine_components/resources/small.frag"),x=await T.arrayBuffer(),A=new Uint8Array(x),c=B.load(A);e.scene.three.add(c);const s=t.get(w);s.add(c);const k=s.getMesh();s.reset();const n=new i;n.showPanel(2);document.body.append(n.dom);n.dom.style.left="0px";n.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>n.begin());e.renderer.onAfterUpdate.add(()=>n.end());l.init();const o=a.create(()=>r`
- `);document.body.append(o);const A=a.create(()=>r`
+ `);document.body.append(o);const L=a.create(()=>r`
- `);document.body.append(A);
+ `);document.body.append(L);
diff --git a/examples/assets/civil3DNavigator.js b/examples/assets/civil3DNavigator.js
index 077e2abdd..e92cd7698 100644
--- a/examples/assets/civil3DNavigator.js
+++ b/examples/assets/civil3DNavigator.js
@@ -1 +1 @@
-import{r as i,S as p}from"./web-ifc-api-JuXSH2nk.js";import{o as l,a as m,M as h,N as f,h as g,_ as u,c as w}from"./index-DtdmE_hK.js";import{S as y}from"./stats.min-GTpOrGrX.js";import{X as b,q as S}from"./index-Cm7YlCft.js";import"./_commonjsHelpers-Cpj98o6Y.js";const d=document.getElementById("container"),t=new l,U=t.get(m),e=U.create();e.scene=new h(t);e.renderer=new b(t,d);e.camera=new f(t);t.init();e.scene.setup();e.camera.controls.setLookAt(5,5,5,0,0,0);d.appendChild(e.renderer.three2D.domElement);const _=t.get(g);_.create(e);e.scene.three.background=null;const v=t.get(u),A=await fetch("https://thatopen.github.io/engine_components/resources/road.frag"),B=await A.arrayBuffer(),E=new Uint8Array(B),r=await v.load(E);e.scene.three.add(r);const I=await fetch("https://thatopen.github.io/engine_components/resources/road.json");r.setLocalProperties(await I.json());const a=t.get(S);a.world=e;a.draw(r);const L=t.get(w),s=L.create(e);s.threshold=10;for(const o of r.children)o instanceof i&&s.add(o);s.needsUpdate=!0;e.camera.controls.addEventListener("sleep",()=>{s.needsUpdate=!0});const c=new p(void 0,20);a.onHighlight.add(({point:o})=>{c.center.copy(o),e.camera.controls.fitToSphere(c,!0)});const n=new y;n.showPanel(2);document.body.append(n.dom);n.dom.style.left="0px";n.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>n.begin());e.renderer.onAfterUpdate.add(()=>n.end());
+import{s as i,S as p}from"./web-ifc-api-Dlf_dxms.js";import{p as l,A as m,e as h,v as f,O as g,T as u,F as w}from"./index-6e07lNWw.js";import{S as y}from"./stats.min-bmkVNhZk.js";import{n as b,i as v}from"./index-DDq_E_eW.js";const d=document.getElementById("container"),t=new l,A=t.get(m),e=A.create();e.scene=new h(t);e.renderer=new b(t,d);e.camera=new f(t);t.init();e.scene.setup();e.camera.controls.setLookAt(5,5,5,0,0,0);d.appendChild(e.renderer.three2D.domElement);const S=t.get(g);S.create(e);e.scene.three.background=null;const U=t.get(u),B=await fetch("https://thatopen.github.io/engine_components/resources/road.frag"),E=await B.arrayBuffer(),I=new Uint8Array(E),r=await U.load(I);e.scene.three.add(r);const L=await fetch("https://thatopen.github.io/engine_components/resources/road.json");r.setLocalProperties(await L.json());const a=t.get(v);a.world=e;a.draw(r);const T=t.get(w),s=T.create(e);s.threshold=10;for(const o of r.children)o instanceof i&&s.add(o);s.needsUpdate=!0;e.camera.controls.addEventListener("sleep",()=>{s.needsUpdate=!0});const c=new p(void 0,20);a.onHighlight.add(({point:o})=>{c.center.copy(o),e.camera.controls.fitToSphere(c,!0)});const n=new y;n.showPanel(2);document.body.append(n.dom);n.dom.style.left="0px";n.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>n.begin());e.renderer.onAfterUpdate.add(()=>n.end());
diff --git a/examples/assets/civilCrossSectionNavigator.js b/examples/assets/civilCrossSectionNavigator.js
index 20c6bfd52..3e088ebaf 100644
--- a/examples/assets/civilCrossSectionNavigator.js
+++ b/examples/assets/civilCrossSectionNavigator.js
@@ -1 +1 @@
-import{C as M,L as B}from"./web-ifc-api-JuXSH2nk.js";import{o as E,a as S,M as k,n as D,h as v,_ as x,b as I}from"./index-DtdmE_hK.js";import{d as L}from"./index-CqPyogbW.js";import{Z as A}from"./index-Cb0EycFm.js";import{S as C}from"./stats.min-GTpOrGrX.js";import{X as Z,Z as _,q as P,Q as U,K as j}from"./index-Cm7YlCft.js";import"./_commonjsHelpers-Cpj98o6Y.js";L.init();A.init();const y=document.getElementById("container"),e=new E,q=e.get(S),t=q.create();t.scene=new k(e);t.renderer=new Z(e,y);t.camera=new D(e);e.init();t.scene.setup();t.camera.controls.setLookAt(5,5,5,0,0,0);y.appendChild(t.renderer.three2D.domElement);const H=e.get(v);H.create(t);t.scene.three.background=null;const b=e.get(x),K=await fetch("https://thatopen.github.io/engine_components/resources/road.frag"),N=await K.arrayBuffer(),Q=new Uint8Array(N),i=b.load(Q);t.scene.three.add(i);const W=await fetch("https://thatopen.github.io/engine_components/resources/road.json");i.setLocalProperties(await W.json());const f=document.getElementById("scene-2d-left");f.components=e;if(!f.world)throw new Error("World not found!");const c=e.get(_);c.world=f.world;await c.draw(i);const l=e.get(P);l.world=t;l.draw(i);const g=document.getElementById("scene-2d-right");g.components=e;if(!g.world)throw new Error("World not found!");const h=e.get(U);h.world=g.world;h.world3D=t;c.onMarkerChange.add(({alignment:o,percentage:n,type:r,curve:s})=>{if(l.setMarker(o,n,r),r==="select"){const d=s.alignment.absolute[s.index].mesh,m=o.getPointAt(n,"absolute");h.set(d,m)}});c.onHighlight.add(({mesh:o})=>{l.highlighter.select(o);const n=o.curve.index,r=o.curve.alignment.absolute[n];r.mesh.geometry.computeBoundingSphere();const s=r.mesh.geometry.boundingSphere;s&&t.camera.controls.fitToSphere(s,!0)});c.onMarkerHidden.add(({type:o})=>{l.hideMarker(o)});const p=e.get(I);p.byEntity(i);const X=p.list,w=e.get(j),u=w.styles.list;for(const o in X.entities){const n=p.find({entities:[o]}),r=new M(Math.random(),Math.random(),Math.random()),s=new B({color:r});w.styles.create(o,new Set,g.world,s);for(const d in n){const m=b.list.get(d);m&&(u[o].fragments[d]=new Set(n[d]),u[o].meshes.add(m.mesh))}}w.update(!0);const a=new C;a.showPanel(2);document.body.append(a.dom);a.dom.style.left="0px";a.dom.style.zIndex="unset";t.renderer.onBeforeUpdate.add(()=>a.begin());t.renderer.onAfterUpdate.add(()=>a.end());
+import{C as M,L as v}from"./web-ifc-api-Dlf_dxms.js";import{p as B,A as E,e as S,_ as k,O as A,T as D,U as x}from"./index-6e07lNWw.js";import{T as I}from"./index-DtbylpTq.js";import{v as L}from"./index-CO3KVvRB.js";import{S as T}from"./stats.min-bmkVNhZk.js";import{n as U,s as C,i as O,r as _,O as P}from"./index-DDq_E_eW.js";I.init();L.init();const y=document.getElementById("container"),e=new B,j=e.get(E),t=j.create();t.scene=new S(e);t.renderer=new U(e,y);t.camera=new k(e);e.init();t.scene.setup();t.camera.controls.setLookAt(5,5,5,0,0,0);y.appendChild(t.renderer.three2D.domElement);const H=e.get(A);H.create(t);t.scene.three.background=null;const b=e.get(D),N=await fetch("https://thatopen.github.io/engine_components/resources/road.frag"),W=await N.arrayBuffer(),z=new Uint8Array(W),d=b.load(z);t.scene.three.add(d);const F=await fetch("https://thatopen.github.io/engine_components/resources/road.json");d.setLocalProperties(await F.json());const f=document.getElementById("scene-2d-left");f.components=e;if(!f.world)throw new Error("World not found!");const c=e.get(C);c.world=f.world;await c.draw(d);const l=e.get(O);l.world=t;l.draw(d);const g=document.getElementById("scene-2d-right");g.components=e;if(!g.world)throw new Error("World not found!");const h=e.get(_);h.world=g.world;h.world3D=t;c.onMarkerChange.add(({alignment:o,percentage:n,type:r,curve:s})=>{if(l.setMarker(o,n,r),r==="select"){const i=s.alignment.absolute[s.index].mesh,m=o.getPointAt(n,"absolute");h.set(i,m)}});c.onHighlight.add(({mesh:o})=>{l.highlighter.select(o);const n=o.curve.index,r=o.curve.alignment.absolute[n];r.mesh.geometry.computeBoundingSphere();const s=r.mesh.geometry.boundingSphere;s&&t.camera.controls.fitToSphere(s,!0)});c.onMarkerHidden.add(({type:o})=>{l.hideMarker(o)});const p=e.get(x);p.byEntity(d);const R=p.list,w=e.get(P),u=w.styles.list;for(const o in R.entities){const n=p.find({entities:[o]}),r=new M(Math.random(),Math.random(),Math.random()),s=new v({color:r});w.styles.create(o,new Set,g.world,s);for(const i in n){const m=b.list.get(i);m&&(u[o].fragments[i]=new Set(n[i]),u[o].meshes.add(m.mesh))}}w.update(!0);const a=new T;a.showPanel(2);document.body.append(a.dom);a.dom.style.left="0px";a.dom.style.zIndex="unset";t.renderer.onBeforeUpdate.add(()=>a.begin());t.renderer.onAfterUpdate.add(()=>a.end());
diff --git a/examples/assets/civilElevationNavigator.js b/examples/assets/civilElevationNavigator.js
index 370c4c72d..86009918d 100644
--- a/examples/assets/civilElevationNavigator.js
+++ b/examples/assets/civilElevationNavigator.js
@@ -1 +1 @@
-import"./web-ifc-api-JuXSH2nk.js";import{o as y,a as S,M as b,n as B,h as k,_ as E}from"./index-DtdmE_hK.js";import{X as M,q as A,Z as I,d as Z}from"./index-Cm7YlCft.js";import{d as x}from"./index-CqPyogbW.js";import{Z as C}from"./index-Cb0EycFm.js";import{S as D}from"./stats.min-GTpOrGrX.js";import"./_commonjsHelpers-Cpj98o6Y.js";x.init();C.init();const f=document.getElementById("container"),t=new y,U=t.get(S),e=U.create();e.scene=new b(t);e.renderer=new M(t,f);e.camera=new B(t);t.init();e.scene.setup();e.camera.controls.setLookAt(5,5,5,0,0,0);f.appendChild(e.renderer.three2D.domElement);const X=t.get(k);X.create(e);e.scene.three.background=null;const _=t.get(E),q=await fetch("https://thatopen.github.io/engine_components/resources/road.frag"),z=await q.arrayBuffer(),L=new Uint8Array(z),c=_.load(L);e.scene.three.add(c);const i=t.get(A);i.world=e;i.draw(c);const g=document.getElementById("scene-2d-left");g.components=t;if(!g.world)throw new Error("World not found!");const l=new I(t);l.world=g.world;l.draw(c);const a=document.getElementById("scene-2d-right");a.components=t;if(!a.world)throw new Error("World not found!");const s=t.get(Z);s.world=a.world;s.draw(c);l.onMarkerChange.add(({alignment:r,percentage:d})=>{s.setMarker(r,d,"hover"),i.setMarker(r,d,"hover")});l.onHighlight.add(({mesh:r,point:d})=>{const{index:v,alignment:h}=r.curve,m=h.getPercentageAt(d,"horizontal");if(m===null)return;const{curve:n}=h.getCurveAt(m,"vertical");if(s.highlighter.select(n.mesh),s.setMarker(n.alignment,m,"select"),a.world){n.mesh.geometry.boundingSphere||n.mesh.geometry.computeBoundingSphere();const w=n.mesh.geometry.boundingSphere.clone();w.radius*=1.5,a.world.camera.controls.fitToSphere(w,!0)}i.highlighter.select(r);const p=r.curve.alignment.absolute[v];p.mesh.geometry.computeBoundingSphere();const u=p.mesh.geometry.boundingSphere;u&&e.camera.controls.fitToSphere(u,!0)});const o=new D;o.showPanel(2);document.body.append(o.dom);o.dom.style.left="0px";o.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>o.begin());e.renderer.onAfterUpdate.add(()=>o.end());
+import"./web-ifc-api-Dlf_dxms.js";import{p as y,A as S,e as b,_ as A,O as B,T as k}from"./index-6e07lNWw.js";import{n as E,i as T,s as I,j as M}from"./index-DDq_E_eW.js";import{T as x}from"./index-DtbylpTq.js";import{v as C}from"./index-CO3KVvRB.js";import{S as D}from"./stats.min-bmkVNhZk.js";x.init();C.init();const f=document.getElementById("container"),t=new y,U=t.get(S),e=U.create();e.scene=new b(t);e.renderer=new E(t,f);e.camera=new A(t);t.init();e.scene.setup();e.camera.controls.setLookAt(5,5,5,0,0,0);f.appendChild(e.renderer.three2D.domElement);const _=t.get(B);_.create(e);e.scene.three.background=null;const z=t.get(k),L=await fetch("https://thatopen.github.io/engine_components/resources/road.frag"),N=await L.arrayBuffer(),O=new Uint8Array(N),c=z.load(O);e.scene.three.add(c);const i=t.get(T);i.world=e;i.draw(c);const g=document.getElementById("scene-2d-left");g.components=t;if(!g.world)throw new Error("World not found!");const l=new I(t);l.world=g.world;l.draw(c);const s=document.getElementById("scene-2d-right");s.components=t;if(!s.world)throw new Error("World not found!");const a=t.get(M);a.world=s.world;a.draw(c);l.onMarkerChange.add(({alignment:r,percentage:d})=>{a.setMarker(r,d,"hover"),i.setMarker(r,d,"hover")});l.onHighlight.add(({mesh:r,point:d})=>{const{index:v,alignment:h}=r.curve,m=h.getPercentageAt(d,"horizontal");if(m===null)return;const{curve:n}=h.getCurveAt(m,"vertical");if(a.highlighter.select(n.mesh),a.setMarker(n.alignment,m,"select"),s.world){n.mesh.geometry.boundingSphere||n.mesh.geometry.computeBoundingSphere();const w=n.mesh.geometry.boundingSphere.clone();w.radius*=1.5,s.world.camera.controls.fitToSphere(w,!0)}i.highlighter.select(r);const p=r.curve.alignment.absolute[v];p.mesh.geometry.computeBoundingSphere();const u=p.mesh.geometry.boundingSphere;u&&e.camera.controls.fitToSphere(u,!0)});const o=new D;o.showPanel(2);document.body.append(o.dom);o.dom.style.left="0px";o.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>o.begin());e.renderer.onAfterUpdate.add(()=>o.end());
diff --git a/examples/assets/civilPlanNavigator.js b/examples/assets/civilPlanNavigator.js
index 83b5fdf77..d0f522cf5 100644
--- a/examples/assets/civilPlanNavigator.js
+++ b/examples/assets/civilPlanNavigator.js
@@ -1 +1 @@
-import"./web-ifc-api-JuXSH2nk.js";import{o as p,a as g,M as h,n as u,h as f,_ as w}from"./index-DtdmE_hK.js";import{X as y,q as b,Z as v}from"./index-Cm7YlCft.js";import{d as B}from"./index-CqPyogbW.js";import{Z as S}from"./index-Cb0EycFm.js";import{S as x}from"./stats.min-GTpOrGrX.js";import"./_commonjsHelpers-Cpj98o6Y.js";B.init();S.init();const i=document.getElementById("container"),t=new p,Z=t.get(g),e=Z.create();e.scene=new h(t);e.renderer=new y(t,i);e.camera=new u(t);t.init();e.scene.setup();e.camera.controls.setLookAt(5,5,5,0,0,0);i.appendChild(e.renderer.three2D.domElement);const A=t.get(f);A.create(e);e.scene.three.background=null;const E=t.get(w),I=await fetch("https://thatopen.github.io/engine_components/resources/road.frag"),U=await I.arrayBuffer(),_=new Uint8Array(U),r=E.load(_);e.scene.three.add(r);const a=t.get(b);a.world=e;a.draw(r);const m=document.getElementById("scene-2d"),s=t.get(v);m.components=t;s.world=m.world;await s.draw(r);s.onHighlight.add(({mesh:o})=>{a.highlighter.select(o);const l=o.curve.index,d=o.curve.alignment.absolute[l];d.mesh.geometry.computeBoundingSphere();const c=d.mesh.geometry.boundingSphere;c&&e.camera.controls.fitToSphere(c,!0)});const n=new x;n.showPanel(2);document.body.append(n.dom);n.dom.style.left="0px";n.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>n.begin());e.renderer.onAfterUpdate.add(()=>n.end());
+import"./web-ifc-api-Dlf_dxms.js";import{p,A as g,e as f,_ as h,O as u,T as w}from"./index-6e07lNWw.js";import{n as y,i as b,s as v}from"./index-DDq_E_eW.js";import{T as A}from"./index-DtbylpTq.js";import{v as B}from"./index-CO3KVvRB.js";import{S}from"./stats.min-bmkVNhZk.js";A.init();B.init();const i=document.getElementById("container"),t=new p,T=t.get(g),e=T.create();e.scene=new f(t);e.renderer=new y(t,i);e.camera=new h(t);t.init();e.scene.setup();e.camera.controls.setLookAt(5,5,5,0,0,0);i.appendChild(e.renderer.three2D.domElement);const x=t.get(u);x.create(e);e.scene.three.background=null;const E=t.get(w),I=await fetch("https://thatopen.github.io/engine_components/resources/road.frag"),U=await I.arrayBuffer(),_=new Uint8Array(U),r=E.load(_);e.scene.three.add(r);const a=t.get(b);a.world=e;a.draw(r);const m=document.getElementById("scene-2d"),s=t.get(v);m.components=t;s.world=m.world;await s.draw(r);s.onHighlight.add(({mesh:o})=>{a.highlighter.select(o);const l=o.curve.index,d=o.curve.alignment.absolute[l];d.mesh.geometry.computeBoundingSphere();const c=d.mesh.geometry.boundingSphere;c&&e.camera.controls.fitToSphere(c,!0)});const n=new S;n.showPanel(2);document.body.append(n.dom);n.dom.style.left="0px";n.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>n.begin());e.renderer.onAfterUpdate.add(()=>n.end());
diff --git a/examples/assets/classifier.js b/examples/assets/classifier.js
index abfbd40a8..32d73833e 100644
--- a/examples/assets/classifier.js
+++ b/examples/assets/classifier.js
@@ -1,10 +1,10 @@
-import{a3 as d,C as m}from"./web-ifc-api-JuXSH2nk.js";import{S as u}from"./stats.min-GTpOrGrX.js";import{d as b,R as a,m as c}from"./index-CqPyogbW.js";import{o as p,a as f,M as C,v as w,N as I,h as g,_ as y,b as A}from"./index-DtdmE_hK.js";import"./_commonjsHelpers-Cpj98o6Y.js";const E=document.getElementById("container"),s=new p,L=s.get(f),t=L.create();t.scene=new C(s);t.renderer=new w(s,E);t.camera=new I(s);s.init();t.camera.controls.setLookAt(12,6,8,0,0,-10);t.scene.setup();const R=s.get(g);R.create(t);t.scene.three.background=null;const h=new y(s),F=await fetch("https://thatopen.github.io/engine_components/resources/small.frag"),N=await F.arrayBuffer(),S=new Uint8Array(N),l=h.load(S);t.scene.three.add(l);const o=s.get(A);o.byEntity(l);o.byIfcRel(l,d,"storeys");o.byModel(l.uuid,l);const T=o.find({entities:["IFCWALLSTANDARDCASE"]}),v=o.find({entities:["IFCSLAB"]}),$=o.find({entities:["IFCMEMBER","IFCPLATE"]}),M=o.find({entities:["IFCFURNISHINGELEMENT"]}),U=o.find({entities:["IFCDOOR"]}),B=o.find({models:[l.uuid]}),i=new u;i.showPanel(2);document.body.append(i.dom);i.dom.style.left="0px";i.dom.style.zIndex="unset";t.renderer.onBeforeUpdate.add(()=>i.begin());t.renderer.onAfterUpdate.add(()=>i.end());b.init();const e=new m,r=a.create(()=>c`
+import{ac as m,C as u}from"./web-ifc-api-Dlf_dxms.js";import{S as d}from"./stats.min-bmkVNhZk.js";import{T as b,z as a,m as c}from"./index-DtbylpTq.js";import{p,A as f,e as C,m as w,v as I,O as g,T as A,U as y}from"./index-6e07lNWw.js";const E=document.getElementById("container"),s=new p,T=s.get(f),t=T.create();t.scene=new C(s);t.renderer=new w(s,E);t.camera=new I(s);s.init();t.camera.controls.setLookAt(12,6,8,0,0,-10);t.scene.setup();const L=s.get(g);L.create(t);t.scene.three.background=null;const h=new A(s),F=await fetch("https://thatopen.github.io/engine_components/resources/small.frag"),R=await F.arrayBuffer(),S=new Uint8Array(R),l=h.load(S);t.scene.three.add(l);const o=s.get(y);o.byEntity(l);o.byIfcRel(l,m,"storeys");o.byModel(l.uuid,l);const U=o.find({entities:["IFCWALLSTANDARDCASE"]}),v=o.find({entities:["IFCSLAB"]}),N=o.find({entities:["IFCMEMBER","IFCPLATE"]}),$=o.find({entities:["IFCFURNISHINGELEMENT"]}),B=o.find({entities:["IFCDOOR"]}),D=o.find({models:[l.uuid]}),i=new d;i.showPanel(2);document.body.append(i.dom);i.dom.style.left="0px";i.dom.style.zIndex="unset";t.renderer.onBeforeUpdate.add(()=>i.begin());t.renderer.onAfterUpdate.add(()=>i.end());b.init();const e=new u,r=a.create(()=>c`
- `);document.body.append(r);const D=a.create(()=>c`
+ `);document.body.append(r);const O=a.create(()=>c`
- `);document.body.append(D);
+ `);document.body.append(O);
diff --git a/examples/assets/clipEdges.js b/examples/assets/clipEdges.js
index 145721eff..eb1884b28 100644
--- a/examples/assets/clipEdges.js
+++ b/examples/assets/clipEdges.js
@@ -1,4 +1,4 @@
-import{B as w,M as y,a as d,b as c,L as b}from"./web-ifc-api-JuXSH2nk.js";import{S as f}from"./stats.min-GTpOrGrX.js";import{d as k,R as m,m as p}from"./index-CqPyogbW.js";import{o as x,a as v,M as P,N as $,h as B,t as I,l as L}from"./index-DtdmE_hK.js";import{$ as C,K as D,c as z}from"./index-Cm7YlCft.js";import"./_commonjsHelpers-Cpj98o6Y.js";const u=document.getElementById("container"),o=new x,E=o.get(v),e=E.create();e.scene=new P(o);e.renderer=new C(o,u);e.camera=new $(o);e.renderer.postproduction.enabled=!0;e.renderer.postproduction.customEffects.outlineEnabled=!0;o.init();e.camera.controls.setLookAt(12,6,8,0,0,-10);e.scene.setup();const h=o.get(B);h.config.color.setHex(6710886);const S=h.create(e);e.renderer.postproduction.customEffects.excludedMeshes.push(S.three);e.scene.three.background=null;const M=new w(3,3,3),g=new y({color:"#6528D7"}),a=new d(M,g);a.position.set(-2,1.5,0);e.scene.three.add(a);e.meshes.add(a);const l=new d(M,g);l.position.set(2,1.5,0);e.scene.three.add(l);e.meshes.add(l);const R=o.get(I);R.get(e);const n=o.get(L);n.enabled=!0;const r=o.get(D);n.Type=z;const A=new c({color:"lightblue",side:2}),O=new b({color:"blue"}),F=new c({color:"blue",opacity:.5,side:2,transparent:!0});r.styles.create("Red lines",new Set([a]),e,O,A,F);const G=new c({color:"salmon",side:2}),K=new b({color:"red"}),N=new c({color:"red",opacity:.5,side:2,transparent:!0});r.styles.create("Blue lines",new Set([l]),e,K,G,N);u.ondblclick=()=>{n.enabled&&n.create(e)};window.onkeydown=t=>{(t.code==="Delete"||t.code==="Backspace")&&n.enabled&&n.delete(e)};const s=new f;s.showPanel(2);document.body.append(s.dom);s.dom.style.left="0px";s.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>s.begin());e.renderer.onAfterUpdate.add(()=>s.end());k.init();const i=m.create(()=>p`
+import{B as M,M as y,a as d,b as c,L as b}from"./web-ifc-api-Dlf_dxms.js";import{S as f}from"./stats.min-bmkVNhZk.js";import{T as k,z as m,m as p}from"./index-DtbylpTq.js";import{p as v,A as x,e as P,v as B,O as I,o as L,S as $}from"./index-6e07lNWw.js";import{P as z,O,g as S}from"./index-DDq_E_eW.js";const u=document.getElementById("container"),o=new v,C=o.get(x),e=C.create();e.scene=new P(o);e.renderer=new z(o,u);e.camera=new B(o);e.renderer.postproduction.enabled=!0;e.renderer.postproduction.customEffects.outlineEnabled=!0;o.init();e.camera.controls.setLookAt(12,6,8,0,0,-10);e.scene.setup();const h=o.get(I);h.config.color.setHex(6710886);const D=h.create(e);e.renderer.postproduction.customEffects.excludedMeshes.push(D.three);e.scene.three.background=null;const g=new M(3,3,3),w=new y({color:"#6528D7"}),a=new d(g,w);a.position.set(-2,1.5,0);e.scene.three.add(a);e.meshes.add(a);const l=new d(g,w);l.position.set(2,1.5,0);e.scene.three.add(l);e.meshes.add(l);const A=o.get(L);A.get(e);const n=o.get($);n.enabled=!0;const r=o.get(O);n.Type=S;const E=new c({color:"lightblue",side:2}),T=new b({color:"blue"}),F=new c({color:"blue",opacity:.5,side:2,transparent:!0});r.styles.create("Red lines",new Set([a]),e,T,E,F);const G=new c({color:"salmon",side:2}),R=new b({color:"red"}),U=new c({color:"red",opacity:.5,side:2,transparent:!0});r.styles.create("Blue lines",new Set([l]),e,R,G,U);u.ondblclick=()=>{n.enabled&&n.create(e)};window.onkeydown=t=>{(t.code==="Delete"||t.code==="Backspace")&&n.enabled&&n.delete(e)};const s=new f;s.showPanel(2);document.body.append(s.dom);s.dom.style.left="0px";s.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>s.begin());e.renderer.onAfterUpdate.add(()=>s.end());k.init();const i=m.create(()=>p`
- `);document.body.append(i);const T=m.create(()=>p`
+ `);document.body.append(i);const W=m.create(()=>p`
- `);document.body.append(T);
+ `);document.body.append(W);
diff --git a/examples/assets/clipper.js b/examples/assets/clipper.js
index 5cf04ec75..126ea9a81 100644
--- a/examples/assets/clipper.js
+++ b/examples/assets/clipper.js
@@ -1,4 +1,4 @@
-import{B as r,M as m,a as d}from"./web-ifc-api-JuXSH2nk.js";import{S as p}from"./stats.min-GTpOrGrX.js";import{d as u,R as s,m as c}from"./index-CqPyogbW.js";import{o as h,a as g,M as k,v as w,N as v,t as y,l as M}from"./index-DtdmE_hK.js";import"./_commonjsHelpers-Cpj98o6Y.js";const b=document.getElementById("container"),a=new h,f=a.get(g),e=f.create();e.scene=new k(a);e.renderer=new w(a,b);e.camera=new v(a);a.init();e.camera.controls.setLookAt(10,10,10,0,0,0);e.scene.setup();e.scene.three.background=null;const x=new r(3,3,3),$=new m({color:"#6528D7"}),o=new d(x,$);o.position.set(0,1.5,0);e.scene.three.add(o);e.meshes.add(o);const P=a.get(y);P.get(e);const t=a.get(M);t.enabled=!0;b.ondblclick=()=>{t.enabled&&t.create(e)};window.onkeydown=n=>{(n.code==="Delete"||n.code==="Backspace")&&t.enabled&&t.delete(e)};const l=new p;l.showPanel(2);document.body.append(l.dom);l.dom.style.left="0px";l.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>l.begin());e.renderer.onAfterUpdate.add(()=>l.end());u.init();const i=s.create(()=>c`
+import{B as r,M as m,a as d,C as p}from"./web-ifc-api-Dlf_dxms.js";import{S as u}from"./stats.min-bmkVNhZk.js";import{T as h,z as s,m as c}from"./index-DtbylpTq.js";import{p as g,A as f,e as k,m as w,v,o as y,S as M}from"./index-6e07lNWw.js";const b=document.getElementById("container"),t=new g,x=t.get(f),e=x.create();e.scene=new k(t);e.renderer=new w(t,b);e.camera=new v(t);t.init();e.camera.controls.setLookAt(10,10,10,0,0,0);e.scene.setup();e.scene.three.background=null;const C=new r(3,3,3),$=new m({color:"#6528D7"}),a=new d(C,$);a.position.set(0,1.5,0);e.scene.three.add(a);e.meshes.add(a);const P=t.get(y);P.get(e);const o=t.get(M);o.enabled=!0;b.ondblclick=()=>{o.enabled&&o.create(e)};window.onkeydown=n=>{(n.code==="Delete"||n.code==="Backspace")&&o.enabled&&o.delete(e)};const l=new u;l.showPanel(2);document.body.append(l.dom);l.dom.style.left="0px";l.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>l.begin());e.renderer.onAfterUpdate.add(()=>l.end());h.init();const i=s.create(()=>c`
- `);document.body.append(i);const C=s.create(()=>c`
+ `);document.body.append(i);const z=s.create(()=>c`
- `);document.body.append(C);
+ `);document.body.append(z);
diff --git a/examples/assets/cullers.js b/examples/assets/cullers.js
index e50826661..7316b3f29 100644
--- a/examples/assets/cullers.js
+++ b/examples/assets/cullers.js
@@ -1 +1 @@
-import{B as c,ad as l,a as i}from"./web-ifc-api-JuXSH2nk.js";import{S as m}from"./stats.min-GTpOrGrX.js";import{o as p,a as u,M as y,v as b,N as g,h as f,c as h}from"./index-DtdmE_hK.js";import"./_commonjsHelpers-Cpj98o6Y.js";const w=document.getElementById("container"),t=new p,M=t.get(u),e=M.create();e.scene=new y(t);e.renderer=new b(t,w);e.camera=new g(t);t.init();e.camera.controls.setLookAt(13,13,13,0,0,0);e.scene.setup();const x=t.get(f);x.create(e);e.scene.three.background=null;const v=t.get(h),o=v.create(e);o.threshold=200;o.renderDebugFrame=!0;const s=o.renderer.domElement;document.body.appendChild(s);s.style.position="fixed";s.style.left="0";s.style.bottom="0";s.style.visibility="collapse";const B=new c(2,2,2),U=new l({color:"#6528D7"});function d(a){return Math.random()*a}function E(){for(let a=0;a<300;a++){const n=new i(B,U);n.position.x=d(10),n.position.y=d(10),n.position.z=d(10),n.updateMatrix(),e.scene.three.add(n),o.add(n)}}E();o.needsUpdate=!0;e.camera.controls.addEventListener("controlend",()=>{o.needsUpdate=!0});const r=new m;r.showPanel(2);document.body.append(r.dom);r.dom.style.left="0px";r.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>r.begin());e.renderer.onAfterUpdate.add(()=>r.end());
+import{B as c,Z as i,a as l}from"./web-ifc-api-Dlf_dxms.js";import{S as m}from"./stats.min-bmkVNhZk.js";import{p,A as u,e as g,m as y,v as b,O as f,F as w}from"./index-6e07lNWw.js";const h=document.getElementById("container"),t=new p,x=t.get(u),e=x.create();e.scene=new g(t);e.renderer=new y(t,h);e.camera=new b(t);t.init();e.camera.controls.setLookAt(13,13,13,0,0,0);e.scene.setup();const M=t.get(f);M.create(e);e.scene.three.background=null;const v=t.get(w),o=v.create(e);o.threshold=200;o.config.renderDebugFrame=!0;const s=o.renderer.domElement;document.body.appendChild(s);s.style.position="fixed";s.style.left="0";s.style.bottom="0";s.style.visibility="collapse";const A=new c(2,2,2),B=new i({color:"#6528D7"});function d(a){return Math.random()*a}function F(){for(let a=0;a<300;a++){const n=new l(A,B);n.position.x=d(10),n.position.y=d(10),n.position.z=d(10),n.updateMatrix(),e.scene.three.add(n),o.add(n)}}F();o.needsUpdate=!0;e.camera.controls.addEventListener("controlend",()=>{o.needsUpdate=!0});const r=new m;r.showPanel(2);document.body.append(r.dom);r.dom.style.left="0px";r.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>r.begin());e.renderer.onAfterUpdate.add(()=>r.end());
diff --git a/examples/assets/edgeMeasurement.js b/examples/assets/edgeMeasurement.js
index 282b86a28..46e1657ab 100644
--- a/examples/assets/edgeMeasurement.js
+++ b/examples/assets/edgeMeasurement.js
@@ -1 +1 @@
-import{a as c}from"./web-ifc-api-JuXSH2nk.js";import{S as i}from"./stats.min-GTpOrGrX.js";import{o as l,a as m,M as f,N as w,h as p,_ as h}from"./index-DtdmE_hK.js";import{$ as g,n as u}from"./index-Cm7YlCft.js";import"./_commonjsHelpers-Cpj98o6Y.js";const r=document.getElementById("container"),t=new l,y=t.get(m),e=y.create();e.scene=new f(t);e.renderer=new g(t,r);e.camera=new w(t);t.init();e.camera.controls.setLookAt(5,5,5,0,0,0);e.scene.setup();const b=t.get(p);b.create(e);e.scene.three.background=null;const k=new h(t),A=await fetch("https://thatopen.github.io/engine_components/resources/small.frag"),B=await A.arrayBuffer(),K=new Uint8Array(B),d=k.load(K);e.scene.three.add(d);for(const o of d.children)o instanceof c&&e.meshes.add(o);const n=t.get(u);n.world=e;n.enabled=!0;r.ondblclick=()=>n.create();let a;window.addEventListener("keydown",o=>{o.code==="KeyO"?n.delete():o.code==="KeyS"?(a=n.get(),n.deleteAll()):o.code==="KeyL"&&a&&n.set(a)});const s=new i;s.showPanel(2);document.body.append(s.dom);s.dom.style.left="0px";s.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>s.begin());e.renderer.onAfterUpdate.add(()=>s.end());
+import{a as c}from"./web-ifc-api-Dlf_dxms.js";import{S as i}from"./stats.min-bmkVNhZk.js";import{p as l,A as f,e as m,v as p,O as w,T as h}from"./index-6e07lNWw.js";import{P as g,h as u}from"./index-DDq_E_eW.js";const r=document.getElementById("container"),t=new l,y=t.get(f),e=y.create();e.scene=new m(t);e.renderer=new g(t,r);e.camera=new p(t);t.init();e.camera.controls.setLookAt(5,5,5,0,0,0);e.scene.setup();const b=t.get(w);b.create(e);e.scene.three.background=null;const A=new h(t),k=await fetch("https://thatopen.github.io/engine_components/resources/small.frag"),B=await k.arrayBuffer(),K=new Uint8Array(B),d=A.load(K);e.scene.three.add(d);for(const o of d.children)o instanceof c&&e.meshes.add(o);const n=t.get(u);n.world=e;n.enabled=!0;r.ondblclick=()=>n.create();let a;window.addEventListener("keydown",o=>{o.code==="KeyO"?n.delete():o.code==="KeyS"?(a=n.get(),n.deleteAll()):o.code==="KeyL"&&a&&n.set(a)});const s=new i;s.showPanel(2);document.body.append(s.dom);s.dom.style.left="0px";s.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>s.begin());e.renderer.onAfterUpdate.add(()=>s.end());
diff --git a/examples/assets/exploder.js b/examples/assets/exploder.js
index 4b5b597ce..29f0171fd 100644
--- a/examples/assets/exploder.js
+++ b/examples/assets/exploder.js
@@ -1,15 +1,15 @@
-import{av as l}from"./web-ifc-api-JuXSH2nk.js";import{S as d}from"./stats.min-GTpOrGrX.js";import{d as m,R as a,m as i}from"./index-CqPyogbW.js";import{o as p,a as b,M as u,v as g,N as h,h as w,_ as f,x,w as v,b as y}from"./index-DtdmE_hK.js";import"./_commonjsHelpers-Cpj98o6Y.js";const S=document.getElementById("container"),e=new p,L=e.get(b),t=L.create();t.scene=new u(e);t.renderer=new g(e,S);t.camera=new h(e);e.init();t.camera.controls.setLookAt(12,6,8,0,0,-10);t.scene.setup();const k=e.get(w);k.create(t);t.scene.three.background=null;const I=new f(e),R=await fetch("https://thatopen.github.io/engine_components/resources/small.frag"),_=await R.arrayBuffer(),B=new Uint8Array(_),s=I.load(B);t.scene.three.add(s);const E=await fetch("https://thatopen.github.io/engine_components/resources/small.json");s.setLocalProperties(await E.json());const r=e.get(x),M=await fetch("https://thatopen.github.io/engine_components/resources/small-relations.json"),N=r.getRelationsMapFromJSON(await M.text());r.setRelationMap(s,N);const U=e.get(v),j=e.get(y);await j.bySpatialStructure(s,{isolate:new Set([l])});const n=new d;n.showPanel(2);document.body.append(n.dom);n.dom.style.left="0px";n.dom.style.zIndex="unset";t.renderer.onBeforeUpdate.add(()=>n.begin());t.renderer.onAfterUpdate.add(()=>n.end());m.init();const o=a.create(()=>i`
+import{aA as l}from"./web-ifc-api-Dlf_dxms.js";import{S as m}from"./stats.min-bmkVNhZk.js";import{T as p,z as a,m as i}from"./index-DtbylpTq.js";import{p as d,A as b,e as u,m as g,v as h,O as f,T as w,k as x,z as y,U as v}from"./index-6e07lNWw.js";const k=document.getElementById("container"),e=new d,S=e.get(b),t=S.create();t.scene=new u(e);t.renderer=new g(e,k);t.camera=new h(e);e.init();t.camera.controls.setLookAt(12,6,8,0,0,-10);t.scene.setup();const A=e.get(f);A.create(t);t.scene.three.background=null;const L=new w(e),T=await fetch("https://thatopen.github.io/engine_components/resources/small.frag"),U=await T.arrayBuffer(),z=new Uint8Array(U),s=L.load(z);t.scene.three.add(s);const I=await fetch("https://thatopen.github.io/engine_components/resources/small.json");s.setLocalProperties(await I.json());const r=e.get(x),B=await fetch("https://thatopen.github.io/engine_components/resources/small-relations.json"),E=r.getRelationsMapFromJSON(await B.text());r.setRelationMap(s,E);const O=e.get(y),j=e.get(v);await j.bySpatialStructure(s,{isolate:new Set([l])});const n=new m;n.showPanel(2);document.body.append(n.dom);n.dom.style.left="0px";n.dom.style.zIndex="unset";t.renderer.onBeforeUpdate.add(()=>n.begin());t.renderer.onAfterUpdate.add(()=>n.end());p.init();const o=a.create(()=>i`
- `);document.body.append(o);const A=a.create(()=>i`
+ `);document.body.append(o);const F=a.create(()=>i`
- `);document.body.append(A);
+ `);document.body.append(F);
diff --git a/examples/assets/faceMeasurement.js b/examples/assets/faceMeasurement.js
index a12e697ff..ba39f55aa 100644
--- a/examples/assets/faceMeasurement.js
+++ b/examples/assets/faceMeasurement.js
@@ -1 +1 @@
-import{a as c}from"./web-ifc-api-JuXSH2nk.js";import{S as i}from"./stats.min-GTpOrGrX.js";import{o as l,a as m,M as f,N as w,h as p,_ as h}from"./index-DtdmE_hK.js";import{$ as g,t as u}from"./index-Cm7YlCft.js";import"./_commonjsHelpers-Cpj98o6Y.js";const r=document.getElementById("container"),t=new l,y=t.get(m),e=y.create();e.scene=new f(t);e.renderer=new g(t,r);e.camera=new w(t);t.init();e.camera.controls.setLookAt(5,5,5,0,0,0);e.scene.setup();const b=t.get(p);b.create(e);e.scene.three.background=null;const k=new h(t),A=await fetch("https://thatopen.github.io/engine_components/resources/small.frag"),B=await A.arrayBuffer(),K=new Uint8Array(B),d=k.load(K);e.scene.three.add(d);for(const o of d.children)o instanceof c&&e.meshes.add(o);const n=t.get(u);n.world=e;n.enabled=!0;r.ondblclick=()=>n.create();let a;window.addEventListener("keydown",o=>{o.code==="KeyO"?n.delete():o.code==="KeyS"?(a=n.get(),n.deleteAll()):o.code==="KeyL"&&a&&n.set(a)});const s=new i;s.showPanel(2);document.body.append(s.dom);s.dom.style.left="0px";s.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>s.begin());e.renderer.onAfterUpdate.add(()=>s.end());
+import{a as c}from"./web-ifc-api-Dlf_dxms.js";import{S as i}from"./stats.min-bmkVNhZk.js";import{p as l,A as f,e as m,v as p,O as w,T as g}from"./index-6e07lNWw.js";import{P as h,c as u}from"./index-DDq_E_eW.js";const r=document.getElementById("container"),t=new l,y=t.get(f),e=y.create();e.scene=new m(t);e.renderer=new h(t,r);e.camera=new p(t);t.init();e.camera.controls.setLookAt(5,5,5,0,0,0);e.scene.setup();const b=t.get(w);b.create(e);e.scene.three.background=null;const A=new g(t),k=await fetch("https://thatopen.github.io/engine_components/resources/small.frag"),B=await k.arrayBuffer(),K=new Uint8Array(B),d=A.load(K);e.scene.three.add(d);for(const o of d.children)o instanceof c&&e.meshes.add(o);const n=t.get(u);n.world=e;n.enabled=!0;r.ondblclick=()=>n.create();let a;window.addEventListener("keydown",o=>{o.code==="KeyO"?n.delete():o.code==="KeyS"?(a=n.get(),n.deleteAll()):o.code==="KeyL"&&a&&n.set(a)});const s=new i;s.showPanel(2);document.body.append(s.dom);s.dom.style.left="0px";s.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>s.begin());e.renderer.onAfterUpdate.add(()=>s.end());
diff --git a/examples/assets/fragmentsManager.js b/examples/assets/fragmentsManager.js
index 1ffe5ea0a..13039e6a4 100644
--- a/examples/assets/fragmentsManager.js
+++ b/examples/assets/fragmentsManager.js
@@ -1,26 +1,26 @@
-import"./web-ifc-api-JuXSH2nk.js";import{S as u}from"./stats.min-GTpOrGrX.js";import{o as p,a as b,M as g,v as f,N as w,h,_ as y}from"./index-DtdmE_hK.js";import{d as k,R as l,m as d}from"./index-CqPyogbW.js";import"./_commonjsHelpers-Cpj98o6Y.js";const v=document.getElementById("container"),n=new p,L=n.get(b),e=L.create();e.scene=new g(n);e.renderer=new f(n,v);e.camera=new w(n);n.init();e.camera.controls.setLookAt(12,6,8,0,0,-10);e.scene.setup();const x=n.get(h);x.create(e);e.scene.three.background=null;const s=n.get(y);let m="";async function F(){if(s.groups.size)return;const t=await(await fetch("https://thatopen.github.io/engine_components/resources/small.frag")).arrayBuffer(),c=new Uint8Array(t),r=s.load(c);e.scene.three.add(r),m=r.uuid}function U(o){const t=document.createElement("a");t.href=URL.createObjectURL(o),t.download=o.name,document.body.appendChild(t),t.click(),t.remove()}function B(){if(!s.groups.size)return;const o=s.groups.get(m);if(!o)return;const t=s.export(o),c=new Blob([t]),r=new File([c],"small.frag");U(r)}function R(){s.dispose()}const a=new u;a.showPanel(2);document.body.append(a.dom);a.dom.style.left="0px";a.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>a.begin());e.renderer.onAfterUpdate.add(()=>a.end());k.init();const i=l.create(()=>d`
+import"./web-ifc-api-Dlf_dxms.js";import{S as u}from"./stats.min-bmkVNhZk.js";import{p,A as b,e as g,m as f,v as w,O as h,T as y}from"./index-6e07lNWw.js";import{T as k,z as l,m}from"./index-DtbylpTq.js";const v=document.getElementById("container"),n=new p,L=n.get(b),e=L.create();e.scene=new g(n);e.renderer=new f(n,v);e.camera=new w(n);n.init();e.camera.controls.setLookAt(12,6,8,0,0,-10);e.scene.setup();const x=n.get(h);x.create(e);e.scene.three.background=null;const s=n.get(y);let d="";async function z(){if(s.groups.size)return;const t=await(await fetch("https://thatopen.github.io/engine_components/resources/small.frag")).arrayBuffer(),c=new Uint8Array(t),r=s.load(c);e.scene.three.add(r),d=r.uuid}function A(o){const t=document.createElement("a");t.href=URL.createObjectURL(o),t.download=o.name,document.body.appendChild(t),t.click(),t.remove()}function F(){if(!s.groups.size)return;const o=s.groups.get(d);if(!o)return;const t=s.export(o),c=new Blob([t]),r=new File([c],"small.frag");A(r)}function T(){s.dispose()}const a=new u;a.showPanel(2);document.body.append(a.dom);a.dom.style.left="0px";a.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>a.begin());e.renderer.onAfterUpdate.add(()=>a.end());k.init();const i=l.create(()=>m`
- `);document.body.append(i);const $=l.create(()=>d`
+ `);document.body.append(i);const U=l.create(()=>m`
- `);document.body.append($);
+ `);document.body.append(U);
diff --git a/examples/assets/grids.js b/examples/assets/grids.js
index 737f490db..e5cc0a066 100644
--- a/examples/assets/grids.js
+++ b/examples/assets/grids.js
@@ -1 +1,31 @@
-import{a as t,B as s}from"./web-ifc-api-JuXSH2nk.js";import{o as r,a,M as d,v as c,N as m,h as l}from"./index-DtdmE_hK.js";const w=document.getElementById("container"),n=new r,i=n.get(a),e=i.create();e.scene=new d(n);e.renderer=new c(n,w);e.camera=new m(n);n.init();const g=new t(new s);e.scene.three.add(g);e.scene.three.background=null;const p=n.get(l),h=p.create(e);console.log(h);const o=new Stats;o.showPanel(2);document.body.append(o.dom);o.dom.style.left="0px";o.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>o.begin());e.renderer.onAfterUpdate.add(()=>o.end());
+import{a as c,B as l,b as m,C as b}from"./web-ifc-api-Dlf_dxms.js";import{S as d}from"./stats.min-bmkVNhZk.js";import{p,A as u,e as g,m as h,v,O as f}from"./index-6e07lNWw.js";import{T as w,z as a,m as r}from"./index-DtbylpTq.js";const y=document.getElementById("container"),o=new p,x=o.get(u),e=x.create();e.scene=new g(o);e.renderer=new h(o,y);e.camera=new v(o);o.init();const z=new c(new l,new m({color:"red"}));e.scene.three.add(z);e.scene.three.background=null;const G=o.get(f),i=G.create(e);console.log(i);w.init();const t=a.create(()=>r`
+
+ `);document.body.append(t);const k=a.create(()=>r`
+
+ `);document.body.append(k);const s=new d;s.showPanel(2);document.body.append(s.dom);s.dom.style.left="0px";s.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>s.begin());e.renderer.onAfterUpdate.add(()=>s.end());
diff --git a/examples/assets/hider.js b/examples/assets/hider.js
index 5e78a22bf..b8aa47173 100644
--- a/examples/assets/hider.js
+++ b/examples/assets/hider.js
@@ -1,4 +1,4 @@
-import{av as S}from"./web-ifc-api-JuXSH2nk.js";import{S as k}from"./stats.min-GTpOrGrX.js";import{d as x,R as r,m as l}from"./index-CqPyogbW.js";import{o as v,a as I,M as F,v as C,N as L,h as M,_ as N,x as _,I as j,b as R}from"./index-DtdmE_hK.js";import"./_commonjsHelpers-Cpj98o6Y.js";const $=document.getElementById("container"),e=new v,B=e.get(I),t=B.create();t.scene=new F(e);t.renderer=new C(e,$);t.camera=new L(e);e.init();t.camera.controls.setLookAt(12,6,8,0,0,-10);t.scene.setup();const E=e.get(M);E.create(t);t.scene.three.background=null;const b=e.get(N),O=await fetch("https://thatopen.github.io/engine_components/resources/small.frag"),U=await O.arrayBuffer(),A=new Uint8Array(U),i=b.load(A);t.scene.three.add(i);const q=await fetch("https://thatopen.github.io/engine_components/resources/small.json");i.setLocalProperties(await q.json());const d=e.get(_),D=await fetch("https://thatopen.github.io/engine_components/resources/small-relations.json"),P=d.getRelationsMapFromJSON(await D.text());d.setRelationMap(i,P);const f=e.get(j),s=e.get(R);s.byEntity(i);await s.bySpatialStructure(i,{isolate:new Set([S])});const a=new k;a.showPanel(2);document.body.append(a.dom);a.dom.style.left="0px";a.dom.style.zIndex="unset";t.renderer.onBeforeUpdate.add(()=>a.begin());t.renderer.onAfterUpdate.add(()=>a.end());x.init();const g={},T=Object.keys(s.list.spatialStructures);for(const n of T)g[n]=!0;const h={},z=Object.keys(s.list.entities);for(const n of z)h[n]=!0;const o=r.create(()=>l`
+import{aA as k}from"./web-ifc-api-Dlf_dxms.js";import{S}from"./stats.min-bmkVNhZk.js";import{T as v,z as r,m as l}from"./index-DtbylpTq.js";import{p as x,A as F,e as A,m as C,v as I,O as L,T as O,k as T,a as U,U as j}from"./index-6e07lNWw.js";const M=document.getElementById("container"),e=new x,$=e.get(F),t=$.create();t.scene=new A(e);t.renderer=new C(e,M);t.camera=new I(e);e.init();t.camera.controls.setLookAt(12,6,8,0,0,-10);t.scene.setup();const B=e.get(L);B.create(t);t.scene.three.background=null;const b=e.get(O),E=await fetch("https://thatopen.github.io/engine_components/resources/small.frag"),N=await E.arrayBuffer(),_=new Uint8Array(N),i=b.load(_);t.scene.three.add(i);const z=await fetch("https://thatopen.github.io/engine_components/resources/small.json");i.setLocalProperties(await z.json());const d=e.get(T),R=await fetch("https://thatopen.github.io/engine_components/resources/small-relations.json"),q=d.getRelationsMapFromJSON(await R.text());d.setRelationMap(i,q);const f=e.get(U),o=e.get(j);o.byEntity(i);await o.bySpatialStructure(i,{isolate:new Set([k])});const a=new S;a.showPanel(2);document.body.append(a.dom);a.dom.style.left="0px";a.dom.style.zIndex="unset";t.renderer.onBeforeUpdate.add(()=>a.begin());t.renderer.onAfterUpdate.add(()=>a.end());v.init();const g={},D=Object.keys(o.list.spatialStructures);for(const n of D)g[n]=!0;const h={},P=Object.keys(o.list.entities);for(const n of P)h[n]=!0;const s=r.create(()=>l`
- `);document.body.append(o);const G=o.querySelector("bim-panel-section[name='Floors']"),H=o.querySelector("bim-panel-section[name='Categories']");for(const n in g){const m=r.create(()=>l`
+ `);document.body.append(s);const G=s.querySelector("bim-panel-section[name='Floors']"),H=s.querySelector("bim-panel-section[name='Categories']");for(const n in g){const m=r.create(()=>l`
{const c=s.list.spatialStructures[n];if(c&&c.id!==null)for(const[Y,u]of b.groups){const w=d.getEntityChildren(u,c.id),y=u.getFragmentMap(w);f.set(p.value,y)}}}">
+ @change="${({target:p})=>{const c=o.list.spatialStructures[n];if(c&&c.id!==null)for(const[Y,u]of b.groups){const w=d.getEntityChildren(u,c.id),y=u.getFragmentMap(w);f.set(p.value,y)}}}">
`);G.append(m)}for(const n in h){const m=r.create(()=>l`
{const c=s.find({entities:[n]});f.set(p.value,c)}}">
+ @change="${({target:p})=>{const c=o.find({entities:[n]});f.set(p.value,c)}}">
`);H.append(m)}const J=r.create(()=>l`
`);document.body.append(J);
diff --git a/examples/assets/highlighter.js b/examples/assets/highlighter.js
index a0284e5e6..e78ae6fb7 100644
--- a/examples/assets/highlighter.js
+++ b/examples/assets/highlighter.js
@@ -1 +1 @@
-import{b as s}from"./web-ifc-api-JuXSH2nk.js";import{o as c,a as d,M as l,N as i,h as m,_ as p}from"./index-DtdmE_hK.js";import{$ as u,r as h,W as g}from"./index-Cm7YlCft.js";import{S as f}from"./stats.min-GTpOrGrX.js";import"./_commonjsHelpers-Cpj98o6Y.js";const w=document.getElementById("container"),t=new c,b=t.get(d),e=b.create();e.scene=new l(t);e.renderer=new u(t,w);e.camera=new i(t);t.init();e.renderer.postproduction.enabled=!0;e.camera.controls.setLookAt(12,6,8,0,0,-10);e.scene.setup();const x=t.get(m),y=x.create(e);e.renderer.postproduction.customEffects.excludedMeshes.push(y.three);e.scene.three.background=null;const M=new p(t),B=await fetch("https://thatopen.github.io/engine_components/resources/small.frag"),A=await B.arrayBuffer(),S=new Uint8Array(A),U=M.load(S);e.scene.three.add(U);const r=t.get(h);r.setup({world:e});r.zoomToSelection=!0;const n=t.get(g);n.world=e;n.enabled=!0;n.create("example",new s({color:12382500,transparent:!0,opacity:.5}));r.events.select.onHighlight.add(a=>{n.clear("example"),n.add("example",a)});r.events.select.onClear.add(()=>{n.clear("example")});const o=new f;o.showPanel(2);document.body.append(o.dom);o.dom.style.left="0px";o.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>o.begin());e.renderer.onAfterUpdate.add(()=>o.end());
+import{b as a}from"./web-ifc-api-Dlf_dxms.js";import{p as c,A as d,e as l,v as i,O as p,T as m}from"./index-6e07lNWw.js";import{P as u,u as f,$ as g}from"./index-DDq_E_eW.js";import{S as h}from"./stats.min-bmkVNhZk.js";const w=document.getElementById("container"),t=new c,b=t.get(d),e=b.create();e.scene=new l(t);e.renderer=new u(t,w);e.camera=new i(t);t.init();e.renderer.postproduction.enabled=!0;e.camera.controls.setLookAt(12,6,8,0,0,-10);e.scene.setup();const x=t.get(p),y=x.create(e);e.renderer.postproduction.customEffects.excludedMeshes.push(y.three);e.scene.three.background=null;const A=new m(t),v=await fetch("https://thatopen.github.io/engine_components/resources/small.frag"),B=await v.arrayBuffer(),M=new Uint8Array(B),P=A.load(M);e.scene.three.add(P);const o=t.get(f);o.setup({world:e});o.zoomToSelection=!0;const n=t.get(g);n.world=e;n.enabled=!0;n.create("example",new a({color:12382500,transparent:!0,opacity:.5}));o.events.select.onHighlight.add(s=>{n.clear("example"),n.add("example",s)});o.events.select.onClear.add(()=>{n.clear("example")});const r=new h;r.showPanel(2);document.body.append(r.dom);r.dom.style.left="0px";r.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>r.begin());e.renderer.onAfterUpdate.add(()=>r.end());
diff --git a/examples/assets/iDSSpecifications.js b/examples/assets/iDSSpecifications.js
new file mode 100644
index 000000000..dd6a3c706
--- /dev/null
+++ b/examples/assets/iDSSpecifications.js
@@ -0,0 +1 @@
+import"./web-ifc-api-Dlf_dxms.js";import{C as o,I as r,a as c,b as p,c as m}from"./index-Cs1SYVzD.js";const e=new o,l=e.get(r);await l.setup();const s=e.get(c),t=s.create("My First IDS!",["IFC4X3_ADD2"]);t.description="Description";t.instructions="Instructions";const d=new p(e,{type:"enumeration",parameter:["IFCSLAB","IFCWALL"]});t.applicability.add(d);const a=new m(e,{type:"simple",parameter:"Pset_SlabCommon"},{type:"simple",parameter:"IsExternal"});a.value={type:"simple",parameter:!1};t.requirements.add(a);const I="My Custom IDS",y=s.export({title:I}),i=new File([y],"idsTitle.ids"),n=document.createElement("a");n.href=URL.createObjectURL(i);n.download=i.name;
diff --git a/examples/assets/ifcFinder.js b/examples/assets/ifcFinder.js
new file mode 100644
index 000000000..de69a2461
--- /dev/null
+++ b/examples/assets/ifcFinder.js
@@ -0,0 +1,24 @@
+import"./web-ifc-api-Dlf_dxms.js";import{T as w,z as r,m as i}from"./index-DtbylpTq.js";import{S as h}from"./stats.min-bmkVNhZk.js";import{p as v,A as x,e as R,m as F,v as k,O as I,T as $,k as A,G as T,d as B,R as C,a as L}from"./index-6e07lNWw.js";const O=document.getElementById("container"),e=new v,S=e.get(x),t=S.create();t.scene=new R(e);t.renderer=new F(e,O);t.camera=new k(e);e.init();t.camera.controls.setLookAt(12,6,8,0,0,-10);t.scene.setup();const U=e.get(I);U.create(t);t.scene.three.background=null;const z=new $(e),E=await fetch("https://thatopen.github.io/engine_components/resources/small.frag"),G=await E.arrayBuffer(),M=new Uint8Array(G),c=z.load(M);t.scene.three.add(c);const m=e.get(A),_=await fetch("https://thatopen.github.io/engine_components/resources/small-relations.json"),j=m.getRelationsMapFromJSON(await _.text());m.setRelationMap(c,j);const N=e.get(T),n=N.create(),P=await fetch("https://thatopen.github.io/engine_components/resources/small.ifc"),b=new File([await P.arrayBuffer()],"example"),u=new B(e,{name:"category",inclusive:!1,rules:[]});n.add(u);const p={type:"category",value:/IfcWallStandardCase/};u.rules.push(p);const d={type:"property",name:/.*/,value:/yeso/},g=new C(e,{name:"property",inclusive:!1,rules:[d]});n.add(g);await n.update(c.uuid,b);const Q=n.items,o=e.get(L);o.set(!1);o.set(!0,Q);const s=new h;s.showPanel(2);document.body.append(s.dom);s.dom.style.left="0px";s.dom.style.zIndex="unset";t.renderer.onBeforeUpdate.add(()=>s.begin());t.renderer.onAfterUpdate.add(()=>s.end());w.init();const f=r.create(()=>i`
+
+ `),y=r.create(()=>i`
+
+ `),q=async()=>{u.clear(),g.clear(),p.value=new RegExp(f.value),d.value=new RegExp(y.value),await n.update(c.uuid,b);const l=n.items;if(console.log(l),Object.keys(l).length===0){alert("No items found!");return}o.set(!1),o.set(!0,l)},a=r.create(()=>i`
+
+ `);document.body.append(a);const J=r.create(()=>i`
+
+ `);document.body.append(J);
diff --git a/examples/assets/ifcGeometryTiler.js b/examples/assets/ifcGeometryTiler.js
index 164503314..adb90e475 100644
--- a/examples/assets/ifcGeometryTiler.js
+++ b/examples/assets/ifcGeometryTiler.js
@@ -1,16 +1,16 @@
-import"./web-ifc-api-JuXSH2nk.js";import{S as w}from"./stats.min-GTpOrGrX.js";import{d as h,R as b,m as g}from"./index-CqPyogbW.js";import{o as y,a as F,M as L,v,N as B,h as I,_ as S,F as U}from"./index-DtdmE_hK.js";import"./_commonjsHelpers-Cpj98o6Y.js";const k=document.getElementById("container"),a=new y,A=a.get(F),t=A.create();t.scene=new L(a);t.renderer=new v(a,k);t.camera=new B(a);a.init();t.camera.controls.setLookAt(12,6,8,0,0,-10);t.scene.setup();const D=a.get(I);D.create(t);t.scene.three.background=null;const R=new S(a),N=await fetch("https://thatopen.github.io/engine_components/resources/small.frag"),_=await N.arrayBuffer(),j=new Uint8Array(_),x=R.load(j);t.scene.three.add(x);const i=a.get(U),z={path:"https://unpkg.com/web-ifc@0.0.57/",absolute:!0};i.settings.wasm=z;i.settings.minGeometrySize=20;i.settings.minAssetsSize=1e3;let l=[],f={},u=1;i.onGeometryStreamed.add(e=>{const{buffer:s,data:n}=e,o=`small.ifc-processed-geometries-${u}`;for(const c in n){const p=n[c];p.geometryFile=o,f[c]=p}l.push({name:o,bits:[s]}),u++});let d=[];i.onAssetStreamed.add(e=>{d=[...d,...e]});i.onIfcLoaded.add(e=>{l.push({name:"small.ifc-processed-global",bits:[e]})});function C(e,...s){const n=new File(s,e),o=document.createElement("a"),c=URL.createObjectURL(n);o.href=c,o.download=n.name,o.click(),URL.revokeObjectURL(c)}async function G(e){for(const{name:s,bits:n}of e)C(s,...n),await new Promise(o=>{setTimeout(o,100)})}i.onProgress.add(e=>{e===1&&setTimeout(async()=>{const s={geometries:f,assets:d,globalDataFileId:"small.ifc-processed-global"};l.push({name:"small.ifc-processed.json",bits:[JSON.stringify(s)]}),await G(l),d=[],f={},l=[],u=1})});async function O(){const s=await(await fetch("https://thatopen.github.io/engine_components/resources/small.ifc")).arrayBuffer(),n=new Uint8Array(s);await i.streamFromBuffer(n)}const r=new w;r.showPanel(2);document.body.append(r.dom);r.dom.style.left="0px";r.dom.style.zIndex="unset";t.renderer.onBeforeUpdate.add(()=>r.begin());t.renderer.onAfterUpdate.add(()=>r.end());h.init();const m=b.create(()=>g`
+import"./web-ifc-api-Dlf_dxms.js";import{S as w}from"./stats.min-bmkVNhZk.js";import{T as h,z as b,m as g}from"./index-DtbylpTq.js";import{p as y,A as F,e as L,m as v,v as A,O as k,T as B,g as I}from"./index-6e07lNWw.js";const S=document.getElementById("container"),a=new y,U=a.get(F),t=U.create();t.scene=new L(a);t.renderer=new v(a,S);t.camera=new A(a);a.init();t.camera.controls.setLookAt(12,6,8,0,0,-10);t.scene.setup();const T=a.get(k);T.create(t);t.scene.three.background=null;const D=new B(a),z=await fetch("https://thatopen.github.io/engine_components/resources/small.frag"),O=await z.arrayBuffer(),R=new Uint8Array(O),j=D.load(R);t.scene.three.add(j);const i=a.get(I),x={path:"https://unpkg.com/web-ifc@0.0.57/",absolute:!0};i.settings.wasm=x;i.settings.minGeometrySize=20;i.settings.minAssetsSize=1e3;let l=[],f={},u=1;i.onGeometryStreamed.add(e=>{const{buffer:s,data:n}=e,o=`small.ifc-processed-geometries-${u}`;for(const c in n){const p=n[c];p.geometryFile=o,f[c]=p}l.push({name:o,bits:[s]}),u++});let d=[];i.onAssetStreamed.add(e=>{d=[...d,...e]});i.onIfcLoaded.add(e=>{l.push({name:"small.ifc-processed-global",bits:[e]})});function C(e,...s){const n=new File(s,e),o=document.createElement("a"),c=URL.createObjectURL(n);o.href=c,o.download=n.name,o.click(),URL.revokeObjectURL(c)}async function G(e){for(const{name:s,bits:n}of e)C(s,...n),await new Promise(o=>{setTimeout(o,100)})}i.onProgress.add(e=>{e===1&&setTimeout(async()=>{const s={geometries:f,assets:d,globalDataFileId:"small.ifc-processed-global"};l.push({name:"small.ifc-processed.json",bits:[JSON.stringify(s)]}),await G(l),d=[],f={},l=[],u=1})});async function P(){const s=await(await fetch("https://thatopen.github.io/engine_components/resources/small.ifc")).arrayBuffer(),n=new Uint8Array(s);await i.streamFromBuffer(n)}const r=new w;r.showPanel(2);document.body.append(r.dom);r.dom.style.left="0px";r.dom.style.zIndex="unset";t.renderer.onBeforeUpdate.add(()=>r.begin());t.renderer.onAfterUpdate.add(()=>r.end());h.init();const m=b.create(()=>g`
- `);document.body.append(m);const P=b.create(()=>g`
+ `);document.body.append(m);const $=b.create(()=>g`
- `);document.body.append(P);
+ `);document.body.append($);
diff --git a/examples/assets/ifcJsonExporter.js b/examples/assets/ifcJsonExporter.js
index 18d31cb78..751e7afc5 100644
--- a/examples/assets/ifcJsonExporter.js
+++ b/examples/assets/ifcJsonExporter.js
@@ -1,10 +1,10 @@
-import{ac as m}from"./web-ifc-api-JuXSH2nk.js";import{S as b}from"./stats.min-GTpOrGrX.js";import{d as f,R as c,m as i}from"./index-CqPyogbW.js";import{o as u,a as g,M as w,v as h,N as y,h as v,_ as k,g as x}from"./index-DtdmE_hK.js";import"./_commonjsHelpers-Cpj98o6Y.js";const I=document.getElementById("container"),t=new u,L=t.get(g),e=L.create();e.scene=new w(t);e.renderer=new h(t,I);e.camera=new y(t);t.init();e.camera.controls.setLookAt(12,6,8,0,0,-10);e.scene.setup();const U=t.get(v);U.create(e);e.scene.three.background=null;const B=new k(t),O=await fetch("https://thatopen.github.io/engine_components/resources/small.frag"),R=await O.arrayBuffer(),S=new Uint8Array(R),A=B.load(S);e.scene.three.add(A);const N=t.get(x),a=new m;a.SetWasmPath("https://unpkg.com/web-ifc@0.0.57/",!0);await a.Init();const j=await fetch("https://thatopen.github.io/engine_components/resources/small.ifc"),E=await j.arrayBuffer(),F=new Uint8Array(E),_=a.OpenModel(F),n=new b;n.showPanel(2);document.body.append(n.dom);n.dom.style.left="0px";n.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>n.begin());e.renderer.onAfterUpdate.add(()=>n.end());f.init();const s=c.create(()=>i`
+import{Y as d}from"./web-ifc-api-Dlf_dxms.js";import{S as b}from"./stats.min-bmkVNhZk.js";import{T as f,z as c,m as i}from"./index-DtbylpTq.js";import{p as u,A as w,e as g,m as h,v as y,O as v,T as O,c as k}from"./index-6e07lNWw.js";const x=document.getElementById("container"),t=new u,I=t.get(w),e=I.create();e.scene=new g(t);e.renderer=new h(t,x);e.camera=new y(t);t.init();e.camera.controls.setLookAt(12,6,8,0,0,-10);e.scene.setup();const L=t.get(v);L.create(e);e.scene.three.background=null;const U=new O(t),A=await fetch("https://thatopen.github.io/engine_components/resources/small.frag"),B=await A.arrayBuffer(),S=new Uint8Array(B),T=U.load(S);e.scene.three.add(T);const j=t.get(k),a=new d;a.SetWasmPath("https://unpkg.com/web-ifc@0.0.57/",!0);await a.Init();const z=await fetch("https://thatopen.github.io/engine_components/resources/small.ifc"),E=await z.arrayBuffer(),F=new Uint8Array(E),R=a.OpenModel(F),n=new b;n.showPanel(2);document.body.append(n.dom);n.dom.style.left="0px";n.dom.style.zIndex="unset";e.renderer.onBeforeUpdate.add(()=>n.begin());e.renderer.onAfterUpdate.add(()=>n.end());f.init();const s=c.create(()=>i`