@liveroom-tech/react-immersive 4.2.8 → 4.2.9

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
@@ -3684,6 +3684,6 @@ void main() {
3684
3684
  gl_FragColor = texelFetch( map, pixel, 0 );
3685
3685
 
3686
3686
  }
3687
- `}))}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:i,_target:r}=this;Ls.min.copy(t),Ls.max.copy(t),Ls.max.x+=1,Ls.max.y+=1,i.initRenderTarget(r),i.copyTextureToTexture(e,r.texture,Ls,n,0)}},Fi=new class{constructor(){let e=null;Object.getOwnPropertyNames(vg.prototype).forEach(t=>{t!=="constructor"&&(this[t]=(...n)=>(e||(e=new vg),e[t](...n)))})}},xg=new Q.Vector2,yg=new Q.Vector2,wg=new Q.Vector2;function L1(e,t){return t===0?e.getAttribute("uv"):e.getAttribute(`uv${t}`)}function kg(e,t,n=[,,,]){let i=3*t,r=3*t+1,a=3*t+2;return e.index&&(i=e.index.getX(i),r=e.index.getX(r),a=e.index.getX(a)),n[0]=i,n[1]=r,n[2]=a,n}function Dg(e,t,n,i,r){let[a,o,s]=i,c=L1(e,t);xg.fromBufferAttribute(c,a),yg.fromBufferAttribute(c,o),wg.fromBufferAttribute(c,s),r.set(0,0,0).addScaledVector(xg,n.x).addScaledVector(yg,n.y).addScaledVector(wg,n.z)}function Bg(e,t,n,i){let r=e.x-Math.floor(e.x),a=e.y-Math.floor(e.y),o=Math.floor(r*t%t),s=Math.floor(a*n%n);return i.set(o,s),i}var _g=new Q.Vector2,Sg=new Q.Vector2,Mg=new Q.Vector2,k1=class extends Cc{constructor(e,t,n=null){super(e,t,n),this.channels=Rn(n,"channels",[0]),this.index=Rn(n,"index",null),this.texCoord=Rn(n,"texCoord",null),this.valueLength=parseInt(this.type.replace(/[^0-9]/g,""))||1}readDataFromBuffer(e,t,n=null){let i=this.type;if(i==="BOOLEAN"||i==="STRING")throw Error("PropertyTextureAccessor: BOOLEAN and STRING types not supported.");return Lg(e,t*this.valueLength,i,n)}},D1=class extends $u{constructor(...e){super(...e),this.isPropertyTextureAccessor=!0,this._asyncRead=!1,this._initProperties(k1)}getData(e,t,n,i={}){let r=this.properties;Sc(r,i);let a=Object.keys(r),o=a.map(s=>i[s]);return this.getPropertyValuesAtTexel(a,e,t,n,o),a.forEach((s,c)=>i[s]=o[c]),i}async getDataAsync(e,t,n,i={}){let r=this.properties;Sc(r,i);let a=Object.keys(r),o=a.map(s=>i[s]);return await this.getPropertyValuesAtTexelAsync(a,e,t,n,o),a.forEach((s,c)=>i[s]=o[c]),i}getPropertyValuesAtTexelAsync(...e){this._asyncRead=!0;let t=this.getPropertyValuesAtTexel(...e);return this._asyncRead=!1,t}getPropertyValuesAtTexel(e,t,n,i,r=[]){for(;r.length<e.length;)r.push(null);r.length=e.length,Fi.increaseSizeTo(r.length);let a=this.data,o=this.definition.properties,s=this.properties,c=kg(i,t);for(let d=0,h=e.length;d<h;d++){let f=e[d];if(!o[f])continue;let g=s[f],x=a[g.index];Dg(i,g.texCoord,n,c,_g),Bg(_g,x.image.width,x.image.height,Sg),Mg.set(d,0),Fi.renderPixelToTarget(x,Sg,Mg)}let l=new Uint8Array(e.length*4);if(this._asyncRead)return Fi.readDataAsync(l).then(()=>(u.call(this),r));return Fi.readData(l),u.call(this),r;function u(){for(let d=0,h=e.length;d<h;d++){let f=e[d],g=s[f],x=g.type;if(r[d]=Yu(g,r[d]),!g)throw Error("PropertyTextureAccessor: Requested property does not exist.");if(!o[f]){r[d]=g.resolveDefault(r);continue}let P=g.valueLength*(g.count||1),y=g.channels.map(M=>l[4*d+M]),p=g.componentType,m=new(Ds(p,x))(P);if(new Uint8Array(m.buffer).set(y),g.array){let M=r[d];for(let _=0,T=M.length;_<T;_++)M[_]=g.readDataFromBuffer(m,_,M[_])}else r[d]=g.readDataFromBuffer(m,0,r[d]);r[d]=g.adjustValueScaleOffset(r[d]),r[d]=g.resolveEnumsToStrings(r[d]),r[d]=g.resolveNoData(r[d])}}}dispose(){this.data.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},Wu=class{constructor(e,t,n,i=null,r=null){let{schema:a,propertyTables:o=[],propertyTextures:s=[],propertyAttributes:c=[]}=e,{enums:l,classes:u}=a,d=o.map(g=>new R1(g,u,l,n)),h=[],f=[];i&&(i.propertyTextures&&(h=i.propertyTextures.map(g=>new D1(s[g],u,l,t))),i.propertyAttributes&&(f=i.propertyAttributes.map(g=>new A1(c[g],u,l)))),this.schema=a,this.tableAccessors=d,this.textureAccessors=h,this.attributeAccessors=f,this.object=r,this.textures=t,this.nodeMetadata=i}getPropertyTableData(e,t,n=null){if(!Array.isArray(e))n||(n={}),n=this.tableAccessors[e].getData(t,n);else{n||(n=[]);let i=Math.min(e.length,t.length);n.length=i;for(let r=0;r<i;r++){let a=this.tableAccessors[e[r]];n[r]=a.getData(t[r],n[r])}}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 i=this.textureAccessors;n.length=i.length;for(let r=0;r<i.length;r++)n[r]=i[r].getData(e,t,this.object.geometry,n[r]);return n}async getPropertyTextureDataAsync(e,t,n=[]){let i=this.textureAccessors;n.length=i.length;let r=[];for(let a=0;a<i.length;a++){let o=i[a].getDataAsync(e,t,this.object.geometry,n[a]).then(s=>{n[a]=s});r.push(o)}return await Promise.all(r),n}getPropertyTextureInfo(){return this.textureAccessors}getPropertyAttributeData(e,t=[]){let n=this.attributeAccessors;t.length=n.length;for(let i=0;i<n.length;i++)t[i]=n[i].getData(e,this.object.geometry,t[i]);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())}},ks="EXT_structural_metadata";function B1(e,t=[]){let n=e.json.textures?.length||0,i=Array(n).fill(null);return t.forEach(({properties:r})=>{for(let a in r){let{index:o}=r[a];i[o]===null&&(i[o]=e.loadTexture(o))}}),Promise.all(i)}function N1(e,t=[]){let n=e.json.bufferViews?.length||0,i=Array(n).fill(null);return t.forEach(({properties:r})=>{for(let a in r){let{values:o,arrayOffsets:s,stringOffsets:c}=r[a];i[o]===null&&(i[o]=e.getDependency("bufferView",o)),i[s]===null&&(i[s]=e.getDependency("bufferView",s)),i[c]===null&&(i[c]=e.getDependency("bufferView",c))}}),Promise.all(i)}var Ng=class{constructor(e){this.parser=e,this.name=ks}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(ks))return;let i=null,r=t.json.extensions[ks];if(r.schemaUri){let{manager:c,path:l,requestHeader:u,crossOrigin:d}=t.options,h=new URL(r.schemaUri,l).toString(),f=new Q.FileLoader(c);f.setCrossOrigin(d),f.setResponseType("json"),f.setRequestHeader(u),i=f.loadAsync(h).then(g=>{r={...r,schema:g}})}let[a,o]=await Promise.all([B1(t,r.propertyTextures),N1(t,r.propertyTables),i]),s=new Wu(r,a,o);e.userData.structuralMetadata=s,e.traverse(c=>{if(t.associations.has(c)){let{meshes:l,primitives:u}=t.associations.get(c),d=t.json.meshes[l]?.primitives[u];if(d&&d.extensions&&d.extensions[ks]){let h=d.extensions[ks];c.userData.structuralMetadata=new Wu(r,a,o,h,c)}else c.userData.structuralMetadata=s}})}},Cg=new Q.Vector2,Tg=new Q.Vector2,Pg=new Q.Vector2;function O1(e){return e.x>e.y&&e.x>e.z?0:e.y>e.z?1:2}var Og=class{constructor(e,t,n){this.geometry=e,this.textures=t,this.data=n,this._asyncRead=!1,this.featureIds=n.featureIds.map(i=>{let{texture:r,...a}=i,o={label:null,propertyTable:null,nullFeatureId:null,...a};return r&&(o.texture={texCoord:0,channels:[0],...r}),o})}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:i,featureIds:r}=this,a=Array(r.length).fill(null),o=r.length;Fi.increaseSizeTo(o);let s=kg(n,e),c=s[O1(t)];for(let d=0,h=r.length;d<h;d++){let f=r[d],g="nullFeatureId"in f?f.nullFeatureId:null;if("texture"in f){let x=i[f.texture.index];Dg(n,f.texture.texCoord,t,s,Cg),Bg(Cg,x.image.width,x.image.height,Tg),Pg.set(d,0),Fi.renderPixelToTarget(i[f.texture.index],Tg,Pg)}else if("attribute"in f){let x=n.getAttribute(`_feature_id_${f.attribute}`).getX(c);x!==g&&(a[d]=x)}else{let x=c;x!==g&&(a[d]=x)}}let l=new Uint8Array(o*4);if(this._asyncRead)return Fi.readDataAsync(l).then(()=>(u(),a));return Fi.readData(l),u(),a;function u(){let d=new Uint32Array(1);for(let h=0,f=r.length;h<f;h++){let g=r[h],x="nullFeatureId"in g?g.nullFeatureId:null;if("texture"in g){let{channels:P}=g.texture,y=P.map(m=>l[4*h+m]);new Uint8Array(d.buffer).set(y);let p=d[0];p!==x&&(a[h]=p)}}}}dispose(){this.textures.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},Mc="EXT_mesh_features";function Ag(e,t,n){e.traverse(i=>{if(t.associations.has(i)){let{meshes:r,primitives:a}=t.associations.get(i),o=t.json.meshes[r]?.primitives[a];o&&o.extensions&&o.extensions[Mc]&&n(i,o.extensions[Mc])}})}var Ig=class{constructor(e){this.parser=e,this.name=Mc}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(Mc))return;let i=t.json.textures?.length||0,r=Array(i).fill(null);Ag(e,t,(o,{featureIds:s})=>{s.forEach(c=>{if(c.texture&&r[c.texture.index]===null){let l=c.texture.index;r[l]=t.loadTexture(l)}})});let a=await Promise.all(r);Ag(e,t,(o,s)=>{o.userData.meshFeatures=new Og(o.geometry,a,s)})}},zg=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])}}},Ku=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 Eg.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 zg),this.metadata&&(t.register(()=>new Ng),t.register(()=>new Ig)),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:fT}=Q.MathUtils;var gT=new Xu.FullScreenQuad(new Q.MeshBasicMaterial),I1=new Q.DataTexture(new Uint8Array([255,255,255,255]),1,1);I1.needsUpdate=!0;var z1=0,U1=1,V1=2,F1=3,j1=4,H1=5,G1=6,W1=7,X1=8,q1=9,Y1=10,$1=11,bT=Object.freeze({NONE:z1,SCREEN_ERROR:U1,GEOMETRIC_ERROR:V1,DISTANCE:F1,DEPTH:j1,RELATIVE_DEPTH:H1,IS_LEAF:G1,RANDOM_COLOR:W1,RANDOM_NODE_COLOR:X1,CUSTOM_COLOR:q1,LOAD_ORDER:Y1,INDEXED_COLOR:$1});var vT=Math.PI/4,xT=3/5;var Vi={NONE:0,NOT_READY:1,NO_FIT:2,DEPTH:3,OCCUPANCY:4,SPACING:5,ANGLE:6,FACING:7};var yT=new class{constructor(){this._cache={}}getColor(...e){let t=e.pop(),n=e.join("_"),{_cache:i}=this;return n in i||(t.setHSL(Math.random(),1,.5),i[n]=t.getHex()),t.set(i[n])}};var wT={[Vi.NONE]:16777215,[Vi.NOT_READY]:7829367,[Vi.NO_FIT]:2250239,[Vi.DEPTH]:4473924,[Vi.OCCUPANCY]:65535,[Vi.SPACING]:16776960,[Vi.ANGLE]:16711680,[Vi.FACING]:16711935};var _T=Math.PI/180;var ST=xa*Math.PI*2;var MT=xa*Math.PI*2;var jg=require("three/examples/jsm/loaders/DRACOLoader.js"),Hg=require("three/examples/jsm/loaders/KTX2Loader.js"),Gg=require("three/examples/jsm/libs/meshopt_decoder.module.js"),or=require("three");var Os=require("three");function Ug(e){return!!e&&!e.isInterleavedBufferAttribute}function Vg(e,t,n,i){for(let r=0;r<e.count;r+=1)for(let a=0;a<e.itemSize;a+=1)t.setComponent(r,a,Os.MathUtils.clamp(e.getComponent(r,a),n,i));return t}function K1(e){for(let t=0;t<e.count;t+=1)for(let n=0;n<e.itemSize;n+=1){let i=e.getComponent(t,n);if(!Number.isFinite(i)||i<0||i>1)return!1}return!0}var Tc=class{constructor(){this.name="RI_VERTEX_COMPRESSION_PLUGIN";this.priority=-99}processTileModel(t){t.traverse(n=>{let i=n.geometry;if(!i)return;let r=i.attributes.normal;Ug(r)&&!(r.array instanceof Int16Array)&&(i.attributes.normal=Vg(r,new Os.BufferAttribute(new Int16Array(r.count*r.itemSize),r.itemSize,!0),-1,1));for(let a of["uv","uv1","uv2","uv3"]){let o=i.attributes[a];!Ug(o)||o.array instanceof Uint16Array||!K1(o)||(i.attributes[a]=Vg(o,new Os.BufferAttribute(new Uint16Array(o.count*o.itemSize),o.itemSize,!0),0,1))}})}};var Is=require("react/jsx-runtime"),Z1=0,Fg=4,J1=6,Q1=12,ew=4;function tw(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 Zu({url:e,rotation:t=[0,0,0],errorTarget:n=64,cacheSize:i=800,memoryBudgetMB:r=800,decoderConfig:a,objectBindings:o,itemMaterials:s,sceneConfig:c,selectedItem:l,panelHoveredItem:u,highlightOnHover:d=!0,onItemClick:h,onItemHover:f,onObjectCatalog:g,onTilesetBounds:x,onModelLoaded:P,onLoadError:y,nodeRefsOut:p,onNodeRefsChange:m,materialRefsOut:M,explodeFactor:_=0,suspendBindingTransforms:T=!1}){let{camera:E,gl:b,invalidate:w}=(0,Pc.useThree)(),C=(0,Xe.useRef)(null),[S,O]=(0,Xe.useState)(null),L=(0,Xe.useRef)({onItemClick:h,onItemHover:f,onObjectCatalog:g,onTilesetBounds:x,onModelLoaded:P,onLoadError:y,onNodeRefsChange:m});L.current={onItemClick:h,onItemHover:f,onObjectCatalog:g,onTilesetBounds:x,onModelLoaded:P,onLoadError:y,onNodeRefsChange:m};let V=(0,Xe.useRef)(!0),[R,F]=(0,Xe.useState)(null),U=(0,Xe.useRef)(null);U.current=R;let k=(0,Xe.useRef)([]),D=(0,Xe.useRef)(!1);(0,Xe.useEffect)(()=>{let J=new nc;return F(J),()=>J.dispose()},[e]);let q=(0,Xe.useRef)(null),$=(0,Xe.useRef)(0),pe=(0,Xe.useRef)(!1),Ae=r*1024*1024,ye=(0,Xe.useRef)(!1),Ee=(0,Xe.useRef)(vu),Ue=(0,Xe.useRef)(null),Re=(0,Xe.useRef)(null),Wt=(0,Xe.useRef)(null);(0,Xe.useEffect)(()=>()=>{Wt.current!==null&&clearTimeout(Wt.current)},[]);let Tt=a?.dracoDecoderPath??lu,Ze=a?.ktx2TranscoderPath??cu,Le=a?.meshopt??!0,[re,It]=(0,Xe.useState)(null);(0,Xe.useEffect)(()=>{pe.current=!1,ye.current=!1;let J=new Hu(e);J.loadAncestors=!0;let Se=new lc;Se.priorityCallback=J.downloadQueue.priorityCallback,Se.maxJobsPerOrigin=Q1;let ce=new ti;ce.priorityCallback=J.parseQueue.priorityCallback,ce.maxJobs=J1;let ke=new ti;ke.priorityCallback=J.processNodeQueue.priorityCallback,ke.maxJobs=J.processNodeQueue.maxJobs;let Ve=new ys;Ve.unloadPriorityCallback=J.lruCache.unloadPriorityCallback,J.downloadQueue=Se,J.parseQueue=ce,J.processNodeQueue=ke,J.lruCache=Ve;let Fe=Tt?new jg.DRACOLoader().setDecoderPath(Tt).setWorkerLimit(ew):null,Ye=Ze?new Hg.KTX2Loader().setTranscoderPath(Ze).detectSupport(b):null;return J.registerPlugin(new Ku({dracoLoader:Fe,ktxLoader:Ye,meshoptDecoder:Le?Gg.MeshoptDecoder:null,autoDispose:!1})),J.registerPlugin(new qu({disableMipmaps:!0,compressIndex:!0,compressNormals:!1,compressUvs:!1,compressPosition:!0})),J.registerPlugin(new Tc),It(J),window.__riTiles=J,()=>{J.forEachLoadedModel(xe=>da(xe)),J.dispose(),Fe?.dispose(),Ye?.dispose(),It(xe=>xe===J?null:xe)}},[Tt,b,Ze,Le,e]),(0,Xe.useEffect)(()=>{re&&(Ee.current=vu,Ue.current=null,re.errorTarget=n,re.lruCache.maxSize=i,re.lruCache.minSize=Math.max(1,Math.floor(i*.75)),re.lruCache.maxBytesSize=Ae,re.lruCache.minBytesSize=Ae*.75,w())},[i,n,w,Ae,re]);let et=(0,Xe.useMemo)(()=>{let J=o??{};return{objectBindings:J,keyByModelObject:Mf(J),itemMaterials:s,shadingMode:c?.model.shading??"lit",rendererMode:c?.model.renderer??"pbr",selectedKey:l??null,hoveredKey:Cf(S,u),highlightOnHover:d,suspendTransforms:T,placementFrame:re?.group.matrixWorld,invalidate:w}},[S,d,w,s,o,u,c,l,T,re]),Pt=(0,Xe.useCallback)(()=>{if(!re)return;let J=Qt.current,Se=D.current?U.current?.nodesByBinding(J)??{}:{},ce={};re.group.traverse(Ye=>{if(!Ye.isMesh)return;let xe=gu(Ye);if(!xe)return;let wt=J.keyByModelObject[xe]??xe;if(!J.objectBindings[wt])return;Se[wt]||(Se[wt]=Ye);let mt=Ye.material;mt&&(ce[wt]=mt)});let ke=p?.current??{},Ve=Object.keys(ke),Fe=Ve.length!==Object.keys(Se).length||Ve.some(Ye=>ke[Ye]!==Se[Ye]);p&&(p.current=Se),M&&(M.current=ce),(Fe||!p)&&L.current.onNodeRefsChange?.()},[M,p,re]),xt=(0,Xe.useCallback)(J=>ec(J,et),[et]),je=(0,Xe.useCallback)(J=>Pf(J,et),[et]),yt=(0,Xe.useRef)(je);yt.current=je;let Qt=(0,Xe.useRef)(et);Qt.current=et;let we=(0,Xe.useCallback)(()=>{let J=q.current,Se=$.current;return!J||Se<=0?Qt.current:{...Qt.current,explode:{factor:Se,centre:J.centre,radius:J.radius}}},[]);(0,Xe.useEffect)(()=>{re&&(je(re.group),V.current=!0,re.forEachLoadedModel(J=>{je(J),uo(J,we())}),w())},[je,w,we,re]),(0,Xe.useEffect)(()=>{let J=tw(e);if(!J)return;let Se=!1;return fetch(J).then(ce=>ce.ok?ce.json():null).then(ce=>{Se||!ce?.objects||(k.current=ce.objects,D.current=ce.bindingFrame==="gltf-identity-v2",D.current&&U.current?.setCatalog(ce.objects),V.current=!0,L.current.onObjectCatalog?.(ce.objects),w())}).catch(()=>{}),()=>{Se=!0}},[e,w,R]),(0,Xe.useEffect)(()=>{if(!re)return;let J=!1,Se=()=>w(),ce=xe=>{xe.scene&&(xe.scene.traverse(wt=>{let mt=wt.material;for(let an of Array.isArray(mt)?mt:mt?[mt]:[])an.transparent&&an.side===or.DoubleSide&&(an.forceSinglePass=!0)}),yt.current(xe.scene),uo(xe.scene,we()),$a(xe.scene)),V.current=!0,J||(J=!0,L.current.onModelLoaded?.(re.group)),w()},ke=xe=>{L.current.onLoadError?.(xe.error)},Ve=xe=>{xe.scene&&(bu(xe.scene),da(xe.scene)),V.current=!0};re.setCamera(E),re.setResolutionFromRenderer(E,b),re.addEventListener("needs-update",Se),re.addEventListener("load-model",ce),re.addEventListener("load-error",ke),re.addEventListener("dispose-model",Ve);let Fe=()=>{V.current=!0,w()};re.addEventListener("tile-visibility-change",Fe);let Ye=()=>{let xe=re.root;xe&&!xe.content?.uri&&xe.refine==="REPLACE"&&(xe.refine="ADD",w())};return re.addEventListener("load-root-tileset",Ye),w(),()=>{re.removeEventListener("needs-update",Se),re.removeEventListener("load-model",ce),re.removeEventListener("load-error",ke),re.removeEventListener("dispose-model",Ve),re.removeEventListener("tile-visibility-change",Fe),re.removeEventListener("load-root-tileset",Ye),bu(re.group),re.deleteCamera(E),p&&(p.current={}),M&&(M.current={})}},[E,b,w,M,p,we,re]);let rn=(0,Xe.useCallback)(J=>{let Se=xt(J.object);Se&&(J.stopPropagation(),L.current.onItemClick?.(Se.binding))},[xt,h]),Zt=(0,Xe.useCallback)(J=>{let Se=xt(J.object),ce=Se?.key??null;ce!==C.current&&(C.current=ce,O(ce),L.current.onItemHover?.(Se?.binding??null))},[xt]),Oe=(0,Xe.useCallback)(()=>{C.current!==null&&(C.current=null,O(null),L.current.onItemHover?.(null))},[]);return(0,Xe.useEffect)(()=>{w()},[w,re]),(0,Pc.useFrame)((J,Se)=>{if(!re)return;if(re.setResolutionFromRenderer(E,b),D.current&&R){let on=R.sync(we(),l,T);R.updateBounds(re.root),T&&re.forEachLoadedModel(j=>uo(j,on))}if(re.update(),!pe.current){let on=new or.Box3;if(re.getBoundingBox(on)){pe.current=!0,re.group.updateMatrixWorld(),on.applyMatrix4(re.group.matrixWorld);let j=on.getBoundingSphere(new or.Sphere);q.current={centre:j.center.clone(),radius:on.getSize(new or.Vector3).length()*.5},L.current.onTilesetBounds?.(on),w()}}V.current&&(V.current=!1,Pt());let ce=Math.min(Math.max(_,0),1),ke=$.current;Math.abs(ke-ce)>1e-4?($.current=or.MathUtils.lerp(ke,ce,1-Math.exp(-6*Se)),uo(re.group,we()),w()):ke!==ce&&($.current=ce,uo(re.group,we()),w());let Ve=re,Fe=re.lruCache,Ye=Fe.isFull(),xe=Ee.current,wt=xe.loosened&&Ue.current?Ue.current:{bytes:Fe.maxBytesSize,items:Fe.maxSize},mt=0;for(let on of Fe.usedSet??[])mt+=Fe.bytesMap?.get(on)??0;let an=!1,en=re;for(let on of en.usedSet??[]){let j=on.internal?.loadingState??Fg;if(on.traversal?.used&&on.internal?.hasContent&&j>=Z1&&j<Fg){an=!0;break}}let tt=Re.current??(Re.current={world:new or.Matrix4,projection:new or.Matrix4}),Qe=!tt.world.equals(E.matrixWorld)||!tt.projection.equals(E.projectionMatrix);Qe&&(tt.world.copy(E.matrixWorld),tt.projection.copy(E.projectionMatrix));let Dn={full:Ye,wanting:an,moved:Qe,usage:Math.max(mt/Math.max(1,wt.bytes),(Fe.usedSet?.size??0)/Math.max(1,wt.items)),now:performance.now()},zt=Of(xe,Dn);zt!==xe&&(zt.loosened&&(!xe.loosened||zt.raisedAt!==xe.raisedAt)?(xe.loosened||(Ue.current=wt),Fe.maxBytesSize=Math.max(wt.bytes,Fe.cachedBytes??0)*xu,Fe.maxSize=Math.ceil(Math.max(wt.items,Fe.itemSet?.size??0)*xu)):!zt.loosened&&xe.loosened&&Ue.current&&(Fe.maxBytesSize=Ue.current.bytes,Fe.maxSize=Ue.current.items,Ue.current=null),Ee.current=zt,re.errorTarget=n*zt.factor,w()),!ye.current&&Ye&&Dn.wanting&&zt.factor>=gs&&(ye.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."));let Un=If(zt,Dn);Un===0?w():Un!==null&&Wt.current===null&&(Wt.current=setTimeout(()=>{Wt.current=null,w()},Un)),((Ve.stats?.downloading??0)>0||(Ve.stats?.parsing??0)>0||Ve.loadProgress!==void 0&&Ve.loadProgress<1&&!Ye)&&w()}),re?(0,Is.jsxs)("group",{rotation:t,children:[R?(0,Is.jsx)("primitive",{object:R.group}):null,(0,Is.jsx)("primitive",{object:re.group,onClick:rn,onPointerMove:Zt,onPointerOut:Oe})]}):null}var qe=require("react"),Ju=require("@react-three/drei"),wa=require("@react-three/fiber"),ri=require("three");var Fn=require("react/jsx-runtime"),nw=.02;function Wg(e,t){let n=(0,qe.useRef)(null),i=(0,wa.useThree)(l=>l.scene),r=(0,qe.useRef)(null),a=(0,qe.useMemo)(()=>new ri.Vector3(...e.anchorLocalPosition??e.localPosition??e.worldPosition),[e.anchorLocalPosition,e.localPosition,e.worldPosition]),o=(0,qe.useMemo)(()=>new ri.Vector3,[]),s=(0,qe.useMemo)(()=>new ri.Vector3,[]),c=(0,qe.useMemo)(()=>new ri.Vector3,[]);return(0,qe.useEffect)(()=>{r.current=null},[e.anchorNodeName]),(0,wa.useFrame)(({camera:l})=>{let u=n.current,d=u?.parent;if(!u||!d)return;let h=r.current;if(e.anchorNodeName&&(!h||!h.parent)&&(h=Ur(i,e.anchorNodeName),r.current=h),h?(h.updateWorldMatrix(!0,!1),o.copy(a).applyMatrix4(h.matrixWorld)):(o.copy(a),d.localToWorld(o)),t){let f=t.current.get(e.id);f||(f=new ri.Vector3,t.current.set(e.id,f)),f.copy(o)}c.copy(l.position).sub(o),c.lengthSq()>0?(c.normalize(),s.copy(o).addScaledVector(c,nw)):s.copy(o),d.worldToLocal(s),u.position.copy(s)}),n}function rw({annotation:e,occluders:t,worldPositionsRef:n,onClick:i,onHover:r,showAnnotationOnHover:a}){let[o,s]=(0,qe.useState)(!1),c=Wg(e,n),[l,u]=(0,qe.useState)(!1),[d,h]=(0,qe.useState)(1),f=(0,qe.useRef)(null),g=(0,qe.useRef)(null),x=(0,qe.useRef)(null);(0,qe.useEffect)(()=>()=>{f.current&&(clearTimeout(f.current),f.current=null),x.current&&(clearTimeout(x.current),x.current=null)},[]);let P=_=>{_.stopPropagation(),_.preventDefault(),f.current&&(clearTimeout(f.current),f.current=null),f.current=window.setTimeout(()=>{i?.(e),f.current=null},10)},y=_=>{_.stopPropagation(),u(!0),h(100),x.current&&(clearTimeout(x.current),x.current=null),r?.(e),a&&i?.(e)},p=_=>{_.stopPropagation(),u(!1),h(1),x.current&&clearTimeout(x.current),x.current=window.setTimeout(()=>{r?.(null),a&&r?.(null),x.current=null},50)},m=_=>{_.stopPropagation();let T=_.currentTarget;T.dataset.pointerX=String(_.clientX),T.dataset.pointerY=String(_.clientY)},M=_=>{_.stopPropagation();let T=_.currentTarget,E=parseFloat(T.dataset.pointerX||"0"),b=parseFloat(T.dataset.pointerY||"0"),w=_.clientX-E,C=_.clientY-b;Math.sqrt(w*w+C*C)<10&&P(_)};return(0,Fn.jsx)("group",{ref:c,children:(0,Fn.jsx)(Ju.Html,{center:!0,occlude:t,onOcclude:s,pointerEvents:o?"none":"auto",zIndexRange:[1,200],style:{pointerEvents:o?"none":"auto",zIndex:d},className:"annotation-html-wrapper",transparent:!0,children:(0,Fn.jsx)("div",{ref:g,className:`ri-annotationMarker ${l?"ri-annotationMarker--hovered":""}`,title:e.title,style:{display:o?"none":"flex"},onPointerDown:m,onPointerUp:M,onPointerEnter:y,onPointerLeave:p,onDoubleClick:_=>{_.stopPropagation(),i?.(e)},role:"button",tabIndex:0,"aria-label":`Annotation ${e.id}`,children:(0,Fn.jsx)("span",{className:"ri-annotationMarker-id",children:e.id})})})})}function iw({annotation:e,occluders:t,popupRef:n,onClose:i,hideCloseButton:r=!1}){let[a,o]=(0,qe.useState)(!1),s=Wg(e),c=(0,Fn.jsxs)("div",{ref:n,className:"ri-viewAnnotationPopup",style:{display:a?"none":"block"},onPointerDown:l=>l.stopPropagation(),onClick:l=>l.stopPropagation(),children:[(0,Fn.jsxs)("div",{className:"ri-viewAnnotationHeader",children:[(0,Fn.jsx)("h4",{className:"ri-viewAnnotationTitle",children:e.title}),!r&&(0,Fn.jsx)("button",{onClick:l=>{l.stopPropagation(),i?.()},className:"ri-viewAnnotationClose","aria-label":"Close annotation",children:"\xD7"})]}),e.description&&(0,Fn.jsx)("p",{className:"ri-viewAnnotationDescription",children:e.description})]});return(0,Fn.jsx)("group",{ref:s,children:(0,Fn.jsx)(Ju.Html,{occlude:t,onOcclude:o,pointerEvents:a?"none":"auto",zIndexRange:[1e3,2e3],style:{pointerEvents:a?"none":"auto",zIndex:1e3},transparent:!0,children:c})})}function Qu({annotations:e,sceneConfig:t,activeAnnotation:n,popupRef:i,canvasRootRef:r,worldPositionsRef:a,modelLoaded:o,onAnnotationClick:s,onAnnotationHover:c,onCloseAnnotation:l,hideCloseButton:u=!1,showAnnotationOnHover:d=!1}){let h=(0,wa.useThree)(R=>R.invalidate),f=(0,wa.useThree)(R=>R.scene),[g,x]=(0,qe.useState)(null),[P,y]=(0,qe.useState)(!1),p=(0,qe.useRef)(null),m=(0,qe.useRef)(null),M=(0,qe.useRef)(null),_=(0,qe.useMemo)(()=>{let R=[];return f.traverse(F=>{let U=F;U.isMesh&&!U.isSkinnedMesh&&R.push({current:F})}),R},[f,e,o]),T=(0,qe.useCallback)(()=>{h();let R=()=>{h(),m.current=window.requestAnimationFrame(()=>{h(),m.current=null})};m.current=window.requestAnimationFrame(R)},[h]);(0,qe.useEffect)(()=>{T()},[e,T]),(0,qe.useEffect)(()=>{T()},[n,T]),(0,qe.useEffect)(()=>()=>{m.current!==null&&window.cancelAnimationFrame(m.current),M.current&&clearTimeout(M.current)},[]);let E=P?g:n||g,b=(0,qe.useMemo)(()=>E?e.find(R=>R.id===E.id)??E:null,[E,e]),w=(0,qe.useCallback)(R=>{if(P&&g?.id===R.id){y(!1),x(null),l?.();return}y(!0),x(R),s?.(R)},[P,g,s,l]),C=(0,qe.useCallback)(R=>{c?.(R),d&&!P&&(M.current&&(clearTimeout(M.current),M.current=null),R?x(R):M.current=window.setTimeout(()=>{x(null),l?.(),M.current=null},100))},[P,c,d,l]),S=(0,qe.useCallback)(()=>{y(!1),x(null),l?.()},[l]),O=(0,qe.useCallback)(R=>{let F=R.target;if(F.closest?.(".ri-annotationMarker")||F.closest?.(".ri-viewAnnotationPopup")||F.closest?.(".annotation-html-wrapper"))return;let U=r.current;U&&U.contains(F)&&(y(!1),x(null),l?.())},[r,l]),L=(0,qe.useCallback)(R=>{R.key==="Escape"&&P&&(y(!1),x(null),l?.())},[P,l]);(0,qe.useEffect)(()=>{let R=r.current;return R&&(R.addEventListener("click",O),R.addEventListener("pointerdown",O)),document.addEventListener("keydown",L),()=>{R&&(R.removeEventListener("click",O),R.removeEventListener("pointerdown",O)),document.removeEventListener("keydown",L)}},[r,O,L]);let V=(0,qe.useMemo)(()=>(t?.model.rotation??[0,0,0]).map(R=>R*Math.PI/180),[t?.model.rotation]);return(0,qe.useEffect)(()=>{h()},[h,V]),(0,wa.useFrame)((R,F)=>{if(!p.current)return;p.current.rotation.x=ri.MathUtils.lerp(p.current.rotation.x,V[0],1-Math.exp(-5*F)),p.current.rotation.y=ri.MathUtils.lerp(p.current.rotation.y,V[1],1-Math.exp(-5*F)),p.current.rotation.z=ri.MathUtils.lerp(p.current.rotation.z,V[2],1-Math.exp(-5*F));let{rotation:U}=p.current;Math.abs(U.x-V[0])+Math.abs(U.y-V[1])+Math.abs(U.z-V[2])>1e-4&&h()}),(0,Fn.jsxs)("group",{ref:p,children:[e.map(R=>{let F=`${R.worldPosition.join(",")}-${R.title}-${R.id}`;return(0,Fn.jsx)(rw,{annotation:R,occluders:_,worldPositionsRef:a,onClick:w,onHover:C,showAnnotationOnHover:d},F)}),b?(0,Fn.jsx)(iw,{annotation:b,occluders:_,popupRef:i,onClose:S,hideCloseButton:u},`popup-${b.id}`):null]})}var zs=require("react"),Us=require("@react-three/drei"),_a=require("three"),zn=require("react/jsx-runtime"),aw="#22d3ee",ow="#facc15";function Ac(e,t){let n=e<10?e.toFixed(3):e.toFixed(2);return t?`${n} ${t}`:n}function sw(e,t){return[(e[0]+t[0])/2,(e[1]+t[1])/2,(e[2]+t[2])/2]}function Ec({position:e,children:t}){return(0,zn.jsx)(Us.Html,{center:!0,position:e,zIndexRange:[20,0],children:(0,zn.jsx)("div",{className:"ri-measureLabel",children:t})})}function lw({box:e,unit:t}){let n=(0,zs.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,zs.useMemo)(()=>{let[s,c,l]=e.size;return new _a.EdgesGeometry(new _a.BoxGeometry(s||1e-4,c||1e-4,l||1e-4))},[e.size]);(0,zs.useEffect)(()=>()=>{i.dispose()},[i]);let[r,a,o]=e.size;return(0,zn.jsxs)("group",{position:n,children:[(0,zn.jsx)("lineSegments",{geometry:i,children:(0,zn.jsx)("lineBasicMaterial",{color:ow})}),(0,zn.jsxs)(Ec,{position:[0,-a/2,o/2],children:["W ",Ac(r,t)]}),(0,zn.jsxs)(Ec,{position:[-r/2,0,o/2],children:["H ",Ac(a,t)]}),(0,zn.jsxs)(Ec,{position:[r/2,-a/2,0],children:["D ",Ac(o,t)]})]})}function ep({points:e,unit:t,box:n,showDimensions:i}){return(0,zn.jsxs)("group",{children:[e.map(r=>(0,zn.jsx)(Us.Html,{center:!0,position:r.position,zIndexRange:[15,0],children:(0,zn.jsx)("div",{className:"ri-measureDot"})},r.id)),e.slice(1).map((r,a)=>{let o=e[a].position,s=r.position,c=new _a.Vector3(...o).distanceTo(new _a.Vector3(...s));return(0,zn.jsxs)("group",{children:[(0,zn.jsx)(Us.Line,{points:[o,s],color:aw,lineWidth:2}),(0,zn.jsx)(Ec,{position:sw(o,s),children:Ac(c,t)})]},`${e[a].id}-${r.id}`)}),i&&n?(0,zn.jsx)(lw,{box:n,unit:t}):null]})}var st=require("react"),Sa=require("@react-three/xr"),$g=require("@react-three/fiber"),Vs=require("three"),jr=require("react/jsx-runtime"),cw=1,Xg=1,dw=.1,uw=10;function pw(e,t){let[n,i,r]=e.size,a=(e.min[0]+e.max[0])/2,o=(e.min[2]+e.max[2])/2,s=Math.max(n,i,r)||1;return{scale:t==="real-world"?1:cw/s,offset:[-a,-e.min[1],-o]}}function qg(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.hypot(t,n)}function Yg(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.atan2(n,t)}var hw=(0,st.forwardRef)(function({box:t,scaleMode:n,children:i,onARStateChange:r},a){let o=(0,st.useRef)(null),s=(0,st.useRef)(null),c=(0,st.useRef)(null),l=(0,Sa.useXR)(F=>F.session!=null),u=(0,Sa.useXR)(F=>F.mode==="immersive-ar"),d=(0,st.useMemo)(()=>t?pw(t,n):null,[t,n]),h=(0,st.useRef)(new Vs.Vector3(0,0,-Xg)),f=(0,st.useRef)(1),g=(0,st.useRef)(0),x=(0,st.useRef)(!0),P=(0,st.useRef)(!1),y=(0,st.useMemo)(()=>new Vs.Matrix4,[]),p=(0,st.useRef)(new Vs.Vector3),m=(0,st.useRef)(!1),M=(0,st.useRef)(null),_=(0,st.useRef)(!1),T=(0,st.useRef)(0),E=(0,st.useRef)(0),b=(0,st.useRef)(1),w=(0,st.useRef)(0),C=(0,st.useCallback)(()=>{if(!r||!u)return;let F={canPlace:m.current,isPlacementMode:x.current,isModelPlaced:P.current},U=M.current;U&&U.canPlace===F.canPlace&&U.isPlacementMode===F.isPlacementMode&&U.isModelPlaced===F.isModelPlaced||(M.current=F,r(F))},[u,r]),S=(0,st.useCallback)(()=>!u||!m.current?!1:(h.current.copy(p.current),P.current=!0,x.current=!1,C(),!0),[C,u]),O=(0,st.useCallback)(()=>{u&&(x.current=!0,C())},[C,u]),L=(0,st.useCallback)(()=>{let F=S();return!F&&u&&(x.current=!1,C()),F},[C,u,S]),V=(0,st.useCallback)(()=>{u&&(x.current=!1,C())},[C,u]);(0,st.useImperativeHandle)(a,()=>({placeCurrent:S,startPlacementMode:O,finishPlacementMode:L,cancelPlacementMode:V}),[V,L,S,O]),(0,st.useEffect)(()=>{if(!l){h.current.set(0,0,-Xg),f.current=1,g.current=0,m.current=!1,_.current=!1,x.current=!0,P.current=!1,M.current=null;return}u&&(m.current=!1,_.current=!1,x.current=!0,P.current=!1,M.current=null,C())},[C,l,u]),(0,Sa.useXRHitTest)((F,U)=>{if(!u||F.length===0){m.current&&(m.current=!1,C());return}U(y,F[0])&&(p.current.setFromMatrixPosition(y),m.current||(m.current=!0,C()))},"viewer"),(0,Sa.useXRInputSourceEvent)("all","select",()=>{!u||_.current||!x.current||S()},[u,S]),(0,st.useEffect)(()=>{if(!u)return;let F=D=>{D.touches.length===2&&(_.current=!0,T.current=qg(D.touches),E.current=Yg(D.touches),b.current=f.current,w.current=g.current)},U=D=>{if(!_.current||D.touches.length!==2)return;D.preventDefault();let q=qg(D.touches);if(T.current>0){let pe=q/T.current;f.current=Math.min(uw,Math.max(dw,b.current*pe))}let $=Yg(D.touches);g.current=w.current-($-E.current)},k=D=>{D.touches.length===0&&requestAnimationFrame(()=>{_.current=!1})};return window.addEventListener("touchstart",F),window.addEventListener("touchmove",U,{passive:!1}),window.addEventListener("touchend",k),window.addEventListener("touchcancel",k),()=>{window.removeEventListener("touchstart",F),window.removeEventListener("touchmove",U),window.removeEventListener("touchend",k),window.removeEventListener("touchcancel",k)}},[u]),(0,$g.useFrame)(()=>{let F=o.current,U=s.current;if(!F||!U)return;!l||!d?(F.visible=!0,F.position.set(0,0,0),F.rotation.set(0,0,0),U.scale.setScalar(1)):(F.visible=!u||P.current,F.position.copy(h.current),F.rotation.set(0,g.current,0),U.scale.setScalar(d.scale*f.current));let k=c.current;if(k){let D=u&&x.current&&m.current;k.visible=D,D&&k.position.copy(p.current)}});let R=l&&d?d.offset:[0,0,0];return(0,jr.jsxs)(jr.Fragment,{children:[(0,jr.jsxs)("mesh",{ref:c,visible:!1,rotation:[-Math.PI/2,0,0],children:[(0,jr.jsx)("ringGeometry",{args:[.05,.07,32]}),(0,jr.jsx)("meshBasicMaterial",{color:"#22d3ee",transparent:!0,opacity:.95})]}),(0,jr.jsx)("group",{ref:o,children:(0,jr.jsx)("group",{ref:s,children:(0,jr.jsx)("group",{position:R,children:i})})})]})}),Kg=hw;var Ht=require("react"),Rc=require("@react-three/fiber"),Ln=require("three"),mw=1.2;function tp({controlsRef:e,sceneRef:t,config:n,playing:i,resetOnPlay:r=!1,onFinished:a,onUserInteract:o,onStop:s}){let c=(0,Rc.useThree)(V=>V.invalidate),l=(0,Ht.useMemo)(()=>n.waypoints??[],[n.waypoints]),u=l.length>=2,d=n.loop??!0,h=(0,Ht.useMemo)(()=>{if(l.length<2)return 24;let V=0;for(let R=0;R<l.length-1;R++)V+=l[R].segmentDuration??3.5;return d&&l.length>1&&(V+=l[l.length-1].segmentDuration??3.5),Math.max(V,4)},[l,d]),f=n.duration??h,g=(0,Ht.useMemo)(()=>l.map(V=>[...V.position,...V.target,V.azimuthAngle??"",V.polarAngle??"",V.segmentDuration??""].join(",")).join(";"),[l]),x=(0,Ht.useMemo)(()=>{let V=[];if(l.length<2)return V;let R=0;for(let F=0;F<l.length-1;F++)R+=l[F].segmentDuration??3.5,V.push(R);return d&&l.length>1&&(R+=l[l.length-1].segmentDuration??3.5,V.push(R)),V},[l,d]),P=(0,Ht.useMemo)(()=>V=>{if(l.length<2||x.length===0)return V/f;let R=x[x.length-1],F=d?V%f:Math.min(V,f),U=f>0?F/f*R:0;for(let k=0;k<x.length;k++)if(U<=x[k]){let D=k===0?0:x[k-1],q=x[k]-D,$=q>0?(U-D)/q:0,pe=d?l.length:l.length-1,Ae=k/pe,ye=1/pe;return Ae+$*ye}return 1},[l.length,x,f,d]),y=(0,Ht.useMemo)(()=>u?{position:new Ln.CatmullRomCurve3(l.map(V=>new Ln.Vector3(...V.position)),d,"catmullrom",.5),target:new Ln.CatmullRomCurve3(l.map(V=>new Ln.Vector3(...V.target)),d,"catmullrom",.5)}:null,[g,u,d]),p=(0,Ht.useMemo)(()=>{if(!u||!l.every(R=>Number.isFinite(R.azimuthAngle)&&Number.isFinite(R.polarAngle)))return null;let V=l.map(R=>({azimuth:R.azimuthAngle,polar:R.polarAngle,distance:new Ln.Vector3(...R.position).distanceTo(new Ln.Vector3(...R.target))}));for(let R=1;R<V.length;R+=1){let F=V[R-1].azimuth,U=V[R].azimuth;V[R].azimuth=U+Math.round((F-U)/(Math.PI*2))*Math.PI*2}return V},[g,u]),m=(0,Ht.useRef)(0),M=(0,Ht.useRef)(0),_=(0,Ht.useRef)(new Ln.Vector3),T=(0,Ht.useRef)(new Ln.Vector3),E=(0,Ht.useRef)(!1),b=(0,Ht.useRef)(0),w=(0,Ht.useRef)(!1),C=(0,Ht.useRef)(null),S=(0,Ht.useMemo)(()=>new Ln.Vector3,[]),O=(0,Ht.useMemo)(()=>new Ln.Vector3,[]),L=(0,Ht.useMemo)(()=>new Ln.Spherical,[]);return(0,Ht.useEffect)(()=>{m.current=0,b.current=0,M.current=0,w.current=!1},[g,d,f]),(0,Ht.useEffect)(()=>{r&&(b.current=0,m.current=0,w.current=!1)},[r]),(0,Ht.useEffect)(()=>{if(!i){E.current=!1,m.current>0&&!r?b.current=m.current:r&&(b.current=0),(m.current>0||w.current)&&s?.();return}m.current>=f&&!d&&(m.current=0,b.current=0,w.current=!1);let V=e.current;if(V&&(V.getPosition(_.current),V.getTarget(T.current)),r||w.current||b.current===0?(m.current=0,b.current=0,w.current=!1):b.current>0&&b.current<f?m.current=b.current:(m.current=0,b.current=0),M.current=0,!u){let R=t.current;if(R){let F=new Ln.Box3().setFromObject(R).getBoundingSphere(new Ln.Sphere);C.current={center:F.center.clone(),radius:F.radius>0?F.radius:1}}}E.current=!0,c()},[i,u,e,t,c,f,d,g,r,s]),(0,Ht.useEffect)(()=>{if(!i||!o)return;let V=e.current;if(!V)return;let R=()=>{w.current||o()};return V.addEventListener("controlstart",R),()=>V.removeEventListener("controlstart",R)},[i,e,o]),(0,Rc.useFrame)((V,R)=>{if(!i||!E.current)return;let F=e.current;if(!F)return;m.current+=R,M.current+=R;let U=P(m.current),k=!d&&m.current>=f;if(U=d?U%1:Math.min(U,1),y)if(y.target.getPoint(U,O),p){let q=d?p.length:p.length-1,$=Math.min(U,1)*q,pe=Math.min(Math.floor($),q-1),Ae=(pe+1)%p.length,ye=U>=1?1:$-pe,Ee=ye*ye*(3-2*ye),Ue=p[pe],Re=p[Ae],Wt=Re.azimuth+Math.round((Ue.azimuth-Re.azimuth)/(Math.PI*2))*Math.PI*2,Tt=Ue.azimuth+(Wt-Ue.azimuth)*Ee,Ze=Ue.polar+(Re.polar-Ue.polar)*Ee,Le=Ue.distance+(Re.distance-Ue.distance)*Ee;L.set(Math.max(Le,1e-6),Math.min(Math.max(Ze,1e-6),Math.PI-1e-6),Tt),S.setFromSpherical(L).add(O)}else y.position.getPoint(U,S);else{let q=C.current;if(!q)return;let $=U*Math.PI*2,pe=q.radius*2.2;S.set(q.center.x+Math.cos($)*pe,q.center.y+q.radius*.6,q.center.z+Math.sin($)*pe),O.copy(q.center)}let D=Math.min(M.current/mw,1);if(D<1){let q=D*D*(3-2*D);S.lerpVectors(_.current,S,q),O.lerpVectors(T.current,O,q)}if(F.setLookAt(S.x,S.y,S.z,O.x,O.y,O.z,!1),k){E.current=!1,w.current=!0,m.current=0,b.current=0,a?.();return}c()}),null}var kc=require("react");var fw="ri:license-grant:v1",gw={"260cd89ea13f":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwjr3ofKTkkcxOM0GYl/RlJj9JsuyjSF8sYmCd2YqsHJCEO8EvlNDrO2Kl4agFKo6dRhyR2/oWeiU6P9WIqRbvw=="},Zg=new Map;function Qg(e){let t=atob(e);return Uint8Array.from(t,n=>n.charCodeAt(0)).buffer}function Jg(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");return Qg(t.padEnd(Math.ceil(t.length/4)*4,"="))}function bw(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 Lc(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 np(e,t){return`${fw}:${t}:${e}`}function vw(e,t){let n=Zg.get(e);if(n)return n;let i=crypto.subtle.importKey("spki",Qg(t),{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]);return Zg.set(e,i),i}async function rp(e,t,n){if(!globalThis.crypto?.subtle)return null;try{let[i,r,a,o,...s]=e.split("."),c=gw[r];if(i!=="ri1"||!c||!a||!o||s.length>0)return null;let l=JSON.parse(new TextDecoder().decode(Jg(a)));if(!bw(l)||!await crypto.subtle.verify({name:"ECDSA",hash:"SHA-256"},await vw(r,c),Jg(o),new TextEncoder().encode(`${i}.${r}.${a}`)))return null;let d=Math.floor(Date.now()/1e3),h=l.expiresAt-l.issuedAt;return l.licenseKeyHash!==t||l.domain!==n||l.expiresAt<=d||l.issuedAt>d+300||h<=0||h>43200?null:{environment:l.environment,tier:l.tier,expiresAt:l.expiresAt}}catch{return null}}async function eb(e,t,n){try{return await rp(e,await Lc(t),n)}catch{return null}}async function tb(e,t,n){try{let i=await Lc(t);return await rp(e,i,n)?(localStorage.setItem(np(i,n),e),!0):!1}catch{return!1}}async function nb(e,t){try{let n=await Lc(e),i=np(n,t),r=localStorage.getItem(i);if(!r)return null;let a=await rp(r,n,t);return a||localStorage.removeItem(i),a}catch{return null}}async function ip(e,t){try{let n=await Lc(e);localStorage.removeItem(np(n,t))}catch{}}var xw=["localhost","127.0.0.1","0.0.0.0"],yw=e=>xw.includes(e)||e.endsWith(".local")||e.endsWith(".localhost"),ib="https://react-immersive.liveroom.dev/api/validate-license",ww=()=>typeof window<"u",_w=300*1e3,Sw=5e3,Mw=400,op=new Map,ap=new Map,ji=class extends Error{},ab=async(e,t,n)=>{let i=await nb(e,t);return i?(console.warn("[react-immersive] License server unreachable \u2014 using a previously verified, time-limited offline grant."),{status:"valid",reason:"Previously verified offline grant",environment:i.environment,tier:i.tier,isLocalDomain:n}):null},rb=async(e,t,n)=>{let i=await ab(e,t,n);return i||(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})},Cw=e=>e instanceof ji||e instanceof TypeError,Tw=()=>new Promise(e=>setTimeout(e,Mw)),Pw=e=>e==="development"||e==="production",Aw=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&&!Pw(t.environment)||t.tier!==void 0&&typeof t.tier!="string"||t.offlineGrant!==void 0&&typeof t.offlineGrant!="string")},Ew=e=>{if(!e||typeof e!="object")return null;let t=e,n=t.reason??t.error;return typeof n=="string"&&n.trim()?n:null},Rw=(e,t,n)=>`${n}::${e}::${t}`,Lw=e=>{let t=op.get(e);return t?Date.now()-t.timestamp>_w?(op.delete(e),null):t.result:null},kw=(e,t)=>({status:e.valid?"valid":"invalid",reason:e.reason,environment:e.environment,tier:e.tier,isLocalDomain:t}),Dw=(e,t)=>({status:"invalid",reason:e,isLocalDomain:t});async function Bw(e,t,n,i){let r=Rw(e,t,i),a=Lw(r);if(a)return a;let o=ap.get(r);if(o)return o;let s=(async()=>{for(let c=0;c<2;c+=1)try{return await Nw(e,t,n,r,i)}catch(l){if(!Cw(l))throw l;if(c===0){let u=await ab(e,t,n);if(u)return u;await Tw();continue}return rb(e,t,n)}return rb(e,t,n)})().finally(()=>{ap.delete(r)});return ap.set(r,s),s}async function Nw(e,t,n,i,r){let a=new AbortController,o=setTimeout(()=>a.abort(),Sw),s;try{s=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},cache:"no-store",signal:a.signal,body:JSON.stringify({licenseKey:e,domain:t})})}catch(u){throw a.signal.aborted?new ji("License validation timed out"):u}finally{clearTimeout(o)}let c;try{c=await s.json()}catch{throw new ji(`License server returned a non-JSON response${s.status?` (${s.status})`:""}`)}if(!s.ok){if(s.status===429||s.status>=500)throw new ji(`License server error (${s.status})`);let u=Ew(c)??`License validation failed${s.status?` (${s.status})`:""}`;return await ip(e,t),Dw(u,n)}if(!Aw(c))throw new ji("License server returned an unexpected payload");let l=kw(c,n);if(l.status==="valid"&&r!==ib){let u=c.offlineGrant?await eb(c.offlineGrant,e,t):null;if(!u)throw new ji("License validation endpoint did not return a verifiable signed grant");l={...l,environment:u.environment,tier:u.tier}}return l.status==="valid"?(op.set(i,{result:l,timestamp:Date.now()}),c.offlineGrant&&(await tb(c.offlineGrant,e,t)||console.warn("[react-immersive] The license server returned an invalid offline grant; it was not cached."))):await ip(e,t),l}var Dc=(e,t=ib)=>{let[n,i]=(0,kc.useState)({status:"checking",isLocalDomain:!1});return(0,kc.useEffect)(()=>{if(!ww())return;let r=!1,a=u=>{r||i(u)},o=e.trim(),s=window.location.hostname.toLowerCase(),c=yw(s);return a({status:"checking",isLocalDomain:c}),o?((async()=>{try{a(await Bw(o,s,c,t))}catch(u){let d=u instanceof TypeError?"Could not reach license server":u instanceof Error?u.message:"License validation failed";a({status:"invalid",reason:d,isLocalDomain:c})}})(),()=>{r=!0}):(a({status:"invalid",reason:"No license key provided",isLocalDomain:c}),()=>{r=!0})},[e,t]),n};var Jt=require("react");var kn=require("react/jsx-runtime"),Ow={up:{width:38,height:22},down:{width:38,height:22},left:{width:22,height:38},right:{width:22,height:38}},Iw={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"},Bc=({direction:e})=>{let t=Ow[e],n=Iw[e];return(0,kn.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,kn.jsx)("polyline",{points:n,stroke:"rgba(0, 0, 0, 0.9)",strokeWidth:"6",strokeLinecap:"round",strokeLinejoin:"round"}),(0,kn.jsx)("polyline",{points:n,stroke:"#2095F2",strokeWidth:"4",strokeLinecap:"round",strokeLinejoin:"round"})]})},Si=16,zw={"bottom-left":{bottom:Si,left:Si,top:"auto",right:"auto",transform:"none"},"bottom-right":{bottom:Si,right:Si,top:"auto",left:"auto",transform:"none"},"top-left":{top:Si,left:Si,bottom:"auto",right:"auto",transform:"none"},"top-right":{top:Si,right:Si,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:Si,left:"50%",bottom:"auto",right:"auto",transform:"translateX(-50%)"}},Uw=({controlsRef:e,enabled:t=!0,opacity:n=.9,moveSensitivity:i=.001,rotateSensitivity:r=.01,position:a="center-bottom"})=>{let o=(0,Jt.useRef)(null),[s,c]=(0,Jt.useState)({x:0,y:0}),l=(0,Jt.useRef)(!1),u=(0,Jt.useRef)({x:0,y:0}),d=(0,Jt.useRef)(),h=(0,Jt.useRef)(),f=(0,Jt.useRef)(null),g=(0,Jt.useRef)(0),x=()=>e.current,P=(L,V,R)=>{let F=Math.hypot(L,V);if(F>R){let U=R/F;return{x:L*U,y:V*U}}return{x:L,y:V}},y=L=>{let R=Math.abs(L);return R<.12?0:Math.sign(L)*((R-.12)/(1-.12))},p=(0,Jt.useCallback)(()=>{let L=()=>{let{x:V,y:R}=u.current,F=y(V),U=y(R);if(t&&(F!==0||U!==0)){let k=x();k&&k.rotate(-F*r,-U*r,!0)}d.current=requestAnimationFrame(L)};d.current=requestAnimationFrame(L)},[t,r]),m=(0,Jt.useCallback)(()=>{d.current&&cancelAnimationFrame(d.current)},[]),M=(0,Jt.useCallback)((L,V)=>{if(!o.current||!l.current)return;let R=o.current.getBoundingClientRect(),F=R.left+R.width/2,U=R.top+R.height/2,k=R.width/2-18,D=L-F,q=V-U,$=P(D,q,k);c($),u.current={x:$.x/k,y:$.y/k}},[]),_=(0,Jt.useCallback)(L=>{if(!t)return;L.preventDefault(),L.stopPropagation(),l.current=!0,p();let V="touches"in L?L.touches[0]:L;M(V.clientX,V.clientY)},[t,p,M]),T=(0,Jt.useCallback)(L=>{if(!l.current)return;L.preventDefault();let V="touches"in L?L.touches[0]:L;M(V.clientX,V.clientY)},[M]),E=(0,Jt.useCallback)(()=>{l.current=!1,c({x:0,y:0}),u.current={x:0,y:0},m()},[m]),b=i*10,w=(0,Jt.useCallback)(L=>{t&&x()?.forward(L*b,!0)},[t,b]),C=(0,Jt.useCallback)(L=>{t&&x()?.truck(L*b,0,!0)},[t,b]),S=(0,Jt.useCallback)((L,V,R)=>{if(!t)return;h.current&&cancelAnimationFrame(h.current),f.current={control:L,amount:V,action:R},g.current=0,R(V);let F=U=>{if(!f.current)return;if(g.current===0){g.current=U,h.current=requestAnimationFrame(F);return}if(U-g.current>200){let{amount:D,action:q}=f.current;q(D),g.current=U}h.current=requestAnimationFrame(F)};h.current=requestAnimationFrame(F)},[t]),O=(0,Jt.useCallback)(L=>{f.current?.control===L&&(h.current&&(cancelAnimationFrame(h.current),h.current=void 0),f.current=null,g.current=0)},[]);return(0,Jt.useEffect)(()=>(window.addEventListener("mousemove",T),window.addEventListener("mouseup",E),window.addEventListener("touchmove",T,{passive:!1}),window.addEventListener("touchend",E),window.addEventListener("touchcancel",E),()=>{window.removeEventListener("mousemove",T),window.removeEventListener("mouseup",E),window.removeEventListener("touchmove",T),window.removeEventListener("touchend",E),window.removeEventListener("touchcancel",E),m(),h.current&&cancelAnimationFrame(h.current)}),[T,E,m]),t?(0,kn.jsx)("div",{className:"mc__wrapper",style:{opacity:n,...zw[a]},children:(0,kn.jsxs)("div",{className:"mc__dpad",children:[(0,kn.jsx)("button",{"aria-label":"Move forward",className:"mc__arrow mc__arrow--up",onMouseDown:()=>S("up",1,w),onMouseUp:()=>O("up"),onMouseLeave:()=>O("up"),onTouchStart:L=>{L.preventDefault(),S("up",1,w)},onTouchEnd:()=>O("up"),onTouchCancel:()=>O("up"),children:(0,kn.jsx)(Bc,{direction:"up"})}),(0,kn.jsxs)("div",{className:"mc__middle-row",children:[(0,kn.jsx)("button",{"aria-label":"Move left",className:"mc__arrow mc__arrow--left",onMouseDown:()=>S("left",-1,C),onMouseUp:()=>O("left"),onMouseLeave:()=>O("left"),onTouchStart:L=>{L.preventDefault(),S("left",-1,C)},onTouchEnd:()=>O("left"),onTouchCancel:()=>O("left"),children:(0,kn.jsx)(Bc,{direction:"left"})}),(0,kn.jsx)("div",{ref:o,className:"mc__joystick",onMouseDown:_,onTouchStart:_,children:(0,kn.jsx)("div",{className:"mc__knob",style:{transform:`translate(${s.x}px, ${s.y}px)`}})}),(0,kn.jsx)("button",{"aria-label":"Move right",className:"mc__arrow mc__arrow--right",onMouseDown:()=>S("right",1,C),onMouseUp:()=>O("right"),onMouseLeave:()=>O("right"),onTouchStart:L=>{L.preventDefault(),S("right",1,C)},onTouchEnd:()=>O("right"),onTouchCancel:()=>O("right"),children:(0,kn.jsx)(Bc,{direction:"right"})})]}),(0,kn.jsx)("button",{"aria-label":"Move backward",className:"mc__arrow mc__arrow--down",onMouseDown:()=>S("down",-1,w),onMouseUp:()=>O("down"),onMouseLeave:()=>O("down"),onTouchStart:L=>{L.preventDefault(),S("down",-1,w)},onTouchEnd:()=>O("down"),onTouchCancel:()=>O("down"),children:(0,kn.jsx)(Bc,{direction:"down"})})]})}):null},ob=Uw;var sb=require("react-colorful"),Hi=require("react/jsx-runtime"),sp=({colorPicker:e,onClose:t,itemMaterials:n,setItemMaterials:i,inline:r=!1})=>(0,Hi.jsxs)("div",{className:`ri-popover${r?" ri-popover--inline":""}`,style:r?{padding:12}:{left:e.x,top:e.y,width:"min(225px, calc(100vw - 24px))",padding:12},onPointerDown:a=>a.stopPropagation(),children:[(0,Hi.jsx)("p",{className:"ri-popoverLabel",children:"Color"}),(0,Hi.jsx)(sb.HexColorPicker,{color:n[e.objectId]?.hex??"#ffffff",onChange:a=>i(o=>({...o,[e.objectId]:{...o[e.objectId],hex:a}}))}),(0,Hi.jsxs)("div",{className:"ri-inlineRow",children:[(0,Hi.jsx)("span",{className:"ri-colorCode",children:n[e.objectId]?.hex??"#ffffff"}),(0,Hi.jsx)("button",{className:"ri-secondaryButton",onClick:t,children:"Done"})]})]});var $n=require("react/jsx-runtime"),lp=({materialPopup:e,textureUrl:t,triggerFileUpload:n,clearTexture:i,inline:r=!1})=>(0,$n.jsxs)("div",{className:`ri-popover${r?" ri-popover--inline":""}`,style:r?{overflow:"hidden"}:{left:e.x,top:e.y,width:"min(300px, calc(100vw - 24px))",overflow:"hidden"},onPointerDown:a=>a.stopPropagation(),children:[(0,$n.jsx)("div",{className:"ri-popoverHeader",children:(0,$n.jsx)("p",{className:"ri-popoverLabel",style:{marginBottom:0},children:"Material"})}),(0,$n.jsxs)("div",{className:"ri-materialBody",children:[t?(0,$n.jsx)("div",{className:"ri-previewFrame",children:(0,$n.jsx)("img",{src:t,alt:"texture preview",className:"ri-previewImage"})}):(0,$n.jsxs)("div",{className:"ri-emptyState",children:[(0,$n.jsx)("svg",{width:"24",height:"24",fill:"none",stroke:"currentColor",strokeWidth:1.5,viewBox:"0 0 24 24",children:(0,$n.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,$n.jsx)("span",{style:{fontSize:12},children:"No texture applied"})]}),(0,$n.jsx)("button",{onClick:()=>n(e.objectId),className:"ri-uploadButton",children:t?"Replace image":"Upload image"}),t&&(0,$n.jsx)("button",{onClick:()=>i(e.objectId),className:"ri-removeButton",children:"Remove texture"}),(0,$n.jsx)("p",{className:"ri-formatHint",children:"JPG \xB7 PNG \xB7 WebP"})]})]});var Mr=require("react");var gt=require("react/jsx-runtime");function lb({entries:e}){return(0,gt.jsx)(gt.Fragment,{children:e.map(([t,n])=>{let i=n!==null&&typeof n=="object",r=i?Object.entries(n):[];return i&&r.length>0?(0,gt.jsxs)("div",{className:"left-panel__data-group",children:[(0,gt.jsx)("span",{className:"left-panel__data-key",children:t}),(0,gt.jsx)("div",{className:"left-panel__data-children",children:(0,gt.jsx)(lb,{entries:r})})]},t):(0,gt.jsxs)("div",{className:"left-panel__data-row",children:[(0,gt.jsx)("span",{className:"left-panel__data-key",children:t}),(0,gt.jsx)("span",{className:`left-panel__data-value left-panel__data-value--${typeof n}`,children:i?Array.isArray(n)?"[]":"{}":String(n)})]},t)})})}function Vw({content:e}){let t=e!=null,[n,i]=(0,Mr.useState)(t),[r,a]=(0,Mr.useState)(t),o=(0,Mr.useRef)(e);return t&&(o.current=e),(0,Mr.useEffect)(()=>{if(t){i(!0);return}if(n){a(!1);let s=setTimeout(()=>i(!1),300);return()=>clearTimeout(s)}},[t,n]),(0,Mr.useEffect)(()=>{if(n&&t){let s=requestAnimationFrame(()=>a(!0));return()=>cancelAnimationFrame(s)}},[n,t]),n?(0,gt.jsx)("div",{className:`left-panel__action-extra${r?" left-panel__action-extra--open":""}`,children:(0,gt.jsx)("div",{className:"left-panel__action-extra-inner",children:e??o.current})}):null}function cp({isOpen:e,selectedObject:t,currentAction:n,onClose:i,onAction:r,renderActionExtra:a}){let[o,s]=(0,Mr.useState)(t);(0,Mr.useEffect)(()=>{t&&s(t)},[t]);let c=t??o,l=c?Object.entries(c).filter(([u])=>u!=="actions"):[];return(0,gt.jsx)("div",{className:`left-panel ${e?"left-panel--open":"left-panel--closed"}`,children:c&&(0,gt.jsxs)(gt.Fragment,{children:[(0,gt.jsxs)("div",{className:"left-panel__header",children:[(0,gt.jsx)("p",{className:"left-panel__title",children:c.label}),(0,gt.jsx)("button",{onClick:i,className:"left-panel__close-btn","aria-label":"Close panel",children:"\u2715"})]}),l.length>0&&(0,gt.jsx)("div",{className:"left-panel__data",children:(0,gt.jsx)(lb,{entries:l})}),(0,gt.jsx)("hr",{className:"left-panel__divider"}),c.actions&&c.actions.length>0&&(0,gt.jsxs)(gt.Fragment,{children:[(0,gt.jsx)("div",{className:"left-panel__actions-label",children:"Actions"}),(0,gt.jsx)("div",{className:"left-panel__actions-list",children:c.actions.map((u,d)=>{let h=n?.action.id===u.id&&(n.binding===c||n.binding?.id===c.id||n.binding?.modelObjectId===c.modelObjectId||n.objectId===c.id||n.objectId===c.modelObjectId),f=a?.(u.id);return(0,gt.jsxs)(Mr.Fragment,{children:[(0,gt.jsx)("button",{onClick:g=>r({objectId:c.modelObjectId||c.id||"",action:u,binding:c,screenX:g.clientX,screenY:g.clientY}),className:["left-panel__action-btn",`left-panel__action-btn--${u.id}`,h?"left-panel__action-btn--active":""].filter(Boolean).join(" "),"data-action-id":u.id,"data-label":u.label,children:u.label}),(0,gt.jsx)(Vw,{content:f})]},d)})})]})]})})}var Fs=require("react"),ub=require("lucide-react");var cb=require("react");var jn=require("react/jsx-runtime");function db({openButtonLabel:e,openButtonAriaLabel:t,eyebrow:n,title:i,searchValue:r,onSearchChange:a,searchPlaceholder:o,children:s,isOpen:c,onToggle:l,openButtonIcon:u,closeButtonIcon:d,closeButtonAriaLabel:h}){let[f,g]=(0,cb.useState)(!1),x=c!==void 0?c:f,P=y=>{c===void 0&&g(y),l?.(y)};return(0,jn.jsxs)("div",{className:`ri-sidepanel-wrap ${x?"ri-sidepanel-wrap--open":"ri-sidepanel-wrap--closed"}`,children:[!x&&(0,jn.jsxs)("button",{type:"button",className:"ri-sidepanel__open-btn",onClick:()=>P(!0),"aria-label":t,title:"Open panel",children:[u,e?(0,jn.jsx)("span",{children:e}):null]}),(0,jn.jsxs)("div",{className:`ri-sidepanel ${x?"ri-sidepanel--open":"ri-sidepanel--closed"}`,"aria-hidden":!x,children:[(0,jn.jsxs)("div",{className:"ri-sidepanel__header",children:[(0,jn.jsxs)("div",{className:"ri-sidepanel__header-top",children:[(0,jn.jsx)("span",{className:"ri-sidepanel__eyebrow",children:n}),(0,jn.jsx)("button",{type:"button",className:"ri-sidepanel__close-btn",onClick:()=>P(!1),"aria-label":h,title:"Close",children:d??(0,jn.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none","aria-hidden":"true",children:(0,jn.jsx)("path",{d:"M1 1L11 11M11 1L1 11",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})})})]}),(0,jn.jsx)("p",{className:"ri-sidepanel__title",children:i})]}),(0,jn.jsx)("div",{className:"ri-sidepanel__search-wrap",children:(0,jn.jsx)("input",{className:"ri-sidepanel__search",type:"text",placeholder:o,value:r,onChange:y=>a(y.target.value)})}),(0,jn.jsx)("div",{className:"ri-sidepanel__list",children:s})]})]})}var ii=require("react/jsx-runtime");function dp({objectBindings:e,onAction:t,onFocus:n,onHover:i,isOpen:r,onToggle:a}){let[o,s]=(0,Fs.useState)(null),[c,l]=(0,Fs.useState)(""),u=(0,Fs.useMemo)(()=>Object.entries(e).filter(([d,h])=>{let f=c.toLowerCase();return d.toLowerCase().includes(f)||(h.label??"").toLowerCase().includes(f)}),[e,c]);return(0,ii.jsx)(db,{openButtonLabel:"",openButtonAriaLabel:"Open scene objects panel",openButtonIcon:(0,ii.jsx)(ub.Boxes,{width:16,height:16,"aria-hidden":"true"}),eyebrow:"SCENE OBJECTS",title:`${u.length} visible entries`,searchValue:c,onSearchChange:l,searchPlaceholder:"Search nodes, labels",isOpen:r,onToggle:a,closeButtonAriaLabel:"Close scene objects panel",children:u.map(([d,h])=>{let f=h.visible!==!1,g=o===d;return(0,ii.jsxs)("div",{onClick:()=>n(h),onMouseEnter:()=>{s(d),i?.(h)},onMouseLeave:()=>{s(null),i?.(null)},className:`ri-sidepanel__row${g?" ri-sidepanel__row--hovered":""}`,children:[(0,ii.jsx)("span",{className:`ri-sidepanel__label${g?" ri-sidepanel__label--hovered":""}`,children:h.label??d}),(0,ii.jsx)("button",{type:"button",onClick:x=>{x.stopPropagation(),t?.({objectId:d,action:{id:"toggle-visibility",label:"Toggle Visibility",type:"command"},binding:h})},className:"ri-sidepanel__vis-btn",title:f?"Hide":"Show",children:(0,ii.jsx)("span",{className:`ri-sidepanel__checkbox${f?" ri-sidepanel__checkbox--checked":""}`,children:f&&(0,ii.jsx)("svg",{width:"9",height:"9",viewBox:"0 0 10 10",fill:"none",children:(0,ii.jsx)("path",{d:"M1.5 5L4 7.5L8.5 2.5",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})})})})]},d)})})}var Pe=require("lucide-react");var Nc=require("react"),up=(0,Nc.createContext)({isInsideEditor:!1,activeTab:"object",activeSubTab:"General",tier:"free"});var Cr=()=>(0,Nc.useContext)(up);var Gi=require("react/jsx-runtime");function bo({visible:e,message:t,tone:n="default",progress:i}){if(!e)return null;let r=typeof i=="number"&&Number.isFinite(i),a=r?Math.min(Math.max(i,0),100):0,o=Math.round(a);return(0,Gi.jsxs)("div",{className:"bb-loadingOverlay",role:"status","aria-live":"polite",children:[r&&(0,Gi.jsxs)("div",{className:"bb-loadingProgressRow",children:[(0,Gi.jsx)("div",{className:"bb-loadingProgress",role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":o,children:(0,Gi.jsx)("div",{className:"bb-loadingProgress__bar",style:{width:`${o}%`}})}),(0,Gi.jsxs)("span",{className:"bb-loadingProgress__label",children:[o,"%"]})]}),(0,Gi.jsx)("span",{className:`bb-loadingMessage bb-status--${n}`,children:t})]})}var pp=new WeakSet;function vo(e){pp.add(e)}function pb(e){let t=pp.has(e);return t&&pp.delete(e),t}var Be=require("react"),Uc=require("@react-three/fiber"),Vc=require("@react-three/drei"),it=require("three");var hb="data:image/png;base64,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";var mb="data:image/png;base64,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";var fb="data:image/png;base64,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";var Ge=require("react/jsx-runtime"),hp=-100,mp=100,Sb=.03,Gw=.03,Ww=.03,gb=.5,Xw=hb,qw=mb,Yw=fb,$w=Math.PI/4,bb=.4,xo=64,vb=Sb*3,fp="#4d7dff",xb="#ffcc00",yb=.02,Kw=new it.Vector3(0,1,0),Oc=32,wb="#ff9d3d",Ic=4;function gp(e){let t=new Float32Array((xo+1)*3);for(let n=0;n<=xo;n++){let i=n/xo*Math.PI*2,r=Math.cos(i)*bb,a=Math.sin(i)*bb,o=0,s=0,c=0;e==="x"?(s=r,c=a):e==="y"?(o=r,c=a):(o=r,s=a),t[n*3]=o,t[n*3+1]=s,t[n*3+2]=c}return t}function Zw(e){let t=Math.abs(e.y)<.99?new it.Vector3(0,1,0):new it.Vector3(1,0,0),n=new it.Vector3().crossVectors(e,t).normalize(),i=new it.Vector3().crossVectors(e,n).normalize();return[n,i]}function _b(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 yo=null,bp=new Set;function js(e){yo!==e&&(yo=e,bp.forEach(t=>t()))}function vp(e){return bp.add(e),()=>bp.delete(e)}function zc(){return yo}function Mb({light:e,position:t,rotation:n=[0,0,0],color:i,intensity:r,visible:a,onPositionChange:o,onRotationChange:s,onDraggingChange:c}){let{activeTab:l,activeSubTab:u,setActiveTab:d,setActiveSubTab:h}=Cr(),{camera:f,gl:g,raycaster:x,invalidate:P}=(0,Uc.useThree)(),y=(0,Be.useRef)(null),p=(0,Be.useRef)(null),m=(0,Be.useRef)(null),M=(0,Be.useRef)(null),_=(0,Be.useRef)(null),T=(0,Be.useRef)(null),E=(0,Be.useRef)(null),b=(0,Be.useRef)(null),w=(0,Be.useRef)(null),C=(0,Be.useRef)(null),S=(0,Be.useRef)(null),O=(0,Be.useMemo)(()=>new it.Matrix4,[]),L=(0,Be.useMemo)(()=>new it.Quaternion,[]),V=(0,Be.useMemo)(()=>new it.Vector3(1,1,1),[]),R=(0,Be.useRef)([0,0,0]),F=(0,Be.useRef)([0,0,0]),U=(0,Be.useRef)(!1),k=(0,Be.useRef)(null),D=(0,Be.useRef)(null),q=(0,Be.useRef)(null),$=(0,Be.useRef)(c);(0,Be.useEffect)(()=>{$.current=c},[c]);let pe=(0,Be.useMemo)(()=>new it.Vector3(t[0],t[1],t[2]),[t]),Ae=(0,Be.useMemo)(()=>new it.Euler(n[0],n[1],n[2]),[n]),ye=(0,Be.useMemo)(()=>new Float32Array(6),[]),Ee=(0,Be.useMemo)(()=>gp("x"),[]),Ue=(0,Be.useMemo)(()=>gp("y"),[]),Re=(0,Be.useMemo)(()=>gp("z"),[]),Wt=(0,Be.useMemo)(()=>new Float32Array((Oc+1)*3),[]),Tt=(0,Be.useMemo)(()=>new Float32Array(Ic*2*3),[]),Ze=e?.type==="point",Le=e?.type==="spot",re=Ze?qw:Le?Yw:Xw,It=Ze?Gw:Le?Ww:Sb,et=(0,Be.useMemo)(()=>new it.TextureLoader().load(re),[re]),Pt=(0,Be.useSyncExternalStore)(vp,zc,zc),xt=!!e&&Pt===e.id,je=(0,Be.useRef)(new it.Vector3),yt=(0,Be.useRef)(new it.Euler);(0,Be.useEffect)(()=>{U.current||(je.current.copy(pe),yt.current.copy(Ae),P())},[pe,Ae,P]),(0,Be.useEffect)(()=>{e&&yo===e.id&&!a&&js(null)},[e?.id,a]),(0,Be.useEffect)(()=>()=>{e&&yo===e.id&&js(null),q.current!==null&&(cancelAnimationFrame(q.current),q.current=null)},[e?.id]);let Qt=(0,Be.useCallback)(()=>{if(U.current||!xt)return;let Oe=je.current,J=new it.Quaternion().setFromEuler(yt.current);O.compose(Oe,J,V)},[O,V,xt]);(0,Uc.useFrame)(()=>{if(y.current&&y.current.position.copy(je.current),Qt(),m.current){m.current.lookAt(f.position);let Oe=f,J;Oe.isOrthographicCamera?J=It/Oe.zoom:J=f.position.distanceTo(je.current)*It,m.current.scale.setScalar(J)}if(E.current){let Oe=f,J;Oe.isOrthographicCamera?J=vb/Oe.zoom:J=f.position.distanceTo(je.current)*vb,E.current.scale.setScalar(J)}if(_.current){let Oe=_.current.getAttribute("position"),J=Oe.array;J[0]=0,J[1]=0,J[2]=0,J[3]=je.current.x,J[4]=je.current.y,J[5]=je.current.z,Oe.needsUpdate=!0,_.current.computeBoundingSphere()}if(T.current){let Oe=je.current,J=Oe.length();T.current.visible=J>gb,J>1e-6&&(T.current.position.copy(Oe).multiplyScalar(.5),T.current.scale.set(1,J,1),T.current.quaternion.setFromUnitVectors(Kw,Oe.clone().normalize()))}if(M.current&&(M.current.visible=je.current.length()>gb),Le&&b.current&&w.current&&C.current){let Oe=je.current,J=Oe.length();if(J>1e-6){b.current.visible=!0;let Se=Oe.clone().negate().normalize(),ce=J,ke=e?.angle??Math.PI/6,Ve=ce*Math.tan(ke),Fe=Oe.clone().add(Se.clone().multiplyScalar(ce)),[Ye,xe]=Zw(Se),wt=w.current.getAttribute("position"),mt=wt.array;for(let tt=0;tt<=Oc;tt++){let Qe=tt/Oc*Math.PI*2,Dn=Fe.x+(Ye.x*Math.cos(Qe)+xe.x*Math.sin(Qe))*Ve,zt=Fe.y+(Ye.y*Math.cos(Qe)+xe.y*Math.sin(Qe))*Ve,Un=Fe.z+(Ye.z*Math.cos(Qe)+xe.z*Math.sin(Qe))*Ve;mt[tt*3]=Dn,mt[tt*3+1]=zt,mt[tt*3+2]=Un}wt.needsUpdate=!0,w.current.computeBoundingSphere();let an=C.current.getAttribute("position"),en=an.array;for(let tt=0;tt<Ic;tt++){let Qe=tt/Ic*Math.PI*2,Dn=Fe.x+(Ye.x*Math.cos(Qe)+xe.x*Math.sin(Qe))*Ve,zt=Fe.y+(Ye.y*Math.cos(Qe)+xe.y*Math.sin(Qe))*Ve,Un=Fe.z+(Ye.z*Math.cos(Qe)+xe.z*Math.sin(Qe))*Ve,Vn=tt*6;en[Vn]=Oe.x,en[Vn+1]=Oe.y,en[Vn+2]=Oe.z,en[Vn+3]=Dn,en[Vn+4]=zt,en[Vn+5]=Un}an.needsUpdate=!0,C.current.computeBoundingSphere()}else b.current.visible=!1}});let we=(0,Be.useCallback)(()=>{q.current!==null&&(cancelAnimationFrame(q.current),q.current=null),R.current=t,F.current=[n[0],n[1],n[2]],U.current=!0,k.current=null,D.current=null,$.current?.(!0)},[t,n]),rn=(0,Be.useCallback)((Oe,J,Se,ce)=>{let ke=new it.Vector3(R.current[0],R.current[1],R.current[2]),Ve=new it.Vector3,Fe=new it.Quaternion,Ye=new it.Vector3;ce.decompose(Ve,Fe,Ye);let xe=ke.clone().applyMatrix4(ce),wt=[Math.min(Math.max(xe.x,hp),mp),Math.min(Math.max(xe.y,hp),mp),Math.min(Math.max(xe.z,hp),mp)],mt=new it.Quaternion().setFromEuler(new it.Euler(F.current[0],F.current[1],F.current[2],"XYZ")),an=new it.Quaternion().copy(Fe).multiply(mt),en=new it.Euler().setFromQuaternion(an,"XYZ"),tt=[en.x,en.y,en.z];je.current.set(wt[0],wt[1],wt[2]),yt.current.set(tt[0],tt[1],tt[2]),k.current=wt,D.current=tt;let Qe=new it.Quaternion().setFromEuler(yt.current);O.compose(je.current,Qe,V),P()},[O,V,P]),Zt=(0,Be.useCallback)(()=>{U.current=!1;let Oe=k.current,J=D.current;k.current=null,D.current=null;let Se=Oe&&!_b(Oe,R.current),ce=J&&!_b(J,F.current);Se&&o&&o(Oe),ce&&s&&s(J),Se||ce?q.current=requestAnimationFrame(()=>{q.current=null,$.current?.(!1)}):$.current?.(!1)},[o,s]);return(0,Be.useEffect)(()=>{let Oe=ce=>{let ke=g.domElement.getBoundingClientRect();return new it.Vector2((ce.clientX-ke.left)/ke.width*2-1,-((ce.clientY-ke.top)/ke.height)*2+1)},J=ce=>!!ce.target.closest?.("button, input, textarea, .ri-annotationPopup, .ri-colorPicker, .ri-materialPicker"),Se=ce=>{if(J(ce))return;let ke=Oe(ce);x.setFromCamera(ke,f);let Ve=[];if(p.current&&Ve.push(p.current),m.current&&Ve.push(m.current),Ve.length===0)return;if(x.intersectObjects(Ve,!1).length>0){let Ye=e?.id??null;yo!==Ye&&(js(Ye),d?.("scene"),h?.("Lighting")),ce.preventDefault(),ce.stopPropagation()}};return g.domElement.addEventListener("pointerdown",Se),()=>{g.domElement.removeEventListener("pointerdown",Se)}},[f,x,g,e,d,h]),l!=="scene"||u!=="Lighting"||!e||!a||e.type==="none"||e.type==="hemisphere"?null:(0,Ge.jsxs)("group",{ref:Oe=>{Oe&&Fh(Oe)},children:[(0,Ge.jsxs)("group",{ref:y,children:[(0,Ge.jsx)("sprite",{ref:m,children:(0,Ge.jsx)("spriteMaterial",{map:et,transparent:!0,opacity:.9,blending:it.AdditiveBlending,depthWrite:!1,rotation:Le?$w:0},re)}),(0,Ge.jsx)(Vc.Sphere,{ref:p,args:[.25,16,16],children:(0,Ge.jsx)("meshBasicMaterial",{transparent:!0,opacity:.01})}),Ze&&(0,Ge.jsxs)("group",{ref:E,children:[(0,Ge.jsxs)("lineLoop",{renderOrder:999,children:[(0,Ge.jsx)("bufferGeometry",{children:(0,Ge.jsx)("bufferAttribute",{attach:"attributes-position",args:[Ee,3],count:xo+1})}),(0,Ge.jsx)("lineBasicMaterial",{color:fp,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,Ge.jsxs)("lineLoop",{renderOrder:999,children:[(0,Ge.jsx)("bufferGeometry",{children:(0,Ge.jsx)("bufferAttribute",{attach:"attributes-position",args:[Ue,3],count:xo+1})}),(0,Ge.jsx)("lineBasicMaterial",{color:fp,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,Ge.jsxs)("lineLoop",{renderOrder:999,children:[(0,Ge.jsx)("bufferGeometry",{children:(0,Ge.jsx)("bufferAttribute",{attach:"attributes-position",args:[Re,3],count:xo+1})}),(0,Ge.jsx)("lineBasicMaterial",{color:fp,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]})]})]}),!Ze&&!Le&&(0,Ge.jsxs)(Ge.Fragment,{children:[(0,Ge.jsxs)("mesh",{ref:T,children:[(0,Ge.jsx)("cylinderGeometry",{args:[yb,yb,1,8,1,!0]}),(0,Ge.jsx)("meshBasicMaterial",{color:xb,transparent:!0,opacity:.05,blending:it.AdditiveBlending,depthWrite:!1,depthTest:!1})]}),(0,Ge.jsxs)("line",{ref:M,children:[(0,Ge.jsx)("bufferGeometry",{ref:_,children:(0,Ge.jsx)("bufferAttribute",{attach:"attributes-position",args:[ye,3],count:2})}),(0,Ge.jsx)("lineBasicMaterial",{color:xb,transparent:!0,opacity:.7,blending:it.AdditiveBlending})]})]}),Le&&(0,Ge.jsxs)("group",{ref:b,children:[(0,Ge.jsxs)("lineLoop",{renderOrder:999,children:[(0,Ge.jsx)("bufferGeometry",{ref:w,children:(0,Ge.jsx)("bufferAttribute",{attach:"attributes-position",args:[Wt,3],count:Oc+1})}),(0,Ge.jsx)("lineBasicMaterial",{color:wb,transparent:!0,opacity:.85,depthTest:!1,depthWrite:!1})]}),(0,Ge.jsxs)("lineSegments",{renderOrder:999,children:[(0,Ge.jsx)("bufferGeometry",{ref:C,children:(0,Ge.jsx)("bufferAttribute",{attach:"attributes-position",args:[Tt,3],count:Ic*2})}),(0,Ge.jsx)("lineBasicMaterial",{color:wb,transparent:!0,opacity:.5,depthTest:!1,depthWrite:!1})]})]}),xt&&o&&(0,Ge.jsx)(Vc.PivotControls,{ref:S,matrix:O,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:we,onDrag:rn,onDragEnd:Zt})]})}var Rt=require("react"),Pb=require("@react-three/drei"),jc=require("@react-three/fiber"),Mn=require("three");var Sn=require("three");function Fc(e){e.updateWorldMatrix(!0,!0);let t=new Sn.Matrix4().copy(e.matrixWorld).invert(),n=new Sn.Box3,i=new Sn.Box3,r=!1;return e.traverse(a=>{let o=a;if(!o.isMesh||!o.geometry||(o.geometry.boundingBox||o.geometry.computeBoundingBox(),!o.geometry.boundingBox))return;let s=new Sn.Matrix4().multiplyMatrices(t,a.matrixWorld);i.copy(o.geometry.boundingBox).applyMatrix4(s),n.union(i),r=!0}),r?n.getCenter(new Sn.Vector3):new Sn.Vector3}function Cb(e,t="XYZ"){return new Sn.Quaternion().setFromEuler(new Sn.Euler(e[0],e[1],e[2],t))}function Jw(e,t,n,i,r="XYZ"){let o=new Sn.Vector3(...i).multiply(new Sn.Vector3(...n)).applyQuaternion(Cb(t,r)).add(new Sn.Vector3(...e));return[o.x,o.y,o.z]}function Tb(e,t,n,i,r,a="XYZ"){let o=new Sn.Vector3(...Jw(e,t,i,r,a)),s=new Sn.Vector3(...r).multiply(new Sn.Vector3(...i)).applyQuaternion(Cb(n,a)),c=o.sub(s);return[c.x,c.y,c.z]}var xp=require("react/jsx-runtime");function yp({node:e,space:t,onTransformChange:n,onDraggingChange:i}){let r=(0,jc.useThree)(S=>S.invalidate),a=(0,Rt.useMemo)(()=>Fc(e),[e]),o=(0,Rt.useMemo)(()=>new Mn.Matrix4,[]),s=(0,Rt.useRef)(!1),c=(0,Rt.useRef)(new Mn.Matrix4),l=(0,Rt.useRef)(new Mn.Matrix4),u=(0,Rt.useRef)(null),d=(0,Rt.useRef)(0),h=(0,Rt.useRef)([]),f=(0,Rt.useRef)(null),g=(0,Rt.useRef)(i);g.current=i;let x=(0,Rt.useMemo)(()=>new Mn.Vector3,[]),P=(0,Rt.useMemo)(()=>new Mn.Quaternion,[]),y=(0,Rt.useMemo)(()=>new Mn.Vector3,[]),p=(0,Rt.useMemo)(()=>new Mn.Quaternion,[]),m=(0,Rt.useMemo)(()=>new Mn.Vector3(1,1,1),[]),M=(0,Rt.useMemo)(()=>new Mn.Quaternion,[]),_=(0,Rt.useMemo)(()=>new Mn.Vector3,[]),T=(0,Rt.useMemo)(()=>new Mn.Vector3,[]),E=(0,Rt.useRef)([0,0,0]),b=(0,Rt.useCallback)(()=>{s.current||(e.updateWorldMatrix(!0,!1),x.copy(a).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(P),p.copy(P),t==="world"&&p.identity(),o.compose(x,p,m))},[x,o,p,m,e,a,t,P]);(0,Rt.useLayoutEffect)(()=>(b(),()=>{let S=f.current!==null;S&&(cancelAnimationFrame(f.current),f.current=null),(s.current||S)&&(s.current=!1,g.current(!1));for(let O of h.current)oo(O);h.current=[]}),[b]),(0,jc.useFrame)(()=>b());let w=(0,Rt.useCallback)(()=>{f.current!==null&&(cancelAnimationFrame(f.current),f.current=null),e.updateWorldMatrix(!0,!0),h.current=[];for(let S of ao(e))xf(S)||($l(S,S.matrixWorld),h.current.push(S));e.updateWorldMatrix(!0,!1),x.copy(a).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(P),e.getWorldScale(y),c.current.compose(x,P,y),l.current.copy(o),E.current=[e.rotation.x,e.rotation.y,e.rotation.z],u.current=null,s.current=!0,i(!0)},[x,o,e,i,a,P,y]),C=(0,Rt.useCallback)((S,O)=>{let L=c.current.clone().premultiply(O),V=l.current.clone().premultiply(O);L.decompose(_,P,T);let R=_.clone();V.decompose(x,p,m),t==="world"&&p.identity(),o.compose(x,p,m),S.decompose(_,M,T);let F=new Mn.Euler().setFromQuaternion(M,e.rotation.order),[U,k,D]=E.current,q=[U+F.x,k+F.y,D+F.z],$=new Mn.Quaternion().setFromEuler(new Mn.Euler(q[0],q[1],q[2],e.rotation.order)),Ae=(e.parent?.matrixWorld||new Mn.Matrix4).clone().invert(),ye=R.clone().applyMatrix4(Ae),Ee=a.clone().multiply(e.scale).applyQuaternion($),Ue=ye.clone().sub(Ee),Re=[Ue.x,Ue.y,Ue.z];e.position.set(Re[0],Re[1],Re[2]),e.rotation.set(q[0],q[1],q[2],e.rotation.order),e.updateMatrixWorld(!0),r(),u.current={position:Re,rotation:q}},[x,M,o,p,m,r,e,a,_,T,t,P]);return(0,xp.jsx)("group",{children:(0,xp.jsx)(Pb.PivotControls,{matrix:o,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:w,onDrag:(S,O,L,V)=>C(O,V),onDragEnd:()=>{s.current=!1;let S=u.current;if(u.current=null,S)n(S),f.current=requestAnimationFrame(()=>{f.current=null,i(!1)});else if(h.current.length>0){for(let O of h.current)oo(O);e.updateMatrixWorld(!0),r(),i(!1)}else i(!1);h.current=[]}})})}var z=require("react/jsx-runtime");function Qw(e){let t=e.object;if(!t.isSkinnedMesh||!e.face||!t.skeleton)return null;let n=t.geometry,i=n.getAttribute("skinIndex"),r=n.getAttribute("skinWeight"),a=n.getAttribute("position");if(!i||!r||!a)return null;let o=t.worldToLocal(e.point.clone()),s=[e.face.a,e.face.b,e.face.c],c=new pt.Vector3,l=s[0],u=1/0;for(let f of s){c.fromBufferAttribute(a,f);let g=c.distanceToSquared(o);g<u&&(u=g,l=f)}let d=i.getComponent(l,0),h=r.getComponent(l,0);for(let f=1;f<4;f++){let g=r.getComponent(l,f);g>h&&(h=g,d=i.getComponent(l,f))}return t.skeleton.bones[d]??null}function e_(e){let t=Qw(e)??e.object,n=ss(t);if(!n)return null;t.updateWorldMatrix(!0,!1);let i=t.worldToLocal(e.point.clone());return{anchorNodeName:n,anchorLocalPosition:[i.x,i.y,i.z]}}function t_(e,t,n){if(!e.anchorNodeName||!e.anchorLocalPosition)return!1;let i=Ur(t,e.anchorNodeName);return i?(i.updateWorldMatrix(!0,!1),n.set(...e.anchorLocalPosition).applyMatrix4(i.matrixWorld),!0):!1}function n_({annotation:e,enabled:t,controlsRef:n,offsetRef:i}){let r=(0,wo.useThree)(h=>h.scene),a=(0,I.useRef)(null),o=(0,I.useRef)(!1),s=(0,I.useMemo)(()=>new pt.Vector3,[]),c=(0,I.useMemo)(()=>new pt.Vector3,[]),l=(0,I.useMemo)(()=>new pt.Vector3,[]),u=e?.anchorNodeName,d=e?.anchorLocalPosition;return(0,I.useEffect)(()=>{a.current=null,o.current=!1},[u,e?.id]),(0,wo.useFrame)(()=>{let h=n.current,f=i.current;if(!t||!h||!f||!u||!d){o.current=!1;return}let g=a.current;if((!g||!g.parent)&&(g=Ur(r,u),a.current=g),!g){o.current=!1;return}g.updateWorldMatrix(!0,!1),s.set(d[0],d[1],d[2]).applyMatrix4(g.matrixWorld),!(o.current&&s.distanceToSquared(c)<1e-8)&&(c.copy(s),o.current=!0,l.copy(s).add(f),h.setLookAt(l.x,l.y,l.z,s.x,s.y,s.z,!0))}),null}function r_(e){let t={total:0,missing:0};return e.traverse(n=>{let i=n;!i.isMesh||!i.geometry||(t.total+=1,i.geometry.getAttribute("uv")||(t.missing+=1))}),t}var i_=.2;function a_({enabled:e,speed:t,controlsRef:n}){let i=(0,wo.useThree)(r=>r.invalidate);return(0,wo.useFrame)((r,a)=>{!e||!n.current||(n.current.rotate(a*i_*t,0,!1),i())}),null}function o_(e,t,n){let i=t?.camera;if(!(i instanceof pt.PerspectiveCamera))return null;let a=(e instanceof pt.Box3?e:new pt.Box3().setFromObject(e)).getSize(new pt.Vector3).length();return!Number.isFinite(a)||a<=0?null:(i.near=a/100,i.far=a*100,i.updateProjectionMatrix(),t&&n===void 0&&(t.maxDistance=a*10),a)}function s_(e,t){let n=e.camera;if(!(n instanceof pt.PerspectiveCamera)||!(t>0))return;let i=Math.min(Math.max(e.distance/200,t/1e5),t/100);Math.abs(i-n.near)<=n.near*.01||(n.near=i,n.updateProjectionMatrix())}async function Ab(e,t,n=.6){let i=e.smoothTime;e.smoothTime=n;try{return await t()}finally{e.smoothTime=i}}function Hs({modelUrl:e,tilesetUrl:t,tilesErrorTarget:n=8,tilesCacheSize:i=800,onObjectCatalog:r,modelFormat:a,licenseKey:o,licenseValidationUrl:s,objectBindings:c,selectedObject:l,panelHoveredObject:u,onObjectBindingsChange:d,onObjectSelect:h,onObjectHover:f,onObjectEditLeaseChange:g,onModelLoaded:x,onLoadError:P,onProgress:y,onCameraControllerChange:p,cameraControllerType:m,onAction:M,onHiddenObjectsChange:_,onCameraChange:T,onViewerReady:E,onTextureUpload:b,onAnimationsReady:w,onAnnotationsChange:C,activeAnnotation:S,onActiveAnnotationChange:O,lights:L,camera:V,cameraLimits:R,backgroundColor:F,shadows:U=!0,showObjectBindingDataPanel:k=!0,customObjectBindingDataPanel:D,customSceneObjectsPanel:q,showSceneObjectsPanel:$=!0,showDownloadButton:pe=!0,downloadFilename:Ae="model",showResetButton:ye=!0,showLoadingOverlay:Ee=!0,showMouseController:Ue=!1,mouseControllerPosition:Re="center-bottom",mouseControllerOpacity:Wt=1,moveSensitivity:Tt=.08,zoomSensitivity:Ze=1,sceneConfig:Le,onSceneConfigChange:re,disableZoom:It=!1,zoomOnSelected:et=!0,highlightOnHover:Pt=!0,enableCameraControls:xt=!0,onAutoFit:je,refitOnResize:yt=!0,renderMode:Qt="demand",maxDpr:we=2,preserveDrawingBuffer:rn=!1,performanceProfile:Zt="auto",dracoDecoderPath:Oe,ktx2TranscoderPath:J,meshopt:Se=!0,showMeasureTools:ce=!1,showUvCheckerButton:ke=!1,showExplodeControls:Ve=!1,cinematic:Fe,measurementUnit:Ye="m",enableXR:xe=!1,usdzUrl:wt,arScaleMode:mt="normalized",mobileHandoffUrl:an,showAnnotationNavigation:en=!0,showAnnotationOnHover:tt=!1,moveModeEnabled:Qe=!1,objectTransformSpace:Dn="world",enableKeyboardNavigation:zt=!1,showViewGizmo:Un=!1,autoRotate:Vn=!1,autoRotateSpeed:on=1}){let{isInsideEditor:j,activeTab:A,activeSubTab:G}=Cr(),ee=j&&A==="scene"&&G==="Lighting",oe=Dc(o,s),ae=(0,I.useMemo)(()=>Le??Li,[Le]),[se,kt]=(0,I.useState)(null),nt=ae.model.renderer==="uv-checker",At=ke?se??nt:nt,at=(0,I.useMemo)(()=>{let v=At?"uv-checker":nt?"pbr":ae.model.renderer;return v===ae.model.renderer?ae:{...ae,model:{...ae.model,renderer:v}}},[nt,ae,At]);(0,I.useEffect)(()=>{kt(null)},[e,ae.model.renderer,ke,t]);let Et=(0,I.useMemo)(()=>{if(F)return F;let v=ae.background;return v.enabled&&v.type==="color"?v.color:"#1c1c1d"},[F,ae]),Me=(0,I.useMemo)(()=>({dracoDecoderPath:Oe,ktx2TranscoderPath:J,meshopt:Se}),[Oe,J,Se]),Xt=(0,I.useMemo)(()=>tm(Zt),[Zt]),_e=(0,I.useRef)(null),[sn,Kn]=(0,I.useState)("orbit"),[Bn,Pn]=(0,I.useState)(!1),Gn=m!==void 0?m:sn,Xr=(0,I.useCallback)(v=>{Pn(!1),v!==Gn&&(Kn(v),p?.(v))},[Gn,p]),[Ti,ci]=(0,I.useState)(!1);(0,I.useEffect)(()=>{_e.current&&(_e.current.dollySpeed=Math.max(Ze,0))},[Ze]),(0,I.useEffect)(()=>{_e.current&&(_e.current.enabled=xt&&!Ti)},[xt,Ti]);let vn=(0,I.useRef)(null),cr=(0,I.useRef)(new Map),ea=(0,I.useRef)(null),Ut=(0,I.useRef)(null),dr=(0,I.useRef)(null),di=(0,I.useRef)({});(0,I.useEffect)(()=>()=>{for(let v of Object.values(di.current))URL.revokeObjectURL(v)},[]);let ur=(0,I.useRef)({}),[,La]=(0,I.useState)(0),rl=(0,I.useCallback)(()=>{La(v=>v+1)},[]),Eo=(0,I.useRef)({}),il=(0,I.useRef)(null),Zn=(0,I.useRef)(null),[Vt,Ro]=(0,I.useState)(null),qr=(0,I.useCallback)(v=>{Zn.current=v,Ro(v)},[]),ka=(0,I.useRef)(new Set),ui=(0,I.useRef)(null);(0,I.useEffect)(()=>{let v=Vt;if(!v||!zt||!xt||Qe)return;let N=new Set(["w","a","s","d"," ","c"]),le=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"]),ue=0,me=ut=>ut.code==="Space"?" ":ut.key.toLowerCase(),Ft=()=>{ka.current.clear(),ue=0,ui.current!==null&&(cancelAnimationFrame(ui.current),ui.current=null)},Bt=ut=>{let yn=_e.current,ft=ka.current;if(!yn||ft.size===0){ui.current=null,ue=0;return}let On=ue?Math.min((ut-ue)/1e3,.05):1/60;ue=ut;let mn=Math.max(yn.distance*.75,.01)*On;ft.has("w")&&yn.forward(mn,!1),ft.has("s")&&yn.forward(-mn,!1),ft.has("a")&&yn.truck(-mn,0,!1),ft.has("d")&&yn.truck(mn,0,!1),ft.has(" ")&&yn.truck(0,mn,!1),ft.has("c")&&yn.truck(0,-mn,!1),ui.current=requestAnimationFrame(Bt)},xn=ut=>{if(ut.target!==v){Ft();return}if(le.has(ut.key)){let ft=_e.current;if(!ft)return;ut.preventDefault();let On=Math.PI/90,mn=Math.max(ft.distance*.05,.01);ut.key==="ArrowUp"?ut.shiftKey?ft.forward(mn,!0):ft.rotate(0,-On,!0):ut.key==="ArrowDown"?ut.shiftKey?ft.forward(-mn,!0):ft.rotate(0,On,!0):ut.key==="ArrowLeft"?ft.rotate(-On,0,!0):ft.rotate(On,0,!0);return}let yn=me(ut);N.has(yn)&&(ut.preventDefault(),ka.current.add(yn),ui.current===null&&(ui.current=requestAnimationFrame(Bt)))},hn=ut=>{ka.current.delete(me(ut))};return v.addEventListener("keydown",xn),v.addEventListener("keyup",hn),v.addEventListener("blur",Ft),()=>{v.removeEventListener("keydown",xn),v.removeEventListener("keyup",hn),v.removeEventListener("blur",Ft),Ft()}},[Vt,xt,zt,Qe]);let Lo=(0,I.useRef)(null),[Da,Ba]=(0,I.useState)(c),[Nn,Na]=(0,I.useState)({}),[pr,ta]=(0,I.useState)(null),[ko,al]=(0,I.useState)(null),[Do,Bo]=(0,I.useState)(null),[xd,yd]=(0,I.useState)(null),[rr,ol]=(0,I.useState)(null),[Yr,Oa]=(0,I.useState)(null),An=(0,I.useRef)(null),Ia=(0,I.useRef)(null),No=(0,I.useRef)(0),sl=(0,I.useRef)(null),[wd,ll]=(0,I.useState)(0),$r=(0,I.useRef)(!1),na=(0,I.useRef)(!1),Oo=(0,I.useRef)(!!V);Oo.current=!!V;let Lr=(0,I.useRef)(null),[cl,ra]=(0,I.useState)(!!e),[Io,ia]=(0,I.useState)(!e||!!je||!!V),[pi,zo]=(0,I.useState)(!1),[_d,Uo]=(0,I.useState)(!1),[dl,aa]=(0,I.useState)(!1),[ul,pl]=(0,I.useState)(!1),[hl,Sd]=(0,I.useState)(null),[Md,Vo]=(0,I.useState)(!1),[hr,ml]=(0,I.useState)({total:0,missing:0}),[B,W]=(0,I.useState)("Loading model..."),[ie,he]=(0,I.useState)(null),Ie=(0,I.useRef)({}),dt=(0,I.useCallback)(()=>{let v=_e.current;if(!v||Lr.current)return;let N=v.getPosition(new pt.Vector3),le=v.getTarget(new pt.Vector3);Lr.current={position:[N.x,N.y,N.z],target:[le.x,le.y,le.z]}},[]),[_t,ot]=(0,I.useState)(!1),[kr,eh]=(0,I.useState)(0),[Cd,th]=(0,I.useState)(!1);(0,I.useEffect)(()=>{eh(0),th(!1)},[e,t]);let Fo=(0,I.useMemo)(()=>{let v=ae.cinematic,N=v?.enabled?{waypoints:v.waypoints,duration:v.duration,loop:v.loop,autoPlay:v.autoPlay}:null;return Fe===void 0?N&&(N.waypoints?.length??0)>=2?N:null:Fe===!1?null:Fe===!0?N??{}:{...N??{},...Fe}},[Fe,ae]),[oa,Kr]=(0,I.useState)(!1),[_0,za]=(0,I.useState)(!1),Td=(0,I.useRef)(!1);(0,I.useEffect)(()=>{Kr(!1),za(!1),Td.current=!1},[e,t]),(0,I.useEffect)(()=>{!Fo?.autoPlay||Td.current||pi&&Io&&!cl&&(Td.current=!0,Kr(!0),za(!1))},[Fo,pi,Io,cl]);let{xrStore:sa,presenterRef:S0,arSupported:Pd,vrSupported:nh,quickLookSupported:rh,resolvedMobileHandoffUrl:fl,isMobileHandoffOpen:ih,arOverlay:M0,openMobileHandoff:C0,closeMobileHandoff:ah,openQuickLook:T0,handleARStateChange:P0}=om({enableXR:xe,usdzUrl:wt,mobileHandoffUrl:an}),[Zr,oh]=(0,I.useState)(()=>Le?.annotations??[]);(0,I.useEffect)(()=>{if(Zr.length>0){let v=Zr.reduce((N,le)=>Math.max(N,le.id),0);vl.current=v}else vl.current=0},[Zr]);let[Jn,gl]=(0,I.useState)(null),[Pi,bl]=(0,I.useState)({title:"",description:""}),vl=(0,I.useRef)(0),[A0,sh]=(0,I.useState)(null),[mr,Ua]=(0,I.useState)(-1),[lh,xl]=(0,I.useState)(!1),Va=(0,I.useRef)(null),ln=(0,I.useMemo)(()=>[...Zr].sort((v,N)=>v.id-N.id),[Zr]),yl=(0,I.useMemo)(()=>mr<0||mr>=ln.length?null:ln[mr],[mr,ln]),Jr=(0,I.useCallback)(v=>{if(S!==void 0){O?.(v);return}sh(v?{annotation:v}:null)},[S,O]),Fa=(0,I.useCallback)(v=>{let N=_e.current,le=An.current;if(!N)return;let ue=new pt.Vector3,me=cr.current.get(v.id);me?ue.copy(me):le&&t_(v,le,ue)||ue.set(v.worldPosition[0],v.worldPosition[1],v.worldPosition[2]),vn.current=null;let Ft=N.smoothTime;N.smoothTime=.6;let Bt=v.worldNormal;if(le){let xn=new pt.Box3().setFromObject(le),hn=new pt.Vector3;xn.getCenter(hn);let ut=new pt.Vector3;xn.getSize(ut);let yn=ut.length()*.2,ft;Bt?ft=new pt.Vector3(Bt[0],Bt[1],Bt[2]):ft=ue.clone().sub(hn),ft.lengthSq()<1e-6&&ft.set(0,0,1),ft.normalize();let On=Math.max(yn*.6,.3),mn=ue.clone().add(ft.multiplyScalar(On));N.setPosition(mn.x,mn.y,mn.z,!0),v.anchorNodeName&&v.anchorLocalPosition&&(vn.current=mn.clone().sub(ue))}N.setTarget(ue.x,ue.y,ue.z,!0),Va.current&&clearTimeout(Va.current),Va.current=setTimeout(()=>{N.smoothTime=Ft,Va.current=null},800),Jr(v)},[Jr]),E0=(0,I.useCallback)(()=>{ln.length!==0&&(ot(!0),Ua(0),Fa(ln[0]))},[ln,Fa]),R0=(0,I.useCallback)(()=>{if(ln.length===0||mr<0)return;xl(!0);let v=(mr-1+ln.length)%ln.length;Ua(v),Fa(ln[v]),setTimeout(()=>xl(!1),500)},[mr,ln,Fa]),L0=(0,I.useCallback)(()=>{if(ln.length===0||mr<0)return;if(mr===ln.length-1){if(ot(!1),Ua(-1),Jr(null),_e.current&&Lr.current){let N=Lr.current;_e.current.setLookAt(N.position[0],N.position[1],N.position[2],N.target[0],N.target[1],N.target[2],!0)}return}xl(!0);let v=mr+1;Ua(v),Fa(ln[v]),setTimeout(()=>xl(!1),500)},[mr,ln,Fa,Jr]),k0=(0,I.useCallback)(()=>{if(ot(!1),Ua(-1),Jr(null),_e.current&&Lr.current){let v=Lr.current;_e.current.setLookAt(v.position[0],v.position[1],v.position[2],v.target[0],v.target[1],v.target[2],!0)}},[Jr]);(0,I.useEffect)(()=>{Ua(-1),ot(!1)},[ln.length]),(0,I.useEffect)(()=>()=>{Va.current&&clearTimeout(Va.current)},[]),(0,I.useEffect)(()=>{yl&&_t&&Jr(yl)},[yl,Jr,_t]),(0,I.useEffect)(()=>{if(Le?.annotations===void 0)return;let v=Le.annotations.map(N=>({...N,localPosition:N.localPosition??N.worldPosition}));oh(v)},[Le?.annotations]);let jo=(0,I.useCallback)(()=>{if(S!==void 0){O?.(null);return}sh(null)},[S,O]),Ho=S!==void 0?S:A0?.annotation??null,Go=(0,I.useMemo)(()=>Ho?Zr.find(N=>N.id===Ho.id)??null:null,[Ho,Zr]);(0,I.useEffect)(()=>{Ho&&!Go&&jo()},[Ho,Go,jo]);let Wo=d!==void 0,Dt=Wo?c:Da;Ie.current=Dt;let D0=(0,I.useMemo)(()=>Object.entries(Dt).map(([v,N])=>JSON.stringify([v,N.modelObjectId,N.transform??null])).sort().join(""),[Dt]),{measureMode:Xo,measureModeRef:B0,measurePoints:ch,showDimensions:Ad,measureBox:dh,modelBounds:N0,refreshBounds:uh,clearMeasurements:O0,toggleMeasureMode:I0,toggleDimensions:z0,handleMeasurePointerDown:U0,handleMeasureClick:V0}=Qh({canvasAreaRef:Zn,controlsRef:_e,sceneRef:An,modelUrl:e,modelRotation:ae.model.rotation,bindingTransformSignature:D0,modelLoaded:pi}),{isDownloading:Ed,downloadMenuOpen:F0,uvExportError:ph,toggleDownloadMenu:j0,handleDownloadMesh:H0,handleDownloadScreenshot:G0,handleDownloadUvLayout:W0}=Jh({sceneRef:An,materialRefs:Eo,rendererCaptureRef:dr,objectBindings:Dt,downloadFilename:Ae}),hh=(0,I.useMemo)(()=>Object.fromEntries(Object.entries(Dt).filter(([,v])=>v.visible===!1).map(([v])=>[v,!0])),[Dt]),hi=(0,I.useMemo)(()=>{let v=new WeakMap,N=new Map,le=new Map;for(let[ue,me]of Object.entries(Dt))v.set(me,ue),N.has(me.id)||N.set(me.id,ue),le.has(me.modelObjectId)||le.set(me.modelObjectId,ue);return{byReference:v,byId:N,byModelObjectId:le}},[Dt]),Ai=(0,I.useCallback)(v=>v?hi.byReference.get(v)??hi.byModelObjectId.get(v.modelObjectId)??hi.byId.get(v.id)??null:null,[hi]),Rd=l!==void 0,qo=Rd?l??null:xd,Dr=Ai(qo),Ld=Dr?ur.current[Dr]??null:null,mh=Ai(Pt?u??ko??Do:null),X0=mh?ur.current[mh]??null:null,fh=(0,I.useCallback)(v=>{Bo(v),f?.(v)},[f]),gh=k&&qo!==null&&Dr!==null,bh=(Dr?Dt[Dr]:null)??qo;(0,I.useEffect)(()=>{Wo||Ba(c)},[Wo,c]),(0,I.useEffect)(()=>{_?.(hh)},[hh,_]);let ja=(0,I.useCallback)(v=>{if(Gn==="pointerLock"){Xr("orbit");return}Rd||yd(v),h?.(v)},[Gn,Xr,Rd,h]),Ha=(0,I.useCallback)(v=>{Wo||Ba(v),d?.(v)},[Wo,d]),q0=(0,I.useCallback)(v=>{let N=Dr;if(!N||!v)return;let le=Ie.current[N];le&&Ha({...Ie.current,[N]:{...le,transform:{...le.transform,...v}}})},[Ha,Dr]),mi=(0,I.useCallback)((v,N)=>Dt[v]?v:N?Ai(N):hi.byId.get(v)??hi.byModelObjectId.get(v)??null,[Dt,Ai,hi]),Yo=(0,I.useCallback)((v,N)=>{let le=mi(v),ue=le?Dt[le]:void 0;!le||!ue||Ha({...Dt,[le]:{...ue,style:N(ue.style)}})},[mi,Dt,Ha]),fr=(0,I.useCallback)(()=>{if(rr){let v=Nn[rr.objectId]?.hex;v!==void 0&&(Yo(rr.objectId,N=>({...N,material:{...N?.material,baseColor:v}})),Na(N=>({...N,[rr.objectId]:{}})))}ol(null)},[rr,Nn,Yo]),vh=(0,I.useCallback)(()=>{ja(null),ta(null),fr(),Oa(null)},[ja,fr]),kd=(0,I.useCallback)((v,N,le,ue,me)=>{let Ft=il.current,Bt=Zn.current,xn=_e.current?.camera;if(!Ft)return{objectId:v,x:24,y:24};let hn=Ft.getBoundingClientRect(),ut=12,yn=hn.width-N-ut,ft=hn.height-le-ut,On=Math.max(ut,(hn.width-N)/2),mn=Math.max(ut,(hn.height-le)/2),Wa=mi(v,ue),Zo=Wa?ur.current[Wa]:null,Qr=(Xa,la)=>la<=ut?ut:Math.min(Math.max(Xa,ut),la);if(Bt&&xn&&Zo){let Xa=Bt.getBoundingClientRect(),la=new pt.Vector3;new pt.Box3().setFromObject(Zo).getCenter(la),la.project(xn);let cx=(la.x+1)/2*Xa.width+(Xa.left-hn.left),dx=(1-la.y)/2*Xa.height+(Xa.top-hn.top);return{objectId:v,x:Qr(cx+24,yn),y:Qr(dx-le/2,ft)}}let Od=typeof me?.screenX=="number"?me.screenX-hn.left:On,Id=typeof me?.screenY=="number"?me.screenY-hn.top:mn;return{objectId:v,x:Qr(Od,yn),y:Qr(Id,ft)}},[mi]),wl=(0,I.useCallback)(v=>{let{objectId:N,action:le,binding:ue}=v;switch(ta(v),le.id){case"toggle-visibility":{let me=N;ue?.modelObjectId&&(me=hi.byModelObjectId.get(ue.modelObjectId)??me);let Ft=Dt[me],Bt=Ft?.visible===!1;Ft&&Ha({...Dt,[me]:{...Ft,visible:Bt}});break}case"change-color":fr(),Oa(null),Na(me=>{let Ft=mi(N,ue)??N,Bt=me[N]?.hex,xn=Dt[Ft]?.style?.material?.baseColor;return{...me,[N]:{...me[N],hex:Bt??xn??"#ffffff"}}}),ol(kd(N,225,250,ue,v));break;case"change-material":fr(),Oa(kd(N,300,320,ue,v));break;default:break}M?.(v)},[Ha,Dt,kd,M,fr,mi,hi]);(0,I.useEffect)(()=>{if(rr)return window.addEventListener("pointerdown",fr),()=>window.removeEventListener("pointerdown",fr)},[rr,fr]),(0,I.useEffect)(()=>{if(!Yr)return;let v=()=>Oa(null);return window.addEventListener("pointerdown",v),()=>window.removeEventListener("pointerdown",v)},[Yr]),(0,I.useEffect)(()=>{if(!Go)return;let v=N=>{if(Lo.current&&!Lo.current.contains(N.target)){if(N.target.closest?.(".ri-annotationMarker"))return;jo()}};return document.addEventListener("mousedown",v),document.addEventListener("touchstart",v),()=>{document.removeEventListener("mousedown",v),document.removeEventListener("touchstart",v)}},[Go,jo]),(0,I.useEffect)(()=>{if(!Jn)return;let v=N=>{let le=N.target;if(le.closest?.(".ri-annotationPopup")||le.closest?.("button, input, textarea, .ri-measureTools, .ri-xrTools, .ri-buttonContainer"))return;let ue=Zn.current;!ue||!ue.contains(le)||(gl(null),bl({title:"",description:""}))};return document.addEventListener("mousedown",v,!0),document.addEventListener("touchstart",v,!0),()=>{document.removeEventListener("mousedown",v,!0),document.removeEventListener("touchstart",v,!0)}},[Jn]);let xh=(0,I.useCallback)((v,N)=>{let le=di.current[v];le&&URL.revokeObjectURL(le),N.startsWith("blob:")?di.current[v]=N:delete di.current[v],Yo(v,ue=>({...ue,material:{...ue?.material,texture:{path:N}}}))},[Yo]),Y0=v=>{let N=v.target.files?.[0],le=Ut.current;if(!N||!le)return;let ue=mi(le);ue&&(b?b(N,ue).then(me=>xh(ue,me),me=>console.error("onTextureUpload failed:",me)):xh(ue,URL.createObjectURL(N)),v.target.value="")},yh=v=>{Ut.current=v,ea.current?.click()},wh=v=>{let N=mi(v);if(!N)return;Yo(N,ue=>ue?.material?.texture?{...ue,material:{...ue.material,texture:void 0}}:ue);let le=di.current[N];le&&(URL.revokeObjectURL(le),delete di.current[N])},Dd=(0,I.useRef)(E);Dd.current=E;let Br=(0,I.useCallback)(()=>{let v=_e.current;!v||!Dd.current||Dd.current({controls:v,scene:An.current,objectBindings:Ie.current,nodeRefs:ur.current,homeCameraState:Lr.current,captureImage:N=>Ml(dr.current,N),invalidate:()=>dr.current?.invalidate()})},[]),Ga=(0,I.useCallback)(async(v=!1)=>{let N=_e.current,le=Ia.current??An.current;if(!N||!le)return!1;try{if(v){let ue=(le instanceof pt.Box3?le:new pt.Box3().setFromObject(le)).getBoundingSphere(new pt.Sphere),me=ue.center.clone(),Bt=N.getPosition(new pt.Vector3).clone().sub(N.getTarget(new pt.Vector3));Bt.lengthSq()<1e-6&&Bt.set(0,0,1),Bt.normalize();let xn=Math.max(ue.radius*10,20),hn=me.clone().add(Bt.multiplyScalar(xn));await N.setLookAt(hn.x,hn.y,hn.z,me.x,me.y,me.z,!1)}return ia(!0),await Ab(N,()=>N.fitToBox(le,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),await new Promise(ue=>{let me=performance.now(),Ft=()=>{N.active===!1||performance.now()-me>8e3?(N.dispatchEvent({type:"update"}),dr.current?.invalidate(),ue()):(dr.current?.invalidate(),setTimeout(Ft,100))};setTimeout(Ft,100)}),$r.current=!0,dt(),Br(),!0}catch(ue){return console.error("Fit scene error:",ue),!1}},[dt,Br]);(0,I.useEffect)(()=>{if($r.current=!1,na.current=!1,Lr.current=null,An.current=null,Ia.current=null,zo(!1),Uo(!1),aa(!1),ml({total:0,missing:0}),W("Loading model..."),he(null),!e){ra(!1),ia(!0);return}ra(!0),ia(!!je||Oo.current);let v=!1,N=null,le=me=>{N=setTimeout(ue,me)},ue=()=>{if(v||$r.current||na.current)return;let me=Ia.current??An.current;if(!_e.current||!me){le(100);return}if(No.current=o_(me,_e.current,R?.maxDistance)??No.current,pb(_e.current)){$r.current=!0,dt(),Br(),ra(!1),ia(!0),dr.current?.invalidate();return}na.current=!0,(je?je():Oo.current?Promise.resolve(!0):Ga(!0)).then(Bt=>{$r.current=Bt!==!1,$r.current?(dt(),Br(),ra(!1)):v||le(100)}).catch(()=>{$r.current=!1,v||le(100)}).finally(()=>{na.current=!1})};return le(50),()=>{v=!0,N&&clearTimeout(N)}},[dt,R?.maxDistance,Ga,e,Br,je,t]),(0,I.useEffect)(()=>{if(!yt)return;let v=Vt;if(!v)return;let N=null,le=new ResizeObserver(()=>{!$r.current||na.current||(N&&clearTimeout(N),N=setTimeout(()=>{Ga()},150))});return le.observe(v),()=>{le.disconnect(),N&&clearTimeout(N)}},[Vt,Ga,yt]);let _h=(0,I.useCallback)(v=>{if(B0.current||(Kr(!1),fr(),Oa(null),ta(null),ja(v),It||!et))return;let N=_e.current,le=Ai(v),ue=le?ur.current[le]:null;N&&v.cameraState?.position&&v.cameraState?.target?(N.setPosition(v.cameraState.position[0],v.cameraState.position[1],v.cameraState.position[2],!0),N.setTarget(v.cameraState.target[0],v.cameraState.target[1],v.cameraState.target[2],!0)):N&&ue&&N.fitToBox(ue,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[ja,fr,Ai,It,et]),Sh=(0,I.useCallback)(v=>{if(ja(v),It)return;let N=_e.current,le=Ai(v),ue=le?ur.current[le]:null;if(!N||!ue)return;let me=v.cameraState;me?.position&&me?.target?(N.setPosition(me.position[0],me.position[1],me.position[2],!0),N.setTarget(me.target[0],me.target[1],me.target[2],!0)):N.fitToBox(ue,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[ja,Ai,It]);(0,I.useEffect)(()=>{Br()},[Br]);let Mh=(0,I.useCallback)((v,N)=>{s_(N,No.current),T?.(v,N),Br()},[Br,T]),$0=(0,I.useCallback)(v=>{sl.current=new Set(v.map(N=>N.name)),ll(N=>N+1),r?.(v)},[r]),K0=(0,I.useCallback)(v=>{Ia.current=v,dr.current?.invalidate()},[]),Ch=(0,I.useCallback)(v=>{An.current=v,uh(v),ml(r_(v));let N=es(v);Sd(N>ca?N:null),Vo(!1),he(null),N>ca&&W(`Preparing large model (${Math.round(N/1e6)}M triangles) \u2014 the first display can take a while on this device...`),zo(!0),Uo(!1),pl(!1),x?.(v),Br()},[Br,x,uh]),Th=(0,I.useCallback)(v=>{ra(!1),ia(!0),Uo(!0),P?.(v)},[P]),Z0=(0,I.useCallback)(v=>{v.lengthComputable&&v.total>0&&he(v.loaded/v.total*100),y?.(v)},[y]),Ph=(0,I.useCallback)((v,N,le)=>{if(!re)return;let ue={...ae,lighting:{...ae.lighting,lights:ae.lighting.lights.map(me=>me.id===v?{...me,position:N,...le?{rotation:le}:{}}:me)}};re(ue)},[ae,re]);(0,I.useEffect)(()=>{let v=An.current;if(!pi||!v){aa(!1);return}let N=Object.entries(Dt);if(N.length===0){aa(!1);return}let le=t?sl.current:new Set(Object.keys(eo(v).nodesById));if(!le||le.size===0){aa(!1);return}let ue=N.some(([me,Ft])=>!le.has(Ft.modelObjectId??me));aa(ue)},[pi,Dt,wd,t]);let Bd=(0,I.useCallback)(async()=>{if(je){await je();return}let v=_e.current;if(!v)return;let N=Lr.current;try{N?await Ab(v,()=>v.setLookAt(N.position[0],N.position[1],N.position[2],N.target[0],N.target[1],N.target[2],!0)):await Ga()}catch(le){console.error("Reset camera error:",le)}},[je,Ga]),iS=(0,I.useCallback)(()=>{za(!1),Kr(!0)},[]),aS=(0,I.useCallback)(()=>{Kr(!1)},[]),J0=(0,I.useCallback)(()=>{Kr(!1),za(!0),setTimeout(()=>{Bd()},100)},[Bd]),Q0=(0,I.useCallback)((v,N)=>{Mh(v,N)},[Mh]),ex=(0,I.useCallback)(v=>{let N=A==="scene"&&G==="Annotations";if(v.target.closest("button, input, textarea, .ri-colorPicker, .ri-materialPicker, .ri-annotationPopup, .ri-annotationMarker, .ri-viewAnnotationPopup"))return;let ue=Zn.current,me=_e.current,Ft=me?.camera,Bt=An.current;if(!ue||!me||!Ft||!Bt||!N&&!me.enabled)return;let xn=ue.getBoundingClientRect(),hn=(v.clientX-xn.left)/xn.width*2-1,ut=-((v.clientY-xn.top)/xn.height)*2+1,yn=new pt.Raycaster;yn.setFromCamera(new pt.Vector2(hn,ut),Ft);let ft=yn.intersectObject(Bt,!0);if(ft.length===0)return;if(!N){let{x:Qr,y:Od,z:Id}=ft[0].point;me.setOrbitPoint(Qr,Od,Id);return}let On=ft[0],mn=On.point,Wa=Bt.worldToLocal(On.point.clone()),Zo=[0,0,1];if(On.face){let Qr=On.face.normal.clone().transformDirection(On.object.matrixWorld).normalize();Zo=[Qr.x,Qr.y,Qr.z]}gl({worldPosition:[mn.x,mn.y,mn.z],localPosition:[Wa.x,Wa.y,Wa.z],worldNormal:Zo,anchor:e_(On),screenX:v.clientX-xn.left,screenY:v.clientY-xn.top}),bl({title:"",description:""})},[A,G]),Ah=(0,I.useCallback)(()=>{if(!Jn||!Pi.title.trim())return;vl.current+=1;let N={id:vl.current,worldPosition:Jn.worldPosition,localPosition:Jn.localPosition,worldNormal:Jn.worldNormal,anchorNodeName:Jn.anchor?.anchorNodeName,anchorLocalPosition:Jn.anchor?.anchorLocalPosition,title:Pi.title.trim(),description:Pi.description},le=[...Zr,N];oh(le),C?.(le),gl(null)},[Jn,Pi,Zr,C]),Nd=(0,I.useCallback)(()=>gl(null),[]),tx=(0,I.useCallback)(v=>{Jr(v)},[Jr]);if(oe.status==="checking")return(0,z.jsx)("div",{className:"ri-viewer ri-viewer--license-checking",children:(0,z.jsx)(ua,{title:"Verifying License",message:"Checking your license key..."})});if(oe.status==="invalid")return(0,z.jsx)("div",{className:"ri-viewer ri-viewer--license-invalid",children:(0,z.jsx)(ua,{tone:"error",title:"Invalid License",message:oe.isLocalDomain?oe.reason??"License has been revoked or has expired":"Failed to load. Please contact the site administrator."})});let Eh=Yr?mi(Yr.objectId):null,Rh=Eh?Dt[Eh]?.style?.material?.texture?.path:void 0,nx=Zn.current?.offsetWidth??600,rx=Zn.current?.offsetHeight??400,ix=350,ax=290,ox=Jn?Math.min(Jn.screenX+12,nx-ix-8):0,sx=Jn?Math.min(Jn.screenY,rx-ax-8):0,lx=Ee&&!!e&&!_d&&!pi,$o=xe&&(sa&&(Pd||nh)||rh||!!fl),Ko=v=>16+v*42;return(0,z.jsxs)("div",{className:"ri-viewer",style:{background:Et},children:[(0,z.jsxs)("div",{className:"ri-viewerLeft",ref:il,children:[D?D({isOpen:gh,selectedObject:bh,currentAction:pr,onClose:vh,onAction:wl}):(0,z.jsx)(cp,{isOpen:gh,selectedObject:bh,currentAction:pr,onClose:vh,onAction:wl,renderActionExtra:v=>v==="change-color"&&rr?(0,z.jsx)(sp,{inline:!0,colorPicker:rr,onClose:fr,itemMaterials:Nn,setItemMaterials:Na}):v==="change-material"&&Yr?(0,z.jsx)(lp,{inline:!0,triggerFileUpload:yh,materialPopup:Yr,textureUrl:Rh,clearTexture:wh}):null}),(0,z.jsxs)("div",{className:`ri-canvasArea ${Xo?"ri-canvasArea--measuring":""} ${Io?"":"ri-canvasArea--positioning"} ${Qe?"ri-canvasArea--moveMode":""}`,ref:qr,tabIndex:zt?0:void 0,onDoubleClick:ex,onPointerDown:v=>{zt&&Zn.current?.focus({preventScroll:!0}),U0(v)},onClick:V0,children:[dl&&!ul&&(0,z.jsxs)("div",{className:"ri-bindingsMismatchBanner",children:[(0,z.jsx)(Pe.AlertTriangle,{size:14,className:"ri-bindingsMismatchBanner__icon"}),(0,z.jsx)("span",{children:"Object bindings data don't match this model"}),(0,z.jsx)("button",{type:"button",className:"ri-bindingsMismatchBanner__dismiss",onClick:v=>{v.stopPropagation(),pl(!0)},"aria-label":"Dismiss",children:(0,z.jsx)(Pe.X,{size:12})})]}),hl!==null&&!Md&&(0,z.jsxs)("div",{className:`ri-largeModelBanner ${dl&&!ul?"ri-largeModelBanner--offset":""}`,children:[(0,z.jsx)(Pe.AlertTriangle,{size:14,className:"ri-largeModelBanner__icon"}),(0,z.jsxs)("span",{children:["Very large model (",Math.round(hl/1e6),"M triangles) \u2014 it may render and move slowly on this device, and click/hover selection on the model is disabled. Use the objects panel to select parts."]}),(0,z.jsx)("button",{type:"button",className:"ri-largeModelBanner__dismiss",onClick:v=>{v.stopPropagation(),Vo(!0)},"aria-label":"Dismiss",children:(0,z.jsx)(Pe.X,{size:12})})]}),at.model.renderer==="uv-checker"&&hr.missing>0&&(0,z.jsxs)("div",{className:"ri-uvCheckerBanner",role:"status",children:[(0,z.jsx)(Pe.AlertTriangle,{size:14,className:"ri-uvCheckerBanner__icon"}),(0,z.jsxs)("span",{children:[hr.missing===hr.total?"UV Checker: this model has no UV0 coordinates.":`UV Checker: ${hr.missing} of ${hr.total} meshes have no UV0 coordinates.`," ","Missing UVs are shown in magenta."]})]}),(0,z.jsx)("input",{ref:ea,type:"file",accept:"image/png,image/jpeg,image/webp",className:"ri-hiddenInput",onChange:Y0}),(0,z.jsxs)(Qd,{camera:V,backgroundColor:F,shadows:U&&ae.shadows.enabled,sceneConfig:at,selectedObjectRef:Ld,hoveredObjectRef:X0,highlightOnHover:Pt,renderMode:Qt,maxDpr:we,reduceGpuLoad:Xt,xrStore:sa,rendererCaptureRef:dr,preserveDrawingBuffer:rn,children:[L??(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(ru,{lightingConfig:ae.lighting,shadowConfig:ae.shadows,shadowsEnabled:U,environmentRotation:ae.environment.rotation,environmentConfig:ae.environment,modelBounds:N0,objectBindings:Dt,nodeRefs:ur}),ee&&ae.lighting.lights.map(v=>!v.visible||v.type==="none"||v.type==="hemisphere"||v.attachment?null:(0,z.jsx)(Mb,{light:v,position:v.position,rotation:v.rotation,color:v.color,intensity:v.intensity,visible:v.visible,onPositionChange:N=>Ph(v.id,N,v.rotation),onRotationChange:N=>Ph(v.id,v.position,N),onDraggingChange:ci},v.id))]}),(0,z.jsx)(tu,{controlsRef:_e,onCameraChange:Q0,cameraLimits:R,controllerType:Gn,onPointerLockExit:()=>Xr("orbit")}),(0,z.jsx)(a_,{enabled:Gn==="pointerLock"?!1:ae.model.autoRotate??Vn??!1,speed:ae.model.autoRotateSpeed??on??1,controlsRef:_e}),Un&&(0,z.jsx)(Hc.GizmoHelper,{alignment:"top-right",margin:[80,80],renderPriority:2,onUpdate:()=>{_e.current?.update(0),dr.current?.invalidate()},children:(0,z.jsx)(Hc.GizmoViewport,{axisColors:["#ff3653","#8adb00","#2c8fff"],labelColor:"white"})}),Qe&&Ld&&Dr&&(0,z.jsx)(yp,{node:Ld,space:Dn,onTransformChange:q0,onDraggingChange:v=>{ci(v),qo&&g?.(qo,v)}},Dr),(0,z.jsx)(Sl,{onLoadError:Th,children:(0,z.jsx)(I.Suspense,{fallback:null,children:(()=>{let v=(0,z.jsxs)(z.Fragment,{children:[t?(0,z.jsx)(Zu,{url:t,rotation:at.model.rotation,errorTarget:n,cacheSize:i,decoderConfig:Me,objectBindings:Dt,itemMaterials:Nn,sceneConfig:at,selectedItem:Dr,panelHoveredItem:u??ko,highlightOnHover:Pt,onItemClick:_h,onItemHover:fh,onObjectCatalog:$0,onTilesetBounds:K0,onModelLoaded:Ch,onLoadError:Th,nodeRefsOut:ur,onNodeRefsChange:rl,materialRefsOut:Eo,explodeFactor:kr,suspendBindingTransforms:Ti}):(0,z.jsx)(mu,{url:e,modelFormat:a,objectBindings:Dt,selectedItem:Dr,itemMaterials:Nn,onItemClick:_h,onItemHover:fh,onModelLoaded:Ch,onAnimationsReady:w,nodeRefsOut:ur,onNodeRefsChange:rl,materialRefsOut:Eo,panelHoveredItem:u??ko,sceneConfig:at,zoomOnSelected:et,highlightOnHover:Pt,decoderConfig:Me,onLoadProgress:Z0,explodeFactor:kr,suspendBindingTransforms:Ti}),(0,z.jsx)(Qu,{annotations:Zr,sceneConfig:ae,activeAnnotation:Go,popupRef:Lo,canvasRootRef:Zn,worldPositionsRef:cr,modelLoaded:pi,onAnnotationClick:tx,onCloseAnnotation:jo,hideCloseButton:_t,showAnnotationOnHover:tt}),(0,z.jsx)(n_,{annotation:yl,enabled:_t,controlsRef:_e,offsetRef:vn}),Fo&&(0,z.jsx)(tp,{controlsRef:_e,sceneRef:An,config:Fo,playing:oa,resetOnPlay:_0,onFinished:()=>{Kr(!1),za(!1)},onUserInteract:()=>{Kr(!1)}}),ce&&(0,z.jsx)(ep,{points:ch,unit:Ye,box:dh,showDimensions:Ad})]});return sa?(0,z.jsx)(Kg,{ref:S0,box:dh,scaleMode:mt,onARStateChange:P0,children:v}):v})()})},t??e)]}),(0,z.jsx)(bo,{visible:lx,message:B,progress:ie??void 0}),$o&&(0,z.jsxs)("div",{className:"ri-xrTools",style:{top:`${Ko(0)}px`},children:[!Pd&&rh&&(0,z.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:T0,title:"View this model in AR with Apple Quick Look",children:[(0,z.jsx)(Pe.Box,{size:16}),"View in AR"]}),fl&&(0,z.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:C0,title:"Open this experience on a phone for AR","aria-haspopup":"dialog","aria-expanded":ih,children:[(0,z.jsx)(Pe.QrCode,{size:16}),(0,z.jsx)("span",{children:"Open on phone"})]}),sa&&Pd&&(0,z.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>sa.enterAR().catch(v=>{console.error("Failed to enter AR session:",v)}),title:"View this model in your space",children:[(0,z.jsx)(Pe.Smartphone,{size:16}),(0,z.jsx)("span",{className:"ri-xrButtonPrefix",children:"Enter"}),(0,z.jsx)("span",{children:"AR"})]}),sa&&nh&&(0,z.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>sa.enterVR().catch(v=>{console.error("Failed to enter VR session:",v)}),title:"View this model in VR",children:[(0,z.jsx)(Pe.RectangleGoggles,{size:16}),(0,z.jsx)("span",{className:"ri-xrButtonPrefix",children:"Enter"}),(0,z.jsx)("span",{children:"VR"})]})]}),M0,ih&&fl&&(0,z.jsx)("div",{className:"ri-mobileHandoffBackdrop",onMouseDown:v=>{v.target===v.currentTarget&&ah()},children:(0,z.jsxs)("section",{className:"ri-mobileHandoffDialog",role:"dialog","aria-modal":"true","aria-labelledby":"ri-mobileHandoffTitle",children:[(0,z.jsx)("button",{type:"button",className:"ri-mobileHandoffClose",onClick:ah,"aria-label":"Close phone handoff",children:(0,z.jsx)(Pe.X,{size:18})}),(0,z.jsx)(Pe.Smartphone,{size:22,"aria-hidden":"true"}),(0,z.jsx)("h2",{id:"ri-mobileHandoffTitle",children:"View in AR"}),(0,z.jsx)("p",{children:"Scan the code and choose AR."}),(0,z.jsx)("div",{className:"ri-mobileHandoffQr",children:(0,z.jsx)(Eb.QRCodeSVG,{value:fl,size:208,level:"M",marginSize:4,title:"QR code to open this model on a phone"})})]})}),ke&&(0,z.jsx)("div",{className:"ri-uvCheckerTools",style:{top:`${Ko($o?1:0)}px`},children:(0,z.jsx)("button",{type:"button",className:`ri-measureButton ${At?"ri-measureButton--active":""}`,onClick:()=>kt(v=>!(v??nt)),title:At?"Disable UV checker":"Enable UV checker","aria-label":At?"Disable UV checker":"Enable UV checker","aria-pressed":At,children:(0,z.jsx)(Pe.Grid3X3,{size:16})})}),ce&&(0,z.jsxs)("div",{className:"ri-measureTools",style:{top:`${Ko(($o?1:0)+(ke?1:0))}px`},children:[(0,z.jsx)("button",{type:"button",className:`ri-measureButton ${Xo?"ri-measureButton--active":""}`,onClick:I0,title:Xo?"Stop measuring":"Measure distance","aria-pressed":Xo,children:(0,z.jsx)(Pe.PencilRuler,{size:16})}),(0,z.jsx)("button",{type:"button",className:`ri-measureButton ${Ad?"ri-measureButton--active":""}`,onClick:z0,title:"Toggle bounding dimensions","aria-pressed":Ad,children:(0,z.jsx)(Pe.RulerDimensionLine,{size:16})}),ch.length>0&&(0,z.jsx)("button",{type:"button",className:"ri-measureButton",onClick:O0,title:"Clear measurements",children:(0,z.jsx)(Pe.Eraser,{size:16})}),Xo&&(0,z.jsx)("span",{className:"ri-measureHint",children:"Click points on the model to measure"})]}),Ve&&(0,z.jsxs)("div",{className:"ri-explodeTools",style:{top:`${Ko(($o?1:0)+(ke?1:0)+(ce?1:0))}px`},children:[(0,z.jsx)("button",{type:"button",className:`ri-measureButton ${Cd||kr>0?"ri-measureButton--active":""}`,onClick:()=>th(v=>!v),title:"Exploded view","aria-pressed":Cd,children:(0,z.jsx)(Pe.Expand,{size:16})}),Cd&&(0,z.jsx)("div",{className:"ri-explodeSlider",onPointerDown:v=>v.stopPropagation(),children:(0,z.jsx)("input",{type:"range",min:0,max:100,value:Math.round(kr*100),onChange:v=>eh(Number(v.target.value)/100),"aria-label":"Explode amount"})})]}),Fo&&(0,z.jsxs)("div",{className:"ri-cinematicTools",style:{top:`${Ko(($o?1:0)+(ke?1:0)+(ce?1:0)+(Ve?1:0))}px`},children:[(0,z.jsx)("button",{type:"button",className:`ri-measureButton ${oa?"ri-measureButton--active":""}`,onClick:()=>{oa?Kr(!1):(za(!1),Kr(!0))},title:oa?"Pause cinematic":"Play cinematic","aria-pressed":oa,children:oa?(0,z.jsx)(Pe.Pause,{size:16}):(0,z.jsx)(Pe.Play,{size:16})}),oa&&(0,z.jsx)("button",{type:"button",className:"ri-measureButton ri-measureButton--stop",onClick:J0,title:"Stop cinematic and reset camera",children:(0,z.jsx)(Pe.Square,{size:16})})]}),(ye||pe||en&&ln.length>0)&&(0,z.jsxs)("div",{className:"ri-buttonContainer",children:[(0,z.jsx)("div",{className:"ri-tourControls",children:en&&ln.length>0&&(0,z.jsx)(z.Fragment,{children:_t?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)("button",{className:"ri-tourButton",onClick:R0,disabled:lh||ln.length===0||mr<=0,title:"Previous annotation",children:[(0,z.jsx)(Pe.ChevronLeft,{size:16}),(0,z.jsx)("span",{children:"Prev"})]}),(0,z.jsx)("button",{className:"ri-tourButton ri-tourButton--stop",onClick:k0,title:"Stop guided tour",children:(0,z.jsx)(Pe.Square,{size:16})}),(0,z.jsxs)("button",{className:"ri-tourButton ri-tourButton--next",onClick:L0,disabled:lh||ln.length===0,title:"Next annotation",children:[(0,z.jsx)("span",{children:"Next"}),(0,z.jsx)(Pe.ChevronRight,{size:16})]})]}):(0,z.jsx)("button",{className:"ri-navButtonSingle",onClick:E0,disabled:ln.length===0,title:"Start guided tour",children:"Guided Tour"})})}),(0,z.jsxs)("div",{className:"mv-rightControls",children:[ye&&(0,z.jsx)("button",{className:"mv-resetButton",onClick:Bd,title:"Reset camera view",children:(0,z.jsx)(Pe.RotateCcw,{})}),(0,z.jsxs)("div",{className:"mv-controllersWrapper",onPointerDown:v=>v.stopPropagation(),children:[Bn&&(0,z.jsxs)("div",{className:"mv-controllersMenu",children:[(0,z.jsx)("button",{type:"button",className:`mv-controllersMenuItem ${Gn==="orbit"?"mv-controllersMenuItem--active":""}`,onClick:()=>Xr("orbit"),children:"Orbit Control"}),(0,z.jsx)("button",{type:"button",className:`mv-controllersMenuItem ${Gn==="pointerLock"?"mv-controllersMenuItem--active":""}`,onClick:()=>Xr("pointerLock"),children:"Point Lock"})]}),(0,z.jsx)("button",{className:"mv-controllersButton",onClick:()=>Pn(v=>!v),title:"Camera controller","aria-label":"Camera controller settings",children:(0,z.jsx)(Pe.Orbit,{size:15})})]}),pe&&(0,z.jsxs)("div",{className:"mv-downloadWrapper",onPointerDown:v=>v.stopPropagation(),children:[F0&&(0,z.jsxs)("div",{className:"mv-downloadMenu",children:[(0,z.jsxs)("button",{className:"mv-downloadMenuItem",onClick:H0,disabled:Ed||!An.current,children:[(0,z.jsx)(Pe.Box,{size:14}),"Download GLB"]}),(0,z.jsx)("div",{className:"mv-downloadMenuDivider"}),rn&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)("button",{className:"mv-downloadMenuItem",onClick:G0,disabled:!An.current,children:[(0,z.jsx)(Pe.Camera,{size:14}),"Download PNG"]}),(0,z.jsx)("div",{className:"mv-downloadMenuDivider"})]}),(0,z.jsxs)("button",{className:"mv-downloadMenuItem",onClick:W0,disabled:!An.current,children:[(0,z.jsx)(Pe.FileImage,{size:14}),"Download UV Layout"]}),ph&&(0,z.jsx)("div",{className:"mv-downloadMenuNotice",role:"status","aria-live":"polite",children:ph})]}),(0,z.jsx)("button",{className:"mv-downloadButton",onClick:j0,disabled:Ed||!An.current,title:"Download options",children:Ed?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)("span",{className:"mv-downloadButton__spinner"}),"Exporting\u2026"]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(Pe.Download,{size:15}),"Download"]})})]})]})]}),Jn&&(0,z.jsxs)("div",{className:"ri-annotationPopup",style:{left:ox,top:sx},onPointerDown:v=>v.stopPropagation(),onClick:v=>v.stopPropagation(),children:[(0,z.jsx)("input",{autoFocus:!0,className:"ri-annotationInput",placeholder:"Title *",value:Pi.title,onChange:v=>bl(N=>({...N,title:v.target.value})),onKeyDown:v=>{v.key==="Enter"&&Ah(),v.key==="Escape"&&Nd()}}),(0,z.jsx)("textarea",{className:"ri-annotationTextarea",placeholder:"Description",value:Pi.description,onChange:v=>bl(N=>({...N,description:v.target.value})),onKeyDown:v=>{v.key==="Escape"&&Nd()},rows:5}),(0,z.jsxs)("div",{className:"ri-annotationActions",children:[(0,z.jsx)("button",{onClick:Ah,className:`ri-annotationOkBtn ${Pi.title.trim()?"":"disabled"}`,disabled:!Pi.title.trim(),children:"OK"}),(0,z.jsx)("button",{onClick:Nd,className:"ri-annotationCancelBtn",children:"Cancel"}),(0,z.jsx)("div",{className:"ri-annotationIcons"})]})]})]}),D&&rr&&(0,z.jsx)(sp,{colorPicker:rr,onClose:fr,itemMaterials:Nn,setItemMaterials:Na}),D&&Yr&&(0,z.jsx)(lp,{triggerFileUpload:yh,materialPopup:Yr,textureUrl:Rh,clearTexture:wh})]}),$&&(0,z.jsx)("div",{className:"ri-viewerRight",children:q?q({objectBindings:Dt,onAction:wl,onFocus:Sh,onHover:al}):(0,z.jsx)(dp,{objectBindings:Dt,onAction:wl,onFocus:Sh,onHover:al})}),Ue&&(0,z.jsx)(ob,{controlsRef:_e,enabled:!0,opacity:Wt,moveSensitivity:Tt,position:Re})]})}var te=require("react"),Hn=require("lucide-react");var Gt=require("react"),wp=require("three");function Rb(e){return[e.x,e.y,e.z]}function Wi(e,t){let n=new wp.Vector3,i=new wp.Vector3;return t.getPosition(n),t.getTarget(i),{position:Rb(n),target:Rb(i),fov:"fov"in e&&typeof e.fov=="number"?e.fov:null,zoom:"zoom"in e&&typeof e.zoom=="number"?e.zoom:1,azimuthAngle:t.azimuthAngle,polarAngle:t.polarAngle}}function l_(e,t){return e?e.position[0]===t.position[0]&&e.position[1]===t.position[1]&&e.position[2]===t.position[2]&&e.target[0]===t.target[0]&&e.target[1]===t.target[1]&&e.target[2]===t.target[2]&&e.fov===t.fov&&e.zoom===t.zoom&&e.azimuthAngle===t.azimuthAngle&&e.polarAngle===t.polarAngle:!1}async function Gs(e,t,n=.6){let i=e.smoothTime;e.smoothTime=n;try{return await t()}finally{e.smoothTime=i}}function Gc(e={}){let t=(0,Gt.useRef)(e);t.current=e;let n=(0,Gt.useRef)(null),[i,r]=(0,Gt.useState)(null),[a,o]=(0,Gt.useState)(()=>({...e.presets})),s=(0,Gt.useRef)(a);s.current=a;let c=(0,Gt.useCallback)(w=>{r(C=>l_(C,w)?C:w)},[]),l=(0,Gt.useCallback)((w,C)=>{c(Wi(w,C))},[c]),u=(0,Gt.useRef)(null),d=(0,Gt.useRef)(null),h=(0,Gt.useRef)(null),f=(0,Gt.useCallback)(w=>{n.current=w;let C=Wi(w.controls.camera,w.controls);c(C),w.scene!==d.current&&(d.current=w.scene,u.current=null,h.current=null),w.homeCameraState&&!u.current&&(u.current=w.homeCameraState);let{initialPosition:S,initialTarget:O,initialTransition:L=!1}=t.current;if((S||O)&&w.scene&&(S||w.homeCameraState)&&h.current!==w.controls){h.current=w.controls,w.homeCameraState||vo(w.controls);let V=S??C.position,R=O??C.target;w.controls.setLookAt(V[0],V[1],V[2],R[0],R[1],R[2],L).then(()=>{if(n.current?.controls!==w.controls)return;let F=Wi(w.controls.camera,w.controls);u.current={position:F.position,target:F.target},c(F)}).catch(()=>{})}},[c]),g=(0,Gt.useCallback)(async()=>{let w=n.current,C=w?.controls;if(!C)return!1;try{let S=u.current;return S?await Gs(C,()=>C.setLookAt(S.position[0],S.position[1],S.position[2],S.target[0],S.target[1],S.target[2],!0)):w?.scene?await Gs(C,()=>C.fitToBox(w.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})):await Gs(C,()=>C.reset(!0)),!0}catch{return!1}},[]),x=(0,Gt.useCallback)(async()=>{let w=n.current;if(!w?.controls||!w.scene)return!1;try{return await Gs(w.controls,()=>w.controls.fitToBox(w.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),P=(0,Gt.useCallback)(async w=>{let C=n.current;if(!C?.controls)return!1;let S=En(C.objectBindings,w);if(!S)return!1;let O=C.nodeRefs[S];if(!O)return!1;try{return await Gs(C.controls,()=>C.controls.fitToBox(O,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),y=(0,Gt.useCallback)(async(w,C=!0)=>{let S=n.current?.controls;if(!S)return!1;try{return n.current?.homeCameraState||vo(S),await S.setTarget(w[0],w[1],w[2],C),c(Wi(S.camera,S)),!0}catch{return!1}},[c]),p=(0,Gt.useCallback)(async(w,C=!0)=>{let S=n.current?.controls;if(!S)return!1;try{n.current?.homeCameraState||vo(S);let O=[S.setLookAt(w.position[0],w.position[1],w.position[2],w.target[0],w.target[1],w.target[2],C)];w.azimuthAngle!=null&&w.polarAngle!=null&&O.push(S.rotateTo(w.azimuthAngle,w.polarAngle,C)),await Promise.all(O);let L=S.camera,V=!1;return w.fov!=null&&"fov"in L&&typeof L.fov=="number"&&(L.fov=w.fov,V=!0),w.zoom!=null&&"zoom"in L&&typeof L.zoom=="number"&&(L.zoom=w.zoom,V=!0),V&&"updateProjectionMatrix"in L&&L.updateProjectionMatrix(),c(Wi(L,S)),!0}catch{return!1}},[c]),m=(0,Gt.useCallback)((w,C=!0)=>p(w,C),[p]),M=(0,Gt.useCallback)((w,C,S=!0)=>p({position:w,target:C},S),[p]),_=(0,Gt.useCallback)(async(w,C,S=!0)=>{let O=n.current?.controls;if(!O)return!1;try{return n.current?.homeCameraState||vo(O),await O.rotateTo(w,C,S),c(Wi(O.camera,O)),!0}catch{return!1}},[c]),T=(0,Gt.useCallback)(async(w,C=!0)=>{let S=n.current?.controls;if(!S)return!1;try{return n.current?.homeCameraState||vo(S),await S.dollyTo(w,C),c(Wi(S.camera,S)),!0}catch{return!1}},[c]),E=(0,Gt.useCallback)(w=>{let C=n.current?.controls,S=w.trim();if(!C||!S)return null;let O=Wi(C.camera,C);return s.current={...s.current,[S]:O},o(L=>({...L,[S]:O})),c(O),O},[c]),b=(0,Gt.useCallback)((w,C=!0)=>{let S=s.current[w];return S?p(S,C):Promise.resolve(!1)},[p]);return{cameraState:i,cameraPresets:a,resetView:g,focusObject:P,fitScene:x,setCameraTarget:y,setCameraState:m,lookAt:M,orbitTo:_,dollyTo:T,savePreset:E,goToPreset:b,handleCameraChange:l,handleViewerReady:f}}var gn=require("react");function Wc(){let e=(0,gn.useRef)(null),[t,n]=(0,gn.useState)([]),i=(0,gn.useRef)(null),[r,a]=(0,gn.useState)([]),[o,s]=(0,gn.useState)(null),[c,l]=(0,gn.useState)(!1),[u,d]=(0,gn.useState)(1),[h,f]=(0,gn.useState)(0),[g,x]=(0,gn.useState)(0);(0,gn.useEffect)(()=>()=>{i.current?.()},[]);let P=(0,gn.useCallback)(T=>{i.current?.(),e.current=T,n(T.clips),a(T.clipDetails??T.clips.map(b=>({sourceName:b,duration:0})));let E=T.getState?.()??{currentClip:null,isPlaying:!1,speed:1,time:0,duration:0};s(E.currentClip),l(E.isPlaying),d(E.speed),f(E.time),x(E.duration),T.subscribe?i.current=T.subscribe(b=>{s(b.currentClip),l(b.isPlaying),d(b.speed),f(b.time),x(b.duration)}):i.current=null},[]),y=(0,gn.useCallback)(T=>{e.current?.play(T),s(T),l(!0)},[]),p=(0,gn.useCallback)(()=>{e.current?.pause(),l(!1)},[]),m=(0,gn.useCallback)(()=>{e.current?.stop(),s(null),l(!1),f(0)},[]),M=(0,gn.useCallback)(T=>{e.current?.setSpeed(T),d(T)},[]),_=(0,gn.useCallback)(T=>{e.current?.seek?.(T),f(T)},[]);return{clips:t,clipDetails:r,currentClip:o,isPlaying:c,speed:u,time:h,duration:g,play:y,pause:p,stop:m,setSpeed:M,seek:_,handleAnimationsReady:P}}var Zc=require("react");var Vb=require("react"),qi=require("lucide-react"),Yc=require("react-colorful");var Hr=require("react"),Db=require("react-dom"),Xc=require("lucide-react"),qc=require("react-colorful");function _o(e){let t=e.replace("#","").match(/.{2}/g).map(i=>parseInt(i,16)/255).map(i=>i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4));return .2126*t[0]+.7152*t[1]+.0722*t[2]>.179?"#000":"#fff"}var Lb=require("react");function kb(e,t,n){(0,Lb.useEffect)(()=>{if(!n)return;let i=Array.isArray(e)?e:[e],r=a=>{let o=a.target;i.some(c=>c.current?.contains(o))||t()};return document.addEventListener("pointerdown",r,!0),()=>{document.removeEventListener("pointerdown",r,!0)}},[e,t,n])}var Ce=require("react/jsx-runtime");function _p({anchorRef:e,onClose:t,children:n}){let i=(0,Hr.useRef)(null),[r,a]=(0,Hr.useState)(null);return kb([i,e],t,!0),(0,Hr.useLayoutEffect)(()=>{let o=e.current;if(!o)return;let s=o.getBoundingClientRect(),c=222,l=8,u=Math.min(Math.max(s.right-c,l),window.innerWidth-c-l),d=Math.min(s.bottom+6,window.innerHeight-200);a({top:d,left:u})},[e]),r?(0,Db.createPortal)((0,Ce.jsx)("div",{ref:i,className:"se-colorPickerPopover",style:{position:"fixed",top:r.top,left:r.left},children:n}),document.body):null}function c_(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 Ma({title:e,children:t}){return(0,Ce.jsxs)("section",{className:"se-section",children:[(0,Ce.jsx)("h3",{className:"se-sectionTitle",children:e}),(0,Ce.jsx)("div",{className:"se-sectionBody",children:t})]})}function lt({title:e,open:t,onToggle:n,trailing:i,children:r,disabled:a,tooltip:o}){let s=o?`${o}`:e;return(0,Ce.jsxs)("section",{className:"se-panel",children:[(0,Ce.jsxs)("button",{type:"button",className:"se-panelHeader",onClick:n,"aria-expanded":t,title:s,children:[(0,Ce.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,Ce.jsx)(Xc.ChevronDown,{size:16,className:`se-panelChevron ${t?"se-panelChevron--open":""}`}),(0,Ce.jsx)("span",{className:"se-panelTitle",children:e}),o?(0,Ce.jsx)("span",{className:"se-panelHelp",title:s,"aria-label":s,role:"img",onClick:c=>c.stopPropagation(),children:(0,Ce.jsx)(Xc.Info,{size:13})}):null]}),i?(0,Ce.jsx)("span",{className:"se-panelTrailing",onClick:c=>c.stopPropagation(),children:i}):null]}),t?(0,Ce.jsx)("div",{className:"se-panelBody",style:a?{opacity:.45,pointerEvents:"none"}:void 0,children:r}):null]})}function ht({checked:e,onChange:t,label:n}){return(0,Ce.jsxs)("label",{className:"se-switch","aria-label":n,children:[(0,Ce.jsx)("input",{type:"checkbox",checked:e,onChange:i=>t(i.target.checked)}),(0,Ce.jsx)("span",{className:"se-switchTrack",children:(0,Ce.jsx)("span",{className:"se-switchThumb"})})]})}function K({label:e,value:t,min:n,max:i,step:r,formatValue:a,onChange:o,disabled:s=!1}){return(0,Ce.jsxs)("label",{className:`se-field ${s?"se-field--disabled":""}`,children:[(0,Ce.jsxs)("span",{className:"se-fieldLabel",children:[e,(0,Ce.jsx)("span",{className:"se-fieldValue",children:a?a(t):t})]}),(0,Ce.jsx)("input",{className:"se-slider",type:"range",min:n,max:i,step:r,value:t,onChange:c=>o(Number(c.target.value)),disabled:s})]})}function bt({label:e,checked:t,onChange:n}){return(0,Ce.jsxs)("label",{className:"se-field se-fieldInline",children:[(0,Ce.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Ce.jsx)("input",{type:"checkbox",className:"se-checkbox",checked:t,onChange:i=>n(i.target.checked)})]})}function sr({label:e,value:t,options:n,onChange:i}){return(0,Ce.jsxs)("label",{className:"se-field se-fieldInline",children:[(0,Ce.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Ce.jsx)("select",{className:"se-select",value:t,onChange:r=>i(r.target.value),children:n.map(r=>(0,Ce.jsx)("option",{value:r,children:c_(r)},r))})]})}function Tr({label:e,value:t,onChange:n}){let[i,r]=(0,Hr.useState)(!1),a=(0,Hr.useRef)(null);return(0,Ce.jsxs)("div",{className:"se-field",children:[(0,Ce.jsxs)("div",{className:"se-fieldInline",children:[(0,Ce.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Ce.jsx)("span",{ref:a,style:{display:"inline-flex"},children:(0,Ce.jsx)(qc.HexColorInput,{prefixed:!0,className:"se-swatch",onClick:()=>r(o=>!o),style:{background:t,color:_o(t)},color:t,onChange:n})})]}),i?(0,Ce.jsx)(_p,{anchorRef:a,onClose:()=>r(!1),children:(0,Ce.jsx)(qc.HexColorPicker,{color:t,onChange:n})}):null]})}function Bb({value:e,min:t,max:n,step:i,onChange:r}){let[a,o]=(0,Hr.useState)(String(e)),s=(0,Hr.useRef)(!1);return(0,Hr.useLayoutEffect)(()=>{s.current||o(String(e))},[e]),(0,Ce.jsx)("input",{type:"number",className:"se-numberInput",min:t,max:n,step:i,value:a,onFocus:()=>{s.current=!0},onChange:c=>{let l=c.target.value;o(l),l!==""&&l!=="-"&&!Number.isNaN(Number(l))&&r(Number(l))},onBlur:()=>{s.current=!1,o(String(e))}})}function Xi({label:e,value:t,min:n,max:i,step:r,onChange:a}){return(0,Ce.jsxs)("div",{className:"se-field",children:[(0,Ce.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Ce.jsx)("div",{className:"se-vectorRow",children:["X","Y","Z"].map((s,c)=>(0,Ce.jsxs)("label",{className:"se-vectorAxis",children:[(0,Ce.jsx)("span",{children:s}),(0,Ce.jsx)(Bb,{value:t[c],min:n,max:i,step:r,onChange:l=>{let u=[...t];u[c]=l,a(u)}})]},s))})]})}function Ca({label:e,value:t,min:n,max:i,step:r,onChange:a}){return(0,Ce.jsxs)("div",{className:"se-field",children:[(0,Ce.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Ce.jsx)("div",{className:"se-vectorRow",children:["X","Y"].map((s,c)=>(0,Ce.jsxs)("label",{className:"se-vectorAxis",children:[(0,Ce.jsx)("span",{children:s}),(0,Ce.jsx)(Bb,{value:t[c],min:n,max:i,step:r,onChange:l=>{let u=[...t];u[c]=l,a(u)}})]},s))})]})}var Nb={free:0,starter:1,growth:2};function Ob(e){return e==="starter"||e==="growth"||e==="scale"?e==="scale"?"growth":e:"free"}function Mi(e,t){return Nb[e]>=Nb[t]}var Ib={free:"Free",starter:"Starter",growth:"Growth"};var zb=require("lucide-react");var Ws=require("react/jsx-runtime");function tr({requiredTier:e,feature:t}){return(0,Ws.jsxs)("div",{className:"bb-tierLock",children:[(0,Ws.jsx)(zb.Lock,{size:16}),(0,Ws.jsxs)("p",{className:"bb-tierLockMessage",children:[t," requires the ",Ib[e]," plan or higher."]})]})}var ne=require("react/jsx-runtime"),d_=["lit","unlit","normals"],u_=["color","image","environment"];function Ub(e){let t=e%360;return t<0?t+360:t}function Xs({title:e,open:t,onToggle:n,children:i,trailing:r}){return(0,ne.jsxs)("section",{className:"se-panel",children:[(0,ne.jsxs)("button",{type:"button",className:"se-panelHeader",onClick:n,"aria-expanded":t,children:[(0,ne.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,ne.jsx)(qi.ChevronDown,{size:16,className:`se-panelChevron ${t?"se-panelChevron--open":""}`}),(0,ne.jsx)("span",{className:"se-panelTitle",children:e})]}),r?(0,ne.jsx)("span",{className:"se-panelTrailing",onClick:a=>a.stopPropagation(),children:r}):null]}),t?(0,ne.jsx)("div",{className:"se-panelBody",children:i}):null]})}function Sp({config:e,onChange:t}){let{model:n,camera:i,wireframe:r,background:a,environment:o}=e,{tier:s}=Cr(),c=Mi(s,"starter"),[l,u]=(0,Vb.useState)({general:!0,camera:!0,autoRotate:!1,wireframe:!1,background:!1}),d=p=>u(m=>({...m,[p]:!m[p]})),h=p=>t({...e,model:p}),f=p=>t({...e,camera:p}),g=p=>t({...e,wireframe:p}),x=p=>t({...e,background:p}),P=p=>t({...e,environment:p}),y=p=>{P({...o,source:"preset",preset:p})};return(0,ne.jsxs)("div",{className:"se-generalContent",children:[(0,ne.jsxs)(Xs,{title:"General",open:l.general,onToggle:()=>d("general"),children:[(0,ne.jsxs)("div",{className:"se-field",children:[(0,ne.jsxs)("div",{className:"se-fieldLabel",children:[(0,ne.jsx)("span",{children:"Straighten model"}),(0,ne.jsx)("button",{type:"button",className:"se-iconButton",onClick:()=>h({...n,rotation:[0,0,0]}),"aria-label":"Reset model rotation",children:(0,ne.jsx)(qi.RotateCcw,{size:16})})]}),(0,ne.jsx)("div",{className:"se-axisStepperGrid",children:["X","Y","Z"].map((p,m)=>(0,ne.jsxs)("div",{className:"se-axisStepper",children:[(0,ne.jsx)("button",{type:"button",className:"se-axisStepperButton",onClick:()=>{let M=[...n.rotation];M[m]=Ub(M[m]-90),h({...n,rotation:M})},"aria-label":`Rotate ${p} axis backward`,children:(0,ne.jsx)(qi.ChevronLeft,{size:16})}),(0,ne.jsx)("span",{className:"se-axisStepperLabel",children:p}),(0,ne.jsx)("button",{type:"button",className:"se-axisStepperButton",onClick:()=>{let M=[...n.rotation];M[m]=Ub(M[m]+90),h({...n,rotation:M})},"aria-label":`Rotate ${p} axis forward`,children:(0,ne.jsx)(qi.ChevronRight,{size:16})})]},p))})]}),(0,ne.jsx)(Xi,{label:"Rotation",value:n.rotation,min:0,max:360,step:1,onChange:p=>h({...n,rotation:p})}),(0,ne.jsxs)("div",{className:"se-field",children:[(0,ne.jsx)("span",{className:"se-fieldLabel",children:"Renderer"}),(0,ne.jsx)("div",{className:"se-segmentedControl se-segmentedControl--renderer",children:lm.map(p=>(0,ne.jsx)("button",{type:"button",className:`se-segmentedOption ${n.renderer===p?"se-segmentedOption--active":""}`,onClick:()=>h({...n,renderer:p}),children:p==="uv-checker"?"UV CHECKER":p.toUpperCase()},p))})]}),(0,ne.jsx)(sr,{label:"Shading",value:n.shading,options:d_,onChange:p=>h({...n,shading:p})})]}),(0,ne.jsx)(Xs,{title:"Camera",open:l.camera,onToggle:()=>d("camera"),children:(0,ne.jsx)(K,{label:"Field Of View",value:i.fieldOfView,min:20,max:100,step:.1,formatValue:p=>`${p.toFixed(3)}\xB0`,onChange:p=>f({...i,fieldOfView:p})})}),(0,ne.jsx)(Xs,{title:"Auto Rotate",open:l.autoRotate,onToggle:()=>d("autoRotate"),trailing:(0,ne.jsxs)("label",{className:"se-switch","aria-label":"Toggle auto rotate",children:[(0,ne.jsx)("input",{type:"checkbox",checked:n.autoRotate??!1,onChange:p=>h({...n,autoRotate:p.target.checked})}),(0,ne.jsx)("span",{className:"se-switchTrack",children:(0,ne.jsx)("span",{className:"se-switchThumb"})})]}),children:n.autoRotate?(0,ne.jsx)(K,{label:"Rotation Speed",value:n.autoRotateSpeed??1,min:.1,max:3,step:.1,formatValue:p=>`${p.toFixed(1)}x`,onChange:p=>h({...n,autoRotateSpeed:p})}):(0,ne.jsx)("div",{className:"se-placeholder",children:"Enable auto rotate to adjust its speed."})}),(0,ne.jsx)(Xs,{title:"Wireframe",open:l.wireframe,onToggle:()=>d("wireframe"),trailing:(0,ne.jsxs)("label",{className:"se-switch","aria-label":"Toggle wireframe preview",children:[(0,ne.jsx)("input",{type:"checkbox",checked:c&&r.enabled,disabled:!c,onChange:p=>g({...r,enabled:p.target.checked})}),(0,ne.jsx)("span",{className:"se-switchTrack",children:(0,ne.jsx)("span",{className:"se-switchThumb"})})]}),children:c?(0,ne.jsxs)(ne.Fragment,{children:[(0,ne.jsx)(K,{label:"Opacity",value:r.opacity,min:0,max:1,step:.01,onChange:p=>g({...r,opacity:p})}),(0,ne.jsx)(Tr,{label:"Wire color",value:r.color,onChange:p=>g({...r,color:p})})]}):(0,ne.jsx)(tr,{requiredTier:"starter",feature:"Wireframe preview"})}),(0,ne.jsx)(Xs,{title:"Background",open:l.background,onToggle:()=>d("background"),trailing:(0,ne.jsxs)("label",{className:"se-switch","aria-label":"Toggle scene background",children:[(0,ne.jsx)("input",{type:"checkbox",checked:a.enabled,onChange:p=>x({...a,enabled:p.target.checked})}),(0,ne.jsx)("span",{className:"se-switchTrack",children:(0,ne.jsx)("span",{className:"se-switchThumb"})})]}),children:a.enabled?(0,ne.jsxs)(ne.Fragment,{children:[(0,ne.jsxs)("div",{className:"se-field",children:[(0,ne.jsx)("span",{className:"se-fieldLabel",children:"Background type"}),(0,ne.jsx)("div",{className:"se-segmentedControl",children:u_.map(p=>(0,ne.jsx)("button",{type:"button",className:`se-segmentedOption ${a.type===p?"se-segmentedOption--active":""}`,onClick:()=>x({...a,type:p}),children:p},p))})]}),a.type==="environment"?c?(0,ne.jsxs)(ne.Fragment,{children:[(0,ne.jsxs)("div",{className:"se-field",children:[(0,ne.jsx)("span",{className:"se-fieldLabel",children:"Environment source"}),(0,ne.jsxs)("div",{className:"se-segmentedControl",children:[(0,ne.jsx)("button",{type:"button",className:`se-segmentedOption ${o.source==="preset"?"se-segmentedOption--active":""}`,onClick:()=>P({...o,source:"preset"}),children:"PRESET"}),(0,ne.jsx)("button",{type:"button",className:`se-segmentedOption ${o.source==="custom"?"se-segmentedOption--active":""}`,onClick:()=>P({...o,source:"custom"}),children:"CUSTOM"})]})]}),o.source==="preset"?(0,ne.jsx)(sr,{label:"Environment preset",value:o.preset,options:cm,onChange:y}):(0,ne.jsxs)("label",{className:"se-field",children:[(0,ne.jsx)("span",{className:"se-fieldLabel",children:"Custom environment URL"}),(0,ne.jsx)("input",{type:"text",className:"se-textInput",placeholder:"https://example.com/environment.hdr",value:o.customEnvironmentUrl,onChange:p=>P({...o,customEnvironmentUrl:p.target.value})}),(0,ne.jsx)("span",{className:"bb-note",children:"Enter a HDR, EXR, JPG, JPEG, PNG, or WEBP URL."}),o.customEnvironmentUrl.trim()&&!Pl(o.customEnvironmentUrl)?(0,ne.jsx)("span",{className:"bb-note",style:{color:"#fca5a5"},children:"Invalid image/HDRI URL."}):null]}),(0,ne.jsx)(K,{label:"Environment intensity",value:o.intensity,min:0,max:3,step:.05,onChange:p=>P({...o,intensity:p})})]}):(0,ne.jsx)(tr,{requiredTier:"starter",feature:"Environment backgrounds"}):null,a.type==="image"?(0,ne.jsxs)("label",{className:"se-field",children:[(0,ne.jsx)("span",{className:"se-fieldLabel",children:"Background image URL"}),(0,ne.jsx)("input",{type:"text",className:"se-textInput",placeholder:"https://example.com/background.jpg",value:a.imageUrl,onChange:p=>x({...a,imageUrl:p.target.value})})]}):null,a.type==="color"?(0,ne.jsxs)("div",{className:"se-field",children:[(0,ne.jsx)("span",{className:"se-fieldLabel",children:"Background color"}),(0,ne.jsx)("div",{className:"se-inlineColorPicker",children:(0,ne.jsx)(Yc.HexColorPicker,{color:a.color,onChange:p=>x({...a,color:p})})}),(0,ne.jsx)("div",{className:"se-fieldInline",children:(0,ne.jsx)(Yc.HexColorInput,{prefixed:!0,className:"se-swatch",style:{background:a.color,color:_o(a.color)},color:a.color,onChange:p=>x({...a,color:p})})})]}):null]}):(0,ne.jsx)("div",{className:"se-placeholder",children:"Background rendering is disabled for this scene preset."})})]})}var dv=require("react");var fe=require("react/jsx-runtime");function Fb({pp:e,set:t,open:n,toggle:i}){let{ssao:r}=e;return(0,fe.jsxs)(lt,{title:"SSAO",tooltip:"Adds soft contact shadows in corners, creases, and tight spaces.",open:n.ssao,onToggle:()=>i("ssao"),disabled:!r.enabled,trailing:(0,fe.jsx)(ht,{checked:r.enabled,onChange:a=>t("ssao",{...r,enabled:a}),label:"Toggle SSAO"}),children:[(0,fe.jsx)(K,{label:"Samples",value:r.samples,min:1,max:64,step:1,onChange:a=>t("ssao",{...r,samples:a})}),(0,fe.jsx)(K,{label:"Rings",value:r.rings,min:1,max:12,step:1,onChange:a=>t("ssao",{...r,rings:a})}),(0,fe.jsx)(K,{label:"Intensity",value:r.intensity,min:0,max:20,step:.5,onChange:a=>t("ssao",{...r,intensity:a})}),(0,fe.jsx)(K,{label:"Radius",value:r.radius,min:.01,max:1,step:.01,onChange:a=>t("ssao",{...r,radius:a})}),(0,fe.jsx)(K,{label:"Bias",value:r.bias,min:0,max:.1,step:.001,onChange:a=>t("ssao",{...r,bias:a})}),(0,fe.jsx)(K,{label:"Luminance Influence",value:r.luminanceInfluence,min:0,max:1,step:.01,onChange:a=>t("ssao",{...r,luminanceInfluence:a})}),(0,fe.jsx)(K,{label:"Fade",value:r.fade,min:0,max:.1,step:.001,onChange:a=>t("ssao",{...r,fade:a})}),(0,fe.jsx)(K,{label:"Min Radius Scale",value:r.minRadiusScale,min:0,max:1,step:.01,onChange:a=>t("ssao",{...r,minRadiusScale:a})}),(0,fe.jsx)(K,{label:"World Distance Threshold",value:r.worldDistanceThreshold,min:0,max:100,step:.1,onChange:a=>t("ssao",{...r,worldDistanceThreshold:a})}),(0,fe.jsx)(K,{label:"World Distance Falloff",value:r.worldDistanceFalloff,min:0,max:20,step:.1,onChange:a=>t("ssao",{...r,worldDistanceFalloff:a})}),(0,fe.jsx)(K,{label:"World Proximity Threshold",value:r.worldProximityThreshold,min:0,max:100,step:.1,onChange:a=>t("ssao",{...r,worldProximityThreshold:a})}),(0,fe.jsx)(K,{label:"World Proximity Falloff",value:r.worldProximityFalloff,min:0,max:20,step:.1,onChange:a=>t("ssao",{...r,worldProximityFalloff:a})})]})}function jb({pp:e,set:t,open:n,toggle:i}){let{autofocus:r}=e;return(0,fe.jsxs)(lt,{title:"Auto focus",tooltip:"Keeps the focus plane tracking a subject so the image stays sharp where you want it.",open:n.autofocus,onToggle:()=>i("autofocus"),disabled:!r.enabled,trailing:(0,fe.jsx)(ht,{checked:r.enabled,onChange:a=>t("autofocus",{...r,enabled:a}),label:"Toggle Autofocus"}),children:[(0,fe.jsx)(K,{label:"Focus Distance",value:r.focusDistance,min:0,max:50,step:.1,onChange:a=>t("autofocus",{...r,focusDistance:a})}),(0,fe.jsx)(K,{label:"Focus Range",value:r.focusRange,min:.1,max:50,step:.1,onChange:a=>t("autofocus",{...r,focusRange:a})}),(0,fe.jsx)(K,{label:"Focal Length",value:r.focalLength,min:0,max:1,step:.01,onChange:a=>t("autofocus",{...r,focalLength:a})}),(0,fe.jsx)(K,{label:"Bokeh Scale",value:r.bokehScale,min:0,max:20,step:.1,onChange:a=>t("autofocus",{...r,bokehScale:a})}),(0,fe.jsx)(Xi,{label:"Target",value:r.target,min:-100,max:100,step:.1,onChange:a=>t("autofocus",{...r,target:a})}),(0,fe.jsx)(bt,{label:"Mouse Follow",checked:r.mouse,onChange:a=>t("autofocus",{...r,mouse:a})}),(0,fe.jsx)(bt,{label:"Manual Update",checked:r.manual,onChange:a=>t("autofocus",{...r,manual:a})}),(0,fe.jsx)(K,{label:"Debug",value:r.debug,min:0,max:1,step:.01,onChange:a=>t("autofocus",{...r,debug:a})}),(0,fe.jsx)(K,{label:"Smooth Time",value:r.smoothTime,min:0,max:2,step:.01,onChange:a=>t("autofocus",{...r,smoothTime:a})})]})}function Hb({pp:e,set:t,open:n,toggle:i}){let{godRays:r}=e;return(0,fe.jsxs)(lt,{title:"God Rays",tooltip:"Creates light shafts that streak outward from a bright sun or light source.",open:n.godRays,onToggle:()=>i("godRays"),disabled:!r.enabled,trailing:(0,fe.jsx)(ht,{checked:r.enabled,onChange:a=>t("godRays",{...r,enabled:a}),label:"Toggle GodRays"}),children:[(0,fe.jsx)(Xi,{label:"Sun Position",value:r.sunPosition,min:-100,max:100,step:.1,onChange:a=>t("godRays",{...r,sunPosition:a})}),(0,fe.jsx)(K,{label:"Samples",value:r.samples,min:1,max:128,step:1,onChange:a=>t("godRays",{...r,samples:a})}),(0,fe.jsx)(K,{label:"Density",value:r.density,min:0,max:2,step:.01,onChange:a=>t("godRays",{...r,density:a})}),(0,fe.jsx)(K,{label:"Decay",value:r.decay,min:0,max:1,step:.01,onChange:a=>t("godRays",{...r,decay:a})}),(0,fe.jsx)(K,{label:"Weight",value:r.weight,min:0,max:2,step:.01,onChange:a=>t("godRays",{...r,weight:a})}),(0,fe.jsx)(K,{label:"Exposure",value:r.exposure,min:0,max:2,step:.01,onChange:a=>t("godRays",{...r,exposure:a})}),(0,fe.jsx)(K,{label:"Clamp Max",value:r.clampMax,min:0,max:2,step:.01,onChange:a=>t("godRays",{...r,clampMax:a})}),(0,fe.jsx)(bt,{label:"Blur",checked:r.blur,onChange:a=>t("godRays",{...r,blur:a})}),(0,fe.jsx)(sr,{label:"Kernel Size",value:r.kernelSize,options:ns,onChange:a=>t("godRays",{...r,kernelSize:a})})]})}function Gb({pp:e,set:t,open:n,toggle:i}){let{lensflare:r}=e;return(0,fe.jsxs)(lt,{title:"Lens Flare",tooltip:"Adds camera flare artifacts and glow from a bright light source.",open:n.lensflare,onToggle:()=>i("lensflare"),disabled:!r.enabled,trailing:(0,fe.jsx)(ht,{checked:r.enabled,onChange:a=>t("lensflare",{...r,enabled:a}),label:"Toggle Lensflare"}),children:[(0,fe.jsx)(Xi,{label:"Lens Position",value:r.lensPosition,min:-100,max:100,step:.1,onChange:a=>t("lensflare",{...r,lensPosition:a})}),(0,fe.jsx)(K,{label:"Smooth Time",value:r.smoothTime,min:0,max:1,step:.01,onChange:a=>t("lensflare",{...r,smoothTime:a})}),(0,fe.jsx)(K,{label:"Glare Size",value:r.glareSize,min:0,max:1,step:.01,onChange:a=>t("lensflare",{...r,glareSize:a})}),(0,fe.jsx)(K,{label:"Flare Size",value:r.flareSize,min:0,max:.1,step:.001,onChange:a=>t("lensflare",{...r,flareSize:a})}),(0,fe.jsx)(K,{label:"Flare Speed",value:r.flareSpeed,min:0,max:.2,step:.001,onChange:a=>t("lensflare",{...r,flareSpeed:a})}),(0,fe.jsx)(K,{label:"Flare Shape",value:r.flareShape,min:0,max:.2,step:.001,onChange:a=>t("lensflare",{...r,flareShape:a})}),(0,fe.jsx)(bt,{label:"Animated",checked:r.animated,onChange:a=>t("lensflare",{...r,animated:a})}),(0,fe.jsx)(bt,{label:"Anamorphic",checked:r.anamorphic,onChange:a=>t("lensflare",{...r,anamorphic:a})}),(0,fe.jsx)(Tr,{label:"Color Gain",value:r.colorGain,onChange:a=>t("lensflare",{...r,colorGain:a})}),(0,fe.jsx)(K,{label:"Halo Scale",value:r.haloScale,min:0,max:2,step:.01,onChange:a=>t("lensflare",{...r,haloScale:a})}),(0,fe.jsx)(bt,{label:"Secondary Ghosts",checked:r.secondaryGhosts,onChange:a=>t("lensflare",{...r,secondaryGhosts:a})}),(0,fe.jsx)(bt,{label:"Additional Streaks",checked:r.aditionalStreaks,onChange:a=>t("lensflare",{...r,aditionalStreaks:a})}),(0,fe.jsx)(K,{label:"Ghost Scale",value:r.ghostScale,min:0,max:1,step:.01,onChange:a=>t("lensflare",{...r,ghostScale:a})}),(0,fe.jsx)(K,{label:"Opacity",value:r.opacity,min:0,max:1,step:.01,onChange:a=>t("lensflare",{...r,opacity:a})}),(0,fe.jsx)(bt,{label:"Star Burst",checked:r.starBurst,onChange:a=>t("lensflare",{...r,starBurst:a})})]})}function Wb({pp:e,set:t,open:n,toggle:i}){let{depthOfField:r}=e;return(0,fe.jsxs)(lt,{title:"Depth Of Field",tooltip:"Blurs areas that sit away from the focal plane for a camera-like look.",open:n.depthOfField,onToggle:()=>i("depthOfField"),disabled:!r.enabled,trailing:(0,fe.jsx)(ht,{checked:r.enabled,onChange:a=>t("depthOfField",{...r,enabled:a}),label:"Toggle DepthOfField"}),children:[(0,fe.jsx)(K,{label:"Focus Distance",value:r.focusDistance,min:0,max:50,step:.1,onChange:a=>t("depthOfField",{...r,focusDistance:a})}),(0,fe.jsx)(K,{label:"Focus Range",value:r.focusRange,min:.1,max:50,step:.1,onChange:a=>t("depthOfField",{...r,focusRange:a})}),(0,fe.jsx)(K,{label:"Focal Length",value:r.focalLength,min:0,max:1,step:.01,onChange:a=>t("depthOfField",{...r,focalLength:a})}),(0,fe.jsx)(K,{label:"Bokeh Scale",value:r.bokehScale,min:0,max:20,step:.1,onChange:a=>t("depthOfField",{...r,bokehScale:a})})]})}var He=require("react/jsx-runtime"),p_=["linear","reinhard","aces"];function Xb({pp:e,set:t,open:n,toggle:i}){let{colorAverage:r}=e;return(0,He.jsx)(lt,{title:"Color Average",tooltip:"Blends the frame toward a single average color for a washed-out stylized look.",open:n.colorAverage,onToggle:()=>i("colorAverage"),disabled:!r.enabled,trailing:(0,He.jsx)(ht,{checked:r.enabled,onChange:a=>t("colorAverage",{...r,enabled:a}),label:"Toggle ColorAverage"}),children:(0,He.jsx)("div",{className:"se-placeholder",children:"Averages the frame color using the docs default blend mode."})})}function qb({pp:e,set:t,open:n,toggle:i}){let{brightnessContrast:r}=e;return(0,He.jsxs)(lt,{title:"Brightness Contrast",tooltip:"Raises or lowers overall brightness and contrast across the scene.",open:n.brightnessContrast,onToggle:()=>i("brightnessContrast"),disabled:!r.enabled,trailing:(0,He.jsx)(ht,{checked:r.enabled,onChange:a=>t("brightnessContrast",{...r,enabled:a}),label:"Toggle BrightnessContrast"}),children:[(0,He.jsx)(K,{label:"Brightness",value:r.brightness,min:-1,max:1,step:.01,onChange:a=>t("brightnessContrast",{...r,brightness:a})}),(0,He.jsx)(K,{label:"Contrast",value:r.contrast,min:-1,max:1,step:.01,onChange:a=>t("brightnessContrast",{...r,contrast:a})})]})}function Yb({pp:e,set:t,open:n,toggle:i}){let{hueSaturation:r}=e;return(0,He.jsxs)(lt,{title:"Hue Saturation",tooltip:"Shifts the hue and saturation to tint the whole image.",open:n.hueSaturation,onToggle:()=>i("hueSaturation"),disabled:!r.enabled,trailing:(0,He.jsx)(ht,{checked:r.enabled,onChange:a=>t("hueSaturation",{...r,enabled:a}),label:"Toggle HueSaturation"}),children:[(0,He.jsx)(K,{label:"Hue",value:r.hue,min:-Math.PI,max:Math.PI,step:.01,formatValue:a=>`${a.toFixed(2)} rad`,onChange:a=>t("hueSaturation",{...r,hue:a})}),(0,He.jsx)(K,{label:"Saturation",value:r.saturation,min:-1,max:1,step:.01,onChange:a=>t("hueSaturation",{...r,saturation:a})})]})}function $b({pp:e,set:t,open:n,toggle:i}){let{vignette:r}=e;return(0,He.jsxs)(lt,{title:"Vignette",tooltip:"Darkens the edges of the screen so the center feels more focused.",open:n.vignette,onToggle:()=>i("vignette"),disabled:!r.enabled,trailing:(0,He.jsx)(ht,{checked:r.enabled,onChange:a=>t("vignette",{...r,enabled:a}),label:"Toggle Vignette"}),children:[(0,He.jsx)(K,{label:"Offset",value:r.offset,min:0,max:1,step:.01,onChange:a=>t("vignette",{...r,offset:a})}),(0,He.jsx)(K,{label:"Darkness",value:r.darkness,min:0,max:1,step:.01,onChange:a=>t("vignette",{...r,darkness:a})}),(0,He.jsx)(bt,{label:"Eskil",checked:r.eskil,onChange:a=>t("vignette",{...r,eskil:a})})]})}function Kb({pp:e,set:t,open:n,toggle:i}){let{bloom:r}=e;return(0,He.jsxs)(lt,{title:"Bloom",tooltip:"Makes bright areas glow and bleed softly into nearby pixels.",open:n.bloom,onToggle:()=>i("bloom"),disabled:!r.enabled,trailing:(0,He.jsx)(ht,{checked:r.enabled,onChange:a=>t("bloom",{...r,enabled:a}),label:"Toggle Bloom"}),children:[(0,He.jsx)(K,{label:"Threshold",value:r.luminanceThreshold,min:0,max:1,step:.01,onChange:a=>t("bloom",{...r,luminanceThreshold:a})}),(0,He.jsx)(K,{label:"Smoothing",value:r.luminanceSmoothing,min:0,max:1,step:.01,onChange:a=>t("bloom",{...r,luminanceSmoothing:a})}),(0,He.jsx)(K,{label:"Intensity",value:r.intensity,min:0,max:3,step:.05,onChange:a=>t("bloom",{...r,intensity:a})}),(0,He.jsx)(bt,{label:"Mipmap Blur",checked:r.mipmapBlur,onChange:a=>t("bloom",{...r,mipmapBlur:a})}),(0,He.jsx)(K,{label:"Radius",value:r.radius,min:0,max:1,step:.01,onChange:a=>t("bloom",{...r,radius:a})}),(0,He.jsx)(K,{label:"Levels",value:r.levels,min:1,max:16,step:1,onChange:a=>t("bloom",{...r,levels:a})})]})}function Zb({pp:e,set:t,open:n,toggle:i}){let{toneMapping:r}=e;return(0,He.jsxs)(lt,{title:"Tone Mapping",tooltip:"Remaps HDR lighting to screen output and controls exposure style.",open:n.toneMapping,onToggle:()=>i("toneMapping"),disabled:!r.enabled,trailing:(0,He.jsx)(ht,{checked:r.enabled,onChange:a=>t("toneMapping",{...r,enabled:a}),label:"Toggle ToneMapping"}),children:[(0,He.jsxs)("div",{className:"se-field",children:[(0,He.jsx)("span",{className:"se-fieldLabel",children:"Mode"}),(0,He.jsx)("div",{className:"se-segmentedControl",children:p_.map(a=>(0,He.jsx)("button",{type:"button",className:`se-segmentedOption ${r.mode===a?"se-segmentedOption--active":""}`,onClick:()=>t("toneMapping",{...r,mode:a}),children:a==="aces"?"Filmic":a.charAt(0).toUpperCase()+a.slice(1)},a))})]}),(0,He.jsx)(K,{label:"Resolution",value:r.resolution,min:64,max:4096,step:64,onChange:a=>t("toneMapping",{...r,resolution:a})}),(0,He.jsx)(K,{label:"White Point",value:r.whitePoint,min:0,max:16,step:.01,onChange:a=>t("toneMapping",{...r,whitePoint:a})}),(0,He.jsx)(K,{label:"Middle Grey",value:r.middleGrey,min:0,max:1,step:.01,onChange:a=>t("toneMapping",{...r,middleGrey:a})}),(0,He.jsx)(K,{label:"Min Luminance",value:r.minLuminance,min:0,max:1,step:.01,onChange:a=>t("toneMapping",{...r,minLuminance:a})}),(0,He.jsx)(K,{label:"Average Luminance",value:r.averageLuminance,min:0,max:4,step:.01,onChange:a=>t("toneMapping",{...r,averageLuminance:a})}),(0,He.jsx)(K,{label:"Adaptation Rate",value:r.adaptationRate,min:0,max:10,step:.01,onChange:a=>t("toneMapping",{...r,adaptationRate:a})}),(0,He.jsx)(K,{label:"Exposure",value:r.exposure,min:0,max:3,step:.01,onChange:a=>t("toneMapping",{...r,exposure:a})})]})}function Jb({pp:e,set:t,open:n,toggle:i}){let{sepia:r}=e;return(0,He.jsx)(lt,{title:"Sepia",tooltip:"Adds a warm vintage brown tint to the entire image.",open:n.sepia,onToggle:()=>i("sepia"),disabled:!r.enabled,trailing:(0,He.jsx)(ht,{checked:r.enabled,onChange:a=>t("sepia",{...r,enabled:a}),label:"Toggle Sepia"}),children:(0,He.jsx)(K,{label:"Intensity",value:r.intensity,min:0,max:1,step:.01,onChange:a=>t("sepia",{...r,intensity:a})})})}var Ne=require("react/jsx-runtime");function Qb({pp:e,set:t,open:n,toggle:i}){let{dotScreen:r}=e;return(0,Ne.jsxs)(lt,{title:"Dot Screen",tooltip:"Overlays a halftone dot pattern for a printed or retro look.",open:n.dotScreen,onToggle:()=>i("dotScreen"),disabled:!r.enabled,trailing:(0,Ne.jsx)(ht,{checked:r.enabled,onChange:a=>t("dotScreen",{...r,enabled:a}),label:"Toggle DotScreen"}),children:[(0,Ne.jsx)(K,{label:"Angle",value:r.angle,min:0,max:Math.PI*2,step:.01,formatValue:a=>`${a.toFixed(2)} rad`,onChange:a=>t("dotScreen",{...r,angle:a})}),(0,Ne.jsx)(K,{label:"Scale",value:r.scale,min:.1,max:10,step:.05,onChange:a=>t("dotScreen",{...r,scale:a})})]})}function ev({pp:e,set:t,open:n,toggle:i}){let{glitch:r}=e;return(0,Ne.jsxs)(lt,{title:"Glitch",tooltip:"Introduces digital distortion, tearing, and scan noise.",open:n.glitch,onToggle:()=>i("glitch"),disabled:!r.enabled,trailing:(0,Ne.jsx)(ht,{checked:r.enabled,onChange:a=>t("glitch",{...r,enabled:a}),label:"Toggle Glitch"}),children:[(0,Ne.jsx)(sr,{label:"Mode",value:r.mode,options:dm,onChange:a=>t("glitch",{...r,mode:a})}),(0,Ne.jsx)(Ca,{label:"Delay",value:r.delay,min:0,max:10,step:.01,onChange:a=>t("glitch",{...r,delay:a})}),(0,Ne.jsx)(Ca,{label:"Duration",value:r.duration,min:0,max:5,step:.01,onChange:a=>t("glitch",{...r,duration:a})}),(0,Ne.jsx)(Ca,{label:"Strength",value:r.strength,min:0,max:2,step:.01,onChange:a=>t("glitch",{...r,strength:a})}),(0,Ne.jsx)(Ca,{label:"Chromatic Aberration Offset",value:r.chromaticAberrationOffset,min:0,max:.02,step:1e-4,onChange:a=>t("glitch",{...r,chromaticAberrationOffset:a})}),(0,Ne.jsx)(K,{label:"Columns",value:r.columns,min:0,max:.5,step:.001,onChange:a=>t("glitch",{...r,columns:a})}),(0,Ne.jsx)(K,{label:"Ratio",value:r.ratio,min:0,max:1,step:.01,onChange:a=>t("glitch",{...r,ratio:a})})]})}function tv({pp:e,set:t,open:n,toggle:i}){let{grid:r}=e;return(0,Ne.jsxs)(lt,{title:"Grid",tooltip:"Adds a visual grid overlay that feels retro or debug-like.",open:n.grid,onToggle:()=>i("grid"),disabled:!r.enabled,trailing:(0,Ne.jsx)(ht,{checked:r.enabled,onChange:a=>t("grid",{...r,enabled:a}),label:"Toggle Grid"}),children:[(0,Ne.jsx)(K,{label:"Scale",value:r.scale,min:.1,max:10,step:.05,onChange:a=>t("grid",{...r,scale:a})}),(0,Ne.jsx)(K,{label:"Line Width",value:r.lineWidth,min:0,max:1,step:.01,onChange:a=>t("grid",{...r,lineWidth:a})})]})}function nv({pp:e,set:t,open:n,toggle:i}){let{chromaticAberration:r}=e;return(0,Ne.jsxs)(lt,{title:"Chromatic Aberration",tooltip:"Separates color channels slightly to mimic lens fringing.",open:n.chromaticAberration,onToggle:()=>i("chromaticAberration"),disabled:!r.enabled,trailing:(0,Ne.jsx)(ht,{checked:r.enabled,onChange:a=>t("chromaticAberration",{...r,enabled:a}),label:"Toggle ChromaticAberration"}),children:[(0,Ne.jsx)(K,{label:"Offset X",value:r.offsetX,min:0,max:.02,step:1e-4,onChange:a=>t("chromaticAberration",{...r,offsetX:a})}),(0,Ne.jsx)(K,{label:"Offset Y",value:r.offsetY,min:0,max:.02,step:1e-4,onChange:a=>t("chromaticAberration",{...r,offsetY:a})}),(0,Ne.jsx)(bt,{label:"Radial Modulation",checked:r.radialModulation,onChange:a=>t("chromaticAberration",{...r,radialModulation:a})}),(0,Ne.jsx)(K,{label:"Modulation Offset",value:r.modulationOffset,min:0,max:1,step:.01,onChange:a=>t("chromaticAberration",{...r,modulationOffset:a})})]})}function rv({pp:e,set:t,open:n,toggle:i}){let{noise:r}=e;return(0,Ne.jsxs)(lt,{title:"Noise",tooltip:"Adds film grain or static noise to the rendered image.",open:n.noise,onToggle:()=>i("noise"),disabled:!r.enabled,trailing:(0,Ne.jsx)(ht,{checked:r.enabled,onChange:a=>t("noise",{...r,enabled:a}),label:"Toggle Noise"}),children:[(0,Ne.jsx)(K,{label:"Amount",value:r.opacity,min:0,max:1,step:.01,onChange:a=>t("noise",{...r,opacity:a})}),(0,Ne.jsx)(bt,{label:"Premultiply",checked:r.premultiply,onChange:a=>t("noise",{...r,premultiply:a})})]})}function iv({pp:e,set:t,open:n,toggle:i}){let{scanline:r}=e;return(0,Ne.jsx)(lt,{title:"Scan Line",tooltip:"Draws horizontal CRT-style scan lines over the frame.",open:n.scanline,onToggle:()=>i("scanline"),disabled:!r.enabled,trailing:(0,Ne.jsx)(ht,{checked:r.enabled,onChange:a=>t("scanline",{...r,enabled:a}),label:"Toggle Scanline"}),children:(0,Ne.jsx)(K,{label:"Density",value:r.density,min:0,max:10,step:.25,onChange:a=>t("scanline",{...r,density:a})})})}function av({pp:e,set:t,open:n,toggle:i}){let{pixelation:r}=e;return(0,Ne.jsx)(lt,{title:"Pixelation",tooltip:"Reduces detail into larger pixels for a blocky stylized effect.",open:n.pixelation,onToggle:()=>i("pixelation"),disabled:!r.enabled,trailing:(0,Ne.jsx)(ht,{checked:r.enabled,onChange:a=>t("pixelation",{...r,enabled:a}),label:"Toggle Pixelation"}),children:(0,Ne.jsx)(K,{label:"Granularity",value:r.granularity,min:0,max:20,step:1,onChange:a=>t("pixelation",{...r,granularity:a})})})}function ov({pp:e,set:t,open:n,toggle:i}){let{ramp:r}=e;return(0,Ne.jsxs)(lt,{title:"Ramp",tooltip:"Adds a screen-space color gradient, or masks effects earlier in the stack.",open:n.ramp,onToggle:()=>i("ramp"),disabled:!r.enabled,trailing:(0,Ne.jsx)(ht,{checked:r.enabled,onChange:a=>t("ramp",{...r,enabled:a}),label:"Toggle Ramp"}),children:[(0,Ne.jsx)(sr,{label:"Ramp Type",value:r.rampType,options:um,onChange:a=>t("ramp",{...r,rampType:a})}),(0,Ne.jsx)(Ca,{label:"Ramp Start",value:r.rampStart,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,rampStart:a})}),(0,Ne.jsx)(Ca,{label:"Ramp End",value:r.rampEnd,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,rampEnd:a})}),(0,Ne.jsx)(Tr,{label:"Start Color",value:r.startColor,onChange:a=>t("ramp",{...r,startColor:a})}),(0,Ne.jsx)(Tr,{label:"End Color",value:r.endColor,onChange:a=>t("ramp",{...r,endColor:a})}),!r.rampMask&&(0,Ne.jsx)(K,{label:"Gradient Opacity",value:r.opacity??.5,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,opacity:a})}),(0,Ne.jsx)(K,{label:"Bias",value:r.rampBias,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,rampBias:a})}),(0,Ne.jsx)(K,{label:"Gain",value:r.rampGain,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,rampGain:a})}),(0,Ne.jsx)(bt,{label:"Mask Earlier Effects",checked:r.rampMask,onChange:a=>t("ramp",{...r,rampMask:a})}),(0,Ne.jsx)(bt,{label:"Invert",checked:r.rampInvert,onChange:a=>t("ramp",{...r,rampInvert:a})})]})}var Lt=require("react/jsx-runtime");function sv({pp:e,set:t,open:n,toggle:i}){let{outline:r}=e;return(0,Lt.jsxs)(lt,{title:"Outline",tooltip:"Draws a visible edge around the selected object binding.",open:n.outline,onToggle:()=>i("outline"),disabled:!r.enabled,trailing:(0,Lt.jsx)(ht,{checked:r.enabled,onChange:a=>t("outline",{...r,enabled:a}),label:"Toggle Outline"}),children:[(0,Lt.jsx)("div",{className:"se-placeholder",children:"Outlines the currently selected object binding in the model editor."}),(0,Lt.jsx)(K,{label:"Selection Layer",value:r.selectionLayer,min:0,max:20,step:1,onChange:a=>t("outline",{...r,selectionLayer:a})}),(0,Lt.jsx)(K,{label:"Edge Strength",value:r.edgeStrength,min:0,max:10,step:.1,onChange:a=>t("outline",{...r,edgeStrength:a})}),(0,Lt.jsx)(K,{label:"Pulse Speed",value:r.pulseSpeed,min:0,max:10,step:.1,onChange:a=>t("outline",{...r,pulseSpeed:a})}),(0,Lt.jsx)(Tr,{label:"Visible Edge Color",value:r.visibleEdgeColor,onChange:a=>t("outline",{...r,visibleEdgeColor:a})}),(0,Lt.jsx)(Tr,{label:"Hidden Edge Color",value:r.hiddenEdgeColor,onChange:a=>t("outline",{...r,hiddenEdgeColor:a})}),(0,Lt.jsx)(sr,{label:"Kernel Size",value:r.kernelSize,options:ns,onChange:a=>t("outline",{...r,kernelSize:a})}),(0,Lt.jsx)(bt,{label:"Blur",checked:r.blur,onChange:a=>t("outline",{...r,blur:a})}),(0,Lt.jsx)(bt,{label:"X-Ray",checked:r.xRay,onChange:a=>t("outline",{...r,xRay:a})})]})}function lv({pp:e,set:t,open:n,toggle:i}){let{selectiveBloom:r}=e;return(0,Lt.jsxs)(lt,{title:"Selective Bloom",tooltip:"Applies bloom only to objects assigned to the selected layer.",open:n.selectiveBloom,onToggle:()=>i("selectiveBloom"),disabled:!r.enabled,trailing:(0,Lt.jsx)(ht,{checked:r.enabled,onChange:a=>t("selectiveBloom",{...r,enabled:a}),label:"Toggle SelectiveBloom"}),children:[(0,Lt.jsx)("div",{className:"se-placeholder",children:"Applies bloom to the currently selected object binding."}),(0,Lt.jsx)(K,{label:"Selection Layer",value:r.selectionLayer,min:0,max:20,step:1,onChange:a=>t("selectiveBloom",{...r,selectionLayer:a})}),(0,Lt.jsx)(K,{label:"Intensity",value:r.intensity,min:0,max:5,step:.05,onChange:a=>t("selectiveBloom",{...r,intensity:a})}),(0,Lt.jsx)(K,{label:"Threshold",value:r.luminanceThreshold,min:0,max:1,step:.01,onChange:a=>t("selectiveBloom",{...r,luminanceThreshold:a})}),(0,Lt.jsx)(K,{label:"Smoothing",value:r.luminanceSmoothing,min:0,max:1,step:.01,onChange:a=>t("selectiveBloom",{...r,luminanceSmoothing:a})}),(0,Lt.jsx)(sr,{label:"Kernel Size",value:r.kernelSize,options:ns,onChange:a=>t("selectiveBloom",{...r,kernelSize:a})}),(0,Lt.jsx)(bt,{label:"Mipmap Blur",checked:r.mipmapBlur,onChange:a=>t("selectiveBloom",{...r,mipmapBlur:a})}),(0,Lt.jsx)(bt,{label:"Inverted",checked:r.inverted,onChange:a=>t("selectiveBloom",{...r,inverted:a})}),(0,Lt.jsx)(bt,{label:"Ignore Background",checked:r.ignoreBackground,onChange:a=>t("selectiveBloom",{...r,ignoreBackground:a})})]})}function cv({pp:e,set:t,open:n,toggle:i}){let{smaa:r}=e;return(0,Lt.jsx)(lt,{title:"SMAA",tooltip:"Reduces jagged edges with subpixel anti-aliasing.",open:n.smaa,onToggle:()=>i("smaa"),trailing:(0,Lt.jsx)(ht,{checked:r.enabled,onChange:a=>t("smaa",{...r,enabled:a}),label:"Toggle SMAA"}),children:(0,Lt.jsx)("div",{className:"se-placeholder",children:"Subpixel Morphological Anti-Aliasing smooths jagged edges in post-process."})})}var Ot=require("react/jsx-runtime");function Mp({config:e,onChange:t}){let[n,i]=(0,dv.useState)({autofocus:!1,colorAverage:!1,dotScreen:!1,glitch:!1,godRays:!1,grid:!1,lensflare:!1,outline:!1,selectiveBloom:!1,ramp:!1,ssao:!1,brightnessContrast:!1,hueSaturation:!1,depthOfField:!1,chromaticAberration:!1,vignette:!1,bloom:!1,toneMapping:!1,noise:!1,sepia:!1,scanline:!1,pixelation:!1,smaa:!1}),r=c=>i(l=>({...l,[c]:!l[c]})),a=e.postProcessing,s={pp:a,set:(c,l)=>t({...e,postProcessing:{...a,[c]:l}}),open:n,toggle:r};return(0,Ot.jsxs)("div",{className:"se-generalContent",children:[(0,Ot.jsx)(Fb,{...s}),(0,Ot.jsx)(jb,{...s}),(0,Ot.jsx)(Xb,{...s}),(0,Ot.jsx)(Qb,{...s}),(0,Ot.jsx)(ev,{...s}),(0,Ot.jsx)(Hb,{...s}),(0,Ot.jsx)(tv,{...s}),(0,Ot.jsx)(Gb,{...s}),(0,Ot.jsx)(sv,{...s}),(0,Ot.jsx)(lv,{...s}),(0,Ot.jsx)(qb,{...s}),(0,Ot.jsx)(Yb,{...s}),(0,Ot.jsx)(Wb,{...s}),(0,Ot.jsx)(nv,{...s}),(0,Ot.jsx)($b,{...s}),(0,Ot.jsx)(Kb,{...s}),(0,Ot.jsx)(Zb,{...s}),(0,Ot.jsx)(rv,{...s}),(0,Ot.jsx)(Jb,{...s}),(0,Ot.jsx)(iv,{...s}),(0,Ot.jsx)(av,{...s}),(0,Ot.jsx)(ov,{...s}),(0,Ot.jsx)(cv,{...s})]})}var qs=require("react"),Yi=require("lucide-react");var ge=require("react/jsx-runtime"),h_=["512","1024","2048","4096"],uv={none:"None",directional:"Direction",point:"Point",spot:"Spot",hemisphere:"Hemi"};function m_({index:e,light:t,selected:n,onSelect:i,onToggleVisible:r}){return(0,ge.jsxs)("div",{className:`se-lightRow ${n?"se-lightRow--active":""}`,onClick:i,children:[(0,ge.jsxs)("span",{className:"se-lightRowLabel",children:[e+1,": ",uv[t.type]]}),(0,ge.jsx)("button",{type:"button",className:"se-iconButton","aria-label":t.visible?"Hide light":"Show light",onClick:a=>{a.stopPropagation(),r()},children:t.visible?(0,ge.jsx)(Yi.Eye,{size:14}):(0,ge.jsx)(Yi.EyeOff,{size:14})})]})}function f_(){return{id:crypto.randomUUID(),type:"directional",color:"#ffffff",intensity:1,position:[5,10,5],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0}}function Cp({config:e,onChange:t}){let[n,i]=(0,qs.useState)({lights:!0,shadows:!1,groundShadows:!1,environment:!1,envShadow:!1}),r=(0,qs.useSyncExternalStore)(vp,zc),[a,o]=(0,qs.useState)(e.lighting.lights[0]?.id??null),s=r??a,c=b=>{o(b),js(b)},l=b=>i(w=>({...w,[b]:!w[b]})),{tier:u}=Cr(),d=Mi(u,"starter"),{lighting:h,shadows:f,groundShadows:g,environment:x}=e,P=b=>t({...e,lighting:b}),y=b=>t({...e,shadows:b}),p=b=>t({...e,groundShadows:b}),m=b=>t({...e,environment:b}),M=(b,w)=>{P({...h,lights:h.lights.map(C=>C.id===b?{...C,...w}:C)})},_=h.lights.find(b=>b.id===s)??null,T=()=>{let b=f_();P({...h,lights:[...h.lights,b]}),c(b.id)},E=()=>{if(!_)return;let b=h.lights.filter(w=>w.id!==_.id);P({...h,lights:b}),c(b[0]?.id??null)};return(0,ge.jsxs)("div",{className:"se-generalContent",children:[(0,ge.jsxs)(lt,{title:"Lights",open:n.lights,onToggle:()=>l("lights"),children:[(0,ge.jsx)("div",{className:"se-lightList",children:h.lights.map((b,w)=>(0,ge.jsx)(m_,{index:w,light:b,selected:b.id===s,onSelect:()=>c(b.id),onToggleVisible:()=>M(b.id,{visible:!b.visible})},b.id))}),(0,ge.jsxs)("div",{className:"se-lightActions",children:[(0,ge.jsx)("button",{type:"button",className:"se-iconButton",onClick:T,title:"Add light",children:(0,ge.jsx)(Yi.Plus,{size:14})}),_&&h.lights.length>1&&(0,ge.jsx)("button",{type:"button",className:"se-iconButton",onClick:E,title:"Remove selected light",children:(0,ge.jsx)(Yi.Trash2,{size:14})})]}),_?(0,ge.jsxs)("div",{className:"se-lightProps",children:[(0,ge.jsxs)("div",{className:"se-field",children:[(0,ge.jsx)("span",{className:"se-fieldLabel",children:"Type"}),(0,ge.jsx)("div",{className:"se-segmentedControl",style:{gridAutoColumns:"1fr"},children:sm.map(b=>(0,ge.jsx)("button",{type:"button",className:`se-segmentedOption ${_.type===b?"se-segmentedOption--active":""}`,onClick:()=>M(_.id,{type:b}),children:uv[b]},b))})]}),(0,ge.jsx)(Tr,{label:"Color",value:_.color,onChange:b=>M(_.id,{color:b})}),(0,ge.jsx)(K,{label:"Intensity",value:_.intensity,min:0,max:10,step:.1,onChange:b=>M(_.id,{intensity:b})}),_.type!=="hemisphere"&&_.type!=="none"&&(0,ge.jsx)(Xi,{label:"Position",value:_.position,min:-100,max:100,step:.05,onChange:b=>M(_.id,{position:b})}),_.type==="spot"&&(0,ge.jsxs)(ge.Fragment,{children:[(0,ge.jsx)(K,{label:"Angle",value:_.angle??Math.PI/6,min:0,max:Math.PI/2,step:.01,formatValue:b=>`${Math.round(b*180/Math.PI)}\xB0`,onChange:b=>M(_.id,{angle:b})}),(0,ge.jsx)(K,{label:"Penumbra",value:_.penumbra??.2,min:0,max:1,step:.01,onChange:b=>M(_.id,{penumbra:b})}),(0,ge.jsx)(K,{label:"Distance",value:_.distance??0,min:0,max:100,step:.5,onChange:b=>M(_.id,{distance:b})}),(0,ge.jsx)(K,{label:"Decay",value:_.decay??2,min:0,max:4,step:.1,onChange:b=>M(_.id,{decay:b})})]}),(0,ge.jsx)(bt,{label:"Attached to camera",checked:_.attachedToCamera,onChange:b=>M(_.id,{attachedToCamera:b})}),(0,ge.jsx)(bt,{label:"Cast shadows",checked:_.castShadow,onChange:b=>M(_.id,{castShadow:b})}),(0,ge.jsx)(K,{label:"Shadow bias",value:_.shadowBias,min:-.01,max:.01,step:1e-4,onChange:b=>M(_.id,{shadowBias:b})})]}):null]}),(0,ge.jsxs)(lt,{title:"Shadows",open:n.shadows,onToggle:()=>l("shadows"),disabled:!f.enabled,trailing:(0,ge.jsx)(ht,{checked:f.enabled,onChange:b=>y({...f,enabled:b}),label:"Toggle shadows"}),children:[(0,ge.jsx)(sr,{label:"Map size",value:String(f.mapSize),options:h_,onChange:b=>y({...f,mapSize:Number(b)})}),(0,ge.jsx)(K,{label:"Bias",value:f.bias,min:-.01,max:.01,step:1e-4,onChange:b=>y({...f,bias:b})}),(0,ge.jsx)(K,{label:"Normal bias",value:f.normalBias,min:0,max:.2,step:.01,onChange:b=>y({...f,normalBias:b})}),(0,ge.jsx)(K,{label:"Radius (softness)",value:f.radius,min:0,max:20,step:.5,onChange:b=>y({...f,radius:b})})]}),(0,ge.jsxs)(lt,{title:"Ground Shadows",open:n.groundShadows,onToggle:()=>l("groundShadows"),disabled:!g.enabled,trailing:(0,ge.jsx)(ht,{checked:g.enabled,onChange:b=>p({...g,enabled:b}),label:"Toggle ground shadows"}),children:[(0,ge.jsxs)("div",{className:"se-field",children:[(0,ge.jsx)("span",{className:"se-fieldLabel",children:"Mode"}),(0,ge.jsx)("div",{className:"se-segmentedControl",style:{gridAutoColumns:"1fr"},children:["shadowCatcher"].map(b=>(0,ge.jsx)("button",{type:"button",className:`se-segmentedOption ${g.mode===b?"se-segmentedOption--active":""}`,onClick:()=>p({...g,mode:b}),children:b==="shadowCatcher"?"Shadow Catcher":"Baked AO"},b))})]}),g.mode==="bakedAO"&&(0,ge.jsx)("div",{className:"se-placeholder",children:"Requires pre-baked AO textures \u2014 not yet available."}),(0,ge.jsx)(K,{label:"Intensity",value:g.intensity,min:0,max:1,step:.01,onChange:b=>p({...g,intensity:b})}),(0,ge.jsx)(K,{label:"Border fade",value:g.borderFade,min:0,max:10,step:.1,onChange:b=>p({...g,borderFade:b})}),(0,ge.jsx)(K,{label:"Height",value:g.height,min:-5,max:5,step:.1,onChange:b=>p({...g,height:b})}),(0,ge.jsx)(K,{label:"Size",value:g.size,min:1,max:50,step:.5,onChange:b=>p({...g,size:b})})]}),(0,ge.jsx)(lt,{title:"Environment",open:n.environment,onToggle:()=>l("environment"),children:d?(0,ge.jsxs)(ge.Fragment,{children:[(0,ge.jsx)(K,{label:"Orientation",value:x.rotation,min:0,max:360,step:1,formatValue:b=>`${b}\xB0`,onChange:b=>m({...x,rotation:b})}),(0,ge.jsx)(K,{label:"Brightness",value:x.intensity,min:0,max:3,step:.05,onChange:b=>m({...x,intensity:b})}),(0,ge.jsxs)(lt,{title:"Shadow",open:n.envShadow,onToggle:()=>l("envShadow"),trailing:(0,ge.jsx)(ht,{checked:x.shadowLight.enabled,onChange:b=>m({...x,shadowLight:{...x.shadowLight,enabled:b}}),label:"Toggle environment shadow light"}),disabled:!x.shadowLight.enabled,children:[(0,ge.jsx)(K,{label:"Light intensity",value:x.shadowLight.intensity,min:0,max:20,step:.1,onChange:b=>m({...x,shadowLight:{...x.shadowLight,intensity:b}})}),(0,ge.jsx)(K,{label:"Shadow bias",value:x.shadowLight.bias,min:-.01,max:.01,step:1e-4,onChange:b=>m({...x,shadowLight:{...x.shadowLight,bias:b}})})]})]}):(0,ge.jsx)(tr,{requiredTier:"starter",feature:"Environment lighting"})})]})}var $c=require("react"),ai=require("lucide-react");var ve=require("react/jsx-runtime");function g_(e){if(!Number.isFinite(e)||e<=0)return"Unknown duration";let t=Math.round(e*10)/10;if(t<60)return`${t.toFixed(1)}s`;let n=Math.floor(t/60),i=(t%60).toFixed(1).padStart(4,"0");return`${n}:${i}`}function pv(e){let t=Number.isFinite(e)&&e>0?e:0;if(t<60)return`${t.toFixed(1)}s`;let n=Math.floor(t/60),i=(t%60).toFixed(1).padStart(4,"0");return`${n}:${i}`}function b_(e){return Number.isFinite(e)?Math.min(3,Math.max(.1,Number(e.toFixed(2)))):1}function Tp({config:e,onChange:t,clipDetails:n,currentClip:i,isPlaying:r,time:a,play:o,pause:s,stop:c,setSpeed:l,seek:u}){let[d,h]=(0,$c.useState)(!1),f=(0,$c.useMemo)(()=>new Map(n.map(b=>[b.sourceName,b.duration])),[n]),g=e.animations.clips.filter(b=>!b.hidden),x=e.animations.clips.filter(b=>b.hidden),P=(b,w=e.animations.autoplayClip)=>{t({...e,animations:{clips:b(e.animations.clips),autoplayClip:w}})},y=(b,w)=>{P(C=>C.map(S=>S.sourceName===b?w(S):S))},p=(b,w)=>{y(b,C=>({...C,loopMode:w}))},m=(b,w)=>{let C=b_(w);y(b,S=>({...S,speed:C})),i===b&&l(C)},M=(b,w)=>{y(b,C=>({...C,displayName:w}))},_=b=>{let w=e.animations.autoplayClip===b?null:b;t({...e,animations:{...e.animations,autoplayClip:w}})},T=b=>{P(w=>w.map(C=>C.sourceName===b?{...C,hidden:!0}:C),e.animations.autoplayClip===b?null:e.animations.autoplayClip),i===b&&c()},E=b=>{P(w=>w.map(C=>C.sourceName===b?{...C,hidden:!1}:C))};return e.animations.clips.length===0?(0,ve.jsx)(Ma,{title:"Animations",children:(0,ve.jsx)("div",{className:"se-helperCard",children:"Upload a model with embedded animations to manage playback, naming, autoplay, and per-clip speed here."})}):(0,ve.jsxs)(Ma,{title:"Animations",children:[g.length===0&&(0,ve.jsx)("div",{className:"se-helperCard",children:(0,ve.jsx)("span",{children:"Preview clips directly in the viewer, choose one optional autoplay animation, and use soft delete to hide clips without modifying the GLB."})}),g.length===0?(0,ve.jsx)("div",{className:"se-placeholder",children:"All animations are currently removed. Restore a clip below to make it available again."}):(0,ve.jsx)("div",{className:"se-animationList",children:g.map(b=>{let w=i===b.sourceName,C=f.get(b.sourceName)??0;return(0,ve.jsxs)("article",{className:`se-animationCard ${w?"se-animationCard--active":""}`,children:[(0,ve.jsxs)("div",{className:"se-animationHeader",children:[(0,ve.jsxs)("div",{className:"se-animationHeading",children:[(0,ve.jsxs)("div",{className:"se-animationTitleRow",children:[(0,ve.jsx)("span",{className:"se-animationStatus",children:w?r?"Playing":"Paused":"Ready"}),e.animations.autoplayClip===b.sourceName?(0,ve.jsx)("span",{className:"se-animationBadge",children:"Autoplay"}):null]}),(0,ve.jsx)("div",{className:"se-animationSource",children:b.sourceName})]}),(0,ve.jsx)("button",{type:"button",className:"se-animationDangerButton",onClick:()=>T(b.sourceName),title:"Remove animation",children:(0,ve.jsx)(ai.Trash2,{size:16})})]}),(0,ve.jsxs)("div",{className:"se-field",children:[(0,ve.jsx)("span",{className:"se-fieldLabel",children:"Display name"}),(0,ve.jsx)("input",{className:"se-textInput",value:b.displayName,onChange:O=>M(b.sourceName,O.target.value),placeholder:"Animation name"})]}),(0,ve.jsxs)("div",{className:"se-animationMeta",children:[(0,ve.jsx)("span",{children:g_(C)}),(0,ve.jsx)("span",{children:b.loopMode==="once"?"Play once":"Looping"}),(0,ve.jsxs)("span",{children:[b.speed.toFixed(2),"x"]})]}),(0,ve.jsxs)("div",{className:"se-animationButtonRow",children:[(()=>{let O=w&&r;return(0,ve.jsx)("button",{type:"button",className:"se-animationButton se-animationButton--icon",onClick:()=>O?s():o(b.sourceName),"aria-label":O?"Pause":"Play",title:O?"Pause":"Play",children:O?(0,ve.jsx)(ai.Pause,{size:16}):(0,ve.jsx)(ai.Play,{size:16})})})(),(0,ve.jsx)("button",{type:"button",className:"se-animationButton se-animationButton--icon",onClick:c,disabled:!w,"aria-label":"Stop",title:"Stop",children:(0,ve.jsx)(ai.Square,{size:16})})]}),(0,ve.jsxs)("div",{className:"se-animationSeekRow",children:[(0,ve.jsx)("input",{className:"se-slider se-animationSeek",type:"range",min:0,max:Math.max(C,.001),step:.01,value:w?Math.min(a,C):0,disabled:!w||C<=0,onChange:O=>u(Number(O.target.value)),"aria-label":"Seek"}),(0,ve.jsxs)("span",{className:"se-animationSeekTime",children:[pv(w?Math.min(a,C):0)," / ",pv(C)]})]}),(0,ve.jsxs)("div",{className:"se-animationGrid",children:[(0,ve.jsxs)("label",{className:"se-field",children:[(0,ve.jsx)("span",{className:"se-fieldLabel",children:"Loop mode"}),(0,ve.jsxs)("select",{className:"se-select",value:b.loopMode,onChange:O=>p(b.sourceName,O.target.value),children:[(0,ve.jsx)("option",{value:"repeat",children:"Loop"}),(0,ve.jsx)("option",{value:"once",children:"Play Once"})]})]}),(0,ve.jsxs)("label",{className:"se-field",children:[(0,ve.jsxs)("span",{className:"se-fieldLabel",children:["Speed",(0,ve.jsxs)("span",{className:"se-fieldValue",children:[b.speed.toFixed(2),"x"]})]}),(0,ve.jsxs)("div",{className:"se-animationSpeedRow",children:[(0,ve.jsx)("input",{className:"se-slider",type:"range",min:.1,max:3,step:.1,value:b.speed,onChange:O=>m(b.sourceName,Number(O.target.value))}),(0,ve.jsx)("input",{className:"se-numberInput se-animationSpeedInput",type:"number",min:.1,max:3,step:.1,value:b.speed,onChange:O=>m(b.sourceName,Number(O.target.value))})]})]})]}),(0,ve.jsx)("button",{type:"button",className:`se-animationAutoplayButton ${e.animations.autoplayClip===b.sourceName?"se-animationAutoplayButton--active":""}`,onClick:()=>_(b.sourceName),children:e.animations.autoplayClip===b.sourceName?"Disable autoplay":"Set as autoplay"})]},b.sourceName)})}),x.length>0?(0,ve.jsxs)("section",{className:"se-removedAnimations",children:[(0,ve.jsx)("button",{type:"button",className:"se-panelHeader",onClick:()=>h(b=>!b),children:(0,ve.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,ve.jsx)(ai.ChevronDown,{size:16,className:`se-panelChevron ${d?"se-panelChevron--open":""}`}),(0,ve.jsxs)("span",{className:"se-panelTitle",children:["Removed Animations (",x.length,")"]})]})}),d?(0,ve.jsx)("div",{className:"se-removedAnimationList",children:x.map(b=>(0,ve.jsxs)("div",{className:"se-removedAnimationRow",children:[(0,ve.jsxs)("div",{children:[(0,ve.jsx)("div",{className:"se-removedAnimationName",children:b.displayName||b.sourceName}),(0,ve.jsx)("div",{className:"se-animationSource",children:b.sourceName})]}),(0,ve.jsx)("button",{type:"button",className:"se-animationButton",onClick:()=>E(b.sourceName),children:"Restore"})]},b.sourceName))}):null]}):null]})}var Pp=require("react"),Kc=require("lucide-react");var ct=require("react/jsx-runtime");function Ap({config:e,onChange:t}){let[n,i]=(0,Pp.useState)(null),[r,a]=(0,Pp.useState)({title:"",description:""}),o=e.annotations,s=d=>{i(d),a({title:d.title,description:d.description||""})},c=()=>{if(!n||!r.title.trim())return;let d=o.map(h=>h.id===n.id?{...h,title:r.title.trim(),description:r.description||""}:h);t({...e,annotations:d}),i(null),a({title:"",description:""})},l=d=>{if(window.confirm("Delete this annotation?")){let f=o.filter(g=>g.id!==d).map((g,x)=>({...g,id:x+1}));t({...e,annotations:f}),i(null),a({title:"",description:""})}},u=()=>{i(null),a({title:"",description:""})};return(0,ct.jsxs)(Ma,{title:"Annotations",children:[e.annotations.length===0?(0,ct.jsx)("div",{className:"bb-emptyAnnotations",children:"No annotations yet. Double-click on the model to add one."}):(0,ct.jsx)("div",{className:"bb-annotationsList",children:e.annotations.map(d=>(0,ct.jsxs)("div",{className:"bb-annotationCard",children:[(0,ct.jsxs)("div",{className:"bb-annotationHeader",children:[(0,ct.jsxs)("div",{className:"bb-annotationBadge",children:["#",d.id]}),(0,ct.jsxs)("div",{className:"bb-annotationActions",children:[(0,ct.jsx)("button",{className:"bb-annotationAction bb-annotationAction--edit",onClick:()=>s(d),title:"Edit annotation",children:(0,ct.jsx)(Kc.Pencil,{size:16})}),(0,ct.jsx)("button",{className:"bb-annotationAction bb-annotationAction--delete",onClick:()=>l(d.id),title:"Delete annotation",children:(0,ct.jsx)(Kc.Trash2,{size:16})})]})]}),(0,ct.jsx)("div",{className:"bb-annotationTitle",children:d.title}),d.description&&(0,ct.jsx)("div",{className:"bb-annotationDescription",children:d.description}),(0,ct.jsxs)("div",{className:"bb-annotationPosition",children:["Position: [",d.worldPosition[0].toFixed(2),","," ",d.worldPosition[1].toFixed(2),","," ",d.worldPosition[2].toFixed(2),"]"]})]},d.id))}),n&&(0,ct.jsx)("div",{className:"bb-editAnnotationOverlay",onClick:u,children:(0,ct.jsxs)("div",{className:"bb-editAnnotationPopup",onClick:d=>d.stopPropagation(),children:[(0,ct.jsxs)("div",{className:"bb-editAnnotationHeader",children:[(0,ct.jsx)("h3",{className:"bb-editAnnotationTitle",children:"Edit Annotation"}),(0,ct.jsx)("button",{className:"bb-editAnnotationClose",onClick:u,children:"\xD7"})]}),(0,ct.jsxs)("div",{className:"bb-editAnnotationBody",children:[(0,ct.jsxs)("div",{className:"bb-field",children:[(0,ct.jsx)("label",{className:"bb-label",children:"Title"}),(0,ct.jsx)("input",{className:"bb-input",value:r.title,onChange:d=>a({...r,title:d.target.value}),placeholder:"Enter annotation title"})]}),(0,ct.jsxs)("div",{className:"bb-field",children:[(0,ct.jsx)("label",{className:"bb-label",children:"Description"}),(0,ct.jsx)("textarea",{className:"bb-textarea",value:r.description,onChange:d=>a({...r,description:d.target.value}),placeholder:"Enter annotation description",rows:3})]}),(0,ct.jsxs)("div",{className:"bb-editAnnotationActions",children:[(0,ct.jsx)("button",{className:"bb-button",onClick:u,children:"Cancel"}),(0,ct.jsx)("button",{className:"bb-button bb-button--primary",onClick:c,disabled:!r.title.trim(),children:"Save"}),(0,ct.jsx)("button",{className:"bb-button bb-button--danger",onClick:()=>l(n.id),children:"Delete"})]})]})]})})]})}var oi=require("react"),Pr=require("lucide-react");var Te=require("react/jsx-runtime"),v_={enabled:!0,waypoints:[],loop:!0,autoPlay:!1},Ta=3.5;function Ep({config:e,onChange:t,cameraState:n,onPreviewWaypoint:i}){let r=e.cinematic??v_,{waypoints:a}=r,o=(0,oi.useCallback)((y,p)=>{if(y.length<2)return 0;let m=0;for(let M=0;M<y.length-1;M++){let _=y[M].segmentDuration??Ta;m+=_}return p&&y.length>1&&(m+=y[y.length-1].segmentDuration??Ta),Math.max(m,0)},[]),s=(0,oi.useCallback)(y=>{t({...e,cinematic:{...r,...y}})},[e,r,t]),c=(0,oi.useCallback)(()=>{if(!n)return;let y={position:[...n.position],target:[...n.target],...n.azimuthAngle!=null?{azimuthAngle:n.azimuthAngle}:{},...n.polarAngle!=null?{polarAngle:n.polarAngle}:{},segmentDuration:Ta},p=[...a,y],m=o(p,r.loop);s({waypoints:p,duration:m})},[n,a,r.loop,o,s]),l=(0,oi.useCallback)(y=>{let p=a.filter((M,_)=>_!==y),m=o(p,r.loop);s({waypoints:p,duration:m})},[a,r.loop,o,s]),u=(0,oi.useCallback)((y,p)=>{let m=y+p;if(m<0||m>=a.length)return;let M=[...a];[M[y],M[m]]=[M[m],M[y]];let _=o(M,r.loop);s({waypoints:M,duration:_})},[a,r.loop,o,s]),d=(0,oi.useCallback)((y,p)=>{let m=a.map((_,T)=>T===y?{..._,...p}:_),M=o(m,r.loop);s({waypoints:m,duration:M})},[a,r.loop,o,s]),[h,f]=(0,oi.useState)(!1),g=a.some(y=>y.segmentDuration!==void 0),x=(0,oi.useCallback)(y=>y>=a.length-1?Ta:a[y]?.segmentDuration??Ta,[a]),P=a.length>=2;return(0,Te.jsxs)(Ma,{title:"Cinematic Camera",children:[(0,Te.jsx)("p",{className:"se-cinematicHint",children:"Frame the model in the viewer, then capture it as a waypoint. The camera glides through the waypoints in order \u2014 enable and press play in the viewer to preview."}),(0,Te.jsxs)("button",{type:"button",className:"bb-button bb-button--primary se-cinematicAdd",onClick:c,disabled:!n,title:"Capture the current camera view as a waypoint",children:[(0,Te.jsx)(Pr.Plus,{size:15}),"Add waypoint from current view"]}),(0,Te.jsxs)("div",{className:"se-customizeToggle",children:[(0,Te.jsxs)("label",{className:"se-toggleLabel",children:[(0,Te.jsx)("input",{type:"checkbox",checked:h,onChange:y=>f(y.target.checked)}),(0,Te.jsx)(Pr.Settings,{size:14}),(0,Te.jsx)("span",{children:"Customize durations between waypoints"})]}),h&&(0,Te.jsxs)("span",{className:"se-toggleHint",children:["Set duration for each segment between waypoints: 1\u21922, 2\u21923, etc. Default: ",Ta,"s"]})]}),a.length===0?(0,Te.jsx)("div",{className:"bb-emptyAnnotations",children:"No waypoints yet. Position the camera and add your first one."}):(0,Te.jsxs)(Te.Fragment,{children:[(0,Te.jsx)("div",{className:"se-waypointList",children:a.map((y,p)=>{let m=x(p),M=p===a.length-1,_=y.segmentDuration!==void 0&&y.segmentDuration!==Ta;return(0,Te.jsxs)("div",{children:[(0,Te.jsxs)("div",{className:"se-waypointCard",children:[(0,Te.jsx)("div",{className:"se-waypointBadge",children:p+1}),(0,Te.jsxs)("div",{className:"se-waypointBody",children:[(0,Te.jsxs)("div",{className:"se-waypointCoords",children:["pos [",y.position.map(T=>T.toFixed(1)).join(", "),"]"]}),(0,Te.jsxs)("div",{className:"se-waypointCoords",children:["look [",y.target.map(T=>T.toFixed(1)).join(", "),"]"]}),h&&!M&&(0,Te.jsxs)("div",{className:`se-customBadge ${_?"se-customBadge--custom":"se-customBadge--default"}`,children:[m.toFixed(1),"s",!_&&" (default)"]})]}),(0,Te.jsxs)("div",{className:"se-waypointActions",children:[(0,Te.jsx)("button",{className:"se-waypointAction",onClick:()=>i?.(y),title:"Fly camera to this waypoint",disabled:!i,children:(0,Te.jsx)(Pr.MapPin,{size:15})}),(0,Te.jsx)("button",{className:"se-waypointAction",onClick:()=>u(p,-1),title:"Move up",disabled:p===0,children:(0,Te.jsx)(Pr.ArrowUp,{size:15})}),(0,Te.jsx)("button",{className:"se-waypointAction",onClick:()=>u(p,1),title:"Move down",disabled:M,children:(0,Te.jsx)(Pr.ArrowDown,{size:15})}),(0,Te.jsx)("button",{className:"se-waypointAction se-waypointAction--delete",onClick:()=>l(p),title:"Delete waypoint",children:(0,Te.jsx)(Pr.Trash2,{size:15})})]})]}),h&&!M&&(0,Te.jsxs)("div",{className:"se-segmentBetween",children:[(0,Te.jsxs)("div",{className:"se-segmentLabel",children:[p+1," \u2192 ",p+2,!y.segmentDuration&&" (default)"]}),(0,Te.jsxs)("div",{className:"se-segmentControls",children:[(0,Te.jsx)("span",{className:"se-durationLabel",children:"Duration:"}),(0,Te.jsx)("input",{type:"range",className:"se-segmentSlider",min:1,max:20,step:.5,value:m,onChange:T=>{let E=parseFloat(T.target.value);d(p,{segmentDuration:E})}}),(0,Te.jsxs)("span",{className:"se-segmentValue",children:[m.toFixed(1),"s"]}),(0,Te.jsxs)("div",{className:"se-presetButtons",children:[[2,4,6,8].map(T=>(0,Te.jsxs)("button",{className:"se-presetButton",onClick:()=>d(p,{segmentDuration:T}),children:[T,"s"]},`preset-${p}-${T}`)),(0,Te.jsx)("button",{className:"se-presetButton se-presetButton--default",onClick:()=>{let T=a.map((b,w)=>{if(w===p){let{segmentDuration:C,...S}=b;return S}return b}),E=o(T,r.loop);s({waypoints:T,duration:E})},children:"Reset"})]})]})]})]},`waypoint-wrapper-${p}`)})}),(0,Te.jsxs)("div",{className:"se-totalDuration",children:[(0,Te.jsx)("span",{className:"se-totalLabel",children:"Total duration:"}),(0,Te.jsx)("span",{className:"se-totalValue",children:P?(r.duration??o(a,r.loop)).toFixed(1)+"s":"-"}),!P&&(0,Te.jsx)("span",{className:"se-totalHint",children:"(need at least 2 waypoints)"})]})]}),(0,Te.jsx)(bt,{label:"Enable cinematic camera",checked:r.enabled,onChange:y=>s({enabled:y})}),(0,Te.jsx)(bt,{label:"Loop",checked:r.loop,onChange:y=>{let p=y,m=o(a,p);s({loop:p,duration:m})}}),(0,Te.jsx)(bt,{label:"Auto-play on load",checked:r.autoPlay,onChange:y=>s({autoPlay:y})}),!h&&P&&(0,Te.jsx)(K,{label:"Duration",value:r.duration??o(a,r.loop),min:4,max:120,step:1,formatValue:y=>`${y}s`,onChange:y=>s({duration:y})})]})}var Ar=require("lucide-react");var un=require("react/jsx-runtime"),x_=[{label:"General",icon:(0,un.jsx)(Ar.Box,{})},{label:"Lighting",icon:(0,un.jsx)(Ar.Spotlight,{})},{label:"Animations",icon:(0,un.jsx)(Ar.Clapperboard,{})},{label:"Post Processing",icon:(0,un.jsx)(Ar.Sparkles,{})},{label:"Annotations",icon:(0,un.jsx)(Ar.MessageSquareText,{})},{label:"Cinematic",icon:(0,un.jsx)(Ar.Video,{})}],hv={currentClip:null,isPlaying:!1,time:0,duration:0,play:()=>{},pause:()=>{},stop:()=>{},setSpeed:()=>{},seek:()=>{}};function Rp({config:e,onChange:t,activeSubTab:n,onActiveSubTabChange:i,cameraState:r=null,onPreviewWaypoint:a,animationClipDetails:o=[],animationPlayback:s=hv}){let[c,l]=(0,Zc.useState)("General"),u=n??c,d=s??hv,{tier:h}=Cr(),f=Mi(h,"starter"),g=Mi(h,"growth");(0,Zc.useEffect)(()=>{n!==void 0&&l(n)},[n]);let x=P=>{n===void 0&&l(P),i?.(P)};return(0,un.jsxs)("div",{className:"se-tabContent",children:[(0,un.jsx)("div",{className:"se-subTabRow",children:x_.map(P=>(0,un.jsx)("button",{type:"button",title:P.label,className:`se-subTab ${u===P.label?"se-subTab--active":""}`,onClick:()=>x(P.label),children:P.icon},P.label))}),u==="General"&&(0,un.jsx)(Sp,{config:e,onChange:t}),u==="Lighting"&&(0,un.jsx)(Cp,{config:e,onChange:t}),u==="Animations"&&(f?(0,un.jsx)(Tp,{config:e,onChange:t,clipDetails:o,currentClip:d.currentClip,isPlaying:d.isPlaying,time:d.time,duration:d.duration,play:d.play,pause:d.pause,stop:d.stop,setSpeed:d.setSpeed,seek:d.seek}):(0,un.jsx)(tr,{requiredTier:"starter",feature:"Animation configuration"})),u==="Post Processing"&&(g?(0,un.jsx)(Mp,{config:e,onChange:t}):(0,un.jsx)(tr,{requiredTier:"growth",feature:"Post-processing effects"})),u==="Annotations"&&(f?(0,un.jsx)(Ap,{config:e,onChange:t}):(0,un.jsx)(tr,{requiredTier:"starter",feature:"Annotations"})),u==="Cinematic"&&(f?(0,un.jsx)(Ep,{config:e,onChange:t,cameraState:r,onPreviewWaypoint:a}):(0,un.jsx)(tr,{requiredTier:"starter",feature:"Cinematic camera"}))]})}var So=require("lucide-react"),Yt=require("react/jsx-runtime");function mv({title:e,trailing:t,children:n,disabled:i,open:r,onToggle:a,tooltip:o}){let s=o?`${o}`:e;return(0,Yt.jsxs)("div",{className:"bb-materialPanel",children:[(0,Yt.jsxs)("button",{type:"button",className:"bb-materialPanelHeader",onClick:a,"aria-expanded":r,title:s,children:[(0,Yt.jsxs)("div",{className:"bb-materialPanelTitleWrap",children:[(0,Yt.jsx)(So.ChevronDown,{size:14,className:`bb-materialPanelChevron ${r?"bb-materialPanelChevron--open":""}`}),(0,Yt.jsx)("span",{className:"bb-materialPanelTitle",children:e}),o?(0,Yt.jsx)("span",{className:"bb-materialPanelHelp",title:s,"aria-label":s,role:"img",onClick:c=>c.stopPropagation(),children:(0,Yt.jsx)(So.Info,{size:12})}):null]}),t?(0,Yt.jsx)("div",{onClick:c=>c.stopPropagation(),children:t}):null]}),r?(0,Yt.jsx)("div",{className:"bb-materialPanelBody",style:i?{opacity:.45,pointerEvents:"none"}:void 0,children:n}):null]})}function nr({title:e,open:t,onToggle:n,trailing:i,children:r,tooltip:a}){let o=a?`${e}: ${a}`:e;return(0,Yt.jsxs)("div",{className:"bb-section",children:[(0,Yt.jsxs)("button",{type:"button",className:"bb-sectionHeaderButton",onClick:n,"aria-expanded":t,title:o,children:[(0,Yt.jsxs)("span",{className:"bb-sectionHeaderMain",children:[(0,Yt.jsx)(So.ChevronDown,{size:15,className:`bb-sectionChevron ${t?"bb-sectionChevron--open":""}`}),(0,Yt.jsx)("h2",{className:"bb-sectionTitle",children:e}),a?(0,Yt.jsx)("span",{className:"bb-sectionHelp",title:o,"aria-label":o,role:"img",onClick:s=>s.stopPropagation(),children:(0,Yt.jsx)(So.Info,{size:13})}):null]}),i?(0,Yt.jsx)("span",{onClick:s=>s.stopPropagation(),children:i}):null]}),t?(0,Yt.jsx)("div",{className:"bb-sectionBody",children:r}):null]})}function fv({checked:e,onChange:t,label:n}){return(0,Yt.jsxs)("label",{className:"se-switch","aria-label":n,children:[(0,Yt.jsx)("input",{type:"checkbox",checked:e,onChange:i=>t(i.target.checked)}),(0,Yt.jsx)("span",{className:"se-switchTrack",children:(0,Yt.jsx)("span",{className:"se-switchThumb"})})]})}var Lp=require("react");var Jc=["front","back","double"],Qc=["normal","additive"];var ed=require("react/jsx-runtime");function lr({panelKey:e,title:t,tooltip:n,toggleLabel:i,controls:r,children:a,requiredTier:o}){let{openMaterialPanels:s,materialPanelEnabled:c,onToggleMaterialPanel:l,onSetMaterialPanelState:u}=r,d=o?.locked??!1;return(0,ed.jsx)(mv,{title:t,tooltip:n,disabled:d||!c[e],open:s[e],onToggle:()=>l(e),trailing:(0,ed.jsx)(fv,{checked:!d&&c[e],onChange:d?()=>{}:h=>u(e,h),label:i??`Toggle ${t}`}),children:d&&o?(0,ed.jsx)(tr,{requiredTier:o.tier,feature:t}):a})}var Ys=require("react"),td=require("react-colorful"),gv=require("lucide-react");var vt=require("react/jsx-runtime");function bn({label:e,value:t,placeholder:n,onChange:i}){let r=(0,Ys.useRef)(null);return(0,vt.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,vt.jsx)("label",{className:"bb-label",children:e}),(0,vt.jsxs)("div",{className:"bb-fileField",children:[(0,vt.jsx)("input",{className:"bb-input bb-fileField-input",placeholder:n,value:t,onChange:a=>{let o=a.target.value;!o&&t&&$d(t),i(o)}}),(0,vt.jsx)("button",{type:"button",className:"bb-fileFieldButton",onClick:()=>r.current?.click(),"aria-label":`Select file for ${e}`,title:`Select file for ${e}`,children:(0,vt.jsx)(gv.FileUp,{size:20})}),(0,vt.jsx)("input",{ref:r,type:"file",accept:"image/png,image/jpeg,image/webp,image/avif",className:"bb-hiddenInput",onChange:a=>{let o=a.target.files?.[0];if(!o)return;let s=ym(o);t&&t!==s&&$d(t),Mm(s,URL.createObjectURL(o)),i(s),a.target.value=""}})]})]})}function Pa({label:e,value:t,fallback:n="#ffffff",onChange:i}){let[r,a]=(0,Ys.useState)(!1),o=t||n,s=(0,Ys.useRef)(null);return(0,vt.jsxs)("div",{className:"bb-field",children:[(0,vt.jsx)("span",{className:"bb-label",children:e}),(0,vt.jsx)("div",{className:"se-fieldInline",children:(0,vt.jsx)("span",{ref:s,style:{display:"inline-flex"},children:(0,vt.jsx)(td.HexColorInput,{prefixed:!0,className:"se-swatch",onClick:()=>a(c=>!c),style:{background:o,color:_o(o)},color:o,onChange:i})})}),r?(0,vt.jsx)(_p,{anchorRef:s,onClose:()=>a(!1),children:(0,vt.jsx)(td.HexColorPicker,{color:o,onChange:i})}):null]})}function $s({label:e,checked:t,onChange:n}){return(0,vt.jsxs)("label",{className:"bb-checkbox",children:[(0,vt.jsx)("input",{type:"checkbox",checked:t,onChange:i=>n(i.target.checked)}),e]})}function bv({label:e,value:t,min:n,max:i,step:r,placeholder:a,onChange:o}){return(0,vt.jsxs)("div",{className:"bb-field",children:[(0,vt.jsx)("label",{className:"bb-label",children:e}),(0,vt.jsx)("input",{className:"bb-input",type:"number",min:n,max:i,step:r,placeholder:a,value:t??"",onChange:s=>o(s.target.value===""?void 0:Number(s.target.value))})]})}function Mo({label:e,value:t,options:n,onChange:i}){return(0,vt.jsxs)("div",{className:"bb-field",children:[(0,vt.jsx)("label",{className:"bb-label",children:e}),(0,vt.jsx)("select",{className:"bb-select",value:t,onChange:r=>i(r.target.value),children:n.map(r=>(0,vt.jsx)("option",{value:r,children:r},r))})]})}function $t({label:e,value:t,min:n,max:i,step:r,onChange:a}){return(0,vt.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,vt.jsx)("label",{className:"bb-label",children:e}),(0,vt.jsxs)("div",{className:"bb-sliderField",children:[(0,vt.jsx)("input",{className:`bb-slider ${t===void 0?"bb-slider--unset":""}`,type:"range",min:n,max:i,step:r,value:t??n,onChange:s=>a(Number(s.target.value))}),(0,vt.jsx)("input",{className:"bb-input bb-input--compact",type:"number",min:n,max:i,step:r,value:t??"",onChange:s=>a(s.target.value===""?void 0:Number(s.target.value))})]})]})}var Z=require("react/jsx-runtime");function vv({selectedItem:e,selectedMaterial:t,pbrWorkflow:n,onPbrWorkflowChange:i,openMaterialPanels:r,materialPanelEnabled:a,onToggleMaterialPanel:o,onSetMaterialPanelState:s,updateSelectedMaterial:c,setSelectedTexturePath:l}){let u={openMaterialPanels:r,materialPanelEnabled:a,onToggleMaterialPanel:o,onSetMaterialPanelState:s},{tier:d}=Cr(),h=Mi(d,"starter"),f={tier:"starter",locked:!h},[g,x]=(0,Lp.useState)("roughness"),[P,y]=(0,Lp.useState)("factor");return(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(lr,{panelKey:"pbr",title:"PBR Maps",tooltip:"Controls the base color and workflow used for physically based shading.",controls:u,children:h?(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(Mo,{label:"Workflow",value:n,options:["metalness","specular"],onChange:i}),(0,Z.jsx)("div",{className:"bb-field bb-field--full",children:(0,Z.jsx)("p",{className:"bb-note",style:{margin:0},children:n==="metalness"?"Metalness workflow maps directly to the underlying physical material.":"Specular workflow exposes the same physical material with non-metal specular controls; it does not switch to a separate spec/gloss shader."})}),(0,Z.jsx)(bn,{label:n==="specular"?"Albedo texture path":"Base color texture path",placeholder:"materials/oak-wood.jpg",value:t?.texture?.path??"",onChange:p=>l(e,"texture",p)}),(0,Z.jsx)(Pa,{label:n==="specular"?"Albedo color":"Base color",value:t?.baseColor??"#ffffff",onChange:p=>c(e,m=>({...m,baseColor:p}))}),n==="metalness"?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)($t,{label:"Metalness",value:t?.metalness,min:0,max:1,step:.01,onChange:p=>c(e,m=>({...m,metalness:p}))}),(0,Z.jsx)(bn,{label:"Metalness map path",placeholder:"materials/body-metalness.jpg",value:t?.metalnessMap?.path??"",onChange:p=>l(e,"metalnessMap",p)})]}):(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)($t,{label:"Specular intensity",value:t?.specularIntensity,min:0,max:1,step:.01,onChange:p=>c(e,m=>({...m,specularIntensity:p}))}),(0,Z.jsx)(Pa,{label:"Specular color",value:t?.specularColor??"#ffffff",onChange:p=>c(e,m=>({...m,specularColor:p}))}),(0,Z.jsx)(bn,{label:"Specular intensity map path",placeholder:"materials/body-specular-intensity.jpg",value:t?.specularIntensityMap?.path??"",onChange:p=>l(e,"specularIntensityMap",p)}),(0,Z.jsx)(bn,{label:"Specular color map path",placeholder:"materials/body-specular-color.jpg",value:t?.specularColorMap?.path??"",onChange:p=>l(e,"specularColorMap",p)})]}),(0,Z.jsx)($t,{label:"Specular F0 / reflectivity",value:t?.reflectivity,min:0,max:1,step:.01,onChange:p=>c(e,m=>({...m,reflectivity:p}))})]}):(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(Pa,{label:"Base color",value:t?.baseColor??"#ffffff",onChange:p=>c(e,m=>({...m,baseColor:p}))}),(0,Z.jsx)($t,{label:"Metalness",value:t?.metalness,min:0,max:1,step:.01,onChange:p=>c(e,m=>({...m,metalness:p}))}),(0,Z.jsx)("div",{className:"bb-field bb-field--full",children:(0,Z.jsx)(tr,{requiredTier:"starter",feature:"Texture maps, the specular workflow, and reflectivity"})})]})}),(0,Z.jsx)(lr,{panelKey:"roughness",requiredTier:f,title:"Roughness / Glossiness",tooltip:"Adjusts how matte or shiny the surface appears.",toggleLabel:"Toggle Roughness and Glossiness",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(Mo,{label:"Mode",value:g,options:["roughness","glossiness"],onChange:x}),(0,Z.jsx)("div",{className:"bb-field bb-field--full",children:(0,Z.jsx)("p",{className:"bb-note",style:{margin:0},children:g==="roughness"?"Roughness: 0 is glossy, 1 is matte.":"Glossiness is the inverse of roughness (glossiness = 1 \u2212 roughness)"})}),g==="roughness"?(0,Z.jsx)($t,{label:"Roughness",value:t?.roughness,min:0,max:1,step:.01,onChange:p=>c(e,m=>({...m,roughness:p}))}):(0,Z.jsx)($t,{label:"Glossiness",value:t?.roughness===void 0?void 0:1-t.roughness,min:0,max:1,step:.01,onChange:p=>c(e,m=>({...m,roughness:p===void 0?void 0:1-p}))}),(0,Z.jsx)(bn,{label:g==="glossiness"?"Glossiness map path (applied as roughness)":"Roughness map path",placeholder:"materials/body-roughness.jpg",value:t?.roughnessMap?.path??"",onChange:p=>l(e,"roughnessMap",p)})]})}),(0,Z.jsx)(lr,{panelKey:"emission",requiredTier:f,title:"Emission",tooltip:"Makes the material self-illuminated with emissive color and intensity.",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(Pa,{label:"Emissive color",value:t?.emissive??"#000000",fallback:"#000000",onChange:p=>c(e,m=>({...m,emissive:p}))}),(0,Z.jsx)($t,{label:"Emissive intensity",value:t?.emissiveIntensity,min:0,max:10,step:.1,onChange:p=>c(e,m=>({...m,emissiveIntensity:p}))}),(0,Z.jsx)(bn,{label:"Emissive map path",placeholder:"materials/body-emissive.jpg",value:t?.emissiveMap?.path??"",onChange:p=>l(e,"emissiveMap",p)})]})}),(0,Z.jsx)(lr,{panelKey:"opacity",requiredTier:f,title:"Opacity",tooltip:"Controls transparency, alpha testing, and blending behavior.",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)($t,{label:"Opacity",value:t?.opacity,min:0,max:1,step:.01,onChange:p=>c(e,m=>({...m,opacity:p}))}),(0,Z.jsx)($t,{label:"Alpha test",value:t?.alphaTest,min:0,max:1,step:.01,onChange:p=>c(e,m=>({...m,alphaTest:p}))}),(0,Z.jsx)(bn,{label:"Alpha map path",placeholder:"materials/body-alpha.png",value:t?.alphaMap?.path??"",onChange:p=>l(e,"alphaMap",p)}),(0,Z.jsx)(Mo,{label:"Blending mode",value:t?.blendingMode??"normal",options:Qc,onChange:p=>c(e,m=>({...m,blendingMode:p}))}),(0,Z.jsxs)("div",{className:"bb-field",children:[(0,Z.jsx)("label",{className:"bb-label",children:"Alpha hash"}),(0,Z.jsx)("div",{className:"bb-checkboxRow",children:(0,Z.jsx)($s,{label:"Use alpha hash",checked:t?.alphaHash??!1,onChange:p=>c(e,m=>({...m,alphaHash:p}))})})]}),(0,Z.jsxs)("div",{className:"bb-field",children:[(0,Z.jsx)("label",{className:"bb-label",children:"Dithering"}),(0,Z.jsx)("div",{className:"bb-checkboxRow",children:(0,Z.jsx)($s,{label:"Use dithering",checked:t?.dithering??!1,onChange:p=>c(e,m=>({...m,dithering:p}))})})]})]})}),(0,Z.jsxs)(lr,{panelKey:"normalBump",requiredTier:f,title:"Normal & Bump",tooltip:"Adds surface detail without changing the actual mesh shape.",toggleLabel:"Toggle Normal and Bump",controls:u,children:[(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(bn,{label:"Normal map path",placeholder:"materials/body-normal.jpg",value:t?.normalMap?.path??"",onChange:p=>l(e,"normalMap",p)}),(0,Z.jsx)($t,{label:"Normal scale",value:t?.normalScale,min:0,max:5,step:.01,onChange:p=>c(e,m=>({...m,normalScale:p}))}),(0,Z.jsx)(bn,{label:"Bump map path",placeholder:"materials/body-bump.jpg",value:t?.bumpMap?.path??"",onChange:p=>l(e,"bumpMap",p)}),(0,Z.jsx)($t,{label:"Bump scale",value:t?.bumpScale,min:0,max:5,step:.01,onChange:p=>c(e,m=>({...m,bumpScale:p}))})]}),(0,Z.jsx)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:(0,Z.jsx)($s,{label:"Flip normal Y",checked:t?.flipNormalY??!1,onChange:p=>c(e,m=>({...m,flipNormalY:p}))})})]}),(0,Z.jsx)(lr,{panelKey:"displacement",requiredTier:f,title:"Displacement",tooltip:"Offsets geometry using a texture to create real surface height.",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(bn,{label:"Displacement map path",placeholder:"materials/body-displacement.jpg",value:t?.displacementMap?.path??"",onChange:p=>l(e,"displacementMap",p)}),(0,Z.jsx)($t,{label:"Displacement scale",value:t?.displacementScale,min:-5,max:5,step:.01,onChange:p=>c(e,m=>({...m,displacementScale:p}))}),(0,Z.jsx)($t,{label:"Displacement bias",value:t?.displacementBias,min:-5,max:5,step:.01,onChange:p=>c(e,m=>({...m,displacementBias:p}))})]})}),(0,Z.jsx)(lr,{panelKey:"ao",requiredTier:f,title:"Ambient Occlusion",tooltip:"Darkens creases and contact areas to add depth.",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(bn,{label:"AO map path",placeholder:"materials/body-ao.jpg",value:t?.aoMap?.path??"",onChange:p=>l(e,"aoMap",p)}),(0,Z.jsx)($t,{label:"AO intensity",value:t?.aoMapIntensity,min:0,max:5,step:.01,onChange:p=>c(e,m=>({...m,aoMapIntensity:p}))})]})}),(0,Z.jsxs)(lr,{panelKey:"clearcoat",requiredTier:f,title:"Clearcoat",tooltip:"Adds a glossy protective layer on top of the base material.",controls:u,children:[(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(bn,{label:"Clearcoat map path",placeholder:"materials/body-clearcoat.jpg",value:t?.clearcoatMap?.path??"",onChange:p=>l(e,"clearcoatMap",p)}),(0,Z.jsx)($t,{label:"Clearcoat",value:t?.clearcoat,min:0,max:1,step:.01,onChange:p=>c(e,m=>({...m,clearcoat:p}))}),(0,Z.jsx)(bn,{label:"Clearcoat roughness map path",placeholder:"materials/body-clearcoat-roughness.jpg",value:t?.clearcoatRoughnessMap?.path??"",onChange:p=>l(e,"clearcoatRoughnessMap",p)}),(0,Z.jsx)($t,{label:"Clearcoat roughness",value:t?.clearcoatRoughness,min:0,max:1,step:.01,onChange:p=>c(e,m=>({...m,clearcoatRoughness:p}))}),(0,Z.jsx)(bn,{label:"Clearcoat normal map path",placeholder:"materials/body-clearcoat-normal.jpg",value:t?.clearcoatNormalMap?.path??"",onChange:p=>l(e,"clearcoatNormalMap",p)}),(0,Z.jsx)($t,{label:"Clearcoat normal scale",value:t?.clearcoatNormalScale,min:0,max:5,step:.01,onChange:p=>c(e,m=>({...m,clearcoatNormalScale:p}))})]}),(0,Z.jsx)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:(0,Z.jsx)($s,{label:"Flip clearcoat normal Y",checked:t?.flipClearcoatNormalY??!1,onChange:p=>c(e,m=>({...m,flipClearcoatNormalY:p}))})})]}),(0,Z.jsx)(lr,{panelKey:"sheen",requiredTier:f,title:"Sheen",tooltip:"Adds a soft fabric-like sheen on grazing angles.",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)($t,{label:"Sheen",value:t?.sheen,min:0,max:1,step:.01,onChange:p=>c(e,m=>({...m,sheen:p}))}),(0,Z.jsx)(Pa,{label:"Sheen color",value:t?.sheenColor??"#ffffff",onChange:p=>c(e,m=>({...m,sheenColor:p}))}),(0,Z.jsx)(bn,{label:"Sheen color map path",placeholder:"materials/body-sheen-color.jpg",value:t?.sheenColorMap?.path??"",onChange:p=>l(e,"sheenColorMap",p)}),(0,Z.jsx)($t,{label:"Sheen roughness",value:t?.sheenRoughness,min:0,max:1,step:.01,onChange:p=>c(e,m=>({...m,sheenRoughness:p}))}),(0,Z.jsx)(bn,{label:"Sheen roughness map path",placeholder:"materials/body-sheen-roughness.jpg",value:t?.sheenRoughnessMap?.path??"",onChange:p=>l(e,"sheenRoughnessMap",p)})]})}),(0,Z.jsx)(lr,{panelKey:"anisotropy",requiredTier:f,title:"Anisotropy",tooltip:"Stretches reflections in one direction for brushed or fiber-like surfaces.",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)($t,{label:"Intensity",value:t?.anisotropy,min:0,max:1,step:.01,onChange:p=>c(e,m=>({...m,anisotropy:p}))}),(0,Z.jsx)(Mo,{label:"Tilt direction",value:P,options:["factor","texture"],onChange:y}),P==="factor"?(0,Z.jsx)($t,{label:"Rotation (rad)",value:t?.anisotropyRotation,min:0,max:6.28,step:.01,onChange:p=>c(e,m=>({...m,anisotropyRotation:p}))}):(0,Z.jsx)(bn,{label:"Anisotropy map path",placeholder:"materials/body-anisotropy.jpg",value:t?.anisotropyMap?.path??"",onChange:p=>l(e,"anisotropyMap",p)})]})}),(0,Z.jsx)(lr,{panelKey:"transmission",requiredTier:f,title:"Transmission & Volume",tooltip:"Controls glass-like transmission and how light travels through volume.",toggleLabel:"Toggle Transmission and Volume",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)($t,{label:"Transmission",value:t?.transmission,min:0,max:1,step:.01,onChange:p=>c(e,m=>({...m,transmission:p}))}),(0,Z.jsx)(bn,{label:"Transmission map path",placeholder:"materials/body-transmission.jpg",value:t?.transmissionMap?.path??"",onChange:p=>l(e,"transmissionMap",p)}),(0,Z.jsx)($t,{label:"Thickness",value:t?.thickness,min:0,max:5,step:.01,onChange:p=>c(e,m=>({...m,thickness:p}))}),(0,Z.jsx)(bn,{label:"Thickness map path",placeholder:"materials/body-thickness.jpg",value:t?.thicknessMap?.path??"",onChange:p=>l(e,"thicknessMap",p)}),(0,Z.jsx)(Pa,{label:"Volume tint",value:t?.attenuationColor??"#ffffff",onChange:p=>c(e,m=>({...m,attenuationColor:p}))}),(0,Z.jsx)(bv,{label:"Attenuation distance",value:t?.attenuationDistance,min:0,step:.01,placeholder:"Infinity when unset",onChange:p=>c(e,m=>({...m,attenuationDistance:p}))})]})}),(0,Z.jsx)(lr,{panelKey:"faces",requiredTier:f,title:"Faces Rendering",tooltip:"Chooses which side of the mesh renders and how backfaces are handled.",controls:u,children:(0,Z.jsx)("div",{className:"bb-grid",children:(0,Z.jsx)(Mo,{label:"Side",value:t?.side??"front",options:Jc,onChange:p=>c(e,m=>({...m,side:p}))})})})]})}var xv=[{id:"wood",label:"Wood",swatch:"#8b5a2b",material:{baseColor:"#8b5a2b",metalness:0,roughness:.75,reflectivity:.04}},{id:"brushed-metal",label:"Brushed Metal",swatch:"linear-gradient(135deg, #cfcfcf, #8a8a8a)",material:{baseColor:"#c8c8c8",metalness:1,roughness:.35}},{id:"chrome",label:"Polished Chrome",swatch:"linear-gradient(135deg, #ffffff, #9aa0a6)",material:{baseColor:"#e8e8e8",metalness:1,roughness:.05}},{id:"gold",label:"Gold",swatch:"linear-gradient(135deg, #ffe9a8, #c89b2c)",material:{baseColor:"#e6b325",metalness:1,roughness:.2}},{id:"copper",label:"Copper",swatch:"linear-gradient(135deg, #e3a576, #8a4a26)",material:{baseColor:"#b87333",metalness:1,roughness:.3}},{id:"glass",label:"Glass",swatch:"linear-gradient(135deg, rgba(255,255,255,0.9), rgba(180,210,230,0.4))",material:{baseColor:"#ffffff",metalness:0,roughness:.02,reflectivity:.5,opacity:1,transmission:1,thickness:.5,attenuationColor:"#ffffff",attenuationDistance:1}},{id:"frosted-glass",label:"Frosted Glass",swatch:"linear-gradient(135deg, rgba(255,255,255,0.85), rgba(210,225,235,0.6))",material:{baseColor:"#ffffff",metalness:0,roughness:.4,reflectivity:.3,opacity:1,transmission:.9,thickness:.5}},{id:"plastic-glossy",label:"Glossy Plastic",swatch:"#dadada",material:{baseColor:"#dadada",metalness:0,roughness:.25,reflectivity:.5,clearcoat:.3,clearcoatRoughness:.1}},{id:"plastic-matte",label:"Matte Plastic",swatch:"#9a9a9a",material:{baseColor:"#9a9a9a",metalness:0,roughness:.85,reflectivity:.04}},{id:"rubber",label:"Rubber",swatch:"#1a1a1a",material:{baseColor:"#1a1a1a",metalness:0,roughness:.9,reflectivity:.02}},{id:"fabric",label:"Fabric",swatch:"#9c8a6b",material:{baseColor:"#9c8a6b",metalness:0,roughness:.95,sheen:.4,sheenColor:"#ffffff",sheenRoughness:.6}},{id:"ceramic",label:"Ceramic",swatch:"#f5f5f0",material:{baseColor:"#f5f5f0",metalness:0,roughness:.15,clearcoat:.6,clearcoatRoughness:.1}},{id:"concrete",label:"Concrete",swatch:"#9b9b93",material:{baseColor:"#9b9b93",metalness:0,roughness:.95,reflectivity:.03}}];var Co=require("react/jsx-runtime");function yv({disabled:e,onApply:t}){return(0,Co.jsx)("div",{className:"bb-presetGallery",children:xv.map(n=>(0,Co.jsxs)("button",{type:"button",className:"bb-presetSwatch",disabled:e,title:`Apply ${n.label} preset`,onClick:()=>t(n.material),children:[(0,Co.jsx)("span",{className:"bb-presetSwatchColor",style:{background:n.swatch}}),(0,Co.jsx)("span",{className:"bb-presetSwatchLabel",children:n.label})]},n.id))})}var To=require("react"),$i=require("lucide-react"),Gr=require("react/jsx-runtime");function kp({disabled:e,exporting:t,onExportJson:n,onExportTs:i}){let[r,a]=(0,To.useState)(!1),o=(0,To.useRef)(null);return(0,To.useEffect)(()=>{if(!r)return;let s=c=>{o.current?.contains(c.target)||a(!1)};return window.addEventListener("pointerdown",s),()=>window.removeEventListener("pointerdown",s)},[r]),(0,Gr.jsxs)("div",{className:"bb-exportMenuWrapper",ref:o,children:[(0,Gr.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:e||t,onClick:()=>a(s=>!s),title:"Export",children:[(0,Gr.jsx)($i.Download,{size:14}),t?"Exporting\u2026":"Export",(0,Gr.jsx)($i.ChevronDown,{size:12})]}),r&&(0,Gr.jsxs)("div",{className:"bb-exportMenu",children:[(0,Gr.jsxs)("button",{type:"button",className:"bb-exportMenuItem",onClick:()=>{a(!1),n()},children:[(0,Gr.jsx)($i.FileJson,{size:14}),"JSON"]}),(0,Gr.jsxs)("button",{type:"button",className:"bb-exportMenuItem",onClick:()=>{a(!1),i()},children:[(0,Gr.jsx)($i.FileCode2,{size:14}),"TypeScript"]})]})]})}var Er=require("react/jsx-runtime");function wv({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r,idError:a}){return(0,Er.jsx)(nr,{title:"Identity",open:n,onToggle:i,children:(0,Er.jsxs)("div",{className:"bb-grid",children:[(0,Er.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,Er.jsx)("label",{className:"bb-label",children:"Model Node ID"}),(0,Er.jsx)("span",{className:"bb-note",children:"This is the exact mesh name from the imported model and stays locked."}),(0,Er.jsx)("input",{className:"bb-input bb-readonly",value:t.modelObjectId,readOnly:!0})]}),(0,Er.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,Er.jsx)("label",{className:"bb-label",children:"ID"}),(0,Er.jsx)("input",{className:`bb-input ${a?"bb-input--error":""}`,value:t.id,onChange:o=>r(e,s=>({...s,id:o.target.value}))}),a?(0,Er.jsx)("span",{className:"bb-status bb-status--error",children:a}):null]})]})})}var Ks=require("react");var _v=["other","body","light","wheel","glass","interior","floor","wall","door","furniture","decor","electronics","seat","table","chair","window","sofa","bed","engine","headlight"],Sv=["normal","hidden","selected","disabled"];var Mt=require("react/jsx-runtime");function Mv({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r}){let[a,o]=(0,Ks.useState)(t.group??""),[s,c]=(0,Ks.useState)(t.tags?.join(", ")??"");(0,Ks.useEffect)(()=>{o(t.group??""),c(t.tags?.join(", ")??"")},[e,t.group,t.tags]);let l=()=>{r(e,d=>({...d,group:a.trim()||void 0}))},u=()=>{let d=[...new Set(s.split(",").map(h=>h.trim()).filter(Boolean))];r(e,h=>({...h,tags:d.length>0?d:void 0}))};return(0,Mt.jsxs)(nr,{title:"Basics",open:n,onToggle:i,children:[(0,Mt.jsxs)("div",{className:"bb-grid",children:[(0,Mt.jsxs)("div",{className:"bb-field",children:[(0,Mt.jsx)("label",{className:"bb-label",children:"Label"}),(0,Mt.jsx)("input",{className:"bb-input",value:t.label??"",onChange:d=>r(e,h=>({...h,label:d.target.value}))})]}),(0,Mt.jsxs)("div",{className:"bb-field",children:[(0,Mt.jsx)("label",{className:"bb-label",children:"Type"}),(0,Mt.jsx)("input",{className:"bb-input",list:"binding-type-suggestions",value:t.type,onChange:d=>r(e,h=>({...h,type:d.target.value}))}),(0,Mt.jsx)("datalist",{id:"binding-type-suggestions",children:_v.map(d=>(0,Mt.jsx)("option",{value:d},d))})]}),(0,Mt.jsxs)("div",{className:"bb-field",children:[(0,Mt.jsx)("label",{className:"bb-label",children:"Status"}),(0,Mt.jsx)("select",{className:"bb-select",value:t.status??"normal",onChange:d=>r(e,h=>({...h,status:d.target.value})),children:Sv.map(d=>(0,Mt.jsx)("option",{value:d,children:d},d))})]}),(0,Mt.jsxs)("div",{className:"bb-field",children:[(0,Mt.jsx)("label",{className:"bb-label",children:"Group"}),(0,Mt.jsx)("input",{className:"bb-input",placeholder:"paint",value:a,onChange:d=>o(d.target.value),onBlur:l,onKeyDown:d=>{d.key==="Enter"&&d.currentTarget.blur()}})]}),(0,Mt.jsxs)("div",{className:"bb-field",children:[(0,Mt.jsx)("label",{className:"bb-label",children:"Tags"}),(0,Mt.jsx)("input",{className:"bb-input",placeholder:"exterior, configurable",value:s,onChange:d=>c(d.target.value),onBlur:u,onKeyDown:d=>{d.key==="Enter"&&d.currentTarget.blur()}})]})]}),(0,Mt.jsxs)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:[(0,Mt.jsxs)("label",{className:"bb-checkbox",children:[(0,Mt.jsx)("input",{type:"checkbox",checked:t.selectable??!1,onChange:d=>r(e,h=>({...h,selectable:d.target.checked}))}),"selectable"]}),(0,Mt.jsxs)("label",{className:"bb-checkbox",children:[(0,Mt.jsx)("input",{type:"checkbox",checked:t.hoverable??!1,onChange:d=>r(e,h=>({...h,hoverable:d.target.checked}))}),"hoverable"]}),(0,Mt.jsxs)("label",{className:"bb-checkbox",children:[(0,Mt.jsx)("input",{type:"checkbox",checked:t.visible??!1,onChange:d=>r(e,h=>({...h,visible:d.target.checked}))}),"visible"]})]})]})}var rd=require("react");var Aa=[{id:"change-color",label:"Change Color",handling:"viewer",description:"Opens a color picker docked under the action and commits the result to style.material.baseColor."},{id:"change-material",label:"Change Material",handling:"viewer",description:"Opens the material picker so the viewer can swap the object's texture."},{id:"toggle-visibility",label:"Toggle Visibility",handling:"viewer",description:"Flips the binding's visible flag."},{id:"toggle-light",label:"Toggle Light",handling:"host",description:"Seeded on light bindings. Add declarative effects for useViewerActions, or handle it in onAction."},{id:"change-light-color",label:"Change Light Color",handling:"host",description:"Seeded on light bindings. Add declarative effects for useViewerActions, or handle it in onAction."},{id:"set-brightness",label:"Set Brightness",handling:"host",description:"Seeded on light bindings. Add declarative effects for useViewerActions, or handle it in onAction."}],nd="__custom__";function Zs(e){return Aa.find(t=>t.id===e)}var vR=Aa.filter(e=>e.handling==="viewer").map(e=>e.id),y_=new Set(["","New Action",...Aa.map(e=>e.label)]);function Dp(e){return y_.has(e.trim())}function Cv(e,t){let n=Array.from({length:t.length+1},(i,r)=>r);for(let i=1;i<=e.length;i+=1){let r=[i];for(let a=1;a<=t.length;a+=1){let o=n[a-1]+(e[i-1]===t[a-1]?0:1);r[a]=Math.min(r[a-1]+1,n[a]+1,o)}n=r}return n[t.length]}function Tv(e){if(Zs(e))return null;let t=e.trim().toLowerCase();if(!t)return null;let n=t.replace(/[^a-z0-9]/g,""),i=null;for(let r of Aa){let a=Math.min(Cv(t,r.id),Cv(n,r.id.replace(/[^a-z0-9]/g,"")));(!i||a<i.distance)&&(i={id:r.id,distance:a})}return i&&i.distance<=2?i.id:null}var Je=require("react/jsx-runtime"),Pv=Aa.filter(e=>e.handling==="viewer"),w_=Aa.filter(e=>e.handling==="host");function Av({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r}){let[a,o]=(0,rd.useState)(new Set);(0,rd.useEffect)(()=>{o(new Set)},[e]);let s=t.actions??[],c=(d,h)=>r(e,f=>({...f,actions:(f.actions??[]).map((g,x)=>x===d?h(g):g)})),l=d=>{r(e,h=>({...h,actions:(h.actions??[]).filter((f,g)=>g!==d)})),o(h=>{let f=new Set;return h.forEach(g=>{g<d?f.add(g):g>d&&f.add(g-1)}),f})},u=(d,h)=>o(f=>{let g=new Set(f);return h?g.add(d):g.delete(d),g});return(0,Je.jsxs)(nr,{title:"Actions",open:n,onToggle:i,children:[(0,Je.jsx)("div",{className:"bb-actionList",children:s.map((d,h)=>{let f=Zs(d.id),g=a.has(h)||!f,x=d.id.trim(),P=f?null:Tv(d.id),y=x.length>0&&s.some((p,m)=>m!==h&&p.id.trim()===x);return(0,Je.jsxs)("div",{className:"bb-actionCard",children:[(0,Je.jsxs)("div",{className:"bb-actionCardHeader",children:[(0,Je.jsxs)("div",{className:"bb-actionCardTitle",children:["Action ",h+1]}),(0,Je.jsx)("div",{className:"bb-actionCardMeta",children:d.type})]}),(0,Je.jsxs)("div",{className:"bb-actionGrid",children:[(0,Je.jsxs)("div",{className:"bb-field",children:[(0,Je.jsx)("label",{className:"bb-label",children:"Action ID"}),(0,Je.jsxs)("select",{className:"bb-select",value:g?nd:d.id,onChange:p=>{let m=p.target.value;if(m===nd){u(h,!0);return}u(h,!1);let M=Zs(m);c(h,_=>({..._,id:m,label:M&&Dp(_.label)?M.label:_.label}))},children:[(0,Je.jsx)("optgroup",{label:"Handled by the viewer",children:Pv.map(p=>(0,Je.jsx)("option",{value:p.id,children:p.id},p.id))}),(0,Je.jsx)("optgroup",{label:"Handled by your app",children:w_.map(p=>(0,Je.jsx)("option",{value:p.id,children:p.id},p.id))}),(0,Je.jsx)("option",{value:nd,children:"Custom\u2026"})]})]}),g?(0,Je.jsxs)("div",{className:"bb-field",children:[(0,Je.jsx)("label",{className:"bb-label",children:"Custom action ID"}),(0,Je.jsx)("input",{className:"bb-input",value:d.id,placeholder:"open-datasheet",onChange:p=>{u(h,!0),c(h,m=>({...m,id:p.target.value}))}})]}):null,(0,Je.jsxs)("div",{className:"bb-field",children:[(0,Je.jsx)("label",{className:"bb-label",children:"Label"}),(0,Je.jsx)("input",{className:"bb-input",value:d.label,onChange:p=>c(h,m=>({...m,label:p.target.value}))})]}),f?(0,Je.jsx)("span",{className:"bb-note",children:f.description}):x.length===0?(0,Je.jsx)("span",{className:"bb-note",style:{color:"#fca5a5"},children:"An action ID is required, the button renders but can never be identified in onAction."}):(0,Je.jsxs)("span",{className:"bb-note",style:{color:"#fcd34d"},children:["Unrecognised ID, the viewer has no built-in behavior for it. Add declarative effects and execute them with useViewerActions, or handle it in onAction.",P?(0,Je.jsxs)(Je.Fragment,{children:[" Did you mean ",(0,Je.jsx)("button",{type:"button",className:"bb-linkButton",onClick:()=>{u(h,!1);let p=Zs(P);c(h,m=>({...m,id:P,label:p&&Dp(m.label)?p.label:m.label}))},children:P}),"?"]}):null]}),d.effects?.length?(0,Je.jsxs)("span",{className:"bb-note",children:[d.effects.length," declarative effect",d.effects.length===1?"":"s",", execute with useViewerActions."]}):null,y?(0,Je.jsx)("span",{className:"bb-note",style:{color:"#fcd34d"},children:"Another action on this binding uses the same ID, they will render as two identical buttons."}):null]}),(0,Je.jsx)("div",{className:"bb-actionFooter",children:(0,Je.jsx)("button",{type:"button",className:"bb-button bb-button--ghost bb-actionRemove",onClick:()=>l(h),children:"Remove Action"})})]},h)})}),(0,Je.jsx)("div",{style:{marginTop:10},children:(0,Je.jsx)("button",{type:"button",className:"bb-button",onClick:()=>{let d=Pv.find(h=>!s.some(f=>f.id===h.id));r(e,h=>({...h,actions:[...h.actions??[],{id:d?.id??"",label:d?.label??"New Action",type:"command"}]})),d||u(s.length,!0)},children:"Add Action"})})]})}var id=require("lucide-react");var Ct=require("react/jsx-runtime");function Ev({selectedBinding:e,open:t,onToggle:n,cameraState:i,formattedCameraState:r,savedCameraPosition:a,onSaveCameraPosition:o,onGoToSavedCamera:s,onClearSavedCamera:c,onResetView:l,onFitScene:u}){return(0,Ct.jsxs)(nr,{title:"Camera Position",open:t,onToggle:n,children:[(0,Ct.jsxs)("div",{className:"se-waypointCard bb-cameraWaypoint",children:[(0,Ct.jsx)("span",{className:"bb-cameraLiveBadge",children:"LIVE"}),(0,Ct.jsxs)("div",{className:"se-waypointBody",children:[(0,Ct.jsx)("div",{className:"bb-cameraWaypointLabel",children:"Current view"}),i?(0,Ct.jsxs)(Ct.Fragment,{children:[(0,Ct.jsxs)("div",{className:"se-waypointCoords",children:["pos ",r?.position]}),(0,Ct.jsxs)("div",{className:"se-waypointCoords",children:["look ",r?.target]})]}):(0,Ct.jsx)("div",{className:"se-waypointCoords",children:"Move the camera to see live position"})]})]}),(0,Ct.jsxs)("div",{className:"bb-cameraControls bb-cameraControls--centered",children:[(0,Ct.jsx)("button",{type:"button",className:"bb-button bb-button--primary",onClick:o,disabled:!i,children:"Save"}),(0,Ct.jsx)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:l,children:"Reset View"}),(0,Ct.jsx)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:u,children:"Fit Scene"})]}),a?.position&&a?.target&&(0,Ct.jsxs)("div",{className:"se-waypointCard bb-cameraWaypoint",children:[(0,Ct.jsx)("span",{className:"bb-cameraSavedBadge",children:"SAVED"}),(0,Ct.jsxs)("div",{className:"se-waypointBody",children:[(0,Ct.jsxs)("div",{className:"bb-cameraWaypointLabel",children:["For ",e.label]}),(0,Ct.jsxs)("div",{className:"se-waypointCoords",children:["pos [",a.position.map(d=>d.toFixed(1)).join(", "),"]"]}),(0,Ct.jsxs)("div",{className:"se-waypointCoords",children:["look [",a.target.map(d=>d.toFixed(1)).join(", "),"]"]})]}),(0,Ct.jsxs)("div",{className:"se-waypointActions",children:[(0,Ct.jsx)("button",{className:"se-waypointAction",onClick:s,title:"Fly camera to the saved position",children:(0,Ct.jsx)(id.MapPin,{size:15})}),(0,Ct.jsx)("button",{className:"se-waypointAction se-waypointAction--delete",onClick:c,title:"Delete saved position",children:(0,Ct.jsx)(id.Trash2,{size:15})})]})]}),(0,Ct.jsx)("span",{className:"bb-note",children:'Tip: Position the camera how you want, then click "Save" to store this position for the selected object. The camera position updates in real-time as you navigate.'})]})}var Po=require("react"),ad=require("lucide-react");var $e=require("react/jsx-runtime"),Rv=["X","Y","Z"];var __=.1;function Bp(e){let t=e%360;return t<0?t+360:t}function Lv(e){return Bp(e*180/Math.PI)}function kv(e){return e*Math.PI/180}function S_(e,t,n){let i=[...e],r=Lv(e[t]);return i[t]=kv(Bp(r+n)),i}function Dv({value:e,min:t=-1/0,max:n=1/0,step:i=.1,disabled:r=!1,onChange:a,formatValue:o=l=>Number(l.toFixed(3)),ariaLabel:s,className:c}){let l=o(e),[u,d]=(0,Po.useState)(String(l)),h=(0,Po.useRef)(!1);return(0,Po.useLayoutEffect)(()=>{h.current||d(String(l))},[l]),(0,$e.jsx)("input",{type:"number",className:c,step:i,min:t===-1/0?void 0:t,max:n===1/0?void 0:n,value:u,disabled:r,"aria-label":s,onFocus:()=>{h.current=!0},onChange:f=>{let g=f.target.value;if(d(g),g===""||g==="-")return;let x=Number(g);if(Number.isFinite(x)){let P=Math.max(t,Math.min(n,x));a(P)}},onBlur:()=>{h.current=!1,d(String(o(e)))}})}function M_({value:e,min:t=-1/0,max:n=1/0,step:i=.1,disabled:r=!1,onChange:a,formatValue:o=c=>Number(c.toFixed(3)),label:s}){return(0,$e.jsx)("div",{className:"bb-transformAxesGrid",children:Rv.map((c,l)=>(0,$e.jsxs)("div",{className:"bb-transformAxis",children:[(0,$e.jsx)("span",{className:"se-axisStepperLabel bb-transformAxisLabel",children:c}),(0,$e.jsx)("div",{className:"bb-transformAxisControl",children:(0,$e.jsx)(Dv,{className:"se-numberInput bb-transformNumberInput",step:i,min:t,max:n,value:e[l],disabled:r,formatValue:o,ariaLabel:`${c} ${s?.toLowerCase()||""}`,onChange:u=>{let d=[...e];d[l]=u,a(d)}})})]},c))})}function Bv({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r,moveModeEnabled:a,onToggleMoveMode:o,transformSpace:s,onTransformSpaceChange:c,originalTransform:l}){let u=t.transform?.rotation??l?.rotation??[0,0,0],d=t.transform?.position??l?.position??[0,0,0],h=(p,m)=>{let M=p.transform?.rotation??l?.rotation??[0,0,0],_=p.transform?.position??l?.position??[0,0,0],T=p.transform?.scale??l?.scale??[1,1,1],E=l?.pivotLocal??[0,0,0],b=Tb(_,M,m,T,E,l?.rotationOrder??"XYZ");return{...p,transform:{...p.transform,position:b,rotation:m}}},f=(p,m)=>{e&&r(e,M=>{let _=M.transform?.rotation??l?.rotation??[0,0,0],T=S_(_,p,m);return h(M,T)})},g=(p,m)=>{e&&r(e,M=>{let T=[...M.transform?.rotation??l?.rotation??[0,0,0]];return T[p]=kv(Bp(m)),h(M,T)})},x=(p,m)=>{e&&r(e,M=>{let T=[...M.transform?.position??l?.position??[0,0,0]];return T[p]=m,{...M,transform:{...M.transform,position:T}}})},P=(p,m)=>{e&&x(p,d[p]+m)},y=()=>{!e||!l||r(e,p=>{let m={...p.transform};return delete m.position,delete m.rotation,{...p,transform:Object.keys(m).length>0?m:void 0}})};return(0,$e.jsxs)(nr,{title:"Move & Rotate",open:n,onToggle:i,tooltip:"Enable the transform gizmo to move or rotate the selected mesh on any axis. Rotation uses the object's visible center while exported position and rotation remain local GLTF transforms.",children:[(0,$e.jsxs)("div",{className:"se-field",children:[(0,$e.jsxs)("div",{className:"se-fieldLabel",children:[(0,$e.jsxs)("span",{children:[(0,$e.jsx)(ad.Move3d,{size:14,style:{marginRight:6,verticalAlign:"-2px"}}),"Transform gizmo"]}),(0,$e.jsxs)("label",{className:"se-switch","aria-label":"Toggle move mode",children:[(0,$e.jsx)("input",{type:"checkbox",checked:a,onChange:p=>o(p.target.checked)}),(0,$e.jsx)("span",{className:"se-switchTrack",children:(0,$e.jsx)("span",{className:"se-switchThumb"})})]})]}),(0,$e.jsx)("span",{className:"bb-note",children:"Select a mesh \xB7 drag the colored arrows or planes to move"})]}),(0,$e.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,$e.jsx)("div",{className:"se-fieldLabel",children:(0,$e.jsx)("span",{children:"Axis space"})}),(0,$e.jsx)("div",{className:"se-segmentedControl",children:["world","local"].map(p=>(0,$e.jsx)("button",{type:"button",className:`se-segmentedOption ${s===p?"se-segmentedOption--active":""}`,onClick:()=>c(p),children:p},p))})]}),(0,$e.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,$e.jsx)("div",{className:"se-fieldLabel",children:(0,$e.jsx)("span",{children:"Rotation (degrees)"})}),(0,$e.jsx)("div",{className:"bb-transformAxesGrid",children:Rv.map((p,m)=>{let M=Math.round(Lv(u[m]));return(0,$e.jsxs)("div",{className:"bb-transformAxis",children:[(0,$e.jsx)("span",{className:"se-axisStepperLabel bb-transformAxisLabel",children:p}),(0,$e.jsx)("div",{className:"bb-transformAxisControl",children:(0,$e.jsx)(Dv,{className:"se-numberInput bb-transformNumberInput",step:1,min:0,max:359,value:M,disabled:!e,formatValue:_=>Math.round(_),ariaLabel:`${p} rotation in degrees`,onChange:_=>g(m,_)})})]},p)})})]}),(0,$e.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,$e.jsx)("div",{className:"se-fieldLabel",children:(0,$e.jsx)("span",{children:"Position"})}),(0,$e.jsx)(M_,{value:d,min:-1/0,max:1/0,step:__,disabled:!e,label:"position",onChange:p=>{e&&r(e,m=>({...m,transform:{...m.transform,position:p}}))}})]}),(0,$e.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",style:{marginTop:10,display:"inline-flex",alignItems:"center",gap:6},disabled:!e||!l,onClick:y,title:"Restore this node's position and rotation to what they were in the original model",children:[(0,$e.jsx)(ad.RotateCcw,{size:14}),"Restore original position & rotation"]})]})}var Ea=require("react");function C_(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 Np(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 T_(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 P_(e){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"},{id:"change-material",label:"Change Material",type:"command"},{id:"toggle-visibility",label:"Toggle Visibility",type:"command"}]}function A_(e){let t=T_(e);return{id:C_(e),modelObjectId:e,type:t,label:Np(e),status:"normal",selectable:!0,hoverable:!0,visible:!0,style:{},actions:P_(t),metrics:{},metadata:{}}}function od(e){return Object.fromEntries(e.map(t=>[t,A_(t)]))}function Nv(e){let{nodesById:t}=eo(e),n=[];for(let[i,r]of Object.entries(t)){let a=r;a.isMesh&&a.geometry&&r.name&&n.push(i)}return n.sort((i,r)=>i.localeCompare(r))}var Cn=require("react/jsx-runtime"),Ov=(0,Ea.memo)(E_);function E_({bindings:e,selectedItem:t,onSelect:n,onHover:i,isOpen:r=!0,onToggle:a}){let[o,s]=(0,Ea.useState)(""),c=(0,Ea.useMemo)(()=>Object.keys(e),[e]),l=(0,Ea.useMemo)(()=>{let u=o.trim().toLowerCase();return u?c.filter(d=>{let h=e[d];return d.toLowerCase().includes(u)||h.label?.toLowerCase().includes(u)||h.type.toLowerCase().includes(u)}):c},[e,c,o]);return(0,Cn.jsxs)("aside",{className:`bb-sidebar bb-sidebar--right ${r?"":"bb-sidebar--collapsed"}`,children:[(0,Cn.jsxs)("div",{className:"bb-header bb-header--sidebar",children:[!r&&(0,Cn.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>a?.(!0),"aria-label":"Open scene nodes sidebar",title:"Open scene nodes",children:"\u2190"}),r&&(0,Cn.jsxs)(Cn.Fragment,{children:[(0,Cn.jsxs)("div",{children:[(0,Cn.jsx)("div",{className:"bb-sectionKicker",children:"Scene Nodes"}),(0,Cn.jsxs)("div",{className:"bb-sectionHeading",children:[l.length," visible entries"]})]}),(0,Cn.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>a?.(!1),"aria-label":"Close scene nodes sidebar",title:"Close scene nodes",children:"\u2192"})]})]}),r&&(0,Cn.jsxs)("section",{className:"bb-nodeList",children:[(0,Cn.jsx)("div",{className:"bb-search",children:(0,Cn.jsx)("input",{className:"bb-input",placeholder:"Search nodes, labels, or types",value:o,onChange:u=>s(u.target.value)})}),(0,Cn.jsx)("div",{className:"bb-nodeItems",children:l.map(u=>{let d=e[u];return(0,Cn.jsxs)("button",{type:"button",className:`bb-nodeButton ${u===t?"bb-nodeButton--active":""}`,onClick:()=>n(u),onMouseEnter:()=>i?.(u),onMouseLeave:()=>i?.(null),children:[(0,Cn.jsx)("span",{className:"bb-nodeName",children:u}),(0,Cn.jsxs)("span",{className:"bb-nodeMeta",children:[d.type,d.label===Np(u)?"":d.label||"\xB7 Untitled"]})]},u)})})]})]})}var Ki=require("react/jsx-runtime");function Op({title:e,label:t,open:n,onToggle:i,draft:r,error:a,example:o,onDraftChange:s,onCommit:c}){return(0,Ki.jsx)(nr,{title:e,open:n,onToggle:i,children:(0,Ki.jsxs)("div",{className:"bb-field",children:[(0,Ki.jsx)("label",{className:"bb-label",children:t}),(0,Ki.jsx)("textarea",{className:"bb-textarea",value:r,onChange:l=>s(l.target.value),onBlur:c}),a?(0,Ki.jsx)("span",{className:"bb-status bb-status--error",children:a}):(0,Ki.jsxs)("span",{className:"bb-note",children:["Use a JSON object like ",o,"."]})]})})}function Iv(e,t){let n=new Map(e.animations.clips.map(a=>[a.sourceName,a])),i=t.map(({sourceName:a})=>n.get(a)??{sourceName:a,displayName:a,hidden:!1,loopMode:"repeat",speed:1}),r=e.animations.autoplayClip&&i.some(a=>a.sourceName===e.animations.autoplayClip&&!a.hidden)?e.animations.autoplayClip:null;return{clips:i,autoplayClip:r}}var Ci=require("react"),R_=100;function L_(e,t){switch(t.type){case"set":{let n=typeof t.updater=="function"?t.updater(e.present):t.updater;return n===e.present?e:t.coalesce?{...e,present:n,future:[]}:{past:[...e.past,e.present].slice(-R_),present:n,future:[]}}case"undo":{if(e.past.length===0)return e;let n=e.past[e.past.length-1];return{past:e.past.slice(0,-1),present:n,future:[e.present,...e.future]}}case"redo":{if(e.future.length===0)return e;let[n,...i]=e.future;return{past:[...e.past,e.present],present:n,future:i}}case"reset":return{past:[],present:t.value,future:[]}}}function Ip(e,t=600){let[n,i]=(0,Ci.useReducer)(L_,{past:[],present:e,future:[]}),r=(0,Ci.useRef)(0),a=(0,Ci.useCallback)(l=>{let u=Date.now(),d=u-r.current<t;r.current=u,i({type:"set",updater:l,coalesce:d})},[t]),o=(0,Ci.useCallback)(()=>{r.current=0,i({type:"undo"})},[]),s=(0,Ci.useCallback)(()=>{r.current=0,i({type:"redo"})},[]),c=(0,Ci.useCallback)(l=>{r.current=0,i({type:"reset",value:l})},[]);return{value:n.present,setValue:a,undo:o,redo:s,reset:c,canUndo:n.past.length>0,canRedo:n.future.length>0}}var jv=require("fflate");function zv(e){return JSON.stringify(e,null,2)}function Uv(e){return['import { defineObjectBindings } from "@liveroom-tech/react-immersive/utils";',"",`export const objectBindings = defineObjectBindings(${JSON.stringify(e,null,2)});`,""].join(`
3687
+ `}))}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:i,_target:r}=this;Ls.min.copy(t),Ls.max.copy(t),Ls.max.x+=1,Ls.max.y+=1,i.initRenderTarget(r),i.copyTextureToTexture(e,r.texture,Ls,n,0)}},Fi=new class{constructor(){let e=null;Object.getOwnPropertyNames(vg.prototype).forEach(t=>{t!=="constructor"&&(this[t]=(...n)=>(e||(e=new vg),e[t](...n)))})}},xg=new Q.Vector2,yg=new Q.Vector2,wg=new Q.Vector2;function L1(e,t){return t===0?e.getAttribute("uv"):e.getAttribute(`uv${t}`)}function kg(e,t,n=[,,,]){let i=3*t,r=3*t+1,a=3*t+2;return e.index&&(i=e.index.getX(i),r=e.index.getX(r),a=e.index.getX(a)),n[0]=i,n[1]=r,n[2]=a,n}function Dg(e,t,n,i,r){let[a,o,s]=i,c=L1(e,t);xg.fromBufferAttribute(c,a),yg.fromBufferAttribute(c,o),wg.fromBufferAttribute(c,s),r.set(0,0,0).addScaledVector(xg,n.x).addScaledVector(yg,n.y).addScaledVector(wg,n.z)}function Bg(e,t,n,i){let r=e.x-Math.floor(e.x),a=e.y-Math.floor(e.y),o=Math.floor(r*t%t),s=Math.floor(a*n%n);return i.set(o,s),i}var _g=new Q.Vector2,Sg=new Q.Vector2,Mg=new Q.Vector2,k1=class extends Cc{constructor(e,t,n=null){super(e,t,n),this.channels=Rn(n,"channels",[0]),this.index=Rn(n,"index",null),this.texCoord=Rn(n,"texCoord",null),this.valueLength=parseInt(this.type.replace(/[^0-9]/g,""))||1}readDataFromBuffer(e,t,n=null){let i=this.type;if(i==="BOOLEAN"||i==="STRING")throw Error("PropertyTextureAccessor: BOOLEAN and STRING types not supported.");return Lg(e,t*this.valueLength,i,n)}},D1=class extends $u{constructor(...e){super(...e),this.isPropertyTextureAccessor=!0,this._asyncRead=!1,this._initProperties(k1)}getData(e,t,n,i={}){let r=this.properties;Sc(r,i);let a=Object.keys(r),o=a.map(s=>i[s]);return this.getPropertyValuesAtTexel(a,e,t,n,o),a.forEach((s,c)=>i[s]=o[c]),i}async getDataAsync(e,t,n,i={}){let r=this.properties;Sc(r,i);let a=Object.keys(r),o=a.map(s=>i[s]);return await this.getPropertyValuesAtTexelAsync(a,e,t,n,o),a.forEach((s,c)=>i[s]=o[c]),i}getPropertyValuesAtTexelAsync(...e){this._asyncRead=!0;let t=this.getPropertyValuesAtTexel(...e);return this._asyncRead=!1,t}getPropertyValuesAtTexel(e,t,n,i,r=[]){for(;r.length<e.length;)r.push(null);r.length=e.length,Fi.increaseSizeTo(r.length);let a=this.data,o=this.definition.properties,s=this.properties,c=kg(i,t);for(let d=0,h=e.length;d<h;d++){let f=e[d];if(!o[f])continue;let g=s[f],x=a[g.index];Dg(i,g.texCoord,n,c,_g),Bg(_g,x.image.width,x.image.height,Sg),Mg.set(d,0),Fi.renderPixelToTarget(x,Sg,Mg)}let l=new Uint8Array(e.length*4);if(this._asyncRead)return Fi.readDataAsync(l).then(()=>(u.call(this),r));return Fi.readData(l),u.call(this),r;function u(){for(let d=0,h=e.length;d<h;d++){let f=e[d],g=s[f],x=g.type;if(r[d]=Yu(g,r[d]),!g)throw Error("PropertyTextureAccessor: Requested property does not exist.");if(!o[f]){r[d]=g.resolveDefault(r);continue}let P=g.valueLength*(g.count||1),y=g.channels.map(M=>l[4*d+M]),p=g.componentType,m=new(Ds(p,x))(P);if(new Uint8Array(m.buffer).set(y),g.array){let M=r[d];for(let _=0,T=M.length;_<T;_++)M[_]=g.readDataFromBuffer(m,_,M[_])}else r[d]=g.readDataFromBuffer(m,0,r[d]);r[d]=g.adjustValueScaleOffset(r[d]),r[d]=g.resolveEnumsToStrings(r[d]),r[d]=g.resolveNoData(r[d])}}}dispose(){this.data.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},Wu=class{constructor(e,t,n,i=null,r=null){let{schema:a,propertyTables:o=[],propertyTextures:s=[],propertyAttributes:c=[]}=e,{enums:l,classes:u}=a,d=o.map(g=>new R1(g,u,l,n)),h=[],f=[];i&&(i.propertyTextures&&(h=i.propertyTextures.map(g=>new D1(s[g],u,l,t))),i.propertyAttributes&&(f=i.propertyAttributes.map(g=>new A1(c[g],u,l)))),this.schema=a,this.tableAccessors=d,this.textureAccessors=h,this.attributeAccessors=f,this.object=r,this.textures=t,this.nodeMetadata=i}getPropertyTableData(e,t,n=null){if(!Array.isArray(e))n||(n={}),n=this.tableAccessors[e].getData(t,n);else{n||(n=[]);let i=Math.min(e.length,t.length);n.length=i;for(let r=0;r<i;r++){let a=this.tableAccessors[e[r]];n[r]=a.getData(t[r],n[r])}}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 i=this.textureAccessors;n.length=i.length;for(let r=0;r<i.length;r++)n[r]=i[r].getData(e,t,this.object.geometry,n[r]);return n}async getPropertyTextureDataAsync(e,t,n=[]){let i=this.textureAccessors;n.length=i.length;let r=[];for(let a=0;a<i.length;a++){let o=i[a].getDataAsync(e,t,this.object.geometry,n[a]).then(s=>{n[a]=s});r.push(o)}return await Promise.all(r),n}getPropertyTextureInfo(){return this.textureAccessors}getPropertyAttributeData(e,t=[]){let n=this.attributeAccessors;t.length=n.length;for(let i=0;i<n.length;i++)t[i]=n[i].getData(e,this.object.geometry,t[i]);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())}},ks="EXT_structural_metadata";function B1(e,t=[]){let n=e.json.textures?.length||0,i=Array(n).fill(null);return t.forEach(({properties:r})=>{for(let a in r){let{index:o}=r[a];i[o]===null&&(i[o]=e.loadTexture(o))}}),Promise.all(i)}function N1(e,t=[]){let n=e.json.bufferViews?.length||0,i=Array(n).fill(null);return t.forEach(({properties:r})=>{for(let a in r){let{values:o,arrayOffsets:s,stringOffsets:c}=r[a];i[o]===null&&(i[o]=e.getDependency("bufferView",o)),i[s]===null&&(i[s]=e.getDependency("bufferView",s)),i[c]===null&&(i[c]=e.getDependency("bufferView",c))}}),Promise.all(i)}var Ng=class{constructor(e){this.parser=e,this.name=ks}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(ks))return;let i=null,r=t.json.extensions[ks];if(r.schemaUri){let{manager:c,path:l,requestHeader:u,crossOrigin:d}=t.options,h=new URL(r.schemaUri,l).toString(),f=new Q.FileLoader(c);f.setCrossOrigin(d),f.setResponseType("json"),f.setRequestHeader(u),i=f.loadAsync(h).then(g=>{r={...r,schema:g}})}let[a,o]=await Promise.all([B1(t,r.propertyTextures),N1(t,r.propertyTables),i]),s=new Wu(r,a,o);e.userData.structuralMetadata=s,e.traverse(c=>{if(t.associations.has(c)){let{meshes:l,primitives:u}=t.associations.get(c),d=t.json.meshes[l]?.primitives[u];if(d&&d.extensions&&d.extensions[ks]){let h=d.extensions[ks];c.userData.structuralMetadata=new Wu(r,a,o,h,c)}else c.userData.structuralMetadata=s}})}},Cg=new Q.Vector2,Tg=new Q.Vector2,Pg=new Q.Vector2;function O1(e){return e.x>e.y&&e.x>e.z?0:e.y>e.z?1:2}var Og=class{constructor(e,t,n){this.geometry=e,this.textures=t,this.data=n,this._asyncRead=!1,this.featureIds=n.featureIds.map(i=>{let{texture:r,...a}=i,o={label:null,propertyTable:null,nullFeatureId:null,...a};return r&&(o.texture={texCoord:0,channels:[0],...r}),o})}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:i,featureIds:r}=this,a=Array(r.length).fill(null),o=r.length;Fi.increaseSizeTo(o);let s=kg(n,e),c=s[O1(t)];for(let d=0,h=r.length;d<h;d++){let f=r[d],g="nullFeatureId"in f?f.nullFeatureId:null;if("texture"in f){let x=i[f.texture.index];Dg(n,f.texture.texCoord,t,s,Cg),Bg(Cg,x.image.width,x.image.height,Tg),Pg.set(d,0),Fi.renderPixelToTarget(i[f.texture.index],Tg,Pg)}else if("attribute"in f){let x=n.getAttribute(`_feature_id_${f.attribute}`).getX(c);x!==g&&(a[d]=x)}else{let x=c;x!==g&&(a[d]=x)}}let l=new Uint8Array(o*4);if(this._asyncRead)return Fi.readDataAsync(l).then(()=>(u(),a));return Fi.readData(l),u(),a;function u(){let d=new Uint32Array(1);for(let h=0,f=r.length;h<f;h++){let g=r[h],x="nullFeatureId"in g?g.nullFeatureId:null;if("texture"in g){let{channels:P}=g.texture,y=P.map(m=>l[4*h+m]);new Uint8Array(d.buffer).set(y);let p=d[0];p!==x&&(a[h]=p)}}}}dispose(){this.textures.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},Mc="EXT_mesh_features";function Ag(e,t,n){e.traverse(i=>{if(t.associations.has(i)){let{meshes:r,primitives:a}=t.associations.get(i),o=t.json.meshes[r]?.primitives[a];o&&o.extensions&&o.extensions[Mc]&&n(i,o.extensions[Mc])}})}var Ig=class{constructor(e){this.parser=e,this.name=Mc}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(Mc))return;let i=t.json.textures?.length||0,r=Array(i).fill(null);Ag(e,t,(o,{featureIds:s})=>{s.forEach(c=>{if(c.texture&&r[c.texture.index]===null){let l=c.texture.index;r[l]=t.loadTexture(l)}})});let a=await Promise.all(r);Ag(e,t,(o,s)=>{o.userData.meshFeatures=new Og(o.geometry,a,s)})}},zg=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])}}},Ku=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 Eg.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 zg),this.metadata&&(t.register(()=>new Ng),t.register(()=>new Ig)),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:fT}=Q.MathUtils;var gT=new Xu.FullScreenQuad(new Q.MeshBasicMaterial),I1=new Q.DataTexture(new Uint8Array([255,255,255,255]),1,1);I1.needsUpdate=!0;var z1=0,U1=1,V1=2,F1=3,j1=4,H1=5,G1=6,W1=7,X1=8,q1=9,Y1=10,$1=11,bT=Object.freeze({NONE:z1,SCREEN_ERROR:U1,GEOMETRIC_ERROR:V1,DISTANCE:F1,DEPTH:j1,RELATIVE_DEPTH:H1,IS_LEAF:G1,RANDOM_COLOR:W1,RANDOM_NODE_COLOR:X1,CUSTOM_COLOR:q1,LOAD_ORDER:Y1,INDEXED_COLOR:$1});var vT=Math.PI/4,xT=3/5;var Vi={NONE:0,NOT_READY:1,NO_FIT:2,DEPTH:3,OCCUPANCY:4,SPACING:5,ANGLE:6,FACING:7};var yT=new class{constructor(){this._cache={}}getColor(...e){let t=e.pop(),n=e.join("_"),{_cache:i}=this;return n in i||(t.setHSL(Math.random(),1,.5),i[n]=t.getHex()),t.set(i[n])}};var wT={[Vi.NONE]:16777215,[Vi.NOT_READY]:7829367,[Vi.NO_FIT]:2250239,[Vi.DEPTH]:4473924,[Vi.OCCUPANCY]:65535,[Vi.SPACING]:16776960,[Vi.ANGLE]:16711680,[Vi.FACING]:16711935};var _T=Math.PI/180;var ST=xa*Math.PI*2;var MT=xa*Math.PI*2;var jg=require("three/examples/jsm/loaders/DRACOLoader.js"),Hg=require("three/examples/jsm/loaders/KTX2Loader.js"),Gg=require("three/examples/jsm/libs/meshopt_decoder.module.js"),or=require("three");var Os=require("three");function Ug(e){return!!e&&!e.isInterleavedBufferAttribute}function Vg(e,t,n,i){for(let r=0;r<e.count;r+=1)for(let a=0;a<e.itemSize;a+=1)t.setComponent(r,a,Os.MathUtils.clamp(e.getComponent(r,a),n,i));return t}function K1(e){for(let t=0;t<e.count;t+=1)for(let n=0;n<e.itemSize;n+=1){let i=e.getComponent(t,n);if(!Number.isFinite(i)||i<0||i>1)return!1}return!0}var Tc=class{constructor(){this.name="RI_VERTEX_COMPRESSION_PLUGIN";this.priority=-99}processTileModel(t){t.traverse(n=>{let i=n.geometry;if(!i)return;let r=i.attributes.normal;Ug(r)&&!(r.array instanceof Int16Array)&&(i.attributes.normal=Vg(r,new Os.BufferAttribute(new Int16Array(r.count*r.itemSize),r.itemSize,!0),-1,1));for(let a of["uv","uv1","uv2","uv3"]){let o=i.attributes[a];!Ug(o)||o.array instanceof Uint16Array||!K1(o)||(i.attributes[a]=Vg(o,new Os.BufferAttribute(new Uint16Array(o.count*o.itemSize),o.itemSize,!0),0,1))}})}};var Is=require("react/jsx-runtime"),Z1=0,Fg=4,J1=6,Q1=12,ew=4;function tw(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 Zu({url:e,rotation:t=[0,0,0],errorTarget:n=64,cacheSize:i=800,memoryBudgetMB:r=800,decoderConfig:a,objectBindings:o,itemMaterials:s,sceneConfig:c,selectedItem:l,panelHoveredItem:u,highlightOnHover:d=!0,onItemClick:h,onItemHover:f,onObjectCatalog:g,onTilesetBounds:x,onModelLoaded:P,onLoadError:y,nodeRefsOut:p,onNodeRefsChange:m,materialRefsOut:M,explodeFactor:_=0,suspendBindingTransforms:T=!1}){let{camera:E,gl:b,invalidate:w}=(0,Pc.useThree)(),C=(0,Xe.useRef)(null),[S,O]=(0,Xe.useState)(null),L=(0,Xe.useRef)({onItemClick:h,onItemHover:f,onObjectCatalog:g,onTilesetBounds:x,onModelLoaded:P,onLoadError:y,onNodeRefsChange:m});L.current={onItemClick:h,onItemHover:f,onObjectCatalog:g,onTilesetBounds:x,onModelLoaded:P,onLoadError:y,onNodeRefsChange:m};let V=(0,Xe.useRef)(!0),[R,F]=(0,Xe.useState)(null),U=(0,Xe.useRef)(null);U.current=R;let k=(0,Xe.useRef)([]),D=(0,Xe.useRef)(!1);(0,Xe.useEffect)(()=>{let J=new nc;return F(J),()=>J.dispose()},[e]);let q=(0,Xe.useRef)(null),$=(0,Xe.useRef)(0),pe=(0,Xe.useRef)(!1),Ae=r*1024*1024,ye=(0,Xe.useRef)(!1),Ee=(0,Xe.useRef)(vu),Ue=(0,Xe.useRef)(null),Re=(0,Xe.useRef)(null),Wt=(0,Xe.useRef)(null);(0,Xe.useEffect)(()=>()=>{Wt.current!==null&&clearTimeout(Wt.current)},[]);let Tt=a?.dracoDecoderPath??lu,Ze=a?.ktx2TranscoderPath??cu,Le=a?.meshopt??!0,[re,It]=(0,Xe.useState)(null);(0,Xe.useEffect)(()=>{pe.current=!1,ye.current=!1;let J=new Hu(e);J.loadAncestors=!0;let Se=new lc;Se.priorityCallback=J.downloadQueue.priorityCallback,Se.maxJobsPerOrigin=Q1;let ce=new ti;ce.priorityCallback=J.parseQueue.priorityCallback,ce.maxJobs=J1;let ke=new ti;ke.priorityCallback=J.processNodeQueue.priorityCallback,ke.maxJobs=J.processNodeQueue.maxJobs;let Ve=new ys;Ve.unloadPriorityCallback=J.lruCache.unloadPriorityCallback,J.downloadQueue=Se,J.parseQueue=ce,J.processNodeQueue=ke,J.lruCache=Ve;let Fe=Tt?new jg.DRACOLoader().setDecoderPath(Tt).setWorkerLimit(ew):null,Ye=Ze?new Hg.KTX2Loader().setTranscoderPath(Ze).detectSupport(b):null;return J.registerPlugin(new Ku({dracoLoader:Fe,ktxLoader:Ye,meshoptDecoder:Le?Gg.MeshoptDecoder:null,autoDispose:!1})),J.registerPlugin(new qu({disableMipmaps:!1,compressIndex:!0,compressNormals:!1,compressUvs:!1,compressPosition:!0})),J.registerPlugin(new Tc),It(J),window.__riTiles=J,()=>{J.forEachLoadedModel(xe=>da(xe)),J.dispose(),Fe?.dispose(),Ye?.dispose(),It(xe=>xe===J?null:xe)}},[Tt,b,Ze,Le,e]),(0,Xe.useEffect)(()=>{re&&(Ee.current=vu,Ue.current=null,re.errorTarget=n,re.lruCache.maxSize=i,re.lruCache.minSize=Math.max(1,Math.floor(i*.75)),re.lruCache.maxBytesSize=Ae,re.lruCache.minBytesSize=Ae*.75,w())},[i,n,w,Ae,re]);let et=(0,Xe.useMemo)(()=>{let J=o??{};return{objectBindings:J,keyByModelObject:Mf(J),itemMaterials:s,shadingMode:c?.model.shading??"lit",rendererMode:c?.model.renderer??"pbr",selectedKey:l??null,hoveredKey:Cf(S,u),highlightOnHover:d,suspendTransforms:T,placementFrame:re?.group.matrixWorld,invalidate:w}},[S,d,w,s,o,u,c,l,T,re]),Pt=(0,Xe.useCallback)(()=>{if(!re)return;let J=Qt.current,Se=D.current?U.current?.nodesByBinding(J)??{}:{},ce={};re.group.traverse(Ye=>{if(!Ye.isMesh)return;let xe=gu(Ye);if(!xe)return;let wt=J.keyByModelObject[xe]??xe;if(!J.objectBindings[wt])return;Se[wt]||(Se[wt]=Ye);let mt=Ye.material;mt&&(ce[wt]=mt)});let ke=p?.current??{},Ve=Object.keys(ke),Fe=Ve.length!==Object.keys(Se).length||Ve.some(Ye=>ke[Ye]!==Se[Ye]);p&&(p.current=Se),M&&(M.current=ce),(Fe||!p)&&L.current.onNodeRefsChange?.()},[M,p,re]),xt=(0,Xe.useCallback)(J=>ec(J,et),[et]),je=(0,Xe.useCallback)(J=>Pf(J,et),[et]),yt=(0,Xe.useRef)(je);yt.current=je;let Qt=(0,Xe.useRef)(et);Qt.current=et;let we=(0,Xe.useCallback)(()=>{let J=q.current,Se=$.current;return!J||Se<=0?Qt.current:{...Qt.current,explode:{factor:Se,centre:J.centre,radius:J.radius}}},[]);(0,Xe.useEffect)(()=>{re&&(je(re.group),V.current=!0,re.forEachLoadedModel(J=>{je(J),uo(J,we())}),w())},[je,w,we,re]),(0,Xe.useEffect)(()=>{let J=tw(e);if(!J)return;let Se=!1;return fetch(J).then(ce=>ce.ok?ce.json():null).then(ce=>{Se||!ce?.objects||(k.current=ce.objects,D.current=ce.bindingFrame==="gltf-identity-v2",D.current&&U.current?.setCatalog(ce.objects),V.current=!0,L.current.onObjectCatalog?.(ce.objects),w())}).catch(()=>{}),()=>{Se=!0}},[e,w,R]),(0,Xe.useEffect)(()=>{if(!re)return;let J=!1,Se=()=>w(),ce=xe=>{xe.scene&&(xe.scene.traverse(wt=>{let mt=wt.material;for(let an of Array.isArray(mt)?mt:mt?[mt]:[])an.transparent&&an.side===or.DoubleSide&&(an.forceSinglePass=!0)}),yt.current(xe.scene),uo(xe.scene,we()),$a(xe.scene)),V.current=!0,J||(J=!0,L.current.onModelLoaded?.(re.group)),w()},ke=xe=>{L.current.onLoadError?.(xe.error)},Ve=xe=>{xe.scene&&(bu(xe.scene),da(xe.scene)),V.current=!0};re.setCamera(E),re.setResolutionFromRenderer(E,b),re.addEventListener("needs-update",Se),re.addEventListener("load-model",ce),re.addEventListener("load-error",ke),re.addEventListener("dispose-model",Ve);let Fe=()=>{V.current=!0,w()};re.addEventListener("tile-visibility-change",Fe);let Ye=()=>{let xe=re.root;xe&&!xe.content?.uri&&xe.refine==="REPLACE"&&(xe.refine="ADD",w())};return re.addEventListener("load-root-tileset",Ye),w(),()=>{re.removeEventListener("needs-update",Se),re.removeEventListener("load-model",ce),re.removeEventListener("load-error",ke),re.removeEventListener("dispose-model",Ve),re.removeEventListener("tile-visibility-change",Fe),re.removeEventListener("load-root-tileset",Ye),bu(re.group),re.deleteCamera(E),p&&(p.current={}),M&&(M.current={})}},[E,b,w,M,p,we,re]);let rn=(0,Xe.useCallback)(J=>{let Se=xt(J.object);Se&&(J.stopPropagation(),L.current.onItemClick?.(Se.binding))},[xt,h]),Zt=(0,Xe.useCallback)(J=>{let Se=xt(J.object),ce=Se?.key??null;ce!==C.current&&(C.current=ce,O(ce),L.current.onItemHover?.(Se?.binding??null))},[xt]),Oe=(0,Xe.useCallback)(()=>{C.current!==null&&(C.current=null,O(null),L.current.onItemHover?.(null))},[]);return(0,Xe.useEffect)(()=>{w()},[w,re]),(0,Pc.useFrame)((J,Se)=>{if(!re)return;if(re.setResolutionFromRenderer(E,b),D.current&&R){let on=R.sync(we(),l,T);R.updateBounds(re.root),T&&re.forEachLoadedModel(j=>uo(j,on))}if(re.update(),!pe.current){let on=new or.Box3;if(re.getBoundingBox(on)){pe.current=!0,re.group.updateMatrixWorld(),on.applyMatrix4(re.group.matrixWorld);let j=on.getBoundingSphere(new or.Sphere);q.current={centre:j.center.clone(),radius:on.getSize(new or.Vector3).length()*.5},L.current.onTilesetBounds?.(on),w()}}V.current&&(V.current=!1,Pt());let ce=Math.min(Math.max(_,0),1),ke=$.current;Math.abs(ke-ce)>1e-4?($.current=or.MathUtils.lerp(ke,ce,1-Math.exp(-6*Se)),uo(re.group,we()),w()):ke!==ce&&($.current=ce,uo(re.group,we()),w());let Ve=re,Fe=re.lruCache,Ye=Fe.isFull(),xe=Ee.current,wt=xe.loosened&&Ue.current?Ue.current:{bytes:Fe.maxBytesSize,items:Fe.maxSize},mt=0;for(let on of Fe.usedSet??[])mt+=Fe.bytesMap?.get(on)??0;let an=!1,en=re;for(let on of en.usedSet??[]){let j=on.internal?.loadingState??Fg;if(on.traversal?.used&&on.internal?.hasContent&&j>=Z1&&j<Fg){an=!0;break}}let tt=Re.current??(Re.current={world:new or.Matrix4,projection:new or.Matrix4}),Qe=!tt.world.equals(E.matrixWorld)||!tt.projection.equals(E.projectionMatrix);Qe&&(tt.world.copy(E.matrixWorld),tt.projection.copy(E.projectionMatrix));let Dn={full:Ye,wanting:an,moved:Qe,usage:Math.max(mt/Math.max(1,wt.bytes),(Fe.usedSet?.size??0)/Math.max(1,wt.items)),now:performance.now()},zt=Of(xe,Dn);zt!==xe&&(zt.loosened&&(!xe.loosened||zt.raisedAt!==xe.raisedAt)?(xe.loosened||(Ue.current=wt),Fe.maxBytesSize=Math.max(wt.bytes,Fe.cachedBytes??0)*xu,Fe.maxSize=Math.ceil(Math.max(wt.items,Fe.itemSet?.size??0)*xu)):!zt.loosened&&xe.loosened&&Ue.current&&(Fe.maxBytesSize=Ue.current.bytes,Fe.maxSize=Ue.current.items,Ue.current=null),Ee.current=zt,re.errorTarget=n*zt.factor,w()),!ye.current&&Ye&&Dn.wanting&&zt.factor>=gs&&(ye.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."));let Un=If(zt,Dn);Un===0?w():Un!==null&&Wt.current===null&&(Wt.current=setTimeout(()=>{Wt.current=null,w()},Un)),((Ve.stats?.downloading??0)>0||(Ve.stats?.parsing??0)>0||Ve.loadProgress!==void 0&&Ve.loadProgress<1&&!Ye)&&w()}),re?(0,Is.jsxs)("group",{rotation:t,children:[R?(0,Is.jsx)("primitive",{object:R.group}):null,(0,Is.jsx)("primitive",{object:re.group,onClick:rn,onPointerMove:Zt,onPointerOut:Oe})]}):null}var qe=require("react"),Ju=require("@react-three/drei"),wa=require("@react-three/fiber"),ri=require("three");var Fn=require("react/jsx-runtime"),nw=.02;function Wg(e,t){let n=(0,qe.useRef)(null),i=(0,wa.useThree)(l=>l.scene),r=(0,qe.useRef)(null),a=(0,qe.useMemo)(()=>new ri.Vector3(...e.anchorLocalPosition??e.localPosition??e.worldPosition),[e.anchorLocalPosition,e.localPosition,e.worldPosition]),o=(0,qe.useMemo)(()=>new ri.Vector3,[]),s=(0,qe.useMemo)(()=>new ri.Vector3,[]),c=(0,qe.useMemo)(()=>new ri.Vector3,[]);return(0,qe.useEffect)(()=>{r.current=null},[e.anchorNodeName]),(0,wa.useFrame)(({camera:l})=>{let u=n.current,d=u?.parent;if(!u||!d)return;let h=r.current;if(e.anchorNodeName&&(!h||!h.parent)&&(h=Ur(i,e.anchorNodeName),r.current=h),h?(h.updateWorldMatrix(!0,!1),o.copy(a).applyMatrix4(h.matrixWorld)):(o.copy(a),d.localToWorld(o)),t){let f=t.current.get(e.id);f||(f=new ri.Vector3,t.current.set(e.id,f)),f.copy(o)}c.copy(l.position).sub(o),c.lengthSq()>0?(c.normalize(),s.copy(o).addScaledVector(c,nw)):s.copy(o),d.worldToLocal(s),u.position.copy(s)}),n}function rw({annotation:e,occluders:t,worldPositionsRef:n,onClick:i,onHover:r,showAnnotationOnHover:a}){let[o,s]=(0,qe.useState)(!1),c=Wg(e,n),[l,u]=(0,qe.useState)(!1),[d,h]=(0,qe.useState)(1),f=(0,qe.useRef)(null),g=(0,qe.useRef)(null),x=(0,qe.useRef)(null);(0,qe.useEffect)(()=>()=>{f.current&&(clearTimeout(f.current),f.current=null),x.current&&(clearTimeout(x.current),x.current=null)},[]);let P=_=>{_.stopPropagation(),_.preventDefault(),f.current&&(clearTimeout(f.current),f.current=null),f.current=window.setTimeout(()=>{i?.(e),f.current=null},10)},y=_=>{_.stopPropagation(),u(!0),h(100),x.current&&(clearTimeout(x.current),x.current=null),r?.(e),a&&i?.(e)},p=_=>{_.stopPropagation(),u(!1),h(1),x.current&&clearTimeout(x.current),x.current=window.setTimeout(()=>{r?.(null),a&&r?.(null),x.current=null},50)},m=_=>{_.stopPropagation();let T=_.currentTarget;T.dataset.pointerX=String(_.clientX),T.dataset.pointerY=String(_.clientY)},M=_=>{_.stopPropagation();let T=_.currentTarget,E=parseFloat(T.dataset.pointerX||"0"),b=parseFloat(T.dataset.pointerY||"0"),w=_.clientX-E,C=_.clientY-b;Math.sqrt(w*w+C*C)<10&&P(_)};return(0,Fn.jsx)("group",{ref:c,children:(0,Fn.jsx)(Ju.Html,{center:!0,occlude:t,onOcclude:s,pointerEvents:o?"none":"auto",zIndexRange:[1,200],style:{pointerEvents:o?"none":"auto",zIndex:d},className:"annotation-html-wrapper",transparent:!0,children:(0,Fn.jsx)("div",{ref:g,className:`ri-annotationMarker ${l?"ri-annotationMarker--hovered":""}`,title:e.title,style:{display:o?"none":"flex"},onPointerDown:m,onPointerUp:M,onPointerEnter:y,onPointerLeave:p,onDoubleClick:_=>{_.stopPropagation(),i?.(e)},role:"button",tabIndex:0,"aria-label":`Annotation ${e.id}`,children:(0,Fn.jsx)("span",{className:"ri-annotationMarker-id",children:e.id})})})})}function iw({annotation:e,occluders:t,popupRef:n,onClose:i,hideCloseButton:r=!1}){let[a,o]=(0,qe.useState)(!1),s=Wg(e),c=(0,Fn.jsxs)("div",{ref:n,className:"ri-viewAnnotationPopup",style:{display:a?"none":"block"},onPointerDown:l=>l.stopPropagation(),onClick:l=>l.stopPropagation(),children:[(0,Fn.jsxs)("div",{className:"ri-viewAnnotationHeader",children:[(0,Fn.jsx)("h4",{className:"ri-viewAnnotationTitle",children:e.title}),!r&&(0,Fn.jsx)("button",{onClick:l=>{l.stopPropagation(),i?.()},className:"ri-viewAnnotationClose","aria-label":"Close annotation",children:"\xD7"})]}),e.description&&(0,Fn.jsx)("p",{className:"ri-viewAnnotationDescription",children:e.description})]});return(0,Fn.jsx)("group",{ref:s,children:(0,Fn.jsx)(Ju.Html,{occlude:t,onOcclude:o,pointerEvents:a?"none":"auto",zIndexRange:[1e3,2e3],style:{pointerEvents:a?"none":"auto",zIndex:1e3},transparent:!0,children:c})})}function Qu({annotations:e,sceneConfig:t,activeAnnotation:n,popupRef:i,canvasRootRef:r,worldPositionsRef:a,modelLoaded:o,onAnnotationClick:s,onAnnotationHover:c,onCloseAnnotation:l,hideCloseButton:u=!1,showAnnotationOnHover:d=!1}){let h=(0,wa.useThree)(R=>R.invalidate),f=(0,wa.useThree)(R=>R.scene),[g,x]=(0,qe.useState)(null),[P,y]=(0,qe.useState)(!1),p=(0,qe.useRef)(null),m=(0,qe.useRef)(null),M=(0,qe.useRef)(null),_=(0,qe.useMemo)(()=>{let R=[];return f.traverse(F=>{let U=F;U.isMesh&&!U.isSkinnedMesh&&R.push({current:F})}),R},[f,e,o]),T=(0,qe.useCallback)(()=>{h();let R=()=>{h(),m.current=window.requestAnimationFrame(()=>{h(),m.current=null})};m.current=window.requestAnimationFrame(R)},[h]);(0,qe.useEffect)(()=>{T()},[e,T]),(0,qe.useEffect)(()=>{T()},[n,T]),(0,qe.useEffect)(()=>()=>{m.current!==null&&window.cancelAnimationFrame(m.current),M.current&&clearTimeout(M.current)},[]);let E=P?g:n||g,b=(0,qe.useMemo)(()=>E?e.find(R=>R.id===E.id)??E:null,[E,e]),w=(0,qe.useCallback)(R=>{if(P&&g?.id===R.id){y(!1),x(null),l?.();return}y(!0),x(R),s?.(R)},[P,g,s,l]),C=(0,qe.useCallback)(R=>{c?.(R),d&&!P&&(M.current&&(clearTimeout(M.current),M.current=null),R?x(R):M.current=window.setTimeout(()=>{x(null),l?.(),M.current=null},100))},[P,c,d,l]),S=(0,qe.useCallback)(()=>{y(!1),x(null),l?.()},[l]),O=(0,qe.useCallback)(R=>{let F=R.target;if(F.closest?.(".ri-annotationMarker")||F.closest?.(".ri-viewAnnotationPopup")||F.closest?.(".annotation-html-wrapper"))return;let U=r.current;U&&U.contains(F)&&(y(!1),x(null),l?.())},[r,l]),L=(0,qe.useCallback)(R=>{R.key==="Escape"&&P&&(y(!1),x(null),l?.())},[P,l]);(0,qe.useEffect)(()=>{let R=r.current;return R&&(R.addEventListener("click",O),R.addEventListener("pointerdown",O)),document.addEventListener("keydown",L),()=>{R&&(R.removeEventListener("click",O),R.removeEventListener("pointerdown",O)),document.removeEventListener("keydown",L)}},[r,O,L]);let V=(0,qe.useMemo)(()=>(t?.model.rotation??[0,0,0]).map(R=>R*Math.PI/180),[t?.model.rotation]);return(0,qe.useEffect)(()=>{h()},[h,V]),(0,wa.useFrame)((R,F)=>{if(!p.current)return;p.current.rotation.x=ri.MathUtils.lerp(p.current.rotation.x,V[0],1-Math.exp(-5*F)),p.current.rotation.y=ri.MathUtils.lerp(p.current.rotation.y,V[1],1-Math.exp(-5*F)),p.current.rotation.z=ri.MathUtils.lerp(p.current.rotation.z,V[2],1-Math.exp(-5*F));let{rotation:U}=p.current;Math.abs(U.x-V[0])+Math.abs(U.y-V[1])+Math.abs(U.z-V[2])>1e-4&&h()}),(0,Fn.jsxs)("group",{ref:p,children:[e.map(R=>{let F=`${R.worldPosition.join(",")}-${R.title}-${R.id}`;return(0,Fn.jsx)(rw,{annotation:R,occluders:_,worldPositionsRef:a,onClick:w,onHover:C,showAnnotationOnHover:d},F)}),b?(0,Fn.jsx)(iw,{annotation:b,occluders:_,popupRef:i,onClose:S,hideCloseButton:u},`popup-${b.id}`):null]})}var zs=require("react"),Us=require("@react-three/drei"),_a=require("three"),zn=require("react/jsx-runtime"),aw="#22d3ee",ow="#facc15";function Ac(e,t){let n=e<10?e.toFixed(3):e.toFixed(2);return t?`${n} ${t}`:n}function sw(e,t){return[(e[0]+t[0])/2,(e[1]+t[1])/2,(e[2]+t[2])/2]}function Ec({position:e,children:t}){return(0,zn.jsx)(Us.Html,{center:!0,position:e,zIndexRange:[20,0],children:(0,zn.jsx)("div",{className:"ri-measureLabel",children:t})})}function lw({box:e,unit:t}){let n=(0,zs.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,zs.useMemo)(()=>{let[s,c,l]=e.size;return new _a.EdgesGeometry(new _a.BoxGeometry(s||1e-4,c||1e-4,l||1e-4))},[e.size]);(0,zs.useEffect)(()=>()=>{i.dispose()},[i]);let[r,a,o]=e.size;return(0,zn.jsxs)("group",{position:n,children:[(0,zn.jsx)("lineSegments",{geometry:i,children:(0,zn.jsx)("lineBasicMaterial",{color:ow})}),(0,zn.jsxs)(Ec,{position:[0,-a/2,o/2],children:["W ",Ac(r,t)]}),(0,zn.jsxs)(Ec,{position:[-r/2,0,o/2],children:["H ",Ac(a,t)]}),(0,zn.jsxs)(Ec,{position:[r/2,-a/2,0],children:["D ",Ac(o,t)]})]})}function ep({points:e,unit:t,box:n,showDimensions:i}){return(0,zn.jsxs)("group",{children:[e.map(r=>(0,zn.jsx)(Us.Html,{center:!0,position:r.position,zIndexRange:[15,0],children:(0,zn.jsx)("div",{className:"ri-measureDot"})},r.id)),e.slice(1).map((r,a)=>{let o=e[a].position,s=r.position,c=new _a.Vector3(...o).distanceTo(new _a.Vector3(...s));return(0,zn.jsxs)("group",{children:[(0,zn.jsx)(Us.Line,{points:[o,s],color:aw,lineWidth:2}),(0,zn.jsx)(Ec,{position:sw(o,s),children:Ac(c,t)})]},`${e[a].id}-${r.id}`)}),i&&n?(0,zn.jsx)(lw,{box:n,unit:t}):null]})}var st=require("react"),Sa=require("@react-three/xr"),$g=require("@react-three/fiber"),Vs=require("three"),jr=require("react/jsx-runtime"),cw=1,Xg=1,dw=.1,uw=10;function pw(e,t){let[n,i,r]=e.size,a=(e.min[0]+e.max[0])/2,o=(e.min[2]+e.max[2])/2,s=Math.max(n,i,r)||1;return{scale:t==="real-world"?1:cw/s,offset:[-a,-e.min[1],-o]}}function qg(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.hypot(t,n)}function Yg(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.atan2(n,t)}var hw=(0,st.forwardRef)(function({box:t,scaleMode:n,children:i,onARStateChange:r},a){let o=(0,st.useRef)(null),s=(0,st.useRef)(null),c=(0,st.useRef)(null),l=(0,Sa.useXR)(F=>F.session!=null),u=(0,Sa.useXR)(F=>F.mode==="immersive-ar"),d=(0,st.useMemo)(()=>t?pw(t,n):null,[t,n]),h=(0,st.useRef)(new Vs.Vector3(0,0,-Xg)),f=(0,st.useRef)(1),g=(0,st.useRef)(0),x=(0,st.useRef)(!0),P=(0,st.useRef)(!1),y=(0,st.useMemo)(()=>new Vs.Matrix4,[]),p=(0,st.useRef)(new Vs.Vector3),m=(0,st.useRef)(!1),M=(0,st.useRef)(null),_=(0,st.useRef)(!1),T=(0,st.useRef)(0),E=(0,st.useRef)(0),b=(0,st.useRef)(1),w=(0,st.useRef)(0),C=(0,st.useCallback)(()=>{if(!r||!u)return;let F={canPlace:m.current,isPlacementMode:x.current,isModelPlaced:P.current},U=M.current;U&&U.canPlace===F.canPlace&&U.isPlacementMode===F.isPlacementMode&&U.isModelPlaced===F.isModelPlaced||(M.current=F,r(F))},[u,r]),S=(0,st.useCallback)(()=>!u||!m.current?!1:(h.current.copy(p.current),P.current=!0,x.current=!1,C(),!0),[C,u]),O=(0,st.useCallback)(()=>{u&&(x.current=!0,C())},[C,u]),L=(0,st.useCallback)(()=>{let F=S();return!F&&u&&(x.current=!1,C()),F},[C,u,S]),V=(0,st.useCallback)(()=>{u&&(x.current=!1,C())},[C,u]);(0,st.useImperativeHandle)(a,()=>({placeCurrent:S,startPlacementMode:O,finishPlacementMode:L,cancelPlacementMode:V}),[V,L,S,O]),(0,st.useEffect)(()=>{if(!l){h.current.set(0,0,-Xg),f.current=1,g.current=0,m.current=!1,_.current=!1,x.current=!0,P.current=!1,M.current=null;return}u&&(m.current=!1,_.current=!1,x.current=!0,P.current=!1,M.current=null,C())},[C,l,u]),(0,Sa.useXRHitTest)((F,U)=>{if(!u||F.length===0){m.current&&(m.current=!1,C());return}U(y,F[0])&&(p.current.setFromMatrixPosition(y),m.current||(m.current=!0,C()))},"viewer"),(0,Sa.useXRInputSourceEvent)("all","select",()=>{!u||_.current||!x.current||S()},[u,S]),(0,st.useEffect)(()=>{if(!u)return;let F=D=>{D.touches.length===2&&(_.current=!0,T.current=qg(D.touches),E.current=Yg(D.touches),b.current=f.current,w.current=g.current)},U=D=>{if(!_.current||D.touches.length!==2)return;D.preventDefault();let q=qg(D.touches);if(T.current>0){let pe=q/T.current;f.current=Math.min(uw,Math.max(dw,b.current*pe))}let $=Yg(D.touches);g.current=w.current-($-E.current)},k=D=>{D.touches.length===0&&requestAnimationFrame(()=>{_.current=!1})};return window.addEventListener("touchstart",F),window.addEventListener("touchmove",U,{passive:!1}),window.addEventListener("touchend",k),window.addEventListener("touchcancel",k),()=>{window.removeEventListener("touchstart",F),window.removeEventListener("touchmove",U),window.removeEventListener("touchend",k),window.removeEventListener("touchcancel",k)}},[u]),(0,$g.useFrame)(()=>{let F=o.current,U=s.current;if(!F||!U)return;!l||!d?(F.visible=!0,F.position.set(0,0,0),F.rotation.set(0,0,0),U.scale.setScalar(1)):(F.visible=!u||P.current,F.position.copy(h.current),F.rotation.set(0,g.current,0),U.scale.setScalar(d.scale*f.current));let k=c.current;if(k){let D=u&&x.current&&m.current;k.visible=D,D&&k.position.copy(p.current)}});let R=l&&d?d.offset:[0,0,0];return(0,jr.jsxs)(jr.Fragment,{children:[(0,jr.jsxs)("mesh",{ref:c,visible:!1,rotation:[-Math.PI/2,0,0],children:[(0,jr.jsx)("ringGeometry",{args:[.05,.07,32]}),(0,jr.jsx)("meshBasicMaterial",{color:"#22d3ee",transparent:!0,opacity:.95})]}),(0,jr.jsx)("group",{ref:o,children:(0,jr.jsx)("group",{ref:s,children:(0,jr.jsx)("group",{position:R,children:i})})})]})}),Kg=hw;var Ht=require("react"),Rc=require("@react-three/fiber"),Ln=require("three"),mw=1.2;function tp({controlsRef:e,sceneRef:t,config:n,playing:i,resetOnPlay:r=!1,onFinished:a,onUserInteract:o,onStop:s}){let c=(0,Rc.useThree)(V=>V.invalidate),l=(0,Ht.useMemo)(()=>n.waypoints??[],[n.waypoints]),u=l.length>=2,d=n.loop??!0,h=(0,Ht.useMemo)(()=>{if(l.length<2)return 24;let V=0;for(let R=0;R<l.length-1;R++)V+=l[R].segmentDuration??3.5;return d&&l.length>1&&(V+=l[l.length-1].segmentDuration??3.5),Math.max(V,4)},[l,d]),f=n.duration??h,g=(0,Ht.useMemo)(()=>l.map(V=>[...V.position,...V.target,V.azimuthAngle??"",V.polarAngle??"",V.segmentDuration??""].join(",")).join(";"),[l]),x=(0,Ht.useMemo)(()=>{let V=[];if(l.length<2)return V;let R=0;for(let F=0;F<l.length-1;F++)R+=l[F].segmentDuration??3.5,V.push(R);return d&&l.length>1&&(R+=l[l.length-1].segmentDuration??3.5,V.push(R)),V},[l,d]),P=(0,Ht.useMemo)(()=>V=>{if(l.length<2||x.length===0)return V/f;let R=x[x.length-1],F=d?V%f:Math.min(V,f),U=f>0?F/f*R:0;for(let k=0;k<x.length;k++)if(U<=x[k]){let D=k===0?0:x[k-1],q=x[k]-D,$=q>0?(U-D)/q:0,pe=d?l.length:l.length-1,Ae=k/pe,ye=1/pe;return Ae+$*ye}return 1},[l.length,x,f,d]),y=(0,Ht.useMemo)(()=>u?{position:new Ln.CatmullRomCurve3(l.map(V=>new Ln.Vector3(...V.position)),d,"catmullrom",.5),target:new Ln.CatmullRomCurve3(l.map(V=>new Ln.Vector3(...V.target)),d,"catmullrom",.5)}:null,[g,u,d]),p=(0,Ht.useMemo)(()=>{if(!u||!l.every(R=>Number.isFinite(R.azimuthAngle)&&Number.isFinite(R.polarAngle)))return null;let V=l.map(R=>({azimuth:R.azimuthAngle,polar:R.polarAngle,distance:new Ln.Vector3(...R.position).distanceTo(new Ln.Vector3(...R.target))}));for(let R=1;R<V.length;R+=1){let F=V[R-1].azimuth,U=V[R].azimuth;V[R].azimuth=U+Math.round((F-U)/(Math.PI*2))*Math.PI*2}return V},[g,u]),m=(0,Ht.useRef)(0),M=(0,Ht.useRef)(0),_=(0,Ht.useRef)(new Ln.Vector3),T=(0,Ht.useRef)(new Ln.Vector3),E=(0,Ht.useRef)(!1),b=(0,Ht.useRef)(0),w=(0,Ht.useRef)(!1),C=(0,Ht.useRef)(null),S=(0,Ht.useMemo)(()=>new Ln.Vector3,[]),O=(0,Ht.useMemo)(()=>new Ln.Vector3,[]),L=(0,Ht.useMemo)(()=>new Ln.Spherical,[]);return(0,Ht.useEffect)(()=>{m.current=0,b.current=0,M.current=0,w.current=!1},[g,d,f]),(0,Ht.useEffect)(()=>{r&&(b.current=0,m.current=0,w.current=!1)},[r]),(0,Ht.useEffect)(()=>{if(!i){E.current=!1,m.current>0&&!r?b.current=m.current:r&&(b.current=0),(m.current>0||w.current)&&s?.();return}m.current>=f&&!d&&(m.current=0,b.current=0,w.current=!1);let V=e.current;if(V&&(V.getPosition(_.current),V.getTarget(T.current)),r||w.current||b.current===0?(m.current=0,b.current=0,w.current=!1):b.current>0&&b.current<f?m.current=b.current:(m.current=0,b.current=0),M.current=0,!u){let R=t.current;if(R){let F=new Ln.Box3().setFromObject(R).getBoundingSphere(new Ln.Sphere);C.current={center:F.center.clone(),radius:F.radius>0?F.radius:1}}}E.current=!0,c()},[i,u,e,t,c,f,d,g,r,s]),(0,Ht.useEffect)(()=>{if(!i||!o)return;let V=e.current;if(!V)return;let R=()=>{w.current||o()};return V.addEventListener("controlstart",R),()=>V.removeEventListener("controlstart",R)},[i,e,o]),(0,Rc.useFrame)((V,R)=>{if(!i||!E.current)return;let F=e.current;if(!F)return;m.current+=R,M.current+=R;let U=P(m.current),k=!d&&m.current>=f;if(U=d?U%1:Math.min(U,1),y)if(y.target.getPoint(U,O),p){let q=d?p.length:p.length-1,$=Math.min(U,1)*q,pe=Math.min(Math.floor($),q-1),Ae=(pe+1)%p.length,ye=U>=1?1:$-pe,Ee=ye*ye*(3-2*ye),Ue=p[pe],Re=p[Ae],Wt=Re.azimuth+Math.round((Ue.azimuth-Re.azimuth)/(Math.PI*2))*Math.PI*2,Tt=Ue.azimuth+(Wt-Ue.azimuth)*Ee,Ze=Ue.polar+(Re.polar-Ue.polar)*Ee,Le=Ue.distance+(Re.distance-Ue.distance)*Ee;L.set(Math.max(Le,1e-6),Math.min(Math.max(Ze,1e-6),Math.PI-1e-6),Tt),S.setFromSpherical(L).add(O)}else y.position.getPoint(U,S);else{let q=C.current;if(!q)return;let $=U*Math.PI*2,pe=q.radius*2.2;S.set(q.center.x+Math.cos($)*pe,q.center.y+q.radius*.6,q.center.z+Math.sin($)*pe),O.copy(q.center)}let D=Math.min(M.current/mw,1);if(D<1){let q=D*D*(3-2*D);S.lerpVectors(_.current,S,q),O.lerpVectors(T.current,O,q)}if(F.setLookAt(S.x,S.y,S.z,O.x,O.y,O.z,!1),k){E.current=!1,w.current=!0,m.current=0,b.current=0,a?.();return}c()}),null}var kc=require("react");var fw="ri:license-grant:v1",gw={"260cd89ea13f":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwjr3ofKTkkcxOM0GYl/RlJj9JsuyjSF8sYmCd2YqsHJCEO8EvlNDrO2Kl4agFKo6dRhyR2/oWeiU6P9WIqRbvw=="},Zg=new Map;function Qg(e){let t=atob(e);return Uint8Array.from(t,n=>n.charCodeAt(0)).buffer}function Jg(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");return Qg(t.padEnd(Math.ceil(t.length/4)*4,"="))}function bw(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 Lc(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 np(e,t){return`${fw}:${t}:${e}`}function vw(e,t){let n=Zg.get(e);if(n)return n;let i=crypto.subtle.importKey("spki",Qg(t),{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]);return Zg.set(e,i),i}async function rp(e,t,n){if(!globalThis.crypto?.subtle)return null;try{let[i,r,a,o,...s]=e.split("."),c=gw[r];if(i!=="ri1"||!c||!a||!o||s.length>0)return null;let l=JSON.parse(new TextDecoder().decode(Jg(a)));if(!bw(l)||!await crypto.subtle.verify({name:"ECDSA",hash:"SHA-256"},await vw(r,c),Jg(o),new TextEncoder().encode(`${i}.${r}.${a}`)))return null;let d=Math.floor(Date.now()/1e3),h=l.expiresAt-l.issuedAt;return l.licenseKeyHash!==t||l.domain!==n||l.expiresAt<=d||l.issuedAt>d+300||h<=0||h>43200?null:{environment:l.environment,tier:l.tier,expiresAt:l.expiresAt}}catch{return null}}async function eb(e,t,n){try{return await rp(e,await Lc(t),n)}catch{return null}}async function tb(e,t,n){try{let i=await Lc(t);return await rp(e,i,n)?(localStorage.setItem(np(i,n),e),!0):!1}catch{return!1}}async function nb(e,t){try{let n=await Lc(e),i=np(n,t),r=localStorage.getItem(i);if(!r)return null;let a=await rp(r,n,t);return a||localStorage.removeItem(i),a}catch{return null}}async function ip(e,t){try{let n=await Lc(e);localStorage.removeItem(np(n,t))}catch{}}var xw=["localhost","127.0.0.1","0.0.0.0"],yw=e=>xw.includes(e)||e.endsWith(".local")||e.endsWith(".localhost"),ib="https://react-immersive.liveroom.dev/api/validate-license",ww=()=>typeof window<"u",_w=300*1e3,Sw=5e3,Mw=400,op=new Map,ap=new Map,ji=class extends Error{},ab=async(e,t,n)=>{let i=await nb(e,t);return i?(console.warn("[react-immersive] License server unreachable \u2014 using a previously verified, time-limited offline grant."),{status:"valid",reason:"Previously verified offline grant",environment:i.environment,tier:i.tier,isLocalDomain:n}):null},rb=async(e,t,n)=>{let i=await ab(e,t,n);return i||(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})},Cw=e=>e instanceof ji||e instanceof TypeError,Tw=()=>new Promise(e=>setTimeout(e,Mw)),Pw=e=>e==="development"||e==="production",Aw=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&&!Pw(t.environment)||t.tier!==void 0&&typeof t.tier!="string"||t.offlineGrant!==void 0&&typeof t.offlineGrant!="string")},Ew=e=>{if(!e||typeof e!="object")return null;let t=e,n=t.reason??t.error;return typeof n=="string"&&n.trim()?n:null},Rw=(e,t,n)=>`${n}::${e}::${t}`,Lw=e=>{let t=op.get(e);return t?Date.now()-t.timestamp>_w?(op.delete(e),null):t.result:null},kw=(e,t)=>({status:e.valid?"valid":"invalid",reason:e.reason,environment:e.environment,tier:e.tier,isLocalDomain:t}),Dw=(e,t)=>({status:"invalid",reason:e,isLocalDomain:t});async function Bw(e,t,n,i){let r=Rw(e,t,i),a=Lw(r);if(a)return a;let o=ap.get(r);if(o)return o;let s=(async()=>{for(let c=0;c<2;c+=1)try{return await Nw(e,t,n,r,i)}catch(l){if(!Cw(l))throw l;if(c===0){let u=await ab(e,t,n);if(u)return u;await Tw();continue}return rb(e,t,n)}return rb(e,t,n)})().finally(()=>{ap.delete(r)});return ap.set(r,s),s}async function Nw(e,t,n,i,r){let a=new AbortController,o=setTimeout(()=>a.abort(),Sw),s;try{s=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},cache:"no-store",signal:a.signal,body:JSON.stringify({licenseKey:e,domain:t})})}catch(u){throw a.signal.aborted?new ji("License validation timed out"):u}finally{clearTimeout(o)}let c;try{c=await s.json()}catch{throw new ji(`License server returned a non-JSON response${s.status?` (${s.status})`:""}`)}if(!s.ok){if(s.status===429||s.status>=500)throw new ji(`License server error (${s.status})`);let u=Ew(c)??`License validation failed${s.status?` (${s.status})`:""}`;return await ip(e,t),Dw(u,n)}if(!Aw(c))throw new ji("License server returned an unexpected payload");let l=kw(c,n);if(l.status==="valid"&&r!==ib){let u=c.offlineGrant?await eb(c.offlineGrant,e,t):null;if(!u)throw new ji("License validation endpoint did not return a verifiable signed grant");l={...l,environment:u.environment,tier:u.tier}}return l.status==="valid"?(op.set(i,{result:l,timestamp:Date.now()}),c.offlineGrant&&(await tb(c.offlineGrant,e,t)||console.warn("[react-immersive] The license server returned an invalid offline grant; it was not cached."))):await ip(e,t),l}var Dc=(e,t=ib)=>{let[n,i]=(0,kc.useState)({status:"checking",isLocalDomain:!1});return(0,kc.useEffect)(()=>{if(!ww())return;let r=!1,a=u=>{r||i(u)},o=e.trim(),s=window.location.hostname.toLowerCase(),c=yw(s);return a({status:"checking",isLocalDomain:c}),o?((async()=>{try{a(await Bw(o,s,c,t))}catch(u){let d=u instanceof TypeError?"Could not reach license server":u instanceof Error?u.message:"License validation failed";a({status:"invalid",reason:d,isLocalDomain:c})}})(),()=>{r=!0}):(a({status:"invalid",reason:"No license key provided",isLocalDomain:c}),()=>{r=!0})},[e,t]),n};var Jt=require("react");var kn=require("react/jsx-runtime"),Ow={up:{width:38,height:22},down:{width:38,height:22},left:{width:22,height:38},right:{width:22,height:38}},Iw={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"},Bc=({direction:e})=>{let t=Ow[e],n=Iw[e];return(0,kn.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,kn.jsx)("polyline",{points:n,stroke:"rgba(0, 0, 0, 0.9)",strokeWidth:"6",strokeLinecap:"round",strokeLinejoin:"round"}),(0,kn.jsx)("polyline",{points:n,stroke:"#2095F2",strokeWidth:"4",strokeLinecap:"round",strokeLinejoin:"round"})]})},Si=16,zw={"bottom-left":{bottom:Si,left:Si,top:"auto",right:"auto",transform:"none"},"bottom-right":{bottom:Si,right:Si,top:"auto",left:"auto",transform:"none"},"top-left":{top:Si,left:Si,bottom:"auto",right:"auto",transform:"none"},"top-right":{top:Si,right:Si,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:Si,left:"50%",bottom:"auto",right:"auto",transform:"translateX(-50%)"}},Uw=({controlsRef:e,enabled:t=!0,opacity:n=.9,moveSensitivity:i=.001,rotateSensitivity:r=.01,position:a="center-bottom"})=>{let o=(0,Jt.useRef)(null),[s,c]=(0,Jt.useState)({x:0,y:0}),l=(0,Jt.useRef)(!1),u=(0,Jt.useRef)({x:0,y:0}),d=(0,Jt.useRef)(),h=(0,Jt.useRef)(),f=(0,Jt.useRef)(null),g=(0,Jt.useRef)(0),x=()=>e.current,P=(L,V,R)=>{let F=Math.hypot(L,V);if(F>R){let U=R/F;return{x:L*U,y:V*U}}return{x:L,y:V}},y=L=>{let R=Math.abs(L);return R<.12?0:Math.sign(L)*((R-.12)/(1-.12))},p=(0,Jt.useCallback)(()=>{let L=()=>{let{x:V,y:R}=u.current,F=y(V),U=y(R);if(t&&(F!==0||U!==0)){let k=x();k&&k.rotate(-F*r,-U*r,!0)}d.current=requestAnimationFrame(L)};d.current=requestAnimationFrame(L)},[t,r]),m=(0,Jt.useCallback)(()=>{d.current&&cancelAnimationFrame(d.current)},[]),M=(0,Jt.useCallback)((L,V)=>{if(!o.current||!l.current)return;let R=o.current.getBoundingClientRect(),F=R.left+R.width/2,U=R.top+R.height/2,k=R.width/2-18,D=L-F,q=V-U,$=P(D,q,k);c($),u.current={x:$.x/k,y:$.y/k}},[]),_=(0,Jt.useCallback)(L=>{if(!t)return;L.preventDefault(),L.stopPropagation(),l.current=!0,p();let V="touches"in L?L.touches[0]:L;M(V.clientX,V.clientY)},[t,p,M]),T=(0,Jt.useCallback)(L=>{if(!l.current)return;L.preventDefault();let V="touches"in L?L.touches[0]:L;M(V.clientX,V.clientY)},[M]),E=(0,Jt.useCallback)(()=>{l.current=!1,c({x:0,y:0}),u.current={x:0,y:0},m()},[m]),b=i*10,w=(0,Jt.useCallback)(L=>{t&&x()?.forward(L*b,!0)},[t,b]),C=(0,Jt.useCallback)(L=>{t&&x()?.truck(L*b,0,!0)},[t,b]),S=(0,Jt.useCallback)((L,V,R)=>{if(!t)return;h.current&&cancelAnimationFrame(h.current),f.current={control:L,amount:V,action:R},g.current=0,R(V);let F=U=>{if(!f.current)return;if(g.current===0){g.current=U,h.current=requestAnimationFrame(F);return}if(U-g.current>200){let{amount:D,action:q}=f.current;q(D),g.current=U}h.current=requestAnimationFrame(F)};h.current=requestAnimationFrame(F)},[t]),O=(0,Jt.useCallback)(L=>{f.current?.control===L&&(h.current&&(cancelAnimationFrame(h.current),h.current=void 0),f.current=null,g.current=0)},[]);return(0,Jt.useEffect)(()=>(window.addEventListener("mousemove",T),window.addEventListener("mouseup",E),window.addEventListener("touchmove",T,{passive:!1}),window.addEventListener("touchend",E),window.addEventListener("touchcancel",E),()=>{window.removeEventListener("mousemove",T),window.removeEventListener("mouseup",E),window.removeEventListener("touchmove",T),window.removeEventListener("touchend",E),window.removeEventListener("touchcancel",E),m(),h.current&&cancelAnimationFrame(h.current)}),[T,E,m]),t?(0,kn.jsx)("div",{className:"mc__wrapper",style:{opacity:n,...zw[a]},children:(0,kn.jsxs)("div",{className:"mc__dpad",children:[(0,kn.jsx)("button",{"aria-label":"Move forward",className:"mc__arrow mc__arrow--up",onMouseDown:()=>S("up",1,w),onMouseUp:()=>O("up"),onMouseLeave:()=>O("up"),onTouchStart:L=>{L.preventDefault(),S("up",1,w)},onTouchEnd:()=>O("up"),onTouchCancel:()=>O("up"),children:(0,kn.jsx)(Bc,{direction:"up"})}),(0,kn.jsxs)("div",{className:"mc__middle-row",children:[(0,kn.jsx)("button",{"aria-label":"Move left",className:"mc__arrow mc__arrow--left",onMouseDown:()=>S("left",-1,C),onMouseUp:()=>O("left"),onMouseLeave:()=>O("left"),onTouchStart:L=>{L.preventDefault(),S("left",-1,C)},onTouchEnd:()=>O("left"),onTouchCancel:()=>O("left"),children:(0,kn.jsx)(Bc,{direction:"left"})}),(0,kn.jsx)("div",{ref:o,className:"mc__joystick",onMouseDown:_,onTouchStart:_,children:(0,kn.jsx)("div",{className:"mc__knob",style:{transform:`translate(${s.x}px, ${s.y}px)`}})}),(0,kn.jsx)("button",{"aria-label":"Move right",className:"mc__arrow mc__arrow--right",onMouseDown:()=>S("right",1,C),onMouseUp:()=>O("right"),onMouseLeave:()=>O("right"),onTouchStart:L=>{L.preventDefault(),S("right",1,C)},onTouchEnd:()=>O("right"),onTouchCancel:()=>O("right"),children:(0,kn.jsx)(Bc,{direction:"right"})})]}),(0,kn.jsx)("button",{"aria-label":"Move backward",className:"mc__arrow mc__arrow--down",onMouseDown:()=>S("down",-1,w),onMouseUp:()=>O("down"),onMouseLeave:()=>O("down"),onTouchStart:L=>{L.preventDefault(),S("down",-1,w)},onTouchEnd:()=>O("down"),onTouchCancel:()=>O("down"),children:(0,kn.jsx)(Bc,{direction:"down"})})]})}):null},ob=Uw;var sb=require("react-colorful"),Hi=require("react/jsx-runtime"),sp=({colorPicker:e,onClose:t,itemMaterials:n,setItemMaterials:i,inline:r=!1})=>(0,Hi.jsxs)("div",{className:`ri-popover${r?" ri-popover--inline":""}`,style:r?{padding:12}:{left:e.x,top:e.y,width:"min(225px, calc(100vw - 24px))",padding:12},onPointerDown:a=>a.stopPropagation(),children:[(0,Hi.jsx)("p",{className:"ri-popoverLabel",children:"Color"}),(0,Hi.jsx)(sb.HexColorPicker,{color:n[e.objectId]?.hex??"#ffffff",onChange:a=>i(o=>({...o,[e.objectId]:{...o[e.objectId],hex:a}}))}),(0,Hi.jsxs)("div",{className:"ri-inlineRow",children:[(0,Hi.jsx)("span",{className:"ri-colorCode",children:n[e.objectId]?.hex??"#ffffff"}),(0,Hi.jsx)("button",{className:"ri-secondaryButton",onClick:t,children:"Done"})]})]});var $n=require("react/jsx-runtime"),lp=({materialPopup:e,textureUrl:t,triggerFileUpload:n,clearTexture:i,inline:r=!1})=>(0,$n.jsxs)("div",{className:`ri-popover${r?" ri-popover--inline":""}`,style:r?{overflow:"hidden"}:{left:e.x,top:e.y,width:"min(300px, calc(100vw - 24px))",overflow:"hidden"},onPointerDown:a=>a.stopPropagation(),children:[(0,$n.jsx)("div",{className:"ri-popoverHeader",children:(0,$n.jsx)("p",{className:"ri-popoverLabel",style:{marginBottom:0},children:"Material"})}),(0,$n.jsxs)("div",{className:"ri-materialBody",children:[t?(0,$n.jsx)("div",{className:"ri-previewFrame",children:(0,$n.jsx)("img",{src:t,alt:"texture preview",className:"ri-previewImage"})}):(0,$n.jsxs)("div",{className:"ri-emptyState",children:[(0,$n.jsx)("svg",{width:"24",height:"24",fill:"none",stroke:"currentColor",strokeWidth:1.5,viewBox:"0 0 24 24",children:(0,$n.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,$n.jsx)("span",{style:{fontSize:12},children:"No texture applied"})]}),(0,$n.jsx)("button",{onClick:()=>n(e.objectId),className:"ri-uploadButton",children:t?"Replace image":"Upload image"}),t&&(0,$n.jsx)("button",{onClick:()=>i(e.objectId),className:"ri-removeButton",children:"Remove texture"}),(0,$n.jsx)("p",{className:"ri-formatHint",children:"JPG \xB7 PNG \xB7 WebP"})]})]});var Mr=require("react");var gt=require("react/jsx-runtime");function lb({entries:e}){return(0,gt.jsx)(gt.Fragment,{children:e.map(([t,n])=>{let i=n!==null&&typeof n=="object",r=i?Object.entries(n):[];return i&&r.length>0?(0,gt.jsxs)("div",{className:"left-panel__data-group",children:[(0,gt.jsx)("span",{className:"left-panel__data-key",children:t}),(0,gt.jsx)("div",{className:"left-panel__data-children",children:(0,gt.jsx)(lb,{entries:r})})]},t):(0,gt.jsxs)("div",{className:"left-panel__data-row",children:[(0,gt.jsx)("span",{className:"left-panel__data-key",children:t}),(0,gt.jsx)("span",{className:`left-panel__data-value left-panel__data-value--${typeof n}`,children:i?Array.isArray(n)?"[]":"{}":String(n)})]},t)})})}function Vw({content:e}){let t=e!=null,[n,i]=(0,Mr.useState)(t),[r,a]=(0,Mr.useState)(t),o=(0,Mr.useRef)(e);return t&&(o.current=e),(0,Mr.useEffect)(()=>{if(t){i(!0);return}if(n){a(!1);let s=setTimeout(()=>i(!1),300);return()=>clearTimeout(s)}},[t,n]),(0,Mr.useEffect)(()=>{if(n&&t){let s=requestAnimationFrame(()=>a(!0));return()=>cancelAnimationFrame(s)}},[n,t]),n?(0,gt.jsx)("div",{className:`left-panel__action-extra${r?" left-panel__action-extra--open":""}`,children:(0,gt.jsx)("div",{className:"left-panel__action-extra-inner",children:e??o.current})}):null}function cp({isOpen:e,selectedObject:t,currentAction:n,onClose:i,onAction:r,renderActionExtra:a}){let[o,s]=(0,Mr.useState)(t);(0,Mr.useEffect)(()=>{t&&s(t)},[t]);let c=t??o,l=c?Object.entries(c).filter(([u])=>u!=="actions"):[];return(0,gt.jsx)("div",{className:`left-panel ${e?"left-panel--open":"left-panel--closed"}`,children:c&&(0,gt.jsxs)(gt.Fragment,{children:[(0,gt.jsxs)("div",{className:"left-panel__header",children:[(0,gt.jsx)("p",{className:"left-panel__title",children:c.label}),(0,gt.jsx)("button",{onClick:i,className:"left-panel__close-btn","aria-label":"Close panel",children:"\u2715"})]}),l.length>0&&(0,gt.jsx)("div",{className:"left-panel__data",children:(0,gt.jsx)(lb,{entries:l})}),(0,gt.jsx)("hr",{className:"left-panel__divider"}),c.actions&&c.actions.length>0&&(0,gt.jsxs)(gt.Fragment,{children:[(0,gt.jsx)("div",{className:"left-panel__actions-label",children:"Actions"}),(0,gt.jsx)("div",{className:"left-panel__actions-list",children:c.actions.map((u,d)=>{let h=n?.action.id===u.id&&(n.binding===c||n.binding?.id===c.id||n.binding?.modelObjectId===c.modelObjectId||n.objectId===c.id||n.objectId===c.modelObjectId),f=a?.(u.id);return(0,gt.jsxs)(Mr.Fragment,{children:[(0,gt.jsx)("button",{onClick:g=>r({objectId:c.modelObjectId||c.id||"",action:u,binding:c,screenX:g.clientX,screenY:g.clientY}),className:["left-panel__action-btn",`left-panel__action-btn--${u.id}`,h?"left-panel__action-btn--active":""].filter(Boolean).join(" "),"data-action-id":u.id,"data-label":u.label,children:u.label}),(0,gt.jsx)(Vw,{content:f})]},d)})})]})]})})}var Fs=require("react"),ub=require("lucide-react");var cb=require("react");var jn=require("react/jsx-runtime");function db({openButtonLabel:e,openButtonAriaLabel:t,eyebrow:n,title:i,searchValue:r,onSearchChange:a,searchPlaceholder:o,children:s,isOpen:c,onToggle:l,openButtonIcon:u,closeButtonIcon:d,closeButtonAriaLabel:h}){let[f,g]=(0,cb.useState)(!1),x=c!==void 0?c:f,P=y=>{c===void 0&&g(y),l?.(y)};return(0,jn.jsxs)("div",{className:`ri-sidepanel-wrap ${x?"ri-sidepanel-wrap--open":"ri-sidepanel-wrap--closed"}`,children:[!x&&(0,jn.jsxs)("button",{type:"button",className:"ri-sidepanel__open-btn",onClick:()=>P(!0),"aria-label":t,title:"Open panel",children:[u,e?(0,jn.jsx)("span",{children:e}):null]}),(0,jn.jsxs)("div",{className:`ri-sidepanel ${x?"ri-sidepanel--open":"ri-sidepanel--closed"}`,"aria-hidden":!x,children:[(0,jn.jsxs)("div",{className:"ri-sidepanel__header",children:[(0,jn.jsxs)("div",{className:"ri-sidepanel__header-top",children:[(0,jn.jsx)("span",{className:"ri-sidepanel__eyebrow",children:n}),(0,jn.jsx)("button",{type:"button",className:"ri-sidepanel__close-btn",onClick:()=>P(!1),"aria-label":h,title:"Close",children:d??(0,jn.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none","aria-hidden":"true",children:(0,jn.jsx)("path",{d:"M1 1L11 11M11 1L1 11",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})})})]}),(0,jn.jsx)("p",{className:"ri-sidepanel__title",children:i})]}),(0,jn.jsx)("div",{className:"ri-sidepanel__search-wrap",children:(0,jn.jsx)("input",{className:"ri-sidepanel__search",type:"text",placeholder:o,value:r,onChange:y=>a(y.target.value)})}),(0,jn.jsx)("div",{className:"ri-sidepanel__list",children:s})]})]})}var ii=require("react/jsx-runtime");function dp({objectBindings:e,onAction:t,onFocus:n,onHover:i,isOpen:r,onToggle:a}){let[o,s]=(0,Fs.useState)(null),[c,l]=(0,Fs.useState)(""),u=(0,Fs.useMemo)(()=>Object.entries(e).filter(([d,h])=>{let f=c.toLowerCase();return d.toLowerCase().includes(f)||(h.label??"").toLowerCase().includes(f)}),[e,c]);return(0,ii.jsx)(db,{openButtonLabel:"",openButtonAriaLabel:"Open scene objects panel",openButtonIcon:(0,ii.jsx)(ub.Boxes,{width:16,height:16,"aria-hidden":"true"}),eyebrow:"SCENE OBJECTS",title:`${u.length} visible entries`,searchValue:c,onSearchChange:l,searchPlaceholder:"Search nodes, labels",isOpen:r,onToggle:a,closeButtonAriaLabel:"Close scene objects panel",children:u.map(([d,h])=>{let f=h.visible!==!1,g=o===d;return(0,ii.jsxs)("div",{onClick:()=>n(h),onMouseEnter:()=>{s(d),i?.(h)},onMouseLeave:()=>{s(null),i?.(null)},className:`ri-sidepanel__row${g?" ri-sidepanel__row--hovered":""}`,children:[(0,ii.jsx)("span",{className:`ri-sidepanel__label${g?" ri-sidepanel__label--hovered":""}`,children:h.label??d}),(0,ii.jsx)("button",{type:"button",onClick:x=>{x.stopPropagation(),t?.({objectId:d,action:{id:"toggle-visibility",label:"Toggle Visibility",type:"command"},binding:h})},className:"ri-sidepanel__vis-btn",title:f?"Hide":"Show",children:(0,ii.jsx)("span",{className:`ri-sidepanel__checkbox${f?" ri-sidepanel__checkbox--checked":""}`,children:f&&(0,ii.jsx)("svg",{width:"9",height:"9",viewBox:"0 0 10 10",fill:"none",children:(0,ii.jsx)("path",{d:"M1.5 5L4 7.5L8.5 2.5",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})})})})]},d)})})}var Pe=require("lucide-react");var Nc=require("react"),up=(0,Nc.createContext)({isInsideEditor:!1,activeTab:"object",activeSubTab:"General",tier:"free"});var Cr=()=>(0,Nc.useContext)(up);var Gi=require("react/jsx-runtime");function bo({visible:e,message:t,tone:n="default",progress:i}){if(!e)return null;let r=typeof i=="number"&&Number.isFinite(i),a=r?Math.min(Math.max(i,0),100):0,o=Math.round(a);return(0,Gi.jsxs)("div",{className:"bb-loadingOverlay",role:"status","aria-live":"polite",children:[r&&(0,Gi.jsxs)("div",{className:"bb-loadingProgressRow",children:[(0,Gi.jsx)("div",{className:"bb-loadingProgress",role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":o,children:(0,Gi.jsx)("div",{className:"bb-loadingProgress__bar",style:{width:`${o}%`}})}),(0,Gi.jsxs)("span",{className:"bb-loadingProgress__label",children:[o,"%"]})]}),(0,Gi.jsx)("span",{className:`bb-loadingMessage bb-status--${n}`,children:t})]})}var pp=new WeakSet;function vo(e){pp.add(e)}function pb(e){let t=pp.has(e);return t&&pp.delete(e),t}var Be=require("react"),Uc=require("@react-three/fiber"),Vc=require("@react-three/drei"),it=require("three");var hb="data:image/png;base64,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";var mb="data:image/png;base64,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";var fb="data:image/png;base64,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";var Ge=require("react/jsx-runtime"),hp=-100,mp=100,Sb=.03,Gw=.03,Ww=.03,gb=.5,Xw=hb,qw=mb,Yw=fb,$w=Math.PI/4,bb=.4,xo=64,vb=Sb*3,fp="#4d7dff",xb="#ffcc00",yb=.02,Kw=new it.Vector3(0,1,0),Oc=32,wb="#ff9d3d",Ic=4;function gp(e){let t=new Float32Array((xo+1)*3);for(let n=0;n<=xo;n++){let i=n/xo*Math.PI*2,r=Math.cos(i)*bb,a=Math.sin(i)*bb,o=0,s=0,c=0;e==="x"?(s=r,c=a):e==="y"?(o=r,c=a):(o=r,s=a),t[n*3]=o,t[n*3+1]=s,t[n*3+2]=c}return t}function Zw(e){let t=Math.abs(e.y)<.99?new it.Vector3(0,1,0):new it.Vector3(1,0,0),n=new it.Vector3().crossVectors(e,t).normalize(),i=new it.Vector3().crossVectors(e,n).normalize();return[n,i]}function _b(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 yo=null,bp=new Set;function js(e){yo!==e&&(yo=e,bp.forEach(t=>t()))}function vp(e){return bp.add(e),()=>bp.delete(e)}function zc(){return yo}function Mb({light:e,position:t,rotation:n=[0,0,0],color:i,intensity:r,visible:a,onPositionChange:o,onRotationChange:s,onDraggingChange:c}){let{activeTab:l,activeSubTab:u,setActiveTab:d,setActiveSubTab:h}=Cr(),{camera:f,gl:g,raycaster:x,invalidate:P}=(0,Uc.useThree)(),y=(0,Be.useRef)(null),p=(0,Be.useRef)(null),m=(0,Be.useRef)(null),M=(0,Be.useRef)(null),_=(0,Be.useRef)(null),T=(0,Be.useRef)(null),E=(0,Be.useRef)(null),b=(0,Be.useRef)(null),w=(0,Be.useRef)(null),C=(0,Be.useRef)(null),S=(0,Be.useRef)(null),O=(0,Be.useMemo)(()=>new it.Matrix4,[]),L=(0,Be.useMemo)(()=>new it.Quaternion,[]),V=(0,Be.useMemo)(()=>new it.Vector3(1,1,1),[]),R=(0,Be.useRef)([0,0,0]),F=(0,Be.useRef)([0,0,0]),U=(0,Be.useRef)(!1),k=(0,Be.useRef)(null),D=(0,Be.useRef)(null),q=(0,Be.useRef)(null),$=(0,Be.useRef)(c);(0,Be.useEffect)(()=>{$.current=c},[c]);let pe=(0,Be.useMemo)(()=>new it.Vector3(t[0],t[1],t[2]),[t]),Ae=(0,Be.useMemo)(()=>new it.Euler(n[0],n[1],n[2]),[n]),ye=(0,Be.useMemo)(()=>new Float32Array(6),[]),Ee=(0,Be.useMemo)(()=>gp("x"),[]),Ue=(0,Be.useMemo)(()=>gp("y"),[]),Re=(0,Be.useMemo)(()=>gp("z"),[]),Wt=(0,Be.useMemo)(()=>new Float32Array((Oc+1)*3),[]),Tt=(0,Be.useMemo)(()=>new Float32Array(Ic*2*3),[]),Ze=e?.type==="point",Le=e?.type==="spot",re=Ze?qw:Le?Yw:Xw,It=Ze?Gw:Le?Ww:Sb,et=(0,Be.useMemo)(()=>new it.TextureLoader().load(re),[re]),Pt=(0,Be.useSyncExternalStore)(vp,zc,zc),xt=!!e&&Pt===e.id,je=(0,Be.useRef)(new it.Vector3),yt=(0,Be.useRef)(new it.Euler);(0,Be.useEffect)(()=>{U.current||(je.current.copy(pe),yt.current.copy(Ae),P())},[pe,Ae,P]),(0,Be.useEffect)(()=>{e&&yo===e.id&&!a&&js(null)},[e?.id,a]),(0,Be.useEffect)(()=>()=>{e&&yo===e.id&&js(null),q.current!==null&&(cancelAnimationFrame(q.current),q.current=null)},[e?.id]);let Qt=(0,Be.useCallback)(()=>{if(U.current||!xt)return;let Oe=je.current,J=new it.Quaternion().setFromEuler(yt.current);O.compose(Oe,J,V)},[O,V,xt]);(0,Uc.useFrame)(()=>{if(y.current&&y.current.position.copy(je.current),Qt(),m.current){m.current.lookAt(f.position);let Oe=f,J;Oe.isOrthographicCamera?J=It/Oe.zoom:J=f.position.distanceTo(je.current)*It,m.current.scale.setScalar(J)}if(E.current){let Oe=f,J;Oe.isOrthographicCamera?J=vb/Oe.zoom:J=f.position.distanceTo(je.current)*vb,E.current.scale.setScalar(J)}if(_.current){let Oe=_.current.getAttribute("position"),J=Oe.array;J[0]=0,J[1]=0,J[2]=0,J[3]=je.current.x,J[4]=je.current.y,J[5]=je.current.z,Oe.needsUpdate=!0,_.current.computeBoundingSphere()}if(T.current){let Oe=je.current,J=Oe.length();T.current.visible=J>gb,J>1e-6&&(T.current.position.copy(Oe).multiplyScalar(.5),T.current.scale.set(1,J,1),T.current.quaternion.setFromUnitVectors(Kw,Oe.clone().normalize()))}if(M.current&&(M.current.visible=je.current.length()>gb),Le&&b.current&&w.current&&C.current){let Oe=je.current,J=Oe.length();if(J>1e-6){b.current.visible=!0;let Se=Oe.clone().negate().normalize(),ce=J,ke=e?.angle??Math.PI/6,Ve=ce*Math.tan(ke),Fe=Oe.clone().add(Se.clone().multiplyScalar(ce)),[Ye,xe]=Zw(Se),wt=w.current.getAttribute("position"),mt=wt.array;for(let tt=0;tt<=Oc;tt++){let Qe=tt/Oc*Math.PI*2,Dn=Fe.x+(Ye.x*Math.cos(Qe)+xe.x*Math.sin(Qe))*Ve,zt=Fe.y+(Ye.y*Math.cos(Qe)+xe.y*Math.sin(Qe))*Ve,Un=Fe.z+(Ye.z*Math.cos(Qe)+xe.z*Math.sin(Qe))*Ve;mt[tt*3]=Dn,mt[tt*3+1]=zt,mt[tt*3+2]=Un}wt.needsUpdate=!0,w.current.computeBoundingSphere();let an=C.current.getAttribute("position"),en=an.array;for(let tt=0;tt<Ic;tt++){let Qe=tt/Ic*Math.PI*2,Dn=Fe.x+(Ye.x*Math.cos(Qe)+xe.x*Math.sin(Qe))*Ve,zt=Fe.y+(Ye.y*Math.cos(Qe)+xe.y*Math.sin(Qe))*Ve,Un=Fe.z+(Ye.z*Math.cos(Qe)+xe.z*Math.sin(Qe))*Ve,Vn=tt*6;en[Vn]=Oe.x,en[Vn+1]=Oe.y,en[Vn+2]=Oe.z,en[Vn+3]=Dn,en[Vn+4]=zt,en[Vn+5]=Un}an.needsUpdate=!0,C.current.computeBoundingSphere()}else b.current.visible=!1}});let we=(0,Be.useCallback)(()=>{q.current!==null&&(cancelAnimationFrame(q.current),q.current=null),R.current=t,F.current=[n[0],n[1],n[2]],U.current=!0,k.current=null,D.current=null,$.current?.(!0)},[t,n]),rn=(0,Be.useCallback)((Oe,J,Se,ce)=>{let ke=new it.Vector3(R.current[0],R.current[1],R.current[2]),Ve=new it.Vector3,Fe=new it.Quaternion,Ye=new it.Vector3;ce.decompose(Ve,Fe,Ye);let xe=ke.clone().applyMatrix4(ce),wt=[Math.min(Math.max(xe.x,hp),mp),Math.min(Math.max(xe.y,hp),mp),Math.min(Math.max(xe.z,hp),mp)],mt=new it.Quaternion().setFromEuler(new it.Euler(F.current[0],F.current[1],F.current[2],"XYZ")),an=new it.Quaternion().copy(Fe).multiply(mt),en=new it.Euler().setFromQuaternion(an,"XYZ"),tt=[en.x,en.y,en.z];je.current.set(wt[0],wt[1],wt[2]),yt.current.set(tt[0],tt[1],tt[2]),k.current=wt,D.current=tt;let Qe=new it.Quaternion().setFromEuler(yt.current);O.compose(je.current,Qe,V),P()},[O,V,P]),Zt=(0,Be.useCallback)(()=>{U.current=!1;let Oe=k.current,J=D.current;k.current=null,D.current=null;let Se=Oe&&!_b(Oe,R.current),ce=J&&!_b(J,F.current);Se&&o&&o(Oe),ce&&s&&s(J),Se||ce?q.current=requestAnimationFrame(()=>{q.current=null,$.current?.(!1)}):$.current?.(!1)},[o,s]);return(0,Be.useEffect)(()=>{let Oe=ce=>{let ke=g.domElement.getBoundingClientRect();return new it.Vector2((ce.clientX-ke.left)/ke.width*2-1,-((ce.clientY-ke.top)/ke.height)*2+1)},J=ce=>!!ce.target.closest?.("button, input, textarea, .ri-annotationPopup, .ri-colorPicker, .ri-materialPicker"),Se=ce=>{if(J(ce))return;let ke=Oe(ce);x.setFromCamera(ke,f);let Ve=[];if(p.current&&Ve.push(p.current),m.current&&Ve.push(m.current),Ve.length===0)return;if(x.intersectObjects(Ve,!1).length>0){let Ye=e?.id??null;yo!==Ye&&(js(Ye),d?.("scene"),h?.("Lighting")),ce.preventDefault(),ce.stopPropagation()}};return g.domElement.addEventListener("pointerdown",Se),()=>{g.domElement.removeEventListener("pointerdown",Se)}},[f,x,g,e,d,h]),l!=="scene"||u!=="Lighting"||!e||!a||e.type==="none"||e.type==="hemisphere"?null:(0,Ge.jsxs)("group",{ref:Oe=>{Oe&&Fh(Oe)},children:[(0,Ge.jsxs)("group",{ref:y,children:[(0,Ge.jsx)("sprite",{ref:m,children:(0,Ge.jsx)("spriteMaterial",{map:et,transparent:!0,opacity:.9,blending:it.AdditiveBlending,depthWrite:!1,rotation:Le?$w:0},re)}),(0,Ge.jsx)(Vc.Sphere,{ref:p,args:[.25,16,16],children:(0,Ge.jsx)("meshBasicMaterial",{transparent:!0,opacity:.01})}),Ze&&(0,Ge.jsxs)("group",{ref:E,children:[(0,Ge.jsxs)("lineLoop",{renderOrder:999,children:[(0,Ge.jsx)("bufferGeometry",{children:(0,Ge.jsx)("bufferAttribute",{attach:"attributes-position",args:[Ee,3],count:xo+1})}),(0,Ge.jsx)("lineBasicMaterial",{color:fp,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,Ge.jsxs)("lineLoop",{renderOrder:999,children:[(0,Ge.jsx)("bufferGeometry",{children:(0,Ge.jsx)("bufferAttribute",{attach:"attributes-position",args:[Ue,3],count:xo+1})}),(0,Ge.jsx)("lineBasicMaterial",{color:fp,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,Ge.jsxs)("lineLoop",{renderOrder:999,children:[(0,Ge.jsx)("bufferGeometry",{children:(0,Ge.jsx)("bufferAttribute",{attach:"attributes-position",args:[Re,3],count:xo+1})}),(0,Ge.jsx)("lineBasicMaterial",{color:fp,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]})]})]}),!Ze&&!Le&&(0,Ge.jsxs)(Ge.Fragment,{children:[(0,Ge.jsxs)("mesh",{ref:T,children:[(0,Ge.jsx)("cylinderGeometry",{args:[yb,yb,1,8,1,!0]}),(0,Ge.jsx)("meshBasicMaterial",{color:xb,transparent:!0,opacity:.05,blending:it.AdditiveBlending,depthWrite:!1,depthTest:!1})]}),(0,Ge.jsxs)("line",{ref:M,children:[(0,Ge.jsx)("bufferGeometry",{ref:_,children:(0,Ge.jsx)("bufferAttribute",{attach:"attributes-position",args:[ye,3],count:2})}),(0,Ge.jsx)("lineBasicMaterial",{color:xb,transparent:!0,opacity:.7,blending:it.AdditiveBlending})]})]}),Le&&(0,Ge.jsxs)("group",{ref:b,children:[(0,Ge.jsxs)("lineLoop",{renderOrder:999,children:[(0,Ge.jsx)("bufferGeometry",{ref:w,children:(0,Ge.jsx)("bufferAttribute",{attach:"attributes-position",args:[Wt,3],count:Oc+1})}),(0,Ge.jsx)("lineBasicMaterial",{color:wb,transparent:!0,opacity:.85,depthTest:!1,depthWrite:!1})]}),(0,Ge.jsxs)("lineSegments",{renderOrder:999,children:[(0,Ge.jsx)("bufferGeometry",{ref:C,children:(0,Ge.jsx)("bufferAttribute",{attach:"attributes-position",args:[Tt,3],count:Ic*2})}),(0,Ge.jsx)("lineBasicMaterial",{color:wb,transparent:!0,opacity:.5,depthTest:!1,depthWrite:!1})]})]}),xt&&o&&(0,Ge.jsx)(Vc.PivotControls,{ref:S,matrix:O,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:we,onDrag:rn,onDragEnd:Zt})]})}var Rt=require("react"),Pb=require("@react-three/drei"),jc=require("@react-three/fiber"),Mn=require("three");var Sn=require("three");function Fc(e){e.updateWorldMatrix(!0,!0);let t=new Sn.Matrix4().copy(e.matrixWorld).invert(),n=new Sn.Box3,i=new Sn.Box3,r=!1;return e.traverse(a=>{let o=a;if(!o.isMesh||!o.geometry||(o.geometry.boundingBox||o.geometry.computeBoundingBox(),!o.geometry.boundingBox))return;let s=new Sn.Matrix4().multiplyMatrices(t,a.matrixWorld);i.copy(o.geometry.boundingBox).applyMatrix4(s),n.union(i),r=!0}),r?n.getCenter(new Sn.Vector3):new Sn.Vector3}function Cb(e,t="XYZ"){return new Sn.Quaternion().setFromEuler(new Sn.Euler(e[0],e[1],e[2],t))}function Jw(e,t,n,i,r="XYZ"){let o=new Sn.Vector3(...i).multiply(new Sn.Vector3(...n)).applyQuaternion(Cb(t,r)).add(new Sn.Vector3(...e));return[o.x,o.y,o.z]}function Tb(e,t,n,i,r,a="XYZ"){let o=new Sn.Vector3(...Jw(e,t,i,r,a)),s=new Sn.Vector3(...r).multiply(new Sn.Vector3(...i)).applyQuaternion(Cb(n,a)),c=o.sub(s);return[c.x,c.y,c.z]}var xp=require("react/jsx-runtime");function yp({node:e,space:t,onTransformChange:n,onDraggingChange:i}){let r=(0,jc.useThree)(S=>S.invalidate),a=(0,Rt.useMemo)(()=>Fc(e),[e]),o=(0,Rt.useMemo)(()=>new Mn.Matrix4,[]),s=(0,Rt.useRef)(!1),c=(0,Rt.useRef)(new Mn.Matrix4),l=(0,Rt.useRef)(new Mn.Matrix4),u=(0,Rt.useRef)(null),d=(0,Rt.useRef)(0),h=(0,Rt.useRef)([]),f=(0,Rt.useRef)(null),g=(0,Rt.useRef)(i);g.current=i;let x=(0,Rt.useMemo)(()=>new Mn.Vector3,[]),P=(0,Rt.useMemo)(()=>new Mn.Quaternion,[]),y=(0,Rt.useMemo)(()=>new Mn.Vector3,[]),p=(0,Rt.useMemo)(()=>new Mn.Quaternion,[]),m=(0,Rt.useMemo)(()=>new Mn.Vector3(1,1,1),[]),M=(0,Rt.useMemo)(()=>new Mn.Quaternion,[]),_=(0,Rt.useMemo)(()=>new Mn.Vector3,[]),T=(0,Rt.useMemo)(()=>new Mn.Vector3,[]),E=(0,Rt.useRef)([0,0,0]),b=(0,Rt.useCallback)(()=>{s.current||(e.updateWorldMatrix(!0,!1),x.copy(a).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(P),p.copy(P),t==="world"&&p.identity(),o.compose(x,p,m))},[x,o,p,m,e,a,t,P]);(0,Rt.useLayoutEffect)(()=>(b(),()=>{let S=f.current!==null;S&&(cancelAnimationFrame(f.current),f.current=null),(s.current||S)&&(s.current=!1,g.current(!1));for(let O of h.current)oo(O);h.current=[]}),[b]),(0,jc.useFrame)(()=>b());let w=(0,Rt.useCallback)(()=>{f.current!==null&&(cancelAnimationFrame(f.current),f.current=null),e.updateWorldMatrix(!0,!0),h.current=[];for(let S of ao(e))xf(S)||($l(S,S.matrixWorld),h.current.push(S));e.updateWorldMatrix(!0,!1),x.copy(a).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(P),e.getWorldScale(y),c.current.compose(x,P,y),l.current.copy(o),E.current=[e.rotation.x,e.rotation.y,e.rotation.z],u.current=null,s.current=!0,i(!0)},[x,o,e,i,a,P,y]),C=(0,Rt.useCallback)((S,O)=>{let L=c.current.clone().premultiply(O),V=l.current.clone().premultiply(O);L.decompose(_,P,T);let R=_.clone();V.decompose(x,p,m),t==="world"&&p.identity(),o.compose(x,p,m),S.decompose(_,M,T);let F=new Mn.Euler().setFromQuaternion(M,e.rotation.order),[U,k,D]=E.current,q=[U+F.x,k+F.y,D+F.z],$=new Mn.Quaternion().setFromEuler(new Mn.Euler(q[0],q[1],q[2],e.rotation.order)),Ae=(e.parent?.matrixWorld||new Mn.Matrix4).clone().invert(),ye=R.clone().applyMatrix4(Ae),Ee=a.clone().multiply(e.scale).applyQuaternion($),Ue=ye.clone().sub(Ee),Re=[Ue.x,Ue.y,Ue.z];e.position.set(Re[0],Re[1],Re[2]),e.rotation.set(q[0],q[1],q[2],e.rotation.order),e.updateMatrixWorld(!0),r(),u.current={position:Re,rotation:q}},[x,M,o,p,m,r,e,a,_,T,t,P]);return(0,xp.jsx)("group",{children:(0,xp.jsx)(Pb.PivotControls,{matrix:o,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:w,onDrag:(S,O,L,V)=>C(O,V),onDragEnd:()=>{s.current=!1;let S=u.current;if(u.current=null,S)n(S),f.current=requestAnimationFrame(()=>{f.current=null,i(!1)});else if(h.current.length>0){for(let O of h.current)oo(O);e.updateMatrixWorld(!0),r(),i(!1)}else i(!1);h.current=[]}})})}var z=require("react/jsx-runtime");function Qw(e){let t=e.object;if(!t.isSkinnedMesh||!e.face||!t.skeleton)return null;let n=t.geometry,i=n.getAttribute("skinIndex"),r=n.getAttribute("skinWeight"),a=n.getAttribute("position");if(!i||!r||!a)return null;let o=t.worldToLocal(e.point.clone()),s=[e.face.a,e.face.b,e.face.c],c=new pt.Vector3,l=s[0],u=1/0;for(let f of s){c.fromBufferAttribute(a,f);let g=c.distanceToSquared(o);g<u&&(u=g,l=f)}let d=i.getComponent(l,0),h=r.getComponent(l,0);for(let f=1;f<4;f++){let g=r.getComponent(l,f);g>h&&(h=g,d=i.getComponent(l,f))}return t.skeleton.bones[d]??null}function e_(e){let t=Qw(e)??e.object,n=ss(t);if(!n)return null;t.updateWorldMatrix(!0,!1);let i=t.worldToLocal(e.point.clone());return{anchorNodeName:n,anchorLocalPosition:[i.x,i.y,i.z]}}function t_(e,t,n){if(!e.anchorNodeName||!e.anchorLocalPosition)return!1;let i=Ur(t,e.anchorNodeName);return i?(i.updateWorldMatrix(!0,!1),n.set(...e.anchorLocalPosition).applyMatrix4(i.matrixWorld),!0):!1}function n_({annotation:e,enabled:t,controlsRef:n,offsetRef:i}){let r=(0,wo.useThree)(h=>h.scene),a=(0,I.useRef)(null),o=(0,I.useRef)(!1),s=(0,I.useMemo)(()=>new pt.Vector3,[]),c=(0,I.useMemo)(()=>new pt.Vector3,[]),l=(0,I.useMemo)(()=>new pt.Vector3,[]),u=e?.anchorNodeName,d=e?.anchorLocalPosition;return(0,I.useEffect)(()=>{a.current=null,o.current=!1},[u,e?.id]),(0,wo.useFrame)(()=>{let h=n.current,f=i.current;if(!t||!h||!f||!u||!d){o.current=!1;return}let g=a.current;if((!g||!g.parent)&&(g=Ur(r,u),a.current=g),!g){o.current=!1;return}g.updateWorldMatrix(!0,!1),s.set(d[0],d[1],d[2]).applyMatrix4(g.matrixWorld),!(o.current&&s.distanceToSquared(c)<1e-8)&&(c.copy(s),o.current=!0,l.copy(s).add(f),h.setLookAt(l.x,l.y,l.z,s.x,s.y,s.z,!0))}),null}function r_(e){let t={total:0,missing:0};return e.traverse(n=>{let i=n;!i.isMesh||!i.geometry||(t.total+=1,i.geometry.getAttribute("uv")||(t.missing+=1))}),t}var i_=.2;function a_({enabled:e,speed:t,controlsRef:n}){let i=(0,wo.useThree)(r=>r.invalidate);return(0,wo.useFrame)((r,a)=>{!e||!n.current||(n.current.rotate(a*i_*t,0,!1),i())}),null}function o_(e,t,n){let i=t?.camera;if(!(i instanceof pt.PerspectiveCamera))return null;let a=(e instanceof pt.Box3?e:new pt.Box3().setFromObject(e)).getSize(new pt.Vector3).length();return!Number.isFinite(a)||a<=0?null:(i.near=a/100,i.far=a*100,i.updateProjectionMatrix(),t&&n===void 0&&(t.maxDistance=a*10),a)}function s_(e,t){let n=e.camera;if(!(n instanceof pt.PerspectiveCamera)||!(t>0))return;let i=Math.min(Math.max(e.distance/200,t/1e5),t/100);Math.abs(i-n.near)<=n.near*.01||(n.near=i,n.updateProjectionMatrix())}async function Ab(e,t,n=.6){let i=e.smoothTime;e.smoothTime=n;try{return await t()}finally{e.smoothTime=i}}function Hs({modelUrl:e,tilesetUrl:t,tilesErrorTarget:n=8,tilesCacheSize:i=800,onObjectCatalog:r,modelFormat:a,licenseKey:o,licenseValidationUrl:s,objectBindings:c,selectedObject:l,panelHoveredObject:u,onObjectBindingsChange:d,onObjectSelect:h,onObjectHover:f,onObjectEditLeaseChange:g,onModelLoaded:x,onLoadError:P,onProgress:y,onCameraControllerChange:p,cameraControllerType:m,onAction:M,onHiddenObjectsChange:_,onCameraChange:T,onViewerReady:E,onTextureUpload:b,onAnimationsReady:w,onAnnotationsChange:C,activeAnnotation:S,onActiveAnnotationChange:O,lights:L,camera:V,cameraLimits:R,backgroundColor:F,shadows:U=!0,showObjectBindingDataPanel:k=!0,customObjectBindingDataPanel:D,customSceneObjectsPanel:q,showSceneObjectsPanel:$=!0,showDownloadButton:pe=!0,downloadFilename:Ae="model",showResetButton:ye=!0,showLoadingOverlay:Ee=!0,showMouseController:Ue=!1,mouseControllerPosition:Re="center-bottom",mouseControllerOpacity:Wt=1,moveSensitivity:Tt=.08,zoomSensitivity:Ze=1,sceneConfig:Le,onSceneConfigChange:re,disableZoom:It=!1,zoomOnSelected:et=!0,highlightOnHover:Pt=!0,enableCameraControls:xt=!0,onAutoFit:je,refitOnResize:yt=!0,renderMode:Qt="demand",maxDpr:we=2,preserveDrawingBuffer:rn=!1,performanceProfile:Zt="auto",dracoDecoderPath:Oe,ktx2TranscoderPath:J,meshopt:Se=!0,showMeasureTools:ce=!1,showUvCheckerButton:ke=!1,showExplodeControls:Ve=!1,cinematic:Fe,measurementUnit:Ye="m",enableXR:xe=!1,usdzUrl:wt,arScaleMode:mt="normalized",mobileHandoffUrl:an,showAnnotationNavigation:en=!0,showAnnotationOnHover:tt=!1,moveModeEnabled:Qe=!1,objectTransformSpace:Dn="world",enableKeyboardNavigation:zt=!1,showViewGizmo:Un=!1,autoRotate:Vn=!1,autoRotateSpeed:on=1}){let{isInsideEditor:j,activeTab:A,activeSubTab:G}=Cr(),ee=j&&A==="scene"&&G==="Lighting",oe=Dc(o,s),ae=(0,I.useMemo)(()=>Le??Li,[Le]),[se,kt]=(0,I.useState)(null),nt=ae.model.renderer==="uv-checker",At=ke?se??nt:nt,at=(0,I.useMemo)(()=>{let v=At?"uv-checker":nt?"pbr":ae.model.renderer;return v===ae.model.renderer?ae:{...ae,model:{...ae.model,renderer:v}}},[nt,ae,At]);(0,I.useEffect)(()=>{kt(null)},[e,ae.model.renderer,ke,t]);let Et=(0,I.useMemo)(()=>{if(F)return F;let v=ae.background;return v.enabled&&v.type==="color"?v.color:"#1c1c1d"},[F,ae]),Me=(0,I.useMemo)(()=>({dracoDecoderPath:Oe,ktx2TranscoderPath:J,meshopt:Se}),[Oe,J,Se]),Xt=(0,I.useMemo)(()=>tm(Zt),[Zt]),_e=(0,I.useRef)(null),[sn,Kn]=(0,I.useState)("orbit"),[Bn,Pn]=(0,I.useState)(!1),Gn=m!==void 0?m:sn,Xr=(0,I.useCallback)(v=>{Pn(!1),v!==Gn&&(Kn(v),p?.(v))},[Gn,p]),[Ti,ci]=(0,I.useState)(!1);(0,I.useEffect)(()=>{_e.current&&(_e.current.dollySpeed=Math.max(Ze,0))},[Ze]),(0,I.useEffect)(()=>{_e.current&&(_e.current.enabled=xt&&!Ti)},[xt,Ti]);let vn=(0,I.useRef)(null),cr=(0,I.useRef)(new Map),ea=(0,I.useRef)(null),Ut=(0,I.useRef)(null),dr=(0,I.useRef)(null),di=(0,I.useRef)({});(0,I.useEffect)(()=>()=>{for(let v of Object.values(di.current))URL.revokeObjectURL(v)},[]);let ur=(0,I.useRef)({}),[,La]=(0,I.useState)(0),rl=(0,I.useCallback)(()=>{La(v=>v+1)},[]),Eo=(0,I.useRef)({}),il=(0,I.useRef)(null),Zn=(0,I.useRef)(null),[Vt,Ro]=(0,I.useState)(null),qr=(0,I.useCallback)(v=>{Zn.current=v,Ro(v)},[]),ka=(0,I.useRef)(new Set),ui=(0,I.useRef)(null);(0,I.useEffect)(()=>{let v=Vt;if(!v||!zt||!xt||Qe)return;let N=new Set(["w","a","s","d"," ","c"]),le=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"]),ue=0,me=ut=>ut.code==="Space"?" ":ut.key.toLowerCase(),Ft=()=>{ka.current.clear(),ue=0,ui.current!==null&&(cancelAnimationFrame(ui.current),ui.current=null)},Bt=ut=>{let yn=_e.current,ft=ka.current;if(!yn||ft.size===0){ui.current=null,ue=0;return}let On=ue?Math.min((ut-ue)/1e3,.05):1/60;ue=ut;let mn=Math.max(yn.distance*.75,.01)*On;ft.has("w")&&yn.forward(mn,!1),ft.has("s")&&yn.forward(-mn,!1),ft.has("a")&&yn.truck(-mn,0,!1),ft.has("d")&&yn.truck(mn,0,!1),ft.has(" ")&&yn.truck(0,mn,!1),ft.has("c")&&yn.truck(0,-mn,!1),ui.current=requestAnimationFrame(Bt)},xn=ut=>{if(ut.target!==v){Ft();return}if(le.has(ut.key)){let ft=_e.current;if(!ft)return;ut.preventDefault();let On=Math.PI/90,mn=Math.max(ft.distance*.05,.01);ut.key==="ArrowUp"?ut.shiftKey?ft.forward(mn,!0):ft.rotate(0,-On,!0):ut.key==="ArrowDown"?ut.shiftKey?ft.forward(-mn,!0):ft.rotate(0,On,!0):ut.key==="ArrowLeft"?ft.rotate(-On,0,!0):ft.rotate(On,0,!0);return}let yn=me(ut);N.has(yn)&&(ut.preventDefault(),ka.current.add(yn),ui.current===null&&(ui.current=requestAnimationFrame(Bt)))},hn=ut=>{ka.current.delete(me(ut))};return v.addEventListener("keydown",xn),v.addEventListener("keyup",hn),v.addEventListener("blur",Ft),()=>{v.removeEventListener("keydown",xn),v.removeEventListener("keyup",hn),v.removeEventListener("blur",Ft),Ft()}},[Vt,xt,zt,Qe]);let Lo=(0,I.useRef)(null),[Da,Ba]=(0,I.useState)(c),[Nn,Na]=(0,I.useState)({}),[pr,ta]=(0,I.useState)(null),[ko,al]=(0,I.useState)(null),[Do,Bo]=(0,I.useState)(null),[xd,yd]=(0,I.useState)(null),[rr,ol]=(0,I.useState)(null),[Yr,Oa]=(0,I.useState)(null),An=(0,I.useRef)(null),Ia=(0,I.useRef)(null),No=(0,I.useRef)(0),sl=(0,I.useRef)(null),[wd,ll]=(0,I.useState)(0),$r=(0,I.useRef)(!1),na=(0,I.useRef)(!1),Oo=(0,I.useRef)(!!V);Oo.current=!!V;let Lr=(0,I.useRef)(null),[cl,ra]=(0,I.useState)(!!e),[Io,ia]=(0,I.useState)(!e||!!je||!!V),[pi,zo]=(0,I.useState)(!1),[_d,Uo]=(0,I.useState)(!1),[dl,aa]=(0,I.useState)(!1),[ul,pl]=(0,I.useState)(!1),[hl,Sd]=(0,I.useState)(null),[Md,Vo]=(0,I.useState)(!1),[hr,ml]=(0,I.useState)({total:0,missing:0}),[B,W]=(0,I.useState)("Loading model..."),[ie,he]=(0,I.useState)(null),Ie=(0,I.useRef)({}),dt=(0,I.useCallback)(()=>{let v=_e.current;if(!v||Lr.current)return;let N=v.getPosition(new pt.Vector3),le=v.getTarget(new pt.Vector3);Lr.current={position:[N.x,N.y,N.z],target:[le.x,le.y,le.z]}},[]),[_t,ot]=(0,I.useState)(!1),[kr,eh]=(0,I.useState)(0),[Cd,th]=(0,I.useState)(!1);(0,I.useEffect)(()=>{eh(0),th(!1)},[e,t]);let Fo=(0,I.useMemo)(()=>{let v=ae.cinematic,N=v?.enabled?{waypoints:v.waypoints,duration:v.duration,loop:v.loop,autoPlay:v.autoPlay}:null;return Fe===void 0?N&&(N.waypoints?.length??0)>=2?N:null:Fe===!1?null:Fe===!0?N??{}:{...N??{},...Fe}},[Fe,ae]),[oa,Kr]=(0,I.useState)(!1),[_0,za]=(0,I.useState)(!1),Td=(0,I.useRef)(!1);(0,I.useEffect)(()=>{Kr(!1),za(!1),Td.current=!1},[e,t]),(0,I.useEffect)(()=>{!Fo?.autoPlay||Td.current||pi&&Io&&!cl&&(Td.current=!0,Kr(!0),za(!1))},[Fo,pi,Io,cl]);let{xrStore:sa,presenterRef:S0,arSupported:Pd,vrSupported:nh,quickLookSupported:rh,resolvedMobileHandoffUrl:fl,isMobileHandoffOpen:ih,arOverlay:M0,openMobileHandoff:C0,closeMobileHandoff:ah,openQuickLook:T0,handleARStateChange:P0}=om({enableXR:xe,usdzUrl:wt,mobileHandoffUrl:an}),[Zr,oh]=(0,I.useState)(()=>Le?.annotations??[]);(0,I.useEffect)(()=>{if(Zr.length>0){let v=Zr.reduce((N,le)=>Math.max(N,le.id),0);vl.current=v}else vl.current=0},[Zr]);let[Jn,gl]=(0,I.useState)(null),[Pi,bl]=(0,I.useState)({title:"",description:""}),vl=(0,I.useRef)(0),[A0,sh]=(0,I.useState)(null),[mr,Ua]=(0,I.useState)(-1),[lh,xl]=(0,I.useState)(!1),Va=(0,I.useRef)(null),ln=(0,I.useMemo)(()=>[...Zr].sort((v,N)=>v.id-N.id),[Zr]),yl=(0,I.useMemo)(()=>mr<0||mr>=ln.length?null:ln[mr],[mr,ln]),Jr=(0,I.useCallback)(v=>{if(S!==void 0){O?.(v);return}sh(v?{annotation:v}:null)},[S,O]),Fa=(0,I.useCallback)(v=>{let N=_e.current,le=An.current;if(!N)return;let ue=new pt.Vector3,me=cr.current.get(v.id);me?ue.copy(me):le&&t_(v,le,ue)||ue.set(v.worldPosition[0],v.worldPosition[1],v.worldPosition[2]),vn.current=null;let Ft=N.smoothTime;N.smoothTime=.6;let Bt=v.worldNormal;if(le){let xn=new pt.Box3().setFromObject(le),hn=new pt.Vector3;xn.getCenter(hn);let ut=new pt.Vector3;xn.getSize(ut);let yn=ut.length()*.2,ft;Bt?ft=new pt.Vector3(Bt[0],Bt[1],Bt[2]):ft=ue.clone().sub(hn),ft.lengthSq()<1e-6&&ft.set(0,0,1),ft.normalize();let On=Math.max(yn*.6,.3),mn=ue.clone().add(ft.multiplyScalar(On));N.setPosition(mn.x,mn.y,mn.z,!0),v.anchorNodeName&&v.anchorLocalPosition&&(vn.current=mn.clone().sub(ue))}N.setTarget(ue.x,ue.y,ue.z,!0),Va.current&&clearTimeout(Va.current),Va.current=setTimeout(()=>{N.smoothTime=Ft,Va.current=null},800),Jr(v)},[Jr]),E0=(0,I.useCallback)(()=>{ln.length!==0&&(ot(!0),Ua(0),Fa(ln[0]))},[ln,Fa]),R0=(0,I.useCallback)(()=>{if(ln.length===0||mr<0)return;xl(!0);let v=(mr-1+ln.length)%ln.length;Ua(v),Fa(ln[v]),setTimeout(()=>xl(!1),500)},[mr,ln,Fa]),L0=(0,I.useCallback)(()=>{if(ln.length===0||mr<0)return;if(mr===ln.length-1){if(ot(!1),Ua(-1),Jr(null),_e.current&&Lr.current){let N=Lr.current;_e.current.setLookAt(N.position[0],N.position[1],N.position[2],N.target[0],N.target[1],N.target[2],!0)}return}xl(!0);let v=mr+1;Ua(v),Fa(ln[v]),setTimeout(()=>xl(!1),500)},[mr,ln,Fa,Jr]),k0=(0,I.useCallback)(()=>{if(ot(!1),Ua(-1),Jr(null),_e.current&&Lr.current){let v=Lr.current;_e.current.setLookAt(v.position[0],v.position[1],v.position[2],v.target[0],v.target[1],v.target[2],!0)}},[Jr]);(0,I.useEffect)(()=>{Ua(-1),ot(!1)},[ln.length]),(0,I.useEffect)(()=>()=>{Va.current&&clearTimeout(Va.current)},[]),(0,I.useEffect)(()=>{yl&&_t&&Jr(yl)},[yl,Jr,_t]),(0,I.useEffect)(()=>{if(Le?.annotations===void 0)return;let v=Le.annotations.map(N=>({...N,localPosition:N.localPosition??N.worldPosition}));oh(v)},[Le?.annotations]);let jo=(0,I.useCallback)(()=>{if(S!==void 0){O?.(null);return}sh(null)},[S,O]),Ho=S!==void 0?S:A0?.annotation??null,Go=(0,I.useMemo)(()=>Ho?Zr.find(N=>N.id===Ho.id)??null:null,[Ho,Zr]);(0,I.useEffect)(()=>{Ho&&!Go&&jo()},[Ho,Go,jo]);let Wo=d!==void 0,Dt=Wo?c:Da;Ie.current=Dt;let D0=(0,I.useMemo)(()=>Object.entries(Dt).map(([v,N])=>JSON.stringify([v,N.modelObjectId,N.transform??null])).sort().join(""),[Dt]),{measureMode:Xo,measureModeRef:B0,measurePoints:ch,showDimensions:Ad,measureBox:dh,modelBounds:N0,refreshBounds:uh,clearMeasurements:O0,toggleMeasureMode:I0,toggleDimensions:z0,handleMeasurePointerDown:U0,handleMeasureClick:V0}=Qh({canvasAreaRef:Zn,controlsRef:_e,sceneRef:An,modelUrl:e,modelRotation:ae.model.rotation,bindingTransformSignature:D0,modelLoaded:pi}),{isDownloading:Ed,downloadMenuOpen:F0,uvExportError:ph,toggleDownloadMenu:j0,handleDownloadMesh:H0,handleDownloadScreenshot:G0,handleDownloadUvLayout:W0}=Jh({sceneRef:An,materialRefs:Eo,rendererCaptureRef:dr,objectBindings:Dt,downloadFilename:Ae}),hh=(0,I.useMemo)(()=>Object.fromEntries(Object.entries(Dt).filter(([,v])=>v.visible===!1).map(([v])=>[v,!0])),[Dt]),hi=(0,I.useMemo)(()=>{let v=new WeakMap,N=new Map,le=new Map;for(let[ue,me]of Object.entries(Dt))v.set(me,ue),N.has(me.id)||N.set(me.id,ue),le.has(me.modelObjectId)||le.set(me.modelObjectId,ue);return{byReference:v,byId:N,byModelObjectId:le}},[Dt]),Ai=(0,I.useCallback)(v=>v?hi.byReference.get(v)??hi.byModelObjectId.get(v.modelObjectId)??hi.byId.get(v.id)??null:null,[hi]),Rd=l!==void 0,qo=Rd?l??null:xd,Dr=Ai(qo),Ld=Dr?ur.current[Dr]??null:null,mh=Ai(Pt?u??ko??Do:null),X0=mh?ur.current[mh]??null:null,fh=(0,I.useCallback)(v=>{Bo(v),f?.(v)},[f]),gh=k&&qo!==null&&Dr!==null,bh=(Dr?Dt[Dr]:null)??qo;(0,I.useEffect)(()=>{Wo||Ba(c)},[Wo,c]),(0,I.useEffect)(()=>{_?.(hh)},[hh,_]);let ja=(0,I.useCallback)(v=>{if(Gn==="pointerLock"){Xr("orbit");return}Rd||yd(v),h?.(v)},[Gn,Xr,Rd,h]),Ha=(0,I.useCallback)(v=>{Wo||Ba(v),d?.(v)},[Wo,d]),q0=(0,I.useCallback)(v=>{let N=Dr;if(!N||!v)return;let le=Ie.current[N];le&&Ha({...Ie.current,[N]:{...le,transform:{...le.transform,...v}}})},[Ha,Dr]),mi=(0,I.useCallback)((v,N)=>Dt[v]?v:N?Ai(N):hi.byId.get(v)??hi.byModelObjectId.get(v)??null,[Dt,Ai,hi]),Yo=(0,I.useCallback)((v,N)=>{let le=mi(v),ue=le?Dt[le]:void 0;!le||!ue||Ha({...Dt,[le]:{...ue,style:N(ue.style)}})},[mi,Dt,Ha]),fr=(0,I.useCallback)(()=>{if(rr){let v=Nn[rr.objectId]?.hex;v!==void 0&&(Yo(rr.objectId,N=>({...N,material:{...N?.material,baseColor:v}})),Na(N=>({...N,[rr.objectId]:{}})))}ol(null)},[rr,Nn,Yo]),vh=(0,I.useCallback)(()=>{ja(null),ta(null),fr(),Oa(null)},[ja,fr]),kd=(0,I.useCallback)((v,N,le,ue,me)=>{let Ft=il.current,Bt=Zn.current,xn=_e.current?.camera;if(!Ft)return{objectId:v,x:24,y:24};let hn=Ft.getBoundingClientRect(),ut=12,yn=hn.width-N-ut,ft=hn.height-le-ut,On=Math.max(ut,(hn.width-N)/2),mn=Math.max(ut,(hn.height-le)/2),Wa=mi(v,ue),Zo=Wa?ur.current[Wa]:null,Qr=(Xa,la)=>la<=ut?ut:Math.min(Math.max(Xa,ut),la);if(Bt&&xn&&Zo){let Xa=Bt.getBoundingClientRect(),la=new pt.Vector3;new pt.Box3().setFromObject(Zo).getCenter(la),la.project(xn);let cx=(la.x+1)/2*Xa.width+(Xa.left-hn.left),dx=(1-la.y)/2*Xa.height+(Xa.top-hn.top);return{objectId:v,x:Qr(cx+24,yn),y:Qr(dx-le/2,ft)}}let Od=typeof me?.screenX=="number"?me.screenX-hn.left:On,Id=typeof me?.screenY=="number"?me.screenY-hn.top:mn;return{objectId:v,x:Qr(Od,yn),y:Qr(Id,ft)}},[mi]),wl=(0,I.useCallback)(v=>{let{objectId:N,action:le,binding:ue}=v;switch(ta(v),le.id){case"toggle-visibility":{let me=N;ue?.modelObjectId&&(me=hi.byModelObjectId.get(ue.modelObjectId)??me);let Ft=Dt[me],Bt=Ft?.visible===!1;Ft&&Ha({...Dt,[me]:{...Ft,visible:Bt}});break}case"change-color":fr(),Oa(null),Na(me=>{let Ft=mi(N,ue)??N,Bt=me[N]?.hex,xn=Dt[Ft]?.style?.material?.baseColor;return{...me,[N]:{...me[N],hex:Bt??xn??"#ffffff"}}}),ol(kd(N,225,250,ue,v));break;case"change-material":fr(),Oa(kd(N,300,320,ue,v));break;default:break}M?.(v)},[Ha,Dt,kd,M,fr,mi,hi]);(0,I.useEffect)(()=>{if(rr)return window.addEventListener("pointerdown",fr),()=>window.removeEventListener("pointerdown",fr)},[rr,fr]),(0,I.useEffect)(()=>{if(!Yr)return;let v=()=>Oa(null);return window.addEventListener("pointerdown",v),()=>window.removeEventListener("pointerdown",v)},[Yr]),(0,I.useEffect)(()=>{if(!Go)return;let v=N=>{if(Lo.current&&!Lo.current.contains(N.target)){if(N.target.closest?.(".ri-annotationMarker"))return;jo()}};return document.addEventListener("mousedown",v),document.addEventListener("touchstart",v),()=>{document.removeEventListener("mousedown",v),document.removeEventListener("touchstart",v)}},[Go,jo]),(0,I.useEffect)(()=>{if(!Jn)return;let v=N=>{let le=N.target;if(le.closest?.(".ri-annotationPopup")||le.closest?.("button, input, textarea, .ri-measureTools, .ri-xrTools, .ri-buttonContainer"))return;let ue=Zn.current;!ue||!ue.contains(le)||(gl(null),bl({title:"",description:""}))};return document.addEventListener("mousedown",v,!0),document.addEventListener("touchstart",v,!0),()=>{document.removeEventListener("mousedown",v,!0),document.removeEventListener("touchstart",v,!0)}},[Jn]);let xh=(0,I.useCallback)((v,N)=>{let le=di.current[v];le&&URL.revokeObjectURL(le),N.startsWith("blob:")?di.current[v]=N:delete di.current[v],Yo(v,ue=>({...ue,material:{...ue?.material,texture:{path:N}}}))},[Yo]),Y0=v=>{let N=v.target.files?.[0],le=Ut.current;if(!N||!le)return;let ue=mi(le);ue&&(b?b(N,ue).then(me=>xh(ue,me),me=>console.error("onTextureUpload failed:",me)):xh(ue,URL.createObjectURL(N)),v.target.value="")},yh=v=>{Ut.current=v,ea.current?.click()},wh=v=>{let N=mi(v);if(!N)return;Yo(N,ue=>ue?.material?.texture?{...ue,material:{...ue.material,texture:void 0}}:ue);let le=di.current[N];le&&(URL.revokeObjectURL(le),delete di.current[N])},Dd=(0,I.useRef)(E);Dd.current=E;let Br=(0,I.useCallback)(()=>{let v=_e.current;!v||!Dd.current||Dd.current({controls:v,scene:An.current,objectBindings:Ie.current,nodeRefs:ur.current,homeCameraState:Lr.current,captureImage:N=>Ml(dr.current,N),invalidate:()=>dr.current?.invalidate()})},[]),Ga=(0,I.useCallback)(async(v=!1)=>{let N=_e.current,le=Ia.current??An.current;if(!N||!le)return!1;try{if(v){let ue=(le instanceof pt.Box3?le:new pt.Box3().setFromObject(le)).getBoundingSphere(new pt.Sphere),me=ue.center.clone(),Bt=N.getPosition(new pt.Vector3).clone().sub(N.getTarget(new pt.Vector3));Bt.lengthSq()<1e-6&&Bt.set(0,0,1),Bt.normalize();let xn=Math.max(ue.radius*10,20),hn=me.clone().add(Bt.multiplyScalar(xn));await N.setLookAt(hn.x,hn.y,hn.z,me.x,me.y,me.z,!1)}return ia(!0),await Ab(N,()=>N.fitToBox(le,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),await new Promise(ue=>{let me=performance.now(),Ft=()=>{N.active===!1||performance.now()-me>8e3?(N.dispatchEvent({type:"update"}),dr.current?.invalidate(),ue()):(dr.current?.invalidate(),setTimeout(Ft,100))};setTimeout(Ft,100)}),$r.current=!0,dt(),Br(),!0}catch(ue){return console.error("Fit scene error:",ue),!1}},[dt,Br]);(0,I.useEffect)(()=>{if($r.current=!1,na.current=!1,Lr.current=null,An.current=null,Ia.current=null,zo(!1),Uo(!1),aa(!1),ml({total:0,missing:0}),W("Loading model..."),he(null),!e){ra(!1),ia(!0);return}ra(!0),ia(!!je||Oo.current);let v=!1,N=null,le=me=>{N=setTimeout(ue,me)},ue=()=>{if(v||$r.current||na.current)return;let me=Ia.current??An.current;if(!_e.current||!me){le(100);return}if(No.current=o_(me,_e.current,R?.maxDistance)??No.current,pb(_e.current)){$r.current=!0,dt(),Br(),ra(!1),ia(!0),dr.current?.invalidate();return}na.current=!0,(je?je():Oo.current?Promise.resolve(!0):Ga(!0)).then(Bt=>{$r.current=Bt!==!1,$r.current?(dt(),Br(),ra(!1)):v||le(100)}).catch(()=>{$r.current=!1,v||le(100)}).finally(()=>{na.current=!1})};return le(50),()=>{v=!0,N&&clearTimeout(N)}},[dt,R?.maxDistance,Ga,e,Br,je,t]),(0,I.useEffect)(()=>{if(!yt)return;let v=Vt;if(!v)return;let N=null,le=new ResizeObserver(()=>{!$r.current||na.current||(N&&clearTimeout(N),N=setTimeout(()=>{Ga()},150))});return le.observe(v),()=>{le.disconnect(),N&&clearTimeout(N)}},[Vt,Ga,yt]);let _h=(0,I.useCallback)(v=>{if(B0.current||(Kr(!1),fr(),Oa(null),ta(null),ja(v),It||!et))return;let N=_e.current,le=Ai(v),ue=le?ur.current[le]:null;N&&v.cameraState?.position&&v.cameraState?.target?(N.setPosition(v.cameraState.position[0],v.cameraState.position[1],v.cameraState.position[2],!0),N.setTarget(v.cameraState.target[0],v.cameraState.target[1],v.cameraState.target[2],!0)):N&&ue&&N.fitToBox(ue,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[ja,fr,Ai,It,et]),Sh=(0,I.useCallback)(v=>{if(ja(v),It)return;let N=_e.current,le=Ai(v),ue=le?ur.current[le]:null;if(!N||!ue)return;let me=v.cameraState;me?.position&&me?.target?(N.setPosition(me.position[0],me.position[1],me.position[2],!0),N.setTarget(me.target[0],me.target[1],me.target[2],!0)):N.fitToBox(ue,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[ja,Ai,It]);(0,I.useEffect)(()=>{Br()},[Br]);let Mh=(0,I.useCallback)((v,N)=>{s_(N,No.current),T?.(v,N),Br()},[Br,T]),$0=(0,I.useCallback)(v=>{sl.current=new Set(v.map(N=>N.name)),ll(N=>N+1),r?.(v)},[r]),K0=(0,I.useCallback)(v=>{Ia.current=v,dr.current?.invalidate()},[]),Ch=(0,I.useCallback)(v=>{An.current=v,uh(v),ml(r_(v));let N=es(v);Sd(N>ca?N:null),Vo(!1),he(null),N>ca&&W(`Preparing large model (${Math.round(N/1e6)}M triangles) \u2014 the first display can take a while on this device...`),zo(!0),Uo(!1),pl(!1),x?.(v),Br()},[Br,x,uh]),Th=(0,I.useCallback)(v=>{ra(!1),ia(!0),Uo(!0),P?.(v)},[P]),Z0=(0,I.useCallback)(v=>{v.lengthComputable&&v.total>0&&he(v.loaded/v.total*100),y?.(v)},[y]),Ph=(0,I.useCallback)((v,N,le)=>{if(!re)return;let ue={...ae,lighting:{...ae.lighting,lights:ae.lighting.lights.map(me=>me.id===v?{...me,position:N,...le?{rotation:le}:{}}:me)}};re(ue)},[ae,re]);(0,I.useEffect)(()=>{let v=An.current;if(!pi||!v){aa(!1);return}let N=Object.entries(Dt);if(N.length===0){aa(!1);return}let le=t?sl.current:new Set(Object.keys(eo(v).nodesById));if(!le||le.size===0){aa(!1);return}let ue=N.some(([me,Ft])=>!le.has(Ft.modelObjectId??me));aa(ue)},[pi,Dt,wd,t]);let Bd=(0,I.useCallback)(async()=>{if(je){await je();return}let v=_e.current;if(!v)return;let N=Lr.current;try{N?await Ab(v,()=>v.setLookAt(N.position[0],N.position[1],N.position[2],N.target[0],N.target[1],N.target[2],!0)):await Ga()}catch(le){console.error("Reset camera error:",le)}},[je,Ga]),iS=(0,I.useCallback)(()=>{za(!1),Kr(!0)},[]),aS=(0,I.useCallback)(()=>{Kr(!1)},[]),J0=(0,I.useCallback)(()=>{Kr(!1),za(!0),setTimeout(()=>{Bd()},100)},[Bd]),Q0=(0,I.useCallback)((v,N)=>{Mh(v,N)},[Mh]),ex=(0,I.useCallback)(v=>{let N=A==="scene"&&G==="Annotations";if(v.target.closest("button, input, textarea, .ri-colorPicker, .ri-materialPicker, .ri-annotationPopup, .ri-annotationMarker, .ri-viewAnnotationPopup"))return;let ue=Zn.current,me=_e.current,Ft=me?.camera,Bt=An.current;if(!ue||!me||!Ft||!Bt||!N&&!me.enabled)return;let xn=ue.getBoundingClientRect(),hn=(v.clientX-xn.left)/xn.width*2-1,ut=-((v.clientY-xn.top)/xn.height)*2+1,yn=new pt.Raycaster;yn.setFromCamera(new pt.Vector2(hn,ut),Ft);let ft=yn.intersectObject(Bt,!0);if(ft.length===0)return;if(!N){let{x:Qr,y:Od,z:Id}=ft[0].point;me.setOrbitPoint(Qr,Od,Id);return}let On=ft[0],mn=On.point,Wa=Bt.worldToLocal(On.point.clone()),Zo=[0,0,1];if(On.face){let Qr=On.face.normal.clone().transformDirection(On.object.matrixWorld).normalize();Zo=[Qr.x,Qr.y,Qr.z]}gl({worldPosition:[mn.x,mn.y,mn.z],localPosition:[Wa.x,Wa.y,Wa.z],worldNormal:Zo,anchor:e_(On),screenX:v.clientX-xn.left,screenY:v.clientY-xn.top}),bl({title:"",description:""})},[A,G]),Ah=(0,I.useCallback)(()=>{if(!Jn||!Pi.title.trim())return;vl.current+=1;let N={id:vl.current,worldPosition:Jn.worldPosition,localPosition:Jn.localPosition,worldNormal:Jn.worldNormal,anchorNodeName:Jn.anchor?.anchorNodeName,anchorLocalPosition:Jn.anchor?.anchorLocalPosition,title:Pi.title.trim(),description:Pi.description},le=[...Zr,N];oh(le),C?.(le),gl(null)},[Jn,Pi,Zr,C]),Nd=(0,I.useCallback)(()=>gl(null),[]),tx=(0,I.useCallback)(v=>{Jr(v)},[Jr]);if(oe.status==="checking")return(0,z.jsx)("div",{className:"ri-viewer ri-viewer--license-checking",children:(0,z.jsx)(ua,{title:"Verifying License",message:"Checking your license key..."})});if(oe.status==="invalid")return(0,z.jsx)("div",{className:"ri-viewer ri-viewer--license-invalid",children:(0,z.jsx)(ua,{tone:"error",title:"Invalid License",message:oe.isLocalDomain?oe.reason??"License has been revoked or has expired":"Failed to load. Please contact the site administrator."})});let Eh=Yr?mi(Yr.objectId):null,Rh=Eh?Dt[Eh]?.style?.material?.texture?.path:void 0,nx=Zn.current?.offsetWidth??600,rx=Zn.current?.offsetHeight??400,ix=350,ax=290,ox=Jn?Math.min(Jn.screenX+12,nx-ix-8):0,sx=Jn?Math.min(Jn.screenY,rx-ax-8):0,lx=Ee&&!!e&&!_d&&!pi,$o=xe&&(sa&&(Pd||nh)||rh||!!fl),Ko=v=>16+v*42;return(0,z.jsxs)("div",{className:"ri-viewer",style:{background:Et},children:[(0,z.jsxs)("div",{className:"ri-viewerLeft",ref:il,children:[D?D({isOpen:gh,selectedObject:bh,currentAction:pr,onClose:vh,onAction:wl}):(0,z.jsx)(cp,{isOpen:gh,selectedObject:bh,currentAction:pr,onClose:vh,onAction:wl,renderActionExtra:v=>v==="change-color"&&rr?(0,z.jsx)(sp,{inline:!0,colorPicker:rr,onClose:fr,itemMaterials:Nn,setItemMaterials:Na}):v==="change-material"&&Yr?(0,z.jsx)(lp,{inline:!0,triggerFileUpload:yh,materialPopup:Yr,textureUrl:Rh,clearTexture:wh}):null}),(0,z.jsxs)("div",{className:`ri-canvasArea ${Xo?"ri-canvasArea--measuring":""} ${Io?"":"ri-canvasArea--positioning"} ${Qe?"ri-canvasArea--moveMode":""}`,ref:qr,tabIndex:zt?0:void 0,onDoubleClick:ex,onPointerDown:v=>{zt&&Zn.current?.focus({preventScroll:!0}),U0(v)},onClick:V0,children:[dl&&!ul&&(0,z.jsxs)("div",{className:"ri-bindingsMismatchBanner",children:[(0,z.jsx)(Pe.AlertTriangle,{size:14,className:"ri-bindingsMismatchBanner__icon"}),(0,z.jsx)("span",{children:"Object bindings data don't match this model"}),(0,z.jsx)("button",{type:"button",className:"ri-bindingsMismatchBanner__dismiss",onClick:v=>{v.stopPropagation(),pl(!0)},"aria-label":"Dismiss",children:(0,z.jsx)(Pe.X,{size:12})})]}),hl!==null&&!Md&&(0,z.jsxs)("div",{className:`ri-largeModelBanner ${dl&&!ul?"ri-largeModelBanner--offset":""}`,children:[(0,z.jsx)(Pe.AlertTriangle,{size:14,className:"ri-largeModelBanner__icon"}),(0,z.jsxs)("span",{children:["Very large model (",Math.round(hl/1e6),"M triangles) \u2014 it may render and move slowly on this device, and click/hover selection on the model is disabled. Use the objects panel to select parts."]}),(0,z.jsx)("button",{type:"button",className:"ri-largeModelBanner__dismiss",onClick:v=>{v.stopPropagation(),Vo(!0)},"aria-label":"Dismiss",children:(0,z.jsx)(Pe.X,{size:12})})]}),at.model.renderer==="uv-checker"&&hr.missing>0&&(0,z.jsxs)("div",{className:"ri-uvCheckerBanner",role:"status",children:[(0,z.jsx)(Pe.AlertTriangle,{size:14,className:"ri-uvCheckerBanner__icon"}),(0,z.jsxs)("span",{children:[hr.missing===hr.total?"UV Checker: this model has no UV0 coordinates.":`UV Checker: ${hr.missing} of ${hr.total} meshes have no UV0 coordinates.`," ","Missing UVs are shown in magenta."]})]}),(0,z.jsx)("input",{ref:ea,type:"file",accept:"image/png,image/jpeg,image/webp",className:"ri-hiddenInput",onChange:Y0}),(0,z.jsxs)(Qd,{camera:V,backgroundColor:F,shadows:U&&ae.shadows.enabled,sceneConfig:at,selectedObjectRef:Ld,hoveredObjectRef:X0,highlightOnHover:Pt,renderMode:Qt,maxDpr:we,reduceGpuLoad:Xt,xrStore:sa,rendererCaptureRef:dr,preserveDrawingBuffer:rn,children:[L??(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(ru,{lightingConfig:ae.lighting,shadowConfig:ae.shadows,shadowsEnabled:U,environmentRotation:ae.environment.rotation,environmentConfig:ae.environment,modelBounds:N0,objectBindings:Dt,nodeRefs:ur}),ee&&ae.lighting.lights.map(v=>!v.visible||v.type==="none"||v.type==="hemisphere"||v.attachment?null:(0,z.jsx)(Mb,{light:v,position:v.position,rotation:v.rotation,color:v.color,intensity:v.intensity,visible:v.visible,onPositionChange:N=>Ph(v.id,N,v.rotation),onRotationChange:N=>Ph(v.id,v.position,N),onDraggingChange:ci},v.id))]}),(0,z.jsx)(tu,{controlsRef:_e,onCameraChange:Q0,cameraLimits:R,controllerType:Gn,onPointerLockExit:()=>Xr("orbit")}),(0,z.jsx)(a_,{enabled:Gn==="pointerLock"?!1:ae.model.autoRotate??Vn??!1,speed:ae.model.autoRotateSpeed??on??1,controlsRef:_e}),Un&&(0,z.jsx)(Hc.GizmoHelper,{alignment:"top-right",margin:[80,80],renderPriority:2,onUpdate:()=>{_e.current?.update(0),dr.current?.invalidate()},children:(0,z.jsx)(Hc.GizmoViewport,{axisColors:["#ff3653","#8adb00","#2c8fff"],labelColor:"white"})}),Qe&&Ld&&Dr&&(0,z.jsx)(yp,{node:Ld,space:Dn,onTransformChange:q0,onDraggingChange:v=>{ci(v),qo&&g?.(qo,v)}},Dr),(0,z.jsx)(Sl,{onLoadError:Th,children:(0,z.jsx)(I.Suspense,{fallback:null,children:(()=>{let v=(0,z.jsxs)(z.Fragment,{children:[t?(0,z.jsx)(Zu,{url:t,rotation:at.model.rotation,errorTarget:n,cacheSize:i,decoderConfig:Me,objectBindings:Dt,itemMaterials:Nn,sceneConfig:at,selectedItem:Dr,panelHoveredItem:u??ko,highlightOnHover:Pt,onItemClick:_h,onItemHover:fh,onObjectCatalog:$0,onTilesetBounds:K0,onModelLoaded:Ch,onLoadError:Th,nodeRefsOut:ur,onNodeRefsChange:rl,materialRefsOut:Eo,explodeFactor:kr,suspendBindingTransforms:Ti}):(0,z.jsx)(mu,{url:e,modelFormat:a,objectBindings:Dt,selectedItem:Dr,itemMaterials:Nn,onItemClick:_h,onItemHover:fh,onModelLoaded:Ch,onAnimationsReady:w,nodeRefsOut:ur,onNodeRefsChange:rl,materialRefsOut:Eo,panelHoveredItem:u??ko,sceneConfig:at,zoomOnSelected:et,highlightOnHover:Pt,decoderConfig:Me,onLoadProgress:Z0,explodeFactor:kr,suspendBindingTransforms:Ti}),(0,z.jsx)(Qu,{annotations:Zr,sceneConfig:ae,activeAnnotation:Go,popupRef:Lo,canvasRootRef:Zn,worldPositionsRef:cr,modelLoaded:pi,onAnnotationClick:tx,onCloseAnnotation:jo,hideCloseButton:_t,showAnnotationOnHover:tt}),(0,z.jsx)(n_,{annotation:yl,enabled:_t,controlsRef:_e,offsetRef:vn}),Fo&&(0,z.jsx)(tp,{controlsRef:_e,sceneRef:An,config:Fo,playing:oa,resetOnPlay:_0,onFinished:()=>{Kr(!1),za(!1)},onUserInteract:()=>{Kr(!1)}}),ce&&(0,z.jsx)(ep,{points:ch,unit:Ye,box:dh,showDimensions:Ad})]});return sa?(0,z.jsx)(Kg,{ref:S0,box:dh,scaleMode:mt,onARStateChange:P0,children:v}):v})()})},t??e)]}),(0,z.jsx)(bo,{visible:lx,message:B,progress:ie??void 0}),$o&&(0,z.jsxs)("div",{className:"ri-xrTools",style:{top:`${Ko(0)}px`},children:[!Pd&&rh&&(0,z.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:T0,title:"View this model in AR with Apple Quick Look",children:[(0,z.jsx)(Pe.Box,{size:16}),"View in AR"]}),fl&&(0,z.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:C0,title:"Open this experience on a phone for AR","aria-haspopup":"dialog","aria-expanded":ih,children:[(0,z.jsx)(Pe.QrCode,{size:16}),(0,z.jsx)("span",{children:"Open on phone"})]}),sa&&Pd&&(0,z.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>sa.enterAR().catch(v=>{console.error("Failed to enter AR session:",v)}),title:"View this model in your space",children:[(0,z.jsx)(Pe.Smartphone,{size:16}),(0,z.jsx)("span",{className:"ri-xrButtonPrefix",children:"Enter"}),(0,z.jsx)("span",{children:"AR"})]}),sa&&nh&&(0,z.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>sa.enterVR().catch(v=>{console.error("Failed to enter VR session:",v)}),title:"View this model in VR",children:[(0,z.jsx)(Pe.RectangleGoggles,{size:16}),(0,z.jsx)("span",{className:"ri-xrButtonPrefix",children:"Enter"}),(0,z.jsx)("span",{children:"VR"})]})]}),M0,ih&&fl&&(0,z.jsx)("div",{className:"ri-mobileHandoffBackdrop",onMouseDown:v=>{v.target===v.currentTarget&&ah()},children:(0,z.jsxs)("section",{className:"ri-mobileHandoffDialog",role:"dialog","aria-modal":"true","aria-labelledby":"ri-mobileHandoffTitle",children:[(0,z.jsx)("button",{type:"button",className:"ri-mobileHandoffClose",onClick:ah,"aria-label":"Close phone handoff",children:(0,z.jsx)(Pe.X,{size:18})}),(0,z.jsx)(Pe.Smartphone,{size:22,"aria-hidden":"true"}),(0,z.jsx)("h2",{id:"ri-mobileHandoffTitle",children:"View in AR"}),(0,z.jsx)("p",{children:"Scan the code and choose AR."}),(0,z.jsx)("div",{className:"ri-mobileHandoffQr",children:(0,z.jsx)(Eb.QRCodeSVG,{value:fl,size:208,level:"M",marginSize:4,title:"QR code to open this model on a phone"})})]})}),ke&&(0,z.jsx)("div",{className:"ri-uvCheckerTools",style:{top:`${Ko($o?1:0)}px`},children:(0,z.jsx)("button",{type:"button",className:`ri-measureButton ${At?"ri-measureButton--active":""}`,onClick:()=>kt(v=>!(v??nt)),title:At?"Disable UV checker":"Enable UV checker","aria-label":At?"Disable UV checker":"Enable UV checker","aria-pressed":At,children:(0,z.jsx)(Pe.Grid3X3,{size:16})})}),ce&&(0,z.jsxs)("div",{className:"ri-measureTools",style:{top:`${Ko(($o?1:0)+(ke?1:0))}px`},children:[(0,z.jsx)("button",{type:"button",className:`ri-measureButton ${Xo?"ri-measureButton--active":""}`,onClick:I0,title:Xo?"Stop measuring":"Measure distance","aria-pressed":Xo,children:(0,z.jsx)(Pe.PencilRuler,{size:16})}),(0,z.jsx)("button",{type:"button",className:`ri-measureButton ${Ad?"ri-measureButton--active":""}`,onClick:z0,title:"Toggle bounding dimensions","aria-pressed":Ad,children:(0,z.jsx)(Pe.RulerDimensionLine,{size:16})}),ch.length>0&&(0,z.jsx)("button",{type:"button",className:"ri-measureButton",onClick:O0,title:"Clear measurements",children:(0,z.jsx)(Pe.Eraser,{size:16})}),Xo&&(0,z.jsx)("span",{className:"ri-measureHint",children:"Click points on the model to measure"})]}),Ve&&(0,z.jsxs)("div",{className:"ri-explodeTools",style:{top:`${Ko(($o?1:0)+(ke?1:0)+(ce?1:0))}px`},children:[(0,z.jsx)("button",{type:"button",className:`ri-measureButton ${Cd||kr>0?"ri-measureButton--active":""}`,onClick:()=>th(v=>!v),title:"Exploded view","aria-pressed":Cd,children:(0,z.jsx)(Pe.Expand,{size:16})}),Cd&&(0,z.jsx)("div",{className:"ri-explodeSlider",onPointerDown:v=>v.stopPropagation(),children:(0,z.jsx)("input",{type:"range",min:0,max:100,value:Math.round(kr*100),onChange:v=>eh(Number(v.target.value)/100),"aria-label":"Explode amount"})})]}),Fo&&(0,z.jsxs)("div",{className:"ri-cinematicTools",style:{top:`${Ko(($o?1:0)+(ke?1:0)+(ce?1:0)+(Ve?1:0))}px`},children:[(0,z.jsx)("button",{type:"button",className:`ri-measureButton ${oa?"ri-measureButton--active":""}`,onClick:()=>{oa?Kr(!1):(za(!1),Kr(!0))},title:oa?"Pause cinematic":"Play cinematic","aria-pressed":oa,children:oa?(0,z.jsx)(Pe.Pause,{size:16}):(0,z.jsx)(Pe.Play,{size:16})}),oa&&(0,z.jsx)("button",{type:"button",className:"ri-measureButton ri-measureButton--stop",onClick:J0,title:"Stop cinematic and reset camera",children:(0,z.jsx)(Pe.Square,{size:16})})]}),(ye||pe||en&&ln.length>0)&&(0,z.jsxs)("div",{className:"ri-buttonContainer",children:[(0,z.jsx)("div",{className:"ri-tourControls",children:en&&ln.length>0&&(0,z.jsx)(z.Fragment,{children:_t?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)("button",{className:"ri-tourButton",onClick:R0,disabled:lh||ln.length===0||mr<=0,title:"Previous annotation",children:[(0,z.jsx)(Pe.ChevronLeft,{size:16}),(0,z.jsx)("span",{children:"Prev"})]}),(0,z.jsx)("button",{className:"ri-tourButton ri-tourButton--stop",onClick:k0,title:"Stop guided tour",children:(0,z.jsx)(Pe.Square,{size:16})}),(0,z.jsxs)("button",{className:"ri-tourButton ri-tourButton--next",onClick:L0,disabled:lh||ln.length===0,title:"Next annotation",children:[(0,z.jsx)("span",{children:"Next"}),(0,z.jsx)(Pe.ChevronRight,{size:16})]})]}):(0,z.jsx)("button",{className:"ri-navButtonSingle",onClick:E0,disabled:ln.length===0,title:"Start guided tour",children:"Guided Tour"})})}),(0,z.jsxs)("div",{className:"mv-rightControls",children:[ye&&(0,z.jsx)("button",{className:"mv-resetButton",onClick:Bd,title:"Reset camera view",children:(0,z.jsx)(Pe.RotateCcw,{})}),(0,z.jsxs)("div",{className:"mv-controllersWrapper",onPointerDown:v=>v.stopPropagation(),children:[Bn&&(0,z.jsxs)("div",{className:"mv-controllersMenu",children:[(0,z.jsx)("button",{type:"button",className:`mv-controllersMenuItem ${Gn==="orbit"?"mv-controllersMenuItem--active":""}`,onClick:()=>Xr("orbit"),children:"Orbit Control"}),(0,z.jsx)("button",{type:"button",className:`mv-controllersMenuItem ${Gn==="pointerLock"?"mv-controllersMenuItem--active":""}`,onClick:()=>Xr("pointerLock"),children:"Point Lock"})]}),(0,z.jsx)("button",{className:"mv-controllersButton",onClick:()=>Pn(v=>!v),title:"Camera controller","aria-label":"Camera controller settings",children:(0,z.jsx)(Pe.Orbit,{size:15})})]}),pe&&(0,z.jsxs)("div",{className:"mv-downloadWrapper",onPointerDown:v=>v.stopPropagation(),children:[F0&&(0,z.jsxs)("div",{className:"mv-downloadMenu",children:[(0,z.jsxs)("button",{className:"mv-downloadMenuItem",onClick:H0,disabled:Ed||!An.current,children:[(0,z.jsx)(Pe.Box,{size:14}),"Download GLB"]}),(0,z.jsx)("div",{className:"mv-downloadMenuDivider"}),rn&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)("button",{className:"mv-downloadMenuItem",onClick:G0,disabled:!An.current,children:[(0,z.jsx)(Pe.Camera,{size:14}),"Download PNG"]}),(0,z.jsx)("div",{className:"mv-downloadMenuDivider"})]}),(0,z.jsxs)("button",{className:"mv-downloadMenuItem",onClick:W0,disabled:!An.current,children:[(0,z.jsx)(Pe.FileImage,{size:14}),"Download UV Layout"]}),ph&&(0,z.jsx)("div",{className:"mv-downloadMenuNotice",role:"status","aria-live":"polite",children:ph})]}),(0,z.jsx)("button",{className:"mv-downloadButton",onClick:j0,disabled:Ed||!An.current,title:"Download options",children:Ed?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)("span",{className:"mv-downloadButton__spinner"}),"Exporting\u2026"]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(Pe.Download,{size:15}),"Download"]})})]})]})]}),Jn&&(0,z.jsxs)("div",{className:"ri-annotationPopup",style:{left:ox,top:sx},onPointerDown:v=>v.stopPropagation(),onClick:v=>v.stopPropagation(),children:[(0,z.jsx)("input",{autoFocus:!0,className:"ri-annotationInput",placeholder:"Title *",value:Pi.title,onChange:v=>bl(N=>({...N,title:v.target.value})),onKeyDown:v=>{v.key==="Enter"&&Ah(),v.key==="Escape"&&Nd()}}),(0,z.jsx)("textarea",{className:"ri-annotationTextarea",placeholder:"Description",value:Pi.description,onChange:v=>bl(N=>({...N,description:v.target.value})),onKeyDown:v=>{v.key==="Escape"&&Nd()},rows:5}),(0,z.jsxs)("div",{className:"ri-annotationActions",children:[(0,z.jsx)("button",{onClick:Ah,className:`ri-annotationOkBtn ${Pi.title.trim()?"":"disabled"}`,disabled:!Pi.title.trim(),children:"OK"}),(0,z.jsx)("button",{onClick:Nd,className:"ri-annotationCancelBtn",children:"Cancel"}),(0,z.jsx)("div",{className:"ri-annotationIcons"})]})]})]}),D&&rr&&(0,z.jsx)(sp,{colorPicker:rr,onClose:fr,itemMaterials:Nn,setItemMaterials:Na}),D&&Yr&&(0,z.jsx)(lp,{triggerFileUpload:yh,materialPopup:Yr,textureUrl:Rh,clearTexture:wh})]}),$&&(0,z.jsx)("div",{className:"ri-viewerRight",children:q?q({objectBindings:Dt,onAction:wl,onFocus:Sh,onHover:al}):(0,z.jsx)(dp,{objectBindings:Dt,onAction:wl,onFocus:Sh,onHover:al})}),Ue&&(0,z.jsx)(ob,{controlsRef:_e,enabled:!0,opacity:Wt,moveSensitivity:Tt,position:Re})]})}var te=require("react"),Hn=require("lucide-react");var Gt=require("react"),wp=require("three");function Rb(e){return[e.x,e.y,e.z]}function Wi(e,t){let n=new wp.Vector3,i=new wp.Vector3;return t.getPosition(n),t.getTarget(i),{position:Rb(n),target:Rb(i),fov:"fov"in e&&typeof e.fov=="number"?e.fov:null,zoom:"zoom"in e&&typeof e.zoom=="number"?e.zoom:1,azimuthAngle:t.azimuthAngle,polarAngle:t.polarAngle}}function l_(e,t){return e?e.position[0]===t.position[0]&&e.position[1]===t.position[1]&&e.position[2]===t.position[2]&&e.target[0]===t.target[0]&&e.target[1]===t.target[1]&&e.target[2]===t.target[2]&&e.fov===t.fov&&e.zoom===t.zoom&&e.azimuthAngle===t.azimuthAngle&&e.polarAngle===t.polarAngle:!1}async function Gs(e,t,n=.6){let i=e.smoothTime;e.smoothTime=n;try{return await t()}finally{e.smoothTime=i}}function Gc(e={}){let t=(0,Gt.useRef)(e);t.current=e;let n=(0,Gt.useRef)(null),[i,r]=(0,Gt.useState)(null),[a,o]=(0,Gt.useState)(()=>({...e.presets})),s=(0,Gt.useRef)(a);s.current=a;let c=(0,Gt.useCallback)(w=>{r(C=>l_(C,w)?C:w)},[]),l=(0,Gt.useCallback)((w,C)=>{c(Wi(w,C))},[c]),u=(0,Gt.useRef)(null),d=(0,Gt.useRef)(null),h=(0,Gt.useRef)(null),f=(0,Gt.useCallback)(w=>{n.current=w;let C=Wi(w.controls.camera,w.controls);c(C),w.scene!==d.current&&(d.current=w.scene,u.current=null,h.current=null),w.homeCameraState&&!u.current&&(u.current=w.homeCameraState);let{initialPosition:S,initialTarget:O,initialTransition:L=!1}=t.current;if((S||O)&&w.scene&&(S||w.homeCameraState)&&h.current!==w.controls){h.current=w.controls,w.homeCameraState||vo(w.controls);let V=S??C.position,R=O??C.target;w.controls.setLookAt(V[0],V[1],V[2],R[0],R[1],R[2],L).then(()=>{if(n.current?.controls!==w.controls)return;let F=Wi(w.controls.camera,w.controls);u.current={position:F.position,target:F.target},c(F)}).catch(()=>{})}},[c]),g=(0,Gt.useCallback)(async()=>{let w=n.current,C=w?.controls;if(!C)return!1;try{let S=u.current;return S?await Gs(C,()=>C.setLookAt(S.position[0],S.position[1],S.position[2],S.target[0],S.target[1],S.target[2],!0)):w?.scene?await Gs(C,()=>C.fitToBox(w.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})):await Gs(C,()=>C.reset(!0)),!0}catch{return!1}},[]),x=(0,Gt.useCallback)(async()=>{let w=n.current;if(!w?.controls||!w.scene)return!1;try{return await Gs(w.controls,()=>w.controls.fitToBox(w.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),P=(0,Gt.useCallback)(async w=>{let C=n.current;if(!C?.controls)return!1;let S=En(C.objectBindings,w);if(!S)return!1;let O=C.nodeRefs[S];if(!O)return!1;try{return await Gs(C.controls,()=>C.controls.fitToBox(O,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),y=(0,Gt.useCallback)(async(w,C=!0)=>{let S=n.current?.controls;if(!S)return!1;try{return n.current?.homeCameraState||vo(S),await S.setTarget(w[0],w[1],w[2],C),c(Wi(S.camera,S)),!0}catch{return!1}},[c]),p=(0,Gt.useCallback)(async(w,C=!0)=>{let S=n.current?.controls;if(!S)return!1;try{n.current?.homeCameraState||vo(S);let O=[S.setLookAt(w.position[0],w.position[1],w.position[2],w.target[0],w.target[1],w.target[2],C)];w.azimuthAngle!=null&&w.polarAngle!=null&&O.push(S.rotateTo(w.azimuthAngle,w.polarAngle,C)),await Promise.all(O);let L=S.camera,V=!1;return w.fov!=null&&"fov"in L&&typeof L.fov=="number"&&(L.fov=w.fov,V=!0),w.zoom!=null&&"zoom"in L&&typeof L.zoom=="number"&&(L.zoom=w.zoom,V=!0),V&&"updateProjectionMatrix"in L&&L.updateProjectionMatrix(),c(Wi(L,S)),!0}catch{return!1}},[c]),m=(0,Gt.useCallback)((w,C=!0)=>p(w,C),[p]),M=(0,Gt.useCallback)((w,C,S=!0)=>p({position:w,target:C},S),[p]),_=(0,Gt.useCallback)(async(w,C,S=!0)=>{let O=n.current?.controls;if(!O)return!1;try{return n.current?.homeCameraState||vo(O),await O.rotateTo(w,C,S),c(Wi(O.camera,O)),!0}catch{return!1}},[c]),T=(0,Gt.useCallback)(async(w,C=!0)=>{let S=n.current?.controls;if(!S)return!1;try{return n.current?.homeCameraState||vo(S),await S.dollyTo(w,C),c(Wi(S.camera,S)),!0}catch{return!1}},[c]),E=(0,Gt.useCallback)(w=>{let C=n.current?.controls,S=w.trim();if(!C||!S)return null;let O=Wi(C.camera,C);return s.current={...s.current,[S]:O},o(L=>({...L,[S]:O})),c(O),O},[c]),b=(0,Gt.useCallback)((w,C=!0)=>{let S=s.current[w];return S?p(S,C):Promise.resolve(!1)},[p]);return{cameraState:i,cameraPresets:a,resetView:g,focusObject:P,fitScene:x,setCameraTarget:y,setCameraState:m,lookAt:M,orbitTo:_,dollyTo:T,savePreset:E,goToPreset:b,handleCameraChange:l,handleViewerReady:f}}var gn=require("react");function Wc(){let e=(0,gn.useRef)(null),[t,n]=(0,gn.useState)([]),i=(0,gn.useRef)(null),[r,a]=(0,gn.useState)([]),[o,s]=(0,gn.useState)(null),[c,l]=(0,gn.useState)(!1),[u,d]=(0,gn.useState)(1),[h,f]=(0,gn.useState)(0),[g,x]=(0,gn.useState)(0);(0,gn.useEffect)(()=>()=>{i.current?.()},[]);let P=(0,gn.useCallback)(T=>{i.current?.(),e.current=T,n(T.clips),a(T.clipDetails??T.clips.map(b=>({sourceName:b,duration:0})));let E=T.getState?.()??{currentClip:null,isPlaying:!1,speed:1,time:0,duration:0};s(E.currentClip),l(E.isPlaying),d(E.speed),f(E.time),x(E.duration),T.subscribe?i.current=T.subscribe(b=>{s(b.currentClip),l(b.isPlaying),d(b.speed),f(b.time),x(b.duration)}):i.current=null},[]),y=(0,gn.useCallback)(T=>{e.current?.play(T),s(T),l(!0)},[]),p=(0,gn.useCallback)(()=>{e.current?.pause(),l(!1)},[]),m=(0,gn.useCallback)(()=>{e.current?.stop(),s(null),l(!1),f(0)},[]),M=(0,gn.useCallback)(T=>{e.current?.setSpeed(T),d(T)},[]),_=(0,gn.useCallback)(T=>{e.current?.seek?.(T),f(T)},[]);return{clips:t,clipDetails:r,currentClip:o,isPlaying:c,speed:u,time:h,duration:g,play:y,pause:p,stop:m,setSpeed:M,seek:_,handleAnimationsReady:P}}var Zc=require("react");var Vb=require("react"),qi=require("lucide-react"),Yc=require("react-colorful");var Hr=require("react"),Db=require("react-dom"),Xc=require("lucide-react"),qc=require("react-colorful");function _o(e){let t=e.replace("#","").match(/.{2}/g).map(i=>parseInt(i,16)/255).map(i=>i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4));return .2126*t[0]+.7152*t[1]+.0722*t[2]>.179?"#000":"#fff"}var Lb=require("react");function kb(e,t,n){(0,Lb.useEffect)(()=>{if(!n)return;let i=Array.isArray(e)?e:[e],r=a=>{let o=a.target;i.some(c=>c.current?.contains(o))||t()};return document.addEventListener("pointerdown",r,!0),()=>{document.removeEventListener("pointerdown",r,!0)}},[e,t,n])}var Ce=require("react/jsx-runtime");function _p({anchorRef:e,onClose:t,children:n}){let i=(0,Hr.useRef)(null),[r,a]=(0,Hr.useState)(null);return kb([i,e],t,!0),(0,Hr.useLayoutEffect)(()=>{let o=e.current;if(!o)return;let s=o.getBoundingClientRect(),c=222,l=8,u=Math.min(Math.max(s.right-c,l),window.innerWidth-c-l),d=Math.min(s.bottom+6,window.innerHeight-200);a({top:d,left:u})},[e]),r?(0,Db.createPortal)((0,Ce.jsx)("div",{ref:i,className:"se-colorPickerPopover",style:{position:"fixed",top:r.top,left:r.left},children:n}),document.body):null}function c_(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 Ma({title:e,children:t}){return(0,Ce.jsxs)("section",{className:"se-section",children:[(0,Ce.jsx)("h3",{className:"se-sectionTitle",children:e}),(0,Ce.jsx)("div",{className:"se-sectionBody",children:t})]})}function lt({title:e,open:t,onToggle:n,trailing:i,children:r,disabled:a,tooltip:o}){let s=o?`${o}`:e;return(0,Ce.jsxs)("section",{className:"se-panel",children:[(0,Ce.jsxs)("button",{type:"button",className:"se-panelHeader",onClick:n,"aria-expanded":t,title:s,children:[(0,Ce.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,Ce.jsx)(Xc.ChevronDown,{size:16,className:`se-panelChevron ${t?"se-panelChevron--open":""}`}),(0,Ce.jsx)("span",{className:"se-panelTitle",children:e}),o?(0,Ce.jsx)("span",{className:"se-panelHelp",title:s,"aria-label":s,role:"img",onClick:c=>c.stopPropagation(),children:(0,Ce.jsx)(Xc.Info,{size:13})}):null]}),i?(0,Ce.jsx)("span",{className:"se-panelTrailing",onClick:c=>c.stopPropagation(),children:i}):null]}),t?(0,Ce.jsx)("div",{className:"se-panelBody",style:a?{opacity:.45,pointerEvents:"none"}:void 0,children:r}):null]})}function ht({checked:e,onChange:t,label:n}){return(0,Ce.jsxs)("label",{className:"se-switch","aria-label":n,children:[(0,Ce.jsx)("input",{type:"checkbox",checked:e,onChange:i=>t(i.target.checked)}),(0,Ce.jsx)("span",{className:"se-switchTrack",children:(0,Ce.jsx)("span",{className:"se-switchThumb"})})]})}function K({label:e,value:t,min:n,max:i,step:r,formatValue:a,onChange:o,disabled:s=!1}){return(0,Ce.jsxs)("label",{className:`se-field ${s?"se-field--disabled":""}`,children:[(0,Ce.jsxs)("span",{className:"se-fieldLabel",children:[e,(0,Ce.jsx)("span",{className:"se-fieldValue",children:a?a(t):t})]}),(0,Ce.jsx)("input",{className:"se-slider",type:"range",min:n,max:i,step:r,value:t,onChange:c=>o(Number(c.target.value)),disabled:s})]})}function bt({label:e,checked:t,onChange:n}){return(0,Ce.jsxs)("label",{className:"se-field se-fieldInline",children:[(0,Ce.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Ce.jsx)("input",{type:"checkbox",className:"se-checkbox",checked:t,onChange:i=>n(i.target.checked)})]})}function sr({label:e,value:t,options:n,onChange:i}){return(0,Ce.jsxs)("label",{className:"se-field se-fieldInline",children:[(0,Ce.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Ce.jsx)("select",{className:"se-select",value:t,onChange:r=>i(r.target.value),children:n.map(r=>(0,Ce.jsx)("option",{value:r,children:c_(r)},r))})]})}function Tr({label:e,value:t,onChange:n}){let[i,r]=(0,Hr.useState)(!1),a=(0,Hr.useRef)(null);return(0,Ce.jsxs)("div",{className:"se-field",children:[(0,Ce.jsxs)("div",{className:"se-fieldInline",children:[(0,Ce.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Ce.jsx)("span",{ref:a,style:{display:"inline-flex"},children:(0,Ce.jsx)(qc.HexColorInput,{prefixed:!0,className:"se-swatch",onClick:()=>r(o=>!o),style:{background:t,color:_o(t)},color:t,onChange:n})})]}),i?(0,Ce.jsx)(_p,{anchorRef:a,onClose:()=>r(!1),children:(0,Ce.jsx)(qc.HexColorPicker,{color:t,onChange:n})}):null]})}function Bb({value:e,min:t,max:n,step:i,onChange:r}){let[a,o]=(0,Hr.useState)(String(e)),s=(0,Hr.useRef)(!1);return(0,Hr.useLayoutEffect)(()=>{s.current||o(String(e))},[e]),(0,Ce.jsx)("input",{type:"number",className:"se-numberInput",min:t,max:n,step:i,value:a,onFocus:()=>{s.current=!0},onChange:c=>{let l=c.target.value;o(l),l!==""&&l!=="-"&&!Number.isNaN(Number(l))&&r(Number(l))},onBlur:()=>{s.current=!1,o(String(e))}})}function Xi({label:e,value:t,min:n,max:i,step:r,onChange:a}){return(0,Ce.jsxs)("div",{className:"se-field",children:[(0,Ce.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Ce.jsx)("div",{className:"se-vectorRow",children:["X","Y","Z"].map((s,c)=>(0,Ce.jsxs)("label",{className:"se-vectorAxis",children:[(0,Ce.jsx)("span",{children:s}),(0,Ce.jsx)(Bb,{value:t[c],min:n,max:i,step:r,onChange:l=>{let u=[...t];u[c]=l,a(u)}})]},s))})]})}function Ca({label:e,value:t,min:n,max:i,step:r,onChange:a}){return(0,Ce.jsxs)("div",{className:"se-field",children:[(0,Ce.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Ce.jsx)("div",{className:"se-vectorRow",children:["X","Y"].map((s,c)=>(0,Ce.jsxs)("label",{className:"se-vectorAxis",children:[(0,Ce.jsx)("span",{children:s}),(0,Ce.jsx)(Bb,{value:t[c],min:n,max:i,step:r,onChange:l=>{let u=[...t];u[c]=l,a(u)}})]},s))})]})}var Nb={free:0,starter:1,growth:2};function Ob(e){return e==="starter"||e==="growth"||e==="scale"?e==="scale"?"growth":e:"free"}function Mi(e,t){return Nb[e]>=Nb[t]}var Ib={free:"Free",starter:"Starter",growth:"Growth"};var zb=require("lucide-react");var Ws=require("react/jsx-runtime");function tr({requiredTier:e,feature:t}){return(0,Ws.jsxs)("div",{className:"bb-tierLock",children:[(0,Ws.jsx)(zb.Lock,{size:16}),(0,Ws.jsxs)("p",{className:"bb-tierLockMessage",children:[t," requires the ",Ib[e]," plan or higher."]})]})}var ne=require("react/jsx-runtime"),d_=["lit","unlit","normals"],u_=["color","image","environment"];function Ub(e){let t=e%360;return t<0?t+360:t}function Xs({title:e,open:t,onToggle:n,children:i,trailing:r}){return(0,ne.jsxs)("section",{className:"se-panel",children:[(0,ne.jsxs)("button",{type:"button",className:"se-panelHeader",onClick:n,"aria-expanded":t,children:[(0,ne.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,ne.jsx)(qi.ChevronDown,{size:16,className:`se-panelChevron ${t?"se-panelChevron--open":""}`}),(0,ne.jsx)("span",{className:"se-panelTitle",children:e})]}),r?(0,ne.jsx)("span",{className:"se-panelTrailing",onClick:a=>a.stopPropagation(),children:r}):null]}),t?(0,ne.jsx)("div",{className:"se-panelBody",children:i}):null]})}function Sp({config:e,onChange:t}){let{model:n,camera:i,wireframe:r,background:a,environment:o}=e,{tier:s}=Cr(),c=Mi(s,"starter"),[l,u]=(0,Vb.useState)({general:!0,camera:!0,autoRotate:!1,wireframe:!1,background:!1}),d=p=>u(m=>({...m,[p]:!m[p]})),h=p=>t({...e,model:p}),f=p=>t({...e,camera:p}),g=p=>t({...e,wireframe:p}),x=p=>t({...e,background:p}),P=p=>t({...e,environment:p}),y=p=>{P({...o,source:"preset",preset:p})};return(0,ne.jsxs)("div",{className:"se-generalContent",children:[(0,ne.jsxs)(Xs,{title:"General",open:l.general,onToggle:()=>d("general"),children:[(0,ne.jsxs)("div",{className:"se-field",children:[(0,ne.jsxs)("div",{className:"se-fieldLabel",children:[(0,ne.jsx)("span",{children:"Straighten model"}),(0,ne.jsx)("button",{type:"button",className:"se-iconButton",onClick:()=>h({...n,rotation:[0,0,0]}),"aria-label":"Reset model rotation",children:(0,ne.jsx)(qi.RotateCcw,{size:16})})]}),(0,ne.jsx)("div",{className:"se-axisStepperGrid",children:["X","Y","Z"].map((p,m)=>(0,ne.jsxs)("div",{className:"se-axisStepper",children:[(0,ne.jsx)("button",{type:"button",className:"se-axisStepperButton",onClick:()=>{let M=[...n.rotation];M[m]=Ub(M[m]-90),h({...n,rotation:M})},"aria-label":`Rotate ${p} axis backward`,children:(0,ne.jsx)(qi.ChevronLeft,{size:16})}),(0,ne.jsx)("span",{className:"se-axisStepperLabel",children:p}),(0,ne.jsx)("button",{type:"button",className:"se-axisStepperButton",onClick:()=>{let M=[...n.rotation];M[m]=Ub(M[m]+90),h({...n,rotation:M})},"aria-label":`Rotate ${p} axis forward`,children:(0,ne.jsx)(qi.ChevronRight,{size:16})})]},p))})]}),(0,ne.jsx)(Xi,{label:"Rotation",value:n.rotation,min:0,max:360,step:1,onChange:p=>h({...n,rotation:p})}),(0,ne.jsxs)("div",{className:"se-field",children:[(0,ne.jsx)("span",{className:"se-fieldLabel",children:"Renderer"}),(0,ne.jsx)("div",{className:"se-segmentedControl se-segmentedControl--renderer",children:lm.map(p=>(0,ne.jsx)("button",{type:"button",className:`se-segmentedOption ${n.renderer===p?"se-segmentedOption--active":""}`,onClick:()=>h({...n,renderer:p}),children:p==="uv-checker"?"UV CHECKER":p.toUpperCase()},p))})]}),(0,ne.jsx)(sr,{label:"Shading",value:n.shading,options:d_,onChange:p=>h({...n,shading:p})})]}),(0,ne.jsx)(Xs,{title:"Camera",open:l.camera,onToggle:()=>d("camera"),children:(0,ne.jsx)(K,{label:"Field Of View",value:i.fieldOfView,min:20,max:100,step:.1,formatValue:p=>`${p.toFixed(3)}\xB0`,onChange:p=>f({...i,fieldOfView:p})})}),(0,ne.jsx)(Xs,{title:"Auto Rotate",open:l.autoRotate,onToggle:()=>d("autoRotate"),trailing:(0,ne.jsxs)("label",{className:"se-switch","aria-label":"Toggle auto rotate",children:[(0,ne.jsx)("input",{type:"checkbox",checked:n.autoRotate??!1,onChange:p=>h({...n,autoRotate:p.target.checked})}),(0,ne.jsx)("span",{className:"se-switchTrack",children:(0,ne.jsx)("span",{className:"se-switchThumb"})})]}),children:n.autoRotate?(0,ne.jsx)(K,{label:"Rotation Speed",value:n.autoRotateSpeed??1,min:.1,max:3,step:.1,formatValue:p=>`${p.toFixed(1)}x`,onChange:p=>h({...n,autoRotateSpeed:p})}):(0,ne.jsx)("div",{className:"se-placeholder",children:"Enable auto rotate to adjust its speed."})}),(0,ne.jsx)(Xs,{title:"Wireframe",open:l.wireframe,onToggle:()=>d("wireframe"),trailing:(0,ne.jsxs)("label",{className:"se-switch","aria-label":"Toggle wireframe preview",children:[(0,ne.jsx)("input",{type:"checkbox",checked:c&&r.enabled,disabled:!c,onChange:p=>g({...r,enabled:p.target.checked})}),(0,ne.jsx)("span",{className:"se-switchTrack",children:(0,ne.jsx)("span",{className:"se-switchThumb"})})]}),children:c?(0,ne.jsxs)(ne.Fragment,{children:[(0,ne.jsx)(K,{label:"Opacity",value:r.opacity,min:0,max:1,step:.01,onChange:p=>g({...r,opacity:p})}),(0,ne.jsx)(Tr,{label:"Wire color",value:r.color,onChange:p=>g({...r,color:p})})]}):(0,ne.jsx)(tr,{requiredTier:"starter",feature:"Wireframe preview"})}),(0,ne.jsx)(Xs,{title:"Background",open:l.background,onToggle:()=>d("background"),trailing:(0,ne.jsxs)("label",{className:"se-switch","aria-label":"Toggle scene background",children:[(0,ne.jsx)("input",{type:"checkbox",checked:a.enabled,onChange:p=>x({...a,enabled:p.target.checked})}),(0,ne.jsx)("span",{className:"se-switchTrack",children:(0,ne.jsx)("span",{className:"se-switchThumb"})})]}),children:a.enabled?(0,ne.jsxs)(ne.Fragment,{children:[(0,ne.jsxs)("div",{className:"se-field",children:[(0,ne.jsx)("span",{className:"se-fieldLabel",children:"Background type"}),(0,ne.jsx)("div",{className:"se-segmentedControl",children:u_.map(p=>(0,ne.jsx)("button",{type:"button",className:`se-segmentedOption ${a.type===p?"se-segmentedOption--active":""}`,onClick:()=>x({...a,type:p}),children:p},p))})]}),a.type==="environment"?c?(0,ne.jsxs)(ne.Fragment,{children:[(0,ne.jsxs)("div",{className:"se-field",children:[(0,ne.jsx)("span",{className:"se-fieldLabel",children:"Environment source"}),(0,ne.jsxs)("div",{className:"se-segmentedControl",children:[(0,ne.jsx)("button",{type:"button",className:`se-segmentedOption ${o.source==="preset"?"se-segmentedOption--active":""}`,onClick:()=>P({...o,source:"preset"}),children:"PRESET"}),(0,ne.jsx)("button",{type:"button",className:`se-segmentedOption ${o.source==="custom"?"se-segmentedOption--active":""}`,onClick:()=>P({...o,source:"custom"}),children:"CUSTOM"})]})]}),o.source==="preset"?(0,ne.jsx)(sr,{label:"Environment preset",value:o.preset,options:cm,onChange:y}):(0,ne.jsxs)("label",{className:"se-field",children:[(0,ne.jsx)("span",{className:"se-fieldLabel",children:"Custom environment URL"}),(0,ne.jsx)("input",{type:"text",className:"se-textInput",placeholder:"https://example.com/environment.hdr",value:o.customEnvironmentUrl,onChange:p=>P({...o,customEnvironmentUrl:p.target.value})}),(0,ne.jsx)("span",{className:"bb-note",children:"Enter a HDR, EXR, JPG, JPEG, PNG, or WEBP URL."}),o.customEnvironmentUrl.trim()&&!Pl(o.customEnvironmentUrl)?(0,ne.jsx)("span",{className:"bb-note",style:{color:"#fca5a5"},children:"Invalid image/HDRI URL."}):null]}),(0,ne.jsx)(K,{label:"Environment intensity",value:o.intensity,min:0,max:3,step:.05,onChange:p=>P({...o,intensity:p})})]}):(0,ne.jsx)(tr,{requiredTier:"starter",feature:"Environment backgrounds"}):null,a.type==="image"?(0,ne.jsxs)("label",{className:"se-field",children:[(0,ne.jsx)("span",{className:"se-fieldLabel",children:"Background image URL"}),(0,ne.jsx)("input",{type:"text",className:"se-textInput",placeholder:"https://example.com/background.jpg",value:a.imageUrl,onChange:p=>x({...a,imageUrl:p.target.value})})]}):null,a.type==="color"?(0,ne.jsxs)("div",{className:"se-field",children:[(0,ne.jsx)("span",{className:"se-fieldLabel",children:"Background color"}),(0,ne.jsx)("div",{className:"se-inlineColorPicker",children:(0,ne.jsx)(Yc.HexColorPicker,{color:a.color,onChange:p=>x({...a,color:p})})}),(0,ne.jsx)("div",{className:"se-fieldInline",children:(0,ne.jsx)(Yc.HexColorInput,{prefixed:!0,className:"se-swatch",style:{background:a.color,color:_o(a.color)},color:a.color,onChange:p=>x({...a,color:p})})})]}):null]}):(0,ne.jsx)("div",{className:"se-placeholder",children:"Background rendering is disabled for this scene preset."})})]})}var dv=require("react");var fe=require("react/jsx-runtime");function Fb({pp:e,set:t,open:n,toggle:i}){let{ssao:r}=e;return(0,fe.jsxs)(lt,{title:"SSAO",tooltip:"Adds soft contact shadows in corners, creases, and tight spaces.",open:n.ssao,onToggle:()=>i("ssao"),disabled:!r.enabled,trailing:(0,fe.jsx)(ht,{checked:r.enabled,onChange:a=>t("ssao",{...r,enabled:a}),label:"Toggle SSAO"}),children:[(0,fe.jsx)(K,{label:"Samples",value:r.samples,min:1,max:64,step:1,onChange:a=>t("ssao",{...r,samples:a})}),(0,fe.jsx)(K,{label:"Rings",value:r.rings,min:1,max:12,step:1,onChange:a=>t("ssao",{...r,rings:a})}),(0,fe.jsx)(K,{label:"Intensity",value:r.intensity,min:0,max:20,step:.5,onChange:a=>t("ssao",{...r,intensity:a})}),(0,fe.jsx)(K,{label:"Radius",value:r.radius,min:.01,max:1,step:.01,onChange:a=>t("ssao",{...r,radius:a})}),(0,fe.jsx)(K,{label:"Bias",value:r.bias,min:0,max:.1,step:.001,onChange:a=>t("ssao",{...r,bias:a})}),(0,fe.jsx)(K,{label:"Luminance Influence",value:r.luminanceInfluence,min:0,max:1,step:.01,onChange:a=>t("ssao",{...r,luminanceInfluence:a})}),(0,fe.jsx)(K,{label:"Fade",value:r.fade,min:0,max:.1,step:.001,onChange:a=>t("ssao",{...r,fade:a})}),(0,fe.jsx)(K,{label:"Min Radius Scale",value:r.minRadiusScale,min:0,max:1,step:.01,onChange:a=>t("ssao",{...r,minRadiusScale:a})}),(0,fe.jsx)(K,{label:"World Distance Threshold",value:r.worldDistanceThreshold,min:0,max:100,step:.1,onChange:a=>t("ssao",{...r,worldDistanceThreshold:a})}),(0,fe.jsx)(K,{label:"World Distance Falloff",value:r.worldDistanceFalloff,min:0,max:20,step:.1,onChange:a=>t("ssao",{...r,worldDistanceFalloff:a})}),(0,fe.jsx)(K,{label:"World Proximity Threshold",value:r.worldProximityThreshold,min:0,max:100,step:.1,onChange:a=>t("ssao",{...r,worldProximityThreshold:a})}),(0,fe.jsx)(K,{label:"World Proximity Falloff",value:r.worldProximityFalloff,min:0,max:20,step:.1,onChange:a=>t("ssao",{...r,worldProximityFalloff:a})})]})}function jb({pp:e,set:t,open:n,toggle:i}){let{autofocus:r}=e;return(0,fe.jsxs)(lt,{title:"Auto focus",tooltip:"Keeps the focus plane tracking a subject so the image stays sharp where you want it.",open:n.autofocus,onToggle:()=>i("autofocus"),disabled:!r.enabled,trailing:(0,fe.jsx)(ht,{checked:r.enabled,onChange:a=>t("autofocus",{...r,enabled:a}),label:"Toggle Autofocus"}),children:[(0,fe.jsx)(K,{label:"Focus Distance",value:r.focusDistance,min:0,max:50,step:.1,onChange:a=>t("autofocus",{...r,focusDistance:a})}),(0,fe.jsx)(K,{label:"Focus Range",value:r.focusRange,min:.1,max:50,step:.1,onChange:a=>t("autofocus",{...r,focusRange:a})}),(0,fe.jsx)(K,{label:"Focal Length",value:r.focalLength,min:0,max:1,step:.01,onChange:a=>t("autofocus",{...r,focalLength:a})}),(0,fe.jsx)(K,{label:"Bokeh Scale",value:r.bokehScale,min:0,max:20,step:.1,onChange:a=>t("autofocus",{...r,bokehScale:a})}),(0,fe.jsx)(Xi,{label:"Target",value:r.target,min:-100,max:100,step:.1,onChange:a=>t("autofocus",{...r,target:a})}),(0,fe.jsx)(bt,{label:"Mouse Follow",checked:r.mouse,onChange:a=>t("autofocus",{...r,mouse:a})}),(0,fe.jsx)(bt,{label:"Manual Update",checked:r.manual,onChange:a=>t("autofocus",{...r,manual:a})}),(0,fe.jsx)(K,{label:"Debug",value:r.debug,min:0,max:1,step:.01,onChange:a=>t("autofocus",{...r,debug:a})}),(0,fe.jsx)(K,{label:"Smooth Time",value:r.smoothTime,min:0,max:2,step:.01,onChange:a=>t("autofocus",{...r,smoothTime:a})})]})}function Hb({pp:e,set:t,open:n,toggle:i}){let{godRays:r}=e;return(0,fe.jsxs)(lt,{title:"God Rays",tooltip:"Creates light shafts that streak outward from a bright sun or light source.",open:n.godRays,onToggle:()=>i("godRays"),disabled:!r.enabled,trailing:(0,fe.jsx)(ht,{checked:r.enabled,onChange:a=>t("godRays",{...r,enabled:a}),label:"Toggle GodRays"}),children:[(0,fe.jsx)(Xi,{label:"Sun Position",value:r.sunPosition,min:-100,max:100,step:.1,onChange:a=>t("godRays",{...r,sunPosition:a})}),(0,fe.jsx)(K,{label:"Samples",value:r.samples,min:1,max:128,step:1,onChange:a=>t("godRays",{...r,samples:a})}),(0,fe.jsx)(K,{label:"Density",value:r.density,min:0,max:2,step:.01,onChange:a=>t("godRays",{...r,density:a})}),(0,fe.jsx)(K,{label:"Decay",value:r.decay,min:0,max:1,step:.01,onChange:a=>t("godRays",{...r,decay:a})}),(0,fe.jsx)(K,{label:"Weight",value:r.weight,min:0,max:2,step:.01,onChange:a=>t("godRays",{...r,weight:a})}),(0,fe.jsx)(K,{label:"Exposure",value:r.exposure,min:0,max:2,step:.01,onChange:a=>t("godRays",{...r,exposure:a})}),(0,fe.jsx)(K,{label:"Clamp Max",value:r.clampMax,min:0,max:2,step:.01,onChange:a=>t("godRays",{...r,clampMax:a})}),(0,fe.jsx)(bt,{label:"Blur",checked:r.blur,onChange:a=>t("godRays",{...r,blur:a})}),(0,fe.jsx)(sr,{label:"Kernel Size",value:r.kernelSize,options:ns,onChange:a=>t("godRays",{...r,kernelSize:a})})]})}function Gb({pp:e,set:t,open:n,toggle:i}){let{lensflare:r}=e;return(0,fe.jsxs)(lt,{title:"Lens Flare",tooltip:"Adds camera flare artifacts and glow from a bright light source.",open:n.lensflare,onToggle:()=>i("lensflare"),disabled:!r.enabled,trailing:(0,fe.jsx)(ht,{checked:r.enabled,onChange:a=>t("lensflare",{...r,enabled:a}),label:"Toggle Lensflare"}),children:[(0,fe.jsx)(Xi,{label:"Lens Position",value:r.lensPosition,min:-100,max:100,step:.1,onChange:a=>t("lensflare",{...r,lensPosition:a})}),(0,fe.jsx)(K,{label:"Smooth Time",value:r.smoothTime,min:0,max:1,step:.01,onChange:a=>t("lensflare",{...r,smoothTime:a})}),(0,fe.jsx)(K,{label:"Glare Size",value:r.glareSize,min:0,max:1,step:.01,onChange:a=>t("lensflare",{...r,glareSize:a})}),(0,fe.jsx)(K,{label:"Flare Size",value:r.flareSize,min:0,max:.1,step:.001,onChange:a=>t("lensflare",{...r,flareSize:a})}),(0,fe.jsx)(K,{label:"Flare Speed",value:r.flareSpeed,min:0,max:.2,step:.001,onChange:a=>t("lensflare",{...r,flareSpeed:a})}),(0,fe.jsx)(K,{label:"Flare Shape",value:r.flareShape,min:0,max:.2,step:.001,onChange:a=>t("lensflare",{...r,flareShape:a})}),(0,fe.jsx)(bt,{label:"Animated",checked:r.animated,onChange:a=>t("lensflare",{...r,animated:a})}),(0,fe.jsx)(bt,{label:"Anamorphic",checked:r.anamorphic,onChange:a=>t("lensflare",{...r,anamorphic:a})}),(0,fe.jsx)(Tr,{label:"Color Gain",value:r.colorGain,onChange:a=>t("lensflare",{...r,colorGain:a})}),(0,fe.jsx)(K,{label:"Halo Scale",value:r.haloScale,min:0,max:2,step:.01,onChange:a=>t("lensflare",{...r,haloScale:a})}),(0,fe.jsx)(bt,{label:"Secondary Ghosts",checked:r.secondaryGhosts,onChange:a=>t("lensflare",{...r,secondaryGhosts:a})}),(0,fe.jsx)(bt,{label:"Additional Streaks",checked:r.aditionalStreaks,onChange:a=>t("lensflare",{...r,aditionalStreaks:a})}),(0,fe.jsx)(K,{label:"Ghost Scale",value:r.ghostScale,min:0,max:1,step:.01,onChange:a=>t("lensflare",{...r,ghostScale:a})}),(0,fe.jsx)(K,{label:"Opacity",value:r.opacity,min:0,max:1,step:.01,onChange:a=>t("lensflare",{...r,opacity:a})}),(0,fe.jsx)(bt,{label:"Star Burst",checked:r.starBurst,onChange:a=>t("lensflare",{...r,starBurst:a})})]})}function Wb({pp:e,set:t,open:n,toggle:i}){let{depthOfField:r}=e;return(0,fe.jsxs)(lt,{title:"Depth Of Field",tooltip:"Blurs areas that sit away from the focal plane for a camera-like look.",open:n.depthOfField,onToggle:()=>i("depthOfField"),disabled:!r.enabled,trailing:(0,fe.jsx)(ht,{checked:r.enabled,onChange:a=>t("depthOfField",{...r,enabled:a}),label:"Toggle DepthOfField"}),children:[(0,fe.jsx)(K,{label:"Focus Distance",value:r.focusDistance,min:0,max:50,step:.1,onChange:a=>t("depthOfField",{...r,focusDistance:a})}),(0,fe.jsx)(K,{label:"Focus Range",value:r.focusRange,min:.1,max:50,step:.1,onChange:a=>t("depthOfField",{...r,focusRange:a})}),(0,fe.jsx)(K,{label:"Focal Length",value:r.focalLength,min:0,max:1,step:.01,onChange:a=>t("depthOfField",{...r,focalLength:a})}),(0,fe.jsx)(K,{label:"Bokeh Scale",value:r.bokehScale,min:0,max:20,step:.1,onChange:a=>t("depthOfField",{...r,bokehScale:a})})]})}var He=require("react/jsx-runtime"),p_=["linear","reinhard","aces"];function Xb({pp:e,set:t,open:n,toggle:i}){let{colorAverage:r}=e;return(0,He.jsx)(lt,{title:"Color Average",tooltip:"Blends the frame toward a single average color for a washed-out stylized look.",open:n.colorAverage,onToggle:()=>i("colorAverage"),disabled:!r.enabled,trailing:(0,He.jsx)(ht,{checked:r.enabled,onChange:a=>t("colorAverage",{...r,enabled:a}),label:"Toggle ColorAverage"}),children:(0,He.jsx)("div",{className:"se-placeholder",children:"Averages the frame color using the docs default blend mode."})})}function qb({pp:e,set:t,open:n,toggle:i}){let{brightnessContrast:r}=e;return(0,He.jsxs)(lt,{title:"Brightness Contrast",tooltip:"Raises or lowers overall brightness and contrast across the scene.",open:n.brightnessContrast,onToggle:()=>i("brightnessContrast"),disabled:!r.enabled,trailing:(0,He.jsx)(ht,{checked:r.enabled,onChange:a=>t("brightnessContrast",{...r,enabled:a}),label:"Toggle BrightnessContrast"}),children:[(0,He.jsx)(K,{label:"Brightness",value:r.brightness,min:-1,max:1,step:.01,onChange:a=>t("brightnessContrast",{...r,brightness:a})}),(0,He.jsx)(K,{label:"Contrast",value:r.contrast,min:-1,max:1,step:.01,onChange:a=>t("brightnessContrast",{...r,contrast:a})})]})}function Yb({pp:e,set:t,open:n,toggle:i}){let{hueSaturation:r}=e;return(0,He.jsxs)(lt,{title:"Hue Saturation",tooltip:"Shifts the hue and saturation to tint the whole image.",open:n.hueSaturation,onToggle:()=>i("hueSaturation"),disabled:!r.enabled,trailing:(0,He.jsx)(ht,{checked:r.enabled,onChange:a=>t("hueSaturation",{...r,enabled:a}),label:"Toggle HueSaturation"}),children:[(0,He.jsx)(K,{label:"Hue",value:r.hue,min:-Math.PI,max:Math.PI,step:.01,formatValue:a=>`${a.toFixed(2)} rad`,onChange:a=>t("hueSaturation",{...r,hue:a})}),(0,He.jsx)(K,{label:"Saturation",value:r.saturation,min:-1,max:1,step:.01,onChange:a=>t("hueSaturation",{...r,saturation:a})})]})}function $b({pp:e,set:t,open:n,toggle:i}){let{vignette:r}=e;return(0,He.jsxs)(lt,{title:"Vignette",tooltip:"Darkens the edges of the screen so the center feels more focused.",open:n.vignette,onToggle:()=>i("vignette"),disabled:!r.enabled,trailing:(0,He.jsx)(ht,{checked:r.enabled,onChange:a=>t("vignette",{...r,enabled:a}),label:"Toggle Vignette"}),children:[(0,He.jsx)(K,{label:"Offset",value:r.offset,min:0,max:1,step:.01,onChange:a=>t("vignette",{...r,offset:a})}),(0,He.jsx)(K,{label:"Darkness",value:r.darkness,min:0,max:1,step:.01,onChange:a=>t("vignette",{...r,darkness:a})}),(0,He.jsx)(bt,{label:"Eskil",checked:r.eskil,onChange:a=>t("vignette",{...r,eskil:a})})]})}function Kb({pp:e,set:t,open:n,toggle:i}){let{bloom:r}=e;return(0,He.jsxs)(lt,{title:"Bloom",tooltip:"Makes bright areas glow and bleed softly into nearby pixels.",open:n.bloom,onToggle:()=>i("bloom"),disabled:!r.enabled,trailing:(0,He.jsx)(ht,{checked:r.enabled,onChange:a=>t("bloom",{...r,enabled:a}),label:"Toggle Bloom"}),children:[(0,He.jsx)(K,{label:"Threshold",value:r.luminanceThreshold,min:0,max:1,step:.01,onChange:a=>t("bloom",{...r,luminanceThreshold:a})}),(0,He.jsx)(K,{label:"Smoothing",value:r.luminanceSmoothing,min:0,max:1,step:.01,onChange:a=>t("bloom",{...r,luminanceSmoothing:a})}),(0,He.jsx)(K,{label:"Intensity",value:r.intensity,min:0,max:3,step:.05,onChange:a=>t("bloom",{...r,intensity:a})}),(0,He.jsx)(bt,{label:"Mipmap Blur",checked:r.mipmapBlur,onChange:a=>t("bloom",{...r,mipmapBlur:a})}),(0,He.jsx)(K,{label:"Radius",value:r.radius,min:0,max:1,step:.01,onChange:a=>t("bloom",{...r,radius:a})}),(0,He.jsx)(K,{label:"Levels",value:r.levels,min:1,max:16,step:1,onChange:a=>t("bloom",{...r,levels:a})})]})}function Zb({pp:e,set:t,open:n,toggle:i}){let{toneMapping:r}=e;return(0,He.jsxs)(lt,{title:"Tone Mapping",tooltip:"Remaps HDR lighting to screen output and controls exposure style.",open:n.toneMapping,onToggle:()=>i("toneMapping"),disabled:!r.enabled,trailing:(0,He.jsx)(ht,{checked:r.enabled,onChange:a=>t("toneMapping",{...r,enabled:a}),label:"Toggle ToneMapping"}),children:[(0,He.jsxs)("div",{className:"se-field",children:[(0,He.jsx)("span",{className:"se-fieldLabel",children:"Mode"}),(0,He.jsx)("div",{className:"se-segmentedControl",children:p_.map(a=>(0,He.jsx)("button",{type:"button",className:`se-segmentedOption ${r.mode===a?"se-segmentedOption--active":""}`,onClick:()=>t("toneMapping",{...r,mode:a}),children:a==="aces"?"Filmic":a.charAt(0).toUpperCase()+a.slice(1)},a))})]}),(0,He.jsx)(K,{label:"Resolution",value:r.resolution,min:64,max:4096,step:64,onChange:a=>t("toneMapping",{...r,resolution:a})}),(0,He.jsx)(K,{label:"White Point",value:r.whitePoint,min:0,max:16,step:.01,onChange:a=>t("toneMapping",{...r,whitePoint:a})}),(0,He.jsx)(K,{label:"Middle Grey",value:r.middleGrey,min:0,max:1,step:.01,onChange:a=>t("toneMapping",{...r,middleGrey:a})}),(0,He.jsx)(K,{label:"Min Luminance",value:r.minLuminance,min:0,max:1,step:.01,onChange:a=>t("toneMapping",{...r,minLuminance:a})}),(0,He.jsx)(K,{label:"Average Luminance",value:r.averageLuminance,min:0,max:4,step:.01,onChange:a=>t("toneMapping",{...r,averageLuminance:a})}),(0,He.jsx)(K,{label:"Adaptation Rate",value:r.adaptationRate,min:0,max:10,step:.01,onChange:a=>t("toneMapping",{...r,adaptationRate:a})}),(0,He.jsx)(K,{label:"Exposure",value:r.exposure,min:0,max:3,step:.01,onChange:a=>t("toneMapping",{...r,exposure:a})})]})}function Jb({pp:e,set:t,open:n,toggle:i}){let{sepia:r}=e;return(0,He.jsx)(lt,{title:"Sepia",tooltip:"Adds a warm vintage brown tint to the entire image.",open:n.sepia,onToggle:()=>i("sepia"),disabled:!r.enabled,trailing:(0,He.jsx)(ht,{checked:r.enabled,onChange:a=>t("sepia",{...r,enabled:a}),label:"Toggle Sepia"}),children:(0,He.jsx)(K,{label:"Intensity",value:r.intensity,min:0,max:1,step:.01,onChange:a=>t("sepia",{...r,intensity:a})})})}var Ne=require("react/jsx-runtime");function Qb({pp:e,set:t,open:n,toggle:i}){let{dotScreen:r}=e;return(0,Ne.jsxs)(lt,{title:"Dot Screen",tooltip:"Overlays a halftone dot pattern for a printed or retro look.",open:n.dotScreen,onToggle:()=>i("dotScreen"),disabled:!r.enabled,trailing:(0,Ne.jsx)(ht,{checked:r.enabled,onChange:a=>t("dotScreen",{...r,enabled:a}),label:"Toggle DotScreen"}),children:[(0,Ne.jsx)(K,{label:"Angle",value:r.angle,min:0,max:Math.PI*2,step:.01,formatValue:a=>`${a.toFixed(2)} rad`,onChange:a=>t("dotScreen",{...r,angle:a})}),(0,Ne.jsx)(K,{label:"Scale",value:r.scale,min:.1,max:10,step:.05,onChange:a=>t("dotScreen",{...r,scale:a})})]})}function ev({pp:e,set:t,open:n,toggle:i}){let{glitch:r}=e;return(0,Ne.jsxs)(lt,{title:"Glitch",tooltip:"Introduces digital distortion, tearing, and scan noise.",open:n.glitch,onToggle:()=>i("glitch"),disabled:!r.enabled,trailing:(0,Ne.jsx)(ht,{checked:r.enabled,onChange:a=>t("glitch",{...r,enabled:a}),label:"Toggle Glitch"}),children:[(0,Ne.jsx)(sr,{label:"Mode",value:r.mode,options:dm,onChange:a=>t("glitch",{...r,mode:a})}),(0,Ne.jsx)(Ca,{label:"Delay",value:r.delay,min:0,max:10,step:.01,onChange:a=>t("glitch",{...r,delay:a})}),(0,Ne.jsx)(Ca,{label:"Duration",value:r.duration,min:0,max:5,step:.01,onChange:a=>t("glitch",{...r,duration:a})}),(0,Ne.jsx)(Ca,{label:"Strength",value:r.strength,min:0,max:2,step:.01,onChange:a=>t("glitch",{...r,strength:a})}),(0,Ne.jsx)(Ca,{label:"Chromatic Aberration Offset",value:r.chromaticAberrationOffset,min:0,max:.02,step:1e-4,onChange:a=>t("glitch",{...r,chromaticAberrationOffset:a})}),(0,Ne.jsx)(K,{label:"Columns",value:r.columns,min:0,max:.5,step:.001,onChange:a=>t("glitch",{...r,columns:a})}),(0,Ne.jsx)(K,{label:"Ratio",value:r.ratio,min:0,max:1,step:.01,onChange:a=>t("glitch",{...r,ratio:a})})]})}function tv({pp:e,set:t,open:n,toggle:i}){let{grid:r}=e;return(0,Ne.jsxs)(lt,{title:"Grid",tooltip:"Adds a visual grid overlay that feels retro or debug-like.",open:n.grid,onToggle:()=>i("grid"),disabled:!r.enabled,trailing:(0,Ne.jsx)(ht,{checked:r.enabled,onChange:a=>t("grid",{...r,enabled:a}),label:"Toggle Grid"}),children:[(0,Ne.jsx)(K,{label:"Scale",value:r.scale,min:.1,max:10,step:.05,onChange:a=>t("grid",{...r,scale:a})}),(0,Ne.jsx)(K,{label:"Line Width",value:r.lineWidth,min:0,max:1,step:.01,onChange:a=>t("grid",{...r,lineWidth:a})})]})}function nv({pp:e,set:t,open:n,toggle:i}){let{chromaticAberration:r}=e;return(0,Ne.jsxs)(lt,{title:"Chromatic Aberration",tooltip:"Separates color channels slightly to mimic lens fringing.",open:n.chromaticAberration,onToggle:()=>i("chromaticAberration"),disabled:!r.enabled,trailing:(0,Ne.jsx)(ht,{checked:r.enabled,onChange:a=>t("chromaticAberration",{...r,enabled:a}),label:"Toggle ChromaticAberration"}),children:[(0,Ne.jsx)(K,{label:"Offset X",value:r.offsetX,min:0,max:.02,step:1e-4,onChange:a=>t("chromaticAberration",{...r,offsetX:a})}),(0,Ne.jsx)(K,{label:"Offset Y",value:r.offsetY,min:0,max:.02,step:1e-4,onChange:a=>t("chromaticAberration",{...r,offsetY:a})}),(0,Ne.jsx)(bt,{label:"Radial Modulation",checked:r.radialModulation,onChange:a=>t("chromaticAberration",{...r,radialModulation:a})}),(0,Ne.jsx)(K,{label:"Modulation Offset",value:r.modulationOffset,min:0,max:1,step:.01,onChange:a=>t("chromaticAberration",{...r,modulationOffset:a})})]})}function rv({pp:e,set:t,open:n,toggle:i}){let{noise:r}=e;return(0,Ne.jsxs)(lt,{title:"Noise",tooltip:"Adds film grain or static noise to the rendered image.",open:n.noise,onToggle:()=>i("noise"),disabled:!r.enabled,trailing:(0,Ne.jsx)(ht,{checked:r.enabled,onChange:a=>t("noise",{...r,enabled:a}),label:"Toggle Noise"}),children:[(0,Ne.jsx)(K,{label:"Amount",value:r.opacity,min:0,max:1,step:.01,onChange:a=>t("noise",{...r,opacity:a})}),(0,Ne.jsx)(bt,{label:"Premultiply",checked:r.premultiply,onChange:a=>t("noise",{...r,premultiply:a})})]})}function iv({pp:e,set:t,open:n,toggle:i}){let{scanline:r}=e;return(0,Ne.jsx)(lt,{title:"Scan Line",tooltip:"Draws horizontal CRT-style scan lines over the frame.",open:n.scanline,onToggle:()=>i("scanline"),disabled:!r.enabled,trailing:(0,Ne.jsx)(ht,{checked:r.enabled,onChange:a=>t("scanline",{...r,enabled:a}),label:"Toggle Scanline"}),children:(0,Ne.jsx)(K,{label:"Density",value:r.density,min:0,max:10,step:.25,onChange:a=>t("scanline",{...r,density:a})})})}function av({pp:e,set:t,open:n,toggle:i}){let{pixelation:r}=e;return(0,Ne.jsx)(lt,{title:"Pixelation",tooltip:"Reduces detail into larger pixels for a blocky stylized effect.",open:n.pixelation,onToggle:()=>i("pixelation"),disabled:!r.enabled,trailing:(0,Ne.jsx)(ht,{checked:r.enabled,onChange:a=>t("pixelation",{...r,enabled:a}),label:"Toggle Pixelation"}),children:(0,Ne.jsx)(K,{label:"Granularity",value:r.granularity,min:0,max:20,step:1,onChange:a=>t("pixelation",{...r,granularity:a})})})}function ov({pp:e,set:t,open:n,toggle:i}){let{ramp:r}=e;return(0,Ne.jsxs)(lt,{title:"Ramp",tooltip:"Adds a screen-space color gradient, or masks effects earlier in the stack.",open:n.ramp,onToggle:()=>i("ramp"),disabled:!r.enabled,trailing:(0,Ne.jsx)(ht,{checked:r.enabled,onChange:a=>t("ramp",{...r,enabled:a}),label:"Toggle Ramp"}),children:[(0,Ne.jsx)(sr,{label:"Ramp Type",value:r.rampType,options:um,onChange:a=>t("ramp",{...r,rampType:a})}),(0,Ne.jsx)(Ca,{label:"Ramp Start",value:r.rampStart,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,rampStart:a})}),(0,Ne.jsx)(Ca,{label:"Ramp End",value:r.rampEnd,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,rampEnd:a})}),(0,Ne.jsx)(Tr,{label:"Start Color",value:r.startColor,onChange:a=>t("ramp",{...r,startColor:a})}),(0,Ne.jsx)(Tr,{label:"End Color",value:r.endColor,onChange:a=>t("ramp",{...r,endColor:a})}),!r.rampMask&&(0,Ne.jsx)(K,{label:"Gradient Opacity",value:r.opacity??.5,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,opacity:a})}),(0,Ne.jsx)(K,{label:"Bias",value:r.rampBias,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,rampBias:a})}),(0,Ne.jsx)(K,{label:"Gain",value:r.rampGain,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,rampGain:a})}),(0,Ne.jsx)(bt,{label:"Mask Earlier Effects",checked:r.rampMask,onChange:a=>t("ramp",{...r,rampMask:a})}),(0,Ne.jsx)(bt,{label:"Invert",checked:r.rampInvert,onChange:a=>t("ramp",{...r,rampInvert:a})})]})}var Lt=require("react/jsx-runtime");function sv({pp:e,set:t,open:n,toggle:i}){let{outline:r}=e;return(0,Lt.jsxs)(lt,{title:"Outline",tooltip:"Draws a visible edge around the selected object binding.",open:n.outline,onToggle:()=>i("outline"),disabled:!r.enabled,trailing:(0,Lt.jsx)(ht,{checked:r.enabled,onChange:a=>t("outline",{...r,enabled:a}),label:"Toggle Outline"}),children:[(0,Lt.jsx)("div",{className:"se-placeholder",children:"Outlines the currently selected object binding in the model editor."}),(0,Lt.jsx)(K,{label:"Selection Layer",value:r.selectionLayer,min:0,max:20,step:1,onChange:a=>t("outline",{...r,selectionLayer:a})}),(0,Lt.jsx)(K,{label:"Edge Strength",value:r.edgeStrength,min:0,max:10,step:.1,onChange:a=>t("outline",{...r,edgeStrength:a})}),(0,Lt.jsx)(K,{label:"Pulse Speed",value:r.pulseSpeed,min:0,max:10,step:.1,onChange:a=>t("outline",{...r,pulseSpeed:a})}),(0,Lt.jsx)(Tr,{label:"Visible Edge Color",value:r.visibleEdgeColor,onChange:a=>t("outline",{...r,visibleEdgeColor:a})}),(0,Lt.jsx)(Tr,{label:"Hidden Edge Color",value:r.hiddenEdgeColor,onChange:a=>t("outline",{...r,hiddenEdgeColor:a})}),(0,Lt.jsx)(sr,{label:"Kernel Size",value:r.kernelSize,options:ns,onChange:a=>t("outline",{...r,kernelSize:a})}),(0,Lt.jsx)(bt,{label:"Blur",checked:r.blur,onChange:a=>t("outline",{...r,blur:a})}),(0,Lt.jsx)(bt,{label:"X-Ray",checked:r.xRay,onChange:a=>t("outline",{...r,xRay:a})})]})}function lv({pp:e,set:t,open:n,toggle:i}){let{selectiveBloom:r}=e;return(0,Lt.jsxs)(lt,{title:"Selective Bloom",tooltip:"Applies bloom only to objects assigned to the selected layer.",open:n.selectiveBloom,onToggle:()=>i("selectiveBloom"),disabled:!r.enabled,trailing:(0,Lt.jsx)(ht,{checked:r.enabled,onChange:a=>t("selectiveBloom",{...r,enabled:a}),label:"Toggle SelectiveBloom"}),children:[(0,Lt.jsx)("div",{className:"se-placeholder",children:"Applies bloom to the currently selected object binding."}),(0,Lt.jsx)(K,{label:"Selection Layer",value:r.selectionLayer,min:0,max:20,step:1,onChange:a=>t("selectiveBloom",{...r,selectionLayer:a})}),(0,Lt.jsx)(K,{label:"Intensity",value:r.intensity,min:0,max:5,step:.05,onChange:a=>t("selectiveBloom",{...r,intensity:a})}),(0,Lt.jsx)(K,{label:"Threshold",value:r.luminanceThreshold,min:0,max:1,step:.01,onChange:a=>t("selectiveBloom",{...r,luminanceThreshold:a})}),(0,Lt.jsx)(K,{label:"Smoothing",value:r.luminanceSmoothing,min:0,max:1,step:.01,onChange:a=>t("selectiveBloom",{...r,luminanceSmoothing:a})}),(0,Lt.jsx)(sr,{label:"Kernel Size",value:r.kernelSize,options:ns,onChange:a=>t("selectiveBloom",{...r,kernelSize:a})}),(0,Lt.jsx)(bt,{label:"Mipmap Blur",checked:r.mipmapBlur,onChange:a=>t("selectiveBloom",{...r,mipmapBlur:a})}),(0,Lt.jsx)(bt,{label:"Inverted",checked:r.inverted,onChange:a=>t("selectiveBloom",{...r,inverted:a})}),(0,Lt.jsx)(bt,{label:"Ignore Background",checked:r.ignoreBackground,onChange:a=>t("selectiveBloom",{...r,ignoreBackground:a})})]})}function cv({pp:e,set:t,open:n,toggle:i}){let{smaa:r}=e;return(0,Lt.jsx)(lt,{title:"SMAA",tooltip:"Reduces jagged edges with subpixel anti-aliasing.",open:n.smaa,onToggle:()=>i("smaa"),trailing:(0,Lt.jsx)(ht,{checked:r.enabled,onChange:a=>t("smaa",{...r,enabled:a}),label:"Toggle SMAA"}),children:(0,Lt.jsx)("div",{className:"se-placeholder",children:"Subpixel Morphological Anti-Aliasing smooths jagged edges in post-process."})})}var Ot=require("react/jsx-runtime");function Mp({config:e,onChange:t}){let[n,i]=(0,dv.useState)({autofocus:!1,colorAverage:!1,dotScreen:!1,glitch:!1,godRays:!1,grid:!1,lensflare:!1,outline:!1,selectiveBloom:!1,ramp:!1,ssao:!1,brightnessContrast:!1,hueSaturation:!1,depthOfField:!1,chromaticAberration:!1,vignette:!1,bloom:!1,toneMapping:!1,noise:!1,sepia:!1,scanline:!1,pixelation:!1,smaa:!1}),r=c=>i(l=>({...l,[c]:!l[c]})),a=e.postProcessing,s={pp:a,set:(c,l)=>t({...e,postProcessing:{...a,[c]:l}}),open:n,toggle:r};return(0,Ot.jsxs)("div",{className:"se-generalContent",children:[(0,Ot.jsx)(Fb,{...s}),(0,Ot.jsx)(jb,{...s}),(0,Ot.jsx)(Xb,{...s}),(0,Ot.jsx)(Qb,{...s}),(0,Ot.jsx)(ev,{...s}),(0,Ot.jsx)(Hb,{...s}),(0,Ot.jsx)(tv,{...s}),(0,Ot.jsx)(Gb,{...s}),(0,Ot.jsx)(sv,{...s}),(0,Ot.jsx)(lv,{...s}),(0,Ot.jsx)(qb,{...s}),(0,Ot.jsx)(Yb,{...s}),(0,Ot.jsx)(Wb,{...s}),(0,Ot.jsx)(nv,{...s}),(0,Ot.jsx)($b,{...s}),(0,Ot.jsx)(Kb,{...s}),(0,Ot.jsx)(Zb,{...s}),(0,Ot.jsx)(rv,{...s}),(0,Ot.jsx)(Jb,{...s}),(0,Ot.jsx)(iv,{...s}),(0,Ot.jsx)(av,{...s}),(0,Ot.jsx)(ov,{...s}),(0,Ot.jsx)(cv,{...s})]})}var qs=require("react"),Yi=require("lucide-react");var ge=require("react/jsx-runtime"),h_=["512","1024","2048","4096"],uv={none:"None",directional:"Direction",point:"Point",spot:"Spot",hemisphere:"Hemi"};function m_({index:e,light:t,selected:n,onSelect:i,onToggleVisible:r}){return(0,ge.jsxs)("div",{className:`se-lightRow ${n?"se-lightRow--active":""}`,onClick:i,children:[(0,ge.jsxs)("span",{className:"se-lightRowLabel",children:[e+1,": ",uv[t.type]]}),(0,ge.jsx)("button",{type:"button",className:"se-iconButton","aria-label":t.visible?"Hide light":"Show light",onClick:a=>{a.stopPropagation(),r()},children:t.visible?(0,ge.jsx)(Yi.Eye,{size:14}):(0,ge.jsx)(Yi.EyeOff,{size:14})})]})}function f_(){return{id:crypto.randomUUID(),type:"directional",color:"#ffffff",intensity:1,position:[5,10,5],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0}}function Cp({config:e,onChange:t}){let[n,i]=(0,qs.useState)({lights:!0,shadows:!1,groundShadows:!1,environment:!1,envShadow:!1}),r=(0,qs.useSyncExternalStore)(vp,zc),[a,o]=(0,qs.useState)(e.lighting.lights[0]?.id??null),s=r??a,c=b=>{o(b),js(b)},l=b=>i(w=>({...w,[b]:!w[b]})),{tier:u}=Cr(),d=Mi(u,"starter"),{lighting:h,shadows:f,groundShadows:g,environment:x}=e,P=b=>t({...e,lighting:b}),y=b=>t({...e,shadows:b}),p=b=>t({...e,groundShadows:b}),m=b=>t({...e,environment:b}),M=(b,w)=>{P({...h,lights:h.lights.map(C=>C.id===b?{...C,...w}:C)})},_=h.lights.find(b=>b.id===s)??null,T=()=>{let b=f_();P({...h,lights:[...h.lights,b]}),c(b.id)},E=()=>{if(!_)return;let b=h.lights.filter(w=>w.id!==_.id);P({...h,lights:b}),c(b[0]?.id??null)};return(0,ge.jsxs)("div",{className:"se-generalContent",children:[(0,ge.jsxs)(lt,{title:"Lights",open:n.lights,onToggle:()=>l("lights"),children:[(0,ge.jsx)("div",{className:"se-lightList",children:h.lights.map((b,w)=>(0,ge.jsx)(m_,{index:w,light:b,selected:b.id===s,onSelect:()=>c(b.id),onToggleVisible:()=>M(b.id,{visible:!b.visible})},b.id))}),(0,ge.jsxs)("div",{className:"se-lightActions",children:[(0,ge.jsx)("button",{type:"button",className:"se-iconButton",onClick:T,title:"Add light",children:(0,ge.jsx)(Yi.Plus,{size:14})}),_&&h.lights.length>1&&(0,ge.jsx)("button",{type:"button",className:"se-iconButton",onClick:E,title:"Remove selected light",children:(0,ge.jsx)(Yi.Trash2,{size:14})})]}),_?(0,ge.jsxs)("div",{className:"se-lightProps",children:[(0,ge.jsxs)("div",{className:"se-field",children:[(0,ge.jsx)("span",{className:"se-fieldLabel",children:"Type"}),(0,ge.jsx)("div",{className:"se-segmentedControl",style:{gridAutoColumns:"1fr"},children:sm.map(b=>(0,ge.jsx)("button",{type:"button",className:`se-segmentedOption ${_.type===b?"se-segmentedOption--active":""}`,onClick:()=>M(_.id,{type:b}),children:uv[b]},b))})]}),(0,ge.jsx)(Tr,{label:"Color",value:_.color,onChange:b=>M(_.id,{color:b})}),(0,ge.jsx)(K,{label:"Intensity",value:_.intensity,min:0,max:10,step:.1,onChange:b=>M(_.id,{intensity:b})}),_.type!=="hemisphere"&&_.type!=="none"&&(0,ge.jsx)(Xi,{label:"Position",value:_.position,min:-100,max:100,step:.05,onChange:b=>M(_.id,{position:b})}),_.type==="spot"&&(0,ge.jsxs)(ge.Fragment,{children:[(0,ge.jsx)(K,{label:"Angle",value:_.angle??Math.PI/6,min:0,max:Math.PI/2,step:.01,formatValue:b=>`${Math.round(b*180/Math.PI)}\xB0`,onChange:b=>M(_.id,{angle:b})}),(0,ge.jsx)(K,{label:"Penumbra",value:_.penumbra??.2,min:0,max:1,step:.01,onChange:b=>M(_.id,{penumbra:b})}),(0,ge.jsx)(K,{label:"Distance",value:_.distance??0,min:0,max:100,step:.5,onChange:b=>M(_.id,{distance:b})}),(0,ge.jsx)(K,{label:"Decay",value:_.decay??2,min:0,max:4,step:.1,onChange:b=>M(_.id,{decay:b})})]}),(0,ge.jsx)(bt,{label:"Attached to camera",checked:_.attachedToCamera,onChange:b=>M(_.id,{attachedToCamera:b})}),(0,ge.jsx)(bt,{label:"Cast shadows",checked:_.castShadow,onChange:b=>M(_.id,{castShadow:b})}),(0,ge.jsx)(K,{label:"Shadow bias",value:_.shadowBias,min:-.01,max:.01,step:1e-4,onChange:b=>M(_.id,{shadowBias:b})})]}):null]}),(0,ge.jsxs)(lt,{title:"Shadows",open:n.shadows,onToggle:()=>l("shadows"),disabled:!f.enabled,trailing:(0,ge.jsx)(ht,{checked:f.enabled,onChange:b=>y({...f,enabled:b}),label:"Toggle shadows"}),children:[(0,ge.jsx)(sr,{label:"Map size",value:String(f.mapSize),options:h_,onChange:b=>y({...f,mapSize:Number(b)})}),(0,ge.jsx)(K,{label:"Bias",value:f.bias,min:-.01,max:.01,step:1e-4,onChange:b=>y({...f,bias:b})}),(0,ge.jsx)(K,{label:"Normal bias",value:f.normalBias,min:0,max:.2,step:.01,onChange:b=>y({...f,normalBias:b})}),(0,ge.jsx)(K,{label:"Radius (softness)",value:f.radius,min:0,max:20,step:.5,onChange:b=>y({...f,radius:b})})]}),(0,ge.jsxs)(lt,{title:"Ground Shadows",open:n.groundShadows,onToggle:()=>l("groundShadows"),disabled:!g.enabled,trailing:(0,ge.jsx)(ht,{checked:g.enabled,onChange:b=>p({...g,enabled:b}),label:"Toggle ground shadows"}),children:[(0,ge.jsxs)("div",{className:"se-field",children:[(0,ge.jsx)("span",{className:"se-fieldLabel",children:"Mode"}),(0,ge.jsx)("div",{className:"se-segmentedControl",style:{gridAutoColumns:"1fr"},children:["shadowCatcher"].map(b=>(0,ge.jsx)("button",{type:"button",className:`se-segmentedOption ${g.mode===b?"se-segmentedOption--active":""}`,onClick:()=>p({...g,mode:b}),children:b==="shadowCatcher"?"Shadow Catcher":"Baked AO"},b))})]}),g.mode==="bakedAO"&&(0,ge.jsx)("div",{className:"se-placeholder",children:"Requires pre-baked AO textures \u2014 not yet available."}),(0,ge.jsx)(K,{label:"Intensity",value:g.intensity,min:0,max:1,step:.01,onChange:b=>p({...g,intensity:b})}),(0,ge.jsx)(K,{label:"Border fade",value:g.borderFade,min:0,max:10,step:.1,onChange:b=>p({...g,borderFade:b})}),(0,ge.jsx)(K,{label:"Height",value:g.height,min:-5,max:5,step:.1,onChange:b=>p({...g,height:b})}),(0,ge.jsx)(K,{label:"Size",value:g.size,min:1,max:50,step:.5,onChange:b=>p({...g,size:b})})]}),(0,ge.jsx)(lt,{title:"Environment",open:n.environment,onToggle:()=>l("environment"),children:d?(0,ge.jsxs)(ge.Fragment,{children:[(0,ge.jsx)(K,{label:"Orientation",value:x.rotation,min:0,max:360,step:1,formatValue:b=>`${b}\xB0`,onChange:b=>m({...x,rotation:b})}),(0,ge.jsx)(K,{label:"Brightness",value:x.intensity,min:0,max:3,step:.05,onChange:b=>m({...x,intensity:b})}),(0,ge.jsxs)(lt,{title:"Shadow",open:n.envShadow,onToggle:()=>l("envShadow"),trailing:(0,ge.jsx)(ht,{checked:x.shadowLight.enabled,onChange:b=>m({...x,shadowLight:{...x.shadowLight,enabled:b}}),label:"Toggle environment shadow light"}),disabled:!x.shadowLight.enabled,children:[(0,ge.jsx)(K,{label:"Light intensity",value:x.shadowLight.intensity,min:0,max:20,step:.1,onChange:b=>m({...x,shadowLight:{...x.shadowLight,intensity:b}})}),(0,ge.jsx)(K,{label:"Shadow bias",value:x.shadowLight.bias,min:-.01,max:.01,step:1e-4,onChange:b=>m({...x,shadowLight:{...x.shadowLight,bias:b}})})]})]}):(0,ge.jsx)(tr,{requiredTier:"starter",feature:"Environment lighting"})})]})}var $c=require("react"),ai=require("lucide-react");var ve=require("react/jsx-runtime");function g_(e){if(!Number.isFinite(e)||e<=0)return"Unknown duration";let t=Math.round(e*10)/10;if(t<60)return`${t.toFixed(1)}s`;let n=Math.floor(t/60),i=(t%60).toFixed(1).padStart(4,"0");return`${n}:${i}`}function pv(e){let t=Number.isFinite(e)&&e>0?e:0;if(t<60)return`${t.toFixed(1)}s`;let n=Math.floor(t/60),i=(t%60).toFixed(1).padStart(4,"0");return`${n}:${i}`}function b_(e){return Number.isFinite(e)?Math.min(3,Math.max(.1,Number(e.toFixed(2)))):1}function Tp({config:e,onChange:t,clipDetails:n,currentClip:i,isPlaying:r,time:a,play:o,pause:s,stop:c,setSpeed:l,seek:u}){let[d,h]=(0,$c.useState)(!1),f=(0,$c.useMemo)(()=>new Map(n.map(b=>[b.sourceName,b.duration])),[n]),g=e.animations.clips.filter(b=>!b.hidden),x=e.animations.clips.filter(b=>b.hidden),P=(b,w=e.animations.autoplayClip)=>{t({...e,animations:{clips:b(e.animations.clips),autoplayClip:w}})},y=(b,w)=>{P(C=>C.map(S=>S.sourceName===b?w(S):S))},p=(b,w)=>{y(b,C=>({...C,loopMode:w}))},m=(b,w)=>{let C=b_(w);y(b,S=>({...S,speed:C})),i===b&&l(C)},M=(b,w)=>{y(b,C=>({...C,displayName:w}))},_=b=>{let w=e.animations.autoplayClip===b?null:b;t({...e,animations:{...e.animations,autoplayClip:w}})},T=b=>{P(w=>w.map(C=>C.sourceName===b?{...C,hidden:!0}:C),e.animations.autoplayClip===b?null:e.animations.autoplayClip),i===b&&c()},E=b=>{P(w=>w.map(C=>C.sourceName===b?{...C,hidden:!1}:C))};return e.animations.clips.length===0?(0,ve.jsx)(Ma,{title:"Animations",children:(0,ve.jsx)("div",{className:"se-helperCard",children:"Upload a model with embedded animations to manage playback, naming, autoplay, and per-clip speed here."})}):(0,ve.jsxs)(Ma,{title:"Animations",children:[g.length===0&&(0,ve.jsx)("div",{className:"se-helperCard",children:(0,ve.jsx)("span",{children:"Preview clips directly in the viewer, choose one optional autoplay animation, and use soft delete to hide clips without modifying the GLB."})}),g.length===0?(0,ve.jsx)("div",{className:"se-placeholder",children:"All animations are currently removed. Restore a clip below to make it available again."}):(0,ve.jsx)("div",{className:"se-animationList",children:g.map(b=>{let w=i===b.sourceName,C=f.get(b.sourceName)??0;return(0,ve.jsxs)("article",{className:`se-animationCard ${w?"se-animationCard--active":""}`,children:[(0,ve.jsxs)("div",{className:"se-animationHeader",children:[(0,ve.jsxs)("div",{className:"se-animationHeading",children:[(0,ve.jsxs)("div",{className:"se-animationTitleRow",children:[(0,ve.jsx)("span",{className:"se-animationStatus",children:w?r?"Playing":"Paused":"Ready"}),e.animations.autoplayClip===b.sourceName?(0,ve.jsx)("span",{className:"se-animationBadge",children:"Autoplay"}):null]}),(0,ve.jsx)("div",{className:"se-animationSource",children:b.sourceName})]}),(0,ve.jsx)("button",{type:"button",className:"se-animationDangerButton",onClick:()=>T(b.sourceName),title:"Remove animation",children:(0,ve.jsx)(ai.Trash2,{size:16})})]}),(0,ve.jsxs)("div",{className:"se-field",children:[(0,ve.jsx)("span",{className:"se-fieldLabel",children:"Display name"}),(0,ve.jsx)("input",{className:"se-textInput",value:b.displayName,onChange:O=>M(b.sourceName,O.target.value),placeholder:"Animation name"})]}),(0,ve.jsxs)("div",{className:"se-animationMeta",children:[(0,ve.jsx)("span",{children:g_(C)}),(0,ve.jsx)("span",{children:b.loopMode==="once"?"Play once":"Looping"}),(0,ve.jsxs)("span",{children:[b.speed.toFixed(2),"x"]})]}),(0,ve.jsxs)("div",{className:"se-animationButtonRow",children:[(()=>{let O=w&&r;return(0,ve.jsx)("button",{type:"button",className:"se-animationButton se-animationButton--icon",onClick:()=>O?s():o(b.sourceName),"aria-label":O?"Pause":"Play",title:O?"Pause":"Play",children:O?(0,ve.jsx)(ai.Pause,{size:16}):(0,ve.jsx)(ai.Play,{size:16})})})(),(0,ve.jsx)("button",{type:"button",className:"se-animationButton se-animationButton--icon",onClick:c,disabled:!w,"aria-label":"Stop",title:"Stop",children:(0,ve.jsx)(ai.Square,{size:16})})]}),(0,ve.jsxs)("div",{className:"se-animationSeekRow",children:[(0,ve.jsx)("input",{className:"se-slider se-animationSeek",type:"range",min:0,max:Math.max(C,.001),step:.01,value:w?Math.min(a,C):0,disabled:!w||C<=0,onChange:O=>u(Number(O.target.value)),"aria-label":"Seek"}),(0,ve.jsxs)("span",{className:"se-animationSeekTime",children:[pv(w?Math.min(a,C):0)," / ",pv(C)]})]}),(0,ve.jsxs)("div",{className:"se-animationGrid",children:[(0,ve.jsxs)("label",{className:"se-field",children:[(0,ve.jsx)("span",{className:"se-fieldLabel",children:"Loop mode"}),(0,ve.jsxs)("select",{className:"se-select",value:b.loopMode,onChange:O=>p(b.sourceName,O.target.value),children:[(0,ve.jsx)("option",{value:"repeat",children:"Loop"}),(0,ve.jsx)("option",{value:"once",children:"Play Once"})]})]}),(0,ve.jsxs)("label",{className:"se-field",children:[(0,ve.jsxs)("span",{className:"se-fieldLabel",children:["Speed",(0,ve.jsxs)("span",{className:"se-fieldValue",children:[b.speed.toFixed(2),"x"]})]}),(0,ve.jsxs)("div",{className:"se-animationSpeedRow",children:[(0,ve.jsx)("input",{className:"se-slider",type:"range",min:.1,max:3,step:.1,value:b.speed,onChange:O=>m(b.sourceName,Number(O.target.value))}),(0,ve.jsx)("input",{className:"se-numberInput se-animationSpeedInput",type:"number",min:.1,max:3,step:.1,value:b.speed,onChange:O=>m(b.sourceName,Number(O.target.value))})]})]})]}),(0,ve.jsx)("button",{type:"button",className:`se-animationAutoplayButton ${e.animations.autoplayClip===b.sourceName?"se-animationAutoplayButton--active":""}`,onClick:()=>_(b.sourceName),children:e.animations.autoplayClip===b.sourceName?"Disable autoplay":"Set as autoplay"})]},b.sourceName)})}),x.length>0?(0,ve.jsxs)("section",{className:"se-removedAnimations",children:[(0,ve.jsx)("button",{type:"button",className:"se-panelHeader",onClick:()=>h(b=>!b),children:(0,ve.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,ve.jsx)(ai.ChevronDown,{size:16,className:`se-panelChevron ${d?"se-panelChevron--open":""}`}),(0,ve.jsxs)("span",{className:"se-panelTitle",children:["Removed Animations (",x.length,")"]})]})}),d?(0,ve.jsx)("div",{className:"se-removedAnimationList",children:x.map(b=>(0,ve.jsxs)("div",{className:"se-removedAnimationRow",children:[(0,ve.jsxs)("div",{children:[(0,ve.jsx)("div",{className:"se-removedAnimationName",children:b.displayName||b.sourceName}),(0,ve.jsx)("div",{className:"se-animationSource",children:b.sourceName})]}),(0,ve.jsx)("button",{type:"button",className:"se-animationButton",onClick:()=>E(b.sourceName),children:"Restore"})]},b.sourceName))}):null]}):null]})}var Pp=require("react"),Kc=require("lucide-react");var ct=require("react/jsx-runtime");function Ap({config:e,onChange:t}){let[n,i]=(0,Pp.useState)(null),[r,a]=(0,Pp.useState)({title:"",description:""}),o=e.annotations,s=d=>{i(d),a({title:d.title,description:d.description||""})},c=()=>{if(!n||!r.title.trim())return;let d=o.map(h=>h.id===n.id?{...h,title:r.title.trim(),description:r.description||""}:h);t({...e,annotations:d}),i(null),a({title:"",description:""})},l=d=>{if(window.confirm("Delete this annotation?")){let f=o.filter(g=>g.id!==d).map((g,x)=>({...g,id:x+1}));t({...e,annotations:f}),i(null),a({title:"",description:""})}},u=()=>{i(null),a({title:"",description:""})};return(0,ct.jsxs)(Ma,{title:"Annotations",children:[e.annotations.length===0?(0,ct.jsx)("div",{className:"bb-emptyAnnotations",children:"No annotations yet. Double-click on the model to add one."}):(0,ct.jsx)("div",{className:"bb-annotationsList",children:e.annotations.map(d=>(0,ct.jsxs)("div",{className:"bb-annotationCard",children:[(0,ct.jsxs)("div",{className:"bb-annotationHeader",children:[(0,ct.jsxs)("div",{className:"bb-annotationBadge",children:["#",d.id]}),(0,ct.jsxs)("div",{className:"bb-annotationActions",children:[(0,ct.jsx)("button",{className:"bb-annotationAction bb-annotationAction--edit",onClick:()=>s(d),title:"Edit annotation",children:(0,ct.jsx)(Kc.Pencil,{size:16})}),(0,ct.jsx)("button",{className:"bb-annotationAction bb-annotationAction--delete",onClick:()=>l(d.id),title:"Delete annotation",children:(0,ct.jsx)(Kc.Trash2,{size:16})})]})]}),(0,ct.jsx)("div",{className:"bb-annotationTitle",children:d.title}),d.description&&(0,ct.jsx)("div",{className:"bb-annotationDescription",children:d.description}),(0,ct.jsxs)("div",{className:"bb-annotationPosition",children:["Position: [",d.worldPosition[0].toFixed(2),","," ",d.worldPosition[1].toFixed(2),","," ",d.worldPosition[2].toFixed(2),"]"]})]},d.id))}),n&&(0,ct.jsx)("div",{className:"bb-editAnnotationOverlay",onClick:u,children:(0,ct.jsxs)("div",{className:"bb-editAnnotationPopup",onClick:d=>d.stopPropagation(),children:[(0,ct.jsxs)("div",{className:"bb-editAnnotationHeader",children:[(0,ct.jsx)("h3",{className:"bb-editAnnotationTitle",children:"Edit Annotation"}),(0,ct.jsx)("button",{className:"bb-editAnnotationClose",onClick:u,children:"\xD7"})]}),(0,ct.jsxs)("div",{className:"bb-editAnnotationBody",children:[(0,ct.jsxs)("div",{className:"bb-field",children:[(0,ct.jsx)("label",{className:"bb-label",children:"Title"}),(0,ct.jsx)("input",{className:"bb-input",value:r.title,onChange:d=>a({...r,title:d.target.value}),placeholder:"Enter annotation title"})]}),(0,ct.jsxs)("div",{className:"bb-field",children:[(0,ct.jsx)("label",{className:"bb-label",children:"Description"}),(0,ct.jsx)("textarea",{className:"bb-textarea",value:r.description,onChange:d=>a({...r,description:d.target.value}),placeholder:"Enter annotation description",rows:3})]}),(0,ct.jsxs)("div",{className:"bb-editAnnotationActions",children:[(0,ct.jsx)("button",{className:"bb-button",onClick:u,children:"Cancel"}),(0,ct.jsx)("button",{className:"bb-button bb-button--primary",onClick:c,disabled:!r.title.trim(),children:"Save"}),(0,ct.jsx)("button",{className:"bb-button bb-button--danger",onClick:()=>l(n.id),children:"Delete"})]})]})]})})]})}var oi=require("react"),Pr=require("lucide-react");var Te=require("react/jsx-runtime"),v_={enabled:!0,waypoints:[],loop:!0,autoPlay:!1},Ta=3.5;function Ep({config:e,onChange:t,cameraState:n,onPreviewWaypoint:i}){let r=e.cinematic??v_,{waypoints:a}=r,o=(0,oi.useCallback)((y,p)=>{if(y.length<2)return 0;let m=0;for(let M=0;M<y.length-1;M++){let _=y[M].segmentDuration??Ta;m+=_}return p&&y.length>1&&(m+=y[y.length-1].segmentDuration??Ta),Math.max(m,0)},[]),s=(0,oi.useCallback)(y=>{t({...e,cinematic:{...r,...y}})},[e,r,t]),c=(0,oi.useCallback)(()=>{if(!n)return;let y={position:[...n.position],target:[...n.target],...n.azimuthAngle!=null?{azimuthAngle:n.azimuthAngle}:{},...n.polarAngle!=null?{polarAngle:n.polarAngle}:{},segmentDuration:Ta},p=[...a,y],m=o(p,r.loop);s({waypoints:p,duration:m})},[n,a,r.loop,o,s]),l=(0,oi.useCallback)(y=>{let p=a.filter((M,_)=>_!==y),m=o(p,r.loop);s({waypoints:p,duration:m})},[a,r.loop,o,s]),u=(0,oi.useCallback)((y,p)=>{let m=y+p;if(m<0||m>=a.length)return;let M=[...a];[M[y],M[m]]=[M[m],M[y]];let _=o(M,r.loop);s({waypoints:M,duration:_})},[a,r.loop,o,s]),d=(0,oi.useCallback)((y,p)=>{let m=a.map((_,T)=>T===y?{..._,...p}:_),M=o(m,r.loop);s({waypoints:m,duration:M})},[a,r.loop,o,s]),[h,f]=(0,oi.useState)(!1),g=a.some(y=>y.segmentDuration!==void 0),x=(0,oi.useCallback)(y=>y>=a.length-1?Ta:a[y]?.segmentDuration??Ta,[a]),P=a.length>=2;return(0,Te.jsxs)(Ma,{title:"Cinematic Camera",children:[(0,Te.jsx)("p",{className:"se-cinematicHint",children:"Frame the model in the viewer, then capture it as a waypoint. The camera glides through the waypoints in order \u2014 enable and press play in the viewer to preview."}),(0,Te.jsxs)("button",{type:"button",className:"bb-button bb-button--primary se-cinematicAdd",onClick:c,disabled:!n,title:"Capture the current camera view as a waypoint",children:[(0,Te.jsx)(Pr.Plus,{size:15}),"Add waypoint from current view"]}),(0,Te.jsxs)("div",{className:"se-customizeToggle",children:[(0,Te.jsxs)("label",{className:"se-toggleLabel",children:[(0,Te.jsx)("input",{type:"checkbox",checked:h,onChange:y=>f(y.target.checked)}),(0,Te.jsx)(Pr.Settings,{size:14}),(0,Te.jsx)("span",{children:"Customize durations between waypoints"})]}),h&&(0,Te.jsxs)("span",{className:"se-toggleHint",children:["Set duration for each segment between waypoints: 1\u21922, 2\u21923, etc. Default: ",Ta,"s"]})]}),a.length===0?(0,Te.jsx)("div",{className:"bb-emptyAnnotations",children:"No waypoints yet. Position the camera and add your first one."}):(0,Te.jsxs)(Te.Fragment,{children:[(0,Te.jsx)("div",{className:"se-waypointList",children:a.map((y,p)=>{let m=x(p),M=p===a.length-1,_=y.segmentDuration!==void 0&&y.segmentDuration!==Ta;return(0,Te.jsxs)("div",{children:[(0,Te.jsxs)("div",{className:"se-waypointCard",children:[(0,Te.jsx)("div",{className:"se-waypointBadge",children:p+1}),(0,Te.jsxs)("div",{className:"se-waypointBody",children:[(0,Te.jsxs)("div",{className:"se-waypointCoords",children:["pos [",y.position.map(T=>T.toFixed(1)).join(", "),"]"]}),(0,Te.jsxs)("div",{className:"se-waypointCoords",children:["look [",y.target.map(T=>T.toFixed(1)).join(", "),"]"]}),h&&!M&&(0,Te.jsxs)("div",{className:`se-customBadge ${_?"se-customBadge--custom":"se-customBadge--default"}`,children:[m.toFixed(1),"s",!_&&" (default)"]})]}),(0,Te.jsxs)("div",{className:"se-waypointActions",children:[(0,Te.jsx)("button",{className:"se-waypointAction",onClick:()=>i?.(y),title:"Fly camera to this waypoint",disabled:!i,children:(0,Te.jsx)(Pr.MapPin,{size:15})}),(0,Te.jsx)("button",{className:"se-waypointAction",onClick:()=>u(p,-1),title:"Move up",disabled:p===0,children:(0,Te.jsx)(Pr.ArrowUp,{size:15})}),(0,Te.jsx)("button",{className:"se-waypointAction",onClick:()=>u(p,1),title:"Move down",disabled:M,children:(0,Te.jsx)(Pr.ArrowDown,{size:15})}),(0,Te.jsx)("button",{className:"se-waypointAction se-waypointAction--delete",onClick:()=>l(p),title:"Delete waypoint",children:(0,Te.jsx)(Pr.Trash2,{size:15})})]})]}),h&&!M&&(0,Te.jsxs)("div",{className:"se-segmentBetween",children:[(0,Te.jsxs)("div",{className:"se-segmentLabel",children:[p+1," \u2192 ",p+2,!y.segmentDuration&&" (default)"]}),(0,Te.jsxs)("div",{className:"se-segmentControls",children:[(0,Te.jsx)("span",{className:"se-durationLabel",children:"Duration:"}),(0,Te.jsx)("input",{type:"range",className:"se-segmentSlider",min:1,max:20,step:.5,value:m,onChange:T=>{let E=parseFloat(T.target.value);d(p,{segmentDuration:E})}}),(0,Te.jsxs)("span",{className:"se-segmentValue",children:[m.toFixed(1),"s"]}),(0,Te.jsxs)("div",{className:"se-presetButtons",children:[[2,4,6,8].map(T=>(0,Te.jsxs)("button",{className:"se-presetButton",onClick:()=>d(p,{segmentDuration:T}),children:[T,"s"]},`preset-${p}-${T}`)),(0,Te.jsx)("button",{className:"se-presetButton se-presetButton--default",onClick:()=>{let T=a.map((b,w)=>{if(w===p){let{segmentDuration:C,...S}=b;return S}return b}),E=o(T,r.loop);s({waypoints:T,duration:E})},children:"Reset"})]})]})]})]},`waypoint-wrapper-${p}`)})}),(0,Te.jsxs)("div",{className:"se-totalDuration",children:[(0,Te.jsx)("span",{className:"se-totalLabel",children:"Total duration:"}),(0,Te.jsx)("span",{className:"se-totalValue",children:P?(r.duration??o(a,r.loop)).toFixed(1)+"s":"-"}),!P&&(0,Te.jsx)("span",{className:"se-totalHint",children:"(need at least 2 waypoints)"})]})]}),(0,Te.jsx)(bt,{label:"Enable cinematic camera",checked:r.enabled,onChange:y=>s({enabled:y})}),(0,Te.jsx)(bt,{label:"Loop",checked:r.loop,onChange:y=>{let p=y,m=o(a,p);s({loop:p,duration:m})}}),(0,Te.jsx)(bt,{label:"Auto-play on load",checked:r.autoPlay,onChange:y=>s({autoPlay:y})}),!h&&P&&(0,Te.jsx)(K,{label:"Duration",value:r.duration??o(a,r.loop),min:4,max:120,step:1,formatValue:y=>`${y}s`,onChange:y=>s({duration:y})})]})}var Ar=require("lucide-react");var un=require("react/jsx-runtime"),x_=[{label:"General",icon:(0,un.jsx)(Ar.Box,{})},{label:"Lighting",icon:(0,un.jsx)(Ar.Spotlight,{})},{label:"Animations",icon:(0,un.jsx)(Ar.Clapperboard,{})},{label:"Post Processing",icon:(0,un.jsx)(Ar.Sparkles,{})},{label:"Annotations",icon:(0,un.jsx)(Ar.MessageSquareText,{})},{label:"Cinematic",icon:(0,un.jsx)(Ar.Video,{})}],hv={currentClip:null,isPlaying:!1,time:0,duration:0,play:()=>{},pause:()=>{},stop:()=>{},setSpeed:()=>{},seek:()=>{}};function Rp({config:e,onChange:t,activeSubTab:n,onActiveSubTabChange:i,cameraState:r=null,onPreviewWaypoint:a,animationClipDetails:o=[],animationPlayback:s=hv}){let[c,l]=(0,Zc.useState)("General"),u=n??c,d=s??hv,{tier:h}=Cr(),f=Mi(h,"starter"),g=Mi(h,"growth");(0,Zc.useEffect)(()=>{n!==void 0&&l(n)},[n]);let x=P=>{n===void 0&&l(P),i?.(P)};return(0,un.jsxs)("div",{className:"se-tabContent",children:[(0,un.jsx)("div",{className:"se-subTabRow",children:x_.map(P=>(0,un.jsx)("button",{type:"button",title:P.label,className:`se-subTab ${u===P.label?"se-subTab--active":""}`,onClick:()=>x(P.label),children:P.icon},P.label))}),u==="General"&&(0,un.jsx)(Sp,{config:e,onChange:t}),u==="Lighting"&&(0,un.jsx)(Cp,{config:e,onChange:t}),u==="Animations"&&(f?(0,un.jsx)(Tp,{config:e,onChange:t,clipDetails:o,currentClip:d.currentClip,isPlaying:d.isPlaying,time:d.time,duration:d.duration,play:d.play,pause:d.pause,stop:d.stop,setSpeed:d.setSpeed,seek:d.seek}):(0,un.jsx)(tr,{requiredTier:"starter",feature:"Animation configuration"})),u==="Post Processing"&&(g?(0,un.jsx)(Mp,{config:e,onChange:t}):(0,un.jsx)(tr,{requiredTier:"growth",feature:"Post-processing effects"})),u==="Annotations"&&(f?(0,un.jsx)(Ap,{config:e,onChange:t}):(0,un.jsx)(tr,{requiredTier:"starter",feature:"Annotations"})),u==="Cinematic"&&(f?(0,un.jsx)(Ep,{config:e,onChange:t,cameraState:r,onPreviewWaypoint:a}):(0,un.jsx)(tr,{requiredTier:"starter",feature:"Cinematic camera"}))]})}var So=require("lucide-react"),Yt=require("react/jsx-runtime");function mv({title:e,trailing:t,children:n,disabled:i,open:r,onToggle:a,tooltip:o}){let s=o?`${o}`:e;return(0,Yt.jsxs)("div",{className:"bb-materialPanel",children:[(0,Yt.jsxs)("button",{type:"button",className:"bb-materialPanelHeader",onClick:a,"aria-expanded":r,title:s,children:[(0,Yt.jsxs)("div",{className:"bb-materialPanelTitleWrap",children:[(0,Yt.jsx)(So.ChevronDown,{size:14,className:`bb-materialPanelChevron ${r?"bb-materialPanelChevron--open":""}`}),(0,Yt.jsx)("span",{className:"bb-materialPanelTitle",children:e}),o?(0,Yt.jsx)("span",{className:"bb-materialPanelHelp",title:s,"aria-label":s,role:"img",onClick:c=>c.stopPropagation(),children:(0,Yt.jsx)(So.Info,{size:12})}):null]}),t?(0,Yt.jsx)("div",{onClick:c=>c.stopPropagation(),children:t}):null]}),r?(0,Yt.jsx)("div",{className:"bb-materialPanelBody",style:i?{opacity:.45,pointerEvents:"none"}:void 0,children:n}):null]})}function nr({title:e,open:t,onToggle:n,trailing:i,children:r,tooltip:a}){let o=a?`${e}: ${a}`:e;return(0,Yt.jsxs)("div",{className:"bb-section",children:[(0,Yt.jsxs)("button",{type:"button",className:"bb-sectionHeaderButton",onClick:n,"aria-expanded":t,title:o,children:[(0,Yt.jsxs)("span",{className:"bb-sectionHeaderMain",children:[(0,Yt.jsx)(So.ChevronDown,{size:15,className:`bb-sectionChevron ${t?"bb-sectionChevron--open":""}`}),(0,Yt.jsx)("h2",{className:"bb-sectionTitle",children:e}),a?(0,Yt.jsx)("span",{className:"bb-sectionHelp",title:o,"aria-label":o,role:"img",onClick:s=>s.stopPropagation(),children:(0,Yt.jsx)(So.Info,{size:13})}):null]}),i?(0,Yt.jsx)("span",{onClick:s=>s.stopPropagation(),children:i}):null]}),t?(0,Yt.jsx)("div",{className:"bb-sectionBody",children:r}):null]})}function fv({checked:e,onChange:t,label:n}){return(0,Yt.jsxs)("label",{className:"se-switch","aria-label":n,children:[(0,Yt.jsx)("input",{type:"checkbox",checked:e,onChange:i=>t(i.target.checked)}),(0,Yt.jsx)("span",{className:"se-switchTrack",children:(0,Yt.jsx)("span",{className:"se-switchThumb"})})]})}var Lp=require("react");var Jc=["front","back","double"],Qc=["normal","additive"];var ed=require("react/jsx-runtime");function lr({panelKey:e,title:t,tooltip:n,toggleLabel:i,controls:r,children:a,requiredTier:o}){let{openMaterialPanels:s,materialPanelEnabled:c,onToggleMaterialPanel:l,onSetMaterialPanelState:u}=r,d=o?.locked??!1;return(0,ed.jsx)(mv,{title:t,tooltip:n,disabled:d||!c[e],open:s[e],onToggle:()=>l(e),trailing:(0,ed.jsx)(fv,{checked:!d&&c[e],onChange:d?()=>{}:h=>u(e,h),label:i??`Toggle ${t}`}),children:d&&o?(0,ed.jsx)(tr,{requiredTier:o.tier,feature:t}):a})}var Ys=require("react"),td=require("react-colorful"),gv=require("lucide-react");var vt=require("react/jsx-runtime");function bn({label:e,value:t,placeholder:n,onChange:i}){let r=(0,Ys.useRef)(null);return(0,vt.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,vt.jsx)("label",{className:"bb-label",children:e}),(0,vt.jsxs)("div",{className:"bb-fileField",children:[(0,vt.jsx)("input",{className:"bb-input bb-fileField-input",placeholder:n,value:t,onChange:a=>{let o=a.target.value;!o&&t&&$d(t),i(o)}}),(0,vt.jsx)("button",{type:"button",className:"bb-fileFieldButton",onClick:()=>r.current?.click(),"aria-label":`Select file for ${e}`,title:`Select file for ${e}`,children:(0,vt.jsx)(gv.FileUp,{size:20})}),(0,vt.jsx)("input",{ref:r,type:"file",accept:"image/png,image/jpeg,image/webp,image/avif",className:"bb-hiddenInput",onChange:a=>{let o=a.target.files?.[0];if(!o)return;let s=ym(o);t&&t!==s&&$d(t),Mm(s,URL.createObjectURL(o)),i(s),a.target.value=""}})]})]})}function Pa({label:e,value:t,fallback:n="#ffffff",onChange:i}){let[r,a]=(0,Ys.useState)(!1),o=t||n,s=(0,Ys.useRef)(null);return(0,vt.jsxs)("div",{className:"bb-field",children:[(0,vt.jsx)("span",{className:"bb-label",children:e}),(0,vt.jsx)("div",{className:"se-fieldInline",children:(0,vt.jsx)("span",{ref:s,style:{display:"inline-flex"},children:(0,vt.jsx)(td.HexColorInput,{prefixed:!0,className:"se-swatch",onClick:()=>a(c=>!c),style:{background:o,color:_o(o)},color:o,onChange:i})})}),r?(0,vt.jsx)(_p,{anchorRef:s,onClose:()=>a(!1),children:(0,vt.jsx)(td.HexColorPicker,{color:o,onChange:i})}):null]})}function $s({label:e,checked:t,onChange:n}){return(0,vt.jsxs)("label",{className:"bb-checkbox",children:[(0,vt.jsx)("input",{type:"checkbox",checked:t,onChange:i=>n(i.target.checked)}),e]})}function bv({label:e,value:t,min:n,max:i,step:r,placeholder:a,onChange:o}){return(0,vt.jsxs)("div",{className:"bb-field",children:[(0,vt.jsx)("label",{className:"bb-label",children:e}),(0,vt.jsx)("input",{className:"bb-input",type:"number",min:n,max:i,step:r,placeholder:a,value:t??"",onChange:s=>o(s.target.value===""?void 0:Number(s.target.value))})]})}function Mo({label:e,value:t,options:n,onChange:i}){return(0,vt.jsxs)("div",{className:"bb-field",children:[(0,vt.jsx)("label",{className:"bb-label",children:e}),(0,vt.jsx)("select",{className:"bb-select",value:t,onChange:r=>i(r.target.value),children:n.map(r=>(0,vt.jsx)("option",{value:r,children:r},r))})]})}function $t({label:e,value:t,min:n,max:i,step:r,onChange:a}){return(0,vt.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,vt.jsx)("label",{className:"bb-label",children:e}),(0,vt.jsxs)("div",{className:"bb-sliderField",children:[(0,vt.jsx)("input",{className:`bb-slider ${t===void 0?"bb-slider--unset":""}`,type:"range",min:n,max:i,step:r,value:t??n,onChange:s=>a(Number(s.target.value))}),(0,vt.jsx)("input",{className:"bb-input bb-input--compact",type:"number",min:n,max:i,step:r,value:t??"",onChange:s=>a(s.target.value===""?void 0:Number(s.target.value))})]})]})}var Z=require("react/jsx-runtime");function vv({selectedItem:e,selectedMaterial:t,pbrWorkflow:n,onPbrWorkflowChange:i,openMaterialPanels:r,materialPanelEnabled:a,onToggleMaterialPanel:o,onSetMaterialPanelState:s,updateSelectedMaterial:c,setSelectedTexturePath:l}){let u={openMaterialPanels:r,materialPanelEnabled:a,onToggleMaterialPanel:o,onSetMaterialPanelState:s},{tier:d}=Cr(),h=Mi(d,"starter"),f={tier:"starter",locked:!h},[g,x]=(0,Lp.useState)("roughness"),[P,y]=(0,Lp.useState)("factor");return(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(lr,{panelKey:"pbr",title:"PBR Maps",tooltip:"Controls the base color and workflow used for physically based shading.",controls:u,children:h?(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(Mo,{label:"Workflow",value:n,options:["metalness","specular"],onChange:i}),(0,Z.jsx)("div",{className:"bb-field bb-field--full",children:(0,Z.jsx)("p",{className:"bb-note",style:{margin:0},children:n==="metalness"?"Metalness workflow maps directly to the underlying physical material.":"Specular workflow exposes the same physical material with non-metal specular controls; it does not switch to a separate spec/gloss shader."})}),(0,Z.jsx)(bn,{label:n==="specular"?"Albedo texture path":"Base color texture path",placeholder:"materials/oak-wood.jpg",value:t?.texture?.path??"",onChange:p=>l(e,"texture",p)}),(0,Z.jsx)(Pa,{label:n==="specular"?"Albedo color":"Base color",value:t?.baseColor??"#ffffff",onChange:p=>c(e,m=>({...m,baseColor:p}))}),n==="metalness"?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)($t,{label:"Metalness",value:t?.metalness,min:0,max:1,step:.01,onChange:p=>c(e,m=>({...m,metalness:p}))}),(0,Z.jsx)(bn,{label:"Metalness map path",placeholder:"materials/body-metalness.jpg",value:t?.metalnessMap?.path??"",onChange:p=>l(e,"metalnessMap",p)})]}):(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)($t,{label:"Specular intensity",value:t?.specularIntensity,min:0,max:1,step:.01,onChange:p=>c(e,m=>({...m,specularIntensity:p}))}),(0,Z.jsx)(Pa,{label:"Specular color",value:t?.specularColor??"#ffffff",onChange:p=>c(e,m=>({...m,specularColor:p}))}),(0,Z.jsx)(bn,{label:"Specular intensity map path",placeholder:"materials/body-specular-intensity.jpg",value:t?.specularIntensityMap?.path??"",onChange:p=>l(e,"specularIntensityMap",p)}),(0,Z.jsx)(bn,{label:"Specular color map path",placeholder:"materials/body-specular-color.jpg",value:t?.specularColorMap?.path??"",onChange:p=>l(e,"specularColorMap",p)})]}),(0,Z.jsx)($t,{label:"Specular F0 / reflectivity",value:t?.reflectivity,min:0,max:1,step:.01,onChange:p=>c(e,m=>({...m,reflectivity:p}))})]}):(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(Pa,{label:"Base color",value:t?.baseColor??"#ffffff",onChange:p=>c(e,m=>({...m,baseColor:p}))}),(0,Z.jsx)($t,{label:"Metalness",value:t?.metalness,min:0,max:1,step:.01,onChange:p=>c(e,m=>({...m,metalness:p}))}),(0,Z.jsx)("div",{className:"bb-field bb-field--full",children:(0,Z.jsx)(tr,{requiredTier:"starter",feature:"Texture maps, the specular workflow, and reflectivity"})})]})}),(0,Z.jsx)(lr,{panelKey:"roughness",requiredTier:f,title:"Roughness / Glossiness",tooltip:"Adjusts how matte or shiny the surface appears.",toggleLabel:"Toggle Roughness and Glossiness",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(Mo,{label:"Mode",value:g,options:["roughness","glossiness"],onChange:x}),(0,Z.jsx)("div",{className:"bb-field bb-field--full",children:(0,Z.jsx)("p",{className:"bb-note",style:{margin:0},children:g==="roughness"?"Roughness: 0 is glossy, 1 is matte.":"Glossiness is the inverse of roughness (glossiness = 1 \u2212 roughness)"})}),g==="roughness"?(0,Z.jsx)($t,{label:"Roughness",value:t?.roughness,min:0,max:1,step:.01,onChange:p=>c(e,m=>({...m,roughness:p}))}):(0,Z.jsx)($t,{label:"Glossiness",value:t?.roughness===void 0?void 0:1-t.roughness,min:0,max:1,step:.01,onChange:p=>c(e,m=>({...m,roughness:p===void 0?void 0:1-p}))}),(0,Z.jsx)(bn,{label:g==="glossiness"?"Glossiness map path (applied as roughness)":"Roughness map path",placeholder:"materials/body-roughness.jpg",value:t?.roughnessMap?.path??"",onChange:p=>l(e,"roughnessMap",p)})]})}),(0,Z.jsx)(lr,{panelKey:"emission",requiredTier:f,title:"Emission",tooltip:"Makes the material self-illuminated with emissive color and intensity.",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(Pa,{label:"Emissive color",value:t?.emissive??"#000000",fallback:"#000000",onChange:p=>c(e,m=>({...m,emissive:p}))}),(0,Z.jsx)($t,{label:"Emissive intensity",value:t?.emissiveIntensity,min:0,max:10,step:.1,onChange:p=>c(e,m=>({...m,emissiveIntensity:p}))}),(0,Z.jsx)(bn,{label:"Emissive map path",placeholder:"materials/body-emissive.jpg",value:t?.emissiveMap?.path??"",onChange:p=>l(e,"emissiveMap",p)})]})}),(0,Z.jsx)(lr,{panelKey:"opacity",requiredTier:f,title:"Opacity",tooltip:"Controls transparency, alpha testing, and blending behavior.",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)($t,{label:"Opacity",value:t?.opacity,min:0,max:1,step:.01,onChange:p=>c(e,m=>({...m,opacity:p}))}),(0,Z.jsx)($t,{label:"Alpha test",value:t?.alphaTest,min:0,max:1,step:.01,onChange:p=>c(e,m=>({...m,alphaTest:p}))}),(0,Z.jsx)(bn,{label:"Alpha map path",placeholder:"materials/body-alpha.png",value:t?.alphaMap?.path??"",onChange:p=>l(e,"alphaMap",p)}),(0,Z.jsx)(Mo,{label:"Blending mode",value:t?.blendingMode??"normal",options:Qc,onChange:p=>c(e,m=>({...m,blendingMode:p}))}),(0,Z.jsxs)("div",{className:"bb-field",children:[(0,Z.jsx)("label",{className:"bb-label",children:"Alpha hash"}),(0,Z.jsx)("div",{className:"bb-checkboxRow",children:(0,Z.jsx)($s,{label:"Use alpha hash",checked:t?.alphaHash??!1,onChange:p=>c(e,m=>({...m,alphaHash:p}))})})]}),(0,Z.jsxs)("div",{className:"bb-field",children:[(0,Z.jsx)("label",{className:"bb-label",children:"Dithering"}),(0,Z.jsx)("div",{className:"bb-checkboxRow",children:(0,Z.jsx)($s,{label:"Use dithering",checked:t?.dithering??!1,onChange:p=>c(e,m=>({...m,dithering:p}))})})]})]})}),(0,Z.jsxs)(lr,{panelKey:"normalBump",requiredTier:f,title:"Normal & Bump",tooltip:"Adds surface detail without changing the actual mesh shape.",toggleLabel:"Toggle Normal and Bump",controls:u,children:[(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(bn,{label:"Normal map path",placeholder:"materials/body-normal.jpg",value:t?.normalMap?.path??"",onChange:p=>l(e,"normalMap",p)}),(0,Z.jsx)($t,{label:"Normal scale",value:t?.normalScale,min:0,max:5,step:.01,onChange:p=>c(e,m=>({...m,normalScale:p}))}),(0,Z.jsx)(bn,{label:"Bump map path",placeholder:"materials/body-bump.jpg",value:t?.bumpMap?.path??"",onChange:p=>l(e,"bumpMap",p)}),(0,Z.jsx)($t,{label:"Bump scale",value:t?.bumpScale,min:0,max:5,step:.01,onChange:p=>c(e,m=>({...m,bumpScale:p}))})]}),(0,Z.jsx)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:(0,Z.jsx)($s,{label:"Flip normal Y",checked:t?.flipNormalY??!1,onChange:p=>c(e,m=>({...m,flipNormalY:p}))})})]}),(0,Z.jsx)(lr,{panelKey:"displacement",requiredTier:f,title:"Displacement",tooltip:"Offsets geometry using a texture to create real surface height.",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(bn,{label:"Displacement map path",placeholder:"materials/body-displacement.jpg",value:t?.displacementMap?.path??"",onChange:p=>l(e,"displacementMap",p)}),(0,Z.jsx)($t,{label:"Displacement scale",value:t?.displacementScale,min:-5,max:5,step:.01,onChange:p=>c(e,m=>({...m,displacementScale:p}))}),(0,Z.jsx)($t,{label:"Displacement bias",value:t?.displacementBias,min:-5,max:5,step:.01,onChange:p=>c(e,m=>({...m,displacementBias:p}))})]})}),(0,Z.jsx)(lr,{panelKey:"ao",requiredTier:f,title:"Ambient Occlusion",tooltip:"Darkens creases and contact areas to add depth.",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(bn,{label:"AO map path",placeholder:"materials/body-ao.jpg",value:t?.aoMap?.path??"",onChange:p=>l(e,"aoMap",p)}),(0,Z.jsx)($t,{label:"AO intensity",value:t?.aoMapIntensity,min:0,max:5,step:.01,onChange:p=>c(e,m=>({...m,aoMapIntensity:p}))})]})}),(0,Z.jsxs)(lr,{panelKey:"clearcoat",requiredTier:f,title:"Clearcoat",tooltip:"Adds a glossy protective layer on top of the base material.",controls:u,children:[(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(bn,{label:"Clearcoat map path",placeholder:"materials/body-clearcoat.jpg",value:t?.clearcoatMap?.path??"",onChange:p=>l(e,"clearcoatMap",p)}),(0,Z.jsx)($t,{label:"Clearcoat",value:t?.clearcoat,min:0,max:1,step:.01,onChange:p=>c(e,m=>({...m,clearcoat:p}))}),(0,Z.jsx)(bn,{label:"Clearcoat roughness map path",placeholder:"materials/body-clearcoat-roughness.jpg",value:t?.clearcoatRoughnessMap?.path??"",onChange:p=>l(e,"clearcoatRoughnessMap",p)}),(0,Z.jsx)($t,{label:"Clearcoat roughness",value:t?.clearcoatRoughness,min:0,max:1,step:.01,onChange:p=>c(e,m=>({...m,clearcoatRoughness:p}))}),(0,Z.jsx)(bn,{label:"Clearcoat normal map path",placeholder:"materials/body-clearcoat-normal.jpg",value:t?.clearcoatNormalMap?.path??"",onChange:p=>l(e,"clearcoatNormalMap",p)}),(0,Z.jsx)($t,{label:"Clearcoat normal scale",value:t?.clearcoatNormalScale,min:0,max:5,step:.01,onChange:p=>c(e,m=>({...m,clearcoatNormalScale:p}))})]}),(0,Z.jsx)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:(0,Z.jsx)($s,{label:"Flip clearcoat normal Y",checked:t?.flipClearcoatNormalY??!1,onChange:p=>c(e,m=>({...m,flipClearcoatNormalY:p}))})})]}),(0,Z.jsx)(lr,{panelKey:"sheen",requiredTier:f,title:"Sheen",tooltip:"Adds a soft fabric-like sheen on grazing angles.",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)($t,{label:"Sheen",value:t?.sheen,min:0,max:1,step:.01,onChange:p=>c(e,m=>({...m,sheen:p}))}),(0,Z.jsx)(Pa,{label:"Sheen color",value:t?.sheenColor??"#ffffff",onChange:p=>c(e,m=>({...m,sheenColor:p}))}),(0,Z.jsx)(bn,{label:"Sheen color map path",placeholder:"materials/body-sheen-color.jpg",value:t?.sheenColorMap?.path??"",onChange:p=>l(e,"sheenColorMap",p)}),(0,Z.jsx)($t,{label:"Sheen roughness",value:t?.sheenRoughness,min:0,max:1,step:.01,onChange:p=>c(e,m=>({...m,sheenRoughness:p}))}),(0,Z.jsx)(bn,{label:"Sheen roughness map path",placeholder:"materials/body-sheen-roughness.jpg",value:t?.sheenRoughnessMap?.path??"",onChange:p=>l(e,"sheenRoughnessMap",p)})]})}),(0,Z.jsx)(lr,{panelKey:"anisotropy",requiredTier:f,title:"Anisotropy",tooltip:"Stretches reflections in one direction for brushed or fiber-like surfaces.",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)($t,{label:"Intensity",value:t?.anisotropy,min:0,max:1,step:.01,onChange:p=>c(e,m=>({...m,anisotropy:p}))}),(0,Z.jsx)(Mo,{label:"Tilt direction",value:P,options:["factor","texture"],onChange:y}),P==="factor"?(0,Z.jsx)($t,{label:"Rotation (rad)",value:t?.anisotropyRotation,min:0,max:6.28,step:.01,onChange:p=>c(e,m=>({...m,anisotropyRotation:p}))}):(0,Z.jsx)(bn,{label:"Anisotropy map path",placeholder:"materials/body-anisotropy.jpg",value:t?.anisotropyMap?.path??"",onChange:p=>l(e,"anisotropyMap",p)})]})}),(0,Z.jsx)(lr,{panelKey:"transmission",requiredTier:f,title:"Transmission & Volume",tooltip:"Controls glass-like transmission and how light travels through volume.",toggleLabel:"Toggle Transmission and Volume",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)($t,{label:"Transmission",value:t?.transmission,min:0,max:1,step:.01,onChange:p=>c(e,m=>({...m,transmission:p}))}),(0,Z.jsx)(bn,{label:"Transmission map path",placeholder:"materials/body-transmission.jpg",value:t?.transmissionMap?.path??"",onChange:p=>l(e,"transmissionMap",p)}),(0,Z.jsx)($t,{label:"Thickness",value:t?.thickness,min:0,max:5,step:.01,onChange:p=>c(e,m=>({...m,thickness:p}))}),(0,Z.jsx)(bn,{label:"Thickness map path",placeholder:"materials/body-thickness.jpg",value:t?.thicknessMap?.path??"",onChange:p=>l(e,"thicknessMap",p)}),(0,Z.jsx)(Pa,{label:"Volume tint",value:t?.attenuationColor??"#ffffff",onChange:p=>c(e,m=>({...m,attenuationColor:p}))}),(0,Z.jsx)(bv,{label:"Attenuation distance",value:t?.attenuationDistance,min:0,step:.01,placeholder:"Infinity when unset",onChange:p=>c(e,m=>({...m,attenuationDistance:p}))})]})}),(0,Z.jsx)(lr,{panelKey:"faces",requiredTier:f,title:"Faces Rendering",tooltip:"Chooses which side of the mesh renders and how backfaces are handled.",controls:u,children:(0,Z.jsx)("div",{className:"bb-grid",children:(0,Z.jsx)(Mo,{label:"Side",value:t?.side??"front",options:Jc,onChange:p=>c(e,m=>({...m,side:p}))})})})]})}var xv=[{id:"wood",label:"Wood",swatch:"#8b5a2b",material:{baseColor:"#8b5a2b",metalness:0,roughness:.75,reflectivity:.04}},{id:"brushed-metal",label:"Brushed Metal",swatch:"linear-gradient(135deg, #cfcfcf, #8a8a8a)",material:{baseColor:"#c8c8c8",metalness:1,roughness:.35}},{id:"chrome",label:"Polished Chrome",swatch:"linear-gradient(135deg, #ffffff, #9aa0a6)",material:{baseColor:"#e8e8e8",metalness:1,roughness:.05}},{id:"gold",label:"Gold",swatch:"linear-gradient(135deg, #ffe9a8, #c89b2c)",material:{baseColor:"#e6b325",metalness:1,roughness:.2}},{id:"copper",label:"Copper",swatch:"linear-gradient(135deg, #e3a576, #8a4a26)",material:{baseColor:"#b87333",metalness:1,roughness:.3}},{id:"glass",label:"Glass",swatch:"linear-gradient(135deg, rgba(255,255,255,0.9), rgba(180,210,230,0.4))",material:{baseColor:"#ffffff",metalness:0,roughness:.02,reflectivity:.5,opacity:1,transmission:1,thickness:.5,attenuationColor:"#ffffff",attenuationDistance:1}},{id:"frosted-glass",label:"Frosted Glass",swatch:"linear-gradient(135deg, rgba(255,255,255,0.85), rgba(210,225,235,0.6))",material:{baseColor:"#ffffff",metalness:0,roughness:.4,reflectivity:.3,opacity:1,transmission:.9,thickness:.5}},{id:"plastic-glossy",label:"Glossy Plastic",swatch:"#dadada",material:{baseColor:"#dadada",metalness:0,roughness:.25,reflectivity:.5,clearcoat:.3,clearcoatRoughness:.1}},{id:"plastic-matte",label:"Matte Plastic",swatch:"#9a9a9a",material:{baseColor:"#9a9a9a",metalness:0,roughness:.85,reflectivity:.04}},{id:"rubber",label:"Rubber",swatch:"#1a1a1a",material:{baseColor:"#1a1a1a",metalness:0,roughness:.9,reflectivity:.02}},{id:"fabric",label:"Fabric",swatch:"#9c8a6b",material:{baseColor:"#9c8a6b",metalness:0,roughness:.95,sheen:.4,sheenColor:"#ffffff",sheenRoughness:.6}},{id:"ceramic",label:"Ceramic",swatch:"#f5f5f0",material:{baseColor:"#f5f5f0",metalness:0,roughness:.15,clearcoat:.6,clearcoatRoughness:.1}},{id:"concrete",label:"Concrete",swatch:"#9b9b93",material:{baseColor:"#9b9b93",metalness:0,roughness:.95,reflectivity:.03}}];var Co=require("react/jsx-runtime");function yv({disabled:e,onApply:t}){return(0,Co.jsx)("div",{className:"bb-presetGallery",children:xv.map(n=>(0,Co.jsxs)("button",{type:"button",className:"bb-presetSwatch",disabled:e,title:`Apply ${n.label} preset`,onClick:()=>t(n.material),children:[(0,Co.jsx)("span",{className:"bb-presetSwatchColor",style:{background:n.swatch}}),(0,Co.jsx)("span",{className:"bb-presetSwatchLabel",children:n.label})]},n.id))})}var To=require("react"),$i=require("lucide-react"),Gr=require("react/jsx-runtime");function kp({disabled:e,exporting:t,onExportJson:n,onExportTs:i}){let[r,a]=(0,To.useState)(!1),o=(0,To.useRef)(null);return(0,To.useEffect)(()=>{if(!r)return;let s=c=>{o.current?.contains(c.target)||a(!1)};return window.addEventListener("pointerdown",s),()=>window.removeEventListener("pointerdown",s)},[r]),(0,Gr.jsxs)("div",{className:"bb-exportMenuWrapper",ref:o,children:[(0,Gr.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:e||t,onClick:()=>a(s=>!s),title:"Export",children:[(0,Gr.jsx)($i.Download,{size:14}),t?"Exporting\u2026":"Export",(0,Gr.jsx)($i.ChevronDown,{size:12})]}),r&&(0,Gr.jsxs)("div",{className:"bb-exportMenu",children:[(0,Gr.jsxs)("button",{type:"button",className:"bb-exportMenuItem",onClick:()=>{a(!1),n()},children:[(0,Gr.jsx)($i.FileJson,{size:14}),"JSON"]}),(0,Gr.jsxs)("button",{type:"button",className:"bb-exportMenuItem",onClick:()=>{a(!1),i()},children:[(0,Gr.jsx)($i.FileCode2,{size:14}),"TypeScript"]})]})]})}var Er=require("react/jsx-runtime");function wv({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r,idError:a}){return(0,Er.jsx)(nr,{title:"Identity",open:n,onToggle:i,children:(0,Er.jsxs)("div",{className:"bb-grid",children:[(0,Er.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,Er.jsx)("label",{className:"bb-label",children:"Model Node ID"}),(0,Er.jsx)("span",{className:"bb-note",children:"This is the exact mesh name from the imported model and stays locked."}),(0,Er.jsx)("input",{className:"bb-input bb-readonly",value:t.modelObjectId,readOnly:!0})]}),(0,Er.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,Er.jsx)("label",{className:"bb-label",children:"ID"}),(0,Er.jsx)("input",{className:`bb-input ${a?"bb-input--error":""}`,value:t.id,onChange:o=>r(e,s=>({...s,id:o.target.value}))}),a?(0,Er.jsx)("span",{className:"bb-status bb-status--error",children:a}):null]})]})})}var Ks=require("react");var _v=["other","body","light","wheel","glass","interior","floor","wall","door","furniture","decor","electronics","seat","table","chair","window","sofa","bed","engine","headlight"],Sv=["normal","hidden","selected","disabled"];var Mt=require("react/jsx-runtime");function Mv({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r}){let[a,o]=(0,Ks.useState)(t.group??""),[s,c]=(0,Ks.useState)(t.tags?.join(", ")??"");(0,Ks.useEffect)(()=>{o(t.group??""),c(t.tags?.join(", ")??"")},[e,t.group,t.tags]);let l=()=>{r(e,d=>({...d,group:a.trim()||void 0}))},u=()=>{let d=[...new Set(s.split(",").map(h=>h.trim()).filter(Boolean))];r(e,h=>({...h,tags:d.length>0?d:void 0}))};return(0,Mt.jsxs)(nr,{title:"Basics",open:n,onToggle:i,children:[(0,Mt.jsxs)("div",{className:"bb-grid",children:[(0,Mt.jsxs)("div",{className:"bb-field",children:[(0,Mt.jsx)("label",{className:"bb-label",children:"Label"}),(0,Mt.jsx)("input",{className:"bb-input",value:t.label??"",onChange:d=>r(e,h=>({...h,label:d.target.value}))})]}),(0,Mt.jsxs)("div",{className:"bb-field",children:[(0,Mt.jsx)("label",{className:"bb-label",children:"Type"}),(0,Mt.jsx)("input",{className:"bb-input",list:"binding-type-suggestions",value:t.type,onChange:d=>r(e,h=>({...h,type:d.target.value}))}),(0,Mt.jsx)("datalist",{id:"binding-type-suggestions",children:_v.map(d=>(0,Mt.jsx)("option",{value:d},d))})]}),(0,Mt.jsxs)("div",{className:"bb-field",children:[(0,Mt.jsx)("label",{className:"bb-label",children:"Status"}),(0,Mt.jsx)("select",{className:"bb-select",value:t.status??"normal",onChange:d=>r(e,h=>({...h,status:d.target.value})),children:Sv.map(d=>(0,Mt.jsx)("option",{value:d,children:d},d))})]}),(0,Mt.jsxs)("div",{className:"bb-field",children:[(0,Mt.jsx)("label",{className:"bb-label",children:"Group"}),(0,Mt.jsx)("input",{className:"bb-input",placeholder:"paint",value:a,onChange:d=>o(d.target.value),onBlur:l,onKeyDown:d=>{d.key==="Enter"&&d.currentTarget.blur()}})]}),(0,Mt.jsxs)("div",{className:"bb-field",children:[(0,Mt.jsx)("label",{className:"bb-label",children:"Tags"}),(0,Mt.jsx)("input",{className:"bb-input",placeholder:"exterior, configurable",value:s,onChange:d=>c(d.target.value),onBlur:u,onKeyDown:d=>{d.key==="Enter"&&d.currentTarget.blur()}})]})]}),(0,Mt.jsxs)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:[(0,Mt.jsxs)("label",{className:"bb-checkbox",children:[(0,Mt.jsx)("input",{type:"checkbox",checked:t.selectable??!1,onChange:d=>r(e,h=>({...h,selectable:d.target.checked}))}),"selectable"]}),(0,Mt.jsxs)("label",{className:"bb-checkbox",children:[(0,Mt.jsx)("input",{type:"checkbox",checked:t.hoverable??!1,onChange:d=>r(e,h=>({...h,hoverable:d.target.checked}))}),"hoverable"]}),(0,Mt.jsxs)("label",{className:"bb-checkbox",children:[(0,Mt.jsx)("input",{type:"checkbox",checked:t.visible??!1,onChange:d=>r(e,h=>({...h,visible:d.target.checked}))}),"visible"]})]})]})}var rd=require("react");var Aa=[{id:"change-color",label:"Change Color",handling:"viewer",description:"Opens a color picker docked under the action and commits the result to style.material.baseColor."},{id:"change-material",label:"Change Material",handling:"viewer",description:"Opens the material picker so the viewer can swap the object's texture."},{id:"toggle-visibility",label:"Toggle Visibility",handling:"viewer",description:"Flips the binding's visible flag."},{id:"toggle-light",label:"Toggle Light",handling:"host",description:"Seeded on light bindings. Add declarative effects for useViewerActions, or handle it in onAction."},{id:"change-light-color",label:"Change Light Color",handling:"host",description:"Seeded on light bindings. Add declarative effects for useViewerActions, or handle it in onAction."},{id:"set-brightness",label:"Set Brightness",handling:"host",description:"Seeded on light bindings. Add declarative effects for useViewerActions, or handle it in onAction."}],nd="__custom__";function Zs(e){return Aa.find(t=>t.id===e)}var vR=Aa.filter(e=>e.handling==="viewer").map(e=>e.id),y_=new Set(["","New Action",...Aa.map(e=>e.label)]);function Dp(e){return y_.has(e.trim())}function Cv(e,t){let n=Array.from({length:t.length+1},(i,r)=>r);for(let i=1;i<=e.length;i+=1){let r=[i];for(let a=1;a<=t.length;a+=1){let o=n[a-1]+(e[i-1]===t[a-1]?0:1);r[a]=Math.min(r[a-1]+1,n[a]+1,o)}n=r}return n[t.length]}function Tv(e){if(Zs(e))return null;let t=e.trim().toLowerCase();if(!t)return null;let n=t.replace(/[^a-z0-9]/g,""),i=null;for(let r of Aa){let a=Math.min(Cv(t,r.id),Cv(n,r.id.replace(/[^a-z0-9]/g,"")));(!i||a<i.distance)&&(i={id:r.id,distance:a})}return i&&i.distance<=2?i.id:null}var Je=require("react/jsx-runtime"),Pv=Aa.filter(e=>e.handling==="viewer"),w_=Aa.filter(e=>e.handling==="host");function Av({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r}){let[a,o]=(0,rd.useState)(new Set);(0,rd.useEffect)(()=>{o(new Set)},[e]);let s=t.actions??[],c=(d,h)=>r(e,f=>({...f,actions:(f.actions??[]).map((g,x)=>x===d?h(g):g)})),l=d=>{r(e,h=>({...h,actions:(h.actions??[]).filter((f,g)=>g!==d)})),o(h=>{let f=new Set;return h.forEach(g=>{g<d?f.add(g):g>d&&f.add(g-1)}),f})},u=(d,h)=>o(f=>{let g=new Set(f);return h?g.add(d):g.delete(d),g});return(0,Je.jsxs)(nr,{title:"Actions",open:n,onToggle:i,children:[(0,Je.jsx)("div",{className:"bb-actionList",children:s.map((d,h)=>{let f=Zs(d.id),g=a.has(h)||!f,x=d.id.trim(),P=f?null:Tv(d.id),y=x.length>0&&s.some((p,m)=>m!==h&&p.id.trim()===x);return(0,Je.jsxs)("div",{className:"bb-actionCard",children:[(0,Je.jsxs)("div",{className:"bb-actionCardHeader",children:[(0,Je.jsxs)("div",{className:"bb-actionCardTitle",children:["Action ",h+1]}),(0,Je.jsx)("div",{className:"bb-actionCardMeta",children:d.type})]}),(0,Je.jsxs)("div",{className:"bb-actionGrid",children:[(0,Je.jsxs)("div",{className:"bb-field",children:[(0,Je.jsx)("label",{className:"bb-label",children:"Action ID"}),(0,Je.jsxs)("select",{className:"bb-select",value:g?nd:d.id,onChange:p=>{let m=p.target.value;if(m===nd){u(h,!0);return}u(h,!1);let M=Zs(m);c(h,_=>({..._,id:m,label:M&&Dp(_.label)?M.label:_.label}))},children:[(0,Je.jsx)("optgroup",{label:"Handled by the viewer",children:Pv.map(p=>(0,Je.jsx)("option",{value:p.id,children:p.id},p.id))}),(0,Je.jsx)("optgroup",{label:"Handled by your app",children:w_.map(p=>(0,Je.jsx)("option",{value:p.id,children:p.id},p.id))}),(0,Je.jsx)("option",{value:nd,children:"Custom\u2026"})]})]}),g?(0,Je.jsxs)("div",{className:"bb-field",children:[(0,Je.jsx)("label",{className:"bb-label",children:"Custom action ID"}),(0,Je.jsx)("input",{className:"bb-input",value:d.id,placeholder:"open-datasheet",onChange:p=>{u(h,!0),c(h,m=>({...m,id:p.target.value}))}})]}):null,(0,Je.jsxs)("div",{className:"bb-field",children:[(0,Je.jsx)("label",{className:"bb-label",children:"Label"}),(0,Je.jsx)("input",{className:"bb-input",value:d.label,onChange:p=>c(h,m=>({...m,label:p.target.value}))})]}),f?(0,Je.jsx)("span",{className:"bb-note",children:f.description}):x.length===0?(0,Je.jsx)("span",{className:"bb-note",style:{color:"#fca5a5"},children:"An action ID is required, the button renders but can never be identified in onAction."}):(0,Je.jsxs)("span",{className:"bb-note",style:{color:"#fcd34d"},children:["Unrecognised ID, the viewer has no built-in behavior for it. Add declarative effects and execute them with useViewerActions, or handle it in onAction.",P?(0,Je.jsxs)(Je.Fragment,{children:[" Did you mean ",(0,Je.jsx)("button",{type:"button",className:"bb-linkButton",onClick:()=>{u(h,!1);let p=Zs(P);c(h,m=>({...m,id:P,label:p&&Dp(m.label)?p.label:m.label}))},children:P}),"?"]}):null]}),d.effects?.length?(0,Je.jsxs)("span",{className:"bb-note",children:[d.effects.length," declarative effect",d.effects.length===1?"":"s",", execute with useViewerActions."]}):null,y?(0,Je.jsx)("span",{className:"bb-note",style:{color:"#fcd34d"},children:"Another action on this binding uses the same ID, they will render as two identical buttons."}):null]}),(0,Je.jsx)("div",{className:"bb-actionFooter",children:(0,Je.jsx)("button",{type:"button",className:"bb-button bb-button--ghost bb-actionRemove",onClick:()=>l(h),children:"Remove Action"})})]},h)})}),(0,Je.jsx)("div",{style:{marginTop:10},children:(0,Je.jsx)("button",{type:"button",className:"bb-button",onClick:()=>{let d=Pv.find(h=>!s.some(f=>f.id===h.id));r(e,h=>({...h,actions:[...h.actions??[],{id:d?.id??"",label:d?.label??"New Action",type:"command"}]})),d||u(s.length,!0)},children:"Add Action"})})]})}var id=require("lucide-react");var Ct=require("react/jsx-runtime");function Ev({selectedBinding:e,open:t,onToggle:n,cameraState:i,formattedCameraState:r,savedCameraPosition:a,onSaveCameraPosition:o,onGoToSavedCamera:s,onClearSavedCamera:c,onResetView:l,onFitScene:u}){return(0,Ct.jsxs)(nr,{title:"Camera Position",open:t,onToggle:n,children:[(0,Ct.jsxs)("div",{className:"se-waypointCard bb-cameraWaypoint",children:[(0,Ct.jsx)("span",{className:"bb-cameraLiveBadge",children:"LIVE"}),(0,Ct.jsxs)("div",{className:"se-waypointBody",children:[(0,Ct.jsx)("div",{className:"bb-cameraWaypointLabel",children:"Current view"}),i?(0,Ct.jsxs)(Ct.Fragment,{children:[(0,Ct.jsxs)("div",{className:"se-waypointCoords",children:["pos ",r?.position]}),(0,Ct.jsxs)("div",{className:"se-waypointCoords",children:["look ",r?.target]})]}):(0,Ct.jsx)("div",{className:"se-waypointCoords",children:"Move the camera to see live position"})]})]}),(0,Ct.jsxs)("div",{className:"bb-cameraControls bb-cameraControls--centered",children:[(0,Ct.jsx)("button",{type:"button",className:"bb-button bb-button--primary",onClick:o,disabled:!i,children:"Save"}),(0,Ct.jsx)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:l,children:"Reset View"}),(0,Ct.jsx)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:u,children:"Fit Scene"})]}),a?.position&&a?.target&&(0,Ct.jsxs)("div",{className:"se-waypointCard bb-cameraWaypoint",children:[(0,Ct.jsx)("span",{className:"bb-cameraSavedBadge",children:"SAVED"}),(0,Ct.jsxs)("div",{className:"se-waypointBody",children:[(0,Ct.jsxs)("div",{className:"bb-cameraWaypointLabel",children:["For ",e.label]}),(0,Ct.jsxs)("div",{className:"se-waypointCoords",children:["pos [",a.position.map(d=>d.toFixed(1)).join(", "),"]"]}),(0,Ct.jsxs)("div",{className:"se-waypointCoords",children:["look [",a.target.map(d=>d.toFixed(1)).join(", "),"]"]})]}),(0,Ct.jsxs)("div",{className:"se-waypointActions",children:[(0,Ct.jsx)("button",{className:"se-waypointAction",onClick:s,title:"Fly camera to the saved position",children:(0,Ct.jsx)(id.MapPin,{size:15})}),(0,Ct.jsx)("button",{className:"se-waypointAction se-waypointAction--delete",onClick:c,title:"Delete saved position",children:(0,Ct.jsx)(id.Trash2,{size:15})})]})]}),(0,Ct.jsx)("span",{className:"bb-note",children:'Tip: Position the camera how you want, then click "Save" to store this position for the selected object. The camera position updates in real-time as you navigate.'})]})}var Po=require("react"),ad=require("lucide-react");var $e=require("react/jsx-runtime"),Rv=["X","Y","Z"];var __=.1;function Bp(e){let t=e%360;return t<0?t+360:t}function Lv(e){return Bp(e*180/Math.PI)}function kv(e){return e*Math.PI/180}function S_(e,t,n){let i=[...e],r=Lv(e[t]);return i[t]=kv(Bp(r+n)),i}function Dv({value:e,min:t=-1/0,max:n=1/0,step:i=.1,disabled:r=!1,onChange:a,formatValue:o=l=>Number(l.toFixed(3)),ariaLabel:s,className:c}){let l=o(e),[u,d]=(0,Po.useState)(String(l)),h=(0,Po.useRef)(!1);return(0,Po.useLayoutEffect)(()=>{h.current||d(String(l))},[l]),(0,$e.jsx)("input",{type:"number",className:c,step:i,min:t===-1/0?void 0:t,max:n===1/0?void 0:n,value:u,disabled:r,"aria-label":s,onFocus:()=>{h.current=!0},onChange:f=>{let g=f.target.value;if(d(g),g===""||g==="-")return;let x=Number(g);if(Number.isFinite(x)){let P=Math.max(t,Math.min(n,x));a(P)}},onBlur:()=>{h.current=!1,d(String(o(e)))}})}function M_({value:e,min:t=-1/0,max:n=1/0,step:i=.1,disabled:r=!1,onChange:a,formatValue:o=c=>Number(c.toFixed(3)),label:s}){return(0,$e.jsx)("div",{className:"bb-transformAxesGrid",children:Rv.map((c,l)=>(0,$e.jsxs)("div",{className:"bb-transformAxis",children:[(0,$e.jsx)("span",{className:"se-axisStepperLabel bb-transformAxisLabel",children:c}),(0,$e.jsx)("div",{className:"bb-transformAxisControl",children:(0,$e.jsx)(Dv,{className:"se-numberInput bb-transformNumberInput",step:i,min:t,max:n,value:e[l],disabled:r,formatValue:o,ariaLabel:`${c} ${s?.toLowerCase()||""}`,onChange:u=>{let d=[...e];d[l]=u,a(d)}})})]},c))})}function Bv({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r,moveModeEnabled:a,onToggleMoveMode:o,transformSpace:s,onTransformSpaceChange:c,originalTransform:l}){let u=t.transform?.rotation??l?.rotation??[0,0,0],d=t.transform?.position??l?.position??[0,0,0],h=(p,m)=>{let M=p.transform?.rotation??l?.rotation??[0,0,0],_=p.transform?.position??l?.position??[0,0,0],T=p.transform?.scale??l?.scale??[1,1,1],E=l?.pivotLocal??[0,0,0],b=Tb(_,M,m,T,E,l?.rotationOrder??"XYZ");return{...p,transform:{...p.transform,position:b,rotation:m}}},f=(p,m)=>{e&&r(e,M=>{let _=M.transform?.rotation??l?.rotation??[0,0,0],T=S_(_,p,m);return h(M,T)})},g=(p,m)=>{e&&r(e,M=>{let T=[...M.transform?.rotation??l?.rotation??[0,0,0]];return T[p]=kv(Bp(m)),h(M,T)})},x=(p,m)=>{e&&r(e,M=>{let T=[...M.transform?.position??l?.position??[0,0,0]];return T[p]=m,{...M,transform:{...M.transform,position:T}}})},P=(p,m)=>{e&&x(p,d[p]+m)},y=()=>{!e||!l||r(e,p=>{let m={...p.transform};return delete m.position,delete m.rotation,{...p,transform:Object.keys(m).length>0?m:void 0}})};return(0,$e.jsxs)(nr,{title:"Move & Rotate",open:n,onToggle:i,tooltip:"Enable the transform gizmo to move or rotate the selected mesh on any axis. Rotation uses the object's visible center while exported position and rotation remain local GLTF transforms.",children:[(0,$e.jsxs)("div",{className:"se-field",children:[(0,$e.jsxs)("div",{className:"se-fieldLabel",children:[(0,$e.jsxs)("span",{children:[(0,$e.jsx)(ad.Move3d,{size:14,style:{marginRight:6,verticalAlign:"-2px"}}),"Transform gizmo"]}),(0,$e.jsxs)("label",{className:"se-switch","aria-label":"Toggle move mode",children:[(0,$e.jsx)("input",{type:"checkbox",checked:a,onChange:p=>o(p.target.checked)}),(0,$e.jsx)("span",{className:"se-switchTrack",children:(0,$e.jsx)("span",{className:"se-switchThumb"})})]})]}),(0,$e.jsx)("span",{className:"bb-note",children:"Select a mesh \xB7 drag the colored arrows or planes to move"})]}),(0,$e.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,$e.jsx)("div",{className:"se-fieldLabel",children:(0,$e.jsx)("span",{children:"Axis space"})}),(0,$e.jsx)("div",{className:"se-segmentedControl",children:["world","local"].map(p=>(0,$e.jsx)("button",{type:"button",className:`se-segmentedOption ${s===p?"se-segmentedOption--active":""}`,onClick:()=>c(p),children:p},p))})]}),(0,$e.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,$e.jsx)("div",{className:"se-fieldLabel",children:(0,$e.jsx)("span",{children:"Rotation (degrees)"})}),(0,$e.jsx)("div",{className:"bb-transformAxesGrid",children:Rv.map((p,m)=>{let M=Math.round(Lv(u[m]));return(0,$e.jsxs)("div",{className:"bb-transformAxis",children:[(0,$e.jsx)("span",{className:"se-axisStepperLabel bb-transformAxisLabel",children:p}),(0,$e.jsx)("div",{className:"bb-transformAxisControl",children:(0,$e.jsx)(Dv,{className:"se-numberInput bb-transformNumberInput",step:1,min:0,max:359,value:M,disabled:!e,formatValue:_=>Math.round(_),ariaLabel:`${p} rotation in degrees`,onChange:_=>g(m,_)})})]},p)})})]}),(0,$e.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,$e.jsx)("div",{className:"se-fieldLabel",children:(0,$e.jsx)("span",{children:"Position"})}),(0,$e.jsx)(M_,{value:d,min:-1/0,max:1/0,step:__,disabled:!e,label:"position",onChange:p=>{e&&r(e,m=>({...m,transform:{...m.transform,position:p}}))}})]}),(0,$e.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",style:{marginTop:10,display:"inline-flex",alignItems:"center",gap:6},disabled:!e||!l,onClick:y,title:"Restore this node's position and rotation to what they were in the original model",children:[(0,$e.jsx)(ad.RotateCcw,{size:14}),"Restore original position & rotation"]})]})}var Ea=require("react");function C_(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 Np(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 T_(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 P_(e){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"},{id:"change-material",label:"Change Material",type:"command"},{id:"toggle-visibility",label:"Toggle Visibility",type:"command"}]}function A_(e){let t=T_(e);return{id:C_(e),modelObjectId:e,type:t,label:Np(e),status:"normal",selectable:!0,hoverable:!0,visible:!0,style:{},actions:P_(t),metrics:{},metadata:{}}}function od(e){return Object.fromEntries(e.map(t=>[t,A_(t)]))}function Nv(e){let{nodesById:t}=eo(e),n=[];for(let[i,r]of Object.entries(t)){let a=r;a.isMesh&&a.geometry&&r.name&&n.push(i)}return n.sort((i,r)=>i.localeCompare(r))}var Cn=require("react/jsx-runtime"),Ov=(0,Ea.memo)(E_);function E_({bindings:e,selectedItem:t,onSelect:n,onHover:i,isOpen:r=!0,onToggle:a}){let[o,s]=(0,Ea.useState)(""),c=(0,Ea.useMemo)(()=>Object.keys(e),[e]),l=(0,Ea.useMemo)(()=>{let u=o.trim().toLowerCase();return u?c.filter(d=>{let h=e[d];return d.toLowerCase().includes(u)||h.label?.toLowerCase().includes(u)||h.type.toLowerCase().includes(u)}):c},[e,c,o]);return(0,Cn.jsxs)("aside",{className:`bb-sidebar bb-sidebar--right ${r?"":"bb-sidebar--collapsed"}`,children:[(0,Cn.jsxs)("div",{className:"bb-header bb-header--sidebar",children:[!r&&(0,Cn.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>a?.(!0),"aria-label":"Open scene nodes sidebar",title:"Open scene nodes",children:"\u2190"}),r&&(0,Cn.jsxs)(Cn.Fragment,{children:[(0,Cn.jsxs)("div",{children:[(0,Cn.jsx)("div",{className:"bb-sectionKicker",children:"Scene Nodes"}),(0,Cn.jsxs)("div",{className:"bb-sectionHeading",children:[l.length," visible entries"]})]}),(0,Cn.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>a?.(!1),"aria-label":"Close scene nodes sidebar",title:"Close scene nodes",children:"\u2192"})]})]}),r&&(0,Cn.jsxs)("section",{className:"bb-nodeList",children:[(0,Cn.jsx)("div",{className:"bb-search",children:(0,Cn.jsx)("input",{className:"bb-input",placeholder:"Search nodes, labels, or types",value:o,onChange:u=>s(u.target.value)})}),(0,Cn.jsx)("div",{className:"bb-nodeItems",children:l.map(u=>{let d=e[u];return(0,Cn.jsxs)("button",{type:"button",className:`bb-nodeButton ${u===t?"bb-nodeButton--active":""}`,onClick:()=>n(u),onMouseEnter:()=>i?.(u),onMouseLeave:()=>i?.(null),children:[(0,Cn.jsx)("span",{className:"bb-nodeName",children:u}),(0,Cn.jsxs)("span",{className:"bb-nodeMeta",children:[d.type,d.label===Np(u)?"":d.label||"\xB7 Untitled"]})]},u)})})]})]})}var Ki=require("react/jsx-runtime");function Op({title:e,label:t,open:n,onToggle:i,draft:r,error:a,example:o,onDraftChange:s,onCommit:c}){return(0,Ki.jsx)(nr,{title:e,open:n,onToggle:i,children:(0,Ki.jsxs)("div",{className:"bb-field",children:[(0,Ki.jsx)("label",{className:"bb-label",children:t}),(0,Ki.jsx)("textarea",{className:"bb-textarea",value:r,onChange:l=>s(l.target.value),onBlur:c}),a?(0,Ki.jsx)("span",{className:"bb-status bb-status--error",children:a}):(0,Ki.jsxs)("span",{className:"bb-note",children:["Use a JSON object like ",o,"."]})]})})}function Iv(e,t){let n=new Map(e.animations.clips.map(a=>[a.sourceName,a])),i=t.map(({sourceName:a})=>n.get(a)??{sourceName:a,displayName:a,hidden:!1,loopMode:"repeat",speed:1}),r=e.animations.autoplayClip&&i.some(a=>a.sourceName===e.animations.autoplayClip&&!a.hidden)?e.animations.autoplayClip:null;return{clips:i,autoplayClip:r}}var Ci=require("react"),R_=100;function L_(e,t){switch(t.type){case"set":{let n=typeof t.updater=="function"?t.updater(e.present):t.updater;return n===e.present?e:t.coalesce?{...e,present:n,future:[]}:{past:[...e.past,e.present].slice(-R_),present:n,future:[]}}case"undo":{if(e.past.length===0)return e;let n=e.past[e.past.length-1];return{past:e.past.slice(0,-1),present:n,future:[e.present,...e.future]}}case"redo":{if(e.future.length===0)return e;let[n,...i]=e.future;return{past:[...e.past,e.present],present:n,future:i}}case"reset":return{past:[],present:t.value,future:[]}}}function Ip(e,t=600){let[n,i]=(0,Ci.useReducer)(L_,{past:[],present:e,future:[]}),r=(0,Ci.useRef)(0),a=(0,Ci.useCallback)(l=>{let u=Date.now(),d=u-r.current<t;r.current=u,i({type:"set",updater:l,coalesce:d})},[t]),o=(0,Ci.useCallback)(()=>{r.current=0,i({type:"undo"})},[]),s=(0,Ci.useCallback)(()=>{r.current=0,i({type:"redo"})},[]),c=(0,Ci.useCallback)(l=>{r.current=0,i({type:"reset",value:l})},[]);return{value:n.present,setValue:a,undo:o,redo:s,reset:c,canUndo:n.past.length>0,canRedo:n.future.length>0}}var jv=require("fflate");function zv(e){return JSON.stringify(e,null,2)}function Uv(e){return['import { defineObjectBindings } from "@liveroom-tech/react-immersive/utils";',"",`export const objectBindings = defineObjectBindings(${JSON.stringify(e,null,2)});`,""].join(`
3688
3688
  `)}function Vv(e){return JSON.stringify(e,null,2)}function Fv(e){return['import type { SceneConfig } from "@liveroom-tech/react-immersive/utils";',"",`export const sceneConfig: SceneConfig = ${JSON.stringify(e,null,2)};`,""].join(`
3689
3689
  `)}function Js(e,t,n){fi(new Blob([t],{type:n}),e)}function zp(e){return JSON.stringify(e??{},null,2)}function Up(e){return`[${e[0].toFixed(3)}, ${e[1].toFixed(3)}, ${e[2].toFixed(3)}]`}function k_(e){let t=e.style?.material;return t?Object.values(t).filter(n=>!!n&&typeof n=="object"&&typeof n.path=="string"&&n.path.trim().length>0).map(n=>n.path):[]}async function Hv(e){let t=new Set;for(let r of Object.values(e))for(let a of k_(r))t.add(a);let n=[],i=[];return await Promise.all(Array.from(t).map(async r=>{let a=wm(r);if(a)try{let o=await fetch(a);if(!o.ok)throw new Error(String(o.status));n.push({path:r,blob:await o.blob()})}catch{i.push(r)}})),{assets:n,failedPaths:i}}async function Vp(e,t,n,i,r){if(r.length===0){Js(e,t,n);return}let a={[e]:(0,jv.strToU8)(t)};for(let s of r)a[s.path]=new Uint8Array(await s.blob.arrayBuffer());let o=await Cl(a);fi(new Blob([o],{type:"application/zip"}),i)}var Fp={pbr:["texture","baseColor","metalness","metalnessMap","specularIntensity","specularIntensityMap","specularColor","specularColorMap","reflectivity"],roughness:["roughness","roughnessMap"],emission:["emissive","emissiveIntensity","emissiveMap"],opacity:["opacity","alphaMap","alphaTest","alphaHash","dithering","blendingMode"],normalBump:["normalMap","normalScale","flipNormalY","bumpMap","bumpScale"],displacement:["displacementMap","displacementScale","displacementBias"],ao:["aoMap","aoMapIntensity"],clearcoat:["clearcoat","clearcoatMap","clearcoatRoughness","clearcoatRoughnessMap","clearcoatNormalMap","clearcoatNormalScale","flipClearcoatNormalY"],sheen:["sheen","sheenColor","sheenColorMap","sheenRoughness","sheenRoughnessMap"],anisotropy:["anisotropy","anisotropyRotation","anisotropyMap"],transmission:["transmission","transmissionMap","thickness","thicknessMap","attenuationColor","attenuationDistance"],faces:["side"]},Gv=Object.keys(Fp);function Wv(e){if(e==null)return!1;if(typeof e=="string")return e.trim().length>0;if(typeof e=="number")return Number.isFinite(e);if(typeof e=="boolean")return e;if(typeof e=="object"&&"path"in e){let t=e.path;return typeof t=="string"&&t.trim().length>0}return!1}function jp(e){if(e)return Object.values(e).some(Wv)?e:void 0}function Rr(e,t){return e?Fp[t].some(n=>Wv(e[n])):!1}function Hp(e){return{pbr:Rr(e,"pbr"),roughness:Rr(e,"roughness"),emission:Rr(e,"emission"),opacity:Rr(e,"opacity"),normalBump:Rr(e,"normalBump"),displacement:Rr(e,"displacement"),ao:Rr(e,"ao"),clearcoat:Rr(e,"clearcoat"),sheen:Rr(e,"sheen"),anisotropy:Rr(e,"anisotropy"),transmission:Rr(e,"transmission"),faces:Rr(e,"faces")}}function Gp(e,t){if(t)return{...e,style:{...e.style,material:t}};if(!e.style)return e;let{material:n,...i}=e.style;return{...e,style:Object.keys(i).length>0?i:void 0}}function Xv(e,t){if(!e)return;let n={...e};for(let i of Fp[t])delete n[i];return n}var X=require("react/jsx-runtime"),D_="/room.glb";function sd(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function qv(e,t){if(!sd(e)||!sd(t))return t??e;let n={...e};for(let[i,r]of Object.entries(t)){let a=n[i];n[i]=sd(a)&&sd(r)?qv(a,r):r}return n}function Wp({licenseKey:e,licenseValidationUrl:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r,project:a,onProjectChange:o,projectChangeDebounceMs:s=350,onModelUpload:c,onEditLeaseChange:l}){let u=(0,te.useRef)(null),d=(0,te.useRef)(null),h=(0,te.useRef)(null),[f,g]=(0,te.useState)(a?.model.url??null),[x,P]=(0,te.useState)(a?.model.name??""),[y,p]=(0,te.useState)(a?.model??null),[m,M]=(0,te.useState)(null),_=Ip(a?.objectBindings??{}),T=_.value,E=_.setValue,[b,w]=(0,te.useState)(!1),[C,S]=(0,te.useState)(null),[O,L]=(0,te.useState)(!1),[V,R]=(0,te.useState)("Load the demo model or upload a GLB, GLTF, OBJ, FBX, or USDZ model to generate bindings."),[F,U]=(0,te.useState)("default"),[k,D]=(0,te.useState)(!1),[q,$]=(0,te.useState)("{}"),[pe,Ae]=(0,te.useState)("{}"),[ye,Ee]=(0,te.useState)(null),[Ue,Re]=(0,te.useState)(null),[Wt,Tt]=(0,te.useState)(!1),[Ze,Le]=(0,te.useState)(!1),[re,It]=(0,te.useState)(!1),[et,Pt]=(0,te.useState)({identity:!0,basics:!0,material:!1,actions:!1,camera:!1,transform:!1,metrics:!1,metadata:!1}),[xt,je]=(0,te.useState)({pbr:!0,roughness:!1,emission:!1,opacity:!1,normalBump:!1,displacement:!1,ao:!1,clearcoat:!1,sheen:!1,anisotropy:!1,transmission:!1,faces:!1}),yt=B=>Pt(W=>({...W,[B]:!W[B]})),Qt=B=>je(W=>({...W,[B]:!W[B]})),[we,rn]=(0,te.useState)("object"),[Zt,Oe]=(0,te.useState)("General"),[J,Se]=(0,te.useState)("metalness"),[ce,ke]=(0,te.useState)(Hp()),Ve=(0,te.useRef)(null),[Fe,Ye]=(0,te.useState)(!1),[xe,wt]=(0,te.useState)(!0),[mt,an]=(0,te.useState)(!0),[en,tt]=(0,te.useState)(!1),[Qe,Dn]=(0,te.useState)(null),[zt,Un]=(0,te.useState)(!1),[Vn,on]=(0,te.useState)("world"),j=(0,te.useRef)({}),A=Ip(a?.sceneConfig??Li),G=A.value,ee=A.setValue,[oe,ae]=(0,te.useState)("orbit"),se=oe==="pointerLock",[kt,nt]=(0,te.useState)(null),[At,at]=(0,te.useState)(null),Et=Dc(e,t),Me=Ob(Et.tier),Xt=(0,te.useMemo)(()=>({isInsideEditor:!0,activeTab:we,activeSubTab:Zt,tier:Me,setActiveTab:rn,setActiveSubTab:Oe}),[we,Zt,Me]),_e=(0,te.useRef)(null),sn=(0,te.useRef)(0),Kn=(0,te.useRef)(0),Bn=(0,te.useRef)(a?`${a.id}:${a.revision}`:null),Pn=(0,te.useRef)(null),Qi=(0,te.useRef)(!1),Gn=(0,te.useRef)(!1),Xr=(0,te.useRef)(a?{modelUrl:a.model.url,bindings:a.objectBindings,sceneConfig:a.sceneConfig}:null),Ti=(0,te.useRef)(void 0),ci=(0,te.useRef)(0),vn=(0,te.useRef)(null),cr=(0,te.useRef)(a?{requestId:0,modelName:a.model.name??"model",modelUrl:a.model.url,storedBindings:a.objectBindings,streaming:!!a.model.tilesetUrl}:null),ea=(0,te.useRef)(null),{cameraState:Ut,resetView:dr,focusObject:di,fitScene:ur,setCameraState:La,handleCameraChange:rl,handleViewerReady:Eo}=Gc(),il=(0,te.useCallback)(B=>{se||La({position:B.position,target:B.target,fov:Ut?.fov??null,zoom:Ut?.zoom??1,azimuthAngle:B.azimuthAngle,polarAngle:B.polarAngle},!0)},[se,La,Ut]),Zn=Wc(),Vt=m?T[m]??null:null,Ro=Vt?.style?.material,qr=Vt?.cameraState,ka=Ut?{position:Up(Ut.position),target:Up(Ut.target)}:null,ui=(0,te.useCallback)(B=>{ee(W=>{let ie=W.annotations.map(Ie=>Ie.id).join(","),he=B.map(Ie=>Ie.id).join(",");return ie===he?W:{...W,annotations:B}})},[]),Lo=(0,te.useCallback)(B=>{nt(B?{annotation:B}:null)},[]);(0,te.useEffect)(()=>{if(!Vt){$("{}"),Ae("{}"),Ee(null),Re(null);return}$(zp(Vt.metrics)),Ae(zp(Vt.metadata)),Ee(null),Re(null)},[Vt]),(0,te.useEffect)(()=>{let B=Hp(Ro);if(Ve.current!==m){Ve.current=m,ke(B);return}ke(W=>{let ie=!1,he={...W};for(let Ie of Gv)B[Ie]&&!W[Ie]&&(he[Ie]=!0,ie=!0);return ie?he:W})},[m,Ro]),(0,te.useEffect)(()=>()=>{_e.current?.cleanup(),vn.current&&clearTimeout(vn.current)},[]);let Da=(0,te.useCallback)((B,W)=>{let ie=od(B);if(W){let he=new Map(Object.values(W).map(Ie=>[Ie.modelObjectId,Ie]));for(let Ie of B){let dt=he.get(Ie);dt&&(ie[Ie]=dt)}}return ie},[]);(0,te.useEffect)(()=>{if(!a)return;let B=`${a.id}:${a.revision}`;if(Bn.current===B)return;Bn.current=B;let W=f!==a.model.url||y?.tilesetUrl!==a.model.tilesetUrl||y?.assetVersion!==a.model.assetVersion,ie=T!==a.objectBindings,he=G!==a.sceneConfig;(W||ie||he)&&(Gn.current=!0),p(a.model),P(a.model.name??"model");let Ie=a.objectBindings;if(ie){let dt=Pn.current;Ie=dt?Da(dt,a.objectBindings):a.objectBindings,_.reset(Ie)}if(he&&A.reset(a.sceneConfig),W){let dt=++Kn.current;cr.current={requestId:dt,modelName:a.model.name??"model",modelUrl:a.model.url,storedBindings:a.objectBindings,streaming:!!a.model.tilesetUrl},ea.current=null,M(null),w(!0),g(a.model.url)}Xr.current={modelUrl:a.model.url,bindings:Ie,sceneConfig:a.sceneConfig}},[T,Da,a,f,G,y,_,A]);let Ba=(0,te.useRef)(o);Ba.current=o,(0,te.useEffect)(()=>{if(!a||!Ba.current||!f)return;if(!Qi.current){Qi.current=!0;return}let B=Xr.current;if(f===a.model.url&&T===a.objectBindings&&G===a.sceneConfig||B!==null&&f===B.modelUrl&&T===B.bindings&&G===B.sceneConfig){Gn.current=!1;return}if(cr.current)return;if(Gn.current){Gn.current=!1;return}let W=window.setTimeout(()=>{Ba.current?.({projectId:a.id,baseRevision:a.revision,model:{...y??a.model,url:f,name:x||a.model.name},objectBindings:T,sceneConfig:G},"local")},s);return()=>window.clearTimeout(W)},[T,x,f,a,s,y,G]),(0,te.useEffect)(()=>{let B=W=>{if(W.key.toLowerCase()!=="z"||!(W.metaKey||W.ctrlKey))return;let ie=W.target,he=ie?.tagName;if(he==="INPUT"||he==="TEXTAREA"||ie?.isContentEditable)return;W.preventDefault();let Ie=we==="scene"?A:_;W.shiftKey?Ie.redo():Ie.undo()};return window.addEventListener("keydown",B),()=>window.removeEventListener("keydown",B)},[we,_,A]),(0,te.useEffect)(()=>{if(b||F==="default"||F==="success")return;D(!0);let B=window.setTimeout(()=>D(!1),4e3);return()=>window.clearTimeout(B)},[V,F,b]);let Nn=(0,te.useMemo)(()=>Object.keys(T),[T]),Na=(0,te.useMemo)(()=>!m||!Vt?null:Vt.id.trim()?Object.entries(T).some(([ie,he])=>ie!==m&&he.id===Vt.id)?"Another binding already uses this ID.":null:"ID is required.",[T,m,Vt]),pr=(B,W)=>{E(ie=>({...ie,[B]:W(ie[B])}))},ta=(B,W)=>{pr(B,ie=>{let he=jp(W(ie.style?.material));return Gp(ie,he)})},ko=(B,W,ie)=>{ta(B,he=>({...he,[W]:ie?{path:ie}:void 0}))},al=(B,W)=>{ke(ie=>({...ie,[B]:W})),!W&&m&&pr(m,ie=>{let he=jp(Xv(ie.style?.material,B));return Gp(ie,he)})},Do=(0,te.useCallback)((B,W,ie)=>{let he=Nv(B),Ie=od(he);if(ie){let _t=new Map(Object.values(ie).map(ot=>[ot.modelObjectId,ot]));for(let ot of he){let kr=_t.get(ot);kr&&(Ie[ot]=kr)}}B.updateMatrixWorld(!0);let dt={};for(let _t of he){let ot=Ur(B,_t);if(!ot){dt[_t]={position:[0,0,0],rotation:[0,0,0],scale:[1,1,1],pivotLocal:[0,0,0],rotationOrder:"XYZ"};continue}let kr=Fc(ot);dt[_t]={position:[ot.position.x,ot.position.y,ot.position.z],rotation:[ot.rotation.x,ot.rotation.y,ot.rotation.z],scale:[ot.scale.x,ot.scale.y,ot.scale.z],pivotLocal:[kr.x,kr.y,kr.z],rotationOrder:ot.rotation.order}}j.current=dt,_.reset(Ie),M(he[0]??null),ie||ee(_t=>({..._t,annotations:[]})),R(`Generated ${he.length} bindings from ${W}.`),U("success"),ci.current=100,S(100),vn.current&&clearTimeout(vn.current),vn.current=setTimeout(()=>{vn.current=null,w(!1),S(null)},400)},[_,ee]),Bo=(B,W,ie,he)=>{let Ie=++Kn.current;w(!0),S(null),ci.current=0,vn.current&&(clearTimeout(vn.current),vn.current=null),Ti.current=ie;let dt=ie?ie/1048576:0;R(dt>=100?`Reading ${W} (${Math.round(dt)}MB \u2014 large file, this can take a while)...`:`Reading ${W} and generating starter bindings...`),U("default"),P(W),p(he??{url:B,name:W}),nt(null);let _t=ea.current;if(B===f&&_t?.url===B){cr.current=null,Do(_t.scene,W);return}cr.current={requestId:Ie,modelName:W,modelUrl:B,streaming:!!he?.tilesetUrl},g(B),_.reset({}),M(null)},xd=(0,te.useCallback)(B=>{let W=cr.current;if(!(!W||W.requestId!==Kn.current)){if(cr.current=null,ea.current={url:W.modelUrl,scene:B},W.streaming){R(`Streaming ${W.modelName}.`),U("success"),w(!1);return}W.storedBindings&&(Gn.current=!0),Do(B,W.modelName,W.storedBindings)}},[Do,_]),yd=(0,te.useCallback)(B=>{let W=B.map(he=>he.name);if(W.length===0)return;Pn.current=W,Gn.current=!0;let ie=Da(W,a?.objectBindings);if(_.reset(ie),a){let he=Xr.current;Xr.current={modelUrl:he?.modelUrl??a.model.url,bindings:ie,sceneConfig:he?.sceneConfig??a.sceneConfig}}M(he=>he??W[0]??null),R(`Streaming ${W.length} bindable objects.`),U("success"),w(!1)},[Da,_,a]),rr=(0,te.useCallback)(B=>{let W=cr.current;!W||W.requestId!==Kn.current||(cr.current=null,console.error(B),R(`Could not read ${W.modelName}. Make sure the file is a valid GLB, GLTF, OBJ, FBX, or USDZ asset.`),U("error"),vn.current&&(clearTimeout(vn.current),vn.current=null),ci.current=0,w(!1),S(null))},[]),ol=(0,te.useCallback)(B=>{let W=null;if(B.lengthComputable&&B.total>0)W=B.loaded/B.total*100;else{let he=Ti.current;he&&he>0&&(W=B.loaded/he*100)}if(W===null)return;let ie=Math.min(90,Math.floor(W/10)*10);ie>ci.current&&(ci.current=ie,S(ie)),W>=99.5&&R(he=>he.startsWith("Finalizing")?he:"Finalizing model \u2014 parsing geometry and textures (large files can take a moment here)...")},[]),Yr=(0,te.useCallback)(B=>{Zn.handleAnimationsReady(B);let W=B.clipDetails??B.clips.map(ie=>({sourceName:ie,duration:0}));ee(ie=>({...ie,animations:Iv(ie,W)}))},[Zn,ee]),Oa=async()=>{_e.current?.cleanup(),_e.current=null,await Bo(D_,"room.glb")},An=async B=>{if(c){try{w(!0),R(`Uploading ${B.name}...`),U("default");let ie=await c(B);await Bo(ie.url,ie.name??B.name,B.size,ie)}catch(ie){w(!1),R(ie instanceof Error?ie.message:`Could not upload ${B.name}.`),U("error")}return}let W;try{W=await Ul(B)}catch(ie){R(ie instanceof Error?ie.message:"Could not read model file. Upload a .glb, .gltf, .obj, .fbx, .usdz, or .zip asset."),U("error");return}_e.current?.cleanup(),_e.current=W,await Bo(W.url,W.name,B.size,{url:W.url,name:W.name})},Ia=async B=>{let W=B.target.files?.[0];W&&(await An(W),B.target.value="")},No=()=>{_e.current?.cleanup(),_e.current=null,ea.current=null,cr.current=null,j.current={},sn.current=0,Tt(!1),vn.current&&(clearTimeout(vn.current),vn.current=null),ci.current=0,S(null),Ti.current=void 0,g(null),P(""),p(null),M(null),nt(null),_.reset({}),$("{}"),Ae("{}"),Ee(null),Re(null),at(null),Un(!1),ee(B=>({...B,animations:Li.animations,annotations:[]})),R("Load the demo model or upload a GLB, GLTF, OBJ, FBX, or USDZ model to generate bindings."),U("default")},sl=()=>{u.current?.click()},wd=()=>{d.current?.click()},ll=async B=>{L(!0);try{let{assets:W,failedPaths:ie}=await Hv(T);B==="json"?await Vp("objectBindings.json",zv(T),"application/json","objectBindings.zip",W):await Vp("objectBindings.ts",Uv(T),"text/typescript","objectBindings-ts.zip",W),ie.length>0?(R(`Exported, but ${ie.length} uploaded image${ie.length===1?"":"s"} couldn't be bundled: ${ie.join(", ")}.`),U("error")):W.length>0&&(R(`Exported with ${W.length} uploaded image${W.length===1?"":"s"} bundled into the zip.`),U("success"))}catch(W){let ie=W instanceof Error?W.message:"Unknown export error.";R(`Failed to export bindings: ${ie}`),U("error")}finally{L(!1)}},$r=async B=>{if(!Nn.length){R("Load a model before importing bindings."),U("error");return}let W;try{W=JSON.parse(await B.text())}catch{R(`${B.name} is not valid JSON.`),U("error");return}if(W===null||typeof W!="object"||Array.isArray(W)){R("Expected a JSON object mapping object IDs to bindings."),U("error");return}let ie=new Map;for(let _t of Object.values(W))if(_t!==null&&typeof _t=="object"&&typeof _t.id=="string"&&typeof _t.type=="string"&&typeof _t.modelObjectId=="string"){let ot=_t;ie.set(ot.modelObjectId,ot)}if(ie.size===0){R(`${B.name} doesn't look like an exported bindings file.`),U("error");return}let he={...T},Ie=0;for(let _t of Object.keys(he)){let ot=ie.get(_t);ot&&(he[_t]=ot,Ie++)}if(Ie===0){R(`None of the object IDs in ${B.name} match this model \u2014 nothing imported.`),U("error");return}E(he);let dt=ie.size-Ie;R(dt>0?`Imported ${Ie} binding${Ie===1?"":"s"} from ${B.name} (${dt} skipped \u2014 not in this model).`:`Imported ${Ie} binding${Ie===1?"":"s"} from ${B.name}.`),U("success")},na=async B=>{let W=B.target.files?.[0];W&&(await $r(W),B.target.value="")},Oo=()=>{h.current?.click()},Lr=async B=>{let W;try{W=JSON.parse(await B.text())}catch{R(`${B.name} is not valid JSON.`),U("error");return}if(W===null||typeof W!="object"||Array.isArray(W)){R("Expected a JSON object with scene config sections."),U("error");return}let ie=["model","camera","lighting","wireframe","shadows","environment","background","groundShadows","postProcessing","animations","annotations","cinematic"],he=W,Ie=ie.filter(dt=>he[dt]!==void 0);if(Ie.length===0){R(`${B.name} doesn't look like an exported scene config file.`),U("error");return}ee(dt=>{let _t={...dt};for(let ot of Ie)_t[ot]=qv(dt[ot],he[ot]);return _t}),R(`Imported ${Ie.length} section${Ie.length===1?"":"s"} from ${B.name}.`),U("success")},cl=async B=>{let W=B.target.files?.[0];W&&(await Lr(W),B.target.value="")},ra=B=>{B.preventDefault(),B.stopPropagation(),!(b||f)&&(sn.current+=1,Tt(!0))},Io=B=>{B.preventDefault(),B.stopPropagation(),!(b||f)&&(B.dataTransfer.dropEffect="copy",Tt(!0))},ia=B=>{B.preventDefault(),B.stopPropagation(),!(b||f)&&(sn.current=Math.max(0,sn.current-1),sn.current===0&&Tt(!1))},pi=async B=>{if(B.preventDefault(),B.stopPropagation(),sn.current=0,Tt(!1),b||f)return;let W=B.dataTransfer.files?.[0];W&&await An(W)},zo=(B,W,ie)=>{if(!m)return;let he;try{he=JSON.parse(W)}catch{ie("Invalid JSON");return}if(he===null||typeof he!="object"||Array.isArray(he)){ie("Expected a JSON object");return}if(B==="metrics"&&Object.values(he).some(dt=>typeof dt!="number"||!Number.isFinite(dt))){ie("Metrics values must be numbers");return}pr(m,Ie=>({...Ie,[B]:he})),ie(null)},_d=(0,te.useCallback)(B=>{if(se){ae("orbit");return}if(!B){M(null);return}let W=Object.entries(T).find(([ie,he])=>he===B||ie===B.modelObjectId||he.modelObjectId===B.modelObjectId)?.[0]??null;M(W)},[se,T]),Uo=(0,te.useCallback)(async B=>{if(se){ae("orbit");return}M(B),at(null),await di(B)},[se,di]),dl=(0,te.useCallback)(B=>{at(B?T[B]??null:null)},[T]),aa=(0,te.useCallback)(B=>It(!B),[]),ul=(0,te.useCallback)(()=>{if(se){R("Camera positions aren't available while Pointer Lock is the active camera controller."),U("error");return}if(!m||!Ut)return;let B={position:Ut.position,target:Ut.target,...Ut.fov!=null?{fov:Ut.fov}:{},zoom:Ut.zoom};pr(m,W=>({...W,cameraState:B}))},[se,m,Ut]),pl=(0,te.useCallback)(()=>{if(se){R("Camera positions aren't available while Pointer Lock is the active camera controller."),U("error");return}!qr?.position||!qr?.target||La({position:qr.position,target:qr.target,fov:qr.fov??Ut?.fov??null,zoom:qr.zoom??Ut?.zoom??1},!0)},[se,qr,La,Ut]),hl=(0,te.useCallback)(()=>{se||m&&pr(m,B=>({...B,cameraState:void 0}))},[se,m]),Sd=(0,te.useCallback)(async()=>{if(se){R("Reset View isn't available while Pointer Lock is the active camera controller."),U("error");return}await dr()},[se,dr]),Md=(0,te.useCallback)(async()=>{if(se){R("Fit Scene isn't available while Pointer Lock is the active camera controller."),U("error");return}await ur()},[se,ur]),Vo=(0,te.useCallback)(B=>{Dn(B),tt(!0)},[]),hr=(0,te.useCallback)(()=>{tt(!1),Dn(null)},[]),ml=(0,te.useCallback)(()=>{if(Qe==="bindings"){if(!Nn.length){hr();return}let B=od(Nn);_.reset(B),M(Nn[0]??null),R("Object bindings reset to default values."),U("success")}else Qe==="scene"&&(A.reset(Li),R("Scene config reset to default values."),U("success"));hr()},[Qe,Nn,_,A,hr]);return Et.status==="checking"?(0,X.jsx)("div",{className:"bb-root bb-root--licenseChecking",children:(0,X.jsx)(ua,{title:"Verifying License",message:"Checking your license key..."})}):Et.status==="invalid"?(0,X.jsx)("div",{className:"bb-root bb-root--licenseInvalid",children:(0,X.jsx)(ua,{tone:"error",title:"Invalid License",message:Et.isLocalDomain?Et.reason??"License has been revoked or has expired":"Failed to load. Please contact the site administrator."})}):(0,X.jsxs)(up.Provider,{value:Xt,children:[(0,X.jsxs)("div",{className:"bb-root",children:[(0,X.jsx)("input",{ref:u,type:"file",accept:zl,className:"bb-hiddenInput",onChange:Ia,disabled:b}),(0,X.jsx)("input",{ref:d,type:"file",accept:".json,application/json",className:"bb-hiddenInput",onChange:na,disabled:b}),(0,X.jsx)("input",{ref:h,type:"file",accept:".json,application/json",className:"bb-hiddenInput",onChange:cl,disabled:b}),(0,X.jsxs)("aside",{className:`bb-sidebar bb-sidebar--left ${Ze?"bb-sidebar--collapsed":""}`,children:[(0,X.jsxs)("div",{className:"bb-header bb-header--sidebar",children:[!Ze&&(0,X.jsx)("h1",{className:"bb-title",children:"Binding Builder"}),(0,X.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>Le(B=>!B),"aria-label":Ze?"Open editor sidebar":"Collapse editor sidebar",title:Ze?"Open editor":"Collapse editor",children:Ze?"\u2192":"\u2190"})]}),!Ze&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)("div",{className:"bb-tabRow",children:[(0,X.jsx)("button",{type:"button",className:`bb-tab ${we==="object"?"bb-tab--active":""}`,onClick:()=>rn("object"),children:"Object"}),(0,X.jsx)("button",{type:"button",className:`bb-tab ${we==="scene"?"bb-tab--active":""}`,onClick:()=>rn("scene"),children:"Scene"})]}),(0,X.jsx)("section",{className:"bb-editor",children:we==="scene"?(0,X.jsx)(X.Fragment,{children:f?(0,X.jsx)(Rp,{config:G,onChange:ee,activeSubTab:Zt,onActiveSubTabChange:Oe,cameraState:Zt==="Cinematic"&&Ut?{position:Ut.position,target:Ut.target,azimuthAngle:Ut.azimuthAngle,polarAngle:Ut.polarAngle}:null,onPreviewWaypoint:il,animationClipDetails:Zn.clipDetails,animationPlayback:Zn}):(0,X.jsx)("div",{className:"bb-emptyEditor",children:"Upload a model to edit its scene settings."})}):!Vt||!m?(0,X.jsx)("div",{className:"bb-emptyEditor",children:"Select a generated node binding to edit its values."}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)("div",{className:"bb-editorHeader",children:(0,X.jsxs)("div",{children:[(0,X.jsx)("div",{className:"bb-sectionKicker",children:"Editing Binding"}),(0,X.jsx)("h2",{className:"bb-editorTitle",children:Vt.label||m}),(0,X.jsxs)("div",{className:"bb-editorMeta",children:[(0,X.jsx)("span",{children:Vt.type}),(0,X.jsx)("span",{children:Vt.modelObjectId})]})]})}),(0,X.jsx)(wv,{selectedItem:m,selectedBinding:Vt,open:et.identity,onToggle:()=>yt("identity"),updateBinding:pr,idError:Na}),(0,X.jsx)(Mv,{selectedItem:m,selectedBinding:Vt,open:et.basics,onToggle:()=>yt("basics"),updateBinding:pr}),(0,X.jsxs)(nr,{title:"Material",open:et.material,onToggle:()=>yt("material"),tooltip:"Edit the selected object's base material, textures, and surface properties.",children:[(0,X.jsx)(yv,{disabled:!m,onApply:B=>m&&ta(m,W=>({...W,...B}))}),(0,X.jsx)(vv,{selectedItem:m,selectedMaterial:Ro,pbrWorkflow:J,onPbrWorkflowChange:Se,openMaterialPanels:xt,materialPanelEnabled:ce,onToggleMaterialPanel:Qt,onSetMaterialPanelState:al,updateSelectedMaterial:ta,setSelectedTexturePath:ko})]}),(0,X.jsx)(Av,{selectedItem:m,selectedBinding:Vt,open:et.actions,onToggle:()=>yt("actions"),updateBinding:pr}),(0,X.jsx)(Ev,{selectedBinding:Vt,open:et.camera,onToggle:()=>yt("camera"),cameraState:Ut,formattedCameraState:ka,savedCameraPosition:qr,onSaveCameraPosition:ul,onGoToSavedCamera:pl,onClearSavedCamera:hl,onResetView:Sd,onFitScene:Md}),(0,X.jsx)(Bv,{selectedItem:m,selectedBinding:Vt,open:et.transform,onToggle:()=>yt("transform"),updateBinding:pr,moveModeEnabled:zt,onToggleMoveMode:Un,transformSpace:Vn,onTransformSpaceChange:on,originalTransform:j.current[m]??null}),(0,X.jsx)(Op,{title:"Metrics",label:"Metrics JSON",open:et.metrics,onToggle:()=>yt("metrics"),draft:q,error:ye,example:'{"area": 42}',onDraftChange:$,onCommit:()=>zo("metrics",q,Ee)}),(0,X.jsx)(Op,{title:"Metadata",label:"Metadata JSON",open:et.metadata,onToggle:()=>yt("metadata"),draft:pe,error:Ue,example:'{"room": "kitchen"}',onDraftChange:Ae,onCommit:()=>zo("metadata",pe,Re)})]})}),we==="object"&&(0,X.jsxs)("div",{className:"bb-toolbar",children:[(0,X.jsxs)("div",{className:"bb-toolbarGroup",children:[(0,X.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!_.canUndo,onClick:_.undo,title:"Undo (Cmd/Ctrl+Z)",children:(0,X.jsx)(Hn.Undo2,{size:16})}),(0,X.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!Nn.length,onClick:()=>Vo("bindings"),title:"Reset object bindings to default",children:(0,X.jsx)(Hn.ListRestart,{size:16})}),(0,X.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!_.canRedo,onClick:_.redo,title:"Redo (Cmd/Ctrl+Shift+Z)",children:(0,X.jsx)(Hn.Redo2,{size:16})})]}),(0,X.jsx)("div",{className:"bb-toolbarDivider"}),(0,X.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:!Nn.length||b,onClick:wd,title:"Re-apply a previously exported objectBindings.json onto this model",children:[(0,X.jsx)(Hn.Upload,{size:14}),"Import"]}),(0,X.jsx)("div",{className:"bb-toolbarDivider"}),(0,X.jsx)(kp,{disabled:!Nn.length||O,exporting:O,onExportJson:()=>ll("json"),onExportTs:()=>ll("ts")})]}),we==="scene"&&(0,X.jsxs)("div",{className:"bb-toolbar",children:[(0,X.jsxs)("div",{className:"bb-toolbarGroup",children:[(0,X.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!A.canUndo,onClick:A.undo,title:"Undo (Cmd/Ctrl+Z)",children:(0,X.jsx)(Hn.Undo2,{size:16})}),(0,X.jsx)("button",{type:"button",className:"bb-iconButton",onClick:()=>Vo("scene"),title:"Reset scene config to default",children:(0,X.jsx)(Hn.ListRestart,{size:16})}),(0,X.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!A.canRedo,onClick:A.redo,title:"Redo (Cmd/Ctrl+Shift+Z)",children:(0,X.jsx)(Hn.Redo2,{size:16})})]}),(0,X.jsx)("div",{className:"bb-toolbarDivider"}),(0,X.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:!Nn.length||b,onClick:Oo,title:"Re-apply a previously exported sceneConfig.json",children:[(0,X.jsx)(Hn.Upload,{size:14}),"Import"]}),(0,X.jsx)("div",{className:"bb-toolbarDivider"}),(0,X.jsx)(kp,{disabled:!Nn.length||b,onExportJson:()=>Js("sceneConfig.json",Vv(G),"application/json"),onExportTs:()=>Js("sceneConfig.ts",Fv(G),"text/typescript")})]})]})]}),(0,X.jsxs)("main",{className:"bb-previewShell",children:[(0,X.jsxs)("div",{className:"bb-previewHeader",children:[(0,X.jsxs)("div",{className:"bb-previewToggles",children:[(0,X.jsxs)("label",{className:"bb-checkbox bb-checkbox--compact",style:{color:"black"},children:[(0,X.jsx)("input",{type:"checkbox",checked:Fe,onChange:B=>Ye(B.target.checked)}),"Zoom on selected"]}),(0,X.jsxs)("label",{className:"bb-checkbox bb-checkbox--compact",style:{color:"black"},children:[(0,X.jsx)("input",{type:"checkbox",checked:xe,onChange:B=>wt(B.target.checked)}),"Highlight on hover"]}),(0,X.jsxs)("label",{className:"bb-checkbox bb-checkbox--compact",style:{color:"black"},children:[(0,X.jsx)("input",{type:"checkbox",checked:mt,onChange:B=>an(B.target.checked)}),"Camera controller"]})]}),(0,X.jsxs)("div",{className:"bb-previewControlsColumn",children:[(0,X.jsxs)("div",{className:"bb-previewControls",children:[(0,X.jsx)("div",{className:"bb-previewMeta",children:(0,X.jsx)("span",{children:m?`Focused: ${m}`:"Select a node to inspect it"})}),f&&(0,X.jsx)("button",{type:"button",className:"bb-button bb-button--ghost bb-removeModelButton",onClick:No,children:"Remove model"})]}),f&&(0,X.jsx)("div",{className:"bb-moveHint",children:se?(0,X.jsx)(X.Fragment,{children:"Click the preview to look around \xB7 Esc to release"}):zt?(0,X.jsx)(X.Fragment,{children:"Select a mesh \xB7 drag the colored arrows, planes, or rings"}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)("kbd",{children:"W"}),(0,X.jsx)("kbd",{children:"A"}),(0,X.jsx)("kbd",{children:"S"}),(0,X.jsx)("kbd",{children:"D"})," move \xB7 ",(0,X.jsx)("kbd",{children:"Space"}),"/",(0,X.jsx)("kbd",{children:"C"})," up \xB7 down \xB7 drag to look"]})})]})]}),(0,X.jsxs)("div",{className:"bb-preview",children:[(0,X.jsx)(bo,{visible:b||k,message:V,tone:F,progress:C??void 0}),f?(0,X.jsx)(Hs,{modelUrl:f,tilesetUrl:y?.tilesetUrl,objectBindings:T,selectedObject:Vt,onObjectSelect:_d,onObjectBindingsChange:E,onObjectEditLeaseChange:(B,W)=>l?.(B.modelObjectId||B.id,W),showObjectBindingDataPanel:!1,showSceneObjectsPanel:!1,onCameraChange:rl,onViewerReady:Eo,onAnnotationsChange:ui,activeAnnotation:kt?.annotation??null,onActiveAnnotationChange:Lo,onAnimationsReady:Yr,onModelLoaded:xd,onLoadError:rr,onObjectCatalog:yd,onProgress:ol,onCameraControllerChange:ae,cameraControllerType:oe,licenseKey:e,licenseValidationUrl:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r,sceneConfig:G,onSceneConfigChange:ee,preserveDrawingBuffer:!0,disableZoom:!1,zoomOnSelected:Fe,highlightOnHover:xe,enableCameraControls:mt,moveModeEnabled:zt,objectTransformSpace:Vn,enableKeyboardNavigation:!0,showViewGizmo:!0,panelHoveredObject:xe?At:null,showLoadingOverlay:!1,autoRotate:se?!1:G.model.autoRotate??!1,autoRotateSpeed:G.model.autoRotateSpeed??1}):(0,X.jsx)("div",{className:`bb-previewPlaceholder ${Wt?"bb-previewPlaceholder--dragActive":""}`,onDragEnter:ra,onDragOver:Io,onDragLeave:ia,onDrop:pi,children:(0,X.jsxs)("div",{children:[(0,X.jsx)("div",{children:"Upload a GLB, GLTF, OBJ, FBX, or USDZ model, or drag a supported model/ZIP bundle here to generate editable object bindings."}),(0,X.jsx)("button",{type:"button",className:"bb-previewPlaceholderButton",onClick:sl,disabled:b,children:"Upload"})]})})]})]}),(0,X.jsx)(Ov,{bindings:T,selectedItem:m,onSelect:Uo,onHover:dl,isOpen:!re,onToggle:aa})]}),en&&(0,X.jsx)("div",{className:"bb-reset-overlay",onClick:hr,children:(0,X.jsxs)("div",{className:"bb-reset-dialog",onClick:B=>B.stopPropagation(),children:[(0,X.jsxs)("div",{className:"bb-reset-header",children:[(0,X.jsxs)("h3",{className:"bb-reset-title",children:[(0,X.jsx)(Hn.AlertTriangle,{size:20,className:"bb-icon-warning"}),"Confirm Reset"]}),(0,X.jsx)("button",{className:"bb-reset-close",onClick:hr,children:(0,X.jsx)(Hn.X,{size:20})})]}),(0,X.jsxs)("div",{className:"bb-reset-body",children:[(0,X.jsxs)("p",{className:"bb-reset-message",children:["Are you sure you want to reset"," ",(0,X.jsx)("strong",{children:Qe==="bindings"?"Object Bindings":"Scene Config"}),"?"]}),(0,X.jsx)("p",{className:"bb-reset-details",children:Qe==="bindings"?"This will remove all your custom changes to object properties, groups, tags, transforms, materials, actions, camera positions, metrics, and metadata.":"This will restore all scene settings (camera, lighting, environment, background, animations, annotations, etc.) to their default values."}),(0,X.jsx)("p",{className:"bb-reset-warning",children:"This action cannot be undone!"})]}),(0,X.jsxs)("div",{className:"bb-reset-footer",children:[(0,X.jsx)("button",{className:"bb-reset-btn",onClick:hr,children:"Cancel"}),(0,X.jsx)("button",{className:"bb-reset-btn-danger",onClick:ml,children:"Yes, Reset"})]})]})})]})}var de=require("react"),cd=require("@react-three/drei"),si=require("@react-three/fiber"),Jv=require("@react-three/fiber");var Zi=require("three"),Qv=require("three-stdlib");var pn=require("lucide-react");var Y=require("react/jsx-runtime"),Yv={color:"#93c5fd",intensity:.05},B_=["apartment","city","dawn","forest","lobby","night","park","studio","sunset","warehouse"];function N_(e){return!!(e&&"isMesh"in e&&e.isMesh)}function $v(e,t){Array.isArray(e)?e.forEach(t):t(e)}function O_(e,t){if(!t)return;let n=t.camera;if(!(n instanceof Zi.PerspectiveCamera))return;let i=new Zi.Box3().setFromObject(e).getSize(new Zi.Vector3).length();!Number.isFinite(i)||i<=0||(n.near=i/100,n.far=i*100,n.updateProjectionMatrix(),t.maxDistance=i*10)}var Yp=class extends de.Component{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(n){this.props.onLoadError?.(n)}render(){return this.state.hasError?null:this.props.children}};function I_({url:e,format:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r,hiddenKeys:a,selectedKey:o,panelHoveredKey:s,nodeRefsOut:c,onMeshesReady:l,onModelLoaded:u,onLoadProgress:d,onMeshClick:h,highlightOnHover:f}){let{scene:g}=Hl(e,{dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r},t,d),x=(0,si.useThree)(S=>S.invalidate),{setCanvasCursor:P,restoreCanvasCursor:y}=Kl(),[p,m]=(0,de.useState)(null),M=(0,de.useMemo)(()=>Qv.SkeletonUtils.clone(g),[g]),_=(0,de.useMemo)(()=>{let S={};return M.traverse(O=>{if(!N_(O))return;let L=O.name||O.uuid;S[L]={key:L,label:O.name||O.type,ref:O}}),S},[M]),T=(0,de.useMemo)(()=>{let S={};for(let[O,{ref:L}]of Object.entries(_)){let R=(Array.isArray(L.material)?L.material:[L.material]).map(F=>{let k=(io(F)??new Zi.MeshStandardMaterial).clone();return k.userData.baseColor=k.color.clone(),k.userData.baseMap=k.map,k.userData.baseEmissive=k.emissive.clone(),k.userData.baseEmissiveMap=k.emissiveMap,k.userData.baseEmissiveIntensity=k.emissiveIntensity,k});S[O]=Array.isArray(L.material)?R:R[0]}return S},[_]);(0,de.useEffect)(()=>()=>{Object.values(T).forEach(S=>$v(S,O=>O.dispose()))},[T]);let E=(0,de.useRef)(null);(0,de.useEffect)(()=>{E.current!==e&&(E.current=e,M.updateWorldMatrix(!0,!0),ms(M),l(_),u(M))},[e,M,_,l,u]),(0,de.useEffect)(()=>{let S=new AbortController;return $a(M,S.signal),()=>{S.abort(),da(M)}},[M]);let b=(0,de.useMemo)(()=>!_l(M),[M]);(0,de.useEffect)(()=>{for(let[S,{ref:O}]of Object.entries(_))c.current[S]=O},[_,c]),(0,de.useEffect)(()=>{!f&&p!==null&&(m(null),y())},[f,p,y]),(0,de.useEffect)(()=>{for(let[S,{ref:O}]of Object.entries(_)){O.visible=!a.has(S);let L=T[S];if(!L)continue;O.material=L;let V=f&&p===S,R=f&&s===S;$v(L,F=>{if(F.color.copy(F.userData.baseColor),F.map=F.userData.baseMap??null,F.emissive.copy(F.userData.baseEmissive),F.emissiveMap=F.userData.baseEmissiveMap??null,F.emissiveIntensity=F.userData.baseEmissiveIntensity,R||V){let U=!!F.userData.baseEmissiveMap;F.emissive.set(Yv.color),F.emissiveIntensity=U?F.userData.baseEmissiveIntensity:Yv.intensity}F.needsUpdate=!0})}x()},[_,T,p,o,s,f,a,x]);let w=S=>{let O=S;for(;O;){let L=O.name||O.uuid;if(_[L])return L;O=O.parent}return null},C=b?{onClick:S=>{let O=w(S.object);O&&(S.stopPropagation(),h(O))},...f?{onPointerOver:S=>{let O=w(S.object);O&&(S.stopPropagation(),P("pointer"),m(O))},onPointerOut:S=>{S.stopPropagation(),y(),m(null)}}:{}}:{};return(0,Y.jsx)("primitive",{object:M,...C})}function z_({scene:e,controlsRef:t,refitOnResize:n,onInitialFitComplete:i}){let r=(0,de.useRef)(!1),a=(0,si.useThree)(c=>c.invalidate),o=(0,si.useThree)(c=>c.size),s=(0,de.useRef)(null);return(0,de.useEffect)(()=>{r.current=!1,a()},[a,e]),(0,si.useFrame)(()=>{if(!r.current){if(!e||!t.current){a();return}r.current=!0,O_(e,t.current),t.current.fitToBox(e,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{}).finally(i)}}),(0,de.useEffect)(()=>{if(!(!n||!r.current||!e||!t.current))return s.current&&clearTimeout(s.current),s.current=setTimeout(()=>{t.current?.fitToBox(e,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{}),a()},150),()=>{s.current&&clearTimeout(s.current)}},[o.width,o.height,n]),null}function U_({exposure:e}){let t=(0,si.useThree)(i=>i.gl),n=(0,si.useThree)(i=>i.invalidate);return(0,de.useEffect)(()=>{t.toneMappingExposure=e,n()},[t,e,n]),null}function V_({enabled:e,controlsRef:t}){let n=(0,si.useThree)(i=>i.invalidate);return(0,si.useFrame)((i,r)=>{!e||!t.current||(t.current.rotate(r*.2,0,!1),n())}),null}function ld(e){return Array.from(e.types).includes("Files")}function Kv({label:e,checked:t,onChange:n}){return(0,Y.jsxs)("div",{className:"env-row",children:[(0,Y.jsx)("span",{className:"env-row__label",children:e}),(0,Y.jsx)("div",{className:"env-row__value",children:(0,Y.jsx)("button",{className:"env-checkbox-btn",onClick:()=>n(!t),children:(0,Y.jsx)("span",{className:`env-checkbox${t?" env-checkbox--checked":""}`,children:t&&(0,Y.jsx)(pn.Check,{size:9,strokeWidth:2,color:"white"})})})})]})}function Xp({label:e,value:t,onChange:n}){return(0,Y.jsxs)("div",{className:"env-row",children:[(0,Y.jsx)("span",{className:"env-row__label",children:e}),(0,Y.jsx)("div",{className:"env-row__value",children:(0,Y.jsxs)("div",{className:"env-color-swatch",style:{background:t},children:[(0,Y.jsx)("span",{className:"env-color-swatch__hex",children:t}),(0,Y.jsx)("input",{type:"color",className:"env-color-swatch__input",value:t,onChange:i=>n(i.target.value)})]})})]})}function qp({label:e,value:t,min:n,max:i,step:r,onChange:a}){return(0,Y.jsxs)("div",{className:"env-row",children:[(0,Y.jsx)("span",{className:"env-row__label",children:e}),(0,Y.jsxs)("div",{className:"env-row__value env-row__value--slider",children:[(0,Y.jsx)("input",{type:"range",className:"env-slider",min:n,max:i,step:r,value:t,onChange:o=>a(Number(o.target.value))}),(0,Y.jsx)("span",{className:"env-slider__value",children:t.toFixed(2)})]})]})}function F_({label:e,value:t,options:n,onChange:i}){return(0,Y.jsxs)("div",{className:"env-row",children:[(0,Y.jsx)("span",{className:"env-row__label",children:e}),(0,Y.jsx)("div",{className:"env-row__value",children:(0,Y.jsx)("select",{className:"env-select",value:t,onChange:r=>i(r.target.value),children:n.map(r=>(0,Y.jsx)("option",{value:r,children:r},r))})})]})}function Zv({title:e,children:t}){let[n,i]=(0,de.useState)(!1);return(0,Y.jsxs)("div",{className:"env-section",children:[(0,Y.jsxs)("button",{className:"env-section__header",onClick:()=>i(r=>!r),children:[(0,Y.jsx)(pn.ChevronDown,{size:12,strokeWidth:2,className:`env-section__chevron${n?" env-section__chevron--collapsed":""}`}),(0,Y.jsx)("span",{children:e})]}),!n&&(0,Y.jsx)("div",{className:"env-section__body",children:t})]})}function j_({isOpen:e,onToggle:t,settings:n,onChange:i}){return(0,Y.jsxs)("div",{className:`left-panel-wrapper ${e?"left-panel-wrapper--open":"left-panel-wrapper--closed"}`,children:[!e&&(0,Y.jsx)("button",{className:"side-panel__open-btn side-panel__open-btn--left",onClick:()=>t(!0),children:(0,Y.jsx)(pn.Settings,{size:20,strokeWidth:1.8})}),(0,Y.jsxs)("div",{className:`side-panel side-panel--left ${e?"side-panel--open-left":"side-panel--closed-left"}`,"aria-hidden":!e,children:[(0,Y.jsx)("div",{className:"side-panel__header",children:(0,Y.jsxs)("div",{className:"side-panel__header-top",children:[(0,Y.jsx)("span",{className:"side-panel__eyebrow",children:"Scene Settings"}),(0,Y.jsx)("button",{className:"side-panel__close-btn",onClick:()=>t(!1),title:"Close",children:(0,Y.jsx)(pn.X,{size:12,strokeWidth:1.6})})]})}),(0,Y.jsxs)("div",{className:"env-controls",children:[(0,Y.jsxs)(Zv,{title:"Background",children:[(0,Y.jsx)(Kv,{label:"Background",checked:n.backgroundEnabled,onChange:r=>i("backgroundEnabled",r)}),(0,Y.jsx)(Xp,{label:"Background Color",value:n.backgroundColor,onChange:r=>i("backgroundColor",r)}),(0,Y.jsx)(F_,{label:"Environment",value:n.envPreset,options:B_,onChange:r=>i("envPreset",r)}),(0,Y.jsx)(Kv,{label:"Auto Rotate",checked:n.autoRotate,onChange:r=>i("autoRotate",r)})]}),(0,Y.jsxs)(Zv,{title:"Lighting",children:[(0,Y.jsx)(qp,{label:"Exposure",value:n.exposure,min:0,max:2,step:.05,onChange:r=>i("exposure",r)}),(0,Y.jsx)(qp,{label:"Ambient Light Intensity",value:n.ambientIntensity,min:0,max:3,step:.05,onChange:r=>i("ambientIntensity",r)}),(0,Y.jsx)(Xp,{label:"Ambient Light Color",value:n.ambientColor,onChange:r=>i("ambientColor",r)}),(0,Y.jsx)(qp,{label:"Direct Light Intensity",value:n.directionalIntensity,min:0,max:5,step:.05,onChange:r=>i("directionalIntensity",r)}),(0,Y.jsx)(Xp,{label:"Direct Light Color",value:n.directionalColor,onChange:r=>i("directionalColor",r)})]})]})]})]})}function H_({meshKeys:e,hiddenKeys:t,selectedKey:n,isOpen:i,onToggle:r,onFocus:a,onHover:o,onToggleVisibility:s}){let[c,l]=(0,de.useState)(""),[u,d]=(0,de.useState)(null),h=Object.values(e).filter(f=>f.label.toLowerCase().includes(c.toLowerCase()));return(0,Y.jsxs)("div",{className:`right-panel-wrapper ${i?"right-panel-wrapper--open":"right-panel-wrapper--closed"}`,children:[!i&&(0,Y.jsx)("button",{className:"side-panel__open-btn",onClick:()=>r(!0),children:(0,Y.jsx)(pn.Boxes,{size:20,strokeWidth:1.8})}),(0,Y.jsxs)("div",{className:`side-panel ${i?"side-panel--open":"side-panel--closed"}`,"aria-hidden":!i,children:[(0,Y.jsxs)("div",{className:"side-panel__header",children:[(0,Y.jsxs)("div",{className:"side-panel__header-top",children:[(0,Y.jsx)("span",{className:"side-panel__eyebrow",children:"SCENE OBJECTS"}),(0,Y.jsx)("button",{className:"side-panel__close-btn",onClick:()=>r(!1),title:"Close",children:(0,Y.jsx)(pn.X,{size:12,strokeWidth:1.6})})]}),(0,Y.jsxs)("p",{className:"side-panel__title",children:[h.length," objects"]})]}),(0,Y.jsx)("div",{className:"side-panel__search-wrap",children:(0,Y.jsx)("input",{className:"side-panel__search",type:"text",placeholder:"Search objects",value:c,onChange:f=>l(f.target.value)})}),(0,Y.jsx)("div",{className:"side-panel__list",children:h.map(({key:f,label:g})=>{let x=!t.has(f),P=n===f,y=u===f;return(0,Y.jsxs)("div",{onClick:()=>a(f),onMouseEnter:()=>{d(f),o(f)},onMouseLeave:()=>{d(null),o(null)},className:["side-panel__row",y?"side-panel__row--hovered":"",P?"side-panel__row--selected":""].filter(Boolean).join(" "),children:[(0,Y.jsx)("span",{className:`side-panel__label${y||P?" side-panel__label--hovered":""}`,children:g}),(0,Y.jsx)("button",{className:"side-panel__vis-btn",title:x?"Hide":"Show",onClick:p=>{p.stopPropagation(),s(f)},children:(0,Y.jsx)("span",{className:`side-panel__checkbox${x?" side-panel__checkbox--checked":""}`,children:x&&(0,Y.jsx)(pn.Check,{size:9,strokeWidth:5,color:"white"})})})]},f)})})]})]})}function $p({modelUrl:e,modelFormat:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r=!0,backgroundColor:a="#1a1a1a",showSceneObjectsPanel:o=!0,showSceneSettingsPanel:s=!0,enableModelUpload:c=!1,zoomOnSelected:l=!1,highlightOnHover:u=!1,showLoadingOverlay:d=!0,refitOnResize:h=!0,backgroundEnabled:f=!1,autoRotate:g=!1,envPreset:x="city",exposure:P=1,ambientIntensity:y=.6,ambientColor:p="#ffffff",directionalIntensity:m=1.2,directionalColor:M="#ffffff",onModelLoaded:_,onLoadError:T}){let E=(0,de.useRef)(null),b=(0,de.useRef)({}),w=(0,de.useRef)(null),C=(0,de.useRef)(null),S=(0,de.useRef)(0),[O,L]=(0,de.useState)(null),[V,R]=(0,de.useState)(null),[F,U]=(0,de.useState)(!1),[k,D]=(0,de.useState)({}),[q,$]=(0,de.useState)(new Set),[pe,Ae]=(0,de.useState)(null),[ye,Ee]=(0,de.useState)(null),[Ue,Re]=(0,de.useState)(null),[Wt,Tt]=(0,de.useState)(null),[Ze,Le]=(0,de.useState)(!1),[re,It]=(0,de.useState)(!1),[et,Pt]=(0,de.useState)(!1),[xt,je]=(0,de.useState)(null),[yt,Qt]=(0,de.useState)(!1),[we,rn]=(0,de.useState)(()=>typeof window>"u"?!0:window.innerWidth>900),[Zt,Oe]=(0,de.useState)(()=>typeof window>"u"?!0:window.innerWidth>900),[J,Se]=(0,de.useState)({backgroundEnabled:f,backgroundColor:a,autoRotate:g,envPreset:x,exposure:P,ambientIntensity:y,ambientColor:p,directionalIntensity:m,directionalColor:M}),ce=c?Ue:e,ke=(0,de.useCallback)(()=>{L(null),R(null),U(!1),D({}),$(new Set),Ae(null),Ee(null),Le(!1),Pt(!1),je(null)},[]),Ve=(0,de.useCallback)(()=>{C.current?.cleanup(),C.current=null},[]),Fe=(0,de.useCallback)(()=>{Ve(),Re(null),Tt(null),ke(),Se({backgroundEnabled:f,backgroundColor:a,autoRotate:g,envPreset:x,exposure:P,ambientIntensity:y,ambientColor:p,directionalIntensity:m,directionalColor:M})},[p,y,g,a,f,M,m,x,P,ke,Ve]),Ye=(0,de.useCallback)(async A=>{It(!0);try{let G=await Ul(A);Ve(),C.current=G,Re(G.url),Tt(G.name),ke()}catch(G){Le(!0),T?.(G)}finally{It(!1)}},[T,ke,Ve]),xe=(0,de.useCallback)(A=>{let G=A?.[0];G&&Ye(G)},[Ye]);(0,de.useEffect)(()=>()=>{Ve()},[Ve]);let wt=(0,de.useCallback)((A,G)=>{Se(ee=>({...ee,[A]:G}))},[]);(0,de.useEffect)(()=>{Se(A=>({...A,backgroundColor:a}))},[a]),(0,de.useEffect)(()=>{ke()},[ce,ke]);let mt=(0,de.useCallback)(A=>{D(A),$(new Set),Ae(null)},[]),an=(0,de.useCallback)(A=>{L(A),Le(!1);let G=es(A);R(G>ca?G:null),U(!1),je(null),_?.(A)},[_]),en=(0,de.useCallback)(A=>{Le(!0),je(null),T?.(A)},[T]),tt=(0,de.useCallback)(A=>{A.lengthComputable&&A.total>0&&je(A.loaded/A.total*100)},[]),Qe=(0,de.useCallback)(A=>{if(Ae(A),!l)return;let G=b.current[A];!G||!E.current||E.current.fitToBox(G,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[l]),Dn=(0,de.useCallback)(A=>{$(G=>{let ee=new Set(G);return ee.has(A)?ee.delete(A):ee.add(A),ee})},[]),zt=(0,de.useCallback)(A=>{!c||!ld(A.dataTransfer)||(A.preventDefault(),A.stopPropagation(),S.current+=1,Qt(!0))},[c]),Un=(0,de.useCallback)(A=>{!c||!ld(A.dataTransfer)||(A.preventDefault(),A.stopPropagation(),A.dataTransfer.dropEffect="copy",Qt(!0))},[c]),Vn=(0,de.useCallback)(A=>{!c||!ld(A.dataTransfer)||(A.preventDefault(),A.stopPropagation(),S.current=Math.max(0,S.current-1),S.current===0&&Qt(!1))},[c]),on=(0,de.useCallback)(A=>{!c||!ld(A.dataTransfer)||(A.preventDefault(),A.stopPropagation(),S.current=0,Qt(!1),xe(A.dataTransfer.files))},[c,xe]),j=d&&(re||!!(ce&&!Ze&&(!O||!et)));return(0,Y.jsxs)("div",{className:"smv-root",style:{background:J.backgroundColor},onDragEnter:zt,onDragOver:Un,onDragLeave:Vn,onDrop:on,children:[s&&ce&&(0,Y.jsx)(j_,{isOpen:Zt,onToggle:Oe,settings:J,onChange:wt}),(0,Y.jsxs)("div",{className:"smv-canvasArea",children:[V!==null&&!F&&(0,Y.jsxs)("div",{className:"smv-largeModelBanner",children:[(0,Y.jsx)(pn.AlertTriangle,{size:14,className:"smv-largeModelBanner__icon"}),(0,Y.jsxs)("span",{children:["Very large model detected (",Math.round(V/1e6),"M triangles) \u2014 it may render and move slowly on this device, and click/hover selection on the model is disabled. Use the scene objects panel to select parts."]}),(0,Y.jsx)("button",{type:"button",className:"smv-largeModelBanner__dismiss",onClick:()=>U(!0),"aria-label":"Dismiss",children:(0,Y.jsx)(pn.X,{size:12})})]}),c?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)("input",{ref:w,type:"file",accept:zl,className:"smv-upload-input",onChange:A=>{xe(A.target.files),A.currentTarget.value=""}}),ce?(0,Y.jsx)("div",{className:"smv-upload-toolbar",children:(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)("span",{className:"smv-upload-toolbar__name",children:Wt??"Uploaded model"}),(0,Y.jsxs)("button",{type:"button",className:"smv-upload-toolbar__button smv-upload-toolbar__button--ghost",onClick:Fe,children:[(0,Y.jsx)(pn.Trash2,{size:14}),"Clear"]})]})}):null]}):null,ce?(0,Y.jsx)(Jv.Canvas,{dpr:[1,2],frameloop:"demand",resize:{debounce:0,scroll:!1},raycaster:{firstHitOnly:!0},style:{background:J.backgroundColor},camera:{position:[0,0,5],fov:45,near:.1,far:1e3},children:(0,Y.jsxs)(de.Suspense,{fallback:null,children:[(0,Y.jsx)("ambientLight",{intensity:J.ambientIntensity,color:J.ambientColor}),(0,Y.jsx)("directionalLight",{position:[-4,5,7],intensity:J.directionalIntensity,color:J.directionalColor,castShadow:!0}),(0,Y.jsx)("directionalLight",{position:[-5,5,5],intensity:.5}),(0,Y.jsx)(de.Suspense,{fallback:null,children:(0,Y.jsx)(cd.Environment,{preset:J.envPreset,background:J.backgroundEnabled})}),(0,Y.jsx)(U_,{exposure:J.exposure}),(0,Y.jsx)(V_,{enabled:J.autoRotate,controlsRef:E}),(0,Y.jsx)(Yp,{onLoadError:en,children:(0,Y.jsx)(de.Suspense,{fallback:null,children:(0,Y.jsx)(I_,{url:ce,format:Ue?void 0:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r,hiddenKeys:q,selectedKey:pe,panelHoveredKey:ye,nodeRefsOut:b,onMeshesReady:mt,onModelLoaded:an,onLoadProgress:tt,onMeshClick:Qe,highlightOnHover:u})})},ce),(0,Y.jsx)(z_,{scene:O,controlsRef:E,refitOnResize:h,onInitialFitComplete:()=>Pt(!0)}),(0,Y.jsx)(cd.CameraControls,{ref:E,makeDefault:!0,smoothTime:.3})]})}):(0,Y.jsx)("div",{className:"smv-upload-empty-state",style:{background:J.backgroundColor},children:(0,Y.jsxs)("div",{className:"smv-upload-empty-state__card",children:[(0,Y.jsx)("div",{className:"smv-upload-empty-state__icon",children:(0,Y.jsx)(pn.Upload,{size:24})}),(0,Y.jsxs)("p",{className:"smv-upload-empty-state__body",children:["Drag and drop ",(0,Y.jsx)("code",{children:".glb"}),", ",(0,Y.jsx)("code",{children:".gltf"}),","," ",(0,Y.jsx)("code",{children:".obj"}),", ",(0,Y.jsx)("code",{children:".fbx"}),", ",(0,Y.jsx)("code",{children:".usdz"}),", or"," ",(0,Y.jsx)("code",{children:".zip"})," here"]}),(0,Y.jsxs)("button",{type:"button",className:"smv-upload-empty-state__button",onClick:()=>w.current?.click(),children:[(0,Y.jsx)(pn.Upload,{size:15}),"Choose model"]})]})}),(0,Y.jsx)(bo,{visible:j,message:"Loading model...",progress:re?void 0:xt??void 0}),c&&yt?(0,Y.jsx)("div",{className:"smv-upload-drop-overlay",children:(0,Y.jsxs)("div",{className:"smv-upload-drop-overlay__card",children:[(0,Y.jsx)(pn.Upload,{size:20}),(0,Y.jsx)("span",{children:"Release to load your model"})]})}):null]}),o&&ce&&(0,Y.jsx)(H_,{meshKeys:k,hiddenKeys:q,selectedKey:pe,isOpen:we,onToggle:rn,onFocus:Qe,onHover:Ee,onToggleVisibility:Dn})]})}var Qs=require("react");function e0(e=null){let[t,n]=(0,Qs.useState)(e),i=(0,Qs.useCallback)(a=>{n(a)},[n]),r=(0,Qs.useCallback)(()=>{n(null)},[]);return{selectedObjectBinding:t,setSelectedObjectBinding:n,handleObjectSelect:i,clearSelection:r}}var t0=require("react");function n0(e,t){return(0,t0.useMemo)(()=>{if(!t)return null;let n=e[t];return n||(Object.values(e).find(i=>i.id===t||i.modelObjectId===t)??null)},[e,t])}var r0=require("react");function i0(e){return(0,r0.useMemo)(()=>Object.values(e).map(t=>t.modelObjectId),[e])}var Kt=require("react");function Kp(e){if(typeof e!="object"||e===null)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function el(e,t){if(!Kp(t))return t;let n=Kp(e)?{...e}:{};for(let i of Object.keys(t)){let r=t[i];n[i]=Kp(r)?el(n[i],r):r}return n}function G_(e){return typeof e=="object"&&!Array.isArray(e)}function W_(e,t){return"group"in t?e.group===t.group:"tag"in t?e.tags?.includes(t.tag)??!1:e.type===t.type}function Wr(e,t){if(G_(t))return Object.entries(e).filter(([,r])=>W_(r,t)).map(([r])=>r);let i=(typeof t=="string"?[t]:t).map(r=>En(e,r)).filter(r=>r!==null);return[...new Set(i)]}function dd(e,t){return Wr(e,t).map(n=>e[n]).filter(n=>n!==void 0)}function X_(e){return Array.isArray(e)&&e.length>0&&typeof e[0]!="string"}function Ra(e,t,n){let i=X_(t)?t:[{ids:t,patch:n??{}}],r=e;for(let a of i)for(let o of Wr(r,a.ids)){let s=r[o];if(!s)continue;let c=el(s,a.patch);r===e&&(r={...e}),r[o]=c}return r}function ud(e){return{style:{material:e}}}var a0={baseColor:"texture",metalness:"metalnessMap",roughness:"roughnessMap",emissive:"emissiveMap",alpha:"alphaMap",normal:"normalMap",bump:"bumpMap",ao:"aoMap",displacement:"displacementMap",clearcoat:"clearcoatMap",clearcoatRoughness:"clearcoatRoughnessMap",clearcoatNormal:"clearcoatNormalMap",anisotropy:"anisotropyMap",transmission:"transmissionMap",thickness:"thicknessMap",sheenColor:"sheenColorMap",sheenRoughness:"sheenRoughnessMap",specularIntensity:"specularIntensityMap",specularColor:"specularColorMap"};function o0(e){if(e)return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,n&&typeof n=="object"?{...n}:n]))}function q_(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t.visible===!1).map(([t])=>[t,!0]))}function s0(e){let[t,n]=(0,Kt.useState)(e),i=(0,Kt.useCallback)((E,b)=>{n(w=>b===void 0?Ra(w,E):Ra(w,E,b))},[]),r=(0,Kt.useCallback)((E,b)=>i(E,ud(b)),[i]),a=(0,Kt.useCallback)((E,b)=>r(E,{baseColor:b}),[r]),o=(0,Kt.useCallback)((E,b,w="baseColor")=>{let C=a0[w],S=typeof b=="string"?{path:b}:b;i(E,{style:{material:{[C]:S}}})},[i]),s=(0,Kt.useCallback)((E,b="baseColor")=>{let w=a0[b];i(E,{style:{material:{[w]:void 0}}})},[i]),c=(0,Kt.useCallback)((E,b)=>{n(w=>{let C=En(w,E);if(!C)return w;let S=o0(w[C]?.style?.material),O=Wr(w,b);if(O.length===0)return w;let L=w;for(let V of O){let R=w[V];R&&(L===w&&(L={...w}),L[V]={...R,style:{...R.style,material:o0(S)}})}return L})},[]),l=(0,Kt.useCallback)(E=>i(E,{style:{material:void 0}}),[i]),u=(0,Kt.useCallback)((E,b)=>i(E,{transform:b}),[i]),d=(0,Kt.useCallback)(E=>i(E,{transform:void 0}),[i]),h=(0,Kt.useCallback)((E,b)=>i(E,{metadata:b}),[i]),f=(0,Kt.useCallback)(E=>dd(t,E),[t]),g=(0,Kt.useCallback)(E=>Wr(t,E).map(b=>t[b]?.id??b),[t]),x=(0,Kt.useCallback)(E=>{let b=En(t,E);return b?t[b]?.style?.material??null:null},[t]),P=(0,Kt.useCallback)(E=>i(E,{visible:!1}),[i]),y=(0,Kt.useCallback)(E=>i(E,{visible:!0}),[i]),p=(0,Kt.useCallback)(E=>{n(b=>{let w=Wr(b,E).reduce((C,S)=>{let O=b[S];return O&&C.push({ids:S,patch:{visible:O.visible===!1}}),C},[]);return Ra(b,w)})},[n]),m=(0,Kt.useCallback)(()=>{n(E=>Ra(E,Object.keys(E),{visible:!0}))},[n]),M=(0,Kt.useMemo)(()=>q_(t),[t]),_=(0,Kt.useMemo)(()=>Object.keys(M).map(E=>t[E]?.id??E),[M,t]),T=(0,Kt.useCallback)(E=>{let b=En(t,E);return b?t[b]?.visible===!1:!1},[t]);return{objectBindings:t,setObjectBindings:n,updateObjectBindings:i,setMaterial:r,setBaseColor:a,setTexture:o,clearTexture:s,copyMaterial:c,resetMaterial:l,getMaterial:x,setTransform:u,resetTransform:d,updateMetadata:h,selectObjectBindings:f,selectObjectBindingIds:g,hiddenObjects:M,hiddenObjectIds:_,hideObject:P,showObject:y,toggleObjectVisibility:p,isObjectHidden:T,clearHiddenObjects:m}}function l0(e){return e}var Tn=require("react");function pd(e,t){return el(e,t)}var Y_={type:"point",color:"#ffffff",intensity:1,position:[0,0,0],distance:0,decay:2,attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0};function c0(e){let t=(0,Tn.useRef)(null),[n,i]=(0,Tn.useState)(()=>{let y=typeof e=="function"?e():e;return t.current=y,y}),r=(0,Tn.useCallback)(y=>{i(p=>{let m=typeof y=="function"?y(p):y;return pd(p,m)})},[]),a=(0,Tn.useCallback)(()=>{let y=t.current;y&&i(y)},[]),o=(0,Tn.useCallback)((y,p)=>{r(m=>({lighting:{lights:m.lighting.lights.map(M=>M.id===y?{...M,...p}:M)}}))},[r]),s=(0,Tn.useCallback)(y=>{r(p=>p.lighting.lights.some(m=>m.id===y.id)?{}:{lighting:{lights:[...p.lighting.lights,{...Y_,...y}]}})},[r]),c=(0,Tn.useCallback)(y=>{r(p=>({lighting:{lights:p.lighting.lights.filter(m=>m.id!==y)}}))},[r]),l=(0,Tn.useCallback)((y,p)=>o(y,{intensity:p}),[o]),u=(0,Tn.useCallback)((y,p)=>o(y,{color:p}),[o]),d=(0,Tn.useCallback)(y=>o(y,{visible:!0}),[o]),h=(0,Tn.useCallback)(y=>o(y,{visible:!1}),[o]),f=(0,Tn.useCallback)(y=>{r(p=>({lighting:{lights:p.lighting.lights.map(m=>m.id===y?{...m,visible:!m.visible}:m)}}))},[r]),g=(0,Tn.useCallback)((y,p)=>o(y,{attachment:p,attachedToCamera:!1}),[o]),x=(0,Tn.useCallback)(y=>o(y,{attachment:void 0}),[o]),P=(0,Tn.useMemo)(()=>({items:n.lighting.lights,get:y=>n.lighting.lights.find(p=>p.id===y),add:s,update:o,remove:c,setIntensity:l,setColor:u,show:d,hide:h,toggle:f,attach:g,detach:x}),[n.lighting.lights,s,o,c,l,u,d,h,f,g,x]);return{sceneConfig:n,setSceneConfig:i,updateSceneConfig:r,resetSceneConfig:a,lights:P}}var hd=require("react");function d0(){let[e,t]=(0,hd.useState)(null),n=(0,hd.useCallback)(i=>{t(i)},[t]);return{hoveredObjectBinding:e,handleHoveredObject:n}}var li=require("react"),tl=require("three");function md(e){return[e.x,e.y,e.z]}function u0(){let[e,t]=(0,li.useState)(!0),[n,i]=(0,li.useState)(!1),[r,a]=(0,li.useState)(null),[o,s]=(0,li.useState)(null),[c,l]=(0,li.useState)(0),u=(0,li.useCallback)(f=>{let g=new tl.Box3().setFromObject(f),x=g.min.clone(),P=g.max.clone(),y=new tl.Vector3,p=new tl.Vector3,m=0;f.traverse(M=>{"isMesh"in M&&M.isMesh&&(m+=1)}),g.getCenter(y),g.getSize(p),s({min:md(x),max:md(P),center:md(y),size:md(p)}),l(m),a(null),t(!1),i(!0)},[]),d=(0,li.useCallback)(f=>{a(f),s(null),l(0),t(!1),i(!1)},[]),h=(0,li.useCallback)(()=>{t(!0),i(!1),a(null),s(null),l(0)},[]);return{isLoading:e,isReady:n,error:r,bounds:o,objectCount:c,handleModelLoaded:u,handleLoadError:d,resetModelState:h}}var fd=require("react");function p0({bindings:e,scene:t,camera:n,animations:i,onAction:r}){let{objectBindings:a,updateObjectBindings:o,showObject:s,hideObject:c,toggleObjectVisibility:l}=e,u=t?.updateSceneConfig,d=n?.focusObject,h=n?.fitScene,f=n?.resetView,g=n?.setCameraTarget,x=n?.setCameraState,P=i?.play,y=i?.pause,p=i?.stop,m=i?.setSpeed,M=i?.seek,_=(0,fd.useCallback)(b=>{let w=En(a,b);return w?a[w]?.actions??[]:[]},[a]),T=(0,fd.useCallback)(async b=>{for(let w of b.action.effects??[]){if("objectBindings"in w){o(w.target,w.objectBindings);continue}if("sceneConfig"in w){u?.(w.sceneConfig);continue}if("visibility"in w){w.visibility==="show"?s(w.target):w.visibility==="hide"?c(w.target):l(w.target);continue}if("camera"in w){let S=w.camera;S.type==="focus-object"?await d?.(S.objectId??b.objectId):S.type==="fit-scene"?await h?.():S.type==="reset"?await f?.():S.type==="set-target"?await g?.(S.target,S.transition??!0):await x?.(S.state,S.transition??!0);continue}let C=w.animation;C.type==="play"?P?.(C.clip):C.type==="pause"?y?.():C.type==="stop"?p?.():C.type==="set-speed"?m?.(C.speed):M?.(C.time)}await r?.(b)},[h,d,c,r,y,P,f,M,m,x,g,s,p,l,o,u]),E=(0,fd.useCallback)(async(b,w)=>{let C=En(a,b);if(!C)return null;let S=a[C],O=S?.actions?.find(V=>V.id===w);if(!S||!O)return null;let L={objectId:C,action:O,binding:S};return await T(L),L},[T,a]);return{getActionsForObject:_,handleAction:T,runAction:E}}var Ji=require("react");function $_(e){return typeof e=="function"?e:e?.handleViewerReady??null}function h0(...e){let t=(0,Ji.useRef)(null),n=(0,Ji.useRef)(e);n.current=e;let i=(0,Ji.useCallback)(s=>{t.current=s;let c=new Set;for(let l of n.current){let u=$_(l);u&&!c.has(u)&&(c.add(u),u(s))}},[]),r=(0,Ji.useCallback)(()=>t.current,[]),a=(0,Ji.useCallback)(s=>{let c=t.current;return c?c.captureImage(s):Promise.reject(new Error("ModelViewer is not ready yet."))},[]),o=(0,Ji.useCallback)(()=>{let s=t.current;return s?(s.invalidate(),!0):!1},[]);return{handleViewerReady:i,getViewer:r,captureImage:a,invalidate:o}}var Ke=require("react"),Ao=require("three");var Qp=["emissiveIntensity","opacity","metalness","roughness","transmission","clearcoat","clearcoatRoughness","ior","thickness"],gd=1;function bd(e){return typeof e=="string"?[e]:e}function vd(e,t=0,n=1){return Math.min(n,Math.max(t,e))}function Zp(e,t){return e+Math.random()*(t-e)}function m0([e,t],n){return e+(t-e)*n}function Jp([e,t],n){return[e[0]+(t[0]-e[0])*n,e[1]+(t[1]-e[1])*n,e[2]+(t[2]-e[2])*n]}function f0(e,t){let n=vd(e);switch(t){case"ease-in":return n*n;case"ease-out":return 1-(1-n)*(1-n);case"ease-in-out":return n<.5?2*n*n:1-Math.pow(-2*n+2,2)/2;default:return n}}function K_(e){let t=e.material;return t?(Array.isArray(t)?t:[t]).filter(n=>n instanceof Ao.Material):[]}function Z_(e){let t={opacity:e.opacity,transparent:e.transparent};e.color&&(t.baseColor=`#${e.color.getHexString()}`),e.emissive&&(t.emissive=`#${e.emissive.getHexString()}`);for(let n of Qp){let i=e[n];typeof i=="number"&&(t[n]=i)}return t}function g0(e,t){t.baseColor!==void 0&&e.color&&e.color.set(t.baseColor),t.emissive!==void 0&&e.emissive&&e.emissive.set(t.emissive);for(let n of Qp){let i=t[n];i!==void 0&&typeof e[n]=="number"&&(e[n]=i)}t.transparent!==void 0&&(e.transparent=t.transparent),e.needsUpdate=!0}function J_(e){return{position:[e.position.x,e.position.y,e.position.z],rotation:[e.rotation.x,e.rotation.y,e.rotation.z],scale:[e.scale.x,e.scale.y,e.scale.z],visible:e.visible}}function Q_(e,t){if(t.position&&e.position.set(...t.position),t.rotation&&e.rotation.set(...t.rotation),t.scale!==void 0){let n=typeof t.scale=="number"?[t.scale,t.scale,t.scale]:t.scale;e.scale.set(...n)}t.visible!==void 0&&(e.visible=t.visible),e.updateMatrix(),e.updateMatrixWorld(!0)}function b0(e={}){let t=(0,Ke.useRef)(e);t.current=e;let n=(0,Ke.useRef)(null),i=(0,Ke.useRef)(null),r=(0,Ke.useRef)(null),a=(0,Ke.useRef)(new Map),o=(0,Ke.useRef)(new Map),s=(0,Ke.useRef)(new Map),c=(0,Ke.useRef)(new Map),l=(0,Ke.useCallback)(k=>{let D=n.current;if(!D)return null;let q=En(D.objectBindings,k);return D.nodeRefs[k]??(q?D.nodeRefs[q]:null)??(D.scene?Ur(D.scene,k):null)??null},[]),u=(0,Ke.useCallback)(k=>{let D=n.current;return D?typeof k=="object"&&!Array.isArray(k)?Wr(D.objectBindings,k):bd(k).map(q=>En(D.objectBindings,q)??q):typeof k=="string"?[k]:Array.isArray(k)?k:[]},[]),d=(0,Ke.useCallback)(()=>{n.current?.invalidate()},[]),h=(0,Ke.useCallback)((k,D)=>{let q=!1;for(let $ of u(k)){let pe=l($);if(pe)for(let Ae of K_(pe))s.current.has(Ae)||s.current.set(Ae,Z_(Ae)),g0(Ae,D),q=!0}return q},[l,u]),f=(0,Ke.useCallback)((k,D)=>{let q=h(k,D);return q&&d(),q},[d,h]),g=(0,Ke.useCallback)((k,D)=>{let q=!1;for(let $ of u(k)){let pe=l($);pe&&(c.current.has(pe)||c.current.set(pe,J_(pe)),Q_(pe,D),q=!0)}return q},[l,u]),x=(0,Ke.useCallback)((k,D)=>{let q=g(k,D);return q&&d(),q},[d,g]),P=(0,Ke.useCallback)(k=>{let D=l(k);if(!D)return null;D.updateWorldMatrix(!0,!1);let q=D.getWorldPosition(new Ao.Vector3);return[q.x,q.y,q.z]},[l]),y=(0,Ke.useCallback)(k=>{let D=o.current.get(k);return D?(D.light.removeFromParent(),D.light.dispose(),o.current.delete(k),d(),!0):!1},[d]),p=(0,Ke.useCallback)(k=>{let D=l(k.target);if(!D)return!1;let q=o.current.get(k.id),$=q?.light??new Ao.PointLight;return q&&q.target!==k.target&&$.removeFromParent(),$.name=`react-immersive-runtime-light:${k.id}`,$.color.set(k.color??"#ffffff"),$.intensity=k.intensity??1,$.distance=k.distance??0,$.decay=k.decay??2,$.castShadow=k.castShadow??!1,$.position.set(...k.offset??[0,0,0]),$.parent!==D&&D.add($),o.current.set(k.id,{light:$,target:k.target}),d(),!0},[d,l]),m=(0,Ke.useCallback)((k,D)=>{let q=o.current.get(k);if(!q)return!1;if(D.target&&D.target!==q.target){let $=l(D.target);if(!$)return!1;q.light.removeFromParent(),$.add(q.light),q.target=D.target}return D.color!==void 0&&q.light.color.set(D.color),D.intensity!==void 0&&(q.light.intensity=D.intensity),D.distance!==void 0&&(q.light.distance=D.distance),D.decay!==void 0&&(q.light.decay=D.decay),D.offset!==void 0&&q.light.position.set(...D.offset),D.castShadow!==void 0&&(q.light.castShadow=D.castShadow),d(),!0},[d,l]),M=(0,Ke.useCallback)((k,D)=>{let q=$=>D[$%D.length]??0;for(let $ of k.materials??[])u($.targets).forEach((pe,Ae)=>{let ye=q(Ae),Ee={};for(let Ue of Qp){let Re=$.values[Ue];Re&&(Ee[Ue]=m0(Re,ye))}h(pe,Ee)});for(let $ of k.transforms??[])u($.targets).forEach((pe,Ae)=>{let ye=q(Ae),Ee={};$.values.position&&(Ee.position=Jp($.values.position,ye)),$.values.rotation&&(Ee.rotation=Jp($.values.rotation,ye)),$.values.scale&&(Ee.scale=Jp($.values.scale,ye)),g(pe,Ee)});for(let $ of k.lights??[])bd($.lights).forEach((pe,Ae)=>{let ye=o.current.get(pe);ye&&(ye.light.intensity=m0($.intensity,q(Ae)))})},[u,h,g]),_=(0,Ke.useRef)(()=>{}),T=(0,Ke.useRef)(()=>{});T.current=k=>{r.current=null;let D=!1;for(let[q,$]of a.current){$.startedAt===null&&($.startedAt=k);let pe=$.lastFrameAt??k;$.lastFrameAt=k;let Ae=$.override&&$.override.until>k?$.override.level:null;$.override&&Ae===null&&($.override=null);let ye=$.update(k,k-$.startedAt,Math.min(100,k-pe),Ae);D=!0,ye||(a.current.delete(q),$.onComplete?.())}D&&d(),a.current.size>0&&_.current()},_.current=()=>{r.current!==null||typeof requestAnimationFrame>"u"||(r.current=requestAnimationFrame(k=>T.current(k)))};let E=(0,Ke.useCallback)(k=>(a.current.set(k.id,k),_.current(),k.id),[]),b=(0,Ke.useCallback)((k,D={})=>{let q=D.id??`transition-${gd++}`,$=Math.max(1,D.duration??400),pe=D.easing??"ease-in-out";return E({id:q,startedAt:null,lastFrameAt:null,override:null,onComplete:D.onComplete,update:(Ae,ye,Ee,Ue)=>{let Re=Ue??f0(ye/$,pe);return M(k,[Re]),ye<$}})},[M,E]),w=(0,Ke.useCallback)((k,D={})=>{let q=D.id??`pulse-${gd++}`,$=Math.max(1,D.duration??1e3),pe=D.minLevel??0,Ae=D.maxLevel??1,ye=D.repeat??1/0,Ee=D.synchronized??!0,Ue=Math.max(1,...[...k.materials??[],...k.transforms??[]].map(Re=>u(Re.targets).length),...(k.lights??[]).map(Re=>bd(Re.lights).length));return E({id:q,startedAt:null,lastFrameAt:null,override:null,onComplete:D.onComplete,update:(Re,Wt,Tt,Ze)=>{let Le=Wt/$,re=Array.from({length:Ee?1:Ue},(It,et)=>{if(Ze!==null)return Ze;let Pt=Le+(Ee?0:et/Ue),xt=.5-Math.cos(Pt%1*Math.PI*2)/2;return pe+(Ae-pe)*xt});return M(k,re),ye===1/0||Le<ye}})},[M,E,u]),C=(0,Ke.useCallback)((k,D={})=>{let q=D.id??`timeline-${gd++}`,$=D.repeat??1,pe=k.map(ye=>({...ye,duration:Math.max(1,ye.duration),hold:Math.max(0,ye.hold??0)})),Ae=Math.max(1,pe.reduce((ye,Ee)=>ye+Ee.duration+Ee.hold,0));return E({id:q,startedAt:null,lastFrameAt:null,override:null,onComplete:D.onComplete,update:(ye,Ee,Ue,Re)=>{if(pe.length===0||$<=0)return!1;let Wt=Ee/Ae;if($!==1/0&&Wt>=$){for(let Le of pe)M(Le.channels,[1]);return!1}let Tt=Ee%Ae,Ze=0;for(let Le of pe){let re=Ze+Le.duration,It=re+Le.hold;if(Tt>=re){M(Le.channels,[Re??1]),Ze=It;continue}if(Tt>=Ze){let et=Re??f0((Tt-Ze)/Le.duration,Le.easing??"ease-in-out");M(Le.channels,[et]);break}}return!0}})},[M,E]),S=(0,Ke.useCallback)((k,D={})=>{let q=D.id??`flicker-${gd++}`,$=D.synchronized??!0,pe=D.minLevel??.15,Ae=D.maxLevel??1,ye=D.interval??[45,160],Ee=typeof ye=="number"?[ye,ye]:ye,Ue=[Math.max(1,Math.min(...Ee)),Math.max(1,Math.max(...Ee))],Re=vd(D.response??.7,.01,1),Wt=vd(D.blackoutChance??.08),Tt=vd(D.flashChance??.12),Ze=D.flashLevel??1.15,Le=Math.max(1,...[...k.materials??[],...k.transforms??[]].map(xt=>u(xt.targets).length),...(k.lights??[]).map(xt=>bd(xt.lights).length)),re=$?1:Le,It=Array.from({length:re},()=>pe),et=Array.from({length:re},()=>pe),Pt=Array.from({length:re},()=>0);return E({id:q,startedAt:null,lastFrameAt:null,override:null,onComplete:D.onComplete,update:(xt,je,yt,Qt)=>{for(let we=0;we<re;we+=1){if(Qt!==null)et[we]=Qt;else if(xt>=Pt[we]){let Zt=Math.random();et[we]=Zt<Wt?Zp(0,Math.min(.04,pe)):Zt<Wt+Tt?Ze:Zp(pe,Ae),Pt[we]=xt+Zp(...Ue)}let rn=1-Math.pow(1-Re,Math.max(1,yt)/16.67);It[we]+=(et[we]-It[we])*rn}return M(k,It),D.duration===void 0||je<D.duration}})},[M,E,u]),O=(0,Ke.useCallback)((k,D,q)=>{let $=a.current.get(k);if(!$)return!1;let pe=typeof performance>"u"?Date.now():performance.now();return $.override={level:D,until:pe+Math.max(0,q)},_.current(),!0},[]),L=(0,Ke.useCallback)(k=>a.current.delete(k),[]),V=(0,Ke.useCallback)(()=>{a.current.clear(),r.current!==null&&typeof cancelAnimationFrame<"u"&&(cancelAnimationFrame(r.current),r.current=null)},[]),R=(0,Ke.useCallback)(()=>{for(let[k,D]of s.current)g0(k,D);s.current.clear();for(let[k,D]of c.current)k.position.set(...D.position),k.rotation.set(...D.rotation),k.scale.set(...D.scale),k.visible=D.visible,k.updateMatrix(),k.updateMatrixWorld(!0);c.current.clear();for(let k of o.current.values())k.light.removeFromParent(),k.light.dispose();o.current.clear(),d()},[d]),F=(0,Ke.useCallback)(()=>{V(),R()},[R,V]),U=(0,Ke.useCallback)(k=>{i.current&&i.current!==k.scene&&R(),n.current=k,i.current=k.scene,t.current.onViewerReady?.(k)},[R]);return(0,Ke.useEffect)(()=>()=>{F(),n.current=null,i.current=null},[F]),{handleViewerReady:U,setMaterial:f,setTransform:x,getWorldPosition:P,addPointLight:p,updatePointLight:m,removePointLight:y,transition:b,timeline:C,pulse:w,flicker:S,overrideEffect:O,stopEffect:L,stopAllEffects:V,resetRuntime:F}}var nn=require("react");function y0(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function nl(e){return typeof e=="number"&&Number.isFinite(e)}function v0(e){return Array.isArray(e)&&e.length===3&&e.every(nl)}function eS(e){return!y0(e)||!v0(e.position)||!v0(e.target)||e.fov!==null&&!nl(e.fov)||!nl(e.zoom)||e.zoom<=0||e.azimuthAngle!==void 0&&!nl(e.azimuthAngle)||e.polarAngle!==void 0&&!nl(e.polarAngle)?null:{position:e.position,target:e.target,fov:e.fov,zoom:e.zoom,azimuthAngle:e.azimuthAngle,polarAngle:e.polarAngle}}function tS(e){if(!y0(e))return null;let t;if(e.camera!==void 0){let r=eS(e.camera);if(!r)return null;t=r}let n;if(e.hidden!==void 0){if(!Array.isArray(e.hidden)||!e.hidden.every(r=>typeof r=="string"))return null;n=e.hidden}let i;if(e.selected===null||typeof e.selected=="string")i=e.selected;else if(e.selected!==void 0)return null;return{camera:t,hidden:n,selected:i}}function x0(e,t,n){let i=Object.values(t).filter(r=>r.visible===!1).map(r=>r.id);return{camera:e??void 0,hidden:i,selected:n?.id??null}}function w0({cameraState:e,setCameraState:t,objectBindings:n,onObjectBindingsChange:i,selectedObjectBinding:r,setSelectedObjectBinding:a,paramKey:o="view",debounceMs:s=400,autoSync:c=!0}){let l=(0,nn.useRef)(null),u=(0,nn.useRef)(null),d=(0,nn.useRef)(null),h=(0,nn.useRef)(null),f=(0,nn.useRef)(null),g=(0,nn.useCallback)(()=>{f.current!==null&&(window.clearTimeout(f.current),f.current=null),d.current=null,h.current=null},[]),x=(0,nn.useCallback)(()=>{let w=x0(e,n,r);return`${o}=${encodeURIComponent(JSON.stringify(w))}`},[e,n,r,o]),P=(0,nn.useCallback)(()=>{let w=new URL(window.location.href);return w.hash=x(),w.toString()},[x]),y=(0,nn.useCallback)(w=>{let C=new URL(window.location.href);C.hash=w,window.history.replaceState(null,"",C.toString()),u.current=w,l.current=new URLSearchParams(C.hash.slice(1)).get(o)},[o]),p=(0,nn.useCallback)(()=>{g(),y(x())},[x,g,y]),m=(0,nn.useRef)({cameraState:e,objectBindings:n,selectedObjectBinding:r});m.current={cameraState:e,objectBindings:n,selectedObjectBinding:r};let[M,_]=(0,nn.useState)(!1);(0,nn.useEffect)(()=>{if(!c||!M){g();return}let w=m.current,C=x0(w.cameraState,w.objectBindings,w.selectedObjectBinding),S=`${o}=${encodeURIComponent(JSON.stringify(C))}`;if(S===u.current){g();return}S===d.current&&s===h.current||(g(),d.current=S,h.current=s,f.current=window.setTimeout(()=>{f.current=null,d.current=null,h.current=null,y(S)},Math.max(0,s)))},[c,e,g,s,n,o,M,r,y]),(0,nn.useEffect)(()=>g,[g]);let T=(0,nn.useRef)(null),E=(0,nn.useRef)(null),b=(0,nn.useCallback)(async()=>{_(!0);let w=window.location.hash.startsWith("#")?window.location.hash.slice(1):window.location.hash,C=new URLSearchParams(w).get(o);if(!C)return T.current=null,!1;if(C===l.current||C===T.current||C===E.current)return!1;let S;try{S=JSON.parse(C)}catch{return!1}let O=tS(S);if(!O)return!1;E.current=C;try{if(O.camera&&await t(O.camera,!1),O.hidden){let L=new Set(O.hidden);i(Object.fromEntries(Object.entries(n).map(([V,R])=>[V,{...R,visible:!L.has(R.id)}])))}if(O.selected!==void 0){let L=O.selected?En(n,O.selected):null;a(L?n[L]:null)}return T.current=C,!0}finally{E.current===C&&(E.current=null)}},[n,i,o,t,a]);return(0,nn.useEffect)(()=>{let w=()=>{b().catch(()=>{})};return window.addEventListener("hashchange",w),()=>{window.removeEventListener("hashchange",w)}},[b]),{getShareUrl:P,syncUrl:p,restoreFromUrl:b}}0&&(module.exports={BindingBuilder,DEFAULT_SCENE_CONFIG,MATERIAL_BLENDING_MODES,MATERIAL_SIDES,ModelViewer,SimpleModelViewer,defineObjectBindings,material,patchBindings,patchSceneConfig,selectBindingKeys,selectBindings,useObjectBinding,useObjectBindingIds,useObjectBindings,useSceneConfig,useShareableViewerState,useViewerActions,useViewerAnimations,useViewerCamera,useViewerConnection,useViewerEffects,useViewerHover,useViewerModel,useViewerSelection});