@liveroom-tech/react-immersive 6.0.0 → 6.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -3737,7 +3737,7 @@ void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor)
3737
3737
  gl_FragColor = texelFetch( map, pixel, 0 );
3738
3738
 
3739
3739
  }
3740
- `}))}increaseSizeTo(e){this._target.setSize(Math.max(this._target.width,e),1)}readDataAsync(e){let{_renderer:t,_target:n}=this;return t.readRenderTargetPixelsAsync(n,0,0,e.length/4,1,e)}readData(e){let{_renderer:t,_target:n}=this;t.readRenderTargetPixels(n,0,0,e.length/4,1,e)}renderPixelToTarget(e,t,n){let{_renderer:r,_target:i}=this;Hc.min.copy(t),Hc.max.copy(t),Hc.max.x+=1,Hc.max.y+=1,r.initRenderTarget(i),r.copyTextureToTexture(e,i.texture,Hc,n,0)}},Yo=new class{constructor(){let e=null;Object.getOwnPropertyNames(d_.prototype).forEach(t=>{t!=="constructor"&&(this[t]=(...n)=>(e||(e=new d_),e[t](...n)))})}},p_=new re.Vector2,m_=new re.Vector2,f_=new re.Vector2;function IO(e,t){return t===0?e.getAttribute("uv"):e.getAttribute(`uv${t}`)}function C_(e,t,n=[,,,]){let r=3*t,i=3*t+1,o=3*t+2;return e.index&&(r=e.index.getX(r),i=e.index.getX(i),o=e.index.getX(o)),n[0]=r,n[1]=i,n[2]=o,n}function T_(e,t,n,r,i){let[o,a,s]=r,l=IO(e,t);p_.fromBufferAttribute(l,o),m_.fromBufferAttribute(l,a),f_.fromBufferAttribute(l,s),i.set(0,0,0).addScaledVector(p_,n.x).addScaledVector(m_,n.y).addScaledVector(f_,n.z)}function P_(e,t,n,r){let i=e.x-Math.floor(e.x),o=e.y-Math.floor(e.y),a=Math.floor(i*t%t),s=Math.floor(o*n%n);return r.set(a,s),r}var h_=new re.Vector2,g_=new re.Vector2,b_=new re.Vector2,kO=class extends Xp{constructor(e,t,n=null){super(e,t,n),this.channels=Tn(n,"channels",[0]),this.index=Tn(n,"index",null),this.texCoord=Tn(n,"texCoord",null),this.valueLength=parseInt(this.type.replace(/[^0-9]/g,""))||1}readDataFromBuffer(e,t,n=null){let r=this.type;if(r==="BOOLEAN"||r==="STRING")throw Error("PropertyTextureAccessor: BOOLEAN and STRING types not supported.");return __(e,t*this.valueLength,r,n)}},BO=class extends ob{constructor(...e){super(...e),this.isPropertyTextureAccessor=!0,this._asyncRead=!1,this._initProperties(kO)}getData(e,t,n,r={}){let i=this.properties;Wp(i,r);let o=Object.keys(i),a=o.map(s=>r[s]);return this.getPropertyValuesAtTexel(o,e,t,n,a),o.forEach((s,l)=>r[s]=a[l]),r}async getDataAsync(e,t,n,r={}){let i=this.properties;Wp(i,r);let o=Object.keys(i),a=o.map(s=>r[s]);return await this.getPropertyValuesAtTexelAsync(o,e,t,n,a),o.forEach((s,l)=>r[s]=a[l]),r}getPropertyValuesAtTexelAsync(...e){this._asyncRead=!0;let t=this.getPropertyValuesAtTexel(...e);return this._asyncRead=!1,t}getPropertyValuesAtTexel(e,t,n,r,i=[]){for(;i.length<e.length;)i.push(null);i.length=e.length,Yo.increaseSizeTo(i.length);let o=this.data,a=this.definition.properties,s=this.properties,l=C_(r,t);for(let p=0,u=e.length;p<u;p++){let f=e[p];if(!a[f])continue;let m=s[f],v=o[m.index];T_(r,m.texCoord,n,l,h_),P_(h_,v.image.width,v.image.height,g_),b_.set(p,0),Yo.renderPixelToTarget(v,g_,b_)}let c=new Uint8Array(e.length*4);if(this._asyncRead)return Yo.readDataAsync(c).then(()=>(d.call(this),i));return Yo.readData(c),d.call(this),i;function d(){for(let p=0,u=e.length;p<u;p++){let f=e[p],m=s[f],v=m.type;if(i[p]=ib(m,i[p]),!m)throw Error("PropertyTextureAccessor: Requested property does not exist.");if(!a[f]){i[p]=m.resolveDefault(i);continue}let g=m.valueLength*(m.count||1),b=m.channels.map(w=>c[4*p+w]),h=m.componentType,y=new(Wc(h,v))(g);if(new Uint8Array(y.buffer).set(b),m.array){let w=i[p];for(let T=0,x=w.length;T<x;T++)w[T]=m.readDataFromBuffer(y,T,w[T])}else i[p]=m.readDataFromBuffer(y,0,i[p]);i[p]=m.adjustValueScaleOffset(i[p]),i[p]=m.resolveEnumsToStrings(i[p]),i[p]=m.resolveNoData(i[p])}}}dispose(){this.data.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},tb=class{constructor(e,t,n,r=null,i=null){let{schema:o,propertyTables:a=[],propertyTextures:s=[],propertyAttributes:l=[]}=e,{enums:c,classes:d}=o,p=a.map(m=>new LO(m,d,c,n)),u=[],f=[];r&&(r.propertyTextures&&(u=r.propertyTextures.map(m=>new BO(s[m],d,c,t))),r.propertyAttributes&&(f=r.propertyAttributes.map(m=>new OO(l[m],d,c)))),this.schema=o,this.tableAccessors=p,this.textureAccessors=u,this.attributeAccessors=f,this.object=i,this.textures=t,this.nodeMetadata=r}getPropertyTableData(e,t,n=null){if(!Array.isArray(e))n||(n={}),n=this.tableAccessors[e].getData(t,n);else{n||(n=[]);let r=Math.min(e.length,t.length);n.length=r;for(let i=0;i<r;i++){let o=this.tableAccessors[e[i]];n[i]=o.getData(t[i],n[i])}}if(Array.isArray(e)!==Array.isArray(n)||Array.isArray(e)!==Array.isArray(t))throw Error("StructuralMetadata: Scalar and array inputs cannot be mixed.");return n}getPropertyTableInfo(e=null){if(e===null&&(e=this.tableAccessors.map((t,n)=>n)),Array.isArray(e))return e.map(t=>{let n=this.tableAccessors[t];return{name:n.name,className:n.definition.class}});{let t=this.tableAccessors[e];return{name:t.name,className:t.definition.class}}}getPropertyTextureData(e,t,n=[]){let r=this.textureAccessors;n.length=r.length;for(let i=0;i<r.length;i++)n[i]=r[i].getData(e,t,this.object.geometry,n[i]);return n}async getPropertyTextureDataAsync(e,t,n=[]){let r=this.textureAccessors;n.length=r.length;let i=[];for(let o=0;o<r.length;o++){let a=r[o].getDataAsync(e,t,this.object.geometry,n[o]).then(s=>{n[o]=s});i.push(a)}return await Promise.all(i),n}getPropertyTextureInfo(){return this.textureAccessors}getPropertyAttributeData(e,t=[]){let n=this.attributeAccessors;t.length=n.length;for(let r=0;r<n.length;r++)t[r]=n[r].getData(e,this.object.geometry,t[r]);return t}getPropertyAttributeInfo(){return this.attributeAccessors.map(e=>({name:e.name,className:e.definition.class}))}dispose(){this.textureAccessors.forEach(e=>e.dispose()),this.tableAccessors.forEach(e=>e.dispose()),this.attributeAccessors.forEach(e=>e.dispose())}},Gc="EXT_structural_metadata";function NO(e,t=[]){let n=e.json.textures?.length||0,r=Array(n).fill(null);return t.forEach(({properties:i})=>{for(let o in i){let{index:a}=i[o];r[a]===null&&(r[a]=e.loadTexture(a))}}),Promise.all(r)}function VO(e,t=[]){let n=e.json.bufferViews?.length||0,r=Array(n).fill(null);return t.forEach(({properties:i})=>{for(let o in i){let{values:a,arrayOffsets:s,stringOffsets:l}=i[o];r[a]===null&&(r[a]=e.getDependency("bufferView",a)),r[s]===null&&(r[s]=e.getDependency("bufferView",s)),r[l]===null&&(r[l]=e.getDependency("bufferView",l))}}),Promise.all(r)}var A_=class{constructor(e){this.parser=e,this.name=Gc}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(Gc))return;let r=null,i=t.json.extensions[Gc];if(i.schemaUri){let{manager:l,path:c,requestHeader:d,crossOrigin:p}=t.options,u=new URL(i.schemaUri,c).toString(),f=new re.FileLoader(l);f.setCrossOrigin(p),f.setResponseType("json"),f.setRequestHeader(d),r=f.loadAsync(u).then(m=>{i={...i,schema:m}})}let[o,a]=await Promise.all([NO(t,i.propertyTextures),VO(t,i.propertyTables),r]),s=new tb(i,o,a);e.userData.structuralMetadata=s,e.traverse(l=>{if(t.associations.has(l)){let{meshes:c,primitives:d}=t.associations.get(l),p=t.json.meshes[c]?.primitives[d];if(p&&p.extensions&&p.extensions[Gc]){let u=p.extensions[Gc];l.userData.structuralMetadata=new tb(i,o,a,u,l)}else l.userData.structuralMetadata=s}})}},y_=new re.Vector2,v_=new re.Vector2,x_=new re.Vector2;function jO(e){return e.x>e.y&&e.x>e.z?0:e.y>e.z?1:2}var E_=class{constructor(e,t,n){this.geometry=e,this.textures=t,this.data=n,this._asyncRead=!1,this.featureIds=n.featureIds.map(r=>{let{texture:i,...o}=r,a={label:null,propertyTable:null,nullFeatureId:null,...o};return i&&(a.texture={texCoord:0,channels:[0],...i}),a})}getTextures(){return this.textures}getFeatureInfo(){return this.featureIds}getFeaturesAsync(...e){this._asyncRead=!0;let t=this.getFeatures(...e);return this._asyncRead=!1,t}getFeatures(e,t){let{geometry:n,textures:r,featureIds:i}=this,o=Array(i.length).fill(null),a=i.length;Yo.increaseSizeTo(a);let s=C_(n,e),l=s[jO(t)];for(let p=0,u=i.length;p<u;p++){let f=i[p],m="nullFeatureId"in f?f.nullFeatureId:null;if("texture"in f){let v=r[f.texture.index];T_(n,f.texture.texCoord,t,s,y_),P_(y_,v.image.width,v.image.height,v_),x_.set(p,0),Yo.renderPixelToTarget(r[f.texture.index],v_,x_)}else if("attribute"in f){let v=n.getAttribute(`_feature_id_${f.attribute}`).getX(l);v!==m&&(o[p]=v)}else{let v=l;v!==m&&(o[p]=v)}}let c=new Uint8Array(a*4);if(this._asyncRead)return Yo.readDataAsync(c).then(()=>(d(),o));return Yo.readData(c),d(),o;function d(){let p=new Uint32Array(1);for(let u=0,f=i.length;u<f;u++){let m=i[u],v="nullFeatureId"in m?m.nullFeatureId:null;if("texture"in m){let{channels:g}=m.texture,b=g.map(y=>c[4*u+y]);new Uint8Array(p.buffer).set(b);let h=p[0];h!==v&&(o[u]=h)}}}}dispose(){this.textures.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},qp="EXT_mesh_features";function w_(e,t,n){e.traverse(r=>{if(t.associations.has(r)){let{meshes:i,primitives:o}=t.associations.get(r),a=t.json.meshes[i]?.primitives[o];a&&a.extensions&&a.extensions[qp]&&n(r,a.extensions[qp])}})}var R_=class{constructor(e){this.parser=e,this.name=qp}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(qp))return;let r=t.json.textures?.length||0,i=Array(r).fill(null);w_(e,t,(a,{featureIds:s})=>{s.forEach(l=>{if(l.texture&&i[l.texture.index]===null){let c=l.texture.index;i[c]=t.loadTexture(c)}})});let o=await Promise.all(i);w_(e,t,(a,s)=>{a.userData.meshFeatures=new E_(a.geometry,o,s)})}},O_=class{constructor(){this.name="CESIUM_RTC"}afterRoot(e){if(e.parser.json.extensions&&e.parser.json.extensions.CESIUM_RTC){let{center:t}=e.parser.json.extensions.CESIUM_RTC;t&&(e.scene.position.x+=t[0],e.scene.position.y+=t[1],e.scene.position.z+=t[2])}}},ab=class{constructor(e){e={metadata:!0,rtc:!0,plugins:[],dracoLoader:null,ktxLoader:null,meshoptDecoder:null,autoDispose:!0,...e},this.tiles=null,this.metadata=e.metadata,this.rtc=e.rtc,this.plugins=e.plugins,this.dracoLoader=e.dracoLoader,this.ktxLoader=e.ktxLoader,this.meshoptDecoder=e.meshoptDecoder,this._gltfRegex=/\.(gltf|glb)$/g,this._dracoRegex=/\.drc$/g,this._loader=null}init(e){let t=new S_.GLTFLoader(e.manager);this.dracoLoader&&(t.setDRACOLoader(this.dracoLoader),e.manager.addHandler(this._dracoRegex,this.dracoLoader)),this.ktxLoader&&t.setKTX2Loader(this.ktxLoader),this.meshoptDecoder&&t.setMeshoptDecoder(this.meshoptDecoder),this.rtc&&t.register(()=>new O_),this.metadata&&(t.register(()=>new A_),t.register(()=>new R_)),this.plugins.forEach(n=>t.register(n)),e.manager.addHandler(this._gltfRegex,t),this.tiles=e,this._loader=t}dispose(){this.tiles.manager.removeHandler(this._gltfRegex),this.tiles.manager.removeHandler(this._dracoRegex),this.autoDispose&&(this.ktxLoader.dispose(),this.dracoLoader.dispose())}};var{clamp:Tj}=re.MathUtils;var Pj=new nb.FullScreenQuad(new re.MeshBasicMaterial),UO=new re.DataTexture(new Uint8Array([255,255,255,255]),1,1);UO.needsUpdate=!0;var zO=0,FO=1,HO=2,GO=3,WO=4,qO=5,XO=6,$O=7,YO=8,KO=9,ZO=10,QO=11,Aj=Object.freeze({NONE:zO,SCREEN_ERROR:FO,GEOMETRIC_ERROR:HO,DISTANCE:GO,DEPTH:WO,RELATIVE_DEPTH:qO,IS_LEAF:XO,RANDOM_COLOR:$O,RANDOM_NODE_COLOR:YO,CUSTOM_COLOR:KO,LOAD_ORDER:ZO,INDEXED_COLOR:QO});var Ej=Math.PI/4,Rj=3/5;var $o={NONE:0,NOT_READY:1,NO_FIT:2,DEPTH:3,OCCUPANCY:4,SPACING:5,ANGLE:6,FACING:7};var Oj=new class{constructor(){this._cache={}}getColor(...e){let t=e.pop(),n=e.join("_"),{_cache:r}=this;return n in r||(t.setHSL(Math.random(),1,.5),r[n]=t.getHex()),t.set(r[n])}};var Dj={[$o.NONE]:16777215,[$o.NOT_READY]:7829367,[$o.NO_FIT]:2250239,[$o.DEPTH]:4473924,[$o.OCCUPANCY]:65535,[$o.SPACING]:16776960,[$o.ANGLE]:16711680,[$o.FACING]:16711935};var Lj=Math.PI/180;var Ij=Ja*Math.PI*2;var kj=Ja*Math.PI*2;var k_=require("three/examples/jsm/loaders/DRACOLoader.js"),B_=require("three/examples/jsm/loaders/KTX2Loader.js"),N_=require("three/examples/jsm/libs/meshopt_decoder.module.js"),vr=require("three");var $c=require("three");function D_(e){return!!e&&!e.isInterleavedBufferAttribute}function L_(e,t,n,r){for(let i=0;i<e.count;i+=1)for(let o=0;o<e.itemSize;o+=1)t.setComponent(i,o,$c.MathUtils.clamp(e.getComponent(i,o),n,r));return t}function JO(e){for(let t=0;t<e.count;t+=1)for(let n=0;n<e.itemSize;n+=1){let r=e.getComponent(t,n);if(!Number.isFinite(r)||r<0||r>1)return!1}return!0}var $p=class{constructor(){this.name="RI_VERTEX_COMPRESSION_PLUGIN";this.priority=-99}processTileModel(t){t.traverse(n=>{let r=n.geometry;if(!r)return;let i=r.attributes.normal;D_(i)&&!(i.array instanceof Int16Array)&&(r.attributes.normal=L_(i,new $c.BufferAttribute(new Int16Array(i.count*i.itemSize),i.itemSize,!0),-1,1));for(let o of["uv","uv1","uv2","uv3"]){let a=r.attributes[o];!D_(a)||a.array instanceof Uint16Array||!JO(a)||(r.attributes[o]=L_(a,new $c.BufferAttribute(new Uint16Array(a.count*a.itemSize),a.itemSize,!0),0,1))}})}};var Yc=require("react/jsx-runtime"),eD=0,I_=4,tD=6,nD=12,rD=4;function iD(e){try{let t=typeof window>"u"?new URL(e):new URL(e,window.location.href);return new URL("objects.json",t).toString()}catch{return null}}function sb({diagnosticsRef:e,url:t,rotation:n=[0,0,0],errorTarget:r=64,cacheSize:i=800,memoryBudgetMB:o=800,decoderConfig:a,objectBindings:s,itemMaterials:l,sceneConfig:c,selectedItem:d,panelHoveredItem:p,highlightOnHover:u=!0,onItemClick:f,onItemHover:m,onItemDoubleClick:v,onItemContextMenu:g,onObjectCatalog:b,onTilesetBounds:h,onModelLoaded:y,onLoadError:w,nodeRefsOut:T,onNodeRefsChange:x,materialRefsOut:D,explodeFactor:A=0,suspendBindingTransforms:S=!1}){let{camera:M,gl:_,invalidate:C}=(0,Yp.useThree)(),E=(0,$e.useRef)(null),[L,k]=(0,$e.useState)(null),B=(0,$e.useRef)({onItemClick:f,onItemHover:m,onItemDoubleClick:v,onObjectCatalog:b,onTilesetBounds:h,onModelLoaded:y,onLoadError:w,onNodeRefsChange:x});B.current={onItemClick:f,onItemHover:m,onItemDoubleClick:v,onObjectCatalog:b,onTilesetBounds:h,onModelLoaded:y,onLoadError:w,onNodeRefsChange:x};let j=(0,$e.useRef)(!0),[R,O]=(0,$e.useState)(null),N=(0,$e.useRef)(null);N.current=R;let H=(0,$e.useRef)([]),Y=(0,$e.useRef)(!1);(0,$e.useEffect)(()=>{let se=new _p;return O(se),()=>se.dispose()},[t]);let ue=(0,$e.useRef)(null),be=(0,$e.useRef)(0),X=(0,$e.useRef)(!1),G=o*1024*1024,J=(0,$e.useRef)(!1),ee=(0,$e.useRef)(Ag),fe=(0,$e.useRef)(null),K=(0,$e.useRef)(null),oe=(0,$e.useRef)(null);(0,$e.useEffect)(()=>()=>{oe.current!==null&&clearTimeout(oe.current)},[]);let ae=a?.dracoDecoderPath??bg,pe=a?.ktx2TranscoderPath??yg,De=a?.meshopt??!0,[te,Fe]=(0,$e.useState)(null);(0,$e.useEffect)(()=>{X.current=!1,J.current=!1;let se=new Jg(t);se.loadAncestors=!0;let Re=new Rp;Re.priorityCallback=se.downloadQueue.priorityCallback,Re.maxJobsPerOrigin=nD;let Ee=new Li;Ee.priorityCallback=se.parseQueue.priorityCallback,Ee.maxJobs=tD;let nt=new Li;nt.priorityCallback=se.processNodeQueue.priorityCallback,nt.maxJobs=se.processNodeQueue.maxJobs;let Qe=new Dc;Qe.unloadPriorityCallback=se.lruCache.unloadPriorityCallback,se.downloadQueue=Re,se.parseQueue=Ee,se.processNodeQueue=nt,se.lruCache=Qe;let ut=ae?new k_.DRACOLoader().setDecoderPath(ae).setWorkerLimit(rD):null,Ke=pe?new B_.KTX2Loader().setTranscoderPath(pe).detectSupport(_):null;return se.registerPlugin(new ab({dracoLoader:ut,ktxLoader:Ke,meshoptDecoder:De?N_.MeshoptDecoder:null,autoDispose:!1})),se.registerPlugin(new rb({disableMipmaps:!1,compressIndex:!0,compressNormals:!1,compressUvs:!1,compressPosition:!0})),se.registerPlugin(new $p),Fe(se),window.__riTiles=se,()=>{se.forEachLoadedModel(xe=>ic(xe)),se.dispose(),ut?.dispose(),Ke?.dispose(),Fe(xe=>xe===se?null:xe)}},[ae,_,pe,De,t]),(0,$e.useEffect)(()=>{te&&(ee.current=Ag,fe.current=null,te.errorTarget=r,te.lruCache.maxSize=i,te.lruCache.minSize=Math.max(1,Math.floor(i*.75)),te.lruCache.maxBytesSize=G,te.lruCache.minBytesSize=G*.75,C())},[i,r,C,G,te]);let We=(0,$e.useMemo)(()=>{let se=s??{};return{objectBindings:se,keyByModelObject:bM(se),itemMaterials:l,shadingMode:c?.model.shading??"lit",rendererMode:c?.model.renderer??"pbr",selectedKey:d??null,hoveredKey:yM(L,p),highlightOnHover:u,suspendTransforms:S,placementFrame:te?.group.matrixWorld,invalidate:C}},[L,u,C,l,s,p,c,d,S,te]),ge=(0,$e.useCallback)(()=>{if(!te)return;let se=qe.current,Re=Y.current?N.current?.nodesByBinding(se)??{}:{},Ee={};te.group.traverse(Ke=>{if(!Ke.isMesh)return;let xe=Tg(Ke);if(!xe)return;let et=se.keyByModelObject[xe]??xe;if(!se.objectBindings[et])return;Re[et]||(Re[et]=Ke);let xt=Ke.material;xt&&(Ee[et]=xt)});let nt=T?.current??{},Qe=Object.keys(nt),ut=Qe.length!==Object.keys(Re).length||Qe.some(Ke=>nt[Ke]!==Re[Ke]);T&&(T.current=Re),D&&(D.current=Ee),(ut||!T)&&B.current.onNodeRefsChange?.()},[D,T,te]),Ce=(0,$e.useCallback)(se=>Sp(se,We),[We]),Je=(0,$e.useCallback)(se=>xM(se,We),[We]),ve=(0,$e.useRef)(Je);ve.current=Je;let qe=(0,$e.useRef)(We);qe.current=We;let he=(0,$e.useCallback)(()=>{let se=ue.current,Re=be.current;return!se||Re<=0?qe.current:{...qe.current,explode:{factor:Re,centre:se.centre,radius:se.radius}}},[]);(0,$e.useEffect)(()=>{te&&(Je(te.group),j.current=!0,te.forEachLoadedModel(se=>{Je(se),il(se,he())}),C())},[Je,C,he,te]),(0,$e.useEffect)(()=>{let se=iD(t);if(!se)return;let Re=!1;return fetch(se).then(Ee=>Ee.ok?Ee.json():null).then(Ee=>{Re||!Ee?.objects||(H.current=Ee.objects,Y.current=Ee.bindingFrame==="gltf-identity-v2",Y.current&&N.current?.setCatalog(Ee.objects),j.current=!0,B.current.onObjectCatalog?.(Ee.objects),C())}).catch(()=>{}),()=>{Re=!0}},[t,C,R]),(0,$e.useEffect)(()=>{if(!te)return;let se=!1,Re=()=>C(),Ee=xe=>{xe.scene&&(xe.scene.traverse(et=>{let xt=et.material;for(let Dn of Array.isArray(xt)?xt:xt?[xt]:[])Dn.transparent&&Dn.side===vr.DoubleSide&&(Dn.forceSinglePass=!0)}),ve.current(xe.scene),il(xe.scene,he()),_d(xe.scene)),j.current=!0,se||(se=!0,B.current.onModelLoaded?.(te.group)),C()},nt=xe=>{B.current.onLoadError?.(xe.error)},Qe=xe=>{xe.scene&&(Pg(xe.scene),ic(xe.scene)),j.current=!0};te.setCamera(M),te.setResolutionFromRenderer(M,_),te.addEventListener("needs-update",Re),te.addEventListener("load-model",Ee),te.addEventListener("load-error",nt),te.addEventListener("dispose-model",Qe);let ut=()=>{j.current=!0,C()};te.addEventListener("tile-visibility-change",ut);let Ke=()=>{let xe=te.root;xe&&!xe.content?.uri&&xe.refine==="REPLACE"&&(xe.refine="ADD",C())};return te.addEventListener("load-root-tileset",Ke),C(),()=>{te.removeEventListener("needs-update",Re),te.removeEventListener("load-model",Ee),te.removeEventListener("load-error",nt),te.removeEventListener("dispose-model",Qe),te.removeEventListener("tile-visibility-change",ut),te.removeEventListener("load-root-tileset",Ke),Pg(te.group),te.deleteCamera(M),T&&(T.current={}),D&&(D.current={})}},[M,_,C,D,T,he,te]);let de=zd(se=>Ce(se)?.binding??null,g),ze=(0,$e.useCallback)(se=>{if(de.consumeClick())return;let Re=Ce(se.object);Re&&(se.stopPropagation(),B.current.onItemClick?.(Re.binding))},[Ce,de,f]),Pe=(0,$e.useCallback)(se=>{let Re=Ce(se.object);if(!Re)return;B.current.onItemDoubleClick?.(Re.binding,$s(se))&&se.stopPropagation()},[Ce]),ft=(0,$e.useCallback)(se=>{let Re=Ce(se.object),Ee=Re?.key??null;Ee!==E.current&&(E.current=Ee,k(Ee),B.current.onItemHover?.(Re?.binding??null))},[Ce]),At=(0,$e.useCallback)(()=>{E.current!==null&&(E.current=null,k(null),B.current.onItemHover?.(null))},[]);return(0,$e.useEffect)(()=>{C()},[C,te]),(0,Yp.useFrame)((se,Re)=>{if(!te)return;if(te.setResolutionFromRenderer(M,_),Y.current&&R){let en=R.sync(he(),d,S);R.updateBounds(te.root),S&&te.forEachLoadedModel(nn=>il(nn,en))}if(te.update(),!X.current){let en=new vr.Box3;if(te.getBoundingBox(en)){X.current=!0,te.group.updateMatrixWorld(),en.applyMatrix4(te.group.matrixWorld);let nn=en.getBoundingSphere(new vr.Sphere);ue.current={centre:nn.center.clone(),radius:en.getSize(new vr.Vector3).length()*.5},B.current.onTilesetBounds?.(en),C()}}j.current&&(j.current=!1,ge());let Ee=Math.min(Math.max(A,0),1),nt=be.current;Math.abs(nt-Ee)>1e-4?(be.current=vr.MathUtils.lerp(nt,Ee,1-Math.exp(-6*Re)),il(te.group,he()),C()):nt!==Ee&&(be.current=Ee,il(te.group,he()),C());let Qe=te,ut=te.lruCache,Ke=ut.isFull(),xe=ee.current,et=xe.loosened&&fe.current?fe.current:{bytes:ut.maxBytesSize,items:ut.maxSize},xt=0;for(let en of ut.usedSet??[])xt+=ut.bytesMap?.get(en)??0;let Dn=!1,pi=te;for(let en of pi.usedSet??[]){let nn=en.internal?.loadingState??I_;if(en.traversal?.used&&en.internal?.hasContent&&nn>=eD&&nn<I_){Dn=!0;break}}let yn=K.current??(K.current={world:new vr.Matrix4,projection:new vr.Matrix4}),ho=!yn.world.equals(M.matrixWorld)||!yn.projection.equals(M.projectionMatrix);ho&&(yn.world.copy(M.matrixWorld),yn.projection.copy(M.projectionMatrix));let ir={full:Ke,wanting:Dn,moved:ho,usage:Math.max(xt/Math.max(1,et.bytes),(ut.usedSet?.size??0)/Math.max(1,et.items)),now:performance.now()},Vn=EM(xe,ir);Vn!==xe&&(Vn.loosened&&(!xe.loosened||Vn.raisedAt!==xe.raisedAt)?(xe.loosened||(fe.current=et),ut.maxBytesSize=Math.max(et.bytes,ut.cachedBytes??0)*Eg,ut.maxSize=Math.ceil(Math.max(et.items,ut.itemSet?.size??0)*Eg)):!Vn.loosened&&xe.loosened&&fe.current&&(ut.maxBytesSize=fe.current.bytes,ut.maxSize=fe.current.items,fe.current=null),ee.current=Vn,te.errorTarget=r*Vn.factor,C()),!J.current&&Ke&&ir.wanting&&Vn.factor>=Ac&&(J.current=!0,console.warn("[react-immersive] The tile memory budget is full even at the coarsest level of detail, so the model may render incompletely. This usually means the model's textures are too large for streaming \u2014 re-process it with a smaller MAX_TEXTURE_SIZE, or raise memoryBudgetMB.")),e&&(e.current={cachedBytes:ut.cachedBytes??null,budgetBytes:et.bytes,cachedTiles:ut.itemSet?.size??null,downloading:Qe.stats?.downloading??0,parsing:Qe.stats?.parsing??0,cacheFull:Ke,detailFactor:Vn.factor,errorTarget:te.errorTarget});let mi=RM(Vn,ir);mi===0?C():mi!==null&&oe.current===null&&(oe.current=setTimeout(()=>{oe.current=null,C()},mi)),((Qe.stats?.downloading??0)>0||(Qe.stats?.parsing??0)>0||Qe.loadProgress!==void 0&&Qe.loadProgress<1&&!Ke)&&C()}),te?(0,Yc.jsxs)("group",{rotation:n,children:[R?(0,Yc.jsx)("primitive",{object:R.group}):null,(0,Yc.jsx)("primitive",{object:te.group,onClick:ze,onDoubleClick:Pe,onPointerDown:g?de.onPointerDown:void 0,onPointerMove:ft,onPointerOut:At})]}):null}var Kp=require("three");var oD=new Kp.Matrix4().makeRotationX(Math.PI/2);function V_(e){e.updateMatrixWorld(!0);let t=new Kp.Matrix4().copy(e.matrixWorld).invert().premultiply(oD),n=new Kp.Matrix4,r=[];for(let[i,o]of Object.entries(cr(e).nodesById)){let a=o;if(!a.isMesh||!a.geometry||!o.name)continue;let s=a.geometry;s.boundingBox||s.computeBoundingBox();let l=s.boundingBox.clone().applyMatrix4(n.multiplyMatrices(t,o.matrixWorld)),c=s.index?s.index.count:s.getAttribute("position")?.count??0;r.push({name:i,triangles:Math.floor(c/3),minimum:l.min.toArray(),maximum:l.max.toArray()})}return r.sort((i,o)=>i.name.localeCompare(o.name))}var Ue=require("react"),lb=require("@react-three/drei"),ts=require("@react-three/fiber"),ai=require("three");var fn=require("react/jsx-runtime"),aD=.02;function j_(e,t,n=!1,r){let i=(0,Ue.useRef)(null),[o,a]=(0,Ue.useState)(!0),s=(0,Ue.useRef)(!0),l=(0,Ue.useMemo)(()=>new ai.Vector3,[]),c=(0,ts.useThree)(g=>g.scene),d=(0,Ue.useRef)(null),p=(0,Ue.useRef)(null),u=(0,Ue.useMemo)(()=>new ai.Vector3(...e.anchorLocalPosition??e.localPosition??e.worldPosition),[e.anchorLocalPosition,e.localPosition,e.worldPosition]),f=(0,Ue.useMemo)(()=>new ai.Vector3,[]),m=(0,Ue.useMemo)(()=>new ai.Vector3,[]),v=(0,Ue.useMemo)(()=>new ai.Vector3,[]);return(0,Ue.useEffect)(()=>{d.current=null},[e.anchorNodeName]),(0,ts.useFrame)(({camera:g})=>{let b=i.current,h=b?.parent;if(!b||!h)return;let y=r?r.current:c;p.current!==y&&(p.current=y,d.current=null);let w=d.current;if(e.anchorNodeName&&(!w||!w.parent)&&(w=y?_r(y,e.anchorNodeName):null,d.current=w),w?(w.updateWorldMatrix(!0,!1),f.copy(u).applyMatrix4(w.matrixWorld)):(f.copy(u),h.localToWorld(f)),t){let x=t.current.get(e.id);x||(x=new ai.Vector3,t.current.set(e.id,x)),x.copy(f)}g.getWorldPosition(l);let T=!n||mx(e,l.distanceTo(f));T!==s.current&&(s.current=T,a(T)),v.copy(l).sub(f),v.lengthSq()>0?(v.normalize(),m.copy(f).addScaledVector(v,aD)):m.copy(f),h.worldToLocal(m),b.position.copy(m)}),{anchorRef:i,inRange:o}}function sD({anchorSceneRef:e,annotation:t,occluders:n,worldPositionsRef:r,onClick:i,onHover:o,showAnnotationOnHover:a}){let s=_e(),[l,c]=(0,Ue.useState)(!1),{anchorRef:d,inRange:p}=j_(t,r,!0,e),u=l||!p,[f,m]=(0,Ue.useState)(!1),[v,g]=(0,Ue.useState)(1),b=(0,Ue.useRef)(null),h=(0,Ue.useRef)(null),y=(0,Ue.useRef)(null);(0,Ue.useEffect)(()=>{p||(b.current&&clearTimeout(b.current),f&&(m(!1),o?.(null)))},[p,f,o]),(0,Ue.useEffect)(()=>()=>{b.current&&(clearTimeout(b.current),b.current=null),y.current&&(clearTimeout(y.current),y.current=null)},[]);let w=S=>{S.stopPropagation(),S.preventDefault(),b.current&&(clearTimeout(b.current),b.current=null),b.current=window.setTimeout(()=>{i?.(t),b.current=null},10)},T=S=>{S.stopPropagation(),m(!0),g(100),y.current&&(clearTimeout(y.current),y.current=null),o?.(t)},x=S=>{S.stopPropagation(),m(!1),g(1),y.current&&clearTimeout(y.current),y.current=window.setTimeout(()=>{o?.(null),a&&o?.(null),y.current=null},50)},D=S=>{S.stopPropagation();let M=S.currentTarget;M.dataset.pointerX=String(S.clientX),M.dataset.pointerY=String(S.clientY)},A=S=>{S.stopPropagation();let M=S.currentTarget,_=parseFloat(M.dataset.pointerX||"0"),C=parseFloat(M.dataset.pointerY||"0"),E=S.clientX-_,L=S.clientY-C;Math.sqrt(E*E+L*L)<10&&w(S)};return(0,fn.jsx)("group",{ref:d,children:(0,fn.jsx)(lb.Html,{center:!0,occlude:n,onOcclude:c,pointerEvents:u?"none":"auto",zIndexRange:[1,200],style:{pointerEvents:u?"none":"auto",zIndex:v},className:"annotation-html-wrapper",transparent:!0,children:(0,fn.jsx)("div",{ref:h,className:`ri-annotationMarker ${f?"ri-annotationMarker--hovered":""}`,title:t.title,style:{display:u?"none":"flex"},onPointerDown:D,onPointerUp:A,onPointerEnter:T,onPointerLeave:x,onDoubleClick:S=>{S.stopPropagation(),i?.(t)},role:"button",tabIndex:0,"aria-label":s("annotationMarker",{id:t.id,title:t.title}),onKeyDown:S=>{(S.key==="Enter"||S.key===" ")&&(S.preventDefault(),S.stopPropagation(),i?.(t))},children:(0,fn.jsx)("span",{className:"ri-annotationMarker-id",children:t.id})})})})}function lD({anchorSceneRef:e,annotation:t,occluders:n,popupRef:r,onClose:i,hideCloseButton:o=!1}){let a=_e(),[s,l]=(0,Ue.useState)(!1),{anchorRef:c}=j_(t,void 0,!1,e),d=(0,fn.jsxs)("div",{ref:r,className:"ri-viewAnnotationPopup",style:{display:s?"none":"block"},onPointerDown:p=>p.stopPropagation(),onClick:p=>p.stopPropagation(),children:[(0,fn.jsxs)("div",{className:"ri-viewAnnotationHeader",children:[(0,fn.jsx)("h4",{className:"ri-viewAnnotationTitle",children:t.title}),!o&&(0,fn.jsx)("button",{onClick:p=>{p.stopPropagation(),i?.()},className:"ri-viewAnnotationClose","aria-label":a("closeAnnotation"),children:"\xD7"})]}),t.category&&(0,fn.jsx)("span",{className:"ri-annotationCategory",children:t.category}),t.description&&(0,fn.jsx)("p",{className:"ri-viewAnnotationDescription",children:t.description}),t.images?.map((p,u)=>{let f=Sh(p.src);return f?(0,fn.jsx)("img",{className:"ri-annotationImage",src:f,alt:p.alt??"",loading:"lazy"},`${f}-${u}`):null}),t.links?.map((p,u)=>{let f=Sh(p.href);return f?(0,fn.jsx)("a",{className:"ri-annotationLink",href:f,target:"_blank",rel:"noopener noreferrer",children:p.label||a("learnMore")},`${f}-${u}`):null})]});return(0,fn.jsx)("group",{ref:c,children:(0,fn.jsx)(lb.Html,{occlude:n,onOcclude:l,pointerEvents:s?"none":"auto",zIndexRange:[1e3,2e3],style:{pointerEvents:s?"none":"auto",zIndex:1e3},transparent:!0,children:d})})}function Zp({anchorSceneRef:e,annotations:t,sceneConfig:n,activeAnnotation:r,popupRef:i,canvasRootRef:o,worldPositionsRef:a,modelLoaded:s,onAnnotationClick:l,onAnnotationHover:c,onCloseAnnotation:d,hideCloseButton:p=!1,showAnnotationOnHover:u=!1}){let f=(0,ts.useThree)(j=>j.invalidate),m=(0,ts.useThree)(j=>j.scene),[v,g]=(0,Ue.useState)(null),[b,h]=(0,Ue.useState)(!1),y=(0,Ue.useRef)(null);(0,Ue.useEffect)(()=>{y.current!==null&&r===null&&(g(null),h(!1)),y.current=r?.id??null},[r]);let w=(0,Ue.useRef)(null),T=(0,Ue.useRef)(null),x=(0,Ue.useRef)(null),D=(0,Ue.useMemo)(()=>{let j=[];return m.traverse(R=>{let O=R;O.isMesh&&!O.isSkinnedMesh&&j.push({current:R})}),j},[m,t,s]),A=(0,Ue.useCallback)(()=>{f();let j=()=>{f(),T.current=window.requestAnimationFrame(()=>{f(),T.current=null})};T.current=window.requestAnimationFrame(j)},[f]);(0,Ue.useEffect)(()=>{A()},[t,A]),(0,Ue.useEffect)(()=>{A()},[r,A]),(0,Ue.useEffect)(()=>()=>{T.current!==null&&window.cancelAnimationFrame(T.current),x.current&&clearTimeout(x.current)},[]);let S=r||v,M=(0,Ue.useMemo)(()=>S?t.find(j=>j.id===S.id)??null:null,[S,t]),_=(0,Ue.useCallback)(j=>{if(b&&v?.id===j.id){h(!1),g(null),d?.();return}h(!0),g(j),l?.(j)},[b,v,l,d]),C=(0,Ue.useCallback)(j=>{c?.(j),u&&!b&&(x.current&&(clearTimeout(x.current),x.current=null),j?g(j):x.current=window.setTimeout(()=>{g(null),d?.(),x.current=null},100))},[b,c,u,d]),E=(0,Ue.useCallback)(()=>{h(!1),g(null),d?.()},[d]),L=(0,Ue.useCallback)(j=>{let R=j.target;if(R.closest?.(".ri-annotationMarker")||R.closest?.(".ri-viewAnnotationPopup")||R.closest?.(".annotation-html-wrapper"))return;let O=o.current;O&&O.contains(R)&&(h(!1),g(null),d?.())},[o,d]),k=(0,Ue.useCallback)(j=>{j.key==="Escape"&&b&&(h(!1),g(null),d?.())},[b,d]);(0,Ue.useEffect)(()=>{let j=o.current;return j&&(j.addEventListener("click",L),j.addEventListener("pointerdown",L)),document.addEventListener("keydown",k),()=>{j&&(j.removeEventListener("click",L),j.removeEventListener("pointerdown",L)),document.removeEventListener("keydown",k)}},[o,L,k]);let B=(0,Ue.useMemo)(()=>(n?.model.rotation??[0,0,0]).map(j=>j*Math.PI/180),[n?.model.rotation]);return(0,Ue.useEffect)(()=>{f()},[f,B]),(0,ts.useFrame)((j,R)=>{if(!w.current)return;w.current.rotation.x=ai.MathUtils.lerp(w.current.rotation.x,B[0],1-Math.exp(-5*R)),w.current.rotation.y=ai.MathUtils.lerp(w.current.rotation.y,B[1],1-Math.exp(-5*R)),w.current.rotation.z=ai.MathUtils.lerp(w.current.rotation.z,B[2],1-Math.exp(-5*R));let{rotation:O}=w.current;Math.abs(O.x-B[0])+Math.abs(O.y-B[1])+Math.abs(O.z-B[2])>1e-4&&f()}),(0,fn.jsxs)("group",{ref:w,children:[t.map(j=>{let R=`${j.worldPosition.join(",")}-${j.title}-${j.id}`;return(0,fn.jsx)(sD,{anchorSceneRef:e,annotation:j,occluders:D,worldPositionsRef:a,onClick:_,onHover:C,showAnnotationOnHover:u},R)}),M?(0,fn.jsx)(lD,{anchorSceneRef:e,annotation:M,occluders:D,popupRef:i,onClose:E,hideCloseButton:p},`popup-${M.id}`):null]})}var so=require("react"),em=require("@react-three/drei");var Jp=require("react"),U_=require("@react-three/drei"),z_=require("@react-three/fiber"),si=require("three");var Qp=require("react/jsx-runtime");function Ko(e){return(0,z_.useThree)(n=>Ar(n.gl))?(0,Qp.jsx)(cD,{...e}):(0,Qp.jsx)(U_.Line,{points:e.points,color:e.color,lineWidth:e.lineWidth,dashed:e.dashed})}function cD({points:e,color:t,dashed:n=!1}){let r=(0,Jp.useMemo)(()=>{let i=new si.BufferGeometry().setFromPoints(e.map(s=>s instanceof si.Vector3?s:new si.Vector3(...s))),o=n?new si.LineDashedMaterial({color:t,dashSize:.02,gapSize:.02}):new si.LineBasicMaterial({color:t}),a=new si.Line(i,o);return n&&a.computeLineDistances(),a},[e,t,n]);return(0,Jp.useEffect)(()=>()=>{r.geometry.dispose(),r.material.dispose()},[r]),(0,Qp.jsx)("primitive",{object:r})}var un=require("three");var Be=require("react/jsx-runtime"),Zo="#22d3ee",uD="#facc15";function ns(e,t){let n=e<10?e.toFixed(3):e.toFixed(2);return t?`${n} ${t}`:n}function F_(e,t){return[(e[0]+t[0])/2,(e[1]+t[1])/2,(e[2]+t[2])/2]}function dD(e){let t=e.reduce((n,r)=>[n[0]+r[0],n[1]+r[1],n[2]+r[2]],[0,0,0]);return[t[0]/e.length,t[1]/e.length,t[2]/e.length]}function ao({position:e,children:t}){return(0,Be.jsx)(em.Html,{center:!0,position:e,zIndexRange:[20,0],style:{pointerEvents:"none"},children:(0,Be.jsx)("div",{className:"ri-measureLabel",children:t})})}function H_({positions:e,triangles:t}){let n=(0,so.useMemo)(()=>{let r=new un.Vector3(...e[0]),i=new un.BufferGeometry;return i.setAttribute("position",new un.Float32BufferAttribute(e.flatMap(o=>new un.Vector3(...o).sub(r).toArray()),3)),i.setIndex(t.flat()),i},[e,t]);return(0,so.useEffect)(()=>()=>n.dispose(),[n]),(0,Be.jsx)("mesh",{position:e[0],geometry:n,raycast:()=>{},renderOrder:100,children:(0,Be.jsx)("meshBasicMaterial",{color:Zo,side:un.DoubleSide,transparent:!0,opacity:.18,depthWrite:!1})})}var pD=[[0,1,2]];function mD({positions:e}){let t=Ns(e);if(t===null)return null;let n=new un.Vector3(...e[1]),r=new un.Vector3(...e[0]).sub(n),i=new un.Vector3(...e[2]).sub(n),o=Math.min(r.length(),i.length())*.22;r.normalize(),i.normalize();let a=r.clone().cross(i);a.lengthSq()<1e-12&&a.copy(r).cross(Math.abs(r.y)<.9?new un.Vector3(0,1,0):new un.Vector3(1,0,0)),a.normalize();let s=t*Math.PI/180,l=Array.from({length:33},(d,p)=>r.clone().applyAxisAngle(a,s*p/32).multiplyScalar(o).add(n).toArray()),c=r.clone().applyAxisAngle(a,s/2).multiplyScalar(o*1.4).add(n).toArray();return(0,Be.jsxs)(Be.Fragment,{children:[(0,Be.jsx)(Ko,{points:l,color:Zo,lineWidth:2}),(0,Be.jsxs)(ao,{position:c,children:[t.toFixed(2),"\xB0"]})]})}function fD({box:e,unit:t,scale:n}){let r=(0,so.useMemo)(()=>[(e.min[0]+e.max[0])/2,(e.min[1]+e.max[1])/2,(e.min[2]+e.max[2])/2],[e.min,e.max]),i=(0,so.useMemo)(()=>{let[l,c,d]=e.size,p=new un.BoxGeometry(l||1e-4,c||1e-4,d||1e-4),u=new un.EdgesGeometry(p);return p.dispose(),u},[e.size]);(0,so.useEffect)(()=>()=>{i.dispose()},[i]);let[o,a,s]=e.size;return(0,Be.jsxs)("group",{position:r,children:[(0,Be.jsx)("lineSegments",{geometry:i,children:(0,Be.jsx)("lineBasicMaterial",{color:uD})}),(0,Be.jsxs)(ao,{position:[0,-a/2,s/2],children:["W ",ns(o*n,t)]}),(0,Be.jsxs)(ao,{position:[-o/2,0,s/2],children:["H ",ns(a*n,t)]}),(0,Be.jsxs)(ao,{position:[o/2,-a/2,0],children:["D ",ns(s*n,t)]})]})}function ul({points:e,unit:t,scale:n=1,box:r,showDimensions:i,tool:o="distance",areaClosed:a=!1,snapPreview:s}){let l=(0,so.useMemo)(()=>e.map(p=>p.position),[e]),c=(0,so.useMemo)(()=>o==="area"&&a?Vs(l):null,[o,a,l]),d=o==="pointToPlane"&&e.length===2?pd(e[0],e[1].position):null;return(0,Be.jsxs)("group",{children:[o!=="wrap"&&o!=="wrapHorizontal"&&e.map(p=>(0,Be.jsx)(em.Html,{center:!0,position:p.position,zIndexRange:[15,0],style:{pointerEvents:"none"},children:(0,Be.jsx)("div",{className:`ri-measureDot${p.snapped?" ri-measureDot--snapped":""}`})},p.id)),o==="distance"&&e.slice(1).map((p,u)=>{let f=e[u].position,m=p.position,v=new un.Vector3(...f).distanceTo(new un.Vector3(...m));return(0,Be.jsxs)("group",{children:[(0,Be.jsx)(Ko,{points:[f,m],color:Zo,lineWidth:2}),(0,Be.jsx)(ao,{position:F_(f,m),children:ns(v*n,t)})]},`${e[u].id}-${p.id}`)}),(o==="angle"||o==="area")&&l.length>=2&&(0,Be.jsx)(Ko,{points:a?[...l,l[0]]:l,color:Zo,lineWidth:2}),o==="angle"&&(0,Be.jsx)(mD,{positions:l}),c&&!("error"in c)&&(0,Be.jsxs)(Be.Fragment,{children:[(0,Be.jsx)(H_,{positions:l,triangles:c.triangles}),(0,Be.jsx)(ao,{position:c.center,children:ns(c.area*n**2,t?`${t}\xB2`:"")})]}),o==="pointToPlane"&&e[0]?.faceVertices&&(0,Be.jsxs)(Be.Fragment,{children:[(0,Be.jsx)(H_,{positions:e[0].faceVertices,triangles:pD}),(0,Be.jsx)(Ko,{points:[...e[0].faceVertices,e[0].faceVertices[0]],color:Zo,lineWidth:1}),e.length===1&&(0,Be.jsx)(ao,{position:e[0].position,children:"Reference plane"})]}),d&&(0,Be.jsxs)(Be.Fragment,{children:[(0,Be.jsx)(Ko,{points:[e[1].position,d.projection],color:Zo,lineWidth:2}),(0,Be.jsx)(Ko,{points:[e[0].position,d.projection],color:Zo,lineWidth:1,dashed:!0}),(0,Be.jsx)(ao,{position:F_(e[1].position,d.projection),children:ns(d.distance*n,t)})]}),(o==="wrap"||o==="wrapHorizontal")&&l.length>=3&&(0,Be.jsxs)(Be.Fragment,{children:[(0,Be.jsx)(Ko,{points:[...l,l[0]],color:Zo,lineWidth:2}),(0,Be.jsx)(ao,{position:dD(l),children:ns(Xl(l,!0)*n,t)})]}),s&&(0,Be.jsxs)(em.Html,{center:!0,position:s.position,zIndexRange:[20,0],style:{pointerEvents:"none"},children:[(0,Be.jsx)("div",{className:"ri-measureSnapTarget"}),(0,Be.jsx)("div",{className:"ri-measureSnapLabel",children:s.snapped==="vertex"?"Vertex":"Edge"})]}),i&&r?(0,Be.jsx)(fD,{box:r,unit:t,scale:n}):null]})}var G_={free:0,starter:1,growth:2};function W_(e,t){return G_[e]>=G_[t]}var q_={free:"Free",starter:"Starter",growth:"Growth"};var hD={advancedMaterials:"starter",materialVariants:"starter",customEnvironment:"starter",backgroundImages:"starter",environmentBackground:"free",sectionPlanes:"starter",calibratedMeasurements:"starter",animationConfig:"starter",sceneBundle:"starter",cinematic:"starter",rules:"growth",postLighting:"starter",postSelection:"growth",postStylize:"growth"};function tm(e,t){return W_(e,hD[t])}var lo=require("lucide-react"),ki=require("react"),X_=require("react-dom");var nm=require("react"),gD=(0,nm.createContext)({isInsideEditor:!1,activeTab:"object",activeSubTab:"General",tier:"free"});var Qo=()=>(0,nm.useContext)(gD);var me=require("react/jsx-runtime");function cb(e){let t=_e(),{isInsideEditor:n,measurementPanelTarget:r,tier:i}=Qo(),o=n&&!tm(i,"calibratedMeasurements"),a=(0,ki.useRef)(null),[s,l]=(0,ki.useState)(!1),[c,d]=(0,ki.useState)(""),[p,u]=(0,ki.useState)("1"),[f,m]=(0,ki.useState)("m"),v=(0,ki.useRef)(null),g={ready:"measurementReady",approximate:"measurementApproximate","model-changed":"measurementModelChanged","missing-object":"measurementObjectMissing","geometry-changed":"measurementGeometryChanged","pose-changed":"measurementPoseChanged","hidden-object":"measurementObjectHidden",invalid:"measurementInvalid"};(0,ki.useLayoutEffect)(()=>{if(!a.current)return;let x=()=>e.onHeight(a.current?.getBoundingClientRect().height??34),D=new ResizeObserver(x);return D.observe(a.current),x(),()=>D.disconnect()},[e.onHeight]);let{tool:b,pointCount:h,areaClosed:y}=e,w=b==="angle"?[t("angleFirstArmHint"),t("angleVertexHint"),t("angleSecondArmHint"),t("angleNewHint")][h]:b==="area"?t(y?"areaNewHint":"areaCornersHint"):b==="pointToPlane"?[t("pointToPlaneFaceHint"),t("pointToPlanePointHint"),t("pointToPlaneNewHint")][h]:t(b==="wrap"?"wrapHint":b==="wrapHorizontal"?"wrapHorizontalHint":"distanceHint"),T=(0,me.jsxs)("div",{className:`ri-measureLibrary${n?" ri-measureLibrary--sidebar":""}`,onClick:x=>x.stopPropagation(),onPointerDown:x=>x.stopPropagation(),onPointerMove:x=>x.stopPropagation(),onKeyDown:x=>x.stopPropagation(),children:[n&&(0,me.jsxs)("button",{type:"button",className:`ri-measureStart${e.active?" ri-measureStart--active":""}`,disabled:e.disabled,onClick:e.onToggle,"aria-pressed":e.active,children:[(0,me.jsx)(lo.PencilRuler,{size:15}),e.active?t("stopMeasuring"):t("startMeasuring")]}),(0,me.jsxs)("div",{className:"ri-measureSettingsRow ri-measureSettingsRow--units",children:[(0,me.jsxs)("label",{children:[t("measurementSourceUnit")," ",(0,me.jsx)("select",{"aria-label":t("measurementSourceUnit"),className:"ri-measureSelect",disabled:e.disabled||e.settingsReadOnly,value:e.settings.sourceUnit??"m",onChange:x=>e.onSettings({...e.settings,sourceUnit:x.target.value,metersPerUnit:void 0}),children:La.map(x=>(0,me.jsx)("option",{value:x,children:x},x))})]}),(0,me.jsxs)("label",{children:[t("measurementDisplayUnit")," ",(0,me.jsxs)("select",{"aria-label":t("measurementDisplayUnit"),className:"ri-measureSelect",disabled:e.disabled||e.settingsReadOnly,value:e.displayUnit,onChange:x=>e.onSettings({...e.settings,displayUnit:x.target.value}),children:[!$l(e.displayUnit)&&(0,me.jsx)("option",{value:e.displayUnit,children:e.displayUnit}),La.map(x=>(0,me.jsx)("option",{value:x,children:x},x))]})]})]}),e.active&&(0,me.jsxs)(me.Fragment,{children:[(0,me.jsxs)("div",{className:"ri-measureSettingsRow ri-measureSettingsRow--save",children:[(0,me.jsxs)("label",{children:[t("measurementName")," ",(0,me.jsx)("input",{"aria-label":t("measurementName"),className:"ri-measureInput",value:c,onChange:x=>d(x.target.value),placeholder:t("measurementNamePlaceholder")})]}),(0,me.jsx)("button",{type:"button",className:"ri-measureFinish",disabled:e.disabled||e.readOnly||!e.canSave||o,title:o?"Saving measurements requires the Starter plan or higher.":void 0,onClick:()=>{e.onSave(c),d(""),l(!0)},children:t("saveMeasurement")})]}),(0,me.jsxs)("div",{className:"ri-measureSettingsRow ri-measureSettingsRow--calibrate",children:[(0,me.jsxs)("label",{children:[t("knownMeasurementDistance")," ",(0,me.jsx)("input",{"aria-label":t("knownMeasurementDistance"),type:"number",min:"0",step:"any",className:"ri-measureInput",value:p,onChange:x=>u(x.target.value)})]}),(0,me.jsx)("select",{"aria-label":t("calibrationUnit"),className:"ri-measureSelect",value:f,onChange:x=>m(x.target.value),children:La.map(x=>(0,me.jsx)("option",{children:x},x))}),(0,me.jsx)("button",{type:"button",className:"ri-measureSelect",disabled:e.disabled||e.settingsReadOnly||!e.canCalibrate||o,title:o?"Calibration requires the Starter plan or higher.":void 0,onClick:()=>e.onCalibrate(Number(p),f),children:t("calibrateMeasurement")})]}),(0,me.jsx)("p",{className:"ri-measureLibraryHint",children:t("measurementCalibrationHint")})]}),e.settings.metersPerUnit!==void 0&&(0,me.jsxs)("div",{className:"ri-measureSettingsRow ri-measureSettingsRow--calibration",children:[(0,me.jsx)("span",{children:t("measurementCalibratedScale",{scale:e.settings.metersPerUnit.toPrecision(6)})}),(0,me.jsx)("button",{type:"button",className:"ri-measureSelect",disabled:e.disabled||e.settingsReadOnly,onClick:()=>e.onSettings({...e.settings,metersPerUnit:void 0}),children:t("resetMeasurementCalibration")})]}),e.items.length>0&&(0,me.jsx)("div",{className:"ri-savedMeasurementList",children:e.items.map(x=>{let D=e.results.find(A=>A.id===x.id);return(0,me.jsxs)("div",{className:"ri-savedMeasurementRow",children:[(0,me.jsx)("input",{type:"checkbox","aria-label":t("showSavedMeasurement",{name:x.name}),checked:x.visible!==!1,disabled:e.disabled||e.readOnly,onChange:A=>e.onItems(e.items.map(S=>S.id===x.id?{...S,visible:A.target.checked}:S))}),(0,me.jsx)("input",{"aria-label":t("renameSavedMeasurement",{name:x.name}),className:"ri-measureInput",defaultValue:x.name,disabled:e.disabled||e.readOnly,onBlur:A=>{let S=A.target.value.trim()||x.name;S!==x.name?e.onItems(e.items.map(M=>M.id===x.id?{...M,name:S}:M)):A.target.value=S}},`${x.id}:${x.name}`),(0,me.jsxs)("span",{className:"ri-savedMeasurementValue",children:[D?.value!=null?`${D.value.toFixed(3)} ${D.unit}`:"\u2014",(0,me.jsx)("small",{children:t(D?g[D.status]:"measurementWaiting")})]}),(0,me.jsx)("button",{type:"button",className:"ri-measureSelect","aria-label":t("deleteSavedMeasurement",{name:x.name}),disabled:e.disabled||e.readOnly,onClick:()=>e.onItems(e.items.filter(A=>A.id!==x.id)),children:"\xD7"})]},x.id)})}),!e.items.length&&(0,me.jsx)("p",{className:"ri-measureEmpty",children:t("noSavedMeasurements")}),(0,me.jsxs)("details",{className:"ri-measureTransfer",children:[(0,me.jsx)("summary",{children:t("measurementFiles")}),(0,me.jsxs)("div",{className:"ri-measureSettingsRow",children:[(0,me.jsx)("button",{type:"button",className:"ri-measureSelect",disabled:e.disabled||!e.items.length,onClick:e.onExportJson,children:t("exportMeasurementJson")}),(0,me.jsx)("button",{type:"button",className:"ri-measureSelect",disabled:e.disabled||!e.items.length,onClick:e.onExportCsv,children:t("exportMeasurementCsv")}),(0,me.jsx)("button",{type:"button",className:"ri-measureSelect",disabled:e.disabled||e.readOnly||e.settingsReadOnly,onClick:()=>v.current?.click(),children:t("importMeasurementJson")}),(0,me.jsx)("input",{ref:v,type:"file",accept:".json,application/json",hidden:!0,onChange:x=>{let D=x.target.files?.[0];if(x.target.value="",!!D){if(D.size>5*1024*1024){e.onImport("{}");return}D.text().then(e.onImport).catch(()=>e.onImport("{}"))}}})]})]}),n&&e.error&&(0,me.jsx)("p",{className:"ri-measureLibraryError",role:"status",children:t.message(e.error)})]});return(0,me.jsxs)(me.Fragment,{children:[(0,me.jsxs)("div",{ref:a,className:"ri-measureTools",style:{top:e.top},children:[(0,me.jsxs)("div",{className:"ri-measureToolbarRow",children:[(0,me.jsx)("button",{type:"button",className:`ri-measureButton ${e.active?"ri-measureButton--active":""}`,disabled:e.disabled,onClick:e.onToggle,title:e.active?t("stopMeasuring"):t("startMeasuring"),"aria-pressed":e.active,children:(0,me.jsx)(lo.PencilRuler,{size:16})}),(0,me.jsx)("button",{type:"button",className:`ri-measureButton ${e.showDimensions?"ri-measureButton--active":""}`,disabled:e.disabled,onClick:e.onDimensions,title:t("toggleBoundingDimensions"),"aria-pressed":e.showDimensions,children:(0,me.jsx)(lo.RulerDimensionLine,{size:16})}),!n&&(0,me.jsx)("button",{type:"button",className:"ri-measureSelect","aria-expanded":s,onClick:()=>l(!s),children:t("savedMeasurements",{count:e.items.length})}),e.active&&(0,me.jsxs)(me.Fragment,{children:[(0,me.jsxs)("select",{className:"ri-measureSelect","aria-label":t("measurementTool"),value:b,disabled:e.disabled,onChange:x=>e.onTool(x.target.value),children:[(0,me.jsx)("option",{value:"distance",children:t("distance")}),(0,me.jsx)("option",{value:"angle",children:t("angle")}),(0,me.jsx)("option",{value:"area",children:t("area")}),(0,me.jsx)("option",{value:"pointToPlane",children:t("pointToPlane")}),(0,me.jsx)("option",{value:"wrap",children:t("wrap")}),(0,me.jsx)("option",{value:"wrapHorizontal",children:t("wrapHorizontal")})]}),(0,me.jsxs)("select",{className:"ri-measureSelect","aria-label":t("measurementSnapping"),value:e.snap,disabled:e.disabled,onChange:x=>e.onSnap(x.target.value),children:[(0,me.jsx)("option",{value:"none",children:t("noSnapping")}),(0,me.jsx)("option",{value:"auto",children:t("snapAuto")}),(0,me.jsx)("option",{value:"vertex",children:t("snapVertex")}),(0,me.jsx)("option",{value:"edge",children:t("snapEdge")})]})]}),h>0&&(0,me.jsxs)(me.Fragment,{children:[(0,me.jsx)("button",{type:"button",className:"ri-measureButton",onClick:e.onUndo,disabled:e.disabled,title:t("undoMeasurementPoint"),children:(0,me.jsx)(lo.Undo2,{size:16})}),(0,me.jsx)("button",{type:"button",className:"ri-measureButton",onClick:e.onClear,disabled:e.disabled,title:t("clearMeasurements"),children:(0,me.jsx)(lo.Eraser,{size:16})})]}),e.active&&b==="area"&&!y&&(0,me.jsx)("button",{type:"button",className:"ri-measureFinish",onClick:e.onFinishArea,disabled:e.disabled||h<3,children:t("finishArea")})]}),!n&&(e.active||s)&&T,(e.active||!n&&e.error)&&(0,me.jsx)("div",{className:`ri-measureHint${e.error?" ri-measureHint--error":""}`,role:"status",children:e.error?t.message(e.error):w})]}),n&&r&&(0,X_.createPortal)(T,r)]})}var Jo=require("react"),$_=require("@react-three/fiber");var Kc=require("react/jsx-runtime");function rm({items:e,sceneRef:t,modelId:n,tilesetUrl:r,settings:i,legacyUnit:o,revision:a,onResults:s}){let[l,c]=(0,Jo.useState)([]),d=(0,Jo.useRef)(""),p=(0,Jo.useCallback)(()=>{let m=e.length&&t.current?mc(t.current):void 0,v=e.map(h=>Yd(h,t.current,n,r,m)),g=v.map(({measurement:h,points:y,status:w})=>Ba(h,i,o,y,w)),b=JSON.stringify([v.map(({measurement:h,points:y,status:w})=>[h.id,h.tool,h.visible,w,y.map(T=>[T.position,T.normal,T.faceVertices])]),g]);d.current!==b&&(d.current=b,c(v),s(g))},[e,t,n,r,i,o,s]);(0,Jo.useEffect)(()=>{p()},[p,a]),(0,$_.useFrame)(()=>{e.length&&p()});let{factor:u,displayUnit:f}=Ia(i,o);return(0,Kc.jsx)(Kc.Fragment,{children:l.filter(({measurement:m,status:v})=>m.visible!==!1&&(v==="ready"||v==="approximate")).map(({measurement:m,points:v})=>(0,Kc.jsx)(ul,{points:v,unit:f,scale:u,box:null,showDimensions:!1,tool:m.tool,areaClosed:m.tool==="area"},m.id))})}var ht=require("react"),rs=require("@react-three/xr"),Q_=require("@react-three/fiber"),Zc=require("three"),li=require("react/jsx-runtime"),bD=1,Y_=1,yD=.1,vD=10;function xD(e,t){let[n,r,i]=e.size,o=(e.min[0]+e.max[0])/2,a=(e.min[2]+e.max[2])/2,s=Math.max(n,r,i)||1;return{scale:t==="real-world"?1:bD/s,offset:[-o,-e.min[1],-a]}}function K_(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.hypot(t,n)}function Z_(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.atan2(n,t)}var wD=(0,ht.forwardRef)(function({box:t,scaleMode:n,children:r,onARStateChange:i},o){let a=(0,ht.useRef)(null),s=(0,ht.useRef)(null),l=(0,ht.useRef)(null),c=(0,rs.useXR)(B=>B.session!=null),d=(0,rs.useXR)(B=>B.mode==="immersive-ar"),p=(0,ht.useMemo)(()=>t?xD(t,n):null,[t,n]),u=(0,ht.useRef)(new Zc.Vector3(0,0,-Y_)),f=(0,ht.useRef)(1),m=(0,ht.useRef)(0),v=(0,ht.useRef)(!0),g=(0,ht.useRef)(!1),b=(0,ht.useMemo)(()=>new Zc.Matrix4,[]),h=(0,ht.useRef)(new Zc.Vector3),y=(0,ht.useRef)(!1),w=(0,ht.useRef)(null),T=(0,ht.useRef)(!1),x=(0,ht.useRef)(0),D=(0,ht.useRef)(0),A=(0,ht.useRef)(1),S=(0,ht.useRef)(0),M=(0,ht.useCallback)(()=>{if(!i||!d)return;let B={canPlace:y.current,isPlacementMode:v.current,isModelPlaced:g.current},j=w.current;j&&j.canPlace===B.canPlace&&j.isPlacementMode===B.isPlacementMode&&j.isModelPlaced===B.isModelPlaced||(w.current=B,i(B))},[d,i]),_=(0,ht.useCallback)(()=>!d||!y.current?!1:(u.current.copy(h.current),g.current=!0,v.current=!1,M(),!0),[M,d]),C=(0,ht.useCallback)(()=>{d&&(v.current=!0,M())},[M,d]),E=(0,ht.useCallback)(()=>{let B=_();return!B&&d&&(v.current=!1,M()),B},[M,d,_]),L=(0,ht.useCallback)(()=>{d&&(v.current=!1,M())},[M,d]);(0,ht.useImperativeHandle)(o,()=>({placeCurrent:_,startPlacementMode:C,finishPlacementMode:E,cancelPlacementMode:L}),[L,E,_,C]),(0,ht.useEffect)(()=>{if(!c){u.current.set(0,0,-Y_),f.current=1,m.current=0,y.current=!1,T.current=!1,v.current=!0,g.current=!1,w.current=null;return}d&&(y.current=!1,T.current=!1,v.current=!0,g.current=!1,w.current=null,M())},[M,c,d]),(0,rs.useXRHitTest)((B,j)=>{if(!d||B.length===0){y.current&&(y.current=!1,M());return}j(b,B[0])&&(h.current.setFromMatrixPosition(b),y.current||(y.current=!0,M()))},"viewer"),(0,rs.useXRInputSourceEvent)("all","select",()=>{!d||T.current||!v.current||_()},[d,_]),(0,ht.useEffect)(()=>{if(!d)return;let B=O=>{O.touches.length===2&&(T.current=!0,x.current=K_(O.touches),D.current=Z_(O.touches),A.current=f.current,S.current=m.current)},j=O=>{if(!T.current||O.touches.length!==2)return;O.preventDefault();let N=K_(O.touches);if(x.current>0){let Y=N/x.current;f.current=Math.min(vD,Math.max(yD,A.current*Y))}let H=Z_(O.touches);m.current=S.current-(H-D.current)},R=O=>{O.touches.length===0&&requestAnimationFrame(()=>{T.current=!1})};return window.addEventListener("touchstart",B),window.addEventListener("touchmove",j,{passive:!1}),window.addEventListener("touchend",R),window.addEventListener("touchcancel",R),()=>{window.removeEventListener("touchstart",B),window.removeEventListener("touchmove",j),window.removeEventListener("touchend",R),window.removeEventListener("touchcancel",R)}},[d]),(0,Q_.useFrame)(()=>{let B=a.current,j=s.current;if(!B||!j)return;!c||!p?(B.visible=!0,B.position.set(0,0,0),B.rotation.set(0,0,0),j.scale.setScalar(1)):(B.visible=!d||g.current,B.position.copy(u.current),B.rotation.set(0,m.current,0),j.scale.setScalar(p.scale*f.current));let R=l.current;if(R){let O=d&&v.current&&y.current;R.visible=O,O&&R.position.copy(h.current)}});let k=c&&p?p.offset:[0,0,0];return(0,li.jsxs)(li.Fragment,{children:[(0,li.jsxs)("mesh",{ref:l,visible:!1,rotation:[-Math.PI/2,0,0],children:[(0,li.jsx)("ringGeometry",{args:[.05,.07,32]}),(0,li.jsx)("meshBasicMaterial",{color:"#22d3ee",transparent:!0,opacity:.95})]}),(0,li.jsx)("group",{ref:a,children:(0,li.jsx)("group",{ref:s,children:(0,li.jsx)("group",{position:k,children:r})})})]})}),J_=wD;var om=require("react");var SD="ri:license-grant:v1",MD={"260cd89ea13f":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwjr3ofKTkkcxOM0GYl/RlJj9JsuyjSF8sYmCd2YqsHJCEO8EvlNDrO2Kl4agFKo6dRhyR2/oWeiU6P9WIqRbvw=="},e1=new Map;function n1(e){let t=atob(e);return Uint8Array.from(t,n=>n.charCodeAt(0)).buffer}function t1(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");return n1(t.padEnd(Math.ceil(t.length/4)*4,"="))}function _D(e){if(!e||typeof e!="object")return!1;let t=e;return t.version===1&&typeof t.licenseKeyHash=="string"&&typeof t.domain=="string"&&(t.environment==="development"||t.environment==="production")&&typeof t.tier=="string"&&t.tier.length>0&&typeof t.issuedAt=="number"&&Number.isInteger(t.issuedAt)&&typeof t.expiresAt=="number"&&Number.isInteger(t.expiresAt)}async function im(e){let t=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(e.trim())),n=String.fromCharCode(...new Uint8Array(t));return btoa(n).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function ub(e,t){return`${SD}:${t}:${e}`}function CD(e,t){let n=e1.get(e);if(n)return n;let r=crypto.subtle.importKey("spki",n1(t),{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]);return e1.set(e,r),r}async function db(e,t,n){if(!globalThis.crypto?.subtle)return null;try{let[r,i,o,a,...s]=e.split("."),l=MD[i];if(r!=="ri1"||!l||!o||!a||s.length>0)return null;let c=JSON.parse(new TextDecoder().decode(t1(o)));if(!_D(c)||!await crypto.subtle.verify({name:"ECDSA",hash:"SHA-256"},await CD(i,l),t1(a),new TextEncoder().encode(`${r}.${i}.${o}`)))return null;let p=Math.floor(Date.now()/1e3),u=c.expiresAt-c.issuedAt;return c.licenseKeyHash!==t||c.domain!==n||c.expiresAt<=p||c.issuedAt>p+300||u<=0||u>43200?null:{environment:c.environment,tier:c.tier,expiresAt:c.expiresAt}}catch{return null}}async function r1(e,t,n){try{return await db(e,await im(t),n)}catch{return null}}async function i1(e,t,n){try{let r=await im(t);return await db(e,r,n)?(localStorage.setItem(ub(r,n),e),!0):!1}catch{return!1}}async function o1(e,t){try{let n=await im(e),r=ub(n,t),i=localStorage.getItem(r);if(!i)return null;let o=await db(i,n,t);return o||localStorage.removeItem(r),o}catch{return null}}async function pb(e,t){try{let n=await im(e);localStorage.removeItem(ub(n,t))}catch{}}var TD=["localhost","127.0.0.1","0.0.0.0"],PD=e=>TD.includes(e)||e.endsWith(".local")||e.endsWith(".localhost"),l1="https://react-immersive.liveroom.dev/api/validate-license",c1=()=>typeof window<"u",AD=300*1e3,ED=5e3,RD=400,fb=new Map,mb=new Map,ea=class extends Error{},u1=async(e,t,n)=>{let r=await o1(e,t);return r?(console.warn("[react-immersive] License server unreachable \u2014 using a previously verified, time-limited offline grant."),{status:"valid",reason:"Previously verified offline grant",environment:r.environment,tier:r.tier,isLocalDomain:n}):null},a1=async(e,t,n)=>{let r=await u1(e,t,n);return r||(console.warn("[react-immersive] License server unreachable and no valid offline grant is available \u2014 license validation failed."),{status:"invalid",reason:"Could not reach license server",isLocalDomain:n})},OD=e=>e instanceof ea||e instanceof TypeError,DD=()=>new Promise(e=>setTimeout(e,RD)),LD=e=>e==="development"||e==="production",ID=e=>{if(!e||typeof e!="object")return!1;let t=e;return!(typeof t.valid!="boolean"||t.reason!==void 0&&typeof t.reason!="string"||t.environment!==void 0&&!LD(t.environment)||t.tier!==void 0&&typeof t.tier!="string"||t.offlineGrant!==void 0&&typeof t.offlineGrant!="string")},kD=e=>{if(!e||typeof e!="object")return null;let t=e,n=t.reason??t.error;return typeof n=="string"&&n.trim()?n:null},d1=(e,t,n)=>`${n}::${e}::${t}`,p1=e=>{let t=fb.get(e);return t?Date.now()-t.timestamp>AD?(fb.delete(e),null):t.result:null},BD=(e,t)=>({status:e.valid?"valid":"invalid",reason:e.reason,environment:e.environment,tier:e.tier,isLocalDomain:t}),ND=(e,t)=>({status:"invalid",reason:e,isLocalDomain:t});async function VD(e,t,n,r){let i=d1(e,t,r),o=p1(i);if(o)return o;let a=mb.get(i);if(a)return a;let s=(async()=>{for(let l=0;l<2;l+=1)try{return await jD(e,t,n,i,r)}catch(c){if(!OD(c))throw c;if(l===0){let d=await u1(e,t,n);if(d)return d;await DD();continue}return a1(e,t,n)}return a1(e,t,n)})().finally(()=>{mb.delete(i)});return mb.set(i,s),s}async function jD(e,t,n,r,i){let o=new AbortController,a=setTimeout(()=>o.abort(),ED),s;try{s=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},cache:"no-store",signal:o.signal,body:JSON.stringify({licenseKey:e,domain:t})})}catch(d){throw o.signal.aborted?new ea("License validation timed out"):d}finally{clearTimeout(a)}let l;try{l=await s.json()}catch{throw new ea(`License server returned a non-JSON response${s.status?` (${s.status})`:""}`)}if(!s.ok){if(s.status===429||s.status>=500)throw new ea(`License server error (${s.status})`);let d=kD(l)??`License validation failed${s.status?` (${s.status})`:""}`;return await pb(e,t),ND(d,n)}if(!ID(l))throw new ea("License server returned an unexpected payload");let c=BD(l,n);if(c.status==="valid"&&i!==l1){let d=l.offlineGrant?await r1(l.offlineGrant,e,t):null;if(!d)throw new ea("License validation endpoint did not return a verifiable signed grant");c={...c,environment:d.environment,tier:d.tier}}return c.status==="valid"?(fb.set(r,{result:c,timestamp:Date.now()}),l.offlineGrant&&(await i1(l.offlineGrant,e,t)||console.warn("[react-immersive] The license server returned an invalid offline grant; it was not cached."))):await pb(e,t),c}var s1=(e,t)=>{let n=e.trim();return!c1()||!n?null:p1(d1(n,window.location.hostname.toLowerCase(),t))},m1=(e,t=l1)=>{let[n,r]=(0,om.useState)(()=>s1(e,t)??{status:"checking",isLocalDomain:!1});return(0,om.useEffect)(()=>{if(!c1())return;let i=!1,o=p=>{i||r(p)},a=e.trim(),s=window.location.hostname.toLowerCase(),l=PD(s),c=s1(e,t);return c?(o(c),()=>{i=!0}):(o({status:"checking",isLocalDomain:l}),a?((async()=>{try{o(await VD(a,s,l,t))}catch(p){let u=p instanceof TypeError?"Could not reach license server":p instanceof Error?p.message:"License validation failed";o({status:"invalid",reason:u,isLocalDomain:l})}})(),()=>{i=!0}):(o({status:"invalid",reason:"No license key provided",isLocalDomain:l}),()=>{i=!0}))},[e,t]),n};var $t=require("react");var Pn=require("react/jsx-runtime"),UD={up:{width:38,height:22},down:{width:38,height:22},left:{width:22,height:38},right:{width:22,height:38}},zD={up:"4 16 12 8 20 16",down:"4 8 12 16 20 8",left:"16 4 8 12 16 20",right:"8 4 16 12 8 20"},am=({direction:e})=>{let t=UD[e],n=zD[e];return(0,Pn.jsxs)("svg",{"aria-hidden":"true",className:"mc__arrow-icon",focusable:"false",viewBox:"0 0 24 24",width:t.width,height:t.height,fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{display:"block",width:`${t.width}px`,height:`${t.height}px`,pointerEvents:"none",padding:0,margin:0,overflow:"visible"},children:[(0,Pn.jsx)("polyline",{points:n,stroke:"rgba(0, 0, 0, 0.9)",strokeWidth:"6",strokeLinecap:"round",strokeLinejoin:"round"}),(0,Pn.jsx)("polyline",{points:n,stroke:"#2095F2",strokeWidth:"4",strokeLinecap:"round",strokeLinejoin:"round"})]})},co=16,FD={"bottom-left":{bottom:co,left:co,top:"auto",right:"auto",transform:"none"},"bottom-right":{bottom:co,right:co,top:"auto",left:"auto",transform:"none"},"top-left":{top:co,left:co,bottom:"auto",right:"auto",transform:"none"},"top-right":{top:co,right:co,bottom:"auto",left:"auto",transform:"none"},center:{top:"50%",left:"50%",bottom:"auto",right:"auto",transform:"translate(-50%, -50%)"},"center-bottom":{bottom:-10,left:"50%",top:"auto",right:"auto",transform:"translateX(-50%)"},"center-top":{top:co,left:"50%",bottom:"auto",right:"auto",transform:"translateX(-50%)"}},HD=({controlsRef:e,enabled:t=!0,opacity:n=.9,moveSensitivity:r=.001,rotateSensitivity:i=.01,position:o="center-bottom"})=>{let a=_e(),s=(0,$t.useRef)(null),[l,c]=(0,$t.useState)({x:0,y:0}),d=(0,$t.useRef)(!1),p=(0,$t.useRef)({x:0,y:0}),u=(0,$t.useRef)(void 0),f=(0,$t.useRef)(void 0),m=(0,$t.useRef)(null),v=(0,$t.useRef)(0),g=()=>e.current,b=(L,k,B)=>{let j=Math.hypot(L,k);if(j>B){let R=B/j;return{x:L*R,y:k*R}}return{x:L,y:k}},h=L=>{let B=Math.abs(L);return B<.12?0:Math.sign(L)*((B-.12)/(1-.12))},y=(0,$t.useCallback)(()=>{let L=()=>{let{x:k,y:B}=p.current,j=h(k),R=h(B);if(t&&(j!==0||R!==0)){let O=g();O&&O.rotate(-j*i,-R*i,!0)}u.current=requestAnimationFrame(L)};u.current=requestAnimationFrame(L)},[t,i]),w=(0,$t.useCallback)(()=>{u.current&&cancelAnimationFrame(u.current)},[]),T=(0,$t.useCallback)((L,k)=>{if(!s.current||!d.current)return;let B=s.current.getBoundingClientRect(),j=B.left+B.width/2,R=B.top+B.height/2,O=B.width/2-18,N=L-j,H=k-R,Y=b(N,H,O);c(Y),p.current={x:Y.x/O,y:Y.y/O}},[]),x=(0,$t.useCallback)(L=>{if(!t)return;L.preventDefault(),L.stopPropagation(),d.current=!0,y();let k="touches"in L?L.touches[0]:L;T(k.clientX,k.clientY)},[t,y,T]),D=(0,$t.useCallback)(L=>{if(!d.current)return;L.preventDefault();let k="touches"in L?L.touches[0]:L;T(k.clientX,k.clientY)},[T]),A=(0,$t.useCallback)(()=>{d.current=!1,c({x:0,y:0}),p.current={x:0,y:0},w()},[w]),S=r*10,M=(0,$t.useCallback)(L=>{t&&g()?.forward(L*S,!0)},[t,S]),_=(0,$t.useCallback)(L=>{t&&g()?.truck(L*S,0,!0)},[t,S]),C=(0,$t.useCallback)((L,k,B)=>{if(!t)return;f.current&&cancelAnimationFrame(f.current),m.current={control:L,amount:k,action:B},v.current=0,B(k);let j=R=>{if(!m.current)return;if(v.current===0){v.current=R,f.current=requestAnimationFrame(j);return}if(R-v.current>200){let{amount:N,action:H}=m.current;H(N),v.current=R}f.current=requestAnimationFrame(j)};f.current=requestAnimationFrame(j)},[t]),E=(0,$t.useCallback)(L=>{m.current?.control===L&&(f.current&&(cancelAnimationFrame(f.current),f.current=void 0),m.current=null,v.current=0)},[]);return(0,$t.useEffect)(()=>(window.addEventListener("mousemove",D),window.addEventListener("mouseup",A),window.addEventListener("touchmove",D,{passive:!1}),window.addEventListener("touchend",A),window.addEventListener("touchcancel",A),()=>{window.removeEventListener("mousemove",D),window.removeEventListener("mouseup",A),window.removeEventListener("touchmove",D),window.removeEventListener("touchend",A),window.removeEventListener("touchcancel",A),w(),f.current&&cancelAnimationFrame(f.current)}),[D,A,w]),t?(0,Pn.jsx)("div",{className:"mc__wrapper",style:{opacity:n,...FD[o]},children:(0,Pn.jsxs)("div",{className:"mc__dpad",children:[(0,Pn.jsx)("button",{"aria-label":a("moveForward"),className:"mc__arrow mc__arrow--up",onMouseDown:()=>C("up",1,M),onMouseUp:()=>E("up"),onMouseLeave:()=>E("up"),onTouchStart:L=>{L.preventDefault(),C("up",1,M)},onTouchEnd:()=>E("up"),onTouchCancel:()=>E("up"),children:(0,Pn.jsx)(am,{direction:"up"})}),(0,Pn.jsxs)("div",{className:"mc__middle-row",children:[(0,Pn.jsx)("button",{"aria-label":a("moveLeft"),className:"mc__arrow mc__arrow--left",onMouseDown:()=>C("left",-1,_),onMouseUp:()=>E("left"),onMouseLeave:()=>E("left"),onTouchStart:L=>{L.preventDefault(),C("left",-1,_)},onTouchEnd:()=>E("left"),onTouchCancel:()=>E("left"),children:(0,Pn.jsx)(am,{direction:"left"})}),(0,Pn.jsx)("div",{ref:s,className:"mc__joystick",onMouseDown:x,onTouchStart:x,children:(0,Pn.jsx)("div",{className:"mc__knob",style:{transform:`translate(${l.x}px, ${l.y}px)`}})}),(0,Pn.jsx)("button",{"aria-label":a("moveRight"),className:"mc__arrow mc__arrow--right",onMouseDown:()=>C("right",1,_),onMouseUp:()=>E("right"),onMouseLeave:()=>E("right"),onTouchStart:L=>{L.preventDefault(),C("right",1,_)},onTouchEnd:()=>E("right"),onTouchCancel:()=>E("right"),children:(0,Pn.jsx)(am,{direction:"right"})})]}),(0,Pn.jsx)("button",{"aria-label":a("moveBackward"),className:"mc__arrow mc__arrow--down",onMouseDown:()=>C("down",-1,M),onMouseUp:()=>E("down"),onMouseLeave:()=>E("down"),onTouchStart:L=>{L.preventDefault(),C("down",-1,M)},onTouchEnd:()=>E("down"),onTouchCancel:()=>E("down"),children:(0,Pn.jsx)(am,{direction:"down"})})]})}):null},f1=HD;var Qc=require("three");function sm(e){return[e.x,e.y,e.z]}function h1(e){let t=new Qc.Box3().setFromObject(e),n=0;return e.traverse(r=>{r.isMesh&&(n+=1)}),{bounds:{min:sm(t.min),max:sm(t.max),center:sm(t.getCenter(new Qc.Vector3)),size:sm(t.getSize(new Qc.Vector3))},objectCount:n,materialVariants:xg(e),materialVariantGroups:lp(e)}}function GD(e){return typeof e=="object"&&!Array.isArray(e)}function WD(e,t){return"group"in t?e.group===t.group:"tag"in t?e.tags?.includes(t.tag)??!1:(e.type??"other")===t.type}function An(e,t){if(GD(t))return Object.entries(e).filter(([,i])=>WD(i,t)).map(([i])=>i);let r=(typeof t=="string"?[t]:t).map(i=>sn(e,i)).filter(i=>i!==null);return[...new Set(r)]}function lm(e,t){return An(e,t).map(n=>e[n]).filter(n=>n!==void 0)}var qD="#ff3b30",XD=Object.freeze({}),g1=e=>e;function $D(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function YD(e,t){let n=e.metadata;for(let r of t.split(".")){if(!$D(n))return;n=n[r]}return n}function KD(e,t){if("metric"in t){let n=e.metrics?.[t.metric];return!(typeof n!="number"||!Number.isFinite(n)||t.above!==void 0&&!(n>t.above)||t.below!==void 0&&!(n<t.below))}if("status"in t){let n=e.status??"normal";return Array.isArray(t.status)?t.status.includes(n):t.status===n}return YD(e,t.metadata)===t.equals}function ZD(e){let t=e.trim().replace(/^#/,""),n=t.length===3?t.split("").map(r=>r+r).join(""):t;return/^[0-9a-f]{6}$/i.test(n)?[0,2,4].map(r=>parseInt(n.slice(r,r+2),16)):null}var hb=e=>`#${e.map(t=>Math.round(t).toString(16).padStart(2,"0")).join("")}`;function gb(e,t){let n=e.map(([l,c])=>({at:l,rgb:ZD(c)})).filter(l=>Number.isFinite(l.at)&&l.rgb!==null).sort((l,c)=>l.at-c.at);if(n.length===0||!Number.isFinite(t))return null;if(t<=n[0].at)return hb(n[0].rgb);let r=n[n.length-1];if(t>=r.at)return hb(r.rgb);let i=n.findIndex(l=>l.at>=t),o=n[i-1],a=n[i],s=a.at===o.at?1:(t-o.at)/(a.at-o.at);return hb(o.rgb.map((l,c)=>l+(a.rgb[c]-l)*s))}function cm(e,t){if(!t?.length)return{bindings:e,pulses:XD,sourceOf:g1};let n=new Map,r={};for(let a of t){let s=a.target?An(e,a.target):Object.keys(e),l=a.when?Array.isArray(a.when)?a.when:[a.when]:[];for(let c of s){let d=e[c];if(!l.every(u=>KD(d,u)))continue;let p={...a.material};if(a.colorScale){let u=d.metrics?.[a.colorScale.metric],f=typeof u=="number"?gb(a.colorScale.stops,u):null;f&&(p={...p,[a.colorScale.channel??"baseColor"]:f})}if(a.pulse){let u=a.pulse===!0?{}:a.pulse;r[c]={color:u.color??qD,speed:u.speed!==void 0&&u.speed>0?u.speed:1};let f=p.emissiveIntensity??n.get(c)?.emissiveIntensity??d.style?.material?.emissiveIntensity;f!==void 0&&f>0||(p.emissiveIntensity=1)}Object.keys(p).length>0&&n.set(c,{...n.get(c),...p})}}if(n.size===0)return{bindings:e,pulses:r,sourceOf:g1};let i={...e},o=new WeakMap;for(let[a,s]of n){let l=e[a],c={...l,style:{...l.style,material:{...l.style?.material,...s}}};i[a]=c,o.set(c,l)}return{bindings:i,pulses:r,sourceOf:a=>o.get(a)??a}}var QD=.12,b1=new Set;function Jc(e,t){return t?new Set(An(e,t.target)):b1}function um(e,t){let n=Jc(e.bindings,t);if(!t||n.size===0)return{...e,setAside:b1};let r=Math.min(Math.max(t.ghostOpacity??QD,0),1),i={...e.bindings},o=new WeakMap,a=new Set;for(let[s,l]of Object.entries(e.bindings)){if(n.has(s))continue;a.add(s);let c=t.mode==="hide"?{...l,visible:!1}:{...l,style:{...l.style,material:{...l.style?.material,opacity:Math.min(l.style?.material?.opacity??1,r)}}};i[s]=c,o.set(c,e.sourceOf(l))}return{bindings:i,pulses:e.pulses,sourceOf:s=>o.get(s)??e.sourceOf(s),setAside:a}}var x1=require("react");var v1=require("react"),bb=require("@react-three/fiber"),y1=new WeakMap;function dm(e){let t=(0,bb.useThree)(r=>r.get),n=(0,bb.useThree)(r=>r.setEvents);(0,v1.useEffect)(()=>{if(!e)return;let r=y1.get(t);if(!r){let o=new Set;r=o,y1.set(t,o);let a=t().events.filter;n({filter:(s,l)=>{let c=a?a(s,l):s;return o.size===0?c:c.filter(d=>{for(let p of o)if(!p(d))return!1;return!0})}})}r.add(e);let i=r;return()=>{i.delete(e)}},[e,t,n])}function yb({setAside:e,nodeRefs:t}){let n=(0,x1.useMemo)(()=>{if(e.size===0)return null;let r={refs:null,bound:new Map};return i=>{let o=t.current??{};if(r.refs!==o){let s=new Map;for(let[l,c]of Object.entries(o))s.set(c,e.has(l));r={refs:o,bound:s}}let{bound:a}=r;for(let s=i.object;s;s=s.parent){let l=a.get(s);if(l!==void 0)return!l}return!0}},[e,t]);return dm(n),null}var Nn=require("react"),T1=require("@react-three/drei"),dl=require("@react-three/fiber"),Ur=require("three");var is=require("three"),w1={x:0,y:1,z:2},JD=e=>Math.min(Math.max(e,0),1);function eL(e,t){let n=1/0,r=-1/0;for(let i=0;i<8;i++){let o=new is.Vector3(...e.min);for(let s=0;s<3;s++)i&1<<s&&o.setComponent(s,e.max[s]);let a=o.dot(t);n=Math.min(n,a),r=Math.max(r,a)}return[n,r]}function S1(e,t){if(!e.enabled||t.min.some((r,i)=>!Number.isFinite(r)||!Number.isFinite(t.max[i])||r>t.max[i]))return{cuts:[],intersection:!1};let n=(r,i,o,a,s)=>{let l=s?new is.Vector3(...s).normalize():new is.Vector3().setComponent(w1[i],1),[c,d]=eL(t,l),p=c+(d-c)*JD(o),u=a?1:-1;return{id:r,direction:l,min:c,max:d,coordinate:p,plane:new is.Plane(l.clone().multiplyScalar(u),-p*u)}};if(e.mode==="box"){let r=e.box??{min:[0,0,0],max:[1,1,1]};return{intersection:!!e.invertBox,cuts:["x","y","z"].flatMap((i,o)=>[n(`${i}-min`,i,r.min[o],!e.invertBox),n(`${i}-max`,i,r.max[o],!!e.invertBox)])}}return e.mode==="planes"?{intersection:!1,cuts:(e.planes??[]).filter(r=>r.enabled).map(r=>n(r.id,r.axis,r.position,r.flip,r.normal))}:{intersection:!1,cuts:[n("plane",e.axis,e.position,e.flip,e.normal)]}}function M1(e,t,n){return e.length?t?e.some(r=>r.distanceToPoint(n)>=-1e-4):e.every(r=>r.distanceToPoint(n)>=-1e-4):!0}function pm(e,t,n){if(e.mode==="planes")return{planes:e.planes?.map(r=>r.id===t?{...r,position:n}:r)};if(e.mode==="box"){let r=e.box??{min:[0,0,0],max:[1,1,1]},i=[...r.min],o=[...r.max],a=w1[t[0]];return t.endsWith("min")?i[a]=Math.max(0,Math.min(n,o[a]-.001)):o[a]=Math.min(1,Math.max(n,i[a]+.001)),{box:{min:i,max:o}}}return{position:n}}function _1(e,t,n,r){let i=n.clone().addScaledVector(r,-n.dot(r));if(i.lengthSq()<1e-8)return null;i.normalize();let o=e.direction.dot(i);if(Math.abs(o)<1e-8)return null;let a=t.clone().sub(e.origin).dot(i)/o;return Number.isFinite(a)?e.at(a,new is.Vector3).dot(r):null}var eu=require("three");function C1(){let e=new Map;function t(n){let r=e.get(n);r&&(n.clippingPlanes===r.owned&&(n.clippingPlanes=r.planes,n.clipShadows=r.shadows,n.clipIntersection=r.intersection,n.side===eu.DoubleSide&&(n.side=r.side),n.needsUpdate=!0),e.delete(n))}return{apply(n,r,i){let o=e.get(n);o&&n.clippingPlanes!==o.owned&&(e.delete(n),o=void 0),o||(o={planes:n.clippingPlanes,side:n.side,shadows:n.clipShadows,intersection:n.clipIntersection,owned:r},e.set(n,o)),n.side!==eu.DoubleSide&&(o.side=n.side),!(n.clippingPlanes===r&&n.clipIntersection===i&&n.side===eu.DoubleSide&&n.clipShadows)&&(o.owned=r,n.clippingPlanes=r,n.clipIntersection=i,n.clipShadows=!0,n.side=eu.DoubleSide,n.needsUpdate=!0)},retain(n){for(let r of e.keys())n.has(r)||t(r)},restore(){for(let n of e.keys())t(n)}}}var os=require("react/jsx-runtime");function vb({section:e,box:t,modelRef:n,showHandle:r,onChange:i,onDraggingChange:o}){let a=(0,dl.useThree)(b=>b.gl),s=(0,dl.useThree)(b=>b.raycaster),l=(0,dl.useThree)(b=>b.invalidate),c=(0,Nn.useMemo)(()=>kx(e),[e]),{cuts:d,intersection:p}=(0,Nn.useMemo)(()=>t?S1(c,t):{cuts:[],intersection:!1},[c,t]),u=(0,Nn.useMemo)(()=>d.map(b=>b.plane),[d]),f=u.length>0,m=(0,Nn.useMemo)(()=>C1(),[]);(0,Nn.useEffect)(()=>{if(!f)return;let b=a.localClippingEnabled;return a.localClippingEnabled=!0,l(),()=>{m.restore(),a.localClippingEnabled=b,l()}},[f,a,m,l]),(0,Nn.useEffect)(()=>{l()},[u,p,l]),(0,dl.useFrame)(()=>{if(!f)return;let b=new Set;n.current?.traverse(h=>{let y=h.material;for(let w of y?Array.isArray(y)?y:[y]:[])b.add(w),m.apply(w,u,p)}),m.retain(b)});let v=(0,Nn.useMemo)(()=>f?b=>{if(b.object.userData.riSectionHandle)return!0;let h=b.object;for(;h&&h!==n.current;)h=h.parent;return!h||M1(u,p,b.point)}:null,[f,u,p,n]);dm(v),(0,Nn.useEffect)(()=>{if(!f)return;let b=s,h=b.firstHitOnly;return b.firstHitOnly=!1,()=>{b.firstHitOnly=h}},[f,s]),(0,Nn.useEffect)(()=>()=>o(!1),[o]);let g=d.find(b=>b.id===c.activePlaneId)??(c.mode==="planes"&&c.activePlaneId?null:d[0]);return!f||!r||!t||!g?null:(0,os.jsx)(tL,{cut:g,box:t,onMove:b=>i(pm(c,g.id,b)),onDraggingChange:o},g.id)}function tL({cut:e,box:t,onMove:n,onDraggingChange:r}){let[i,o]=(0,Nn.useState)(!1),[a,s]=(0,Nn.useState)(!1),l=(0,Nn.useRef)(null),c=new Ur.Vector3(...t.min).add(new Ur.Vector3(...t.max)).multiplyScalar(.5);c.addScaledVector(e.direction,e.coordinate-c.dot(e.direction));let d=new Ur.Quaternion().setFromUnitVectors(new Ur.Vector3(0,0,1),e.direction),p=new Ur.Vector3(1,0,0).applyQuaternion(d),u=new Ur.Vector3(0,1,0).applyQuaternion(d),f=new Ur.Vector3(...t.max).sub(new Ur.Vector3(...t.min)),m=g=>Math.max(.01,Math.abs(g.x)*f.x+Math.abs(g.y)*f.y+Math.abs(g.z)*f.z)*1.08;(0,Nn.useEffect)(()=>()=>r(!1),[r]);let v=g=>{l.current&&(g.target?.releasePointerCapture?.(g.pointerId),l.current=null,s(!1),r(!1))};return(0,os.jsxs)("mesh",{ref:g=>{g&&(Cs(g),g.userData.riSectionHandle=!0)},position:c,quaternion:d,renderOrder:2,onPointerOver:g=>{g.stopPropagation(),o(!0)},onPointerOut:()=>o(!1),onPointerDown:g=>{g.stopPropagation(),g.target?.setPointerCapture?.(g.pointerId),l.current={point:g.point.clone(),view:g.ray.direction.clone(),at:g.point.dot(e.direction),cut:e.coordinate},s(!0),r(!0)},onPointerMove:g=>{let b=l.current;if(!b)return;g.stopPropagation();let h=_1(g.ray,b.point,b.view,e.direction);h!==null&&e.max>e.min&&n(Math.max(0,Math.min(1,(b.cut+h-b.at-e.min)/(e.max-e.min))))},onPointerUp:v,onPointerCancel:v,onClick:g=>g.stopPropagation(),children:[(0,os.jsx)("planeGeometry",{args:[m(p),m(u)]}),(0,os.jsx)("meshBasicMaterial",{color:"#22d3ee",transparent:!0,opacity:a?.22:i?.16:.08,side:Ur.DoubleSide,depthWrite:!1,toneMapped:!1}),(0,os.jsx)(T1.Edges,{color:"#22d3ee",renderOrder:3})]})}var P1=require("react-colorful"),ta=require("react/jsx-runtime"),xb=({colorPicker:e,onClose:t,itemMaterials:n,setItemMaterials:r,inline:i=!1})=>{let o=_e();return(0,ta.jsxs)("div",{className:`ri-popover${i?" ri-popover--inline":""}`,style:i?{padding:12}:{left:e.x,top:e.y,width:"min(225px, calc(100vw - 24px))",padding:12},onPointerDown:a=>a.stopPropagation(),children:[(0,ta.jsx)("p",{className:"ri-popoverLabel",children:o("color")}),(0,ta.jsx)(P1.HexColorPicker,{color:n[e.objectId]?.hex??"#ffffff",onChange:a=>r(s=>({...s,[e.objectId]:{...s[e.objectId],hex:a}}))}),(0,ta.jsxs)("div",{className:"ri-inlineRow",children:[(0,ta.jsx)("span",{className:"ri-colorCode",children:n[e.objectId]?.hex??"#ffffff"}),(0,ta.jsx)("button",{className:"ri-secondaryButton",onClick:t,children:o("done")})]})]})};var gt=require("react/jsx-runtime"),wb=({materialPopup:e,textureUrl:t,triggerFileUpload:n,clearTexture:r,canPlaceImage:i=!0,inline:o=!1,offset:a,rotationDegrees:s,onOffsetChange:l,onRotationChange:c,isPositioning:d=!1,onEndPositioning:p})=>{let u=_e();return(0,gt.jsxs)("div",{className:`ri-popover${o?" ri-popover--inline":""}`,style:o?{overflow:"hidden"}:{left:e.x,top:e.y,width:"min(300px, calc(100vw - 24px))",overflow:"hidden"},onPointerDown:f=>f.stopPropagation(),children:[(0,gt.jsx)("div",{className:"ri-popoverHeader",children:(0,gt.jsx)("p",{className:"ri-popoverLabel",style:{marginBottom:0},children:u("material")})}),(0,gt.jsxs)("div",{className:"ri-materialBody",children:[t?(0,gt.jsx)("div",{className:"ri-previewFrame",children:(0,gt.jsx)("img",{src:t,alt:u("texturePreview"),className:"ri-previewImage"})}):(0,gt.jsxs)("div",{className:"ri-emptyState",children:[(0,gt.jsx)("svg",{width:"24",height:"24",fill:"none",stroke:"currentColor",strokeWidth:1.5,viewBox:"0 0 24 24",children:(0,gt.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M2.25 15.75l5.159-5.159a2.25 2.25 0 013.182 0l5.159 5.159m-1.5-1.5l1.409-1.409a2.25 2.25 0 013.182 0l2.909 2.909M3 21h18M3 3h18"})}),(0,gt.jsx)("span",{style:{fontSize:12},children:u("noTextureApplied")})]}),i?(0,gt.jsx)("button",{onClick:()=>n(e.objectId),className:"ri-uploadButton",children:u(t?"replaceImage":"uploadImage")}):(0,gt.jsx)("p",{className:"ri-formatHint",children:u("noTextureCoordinates")}),t&&(0,gt.jsx)("button",{onClick:()=>r(e.objectId),className:"ri-removeButton",children:u("removeTexture")}),i?(0,gt.jsx)("p",{className:"ri-formatHint",children:"JPG \xB7 PNG \xB7 WebP"}):null,t&&(l||c)&&(0,gt.jsxs)("div",{className:"ri-texturePosition",children:[(0,gt.jsx)("p",{className:"ri-texturePositionLabel",children:u("texturePosition")}),(0,gt.jsxs)("div",{className:"ri-texturePositionGrid",children:[(0,gt.jsxs)("label",{className:"ri-texturePositionField",children:[(0,gt.jsx)("span",{children:u("offsetX")}),(0,gt.jsx)("input",{type:"number",step:.01,value:a?.[0]??0,onChange:f=>l?.(e.objectId,0,Number(f.target.value))})]}),(0,gt.jsxs)("label",{className:"ri-texturePositionField",children:[(0,gt.jsx)("span",{children:u("offsetY")}),(0,gt.jsx)("input",{type:"number",step:.01,value:a?.[1]??0,onChange:f=>l?.(e.objectId,1,Number(f.target.value))})]})]}),(0,gt.jsxs)("label",{className:"ri-texturePositionField ri-texturePositionField--full",children:[(0,gt.jsx)("span",{children:u("rotation")}),(0,gt.jsxs)("div",{className:"ri-texturePositionSliderRow",children:[(0,gt.jsx)("input",{type:"range",min:0,max:360,step:1,value:s??0,onChange:f=>c?.(e.objectId,Number(f.target.value))}),(0,gt.jsx)("input",{type:"number",min:0,max:360,step:1,value:Math.round(s??0),onChange:f=>c?.(e.objectId,Number(f.target.value))})]})]}),d?(0,gt.jsx)("button",{type:"button",className:"ri-uploadButton",onClick:p,title:u("confirmTexturePosition"),children:u("donePositioning")}):(0,gt.jsx)("p",{className:"ri-texturePositionHint",children:u("textureOffsetHint")})]})]})]})};var zr=require("react");var Tt=require("react/jsx-runtime");function A1({entries:e}){return(0,Tt.jsx)(Tt.Fragment,{children:e.map(([t,n])=>{let r=n!==null&&typeof n=="object",i=r?Object.entries(n):[];return r&&i.length>0?(0,Tt.jsxs)("div",{className:"left-panel__data-group",children:[(0,Tt.jsx)("span",{className:"left-panel__data-key",children:t}),(0,Tt.jsx)("div",{className:"left-panel__data-children",children:(0,Tt.jsx)(A1,{entries:i})})]},t):(0,Tt.jsxs)("div",{className:"left-panel__data-row",children:[(0,Tt.jsx)("span",{className:"left-panel__data-key",children:t}),(0,Tt.jsx)("span",{className:`left-panel__data-value left-panel__data-value--${typeof n}`,children:r?Array.isArray(n)?"[]":"{}":String(n)})]},t)})})}function nL({content:e}){let t=e!=null,[n,r]=(0,zr.useState)(t),[i,o]=(0,zr.useState)(t),a=(0,zr.useRef)(e);return t&&(a.current=e),(0,zr.useEffect)(()=>{if(t){r(!0);return}if(n){o(!1);let s=setTimeout(()=>r(!1),300);return()=>clearTimeout(s)}},[t,n]),(0,zr.useEffect)(()=>{if(n&&t){let s=requestAnimationFrame(()=>o(!0));return()=>cancelAnimationFrame(s)}},[n,t]),n?(0,Tt.jsx)("div",{className:`left-panel__action-extra${i?" left-panel__action-extra--open":""}`,children:(0,Tt.jsx)("div",{className:"left-panel__action-extra-inner",children:e??a.current})}):null}function Sb({isOpen:e,selectedObject:t,currentAction:n,onClose:r,onAction:i,renderActionExtra:o,translateDefaultActions:a=!1}){let s=_e(),[l,c]=(0,zr.useState)(t);(0,zr.useEffect)(()=>{t&&c(t)},[t]);let d=t??l,p=d?Object.entries(d).filter(([u])=>u!=="actions"&&u!=="decals"):[];return(0,Tt.jsx)("div",{className:`left-panel ${e?"left-panel--open":"left-panel--closed"}`,children:d&&(0,Tt.jsxs)(Tt.Fragment,{children:[(0,Tt.jsxs)("div",{className:"left-panel__header",children:[(0,Tt.jsx)("p",{className:"left-panel__title",children:d.label}),(0,Tt.jsx)("button",{onClick:r,className:"left-panel__close-btn","aria-label":s("closePanel"),children:"\u2715"})]}),p.length>0&&(0,Tt.jsx)("div",{className:"left-panel__data",children:(0,Tt.jsx)(A1,{entries:p})}),(0,Tt.jsx)("hr",{className:"left-panel__divider"}),d.actions&&d.actions.length>0&&(0,Tt.jsxs)(Tt.Fragment,{children:[(0,Tt.jsx)("div",{className:"left-panel__actions-label",children:s("actions")}),(0,Tt.jsx)("div",{className:"left-panel__actions-list",children:d.actions.map((u,f)=>{let m=n?.action.id===u.id&&(n.binding===d||n.binding?.id===d.id||n.binding?.modelObjectId===d.modelObjectId||n.objectId===d.id||n.objectId===d.modelObjectId),v=o?.(u.id);return(0,Tt.jsxs)(zr.Fragment,{children:[(0,Tt.jsx)("button",{onClick:g=>i({objectId:d.modelObjectId||d.id||"",action:u,binding:d,screenX:g.clientX,screenY:g.clientY}),className:["left-panel__action-btn",`left-panel__action-btn--${u.id}`,m?"left-panel__action-btn--active":""].filter(Boolean).join(" "),"data-action-id":u.id,"data-label":u.label,children:a?s.message(u.label):u.label}),(0,Tt.jsx)(nL,{content:v})]},f)})})]})]})})}var tu=require("react"),mm=require("lucide-react");var E1=require("react");var Hn=require("react/jsx-runtime");function R1({openButtonLabel:e,openButtonAriaLabel:t,eyebrow:n,title:r,searchValue:i,onSearchChange:o,searchPlaceholder:a,children:s,isOpen:l,onToggle:c,openButtonIcon:d,closeButtonIcon:p,closeButtonAriaLabel:u}){let f=_e(),[m,v]=(0,E1.useState)(!1),g=l!==void 0?l:m,b=h=>{l===void 0&&v(h),c?.(h)};return(0,Hn.jsxs)("div",{className:`ri-sidepanel-wrap ${g?"ri-sidepanel-wrap--open":"ri-sidepanel-wrap--closed"}`,children:[!g&&(0,Hn.jsxs)("button",{type:"button",className:"ri-sidepanel__open-btn",onClick:()=>b(!0),"aria-label":t,title:f("openPanel"),children:[d,e?(0,Hn.jsx)("span",{children:e}):null]}),(0,Hn.jsxs)("div",{className:`ri-sidepanel ${g?"ri-sidepanel--open":"ri-sidepanel--closed"}`,"aria-hidden":!g,children:[(0,Hn.jsxs)("div",{className:"ri-sidepanel__header",children:[(0,Hn.jsxs)("div",{className:"ri-sidepanel__header-top",children:[(0,Hn.jsx)("span",{className:"ri-sidepanel__eyebrow",children:n}),(0,Hn.jsx)("button",{type:"button",className:"ri-sidepanel__close-btn",onClick:()=>b(!1),"aria-label":u,title:f("close"),children:p??(0,Hn.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none","aria-hidden":"true",children:(0,Hn.jsx)("path",{d:"M1 1L11 11M11 1L1 11",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})})})]}),(0,Hn.jsx)("p",{className:"ri-sidepanel__title",children:r})]}),(0,Hn.jsx)("div",{className:"ri-sidepanel__search-wrap",children:(0,Hn.jsx)("input",{className:"ri-sidepanel__search",type:"text",placeholder:a,value:i,onChange:h=>o(h.target.value)})}),(0,Hn.jsx)("div",{className:"ri-sidepanel__list",children:s})]})]})}var Fr=require("react/jsx-runtime");function Mb({objectBindings:e,onAction:t,onFocus:n,onHover:r,isOpen:i,onToggle:o,isolatedKeys:a=null,onIsolate:s}){let l=_e(),[c,d]=(0,tu.useState)(null),[p,u]=(0,tu.useState)(""),f=(0,tu.useMemo)(()=>Object.entries(e).filter(([m,v])=>{let g=p.toLowerCase();return m.toLowerCase().includes(g)||(v.label??"").toLowerCase().includes(g)}),[e,p]);return(0,Fr.jsx)(R1,{openButtonLabel:"",openButtonAriaLabel:l("openSceneObjectsPanel"),openButtonIcon:(0,Fr.jsx)(mm.Boxes,{width:16,height:16,"aria-hidden":"true"}),eyebrow:l("sceneObjects"),title:l("visibleEntries",{count:f.length}),searchValue:p,onSearchChange:u,searchPlaceholder:l("searchNodesLabels"),isOpen:i,onToggle:o,closeButtonAriaLabel:l("closeSceneObjectsPanel"),children:f.map(([m,v])=>{let g=v.visible!==!1,b=c===m,h=a?.has(m)??!1;return(0,Fr.jsxs)("div",{onClick:()=>n(v),onMouseEnter:()=>{d(m),r?.(v)},onMouseLeave:()=>{d(null),r?.(null)},className:`ri-sidepanel__row${b?" ri-sidepanel__row--hovered":""}${a!==null&&!h?" ri-sidepanel__row--setAside":""}`,children:[(0,Fr.jsx)("button",{type:"button",className:`ri-sidepanel__label ri-sidepanel__labelButton${b?" ri-sidepanel__label--hovered":""}`,onFocus:()=>{d(m),r?.(v)},onBlur:()=>{d(null),r?.(null)},children:v.label??m}),s?(0,Fr.jsx)("button",{type:"button",onClick:w=>{w.stopPropagation(),s(v)},className:`ri-sidepanel__isolate-btn${h?" ri-sidepanel__isolate-btn--active":""}`,title:l(h?"showAll":"isolate"),"aria-label":l(h?"showAllObject":"isolateObject",{name:v.label??m}),"aria-pressed":h,children:(0,Fr.jsx)(mm.Focus,{width:14,height:14,"aria-hidden":"true"})}):null,(0,Fr.jsx)("button",{type:"button",onClick:w=>{w.stopPropagation(),t?.({objectId:m,action:{id:"toggle-visibility",label:"Toggle Visibility",type:"command"},binding:v})},className:"ri-sidepanel__vis-btn",title:l(g?"hide":"show"),"aria-label":l(g?"hideObject":"showObject",{name:v.label??m}),children:(0,Fr.jsx)("span",{className:`ri-sidepanel__checkbox${g?" ri-sidepanel__checkbox--checked":""}`,children:g&&(0,Fr.jsx)("svg",{width:"9",height:"9",viewBox:"0 0 10 10",fill:"none",children:(0,Fr.jsx)("path",{d:"M1.5 5L4 7.5L8.5 2.5",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})})})})]},m)})})}var ci=require("react");function O1(e,t){let n=[];for(let[r,i]of Object.entries(e))(t.bindings[r]??i).visible!==!1&&(t.setAside.has(r)||n.push({key:r,binding:i,label:i.label||r}));return n}function D1(e,t,n){if(n===0)return null;switch(e){case"ArrowDown":case"ArrowRight":return Math.min(t+1,n-1);case"ArrowUp":case"ArrowLeft":return Math.max(t-1,0);case"Home":return 0;case"End":return n-1;default:return null}}function L1(e,t,n){let r=n.toLocaleLowerCase();if(!r)return null;let i=[...r].every(s=>s===r[0]),o=r.length>1&&!i?t:t+1,a=i?[r,r[0]]:[r];for(let s of a)for(let l=0;l<e.length;l++){let c=((o+l)%e.length+e.length)%e.length;if(e[c].label.toLocaleLowerCase().startsWith(s))return c}return null}var na=require("react/jsx-runtime"),rL=600;function I1({objects:e,selectedKey:t,onHighlight:n,onSelect:r,onClearSelection:i}){let o=_e(),a=(0,ci.useId)(),[s,l]=(0,ci.useState)(!1),[c,d]=(0,ci.useState)(null),p=(0,ci.useRef)({query:"",at:0}),u=c?e.findIndex(w=>w.key===c):-1,f=u>=0?e[u]:null;(0,ci.useEffect)(()=>{t&&e.some(w=>w.key===t)&&d(t)},[t,e]);let m=s?f?.binding??null:null,v=(0,ci.useRef)(n);v.current=n,(0,ci.useEffect)(()=>{if(s)return v.current(m),()=>v.current(null)},[s,m]);let g=w=>{w!==null&&e[w]&&d(e[w].key)},b=w=>{let T=f?u:-1,x=D1(w.key,Math.max(T,0),e.length);if(x!==null){w.preventDefault(),g(T<0&&w.key!=="End"?0:x);return}if(w.key==="Enter"||w.key===" "){if(!f)return;w.preventDefault(),r(f.binding);return}if(w.key==="Escape"){if(!t)return;w.preventDefault(),w.stopPropagation(),i();return}if(w.key.length===1&&w.key!==" "&&!w.ctrlKey&&!w.metaKey&&!w.altKey){let D=Date.now(),A=p.current;A.query=D-A.at>rL?w.key:A.query+w.key,A.at=D,w.preventDefault(),g(L1(e,T,A.query))}};if(e.length===0)return null;let h=`${a}-option`,y=`${a}-hint`;return(0,na.jsxs)("div",{className:`ri-objectNavigator${s?" ri-objectNavigator--focused":""}`,children:[(0,na.jsx)("div",{role:"listbox",tabIndex:0,className:"ri-objectNavigator__list","aria-label":o("objectNavigator"),"aria-describedby":y,"aria-activedescendant":f?h:void 0,onFocus:()=>{l(!0),f||d(e[0].key)},onBlur:()=>l(!1),onKeyDown:b,children:f?(0,na.jsxs)("div",{id:h,role:"option","aria-selected":f.key===t,"aria-setsize":e.length,"aria-posinset":u+1,className:`ri-objectNavigator__option${f.key===t?" ri-objectNavigator__option--selected":""}`,children:[(0,na.jsx)("span",{className:"ri-objectNavigator__name",children:f.label}),(0,na.jsx)("span",{className:"ri-objectNavigator__position","aria-hidden":"true",children:o("objectNavigatorPosition",{position:u+1,count:e.length})})]}):null}),(0,na.jsx)("div",{id:y,className:"ri-objectNavigator__hint",children:o("objectNavigatorHint")})]})}var k1=require("react"),B1="(prefers-reduced-motion: reduce)";function iL(e){if(typeof window>"u"||!window.matchMedia)return()=>{};let t=window.matchMedia(B1);return t.addEventListener("change",e),()=>t.removeEventListener("change",e)}var oL=()=>typeof window<"u"&&!!window.matchMedia?.(B1).matches;function N1(e="user"){let t=(0,k1.useSyncExternalStore)(iL,oL,()=>!1);return e==="always"?!0:e==="never"?!1:t}var nT=require("lucide-react");var ra=require("react/jsx-runtime");function V1({visible:e,message:t,tone:n="default",progress:r}){if(!e)return null;let i=typeof r=="number"&&Number.isFinite(r),o=i?Math.min(Math.max(r,0),100):0,a=Math.round(o);return(0,ra.jsxs)("div",{className:"bb-loadingOverlay",role:"status","aria-live":"polite",children:[i&&(0,ra.jsxs)("div",{className:"bb-loadingProgressRow",children:[(0,ra.jsx)("div",{className:"bb-loadingProgress",role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":a,children:(0,ra.jsx)("div",{className:"bb-loadingProgress__bar",style:{width:`${a}%`}})}),(0,ra.jsxs)("span",{className:"bb-loadingProgress__label",children:[a,"%"]})]}),n!=="success"&&(0,ra.jsx)("span",{className:`bb-loadingMessage bb-status--${n}`,children:t})]})}function aL(e){return e.trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/[_\s]+/g,"-").replace(/[^a-zA-Z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").toLowerCase()}function sL(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[_-]+/g," ").replace(/\s+/g," ").trim().replace(/\b\w/g,t=>t.toUpperCase())}function _b(e){let t=e.toLowerCase();return t.includes("light")?"light":t.includes("wheel")||t.includes("rim")||t.includes("tire")?"wheel":t.includes("glass")||t.includes("window")||t.includes("windshield")||t.includes("sunroof")?"glass":t.includes("seat")||t.includes("dashboard")||t.includes("console")||t.includes("doorpanel")?"interior":t.includes("floor")?"floor":t.includes("wall")?"wall":t.includes("door")?"door":t.includes("chair")||t.includes("table")||t.includes("sofa")||t.includes("bed")?"furniture":"other"}function j1(e,t=!0){return e==="light"||e.endsWith("light")?[{id:"toggle-light",label:"Toggle Light",type:"command"},{id:"change-light-color",label:"Change Light Color",type:"command"},{id:"set-brightness",label:"Set Brightness",type:"command"}]:[{id:"change-color",label:"Change Color",type:"command"},...t?[{id:"change-material",label:"Change Material",type:"command"}]:[],{id:"toggle-visibility",label:"Toggle Visibility",type:"command"}]}function fm(e,t=!0){let n=_b(e);return{id:aL(e),modelObjectId:e,type:n,label:sL(e),status:"normal",selectable:!0,hoverable:!0,visible:!0,style:{},actions:j1(n,t),metrics:{},metadata:{}}}function U1(e,t){return Object.fromEntries(e.map(n=>[n,fm(n,!t?.has(n))]))}function hm(e,t){let n=new Set,r={};for(let i of e){let o=fm(i,!t?.has(i)),a=o.id||"object",s=a;for(let c=2;n.has(s);c++)s=`${a}-${c}`;n.add(s),o.id=s;let l=(o.actions??[]).filter(c=>lc.includes(c.id));o.actions=l.length>0?l:j1("other",!t?.has(i)),r[i]=o}return r}function z1(e){let t=new Set;for(let[n,r]of Object.entries(cr(e).nodesById))Vd(r)||t.add(n);return t}function F1(e){let{nodesById:t}=cr(e),n=[];for(let[r,i]of Object.entries(t)){let o=i;o.isMesh&&o.geometry&&i.name&&n.push(r)}return n.sort((r,i)=>r.localeCompare(i))}var Ne=require("react"),ym=require("@react-three/fiber"),vm=require("@react-three/drei"),mt=require("three");var H1="data:image/png;base64,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";var G1="data:image/png;base64,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";var W1="data:image/png;base64,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";var Ye=require("react/jsx-runtime"),Cb=-100,Tb=100,eC=.03,dL=.03,pL=.03,q1=.5,mL=H1,fL=G1,hL=W1,gL=Math.PI/4,X1=.4,pl=64,$1=eC*3,Pb="#4d7dff",Y1="#ffcc00",K1=.02,bL=new mt.Vector3(0,1,0),gm=32,Z1="#ff9d3d",bm=4;function Ab(e){let t=new Float32Array((pl+1)*3);for(let n=0;n<=pl;n++){let r=n/pl*Math.PI*2,i=Math.cos(r)*X1,o=Math.sin(r)*X1,a=0,s=0,l=0;e==="x"?(s=i,l=o):e==="y"?(a=i,l=o):(a=i,s=o),t[n*3]=a,t[n*3+1]=s,t[n*3+2]=l}return t}function yL(e){let t=Math.abs(e.y)<.99?new mt.Vector3(0,1,0):new mt.Vector3(1,0,0),n=new mt.Vector3().crossVectors(e,t).normalize(),r=new mt.Vector3().crossVectors(e,n).normalize();return[n,r]}function Q1(e,t,n=1e-5){return Math.abs(e[0]-t[0])<n&&Math.abs(e[1]-t[1])<n&&Math.abs(e[2]-t[2])<n}var ml=null,Rb=new Set;function Eb(e){ml!==e&&(ml=e,Rb.forEach(t=>t()))}function vL(e){return Rb.add(e),()=>Rb.delete(e)}function J1(){return ml}function tC({light:e,position:t,rotation:n=[0,0,0],color:r,intensity:i,visible:o,onPositionChange:a,onRotationChange:s,onDraggingChange:l}){let{activeTab:c,activeSubTab:d,setActiveTab:p,setActiveSubTab:u}=Qo(),{camera:f,gl:m,raycaster:v,invalidate:g}=(0,ym.useThree)(),b=(0,Ne.useRef)(null),h=(0,Ne.useRef)(null),y=(0,Ne.useRef)(null),w=(0,Ne.useRef)(null),T=(0,Ne.useRef)(null),x=(0,Ne.useRef)(null),D=(0,Ne.useRef)(null),A=(0,Ne.useRef)(null),S=(0,Ne.useRef)(null),M=(0,Ne.useRef)(null),_=(0,Ne.useRef)(null),C=(0,Ne.useMemo)(()=>new mt.Matrix4,[]),E=(0,Ne.useMemo)(()=>new mt.Quaternion,[]),L=(0,Ne.useMemo)(()=>new mt.Vector3(1,1,1),[]),k=(0,Ne.useRef)([0,0,0]),B=(0,Ne.useRef)([0,0,0]),j=(0,Ne.useRef)(!1),R=(0,Ne.useRef)(null),O=(0,Ne.useRef)(null),N=(0,Ne.useRef)(null),H=(0,Ne.useRef)(l);(0,Ne.useEffect)(()=>{H.current=l},[l]);let Y=(0,Ne.useMemo)(()=>new mt.Vector3(t[0],t[1],t[2]),[t]),ue=(0,Ne.useMemo)(()=>new mt.Euler(n[0],n[1],n[2]),[n]),be=(0,Ne.useMemo)(()=>new Float32Array(6),[]),X=(0,Ne.useMemo)(()=>Ab("x"),[]),G=(0,Ne.useMemo)(()=>Ab("y"),[]),J=(0,Ne.useMemo)(()=>Ab("z"),[]),ee=(0,Ne.useMemo)(()=>new Float32Array((gm+1)*3),[]),fe=(0,Ne.useMemo)(()=>new Float32Array(bm*2*3),[]),K=e?.type==="point",oe=e?.type==="spot",ae=K?fL:oe?hL:mL,pe=K?dL:oe?pL:eC,De=(0,Ne.useMemo)(()=>new mt.TextureLoader().load(ae),[ae]),te=(0,Ne.useSyncExternalStore)(vL,J1,J1),Fe=!!e&&te===e.id,We=(0,Ne.useRef)(new mt.Vector3),ge=(0,Ne.useRef)(new mt.Euler);(0,Ne.useEffect)(()=>{j.current||(We.current.copy(Y),ge.current.copy(ue),g())},[Y,ue,g]),(0,Ne.useEffect)(()=>{e&&ml===e.id&&!o&&Eb(null)},[e?.id,o]),(0,Ne.useEffect)(()=>()=>{e&&ml===e.id&&Eb(null),N.current!==null&&(cancelAnimationFrame(N.current),N.current=null)},[e?.id]);let Ce=(0,Ne.useCallback)(()=>{if(j.current||!Fe)return;let he=We.current,de=new mt.Quaternion().setFromEuler(ge.current);C.compose(he,de,L)},[C,L,Fe]);(0,ym.useFrame)(()=>{if(b.current&&b.current.position.copy(We.current),Ce(),y.current){y.current.lookAt(f.position);let he=f,de;he.isOrthographicCamera?de=pe/he.zoom:de=f.position.distanceTo(We.current)*pe,y.current.scale.setScalar(de)}if(D.current){let he=f,de;he.isOrthographicCamera?de=$1/he.zoom:de=f.position.distanceTo(We.current)*$1,D.current.scale.setScalar(de)}if(T.current){let he=T.current.getAttribute("position"),de=he.array;de[0]=0,de[1]=0,de[2]=0,de[3]=We.current.x,de[4]=We.current.y,de[5]=We.current.z,he.needsUpdate=!0,T.current.computeBoundingSphere()}if(x.current){let he=We.current,de=he.length();x.current.visible=de>q1,de>1e-6&&(x.current.position.copy(he).multiplyScalar(.5),x.current.scale.set(1,de,1),x.current.quaternion.setFromUnitVectors(bL,he.clone().normalize()))}if(w.current&&(w.current.visible=We.current.length()>q1),oe&&A.current&&S.current&&M.current){let he=We.current,de=he.length();if(de>1e-6){A.current.visible=!0;let ze=he.clone().negate().normalize(),Pe=de,ft=e?.angle??Math.PI/6,At=Pe*Math.tan(ft),se=he.clone().add(ze.clone().multiplyScalar(Pe)),[Re,Ee]=yL(ze),nt=S.current.getAttribute("position"),Qe=nt.array;for(let xe=0;xe<=gm;xe++){let et=xe/gm*Math.PI*2,xt=se.x+(Re.x*Math.cos(et)+Ee.x*Math.sin(et))*At,Dn=se.y+(Re.y*Math.cos(et)+Ee.y*Math.sin(et))*At,pi=se.z+(Re.z*Math.cos(et)+Ee.z*Math.sin(et))*At;Qe[xe*3]=xt,Qe[xe*3+1]=Dn,Qe[xe*3+2]=pi}nt.needsUpdate=!0,S.current.computeBoundingSphere();let ut=M.current.getAttribute("position"),Ke=ut.array;for(let xe=0;xe<bm;xe++){let et=xe/bm*Math.PI*2,xt=se.x+(Re.x*Math.cos(et)+Ee.x*Math.sin(et))*At,Dn=se.y+(Re.y*Math.cos(et)+Ee.y*Math.sin(et))*At,pi=se.z+(Re.z*Math.cos(et)+Ee.z*Math.sin(et))*At,yn=xe*6;Ke[yn]=he.x,Ke[yn+1]=he.y,Ke[yn+2]=he.z,Ke[yn+3]=xt,Ke[yn+4]=Dn,Ke[yn+5]=pi}ut.needsUpdate=!0,M.current.computeBoundingSphere()}else A.current.visible=!1}});let Je=(0,Ne.useCallback)(()=>{N.current!==null&&(cancelAnimationFrame(N.current),N.current=null),k.current=t,B.current=[n[0],n[1],n[2]],j.current=!0,R.current=null,O.current=null,H.current?.(!0)},[t,n]),ve=(0,Ne.useCallback)((he,de,ze,Pe)=>{let ft=new mt.Vector3(k.current[0],k.current[1],k.current[2]),At=new mt.Vector3,se=new mt.Quaternion,Re=new mt.Vector3;Pe.decompose(At,se,Re);let Ee=ft.clone().applyMatrix4(Pe),nt=[Math.min(Math.max(Ee.x,Cb),Tb),Math.min(Math.max(Ee.y,Cb),Tb),Math.min(Math.max(Ee.z,Cb),Tb)],Qe=new mt.Quaternion().setFromEuler(new mt.Euler(B.current[0],B.current[1],B.current[2],"XYZ")),ut=new mt.Quaternion().copy(se).multiply(Qe),Ke=new mt.Euler().setFromQuaternion(ut,"XYZ"),xe=[Ke.x,Ke.y,Ke.z];We.current.set(nt[0],nt[1],nt[2]),ge.current.set(xe[0],xe[1],xe[2]),R.current=nt,O.current=xe;let et=new mt.Quaternion().setFromEuler(ge.current);C.compose(We.current,et,L),g()},[C,L,g]),qe=(0,Ne.useCallback)(()=>{j.current=!1;let he=R.current,de=O.current;R.current=null,O.current=null;let ze=he&&!Q1(he,k.current),Pe=de&&!Q1(de,B.current);ze&&a&&a(he),Pe&&s&&s(de),ze||Pe?N.current=requestAnimationFrame(()=>{N.current=null,H.current?.(!1)}):H.current?.(!1)},[a,s]);return(0,Ne.useEffect)(()=>{let he=Pe=>{let ft=m.domElement.getBoundingClientRect();return new mt.Vector2((Pe.clientX-ft.left)/ft.width*2-1,-((Pe.clientY-ft.top)/ft.height)*2+1)},de=Pe=>!!Pe.target.closest?.("button, input, textarea, .ri-annotationPopup, .ri-colorPicker, .ri-materialPicker"),ze=Pe=>{if(de(Pe))return;let ft=he(Pe);v.setFromCamera(ft,f);let At=[];if(h.current&&At.push(h.current),y.current&&At.push(y.current),At.length===0)return;if(v.intersectObjects(At,!1).length>0){let Re=e?.id??null;ml!==Re&&(Eb(Re),p?.("scene"),u?.("Lighting")),Pe.preventDefault(),Pe.stopPropagation()}};return m.domElement.addEventListener("pointerdown",ze),()=>{m.domElement.removeEventListener("pointerdown",ze)}},[f,v,m,e,p,u]),c!=="scene"||d!=="Lighting"||!e||!o||e.type==="none"||e.type==="hemisphere"?null:(0,Ye.jsxs)("group",{ref:he=>{he&&Cs(he)},children:[(0,Ye.jsxs)("group",{ref:b,children:[(0,Ye.jsx)("sprite",{ref:y,children:(0,Ye.jsx)("spriteMaterial",{map:De,transparent:!0,opacity:.9,blending:mt.AdditiveBlending,depthWrite:!1,rotation:oe?gL:0},ae)}),(0,Ye.jsx)(vm.Sphere,{ref:h,args:[.25,16,16],children:(0,Ye.jsx)("meshBasicMaterial",{transparent:!0,opacity:.01})}),K&&(0,Ye.jsxs)("group",{ref:D,children:[(0,Ye.jsxs)("lineLoop",{renderOrder:999,children:[(0,Ye.jsx)("bufferGeometry",{children:(0,Ye.jsx)("bufferAttribute",{attach:"attributes-position",args:[X,3],count:pl+1})}),(0,Ye.jsx)("lineBasicMaterial",{color:Pb,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,Ye.jsxs)("lineLoop",{renderOrder:999,children:[(0,Ye.jsx)("bufferGeometry",{children:(0,Ye.jsx)("bufferAttribute",{attach:"attributes-position",args:[G,3],count:pl+1})}),(0,Ye.jsx)("lineBasicMaterial",{color:Pb,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,Ye.jsxs)("lineLoop",{renderOrder:999,children:[(0,Ye.jsx)("bufferGeometry",{children:(0,Ye.jsx)("bufferAttribute",{attach:"attributes-position",args:[J,3],count:pl+1})}),(0,Ye.jsx)("lineBasicMaterial",{color:Pb,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]})]})]}),!K&&!oe&&(0,Ye.jsxs)(Ye.Fragment,{children:[(0,Ye.jsxs)("mesh",{ref:x,children:[(0,Ye.jsx)("cylinderGeometry",{args:[K1,K1,1,8,1,!0]}),(0,Ye.jsx)("meshBasicMaterial",{color:Y1,transparent:!0,opacity:.05,blending:mt.AdditiveBlending,depthWrite:!1,depthTest:!1})]}),(0,Ye.jsxs)("line",{ref:w,children:[(0,Ye.jsx)("bufferGeometry",{ref:T,children:(0,Ye.jsx)("bufferAttribute",{attach:"attributes-position",args:[be,3],count:2})}),(0,Ye.jsx)("lineBasicMaterial",{color:Y1,transparent:!0,opacity:.7,blending:mt.AdditiveBlending})]})]}),oe&&(0,Ye.jsxs)("group",{ref:A,children:[(0,Ye.jsxs)("lineLoop",{renderOrder:999,children:[(0,Ye.jsx)("bufferGeometry",{ref:S,children:(0,Ye.jsx)("bufferAttribute",{attach:"attributes-position",args:[ee,3],count:gm+1})}),(0,Ye.jsx)("lineBasicMaterial",{color:Z1,transparent:!0,opacity:.85,depthTest:!1,depthWrite:!1})]}),(0,Ye.jsxs)("lineSegments",{renderOrder:999,children:[(0,Ye.jsx)("bufferGeometry",{ref:M,children:(0,Ye.jsx)("bufferAttribute",{attach:"attributes-position",args:[fe,3],count:bm*2})}),(0,Ye.jsx)("lineBasicMaterial",{color:Z1,transparent:!0,opacity:.5,depthTest:!1,depthWrite:!1})]})]}),Fe&&a&&(0,Ye.jsx)(vm.PivotControls,{ref:_,matrix:C,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:Je,onDrag:ve,onDragEnd:qe})]})}var He=require("react"),xm=require("@react-three/drei"),fl=require("@react-three/fiber"),Rt=require("three"),nC=require("lucide-react");var ia=require("react/jsx-runtime"),xL=.01,Ob=.5;function Db({node:e,space:t,moveEnabled:n,scaleEnabled:r,onTransformChange:i,onDraggingChange:o,transform:a}){let s=(0,fl.useThree)(K=>K.invalidate),l=(0,fl.useThree)(K=>K.camera),c=(0,fl.useThree)(K=>K.size),d=(0,He.useMemo)(()=>Xa(e),[e]),p=(0,He.useMemo)(()=>new Rt.Vector3,[e]);a?.pivot?p.fromArray(a.pivot.point):p.copy(d);let u=(0,He.useMemo)(()=>{let K=wc(e);if(!K)return[p.clone().add(new Rt.Vector3(Ob,Ob,Ob))];let oe=[];for(let ae of[K.min.x,K.max.x])for(let pe of[K.min.y,K.max.y])for(let De of[K.min.z,K.max.z])oe.push(new Rt.Vector3(ae,pe,De));return oe},[e,p]),f=(0,He.useMemo)(()=>new Rt.Vector3,[]),m=(0,He.useMemo)(()=>new Rt.Vector3,[]),v=(0,He.useRef)(null),g=(0,He.useMemo)(()=>new Rt.Matrix4,[]),b=(0,He.useRef)(!1),h=(0,He.useRef)(new Rt.Matrix4),y=(0,He.useRef)(new Rt.Matrix4),w=(0,He.useRef)(null),T=(0,He.useRef)([]),x=(0,He.useRef)(null),D=(0,He.useRef)(o);D.current=o;let A=(0,He.useMemo)(()=>new Rt.Vector3,[]),S=(0,He.useMemo)(()=>new Rt.Quaternion,[]),M=(0,He.useMemo)(()=>new Rt.Vector3,[]),_=(0,He.useMemo)(()=>new Rt.Quaternion,[]),C=(0,He.useMemo)(()=>new Rt.Vector3(1,1,1),[]),E=(0,He.useMemo)(()=>new Rt.Quaternion,[]),L=(0,He.useMemo)(()=>new Rt.Vector3,[]),k=(0,He.useMemo)(()=>new Rt.Vector3,[]),B=(0,He.useRef)([0,0,0]),j=(0,He.useRef)(new Rt.Vector3(1,1,1)),R=(0,He.useRef)({point:[0,0,0],offset:[0,0,0]}),O=(0,He.useCallback)(()=>{b.current||(e.updateWorldMatrix(!0,!1),A.copy(p).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(S),_.copy(S),t==="world"&&_.identity(),g.compose(A,_,C))},[A,g,_,C,e,p,t,S]),N=(0,He.useCallback)(()=>{e.updateWorldMatrix(!0,!1);let K=1/0;for(let oe of u){f.copy(oe).applyMatrix4(e.matrixWorld);let ae=f.distanceToSquared(l.position);ae<K&&(K=ae,m.copy(f))}v.current?.position.copy(m)},[l,m,u,e,f]);(0,He.useLayoutEffect)(()=>(O(),N(),()=>{let K=x.current!==null;K&&(cancelAnimationFrame(x.current),x.current=null),(b.current||K)&&(b.current=!1,D.current(!1));for(let oe of T.current)Jr(oe);T.current=[]}),[O]),(0,fl.useFrame)(()=>{O(),N()});let H=(0,He.useCallback)(()=>{x.current!==null&&(cancelAnimationFrame(x.current),x.current=null),e.updateWorldMatrix(!0,!0),T.current=[];for(let K of Si(e))Rs(K)||(Oo(K,K.matrixWorld),T.current.push(K));e.updateWorldMatrix(!0,!1),A.copy(p).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(S),e.getWorldScale(M),h.current.compose(A,S,M),y.current.copy(g),B.current=[e.rotation.x,e.rotation.y,e.rotation.z],j.current.copy(e.scale),R.current=a?.pivot??mp(p.toArray(),B.current,e.scale.toArray(),e.rotation.order),w.current=null,b.current=!0,o(!0)},[A,g,e,o,p,S,M,a?.pivot]),Y=(0,He.useCallback)((K,oe)=>{let ae=h.current.clone().premultiply(oe),pe=y.current.clone().premultiply(oe);ae.decompose(L,S,k);let De=L.clone();pe.decompose(A,_,C),t==="world"&&_.identity(),g.compose(A,_,C),K.decompose(L,E,k);let te=new Rt.Euler().setFromQuaternion(E,e.rotation.order),[Fe,We,ge]=B.current,Ce=[Fe+te.x,We+te.y,ge+te.z],Je=new Rt.Quaternion().setFromEuler(new Rt.Euler(Ce[0],Ce[1],Ce[2],e.rotation.order));e.scale.copy(j.current);let qe=(e.parent?.matrixWorld||new Rt.Matrix4).clone().invert(),he=De.clone().applyMatrix4(qe),de=p.clone().multiply(e.scale).applyQuaternion(Je),ze=he.clone().sub(de);e.position.copy(ze),e.rotation.set(Ce[0],Ce[1],Ce[2],e.rotation.order),e.updateMatrixWorld(!0),s();let Pe=R.current,ft=he.clone().sub(new Rt.Vector3(...Pe.offset)),At=[ft.x,ft.y,ft.z];w.current={position:At,rotation:Ce,pivot:Pe}},[A,E,g,_,C,s,e,p,L,k,t,S]),ue=(0,He.useCallback)(()=>{b.current=!1;let K=w.current;if(w.current=null,K)i(K),x.current=requestAnimationFrame(()=>{x.current=null,o(!1)});else if(T.current.length>0){for(let oe of T.current)Jr(oe);e.updateMatrixWorld(!0),s(),o(!1)}else o(!1);T.current=[]},[s,e,o,i]),be=(0,He.useRef)(null),X=(0,He.useCallback)(K=>{let oe=K.clone().project(l);return{x:c.left+(oe.x*.5+.5)*c.width,y:c.top+(-oe.y*.5+.5)*c.height}},[l,c]),G=(0,He.useCallback)((K,oe)=>{let ae=Math.max(xL,Number.isFinite(K)?K:1);e.scale.copy(j.current).multiplyScalar(ae);let De=(e.parent?.matrixWorld||new Rt.Matrix4).clone().invert(),te=oe.clone().applyMatrix4(De),Fe=new Rt.Quaternion().setFromEuler(e.rotation),We=p.clone().multiply(e.scale).applyQuaternion(Fe),ge=te.clone().sub(We);e.position.set(ge.x,ge.y,ge.z),e.updateMatrixWorld(!0),N(),s(),w.current={position:te.clone().sub(new Rt.Vector3(...R.current.offset)).toArray(),scale:e.scale.toArray(),pivot:R.current}},[s,e,p,N]),J=(0,He.useCallback)(K=>{if(!r)return;K.stopPropagation(),K.preventDefault(),K.currentTarget.setPointerCapture(K.pointerId),H();let oe=A.clone(),ae=X(oe),pe=Math.max(1,Math.hypot(K.clientX-ae.x,K.clientY-ae.y));be.current={pointerId:K.pointerId,centerScreen:ae,startDistance:pe,pivotWorld:oe}},[H,A,X,r]),ee=(0,He.useCallback)(K=>{let oe=be.current;if(!oe||K.pointerId!==oe.pointerId)return;K.stopPropagation();let ae=Math.hypot(K.clientX-oe.centerScreen.x,K.clientY-oe.centerScreen.y);G(ae/oe.startDistance,oe.pivotWorld)},[G]),fe=(0,He.useCallback)(K=>{let oe=be.current;!oe||K.pointerId!==oe.pointerId||(K.stopPropagation(),K.currentTarget.hasPointerCapture(K.pointerId)&&K.currentTarget.releasePointerCapture(K.pointerId),be.current=null,ue())},[ue]);return(0,He.useEffect)(()=>{r||be.current&&(be.current=null,ue())},[r,ue]),(0,ia.jsxs)("group",{children:[(0,ia.jsx)(xm.PivotControls,{matrix:g,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableAxes:!n,disableSliders:!n,disableRotations:!n,disableScaling:!0,onDragStart:H,onDrag:(K,oe,ae,pe)=>Y(oe,pe),onDragEnd:ue}),r&&(0,ia.jsx)("group",{ref:v,children:(0,ia.jsx)(xm.Html,{portal:void 0,zIndexRange:[10,0],style:{pointerEvents:"none",transition:"opacity 0.2s"},children:(0,ia.jsx)("div",{onPointerDown:J,onPointerMove:ee,onPointerUp:fe,onPointerCancel:fe,title:"Drag to resize",style:{position:"absolute",transform:"translate(-50%, -50%)",width:24,height:24,borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",background:"#113456",border:"2px solid #ffffff",boxShadow:"0 2px 6px rgba(0,0,0,0.5)",cursor:"nwse-resize",touchAction:"none",pointerEvents:"auto"},children:(0,ia.jsx)(nC.Maximize2,{size:13,color:"#ffffff"})})})})]})}var ot=require("react"),wm=require("@react-three/drei"),hl=require("@react-three/fiber"),Gn=require("three"),iC=require("lucide-react");var nu=require("three");function Lb(e){let t=new Set(e.map(({node:r})=>r)),n=new Set;return e.filter(({node:r})=>{if(n.has(r))return!1;n.add(r);for(let i=r.parent;i;i=i.parent)if(t.has(i))return!1;return!0})}function rC(e){return Lb(e).map(({key:t,node:n,transform:r})=>{n.updateWorldMatrix(!0,!0);let i=r?.pivot?.point??Xa(n).toArray(),o=r?.pivot??mp(i,[n.rotation.x,n.rotation.y,n.rotation.z],n.scale.toArray(),n.rotation.order,r?.shear);return{key:t,node:n,pivot:o,startWorld:n.matrixWorld.clone(),startMatrix:n.matrix.clone(),startMatrixAutoUpdate:n.matrixAutoUpdate,startPosition:n.position.clone(),startQuaternion:n.quaternion.clone(),startScale:n.scale.clone(),pivotWorld:new nu.Vector3(...o.point).applyMatrix4(n.matrixWorld)}})}function Ib(e,t,n=1){return e.map(r=>{let{node:i,pivot:o}=r;i.parent?.updateWorldMatrix(!0,!1);let a=(i.parent?.matrixWorld.clone()??new nu.Matrix4).invert(),s=a.clone().multiply(t).multiply(r.startWorld),{rotation:l,scale:c,shear:d}=id(s,r.startScale.clone().multiplyScalar(n),r.startQuaternion),p=r.pivotWorld.clone().applyMatrix4(t).applyMatrix4(a);return i.position.setFromMatrixPosition(s),i.quaternion.copy(l),i.scale.copy(c),_i(i,d),i.updateMatrixWorld(!0),{key:r.key,transform:{position:p.clone().sub(new nu.Vector3(...o.offset)).toArray(),rotation:[i.rotation.x,i.rotation.y,i.rotation.z],scale:c.toArray(),pivot:o,shear:d}}})}var oa=require("react/jsx-runtime"),wL=.01;function kb({entries:e,referenceNode:t,space:n,moveEnabled:r,scaleEnabled:i,onTransformChange:o,onDraggingChange:a}){let s=(0,hl.useThree)(X=>X.invalidate),l=(0,hl.useThree)(X=>X.camera),c=(0,hl.useThree)(X=>X.size),d=(0,ot.useRef)(e);d.current=e;let p=(0,ot.useRef)([]);(e.length!==p.current.length||e.some((X,G)=>X.key!==p.current[G].key||X.node!==p.current[G].node))&&(p.current=e);let u=p.current,f=(0,ot.useMemo)(()=>Lb(u).map(({node:X})=>X),[u]),m=t??e[e.length-1]?.node,v=(0,ot.useMemo)(()=>new Gn.Vector3,[]),g=(0,ot.useMemo)(()=>new Gn.Quaternion,[]),b=(0,ot.useMemo)(()=>new Gn.Matrix4,[]),h=(0,ot.useMemo)(()=>new Gn.Vector3(1,1,1),[]),y=(0,ot.useMemo)(()=>new Gn.Vector3,[]),w=(0,ot.useRef)(null),T=(0,ot.useMemo)(()=>f.flatMap(X=>{let G=wc(X);if(!G)return[{node:X,point:Xa(X).addScalar(.5)}];let J=[];for(let ee of[G.min.x,G.max.x])for(let fe of[G.min.y,G.max.y])for(let K of[G.min.z,G.max.z])J.push({node:X,point:new Gn.Vector3(ee,fe,K)});return J}),[f]),x=(0,ot.useRef)(!1),D=(0,ot.useRef)(new Gn.Matrix4),A=(0,ot.useRef)([]),S=(0,ot.useRef)(null),M=(0,ot.useRef)([]),_=(0,ot.useRef)(null),C=(0,ot.useRef)(null),E=(0,ot.useRef)(a);E.current=a;let L=(0,ot.useRef)(o);L.current=o;let k=(0,ot.useCallback)(()=>{if(!x.current){v.set(0,0,0);for(let X of f)X.updateWorldMatrix(!0,!1),v.add(Xa(X).applyMatrix4(X.matrixWorld));f.length&&v.divideScalar(f.length),g.identity(),n==="local"&&m&&(m.updateWorldMatrix(!0,!1),m.getWorldQuaternion(g)),b.compose(v,g,h)}},[v,b,g,f,m,n,h]),B=(0,ot.useCallback)(()=>{let X=1/0,G=new Gn.Vector3;for(let{node:J,point:ee}of T){J.updateWorldMatrix(!0,!1),G.copy(ee).applyMatrix4(J.matrixWorld);let fe=G.distanceToSquared(l.position);fe<X&&(X=fe,y.copy(G))}w.current?.position.copy(y)},[l,T,y]),j=(0,ot.useCallback)(()=>{let X=C.current;C.current=null,X?.target.hasPointerCapture(X.pointerId)&&X.target.releasePointerCapture(X.pointerId)},[]);(0,ot.useLayoutEffect)(()=>{k(),B()},[k,B]),(0,ot.useLayoutEffect)(()=>()=>{j();let X=_.current!==null;if(X&&(cancelAnimationFrame(_.current),_.current=null),x.current)for(let G of A.current)G.node.matrixAutoUpdate=G.startMatrixAutoUpdate,G.node.matrix.copy(G.startMatrix),G.node.position.copy(G.startPosition),G.node.quaternion.copy(G.startQuaternion),G.node.scale.copy(G.startScale),G.node.updateMatrixWorld(!0);(x.current||X)&&(x.current=!1,S.current=null,E.current(!1),s());for(let G of M.current)Jr(G);M.current=[]},[u,s,j]),(0,hl.useFrame)(()=>{k(),B()});let R=(0,ot.useCallback)(()=>{_.current!==null&&(cancelAnimationFrame(_.current),_.current=null),k(),A.current=rC(d.current),M.current=[];for(let{node:X}of A.current)for(let G of Si(X))Rs(G)||(Oo(G,G.matrixWorld),M.current.push(G));D.current.copy(b),S.current=null,x.current=!0,E.current(!0)},[b,k]),O=(0,ot.useCallback)((X,G)=>{if(!x.current)return;D.current.clone().premultiply(G).decompose(v,g,new Gn.Vector3),n==="world"&&g.identity(),b.compose(v,g,h),S.current=Ib(A.current,G),B(),s()},[v,b,g,s,n,B,h]),N=(0,ot.useCallback)(()=>{if(!x.current)return;x.current=!1,j();let X=S.current;if(S.current=null,X?.length)_.current=requestAnimationFrame(()=>{_.current=null,E.current(!1)}),L.current(X);else{for(let G of M.current)Jr(G);s(),E.current(!1)}M.current=[]},[s,j]);(0,ot.useEffect)(()=>{(!i&&C.current||!r&&x.current&&!C.current)&&N()},[i,r,N]);let H=(0,ot.useCallback)(X=>{let G=X.clone().project(l);return{x:c.left+(G.x*.5+.5)*c.width,y:c.top+(-G.y*.5+.5)*c.height}},[l,c]),Y=(0,ot.useCallback)(X=>{if(!i)return;X.stopPropagation(),X.preventDefault(),X.currentTarget.setPointerCapture(X.pointerId),R();let G=H(v);C.current={pointerId:X.pointerId,target:X.currentTarget,centerScreen:G,startDistance:Math.max(1,Math.hypot(X.clientX-G.x,X.clientY-G.y))}},[R,v,H,i]),ue=(0,ot.useCallback)(X=>{let G=C.current;if(!G||X.pointerId!==G.pointerId)return;X.stopPropagation();let J=Math.hypot(X.clientX-G.centerScreen.x,X.clientY-G.centerScreen.y),ee=Math.max(wL,J/G.startDistance),fe=new Gn.Vector3().setFromMatrixPosition(D.current),K=new Gn.Matrix4().makeTranslation(...fe.toArray()).multiply(new Gn.Matrix4().makeScale(ee,ee,ee)).multiply(new Gn.Matrix4().makeTranslation(...fe.clone().negate().toArray()));S.current=Ib(A.current,K,ee),B(),s()},[s,B]),be=(0,ot.useCallback)(X=>{X.pointerId===C.current?.pointerId&&(X.stopPropagation(),N())},[N]);return(0,oa.jsxs)("group",{children:[(0,oa.jsx)(wm.PivotControls,{matrix:b,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableAxes:!r,disableSliders:!r,disableRotations:!r,disableScaling:!0,onDragStart:R,onDrag:(X,G,J,ee)=>O(G,ee),onDragEnd:N}),i&&(0,oa.jsx)("group",{ref:w,children:(0,oa.jsx)(wm.Html,{children:(0,oa.jsx)("div",{onPointerDown:Y,onPointerMove:ue,onPointerUp:be,onPointerCancel:be,title:"Drag to resize",style:{position:"absolute",transform:"translate(-50%, -50%)",width:24,height:24,borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",background:"#113456",border:"2px solid #ffffff",boxShadow:"0 1px 4px rgba(0,0,0,0.4)",cursor:"nwse-resize",touchAction:"none",pointerEvents:"auto"},children:(0,oa.jsx)(iC.Maximize2,{size:13,color:"#ffffff"})})})})]})}var oC=require("three");function SL(e){let t=e.object;if(!t.isSkinnedMesh||!e.face||!t.skeleton)return null;let n=t.geometry,r=n.getAttribute("skinIndex"),i=n.getAttribute("skinWeight"),o=n.getAttribute("position");if(!r||!i||!o)return null;let a=t.worldToLocal(e.point.clone()),s=[e.face.a,e.face.b,e.face.c],l=new oC.Vector3,c=s[0],d=1/0;for(let f of s){l.fromBufferAttribute(o,f);let m=l.distanceToSquared(a);m<d&&(d=m,c=f)}let p=r.getComponent(c,0),u=i.getComponent(c,0);for(let f=1;f<4;f++){let m=i.getComponent(c,f);m>u&&(u=m,p=r.getComponent(c,f))}return t.skeleton.bones[p]??null}function aC(e){let t=SL(e)??e.object,n=ur(t);if(!n)return null;t.updateWorldMatrix(!0,!1);let r=t.worldToLocal(e.point.clone());return{anchorNodeName:n,anchorLocalPosition:[r.x,r.y,r.z]}}function sC(e,t,n){if(!e.anchorNodeName||!e.anchorLocalPosition)return!1;let r=_r(t,e.anchorNodeName);return r?(r.updateWorldMatrix(!0,!1),n.set(...e.anchorLocalPosition).applyMatrix4(r.matrixWorld),!0):!1}var uo=require("react"),Mm=require("@react-three/fiber"),Sm=require("three");function _m({annotation:e,enabled:t,controlsRef:n,offsetRef:r}){let i=(0,Mm.useThree)(u=>u.scene),o=(0,uo.useRef)(null),a=(0,uo.useRef)(!1),s=(0,uo.useMemo)(()=>new Sm.Vector3,[]),l=(0,uo.useMemo)(()=>new Sm.Vector3,[]),c=(0,uo.useMemo)(()=>new Sm.Vector3,[]),d=e?.anchorNodeName,p=e?.anchorLocalPosition;return(0,uo.useEffect)(()=>{o.current=null,a.current=!1},[d,e?.id]),(0,Mm.useFrame)(()=>{let u=n.current,f=r.current;if(!t||!u||!f||!d||!p){a.current=!1;return}let m=o.current;if((!m||!m.parent)&&(m=_r(i,d),o.current=m),!m){a.current=!1;return}m.updateWorldMatrix(!0,!1),s.set(p[0],p[1],p[2]).applyMatrix4(m.matrixWorld),!(a.current&&s.distanceToSquared(l)<1e-8)&&(l.copy(s),a.current=!0,c.copy(s).add(f),u.setLookAt(c.x,c.y,c.z,s.x,s.y,s.z,!0))}),null}var tt=require("react"),as=require("three");function lC({sceneAnnotations:e,controlledAnnotationCategories:t,onAnnotationCategoriesChange:n,showAnnotationFilters:r,initialCategories:i,controlledActiveAnnotation:o,onActiveAnnotationChange:a,onAnnotationsChange:s,controlsRef:l,sceneRef:c,annotationWorldPositionsRef:d,tourCameraOffsetRef:p,initialCameraStateRef:u,engagement:f,engagementRef:m}){let[v,g]=(0,tt.useState)(!1),[b,h]=(0,tt.useState)(()=>e??[]);(0,tt.useEffect)(()=>{if(b.length>0){let ge=b.reduce((Ce,Je)=>Math.max(Ce,Je.id),0);D.current=ge}else D.current=0},[b]);let[y,w]=(0,tt.useState)(null),[T,x]=(0,tt.useState)({title:"",description:""}),D=(0,tt.useRef)(0),[A,S]=(0,tt.useState)(null),[M,_]=(0,tt.useState)(-1),[C,E]=(0,tt.useState)(!1),L=(0,tt.useRef)(null),[k,B]=(0,tt.useState)(()=>i),j=t===void 0?k:t,R=(0,tt.useMemo)(()=>px(b,j),[b,j]),O=(0,tt.useMemo)(()=>[...new Set(b.map(Mh))].sort(),[b]),N=r&&O.some(Boolean),H=ge=>{t===void 0&&B(ge),n?.(ge)},Y=(0,tt.useMemo)(()=>[...R].sort((ge,Ce)=>ge.id-Ce.id),[R]),ue=(0,tt.useMemo)(()=>JSON.stringify([j?.map(ge=>ge.trim()).sort()??null,Y]),[j,Y]),be=(0,tt.useMemo)(()=>M<0||M>=Y.length?null:Y[M],[M,Y]),X=(0,tt.useCallback)(ge=>{if(o!==void 0){a?.(ge);return}S(ge?{annotation:ge}:null)},[o,a]),G=(0,tt.useRef)(null),J=(0,tt.useCallback)(ge=>{let Ce=l.current,Je=c.current;if(!Ce)return;let ve=new as.Vector3,qe=d.current.get(ge.id);qe?ve.copy(qe):Je&&sC(ge,Je,ve)||ve.set(ge.worldPosition[0],ge.worldPosition[1],ge.worldPosition[2]),p.current=null;let he=Ce.smoothTime;Ce.smoothTime=As(Ce,.6);let de=ge.worldNormal;if(Ju(ge.cameraView))Fl(Ce,ge.cameraView);else{if(Je){let ze=new as.Box3().setFromObject(Je),Pe=new as.Vector3;ze.getCenter(Pe);let ft=new as.Vector3;ze.getSize(ft);let At=ft.length()*.2,se;de?se=new as.Vector3(de[0],de[1],de[2]):se=ve.clone().sub(Pe),se.lengthSq()<1e-6&&se.set(0,0,1),se.normalize();let Re=Math.max(At*.6,.3),Ee=ve.clone().add(se.multiplyScalar(Re));Ce.setPosition(Ee.x,Ee.y,Ee.z,!0),ge.anchorNodeName&&ge.anchorLocalPosition&&(p.current=Ee.clone().sub(ve))}Ce.setTarget(ve.x,ve.y,ve.z,!0),G.current&&Ea(Ce,G.current)}L.current&&clearTimeout(L.current),L.current=setTimeout(()=>{Ce.smoothTime=he,L.current=null},800),X(ge)},[X]),ee=(0,tt.useCallback)(()=>{Y.length!==0&&(l.current&&(G.current=Es(l.current)),f.startTour(Y.length),g(!0),_(0),J(Y[0]))},[Y,J,f]),fe=(0,tt.useCallback)(()=>{if(Y.length===0||M<0)return;E(!0);let ge=(M-1+Y.length)%Y.length;_(ge),J(Y[ge]),setTimeout(()=>E(!1),500)},[M,Y,J]),K=(0,tt.useCallback)(()=>{if(Y.length===0||M<0)return;if(M===Y.length-1){if(f.completeTour(),g(!1),_(-1),X(null),l.current&&u.current){let Ce=u.current;Fl(l.current,{...G.current,...Ce}),G.current=null}return}E(!0);let ge=M+1;_(ge),J(Y[ge]),setTimeout(()=>E(!1),500)},[M,Y,J,X,f]),oe=(0,tt.useCallback)(()=>{if(f.stopTour(),g(!1),_(-1),X(null),l.current&&u.current){let ge=u.current;Fl(l.current,{...G.current,...ge}),G.current=null}},[X,f]);(0,tt.useEffect)(()=>{m.current.stopTour("annotations-changed"),G.current&&l.current&&(Fl(l.current,{...G.current,...u.current??{}}),G.current=null),p.current=null,_(-1),g(!1)},[ue]),(0,tt.useEffect)(()=>()=>{L.current&&clearTimeout(L.current)},[]),(0,tt.useEffect)(()=>{be&&v&&G.current&&X(be)},[be,X,v]),(0,tt.useEffect)(()=>{if(e===void 0)return;let ge=e.map(Ce=>({...Ce,localPosition:Ce.localPosition??Ce.worldPosition}));h(ge)},[e]);let ae=(0,tt.useCallback)(()=>{if(o!==void 0){a?.(null);return}S(null)},[o,a]),pe=o!==void 0?o:A?.annotation??null,De=(0,tt.useMemo)(()=>pe?R.find(Ce=>Ce.id===pe.id)??null:null,[pe,R]);(0,tt.useEffect)(()=>{pe&&!De&&ae()},[pe,De,ae]);let te=(0,tt.useCallback)(()=>{if(!y||!T.title.trim())return;D.current+=1;let Ce={id:D.current,worldPosition:y.worldPosition,localPosition:y.localPosition,worldNormal:y.worldNormal,anchorNodeName:y.anchor?.anchorNodeName,anchorLocalPosition:y.anchor?.anchorLocalPosition,title:T.title.trim(),description:T.description},Je=[...b,Ce];h(Je),s?.(Je),w(null)},[y,T,b,s]),Fe=(0,tt.useCallback)(()=>w(null),[]),We=(0,tt.useCallback)(ge=>{Ju(ge.cameraView)?J(ge):X(ge)},[X,J]);return{annotations:b,pendingAnnotation:y,setPendingAnnotation:w,annotationForm:T,setAnnotationForm:x,currentAnnotationIndex:M,isNavigating:C,localAnnotationCategories:k,selectedAnnotationCategories:j,visibleAnnotations:R,availableAnnotationCategories:O,annotationFiltersVisible:N,changeAnnotationCategories:H,sortedAnnotations:Y,currentAnnotation:be,setActiveAnnotation:X,focusAnnotation:J,startGuidedTour:ee,goToPreviousAnnotation:fe,goToNextAnnotation:K,stopGuidedTour:oe,closeViewingAnnotation:ae,activeAnnotation:pe,activeViewingAnnotation:De,isGuidedTourActive:v,handleAnnotationOk:te,handleAnnotationCancel:Fe,handleAnnotationMarkerClick:We}}var Hr=require("react"),pC=require("three");var hn=require("three");function cC(e,t){if(!(e instanceof hn.Mesh)||!t)return null;let n=e.geometry.getAttribute("position");if(!n?.count)return null;e.updateWorldMatrix(!0,!1),t.updateWorldMatrix(!0,!1);let r=new hn.Box3,i=new hn.Vector3;if(Kt(e)){let x=e;x.computeBoundingBox(),x.computeBoundingSphere();for(let D=0;D<n.count;D++)r.expandByPoint(e.getVertexPosition(D,i))}else e.geometry.boundingBox||e.geometry.computeBoundingBox(),r.copy(e.geometry.boundingBox);if(r.applyMatrix4(e.matrixWorld),r.isEmpty())return null;let o=r.getCenter(new hn.Vector3),a=t.getWorldPosition(new hn.Vector3),s=t.getWorldDirection(new hn.Vector3),l=t.isOrthographicCamera,c=new hn.Raycaster,d=x=>{if(l){let A=a.distanceTo(o)+r.getSize(i).length()+1;c.set(x.clone().addScaledVector(s,-A),s)}else c.set(a,x.clone().sub(a).normalize());let D=c.intersectObject(e,!1)[0];return D?Fa({...D,ray:c.ray},e):null},p=d(o);if(p)return p;let u=e.geometry.index,f=u?.count??n.count,m=new hn.Vector3,v=new hn.Vector3,g=new hn.Vector3,b=new hn.Vector3,h=new hn.Vector3,y=new hn.Vector3,w=null,T=1/0;for(let x=0;x+2<f;x+=3){if(e.getVertexPosition(u?u.getX(x):x,m).applyMatrix4(e.matrixWorld),e.getVertexPosition(u?u.getX(x+1):x+1,v).applyMatrix4(e.matrixWorld),e.getVertexPosition(u?u.getX(x+2):x+2,g).applyMatrix4(e.matrixWorld),b.copy(m).add(v).add(g).multiplyScalar(1/3),hn.Triangle.getNormal(m,v,g,h),l?y.copy(s).negate():y.copy(a).sub(b),h.dot(y)<=0)continue;let D=b.distanceToSquared(o);D<T&&(T=D,w=b.clone())}return w?d(w):null}var gn=require("three");function uC(e,t,n,r){if(!(e instanceof gn.Mesh)||!t)return null;e.updateWorldMatrix(!0,!1),t.updateWorldMatrix(!0,!1);let i=new gn.Vector3().fromArray(n.position);if(Kt(e)){let c=e;c.computeBoundingBox(),c.computeBoundingSphere();let d=c.geometry.getAttribute("position");if(!d)return null;let p=c.geometry.index,u=p?.count??d.count,f=new gn.Triangle,m=new gn.Vector3,v=new gn.Vector3,g=1/0,b=null;for(let h=0;h+2<u;h+=3){let y=[0,1,2].map(T=>p?p.getX(h+T):h+T);f.a.fromBufferAttribute(d,y[0]),f.b.fromBufferAttribute(d,y[1]),f.c.fromBufferAttribute(d,y[2]),f.closestPointToPoint(i,m);let w=m.distanceToSquared(i);if(!(w>=g||!f.getBarycoord(m,v))&&(g=w,b=new gn.Vector3().addScaledVector(c.getVertexPosition(y[0],new gn.Vector3),v.x).addScaledVector(c.getVertexPosition(y[1],new gn.Vector3),v.y).addScaledVector(c.getVertexPosition(y[2],new gn.Vector3),v.z),g<1e-12))break}if(!b)return null;i.copy(b)}if(i.applyMatrix4(e.matrixWorld).project(t),!Number.isFinite(i.x)||i.z<-1||i.z>1)return null;let o=new gn.Vector2(r==="left"?-.0035:r==="right"?.0035:0,r==="down"?-.0035:r==="up"?.0035:0),a=new gn.Raycaster,s=n.size*.01,l=new gn.Vector3().fromArray(n.position);for(let c=1;c>=1/1024;c/=2){a.setFromCamera(new gn.Vector2(i.x,i.y).addScaledVector(o,c),t);let d=a.intersectObject(e,!1)[0];if(d){let p=Fa({...d,ray:a.ray},e);if(new gn.Vector3().fromArray(p.position).distanceTo(l)<=s)return p}}return null}var dC=()=>`decal-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`;function mC({currentObjectBindings:e,currentObjectBindingsRef:t,applyObjectBindings:n,nodeRefsMap:r,controlsRef:i,decalMove:o,decalDragging:a,setDecalDragging:s,setDecalError:l,setDecalControl:c,decalRequestRef:d,onTextureUpload:p,currentPanelObjectId:u,modelUrl:f}){let m=(0,Hr.useCallback)((x,D)=>{let A=t.current,S=A[x];if(!S)return;let M=D(S.decals??[]);n({...A,[x]:{...S,decals:M.length>0?M:void 0}})},[n,e]),v=(0,Hr.useMemo)(()=>{if(!a)return null;let{objectKey:x,decalId:D}=a,A=e[x],S=A?.decals?.find(M=>M.id===D);return S?{objectId:A.modelObjectId??x,decal:S,onCancel:()=>s(null),onCommit:M=>{m(x,_=>_.map(C=>C.id===D?{...C,...M}:C)),s(null)}}:null},[a,e,m]),g=o??v,b=(0,Hr.useCallback)((x,D)=>{d.current++;let A=t.current[x],S=r.current[A?.modelObjectId??x],M=cC(S,i.current?.camera);if(!M)return l("Could not find a surface on this object for the decal."),!1;let _={...D,...M};return m(x,C=>[...C,_]),l(null),c(C=>C&&{...C,activeId:_.id}),s({objectKey:x,decalId:_.id}),!0},[m]),h=(0,Hr.useCallback)(x=>{let D=t.current[x],A=r.current[D?.modelObjectId??x]?.geometry;if(!A)return .2;A.boundingBox||A.computeBoundingBox();let S=A.boundingBox?.getSize(new pC.Vector3),M=S?Math.max(S.x,S.y,S.z):0;return M>0&&Number.isFinite(M)?M/3:.2},[]),y=(0,Hr.useRef)([]);(0,Hr.useEffect)(()=>()=>{for(let x of y.current)URL.revokeObjectURL(x)},[]);let w=(0,Hr.useCallback)(async(x,D,A)=>{let S=++d.current;s(null);let M;if(p){if(M=await p(A,x),S!==d.current)return}else M=URL.createObjectURL(A),y.current.push(M);b(D,{id:dC(),image:M,size:h(D)})},[h,p,b]);return(0,Hr.useEffect)(()=>{d.current++,l(null),s(null)},[u,f]),{editDecals:m,activeDecalMove:g,addCenteredDecal:b,decalSizeFor:h,startImageDecal:w,decalControlHandlers:(x,D)=>({onSelect:A=>{d.current++,l(null),s(null),c({...x,activeId:A})},onAddText:(A,S)=>b(D,{id:dC(),text:A,color:S,size:h(D)}),onAddImage:A=>{w(x.objectId,D,A)},onChange:(A,S)=>m(D,M=>M.map(_=>_.id===A?{..._,...S}:_)),onNudge:(A,S)=>{let M=t.current[D],_=M?.decals?.find(L=>L.id===A);if(!_)return;let C=r.current[M.modelObjectId??D],E=uC(C,i.current?.camera,_,S);if(!E){l("No visible surface in that direction. Try another arrow or rotate the view.");return}l(null),s(null),m(D,L=>L.map(k=>k.id===A?{...k,...E}:k))},onMove:A=>{d.current++,e[D]?.decals?.find(M=>M.id===A)&&(l(null),s(M=>M?.objectKey===D&&M.decalId===A?null:{objectKey:D,decalId:A}))},onRemove:A=>{s(null),m(D,S=>S.filter(M=>M.id!==A)),c({...x,activeId:null})},onClose:()=>{d.current++,l(null),s(null),c(null)}})}}var ru=require("react");function fC({canvasAreaElement:e,controlsRef:t,enabled:n}){let r=(0,ru.useRef)(new Set),i=(0,ru.useRef)(null);(0,ru.useEffect)(()=>{let o=e;if(!o||!n)return;let a=new Set(["w","a","s","d"," ","c"]),s=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"]),l=0,c=m=>m.code==="Space"?" ":m.key.toLowerCase(),d=()=>{r.current.clear(),l=0,i.current!==null&&(cancelAnimationFrame(i.current),i.current=null)},p=m=>{let v=t.current,g=r.current;if(!v||g.size===0){i.current=null,l=0;return}let b=l?Math.min((m-l)/1e3,.05):1/60;l=m;let h=Math.max(v.distance*.75,.01)*b;g.has("w")&&v.forward(h,!1),g.has("s")&&v.forward(-h,!1),g.has("a")&&v.truck(-h,0,!1),g.has("d")&&v.truck(h,0,!1),g.has(" ")&&v.truck(0,h,!1),g.has("c")&&v.truck(0,-h,!1),i.current=requestAnimationFrame(p)},u=m=>{if(m.target!==o){d();return}if(s.has(m.key)){let g=t.current;if(!g)return;m.preventDefault();let b=Math.PI/90,h=Math.max(g.distance*.05,.01);m.key==="ArrowUp"?m.shiftKey?g.forward(h,!0):g.rotate(0,-b,!0):m.key==="ArrowDown"?m.shiftKey?g.forward(-h,!0):g.rotate(0,b,!0):m.key==="ArrowLeft"?g.rotate(-b,0,!0):g.rotate(b,0,!0);return}let v=c(m);a.has(v)&&(m.preventDefault(),r.current.add(v),i.current===null&&(i.current=requestAnimationFrame(p)))},f=m=>{r.current.delete(c(m))};return o.addEventListener("keydown",u),o.addEventListener("keyup",f),o.addEventListener("blur",d),()=>{o.removeEventListener("keydown",u),o.removeEventListener("keyup",f),o.removeEventListener("blur",d),d()}},[e,t,n])}var En=require("react");var hC=1,ML=4,_L=.0015,CL=.1,TL=8;function gC({moveZoomTarget:e,setMoveZoomTarget:t,currentObjectBindingsRef:n,materialRefsOut:r,rendererCaptureRef:i,canvasAreaRef:o,canvasAreaElement:a,applyBindingStyle:s}){let l=(0,En.useRef)(null),c=(0,En.useRef)(!1),d=(0,En.useRef)([0,0]),p=(0,En.useRef)([0,0]),u=(0,En.useRef)(1),f=(0,En.useRef)(null),m=(0,En.useCallback)((w,T)=>{let x=e;if(!x)return;let D=n.current[x.objectKey]?.style?.material?.[x.textureKey],A=D?.path;if(!A)return;let S=D?.rotation??0,M=ei(x.textureKey),_=Wl(A,M),C=r.current[x.objectKey],E=Array.isArray(C)?C:C?[C]:[],L=jd[x.textureKey];for(let k of E){let B=k;L in B&&(B[L]=cd(B.userData,x.textureKey,_,A,w,T,S))}i.current?.invalidate()},[e]),v=(0,En.useCallback)(w=>{if(!e)return;w.currentTarget.setPointerCapture?.(w.pointerId),l.current={x:w.clientX,y:w.clientY},c.current=!1;let T=n.current[e.objectKey]?.style?.material?.[e.textureKey];if(d.current=T?.offset??[0,0],p.current=d.current,u.current=T?.scale??1,f.current===null){let x=()=>{i.current?.invalidate(),f.current=requestAnimationFrame(x)};f.current=requestAnimationFrame(x)}},[e]),g=(0,En.useCallback)(w=>{if(!e||!l.current)return;let T=o.current,x=T?.clientWidth||1,D=T?.clientHeight||1,A=w.clientX-l.current.x,S=w.clientY-l.current.y;if(!c.current&&Math.hypot(A,S)<ML)return;c.current=!0;let M=-(A/x)*hC,_=S/D*hC,[C,E]=d.current,L=[C+M,E+_];p.current=L,m(L,u.current),s(e.objectKey,k=>({...k,material:{...k?.material,[e.textureKey]:{...k?.material?.[e.textureKey],path:n.current[e.objectKey]?.style?.material?.[e.textureKey]?.path,offset:L}}}))},[e,m,s]),b=(0,En.useCallback)(w=>{if(!e)return;w.target?.releasePointerCapture?.(w.pointerId),f.current!==null&&(cancelAnimationFrame(f.current),f.current=null);let T=c.current,x=e;if(T){s(x.objectKey,D=>({...D,material:{...D?.material,[x.textureKey]:{...D?.material?.[x.textureKey],path:n.current[x.objectKey]?.style?.material?.[x.textureKey]?.path,offset:p.current}}})),l.current=null,c.current=!1;return}l.current=null,t(null)},[e,s]);(0,En.useEffect)(()=>{if(!e)return f.current!==null&&(cancelAnimationFrame(f.current),f.current=null),()=>{f.current!==null&&(cancelAnimationFrame(f.current),f.current=null)}},[e]),(0,En.useEffect)(()=>{let w=a;if(!(!w||!e))return w.addEventListener("pointermove",g),w.addEventListener("pointerup",b),w.addEventListener("pointercancel",b),()=>{w.removeEventListener("pointermove",g),w.removeEventListener("pointerup",b),w.removeEventListener("pointercancel",b)}},[a,e,g,b]);let h=(0,En.useCallback)(w=>{if(!e)return;w.preventDefault();let T=e,x=Math.exp(-w.deltaY*_L),D=Math.min(TL,Math.max(CL,u.current*x));u.current=D,m(p.current,D),s(T.objectKey,A=>({...A,material:{...A?.material,[T.textureKey]:{...A?.material?.[T.textureKey],path:n.current[T.objectKey]?.style?.material?.[T.textureKey]?.path,scale:D}}}))},[e,m,s]);return(0,En.useEffect)(()=>{let w=a;if(!(!w||!e))return w.addEventListener("wheel",h,{passive:!1}),()=>w.removeEventListener("wheel",h)},[a,e,h]),{beginMoveZoom:(0,En.useCallback)(w=>{c.current=!1,l.current=null,t(w)},[t]),handleMoveZoomPointerDown:v}}var Cm=require("@react-three/fiber"),PL=.2;function Bb({enabled:e,speed:t,controlsRef:n}){let r=(0,Cm.useThree)(i=>i.invalidate);return(0,Cm.useFrame)((i,o)=>{!e||!n.current||(n.current.rotate(o*PL*t,0,!1),r())}),null}var ui=require("lucide-react");var Pt=require("react/jsx-runtime");function bC({count:e,onDismiss:t}){let n=_e();return(0,Pt.jsxs)("div",{className:"ri-bindingsMismatchBanner",children:[(0,Pt.jsx)(ui.AlertTriangle,{size:14,className:"ri-bindingsMismatchBanner__icon"}),(0,Pt.jsx)("span",{children:n(e===1?"bindingMismatchOne":"bindingMismatchMany",{count:e})}),(0,Pt.jsx)("button",{type:"button",className:"ri-bindingsMismatchBanner__dismiss",onClick:r=>{r.stopPropagation(),t()},"aria-label":n("dismiss"),children:(0,Pt.jsx)(ui.X,{size:12})})]})}function yC({triangles:e,offset:t,onDismiss:n}){let r=_e();return(0,Pt.jsxs)("div",{className:`ri-largeModelBanner ${t?"ri-largeModelBanner--offset":""}`,children:[(0,Pt.jsx)(ui.AlertTriangle,{size:14,className:"ri-largeModelBanner__icon"}),(0,Pt.jsx)("span",{children:r("largeModelWarning",{millions:Math.round(e/1e6)})}),(0,Pt.jsx)("button",{type:"button",className:"ri-largeModelBanner__dismiss",onClick:i=>{i.stopPropagation(),n()},"aria-label":r("dismiss"),children:(0,Pt.jsx)(ui.X,{size:12})})]})}function vC({missing:e,total:t}){let n=_e();return(0,Pt.jsxs)("div",{className:"ri-uvCheckerBanner",role:"status",children:[(0,Pt.jsx)(ui.AlertTriangle,{size:14,className:"ri-uvCheckerBanner__icon"}),(0,Pt.jsxs)("span",{children:[e===t?"UV Checker: this model has no UV0 coordinates.":`UV Checker: ${e} of ${t} meshes have no UV0 coordinates.`," ",n("missingUVsAreShownInMagenta")]})]})}function xC({failure:e,source:t}){return(0,Pt.jsx)("div",{className:"ri-loadError",role:"alert",children:(0,Pt.jsxs)("div",{className:"ri-loadError__card",children:[(0,Pt.jsxs)("div",{className:"ri-loadError__header",children:[(0,Pt.jsx)(ui.AlertTriangle,{size:16,"aria-hidden":"true"}),(0,Pt.jsx)("span",{className:"ri-loadError__title",children:e.title})]}),(0,Pt.jsx)("p",{className:"ri-loadError__detail",children:e.detail}),(0,Pt.jsx)("p",{className:"ri-loadError__source",children:t}),e.technical&&(0,Pt.jsx)("p",{className:"ri-loadError__technical",children:e.technical})]})})}function wC({rebuilding:e,onReload:t}){let n=_e();return(0,Pt.jsx)("div",{className:"ri-contextRecovery",role:"alert",children:(0,Pt.jsxs)("div",{className:"ri-contextRecovery__card",children:[(0,Pt.jsx)(ui.AlertTriangle,{size:24,"aria-hidden":"true"}),(0,Pt.jsx)("h2",{children:n(e?"contextRestoringTitle":"contextLostTitle")}),(0,Pt.jsx)("p",{children:n(e?"contextRestoringMessage":"contextLostMessage")}),(0,Pt.jsxs)("button",{type:"button",onClick:t,disabled:e,children:[(0,Pt.jsx)(ui.RotateCcw,{size:16,"aria-hidden":"true"}),n("reloadViewer")]})]})})}var iu=require("react");function SC({applyBindingStyle:e,resolveObjectKey:t,onTextureUpload:n,fileInputRef:r,pendingObjectId:i,createdBlobUrls:o,texturePositioning:a,setMoveZoomTarget:s}){let l=(0,iu.useCallback)((b,h)=>{let y=o.current[b];y&&URL.revokeObjectURL(y),h.startsWith("blob:")?o.current[b]=h:delete o.current[b],e(b,w=>({...w,material:{...w?.material,texture:{path:h}}}))},[e]),c=b=>{let h=b.target.files?.[0],y=i.current;if(!h||!y)return;let w=t(y);w&&(n?n(h,w).then(T=>l(w,T),T=>console.error("onTextureUpload failed:",T)):l(w,URL.createObjectURL(h)),b.target.value="")},d=b=>{i.current=b,r.current?.click()},p=b=>{let h=t(b);if(!h)return;e(h,w=>w?.material?.texture?{...w,material:{...w.material,texture:void 0}}:w);let y=o.current[h];y&&(URL.revokeObjectURL(y),delete o.current[h])},u=!!a,f=typeof a=="object"?a:void 0,m=(0,iu.useCallback)((b,h,y)=>{if(f?.onOffsetChange){f.onOffsetChange(b,h,y);return}e(b,w=>{let T=w?.material?.texture;if(!T?.path)return w;let x=T.offset??[0,0],D=[x[0],x[1]];return D[h]=y,{...w,material:{...w?.material,texture:{...T,offset:D}}}})},[e,f]),v=(0,iu.useCallback)((b,h)=>{if(f?.onRotationChange){f.onRotationChange(b,h);return}e(b,y=>{let w=y?.material?.texture;if(!w?.path)return y;let T=(h%360+360)%360;return{...y,material:{...y?.material,texture:{...w,rotation:T*Math.PI/180}}}})},[e,f]),g=(0,iu.useCallback)(()=>{s(null),f?.onEndPositioning?.()},[f]);return{handleFileChange:c,triggerFileUpload:d,clearTexture:p,texturePositioningEnabled:u,texturePositioningOverrides:f,setMaterialTextureOffset:m,setMaterialTextureRotation:v,endMaterialTexturePositioning:g}}function MC({materialPopup:e,resolveObjectKey:t,currentObjectBindings:n,nodeRefsMap:r,moveZoomTarget:i,texturePositioningEnabled:o,texturePositioningOverrides:a,setMaterialTextureOffset:s,setMaterialTextureRotation:l,endMaterialTexturePositioning:c}){let d=e?t(e.objectId):null,p=d?n[d]?.style?.material?.texture?.path:void 0,u=p?Do(p)??p:void 0,f=Vd(d?r.current[d]:null),m=o?a?.offset??(d?n[d]?.style?.material?.texture?.offset:void 0):void 0,v=o?a?.rotationDegrees??(d?((n[d]?.style?.material?.texture?.rotation??0)*180/Math.PI%360+360)%360:0):0,g=o?a?.isPositioning??!!(d&&i?.objectKey===d&&i?.textureKey==="texture"):!1;return{materialTextureUrl:u,materialTargetTakesImage:f,materialTextureOffset:m,materialTextureRotationDegrees:v,isMaterialTexturePositioning:g,materialTextureOnOffsetChange:o?s:void 0,materialTextureOnRotationChange:o?l:void 0,materialTextureOnEndPositioning:o?c:void 0}}var gl=require("react");var Tm=e=>e==="#000000"?"#ffffff":e;function _C({nodeRefsMap:e,currentObjectBindingsRef:t,applyObjectBindings:n}){let r=(0,gl.useRef)({}),i=(0,gl.useCallback)(a=>{let s=gw(e.current[a]),l=t.current[a]?.style?.material,c=l?.emissive??s.color,d=l?.emissiveIntensity??s.intensity;return{color:c,intensity:d,on:c!=="#000000"&&d>0}},[]),o=(0,gl.useCallback)((a,s)=>{let l=t.current,c=l[a];c&&n({...l,[a]:{...c,style:{...c.style,material:{...c.style?.material,...s}}}})},[n]);return{glowMemoryRef:r,readObjectGlow:i,applyGlow:o}}function CC({setCurrentAction:e,bindingKeyIndex:t,currentObjectBindings:n,applyObjectBindings:r,resolveObjectKey:i,closeColorPicker:o,setColorPicker:a,setMaterialPopupsByObject:s,setItemMaterials:l,getPopoverPosition:c,decalRequestRef:d,setDecalError:p,setDecalDragging:u,setDecalControl:f,resolvedSceneConfigRef:m,applyLightPatches:v,readObjectGlow:g,applyGlow:b,glowMemoryRef:h,setLightControl:y,onAction:w}){return(0,gl.useCallback)(T=>{let{objectId:x,action:D,binding:A}=T;switch(e(T),D.id){case"toggle-visibility":{let S=x;A?.modelObjectId&&(S=t.byModelObjectId.get(A.modelObjectId)??S);let M=n[S],_=M?.visible===!1;M&&r({...n,[S]:{...M,visible:_}});break}case"change-color":o(),s(S=>{if(!(x in S))return S;let M={...S};return delete M[x],M}),l(S=>{let M=i(x,A)??x,_=S[x]?.hex,C=n[M]?.style?.material?.baseColor;return{...S,[x]:{...S[x],hex:_??C??"#ffffff"}}}),a(c(x,225,250,A,T));break;case"change-material":o(),s(S=>{if(x in S){let M={...S};return delete M[x],M}return{...S,[x]:c(x,300,320,A,T)}});break;case"add-text":case"add-image":{o();let S=D.id;d.current++,p(null),u(null),f(M=>M?.objectId===x&&M.kind===S?null:{objectId:x,kind:S,activeId:null});break}case"toggle-light":case"change-light-color":case"set-brightness":{let S=i(x,A);if(!S)break;let M=hw(m.current,n,S);if(D.id==="toggle-light"){if(M.length>0){let L=!M.some(k=>k.visible);v(Object.fromEntries(M.map(k=>[k.id,{visible:L}])));break}let E=g(S);E.on?(h.current[S]=E.intensity,b(S,{emissiveIntensity:0})):b(S,{emissive:Tm(E.color),emissiveIntensity:h.current[S]??1});break}let _=D.id,C=M.length>0?null:g(S);y(E=>E?.objectId===x&&E.kind===_?null:{objectId:x,kind:_,target:C?{type:"glow",objectKey:S,baseIntensity:C.on?C.intensity:h.current[S]??1}:{type:"lights",lightIds:M.map(L=>L.id),baseIntensity:Object.fromEntries(M.map(L=>[L.id,L.intensity]))},percent:C&&!C.on?0:100});break}default:break}w?.(T)},[r,b,v,g,n,c,w,o,i,t])}var Nb=require("react"),Wt=require("lucide-react");var ie=require("react/jsx-runtime");function TC({categories:e,selected:t,disabled:n,onChange:r}){let i=_e();return(0,ie.jsxs)("div",{className:"ri-annotationFilters",role:"group","aria-label":i("annotationCategories"),onPointerDown:o=>o.stopPropagation(),children:[(0,ie.jsx)("span",{children:i("annotations")}),(0,ie.jsx)("button",{type:"button","aria-pressed":t===null,disabled:n,onClick:()=>r(null),children:i("all")}),e.map(o=>(0,ie.jsx)("button",{type:"button",disabled:n,"aria-pressed":t?.some(a=>a.trim()===o)??!1,onClick:()=>r(t===null?[o]:t.some(a=>a.trim()===o)?t.filter(a=>a.trim()!==o):[...t,o]),children:o||i("uncategorized")},o))]})}function PC({onCancel:e}){let t=_e();return(0,ie.jsxs)("div",{className:"ri-isolationPill",role:"status",onPointerDown:n=>n.stopPropagation(),children:[(0,ie.jsx)("span",{className:"ri-isolationPill__label",children:t("decalDragHint")}),(0,ie.jsx)("button",{type:"button",className:"ri-isolationPill__button",onClick:e,children:t("cancel")})]})}function AC({label:e,onShowAll:t}){let n=_e();return(0,ie.jsxs)("div",{className:"ri-isolationPill",onPointerDown:r=>r.stopPropagation(),children:[(0,ie.jsx)("span",{className:"ri-isolationPill__label",children:e}),(0,ie.jsx)("button",{type:"button",className:"ri-isolationPill__button",onClick:t,children:n("showAll")})]})}function EC({groups:e,activeVariants:t,onSelect:n}){let r=_e();return(0,ie.jsx)(ie.Fragment,{children:e.map((i,o)=>(0,ie.jsxs)("div",{className:"ri-variantPicker",role:"group","aria-label":i.name??r("materialVariants"),onPointerDown:a=>a.stopPropagation(),children:[i.name?(0,ie.jsx)("span",{className:"ri-variantPicker__group","aria-hidden":"true",children:i.name}):null,i.variants.map(a=>{let s=t.includes(a.name);return(0,ie.jsxs)("button",{type:"button",className:`ri-variantPicker__option ${s?"ri-variantPicker__option--active":""}`,"aria-pressed":s,onClick:()=>n(a.name),children:[a.swatch?(0,ie.jsx)("span",{className:"ri-variantPicker__swatch",style:{background:a.swatch},"aria-hidden":"true"}):null,a.label]},a.name)})]},i.name??`group-${o}`))})}function RC({count:e,active:t,index:n,navigating:r,onStart:i,onPrevious:o,onNext:a,onStop:s}){let l=_e();return t?(0,ie.jsxs)(ie.Fragment,{children:[(0,ie.jsxs)("button",{className:"ri-tourButton",onClick:o,disabled:r||e===0||n<=0,title:l("previousAnnotation"),children:[(0,ie.jsx)(Wt.ChevronLeft,{size:16}),(0,ie.jsx)("span",{children:l("previous")})]}),(0,ie.jsx)("button",{className:"ri-tourButton ri-tourButton--stop",onClick:s,title:l("stopGuidedTour"),children:(0,ie.jsx)(Wt.Square,{size:16})}),(0,ie.jsxs)("button",{className:"ri-tourButton ri-tourButton--next",onClick:a,disabled:r||e===0,title:l("nextAnnotation"),children:[(0,ie.jsx)("span",{children:l("next")}),(0,ie.jsx)(Wt.ChevronRight,{size:16})]})]}):(0,ie.jsx)("button",{className:"ri-navButtonSingle",onClick:i,disabled:e===0,title:l("startGuidedTour"),children:l("guidedTour")})}function OC({fullscreen:e,disabled:t}){let n=_e();return(0,ie.jsxs)("div",{className:"mv-fullscreenWrapper",children:[e.error&&(0,ie.jsx)("div",{className:"mv-fullscreenError",role:"alert",children:n.message(e.error)}),(0,ie.jsx)("button",{type:"button",className:"mv-fullscreenButton",onClick:()=>{e.toggle()},disabled:e.pending||t,title:e.active?n("exitFullscreen"):n("enterFullscreen"),"aria-label":e.active?n("exitFullscreen"):n("enterFullscreen"),"aria-pressed":e.active,children:e.active?(0,ie.jsx)(Wt.Minimize,{}):(0,ie.jsx)(Wt.Maximize,{})})]})}function DC({open:e,current:t,disabled:n,onSelect:r,onToggle:i}){let o=_e();return(0,ie.jsxs)("div",{className:"mv-controllersWrapper",onPointerDown:a=>a.stopPropagation(),children:[e&&(0,ie.jsxs)("div",{className:"mv-controllersMenu",children:[(0,ie.jsx)("button",{type:"button",className:`mv-controllersMenuItem ${t==="orbit"?"mv-controllersMenuItem--active":""}`,onClick:()=>r("orbit"),children:o("orbitControl")}),(0,ie.jsx)("button",{type:"button",className:`mv-controllersMenuItem ${t==="pointerLock"?"mv-controllersMenuItem--active":""}`,onClick:()=>r("pointerLock"),children:o("pointLock")})]}),(0,ie.jsx)("button",{className:"mv-controllersButton",onClick:i,title:o("cameraController"),"aria-label":o("cameraControllerSettings"),disabled:n,children:(0,ie.jsx)(Wt.Orbit,{size:15})})]})}function LC({menu:e,recording:t,hasScene:n,canCaptureImage:r,canRecord:i,hasCinematic:o,hasMultipleModels:a=!1}){let s=_e(),l=(0,Nb.useId)(),c=(0,Nb.useId)(),{isDownloading:d,downloadMenuOpen:p,uvExportError:u,toggleDownloadMenu:f,handleDownloadMesh:m,handleDownloadSeparateMeshes:v,handleDownloadScreenshot:g,handleDownloadUvLayout:b,handleDownloadVideo:h,videoFormat:y,setVideoFormat:w,videoExportError:T}=e;return(0,ie.jsxs)("div",{className:"mv-downloadWrapper",onPointerDown:x=>x.stopPropagation(),children:[p&&(0,ie.jsxs)("div",{className:"mv-downloadMenu",children:[(0,ie.jsxs)("button",{className:"mv-downloadMenuItem",onClick:m,disabled:d||t||!n,"aria-describedby":l,children:[(0,ie.jsx)(Wt.Box,{size:14}),s(a?"downloadCombinedGLB":"downloadGLB")]}),(0,ie.jsx)("p",{className:"mv-downloadMenuDescription",id:l,children:s("downloadGLBDescription")}),e.openConfiguredAR&&(0,ie.jsxs)("button",{type:"button",className:"mv-downloadMenuItem",onClick:e.openConfiguredAR,disabled:t||!n,"aria-haspopup":"dialog",children:[(0,ie.jsx)(Wt.Box,{size:14}),s("arConfiguredButton")]}),a&&(0,ie.jsxs)(ie.Fragment,{children:[(0,ie.jsxs)("button",{className:"mv-downloadMenuItem",onClick:v,disabled:d||t||!n,"aria-describedby":c,children:[(0,ie.jsx)(Wt.Box,{size:14}),s("downloadSeparateGLBs")]}),(0,ie.jsx)("p",{className:"mv-downloadMenuDescription",id:c,children:s("downloadSeparateGLBsDescription")})]}),(0,ie.jsx)("div",{className:"mv-downloadMenuDivider"}),r&&(0,ie.jsxs)(ie.Fragment,{children:[(0,ie.jsxs)("button",{className:"mv-downloadMenuItem",onClick:g,disabled:t||!n,children:[(0,ie.jsx)(Wt.Camera,{size:14}),s("downloadPNG")]}),(0,ie.jsx)("div",{className:"mv-downloadMenuDivider"})]}),(0,ie.jsxs)("button",{className:"mv-downloadMenuItem",onClick:b,disabled:t||!n,children:[(0,ie.jsx)(Wt.FileImage,{size:14}),s("downloadUVLayout")]}),(0,ie.jsx)("div",{className:"mv-downloadMenuDivider"}),(0,ie.jsxs)("label",{className:"mv-downloadMenuItem",children:[s("videoFormat"),(0,ie.jsxs)("select",{"aria-label":s("videoFormat"),value:y,onChange:x=>w(x.target.value),children:[(0,ie.jsx)("option",{value:"auto",children:s("auto")}),(0,ie.jsx)("option",{value:"webm",disabled:!Yi("webm"),children:"WebM"}),(0,ie.jsx)("option",{value:"mp4",disabled:!Yi("mp4"),children:"MP4"}),(0,ie.jsx)("option",{value:"gif",disabled:!Yi("gif"),children:"GIF"})]})]}),(0,ie.jsxs)("button",{className:"mv-downloadMenuItem",onClick:()=>{h("turntable")},disabled:t||!i||!Yi(y),children:[(0,ie.jsx)(Wt.Play,{size:14}),s("recordTurntableVideo")]}),o&&(0,ie.jsxs)("button",{className:"mv-downloadMenuItem",onClick:()=>{h("cinematic")},disabled:t||!i||!Yi(y),children:[(0,ie.jsx)(Wt.Play,{size:14}),s("recordCinematicVideo")]}),!Yi()&&!Yi("gif")&&(0,ie.jsx)("div",{className:"mv-downloadMenuNotice",role:"status",children:s("videoUnsupported")}),T&&(0,ie.jsx)("div",{className:"mv-downloadMenuNotice",role:"alert",children:s.message(T)}),u&&(0,ie.jsx)("div",{className:"mv-downloadMenuNotice",role:"status","aria-live":"polite",children:s.message(u)})]}),(0,ie.jsx)("button",{className:"mv-downloadButton",onClick:f,disabled:d||t||!n,title:s("downloadOptions"),children:d?(0,ie.jsxs)(ie.Fragment,{children:[(0,ie.jsx)("span",{className:"mv-downloadButton__spinner"}),s("exporting")]}):(0,ie.jsxs)(ie.Fragment,{children:[(0,ie.jsx)(Wt.Download,{size:15}),s("download")]})})]})}function IC({x:e,y:t,form:n,setForm:r,onOk:i,onCancel:o}){let a=_e();return(0,ie.jsxs)("div",{className:"ri-annotationPopup",style:{left:e,top:t},onPointerDown:s=>s.stopPropagation(),onClick:s=>s.stopPropagation(),children:[(0,ie.jsx)("input",{autoFocus:!0,className:"ri-annotationInput",placeholder:a("annotationTitlePlaceholder"),value:n.title,onChange:s=>r(l=>({...l,title:s.target.value})),onKeyDown:s=>{s.key==="Enter"&&i(),s.key==="Escape"&&o()}}),(0,ie.jsx)("textarea",{className:"ri-annotationTextarea",placeholder:a("description"),value:n.description,onChange:s=>r(l=>({...l,description:s.target.value})),onKeyDown:s=>{s.key==="Escape"&&o()},rows:5}),(0,ie.jsxs)("div",{className:"ri-annotationActions",children:[(0,ie.jsx)("button",{onClick:i,className:`ri-annotationOkBtn ${n.title.trim()?"":"disabled"}`,disabled:!n.title.trim(),children:a("ok")}),(0,ie.jsx)("button",{onClick:o,className:"ri-annotationCancelBtn",children:a("cancel")}),(0,ie.jsx)("div",{className:"ri-annotationIcons"})]})]})}var au=require("react");var kC=require("lucide-react");var ou=require("react/jsx-runtime");function BC({requiredTier:e,feature:t}){return(0,ou.jsxs)("div",{className:"bb-tierLock",children:[(0,ou.jsx)(kC.Lock,{size:16}),(0,ou.jsxs)("p",{className:"bb-tierLockMessage",children:[t," requires the ",q_[e]," plan or higher."]})]})}var Me=require("react/jsx-runtime");function NC({section:e,onChange:t}){let{isInsideEditor:n,tier:r}=Qo(),i=n&&!tm(r,"sectionPlanes"),[o,a]=(0,au.useState)(""),s=e.mode??"plane",l=e.planes??[],c=l.find(m=>m.id===e.activePlaneId)??l[0],d=s==="planes"?c:e,p=m=>t(s==="planes"?{planes:l.map(v=>v.id===c?.id?{...v,...m}:v)}:m),u={x:0,y:1,z:2},f=()=>globalThis.crypto?.randomUUID?.()??`section-${Date.now()}-${Math.random().toString(36).slice(2)}`;return(0,Me.jsxs)("div",{className:"ri-sectionControls",children:[i?(0,Me.jsx)(BC,{requiredTier:"starter",feature:"Multiple planes and section boxes"}):null,(0,Me.jsxs)("label",{children:["Cut type",(0,Me.jsxs)("select",{value:s,disabled:i,onChange:m=>{let v=m.target.value;t({mode:v,...v==="planes"&&!l.length?{planes:[{id:"cut-1",name:"Plane 1",axis:e.axis,position:e.position,flip:e.flip,enabled:!0,...e.normal?{normal:e.normal}:{}}],activePlaneId:"cut-1"}:{}})},children:[(0,Me.jsx)("option",{value:"plane",children:"Single plane"}),(0,Me.jsx)("option",{value:"planes",children:"Multiple planes"}),(0,Me.jsx)("option",{value:"box",children:"Section box"})]})]}),s==="planes"&&(0,Me.jsxs)(Me.Fragment,{children:[(0,Me.jsxs)("label",{children:["Active plane",(0,Me.jsx)("select",{value:c?.id??"",onChange:m=>t({activePlaneId:m.target.value}),children:l.map(m=>(0,Me.jsxs)("option",{value:m.id,children:[m.name,m.enabled?"":" (off)"]},m.id))})]}),(0,Me.jsxs)("div",{className:"ri-sectionControls__actions",children:[(0,Me.jsx)("button",{type:"button",disabled:l.length>=6,onClick:()=>{let m=f();t({planes:[...l,{id:m,name:`Plane ${l.length+1}`,axis:"x",position:.5,flip:!1,enabled:!0}],activePlaneId:m})},children:"Add plane"}),(0,Me.jsx)("button",{type:"button",disabled:!c,onClick:()=>t({planes:l.filter(m=>m.id!==c?.id),activePlaneId:l.find(m=>m.id!==c?.id)?.id}),children:"Remove plane"})]}),c&&(0,Me.jsxs)(Me.Fragment,{children:[(0,Me.jsxs)("label",{children:["Name",(0,Me.jsx)("input",{value:c.name,maxLength:200,onChange:m=>p({name:m.target.value.trim()||"Plane"})})]}),(0,Me.jsxs)("label",{className:"ri-sectionControls__check",children:[(0,Me.jsx)("input",{type:"checkbox",checked:c.enabled,onChange:m=>p({enabled:m.target.checked})}),"Enable this plane"]})]})]}),s==="box"?(0,Me.jsxs)(Me.Fragment,{children:[(0,Me.jsxs)("label",{children:["Draggable face",(0,Me.jsx)("select",{value:e.activePlaneId?.match(/^[xyz]-(min|max)$/)?e.activePlaneId:"x-min",onChange:m=>t({activePlaneId:m.target.value}),children:["x","y","z"].flatMap(m=>["min","max"].map(v=>(0,Me.jsxs)("option",{value:`${m}-${v}`,children:[m.toUpperCase()," ",v]},`${m}-${v}`)))})]}),(0,Me.jsx)("div",{className:"ri-sectionControls__bounds",children:["x","y","z"].flatMap(m=>["min","max"].map(v=>{let g=(e.box??{min:[0,0,0],max:[1,1,1]})[v][u[m]];return(0,Me.jsxs)("label",{children:[m.toUpperCase()," ",v,(0,Me.jsxs)("output",{children:[Math.round(g*100),"%"]}),(0,Me.jsx)("input",{"aria-label":`${m.toUpperCase()} ${v}`,type:"range",min:"0",max:"1",step:".001",value:g,onChange:b=>t(pm(e,`${m}-${v}`,Number(b.target.value)))})]},m+v)}))}),(0,Me.jsxs)("label",{className:"ri-sectionControls__check",children:[(0,Me.jsx)("input",{type:"checkbox",checked:!!e.invertBox,onChange:m=>t({invertBox:m.target.checked})}),"Keep outside box"]})]}):d&&(0,Me.jsxs)(Me.Fragment,{children:[(0,Me.jsxs)("label",{children:["Orientation",(0,Me.jsxs)("select",{value:d.normal?"custom":d.axis,onChange:m=>m.target.value==="custom"?p({normal:[1,1,0]}):p({axis:m.target.value,normal:void 0}),children:[(0,Me.jsx)("option",{value:"x",children:"X"}),(0,Me.jsx)("option",{value:"y",children:"Y"}),(0,Me.jsx)("option",{value:"z",children:"Z"}),(0,Me.jsx)("option",{value:"custom",children:"Angled plane"})]})]}),d.normal&&(0,Me.jsx)("div",{className:"ri-sectionControls__vector",children:[0,1,2].map(m=>(0,Me.jsxs)("label",{children:["Normal ","XYZ"[m],(0,Me.jsx)(AL,{label:`Normal ${"XYZ"[m]}`,value:d.normal[m],onChange:v=>{let g=[...d.normal];g[m]=v,Math.hypot(...g)>1e-8&&p({normal:g})}})]},m))}),(0,Me.jsxs)("label",{children:["Position",(0,Me.jsxs)("output",{children:[Math.round(d.position*100),"%"]}),(0,Me.jsx)("input",{type:"range",min:"0",max:"1",step:".001","aria-label":"Section position",value:d.position,onChange:m=>p({position:Number(m.target.value)})})]}),(0,Me.jsxs)("label",{className:"ri-sectionControls__check",children:[(0,Me.jsx)("input",{type:"checkbox",checked:d.flip,onChange:m=>p({flip:m.target.checked})}),"Keep the other side"]})]}),(0,Me.jsxs)("details",{children:[(0,Me.jsxs)("summary",{children:["Saved section presets (",e.presets?.length??0,")"]}),(0,Me.jsxs)("form",{onSubmit:m=>{m.preventDefault();let v=o.trim();!v||(e.presets?.length??0)>=32||(t({presets:[...e.presets??[],{id:f(),name:v,settings:ql(e)}]}),a(""))},children:[(0,Me.jsxs)("label",{children:["Preset name",(0,Me.jsx)("input",{value:o,maxLength:200,onChange:m=>a(m.target.value)})]}),(0,Me.jsx)("button",{disabled:!o.trim()||(e.presets?.length??0)>=32,children:"Save current section"})]}),e.presets?.map(m=>(0,Me.jsxs)("div",{className:"ri-sectionControls__actions",children:[(0,Me.jsx)("button",{type:"button",onClick:()=>t({...ql(m.settings),normal:m.settings.normal,planes:m.settings.planes,activePlaneId:m.settings.activePlaneId,box:m.settings.box,invertBox:m.settings.invertBox,mode:m.settings.mode}),children:m.name}),(0,Me.jsx)("button",{type:"button","aria-label":`Delete preset ${m.name}`,onClick:()=>t({presets:e.presets?.filter(v=>v.id!==m.id)}),children:"Delete"})]},m.id))]}),(0,Me.jsx)("p",{children:"Visual cuts of the active asset. Multiple planes keep their common region. Presets are saved with your scene."})]})}function AL({label:e,value:t,onChange:n}){let[r,i]=(0,au.useState)(String(t));return(0,au.useEffect)(()=>i(String(t)),[t]),(0,Me.jsx)("input",{type:"number",step:".1","aria-label":e,value:r,onChange:o=>{let a=o.target.value;i(a),a.trim()&&Number.isFinite(Number(a))&&n(Number(a))},onBlur:()=>i(String(t))})}var VC=require("react"),jC=require("qrcode.react"),qt=require("lucide-react");var Ie=require("react/jsx-runtime");function UC({top:e,configuredHandoff:t=!1,xrStore:n,arSupported:r,vrSupported:i,quickLookSupported:o,mobileHandoffUrl:a,mobileHandoffOpen:s,onQuickLook:l,onOpenMobileHandoff:c}){let d=_e();return(0,Ie.jsxs)("div",{className:"ri-xrTools",style:{top:`${e}px`},children:[!r&&o&&(0,Ie.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:l,title:d("viewThisModelInARWithAppleQuickLook"),children:[(0,Ie.jsx)(qt.Box,{size:16}),d("viewInAR")]}),(a||t&&!o)&&(0,Ie.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:c,title:d(t?"arConfiguredTitle":"openThisExperienceOnAPhoneForAR"),"aria-haspopup":"dialog","aria-expanded":s,children:[(0,Ie.jsx)(qt.QrCode,{size:16}),(0,Ie.jsx)("span",{children:d(t?"arConfiguredButton":"openOnPhone")})]}),n&&r&&(0,Ie.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>n.enterAR().catch(p=>{console.error("Failed to enter AR session:",p)}),title:d("viewThisModelInYourSpace"),children:[(0,Ie.jsx)(qt.Smartphone,{size:16}),(0,Ie.jsx)("span",{children:d("enterAR")})]}),n&&i&&(0,Ie.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>n.enterVR().catch(p=>{console.error("Failed to enter VR session:",p)}),title:d("viewThisModelInVR"),children:[(0,Ie.jsx)(qt.RectangleGoggles,{size:16}),(0,Ie.jsx)("span",{children:d("enterVR")})]})]})}function zC({url:e,onClose:t}){let n=_e();return(0,Ie.jsx)("div",{className:"ri-mobileHandoffBackdrop",onMouseDown:r=>{r.target===r.currentTarget&&t()},children:(0,Ie.jsxs)("section",{className:"ri-mobileHandoffDialog",role:"dialog","aria-modal":"true","aria-labelledby":"ri-mobileHandoffTitle",children:[(0,Ie.jsx)("button",{type:"button",className:"ri-mobileHandoffClose",onClick:t,"aria-label":n("closePhoneHandoff"),children:(0,Ie.jsx)(qt.X,{size:18})}),(0,Ie.jsx)(qt.Smartphone,{size:22,"aria-hidden":"true"}),(0,Ie.jsx)("h2",{id:"ri-mobileHandoffTitle",children:n("viewInAR")}),(0,Ie.jsx)("p",{children:n("arScanCode")}),(0,Ie.jsx)("div",{className:"ri-mobileHandoffQr",children:(0,Ie.jsx)(jC.QRCodeSVG,{value:e,size:208,level:"M",marginSize:4,title:n("qrCodeToOpenThisModelOnAPhone")})})]})})}function FC({top:e,active:t,onToggle:n}){let r=_e();return(0,Ie.jsx)("div",{className:"ri-uvCheckerTools",style:{top:`${e}px`},children:(0,Ie.jsx)("button",{type:"button",className:`ri-measureButton ${t?"ri-measureButton--active":""}`,onClick:n,title:r(t?"disableUVChecker":"enableUVChecker"),"aria-label":r(t?"disableUVChecker":"enableUVChecker"),"aria-pressed":t,children:(0,Ie.jsx)(qt.Grid3X3,{size:16})})})}function HC({top:e,open:t,factor:n,onToggleOpen:r,onFactorChange:i}){let o=_e();return(0,Ie.jsxs)("div",{className:"ri-explodeTools",style:{top:`${e}px`},children:[(0,Ie.jsx)("button",{type:"button",className:`ri-measureButton ${t||n>0?"ri-measureButton--active":""}`,onClick:r,title:o("explodedView"),"aria-pressed":t,children:(0,Ie.jsx)(qt.Expand,{size:16})}),t&&(0,Ie.jsx)("div",{className:"ri-explodeSlider",onPointerDown:a=>a.stopPropagation(),children:(0,Ie.jsx)("input",{type:"range",min:0,max:100,value:Math.round(n*100),onChange:a=>i(Number(a.target.value)/100),"aria-label":o("explodeAmount")})})]})}function GC({top:e,section:t,onChange:n}){let r=_e(),[i,o]=(0,VC.useState)(!1);return(0,Ie.jsxs)("div",{className:"ri-sectionTools",style:{top:`${e}px`},children:[(0,Ie.jsx)("button",{type:"button",className:`ri-measureButton ${t.enabled?"ri-measureButton--active":""}`,onClick:()=>n({enabled:!t.enabled}),title:t.enabled?r("removeSectionCut"):r("sectionCut"),"aria-label":r("sectionCut"),"aria-pressed":t.enabled,children:(0,Ie.jsx)(qt.Slice,{size:16})}),t.enabled&&(0,Ie.jsx)("button",{type:"button",className:"ri-measureButton","aria-label":"Section settings",title:"Section settings","aria-expanded":i,onClick:()=>o(a=>!a),children:(0,Ie.jsx)(qt.ChevronDown,{size:14})}),t.enabled&&i&&(0,Ie.jsx)("div",{className:"ri-sectionPanel",onPointerDown:a=>a.stopPropagation(),children:(0,Ie.jsx)(NC,{section:t,onChange:n})})]})}function WC({top:e,playing:t,disabled:n,onPlay:r,onPause:i,onStop:o}){let a=_e();return(0,Ie.jsxs)("div",{className:"ri-cinematicTools",style:{top:`${e}px`},children:[(0,Ie.jsx)("button",{type:"button",className:`ri-measureButton ${t?"ri-measureButton--active":""}`,disabled:n,onClick:t?i:r,title:a(t?"pauseCinematic":"playCinematic"),"aria-pressed":t,children:t?(0,Ie.jsx)(qt.Pause,{size:16}):(0,Ie.jsx)(qt.Play,{size:16})}),t&&(0,Ie.jsx)("button",{type:"button",className:"ri-measureButton ri-measureButton--stop",onClick:o,title:a("stopCinematicAndResetCamera"),children:(0,Ie.jsx)(qt.Square,{size:16})})]})}function qC({progress:e,onCancel:t}){let n=_e();return(0,Ie.jsx)("div",{className:"ri-recordingOverlay",onPointerDown:r=>r.stopPropagation(),children:(0,Ie.jsxs)("div",{className:"ri-isolationPill",role:"status","aria-live":"polite",children:[(0,Ie.jsx)("span",{className:"ri-isolationPill__label",children:n("recordingVideo",{progress:e})}),(0,Ie.jsx)("button",{type:"button",className:"ri-isolationPill__button",onClick:t,children:n("cancel")})]})})}function XC(e){let t={total:0,missing:0};return e.traverse(n=>{let r=n;!r.isMesh||!r.geometry||(t.total+=1,r.geometry.getAttribute("uv")||(t.missing+=1))}),t}var Rn=require("three");function $C(e,t,n,r,i){return!!(e?.usesSlots&&t.usesSlots&&e.url!==t.url&&n.includes(e.url)&&n.includes(t.url)&&r[e.url]&&r[t.url]&&i[e.url]&&i[t.url])}function YC(e,t,n){let r=t?.camera;if(!(r instanceof Rn.PerspectiveCamera))return null;let o=(e instanceof Rn.Box3?e:new Rn.Box3().setFromObject(e)).getSize(new Rn.Vector3).length();return!Number.isFinite(o)||o<=0?null:(r.near=o/100,r.far=o*100,r.updateProjectionMatrix(),t&&n===void 0&&(t.maxDistance=o*10),o)}function KC(e,t){let n=e.camera;if(!(n instanceof Rn.PerspectiveCamera)||!(t>0))return;let r=Math.min(Math.max(e.distance/200,t/1e5),t/100);Math.abs(r-n.near)<=n.near*.01||(n.near=r,n.updateProjectionMatrix())}var Pm={paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5},su={kind:"model"};function ZC(e,t){let n=new Rn.Box3().setFromObject(t);return n.isEmpty()?!1:(n.expandByScalar(n.getSize(new Rn.Vector3).length()*.05),n.containsPoint(e.getTarget(new Rn.Vector3)))}function QC(e,t){return e.getTarget(new Rn.Vector3).distanceTo(t)<=Math.max(e.distance,1)*.001}async function Vb(e,t,n=.6){let r=e.smoothTime;e.smoothTime=As(e,n);try{return await t()}finally{e.smoothTime=r}}async function JC(e,t,{flyIn:n,onStart:r,invalidate:i}){if(n){let o=(t instanceof Rn.Box3?t:new Rn.Box3().setFromObject(t)).getBoundingSphere(new Rn.Sphere),a=o.center.clone(),l=e.getPosition(new Rn.Vector3).clone().sub(e.getTarget(new Rn.Vector3));l.lengthSq()<1e-6&&l.set(0,0,1),l.normalize();let c=Math.max(o.radius*10,20),d=a.clone().add(l.multiplyScalar(c));await e.setLookAt(d.x,d.y,d.z,a.x,a.y,a.z,!1)}r(),await Vb(e,()=>e.fitToBox(t,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),await new Promise(o=>{let a=performance.now(),s=()=>{e.active===!1||performance.now()-a>8e3?(e.dispatchEvent({type:"update"}),i(),o()):(i(),setTimeout(s,100))};setTimeout(s,100)})}var eT=require("react");function tT({enabled:e,canvasAreaElement:t,fitAttemptedRef:n,fitInFlightRef:r,controlsRef:i,cameraFramingRef:o,nodeRefsMap:a,fitScene:s}){(0,eT.useEffect)(()=>{if(!e)return;let l=t;if(!l)return;let c=null,d=new ResizeObserver(()=>{!n.current||r.current||(c&&clearTimeout(c),c=setTimeout(()=>{let p=i.current,u=o.current;if(u.kind==="view"&&p){if(QC(p,u.target))return}else if(u.kind==="object"&&p){let f=a.current[u.key];if(f&&ZC(p,f)){p.fitToBox(f,!0,Pm).catch(()=>{});return}}s()},150))});return d.observe(l),()=>{d.disconnect(),c&&clearTimeout(c)}},[t,s,e])}var Q=require("react/jsx-runtime");function Am(e){let n=e.split(/[?#]/)[0].split("/");return(n[n.length-1]||e).replace(/\.[^./]+$/,"")||e}var EL=Object.freeze({}),RL=[],OL={};function jb(e){let t=s0(pw(e)),n=t.props,r=kd(n.activeModelId??Ae(n.models?.find(g=>g.url===n.modelUrl)??{url:n.modelUrl}),n.tilesetUrl),i=(0,I.useRef)(r);i.current=r;let o=(0,I.useRef)(null),a=(0,I.useRef)(null),s=(0,I.useCallback)(()=>{let g=a.current;g&&(o.current=g.snapshot())},[]),l=F0(s),c=ew(e),[d,p]=(0,I.useState)(null);(0,I.useEffect)(()=>()=>{d&&URL.revokeObjectURL(d)},[d]);let u=()=>{s();let g=i.current;a.current?.captureFrame().then(b=>{b&&(g===i.current?p(b):URL.revokeObjectURL(b))})};$i(()=>{o.current=null,p(null)},[r]);let f=(0,I.useRef)(null),m=Y0({loading:n.loading,reveal:n.reveal,rootRef:f,onPark:u}),{release:v}=l;return(0,I.useEffect)(()=>{m.live||v()},[m.live,v]),(0,Q.jsx)(sd,{labels:e.labels,children:(0,Q.jsxs)("div",{className:"ri-viewerSlot",ref:f,children:[t.error&&(0,Q.jsx)("div",{className:"ri-configuredARError",role:"alert",children:t.error}),m.live?(0,Q.jsx)(DL,{...n,contextRecovery:l,engagement:c,resumeRef:o,viewerHandleRef:a,offscreen:!m.visible,frame:d},l.generation):(0,Q.jsx)(Id,{className:"ri-viewer",background:ac(n.backgroundColor,n.sceneConfig),poster:d??n.poster,onReveal:m.awaitingReveal?m.reveal:void 0})]})})}function DL({labels:e,contextRecovery:t,engagement:n,modelUrl:r,tilesetUrl:i,tilesErrorTarget:o=8,tilesCacheSize:a=800,onObjectCatalog:s,modelFormat:l,licenseKey:c,licenseValidationUrl:d,hideLicenseCheckingOverlay:p=!1,objectBindings:u="auto",selectedObject:f,comparisonHighlights:m,multiSelectedKeys:v,selectedObjectRefs:g,selectedObjectOutlineColor:b,panelHoveredObject:h,onObjectBindingsChange:y,onObjectSelect:w,onObjectHover:T,onObjectDoubleClick:x,onDecalDoubleClick:D,onObjectContextMenu:A,decalMove:S,onObjectEditLeaseChange:M,onSelectionClear:_,onSceneLoaded:C,onModelLoaded:E,onAssetDiagnostics:L,onRuntimeStats:k,runtimeStatsIntervalMs:B,onLoadError:j,onProgress:R,onCameraControllerChange:O,cameraControllerType:N,onAction:H,onHiddenObjectsChange:Y,onCameraChange:ue,onViewerReady:be,onTextureUpload:X,onAnimationsReady:G,onSequencesReady:J,showSequenceControls:ee=!0,sequenceAutoPlay:fe=!0,onModelAnimationsReady:K,onAnnotationsChange:oe,activeAnnotation:ae,onActiveAnnotationChange:pe,camera:De,cameraLimits:te,backgroundColor:Fe,shadows:We=!0,showObjectBindingDataPanel:ge=!0,customObjectBindingDataPanel:Ce,customSceneObjectsPanel:Je,showSceneObjectsPanel:ve=!0,showDownloadButton:qe=!0,downloadFilename:he="model",showResetButton:de=!0,showFullscreenButton:ze=!1,showLoadingOverlay:Pe=!0,showMouseController:ft=!1,mouseControllerPosition:At="center-bottom",mouseControllerOpacity:se=1,moveSensitivity:Re=.08,zoomSensitivity:Ee=1,sceneConfig:nt,onSceneConfigChange:Qe,disableZoom:ut=!1,zoomOnSelected:Ke=!0,highlightOnHover:xe=!0,enableCameraControls:et=!0,onAutoFit:xt,refitOnResize:Dn=!0,renderMode:pi="demand",maxDpr:yn=2,preserveDrawingBuffer:ho=!1,webgpu:ir=!1,performanceProfile:Vn="auto",dracoDecoderPath:mi,ktx2TranscoderPath:go,meshopt:en=!0,showMeasureTools:nn=!1,showUvCheckerButton:or=!1,showExplodeControls:Ni=!1,showMaterialVariants:hu=!0,showObjectNavigator:Vi=!0,showSectionTools:ji=!1,isolation:sa,onIsolationChange:bo,showIsolateControls:us=!1,cinematic:Gr,measurementUnit:yo="m",measurements:vl,onMeasurementsChange:la,measurementSettings:gu,measurementModelId:Qm,onMeasurementSettingsChange:ca,enableXR:ds=!1,usdzUrl:U,arScaleMode:z="normalized",mobileHandoffUrl:F,arHandoff:ne,showAnnotationNavigation:Z=!0,showAnnotationOnHover:Se=!1,showAnnotationFilters:Te=!0,annotationCategories:Nt,onAnnotationCategoriesChange:wt,moveModeEnabled:Ot=!1,scaleModeEnabled:St=!1,objectTransformSpace:It="world",enableKeyboardNavigation:rn=!1,reducedMotion:Le="user",showViewGizmo:dn=!1,overlay:qn,unsafe_sceneChildren:ar,autoRotate:xl,autoRotateSpeed:Jn,onTexturePositioningChange:Ln,endTexturePositioningRef:vo,texturePositioning:Kb,extraModelUrls:VT,onExtraModelError:Zb,onExtraModelLoaded:bu,originalNodePoses:jT,models:Et,mergeModels:Jm,onMergeModelLoaded:Qb,onMergeModelError:Jb,poster:ey,resumeRef:ty,viewerHandleRef:ef,offscreen:UT,frame:ny,onModelChange:ry,activeModelId:zT,onActiveModelChange:tf}){let jn=_e(),Ge=zT??Ae(Et?.find(P=>P.url===r)??{url:r}),iy=Et?.find(P=>Ae(P)===Ge)?.visible!==!1,Wr=kd(Ge,i),[pn]=(0,I.useState)(()=>ty.current?.model===Wr?ty.current:null),xo=N1(Le);(0,I.useEffect)(()=>()=>n.interrupt(),[n]);let oy=(0,I.useRef)(n);oy.current=n;let{autoBindings:nf,controlled:ay,currentBindings:Ve,applyBindings:qr,bindingsForModel:ps,modelEdits:FT}=P0({modelUrl:r,activeModelId:Ge,tilesetUrl:i,models:Et,objectBindings:u,onChange:y,initialBindings:pn?.objectBindings,initialModelEdits:pn?.modelBindingEdits}),{isInsideEditor:yu,activeTab:rf,activeSubTab:of,openMeasurementsPanel:HT}=Qo(),GT=yu&&rf==="scene"&&of==="Lighting",vu=m1(c,d),[af,WT]=(0,I.useState)(()=>pn?.lightEdits??{}),[xu,sy]=(0,I.useState)(pn?.variantEdit),[wu,ly]=(0,I.useState)(pn?.sectionEdit),[Su,cy]=(0,I.useState)(()=>pn?.measurementEdits??{}),sf=JSON.stringify(nt?.measurements??null),uy=(0,I.useRef)(new Map);(0,I.useEffect)(()=>{let P=uy.current.get(Wr);uy.current.set(Wr,sf),P!==void 0&&P!==sf&&cy(V=>{let W={...V};return delete W[Wr],W})},[Wr,sf]);let Ze=(0,I.useMemo)(()=>{let P=$h(nt??dr,af);return xu!==void 0&&(P={...P,model:wg(P.model,xu)}),wu!==void 0&&(P={...P,section:{...Tr,...P.section,...wu}}),Su[Wr]&&(P={...P,measurements:Su[Wr]}),P},[nt,af,xu,wu,Su,Wr]),ms=(0,I.useRef)(Ze);ms.current=Ze;let wl=(0,I.useCallback)(P=>{let V=ms.current,W={settings:{},items:[],...V.measurements,...P};Qe?Qe({...V,measurements:W}):cy(le=>({...le,[Wr]:W}))},[Wr,Qe]),dy=(0,I.useCallback)(P=>{la?la(P):wl({items:P})},[la,wl]),py=(0,I.useCallback)(P=>{ca?ca(P):wl({settings:P})},[ca,wl]),Mu=vl??Ze.measurements?.items??RL,Sl=gu??Ze.measurements?.settings??OL,lf=Qm??Yl(Ge),Ml=Ia(Sl,yo),cf=(0,I.useMemo)(()=>Js(Ze.model),[Ze.model]);(0,I.useEffect)(()=>{n.setActiveVariants(cf)},[cf,n]);let qT=nt?Js(nt.model).join(`
3740
+ `}))}increaseSizeTo(e){this._target.setSize(Math.max(this._target.width,e),1)}readDataAsync(e){let{_renderer:t,_target:n}=this;return t.readRenderTargetPixelsAsync(n,0,0,e.length/4,1,e)}readData(e){let{_renderer:t,_target:n}=this;t.readRenderTargetPixels(n,0,0,e.length/4,1,e)}renderPixelToTarget(e,t,n){let{_renderer:r,_target:i}=this;Hc.min.copy(t),Hc.max.copy(t),Hc.max.x+=1,Hc.max.y+=1,r.initRenderTarget(i),r.copyTextureToTexture(e,i.texture,Hc,n,0)}},Yo=new class{constructor(){let e=null;Object.getOwnPropertyNames(d_.prototype).forEach(t=>{t!=="constructor"&&(this[t]=(...n)=>(e||(e=new d_),e[t](...n)))})}},p_=new re.Vector2,m_=new re.Vector2,f_=new re.Vector2;function IO(e,t){return t===0?e.getAttribute("uv"):e.getAttribute(`uv${t}`)}function C_(e,t,n=[,,,]){let r=3*t,i=3*t+1,o=3*t+2;return e.index&&(r=e.index.getX(r),i=e.index.getX(i),o=e.index.getX(o)),n[0]=r,n[1]=i,n[2]=o,n}function T_(e,t,n,r,i){let[o,a,s]=r,l=IO(e,t);p_.fromBufferAttribute(l,o),m_.fromBufferAttribute(l,a),f_.fromBufferAttribute(l,s),i.set(0,0,0).addScaledVector(p_,n.x).addScaledVector(m_,n.y).addScaledVector(f_,n.z)}function P_(e,t,n,r){let i=e.x-Math.floor(e.x),o=e.y-Math.floor(e.y),a=Math.floor(i*t%t),s=Math.floor(o*n%n);return r.set(a,s),r}var h_=new re.Vector2,g_=new re.Vector2,b_=new re.Vector2,kO=class extends Xp{constructor(e,t,n=null){super(e,t,n),this.channels=Tn(n,"channels",[0]),this.index=Tn(n,"index",null),this.texCoord=Tn(n,"texCoord",null),this.valueLength=parseInt(this.type.replace(/[^0-9]/g,""))||1}readDataFromBuffer(e,t,n=null){let r=this.type;if(r==="BOOLEAN"||r==="STRING")throw Error("PropertyTextureAccessor: BOOLEAN and STRING types not supported.");return __(e,t*this.valueLength,r,n)}},BO=class extends ob{constructor(...e){super(...e),this.isPropertyTextureAccessor=!0,this._asyncRead=!1,this._initProperties(kO)}getData(e,t,n,r={}){let i=this.properties;Wp(i,r);let o=Object.keys(i),a=o.map(s=>r[s]);return this.getPropertyValuesAtTexel(o,e,t,n,a),o.forEach((s,l)=>r[s]=a[l]),r}async getDataAsync(e,t,n,r={}){let i=this.properties;Wp(i,r);let o=Object.keys(i),a=o.map(s=>r[s]);return await this.getPropertyValuesAtTexelAsync(o,e,t,n,a),o.forEach((s,l)=>r[s]=a[l]),r}getPropertyValuesAtTexelAsync(...e){this._asyncRead=!0;let t=this.getPropertyValuesAtTexel(...e);return this._asyncRead=!1,t}getPropertyValuesAtTexel(e,t,n,r,i=[]){for(;i.length<e.length;)i.push(null);i.length=e.length,Yo.increaseSizeTo(i.length);let o=this.data,a=this.definition.properties,s=this.properties,l=C_(r,t);for(let p=0,u=e.length;p<u;p++){let f=e[p];if(!a[f])continue;let m=s[f],v=o[m.index];T_(r,m.texCoord,n,l,h_),P_(h_,v.image.width,v.image.height,g_),b_.set(p,0),Yo.renderPixelToTarget(v,g_,b_)}let c=new Uint8Array(e.length*4);if(this._asyncRead)return Yo.readDataAsync(c).then(()=>(d.call(this),i));return Yo.readData(c),d.call(this),i;function d(){for(let p=0,u=e.length;p<u;p++){let f=e[p],m=s[f],v=m.type;if(i[p]=ib(m,i[p]),!m)throw Error("PropertyTextureAccessor: Requested property does not exist.");if(!a[f]){i[p]=m.resolveDefault(i);continue}let g=m.valueLength*(m.count||1),b=m.channels.map(w=>c[4*p+w]),h=m.componentType,y=new(Wc(h,v))(g);if(new Uint8Array(y.buffer).set(b),m.array){let w=i[p];for(let T=0,x=w.length;T<x;T++)w[T]=m.readDataFromBuffer(y,T,w[T])}else i[p]=m.readDataFromBuffer(y,0,i[p]);i[p]=m.adjustValueScaleOffset(i[p]),i[p]=m.resolveEnumsToStrings(i[p]),i[p]=m.resolveNoData(i[p])}}}dispose(){this.data.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},tb=class{constructor(e,t,n,r=null,i=null){let{schema:o,propertyTables:a=[],propertyTextures:s=[],propertyAttributes:l=[]}=e,{enums:c,classes:d}=o,p=a.map(m=>new LO(m,d,c,n)),u=[],f=[];r&&(r.propertyTextures&&(u=r.propertyTextures.map(m=>new BO(s[m],d,c,t))),r.propertyAttributes&&(f=r.propertyAttributes.map(m=>new OO(l[m],d,c)))),this.schema=o,this.tableAccessors=p,this.textureAccessors=u,this.attributeAccessors=f,this.object=i,this.textures=t,this.nodeMetadata=r}getPropertyTableData(e,t,n=null){if(!Array.isArray(e))n||(n={}),n=this.tableAccessors[e].getData(t,n);else{n||(n=[]);let r=Math.min(e.length,t.length);n.length=r;for(let i=0;i<r;i++){let o=this.tableAccessors[e[i]];n[i]=o.getData(t[i],n[i])}}if(Array.isArray(e)!==Array.isArray(n)||Array.isArray(e)!==Array.isArray(t))throw Error("StructuralMetadata: Scalar and array inputs cannot be mixed.");return n}getPropertyTableInfo(e=null){if(e===null&&(e=this.tableAccessors.map((t,n)=>n)),Array.isArray(e))return e.map(t=>{let n=this.tableAccessors[t];return{name:n.name,className:n.definition.class}});{let t=this.tableAccessors[e];return{name:t.name,className:t.definition.class}}}getPropertyTextureData(e,t,n=[]){let r=this.textureAccessors;n.length=r.length;for(let i=0;i<r.length;i++)n[i]=r[i].getData(e,t,this.object.geometry,n[i]);return n}async getPropertyTextureDataAsync(e,t,n=[]){let r=this.textureAccessors;n.length=r.length;let i=[];for(let o=0;o<r.length;o++){let a=r[o].getDataAsync(e,t,this.object.geometry,n[o]).then(s=>{n[o]=s});i.push(a)}return await Promise.all(i),n}getPropertyTextureInfo(){return this.textureAccessors}getPropertyAttributeData(e,t=[]){let n=this.attributeAccessors;t.length=n.length;for(let r=0;r<n.length;r++)t[r]=n[r].getData(e,this.object.geometry,t[r]);return t}getPropertyAttributeInfo(){return this.attributeAccessors.map(e=>({name:e.name,className:e.definition.class}))}dispose(){this.textureAccessors.forEach(e=>e.dispose()),this.tableAccessors.forEach(e=>e.dispose()),this.attributeAccessors.forEach(e=>e.dispose())}},Gc="EXT_structural_metadata";function NO(e,t=[]){let n=e.json.textures?.length||0,r=Array(n).fill(null);return t.forEach(({properties:i})=>{for(let o in i){let{index:a}=i[o];r[a]===null&&(r[a]=e.loadTexture(a))}}),Promise.all(r)}function VO(e,t=[]){let n=e.json.bufferViews?.length||0,r=Array(n).fill(null);return t.forEach(({properties:i})=>{for(let o in i){let{values:a,arrayOffsets:s,stringOffsets:l}=i[o];r[a]===null&&(r[a]=e.getDependency("bufferView",a)),r[s]===null&&(r[s]=e.getDependency("bufferView",s)),r[l]===null&&(r[l]=e.getDependency("bufferView",l))}}),Promise.all(r)}var A_=class{constructor(e){this.parser=e,this.name=Gc}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(Gc))return;let r=null,i=t.json.extensions[Gc];if(i.schemaUri){let{manager:l,path:c,requestHeader:d,crossOrigin:p}=t.options,u=new URL(i.schemaUri,c).toString(),f=new re.FileLoader(l);f.setCrossOrigin(p),f.setResponseType("json"),f.setRequestHeader(d),r=f.loadAsync(u).then(m=>{i={...i,schema:m}})}let[o,a]=await Promise.all([NO(t,i.propertyTextures),VO(t,i.propertyTables),r]),s=new tb(i,o,a);e.userData.structuralMetadata=s,e.traverse(l=>{if(t.associations.has(l)){let{meshes:c,primitives:d}=t.associations.get(l),p=t.json.meshes[c]?.primitives[d];if(p&&p.extensions&&p.extensions[Gc]){let u=p.extensions[Gc];l.userData.structuralMetadata=new tb(i,o,a,u,l)}else l.userData.structuralMetadata=s}})}},y_=new re.Vector2,v_=new re.Vector2,x_=new re.Vector2;function jO(e){return e.x>e.y&&e.x>e.z?0:e.y>e.z?1:2}var E_=class{constructor(e,t,n){this.geometry=e,this.textures=t,this.data=n,this._asyncRead=!1,this.featureIds=n.featureIds.map(r=>{let{texture:i,...o}=r,a={label:null,propertyTable:null,nullFeatureId:null,...o};return i&&(a.texture={texCoord:0,channels:[0],...i}),a})}getTextures(){return this.textures}getFeatureInfo(){return this.featureIds}getFeaturesAsync(...e){this._asyncRead=!0;let t=this.getFeatures(...e);return this._asyncRead=!1,t}getFeatures(e,t){let{geometry:n,textures:r,featureIds:i}=this,o=Array(i.length).fill(null),a=i.length;Yo.increaseSizeTo(a);let s=C_(n,e),l=s[jO(t)];for(let p=0,u=i.length;p<u;p++){let f=i[p],m="nullFeatureId"in f?f.nullFeatureId:null;if("texture"in f){let v=r[f.texture.index];T_(n,f.texture.texCoord,t,s,y_),P_(y_,v.image.width,v.image.height,v_),x_.set(p,0),Yo.renderPixelToTarget(r[f.texture.index],v_,x_)}else if("attribute"in f){let v=n.getAttribute(`_feature_id_${f.attribute}`).getX(l);v!==m&&(o[p]=v)}else{let v=l;v!==m&&(o[p]=v)}}let c=new Uint8Array(a*4);if(this._asyncRead)return Yo.readDataAsync(c).then(()=>(d(),o));return Yo.readData(c),d(),o;function d(){let p=new Uint32Array(1);for(let u=0,f=i.length;u<f;u++){let m=i[u],v="nullFeatureId"in m?m.nullFeatureId:null;if("texture"in m){let{channels:g}=m.texture,b=g.map(y=>c[4*u+y]);new Uint8Array(p.buffer).set(b);let h=p[0];h!==v&&(o[u]=h)}}}}dispose(){this.textures.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},qp="EXT_mesh_features";function w_(e,t,n){e.traverse(r=>{if(t.associations.has(r)){let{meshes:i,primitives:o}=t.associations.get(r),a=t.json.meshes[i]?.primitives[o];a&&a.extensions&&a.extensions[qp]&&n(r,a.extensions[qp])}})}var R_=class{constructor(e){this.parser=e,this.name=qp}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(qp))return;let r=t.json.textures?.length||0,i=Array(r).fill(null);w_(e,t,(a,{featureIds:s})=>{s.forEach(l=>{if(l.texture&&i[l.texture.index]===null){let c=l.texture.index;i[c]=t.loadTexture(c)}})});let o=await Promise.all(i);w_(e,t,(a,s)=>{a.userData.meshFeatures=new E_(a.geometry,o,s)})}},O_=class{constructor(){this.name="CESIUM_RTC"}afterRoot(e){if(e.parser.json.extensions&&e.parser.json.extensions.CESIUM_RTC){let{center:t}=e.parser.json.extensions.CESIUM_RTC;t&&(e.scene.position.x+=t[0],e.scene.position.y+=t[1],e.scene.position.z+=t[2])}}},ab=class{constructor(e){e={metadata:!0,rtc:!0,plugins:[],dracoLoader:null,ktxLoader:null,meshoptDecoder:null,autoDispose:!0,...e},this.tiles=null,this.metadata=e.metadata,this.rtc=e.rtc,this.plugins=e.plugins,this.dracoLoader=e.dracoLoader,this.ktxLoader=e.ktxLoader,this.meshoptDecoder=e.meshoptDecoder,this._gltfRegex=/\.(gltf|glb)$/g,this._dracoRegex=/\.drc$/g,this._loader=null}init(e){let t=new S_.GLTFLoader(e.manager);this.dracoLoader&&(t.setDRACOLoader(this.dracoLoader),e.manager.addHandler(this._dracoRegex,this.dracoLoader)),this.ktxLoader&&t.setKTX2Loader(this.ktxLoader),this.meshoptDecoder&&t.setMeshoptDecoder(this.meshoptDecoder),this.rtc&&t.register(()=>new O_),this.metadata&&(t.register(()=>new A_),t.register(()=>new R_)),this.plugins.forEach(n=>t.register(n)),e.manager.addHandler(this._gltfRegex,t),this.tiles=e,this._loader=t}dispose(){this.tiles.manager.removeHandler(this._gltfRegex),this.tiles.manager.removeHandler(this._dracoRegex),this.autoDispose&&(this.ktxLoader.dispose(),this.dracoLoader.dispose())}};var{clamp:Tj}=re.MathUtils;var Pj=new nb.FullScreenQuad(new re.MeshBasicMaterial),UO=new re.DataTexture(new Uint8Array([255,255,255,255]),1,1);UO.needsUpdate=!0;var zO=0,FO=1,HO=2,GO=3,WO=4,qO=5,XO=6,$O=7,YO=8,KO=9,ZO=10,QO=11,Aj=Object.freeze({NONE:zO,SCREEN_ERROR:FO,GEOMETRIC_ERROR:HO,DISTANCE:GO,DEPTH:WO,RELATIVE_DEPTH:qO,IS_LEAF:XO,RANDOM_COLOR:$O,RANDOM_NODE_COLOR:YO,CUSTOM_COLOR:KO,LOAD_ORDER:ZO,INDEXED_COLOR:QO});var Ej=Math.PI/4,Rj=3/5;var $o={NONE:0,NOT_READY:1,NO_FIT:2,DEPTH:3,OCCUPANCY:4,SPACING:5,ANGLE:6,FACING:7};var Oj=new class{constructor(){this._cache={}}getColor(...e){let t=e.pop(),n=e.join("_"),{_cache:r}=this;return n in r||(t.setHSL(Math.random(),1,.5),r[n]=t.getHex()),t.set(r[n])}};var Dj={[$o.NONE]:16777215,[$o.NOT_READY]:7829367,[$o.NO_FIT]:2250239,[$o.DEPTH]:4473924,[$o.OCCUPANCY]:65535,[$o.SPACING]:16776960,[$o.ANGLE]:16711680,[$o.FACING]:16711935};var Lj=Math.PI/180;var Ij=Ja*Math.PI*2;var kj=Ja*Math.PI*2;var k_=require("three/examples/jsm/loaders/DRACOLoader.js"),B_=require("three/examples/jsm/loaders/KTX2Loader.js"),N_=require("three/examples/jsm/libs/meshopt_decoder.module.js"),vr=require("three");var $c=require("three");function D_(e){return!!e&&!e.isInterleavedBufferAttribute}function L_(e,t,n,r){for(let i=0;i<e.count;i+=1)for(let o=0;o<e.itemSize;o+=1)t.setComponent(i,o,$c.MathUtils.clamp(e.getComponent(i,o),n,r));return t}function JO(e){for(let t=0;t<e.count;t+=1)for(let n=0;n<e.itemSize;n+=1){let r=e.getComponent(t,n);if(!Number.isFinite(r)||r<0||r>1)return!1}return!0}var $p=class{constructor(){this.name="RI_VERTEX_COMPRESSION_PLUGIN";this.priority=-99}processTileModel(t){t.traverse(n=>{let r=n.geometry;if(!r)return;let i=r.attributes.normal;D_(i)&&!(i.array instanceof Int16Array)&&(r.attributes.normal=L_(i,new $c.BufferAttribute(new Int16Array(i.count*i.itemSize),i.itemSize,!0),-1,1));for(let o of["uv","uv1","uv2","uv3"]){let a=r.attributes[o];!D_(a)||a.array instanceof Uint16Array||!JO(a)||(r.attributes[o]=L_(a,new $c.BufferAttribute(new Uint16Array(a.count*a.itemSize),a.itemSize,!0),0,1))}})}};var Yc=require("react/jsx-runtime"),eD=0,I_=4,tD=6,nD=12,rD=4;function iD(e){try{let t=typeof window>"u"?new URL(e):new URL(e,window.location.href);return new URL("objects.json",t).toString()}catch{return null}}function sb({diagnosticsRef:e,url:t,rotation:n=[0,0,0],errorTarget:r=64,cacheSize:i=800,memoryBudgetMB:o=800,decoderConfig:a,objectBindings:s,itemMaterials:l,sceneConfig:c,selectedItem:d,panelHoveredItem:p,highlightOnHover:u=!0,onItemClick:f,onItemHover:m,onItemDoubleClick:v,onItemContextMenu:g,onObjectCatalog:b,onTilesetBounds:h,onModelLoaded:y,onLoadError:w,nodeRefsOut:T,onNodeRefsChange:x,materialRefsOut:D,explodeFactor:A=0,suspendBindingTransforms:S=!1}){let{camera:M,gl:_,invalidate:C}=(0,Yp.useThree)(),E=(0,$e.useRef)(null),[L,k]=(0,$e.useState)(null),B=(0,$e.useRef)({onItemClick:f,onItemHover:m,onItemDoubleClick:v,onObjectCatalog:b,onTilesetBounds:h,onModelLoaded:y,onLoadError:w,onNodeRefsChange:x});B.current={onItemClick:f,onItemHover:m,onItemDoubleClick:v,onObjectCatalog:b,onTilesetBounds:h,onModelLoaded:y,onLoadError:w,onNodeRefsChange:x};let j=(0,$e.useRef)(!0),[R,O]=(0,$e.useState)(null),N=(0,$e.useRef)(null);N.current=R;let H=(0,$e.useRef)([]),Y=(0,$e.useRef)(!1);(0,$e.useEffect)(()=>{let se=new _p;return O(se),()=>se.dispose()},[t]);let ue=(0,$e.useRef)(null),be=(0,$e.useRef)(0),X=(0,$e.useRef)(!1),G=o*1024*1024,J=(0,$e.useRef)(!1),ee=(0,$e.useRef)(Ag),fe=(0,$e.useRef)(null),K=(0,$e.useRef)(null),oe=(0,$e.useRef)(null);(0,$e.useEffect)(()=>()=>{oe.current!==null&&clearTimeout(oe.current)},[]);let ae=a?.dracoDecoderPath??bg,pe=a?.ktx2TranscoderPath??yg,De=a?.meshopt??!0,[te,Fe]=(0,$e.useState)(null);(0,$e.useEffect)(()=>{X.current=!1,J.current=!1;let se=new Jg(t);se.loadAncestors=!0;let Re=new Rp;Re.priorityCallback=se.downloadQueue.priorityCallback,Re.maxJobsPerOrigin=nD;let Ee=new Li;Ee.priorityCallback=se.parseQueue.priorityCallback,Ee.maxJobs=tD;let nt=new Li;nt.priorityCallback=se.processNodeQueue.priorityCallback,nt.maxJobs=se.processNodeQueue.maxJobs;let Qe=new Dc;Qe.unloadPriorityCallback=se.lruCache.unloadPriorityCallback,se.downloadQueue=Re,se.parseQueue=Ee,se.processNodeQueue=nt,se.lruCache=Qe;let ut=ae?new k_.DRACOLoader().setDecoderPath(ae).setWorkerLimit(rD):null,Ke=pe?new B_.KTX2Loader().setTranscoderPath(pe).detectSupport(_):null;return se.registerPlugin(new ab({dracoLoader:ut,ktxLoader:Ke,meshoptDecoder:De?N_.MeshoptDecoder:null,autoDispose:!1})),se.registerPlugin(new rb({disableMipmaps:!1,compressIndex:!0,compressNormals:!1,compressUvs:!1,compressPosition:!0})),se.registerPlugin(new $p),Fe(se),window.__riTiles=se,()=>{se.forEachLoadedModel(xe=>ic(xe)),se.dispose(),ut?.dispose(),Ke?.dispose(),Fe(xe=>xe===se?null:xe)}},[ae,_,pe,De,t]),(0,$e.useEffect)(()=>{te&&(ee.current=Ag,fe.current=null,te.errorTarget=r,te.lruCache.maxSize=i,te.lruCache.minSize=Math.max(1,Math.floor(i*.75)),te.lruCache.maxBytesSize=G,te.lruCache.minBytesSize=G*.75,C())},[i,r,C,G,te]);let We=(0,$e.useMemo)(()=>{let se=s??{};return{objectBindings:se,keyByModelObject:bM(se),itemMaterials:l,shadingMode:c?.model.shading??"lit",rendererMode:c?.model.renderer??"pbr",selectedKey:d??null,hoveredKey:yM(L,p),highlightOnHover:u,suspendTransforms:S,placementFrame:te?.group.matrixWorld,invalidate:C}},[L,u,C,l,s,p,c,d,S,te]),ge=(0,$e.useCallback)(()=>{if(!te)return;let se=qe.current,Re=Y.current?N.current?.nodesByBinding(se)??{}:{},Ee={};te.group.traverse(Ke=>{if(!Ke.isMesh)return;let xe=Tg(Ke);if(!xe)return;let et=se.keyByModelObject[xe]??xe;if(!se.objectBindings[et])return;Re[et]||(Re[et]=Ke);let xt=Ke.material;xt&&(Ee[et]=xt)});let nt=T?.current??{},Qe=Object.keys(nt),ut=Qe.length!==Object.keys(Re).length||Qe.some(Ke=>nt[Ke]!==Re[Ke]);T&&(T.current=Re),D&&(D.current=Ee),(ut||!T)&&B.current.onNodeRefsChange?.()},[D,T,te]),Ce=(0,$e.useCallback)(se=>Sp(se,We),[We]),Je=(0,$e.useCallback)(se=>xM(se,We),[We]),ve=(0,$e.useRef)(Je);ve.current=Je;let qe=(0,$e.useRef)(We);qe.current=We;let he=(0,$e.useCallback)(()=>{let se=ue.current,Re=be.current;return!se||Re<=0?qe.current:{...qe.current,explode:{factor:Re,centre:se.centre,radius:se.radius}}},[]);(0,$e.useEffect)(()=>{te&&(Je(te.group),j.current=!0,te.forEachLoadedModel(se=>{Je(se),il(se,he())}),C())},[Je,C,he,te]),(0,$e.useEffect)(()=>{let se=iD(t);if(!se)return;let Re=!1;return fetch(se).then(Ee=>Ee.ok?Ee.json():null).then(Ee=>{Re||!Ee?.objects||(H.current=Ee.objects,Y.current=Ee.bindingFrame==="gltf-identity-v2",Y.current&&N.current?.setCatalog(Ee.objects),j.current=!0,B.current.onObjectCatalog?.(Ee.objects),C())}).catch(()=>{}),()=>{Re=!0}},[t,C,R]),(0,$e.useEffect)(()=>{if(!te)return;let se=!1,Re=()=>C(),Ee=xe=>{xe.scene&&(xe.scene.traverse(et=>{let xt=et.material;for(let Dn of Array.isArray(xt)?xt:xt?[xt]:[])Dn.transparent&&Dn.side===vr.DoubleSide&&(Dn.forceSinglePass=!0)}),ve.current(xe.scene),il(xe.scene,he()),_d(xe.scene)),j.current=!0,se||(se=!0,B.current.onModelLoaded?.(te.group)),C()},nt=xe=>{B.current.onLoadError?.(xe.error)},Qe=xe=>{xe.scene&&(Pg(xe.scene),ic(xe.scene)),j.current=!0};te.setCamera(M),te.setResolutionFromRenderer(M,_),te.addEventListener("needs-update",Re),te.addEventListener("load-model",Ee),te.addEventListener("load-error",nt),te.addEventListener("dispose-model",Qe);let ut=()=>{j.current=!0,C()};te.addEventListener("tile-visibility-change",ut);let Ke=()=>{let xe=te.root;xe&&!xe.content?.uri&&xe.refine==="REPLACE"&&(xe.refine="ADD",C())};return te.addEventListener("load-root-tileset",Ke),C(),()=>{te.removeEventListener("needs-update",Re),te.removeEventListener("load-model",Ee),te.removeEventListener("load-error",nt),te.removeEventListener("dispose-model",Qe),te.removeEventListener("tile-visibility-change",ut),te.removeEventListener("load-root-tileset",Ke),Pg(te.group),te.deleteCamera(M),T&&(T.current={}),D&&(D.current={})}},[M,_,C,D,T,he,te]);let de=zd(se=>Ce(se)?.binding??null,g),ze=(0,$e.useCallback)(se=>{if(de.consumeClick())return;let Re=Ce(se.object);Re&&(se.stopPropagation(),B.current.onItemClick?.(Re.binding))},[Ce,de,f]),Pe=(0,$e.useCallback)(se=>{let Re=Ce(se.object);if(!Re)return;B.current.onItemDoubleClick?.(Re.binding,$s(se))&&se.stopPropagation()},[Ce]),ft=(0,$e.useCallback)(se=>{let Re=Ce(se.object),Ee=Re?.key??null;Ee!==E.current&&(E.current=Ee,k(Ee),B.current.onItemHover?.(Re?.binding??null))},[Ce]),At=(0,$e.useCallback)(()=>{E.current!==null&&(E.current=null,k(null),B.current.onItemHover?.(null))},[]);return(0,$e.useEffect)(()=>{C()},[C,te]),(0,Yp.useFrame)((se,Re)=>{if(!te)return;if(te.setResolutionFromRenderer(M,_),Y.current&&R){let en=R.sync(he(),d,S);R.updateBounds(te.root),S&&te.forEachLoadedModel(nn=>il(nn,en))}if(te.update(),!X.current){let en=new vr.Box3;if(te.getBoundingBox(en)){X.current=!0,te.group.updateMatrixWorld(),en.applyMatrix4(te.group.matrixWorld);let nn=en.getBoundingSphere(new vr.Sphere);ue.current={centre:nn.center.clone(),radius:en.getSize(new vr.Vector3).length()*.5},B.current.onTilesetBounds?.(en),C()}}j.current&&(j.current=!1,ge());let Ee=Math.min(Math.max(A,0),1),nt=be.current;Math.abs(nt-Ee)>1e-4?(be.current=vr.MathUtils.lerp(nt,Ee,1-Math.exp(-6*Re)),il(te.group,he()),C()):nt!==Ee&&(be.current=Ee,il(te.group,he()),C());let Qe=te,ut=te.lruCache,Ke=ut.isFull(),xe=ee.current,et=xe.loosened&&fe.current?fe.current:{bytes:ut.maxBytesSize,items:ut.maxSize},xt=0;for(let en of ut.usedSet??[])xt+=ut.bytesMap?.get(en)??0;let Dn=!1,pi=te;for(let en of pi.usedSet??[]){let nn=en.internal?.loadingState??I_;if(en.traversal?.used&&en.internal?.hasContent&&nn>=eD&&nn<I_){Dn=!0;break}}let yn=K.current??(K.current={world:new vr.Matrix4,projection:new vr.Matrix4}),ho=!yn.world.equals(M.matrixWorld)||!yn.projection.equals(M.projectionMatrix);ho&&(yn.world.copy(M.matrixWorld),yn.projection.copy(M.projectionMatrix));let ir={full:Ke,wanting:Dn,moved:ho,usage:Math.max(xt/Math.max(1,et.bytes),(ut.usedSet?.size??0)/Math.max(1,et.items)),now:performance.now()},Vn=EM(xe,ir);Vn!==xe&&(Vn.loosened&&(!xe.loosened||Vn.raisedAt!==xe.raisedAt)?(xe.loosened||(fe.current=et),ut.maxBytesSize=Math.max(et.bytes,ut.cachedBytes??0)*Eg,ut.maxSize=Math.ceil(Math.max(et.items,ut.itemSet?.size??0)*Eg)):!Vn.loosened&&xe.loosened&&fe.current&&(ut.maxBytesSize=fe.current.bytes,ut.maxSize=fe.current.items,fe.current=null),ee.current=Vn,te.errorTarget=r*Vn.factor,C()),!J.current&&Ke&&ir.wanting&&Vn.factor>=Ac&&(J.current=!0,console.warn("[react-immersive] The tile memory budget is full even at the coarsest level of detail, so the model may render incompletely. This usually means the model's textures are too large for streaming \u2014 re-process it with a smaller MAX_TEXTURE_SIZE, or raise memoryBudgetMB.")),e&&(e.current={cachedBytes:ut.cachedBytes??null,budgetBytes:et.bytes,cachedTiles:ut.itemSet?.size??null,downloading:Qe.stats?.downloading??0,parsing:Qe.stats?.parsing??0,cacheFull:Ke,detailFactor:Vn.factor,errorTarget:te.errorTarget});let mi=RM(Vn,ir);mi===0?C():mi!==null&&oe.current===null&&(oe.current=setTimeout(()=>{oe.current=null,C()},mi)),((Qe.stats?.downloading??0)>0||(Qe.stats?.parsing??0)>0||Qe.loadProgress!==void 0&&Qe.loadProgress<1&&!Ke)&&C()}),te?(0,Yc.jsxs)("group",{rotation:n,children:[R?(0,Yc.jsx)("primitive",{object:R.group}):null,(0,Yc.jsx)("primitive",{object:te.group,onClick:ze,onDoubleClick:Pe,onPointerDown:g?de.onPointerDown:void 0,onPointerMove:ft,onPointerOut:At})]}):null}var Kp=require("three");var oD=new Kp.Matrix4().makeRotationX(Math.PI/2);function V_(e){e.updateMatrixWorld(!0);let t=new Kp.Matrix4().copy(e.matrixWorld).invert().premultiply(oD),n=new Kp.Matrix4,r=[];for(let[i,o]of Object.entries(cr(e).nodesById)){let a=o;if(!a.isMesh||!a.geometry||!o.name)continue;let s=a.geometry;s.boundingBox||s.computeBoundingBox();let l=s.boundingBox.clone().applyMatrix4(n.multiplyMatrices(t,o.matrixWorld)),c=s.index?s.index.count:s.getAttribute("position")?.count??0;r.push({name:i,triangles:Math.floor(c/3),minimum:l.min.toArray(),maximum:l.max.toArray()})}return r.sort((i,o)=>i.name.localeCompare(o.name))}var Ue=require("react"),lb=require("@react-three/drei"),ts=require("@react-three/fiber"),ai=require("three");var fn=require("react/jsx-runtime"),aD=.02;function j_(e,t,n=!1,r){let i=(0,Ue.useRef)(null),[o,a]=(0,Ue.useState)(!0),s=(0,Ue.useRef)(!0),l=(0,Ue.useMemo)(()=>new ai.Vector3,[]),c=(0,ts.useThree)(g=>g.scene),d=(0,Ue.useRef)(null),p=(0,Ue.useRef)(null),u=(0,Ue.useMemo)(()=>new ai.Vector3(...e.anchorLocalPosition??e.localPosition??e.worldPosition),[e.anchorLocalPosition,e.localPosition,e.worldPosition]),f=(0,Ue.useMemo)(()=>new ai.Vector3,[]),m=(0,Ue.useMemo)(()=>new ai.Vector3,[]),v=(0,Ue.useMemo)(()=>new ai.Vector3,[]);return(0,Ue.useEffect)(()=>{d.current=null},[e.anchorNodeName]),(0,ts.useFrame)(({camera:g})=>{let b=i.current,h=b?.parent;if(!b||!h)return;let y=r?r.current:c;p.current!==y&&(p.current=y,d.current=null);let w=d.current;if(e.anchorNodeName&&(!w||!w.parent)&&(w=y?_r(y,e.anchorNodeName):null,d.current=w),w?(w.updateWorldMatrix(!0,!1),f.copy(u).applyMatrix4(w.matrixWorld)):(f.copy(u),h.localToWorld(f)),t){let x=t.current.get(e.id);x||(x=new ai.Vector3,t.current.set(e.id,x)),x.copy(f)}g.getWorldPosition(l);let T=!n||mx(e,l.distanceTo(f));T!==s.current&&(s.current=T,a(T)),v.copy(l).sub(f),v.lengthSq()>0?(v.normalize(),m.copy(f).addScaledVector(v,aD)):m.copy(f),h.worldToLocal(m),b.position.copy(m)}),{anchorRef:i,inRange:o}}function sD({anchorSceneRef:e,annotation:t,occluders:n,worldPositionsRef:r,onClick:i,onHover:o,showAnnotationOnHover:a}){let s=_e(),[l,c]=(0,Ue.useState)(!1),{anchorRef:d,inRange:p}=j_(t,r,!0,e),u=l||!p,[f,m]=(0,Ue.useState)(!1),[v,g]=(0,Ue.useState)(1),b=(0,Ue.useRef)(null),h=(0,Ue.useRef)(null),y=(0,Ue.useRef)(null);(0,Ue.useEffect)(()=>{p||(b.current&&clearTimeout(b.current),f&&(m(!1),o?.(null)))},[p,f,o]),(0,Ue.useEffect)(()=>()=>{b.current&&(clearTimeout(b.current),b.current=null),y.current&&(clearTimeout(y.current),y.current=null)},[]);let w=S=>{S.stopPropagation(),S.preventDefault(),b.current&&(clearTimeout(b.current),b.current=null),b.current=window.setTimeout(()=>{i?.(t),b.current=null},10)},T=S=>{S.stopPropagation(),m(!0),g(100),y.current&&(clearTimeout(y.current),y.current=null),o?.(t)},x=S=>{S.stopPropagation(),m(!1),g(1),y.current&&clearTimeout(y.current),y.current=window.setTimeout(()=>{o?.(null),a&&o?.(null),y.current=null},50)},D=S=>{S.stopPropagation();let M=S.currentTarget;M.dataset.pointerX=String(S.clientX),M.dataset.pointerY=String(S.clientY)},A=S=>{S.stopPropagation();let M=S.currentTarget,_=parseFloat(M.dataset.pointerX||"0"),C=parseFloat(M.dataset.pointerY||"0"),E=S.clientX-_,L=S.clientY-C;Math.sqrt(E*E+L*L)<10&&w(S)};return(0,fn.jsx)("group",{ref:d,children:(0,fn.jsx)(lb.Html,{center:!0,occlude:n,onOcclude:c,pointerEvents:u?"none":"auto",zIndexRange:[1,200],style:{pointerEvents:u?"none":"auto",zIndex:v},className:"annotation-html-wrapper",transparent:!0,children:(0,fn.jsx)("div",{ref:h,className:`ri-annotationMarker ${f?"ri-annotationMarker--hovered":""}`,title:t.title,style:{display:u?"none":"flex"},onPointerDown:D,onPointerUp:A,onPointerEnter:T,onPointerLeave:x,onDoubleClick:S=>{S.stopPropagation(),i?.(t)},role:"button",tabIndex:0,"aria-label":s("annotationMarker",{id:t.id,title:t.title}),onKeyDown:S=>{(S.key==="Enter"||S.key===" ")&&(S.preventDefault(),S.stopPropagation(),i?.(t))},children:(0,fn.jsx)("span",{className:"ri-annotationMarker-id",children:t.id})})})})}function lD({anchorSceneRef:e,annotation:t,occluders:n,popupRef:r,onClose:i,hideCloseButton:o=!1}){let a=_e(),[s,l]=(0,Ue.useState)(!1),{anchorRef:c}=j_(t,void 0,!1,e),d=(0,fn.jsxs)("div",{ref:r,className:"ri-viewAnnotationPopup",style:{display:s?"none":"block"},onPointerDown:p=>p.stopPropagation(),onClick:p=>p.stopPropagation(),children:[(0,fn.jsxs)("div",{className:"ri-viewAnnotationHeader",children:[(0,fn.jsx)("h4",{className:"ri-viewAnnotationTitle",children:t.title}),!o&&(0,fn.jsx)("button",{onClick:p=>{p.stopPropagation(),i?.()},className:"ri-viewAnnotationClose","aria-label":a("closeAnnotation"),children:"\xD7"})]}),t.category&&(0,fn.jsx)("span",{className:"ri-annotationCategory",children:t.category}),t.description&&(0,fn.jsx)("p",{className:"ri-viewAnnotationDescription",children:t.description}),t.images?.map((p,u)=>{let f=Sh(p.src);return f?(0,fn.jsx)("img",{className:"ri-annotationImage",src:f,alt:p.alt??"",loading:"lazy"},`${f}-${u}`):null}),t.links?.map((p,u)=>{let f=Sh(p.href);return f?(0,fn.jsx)("a",{className:"ri-annotationLink",href:f,target:"_blank",rel:"noopener noreferrer",children:p.label||a("learnMore")},`${f}-${u}`):null})]});return(0,fn.jsx)("group",{ref:c,children:(0,fn.jsx)(lb.Html,{occlude:n,onOcclude:l,pointerEvents:s?"none":"auto",zIndexRange:[1e3,2e3],style:{pointerEvents:s?"none":"auto",zIndex:1e3},transparent:!0,children:d})})}function Zp({anchorSceneRef:e,annotations:t,sceneConfig:n,activeAnnotation:r,popupRef:i,canvasRootRef:o,worldPositionsRef:a,modelLoaded:s,onAnnotationClick:l,onAnnotationHover:c,onCloseAnnotation:d,hideCloseButton:p=!1,showAnnotationOnHover:u=!1}){let f=(0,ts.useThree)(j=>j.invalidate),m=(0,ts.useThree)(j=>j.scene),[v,g]=(0,Ue.useState)(null),[b,h]=(0,Ue.useState)(!1),y=(0,Ue.useRef)(null);(0,Ue.useEffect)(()=>{y.current!==null&&r===null&&(g(null),h(!1)),y.current=r?.id??null},[r]);let w=(0,Ue.useRef)(null),T=(0,Ue.useRef)(null),x=(0,Ue.useRef)(null),D=(0,Ue.useMemo)(()=>{let j=[];return m.traverse(R=>{let O=R;O.isMesh&&!O.isSkinnedMesh&&j.push({current:R})}),j},[m,t,s]),A=(0,Ue.useCallback)(()=>{f();let j=()=>{f(),T.current=window.requestAnimationFrame(()=>{f(),T.current=null})};T.current=window.requestAnimationFrame(j)},[f]);(0,Ue.useEffect)(()=>{A()},[t,A]),(0,Ue.useEffect)(()=>{A()},[r,A]),(0,Ue.useEffect)(()=>()=>{T.current!==null&&window.cancelAnimationFrame(T.current),x.current&&clearTimeout(x.current)},[]);let S=r||v,M=(0,Ue.useMemo)(()=>S?t.find(j=>j.id===S.id)??null:null,[S,t]),_=(0,Ue.useCallback)(j=>{if(b&&v?.id===j.id){h(!1),g(null),d?.();return}h(!0),g(j),l?.(j)},[b,v,l,d]),C=(0,Ue.useCallback)(j=>{c?.(j),u&&!b&&(x.current&&(clearTimeout(x.current),x.current=null),j?g(j):x.current=window.setTimeout(()=>{g(null),d?.(),x.current=null},100))},[b,c,u,d]),E=(0,Ue.useCallback)(()=>{h(!1),g(null),d?.()},[d]),L=(0,Ue.useCallback)(j=>{let R=j.target;if(R.closest?.(".ri-annotationMarker")||R.closest?.(".ri-viewAnnotationPopup")||R.closest?.(".annotation-html-wrapper"))return;let O=o.current;O&&O.contains(R)&&(h(!1),g(null),d?.())},[o,d]),k=(0,Ue.useCallback)(j=>{j.key==="Escape"&&b&&(h(!1),g(null),d?.())},[b,d]);(0,Ue.useEffect)(()=>{let j=o.current;return j&&(j.addEventListener("click",L),j.addEventListener("pointerdown",L)),document.addEventListener("keydown",k),()=>{j&&(j.removeEventListener("click",L),j.removeEventListener("pointerdown",L)),document.removeEventListener("keydown",k)}},[o,L,k]);let B=(0,Ue.useMemo)(()=>(n?.model.rotation??[0,0,0]).map(j=>j*Math.PI/180),[n?.model.rotation]);return(0,Ue.useEffect)(()=>{f()},[f,B]),(0,ts.useFrame)((j,R)=>{if(!w.current)return;w.current.rotation.x=ai.MathUtils.lerp(w.current.rotation.x,B[0],1-Math.exp(-5*R)),w.current.rotation.y=ai.MathUtils.lerp(w.current.rotation.y,B[1],1-Math.exp(-5*R)),w.current.rotation.z=ai.MathUtils.lerp(w.current.rotation.z,B[2],1-Math.exp(-5*R));let{rotation:O}=w.current;Math.abs(O.x-B[0])+Math.abs(O.y-B[1])+Math.abs(O.z-B[2])>1e-4&&f()}),(0,fn.jsxs)("group",{ref:w,children:[t.map(j=>{let R=`${j.worldPosition.join(",")}-${j.title}-${j.id}`;return(0,fn.jsx)(sD,{anchorSceneRef:e,annotation:j,occluders:D,worldPositionsRef:a,onClick:_,onHover:C,showAnnotationOnHover:u},R)}),M?(0,fn.jsx)(lD,{anchorSceneRef:e,annotation:M,occluders:D,popupRef:i,onClose:E,hideCloseButton:p},`popup-${M.id}`):null]})}var so=require("react"),em=require("@react-three/drei");var Jp=require("react"),U_=require("@react-three/drei"),z_=require("@react-three/fiber"),si=require("three");var Qp=require("react/jsx-runtime");function Ko(e){return(0,z_.useThree)(n=>Ar(n.gl))?(0,Qp.jsx)(cD,{...e}):(0,Qp.jsx)(U_.Line,{points:e.points,color:e.color,lineWidth:e.lineWidth,dashed:e.dashed})}function cD({points:e,color:t,dashed:n=!1}){let r=(0,Jp.useMemo)(()=>{let i=new si.BufferGeometry().setFromPoints(e.map(s=>s instanceof si.Vector3?s:new si.Vector3(...s))),o=n?new si.LineDashedMaterial({color:t,dashSize:.02,gapSize:.02}):new si.LineBasicMaterial({color:t}),a=new si.Line(i,o);return n&&a.computeLineDistances(),a},[e,t,n]);return(0,Jp.useEffect)(()=>()=>{r.geometry.dispose(),r.material.dispose()},[r]),(0,Qp.jsx)("primitive",{object:r})}var un=require("three");var Be=require("react/jsx-runtime"),Zo="#22d3ee",uD="#facc15";function ns(e,t){let n=e<10?e.toFixed(3):e.toFixed(2);return t?`${n} ${t}`:n}function F_(e,t){return[(e[0]+t[0])/2,(e[1]+t[1])/2,(e[2]+t[2])/2]}function dD(e){let t=e.reduce((n,r)=>[n[0]+r[0],n[1]+r[1],n[2]+r[2]],[0,0,0]);return[t[0]/e.length,t[1]/e.length,t[2]/e.length]}function ao({position:e,children:t}){return(0,Be.jsx)(em.Html,{center:!0,position:e,zIndexRange:[20,0],style:{pointerEvents:"none"},children:(0,Be.jsx)("div",{className:"ri-measureLabel",children:t})})}function H_({positions:e,triangles:t}){let n=(0,so.useMemo)(()=>{let r=new un.Vector3(...e[0]),i=new un.BufferGeometry;return i.setAttribute("position",new un.Float32BufferAttribute(e.flatMap(o=>new un.Vector3(...o).sub(r).toArray()),3)),i.setIndex(t.flat()),i},[e,t]);return(0,so.useEffect)(()=>()=>n.dispose(),[n]),(0,Be.jsx)("mesh",{position:e[0],geometry:n,raycast:()=>{},renderOrder:100,children:(0,Be.jsx)("meshBasicMaterial",{color:Zo,side:un.DoubleSide,transparent:!0,opacity:.18,depthWrite:!1})})}var pD=[[0,1,2]];function mD({positions:e}){let t=Ns(e);if(t===null)return null;let n=new un.Vector3(...e[1]),r=new un.Vector3(...e[0]).sub(n),i=new un.Vector3(...e[2]).sub(n),o=Math.min(r.length(),i.length())*.22;r.normalize(),i.normalize();let a=r.clone().cross(i);a.lengthSq()<1e-12&&a.copy(r).cross(Math.abs(r.y)<.9?new un.Vector3(0,1,0):new un.Vector3(1,0,0)),a.normalize();let s=t*Math.PI/180,l=Array.from({length:33},(d,p)=>r.clone().applyAxisAngle(a,s*p/32).multiplyScalar(o).add(n).toArray()),c=r.clone().applyAxisAngle(a,s/2).multiplyScalar(o*1.4).add(n).toArray();return(0,Be.jsxs)(Be.Fragment,{children:[(0,Be.jsx)(Ko,{points:l,color:Zo,lineWidth:2}),(0,Be.jsxs)(ao,{position:c,children:[t.toFixed(2),"\xB0"]})]})}function fD({box:e,unit:t,scale:n}){let r=(0,so.useMemo)(()=>[(e.min[0]+e.max[0])/2,(e.min[1]+e.max[1])/2,(e.min[2]+e.max[2])/2],[e.min,e.max]),i=(0,so.useMemo)(()=>{let[l,c,d]=e.size,p=new un.BoxGeometry(l||1e-4,c||1e-4,d||1e-4),u=new un.EdgesGeometry(p);return p.dispose(),u},[e.size]);(0,so.useEffect)(()=>()=>{i.dispose()},[i]);let[o,a,s]=e.size;return(0,Be.jsxs)("group",{position:r,children:[(0,Be.jsx)("lineSegments",{geometry:i,children:(0,Be.jsx)("lineBasicMaterial",{color:uD})}),(0,Be.jsxs)(ao,{position:[0,-a/2,s/2],children:["W ",ns(o*n,t)]}),(0,Be.jsxs)(ao,{position:[-o/2,0,s/2],children:["H ",ns(a*n,t)]}),(0,Be.jsxs)(ao,{position:[o/2,-a/2,0],children:["D ",ns(s*n,t)]})]})}function ul({points:e,unit:t,scale:n=1,box:r,showDimensions:i,tool:o="distance",areaClosed:a=!1,snapPreview:s}){let l=(0,so.useMemo)(()=>e.map(p=>p.position),[e]),c=(0,so.useMemo)(()=>o==="area"&&a?Vs(l):null,[o,a,l]),d=o==="pointToPlane"&&e.length===2?pd(e[0],e[1].position):null;return(0,Be.jsxs)("group",{children:[o!=="wrap"&&o!=="wrapHorizontal"&&e.map(p=>(0,Be.jsx)(em.Html,{center:!0,position:p.position,zIndexRange:[15,0],style:{pointerEvents:"none"},children:(0,Be.jsx)("div",{className:`ri-measureDot${p.snapped?" ri-measureDot--snapped":""}`})},p.id)),o==="distance"&&e.slice(1).map((p,u)=>{let f=e[u].position,m=p.position,v=new un.Vector3(...f).distanceTo(new un.Vector3(...m));return(0,Be.jsxs)("group",{children:[(0,Be.jsx)(Ko,{points:[f,m],color:Zo,lineWidth:2}),(0,Be.jsx)(ao,{position:F_(f,m),children:ns(v*n,t)})]},`${e[u].id}-${p.id}`)}),(o==="angle"||o==="area")&&l.length>=2&&(0,Be.jsx)(Ko,{points:a?[...l,l[0]]:l,color:Zo,lineWidth:2}),o==="angle"&&(0,Be.jsx)(mD,{positions:l}),c&&!("error"in c)&&(0,Be.jsxs)(Be.Fragment,{children:[(0,Be.jsx)(H_,{positions:l,triangles:c.triangles}),(0,Be.jsx)(ao,{position:c.center,children:ns(c.area*n**2,t?`${t}\xB2`:"")})]}),o==="pointToPlane"&&e[0]?.faceVertices&&(0,Be.jsxs)(Be.Fragment,{children:[(0,Be.jsx)(H_,{positions:e[0].faceVertices,triangles:pD}),(0,Be.jsx)(Ko,{points:[...e[0].faceVertices,e[0].faceVertices[0]],color:Zo,lineWidth:1}),e.length===1&&(0,Be.jsx)(ao,{position:e[0].position,children:"Reference plane"})]}),d&&(0,Be.jsxs)(Be.Fragment,{children:[(0,Be.jsx)(Ko,{points:[e[1].position,d.projection],color:Zo,lineWidth:2}),(0,Be.jsx)(Ko,{points:[e[0].position,d.projection],color:Zo,lineWidth:1,dashed:!0}),(0,Be.jsx)(ao,{position:F_(e[1].position,d.projection),children:ns(d.distance*n,t)})]}),(o==="wrap"||o==="wrapHorizontal")&&l.length>=3&&(0,Be.jsxs)(Be.Fragment,{children:[(0,Be.jsx)(Ko,{points:[...l,l[0]],color:Zo,lineWidth:2}),(0,Be.jsx)(ao,{position:dD(l),children:ns(Xl(l,!0)*n,t)})]}),s&&(0,Be.jsxs)(em.Html,{center:!0,position:s.position,zIndexRange:[20,0],style:{pointerEvents:"none"},children:[(0,Be.jsx)("div",{className:"ri-measureSnapTarget"}),(0,Be.jsx)("div",{className:"ri-measureSnapLabel",children:s.snapped==="vertex"?"Vertex":"Edge"})]}),i&&r?(0,Be.jsx)(fD,{box:r,unit:t,scale:n}):null]})}var G_={free:0,starter:1,growth:2};function W_(e,t){return G_[e]>=G_[t]}var q_={free:"Free",starter:"Starter",growth:"Growth"};var hD={advancedMaterials:"starter",materialVariants:"starter",customEnvironment:"starter",backgroundImages:"starter",sectionPlanes:"starter",calibratedMeasurements:"starter",animationConfig:"starter",sceneBundle:"starter",cinematic:"starter",rules:"growth",postLighting:"starter",postSelection:"growth"};function tm(e,t){return W_(e,hD[t])}var lo=require("lucide-react"),ki=require("react"),X_=require("react-dom");var nm=require("react"),gD=(0,nm.createContext)({isInsideEditor:!1,activeTab:"object",activeSubTab:"General",tier:"free"});var Qo=()=>(0,nm.useContext)(gD);var me=require("react/jsx-runtime");function cb(e){let t=_e(),{isInsideEditor:n,measurementPanelTarget:r,tier:i}=Qo(),o=n&&!tm(i,"calibratedMeasurements"),a=(0,ki.useRef)(null),[s,l]=(0,ki.useState)(!1),[c,d]=(0,ki.useState)(""),[p,u]=(0,ki.useState)("1"),[f,m]=(0,ki.useState)("m"),v=(0,ki.useRef)(null),g={ready:"measurementReady",approximate:"measurementApproximate","model-changed":"measurementModelChanged","missing-object":"measurementObjectMissing","geometry-changed":"measurementGeometryChanged","pose-changed":"measurementPoseChanged","hidden-object":"measurementObjectHidden",invalid:"measurementInvalid"};(0,ki.useLayoutEffect)(()=>{if(!a.current)return;let x=()=>e.onHeight(a.current?.getBoundingClientRect().height??34),D=new ResizeObserver(x);return D.observe(a.current),x(),()=>D.disconnect()},[e.onHeight]);let{tool:b,pointCount:h,areaClosed:y}=e,w=b==="angle"?[t("angleFirstArmHint"),t("angleVertexHint"),t("angleSecondArmHint"),t("angleNewHint")][h]:b==="area"?t(y?"areaNewHint":"areaCornersHint"):b==="pointToPlane"?[t("pointToPlaneFaceHint"),t("pointToPlanePointHint"),t("pointToPlaneNewHint")][h]:t(b==="wrap"?"wrapHint":b==="wrapHorizontal"?"wrapHorizontalHint":"distanceHint"),T=(0,me.jsxs)("div",{className:`ri-measureLibrary${n?" ri-measureLibrary--sidebar":""}`,onClick:x=>x.stopPropagation(),onPointerDown:x=>x.stopPropagation(),onPointerMove:x=>x.stopPropagation(),onKeyDown:x=>x.stopPropagation(),children:[n&&(0,me.jsxs)("button",{type:"button",className:`ri-measureStart${e.active?" ri-measureStart--active":""}`,disabled:e.disabled,onClick:e.onToggle,"aria-pressed":e.active,children:[(0,me.jsx)(lo.PencilRuler,{size:15}),e.active?t("stopMeasuring"):t("startMeasuring")]}),(0,me.jsxs)("div",{className:"ri-measureSettingsRow ri-measureSettingsRow--units",children:[(0,me.jsxs)("label",{children:[t("measurementSourceUnit")," ",(0,me.jsx)("select",{"aria-label":t("measurementSourceUnit"),className:"ri-measureSelect",disabled:e.disabled||e.settingsReadOnly,value:e.settings.sourceUnit??"m",onChange:x=>e.onSettings({...e.settings,sourceUnit:x.target.value,metersPerUnit:void 0}),children:La.map(x=>(0,me.jsx)("option",{value:x,children:x},x))})]}),(0,me.jsxs)("label",{children:[t("measurementDisplayUnit")," ",(0,me.jsxs)("select",{"aria-label":t("measurementDisplayUnit"),className:"ri-measureSelect",disabled:e.disabled||e.settingsReadOnly,value:e.displayUnit,onChange:x=>e.onSettings({...e.settings,displayUnit:x.target.value}),children:[!$l(e.displayUnit)&&(0,me.jsx)("option",{value:e.displayUnit,children:e.displayUnit}),La.map(x=>(0,me.jsx)("option",{value:x,children:x},x))]})]})]}),e.active&&(0,me.jsxs)(me.Fragment,{children:[(0,me.jsxs)("div",{className:"ri-measureSettingsRow ri-measureSettingsRow--save",children:[(0,me.jsxs)("label",{children:[t("measurementName")," ",(0,me.jsx)("input",{"aria-label":t("measurementName"),className:"ri-measureInput",value:c,onChange:x=>d(x.target.value),placeholder:t("measurementNamePlaceholder")})]}),(0,me.jsx)("button",{type:"button",className:"ri-measureFinish",disabled:e.disabled||e.readOnly||!e.canSave||o,title:o?"Saving measurements requires the Starter plan or higher.":void 0,onClick:()=>{e.onSave(c),d(""),l(!0)},children:t("saveMeasurement")})]}),(0,me.jsxs)("div",{className:"ri-measureSettingsRow ri-measureSettingsRow--calibrate",children:[(0,me.jsxs)("label",{children:[t("knownMeasurementDistance")," ",(0,me.jsx)("input",{"aria-label":t("knownMeasurementDistance"),type:"number",min:"0",step:"any",className:"ri-measureInput",value:p,onChange:x=>u(x.target.value)})]}),(0,me.jsx)("select",{"aria-label":t("calibrationUnit"),className:"ri-measureSelect",value:f,onChange:x=>m(x.target.value),children:La.map(x=>(0,me.jsx)("option",{children:x},x))}),(0,me.jsx)("button",{type:"button",className:"ri-measureSelect",disabled:e.disabled||e.settingsReadOnly||!e.canCalibrate||o,title:o?"Calibration requires the Starter plan or higher.":void 0,onClick:()=>e.onCalibrate(Number(p),f),children:t("calibrateMeasurement")})]}),(0,me.jsx)("p",{className:"ri-measureLibraryHint",children:t("measurementCalibrationHint")})]}),e.settings.metersPerUnit!==void 0&&(0,me.jsxs)("div",{className:"ri-measureSettingsRow ri-measureSettingsRow--calibration",children:[(0,me.jsx)("span",{children:t("measurementCalibratedScale",{scale:e.settings.metersPerUnit.toPrecision(6)})}),(0,me.jsx)("button",{type:"button",className:"ri-measureSelect",disabled:e.disabled||e.settingsReadOnly,onClick:()=>e.onSettings({...e.settings,metersPerUnit:void 0}),children:t("resetMeasurementCalibration")})]}),e.items.length>0&&(0,me.jsx)("div",{className:"ri-savedMeasurementList",children:e.items.map(x=>{let D=e.results.find(A=>A.id===x.id);return(0,me.jsxs)("div",{className:"ri-savedMeasurementRow",children:[(0,me.jsx)("input",{type:"checkbox","aria-label":t("showSavedMeasurement",{name:x.name}),checked:x.visible!==!1,disabled:e.disabled||e.readOnly,onChange:A=>e.onItems(e.items.map(S=>S.id===x.id?{...S,visible:A.target.checked}:S))}),(0,me.jsx)("input",{"aria-label":t("renameSavedMeasurement",{name:x.name}),className:"ri-measureInput",defaultValue:x.name,disabled:e.disabled||e.readOnly,onBlur:A=>{let S=A.target.value.trim()||x.name;S!==x.name?e.onItems(e.items.map(M=>M.id===x.id?{...M,name:S}:M)):A.target.value=S}},`${x.id}:${x.name}`),(0,me.jsxs)("span",{className:"ri-savedMeasurementValue",children:[D?.value!=null?`${D.value.toFixed(3)} ${D.unit}`:"\u2014",(0,me.jsx)("small",{children:t(D?g[D.status]:"measurementWaiting")})]}),(0,me.jsx)("button",{type:"button",className:"ri-measureSelect","aria-label":t("deleteSavedMeasurement",{name:x.name}),disabled:e.disabled||e.readOnly,onClick:()=>e.onItems(e.items.filter(A=>A.id!==x.id)),children:"\xD7"})]},x.id)})}),!e.items.length&&(0,me.jsx)("p",{className:"ri-measureEmpty",children:t("noSavedMeasurements")}),(0,me.jsxs)("details",{className:"ri-measureTransfer",children:[(0,me.jsx)("summary",{children:t("measurementFiles")}),(0,me.jsxs)("div",{className:"ri-measureSettingsRow",children:[(0,me.jsx)("button",{type:"button",className:"ri-measureSelect",disabled:e.disabled||!e.items.length,onClick:e.onExportJson,children:t("exportMeasurementJson")}),(0,me.jsx)("button",{type:"button",className:"ri-measureSelect",disabled:e.disabled||!e.items.length,onClick:e.onExportCsv,children:t("exportMeasurementCsv")}),(0,me.jsx)("button",{type:"button",className:"ri-measureSelect",disabled:e.disabled||e.readOnly||e.settingsReadOnly,onClick:()=>v.current?.click(),children:t("importMeasurementJson")}),(0,me.jsx)("input",{ref:v,type:"file",accept:".json,application/json",hidden:!0,onChange:x=>{let D=x.target.files?.[0];if(x.target.value="",!!D){if(D.size>5*1024*1024){e.onImport("{}");return}D.text().then(e.onImport).catch(()=>e.onImport("{}"))}}})]})]}),n&&e.error&&(0,me.jsx)("p",{className:"ri-measureLibraryError",role:"status",children:t.message(e.error)})]});return(0,me.jsxs)(me.Fragment,{children:[(0,me.jsxs)("div",{ref:a,className:"ri-measureTools",style:{top:e.top},children:[(0,me.jsxs)("div",{className:"ri-measureToolbarRow",children:[(0,me.jsx)("button",{type:"button",className:`ri-measureButton ${e.active?"ri-measureButton--active":""}`,disabled:e.disabled,onClick:e.onToggle,title:e.active?t("stopMeasuring"):t("startMeasuring"),"aria-pressed":e.active,children:(0,me.jsx)(lo.PencilRuler,{size:16})}),(0,me.jsx)("button",{type:"button",className:`ri-measureButton ${e.showDimensions?"ri-measureButton--active":""}`,disabled:e.disabled,onClick:e.onDimensions,title:t("toggleBoundingDimensions"),"aria-pressed":e.showDimensions,children:(0,me.jsx)(lo.RulerDimensionLine,{size:16})}),!n&&(0,me.jsx)("button",{type:"button",className:"ri-measureSelect","aria-expanded":s,onClick:()=>l(!s),children:t("savedMeasurements",{count:e.items.length})}),e.active&&(0,me.jsxs)(me.Fragment,{children:[(0,me.jsxs)("select",{className:"ri-measureSelect","aria-label":t("measurementTool"),value:b,disabled:e.disabled,onChange:x=>e.onTool(x.target.value),children:[(0,me.jsx)("option",{value:"distance",children:t("distance")}),(0,me.jsx)("option",{value:"angle",children:t("angle")}),(0,me.jsx)("option",{value:"area",children:t("area")}),(0,me.jsx)("option",{value:"pointToPlane",children:t("pointToPlane")}),(0,me.jsx)("option",{value:"wrap",children:t("wrap")}),(0,me.jsx)("option",{value:"wrapHorizontal",children:t("wrapHorizontal")})]}),(0,me.jsxs)("select",{className:"ri-measureSelect","aria-label":t("measurementSnapping"),value:e.snap,disabled:e.disabled,onChange:x=>e.onSnap(x.target.value),children:[(0,me.jsx)("option",{value:"none",children:t("noSnapping")}),(0,me.jsx)("option",{value:"auto",children:t("snapAuto")}),(0,me.jsx)("option",{value:"vertex",children:t("snapVertex")}),(0,me.jsx)("option",{value:"edge",children:t("snapEdge")})]})]}),h>0&&(0,me.jsxs)(me.Fragment,{children:[(0,me.jsx)("button",{type:"button",className:"ri-measureButton",onClick:e.onUndo,disabled:e.disabled,title:t("undoMeasurementPoint"),children:(0,me.jsx)(lo.Undo2,{size:16})}),(0,me.jsx)("button",{type:"button",className:"ri-measureButton",onClick:e.onClear,disabled:e.disabled,title:t("clearMeasurements"),children:(0,me.jsx)(lo.Eraser,{size:16})})]}),e.active&&b==="area"&&!y&&(0,me.jsx)("button",{type:"button",className:"ri-measureFinish",onClick:e.onFinishArea,disabled:e.disabled||h<3,children:t("finishArea")})]}),!n&&(e.active||s)&&T,(e.active||!n&&e.error)&&(0,me.jsx)("div",{className:`ri-measureHint${e.error?" ri-measureHint--error":""}`,role:"status",children:e.error?t.message(e.error):w})]}),n&&r&&(0,X_.createPortal)(T,r)]})}var Jo=require("react"),$_=require("@react-three/fiber");var Kc=require("react/jsx-runtime");function rm({items:e,sceneRef:t,modelId:n,tilesetUrl:r,settings:i,legacyUnit:o,revision:a,onResults:s}){let[l,c]=(0,Jo.useState)([]),d=(0,Jo.useRef)(""),p=(0,Jo.useCallback)(()=>{let m=e.length&&t.current?mc(t.current):void 0,v=e.map(h=>Yd(h,t.current,n,r,m)),g=v.map(({measurement:h,points:y,status:w})=>Ba(h,i,o,y,w)),b=JSON.stringify([v.map(({measurement:h,points:y,status:w})=>[h.id,h.tool,h.visible,w,y.map(T=>[T.position,T.normal,T.faceVertices])]),g]);d.current!==b&&(d.current=b,c(v),s(g))},[e,t,n,r,i,o,s]);(0,Jo.useEffect)(()=>{p()},[p,a]),(0,$_.useFrame)(()=>{e.length&&p()});let{factor:u,displayUnit:f}=Ia(i,o);return(0,Kc.jsx)(Kc.Fragment,{children:l.filter(({measurement:m,status:v})=>m.visible!==!1&&(v==="ready"||v==="approximate")).map(({measurement:m,points:v})=>(0,Kc.jsx)(ul,{points:v,unit:f,scale:u,box:null,showDimensions:!1,tool:m.tool,areaClosed:m.tool==="area"},m.id))})}var ht=require("react"),rs=require("@react-three/xr"),Q_=require("@react-three/fiber"),Zc=require("three"),li=require("react/jsx-runtime"),bD=1,Y_=1,yD=.1,vD=10;function xD(e,t){let[n,r,i]=e.size,o=(e.min[0]+e.max[0])/2,a=(e.min[2]+e.max[2])/2,s=Math.max(n,r,i)||1;return{scale:t==="real-world"?1:bD/s,offset:[-o,-e.min[1],-a]}}function K_(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.hypot(t,n)}function Z_(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.atan2(n,t)}var wD=(0,ht.forwardRef)(function({box:t,scaleMode:n,children:r,onARStateChange:i},o){let a=(0,ht.useRef)(null),s=(0,ht.useRef)(null),l=(0,ht.useRef)(null),c=(0,rs.useXR)(B=>B.session!=null),d=(0,rs.useXR)(B=>B.mode==="immersive-ar"),p=(0,ht.useMemo)(()=>t?xD(t,n):null,[t,n]),u=(0,ht.useRef)(new Zc.Vector3(0,0,-Y_)),f=(0,ht.useRef)(1),m=(0,ht.useRef)(0),v=(0,ht.useRef)(!0),g=(0,ht.useRef)(!1),b=(0,ht.useMemo)(()=>new Zc.Matrix4,[]),h=(0,ht.useRef)(new Zc.Vector3),y=(0,ht.useRef)(!1),w=(0,ht.useRef)(null),T=(0,ht.useRef)(!1),x=(0,ht.useRef)(0),D=(0,ht.useRef)(0),A=(0,ht.useRef)(1),S=(0,ht.useRef)(0),M=(0,ht.useCallback)(()=>{if(!i||!d)return;let B={canPlace:y.current,isPlacementMode:v.current,isModelPlaced:g.current},j=w.current;j&&j.canPlace===B.canPlace&&j.isPlacementMode===B.isPlacementMode&&j.isModelPlaced===B.isModelPlaced||(w.current=B,i(B))},[d,i]),_=(0,ht.useCallback)(()=>!d||!y.current?!1:(u.current.copy(h.current),g.current=!0,v.current=!1,M(),!0),[M,d]),C=(0,ht.useCallback)(()=>{d&&(v.current=!0,M())},[M,d]),E=(0,ht.useCallback)(()=>{let B=_();return!B&&d&&(v.current=!1,M()),B},[M,d,_]),L=(0,ht.useCallback)(()=>{d&&(v.current=!1,M())},[M,d]);(0,ht.useImperativeHandle)(o,()=>({placeCurrent:_,startPlacementMode:C,finishPlacementMode:E,cancelPlacementMode:L}),[L,E,_,C]),(0,ht.useEffect)(()=>{if(!c){u.current.set(0,0,-Y_),f.current=1,m.current=0,y.current=!1,T.current=!1,v.current=!0,g.current=!1,w.current=null;return}d&&(y.current=!1,T.current=!1,v.current=!0,g.current=!1,w.current=null,M())},[M,c,d]),(0,rs.useXRHitTest)((B,j)=>{if(!d||B.length===0){y.current&&(y.current=!1,M());return}j(b,B[0])&&(h.current.setFromMatrixPosition(b),y.current||(y.current=!0,M()))},"viewer"),(0,rs.useXRInputSourceEvent)("all","select",()=>{!d||T.current||!v.current||_()},[d,_]),(0,ht.useEffect)(()=>{if(!d)return;let B=O=>{O.touches.length===2&&(T.current=!0,x.current=K_(O.touches),D.current=Z_(O.touches),A.current=f.current,S.current=m.current)},j=O=>{if(!T.current||O.touches.length!==2)return;O.preventDefault();let N=K_(O.touches);if(x.current>0){let Y=N/x.current;f.current=Math.min(vD,Math.max(yD,A.current*Y))}let H=Z_(O.touches);m.current=S.current-(H-D.current)},R=O=>{O.touches.length===0&&requestAnimationFrame(()=>{T.current=!1})};return window.addEventListener("touchstart",B),window.addEventListener("touchmove",j,{passive:!1}),window.addEventListener("touchend",R),window.addEventListener("touchcancel",R),()=>{window.removeEventListener("touchstart",B),window.removeEventListener("touchmove",j),window.removeEventListener("touchend",R),window.removeEventListener("touchcancel",R)}},[d]),(0,Q_.useFrame)(()=>{let B=a.current,j=s.current;if(!B||!j)return;!c||!p?(B.visible=!0,B.position.set(0,0,0),B.rotation.set(0,0,0),j.scale.setScalar(1)):(B.visible=!d||g.current,B.position.copy(u.current),B.rotation.set(0,m.current,0),j.scale.setScalar(p.scale*f.current));let R=l.current;if(R){let O=d&&v.current&&y.current;R.visible=O,O&&R.position.copy(h.current)}});let k=c&&p?p.offset:[0,0,0];return(0,li.jsxs)(li.Fragment,{children:[(0,li.jsxs)("mesh",{ref:l,visible:!1,rotation:[-Math.PI/2,0,0],children:[(0,li.jsx)("ringGeometry",{args:[.05,.07,32]}),(0,li.jsx)("meshBasicMaterial",{color:"#22d3ee",transparent:!0,opacity:.95})]}),(0,li.jsx)("group",{ref:a,children:(0,li.jsx)("group",{ref:s,children:(0,li.jsx)("group",{position:k,children:r})})})]})}),J_=wD;var om=require("react");var SD="ri:license-grant:v1",MD={"260cd89ea13f":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwjr3ofKTkkcxOM0GYl/RlJj9JsuyjSF8sYmCd2YqsHJCEO8EvlNDrO2Kl4agFKo6dRhyR2/oWeiU6P9WIqRbvw=="},e1=new Map;function n1(e){let t=atob(e);return Uint8Array.from(t,n=>n.charCodeAt(0)).buffer}function t1(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");return n1(t.padEnd(Math.ceil(t.length/4)*4,"="))}function _D(e){if(!e||typeof e!="object")return!1;let t=e;return t.version===1&&typeof t.licenseKeyHash=="string"&&typeof t.domain=="string"&&(t.environment==="development"||t.environment==="production")&&typeof t.tier=="string"&&t.tier.length>0&&typeof t.issuedAt=="number"&&Number.isInteger(t.issuedAt)&&typeof t.expiresAt=="number"&&Number.isInteger(t.expiresAt)}async function im(e){let t=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(e.trim())),n=String.fromCharCode(...new Uint8Array(t));return btoa(n).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function ub(e,t){return`${SD}:${t}:${e}`}function CD(e,t){let n=e1.get(e);if(n)return n;let r=crypto.subtle.importKey("spki",n1(t),{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]);return e1.set(e,r),r}async function db(e,t,n){if(!globalThis.crypto?.subtle)return null;try{let[r,i,o,a,...s]=e.split("."),l=MD[i];if(r!=="ri1"||!l||!o||!a||s.length>0)return null;let c=JSON.parse(new TextDecoder().decode(t1(o)));if(!_D(c)||!await crypto.subtle.verify({name:"ECDSA",hash:"SHA-256"},await CD(i,l),t1(a),new TextEncoder().encode(`${r}.${i}.${o}`)))return null;let p=Math.floor(Date.now()/1e3),u=c.expiresAt-c.issuedAt;return c.licenseKeyHash!==t||c.domain!==n||c.expiresAt<=p||c.issuedAt>p+300||u<=0||u>43200?null:{environment:c.environment,tier:c.tier,expiresAt:c.expiresAt}}catch{return null}}async function r1(e,t,n){try{return await db(e,await im(t),n)}catch{return null}}async function i1(e,t,n){try{let r=await im(t);return await db(e,r,n)?(localStorage.setItem(ub(r,n),e),!0):!1}catch{return!1}}async function o1(e,t){try{let n=await im(e),r=ub(n,t),i=localStorage.getItem(r);if(!i)return null;let o=await db(i,n,t);return o||localStorage.removeItem(r),o}catch{return null}}async function pb(e,t){try{let n=await im(e);localStorage.removeItem(ub(n,t))}catch{}}var TD=["localhost","127.0.0.1","0.0.0.0"],PD=e=>TD.includes(e)||e.endsWith(".local")||e.endsWith(".localhost"),l1="https://react-immersive.liveroom.dev/api/validate-license",c1=()=>typeof window<"u",AD=300*1e3,ED=5e3,RD=400,fb=new Map,mb=new Map,ea=class extends Error{},u1=async(e,t,n)=>{let r=await o1(e,t);return r?(console.warn("[react-immersive] License server unreachable \u2014 using a previously verified, time-limited offline grant."),{status:"valid",reason:"Previously verified offline grant",environment:r.environment,tier:r.tier,isLocalDomain:n}):null},a1=async(e,t,n)=>{let r=await u1(e,t,n);return r||(console.warn("[react-immersive] License server unreachable and no valid offline grant is available \u2014 license validation failed."),{status:"invalid",reason:"Could not reach license server",isLocalDomain:n})},OD=e=>e instanceof ea||e instanceof TypeError,DD=()=>new Promise(e=>setTimeout(e,RD)),LD=e=>e==="development"||e==="production",ID=e=>{if(!e||typeof e!="object")return!1;let t=e;return!(typeof t.valid!="boolean"||t.reason!==void 0&&typeof t.reason!="string"||t.environment!==void 0&&!LD(t.environment)||t.tier!==void 0&&typeof t.tier!="string"||t.offlineGrant!==void 0&&typeof t.offlineGrant!="string")},kD=e=>{if(!e||typeof e!="object")return null;let t=e,n=t.reason??t.error;return typeof n=="string"&&n.trim()?n:null},d1=(e,t,n)=>`${n}::${e}::${t}`,p1=e=>{let t=fb.get(e);return t?Date.now()-t.timestamp>AD?(fb.delete(e),null):t.result:null},BD=(e,t)=>({status:e.valid?"valid":"invalid",reason:e.reason,environment:e.environment,tier:e.tier,isLocalDomain:t}),ND=(e,t)=>({status:"invalid",reason:e,isLocalDomain:t});async function VD(e,t,n,r){let i=d1(e,t,r),o=p1(i);if(o)return o;let a=mb.get(i);if(a)return a;let s=(async()=>{for(let l=0;l<2;l+=1)try{return await jD(e,t,n,i,r)}catch(c){if(!OD(c))throw c;if(l===0){let d=await u1(e,t,n);if(d)return d;await DD();continue}return a1(e,t,n)}return a1(e,t,n)})().finally(()=>{mb.delete(i)});return mb.set(i,s),s}async function jD(e,t,n,r,i){let o=new AbortController,a=setTimeout(()=>o.abort(),ED),s;try{s=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},cache:"no-store",signal:o.signal,body:JSON.stringify({licenseKey:e,domain:t})})}catch(d){throw o.signal.aborted?new ea("License validation timed out"):d}finally{clearTimeout(a)}let l;try{l=await s.json()}catch{throw new ea(`License server returned a non-JSON response${s.status?` (${s.status})`:""}`)}if(!s.ok){if(s.status===429||s.status>=500)throw new ea(`License server error (${s.status})`);let d=kD(l)??`License validation failed${s.status?` (${s.status})`:""}`;return await pb(e,t),ND(d,n)}if(!ID(l))throw new ea("License server returned an unexpected payload");let c=BD(l,n);if(c.status==="valid"&&i!==l1){let d=l.offlineGrant?await r1(l.offlineGrant,e,t):null;if(!d)throw new ea("License validation endpoint did not return a verifiable signed grant");c={...c,environment:d.environment,tier:d.tier}}return c.status==="valid"?(fb.set(r,{result:c,timestamp:Date.now()}),l.offlineGrant&&(await i1(l.offlineGrant,e,t)||console.warn("[react-immersive] The license server returned an invalid offline grant; it was not cached."))):await pb(e,t),c}var s1=(e,t)=>{let n=e.trim();return!c1()||!n?null:p1(d1(n,window.location.hostname.toLowerCase(),t))},m1=(e,t=l1)=>{let[n,r]=(0,om.useState)(()=>s1(e,t)??{status:"checking",isLocalDomain:!1});return(0,om.useEffect)(()=>{if(!c1())return;let i=!1,o=p=>{i||r(p)},a=e.trim(),s=window.location.hostname.toLowerCase(),l=PD(s),c=s1(e,t);return c?(o(c),()=>{i=!0}):(o({status:"checking",isLocalDomain:l}),a?((async()=>{try{o(await VD(a,s,l,t))}catch(p){let u=p instanceof TypeError?"Could not reach license server":p instanceof Error?p.message:"License validation failed";o({status:"invalid",reason:u,isLocalDomain:l})}})(),()=>{i=!0}):(o({status:"invalid",reason:"No license key provided",isLocalDomain:l}),()=>{i=!0}))},[e,t]),n};var $t=require("react");var Pn=require("react/jsx-runtime"),UD={up:{width:38,height:22},down:{width:38,height:22},left:{width:22,height:38},right:{width:22,height:38}},zD={up:"4 16 12 8 20 16",down:"4 8 12 16 20 8",left:"16 4 8 12 16 20",right:"8 4 16 12 8 20"},am=({direction:e})=>{let t=UD[e],n=zD[e];return(0,Pn.jsxs)("svg",{"aria-hidden":"true",className:"mc__arrow-icon",focusable:"false",viewBox:"0 0 24 24",width:t.width,height:t.height,fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{display:"block",width:`${t.width}px`,height:`${t.height}px`,pointerEvents:"none",padding:0,margin:0,overflow:"visible"},children:[(0,Pn.jsx)("polyline",{points:n,stroke:"rgba(0, 0, 0, 0.9)",strokeWidth:"6",strokeLinecap:"round",strokeLinejoin:"round"}),(0,Pn.jsx)("polyline",{points:n,stroke:"#2095F2",strokeWidth:"4",strokeLinecap:"round",strokeLinejoin:"round"})]})},co=16,FD={"bottom-left":{bottom:co,left:co,top:"auto",right:"auto",transform:"none"},"bottom-right":{bottom:co,right:co,top:"auto",left:"auto",transform:"none"},"top-left":{top:co,left:co,bottom:"auto",right:"auto",transform:"none"},"top-right":{top:co,right:co,bottom:"auto",left:"auto",transform:"none"},center:{top:"50%",left:"50%",bottom:"auto",right:"auto",transform:"translate(-50%, -50%)"},"center-bottom":{bottom:-10,left:"50%",top:"auto",right:"auto",transform:"translateX(-50%)"},"center-top":{top:co,left:"50%",bottom:"auto",right:"auto",transform:"translateX(-50%)"}},HD=({controlsRef:e,enabled:t=!0,opacity:n=.9,moveSensitivity:r=.001,rotateSensitivity:i=.01,position:o="center-bottom"})=>{let a=_e(),s=(0,$t.useRef)(null),[l,c]=(0,$t.useState)({x:0,y:0}),d=(0,$t.useRef)(!1),p=(0,$t.useRef)({x:0,y:0}),u=(0,$t.useRef)(void 0),f=(0,$t.useRef)(void 0),m=(0,$t.useRef)(null),v=(0,$t.useRef)(0),g=()=>e.current,b=(L,k,B)=>{let j=Math.hypot(L,k);if(j>B){let R=B/j;return{x:L*R,y:k*R}}return{x:L,y:k}},h=L=>{let B=Math.abs(L);return B<.12?0:Math.sign(L)*((B-.12)/(1-.12))},y=(0,$t.useCallback)(()=>{let L=()=>{let{x:k,y:B}=p.current,j=h(k),R=h(B);if(t&&(j!==0||R!==0)){let O=g();O&&O.rotate(-j*i,-R*i,!0)}u.current=requestAnimationFrame(L)};u.current=requestAnimationFrame(L)},[t,i]),w=(0,$t.useCallback)(()=>{u.current&&cancelAnimationFrame(u.current)},[]),T=(0,$t.useCallback)((L,k)=>{if(!s.current||!d.current)return;let B=s.current.getBoundingClientRect(),j=B.left+B.width/2,R=B.top+B.height/2,O=B.width/2-18,N=L-j,H=k-R,Y=b(N,H,O);c(Y),p.current={x:Y.x/O,y:Y.y/O}},[]),x=(0,$t.useCallback)(L=>{if(!t)return;L.preventDefault(),L.stopPropagation(),d.current=!0,y();let k="touches"in L?L.touches[0]:L;T(k.clientX,k.clientY)},[t,y,T]),D=(0,$t.useCallback)(L=>{if(!d.current)return;L.preventDefault();let k="touches"in L?L.touches[0]:L;T(k.clientX,k.clientY)},[T]),A=(0,$t.useCallback)(()=>{d.current=!1,c({x:0,y:0}),p.current={x:0,y:0},w()},[w]),S=r*10,M=(0,$t.useCallback)(L=>{t&&g()?.forward(L*S,!0)},[t,S]),_=(0,$t.useCallback)(L=>{t&&g()?.truck(L*S,0,!0)},[t,S]),C=(0,$t.useCallback)((L,k,B)=>{if(!t)return;f.current&&cancelAnimationFrame(f.current),m.current={control:L,amount:k,action:B},v.current=0,B(k);let j=R=>{if(!m.current)return;if(v.current===0){v.current=R,f.current=requestAnimationFrame(j);return}if(R-v.current>200){let{amount:N,action:H}=m.current;H(N),v.current=R}f.current=requestAnimationFrame(j)};f.current=requestAnimationFrame(j)},[t]),E=(0,$t.useCallback)(L=>{m.current?.control===L&&(f.current&&(cancelAnimationFrame(f.current),f.current=void 0),m.current=null,v.current=0)},[]);return(0,$t.useEffect)(()=>(window.addEventListener("mousemove",D),window.addEventListener("mouseup",A),window.addEventListener("touchmove",D,{passive:!1}),window.addEventListener("touchend",A),window.addEventListener("touchcancel",A),()=>{window.removeEventListener("mousemove",D),window.removeEventListener("mouseup",A),window.removeEventListener("touchmove",D),window.removeEventListener("touchend",A),window.removeEventListener("touchcancel",A),w(),f.current&&cancelAnimationFrame(f.current)}),[D,A,w]),t?(0,Pn.jsx)("div",{className:"mc__wrapper",style:{opacity:n,...FD[o]},children:(0,Pn.jsxs)("div",{className:"mc__dpad",children:[(0,Pn.jsx)("button",{"aria-label":a("moveForward"),className:"mc__arrow mc__arrow--up",onMouseDown:()=>C("up",1,M),onMouseUp:()=>E("up"),onMouseLeave:()=>E("up"),onTouchStart:L=>{L.preventDefault(),C("up",1,M)},onTouchEnd:()=>E("up"),onTouchCancel:()=>E("up"),children:(0,Pn.jsx)(am,{direction:"up"})}),(0,Pn.jsxs)("div",{className:"mc__middle-row",children:[(0,Pn.jsx)("button",{"aria-label":a("moveLeft"),className:"mc__arrow mc__arrow--left",onMouseDown:()=>C("left",-1,_),onMouseUp:()=>E("left"),onMouseLeave:()=>E("left"),onTouchStart:L=>{L.preventDefault(),C("left",-1,_)},onTouchEnd:()=>E("left"),onTouchCancel:()=>E("left"),children:(0,Pn.jsx)(am,{direction:"left"})}),(0,Pn.jsx)("div",{ref:s,className:"mc__joystick",onMouseDown:x,onTouchStart:x,children:(0,Pn.jsx)("div",{className:"mc__knob",style:{transform:`translate(${l.x}px, ${l.y}px)`}})}),(0,Pn.jsx)("button",{"aria-label":a("moveRight"),className:"mc__arrow mc__arrow--right",onMouseDown:()=>C("right",1,_),onMouseUp:()=>E("right"),onMouseLeave:()=>E("right"),onTouchStart:L=>{L.preventDefault(),C("right",1,_)},onTouchEnd:()=>E("right"),onTouchCancel:()=>E("right"),children:(0,Pn.jsx)(am,{direction:"right"})})]}),(0,Pn.jsx)("button",{"aria-label":a("moveBackward"),className:"mc__arrow mc__arrow--down",onMouseDown:()=>C("down",-1,M),onMouseUp:()=>E("down"),onMouseLeave:()=>E("down"),onTouchStart:L=>{L.preventDefault(),C("down",-1,M)},onTouchEnd:()=>E("down"),onTouchCancel:()=>E("down"),children:(0,Pn.jsx)(am,{direction:"down"})})]})}):null},f1=HD;var Qc=require("three");function sm(e){return[e.x,e.y,e.z]}function h1(e){let t=new Qc.Box3().setFromObject(e),n=0;return e.traverse(r=>{r.isMesh&&(n+=1)}),{bounds:{min:sm(t.min),max:sm(t.max),center:sm(t.getCenter(new Qc.Vector3)),size:sm(t.getSize(new Qc.Vector3))},objectCount:n,materialVariants:xg(e),materialVariantGroups:lp(e)}}function GD(e){return typeof e=="object"&&!Array.isArray(e)}function WD(e,t){return"group"in t?e.group===t.group:"tag"in t?e.tags?.includes(t.tag)??!1:(e.type??"other")===t.type}function An(e,t){if(GD(t))return Object.entries(e).filter(([,i])=>WD(i,t)).map(([i])=>i);let r=(typeof t=="string"?[t]:t).map(i=>sn(e,i)).filter(i=>i!==null);return[...new Set(r)]}function lm(e,t){return An(e,t).map(n=>e[n]).filter(n=>n!==void 0)}var qD="#ff3b30",XD=Object.freeze({}),g1=e=>e;function $D(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function YD(e,t){let n=e.metadata;for(let r of t.split(".")){if(!$D(n))return;n=n[r]}return n}function KD(e,t){if("metric"in t){let n=e.metrics?.[t.metric];return!(typeof n!="number"||!Number.isFinite(n)||t.above!==void 0&&!(n>t.above)||t.below!==void 0&&!(n<t.below))}if("status"in t){let n=e.status??"normal";return Array.isArray(t.status)?t.status.includes(n):t.status===n}return YD(e,t.metadata)===t.equals}function ZD(e){let t=e.trim().replace(/^#/,""),n=t.length===3?t.split("").map(r=>r+r).join(""):t;return/^[0-9a-f]{6}$/i.test(n)?[0,2,4].map(r=>parseInt(n.slice(r,r+2),16)):null}var hb=e=>`#${e.map(t=>Math.round(t).toString(16).padStart(2,"0")).join("")}`;function gb(e,t){let n=e.map(([l,c])=>({at:l,rgb:ZD(c)})).filter(l=>Number.isFinite(l.at)&&l.rgb!==null).sort((l,c)=>l.at-c.at);if(n.length===0||!Number.isFinite(t))return null;if(t<=n[0].at)return hb(n[0].rgb);let r=n[n.length-1];if(t>=r.at)return hb(r.rgb);let i=n.findIndex(l=>l.at>=t),o=n[i-1],a=n[i],s=a.at===o.at?1:(t-o.at)/(a.at-o.at);return hb(o.rgb.map((l,c)=>l+(a.rgb[c]-l)*s))}function cm(e,t){if(!t?.length)return{bindings:e,pulses:XD,sourceOf:g1};let n=new Map,r={};for(let a of t){let s=a.target?An(e,a.target):Object.keys(e),l=a.when?Array.isArray(a.when)?a.when:[a.when]:[];for(let c of s){let d=e[c];if(!l.every(u=>KD(d,u)))continue;let p={...a.material};if(a.colorScale){let u=d.metrics?.[a.colorScale.metric],f=typeof u=="number"?gb(a.colorScale.stops,u):null;f&&(p={...p,[a.colorScale.channel??"baseColor"]:f})}if(a.pulse){let u=a.pulse===!0?{}:a.pulse;r[c]={color:u.color??qD,speed:u.speed!==void 0&&u.speed>0?u.speed:1};let f=p.emissiveIntensity??n.get(c)?.emissiveIntensity??d.style?.material?.emissiveIntensity;f!==void 0&&f>0||(p.emissiveIntensity=1)}Object.keys(p).length>0&&n.set(c,{...n.get(c),...p})}}if(n.size===0)return{bindings:e,pulses:r,sourceOf:g1};let i={...e},o=new WeakMap;for(let[a,s]of n){let l=e[a],c={...l,style:{...l.style,material:{...l.style?.material,...s}}};i[a]=c,o.set(c,l)}return{bindings:i,pulses:r,sourceOf:a=>o.get(a)??a}}var QD=.12,b1=new Set;function Jc(e,t){return t?new Set(An(e,t.target)):b1}function um(e,t){let n=Jc(e.bindings,t);if(!t||n.size===0)return{...e,setAside:b1};let r=Math.min(Math.max(t.ghostOpacity??QD,0),1),i={...e.bindings},o=new WeakMap,a=new Set;for(let[s,l]of Object.entries(e.bindings)){if(n.has(s))continue;a.add(s);let c=t.mode==="hide"?{...l,visible:!1}:{...l,style:{...l.style,material:{...l.style?.material,opacity:Math.min(l.style?.material?.opacity??1,r)}}};i[s]=c,o.set(c,e.sourceOf(l))}return{bindings:i,pulses:e.pulses,sourceOf:s=>o.get(s)??e.sourceOf(s),setAside:a}}var x1=require("react");var v1=require("react"),bb=require("@react-three/fiber"),y1=new WeakMap;function dm(e){let t=(0,bb.useThree)(r=>r.get),n=(0,bb.useThree)(r=>r.setEvents);(0,v1.useEffect)(()=>{if(!e)return;let r=y1.get(t);if(!r){let o=new Set;r=o,y1.set(t,o);let a=t().events.filter;n({filter:(s,l)=>{let c=a?a(s,l):s;return o.size===0?c:c.filter(d=>{for(let p of o)if(!p(d))return!1;return!0})}})}r.add(e);let i=r;return()=>{i.delete(e)}},[e,t,n])}function yb({setAside:e,nodeRefs:t}){let n=(0,x1.useMemo)(()=>{if(e.size===0)return null;let r={refs:null,bound:new Map};return i=>{let o=t.current??{};if(r.refs!==o){let s=new Map;for(let[l,c]of Object.entries(o))s.set(c,e.has(l));r={refs:o,bound:s}}let{bound:a}=r;for(let s=i.object;s;s=s.parent){let l=a.get(s);if(l!==void 0)return!l}return!0}},[e,t]);return dm(n),null}var Nn=require("react"),T1=require("@react-three/drei"),dl=require("@react-three/fiber"),Ur=require("three");var is=require("three"),w1={x:0,y:1,z:2},JD=e=>Math.min(Math.max(e,0),1);function eL(e,t){let n=1/0,r=-1/0;for(let i=0;i<8;i++){let o=new is.Vector3(...e.min);for(let s=0;s<3;s++)i&1<<s&&o.setComponent(s,e.max[s]);let a=o.dot(t);n=Math.min(n,a),r=Math.max(r,a)}return[n,r]}function S1(e,t){if(!e.enabled||t.min.some((r,i)=>!Number.isFinite(r)||!Number.isFinite(t.max[i])||r>t.max[i]))return{cuts:[],intersection:!1};let n=(r,i,o,a,s)=>{let l=s?new is.Vector3(...s).normalize():new is.Vector3().setComponent(w1[i],1),[c,d]=eL(t,l),p=c+(d-c)*JD(o),u=a?1:-1;return{id:r,direction:l,min:c,max:d,coordinate:p,plane:new is.Plane(l.clone().multiplyScalar(u),-p*u)}};if(e.mode==="box"){let r=e.box??{min:[0,0,0],max:[1,1,1]};return{intersection:!!e.invertBox,cuts:["x","y","z"].flatMap((i,o)=>[n(`${i}-min`,i,r.min[o],!e.invertBox),n(`${i}-max`,i,r.max[o],!!e.invertBox)])}}return e.mode==="planes"?{intersection:!1,cuts:(e.planes??[]).filter(r=>r.enabled).map(r=>n(r.id,r.axis,r.position,r.flip,r.normal))}:{intersection:!1,cuts:[n("plane",e.axis,e.position,e.flip,e.normal)]}}function M1(e,t,n){return e.length?t?e.some(r=>r.distanceToPoint(n)>=-1e-4):e.every(r=>r.distanceToPoint(n)>=-1e-4):!0}function pm(e,t,n){if(e.mode==="planes")return{planes:e.planes?.map(r=>r.id===t?{...r,position:n}:r)};if(e.mode==="box"){let r=e.box??{min:[0,0,0],max:[1,1,1]},i=[...r.min],o=[...r.max],a=w1[t[0]];return t.endsWith("min")?i[a]=Math.max(0,Math.min(n,o[a]-.001)):o[a]=Math.min(1,Math.max(n,i[a]+.001)),{box:{min:i,max:o}}}return{position:n}}function _1(e,t,n,r){let i=n.clone().addScaledVector(r,-n.dot(r));if(i.lengthSq()<1e-8)return null;i.normalize();let o=e.direction.dot(i);if(Math.abs(o)<1e-8)return null;let a=t.clone().sub(e.origin).dot(i)/o;return Number.isFinite(a)?e.at(a,new is.Vector3).dot(r):null}var eu=require("three");function C1(){let e=new Map;function t(n){let r=e.get(n);r&&(n.clippingPlanes===r.owned&&(n.clippingPlanes=r.planes,n.clipShadows=r.shadows,n.clipIntersection=r.intersection,n.side===eu.DoubleSide&&(n.side=r.side),n.needsUpdate=!0),e.delete(n))}return{apply(n,r,i){let o=e.get(n);o&&n.clippingPlanes!==o.owned&&(e.delete(n),o=void 0),o||(o={planes:n.clippingPlanes,side:n.side,shadows:n.clipShadows,intersection:n.clipIntersection,owned:r},e.set(n,o)),n.side!==eu.DoubleSide&&(o.side=n.side),!(n.clippingPlanes===r&&n.clipIntersection===i&&n.side===eu.DoubleSide&&n.clipShadows)&&(o.owned=r,n.clippingPlanes=r,n.clipIntersection=i,n.clipShadows=!0,n.side=eu.DoubleSide,n.needsUpdate=!0)},retain(n){for(let r of e.keys())n.has(r)||t(r)},restore(){for(let n of e.keys())t(n)}}}var os=require("react/jsx-runtime");function vb({section:e,box:t,modelRef:n,showHandle:r,onChange:i,onDraggingChange:o}){let a=(0,dl.useThree)(b=>b.gl),s=(0,dl.useThree)(b=>b.raycaster),l=(0,dl.useThree)(b=>b.invalidate),c=(0,Nn.useMemo)(()=>kx(e),[e]),{cuts:d,intersection:p}=(0,Nn.useMemo)(()=>t?S1(c,t):{cuts:[],intersection:!1},[c,t]),u=(0,Nn.useMemo)(()=>d.map(b=>b.plane),[d]),f=u.length>0,m=(0,Nn.useMemo)(()=>C1(),[]);(0,Nn.useEffect)(()=>{if(!f)return;let b=a.localClippingEnabled;return a.localClippingEnabled=!0,l(),()=>{m.restore(),a.localClippingEnabled=b,l()}},[f,a,m,l]),(0,Nn.useEffect)(()=>{l()},[u,p,l]),(0,dl.useFrame)(()=>{if(!f)return;let b=new Set;n.current?.traverse(h=>{let y=h.material;for(let w of y?Array.isArray(y)?y:[y]:[])b.add(w),m.apply(w,u,p)}),m.retain(b)});let v=(0,Nn.useMemo)(()=>f?b=>{if(b.object.userData.riSectionHandle)return!0;let h=b.object;for(;h&&h!==n.current;)h=h.parent;return!h||M1(u,p,b.point)}:null,[f,u,p,n]);dm(v),(0,Nn.useEffect)(()=>{if(!f)return;let b=s,h=b.firstHitOnly;return b.firstHitOnly=!1,()=>{b.firstHitOnly=h}},[f,s]),(0,Nn.useEffect)(()=>()=>o(!1),[o]);let g=d.find(b=>b.id===c.activePlaneId)??(c.mode==="planes"&&c.activePlaneId?null:d[0]);return!f||!r||!t||!g?null:(0,os.jsx)(tL,{cut:g,box:t,onMove:b=>i(pm(c,g.id,b)),onDraggingChange:o},g.id)}function tL({cut:e,box:t,onMove:n,onDraggingChange:r}){let[i,o]=(0,Nn.useState)(!1),[a,s]=(0,Nn.useState)(!1),l=(0,Nn.useRef)(null),c=new Ur.Vector3(...t.min).add(new Ur.Vector3(...t.max)).multiplyScalar(.5);c.addScaledVector(e.direction,e.coordinate-c.dot(e.direction));let d=new Ur.Quaternion().setFromUnitVectors(new Ur.Vector3(0,0,1),e.direction),p=new Ur.Vector3(1,0,0).applyQuaternion(d),u=new Ur.Vector3(0,1,0).applyQuaternion(d),f=new Ur.Vector3(...t.max).sub(new Ur.Vector3(...t.min)),m=g=>Math.max(.01,Math.abs(g.x)*f.x+Math.abs(g.y)*f.y+Math.abs(g.z)*f.z)*1.08;(0,Nn.useEffect)(()=>()=>r(!1),[r]);let v=g=>{l.current&&(g.target?.releasePointerCapture?.(g.pointerId),l.current=null,s(!1),r(!1))};return(0,os.jsxs)("mesh",{ref:g=>{g&&(Cs(g),g.userData.riSectionHandle=!0)},position:c,quaternion:d,renderOrder:2,onPointerOver:g=>{g.stopPropagation(),o(!0)},onPointerOut:()=>o(!1),onPointerDown:g=>{g.stopPropagation(),g.target?.setPointerCapture?.(g.pointerId),l.current={point:g.point.clone(),view:g.ray.direction.clone(),at:g.point.dot(e.direction),cut:e.coordinate},s(!0),r(!0)},onPointerMove:g=>{let b=l.current;if(!b)return;g.stopPropagation();let h=_1(g.ray,b.point,b.view,e.direction);h!==null&&e.max>e.min&&n(Math.max(0,Math.min(1,(b.cut+h-b.at-e.min)/(e.max-e.min))))},onPointerUp:v,onPointerCancel:v,onClick:g=>g.stopPropagation(),children:[(0,os.jsx)("planeGeometry",{args:[m(p),m(u)]}),(0,os.jsx)("meshBasicMaterial",{color:"#22d3ee",transparent:!0,opacity:a?.22:i?.16:.08,side:Ur.DoubleSide,depthWrite:!1,toneMapped:!1}),(0,os.jsx)(T1.Edges,{color:"#22d3ee",renderOrder:3})]})}var P1=require("react-colorful"),ta=require("react/jsx-runtime"),xb=({colorPicker:e,onClose:t,itemMaterials:n,setItemMaterials:r,inline:i=!1})=>{let o=_e();return(0,ta.jsxs)("div",{className:`ri-popover${i?" ri-popover--inline":""}`,style:i?{padding:12}:{left:e.x,top:e.y,width:"min(225px, calc(100vw - 24px))",padding:12},onPointerDown:a=>a.stopPropagation(),children:[(0,ta.jsx)("p",{className:"ri-popoverLabel",children:o("color")}),(0,ta.jsx)(P1.HexColorPicker,{color:n[e.objectId]?.hex??"#ffffff",onChange:a=>r(s=>({...s,[e.objectId]:{...s[e.objectId],hex:a}}))}),(0,ta.jsxs)("div",{className:"ri-inlineRow",children:[(0,ta.jsx)("span",{className:"ri-colorCode",children:n[e.objectId]?.hex??"#ffffff"}),(0,ta.jsx)("button",{className:"ri-secondaryButton",onClick:t,children:o("done")})]})]})};var gt=require("react/jsx-runtime"),wb=({materialPopup:e,textureUrl:t,triggerFileUpload:n,clearTexture:r,canPlaceImage:i=!0,inline:o=!1,offset:a,rotationDegrees:s,onOffsetChange:l,onRotationChange:c,isPositioning:d=!1,onEndPositioning:p})=>{let u=_e();return(0,gt.jsxs)("div",{className:`ri-popover${o?" ri-popover--inline":""}`,style:o?{overflow:"hidden"}:{left:e.x,top:e.y,width:"min(300px, calc(100vw - 24px))",overflow:"hidden"},onPointerDown:f=>f.stopPropagation(),children:[(0,gt.jsx)("div",{className:"ri-popoverHeader",children:(0,gt.jsx)("p",{className:"ri-popoverLabel",style:{marginBottom:0},children:u("material")})}),(0,gt.jsxs)("div",{className:"ri-materialBody",children:[t?(0,gt.jsx)("div",{className:"ri-previewFrame",children:(0,gt.jsx)("img",{src:t,alt:u("texturePreview"),className:"ri-previewImage"})}):(0,gt.jsxs)("div",{className:"ri-emptyState",children:[(0,gt.jsx)("svg",{width:"24",height:"24",fill:"none",stroke:"currentColor",strokeWidth:1.5,viewBox:"0 0 24 24",children:(0,gt.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M2.25 15.75l5.159-5.159a2.25 2.25 0 013.182 0l5.159 5.159m-1.5-1.5l1.409-1.409a2.25 2.25 0 013.182 0l2.909 2.909M3 21h18M3 3h18"})}),(0,gt.jsx)("span",{style:{fontSize:12},children:u("noTextureApplied")})]}),i?(0,gt.jsx)("button",{onClick:()=>n(e.objectId),className:"ri-uploadButton",children:u(t?"replaceImage":"uploadImage")}):(0,gt.jsx)("p",{className:"ri-formatHint",children:u("noTextureCoordinates")}),t&&(0,gt.jsx)("button",{onClick:()=>r(e.objectId),className:"ri-removeButton",children:u("removeTexture")}),i?(0,gt.jsx)("p",{className:"ri-formatHint",children:"JPG \xB7 PNG \xB7 WebP"}):null,t&&(l||c)&&(0,gt.jsxs)("div",{className:"ri-texturePosition",children:[(0,gt.jsx)("p",{className:"ri-texturePositionLabel",children:u("texturePosition")}),(0,gt.jsxs)("div",{className:"ri-texturePositionGrid",children:[(0,gt.jsxs)("label",{className:"ri-texturePositionField",children:[(0,gt.jsx)("span",{children:u("offsetX")}),(0,gt.jsx)("input",{type:"number",step:.01,value:a?.[0]??0,onChange:f=>l?.(e.objectId,0,Number(f.target.value))})]}),(0,gt.jsxs)("label",{className:"ri-texturePositionField",children:[(0,gt.jsx)("span",{children:u("offsetY")}),(0,gt.jsx)("input",{type:"number",step:.01,value:a?.[1]??0,onChange:f=>l?.(e.objectId,1,Number(f.target.value))})]})]}),(0,gt.jsxs)("label",{className:"ri-texturePositionField ri-texturePositionField--full",children:[(0,gt.jsx)("span",{children:u("rotation")}),(0,gt.jsxs)("div",{className:"ri-texturePositionSliderRow",children:[(0,gt.jsx)("input",{type:"range",min:0,max:360,step:1,value:s??0,onChange:f=>c?.(e.objectId,Number(f.target.value))}),(0,gt.jsx)("input",{type:"number",min:0,max:360,step:1,value:Math.round(s??0),onChange:f=>c?.(e.objectId,Number(f.target.value))})]})]}),d?(0,gt.jsx)("button",{type:"button",className:"ri-uploadButton",onClick:p,title:u("confirmTexturePosition"),children:u("donePositioning")}):(0,gt.jsx)("p",{className:"ri-texturePositionHint",children:u("textureOffsetHint")})]})]})]})};var zr=require("react");var Tt=require("react/jsx-runtime");function A1({entries:e}){return(0,Tt.jsx)(Tt.Fragment,{children:e.map(([t,n])=>{let r=n!==null&&typeof n=="object",i=r?Object.entries(n):[];return r&&i.length>0?(0,Tt.jsxs)("div",{className:"left-panel__data-group",children:[(0,Tt.jsx)("span",{className:"left-panel__data-key",children:t}),(0,Tt.jsx)("div",{className:"left-panel__data-children",children:(0,Tt.jsx)(A1,{entries:i})})]},t):(0,Tt.jsxs)("div",{className:"left-panel__data-row",children:[(0,Tt.jsx)("span",{className:"left-panel__data-key",children:t}),(0,Tt.jsx)("span",{className:`left-panel__data-value left-panel__data-value--${typeof n}`,children:r?Array.isArray(n)?"[]":"{}":String(n)})]},t)})})}function nL({content:e}){let t=e!=null,[n,r]=(0,zr.useState)(t),[i,o]=(0,zr.useState)(t),a=(0,zr.useRef)(e);return t&&(a.current=e),(0,zr.useEffect)(()=>{if(t){r(!0);return}if(n){o(!1);let s=setTimeout(()=>r(!1),300);return()=>clearTimeout(s)}},[t,n]),(0,zr.useEffect)(()=>{if(n&&t){let s=requestAnimationFrame(()=>o(!0));return()=>cancelAnimationFrame(s)}},[n,t]),n?(0,Tt.jsx)("div",{className:`left-panel__action-extra${i?" left-panel__action-extra--open":""}`,children:(0,Tt.jsx)("div",{className:"left-panel__action-extra-inner",children:e??a.current})}):null}function Sb({isOpen:e,selectedObject:t,currentAction:n,onClose:r,onAction:i,renderActionExtra:o,translateDefaultActions:a=!1}){let s=_e(),[l,c]=(0,zr.useState)(t);(0,zr.useEffect)(()=>{t&&c(t)},[t]);let d=t??l,p=d?Object.entries(d).filter(([u])=>u!=="actions"&&u!=="decals"):[];return(0,Tt.jsx)("div",{className:`left-panel ${e?"left-panel--open":"left-panel--closed"}`,children:d&&(0,Tt.jsxs)(Tt.Fragment,{children:[(0,Tt.jsxs)("div",{className:"left-panel__header",children:[(0,Tt.jsx)("p",{className:"left-panel__title",children:d.label}),(0,Tt.jsx)("button",{onClick:r,className:"left-panel__close-btn","aria-label":s("closePanel"),children:"\u2715"})]}),p.length>0&&(0,Tt.jsx)("div",{className:"left-panel__data",children:(0,Tt.jsx)(A1,{entries:p})}),(0,Tt.jsx)("hr",{className:"left-panel__divider"}),d.actions&&d.actions.length>0&&(0,Tt.jsxs)(Tt.Fragment,{children:[(0,Tt.jsx)("div",{className:"left-panel__actions-label",children:s("actions")}),(0,Tt.jsx)("div",{className:"left-panel__actions-list",children:d.actions.map((u,f)=>{let m=n?.action.id===u.id&&(n.binding===d||n.binding?.id===d.id||n.binding?.modelObjectId===d.modelObjectId||n.objectId===d.id||n.objectId===d.modelObjectId),v=o?.(u.id);return(0,Tt.jsxs)(zr.Fragment,{children:[(0,Tt.jsx)("button",{onClick:g=>i({objectId:d.modelObjectId||d.id||"",action:u,binding:d,screenX:g.clientX,screenY:g.clientY}),className:["left-panel__action-btn",`left-panel__action-btn--${u.id}`,m?"left-panel__action-btn--active":""].filter(Boolean).join(" "),"data-action-id":u.id,"data-label":u.label,children:a?s.message(u.label):u.label}),(0,Tt.jsx)(nL,{content:v})]},f)})})]})]})})}var tu=require("react"),mm=require("lucide-react");var E1=require("react");var Hn=require("react/jsx-runtime");function R1({openButtonLabel:e,openButtonAriaLabel:t,eyebrow:n,title:r,searchValue:i,onSearchChange:o,searchPlaceholder:a,children:s,isOpen:l,onToggle:c,openButtonIcon:d,closeButtonIcon:p,closeButtonAriaLabel:u}){let f=_e(),[m,v]=(0,E1.useState)(!1),g=l!==void 0?l:m,b=h=>{l===void 0&&v(h),c?.(h)};return(0,Hn.jsxs)("div",{className:`ri-sidepanel-wrap ${g?"ri-sidepanel-wrap--open":"ri-sidepanel-wrap--closed"}`,children:[!g&&(0,Hn.jsxs)("button",{type:"button",className:"ri-sidepanel__open-btn",onClick:()=>b(!0),"aria-label":t,title:f("openPanel"),children:[d,e?(0,Hn.jsx)("span",{children:e}):null]}),(0,Hn.jsxs)("div",{className:`ri-sidepanel ${g?"ri-sidepanel--open":"ri-sidepanel--closed"}`,"aria-hidden":!g,children:[(0,Hn.jsxs)("div",{className:"ri-sidepanel__header",children:[(0,Hn.jsxs)("div",{className:"ri-sidepanel__header-top",children:[(0,Hn.jsx)("span",{className:"ri-sidepanel__eyebrow",children:n}),(0,Hn.jsx)("button",{type:"button",className:"ri-sidepanel__close-btn",onClick:()=>b(!1),"aria-label":u,title:f("close"),children:p??(0,Hn.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none","aria-hidden":"true",children:(0,Hn.jsx)("path",{d:"M1 1L11 11M11 1L1 11",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})})})]}),(0,Hn.jsx)("p",{className:"ri-sidepanel__title",children:r})]}),(0,Hn.jsx)("div",{className:"ri-sidepanel__search-wrap",children:(0,Hn.jsx)("input",{className:"ri-sidepanel__search",type:"text",placeholder:a,value:i,onChange:h=>o(h.target.value)})}),(0,Hn.jsx)("div",{className:"ri-sidepanel__list",children:s})]})]})}var Fr=require("react/jsx-runtime");function Mb({objectBindings:e,onAction:t,onFocus:n,onHover:r,isOpen:i,onToggle:o,isolatedKeys:a=null,onIsolate:s}){let l=_e(),[c,d]=(0,tu.useState)(null),[p,u]=(0,tu.useState)(""),f=(0,tu.useMemo)(()=>Object.entries(e).filter(([m,v])=>{let g=p.toLowerCase();return m.toLowerCase().includes(g)||(v.label??"").toLowerCase().includes(g)}),[e,p]);return(0,Fr.jsx)(R1,{openButtonLabel:"",openButtonAriaLabel:l("openSceneObjectsPanel"),openButtonIcon:(0,Fr.jsx)(mm.Boxes,{width:16,height:16,"aria-hidden":"true"}),eyebrow:l("sceneObjects"),title:l("visibleEntries",{count:f.length}),searchValue:p,onSearchChange:u,searchPlaceholder:l("searchNodesLabels"),isOpen:i,onToggle:o,closeButtonAriaLabel:l("closeSceneObjectsPanel"),children:f.map(([m,v])=>{let g=v.visible!==!1,b=c===m,h=a?.has(m)??!1;return(0,Fr.jsxs)("div",{onClick:()=>n(v),onMouseEnter:()=>{d(m),r?.(v)},onMouseLeave:()=>{d(null),r?.(null)},className:`ri-sidepanel__row${b?" ri-sidepanel__row--hovered":""}${a!==null&&!h?" ri-sidepanel__row--setAside":""}`,children:[(0,Fr.jsx)("button",{type:"button",className:`ri-sidepanel__label ri-sidepanel__labelButton${b?" ri-sidepanel__label--hovered":""}`,onFocus:()=>{d(m),r?.(v)},onBlur:()=>{d(null),r?.(null)},children:v.label??m}),s?(0,Fr.jsx)("button",{type:"button",onClick:w=>{w.stopPropagation(),s(v)},className:`ri-sidepanel__isolate-btn${h?" ri-sidepanel__isolate-btn--active":""}`,title:l(h?"showAll":"isolate"),"aria-label":l(h?"showAllObject":"isolateObject",{name:v.label??m}),"aria-pressed":h,children:(0,Fr.jsx)(mm.Focus,{width:14,height:14,"aria-hidden":"true"})}):null,(0,Fr.jsx)("button",{type:"button",onClick:w=>{w.stopPropagation(),t?.({objectId:m,action:{id:"toggle-visibility",label:"Toggle Visibility",type:"command"},binding:v})},className:"ri-sidepanel__vis-btn",title:l(g?"hide":"show"),"aria-label":l(g?"hideObject":"showObject",{name:v.label??m}),children:(0,Fr.jsx)("span",{className:`ri-sidepanel__checkbox${g?" ri-sidepanel__checkbox--checked":""}`,children:g&&(0,Fr.jsx)("svg",{width:"9",height:"9",viewBox:"0 0 10 10",fill:"none",children:(0,Fr.jsx)("path",{d:"M1.5 5L4 7.5L8.5 2.5",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})})})})]},m)})})}var ci=require("react");function O1(e,t){let n=[];for(let[r,i]of Object.entries(e))(t.bindings[r]??i).visible!==!1&&(t.setAside.has(r)||n.push({key:r,binding:i,label:i.label||r}));return n}function D1(e,t,n){if(n===0)return null;switch(e){case"ArrowDown":case"ArrowRight":return Math.min(t+1,n-1);case"ArrowUp":case"ArrowLeft":return Math.max(t-1,0);case"Home":return 0;case"End":return n-1;default:return null}}function L1(e,t,n){let r=n.toLocaleLowerCase();if(!r)return null;let i=[...r].every(s=>s===r[0]),o=r.length>1&&!i?t:t+1,a=i?[r,r[0]]:[r];for(let s of a)for(let l=0;l<e.length;l++){let c=((o+l)%e.length+e.length)%e.length;if(e[c].label.toLocaleLowerCase().startsWith(s))return c}return null}var na=require("react/jsx-runtime"),rL=600;function I1({objects:e,selectedKey:t,onHighlight:n,onSelect:r,onClearSelection:i}){let o=_e(),a=(0,ci.useId)(),[s,l]=(0,ci.useState)(!1),[c,d]=(0,ci.useState)(null),p=(0,ci.useRef)({query:"",at:0}),u=c?e.findIndex(w=>w.key===c):-1,f=u>=0?e[u]:null;(0,ci.useEffect)(()=>{t&&e.some(w=>w.key===t)&&d(t)},[t,e]);let m=s?f?.binding??null:null,v=(0,ci.useRef)(n);v.current=n,(0,ci.useEffect)(()=>{if(s)return v.current(m),()=>v.current(null)},[s,m]);let g=w=>{w!==null&&e[w]&&d(e[w].key)},b=w=>{let T=f?u:-1,x=D1(w.key,Math.max(T,0),e.length);if(x!==null){w.preventDefault(),g(T<0&&w.key!=="End"?0:x);return}if(w.key==="Enter"||w.key===" "){if(!f)return;w.preventDefault(),r(f.binding);return}if(w.key==="Escape"){if(!t)return;w.preventDefault(),w.stopPropagation(),i();return}if(w.key.length===1&&w.key!==" "&&!w.ctrlKey&&!w.metaKey&&!w.altKey){let D=Date.now(),A=p.current;A.query=D-A.at>rL?w.key:A.query+w.key,A.at=D,w.preventDefault(),g(L1(e,T,A.query))}};if(e.length===0)return null;let h=`${a}-option`,y=`${a}-hint`;return(0,na.jsxs)("div",{className:`ri-objectNavigator${s?" ri-objectNavigator--focused":""}`,children:[(0,na.jsx)("div",{role:"listbox",tabIndex:0,className:"ri-objectNavigator__list","aria-label":o("objectNavigator"),"aria-describedby":y,"aria-activedescendant":f?h:void 0,onFocus:()=>{l(!0),f||d(e[0].key)},onBlur:()=>l(!1),onKeyDown:b,children:f?(0,na.jsxs)("div",{id:h,role:"option","aria-selected":f.key===t,"aria-setsize":e.length,"aria-posinset":u+1,className:`ri-objectNavigator__option${f.key===t?" ri-objectNavigator__option--selected":""}`,children:[(0,na.jsx)("span",{className:"ri-objectNavigator__name",children:f.label}),(0,na.jsx)("span",{className:"ri-objectNavigator__position","aria-hidden":"true",children:o("objectNavigatorPosition",{position:u+1,count:e.length})})]}):null}),(0,na.jsx)("div",{id:y,className:"ri-objectNavigator__hint",children:o("objectNavigatorHint")})]})}var k1=require("react"),B1="(prefers-reduced-motion: reduce)";function iL(e){if(typeof window>"u"||!window.matchMedia)return()=>{};let t=window.matchMedia(B1);return t.addEventListener("change",e),()=>t.removeEventListener("change",e)}var oL=()=>typeof window<"u"&&!!window.matchMedia?.(B1).matches;function N1(e="user"){let t=(0,k1.useSyncExternalStore)(iL,oL,()=>!1);return e==="always"?!0:e==="never"?!1:t}var nT=require("lucide-react");var ra=require("react/jsx-runtime");function V1({visible:e,message:t,tone:n="default",progress:r}){if(!e)return null;let i=typeof r=="number"&&Number.isFinite(r),o=i?Math.min(Math.max(r,0),100):0,a=Math.round(o);return(0,ra.jsxs)("div",{className:"bb-loadingOverlay",role:"status","aria-live":"polite",children:[i&&(0,ra.jsxs)("div",{className:"bb-loadingProgressRow",children:[(0,ra.jsx)("div",{className:"bb-loadingProgress",role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":a,children:(0,ra.jsx)("div",{className:"bb-loadingProgress__bar",style:{width:`${a}%`}})}),(0,ra.jsxs)("span",{className:"bb-loadingProgress__label",children:[a,"%"]})]}),n!=="success"&&(0,ra.jsx)("span",{className:`bb-loadingMessage bb-status--${n}`,children:t})]})}function aL(e){return e.trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/[_\s]+/g,"-").replace(/[^a-zA-Z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").toLowerCase()}function sL(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[_-]+/g," ").replace(/\s+/g," ").trim().replace(/\b\w/g,t=>t.toUpperCase())}function _b(e){let t=e.toLowerCase();return t.includes("light")?"light":t.includes("wheel")||t.includes("rim")||t.includes("tire")?"wheel":t.includes("glass")||t.includes("window")||t.includes("windshield")||t.includes("sunroof")?"glass":t.includes("seat")||t.includes("dashboard")||t.includes("console")||t.includes("doorpanel")?"interior":t.includes("floor")?"floor":t.includes("wall")?"wall":t.includes("door")?"door":t.includes("chair")||t.includes("table")||t.includes("sofa")||t.includes("bed")?"furniture":"other"}function j1(e,t=!0){return e==="light"||e.endsWith("light")?[{id:"toggle-light",label:"Toggle Light",type:"command"},{id:"change-light-color",label:"Change Light Color",type:"command"},{id:"set-brightness",label:"Set Brightness",type:"command"}]:[{id:"change-color",label:"Change Color",type:"command"},...t?[{id:"change-material",label:"Change Material",type:"command"}]:[],{id:"toggle-visibility",label:"Toggle Visibility",type:"command"}]}function fm(e,t=!0){let n=_b(e);return{id:aL(e),modelObjectId:e,type:n,label:sL(e),status:"normal",selectable:!0,hoverable:!0,visible:!0,style:{},actions:j1(n,t),metrics:{},metadata:{}}}function U1(e,t){return Object.fromEntries(e.map(n=>[n,fm(n,!t?.has(n))]))}function hm(e,t){let n=new Set,r={};for(let i of e){let o=fm(i,!t?.has(i)),a=o.id||"object",s=a;for(let c=2;n.has(s);c++)s=`${a}-${c}`;n.add(s),o.id=s;let l=(o.actions??[]).filter(c=>lc.includes(c.id));o.actions=l.length>0?l:j1("other",!t?.has(i)),r[i]=o}return r}function z1(e){let t=new Set;for(let[n,r]of Object.entries(cr(e).nodesById))Vd(r)||t.add(n);return t}function F1(e){let{nodesById:t}=cr(e),n=[];for(let[r,i]of Object.entries(t)){let o=i;o.isMesh&&o.geometry&&i.name&&n.push(r)}return n.sort((r,i)=>r.localeCompare(i))}var Ne=require("react"),ym=require("@react-three/fiber"),vm=require("@react-three/drei"),mt=require("three");var H1="data:image/png;base64,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";var G1="data:image/png;base64,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";var W1="data:image/png;base64,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";var Ye=require("react/jsx-runtime"),Cb=-100,Tb=100,eC=.03,dL=.03,pL=.03,q1=.5,mL=H1,fL=G1,hL=W1,gL=Math.PI/4,X1=.4,pl=64,$1=eC*3,Pb="#4d7dff",Y1="#ffcc00",K1=.02,bL=new mt.Vector3(0,1,0),gm=32,Z1="#ff9d3d",bm=4;function Ab(e){let t=new Float32Array((pl+1)*3);for(let n=0;n<=pl;n++){let r=n/pl*Math.PI*2,i=Math.cos(r)*X1,o=Math.sin(r)*X1,a=0,s=0,l=0;e==="x"?(s=i,l=o):e==="y"?(a=i,l=o):(a=i,s=o),t[n*3]=a,t[n*3+1]=s,t[n*3+2]=l}return t}function yL(e){let t=Math.abs(e.y)<.99?new mt.Vector3(0,1,0):new mt.Vector3(1,0,0),n=new mt.Vector3().crossVectors(e,t).normalize(),r=new mt.Vector3().crossVectors(e,n).normalize();return[n,r]}function Q1(e,t,n=1e-5){return Math.abs(e[0]-t[0])<n&&Math.abs(e[1]-t[1])<n&&Math.abs(e[2]-t[2])<n}var ml=null,Rb=new Set;function Eb(e){ml!==e&&(ml=e,Rb.forEach(t=>t()))}function vL(e){return Rb.add(e),()=>Rb.delete(e)}function J1(){return ml}function tC({light:e,position:t,rotation:n=[0,0,0],color:r,intensity:i,visible:o,onPositionChange:a,onRotationChange:s,onDraggingChange:l}){let{activeTab:c,activeSubTab:d,setActiveTab:p,setActiveSubTab:u}=Qo(),{camera:f,gl:m,raycaster:v,invalidate:g}=(0,ym.useThree)(),b=(0,Ne.useRef)(null),h=(0,Ne.useRef)(null),y=(0,Ne.useRef)(null),w=(0,Ne.useRef)(null),T=(0,Ne.useRef)(null),x=(0,Ne.useRef)(null),D=(0,Ne.useRef)(null),A=(0,Ne.useRef)(null),S=(0,Ne.useRef)(null),M=(0,Ne.useRef)(null),_=(0,Ne.useRef)(null),C=(0,Ne.useMemo)(()=>new mt.Matrix4,[]),E=(0,Ne.useMemo)(()=>new mt.Quaternion,[]),L=(0,Ne.useMemo)(()=>new mt.Vector3(1,1,1),[]),k=(0,Ne.useRef)([0,0,0]),B=(0,Ne.useRef)([0,0,0]),j=(0,Ne.useRef)(!1),R=(0,Ne.useRef)(null),O=(0,Ne.useRef)(null),N=(0,Ne.useRef)(null),H=(0,Ne.useRef)(l);(0,Ne.useEffect)(()=>{H.current=l},[l]);let Y=(0,Ne.useMemo)(()=>new mt.Vector3(t[0],t[1],t[2]),[t]),ue=(0,Ne.useMemo)(()=>new mt.Euler(n[0],n[1],n[2]),[n]),be=(0,Ne.useMemo)(()=>new Float32Array(6),[]),X=(0,Ne.useMemo)(()=>Ab("x"),[]),G=(0,Ne.useMemo)(()=>Ab("y"),[]),J=(0,Ne.useMemo)(()=>Ab("z"),[]),ee=(0,Ne.useMemo)(()=>new Float32Array((gm+1)*3),[]),fe=(0,Ne.useMemo)(()=>new Float32Array(bm*2*3),[]),K=e?.type==="point",oe=e?.type==="spot",ae=K?fL:oe?hL:mL,pe=K?dL:oe?pL:eC,De=(0,Ne.useMemo)(()=>new mt.TextureLoader().load(ae),[ae]),te=(0,Ne.useSyncExternalStore)(vL,J1,J1),Fe=!!e&&te===e.id,We=(0,Ne.useRef)(new mt.Vector3),ge=(0,Ne.useRef)(new mt.Euler);(0,Ne.useEffect)(()=>{j.current||(We.current.copy(Y),ge.current.copy(ue),g())},[Y,ue,g]),(0,Ne.useEffect)(()=>{e&&ml===e.id&&!o&&Eb(null)},[e?.id,o]),(0,Ne.useEffect)(()=>()=>{e&&ml===e.id&&Eb(null),N.current!==null&&(cancelAnimationFrame(N.current),N.current=null)},[e?.id]);let Ce=(0,Ne.useCallback)(()=>{if(j.current||!Fe)return;let he=We.current,de=new mt.Quaternion().setFromEuler(ge.current);C.compose(he,de,L)},[C,L,Fe]);(0,ym.useFrame)(()=>{if(b.current&&b.current.position.copy(We.current),Ce(),y.current){y.current.lookAt(f.position);let he=f,de;he.isOrthographicCamera?de=pe/he.zoom:de=f.position.distanceTo(We.current)*pe,y.current.scale.setScalar(de)}if(D.current){let he=f,de;he.isOrthographicCamera?de=$1/he.zoom:de=f.position.distanceTo(We.current)*$1,D.current.scale.setScalar(de)}if(T.current){let he=T.current.getAttribute("position"),de=he.array;de[0]=0,de[1]=0,de[2]=0,de[3]=We.current.x,de[4]=We.current.y,de[5]=We.current.z,he.needsUpdate=!0,T.current.computeBoundingSphere()}if(x.current){let he=We.current,de=he.length();x.current.visible=de>q1,de>1e-6&&(x.current.position.copy(he).multiplyScalar(.5),x.current.scale.set(1,de,1),x.current.quaternion.setFromUnitVectors(bL,he.clone().normalize()))}if(w.current&&(w.current.visible=We.current.length()>q1),oe&&A.current&&S.current&&M.current){let he=We.current,de=he.length();if(de>1e-6){A.current.visible=!0;let ze=he.clone().negate().normalize(),Pe=de,ft=e?.angle??Math.PI/6,At=Pe*Math.tan(ft),se=he.clone().add(ze.clone().multiplyScalar(Pe)),[Re,Ee]=yL(ze),nt=S.current.getAttribute("position"),Qe=nt.array;for(let xe=0;xe<=gm;xe++){let et=xe/gm*Math.PI*2,xt=se.x+(Re.x*Math.cos(et)+Ee.x*Math.sin(et))*At,Dn=se.y+(Re.y*Math.cos(et)+Ee.y*Math.sin(et))*At,pi=se.z+(Re.z*Math.cos(et)+Ee.z*Math.sin(et))*At;Qe[xe*3]=xt,Qe[xe*3+1]=Dn,Qe[xe*3+2]=pi}nt.needsUpdate=!0,S.current.computeBoundingSphere();let ut=M.current.getAttribute("position"),Ke=ut.array;for(let xe=0;xe<bm;xe++){let et=xe/bm*Math.PI*2,xt=se.x+(Re.x*Math.cos(et)+Ee.x*Math.sin(et))*At,Dn=se.y+(Re.y*Math.cos(et)+Ee.y*Math.sin(et))*At,pi=se.z+(Re.z*Math.cos(et)+Ee.z*Math.sin(et))*At,yn=xe*6;Ke[yn]=he.x,Ke[yn+1]=he.y,Ke[yn+2]=he.z,Ke[yn+3]=xt,Ke[yn+4]=Dn,Ke[yn+5]=pi}ut.needsUpdate=!0,M.current.computeBoundingSphere()}else A.current.visible=!1}});let Je=(0,Ne.useCallback)(()=>{N.current!==null&&(cancelAnimationFrame(N.current),N.current=null),k.current=t,B.current=[n[0],n[1],n[2]],j.current=!0,R.current=null,O.current=null,H.current?.(!0)},[t,n]),ve=(0,Ne.useCallback)((he,de,ze,Pe)=>{let ft=new mt.Vector3(k.current[0],k.current[1],k.current[2]),At=new mt.Vector3,se=new mt.Quaternion,Re=new mt.Vector3;Pe.decompose(At,se,Re);let Ee=ft.clone().applyMatrix4(Pe),nt=[Math.min(Math.max(Ee.x,Cb),Tb),Math.min(Math.max(Ee.y,Cb),Tb),Math.min(Math.max(Ee.z,Cb),Tb)],Qe=new mt.Quaternion().setFromEuler(new mt.Euler(B.current[0],B.current[1],B.current[2],"XYZ")),ut=new mt.Quaternion().copy(se).multiply(Qe),Ke=new mt.Euler().setFromQuaternion(ut,"XYZ"),xe=[Ke.x,Ke.y,Ke.z];We.current.set(nt[0],nt[1],nt[2]),ge.current.set(xe[0],xe[1],xe[2]),R.current=nt,O.current=xe;let et=new mt.Quaternion().setFromEuler(ge.current);C.compose(We.current,et,L),g()},[C,L,g]),qe=(0,Ne.useCallback)(()=>{j.current=!1;let he=R.current,de=O.current;R.current=null,O.current=null;let ze=he&&!Q1(he,k.current),Pe=de&&!Q1(de,B.current);ze&&a&&a(he),Pe&&s&&s(de),ze||Pe?N.current=requestAnimationFrame(()=>{N.current=null,H.current?.(!1)}):H.current?.(!1)},[a,s]);return(0,Ne.useEffect)(()=>{let he=Pe=>{let ft=m.domElement.getBoundingClientRect();return new mt.Vector2((Pe.clientX-ft.left)/ft.width*2-1,-((Pe.clientY-ft.top)/ft.height)*2+1)},de=Pe=>!!Pe.target.closest?.("button, input, textarea, .ri-annotationPopup, .ri-colorPicker, .ri-materialPicker"),ze=Pe=>{if(de(Pe))return;let ft=he(Pe);v.setFromCamera(ft,f);let At=[];if(h.current&&At.push(h.current),y.current&&At.push(y.current),At.length===0)return;if(v.intersectObjects(At,!1).length>0){let Re=e?.id??null;ml!==Re&&(Eb(Re),p?.("scene"),u?.("Lighting")),Pe.preventDefault(),Pe.stopPropagation()}};return m.domElement.addEventListener("pointerdown",ze),()=>{m.domElement.removeEventListener("pointerdown",ze)}},[f,v,m,e,p,u]),c!=="scene"||d!=="Lighting"||!e||!o||e.type==="none"||e.type==="hemisphere"?null:(0,Ye.jsxs)("group",{ref:he=>{he&&Cs(he)},children:[(0,Ye.jsxs)("group",{ref:b,children:[(0,Ye.jsx)("sprite",{ref:y,children:(0,Ye.jsx)("spriteMaterial",{map:De,transparent:!0,opacity:.9,blending:mt.AdditiveBlending,depthWrite:!1,rotation:oe?gL:0},ae)}),(0,Ye.jsx)(vm.Sphere,{ref:h,args:[.25,16,16],children:(0,Ye.jsx)("meshBasicMaterial",{transparent:!0,opacity:.01})}),K&&(0,Ye.jsxs)("group",{ref:D,children:[(0,Ye.jsxs)("lineLoop",{renderOrder:999,children:[(0,Ye.jsx)("bufferGeometry",{children:(0,Ye.jsx)("bufferAttribute",{attach:"attributes-position",args:[X,3],count:pl+1})}),(0,Ye.jsx)("lineBasicMaterial",{color:Pb,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,Ye.jsxs)("lineLoop",{renderOrder:999,children:[(0,Ye.jsx)("bufferGeometry",{children:(0,Ye.jsx)("bufferAttribute",{attach:"attributes-position",args:[G,3],count:pl+1})}),(0,Ye.jsx)("lineBasicMaterial",{color:Pb,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,Ye.jsxs)("lineLoop",{renderOrder:999,children:[(0,Ye.jsx)("bufferGeometry",{children:(0,Ye.jsx)("bufferAttribute",{attach:"attributes-position",args:[J,3],count:pl+1})}),(0,Ye.jsx)("lineBasicMaterial",{color:Pb,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]})]})]}),!K&&!oe&&(0,Ye.jsxs)(Ye.Fragment,{children:[(0,Ye.jsxs)("mesh",{ref:x,children:[(0,Ye.jsx)("cylinderGeometry",{args:[K1,K1,1,8,1,!0]}),(0,Ye.jsx)("meshBasicMaterial",{color:Y1,transparent:!0,opacity:.05,blending:mt.AdditiveBlending,depthWrite:!1,depthTest:!1})]}),(0,Ye.jsxs)("line",{ref:w,children:[(0,Ye.jsx)("bufferGeometry",{ref:T,children:(0,Ye.jsx)("bufferAttribute",{attach:"attributes-position",args:[be,3],count:2})}),(0,Ye.jsx)("lineBasicMaterial",{color:Y1,transparent:!0,opacity:.7,blending:mt.AdditiveBlending})]})]}),oe&&(0,Ye.jsxs)("group",{ref:A,children:[(0,Ye.jsxs)("lineLoop",{renderOrder:999,children:[(0,Ye.jsx)("bufferGeometry",{ref:S,children:(0,Ye.jsx)("bufferAttribute",{attach:"attributes-position",args:[ee,3],count:gm+1})}),(0,Ye.jsx)("lineBasicMaterial",{color:Z1,transparent:!0,opacity:.85,depthTest:!1,depthWrite:!1})]}),(0,Ye.jsxs)("lineSegments",{renderOrder:999,children:[(0,Ye.jsx)("bufferGeometry",{ref:M,children:(0,Ye.jsx)("bufferAttribute",{attach:"attributes-position",args:[fe,3],count:bm*2})}),(0,Ye.jsx)("lineBasicMaterial",{color:Z1,transparent:!0,opacity:.5,depthTest:!1,depthWrite:!1})]})]}),Fe&&a&&(0,Ye.jsx)(vm.PivotControls,{ref:_,matrix:C,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:Je,onDrag:ve,onDragEnd:qe})]})}var He=require("react"),xm=require("@react-three/drei"),fl=require("@react-three/fiber"),Rt=require("three"),nC=require("lucide-react");var ia=require("react/jsx-runtime"),xL=.01,Ob=.5;function Db({node:e,space:t,moveEnabled:n,scaleEnabled:r,onTransformChange:i,onDraggingChange:o,transform:a}){let s=(0,fl.useThree)(K=>K.invalidate),l=(0,fl.useThree)(K=>K.camera),c=(0,fl.useThree)(K=>K.size),d=(0,He.useMemo)(()=>Xa(e),[e]),p=(0,He.useMemo)(()=>new Rt.Vector3,[e]);a?.pivot?p.fromArray(a.pivot.point):p.copy(d);let u=(0,He.useMemo)(()=>{let K=wc(e);if(!K)return[p.clone().add(new Rt.Vector3(Ob,Ob,Ob))];let oe=[];for(let ae of[K.min.x,K.max.x])for(let pe of[K.min.y,K.max.y])for(let De of[K.min.z,K.max.z])oe.push(new Rt.Vector3(ae,pe,De));return oe},[e,p]),f=(0,He.useMemo)(()=>new Rt.Vector3,[]),m=(0,He.useMemo)(()=>new Rt.Vector3,[]),v=(0,He.useRef)(null),g=(0,He.useMemo)(()=>new Rt.Matrix4,[]),b=(0,He.useRef)(!1),h=(0,He.useRef)(new Rt.Matrix4),y=(0,He.useRef)(new Rt.Matrix4),w=(0,He.useRef)(null),T=(0,He.useRef)([]),x=(0,He.useRef)(null),D=(0,He.useRef)(o);D.current=o;let A=(0,He.useMemo)(()=>new Rt.Vector3,[]),S=(0,He.useMemo)(()=>new Rt.Quaternion,[]),M=(0,He.useMemo)(()=>new Rt.Vector3,[]),_=(0,He.useMemo)(()=>new Rt.Quaternion,[]),C=(0,He.useMemo)(()=>new Rt.Vector3(1,1,1),[]),E=(0,He.useMemo)(()=>new Rt.Quaternion,[]),L=(0,He.useMemo)(()=>new Rt.Vector3,[]),k=(0,He.useMemo)(()=>new Rt.Vector3,[]),B=(0,He.useRef)([0,0,0]),j=(0,He.useRef)(new Rt.Vector3(1,1,1)),R=(0,He.useRef)({point:[0,0,0],offset:[0,0,0]}),O=(0,He.useCallback)(()=>{b.current||(e.updateWorldMatrix(!0,!1),A.copy(p).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(S),_.copy(S),t==="world"&&_.identity(),g.compose(A,_,C))},[A,g,_,C,e,p,t,S]),N=(0,He.useCallback)(()=>{e.updateWorldMatrix(!0,!1);let K=1/0;for(let oe of u){f.copy(oe).applyMatrix4(e.matrixWorld);let ae=f.distanceToSquared(l.position);ae<K&&(K=ae,m.copy(f))}v.current?.position.copy(m)},[l,m,u,e,f]);(0,He.useLayoutEffect)(()=>(O(),N(),()=>{let K=x.current!==null;K&&(cancelAnimationFrame(x.current),x.current=null),(b.current||K)&&(b.current=!1,D.current(!1));for(let oe of T.current)Jr(oe);T.current=[]}),[O]),(0,fl.useFrame)(()=>{O(),N()});let H=(0,He.useCallback)(()=>{x.current!==null&&(cancelAnimationFrame(x.current),x.current=null),e.updateWorldMatrix(!0,!0),T.current=[];for(let K of Si(e))Rs(K)||(Oo(K,K.matrixWorld),T.current.push(K));e.updateWorldMatrix(!0,!1),A.copy(p).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(S),e.getWorldScale(M),h.current.compose(A,S,M),y.current.copy(g),B.current=[e.rotation.x,e.rotation.y,e.rotation.z],j.current.copy(e.scale),R.current=a?.pivot??mp(p.toArray(),B.current,e.scale.toArray(),e.rotation.order),w.current=null,b.current=!0,o(!0)},[A,g,e,o,p,S,M,a?.pivot]),Y=(0,He.useCallback)((K,oe)=>{let ae=h.current.clone().premultiply(oe),pe=y.current.clone().premultiply(oe);ae.decompose(L,S,k);let De=L.clone();pe.decompose(A,_,C),t==="world"&&_.identity(),g.compose(A,_,C),K.decompose(L,E,k);let te=new Rt.Euler().setFromQuaternion(E,e.rotation.order),[Fe,We,ge]=B.current,Ce=[Fe+te.x,We+te.y,ge+te.z],Je=new Rt.Quaternion().setFromEuler(new Rt.Euler(Ce[0],Ce[1],Ce[2],e.rotation.order));e.scale.copy(j.current);let qe=(e.parent?.matrixWorld||new Rt.Matrix4).clone().invert(),he=De.clone().applyMatrix4(qe),de=p.clone().multiply(e.scale).applyQuaternion(Je),ze=he.clone().sub(de);e.position.copy(ze),e.rotation.set(Ce[0],Ce[1],Ce[2],e.rotation.order),e.updateMatrixWorld(!0),s();let Pe=R.current,ft=he.clone().sub(new Rt.Vector3(...Pe.offset)),At=[ft.x,ft.y,ft.z];w.current={position:At,rotation:Ce,pivot:Pe}},[A,E,g,_,C,s,e,p,L,k,t,S]),ue=(0,He.useCallback)(()=>{b.current=!1;let K=w.current;if(w.current=null,K)i(K),x.current=requestAnimationFrame(()=>{x.current=null,o(!1)});else if(T.current.length>0){for(let oe of T.current)Jr(oe);e.updateMatrixWorld(!0),s(),o(!1)}else o(!1);T.current=[]},[s,e,o,i]),be=(0,He.useRef)(null),X=(0,He.useCallback)(K=>{let oe=K.clone().project(l);return{x:c.left+(oe.x*.5+.5)*c.width,y:c.top+(-oe.y*.5+.5)*c.height}},[l,c]),G=(0,He.useCallback)((K,oe)=>{let ae=Math.max(xL,Number.isFinite(K)?K:1);e.scale.copy(j.current).multiplyScalar(ae);let De=(e.parent?.matrixWorld||new Rt.Matrix4).clone().invert(),te=oe.clone().applyMatrix4(De),Fe=new Rt.Quaternion().setFromEuler(e.rotation),We=p.clone().multiply(e.scale).applyQuaternion(Fe),ge=te.clone().sub(We);e.position.set(ge.x,ge.y,ge.z),e.updateMatrixWorld(!0),N(),s(),w.current={position:te.clone().sub(new Rt.Vector3(...R.current.offset)).toArray(),scale:e.scale.toArray(),pivot:R.current}},[s,e,p,N]),J=(0,He.useCallback)(K=>{if(!r)return;K.stopPropagation(),K.preventDefault(),K.currentTarget.setPointerCapture(K.pointerId),H();let oe=A.clone(),ae=X(oe),pe=Math.max(1,Math.hypot(K.clientX-ae.x,K.clientY-ae.y));be.current={pointerId:K.pointerId,centerScreen:ae,startDistance:pe,pivotWorld:oe}},[H,A,X,r]),ee=(0,He.useCallback)(K=>{let oe=be.current;if(!oe||K.pointerId!==oe.pointerId)return;K.stopPropagation();let ae=Math.hypot(K.clientX-oe.centerScreen.x,K.clientY-oe.centerScreen.y);G(ae/oe.startDistance,oe.pivotWorld)},[G]),fe=(0,He.useCallback)(K=>{let oe=be.current;!oe||K.pointerId!==oe.pointerId||(K.stopPropagation(),K.currentTarget.hasPointerCapture(K.pointerId)&&K.currentTarget.releasePointerCapture(K.pointerId),be.current=null,ue())},[ue]);return(0,He.useEffect)(()=>{r||be.current&&(be.current=null,ue())},[r,ue]),(0,ia.jsxs)("group",{children:[(0,ia.jsx)(xm.PivotControls,{matrix:g,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableAxes:!n,disableSliders:!n,disableRotations:!n,disableScaling:!0,onDragStart:H,onDrag:(K,oe,ae,pe)=>Y(oe,pe),onDragEnd:ue}),r&&(0,ia.jsx)("group",{ref:v,children:(0,ia.jsx)(xm.Html,{portal:void 0,zIndexRange:[10,0],style:{pointerEvents:"none",transition:"opacity 0.2s"},children:(0,ia.jsx)("div",{onPointerDown:J,onPointerMove:ee,onPointerUp:fe,onPointerCancel:fe,title:"Drag to resize",style:{position:"absolute",transform:"translate(-50%, -50%)",width:24,height:24,borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",background:"#113456",border:"2px solid #ffffff",boxShadow:"0 2px 6px rgba(0,0,0,0.5)",cursor:"nwse-resize",touchAction:"none",pointerEvents:"auto"},children:(0,ia.jsx)(nC.Maximize2,{size:13,color:"#ffffff"})})})})]})}var ot=require("react"),wm=require("@react-three/drei"),hl=require("@react-three/fiber"),Gn=require("three"),iC=require("lucide-react");var nu=require("three");function Lb(e){let t=new Set(e.map(({node:r})=>r)),n=new Set;return e.filter(({node:r})=>{if(n.has(r))return!1;n.add(r);for(let i=r.parent;i;i=i.parent)if(t.has(i))return!1;return!0})}function rC(e){return Lb(e).map(({key:t,node:n,transform:r})=>{n.updateWorldMatrix(!0,!0);let i=r?.pivot?.point??Xa(n).toArray(),o=r?.pivot??mp(i,[n.rotation.x,n.rotation.y,n.rotation.z],n.scale.toArray(),n.rotation.order,r?.shear);return{key:t,node:n,pivot:o,startWorld:n.matrixWorld.clone(),startMatrix:n.matrix.clone(),startMatrixAutoUpdate:n.matrixAutoUpdate,startPosition:n.position.clone(),startQuaternion:n.quaternion.clone(),startScale:n.scale.clone(),pivotWorld:new nu.Vector3(...o.point).applyMatrix4(n.matrixWorld)}})}function Ib(e,t,n=1){return e.map(r=>{let{node:i,pivot:o}=r;i.parent?.updateWorldMatrix(!0,!1);let a=(i.parent?.matrixWorld.clone()??new nu.Matrix4).invert(),s=a.clone().multiply(t).multiply(r.startWorld),{rotation:l,scale:c,shear:d}=id(s,r.startScale.clone().multiplyScalar(n),r.startQuaternion),p=r.pivotWorld.clone().applyMatrix4(t).applyMatrix4(a);return i.position.setFromMatrixPosition(s),i.quaternion.copy(l),i.scale.copy(c),_i(i,d),i.updateMatrixWorld(!0),{key:r.key,transform:{position:p.clone().sub(new nu.Vector3(...o.offset)).toArray(),rotation:[i.rotation.x,i.rotation.y,i.rotation.z],scale:c.toArray(),pivot:o,shear:d}}})}var oa=require("react/jsx-runtime"),wL=.01;function kb({entries:e,referenceNode:t,space:n,moveEnabled:r,scaleEnabled:i,onTransformChange:o,onDraggingChange:a}){let s=(0,hl.useThree)(X=>X.invalidate),l=(0,hl.useThree)(X=>X.camera),c=(0,hl.useThree)(X=>X.size),d=(0,ot.useRef)(e);d.current=e;let p=(0,ot.useRef)([]);(e.length!==p.current.length||e.some((X,G)=>X.key!==p.current[G].key||X.node!==p.current[G].node))&&(p.current=e);let u=p.current,f=(0,ot.useMemo)(()=>Lb(u).map(({node:X})=>X),[u]),m=t??e[e.length-1]?.node,v=(0,ot.useMemo)(()=>new Gn.Vector3,[]),g=(0,ot.useMemo)(()=>new Gn.Quaternion,[]),b=(0,ot.useMemo)(()=>new Gn.Matrix4,[]),h=(0,ot.useMemo)(()=>new Gn.Vector3(1,1,1),[]),y=(0,ot.useMemo)(()=>new Gn.Vector3,[]),w=(0,ot.useRef)(null),T=(0,ot.useMemo)(()=>f.flatMap(X=>{let G=wc(X);if(!G)return[{node:X,point:Xa(X).addScalar(.5)}];let J=[];for(let ee of[G.min.x,G.max.x])for(let fe of[G.min.y,G.max.y])for(let K of[G.min.z,G.max.z])J.push({node:X,point:new Gn.Vector3(ee,fe,K)});return J}),[f]),x=(0,ot.useRef)(!1),D=(0,ot.useRef)(new Gn.Matrix4),A=(0,ot.useRef)([]),S=(0,ot.useRef)(null),M=(0,ot.useRef)([]),_=(0,ot.useRef)(null),C=(0,ot.useRef)(null),E=(0,ot.useRef)(a);E.current=a;let L=(0,ot.useRef)(o);L.current=o;let k=(0,ot.useCallback)(()=>{if(!x.current){v.set(0,0,0);for(let X of f)X.updateWorldMatrix(!0,!1),v.add(Xa(X).applyMatrix4(X.matrixWorld));f.length&&v.divideScalar(f.length),g.identity(),n==="local"&&m&&(m.updateWorldMatrix(!0,!1),m.getWorldQuaternion(g)),b.compose(v,g,h)}},[v,b,g,f,m,n,h]),B=(0,ot.useCallback)(()=>{let X=1/0,G=new Gn.Vector3;for(let{node:J,point:ee}of T){J.updateWorldMatrix(!0,!1),G.copy(ee).applyMatrix4(J.matrixWorld);let fe=G.distanceToSquared(l.position);fe<X&&(X=fe,y.copy(G))}w.current?.position.copy(y)},[l,T,y]),j=(0,ot.useCallback)(()=>{let X=C.current;C.current=null,X?.target.hasPointerCapture(X.pointerId)&&X.target.releasePointerCapture(X.pointerId)},[]);(0,ot.useLayoutEffect)(()=>{k(),B()},[k,B]),(0,ot.useLayoutEffect)(()=>()=>{j();let X=_.current!==null;if(X&&(cancelAnimationFrame(_.current),_.current=null),x.current)for(let G of A.current)G.node.matrixAutoUpdate=G.startMatrixAutoUpdate,G.node.matrix.copy(G.startMatrix),G.node.position.copy(G.startPosition),G.node.quaternion.copy(G.startQuaternion),G.node.scale.copy(G.startScale),G.node.updateMatrixWorld(!0);(x.current||X)&&(x.current=!1,S.current=null,E.current(!1),s());for(let G of M.current)Jr(G);M.current=[]},[u,s,j]),(0,hl.useFrame)(()=>{k(),B()});let R=(0,ot.useCallback)(()=>{_.current!==null&&(cancelAnimationFrame(_.current),_.current=null),k(),A.current=rC(d.current),M.current=[];for(let{node:X}of A.current)for(let G of Si(X))Rs(G)||(Oo(G,G.matrixWorld),M.current.push(G));D.current.copy(b),S.current=null,x.current=!0,E.current(!0)},[b,k]),O=(0,ot.useCallback)((X,G)=>{if(!x.current)return;D.current.clone().premultiply(G).decompose(v,g,new Gn.Vector3),n==="world"&&g.identity(),b.compose(v,g,h),S.current=Ib(A.current,G),B(),s()},[v,b,g,s,n,B,h]),N=(0,ot.useCallback)(()=>{if(!x.current)return;x.current=!1,j();let X=S.current;if(S.current=null,X?.length)_.current=requestAnimationFrame(()=>{_.current=null,E.current(!1)}),L.current(X);else{for(let G of M.current)Jr(G);s(),E.current(!1)}M.current=[]},[s,j]);(0,ot.useEffect)(()=>{(!i&&C.current||!r&&x.current&&!C.current)&&N()},[i,r,N]);let H=(0,ot.useCallback)(X=>{let G=X.clone().project(l);return{x:c.left+(G.x*.5+.5)*c.width,y:c.top+(-G.y*.5+.5)*c.height}},[l,c]),Y=(0,ot.useCallback)(X=>{if(!i)return;X.stopPropagation(),X.preventDefault(),X.currentTarget.setPointerCapture(X.pointerId),R();let G=H(v);C.current={pointerId:X.pointerId,target:X.currentTarget,centerScreen:G,startDistance:Math.max(1,Math.hypot(X.clientX-G.x,X.clientY-G.y))}},[R,v,H,i]),ue=(0,ot.useCallback)(X=>{let G=C.current;if(!G||X.pointerId!==G.pointerId)return;X.stopPropagation();let J=Math.hypot(X.clientX-G.centerScreen.x,X.clientY-G.centerScreen.y),ee=Math.max(wL,J/G.startDistance),fe=new Gn.Vector3().setFromMatrixPosition(D.current),K=new Gn.Matrix4().makeTranslation(...fe.toArray()).multiply(new Gn.Matrix4().makeScale(ee,ee,ee)).multiply(new Gn.Matrix4().makeTranslation(...fe.clone().negate().toArray()));S.current=Ib(A.current,K,ee),B(),s()},[s,B]),be=(0,ot.useCallback)(X=>{X.pointerId===C.current?.pointerId&&(X.stopPropagation(),N())},[N]);return(0,oa.jsxs)("group",{children:[(0,oa.jsx)(wm.PivotControls,{matrix:b,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableAxes:!r,disableSliders:!r,disableRotations:!r,disableScaling:!0,onDragStart:R,onDrag:(X,G,J,ee)=>O(G,ee),onDragEnd:N}),i&&(0,oa.jsx)("group",{ref:w,children:(0,oa.jsx)(wm.Html,{children:(0,oa.jsx)("div",{onPointerDown:Y,onPointerMove:ue,onPointerUp:be,onPointerCancel:be,title:"Drag to resize",style:{position:"absolute",transform:"translate(-50%, -50%)",width:24,height:24,borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",background:"#113456",border:"2px solid #ffffff",boxShadow:"0 1px 4px rgba(0,0,0,0.4)",cursor:"nwse-resize",touchAction:"none",pointerEvents:"auto"},children:(0,oa.jsx)(iC.Maximize2,{size:13,color:"#ffffff"})})})})]})}var oC=require("three");function SL(e){let t=e.object;if(!t.isSkinnedMesh||!e.face||!t.skeleton)return null;let n=t.geometry,r=n.getAttribute("skinIndex"),i=n.getAttribute("skinWeight"),o=n.getAttribute("position");if(!r||!i||!o)return null;let a=t.worldToLocal(e.point.clone()),s=[e.face.a,e.face.b,e.face.c],l=new oC.Vector3,c=s[0],d=1/0;for(let f of s){l.fromBufferAttribute(o,f);let m=l.distanceToSquared(a);m<d&&(d=m,c=f)}let p=r.getComponent(c,0),u=i.getComponent(c,0);for(let f=1;f<4;f++){let m=i.getComponent(c,f);m>u&&(u=m,p=r.getComponent(c,f))}return t.skeleton.bones[p]??null}function aC(e){let t=SL(e)??e.object,n=ur(t);if(!n)return null;t.updateWorldMatrix(!0,!1);let r=t.worldToLocal(e.point.clone());return{anchorNodeName:n,anchorLocalPosition:[r.x,r.y,r.z]}}function sC(e,t,n){if(!e.anchorNodeName||!e.anchorLocalPosition)return!1;let r=_r(t,e.anchorNodeName);return r?(r.updateWorldMatrix(!0,!1),n.set(...e.anchorLocalPosition).applyMatrix4(r.matrixWorld),!0):!1}var uo=require("react"),Mm=require("@react-three/fiber"),Sm=require("three");function _m({annotation:e,enabled:t,controlsRef:n,offsetRef:r}){let i=(0,Mm.useThree)(u=>u.scene),o=(0,uo.useRef)(null),a=(0,uo.useRef)(!1),s=(0,uo.useMemo)(()=>new Sm.Vector3,[]),l=(0,uo.useMemo)(()=>new Sm.Vector3,[]),c=(0,uo.useMemo)(()=>new Sm.Vector3,[]),d=e?.anchorNodeName,p=e?.anchorLocalPosition;return(0,uo.useEffect)(()=>{o.current=null,a.current=!1},[d,e?.id]),(0,Mm.useFrame)(()=>{let u=n.current,f=r.current;if(!t||!u||!f||!d||!p){a.current=!1;return}let m=o.current;if((!m||!m.parent)&&(m=_r(i,d),o.current=m),!m){a.current=!1;return}m.updateWorldMatrix(!0,!1),s.set(p[0],p[1],p[2]).applyMatrix4(m.matrixWorld),!(a.current&&s.distanceToSquared(l)<1e-8)&&(l.copy(s),a.current=!0,c.copy(s).add(f),u.setLookAt(c.x,c.y,c.z,s.x,s.y,s.z,!0))}),null}var tt=require("react"),as=require("three");function lC({sceneAnnotations:e,controlledAnnotationCategories:t,onAnnotationCategoriesChange:n,showAnnotationFilters:r,initialCategories:i,controlledActiveAnnotation:o,onActiveAnnotationChange:a,onAnnotationsChange:s,controlsRef:l,sceneRef:c,annotationWorldPositionsRef:d,tourCameraOffsetRef:p,initialCameraStateRef:u,engagement:f,engagementRef:m}){let[v,g]=(0,tt.useState)(!1),[b,h]=(0,tt.useState)(()=>e??[]);(0,tt.useEffect)(()=>{if(b.length>0){let ge=b.reduce((Ce,Je)=>Math.max(Ce,Je.id),0);D.current=ge}else D.current=0},[b]);let[y,w]=(0,tt.useState)(null),[T,x]=(0,tt.useState)({title:"",description:""}),D=(0,tt.useRef)(0),[A,S]=(0,tt.useState)(null),[M,_]=(0,tt.useState)(-1),[C,E]=(0,tt.useState)(!1),L=(0,tt.useRef)(null),[k,B]=(0,tt.useState)(()=>i),j=t===void 0?k:t,R=(0,tt.useMemo)(()=>px(b,j),[b,j]),O=(0,tt.useMemo)(()=>[...new Set(b.map(Mh))].sort(),[b]),N=r&&O.some(Boolean),H=ge=>{t===void 0&&B(ge),n?.(ge)},Y=(0,tt.useMemo)(()=>[...R].sort((ge,Ce)=>ge.id-Ce.id),[R]),ue=(0,tt.useMemo)(()=>JSON.stringify([j?.map(ge=>ge.trim()).sort()??null,Y]),[j,Y]),be=(0,tt.useMemo)(()=>M<0||M>=Y.length?null:Y[M],[M,Y]),X=(0,tt.useCallback)(ge=>{if(o!==void 0){a?.(ge);return}S(ge?{annotation:ge}:null)},[o,a]),G=(0,tt.useRef)(null),J=(0,tt.useCallback)(ge=>{let Ce=l.current,Je=c.current;if(!Ce)return;let ve=new as.Vector3,qe=d.current.get(ge.id);qe?ve.copy(qe):Je&&sC(ge,Je,ve)||ve.set(ge.worldPosition[0],ge.worldPosition[1],ge.worldPosition[2]),p.current=null;let he=Ce.smoothTime;Ce.smoothTime=As(Ce,.6);let de=ge.worldNormal;if(Ju(ge.cameraView))Fl(Ce,ge.cameraView);else{if(Je){let ze=new as.Box3().setFromObject(Je),Pe=new as.Vector3;ze.getCenter(Pe);let ft=new as.Vector3;ze.getSize(ft);let At=ft.length()*.2,se;de?se=new as.Vector3(de[0],de[1],de[2]):se=ve.clone().sub(Pe),se.lengthSq()<1e-6&&se.set(0,0,1),se.normalize();let Re=Math.max(At*.6,.3),Ee=ve.clone().add(se.multiplyScalar(Re));Ce.setPosition(Ee.x,Ee.y,Ee.z,!0),ge.anchorNodeName&&ge.anchorLocalPosition&&(p.current=Ee.clone().sub(ve))}Ce.setTarget(ve.x,ve.y,ve.z,!0),G.current&&Ea(Ce,G.current)}L.current&&clearTimeout(L.current),L.current=setTimeout(()=>{Ce.smoothTime=he,L.current=null},800),X(ge)},[X]),ee=(0,tt.useCallback)(()=>{Y.length!==0&&(l.current&&(G.current=Es(l.current)),f.startTour(Y.length),g(!0),_(0),J(Y[0]))},[Y,J,f]),fe=(0,tt.useCallback)(()=>{if(Y.length===0||M<0)return;E(!0);let ge=(M-1+Y.length)%Y.length;_(ge),J(Y[ge]),setTimeout(()=>E(!1),500)},[M,Y,J]),K=(0,tt.useCallback)(()=>{if(Y.length===0||M<0)return;if(M===Y.length-1){if(f.completeTour(),g(!1),_(-1),X(null),l.current&&u.current){let Ce=u.current;Fl(l.current,{...G.current,...Ce}),G.current=null}return}E(!0);let ge=M+1;_(ge),J(Y[ge]),setTimeout(()=>E(!1),500)},[M,Y,J,X,f]),oe=(0,tt.useCallback)(()=>{if(f.stopTour(),g(!1),_(-1),X(null),l.current&&u.current){let ge=u.current;Fl(l.current,{...G.current,...ge}),G.current=null}},[X,f]);(0,tt.useEffect)(()=>{m.current.stopTour("annotations-changed"),G.current&&l.current&&(Fl(l.current,{...G.current,...u.current??{}}),G.current=null),p.current=null,_(-1),g(!1)},[ue]),(0,tt.useEffect)(()=>()=>{L.current&&clearTimeout(L.current)},[]),(0,tt.useEffect)(()=>{be&&v&&G.current&&X(be)},[be,X,v]),(0,tt.useEffect)(()=>{if(e===void 0)return;let ge=e.map(Ce=>({...Ce,localPosition:Ce.localPosition??Ce.worldPosition}));h(ge)},[e]);let ae=(0,tt.useCallback)(()=>{if(o!==void 0){a?.(null);return}S(null)},[o,a]),pe=o!==void 0?o:A?.annotation??null,De=(0,tt.useMemo)(()=>pe?R.find(Ce=>Ce.id===pe.id)??null:null,[pe,R]);(0,tt.useEffect)(()=>{pe&&!De&&ae()},[pe,De,ae]);let te=(0,tt.useCallback)(()=>{if(!y||!T.title.trim())return;D.current+=1;let Ce={id:D.current,worldPosition:y.worldPosition,localPosition:y.localPosition,worldNormal:y.worldNormal,anchorNodeName:y.anchor?.anchorNodeName,anchorLocalPosition:y.anchor?.anchorLocalPosition,title:T.title.trim(),description:T.description},Je=[...b,Ce];h(Je),s?.(Je),w(null)},[y,T,b,s]),Fe=(0,tt.useCallback)(()=>w(null),[]),We=(0,tt.useCallback)(ge=>{Ju(ge.cameraView)?J(ge):X(ge)},[X,J]);return{annotations:b,pendingAnnotation:y,setPendingAnnotation:w,annotationForm:T,setAnnotationForm:x,currentAnnotationIndex:M,isNavigating:C,localAnnotationCategories:k,selectedAnnotationCategories:j,visibleAnnotations:R,availableAnnotationCategories:O,annotationFiltersVisible:N,changeAnnotationCategories:H,sortedAnnotations:Y,currentAnnotation:be,setActiveAnnotation:X,focusAnnotation:J,startGuidedTour:ee,goToPreviousAnnotation:fe,goToNextAnnotation:K,stopGuidedTour:oe,closeViewingAnnotation:ae,activeAnnotation:pe,activeViewingAnnotation:De,isGuidedTourActive:v,handleAnnotationOk:te,handleAnnotationCancel:Fe,handleAnnotationMarkerClick:We}}var Hr=require("react"),pC=require("three");var hn=require("three");function cC(e,t){if(!(e instanceof hn.Mesh)||!t)return null;let n=e.geometry.getAttribute("position");if(!n?.count)return null;e.updateWorldMatrix(!0,!1),t.updateWorldMatrix(!0,!1);let r=new hn.Box3,i=new hn.Vector3;if(Kt(e)){let x=e;x.computeBoundingBox(),x.computeBoundingSphere();for(let D=0;D<n.count;D++)r.expandByPoint(e.getVertexPosition(D,i))}else e.geometry.boundingBox||e.geometry.computeBoundingBox(),r.copy(e.geometry.boundingBox);if(r.applyMatrix4(e.matrixWorld),r.isEmpty())return null;let o=r.getCenter(new hn.Vector3),a=t.getWorldPosition(new hn.Vector3),s=t.getWorldDirection(new hn.Vector3),l=t.isOrthographicCamera,c=new hn.Raycaster,d=x=>{if(l){let A=a.distanceTo(o)+r.getSize(i).length()+1;c.set(x.clone().addScaledVector(s,-A),s)}else c.set(a,x.clone().sub(a).normalize());let D=c.intersectObject(e,!1)[0];return D?Fa({...D,ray:c.ray},e):null},p=d(o);if(p)return p;let u=e.geometry.index,f=u?.count??n.count,m=new hn.Vector3,v=new hn.Vector3,g=new hn.Vector3,b=new hn.Vector3,h=new hn.Vector3,y=new hn.Vector3,w=null,T=1/0;for(let x=0;x+2<f;x+=3){if(e.getVertexPosition(u?u.getX(x):x,m).applyMatrix4(e.matrixWorld),e.getVertexPosition(u?u.getX(x+1):x+1,v).applyMatrix4(e.matrixWorld),e.getVertexPosition(u?u.getX(x+2):x+2,g).applyMatrix4(e.matrixWorld),b.copy(m).add(v).add(g).multiplyScalar(1/3),hn.Triangle.getNormal(m,v,g,h),l?y.copy(s).negate():y.copy(a).sub(b),h.dot(y)<=0)continue;let D=b.distanceToSquared(o);D<T&&(T=D,w=b.clone())}return w?d(w):null}var gn=require("three");function uC(e,t,n,r){if(!(e instanceof gn.Mesh)||!t)return null;e.updateWorldMatrix(!0,!1),t.updateWorldMatrix(!0,!1);let i=new gn.Vector3().fromArray(n.position);if(Kt(e)){let c=e;c.computeBoundingBox(),c.computeBoundingSphere();let d=c.geometry.getAttribute("position");if(!d)return null;let p=c.geometry.index,u=p?.count??d.count,f=new gn.Triangle,m=new gn.Vector3,v=new gn.Vector3,g=1/0,b=null;for(let h=0;h+2<u;h+=3){let y=[0,1,2].map(T=>p?p.getX(h+T):h+T);f.a.fromBufferAttribute(d,y[0]),f.b.fromBufferAttribute(d,y[1]),f.c.fromBufferAttribute(d,y[2]),f.closestPointToPoint(i,m);let w=m.distanceToSquared(i);if(!(w>=g||!f.getBarycoord(m,v))&&(g=w,b=new gn.Vector3().addScaledVector(c.getVertexPosition(y[0],new gn.Vector3),v.x).addScaledVector(c.getVertexPosition(y[1],new gn.Vector3),v.y).addScaledVector(c.getVertexPosition(y[2],new gn.Vector3),v.z),g<1e-12))break}if(!b)return null;i.copy(b)}if(i.applyMatrix4(e.matrixWorld).project(t),!Number.isFinite(i.x)||i.z<-1||i.z>1)return null;let o=new gn.Vector2(r==="left"?-.0035:r==="right"?.0035:0,r==="down"?-.0035:r==="up"?.0035:0),a=new gn.Raycaster,s=n.size*.01,l=new gn.Vector3().fromArray(n.position);for(let c=1;c>=1/1024;c/=2){a.setFromCamera(new gn.Vector2(i.x,i.y).addScaledVector(o,c),t);let d=a.intersectObject(e,!1)[0];if(d){let p=Fa({...d,ray:a.ray},e);if(new gn.Vector3().fromArray(p.position).distanceTo(l)<=s)return p}}return null}var dC=()=>`decal-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`;function mC({currentObjectBindings:e,currentObjectBindingsRef:t,applyObjectBindings:n,nodeRefsMap:r,controlsRef:i,decalMove:o,decalDragging:a,setDecalDragging:s,setDecalError:l,setDecalControl:c,decalRequestRef:d,onTextureUpload:p,currentPanelObjectId:u,modelUrl:f}){let m=(0,Hr.useCallback)((x,D)=>{let A=t.current,S=A[x];if(!S)return;let M=D(S.decals??[]);n({...A,[x]:{...S,decals:M.length>0?M:void 0}})},[n,e]),v=(0,Hr.useMemo)(()=>{if(!a)return null;let{objectKey:x,decalId:D}=a,A=e[x],S=A?.decals?.find(M=>M.id===D);return S?{objectId:A.modelObjectId??x,decal:S,onCancel:()=>s(null),onCommit:M=>{m(x,_=>_.map(C=>C.id===D?{...C,...M}:C)),s(null)}}:null},[a,e,m]),g=o??v,b=(0,Hr.useCallback)((x,D)=>{d.current++;let A=t.current[x],S=r.current[A?.modelObjectId??x],M=cC(S,i.current?.camera);if(!M)return l("Could not find a surface on this object for the decal."),!1;let _={...D,...M};return m(x,C=>[...C,_]),l(null),c(C=>C&&{...C,activeId:_.id}),s({objectKey:x,decalId:_.id}),!0},[m]),h=(0,Hr.useCallback)(x=>{let D=t.current[x],A=r.current[D?.modelObjectId??x]?.geometry;if(!A)return .2;A.boundingBox||A.computeBoundingBox();let S=A.boundingBox?.getSize(new pC.Vector3),M=S?Math.max(S.x,S.y,S.z):0;return M>0&&Number.isFinite(M)?M/3:.2},[]),y=(0,Hr.useRef)([]);(0,Hr.useEffect)(()=>()=>{for(let x of y.current)URL.revokeObjectURL(x)},[]);let w=(0,Hr.useCallback)(async(x,D,A)=>{let S=++d.current;s(null);let M;if(p){if(M=await p(A,x),S!==d.current)return}else M=URL.createObjectURL(A),y.current.push(M);b(D,{id:dC(),image:M,size:h(D)})},[h,p,b]);return(0,Hr.useEffect)(()=>{d.current++,l(null),s(null)},[u,f]),{editDecals:m,activeDecalMove:g,addCenteredDecal:b,decalSizeFor:h,startImageDecal:w,decalControlHandlers:(x,D)=>({onSelect:A=>{d.current++,l(null),s(null),c({...x,activeId:A})},onAddText:(A,S)=>b(D,{id:dC(),text:A,color:S,size:h(D)}),onAddImage:A=>{w(x.objectId,D,A)},onChange:(A,S)=>m(D,M=>M.map(_=>_.id===A?{..._,...S}:_)),onNudge:(A,S)=>{let M=t.current[D],_=M?.decals?.find(L=>L.id===A);if(!_)return;let C=r.current[M.modelObjectId??D],E=uC(C,i.current?.camera,_,S);if(!E){l("No visible surface in that direction. Try another arrow or rotate the view.");return}l(null),s(null),m(D,L=>L.map(k=>k.id===A?{...k,...E}:k))},onMove:A=>{d.current++,e[D]?.decals?.find(M=>M.id===A)&&(l(null),s(M=>M?.objectKey===D&&M.decalId===A?null:{objectKey:D,decalId:A}))},onRemove:A=>{s(null),m(D,S=>S.filter(M=>M.id!==A)),c({...x,activeId:null})},onClose:()=>{d.current++,l(null),s(null),c(null)}})}}var ru=require("react");function fC({canvasAreaElement:e,controlsRef:t,enabled:n}){let r=(0,ru.useRef)(new Set),i=(0,ru.useRef)(null);(0,ru.useEffect)(()=>{let o=e;if(!o||!n)return;let a=new Set(["w","a","s","d"," ","c"]),s=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"]),l=0,c=m=>m.code==="Space"?" ":m.key.toLowerCase(),d=()=>{r.current.clear(),l=0,i.current!==null&&(cancelAnimationFrame(i.current),i.current=null)},p=m=>{let v=t.current,g=r.current;if(!v||g.size===0){i.current=null,l=0;return}let b=l?Math.min((m-l)/1e3,.05):1/60;l=m;let h=Math.max(v.distance*.75,.01)*b;g.has("w")&&v.forward(h,!1),g.has("s")&&v.forward(-h,!1),g.has("a")&&v.truck(-h,0,!1),g.has("d")&&v.truck(h,0,!1),g.has(" ")&&v.truck(0,h,!1),g.has("c")&&v.truck(0,-h,!1),i.current=requestAnimationFrame(p)},u=m=>{if(m.target!==o){d();return}if(s.has(m.key)){let g=t.current;if(!g)return;m.preventDefault();let b=Math.PI/90,h=Math.max(g.distance*.05,.01);m.key==="ArrowUp"?m.shiftKey?g.forward(h,!0):g.rotate(0,-b,!0):m.key==="ArrowDown"?m.shiftKey?g.forward(-h,!0):g.rotate(0,b,!0):m.key==="ArrowLeft"?g.rotate(-b,0,!0):g.rotate(b,0,!0);return}let v=c(m);a.has(v)&&(m.preventDefault(),r.current.add(v),i.current===null&&(i.current=requestAnimationFrame(p)))},f=m=>{r.current.delete(c(m))};return o.addEventListener("keydown",u),o.addEventListener("keyup",f),o.addEventListener("blur",d),()=>{o.removeEventListener("keydown",u),o.removeEventListener("keyup",f),o.removeEventListener("blur",d),d()}},[e,t,n])}var En=require("react");var hC=1,ML=4,_L=.0015,CL=.1,TL=8;function gC({moveZoomTarget:e,setMoveZoomTarget:t,currentObjectBindingsRef:n,materialRefsOut:r,rendererCaptureRef:i,canvasAreaRef:o,canvasAreaElement:a,applyBindingStyle:s}){let l=(0,En.useRef)(null),c=(0,En.useRef)(!1),d=(0,En.useRef)([0,0]),p=(0,En.useRef)([0,0]),u=(0,En.useRef)(1),f=(0,En.useRef)(null),m=(0,En.useCallback)((w,T)=>{let x=e;if(!x)return;let D=n.current[x.objectKey]?.style?.material?.[x.textureKey],A=D?.path;if(!A)return;let S=D?.rotation??0,M=ei(x.textureKey),_=Wl(A,M),C=r.current[x.objectKey],E=Array.isArray(C)?C:C?[C]:[],L=jd[x.textureKey];for(let k of E){let B=k;L in B&&(B[L]=cd(B.userData,x.textureKey,_,A,w,T,S))}i.current?.invalidate()},[e]),v=(0,En.useCallback)(w=>{if(!e)return;w.currentTarget.setPointerCapture?.(w.pointerId),l.current={x:w.clientX,y:w.clientY},c.current=!1;let T=n.current[e.objectKey]?.style?.material?.[e.textureKey];if(d.current=T?.offset??[0,0],p.current=d.current,u.current=T?.scale??1,f.current===null){let x=()=>{i.current?.invalidate(),f.current=requestAnimationFrame(x)};f.current=requestAnimationFrame(x)}},[e]),g=(0,En.useCallback)(w=>{if(!e||!l.current)return;let T=o.current,x=T?.clientWidth||1,D=T?.clientHeight||1,A=w.clientX-l.current.x,S=w.clientY-l.current.y;if(!c.current&&Math.hypot(A,S)<ML)return;c.current=!0;let M=-(A/x)*hC,_=S/D*hC,[C,E]=d.current,L=[C+M,E+_];p.current=L,m(L,u.current),s(e.objectKey,k=>({...k,material:{...k?.material,[e.textureKey]:{...k?.material?.[e.textureKey],path:n.current[e.objectKey]?.style?.material?.[e.textureKey]?.path,offset:L}}}))},[e,m,s]),b=(0,En.useCallback)(w=>{if(!e)return;w.target?.releasePointerCapture?.(w.pointerId),f.current!==null&&(cancelAnimationFrame(f.current),f.current=null);let T=c.current,x=e;if(T){s(x.objectKey,D=>({...D,material:{...D?.material,[x.textureKey]:{...D?.material?.[x.textureKey],path:n.current[x.objectKey]?.style?.material?.[x.textureKey]?.path,offset:p.current}}})),l.current=null,c.current=!1;return}l.current=null,t(null)},[e,s]);(0,En.useEffect)(()=>{if(!e)return f.current!==null&&(cancelAnimationFrame(f.current),f.current=null),()=>{f.current!==null&&(cancelAnimationFrame(f.current),f.current=null)}},[e]),(0,En.useEffect)(()=>{let w=a;if(!(!w||!e))return w.addEventListener("pointermove",g),w.addEventListener("pointerup",b),w.addEventListener("pointercancel",b),()=>{w.removeEventListener("pointermove",g),w.removeEventListener("pointerup",b),w.removeEventListener("pointercancel",b)}},[a,e,g,b]);let h=(0,En.useCallback)(w=>{if(!e)return;w.preventDefault();let T=e,x=Math.exp(-w.deltaY*_L),D=Math.min(TL,Math.max(CL,u.current*x));u.current=D,m(p.current,D),s(T.objectKey,A=>({...A,material:{...A?.material,[T.textureKey]:{...A?.material?.[T.textureKey],path:n.current[T.objectKey]?.style?.material?.[T.textureKey]?.path,scale:D}}}))},[e,m,s]);return(0,En.useEffect)(()=>{let w=a;if(!(!w||!e))return w.addEventListener("wheel",h,{passive:!1}),()=>w.removeEventListener("wheel",h)},[a,e,h]),{beginMoveZoom:(0,En.useCallback)(w=>{c.current=!1,l.current=null,t(w)},[t]),handleMoveZoomPointerDown:v}}var Cm=require("@react-three/fiber"),PL=.2;function Bb({enabled:e,speed:t,controlsRef:n}){let r=(0,Cm.useThree)(i=>i.invalidate);return(0,Cm.useFrame)((i,o)=>{!e||!n.current||(n.current.rotate(o*PL*t,0,!1),r())}),null}var ui=require("lucide-react");var Pt=require("react/jsx-runtime");function bC({count:e,onDismiss:t}){let n=_e();return(0,Pt.jsxs)("div",{className:"ri-bindingsMismatchBanner",children:[(0,Pt.jsx)(ui.AlertTriangle,{size:14,className:"ri-bindingsMismatchBanner__icon"}),(0,Pt.jsx)("span",{children:n(e===1?"bindingMismatchOne":"bindingMismatchMany",{count:e})}),(0,Pt.jsx)("button",{type:"button",className:"ri-bindingsMismatchBanner__dismiss",onClick:r=>{r.stopPropagation(),t()},"aria-label":n("dismiss"),children:(0,Pt.jsx)(ui.X,{size:12})})]})}function yC({triangles:e,offset:t,onDismiss:n}){let r=_e();return(0,Pt.jsxs)("div",{className:`ri-largeModelBanner ${t?"ri-largeModelBanner--offset":""}`,children:[(0,Pt.jsx)(ui.AlertTriangle,{size:14,className:"ri-largeModelBanner__icon"}),(0,Pt.jsx)("span",{children:r("largeModelWarning",{millions:Math.round(e/1e6)})}),(0,Pt.jsx)("button",{type:"button",className:"ri-largeModelBanner__dismiss",onClick:i=>{i.stopPropagation(),n()},"aria-label":r("dismiss"),children:(0,Pt.jsx)(ui.X,{size:12})})]})}function vC({missing:e,total:t}){let n=_e();return(0,Pt.jsxs)("div",{className:"ri-uvCheckerBanner",role:"status",children:[(0,Pt.jsx)(ui.AlertTriangle,{size:14,className:"ri-uvCheckerBanner__icon"}),(0,Pt.jsxs)("span",{children:[e===t?"UV Checker: this model has no UV0 coordinates.":`UV Checker: ${e} of ${t} meshes have no UV0 coordinates.`," ",n("missingUVsAreShownInMagenta")]})]})}function xC({failure:e,source:t}){return(0,Pt.jsx)("div",{className:"ri-loadError",role:"alert",children:(0,Pt.jsxs)("div",{className:"ri-loadError__card",children:[(0,Pt.jsxs)("div",{className:"ri-loadError__header",children:[(0,Pt.jsx)(ui.AlertTriangle,{size:16,"aria-hidden":"true"}),(0,Pt.jsx)("span",{className:"ri-loadError__title",children:e.title})]}),(0,Pt.jsx)("p",{className:"ri-loadError__detail",children:e.detail}),(0,Pt.jsx)("p",{className:"ri-loadError__source",children:t}),e.technical&&(0,Pt.jsx)("p",{className:"ri-loadError__technical",children:e.technical})]})})}function wC({rebuilding:e,onReload:t}){let n=_e();return(0,Pt.jsx)("div",{className:"ri-contextRecovery",role:"alert",children:(0,Pt.jsxs)("div",{className:"ri-contextRecovery__card",children:[(0,Pt.jsx)(ui.AlertTriangle,{size:24,"aria-hidden":"true"}),(0,Pt.jsx)("h2",{children:n(e?"contextRestoringTitle":"contextLostTitle")}),(0,Pt.jsx)("p",{children:n(e?"contextRestoringMessage":"contextLostMessage")}),(0,Pt.jsxs)("button",{type:"button",onClick:t,disabled:e,children:[(0,Pt.jsx)(ui.RotateCcw,{size:16,"aria-hidden":"true"}),n("reloadViewer")]})]})})}var iu=require("react");function SC({applyBindingStyle:e,resolveObjectKey:t,onTextureUpload:n,fileInputRef:r,pendingObjectId:i,createdBlobUrls:o,texturePositioning:a,setMoveZoomTarget:s}){let l=(0,iu.useCallback)((b,h)=>{let y=o.current[b];y&&URL.revokeObjectURL(y),h.startsWith("blob:")?o.current[b]=h:delete o.current[b],e(b,w=>({...w,material:{...w?.material,texture:{path:h}}}))},[e]),c=b=>{let h=b.target.files?.[0],y=i.current;if(!h||!y)return;let w=t(y);w&&(n?n(h,w).then(T=>l(w,T),T=>console.error("onTextureUpload failed:",T)):l(w,URL.createObjectURL(h)),b.target.value="")},d=b=>{i.current=b,r.current?.click()},p=b=>{let h=t(b);if(!h)return;e(h,w=>w?.material?.texture?{...w,material:{...w.material,texture:void 0}}:w);let y=o.current[h];y&&(URL.revokeObjectURL(y),delete o.current[h])},u=!!a,f=typeof a=="object"?a:void 0,m=(0,iu.useCallback)((b,h,y)=>{if(f?.onOffsetChange){f.onOffsetChange(b,h,y);return}e(b,w=>{let T=w?.material?.texture;if(!T?.path)return w;let x=T.offset??[0,0],D=[x[0],x[1]];return D[h]=y,{...w,material:{...w?.material,texture:{...T,offset:D}}}})},[e,f]),v=(0,iu.useCallback)((b,h)=>{if(f?.onRotationChange){f.onRotationChange(b,h);return}e(b,y=>{let w=y?.material?.texture;if(!w?.path)return y;let T=(h%360+360)%360;return{...y,material:{...y?.material,texture:{...w,rotation:T*Math.PI/180}}}})},[e,f]),g=(0,iu.useCallback)(()=>{s(null),f?.onEndPositioning?.()},[f]);return{handleFileChange:c,triggerFileUpload:d,clearTexture:p,texturePositioningEnabled:u,texturePositioningOverrides:f,setMaterialTextureOffset:m,setMaterialTextureRotation:v,endMaterialTexturePositioning:g}}function MC({materialPopup:e,resolveObjectKey:t,currentObjectBindings:n,nodeRefsMap:r,moveZoomTarget:i,texturePositioningEnabled:o,texturePositioningOverrides:a,setMaterialTextureOffset:s,setMaterialTextureRotation:l,endMaterialTexturePositioning:c}){let d=e?t(e.objectId):null,p=d?n[d]?.style?.material?.texture?.path:void 0,u=p?Do(p)??p:void 0,f=Vd(d?r.current[d]:null),m=o?a?.offset??(d?n[d]?.style?.material?.texture?.offset:void 0):void 0,v=o?a?.rotationDegrees??(d?((n[d]?.style?.material?.texture?.rotation??0)*180/Math.PI%360+360)%360:0):0,g=o?a?.isPositioning??!!(d&&i?.objectKey===d&&i?.textureKey==="texture"):!1;return{materialTextureUrl:u,materialTargetTakesImage:f,materialTextureOffset:m,materialTextureRotationDegrees:v,isMaterialTexturePositioning:g,materialTextureOnOffsetChange:o?s:void 0,materialTextureOnRotationChange:o?l:void 0,materialTextureOnEndPositioning:o?c:void 0}}var gl=require("react");var Tm=e=>e==="#000000"?"#ffffff":e;function _C({nodeRefsMap:e,currentObjectBindingsRef:t,applyObjectBindings:n}){let r=(0,gl.useRef)({}),i=(0,gl.useCallback)(a=>{let s=gw(e.current[a]),l=t.current[a]?.style?.material,c=l?.emissive??s.color,d=l?.emissiveIntensity??s.intensity;return{color:c,intensity:d,on:c!=="#000000"&&d>0}},[]),o=(0,gl.useCallback)((a,s)=>{let l=t.current,c=l[a];c&&n({...l,[a]:{...c,style:{...c.style,material:{...c.style?.material,...s}}}})},[n]);return{glowMemoryRef:r,readObjectGlow:i,applyGlow:o}}function CC({setCurrentAction:e,bindingKeyIndex:t,currentObjectBindings:n,applyObjectBindings:r,resolveObjectKey:i,closeColorPicker:o,setColorPicker:a,setMaterialPopupsByObject:s,setItemMaterials:l,getPopoverPosition:c,decalRequestRef:d,setDecalError:p,setDecalDragging:u,setDecalControl:f,resolvedSceneConfigRef:m,applyLightPatches:v,readObjectGlow:g,applyGlow:b,glowMemoryRef:h,setLightControl:y,onAction:w}){return(0,gl.useCallback)(T=>{let{objectId:x,action:D,binding:A}=T;switch(e(T),D.id){case"toggle-visibility":{let S=x;A?.modelObjectId&&(S=t.byModelObjectId.get(A.modelObjectId)??S);let M=n[S],_=M?.visible===!1;M&&r({...n,[S]:{...M,visible:_}});break}case"change-color":o(),s(S=>{if(!(x in S))return S;let M={...S};return delete M[x],M}),l(S=>{let M=i(x,A)??x,_=S[x]?.hex,C=n[M]?.style?.material?.baseColor;return{...S,[x]:{...S[x],hex:_??C??"#ffffff"}}}),a(c(x,225,250,A,T));break;case"change-material":o(),s(S=>{if(x in S){let M={...S};return delete M[x],M}return{...S,[x]:c(x,300,320,A,T)}});break;case"add-text":case"add-image":{o();let S=D.id;d.current++,p(null),u(null),f(M=>M?.objectId===x&&M.kind===S?null:{objectId:x,kind:S,activeId:null});break}case"toggle-light":case"change-light-color":case"set-brightness":{let S=i(x,A);if(!S)break;let M=hw(m.current,n,S);if(D.id==="toggle-light"){if(M.length>0){let L=!M.some(k=>k.visible);v(Object.fromEntries(M.map(k=>[k.id,{visible:L}])));break}let E=g(S);E.on?(h.current[S]=E.intensity,b(S,{emissiveIntensity:0})):b(S,{emissive:Tm(E.color),emissiveIntensity:h.current[S]??1});break}let _=D.id,C=M.length>0?null:g(S);y(E=>E?.objectId===x&&E.kind===_?null:{objectId:x,kind:_,target:C?{type:"glow",objectKey:S,baseIntensity:C.on?C.intensity:h.current[S]??1}:{type:"lights",lightIds:M.map(L=>L.id),baseIntensity:Object.fromEntries(M.map(L=>[L.id,L.intensity]))},percent:C&&!C.on?0:100});break}default:break}w?.(T)},[r,b,v,g,n,c,w,o,i,t])}var Nb=require("react"),Wt=require("lucide-react");var ie=require("react/jsx-runtime");function TC({categories:e,selected:t,disabled:n,onChange:r}){let i=_e();return(0,ie.jsxs)("div",{className:"ri-annotationFilters",role:"group","aria-label":i("annotationCategories"),onPointerDown:o=>o.stopPropagation(),children:[(0,ie.jsx)("span",{children:i("annotations")}),(0,ie.jsx)("button",{type:"button","aria-pressed":t===null,disabled:n,onClick:()=>r(null),children:i("all")}),e.map(o=>(0,ie.jsx)("button",{type:"button",disabled:n,"aria-pressed":t?.some(a=>a.trim()===o)??!1,onClick:()=>r(t===null?[o]:t.some(a=>a.trim()===o)?t.filter(a=>a.trim()!==o):[...t,o]),children:o||i("uncategorized")},o))]})}function PC({onCancel:e}){let t=_e();return(0,ie.jsxs)("div",{className:"ri-isolationPill",role:"status",onPointerDown:n=>n.stopPropagation(),children:[(0,ie.jsx)("span",{className:"ri-isolationPill__label",children:t("decalDragHint")}),(0,ie.jsx)("button",{type:"button",className:"ri-isolationPill__button",onClick:e,children:t("cancel")})]})}function AC({label:e,onShowAll:t}){let n=_e();return(0,ie.jsxs)("div",{className:"ri-isolationPill",onPointerDown:r=>r.stopPropagation(),children:[(0,ie.jsx)("span",{className:"ri-isolationPill__label",children:e}),(0,ie.jsx)("button",{type:"button",className:"ri-isolationPill__button",onClick:t,children:n("showAll")})]})}function EC({groups:e,activeVariants:t,onSelect:n}){let r=_e();return(0,ie.jsx)(ie.Fragment,{children:e.map((i,o)=>(0,ie.jsxs)("div",{className:"ri-variantPicker",role:"group","aria-label":i.name??r("materialVariants"),onPointerDown:a=>a.stopPropagation(),children:[i.name?(0,ie.jsx)("span",{className:"ri-variantPicker__group","aria-hidden":"true",children:i.name}):null,i.variants.map(a=>{let s=t.includes(a.name);return(0,ie.jsxs)("button",{type:"button",className:`ri-variantPicker__option ${s?"ri-variantPicker__option--active":""}`,"aria-pressed":s,onClick:()=>n(a.name),children:[a.swatch?(0,ie.jsx)("span",{className:"ri-variantPicker__swatch",style:{background:a.swatch},"aria-hidden":"true"}):null,a.label]},a.name)})]},i.name??`group-${o}`))})}function RC({count:e,active:t,index:n,navigating:r,onStart:i,onPrevious:o,onNext:a,onStop:s}){let l=_e();return t?(0,ie.jsxs)(ie.Fragment,{children:[(0,ie.jsxs)("button",{className:"ri-tourButton",onClick:o,disabled:r||e===0||n<=0,title:l("previousAnnotation"),children:[(0,ie.jsx)(Wt.ChevronLeft,{size:16}),(0,ie.jsx)("span",{children:l("previous")})]}),(0,ie.jsx)("button",{className:"ri-tourButton ri-tourButton--stop",onClick:s,title:l("stopGuidedTour"),children:(0,ie.jsx)(Wt.Square,{size:16})}),(0,ie.jsxs)("button",{className:"ri-tourButton ri-tourButton--next",onClick:a,disabled:r||e===0,title:l("nextAnnotation"),children:[(0,ie.jsx)("span",{children:l("next")}),(0,ie.jsx)(Wt.ChevronRight,{size:16})]})]}):(0,ie.jsx)("button",{className:"ri-navButtonSingle",onClick:i,disabled:e===0,title:l("startGuidedTour"),children:l("guidedTour")})}function OC({fullscreen:e,disabled:t}){let n=_e();return(0,ie.jsxs)("div",{className:"mv-fullscreenWrapper",children:[e.error&&(0,ie.jsx)("div",{className:"mv-fullscreenError",role:"alert",children:n.message(e.error)}),(0,ie.jsx)("button",{type:"button",className:"mv-fullscreenButton",onClick:()=>{e.toggle()},disabled:e.pending||t,title:e.active?n("exitFullscreen"):n("enterFullscreen"),"aria-label":e.active?n("exitFullscreen"):n("enterFullscreen"),"aria-pressed":e.active,children:e.active?(0,ie.jsx)(Wt.Minimize,{}):(0,ie.jsx)(Wt.Maximize,{})})]})}function DC({open:e,current:t,disabled:n,onSelect:r,onToggle:i}){let o=_e();return(0,ie.jsxs)("div",{className:"mv-controllersWrapper",onPointerDown:a=>a.stopPropagation(),children:[e&&(0,ie.jsxs)("div",{className:"mv-controllersMenu",children:[(0,ie.jsx)("button",{type:"button",className:`mv-controllersMenuItem ${t==="orbit"?"mv-controllersMenuItem--active":""}`,onClick:()=>r("orbit"),children:o("orbitControl")}),(0,ie.jsx)("button",{type:"button",className:`mv-controllersMenuItem ${t==="pointerLock"?"mv-controllersMenuItem--active":""}`,onClick:()=>r("pointerLock"),children:o("pointLock")})]}),(0,ie.jsx)("button",{className:"mv-controllersButton",onClick:i,title:o("cameraController"),"aria-label":o("cameraControllerSettings"),disabled:n,children:(0,ie.jsx)(Wt.Orbit,{size:15})})]})}function LC({menu:e,recording:t,hasScene:n,canCaptureImage:r,canRecord:i,hasCinematic:o,hasMultipleModels:a=!1}){let s=_e(),l=(0,Nb.useId)(),c=(0,Nb.useId)(),{isDownloading:d,downloadMenuOpen:p,uvExportError:u,toggleDownloadMenu:f,handleDownloadMesh:m,handleDownloadSeparateMeshes:v,handleDownloadScreenshot:g,handleDownloadUvLayout:b,handleDownloadVideo:h,videoFormat:y,setVideoFormat:w,videoExportError:T}=e;return(0,ie.jsxs)("div",{className:"mv-downloadWrapper",onPointerDown:x=>x.stopPropagation(),children:[p&&(0,ie.jsxs)("div",{className:"mv-downloadMenu",children:[(0,ie.jsxs)("button",{className:"mv-downloadMenuItem",onClick:m,disabled:d||t||!n,"aria-describedby":l,children:[(0,ie.jsx)(Wt.Box,{size:14}),s(a?"downloadCombinedGLB":"downloadGLB")]}),(0,ie.jsx)("p",{className:"mv-downloadMenuDescription",id:l,children:s("downloadGLBDescription")}),e.openConfiguredAR&&(0,ie.jsxs)("button",{type:"button",className:"mv-downloadMenuItem",onClick:e.openConfiguredAR,disabled:t||!n,"aria-haspopup":"dialog",children:[(0,ie.jsx)(Wt.Box,{size:14}),s("arConfiguredButton")]}),a&&(0,ie.jsxs)(ie.Fragment,{children:[(0,ie.jsxs)("button",{className:"mv-downloadMenuItem",onClick:v,disabled:d||t||!n,"aria-describedby":c,children:[(0,ie.jsx)(Wt.Box,{size:14}),s("downloadSeparateGLBs")]}),(0,ie.jsx)("p",{className:"mv-downloadMenuDescription",id:c,children:s("downloadSeparateGLBsDescription")})]}),(0,ie.jsx)("div",{className:"mv-downloadMenuDivider"}),r&&(0,ie.jsxs)(ie.Fragment,{children:[(0,ie.jsxs)("button",{className:"mv-downloadMenuItem",onClick:g,disabled:t||!n,children:[(0,ie.jsx)(Wt.Camera,{size:14}),s("downloadPNG")]}),(0,ie.jsx)("div",{className:"mv-downloadMenuDivider"})]}),(0,ie.jsxs)("button",{className:"mv-downloadMenuItem",onClick:b,disabled:t||!n,children:[(0,ie.jsx)(Wt.FileImage,{size:14}),s("downloadUVLayout")]}),(0,ie.jsx)("div",{className:"mv-downloadMenuDivider"}),(0,ie.jsxs)("label",{className:"mv-downloadMenuItem",children:[s("videoFormat"),(0,ie.jsxs)("select",{"aria-label":s("videoFormat"),value:y,onChange:x=>w(x.target.value),children:[(0,ie.jsx)("option",{value:"auto",children:s("auto")}),(0,ie.jsx)("option",{value:"webm",disabled:!Yi("webm"),children:"WebM"}),(0,ie.jsx)("option",{value:"mp4",disabled:!Yi("mp4"),children:"MP4"}),(0,ie.jsx)("option",{value:"gif",disabled:!Yi("gif"),children:"GIF"})]})]}),(0,ie.jsxs)("button",{className:"mv-downloadMenuItem",onClick:()=>{h("turntable")},disabled:t||!i||!Yi(y),children:[(0,ie.jsx)(Wt.Play,{size:14}),s("recordTurntableVideo")]}),o&&(0,ie.jsxs)("button",{className:"mv-downloadMenuItem",onClick:()=>{h("cinematic")},disabled:t||!i||!Yi(y),children:[(0,ie.jsx)(Wt.Play,{size:14}),s("recordCinematicVideo")]}),!Yi()&&!Yi("gif")&&(0,ie.jsx)("div",{className:"mv-downloadMenuNotice",role:"status",children:s("videoUnsupported")}),T&&(0,ie.jsx)("div",{className:"mv-downloadMenuNotice",role:"alert",children:s.message(T)}),u&&(0,ie.jsx)("div",{className:"mv-downloadMenuNotice",role:"status","aria-live":"polite",children:s.message(u)})]}),(0,ie.jsx)("button",{className:"mv-downloadButton",onClick:f,disabled:d||t||!n,title:s("downloadOptions"),children:d?(0,ie.jsxs)(ie.Fragment,{children:[(0,ie.jsx)("span",{className:"mv-downloadButton__spinner"}),s("exporting")]}):(0,ie.jsxs)(ie.Fragment,{children:[(0,ie.jsx)(Wt.Download,{size:15}),s("download")]})})]})}function IC({x:e,y:t,form:n,setForm:r,onOk:i,onCancel:o}){let a=_e();return(0,ie.jsxs)("div",{className:"ri-annotationPopup",style:{left:e,top:t},onPointerDown:s=>s.stopPropagation(),onClick:s=>s.stopPropagation(),children:[(0,ie.jsx)("input",{autoFocus:!0,className:"ri-annotationInput",placeholder:a("annotationTitlePlaceholder"),value:n.title,onChange:s=>r(l=>({...l,title:s.target.value})),onKeyDown:s=>{s.key==="Enter"&&i(),s.key==="Escape"&&o()}}),(0,ie.jsx)("textarea",{className:"ri-annotationTextarea",placeholder:a("description"),value:n.description,onChange:s=>r(l=>({...l,description:s.target.value})),onKeyDown:s=>{s.key==="Escape"&&o()},rows:5}),(0,ie.jsxs)("div",{className:"ri-annotationActions",children:[(0,ie.jsx)("button",{onClick:i,className:`ri-annotationOkBtn ${n.title.trim()?"":"disabled"}`,disabled:!n.title.trim(),children:a("ok")}),(0,ie.jsx)("button",{onClick:o,className:"ri-annotationCancelBtn",children:a("cancel")}),(0,ie.jsx)("div",{className:"ri-annotationIcons"})]})]})}var au=require("react");var kC=require("lucide-react");var ou=require("react/jsx-runtime");function BC({requiredTier:e,feature:t}){return(0,ou.jsxs)("div",{className:"bb-tierLock",children:[(0,ou.jsx)(kC.Lock,{size:16}),(0,ou.jsxs)("p",{className:"bb-tierLockMessage",children:[t," requires the ",q_[e]," plan or higher."]})]})}var Me=require("react/jsx-runtime");function NC({section:e,onChange:t}){let{isInsideEditor:n,tier:r}=Qo(),i=n&&!tm(r,"sectionPlanes"),[o,a]=(0,au.useState)(""),s=e.mode??"plane",l=e.planes??[],c=l.find(m=>m.id===e.activePlaneId)??l[0],d=s==="planes"?c:e,p=m=>t(s==="planes"?{planes:l.map(v=>v.id===c?.id?{...v,...m}:v)}:m),u={x:0,y:1,z:2},f=()=>globalThis.crypto?.randomUUID?.()??`section-${Date.now()}-${Math.random().toString(36).slice(2)}`;return(0,Me.jsxs)("div",{className:"ri-sectionControls",children:[i?(0,Me.jsx)(BC,{requiredTier:"starter",feature:"Multiple planes and section boxes"}):null,(0,Me.jsxs)("label",{children:["Cut type",(0,Me.jsxs)("select",{value:s,disabled:i,onChange:m=>{let v=m.target.value;t({mode:v,...v==="planes"&&!l.length?{planes:[{id:"cut-1",name:"Plane 1",axis:e.axis,position:e.position,flip:e.flip,enabled:!0,...e.normal?{normal:e.normal}:{}}],activePlaneId:"cut-1"}:{}})},children:[(0,Me.jsx)("option",{value:"plane",children:"Single plane"}),(0,Me.jsx)("option",{value:"planes",children:"Multiple planes"}),(0,Me.jsx)("option",{value:"box",children:"Section box"})]})]}),s==="planes"&&(0,Me.jsxs)(Me.Fragment,{children:[(0,Me.jsxs)("label",{children:["Active plane",(0,Me.jsx)("select",{value:c?.id??"",onChange:m=>t({activePlaneId:m.target.value}),children:l.map(m=>(0,Me.jsxs)("option",{value:m.id,children:[m.name,m.enabled?"":" (off)"]},m.id))})]}),(0,Me.jsxs)("div",{className:"ri-sectionControls__actions",children:[(0,Me.jsx)("button",{type:"button",disabled:l.length>=6,onClick:()=>{let m=f();t({planes:[...l,{id:m,name:`Plane ${l.length+1}`,axis:"x",position:.5,flip:!1,enabled:!0}],activePlaneId:m})},children:"Add plane"}),(0,Me.jsx)("button",{type:"button",disabled:!c,onClick:()=>t({planes:l.filter(m=>m.id!==c?.id),activePlaneId:l.find(m=>m.id!==c?.id)?.id}),children:"Remove plane"})]}),c&&(0,Me.jsxs)(Me.Fragment,{children:[(0,Me.jsxs)("label",{children:["Name",(0,Me.jsx)("input",{value:c.name,maxLength:200,onChange:m=>p({name:m.target.value.trim()||"Plane"})})]}),(0,Me.jsxs)("label",{className:"ri-sectionControls__check",children:[(0,Me.jsx)("input",{type:"checkbox",checked:c.enabled,onChange:m=>p({enabled:m.target.checked})}),"Enable this plane"]})]})]}),s==="box"?(0,Me.jsxs)(Me.Fragment,{children:[(0,Me.jsxs)("label",{children:["Draggable face",(0,Me.jsx)("select",{value:e.activePlaneId?.match(/^[xyz]-(min|max)$/)?e.activePlaneId:"x-min",onChange:m=>t({activePlaneId:m.target.value}),children:["x","y","z"].flatMap(m=>["min","max"].map(v=>(0,Me.jsxs)("option",{value:`${m}-${v}`,children:[m.toUpperCase()," ",v]},`${m}-${v}`)))})]}),(0,Me.jsx)("div",{className:"ri-sectionControls__bounds",children:["x","y","z"].flatMap(m=>["min","max"].map(v=>{let g=(e.box??{min:[0,0,0],max:[1,1,1]})[v][u[m]];return(0,Me.jsxs)("label",{children:[m.toUpperCase()," ",v,(0,Me.jsxs)("output",{children:[Math.round(g*100),"%"]}),(0,Me.jsx)("input",{"aria-label":`${m.toUpperCase()} ${v}`,type:"range",min:"0",max:"1",step:".001",value:g,onChange:b=>t(pm(e,`${m}-${v}`,Number(b.target.value)))})]},m+v)}))}),(0,Me.jsxs)("label",{className:"ri-sectionControls__check",children:[(0,Me.jsx)("input",{type:"checkbox",checked:!!e.invertBox,onChange:m=>t({invertBox:m.target.checked})}),"Keep outside box"]})]}):d&&(0,Me.jsxs)(Me.Fragment,{children:[(0,Me.jsxs)("label",{children:["Orientation",(0,Me.jsxs)("select",{value:d.normal?"custom":d.axis,onChange:m=>m.target.value==="custom"?p({normal:[1,1,0]}):p({axis:m.target.value,normal:void 0}),children:[(0,Me.jsx)("option",{value:"x",children:"X"}),(0,Me.jsx)("option",{value:"y",children:"Y"}),(0,Me.jsx)("option",{value:"z",children:"Z"}),(0,Me.jsx)("option",{value:"custom",children:"Angled plane"})]})]}),d.normal&&(0,Me.jsx)("div",{className:"ri-sectionControls__vector",children:[0,1,2].map(m=>(0,Me.jsxs)("label",{children:["Normal ","XYZ"[m],(0,Me.jsx)(AL,{label:`Normal ${"XYZ"[m]}`,value:d.normal[m],onChange:v=>{let g=[...d.normal];g[m]=v,Math.hypot(...g)>1e-8&&p({normal:g})}})]},m))}),(0,Me.jsxs)("label",{children:["Position",(0,Me.jsxs)("output",{children:[Math.round(d.position*100),"%"]}),(0,Me.jsx)("input",{type:"range",min:"0",max:"1",step:".001","aria-label":"Section position",value:d.position,onChange:m=>p({position:Number(m.target.value)})})]}),(0,Me.jsxs)("label",{className:"ri-sectionControls__check",children:[(0,Me.jsx)("input",{type:"checkbox",checked:d.flip,onChange:m=>p({flip:m.target.checked})}),"Keep the other side"]})]}),(0,Me.jsxs)("details",{children:[(0,Me.jsxs)("summary",{children:["Saved section presets (",e.presets?.length??0,")"]}),(0,Me.jsxs)("form",{onSubmit:m=>{m.preventDefault();let v=o.trim();!v||(e.presets?.length??0)>=32||(t({presets:[...e.presets??[],{id:f(),name:v,settings:ql(e)}]}),a(""))},children:[(0,Me.jsxs)("label",{children:["Preset name",(0,Me.jsx)("input",{value:o,maxLength:200,onChange:m=>a(m.target.value)})]}),(0,Me.jsx)("button",{disabled:!o.trim()||(e.presets?.length??0)>=32,children:"Save current section"})]}),e.presets?.map(m=>(0,Me.jsxs)("div",{className:"ri-sectionControls__actions",children:[(0,Me.jsx)("button",{type:"button",onClick:()=>t({...ql(m.settings),normal:m.settings.normal,planes:m.settings.planes,activePlaneId:m.settings.activePlaneId,box:m.settings.box,invertBox:m.settings.invertBox,mode:m.settings.mode}),children:m.name}),(0,Me.jsx)("button",{type:"button","aria-label":`Delete preset ${m.name}`,onClick:()=>t({presets:e.presets?.filter(v=>v.id!==m.id)}),children:"Delete"})]},m.id))]}),(0,Me.jsx)("p",{children:"Visual cuts of the active asset. Multiple planes keep their common region. Presets are saved with your scene."})]})}function AL({label:e,value:t,onChange:n}){let[r,i]=(0,au.useState)(String(t));return(0,au.useEffect)(()=>i(String(t)),[t]),(0,Me.jsx)("input",{type:"number",step:".1","aria-label":e,value:r,onChange:o=>{let a=o.target.value;i(a),a.trim()&&Number.isFinite(Number(a))&&n(Number(a))},onBlur:()=>i(String(t))})}var VC=require("react"),jC=require("qrcode.react"),qt=require("lucide-react");var Ie=require("react/jsx-runtime");function UC({top:e,configuredHandoff:t=!1,xrStore:n,arSupported:r,vrSupported:i,quickLookSupported:o,mobileHandoffUrl:a,mobileHandoffOpen:s,onQuickLook:l,onOpenMobileHandoff:c}){let d=_e();return(0,Ie.jsxs)("div",{className:"ri-xrTools",style:{top:`${e}px`},children:[!r&&o&&(0,Ie.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:l,title:d("viewThisModelInARWithAppleQuickLook"),children:[(0,Ie.jsx)(qt.Box,{size:16}),d("viewInAR")]}),(a||t&&!o)&&(0,Ie.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:c,title:d(t?"arConfiguredTitle":"openThisExperienceOnAPhoneForAR"),"aria-haspopup":"dialog","aria-expanded":s,children:[(0,Ie.jsx)(qt.QrCode,{size:16}),(0,Ie.jsx)("span",{children:d(t?"arConfiguredButton":"openOnPhone")})]}),n&&r&&(0,Ie.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>n.enterAR().catch(p=>{console.error("Failed to enter AR session:",p)}),title:d("viewThisModelInYourSpace"),children:[(0,Ie.jsx)(qt.Smartphone,{size:16}),(0,Ie.jsx)("span",{children:d("enterAR")})]}),n&&i&&(0,Ie.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>n.enterVR().catch(p=>{console.error("Failed to enter VR session:",p)}),title:d("viewThisModelInVR"),children:[(0,Ie.jsx)(qt.RectangleGoggles,{size:16}),(0,Ie.jsx)("span",{children:d("enterVR")})]})]})}function zC({url:e,onClose:t}){let n=_e();return(0,Ie.jsx)("div",{className:"ri-mobileHandoffBackdrop",onMouseDown:r=>{r.target===r.currentTarget&&t()},children:(0,Ie.jsxs)("section",{className:"ri-mobileHandoffDialog",role:"dialog","aria-modal":"true","aria-labelledby":"ri-mobileHandoffTitle",children:[(0,Ie.jsx)("button",{type:"button",className:"ri-mobileHandoffClose",onClick:t,"aria-label":n("closePhoneHandoff"),children:(0,Ie.jsx)(qt.X,{size:18})}),(0,Ie.jsx)(qt.Smartphone,{size:22,"aria-hidden":"true"}),(0,Ie.jsx)("h2",{id:"ri-mobileHandoffTitle",children:n("viewInAR")}),(0,Ie.jsx)("p",{children:n("arScanCode")}),(0,Ie.jsx)("div",{className:"ri-mobileHandoffQr",children:(0,Ie.jsx)(jC.QRCodeSVG,{value:e,size:208,level:"M",marginSize:4,title:n("qrCodeToOpenThisModelOnAPhone")})})]})})}function FC({top:e,active:t,onToggle:n}){let r=_e();return(0,Ie.jsx)("div",{className:"ri-uvCheckerTools",style:{top:`${e}px`},children:(0,Ie.jsx)("button",{type:"button",className:`ri-measureButton ${t?"ri-measureButton--active":""}`,onClick:n,title:r(t?"disableUVChecker":"enableUVChecker"),"aria-label":r(t?"disableUVChecker":"enableUVChecker"),"aria-pressed":t,children:(0,Ie.jsx)(qt.Grid3X3,{size:16})})})}function HC({top:e,open:t,factor:n,onToggleOpen:r,onFactorChange:i}){let o=_e();return(0,Ie.jsxs)("div",{className:"ri-explodeTools",style:{top:`${e}px`},children:[(0,Ie.jsx)("button",{type:"button",className:`ri-measureButton ${t||n>0?"ri-measureButton--active":""}`,onClick:r,title:o("explodedView"),"aria-pressed":t,children:(0,Ie.jsx)(qt.Expand,{size:16})}),t&&(0,Ie.jsx)("div",{className:"ri-explodeSlider",onPointerDown:a=>a.stopPropagation(),children:(0,Ie.jsx)("input",{type:"range",min:0,max:100,value:Math.round(n*100),onChange:a=>i(Number(a.target.value)/100),"aria-label":o("explodeAmount")})})]})}function GC({top:e,section:t,onChange:n}){let r=_e(),[i,o]=(0,VC.useState)(!1);return(0,Ie.jsxs)("div",{className:"ri-sectionTools",style:{top:`${e}px`},children:[(0,Ie.jsx)("button",{type:"button",className:`ri-measureButton ${t.enabled?"ri-measureButton--active":""}`,onClick:()=>n({enabled:!t.enabled}),title:t.enabled?r("removeSectionCut"):r("sectionCut"),"aria-label":r("sectionCut"),"aria-pressed":t.enabled,children:(0,Ie.jsx)(qt.Slice,{size:16})}),t.enabled&&(0,Ie.jsx)("button",{type:"button",className:"ri-measureButton","aria-label":"Section settings",title:"Section settings","aria-expanded":i,onClick:()=>o(a=>!a),children:(0,Ie.jsx)(qt.ChevronDown,{size:14})}),t.enabled&&i&&(0,Ie.jsx)("div",{className:"ri-sectionPanel",onPointerDown:a=>a.stopPropagation(),children:(0,Ie.jsx)(NC,{section:t,onChange:n})})]})}function WC({top:e,playing:t,disabled:n,onPlay:r,onPause:i,onStop:o}){let a=_e();return(0,Ie.jsxs)("div",{className:"ri-cinematicTools",style:{top:`${e}px`},children:[(0,Ie.jsx)("button",{type:"button",className:`ri-measureButton ${t?"ri-measureButton--active":""}`,disabled:n,onClick:t?i:r,title:a(t?"pauseCinematic":"playCinematic"),"aria-pressed":t,children:t?(0,Ie.jsx)(qt.Pause,{size:16}):(0,Ie.jsx)(qt.Play,{size:16})}),t&&(0,Ie.jsx)("button",{type:"button",className:"ri-measureButton ri-measureButton--stop",onClick:o,title:a("stopCinematicAndResetCamera"),children:(0,Ie.jsx)(qt.Square,{size:16})})]})}function qC({progress:e,onCancel:t}){let n=_e();return(0,Ie.jsx)("div",{className:"ri-recordingOverlay",onPointerDown:r=>r.stopPropagation(),children:(0,Ie.jsxs)("div",{className:"ri-isolationPill",role:"status","aria-live":"polite",children:[(0,Ie.jsx)("span",{className:"ri-isolationPill__label",children:n("recordingVideo",{progress:e})}),(0,Ie.jsx)("button",{type:"button",className:"ri-isolationPill__button",onClick:t,children:n("cancel")})]})})}function XC(e){let t={total:0,missing:0};return e.traverse(n=>{let r=n;!r.isMesh||!r.geometry||(t.total+=1,r.geometry.getAttribute("uv")||(t.missing+=1))}),t}var Rn=require("three");function $C(e,t,n,r,i){return!!(e?.usesSlots&&t.usesSlots&&e.url!==t.url&&n.includes(e.url)&&n.includes(t.url)&&r[e.url]&&r[t.url]&&i[e.url]&&i[t.url])}function YC(e,t,n){let r=t?.camera;if(!(r instanceof Rn.PerspectiveCamera))return null;let o=(e instanceof Rn.Box3?e:new Rn.Box3().setFromObject(e)).getSize(new Rn.Vector3).length();return!Number.isFinite(o)||o<=0?null:(r.near=o/100,r.far=o*100,r.updateProjectionMatrix(),t&&n===void 0&&(t.maxDistance=o*10),o)}function KC(e,t){let n=e.camera;if(!(n instanceof Rn.PerspectiveCamera)||!(t>0))return;let r=Math.min(Math.max(e.distance/200,t/1e5),t/100);Math.abs(r-n.near)<=n.near*.01||(n.near=r,n.updateProjectionMatrix())}var Pm={paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5},su={kind:"model"};function ZC(e,t){let n=new Rn.Box3().setFromObject(t);return n.isEmpty()?!1:(n.expandByScalar(n.getSize(new Rn.Vector3).length()*.05),n.containsPoint(e.getTarget(new Rn.Vector3)))}function QC(e,t){return e.getTarget(new Rn.Vector3).distanceTo(t)<=Math.max(e.distance,1)*.001}async function Vb(e,t,n=.6){let r=e.smoothTime;e.smoothTime=As(e,n);try{return await t()}finally{e.smoothTime=r}}async function JC(e,t,{flyIn:n,onStart:r,invalidate:i}){if(n){let o=(t instanceof Rn.Box3?t:new Rn.Box3().setFromObject(t)).getBoundingSphere(new Rn.Sphere),a=o.center.clone(),l=e.getPosition(new Rn.Vector3).clone().sub(e.getTarget(new Rn.Vector3));l.lengthSq()<1e-6&&l.set(0,0,1),l.normalize();let c=Math.max(o.radius*10,20),d=a.clone().add(l.multiplyScalar(c));await e.setLookAt(d.x,d.y,d.z,a.x,a.y,a.z,!1)}r(),await Vb(e,()=>e.fitToBox(t,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),await new Promise(o=>{let a=performance.now(),s=()=>{e.active===!1||performance.now()-a>8e3?(e.dispatchEvent({type:"update"}),i(),o()):(i(),setTimeout(s,100))};setTimeout(s,100)})}var eT=require("react");function tT({enabled:e,canvasAreaElement:t,fitAttemptedRef:n,fitInFlightRef:r,controlsRef:i,cameraFramingRef:o,nodeRefsMap:a,fitScene:s}){(0,eT.useEffect)(()=>{if(!e)return;let l=t;if(!l)return;let c=null,d=new ResizeObserver(()=>{!n.current||r.current||(c&&clearTimeout(c),c=setTimeout(()=>{let p=i.current,u=o.current;if(u.kind==="view"&&p){if(QC(p,u.target))return}else if(u.kind==="object"&&p){let f=a.current[u.key];if(f&&ZC(p,f)){p.fitToBox(f,!0,Pm).catch(()=>{});return}}s()},150))});return d.observe(l),()=>{d.disconnect(),c&&clearTimeout(c)}},[t,s,e])}var Q=require("react/jsx-runtime");function Am(e){let n=e.split(/[?#]/)[0].split("/");return(n[n.length-1]||e).replace(/\.[^./]+$/,"")||e}var EL=Object.freeze({}),RL=[],OL={};function jb(e){let t=s0(pw(e)),n=t.props,r=kd(n.activeModelId??Ae(n.models?.find(g=>g.url===n.modelUrl)??{url:n.modelUrl}),n.tilesetUrl),i=(0,I.useRef)(r);i.current=r;let o=(0,I.useRef)(null),a=(0,I.useRef)(null),s=(0,I.useCallback)(()=>{let g=a.current;g&&(o.current=g.snapshot())},[]),l=F0(s),c=ew(e),[d,p]=(0,I.useState)(null);(0,I.useEffect)(()=>()=>{d&&URL.revokeObjectURL(d)},[d]);let u=()=>{s();let g=i.current;a.current?.captureFrame().then(b=>{b&&(g===i.current?p(b):URL.revokeObjectURL(b))})};$i(()=>{o.current=null,p(null)},[r]);let f=(0,I.useRef)(null),m=Y0({loading:n.loading,reveal:n.reveal,rootRef:f,onPark:u}),{release:v}=l;return(0,I.useEffect)(()=>{m.live||v()},[m.live,v]),(0,Q.jsx)(sd,{labels:e.labels,children:(0,Q.jsxs)("div",{className:"ri-viewerSlot",ref:f,children:[t.error&&(0,Q.jsx)("div",{className:"ri-configuredARError",role:"alert",children:t.error}),m.live?(0,Q.jsx)(DL,{...n,contextRecovery:l,engagement:c,resumeRef:o,viewerHandleRef:a,offscreen:!m.visible,frame:d},l.generation):(0,Q.jsx)(Id,{className:"ri-viewer",background:ac(n.backgroundColor,n.sceneConfig),poster:d??n.poster,onReveal:m.awaitingReveal?m.reveal:void 0})]})})}function DL({labels:e,contextRecovery:t,engagement:n,modelUrl:r,tilesetUrl:i,tilesErrorTarget:o=8,tilesCacheSize:a=800,onObjectCatalog:s,modelFormat:l,licenseKey:c,licenseValidationUrl:d,hideLicenseCheckingOverlay:p=!1,objectBindings:u="auto",selectedObject:f,comparisonHighlights:m,multiSelectedKeys:v,selectedObjectRefs:g,selectedObjectOutlineColor:b,panelHoveredObject:h,onObjectBindingsChange:y,onObjectSelect:w,onObjectHover:T,onObjectDoubleClick:x,onDecalDoubleClick:D,onObjectContextMenu:A,decalMove:S,onObjectEditLeaseChange:M,onSelectionClear:_,onSceneLoaded:C,onModelLoaded:E,onAssetDiagnostics:L,onRuntimeStats:k,runtimeStatsIntervalMs:B,onLoadError:j,onProgress:R,onCameraControllerChange:O,cameraControllerType:N,onAction:H,onHiddenObjectsChange:Y,onCameraChange:ue,onViewerReady:be,onTextureUpload:X,onAnimationsReady:G,onSequencesReady:J,showSequenceControls:ee=!0,sequenceAutoPlay:fe=!0,onModelAnimationsReady:K,onAnnotationsChange:oe,activeAnnotation:ae,onActiveAnnotationChange:pe,camera:De,cameraLimits:te,backgroundColor:Fe,shadows:We=!0,showObjectBindingDataPanel:ge=!0,customObjectBindingDataPanel:Ce,customSceneObjectsPanel:Je,showSceneObjectsPanel:ve=!0,showDownloadButton:qe=!0,downloadFilename:he="model",showResetButton:de=!0,showFullscreenButton:ze=!1,showLoadingOverlay:Pe=!0,showMouseController:ft=!1,mouseControllerPosition:At="center-bottom",mouseControllerOpacity:se=1,moveSensitivity:Re=.08,zoomSensitivity:Ee=1,sceneConfig:nt,onSceneConfigChange:Qe,disableZoom:ut=!1,zoomOnSelected:Ke=!0,highlightOnHover:xe=!0,enableCameraControls:et=!0,onAutoFit:xt,refitOnResize:Dn=!0,renderMode:pi="demand",maxDpr:yn=2,preserveDrawingBuffer:ho=!1,webgpu:ir=!1,performanceProfile:Vn="auto",dracoDecoderPath:mi,ktx2TranscoderPath:go,meshopt:en=!0,showMeasureTools:nn=!1,showUvCheckerButton:or=!1,showExplodeControls:Ni=!1,showMaterialVariants:hu=!0,showObjectNavigator:Vi=!0,showSectionTools:ji=!1,isolation:sa,onIsolationChange:bo,showIsolateControls:us=!1,cinematic:Gr,measurementUnit:yo="m",measurements:vl,onMeasurementsChange:la,measurementSettings:gu,measurementModelId:Qm,onMeasurementSettingsChange:ca,enableXR:ds=!1,usdzUrl:U,arScaleMode:z="normalized",mobileHandoffUrl:F,arHandoff:ne,showAnnotationNavigation:Z=!0,showAnnotationOnHover:Se=!1,showAnnotationFilters:Te=!0,annotationCategories:Nt,onAnnotationCategoriesChange:wt,moveModeEnabled:Ot=!1,scaleModeEnabled:St=!1,objectTransformSpace:It="world",enableKeyboardNavigation:rn=!1,reducedMotion:Le="user",showViewGizmo:dn=!1,overlay:qn,unsafe_sceneChildren:ar,autoRotate:xl,autoRotateSpeed:Jn,onTexturePositioningChange:Ln,endTexturePositioningRef:vo,texturePositioning:Kb,extraModelUrls:VT,onExtraModelError:Zb,onExtraModelLoaded:bu,originalNodePoses:jT,models:Et,mergeModels:Jm,onMergeModelLoaded:Qb,onMergeModelError:Jb,poster:ey,resumeRef:ty,viewerHandleRef:ef,offscreen:UT,frame:ny,onModelChange:ry,activeModelId:zT,onActiveModelChange:tf}){let jn=_e(),Ge=zT??Ae(Et?.find(P=>P.url===r)??{url:r}),iy=Et?.find(P=>Ae(P)===Ge)?.visible!==!1,Wr=kd(Ge,i),[pn]=(0,I.useState)(()=>ty.current?.model===Wr?ty.current:null),xo=N1(Le);(0,I.useEffect)(()=>()=>n.interrupt(),[n]);let oy=(0,I.useRef)(n);oy.current=n;let{autoBindings:nf,controlled:ay,currentBindings:Ve,applyBindings:qr,bindingsForModel:ps,modelEdits:FT}=P0({modelUrl:r,activeModelId:Ge,tilesetUrl:i,models:Et,objectBindings:u,onChange:y,initialBindings:pn?.objectBindings,initialModelEdits:pn?.modelBindingEdits}),{isInsideEditor:yu,activeTab:rf,activeSubTab:of,openMeasurementsPanel:HT}=Qo(),GT=yu&&rf==="scene"&&of==="Lighting",vu=m1(c,d),[af,WT]=(0,I.useState)(()=>pn?.lightEdits??{}),[xu,sy]=(0,I.useState)(pn?.variantEdit),[wu,ly]=(0,I.useState)(pn?.sectionEdit),[Su,cy]=(0,I.useState)(()=>pn?.measurementEdits??{}),sf=JSON.stringify(nt?.measurements??null),uy=(0,I.useRef)(new Map);(0,I.useEffect)(()=>{let P=uy.current.get(Wr);uy.current.set(Wr,sf),P!==void 0&&P!==sf&&cy(V=>{let W={...V};return delete W[Wr],W})},[Wr,sf]);let Ze=(0,I.useMemo)(()=>{let P=$h(nt??dr,af);return xu!==void 0&&(P={...P,model:wg(P.model,xu)}),wu!==void 0&&(P={...P,section:{...Tr,...P.section,...wu}}),Su[Wr]&&(P={...P,measurements:Su[Wr]}),P},[nt,af,xu,wu,Su,Wr]),ms=(0,I.useRef)(Ze);ms.current=Ze;let wl=(0,I.useCallback)(P=>{let V=ms.current,W={settings:{},items:[],...V.measurements,...P};Qe?Qe({...V,measurements:W}):cy(le=>({...le,[Wr]:W}))},[Wr,Qe]),dy=(0,I.useCallback)(P=>{la?la(P):wl({items:P})},[la,wl]),py=(0,I.useCallback)(P=>{ca?ca(P):wl({settings:P})},[ca,wl]),Mu=vl??Ze.measurements?.items??RL,Sl=gu??Ze.measurements?.settings??OL,lf=Qm??Yl(Ge),Ml=Ia(Sl,yo),cf=(0,I.useMemo)(()=>Js(Ze.model),[Ze.model]);(0,I.useEffect)(()=>{n.setActiveVariants(cf)},[cf,n]);let qT=nt?Js(nt.model).join(`
3741
3741
  `):"";$i(()=>{sy(void 0)},[qT,Ge,r]);let XT=JSON.stringify(nt?.section??null);$i(()=>{ly(void 0)},[XT,Ge,r]);let my=(0,I.useCallback)(P=>{if(Qe){let V=ms.current;Qe({...V,section:{...Tr,...V.section,...P}});return}ly(V=>({...V,...P}))},[Qe]),[fy,$T]=(0,I.useState)(!1),hy=(0,I.useRef)([]),YT=(0,I.useCallback)(P=>{let V=ms.current,W=Js(V.model),le=hy.current,ye=le.find(dt=>dt.variants.some(Ut=>Ut.name===P)),_t=W.find(dt=>ye?ye.variants.some(Ut=>Ut.name===dt):dt===P)??null,st=W.includes(P)?W.filter(dt=>dt!==P):sp(W,P,le);if(n.chooseVariant(st.includes(P)?P:null,_t,ye?.name??null),Qe){Qe({...V,model:wg(V.model,st)});return}sy(st)},[Qe,n]),uf=(0,I.useCallback)(P=>{if(Qe){Qe($h(ms.current,P));return}WT(V=>{let W={...V};for(let[le,ye]of Object.entries(P))W[le]={...V[le],...ye};return W})},[Qe]),[df,pf]=(0,I.useState)(null),[mf,gy]=(0,I.useState)(null),[by,yy]=(0,I.useState)(null),vy=(0,I.useRef)(0),[ff,xy]=(0,I.useState)(null),[wy,Sy]=(0,I.useState)(pn?.uvCheckerOverride??null),_l=Ze.model.renderer==="uv-checker",hf=or?wy??_l:_l,Un=(0,I.useMemo)(()=>{let P=hf?"uv-checker":_l?"pbr":Ze.model.renderer;return P===Ze.model.renderer?Ze:{...Ze,model:{...Ze.model,renderer:P}}},[_l,Ze,hf]);$i(()=>{Sy(null)},[Ge,r,Ze.model.renderer,or,i]);let My=(0,I.useMemo)(()=>ac(Fe,Ze),[Fe,Ze]),_u=(0,I.useMemo)(()=>({dracoDecoderPath:mi,ktx2TranscoderPath:go,meshopt:en}),[mi,go,en]),KT=(0,I.useMemo)(()=>u0(Vn),[Vn]),rt=(0,I.useRef)(null),[_y,ZT]=(0,I.useState)(()=>pn&&pn.cameraControllerType!=="pointerLock"?pn.cameraControllerType:"orbit"),[QT,Cy]=(0,I.useState)(!1),ua=N!==void 0?N:_y,Cu=(0,I.useCallback)(P=>{Cy(!1),P!==ua&&(ZT(P),O?.(P))},[ua,O]),[Cl,Ty]=(0,I.useState)(!1),Py=(0,I.useRef)({dragging:!1,endedAt:-1/0}),Ay=(0,I.useCallback)(P=>{Py.current={dragging:P,endedAt:P?-1/0:performance.now()},Ty(P)},[]),[Xn,Tl]=(0,I.useState)(null),Pl=!!(Kb||Ln||vo),Ey=(0,I.useRef)(Ln);Ey.current=Ln,(0,I.useEffect)(()=>{Ey.current?.(Xn)},[Xn]),(0,I.useEffect)(()=>{if(vo)return vo.current=()=>Tl(null),()=>{vo.current=null}},[]),(0,I.useEffect)(()=>{rt.current&&(rt.current.dollySpeed=Math.max(Ee,0))},[Ee]),(0,I.useEffect)(()=>{rt.current&&(rt.current.enabled=et&&!Cl&&!fy&&!Xn)},[et,Cl,fy,Xn]);let gf=(0,I.useRef)(null),bf=(0,I.useRef)(new Map),Ry=(0,I.useRef)(null),JT=(0,I.useRef)(null),wr=(0,I.useRef)(null),Oy=(0,I.useRef)({});(0,I.useEffect)(()=>()=>{for(let P of Object.values(Oy.current))URL.revokeObjectURL(P)},[]);let vn=(0,I.useRef)({}),fs=(0,I.useRef)(su),[eP,tP]=(0,I.useState)(0),yf=(0,I.useCallback)(()=>{tP(P=>P+1)},[]),wo=(0,I.useRef)({}),on=!!(Et&&Et.length>=1&&!i),Tu=(0,I.useRef)(Et);Tu.current=Et;let Pu=(0,I.useRef)(new Map),{scenesByUrlRef:da,cameraHomesByUrlRef:So,materialRefsByUrlRef:Dy,getMaterialRefsForUrl:nP}=T0(on,Et),Au=(0,I.useRef)(null),Ly=(0,I.useRef)(null),Eu=B0(ze),Xr=(0,I.useRef)(null),[vf,rP]=(0,I.useState)(null),iP=(0,I.useCallback)(P=>{Xr.current=P,rP(P)},[]);fC({canvasAreaElement:vf,controlsRef:rt,enabled:rn&&et&&!Ot&&!St});let Ru=(0,I.useRef)(null),[pa,Ou]=(0,I.useState)({}),[Iy,xf]=(0,I.useState)(null),[Du,wf]=(0,I.useState)(null),[oP,aP]=(0,I.useState)(null),[sP,lP]=(0,I.useState)(null),[$r,ky]=(0,I.useState)(null),[cP,uP]=(0,I.useState)({}),Mt=(0,I.useRef)(null),Sf=(0,I.useRef)(null),By=(0,I.useRef)(r);By.current=r;let Lu=(0,I.useRef)(null),Mf=(0,I.useRef)(L);Mf.current=L;let hs=(0,I.useRef)(null),_f=(0,I.useRef)(0),Ny=(0,I.useRef)(null),[dP,pP]=(0,I.useState)(0),fi=(0,I.useRef)(!1),Al=(0,I.useRef)(!1),Cf=(0,I.useRef)(null),Tf=(0,I.useRef)(!!De);Tf.current=!!De;let Yr=(0,I.useRef)(null),Iu=(0,I.useRef)(pn?.camera?{camera:pn.camera,home:pn.home}:null),[ku,ma]=(0,I.useState)(!!r),[Mo,fa]=(0,I.useState)(!r||!!xt||!!De),[tn,Vy]=(0,I.useState)(!1),[Pf,jy]=(0,I.useState)([]),[El,Af]=(0,I.useState)(!1),[ha,Ef]=(0,I.useState)(null),[Uy,gs]=(0,I.useState)(!1),[mP,fP]=(0,I.useState)(0),Rf=(0,I.useRef)(""),zy=(0,I.useRef)(new Set),Fy=(0,I.useRef)(""),[Hy,Gy]=(0,I.useState)(!1),Of=(0,I.useRef)(new Set),[Wy,hP]=(0,I.useState)(0),[Df,gP]=(0,I.useState)(null),[bP,qy]=(0,I.useState)(!1),[Lf,Xy]=(0,I.useState)({total:0,missing:0}),[yP,$y]=(0,I.useState)("loadingModel"),[vP,If]=(0,I.useState)(null),hi=(0,I.useRef)({}),bs=(0,I.useCallback)(()=>{let P=rt.current;if(!P||Yr.current)return;Yr.current=fx(P,hs.current??Mt.current);let V=Cf.current;V?.usesSlots&&(So.current[V.url]=Yr.current)},[So]),[ys,Yy]=(0,I.useState)(()=>pn?.explodeFactor??0),[xP,Ky]=(0,I.useState)(!1);$i(()=>{Yy(0),Ky(!1)},[Ge,r,i]);let gi=(0,I.useMemo)(()=>{let P=Ze.cinematic,V=P?.enabled?{waypoints:P.waypoints,duration:P.duration,loop:P.loop,autoPlay:P.autoPlay}:null;return Gr===void 0?V&&(V.waypoints?.length??0)>=2?V:null:Gr===!1?null:Gr===!0?V??{}:{...V??{},...Gr}},[Gr,Ze]),[Rl,zn]=(0,I.useState)(!1),[Zy,_o]=(0,I.useState)(!1),kf=(0,I.useRef)(!1);(0,I.useEffect)(()=>{zn(!1),_o(!1),kf.current=!1},[Ge,r,i]),(0,I.useEffect)(()=>{if(!(!gi?.autoPlay||kf.current)&&tn&&Mo&&!ku){if(kf.current=!0,xo)return;zn(!0),_o(!1)}},[gi,tn,Mo,ku,xo]);let wP=(0,I.useCallback)(()=>{zn(!1),_o(!0)},[]),{captureVideo:Bf,cancelVideo:Nf,isRecording:Qy,recording:jt,progress:SP,onProgress:Jy}=k0({rendererCaptureRef:wr,controlsRef:rt,cinematicConfig:gi,ready:t.status==="ready"&&tn&&Mo&&!ku,modelUrl:`${Ge}|${i??""}`,onCaptureStart:wP});(0,I.useEffect)(()=>{t.status==="lost"&&(n.interrupt(),Nf(),zn(!1),rt.current?.stop())},[t.status,Nf,n]);let{xrStore:MP,inARSession:Vf,presenterRef:_P,arSupported:ev,vrSupported:tv,quickLookSupported:nv,resolvedMobileHandoffUrl:Bu,isMobileHandoffOpen:rv,arOverlay:CP,openMobileHandoff:TP,closeMobileHandoff:PP,openQuickLook:AP,handleARStateChange:EP}=uS({enableXR:ds,usdzUrl:U,mobileHandoffUrl:F,configuredHandoff:!!ne,engagement:n}),bi=(0,I.useMemo)(()=>cx(()=>zn(!1)),[Ge,r]),jf=(0,I.useMemo)(()=>({current:null}),[Ge,r]),iv=(0,I.useRef)(G);iv.current=G;let Uf=(0,I.useRef)(J);Uf.current=J;let ov=(0,I.useCallback)(P=>{jf.current=P,iv.current?.(P)},[jf]),av=(0,I.useMemo)(()=>{try{return Ro(Ze.sequences??[])}catch{return[]}},[Ze.sequences]);(0,I.useEffect)(()=>(Uf.current?.(tn?bi:null),()=>Uf.current?.(null)),[bi,tn]),(0,I.useEffect)(()=>()=>bi.destroy(),[bi]),(0,I.useEffect)(()=>{xo&&bi.pause()},[bi,xo]);let vs=R0(ir),sv=(0,I.useRef)(vs);sv.current=vs;let ga=vs==="webgpu",Nu=ga?null:MP,lv=ji||Ze.section?.enabled===!0;(0,I.useEffect)(()=>{if(!ga)return;let P=[lv&&"the section cut",(Ot||St)&&"the transform gizmo"].filter(Boolean);P.length!==0&&console.info(`[react-immersive] With WebGPU, ${P.join(" and ")} ${P.length>1?"aren't":"isn't"} available; ${P.length>1?"they need":"it needs"} WebGL.`)},[ga,lv,Ot,St]);let{annotations:eI,pendingAnnotation:ba,setPendingAnnotation:cv,annotationForm:RP,setAnnotationForm:zf,currentAnnotationIndex:OP,isNavigating:DP,localAnnotationCategories:LP,selectedAnnotationCategories:IP,visibleAnnotations:uv,availableAnnotationCategories:kP,annotationFiltersVisible:Ff,changeAnnotationCategories:BP,sortedAnnotations:Hf,currentAnnotation:dv,setActiveAnnotation:tI,focusAnnotation:nI,startGuidedTour:NP,goToPreviousAnnotation:VP,goToNextAnnotation:jP,stopGuidedTour:UP,closeViewingAnnotation:Vu,activeAnnotation:rI,activeViewingAnnotation:ju,isGuidedTourActive:Ol,handleAnnotationOk:zP,handleAnnotationCancel:FP,handleAnnotationMarkerClick:pv}=lC({sceneAnnotations:nt?.annotations,controlledAnnotationCategories:Nt,onAnnotationCategoriesChange:wt,showAnnotationFilters:Te,initialCategories:pn?.annotationCategories??null,controlledActiveAnnotation:ae,onActiveAnnotationChange:pe,onAnnotationsChange:oe,controlsRef:rt,sceneRef:Mt,annotationWorldPositionsRef:bf,tourCameraOffsetRef:gf,initialCameraStateRef:Yr,engagement:n,engagementRef:oy}),HP=Ze.section??Tr,mv=hu&&tn&&Pf.length>0;hy.current=Pf;let fv=de||qe||ze&&Eu.supported||Z&&Hf.length>0;hi.current=Ve,(0,I.useEffect)(()=>{if(!Xn)return;let P=Ve[Xn.objectKey]?.style?.material?.[Xn.textureKey]?.path;(!Pl||!P)&&Tl(null)},[Ve,Pl,Xn]);let Gf=(0,I.useRef)({}),[Uu,GP]=(0,I.useState)({});(0,I.useEffect)(()=>{let P={...Uu},V=!1,W=new Set;for(let[le,ye]of Object.entries(Ve)){W.add(le);let _t=ye.style?.material,st=Gf.current[le]??{},dt={};for(let an of zo){let Zr=_t?.[an]?.path;Zr&&(dt[an]=Zr,Zr!==st[an]&&(P[le]!==an&&(V=!0),P[le]=an))}let Ut=P[le];if(Ut&&!dt[Ut]){let an=zo.find(Zr=>!!dt[Zr]);an?P[le]=an:delete P[le],V=!0}Gf.current[le]=dt}for(let le of Object.keys(P))W.has(le)||(delete P[le],delete Gf.current[le],V=!0);V&&GP(P)},[Ve]);let Wf=(0,I.useMemo)(()=>Object.entries(Ve).map(([P,V])=>JSON.stringify([P,V.modelObjectId,V.transform??null])).sort().join(""),[Ve]),{measureMode:sr,measureModeRef:hv,measurePoints:qf,measurementTool:Xf,areaClosed:$f,measurementError:WP,selectMeasurementTool:qP,undoMeasurementPoint:XP,finishMeasureArea:$P,snapMode:YP,setSnapMode:KP,snapPreview:gv,handleMeasurePointerMove:ZP,clearSnapPreview:bv,showDimensions:Yf,measureBox:zu,modelBounds:QP,refreshBounds:yv,clearMeasurements:JP,toggleMeasureMode:eA,toggleDimensions:tA,handleMeasurePointerDown:nA,handleMeasureClick:rA,saveMeasurement:iA,canSaveMeasurement:oA,canCalibrate:aA,calibrate:sA,savedResults:lA,setSavedResults:vv,exportMeasurementJson:cA,exportMeasurementCsv:uA,importMeasurements:dA}=iS({canvasAreaRef:Xr,controlsRef:rt,sceneRef:Mt,modelUrl:Ge,tilesetUrl:i,measurementModelId:lf,savedMeasurements:Mu,measurementSettings:Sl,measurementUnit:yo,onMeasurementsChange:dy,onMeasurementSettingsChange:py,onCollectionChange:P=>{la?.(P.items),ca?.(P.settings),wl(P)},modelRotation:Ze.model.rotation,bindingTransformSignature:Wf,modelLoaded:tn,enabled:nn&&!jt}),pA=(0,I.useCallback)(()=>{if(!Et||Et.length<2)return null;let P=Et.map(V=>{let W=da.current[Ae(V)];if(!W)return null;let le=Ae(V)===Ge?wo.current:Dy.current[Ae(V)]?.current??{};return{scene:W,objectBindings:ps(V),matRefs:le,label:V.label||Am(V.url)}}).filter(V=>V!==null);return P.length>0?P:null},[Et,Ge,r,ps]),mA=(0,I.useCallback)(()=>{if(!Et||Et.length<2)return null;let P=Et.map(V=>{let W=da.current[Ae(V)];return W?{scene:W,label:V.label||Am(V.url)}:null}).filter(V=>V!==null);return P.length>0?P:null},[Et]);(0,I.useEffect)(()=>{(Rl||sr||jt||Vf||t.status!=="ready")&&bi.stop()},[bi,Rl,sr,jt,Vf,t.status]);let fA=(0,I.useCallback)(()=>{if(!tn)throw new Error("Wait for the current model to finish loading before preparing AR.");if(i)throw new Error("Streaming tiles are incomplete model data. Provide arHandoff.createUSDZ to prepare this asset.");let P=on?Et:void 0,V=P?P.filter(W=>W.visible!==!1).map(W=>{let le=Ae(W),ye=da.current[le];if(!ye)throw new Error("Wait for every visible model to finish loading before preparing AR.");return{scene:ye,instanceId:le,objectBindings:ps(W),materialOverrides:le===Ge?wo.current:Dy.current[le]?.current}}):Mt.current?[{scene:Mt.current,objectBindings:Ve,materialOverrides:wo.current}]:[];if(!V.length)throw new Error("Wait for a visible model to finish loading before preparing AR.");for(let W of V)wd(W.scene);return V},[tn,i,on,Et,ps,Ge,Ve]),[hA,gA]=(0,I.useState)(34),xv=(0,I.useRef)(void 0),bA=Kw({openConfiguredAR:ds&&ne?()=>xv.current?.():void 0,sceneRef:Mt,materialRefs:wo,rendererCaptureRef:wr,objectBindings:Ve,downloadFilename:he,getAllLoadedModels:pA,getAllLoadedModelUvSources:mA,captureVideo:Bf}),wv=(0,I.useMemo)(()=>Object.fromEntries(Object.entries(Ve).filter(([,P])=>P.visible===!1).map(([P])=>[P,!0])),[Ve]),Co=(0,I.useMemo)(()=>{let P=new WeakMap,V=new Map,W=new Map;for(let[le,ye]of Object.entries(Ve))P.set(ye,le),V.has(ye.id)||V.set(ye.id,le),W.has(ye.modelObjectId)||W.set(ye.modelObjectId,le);return{byReference:P,byId:V,byModelObjectId:W}},[Ve]),Kr=(0,I.useCallback)(P=>P?Co.byReference.get(P)??Co.byModelObjectId.get(P.modelObjectId)??Co.byId.get(P.id)??null:null,[Co]),Kf=f!==void 0,ya=Kf?f??null:sP,kt=Kr(ya);(0,I.useEffect)(()=>{n.setSelectedPart(kt)},[kt,n]);let va=kt?vn.current[kt]??null:null,yA=kt?Uu[kt]:void 0,Sv=Kr(xe?h??Du??oP:null),vA=Sv?vn.current[Sv]??null:null,Zf=g??(v?v.map(P=>vn.current[P]).filter(Boolean):null),Fu=(0,I.useMemo)(()=>{let P=Zf??(va&&Ve[kt??""]?.transform?.shear?[va]:null);if(!P?.length)return null;let V=new Set(P),W=Object.entries(vn.current).filter(([,le])=>V.has(le)).map(([le,ye])=>({key:le,node:ye,transform:Ve[le]?.transform}));return W.length>1||W.some(({transform:le})=>le?.shear)?W:null},[Zf,Ve,va,kt]),Mv=(0,I.useCallback)(P=>{aP(P),T?.(P)},[T]),_v=ge&&ya!==null&&kt!==null,xa=(kt?Ve[kt]:null)??ya,Dl=xa&&(xa.modelObjectId||xa.id)||null,Ll=Dl?cP[Dl]??null:null,[xA,Cv]=(0,I.useState)(""),Tv=(0,I.useRef)(null);(0,I.useEffect)(()=>{let P=Tv.current;if(P!==kt)if(Tv.current=kt,kt){let V=xa?.label||ya?.label||kt;Cv(jn("objectSelected",{name:V}))}else P&&Cv(jn("selectionCleared"))},[kt,xa,ya,jn]),(0,I.useEffect)(()=>{Y?.(wv)},[wv,Y]);let xs=(0,I.useCallback)((P,V)=>{if(ua==="pointerLock"){Cu("orbit");return}P&&V?n.viewPart({objectId:P.id,objectKey:Kr(P)??(P.modelObjectId||P.id),label:P.label,source:V}):P||n.setSelectedPart(null),Kf||lP(P),w?.(P)},[ua,Cu,Kf,w,Kr,n]),Pv=(0,I.useRef)(pn?.objectBindings?`${r}
3742
3742
  ${i??""}`:null),Hu=(0,I.useCallback)((P,V)=>{if(!nf)return;let W=`${r}
3743
3743
  ${i??""}`,le=Pv.current===W?hi.current:EL;Pv.current=W;let ye=hm(P,V);for(let _t of Object.keys(ye))le[_t]&&(ye[_t]=le[_t]);qr(ye)},[nf,r,i,qr]),{glowMemoryRef:Av,readObjectGlow:Gu,applyGlow:Qf}=_C({nodeRefsMap:vn,currentObjectBindingsRef:hi,applyObjectBindings:qr}),wA=(0,I.useCallback)(P=>{let V=kt;if(!V||!P)return;let W=hi.current[V];W&&qr({...hi.current,[V]:{...W,transform:{...W.transform,...P}}})},[qr,kt]),SA=(0,I.useCallback)(P=>{let V=hi.current,W={...V};for(let{key:le,transform:ye}of P){let _t=V[le];_t&&(W[le]={..._t,transform:{..._t.transform,...ye}})}qr(W)},[qr]),To=(0,I.useCallback)((P,V)=>Ve[P]?P:V?Kr(V):Co.byId.get(P)??Co.byModelObjectId.get(P)??null,[Ve,Kr,Co]),Wu=(0,I.useCallback)((P,V)=>{let W=To(P),le=W?Ve[W]:void 0;!W||!le||qr({...Ve,[W]:{...le,style:V(le.style)}})},[To,Ve,qr]),yi=(0,I.useCallback)(()=>{if($r){let P=pa[$r.objectId]?.hex;P!==void 0&&(Wu($r.objectId,V=>({...V,material:{...V?.material,baseColor:P}})),Ou(V=>({...V,[$r.objectId]:{}})))}ky(null)},[$r,pa,Wu]),Jf=(0,I.useCallback)(()=>{xs(null),xf(null),yi()},[xs,yi]),MA=(0,I.useCallback)((P,V,W,le,ye)=>{let _t=Ly.current,st=Xr.current,dt=rt.current?.camera;if(!_t)return{objectId:P,x:24,y:24};let Ut=_t.getBoundingClientRect(),an=12,Zr=Ut.width-V-an,_a=Ut.height-W-an,Ao=Math.max(an,(Ut.width-V)/2),Bl=Math.max(an,(Ut.height-W)/2),_s=To(P,le),Nl=_s?vn.current[_s]:null,Mr=(xi,wi)=>wi<=an?an:Math.min(Math.max(xi,an),wi);if(st&&dt&&Nl){let xi=st.getBoundingClientRect(),wi=new Bi.Vector3;new Bi.Box3().setFromObject(Nl).getCenter(wi),wi.project(dt);let uh=(wi.x+1)/2*xi.width+(xi.left-Ut.left),Eo=(1-wi.y)/2*xi.height+(xi.top-Ut.top);return{objectId:P,x:Mr(uh+24,Zr),y:Mr(Eo-W/2,_a)}}let vi=typeof ye?.screenX=="number"?ye.screenX-Ut.left:Ao,Vl=typeof ye?.screenY=="number"?ye.screenY-Ut.top:Bl;return{objectId:P,x:Mr(vi,Zr),y:Mr(Vl,_a)}},[To]),qu=CC({setCurrentAction:xf,bindingKeyIndex:Co,currentObjectBindings:Ve,applyObjectBindings:qr,resolveObjectKey:To,closeColorPicker:yi,setColorPicker:ky,setMaterialPopupsByObject:uP,setItemMaterials:Ou,getPopoverPosition:MA,decalRequestRef:vy,setDecalError:yy,setDecalDragging:xy,setDecalControl:gy,resolvedSceneConfigRef:ms,applyLightPatches:uf,readObjectGlow:Gu,applyGlow:Qf,glowMemoryRef:Av,setLightControl:pf,onAction:H});(0,I.useEffect)(()=>{if($r)return window.addEventListener("pointerdown",yi),()=>window.removeEventListener("pointerdown",yi)},[$r,yi]),(0,I.useEffect)(()=>{if(!ju)return;let P=V=>{if(Ru.current&&!Ru.current.contains(V.target)){if(V.target.closest?.(".ri-annotationMarker"))return;Vu()}};return document.addEventListener("mousedown",P),document.addEventListener("touchstart",P),()=>{document.removeEventListener("mousedown",P),document.removeEventListener("touchstart",P)}},[ju,Vu]),(0,I.useEffect)(()=>{if(!ba)return;let P=V=>{let W=V.target;if(W.closest?.(".ri-annotationPopup")||W.closest?.("button, input, textarea, .ri-measureTools, .ri-xrTools, .ri-buttonContainer"))return;let le=Xr.current;!le||!le.contains(W)||(cv(null),zf({title:"",description:""}))};return document.addEventListener("mousedown",P,!0),document.addEventListener("touchstart",P,!0),()=>{document.removeEventListener("mousedown",P,!0),document.removeEventListener("touchstart",P,!0)}},[ba]);let{handleFileChange:_A,triggerFileUpload:Ev,clearTexture:Rv,texturePositioningEnabled:CA,texturePositioningOverrides:TA,setMaterialTextureOffset:PA,setMaterialTextureRotation:AA,endMaterialTexturePositioning:EA}=SC({applyBindingStyle:Wu,resolveObjectKey:To,onTextureUpload:X,fileInputRef:Ry,pendingObjectId:JT,createdBlobUrls:Oy,texturePositioning:Kb,setMoveZoomTarget:Tl}),eh=(0,I.useRef)(be);eh.current=be;let Sr=(0,I.useCallback)(()=>{let P=rt.current;!P||!eh.current||eh.current({objectBindings:hi.current,homeCameraState:Yr.current,captureImage:V=>Qy()?Promise.reject(new Error("Wait for video export to finish before capturing an image.")):Ad(wr.current,V),captureVideo:Bf,invalidate:()=>wr.current?.invalidate(),rendererBackend:sv.current??"webgl",raw:{controls:P,scene:Mt.current,nodes:vn.current}})},[Bf,Qy]),Il=(0,I.useCallback)(async(P=!1)=>{let V=rt.current,W=hs.current??Mt.current;if(!V||!W)return!1;fs.current=su;try{return await JC(V,W,{flyIn:P,onStart:()=>fa(!0),invalidate:()=>wr.current?.invalidate()}),(hs.current??Mt.current)!==W?!1:(fi.current=!0,bs(),Sr(),!0)}catch(le){return console.error("Fit scene error:",le),!1}},[bs,Sr]);(0,I.useEffect)(()=>{let P={url:Ge,usesSlots:on},V=$C(Cf.current,P,(Tu.current??[]).map(st=>Ae(st)),da.current,So.current);if(Cf.current=P,fi.current=!1,Al.current=!1,Yr.current=on?So.current[Ge]??null:null,Mt.current=null,Sf.current=null,Lu.current=null,hs.current=null,Vy(!1),jy([]),Af(!1),Ef(null),gs(!1),Rf.current="",zy.current=new Set,Of.current=new Set,Xy({total:0,missing:0}),$y("loadingModel"),If(null),pn?.model!==kd(Ge,i)&&(Iu.current=null),!r){ma(!1),fa(!0);return}if(on&&Pu.current.has(Ge)){ma(!1),fa(!0);return}ma(!V),fa(V||!!xt||Tf.current);let W=!1,le=null,ye=st=>{le=setTimeout(_t,st)},_t=()=>{if(W||fi.current||Al.current||on&&Pu.current.has(Ge))return;let st=hs.current??Mt.current;if(!rt.current||!st){ye(100);return}_f.current=YC(st,rt.current,te?.maxDistance)??_f.current;let dt=Iu.current;if(dt){Iu.current=null,Z0(rt.current,dt.camera),fi.current=!0,dt.home?(Yr.current=dt.home,on&&(So.current[Ge]=dt.home)):bs(),Sr(),ma(!1),fa(!0),wr.current?.invalidate();return}if(ux(rt.current)||V){fi.current=!0,bs(),Sr(),ma(!1),fa(!0),wr.current?.invalidate();return}Al.current=!0,(xt?xt():Tf.current?Promise.resolve(!0):Il(!0)).then(an=>{W||(fi.current=an!==!1,fi.current?(bs(),Sr(),ma(!1)):W||ye(100))}).catch(()=>{fi.current=!1,W||ye(100)}).finally(()=>{W||(Al.current=!1)})};return ye(50),()=>{W=!0,le&&clearTimeout(le)}},[bs,So,te?.maxDistance,Il,Ge,r,Sr,xt,pn,i,on]),tT({enabled:Dn,canvasAreaElement:vf,fitAttemptedRef:fi,fitInFlightRef:Al,controlsRef:rt,cameraFramingRef:fs,nodeRefsMap:vn,fitScene:Il});let Xu=(0,I.useCallback)(P=>{let V=rt.current;if(!V)return;let W=P.cameraState;if(W?.position&&W?.target){let[_t,st,dt]=W.position,Ut=new Bi.Vector3(...W.target);V.setPosition(_t,st,dt,!0),V.setTarget(Ut.x,Ut.y,Ut.z,!0),fs.current={kind:"view",target:Ut};return}let le=Kr(P),ye=le?vn.current[le]:null;!le||!ye||(V.fitToBox(ye,!0,Pm).catch(()=>{}),fs.current={kind:"object",key:le})},[Kr]);(0,I.useEffect)(()=>{kt||(fs.current=su)},[kt]);let th=(0,I.useCallback)((P,V="canvas")=>{if(hv.current)return;let W=Py.current;W.dragging||performance.now()-W.endedAt<150||(zn(!1),yi(),xf(null),xs(P,V),!(ut||!Ke)&&Xu(P))},[xs,yi,Xu,ut,Ke]),{beginMoveZoom:Ov,handleMoveZoomPointerDown:RA}=gC({moveZoomTarget:Xn,setMoveZoomTarget:Tl,currentObjectBindingsRef:hi,materialRefsOut:wo,rendererCaptureRef:wr,canvasAreaRef:Xr,canvasAreaElement:vf,applyBindingStyle:Wu}),Dv=(0,I.useCallback)(P=>{if(!Pl)return!1;let V=Kr(P);if(!V)return!1;let W=Uu[V];return W?(Ov({objectKey:V,textureKey:W}),!0):!1},[Pl,Kr,Uu,Ov]),nh=(0,I.useRef)(!1),{editDecals:oI,activeDecalMove:ws,addCenteredDecal:aI,decalSizeFor:OA,startImageDecal:sI,decalControlHandlers:DA}=mC({currentObjectBindings:Ve,currentObjectBindingsRef:hi,applyObjectBindings:qr,nodeRefsMap:vn,controlsRef:rt,decalMove:S,decalDragging:ff,setDecalDragging:xy,setDecalError:yy,setDecalControl:gy,decalRequestRef:vy,onTextureUpload:X,currentPanelObjectId:Dl,modelUrl:Ge}),Lv=(0,I.useMemo)(()=>cm(Ve,Un.styleRules),[Ve,Un.styleRules]),[Iv,kv]=(0,I.useState)(()=>pn?.isolation??null);$i(()=>{kv(null)},[Ge,r]);let wa=sa!==void 0?sa:Iv,rh=(0,I.useCallback)(P=>{sa===void 0&&kv(P),bo?.(P)},[sa,bo]),lr=(0,I.useMemo)(()=>um(Lv,wa),[Lv,wa]),LA=(0,I.useMemo)(()=>({bindings:lr.bindings,model:Un.model,camera:Un.camera,animations:Un.animations}),[lr.bindings,Un.model,Un.camera,Un.animations]),Ss=l0({revision:String(ys),enabled:ds&&!!ne,options:bd(ne),baseUrl:F,state:{version:1,objectBindings:Ve,configuration:{modelUrl:r,modelFormat:l,tilesetUrl:i,activeModelId:Ge,models:Et?.map(P=>({...P,objectBindings:ps(P),sceneConfig:Ae(P)===Ge?Un:P.sceneConfig})),mergeModels:Jm,sceneConfig:Un,arScaleMode:z,isolation:wa,backgroundColor:Fe,shadows:We}},getSources:fA});xv.current=Ss.show;let Ui=(0,I.useMemo)(()=>lr.setAside.size>0?Jc(Ve,wa):null,[lr,Ve,wa]),IA=(0,I.useCallback)(P=>{let V=Kr(P),W=V!==null&&Ui?.size===1&&Ui.has(V);rh(W?null:{...wa,target:P.id})},[rh,wa,Ui]),{sourceOf:Po}=lr,kA=(0,I.useMemo)(()=>Vi?O1(Ve,lr):[],[Vi,Ve,lr]),ih=(0,I.useCallback)(P=>{let V=Po(P);th(V)},[th,Po]),oh=(0,I.useCallback)(P=>Mv(P&&Po(P)),[Mv,Po]),ah=(0,I.useCallback)((P,V)=>{let W=Po(P);return x?.({binding:W,...V})===!0?(nh.current=!0,!0):Dv(W)},[x,Dv,Po]),sh=(0,I.useMemo)(()=>A?(P,V)=>A({binding:Po(P),...V}):void 0,[A,Po]),Bv=(0,I.useCallback)(P=>{xs(P,"panel"),!ut&&Xu(P)},[xs,Xu,ut]);(0,I.useEffect)(()=>{Sr()},[Sr,Ve,eP]);let Nv=(0,I.useCallback)((P,V)=>{KC(V,_f.current),ue?.(Qr(P,V)),Sr()},[Sr,ue]),BA=(0,I.useCallback)(P=>{Ny.current=new Set(P.map(V=>V.name)),pP(V=>V+1),Hu(P.map(V=>V.name)),s?.(P)},[Hu,s]),NA=(0,I.useCallback)(P=>{hs.current=P,wr.current?.invalidate()},[]),Ms=(0,I.useCallback)(P=>{Mt.current=P,yv(P),Xy(XC(P));let V=Uh(P);gP(V>rc?V:null),qy(!1),If(null),V>rc&&$y("preparingLargeModel"),Vy(!0),jy(lp(P)),Af(!1),Ef(null),Gy(!1),i||(s&&s(V_(P)),Hu(F1(P),z1(P))),C?.(P),E?.(h1(P)),Sr()},[Hu,Sr,E,s,C,yv,i]),kl=tn?Mt.current:null,Vv=!!L;(0,I.useEffect)(()=>{if(!Vv)return;if(El){if(Lu.current?.url!==r||Lu.current.error!==ha)return;let V=ha&&typeof ha=="object"?Us(ha):void 0;Mf.current?.(g0({...V,name:V?.name??ja(r),format:V?.format??l??tc(r).format}));return}if(!kl||Mt.current!==kl)return;let P=tc(r);Mf.current?.(Md(kl,{scope:i?"resident-tiles":"asset",source:{...Us(kl),format:i?"3d-tiles":l??P.format,name:P.entryPath??ja(r)}}))},[Vv,kl,r,l,i,Wy,El,ha]);let lh=(0,I.useCallback)(P=>{ma(!1),fa(!0),Af(!0),Ef(P),Lu.current={url:By.current,error:P},j?.(P)},[j]),{reportError:jv,clearError:Uv}=C0({enabled:on,activeUrl:Ge,models:Et,errorsRef:Pu,activeFailed:El,activeError:ha,onActiveError:lh,onExtraError:Zb}),VA=(0,I.useCallback)((P,V)=>{!on||!Tu.current?.some(W=>Ae(W)===P)||(delete da.current[P],delete So.current[P],jv(P,V))},[on,jv,So]),jA=(0,I.useCallback)((P,V)=>{!on||!Tu.current?.some(W=>Ae(W)===P)||(Uv(P),da.current[P]=V,P===Ge&&(Au.current!==P||Mt.current!==V)&&(Au.current=P,Ms(V)),bu?.(P,V))},[on,Ge,r,Ms,bu,Uv]);(0,I.useEffect)(()=>{if(!on||Pu.current.has(Ge))return;let P=da.current[Ge];P&&(Au.current===Ge&&Mt.current===P||(Au.current=Ge,Ms(P)))},[on,Ge,r,tn,Ms]);let zv=(0,I.useCallback)((P,V)=>{Of.current.add(P),hP(W=>W+1),Qb?.(P,V)},[Qb]),Fv=on&&Et?Et.find(P=>Ae(P)===Ge)?.mergeModels:Jm,Hv=(0,I.useMemo)(()=>new Set((Fv??[]).map(P=>P.url)),[Fv]),Gv=(0,I.useCallback)(P=>{P.lengthComputable&&P.total>0&&If(P.loaded/P.total*100),R?.(P)},[R]),Wv=(0,I.useCallback)((P,V,W)=>{if(!Qe)return;let le={...Ze,lighting:{...Ze.lighting,lights:Ze.lighting.lights.map(ye=>ye.id===P?{...ye,position:V,...W?{rotation:W}:{}}:ye)}};Qe(le)},[Ze,Qe]);(0,I.useEffect)(()=>{let P=Mt.current;if(!tn||!P){gs(!1);return}if(Array.from(Hv).some(st=>!Of.current.has(st))){gs(!1);return}let W=Object.entries(Ve).filter(([,st])=>!st.removed);if(W.length===0){gs(!1);return}let le=i?Ny.current:(()=>{let st=zy.current;for(let dt of Object.keys(cr(P).nodesById))st.add(dt);return st})();if(!le||le.size===0){gs(!1);return}let ye=W.map(([st,dt])=>dt.modelObjectId??st).filter(st=>!le.has(st));gs(ye.length>0),fP(ye.length);let _t=ye.join(`