@bimdata/viewer 2.18.0-beta.21 → 2.18.0-beta.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -90793,7 +90793,7 @@ export {
|
|
|
90793
90793
|
|
|
90794
90794
|
gl_FragColor = vec4(composed, sceneSample.a);
|
|
90795
90795
|
}
|
|
90796
|
-
`,depthTest:!1,depthWrite:!1,transparent:!1}),this.fsQuad=new Dx(this.combineMaterial),this._drawingBufferSize=new Cn(1,1)}setSize(e,t){this.isolatedDepthTarget.setSize(e,t),this.isolatedColorTarget.setSize(e,t)}syncRenderTargetSize(e,t){let i=t?.width??t?.texture?.image?.width,n=t?.height??t?.texture?.image?.height,s=Number.isFinite(i)?i:0,r=Number.isFinite(n)?n:0;(s<=0||r<=0)&&(e.getDrawingBufferSize(this._drawingBufferSize),s=this._drawingBufferSize.x,r=this._drawingBufferSize.y),s=Math.max(1,Math.floor(s)),r=Math.max(1,Math.floor(r)),(this.isolatedDepthTarget.width!==s||this.isolatedDepthTarget.height!==r)&&this.setSize(s,r)}render(e,t,i){let n=this.world.camera?.three,s=this.world.scene?.three;if(!n||!s)return;this.syncRenderTargetSize(e,i);let r=e.autoClear,o=s.overrideMaterial,a=this.isolatedScene.overrideMaterial,l=this.isolatedScene.background,c=this.isolatedScene.environment,d=this.isolatedScene.fog,u=e.getClearColor(new zn),h=e.getClearAlpha(),p=[];try{e.autoClear=!0,this.isolatedScene.overrideMaterial=this.depthMaterial,this.isolatedScene.background=null,this.isolatedScene.environment=s.environment??null,this.isolatedScene.fog=s.fog??null,e.setRenderTarget(this.isolatedDepthTarget),e.setClearColor(16777215,1),e.clear(!0,!0,!0),e.render(this.isolatedScene,n),this.isolatedScene.overrideMaterial=a,s.traverse(f=>{if(!f?.isLight)return;let m=f.clone();m.matrixAutoUpdate=!1,m.matrixWorldAutoUpdate=!1,m.matrixWorld.copy(f.matrixWorld),this.isolatedScene.add(m),p.push(m)}),e.setRenderTarget(this.isolatedColorTarget),e.setClearColor(0,0),e.clear(!0,!0,!0),e.render(this.isolatedScene,n),this.combineMaterial.uniforms.tDiffuse.value=i.texture,this.combineMaterial.uniforms.tIsoDepth.value=this.isolatedDepthTarget.texture,this.combineMaterial.uniforms.tIsoColor.value=this.isolatedColorTarget.texture,e.autoClear=!1,e.setRenderTarget(this.renderToScreen?null:t),this.fsQuad.render(e)}finally{for(let f of p)f.removeFromParent();this.isolatedScene.overrideMaterial=a,this.isolatedScene.background=l,this.isolatedScene.environment=c,this.isolatedScene.fog=d,s.overrideMaterial=o,e.setClearColor(u,h),e.autoClear=r}}dispose(){this.fsQuad.dispose(),this.combineMaterial.dispose(),this.depthMaterial.dispose(),this.isolatedDepthTarget.dispose(),this.isolatedColorTarget.dispose()}};function i3n(e){let{fragments:t,components:i,world:n,OBF:s,$viewer:r}=e,o=i.get(s.Outliner),a=!1,l={},c=Promise.resolve(),d=null,u=null,h=null,p=null,f=null,m=null,g=new Map,A=new cb,E=new Set,b=new Map,T=!1,C=(Dt=[])=>{E.clear();for(let At of Dt)E.add(At)},S=()=>{a||=(n.renderer?.postproduction&&(n.renderer.postproduction.enabled=!0),o.world=n,o.enabled=!0,o.create(use,{fillOpacity:0,priority:S1t}),o.configure(use,{fillOpacity:0,priority:S1t}),!0)},R=Dt=>{let At=l[Dt];return!!(At&&At.size>0)},x=Dt=>{R(Dt)&&Ze()},_=(Dt,At)=>{if(!Dt||!At?.onViewUpdated||b.has(Dt))return;let ut=()=>{x(Dt)};At.onViewUpdated.add(ut),b.set(Dt,{model:At,callback:ut})},F=Dt=>{let At=b.get(Dt);At&&(At.model?.onViewUpdated?.remove?.(At.callback),b.delete(Dt))},L=()=>{for(let[Dt,At]of t.list)_(Dt,At);p||(p=({key:Dt,value:At})=>{_(Dt,At)},t.list.onItemSet.add(p)),f||(f=Dt=>{F(Dt)},t.list.onItemDeleted.add(f))},N=(Dt,At)=>{let ut=null;try{ut=At.outlinePass}catch{ut=null}return ut&&Dt.passes.includes(ut)?ut:Dt.passes.find(bt=>bt.constructor?.name==="OutputPass")??null},z=()=>{if(!d)return;let Dt=n.renderer?.postproduction,At=Dt?.composer;if(!At)return;let ut=N(At,Dt),bt=At.passes.indexOf(d);if(bt!==-1){if((At.passes[bt+1]??null)===ut)return;At.removePass(d)}let _t=ut?At.passes.indexOf(ut):-1;_t===-1?At.addPass(d):At.insertPass(d,_t)},k=()=>{let Dt=n.renderer;!Dt||!Dt.postproduction||(Dt.postproduction.enabled=!0,d||(d=new t3n(n,A),d.enabled=!1,u=({x:At,y:ut})=>{d?.setSize(Math.max(1,At),Math.max(1,ut))},Dt.onResize.add(u),h=()=>{d?.enabled&&z()},Dt.onBeforeUpdate.add(h)),z())},te=Dt=>{let At={};for(let[ut,bt]of Object.entries(Dt??{})){let _t=bt instanceof Set?bt:new Set(bt);_t.size>0&&(At[ut]=_t)}return At},fe=()=>{for(let Dt of Object.values(l))if(Dt.size>0)return!0;return!1},ye=Dt=>{if(!Dt||!Dt.fragments)return!1;let At=Dt.fragments.modelId,ut=l[At];return!!(ut&&ut.has(Dt.localId))},je=(Dt,At)=>{for(let ut of Dt.values())for(let bt of ut)bt.removeFromParent();Dt.clear(),At&&At.clear()},Oe=()=>{je(g,A)},Ge=(Dt,At,ut,bt)=>{let _t=Dt.geometry;if(!_t)return null;let hi=Array.isArray(Dt.material)?Dt.material.filter(Boolean):[Dt.material].filter(Boolean);if(hi.length===0)return null;let It=ct=>hi.length===1?0:Math.max(0,Math.min(Number.isInteger(ct)?ct:0,hi.length-1)),ne=new $n;ne.attributes=_t.attributes,_t.index&&ne.setIndex(_t.index),ne.boundingBox=_t.boundingBox,ne.boundingSphere=_t.boundingSphere;let dt=_t.index?.array?.length??_t.index?.count??0,pt=dt>0?dt:_t.getAttribute("position")?.count??0,Ve=_t.groups?.length>0?_t.groups:[{start:0,count:pt,materialIndex:0}],Ie=Math.min(At.position?.length??0,At.size?.length??0);for(let ct=0;ct<Ie;ct+=1){let ot=Math.max(0,At.position[ct]??0),Fe=At.size[ct]??0,yt=Fe===4294967295?Math.max(0,pt-ot):Math.max(0,Fe);if(yt===0)continue;let Wt=ot+yt,Bt=!1;for(let Ne of Ve){let Ce=Math.max(0,Ne.start??0),it=Ne.count===1/0?Math.max(0,pt-Ce):Math.max(0,Ne.count??0);if(it===0)continue;let Ht=Ce+it,Et=Math.max(ot,Ce),ti=Math.min(Wt,Ht)-Et;if(ti<=0)continue;let Kt=It(Ne.materialIndex??0);ne.addGroup(Et,ti,Kt),Bt=!0}Bt||ne.addGroup(ot,yt,0)}let me=new pn(ne,hi);return me.matrixAutoUpdate=!1,me.matrixWorldAutoUpdate=!1,me.frustumCulled=!1,me.matrixWorld.copy(Dt.matrixWorld),me.userData.isolatedPick={modelId:ut,localId:bt},me},We=async Dt=>{let At=g,ut=new Map,bt=Object.entries(Dt);for(let[_t,hi]of bt){let It=t.list.get(_t);if(It)for(let ne of hi){let dt;try{dt=await It.getItemDrawChunks([ne])}catch{continue}if(!dt?.length)continue;let pt=`${_t}:${ne}`,Ve=new Set;for(let me of dt){let ct=It.tiles.get(me.tileId);if(!ct)continue;let ot=Ge(ct,me,_t,ne);ot&&(ot.renderOrder=40,A.add(ot),Ve.add(ot))}if(Ve.size===0)continue;ut.set(pt,Ve);let Ie=At.get(pt);if(Ie){for(let me of Ie)me.removeFromParent();At.delete(pt)}}}for(let _t of At.values())for(let hi of _t)hi.removeFromParent();g=ut},Ze=()=>{if(T)return;T=!0;let Dt=async()=>{T=!1,fe()&&(await We(l),e.requestRender())};c=c.then(Dt,Dt)},Ft=async Dt=>{let At=l;l=Dt;let ut=Object.keys(Dt).length>0;d&&(d.enabled=ut),Object.keys(At).length>0&&a&&await o.removeItems(At,use),ut?(k(),d.enabled=!0,await We(Dt)):Oe(),ut?(S(),await o.addItems(Dt,use)):a&&o.clean(use),await t.core.update(!0),e.requestRender()},Pt=async(Dt=[],At=!0)=>{let ut=[...new Set(Dt)];if(At&&r.state.selectedObjects.length>0){let hi=new Set(ut),It=r.state.selectedObjectsUuids.filter(ne=>hi.has(ne));It.length>0&&r.state.deselectObjectsByUuids(It)}let bt=await t.guidsToModelIdMap(ut),_t=te(bt);return c=c.then(async()=>{await Ft(_t),C(ut)},async()=>{await Ft(_t),C(ut)}),c},tt=async()=>{let Dt={};return c=c.then(async()=>{await Ft(Dt),C()},async()=>{await Ft(Dt),C()}),c},kt={isolate:Pt,clear:tt,isolatedUuids:E,isPickResultExcludedFromPrimaryPick(Dt){return fe()&&!ye(Dt)}};return L(),m=JIn({$viewer:r,onIsolationChanged:async({isolatedUuids:Dt,isolatedAwayUuids:At})=>{if(At.length===0||Dt.length===0){await tt();return}await Pt(Dt,!1)}}),{destroy(){m&&=(m(),null);for(let At of[...b.keys()])F(At);p&&=(t.list.onItemSet.remove(p),null),f&&=(t.list.onItemDeleted.remove(f),null);let Dt=n.renderer;Dt&&u&&Dt.onResize.remove(u),u=null,Dt&&h&&Dt.onBeforeUpdate.remove(h),h=null,d&&=(Dt?.postproduction?.composer?.removePass(d),d.dispose(),null),Oe()},extension:kt}}var UH="select",x1t=20;function n3n(e){let{fragments:t,$viewer:i,OBC:n,OBF:s,components:r,world:o}=e,a=r.get(s.Outliner),l=!1,c=new zn(6878522),d=new zn(6878522),u=.15,h=1,p=()=>{l||=(o.renderer.postproduction.enabled=!0,a.world=o,a.enabled=!0,a.create(UH,{color:c,fillColor:d,fillOpacity:u,thickness:h,priority:x1t}),!0)},f=()=>{l&&a.configure(UH,{color:c,fillColor:d,fillOpacity:u,thickness:h,priority:x1t})},m={},g=async(x,_="add")=>{if(_!=="add"&&_!=="remove")throw TypeError("[BIMDataViewer - 3D Fragments - select] Invalid action, expected 'add' or 'remove', got "+_);let F=await t.guidsToModelIdMap(x);_==="add"?(n.ModelIdMapUtils.add(m,F),p(),await a.addItems(F,UH)):(n.ModelIdMapUtils.remove(m,F),await a.removeItems(F,UH)),await t.core.update(!0),e.requestRender()},A=x=>x.map(_=>_.uuid).filter(Boolean),E=Promise.resolve(),b=x=>(E=E.then(x,x),E),T=({key:x,value:_})=>{let F=o.renderer?.postproduction?.outlinePass;if(F&&_?.tiles)for(let[,z]of _.tiles)F.detachOutlinedTile(z);a._tileListeners?.get(x)?.(),a._tileListeners?.delete(x);let L=m[x];if(!L)return;let N={[x]:new Set(L)};delete m[x],b(()=>a.removeItems(N,UH))};t.list.onBeforeDelete.add(T);let C=[i.state.hub.on("objects-selected",({objects:x})=>{let _=x.filter(F=>F.visible);b(()=>g(A(_),"add"))}),i.state.hub.on("objects-deselected",({objects:x})=>{b(()=>g(A(x),"remove"))}),i.state.hub.on("objects-hidden",({objects:x})=>{let _=x.filter(F=>F.selected);b(()=>g(A(_),"remove"))}),i.state.hub.on("objects-shown",({objects:x})=>{let _=x.filter(F=>F.selected);b(()=>g(A(_),"add"))})],S=!0,R=e.onPick(async({pickResult:x,event:_})=>{if(!S)return;let F=!_.shiftKey;if(!x){F&&i.state.deselectObjects(i.state.selectedObjects.map(fe=>fe.id));return}let{fragments:L,localId:N}=x,z={[L.modelId]:new Set([N])},k=(await t.modelIdMapToGuids(z))[0];if(!k)return;let te=i.state.getObjectsByUuids([k])[0];te&&(te.selected?i.state.deselectObjects([te.id]):i.state.selectObjects([te.id],{exclusive:F}))});return{destroy(){R(),t.list.onBeforeDelete.remove(T),a.clean(UH),a.remove(UH),C.forEach(x=>i.state.hub.off(x))},extension:{get selectOnClick(){return S},set selectOnClick(x){S=x},get color(){return c},set color(x){c=x,f()},get fillColor(){return d},set fillColor(x){d=x,f()},get fillOpacity(){return u},set fillOpacity(x){u=x,f()},get thickness(){return h},set thickness(x){h=x,f()}}}}function s3n(e){let{fragments:t,$viewer:i,OBC:n,components:s}=e,r=s.get(n.Hider),o=async d=>{let u;u=Array.isArray(d)?await t.guidsToModelIdMap(d):d,await r.set(!0,u),await t.core.update(!0),e.requestRender()},a=async d=>{let u;u=Array.isArray(d)?await t.guidsToModelIdMap(d):d,await r.set(!1,u),await t.core.update(!0),e.requestRender()},l=d=>d.map(u=>u.uuid).filter(Boolean),c=[i.state.hub.on("objects-shown",({objects:d})=>o(l(d))),i.state.hub.on("objects-hidden",({objects:d})=>a(l(d)))];return{destroy(){c.forEach(d=>i.state.hub.off(d))},extension:{show:o,hide:a}}}function r3n(e){let{fragments:t,$viewer:i}=e,n=Promise.resolve(),s=p=>(n=n.then(p,p),n),r=p=>p.map(f=>f.uuid).filter(Boolean),o=p=>Object.keys(p||{}).length>0,a=async p=>Array.isArray(p)?t.guidsToModelIdMap(p):p||{},l=p=>(p instanceof Set?[...p]:[...new Set(p||[])]).filter(f=>Number.isFinite(f)),c=p=>p instanceof zn?p:new zn(p),d=async(p,f)=>{if(f==null)return u(p);let m=await a(p);if(!o(m))return;let g=[],A=c(f);for(let[E,b]of Object.entries(m)){let T=t.list.get(E);if(!T)continue;let C=l(b);C.length!==0&&g.push(T.setColor(C,A))}await Promise.all(g),await t.core.update(!0),e.requestRender()},u=async p=>{let f=await a(p);if(!o(f))return;let m=[];for(let[g,A]of Object.entries(f)){let E=t.list.get(g);if(!E)continue;let b=l(A);b.length!==0&&m.push(E.resetColor(b))}await Promise.all(m),await t.core.update(!0),e.requestRender()},h=[i.state.hub.on("objects-colorized",({objects:p,color:f})=>{let m=r(p);m.length&&s(()=>f==null?u(m):d(m,f))})];return{destroy(){h.forEach(p=>i.state.hub.off(p))},extension:{colorize:(p,f)=>s(()=>d(p,f)),resetColorize:p=>s(()=>u(p))}}}var o3n=e=>{if(e.length===0)return null;if(e.length===1)return e[0].clone();if(e.length===2)return e[0].clone().add(e[1]).multiplyScalar(.5);let t=e[0],i=new ie,n=0;for(let s=1;s+1<e.length;s+=1){let r=e[s],o=e[s+1],a=.5*r.clone().sub(t).cross(o.clone().sub(t)).length();if(!Number.isFinite(a)||a<=1e-6)continue;let l=t.clone().add(r).add(o).multiplyScalar(1/3);i.addScaledVector(l,a),n+=a}if(n<=1e-6){let s=new ie;return e.forEach(r=>s.add(r)),s.multiplyScalar(1/e.length)}return i.multiplyScalar(1/n)},a3n=(e,t=[])=>{let i=e?.facePoints;if(!i||i.length<3)return null;let n=[];for(let r=0;r+2<i.length;r+=3){let o=i[r],a=i[r+1],l=i[r+2];!Number.isFinite(o)||!Number.isFinite(a)||!Number.isFinite(l)||n.push(new ie(o,a,l))}if(n.length===0)return null;let s=V$e(n,t);return s.length===0?null:o3n(s)};function l3n(e){let t=c3n(e),i=d3n(e);return{destroy(){t(),i()}}}function c3n(e){let{$viewer:t}=e,i=e,n=()=>{let a=t.state.selectedObjects.map(l=>l.uuid);if(a.length!==0)return i.isolate(a)},s=()=>{if(i.isolatedUuids.size!==0)return i.clear()},r=t.shortcutManager.getDefaultShortcuts(()=>t.localContext.loadedModels.flatMap(a=>a.objects)),o=r.map(a=>a.name);return[...r,{name:"isolate",key:"I",execute:n},{name:"reintegrate",key:"U",execute:s},{name:"fitview",key:"F",execute:()=>e.fitView(t.state.selectedObjects.map(a=>a.uuid))}].forEach(a=>t.localContext.registerShortcut(a)),()=>{[...o,"isolate","reintegrate","fitview"].forEach(a=>t.localContext.unregisterShortcut(a))}}function d3n(e){let t=new AbortController;return e.$viewer.localContext.el.addEventListener("contextmenu",async i=>{let n=e.$viewer.contextMenu;if(n){i.stopPropagation(),i.preventDefault();try{await u3n(e,i)}catch(s){console.error("[BIMDataViewer - 3D Fragments] Context menu setup error:",s)}n.open(i)}},{signal:t.signal}),()=>t.abort()}async function u3n(e,t){let{$viewer:i}=e,n=e,s=i.contextMenu,r=i.state.selectedObjects.map(a=>a.uuid);[...s.getDefaultCommands({objects:i.localContext.loadedModels.flatMap(a=>a.objects),context:i.localContext}),{get label(){return i.i18n.$t("global.fit_view")},picto:"F",execute:()=>e.fitView(i.state.selectedObjects.map(a=>a.uuid))}].map(a=>s.registerContextCommand(a)),r.length>0&&s.registerContextCommand({name:"isolate",get group(){return s.groupPositions.visibility},position:4,get label(){return i.i18n.$t("context_menu.isolate")},picto:"I",execute:()=>n.isolate(r)}),n.isolatedUuids.size>0&&s.registerContextCommand({name:"reintegrate",get group(){return s.groupPositions.visibility},position:5,get label(){return i.i18n.$t("context_menu.reintegrate")},picto:"U",execute:()=>n.clear()}),r.length>0&&s.registerContextCommand({name:"colorize",get group(){return s.groupPositions.visibility},position:6,get label(){return i.i18n.$t("viewer3d.context_menu.colorize")},component:JYe}),i.state.colorizedObjects.length>0&&s.registerContextCommand({name:"reset_color",get group(){return s.groupPositions.visibility},position:7,get label(){return i.i18n.$t("viewer3d.context_menu.reset_color")},execute:()=>{let a=i.state.colorizedObjectsIds;a.length!==0&&i.state.colorizeObjects(a,null)}});let o=await h3n(e,t);if(o?.point&&(o?.face||o?.normal)){let a=p3n(o),l=a3n(o,z$e(e.world?.renderer?.three))??o.point.clone();s.registerContextCommand({get label(){return i.i18n.$t("context_menu.align_to_face")},execute:()=>g3n(e,l,a)})}}async function h3n(e,t){try{return(await e.raycastAll(t,{includeUnpickable:!0}))[0]??null}catch{return null}}function p3n(e){let t=new ie;if(e.face?.normal&&e.object){t.copy(e.face.normal);let i=new Ao().getNormalMatrix(e.object.matrixWorld);return t.applyMatrix3(i).normalize(),t}return e.normal?.isVector3?e.normal.clone().normalize():new ie(0,1,0)}var R1t=new ie(0,1,0),f3n=new ie(0,0,1),m3n=.015,v3n=.99;async function A3n(e){let t=e.world?.camera?.controls,i=NCe(e);if(i)return i;try{let n=await e.world?.camera?.getItemsBounding?.();if(n?.center)return n.center.clone()}catch{}return t?.getTarget(new ie)??new ie}async function g3n(e,t,i){let n=e.world?.camera?.controls,s=e.world?.camera?.three;if(!n||!s)return;let r=await A3n(e);await n.setFocalOffset(0,0,0,!1);let o=Math.abs(i.dot(R1t))>v3n?i.clone().addScaledVector(f3n,m3n).normalize():i.clone(),a=Math.max(s.position.distanceTo(r),.1),l=r.clone(),c=r.clone().addScaledVector(o,a),d=t.clone().sub(r),u=d.sub(o.clone().multiplyScalar(d.dot(o))),h=c.clone().add(u),p=l.clone().add(u);s.up.copy(R1t),await n.setLookAt(h.x,h.y,h.z,p.x,p.y,p.z,!1),await n.setFocalOffset(0,0,0,!1),e.requestRender?.()}function y3n(e){let{world:t,fragments:i}=e,n=async(r=[])=>{if(r?.length===0)return Array.from(i.list.values()).map(a=>a?.box).filter(a=>a instanceof As&&!a.isEmpty());let o=await i.guidsToModelIdMap(r);return i.getBBoxes(o)},s=async r=>{if(!r.length)return;let o=Q$e(e,r);if(!hee(o))return;let a=new td;o.getBoundingSphere(a),await t.camera.controls.fitToSphere(a,!0)};return{extension:{fitView:async(r=[])=>{let o=await n(r);await s(o)}}}}function I3n(e,t={}){let i=Array.isArray(t.materialByCategory)?t.materialByCategory.filter(r=>r?.material&&r.category instanceof RegExp):[],n=[],s=[];return{async apply(){n=[],s=[];for(let{category:r,material:o}of i){let a=await e.getItemsOfCategories([r]),l=Object.values(a).flat();l.length&&(o.color&&(await e.setColor(l,new zn(o.color)),n.push(...l)),typeof o.opacity=="number"&&(await e.setOpacity(l,o.opacity),s.push(...l)))}n=[...new Set(n)],s=[...new Set(s)]},async clear(){n.length&&await e.resetColor(n),s.length&&await e.resetOpacity(s),n=[],s=[]},dispose(){e.tiles.onItemSet.remove(onTileSet)}}}function b3n(e){let{fragments:t,world:i,$viewer:n}=e,s=!0;return{extension:{load:async r=>{if(!r.fragments_file)throw Error(`Model "${r.name}" does not have a fragments file.`);await e.waitUntilIsReady();let o=await(await fetch(r.fragments_file)).arrayBuffer(),a=await t.core.load(o,{modelId:String(r.id),camera:i.camera.three,onProgress:({progress:l,stage:c,modelId:d})=>{console.log(`Model ${d} loading stage: ${c}, progress: ${(l*100).toFixed(2)}%`)}});return await I3n(a,{materialByCategory:[{category:/^IFCSPACE$/i,material:{color:"#0000FF",opacity:.15}}]}).apply(),a.getClippingPlanesEvent=()=>i.renderer.three.clippingPlanes,n.localContext.hub.emit("3d-model-loaded",{model:r}),s&&=(e.fitView(),!1),a},unload:async r=>{await e.waitUntilIsReady();try{if(!t.list.has(String(r.id)))return console.warn(`Model with id "${r.id}" not found in fragments list.`),!1}catch{return!1}return await t.core.disposeModel(String(r.id)),e.fragments.list.size===0&&(s=!0),n.localContext.hub.emit("3d-model-unloaded",{model:r}),!0}}}}function E3n(e){let{world:t}=e,i=si("perspective"),n=()=>{i.value=t.camera.projection.current==="Perspective"?"perspective":"ortho",t.renderer?.postproduction&&t.renderer.postproduction.updateCamera(),e.requestRender()};return t.camera.projection.onChanged.add(n),{extension:{get projection(){return i.value},set projection(s){if(s!=="perspective"&&s!=="ortho"){console.warn(`Invalid projection value: ${s}`);return}e.isReady&&(i.value=s,s==="perspective"?(t.camera.projection.set("Perspective"),t.camera.three.updateProjectionMatrix()):t.camera.projection.set("Orthographic"))}},destroy(){t.camera.projection.onChanged.remove(n)}}}var _1t=class{constructor({id:e,clipper:t,point:i,normal:n,scaleMode:s="camera",fixedScale:r=new Cn(1,1),controlSize:o=1,activeEnabled:a=!0,visualState:l=null,controlAxisDirection:c=null,wireframeMode:d="triangles"}){this.id=e,this.type="default",this._clipper=t,this._shown=!0,this._controlShown=!1,this._widgetsVisible=!0,this._active=!1,this._hovered=!1,this._scaleMode=s,this._fixedScale=r.clone(),this._activeEnabled=a,this._visualState=l,this._controlAxisDirection=c,this._wireframeMode=d;let u=t._planeMaterial.clone();this._mesh=new pn(new Vy(1),u),this._mesh.renderOrder=2,this._mesh.userData.isSectionPlaneController=!0,this._mesh.userData.isSectionPlaneSurface=!0,this._anchor=new Dl,this._anchor.position.copy(i),this._anchor.lookAt(i.clone().add(n)),this._mesh.position.z=.01,this._anchor.add(this._mesh);let h=this._createWireframeGeometry(this._wireframeMode),p=new Rc({color:t._planeMaterial.color.getHex(),opacity:.8,transparent:!0,depthTest:!0,depthWrite:!1});this._wireframe=new jr(h,p),this._wireframe.renderOrder=2,this._wireframe.position.z=.012,this._anchor.add(this._wireframe),this._threePlane=new Ys().setFromNormalAndCoplanarPoint(n,i),this._normal=n.clone().normalize(),this._controls=new X7e(t.world.camera.three,t.world.renderer.three.domElement),this._onCameraChange=()=>{this._controls.camera=t.world.camera.three,this._updateScale()},t.world.camera.projection.onChanged.add(this._onCameraChange),this._controls.attach(this._anchor),this._controls.setSpace("local"),this._controls.setSize(o),this._controls.showX=!1,this._controls.showY=!1,this._controls.enabled=!1,this._controls.visible=!1,this._controls.getHelper().visible=!1,this._controls.getHelper().renderOrder=3,this._controls.getHelper().userData.isSectionPlaneControlHandle=!0,this._controls.getHelper().userData.sectionPlaneId=this.id,this._controls.getHelper().traverse(f=>{f.userData.isSectionPlaneController=!0,f.userData.sectionPlaneId=this.id,f.renderOrder=3;let m=f.tag!=="picker"&&f.tag!=="helper",g=Array.isArray(f.material)?f.material:[f.material];if(m)for(let A of g)A&&(A.depthTest=!1,A.depthWrite=!1,A.transparent=!0);m&&(f.userData.isSectionPlaneControlHandle=!0)}),this._pruneOppositeControlDirection(),this._onChange=()=>{this._syncFromAnchor()},this._onDraggingChanged=f=>{this._clipper.world.camera.enabled=!f.value},this._controls.addEventListener("change",this._onChange),this._controls.addEventListener("dragging-changed",this._onDraggingChanged),this._onCameraUpdate=()=>{this._updateScale(),this._clipper.requestRender()},this._scaleMode==="camera"&&this._clipper.world.camera.controls?.addEventListener("update",this._onCameraUpdate),t._widgetOverlayScene.add(this._anchor),t._widgetOverlayScene.add(this._controls.getHelper()),t._registerPlaneMesh(this._mesh,this),this._applyVisualState(),this._updateScale()}get shown(){return this._shown}get three(){return this._threePlane}get controlShown(){return this._controlShown}get widgetsVisible(){return this._widgetsVisible}get widgetPosition(){return this._anchor.position}get location(){return this._anchor.position}get position(){return this._anchor.position}get direction(){return this._normal}get active(){return this._active}setActive(e){if(!this._activeEnabled)return;let t=!!e;this._active!==t&&(this._active=t,this._applyVisualState(),this._clipper.requestRender())}setWireframeMode(e){if(e!=="triangles"&&e!=="edges")throw TypeError("wireframe mode must be 'triangles' or 'edges'");this._wireframeMode!==e&&(this._wireframeMode=e,this._wireframe.geometry.dispose(),this._wireframe.geometry=this._createWireframeGeometry(e),this._clipper.requestRender())}setHovered(e){let t=!!e;this._hovered!==t&&(this._hovered=t,this._applyVisualState(),this._clipper.requestRender())}setVisualStateDefinition(e){this._visualState=e,this._applyVisualState(),this._clipper.requestRender()}setControlColor(e){let t=this._controls.getHelper();t&&(t.traverse(i=>{if(!(i.tag!=="picker"&&i.tag!=="helper"))return;let n=Array.isArray(i.material)?i.material:[i.material];for(let s of n)s?.color&&s.color.setHex(e)}),this._clipper.requestRender())}setFixedScale(e,t){this._fixedScale.set(e,t),this._updateScale(),this._clipper.requestRender()}setScaleMode(e){if(e!=="camera"&&e!=="fixed")throw TypeError("scale mode must be 'camera' or 'fixed'");this._scaleMode!==e&&(this._scaleMode==="camera"&&this._clipper.world.camera.controls?.removeEventListener("update",this._onCameraUpdate),this._scaleMode=e,this._scaleMode==="camera"&&this._clipper.world.camera.controls?.addEventListener("update",this._onCameraUpdate),this._updateScale(),this._clipper.requestRender())}show(){this._shown||(this._shown=!0,this._updateWidgetVisibility(),this._clipper.emit("shown",{plane:this}),this._clipper.applyClippingPlanes(),this._clipper.requestRender())}hide(){this._shown&&(this._shown=!1,this.hideControl(),this._updateWidgetVisibility(),this._clipper.activeSectionPlane===this&&this._clipper.setActivePlane(null),this._clipper.emit("hidden",{plane:this}),this._clipper.applyClippingPlanes(),this._clipper.requestRender())}showControl(){this._controlShown||(this._controlShown=!0,this._updateWidgetVisibility(),this._clipper.emit("controls-shown",{plane:this}),this._clipper.requestRender())}hideControl(){this._controlShown&&(this._controlShown=!1,this._updateWidgetVisibility(),this._clipper.emit("controls-hidden",{plane:this}),this._clipper.requestRender())}setWidgetsVisible(e){let t=!!e;this._widgetsVisible!==t&&(this._widgetsVisible=t,this._updateWidgetVisibility(),this._clipper.requestRender())}destroy(){this.hideControl(),this._controls.removeEventListener("change",this._onChange),this._controls.removeEventListener("dragging-changed",this._onDraggingChanged),this._controls.detach(),this._clipper.world.camera.controls?.removeEventListener("update",this._onCameraUpdate),this._clipper.world.camera.projection.onChanged.remove(this._onCameraChange),this._anchor.removeFromParent(),this._controls.getHelper().removeFromParent(),this._controls.dispose(),this._clipper._unregisterPlaneMesh(this._mesh),this._mesh.geometry.dispose(),this._mesh.material.dispose(),this._wireframe.geometry.dispose(),this._wireframe.material.dispose(),this._clipper.onSectionPlaneDestroyed(this)}getWorldNormal(e=new ie){return e.set(0,0,1).applyQuaternion(this._anchor.quaternion).normalize()}setPositionAlongAxis(e,t,i){this._anchor.position.copy(e).addScaledVector(t,i),this._syncFromAnchor()}setWidgetPosition(e){if(!(e instanceof ie))throw TypeError("position must be a THREE.Vector3");this._anchor.position.copy(e),this._anchor.updateWorldMatrix(!0,!1),this._updateScale(),this._clipper.requestRender()}setFromPointNormalAndTangent(e,t,i){if(!(e instanceof ie)||!(t instanceof ie)||!(i instanceof ie))throw TypeError("point, normal and tangent must be THREE.Vector3 instances");let n=t.clone().normalize();if(n.lengthSq()<1e-10)return;let s=i.clone().sub(n.clone().multiplyScalar(i.dot(n)));if(s.lengthSq()<1e-10){let l=Math.abs(n.z)<.95?new ie(0,0,1):new ie(0,1,0);s=l.sub(n.clone().multiplyScalar(l.dot(n)))}s.normalize();let r=n.clone().cross(s).normalize();s=r.clone().cross(n).normalize();let o=new mn().makeBasis(s,r,n),a=new Cc().setFromRotationMatrix(o);this._anchor.position.copy(e),this._anchor.quaternion.copy(a),this._normal.copy(n),this._threePlane.setFromNormalAndCoplanarPoint(this._normal,this._anchor.position),this._anchor.updateWorldMatrix(!0,!1),this._updateScale(),this._clipper.requestRender()}_applyVisualState(){let e=this._mesh.material;if(!e)return;let t=this._clipper._planeMaterial.color.getHex(),i=this._clipper._planeMaterial.opacity,n=this._active&&this._hovered?"activeHovered":this._active?"active":this._hovered?"hovered":"idle",s=this._visualState?.[n]??null,r=this._visualState?.idle??null,o=s?.color??r?.color??t,a=s?.opacity??r?.opacity??i;if(!this._visualState){let l=this._clipper._planeMaterial.color.clone();this._active&&this._hovered?(l.offsetHSL(.025,.35,.28),a=i+.52):this._active?(l.offsetHSL(.015,.3,.18),a=i+.4):this._hovered&&(l.offsetHSL(0,.22,.12),a=i+.22),o=l.getHex()}e.color.setHex(o),e.opacity=Math.min(.92,a),this._wireframe&&this._wireframe.material.color.setHex(o)}_updateScale(){if(this._scaleMode==="fixed"){this._mesh.scale.set(this._fixedScale.x,this._fixedScale.y,1),this._wireframe.scale.set(this._fixedScale.x,this._fixedScale.y,1);return}let e=this._clipper.world.camera.three,t;if(e instanceof Cp)t=(e.top-e.bottom)/e.zoom;else if(e instanceof id){let n=new ie;e.getWorldPosition(n),t=this._anchor.position.distanceTo(n)*Math.min(1.9*Math.tan(Math.PI*e.fov/360)/e.zoom,7)}else return;let i=t*this._controls.size/4*(this._clipper._planeVisualSizeMultiplier??1.5);this._mesh.scale.set(i,i,i),this._wireframe.scale.set(i,i,i)}_createWireframeGeometry(e){let t=[-.5,-.5,0,.5,-.5,0,.5,-.5,0,.5,.5,0,.5,.5,0,-.5,.5,0,-.5,.5,0,-.5,-.5,0],i=e==="edges"?t:t.concat([-.5,-.5,0,0,0,0,.5,-.5,0,0,0,0,.5,.5,0,0,0,0,-.5,.5,0,0,0,0]),n=new $n;return n.setAttribute("position",new Es(new Float32Array(i),3)),n}_pruneOppositeControlDirection(){if(!this._controlAxisDirection)return;let e=this._controlAxisDirection.axis,t=e.toLowerCase(),i=this._controlAxisDirection.direction,n=this._controls.getHelper(),s=[],r=new ie;n.traverse(o=>{if(o.name!==e||!o.geometry||(o.geometry.computeBoundingBox?.(),!o.geometry.boundingBox))return;o.geometry.boundingBox.getCenter(r);let a=r[t];typeof a=="number"&&(i>0&&a<-1e-4||i<0&&a>1e-4)&&s.push(o)});for(let o of s)o.removeFromParent()}_syncFromAnchor(){this._anchor.updateWorldMatrix(!0,!1);let e=this.getWorldNormal();this._normal.copy(e),this._threePlane.setFromNormalAndCoplanarPoint(e,this._anchor.position),this._updateScale(),this._clipper.applyClippingPlanes(),this._clipper.requestRender()}_updateWidgetVisibility(){let e=this._shown&&this._widgetsVisible,t=this._controlShown&&this._widgetsVisible;this._mesh.visible=e,this._wireframe.visible=e,this._controls.enabled=t,this._controls.visible=t,this._controls.getHelper().visible=t}},D1t=class{constructor({components:e,OBF:t,world:i,requestRender:n,styleName:s,groupName:r,createFillsMaterial:o,createLinesMaterial:a}){this._components=e,this._OBF=t,this._world=i,this._requestRender=n,this._styleName=s,this._groupName=r,this._createFillsMaterial=o??(()=>new Io({color:16727326,transparent:!1,opacity:1,side:2,depthWrite:!1,polygonOffset:!0,polygonOffsetFactor:-2,polygonOffsetUnits:-2})),this._createLinesMaterial=a??(()=>new zg({color:"black",linewidth:2})),this._edgesById=new Map,this._updateQueue=Promise.resolve(),this._revision=0}_getClipStyler(){try{let e=this._components.get(this._OBF.ClipStyler);return e?(e.world=this._world,e):null}catch{return null}}_ensureClipStyle(){let e=this._getClipStyler();return e?(e.styles.get(this._styleName)||e.styles.set(this._styleName,{fillsMaterial:this._createFillsMaterial(),linesMaterial:this._createLinesMaterial()}),e):null}_clearEdges(e=this._getClipStyler()){if(!e){this._edgesById.clear();return}for(let t of this._edgesById.keys())e.list.delete(t);this._edgesById.clear()}clear(){this._revision+=1,this._clearEdges(),this._requestRender()}_enqueue(e){return this._updateQueue=this._updateQueue.then(e,e),this._updateQueue}enqueueUpdate({entries:e,enabled:t}){let i=++this._revision;return this._enqueue(async()=>{if(i!==this._revision)return;let n=this._ensureClipStyle();if(this._clearEdges(n),!t||!e?.length){if(i!==this._revision)return;this._requestRender();return}if(n){for(let{id:s,plane:r}of e){if(i!==this._revision)return;let o=n.create(r,{id:s,world:this._world,items:{[this._groupName]:{style:this._styleName}}});if(o.visible=!0,await o.update(),i!==this._revision){n.list.delete(s);return}this._edgesById.set(s,o)}i===this._revision&&this._requestRender()}})}setFillColor(e){let t=String(e??"").replace(/^#/,"").trim();if(!/^[0-9a-fA-F]{6}$/.test(t))return;let i=this._ensureClipStyle();if(!i)return;let n=i.styles.get(this._styleName);n?.fillsMaterial&&(n.fillsMaterial.color.set(`#${t}`),this._requestRender())}destroy(){let e=this._getClipStyler();e&&e.styles.delete(this._styleName),this.clear()}},T3n="section-plane-cap-style",w3n="section-plane-cap-group",C3n=()=>new Io({color:16727326,transparent:!1,opacity:1,side:2,depthWrite:!1,polygonOffset:!0,polygonOffsetFactor:-2,polygonOffsetUnits:-2}),S3n=()=>new zg({color:"black",linewidth:2}),x3n=class extends D1t{constructor({components:e,OBF:t,world:i,requestRender:n}){super({components:e,OBF:t,world:i,requestRender:n,styleName:T3n,groupName:w3n,createFillsMaterial:C3n,createLinesMaterial:S3n})}enqueueUpdate(e,t){let i=(e??[]).reduce((n,s)=>(!s?.id||!s?.three||n.push({id:`section-plane-cap-${s.id}`,plane:s.three}),n),[]);return super.enqueueUpdate({entries:i,enabled:t})}},D1e={color:4034751,opacity:.07},R3n={idle:{color:4034751,opacity:.07},hovered:{color:4034751,opacity:.24},active:{color:2648469,opacity:.26},activeHovered:{color:2054789,opacity:.32}},P1t=Symbol("section-plane-owner"),_3n=class extends b9e{constructor(e){let{world:t,components:i,OBC:n,OBF:s,fragments:r}=e,o=e.requestRender.bind(e);super({world:t,requestRender:o,respectSceneDepth:!0}),this.fragmentsInstance=e;let a=i.get(n.Raycasters);this._caster=a.get(t),this._enabled=!1,this._fragments=r,this._showIntersections=!0,this._widgetsVisible=!0,this._capsVisible=!1,this._widgetMoveModifier=d=>!!d?.ctrlKey,this._planes=[],this._activeSectionPlane=null,this._hoveredPlane=null,this._hoveredWidgetType=null,this._id=0,this._offPick=null,this._lastPick=null,this._coreUpdateRequested=!1,this._coreUpdateInFlight=!1,this._intersectionGroup=new $r,this._intersectionGroup.renderOrder=4,this._widgetOverlayScene.add(this._intersectionGroup),this._intersectionMaterial=new Sz({color:16773222,transparent:!0,opacity:.95,dashSize:.35,gapSize:.2,depthTest:!1,depthWrite:!1}),this._planeByMesh=new Map,this._surfaceDrag=null,this._eventAbortController=null,this._capsManager=s?.ClipStyler?new x3n({components:i,OBF:s,world:t,requestRender:o}):null,this._onPointerMove=d=>{if(this._surfaceDrag){if(d.pointerId!==this._surfaceDrag.pointerId)return;if(d.preventDefault(),this._surfaceDrag.mode==="widget"){let g=this._intersectPointerWithThreePlane(d,this._surfaceDrag.plane.three);if(!g)return;this._surfaceDrag.plane.setWidgetPosition(g.sub(this._surfaceDrag.pointerOffset));return}let f=this._computeLineParameterFromPointerEvent(d,this._surfaceDrag.startPosition,this._surfaceDrag.axis);if(typeof f!="number")return;let m=f-this._surfaceDrag.startParameter;this._surfaceDrag.plane.setPositionAlongAxis(this._surfaceDrag.startPosition,this._surfaceDrag.axis,m);return}let u=this._getWidgetHitFromPointerEvent(d),h=u?.plane??null,p=u?.type??null;h===this._hoveredPlane&&p===this._hoveredWidgetType||(this._hoveredPlane?.setHovered(!1),this._hoveredPlane=h,this._hoveredWidgetType=p,this._hoveredPlane?.setHovered(!0),this._applyCursor())},this._onPointerDown=d=>{if(d.button!==0)return;let u=this._getPlaneHitFromPointerEvent(d);if(!u)return;if(this.setActivePlane(u),this._widgetMoveModifier(d)){let g=this._intersectPointerWithThreePlane(d,u.three);if(!g)return;this._surfaceDrag={mode:"widget",pointerId:d.pointerId,plane:u,pointerOffset:g.sub(u.widgetPosition.clone())},this.world.camera.enabled=!1;let A=this.world.renderer?.three?.domElement;A?.setPointerCapture?.(d.pointerId),A&&(A.style.cursor="crosshair"),d.preventDefault(),d.stopPropagation();return}let h=u._anchor.position.clone(),p=u.getWorldNormal(),f=this._computeLineParameterFromPointerEvent(d,h,p);if(typeof f!="number")return;this._surfaceDrag={mode:"plane",pointerId:d.pointerId,plane:u,axis:p,startPosition:h,startParameter:f},this.world.camera.enabled=!1;let m=this.world.renderer?.three?.domElement;m?.setPointerCapture?.(d.pointerId),m&&(m.style.cursor="grabbing"),d.preventDefault(),d.stopPropagation(),d.stopImmediatePropagation?.()},this._onPointerUp=d=>{!this._surfaceDrag||d.pointerId!==this._surfaceDrag.pointerId||this._endSurfaceDrag(d.pointerId)},this._onPointerLeave=()=>{this._hoveredPlane?.setHovered(!1),this._hoveredPlane=null,this._hoveredWidgetType=null,this._applyCursor()},this._eventAbortController=new AbortController;let{signal:l}=this._eventAbortController,c=this.world.renderer?.three?.domElement;c?.addEventListener("pointerdown",this._onPointerDown,{signal:l}),c?.addEventListener("pointermove",this._onPointerMove,{signal:l}),c?.addEventListener("pointerleave",this._onPointerLeave,{signal:l}),window.addEventListener("pointerup",this._onPointerUp,{signal:l}),window.addEventListener("pointercancel",this._onPointerUp,{signal:l}),this._offPick=this.fragmentsInstance.onPick(async({event:d})=>{let u=this._getPlaneHitFromPointerEvent(d);if(u){this.emit("plane-clicked",{plane:u});return}else this._activeSectionPlane&&this.setActivePlane(null);if(!this._enabled)return;let h=await this._pickSurfaceFromEvent(d);h&&(this._lastPick=h,await this.addSectionPlane({showControl:!0}),this.disable())}),this._planeMaterial=new Io({color:D1e.color,side:2,transparent:!0,opacity:D1e.opacity,depthTest:!1,depthWrite:!1})}_requestCoreRaycastUpdate(){this._coreUpdateRequested=!0,!this._coreUpdateInFlight&&(this._coreUpdateInFlight=!0,Promise.resolve().then(async()=>{try{for(;this._coreUpdateRequested;)this._coreUpdateRequested=!1,await this._fragments.core.update(!0);this.requestRender()}catch(e){console.warn("[BIMDataViewer - 3D Fragments - section-planes] Failed to update raycast state after clipping change.",e)}finally{this._coreUpdateInFlight=!1}}))}get enabled(){return this._enabled}set enabled(e){e?this.enable():this.disable()}get sectionPlanes(){return this._planes}get widgetsVisible(){return this._widgetsVisible}set widgetsVisible(e){let t=!!e;if(this._widgetsVisible!==t){this._widgetsVisible=t;for(let i of this._planes)i.setWidgetsVisible(t);this._updateIntersectionLines(),this.requestRender()}}get widgetMoveModifier(){return this._widgetMoveModifier}set widgetMoveModifier(e){if(typeof e!="function")throw TypeError("widgetMoveModifier must be a function");this._widgetMoveModifier=e}get capsVisible(){return this._capsVisible}set capsVisible(e){let t=!!e;this._capsVisible!==t&&(this._capsVisible=t,this._updateCaps())}get showIntersections(){return this._showIntersections}set showIntersections(e){let t=!!e;this._showIntersections!==t&&(this._showIntersections=t,this._updateIntersectionLines(),this.requestRender())}get activeSectionPlane(){return this._activeSectionPlane}_getPlaneById(e){return e?this._planes.find(t=>t.id===e)??null:null}_registerPlaneMesh(e,t){this._planeByMesh.set(e,t)}_unregisterPlaneMesh(e){this._planeByMesh.delete(e)}setMaterial(e=null){if(!e){this._planeMaterial.color.setHex(D1e.color),this._planeMaterial.opacity=D1e.opacity;return}let{color:t,opacity:i}=e;typeof t=="number"&&this._planeMaterial.color.setHex(t),typeof i=="number"&&(this._planeMaterial.opacity=i);for(let n of this._planes)n._applyVisualState();this.requestRender()}enable(){this._enabled=!0}disable(){this._enabled=!1}async addSectionPlane(e={}){let t=e.point instanceof ie;if(t!==e.normal instanceof ie)throw TypeError("point and normal must be provided together");let i=t?{point:e.point.clone(),normal:e.normal.clone().normalize()}:this._lastPick;if(!i)return null;let n=new _1t({id:`section-plane-${++this._id}`,clipper:this,point:i.point,normal:i.normal,visualState:R3n});return n.three[P1t]=this,n.setWidgetsVisible(this._widgetsVisible),this._planes.push(n),this.applyClippingPlanes(),this.requestRender(),this._lastPick=null,this.emit("created",{plane:n}),this.setActivePlane(n),n}setActivePlane(e){let t=e&&this._planes.includes(e)?e:null;if(this._activeSectionPlane===t)return;let i=this._activeSectionPlane;i?.setActive(!1),this._activeSectionPlane=t,t?.setActive(!0),this.hideAllControls(),t?.shown&&t.showControl(),this.emit("active-changed",{plane:t,previousPlane:i}),this.requestRender()}removeSectionPlane(e){return!e||!this._planes.includes(e)?!1:(e.destroy(),!0)}onSectionPlaneDestroyed(e){this._activeSectionPlane===e&&this.setActivePlane(null),this._hoveredPlane===e&&(this._hoveredPlane=null);let t=this._planes.indexOf(e);t!==-1&&(this._planes.splice(t,1),this.emit("deleted",{plane:e}),this.applyClippingPlanes(),this.requestRender())}applyClippingPlanes(){let e=this.world.renderer?.three;if(!e)return;let t=this._planes.filter(n=>n.shown).map(n=>n.three),i=[...(Array.isArray(e.clippingPlanes)?e.clippingPlanes:[]).filter(n=>n?.[P1t]!==this),...t].filter((n,s,r)=>r.indexOf(n)===s);e.localClippingEnabled=i.length>0,e.clippingPlanes=i,this.world.renderer?.updateClippingPlanes(),this._requestCoreRaycastUpdate(),this._updateIntersectionLines(),this._updateCaps()}hideAllControls(){for(let e of this._planes)e.hideControl()}destroy(){this.disable();for(let t of[...this._planes])t.destroy();this._hoveredPlane=null,this._hoveredWidgetType=null,this._activeSectionPlane=null;let e=this.world.renderer?.three?.domElement;this._endSurfaceDrag(),this._eventAbortController?.abort(),this._eventAbortController=null,e&&(e.style.cursor=""),this._offPick?.(),this._offPick=null,this.destroyOverlayLayer(),this._clearIntersectionLines(),this._intersectionGroup.removeFromParent(),this._intersectionMaterial.dispose(),this._capsManager?.destroy(),this.clear(),this._planeMaterial.dispose()}_updateCaps(){this._capsManager?.enqueueUpdate(this._planes.filter(e=>e.shown),this._capsVisible)}setCapsColor(e){this._capsManager?.setFillColor(e)}async _pickSurfaceFromEvent(e){let t=this.world.renderer?.three?.domElement;if(!t)return null;let i=t.getBoundingClientRect(),n={x:(e.clientX-i.left)/i.width*2-1,y:-((e.clientY-i.top)/i.height)*2+1},s=await this._caster.castRay({position:n});if(!s?.point)return null;let r=null;if(s.normal)r=s.normal.clone();else if(s.face?.normal&&s.object){let o=new Ao().getNormalMatrix(s.object.matrixWorld);r=s.face.normal.clone().applyMatrix3(o)}return r?(r.normalize().negate(),{point:s.point.clone(),normal:r}):null}_getPlaneHitFromPointerEvent(e){let t=this._getWidgetHitFromPointerEvent(e);return!t||t.type!=="plane"?null:t.plane}_getWidgetHitFromPointerEvent(e){if(!this.world.renderer?.three?.domElement||this._widgetOverlayScene.children.length===0||!this._setPointerFromEvent(e))return null;let t=this._widgetRaycaster.intersectObject(this._widgetOverlayScene,!0),i=null;for(let n of t){let s=n.object;if(s.userData.isSectionPlaneIntersectionLine||!s.visible)continue;let r=Array.isArray(s.material)?s.material:[s.material],o=r.some(l=>l&&l.visible!==!1);if(r.length>0&&!o)continue;if(s.userData.isSectionPlaneControlHandle){let l=this._getPlaneById(s.userData.sectionPlaneId);if(l?.controlShown)return{type:"control",plane:l};continue}let a=this._planeByMesh.get(s);!i&&a?.shown&&(i={type:"plane",plane:a})}return i}_computeLineParameterFromPointerEvent(e,t,i){if(!this._setPointerFromEvent(e))return null;let n=this._widgetRaycaster.ray.origin,s=this._widgetRaycaster.ray.direction,r=i.clone().normalize(),o=n.clone().sub(t),a=s.dot(r),l=s.dot(o),c=r.dot(o),d=1-a*a;return Math.abs(d)<1e-5?null:(c-a*l)/d}_endSurfaceDrag(e=null){if(!this._surfaceDrag||e!==null&&e!==this._surfaceDrag.pointerId)return;let t=this._surfaceDrag.pointerId;this._surfaceDrag=null,this.world.camera.enabled=!0,this.world.renderer?.three?.domElement?.releasePointerCapture?.(t),this._applyCursor()}_applyCursor(){let e=this.world.renderer?.three?.domElement;if(e){if(this._surfaceDrag){e.style.cursor=this._surfaceDrag.mode==="widget"?"crosshair":"grabbing";return}if(this._hoveredWidgetType==="control"){e.style.cursor="move";return}if(this._hoveredWidgetType==="plane"){e.style.cursor="grab";return}e.style.cursor=""}}_clearIntersectionLines(){for(;this._intersectionGroup.children.length>0;){let e=this._intersectionGroup.children[0];e.removeFromParent(),e.geometry?.dispose?.()}}_updateIntersectionLines(){if(this._clearIntersectionLines(),!this._showIntersections||!this._widgetsVisible)return;let e=this._planes.filter(n=>n.shown);if(e.length<2)return;let t=e.reduce((n,s)=>Math.max(n,s?._mesh?.scale?.x??0),0),i=Math.max(8,t*2);for(let n=0;n<e.length-1;n++){let s=e[n].three,r=s.normal.clone(),o=s.constant;for(let a=n+1;a<e.length;a++){let l=e[a].three,c=l.normal.clone(),d=l.constant,u=new ie().crossVectors(r,c),h=u.lengthSq();if(h<1e-8)continue;u.normalize();let p=-o,f=-d,m=new ie().copy(c).multiplyScalar(p).addScaledVector(r,-f).cross(new ie().crossVectors(r,c)).divideScalar(h),g=m.clone().addScaledVector(u,-i),A=m.clone().addScaledVector(u,i),E=new _c(new $n().setFromPoints([g,A]),this._intersectionMaterial);E.computeLineDistances(),E.renderOrder=4,E.userData.isSectionPlaneIntersectionLine=!0,this._intersectionGroup.add(E)}}}},D3n={color:13386786,opacity:.3},P3n=["silver","grey","darkgray"],O3n=e=>`#${e.toString(16).padStart(6,"0")}`,N3n=e=>({idle:{color:e,opacity:.1},hovered:{color:e,opacity:.24},active:{color:e,opacity:.3},activeHovered:{color:e,opacity:.36}});function M3n(e){let t=new _3n(e),i=new AbortController,n=new Map,s=new Map,r=new Map,o=Aa(null),a=E=>{let b=r.get(E);if(b)return b;let T=O3n(CE({excludedHexColors:Array.from(r.values()).map(C=>Number.parseInt(C.slice(1),16)).filter(C=>Number.isFinite(C)),excludeTooBright:!0,excludeTooDark:!0,excludedNames:P3n}));return r.set(E,T),T},l=(E,b)=>{let T=Number.parseInt(b.slice(1),16);E.setVisualStateDefinition(N3n(T)),E.setControlColor?.(T)},c=E=>{let b=a(E);l(E,b);let T=yp({id:E.id,shown:E.shown,controlsShown:E.controlShown,active:E.active,color:b,get location(){return E.location},get position(){return E.position},get direction(){return E.direction},show:()=>{E.show()},hide:()=>{E.hide()},delete:()=>t.removeSectionPlane(E),showControl:()=>{t.hideAllControls(),E.showControl()},hideControl:()=>{E.hideControl()}});return n.set(E,T),s.set(T,E),T},d=E=>{if(E)return n.get(E)??c(E)},u=E=>{for(let[b,T]of n.entries())T.active=b===E;o.value=E?d(E)??null:null},h=E=>{if(E==null){t.setActivePlane(null);return}let b=s.get(E)??E;t.setActivePlane(b)},p=yp([]);for(let E of t.sectionPlanes)p.push(d(E));t.on("created",({plane:E})=>{let b=d(E);b&&(p.includes(b)||p.push(b))},{abortSignal:i.signal}),t.on("deleted",({plane:E})=>{let b=n.get(E);if(!b)return;r.delete(E),n.delete(E),s.delete(b);let T=p.indexOf(b);T!==-1&&p.splice(T,1),o.value===b&&(o.value=null)},{abortSignal:i.signal}),t.on("shown",({plane:E})=>{let b=d(E);b&&(b.shown=!0)},{abortSignal:i.signal}),t.on("hidden",({plane:E})=>{let b=d(E);b&&(b.shown=!1)},{abortSignal:i.signal}),t.on("controls-shown",({plane:E})=>{let b=d(E);b&&(b.controlsShown=!0)},{abortSignal:i.signal}),t.on("controls-hidden",({plane:E})=>{let b=d(E);b&&(b.controlsShown=!1)},{abortSignal:i.signal}),t.on("plane-clicked",({plane:E})=>{h(E)},{abortSignal:i.signal}),t.on("active-changed",({plane:E})=>{u(E??null)},{abortSignal:i.signal}),u(t.activeSectionPlane??null);let f=Un(()=>e.$viewer.localContext.loadedModels,()=>{t.sectionPlanes.slice().forEach(E=>{E.destroy()})}),m=()=>{t.enabled=!0,t.applyClippingPlanes(),e.highlightMaterial=D3n},g=()=>{t.enabled=!1,e.highlightMaterial=null},A={get enabled(){return t.enabled},enableSection:m,disableSection:g,addSectionPlane:E=>t.addSectionPlane(E),removeSectionPlane:E=>s.has(E)?t.removeSectionPlane(s.get(E)):t.removeSectionPlane(E),deleteSectionPlane(E){return A.removeSectionPlane(E)},sectionPlanes:p,get activeSectionPlane(){return o.value},set activeSectionPlane(E){h(E)},get showIntersections(){return t.showIntersections},set showIntersections(E){t.showIntersections=E},get widgetsVisible(){return t.widgetsVisible},set widgetsVisible(E){t.widgetsVisible=E},get capsVisible(){return t.capsVisible},set capsVisible(E){t.capsVisible=E},toggleSectionCaps(E){t.capsVisible=E},setSectionCapsColor(E){t.setCapsColor(E)},get widgetMoveModifier(){return t.widgetMoveModifier},set widgetMoveModifier(E){t.widgetMoveModifier=E}};return{destroy(){f(),i.abort(),g(),t.destroy()},extension:A}}var L3n=.02,B3n=.01,O1t=.1,F3n="section-box-cap",k3n={x1:new ie(-1,0,0),x2:new ie(1,0,0),y1:new ie(0,-1,0),y2:new ie(0,1,0),z1:new ie(0,0,-1),z2:new ie(0,0,1)},SQ=(e,t,i,n)=>{let s=t.clone().applyMatrix4(i),r=e.clone().applyMatrix3(n).normalize(),o=new Ys;return o.setFromNormalAndCoplanarPoint(r,s),o},U3n=(e,t=null)=>{let{min:i,max:n}=e;if(!t)return[new Ys(new ie(-1,0,0),n.x),new Ys(new ie(1,0,0),-i.x),new Ys(new ie(0,-1,0),n.y),new Ys(new ie(0,1,0),-i.y),new Ys(new ie(0,0,-1),n.z),new Ys(new ie(0,0,1),-i.z)];let s=new Ao().getNormalMatrix(t);return[SQ(new ie(-1,0,0),new ie(n.x,0,0),t,s),SQ(new ie(1,0,0),new ie(i.x,0,0),t,s),SQ(new ie(0,-1,0),new ie(0,n.y,0),t,s),SQ(new ie(0,1,0),new ie(0,i.y,0),t,s),SQ(new ie(0,0,-1),new ie(0,0,n.z),t,s),SQ(new ie(0,0,1),new ie(0,0,i.z),t,s)]},N1t=e=>{let t=new ie;e.getSize(t);let i=Math.max(t.x,t.y,t.z),n=Math.max(i*L3n,B3n);return e.clone().expandByScalar(n)},H3n=()=>new Io({color:16727326,transparent:!1,opacity:1,side:2,depthWrite:!1,polygonOffset:!0,polygonOffsetFactor:-2,polygonOffsetUnits:-2}),G3n=()=>new zg({color:"black",linewidth:2}),V3n=class extends D1t{constructor({components:e,OBF:t,world:i,requestRender:n}){super({components:e,OBF:t,world:i,requestRender:n,styleName:F3n,groupName:"all",createFillsMaterial:H3n,createLinesMaterial:G3n})}enqueueUpdate(e,t){let i=["x1","x2","y1","y2","z1","z2"],n=(e?.clippingPlanes??[]).reduce((s,r,o)=>(r&&s.push({id:`section-box-cap-${i[o]??o}`,plane:r}),s),[]);return super.enqueueUpdate({entries:n,enabled:t})}},j3n=class extends b9e{constructor({world:e,requestRender:t,axisNormals:i,getSectionBox:n,isEditEnabled:s,isWidgetVisible:r,isOverlayVisible:o,getPlaneSizeMultiplier:a,getPlaneVisualState:l,onBoundsChange:c}){super({world:e,requestRender:t,respectSceneDepth:!0}),this._axisNormals=i,this._getSectionBox=n,this._isEditEnabled=s,this._isWidgetVisible=r,this._isOverlayVisible=o,this._getPlaneSizeMultiplier=a,this._getPlaneVisualState=l,this._onBoundsChange=c,this._widgets=new Map,this._widgetByMesh=new Map,this._widgetById=new Map,this._hoveredWidget=null,this._hoveredWidgetType=null,this._isSyncingFromBounds=!1,this._surfaceDrag=null,this._eventAbortController=null,this._planeMaterial=new Io({color:4034751,side:2,transparent:!0,opacity:.07,depthTest:!1,depthWrite:!1}),this._clipperAdapter={world:e,requestRender:t,_planeMaterial:this._planeMaterial,_widgetOverlayScene:this._widgetOverlayScene,_registerPlaneMesh:()=>{},_unregisterPlaneMesh:()=>{},emit:()=>{},activeSectionPlane:null,setActivePlane:()=>{},applyClippingPlanes:()=>{this._onWidgetPlaneChanged()},onSectionPlaneDestroyed:()=>{}},this._eventAbortController=new AbortController;let{signal:d}=this._eventAbortController,u=this.world.renderer?.three?.domElement;u?.addEventListener("pointerdown",h=>this._onPointerDown(h),{signal:d}),u?.addEventListener("pointermove",h=>this._onPointerMove(h),{signal:d}),u?.addEventListener("pointerleave",()=>this._onPointerLeave(),{signal:d}),window.addEventListener("pointerup",h=>this._onPointerUp(h),{signal:d}),window.addEventListener("pointercancel",h=>this._onPointerUp(h),{signal:d})}_getFaceScale(e,t){let i=e.getSize(new ie),n=this._getPlaneSizeMultiplier();return t==="x1"||t==="x2"?new Cn(i.y*n,i.z*n):t==="y1"||t==="y2"?new Cn(i.x*n,i.z*n):new Cn(i.x*n,i.y*n)}_getFaceCenter(e,t){let i=e.getCenter(new ie);return t==="x1"?new ie(e.min.x,i.y,i.z):t==="x2"?new ie(e.max.x,i.y,i.z):t==="y1"?new ie(i.x,e.min.y,i.z):t==="y2"?new ie(i.x,e.max.y,i.z):t==="z1"?new ie(i.x,i.y,e.min.z):new ie(i.x,i.y,e.max.z)}_toWorldPoint(e,t){return t?t.localToWorldPoint(e):e}_toWorldNormal(e,t){return t?t.localToWorldDirection(e):e}_getFaceTangent(e,t){let i=null;return i=e==="x1"||e==="x2"?new ie(0,1,0):new ie(1,0,0),this._toWorldNormal(i,t).normalize()}_createWidget(e,t,i){let n=this._getFaceCenter(t,e),s=this._toWorldPoint(n,i),r=this._toWorldNormal(this._axisNormals[e].clone(),i),o=this._getFaceTangent(e,i),a=new _1t({id:`section-box-plane-${e}`,clipper:this._clipperAdapter,point:s,normal:r,scaleMode:"fixed",fixedScale:this._getFaceScale(t,e),controlSize:.7,activeEnabled:!1,visualState:this._getPlaneVisualState(),controlAxisDirection:{axis:"Z",direction:1},wireframeMode:"edges"});return a.setFromPointNormalAndTangent(s,r,o),a.show(),a.showControl(),this._widgets.set(e,a),this._widgetByMesh.set(a._mesh,a),this._widgetById.set(a.id,a),a}_updateWidget(e,t,i){let n=this._widgets.get(e)??this._createWidget(e,t,i),s=this._getFaceCenter(t,e),r=this._toWorldPoint(s,i),o=this._toWorldNormal(this._axisNormals[e].clone(),i),a=this._getFaceTangent(e,i);n.setFromPointNormalAndTangent(r,o,a);let l=this._getFaceScale(t,e);n.setFixedScale(l.x,l.y),n.setVisualStateDefinition(this._getPlaneVisualState())}_getWidgetHitFromPointerEvent(e){if(!this._isOverlayVisible()||!this._setPointerFromEvent(e))return null;let t=this._widgetRaycaster.intersectObject(this._widgetOverlayScene,!0),i=null;for(let n of t){let s=n.object;if(!s.visible)continue;let r=Array.isArray(s.material)?s.material:[s.material],o=r.some(l=>l&&l.visible!==!1);if(r.length>0&&!o)continue;if(s.userData.isSectionPlaneControlHandle){let l=this._widgetById.get(s.userData.sectionPlaneId);if(l?.controlShown)return{type:"control",plane:l};continue}let a=this._widgetByMesh.get(s);!i&&a?.shown&&(i={type:"plane",plane:a})}return i}_getPlaneHitFromPointerEvent(e){let t=this._getWidgetHitFromPointerEvent(e);return!t||t.type!=="plane"?null:t.plane}_computeLineParameterFromPointerEvent(e,t,i){if(!this._setPointerFromEvent(e))return null;let n=this._widgetRaycaster.ray.origin,s=this._widgetRaycaster.ray.direction,r=i.clone().normalize(),o=n.clone().sub(t),a=s.dot(r),l=s.dot(o),c=r.dot(o),d=1-a*a;return Math.abs(d)<1e-5?null:(c-a*l)/d}_applyCursor(){let e=this.world.renderer?.three?.domElement;if(e){if(!this._isOverlayVisible()){e.style.cursor="";return}if(this._surfaceDrag){e.style.cursor="grabbing";return}if(this._hoveredWidgetType==="control"){e.style.cursor="move";return}if(this._hoveredWidgetType==="plane"){e.style.cursor="grab";return}e.style.cursor=""}}_onPointerDown(e){if(e.button!==0||!this._isEditEnabled()||!this._isOverlayVisible())return;let t=this._getPlaneHitFromPointerEvent(e);if(!t)return;let i=t.widgetPosition.clone(),n=t.getWorldNormal(),s=this._computeLineParameterFromPointerEvent(e,i,n);typeof s=="number"&&(this._surfaceDrag={pointerId:e.pointerId,plane:t,axis:n,startPosition:i,startParameter:s},this.world.camera.enabled=!1,this.world.renderer?.three?.domElement?.setPointerCapture?.(e.pointerId),this._applyCursor(),e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation?.())}_onPointerMove(e){if(this._surfaceDrag){if(e.pointerId!==this._surfaceDrag.pointerId)return;e.preventDefault();let s=this._computeLineParameterFromPointerEvent(e,this._surfaceDrag.startPosition,this._surfaceDrag.axis);if(typeof s!="number")return;let r=s-this._surfaceDrag.startParameter;this._surfaceDrag.plane.setPositionAlongAxis(this._surfaceDrag.startPosition,this._surfaceDrag.axis,r);return}if(!this._isWidgetVisible()||!this._isOverlayVisible()){this._clearHoveredWidget(),this._hoveredWidgetType=null,this._applyCursor();return}let t=this._getWidgetHitFromPointerEvent(e),i=t?.plane??null,n=t?.type??null;i===this._hoveredWidget&&n===this._hoveredWidgetType||(this._hoveredWidget?.setHovered(!1),this._hoveredWidget=i,this._hoveredWidgetType=n,this._hoveredWidget?.setHovered(!0),this._applyCursor())}_onPointerUp(e){if(!this._surfaceDrag||e.pointerId!==this._surfaceDrag.pointerId)return;let t=this._surfaceDrag.pointerId;this._surfaceDrag=null,this.world.camera.enabled=!0,this.world.renderer?.three?.domElement?.releasePointerCapture?.(t),this._applyCursor()}_onPointerLeave(){this._clearHoveredWidget(),this._hoveredWidgetType=null,this._applyCursor()}_clearHoveredWidget(){this._hoveredWidget&&=(this._hoveredWidget.setHovered(!1),null)}_applyWidgetsVisibility(){let e=this._isWidgetVisible()&&this._isOverlayVisible(),t=this._isEditEnabled()&&e;for(let i of this._widgets.values())i.setWidgetsVisible(e),(!e||!t)&&i.setHovered(!1),e&&t?i.showControl():i.hideControl();this.requestRender()}_onWidgetPlaneChanged(){if(this._isSyncingFromBounds)return;let e=this._getSectionBox(),t=e?.bounds;if(!t)return;let i=t.clone(),n=(f,m)=>{let g=this._widgets.get(f)?.widgetPosition;return g?e?e.worldToLocalPoint(g):g:m},s=n("x1",new ie(t.min.x,0,0)).x,r=n("x2",new ie(t.max.x,0,0)).x,o=n("y1",new ie(0,t.min.y,0)).y,a=n("y2",new ie(0,t.max.y,0)).y,l=n("z1",new ie(0,0,t.min.z)).z,c=n("z2",new ie(0,0,t.max.z)).z,d=(f,m,g,A)=>{let E=f,b=m;return b>=E+.1||(Math.abs(f-g)>Math.abs(m-A)?E=b-O1t:b=E+O1t),{min:E,max:b}},u=d(s,r,t.min.x,t.max.x),h=d(o,a,t.min.y,t.max.y),p=d(l,c,t.min.z,t.max.z);i.min.x=u.min,i.max.x=u.max,i.min.y=h.min,i.max.y=h.max,i.min.z=p.min,i.max.z=p.max,this._onBoundsChange(i)}update(e){if(!e)return;let t=this._getSectionBox();if(t){this._clipperAdapter._planeVisualSizeMultiplier=this._getPlaneSizeMultiplier(),this._isSyncingFromBounds=!0;for(let i of Object.keys(this._axisNormals))this._updateWidget(i,e,t);this._isSyncingFromBounds=!1,this._applyWidgetsVisibility()}}clear(){this._clearHoveredWidget(),this._hoveredWidgetType=null;for(let e of this._widgets.values())e.destroy();this._widgets.clear(),this._widgetByMesh.clear(),this._widgetById.clear()}setHandleEditEnabled(){this._applyWidgetsVisibility()}setWidgetVisible(){this._applyWidgetsVisibility()}destroy(){let e=this.world.renderer?.three?.domElement;this._eventAbortController?.abort(),this._eventAbortController=null,e&&(e.style.cursor=""),this.clear(),this._planeMaterial.dispose(),this.destroyOverlayLayer()}},M1t=e=>e.normal.clone().multiplyScalar(-e.constant),z3n=e=>({get location(){return M1t(e)},get position(){return M1t(e)},get direction(){return e.normal}}),q3n=class{constructor({uuid:e,bounds:t,frame:i=null,boxVisible:n=!0,widgetVisible:s=!0,overlayVisible:r=!0,onVisibilityChange:o=null,onClear:a}){this.id=e,this.uuid=e,this.bounds=t,this.frame=i?.clone?.()??new mn,this.inverseFrame=this.frame.clone().invert(),this.clippingPlanes=[],this._boxVisible=si(n),this._widgetVisible=si(s),this._overlayVisible=si(r),this._onVisibilityChange=o,this._onClear=a,this._planes=[]}setFrame(e){this.frame.copy(e),this.inverseFrame.copy(e).invert()}localToWorldPoint(e){return e.clone().applyMatrix4(this.frame)}worldToLocalPoint(e){return e.clone().applyMatrix4(this.inverseFrame)}localToWorldDirection(e){let t=new Ao().getNormalMatrix(this.frame);return e.clone().applyMatrix3(t).normalize()}getWorldBounds(){let e=[new ie(this.bounds.min.x,this.bounds.min.y,this.bounds.min.z),new ie(this.bounds.min.x,this.bounds.min.y,this.bounds.max.z),new ie(this.bounds.min.x,this.bounds.max.y,this.bounds.min.z),new ie(this.bounds.min.x,this.bounds.max.y,this.bounds.max.z),new ie(this.bounds.max.x,this.bounds.min.y,this.bounds.min.z),new ie(this.bounds.max.x,this.bounds.min.y,this.bounds.max.z),new ie(this.bounds.max.x,this.bounds.max.y,this.bounds.min.z),new ie(this.bounds.max.x,this.bounds.max.y,this.bounds.max.z)];for(let t of e)t.applyMatrix4(this.frame);return new As().setFromPoints(e)}get shown(){return this._boxVisible.value}get widgetVisible(){return this._widgetVisible.value}get overlayVisible(){return this._overlayVisible.value}get planes(){return this._planes}show(){let e=!this._boxVisible.value||!this._widgetVisible.value||!this._overlayVisible.value;this._boxVisible.value=!0,this._widgetVisible.value=!0,this._overlayVisible.value=!0,e&&this._onVisibilityChange?.()}hide(){let e=this._boxVisible.value||this._widgetVisible.value||this._overlayVisible.value;this._boxVisible.value=!1,this._widgetVisible.value=!1,this._overlayVisible.value=!1,e&&this._onVisibilityChange?.()}setOverlayVisible(e){let t=!!e;this._overlayVisible.value!==t&&(this._overlayVisible.value=t,this._onVisibilityChange?.())}clear(){this._onClear()}setBounds(e){this.bounds.copy(e)}syncClippingPlanes(){let e=U3n(this.bounds,this.frame);if(this.clippingPlanes.length===0)return this.clippingPlanes=e,this._planes=e.map(t=>z3n(t)),this.clippingPlanes;for(let t=0;t<e.length;t++)this.clippingPlanes[t].normal.copy(e[t].normal),this.clippingPlanes[t].constant=e[t].constant;return this.clippingPlanes}},W3n={color:13386786,opacity:.3},Q3n=12e3,X3n=24,hL=new ie(0,1,0),w9e=new ie(1,0,0),C9e=new ie(0,0,1),K3n=(e,t,i)=>{let n=e.clone().normalize(),s=i.clone().normalize(),r=t.clone().normalize();if(n.lengthSq()<1e-10||r.lengthSq()<1e-10||s.lengthSq()<1e-10)return null;let o=s.clone().cross(n).normalize();return o.lengthSq()<1e-10?null:{x:o.clone().cross(s).normalize(),y:o,z:s.clone()}},P1e=(e,t)=>new mn().makeBasis(t.x,t.y,t.z).setPosition(e),Y3n=e=>{let t=e.clone();return t.y=0,t.lengthSq()<1e-10?null:t.normalize()},L1t=e=>{if(!e?.length)return null;let t=new ie;for(let i of e)t.add(i);return t.multiplyScalar(1/e.length),t},Z3n=e=>{let t=L1t(e);if(!t)return null;let i=0,n=0,s=0;for(let o of e){let a=o.x-t.x,l=o.z-t.z;i+=a*a,n+=a*l,s+=l*l}if(i+s<1e-10)return null;let r=.5*Math.atan2(2*n,i-s);return new ie(Math.cos(r),0,Math.sin(r)).normalize()},B1t=(e,t=null)=>{let i=L1t(e);if(!i)return null;let n=t?.clone?.().normalize?.()??Z3n(e);if(!n||n.lengthSq()<1e-10)return P1e(i,{x:w9e.clone(),y:hL.clone(),z:C9e.clone()});let s=hL.clone().cross(n).normalize();if(s.lengthSq()<1e-10)return P1e(i,{x:w9e.clone(),y:hL.clone(),z:C9e.clone()});let r=K3n(s,hL,n);return r?(r.y.copy(hL),r.x.copy(hL).cross(r.z).normalize(),r.z.copy(r.x).cross(hL).negate().normalize(),P1e(i,r)):P1e(i,{x:w9e.clone(),y:hL.clone(),z:C9e.clone()})},J3n=(e,t)=>{if(!e.length)return null;let i=t.clone().invert(),n=new As;for(let s of e){let r=s.clone().applyMatrix4(i);n.expandByPoint(r)}return n};function $3n(e){let{fragments:t,world:i,components:n,OBF:s,$viewer:r}=e,o=null,a=!1,l=!0,c=!1,d=!0,u=!0,h=1,p={idle:{color:4034751,opacity:.07},hovered:{color:4034751,opacity:.24}},f="shiftKey",m=()=>i.renderer?.three,g=Aa(null),A=()=>{g.value=o},E=new V3n({components:n,OBF:s,world:i,requestRender:e.requestRender.bind(e)}),b=()=>{o&&(d=o.widgetVisible,u=o.overlayVisible)},T=()=>{if(!o)return;let Oe=m();if(!Oe)return;o.syncClippingPlanes();let Ge=o.shown?o.clippingPlanes:[],We=Array.isArray(Oe.clippingPlanes)?Oe.clippingPlanes:[],Ze=o.clippingPlanes,Ft=[...We.filter(Pt=>!Ze.includes(Pt)),...Ge].filter((Pt,tt,kt)=>kt.indexOf(Pt)===tt);Oe.localClippingEnabled=Ft.length>0,Oe.clippingPlanes=Ft,i.renderer?.updateClippingPlanes()},C=new j3n({world:i,requestRender:e.requestRender.bind(e),axisNormals:k3n,getSectionBox:()=>o,isEditEnabled:()=>l,isWidgetVisible:()=>o?.widgetVisible??d,isOverlayVisible:()=>o?.overlayVisible??u,getPlaneSizeMultiplier:()=>h,getPlaneVisualState:()=>p,onBoundsChange:Oe=>{o&&(o.setBounds(Oe),T(),E.enqueueUpdate(o,c),C.update(o.bounds),e.requestRender())}}),S=()=>{if(o){if(o.shown){C.update(o.bounds),E.enqueueUpdate(o,c);return}E.clear(),C.setWidgetVisible()}},R=async()=>{b(),C.setWidgetVisible(),T(),S(),A(),await e.fragments.core.update(!0),e.requestRender()},x=async()=>{let Oe=o;o=null,A(),E.clear(),C.clear();let Ge=m();if(Ge){let We=Oe?.clippingPlanes??[],Ze=(Array.isArray(Ge.clippingPlanes)?Ge.clippingPlanes:[]).filter(Ft=>!We.includes(Ft));Ge.clippingPlanes=Ze,Ge.localClippingEnabled=Ze.length>0,i.renderer?.updateClippingPlanes()}await e.fragments.core.update(!0),e.requestRender()},_=(Oe,Ge="section-box",We=null)=>{if(!(Oe instanceof As))throw TypeError("[BIMDataViewer - 3D Fragments - section-box] createSectionBoxFromBounds(bounds) expects a THREE.Box3.");return Oe.isEmpty()?(x(),!1):(o&&x(),m()?(o=new q3n({uuid:Ge,bounds:Oe.clone(),frame:We,boxVisible:!0,widgetVisible:!0,overlayVisible:u,onVisibilityChange:R,onClear:x}),T(),S(),A(),!0):!1)},F=async(Oe,Ge)=>{let We=[],Ze;try{Ze=n.get(s.Mesher)}catch{return We}if(!Ze?.get)return We;let Ft;try{Ft=await Ze.get(Oe)}catch{return We}if(!Ft?.entries)return We;for(let[,Pt]of Ft.entries())if(Pt?.entries){for(let[,tt]of Pt.entries())if(Array.isArray(tt))for(let kt of tt){if(We.length>=Ge)return We;let Dt=kt?.geometry?.getAttribute?.("position");if(!Dt||!Dt.array||Dt.count<=0)continue;kt.updateMatrixWorld?.(!0);let At=kt.matrixWorld,ut=Math.max(1,Ge-We.length),bt=Math.min(256,Dt.count,ut),_t=Math.max(1,Math.floor(Dt.count/bt));for(let hi=0;hi<Dt.count&&We.length<Ge;hi+=_t){let It=new ie().fromBufferAttribute(Dt,hi);It.applyMatrix4(At),We.push(It)}}}return We},L=async(Oe,Ge=Q3n)=>{let We=[],Ze=await F(Oe,Ge);if(We.push(...Ze),We.length>=Math.min(X3n,Ge))return We;let Ft=Object.entries(Oe);if(Ft.length===0||Ge<=0)return We;for(let[Pt,tt]of Ft){let kt=t.list.get(Pt);if(!kt)continue;let Dt=tt instanceof Set?[...tt]:[...new Set(tt)];if(Dt.length)for(let At of Dt){if(We.length>=Ge)break;let ut;try{ut=await kt.getItemDrawChunks([At])}catch{continue}if(ut?.length)for(let bt of ut){if(We.length>=Ge)break;let _t=kt.tiles.get(bt.tileId),hi=_t?.geometry,It=hi?.getAttribute?.("position");if(!_t||!It)continue;let ne=hi.index?.array??null,dt=Math.min(bt.position?.length??0,bt.size?.length??0);for(let pt=0;pt<dt&&!(We.length>=Ge);pt+=1){let Ve=bt.position[pt]??0,Ie=bt.size[pt]??0,me=ne?ne.length:It.count,ct=Math.min(me-Ve,Ie===4294967295?me-Ve:Ie);if(!Number.isFinite(ct)||ct<=0)continue;let ot=Math.max(1,Ge-We.length),Fe=Math.max(1,Math.floor(ct/Math.min(64,ct,ot)));for(let yt=Ve;yt<Ve+ct&&We.length<Ge;yt+=Fe){let Wt=ne?ne[yt]:yt;if(Wt==null||Wt>=It.count||!It.array)continue;let Bt=new ie().fromBufferAttribute(It,Wt);Bt.applyMatrix4(_t.matrixWorld),We.push(Bt)}}}}}return We},N=(Oe,Ge)=>B1t(Ge,Y3n(Oe)),z=async(Oe,Ge=null)=>{let We=await L(Oe);if(We.length<3)return null;let Ze=null;if(Ge&&(Ze=N(Ge,We)),Ze||=B1t(We),!Ze)return null;let Ft=J3n(We,Ze);return!Ft||Ft.isEmpty()?null:{bounds:Ft,frame:Ze}},k=async(Oe,Ge={})=>{if(!Array.isArray(Oe))throw TypeError("[BIMDataViewer - 3D Fragments - section-box] createSectionBoxFromUuids(uuids) expects an array of uuids.");let We=Oe.filter(Dt=>typeof Dt=="string").map(Dt=>Dt.trim()).filter(Boolean);if(We.length===0)return x(),!1;let Ze=await t.guidsToModelIdMap(We);if(!Object.values(Ze).some(Dt=>Dt.size>0))return x(),!1;let Ft=await z(Ze,Ge.normal??null);if(Ft){let Dt=N1t(Ft.bounds);return _(Dt,We[0],Ft.frame)}let Pt=await t.getBBoxes(Ze);if(!Pt.length)return x(),!1;let tt=new As;if(Pt.forEach(Dt=>tt.union(Dt)),tt.isEmpty())return x(),!1;let kt=N1t(tt);return _(kt,We[0])},te=async(Oe,Ge={})=>{if(typeof Oe!="string"||Oe.trim()==="")throw TypeError("[BIMDataViewer - 3D Fragments - section-box] createSectionBoxOn(uuid) expects a non-empty string uuid.");return k([Oe],Ge)},fe=e.onPick(async({pickResult:Oe})=>{if(!a||!Oe)return;let{fragments:Ge,localId:We,normal:Ze}=Oe,Ft={[Ge.modelId]:new Set([We])},[Pt]=await t.modelIdMapToGuids(Ft);Pt&&await te(Pt,{normal:Ze?.clone?.()??null})&&(a=!1)}),ye=Un(()=>r.localContext.loadedModels,()=>{x()}),je={createSectionBoxOn:te,createSectionBoxOnSelection:k,createSectionBoxFromBounds:_,clearSectionBox:x,enableSectionBox(){a=!0,e.highlightMaterial=W3n},disableSectionBox(){a=!1,e.highlightMaterial=null},get sectionBoxEnabled(){return a},showSectionBoxWidget(){if(!o){d=!0,u=!0;return}o?.show()},hideSectionBoxWidget(){if(!o){d=!1,u=!1;return}o?.hide()},get sectionBoxWidgetVisible(){return o?.widgetVisible??d},set sectionBoxWidgetVisible(Oe){if(typeof Oe!="boolean")throw TypeError("[BIMDataViewer - 3D Fragments - section-box] sectionBoxWidgetVisible must be a boolean.");Oe?je.showSectionBoxWidget():je.hideSectionBoxWidget()},get sectionBoxOverlayVisible(){return o?.overlayVisible??u},set sectionBoxOverlayVisible(Oe){if(typeof Oe!="boolean")throw TypeError("[BIMDataViewer - 3D Fragments - section-box] sectionBoxOverlayVisible must be a boolean.");if(!o){u=Oe;return}o.setOverlayVisible(Oe)},get sectionBox(){return g.value},toggleSectionBoxEdition(Oe){if(Oe!==void 0&&typeof Oe!="boolean")throw TypeError("[BIMDataViewer - 3D Fragments - section-box] toggleSectionBoxEdition(value) expects a boolean when provided.");return l=Oe??!l,C.setHandleEditEnabled(),l},get sectionBoxEditEnabled(){return l},set sectionBoxEditEnabled(Oe){if(typeof Oe!="boolean")throw TypeError("[BIMDataViewer - 3D Fragments - section-box] sectionBoxEditEnabled must be a boolean.");je.toggleSectionBoxEdition(Oe)},toggleSectionBoxCaps(Oe){if(Oe!==void 0&&typeof Oe!="boolean")throw TypeError("[BIMDataViewer - 3D Fragments - section-box] toggleSectionBoxCaps(value) expects a boolean when provided.");return c=Oe??!c,o&&S(),c},setSectionBoxCapsColor(Oe){E.setFillColor(Oe)},get sectionBoxCapsEnabled(){return c},set sectionBoxCapsEnabled(Oe){if(typeof Oe!="boolean")throw TypeError("[BIMDataViewer - 3D Fragments - section-box] sectionBoxCapsEnabled must be a boolean.");c=Oe,o&&S()},get sectionBoxPlaneSizeMultiplier(){return h},set sectionBoxPlaneSizeMultiplier(Oe){if(typeof Oe!="number"||!Number.isFinite(Oe)||Oe<=0)throw TypeError("[BIMDataViewer - 3D Fragments - section-box] sectionBoxPlaneSizeMultiplier must be a positive number.");h=Oe,o&&C.update(o.bounds)},get sectionBoxPlaneVisualState(){return{idle:{...p.idle},hovered:{...p.hovered}}},set sectionBoxPlaneVisualState(Oe){let Ge=Oe?.idle,We=Oe?.hovered;if(!Ge||!We)throw TypeError("[BIMDataViewer - 3D Fragments - section-box] sectionBoxPlaneVisualState must define idle and hovered states.");let Ze=(Ft,Pt)=>{let tt=Ft?.color,kt=Ft?.opacity;if(typeof tt!="number"||!Number.isFinite(tt))throw TypeError(`[BIMDataViewer - 3D Fragments - section-box] ${Pt}.color must be a number.`);if(typeof kt!="number"||!Number.isFinite(kt))throw TypeError(`[BIMDataViewer - 3D Fragments - section-box] ${Pt}.opacity must be a number.`);return{color:tt,opacity:Math.max(0,Math.min(1,kt))}};p={idle:Ze(Ge,"idle"),hovered:Ze(We,"hovered")},o&&C.update(o.bounds)},get sectionBoxBounds(){return o?.getWorldBounds()??null},get sectionBoxPivotModifier(){return f},set sectionBoxPivotModifier(Oe){if(Oe!=="shiftKey"&&Oe!=="altKey"&&Oe!=="ctrlKey"&&Oe!=="metaKey")throw TypeError("[BIMDataViewer - 3D Fragments - section-box] sectionBoxPivotModifier must be one of: shiftKey, altKey, ctrlKey, metaKey.");f=Oe}};return{destroy(){ye(),fe?.(),C.destroy(),E.destroy(),x()},extension:je}}var O1e={COLOR:0,PEN:1,PEN_SHADOWS:2,COLOR_PEN:3,COLOR_SHADOWS:4,COLOR_PEN_SHADOWS:5};function ebn(e){let{world:t}=e,i=si(!1),n=si(!1),s=si(!1),r=!1,o=d=>{if(r||!d)return;let u;try{u=d.edgesPass}catch{return}!u.xray&&u._overrideMaterial&&(u._overrideMaterial.side=0),r=!0},a=()=>{if(!t.renderer)throw Error("Renderer is not initialized yet.");return t.renderer},l=()=>i.value&&n.value?O1e.COLOR_PEN_SHADOWS:i.value?O1e.COLOR_PEN:n.value?O1e.COLOR_SHADOWS:O1e.COLOR,c=()=>{let d=a().postproduction,u=l();if(!(i.value||n.value||s.value)){if(d.excludedObjectsEnabled=!1,!d.enabled){e.requestRender();return}d.style=u,e.requestRender();return}d.enabled=!0,o(d),d.smaaEnabled=s.value,d.excludedObjectsEnabled=n.value,d.edgesPass.color?.set&&d.edgesPass.color.set(0),d.edgesPass.width=1,d.edgesPass.depthBiasStrength=0,typeof d.aoPass.updateGtaoMaterial=="function"&&d.aoPass.updateGtaoMaterial(d.defaultAoParameters),d.style=u,e.requestRender()};return c(),{extension:{get postproductionEdgesEnabled(){return i.value},set postproductionEdgesEnabled(d){i.value=!!d,c()},get postproductionAmbientOcclusionEnabled(){return n.value},set postproductionAmbientOcclusionEnabled(d){n.value=!!d,c()},get postproductionSmaaEnabled(){return s.value},set postproductionSmaaEnabled(d){s.value=!!d,c()},get postproductionSettings(){return{edgesEnabled:i.value,ambientOcclusionEnabled:n.value,smaaEnabled:s.value}},setPostproductionSettings:(d={})=>{typeof d.edgesEnabled=="boolean"&&(i.value=d.edgesEnabled),typeof d.ambientOcclusionEnabled=="boolean"&&(n.value=d.ambientOcclusionEnabled),typeof d.smaaEnabled=="boolean"&&(s.value=d.smaaEnabled),c()}}}}var uh=1e-4,F1t=1e-4,tbn=({x:e,y:t,z:i})=>({x:-e,y:-t,z:-i}),ibn=e=>{if(!Array.isArray(e)||e.length!==6)return null;let t={minX:null,maxX:null,minY:null,maxY:null,minZ:null,maxZ:null},i=c=>{let d=new ie(c.x,c.y,c.z).normalize();return Math.abs(d.x-1)<=uh&&Math.abs(d.y)<=uh&&Math.abs(d.z)<=uh?"minX":Math.abs(d.x+1)<=uh&&Math.abs(d.y)<=uh&&Math.abs(d.z)<=uh?"maxX":Math.abs(d.y-1)<=uh&&Math.abs(d.x)<=uh&&Math.abs(d.z)<=uh?"minY":Math.abs(d.y+1)<=uh&&Math.abs(d.x)<=uh&&Math.abs(d.z)<=uh?"maxY":Math.abs(d.z-1)<=uh&&Math.abs(d.x)<=uh&&Math.abs(d.y)<=uh?"minZ":Math.abs(d.z+1)<=uh&&Math.abs(d.x)<=uh&&Math.abs(d.y)<=uh?"maxZ":null};for(let c of e){let d=i(c.direction);if(!d||t[d]!==null)return null;d==="minX"||d==="maxX"?t[d]=c.location.x:d==="minY"||d==="maxY"?t[d]=c.location.y:t[d]=c.location.z}let{minX:n,maxX:s,minY:r,maxY:o,minZ:a,maxZ:l}=t;return[n,s,r,o,a,l].some(c=>c===null)||n>=s-uh||r>=o-uh||a>=l-uh?null:new As(new ie(n,r,a),new ie(s,o,l))},nbn=e=>{if(!Array.isArray(e)||e.length!==6)return null;let t=e.map(({location:L,direction:N})=>{let z=new ie(N.x,N.y,N.z).normalize(),k=new ie(L.x,L.y,L.z);return new Ys().setFromNormalAndCoplanarPoint(z,k)}),i=[,,,,,,].fill(!1),n=[];for(let L=0;L<6;L++){if(i[L])continue;let N=!1;for(let z=L+1;z<6;z++)if(!i[z]&&t[L].normal.dot(t[z].normal)<-.9999){n.push([t[L],t[z]]),i[L]=!0,i[z]=!0,N=!0;break}if(!N)return null}if(n.length!==3)return null;let s=n.map(([L])=>L.normal.clone());for(let L=0;L<3;L++)for(let N=L+1;N<3;N++)if(Math.abs(s[L].dot(s[N]))>F1t*10)return null;let r=[[0,1,2],[0,2,1],[1,0,2],[1,2,0],[2,0,1],[2,1,0]],o=null;for(let[L,N,z]of r)if(s[L].clone().cross(s[N]).dot(s[z])>1-F1t*10){o=[L,N,z];break}if(!o)return null;let[a,l,c]=o,d=s[a].clone(),u=s[l].clone(),h=s[c].clone(),[p,f]=n[a],[m,g]=n[l],[A,E]=n[c],b=(-p.constant+f.constant)/2,T=(-m.constant+g.constant)/2,C=(-A.constant+E.constant)/2,S=new ie().addScaledVector(d,b).addScaledVector(u,T).addScaledVector(h,C),R=new mn().makeBasis(d,u,h).setPosition(S),x=(p.constant+f.constant)/2,_=(m.constant+g.constant)/2,F=(A.constant+E.constant)/2;return x<uh||_<uh||F<uh?null:{bounds:new As(new ie(-Math.abs(x),-Math.abs(_),-Math.abs(F)),new ie(Math.abs(x),Math.abs(_),Math.abs(F))),frame:R}},sbn=e=>{e.clearSectionBox?.(),e.sectionPlanes.slice().forEach(t=>{e.deleteSectionPlane?.(t)})},rbn=async({fragments:e,clippingPlanes:t,toYup:i})=>{if(!Array.isArray(t)||t.length===0)return;e.widgetsVisible=!1,e.sectionBoxOverlayVisible=!1;let n=t.map(o=>({location:i(o.location),direction:tbn(i(o.direction))})),s=ibn(n);if(s){e.createSectionBoxFromBounds?.(s,"viewpoint-section-box"),e.sectionBoxOverlayVisible=!1;return}let r=nbn(n);if(r){e.createSectionBoxFromBounds?.(r.bounds,"viewpoint-section-box",r.frame),e.sectionBoxOverlayVisible=!1;return}for(let o of n)await e.addSectionPlane({point:new ie(o.location.x,o.location.y,o.location.z),normal:new ie(o.direction.x,o.direction.y,o.direction.z)});e.widgetsVisible=!1};function obn(e){let{components:t,world:i,OBC:n,$viewer:s}=e,r=t.get(n.Viewpoints);r.world=i;let o=A=>{let E="",b=32768;for(let T=0;T<A.length;T+=b)E+=String.fromCharCode(...A.subarray(T,T+b));return btoa(E)},a=({x:A,y:E,z:b})=>({x:A,y:-b,z:E}),l=({x:A,y:E,z:b})=>({x:A,y:b,z:-E}),c=({x:A,y:E,z:b})=>({x:-A,y:-E,z:-b}),d=()=>s.localContext.pluginComponentInstances.get("viewer3d-fragments-parameters"),u=()=>{let A=d();return A&&typeof A.ifcSpaces=="boolean"?A.ifcSpaces:!0},h=async()=>{let A={},E=p();for(let[b,T]of e.fragments.list.entries()){let C=Number(b);if(!E.has(C)&&!E.has(b))continue;let{IFCSPACE:S}=await T.getItemsOfCategories([/IFCSPACE/]);S?.length&&(A[b]=S)}return A},p=()=>new Set(s.localContext.loadedModelIds),f=()=>{let A=p();return s.state.objects.filter(E=>A.has(E.model?.id))},m=A=>Array.from(new Set(A.map(E=>E.uuid).filter(Boolean))),g=A=>{let E=A.filter(C=>!!C.uuid),b=new Set(m(E.filter(C=>C.visible))),T=m(E.filter(C=>!C.visible));return b.size<T.length?{default_visibility:!1,exceptions:Array.from(b).map(C=>({ifc_guid:C,authoring_tool_id:null}))}:{default_visibility:!0,exceptions:T.map(C=>({ifc_guid:C,authoring_tool_id:null}))}};return{extension:{getViewpoint:async()=>{let A=r.create();A.title="My Viewpoint",await A.updateCamera();let E=A.toJSON(),b=f(),T=m(b.filter(F=>F.selected)),C=g(b),S=E.components?.visibility?.view_setup_hints;if(E.components={...E.components??{},selection:T.map(F=>({ifc_guid:F,authoring_tool_id:null})),visibility:{...C,view_setup_hints:{...S??{},spaces_visible:u()}}},E.perspective_camera&&(E.perspective_camera.camera_view_point=a(E.perspective_camera.camera_view_point),E.perspective_camera.camera_direction=a(E.perspective_camera.camera_direction),E.perspective_camera.camera_up_vector=a(E.perspective_camera.camera_up_vector)),E.orthogonal_camera){E.orthogonal_camera.camera_view_point=a(E.orthogonal_camera.camera_view_point),E.orthogonal_camera.camera_direction=a(E.orthogonal_camera.camera_direction),E.orthogonal_camera.camera_up_vector=a(E.orthogonal_camera.camera_up_vector);let F=i.camera.threeOrtho;F.zoom&&F.zoom!==1&&(E.orthogonal_camera.view_to_world_scale=(F.top-F.bottom)/F.zoom)}let R=e,x=R.sectionPlanes.some(F=>F.shown),_=!!R.sectionBox?.shown;if(x||_){let F=[];if(_){let L=R.sectionBox;F.push(...L.planes)}else F.push(...R.sectionPlanes.filter(L=>L.shown));E.clipping_planes=F.map(L=>({location:a(L.location),direction:c(a(L.direction))}))}return E.originating_system="ifc3d",E.models=Array.from(p()),E},setViewpoint:async A=>{A=JSON.parse(JSON.stringify(A)),A.perspective_camera&&(A.perspective_camera.camera_view_point=l(A.perspective_camera.camera_view_point),A.perspective_camera.camera_direction=l(A.perspective_camera.camera_direction),A.perspective_camera.camera_up_vector=l(A.perspective_camera.camera_up_vector)),A.orthogonal_camera&&(A.orthogonal_camera.camera_view_point=l(A.orthogonal_camera.camera_view_point),A.orthogonal_camera.camera_direction=l(A.orthogonal_camera.camera_direction),A.orthogonal_camera.camera_up_vector=l(A.orthogonal_camera.camera_up_vector));let E=e;sbn(E),await rbn({fragments:E,clippingPlanes:A.clipping_planes,toYup:l});let b=r.create(A);if(await i.camera.controls.setFocalOffset(0,0,0),await b.go({transition:!1}),A.orthogonal_camera?.view_to_world_scale!=null){let T=i.camera.threeOrtho,C=A.orthogonal_camera.view_to_world_scale,S=T.top-T.bottom;if(C>0&&S>0){let R=S/C;Number.isFinite(R)&&R>0&&await i.camera.controls.zoomTo(R,!1)}}try{let T=await i.camera.getItemsBounding();i.camera.controls.setOrbitPoint(T.center.x,T.center.y,T.center.z)}catch{i.camera.controls.setOrbitPoint(0,0,0)}if(jYe(s,A),A.components?.visibility?.view_setup_hints?.spaces_visible===!1){let T=await h();Object.keys(T).length>0&&await e.hide(T)}},getSnapshot:async()=>{let A=r.create();await A.takeSnapshot();let E=r.snapshots.get(A.snapshot);return{snapshot_type:"png",snapshot_data:`data:image/png;base64,${o(E)}`}}},destroy(){}}}function abn(e){let{components:t,world:i,$viewer:n,OBC:s}=e,r=t.get(s.Raycasters).get(i),o=i.renderer.three.domElement,a=null,l=async h=>{h.preventDefault(),h.stopPropagation();let p=await r.castRay();if(!p)return;let f=p.point.x,m=p.point.z,g=p.point.y,A=await p.fragments.getGuidsByLocalIds([p.localId]),E=n.state.getObjectsByUuids(A)[0],b=n.localContext.loadedModels;a({x:f,y:m,z:g,object:E,models:b})},c=si(!1),d=h=>{if(!h||typeof h!="function")throw TypeError("[BIMDataViewer - Viewer3DFragments - Annotation] A callback function must be provided to start annotation mode.");u(),c.value=!0,a=h,e.selectOnClick=!1,o.addEventListener("pointerdown",l),o.style.cursor="add"},u=()=>{c.value=!1,a=null,e.selectOnClick=!0,o.removeEventListener("pointerdown",l),o.style.cursor="default"};return{extension:{get annotationMode(){return c.value},startAnnotationMode:d,stopAnnotationMode:u},destroy(){u()}}}var lbn=["POINT","LINE","FACE"],S9e={POINT:0,LINE:1,FACE:2},cbn={0:"POINT",1:"LINE",2:"FACE"},k1t={POINT:"vertex",LINE:"edge",FACE:"surface",NONE:"noSurface"},hse=e=>`#${e.getHexString()}`,GT=e=>new zn(e),Gx=(e,t,i=new ie)=>i.copy(e).sub(t),N1e=(e,t=null)=>{let i=new ie;if(e?.face?.normal&&e?.object){i.copy(e.face.normal);let n=e.object.matrixWorld;if(e.instanceId!=null&&e.object.isInstancedMesh){let r=new mn;e.object.getMatrixAt(e.instanceId,r),n=new mn().multiplyMatrices(e.object.matrixWorld,r)}let s=new Ao().getNormalMatrix(n);return i.applyMatrix3(s).normalize(),i}return e?.normal?.isVector3&&e.normal.lengthSq()>1e-12?(i.copy(e.normal).normalize(),i):t?(t.getWorldDirection(i).negate().normalize(),i):new ie(0,1,0)},x9e=(e,t,i)=>{let n=e.clone().project(t),s=i.getBoundingClientRect();return{x:(n.x+1)*.5*s.width,y:(1-(n.y+1)*.5)*s.height}},M1e=(e,t)=>{let i=t.getBoundingClientRect();return{x:(e.clientX-i.left)/i.width*2-1,y:-((e.clientY-i.top)/i.height)*2+1}},pL=(...e)=>Array.from(new Set(e.filter(Boolean).map(String))),L1e=(e,t,i=1e6)=>{let n=[],s=new Map,r=d=>Math.round(d*i),o=d=>`${r(d.x)}:${r(d.y)}:${r(d.z)}`,a=new Map;e.forEach((d,u)=>{let h=o(d);if(!s.has(h)){let p=n.length;s.set(h,p),n.push(d.clone())}a.set(u,s.get(h))});let l=t.map(d=>a.get(d)).filter(d=>Number.isInteger(d)),c=Math.floor(l.length/3);return{vertices:n,indices:l.slice(0,c*3)}},B1e=(e,t)=>{let i=new Map,n=(s,r)=>{if(s===r)return;let o=`${Math.min(s,r)}:${Math.max(s,r)}`,a=i.get(o);if(!a){i.set(o,{a:s,b:r,count:1});return}a.count+=1};for(let s=0;s+2<t.length;s+=3){let r=t[s],o=t[s+1],a=t[s+2];n(r,o),n(o,a),n(a,r)}return Array.from(i.values()).filter(s=>s.count===1).map(s=>[e[s.a],e[s.b]])},U1t=(e,t,{eps:i=1e-6,orthogonalityDeg:n=60}={})=>{if(!Array.isArray(t)||t.length<2)return null;let s=[];for(let[c,d]of t){if(!c||!d)continue;let u=d.clone().sub(c),h=u.clone().sub(e.clone().multiplyScalar(u.dot(e))),p=h.length();p<=i||s.push({dir:h.multiplyScalar(1/p),length:p})}if(s.length<2)return null;let r=null,o=-1/0;for(let c of s){let d=0;for(let u of s)d+=u.length*Math.abs(c.dir.dot(u.dir));d>o&&(o=d,r=c.dir)}if(!r)return null;let a=Math.cos(oa.degToRad(n)),l=0;for(let c of s)Math.abs(r.dot(c.dir))<=a&&(l+=c.length);return l<=i?null:r.clone().normalize()},dbn=class{constructor({components:e,world:t,OBC:i,requestRender:n}){let s=e.get(i.Raycasters);this.caster=s.get(t),this.world=t,this.requestRender=n}async pickFromEvent(e){let t=M1e(e,this.world.renderer.three.domElement);return this.pickAtPosition(t)}async pickAtPosition(e){let t=lbn.map(o=>S9e[o]).filter(o=>Number.isInteger(o)),i=await this.caster.castRay({position:e,snappingClasses:t});if(!i)return null;let n=cbn[i.snappingClass]??this.#e(i)??"NONE",s=this.world.camera.three,r=this.world.renderer.three.domElement;return{hit:i,snapName:n,point:i.point.clone(),normal:N1e(i,s),screen:x9e(i.point,s,r),modelId:i.fragments?.modelId??null}}#e(e){return e?.snappedEdgeP1&&e?.snappedEdgeP2?"LINE":Array.isArray(e?.facePoints)&&e.facePoints.length>=9?"FACE":null}requestFrame(){this.requestRender()}},H1t={pointer:jde,vertex:QYe,edge:WYe,surface:XYe,noSurface:g5e},ubn=class{constructor(e){this.domElement=e,this.cursorMode="overlay",this.cursorStyle=`url("${jde}") 16 16, auto`;let t=document.createElement("img");t.style.width="28px",t.style.height="28px",t.style.position="absolute",t.style.pointerEvents="none",t.style.transform="translate(-50%, -50%)",t.style.display="none",e.parentNode.insertBefore(t,e),this.img=t,this.visible=!1}show(){this.img.style.display=this.cursorMode==="crosshair"?"none":"block",this.domElement.style.cursor=this.cursorStyle,this.visible=!0}hide(){this.img.style.display="none",this.domElement.style.cursor="default",this.visible=!1}useCrosshairCursor(){this.cursorMode="crosshair",this.cursorStyle="crosshair",this.visible&&(this.img.style.display="none",this.domElement.style.cursor=this.cursorStyle)}useOverlayCursor(){this.cursorMode="overlay",this.cursorStyle=`url("${jde}") 16 16, auto`,this.visible&&(this.img.style.display="block",this.domElement.style.cursor=this.cursorStyle)}update(e){if(!this.visible)return;if(this.cursorMode==="crosshair"){this.img.style.display="none";return}if(!e){this.img.style.left="-9999px",this.img.style.top="-9999px",this.img.src=g5e;return}let t=H1t[H1t[k1t[e.snapName]]?k1t[e.snapName]:"noSurface"];this.img.src=t,this.img.style.left=`${e.screen.x}px`,this.img.style.top=`${e.screen.y}px`}destroy(){this.hide(),this.img.remove()}},G1t=1e-8,V1t=new ie(1,0,0),R9e=new ie(0,1,0),hbn=new ie(0,0,1),pse=e=>e?.isVector3&&Number.isFinite(e.x)&&Number.isFinite(e.y)&&Number.isFinite(e.z),fse=(e,t)=>!pse(e)||e.lengthSq()<=G1t?t.clone():e.clone().normalize(),pbn=(e,t)=>{let i=new ie().crossVectors(t,e);if(!pse(i)||i.lengthSq()<=G1t){let n=Math.abs(R9e.dot(e))>.98?V1t:R9e;i=new ie().crossVectors(n,e)}return fse(i,hbn)},mse=({tip:e,inwardDirection:t,planeNormal:i,arrowLength:n,minArrowLength:s=.01,diagonalBlend:r=.85})=>{if(!pse(e))return[];let o=fse(t,V1t),a=pbn(o,fse(i,R9e)),l=Math.max(Number.isFinite(n)?n:0,s),c=e.clone().add(a.clone().multiplyScalar(l)),d=e.clone().add(a.clone().multiplyScalar(-l)),u=fse(o.clone().add(a.clone().multiplyScalar(r)),o),h=fse(o.clone().add(a.clone().multiplyScalar(-r)),o),p=e.clone().add(u.multiplyScalar(l*Math.SQRT2)),f=e.clone().add(h.multiplyScalar(l*Math.SQRT2)),m=[e.clone(),c,e.clone(),d,e.clone(),p,e.clone(),f];return m.every(pse)?m:[]},j1t=e=>!Array.isArray(e)||e.length===0||e.length%2!=0?!1:e.every(pse),fbn=(e,t={})=>{let i=document.createElement("canvas"),n=i.getContext("2d"),{strokeColor:s=null,strokeWidth:r=0}=t;n.font="700 120px Arial";let o=n.measureText(e),a=Math.max(256,Math.ceil(o.width+32));i.width=a,i.height=256,n.font="700 120px Arial",n.textAlign="center",n.textBaseline="middle",n.clearRect(0,0,a,256),s&&r>0&&(n.lineJoin="round",n.strokeStyle=s,n.lineWidth=r,n.strokeText(e,a/2,256/2)),n.fillStyle="rgba(255, 255, 255, 1)",n.fillText(e,a/2,256/2);let l=new jki(i);return l.colorSpace=cv,l.needsUpdate=!0,l.minFilter=_l,l.magFilter=_l,{texture:l,aspect:a/256}},vse=({content:e,size:t,color:i,strokeColor:n,strokeWidth:s})=>{let r=new $r,{texture:o,aspect:a}=fbn(e,{strokeColor:n,strokeWidth:s}),l=new Vy(Math.max(t*2.2,t*1.2*a),t*1.2),c=Math.max(t*.015,.001),d=()=>new Io({map:o,color:i,side:0,transparent:!0,depthTest:!0,depthWrite:!1,alphaTest:.15}),u=new pn(l,d());u.position.z=c;let h=new pn(l.clone(),d());return h.rotateY(Math.PI),h.position.z=-c,r.add(u,h),r.renderOrder=15,r},Ase=({group:e,direction:t,up:i,normal:n,position:s})=>{let r=new mn().makeBasis(t.clone().normalize(),i.clone().normalize(),n.clone().normalize());e.quaternion.setFromRotationMatrix(r),e.position.copy(s)},_9e=new ie(0,1,0),mbn=new ie(0,0,0),vbn=class{constructor(e,t,i,n=[]){this.plugin=e,this.group=new $r,this.material=new zg({color:GT(e.defaultColor),linewidth:e.lineWidth,depthTest:!0,depthWrite:!1,transparent:!1}),this.#e(),this.geometry=new KN,this.line=new RU(this.geometry,this.material),this.line.visible=!1,this.line.renderOrder=10,this.group.add(this.line),this._p1=t.clone(),this._p2=t.clone(),this._startNormal=i.clone().normalize(),this._currentNormal=i.clone().normalize(),this._length=0,this._visible=!0,this._text=null,this.modelIds=pL(...n),this.group.position.copy(this._p1),(this.plugin.overlayScene||this.plugin.world.scene.three).add(this.group)}move(e,t){this._p2.copy(e),this._currentNormal.copy(t).normalize();let i=this._p1,n=mbn,s=Gx(this._p2,i);this.group.position.copy(i);let r=new ie().subVectors(this._p2,this._p1),o=r.length();if(this._length=o,o<=1e-6){this.line.visible=!1,this.#i();return}this.#e();let a=r.clone().normalize(),l=a.clone().negate(),c=Math.abs(a.dot(_9e))>.9,d=Math.max(o*(c?.08:.05),.03),u=this._startNormal.clone().normalize(),h=new ie().crossVectors(u,a).normalize();if(h.lengthSq()<=1e-8){let x=new ie;this.plugin.world.camera.three.getWorldDirection(x),h=new ie().crossVectors(a,x).normalize()}let p=_9e.clone().sub(a.clone().multiplyScalar(_9e.dot(a)));p.lengthSq()>1e-8&&h.dot(p)<0&&h.negate();let f=o*this.plugin.arrowSizeRatio,m=u.clone().multiplyScalar(this.plugin.surfaceOffset),g=mse({tip:n,inwardDirection:a,planeNormal:u,arrowLength:f}).map(x=>x.clone().add(m)),A=mse({tip:s,inwardDirection:l,planeNormal:u,arrowLength:f}).map(x=>x.clone().add(m)),E=[n.clone().add(m),s.clone().add(m),...g,...A];if(!j1t(E)){this.line.visible=!1,this.#i();return}let b=[];E.forEach(x=>{b.push(x.x,x.y,x.z)}),this.geometry.setPositions(b),this.line.visible=!0;let T=s.clone().multiplyScalar(.5).add(m),C=h.clone().sub(a.clone().multiplyScalar(h.dot(a)));C.lengthSq()<=1e-8&&(C=h.clone()),C.normalize();let S=new ie().crossVectors(a,C).normalize();S.dot(u)<0&&(S.negate(),C=new ie().crossVectors(S,a).normalize());let R=T.clone().add(C.clone().multiplyScalar(d));this.#t(`${o.toFixed(2)} m`,o,a,C,S,R)}#e(){let e=this.plugin.world.renderer.three.domElement;this.material.resolution.set(e.clientWidth,e.clientHeight)}#t(e,t,i,n,s,r){this.#i();let o=Math.max(.04,t*this.plugin.textSizeRatio);this._text=vse({content:e,size:o,color:this.material.color}),Ase({group:this._text,direction:i,up:n,normal:s,position:r}),this.group.add(this._text)}#i(){this._text&&=(this.group.remove(this._text),this._text.traverse(e=>{e.geometry&&e.geometry.dispose(),e.material&&(Array.isArray(e.material)?e.material:[e.material]).forEach(t=>t.dispose())}),null)}destroy(){this.#i(),this.geometry.dispose(),this.material.dispose(),this.group.removeFromParent(),this.plugin.measurements=this.plugin.measurements.filter(e=>e!==this),this.plugin.fragmentsInstance.requestRender()}get length(){return this.visible?this._length:0}get visible(){return this._visible}set visible(e){this._visible=!!e,this.group.visible=this._visible}get color(){return hse(this.material.color)}set color(e=this.plugin.defaultColor){let t=GT(e);this.material.color.copy(t),this._text&&this._text.traverse(i=>{i.material&&(Array.isArray(i.material)?i.material:[i.material]).forEach(n=>n.color?.copy(t))})}},Abn=class{constructor(e,t,i,n={}){this.fragmentsInstance=e,this.world=e.world,this.overlayScene=e.overlayScene,this.snapPicker=t,this.cursorOverlay=i,this.arrowSizeRatio=n.arrowSizeRatio??.04,this.lineWidth=n.lineWidth??2,this.textSizeRatio=n.textSizeRatio??.1,this.offsetRatio=n.offsetRatio??.003,this.surfaceOffset=n.surfaceOffset??.003,this.defaultColor=n.defaultColor??"#ffffff",this.measurements=[],this.measurementEndCallbacks={},this.measurementEndCallbackId=0,this.control=new gbn(this)}on(e,t){if(e==="measurementEnd")return this.measurementEndCallbacks[this.measurementEndCallbackId++]=t,this.measurementEndCallbackId}off(e){this.measurementEndCallbacks[e]=null}destroy(){this.control.deactivate(),this.control.destroy(),this.measurements.slice().forEach(e=>e.destroy()),this.measurements.length=0}},gbn=class{constructor(e){this.plugin=e,this.currentMeasurement=null,this.lastSnap=null,this.mouseDown=!1,this.dragging=!1,this.activated=!1,this.onPointerMove=this.onPointerMove.bind(this),this.onPointerDown=this.onPointerDown.bind(this),this.onPointerUp=this.onPointerUp.bind(this)}async onPointerMove(e){e.preventDefault(),this.mouseDown&&(this.dragging=!0),this.lastSnap=await this.plugin.snapPicker.pickFromEvent(e),this.plugin.cursorOverlay.update(this.lastSnap),this.currentMeasurement&&this.lastSnap&&(this.currentMeasurement.move(this.lastSnap.point,this.lastSnap.normal),this.plugin.snapPicker.requestFrame())}onPointerDown(e){e.button===0&&(this.mouseDown=!0)}onPointerUp(e){if(e.button!==0)return;this.mouseDown=!1;let t=this.dragging;if(this.dragging=!1,!(t||!this.lastSnap)){if(this.currentMeasurement){this.currentMeasurement.move(this.lastSnap.point,this.lastSnap.normal),this.plugin.measurements.push(this.currentMeasurement),Object.values(this.plugin.measurementEndCallbacks).forEach(i=>{i?.(this.currentMeasurement)}),this.currentMeasurement=null;return}this.currentMeasurement=new vbn(this.plugin,this.lastSnap.point,this.lastSnap.normal,[this.lastSnap.modelId])}}activate(){if(this.activated)return;let e=this.plugin.world.renderer.three.domElement;this.plugin.cursorOverlay.show(),e.addEventListener("pointermove",this.onPointerMove),e.addEventListener("pointerdown",this.onPointerDown),document.addEventListener("pointerup",this.onPointerUp),this.activated=!0}deactivate(){if(!this.activated)return;let e=this.plugin.world.renderer.three.domElement;e.removeEventListener("pointermove",this.onPointerMove),e.removeEventListener("pointerdown",this.onPointerDown),document.removeEventListener("pointerup",this.onPointerUp),this.currentMeasurement?.destroy(),this.currentMeasurement=null,this.lastSnap=null,this.dragging=!1,this.mouseDown=!1,this.plugin.cursorOverlay.hide(),this.activated=!1}destroy(){}},ybn=new ie(0,0,0),z1t=class{constructor(e,t,i,n,s=[],r=null){this.plugin=e,this.group=new $r,this.linesMaterial=new zg({color:GT(e.defaultColor),linewidth:e.lineWidth,depthTest:!0,depthWrite:!1,transparent:!1}),this.arcMaterial=this.linesMaterial.clone(),this.#i(),this.lineGeometry=new KN,this.arcGeometry=new C6e,this.lines=new RU(this.lineGeometry,this.linesMaterial),this.arc=new qet(this.arcGeometry,this.arcMaterial),this.lines.visible=!1,this.arc.visible=!1,this.group.add(this.lines,this.arc),this._p1=t.clone(),this._p2=i.clone(),this._p3=n.clone(),this._normalHint=r?.clone?.().normalize?.()||null,this._angle=0,this._visible=!0,this._text=null,this.modelIds=pL(...s),this.group.position.copy(this._p2),(this.plugin.overlayScene||this.plugin.world.scene.three).add(this.group),this.update(t,i,n,r)}update(e,t,i,n=null){this._p1.copy(e),this._p2.copy(t),this._p3.copy(i),n?.isVector3&&(this._normalHint=n.clone().normalize());let s=this._p2,r=Gx(this._p1,s),o=ybn,a=Gx(this._p3,s);this.group.position.copy(s);let l=r.clone().sub(o),c=a.clone().sub(o);this.#i();let d=this._normalHint?.isVector3?this._normalHint.clone().normalize():new ie(0,1,0);if(l.lengthSq()>1e-6&&c.lengthSq()<=1e-6){this._angle=0,this.arc.visible=!1;let L=l.length()*this.plugin.arrowSizeRatio,N=l.clone().normalize(),z=d.lengthSq()>1e-8?d:new ie(0,1,0);this.#t([o,r,...mse({tip:r,inwardDirection:N.clone().negate(),planeNormal:z,arrowLength:L})]),this.#n();return}if(l.lengthSq()<=1e-6||c.lengthSq()<=1e-6){this._angle=0,this.lines.visible=!1,this.arc.visible=!1,this.#n();return}let u=l.clone().normalize(),h=c.clone().normalize(),p=u.angleTo(h);this._angle=oa.radToDeg(p);let f=new ie().crossVectors(u,h),m=f.lengthSq()>1e-8?f.clone().normalize():d;m.lengthSq()<=1e-8&&(m=new ie(0,1,0)),u.clone().applyAxisAngle(m,p).dot(h)<.999&&(m=m.clone().negate());let g=(d.lengthSq()>1e-8?d:m).clone().multiplyScalar(this.plugin.surfaceOffset),A=l.length(),E=c.length(),b=A*this.plugin.arrowSizeRatio,T=E*this.plugin.arrowSizeRatio,C=[o.clone().add(g),r.clone().add(g),o.clone().add(g),a.clone().add(g),...mse({tip:r,inwardDirection:u.clone().negate(),planeNormal:m,arrowLength:b}).map(L=>L.clone().add(g)),...mse({tip:a,inwardDirection:h.clone().negate(),planeNormal:m,arrowLength:T}).map(L=>L.clone().add(g))];this.#t(C);let S=Math.min(l.length(),c.length())*.35;if(f.lengthSq()<=1e-8){this.arc.visible=!1,this.#n();return}let R=[];for(let L=0;L<=24;L++){let N=L/24*p,z=u.clone().applyAxisAngle(m,N);R.push(o.clone().add(z.multiplyScalar(S)).add(g))}this.arcGeometry.setPositions(R.flatMap(L=>[L.x,L.y,L.z])),this.arc.visible=!0;let x=u.clone().applyAxisAngle(m,p*.5),_=o.clone().add(x.multiplyScalar(S*1.45)).add(g),F=m.clone().cross(x).normalize();this.#e(`${this._angle.toFixed(2)}\xB0`,S,x,F,m,_)}#e(e,t,i,n,s,r){this.#n(),this._text=vse({content:e,size:Math.max(t*this.plugin.textSizeRatio,.03),color:this.linesMaterial.color}),Ase({group:this._text,direction:i,up:n,normal:s,position:r}),this.group.add(this._text)}#t(e){if(!j1t(e)){this.lines.visible=!1;return}let t=e.flatMap(i=>[i.x,i.y,i.z]);this.lineGeometry.setPositions(t),this.lines.visible=t.length>0}#i(){let e=this.plugin.world.renderer.three.domElement;this.linesMaterial.resolution.set(e.clientWidth,e.clientHeight),this.arcMaterial.resolution.set(e.clientWidth,e.clientHeight)}#n(){this._text&&=(this.group.remove(this._text),this._text.traverse(e=>{e.geometry&&e.geometry.dispose(),e.material&&(Array.isArray(e.material)?e.material:[e.material]).forEach(t=>t.dispose())}),null)}destroy(){this.#n(),this.lineGeometry.dispose(),this.arcGeometry.dispose(),this.linesMaterial.dispose(),this.arcMaterial.dispose(),this.group.removeFromParent(),this.plugin.measurements=this.plugin.measurements.filter(e=>e!==this),this.plugin.fragmentsInstance.requestRender()}get angle(){return this.visible?this._angle:0}get visible(){return this._visible}set visible(e){this._visible=!!e,this.group.visible=this._visible}get color(){return hse(this.linesMaterial.color)}set color(e=this.plugin.defaultColor){let t=GT(e);this.linesMaterial.color.copy(t),this.arcMaterial.color.copy(t),this._text&&this._text.traverse(i=>{i.material&&(Array.isArray(i.material)?i.material:[i.material]).forEach(n=>n.color?.copy(t))})}},Ibn=class{constructor(e,t,i,n={}){this.fragmentsInstance=e,this.world=e.world,this.overlayScene=e.overlayScene,this.snapPicker=t,this.cursorOverlay=i,this.textSizeRatio=n.textSizeRatio??.28,this.arrowSizeRatio=n.arrowSizeRatio??.04,this.lineWidth=n.lineWidth??2,this.surfaceOffset=n.surfaceOffset??.003,this.defaultColor=n.defaultColor??"#ffffff",this.measurements=[],this.measurementEndCallbacks={},this.measurementEndCallbackId=0,this.control=new bbn(this)}on(e,t){if(e==="measurementEnd")return this.measurementEndCallbacks[this.measurementEndCallbackId++]=t,this.measurementEndCallbackId}off(e){this.measurementEndCallbacks[e]=null}destroy(){this.control.deactivate(),this.control.destroy(),this.measurements.slice().forEach(e=>e.destroy()),this.measurements.length=0}},bbn=class{constructor(e){this.plugin=e,this.points=[],this.normals=[],this.modelIds=[],this.previewMeasurement=null,this.lastSnap=null,this.mouseDown=!1,this.dragging=!1,this.activated=!1,this.onPointerMove=this.onPointerMove.bind(this),this.onPointerDown=this.onPointerDown.bind(this),this.onPointerUp=this.onPointerUp.bind(this)}async onPointerMove(e){e.preventDefault(),this.mouseDown&&(this.dragging=!0),this.lastSnap=await this.plugin.snapPicker.pickFromEvent(e),this.plugin.cursorOverlay.update(this.lastSnap),!(!this.lastSnap||this.points.length===0)&&(this.points.length===1?this.#e(this.points[0],this.lastSnap.point,this.lastSnap.point):this.points.length===2&&this.#e(this.points[0],this.points[1],this.lastSnap.point),this.plugin.snapPicker.requestFrame())}onPointerDown(e){e.button===0&&(this.mouseDown=!0)}onPointerUp(e){if(e.button!==0)return;this.mouseDown=!1;let t=this.dragging;if(this.dragging=!1,t||!this.lastSnap||(this.points.push(this.lastSnap.point.clone()),this.normals.push(this.lastSnap.normal.clone()),this.modelIds.push(this.lastSnap.modelId),this.points.length<3))return;this.previewMeasurement?.destroy(),this.previewMeasurement=null;let i=new z1t(this.plugin,this.points[0],this.points[1],this.points[2],this.modelIds,this.normals[1]||this.normals[0]||this.lastSnap.normal);this.plugin.measurements.push(i),Object.values(this.plugin.measurementEndCallbacks).forEach(n=>{n?.(i)}),this.points=[],this.normals=[],this.modelIds=[]}#e(e,t,i){let n=this.points.length===1?this.lastSnap?.normal||this.normals[0]:this.normals[1]||this.normals[0]||this.lastSnap?.normal;if(!this.previewMeasurement){this.previewMeasurement=new z1t(this.plugin,e,t,i,this.modelIds,n);return}this.previewMeasurement.update(e,t,i,n)}activate(){if(this.activated)return;let e=this.plugin.world.renderer.three.domElement;this.plugin.cursorOverlay.show(),e.addEventListener("pointermove",this.onPointerMove),e.addEventListener("pointerdown",this.onPointerDown),document.addEventListener("pointerup",this.onPointerUp),this.activated=!0}deactivate(){if(!this.activated)return;let e=this.plugin.world.renderer.three.domElement;e.removeEventListener("pointermove",this.onPointerMove),e.removeEventListener("pointerdown",this.onPointerDown),document.removeEventListener("pointerup",this.onPointerUp),this.previewMeasurement?.destroy(),this.previewMeasurement=null,this.points=[],this.normals=[],this.modelIds=[],this.lastSnap=null,this.mouseDown=!1,this.dragging=!1,this.plugin.cursorOverlay.hide(),this.activated=!1}destroy(){}},q1t=new ie(0,0,0),D9e=new ie(0,1,0),Ebn=.9,Tbn=class{constructor(e,t){this.plugin=e,this.group=new $r,this.material=new Rc({color:GT(e.defaultColor),depthTest:!1,transparent:!0}),this.sphereMaterial=new Io({color:GT(e.defaultColor),depthTest:!1,transparent:!0}),this.sphereGeometry=new TO(.03,12,12),this.fromSphere=new pn(this.sphereGeometry,this.sphereMaterial),this.toSphere=new pn(this.sphereGeometry,this.sphereMaterial),this.lineGeometry=new $n,this.line=new _c(this.lineGeometry,this.material),this.fromSphere.raycast=()=>{},this.toSphere.raycast=()=>{},this.line.raycast=()=>{},this.toSphere.visible=!1,this.line.visible=!1,this.group.add(this.fromSphere,this.toSphere,this.line),this._length=0,this._visible=!0,this._text=null,this._textContent=null,this._localTo=null,this._isVertical=!1,this._consecutiveMisses=0,this._showRequestId=0,this._destroyed=!1,this.modelIds=pL(t.modelId),this.group.position.copy(t.point),this.plugin.world.scene.three.add(this.group),this._onCameraUpdate=()=>{this._isVertical&&this.#i()},this._cameraControls=this.plugin.world.camera.controls??null,this._cameraControls?.addEventListener?.("update",this._onCameraUpdate)}async show(e,t=()=>!0){let i=++this._showRequestId,n=e.point.clone(),s=e.normal.clone().normalize(),r=this.plugin.world.camera.three.position.clone().sub(n);s.dot(r)<0&&s.negate();let o=await this.plugin.castNormalRay(n,s,e.hit);if(i!==this._showRequestId||this._destroyed||!t())return;if(!o){this._consecutiveMisses+=1,this._consecutiveMisses>=2&&(this.#e(),this.plugin.fragmentsInstance.requestRender());return}this._consecutiveMisses=0,this.modelIds=pL(e.modelId,o.fragments?.modelId),this.group.position.copy(n),this.fromSphere.position.copy(q1t);let a=Gx(o.point,n);this._localTo=a.clone(),this._length=a.length(),this.toSphere.position.copy(a),this.lineGeometry.setFromPoints([q1t,a]),this.toSphere.visible=!0,this.line.visible=!0,this.#t(),this.plugin.fragmentsInstance.requestRender()}#e(){this._length=0,this._localTo=null,this.toSphere.visible=!1,this.line.visible=!1,this.#s()}#t(){let e=`${this._length.toFixed(2)} m`;e!==this._textContent&&(this.#s(),this._text=vse({content:e,size:Math.max(.04,this._length*this.plugin.textSizeRatio),color:this.material.color}),this._textContent=e,this.group.add(this._text)),this.#i()}#i(){if(!this._text||!this._localTo)return;let e=this._localTo.clone().normalize(),t=this._localTo.clone().multiplyScalar(.5);this._isVertical=Math.abs(e.dot(D9e))>Ebn;let i=new ie,n=new ie;this._isVertical?this.#n(e,t,i,n):this.#a(e,i,n);let s=Math.max(this._length*.05,.03),r=t.addScaledVector(i,s);Ase({group:this._text,direction:e,up:i,normal:n,position:r})}#n(e,t,i,n){let s=this.plugin.world.camera.three,r=s.position.clone().sub(this.group.position).sub(t);n.copy(r).addScaledVector(e,-r.dot(e)),n.lengthSq()<1e-10&&(n.copy(new ie(0,1,0).cross(e)),n.lengthSq()<1e-10&&n.copy(new ie(1,0,0).cross(e))),n.normalize(),i.crossVectors(n,e).normalize();let o=e.clone().applyQuaternion(s.quaternion.clone().invert());(Math.abs(o.x)>1e-4?o.x>0:o.y>0)||(i.negate(),e.negate())}#a(e,t,i){t.copy(D9e).addScaledVector(e,-e.dot(D9e)).normalize(),i.crossVectors(e,t).normalize()}#s(){this._text&&(this.group.remove(this._text),this._text.traverse(e=>{e.geometry&&e.geometry.dispose(),e.material&&(Array.isArray(e.material)?e.material:[e.material]).forEach(t=>t.dispose())}),this._text=null,this._textContent=null)}destroy(){this._destroyed=!0,this._showRequestId++,this._cameraControls?.removeEventListener?.("update",this._onCameraUpdate),this._cameraControls=null,this.#s(),this.lineGeometry.dispose(),this.material.dispose(),this.sphereMaterial.dispose(),this.sphereGeometry.dispose(),this.group.removeFromParent(),this.plugin.measurements=this.plugin.measurements.filter(e=>e!==this),this.plugin.fragmentsInstance.requestRender()}get length(){return this.visible?this._length:0}get visible(){return this._visible}set visible(e){this._visible=!!e,this.group.visible=this._visible}get color(){return hse(this.material.color)}set color(e=this.plugin.defaultColor){let t=GT(e);this.material.color.copy(t),this.sphereMaterial.color.copy(t),this._text&&this._text.traverse(i=>{i.material&&(Array.isArray(i.material)?i.material:[i.material]).forEach(n=>n.color?.copy(t))})}},wbn=class{constructor(e,t,i,n={}){this.fragmentsInstance=e,this.world=e.world,this.fragments=e.fragments;let s=e.components.get(e.OBC.Raycasters);this.caster=s.get(this.world),this.textSizeRatio=n.textSizeRatio??.1,this.defaultColor=n.defaultColor??"#ffffff",this.measurements=[],this.measurementEndCallbacks={},this.measurementEndCallbackId=0,this.control=new Cbn(this)}on(e,t){if(e==="measurementEnd")return this.measurementEndCallbacks[this.measurementEndCallbackId++]=t,this.measurementEndCallbackId}off(e){this.measurementEndCallbacks[e]=null}async castNormalRay(e,t,i,n=.02){let s=i?.fragments?.modelId,r=i?.localId;if(s==null||r==null)return null;let o=e.clone().addScaledVector(t,.005);return(await this.fragmentsInstance.raycastFromRay(o,t)).find(a=>e.distanceTo(a.point)<n?!1:!(String(a.fragments?.modelId)===String(s)&&a.localId===r))??null}destroy(){this.control.deactivate(),this.measurements.slice().forEach(e=>e.destroy()),this.measurements.length=0}},Cbn=class{constructor(e){this.plugin=e,this.currentMeasurement=null,this.lastSnap=null,this.activated=!1,this.pointerMoveRequestId=0,this.mouseDown=!1,this.dragging=!1,this.pointerDownPosition=null,this.dragThreshold=4,this.consecutiveInvalidHits=0,this.onPointerMove=this.onPointerMove.bind(this),this.onPointerDown=this.onPointerDown.bind(this),this.onPointerUp=this.onPointerUp.bind(this)}async onPointerMove(e){e.preventDefault();let t=++this.pointerMoveRequestId;if(this.mouseDown&&this.pointerDownPosition){let s=e.clientX-this.pointerDownPosition.x,r=e.clientY-this.pointerDownPosition.y;s*s+r*r>this.dragThreshold*this.dragThreshold&&(this.dragging=!0)}if(this.dragging)return;let i=M1e(e,this.plugin.world.renderer.three.domElement),n=await this.plugin.caster.castRay({position:i});if(t===this.pointerMoveRequestId){if(this.lastSnap=n?{hit:n,point:n.point.clone(),normal:N1e(n,this.plugin.world.camera.three),modelId:n.fragments?.modelId??null}:null,!this.lastSnap){this.consecutiveInvalidHits+=1,this.consecutiveInvalidHits>=2&&(this.currentMeasurement?.destroy(),this.currentMeasurement=null,this.plugin.fragmentsInstance.requestRender());return}this.consecutiveInvalidHits=0,this.currentMeasurement||=new Tbn(this.plugin,this.lastSnap),await this.currentMeasurement.show(this.lastSnap,()=>t===this.pointerMoveRequestId),t===this.pointerMoveRequestId&&this.plugin.fragmentsInstance.requestRender()}}onPointerDown(e){e.button===0&&(this.mouseDown=!0,this.dragging=!1,this.pointerDownPosition={x:e.clientX,y:e.clientY})}onPointerUp(e){if(e.button!==0)return;this.mouseDown=!1;let t=this.dragging;this.dragging=!1,this.pointerDownPosition=null,!(t||!this.currentMeasurement)&&(this.currentMeasurement.length<=0||(this.plugin.measurements.push(this.currentMeasurement),Object.values(this.plugin.measurementEndCallbacks).forEach(i=>{i?.(this.currentMeasurement)}),this.currentMeasurement=null))}activate(){if(this.activated)return;let e=this.plugin.world.renderer.three.domElement;e.addEventListener("pointermove",this.onPointerMove),e.addEventListener("pointerdown",this.onPointerDown),document.addEventListener("pointerup",this.onPointerUp),this.activated=!0}deactivate(){if(!this.activated)return;this.pointerMoveRequestId++;let e=this.plugin.world.renderer.three.domElement;e.removeEventListener("pointermove",this.onPointerMove),e.removeEventListener("pointerdown",this.onPointerDown),document.removeEventListener("pointerup",this.onPointerUp),this.currentMeasurement?.destroy(),this.currentMeasurement=null,this.lastSnap=null,this.mouseDown=!1,this.dragging=!1,this.pointerDownPosition=null,this.consecutiveInvalidHits=0,this.activated=!1}},xQ=new ie(0,1,0),F1e=new ie(0,0,1),k1e=new ie(1,0,0),E4=1e-6,Sbn=class{constructor(e,t){this.plugin=e,this.group=new $r,this.material=new zg({color:GT(e.defaultColor),linewidth:e.lineWidth,depthTest:!0,depthWrite:!1,transparent:!1}),this.#o(),this.geometry=new KN,this.lines=new RU(this.geometry,this.material),this.lines.renderOrder=10,this.group.add(this.lines),this._visible=!0,this._texts=[],this.modelIds=pL(t.modelId),this.perimeter=0,this.valid=!1,(this.plugin.overlayScene||this.plugin.world.scene.three).add(this.group),this.#e(t)}update(e){this.modelIds=pL(e.modelId),this.#e(e),this.plugin.fragmentsInstance.requestRender()}#e(e){this.#u(),this.valid=!1;let t=this.#t(e);if(!t){this.lines.visible=!1;return}let{vertices:i,boundaryEdges:n}=t;if(!n.length){this.lines.visible=!1;return}let s=e.normal.clone().normalize(),r=e.point.clone(),o=this.#a(i,r);this.group.position.copy(o);let{horizontalAxis:a,verticalAxis:l}=this.#s(s,n),{origin:c,boundarySegments2D:d,point2D:u}=this.#c(i,n,r,a,l),h=this.#r(u,new Cn(0,1),d),p=this.#r(u,new Cn(0,-1),d),f=this.#r(u,new Cn(1,0),d),m=this.#r(u,new Cn(-1,0),d),g=N=>c.clone().add(a.clone().multiplyScalar(N.x)).add(l.clone().multiplyScalar(N.y)),A=h?g(h.point):null,E=p?g(p.point):null,b=f?g(f.point):null,T=m?g(m.point):null,C=s.clone().multiplyScalar(this.plugin.surfaceOffset),S=[],R=[];this.perimeter=0;let x=new Set;for(let[N,z]of n){let k=N.distanceTo(z);if(k<=E4)continue;this.perimeter+=k;let te=`${k.toFixed(2)} m`;x.add(te);let fe=r.clone().sub(N.clone().add(z).multiplyScalar(.5));S.push([N,z,te,fe])}if(A&&E){let N=`${E.distanceTo(A).toFixed(2)} m`;R.push([E,A,N,null])}else A?R.push([r,A,`${r.distanceTo(A).toFixed(2)} m`,null]):E&&R.push([r,E,`${r.distanceTo(E).toFixed(2)} m`,null]);if(b&&T){let N=`${T.distanceTo(b).toFixed(2)} m`;R.push([T,b,N,null])}else b?R.push([r,b,`${r.distanceTo(b).toFixed(2)} m`,null]):T&&R.push([r,T,`${r.distanceTo(T).toFixed(2)} m`,null]);let _=new Set;R.forEach(([,,N])=>{x.has(N)&&_.add(N)});let F=S.map(N=>({segment:N,kind:"edge"})).concat(R.map(N=>({segment:N,kind:"center"})));if(!F.length){this.lines.visible=!1;return}let L=[];F.forEach(({segment:[N,z,k,te],kind:fe})=>{let ye=Gx(N,o).add(C),je=Gx(z,o).add(C);L.push(ye.x,ye.y,ye.z,je.x,je.y,je.z),fe==="edge"&&_.has(k)||this.#l(ye,je,s,k,te)}),this.#o(),this.geometry.setPositions(L),this.lines.visible=!0,this.valid=!0}#t(e){let t=this.#i(e);if(t)return t;let i=this.#n(e),n=[],s=[];if(i)n=i.vertices,s=i.indices;else return null;if(s.length||(s=Array.from({length:n.length},(a,l)=>l)),s.length<3)return null;let r=L1e(n,s);if(!r.indices.length)return null;let o=B1e(r.vertices,r.indices);return{vertices:r.vertices,boundaryEdges:o}}#i(e){let t=R1e(e);if(!t)return null;let{vertices:i,indices:n}=t,s=L1e(i,n);if(!s.indices.length)return null;let r=B1e(s.vertices,s.indices);return{vertices:s.vertices,boundaryEdges:r}}#n(e){let t=y9e(e);if(!t)return null;let{vertices:i,indices:n}=t,s=L1e(i,n);if(!s.indices.length)return null;let r=B1e(s.vertices,s.indices);return{vertices:s.vertices,boundaryEdges:r,indices:s.indices}}#a(e,t){if(!e?.length)return t.clone();let i=new As;return e.forEach(n=>i.expandByPoint(n)),i.isEmpty()?t.clone():i.getCenter(new ie)}#s(e,t=[]){let i=U1t(e,t,{eps:E4});if(!i&&(i=xQ.clone().sub(e.clone().multiplyScalar(xQ.dot(e))),i.lengthSq()<=E4)){let o=F1e.clone().sub(e.clone().multiplyScalar(F1e.dot(e))),a=k1e.clone().sub(e.clone().multiplyScalar(k1e.dot(e)));i=o.lengthSq()>=a.lengthSq()?o:a}i.normalize();let n=new ie().crossVectors(i,e).normalize();n.lengthSq()<=E4&&(n=k1e.clone().sub(e.clone().multiplyScalar(k1e.dot(e))).normalize());let s=this.plugin.world.camera.three.up.clone().normalize(),r=s.clone().sub(e.clone().multiplyScalar(s.dot(e)));return r.lengthSq()>E4&&i.dot(r.normalize())<0&&(i.negate(),n.negate()),{horizontalAxis:n,verticalAxis:i}}#c(e,t,i,n,s){let r=e[0].clone(),o=a=>{let l=a.clone().sub(r);return new Cn(l.dot(n),l.dot(s))};return{origin:r,boundarySegments2D:t.map(([a,l])=>[o(a),o(l)]),point2D:o(i)}}#r(e,t,i){let n=(r,o)=>r.x*o.y-r.y*o.x,s=null;for(let[r,o]of i){let a=o.clone().sub(r),l=n(t,a);if(Math.abs(l)<=E4)continue;let c=r.clone().sub(e),d=n(c,a)/l,u=n(c,t)/l;if(d<E4||u<-1e-6||u>1.000001)continue;let h=e.clone().add(t.clone().multiplyScalar(d));(!s||d<s.distance)&&(s={distance:d,point:h})}return s}#l(e,t,i,n,s=null){let r=t.clone().sub(e),o=r.length();if(o<=E4)return;let{direction:a,up:l,offsetUp:c}=this.#d(r,i,s),d=vse({content:n,size:Math.max(.035,o*this.plugin.textSizeRatio),color:this.material.color,strokeColor:"rgba(0, 0, 0, 0.95)",strokeWidth:12}),u=e.clone().add(t).multiplyScalar(.5),h=Math.max(.02,o*.03);Ase({group:d,direction:a,up:l,normal:i,position:u.clone().add(c.clone().multiplyScalar(h))}),this._texts.push(d),this.group.add(d)}#d(e,t,i=null){let n=t.clone().normalize(),s=e.clone().sub(n.clone().multiplyScalar(e.dot(n)));s.lengthSq()<=E4&&(s=xQ.clone().sub(n.clone().multiplyScalar(xQ.dot(n))),s.lengthSq()<=E4&&(s=F1e.clone().sub(n.clone().multiplyScalar(F1e.dot(n))))),s.normalize();let r=new ie().crossVectors(n,s);r.lengthSq()<=E4&&(r=xQ.clone().sub(n.clone().multiplyScalar(xQ.dot(n)))),r.normalize(),s=new ie().crossVectors(r,n).normalize(),r=new ie().crossVectors(n,s).normalize();let o=r.clone();if(i?.isVector3){let c=i.clone().sub(n.clone().multiplyScalar(i.dot(n))).sub(s.clone().multiplyScalar(i.dot(s)));c.lengthSq()>E4&&(c.normalize(),o.dot(c)<0&&o.negate())}let a=this.plugin.world.camera.three.up.clone().normalize(),l=a.clone().sub(n.clone().multiplyScalar(a.dot(n))).sub(s.clone().multiplyScalar(a.dot(s)));return l.lengthSq()>E4&&r.dot(l.normalize())<0&&(r.negate(),s.negate()),{direction:s,up:r,offsetUp:o}}#o(){let e=this.plugin.world.renderer.three.domElement;this.material.resolution.set(e.clientWidth,e.clientHeight)}#u(){this._texts.forEach(e=>{this.group.remove(e),e.traverse(t=>{t.geometry&&t.geometry.dispose(),t.material&&(Array.isArray(t.material)?t.material:[t.material]).forEach(i=>i.dispose())})}),this._texts=[]}destroy(){this.#u(),this.geometry.dispose(),this.material.dispose(),this.group.removeFromParent(),this.plugin.measurements=this.plugin.measurements.filter(e=>e!==this),this.plugin.fragmentsInstance.requestRender()}get visible(){return this._visible}set visible(e){this._visible=!!e,this.group.visible=this._visible,this.plugin.fragmentsInstance.requestRender()}get color(){return hse(this.material.color)}set color(e=this.plugin.defaultColor){let t=GT(e);this.material.color.copy(t),this._texts.forEach(i=>{i.traverse(n=>{n.material&&(Array.isArray(n.material)?n.material:[n.material]).forEach(s=>s.color?.copy(t))})}),this.plugin.fragmentsInstance.requestRender()}},xbn=class{constructor(e,t,i,n={}){this.fragmentsInstance=e,this.world=e.world,this.overlayScene=e.overlayScene,this.components=e.components,this.OBC=e.OBC,this.cursorOverlay=i;let s=this.components.get(this.OBC.Raycasters);this.caster=s.get(this.world),this.defaultColor=n.defaultColor??"#ffffff",this.lineWidth=n.lineWidth??2,this.textSizeRatio=n.textSizeRatio??.08,this.surfaceOffset=n.surfaceOffset??.003,this.measurements=[],this.measurementEndCallbacks={},this.measurementEndCallbackId=0,this.previousHighlightOnHover=null,this.hoverSuspended=!1,this.control=new Rbn(this)}on(e,t){if(e==="measurementEnd")return this.measurementEndCallbacks[this.measurementEndCallbackId++]=t,this.measurementEndCallbackId}off(e){this.measurementEndCallbacks[e]=null}destroy(){this.control.deactivate(),this.measurements.slice().forEach(e=>e.destroy()),this.measurements.length=0}},Rbn=class{constructor(e){this.plugin=e,this.lastHit=null,this.currentMeasurement=null,this.mouseDown=!1,this.dragging=!1,this.pointerDownPosition=null,this.dragThreshold=4,this.activated=!1,this.pointerMoveRequestId=0,this.consecutiveInvalidHits=0,this.onPointerMove=this.onPointerMove.bind(this),this.onPointerDown=this.onPointerDown.bind(this),this.onPointerUp=this.onPointerUp.bind(this)}clearPreview(){this.lastHit=null,this.plugin.cursorOverlay.update(null),this.currentMeasurement?.destroy(),this.currentMeasurement=null}async onPointerMove(e){e.preventDefault();let t=++this.pointerMoveRequestId;if(this.mouseDown&&this.pointerDownPosition){let r=e.clientX-this.pointerDownPosition.x,o=e.clientY-this.pointerDownPosition.y;r*r+o*o>this.dragThreshold*this.dragThreshold&&(this.dragging=!0)}let i=M1e(e,this.plugin.world.renderer.three.domElement),n=await this.plugin.caster.castRay({position:i,snappingClasses:[S9e.FACE]});if(!this.activated||t!==this.pointerMoveRequestId)return;if(!this.#e(n)){this.consecutiveInvalidHits+=1,this.consecutiveInvalidHits>=2&&this.clearPreview();return}this.consecutiveInvalidHits=0,this.lastHit={hit:n,facePoints:n.facePoints??null,faceIndices:n.faceIndices??n.faceIndexes??n.indices??null,point:n.point.clone(),normal:N1e(n,this.plugin.world.camera.three),modelId:n.fragments?.modelId??null};let s=x9e(n.point,this.plugin.world.camera.three,this.plugin.world.renderer.three.domElement);if(this.plugin.cursorOverlay.update({snapName:"FACE",screen:s}),this.currentMeasurement?this.currentMeasurement.update(this.lastHit):this.currentMeasurement=new Sbn(this.plugin,this.lastHit),!this.currentMeasurement.valid){this.currentMeasurement.destroy(),this.currentMeasurement=null;return}this.plugin.fragmentsInstance.requestRender()}onPointerDown(e){e.button===0&&(this.mouseDown=!0,this.dragging=!1,this.pointerDownPosition={x:e.clientX,y:e.clientY})}onPointerUp(e){if(e.button!==0)return;this.mouseDown=!1;let t=this.dragging;if(this.dragging=!1,this.pointerDownPosition=null,t||!this.currentMeasurement||!this.currentMeasurement.valid)return;let i=this.currentMeasurement;if(this.currentMeasurement=null,!i.valid){i.destroy();return}this.plugin.measurements.push(i),Object.values(this.plugin.measurementEndCallbacks).forEach(n=>{n?.(i)}),this.plugin.fragmentsInstance.requestRender()}activate(){if(this.activated)return;let e=this.plugin.world.renderer.three.domElement;!this.plugin.hoverSuspended&&typeof this.plugin.fragmentsInstance.suspendHoverHighlight=="function"&&(this.plugin.fragmentsInstance.suspendHoverHighlight("face-measurement"),this.plugin.hoverSuspended=!0),typeof this.plugin.fragmentsInstance.highlightOnHover=="boolean"&&(this.plugin.previousHighlightOnHover=this.plugin.fragmentsInstance.highlightOnHover,this.plugin.fragmentsInstance.highlightOnHover=!1),this.plugin.cursorOverlay.useCrosshairCursor(),this.plugin.cursorOverlay.show(),e.addEventListener("pointermove",this.onPointerMove),e.addEventListener("pointerdown",this.onPointerDown),document.addEventListener("pointerup",this.onPointerUp),this.activated=!0}deactivate(){if(!this.activated)return;let e=this.plugin.world.renderer.three.domElement;e.removeEventListener("pointermove",this.onPointerMove),e.removeEventListener("pointerdown",this.onPointerDown),document.removeEventListener("pointerup",this.onPointerUp),this.pointerMoveRequestId+=1,this.consecutiveInvalidHits=0,this.clearPreview(),this.mouseDown=!1,this.dragging=!1,this.pointerDownPosition=null,this.plugin.cursorOverlay.hide(),this.plugin.cursorOverlay.useOverlayCursor(),this.plugin.hoverSuspended&&typeof this.plugin.fragmentsInstance.resumeHoverHighlight=="function"&&(this.plugin.fragmentsInstance.resumeHoverHighlight("face-measurement"),this.plugin.hoverSuspended=!1),this.plugin.previousHighlightOnHover!==null&&(this.plugin.fragmentsInstance.highlightOnHover=this.plugin.previousHighlightOnHover,this.plugin.previousHighlightOnHover=null),this.activated=!1}#e(e){if(!e)return!1;if(e.facePoints?.length>=9)return!0;let t=e.object?.geometry?.attributes?.position,i=e.faceIndices??e.faceIndexes??e.indices??null;return!!(t&&i?.length>=3&&e.point)}},U1e=new ie(0,1,0),W1t=new ie(0,0,1),Q1t=new ie(1,0,0),fL=1e-6,_bn=({colorA:e,colorB:t,opacity:i,stripeWidth:n})=>new ha({uniforms:{uOrigin:{value:new ie},uAxisX:{value:new ie(1,0,0)},uAxisY:{value:new ie(0,1,0)},uStripeWidth:{value:n},uColorA:{value:e.clone()},uColorB:{value:t.clone()},uOpacity:{value:i}},vertexShader:`
|
|
90796
|
+
`,depthTest:!1,depthWrite:!1,transparent:!1}),this.fsQuad=new Dx(this.combineMaterial),this._drawingBufferSize=new Cn(1,1)}setSize(e,t){this.isolatedDepthTarget.setSize(e,t),this.isolatedColorTarget.setSize(e,t)}syncRenderTargetSize(e,t){let i=t?.width??t?.texture?.image?.width,n=t?.height??t?.texture?.image?.height,s=Number.isFinite(i)?i:0,r=Number.isFinite(n)?n:0;(s<=0||r<=0)&&(e.getDrawingBufferSize(this._drawingBufferSize),s=this._drawingBufferSize.x,r=this._drawingBufferSize.y),s=Math.max(1,Math.floor(s)),r=Math.max(1,Math.floor(r)),(this.isolatedDepthTarget.width!==s||this.isolatedDepthTarget.height!==r)&&this.setSize(s,r)}render(e,t,i){let n=this.world.camera?.three,s=this.world.scene?.three;if(!n||!s)return;this.syncRenderTargetSize(e,i);let r=e.autoClear,o=s.overrideMaterial,a=this.isolatedScene.overrideMaterial,l=this.isolatedScene.background,c=this.isolatedScene.environment,d=this.isolatedScene.fog,u=e.getClearColor(new zn),h=e.getClearAlpha(),p=[];try{e.autoClear=!0,this.isolatedScene.overrideMaterial=this.depthMaterial,this.isolatedScene.background=null,this.isolatedScene.environment=s.environment??null,this.isolatedScene.fog=s.fog??null,e.setRenderTarget(this.isolatedDepthTarget),e.setClearColor(16777215,1),e.clear(!0,!0,!0),e.render(this.isolatedScene,n),this.isolatedScene.overrideMaterial=a,s.traverse(f=>{if(!f?.isLight)return;let m=f.clone();m.matrixAutoUpdate=!1,m.matrixWorldAutoUpdate=!1,m.matrixWorld.copy(f.matrixWorld),this.isolatedScene.add(m),p.push(m)}),e.setRenderTarget(this.isolatedColorTarget),e.setClearColor(0,0),e.clear(!0,!0,!0),e.render(this.isolatedScene,n),this.combineMaterial.uniforms.tDiffuse.value=i.texture,this.combineMaterial.uniforms.tIsoDepth.value=this.isolatedDepthTarget.texture,this.combineMaterial.uniforms.tIsoColor.value=this.isolatedColorTarget.texture,e.autoClear=!1,e.setRenderTarget(this.renderToScreen?null:t),this.fsQuad.render(e)}finally{for(let f of p)f.removeFromParent();this.isolatedScene.overrideMaterial=a,this.isolatedScene.background=l,this.isolatedScene.environment=c,this.isolatedScene.fog=d,s.overrideMaterial=o,e.setClearColor(u,h),e.autoClear=r}}dispose(){this.fsQuad.dispose(),this.combineMaterial.dispose(),this.depthMaterial.dispose(),this.isolatedDepthTarget.dispose(),this.isolatedColorTarget.dispose()}};function i3n(e){let{fragments:t,components:i,world:n,OBF:s,$viewer:r}=e,o=i.get(s.Outliner),a=!1,l={},c=Promise.resolve(),d=null,u=null,h=null,p=null,f=null,m=null,g=new Map,A=new cb,E=new Set,b=new Map,T=!1,C=(Dt=[])=>{E.clear();for(let At of Dt)E.add(At)},S=()=>{a||=(n.renderer?.postproduction&&(n.renderer.postproduction.enabled=!0),o.world=n,o.enabled=!0,o.create(use,{fillOpacity:0,priority:S1t}),o.configure(use,{fillOpacity:0,priority:S1t}),!0)},R=Dt=>{let At=l[Dt];return!!(At&&At.size>0)},x=Dt=>{R(Dt)&&Ze()},_=(Dt,At)=>{if(!Dt||!At?.onViewUpdated||b.has(Dt))return;let ut=()=>{x(Dt)};At.onViewUpdated.add(ut),b.set(Dt,{model:At,callback:ut})},F=Dt=>{let At=b.get(Dt);At&&(At.model?.onViewUpdated?.remove?.(At.callback),b.delete(Dt))},L=()=>{for(let[Dt,At]of t.list)_(Dt,At);p||(p=({key:Dt,value:At})=>{_(Dt,At)},t.list.onItemSet.add(p)),f||(f=Dt=>{F(Dt)},t.list.onItemDeleted.add(f))},N=(Dt,At)=>{let ut=null;try{ut=At.outlinePass}catch{ut=null}return ut&&Dt.passes.includes(ut)?ut:Dt.passes.find(bt=>bt.constructor?.name==="OutputPass")??null},z=()=>{if(!d)return;let Dt=n.renderer?.postproduction,At=Dt?.composer;if(!At)return;let ut=N(At,Dt),bt=At.passes.indexOf(d);if(bt!==-1){if((At.passes[bt+1]??null)===ut)return;At.removePass(d)}let _t=ut?At.passes.indexOf(ut):-1;_t===-1?At.addPass(d):At.insertPass(d,_t)},k=()=>{let Dt=n.renderer;!Dt||!Dt.postproduction||(Dt.postproduction.enabled=!0,d||(d=new t3n(n,A),d.enabled=!1,u=({x:At,y:ut})=>{d?.setSize(Math.max(1,At),Math.max(1,ut))},Dt.onResize.add(u),h=()=>{d?.enabled&&z()},Dt.onBeforeUpdate.add(h)),z())},te=Dt=>{let At={};for(let[ut,bt]of Object.entries(Dt??{})){let _t=bt instanceof Set?bt:new Set(bt);_t.size>0&&(At[ut]=_t)}return At},fe=()=>{for(let Dt of Object.values(l))if(Dt.size>0)return!0;return!1},ye=Dt=>{if(!Dt||!Dt.fragments)return!1;let At=Dt.fragments.modelId,ut=l[At];return!!(ut&&ut.has(Dt.localId))},je=(Dt,At)=>{for(let ut of Dt.values())for(let bt of ut)bt.removeFromParent();Dt.clear(),At&&At.clear()},Oe=()=>{je(g,A)},Ge=(Dt,At,ut,bt)=>{let _t=Dt.geometry;if(!_t)return null;let hi=Array.isArray(Dt.material)?Dt.material.filter(Boolean):[Dt.material].filter(Boolean);if(hi.length===0)return null;let It=ct=>hi.length===1?0:Math.max(0,Math.min(Number.isInteger(ct)?ct:0,hi.length-1)),ne=new $n;ne.attributes=_t.attributes,_t.index&&ne.setIndex(_t.index),ne.boundingBox=_t.boundingBox,ne.boundingSphere=_t.boundingSphere;let dt=_t.index?.array?.length??_t.index?.count??0,pt=dt>0?dt:_t.getAttribute("position")?.count??0,Ve=_t.groups?.length>0?_t.groups:[{start:0,count:pt,materialIndex:0}],Ie=Math.min(At.position?.length??0,At.size?.length??0);for(let ct=0;ct<Ie;ct+=1){let ot=Math.max(0,At.position[ct]??0),Fe=At.size[ct]??0,yt=Fe===4294967295?Math.max(0,pt-ot):Math.max(0,Fe);if(yt===0)continue;let Wt=ot+yt,Bt=!1;for(let Ne of Ve){let Ce=Math.max(0,Ne.start??0),it=Ne.count===1/0?Math.max(0,pt-Ce):Math.max(0,Ne.count??0);if(it===0)continue;let Ht=Ce+it,Et=Math.max(ot,Ce),ti=Math.min(Wt,Ht)-Et;if(ti<=0)continue;let Kt=It(Ne.materialIndex??0);ne.addGroup(Et,ti,Kt),Bt=!0}Bt||ne.addGroup(ot,yt,0)}let me=new pn(ne,hi);return me.matrixAutoUpdate=!1,me.matrixWorldAutoUpdate=!1,me.frustumCulled=!1,me.matrixWorld.copy(Dt.matrixWorld),me.userData.isolatedPick={modelId:ut,localId:bt},me},We=async Dt=>{let At=g,ut=new Map,bt=Object.entries(Dt);for(let[_t,hi]of bt){let It=t.list.get(_t);if(It)for(let ne of hi){let dt;try{dt=await It.getItemDrawChunks([ne])}catch{continue}if(!dt?.length)continue;let pt=`${_t}:${ne}`,Ve=new Set;for(let me of dt){let ct=It.tiles.get(me.tileId);if(!ct)continue;let ot=Ge(ct,me,_t,ne);ot&&(ot.renderOrder=40,A.add(ot),Ve.add(ot))}if(Ve.size===0)continue;ut.set(pt,Ve);let Ie=At.get(pt);if(Ie){for(let me of Ie)me.removeFromParent();At.delete(pt)}}}for(let _t of At.values())for(let hi of _t)hi.removeFromParent();g=ut},Ze=()=>{if(T)return;T=!0;let Dt=async()=>{T=!1,fe()&&(await We(l),e.requestRender())};c=c.then(Dt,Dt)},Ft=async Dt=>{let At=l;l=Dt;let ut=Object.keys(Dt).length>0;d&&(d.enabled=ut),Object.keys(At).length>0&&a&&await o.removeItems(At,use),ut?(k(),d.enabled=!0,await We(Dt)):Oe(),ut?(S(),await o.addItems(Dt,use)):a&&o.clean(use),await t.core.update(!0),e.requestRender()},Pt=async(Dt=[],At=!0)=>{let ut=[...new Set(Dt)];if(At&&r.state.selectedObjects.length>0){let hi=new Set(ut),It=r.state.selectedObjectsUuids.filter(ne=>hi.has(ne));It.length>0&&r.state.deselectObjectsByUuids(It)}let bt=await t.guidsToModelIdMap(ut),_t=te(bt);return c=c.then(async()=>{await Ft(_t),C(ut)},async()=>{await Ft(_t),C(ut)}),c},tt=async()=>{let Dt={};return c=c.then(async()=>{await Ft(Dt),C()},async()=>{await Ft(Dt),C()}),c},kt={isolate:Pt,clear:tt,isolatedUuids:E,isPickResultExcludedFromPrimaryPick(Dt){return fe()&&!ye(Dt)}};return L(),m=JIn({$viewer:r,onIsolationChanged:async({isolatedUuids:Dt,isolatedAwayUuids:At})=>{if(At.length===0||Dt.length===0){await tt();return}await Pt(Dt,!1)}}),{destroy(){m&&=(m(),null);for(let At of[...b.keys()])F(At);p&&=(t.list.onItemSet.remove(p),null),f&&=(t.list.onItemDeleted.remove(f),null);let Dt=n.renderer;Dt&&u&&Dt.onResize.remove(u),u=null,Dt&&h&&Dt.onBeforeUpdate.remove(h),h=null,d&&=(Dt?.postproduction?.composer?.removePass(d),d.dispose(),null),Oe()},extension:kt}}var UH="select",x1t=20;function n3n(e){let{fragments:t,$viewer:i,OBC:n,OBF:s,components:r,world:o}=e,a=r.get(s.Outliner),l=!1,c=new zn(6878522),d=new zn(6878522),u=.15,h=1,p=()=>{l||=(o.renderer.postproduction.enabled=!0,a.world=o,a.enabled=!0,a.create(UH,{color:c,fillColor:d,fillOpacity:u,thickness:h,priority:x1t}),!0)},f=()=>{l&&a.configure(UH,{color:c,fillColor:d,fillOpacity:u,thickness:h,priority:x1t})},m={},g=async(_,F="add")=>{if(F!=="add"&&F!=="remove")throw TypeError("[BIMDataViewer - 3D Fragments - select] Invalid action, expected 'add' or 'remove', got "+F);let L=await t.guidsToModelIdMap(_);F==="add"?(n.ModelIdMapUtils.add(m,L),p(),await a.addItems(L,UH)):(n.ModelIdMapUtils.remove(m,L),await a.removeItems(L,UH)),await t.core.update(!0),e.requestRender()},A=_=>_.map(F=>F.uuid).filter(Boolean),E=Promise.resolve(),b=_=>(E=E.then(_,_),E),T=({key:_,value:F})=>{let L=o.renderer?.postproduction?.outlinePass;if(L&&F?.tiles)for(let[,te]of F.tiles)L.detachOutlinedTile(te);a._tileListeners?.get(_)?.(),a._tileListeners?.delete(_);let N=m[_];if(!N)return;let z={[_]:new Set(N)};delete m[_],b(()=>a.removeItems(z,UH));let k=i.state.selectedObjects.filter(te=>String(te.model?.id)===_);k.length>0&&i.state.deselectObjects(k.map(te=>te.id))};t.list.onBeforeDelete.add(T);let C=_=>{let F=_.modelId,L=i.state.selectedObjects.filter(N=>String(N.model?.id)===F&&N.visible);L.length!==0&&b(()=>g(A(L),"add"))};t.core.onModelLoaded.add(C);let S=[i.state.hub.on("objects-selected",({objects:_})=>{let F=_.filter(L=>L.visible);b(()=>g(A(F),"add"))}),i.state.hub.on("objects-deselected",({objects:_})=>{b(()=>g(A(_),"remove"))}),i.state.hub.on("objects-hidden",({objects:_})=>{let F=_.filter(L=>L.selected);b(()=>g(A(F),"remove"))}),i.state.hub.on("objects-shown",({objects:_})=>{let F=_.filter(L=>L.selected);b(()=>g(A(F),"add"))})],R=!0,x=e.onPick(async({pickResult:_,event:F})=>{if(!R)return;let L=!F.shiftKey;if(!_){L&&i.state.deselectObjects(i.state.selectedObjects.map(ye=>ye.id));return}let{fragments:N,localId:z}=_,k={[N.modelId]:new Set([z])},te=(await t.modelIdMapToGuids(k))[0];if(!te)return;let fe=i.state.getObjectsByUuids([te])[0];fe&&(fe.selected?i.state.deselectObjects([fe.id]):i.state.selectObjects([fe.id],{exclusive:L}))});return{destroy(){x(),t.list.onBeforeDelete.remove(T),t.core.onModelLoaded.remove(C),a.clean(UH),a.remove(UH),S.forEach(_=>i.state.hub.off(_))},extension:{get selectOnClick(){return R},set selectOnClick(_){R=_},get color(){return c},set color(_){c=_,f()},get fillColor(){return d},set fillColor(_){d=_,f()},get fillOpacity(){return u},set fillOpacity(_){u=_,f()},get thickness(){return h},set thickness(_){h=_,f()}}}}function s3n(e){let{fragments:t,$viewer:i,OBC:n,components:s}=e,r=s.get(n.Hider),o=async u=>{let h;h=Array.isArray(u)?await t.guidsToModelIdMap(u):u,await r.set(!0,h),await t.core.update(!0),e.requestRender()},a=async u=>{let h;h=Array.isArray(u)?await t.guidsToModelIdMap(u):u,await r.set(!1,h),await t.core.update(!0),e.requestRender()},l=u=>u.map(h=>h.uuid).filter(Boolean),c=u=>{let h=u.modelId,p=i.state.unvisibleObjects.filter(f=>String(f.model?.id)===h);p.length!==0&&a(l(p))};t.core.onModelLoaded.add(c);let d=[i.state.hub.on("objects-shown",({objects:u})=>o(l(u))),i.state.hub.on("objects-hidden",({objects:u})=>a(l(u)))];return{destroy(){t.core.onModelLoaded.remove(c),d.forEach(u=>i.state.hub.off(u))},extension:{show:o,hide:a}}}function r3n(e){let{fragments:t,$viewer:i}=e,n=Promise.resolve(),s=p=>(n=n.then(p,p),n),r=p=>p.map(f=>f.uuid).filter(Boolean),o=p=>Object.keys(p||{}).length>0,a=async p=>Array.isArray(p)?t.guidsToModelIdMap(p):p||{},l=p=>(p instanceof Set?[...p]:[...new Set(p||[])]).filter(f=>Number.isFinite(f)),c=p=>p instanceof zn?p:new zn(p),d=async(p,f)=>{if(f==null)return u(p);let m=await a(p);if(!o(m))return;let g=[],A=c(f);for(let[E,b]of Object.entries(m)){let T=t.list.get(E);if(!T)continue;let C=l(b);C.length!==0&&g.push(T.setColor(C,A))}await Promise.all(g),await t.core.update(!0),e.requestRender()},u=async p=>{let f=await a(p);if(!o(f))return;let m=[];for(let[g,A]of Object.entries(f)){let E=t.list.get(g);if(!E)continue;let b=l(A);b.length!==0&&m.push(E.resetColor(b))}await Promise.all(m),await t.core.update(!0),e.requestRender()},h=[i.state.hub.on("objects-colorized",({objects:p,color:f})=>{let m=r(p);m.length&&s(()=>f==null?u(m):d(m,f))})];return{destroy(){h.forEach(p=>i.state.hub.off(p))},extension:{colorize:(p,f)=>s(()=>d(p,f)),resetColorize:p=>s(()=>u(p))}}}var o3n=e=>{if(e.length===0)return null;if(e.length===1)return e[0].clone();if(e.length===2)return e[0].clone().add(e[1]).multiplyScalar(.5);let t=e[0],i=new ie,n=0;for(let s=1;s+1<e.length;s+=1){let r=e[s],o=e[s+1],a=.5*r.clone().sub(t).cross(o.clone().sub(t)).length();if(!Number.isFinite(a)||a<=1e-6)continue;let l=t.clone().add(r).add(o).multiplyScalar(1/3);i.addScaledVector(l,a),n+=a}if(n<=1e-6){let s=new ie;return e.forEach(r=>s.add(r)),s.multiplyScalar(1/e.length)}return i.multiplyScalar(1/n)},a3n=(e,t=[])=>{let i=e?.facePoints;if(!i||i.length<3)return null;let n=[];for(let r=0;r+2<i.length;r+=3){let o=i[r],a=i[r+1],l=i[r+2];!Number.isFinite(o)||!Number.isFinite(a)||!Number.isFinite(l)||n.push(new ie(o,a,l))}if(n.length===0)return null;let s=V$e(n,t);return s.length===0?null:o3n(s)};function l3n(e){let t=c3n(e),i=d3n(e);return{destroy(){t(),i()}}}function c3n(e){let{$viewer:t}=e,i=e,n=()=>{let a=t.state.selectedObjects.map(l=>l.uuid);if(a.length!==0)return i.isolate(a)},s=()=>{if(i.isolatedUuids.size!==0)return i.clear()},r=t.shortcutManager.getDefaultShortcuts(()=>t.localContext.loadedModels.flatMap(a=>a.objects)),o=r.map(a=>a.name);return[...r,{name:"isolate",key:"I",execute:n},{name:"reintegrate",key:"U",execute:s},{name:"fitview",key:"F",execute:()=>e.fitView(t.state.selectedObjects.map(a=>a.uuid))}].forEach(a=>t.localContext.registerShortcut(a)),()=>{[...o,"isolate","reintegrate","fitview"].forEach(a=>t.localContext.unregisterShortcut(a))}}function d3n(e){let t=new AbortController;return e.$viewer.localContext.el.addEventListener("contextmenu",async i=>{let n=e.$viewer.contextMenu;if(n){i.stopPropagation(),i.preventDefault();try{await u3n(e,i)}catch(s){console.error("[BIMDataViewer - 3D Fragments] Context menu setup error:",s)}n.open(i)}},{signal:t.signal}),()=>t.abort()}async function u3n(e,t){let{$viewer:i}=e,n=e,s=i.contextMenu,r=i.state.selectedObjects.map(a=>a.uuid);[...s.getDefaultCommands({objects:i.localContext.loadedModels.flatMap(a=>a.objects),context:i.localContext}),{get label(){return i.i18n.$t("global.fit_view")},picto:"F",execute:()=>e.fitView(i.state.selectedObjects.map(a=>a.uuid))}].map(a=>s.registerContextCommand(a)),r.length>0&&s.registerContextCommand({name:"isolate",get group(){return s.groupPositions.visibility},position:4,get label(){return i.i18n.$t("context_menu.isolate")},picto:"I",execute:()=>n.isolate(r)}),n.isolatedUuids.size>0&&s.registerContextCommand({name:"reintegrate",get group(){return s.groupPositions.visibility},position:5,get label(){return i.i18n.$t("context_menu.reintegrate")},picto:"U",execute:()=>n.clear()}),r.length>0&&s.registerContextCommand({name:"colorize",get group(){return s.groupPositions.visibility},position:6,get label(){return i.i18n.$t("viewer3d.context_menu.colorize")},component:JYe}),i.state.colorizedObjects.length>0&&s.registerContextCommand({name:"reset_color",get group(){return s.groupPositions.visibility},position:7,get label(){return i.i18n.$t("viewer3d.context_menu.reset_color")},execute:()=>{let a=i.state.colorizedObjectsIds;a.length!==0&&i.state.colorizeObjects(a,null)}});let o=await h3n(e,t);if(o?.point&&(o?.face||o?.normal)){let a=p3n(o),l=a3n(o,z$e(e.world?.renderer?.three))??o.point.clone();s.registerContextCommand({get label(){return i.i18n.$t("context_menu.align_to_face")},execute:()=>g3n(e,l,a)})}}async function h3n(e,t){try{return(await e.raycastAll(t,{includeUnpickable:!0}))[0]??null}catch{return null}}function p3n(e){let t=new ie;if(e.face?.normal&&e.object){t.copy(e.face.normal);let i=new Ao().getNormalMatrix(e.object.matrixWorld);return t.applyMatrix3(i).normalize(),t}return e.normal?.isVector3?e.normal.clone().normalize():new ie(0,1,0)}var R1t=new ie(0,1,0),f3n=new ie(0,0,1),m3n=.015,v3n=.99;async function A3n(e){let t=e.world?.camera?.controls,i=NCe(e);if(i)return i;try{let n=await e.world?.camera?.getItemsBounding?.();if(n?.center)return n.center.clone()}catch{}return t?.getTarget(new ie)??new ie}async function g3n(e,t,i){let n=e.world?.camera?.controls,s=e.world?.camera?.three;if(!n||!s)return;let r=await A3n(e);await n.setFocalOffset(0,0,0,!1);let o=Math.abs(i.dot(R1t))>v3n?i.clone().addScaledVector(f3n,m3n).normalize():i.clone(),a=Math.max(s.position.distanceTo(r),.1),l=r.clone(),c=r.clone().addScaledVector(o,a),d=t.clone().sub(r),u=d.sub(o.clone().multiplyScalar(d.dot(o))),h=c.clone().add(u),p=l.clone().add(u);s.up.copy(R1t),await n.setLookAt(h.x,h.y,h.z,p.x,p.y,p.z,!1),await n.setFocalOffset(0,0,0,!1),e.requestRender?.()}function y3n(e){let{world:t,fragments:i}=e,n=async(r=[])=>{if(r?.length===0)return Array.from(i.list.values()).map(a=>a?.box).filter(a=>a instanceof As&&!a.isEmpty());let o=await i.guidsToModelIdMap(r);return i.getBBoxes(o)},s=async r=>{if(!r.length)return;let o=Q$e(e,r);if(!hee(o))return;let a=new td;o.getBoundingSphere(a),await t.camera.controls.fitToSphere(a,!0)};return{extension:{fitView:async(r=[])=>{let o=await n(r);await s(o)}}}}function I3n(e,t={}){let i=Array.isArray(t.materialByCategory)?t.materialByCategory.filter(r=>r?.material&&r.category instanceof RegExp):[],n=[],s=[];return{async apply(){n=[],s=[];for(let{category:r,material:o}of i){let a=await e.getItemsOfCategories([r]),l=Object.values(a).flat();l.length&&(o.color&&(await e.setColor(l,new zn(o.color)),n.push(...l)),typeof o.opacity=="number"&&(await e.setOpacity(l,o.opacity),s.push(...l)))}n=[...new Set(n)],s=[...new Set(s)]},async clear(){n.length&&await e.resetColor(n),s.length&&await e.resetOpacity(s),n=[],s=[]},dispose(){e.tiles.onItemSet.remove(onTileSet)}}}function b3n(e){let{fragments:t,world:i,$viewer:n}=e,s=!0;return{extension:{load:async r=>{if(!r.fragments_file)throw Error(`Model "${r.name}" does not have a fragments file.`);await e.waitUntilIsReady();let o=await(await fetch(r.fragments_file)).arrayBuffer(),a=await t.core.load(o,{modelId:String(r.id),camera:i.camera.three,onProgress:({progress:l,stage:c,modelId:d})=>{console.log(`Model ${d} loading stage: ${c}, progress: ${(l*100).toFixed(2)}%`)}});return await I3n(a,{materialByCategory:[{category:/^IFCSPACE$/i,material:{color:"#0000FF",opacity:.15}}]}).apply(),a.getClippingPlanesEvent=()=>i.renderer.three.clippingPlanes,n.localContext.hub.emit("3d-model-loaded",{model:r}),s&&=(e.fitView(),!1),a},unload:async r=>{await e.waitUntilIsReady();try{if(!t.list.has(String(r.id)))return console.warn(`Model with id "${r.id}" not found in fragments list.`),!1}catch{return!1}return await t.core.disposeModel(String(r.id)),e.fragments.list.size===0&&(s=!0),n.localContext.hub.emit("3d-model-unloaded",{model:r}),!0}}}}function E3n(e){let{world:t}=e,i=si("perspective"),n=()=>{i.value=t.camera.projection.current==="Perspective"?"perspective":"ortho",t.renderer?.postproduction&&t.renderer.postproduction.updateCamera(),e.requestRender()};return t.camera.projection.onChanged.add(n),{extension:{get projection(){return i.value},set projection(s){if(s!=="perspective"&&s!=="ortho"){console.warn(`Invalid projection value: ${s}`);return}e.isReady&&(i.value=s,s==="perspective"?(t.camera.projection.set("Perspective"),t.camera.three.updateProjectionMatrix()):t.camera.projection.set("Orthographic"))}},destroy(){t.camera.projection.onChanged.remove(n)}}}var _1t=class{constructor({id:e,clipper:t,point:i,normal:n,scaleMode:s="camera",fixedScale:r=new Cn(1,1),controlSize:o=1,activeEnabled:a=!0,visualState:l=null,controlAxisDirection:c=null,wireframeMode:d="triangles"}){this.id=e,this.type="default",this._clipper=t,this._shown=!0,this._controlShown=!1,this._widgetsVisible=!0,this._active=!1,this._hovered=!1,this._scaleMode=s,this._fixedScale=r.clone(),this._activeEnabled=a,this._visualState=l,this._controlAxisDirection=c,this._wireframeMode=d;let u=t._planeMaterial.clone();this._mesh=new pn(new Vy(1),u),this._mesh.renderOrder=2,this._mesh.userData.isSectionPlaneController=!0,this._mesh.userData.isSectionPlaneSurface=!0,this._anchor=new Dl,this._anchor.position.copy(i),this._anchor.lookAt(i.clone().add(n)),this._mesh.position.z=.01,this._anchor.add(this._mesh);let h=this._createWireframeGeometry(this._wireframeMode),p=new Rc({color:t._planeMaterial.color.getHex(),opacity:.8,transparent:!0,depthTest:!0,depthWrite:!1});this._wireframe=new jr(h,p),this._wireframe.renderOrder=2,this._wireframe.position.z=.012,this._anchor.add(this._wireframe),this._threePlane=new Ys().setFromNormalAndCoplanarPoint(n,i),this._normal=n.clone().normalize(),this._controls=new X7e(t.world.camera.three,t.world.renderer.three.domElement),this._onCameraChange=()=>{this._controls.camera=t.world.camera.three,this._updateScale()},t.world.camera.projection.onChanged.add(this._onCameraChange),this._controls.attach(this._anchor),this._controls.setSpace("local"),this._controls.setSize(o),this._controls.showX=!1,this._controls.showY=!1,this._controls.enabled=!1,this._controls.visible=!1,this._controls.getHelper().visible=!1,this._controls.getHelper().renderOrder=3,this._controls.getHelper().userData.isSectionPlaneControlHandle=!0,this._controls.getHelper().userData.sectionPlaneId=this.id,this._controls.getHelper().traverse(f=>{f.userData.isSectionPlaneController=!0,f.userData.sectionPlaneId=this.id,f.renderOrder=3;let m=f.tag!=="picker"&&f.tag!=="helper",g=Array.isArray(f.material)?f.material:[f.material];if(m)for(let A of g)A&&(A.depthTest=!1,A.depthWrite=!1,A.transparent=!0);m&&(f.userData.isSectionPlaneControlHandle=!0)}),this._pruneOppositeControlDirection(),this._onChange=()=>{this._syncFromAnchor()},this._onDraggingChanged=f=>{this._clipper.world.camera.enabled=!f.value},this._controls.addEventListener("change",this._onChange),this._controls.addEventListener("dragging-changed",this._onDraggingChanged),this._onCameraUpdate=()=>{this._updateScale(),this._clipper.requestRender()},this._scaleMode==="camera"&&this._clipper.world.camera.controls?.addEventListener("update",this._onCameraUpdate),t._widgetOverlayScene.add(this._anchor),t._widgetOverlayScene.add(this._controls.getHelper()),t._registerPlaneMesh(this._mesh,this),this._applyVisualState(),this._updateScale()}get shown(){return this._shown}get three(){return this._threePlane}get controlShown(){return this._controlShown}get widgetsVisible(){return this._widgetsVisible}get widgetPosition(){return this._anchor.position}get location(){return this._anchor.position}get position(){return this._anchor.position}get direction(){return this._normal}get active(){return this._active}setActive(e){if(!this._activeEnabled)return;let t=!!e;this._active!==t&&(this._active=t,this._applyVisualState(),this._clipper.requestRender())}setWireframeMode(e){if(e!=="triangles"&&e!=="edges")throw TypeError("wireframe mode must be 'triangles' or 'edges'");this._wireframeMode!==e&&(this._wireframeMode=e,this._wireframe.geometry.dispose(),this._wireframe.geometry=this._createWireframeGeometry(e),this._clipper.requestRender())}setHovered(e){let t=!!e;this._hovered!==t&&(this._hovered=t,this._applyVisualState(),this._clipper.requestRender())}setVisualStateDefinition(e){this._visualState=e,this._applyVisualState(),this._clipper.requestRender()}setControlColor(e){let t=this._controls.getHelper();t&&(t.traverse(i=>{if(!(i.tag!=="picker"&&i.tag!=="helper"))return;let n=Array.isArray(i.material)?i.material:[i.material];for(let s of n)s?.color&&s.color.setHex(e)}),this._clipper.requestRender())}setFixedScale(e,t){this._fixedScale.set(e,t),this._updateScale(),this._clipper.requestRender()}setScaleMode(e){if(e!=="camera"&&e!=="fixed")throw TypeError("scale mode must be 'camera' or 'fixed'");this._scaleMode!==e&&(this._scaleMode==="camera"&&this._clipper.world.camera.controls?.removeEventListener("update",this._onCameraUpdate),this._scaleMode=e,this._scaleMode==="camera"&&this._clipper.world.camera.controls?.addEventListener("update",this._onCameraUpdate),this._updateScale(),this._clipper.requestRender())}show(){this._shown||(this._shown=!0,this._updateWidgetVisibility(),this._clipper.emit("shown",{plane:this}),this._clipper.applyClippingPlanes(),this._clipper.requestRender())}hide(){this._shown&&(this._shown=!1,this.hideControl(),this._updateWidgetVisibility(),this._clipper.activeSectionPlane===this&&this._clipper.setActivePlane(null),this._clipper.emit("hidden",{plane:this}),this._clipper.applyClippingPlanes(),this._clipper.requestRender())}showControl(){this._controlShown||(this._controlShown=!0,this._updateWidgetVisibility(),this._clipper.emit("controls-shown",{plane:this}),this._clipper.requestRender())}hideControl(){this._controlShown&&(this._controlShown=!1,this._updateWidgetVisibility(),this._clipper.emit("controls-hidden",{plane:this}),this._clipper.requestRender())}setWidgetsVisible(e){let t=!!e;this._widgetsVisible!==t&&(this._widgetsVisible=t,this._updateWidgetVisibility(),this._clipper.requestRender())}destroy(){this.hideControl(),this._controls.removeEventListener("change",this._onChange),this._controls.removeEventListener("dragging-changed",this._onDraggingChanged),this._controls.detach(),this._clipper.world.camera.controls?.removeEventListener("update",this._onCameraUpdate),this._clipper.world.camera.projection.onChanged.remove(this._onCameraChange),this._anchor.removeFromParent(),this._controls.getHelper().removeFromParent(),this._controls.dispose(),this._clipper._unregisterPlaneMesh(this._mesh),this._mesh.geometry.dispose(),this._mesh.material.dispose(),this._wireframe.geometry.dispose(),this._wireframe.material.dispose(),this._clipper.onSectionPlaneDestroyed(this)}getWorldNormal(e=new ie){return e.set(0,0,1).applyQuaternion(this._anchor.quaternion).normalize()}setPositionAlongAxis(e,t,i){this._anchor.position.copy(e).addScaledVector(t,i),this._syncFromAnchor()}setWidgetPosition(e){if(!(e instanceof ie))throw TypeError("position must be a THREE.Vector3");this._anchor.position.copy(e),this._anchor.updateWorldMatrix(!0,!1),this._updateScale(),this._clipper.requestRender()}setFromPointNormalAndTangent(e,t,i){if(!(e instanceof ie)||!(t instanceof ie)||!(i instanceof ie))throw TypeError("point, normal and tangent must be THREE.Vector3 instances");let n=t.clone().normalize();if(n.lengthSq()<1e-10)return;let s=i.clone().sub(n.clone().multiplyScalar(i.dot(n)));if(s.lengthSq()<1e-10){let l=Math.abs(n.z)<.95?new ie(0,0,1):new ie(0,1,0);s=l.sub(n.clone().multiplyScalar(l.dot(n)))}s.normalize();let r=n.clone().cross(s).normalize();s=r.clone().cross(n).normalize();let o=new mn().makeBasis(s,r,n),a=new Cc().setFromRotationMatrix(o);this._anchor.position.copy(e),this._anchor.quaternion.copy(a),this._normal.copy(n),this._threePlane.setFromNormalAndCoplanarPoint(this._normal,this._anchor.position),this._anchor.updateWorldMatrix(!0,!1),this._updateScale(),this._clipper.requestRender()}_applyVisualState(){let e=this._mesh.material;if(!e)return;let t=this._clipper._planeMaterial.color.getHex(),i=this._clipper._planeMaterial.opacity,n=this._active&&this._hovered?"activeHovered":this._active?"active":this._hovered?"hovered":"idle",s=this._visualState?.[n]??null,r=this._visualState?.idle??null,o=s?.color??r?.color??t,a=s?.opacity??r?.opacity??i;if(!this._visualState){let l=this._clipper._planeMaterial.color.clone();this._active&&this._hovered?(l.offsetHSL(.025,.35,.28),a=i+.52):this._active?(l.offsetHSL(.015,.3,.18),a=i+.4):this._hovered&&(l.offsetHSL(0,.22,.12),a=i+.22),o=l.getHex()}e.color.setHex(o),e.opacity=Math.min(.92,a),this._wireframe&&this._wireframe.material.color.setHex(o)}_updateScale(){if(this._scaleMode==="fixed"){this._mesh.scale.set(this._fixedScale.x,this._fixedScale.y,1),this._wireframe.scale.set(this._fixedScale.x,this._fixedScale.y,1);return}let e=this._clipper.world.camera.three,t;if(e instanceof Cp)t=(e.top-e.bottom)/e.zoom;else if(e instanceof id){let n=new ie;e.getWorldPosition(n),t=this._anchor.position.distanceTo(n)*Math.min(1.9*Math.tan(Math.PI*e.fov/360)/e.zoom,7)}else return;let i=t*this._controls.size/4*(this._clipper._planeVisualSizeMultiplier??1.5);this._mesh.scale.set(i,i,i),this._wireframe.scale.set(i,i,i)}_createWireframeGeometry(e){let t=[-.5,-.5,0,.5,-.5,0,.5,-.5,0,.5,.5,0,.5,.5,0,-.5,.5,0,-.5,.5,0,-.5,-.5,0],i=e==="edges"?t:t.concat([-.5,-.5,0,0,0,0,.5,-.5,0,0,0,0,.5,.5,0,0,0,0,-.5,.5,0,0,0,0]),n=new $n;return n.setAttribute("position",new Es(new Float32Array(i),3)),n}_pruneOppositeControlDirection(){if(!this._controlAxisDirection)return;let e=this._controlAxisDirection.axis,t=e.toLowerCase(),i=this._controlAxisDirection.direction,n=this._controls.getHelper(),s=[],r=new ie;n.traverse(o=>{if(o.name!==e||!o.geometry||(o.geometry.computeBoundingBox?.(),!o.geometry.boundingBox))return;o.geometry.boundingBox.getCenter(r);let a=r[t];typeof a=="number"&&(i>0&&a<-1e-4||i<0&&a>1e-4)&&s.push(o)});for(let o of s)o.removeFromParent()}_syncFromAnchor(){this._anchor.updateWorldMatrix(!0,!1);let e=this.getWorldNormal();this._normal.copy(e),this._threePlane.setFromNormalAndCoplanarPoint(e,this._anchor.position),this._updateScale(),this._clipper.applyClippingPlanes(),this._clipper.requestRender()}_updateWidgetVisibility(){let e=this._shown&&this._widgetsVisible,t=this._controlShown&&this._widgetsVisible;this._mesh.visible=e,this._wireframe.visible=e,this._controls.enabled=t,this._controls.visible=t,this._controls.getHelper().visible=t}},D1t=class{constructor({components:e,OBF:t,world:i,requestRender:n,styleName:s,groupName:r,createFillsMaterial:o,createLinesMaterial:a}){this._components=e,this._OBF=t,this._world=i,this._requestRender=n,this._styleName=s,this._groupName=r,this._createFillsMaterial=o??(()=>new Io({color:16727326,transparent:!1,opacity:1,side:2,depthWrite:!1,polygonOffset:!0,polygonOffsetFactor:-2,polygonOffsetUnits:-2})),this._createLinesMaterial=a??(()=>new zg({color:"black",linewidth:2})),this._edgesById=new Map,this._updateQueue=Promise.resolve(),this._revision=0}_getClipStyler(){try{let e=this._components.get(this._OBF.ClipStyler);return e?(e.world=this._world,e):null}catch{return null}}_ensureClipStyle(){let e=this._getClipStyler();return e?(e.styles.get(this._styleName)||e.styles.set(this._styleName,{fillsMaterial:this._createFillsMaterial(),linesMaterial:this._createLinesMaterial()}),e):null}_clearEdges(e=this._getClipStyler()){if(!e){this._edgesById.clear();return}for(let t of this._edgesById.keys())e.list.delete(t);this._edgesById.clear()}clear(){this._revision+=1,this._clearEdges(),this._requestRender()}_enqueue(e){return this._updateQueue=this._updateQueue.then(e,e),this._updateQueue}enqueueUpdate({entries:e,enabled:t}){let i=++this._revision;return this._enqueue(async()=>{if(i!==this._revision)return;let n=this._ensureClipStyle();if(this._clearEdges(n),!t||!e?.length){if(i!==this._revision)return;this._requestRender();return}if(n){for(let{id:s,plane:r}of e){if(i!==this._revision)return;let o=n.create(r,{id:s,world:this._world,items:{[this._groupName]:{style:this._styleName}}});if(o.visible=!0,await o.update(),i!==this._revision){n.list.delete(s);return}this._edgesById.set(s,o)}i===this._revision&&this._requestRender()}})}setFillColor(e){let t=String(e??"").replace(/^#/,"").trim();if(!/^[0-9a-fA-F]{6}$/.test(t))return;let i=this._ensureClipStyle();if(!i)return;let n=i.styles.get(this._styleName);n?.fillsMaterial&&(n.fillsMaterial.color.set(`#${t}`),this._requestRender())}destroy(){let e=this._getClipStyler();e&&e.styles.delete(this._styleName),this.clear()}},T3n="section-plane-cap-style",w3n="section-plane-cap-group",C3n=()=>new Io({color:16727326,transparent:!1,opacity:1,side:2,depthWrite:!1,polygonOffset:!0,polygonOffsetFactor:-2,polygonOffsetUnits:-2}),S3n=()=>new zg({color:"black",linewidth:2}),x3n=class extends D1t{constructor({components:e,OBF:t,world:i,requestRender:n}){super({components:e,OBF:t,world:i,requestRender:n,styleName:T3n,groupName:w3n,createFillsMaterial:C3n,createLinesMaterial:S3n})}enqueueUpdate(e,t){let i=(e??[]).reduce((n,s)=>(!s?.id||!s?.three||n.push({id:`section-plane-cap-${s.id}`,plane:s.three}),n),[]);return super.enqueueUpdate({entries:i,enabled:t})}},D1e={color:4034751,opacity:.07},R3n={idle:{color:4034751,opacity:.07},hovered:{color:4034751,opacity:.24},active:{color:2648469,opacity:.26},activeHovered:{color:2054789,opacity:.32}},P1t=Symbol("section-plane-owner"),_3n=class extends b9e{constructor(e){let{world:t,components:i,OBC:n,OBF:s,fragments:r}=e,o=e.requestRender.bind(e);super({world:t,requestRender:o,respectSceneDepth:!0}),this.fragmentsInstance=e;let a=i.get(n.Raycasters);this._caster=a.get(t),this._enabled=!1,this._fragments=r,this._showIntersections=!0,this._widgetsVisible=!0,this._capsVisible=!1,this._widgetMoveModifier=d=>!!d?.ctrlKey,this._planes=[],this._activeSectionPlane=null,this._hoveredPlane=null,this._hoveredWidgetType=null,this._id=0,this._offPick=null,this._lastPick=null,this._coreUpdateRequested=!1,this._coreUpdateInFlight=!1,this._intersectionGroup=new $r,this._intersectionGroup.renderOrder=4,this._widgetOverlayScene.add(this._intersectionGroup),this._intersectionMaterial=new Sz({color:16773222,transparent:!0,opacity:.95,dashSize:.35,gapSize:.2,depthTest:!1,depthWrite:!1}),this._planeByMesh=new Map,this._surfaceDrag=null,this._eventAbortController=null,this._capsManager=s?.ClipStyler?new x3n({components:i,OBF:s,world:t,requestRender:o}):null,this._onPointerMove=d=>{if(this._surfaceDrag){if(d.pointerId!==this._surfaceDrag.pointerId)return;if(d.preventDefault(),this._surfaceDrag.mode==="widget"){let g=this._intersectPointerWithThreePlane(d,this._surfaceDrag.plane.three);if(!g)return;this._surfaceDrag.plane.setWidgetPosition(g.sub(this._surfaceDrag.pointerOffset));return}let f=this._computeLineParameterFromPointerEvent(d,this._surfaceDrag.startPosition,this._surfaceDrag.axis);if(typeof f!="number")return;let m=f-this._surfaceDrag.startParameter;this._surfaceDrag.plane.setPositionAlongAxis(this._surfaceDrag.startPosition,this._surfaceDrag.axis,m);return}let u=this._getWidgetHitFromPointerEvent(d),h=u?.plane??null,p=u?.type??null;h===this._hoveredPlane&&p===this._hoveredWidgetType||(this._hoveredPlane?.setHovered(!1),this._hoveredPlane=h,this._hoveredWidgetType=p,this._hoveredPlane?.setHovered(!0),this._applyCursor())},this._onPointerDown=d=>{if(d.button!==0)return;let u=this._getPlaneHitFromPointerEvent(d);if(!u)return;if(this.setActivePlane(u),this._widgetMoveModifier(d)){let g=this._intersectPointerWithThreePlane(d,u.three);if(!g)return;this._surfaceDrag={mode:"widget",pointerId:d.pointerId,plane:u,pointerOffset:g.sub(u.widgetPosition.clone())},this.world.camera.enabled=!1;let A=this.world.renderer?.three?.domElement;A?.setPointerCapture?.(d.pointerId),A&&(A.style.cursor="crosshair"),d.preventDefault(),d.stopPropagation();return}let h=u._anchor.position.clone(),p=u.getWorldNormal(),f=this._computeLineParameterFromPointerEvent(d,h,p);if(typeof f!="number")return;this._surfaceDrag={mode:"plane",pointerId:d.pointerId,plane:u,axis:p,startPosition:h,startParameter:f},this.world.camera.enabled=!1;let m=this.world.renderer?.three?.domElement;m?.setPointerCapture?.(d.pointerId),m&&(m.style.cursor="grabbing"),d.preventDefault(),d.stopPropagation(),d.stopImmediatePropagation?.()},this._onPointerUp=d=>{!this._surfaceDrag||d.pointerId!==this._surfaceDrag.pointerId||this._endSurfaceDrag(d.pointerId)},this._onPointerLeave=()=>{this._hoveredPlane?.setHovered(!1),this._hoveredPlane=null,this._hoveredWidgetType=null,this._applyCursor()},this._eventAbortController=new AbortController;let{signal:l}=this._eventAbortController,c=this.world.renderer?.three?.domElement;c?.addEventListener("pointerdown",this._onPointerDown,{signal:l}),c?.addEventListener("pointermove",this._onPointerMove,{signal:l}),c?.addEventListener("pointerleave",this._onPointerLeave,{signal:l}),window.addEventListener("pointerup",this._onPointerUp,{signal:l}),window.addEventListener("pointercancel",this._onPointerUp,{signal:l}),this._offPick=this.fragmentsInstance.onPick(async({event:d})=>{let u=this._getPlaneHitFromPointerEvent(d);if(u){this.emit("plane-clicked",{plane:u});return}else this._activeSectionPlane&&this.setActivePlane(null);if(!this._enabled)return;let h=await this._pickSurfaceFromEvent(d);h&&(this._lastPick=h,await this.addSectionPlane({showControl:!0}),this.disable())}),this._planeMaterial=new Io({color:D1e.color,side:2,transparent:!0,opacity:D1e.opacity,depthTest:!1,depthWrite:!1})}_requestCoreRaycastUpdate(){this._coreUpdateRequested=!0,!this._coreUpdateInFlight&&(this._coreUpdateInFlight=!0,Promise.resolve().then(async()=>{try{for(;this._coreUpdateRequested;)this._coreUpdateRequested=!1,await this._fragments.core.update(!0);this.requestRender()}catch(e){console.warn("[BIMDataViewer - 3D Fragments - section-planes] Failed to update raycast state after clipping change.",e)}finally{this._coreUpdateInFlight=!1}}))}get enabled(){return this._enabled}set enabled(e){e?this.enable():this.disable()}get sectionPlanes(){return this._planes}get widgetsVisible(){return this._widgetsVisible}set widgetsVisible(e){let t=!!e;if(this._widgetsVisible!==t){this._widgetsVisible=t;for(let i of this._planes)i.setWidgetsVisible(t);this._updateIntersectionLines(),this.requestRender()}}get widgetMoveModifier(){return this._widgetMoveModifier}set widgetMoveModifier(e){if(typeof e!="function")throw TypeError("widgetMoveModifier must be a function");this._widgetMoveModifier=e}get capsVisible(){return this._capsVisible}set capsVisible(e){let t=!!e;this._capsVisible!==t&&(this._capsVisible=t,this._updateCaps())}get showIntersections(){return this._showIntersections}set showIntersections(e){let t=!!e;this._showIntersections!==t&&(this._showIntersections=t,this._updateIntersectionLines(),this.requestRender())}get activeSectionPlane(){return this._activeSectionPlane}_getPlaneById(e){return e?this._planes.find(t=>t.id===e)??null:null}_registerPlaneMesh(e,t){this._planeByMesh.set(e,t)}_unregisterPlaneMesh(e){this._planeByMesh.delete(e)}setMaterial(e=null){if(!e){this._planeMaterial.color.setHex(D1e.color),this._planeMaterial.opacity=D1e.opacity;return}let{color:t,opacity:i}=e;typeof t=="number"&&this._planeMaterial.color.setHex(t),typeof i=="number"&&(this._planeMaterial.opacity=i);for(let n of this._planes)n._applyVisualState();this.requestRender()}enable(){this._enabled=!0}disable(){this._enabled=!1}async addSectionPlane(e={}){let t=e.point instanceof ie;if(t!==e.normal instanceof ie)throw TypeError("point and normal must be provided together");let i=t?{point:e.point.clone(),normal:e.normal.clone().normalize()}:this._lastPick;if(!i)return null;let n=new _1t({id:`section-plane-${++this._id}`,clipper:this,point:i.point,normal:i.normal,visualState:R3n});return n.three[P1t]=this,n.setWidgetsVisible(this._widgetsVisible),this._planes.push(n),this.applyClippingPlanes(),this.requestRender(),this._lastPick=null,this.emit("created",{plane:n}),this.setActivePlane(n),n}setActivePlane(e){let t=e&&this._planes.includes(e)?e:null;if(this._activeSectionPlane===t)return;let i=this._activeSectionPlane;i?.setActive(!1),this._activeSectionPlane=t,t?.setActive(!0),this.hideAllControls(),t?.shown&&t.showControl(),this.emit("active-changed",{plane:t,previousPlane:i}),this.requestRender()}removeSectionPlane(e){return!e||!this._planes.includes(e)?!1:(e.destroy(),!0)}onSectionPlaneDestroyed(e){this._activeSectionPlane===e&&this.setActivePlane(null),this._hoveredPlane===e&&(this._hoveredPlane=null);let t=this._planes.indexOf(e);t!==-1&&(this._planes.splice(t,1),this.emit("deleted",{plane:e}),this.applyClippingPlanes(),this.requestRender())}applyClippingPlanes(){let e=this.world.renderer?.three;if(!e)return;let t=this._planes.filter(n=>n.shown).map(n=>n.three),i=[...(Array.isArray(e.clippingPlanes)?e.clippingPlanes:[]).filter(n=>n?.[P1t]!==this),...t].filter((n,s,r)=>r.indexOf(n)===s);e.localClippingEnabled=i.length>0,e.clippingPlanes=i,this.world.renderer?.updateClippingPlanes(),this._requestCoreRaycastUpdate(),this._updateIntersectionLines(),this._updateCaps()}hideAllControls(){for(let e of this._planes)e.hideControl()}destroy(){this.disable();for(let t of[...this._planes])t.destroy();this._hoveredPlane=null,this._hoveredWidgetType=null,this._activeSectionPlane=null;let e=this.world.renderer?.three?.domElement;this._endSurfaceDrag(),this._eventAbortController?.abort(),this._eventAbortController=null,e&&(e.style.cursor=""),this._offPick?.(),this._offPick=null,this.destroyOverlayLayer(),this._clearIntersectionLines(),this._intersectionGroup.removeFromParent(),this._intersectionMaterial.dispose(),this._capsManager?.destroy(),this.clear(),this._planeMaterial.dispose()}_updateCaps(){this._capsManager?.enqueueUpdate(this._planes.filter(e=>e.shown),this._capsVisible)}setCapsColor(e){this._capsManager?.setFillColor(e)}async _pickSurfaceFromEvent(e){let t=this.world.renderer?.three?.domElement;if(!t)return null;let i=t.getBoundingClientRect(),n={x:(e.clientX-i.left)/i.width*2-1,y:-((e.clientY-i.top)/i.height)*2+1},s=await this._caster.castRay({position:n});if(!s?.point)return null;let r=null;if(s.normal)r=s.normal.clone();else if(s.face?.normal&&s.object){let o=new Ao().getNormalMatrix(s.object.matrixWorld);r=s.face.normal.clone().applyMatrix3(o)}return r?(r.normalize().negate(),{point:s.point.clone(),normal:r}):null}_getPlaneHitFromPointerEvent(e){let t=this._getWidgetHitFromPointerEvent(e);return!t||t.type!=="plane"?null:t.plane}_getWidgetHitFromPointerEvent(e){if(!this.world.renderer?.three?.domElement||this._widgetOverlayScene.children.length===0||!this._setPointerFromEvent(e))return null;let t=this._widgetRaycaster.intersectObject(this._widgetOverlayScene,!0),i=null;for(let n of t){let s=n.object;if(s.userData.isSectionPlaneIntersectionLine||!s.visible)continue;let r=Array.isArray(s.material)?s.material:[s.material],o=r.some(l=>l&&l.visible!==!1);if(r.length>0&&!o)continue;if(s.userData.isSectionPlaneControlHandle){let l=this._getPlaneById(s.userData.sectionPlaneId);if(l?.controlShown)return{type:"control",plane:l};continue}let a=this._planeByMesh.get(s);!i&&a?.shown&&(i={type:"plane",plane:a})}return i}_computeLineParameterFromPointerEvent(e,t,i){if(!this._setPointerFromEvent(e))return null;let n=this._widgetRaycaster.ray.origin,s=this._widgetRaycaster.ray.direction,r=i.clone().normalize(),o=n.clone().sub(t),a=s.dot(r),l=s.dot(o),c=r.dot(o),d=1-a*a;return Math.abs(d)<1e-5?null:(c-a*l)/d}_endSurfaceDrag(e=null){if(!this._surfaceDrag||e!==null&&e!==this._surfaceDrag.pointerId)return;let t=this._surfaceDrag.pointerId;this._surfaceDrag=null,this.world.camera.enabled=!0,this.world.renderer?.three?.domElement?.releasePointerCapture?.(t),this._applyCursor()}_applyCursor(){let e=this.world.renderer?.three?.domElement;if(e){if(this._surfaceDrag){e.style.cursor=this._surfaceDrag.mode==="widget"?"crosshair":"grabbing";return}if(this._hoveredWidgetType==="control"){e.style.cursor="move";return}if(this._hoveredWidgetType==="plane"){e.style.cursor="grab";return}e.style.cursor=""}}_clearIntersectionLines(){for(;this._intersectionGroup.children.length>0;){let e=this._intersectionGroup.children[0];e.removeFromParent(),e.geometry?.dispose?.()}}_updateIntersectionLines(){if(this._clearIntersectionLines(),!this._showIntersections||!this._widgetsVisible)return;let e=this._planes.filter(n=>n.shown);if(e.length<2)return;let t=e.reduce((n,s)=>Math.max(n,s?._mesh?.scale?.x??0),0),i=Math.max(8,t*2);for(let n=0;n<e.length-1;n++){let s=e[n].three,r=s.normal.clone(),o=s.constant;for(let a=n+1;a<e.length;a++){let l=e[a].three,c=l.normal.clone(),d=l.constant,u=new ie().crossVectors(r,c),h=u.lengthSq();if(h<1e-8)continue;u.normalize();let p=-o,f=-d,m=new ie().copy(c).multiplyScalar(p).addScaledVector(r,-f).cross(new ie().crossVectors(r,c)).divideScalar(h),g=m.clone().addScaledVector(u,-i),A=m.clone().addScaledVector(u,i),E=new _c(new $n().setFromPoints([g,A]),this._intersectionMaterial);E.computeLineDistances(),E.renderOrder=4,E.userData.isSectionPlaneIntersectionLine=!0,this._intersectionGroup.add(E)}}}},D3n={color:13386786,opacity:.3},P3n=["silver","grey","darkgray"],O3n=e=>`#${e.toString(16).padStart(6,"0")}`,N3n=e=>({idle:{color:e,opacity:.1},hovered:{color:e,opacity:.24},active:{color:e,opacity:.3},activeHovered:{color:e,opacity:.36}});function M3n(e){let t=new _3n(e),i=new AbortController,n=new Map,s=new Map,r=new Map,o=Aa(null),a=E=>{let b=r.get(E);if(b)return b;let T=O3n(CE({excludedHexColors:Array.from(r.values()).map(C=>Number.parseInt(C.slice(1),16)).filter(C=>Number.isFinite(C)),excludeTooBright:!0,excludeTooDark:!0,excludedNames:P3n}));return r.set(E,T),T},l=(E,b)=>{let T=Number.parseInt(b.slice(1),16);E.setVisualStateDefinition(N3n(T)),E.setControlColor?.(T)},c=E=>{let b=a(E);l(E,b);let T=yp({id:E.id,shown:E.shown,controlsShown:E.controlShown,active:E.active,color:b,get location(){return E.location},get position(){return E.position},get direction(){return E.direction},show:()=>{E.show()},hide:()=>{E.hide()},delete:()=>t.removeSectionPlane(E),showControl:()=>{t.hideAllControls(),E.showControl()},hideControl:()=>{E.hideControl()}});return n.set(E,T),s.set(T,E),T},d=E=>{if(E)return n.get(E)??c(E)},u=E=>{for(let[b,T]of n.entries())T.active=b===E;o.value=E?d(E)??null:null},h=E=>{if(E==null){t.setActivePlane(null);return}let b=s.get(E)??E;t.setActivePlane(b)},p=yp([]);for(let E of t.sectionPlanes)p.push(d(E));t.on("created",({plane:E})=>{let b=d(E);b&&(p.includes(b)||p.push(b))},{abortSignal:i.signal}),t.on("deleted",({plane:E})=>{let b=n.get(E);if(!b)return;r.delete(E),n.delete(E),s.delete(b);let T=p.indexOf(b);T!==-1&&p.splice(T,1),o.value===b&&(o.value=null)},{abortSignal:i.signal}),t.on("shown",({plane:E})=>{let b=d(E);b&&(b.shown=!0)},{abortSignal:i.signal}),t.on("hidden",({plane:E})=>{let b=d(E);b&&(b.shown=!1)},{abortSignal:i.signal}),t.on("controls-shown",({plane:E})=>{let b=d(E);b&&(b.controlsShown=!0)},{abortSignal:i.signal}),t.on("controls-hidden",({plane:E})=>{let b=d(E);b&&(b.controlsShown=!1)},{abortSignal:i.signal}),t.on("plane-clicked",({plane:E})=>{h(E)},{abortSignal:i.signal}),t.on("active-changed",({plane:E})=>{u(E??null)},{abortSignal:i.signal}),u(t.activeSectionPlane??null);let f=Un(()=>e.$viewer.localContext.loadedModels,()=>{t.sectionPlanes.slice().forEach(E=>{E.destroy()})}),m=()=>{t.enabled=!0,t.applyClippingPlanes(),e.highlightMaterial=D3n},g=()=>{t.enabled=!1,e.highlightMaterial=null},A={get enabled(){return t.enabled},enableSection:m,disableSection:g,addSectionPlane:E=>t.addSectionPlane(E),removeSectionPlane:E=>s.has(E)?t.removeSectionPlane(s.get(E)):t.removeSectionPlane(E),deleteSectionPlane(E){return A.removeSectionPlane(E)},sectionPlanes:p,get activeSectionPlane(){return o.value},set activeSectionPlane(E){h(E)},get showIntersections(){return t.showIntersections},set showIntersections(E){t.showIntersections=E},get widgetsVisible(){return t.widgetsVisible},set widgetsVisible(E){t.widgetsVisible=E},get capsVisible(){return t.capsVisible},set capsVisible(E){t.capsVisible=E},toggleSectionCaps(E){t.capsVisible=E},setSectionCapsColor(E){t.setCapsColor(E)},get widgetMoveModifier(){return t.widgetMoveModifier},set widgetMoveModifier(E){t.widgetMoveModifier=E}};return{destroy(){f(),i.abort(),g(),t.destroy()},extension:A}}var L3n=.02,B3n=.01,O1t=.1,F3n="section-box-cap",k3n={x1:new ie(-1,0,0),x2:new ie(1,0,0),y1:new ie(0,-1,0),y2:new ie(0,1,0),z1:new ie(0,0,-1),z2:new ie(0,0,1)},SQ=(e,t,i,n)=>{let s=t.clone().applyMatrix4(i),r=e.clone().applyMatrix3(n).normalize(),o=new Ys;return o.setFromNormalAndCoplanarPoint(r,s),o},U3n=(e,t=null)=>{let{min:i,max:n}=e;if(!t)return[new Ys(new ie(-1,0,0),n.x),new Ys(new ie(1,0,0),-i.x),new Ys(new ie(0,-1,0),n.y),new Ys(new ie(0,1,0),-i.y),new Ys(new ie(0,0,-1),n.z),new Ys(new ie(0,0,1),-i.z)];let s=new Ao().getNormalMatrix(t);return[SQ(new ie(-1,0,0),new ie(n.x,0,0),t,s),SQ(new ie(1,0,0),new ie(i.x,0,0),t,s),SQ(new ie(0,-1,0),new ie(0,n.y,0),t,s),SQ(new ie(0,1,0),new ie(0,i.y,0),t,s),SQ(new ie(0,0,-1),new ie(0,0,n.z),t,s),SQ(new ie(0,0,1),new ie(0,0,i.z),t,s)]},N1t=e=>{let t=new ie;e.getSize(t);let i=Math.max(t.x,t.y,t.z),n=Math.max(i*L3n,B3n);return e.clone().expandByScalar(n)},H3n=()=>new Io({color:16727326,transparent:!1,opacity:1,side:2,depthWrite:!1,polygonOffset:!0,polygonOffsetFactor:-2,polygonOffsetUnits:-2}),G3n=()=>new zg({color:"black",linewidth:2}),V3n=class extends D1t{constructor({components:e,OBF:t,world:i,requestRender:n}){super({components:e,OBF:t,world:i,requestRender:n,styleName:F3n,groupName:"all",createFillsMaterial:H3n,createLinesMaterial:G3n})}enqueueUpdate(e,t){let i=["x1","x2","y1","y2","z1","z2"],n=(e?.clippingPlanes??[]).reduce((s,r,o)=>(r&&s.push({id:`section-box-cap-${i[o]??o}`,plane:r}),s),[]);return super.enqueueUpdate({entries:n,enabled:t})}},j3n=class extends b9e{constructor({world:e,requestRender:t,axisNormals:i,getSectionBox:n,isEditEnabled:s,isWidgetVisible:r,isOverlayVisible:o,getPlaneSizeMultiplier:a,getPlaneVisualState:l,onBoundsChange:c}){super({world:e,requestRender:t,respectSceneDepth:!0}),this._axisNormals=i,this._getSectionBox=n,this._isEditEnabled=s,this._isWidgetVisible=r,this._isOverlayVisible=o,this._getPlaneSizeMultiplier=a,this._getPlaneVisualState=l,this._onBoundsChange=c,this._widgets=new Map,this._widgetByMesh=new Map,this._widgetById=new Map,this._hoveredWidget=null,this._hoveredWidgetType=null,this._isSyncingFromBounds=!1,this._surfaceDrag=null,this._eventAbortController=null,this._planeMaterial=new Io({color:4034751,side:2,transparent:!0,opacity:.07,depthTest:!1,depthWrite:!1}),this._clipperAdapter={world:e,requestRender:t,_planeMaterial:this._planeMaterial,_widgetOverlayScene:this._widgetOverlayScene,_registerPlaneMesh:()=>{},_unregisterPlaneMesh:()=>{},emit:()=>{},activeSectionPlane:null,setActivePlane:()=>{},applyClippingPlanes:()=>{this._onWidgetPlaneChanged()},onSectionPlaneDestroyed:()=>{}},this._eventAbortController=new AbortController;let{signal:d}=this._eventAbortController,u=this.world.renderer?.three?.domElement;u?.addEventListener("pointerdown",h=>this._onPointerDown(h),{signal:d}),u?.addEventListener("pointermove",h=>this._onPointerMove(h),{signal:d}),u?.addEventListener("pointerleave",()=>this._onPointerLeave(),{signal:d}),window.addEventListener("pointerup",h=>this._onPointerUp(h),{signal:d}),window.addEventListener("pointercancel",h=>this._onPointerUp(h),{signal:d})}_getFaceScale(e,t){let i=e.getSize(new ie),n=this._getPlaneSizeMultiplier();return t==="x1"||t==="x2"?new Cn(i.y*n,i.z*n):t==="y1"||t==="y2"?new Cn(i.x*n,i.z*n):new Cn(i.x*n,i.y*n)}_getFaceCenter(e,t){let i=e.getCenter(new ie);return t==="x1"?new ie(e.min.x,i.y,i.z):t==="x2"?new ie(e.max.x,i.y,i.z):t==="y1"?new ie(i.x,e.min.y,i.z):t==="y2"?new ie(i.x,e.max.y,i.z):t==="z1"?new ie(i.x,i.y,e.min.z):new ie(i.x,i.y,e.max.z)}_toWorldPoint(e,t){return t?t.localToWorldPoint(e):e}_toWorldNormal(e,t){return t?t.localToWorldDirection(e):e}_getFaceTangent(e,t){let i=null;return i=e==="x1"||e==="x2"?new ie(0,1,0):new ie(1,0,0),this._toWorldNormal(i,t).normalize()}_createWidget(e,t,i){let n=this._getFaceCenter(t,e),s=this._toWorldPoint(n,i),r=this._toWorldNormal(this._axisNormals[e].clone(),i),o=this._getFaceTangent(e,i),a=new _1t({id:`section-box-plane-${e}`,clipper:this._clipperAdapter,point:s,normal:r,scaleMode:"fixed",fixedScale:this._getFaceScale(t,e),controlSize:.7,activeEnabled:!1,visualState:this._getPlaneVisualState(),controlAxisDirection:{axis:"Z",direction:1},wireframeMode:"edges"});return a.setFromPointNormalAndTangent(s,r,o),a.show(),a.showControl(),this._widgets.set(e,a),this._widgetByMesh.set(a._mesh,a),this._widgetById.set(a.id,a),a}_updateWidget(e,t,i){let n=this._widgets.get(e)??this._createWidget(e,t,i),s=this._getFaceCenter(t,e),r=this._toWorldPoint(s,i),o=this._toWorldNormal(this._axisNormals[e].clone(),i),a=this._getFaceTangent(e,i);n.setFromPointNormalAndTangent(r,o,a);let l=this._getFaceScale(t,e);n.setFixedScale(l.x,l.y),n.setVisualStateDefinition(this._getPlaneVisualState())}_getWidgetHitFromPointerEvent(e){if(!this._isOverlayVisible()||!this._setPointerFromEvent(e))return null;let t=this._widgetRaycaster.intersectObject(this._widgetOverlayScene,!0),i=null;for(let n of t){let s=n.object;if(!s.visible)continue;let r=Array.isArray(s.material)?s.material:[s.material],o=r.some(l=>l&&l.visible!==!1);if(r.length>0&&!o)continue;if(s.userData.isSectionPlaneControlHandle){let l=this._widgetById.get(s.userData.sectionPlaneId);if(l?.controlShown)return{type:"control",plane:l};continue}let a=this._widgetByMesh.get(s);!i&&a?.shown&&(i={type:"plane",plane:a})}return i}_getPlaneHitFromPointerEvent(e){let t=this._getWidgetHitFromPointerEvent(e);return!t||t.type!=="plane"?null:t.plane}_computeLineParameterFromPointerEvent(e,t,i){if(!this._setPointerFromEvent(e))return null;let n=this._widgetRaycaster.ray.origin,s=this._widgetRaycaster.ray.direction,r=i.clone().normalize(),o=n.clone().sub(t),a=s.dot(r),l=s.dot(o),c=r.dot(o),d=1-a*a;return Math.abs(d)<1e-5?null:(c-a*l)/d}_applyCursor(){let e=this.world.renderer?.three?.domElement;if(e){if(!this._isOverlayVisible()){e.style.cursor="";return}if(this._surfaceDrag){e.style.cursor="grabbing";return}if(this._hoveredWidgetType==="control"){e.style.cursor="move";return}if(this._hoveredWidgetType==="plane"){e.style.cursor="grab";return}e.style.cursor=""}}_onPointerDown(e){if(e.button!==0||!this._isEditEnabled()||!this._isOverlayVisible())return;let t=this._getPlaneHitFromPointerEvent(e);if(!t)return;let i=t.widgetPosition.clone(),n=t.getWorldNormal(),s=this._computeLineParameterFromPointerEvent(e,i,n);typeof s=="number"&&(this._surfaceDrag={pointerId:e.pointerId,plane:t,axis:n,startPosition:i,startParameter:s},this.world.camera.enabled=!1,this.world.renderer?.three?.domElement?.setPointerCapture?.(e.pointerId),this._applyCursor(),e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation?.())}_onPointerMove(e){if(this._surfaceDrag){if(e.pointerId!==this._surfaceDrag.pointerId)return;e.preventDefault();let s=this._computeLineParameterFromPointerEvent(e,this._surfaceDrag.startPosition,this._surfaceDrag.axis);if(typeof s!="number")return;let r=s-this._surfaceDrag.startParameter;this._surfaceDrag.plane.setPositionAlongAxis(this._surfaceDrag.startPosition,this._surfaceDrag.axis,r);return}if(!this._isWidgetVisible()||!this._isOverlayVisible()){this._clearHoveredWidget(),this._hoveredWidgetType=null,this._applyCursor();return}let t=this._getWidgetHitFromPointerEvent(e),i=t?.plane??null,n=t?.type??null;i===this._hoveredWidget&&n===this._hoveredWidgetType||(this._hoveredWidget?.setHovered(!1),this._hoveredWidget=i,this._hoveredWidgetType=n,this._hoveredWidget?.setHovered(!0),this._applyCursor())}_onPointerUp(e){if(!this._surfaceDrag||e.pointerId!==this._surfaceDrag.pointerId)return;let t=this._surfaceDrag.pointerId;this._surfaceDrag=null,this.world.camera.enabled=!0,this.world.renderer?.three?.domElement?.releasePointerCapture?.(t),this._applyCursor()}_onPointerLeave(){this._clearHoveredWidget(),this._hoveredWidgetType=null,this._applyCursor()}_clearHoveredWidget(){this._hoveredWidget&&=(this._hoveredWidget.setHovered(!1),null)}_applyWidgetsVisibility(){let e=this._isWidgetVisible()&&this._isOverlayVisible(),t=this._isEditEnabled()&&e;for(let i of this._widgets.values())i.setWidgetsVisible(e),(!e||!t)&&i.setHovered(!1),e&&t?i.showControl():i.hideControl();this.requestRender()}_onWidgetPlaneChanged(){if(this._isSyncingFromBounds)return;let e=this._getSectionBox(),t=e?.bounds;if(!t)return;let i=t.clone(),n=(f,m)=>{let g=this._widgets.get(f)?.widgetPosition;return g?e?e.worldToLocalPoint(g):g:m},s=n("x1",new ie(t.min.x,0,0)).x,r=n("x2",new ie(t.max.x,0,0)).x,o=n("y1",new ie(0,t.min.y,0)).y,a=n("y2",new ie(0,t.max.y,0)).y,l=n("z1",new ie(0,0,t.min.z)).z,c=n("z2",new ie(0,0,t.max.z)).z,d=(f,m,g,A)=>{let E=f,b=m;return b>=E+.1||(Math.abs(f-g)>Math.abs(m-A)?E=b-O1t:b=E+O1t),{min:E,max:b}},u=d(s,r,t.min.x,t.max.x),h=d(o,a,t.min.y,t.max.y),p=d(l,c,t.min.z,t.max.z);i.min.x=u.min,i.max.x=u.max,i.min.y=h.min,i.max.y=h.max,i.min.z=p.min,i.max.z=p.max,this._onBoundsChange(i)}update(e){if(!e)return;let t=this._getSectionBox();if(t){this._clipperAdapter._planeVisualSizeMultiplier=this._getPlaneSizeMultiplier(),this._isSyncingFromBounds=!0;for(let i of Object.keys(this._axisNormals))this._updateWidget(i,e,t);this._isSyncingFromBounds=!1,this._applyWidgetsVisibility()}}clear(){this._clearHoveredWidget(),this._hoveredWidgetType=null;for(let e of this._widgets.values())e.destroy();this._widgets.clear(),this._widgetByMesh.clear(),this._widgetById.clear()}setHandleEditEnabled(){this._applyWidgetsVisibility()}setWidgetVisible(){this._applyWidgetsVisibility()}destroy(){let e=this.world.renderer?.three?.domElement;this._eventAbortController?.abort(),this._eventAbortController=null,e&&(e.style.cursor=""),this.clear(),this._planeMaterial.dispose(),this.destroyOverlayLayer()}},M1t=e=>e.normal.clone().multiplyScalar(-e.constant),z3n=e=>({get location(){return M1t(e)},get position(){return M1t(e)},get direction(){return e.normal}}),q3n=class{constructor({uuid:e,bounds:t,frame:i=null,boxVisible:n=!0,widgetVisible:s=!0,overlayVisible:r=!0,onVisibilityChange:o=null,onClear:a}){this.id=e,this.uuid=e,this.bounds=t,this.frame=i?.clone?.()??new mn,this.inverseFrame=this.frame.clone().invert(),this.clippingPlanes=[],this._boxVisible=si(n),this._widgetVisible=si(s),this._overlayVisible=si(r),this._onVisibilityChange=o,this._onClear=a,this._planes=[]}setFrame(e){this.frame.copy(e),this.inverseFrame.copy(e).invert()}localToWorldPoint(e){return e.clone().applyMatrix4(this.frame)}worldToLocalPoint(e){return e.clone().applyMatrix4(this.inverseFrame)}localToWorldDirection(e){let t=new Ao().getNormalMatrix(this.frame);return e.clone().applyMatrix3(t).normalize()}getWorldBounds(){let e=[new ie(this.bounds.min.x,this.bounds.min.y,this.bounds.min.z),new ie(this.bounds.min.x,this.bounds.min.y,this.bounds.max.z),new ie(this.bounds.min.x,this.bounds.max.y,this.bounds.min.z),new ie(this.bounds.min.x,this.bounds.max.y,this.bounds.max.z),new ie(this.bounds.max.x,this.bounds.min.y,this.bounds.min.z),new ie(this.bounds.max.x,this.bounds.min.y,this.bounds.max.z),new ie(this.bounds.max.x,this.bounds.max.y,this.bounds.min.z),new ie(this.bounds.max.x,this.bounds.max.y,this.bounds.max.z)];for(let t of e)t.applyMatrix4(this.frame);return new As().setFromPoints(e)}get shown(){return this._boxVisible.value}get widgetVisible(){return this._widgetVisible.value}get overlayVisible(){return this._overlayVisible.value}get planes(){return this._planes}show(){let e=!this._boxVisible.value||!this._widgetVisible.value||!this._overlayVisible.value;this._boxVisible.value=!0,this._widgetVisible.value=!0,this._overlayVisible.value=!0,e&&this._onVisibilityChange?.()}hide(){let e=this._boxVisible.value||this._widgetVisible.value||this._overlayVisible.value;this._boxVisible.value=!1,this._widgetVisible.value=!1,this._overlayVisible.value=!1,e&&this._onVisibilityChange?.()}setOverlayVisible(e){let t=!!e;this._overlayVisible.value!==t&&(this._overlayVisible.value=t,this._onVisibilityChange?.())}clear(){this._onClear()}setBounds(e){this.bounds.copy(e)}syncClippingPlanes(){let e=U3n(this.bounds,this.frame);if(this.clippingPlanes.length===0)return this.clippingPlanes=e,this._planes=e.map(t=>z3n(t)),this.clippingPlanes;for(let t=0;t<e.length;t++)this.clippingPlanes[t].normal.copy(e[t].normal),this.clippingPlanes[t].constant=e[t].constant;return this.clippingPlanes}},W3n={color:13386786,opacity:.3},Q3n=12e3,X3n=24,hL=new ie(0,1,0),w9e=new ie(1,0,0),C9e=new ie(0,0,1),K3n=(e,t,i)=>{let n=e.clone().normalize(),s=i.clone().normalize(),r=t.clone().normalize();if(n.lengthSq()<1e-10||r.lengthSq()<1e-10||s.lengthSq()<1e-10)return null;let o=s.clone().cross(n).normalize();return o.lengthSq()<1e-10?null:{x:o.clone().cross(s).normalize(),y:o,z:s.clone()}},P1e=(e,t)=>new mn().makeBasis(t.x,t.y,t.z).setPosition(e),Y3n=e=>{let t=e.clone();return t.y=0,t.lengthSq()<1e-10?null:t.normalize()},L1t=e=>{if(!e?.length)return null;let t=new ie;for(let i of e)t.add(i);return t.multiplyScalar(1/e.length),t},Z3n=e=>{let t=L1t(e);if(!t)return null;let i=0,n=0,s=0;for(let o of e){let a=o.x-t.x,l=o.z-t.z;i+=a*a,n+=a*l,s+=l*l}if(i+s<1e-10)return null;let r=.5*Math.atan2(2*n,i-s);return new ie(Math.cos(r),0,Math.sin(r)).normalize()},B1t=(e,t=null)=>{let i=L1t(e);if(!i)return null;let n=t?.clone?.().normalize?.()??Z3n(e);if(!n||n.lengthSq()<1e-10)return P1e(i,{x:w9e.clone(),y:hL.clone(),z:C9e.clone()});let s=hL.clone().cross(n).normalize();if(s.lengthSq()<1e-10)return P1e(i,{x:w9e.clone(),y:hL.clone(),z:C9e.clone()});let r=K3n(s,hL,n);return r?(r.y.copy(hL),r.x.copy(hL).cross(r.z).normalize(),r.z.copy(r.x).cross(hL).negate().normalize(),P1e(i,r)):P1e(i,{x:w9e.clone(),y:hL.clone(),z:C9e.clone()})},J3n=(e,t)=>{if(!e.length)return null;let i=t.clone().invert(),n=new As;for(let s of e){let r=s.clone().applyMatrix4(i);n.expandByPoint(r)}return n};function $3n(e){let{fragments:t,world:i,components:n,OBF:s,$viewer:r}=e,o=null,a=!1,l=!0,c=!1,d=!0,u=!0,h=1,p={idle:{color:4034751,opacity:.07},hovered:{color:4034751,opacity:.24}},f="shiftKey",m=()=>i.renderer?.three,g=Aa(null),A=()=>{g.value=o},E=new V3n({components:n,OBF:s,world:i,requestRender:e.requestRender.bind(e)}),b=()=>{o&&(d=o.widgetVisible,u=o.overlayVisible)},T=()=>{if(!o)return;let Oe=m();if(!Oe)return;o.syncClippingPlanes();let Ge=o.shown?o.clippingPlanes:[],We=Array.isArray(Oe.clippingPlanes)?Oe.clippingPlanes:[],Ze=o.clippingPlanes,Ft=[...We.filter(Pt=>!Ze.includes(Pt)),...Ge].filter((Pt,tt,kt)=>kt.indexOf(Pt)===tt);Oe.localClippingEnabled=Ft.length>0,Oe.clippingPlanes=Ft,i.renderer?.updateClippingPlanes()},C=new j3n({world:i,requestRender:e.requestRender.bind(e),axisNormals:k3n,getSectionBox:()=>o,isEditEnabled:()=>l,isWidgetVisible:()=>o?.widgetVisible??d,isOverlayVisible:()=>o?.overlayVisible??u,getPlaneSizeMultiplier:()=>h,getPlaneVisualState:()=>p,onBoundsChange:Oe=>{o&&(o.setBounds(Oe),T(),E.enqueueUpdate(o,c),C.update(o.bounds),e.requestRender())}}),S=()=>{if(o){if(o.shown){C.update(o.bounds),E.enqueueUpdate(o,c);return}E.clear(),C.setWidgetVisible()}},R=async()=>{b(),C.setWidgetVisible(),T(),S(),A(),await e.fragments.core.update(!0),e.requestRender()},x=async()=>{let Oe=o;o=null,A(),E.clear(),C.clear();let Ge=m();if(Ge){let We=Oe?.clippingPlanes??[],Ze=(Array.isArray(Ge.clippingPlanes)?Ge.clippingPlanes:[]).filter(Ft=>!We.includes(Ft));Ge.clippingPlanes=Ze,Ge.localClippingEnabled=Ze.length>0,i.renderer?.updateClippingPlanes()}await e.fragments.core.update(!0),e.requestRender()},_=(Oe,Ge="section-box",We=null)=>{if(!(Oe instanceof As))throw TypeError("[BIMDataViewer - 3D Fragments - section-box] createSectionBoxFromBounds(bounds) expects a THREE.Box3.");return Oe.isEmpty()?(x(),!1):(o&&x(),m()?(o=new q3n({uuid:Ge,bounds:Oe.clone(),frame:We,boxVisible:!0,widgetVisible:!0,overlayVisible:u,onVisibilityChange:R,onClear:x}),T(),S(),A(),!0):!1)},F=async(Oe,Ge)=>{let We=[],Ze;try{Ze=n.get(s.Mesher)}catch{return We}if(!Ze?.get)return We;let Ft;try{Ft=await Ze.get(Oe)}catch{return We}if(!Ft?.entries)return We;for(let[,Pt]of Ft.entries())if(Pt?.entries){for(let[,tt]of Pt.entries())if(Array.isArray(tt))for(let kt of tt){if(We.length>=Ge)return We;let Dt=kt?.geometry?.getAttribute?.("position");if(!Dt||!Dt.array||Dt.count<=0)continue;kt.updateMatrixWorld?.(!0);let At=kt.matrixWorld,ut=Math.max(1,Ge-We.length),bt=Math.min(256,Dt.count,ut),_t=Math.max(1,Math.floor(Dt.count/bt));for(let hi=0;hi<Dt.count&&We.length<Ge;hi+=_t){let It=new ie().fromBufferAttribute(Dt,hi);It.applyMatrix4(At),We.push(It)}}}return We},L=async(Oe,Ge=Q3n)=>{let We=[],Ze=await F(Oe,Ge);if(We.push(...Ze),We.length>=Math.min(X3n,Ge))return We;let Ft=Object.entries(Oe);if(Ft.length===0||Ge<=0)return We;for(let[Pt,tt]of Ft){let kt=t.list.get(Pt);if(!kt)continue;let Dt=tt instanceof Set?[...tt]:[...new Set(tt)];if(Dt.length)for(let At of Dt){if(We.length>=Ge)break;let ut;try{ut=await kt.getItemDrawChunks([At])}catch{continue}if(ut?.length)for(let bt of ut){if(We.length>=Ge)break;let _t=kt.tiles.get(bt.tileId),hi=_t?.geometry,It=hi?.getAttribute?.("position");if(!_t||!It)continue;let ne=hi.index?.array??null,dt=Math.min(bt.position?.length??0,bt.size?.length??0);for(let pt=0;pt<dt&&!(We.length>=Ge);pt+=1){let Ve=bt.position[pt]??0,Ie=bt.size[pt]??0,me=ne?ne.length:It.count,ct=Math.min(me-Ve,Ie===4294967295?me-Ve:Ie);if(!Number.isFinite(ct)||ct<=0)continue;let ot=Math.max(1,Ge-We.length),Fe=Math.max(1,Math.floor(ct/Math.min(64,ct,ot)));for(let yt=Ve;yt<Ve+ct&&We.length<Ge;yt+=Fe){let Wt=ne?ne[yt]:yt;if(Wt==null||Wt>=It.count||!It.array)continue;let Bt=new ie().fromBufferAttribute(It,Wt);Bt.applyMatrix4(_t.matrixWorld),We.push(Bt)}}}}}return We},N=(Oe,Ge)=>B1t(Ge,Y3n(Oe)),z=async(Oe,Ge=null)=>{let We=await L(Oe);if(We.length<3)return null;let Ze=null;if(Ge&&(Ze=N(Ge,We)),Ze||=B1t(We),!Ze)return null;let Ft=J3n(We,Ze);return!Ft||Ft.isEmpty()?null:{bounds:Ft,frame:Ze}},k=async(Oe,Ge={})=>{if(!Array.isArray(Oe))throw TypeError("[BIMDataViewer - 3D Fragments - section-box] createSectionBoxFromUuids(uuids) expects an array of uuids.");let We=Oe.filter(Dt=>typeof Dt=="string").map(Dt=>Dt.trim()).filter(Boolean);if(We.length===0)return x(),!1;let Ze=await t.guidsToModelIdMap(We);if(!Object.values(Ze).some(Dt=>Dt.size>0))return x(),!1;let Ft=await z(Ze,Ge.normal??null);if(Ft){let Dt=N1t(Ft.bounds);return _(Dt,We[0],Ft.frame)}let Pt=await t.getBBoxes(Ze);if(!Pt.length)return x(),!1;let tt=new As;if(Pt.forEach(Dt=>tt.union(Dt)),tt.isEmpty())return x(),!1;let kt=N1t(tt);return _(kt,We[0])},te=async(Oe,Ge={})=>{if(typeof Oe!="string"||Oe.trim()==="")throw TypeError("[BIMDataViewer - 3D Fragments - section-box] createSectionBoxOn(uuid) expects a non-empty string uuid.");return k([Oe],Ge)},fe=e.onPick(async({pickResult:Oe})=>{if(!a||!Oe)return;let{fragments:Ge,localId:We,normal:Ze}=Oe,Ft={[Ge.modelId]:new Set([We])},[Pt]=await t.modelIdMapToGuids(Ft);Pt&&await te(Pt,{normal:Ze?.clone?.()??null})&&(a=!1)}),ye=Un(()=>r.localContext.loadedModels,()=>{x()}),je={createSectionBoxOn:te,createSectionBoxOnSelection:k,createSectionBoxFromBounds:_,clearSectionBox:x,enableSectionBox(){a=!0,e.highlightMaterial=W3n},disableSectionBox(){a=!1,e.highlightMaterial=null},get sectionBoxEnabled(){return a},showSectionBoxWidget(){if(!o){d=!0,u=!0;return}o?.show()},hideSectionBoxWidget(){if(!o){d=!1,u=!1;return}o?.hide()},get sectionBoxWidgetVisible(){return o?.widgetVisible??d},set sectionBoxWidgetVisible(Oe){if(typeof Oe!="boolean")throw TypeError("[BIMDataViewer - 3D Fragments - section-box] sectionBoxWidgetVisible must be a boolean.");Oe?je.showSectionBoxWidget():je.hideSectionBoxWidget()},get sectionBoxOverlayVisible(){return o?.overlayVisible??u},set sectionBoxOverlayVisible(Oe){if(typeof Oe!="boolean")throw TypeError("[BIMDataViewer - 3D Fragments - section-box] sectionBoxOverlayVisible must be a boolean.");if(!o){u=Oe;return}o.setOverlayVisible(Oe)},get sectionBox(){return g.value},toggleSectionBoxEdition(Oe){if(Oe!==void 0&&typeof Oe!="boolean")throw TypeError("[BIMDataViewer - 3D Fragments - section-box] toggleSectionBoxEdition(value) expects a boolean when provided.");return l=Oe??!l,C.setHandleEditEnabled(),l},get sectionBoxEditEnabled(){return l},set sectionBoxEditEnabled(Oe){if(typeof Oe!="boolean")throw TypeError("[BIMDataViewer - 3D Fragments - section-box] sectionBoxEditEnabled must be a boolean.");je.toggleSectionBoxEdition(Oe)},toggleSectionBoxCaps(Oe){if(Oe!==void 0&&typeof Oe!="boolean")throw TypeError("[BIMDataViewer - 3D Fragments - section-box] toggleSectionBoxCaps(value) expects a boolean when provided.");return c=Oe??!c,o&&S(),c},setSectionBoxCapsColor(Oe){E.setFillColor(Oe)},get sectionBoxCapsEnabled(){return c},set sectionBoxCapsEnabled(Oe){if(typeof Oe!="boolean")throw TypeError("[BIMDataViewer - 3D Fragments - section-box] sectionBoxCapsEnabled must be a boolean.");c=Oe,o&&S()},get sectionBoxPlaneSizeMultiplier(){return h},set sectionBoxPlaneSizeMultiplier(Oe){if(typeof Oe!="number"||!Number.isFinite(Oe)||Oe<=0)throw TypeError("[BIMDataViewer - 3D Fragments - section-box] sectionBoxPlaneSizeMultiplier must be a positive number.");h=Oe,o&&C.update(o.bounds)},get sectionBoxPlaneVisualState(){return{idle:{...p.idle},hovered:{...p.hovered}}},set sectionBoxPlaneVisualState(Oe){let Ge=Oe?.idle,We=Oe?.hovered;if(!Ge||!We)throw TypeError("[BIMDataViewer - 3D Fragments - section-box] sectionBoxPlaneVisualState must define idle and hovered states.");let Ze=(Ft,Pt)=>{let tt=Ft?.color,kt=Ft?.opacity;if(typeof tt!="number"||!Number.isFinite(tt))throw TypeError(`[BIMDataViewer - 3D Fragments - section-box] ${Pt}.color must be a number.`);if(typeof kt!="number"||!Number.isFinite(kt))throw TypeError(`[BIMDataViewer - 3D Fragments - section-box] ${Pt}.opacity must be a number.`);return{color:tt,opacity:Math.max(0,Math.min(1,kt))}};p={idle:Ze(Ge,"idle"),hovered:Ze(We,"hovered")},o&&C.update(o.bounds)},get sectionBoxBounds(){return o?.getWorldBounds()??null},get sectionBoxPivotModifier(){return f},set sectionBoxPivotModifier(Oe){if(Oe!=="shiftKey"&&Oe!=="altKey"&&Oe!=="ctrlKey"&&Oe!=="metaKey")throw TypeError("[BIMDataViewer - 3D Fragments - section-box] sectionBoxPivotModifier must be one of: shiftKey, altKey, ctrlKey, metaKey.");f=Oe}};return{destroy(){ye(),fe?.(),C.destroy(),E.destroy(),x()},extension:je}}var O1e={COLOR:0,PEN:1,PEN_SHADOWS:2,COLOR_PEN:3,COLOR_SHADOWS:4,COLOR_PEN_SHADOWS:5};function ebn(e){let{world:t}=e,i=si(!1),n=si(!1),s=si(!1),r=!1,o=d=>{if(r||!d)return;let u;try{u=d.edgesPass}catch{return}!u.xray&&u._overrideMaterial&&(u._overrideMaterial.side=0),r=!0},a=()=>{if(!t.renderer)throw Error("Renderer is not initialized yet.");return t.renderer},l=()=>i.value&&n.value?O1e.COLOR_PEN_SHADOWS:i.value?O1e.COLOR_PEN:n.value?O1e.COLOR_SHADOWS:O1e.COLOR,c=()=>{let d=a().postproduction,u=l();if(!(i.value||n.value||s.value)){if(d.excludedObjectsEnabled=!1,!d.enabled){e.requestRender();return}d.style=u,e.requestRender();return}d.enabled=!0,o(d),d.smaaEnabled=s.value,d.excludedObjectsEnabled=n.value,d.edgesPass.color?.set&&d.edgesPass.color.set(0),d.edgesPass.width=1,d.edgesPass.depthBiasStrength=0,typeof d.aoPass.updateGtaoMaterial=="function"&&d.aoPass.updateGtaoMaterial(d.defaultAoParameters),d.style=u,e.requestRender()};return c(),{extension:{get postproductionEdgesEnabled(){return i.value},set postproductionEdgesEnabled(d){i.value=!!d,c()},get postproductionAmbientOcclusionEnabled(){return n.value},set postproductionAmbientOcclusionEnabled(d){n.value=!!d,c()},get postproductionSmaaEnabled(){return s.value},set postproductionSmaaEnabled(d){s.value=!!d,c()},get postproductionSettings(){return{edgesEnabled:i.value,ambientOcclusionEnabled:n.value,smaaEnabled:s.value}},setPostproductionSettings:(d={})=>{typeof d.edgesEnabled=="boolean"&&(i.value=d.edgesEnabled),typeof d.ambientOcclusionEnabled=="boolean"&&(n.value=d.ambientOcclusionEnabled),typeof d.smaaEnabled=="boolean"&&(s.value=d.smaaEnabled),c()}}}}var uh=1e-4,F1t=1e-4,tbn=({x:e,y:t,z:i})=>({x:-e,y:-t,z:-i}),ibn=e=>{if(!Array.isArray(e)||e.length!==6)return null;let t={minX:null,maxX:null,minY:null,maxY:null,minZ:null,maxZ:null},i=c=>{let d=new ie(c.x,c.y,c.z).normalize();return Math.abs(d.x-1)<=uh&&Math.abs(d.y)<=uh&&Math.abs(d.z)<=uh?"minX":Math.abs(d.x+1)<=uh&&Math.abs(d.y)<=uh&&Math.abs(d.z)<=uh?"maxX":Math.abs(d.y-1)<=uh&&Math.abs(d.x)<=uh&&Math.abs(d.z)<=uh?"minY":Math.abs(d.y+1)<=uh&&Math.abs(d.x)<=uh&&Math.abs(d.z)<=uh?"maxY":Math.abs(d.z-1)<=uh&&Math.abs(d.x)<=uh&&Math.abs(d.y)<=uh?"minZ":Math.abs(d.z+1)<=uh&&Math.abs(d.x)<=uh&&Math.abs(d.y)<=uh?"maxZ":null};for(let c of e){let d=i(c.direction);if(!d||t[d]!==null)return null;d==="minX"||d==="maxX"?t[d]=c.location.x:d==="minY"||d==="maxY"?t[d]=c.location.y:t[d]=c.location.z}let{minX:n,maxX:s,minY:r,maxY:o,minZ:a,maxZ:l}=t;return[n,s,r,o,a,l].some(c=>c===null)||n>=s-uh||r>=o-uh||a>=l-uh?null:new As(new ie(n,r,a),new ie(s,o,l))},nbn=e=>{if(!Array.isArray(e)||e.length!==6)return null;let t=e.map(({location:L,direction:N})=>{let z=new ie(N.x,N.y,N.z).normalize(),k=new ie(L.x,L.y,L.z);return new Ys().setFromNormalAndCoplanarPoint(z,k)}),i=[,,,,,,].fill(!1),n=[];for(let L=0;L<6;L++){if(i[L])continue;let N=!1;for(let z=L+1;z<6;z++)if(!i[z]&&t[L].normal.dot(t[z].normal)<-.9999){n.push([t[L],t[z]]),i[L]=!0,i[z]=!0,N=!0;break}if(!N)return null}if(n.length!==3)return null;let s=n.map(([L])=>L.normal.clone());for(let L=0;L<3;L++)for(let N=L+1;N<3;N++)if(Math.abs(s[L].dot(s[N]))>F1t*10)return null;let r=[[0,1,2],[0,2,1],[1,0,2],[1,2,0],[2,0,1],[2,1,0]],o=null;for(let[L,N,z]of r)if(s[L].clone().cross(s[N]).dot(s[z])>1-F1t*10){o=[L,N,z];break}if(!o)return null;let[a,l,c]=o,d=s[a].clone(),u=s[l].clone(),h=s[c].clone(),[p,f]=n[a],[m,g]=n[l],[A,E]=n[c],b=(-p.constant+f.constant)/2,T=(-m.constant+g.constant)/2,C=(-A.constant+E.constant)/2,S=new ie().addScaledVector(d,b).addScaledVector(u,T).addScaledVector(h,C),R=new mn().makeBasis(d,u,h).setPosition(S),x=(p.constant+f.constant)/2,_=(m.constant+g.constant)/2,F=(A.constant+E.constant)/2;return x<uh||_<uh||F<uh?null:{bounds:new As(new ie(-Math.abs(x),-Math.abs(_),-Math.abs(F)),new ie(Math.abs(x),Math.abs(_),Math.abs(F))),frame:R}},sbn=e=>{e.clearSectionBox?.(),e.sectionPlanes.slice().forEach(t=>{e.deleteSectionPlane?.(t)})},rbn=async({fragments:e,clippingPlanes:t,toYup:i})=>{if(!Array.isArray(t)||t.length===0)return;e.widgetsVisible=!1,e.sectionBoxOverlayVisible=!1;let n=t.map(o=>({location:i(o.location),direction:tbn(i(o.direction))})),s=ibn(n);if(s){e.createSectionBoxFromBounds?.(s,"viewpoint-section-box"),e.sectionBoxOverlayVisible=!1;return}let r=nbn(n);if(r){e.createSectionBoxFromBounds?.(r.bounds,"viewpoint-section-box",r.frame),e.sectionBoxOverlayVisible=!1;return}for(let o of n)await e.addSectionPlane({point:new ie(o.location.x,o.location.y,o.location.z),normal:new ie(o.direction.x,o.direction.y,o.direction.z)});e.widgetsVisible=!1};function obn(e){let{components:t,world:i,OBC:n,$viewer:s}=e,r=t.get(n.Viewpoints);r.world=i;let o=A=>{let E="",b=32768;for(let T=0;T<A.length;T+=b)E+=String.fromCharCode(...A.subarray(T,T+b));return btoa(E)},a=({x:A,y:E,z:b})=>({x:A,y:-b,z:E}),l=({x:A,y:E,z:b})=>({x:A,y:b,z:-E}),c=({x:A,y:E,z:b})=>({x:-A,y:-E,z:-b}),d=()=>s.localContext.pluginComponentInstances.get("viewer3d-fragments-parameters"),u=()=>{let A=d();return A&&typeof A.ifcSpaces=="boolean"?A.ifcSpaces:!0},h=async()=>{let A={},E=p();for(let[b,T]of e.fragments.list.entries()){let C=Number(b);if(!E.has(C)&&!E.has(b))continue;let{IFCSPACE:S}=await T.getItemsOfCategories([/IFCSPACE/]);S?.length&&(A[b]=S)}return A},p=()=>new Set(s.localContext.loadedModelIds),f=()=>{let A=p();return s.state.objects.filter(E=>A.has(E.model?.id))},m=A=>Array.from(new Set(A.map(E=>E.uuid).filter(Boolean))),g=A=>{let E=A.filter(C=>!!C.uuid),b=new Set(m(E.filter(C=>C.visible))),T=m(E.filter(C=>!C.visible));return b.size<T.length?{default_visibility:!1,exceptions:Array.from(b).map(C=>({ifc_guid:C,authoring_tool_id:null}))}:{default_visibility:!0,exceptions:T.map(C=>({ifc_guid:C,authoring_tool_id:null}))}};return{extension:{getViewpoint:async()=>{let A=r.create();A.title="My Viewpoint",await A.updateCamera();let E=A.toJSON(),b=f(),T=m(b.filter(F=>F.selected)),C=g(b),S=E.components?.visibility?.view_setup_hints;if(E.components={...E.components??{},selection:T.map(F=>({ifc_guid:F,authoring_tool_id:null})),visibility:{...C,view_setup_hints:{...S??{},spaces_visible:u()}}},E.perspective_camera&&(E.perspective_camera.camera_view_point=a(E.perspective_camera.camera_view_point),E.perspective_camera.camera_direction=a(E.perspective_camera.camera_direction),E.perspective_camera.camera_up_vector=a(E.perspective_camera.camera_up_vector)),E.orthogonal_camera){E.orthogonal_camera.camera_view_point=a(E.orthogonal_camera.camera_view_point),E.orthogonal_camera.camera_direction=a(E.orthogonal_camera.camera_direction),E.orthogonal_camera.camera_up_vector=a(E.orthogonal_camera.camera_up_vector);let F=i.camera.threeOrtho;F.zoom&&F.zoom!==1&&(E.orthogonal_camera.view_to_world_scale=(F.top-F.bottom)/F.zoom)}let R=e,x=R.sectionPlanes.some(F=>F.shown),_=!!R.sectionBox?.shown;if(x||_){let F=[];if(_){let L=R.sectionBox;F.push(...L.planes)}else F.push(...R.sectionPlanes.filter(L=>L.shown));E.clipping_planes=F.map(L=>({location:a(L.location),direction:c(a(L.direction))}))}return E.originating_system="ifc3d",E.models=Array.from(p()),E},setViewpoint:async A=>{A=JSON.parse(JSON.stringify(A)),A.perspective_camera&&(A.perspective_camera.camera_view_point=l(A.perspective_camera.camera_view_point),A.perspective_camera.camera_direction=l(A.perspective_camera.camera_direction),A.perspective_camera.camera_up_vector=l(A.perspective_camera.camera_up_vector)),A.orthogonal_camera&&(A.orthogonal_camera.camera_view_point=l(A.orthogonal_camera.camera_view_point),A.orthogonal_camera.camera_direction=l(A.orthogonal_camera.camera_direction),A.orthogonal_camera.camera_up_vector=l(A.orthogonal_camera.camera_up_vector));let E=e;sbn(E),await rbn({fragments:E,clippingPlanes:A.clipping_planes,toYup:l});let b=r.create(A);if(await i.camera.controls.setFocalOffset(0,0,0),await b.go({transition:!1}),A.orthogonal_camera?.view_to_world_scale!=null){let T=i.camera.threeOrtho,C=A.orthogonal_camera.view_to_world_scale,S=T.top-T.bottom;if(C>0&&S>0){let R=S/C;Number.isFinite(R)&&R>0&&await i.camera.controls.zoomTo(R,!1)}}try{let T=await i.camera.getItemsBounding();i.camera.controls.setOrbitPoint(T.center.x,T.center.y,T.center.z)}catch{i.camera.controls.setOrbitPoint(0,0,0)}if(jYe(s,A),A.components?.visibility?.view_setup_hints?.spaces_visible===!1){let T=await h();Object.keys(T).length>0&&await e.hide(T)}},getSnapshot:async()=>{let A=r.create();await A.takeSnapshot();let E=r.snapshots.get(A.snapshot);return{snapshot_type:"png",snapshot_data:`data:image/png;base64,${o(E)}`}}},destroy(){}}}function abn(e){let{components:t,world:i,$viewer:n,OBC:s}=e,r=t.get(s.Raycasters).get(i),o=i.renderer.three.domElement,a=null,l=async h=>{h.preventDefault(),h.stopPropagation();let p=await r.castRay();if(!p)return;let f=p.point.x,m=p.point.z,g=p.point.y,A=await p.fragments.getGuidsByLocalIds([p.localId]),E=n.state.getObjectsByUuids(A)[0],b=n.localContext.loadedModels;a({x:f,y:m,z:g,object:E,models:b})},c=si(!1),d=h=>{if(!h||typeof h!="function")throw TypeError("[BIMDataViewer - Viewer3DFragments - Annotation] A callback function must be provided to start annotation mode.");u(),c.value=!0,a=h,e.selectOnClick=!1,o.addEventListener("pointerdown",l),o.style.cursor="add"},u=()=>{c.value=!1,a=null,e.selectOnClick=!0,o.removeEventListener("pointerdown",l),o.style.cursor="default"};return{extension:{get annotationMode(){return c.value},startAnnotationMode:d,stopAnnotationMode:u},destroy(){u()}}}var lbn=["POINT","LINE","FACE"],S9e={POINT:0,LINE:1,FACE:2},cbn={0:"POINT",1:"LINE",2:"FACE"},k1t={POINT:"vertex",LINE:"edge",FACE:"surface",NONE:"noSurface"},hse=e=>`#${e.getHexString()}`,GT=e=>new zn(e),Gx=(e,t,i=new ie)=>i.copy(e).sub(t),N1e=(e,t=null)=>{let i=new ie;if(e?.face?.normal&&e?.object){i.copy(e.face.normal);let n=e.object.matrixWorld;if(e.instanceId!=null&&e.object.isInstancedMesh){let r=new mn;e.object.getMatrixAt(e.instanceId,r),n=new mn().multiplyMatrices(e.object.matrixWorld,r)}let s=new Ao().getNormalMatrix(n);return i.applyMatrix3(s).normalize(),i}return e?.normal?.isVector3&&e.normal.lengthSq()>1e-12?(i.copy(e.normal).normalize(),i):t?(t.getWorldDirection(i).negate().normalize(),i):new ie(0,1,0)},x9e=(e,t,i)=>{let n=e.clone().project(t),s=i.getBoundingClientRect();return{x:(n.x+1)*.5*s.width,y:(1-(n.y+1)*.5)*s.height}},M1e=(e,t)=>{let i=t.getBoundingClientRect();return{x:(e.clientX-i.left)/i.width*2-1,y:-((e.clientY-i.top)/i.height)*2+1}},pL=(...e)=>Array.from(new Set(e.filter(Boolean).map(String))),L1e=(e,t,i=1e6)=>{let n=[],s=new Map,r=d=>Math.round(d*i),o=d=>`${r(d.x)}:${r(d.y)}:${r(d.z)}`,a=new Map;e.forEach((d,u)=>{let h=o(d);if(!s.has(h)){let p=n.length;s.set(h,p),n.push(d.clone())}a.set(u,s.get(h))});let l=t.map(d=>a.get(d)).filter(d=>Number.isInteger(d)),c=Math.floor(l.length/3);return{vertices:n,indices:l.slice(0,c*3)}},B1e=(e,t)=>{let i=new Map,n=(s,r)=>{if(s===r)return;let o=`${Math.min(s,r)}:${Math.max(s,r)}`,a=i.get(o);if(!a){i.set(o,{a:s,b:r,count:1});return}a.count+=1};for(let s=0;s+2<t.length;s+=3){let r=t[s],o=t[s+1],a=t[s+2];n(r,o),n(o,a),n(a,r)}return Array.from(i.values()).filter(s=>s.count===1).map(s=>[e[s.a],e[s.b]])},U1t=(e,t,{eps:i=1e-6,orthogonalityDeg:n=60}={})=>{if(!Array.isArray(t)||t.length<2)return null;let s=[];for(let[c,d]of t){if(!c||!d)continue;let u=d.clone().sub(c),h=u.clone().sub(e.clone().multiplyScalar(u.dot(e))),p=h.length();p<=i||s.push({dir:h.multiplyScalar(1/p),length:p})}if(s.length<2)return null;let r=null,o=-1/0;for(let c of s){let d=0;for(let u of s)d+=u.length*Math.abs(c.dir.dot(u.dir));d>o&&(o=d,r=c.dir)}if(!r)return null;let a=Math.cos(oa.degToRad(n)),l=0;for(let c of s)Math.abs(r.dot(c.dir))<=a&&(l+=c.length);return l<=i?null:r.clone().normalize()},dbn=class{constructor({components:e,world:t,OBC:i,requestRender:n}){let s=e.get(i.Raycasters);this.caster=s.get(t),this.world=t,this.requestRender=n}async pickFromEvent(e){let t=M1e(e,this.world.renderer.three.domElement);return this.pickAtPosition(t)}async pickAtPosition(e){let t=lbn.map(o=>S9e[o]).filter(o=>Number.isInteger(o)),i=await this.caster.castRay({position:e,snappingClasses:t});if(!i)return null;let n=cbn[i.snappingClass]??this.#e(i)??"NONE",s=this.world.camera.three,r=this.world.renderer.three.domElement;return{hit:i,snapName:n,point:i.point.clone(),normal:N1e(i,s),screen:x9e(i.point,s,r),modelId:i.fragments?.modelId??null}}#e(e){return e?.snappedEdgeP1&&e?.snappedEdgeP2?"LINE":Array.isArray(e?.facePoints)&&e.facePoints.length>=9?"FACE":null}requestFrame(){this.requestRender()}},H1t={pointer:jde,vertex:QYe,edge:WYe,surface:XYe,noSurface:g5e},ubn=class{constructor(e){this.domElement=e,this.cursorMode="overlay",this.cursorStyle=`url("${jde}") 16 16, auto`;let t=document.createElement("img");t.style.width="28px",t.style.height="28px",t.style.position="absolute",t.style.pointerEvents="none",t.style.transform="translate(-50%, -50%)",t.style.display="none",e.parentNode.insertBefore(t,e),this.img=t,this.visible=!1}show(){this.img.style.display=this.cursorMode==="crosshair"?"none":"block",this.domElement.style.cursor=this.cursorStyle,this.visible=!0}hide(){this.img.style.display="none",this.domElement.style.cursor="default",this.visible=!1}useCrosshairCursor(){this.cursorMode="crosshair",this.cursorStyle="crosshair",this.visible&&(this.img.style.display="none",this.domElement.style.cursor=this.cursorStyle)}useOverlayCursor(){this.cursorMode="overlay",this.cursorStyle=`url("${jde}") 16 16, auto`,this.visible&&(this.img.style.display="block",this.domElement.style.cursor=this.cursorStyle)}update(e){if(!this.visible)return;if(this.cursorMode==="crosshair"){this.img.style.display="none";return}if(!e){this.img.style.left="-9999px",this.img.style.top="-9999px",this.img.src=g5e;return}let t=H1t[H1t[k1t[e.snapName]]?k1t[e.snapName]:"noSurface"];this.img.src=t,this.img.style.left=`${e.screen.x}px`,this.img.style.top=`${e.screen.y}px`}destroy(){this.hide(),this.img.remove()}},G1t=1e-8,V1t=new ie(1,0,0),R9e=new ie(0,1,0),hbn=new ie(0,0,1),pse=e=>e?.isVector3&&Number.isFinite(e.x)&&Number.isFinite(e.y)&&Number.isFinite(e.z),fse=(e,t)=>!pse(e)||e.lengthSq()<=G1t?t.clone():e.clone().normalize(),pbn=(e,t)=>{let i=new ie().crossVectors(t,e);if(!pse(i)||i.lengthSq()<=G1t){let n=Math.abs(R9e.dot(e))>.98?V1t:R9e;i=new ie().crossVectors(n,e)}return fse(i,hbn)},mse=({tip:e,inwardDirection:t,planeNormal:i,arrowLength:n,minArrowLength:s=.01,diagonalBlend:r=.85})=>{if(!pse(e))return[];let o=fse(t,V1t),a=pbn(o,fse(i,R9e)),l=Math.max(Number.isFinite(n)?n:0,s),c=e.clone().add(a.clone().multiplyScalar(l)),d=e.clone().add(a.clone().multiplyScalar(-l)),u=fse(o.clone().add(a.clone().multiplyScalar(r)),o),h=fse(o.clone().add(a.clone().multiplyScalar(-r)),o),p=e.clone().add(u.multiplyScalar(l*Math.SQRT2)),f=e.clone().add(h.multiplyScalar(l*Math.SQRT2)),m=[e.clone(),c,e.clone(),d,e.clone(),p,e.clone(),f];return m.every(pse)?m:[]},j1t=e=>!Array.isArray(e)||e.length===0||e.length%2!=0?!1:e.every(pse),fbn=(e,t={})=>{let i=document.createElement("canvas"),n=i.getContext("2d"),{strokeColor:s=null,strokeWidth:r=0}=t;n.font="700 120px Arial";let o=n.measureText(e),a=Math.max(256,Math.ceil(o.width+32));i.width=a,i.height=256,n.font="700 120px Arial",n.textAlign="center",n.textBaseline="middle",n.clearRect(0,0,a,256),s&&r>0&&(n.lineJoin="round",n.strokeStyle=s,n.lineWidth=r,n.strokeText(e,a/2,256/2)),n.fillStyle="rgba(255, 255, 255, 1)",n.fillText(e,a/2,256/2);let l=new jki(i);return l.colorSpace=cv,l.needsUpdate=!0,l.minFilter=_l,l.magFilter=_l,{texture:l,aspect:a/256}},vse=({content:e,size:t,color:i,strokeColor:n,strokeWidth:s})=>{let r=new $r,{texture:o,aspect:a}=fbn(e,{strokeColor:n,strokeWidth:s}),l=new Vy(Math.max(t*2.2,t*1.2*a),t*1.2),c=Math.max(t*.015,.001),d=()=>new Io({map:o,color:i,side:0,transparent:!0,depthTest:!0,depthWrite:!1,alphaTest:.15}),u=new pn(l,d());u.position.z=c;let h=new pn(l.clone(),d());return h.rotateY(Math.PI),h.position.z=-c,r.add(u,h),r.renderOrder=15,r},Ase=({group:e,direction:t,up:i,normal:n,position:s})=>{let r=new mn().makeBasis(t.clone().normalize(),i.clone().normalize(),n.clone().normalize());e.quaternion.setFromRotationMatrix(r),e.position.copy(s)},_9e=new ie(0,1,0),mbn=new ie(0,0,0),vbn=class{constructor(e,t,i,n=[]){this.plugin=e,this.group=new $r,this.material=new zg({color:GT(e.defaultColor),linewidth:e.lineWidth,depthTest:!0,depthWrite:!1,transparent:!1}),this.#e(),this.geometry=new KN,this.line=new RU(this.geometry,this.material),this.line.visible=!1,this.line.renderOrder=10,this.group.add(this.line),this._p1=t.clone(),this._p2=t.clone(),this._startNormal=i.clone().normalize(),this._currentNormal=i.clone().normalize(),this._length=0,this._visible=!0,this._text=null,this.modelIds=pL(...n),this.group.position.copy(this._p1),(this.plugin.overlayScene||this.plugin.world.scene.three).add(this.group)}move(e,t){this._p2.copy(e),this._currentNormal.copy(t).normalize();let i=this._p1,n=mbn,s=Gx(this._p2,i);this.group.position.copy(i);let r=new ie().subVectors(this._p2,this._p1),o=r.length();if(this._length=o,o<=1e-6){this.line.visible=!1,this.#i();return}this.#e();let a=r.clone().normalize(),l=a.clone().negate(),c=Math.abs(a.dot(_9e))>.9,d=Math.max(o*(c?.08:.05),.03),u=this._startNormal.clone().normalize(),h=new ie().crossVectors(u,a).normalize();if(h.lengthSq()<=1e-8){let x=new ie;this.plugin.world.camera.three.getWorldDirection(x),h=new ie().crossVectors(a,x).normalize()}let p=_9e.clone().sub(a.clone().multiplyScalar(_9e.dot(a)));p.lengthSq()>1e-8&&h.dot(p)<0&&h.negate();let f=o*this.plugin.arrowSizeRatio,m=u.clone().multiplyScalar(this.plugin.surfaceOffset),g=mse({tip:n,inwardDirection:a,planeNormal:u,arrowLength:f}).map(x=>x.clone().add(m)),A=mse({tip:s,inwardDirection:l,planeNormal:u,arrowLength:f}).map(x=>x.clone().add(m)),E=[n.clone().add(m),s.clone().add(m),...g,...A];if(!j1t(E)){this.line.visible=!1,this.#i();return}let b=[];E.forEach(x=>{b.push(x.x,x.y,x.z)}),this.geometry.setPositions(b),this.line.visible=!0;let T=s.clone().multiplyScalar(.5).add(m),C=h.clone().sub(a.clone().multiplyScalar(h.dot(a)));C.lengthSq()<=1e-8&&(C=h.clone()),C.normalize();let S=new ie().crossVectors(a,C).normalize();S.dot(u)<0&&(S.negate(),C=new ie().crossVectors(S,a).normalize());let R=T.clone().add(C.clone().multiplyScalar(d));this.#t(`${o.toFixed(2)} m`,o,a,C,S,R)}#e(){let e=this.plugin.world.renderer.three.domElement;this.material.resolution.set(e.clientWidth,e.clientHeight)}#t(e,t,i,n,s,r){this.#i();let o=Math.max(.04,t*this.plugin.textSizeRatio);this._text=vse({content:e,size:o,color:this.material.color}),Ase({group:this._text,direction:i,up:n,normal:s,position:r}),this.group.add(this._text)}#i(){this._text&&=(this.group.remove(this._text),this._text.traverse(e=>{e.geometry&&e.geometry.dispose(),e.material&&(Array.isArray(e.material)?e.material:[e.material]).forEach(t=>t.dispose())}),null)}destroy(){this.#i(),this.geometry.dispose(),this.material.dispose(),this.group.removeFromParent(),this.plugin.measurements=this.plugin.measurements.filter(e=>e!==this),this.plugin.fragmentsInstance.requestRender()}get length(){return this.visible?this._length:0}get visible(){return this._visible}set visible(e){this._visible=!!e,this.group.visible=this._visible}get color(){return hse(this.material.color)}set color(e=this.plugin.defaultColor){let t=GT(e);this.material.color.copy(t),this._text&&this._text.traverse(i=>{i.material&&(Array.isArray(i.material)?i.material:[i.material]).forEach(n=>n.color?.copy(t))})}},Abn=class{constructor(e,t,i,n={}){this.fragmentsInstance=e,this.world=e.world,this.overlayScene=e.overlayScene,this.snapPicker=t,this.cursorOverlay=i,this.arrowSizeRatio=n.arrowSizeRatio??.04,this.lineWidth=n.lineWidth??2,this.textSizeRatio=n.textSizeRatio??.1,this.offsetRatio=n.offsetRatio??.003,this.surfaceOffset=n.surfaceOffset??.003,this.defaultColor=n.defaultColor??"#ffffff",this.measurements=[],this.measurementEndCallbacks={},this.measurementEndCallbackId=0,this.control=new gbn(this)}on(e,t){if(e==="measurementEnd")return this.measurementEndCallbacks[this.measurementEndCallbackId++]=t,this.measurementEndCallbackId}off(e){this.measurementEndCallbacks[e]=null}destroy(){this.control.deactivate(),this.control.destroy(),this.measurements.slice().forEach(e=>e.destroy()),this.measurements.length=0}},gbn=class{constructor(e){this.plugin=e,this.currentMeasurement=null,this.lastSnap=null,this.mouseDown=!1,this.dragging=!1,this.activated=!1,this.onPointerMove=this.onPointerMove.bind(this),this.onPointerDown=this.onPointerDown.bind(this),this.onPointerUp=this.onPointerUp.bind(this)}async onPointerMove(e){e.preventDefault(),this.mouseDown&&(this.dragging=!0),this.lastSnap=await this.plugin.snapPicker.pickFromEvent(e),this.plugin.cursorOverlay.update(this.lastSnap),this.currentMeasurement&&this.lastSnap&&(this.currentMeasurement.move(this.lastSnap.point,this.lastSnap.normal),this.plugin.snapPicker.requestFrame())}onPointerDown(e){e.button===0&&(this.mouseDown=!0)}onPointerUp(e){if(e.button!==0)return;this.mouseDown=!1;let t=this.dragging;if(this.dragging=!1,!(t||!this.lastSnap)){if(this.currentMeasurement){this.currentMeasurement.move(this.lastSnap.point,this.lastSnap.normal),this.plugin.measurements.push(this.currentMeasurement),Object.values(this.plugin.measurementEndCallbacks).forEach(i=>{i?.(this.currentMeasurement)}),this.currentMeasurement=null;return}this.currentMeasurement=new vbn(this.plugin,this.lastSnap.point,this.lastSnap.normal,[this.lastSnap.modelId])}}activate(){if(this.activated)return;let e=this.plugin.world.renderer.three.domElement;this.plugin.cursorOverlay.show(),e.addEventListener("pointermove",this.onPointerMove),e.addEventListener("pointerdown",this.onPointerDown),document.addEventListener("pointerup",this.onPointerUp),this.activated=!0}deactivate(){if(!this.activated)return;let e=this.plugin.world.renderer.three.domElement;e.removeEventListener("pointermove",this.onPointerMove),e.removeEventListener("pointerdown",this.onPointerDown),document.removeEventListener("pointerup",this.onPointerUp),this.currentMeasurement?.destroy(),this.currentMeasurement=null,this.lastSnap=null,this.dragging=!1,this.mouseDown=!1,this.plugin.cursorOverlay.hide(),this.activated=!1}destroy(){}},ybn=new ie(0,0,0),z1t=class{constructor(e,t,i,n,s=[],r=null){this.plugin=e,this.group=new $r,this.linesMaterial=new zg({color:GT(e.defaultColor),linewidth:e.lineWidth,depthTest:!0,depthWrite:!1,transparent:!1}),this.arcMaterial=this.linesMaterial.clone(),this.#i(),this.lineGeometry=new KN,this.arcGeometry=new C6e,this.lines=new RU(this.lineGeometry,this.linesMaterial),this.arc=new qet(this.arcGeometry,this.arcMaterial),this.lines.visible=!1,this.arc.visible=!1,this.group.add(this.lines,this.arc),this._p1=t.clone(),this._p2=i.clone(),this._p3=n.clone(),this._normalHint=r?.clone?.().normalize?.()||null,this._angle=0,this._visible=!0,this._text=null,this.modelIds=pL(...s),this.group.position.copy(this._p2),(this.plugin.overlayScene||this.plugin.world.scene.three).add(this.group),this.update(t,i,n,r)}update(e,t,i,n=null){this._p1.copy(e),this._p2.copy(t),this._p3.copy(i),n?.isVector3&&(this._normalHint=n.clone().normalize());let s=this._p2,r=Gx(this._p1,s),o=ybn,a=Gx(this._p3,s);this.group.position.copy(s);let l=r.clone().sub(o),c=a.clone().sub(o);this.#i();let d=this._normalHint?.isVector3?this._normalHint.clone().normalize():new ie(0,1,0);if(l.lengthSq()>1e-6&&c.lengthSq()<=1e-6){this._angle=0,this.arc.visible=!1;let L=l.length()*this.plugin.arrowSizeRatio,N=l.clone().normalize(),z=d.lengthSq()>1e-8?d:new ie(0,1,0);this.#t([o,r,...mse({tip:r,inwardDirection:N.clone().negate(),planeNormal:z,arrowLength:L})]),this.#n();return}if(l.lengthSq()<=1e-6||c.lengthSq()<=1e-6){this._angle=0,this.lines.visible=!1,this.arc.visible=!1,this.#n();return}let u=l.clone().normalize(),h=c.clone().normalize(),p=u.angleTo(h);this._angle=oa.radToDeg(p);let f=new ie().crossVectors(u,h),m=f.lengthSq()>1e-8?f.clone().normalize():d;m.lengthSq()<=1e-8&&(m=new ie(0,1,0)),u.clone().applyAxisAngle(m,p).dot(h)<.999&&(m=m.clone().negate());let g=(d.lengthSq()>1e-8?d:m).clone().multiplyScalar(this.plugin.surfaceOffset),A=l.length(),E=c.length(),b=A*this.plugin.arrowSizeRatio,T=E*this.plugin.arrowSizeRatio,C=[o.clone().add(g),r.clone().add(g),o.clone().add(g),a.clone().add(g),...mse({tip:r,inwardDirection:u.clone().negate(),planeNormal:m,arrowLength:b}).map(L=>L.clone().add(g)),...mse({tip:a,inwardDirection:h.clone().negate(),planeNormal:m,arrowLength:T}).map(L=>L.clone().add(g))];this.#t(C);let S=Math.min(l.length(),c.length())*.35;if(f.lengthSq()<=1e-8){this.arc.visible=!1,this.#n();return}let R=[];for(let L=0;L<=24;L++){let N=L/24*p,z=u.clone().applyAxisAngle(m,N);R.push(o.clone().add(z.multiplyScalar(S)).add(g))}this.arcGeometry.setPositions(R.flatMap(L=>[L.x,L.y,L.z])),this.arc.visible=!0;let x=u.clone().applyAxisAngle(m,p*.5),_=o.clone().add(x.multiplyScalar(S*1.45)).add(g),F=m.clone().cross(x).normalize();this.#e(`${this._angle.toFixed(2)}\xB0`,S,x,F,m,_)}#e(e,t,i,n,s,r){this.#n(),this._text=vse({content:e,size:Math.max(t*this.plugin.textSizeRatio,.03),color:this.linesMaterial.color}),Ase({group:this._text,direction:i,up:n,normal:s,position:r}),this.group.add(this._text)}#t(e){if(!j1t(e)){this.lines.visible=!1;return}let t=e.flatMap(i=>[i.x,i.y,i.z]);this.lineGeometry.setPositions(t),this.lines.visible=t.length>0}#i(){let e=this.plugin.world.renderer.three.domElement;this.linesMaterial.resolution.set(e.clientWidth,e.clientHeight),this.arcMaterial.resolution.set(e.clientWidth,e.clientHeight)}#n(){this._text&&=(this.group.remove(this._text),this._text.traverse(e=>{e.geometry&&e.geometry.dispose(),e.material&&(Array.isArray(e.material)?e.material:[e.material]).forEach(t=>t.dispose())}),null)}destroy(){this.#n(),this.lineGeometry.dispose(),this.arcGeometry.dispose(),this.linesMaterial.dispose(),this.arcMaterial.dispose(),this.group.removeFromParent(),this.plugin.measurements=this.plugin.measurements.filter(e=>e!==this),this.plugin.fragmentsInstance.requestRender()}get angle(){return this.visible?this._angle:0}get visible(){return this._visible}set visible(e){this._visible=!!e,this.group.visible=this._visible}get color(){return hse(this.linesMaterial.color)}set color(e=this.plugin.defaultColor){let t=GT(e);this.linesMaterial.color.copy(t),this.arcMaterial.color.copy(t),this._text&&this._text.traverse(i=>{i.material&&(Array.isArray(i.material)?i.material:[i.material]).forEach(n=>n.color?.copy(t))})}},Ibn=class{constructor(e,t,i,n={}){this.fragmentsInstance=e,this.world=e.world,this.overlayScene=e.overlayScene,this.snapPicker=t,this.cursorOverlay=i,this.textSizeRatio=n.textSizeRatio??.28,this.arrowSizeRatio=n.arrowSizeRatio??.04,this.lineWidth=n.lineWidth??2,this.surfaceOffset=n.surfaceOffset??.003,this.defaultColor=n.defaultColor??"#ffffff",this.measurements=[],this.measurementEndCallbacks={},this.measurementEndCallbackId=0,this.control=new bbn(this)}on(e,t){if(e==="measurementEnd")return this.measurementEndCallbacks[this.measurementEndCallbackId++]=t,this.measurementEndCallbackId}off(e){this.measurementEndCallbacks[e]=null}destroy(){this.control.deactivate(),this.control.destroy(),this.measurements.slice().forEach(e=>e.destroy()),this.measurements.length=0}},bbn=class{constructor(e){this.plugin=e,this.points=[],this.normals=[],this.modelIds=[],this.previewMeasurement=null,this.lastSnap=null,this.mouseDown=!1,this.dragging=!1,this.activated=!1,this.onPointerMove=this.onPointerMove.bind(this),this.onPointerDown=this.onPointerDown.bind(this),this.onPointerUp=this.onPointerUp.bind(this)}async onPointerMove(e){e.preventDefault(),this.mouseDown&&(this.dragging=!0),this.lastSnap=await this.plugin.snapPicker.pickFromEvent(e),this.plugin.cursorOverlay.update(this.lastSnap),!(!this.lastSnap||this.points.length===0)&&(this.points.length===1?this.#e(this.points[0],this.lastSnap.point,this.lastSnap.point):this.points.length===2&&this.#e(this.points[0],this.points[1],this.lastSnap.point),this.plugin.snapPicker.requestFrame())}onPointerDown(e){e.button===0&&(this.mouseDown=!0)}onPointerUp(e){if(e.button!==0)return;this.mouseDown=!1;let t=this.dragging;if(this.dragging=!1,t||!this.lastSnap||(this.points.push(this.lastSnap.point.clone()),this.normals.push(this.lastSnap.normal.clone()),this.modelIds.push(this.lastSnap.modelId),this.points.length<3))return;this.previewMeasurement?.destroy(),this.previewMeasurement=null;let i=new z1t(this.plugin,this.points[0],this.points[1],this.points[2],this.modelIds,this.normals[1]||this.normals[0]||this.lastSnap.normal);this.plugin.measurements.push(i),Object.values(this.plugin.measurementEndCallbacks).forEach(n=>{n?.(i)}),this.points=[],this.normals=[],this.modelIds=[]}#e(e,t,i){let n=this.points.length===1?this.lastSnap?.normal||this.normals[0]:this.normals[1]||this.normals[0]||this.lastSnap?.normal;if(!this.previewMeasurement){this.previewMeasurement=new z1t(this.plugin,e,t,i,this.modelIds,n);return}this.previewMeasurement.update(e,t,i,n)}activate(){if(this.activated)return;let e=this.plugin.world.renderer.three.domElement;this.plugin.cursorOverlay.show(),e.addEventListener("pointermove",this.onPointerMove),e.addEventListener("pointerdown",this.onPointerDown),document.addEventListener("pointerup",this.onPointerUp),this.activated=!0}deactivate(){if(!this.activated)return;let e=this.plugin.world.renderer.three.domElement;e.removeEventListener("pointermove",this.onPointerMove),e.removeEventListener("pointerdown",this.onPointerDown),document.removeEventListener("pointerup",this.onPointerUp),this.previewMeasurement?.destroy(),this.previewMeasurement=null,this.points=[],this.normals=[],this.modelIds=[],this.lastSnap=null,this.mouseDown=!1,this.dragging=!1,this.plugin.cursorOverlay.hide(),this.activated=!1}destroy(){}},q1t=new ie(0,0,0),D9e=new ie(0,1,0),Ebn=.9,Tbn=class{constructor(e,t){this.plugin=e,this.group=new $r,this.material=new Rc({color:GT(e.defaultColor),depthTest:!1,transparent:!0}),this.sphereMaterial=new Io({color:GT(e.defaultColor),depthTest:!1,transparent:!0}),this.sphereGeometry=new TO(.03,12,12),this.fromSphere=new pn(this.sphereGeometry,this.sphereMaterial),this.toSphere=new pn(this.sphereGeometry,this.sphereMaterial),this.lineGeometry=new $n,this.line=new _c(this.lineGeometry,this.material),this.fromSphere.raycast=()=>{},this.toSphere.raycast=()=>{},this.line.raycast=()=>{},this.toSphere.visible=!1,this.line.visible=!1,this.group.add(this.fromSphere,this.toSphere,this.line),this._length=0,this._visible=!0,this._text=null,this._textContent=null,this._localTo=null,this._isVertical=!1,this._consecutiveMisses=0,this._showRequestId=0,this._destroyed=!1,this.modelIds=pL(t.modelId),this.group.position.copy(t.point),this.plugin.world.scene.three.add(this.group),this._onCameraUpdate=()=>{this._isVertical&&this.#i()},this._cameraControls=this.plugin.world.camera.controls??null,this._cameraControls?.addEventListener?.("update",this._onCameraUpdate)}async show(e,t=()=>!0){let i=++this._showRequestId,n=e.point.clone(),s=e.normal.clone().normalize(),r=this.plugin.world.camera.three.position.clone().sub(n);s.dot(r)<0&&s.negate();let o=await this.plugin.castNormalRay(n,s,e.hit);if(i!==this._showRequestId||this._destroyed||!t())return;if(!o){this._consecutiveMisses+=1,this._consecutiveMisses>=2&&(this.#e(),this.plugin.fragmentsInstance.requestRender());return}this._consecutiveMisses=0,this.modelIds=pL(e.modelId,o.fragments?.modelId),this.group.position.copy(n),this.fromSphere.position.copy(q1t);let a=Gx(o.point,n);this._localTo=a.clone(),this._length=a.length(),this.toSphere.position.copy(a),this.lineGeometry.setFromPoints([q1t,a]),this.toSphere.visible=!0,this.line.visible=!0,this.#t(),this.plugin.fragmentsInstance.requestRender()}#e(){this._length=0,this._localTo=null,this.toSphere.visible=!1,this.line.visible=!1,this.#s()}#t(){let e=`${this._length.toFixed(2)} m`;e!==this._textContent&&(this.#s(),this._text=vse({content:e,size:Math.max(.04,this._length*this.plugin.textSizeRatio),color:this.material.color}),this._textContent=e,this.group.add(this._text)),this.#i()}#i(){if(!this._text||!this._localTo)return;let e=this._localTo.clone().normalize(),t=this._localTo.clone().multiplyScalar(.5);this._isVertical=Math.abs(e.dot(D9e))>Ebn;let i=new ie,n=new ie;this._isVertical?this.#n(e,t,i,n):this.#a(e,i,n);let s=Math.max(this._length*.05,.03),r=t.addScaledVector(i,s);Ase({group:this._text,direction:e,up:i,normal:n,position:r})}#n(e,t,i,n){let s=this.plugin.world.camera.three,r=s.position.clone().sub(this.group.position).sub(t);n.copy(r).addScaledVector(e,-r.dot(e)),n.lengthSq()<1e-10&&(n.copy(new ie(0,1,0).cross(e)),n.lengthSq()<1e-10&&n.copy(new ie(1,0,0).cross(e))),n.normalize(),i.crossVectors(n,e).normalize();let o=e.clone().applyQuaternion(s.quaternion.clone().invert());(Math.abs(o.x)>1e-4?o.x>0:o.y>0)||(i.negate(),e.negate())}#a(e,t,i){t.copy(D9e).addScaledVector(e,-e.dot(D9e)).normalize(),i.crossVectors(e,t).normalize()}#s(){this._text&&(this.group.remove(this._text),this._text.traverse(e=>{e.geometry&&e.geometry.dispose(),e.material&&(Array.isArray(e.material)?e.material:[e.material]).forEach(t=>t.dispose())}),this._text=null,this._textContent=null)}destroy(){this._destroyed=!0,this._showRequestId++,this._cameraControls?.removeEventListener?.("update",this._onCameraUpdate),this._cameraControls=null,this.#s(),this.lineGeometry.dispose(),this.material.dispose(),this.sphereMaterial.dispose(),this.sphereGeometry.dispose(),this.group.removeFromParent(),this.plugin.measurements=this.plugin.measurements.filter(e=>e!==this),this.plugin.fragmentsInstance.requestRender()}get length(){return this.visible?this._length:0}get visible(){return this._visible}set visible(e){this._visible=!!e,this.group.visible=this._visible}get color(){return hse(this.material.color)}set color(e=this.plugin.defaultColor){let t=GT(e);this.material.color.copy(t),this.sphereMaterial.color.copy(t),this._text&&this._text.traverse(i=>{i.material&&(Array.isArray(i.material)?i.material:[i.material]).forEach(n=>n.color?.copy(t))})}},wbn=class{constructor(e,t,i,n={}){this.fragmentsInstance=e,this.world=e.world,this.fragments=e.fragments;let s=e.components.get(e.OBC.Raycasters);this.caster=s.get(this.world),this.textSizeRatio=n.textSizeRatio??.1,this.defaultColor=n.defaultColor??"#ffffff",this.measurements=[],this.measurementEndCallbacks={},this.measurementEndCallbackId=0,this.control=new Cbn(this)}on(e,t){if(e==="measurementEnd")return this.measurementEndCallbacks[this.measurementEndCallbackId++]=t,this.measurementEndCallbackId}off(e){this.measurementEndCallbacks[e]=null}async castNormalRay(e,t,i,n=.02){let s=i?.fragments?.modelId,r=i?.localId;if(s==null||r==null)return null;let o=e.clone().addScaledVector(t,.005);return(await this.fragmentsInstance.raycastFromRay(o,t)).find(a=>e.distanceTo(a.point)<n?!1:!(String(a.fragments?.modelId)===String(s)&&a.localId===r))??null}destroy(){this.control.deactivate(),this.measurements.slice().forEach(e=>e.destroy()),this.measurements.length=0}},Cbn=class{constructor(e){this.plugin=e,this.currentMeasurement=null,this.lastSnap=null,this.activated=!1,this.pointerMoveRequestId=0,this.mouseDown=!1,this.dragging=!1,this.pointerDownPosition=null,this.dragThreshold=4,this.consecutiveInvalidHits=0,this.onPointerMove=this.onPointerMove.bind(this),this.onPointerDown=this.onPointerDown.bind(this),this.onPointerUp=this.onPointerUp.bind(this)}async onPointerMove(e){e.preventDefault();let t=++this.pointerMoveRequestId;if(this.mouseDown&&this.pointerDownPosition){let s=e.clientX-this.pointerDownPosition.x,r=e.clientY-this.pointerDownPosition.y;s*s+r*r>this.dragThreshold*this.dragThreshold&&(this.dragging=!0)}if(this.dragging)return;let i=M1e(e,this.plugin.world.renderer.three.domElement),n=await this.plugin.caster.castRay({position:i});if(t===this.pointerMoveRequestId){if(this.lastSnap=n?{hit:n,point:n.point.clone(),normal:N1e(n,this.plugin.world.camera.three),modelId:n.fragments?.modelId??null}:null,!this.lastSnap){this.consecutiveInvalidHits+=1,this.consecutiveInvalidHits>=2&&(this.currentMeasurement?.destroy(),this.currentMeasurement=null,this.plugin.fragmentsInstance.requestRender());return}this.consecutiveInvalidHits=0,this.currentMeasurement||=new Tbn(this.plugin,this.lastSnap),await this.currentMeasurement.show(this.lastSnap,()=>t===this.pointerMoveRequestId),t===this.pointerMoveRequestId&&this.plugin.fragmentsInstance.requestRender()}}onPointerDown(e){e.button===0&&(this.mouseDown=!0,this.dragging=!1,this.pointerDownPosition={x:e.clientX,y:e.clientY})}onPointerUp(e){if(e.button!==0)return;this.mouseDown=!1;let t=this.dragging;this.dragging=!1,this.pointerDownPosition=null,!(t||!this.currentMeasurement)&&(this.currentMeasurement.length<=0||(this.plugin.measurements.push(this.currentMeasurement),Object.values(this.plugin.measurementEndCallbacks).forEach(i=>{i?.(this.currentMeasurement)}),this.currentMeasurement=null))}activate(){if(this.activated)return;let e=this.plugin.world.renderer.three.domElement;e.addEventListener("pointermove",this.onPointerMove),e.addEventListener("pointerdown",this.onPointerDown),document.addEventListener("pointerup",this.onPointerUp),this.activated=!0}deactivate(){if(!this.activated)return;this.pointerMoveRequestId++;let e=this.plugin.world.renderer.three.domElement;e.removeEventListener("pointermove",this.onPointerMove),e.removeEventListener("pointerdown",this.onPointerDown),document.removeEventListener("pointerup",this.onPointerUp),this.currentMeasurement?.destroy(),this.currentMeasurement=null,this.lastSnap=null,this.mouseDown=!1,this.dragging=!1,this.pointerDownPosition=null,this.consecutiveInvalidHits=0,this.activated=!1}},xQ=new ie(0,1,0),F1e=new ie(0,0,1),k1e=new ie(1,0,0),E4=1e-6,Sbn=class{constructor(e,t){this.plugin=e,this.group=new $r,this.material=new zg({color:GT(e.defaultColor),linewidth:e.lineWidth,depthTest:!0,depthWrite:!1,transparent:!1}),this.#o(),this.geometry=new KN,this.lines=new RU(this.geometry,this.material),this.lines.renderOrder=10,this.group.add(this.lines),this._visible=!0,this._texts=[],this.modelIds=pL(t.modelId),this.perimeter=0,this.valid=!1,(this.plugin.overlayScene||this.plugin.world.scene.three).add(this.group),this.#e(t)}update(e){this.modelIds=pL(e.modelId),this.#e(e),this.plugin.fragmentsInstance.requestRender()}#e(e){this.#u(),this.valid=!1;let t=this.#t(e);if(!t){this.lines.visible=!1;return}let{vertices:i,boundaryEdges:n}=t;if(!n.length){this.lines.visible=!1;return}let s=e.normal.clone().normalize(),r=e.point.clone(),o=this.#a(i,r);this.group.position.copy(o);let{horizontalAxis:a,verticalAxis:l}=this.#s(s,n),{origin:c,boundarySegments2D:d,point2D:u}=this.#c(i,n,r,a,l),h=this.#r(u,new Cn(0,1),d),p=this.#r(u,new Cn(0,-1),d),f=this.#r(u,new Cn(1,0),d),m=this.#r(u,new Cn(-1,0),d),g=N=>c.clone().add(a.clone().multiplyScalar(N.x)).add(l.clone().multiplyScalar(N.y)),A=h?g(h.point):null,E=p?g(p.point):null,b=f?g(f.point):null,T=m?g(m.point):null,C=s.clone().multiplyScalar(this.plugin.surfaceOffset),S=[],R=[];this.perimeter=0;let x=new Set;for(let[N,z]of n){let k=N.distanceTo(z);if(k<=E4)continue;this.perimeter+=k;let te=`${k.toFixed(2)} m`;x.add(te);let fe=r.clone().sub(N.clone().add(z).multiplyScalar(.5));S.push([N,z,te,fe])}if(A&&E){let N=`${E.distanceTo(A).toFixed(2)} m`;R.push([E,A,N,null])}else A?R.push([r,A,`${r.distanceTo(A).toFixed(2)} m`,null]):E&&R.push([r,E,`${r.distanceTo(E).toFixed(2)} m`,null]);if(b&&T){let N=`${T.distanceTo(b).toFixed(2)} m`;R.push([T,b,N,null])}else b?R.push([r,b,`${r.distanceTo(b).toFixed(2)} m`,null]):T&&R.push([r,T,`${r.distanceTo(T).toFixed(2)} m`,null]);let _=new Set;R.forEach(([,,N])=>{x.has(N)&&_.add(N)});let F=S.map(N=>({segment:N,kind:"edge"})).concat(R.map(N=>({segment:N,kind:"center"})));if(!F.length){this.lines.visible=!1;return}let L=[];F.forEach(({segment:[N,z,k,te],kind:fe})=>{let ye=Gx(N,o).add(C),je=Gx(z,o).add(C);L.push(ye.x,ye.y,ye.z,je.x,je.y,je.z),fe==="edge"&&_.has(k)||this.#l(ye,je,s,k,te)}),this.#o(),this.geometry.setPositions(L),this.lines.visible=!0,this.valid=!0}#t(e){let t=this.#i(e);if(t)return t;let i=this.#n(e),n=[],s=[];if(i)n=i.vertices,s=i.indices;else return null;if(s.length||(s=Array.from({length:n.length},(a,l)=>l)),s.length<3)return null;let r=L1e(n,s);if(!r.indices.length)return null;let o=B1e(r.vertices,r.indices);return{vertices:r.vertices,boundaryEdges:o}}#i(e){let t=R1e(e);if(!t)return null;let{vertices:i,indices:n}=t,s=L1e(i,n);if(!s.indices.length)return null;let r=B1e(s.vertices,s.indices);return{vertices:s.vertices,boundaryEdges:r}}#n(e){let t=y9e(e);if(!t)return null;let{vertices:i,indices:n}=t,s=L1e(i,n);if(!s.indices.length)return null;let r=B1e(s.vertices,s.indices);return{vertices:s.vertices,boundaryEdges:r,indices:s.indices}}#a(e,t){if(!e?.length)return t.clone();let i=new As;return e.forEach(n=>i.expandByPoint(n)),i.isEmpty()?t.clone():i.getCenter(new ie)}#s(e,t=[]){let i=U1t(e,t,{eps:E4});if(!i&&(i=xQ.clone().sub(e.clone().multiplyScalar(xQ.dot(e))),i.lengthSq()<=E4)){let o=F1e.clone().sub(e.clone().multiplyScalar(F1e.dot(e))),a=k1e.clone().sub(e.clone().multiplyScalar(k1e.dot(e)));i=o.lengthSq()>=a.lengthSq()?o:a}i.normalize();let n=new ie().crossVectors(i,e).normalize();n.lengthSq()<=E4&&(n=k1e.clone().sub(e.clone().multiplyScalar(k1e.dot(e))).normalize());let s=this.plugin.world.camera.three.up.clone().normalize(),r=s.clone().sub(e.clone().multiplyScalar(s.dot(e)));return r.lengthSq()>E4&&i.dot(r.normalize())<0&&(i.negate(),n.negate()),{horizontalAxis:n,verticalAxis:i}}#c(e,t,i,n,s){let r=e[0].clone(),o=a=>{let l=a.clone().sub(r);return new Cn(l.dot(n),l.dot(s))};return{origin:r,boundarySegments2D:t.map(([a,l])=>[o(a),o(l)]),point2D:o(i)}}#r(e,t,i){let n=(r,o)=>r.x*o.y-r.y*o.x,s=null;for(let[r,o]of i){let a=o.clone().sub(r),l=n(t,a);if(Math.abs(l)<=E4)continue;let c=r.clone().sub(e),d=n(c,a)/l,u=n(c,t)/l;if(d<E4||u<-1e-6||u>1.000001)continue;let h=e.clone().add(t.clone().multiplyScalar(d));(!s||d<s.distance)&&(s={distance:d,point:h})}return s}#l(e,t,i,n,s=null){let r=t.clone().sub(e),o=r.length();if(o<=E4)return;let{direction:a,up:l,offsetUp:c}=this.#d(r,i,s),d=vse({content:n,size:Math.max(.035,o*this.plugin.textSizeRatio),color:this.material.color,strokeColor:"rgba(0, 0, 0, 0.95)",strokeWidth:12}),u=e.clone().add(t).multiplyScalar(.5),h=Math.max(.02,o*.03);Ase({group:d,direction:a,up:l,normal:i,position:u.clone().add(c.clone().multiplyScalar(h))}),this._texts.push(d),this.group.add(d)}#d(e,t,i=null){let n=t.clone().normalize(),s=e.clone().sub(n.clone().multiplyScalar(e.dot(n)));s.lengthSq()<=E4&&(s=xQ.clone().sub(n.clone().multiplyScalar(xQ.dot(n))),s.lengthSq()<=E4&&(s=F1e.clone().sub(n.clone().multiplyScalar(F1e.dot(n))))),s.normalize();let r=new ie().crossVectors(n,s);r.lengthSq()<=E4&&(r=xQ.clone().sub(n.clone().multiplyScalar(xQ.dot(n)))),r.normalize(),s=new ie().crossVectors(r,n).normalize(),r=new ie().crossVectors(n,s).normalize();let o=r.clone();if(i?.isVector3){let c=i.clone().sub(n.clone().multiplyScalar(i.dot(n))).sub(s.clone().multiplyScalar(i.dot(s)));c.lengthSq()>E4&&(c.normalize(),o.dot(c)<0&&o.negate())}let a=this.plugin.world.camera.three.up.clone().normalize(),l=a.clone().sub(n.clone().multiplyScalar(a.dot(n))).sub(s.clone().multiplyScalar(a.dot(s)));return l.lengthSq()>E4&&r.dot(l.normalize())<0&&(r.negate(),s.negate()),{direction:s,up:r,offsetUp:o}}#o(){let e=this.plugin.world.renderer.three.domElement;this.material.resolution.set(e.clientWidth,e.clientHeight)}#u(){this._texts.forEach(e=>{this.group.remove(e),e.traverse(t=>{t.geometry&&t.geometry.dispose(),t.material&&(Array.isArray(t.material)?t.material:[t.material]).forEach(i=>i.dispose())})}),this._texts=[]}destroy(){this.#u(),this.geometry.dispose(),this.material.dispose(),this.group.removeFromParent(),this.plugin.measurements=this.plugin.measurements.filter(e=>e!==this),this.plugin.fragmentsInstance.requestRender()}get visible(){return this._visible}set visible(e){this._visible=!!e,this.group.visible=this._visible,this.plugin.fragmentsInstance.requestRender()}get color(){return hse(this.material.color)}set color(e=this.plugin.defaultColor){let t=GT(e);this.material.color.copy(t),this._texts.forEach(i=>{i.traverse(n=>{n.material&&(Array.isArray(n.material)?n.material:[n.material]).forEach(s=>s.color?.copy(t))})}),this.plugin.fragmentsInstance.requestRender()}},xbn=class{constructor(e,t,i,n={}){this.fragmentsInstance=e,this.world=e.world,this.overlayScene=e.overlayScene,this.components=e.components,this.OBC=e.OBC,this.cursorOverlay=i;let s=this.components.get(this.OBC.Raycasters);this.caster=s.get(this.world),this.defaultColor=n.defaultColor??"#ffffff",this.lineWidth=n.lineWidth??2,this.textSizeRatio=n.textSizeRatio??.08,this.surfaceOffset=n.surfaceOffset??.003,this.measurements=[],this.measurementEndCallbacks={},this.measurementEndCallbackId=0,this.previousHighlightOnHover=null,this.hoverSuspended=!1,this.control=new Rbn(this)}on(e,t){if(e==="measurementEnd")return this.measurementEndCallbacks[this.measurementEndCallbackId++]=t,this.measurementEndCallbackId}off(e){this.measurementEndCallbacks[e]=null}destroy(){this.control.deactivate(),this.measurements.slice().forEach(e=>e.destroy()),this.measurements.length=0}},Rbn=class{constructor(e){this.plugin=e,this.lastHit=null,this.currentMeasurement=null,this.mouseDown=!1,this.dragging=!1,this.pointerDownPosition=null,this.dragThreshold=4,this.activated=!1,this.pointerMoveRequestId=0,this.consecutiveInvalidHits=0,this.onPointerMove=this.onPointerMove.bind(this),this.onPointerDown=this.onPointerDown.bind(this),this.onPointerUp=this.onPointerUp.bind(this)}clearPreview(){this.lastHit=null,this.plugin.cursorOverlay.update(null),this.currentMeasurement?.destroy(),this.currentMeasurement=null}async onPointerMove(e){e.preventDefault();let t=++this.pointerMoveRequestId;if(this.mouseDown&&this.pointerDownPosition){let r=e.clientX-this.pointerDownPosition.x,o=e.clientY-this.pointerDownPosition.y;r*r+o*o>this.dragThreshold*this.dragThreshold&&(this.dragging=!0)}let i=M1e(e,this.plugin.world.renderer.three.domElement),n=await this.plugin.caster.castRay({position:i,snappingClasses:[S9e.FACE]});if(!this.activated||t!==this.pointerMoveRequestId)return;if(!this.#e(n)){this.consecutiveInvalidHits+=1,this.consecutiveInvalidHits>=2&&this.clearPreview();return}this.consecutiveInvalidHits=0,this.lastHit={hit:n,facePoints:n.facePoints??null,faceIndices:n.faceIndices??n.faceIndexes??n.indices??null,point:n.point.clone(),normal:N1e(n,this.plugin.world.camera.three),modelId:n.fragments?.modelId??null};let s=x9e(n.point,this.plugin.world.camera.three,this.plugin.world.renderer.three.domElement);if(this.plugin.cursorOverlay.update({snapName:"FACE",screen:s}),this.currentMeasurement?this.currentMeasurement.update(this.lastHit):this.currentMeasurement=new Sbn(this.plugin,this.lastHit),!this.currentMeasurement.valid){this.currentMeasurement.destroy(),this.currentMeasurement=null;return}this.plugin.fragmentsInstance.requestRender()}onPointerDown(e){e.button===0&&(this.mouseDown=!0,this.dragging=!1,this.pointerDownPosition={x:e.clientX,y:e.clientY})}onPointerUp(e){if(e.button!==0)return;this.mouseDown=!1;let t=this.dragging;if(this.dragging=!1,this.pointerDownPosition=null,t||!this.currentMeasurement||!this.currentMeasurement.valid)return;let i=this.currentMeasurement;if(this.currentMeasurement=null,!i.valid){i.destroy();return}this.plugin.measurements.push(i),Object.values(this.plugin.measurementEndCallbacks).forEach(n=>{n?.(i)}),this.plugin.fragmentsInstance.requestRender()}activate(){if(this.activated)return;let e=this.plugin.world.renderer.three.domElement;!this.plugin.hoverSuspended&&typeof this.plugin.fragmentsInstance.suspendHoverHighlight=="function"&&(this.plugin.fragmentsInstance.suspendHoverHighlight("face-measurement"),this.plugin.hoverSuspended=!0),typeof this.plugin.fragmentsInstance.highlightOnHover=="boolean"&&(this.plugin.previousHighlightOnHover=this.plugin.fragmentsInstance.highlightOnHover,this.plugin.fragmentsInstance.highlightOnHover=!1),this.plugin.cursorOverlay.useCrosshairCursor(),this.plugin.cursorOverlay.show(),e.addEventListener("pointermove",this.onPointerMove),e.addEventListener("pointerdown",this.onPointerDown),document.addEventListener("pointerup",this.onPointerUp),this.activated=!0}deactivate(){if(!this.activated)return;let e=this.plugin.world.renderer.three.domElement;e.removeEventListener("pointermove",this.onPointerMove),e.removeEventListener("pointerdown",this.onPointerDown),document.removeEventListener("pointerup",this.onPointerUp),this.pointerMoveRequestId+=1,this.consecutiveInvalidHits=0,this.clearPreview(),this.mouseDown=!1,this.dragging=!1,this.pointerDownPosition=null,this.plugin.cursorOverlay.hide(),this.plugin.cursorOverlay.useOverlayCursor(),this.plugin.hoverSuspended&&typeof this.plugin.fragmentsInstance.resumeHoverHighlight=="function"&&(this.plugin.fragmentsInstance.resumeHoverHighlight("face-measurement"),this.plugin.hoverSuspended=!1),this.plugin.previousHighlightOnHover!==null&&(this.plugin.fragmentsInstance.highlightOnHover=this.plugin.previousHighlightOnHover,this.plugin.previousHighlightOnHover=null),this.activated=!1}#e(e){if(!e)return!1;if(e.facePoints?.length>=9)return!0;let t=e.object?.geometry?.attributes?.position,i=e.faceIndices??e.faceIndexes??e.indices??null;return!!(t&&i?.length>=3&&e.point)}},U1e=new ie(0,1,0),W1t=new ie(0,0,1),Q1t=new ie(1,0,0),fL=1e-6,_bn=({colorA:e,colorB:t,opacity:i,stripeWidth:n})=>new ha({uniforms:{uOrigin:{value:new ie},uAxisX:{value:new ie(1,0,0)},uAxisY:{value:new ie(0,1,0)},uStripeWidth:{value:n},uColorA:{value:e.clone()},uColorB:{value:t.clone()},uOpacity:{value:i}},vertexShader:`
|
|
90797
90797
|
varying vec3 vLocalPos;
|
|
90798
90798
|
void main() {
|
|
90799
90799
|
vLocalPos = position;
|
|
@@ -96199,5 +96199,5 @@ void main() {
|
|
|
96199
96199
|
--bimdata-local-context-width: ${n.width}px;
|
|
96200
96200
|
--bimdata-local-context-center-width: ${n.centerWidth}px;
|
|
96201
96201
|
--bimdata-local-context-resolution: ${n.resolution};
|
|
96202
|
-
`),onMouseenter:t[0]||=(...h)=>n.onMouseEnter&&n.onMouseEnter(...h),onMouseleave:t[1]||=(...h)=>n.onMouseLeave&&n.onMouseLeave(...h)},[ue(o,{ref:"modalManagerTemplateRef"},null,512),P("div",SYn,[(Q(!0),we(yn,null,Fs(n.windowPlugins.leftSidePanels,h=>(Q(),mt(a,{plugin:h},null,8,["plugin"]))),256)),P("div",xYn,[(Q(!0),we(yn,null,Fs(n.windowPlugins.free,h=>(Q(),mt(l,{key:h.name,class:mi({"window-container__content__center__viewer":h.isViewer}),plugin:h},null,8,["class","plugin"]))),128)),ue(c,{position:"left",plugins:n.windowPlugins.leftButtonColumn},null,8,["plugins"]),ue(c,{position:"right",plugins:n.windowPlugins.rightButtonColumn},null,8,["plugins"])]),(Q(!0),we(yn,null,Fs(n.windowPlugins.rightSidePanels,h=>(Q(),mt(a,{plugin:h},null,8,["plugin"]))),256))]),n.loading?(Q(),we("div",RYn,[n.spinner&&n.spinner.component?(Q(),mt(Yc(n.spinner.component),IE(sI({key:0},n.spinner.props)),null,16)):(Q(),mt(d,{key:1,size:"20px",border:"3px"}))])):ii("",!0),n.layoutSettingsDisplayed?(Q(),we("div",_Yn,[ue(u)])):ii("",!0)],36)}var PYn=Ye(CYn,[["render",DYn],["__scopeId","data-v-cc5a8745"]]),OYn=class{constructor(e=!0){let t=EKn(rae,null,{resizable:e});t.registerContent("default",PYn),this.settings=yp({edit:!1,swap:!1,full:!1}),this.areas=t}get resizable(){return this.areas.resizable}set resizable(e){this.areas.resizable=e}apply(e=null){this.areas.layout=e?TKn(e):null}copy(e,t=!0){return wKn(this.areas.layout,e,t)}open({ratio:e,direction:t,insertAfter:i,windowName:n=null,windowState:s=null,localContextId:r=null}={}){let o=n?{options:{windowName:n,windowState:s}}:null;return r===null?this.areas.splitLayout(e,t,i,o):this.areas.split(r,e,t,i,o)}swap(e,t){return this.areas.swap(e,t)}close(e){return this.areas.delete(e)}compare(e,t){if(!e&&!t)return!0;if(!e||!t)return!1;if(typeof e=="string"&&typeof t=="string")return e===t;if(typeof e=="string"||typeof t=="string")return!1;if(e.windowName&&t.windowName){if(e.windowName!==t.windowName)return!1;let i=new Set(e.windowState?.modelIds),n=new Set(t.windowState?.modelIds);return i.size===n.size&&[...i].every(s=>n.has(s))}return e.windowName||t.windowName||e.direction!==t.direction||e.children.length!==t.children.length?!1:e.children.every((i,n)=>this.compare(i,t.children[n]))}},NYn={name:"@bimdata/viewer",type:"module",version:"2.18.0-beta.21",description:"A customizable BIM viewer.",keywords:["bim","viewer","bimdata","ifc","bcf"],types:"./index.d.ts",author:"BIMData.io",homepage:"https://developers.bimdata.io/viewer/index.html",repository:{url:"https://github.com/bimdata/viewer"},bugs:{email:"support@bimdata.io"},browserslist:["last 2 chrome version","last 2 firefox version"],main:"dist/bimdata-viewer.esm.min.js",module:"dist/bimdata-viewer.esm.min.js",scripts:{dev:"vite -c build/vite.config.dev.js",build:"node scripts/build.mjs","build:prod":"vite build -c build/vite.config.prod.js && esbuild dist/bimdata-viewer.esm.min.js --minify --outfile=dist/bimdata-viewer.esm.min.js --allow-overwrite","build:offline":"vite build -c build/vite.config.offline.js && esbuild dist/bimdata-viewer.offline.esm.min.js --minify --outfile=dist/bimdata-viewer.offline.esm.min.js --allow-overwrite","build:runtime":"vite build -c build/vite.config.runtime.js && esbuild dist/bimdata-viewer.runtime.esm.min.js --minify --outfile=dist/bimdata-viewer.runtime.esm.min.js --allow-overwrite","build:split":"vite build -c build/vite.config.split.js && esbuild dist/bimdata-viewer.split.esm.min.js --minify --outfile=dist/bimdata-viewer.split.esm.min.js --allow-overwrite","build:umd":"vite build -c build/vite.config.umd.js && esbuild dist/bimdata-viewer.umd.cjs --minify --outfile=dist/bimdata-viewer.umd.min.cjs","cy:run":"cypress run","cy:open":"cypress open",prebuild:"rm -rf dist",prepublishOnly:"npm run build","semantic-release":"semantic-release",serve:"http-server -c-1 --silent",test:"npm run test:unit & npm run build & npm run test:e2e","test:unit":"jest","test:e2e":"start-server-and-test 'npm run serve -- -p 8080' http://localhost:8080 cy:run","test:e2e-dev":"start-server-and-test 'npm run serve -- -p 8080' http://localhost:8080 cy:open",version:"echo $npm_package_version",ts:"tsc"},files:["dist/*","types/*","CHANGELOG.md","README.md","package.json","package-lock.json","index.d.ts"],devDependencies:{"@babel/preset-env":"^7.29.2","@bimdata/2d-engine":"2.6.7","@bimdata/areas-next":"0.1.17","@bimdata/bcf-components":"6.7.8","@bimdata/components":"1.10.2","@bimdata/design-system":"2.4.3","@bimdata/engine-2d":"0.0.23","@bimdata/html-to-image":"1.11.16","@bimdata/typescript-fetch-api-client":"10.47.0","@photo-sphere-viewer/core":"^5.15.0","@rollup/plugin-alias":"^6.0.0","@rollup/plugin-babel":"^7.1.0","@rollup/plugin-commonjs":"^29.0.3","@rollup/plugin-image":"^3.0.3","@rollup/plugin-replace":"^6.0.3","@semantic-release/changelog":"^7.0.0","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/git":"^11.0.1","@semantic-release/github":"^12.0.9","@semantic-release/npm":"^13.1.5","@semantic-release/release-notes-generator":"^14.1.1","@vitejs/plugin-vue":"^6.0.8","@xeokit/xeokit-sdk":"git+https://git@github.com/Amoki/xeokit-sdk.git#b3227526bbbe8ac49c8c0c1d121363ca79781824","@zip.js/zip.js":"^2.8.34",async:"^3.2.6",autoprefixer:"^10.5.4","babel-core":"^7.0.0-bridge.0","babel-jest":"^30.4.1","camera-controls":"^3.1.2","conventional-changelog-eslint":"^6.1.0",cypress:"^15.19.0",esbuild:"^0.28.1",globals:"^17.8.0",html2canvas:"^1.4.1","http-server":"^14.1.1",jest:"^30.4.2","jest-environment-jsdom":"^30.4.1",lodash:"^4.18.1","pdfjs-dist":"^6.1.200",postcss:"^8.5.23",prettier:"^3.9.6","sass-embedded":"^1.100.0","semantic-release":"^25.0.8","start-server-and-test":"^3.0.11",three:"0.184.0",vite:"^8.1.5","vite-plugin-css-injected-by-js":"^5.0.2",vue:"^3.5.40","vue-i18n":"^11.4.8","web-ifc":"^0.0.77"},allowScripts:{"cypress@15.19.0":!0}},MYn=1,LYn=class{math=Dfi;constructor({plugins:e,api:t,ui:i,locale:n="fr"}){this.instanceId=MYn++,this.pluginManager=new kqn(e),this.windowManager=new Hqn,this.windowManager.registerAndAddPluginsToWindows([...this.pluginManager.registeredPlugins.values()]),this.api=new RXn(t),this.globalContext=new C_t(this),this.state=GXn(this),this.shortcutManager=Z6t(this.state),this.uiSettings=i||{},this.i18n=new T_t(n),this._contextMenu=null,this.layout=new OYn(this.uiSettings.resizable!==!1),this._darkTheme=si(i?.darkTheme??!1),this.localContext=null,window.$viewer=this}get darkTheme(){return this._darkTheme.value}set darkTheme(e){this._darkTheme.value=e}get version(){return NYn.version}get locale(){return this.i18n.locale}get contextMenu(){return this._contextMenu||K6t}set contextMenu(e){this._contextMenu=e}get registeredWindows(){return[...this.windowManager.registeredWindows.keys()]}get registeredPlugins(){return[...this.pluginManager.registeredPlugins.keys()]}get pluginsCfg(){return this.pluginManager.cfg}registerPlugin(e){this.pluginManager.registerPlugin(e),this.windowManager.registerAndAddPluginsToWindows([e])}};function BYn(e,t={}){t.backgroundColor&&(e.style.setProperty("--bimdata-viewer-background-color",t.backgroundColor),t.backgroundColor==="transparent"&&e.style.setProperty("--areas-separator-color","transparent")),t.colorPrimary&&e.style.setProperty("--color-primary",t.colorPrimary),t.colorPrimaryLighter&&e.style.setProperty("--color-primary-lighter",t.colorPrimaryLighter),t.colorPrimaryLight&&e.style.setProperty("--color-primary-light",t.colorPrimaryLight),t.colorPrimaryDark&&e.style.setProperty("--color-primary-dark",t.colorPrimaryDark),t.colorSecondary&&e.style.setProperty("--color-secondary",t.colorSecondary),t.colorSecondaryLighter&&e.style.setProperty("--color-secondary-lighter",t.colorSecondaryLighter),t.colorSecondaryLight&&e.style.setProperty("--color-secondary-light",t.colorSecondaryLight),t.colorSecondaryDark&&e.style.setProperty("--color-secondary-dark",t.colorSecondaryDark),t.colorSilverLight&&e.style.setProperty("--color-silver-light",t.colorSilverLight),t.colorSilver&&e.style.setProperty("--color-silver",t.colorSilver),t.colorSilverDark&&e.style.setProperty("--color-silver-dark",t.colorSilverDark),t.colorGraniteLight&&e.style.setProperty("--color-granite-light",t.colorGraniteLight),t.colorGranite&&e.style.setProperty("--color-granite",t.colorGranite),t.colorSuccess&&e.style.setProperty("--color-success",t.colorSuccess),t.colorSuccessLighter&&e.style.setProperty("--color-success-Lighter",t.colorSuccessLighter),t.colorSuccessLight&&e.style.setProperty("--color-success-Light",t.colorSuccessLight),t.colorSuccessDark&&e.style.setProperty("--color-success-Dark",t.colorSuccessDark),t.colorWarning&&e.style.setProperty("--color-warning",t.colorWarning),t.colorWarningLighter&&e.style.setProperty("--color-warning-Lighter",t.colorWarningLighter),t.colorWarningLight&&e.style.setProperty("--color-warning-Light",t.colorWarningLight),t.colorWarningDark&&e.style.setProperty("--color-warning-Dark",t.colorWarningDark),t.colorHigh&&e.style.setProperty("--color-high",t.colorHigh),t.colorHighLighter&&e.style.setProperty("--color-high-lighter",t.colorHighLighter),t.colorHighLight&&e.style.setProperty("--color-high-light",t.colorHighLight),t.colorHighDark&&e.style.setProperty("--color-high-dark",t.colorHighDark),t.colorText&&e.style.setProperty("--color-text",t.colorText),(!t.backgroundColor||t.backgroundColor!=="transparent")&&e.style.setProperty("--areas-separator-color","rgba(216, 216, 216, 1)"),t.headerHeight!=null&&e.style.setProperty("--bimdata-viewer-header-height",t.headerHeight),e.style.setProperty("--areas-background-color","transparent")}var FYn=Object.freeze({25:"GUEST",50:"USER",100:"ADMIN"}),fX=Object.freeze({READ:"read",WRITE:"write"});function HEt(e){let t={};return e.forEach(i=>{let[n,s]=i.split(":");t[n]?t[n].push(s):t[n]=[s]}),t}var kYn={token_scopes:[],usable_scopes:[],user_role:25};function GEt(e=kYn){let t=HEt(e.token_scopes),i=HEt(e.usable_scopes);return{...IVe(e),tokenScopes:t,usableScopes:i,userRole:FYn[e.user_role],user:e.user?IVe(e.user):null,hasBcfReadPermission:i.bcf?.includes(fX.READ)??!1,hasBcfWritePermission:i.bcf?.includes(fX.WRITE)??!1,hasModelReadPermission:i.model?.includes(fX.READ)??!1,hasModelWritePermission:i.model?.includes(fX.WRITE)??!1,hasDocReadPermission:i.document?.includes(fX.READ)??!1,hasDocWritePermission:i.document?.includes(fX.WRITE)??!1}}var UYn={de:{BcfComponents:{back:"Zur\xFCck",BcfFilters:{filtersButton:"Filter",filtersTitle:"Filter",priorityLabel:"Priorit\xE4t",statusLabel:"Status",stageLabel:"Phase",assignedToLabel:"Zugewiesen an",creatorsLabel:"Erstellt von",tagsLabel:"Tags",resetButton:"Zur\xFCcksetzen",searchButton:"Suchen",undefined:"Nicht definiert",datePlaceholder:"Erstellungsdatum"},BcfSettings:{title:"BCF-Parameter",text:"Erstellen, f\xFCllen und listen Sie die BCF-Einstellungen auf, die Sie f\xFCr dieses Projekt haben m\xF6chten.",validateButton:"Die BCF-Parameter anerkennen"},BcfStatistics:{emptyText:"F\xFCgen Sie Fragen hinzu, um zugeh\xF6rige Statistiken hier anzuzeigen.",issues:"Probleme",extension:{Priority:"Priorit\xE4t",PriorityNotDefined:"Keine Priorit\xE4t",PriorityTitle:"Priorit\xE4ten",Status:"Status",StatusNotDefined:"Kein Status",StatusTitle:"Status"}},BcfTopicCard:{priority:"Priorit\xE4t",noPriority:"Keine",assignedTo:"Zugewiesen an",elements:"Elemente",notSpecified:"Nicht definiert",see:"Anzeigen"},BcfTopicCreationCard:{text:"Ein neues BCF-Thema erstellen",createBcfSideTitle:"Ein Problem melden"},BcfTopicForm:{dragDropImageText:"Bitte w\xE4hlen Sie eine Datei aus.",addObjectButton:"Objekt",addAnnotationButton:"Annotation",annotationButtonTooltip:"Zu diesem Thema gibt es derzeit keine Ansichten.",addPictureButton:"F\xFCgen Sie ein Bild hinzu.",titlePlaceholder:"Titel *",titleErrorMessage:"Titel fehlt",typeLabel:"Typ",priorityLabel:"Priorit\xE4t",statusLabel:"Status",stageLabel:"Phase",assignedToLabel:"Zugewiesen an",dueDateLabel:"F\xE4lligkeitsdatum (TT.MM.JJJJ)",descriptionLabel:"Beschreibung",labelsLabel:"Tags",createButton:"Best\xE4tigen",updateButton:"\xC4nderungen \xFCbernehmen",modalText:"Sie sind dabei, die Bearbeitung der Ausgabe {Name} zu beenden, aber es gibt noch ungespeicherte \xC4nderungen.",cancelButton:"\xC4nderungen verwerfen",continueButton:"\xC4nderungen fortsetzen",createTitle:"Ein Problem melden",dragDropImageTextTablet:"Foto machen",takeSnapshot:"Mach einen Schnappschuss",importFile:"Eine Datei importieren",searchPlaceholder:"Suchen",emptySearch:"kein Ergebnis",documentsLabel:"Dokumente",documentsCount:"Dokumente \u2013 {count} ausgew\xE4hlte Dokumente",groupsLabel:"Berechtigungen",groupsCount:"Berechtigungen \u2013 {count} ausgew\xE4hlte Gruppen",groupsText:"W\xE4hlen Sie die Benutzergruppen aus, die dieses Thema sehen und damit interagieren d\xFCrfen.",validate:"Best\xE4tigen"},BcfTopicOverview:{openViewer:"Im Viewer \xF6ffnen",openViewerNoModels:"Es sind keine Vorlagen zur Ansicht bereit",elements:"{count} Elemente",noElements:"kein Element",type:"Typ",noTypeSpecified:"Kein Typ angegeben",description:"Beschreibung",noDescriptionProvided:"Keine Beschreibung angegeben",assignedTo:"Zugeteilt an",notAssigned:"Nicht zugewiesen",dueDate:"F\xE4lligkeitsdatum",noDueDate:"Kein F\xE4lligkeitsdatum",informations:"Informationen",status:"Status",noStatusSpecified:"Kein Status angegeben",stage:"Phase",noStageProvided:"Keine Phase angegeben",priority:"Priorit\xE4t",priorityNotDefined:"Nicht definiert",tags:"Tags",noTags:"Keine Tags",commentButton:"Ein Kommentar ver\xF6ffentlichen",deleteText:"Sie l\xF6schen jetzt {Name}",deleteBcfButton:"Dieses BCF l\xF6schen",keepBcfButton:"Dieses BCF beibehalten",author:"Autor"},BcfTopicsTable:{headers:{index:"#",priority:"Priorit\xE4t",status:"Status",title:"Titel",creator:"Autor",date:"Datum"}},BcfTopicActionsCell:{seeButton:"Anzeigen"},BcfTopicComments:{commentButton:"Ein Kommentar verfassen",commentLabel:"Ein Kommentar verfassen",commentText:"Kommentar",cancelButton:"Abbrechen",publishButton:"Ver\xF6ffentlichen",commentsText:"Kommentare",deleteCommentText:"Diesen Kommentar l\xF6schen?",deleteButton:"L\xF6schen",takeSnapshot:"Mach einen Schnappschuss",edited:"bearbeitet"},BcfTopicPriorityCell:{noPriority:"Keine"},SettingCard:{addButton:"ein Element hinzuf\xFCgen",cancelButton:"Abbrechen",validateButton:"Best\xE4tigen",deleteExtensionText:"Diesen Parameter l\xF6schen",deleteButton:"L\xF6schen",title:{Priority:"Priorit\xE4ten",Label:"Tags",Status:"Status",Type:"Typen",Stage:"Phasen"},input:{Priority:"Eine neue Priorit\xE4t hinzuf\xFCgen",Label:"Ein neues Etikett hinzuf\xFCgen",Status:"Einen neuen Status hinzuf\xFCgen",Type:"Einen neuen Typ hinzuf\xFCgen",Stage:"Eine neue Phase hinzuf\xFCgen"},text:{Priority:"Liste der Priorit\xE4ten",Label:"Liste von Tags",Status:"Liste der Status",Type:"Liste der Typen",Stage:"Liste der Phasen"}}}},en:{BcfComponents:{back:"Back",BcfFilters:{filtersButton:"Filters",filtersTitle:"Filters",priorityLabel:"Priority",statusLabel:"Status",stageLabel:"Stage",assignedToLabel:"Assigned to",creatorsLabel:"Created by",tagsLabel:"Tags",resetButton:"Reset",searchButton:"Search",undefined:"Not defined",datePlaceholder:"Creation date"},BcfSettings:{title:"BCF Settings",text:"Create, enter in, and list the BCF settings you would like to have for this project",validateButton:"Validate BCF settings"},BcfStatistics:{emptyText:"Add BCF Topics to start to have some stats here.",issues:"issues",extension:{Priority:"Priority",PriorityNotDefined:"No priority",PriorityTitle:"Priorities",Status:"Status",StatusNotDefined:"No status",StatusTitle:"Status"}},BcfTopicCard:{priority:"Priority",noPriority:"None",assignedTo:"Assigned to",elements:"Elements",notSpecified:"Not specified",see:"See"},BcfTopicCreationCard:{text:"Create a new BCF topic",createBcfSideTitle:"Report a problem"},BcfTopicForm:{dragDropImageText:"Please select a file",addObjectButton:"Object",addAnnotationButton:"Annotation",annotationButtonTooltip:"This topic has no viewpoint",addPictureButton:"Add a picture",titlePlaceholder:"Title *",titleErrorMessage:"Missing title",typeLabel:"Type",priorityLabel:"Priority",statusLabel:"Status",stageLabel:"Stage",assignedToLabel:"Assigned to",dueDateLabel:"Due date",descriptionLabel:"Description",labelsLabel:"Tags",createButton:"Validate",updateButton:"Modify this BCF",modalText:"You are about to quit editing issue {name} but there are unsaved changes.",cancelButton:"Discard changes",continueButton:"Continue editing",createTitle:"Report a problem",dragDropImageTextTablet:"Take a picture",takeSnapshot:"Take a snapshot",importFile:"Import a file",searchPlaceholder:"Search",emptySearch:"No result",documentsLabel:"Add a file",documentsCount:"Files - {count} selected files",groupsLabel:"Permissions",groupsCount:"Permissions - {count} selected groups",groupsText:"You are now setting the access rights: choose the user group(s) that will be exclusively authorized to see and interact with this topic.",validate:"Validate"},BcfTopicOverview:{openViewer:"Open in viewer",openViewerNoModels:"No model to open",elements:"{count} Elements",noElements:"No element",type:"Type",noTypeSpecified:"No type specified",description:"Description",noDescriptionProvided:"No description provided",assignedTo:"Assigned to",notAssigned:"Not assigned",dueDate:"Due date",noDueDate:"No due date",informations:"Informations",status:"Status",noStatusSpecified:"No status specified",stage:"Stage",noStageProvided:"No stage provided",priority:"Priority",priorityNotDefined:"Not defined",tags:"Tags",noTags:"No tags",commentButton:"Post a comment",deleteText:"You are about to delete {name}",deleteBcfButton:"Delete this BCF",keepBcfButton:"Keep this BCF",author:"Author"},BcfTopicsTable:{headers:{index:"#",priority:"Priority",status:"Status",title:"Title",creator:"Author",date:"Date"}},BcfTopicActionsCell:{seeButton:"See"},BcfTopicComments:{commentButton:"Post a comment",commentLabel:"Post a comment",commentText:"Comment",cancelButton:"Cancel",publishButton:"Publish",commentsText:"Comments",deleteCommentText:"Delete this comment ?",deleteButton:"Delete",takeSnapshot:"Take a snapshot",edited:"edited"},BcfTopicPriorityCell:{noPriority:"None"},SettingCard:{addButton:"add an element",cancelButton:"Cancel",validateButton:"Validate",deleteExtensionText:"Remove this setting",deleteButton:"Delete",title:{Priority:"Priorities",Label:"Labels",Status:"Status",Type:"Types",Stage:"Stages"},input:{Priority:"Add a new priority",Label:"Add a new label",Status:"Add new status",Type:"Add a new type",Stage:"Add a new stage"},text:{Priority:"Priority list",Label:"Labels list",Status:"Status list",Type:"Type list",Stage:"Stage list"}}}},es:{BcfComponents:{back:"Volver",BcfFilters:{filtersButton:"Filtros",filtersTitle:"Filtros",priorityLabel:"Prioridad",statusLabel:"Estado",stageLabel:"Fase",assignedToLabel:"Asignado a",creatorsLabel:"Creado por",tagsLabel:"Etiquetas:",resetButton:"Restablecer",searchButton:"Buscar en",undefined:"No definido",datePlaceholder:"Fecha de creaci\xF3n"},BcfSettings:{title:"Par\xE1metros del BCF",text:"Cree, rellene y enumere los par\xE1metros del BCF que desea tener en este proyecto",validateButton:"Validar los par\xE1metros del BCF"},BcfStatistics:{emptyText:"A\xF1ada preguntas para ver las estad\xEDsticas asociadas aqu\xED.",issues:"problemas",extension:{Priority:"Prioridad",PriorityNotDefined:"Sin prioridad",PriorityTitle:"Prioridades",Status:"Estado",StatusNotDefined:"Sin estado",StatusTitle:"Estatutos"}},BcfTopicCard:{priority:"Prioridad",noPriority:"Sin",assignedTo:"Asignado a",elements:"Elementos",notSpecified:"No definido",see:"Ver"},BcfTopicCreationCard:{text:"Crear un nuevo tema BCF",createBcfSideTitle:"Informar de un problema"},BcfTopicForm:{dragDropImageText:"Seleccione un archivo",addObjectButton:"Objeto",addAnnotationButton:"Anotaci\xF3n",annotationButtonTooltip:"Actualmente este tema no posee ning\xFAn punto de vista",addPictureButton:"A\xF1adir una imagen",titlePlaceholder:"T\xEDtulo *",titleErrorMessage:"Falta el t\xEDtulo",typeLabel:"Tipo",priorityLabel:"Prioridad",statusLabel:"Estado",stageLabel:"Fase",assignedToLabel:"Asignado a",dueDateLabel:"Fecha de vencimiento (DD/MM/AAAA)",descriptionLabel:"Descripci\xF3n",labelsLabel:"Etiquetas",createButton:"Validar",updateButton:"Modificar este BCF",modalText:"Est\xE1 a punto de salir de la edici\xF3n del problema de {name} pero hay cambios sin guardar.",cancelButton:"Cancelar los cambios",continueButton:"Continuar con los cambios",createTitle:"Informar de un problema",dragDropImageTextTablet:"Tomar una fotograf\xEDa",takeSnapshot:"Tomar un snapshot",importFile:"Importar un archivo",searchPlaceholder:"Buscar",emptySearch:"No hay resultados"},BcfTopicOverview:{openViewer:"Abrir en el visor",openViewerNoModels:"No hay ning\xFAn modelo listo para la visualizaci\xF3n",elements:"{count} Elementos",noElements:"Ning\xFAn elemento",type:"Tipo",noTypeSpecified:"No se especifica el tipo",description:"Descripci\xF3n",noDescriptionProvided:"No hay descripci\xF3n",assignedTo:"Asignado a",notAssigned:"No asignado",dueDate:"Plazo",noDueDate:"Sin fecha de vencimiento",informations:"Informaci\xF3n",status:"Estado",noStatusSpecified:"No se especifica el estado",stage:"Fase",noStageProvided:"No se indica ninguna fase",priority:"Prioridad",priorityNotDefined:"No definido",tags:"Etiquetas",noTags:"Sin etiquetas",commentButton:"Publicar un comentario",deleteText:"Est\xE1s a punto de borrar {name}",deleteBcfButton:"Borrar este BCF",keepBcfButton:"Mantenga este BCF",author:"Autor"},BcfTopicsTable:{headers:{index:"#",priority:"Prioridad",status:"Estado",title:"T\xEDtulo",creator:"Autor",date:"Fecha"}},BcfTopicActionsCell:{seeButton:"Ver"},BcfTopicComments:{commentButton:"Publicar un comentario",commentLabel:"Publicar un comentario",commentText:"Comentario",cancelButton:"Cancelar",publishButton:"Publicar",commentsText:"comentarios",deleteCommentText:"\xBFBorrar este comentario?",deleteButton:"Borrar",takeSnapshot:"Tomar un snapshot"},BcfTopicPriorityCell:{noPriority:"Sin"},SettingCard:{addButton:"a\xF1adir un elemento",cancelButton:"Cancelar",validateButton:"Validar",deleteExtensionText:"Borrar esta configuraci\xF3n",deleteButton:"Borrar",title:{Priority:"Prioridades",Label:"Etiquetas:",Status:"Estatutos",Type:"Tipos",Stage:"Fases"},input:{Priority:"A\xF1adir una nueva prioridad",Label:"A\xF1adir una nueva etiqueta",Status:"A\xF1adir un nuevo estado",Type:"A\xF1adir un nuevo tipo",Stage:"A\xF1adir una nueva fase"},text:{Priority:"Lista de prioridades",Label:"Lista de etiquetas",Status:"Lista de estatutos",Type:"Lista de tipos",Stage:"Lista de fases"}}}},fr:{BcfComponents:{back:"Retour",BcfFilters:{filtersButton:"Filtres",filtersTitle:"Filtres",priorityLabel:"Priorit\xE9",statusLabel:"Statut",stageLabel:"Phase",assignedToLabel:"Assign\xE9 \xE0",creatorsLabel:"Cr\xE9\xE9 par",tagsLabel:"Tags",resetButton:"R\xE9initialiser",searchButton:"Rechercher",undefined:"Non d\xE9fini",datePlaceholder:"Date de cr\xE9ation"},BcfSettings:{title:"Param\xE8tres BCF",text:"Cr\xE9ez, renseignez et listez les param\xE8tres BCF que vous souhaitez avoir sur ce projet",validateButton:"Valider les param\xE8tres BCF"},BcfStatistics:{emptyText:"Ajoutez des questions pour voir les statistiques associ\xE9es ici.",issues:"probl\xE8mes",extension:{Priority:"Priorit\xE9",PriorityNotDefined:"Aucune priorit\xE9",PriorityTitle:"Priorit\xE9s",Status:"Statut",StatusNotDefined:"Aucun statut",StatusTitle:"Statuts"}},BcfTopicCard:{priority:"Priorit\xE9",noPriority:"Aucune",assignedTo:"Assign\xE9 \xE0",elements:"{n} \xC9lements",notSpecified:"Non d\xE9fini",see:"Voir"},BcfTopicCreationCard:{text:"Cr\xE9er un nouveau topic BCF",createBcfSideTitle:"Signaler un probl\xE8me"},BcfTopicForm:{dragDropImageText:"Veuillez s\xE9lectionner un fichier",addObjectButton:"Objet",addAnnotationButton:"Annotation",annotationButtonTooltip:"Ce topic ne poss\xE8de actuellement aucun point de vue",addPictureButton:"Ajouter une image",titlePlaceholder:"Titre *",titleErrorMessage:"Titre manquant",typeLabel:"Type",priorityLabel:"Priorit\xE9",statusLabel:"Statut",stageLabel:"Phase",assignedToLabel:"Assign\xE9 \xE0",dueDateLabel:"Date d'\xE9ch\xE9ance",descriptionLabel:"Description",labelsLabel:"Tags",createButton:"Valider",updateButton:"Modifier ce BCF",modalText:"Vous \xEAtes sur le point de quitter l'\xE9dition de l'issue {name} mais il y'a des modifications non enregistr\xE9es.",cancelButton:"Annuler les modifications",continueButton:"Continuer les modifications",createTitle:"Signaler un probl\xE8me",dragDropImageTextTablet:"Prendre une photo",takeSnapshot:"Prendre un snapshot",importFile:"Importer un fichier",searchPlaceholder:"Rechercher",emptySearch:"Pas de r\xE9sultat",documentsLabel:"Documents",documentsCount:"Documents - {count} documents s\xE9lectionn\xE9s",groupsLabel:"Permissions",groupsCount:"Permissions - {count} groupes s\xE9lectionn\xE9s",groupsText:"S\xE9lectionner les groupes utilisateur qui peuvent voir ce topic et int\xE9ragir avec.",validate:"Valider"},BcfTopicOverview:{openViewer:"Ouvrir dans le viewer",openViewerNoModels:"Il n'y a aucun mod\xE8le pr\xEAt pour une visualisation",elements:"{count} \xC9lements",noElements:"Aucun \xE9l\xE9ment concern\xE9",type:"Type",noTypeSpecified:"Pas de type sp\xE9cifi\xE9",description:"Description",noDescriptionProvided:"Pas de description renseign\xE9e",assignedTo:"Assign\xE9 \xE0",notAssigned:"Non assign\xE9",dueDate:"\xC9ch\xE9ance",noDueDate:"Pas de date d'\xE9ch\xE9ance",informations:"Informations",status:"Statut",noStatusSpecified:"Pas de statut sp\xE9cifi\xE9",stage:"Phase",noStageProvided:"Pas de phase renseign\xE9e",priority:"Priorit\xE9",priorityNotDefined:"Non d\xE9fini",tags:"Tags",noTags:"Pas de tags",commentButton:"Poster un commentaire",deleteText:"Vous \xEAtes sur le point de supprimer {name}",deleteBcfButton:"Supprimer ce BCF",keepBcfButton:"Conserver ce BCF",author:"Auteur"},BcfTopicsTable:{headers:{index:"#",priority:"Priorit\xE9",status:"Statut",title:"Titre",creator:"Auteur",date:"Date"}},BcfTopicActionsCell:{seeButton:"Voir"},BcfTopicComments:{commentButton:"Poster un commentaire",commentLabel:"Poster un commentaire",commentText:"Commentaire",cancelButton:"Annuler",publishButton:"Publier",commentsText:"commentaires",deleteCommentText:"Supprimer ce commentaire ?",deleteButton:"Supprimer",takeSnapshot:"Prendre un snapshot",edited:"edit\xE9"},BcfTopicPriorityCell:{noPriority:"Aucune"},SettingCard:{addButton:"ajouter un \xE9l\xE9ment",cancelButton:"Annuler",validateButton:"Valider",deleteExtensionText:"Supprimmer ce param\xE8tre",deleteButton:"Supprimer",title:{Priority:"Priorit\xE9s",Label:"Tags",Status:"Statuts",Type:"Types",Stage:"Phases"},input:{Priority:"Ajouter une nouvelle priorit\xE9",Label:"Ajouter un nouveau label",Status:"Ajouter un nouveau statut",Type:"Ajouter un nouveau type",Stage:"Ajouter une nouvelle phase"},text:{Priority:"Liste des priorit\xE9s",Label:"Liste des tags",Status:"Liste des statuts",Type:"Liste des types",Stage:"Liste des phases"}}}},it:{BcfComponents:{back:"Indietro",BcfFilters:{filtersButton:"Filtri",filtersTitle:"Filtri",priorityLabel:"Priorit\xE0",statusLabel:"Stato",stageLabel:"Fase",datePlaceholder:"Data di creazione",assignedToLabel:"Assegnato a",creatorsLabel:"Creato da",tagsLabel:"Etichette",resetButton:"Ripristina",searchButton:"Cerca",undefined:"Non definito"},BcfSettings:{title:"Parametri BCF",text:"Creare, notificare e elencare i parametri BCF che si desidera avere su questo progetto",validateButton:"Conferma i parametri BCF"},BcfStatistics:{emptyText:"Aggiungi delle domande per vedere le statistiche associate qui.",issues:"problemi",extension:{Priority:"Priorit\xE0",PriorityNotDefined:"Nessuna priorit\xE0",PriorityTitle:"Priorit\xE0",Status:"Stato",StatusNotDefined:"Nessuno stato",StatusTitle:"Stati"}},BcfTopicCard:{priority:"Priorit\xE0",noPriority:"Nessuno",assignedTo:"Assegnato a",elements:"Elementi",noElements:"0 elementi",notSpecified:"Non definito",see:"Visualizza"},BcfTopicCreationCard:{text:"Crea un nuovo topic BCF",createBcfSideTitle:"Segnala un problema"},BcfTopicForm:{dragDropImageText:"Selezionare un file",addObjectButton:"Oggetto",addAnnotationButton:"Annotazione",annotationButtonTooltip:"Attualmente questo argomento non presenta alcun punto di vista",addPictureButton:"Aggiungere un'immagine",titlePlaceholder:"Titolo *",titleErrorMessage:"Titolo mancante",typeLabel:"Tipo",priorityLabel:"Priorit\xE0",statusLabel:"Stato",stageLabel:"Fase",assignedToLabel:"Assegnato a",dueDateLabel:"Data di scadenza",descriptionLabel:"Descrizione",labelsLabel:"Tag",createButton:"Conferma",updateButton:"Modificare questo BCF",modalText:"State per abbandonare la modifica di {name} ma ci sono modifiche non salvate.",cancelButton:"Annullare le modifiche",continueButton:"Continuare le modifiche",createTitle:"Segnala un problema"},BcfTopicOverview:{openViewer:"Apri nel visualizzatore",openViewerNoModels:"Non esistono modelli pronti per la visualizzazione",elements:"{count} Elementi",noElements:"Nessun elemento",type:"Tipo",noTypeSpecified:"Nessun tipo specificato",description:"Descrizione",noDescriptionProvided:"Nessuna descrizione inserita",assignedTo:"Assegnato a",notAssigned:"Non assegnato",dueDate:"Scadenza",noDueDate:"Nessuna data di scadenza",informations:"Informazioni",status:"Stato",noStatusSpecified:"Nessuno stato specificato",stage:"Fase",noStageProvided:"Nessuna fase inserita",priority:"Priorit\xE0",priorityNotDefined:"Non definita",tags:"Etichette",noTags:"Nessuna etichetta",commentButton:"Pubblica un commento",deleteText:"Stai per eliminare {name}",deleteBcfButton:"Elimina questo BCF",keepBcfButton:"Conserva questo BCF",author:"Autore"},BcfTopicsTable:{headers:{index:"#",priority:"Priorit\xE0",status:"Stato",title:"Titolo",creator:"Autore",date:"Data"}},BcfTopicActionsCell:{seeButton:"Visualizza"},BcfTopicComments:{commentButton:"Pubblica un commento",commentLabel:"Pubblica un commento",commentText:"Commento",cancelButton:"Annulla",publishButton:"Pubblica",commentsText:"commenti",deleteCommentText:"Eliminare questo commento?",deleteButton:"Elimina"},BcfTopicPriorityCell:{noPriority:"Nessuno"},SettingCard:{addButton:"aggiungi un elemento",cancelButton:"Annulla",validateButton:"Conferma",deleteExtensionText:"Elimina questo parametro",deleteButton:"Elimina",title:{Priority:"Priorit\xE0",Label:"Etichette",Status:"Stati",Type:"Tipi",Stage:"Fasi"},input:{Priority:"Aggiungi una nuova priorit\xE0",Label:"Aggiungi una nuova etichetta",Status:"Aggiungi un nuovo stato",Type:"Aggiungi un nuovo tipo",Stage:"Aggiungi una nuova fase"},text:{Priority:"Elenco delle priorit\xE0",Label:"Elenco delle etichette",Status:"Elenco degli stati",Type:"Elenco dei tipi",Stage:"Elenco delle fasi"}}}}},HYn=({apiClient:e,fetchUsers:t,i18nPlugin:i}={})=>({install(n){e?Ul.setup({apiClient:e,fetchUsers:t}):console.error("[BCF Components Plugin] No api client provided. You must provide an api client for the components to work properly."),i?Object.entries(UYn).forEach(([s,r])=>{i.global.mergeLocaleMessage(s,r)}):console.warn("[BCF Components Plugin] No i18n instance provided. You should either provide an i18n instance or define your own translations in order have text displayed properly."),Object.entries(yNt).forEach(([s,r])=>{n.component(s,r)})}}),GYn={de:{BuildingMaker:{title:"Building Maker",back:"Zur\xFCck",list:{text:"Erstellen und bearbeiten Sie die Etagen und laden Sie anschlie\xDFend Ihre PDFs herunter.",createButton:"Neues Projekt",updateButton:"Umbenennen",deleteButton:"L\xF6schen"},form:{text:"Erstellen und bearbeiten Sie die Etagen und laden Sie anschlie\xDFend Ihre PDFs herunter.",input:"Name des Geb\xE4udes",error:"Ung\xFCltiger Name",createButton:"Erstellen",updateButton:"Best\xE4tigen"},view:{addStoreyButton:"Etage",addPlanButton:"Grundriss",closeButton:"Fertigstellen",submitFilesButton:"Best\xE4tigen"},storeyForm:{title:"Neue Etage",input:"Name",error:"Ung\xFCltiger Name",cancelButton:"Abbrechen",submitButton:"Best\xE4tigen"}},FileManager:{creationFormTitle:"Ordner erstellen",renameFormPlaceholder:"Datei- / Ordnernam",nameInputPlaceholder:"Ordnername",emptyFolder:"Dieser Ordner ist leer",newFolderSuccess:"Neuer Ordner erstellt",renameFolderSuccess:"Umbenannter Ordner",deleteFolderSuccess:"Ordner gel\xF6scht",newFileSuccess:"Datei hinzugef\xFCgt",renameFileSuccess:"Umbenannte Datei",deleteFileSuccess:"Datei gel\xF6scht",nameInputErrorMessage:"Ung\xFCltiger name",cancel:"Abbrechen",submit:"Best\xE4tigen",buttonText:"Neuer Ordner",addFileButtonText:"Datei laden",rename:"Umbenennen",view:"Sehen",download:"Herunterladen",delete:"L\xF6schen",deleteTitle:"Dateien l\xF6schen",deleteDetail:"Sie sind im Begriff, die folgenden Dateien / Ordner endg\xFCltig zu l\xF6schen"}},en:{BIMDataComponents:{t:{back:"Back",cancel:"Cancel",create:"Create",delete:"Delete",download:"Download",finish:"Finish",rename:"Rename",search:"Search",see:"View",storey:"Storey",validate:"Validate"}},BuildingMaker:{title:"Building Maker",list:{text:"Create and edit storeys, then download your PDFs.",new:"New project"},form:{input:"Building name",error:"Invalid"},view:{addStorey:"Add Storey",addFile:"Add File",addPlan:"Add Plan"},storeyForm:{title:"New storey",input:"Name",error:"Invalid name"}},FileManager:{creationFormTitle:"Create folder",renameFormPlaceholder:"Folder/File name",nameInputPlaceholder:"Folder name",emptyFolder:"This folder is empty",newFolderSuccess:"New folder created",renameFolderSuccess:"Folder renamed",deleteFolderSuccess:"Folder deleted",newFileSuccess:"File added",renameFileSuccess:"File renamed",deleteFileSuccess:"File deleted",nameInputErrorMessage:"Invalid name",buttonText:"New folder",addFileButtonText:"Upload a file",deleteTitle:"Deleting Files",deleteDetail:"You are about to permanently delete the following files / folders",dmsRoot:"Root of the project's DMS",pdfPageSelectorTitle:"Select a page"},MetaBuildingStructure:{title:"Meta-Building Structure",tab:{structure:"Structure",zones:"Zones",equipments:"Equipments"},StoreySelector:{placeholder:"Select a storey"}},PhotosphereBuilding:{title:"Photosphere Building"}},es:{BuildingMaker:{title:"Building Maker",back:"Vuelta",list:{text:"Cree y edite los pisos despu\xE9s cargue los PDF.",createButton:"Nuevo proyecto",updateButton:"Renombrar",deleteButton:"Suprimir"},form:{text:"Cree y edite los pisos despu\xE9s cargue los PDF.",input:"Nombre del edificio",error:"Nombre no v\xE1lido",createButton:"Crear",updateButton:"Validar"},view:{addStoreyButton:"Piso",addPlanButton:"Plano",closeButton:"Terminar",submitFilesButton:"Validar"},storeyForm:{title:"Nuevo piso",input:"Nombre",error:"Nombre no v\xE1lido",cancelButton:"Anular",submitButton:"Validar"}},FileManager:{creationFormTitle:"Crear un archivo",renameFormPlaceholder:"Nombre de archivo / carpeta",nameInputPlaceholder:"Nombre de la carpeta",emptyFolder:"Esta carpeta est\xE1 vac\xEDa",newFolderSuccess:"Nueva carpeta creada",renameFolderSuccess:"Carpeta renombrada",deleteFolderSuccess:"Carpeta eliminada",newFileSuccess:"Archivo agregado",renameFileSuccess:"Archivo renombrado",deleteFileSuccess:"Archivo eliminado",nameInputErrorMessage:"Nombre inv\xE1lida",cancel:"Cancelar",submit:"Validar",buttonText:"Carpeta nueva",addFileButtonText:"Cargar un archivo",rename:"Renombrar",view:"Ver",download:"Descargar",delete:"Borrar",deleteTitle:"Eliminar archivos",deleteDetail:"Est\xE1 a punto de eliminar permanentemente los siguientes archivos / carpetas"}},fr:{BIMDataComponents:{t:{back:"Retour",cancel:"Annuler",create:"Cr\xE9er",delete:"Supprimer",download:"T\xE9l\xE9charger",finish:"Terminer",rename:"Renommer",search:"Rechercher",see:"Voir",storey:"\xC9tage",validate:"Valider"}},BuildingMaker:{title:"Building Maker",list:{text:"Cr\xE9ez et \xE9ditez les \xE9tages puis t\xE9l\xE9chagez vos PDF.",new:"Nouveau projet"},form:{input:"Nom du b\xE2timent",error:"Nom invalide"},view:{addStorey:"Ajouter un \xC9tage",addFile:"Ajouter un fichier",addPlan:"Ajouter un plan"},storeyForm:{title:"Nouvel \xE9tage",input:"Nom",error:"Nom invalide"}},FileManager:{creationFormTitle:"Cr\xE9er un dossier",renameFormPlaceholder:"Nom du fichier/dosier",nameInputPlaceholder:"Nom du dossier",emptyFolder:"Ce dossier est vide",newFolderSuccess:"Nouveau dossier cr\xE9\xE9",renameFolderSuccess:"Dossier renomm\xE9",deleteFolderSuccess:"Dossier supprim\xE9",newFileSuccess:"Fichier ajout\xE9",renameFileSuccess:"Fichier renomm\xE9",deleteFileSuccess:"Fichier supprim\xE9",nameInputErrorMessage:"Nom invalide",buttonText:"Nouveau dossier",addFileButtonText:"Charger un fichier",deleteTitle:"Supression de fichiers",deleteDetail:"Vous \xEAtes sur le point de supprimer d\xE9finitivement les fichiers/dossiers suivants",dmsRoot:"Racine de la GED du projet",pdfPageSelectorTitle:"S\xE9lectionner une page"},MetaBuildingStructure:{title:"Structure M\xE9ta-Building",tab:{structure:"Structure",zones:"Zones",equipments:"\xC9quipements"},StoreySelector:{placeholder:"S\xE9lectionner un \xE9tage"}},PhotosphereBuilding:{title:"Photosph\xE8re Building"}},it:{BuildingMaker:{title:"Building Maker",back:"Reso",list:{text:"Crea e modifica i piani e poi scarica i tuoi PDF.",createButton:"Nuovo progetto",updateButton:"Rinominare",deleteButton:"Eliminare"},form:{text:"Crea e modifica i piani e poi scarica i tuoi PDF.",input:"Nome della costruzione",error:"Nome non corretto",createButton:"Creare",updateButton:"Convalidare"},view:{addStoreyButton:"Piano",addPlanButton:"Mappa",closeButton:"Finire",submitFilesButton:"Convalidare"},storeyForm:{title:"Nuovo piano",input:"Nome",error:"Nome non corretto",cancelButton:"Annullare",submitButton:"Convalidare"}},FileManager:{creationFormTitle:"Crea una cartella",renameFormPlaceholder:"Nome file/cartella",nameInputPlaceholder:"Nome della cartella",emptyFolder:"Questa cartella \xE8 vuota",newFolderSuccess:"Nuova cartella creata",renameFolderSuccess:"Cartella rinominata",deleteFolderSuccess:"Cartella eliminata",newFileSuccess:"File aggiunto",renameFileSuccess:"File rinominato",deleteFileSuccess:"File cancellato",nameInputErrorMessage:"Nome non valido",cancel:"Annulla",submit:"Invia",buttonText:"Nuova cartella",addFileButtonText:"Carica un file",rename:"Rinominare",view:"Vedere",download:"Scaricare",delete:"Cancellare",deleteTitle:"Eliminazione di file",deleteDetail:"Stai per eliminare definitivamente i seguenti file/cartelle"}}},VYn=({i18nPlugin:e}={})=>({install(t){e?Object.entries(GYn).forEach(([i,n])=>{e.global.mergeLocaleMessage(i,n)}):console.warn("[BIMData Components Plugin] No i18n instance provided. You should either provide an i18n instance or define your own translations in order have text displayed properly."),Object.entries(z9n).forEach(([i,n])=>{t.component(i,n)})}}),jYn={beforeMount(e,t){if(typeof t.value!="function")throw Error(`click away directive needs function, got ${typeof t.value}`);e.clickAwayHandler=i=>{(i.path||i.composedPath&&i.composedPath()).find(n=>n===e)||t.value()},window.addEventListener("mousedown",e.clickAwayHandler,!0)},unmounted(e){window.removeEventListener("mousedown",e.clickAwayHandler,!0),delete e.clickAwayHandler}},zYn=yd({BIMDataClickAway:()=>rS,BIMDataClickInputAway:()=>jYn}),qYn=e=>({install(t){Object.entries(Nci).forEach(([i,n])=>{e&&e.excludedComponents&&e.excludedComponents.length>0&&e.excludedComponents.includes(i)||(!e||!e.includedComponents||e.includedComponents.includes(i))&&t.component(i,n)}),(!e||e.directives!==!1)&&Object.entries(zYn).forEach(([i,n])=>t.directive(i.split("BIMData")[1],n))}}),WYn={name:"LiWrapper",render(){return Zc("li",this.$slots.default())}};function QYn(e,t){var i=new Set([]);return e.forEach(n=>{t.has(n)||i.add(n)}),i}var Yx=JA("id"),XYn=({contextMenu:e,objects:t=[],state:i=e.$viewer.state,pictos:n})=>[{name:"selectAll",get group(){return e.groupPositions.select},position:1,get label(){return e.$t("context_menu.select_all")},get picto(){return n.get(this.name)},execute:()=>i.selectObjects(t.filter(Q6(Il("visible"),lF("selected"))).map(Yx)),predicate:()=>t.some(Q6(Il("visible"),lF("selected")))},{name:"deselectAll",get group(){return e.groupPositions.select},position:2,get label(){return e.$t("context_menu.deselect_all")},get picto(){return n.get(this.name)},execute:()=>i.deselectObjects(t.filter(Il("selected")).map(Yx)),predicate:()=>t.some(Il("selected"))},{name:"selectSimilar",get group(){return e.groupPositions.select},position:3,get label(){return e.$t("context_menu.select_similar")},get picto(){return n.get(this.name)},execute(){let s=t.filter(r=>r.visible&&r.type===this.selectedObject.type&&r.id!==this.selectedObject.id).map(Yx);i.selectObjects(s)},selectedObject:null,predicate(){let s=t.filter(Q6(Il("visible"),Il("selected")));return s.length===1&&s[0].type!==void 0?(this.selectedObject=s[0],!0):(this.selectedObject=null,!1)}},{name:"reverseSelection",get label(){return e.$t("context_menu.reverse_selection")},get group(){return e.groupPositions.select},position:4,execute:()=>{let s=new Set(t.filter(Il("selected")).map(Yx)),r=new Set(t.filter(Il("visible")).map(Yx));i.selectObjects(Array.from(QYn(r,s)),{exclusive:!0})},predicate:()=>t.some(Q6(lF("selected"),Il("visible")))&&t.some(Q6(Il("selected"),Il("visible")))},{name:"showAll",get group(){return e.groupPositions.visibility},position:1,get label(){return e.$t("context_menu.show_all")},get picto(){return n.get(this.name)},execute:()=>i.showObjects(t.filter(lF("visible")).map(Yx)),predicate:()=>t.some(lF("visible"))},{name:"hide",get group(){return e.groupPositions.visibility},position:2,get label(){return e.$t("global.hide")},get picto(){return n.get(this.name)},objectsToHide:null,execute(){let s=this.objectsToHide.filter(Il("selected"));s.length>0&&i.deselectObjects(s.map(Yx)),i.hideObjects(this.objectsToHide.map(Yx))},predicate(){return this.objectsToHide=t.filter(Q6(Il("selected"),Il("visible"))),this.objectsToHide.length>0}},{name:"hideAll",get group(){return e.groupPositions.visibility},position:3,get label(){return e.$t("context_menu.hide_all")},execute:()=>{let s=t.filter(Il("visible"));s.some(Il("selected"))&&i.deselectObjects(s.filter(Il("selected")).map(Yx)),i.hideObjects(s.map(Yx))},predicate:()=>t.some(Il("visible"))}].filter(s=>s.predicate()),KYn={components:{LiWrapper:WYn},inject:["$viewer"],data(){return{enabled:!0,defaultPrevented:!1,displayed:!1,top:null,bottom:null,left:null,width:200,nextCommandId:1,currentCommands:[],contextCommands:[],registeredCommands:[],groupPositions:{select:10,visibility:20},asyncPredicateRunning:!1,activeComponentCommand:null,subMenuPosition:null,subMenuPinned:!1,componentOpenDelay:250,componentCloseDelay:120,subMenuOffset:6}},computed:{position(){return{top:this.top===null?"unset":this.top+"px",bottom:this.bottom===null?"unset":this.bottom+"px",left:this.left===null?"unset":this.left+"px",width:this.width+"px"}}},watch:{displayed(e){e?document.addEventListener("keydown",this.onKeyDown):document.removeEventListener("keydown",this.onKeyDown)},enabled(e){e||(this.resetTransientState(),this.displayed=!1)}},created(){this.$viewer.contextMenu=this,this.asyncPredicates=new Set,this.componentOpenTimer=null,this.componentCloseTimer=null},beforeUnmount(){this.clearComponentTimers()},methods:{resetTransientState(){this.currentCommands=[],this.contextCommands=[],this.defaultPrevented=!1,this.asyncPredicates.clear(),this.asyncPredicateRunning=!1,this.originEvent=null},onKeyDown(e){e.key==="Escape"&&this.away()},setPosition(e){let t=(document.fullscreenElement?document.fullscreenElement:this.$parent.$el).getBoundingClientRect();this.left=e.clientX-t.left,this.top=e.clientY-t.top,this.left+this.width>t.width&&(this.left-=this.width),e.clientY>t.top+t.height/2?(this.bottom=t.height-this.top,this.top=null):this.bottom=null},typeCheckCommand(e={}){let t=null;if((!e.execute||typeof e.execute!="function")&&!e.component&&(t="Cannot register context menu command. A command must have an execute function or a component property."),e.label||(t="Cannot register context menu command. A command must have a label."),t)throw console.error(t),Error(t);return e.id=this.nextCommandId++,e.component&&tm(e.component),e},open(e){if(e.preventDefault(),this.closeComponentMenu(),!this.enabled){this.resetTransientState(),this.displayed=!1;return}this.currentCommands=[],this.setPosition(e),this.originEvent=e,this.setCurrentCommands(),this.groupCurrentCommands(),this.defaultPrevented=!1,this.displayed=!0,document.fullscreenElement?(this.$el.parentElement.removeChild(this.$el),this.adoptiveParent=document.fullscreenElement,this.adoptiveParent.appendChild(this.$el)):this.adoptiveParent&&this.adoptiveParent!==this.$viewer.globalContext.el&&(this.adoptiveParent.removeChild(this.$el),this.$viewer.globalContext.el.appendChild(this.$el),this.adoptiveParent=null)},setCurrentCommands(){this.asyncPredicates.clear(),this.asyncPredicateRunning=!1,this.defaultPrevented||this.registeredCommands.forEach(async e=>{if(typeof e.predicate=="function"){let t=e.predicate(this.$viewer.globalContext.activeLocalContext);if(t===!0)this.currentCommands.push(e);else if(typeof t?.then=="function"){this.asyncPredicates.add(t),this.asyncPredicateRunning=!0;let i=await t;this.asyncPredicates.has(t)&&(this.asyncPredicates.delete(t),this.asyncPredicateRunning=this.asyncPredicates.size>0,i===!0&&this.currentCommands.push(e))}}else this.currentCommands.push(e)}),this.currentCommands.push(...this.contextCommands),this.contextCommands=[]},getDefaultCommands({objects:e=[],state:t=this.$viewer.state,context:i=null}){let n=new Map;return i&&this.$viewer.shortcutManager.getShortcuts(i).forEach(s=>n.set(s.name,s.key)),XYn({contextMenu:this,objects:e,state:t,pictos:n})},executeCommand(e,t){if(e.execute){e.execute(this.originEvent),this.closeComponentMenu(),this.displayed=!1;return}e.component&&this.openComponentMenu(e,this.eventLine(t),!0)},away(){this.close()},close(){this.closeComponentMenu(),this.displayed=!1},clearComponentTimers(){this.componentOpenTimer&&=(clearTimeout(this.componentOpenTimer),null),this.componentCloseTimer&&=(clearTimeout(this.componentCloseTimer),null)},eventLine(e){return e?.currentTarget||e?.target||null},onCommandMouseEnter(e,t){if(!e.component){this.subMenuPinned||this.scheduleCloseComponentMenu();return}if(this.componentCloseTimer&&=(clearTimeout(this.componentCloseTimer),null),this.componentOpenTimer&&=(clearTimeout(this.componentOpenTimer),null),this.activeComponentCommand&&this.activeComponentCommand.id===e.id&&!this.subMenuPinned)return;let i=this.eventLine(t);this.componentOpenTimer=setTimeout(()=>{this.openComponentMenu(e,i,!1)},this.componentOpenDelay)},onCommandMouseLeave(e){e.component&&!this.subMenuPinned&&this.scheduleCloseComponentMenu()},onSubMenuMouseEnter(){this.componentCloseTimer&&=(clearTimeout(this.componentCloseTimer),null)},onSubMenuMouseLeave(){this.subMenuPinned||this.scheduleCloseComponentMenu()},scheduleCloseComponentMenu(){this.componentCloseTimer&&clearTimeout(this.componentCloseTimer),this.componentCloseTimer=setTimeout(()=>{this.subMenuPinned||this.closeComponentMenu()},this.componentCloseDelay)},getPositioningParent(){return document.fullscreenElement?document.fullscreenElement:this.$el?.parentElement||this.$parent.$el},async openComponentMenu(e,t,i=!1){t&&(this.clearComponentTimers(),this.activeComponentCommand=e,this.subMenuPinned=i,this.subMenuPosition={left:"0px",top:"0px"},await this.$nextTick(),this.placeComponentMenu(t))},placeComponentMenu(e){let t=this.$refs.subMenuElement,i=this.getPositioningParent(),n=this.$el;if(!t||!i||!n||!e?.getBoundingClientRect)return;let s=i.getBoundingClientRect(),r=n.getBoundingClientRect(),o=e.getBoundingClientRect(),a=t.getBoundingClientRect(),l=this.subMenuOffset,c=s.left-r.left,d=s.right-r.left-a.width,u=o.right-r.left+l,h=o.left-r.left-a.width-l;u>d&&h>=c&&(u=h),u=Math.max(c,Math.min(u,d));let p=s.top-r.top,f=s.bottom-r.top-a.height,m=o.top-r.top,g=o.bottom-r.top-a.height;m>f&&g>=p&&(m=g),m=Math.max(p,Math.min(m,f)),this.subMenuPosition={left:u+"px",top:m+"px"}},closeComponentMenu(){this.clearComponentTimers(),this.activeComponentCommand=null,this.subMenuPosition=null,this.subMenuPinned=!1},groupCurrentCommands(){let e=new Map;this.currentCommands.forEach(i=>{(i.group===null||i.group===void 0)&&(i.group=0),e.has(i.group)?e.get(i.group).push(i):e.set(i.group,[i])}),e.forEach(i=>i.sort((n,s)=>(n.position=n.position||0,s.position=s.position||0,n.position-s.position)));let t=[...e.keys()].sort((i,n)=>i-n).map(i=>e.get(i)).flat();this.currentCommands=t},isGroupIntersection(e){if(e===0)return!1;let t=this.currentCommands[e-1],i=this.currentCommands[e];return t.group<i.group},registerContextCommand(e){let t=this.typeCheckCommand(e);return this.contextCommands.push(t),e.id},registerCommand(e){let t=this.typeCheckCommand(e);return this.registeredCommands.push(t),e.id},unregisterCommand(e){return this.registeredCommands.find(t=>t.id===e)?(this.registeredCommands=this.registeredCommands.filter(t=>t.id!==e),!0):!1},preventDefault(){this.defaultPrevented=!0}}},YYn={key:0,class:"separator"},ZYn={class:"menu-text"},JYn={key:1,class:"menu-picto"},$Yn={key:1,class:"context-menu__spinner"};function eZn(e,t,i,n,s,r){let o=se("BIMDataIconChevron"),a=se("LiWrapper"),l=se("BIMDataSpinner"),c=da("click-away");return s.displayed&&(s.currentCommands.length||s.asyncPredicateRunning)?os((Q(),we("ul",{key:0,class:"bimdata-list context-menu",style:pi(r.position)},[(Q(!0),we(yn,null,Fs(s.currentCommands,(d,u)=>(Q(),mt(a,{key:d.label,class:"context-menu__element",onClick:h=>r.executeCommand(d,h),onMouseenter:h=>r.onCommandMouseEnter(d,h),onMouseleave:h=>r.onCommandMouseLeave(d)},{default:Xe(()=>[r.isGroupIntersection(u)?(Q(),we("div",YYn)):ii("",!0),P("div",ZYn,rt(d.label),1),!d.component&&d.picto?(Q(),we("span",JYn,rt(d.picto),1)):d.component?(Q(),mt(o,{key:2,size:"xxxs",class:"fill-primary"})):ii("",!0)]),_:2},1032,["onClick","onMouseenter","onMouseleave"]))),128)),s.activeComponentCommand?(Q(),we("li",{key:0,ref:"subMenuElement",class:"context-menu__floating-sub-menu",style:pi(s.subMenuPosition),onMouseenter:t[0]||=(...d)=>r.onSubMenuMouseEnter&&r.onSubMenuMouseEnter(...d),onMouseleave:t[1]||=(...d)=>r.onSubMenuMouseLeave&&r.onSubMenuMouseLeave(...d)},[(Q(),mt(Yc(s.activeComponentCommand.component),IE(iS(s.activeComponentCommand.componentProps||{})),null,16))],36)):ii("",!0),s.asyncPredicateRunning?(Q(),we("li",$Yn,[ue(l)])):ii("",!0)],4)),[[c,r.away]]):ii("",!0)}var tZn=Ye(KYn,[["render",eZn],["__scopeId","data-v-ffd539d6"]]),iZn={name:"ViewerHeader",inject:["$viewer"],props:{visible:{type:Boolean,default:!0}},setup(){let e=xn("$viewer"),t=yp(new Map);return{logo:e.uiSettings.bimdataLogo!==!1,version:e.uiSettings.version===!1?null:e.version,headerContent:t,headerRightContentComponents:ji(()=>Array.from(t.values()).filter(i=>i.position==="right").sort((i,n)=>i.order-n.order).map(i=>i.component)),headerLeftContentComponents:ji(()=>Array.from(t.values()).filter(i=>i.position==="left").sort((i,n)=>i.order-n.order).map(i=>i.component)),addContent:i=>{if(!i.name)throw TypeError("[Viewer Header] Content must have a name");if(t.has(i.name))throw Error(`[Viewer Header] Content with name ${i.name} already exists`);t.set(i.name,i)},removeContent:i=>t.has(i)?(t.delete(i),!0):!1}}},nZn={class:"viewer-header"},sZn={class:"viewer-header__content"},rZn={class:"viewer-header__content__left"},oZn={class:"viewer-header__content__right"},aZn={key:0,class:"m-l-6 flex items-center"},lZn={key:1,class:"viewer-header__version"};function cZn(e,t,i,n,s,r){let o=se("BIMDataIllustration");return os((Q(),we("div",nZn,[P("div",sZn,[P("div",rZn,[(Q(!0),we(yn,null,Fs(n.headerLeftContentComponents,a=>(Q(),mt(Yc(a),{key:a.name}))),128))]),P("div",oZn,[(Q(!0),we(yn,null,Fs(n.headerRightContentComponents,a=>(Q(),mt(Yc(a),{key:a.name}))),128))])]),n.logo||n.version?(Q(),we("div",aZn,[n.logo?(Q(),mt(o,{key:0,name:"logo",width:"30px",height:"30px"})):ii("",!0),n.version?(Q(),we("div",lZn,rt(n.version),1)):ii("",!0)])):ii("",!0)],512)),[[Qr,i.visible]])}var dZn=Ye(iZn,[["render",cZn],["__scopeId","data-v-5c9ea6b6"]]),uZn={emits:["resize"],setup(e,{emit:t}){return{onResizerMousedown:i=>{i.preventDefault();let n=i.clientX,s=o=>{o.preventDefault();let a=o.clientX-n;n=o.clientX,t("resize",a)},r=o=>{o.preventDefault(),window.removeEventListener("mousemove",s),window.removeEventListener("mouseup",r)};window.addEventListener("mousemove",s),window.addEventListener("mouseup",r)}}}},hZn={class:"bimdata-separator"};function pZn(e,t,i,n,s,r){return Q(),we("div",hZn,[t[1]||=P("div",{class:"bimdata-separator__line"},null,-1),P("div",{class:"bimdata-separator__resizer",onMousedown:t[0]||=(...o)=>n.onResizerMousedown&&n.onResizerMousedown(...o)},null,32)])}var fZn={components:{Separator:Ye(uZn,[["render",pZn],["__scopeId","data-v-79a3b3af"]])},props:{position:{type:String,required:!0,validator(e){return["left","right"].includes(e)}},sidePanel:{type:Object,required:!0,validator(e){if(e.width&&(typeof e.width!="number"||e.width<0))return console.error(`[GlobalSidePanel] sidePanel.width must be a strictly positive number, received ${typeof e.width}`),!1;let t=typeof e?.component=="object";return t||console.error("[GlobalSidePanel] sidePanel must have a component property"),t}}},setup(e){let t=si(null),i=si(e.sidePanel.width??400);return Un(()=>e.sidePanel,()=>{Object.defineProperty(e.sidePanel,"width",{get(){return i.value},set(n){if(typeof n!="number"||n<=0){console.error(`[GlobalSidePanel] sidePanel.width must be a strictly positive number, received ${typeof n}`);return}i.value=n}}),Object.defineProperty(e.sidePanel,"componentInstance",{get(){return t.value},enumerable:!0})},{immediate:!0}),{componentInstance:t,width:i,onResize:(n,s=1)=>{let r=i.value+n*s;i.value=Math.max(0,r)}}}},mZn={class:"bimdata-global-side-panel__component"};function vZn(e,t,i,n,s,r){let o=se("Separator");return Q(),we("div",{class:"bimdata-global-side-panel",style:pi(`width: ${n.width}px`)},[i.sidePanel.resizable&&i.position==="right"?(Q(),mt(o,{key:0,onResize:t[0]||=a=>n.onResize(a,-1)})):ii("",!0),P("div",mZn,[(Q(),mt(Yc(i.sidePanel.component),{ref:"componentInstance"},null,512))]),i.sidePanel.resizable&&i.position==="left"?(Q(),mt(o,{key:1,onResize:t[1]||=a=>n.onResize(a)})):ii("",!0)],4)}var AZn={name:"BimdataViewer",components:{ContextMenu:tZn,ViewerHeader:dZn,ModalManager:FEt,GlobalSidePanel:Ye(fZn,[["render",vZn],["__scopeId","data-v-82d0d4cb"]])},setup(){let e=xn("$viewer"),{globalContext:t,shortcutManager:i}=e;Da(()=>{i&&i.destroy(),t.hub.clear()}),ra(()=>{e.pluginManager.runPluginsScripts(e)});let n=ji(()=>e.uiSettings.bimdataLogo!==!1&&(t.localContexts.length!==1||t.localContexts[0].window?.logoAndVersion)),s=ji(()=>e.uiSettings.version!==!1&&(t.localContexts.length!==1||t.localContexts[0].window?.logoAndVersion)?e.version:null),r=ji(()=>t.leftSidePanel),o=ji(()=>t.rightSidePanel),a=ji(()=>{let p=e.uiSettings.header!==!1,f=t.localContexts.length===1&&t.localContexts[0].window?.header===!1,m=!!(r.value||o.value);return p&&(!f||m)}),l=e.uiSettings.contextMenu!==!1,c=si(null);function d(p){l&&c.value.open(p)}function u(){e.shortcutManager.active=!0}function h(){e.shortcutManager.active=!1}return{Layout:e.layout.areas.component,onContextMenu:d,onMouseenter:u,onMouseleave:h,isHeaderVisible:a,viewerTemplateRef:t.templateRef,modalManagerTemplateRef:t.modalManagerTemplateRef,headerTemplateRef:t.headerTemplateRef,contextMenuTemplateRef:c,contextMenuEnabled:l,bimdataLogoOnSingleWindow:n,viewerVersionOnSingleWindow:s,version:e.version,loading:ji(()=>t.loading),spinner:ji(()=>t.spinner),leftSidePanel:r,rightSidePanel:o}}},gZn={key:1,class:"bimdata-context-loading-overlay",style:{"z-index":"3"}},yZn={key:2,class:"viewer__logo"},IZn={key:1,class:"version m-t-6"};function bZn(e,t,i,n,s,r){let o=se("ModalManager"),a=se("ContextMenu"),l=se("ViewerHeader"),c=se("GlobalSidePanel"),d=se("BIMDataSpinner"),u=se("BIMDataIllustration");return Q(),we("div",{id:"bimdata-viewer",ref:"viewerTemplateRef",class:"bimdata-viewer bimdata-design-system bimdata-scrollbar",onContextmenu:t[0]||=(...h)=>n.onContextMenu&&n.onContextMenu(...h),onMouseenter:t[1]||=(...h)=>n.onMouseenter&&n.onMouseenter(...h),onMouseleave:t[2]||=(...h)=>n.onMouseleave&&n.onMouseleave(...h)},[ue(o,{ref:"modalManagerTemplateRef"},null,512),n.contextMenuEnabled?(Q(),mt(a,{key:0,ref:"contextMenuTemplateRef"},null,512)):ii("",!0),ue(l,{ref:"headerTemplateRef",visible:n.isHeaderVisible},null,8,["visible"]),P("div",{class:"bimdata-viewer__content",style:pi(n.isHeaderVisible?"height: calc(100% - var(--bimdata-viewer-header-height, 40px))":"height: 100%")},[n.leftSidePanel?(Q(),mt(c,{key:0,"side-panel":n.leftSidePanel,position:"left"},null,8,["side-panel"])):ii("",!0),(Q(),mt(Yc(n.Layout),{style:"height: 100%; flex-grow: 1;"})),n.rightSidePanel?(Q(),mt(c,{key:1,"side-panel":n.rightSidePanel,position:"right"},null,8,["side-panel"])):ii("",!0)],4),n.loading?(Q(),we("div",gZn,[n.spinner&&n.spinner.component?(Q(),mt(Yc(n.spinner.component),IE(sI({key:0},n.spinner.props)),null,16)):(Q(),mt(d,{key:1,size:"40px",border:"5px"}))])):ii("",!0),!n.isHeaderVisible&&(n.bimdataLogoOnSingleWindow||n.viewerVersionOnSingleWindow)?(Q(),we("div",yZn,[n.bimdataLogoOnSingleWindow?(Q(),mt(u,{key:0,name:"logo"})):ii("",!0),n.viewerVersionOnSingleWindow?(Q(),we("div",IZn,rt(n.version),1)):ii("",!0)])):ii("",!0)],544)}var EZn=Ye(AZn,[["render",bZn],["__scopeId","data-v-0c1c941a"]]),TZn=["src"],wZn={class:"bimdata-models__header"},CZn={key:0,class:"bimdata-models__header__loader"},SZn={class:"bimdata-models__header__picto"},xZn={class:"bimdata-models__header__name"},RZn={key:0,class:"bimdata-models__header__name--empty"},_Zn={key:1,class:"bimdata-models__header__name--empty"},DZn={key:3},PZn=["onMousemove","onClick"],VEt=Ye({__name:"Models",props:{preview:{type:Boolean,default:!1},windowPositioning:{type:Boolean,default:!0},customFilter:{type:Function,default:null},width:{type:String,default:"350px"}},setup(e){let t=e,i=xn("$viewer"),n=si(),s=si(0),r=si(0),o=si(),a=Aa([]),l=si(!1),c=ji(()=>i.localContext.loadedModels),d=ji(()=>i.localContext.loadedModelIds),u=ji(()=>i.localContext.loadingModelIds),h=ji(()=>i.localContext.multiModel),p=ji(()=>(t.customFilter?a.value.filter(t.customFilter):a.value).map(S=>c.value.find(R=>R.document?.head_id!=null&&R.document.head_id===S.document.id)??S)),f=S=>d.value.includes(S),m=S=>u.value.includes(S),g=ji(()=>{let{x:S,y:R}=o.value?.getBoundingClientRect()??{x:0,y:0};return`top:${r.value-R}px; left:${s.value-S}px;`}),A=S=>{!h.value&&f(S.id)||u.value.length>0||(i.localContext.loadedModelIds.includes(S.id)?i.localContext.unloadModels([S.id]):i.localContext.loadModels([S.id]))},E=S=>{switch(S){case"C":return"success";case"E":return"failed";case"P":case"I":return"sandglass"}},b=(S,R)=>{S?.viewer_360_file&&(s.value=R.clientX,r.value=R.clientY),n.value=S?.viewer_360_file},T=async S=>{l.value=!0;try{return(await i.api.apiClient.modelApi.getModels(i.api.cloudId,i.api.projectId,void 0,void 0,S)).filter(R=>i.state.models.some(x=>x.archived)||!R.archived).sort(cS("updated_at",!1))}catch(R){console.error("[Models] Cannot get project models. Error: ",R)}finally{l.value=!1}return[]},C=S=>S.children?.some(R=>f(R.id))??!1;return T(i.localContext.modelTypes).then(S=>{a.value=S}),(S,R)=>{let x=se("BIMDataSpinner"),_=se("BIMDataIconModel3D"),F=se("BIMDataTextbox"),L=se("BIMDataCheckbox"),N=se("BIMDataRadio"),z=se("BIMDataIcon"),k=se("BIMDataDropdownList");return Q(),we("div",{ref_key:"templateRef",ref:o,class:mi(["bimdata-models",{"bimdata-models--window-positioning":e.windowPositioning}])},[n.value?(Q(),we("div",{key:0,class:"bimdata-models__preview",style:pi(g.value)},[P("img",{src:n.value},null,8,TZn)],4)):ii("",!0),ue(k,{style:pi(`--bimdata-models-width: ${e.width};`),width:e.width,list:p.value,"element-key":"id","per-page":40,loading:l.value,class:"bimdata-models__list",disabled:p.value.length===0,onElementClick:A},{header:Xe(({isOpen:te})=>[P("div",wZn,[l.value||u.value.length>0?(Q(),we("div",CZn,[ue(x)])):(Q(),we(yn,{key:1},[P("div",SZn,[ue(_)]),P("div",{class:mi(["bimdata-models__header__number bimdata-info-length",{"bimdata-models__header__number--empty":d.value.length===0}])},[P("span",null,rt(d.value.length),1)],2),P("div",xZn,[p.value.length===0?(Q(),we("span",RZn,rt(S.$t("model.no_model")),1)):d.value.length===0?(Q(),we("span",_Zn,rt(S.$t("model.no_loaded_model")),1)):d.value.length===1?(Q(),mt(F,{key:2,text:c.value[0].name,tooltip:!te},null,8,["text","tooltip"])):d.value.length>1?(Q(),we("span",DZn,rt(S.$t("model.selected_models")),1)):ii("",!0)])],64))])]),element:Xe(({element:te,close:fe})=>[P("div",{class:"bimdata-models__model",onMousemove:ye=>e.preview&&b(te,ye),onMouseout:R[0]||=ye=>e.preview&&b(),onClick:()=>{!h.value&&!f(te.id)&&fe()}},[h.value?(Q(),mt(L,{key:0,"model-value":f(te.id)||C(te),disabled:te.status!=="C"||u.value.length>0},null,8,["model-value","disabled"])):(Q(),mt(N,{key:1,"model-value":f(te.id)||C(te),disabled:te.status!=="C"||u.value.length>0},null,8,["model-value","disabled"])),ue(z,{margin:"0 calc(var(--spacing-unit) / 2)",name:E(te.status),size:"xs",class:mi({"fill-success":te.status==="C","fill-high":te.status==="E"})},null,8,["name","class"]),ue(F,{class:mi({"bimdata-models__model__name":!0,"bimdata-models__model__name--disabled":te.status!=="C"||u.value.length>0}),text:te.name,width:`calc(100% -
|
|
96202
|
+
`),onMouseenter:t[0]||=(...h)=>n.onMouseEnter&&n.onMouseEnter(...h),onMouseleave:t[1]||=(...h)=>n.onMouseLeave&&n.onMouseLeave(...h)},[ue(o,{ref:"modalManagerTemplateRef"},null,512),P("div",SYn,[(Q(!0),we(yn,null,Fs(n.windowPlugins.leftSidePanels,h=>(Q(),mt(a,{plugin:h},null,8,["plugin"]))),256)),P("div",xYn,[(Q(!0),we(yn,null,Fs(n.windowPlugins.free,h=>(Q(),mt(l,{key:h.name,class:mi({"window-container__content__center__viewer":h.isViewer}),plugin:h},null,8,["class","plugin"]))),128)),ue(c,{position:"left",plugins:n.windowPlugins.leftButtonColumn},null,8,["plugins"]),ue(c,{position:"right",plugins:n.windowPlugins.rightButtonColumn},null,8,["plugins"])]),(Q(!0),we(yn,null,Fs(n.windowPlugins.rightSidePanels,h=>(Q(),mt(a,{plugin:h},null,8,["plugin"]))),256))]),n.loading?(Q(),we("div",RYn,[n.spinner&&n.spinner.component?(Q(),mt(Yc(n.spinner.component),IE(sI({key:0},n.spinner.props)),null,16)):(Q(),mt(d,{key:1,size:"20px",border:"3px"}))])):ii("",!0),n.layoutSettingsDisplayed?(Q(),we("div",_Yn,[ue(u)])):ii("",!0)],36)}var PYn=Ye(CYn,[["render",DYn],["__scopeId","data-v-cc5a8745"]]),OYn=class{constructor(e=!0){let t=EKn(rae,null,{resizable:e});t.registerContent("default",PYn),this.settings=yp({edit:!1,swap:!1,full:!1}),this.areas=t}get resizable(){return this.areas.resizable}set resizable(e){this.areas.resizable=e}apply(e=null){this.areas.layout=e?TKn(e):null}copy(e,t=!0){return wKn(this.areas.layout,e,t)}open({ratio:e,direction:t,insertAfter:i,windowName:n=null,windowState:s=null,localContextId:r=null}={}){let o=n?{options:{windowName:n,windowState:s}}:null;return r===null?this.areas.splitLayout(e,t,i,o):this.areas.split(r,e,t,i,o)}swap(e,t){return this.areas.swap(e,t)}close(e){return this.areas.delete(e)}compare(e,t){if(!e&&!t)return!0;if(!e||!t)return!1;if(typeof e=="string"&&typeof t=="string")return e===t;if(typeof e=="string"||typeof t=="string")return!1;if(e.windowName&&t.windowName){if(e.windowName!==t.windowName)return!1;let i=new Set(e.windowState?.modelIds),n=new Set(t.windowState?.modelIds);return i.size===n.size&&[...i].every(s=>n.has(s))}return e.windowName||t.windowName||e.direction!==t.direction||e.children.length!==t.children.length?!1:e.children.every((i,n)=>this.compare(i,t.children[n]))}},NYn={name:"@bimdata/viewer",type:"module",version:"2.18.0-beta.22",description:"A customizable BIM viewer.",keywords:["bim","viewer","bimdata","ifc","bcf"],types:"./index.d.ts",author:"BIMData.io",homepage:"https://developers.bimdata.io/viewer/index.html",repository:{url:"https://github.com/bimdata/viewer"},bugs:{email:"support@bimdata.io"},browserslist:["last 2 chrome version","last 2 firefox version"],main:"dist/bimdata-viewer.esm.min.js",module:"dist/bimdata-viewer.esm.min.js",scripts:{dev:"vite -c build/vite.config.dev.js",build:"node scripts/build.mjs","build:prod":"vite build -c build/vite.config.prod.js && esbuild dist/bimdata-viewer.esm.min.js --minify --outfile=dist/bimdata-viewer.esm.min.js --allow-overwrite","build:offline":"vite build -c build/vite.config.offline.js && esbuild dist/bimdata-viewer.offline.esm.min.js --minify --outfile=dist/bimdata-viewer.offline.esm.min.js --allow-overwrite","build:runtime":"vite build -c build/vite.config.runtime.js && esbuild dist/bimdata-viewer.runtime.esm.min.js --minify --outfile=dist/bimdata-viewer.runtime.esm.min.js --allow-overwrite","build:split":"vite build -c build/vite.config.split.js && esbuild dist/bimdata-viewer.split.esm.min.js --minify --outfile=dist/bimdata-viewer.split.esm.min.js --allow-overwrite","build:umd":"vite build -c build/vite.config.umd.js && esbuild dist/bimdata-viewer.umd.cjs --minify --outfile=dist/bimdata-viewer.umd.min.cjs","cy:run":"cypress run","cy:open":"cypress open",prebuild:"rm -rf dist",prepublishOnly:"npm run build","semantic-release":"semantic-release",serve:"http-server -c-1 --silent",test:"npm run test:unit & npm run build & npm run test:e2e","test:unit":"jest","test:e2e":"start-server-and-test 'npm run serve -- -p 8080' http://localhost:8080 cy:run","test:e2e-dev":"start-server-and-test 'npm run serve -- -p 8080' http://localhost:8080 cy:open",version:"echo $npm_package_version",ts:"tsc"},files:["dist/*","types/*","CHANGELOG.md","README.md","package.json","package-lock.json","index.d.ts"],devDependencies:{"@babel/preset-env":"^7.29.2","@bimdata/2d-engine":"2.6.7","@bimdata/areas-next":"0.1.17","@bimdata/bcf-components":"6.7.8","@bimdata/components":"1.10.2","@bimdata/design-system":"2.4.3","@bimdata/engine-2d":"0.0.23","@bimdata/html-to-image":"1.11.16","@bimdata/typescript-fetch-api-client":"10.47.0","@photo-sphere-viewer/core":"^5.15.0","@rollup/plugin-alias":"^6.0.0","@rollup/plugin-babel":"^7.1.0","@rollup/plugin-commonjs":"^29.0.3","@rollup/plugin-image":"^3.0.3","@rollup/plugin-replace":"^6.0.3","@semantic-release/changelog":"^7.0.0","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/git":"^11.0.1","@semantic-release/github":"^12.0.9","@semantic-release/npm":"^13.1.5","@semantic-release/release-notes-generator":"^14.1.1","@vitejs/plugin-vue":"^6.0.8","@xeokit/xeokit-sdk":"git+https://git@github.com/Amoki/xeokit-sdk.git#b3227526bbbe8ac49c8c0c1d121363ca79781824","@zip.js/zip.js":"^2.8.34",async:"^3.2.6",autoprefixer:"^10.5.4","babel-core":"^7.0.0-bridge.0","babel-jest":"^30.4.1","camera-controls":"^3.1.2","conventional-changelog-eslint":"^6.1.0",cypress:"^15.19.0",esbuild:"^0.28.1",globals:"^17.8.0",html2canvas:"^1.4.1","http-server":"^14.1.1",jest:"^30.4.2","jest-environment-jsdom":"^30.4.1",lodash:"^4.18.1","pdfjs-dist":"^6.1.200",postcss:"^8.5.23",prettier:"^3.9.6","sass-embedded":"^1.100.0","semantic-release":"^25.0.8","start-server-and-test":"^3.0.11",three:"0.184.0",vite:"^8.1.5","vite-plugin-css-injected-by-js":"^5.0.2",vue:"^3.5.40","vue-i18n":"^11.4.8","web-ifc":"^0.0.77"},allowScripts:{"cypress@15.19.0":!0}},MYn=1,LYn=class{math=Dfi;constructor({plugins:e,api:t,ui:i,locale:n="fr"}){this.instanceId=MYn++,this.pluginManager=new kqn(e),this.windowManager=new Hqn,this.windowManager.registerAndAddPluginsToWindows([...this.pluginManager.registeredPlugins.values()]),this.api=new RXn(t),this.globalContext=new C_t(this),this.state=GXn(this),this.shortcutManager=Z6t(this.state),this.uiSettings=i||{},this.i18n=new T_t(n),this._contextMenu=null,this.layout=new OYn(this.uiSettings.resizable!==!1),this._darkTheme=si(i?.darkTheme??!1),this.localContext=null,window.$viewer=this}get darkTheme(){return this._darkTheme.value}set darkTheme(e){this._darkTheme.value=e}get version(){return NYn.version}get locale(){return this.i18n.locale}get contextMenu(){return this._contextMenu||K6t}set contextMenu(e){this._contextMenu=e}get registeredWindows(){return[...this.windowManager.registeredWindows.keys()]}get registeredPlugins(){return[...this.pluginManager.registeredPlugins.keys()]}get pluginsCfg(){return this.pluginManager.cfg}registerPlugin(e){this.pluginManager.registerPlugin(e),this.windowManager.registerAndAddPluginsToWindows([e])}};function BYn(e,t={}){t.backgroundColor&&(e.style.setProperty("--bimdata-viewer-background-color",t.backgroundColor),t.backgroundColor==="transparent"&&e.style.setProperty("--areas-separator-color","transparent")),t.colorPrimary&&e.style.setProperty("--color-primary",t.colorPrimary),t.colorPrimaryLighter&&e.style.setProperty("--color-primary-lighter",t.colorPrimaryLighter),t.colorPrimaryLight&&e.style.setProperty("--color-primary-light",t.colorPrimaryLight),t.colorPrimaryDark&&e.style.setProperty("--color-primary-dark",t.colorPrimaryDark),t.colorSecondary&&e.style.setProperty("--color-secondary",t.colorSecondary),t.colorSecondaryLighter&&e.style.setProperty("--color-secondary-lighter",t.colorSecondaryLighter),t.colorSecondaryLight&&e.style.setProperty("--color-secondary-light",t.colorSecondaryLight),t.colorSecondaryDark&&e.style.setProperty("--color-secondary-dark",t.colorSecondaryDark),t.colorSilverLight&&e.style.setProperty("--color-silver-light",t.colorSilverLight),t.colorSilver&&e.style.setProperty("--color-silver",t.colorSilver),t.colorSilverDark&&e.style.setProperty("--color-silver-dark",t.colorSilverDark),t.colorGraniteLight&&e.style.setProperty("--color-granite-light",t.colorGraniteLight),t.colorGranite&&e.style.setProperty("--color-granite",t.colorGranite),t.colorSuccess&&e.style.setProperty("--color-success",t.colorSuccess),t.colorSuccessLighter&&e.style.setProperty("--color-success-Lighter",t.colorSuccessLighter),t.colorSuccessLight&&e.style.setProperty("--color-success-Light",t.colorSuccessLight),t.colorSuccessDark&&e.style.setProperty("--color-success-Dark",t.colorSuccessDark),t.colorWarning&&e.style.setProperty("--color-warning",t.colorWarning),t.colorWarningLighter&&e.style.setProperty("--color-warning-Lighter",t.colorWarningLighter),t.colorWarningLight&&e.style.setProperty("--color-warning-Light",t.colorWarningLight),t.colorWarningDark&&e.style.setProperty("--color-warning-Dark",t.colorWarningDark),t.colorHigh&&e.style.setProperty("--color-high",t.colorHigh),t.colorHighLighter&&e.style.setProperty("--color-high-lighter",t.colorHighLighter),t.colorHighLight&&e.style.setProperty("--color-high-light",t.colorHighLight),t.colorHighDark&&e.style.setProperty("--color-high-dark",t.colorHighDark),t.colorText&&e.style.setProperty("--color-text",t.colorText),(!t.backgroundColor||t.backgroundColor!=="transparent")&&e.style.setProperty("--areas-separator-color","rgba(216, 216, 216, 1)"),t.headerHeight!=null&&e.style.setProperty("--bimdata-viewer-header-height",t.headerHeight),e.style.setProperty("--areas-background-color","transparent")}var FYn=Object.freeze({25:"GUEST",50:"USER",100:"ADMIN"}),fX=Object.freeze({READ:"read",WRITE:"write"});function HEt(e){let t={};return e.forEach(i=>{let[n,s]=i.split(":");t[n]?t[n].push(s):t[n]=[s]}),t}var kYn={token_scopes:[],usable_scopes:[],user_role:25};function GEt(e=kYn){let t=HEt(e.token_scopes),i=HEt(e.usable_scopes);return{...IVe(e),tokenScopes:t,usableScopes:i,userRole:FYn[e.user_role],user:e.user?IVe(e.user):null,hasBcfReadPermission:i.bcf?.includes(fX.READ)??!1,hasBcfWritePermission:i.bcf?.includes(fX.WRITE)??!1,hasModelReadPermission:i.model?.includes(fX.READ)??!1,hasModelWritePermission:i.model?.includes(fX.WRITE)??!1,hasDocReadPermission:i.document?.includes(fX.READ)??!1,hasDocWritePermission:i.document?.includes(fX.WRITE)??!1}}var UYn={de:{BcfComponents:{back:"Zur\xFCck",BcfFilters:{filtersButton:"Filter",filtersTitle:"Filter",priorityLabel:"Priorit\xE4t",statusLabel:"Status",stageLabel:"Phase",assignedToLabel:"Zugewiesen an",creatorsLabel:"Erstellt von",tagsLabel:"Tags",resetButton:"Zur\xFCcksetzen",searchButton:"Suchen",undefined:"Nicht definiert",datePlaceholder:"Erstellungsdatum"},BcfSettings:{title:"BCF-Parameter",text:"Erstellen, f\xFCllen und listen Sie die BCF-Einstellungen auf, die Sie f\xFCr dieses Projekt haben m\xF6chten.",validateButton:"Die BCF-Parameter anerkennen"},BcfStatistics:{emptyText:"F\xFCgen Sie Fragen hinzu, um zugeh\xF6rige Statistiken hier anzuzeigen.",issues:"Probleme",extension:{Priority:"Priorit\xE4t",PriorityNotDefined:"Keine Priorit\xE4t",PriorityTitle:"Priorit\xE4ten",Status:"Status",StatusNotDefined:"Kein Status",StatusTitle:"Status"}},BcfTopicCard:{priority:"Priorit\xE4t",noPriority:"Keine",assignedTo:"Zugewiesen an",elements:"Elemente",notSpecified:"Nicht definiert",see:"Anzeigen"},BcfTopicCreationCard:{text:"Ein neues BCF-Thema erstellen",createBcfSideTitle:"Ein Problem melden"},BcfTopicForm:{dragDropImageText:"Bitte w\xE4hlen Sie eine Datei aus.",addObjectButton:"Objekt",addAnnotationButton:"Annotation",annotationButtonTooltip:"Zu diesem Thema gibt es derzeit keine Ansichten.",addPictureButton:"F\xFCgen Sie ein Bild hinzu.",titlePlaceholder:"Titel *",titleErrorMessage:"Titel fehlt",typeLabel:"Typ",priorityLabel:"Priorit\xE4t",statusLabel:"Status",stageLabel:"Phase",assignedToLabel:"Zugewiesen an",dueDateLabel:"F\xE4lligkeitsdatum (TT.MM.JJJJ)",descriptionLabel:"Beschreibung",labelsLabel:"Tags",createButton:"Best\xE4tigen",updateButton:"\xC4nderungen \xFCbernehmen",modalText:"Sie sind dabei, die Bearbeitung der Ausgabe {Name} zu beenden, aber es gibt noch ungespeicherte \xC4nderungen.",cancelButton:"\xC4nderungen verwerfen",continueButton:"\xC4nderungen fortsetzen",createTitle:"Ein Problem melden",dragDropImageTextTablet:"Foto machen",takeSnapshot:"Mach einen Schnappschuss",importFile:"Eine Datei importieren",searchPlaceholder:"Suchen",emptySearch:"kein Ergebnis",documentsLabel:"Dokumente",documentsCount:"Dokumente \u2013 {count} ausgew\xE4hlte Dokumente",groupsLabel:"Berechtigungen",groupsCount:"Berechtigungen \u2013 {count} ausgew\xE4hlte Gruppen",groupsText:"W\xE4hlen Sie die Benutzergruppen aus, die dieses Thema sehen und damit interagieren d\xFCrfen.",validate:"Best\xE4tigen"},BcfTopicOverview:{openViewer:"Im Viewer \xF6ffnen",openViewerNoModels:"Es sind keine Vorlagen zur Ansicht bereit",elements:"{count} Elemente",noElements:"kein Element",type:"Typ",noTypeSpecified:"Kein Typ angegeben",description:"Beschreibung",noDescriptionProvided:"Keine Beschreibung angegeben",assignedTo:"Zugeteilt an",notAssigned:"Nicht zugewiesen",dueDate:"F\xE4lligkeitsdatum",noDueDate:"Kein F\xE4lligkeitsdatum",informations:"Informationen",status:"Status",noStatusSpecified:"Kein Status angegeben",stage:"Phase",noStageProvided:"Keine Phase angegeben",priority:"Priorit\xE4t",priorityNotDefined:"Nicht definiert",tags:"Tags",noTags:"Keine Tags",commentButton:"Ein Kommentar ver\xF6ffentlichen",deleteText:"Sie l\xF6schen jetzt {Name}",deleteBcfButton:"Dieses BCF l\xF6schen",keepBcfButton:"Dieses BCF beibehalten",author:"Autor"},BcfTopicsTable:{headers:{index:"#",priority:"Priorit\xE4t",status:"Status",title:"Titel",creator:"Autor",date:"Datum"}},BcfTopicActionsCell:{seeButton:"Anzeigen"},BcfTopicComments:{commentButton:"Ein Kommentar verfassen",commentLabel:"Ein Kommentar verfassen",commentText:"Kommentar",cancelButton:"Abbrechen",publishButton:"Ver\xF6ffentlichen",commentsText:"Kommentare",deleteCommentText:"Diesen Kommentar l\xF6schen?",deleteButton:"L\xF6schen",takeSnapshot:"Mach einen Schnappschuss",edited:"bearbeitet"},BcfTopicPriorityCell:{noPriority:"Keine"},SettingCard:{addButton:"ein Element hinzuf\xFCgen",cancelButton:"Abbrechen",validateButton:"Best\xE4tigen",deleteExtensionText:"Diesen Parameter l\xF6schen",deleteButton:"L\xF6schen",title:{Priority:"Priorit\xE4ten",Label:"Tags",Status:"Status",Type:"Typen",Stage:"Phasen"},input:{Priority:"Eine neue Priorit\xE4t hinzuf\xFCgen",Label:"Ein neues Etikett hinzuf\xFCgen",Status:"Einen neuen Status hinzuf\xFCgen",Type:"Einen neuen Typ hinzuf\xFCgen",Stage:"Eine neue Phase hinzuf\xFCgen"},text:{Priority:"Liste der Priorit\xE4ten",Label:"Liste von Tags",Status:"Liste der Status",Type:"Liste der Typen",Stage:"Liste der Phasen"}}}},en:{BcfComponents:{back:"Back",BcfFilters:{filtersButton:"Filters",filtersTitle:"Filters",priorityLabel:"Priority",statusLabel:"Status",stageLabel:"Stage",assignedToLabel:"Assigned to",creatorsLabel:"Created by",tagsLabel:"Tags",resetButton:"Reset",searchButton:"Search",undefined:"Not defined",datePlaceholder:"Creation date"},BcfSettings:{title:"BCF Settings",text:"Create, enter in, and list the BCF settings you would like to have for this project",validateButton:"Validate BCF settings"},BcfStatistics:{emptyText:"Add BCF Topics to start to have some stats here.",issues:"issues",extension:{Priority:"Priority",PriorityNotDefined:"No priority",PriorityTitle:"Priorities",Status:"Status",StatusNotDefined:"No status",StatusTitle:"Status"}},BcfTopicCard:{priority:"Priority",noPriority:"None",assignedTo:"Assigned to",elements:"Elements",notSpecified:"Not specified",see:"See"},BcfTopicCreationCard:{text:"Create a new BCF topic",createBcfSideTitle:"Report a problem"},BcfTopicForm:{dragDropImageText:"Please select a file",addObjectButton:"Object",addAnnotationButton:"Annotation",annotationButtonTooltip:"This topic has no viewpoint",addPictureButton:"Add a picture",titlePlaceholder:"Title *",titleErrorMessage:"Missing title",typeLabel:"Type",priorityLabel:"Priority",statusLabel:"Status",stageLabel:"Stage",assignedToLabel:"Assigned to",dueDateLabel:"Due date",descriptionLabel:"Description",labelsLabel:"Tags",createButton:"Validate",updateButton:"Modify this BCF",modalText:"You are about to quit editing issue {name} but there are unsaved changes.",cancelButton:"Discard changes",continueButton:"Continue editing",createTitle:"Report a problem",dragDropImageTextTablet:"Take a picture",takeSnapshot:"Take a snapshot",importFile:"Import a file",searchPlaceholder:"Search",emptySearch:"No result",documentsLabel:"Add a file",documentsCount:"Files - {count} selected files",groupsLabel:"Permissions",groupsCount:"Permissions - {count} selected groups",groupsText:"You are now setting the access rights: choose the user group(s) that will be exclusively authorized to see and interact with this topic.",validate:"Validate"},BcfTopicOverview:{openViewer:"Open in viewer",openViewerNoModels:"No model to open",elements:"{count} Elements",noElements:"No element",type:"Type",noTypeSpecified:"No type specified",description:"Description",noDescriptionProvided:"No description provided",assignedTo:"Assigned to",notAssigned:"Not assigned",dueDate:"Due date",noDueDate:"No due date",informations:"Informations",status:"Status",noStatusSpecified:"No status specified",stage:"Stage",noStageProvided:"No stage provided",priority:"Priority",priorityNotDefined:"Not defined",tags:"Tags",noTags:"No tags",commentButton:"Post a comment",deleteText:"You are about to delete {name}",deleteBcfButton:"Delete this BCF",keepBcfButton:"Keep this BCF",author:"Author"},BcfTopicsTable:{headers:{index:"#",priority:"Priority",status:"Status",title:"Title",creator:"Author",date:"Date"}},BcfTopicActionsCell:{seeButton:"See"},BcfTopicComments:{commentButton:"Post a comment",commentLabel:"Post a comment",commentText:"Comment",cancelButton:"Cancel",publishButton:"Publish",commentsText:"Comments",deleteCommentText:"Delete this comment ?",deleteButton:"Delete",takeSnapshot:"Take a snapshot",edited:"edited"},BcfTopicPriorityCell:{noPriority:"None"},SettingCard:{addButton:"add an element",cancelButton:"Cancel",validateButton:"Validate",deleteExtensionText:"Remove this setting",deleteButton:"Delete",title:{Priority:"Priorities",Label:"Labels",Status:"Status",Type:"Types",Stage:"Stages"},input:{Priority:"Add a new priority",Label:"Add a new label",Status:"Add new status",Type:"Add a new type",Stage:"Add a new stage"},text:{Priority:"Priority list",Label:"Labels list",Status:"Status list",Type:"Type list",Stage:"Stage list"}}}},es:{BcfComponents:{back:"Volver",BcfFilters:{filtersButton:"Filtros",filtersTitle:"Filtros",priorityLabel:"Prioridad",statusLabel:"Estado",stageLabel:"Fase",assignedToLabel:"Asignado a",creatorsLabel:"Creado por",tagsLabel:"Etiquetas:",resetButton:"Restablecer",searchButton:"Buscar en",undefined:"No definido",datePlaceholder:"Fecha de creaci\xF3n"},BcfSettings:{title:"Par\xE1metros del BCF",text:"Cree, rellene y enumere los par\xE1metros del BCF que desea tener en este proyecto",validateButton:"Validar los par\xE1metros del BCF"},BcfStatistics:{emptyText:"A\xF1ada preguntas para ver las estad\xEDsticas asociadas aqu\xED.",issues:"problemas",extension:{Priority:"Prioridad",PriorityNotDefined:"Sin prioridad",PriorityTitle:"Prioridades",Status:"Estado",StatusNotDefined:"Sin estado",StatusTitle:"Estatutos"}},BcfTopicCard:{priority:"Prioridad",noPriority:"Sin",assignedTo:"Asignado a",elements:"Elementos",notSpecified:"No definido",see:"Ver"},BcfTopicCreationCard:{text:"Crear un nuevo tema BCF",createBcfSideTitle:"Informar de un problema"},BcfTopicForm:{dragDropImageText:"Seleccione un archivo",addObjectButton:"Objeto",addAnnotationButton:"Anotaci\xF3n",annotationButtonTooltip:"Actualmente este tema no posee ning\xFAn punto de vista",addPictureButton:"A\xF1adir una imagen",titlePlaceholder:"T\xEDtulo *",titleErrorMessage:"Falta el t\xEDtulo",typeLabel:"Tipo",priorityLabel:"Prioridad",statusLabel:"Estado",stageLabel:"Fase",assignedToLabel:"Asignado a",dueDateLabel:"Fecha de vencimiento (DD/MM/AAAA)",descriptionLabel:"Descripci\xF3n",labelsLabel:"Etiquetas",createButton:"Validar",updateButton:"Modificar este BCF",modalText:"Est\xE1 a punto de salir de la edici\xF3n del problema de {name} pero hay cambios sin guardar.",cancelButton:"Cancelar los cambios",continueButton:"Continuar con los cambios",createTitle:"Informar de un problema",dragDropImageTextTablet:"Tomar una fotograf\xEDa",takeSnapshot:"Tomar un snapshot",importFile:"Importar un archivo",searchPlaceholder:"Buscar",emptySearch:"No hay resultados"},BcfTopicOverview:{openViewer:"Abrir en el visor",openViewerNoModels:"No hay ning\xFAn modelo listo para la visualizaci\xF3n",elements:"{count} Elementos",noElements:"Ning\xFAn elemento",type:"Tipo",noTypeSpecified:"No se especifica el tipo",description:"Descripci\xF3n",noDescriptionProvided:"No hay descripci\xF3n",assignedTo:"Asignado a",notAssigned:"No asignado",dueDate:"Plazo",noDueDate:"Sin fecha de vencimiento",informations:"Informaci\xF3n",status:"Estado",noStatusSpecified:"No se especifica el estado",stage:"Fase",noStageProvided:"No se indica ninguna fase",priority:"Prioridad",priorityNotDefined:"No definido",tags:"Etiquetas",noTags:"Sin etiquetas",commentButton:"Publicar un comentario",deleteText:"Est\xE1s a punto de borrar {name}",deleteBcfButton:"Borrar este BCF",keepBcfButton:"Mantenga este BCF",author:"Autor"},BcfTopicsTable:{headers:{index:"#",priority:"Prioridad",status:"Estado",title:"T\xEDtulo",creator:"Autor",date:"Fecha"}},BcfTopicActionsCell:{seeButton:"Ver"},BcfTopicComments:{commentButton:"Publicar un comentario",commentLabel:"Publicar un comentario",commentText:"Comentario",cancelButton:"Cancelar",publishButton:"Publicar",commentsText:"comentarios",deleteCommentText:"\xBFBorrar este comentario?",deleteButton:"Borrar",takeSnapshot:"Tomar un snapshot"},BcfTopicPriorityCell:{noPriority:"Sin"},SettingCard:{addButton:"a\xF1adir un elemento",cancelButton:"Cancelar",validateButton:"Validar",deleteExtensionText:"Borrar esta configuraci\xF3n",deleteButton:"Borrar",title:{Priority:"Prioridades",Label:"Etiquetas:",Status:"Estatutos",Type:"Tipos",Stage:"Fases"},input:{Priority:"A\xF1adir una nueva prioridad",Label:"A\xF1adir una nueva etiqueta",Status:"A\xF1adir un nuevo estado",Type:"A\xF1adir un nuevo tipo",Stage:"A\xF1adir una nueva fase"},text:{Priority:"Lista de prioridades",Label:"Lista de etiquetas",Status:"Lista de estatutos",Type:"Lista de tipos",Stage:"Lista de fases"}}}},fr:{BcfComponents:{back:"Retour",BcfFilters:{filtersButton:"Filtres",filtersTitle:"Filtres",priorityLabel:"Priorit\xE9",statusLabel:"Statut",stageLabel:"Phase",assignedToLabel:"Assign\xE9 \xE0",creatorsLabel:"Cr\xE9\xE9 par",tagsLabel:"Tags",resetButton:"R\xE9initialiser",searchButton:"Rechercher",undefined:"Non d\xE9fini",datePlaceholder:"Date de cr\xE9ation"},BcfSettings:{title:"Param\xE8tres BCF",text:"Cr\xE9ez, renseignez et listez les param\xE8tres BCF que vous souhaitez avoir sur ce projet",validateButton:"Valider les param\xE8tres BCF"},BcfStatistics:{emptyText:"Ajoutez des questions pour voir les statistiques associ\xE9es ici.",issues:"probl\xE8mes",extension:{Priority:"Priorit\xE9",PriorityNotDefined:"Aucune priorit\xE9",PriorityTitle:"Priorit\xE9s",Status:"Statut",StatusNotDefined:"Aucun statut",StatusTitle:"Statuts"}},BcfTopicCard:{priority:"Priorit\xE9",noPriority:"Aucune",assignedTo:"Assign\xE9 \xE0",elements:"{n} \xC9lements",notSpecified:"Non d\xE9fini",see:"Voir"},BcfTopicCreationCard:{text:"Cr\xE9er un nouveau topic BCF",createBcfSideTitle:"Signaler un probl\xE8me"},BcfTopicForm:{dragDropImageText:"Veuillez s\xE9lectionner un fichier",addObjectButton:"Objet",addAnnotationButton:"Annotation",annotationButtonTooltip:"Ce topic ne poss\xE8de actuellement aucun point de vue",addPictureButton:"Ajouter une image",titlePlaceholder:"Titre *",titleErrorMessage:"Titre manquant",typeLabel:"Type",priorityLabel:"Priorit\xE9",statusLabel:"Statut",stageLabel:"Phase",assignedToLabel:"Assign\xE9 \xE0",dueDateLabel:"Date d'\xE9ch\xE9ance",descriptionLabel:"Description",labelsLabel:"Tags",createButton:"Valider",updateButton:"Modifier ce BCF",modalText:"Vous \xEAtes sur le point de quitter l'\xE9dition de l'issue {name} mais il y'a des modifications non enregistr\xE9es.",cancelButton:"Annuler les modifications",continueButton:"Continuer les modifications",createTitle:"Signaler un probl\xE8me",dragDropImageTextTablet:"Prendre une photo",takeSnapshot:"Prendre un snapshot",importFile:"Importer un fichier",searchPlaceholder:"Rechercher",emptySearch:"Pas de r\xE9sultat",documentsLabel:"Documents",documentsCount:"Documents - {count} documents s\xE9lectionn\xE9s",groupsLabel:"Permissions",groupsCount:"Permissions - {count} groupes s\xE9lectionn\xE9s",groupsText:"S\xE9lectionner les groupes utilisateur qui peuvent voir ce topic et int\xE9ragir avec.",validate:"Valider"},BcfTopicOverview:{openViewer:"Ouvrir dans le viewer",openViewerNoModels:"Il n'y a aucun mod\xE8le pr\xEAt pour une visualisation",elements:"{count} \xC9lements",noElements:"Aucun \xE9l\xE9ment concern\xE9",type:"Type",noTypeSpecified:"Pas de type sp\xE9cifi\xE9",description:"Description",noDescriptionProvided:"Pas de description renseign\xE9e",assignedTo:"Assign\xE9 \xE0",notAssigned:"Non assign\xE9",dueDate:"\xC9ch\xE9ance",noDueDate:"Pas de date d'\xE9ch\xE9ance",informations:"Informations",status:"Statut",noStatusSpecified:"Pas de statut sp\xE9cifi\xE9",stage:"Phase",noStageProvided:"Pas de phase renseign\xE9e",priority:"Priorit\xE9",priorityNotDefined:"Non d\xE9fini",tags:"Tags",noTags:"Pas de tags",commentButton:"Poster un commentaire",deleteText:"Vous \xEAtes sur le point de supprimer {name}",deleteBcfButton:"Supprimer ce BCF",keepBcfButton:"Conserver ce BCF",author:"Auteur"},BcfTopicsTable:{headers:{index:"#",priority:"Priorit\xE9",status:"Statut",title:"Titre",creator:"Auteur",date:"Date"}},BcfTopicActionsCell:{seeButton:"Voir"},BcfTopicComments:{commentButton:"Poster un commentaire",commentLabel:"Poster un commentaire",commentText:"Commentaire",cancelButton:"Annuler",publishButton:"Publier",commentsText:"commentaires",deleteCommentText:"Supprimer ce commentaire ?",deleteButton:"Supprimer",takeSnapshot:"Prendre un snapshot",edited:"edit\xE9"},BcfTopicPriorityCell:{noPriority:"Aucune"},SettingCard:{addButton:"ajouter un \xE9l\xE9ment",cancelButton:"Annuler",validateButton:"Valider",deleteExtensionText:"Supprimmer ce param\xE8tre",deleteButton:"Supprimer",title:{Priority:"Priorit\xE9s",Label:"Tags",Status:"Statuts",Type:"Types",Stage:"Phases"},input:{Priority:"Ajouter une nouvelle priorit\xE9",Label:"Ajouter un nouveau label",Status:"Ajouter un nouveau statut",Type:"Ajouter un nouveau type",Stage:"Ajouter une nouvelle phase"},text:{Priority:"Liste des priorit\xE9s",Label:"Liste des tags",Status:"Liste des statuts",Type:"Liste des types",Stage:"Liste des phases"}}}},it:{BcfComponents:{back:"Indietro",BcfFilters:{filtersButton:"Filtri",filtersTitle:"Filtri",priorityLabel:"Priorit\xE0",statusLabel:"Stato",stageLabel:"Fase",datePlaceholder:"Data di creazione",assignedToLabel:"Assegnato a",creatorsLabel:"Creato da",tagsLabel:"Etichette",resetButton:"Ripristina",searchButton:"Cerca",undefined:"Non definito"},BcfSettings:{title:"Parametri BCF",text:"Creare, notificare e elencare i parametri BCF che si desidera avere su questo progetto",validateButton:"Conferma i parametri BCF"},BcfStatistics:{emptyText:"Aggiungi delle domande per vedere le statistiche associate qui.",issues:"problemi",extension:{Priority:"Priorit\xE0",PriorityNotDefined:"Nessuna priorit\xE0",PriorityTitle:"Priorit\xE0",Status:"Stato",StatusNotDefined:"Nessuno stato",StatusTitle:"Stati"}},BcfTopicCard:{priority:"Priorit\xE0",noPriority:"Nessuno",assignedTo:"Assegnato a",elements:"Elementi",noElements:"0 elementi",notSpecified:"Non definito",see:"Visualizza"},BcfTopicCreationCard:{text:"Crea un nuovo topic BCF",createBcfSideTitle:"Segnala un problema"},BcfTopicForm:{dragDropImageText:"Selezionare un file",addObjectButton:"Oggetto",addAnnotationButton:"Annotazione",annotationButtonTooltip:"Attualmente questo argomento non presenta alcun punto di vista",addPictureButton:"Aggiungere un'immagine",titlePlaceholder:"Titolo *",titleErrorMessage:"Titolo mancante",typeLabel:"Tipo",priorityLabel:"Priorit\xE0",statusLabel:"Stato",stageLabel:"Fase",assignedToLabel:"Assegnato a",dueDateLabel:"Data di scadenza",descriptionLabel:"Descrizione",labelsLabel:"Tag",createButton:"Conferma",updateButton:"Modificare questo BCF",modalText:"State per abbandonare la modifica di {name} ma ci sono modifiche non salvate.",cancelButton:"Annullare le modifiche",continueButton:"Continuare le modifiche",createTitle:"Segnala un problema"},BcfTopicOverview:{openViewer:"Apri nel visualizzatore",openViewerNoModels:"Non esistono modelli pronti per la visualizzazione",elements:"{count} Elementi",noElements:"Nessun elemento",type:"Tipo",noTypeSpecified:"Nessun tipo specificato",description:"Descrizione",noDescriptionProvided:"Nessuna descrizione inserita",assignedTo:"Assegnato a",notAssigned:"Non assegnato",dueDate:"Scadenza",noDueDate:"Nessuna data di scadenza",informations:"Informazioni",status:"Stato",noStatusSpecified:"Nessuno stato specificato",stage:"Fase",noStageProvided:"Nessuna fase inserita",priority:"Priorit\xE0",priorityNotDefined:"Non definita",tags:"Etichette",noTags:"Nessuna etichetta",commentButton:"Pubblica un commento",deleteText:"Stai per eliminare {name}",deleteBcfButton:"Elimina questo BCF",keepBcfButton:"Conserva questo BCF",author:"Autore"},BcfTopicsTable:{headers:{index:"#",priority:"Priorit\xE0",status:"Stato",title:"Titolo",creator:"Autore",date:"Data"}},BcfTopicActionsCell:{seeButton:"Visualizza"},BcfTopicComments:{commentButton:"Pubblica un commento",commentLabel:"Pubblica un commento",commentText:"Commento",cancelButton:"Annulla",publishButton:"Pubblica",commentsText:"commenti",deleteCommentText:"Eliminare questo commento?",deleteButton:"Elimina"},BcfTopicPriorityCell:{noPriority:"Nessuno"},SettingCard:{addButton:"aggiungi un elemento",cancelButton:"Annulla",validateButton:"Conferma",deleteExtensionText:"Elimina questo parametro",deleteButton:"Elimina",title:{Priority:"Priorit\xE0",Label:"Etichette",Status:"Stati",Type:"Tipi",Stage:"Fasi"},input:{Priority:"Aggiungi una nuova priorit\xE0",Label:"Aggiungi una nuova etichetta",Status:"Aggiungi un nuovo stato",Type:"Aggiungi un nuovo tipo",Stage:"Aggiungi una nuova fase"},text:{Priority:"Elenco delle priorit\xE0",Label:"Elenco delle etichette",Status:"Elenco degli stati",Type:"Elenco dei tipi",Stage:"Elenco delle fasi"}}}}},HYn=({apiClient:e,fetchUsers:t,i18nPlugin:i}={})=>({install(n){e?Ul.setup({apiClient:e,fetchUsers:t}):console.error("[BCF Components Plugin] No api client provided. You must provide an api client for the components to work properly."),i?Object.entries(UYn).forEach(([s,r])=>{i.global.mergeLocaleMessage(s,r)}):console.warn("[BCF Components Plugin] No i18n instance provided. You should either provide an i18n instance or define your own translations in order have text displayed properly."),Object.entries(yNt).forEach(([s,r])=>{n.component(s,r)})}}),GYn={de:{BuildingMaker:{title:"Building Maker",back:"Zur\xFCck",list:{text:"Erstellen und bearbeiten Sie die Etagen und laden Sie anschlie\xDFend Ihre PDFs herunter.",createButton:"Neues Projekt",updateButton:"Umbenennen",deleteButton:"L\xF6schen"},form:{text:"Erstellen und bearbeiten Sie die Etagen und laden Sie anschlie\xDFend Ihre PDFs herunter.",input:"Name des Geb\xE4udes",error:"Ung\xFCltiger Name",createButton:"Erstellen",updateButton:"Best\xE4tigen"},view:{addStoreyButton:"Etage",addPlanButton:"Grundriss",closeButton:"Fertigstellen",submitFilesButton:"Best\xE4tigen"},storeyForm:{title:"Neue Etage",input:"Name",error:"Ung\xFCltiger Name",cancelButton:"Abbrechen",submitButton:"Best\xE4tigen"}},FileManager:{creationFormTitle:"Ordner erstellen",renameFormPlaceholder:"Datei- / Ordnernam",nameInputPlaceholder:"Ordnername",emptyFolder:"Dieser Ordner ist leer",newFolderSuccess:"Neuer Ordner erstellt",renameFolderSuccess:"Umbenannter Ordner",deleteFolderSuccess:"Ordner gel\xF6scht",newFileSuccess:"Datei hinzugef\xFCgt",renameFileSuccess:"Umbenannte Datei",deleteFileSuccess:"Datei gel\xF6scht",nameInputErrorMessage:"Ung\xFCltiger name",cancel:"Abbrechen",submit:"Best\xE4tigen",buttonText:"Neuer Ordner",addFileButtonText:"Datei laden",rename:"Umbenennen",view:"Sehen",download:"Herunterladen",delete:"L\xF6schen",deleteTitle:"Dateien l\xF6schen",deleteDetail:"Sie sind im Begriff, die folgenden Dateien / Ordner endg\xFCltig zu l\xF6schen"}},en:{BIMDataComponents:{t:{back:"Back",cancel:"Cancel",create:"Create",delete:"Delete",download:"Download",finish:"Finish",rename:"Rename",search:"Search",see:"View",storey:"Storey",validate:"Validate"}},BuildingMaker:{title:"Building Maker",list:{text:"Create and edit storeys, then download your PDFs.",new:"New project"},form:{input:"Building name",error:"Invalid"},view:{addStorey:"Add Storey",addFile:"Add File",addPlan:"Add Plan"},storeyForm:{title:"New storey",input:"Name",error:"Invalid name"}},FileManager:{creationFormTitle:"Create folder",renameFormPlaceholder:"Folder/File name",nameInputPlaceholder:"Folder name",emptyFolder:"This folder is empty",newFolderSuccess:"New folder created",renameFolderSuccess:"Folder renamed",deleteFolderSuccess:"Folder deleted",newFileSuccess:"File added",renameFileSuccess:"File renamed",deleteFileSuccess:"File deleted",nameInputErrorMessage:"Invalid name",buttonText:"New folder",addFileButtonText:"Upload a file",deleteTitle:"Deleting Files",deleteDetail:"You are about to permanently delete the following files / folders",dmsRoot:"Root of the project's DMS",pdfPageSelectorTitle:"Select a page"},MetaBuildingStructure:{title:"Meta-Building Structure",tab:{structure:"Structure",zones:"Zones",equipments:"Equipments"},StoreySelector:{placeholder:"Select a storey"}},PhotosphereBuilding:{title:"Photosphere Building"}},es:{BuildingMaker:{title:"Building Maker",back:"Vuelta",list:{text:"Cree y edite los pisos despu\xE9s cargue los PDF.",createButton:"Nuevo proyecto",updateButton:"Renombrar",deleteButton:"Suprimir"},form:{text:"Cree y edite los pisos despu\xE9s cargue los PDF.",input:"Nombre del edificio",error:"Nombre no v\xE1lido",createButton:"Crear",updateButton:"Validar"},view:{addStoreyButton:"Piso",addPlanButton:"Plano",closeButton:"Terminar",submitFilesButton:"Validar"},storeyForm:{title:"Nuevo piso",input:"Nombre",error:"Nombre no v\xE1lido",cancelButton:"Anular",submitButton:"Validar"}},FileManager:{creationFormTitle:"Crear un archivo",renameFormPlaceholder:"Nombre de archivo / carpeta",nameInputPlaceholder:"Nombre de la carpeta",emptyFolder:"Esta carpeta est\xE1 vac\xEDa",newFolderSuccess:"Nueva carpeta creada",renameFolderSuccess:"Carpeta renombrada",deleteFolderSuccess:"Carpeta eliminada",newFileSuccess:"Archivo agregado",renameFileSuccess:"Archivo renombrado",deleteFileSuccess:"Archivo eliminado",nameInputErrorMessage:"Nombre inv\xE1lida",cancel:"Cancelar",submit:"Validar",buttonText:"Carpeta nueva",addFileButtonText:"Cargar un archivo",rename:"Renombrar",view:"Ver",download:"Descargar",delete:"Borrar",deleteTitle:"Eliminar archivos",deleteDetail:"Est\xE1 a punto de eliminar permanentemente los siguientes archivos / carpetas"}},fr:{BIMDataComponents:{t:{back:"Retour",cancel:"Annuler",create:"Cr\xE9er",delete:"Supprimer",download:"T\xE9l\xE9charger",finish:"Terminer",rename:"Renommer",search:"Rechercher",see:"Voir",storey:"\xC9tage",validate:"Valider"}},BuildingMaker:{title:"Building Maker",list:{text:"Cr\xE9ez et \xE9ditez les \xE9tages puis t\xE9l\xE9chagez vos PDF.",new:"Nouveau projet"},form:{input:"Nom du b\xE2timent",error:"Nom invalide"},view:{addStorey:"Ajouter un \xC9tage",addFile:"Ajouter un fichier",addPlan:"Ajouter un plan"},storeyForm:{title:"Nouvel \xE9tage",input:"Nom",error:"Nom invalide"}},FileManager:{creationFormTitle:"Cr\xE9er un dossier",renameFormPlaceholder:"Nom du fichier/dosier",nameInputPlaceholder:"Nom du dossier",emptyFolder:"Ce dossier est vide",newFolderSuccess:"Nouveau dossier cr\xE9\xE9",renameFolderSuccess:"Dossier renomm\xE9",deleteFolderSuccess:"Dossier supprim\xE9",newFileSuccess:"Fichier ajout\xE9",renameFileSuccess:"Fichier renomm\xE9",deleteFileSuccess:"Fichier supprim\xE9",nameInputErrorMessage:"Nom invalide",buttonText:"Nouveau dossier",addFileButtonText:"Charger un fichier",deleteTitle:"Supression de fichiers",deleteDetail:"Vous \xEAtes sur le point de supprimer d\xE9finitivement les fichiers/dossiers suivants",dmsRoot:"Racine de la GED du projet",pdfPageSelectorTitle:"S\xE9lectionner une page"},MetaBuildingStructure:{title:"Structure M\xE9ta-Building",tab:{structure:"Structure",zones:"Zones",equipments:"\xC9quipements"},StoreySelector:{placeholder:"S\xE9lectionner un \xE9tage"}},PhotosphereBuilding:{title:"Photosph\xE8re Building"}},it:{BuildingMaker:{title:"Building Maker",back:"Reso",list:{text:"Crea e modifica i piani e poi scarica i tuoi PDF.",createButton:"Nuovo progetto",updateButton:"Rinominare",deleteButton:"Eliminare"},form:{text:"Crea e modifica i piani e poi scarica i tuoi PDF.",input:"Nome della costruzione",error:"Nome non corretto",createButton:"Creare",updateButton:"Convalidare"},view:{addStoreyButton:"Piano",addPlanButton:"Mappa",closeButton:"Finire",submitFilesButton:"Convalidare"},storeyForm:{title:"Nuovo piano",input:"Nome",error:"Nome non corretto",cancelButton:"Annullare",submitButton:"Convalidare"}},FileManager:{creationFormTitle:"Crea una cartella",renameFormPlaceholder:"Nome file/cartella",nameInputPlaceholder:"Nome della cartella",emptyFolder:"Questa cartella \xE8 vuota",newFolderSuccess:"Nuova cartella creata",renameFolderSuccess:"Cartella rinominata",deleteFolderSuccess:"Cartella eliminata",newFileSuccess:"File aggiunto",renameFileSuccess:"File rinominato",deleteFileSuccess:"File cancellato",nameInputErrorMessage:"Nome non valido",cancel:"Annulla",submit:"Invia",buttonText:"Nuova cartella",addFileButtonText:"Carica un file",rename:"Rinominare",view:"Vedere",download:"Scaricare",delete:"Cancellare",deleteTitle:"Eliminazione di file",deleteDetail:"Stai per eliminare definitivamente i seguenti file/cartelle"}}},VYn=({i18nPlugin:e}={})=>({install(t){e?Object.entries(GYn).forEach(([i,n])=>{e.global.mergeLocaleMessage(i,n)}):console.warn("[BIMData Components Plugin] No i18n instance provided. You should either provide an i18n instance or define your own translations in order have text displayed properly."),Object.entries(z9n).forEach(([i,n])=>{t.component(i,n)})}}),jYn={beforeMount(e,t){if(typeof t.value!="function")throw Error(`click away directive needs function, got ${typeof t.value}`);e.clickAwayHandler=i=>{(i.path||i.composedPath&&i.composedPath()).find(n=>n===e)||t.value()},window.addEventListener("mousedown",e.clickAwayHandler,!0)},unmounted(e){window.removeEventListener("mousedown",e.clickAwayHandler,!0),delete e.clickAwayHandler}},zYn=yd({BIMDataClickAway:()=>rS,BIMDataClickInputAway:()=>jYn}),qYn=e=>({install(t){Object.entries(Nci).forEach(([i,n])=>{e&&e.excludedComponents&&e.excludedComponents.length>0&&e.excludedComponents.includes(i)||(!e||!e.includedComponents||e.includedComponents.includes(i))&&t.component(i,n)}),(!e||e.directives!==!1)&&Object.entries(zYn).forEach(([i,n])=>t.directive(i.split("BIMData")[1],n))}}),WYn={name:"LiWrapper",render(){return Zc("li",this.$slots.default())}};function QYn(e,t){var i=new Set([]);return e.forEach(n=>{t.has(n)||i.add(n)}),i}var Yx=JA("id"),XYn=({contextMenu:e,objects:t=[],state:i=e.$viewer.state,pictos:n})=>[{name:"selectAll",get group(){return e.groupPositions.select},position:1,get label(){return e.$t("context_menu.select_all")},get picto(){return n.get(this.name)},execute:()=>i.selectObjects(t.filter(Q6(Il("visible"),lF("selected"))).map(Yx)),predicate:()=>t.some(Q6(Il("visible"),lF("selected")))},{name:"deselectAll",get group(){return e.groupPositions.select},position:2,get label(){return e.$t("context_menu.deselect_all")},get picto(){return n.get(this.name)},execute:()=>i.deselectObjects(t.filter(Il("selected")).map(Yx)),predicate:()=>t.some(Il("selected"))},{name:"selectSimilar",get group(){return e.groupPositions.select},position:3,get label(){return e.$t("context_menu.select_similar")},get picto(){return n.get(this.name)},execute(){let s=t.filter(r=>r.visible&&r.type===this.selectedObject.type&&r.id!==this.selectedObject.id).map(Yx);i.selectObjects(s)},selectedObject:null,predicate(){let s=t.filter(Q6(Il("visible"),Il("selected")));return s.length===1&&s[0].type!==void 0?(this.selectedObject=s[0],!0):(this.selectedObject=null,!1)}},{name:"reverseSelection",get label(){return e.$t("context_menu.reverse_selection")},get group(){return e.groupPositions.select},position:4,execute:()=>{let s=new Set(t.filter(Il("selected")).map(Yx)),r=new Set(t.filter(Il("visible")).map(Yx));i.selectObjects(Array.from(QYn(r,s)),{exclusive:!0})},predicate:()=>t.some(Q6(lF("selected"),Il("visible")))&&t.some(Q6(Il("selected"),Il("visible")))},{name:"showAll",get group(){return e.groupPositions.visibility},position:1,get label(){return e.$t("context_menu.show_all")},get picto(){return n.get(this.name)},execute:()=>i.showObjects(t.filter(lF("visible")).map(Yx)),predicate:()=>t.some(lF("visible"))},{name:"hide",get group(){return e.groupPositions.visibility},position:2,get label(){return e.$t("global.hide")},get picto(){return n.get(this.name)},objectsToHide:null,execute(){let s=this.objectsToHide.filter(Il("selected"));s.length>0&&i.deselectObjects(s.map(Yx)),i.hideObjects(this.objectsToHide.map(Yx))},predicate(){return this.objectsToHide=t.filter(Q6(Il("selected"),Il("visible"))),this.objectsToHide.length>0}},{name:"hideAll",get group(){return e.groupPositions.visibility},position:3,get label(){return e.$t("context_menu.hide_all")},execute:()=>{let s=t.filter(Il("visible"));s.some(Il("selected"))&&i.deselectObjects(s.filter(Il("selected")).map(Yx)),i.hideObjects(s.map(Yx))},predicate:()=>t.some(Il("visible"))}].filter(s=>s.predicate()),KYn={components:{LiWrapper:WYn},inject:["$viewer"],data(){return{enabled:!0,defaultPrevented:!1,displayed:!1,top:null,bottom:null,left:null,width:200,nextCommandId:1,currentCommands:[],contextCommands:[],registeredCommands:[],groupPositions:{select:10,visibility:20},asyncPredicateRunning:!1,activeComponentCommand:null,subMenuPosition:null,subMenuPinned:!1,componentOpenDelay:250,componentCloseDelay:120,subMenuOffset:6}},computed:{position(){return{top:this.top===null?"unset":this.top+"px",bottom:this.bottom===null?"unset":this.bottom+"px",left:this.left===null?"unset":this.left+"px",width:this.width+"px"}}},watch:{displayed(e){e?document.addEventListener("keydown",this.onKeyDown):document.removeEventListener("keydown",this.onKeyDown)},enabled(e){e||(this.resetTransientState(),this.displayed=!1)}},created(){this.$viewer.contextMenu=this,this.asyncPredicates=new Set,this.componentOpenTimer=null,this.componentCloseTimer=null},beforeUnmount(){this.clearComponentTimers()},methods:{resetTransientState(){this.currentCommands=[],this.contextCommands=[],this.defaultPrevented=!1,this.asyncPredicates.clear(),this.asyncPredicateRunning=!1,this.originEvent=null},onKeyDown(e){e.key==="Escape"&&this.away()},setPosition(e){let t=(document.fullscreenElement?document.fullscreenElement:this.$parent.$el).getBoundingClientRect();this.left=e.clientX-t.left,this.top=e.clientY-t.top,this.left+this.width>t.width&&(this.left-=this.width),e.clientY>t.top+t.height/2?(this.bottom=t.height-this.top,this.top=null):this.bottom=null},typeCheckCommand(e={}){let t=null;if((!e.execute||typeof e.execute!="function")&&!e.component&&(t="Cannot register context menu command. A command must have an execute function or a component property."),e.label||(t="Cannot register context menu command. A command must have a label."),t)throw console.error(t),Error(t);return e.id=this.nextCommandId++,e.component&&tm(e.component),e},open(e){if(e.preventDefault(),this.closeComponentMenu(),!this.enabled){this.resetTransientState(),this.displayed=!1;return}this.currentCommands=[],this.setPosition(e),this.originEvent=e,this.setCurrentCommands(),this.groupCurrentCommands(),this.defaultPrevented=!1,this.displayed=!0,document.fullscreenElement?(this.$el.parentElement.removeChild(this.$el),this.adoptiveParent=document.fullscreenElement,this.adoptiveParent.appendChild(this.$el)):this.adoptiveParent&&this.adoptiveParent!==this.$viewer.globalContext.el&&(this.adoptiveParent.removeChild(this.$el),this.$viewer.globalContext.el.appendChild(this.$el),this.adoptiveParent=null)},setCurrentCommands(){this.asyncPredicates.clear(),this.asyncPredicateRunning=!1,this.defaultPrevented||this.registeredCommands.forEach(async e=>{if(typeof e.predicate=="function"){let t=e.predicate(this.$viewer.globalContext.activeLocalContext);if(t===!0)this.currentCommands.push(e);else if(typeof t?.then=="function"){this.asyncPredicates.add(t),this.asyncPredicateRunning=!0;let i=await t;this.asyncPredicates.has(t)&&(this.asyncPredicates.delete(t),this.asyncPredicateRunning=this.asyncPredicates.size>0,i===!0&&this.currentCommands.push(e))}}else this.currentCommands.push(e)}),this.currentCommands.push(...this.contextCommands),this.contextCommands=[]},getDefaultCommands({objects:e=[],state:t=this.$viewer.state,context:i=null}){let n=new Map;return i&&this.$viewer.shortcutManager.getShortcuts(i).forEach(s=>n.set(s.name,s.key)),XYn({contextMenu:this,objects:e,state:t,pictos:n})},executeCommand(e,t){if(e.execute){e.execute(this.originEvent),this.closeComponentMenu(),this.displayed=!1;return}e.component&&this.openComponentMenu(e,this.eventLine(t),!0)},away(){this.close()},close(){this.closeComponentMenu(),this.displayed=!1},clearComponentTimers(){this.componentOpenTimer&&=(clearTimeout(this.componentOpenTimer),null),this.componentCloseTimer&&=(clearTimeout(this.componentCloseTimer),null)},eventLine(e){return e?.currentTarget||e?.target||null},onCommandMouseEnter(e,t){if(!e.component){this.subMenuPinned||this.scheduleCloseComponentMenu();return}if(this.componentCloseTimer&&=(clearTimeout(this.componentCloseTimer),null),this.componentOpenTimer&&=(clearTimeout(this.componentOpenTimer),null),this.activeComponentCommand&&this.activeComponentCommand.id===e.id&&!this.subMenuPinned)return;let i=this.eventLine(t);this.componentOpenTimer=setTimeout(()=>{this.openComponentMenu(e,i,!1)},this.componentOpenDelay)},onCommandMouseLeave(e){e.component&&!this.subMenuPinned&&this.scheduleCloseComponentMenu()},onSubMenuMouseEnter(){this.componentCloseTimer&&=(clearTimeout(this.componentCloseTimer),null)},onSubMenuMouseLeave(){this.subMenuPinned||this.scheduleCloseComponentMenu()},scheduleCloseComponentMenu(){this.componentCloseTimer&&clearTimeout(this.componentCloseTimer),this.componentCloseTimer=setTimeout(()=>{this.subMenuPinned||this.closeComponentMenu()},this.componentCloseDelay)},getPositioningParent(){return document.fullscreenElement?document.fullscreenElement:this.$el?.parentElement||this.$parent.$el},async openComponentMenu(e,t,i=!1){t&&(this.clearComponentTimers(),this.activeComponentCommand=e,this.subMenuPinned=i,this.subMenuPosition={left:"0px",top:"0px"},await this.$nextTick(),this.placeComponentMenu(t))},placeComponentMenu(e){let t=this.$refs.subMenuElement,i=this.getPositioningParent(),n=this.$el;if(!t||!i||!n||!e?.getBoundingClientRect)return;let s=i.getBoundingClientRect(),r=n.getBoundingClientRect(),o=e.getBoundingClientRect(),a=t.getBoundingClientRect(),l=this.subMenuOffset,c=s.left-r.left,d=s.right-r.left-a.width,u=o.right-r.left+l,h=o.left-r.left-a.width-l;u>d&&h>=c&&(u=h),u=Math.max(c,Math.min(u,d));let p=s.top-r.top,f=s.bottom-r.top-a.height,m=o.top-r.top,g=o.bottom-r.top-a.height;m>f&&g>=p&&(m=g),m=Math.max(p,Math.min(m,f)),this.subMenuPosition={left:u+"px",top:m+"px"}},closeComponentMenu(){this.clearComponentTimers(),this.activeComponentCommand=null,this.subMenuPosition=null,this.subMenuPinned=!1},groupCurrentCommands(){let e=new Map;this.currentCommands.forEach(i=>{(i.group===null||i.group===void 0)&&(i.group=0),e.has(i.group)?e.get(i.group).push(i):e.set(i.group,[i])}),e.forEach(i=>i.sort((n,s)=>(n.position=n.position||0,s.position=s.position||0,n.position-s.position)));let t=[...e.keys()].sort((i,n)=>i-n).map(i=>e.get(i)).flat();this.currentCommands=t},isGroupIntersection(e){if(e===0)return!1;let t=this.currentCommands[e-1],i=this.currentCommands[e];return t.group<i.group},registerContextCommand(e){let t=this.typeCheckCommand(e);return this.contextCommands.push(t),e.id},registerCommand(e){let t=this.typeCheckCommand(e);return this.registeredCommands.push(t),e.id},unregisterCommand(e){return this.registeredCommands.find(t=>t.id===e)?(this.registeredCommands=this.registeredCommands.filter(t=>t.id!==e),!0):!1},preventDefault(){this.defaultPrevented=!0}}},YYn={key:0,class:"separator"},ZYn={class:"menu-text"},JYn={key:1,class:"menu-picto"},$Yn={key:1,class:"context-menu__spinner"};function eZn(e,t,i,n,s,r){let o=se("BIMDataIconChevron"),a=se("LiWrapper"),l=se("BIMDataSpinner"),c=da("click-away");return s.displayed&&(s.currentCommands.length||s.asyncPredicateRunning)?os((Q(),we("ul",{key:0,class:"bimdata-list context-menu",style:pi(r.position)},[(Q(!0),we(yn,null,Fs(s.currentCommands,(d,u)=>(Q(),mt(a,{key:d.label,class:"context-menu__element",onClick:h=>r.executeCommand(d,h),onMouseenter:h=>r.onCommandMouseEnter(d,h),onMouseleave:h=>r.onCommandMouseLeave(d)},{default:Xe(()=>[r.isGroupIntersection(u)?(Q(),we("div",YYn)):ii("",!0),P("div",ZYn,rt(d.label),1),!d.component&&d.picto?(Q(),we("span",JYn,rt(d.picto),1)):d.component?(Q(),mt(o,{key:2,size:"xxxs",class:"fill-primary"})):ii("",!0)]),_:2},1032,["onClick","onMouseenter","onMouseleave"]))),128)),s.activeComponentCommand?(Q(),we("li",{key:0,ref:"subMenuElement",class:"context-menu__floating-sub-menu",style:pi(s.subMenuPosition),onMouseenter:t[0]||=(...d)=>r.onSubMenuMouseEnter&&r.onSubMenuMouseEnter(...d),onMouseleave:t[1]||=(...d)=>r.onSubMenuMouseLeave&&r.onSubMenuMouseLeave(...d)},[(Q(),mt(Yc(s.activeComponentCommand.component),IE(iS(s.activeComponentCommand.componentProps||{})),null,16))],36)):ii("",!0),s.asyncPredicateRunning?(Q(),we("li",$Yn,[ue(l)])):ii("",!0)],4)),[[c,r.away]]):ii("",!0)}var tZn=Ye(KYn,[["render",eZn],["__scopeId","data-v-ffd539d6"]]),iZn={name:"ViewerHeader",inject:["$viewer"],props:{visible:{type:Boolean,default:!0}},setup(){let e=xn("$viewer"),t=yp(new Map);return{logo:e.uiSettings.bimdataLogo!==!1,version:e.uiSettings.version===!1?null:e.version,headerContent:t,headerRightContentComponents:ji(()=>Array.from(t.values()).filter(i=>i.position==="right").sort((i,n)=>i.order-n.order).map(i=>i.component)),headerLeftContentComponents:ji(()=>Array.from(t.values()).filter(i=>i.position==="left").sort((i,n)=>i.order-n.order).map(i=>i.component)),addContent:i=>{if(!i.name)throw TypeError("[Viewer Header] Content must have a name");if(t.has(i.name))throw Error(`[Viewer Header] Content with name ${i.name} already exists`);t.set(i.name,i)},removeContent:i=>t.has(i)?(t.delete(i),!0):!1}}},nZn={class:"viewer-header"},sZn={class:"viewer-header__content"},rZn={class:"viewer-header__content__left"},oZn={class:"viewer-header__content__right"},aZn={key:0,class:"m-l-6 flex items-center"},lZn={key:1,class:"viewer-header__version"};function cZn(e,t,i,n,s,r){let o=se("BIMDataIllustration");return os((Q(),we("div",nZn,[P("div",sZn,[P("div",rZn,[(Q(!0),we(yn,null,Fs(n.headerLeftContentComponents,a=>(Q(),mt(Yc(a),{key:a.name}))),128))]),P("div",oZn,[(Q(!0),we(yn,null,Fs(n.headerRightContentComponents,a=>(Q(),mt(Yc(a),{key:a.name}))),128))])]),n.logo||n.version?(Q(),we("div",aZn,[n.logo?(Q(),mt(o,{key:0,name:"logo",width:"30px",height:"30px"})):ii("",!0),n.version?(Q(),we("div",lZn,rt(n.version),1)):ii("",!0)])):ii("",!0)],512)),[[Qr,i.visible]])}var dZn=Ye(iZn,[["render",cZn],["__scopeId","data-v-5c9ea6b6"]]),uZn={emits:["resize"],setup(e,{emit:t}){return{onResizerMousedown:i=>{i.preventDefault();let n=i.clientX,s=o=>{o.preventDefault();let a=o.clientX-n;n=o.clientX,t("resize",a)},r=o=>{o.preventDefault(),window.removeEventListener("mousemove",s),window.removeEventListener("mouseup",r)};window.addEventListener("mousemove",s),window.addEventListener("mouseup",r)}}}},hZn={class:"bimdata-separator"};function pZn(e,t,i,n,s,r){return Q(),we("div",hZn,[t[1]||=P("div",{class:"bimdata-separator__line"},null,-1),P("div",{class:"bimdata-separator__resizer",onMousedown:t[0]||=(...o)=>n.onResizerMousedown&&n.onResizerMousedown(...o)},null,32)])}var fZn={components:{Separator:Ye(uZn,[["render",pZn],["__scopeId","data-v-79a3b3af"]])},props:{position:{type:String,required:!0,validator(e){return["left","right"].includes(e)}},sidePanel:{type:Object,required:!0,validator(e){if(e.width&&(typeof e.width!="number"||e.width<0))return console.error(`[GlobalSidePanel] sidePanel.width must be a strictly positive number, received ${typeof e.width}`),!1;let t=typeof e?.component=="object";return t||console.error("[GlobalSidePanel] sidePanel must have a component property"),t}}},setup(e){let t=si(null),i=si(e.sidePanel.width??400);return Un(()=>e.sidePanel,()=>{Object.defineProperty(e.sidePanel,"width",{get(){return i.value},set(n){if(typeof n!="number"||n<=0){console.error(`[GlobalSidePanel] sidePanel.width must be a strictly positive number, received ${typeof n}`);return}i.value=n}}),Object.defineProperty(e.sidePanel,"componentInstance",{get(){return t.value},enumerable:!0})},{immediate:!0}),{componentInstance:t,width:i,onResize:(n,s=1)=>{let r=i.value+n*s;i.value=Math.max(0,r)}}}},mZn={class:"bimdata-global-side-panel__component"};function vZn(e,t,i,n,s,r){let o=se("Separator");return Q(),we("div",{class:"bimdata-global-side-panel",style:pi(`width: ${n.width}px`)},[i.sidePanel.resizable&&i.position==="right"?(Q(),mt(o,{key:0,onResize:t[0]||=a=>n.onResize(a,-1)})):ii("",!0),P("div",mZn,[(Q(),mt(Yc(i.sidePanel.component),{ref:"componentInstance"},null,512))]),i.sidePanel.resizable&&i.position==="left"?(Q(),mt(o,{key:1,onResize:t[1]||=a=>n.onResize(a)})):ii("",!0)],4)}var AZn={name:"BimdataViewer",components:{ContextMenu:tZn,ViewerHeader:dZn,ModalManager:FEt,GlobalSidePanel:Ye(fZn,[["render",vZn],["__scopeId","data-v-82d0d4cb"]])},setup(){let e=xn("$viewer"),{globalContext:t,shortcutManager:i}=e;Da(()=>{i&&i.destroy(),t.hub.clear()}),ra(()=>{e.pluginManager.runPluginsScripts(e)});let n=ji(()=>e.uiSettings.bimdataLogo!==!1&&(t.localContexts.length!==1||t.localContexts[0].window?.logoAndVersion)),s=ji(()=>e.uiSettings.version!==!1&&(t.localContexts.length!==1||t.localContexts[0].window?.logoAndVersion)?e.version:null),r=ji(()=>t.leftSidePanel),o=ji(()=>t.rightSidePanel),a=ji(()=>{let p=e.uiSettings.header!==!1,f=t.localContexts.length===1&&t.localContexts[0].window?.header===!1,m=!!(r.value||o.value);return p&&(!f||m)}),l=e.uiSettings.contextMenu!==!1,c=si(null);function d(p){l&&c.value.open(p)}function u(){e.shortcutManager.active=!0}function h(){e.shortcutManager.active=!1}return{Layout:e.layout.areas.component,onContextMenu:d,onMouseenter:u,onMouseleave:h,isHeaderVisible:a,viewerTemplateRef:t.templateRef,modalManagerTemplateRef:t.modalManagerTemplateRef,headerTemplateRef:t.headerTemplateRef,contextMenuTemplateRef:c,contextMenuEnabled:l,bimdataLogoOnSingleWindow:n,viewerVersionOnSingleWindow:s,version:e.version,loading:ji(()=>t.loading),spinner:ji(()=>t.spinner),leftSidePanel:r,rightSidePanel:o}}},gZn={key:1,class:"bimdata-context-loading-overlay",style:{"z-index":"3"}},yZn={key:2,class:"viewer__logo"},IZn={key:1,class:"version m-t-6"};function bZn(e,t,i,n,s,r){let o=se("ModalManager"),a=se("ContextMenu"),l=se("ViewerHeader"),c=se("GlobalSidePanel"),d=se("BIMDataSpinner"),u=se("BIMDataIllustration");return Q(),we("div",{id:"bimdata-viewer",ref:"viewerTemplateRef",class:"bimdata-viewer bimdata-design-system bimdata-scrollbar",onContextmenu:t[0]||=(...h)=>n.onContextMenu&&n.onContextMenu(...h),onMouseenter:t[1]||=(...h)=>n.onMouseenter&&n.onMouseenter(...h),onMouseleave:t[2]||=(...h)=>n.onMouseleave&&n.onMouseleave(...h)},[ue(o,{ref:"modalManagerTemplateRef"},null,512),n.contextMenuEnabled?(Q(),mt(a,{key:0,ref:"contextMenuTemplateRef"},null,512)):ii("",!0),ue(l,{ref:"headerTemplateRef",visible:n.isHeaderVisible},null,8,["visible"]),P("div",{class:"bimdata-viewer__content",style:pi(n.isHeaderVisible?"height: calc(100% - var(--bimdata-viewer-header-height, 40px))":"height: 100%")},[n.leftSidePanel?(Q(),mt(c,{key:0,"side-panel":n.leftSidePanel,position:"left"},null,8,["side-panel"])):ii("",!0),(Q(),mt(Yc(n.Layout),{style:"height: 100%; flex-grow: 1;"})),n.rightSidePanel?(Q(),mt(c,{key:1,"side-panel":n.rightSidePanel,position:"right"},null,8,["side-panel"])):ii("",!0)],4),n.loading?(Q(),we("div",gZn,[n.spinner&&n.spinner.component?(Q(),mt(Yc(n.spinner.component),IE(sI({key:0},n.spinner.props)),null,16)):(Q(),mt(d,{key:1,size:"40px",border:"5px"}))])):ii("",!0),!n.isHeaderVisible&&(n.bimdataLogoOnSingleWindow||n.viewerVersionOnSingleWindow)?(Q(),we("div",yZn,[n.bimdataLogoOnSingleWindow?(Q(),mt(u,{key:0,name:"logo"})):ii("",!0),n.viewerVersionOnSingleWindow?(Q(),we("div",IZn,rt(n.version),1)):ii("",!0)])):ii("",!0)],544)}var EZn=Ye(AZn,[["render",bZn],["__scopeId","data-v-0c1c941a"]]),TZn=["src"],wZn={class:"bimdata-models__header"},CZn={key:0,class:"bimdata-models__header__loader"},SZn={class:"bimdata-models__header__picto"},xZn={class:"bimdata-models__header__name"},RZn={key:0,class:"bimdata-models__header__name--empty"},_Zn={key:1,class:"bimdata-models__header__name--empty"},DZn={key:3},PZn=["onMousemove","onClick"],VEt=Ye({__name:"Models",props:{preview:{type:Boolean,default:!1},windowPositioning:{type:Boolean,default:!0},customFilter:{type:Function,default:null},width:{type:String,default:"350px"}},setup(e){let t=e,i=xn("$viewer"),n=si(),s=si(0),r=si(0),o=si(),a=Aa([]),l=si(!1),c=ji(()=>i.localContext.loadedModels),d=ji(()=>i.localContext.loadedModelIds),u=ji(()=>i.localContext.loadingModelIds),h=ji(()=>i.localContext.multiModel),p=ji(()=>(t.customFilter?a.value.filter(t.customFilter):a.value).map(S=>c.value.find(R=>R.document?.head_id!=null&&R.document.head_id===S.document.id)??S)),f=S=>d.value.includes(S),m=S=>u.value.includes(S),g=ji(()=>{let{x:S,y:R}=o.value?.getBoundingClientRect()??{x:0,y:0};return`top:${r.value-R}px; left:${s.value-S}px;`}),A=S=>{!h.value&&f(S.id)||u.value.length>0||(i.localContext.loadedModelIds.includes(S.id)?i.localContext.unloadModels([S.id]):i.localContext.loadModels([S.id]))},E=S=>{switch(S){case"C":return"success";case"E":return"failed";case"P":case"I":return"sandglass"}},b=(S,R)=>{S?.viewer_360_file&&(s.value=R.clientX,r.value=R.clientY),n.value=S?.viewer_360_file},T=async S=>{l.value=!0;try{return(await i.api.apiClient.modelApi.getModels(i.api.cloudId,i.api.projectId,void 0,void 0,S)).filter(R=>i.state.models.some(x=>x.archived)||!R.archived).sort(cS("updated_at",!1))}catch(R){console.error("[Models] Cannot get project models. Error: ",R)}finally{l.value=!1}return[]},C=S=>S.children?.some(R=>f(R.id))??!1;return T(i.localContext.modelTypes).then(S=>{a.value=S}),(S,R)=>{let x=se("BIMDataSpinner"),_=se("BIMDataIconModel3D"),F=se("BIMDataTextbox"),L=se("BIMDataCheckbox"),N=se("BIMDataRadio"),z=se("BIMDataIcon"),k=se("BIMDataDropdownList");return Q(),we("div",{ref_key:"templateRef",ref:o,class:mi(["bimdata-models",{"bimdata-models--window-positioning":e.windowPositioning}])},[n.value?(Q(),we("div",{key:0,class:"bimdata-models__preview",style:pi(g.value)},[P("img",{src:n.value},null,8,TZn)],4)):ii("",!0),ue(k,{style:pi(`--bimdata-models-width: ${e.width};`),width:e.width,list:p.value,"element-key":"id","per-page":40,loading:l.value,class:"bimdata-models__list",disabled:p.value.length===0,onElementClick:A},{header:Xe(({isOpen:te})=>[P("div",wZn,[l.value||u.value.length>0?(Q(),we("div",CZn,[ue(x)])):(Q(),we(yn,{key:1},[P("div",SZn,[ue(_)]),P("div",{class:mi(["bimdata-models__header__number bimdata-info-length",{"bimdata-models__header__number--empty":d.value.length===0}])},[P("span",null,rt(d.value.length),1)],2),P("div",xZn,[p.value.length===0?(Q(),we("span",RZn,rt(S.$t("model.no_model")),1)):d.value.length===0?(Q(),we("span",_Zn,rt(S.$t("model.no_loaded_model")),1)):d.value.length===1?(Q(),mt(F,{key:2,text:c.value[0].name,tooltip:!te},null,8,["text","tooltip"])):d.value.length>1?(Q(),we("span",DZn,rt(S.$t("model.selected_models")),1)):ii("",!0)])],64))])]),element:Xe(({element:te,close:fe})=>[P("div",{class:"bimdata-models__model",onMousemove:ye=>e.preview&&b(te,ye),onMouseout:R[0]||=ye=>e.preview&&b(),onClick:()=>{!h.value&&!f(te.id)&&fe()}},[h.value?(Q(),mt(L,{key:0,"model-value":f(te.id)||C(te),disabled:te.status!=="C"||u.value.length>0},null,8,["model-value","disabled"])):(Q(),mt(N,{key:1,"model-value":f(te.id)||C(te),disabled:te.status!=="C"||u.value.length>0},null,8,["model-value","disabled"])),ue(z,{margin:"0 calc(var(--spacing-unit) / 2)",name:E(te.status),size:"xs",class:mi({"fill-success":te.status==="C","fill-high":te.status==="E"})},null,8,["name","class"]),ue(F,{class:mi({"bimdata-models__model__name":!0,"bimdata-models__model__name--disabled":te.status!=="C"||u.value.length>0}),text:te.name,width:`calc(100% -
|
|
96203
96203
|
${h.value?13:23}px - 2 * 6px - 16px)`},null,8,["class","text","width"]),te.document&&!te.document.is_head_version?(Q(),mt(z,{key:2,name:"versioning",fill:"",color:"default",size:"xs",margin:"0 0 0 6px"})):ii("",!0)],40,PZn),m(te.id)?(Q(),mt(x,{key:0,class:"bimdata-models__model__spinner"})):ii("",!0)]),_:1},8,["style","width","list","loading","disabled"])],2)}}},[["__scopeId","data-v-34c2cf79"]]),OZn="data:image/svg+xml,%3csvg%20width='16'%20height='21'%20viewBox='0%200%2016%2021'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M7.47193%202.76644C7.65699%202.84439%207.77716%203.02565%207.777%203.22661L7.77339%207.94624C7.77318%208.22238%207.54916%208.44655%207.27301%208.44693L2.4192%208.45366C2.21569%208.45394%202.03258%208.33085%201.95617%208.1424C1.87975%207.95394%201.92528%207.73773%202.07129%207.59566L6.92872%202.86931C7.0729%202.72902%207.28688%202.6885%207.47193%202.76644ZM3.65141%207.45195L6.77378%207.44762L6.7761%204.41157L3.65141%207.45195ZM5.81657%200.893911L6.02338%200.893274L13.3879%200.870595C14.679%200.866619%2015.7208%201.91642%2015.722%203.20083L15.2221%203.20237L15.722%203.20052L15.722%203.20083L15.745%2017.8999L15.745%2017.9002C15.7462%2019.1846%2014.7063%2020.2408%2013.4153%2020.2448L2.35929%2020.2788C1.07114%2020.2828%200.0171799%2019.2362%200.0159721%2017.9486L0.00563138%206.92409L0.00543684%206.71668L0.152103%206.56972L5.67032%201.04045L5.81657%200.893911ZM6.23113%201.89264L1.00582%207.12841L1.01597%2017.9455C1.01666%2018.6791%201.62068%2019.2811%202.35835%2019.2788L13.4143%2019.2448C14.1484%2019.2425%2014.7456%2018.6402%2014.745%2017.9035C14.745%2017.9034%2014.745%2017.9033%2014.745%2017.9033L14.722%203.20423L14.722%203.20391C14.7213%202.46716%2014.123%201.86833%2013.3888%201.87059L6.23113%201.89264Z'%20fill='%232F374A'/%3e%3c/svg%3e",NZn=["src"],MZn={key:0,class:"bimdata-multi-model-loader__header-container"},LZn={key:0,class:"bimdata-multi-model-loader__header__loader"},BZn={class:"bimdata-multi-model-loader__header__picto"},FZn=["src"],kZn={class:"bimdata-multi-model-loader__header__name"},UZn={key:0,class:"bimdata-multi-model-loader__header__name--empty"},HZn={key:1,class:"bimdata-multi-model-loader__header__name--empty"},GZn={key:3},VZn={key:1,class:"bimdata-multi-model-loader__main"},jZn=["onMousemove","onClick"],zZn=Ye({__name:"BIMDataMultiModelLoader",props:{preview:{type:Boolean,default:!1},windowPositioning:{type:Boolean,default:!0},customFilter:{type:Function,default:null},width:{type:String,default:"350px"},statusProperty:{type:String,default:"status"}},setup(e){let t=e,i=xn("$viewer"),n=si(),s=si(0),r=si(0),o=si(),a=Aa([]),l=si(!1),c=si(!0),d=N=>{N.key==="Escape"?c.value=!0:N.key==="Enter"&&x()};Un(c,N=>{N?(window.removeEventListener("keydown",d),b.clear(),E.clear(),n.value=null):window.addEventListener("keydown",d)});let u=ji(()=>i.localContext.loadedModels),h=ji(()=>i.localContext.loadedModelIds),p=ji(()=>i.localContext.loadingModelIds),f=ji(()=>i.localContext.multiModel),m=ji(()=>(t.customFilter?a.value.filter(t.customFilter):a.value).map(N=>u.value.find(z=>z.document?.head_id!=null&&z.document.head_id===N.document.id)??N)),g=N=>h.value.includes(N),A=N=>p.value.includes(N),E=yp(new Set),b=yp(new Set),T=N=>N.children?.some(z=>g(z.id))??!1,C=N=>(g(N.id)||T(N)||E.has(N))&&!b.has(N),S=ji(()=>{let{x:N,y:z}=o.value.getBoundingClientRect();return`top:${r.value-z}px; left:${s.value-N}px;`}),R=N=>{N[t.statusProperty]==="C"&&(!f.value&&g(N.id)||(g(N.id)?b.has(N)?b.delete(N):b.add(N):E.has(N)?E.delete(N):E.add(N)))},x=()=>{E.size>0&&i.localContext.loadModels(Array.from(E).map(N=>N.id)),b.size>0&&i.localContext.unloadModels(Array.from(b).map(N=>N.id)),c.value=!0},_=N=>{switch(N){case"C":return"success";case"E":return"failed";case"P":case"I":return"sandglass"}},F=N=>N.document&&!N.document.is_head_version,L=(N,z)=>{!t.preview||c.value||(N?.viewer_360_file&&(s.value=z.clientX,r.value=z.clientY),n.value=N?.viewer_360_file)};return(async N=>{l.value=!0;try{return(await i.api.apiClient.modelApi.getModels(i.api.cloudId,i.api.projectId,void 0,void 0,N)).filter(z=>i.state.models.some(k=>k.archived)||!z.archived).sort(cS("updated_at",!1))}catch(z){console.error("[Models] Cannot get project models. Error: ",z)}finally{l.value=!1}return[]})(i.localContext.modelTypes).then(N=>{a.value=N}),(N,z)=>{let k=se("BIMDataSpinner"),te=se("BIMDataTextbox"),fe=se("BIMDataIconChevron"),ye=se("BIMDataButton"),je=se("BIMDataIconFileIfcPolychrome"),Oe=se("BIMDataCheckbox"),Ge=se("BIMDataRadio"),We=se("BIMDataIcon"),Ze=se("BIMDataPaginatedList"),Ft=da("click-away");return Q(),we("div",{ref_key:"templateRef",ref:o,class:mi(["bimdata-multi-model-loader",{"bimdata-multi-model-loader--window-positioning":e.windowPositioning}])},[n.value?(Q(),we("div",{key:0,class:"bimdata-multi-model-loader__preview",style:pi(S.value)},[P("img",{src:n.value},null,8,NZn)],4)):ii("",!0),ue(Wa,{name:"fade",mode:"out-in"},{default:Xe(()=>[c.value?(Q(),we("div",MZn,[es(N.$slots,"left",{},void 0,!0),P("div",{class:"bimdata-multi-model-loader__header",onClick:z[0]||=Pt=>c.value=!1},[l.value||p.value.length>0?(Q(),we("div",LZn,[ue(k)])):(Q(),we(yn,{key:1},[P("div",BZn,[P("img",{src:kn(OZn),alt:"file icon"},null,8,FZn)]),P("div",{class:mi(["bimdata-multi-model-loader__header__number bimdata-info-length",{"bimdata-multi-model-loader__header__number--empty":h.value.length===0}])},[P("span",null,rt(h.value.length),1)],2),P("div",kZn,[m.value.length===0?(Q(),we("span",UZn,rt(N.$t("model.no_model")),1)):h.value.length===0?(Q(),we("span",HZn,rt(N.$t("model.no_loaded_model")),1)):h.value.length===1?(Q(),mt(te,{key:2,text:u.value[0].name,tooltip:c.value,width:"233px"},null,8,["text","tooltip"])):h.value.length>1?(Q(),we("span",GZn,rt(N.$t("model.selected_models")),1)):ii("",!0)]),ue(ye,{color:"default",icon:"",radius:"",fill:"",width:"21px",height:"21px"},{default:Xe(()=>[ue(fe,{size:"xxxs"})]),_:1})],64))]),es(N.$slots,"right",{},void 0,!0)])):os((Q(),we("div",VZn,[ue(Ze,{list:m.value,"per-page":10},{element:Xe(({element:Pt})=>[P("div",{class:mi(["bimdata-multi-model-loader__main__model",{"bimdata-multi-model-loader__main__model--disabled":Pt[e.statusProperty]!=="C"}]),onMousemove:tt=>L(Pt,tt),onMouseout:z[1]||=tt=>L(),onClick:tt=>R(Pt)},[ue(je,{fill:"",color:"default",size:"xs"}),f.value?(Q(),mt(Oe,{key:0,"model-value":C(Pt),disabled:Pt[e.statusProperty]!=="C"},null,8,["model-value","disabled"])):(Q(),mt(Ge,{key:1,"model-value":C(Pt),disabled:Pt[e.statusProperty]!=="C"},null,8,["model-value","disabled"])),ue(te,{class:mi({"bimdata-multi-model-loader__main__model__name":!0,"bimdata-multi-model-loader__main__model__name--disabled":Pt[e.statusProperty]!=="C"}),text:Pt.name,width:F(Pt)?"333px":"363px"},null,8,["class","text","width"]),F(Pt)?(Q(),mt(We,{key:2,name:"versioning",fill:"",color:"default",size:"xs",margin:"0 0 0 6px"})):ii("",!0),A(Pt.id)?(Q(),mt(k,{key:3,class:"bimdata-multi-model-loader__main__model__spinner"})):(Q(),mt(We,{key:4,name:_(Pt[e.statusProperty]),size:"xs",class:mi({"fill-success":Pt[e.statusProperty]==="C","fill-high":Pt[e.statusProperty]==="E"})},null,8,["name","class"]))],42,jZn)]),_:1},8,["list"]),ue(ye,{class:"bimdata-multi-model-loader__main__validate",width:"93px",color:"primary",fill:"",radius:"",disabled:kn(E).size===0&&kn(b).size===0,onClick:x},{default:Xe(()=>[dn(rt(N.$t("global.validate")),1)]),_:1},8,["disabled"])])),[[Ft,()=>c.value=!0]])]),_:3})],2)}}},[["__scopeId","data-v-e99c2e7b"]]),qZn={data(){return{shown:!1}},mounted(){setTimeout(()=>{this.shown=!0},500)}};function WZn(e,t,i,n,s,r){let o=se("BIMDataIllustration");return Q(),we("div",{class:"bimdata__no-model",style:pi({"--no-model--opacity":+!!s.shown})},[ue(o,{name:"emptyViewer",x:"90",y:"90"}),P("span",null,rt(e.$t("model.select_model")),1)],4)}var jEt=Ye(qZn,[["render",WZn],["__scopeId","data-v-5ffd9bc0"]]);window.BIMDataViewerVue=rae;var QZn=class{constructor(e={}){let{api:t={},ui:i}=e;this.uiCfg=i,t.apiUrl||=(console.info("[BIMData Viewer] INFO - Viewer config - `apiUrl` not set, use 'https://api.bimdata.io' by default."),"https://api.bimdata.io"),t.archiveUrl||=(console.info("[BIMData Viewer] INFO - Viewer config - `archiveUrl` not set, use 'https://archive.bimdata.io' by default."),"https://archive.bimdata.io"),t.pdfBackendUrl||=(console.info("[BIMData Viewer] INFO - Viewer config - `pdfBackendUrl` not set, use 'https://pdf-backend.bimdata.io' by default."),"https://pdf-backend.bimdata.io"),t.ifcIds&&(console.warn("[BIMData Viewer] DEPRECATED - Viewer config - please use the `modelIds` property instead of `ifcIds`."),t.modelIds===void 0&&(t.modelIds=t.ifcIds)),t.modelIds||=[],t.offline?.dataFile&&(t.offline.data=t.offline.dataFile),this.$viewer=new LYn(e),t.offline?.enabled?this.$viewer.api.enableOfflineMode(t.offline.data,t.offline.options).then(()=>this.state.loadModels(t.modelIds)):(this.$viewer.globalContext.loadingProcessStart(),this.state.loadModels(t.modelIds).finally(()=>this.$viewer.globalContext.loadingProcessEnd())),this.vueApp=null}get state(){return this.$viewer.state}get api(){return this.$viewer.api}async mount(e,t="3d"){let{$viewer:i}=this;await i.api.ready;try{let l=await i.api.apiClient.collaborationApi.checkProjectAccess(i.api.cloudId,i.api.projectId);i.api.permissions=GEt(l)}catch{i.api.permissions=GEt()}let n=this.api.accessToken,{i18n:s}=i;s.registerTranslations(i.pluginManager.pluginTranslations),i.layout.apply(t);let r=sae({i18n:s.i18nVuePlugin,data(){return{accessToken:n}},render(){return Zc(EZn,{style:"height: 100%"})}}).use(s.i18nVuePlugin).use(qYn()).use(VYn({i18nPlugin:s.i18nVuePlugin})).use(HYn({apiClient:i.api.apiClient,i18nPlugin:s.i18nVuePlugin}));r.provide("$viewer",i),r.provide("BIMDATA_DESIGN_SYSTEM_DARK_THEME",ji(()=>i.darkTheme)),r.component("BIMDataModelLoader",VEt),r.component("BIMDataMultiModelLoader",zZn),r.component("BIMDataNoModelWindowPlaceHolder",jEt),r.component("BIMDataStoreySelector",nEe),r.component("ModelsLoader",VEt),r.component("NoModelWindowPlaceHolder",jEt);let o=e instanceof HTMLElement?e:document.querySelector(e);o&&(o.style.height="100%");let a=r.mount(e);return a.$viewer=i,BYn(a.$el,this.uiCfg?.style),typeof window<"u"&&(window.bimdataViewer=a),this.vueApp=r,a}destroy(){this.vueApp?.unmount()}setLocale(e){if(!cke.includes(e))throw Error(`Viewer available locales are ${cke.join(", ")}.`);this.$viewer.i18n.locale=e}registerPlugin(e){this.$viewer.registerPlugin(e)}registerWindow(e){return this.$viewer.windowManager.registerWindow(e)}unregisterWindow(e){return this.$viewer.windowManager.unregisterWindow(e)}setAccessToken(e){this.api.accessToken=e}async loadModels(e){this.$viewer.globalContext.loadingProcessStart();let t=await this.state.loadModels(e);return this.$viewer.globalContext.loadingProcessEnd(),t}loadIfcs(e){return console.warn("[BIMData Viewer] DEPRECATED - Viewer - please use the loadModels method instead of loadIfcs."),this.loadModels(e)}},zEt=(e={})=>new QZn(e);window.makeBIMDataViewer=zEt;export{zEt as default};
|