@liveroom-tech/react-immersive 5.1.0 → 5.2.0

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.
Files changed (44) hide show
  1. package/README.md +486 -57
  2. package/dist/binding-builder.css +1 -1
  3. package/dist/binding-builder.js +17 -13
  4. package/dist/binding-builder.mjs +1 -1
  5. package/dist/chunk-4NLJSD3S.mjs +1 -0
  6. package/dist/chunk-B7REIGDG.mjs +1 -0
  7. package/dist/{chunk-WN6GMMHF.mjs → chunk-HYFJ5DYJ.mjs} +1 -1
  8. package/dist/chunk-QC3NT76G.mjs +3 -0
  9. package/dist/chunk-T3M3BQ7H.mjs +32 -0
  10. package/dist/chunk-ZPK67UG7.mjs +1 -0
  11. package/dist/hosted.css +1 -1
  12. package/dist/hosted.d.mts +4 -3
  13. package/dist/hosted.d.ts +4 -3
  14. package/dist/hosted.js +16 -12
  15. package/dist/hosted.mjs +1 -1
  16. package/dist/index.css +1 -1
  17. package/dist/index.d.mts +39 -8
  18. package/dist/index.d.ts +39 -8
  19. package/dist/index.js +14 -10
  20. package/dist/index.mjs +1 -1
  21. package/dist/materialVariants-DnZe9eMC.d.mts +309 -0
  22. package/dist/materialVariants-DnZe9eMC.d.ts +309 -0
  23. package/dist/modelInfo-BYebMPdZ.d.mts +43 -0
  24. package/dist/modelInfo-XfUQO7C_.d.ts +43 -0
  25. package/dist/{ModelViewer-Bj-KjiDL.d.mts → modelViewerProps-CIZ2R_Fv.d.ts} +82 -10
  26. package/dist/{ModelViewer-BkQ73y6N.d.ts → modelViewerProps-DoRiTZMn.d.mts} +82 -10
  27. package/dist/{objectCatalog-BIeXURoq.d.ts → rendererBackend-QwMzISTn.d.mts} +32 -4
  28. package/dist/{objectCatalog-BIeXURoq.d.mts → rendererBackend-QwMzISTn.d.ts} +32 -4
  29. package/dist/simple-model-viewer.css +1 -1
  30. package/dist/simple-model-viewer.d.mts +32 -4
  31. package/dist/simple-model-viewer.d.ts +32 -4
  32. package/dist/simple-model-viewer.js +3 -3
  33. package/dist/simple-model-viewer.mjs +1 -1
  34. package/dist/utils.d.mts +5 -4
  35. package/dist/utils.d.ts +5 -4
  36. package/dist/utils.js +1 -1
  37. package/dist/utils.mjs +1 -1
  38. package/package.json +2 -1
  39. package/dist/chunk-32WCLPTZ.mjs +0 -1
  40. package/dist/chunk-CSGNL4XU.mjs +0 -3
  41. package/dist/chunk-F2ILTIPG.mjs +0 -28
  42. package/dist/chunk-V6GALFL5.mjs +0 -1
  43. package/dist/modelInfo-DnkmTGMd.d.mts +0 -23
  44. package/dist/modelInfo-DnkmTGMd.d.ts +0 -23
@@ -0,0 +1,32 @@
1
+ import{A as Am,B as Om,C as Ja,D as Za,E as es,F as Hc,G as Im,H as Bm,I as Vm,J as Fm,a as em,b as ne,c as Vc,d as tm,e as rm,f as Ya,g as Co,h as Si,i as nm,j as im,k as om,l as am,m as sm,n as lm,o as cm,p as um,q as dm,r as pm,s as hm,t as Fc,u as mm,w as fm,y as gm,z as Em}from"./chunk-ZPK67UG7.mjs";import{A as jm,F as Um,G as Gm,H as Hm,d as Uc,g as Ci,h as Tm,o as _m,p as _o,q as Pm,r as Ti,s as Po,t as un,y as Nm,z as zm}from"./chunk-B7REIGDG.mjs";import{A as Lm,B as Gc,b as Zh,d as bm,g as _t,h as cn,i as Ka,j as ur,k as Xe,l as ym,m as xm,n as vm,o as wm,p as Mm,q as To,r as Qa,s as Sm,t as Cm,u as Rm,v as km,w as Dm,x as _i}from"./chunk-4NLJSD3S.mjs";import{a as jc}from"./chunk-JR557W27.mjs";var Wm={showObjectBindingDataPanel:!1,showSceneObjectsPanel:!1,showDownloadButton:!1,showResetButton:!1,showAnnotationNavigation:!1,showMaterialVariants:!1},s1=Object.freeze({minimal:Object.freeze({...Wm}),showcase:Object.freeze({...Wm,autoRotate:!0}),configurator:Object.freeze({showObjectBindingDataPanel:!0,showSceneObjectsPanel:!1,showDownloadButton:!1,showResetButton:!0,showMaterialVariants:!0}),inspector:Object.freeze({showObjectBindingDataPanel:!0,showSceneObjectsPanel:!0,showDownloadButton:!0,showResetButton:!0,showViewGizmo:!0,showMeasureTools:!0,showUvCheckerButton:!0,showExplodeControls:!0,showSectionTools:!0,showIsolateControls:!0,enableKeyboardNavigation:!0})}),l1=["preset","ui","tools","controls","perf","tiles","xr","decoders"];function Xm(e){let t={};for(let r of Object.keys(e))e[r]!==void 0&&(t[r]=e[r]);return t}function c1({ui:e,tools:t,controls:r,perf:n,tiles:i,xr:a,decoders:o}){let s=e?.download,c=e?.mouseController,l=t?.measure,d=r?.autoRotate;return{showObjectBindingDataPanel:e?.objectPanel,showSceneObjectsPanel:e?.sceneObjects,showDownloadButton:s===void 0?void 0:s!==!1,downloadFilename:typeof s=="string"?s:void 0,showResetButton:e?.reset,showFullscreenButton:e?.fullscreen,showLoadingOverlay:e?.loadingOverlay,showViewGizmo:e?.viewGizmo,showMouseController:c===void 0?void 0:c!==!1,mouseControllerPosition:typeof c=="object"?c.position:void 0,mouseControllerOpacity:typeof c=="object"?c.opacity:void 0,showAnnotationNavigation:e?.annotationNavigation,showAnnotationOnHover:e?.annotationOnHover,showAnnotationFilters:e?.annotationFilters,highlightOnHover:e?.highlightOnHover,showMaterialVariants:e?.materialVariants,showObjectNavigator:e?.objectNavigator,showMeasureTools:l===void 0?void 0:l!==!1,measurementUnit:typeof l=="object"?l.unit:void 0,showUvCheckerButton:t?.uvChecker,showExplodeControls:t?.explode,showSectionTools:t?.section,showIsolateControls:t?.isolate,texturePositioning:t?.texturePositioning,enableCameraControls:r?.enabled,enableKeyboardNavigation:r?.keyboard,reducedMotion:r?.reducedMotion,disableZoom:r?.zoom===void 0?void 0:!r.zoom,zoomOnSelected:r?.zoomOnSelect,autoRotate:d===void 0?void 0:d!==!1,autoRotateSpeed:typeof d=="number"?d:void 0,refitOnResize:r?.refitOnResize,cameraLimits:r?.limits,moveSensitivity:r?.moveSensitivity,zoomSensitivity:r?.zoomSensitivity,renderMode:n?.renderMode,maxDpr:n?.maxDpr,performanceProfile:n?.profile,preserveDrawingBuffer:n?.preserveDrawingBuffer,webgpu:n?.webgpu,tilesetUrl:i?.url,tilesErrorTarget:i?.errorTarget,tilesCacheSize:i?.cacheSize,enableXR:a?.enabled,usdzUrl:a?.usdzUrl,arScaleMode:a?.scaleMode,mobileHandoffUrl:a?.mobileHandoffUrl,dracoDecoderPath:o?.draco,ktx2TranscoderPath:o?.ktx2,meshopt:o?.meshopt}}function qm(e){let t={...e};for(let r of l1)delete t[r];return{...e.preset?s1[e.preset]:void 0,...Xm(t),...Xm(c1(e))}}import{useCallback as Gt,useRef as Ai,useState as Km}from"react";import{Vector3 as Qm}from"three";var Wc=new WeakSet;function Pi(e){Wc.add(e)}function $m(e){let t=Wc.has(e);return t&&Wc.delete(e),t}var Xc=new WeakSet;function Ym(e,t){t?Xc.add(e):Xc.delete(e)}function Ei(e,t){return Xc.has(e)?0:t}function Jm(e){return[e.x,e.y,e.z]}function Br(e,t){let r=new Qm,n=new Qm;return t.getPosition(r),t.getTarget(n),{position:Jm(r),target:Jm(n),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 u1(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 Eo(e,t,r=.6){let n=e.smoothTime;e.smoothTime=Ei(e,r);try{return await t()}finally{e.smoothTime=n}}function HA(e={}){let t=Ai(e);t.current=e;let r=Ai(null),[n,i]=Km(null),[a,o]=Km(()=>({...e.presets})),s=Ai(a);s.current=a;let c=Gt(_=>{i(M=>u1(M,_)?M:_)},[]),l=Gt(_=>{c(_)},[c]),d=Ai(null),u=Ai(null),p=Ai(null),h=Gt(_=>{r.current=_;let M=Br(_.raw.controls.camera,_.raw.controls);c(M),_.raw.scene!==u.current&&(u.current=_.raw.scene,d.current=null,p.current=null),_.homeCameraState&&!d.current&&(d.current=_.homeCameraState);let{initialPosition:S,initialTarget:A,initialTransition:D=!1}=t.current;if((S||A)&&_.raw.scene&&(S||_.homeCameraState)&&p.current!==_.raw.controls){p.current=_.raw.controls,_.homeCameraState||Pi(_.raw.controls);let k=S??M.position,I=A??M.target;_.raw.controls.setLookAt(k[0],k[1],k[2],I[0],I[1],I[2],D).then(()=>{if(r.current?.raw.controls!==_.raw.controls)return;let R=Br(_.raw.controls.camera,_.raw.controls);d.current={position:R.position,target:R.target},c(R)}).catch(()=>{})}},[c]),m=Gt(async()=>{let _=r.current,M=_?.raw.controls;if(!M)return!1;try{let S=d.current;return S?await Eo(M,()=>M.setLookAt(S.position[0],S.position[1],S.position[2],S.target[0],S.target[1],S.target[2],!0)):_?.raw.scene?await Eo(M,()=>M.fitToBox(_.raw.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})):await Eo(M,()=>M.reset(!0)),!0}catch{return!1}},[]),g=Gt(async()=>{let _=r.current;if(!_?.raw.controls||!_.raw.scene)return!1;try{return await Eo(_.raw.controls,()=>_.raw.controls.fitToBox(_.raw.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),f=Gt(async _=>{let M=r.current;if(!M?.raw.controls)return!1;let S=Ci(M.objectBindings,_);if(!S)return!1;let A=M.raw.nodes[S];if(!A)return!1;try{return await Eo(M.raw.controls,()=>M.raw.controls.fitToBox(A,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),y=Gt(async(_,M=!0)=>{let S=r.current?.raw.controls;if(!S)return!1;try{return r.current?.homeCameraState||Pi(S),await S.setTarget(_[0],_[1],_[2],M),c(Br(S.camera,S)),!0}catch{return!1}},[c]),x=Gt(async(_,M=!0)=>{let S=r.current?.raw.controls;if(!S)return!1;try{r.current?.homeCameraState||Pi(S);let A=[S.setLookAt(_.position[0],_.position[1],_.position[2],_.target[0],_.target[1],_.target[2],M)];_.azimuthAngle!=null&&_.polarAngle!=null&&A.push(S.rotateTo(_.azimuthAngle,_.polarAngle,M)),await Promise.all(A);let D=S.camera,k=!1;return _.fov!=null&&"fov"in D&&typeof D.fov=="number"&&(D.fov=_.fov,k=!0),_.zoom!=null&&"zoom"in D&&typeof D.zoom=="number"&&(D.zoom=_.zoom,k=!0),k&&"updateProjectionMatrix"in D&&D.updateProjectionMatrix(),c(Br(D,S)),!0}catch{return!1}},[c]),v=Gt((_,M=!0)=>x(_,M),[x]),C=Gt((_,M,S=!0)=>x({position:_,target:M},S),[x]),P=Gt(async(_,M,S=!0)=>{let A=r.current?.raw.controls;if(!A)return!1;try{return r.current?.homeCameraState||Pi(A),await A.rotateTo(_*Math.PI/180,M*Math.PI/180,S),c(Br(A.camera,A)),!0}catch{return!1}},[c]),b=Gt(async(_,M=!0)=>{let S=r.current?.raw.controls;if(!S)return!1;try{return r.current?.homeCameraState||Pi(S),await S.dollyTo(_,M),c(Br(S.camera,S)),!0}catch{return!1}},[c]),E=Gt(_=>{let M=r.current?.raw.controls,S=_.trim();if(!M||!S)return null;let A=Br(M.camera,M);return s.current={...s.current,[S]:A},o(D=>({...D,[S]:A})),c(A),A},[c]),T=Gt((_,M=!0)=>{let S=s.current[_];return S?x(S,M):Promise.resolve(!1)},[x]);return{cameraState:n,cameraPresets:a,resetView:m,focusObject:f,fitScene:g,setCameraTarget:y,setCameraState:v,lookAt:C,orbitTo:P,dollyTo:b,savePreset:E,goToPreset:T,handleCameraChange:l,handleViewerReady:h}}import{useCallback as Fn,useEffect as d1,useRef as Zm,useState as qc}from"react";var ef={currentClip:null,isPlaying:!1,speed:1,time:0,duration:0,active:[]};function qA(){let e=Zm(null),t=Zm(null),[r,n]=qc([]),[i,a]=qc([]),[o,s]=qc(ef);d1(()=>()=>{t.current?.()},[]);let c=Fn(g=>{t.current?.(),e.current=g,n(g.clips),a(g.clipDetails??g.clips.map(f=>({sourceName:f,duration:0}))),s(g.getState?.()??ef),t.current=g.subscribe?.(s)??null},[]),l=Fn(g=>{let f=e.current;f&&(g(f),!f.subscribe&&f.getState&&s(f.getState()))},[]),d=Fn((g,f)=>l(y=>y.play(g,f)),[l]),u=Fn(g=>l(f=>f.pause(g)),[l]),p=Fn(g=>l(f=>f.stop(g)),[l]),h=Fn((g,f)=>l(y=>y.setSpeed(g,f)),[l]),m=Fn((g,f)=>l(y=>y.seek?.(g,f)),[l]);return{clips:r,clipDetails:i,...o,play:d,pause:u,stop:p,setSpeed:h,seek:m,handleAnimationsReady:c}}import{AlertTriangle as p1}from"lucide-react";import{jsx as ts,jsxs as tf}from"react/jsx-runtime";function rs({title:e,message:t,tone:r="default"}){return tf("div",{className:`ri-license-overlay${r==="error"?" ri-license-overlay--error":""}`,children:[tf("div",{className:"ri-license-overlay__header",children:[r==="error"?ts(p1,{size:16,className:"ri-license-overlay__icon","aria-hidden":"true"}):ts("span",{className:"ri-license-overlay__statusDot","aria-hidden":"true"}),ts("span",{className:"ri-license-overlay__title",children:e})]}),ts("p",{className:"ri-license-overlay__message",children:t})]})}function $c(e,t){if(e)return e;let r=t?.background;return r?.enabled&&r.type==="color"?r.color:"#1c1c1d"}import{useEffect as b1,useState as y1}from"react";var h1="ri:license-grant:v1",m1={"260cd89ea13f":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwjr3ofKTkkcxOM0GYl/RlJj9JsuyjSF8sYmCd2YqsHJCEO8EvlNDrO2Kl4agFKo6dRhyR2/oWeiU6P9WIqRbvw=="},rf=new Map;function of(e){let t=atob(e);return Uint8Array.from(t,r=>r.charCodeAt(0)).buffer}function nf(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");return of(t.padEnd(Math.ceil(t.length/4)*4,"="))}function f1(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 ns(e){let t=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(e.trim())),r=String.fromCharCode(...new Uint8Array(t));return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function Yc(e,t){return`${h1}:${t}:${e}`}function g1(e,t){let r=rf.get(e);if(r)return r;let n=crypto.subtle.importKey("spki",of(t),{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]);return rf.set(e,n),n}async function Kc(e,t,r){if(!globalThis.crypto?.subtle)return null;try{let[n,i,a,o,...s]=e.split("."),c=m1[i];if(n!=="ri1"||!c||!a||!o||s.length>0)return null;let l=JSON.parse(new TextDecoder().decode(nf(a)));if(!f1(l)||!await crypto.subtle.verify({name:"ECDSA",hash:"SHA-256"},await g1(i,c),nf(o),new TextEncoder().encode(`${n}.${i}.${a}`)))return null;let u=Math.floor(Date.now()/1e3),p=l.expiresAt-l.issuedAt;return l.licenseKeyHash!==t||l.domain!==r||l.expiresAt<=u||l.issuedAt>u+300||p<=0||p>43200?null:{environment:l.environment,tier:l.tier,expiresAt:l.expiresAt}}catch{return null}}async function af(e,t,r){try{return await Kc(e,await ns(t),r)}catch{return null}}async function sf(e,t,r){try{let n=await ns(t);return await Kc(e,n,r)?(localStorage.setItem(Yc(n,r),e),!0):!1}catch{return!1}}async function lf(e,t){try{let r=await ns(e),n=Yc(r,t),i=localStorage.getItem(n);if(!i)return null;let a=await Kc(i,r,t);return a||localStorage.removeItem(n),a}catch{return null}}async function Qc(e,t){try{let r=await ns(e);localStorage.removeItem(Yc(r,t))}catch{}}var x1=["localhost","127.0.0.1","0.0.0.0"],v1=e=>x1.includes(e)||e.endsWith(".local")||e.endsWith(".localhost"),df="https://react-immersive.liveroom.dev/api/validate-license",pf=()=>typeof window<"u",w1=300*1e3,M1=5e3,S1=400,Zc=new Map,Jc=new Map,dn=class extends Error{},hf=async(e,t,r)=>{let n=await lf(e,t);return n?(console.warn("[react-immersive] License server unreachable \u2014 using a previously verified, time-limited offline grant."),{status:"valid",reason:"Previously verified offline grant",environment:n.environment,tier:n.tier,isLocalDomain:r}):null},cf=async(e,t,r)=>{let n=await hf(e,t,r);return n||(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:r})},C1=e=>e instanceof dn||e instanceof TypeError,T1=()=>new Promise(e=>setTimeout(e,S1)),_1=e=>e==="development"||e==="production",P1=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&&!_1(t.environment)||t.tier!==void 0&&typeof t.tier!="string"||t.offlineGrant!==void 0&&typeof t.offlineGrant!="string")},E1=e=>{if(!e||typeof e!="object")return null;let t=e,r=t.reason??t.error;return typeof r=="string"&&r.trim()?r:null},mf=(e,t,r)=>`${r}::${e}::${t}`,ff=e=>{let t=Zc.get(e);return t?Date.now()-t.timestamp>w1?(Zc.delete(e),null):t.result:null},A1=(e,t)=>({status:e.valid?"valid":"invalid",reason:e.reason,environment:e.environment,tier:e.tier,isLocalDomain:t}),R1=(e,t)=>({status:"invalid",reason:e,isLocalDomain:t});async function k1(e,t,r,n){let i=mf(e,t,n),a=ff(i);if(a)return a;let o=Jc.get(i);if(o)return o;let s=(async()=>{for(let c=0;c<2;c+=1)try{return await D1(e,t,r,i,n)}catch(l){if(!C1(l))throw l;if(c===0){let d=await hf(e,t,r);if(d)return d;await T1();continue}return cf(e,t,r)}return cf(e,t,r)})().finally(()=>{Jc.delete(i)});return Jc.set(i,s),s}async function D1(e,t,r,n,i){let a=new AbortController,o=setTimeout(()=>a.abort(),M1),s;try{s=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},cache:"no-store",signal:a.signal,body:JSON.stringify({licenseKey:e,domain:t})})}catch(d){throw a.signal.aborted?new dn("License validation timed out"):d}finally{clearTimeout(o)}let c;try{c=await s.json()}catch{throw new dn(`License server returned a non-JSON response${s.status?` (${s.status})`:""}`)}if(!s.ok){if(s.status===429||s.status>=500)throw new dn(`License server error (${s.status})`);let d=E1(c)??`License validation failed${s.status?` (${s.status})`:""}`;return await Qc(e,t),R1(d,r)}if(!P1(c))throw new dn("License server returned an unexpected payload");let l=A1(c,r);if(l.status==="valid"&&i!==df){let d=c.offlineGrant?await af(c.offlineGrant,e,t):null;if(!d)throw new dn("License validation endpoint did not return a verifiable signed grant");l={...l,environment:d.environment,tier:d.tier}}return l.status==="valid"?(Zc.set(n,{result:l,timestamp:Date.now()}),c.offlineGrant&&(await sf(c.offlineGrant,e,t)||console.warn("[react-immersive] The license server returned an invalid offline grant; it was not cached."))):await Qc(e,t),l}var uf=(e,t)=>{let r=e.trim();return!pf()||!r?null:ff(mf(r,window.location.hostname.toLowerCase(),t))},gf=(e,t=df)=>{let[r,n]=y1(()=>uf(e,t)??{status:"checking",isLocalDomain:!1});return b1(()=>{if(!pf())return;let i=!1,a=u=>{i||n(u)},o=e.trim(),s=window.location.hostname.toLowerCase(),c=v1(s),l=uf(e,t);return l?(a(l),()=>{i=!0}):(a({status:"checking",isLocalDomain:c}),o?((async()=>{try{a(await k1(o,s,c,t))}catch(u){let p=u instanceof TypeError?"Could not reach license server":u instanceof Error?u.message:"License validation failed";a({status:"invalid",reason:p,isLocalDomain:c})}})(),()=>{i=!0}):(a({status:"invalid",reason:"No license key provided",isLocalDomain:c}),()=>{i=!0}))},[e,t]),r};import{createContext as L1,useContext as O1}from"react";var I1=L1({isInsideEditor:!1,activeTab:"object",activeSubTab:"General",tier:"free"});var is=()=>O1(I1);import{Box3 as bf,Euler as B1,Matrix4 as yf,Quaternion as N1,Vector3 as pn}from"three";function xf(e){e.updateWorldMatrix(!0,!0);let t=new yf().copy(e.matrixWorld).invert(),r=new bf,n=new bf,i=!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 yf().multiplyMatrices(t,a.matrixWorld);n.copy(o.geometry.boundingBox).applyMatrix4(s),r.union(n),i=!0}),i?r.getCenter(new pn):new pn}function vf(e,t="XYZ"){return new N1().setFromEuler(new B1(e[0],e[1],e[2],t))}function z1(e,t,r,n,i="XYZ"){let o=new pn(...n).multiply(new pn(...r)).applyQuaternion(vf(t,i)).add(new pn(...e));return[o.x,o.y,o.z]}function uR(e,t,r,n,i,a="XYZ"){let o=new pn(...z1(e,t,n,i,a)),s=new pn(...i).multiply(new pn(...n)).applyQuaternion(vf(r,a)),c=o.sub(s);return[c.x,c.y,c.z]}import{Box3 as X1,Mesh as q1,Raycaster as $1,Triangle as Y1,Vector3 as Cr}from"three";import{Matrix4 as j1}from"three";function dr(e){return e.isSkinnedMesh===!0}function ki(e){let t=[];return e.traverse(r=>{dr(r)&&t.push(r)}),t}var Ri="reactImmersiveSkinFreeze";function wf(e){return!!e.userData[Ri]}function os(e,t){let r=e.userData,n=new j1().copy(t).invert(),i=r[Ri];if(i){i.frozenInverse.copy(n),e.bindMatrixInverse.copy(n);return}let a={frozenInverse:n,previousOnBeforeRender:e.onBeforeRender};e.bindMatrixInverse.copy(n),e.onBeforeRender=function(o,s,c,l,d,u){a.previousOnBeforeRender.call(this,o,s,c,l,d,u),e.bindMatrixInverse.copy(a.frozenInverse)},r[Ri]=a}function Mf(e){return e.userData[Ri]?.frozenInverse??null}function Di(e){let t=e.userData,r=t[Ri];r&&(e.onBeforeRender=r.previousOnBeforeRender,delete t[Ri],e.updateMatrixWorld(!0))}import{useCallback as as,useEffect as V1,useRef as ss}from"react";import{Matrix4 as F1,Triangle as Sf,Vector3 as Ao}from"three";var U1=500,G1=10,H1=5;function ls(e,t,r){let n=ss({resolve:e,onContextMenu:t,anchorOf:r});n.current={resolve:e,onContextMenu:t,anchorOf:r};let i=ss(null),a=ss(!1),o=ss(null),s=as(()=>{let u=i.current;u?.timer&&clearTimeout(u.timer),i.current=null,o.current?.(),o.current=null},[]),c=as(()=>{let u=i.current;u&&(s(),u.kind==="touch"&&(a.current=!0,setTimeout(()=>a.current=!1,800)),n.current.onContextMenu?.(u.target,u.pointer))},[s]),l=as(u=>{let p=u.nativeEvent,h=p.pointerType!=="touch"&&p.button===2,m=p.pointerType==="touch"&&p.button===0;if(!n.current.onContextMenu||!h&&!m)return;let g=n.current.resolve(u.object);if(g===null)return;s();let f={target:g,kind:h?"right":"touch",pointerId:p.pointerId,pointer:Li(u,n.current.anchorOf?.(u.object)),timer:m?setTimeout(c,U1):null};i.current=f;let y=h?H1:G1,x=b=>Math.hypot(b.clientX-f.pointer.clientX,b.clientY-f.pointer.clientY)>y,v=b=>{b.pointerId===f.pointerId&&x(b)&&s()},C=b=>{b.pointerId===f.pointerId&&(f.kind==="right"&&!x(b)?c():s())},P=b=>{b.pointerId!==f.pointerId&&s()};window.addEventListener("pointermove",v),window.addEventListener("pointerup",C),window.addEventListener("pointercancel",s),window.addEventListener("pointerdown",P),o.current=()=>{window.removeEventListener("pointermove",v),window.removeEventListener("pointerup",C),window.removeEventListener("pointercancel",s),window.removeEventListener("pointerdown",P)}},[s,c]);V1(()=>s,[s]);let d=as(()=>a.current?(a.current=!1,!0):!1,[]);return{onPointerDown:l,consumeClick:d}}function W1(e,t){let r=e.face,n=t.geometry.getAttribute("position");if(!r||!n)return null;let i=e.barycoord??null;if(!i){let[u,p,h]=[r.a,r.b,r.c].map(m=>t.getVertexPosition(m,new Ao));if(i=Sf.getBarycoord(t.worldToLocal(e.point.clone()),u,p,h,new Ao),!i)return null}let[a,o,s]=[r.a,r.b,r.c].map(u=>new Ao().fromBufferAttribute(n,u)),c=new Ao().addScaledVector(a,i.x).addScaledVector(o,i.y).addScaledVector(s,i.z),l=new Sf(a,o,s).getNormal(new Ao);return r.normal.clone().transformDirection(t.matrixWorld).dot(e.ray.direction)>0&&l.negate(),{position:[c.x,c.y,c.z],normal:[l.x,l.y,l.z]}}function Un(e,t){if(t.updateWorldMatrix(!0,!1),e.object===t&&t.isSkinnedMesh===!0){let i=W1(e,t);if(i)return i}let r=t.worldToLocal(e.point.clone()),n=e.face?e.face.normal.clone().transformDirection(e.object.matrixWorld):e.ray.direction.clone().negate();return n.dot(e.ray.direction)>0&&n.negate(),n.transformDirection(new F1().copy(t.matrixWorld).invert()),{position:[r.x,r.y,r.z],normal:[n.x,n.y,n.z]}}function Li(e,t){let r=e.nativeEvent;return{clientX:r.clientX,clientY:r.clientY,pointerType:"pointerType"in r?r.pointerType:"mouse",...t?{surface:Un(e,t)}:{}}}function Cf(e,t){if(!(e instanceof q1)||!t)return null;let r=e.geometry.getAttribute("position");if(!r?.count)return null;e.updateWorldMatrix(!0,!1),t.updateWorldMatrix(!0,!1);let n=new X1,i=new Cr;if(dr(e)){let b=e;b.computeBoundingBox(),b.computeBoundingSphere();for(let E=0;E<r.count;E++)n.expandByPoint(e.getVertexPosition(E,i))}else e.geometry.boundingBox||e.geometry.computeBoundingBox(),n.copy(e.geometry.boundingBox);if(n.applyMatrix4(e.matrixWorld),n.isEmpty())return null;let a=n.getCenter(new Cr),o=t.getWorldPosition(new Cr),s=t.getWorldDirection(new Cr),c=t.isOrthographicCamera,l=new $1,d=b=>{if(c){let T=o.distanceTo(a)+n.getSize(i).length()+1;l.set(b.clone().addScaledVector(s,-T),s)}else l.set(o,b.clone().sub(o).normalize());let E=l.intersectObject(e,!1)[0];return E?Un({...E,ray:l.ray},e):null},u=d(a);if(u)return u;let p=e.geometry.index,h=p?.count??r.count,m=new Cr,g=new Cr,f=new Cr,y=new Cr,x=new Cr,v=new Cr,C=null,P=1/0;for(let b=0;b+2<h;b+=3){if(e.getVertexPosition(p?p.getX(b):b,m).applyMatrix4(e.matrixWorld),e.getVertexPosition(p?p.getX(b+1):b+1,g).applyMatrix4(e.matrixWorld),e.getVertexPosition(p?p.getX(b+2):b+2,f).applyMatrix4(e.matrixWorld),y.copy(m).add(g).add(f).multiplyScalar(1/3),Y1.getNormal(m,g,f,x),c?v.copy(s).negate():v.copy(o).sub(y),x.dot(v)<=0)continue;let E=y.distanceToSquared(a);E<P&&(P=E,C=y.clone())}return C?d(C):null}import{Mesh as K1,Raycaster as Q1,Triangle as J1,Vector2 as Tf,Vector3 as Nr}from"three";function _f(e,t,r,n){if(!(e instanceof K1)||!t)return null;e.updateWorldMatrix(!0,!1),t.updateWorldMatrix(!0,!1);let i=new Nr().fromArray(r.position);if(dr(e)){let l=e;l.computeBoundingBox(),l.computeBoundingSphere();let d=l.geometry.getAttribute("position");if(!d)return null;let u=l.geometry.index,p=u?.count??d.count,h=new J1,m=new Nr,g=new Nr,f=1/0,y=null;for(let x=0;x+2<p;x+=3){let v=[0,1,2].map(P=>u?u.getX(x+P):x+P);h.a.fromBufferAttribute(d,v[0]),h.b.fromBufferAttribute(d,v[1]),h.c.fromBufferAttribute(d,v[2]),h.closestPointToPoint(i,m);let C=m.distanceToSquared(i);if(!(C>=f||!h.getBarycoord(m,g))&&(f=C,y=new Nr().addScaledVector(l.getVertexPosition(v[0],new Nr),g.x).addScaledVector(l.getVertexPosition(v[1],new Nr),g.y).addScaledVector(l.getVertexPosition(v[2],new Nr),g.z),f<1e-12))break}if(!y)return null;i.copy(y)}if(i.applyMatrix4(e.matrixWorld).project(t),!Number.isFinite(i.x)||i.z<-1||i.z>1)return null;let a=new Tf(n==="left"?-.0035:n==="right"?.0035:0,n==="down"?-.0035:n==="up"?.0035:0),o=new Q1,s=r.size*.01,c=new Nr().fromArray(r.position);for(let l=1;l>=1/1024;l/=2){o.setFromCamera(new Tf(i.x,i.y).addScaledVector(a,l),t);let d=o.intersectObject(e,!1)[0];if(d){let u=Un({...d,ray:o.ray},e);if(new Nr().fromArray(u.position).distanceTo(c)<=s)return u}}return null}import{useRef as ge,useState as ue,useEffect as Be,useCallback as he,useMemo as Vt,Suspense as t0}from"react";import{GizmoHelper as hA,GizmoViewport as mA}from"@react-three/drei";import{Box3 as fA,Raycaster as gA,Vector2 as bA,Vector3 as r0}from"three";import{Component as Z1}from"react";var cs=class extends Z1{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(r,n){this.props.onLoadError?.(r)}render(){return this.state.hasError?null:this.props.children}};import{PerspectiveCamera as eu,Vector2 as eM}from"three";var Pf="riEditorGizmo";function us(e){return e.userData[Pf]=!0,e}function ds(e){let t=[];return e.traverse(r=>{r.visible&&r.userData[Pf]&&(r.visible=!1,t.push(r))}),()=>{for(let r of t)r.visible=!0}}function ps(e,t={}){if(!e)return Promise.reject(new Error("Viewer not ready"));let{gl:r,scene:n,camera:i,invalidate:a}=e,o=Si(r);if(!o&&!r.getContextAttributes().preserveDrawingBuffer)return Promise.reject(new Error("Screenshot capture is disabled. Set preserveDrawingBuffer on ModelViewer to enable it."));let{transparent:s=!1}=t,c=r.getSize(new eM),l=r.getPixelRatio(),d=i instanceof eu?i.aspect:null,u=n.background,p=t.width??c.x,h=t.height??c.y,m=p!==c.x||h!==c.y,g=ds(n);s&&(n.background=null),m&&(r.setPixelRatio(1),r.setSize(p,h,!1),i instanceof eu&&(i.aspect=p/h,i.updateProjectionMatrix()));let f=()=>{g(),s&&(n.background=u),m&&(r.setPixelRatio(l),r.setSize(c.x,c.y,!1),i instanceof eu&&d!==null&&(i.aspect=d,i.updateProjectionMatrix())),a()};if(o)try{return r.render(n,i),Promise.resolve(r.domElement.toDataURL("image/png"))}catch(y){return Promise.reject(y)}finally{f()}return a(),new Promise((y,x)=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{let v,C;try{v=r.domElement.toDataURL("image/png")}catch(P){C=P}f(),C?x(C):y(v)})})})}import{useCallback as fs,useEffect as sM,useRef as Df,useState as Lf}from"react";import{Vector3 as Of}from"three";import{useEffect as hs,useMemo as zr,useRef as jr}from"react";import{useFrame as tM,useThree as rM}from"@react-three/fiber";import{Box3 as nM,CatmullRomCurve3 as Ef,Sphere as iM,Spherical as oM,Vector3 as hn}from"three";function tu(e){if(e.duration!==void 0)return e.duration;let t=e.waypoints??[];if(t.length<2)return 24;let r=e.loop===!1?t.slice(0,-1):t;return Math.max(r.reduce((n,i)=>n+(i.segmentDuration??3.5),0),4)}var aM=1.2;function ms({controlsRef:e,sceneRef:t,config:r,playing:n,resetOnPlay:i=!1,onFinished:a,onUserInteract:o,onStop:s,playOnce:c=!1,startAtPath:l=!1,onStarted:d,onProgress:u}){let p=rM(L=>L.invalidate),h=zr(()=>r.waypoints??[],[r.waypoints]),m=h.length>=2,g=r.loop??!0,f=tu(r),y=zr(()=>h.map(L=>[...L.position,...L.target,L.azimuthAngle??"",L.polarAngle??"",L.segmentDuration??""].join(",")).join(";"),[h]),x=zr(()=>{let L=[];if(h.length<2)return L;let O=0;for(let G=0;G<h.length-1;G++)O+=h[G].segmentDuration??3.5,L.push(O);return g&&h.length>1&&(O+=h[h.length-1].segmentDuration??3.5,L.push(O)),L},[h,g]),v=zr(()=>L=>{if(h.length<2||x.length===0)return L/f;let O=x[x.length-1],G=g?L%f:Math.min(L,f),le=f>0?G/f*O:0;for(let H=0;H<x.length;H++)if(le<=x[H]){let be=H===0?0:x[H-1],De=x[H]-be,Z=De>0?(le-be)/De:0,ye=g?h.length:h.length-1,me=H/ye,je=1/ye;return me+Z*je}return 1},[h.length,x,f,g]),C=zr(()=>m?{position:new Ef(h.map(L=>new hn(...L.position)),g,"catmullrom",.5),target:new Ef(h.map(L=>new hn(...L.target)),g,"catmullrom",.5)}:null,[y,m,g]),P=zr(()=>{if(!m||!h.every(O=>Number.isFinite(O.azimuthAngle)&&Number.isFinite(O.polarAngle)))return null;let L=h.map(O=>({azimuth:O.azimuthAngle,polar:O.polarAngle,distance:new hn(...O.position).distanceTo(new hn(...O.target))}));for(let O=1;O<L.length;O+=1){let G=L[O-1].azimuth,le=L[O].azimuth;L[O].azimuth=le+Math.round((G-le)/(Math.PI*2))*Math.PI*2}return L},[y,m]),b=jr(0),E=jr(0),T=jr(new hn),_=jr(new hn),M=jr(!1),S=jr(!0),A=jr(0),D=jr(!1),k=jr(null),I=zr(()=>new hn,[]),R=zr(()=>new hn,[]),V=zr(()=>new oM,[]);return hs(()=>{b.current=0,A.current=0,E.current=0,D.current=!1},[y,g,f]),hs(()=>{i&&(A.current=0,b.current=0,D.current=!1)},[i]),hs(()=>{if(!n){M.current=!1,b.current>0&&!i?A.current=b.current:i&&(A.current=0),(b.current>0||D.current)&&s?.();return}b.current>=f&&!g&&(b.current=0,A.current=0,D.current=!1);let L=e.current;if(L&&(L.getPosition(T.current),L.getTarget(_.current)),i||D.current||A.current===0?(b.current=0,A.current=0,D.current=!1):A.current>0&&A.current<f?b.current=A.current:(b.current=0,A.current=0),E.current=0,!m){let O=t.current;if(O){let G=new nM().setFromObject(O).getBoundingSphere(new iM);k.current={center:G.center.clone(),radius:G.radius>0?G.radius:1}}}M.current=!0,S.current=!0,p()},[n,m,e,t,p,f,g,y,i,s]),hs(()=>{if(!n||!o)return;let L=e.current;if(!L)return;let O=()=>{D.current||o()};return L.addEventListener("controlstart",O),()=>L.removeEventListener("controlstart",O)},[n,e,o]),tM((L,O)=>{if(!n||!M.current)return;let G=e.current;if(!G)return;let le=S.current;S.current=!1,(!le||!l)&&(b.current+=O,E.current+=O);let H=(!g||c)&&b.current>=f,be=H&&g?0:v(b.current);if(be=g?be%1:Math.min(be,1),C)if(C.target.getPoint(be,R),P){let Z=g?P.length:P.length-1,ye=Math.min(be,1)*Z,me=Math.min(Math.floor(ye),Z-1),je=(me+1)%P.length,lt=be>=1?1:ye-me,fe=lt*lt*(3-2*lt),Te=P[me],Oe=P[je],pt=Oe.azimuth+Math.round((Te.azimuth-Oe.azimuth)/(Math.PI*2))*Math.PI*2,Y=Te.azimuth+(pt-Te.azimuth)*fe,$t=Te.polar+(Oe.polar-Te.polar)*fe,Je=Te.distance+(Oe.distance-Te.distance)*fe;V.set(Math.max(Je,1e-6),Math.min(Math.max($t,1e-6),Math.PI-1e-6),Y),I.setFromSpherical(V).add(R)}else C.position.getPoint(be,I);else{let Z=k.current;if(!Z)return;let ye=be*Math.PI*2,me=Z.radius*2.2;I.set(Z.center.x+Math.cos(ye)*me,Z.center.y+Z.radius*.6,Z.center.z+Math.sin(ye)*me),R.copy(Z.center)}let De=l?1:Math.min(E.current/aM,1);if(De<1){let Z=De*De*(3-2*De);I.lerpVectors(T.current,I,Z),R.lerpVectors(_.current,R,Z)}if(G.setLookAt(I.x,I.y,I.z,R.x,R.y,R.z,!1),le&&d?.(),u?.(Math.min(b.current/f,1)),H){M.current=!1,D.current=!0,b.current=0,A.current=0,a?.();return}p()}),null}function Af(){return typeof document<"u"&&typeof HTMLCanvasElement<"u"&&typeof HTMLCanvasElement.prototype.captureStream=="function"}function Rf(e,t={}){let{fps:r=15,gifWidth:n=480,signal:i}=t;if(!Number.isFinite(r)||r<1||r>60)throw new Error("Video frame rate must be between 1 and 60.");if(!Number.isInteger(n)||n<16||n>4096)throw new Error("GIF width must be a whole number of pixels from 16 to 4096.");if(i?.aborted)throw new DOMException("Video export cancelled.","AbortError");if(typeof e.captureStream!="function"||typeof document>"u")throw new Error("Video recording as GIF is not supported in this browser.");let a=1e3/r,o,s,c,l=null,d,u=0,p=0,h=0,m=null,g=0,f=0,y=0,x=!1,v=!1,C,P,b,E,T,_,M=new Promise((O,G)=>{T=O,_=G}),S=()=>{clearTimeout(C),clearInterval(P),b!==void 0&&cancelAnimationFrame(b),E!==void 0&&cancelAnimationFrame(E),i?.removeEventListener("abort",D),e.removeEventListener("webglcontextlost",k),c&&(c.pause(),c.srcObject=null),s?.getTracks().forEach(O=>O.stop())},A=(O=new DOMException("Video export cancelled.","AbortError"))=>{x||(x=!0,S(),_(O))},D=()=>A(),k=()=>A(new Error("Video export stopped because the WebGL context was lost.")),I=()=>A(new Error("Video export timed out. Keep the viewer tab visible while recording."));i?.addEventListener("abort",D,{once:!0}),e.addEventListener("webglcontextlost",k),C=setTimeout(I,3e4);let R=(async()=>{if(o=await import("gifenc"),!x&&(s=e.captureStream(r),c=document.createElement("video"),c.muted=!0,c.playsInline=!0,c.srcObject=s,await c.play(),!x)){if(l=document.createElement("canvas").getContext("2d",{willReadFrequently:!0}),!l)throw new Error("Video recording as GIF is not supported in this browser.");d=o.GIFEncoder()}})().catch(O=>A(O)),V=O=>{if(!m||!d)return;let G=Math.max(2,Math.round((O-g)/10)-y);y+=G,d.writeFrame(m.index,u,p,{palette:m.palette,delay:G*10}),m=null},L=()=>{if(x||!o||!c||!l||!d||c.readyState<2||!c.videoWidth)return;let O=performance.now();if(!(h>0&&O-f<a/2)){u||(u=Math.min(n,c.videoWidth),p=Math.max(1,Math.round(u*c.videoHeight/c.videoWidth)),l.canvas.width=u,l.canvas.height=p);try{l.drawImage(c,0,0,u,p);let{data:G}=l.getImageData(0,0,u,p),le=o.quantize(G,256),H=o.applyPalette(G,le);h===0&&(g=O),V(O),m={index:H,palette:le},f=O,h+=1}catch(G){A(G)}}};return{result:M,cancel:A,start(O){x||b!==void 0||(b=requestAnimationFrame(()=>{R.then(()=>{x||(L(),P=setInterval(L,a),clearTimeout(C),C=setTimeout(I,(O+30)*1e3))})}))},finish(){x||v||(v=!0,E=requestAnimationFrame(()=>{R.then(()=>{if(x||(L(),x))return;if(!d||h===0){A(new Error("The browser produced an empty video."));return}V(f+a),d.finish();let O=new Blob([d.bytes()],{type:"image/gif"});x=!0,S(),T(O)})}))}}}var ru={webm:["video/webm;codecs=vp9","video/webm;codecs=vp8","video/webm"],mp4:["video/mp4;codecs=avc1.42E01E","video/mp4"]};function Vr(e="auto"){return e==="gif"?Af()?"image/gif":null:typeof MediaRecorder>"u"?null:(e==="auto"?[...ru.webm,...ru.mp4]:ru[e]).find(r=>MediaRecorder.isTypeSupported(r))??null}function kf(e,t={}){if(t.format==="gif")return Rf(e,t);let{fps:r=30,videoBitsPerSecond:n=8e6,signal:i}=t;if(!Number.isFinite(r)||r<1||r>60)throw new Error("Video frame rate must be between 1 and 60.");if(!Number.isFinite(n)||n<=0)throw new Error("Video bitrate must be a positive number.");if(i?.aborted)throw new DOMException("Video export cancelled.","AbortError");let a=Vr(t.format);if(!a||typeof e.captureStream!="function"){let b=t.format&&t.format!=="auto"?` as ${t.format.toUpperCase()}`:"";throw new Error(`Video recording${b} is not supported in this browser.`)}let o,s,c=!1,l=!1,d,u,p,h=[],m,g,f=new Promise((b,E)=>{m=b,g=E}),y=()=>{clearTimeout(d),u!==void 0&&cancelAnimationFrame(u),p!==void 0&&cancelAnimationFrame(p),i?.removeEventListener("abort",v),e.removeEventListener("webglcontextlost",C),s&&(s.ondataavailable=null,s.onstop=null,s.onerror=null),o?.getTracks().forEach(b=>b.stop())},x=(b=new DOMException("Video export cancelled.","AbortError"))=>{if(!c){if(c=!0,y(),s&&s.state!=="inactive")try{s.stop()}catch{}g(b)}},v=()=>x(),C=()=>x(new Error("Video export stopped because the WebGL context was lost.")),P=()=>x(new Error("Video export timed out. Keep the viewer tab visible while recording."));return i?.addEventListener("abort",v,{once:!0}),e.addEventListener("webglcontextlost",C),d=setTimeout(P,3e4),{result:f,cancel:x,start(b){c||u!==void 0||(u=requestAnimationFrame(()=>{if(!c)try{o=e.captureStream(r);let E=new MediaRecorder(o,{mimeType:a,videoBitsPerSecond:n});s=E,E.ondataavailable=({data:T})=>{T.size>0&&h.push(T)},E.onerror=()=>x(new Error("The browser could not encode the video.")),E.onstop=()=>{if(c)return;c=!0,y();let T=new Blob(h,{type:E.mimeType||a});T.size===0?g(new Error("The browser produced an empty video.")):m(T)},E.start(1e3),clearTimeout(d),d=setTimeout(P,(b+30)*1e3)}catch(E){x(E)}}))},finish(){c||l||(l=!0,p=requestAnimationFrame(()=>{if(!c)try{if(!s)throw new Error("Video recording did not start.");s.stop()}catch(b){x(b)}}))}}}function If(e){let t=Df(e);t.current=e;let r=Df(null),[n,i]=Lf(null),[a,o]=Lf(0),s=fs(()=>r.current?.cancel(),[]),c=fs(()=>r.current!==null,[]);sM(()=>s,[e.modelUrl,s]);let l=fs(async(u={})=>{let{rendererCaptureRef:p,controlsRef:h,cinematicConfig:m,ready:g,onCaptureStart:f}=t.current,y=p.current,x=h.current;if(!g||!y||!x)throw new Error("Viewer not ready for video export.");if(y.gl.xr.isPresenting)throw new Error("Exit the XR session before recording a video.");if(r.current)throw new Error("A video export is already in progress.");let v=u.mode??(m?"cinematic":"turntable");if(v==="cinematic"&&!m)throw new Error("Enable a cinematic camera path before recording it.");let C=v==="cinematic"?m:{loop:!0},P=u.duration??(v==="turntable"&&u.format==="gif"?8:tu(C));if(!Number.isFinite(P)||P<=0||P>300)throw new Error("Video duration must be greater than 0 and at most 300 seconds.");let b=kf(y.gl.domElement,u);r.current=b;let E=x.getPosition(new Of),T=x.getTarget(new Of),_=x.enabled,M=ds(y.scene);x.stop(),x.enabled=!1,o(0),f(),i({config:{...C,duration:P,autoPlay:!1},onStarted:()=>b.start(P),onFinished:b.finish});try{return await b.result}finally{M(),x.enabled=_,x.setLookAt(E.x,E.y,E.z,T.x,T.y,T.z,!1),y.invalidate(),r.current=null,i(null)}},[]),d=fs(u=>{let p=Math.floor(u*100);o(h=>h===p?h:p)},[]);return{captureVideo:l,cancelVideo:s,isRecording:c,recording:n,progress:a,onProgress:d}}import{useCallback as lM,useEffect as cM,useRef as uM,useState as Ro}from"react";function Bf(e){let[t,r]=Ro(null),[n,i]=Ro(!1),[a,o]=Ro(!1),[s,c]=Ro(!1),[l,d]=Ro(null),u=uM(!1);cM(()=>{if(!t||!e){i(!1),o(!1),d(null);return}let h=t.ownerDocument;i(h.fullscreenEnabled===!0&&typeof t.requestFullscreen=="function"&&typeof h.exitFullscreen=="function");let m=()=>{o(h.fullscreenElement===t),d(null)};return m(),h.addEventListener("fullscreenchange",m),()=>h.removeEventListener("fullscreenchange",m)},[t,e]);let p=lM(async()=>{if(!t||!e||!n||u.current)return;let h=t.ownerDocument,m=h.fullscreenElement===t;u.current=!0,c(!0),d(null);try{m?await h.exitFullscreen():await t.requestFullscreen(),o(h.fullscreenElement===t)}catch{d(m?"Could not exit fullscreen. Press Escape to exit.":"Could not enter fullscreen. Check your browser or iframe fullscreen permissions and try again.")}finally{u.current=!1,c(!1)}},[t,e,n]);return{rootRef:r,supported:n,active:a,pending:s,error:l,toggle:p}}import{useCallback as gs,useEffect as zf,useRef as ko,useState as nu}from"react";function Nf(e,{onLost:t,onRestored:r,initiallyLost:n=!1}){let i=n,a=s=>{s.preventDefault(),!i&&(i=!0,t())},o=()=>{i&&(i=!1,r())};return e.addEventListener("webglcontextlost",a),e.addEventListener("webglcontextrestored",o),n&&t(),()=>{e.removeEventListener("webglcontextlost",a),e.removeEventListener("webglcontextrestored",o)}}function jf(e){let t=ko(e);t.current=e;let[r,n]=nu(null),[i,a]=nu(0),[o,s]=nu("ready"),c=ko(null),l=ko(!1),d=ko(null),u=ko(null),p=gs(f=>{u.current?.dispose(),u.current=null,d.current=f,n(f)},[]),h=gs(()=>{l.current||(l.current=!0,t.current?.(),c.current?.(),c.current=null,d.current&&(u.current=d.current),d.current=null,n(null),s("rebuilding"),a(f=>f+1))},[]),m=gs(()=>{c.current?.(),c.current=null;let f=d.current;d.current=null,n(null),f&&sm(f)},[]),g=gs(()=>{l.current=!1,s("lost")},[]);return zf(()=>()=>{u.current?.dispose(),u.current=null},[]),zf(()=>{if(!r)return;if(l.current=!1,s("ready"),Si(r)){let y=r,x=y.onDeviceLost;return y.onDeviceLost=v=>{console.warn("[react-immersive] The WebGPU device was lost.",v),g()},()=>{y.onDeviceLost=x}}let f=Nf(r.domElement,{initiallyLost:r.getContext().isContextLost(),onLost:g,onRestored:h});return c.current=f,()=>{f(),c.current===f&&(c.current=null)}},[r,g,h]),{generation:i,status:o,reload:h,fail:g,release:m,onRendererCreated:p}}import{useEffect as dM,useRef as pM}from"react";function mn(e,t){let r=pM(t);dM(()=>{let n=r.current;r.current=t,t.some((i,a)=>!Object.is(i,n[a]))&&e()},t)}function bs(e,t){return t||e}async function Vf(e,t){await e.setLookAt(...t.position,...t.target,!1);let r=e.camera;t.fov!=null&&Number.isFinite(t.fov)&&t.fov>0&&t.fov<180&&"fov"in r&&(r.fov=t.fov,r.updateProjectionMatrix()),t.zoom!=null&&Number.isFinite(t.zoom)&&t.zoom>0&&await e.zoomTo(t.zoom,!1)}import{Component as hM}from"react";var Oi=class extends hM{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(r,n){this.props.onError?.(r)}render(){return this.state.hasError?this.props.fallback??null:this.props.children}};import{useEffect as mM,useMemo as fM,useRef as gM}from"react";function Ff({modelUrl:e,tilesetUrl:t=null,getOptions:r,now:n=()=>performance.now(),timestamp:i=()=>new Date().toISOString(),sessionId:a=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`viewer-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`,log:o=c=>console.info("[react-immersive engagement]",c),warn:s=c=>console.warn("[react-immersive] onEngagement callback failed:",c)}){let c=n(),l=()=>{let S=r();return!!(S.onEngagement||S.debugEngagement)},d=S=>Math.max(0,Math.round(n()-S)),u=S=>{let{onEngagement:A,debugEngagement:D}=r();if(!A&&!D)return;let k={...S,sessionId:a,timestamp:i(),elapsedMs:d(c),modelUrl:e,tilesetUrl:t};D&&o(k);try{Promise.resolve(A?.(k)).catch(s)}catch(I){s(I)}},p=null,h=null,m="[]",g=null,f=null,y=S=>{p=S},x=S=>{!l()||p===S.objectKey||(p=S.objectKey,u({type:"part-viewed",...S}))},v=(S,A,D=null)=>{let k=JSON.stringify([D,A,S]);!l()||S===A||k===h||(h=k,u({type:"variant-chosen",variant:S,previousVariant:A,group:D}))},C=S=>{let A=JSON.stringify(S);A!==m&&(m=A,h=null)},P=()=>{!l()||g!==null||(g=n(),u({type:"ar-started"}))},b=(S="session-ended")=>{if(g===null)return;let A=d(g);g=null,u({type:"ar-ended",durationMs:A,reason:S})},E=(S="stopped")=>{if(!f)return;let{startedAt:A,annotationCount:D}=f;f=null,u({type:"tour-stopped",annotationCount:D,durationMs:d(A),reason:S})};return{setSelectedPart:y,viewPart:x,setActiveVariants:C,chooseVariant:v,startAR:P,endAR:b,startTour:S=>{!l()||S<=0||(E("restarted"),f={startedAt:n(),annotationCount:S},u({type:"tour-started",annotationCount:S}))},stopTour:E,completeTour:()=>{if(!f)return;let{startedAt:S,annotationCount:A}=f;f=null,u({type:"tour-completed",annotationCount:A,durationMs:d(S)})},interrupt:()=>{b("interrupted"),E("interrupted")},requestARLaunch:S=>u({type:"ar-launch-requested",channel:S})}}function Uf(e){let t=gM(e);t.current=e;let r=!!(e.onEngagement||e.debugEngagement),n=fM(()=>Ff({modelUrl:e.modelUrl,tilesetUrl:e.tilesetUrl,getOptions:()=>t.current}),[e.modelUrl,e.tilesetUrl,r]);return mM(()=>()=>n.interrupt(),[n]),n}var bM={glb:"GLB",gltf:"glTF",obj:"OBJ",fbx:"FBX",usdz:"USDZ",stl:"STL",ply:"PLY"},yM=/\.(glb|gltf|obj|fbx|usdz|stl|ply|zip)$/i;function xM(e,t){let r=e?.response?.status;if(typeof r=="number")return r;let n=/responded with (\d{3})/.exec(t);return n?Number(n[1]):null}function Gf(e,t,r,n){let i=e instanceof Error?e.message:e==null?"":String(e),a=(p,h)=>Zh(n,p,h),o=a("loadErrorTitle"),s=i||null;if(gm(e))return{title:o,detail:a("loadErrorPointCloud"),technical:s};let c=xM(e,i);if(c===404||c===410)return{title:o,detail:a("loadErrorNotFound",{status:c}),technical:s};if(c===401||c===403)return{title:o,detail:a("loadErrorDenied",{status:c}),technical:s};if(c!==null)return{title:o,detail:a("loadErrorStatus",{status:c}),technical:s};if(/failed to fetch|networkerror|load failed|network error/i.test(i))return{title:o,detail:a("loadErrorNetwork"),technical:s};if(/<!doctype|<html/i.test(i))return{title:o,detail:a("loadErrorHtml"),technical:s};let l=t.split(/[?#]/,1)[0],d=bM[r??fm(t)],u=yM.test(l);return{title:o,detail:u||r?a(r?"loadErrorInvalidExplicitFormat":"loadErrorInvalidFile",{format:d}):a("loadErrorMissingFormat",{format:d}),technical:s}}import{Color as vM}from"three";function Hf(e,t,r){let n=t[r]?.modelObjectId;return e.lighting.lights.filter(i=>{let a=i.attachment?.objectId;return a?Ci(t,a)===r||a===n:!1})}function iu(e,t){return e.lighting.lights.some(r=>t[r.id])?{...e,lighting:{...e.lighting,lights:e.lighting.lights.map(r=>t[r.id]?{...r,...t[r.id]}:r)}}:e}function Wf(e){let t=null;if(e?.traverse(i=>{if(t)return;let a=i.material;for(let o of Array.isArray(a)?a:a?[a]:[])if(o.emissive instanceof vM){t=o;return}}),!t)return{color:"#000000",intensity:0,on:!1};let r=`#${t.emissive.getHexString()}`,n=t.emissiveIntensity??1;return{color:r,intensity:n,on:r!=="#000000"&&n>0}}import{HexColorPicker as wM}from"react-colorful";import{Fragment as Xf,jsx as fn,jsxs as Do}from"react/jsx-runtime";function qf({kind:e,color:t,brightness:r,onColorChange:n,onBrightnessChange:i,onClose:a}){return fn("div",{className:"ri-popover ri-popover--inline",style:{padding:12},onPointerDown:o=>o.stopPropagation(),children:e==="change-light-color"?Do(Xf,{children:[fn("p",{className:"ri-popoverLabel",children:"Light color"}),fn(wM,{color:t,onChange:n}),Do("div",{className:"ri-inlineRow",children:[fn("span",{className:"ri-colorCode",children:t}),fn("button",{className:"ri-secondaryButton",onClick:a,children:"Done"})]})]}):Do(Xf,{children:[fn("p",{className:"ri-popoverLabel",children:"Brightness"}),fn("input",{type:"range",min:0,max:200,step:1,value:r,"aria-label":"Brightness",style:{width:"100%"},onChange:o=>i(Number(o.target.value))}),Do("div",{className:"ri-inlineRow",children:[Do("span",{className:"ri-colorCode",children:[r,"%"]}),fn("button",{className:"ri-secondaryButton",onClick:a,children:"Done"})]})]})})}import{useRef as PM,useState as Qf}from"react";import{ArrowDown as MM,ArrowLeft as SM,ArrowRight as CM,ArrowUp as TM}from"lucide-react";import{useEffect as _M,useRef as ou}from"react";function $f(e){let t=!1,r,n=()=>{t||(e(),t||(r=setTimeout(n,70)))};return e(),r=setTimeout(n,300),()=>{t=!0,clearTimeout(r)}}import{jsx as Lo,jsxs as Yf}from"react/jsx-runtime";function Kf({onNudge:e}){let t=ne(),r=ou(e);r.current=e;let n=ou(null),i=ou(null),a=()=>{n.current?.(),n.current=null,i.current=null};return _M(()=>{let o=c=>{c.pointerId===i.current&&a()},s=c=>{c.key==="Escape"&&a()};return window.addEventListener("pointerup",o,!0),window.addEventListener("pointercancel",o,!0),window.addEventListener("blur",a),window.addEventListener("keydown",s),()=>{a(),window.removeEventListener("pointerup",o,!0),window.removeEventListener("pointercancel",o,!0),window.removeEventListener("blur",a),window.removeEventListener("keydown",s)}},[]),Yf("div",{className:"ri-decalPosition",children:[Yf("div",{children:[Lo("div",{className:"ri-decalPosition__label",children:t("position")}),Lo("div",{className:"ri-decalPosition__hint",children:t("decalNudgeHint")})]}),Lo("div",{className:"ri-decalPosition__pad",role:"group","aria-label":t("decalNudgeControls"),children:[["up",TM],["left",SM],["right",CM],["down",MM]].map(([o,s])=>Lo("button",{type:"button",className:`ri-decalPosition__button ri-decalPosition__button--${o}`,"aria-label":t("moveDecal",{direction:t(o)}),title:t("moveDecalOnSurface",{direction:t(o)}),onPointerDown:c=>{c.button===0&&(c.preventDefault(),c.currentTarget.focus({preventScroll:!0}),a(),i.current=c.pointerId,n.current=$f(()=>r.current(o)))},onClick:c=>{c.detail===0&&r.current(o)},children:Lo(s,{size:16})},o))})]})}import{Fragment as Jf,jsx as at,jsxs as Tr}from"react/jsx-runtime";var EM=e=>Math.round(e*180/Math.PI);function Zf({kind:e,decals:t,activeId:r,error:n,moving:i,defaultSize:a,onSelect:o,onAddText:s,onAddImage:c,onChange:l,onMove:d,onNudge:u,onRemove:p,onClose:h}){let m=ne(),[g,f]=Qf(""),[y,x]=Qf("#ffffff"),v=PM(null),C=t.find(b=>b.id===r)??null;return Tr("div",{className:"ri-popover ri-popover--inline ri-decalControl",onPointerDown:b=>b.stopPropagation(),children:[e==="add-text"?Tr(Jf,{children:[at("p",{className:"ri-popoverLabel",children:m("text")}),Tr("div",{className:"ri-decalControl__row",children:[at("input",{className:"ri-decalControl__input",value:g,placeholder:m("yourText"),"aria-label":m("textToAdd"),onChange:b=>f(b.target.value)}),at("input",{type:"color",className:"ri-decalControl__color",value:y,"aria-label":m("textColour"),onChange:b=>x(b.target.value)})]}),at("button",{type:"button",className:"ri-uploadButton",disabled:!g.trim(),onClick:()=>{s(g.trim(),y)&&f("")},children:m("addText")})]}):Tr(Jf,{children:[at("p",{className:"ri-popoverLabel",children:m("image")}),at("button",{type:"button",className:"ri-uploadButton",onClick:()=>v.current?.click(),children:m("chooseImage")}),at("input",{ref:v,type:"file",accept:"image/png,image/jpeg,image/webp,image/svg+xml",className:"ri-hiddenInput","aria-label":m("imageToAdd"),onChange:b=>{let E=b.target.files?.[0];b.target.value="",E&&c(E)}})]}),n?at("div",{className:"ri-decalControl__hint",role:"alert",children:n}):null,t.length>0?at("div",{className:"ri-decalControl__list",role:"group","aria-label":m("added"),children:t.map((b,E)=>at("button",{type:"button",className:`ri-decalControl__chip ${b.id===r?"ri-decalControl__chip--active":""}`,"aria-pressed":b.id===r,onClick:()=>o(b.id),children:b.image?m("decalImage",{index:E+1}):b.text||m("decalText",{index:E+1})},b.id))}):null,C?Tr("div",{className:"ri-decalControl__editor",children:[at(Kf,{onNudge:b=>u(C.id,b)}),C.image?null:Tr("div",{className:"ri-decalControl__row",children:[at("input",{className:"ri-decalControl__input",value:C.text??"","aria-label":m("text"),onChange:b=>l(C.id,{text:b.target.value})}),at("input",{type:"color",className:"ri-decalControl__color",value:C.color??"#ffffff","aria-label":m("colour"),onChange:b=>l(C.id,{color:b.target.value})})]}),Tr("label",{className:"ri-decalControl__slider",children:[at("span",{children:m("size")}),at("input",{type:"range",min:a/10,max:a*4,step:a/50,value:C.size,"aria-label":m("size"),onChange:b=>l(C.id,{size:Number(b.target.value)})})]}),Tr("label",{className:"ri-decalControl__slider",children:[at("span",{children:m("turn")}),at("input",{type:"range",min:-180,max:180,step:1,value:EM(C.rotation??0),"aria-label":m("rotation"),onChange:b=>l(C.id,{rotation:Number(b.target.value)*Math.PI/180})})]}),Tr("div",{className:"ri-inlineRow",children:[at("button",{type:"button",className:"ri-secondaryButton","aria-pressed":i,title:m("dragTheDecalAcrossTheObjectsSurface"),onClick:()=>d(C.id),children:m("move")}),at("button",{type:"button",className:"ri-removeButton",onClick:()=>p(C.id),children:m("remove")})]})]}):null,Tr("div",{className:"ri-inlineRow",children:[at("span",{className:"ri-colorCode",children:t.length===0?m("noneAddedYet"):m("decalAdded",{count:t.length})}),at("button",{type:"button",className:"ri-secondaryButton",onClick:h,children:m("done")})]})]})}import{useEffect as KM,useRef as QM}from"react";import{useThree as JM}from"@react-three/fiber";import{Mesh as ZM,Raycaster as eS,Vector2 as mu,Vector3 as yg}from"three";import{BufferGeometry as AM,CanvasTexture as RM,Float32BufferAttribute as ys,Matrix4 as kM,Object3D as DM,SRGBColorSpace as LM,Uint16BufferAttribute as OM,Vector3 as Fr}from"three";var IM=.5,Oo=4;function BM(e,t=0){let r=new Fr(...e);r.lengthSq()<1e-12&&r.set(0,0,1),r.normalize();let n=new DM;return Math.abs(r.y)>.999&&n.up.set(0,0,-Math.sign(r.y)),n.lookAt(r),n.rotateZ(t),n.rotation.clone()}function NM(e,t,r){let n=null;if(e.bones&&t.bones){n=new Map;for(let[i,a]of e.bones)n.set(i,a*(1-r));for(let[i,a]of t.bones)n.set(i,(n.get(i)??0)+a*r)}return{position:e.position.clone().lerp(t.position,r),normal:e.normal.clone().lerp(t.normal,r),bones:n}}function eg(e,t,r,n){let i=o=>n?o.position[t]<=r:o.position[t]>=r,a=[];for(let o=0;o<e.length;o++){let s=e[o],c=e[(o+1)%e.length],l=i(s);if(l&&a.push(s),l!==i(c)){let d=c.position[t]-s.position[t];a.push(NM(s,c,(r-s.position[t])/d))}}return a}function xs(e,t,r){let n=e.geometry,i=n.getAttribute("position");if(!i)return null;let a=n.getAttribute("normal"),o=n.getAttribute("skinIndex"),s=n.getAttribute("skinWeight"),c=!!(o&&s),l=n.getIndex(),d=Math.max(t.size,1e-6),u=d/(r>0&&Number.isFinite(r)?r:1),p=Math.max(d,u)*IM,h={x:d/2,y:u/2,z:p/2},m=new kM().makeRotationFromEuler(BM(t.normal,t.rotation)).setPosition(...t.position),g=m.clone().invert(),f=(I,R)=>{let V=null;if(c){V=new Map;for(let L=0;L<Oo;L++){let O=s.getComponent(I,L);if(O<=0)continue;let G=o.getComponent(I,L);V.set(G,(V.get(G)??0)+O)}}return{position:R.clone(),normal:a?new Fr().fromBufferAttribute(a,I):new Fr,bones:V}},y=[],x=[],v=[],C=[],P=[],b=new Fr,E=new Fr,T=new Fr,_=I=>{if(v.push(.5+I.position.x/d,.5-I.position.y/u),b.copy(I.position).applyMatrix4(m),y.push(b.x,b.y,b.z),x.push(I.normal.x,I.normal.y,I.normal.z),!I.bones)return;let R=[...I.bones].sort((L,O)=>O[1]-L[1]).slice(0,Oo),V=R.reduce((L,[,O])=>L+O,0)||1;for(let L=0;L<Oo;L++)C.push(R[L]?.[0]??0),P.push((R[L]?.[1]??0)/V)},M=["x","y","z"],S=[new Fr,new Fr,new Fr],A=[0,0,0],D=(l?l.count:i.count)/3;for(let I=0;I<D;I++){for(let L=0;L<3;L++){let O=I*3+L;A[L]=l?l.getX(O):O,S[L].fromBufferAttribute(i,A[L]).applyMatrix4(g)}if(M.some(L=>S[0][L]>h[L]&&S[1][L]>h[L]&&S[2][L]>h[L]||S[0][L]<-h[L]&&S[1][L]<-h[L]&&S[2][L]<-h[L]))continue;let R=S.map((L,O)=>f(A[O],L));if(!a){E.copy(R[1].position).sub(R[0].position),T.copy(R[2].position).sub(R[0].position);let L=E.cross(T).transformDirection(m);for(let O of R)O.normal.copy(L)}let V=R;for(let L of M)if(V=eg(V,L,h[L],!0),V=eg(V,L,-h[L],!1),V.length<3)break;for(let L=1;L+1<V.length;L++)_(V[0]),_(V[L]),_(V[L+1])}if(y.length===0)return null;let k=new AM;return k.setAttribute("position",new ys(y,3)),k.setAttribute("normal",new ys(x,3)),k.setAttribute("uv",new ys(v,2)),c&&(k.setAttribute("skinIndex",new OM(C,Oo)),k.setAttribute("skinWeight",new ys(P,Oo))),k}function rg(e){return JSON.stringify([e.image??null,e.image?null:[e.text??"",e.color,e.fontFamily,e.fontWeight],e.position,e.normal,e.size,e.rotation??0])}var tg=256,au=24;function ng(e){let t=`${e.fontWeight??"bold"} ${tg-au*2}px ${e.fontFamily||"sans-serif"}`,r=document.createElement("canvas"),n=r.getContext("2d");n.font=t;let i=e.text||" ";r.width=Math.min(Math.max(Math.ceil(n.measureText(i).width)+au*2,8),4096),r.height=tg,n.font=t,n.textAlign="center",n.textBaseline="middle",n.fillStyle=e.color??"#ffffff",n.fillText(i,r.width/2,r.height/2,r.width-au);let a=new RM(r);return a.flipY=!1,a.colorSpace=LM,{texture:a,aspect:r.width/r.height}}import{useEffect as hg,useRef as FM}from"react";import{BufferGeometry as UM,Float32BufferAttribute as GM,Mesh as HM,MeshStandardMaterial as WM,SkinnedMesh as XM,SRGBColorSpace as fg}from"three";import{CanvasTexture as ig,Color as og,ImageLoader as zM,NoColorSpace as ws,RepeatWrapping as vs,SRGBColorSpace as uu,Texture as jM}from"three";var Ii=new Map,Ur={color:"#93c5fd",intensity:.07},Gn=new og(Ur.color).multiplyScalar(Ur.intensity),ag=new og(Ur.color),sg=.28,Bi=new Map,cu=new Map;function VM(e){return`${e.name}|${e.size}|${e.lastModified}`}function jk(e){let t=VM(e),r=e.name.lastIndexOf("."),n=r>0?e.name.slice(0,r):e.name,i=r>0?e.name.slice(r):"",a=`materials/${e.name}`,o=2;for(;;){let s=cu.get(a);if(s===void 0||s===t)return cu.set(a,t),a;a=`materials/${n}-${o}${i}`,o+=1}}function lg(e){return Bi.get(e)}function cg(e,t){let r=++e.loadGeneration;e.loaded=!1;let n=()=>{if(e.loadGeneration!==r)return;e.loaded=!0;let i=e.pending;e.pending=[];for(let a of i)a()};new zM().load(t,i=>{e.loadGeneration===r&&(e.texture.image=i,e.texture.needsUpdate=!0,n())},void 0,()=>{e.loadGeneration===r&&(console.warn(`Failed to load texture: ${t}`),n())})}function ug(e,t){for(let r of[uu,ws]){let n=Ii.get(Io(e,r));n&&cg(n,t)}}function Vk(e,t){let r=Bi.get(e);r&&r!==t&&r.startsWith("blob:")&&URL.revokeObjectURL(r),Bi.set(e,t),ug(e,t)}function Fk(e){let t=Bi.get(e);t&&(t.startsWith("blob:")&&URL.revokeObjectURL(t),Bi.delete(e),cu.delete(e),ug(e,e))}function Io(e,t){return`${t}|${e}`}function Bo(e,t=ws,r){let n=Io(e,t),i=Ii.get(n);if(i)return r&&!i.loaded&&i.pending.push(r),i.texture;let a=Bi.get(e)??e,o={texture:new jM,refCount:0,loaded:!1,pending:r?[r]:[],loadGeneration:0};return o.texture.flipY=!1,o.texture.colorSpace=t,Ii.set(n,o),cg(o,a),o.texture}function Ni(e,t=ws,r){let n=Bo(e,t,r);return Ii.get(Io(e,t)).refCount+=1,n}function Gr(e,t=ws){let r=Ii.get(Io(e,t));r&&(r.refCount-=1,r.refCount<=0&&(r.loadGeneration+=1,r.pending=[],r.texture.dispose(),Ii.delete(Io(e,t))))}function Ms(e,t,r,n,i,a=1,o=0){let s=e.offsetTextures??(e.offsetTextures={}),c=s[t],l=c;if(!l||l.sourcePath!==n||l.base!==r){c?.texture.dispose();let u=r.clone();u.wrapS=vs,u.wrapT=vs,u.center.set(.5,.5),u.needsUpdate=!0,l={texture:u,sourcePath:n,base:r},s[t]=l}let d=a>0?a:1;return l.texture.offset.set(i[0],i[1]),l.texture.repeat.set(1/d,1/d),l.texture.rotation=o,l.texture}function Ss(e,t){let r=e.offsetTextures,n=r?.[t];n&&(n.texture.dispose(),delete r[t])}function dg(e){let t=e.offsetTextures;if(t){for(let r of Object.values(t))r.texture.dispose();delete e.offsetTextures}}var su=null;function Cs(){if(su)return su;let e=256,t=document.createElement("canvas");t.width=e,t.height=e;let r=t.getContext("2d"),n=r.createRadialGradient(e*.35,e*.35,e*.02,e*.5,e*.5,e*.55);n.addColorStop(0,"#ffffff"),n.addColorStop(.4,"#b5b5b5"),n.addColorStop(1,"#3a3a3a"),r.fillStyle=n,r.fillRect(0,0,e,e);let i=new ig(t);return i.colorSpace=uu,su=i,i}var lu=null;function pg(){if(lu)return lu;let e=1024,t=8,r=e/t,n=["#ef4444","#f59e0b","#22c55e","#6366f1"],i=document.createElement("canvas");i.width=e,i.height=e;let a=i.getContext("2d");a.textAlign="center",a.textBaseline="middle";for(let s=0;s<t;s+=1)for(let c=0;c<t;c+=1){let l=c*r,d=s*r,u=(Math.floor(c/2)+Math.floor(s/2))%4;a.fillStyle=n[u],a.fillRect(l,d,r,r),a.strokeStyle="rgba(0, 0, 0, 0.28)",a.lineWidth=2;for(let x=1;x<4;x+=1){let v=x*r/4;a.beginPath(),a.moveTo(l+v,d),a.lineTo(l+v,d+r),a.moveTo(l,d+v),a.lineTo(l+r,d+v),a.stroke()}a.strokeStyle="#09090b",a.lineWidth=7,a.strokeRect(l,d,r,r);let p=l+r*.23,h=d+r*.72,m=l+r*.72,g=d+r*.23;a.lineCap="round",a.lineJoin="round",a.beginPath(),a.moveTo(p,h),a.lineTo(m,g),a.lineTo(m-r*.2,g),a.moveTo(m,g),a.lineTo(m,g+r*.2),a.stroke();let f=s*t+c+1;a.font=`700 ${Math.round(r*.2)}px ui-monospace, SFMono-Regular, Menlo, monospace`,a.fillStyle="#ffffff",a.strokeStyle="rgba(0, 0, 0, 0.85)",a.lineWidth=6;let y=String(f).padStart(2,"0");a.strokeText(y,l+r/2,d+r*.82),a.fillText(y,l+r/2,d+r*.82)}let o=new ig(i);return o.colorSpace=uu,o.wrapS=vs,o.wrapT=vs,o.flipY=!1,o.anisotropy=8,o.needsUpdate=!0,lu=o,o}var Hn="riDecal",hu="riDecalId";function du(){return new UM().setAttribute("position",new GM([],3))}function mg(e){let t=e.image;return t?.width&&t.height?t.width/t.height:1}function pu(e){e.disposed=!0,e.node.remove(e.mesh),e.mesh.geometry.dispose(),e.mesh.material.dispose(),e.imagePath&&Gr(e.imagePath,fg),e.ownTexture?.dispose()}function qM(e,t,r,n){let i=new WM({transparent:!0,polygonOffset:!0,polygonOffsetFactor:-4,depthWrite:!1,metalness:0,roughness:.7}),a=dr(e)&&e.skeleton?e:null,o=a?new XM(du(),i):new HM(du(),i);if(a){let l=o;l.bind(a.skeleton,a.bindMatrix),l.frustumCulled=!1,l.onBeforeRender=()=>{let d=Mf(a);d&&l.bindMatrixInverse.copy(d)}}o.userData[Hn]=!0,o.userData[hu]=t.id,o.raycast=()=>{},o.castShadow=!1,o.receiveShadow=!0,o.renderOrder=1;let s={node:e,mesh:o,signature:r,disposed:!1},c=l=>{let d=xs(e,t,l);o.geometry.dispose(),o.geometry=d??du(),o.visible=d!==null};if(t.image){s.imagePath=t.image;let l=Ni(t.image,fg,()=>{s.disposed||(c(mg(l)),i.needsUpdate=!0,n())});i.map=l,c(mg(l))}else{let{texture:l,aspect:d}=ng(t);s.ownTexture=l,i.map=l,c(d)}return e.add(o),s}function gg({objectBindings:e,nodeMap:t,invalidate:r}){let n=FM(new Map);hg(()=>{let i=n.current,a=new Set;for(let[o,s]of Object.entries(e)){if(!s.decals?.length)continue;let c=t[s.modelObjectId??o];if(_t(c))for(let l of s.decals){if(!l.image&&!l.text)continue;let d=`${o}
2
+ ${l.id}`,u=rg(l),p=i.get(d);p&&(p.node!==c||p.signature!==u)&&(pu(p),p=void 0),p||(p=qM(c,l,u,r),i.set(d,p)),p.mesh.material.opacity=(l.opacity??1)*(s.style?.material?.opacity??1),a.add(d)}}for(let[o,s]of i)a.has(o)||(pu(s),i.delete(o));r()},[e,t,r]),hg(()=>{let i=n.current;return()=>{for(let a of i.values())pu(a);i.clear()}},[])}import{Mesh as $M,SkinnedMesh as YM}from"three";function bg(e,t){let r=[];if(dr(e)){let n=e;n.computeBoundingSphere(),n.computeBoundingBox(),YM.prototype.raycast.call(n,t,r)}else $M.prototype.raycast.call(e,t,r);return r.sort((n,i)=>n.distance-i.distance)[0]}function xg({target:e,nodes:t,controls:r}){let{camera:n,gl:i,invalidate:a}=JM(),o=QM(e);return o.current=e,KM(()=>{let s=i.domElement,c=new eS,l=new mu,d=s.style.cursor,u=s.style.touchAction;s.style.cursor="grab",s.style.touchAction="none";let p=0,h=null,m=null,g=(E,T=new mu)=>{let _=s.getBoundingClientRect();l.set((E.clientX-_.left-T.x)/_.width*2-1,-((E.clientY-_.top-T.y)/_.height)*2+1),c.setFromCamera(l,n)},f=E=>{if(!m)return;g(E,m.offset),m.node.updateWorldMatrix(!0,!1);let T=c.intersectObject(m.node,!1)[0];if(!T)return;let _=Un({...T,ray:c.ray},m.node),M=xs(m.node,{...m.decal,..._},m.aspect);M&&(m.mesh.geometry!==m.geometry&&m.mesh.geometry.dispose(),m.mesh.geometry=M,m.surface=_,a())},y=E=>{if(!m)return;cancelAnimationFrame(p),p=0,h=null;let T=m;m=null,T.mesh.geometry!==T.geometry&&(E&&T.surface?T.geometry.dispose():(T.mesh.geometry.dispose(),T.mesh.geometry=T.geometry)),T.controller&&(T.controller.enabled=T.controlsEnabled),s.hasPointerCapture(T.pointerId)&&s.releasePointerCapture(T.pointerId),s.style.cursor="grab",a();let _=()=>{window.removeEventListener("click",M,!0),window.removeEventListener("pointerdown",_,!0),clearTimeout(S)},M=A=>{A.target===s&&(A.preventDefault(),A.stopImmediatePropagation()),_()},S=setTimeout(_,300);window.addEventListener("click",M,!0),window.addEventListener("pointerdown",_,!0),E&&T.surface&&o.current.onCommit(T.surface)},x=E=>{if(E.button!==0||m)return;let T=o.current,_=t.current[T.objectId];if(!(_ instanceof ZM)||!_.visible)return;let M=_.children.find(L=>L.userData[Hn]&&L.userData[hu]===T.decal.id);if(!M?.visible)return;_.updateWorldMatrix(!0,!0),g(E);let S=bg(M,c),A=c.intersectObject(_,!1)[0];if(!S||!A||S.distance>A.distance+1e-4)return;let D=new yg;if(dr(M)){let L=new yg,O=M.geometry.getAttribute("position").count;if(!O)return;for(let G=0;G<O;G++)D.add(M.getVertexPosition(G,L));D.divideScalar(O).applyMatrix4(M.matrixWorld)}else D.fromArray(T.decal.position).applyMatrix4(_.matrixWorld);D.project(n);let k=s.getBoundingClientRect(),I=new mu(E.clientX-(k.left+(D.x+1)/2*k.width),E.clientY-(k.top+(1-D.y)/2*k.height)),R=M.material.map?.image,V=r.current;m={pointerId:E.pointerId,node:_,mesh:M,geometry:M.geometry,decal:T.decal,surface:null,offset:I,aspect:R?.width&&R.height?R.width/R.height:1,controller:V,controlsEnabled:V?.enabled??!1},V&&(V.enabled=!1),E.preventDefault(),E.stopImmediatePropagation(),s.setPointerCapture(E.pointerId),s.style.cursor="grabbing"},v=E=>{!m||E.pointerId!==m.pointerId||(E.preventDefault(),E.stopImmediatePropagation(),h=E,p||(p=requestAnimationFrame(()=>{p=0,h&&f(h)})))},C=E=>{!m||E.pointerId!==m.pointerId||(E.preventDefault(),E.stopImmediatePropagation(),h&&f(h),y(!0))},P=()=>y(!1),b=E=>{E.key==="Escape"&&(y(!1),o.current.onCancel())};return s.addEventListener("pointerdown",x,!0),window.addEventListener("pointermove",v,{capture:!0,passive:!1}),window.addEventListener("pointerup",C,!0),window.addEventListener("pointercancel",P),window.addEventListener("blur",P),window.addEventListener("keydown",b),s.addEventListener("lostpointercapture",P),()=>{y(!1),s.style.cursor=d,s.style.touchAction=u,s.removeEventListener("pointerdown",x,!0),window.removeEventListener("pointermove",v,!0),window.removeEventListener("pointerup",C,!0),window.removeEventListener("pointercancel",P),window.removeEventListener("blur",P),window.removeEventListener("keydown",b),s.removeEventListener("lostpointercapture",P)}},[n,i,a,t,r,e.objectId,e.decal]),null}import{useCallback as jo,useEffect as dS,useState as Vo}from"react";import{GLTFExporter as tS}from"three-stdlib";function No(e,t){let r=URL.createObjectURL(e),n=document.createElement("a");n.href=r,n.download=t,n.style.display="none";try{document.body.appendChild(n),n.click()}finally{n.remove(),window.setTimeout(()=>{URL.revokeObjectURL(r)},1e3)}}function vg({scene:e,objectBindings:t,matRefs:r,downloadFilename:n,onComplete:i}){import("three").then(({Group:a,Mesh:o})=>{let s=new a,c=new Map;for(let[u,p]of Object.entries(t))c.set(p.modelObjectId??u,u);let l=u=>{let p=u;for(;p;){let h=p.name||p.uuid,m=c.get(h)??h,g=t[m];if(g?g.visible===!1:p.visible===!1)return!1;p=p.parent}return!0};e.traverse(u=>{let p=u;if(!p.isMesh||!p.geometry||!l(p))return;let h=p.name||p.uuid,m=c.get(h)??h,g=r[m]??p.material;if(!g)return;let f=new o(p.geometry,g);f.name=h,f.applyMatrix4(p.matrixWorld),s.add(f)}),new tS().parse(s,u=>{let p=u instanceof ArrayBuffer?new Blob([u],{type:"model/gltf-binary"}):new Blob([JSON.stringify(u)],{type:"model/gltf+json"}),h=u instanceof ArrayBuffer?".glb":".gltf";No(p,`${n}${h}`),i()},u=>{console.error("GLTFExporter error:",u),i()},{binary:!0})})}import{strToU8 as nS}from"fflate";import{zip as rS}from"fflate";function wg(e,t=6){return new Promise((r,n)=>{rS(e,{level:t},(i,a)=>{i?n(i):r(a)})})}var zo=2048,Mg=["#00e5ff","#ff4fd8","#ffe45e","#7cff6b","#ff784f","#a78bfa","#38bdf8","#fb7185"];function Sg(e){return e.split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;").split('"').join("&quot;").split("'").join("&apos;")}function bu(e,t){return e.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||t}function Tg(e){return bu(e,"model")}function fu(e,t){return e.index?Math.round(e.index.getX(t)):t}function iS(e,t,r){let n=fu(e,r),i=fu(e,r+1),a=fu(e,r+2);if(n>=t.count||i>=t.count||a>=t.count)return null;let o=[{index:n,u:t.getX(n),v:t.getY(n)},{index:i,u:t.getX(i),v:t.getY(i)},{index:a,u:t.getX(a),v:t.getY(a)}];return o.every(s=>Number.isFinite(s.u)&&Number.isFinite(s.v))?o:null}function Cg(e){return`${e.u.toFixed(6)},${e.v.toFixed(6)}`}function gu(e,t,r,n){let i,a;n?(i=t.index,a=r.index):(i=Cg(t),a=Cg(r));let o=i<a?`${i}|${a}`:`${a}|${i}`,s=e.get(o);s?s.count+=1:e.set(o,{count:1,start:t,end:r})}function oS(e,t,r){gu(e,t[0],t[1],r),gu(e,t[1],t[2],r),gu(e,t[2],t[0],r)}function aS(e,t){return Array.isArray(e)?e[t]??null:e}function sS(e){let t=new Map,r=0,n=0,i=0;return e.traverse(a=>{let o=a;if(!o.isMesh||!o.geometry||!o.material)return;let s=o.geometry,c=s.getAttribute("uv");if(!c||c.itemSize<2||c.count<3)return;r+=1;let l=o.name||`Mesh ${r}`,d=s.index?.count??c.count,u=s.groups.length>0?s.groups:[{start:0,count:d,materialIndex:0}];for(let p of u){let h=p.materialIndex??0,m=aS(o.material,h);if(!m)continue;let g=t.get(m.uuid);g||(n+=1,g={name:m.name||`Material ${n}`,layers:new Map},t.set(m.uuid,g));let f=g.layers.get(o.uuid);f||(f={name:l,color:Mg[i%Mg.length],edges:new Map},i+=1,g.layers.set(o.uuid,f));let y=Math.max(0,p.start),x=Math.min(d,y+p.count);for(let v=y;v+2<x;v+=3){let C=iS(s,c,v);C&&oS(f.edges,C,!!s.index)}}}),[...t.values()].filter(a=>[...a.layers.values()].some(o=>o.edges.size>0))}function Ts(e){return(e*zo).toFixed(2)}function lS(e){return`M${Ts(e.start.u)} ${Ts(1-e.start.v)}L${Ts(e.end.u)} ${Ts(1-e.end.v)}`}function cS(e){let t=Sg(e.name),r=[...e.layers.values()].filter(n=>n.edges.size>0).map((n,i)=>{let a=Sg(n.name),o=`${bu(n.name,"mesh")}-${i+1}`,s=[...n.edges.values()],c=s.filter(u=>u.count===1),d=(c.length>0?c:s).map(lS).join("");return[` <g id="${o}" data-mesh="${a}" fill="none" stroke="${n.color}"`,' stroke-width="1" stroke-linejoin="round" vector-effect="non-scaling-stroke">',` <title>${a}</title>`,` <path d="${d}"/>`," </g>"].join(`
3
+ `)}).join(`
4
+ `);return['<?xml version="1.0" encoding="UTF-8"?>',`<svg xmlns="http://www.w3.org/2000/svg" width="${zo}" height="${zo}" viewBox="0 0 ${zo} ${zo}">`,` <title>${t} UV layout</title>`," <desc>UV0 island-outline template exported by React Immersive. The SVG canvas maps to the complete 0\u20131 texture area.</desc>",' <rect width="2048" height="2048" fill="none" stroke="#94a3b8" stroke-width="2"/>',r,"</svg>"].join(`
5
+ `)}function uS(e,t="model"){let r=sS(e),n=Tg(t);return r.map((i,a)=>{let o=bu(i.name,`material-${a+1}`);return{filename:r.length===1?`${n}-uv-layout.svg`:`${n}-uv-${o}-${a+1}.svg`,materialName:i.name,meshCount:[...i.layers.values()].filter(c=>c.edges.size>0).length,svg:cS(i)}})}async function _g(e,t="model"){let r=uS(e,t);if(r.length===0)return r;if(r.length===1)return No(new Blob([r[0].svg],{type:"image/svg+xml;charset=utf-8"}),r[0].filename),r;let n=Object.fromEntries(r.map(a=>[a.filename,nS(a.svg)])),i=await wg(n);return No(new Blob([i],{type:"application/zip"}),`${Tg(t)}-uv-layouts.zip`),r}function Pg({sceneRef:e,materialRefs:t,rendererCaptureRef:r,objectBindings:n,downloadFilename:i,captureVideo:a}){let[o,s]=Vo(!1),[c,l]=Vo(!1),[d,u]=Vo(null),[p,h]=Vo(null),[m,g]=Vo("auto");dS(()=>{if(!c)return;let P=()=>l(!1);return window.addEventListener("pointerdown",P),()=>window.removeEventListener("pointerdown",P)},[c]);let f=jo(()=>{u(null),h(null),l(P=>!P)},[]),y=jo(()=>{let P=e.current;P&&(l(!1),s(!0),vg({scene:P,objectBindings:n,matRefs:t.current,downloadFilename:i,onComplete:()=>s(!1)}))},[i,t,n,e]),x=jo(()=>{l(!1),ps(r.current).then(P=>{let b=document.createElement("a");b.href=P,b.download=`${i}.png`,document.body.appendChild(b),b.click(),document.body.removeChild(b)}).catch(P=>{console.error("Screenshot failed:",P)})},[i,r]),v=jo(async()=>{let P=e.current;if(P)try{if((await _g(P,i)).length===0){u("This model does not contain UV coordinates.");return}u(null),l(!1)}catch(b){console.error("UV layout export failed:",b),u("Could not create the UV layout archive.")}},[i,e]),C=jo(async P=>{l(!1),h(null);try{let b=await a({mode:P,format:m}),E=b.type==="image/gif"?"gif":b.type.startsWith("video/mp4")?"mp4":"webm",T=URL.createObjectURL(b),_=document.createElement("a");_.href=T,_.download=`${i}-${P}.${E}`,document.body.appendChild(_);try{_.click()}finally{_.remove(),setTimeout(()=>URL.revokeObjectURL(T),1e3)}}catch(b){if(b instanceof DOMException&&b.name==="AbortError")return;h(b instanceof Error?b.message:"Could not export the video."),l(!0)}},[a,i,m]);return{isDownloading:o,downloadMenuOpen:c,uvExportError:d,toggleDownloadMenu:f,handleDownloadMesh:y,handleDownloadScreenshot:x,handleDownloadUvLayout:v,handleDownloadVideo:C,videoFormat:m,setVideoFormat:g,videoExportError:p}}import{useCallback as rr,useEffect as Fo,useRef as As,useReducer as gS,useState as zi}from"react";import{Box3 as Ig,Raycaster as bS,Vector2 as Og,Vector3 as yu}from"three";import{Matrix4 as pS,Mesh as Eg,ShapeUtils as hS,Vector2 as Ag,Vector3 as pr,Vector4 as mS}from"three";function _s(e){if(e.length!==3)return null;let t=new pr(...e[0]).sub(new pr(...e[1])),r=new pr(...e[2]).sub(new pr(...e[1]));return t.lengthSq()===0||r.lengthSq()===0?null:Math.acos(Math.max(-1,Math.min(1,t.normalize().dot(r.normalize()))))*180/Math.PI}function Rg(e,t){if(!e.normal)return null;let r=new pr(...e.normal);if(r.lengthSq()===0)return null;r.normalize();let n=new pr(...t),i=n.clone().sub(new pr(...e.position)).dot(r);return{distance:Math.abs(i),projection:n.addScaledVector(r,-i).toArray()}}function Ps(e){if(e.length<3)return{error:"Pick at least three points to finish the area."};let t=new pr(...e[0]),r=e.map(f=>new pr(...f).sub(t)),n=Math.max(...r.map(f=>f.length()));if(n===0)return{error:"Area points must be distinct."};let i=new pr;for(let f=1;f<r.length-1;f+=1){let y=r[f].clone().cross(r[f+1]);y.lengthSq()>i.lengthSq()&&i.copy(y)}if(i.length()<=n*n*1e-10)return{error:"Area points must not lie on one straight line."};i.normalize();let a=Math.max(n*1e-5,Number.EPSILON*Math.max(...e.flat().map(Math.abs))*32);if(r.some(f=>Math.abs(f.dot(i))>a))return{error:"Area points must lie on one plane."};let o=r.find(f=>f.length()>n*1e-10).clone().normalize(),s=i.clone().cross(o).normalize(),c=r.map(f=>new Ag(f.dot(o),f.dot(s))),l=(f,y,x)=>(y.x-f.x)*(x.y-f.y)-(y.y-f.y)*(x.x-f.x),d=n*n*1e-10,u=(f,y,x)=>Math.abs(l(f,y,x))<=d&&x.x>=Math.min(f.x,y.x)-n*1e-10&&x.x<=Math.max(f.x,y.x)+n*1e-10&&x.y>=Math.min(f.y,y.y)-n*1e-10&&x.y<=Math.max(f.y,y.y)+n*1e-10;for(let f=0;f<c.length;f+=1){let y=c[f],x=c[(f+1)%c.length];if(y.distanceTo(x)<=n*1e-10)return{error:"Area points must be distinct."};for(let v=f+1;v<c.length;v+=1){if(v===f+1||f===0&&v===c.length-1)continue;let C=c[v],P=c[(v+1)%c.length],b=l(y,x,C),E=l(y,x,P),T=l(C,P,y),_=l(C,P,x);if(b*E<0&&T*_<0||u(y,x,C)||u(y,x,P)||u(C,P,y)||u(C,P,x))return{error:"Area edges must not cross or touch each other."}}}let p=0,h=0,m=0;for(let f=0;f<c.length;f+=1){let y=c[f],x=c[(f+1)%c.length],v=y.x*x.y-x.x*y.y;p+=v,h+=(y.x+x.x)*v,m+=(y.y+x.y)*v}if(Math.abs(p)<=d)return{error:"The polygon has no measurable area."};let g=t.clone().addScaledVector(o,h/(3*p)).addScaledVector(s,m/(3*p));return{area:Math.abs(p)/2,center:g.toArray(),triangles:hS.triangulateShape(c,[])}}function fS(e){if(!(e.object instanceof Eg)||!e.face)return null;let t=e.object,r=t.matrixWorld.clone();if(e.instanceId!==void 0&&"getMatrixAt"in t){let n=new pS;t.getMatrixAt(e.instanceId,n),r.multiply(n)}return[e.face.a,e.face.b,e.face.c].map(n=>t.getVertexPosition(n,new pr).applyMatrix4(r))}function kg(e){if(!(e.object instanceof Eg))return!1;for(let r=e.object;r;r=r.parent)if(!r.visible||r.userData.riEditorGizmo||r.userData.riDecal)return!1;return(Array.isArray(e.object.material)?e.object.material:[e.object.material])[e.face?.materialIndex??0]?.visible!==!1}function Dg(e,t,r,n,i,a=12){let o=fS(e),s=o?o[1].clone().sub(o[0]).cross(o[2].clone().sub(o[0])).normalize():null,c={position:e.point.toArray(),...s&&s.lengthSq()>0?{normal:s.toArray()}:{},...o?{faceVertices:o.map(p=>p.toArray())}:{}};if(!o||i==="none")return c;let l=p=>{let h=new mS(p.x,p.y,p.z,1).applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix);return h.w<=0||h.z/h.w<-1||h.z/h.w>1?null:{screen:new Ag((h.x/h.w+1)*n.width/2,(1-h.y/h.w)*n.height/2),w:h.w}},d=o.map(l),u=a;if((i==="vertex"||i==="auto")&&(d.forEach((p,h)=>{let m=p?.screen.distanceTo(r)??1/0;m<=u&&(u=m,c.position=o[h].toArray(),c.snapped="vertex")}),c.snapped))return c;if(i==="edge"||i==="auto")for(let p=0;p<3;p+=1){let h=(p+1)%3,m=d[p],g=d[h];if(!m||!g)continue;let f=g.screen.clone().sub(m.screen);if(f.lengthSq()===0)continue;let y=Math.max(0,Math.min(1,r.clone().sub(m.screen).dot(f)/f.lengthSq())),x=m.screen.clone().addScaledVector(f,y).distanceTo(r);if(x<=u){u=x;let v=y*m.w/((1-y)*g.w+y*m.w);c.position=o[p].clone().lerp(o[h],v).toArray(),c.snapped="edge"}}return c}var Es={tool:"distance",points:[],areaClosed:!1,error:null};function Lg(e,t){if(t.type==="tool")return{...Es,tool:t.tool};if(t.type==="clear")return{...Es,tool:e.tool};if(t.type==="undo")return{...e,points:e.points.slice(0,-1),areaClosed:!1,error:null};if(t.type==="finishArea"){if(e.tool!=="area")return e;let a=Ps(e.points.map(o=>o.position));return"error"in a?{...e,error:a.error}:{...e,areaClosed:!0,error:null}}if(t.type!=="place")return e;let n=e.areaClosed||e.tool==="angle"&&e.points.length===3||e.tool==="pointToPlane"&&e.points.length===2?[]:e.points;if(e.tool==="pointToPlane"&&n.length===0&&!t.point.normal)return{...e,error:"Pick a triangle face to define the reference plane."};if(n.length>=256)return{...e,error:"Finish or clear this measurement before adding more points."};let i=[...n,t.point];return e.tool==="angle"&&i.length===3&&_s(i.map(a=>a.position))===null?{...e,error:"Pick a point away from the angle's vertex."}:{...e,points:i,areaClosed:!1,error:null}}function yS(e){let t=new Ig().setFromObject(e),r=new yu;return t.getSize(r),{min:[t.min.x,t.min.y,t.min.z],max:[t.max.x,t.max.y,t.max.z],size:[r.x,r.y,r.z]}}function xS(e){let t=new Ig().setFromObject(e);if(t.isEmpty())return null;let r=t.getCenter(new yu),n=t.getSize(new yu).length()/2;return!Number.isFinite(n)||n<=0?null:{center:[r.x,r.y,r.z],radius:n}}function Bg({canvasAreaRef:e,controlsRef:t,sceneRef:r,modelUrl:n,modelRotation:i,bindingTransformSignature:a,modelLoaded:o,enabled:s}){let[c,l]=zi(!1),[d,u]=gS(Lg,Es),[p,h]=zi("none"),[m,g]=zi(null),[f,y]=zi(!1),[x,v]=zi(null),[C,P]=zi(null),b=As(!1),E=As(0),T=As(null),_=As(null);b.current=c&&s;let M=rr(H=>{H.updateMatrixWorld(!0),v(yS(H)),P(xS(H))},[]),S=rr(()=>{u({type:"clear"}),g(null)},[]),A=rr(H=>{u({type:"tool",tool:H}),g(null)},[]),D=rr(()=>u({type:"undo"}),[]),k=rr(()=>u({type:"finishArea"}),[]),I=rr(()=>l(H=>!H),[]),R=rr(()=>y(H=>!H),[]),V=rr(H=>{!b.current||H.button!==0||(T.current={x:H.clientX,y:H.clientY})},[]),L=rr((H,be)=>{let De=e.current,Z=t.current?.camera,ye=r.current;if(!De||!Z||!ye)return null;let me=De.getBoundingClientRect();if(!me.width||!me.height)return null;ye.updateMatrixWorld(!0),Z.updateMatrixWorld(!0);let je=new Og(H-me.left,be-me.top),lt=new bS;lt.setFromCamera(new Og(je.x/me.width*2-1,1-je.y/me.height*2),Z);let fe=lt.intersectObject(ye,!0).find(kg);return fe?Dg(fe,Z,je,me,p):null},[e,t,r,p]),O=rr(()=>{_.current!==null&&cancelAnimationFrame(_.current),_.current=null,g(null)},[]),G=rr(H=>{if(!b.current||p==="none"||H.buttons!==0||H.target.closest("button, input, select, label, textarea, .ri-measureTools")){O();return}_.current!==null&&cancelAnimationFrame(_.current);let{clientX:be,clientY:De}=H;_.current=requestAnimationFrame(()=>{_.current=null;let Z=L(be,De);g(Z?.snapped?Z:null)})},[O,L,p]),le=rr(H=>{if(!b.current)return;let be=T.current;if(T.current=null,be&&Math.hypot(H.clientX-be.x,H.clientY-be.y)>6||H.target.closest("button, input, select, label, textarea, .ri-measureTools"))return;let Z=L(H.clientX,H.clientY);Z&&(E.current+=1,u({type:"place",point:{...Z,id:E.current}}))},[L]);return Fo(()=>{S(),v(null),P(null)},[n,S]),Fo(()=>{S()},[i,a,S]),Fo(()=>(O(),O),[O,c,p]),Fo(()=>{s||(l(!1),O())},[s,O]),Fo(()=>{let H=r.current;!o||!H||M(H)},[a,o,M,r]),{measureMode:c,measureModeRef:b,measurePoints:d.points,measurementTool:d.tool,areaClosed:d.areaClosed,measurementError:d.error,selectMeasurementTool:A,undoMeasurementPoint:D,finishMeasureArea:k,snapMode:p,setSnapMode:h,snapPreview:m,handleMeasurePointerMove:G,clearSnapPreview:O,showDimensions:f,measureBox:x,modelBounds:C,refreshBounds:M,clearMeasurements:S,toggleMeasureMode:I,toggleDimensions:R,handleMeasurePointerDown:V,handleMeasureClick:le}}import{createPortal as vS}from"react-dom";import{createXRStore as wS}from"@react-three/xr";import{MapPin as MS}from"lucide-react";import{useCallback as Wn,useEffect as Xn,useMemo as zg,useRef as SS,useState as gn}from"react";function Ng(e,t){let r=null,n=a=>{let o=a.mode==="immersive-ar"?a.session??null:null;o!==r&&(r&&t.endAR(),r=o,r&&t.startAR())},i=e.subscribe(n);return n(e.getState()),()=>{i(),r&&t.endAR("interrupted"),r=null}}import{Fragment as CS,jsx as ji,jsxs as xu}from"react/jsx-runtime";var jg={canPlace:!1,isPlacementMode:!0,isModelPlaced:!1};function Vg({enableXR:e,usdzUrl:t,mobileHandoffUrl:r,engagement:n}){let i=ne(),a=SS(null),o=zg(()=>{if(!e||typeof navigator>"u")return null;let O=navigator.xr;if(!O||typeof O.isSessionSupported!="function"||typeof O.addEventListener!="function")return null;try{return wS({emulate:!1})}catch{return null}},[e]),[s,c]=gn(!1),[l,d]=gn(!1),[u,p]=gn(!0),[h,m]=gn(null),[g,f]=gn(!1),[y,x]=gn(!1),[v,C]=gn(jg),[P,b]=gn(!1),E=zg(()=>e&&!!t?.trim()&&cm(),[e,t]);Xn(()=>{p(um())},[]);let T=Wn(()=>{if(typeof window>"u")return null;try{let O=new URL(r?.trim()||window.location.href,window.location.href);return O.protocol==="http:"||O.protocol==="https:"?O.toString():null}catch{return null}},[r]);Xn(()=>{if(!e||u){m(null),f(!1);return}m(T())},[e,u,T]),Xn(()=>{if(o)return o.subscribe(O=>x(O.session!=null&&O.mode==="immersive-ar"))},[o]),Xn(()=>{if(o)return Ng(o,n)},[o,n]),Xn(()=>{b(!1),C(jg)},[y]),Xn(()=>{if(!e||typeof navigator>"u")return;let O=navigator.xr;if(!O?.isSessionSupported)return;let G=!1;return O.isSessionSupported("immersive-ar").then(le=>!G&&c(le)).catch(()=>{}),O.isSessionSupported("immersive-vr").then(le=>!G&&d(le)).catch(()=>{}),()=>{G=!0}},[e]);let _=Wn(()=>{let O=T();O&&(n.requestARLaunch("mobile-handoff"),m(O),f(!0))},[T,n]),M=Wn(()=>f(!1),[]),S=Wn(()=>{let O=t?.trim();if(!O)return;n.requestARLaunch("quick-look");let G=document.createElement("a");G.setAttribute("rel","ar"),G.href=O,G.style.display="none";let le=document.createElement("img");le.alt="",le.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",G.appendChild(le),document.body.appendChild(G),G.click(),G.remove()},[t,n]),A=Wn(O=>{C(O),O.isPlacementMode||b(!1)},[]),D=Wn(O=>{b(!1),O?a.current?.finishPlacementMode():a.current?.cancelPlacementMode()},[]),k=Wn(O=>{O.preventDefault(),b(!0),a.current?.startPlacementMode()},[]);Xn(()=>{if(!P)return;let O=()=>D(!0),G=()=>D(!1);return window.addEventListener("pointerup",O),window.addEventListener("pointercancel",G),()=>{window.removeEventListener("pointerup",O),window.removeEventListener("pointercancel",G)}},[D,P]);let I=v.isModelPlaced?v.isPlacementMode?v.canPlace?i("arReleaseToPlace"):i("arFindSurface"):null:v.canPlace?null:i("arFindSurface"),R=v.isModelPlaced&&!v.isPlacementMode?i("arGestureHint"):null,V=o?.getState().domOverlayRoot??null,L=y&&V?vS(xu(CS,{children:[R&&ji("div",{className:"ri-arHintOverlay",children:ji("div",{className:"ri-arHint",children:R})}),ji("div",{className:"ri-arOverlay",children:xu("div",{className:"ri-arControls",children:[I&&ji("div",{className:"ri-arStatus",children:I}),v.isModelPlaced&&xu("button",{type:"button",className:`ri-arActionButton ${P?"ri-arActionButton--active":""}`,onPointerDown:O=>k(O.nativeEvent),"aria-pressed":P,children:[ji(MS,{size:14}),i("arRelocate")]}),!v.isModelPlaced&&v.canPlace&&ji("button",{type:"button",className:"ri-arActionButton ri-arActionButton--primary",onClick:()=>a.current?.placeCurrent(),children:i("tapToPlace")})]})})]}),V):null;return{xrStore:o,presenterRef:a,arSupported:s,vrSupported:l,quickLookSupported:E,resolvedMobileHandoffUrl:h,isMobileHandoffOpen:g,arOverlay:L,openMobileHandoff:_,closeMobileHandoff:M,openQuickLook:S,handleARStateChange:A}}import{Canvas as TC,useThree as cb}from"@react-three/fiber";import{Environment as _C}from"@react-three/drei";import{XR as PC}from"@react-three/xr";import{ACESFilmicToneMapping as EC,LinearToneMapping as AC,NoToneMapping as db,ReinhardToneMapping as RC}from"three";import{Suspense as kC,useEffect as DC,useMemo as Bs,useState as LC}from"react";import{useFrame as Uo,useThree as Hr}from"@react-three/fiber";import{ContactShadows as TS}from"@react-three/drei";import{useXR as Fg}from"@react-three/xr";import{Color as _S,PerspectiveCamera as PS}from"three";import{useEffect as Vi,useLayoutEffect as ES,useRef as Rs}from"react";import{Fragment as RS,jsx as Ug,jsxs as kS}from"react/jsx-runtime";function Gg({renderMode:e,suspended:t=!1}){let{scene:r}=Hr(),n=Hr(s=>s.setFrameloop),i=Fg(s=>s.session!=null),a=Fg(s=>s.mode==="immersive-ar"),o=Rs(void 0);return Vi(()=>{n(t?"never":i?"always":e)},[i,e,t,n]),Vi(()=>{a?(o.current=r.background,r.background=null):o.current!==void 0&&(r.background=o.current,o.current=void 0)},[a,r]),Uo(()=>{a&&r.background!==null&&(r.background=null)}),null}function Hg({onPresentingChange:e}){let t=Hr(i=>i.gl),r=Rs(null);Vi(()=>{let i=t.xr;if(!i)return;let a=c=>{c?(r.current=t.shadowMap.enabled,t.shadowMap.enabled=!1):r.current!==null&&(t.shadowMap.enabled=r.current,r.current=null),e(c)},o=()=>a(!0),s=()=>a(!1);return i.addEventListener("sessionstart",o),i.addEventListener("sessionend",s),a(i.isPresenting),()=>{i.removeEventListener("sessionstart",o),i.removeEventListener("sessionend",s)}},[t,e]);let n=Rs(0);return Uo(()=>{if(!t.xr.isPresenting)return;let i=performance.now();if(i-n.current<1e3)return;n.current=i;let a=t.xr}),null}function Wg({active:e}){let t=Hr(r=>r.invalidate);return Vi(()=>{e&&t()},[e,t]),Uo(()=>{e&&t()}),null}function Xg(e){let t=Hr(n=>n.gl),r=Rs(t.autoClear);return Uo(()=>{r.current=t.autoClear,t.autoClear=!0},-1),kS(RS,{children:[Ug(TS,{...e}),Ug(AS,{saved:r})]})}function AS({saved:e}){let t=Hr(r=>r.gl);return Uo(()=>{t.autoClear=e.current}),null}function qg({color:e}){let{scene:t}=Hr();return Vi(()=>{let r=t.background;return t.background=e?new _S(e):null,()=>{t.background=r}},[t,e]),null}function $g({rotation:e}){let{scene:t}=Hr();return ES(()=>{let r=e*Math.PI/180;t.environmentRotation.set(0,r,0),t.backgroundRotation.set(0,r,0)}),null}function Yg({cameraConfig:e}){let{camera:t}=Hr();return Vi(()=>{if(!(t instanceof PS))return;let r=e?.fov;typeof r=="number"&&t.fov!==r&&(t.fov=r,t.updateProjectionMatrix())},[t,e]),null}import{useThree as Os}from"@react-three/fiber";import{Autofocus as $S,Bloom as YS,BrightnessContrast as KS,ChromaticAberration as QS,ColorAverage as JS,DepthOfField as ZS,DotScreen as eC,EffectComposer as tC,Glitch as rC,GodRays as nC,Grid as iC,HueSaturation as oC,Noise as aC,Outline as sC,Pixelation as lC,Ramp as cC,Scanline as uC,SelectiveBloom as dC,Sepia as pC,SMAA as hC,SSAO as mC,ToneMapping as fC,Vignette as gC}from"@react-three/postprocessing";import{BlendFunction as Go,KernelSize as bC}from"postprocessing";import{Color as Is,Vector2 as Ho}from"three";import{memo as yC,useCallback as xC,useEffect as ob,useMemo as Wo,useRef as ab,useState as sb}from"react";import{forwardRef as DS,useImperativeHandle as LS,useMemo as OS}from"react";import{BlendFunction as IS,Effect as BS}from"postprocessing";import{Uniform as NS}from"three";import{jsx as jS}from"react/jsx-runtime";var zS=`
6
+ uniform float exposure;
7
+ void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) {
8
+ outputColor = vec4(inputColor.rgb * exposure, inputColor.a);
9
+ }
10
+ `,vu=class extends BS{constructor(t=1){super("ExposureEffect",zS,{blendFunction:IS.NORMAL,uniforms:new Map([["exposure",new NS(t)]])})}set exposure(t){this.uniforms.get("exposure").value=t}},Kg=DS(function({exposure:t},r){let n=OS(()=>new vu(t),[]);return n.exposure=t,LS(r,()=>n,[n]),jS("primitive",{object:n,dispose:null})});import{useFrame as VS,useThree as ks}from"@react-three/fiber";import*as eb from"@react-three/postprocessing";import{BlendFunction as FS}from"postprocessing";import{Color as US,MathUtils as GS,Mesh as HS,Vector2 as Qg,Vector3 as Jg}from"three";import{useEffect as Zg,useMemo as Ds,useRef as wu}from"react";import{jsx as XS}from"react/jsx-runtime";var WS=eb.LensFlareEffect;function tb({config:e}){let t=ks(p=>p.camera),r=ks(p=>p.raycaster),n=ks(p=>p.scene),i=ks(p=>p.viewport),a=wu(null),o=wu(new Jg),s=wu(new Qg),c=Ds(()=>new Jg(...e.lensPosition),[e.lensPosition]),l=Ds(()=>new US(e.colorGain??"#141414"),[e.colorGain]),d=Ds(()=>new Qg(0,0),[]),u=Ds(()=>new WS({blendFunction:FS.NORMAL,enabled:!0,glareSize:e.glareSize,lensPosition:c,screenRes:d,starPoints:6,flareSize:e.flareSize,flareSpeed:e.flareSpeed,flareShape:e.flareShape,animated:e.animated,anamorphic:e.anamorphic,colorGain:l,lensDirtTexture:null,haloScale:e.haloScale,secondaryGhosts:e.secondaryGhosts,aditionalStreaks:e.aditionalStreaks,ghostScale:e.ghostScale,opacity:e.opacity,starBurst:e.starBurst}),[l,e.aditionalStreaks,e.anamorphic,e.animated,e.flareShape,e.flareSize,e.flareSpeed,e.glareSize,e.haloScale,e.ghostScale,e.opacity,e.secondaryGhosts,e.starBurst,c,d]);return Zg(()=>(a.current=u,()=>{u.dispose(),a.current=null}),[u]),Zg(()=>{let p=u.uniforms.get("screenRes");p&&(p.value.x=i.width,p.value.y=i.height)},[u,i]),VS((p,h)=>{let m=a.current;if(!m)return;let g=m.uniforms.get("lensPosition"),f=m.uniforms.get("opacity");if(!g||!f)return;let y=1;if(o.current.copy(c).project(t),o.current.z>1)return;g.value.x=o.current.x,g.value.y=o.current.y,s.current.x=o.current.x,s.current.y=o.current.y,r.setFromCamera(s.current,t);let x=r.intersectObjects(n.children,!0),{object:v}=x[0]||{};v&&(v.userData?.lensflare==="no-occlusion"?y=0:v instanceof HS&&(v.material.uniforms?._transmission?.value>.2||v.material._transmission&&v.material._transmission>.2?y=.2:v.material.transparent&&(y=v.material.opacity))),f.value=GS.damp(f.value,y,12,h)}),XS("primitive",{object:u,dispose:null})}import{RampType as Mu}from"@react-three/postprocessing";import{GlitchMode as Su,KernelSize as Fi,ToneMappingMode as Cu}from"postprocessing";import{Color as qS}from"three";function rb(e){return e==="linear"?Cu.LINEAR:e==="reinhard"?Cu.REINHARD:Cu.ACES_FILMIC}function Ls(e){switch(e){case"verySmall":return Fi.VERY_SMALL;case"small":return Fi.SMALL;case"medium":return Fi.MEDIUM;case"large":return Fi.LARGE;case"veryLarge":return Fi.VERY_LARGE;case"huge":return Fi.HUGE}}function nb(e){switch(e){case"constantMild":return Su.CONSTANT_MILD;case"constantWild":return Su.CONSTANT_WILD;default:return Su.SPORADIC}}function Tu(e){let t=new qS(e);return[t.r,t.g,t.b,1]}function ib(e){return e==="radial"?Mu.Radial:e==="mirroredLinear"?Mu.MirroredLinear:Mu.Linear}import{Fragment as CC,jsx as ze,jsxs as _u}from"react/jsx-runtime";var qn={edgeStrength:1,pulseSpeed:0,visibleEdgeColor:new Is(Ur.color).getHex(),hiddenEdgeColor:new Is(Ur.color).multiplyScalar(.35).getHex(),kernelSize:bC.VERY_SMALL,blur:!1,xRay:!1};function vC(e){let t=[];return e.traverse(r=>{r.isMesh&&t.push(r)}),t}var Pu=[],wC=yC(function({sceneConfig:t,selectedObjectRef:r,highlightOnHover:n=!1,disabled:i=!1,onOutlineEffect:a}){let o=Os(P=>P.scene),s=Os(P=>P.gl),c=ab(null),l=t?.postProcessing,d=r??null,u=l?.outline.enabled===!0,p=u||n,[h,m]=sb(()=>s.xr?.isPresenting??!1);ob(()=>{let P=s.xr;if(!P)return;let b=()=>m(!0),E=()=>m(!1);return P.addEventListener("sessionstart",b),P.addEventListener("sessionend",E),m(P.isPresenting),()=>{P.removeEventListener("sessionstart",b),P.removeEventListener("sessionend",E)}},[s]);let g=o.children.filter(P=>P.isLight),f=Wo(()=>new Ho(l?.chromaticAberration.offsetX??.002,l?.chromaticAberration.offsetY??.002),[l?.chromaticAberration.offsetX,l?.chromaticAberration.offsetY]),y=Wo(()=>new Is(l?.outline.visibleEdgeColor??"#ffffff").getHex(),[l?.outline.visibleEdgeColor]),x=Wo(()=>new Is(l?.outline.hiddenEdgeColor??"#22090a").getHex(),[l?.outline.hiddenEdgeColor]),v=Wo(()=>Tu(l?.ramp.startColor??"#000000"),[l?.ramp.startColor]),C=Wo(()=>Tu(l?.ramp.endColor??"#ffffff"),[l?.ramp.endColor]);return!l||h||i?null:_u(CC,{children:[l.godRays.enabled===!0&&_u("mesh",{ref:c,position:l.godRays.sunPosition,visible:!1,frustumCulled:!1,children:[ze("sphereGeometry",{args:[.1,8,8]}),ze("meshBasicMaterial",{transparent:!0,opacity:0,depthWrite:!1})]}),_u(tC,{multisampling:0,enableNormalPass:l.ssao.enabled===!0,autoClear:!1,children:[l.smaa.enabled===!0&&ze(hC,{}),l.ssao.enabled===!0&&ze(mC,{samples:l.ssao.samples,rings:l.ssao.rings,intensity:l.ssao.intensity,radius:l.ssao.radius,bias:l.ssao.bias,luminanceInfluence:l.ssao.luminanceInfluence,fade:l.ssao.fade,minRadiusScale:l.ssao.minRadiusScale,worldDistanceThreshold:l.ssao.worldDistanceThreshold,worldDistanceFalloff:l.ssao.worldDistanceFalloff,worldProximityThreshold:l.ssao.worldProximityThreshold,worldProximityFalloff:l.ssao.worldProximityFalloff}),l.autofocus.enabled===!0&&ze($S,{focusDistance:l.autofocus.focusDistance,focusRange:l.autofocus.focusRange,focalLength:l.autofocus.focalLength,bokehScale:l.autofocus.bokehScale,target:l.autofocus.target,mouse:l.autofocus.mouse,debug:l.autofocus.debug||void 0,manual:l.autofocus.manual,smoothTime:l.autofocus.smoothTime}),l.autofocus.enabled!==!0&&l.depthOfField.enabled===!0&&ze(ZS,{focusDistance:l.depthOfField.focusDistance,focusRange:l.depthOfField.focusRange,focalLength:l.depthOfField.focalLength,bokehScale:l.depthOfField.bokehScale}),l.bloom.enabled===!0&&ze(YS,{intensity:l.bloom.intensity,luminanceThreshold:l.bloom.luminanceThreshold,luminanceSmoothing:l.bloom.luminanceSmoothing,mipmapBlur:l.bloom.mipmapBlur,radius:l.bloom.radius,levels:l.bloom.levels}),l.selectiveBloom.enabled===!0&&ze(dC,{selection:d??void 0,lights:g,selectionLayer:l.selectiveBloom.selectionLayer,intensity:l.selectiveBloom.intensity,luminanceThreshold:l.selectiveBloom.luminanceThreshold,luminanceSmoothing:l.selectiveBloom.luminanceSmoothing,kernelSize:Ls(l.selectiveBloom.kernelSize),mipmapBlur:l.selectiveBloom.mipmapBlur,inverted:l.selectiveBloom.inverted,ignoreBackground:l.selectiveBloom.ignoreBackground}),p&&ze(sC,{ref:a,selection:Pu,selectionLayer:l.outline.selectionLayer,blendFunction:Go.SCREEN,edgeStrength:u?l.outline.edgeStrength:qn.edgeStrength,pulseSpeed:u?l.outline.pulseSpeed:qn.pulseSpeed,visibleEdgeColor:u?y:qn.visibleEdgeColor,hiddenEdgeColor:u?x:qn.hiddenEdgeColor,kernelSize:u?Ls(l.outline.kernelSize):qn.kernelSize,blur:u?l.outline.blur:qn.blur,xRay:u?l.outline.xRay:qn.xRay}),l.chromaticAberration.enabled===!0&&ze(QS,{offset:f,radialModulation:l.chromaticAberration.radialModulation,modulationOffset:l.chromaticAberration.modulationOffset}),l.colorAverage.enabled===!0&&ze(JS,{}),l.dotScreen.enabled===!0&&ze(eC,{angle:l.dotScreen.angle,scale:l.dotScreen.scale}),l.glitch.enabled===!0&&ze(rC,{mode:nb(l.glitch.mode),delay:new Ho(l.glitch.delay[0],l.glitch.delay[1]),duration:new Ho(l.glitch.duration[0],l.glitch.duration[1]),strength:new Ho(l.glitch.strength[0],l.glitch.strength[1]),chromaticAberrationOffset:new Ho(l.glitch.chromaticAberrationOffset[0],l.glitch.chromaticAberrationOffset[1]),columns:l.glitch.columns,ratio:l.glitch.ratio,active:!0}),l.grid.enabled===!0&&ze(iC,{scale:l.grid.scale,lineWidth:l.grid.lineWidth}),l.lensflare.enabled===!0&&ze(tb,{config:l.lensflare}),l.godRays.enabled===!0&&ze(nC,{sun:c,samples:l.godRays.samples,density:l.godRays.density,decay:l.godRays.decay,weight:l.godRays.weight,exposure:l.godRays.exposure,clampMax:l.godRays.clampMax,blur:l.godRays.blur,kernelSize:Ls(l.godRays.kernelSize)}),l.noise.enabled===!0&&ze(aC,{premultiply:l.noise.premultiply,opacity:l.noise.opacity,blendFunction:Go.ADD}),l.brightnessContrast.enabled===!0&&ze(KS,{brightness:l.brightnessContrast.brightness,contrast:l.brightnessContrast.contrast}),l.hueSaturation.enabled===!0&&ze(oC,{hue:l.hueSaturation.hue,saturation:l.hueSaturation.saturation}),l.toneMapping.enabled===!0&&ze(Kg,{exposure:l.toneMapping.exposure}),l.vignette.enabled===!0&&ze(gC,{eskil:l.vignette.eskil,offset:l.vignette.offset,darkness:l.vignette.darkness,blendFunction:Go.NORMAL}),l.toneMapping.enabled===!0&&ze(fC,{mode:rb(l.toneMapping.mode),resolution:l.toneMapping.resolution,whitePoint:l.toneMapping.whitePoint,middleGrey:l.toneMapping.middleGrey,minLuminance:l.toneMapping.minLuminance,averageLuminance:l.toneMapping.averageLuminance,adaptationRate:l.toneMapping.adaptationRate}),l.sepia.enabled===!0&&ze(pC,{intensity:l.sepia.intensity,blendFunction:Go.NORMAL}),l.scanline.enabled===!0&&ze(uC,{density:l.scanline.density,blendFunction:Go.OVERLAY}),l.pixelation.enabled===!0&&ze(lC,{granularity:l.pixelation.granularity}),l.ramp.enabled===!0&&ze(cC,{rampType:ib(l.ramp.rampType),rampStart:l.ramp.rampStart,rampEnd:l.ramp.rampEnd,startColor:v,endColor:C,opacity:l.ramp.rampMask?1:l.ramp.opacity??.5,rampBias:l.ramp.rampBias,rampGain:l.ramp.rampGain,rampMask:l.ramp.rampMask,rampInvert:l.ramp.rampInvert})]})]})});function MC(e){let t=[e];for(;t.length>0;){let r=t.pop();if(r.visible){if(r.isMesh)return!0;t.push(...r.children)}}return!1}function SC(e,t){return e.length===t.length&&e.every((r,n)=>r===t[n])}function lb({hoveredObjectRef:e,...t}){let r=Os(c=>c.scene),n=Os(c=>c.invalidate),[i,a]=sb(null),o=xC(c=>a(c),[]),s=ab({effect:null,objects:Pu});return ob(()=>{if(!i)return;let l=t.sceneConfig?.postProcessing?.outline.enabled===!0?vC(r):e&&MC(e)?[e]:Pu;s.current.effect===i&&SC(s.current.objects,l)||(s.current={effect:i,objects:l},i.selection.set(l),n())}),ze(wC,{...t,onOutlineEffect:o})}import{Fragment as NC,jsx as Bt,jsxs as ub}from"react/jsx-runtime";var OC=1.5;function Eu({children:e,camera:t,backgroundColor:r,shadows:n=!0,sceneConfig:i,selectedObjectRef:a,hoveredObjectRef:o,highlightOnHover:s,renderMode:c="demand",maxDpr:l=2,xrStore:d,rendererCaptureRef:u,preserveDrawingBuffer:p=!1,reduceGpuLoad:h,suspended:m=!1,paused:g=!1,onRendererCreated:f,backend:y="webgl"}){let x=y==="webgpu",v=h??dm(),C=v?Math.min(l,OC):l,P=n&&!v,b=Bs(()=>r?{background:r}:i?.background.enabled?i.background.type==="color"?{background:i.background.color}:i.background.type==="image"&&i.background.imageUrl.trim()?{backgroundImage:`url("${i.background.imageUrl}")`,backgroundPosition:"center",backgroundRepeat:"no-repeat",backgroundSize:"cover"}:{background:"linear-gradient(180deg, #3a3a3c 0%, #1c1c1d 100%)"}:{background:"transparent"},[r,i]),E=Bs(()=>{if(r)return r;let I=i?.background;if(I?.enabled){if(I.type==="color")return I.color;if(I.type==="image"&&I.imageUrl.trim()||I.type==="environment")return null}return"#1c1c1d"},[r,i]),T=Bs(()=>{let I=i?.postProcessing;return I?!!(I.glitch.enabled||I.noise.enabled||I.lensflare.enabled&&I.lensflare.animated):!1},[i?.postProcessing]),[_,M]=LC(!1),S=i?.environment,A=i?.groundShadows,D=Bs(()=>{if(!S)return null;if(S.source==="custom"){let I=S.customEnvironmentUrl.trim();return Tm(I)?{files:I}:null}return{preset:S.preset}},[S]),k=ub(NC,{children:[Bt(om,{captureRef:u}),Bt(am,{}),Bt(Yg,{cameraConfig:t}),Bt(Wg,{active:T}),Bt(qg,{color:E}),D?Bt(Oi,{onError:I=>console.warn("Failed to load environment map:",I),children:Bt(kC,{fallback:null,children:Bt(_C,{...D,environmentIntensity:S?.intensity??.25,backgroundIntensity:S?.intensity??.25,background:i?.background.enabled===!0&&i.background.type==="environment"})})}):null,Bt($g,{rotation:S?.rotation??0}),d&&Bt(Hg,{onPresentingChange:M}),A?.enabled&&A.mode==="shadowCatcher"&&!_&&!x&&Bt(Xg,{position:[0,A.height,0],scale:A.size,opacity:A.intensity,blur:A.borderFade,far:15,resolution:1024,color:"#000000"}),e,Bt(lb,{sceneConfig:i,selectedObjectRef:a,hoveredObjectRef:o,highlightOnHover:s,disabled:v||x}),x?Bt(BC,{toneMapping:i?.postProcessing.toneMapping}):null]});return Bt(TC,{frameloop:m||g&&!_?"never":c,onCreated:({gl:I})=>f?.(I),dpr:[1,C],shadows:P?"soft":!1,resize:{debounce:0,scroll:!1},raycaster:{firstHitOnly:!0},style:b,camera:t??{fov:50},gl:x?im:{preserveDrawingBuffer:p,toneMapping:db,toneMappingExposure:1},flat:x||void 0,children:d&&!x?ub(PC,{store:d,children:[Bt(Gg,{renderMode:c,suspended:m}),k]}):k})}var IC={linear:AC,reinhard:RC,aces:EC};function BC({toneMapping:e}){let t=cb(o=>o.gl),r=cb(o=>o.invalidate),n=e?.enabled===!0,i=e?.mode??"aces",a=e?.exposure??1;return DC(()=>{t.toneMapping=n?IC[i]:db,t.toneMappingExposure=n?a:1,r()},[t,r,n,i,a]),null}import{CameraControls as zC,PointerLockControls as jC}from"@react-three/drei";import{Box3 as VC,Vector3 as hb}from"three";import{useEffect as Ui,useRef as FC}from"react";var Ns=e=>e*Math.PI/180;function pb(e){return{minDistance:e?.minDistance??0,maxDistance:e?.maxDistance??1/0,minPolarAngle:Ns(e?.minPolarAngle??0),maxPolarAngle:Ns(e?.maxPolarAngle??180),minAzimuthAngle:Ns(e?.minAzimuthAngle??-1/0),maxAzimuthAngle:Ns(e?.maxAzimuthAngle??1/0),boundaryEnclosesCamera:e?.boundaryEnclosesCamera??!1,boundaryFriction:e?.boundaryFriction??0,panBoundary:e?.panBoundary}}import{jsx as mb}from"react/jsx-runtime";function Au({controlsRef:e,onCameraChange:t,cameraLimits:r,controllerType:n="orbit",onPointerLockExit:i,reducedMotion:a=!1}){let o=n==="orbit",s=FC(null);return Ui(()=>{if(!o)return s.current?.lock(),()=>{s.current?.unlock()}},[o]),Ui(()=>{o&&document.pointerLockElement&&document.exitPointerLock()},[o]),Ui(()=>{if(o)return;let c=()=>{document.pointerLockElement||i?.()};return document.addEventListener("pointerlockchange",c),()=>{document.removeEventListener("pointerlockchange",c)}},[o,i]),Ui(()=>{if(!o||!e||typeof e!="object"||!("current"in e))return;let c=e.current;c&&Ym(c,a)},[o,e,a]),Ui(()=>{if(!o||!t||!e||typeof e!="object"||!("current"in e))return;let c=e.current;if(!c)return;let l=()=>{t(c.camera,c)};return c.addEventListener("update",l),()=>{c.removeEventListener("update",l)}},[o,e,t]),Ui(()=>{if(!o||!e||typeof e!="object"||!("current"in e))return;let c=e.current;if(!c)return;let l=pb(r);c.minDistance=l.minDistance,c.maxDistance=l.maxDistance,c.minPolarAngle=l.minPolarAngle,c.maxPolarAngle=l.maxPolarAngle,c.minAzimuthAngle=l.minAzimuthAngle,c.maxAzimuthAngle=l.maxAzimuthAngle,c.boundaryEnclosesCamera=l.boundaryEnclosesCamera,c.boundaryFriction=l.boundaryFriction,c.setBoundary(l.panBoundary?new VC(new hb(...l.panBoundary[0]),new hb(...l.panBoundary[1])):void 0)},[o,e,r?.minDistance,r?.maxDistance,r?.minPolarAngle,r?.maxPolarAngle,r?.minAzimuthAngle,r?.maxAzimuthAngle,r?.boundaryEnclosesCamera,r?.boundaryFriction,r?.panBoundary]),o?mb(zC,{ref:e,makeDefault:!0,smoothTime:a?0:.3,dollyToCursor:!0}):mb(jC,{ref:s,makeDefault:!0,selector:"[data-ri-pointer-lock-trigger]"})}import{useRef as Ru,useMemo as zs,useEffect as UC}from"react";import{useFrame as GC,useThree as fb}from"@react-three/fiber";import{Vector3 as HC}from"three";import{Fragment as KC,jsx as $n,jsxs as QC}from"react/jsx-runtime";function bb(e,t){if(!t)return e;let r=t*Math.PI/180,n=Math.cos(r),i=Math.sin(r);return[e[0]*n+e[2]*i,e[1],-e[0]*i+e[2]*n]}function WC(e,t){let[r,n,i]=e.center,a=e.radius,o=Math.hypot(t[0],t[1],t[2]),s=o>1e-6?[t[0]/o,t[1]/o,t[2]/o]:[0,1,0],c=a*2;return{position:[r+s[0]*c,n+s[1]*c,i+s[2]*c],target:e.center,extent:a,near:Math.max(a/100,.001),far:c+a*2}}function XC(e,t){let r=t[0]-e.center[0],n=t[1]-e.center[1],i=t[2]-e.center[2],a=Math.hypot(r,n,i);return{near:Math.max(a-e.radius,a*.01,.001),far:a+e.radius*2}}function qC(e,t,r){return t&&r&&!e.attachedToCamera?r.center:[0,0,0]}var $C={ambient:{intensity:.25,color:"#ffffff"},lights:[{id:"light-hemi",type:"hemisphere",color:"#ffffff",intensity:.3,position:[0,1,0],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0},{id:"light-key",type:"directional",color:"#ffffff",intensity:2.5,position:[6,12,6],attachedToCamera:!1,castShadow:!0,shadowBias:-5e-4,visible:!0},{id:"light-fill",type:"directional",color:"#ffffff",intensity:0,position:[-6,8,-6],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0}]},YC={enabled:!0,mapSize:2048,bias:-5e-4,normalBias:.02,radius:3};function gb({light:e,shadows:t,shadowsEnabled:r,environmentRotation:n,modelBounds:i,objectBindings:a,nodeRefs:o}){let s=Ru(null),c=Ru(null),l=Ru(null),d=fb(y=>y.camera),u=fb(y=>y.scene),p=zs(()=>new HC,[]),h=zs(()=>e.attachedToCamera||e.attachment?e.position:bb(e.position,n),[e.position,e.attachedToCamera,e.attachment,n]);GC(()=>{let y=s.current??c.current??l.current;if(!y)return;if(e.attachedToCamera){y.position.copy(d.position);return}let x=e.attachment;if(!x)return;let v=a?Ci(a,x.objectId):null,P=(v?a?.[v]:void 0)?.modelObjectId??x.objectId,b=(v?o?.current[v]:void 0)??un(u,P);b&&(p.fromArray(x.offset),b.localToWorld(p),y.position.copy(p))});let m=r&&t.enabled&&e.castShadow,g=zs(()=>e.type==="directional"&&m&&i&&!e.attachedToCamera?WC(i,h):null,[e.type,e.attachedToCamera,m,i,h]),f=zs(()=>e.type==="spot"&&m&&i&&!e.attachedToCamera?XC(i,h):null,[e.type,e.attachedToCamera,m,i,h]);return UC(()=>{let y=s.current??l.current;if(!y)return;let[x,v,C]=qC(e,m,i);y.target.position.set(x,v,C),y.target.updateMatrixWorld()},[e,m,i]),!e.visible||e.type==="none"?null:e.type==="directional"?$n("directionalLight",{ref:s,color:e.color,intensity:e.intensity,position:g?.position??h,castShadow:m,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias,"shadow-normalBias":t.normalBias,"shadow-radius":t.radius,"shadow-camera-near":g?.near??.5,"shadow-camera-far":g?.far??40,"shadow-camera-left":-(g?.extent??8),"shadow-camera-right":g?.extent??8,"shadow-camera-top":g?.extent??8,"shadow-camera-bottom":-(g?.extent??8)}):e.type==="point"?$n("pointLight",{ref:c,color:e.color,intensity:e.intensity,position:h,distance:e.distance,decay:e.decay,castShadow:m,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias}):e.type==="spot"?$n("spotLight",{ref:l,color:e.color,intensity:e.intensity,position:h,angle:e.angle??Math.PI/6,penumbra:e.penumbra??.2,distance:e.distance,decay:e.decay,castShadow:m,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias,"shadow-normalBias":t.normalBias,"shadow-radius":t.radius,"shadow-camera-near":f?.near??.5,"shadow-camera-far":f?.far??40}):e.type==="hemisphere"?$n("hemisphereLight",{color:e.color,groundColor:"#444444",intensity:e.intensity}):null}function ku({lightingConfig:e,shadowConfig:t,shadowsEnabled:r=!0,environmentRotation:n=0,environmentConfig:i,modelBounds:a,objectBindings:o,nodeRefs:s}){let c=e??$C,l=t??YC,d=i?.shadowLight,u=bb([5,10,5],n);return QC(KC,{children:[$n("ambientLight",{intensity:c.ambient.intensity,color:c.ambient.color}),c.lights.map(p=>$n(gb,{light:p,shadows:l,shadowsEnabled:r,environmentRotation:n,modelBounds:a,objectBindings:o,nodeRefs:s},p.id)),d?.enabled&&$n(gb,{light:{id:"light-env-shadow",type:"directional",color:"#ffffff",intensity:d.intensity,position:u,attachedToCamera:!1,castShadow:!0,shadowBias:d.bias,visible:!0},shadows:l,shadowsEnabled:r,environmentRotation:0,modelBounds:a,objectBindings:o,nodeRefs:s})]})}import{useState as Cb,useEffect as qe,useRef as Nt,useMemo as bt}from"react";import{useFrame as Us,useThree as nT}from"@react-three/fiber";import{Color as iT,MeshStandardMaterial as oT,MeshBasicMaterial as Du,MeshNormalMaterial as aT,MeshMatcapMaterial as sT,DoubleSide as lT,NormalBlending as cT,Box3 as Gs,Vector3 as Yn,Matrix4 as uT,MathUtils as Hs}from"three";import{SkeletonUtils as dT}from"three-stdlib";function yb(e){let t=new Map;return e.map((r,n)=>{let a=r.name.trim()||`Animation ${n+1}`,o=t.get(a)??0;return t.set(a,o+1),{clip:r,sourceName:o===0?a:`${a} (${o+1})`,duration:r.duration}})}import{AnimationMixer as JC,LoopOnce as ZC,LoopPingPong as xb,LoopRepeat as eT}from"three";function vb(e){let t=e._loopCount;return e.loop===xb&&(t&1)===1}function tT(e){return vb(e)?e.getClip().duration-e.time:e.time}function wb({root:e,clips:t,getClipConfig:r,onChange:n}){let i=new JC(e),a=new Map;for(let{clip:M,sourceName:S}of t)a.set(S,i.clipAction(M));let o=new Map,s=new Set,c=new Map,l=1,d=M=>typeof M=="string",u=M=>d(M)?o.has(M)?[M]:[]:[...o.keys()],p=(M,S)=>{let A=Cm(r(S));A==="once"?M.setLoop(ZC,1):A==="ping-pong"?M.setLoop(xb,1/0):M.setLoop(eT,1/0),M.clampWhenFinished=A==="once"},h=M=>{M.action.setEffectiveTimeScale(M.reverse?-M.speed:M.speed)},m=M=>{let S=o.get(M);S&&(S.action.stop(),o.delete(M))},g=(M,S={})=>{let A=a.get(M);if(!A||r(M)?.hidden)return;let D=Number.isFinite(S.fade)&&S.fade>0?S.fade:0,k=S.reverse??!1;if(!S.alongside)for(let[L,O]of[...o])L!==M&&(D>0?(o.delete(L),O.action.fadeOut(D),s.add(O.action)):m(L));s.delete(A)&&A.stop();let I=A.getClip().duration,R=o.get(M),V=()=>{A.reset(),k&&(A.time=I),A.play()};if(!R)V(),D>0&&A.fadeIn(D);else{let L=k?A.time<=0:A.time>=I;R.finished&&L&&V(),A.paused=!1,A.enabled=!0,o.delete(M)}p(A,M),R={action:A,speed:r(M)?.speed??c.get(M)??l,reverse:k,finished:!1},R.speed=Qa(R.speed),h(R),o.set(M,R),n()},f=M=>{for(let S of u(M))o.get(S).action.paused=!0;n()},y=M=>{for(let S of u(M))m(S);if(!d(M)){for(let S of s)S.stop();s.clear()}n()},x=(M,S)=>{let A=Qa(M);d(S)?c.set(S,A):l=A;for(let D of u(S)){let k=o.get(D);c.set(D,A),k.speed=A,h(k)}n()},v=(M,S)=>{for(let A of u(S)){let D=o.get(A),k=D.action.getClip().duration,I=Math.min(Math.max(M,0),k);D.action.time=vb(D.action)?k-I:I,D.finished&&(D.finished=!1,D.action.paused=!0)}i.update(0),n()},C=()=>{for(let[M,S]of[...o]){let A=r(M);if(A?.hidden){m(M);continue}p(S.action,M),A?.speed!==void 0&&(S.speed=Qa(A.speed),h(S))}n()},P=M=>{for(let S of o.values())S.action===M.action&&(S.finished=!0);n()};return i.addEventListener("finished",P),{play:g,pause:f,stop:y,setSpeed:x,seek:v,getState:()=>{let M=[...o].map(([A,D])=>({clip:A,status:D.finished?"finished":D.action.paused?"paused":"playing",time:tT(D.action),duration:D.action.getClip().duration,speed:D.speed,reverse:D.reverse})),S=M[M.length-1];return{currentClip:S?.clip??null,isPlaying:M.some(A=>A.status==="playing"),speed:S?.speed??l,time:S?.time??0,duration:S?.duration??0,active:M}},applyClipConfigs:C,isRunning:()=>{if(s.size>0)return!0;for(let{action:M}of o.values())if(!M.paused&&M.enabled)return!0;return!1},update:M=>{i.update(M);for(let S of s)(!S.enabled||S.getEffectiveWeight()<=0)&&(S.stop(),s.delete(S))},dispose:()=>{i.removeEventListener("finished",P),i.stopAllAction(),i.uncacheRoot(e),o.clear(),s.clear()}}}import{Color as js,FrontSide as rT,NormalBlending as Mb}from"three";function Sb(e,t,r,n){let i=ur(t),a=Bo(r,i),o=ym(n,t),s=xm(n,t),c=vm(n,t);return o||s||c?Ms(e.userData,t,a,r,o??[0,0],s??1,c??0):(Ss(e.userData,t),a)}function gt(e,t,r,n){if(!r){Ss(e.userData,t);return}let i=Ka[t];e[i]=Sb(e,t,r,n)}function Vs(e,t,r){e.map=e.userData.baseMap??null,e.color.copy(e.userData.baseColor),e.vertexColors=e.userData.baseVertexColors??e.vertexColors,e.metalness=e.userData.baseMetalness??e.metalness,e.metalnessMap=e.userData.baseMetalnessMap??null,e.roughness=e.userData.baseRoughness??e.roughness,e.roughnessMap=e.userData.baseRoughnessMap??null,e.emissive.copy(e.userData.baseEmissive??new js(0,0,0)),e.emissiveIntensity=e.userData.baseEmissiveIntensity??e.emissiveIntensity,e.emissiveMap=e.userData.baseEmissiveMap??null,e.opacity=e.userData.baseOpacity??1,e.transparent=e.userData.baseTransparent??!1,e.alphaMap=e.userData.baseAlphaMap??null,e.alphaTest=e.userData.baseAlphaTest??0,e.alphaHash=e.userData.baseAlphaHash??!1,e.dithering=e.userData.baseDithering??!1,e.blending=e.userData.baseBlending??Mb,e.depthWrite=e.userData.baseDepthWrite??!0,e.side=e.userData.baseSide??rT,e.normalMap=e.userData.baseNormalMap??null,e.normalScale.copy(To(e.userData.baseNormalScale)),e.bumpMap=e.userData.baseBumpMap??null,e.bumpScale=e.userData.baseBumpScale??e.bumpScale,e.aoMap=e.userData.baseAoMap??null,e.aoMapIntensity=e.userData.baseAoMapIntensity??e.aoMapIntensity,e.displacementMap=e.userData.baseDisplacementMap??null,e.displacementScale=e.userData.baseDisplacementScale??e.displacementScale,e.displacementBias=e.userData.baseDisplacementBias??e.displacementBias,e.clearcoat=e.userData.baseClearcoat??e.clearcoat,e.clearcoatMap=e.userData.baseClearcoatMap??null,e.clearcoatRoughness=e.userData.baseClearcoatRoughness??e.clearcoatRoughness,e.clearcoatRoughnessMap=e.userData.baseClearcoatRoughnessMap??null,e.clearcoatNormalMap=e.userData.baseClearcoatNormalMap??null,e.clearcoatNormalScale.copy(To(e.userData.baseClearcoatNormalScale)),e.sheen=e.userData.baseSheen??e.sheen,e.sheenColor.copy(e.userData.baseSheenColor??new js(0,0,0)),e.sheenColorMap=e.userData.baseSheenColorMap??null,e.sheenRoughness=e.userData.baseSheenRoughness??e.sheenRoughness,e.sheenRoughnessMap=e.userData.baseSheenRoughnessMap??null,e.anisotropy=e.userData.baseAnisotropy??e.anisotropy,e.anisotropyRotation=e.userData.baseAnisotropyRotation??e.anisotropyRotation,e.anisotropyMap=e.userData.baseAnisotropyMap??null,e.transmission=e.userData.baseTransmission??e.transmission,e.transmissionMap=e.userData.baseTransmissionMap??null,e.thickness=e.userData.baseThickness??e.thickness,e.thicknessMap=e.userData.baseThicknessMap??null,e.attenuationColor.copy(e.userData.baseAttenuationColor??new js("#ffffff")),e.attenuationDistance=e.userData.baseAttenuationDistance??e.attenuationDistance,e.reflectivity=e.userData.baseReflectivity??e.reflectivity,e.specularIntensity=e.userData.baseSpecularIntensity??e.specularIntensity,e.specularIntensityMap=e.userData.baseSpecularIntensityMap??null,e.specularColor.copy(e.userData.baseSpecularColor??new js("#ffffff")),e.specularColorMap=e.userData.baseSpecularColorMap??null,e.flatShading=e.userData.baseFlatShading??e.flatShading,e.envMapIntensity=e.userData.baseEnvMapIntensity??e.envMapIntensity;let n=Xe(t,"texture"),i=Xe(t,"metalnessMap"),a=Xe(t,"roughnessMap"),o=Xe(t,"emissiveMap"),s=Xe(t,"alphaMap"),c=Xe(t,"normalMap"),l=Xe(t,"bumpMap"),d=Xe(t,"aoMap"),u=Xe(t,"displacementMap"),p=Xe(t,"clearcoatMap"),h=Xe(t,"clearcoatRoughnessMap"),m=Xe(t,"clearcoatNormalMap"),g=Xe(t,"anisotropyMap"),f=Xe(t,"transmissionMap"),y=Xe(t,"thicknessMap"),x=Xe(t,"sheenColorMap"),v=Xe(t,"sheenRoughnessMap"),C=Xe(t,"specularIntensityMap"),P=Xe(t,"specularColorMap");if(n?(e.map=Sb(e,"texture",n,t),e.color.set(r??"#ffffff"),e.vertexColors=!1):(Ss(e.userData,"texture"),r&&(e.map=null,e.color.set(r),e.vertexColors=!1)),gt(e,"metalnessMap",i,t),t?.metalness!==void 0&&(e.metalness=t.metalness),gt(e,"roughnessMap",a,t),t?.roughness!==void 0&&(e.roughness=t.roughness),t?.emissive?e.emissive.set(t.emissive):o&&e.emissive.set("#ffffff"),t?.emissiveIntensity!==void 0&&(e.emissiveIntensity=t.emissiveIntensity),gt(e,"emissiveMap",o,t),t?.opacity!==void 0&&(e.opacity=t.opacity),gt(e,"alphaMap",s,t),t?.alphaTest!==void 0&&(e.alphaTest=t.alphaTest),t?.alphaHash!==void 0&&(e.alphaHash=t.alphaHash),t?.dithering!==void 0&&(e.dithering=t.dithering),t?.blendingMode&&(e.blending=Mm(t.blendingMode),e.depthWrite=t.blendingMode!=="additive"),t?.side&&(e.side=wm(t.side)),gt(e,"normalMap",c,t),c||t?.normalScale!==void 0){let b=t?.normalScale??Math.abs(To(e.userData.baseNormalScale).x);e.normalScale.set(b,t?.flipNormalY?-b:b)}if(gt(e,"bumpMap",l,t),t?.bumpScale!==void 0&&(e.bumpScale=t.bumpScale),gt(e,"aoMap",d,t),t?.aoMapIntensity!==void 0&&(e.aoMapIntensity=t.aoMapIntensity),gt(e,"displacementMap",u,t),t?.displacementScale!==void 0&&(e.displacementScale=t.displacementScale),t?.displacementBias!==void 0&&(e.displacementBias=t.displacementBias),gt(e,"clearcoatMap",p,t),t?.clearcoat!==void 0&&(e.clearcoat=t.clearcoat),gt(e,"clearcoatRoughnessMap",h,t),t?.clearcoatRoughness!==void 0&&(e.clearcoatRoughness=t.clearcoatRoughness),gt(e,"clearcoatNormalMap",m,t),m||t?.clearcoatNormalScale!==void 0){let b=t?.clearcoatNormalScale??Math.abs(To(e.userData.baseClearcoatNormalScale).x);e.clearcoatNormalScale.set(b,t?.flipClearcoatNormalY?-b:b)}t?.sheen!==void 0&&(e.sheen=t.sheen),t?.sheenColor&&e.sheenColor.set(t.sheenColor),gt(e,"sheenColorMap",x,t),t?.sheenRoughness!==void 0&&(e.sheenRoughness=t.sheenRoughness),gt(e,"sheenRoughnessMap",v,t),t?.anisotropy!==void 0&&(e.anisotropy=t.anisotropy),t?.anisotropyRotation!==void 0&&(e.anisotropyRotation=t.anisotropyRotation),gt(e,"anisotropyMap",g,t),t?.transmission!==void 0&&(e.transmission=t.transmission),gt(e,"transmissionMap",f,t),t?.thickness!==void 0&&(e.thickness=t.thickness),gt(e,"thicknessMap",y,t),t?.attenuationColor&&e.attenuationColor.set(t.attenuationColor),t?.attenuationDistance!==void 0&&(e.attenuationDistance=t.attenuationDistance),t?.reflectivity!==void 0&&(e.reflectivity=t.reflectivity),t?.specularIntensity!==void 0&&(e.specularIntensity=t.specularIntensity),gt(e,"specularIntensityMap",C,t),t?.specularColor&&e.specularColor.set(t.specularColor),gt(e,"specularColorMap",P,t),e.transparent=e.opacity<1||e.transmission>0||e.blending!==Mb||!!((s||e.alphaMap)&&e.alphaTest<=0),e.transparent||(e.depthWrite=!0)}function Xo(e){return e.material}function _r(e,t){return Array.isArray(e)?e.map(t):t(e,0)}function Ht(e,t){Array.isArray(e)?e.forEach(t):t(e,0)}function Fs(e,t){return Array.isArray(e)?e[t]:e}import{jsx as Tb}from"react/jsx-runtime";function Ws(e,t,r){let n=r.get(e);n&&(t?.position?e.position.fromArray(t.position):e.position.copy(n.position),t?.rotation?e.rotation.set(t.rotation[0],t.rotation[1],t.rotation[2],n.rotation.order):e.rotation.copy(n.rotation),t?.scale?e.scale.fromArray(t.scale):e.scale.copy(n.scale),e.updateMatrix())}function ct(e,t=!1){if(!e||typeof e!="object")return"-";let r=e;return[r.channel??0,t?r.format??"":"",r.isVideoTexture?r.colorSpace??"":""].join(":")}function Gi(e){let t=e,r=Number(t.clearcoat)>0,n=Number(t.sheen)>0,i=Number(t.anisotropy)>0,a=Number(t.transmission)>0,o=t.transparent===!1&&t.blending===cT&&t.alphaToCoverage!==!0;return[ct(t.map),ct(t.aoMap),ct(t.lightMap),ct(t.bumpMap),ct(t.normalMap,!0),t.normalMap?t.normalMapType:"",ct(t.displacementMap),ct(t.emissiveMap),ct(t.metalnessMap),ct(t.roughnessMap),i,ct(i?t.anisotropyMap:null),r,ct(r?t.clearcoatMap:null),ct(r?t.clearcoatNormalMap:null,!0),ct(r?t.clearcoatRoughnessMap:null),n,ct(n?t.sheenColorMap:null),ct(n?t.sheenRoughnessMap:null),ct(t.specularColorMap),ct(t.specularIntensityMap),a,ct(a?t.transmissionMap:null),ct(a?t.thicknessMap:null),ct(t.alphaMap),Number(t.alphaTest)>0,!!t.alphaHash,!!t.flatShading,!!t.dithering,!!t.vertexColors,t.side,o].join("|")}var pT={};function Lu({url:e,objectBindings:t,selectedItem:r,itemMaterials:n,onItemClick:i,onItemHover:a,onItemDoubleClick:o,onItemContextMenu:s,onModelLoaded:c,onAnimationsReady:l,nodeRefsOut:d,onNodeRefsChange:u,materialRefsOut:p,panelHoveredItem:h,sceneConfig:m,zoomOnSelected:g=!0,highlightOnHover:f=!0,decoderConfig:y,modelFormat:x,onLoadProgress:v,explodeFactor:C=0,suspendBindingTransforms:P=!1,pulses:b=pT}){let E=Om(e,y,x,v),T=nT(B=>B.invalidate),[_,M]=Cb(null),S=Nt(null),{setCanvasCursor:A,restoreCanvasCursor:D}=Im();qe(()=>{f||(M(null),a?.(null),D())},[f,a,D]);let k=bt(()=>dT.clone(E.scene),[E.scene]),I=bt(()=>Ti(k),[k]),R=I.nodesById,V=bt(()=>{let B=new WeakMap;return k.traverse(z=>{_t(z)&&B.set(z,z.material)}),B},[k]),L=E.materialVariants,G=(m?_i(m.model):[]).join(`
11
+ `),[le,H]=Cb(null);qe(()=>{let B=G?G.split(`
12
+ `):[],z=[];for(let U of B){let J=L?L.names.indexOf(U):-1;if(J>=0){z.push(J);continue}console.warn(`[react-immersive] The model has no material variant "${U}".`+(L?` Its variants are: ${L.names.join(", ")}.`:" It has no material variants."))}if(!L||z.length===0){H(null);return}let j=!1,X=[];return k.traverse(U=>{if(!_t(U)||!V.has(U))return;let J=km(Rm(U),z);J!==null&&X.push(L.resolveMaterial(J,U).then(te=>[U,te]))}),Promise.all(X).then(U=>{j||H({scene:k,materials:new Map(U)})}).catch(U=>{j||console.warn(`[react-immersive] Material variants "${B.join('", "')}" failed to load.`,U)}),()=>{j=!0}},[k,V,L,G]);let be=le?.scene===k?le.materials:void 0,De=B=>be?.get(B)??V.get(B)??Xo(B);qe(()=>{I.duplicateNames.size!==0&&console.warn("[react-immersive] Duplicate model node names were assigned unique binding IDs.",Object.fromEntries(I.duplicateNames))},[I]);let Z=bt(()=>{let B=new WeakMap;return k.traverse(z=>{B.set(z,{position:z.position.clone(),rotation:z.rotation.clone(),scale:z.scale.clone()})}),B},[k]);qe(()=>{let B=!1,z=null,j=null,X=window,U=Object.entries(R).filter(([,Ke])=>_t(Ke)),J=new Gs,te=[],it=0;k.traverse(Ke=>{!_t(Ke)||Ke.userData[Hn]||(Ke.castShadow=!1,Ke.receiveShadow=!0)});let _e=()=>{if(B)return;let Ke=new Set,oe=J.getSize(new Yn),et=new Yn;for(let{name:St,box:At}of te)At.getSize(et),et.x>oe.x*.7&&et.z>oe.z*.7&&et.y>oe.y*.4&&Ke.add(St);k.traverse(St=>{if(!_t(St)||St.userData[Hn])return;let At=Po(St);St.castShadow=!At||!Ke.has(At),St.receiveShadow=!0}),T()},Ye=()=>{B||(X.requestIdleCallback?z=X.requestIdleCallback(Ge,{timeout:100}):j=window.setTimeout(()=>Ge(),0))},Ge=Ke=>{if(z=null,j=null,B)return;let oe=performance.now(),et=0;for(;it<U.length&&!(et>0&&!(Ke?Ke.didTimeout?et<16:Ke.timeRemaining()>1:performance.now()-oe<8));){let[St,At]=U[it];it+=1,et+=1;let Zt=new Gs().setFromObject(At);Zt.isEmpty()||(te.push({name:St,box:Zt}),J.union(Zt))}it<U.length?Ye():_e()};return Ye(),()=>{B=!0,z!==null&&X.cancelIdleCallback?.(z),j!==null&&window.clearTimeout(j)}},[T,R,k]),qe(()=>{Hc(k)},[k]),qe(()=>{let B=new AbortController;return Ya(k,B.signal),()=>{B.abort(),Co(k)}},[k]);let ye=bt(()=>{let B={};for(let[z,j]of Object.entries(t))B[j.modelObjectId??z]=z;return B},[t]),me=bt(()=>Object.entries(t).map(([B,z])=>`${B}${z.modelObjectId??B}`).sort().join(""),[t]),je=bt(()=>Object.entries(t).map(([B,z])=>JSON.stringify([B,z.modelObjectId??B,z.transform??null])).sort().join(""),[t]),lt=Nt(new Map);qe(()=>{let B=new Map,z=new Map;for(let[U,J]of Object.entries(t)){if(!J.transform)continue;let te=R[J.modelObjectId??U];te&&(B.set(te,J.transform),z.set(te,ki(te)))}let j=new Set([...lt.current.keys(),...B.keys()]);for(let U of j){Ws(U,void 0,Z);for(let J of ki(U))Di(J)}k.updateMatrixWorld(!0);let X=new Map;for(let U of z.values())for(let J of U)X.has(J)||X.set(J,J.matrixWorld.clone());for(let[U,J]of B)Ws(U,J,Z);lt.current=B,k.updateMatrixWorld(!0);for(let[U,J]of X)os(U,J);T()},[k,R,Z,je,T]),qe(()=>()=>{for(let B of ki(k))Di(B)},[k]);let fe=bt(()=>{let B={};for(let[z,j]of Object.entries(t)){let X=j.modelObjectId??z,U=R[X];if(!_t(U))continue;let J=De(U);J&&(B[z]=_r(J,te=>{let it=Ja(te),_e=Za(it??new oT);return es(_e),_e}))}return B},[R,me,V,be]);qe(()=>{p&&(p.current=fe)},[fe,p]),qe(()=>()=>{for(let B of Object.values(fe))Ht(B,z=>{dg(z.userData),z.dispose()})},[fe]);let Te=m?.model.shading??"lit",Oe=m?.model.renderer??"pbr",pt=m?.wireframe.enabled??!1,Y=m?.wireframe.color??"#93c5fd",$t=m?.wireframe.opacity??1,Je=bt(()=>{let B={};if(Te!=="unlit")return B;for(let[z,j]of Object.entries(fe))B[z]=_r(j,X=>{let U=new Du;return U.color.copy(X.color),U.map=X.map,U.alphaMap=X.alphaMap,U.alphaTest=X.alphaTest,U.transparent=X.transparent,U.opacity=X.opacity,U.side=X.side,U});return B},[fe,Te]),Ue=bt(()=>{let B={};if(Te!=="normals")return B;for(let[z,j]of Object.entries(fe))B[z]=_r(j,()=>new aT);return B},[fe,Te]),$=bt(()=>{let B={};if(Te!=="lit"||Oe!=="matcap")return B;let z=Cs();for(let[j,X]of Object.entries(fe))B[j]=_r(X,U=>{let J=new sT;return J.matcap=z,J.color.copy(U.color),J.alphaMap=U.alphaMap,J.alphaTest=U.alphaTest,J.side=U.side,J});return B},[fe,Te,Oe]);qe(()=>()=>{for(let B of Object.values(Je))Ht(B,z=>z.dispose());for(let B of Object.values(Ue))Ht(B,z=>z.dispose());for(let B of Object.values($))Ht(B,z=>z.dispose())},[Je,Ue,$]);let pe=B=>Te==="normals"?Ue[B]:Te==="unlit"?Je[B]:Oe==="matcap"?$[B]:fe[B],Ze=Nt(c);Ze.current=c,qe(()=>{Ze.current?.(k)},[k]);let Ve=bt(()=>{let B={};for(let[z,j]of Object.entries(t)){let X=j.modelObjectId??z,U=R[X];U&&(B[z]=U)}return B},[R,me]);qe(()=>(d.current=Ve,u?.(),()=>{d.current===Ve&&(d.current={})}),[Ve,d,u]);let Fe=Nt({});qe(()=>()=>{for(let B of Object.values(Fe.current))for(let[z,j]of Object.entries(B))j&&Gr(j,ur(z));Fe.current={}},[]);let ae=bt(()=>{let B=new Map;for(let[z,j]of Object.entries(t)){let X=h===j||h?.id===j.id||h?.modelObjectId===j.modelObjectId,U=f&&(_===z||X),J=U||r===z;(U||J)&&B.set(z,{emissive:U,matcap:J})}return B},[t,f,_,r,h]),ie=Nt(ae);ie.current=ae,qe(()=>{let B=new Set;for(let[z,j]of Object.entries(t)){B.add(z);let X=j.modelObjectId??z,U=R[X];if(!_t(U))continue;U.visible=j.visible!==!1;let J=fe[z];if(!J)continue;if(Oe!=="uv-checker"){let oe=pe(z);oe&&(U.material=oe)}if(j.visible===!1)continue;let te=Je[z],it=$[z],_e=n[z]??n[j.modelObjectId??z],Ye=j.style?.material,Ge=Fe.current[z]??{};for(let oe of cn){let et=Xe(Ye,oe),St=Ge[oe];if(St===et)continue;let At=ur(oe);St&&Gr(St,At),et?(Ni(et,At,T),Ge[oe]=et):delete Ge[oe]}Object.keys(Ge).length>0?Fe.current[z]=Ge:delete Fe.current[z];let Ke=_e?.hex??Ye?.baseColor;Ht(J,(oe,et)=>{let St=Gi(oe);Vs(oe,Ye,Ke);let At=oe.userData.reactImmersiveConfiguredEmissive;At?.isColor?At.copy(oe.emissive):oe.userData.reactImmersiveConfiguredEmissive=oe.emissive.clone();let Zt=ie.current.get(z);Zt?.emissive&&oe.emissive.add(Gn),St!==Gi(oe)&&(oe.needsUpdate=!0);let Rt=Fs(te,et);if(Rt){let ai=Gi(Rt);Rt.color.copy(oe.color),Rt.map=oe.map,Rt.vertexColors=oe.vertexColors,Rt.alphaMap=oe.alphaMap,Rt.alphaTest=oe.alphaTest,Rt.transparent=oe.transparent,Rt.opacity=oe.opacity,Rt.side=oe.side,ai!==Gi(Rt)&&(Rt.needsUpdate=!0)}let kt=Fs(it,et);if(kt){let ai=Gi(kt);Zt?.matcap?kt.color.set(Ur.color):kt.color.copy(oe.color),kt.map=oe.map,kt.vertexColors=oe.vertexColors,kt.alphaMap=oe.alphaMap,kt.alphaTest=oe.alphaTest,kt.transparent=oe.transparent,kt.opacity=oe.opacity,kt.side=oe.side,ai!==Gi(kt)&&(kt.needsUpdate=!0)}})}for(let z of Object.keys(Fe.current))if(!B.has(z)){for(let[j,X]of Object.entries(Fe.current[z]))X&&Gr(X,ur(j));delete Fe.current[z]}T()},[t,R,fe,Je,Ue,$,n,Te,Oe,T]);let rt=Nt(new Map);qe(()=>{let B=rt.current,z=new Set([...B.keys(),...ae.keys()]),j=!1;for(let X of z){let U=B.get(X),J=ae.get(X),te=!!U?.emissive!=!!J?.emissive,it=!!U?.matcap!=!!J?.matcap;if(!te&&!it)continue;j=!0;let _e=fe[X],Ye=$[X];_e&&Ht(_e,(Ge,Ke)=>{let oe=Ge.userData.reactImmersiveConfiguredEmissive;te&&oe?.isColor&&(Ge.emissive.copy(oe),J?.emissive&&Ge.emissive.add(Gn));let et=Fs(Ye,Ke);it&&et&&(J?.matcap?et.color.set(Ur.color):et.color.copy(Ge.color))})}rt.current=ae,j&&T()},[ae,fe,$,T]),gg({objectBindings:t,nodeMap:R,invalidate:T});let Le=bt(()=>Object.entries(b).map(([B,z])=>({key:B,color:new iT(z.color),speed:z.speed})),[b]),nt=Nt(new Set);qe(()=>{let B=new Set(Le.map(({key:z})=>z));for(let z of nt.current){if(B.has(z)||!fe[z])continue;let j=ie.current.get(z)?.emissive;Ht(fe[z],X=>{let U=X.userData.reactImmersiveConfiguredEmissive;U?.isColor&&(X.emissive.copy(U),j&&X.emissive.add(Gn))})}nt.current=B,T()},[Le,fe,T]),Us(({clock:B})=>{if(Le.length===0)return;let z=B.getElapsedTime();for(let{key:j,color:X,speed:U}of Le){let J=fe[j];if(!J)continue;let te=(1-Math.cos(2*Math.PI*U*z))/2,it=ie.current.get(j)?.emissive;Ht(J,_e=>{let Ye=_e.userData.reactImmersiveConfiguredEmissive;Ye?.isColor&&(_e.emissive.copy(Ye).lerp(X,te),it&&_e.emissive.add(Gn))})}T()}),qe(()=>{if(Oe==="uv-checker")return;let B=new Set(Object.values(Ve)),z=!1;k.traverse(j=>{if(!_t(j)||B.has(j)||!V.has(j))return;let X=be?.get(j)??V.get(j);j.material!==X&&(j.material=X,z=!0)}),z&&T()},[k,Ve,V,be,Oe,T]),qe(()=>{if(Oe!=="uv-checker")return;let B=pg(),z=[];return k.traverse(j=>{if(!_t(j)||j.userData[Hn])return;let X=j.material,U=Array.isArray(X)?X:[X],J=!!j.geometry.getAttribute("uv"),te=U.map((_e,Ye)=>{let Ge=new Du({color:J?"#ffffff":"#ff00ff",map:J?B:null,side:_e.side});return Ge.name=`${j.name||"mesh"}-uv-checker-${Ye}`,Ge.toneMapped=!1,Ge}),it=Array.isArray(X)?te:te[0];j.material=it,z.push({node:j,original:X,diagnostic:it})}),T(),()=>{for(let{node:j,original:X,diagnostic:U}of z){j.material=X;let J=Array.isArray(U)?U:[U];for(let te of J)te.dispose()}T()}},[k,Oe,T]),qe(()=>{if(!pt)return;let B=[];for(let[z,j]of Object.entries(t)){let X=j.modelObjectId??z,U=R[X];if(!_t(U))continue;let J=new Du({color:Y,wireframe:!0,transparent:!0,opacity:$t,depthTest:!1,depthWrite:!1,side:lT,toneMapped:!1}),te=U.clone(!1);te.name="",te.position.set(0,0,0),te.quaternion.identity(),te.scale.set(1,1,1),te.matrix.identity(),te.matrixAutoUpdate=!0,te.material=J,te.castShadow=!1,te.receiveShadow=!1,te.frustumCulled=!1,te.renderOrder=1,te.userData={isWireframeOverlay:!0},te.raycast=()=>{},U.morphTargetInfluences&&(te.morphTargetInfluences=U.morphTargetInfluences),U.add(te),B.push({node:U,overlay:te})}return T(),()=>{for(let{node:z,overlay:j}of B)z.remove(j),j.material.dispose()}},[pt,Y,$t,R,t,T]);let W=bt(()=>yb(E.animations),[E.animations]),re=Nt(l);re.current=l;let se=Nt(m);se.current=m;let xe=Nt(null),Ie=Nt(new Set),Ee=Nt(0),Ce=B=>{Ie.current.forEach(z=>z(B))};qe(()=>{let B=wb({root:k,clips:W,getClipConfig:j=>Sm(se.current,j),onChange:()=>{Ce(B.getState()),T()}});xe.current=B,re.current?.({clips:W.map(({sourceName:j})=>j),clipDetails:W.map(({sourceName:j,duration:X})=>({sourceName:j,duration:X})),play:B.play,pause:B.pause,stop:B.stop,setSpeed:B.setSpeed,seek:B.seek,getState:B.getState,subscribe:j=>(Ie.current.add(j),j(B.getState()),()=>{Ie.current.delete(j)})}),Ce(B.getState());let z=se.current?.animations.autoplayClip;return z&&B.play(z),()=>{B.dispose(),xe.current=null,Ce(B.getState())}},[k,W]),qe(()=>{m?.animations&&xe.current?.applyClipConfigs()},[m?.animations]),Us((B,z)=>{let j=xe.current;if(j?.isRunning()){if(j.update(z),!P)for(let[X,U]of lt.current)Ws(X,U,Z);T(),Ee.current+=z,Ee.current>=.066&&(Ee.current=0,Ce(j.getState()),Hc(k))}});let Q=bt(()=>(m?.model.rotation??[0,0,0]).map(B=>B*Math.PI/180),[m?.model.rotation]);Us((B,z)=>{if(!S.current)return;let j=S.current.rotation;j.x=Hs.lerp(j.x,Q[0],1-Math.exp(-5*z)),j.y=Hs.lerp(j.y,Q[1],1-Math.exp(-5*z)),j.z=Hs.lerp(j.z,Q[2],1-Math.exp(-5*z)),Math.abs(j.x-Q[0])<1e-4&&Math.abs(j.y-Q[1])<1e-4&&Math.abs(j.z-Q[2])<1e-4||T()});let ve=Nt([]),ke=Nt(0),ht=Nt(0),Yt=bt(()=>new Yn,[]);qe(()=>{let B=new Map;for(let[_e,Ye]of Object.entries(t)){let Ge=R[Ye.modelObjectId??_e];Ge&&B.set(Ge,Ye)}for(let _e of ve.current)Ws(_e.node,B.get(_e.node)?.transform,Z);ht.current=0,k.updateWorldMatrix(!0,!0);let z=new Gs().setFromObject(k),j=z.getCenter(new Yn),X=z.getSize(new Yn).length()*.5;ke.current=Number.isFinite(X)?X:0;let U=[...B.keys()],J=new Set(U),te=[],it=new Yn;for(let _e of U){if(!_e.parent)continue;let Ye=_e.parent,Ge=!1;for(;Ye;){if(J.has(Ye)){Ge=!0;break}Ye=Ye.parent}if(Ge)continue;let Ke=new Gs().setFromObject(_e);if(Ke.isEmpty())continue;Ke.getCenter(it);let oe=it.clone().sub(j);oe.lengthSq()<1e-8||(oe.normalize(),te.push({node:_e,restLocalPos:_e.position.clone(),restWorldPos:_e.getWorldPosition(new Yn),worldDir:oe,parentInverse:new uT().copy(_e.parent.matrixWorld).invert()}))}ve.current=te,T()},[k,R,me,je,Z,T]),qe(()=>{T()},[C,T]),Us((B,z)=>{let j=ve.current;if(j.length===0)return;let X=Math.min(Math.max(C,0),1),U=ht.current;if(Math.abs(U-X)<1e-4){if(U===X)return;ht.current=X}else ht.current=Hs.lerp(U,X,1-Math.exp(-6*z)),T();let J=ht.current*ke.current;for(let te of j)Yt.copy(te.worldDir).multiplyScalar(J).add(te.restWorldPos).applyMatrix4(te.parentInverse),te.node.position.copy(Yt)});let mt=B=>{let z=B;for(;z;){let j=Po(z),X=j?ye[j]:void 0;if(X&&t[X])return[X,t[X]];z=z.parent}return null},Pt=B=>{let z=mt(B);if(!z)return null;let[j,X]=z;return R[X.modelObjectId??j]??null},br=ls(B=>{let z=mt(B);return z&&z[1].selectable!==!1?z[1]:null},s,Pt),Et=B=>{if(br.consumeClick())return;let z=mt(B.object);if(!z)return;let[,j]=z;j.selectable!==!1&&(B.stopPropagation(),i(j,Li(B,Pt(B.object))))},Rn=B=>{let z=mt(B.object);if(!z)return;let[,j]=z;if(j.selectable===!1)return;o?.(j,Li(B,Pt(B.object)))&&B.stopPropagation()},uo=B=>{if(!f)return;let z=mt(B.object);if(!z)return;let[j,X]=z;X.hoverable!==!1&&(B.stopPropagation(),A("pointer"),M(j),a?.(X))},Mt=B=>{f&&(B.stopPropagation(),D(),M(null),a?.(null))},yr=bt(()=>!tm(k),[k]);return Tb("group",{ref:S,children:Tb("primitive",{object:k,...yr?{onClick:Et,onDoubleClick:Rn,...s?{onPointerDown:br.onPointerDown}:{},...f?{onPointerOver:uo,onPointerOut:Mt}:{}}:{}})})}import{useCallback as Sn,useEffect as Cn,useMemo as TP,useRef as Lt,useState as wd}from"react";import{useFrame as _P,useThree as PP}from"@react-three/fiber";import{Box3 as Ob,BoxGeometry as DT,Group as Db,Matrix4 as Ib,Mesh as LT,MeshBasicMaterial as OT,Vector3 as Wr}from"three";import{Euler as hT,Matrix4 as Kn,MeshBasicMaterial as mT,MeshMatcapMaterial as fT,MeshNormalMaterial as gT,MeshStandardMaterial as bT,Quaternion as yT,Vector3 as qo}from"three";function Eb(e){let t={};for(let[r,n]of Object.entries(e))t[n.modelObjectId??r]=r;return t}function Iu(e){let t=e,r=null;for(;t;){let n=t.userData?.ri_name;if(typeof n=="string"&&n)return n;!r&&t.name&&(r=t.name),t=t.parent}return r}function Ab(e,t){return e||(t?t.modelObjectId??t.id:null)}function $s(e,t){let r=Iu(e);if(!r)return null;let n=t.keyByModelObject[r]??r,i=t.objectBindings[n];return i?{key:n,binding:i}:null}var Hi=new qo,Ou=new qo,xT=new Kn,_b=new Kn,Xs=new Kn,vT=new Kn,qs=new Kn,wT=new Kn,MT=new Kn,ST=new qo,CT=new qo,bn=new qo,Pb=new yT,TT=new hT;function _T(e,t,r,n,i){let a=!!(r?.position||r?.rotation||r?.scale),o=!!(i&&i.factor>0&&i.radius>0);if(!a&&!o){e.matrixAutoUpdate=!0,e.position.copy(t.position),e.rotation.copy(t.rotation),e.scale.copy(t.scale),e.updateMatrix(),e.updateWorldMatrix(!0,!1);return}_b.compose(t.position,Pb.setFromEuler(t.rotation),t.scale);let s=r?.rotation;Xs.compose(ST.fromArray(r?.position??[0,0,0]),Pb.setFromEuler(TT.set(s?.[0]??0,s?.[1]??0,s?.[2]??0)),CT.fromArray(r?.scale??[1,1,1])),Xs.premultiply(n).multiply(vT.copy(n).invert()),e.parent?.updateWorldMatrix(!0,!1);let c=e.parent?.matrixWorld??xT;if(qs.multiplyMatrices(c,_b).premultiply(Xs),o&&i){let l=e;for(;l.parent&&!l.userData.ri_name;)l=l.parent;let d=l.userData.ri_center;Array.isArray(d)&&d.length===3?bn.fromArray(d).applyMatrix4(n).applyMatrix4(Xs):bn.setFromMatrixPosition(qs),bn.sub(i.centre),bn.lengthSq()>1e-8&&(bn.normalize().multiplyScalar(i.factor*i.radius),qs.premultiply(MT.makeTranslation(bn.x,bn.y,bn.z)))}e.matrixAutoUpdate=!1,e.matrix.multiplyMatrices(wT.copy(c).invert(),qs),e.matrixWorldNeedsUpdate=!0,e.updateWorldMatrix(!1,!1)}function Ys(e,t){if(!_t(e)&&!e.userData.riLogicalObject)return;let r=$s(e,t);if(!r)return;let n=Rb(e);if(n.rest??(n.rest={position:e.position.clone(),rotation:e.rotation.clone(),scale:e.scale.clone()}),t.suspendTransforms)return;if(t.placementFrame&&!e.userData.riLogicalObject){_T(e,n.rest,r.binding.transform,t.placementFrame,t.explode);return}let i=n.rest,a=r.binding.transform;a?.position?e.position.fromArray(a.position):e.position.copy(i.position),a?.rotation?e.rotation.set(a.rotation[0],a.rotation[1],a.rotation[2],i.rotation.order):e.rotation.copy(i.rotation),a?.scale?e.scale.fromArray(a.scale):e.scale.copy(i.scale);let o=t.explode;if(o&&o.factor>0&&o.radius>0){e.updateWorldMatrix(!0,!1),Ou.setFromMatrixPosition(e.matrixWorld);let s=e;for(;s.parent&&!s.userData.ri_name;)s=s.parent;let c=s.userData.ri_center;Array.isArray(c)&&c.length===3?Hi.fromArray(c).applyMatrix4(e.matrixWorld).sub(o.centre):Hi.copy(Ou).sub(o.centre),Hi.lengthSq()>1e-8&&(Hi.normalize().multiplyScalar(o.factor*o.radius).add(Ou),e.parent&&e.parent.worldToLocal(Hi),e.position.copy(Hi))}e.updateMatrix(),e.updateWorldMatrix(!0,!1)}function Wi(e,t){e.traverse(r=>Ys(r,t))}function Rb(e){var t;return(t=e.userData).riVisuals??(t.riVisuals={}),e.userData.riVisuals}function PT(e,t,r,n){return JSON.stringify([e?.style?.material??null,t??null,r.shadingMode,r.rendererMode,n])}function ET(e){if(e.textures){for(let t of cn){let r=e.textures[t];r&&Gr(r,ur(t))}e.textures=void 0}}function AT(e,t,r){let n=e.textures??{};for(let i of cn){let a=Xe(t,i),o=n[i];if(o===a)continue;let s=ur(i);o&&Gr(o,s),a?(Ni(a,s,r),n[i]=a):delete n[i]}e.textures=Object.keys(n).length>0?n:void 0}function RT(e,t){if(t.shadingMode==="normals")return _r(e,()=>new gT);if(t.shadingMode==="unlit")return _r(e,r=>{let n=new mT;return n.color.copy(r.color),n.map=r.map,n.vertexColors=r.vertexColors,n.alphaMap=r.alphaMap,n.alphaTest=r.alphaTest,n.transparent=r.transparent,n.opacity=r.opacity,n.side=r.side,n});if(t.rendererMode==="matcap"){let r=Cs();return _r(e,n=>{let i=new fT;return i.matcap=r,i.color.copy(n.color),i.vertexColors=n.vertexColors,i.alphaMap=n.alphaMap,i.alphaTest=n.alphaTest,i.side=n.side,i})}return e}function kT(e,t){if(!_t(e))return;let n=Rb(e);n.original??(n.original=Xo(e));let i=$s(e,t);if(!i){n.original&&(e.material=n.original),e.visible=!0;return}let{key:a,binding:o}=i;e.visible=o.visible!==!1,Ys(e,t);let s=t.itemMaterials?.[a]?.hex??t.itemMaterials?.[o.modelObjectId??a]?.hex,c=t.highlightOnHover!==!1&&a===t.hoveredKey,l=PT(o,s,t,c);if(n.signature===l&&n.display){e.material=n.display;return}let d=o.style?.material;if(AT(n,d,t.invalidate),!n.physical){let u=n.original??Xo(e);if(!u)return;n.physical=_r(u,p=>{let h=Ja(p),m=Za(h??new bT);return es(m),m})}Ht(n.physical,u=>{Vs(u,d,s??d?.baseColor),c&&(u.emissive.add(Gn),u.color.lerp(ag,sg)),u.needsUpdate=!0}),n.display&&n.display!==n.physical&&Ht(n.display,u=>u.dispose()),n.display=RT(n.physical,t),n.signature=l,e.material=n.display}function kb(e,t){e.traverse(r=>kT(r,t))}function Bu(e){e.traverse(t=>{if(!_t(t))return;let r=t.userData.riVisuals;r&&(r.rest&&(t.matrixAutoUpdate=!0,t.position.copy(r.rest.position),t.rotation.copy(r.rest.rotation),t.scale.copy(r.rest.scale),t.updateMatrix()),r.original&&(t.material=r.original),r.display&&r.display!==r.physical&&Ht(r.display,n=>n.dispose()),r.physical&&Ht(r.physical,n=>n.dispose()),ET(r),delete t.userData.riVisuals)})}var Bb=new Ib().makeRotationX(Math.PI/2),Lb=Bb.clone().invert();function IT(e){let t=new Wr(e[0],e[1],e[2]),r=new Wr(Math.abs(e[3])+Math.abs(e[6])+Math.abs(e[9]),Math.abs(e[4])+Math.abs(e[7])+Math.abs(e[10]),Math.abs(e[5])+Math.abs(e[8])+Math.abs(e[11]));return new Ob(t.clone().sub(r),t.clone().add(r))}function BT(e){let t=e.getCenter(new Wr),r=e.getSize(new Wr).multiplyScalar(.5);return[t.x,t.y,t.z,r.x,0,0,0,r.y,0,0,0,r.z]}var Ks=class{constructor(){this.group=new Db;this.objects=new Map;this.geometry=new DT(1,1,1);this.material=new OT;this.originalBounds=new WeakMap;this.signature="";this.lastContext=null;this.lastEffective=null;this.lastDragging=!1;this.version=0;this.tileVersions=new WeakMap;this.transforms=new Map}setCatalog(t){this.group.clear(),this.objects.clear();for(let r of t){let n=new Ob(new Wr(...r.minimum),new Wr(...r.maximum)).applyMatrix4(Lb),i=new Db;i.name=r.name,i.userData.ri_name=r.name,i.userData.riLogicalObject=!0,i.userData.ri_center=n.getCenter(new Wr).toArray();let a=new LT(this.geometry,this.material);a.visible=!1,a.raycast=()=>{},a.position.copy(n.getCenter(new Wr)),a.scale.copy(n.getSize(new Wr)),i.add(a),this.group.add(i),this.objects.set(r.name,i)}this.signature="",this.lastContext=null}nodesByBinding(t){let r={};for(let[n,i]of this.objects){let a=t.keyByModelObject[n]??n;t.objectBindings[a]&&(r[a]=i)}return r}sync(t,r,n=!1){if(!n&&!this.lastDragging&&t===this.lastContext&&this.lastEffective)return this.lastEffective;this.lastContext=t,this.lastDragging=n;let i={...t,suspendTransforms:!1},a=r?t.objectBindings[r]:void 0,o=a?this.objects.get(a.modelObjectId??r):void 0;n&&o&&a&&(i={...i,objectBindings:{...t.objectBindings,[r]:{...a,transform:{position:o.position.toArray(),rotation:[o.rotation.x,o.rotation.y,o.rotation.z],scale:o.scale.toArray()}}}});for(let c of this.objects.values())n&&c===o||Ys(c,i);this.group.updateWorldMatrix(!0,!0);let s=[...this.objects].map(([c,l])=>`${c}:${l.matrix.elements.join(",")}`).join(";");if(s!==this.signature){this.signature=s,this.version++,this.transforms.clear();for(let[c,l]of this.objects)l.matrix.equals(new Ib)||this.transforms.set(c,Bb.clone().multiply(l.matrix).multiply(Lb))}return this.lastEffective=i,i}updateBounds(t){if(!t)return;let r=n=>{if(this.tileVersions.get(n)!==this.version){if(n.boundingVolume.box&&this.tileVersions.get(n)!==this.version){let i=this.originalBounds.get(n);i||(i={box:[...n.boundingVolume.box],error:n.geometricError},this.originalBounds.set(n,i));let a=IT(i.box),o=a.clone(),s=1;for(let l of n.extras?.featureIds??[]){let d=this.transforms.get(l);d&&(o.union(a.clone().applyMatrix4(d)),s=Math.max(s,d.getMaxScaleOnAxis()))}let c=BT(o);n.boundingVolume.box=c,n.geometricError=i.error*s,n.engineData?.boundingVolume?.setObbData(c,n.engineData.transform),this.tileVersions.set(n,this.version)}n.children?.forEach(r)}};r(t)}dispose(){this.group.clear(),this.objects.clear(),this.geometry.dispose(),this.material.dispose()}};var Nu=Object.freeze({factor:1,loosened:!1,tooFine:0,raisedAt:-1/0,changedAt:-1/0}),$o=16,zu=1.25,NT=1.5,zT=1.25,jT=500,VT=3e3,Nb=5e3,zb=2e3,FT=.9;function jb(e){return e.full&&(e.wanting||e.usage>1)}function Vb(e){return e.loosened?VT:jT}function Fb(e){let t=e.factor/zT;return t<=1+1e-6?1:t}function Ub(e,t){return e.factor>1&&!e.loosened&&!t.full&&!t.wanting&&t.usage<FT&&Fb(e)>e.tooFine}function Gb(e,t){let{now:r}=t,n=t.moved&&e.tooFine>0?{...e,tooFine:0}:e;if(jb(t)){if(r-n.changedAt<Vb(n))return n;let i=Math.max(n.tooFine,n.factor);return n.factor>=$o?n.loosened&&n.tooFine===i?n:{...n,loosened:!0,tooFine:i,changedAt:r}:{factor:Math.min($o,n.factor*NT),loosened:!0,tooFine:i,raisedAt:r,changedAt:r}}return n.loosened&&!t.wanting?{...n,loosened:!1,changedAt:r}:Ub(n,t)&&r-n.raisedAt>=Nb&&r-n.changedAt>=zb?{...n,factor:Fb(n),changedAt:r}:n}function Hb(e,t){let{now:r}=t;return jb(t)?e.factor>=$o&&e.loosened?null:Math.max(0,Vb(e)-(r-e.changedAt)):e.loosened&&!t.wanting?0:Ub(e,t)?Math.max(0,Nb-(r-e.raisedAt),zb-(r-e.changedAt)):null}function $b(e){try{let t=typeof location<"u"?location.href:void 0;return new URL(e,t).origin}catch{return null}}function ju(e){if(!e)return null;let t=e.length,r=e.indexOf("?"),n=e.indexOf("#");r!==-1&&(t=Math.min(t,r)),n!==-1&&(t=Math.min(t,n));let i=e.lastIndexOf(".",t),a=e.lastIndexOf("/",t),o=e.indexOf("://");return o!==-1&&o+2===a||i===-1||i<a?null:e.substring(i+1,t)||null}var Js,Yo=(Js=class{static setXRSession(e){e!==this.session&&(this.flushPending(),this.session=e)}static requestAnimationFrame(e){let{session:t,pending:r}=this,n,i=()=>{r.delete(n),e()};return n=t?t.requestAnimationFrame(i):requestAnimationFrame(i),r.set(n,e),n}static cancelAnimationFrame(e){let{pending:t,session:r}=this;t.delete(e),r?r.cancelAnimationFrame(e):cancelAnimationFrame(e)}static flushPending(){this.pending.forEach((e,t)=>{e(),this.cancelAnimationFrame(t)})}},jc(Js,"pending",new Map),jc(Js,"session",null),Js),Wb=2**30,Jo=class{get unloadPriorityCallback(){return this._unloadPriorityCallback}set unloadPriorityCallback(e){e.length===1?(console.warn('LRUCache: "unloadPriorityCallback" function has been changed to take two arguments.'),this._unloadPriorityCallback=(t,r)=>{let n=e(t),i=e(r);return n<i?-1:+(n>i)}):this._unloadPriorityCallback=e}constructor(){this.minSize=6e3,this.maxSize=8e3,this.minBytesSize=.3*Wb,this.maxBytesSize=.4*Wb,this.unloadPercent=.05,this.autoMarkUnused=!0,this.cachedBytes=0,this.itemSet=new Map,this.itemList=[],this.usedSet=new Set,this.callbacks=new Map,this.unloadingHandle=-1,this.bytesMap=new Map,this.loadedSet=new Set,this._unloadPriorityCallback=null;let e=this.itemSet;this.defaultPriorityCallback=t=>e.get(t)}isFull(){return this.itemSet.size>=this.maxSize||this.cachedBytes>=this.maxBytesSize}getMemoryUsage(e){return this.bytesMap.get(e)||0}setMemoryUsage(e,t){let{bytesMap:r,itemSet:n}=this;n.has(e)&&(this.cachedBytes-=r.get(e)||0,r.set(e,t),this.cachedBytes+=t)}add(e,t){let r=this.itemSet;if(r.has(e)||this.isFull())return!1;let n=this.usedSet,i=this.itemList,a=this.callbacks;return i.push(e),n.add(e),r.set(e,Date.now()),a.set(e,t),!0}has(e){return this.itemSet.has(e)}remove(e){let t=this.usedSet,r=this.itemSet,n=this.itemList,i=this.bytesMap,a=this.callbacks,o=this.loadedSet;if(r.has(e)){this.cachedBytes-=i.get(e)||0,i.delete(e),a.get(e)(e);let s=n.indexOf(e);return n.splice(s,1),t.delete(e),r.delete(e),a.delete(e),o.delete(e),!0}return!1}setLoaded(e,t){let{itemSet:r,loadedSet:n}=this;r.has(e)&&(t===!0?n.add(e):n.delete(e))}markUsed(e){let t=this.itemSet,r=this.usedSet;t.has(e)&&!r.has(e)&&(t.set(e,Date.now()),r.add(e))}markUnused(e){this.usedSet.delete(e)}markAllUnused(){this.usedSet.clear()}isUsed(e){return this.usedSet.has(e)}unloadUnusedContent(){let{unloadPercent:e,minSize:t,maxSize:r,itemList:n,itemSet:i,usedSet:a,loadedSet:o,callbacks:s,bytesMap:c,minBytesSize:l,maxBytesSize:d}=this,u=n.length-a.size,p=n.length-o.size,h=Math.max(Math.min(n.length-t,u),0),m=this.cachedBytes-l,g=this.unloadPriorityCallback||this.defaultPriorityCallback,f=!1,y=h>0&&u>0||p&&n.length>r;if(u&&this.cachedBytes>l||p&&this.cachedBytes>d||y){n.sort((T,_)=>{let M=a.has(T);if(M===a.has(_)){let S=o.has(T);return S===o.has(_)?-g(T,_):S?1:-1}else return M?1:-1});let x=Math.max(t*e,h*e),v=Math.ceil(Math.min(x,u,h)),C=Math.max(e*m,e*l),P=Math.min(C,m),b=0,E=0;for(;this.cachedBytes-E>d||n.length-b>r;){let T=n[b],_=c.get(T)||0;if(a.has(T)&&o.has(T)||this.cachedBytes-E-_<d&&n.length-b<=r)break;E+=_,b++}for(;E<P||b<v;){let T=n[b],_=c.get(T)||0;if(a.has(T)||this.cachedBytes-E-_<l&&b>=v)break;E+=_,b++}n.splice(0,b).forEach(T=>{this.cachedBytes-=c.get(T)||0,s.get(T)(T),c.delete(T),i.delete(T),s.delete(T),o.delete(T),a.delete(T)}),f=b<h||E<m&&b<u,f&&(f=b>0)}f&&(this.unloadingHandle=Yo.requestAnimationFrame(()=>this.scheduleUnload()))}scheduleUnload(){Yo.cancelAnimationFrame(this.unloadingHandle),this.scheduled||(this.scheduled=!0,queueMicrotask(()=>{this.scheduled=!1,this.unloadUnusedContent()}))}},UT=class extends DOMException{constructor(){super("PriorityQueue: Item removed","AbortError")}},Pr=class{get running(){return this.items.length!==0||this.currJobs!==0}constructor(){this.maxJobs=6,this.items=[],this.callbacks=new Map,this.currJobs=0,this.scheduled=!1,this.autoUpdate=!0,this.priorityCallback=null,this._schedulingCallback=e=>{Yo.requestAnimationFrame(e)},this._runjobs=()=>{this.scheduled=!1,this.tryRunJobs()}}sort(){let e=this.priorityCallback,t=this.items;e!==null&&t.sort(e)}has(e){return this.callbacks.has(e)}add(e,t){let r={callback:t,reject:null,resolve:null,promise:null};return r.promise=new Promise((n,i)=>{let a=this.items,o=this.callbacks;r.resolve=n,r.reject=i,a.unshift(e),o.set(e,r),this.autoUpdate&&this.scheduleJobRun()}),r.promise}remove(e){let t=this.items,r=this.callbacks,n=t.indexOf(e);if(n!==-1){let i=r.get(e);i.promise.catch(a=>{if(a.name!=="AbortError")throw a}),i.reject(new UT),t.splice(n,1),r.delete(e)}}removeByFilter(e){let{items:t}=this;for(let r=0;r<t.length;r++){let n=t[r];e(n)&&(this.remove(n),r--)}}tryRunJobs(){this.sort();let e=this.items,t=this.callbacks,r=this.maxJobs,n=0,i=()=>{this.currJobs--,this.autoUpdate&&this.scheduleJobRun()};for(;r>this.currJobs&&e.length>0&&n<r;){this.currJobs++,n++;let a=e.pop(),{callback:o,resolve:s,reject:c}=t.get(a);t.delete(a);let l;try{l=o(a)}catch(d){c(d),i();continue}l instanceof Promise?l.then(s).catch(c).finally(i):(s(l),i())}}flush(e){let{items:t,callbacks:r}=this,n=t.indexOf(e);if(!r.has(e))return;let{callback:i,resolve:a,reject:o}=r.get(e);r.delete(e),t.splice(n,1);let s;try{s=i(e)}catch(c){o(c);return}return s instanceof Promise?s.then(a).catch(o):a(s),s}scheduleJobRun(){this.scheduled||(this.scheduled=(this._schedulingCallback(this._runjobs),!0))}},rl=class{get running(){for(let e of this.originQueues.values())if(e.running)return!0;return!1}get maxJobsPerOrigin(){return this._maxJobsPerOrigin}set maxJobsPerOrigin(e){this._maxJobsPerOrigin=e,this.originQueues.forEach(t=>t.maxJobs=e)}get maxJobs(){return this.maxJobsPerOrigin}set maxJobs(e){console.warn('DownloadPriorityQueue: "maxJobs" is no longer valid and limits jobs per server origin. Use "maxJobsPerOrigin", instead.'),this.maxJobsPerOrigin=e}get priorityCallback(){return this._priorityCallback}set priorityCallback(e){this._priorityCallback=e,this.originQueues.forEach(t=>t.priorityCallback=e)}constructor(){this.originQueues=new Map,this._itemQueues=new WeakMap,this._maxJobsPerOrigin=6,this._priorityCallback=null}add(e,t,r,n=null){this.originQueues.forEach((c,l)=>{c.running||this.originQueues.delete(l)});let i=e===null?null:$b(e),a=this.originQueues.get(i);a||(a=new Pr,a.maxJobs=this._maxJobsPerOrigin,a.priorityCallback=this._priorityCallback,this.originQueues.set(i,a));let o=this._itemQueues.get(t);if(o&&o!==a&&o.has(t))throw Error("DownloadPriorityQueue: Item is already queued with a different url origin.");this._itemQueues.set(t,a);let s=a.add(t,r);return n!==null&&(n.aborted?this.remove(t):n.addEventListener("abort",()=>this.remove(t),{once:!0})),s}remove(e){let t=this._itemQueues.get(e);t&&(t.remove(e),this._itemQueues.delete(e))}has(e){let t=this._itemQueues.get(e);return!!(t&&t.has(e))}};var Zn=6378137,GT=1/298.257223563,Fu=6356752314245179e-9,Qs={inView:!1,error:1/0,distanceFromCamera:1/0};function nl(e){return e===4||e===-1}function Xr(e,t){return il(e)&&e.traversal.lastFrameVisited===t&&e.traversal.used}function il(e){return!!e.traversal}function Zo(e){let{children:t}=e,r=t.length===0||il(t[t.length-1]),n=!e.internal.hasUnrenderableContent||nl(e.internal.loadingState);return r&&n}function Qn(e){return e.traversal.unconditionallyRefine}function Ko(e,t){if(il(e)&&(t.ensureChildrenArePreprocessed(e),e.traversal.lastFrameVisited!==t.frameCount&&(e.traversal.wasInFrustum=e.traversal.inFrustum,e.traversal.wasSetActive=e.traversal.active,e.traversal.wasSetVisible=e.traversal.visible,e.traversal.usedLastFrame=e.traversal.used,e.traversal.lastFrameVisited=t.frameCount,e.traversal.used=!1,e.traversal.inFrustum=!1,e.traversal.isLeaf=!1,e.traversal.visible=!1,e.traversal.active=!1,e.traversal.error=1/0,e.traversal.distanceFromCamera=1/0,e.traversal.allChildrenReady=!1,e.traversal.allChildrenLoaded=!1,e.traversal.kicked=!1,e.traversal.allUsedChildrenProcessed=!1,t.calculateTileViewErrorWithPlugin(e,Qs),e.traversal.inFrustum=Qs.inView,e.traversal.error=Qs.error,e.traversal.distanceFromCamera=Qs.distanceFromCamera,e.traversal.unconditionallyRefine=e.internal.hasUnrenderableContent,!e.traversal.unconditionallyRefine))){let r=e.parent;for(;r&&r.traversal.unconditionallyRefine;)r=r.parent;r&&r.geometricError<=e.geometricError&&(e.traversal.unconditionallyRefine=!0)}}function Vu(e,t,r=!1){if(Ko(e,t),r?t.markTileUsed(e):Zs(e),Qn(e)&&Zo(e)){let n=e.children;for(let i=0,a=n.length;i<a;i++)Vu(n[i],t,r)}}function Yb(e,t){if(Ko(e,t),e.traversal.usedLastFrame&&(Zs(e),e.traversal.wasSetActive&&(e.traversal.active=!0),(!e.traversal.active||Qn(e))&&Zo(e))){let r=e.children;for(let n=0,i=r.length;n<i;n++)Yb(r[n],t)}}function Zs(e){e.traversal.used=!0}function HT(e,t){return!(e.traversal.error<=t.errorTarget&&!Qn(e)||t.maxDepth>0&&e.internal.depth+1>=t.maxDepth||!Zo(e))}function Kb(e,t){let{frameCount:r}=t,{children:n}=e;for(let i=0,a=n.length;i<a;i++){let o=n[i];Xr(o,r)&&(o.traversal.active&&(o.traversal.kicked=!0,o.traversal.active=!1),Kb(o,t))}}function Xb(e){return!Qn(e)&&(!e.internal.hasContent||nl(e.internal.loadingState))}function Qb(e,t){if(Ko(e,t),!e.traversal.inFrustum)return;let r=e.parent;if(r&&r.refine==="ADD"&&e.geometricError>0&&e.traversal.error*(r.geometricError/e.geometricError)<=t.errorTarget)return;if(!HT(e,t)){Zs(e);return}let n=!1,i=!1,a=e.children;for(let o=0,s=a.length;o<s;o++){let c=a[o];Qb(c,t),n||(n=Xr(c,t.frameCount)),i||(i=c.traversal.inFrustum)}if(e.refine==="REPLACE"&&!i&&a.length!==0){e.traversal.inFrustum=!1,t.markTileUsed(e);for(let o=0,s=a.length;o<s;o++)Vu(a[o],t,!0);return}if(Zs(e),e.refine==="REPLACE"&&n&&(t.loadSiblings||t.loadAncestors))for(let o=0,s=a.length;o<s;o++)Vu(a[o],t)}function Jb(e,t){let r=t.frameCount;if(!Xr(e,r))return;let n=e.children,i=!1;for(let o=0,s=n.length;o<s;o++){let c=n[o];i||(i=Xr(c,r))}if(!i)e.traversal.isLeaf=!0;else{for(let s=0,c=n.length;s<c;s++)Jb(n[s],t);let o=!0;for(let s=0,c=n.length;s<c;s++){let l=n[s];if(Xr(l,r)){let d=!Qn(l),u=!l.internal.hasContent||nl(l.internal.loadingState);d&&u||l.traversal.allChildrenLoaded||(o=!1)}}e.traversal.allChildrenLoaded=o}let a=!0;for(let o=0,s=n.length;o<s;o++){let c=n[o];Xr(c,t.frameCount)&&!c.traversal.allUsedChildrenProcessed&&(a=!1)}e.traversal.allUsedChildrenProcessed=a&&Zo(e)}function Zb(e,t){if(!Xr(e,t.frameCount))return;let r=e.children;if(e.refine==="REPLACE"&&t.loadAncestors&&!e.traversal.allChildrenLoaded&&!Qn(e)&&(e.traversal.isLeaf=!0),e.traversal.isLeaf){if(!Qn(e)&&(e.traversal.active=!0,Zo(e)&&e.internal.hasContent&&!nl(e.internal.loadingState)))for(let i=0,a=r.length;i<a;i++)Yb(r[i],t);return}let n=r.length>0;for(let i=0,a=r.length;i<a;i++){let o=r[i];Zb(o,t),Xr(o,t.frameCount)&&!(o.traversal.active&&Xb(o))&&!o.traversal.allChildrenReady&&(n=!1)}e.traversal.allChildrenReady=n,e.refine==="REPLACE"&&!n&&e.traversal.wasSetActive&&Xb(e)&&(e.traversal.active=!0,Kb(e,t))}function ey(e,t){Ko(e,t);let r=Xr(e,t.frameCount);if(r&&(e.internal.hasUnrenderableContent&&(t.markTileUsed(e),t.queueTileForDownload(e)),e.internal.hasRenderableContent&&e.refine==="ADD"&&(e.traversal.active=!0),(e.traversal.active||e.traversal.kicked)&&e.internal.hasContent&&(t.markTileUsed(e),e.traversal.allUsedChildrenProcessed&&t.queueTileForDownload(e),e.internal.loadingState!==4&&(e.traversal.active=!1)),t.loadAncestors&&e.internal.hasContent&&(t.markTileUsed(e),t.queueTileForDownload(e)),e.internal.virtualChildCount>0&&e.internal.hasContent&&t.markTileUsed(e),e.traversal.visible=e.internal.hasRenderableContent&&e.traversal.active&&e.traversal.inFrustum&&e.internal.loadingState===4,t.stats.used++,e.traversal.inFrustum&&t.stats.inFrustum++),r||il(e)&&e.traversal.usedLastFrame){let n=!1,i=!1;r?(n=e.traversal.active,i=t.displayActiveTiles&&e.traversal.active||e.traversal.visible):Ko(e,t),e.internal.hasRenderableContent&&e.internal.loadingState===4?(n&&t.stats.active++,i&&t.stats.visible++,e.traversal.wasSetActive!==n&&t.invokeOnePlugin(o=>o.setTileActive&&o.setTileActive(e,n)),e.traversal.wasSetVisible!==i&&t.invokeOnePlugin(o=>o.setTileVisible&&o.setTileVisible(e,i))):e.internal.hasRenderableContent||(i=e.traversal.isLeaf,e.traversal.wasSetVisible!==i&&t.invokeOnePlugin(o=>o.setEmptyTileVisible&&o.setEmptyTileVisible(e,i))),e.traversal.visible=i,e.traversal.active=n;let a=e.children;for(let o=0,s=a.length;o<s;o++){let c=a[o];ey(c,t)}}}function WT(e,t){Qb(e,t),Jb(e,t),Zb(e,t),ey(e,t)}function XT(e){let t=null;return()=>{t===null&&(t=Yo.requestAnimationFrame(()=>{t=null,e()}))}}function qT(e,t=null,r=null){let n=[];for(n.push(e),n.push(null),n.push(0);n.length>0;){let i=n.pop(),a=n.pop(),o=n.pop();if(t&&t(o,a,i)){r&&r(o,a,i);return}let s=o.children;if(s)for(let c=s.length-1;c>=0;c--)n.push(s[c]),n.push(o),n.push(i+1);r&&r(o,a,i)}}var qb=Symbol("PLUGIN_REGISTERED"),yn={inView:!0,error:0,distance:1/0},$T=(e,t)=>{let r=e.priority||0,n=t.priority||0;return r===n?!e.traversal||!t.traversal?0:e.traversal.used===t.traversal.used?e.traversal.error===t.traversal.error?e.traversal.distanceFromCamera===t.traversal.distanceFromCamera?e.internal.depthFromRenderedParent===t.internal.depthFromRenderedParent?0:e.internal.depthFromRenderedParent>t.internal.depthFromRenderedParent?-1:1:e.traversal.distanceFromCamera>t.traversal.distanceFromCamera?-1:1:e.traversal.error>t.traversal.error?1:-1:e.traversal.used?1:-1:r>n?1:-1},YT=(e,t)=>e.traversal.used===t.traversal.used?e.traversal.inFrustum===t.traversal.inFrustum?e.internal.hasUnrenderableContent===t.internal.hasUnrenderableContent?e.traversal.distanceFromCamera===t.traversal.distanceFromCamera?e.internal.depthFromRenderedParent===t.internal.depthFromRenderedParent?0:e.internal.depthFromRenderedParent>t.internal.depthFromRenderedParent?-1:1:e.traversal.distanceFromCamera>t.traversal.distanceFromCamera?-1:1:e.internal.hasUnrenderableContent?1:-1:e.traversal.inFrustum?1:-1:e.traversal.used?1:-1,KT=(e,t)=>e.traversal.lastFrameVisited===t.traversal.lastFrameVisited?e.internal.depthFromRenderedParent===t.internal.depthFromRenderedParent?e.internal.loadingState===t.internal.loadingState?e.internal.hasUnrenderableContent===t.internal.hasUnrenderableContent?e.traversal.error===t.traversal.error?0:e.traversal.error>t.traversal.error?-1:1:e.internal.hasUnrenderableContent?-1:1:e.internal.loadingState>t.internal.loadingState?-1:1:e.internal.depthFromRenderedParent>t.internal.depthFromRenderedParent?1:-1:e.traversal.lastFrameVisited>t.traversal.lastFrameVisited?-1:1,Xi=(e,t)=>{let r=e.priority??1/0,n=t.priority??1/0;if(r!==n)return r>n?1:-1;if(!e.internal||!t.internal)return 0;let i=e.internal.renderer,a=t.internal.renderer,o=!i.loadAncestors,s=!a.loadAncestors;return o&&s?YT(e,t):$T(e,t)},Uu=new Jo;Uu.unloadPriorityCallback=KT;var Qo=new rl;Qo.maxJobsPerOrigin=25,Qo.priorityCallback=Xi;var el=new Pr;el.maxJobs=5,el.priorityCallback=Xi;var tl=new Pr;tl.maxJobs=25,tl.priorityCallback=(e,t)=>{let r=e.parent,n=t.parent;return r===n?0:r?n?Xi(r,n):-1:1};var Gu=class{get root(){let e=this.rootTileset;return e?e.root:null}get loadProgress(){let{stats:e,isLoading:t}=this,r=e.queued+e.downloading+e.parsing,n=e.inCacheSinceLoad+ +!!t;return n===0?1:1-r/n}get downloadQueue(){return this._downloadQueue}set downloadQueue(e){if(e instanceof Pr){console.warn('TilesRenderer: "downloadQueue" is no longer valid as a PriorityQueue. Use a DownloadPriorityQueue, instead.');return}this._downloadQueue=e}constructor(e=null){this.rootLoadingState=0,this.rootTileset=null,this.rootURL=e,this.fetchOptions={},this.plugins=[],this.queuedTiles=[],this.cachedSinceLoadComplete=new Set,this.isLoading=!1,this.processedTiles=new WeakSet,this.visibleTiles=new Set,this.activeTiles=new Set,this.usedSet=new Set,this.loadingTiles=new Set,this.lruCache=Uu,this.downloadQueue=Qo,this.parseQueue=el,this.processNodeQueue=tl,this.stats={inCacheSinceLoad:0,inCache:0,queued:0,downloading:0,parsing:0,loaded:0,failed:0,inFrustum:0,used:0,active:0,visible:0,tilesProcessed:0},this.frameCount=0,this._dispatchNeedsUpdateEvent=XT(()=>{this.dispatchEvent({type:"needs-update"})}),this.errorTarget=16,this.errorFalloff=0,this.errorFalloffDensity=2e-4,this.displayActiveTiles=!1,this.maxDepth=1/0,this.loadSiblings=!0,this.loadAncestors=!0,this.maxTilesProcessed=250}registerPlugin(e){if(e[qb]===!0)throw Error("TilesRendererBase: A plugin can only be registered to a single tileset");let t=this.plugins,r=e.priority||0,n=t.length;for(let i=0;i<t.length;i++)if((t[i].priority||0)>r){n=i;break}t.splice(n,0,e),e[qb]=!0,e.init&&e.init(this)}unregisterPlugin(e){let t=this.plugins;if(typeof e=="string"&&(e=this.getPluginByName(e)),t.includes(e)){let r=t.indexOf(e);return t.splice(r,1),e.dispose&&e.dispose(),!0}return!1}getPluginByName(e){return this.plugins.find(t=>t.name===e)||null}invokeOnePlugin(e){let t=[...this.plugins,this];for(let r=0;r<t.length;r++){let n=e(t[r]);if(n)return n}return null}invokeAllPlugins(e){let t=[...this.plugins,this],r=[];for(let n=0;n<t.length;n++){let i=e(t[n]);i&&r.push(i)}return r.length===0?null:Promise.all(r)}traverse(e,t,r=!0){this.root&&qT(this.root,(n,...i)=>(r&&this.ensureChildrenArePreprocessed(n,!0),e?e(n,...i):!1),t)}getAttributions(e=[]){return this.invokeAllPlugins(t=>t!==this&&t.getAttributions&&t.getAttributions(e)),e}update(){let{lruCache:e,usedSet:t,stats:r,root:n,downloadQueue:i,parseQueue:a,processNodeQueue:o}=this;if(this.rootLoadingState===0&&(this.rootLoadingState=2,this.invokeOnePlugin(l=>l.loadRootTileset&&l.loadRootTileset()).then(l=>{let d=this.rootURL;d!==null&&this.invokeAllPlugins(u=>d=u.preprocessURL?u.preprocessURL(d,null):d),this.rootLoadingState=4,this.rootTileset=l,this.dispatchEvent({type:"needs-update"}),this.dispatchEvent({type:"load-tileset",tileset:l,url:d}),this.dispatchEvent({type:"load-root-tileset",tileset:l,url:d})}).catch(l=>{this.rootLoadingState=-1,console.error(l),this.rootTileset=null,this.dispatchEvent({type:"load-error",tile:null,error:l,url:this.rootURL})})),!n)return;let s=null;if(this.invokeAllPlugins(l=>{if(l.doTilesNeedUpdate){let d=l.doTilesNeedUpdate();s=s===null?d:!!(s||d)}}),s===!1){this.dispatchEvent({type:"update-before"}),this.dispatchEvent({type:"update-after"});return}this.dispatchEvent({type:"update-before"}),r.inFrustum=0,r.used=0,r.active=0,r.visible=0,r.tilesProcessed=0,this.frameCount++,t.forEach(l=>e.markUnused(l)),t.clear(),this.prepareForTraversal(),WT(n,this),this.removeUnusedPendingTiles();let c=this.queuedTiles;c.sort(e.unloadPriorityCallback);for(let l=0,d=c.length;l<d&&!e.isFull();l++)this.requestTileContents(c[l]);c.length=0,e.scheduleUnload(),(i.running||a.running||o.running)===!1&&this.isLoading===!0&&(this.cachedSinceLoadComplete.clear(),r.inCacheSinceLoad=0,this.dispatchEvent({type:"tiles-load-end"}),this.isLoading=!1),this.dispatchEvent({type:"update-after"})}resetFailedTiles(){this.rootLoadingState===-1&&(this.rootLoadingState=0);let e=this.stats;e.failed!==0&&(this.traverse(t=>{t.internal.loadingState===-1&&(t.internal.loadingState=0)},null,!1),e.failed=0)}calculateTileViewErrorWithPlugin(e,t){this.calculateTileViewError(e,t);let{errorFalloff:r,errorFalloffDensity:n}=this;if(r>0&&Number.isFinite(t.distanceFromCamera)){let s=t.distanceFromCamera*n;t.error-=r*(1-Math.exp(-s*s))}let i=null,a=0,o=1/0;this.invokeAllPlugins(s=>{s!==this&&s.calculateTileViewError&&(yn.inView=!0,yn.error=0,yn.distance=1/0,s.calculateTileViewError(e,yn)&&(i===null&&(i=!0),i&&(i=yn.inView),yn.inView&&(o=Math.min(o,yn.distance),a=Math.max(a,yn.error))))}),t.inView&&i!==!1?(t.error=Math.max(t.error,a),t.distanceFromCamera=Math.min(t.distanceFromCamera,o)):i?(t.inView=!0,t.error=a,t.distanceFromCamera=o):t.inView=!1}dispose(){[...this.plugins].forEach(r=>{this.unregisterPlugin(r)});let e=this.lruCache,t=[];this.traverse(r=>(t.push(r),!1),null,!1);for(let r=0,n=t.length;r<n;r++)e.remove(t[r]);this.stats={queued:0,parsing:0,downloading:0,failed:0,inFrustum:0,traversed:0,used:0,active:0,visible:0},this.frameCount=0,this.loadingTiles.clear()}calculateBytesUsed(e,t){return 0}dispatchEvent(e){}addEventListener(e,t){}removeEventListener(e,t){}parseTile(e,t,r){return null}prepareForTraversal(){}disposeTile(e){e.traversal.visible&&(e.internal.hasRenderableContent?this.invokeOnePlugin(r=>r.setTileVisible&&r.setTileVisible(e,!1)):this.invokeOnePlugin(r=>r.setEmptyTileVisible&&r.setEmptyTileVisible(e,!1)),e.traversal.visible=!1),e.traversal.active&&e.internal.hasRenderableContent&&this.invokeOnePlugin(r=>r.setTileActive&&r.setTileActive(e,!1)),e.traversal.active=!1;let{scene:t}=e.engineData;t&&this.dispatchEvent({type:"dispose-model",scene:t,tile:e})}preprocessNode(e,t,r=null){if(this.processedTiles.add(e),this.stats.tilesProcessed++,e.content&&(!("uri"in e.content)&&"url"in e.content&&(e.content.uri=e.content.url,delete e.content.url),e.content.boundingVolume&&!("box"in e.content.boundingVolume||"sphere"in e.content.boundingVolume||"region"in e.content.boundingVolume)&&delete e.content.boundingVolume),e.parent=r,e.children=e.children||[],e.internal={hasContent:!1,hasRenderableContent:!1,hasUnrenderableContent:!1,loadingState:0,basePath:t,depth:-1,depthFromRenderedParent:-1,isVirtual:!1,virtualChildCount:0,renderer:this,...e.internal},e.content?.uri){let n=ju(e.content.uri),i=!!(n&&/json$/.test(n));e.internal.hasContent=!0,e.internal.hasUnrenderableContent=i,e.internal.hasRenderableContent=!i}else e.internal.hasContent=!1,e.internal.hasUnrenderableContent=!1,e.internal.hasRenderableContent=!1;r?(e.internal.depth=r.internal.depth+1,e.internal.depthFromRenderedParent=r.internal.depthFromRenderedParent+ +!!e.internal.hasRenderableContent):(e.internal.depth=0,e.internal.depthFromRenderedParent=+!!e.internal.hasRenderableContent),e.traversal={distanceFromCamera:1/0,error:1/0,inFrustum:!1,wasInFrustum:!1,isLeaf:!1,used:!1,usedLastFrame:!1,visible:!1,wasSetVisible:!1,active:!1,wasSetActive:!1,allChildrenReady:!1,allChildrenLoaded:!1,kicked:!1,allUsedChildrenProcessed:!1,lastFrameVisited:-1},r===null?e.refine=e.refine||"REPLACE":e.refine=e.refine||r.refine,e.engineData={scene:null,metadata:null,boundingVolume:null},Object.defineProperty(e,"cached",{get(){return console.warn('TilesRenderer: "tile.cached" field has been renamed to "tile.engineData".'),this.engineData},enumerable:!1,configurable:!0}),this.invokeAllPlugins(n=>{n!==this&&n.preprocessNode&&n.preprocessNode(e,t,r)})}setTileActive(e,t){t?this.activeTiles.add(e):this.activeTiles.delete(e)}setTileVisible(e,t){t?this.visibleTiles.add(e):this.visibleTiles.delete(e),this.dispatchEvent({type:"tile-visibility-change",scene:e.engineData.scene,tile:e,visible:t})}calculateTileViewError(e,t){}removeUnusedPendingTiles(){let{lruCache:e,loadingTiles:t}=this,r=[];for(let n of t)!e.isUsed(n)&&n.internal.loadingState===1&&r.push(n);for(let n=0;n<r.length;n++)e.remove(r[n])}queueTileForDownload(e){e.internal.loadingState!==0||this.lruCache.isFull()||this.queuedTiles.push(e)}markTileUsed(e){this.usedSet.add(e),this.lruCache.markUsed(e)}fetchData(e,t){return fetch(e,t)}ensureChildrenArePreprocessed(e,t=this.stats.tilesProcessed<this.maxTilesProcessed){let r=e.children;if(r.length===0||r[r.length-1].traversal)return;let n=i=>{for(let a=0,o=i.length;a<o;a++){let s=i[a];s&&!s.traversal&&this.preprocessNode(s,e.internal.basePath,e)}};t?(this.processNodeQueue.remove(e),n(r)):this.processNodeQueue.has(e)||this.processNodeQueue.add(e,i=>{n(i.children),this._dispatchNeedsUpdateEvent()})}getBytesUsed(e){let t=0;return this.invokeAllPlugins(r=>{r.calculateBytesUsed&&(t+=r.calculateBytesUsed(e,e.engineData.scene)||0)}),t}recalculateBytesUsed(e=null){let{lruCache:t,processedTiles:r}=this;e===null?t.itemSet.forEach(n=>{r.has(n)&&t.setMemoryUsage(n,this.getBytesUsed(n))}):t.setMemoryUsage(e,this.getBytesUsed(e))}preprocessTileset(e,t,r=null){let[n,i]=e.asset.version.split(".").map(o=>parseInt(o));console.assert(n<=1,"TilesRenderer: asset.version is expected to be a 1.x or a compatible version."),n===1&&i>0&&console.warn("TilesRenderer: tiles versions at 1.1 or higher have limited support. Some new extensions and features may not be supported.");let a=t.replace(/\/[^/]*$/,"");a=new URL(a,window.location.href).toString(),this.preprocessNode(e.root,a,r)}loadRootTileset(){let e=this.rootURL;return this.invokeAllPlugins(t=>e=t.preprocessURL?t.preprocessURL(e,null):e),this.invokeOnePlugin(t=>t.fetchData&&t.fetchData(e,this.fetchOptions)).then(t=>{if(!(t instanceof Response))return t;if(t.ok)return t.json();throw Error(`TilesRenderer: Failed to load tileset "${e}" with status ${t.status} : ${t.statusText}`)}).then(t=>(this.preprocessTileset(t,e),t))}requestTileContents(e){if(e.internal.loadingState!==0)return;let t=!1,r=null,n=new URL(e.content.uri,e.internal.basePath+"/").toString();this.invokeAllPlugins(p=>n=p.preprocessURL?p.preprocessURL(n,e):n);let i=this.stats,a=this.lruCache,o=this.downloadQueue,s=this.parseQueue,c=this.loadingTiles,l=ju(n),d=new AbortController,u=d.signal;if(a.add(e,p=>{d.abort(),t?p.children.length=0:this.invokeAllPlugins(h=>{h.disposeTile&&h.disposeTile(p)}),i.inCache--,this.cachedSinceLoadComplete.has(e)&&(this.cachedSinceLoadComplete.delete(e),i.inCacheSinceLoad--),p.internal.loadingState===1?i.queued--:p.internal.loadingState===2?i.downloading--:p.internal.loadingState===3?i.parsing--:p.internal.loadingState===4&&i.loaded--,p.internal.loadingState=0,s.remove(p),o.remove(p),c.delete(p)}))return this.isLoading||(this.isLoading=!0,this.dispatchEvent({type:"tiles-load-start"})),a.setMemoryUsage(e,this.getBytesUsed(e)),this.cachedSinceLoadComplete.add(e),i.inCacheSinceLoad++,i.inCache++,i.queued++,e.internal.loadingState=1,c.add(e),o.add(n,e,p=>{if(u.aborted)return Promise.resolve();e.internal.loadingState=2,i.downloading++,i.queued--;let h=this.invokeOnePlugin(m=>m.fetchData&&m.fetchData(n,{...this.fetchOptions,signal:u}));return this.dispatchEvent({type:"tile-download-start",tile:e,url:n,get uri(){return console.warn('tile-download-start event: "uri" has been renamed to "url".'),this.url}}),h}).then(p=>{if(!u.aborted){if(!(p instanceof Response))return p;if(p.ok)return l==="json"?p.json():p.arrayBuffer();throw Error(`Failed to load model with error code ${p.status}`)}}).then(p=>{if(!u.aborted)return i.downloading--,i.parsing++,e.internal.loadingState=3,s.add(e,h=>u.aborted?Promise.resolve():l==="json"&&p.root?(this.preprocessTileset(p,n,e),e.children.push(p.root),r=p,t=!0,Promise.resolve()):this.invokeOnePlugin(m=>m.parseTile&&m.parseTile(p,h,l,n,u)))}).then(()=>{if(u.aborted)return;i.parsing--,i.loaded++,e.internal.loadingState=4,c.delete(e),a.setLoaded(e,!0);let p=this.getBytesUsed(e);if(a.getMemoryUsage(e)===0&&p>0&&a.isFull()){a.remove(e);return}a.setMemoryUsage(e,p),this.dispatchEvent({type:"needs-update"}),t&&this.dispatchEvent({type:"load-tileset",tileset:r,url:n}),e.engineData.scene&&this.dispatchEvent({type:"load-model",scene:e.engineData.scene,tile:e,url:n})}).catch(p=>{u.aborted||(p.name==="AbortError"?a.remove(e):(s.remove(e),o.remove(e),e.internal.loadingState===1?i.queued--:e.internal.loadingState===2?i.downloading--:e.internal.loadingState===3?i.parsing--:e.internal.loadingState===4&&i.loaded--,i.failed++,console.error(`TilesRenderer : Failed to load tile at url "${e.content.uri}".`),console.error(p),e.internal.loadingState=-1,c.delete(e),a.setLoaded(e,!0),this.dispatchEvent({type:"load-error",tile:e,error:p,url:n})))})}};function Jn(e){if(e===null||e.byteLength<4)return"";let t;if(t=e instanceof DataView?e:new DataView(e),String.fromCharCode(t.getUint8(0))==="{")return null;let r="";for(let n=0;n<4;n++)r+=String.fromCharCode(t.getUint8(n));return r}var QT=new TextDecoder;function ty(e){return QT.decode(e)}function ol(e){return e.replace(/[\\/][^\\/]+$/,"")+"/"}var qi=class{constructor(){this.fetchOptions={},this.workingPath=""}loadAsync(e){return fetch(e,this.fetchOptions).then(t=>{if(!t.ok)throw Error(`Failed to load file "${e}" with status ${t.status} : ${t.statusText}`);return t.arrayBuffer()}).then(t=>(this.workingPath===""&&(this.workingPath=ol(e)),this.parse(t)))}resolveExternalURL(e){return new URL(e,this.workingPath).href}parse(e){throw Error("LoaderBase: Parse not implemented.")}};function Hu(e,t,r,n,i,a){let o;switch(n){case"SCALAR":o=1;break;case"VEC2":o=2;break;case"VEC3":o=3;break;case"VEC4":o=4;break;default:throw Error(`FeatureTable : Feature type not provided for "${a}".`)}let s,c=r*o;switch(i){case"BYTE":s=new Int8Array(e,t,c);break;case"UNSIGNED_BYTE":s=new Uint8Array(e,t,c);break;case"SHORT":s=new Int16Array(e,t,c);break;case"UNSIGNED_SHORT":s=new Uint16Array(e,t,c);break;case"INT":s=new Int32Array(e,t,c);break;case"UNSIGNED_INT":s=new Uint32Array(e,t,c);break;case"FLOAT":s=new Float32Array(e,t,c);break;case"DOUBLE":s=new Float64Array(e,t,c);break;default:throw Error(`FeatureTable : Feature component type not provided for "${a}".`)}return s}var ea=class{constructor(e,t,r,n){this.buffer=e,this.binOffset=t+r,this.binLength=n;let i=null;if(r!==0){let a=new Uint8Array(e,t,r);i=JSON.parse(ty(a))}else i={};this.header=i}getKeys(){return Object.keys(this.header).filter(e=>e!=="extensions")}getData(e,t,r=null,n=null){let i=this.header;if(!(e in i))return null;let a=i[e];if(!(a instanceof Object)||Array.isArray(a))return a;{let{buffer:o,binOffset:s,binLength:c}=this,l=a.byteOffset||0,d=a.type||n,u=a.componentType||r;if("type"in a&&n&&a.type!==n)throw Error("FeatureTable: Specified type does not match expected type.");let p=s+l,h=Hu(o,p,t,d,u,e);if(p+h.byteLength>s+c)throw Error("FeatureTable: Feature data read outside binary body length.");return h}}getBuffer(e,t){let{buffer:r,binOffset:n}=this;return r.slice(n+e,n+e+t)}},JT=class{constructor(e){this.batchTable=e;let t=e.header.extensions["3DTILES_batch_table_hierarchy"];this.classes=t.classes;for(let n of this.classes){let i=n.instances;for(let a in i)n.instances[a]=this._parseProperty(i[a],n.length,a)}if(this.instancesLength=t.instancesLength,this.classIds=this._parseProperty(t.classIds,this.instancesLength,"classIds"),t.parentCounts?this.parentCounts=this._parseProperty(t.parentCounts,this.instancesLength,"parentCounts"):this.parentCounts=Array(this.instancesLength).fill(1),t.parentIds){let n=this.parentCounts.reduce((i,a)=>i+a,0);this.parentIds=this._parseProperty(t.parentIds,n,"parentIds")}else this.parentIds=null;this.instancesIds=[];let r={};for(let n of this.classIds)r[n]=r[n]??0,this.instancesIds.push(r[n]),r[n]++}_parseProperty(e,t,r){if(Array.isArray(e))return e;{let{buffer:n,binOffset:i}=this.batchTable,a=e.byteOffset,o=e.componentType||"UNSIGNED_SHORT";return Hu(n,i+a,t,"SCALAR",o,r)}}getDataFromId(e,t={}){let r=this.parentCounts[e];if(this.parentIds&&r>0){let s=0;for(let c=0;c<e;c++)s+=this.parentCounts[c];for(let c=0;c<r;c++){let l=this.parentIds[s+c];l!==e&&this.getDataFromId(l,t)}}let n=this.classIds[e],i=this.classes[n].instances,a=this.classes[n].name,o=this.instancesIds[e];for(let s in i)t[a]=t[a]||{},t[a][s]=i[s][o];return t}},al=class extends ea{constructor(e,t,r,n,i){super(e,r,n,i),this.count=t,this.extensions={};let a=this.header.extensions;a&&a["3DTILES_batch_table_hierarchy"]&&(this.extensions["3DTILES_batch_table_hierarchy"]=new JT(this))}getDataFromId(e,t={}){if(e<0||e>=this.count)throw Error(`BatchTable: id value "${e}" out of bounds for "${this.count}" features number.`);for(let r of this.getKeys())t[r]=super.getData(r,this.count)[e];for(let r in this.extensions){let n=this.extensions[r];n.getDataFromId instanceof Function&&(t[r]=t[r]||{},n.getDataFromId(e,t[r]))}return t}getPropertyArray(e){return super.getData(e,this.count)}},Wu=class extends qi{parse(e){let t=new DataView(e),r=Jn(t);console.assert(r==="b3dm");let n=t.getUint32(4,!0);console.assert(n===1);let i=t.getUint32(8,!0);console.assert(i===e.byteLength);let a=t.getUint32(12,!0),o=t.getUint32(16,!0),s=t.getUint32(20,!0),c=t.getUint32(24,!0),l=new ea(e.slice(28,28+a+o),0,a,o),d=28+a+o,u=new al(e.slice(d,d+s+c),l.getData("BATCH_LENGTH"),0,s,c),p=d+s+c;return{version:n,featureTable:l,batchTable:u,glbBytes:new Uint8Array(e,p,i-p)}}},Xu=class extends qi{parse(e){let t=new DataView(e),r=Jn(t);console.assert(r==="i3dm");let n=t.getUint32(4,!0);console.assert(n===1);let i=t.getUint32(8,!0);console.assert(i===e.byteLength);let a=t.getUint32(12,!0),o=t.getUint32(16,!0),s=t.getUint32(20,!0),c=t.getUint32(24,!0),l=t.getUint32(28,!0),d=new ea(e.slice(32,32+a+o),0,a,o),u=32+a+o,p=new al(e.slice(u,u+s+c),d.getData("INSTANCES_LENGTH"),0,s,c),h=u+s+c,m=new Uint8Array(e,h,i-h),g=null,f=null,y=null;if(l)g=m,f=Promise.resolve();else{let x=this.resolveExternalURL(ty(m));y=ol(x),f=fetch(x,this.fetchOptions).then(v=>{if(!v.ok)throw Error(`I3DMLoaderBase : Failed to load file "${x}" with status ${v.status} : ${v.statusText}`);return v.arrayBuffer()}).then(v=>{g=new Uint8Array(v)})}return f.then(()=>({version:n,featureTable:d,batchTable:p,glbBytes:g,gltfWorkingPath:y}))}},qu=class extends qi{parse(e){let t=new DataView(e),r=Jn(t);console.assert(r==="pnts");let n=t.getUint32(4,!0);console.assert(n===1);let i=t.getUint32(8,!0);console.assert(i===e.byteLength);let a=t.getUint32(12,!0),o=t.getUint32(16,!0),s=t.getUint32(20,!0),c=t.getUint32(24,!0),l=new ea(e.slice(28,28+a+o),0,a,o),d=28+a+o,u=new al(e.slice(d,d+s+c),l.getData("BATCH_LENGTH")||l.getData("POINTS_LENGTH"),0,s,c);return Promise.resolve({version:n,featureTable:l,batchTable:u})}},$u=class extends qi{parse(e){let t=new DataView(e),r=Jn(t);console.assert(r==="cmpt",'CMPTLoader: The magic bytes equal "cmpt".');let n=t.getUint32(4,!0);console.assert(n===1,'CMPTLoader: The version listed in the header is "1".');let i=t.getUint32(8,!0);console.assert(i===e.byteLength,"CMPTLoader: The contents buffer length listed in the header matches the file.");let a=t.getUint32(12,!0),o=[],s=16;for(let c=0;c<a;c++){let l=new DataView(e,s,12),d=Jn(l),u=l.getUint32(4,!0),p=l.getUint32(8,!0),h=new Uint8Array(e,s,p);o.push({type:d,buffer:h,version:u}),s+=p}return{version:n,tiles:o}}};import{Box3 as by,BufferAttribute as ei,BufferGeometry as ZT,Clock as yI,Color as e_,DefaultLoadingManager as gl,Euler as t_,EventDispatcher as sl,Frustum as r_,Group as id,InstancedMesh as n_,LoadingManager as i_,MathUtils as yy,Matrix3 as o_,Matrix4 as yt,Mesh as xI,OrthographicCamera as vI,PerspectiveCamera as wI,Plane as a_,PlaneGeometry as MI,Points as s_,PointsMaterial as l_,Quaternion as xy,Ray as od,Raycaster as SI,ShaderMaterial as CI,Sphere as vy,Spherical as c_,TextureUtils as u_,Vector2 as ad,Vector3 as Se}from"three";import{GLTFLoader as sd}from"three/addons/loaders/GLTFLoader.js";import{estimateBytesUsed as d_}from"three/addons/utils/BufferGeometryUtils.js";var ld=class extends Wu{constructor(e=gl){super(),this.manager=e,this.adjustmentTransform=new yt}parse(e){let t=super.parse(e),r=t.glbBytes.slice().buffer;return new Promise((n,i)=>{let a=this.manager,o=this.fetchOptions,s=a.getHandler("path.gltf")||new sd(a);o.credentials==="include"&&o.mode==="cors"&&s.setCrossOrigin("use-credentials"),"credentials"in o&&s.setWithCredentials(o.credentials==="include"),o.headers&&s.setRequestHeader(o.headers);let c=this.workingPath;!/[\\/]$/.test(c)&&c.length&&(c+="/");let l=this.adjustmentTransform;s.parse(r,c,d=>{let{batchTable:u,featureTable:p}=t,{scene:h}=d,m=p.getData("RTC_CENTER",1,"FLOAT","VEC3");m&&(h.position.x+=m[0],h.position.y+=m[1],h.position.z+=m[2]),d.scene.updateMatrix(),d.scene.matrix.multiply(l),d.scene.matrix.decompose(d.scene.position,d.scene.quaternion,d.scene.scale),d.batchTable=u,d.featureTable=p,h.batchTable=u,h.featureTable=p,n(d)},i)})}};function p_(e){let t=e>>11,r=e>>5&63,n=e&31;return[Math.round(t/31*255),Math.round(r/63*255),Math.round(n/31*255)]}var ta=new ad;function h_(e,t,r=new Se){ta.set(e,t).divideScalar(256).multiplyScalar(2).subScalar(1),r.set(ta.x,ta.y,1-Math.abs(ta.x)-Math.abs(ta.y));let n=yy.clamp(-r.z,0,1);return r.x>=0?r.setX(r.x-n):r.setX(r.x+n),r.y>=0?r.setY(r.y-n):r.setY(r.y+n),r.normalize(),r}var ry={RGB:"color",POSITION:"position"},cd=class extends qu{constructor(e=gl){super(),this.manager=e}parse(e){return super.parse(e).then(async t=>{let{featureTable:r,batchTable:n}=t,i=new l_,a=r.header.extensions,o=new Se,s;if(a&&a["3DTILES_draco_point_compression"]){let{byteOffset:d,byteLength:u,properties:p}=a["3DTILES_draco_point_compression"],h=this.manager.getHandler("draco.drc");if(h==null)throw Error("PNTSLoader: dracoLoader not available.");let m={};for(let y in p)if(y in ry&&y in p){let x=ry[y];m[x]=p[y]}let g={attributeIDs:m,attributeTypes:{position:"Float32Array",color:"Uint8Array"},useUniqueIDs:!0},f=r.getBuffer(d,u);s=await h.decodeGeometry(f,g),s.attributes.color&&(i.vertexColors=!0)}else{let d=r.getData("POINTS_LENGTH"),u=r.getData("POSITION",d,"FLOAT","VEC3"),p=r.getData("NORMAL",d,"FLOAT","VEC3"),h=r.getData("NORMAL",d,"UNSIGNED_BYTE","VEC2"),m=r.getData("RGB",d,"UNSIGNED_BYTE","VEC3"),g=r.getData("RGBA",d,"UNSIGNED_BYTE","VEC4"),f=r.getData("RGB565",d,"UNSIGNED_SHORT","SCALAR"),y=r.getData("CONSTANT_RGBA",d,"UNSIGNED_BYTE","VEC4"),x=r.getData("POSITION_QUANTIZED",d,"UNSIGNED_SHORT","VEC3"),v=r.getData("QUANTIZED_VOLUME_SCALE",d,"FLOAT","VEC3"),C=r.getData("QUANTIZED_VOLUME_OFFSET",d,"FLOAT","VEC3");if(s=new ZT,x){let P=new Float32Array(d*3);for(let b=0;b<d;b++)for(let E=0;E<3;E++){let T=3*b+E;P[T]=x[T]/65535*v[E]}o.x=C[0],o.y=C[1],o.z=C[2],s.setAttribute("position",new ei(P,3,!1))}else s.setAttribute("position",new ei(u,3,!1));if(p!==null)s.setAttribute("normal",new ei(p,3,!1));else if(h!==null){let P=new Float32Array(d*3),b=new Se;for(let E=0;E<d;E++){let T=h[E*2],_=h[E*2+1],M=h_(T,_,b);P[E*3]=M.x,P[E*3+1]=M.y,P[E*3+2]=M.z}s.setAttribute("normal",new ei(P,3,!1))}if(g!==null)s.setAttribute("color",new ei(g,4,!0)),i.vertexColors=!0,i.transparent=!0,i.depthWrite=!1;else if(m!==null)s.setAttribute("color",new ei(m,3,!0)),i.vertexColors=!0;else if(f!==null){let P=new Uint8Array(d*3);for(let b=0;b<d;b++){let E=p_(f[b]);for(let T=0;T<3;T++){let _=3*b+T;P[_]=E[T]}}s.setAttribute("color",new ei(P,3,!0)),i.vertexColors=!0}else if(y!==null){i.color=new e_(y[0],y[1],y[2]);let P=y[3]/255;P<1&&(i.opacity=P,i.transparent=!0,i.depthWrite=!1)}}let c=new s_(s,i);c.position.copy(o),t.scene=c,t.scene.featureTable=r,t.scene.batchTable=n;let l=r.getData("RTC_CENTER",1,"FLOAT","VEC3");return l&&(t.scene.position.x+=l[0],t.scene.position.y+=l[1],t.scene.position.z+=l[2]),t})}};function m_(e){let{x:t,y:r,z:n}=e;e.x=n,e.y=t,e.z=r}function f_(e){return-e+Math.PI/2}var ny=new c_,xn=new Se,zt=new Se,Yu=new Se,nr=new yt,Er=new yt,Ku=new vy,Wt=new t_,iy=new Se,oy=new Se,ay=new Se,ra=new Se,ll=new od,g_=1e-12,b_=.1;var ud=class{constructor(e=1,t=1,r=1){this.name="",this.radius=new Se(e,t,r)}intersectRay(e,t){return nr.makeScale(...this.radius).invert(),Ku.center.set(0,0,0),Ku.radius=1,ll.copy(e).applyMatrix4(nr),ll.intersectSphere(Ku,t)?(nr.makeScale(...this.radius),t.applyMatrix4(nr),t):null}getEastNorthUpFrame(e,t,r,n){return r.isMatrix4&&(n=r,r=0,console.warn('Ellipsoid: The signature for "getEastNorthUpFrame" has changed.')),this.getEastNorthUpAxes(e,t,iy,oy,ay),this.getCartographicToPosition(e,t,r,ra),n.makeBasis(iy,oy,ay).setPosition(ra)}getOrientedEastNorthUpFrame(e,t,r,n,i,a,o){return this.getObjectFrame(e,t,r,n,i,a,o,0)}getObjectFrame(e,t,r,n,i,a,o,s=2){return this.getEastNorthUpFrame(e,t,r,nr),Wt.set(i,a,-n,"ZXY"),o.makeRotationFromEuler(Wt).premultiply(nr),s===1?(Wt.set(Math.PI/2,0,0,"XYZ"),Er.makeRotationFromEuler(Wt),o.multiply(Er)):s===2&&(Wt.set(-Math.PI/2,0,Math.PI,"XYZ"),Er.makeRotationFromEuler(Wt),o.multiply(Er)),o}getCartographicFromObjectFrame(e,t,r=2){return r===1?(Wt.set(-Math.PI/2,0,0,"XYZ"),Er.makeRotationFromEuler(Wt).premultiply(e)):r===2?(Wt.set(-Math.PI/2,0,Math.PI,"XYZ"),Er.makeRotationFromEuler(Wt).premultiply(e)):Er.copy(e),ra.setFromMatrixPosition(Er),this.getPositionToCartographic(ra,t),this.getEastNorthUpFrame(t.lat,t.lon,0,nr).invert(),Er.premultiply(nr),Wt.setFromRotationMatrix(Er,"ZXY"),t.azimuth=-Wt.z,t.elevation=Wt.x,t.roll=Wt.y,t}getEastNorthUpAxes(e,t,r,n,i,a=ra){this.getCartographicToPosition(e,t,0,a),this.getCartographicToNormal(e,t,i),r.set(-a.y,a.x,0).normalize(),n.crossVectors(i,r).normalize()}getCartographicToPosition(e,t,r,n){this.getCartographicToNormal(e,t,xn);let i=this.radius;zt.copy(xn),zt.x*=i.x**2,zt.y*=i.y**2,zt.z*=i.z**2;let a=Math.sqrt(xn.dot(zt));return zt.divideScalar(a),n.copy(zt).addScaledVector(xn,r)}getPositionToCartographic(e,t){this.getPositionToSurfacePoint(e,zt),this.getPositionToNormal(zt,xn);let r=Yu.subVectors(e,zt);return t.lon=Math.atan2(xn.y,xn.x),t.lat=Math.asin(xn.z),t.height=Math.sign(r.dot(e))*r.length(),t}getCartographicToNormal(e,t,r){return ny.set(1,f_(e),t),r.setFromSpherical(ny).normalize(),m_(r),r}getPositionToNormal(e,t){let r=this.radius;return t.copy(e),t.x/=r.x**2,t.y/=r.y**2,t.z/=r.z**2,t.normalize(),t}getPositionToSurfacePoint(e,t){let r=this.radius,n=1/r.x**2,i=1/r.y**2,a=1/r.z**2,o=e.x*e.x*n,s=e.y*e.y*i,c=e.z*e.z*a,l=o+s+c,d=Math.sqrt(1/l),u=zt.copy(e).multiplyScalar(d);if(l<b_)return isFinite(d)?t.copy(u):null;let p=Yu.set(u.x*n*2,u.y*i*2,u.z*a*2),h=(1-d)*e.length()/(.5*p.length()),m=0,g,f,y,x,v,C,P,b,E,T,_;do{h-=m,y=1/(1+h*n),x=1/(1+h*i),v=1/(1+h*a),C=y*y,P=x*x,b=v*v,E=C*y,T=P*x,_=b*v,g=o*C+s*P+c*b-1,f=o*E*n+s*T*i+c*_*a;let M=-2*f;m=g/M}while(Math.abs(g)>g_);return t.set(e.x*y,e.y*x,e.z*v)}calculateHorizonDistance(e,t){let r=this.calculateEffectiveRadius(e);return Math.sqrt(2*r*t+t**2)}calculateEffectiveRadius(e){let t=this.radius.x,r=1-this.radius.z**2/t**2,n=e*yy.DEG2RAD,i=Math.sin(n)**2;return t/Math.sqrt(1-r*i)}getPositionElevation(e){this.getPositionToSurfacePoint(e,zt);let t=Yu.subVectors(e,zt);return Math.sign(t.dot(e))*t.length()}closestPointToRayEstimate(e,t){return this.intersectRay(e,t)?t:(nr.makeScale(...this.radius).invert(),ll.copy(e).applyMatrix4(nr),zt.set(0,0,0),ll.closestPointToPoint(zt,t).normalize(),nr.makeScale(...this.radius),t.applyMatrix4(nr))}copy(e){return this.radius.copy(e.radius),this}clone(){return new this.constructor().copy(this)}},sa=new ud(Zn,Zn,Fu);sa.name="WGS84 Earth";var cl=new Se,$i=new Se,Yi=new Se,Qu=new Se,ul=new xy,dl=new Se,Ki=new yt,sy=new yt,ly=new Se,cy=new yt,Ju=new xy,Zu={};function uy(e,t,r,n){if(e=e/r*2-1,t=t/r*2-1,n.x=e,n.y=t,n.z=1-Math.abs(e)-Math.abs(t),n.z<0){let i=n.x;n.x=(1-Math.abs(n.y))*(i>=0?1:-1),n.y=(1-Math.abs(i))*(n.y>=0?1:-1)}return n.normalize(),n}var dd=class extends Xu{constructor(e=gl){super(),this.manager=e,this.adjustmentTransform=new yt,this.ellipsoid=sa.clone()}resolveExternalURL(e){return this.manager.resolveURL(super.resolveExternalURL(e))}parse(e){return super.parse(e).then(t=>{let{featureTable:r,batchTable:n}=t,i=t.glbBytes.slice().buffer;return new Promise((a,o)=>{let s=this.fetchOptions,c=this.manager,l=c.getHandler("path.gltf")||new sd(c);s.credentials==="include"&&s.mode==="cors"&&l.setCrossOrigin("use-credentials"),"credentials"in s&&l.setWithCredentials(s.credentials==="include"),s.headers&&l.setRequestHeader(s.headers);let d=t.gltfWorkingPath??this.workingPath;/[\\/]$/.test(d)||(d+="/");let u=this.adjustmentTransform;l.parse(i,d,p=>{let h=r.getData("INSTANCES_LENGTH"),m=r.getData("POSITION",h,"FLOAT","VEC3"),g=r.getData("POSITION_QUANTIZED",h,"UNSIGNED_SHORT","VEC3"),f=r.getData("QUANTIZED_VOLUME_OFFSET",1,"FLOAT","VEC3"),y=r.getData("QUANTIZED_VOLUME_SCALE",1,"FLOAT","VEC3"),x=r.getData("NORMAL_UP",h,"FLOAT","VEC3"),v=r.getData("NORMAL_RIGHT",h,"FLOAT","VEC3"),C=r.getData("NORMAL_UP_OCT32P",h,"UNSIGNED_SHORT","VEC2"),P=r.getData("NORMAL_RIGHT_OCT32P",h,"UNSIGNED_SHORT","VEC2"),b=r.getData("SCALE_NON_UNIFORM",h,"FLOAT","VEC3"),E=r.getData("SCALE",h,"FLOAT","SCALAR"),T=r.getData("RTC_CENTER",1,"FLOAT","VEC3"),_=r.getData("EAST_NORTH_UP");if(!m&&g){m=new Float32Array(h*3);for(let D=0;D<h;D++)m[D*3+0]=f[0]+g[D*3+0]/65535*y[0],m[D*3+1]=f[1]+g[D*3+1]/65535*y[1],m[D*3+2]=f[2]+g[D*3+2]/65535*y[2]}let M=new Se;for(let D=0;D<h;D++)M.x+=m[D*3+0]/h,M.y+=m[D*3+1]/h,M.z+=m[D*3+2]/h;let S=[],A=[];p.scene.updateMatrixWorld(),p.scene.traverse(D=>{if(D.isMesh){A.push(D);let{geometry:k,material:I}=D,R=new n_(k,I,h);R.position.copy(M),T&&(R.position.x+=T[0],R.position.y+=T[1],R.position.z+=T[2]),S.push(R)}});for(let D=0;D<h;D++){Qu.set(m[D*3+0]-M.x,m[D*3+1]-M.y,m[D*3+2]-M.z),ul.identity(),x&&v?($i.set(x[D*3+0],x[D*3+1],x[D*3+2]),Yi.set(v[D*3+0],v[D*3+1],v[D*3+2]),cl.crossVectors(Yi,$i).normalize(),Ki.makeBasis(Yi,$i,cl),ul.setFromRotationMatrix(Ki)):C&&P&&(uy(C[D*2+0],C[D*2+1],65535,$i),uy(P[D*2+0],P[D*2+1],65535,Yi),cl.crossVectors(Yi,$i).normalize(),Ki.makeBasis(Yi,$i,cl),ul.setFromRotationMatrix(Ki)),dl.set(1,1,1),b&&dl.set(b[D*3+0],b[D*3+1],b[D*3+2]),E&&dl.multiplyScalar(E[D]);for(let k=0,I=S.length;k<I;k++){let R=S[k];Ju.copy(ul),_&&(R.updateMatrixWorld(),ly.copy(Qu).applyMatrix4(R.matrixWorld),this.ellipsoid.getPositionToCartographic(ly,Zu),this.ellipsoid.getEastNorthUpFrame(Zu.lat,Zu.lon,cy),Ju.setFromRotationMatrix(cy)),Ki.compose(Qu,Ju,dl).multiply(u);let V=A[k];sy.multiplyMatrices(Ki,V.matrixWorld),R.setMatrixAt(D,sy)}}p.scene.clear(),p.scene.add(...S),p.batchTable=n,p.featureTable=r,p.scene.batchTable=n,p.scene.featureTable=r,a(p)},o)})})}},wy=class extends $u{constructor(e=gl){super(),this.manager=e,this.adjustmentTransform=new yt,this.ellipsoid=sa.clone()}parse(e){let t=super.parse(e),{manager:r,ellipsoid:n,adjustmentTransform:i}=this,a=[];for(let o in t.tiles){let{type:s,buffer:c}=t.tiles[o];switch(s){case"b3dm":{let l=c.slice(),d=new ld(r);d.workingPath=this.workingPath,d.fetchOptions=this.fetchOptions,d.adjustmentTransform.copy(i);let u=d.parse(l.buffer);a.push(u);break}case"pnts":{let l=c.slice(),d=new cd(r);d.workingPath=this.workingPath,d.fetchOptions=this.fetchOptions;let u=d.parse(l.buffer);a.push(u);break}case"i3dm":{let l=c.slice(),d=new dd(r);d.workingPath=this.workingPath,d.fetchOptions=this.fetchOptions,d.ellipsoid.copy(n),d.adjustmentTransform.copy(i);let u=d.parse(l.buffer);a.push(u);break}}}return Promise.all(a).then(o=>{let s=new id;return o.forEach(c=>{s.add(c.scene)}),{tiles:o,scene:s}})}},na=new yt,y_=class extends id{constructor(e){super(),this.isTilesGroup=!0,this.name="TilesRenderer.TilesGroup",this.tilesRenderer=e,this.matrixWorldInverse=new yt}raycast(e,t){return this.tilesRenderer.raycast(e,t),!1}updateMatrixWorld(e){if(this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldNeedsUpdate||e){this.parent===null?na.copy(this.matrix):na.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1;let t=na.elements,r=this.matrixWorld.elements,n=!1;for(let i=0;i<16;i++){let a=t[i],o=r[i];if(Math.abs(a-o)>2**-52){n=!0;break}}if(n){this.matrixWorld.copy(na),this.matrixWorldInverse.copy(na).invert();let i=this.children;for(let c=0,l=i.length;c<l;c++)i[c].updateMatrixWorld();let{tilesRenderer:a}=this,{activeTiles:o,visibleTiles:s}=a;o.forEach(c=>{s.has(c)||c.engineData.scene.updateMatrixWorld(!0)})}}}updateWorldMatrix(e,t){this.parent&&e&&this.parent.updateWorldMatrix(e,!1),this.updateMatrixWorld(!0)}},x_=new od;function v_(e,t,r,n){let{scene:i}=e.engineData;r.invokeOnePlugin(a=>a.raycastTile&&a.raycastTile(e,i,t,n))||t.intersectObject(i,!0,n)}function w_(e){return"traversal"in e}function My(e,t,r,n,i=null){if(!w_(t))return;let{group:a,activeTiles:o}=e,{boundingVolume:s}=t.engineData;if(i===null&&(i=x_,i.copy(r.ray).applyMatrix4(a.matrixWorldInverse)),!t.traversal.used||!s.intersectsRay(i))return;o.has(t)&&v_(t,r,e,n);let c=t.children;for(let l=0,d=c.length;l<d;l++)My(e,c[l],r,n,i)}var pl=new Se,hl=new Se,Xt=new Se,ml=new od,rd=class{constructor(e=new by,t=new yt){this.box=e.clone(),this.transform=t.clone(),this.inverseTransform=new yt,this.points=Array(8).fill().map(()=>new Se),this.planes=[,,,,,,].fill().map(()=>new a_)}copy(e){return this.box.copy(e.box),this.transform.copy(e.transform),this.update(),this}clone(){return new this.constructor().copy(this)}clampPoint(e,t){return t.copy(e).applyMatrix4(this.inverseTransform).clamp(this.box.min,this.box.max).applyMatrix4(this.transform)}distanceToPoint(e){return this.clampPoint(e,Xt).distanceTo(e)}containsPoint(e){return Xt.copy(e).applyMatrix4(this.inverseTransform),this.box.containsPoint(Xt)}intersectsRay(e){return ml.copy(e).applyMatrix4(this.inverseTransform),ml.intersectsBox(this.box)}intersectRay(e,t){return ml.copy(e).applyMatrix4(this.inverseTransform),ml.intersectBox(this.box,t)?(t.applyMatrix4(this.transform),t):null}update(){let{points:e,inverseTransform:t,transform:r,box:n}=this;t.copy(r).invert();let{min:i,max:a}=n,o=0;for(let s=-1;s<=1;s+=2)for(let c=-1;c<=1;c+=2)for(let l=-1;l<=1;l+=2)e[o].set(s<0?i.x:a.x,c<0?i.y:a.y,l<0?i.z:a.z).applyMatrix4(r),o++;this.updatePlanes()}updatePlanes(){pl.copy(this.box.min).applyMatrix4(this.transform),hl.copy(this.box.max).applyMatrix4(this.transform),Xt.set(0,0,1).transformDirection(this.transform),this.planes[0].setFromNormalAndCoplanarPoint(Xt,pl),this.planes[1].setFromNormalAndCoplanarPoint(Xt,hl).negate(),Xt.set(0,1,0).transformDirection(this.transform),this.planes[2].setFromNormalAndCoplanarPoint(Xt,pl),this.planes[3].setFromNormalAndCoplanarPoint(Xt,hl).negate(),Xt.set(1,0,0).transformDirection(this.transform),this.planes[4].setFromNormalAndCoplanarPoint(Xt,pl),this.planes[5].setFromNormalAndCoplanarPoint(Xt,hl).negate()}intersectsSphere(e){return this.clampPoint(e.center,Xt),Xt.distanceToSquared(e.center)<=e.radius*e.radius}intersectsFrustum(e){return this._intersectsPlaneShape(e.planes,e.points)}intersectsOBB(e){return this._intersectsPlaneShape(e.planes,e.points)}_intersectsPlaneShape(e,t){let r=this.points,n=this.planes;for(let i=0;i<6;i++){let a=e[i],o=-1/0;for(let s=0;s<8;s++){let c=r[s],l=a.distanceToPoint(c);o=o<l?l:o}if(o<0)return!1}for(let i=0;i<6;i++){let a=n[i],o=-1/0;for(let s=0;s<8;s++){let c=t[s],l=a.distanceToPoint(c);o=o<l?l:o}if(o<0)return!1}return!0}},aa=Math.PI,ed=aa/2,ia=new Se,ti=new Se,hr=new Se,de=new Se,jt=new yt,M_=new by,dy=new yt;function vn(e,t){t.radius=Math.max(t.radius,e.distanceToSquared(t.center))}function py(e){return e.x!==e.y}var Sy=class extends ud{constructor(e=1,t=1,r=1,n=-ed,i=ed,a=0,o=2*aa,s=0,c=0){super(e,t,r),this.latStart=n,this.latEnd=i,this.lonStart=a,this.lonEnd=o,this.heightStart=s,this.heightEnd=c}getBoundingBox(e,t){py(this.radius)&&console.warn("EllipsoidRegion: Triaxial ellipsoids are not supported.");let{latStart:r,latEnd:n,lonStart:i,lonEnd:a,heightStart:o,heightEnd:s}=this,c=(r+n)*.5,l=(i+a)*.5,d=r>0,u=n<0,p;p=d?r:u?n:0;let{min:h,max:m}=e;h.setScalar(1/0),m.setScalar(-1/0),a-i<=aa?(this.getCartographicToNormal(c,l,hr),ti.set(0,0,1),ia.crossVectors(ti,hr).normalize(),ti.crossVectors(hr,ia).normalize(),t.makeBasis(ia,ti,hr),jt.copy(t).invert(),this.getCartographicToPosition(p,i,s,de).applyMatrix4(jt),m.x=Math.abs(de.x),h.x=-m.x,this.getCartographicToPosition(n,i,s,de).applyMatrix4(jt),m.y=de.y,this.getCartographicToPosition(n,l,s,de).applyMatrix4(jt),m.y=Math.max(de.y,m.y),this.getCartographicToPosition(r,i,s,de).applyMatrix4(jt),h.y=de.y,this.getCartographicToPosition(r,l,s,de).applyMatrix4(jt),h.y=Math.min(de.y,h.y),this.getCartographicToPosition(c,l,s,de).applyMatrix4(jt),m.z=de.z,this.getCartographicToPosition(r,i,o,de).applyMatrix4(jt),h.z=de.z,this.getCartographicToPosition(n,i,o,de).applyMatrix4(jt),h.z=Math.min(de.z,h.z)):(this.getCartographicToPosition(p,l,s,hr),hr.z=0,hr.length()<1e-10?hr.set(1,0,0):hr.normalize(),ti.set(0,0,1),ia.crossVectors(hr,ti).normalize(),t.makeBasis(ia,ti,hr),jt.copy(t).invert(),this.getCartographicToPosition(p,l+ed,s,de).applyMatrix4(jt),m.x=Math.abs(de.x),h.x=-m.x,this.getCartographicToPosition(n,0,u?o:s,de).applyMatrix4(jt),m.y=de.y,this.getCartographicToPosition(r,0,d?o:s,de).applyMatrix4(jt),h.y=de.y,this.getCartographicToPosition(p,l,s,de).applyMatrix4(jt),m.z=de.z,this.getCartographicToPosition(p,a,s,de).applyMatrix4(jt),h.z=de.z),e.getCenter(de),e.min.sub(de).multiplyScalar(1.0000000000001),e.max.sub(de).multiplyScalar(1.0000000000001),de.applyMatrix4(t),t.setPosition(de)}getBoundingSphere(e){py(this.radius)&&console.warn("EllipsoidRegion: Triaxial ellipsoids are not supported."),this.getBoundingBox(M_,dy),e.center.setFromMatrixPosition(dy),e.radius=0;let{latStart:t,latEnd:r,lonStart:n,lonEnd:i,heightStart:a,heightEnd:o}=this,s=(t+r)*.5,c=(n+i)*.5,l=t>0,d=r<0,u;u=l?t:d?r:0,this.getCartographicToPosition(u,n,o,de),vn(de,e),this.getCartographicToPosition(r,n,o,de),vn(de,e),this.getCartographicToPosition(r,c,o,de),vn(de,e),this.getCartographicToPosition(t,n,o,de),vn(de,e),this.getCartographicToPosition(t,c,o,de),vn(de,e),this.getCartographicToPosition(s,c,o,de),vn(de,e),this.getCartographicToPosition(t,n,a,de),vn(de,e),i-n>aa&&(this.getCartographicToPosition(u,c+aa,o,de),vn(de,e)),e.radius=Math.sqrt(e.radius)*1.0000000000001}},qr=new Se,$r=new Se,Yr=new Se,hy=new Se,my=new Se,S_=class{constructor(){this.sphere=null,this.obb=null,this.region=null,this.regionObb=null}intersectsRay(e){let t=this.sphere,r=this.obb||this.regionObb;return!(t&&!e.intersectsSphere(t)||r&&!r.intersectsRay(e))}intersectRay(e,t=null){let r=this.sphere,n=this.obb||this.regionObb,i=-1/0,a=-1/0;r&&e.intersectSphere(r,hy)&&(i=r.containsPoint(e.origin)?0:e.origin.distanceToSquared(hy)),n&&n.intersectRay(e,my)&&(a=n.containsPoint(e.origin)?0:e.origin.distanceToSquared(my));let o=Math.max(i,a);return o===-1/0?null:(e.at(Math.sqrt(o),t),t)}distanceToPoint(e){let t=this.sphere,r=this.obb||this.regionObb,n=-1/0,i=-1/0;return t&&(n=Math.max(t.distanceToPoint(e),0)),r&&(i=r.distanceToPoint(e)),n>i?n:i}intersectsFrustum(e){let t=this.obb||this.regionObb,r=this.sphere;return r&&!e.intersectsSphere(r)||t&&!t.intersectsFrustum(e)?!1:!!(r||t)}intersectsSphere(e){let t=this.obb||this.regionObb,r=this.sphere;return r&&!r.intersectsSphere(e)||t&&!t.intersectsSphere(e)?!1:!!(r||t)}intersectsOBB(e){let t=this.obb||this.regionObb,r=this.sphere;return r&&!e.intersectsSphere(r)||t&&!t.intersectsOBB(e)?!1:!!(r||t)}getOBB(e,t){let r=this.obb||this.regionObb;r?(e.copy(r.box),t.copy(r.transform)):(this.getAABB(e),t.identity())}getAABB(e){if(this.sphere)this.sphere.getBoundingBox(e);else{let t=this.obb||this.regionObb;e.copy(t.box).applyMatrix4(t.transform)}}getSphere(e){if(this.sphere)e.copy(this.sphere);else if(this.region)this.region.getBoundingSphere(e);else{let t=this.obb||this.regionObb;t.box.getBoundingSphere(e),e.applyMatrix4(t.transform)}}setObbData(e,t){let r=new rd;qr.set(e[3],e[4],e[5]),$r.set(e[6],e[7],e[8]),Yr.set(e[9],e[10],e[11]);let n=qr.length(),i=$r.length(),a=Yr.length();qr.normalize(),$r.normalize(),Yr.normalize(),n===0&&qr.crossVectors($r,Yr),i===0&&$r.crossVectors(qr,Yr),a===0&&Yr.crossVectors(qr,$r),r.transform.set(qr.x,$r.x,Yr.x,e[0],qr.y,$r.y,Yr.y,e[1],qr.z,$r.z,Yr.z,e[2],0,0,0,1).premultiply(t),r.box.min.set(-n,-i,-a),r.box.max.set(n,i,a),r.update(),this.obb=r}setSphereData(e,t,r,n,i){let a=new vy;a.center.set(e,t,r),a.radius=n,a.applyMatrix4(i),this.sphere=a}setRegionData(e,t,r,n,i,a,o){let s=new Sy(...e.radius,r,i,t,n,a,o),c=new rd;s.getBoundingBox(c.box,c.transform),c.update(),this.region=s,this.regionObb=c}},C_=new o_;function T_(e,t,r,n){let i=C_.set(e.normal.x,e.normal.y,e.normal.z,t.normal.x,t.normal.y,t.normal.z,r.normal.x,r.normal.y,r.normal.z);return n.set(-e.constant,-t.constant,-r.constant),n.applyMatrix3(i.invert()),n}var __=class extends r_{constructor(){super(),this.points=Array(8).fill().map(()=>new Se)}setFromProjectionMatrix(...e){return super.setFromProjectionMatrix(...e),this.calculateFrustumPoints(),this}calculateFrustumPoints(){let{planes:e,points:t}=this;[[e[0],e[3],e[4]],[e[1],e[3],e[4]],[e[0],e[2],e[4]],[e[1],e[2],e[4]],[e[0],e[3],e[5]],[e[1],e[3],e[5]],[e[0],e[2],e[5]],[e[1],e[2],e[5]]].forEach((r,n)=>{T_(r[0],r[1],r[2],t[n])})}};var nd=0;function fy(e,t,r,n){try{return u_.getByteLength(e,t,r,n)}catch{return nd}}function P_(e){if(!e)return 0;if(e.isExternalTexture)return e.userData?.byteLength??nd;let{format:t,type:r,image:n,mipmaps:i}=e;if(e.isCompressedTexture&&Array.isArray(i)&&i.length>0){let o=0;for(let s of i)s?.data?.byteLength?o+=s.data.byteLength:o+=fy(s.width,s.height,t,r);return o}if(!n)return nd;let a=fy(n.width,n.height,t,r);return a*=e.generateMipmaps?4/3:1,a}function E_(e){let t=new Set,r=0;return e.traverse(n=>{if(n.geometry&&!t.has(n.geometry)&&(r+=d_(n.geometry),t.add(n.geometry)),n.material){let i=n.material;for(let a in i){let o=i[a];o&&o.isTexture&&!t.has(o)&&(r+=P_(o),t.add(o))}}}),r}var Cy=Symbol("INITIAL_FRUSTUM_CULLED"),fl=new yt,oa=new Se,td=new ad,A_=new Se(1,0,0),R_=new Se(0,1,0),k_=()=>null;function gy(e,t){e.traverse(r=>{r.frustumCulled=r[Cy]&&t})}var pd=class extends Gu{get autoDisableRendererCulling(){return this._autoDisableRendererCulling}set autoDisableRendererCulling(e){this._autoDisableRendererCulling!==e&&(super._autoDisableRendererCulling=e,this.forEachLoadedModel(t=>{gy(t,!e)}))}constructor(...e){super(...e),this.accelerateRaycast=!0,this.group=new y_(this),this.ellipsoid=sa.clone(),this.cameras=[],this.cameraMap=new Map,this.cameraInfo=[],this._upRotationMatrix=new yt,this._bytesUsed=new WeakMap,this._autoDisableRendererCulling=!0,this.manager=new i_,this._listeners={}}addEventListener(e,t){sl.prototype.addEventListener.call(this,e,t)}hasEventListener(e,t){return sl.prototype.hasEventListener.call(this,e,t)}removeEventListener(e,t){sl.prototype.removeEventListener.call(this,e,t)}dispatchEvent(e){sl.prototype.dispatchEvent.call(this,e)}getBoundingBox(e){if(!this.root)return!1;let t=this.root.engineData.boundingVolume;return t?(t.getAABB(e),!0):!1}getOrientedBoundingBox(e,t){if(!this.root)return!1;let r=this.root.engineData.boundingVolume;return r?(r.getOBB(e,t),!0):!1}getBoundingSphere(e){if(!this.root)return!1;let t=this.root.engineData.boundingVolume;return t?(t.getSphere(e),!0):!1}forEachLoadedModel(e){this.traverse(t=>{let r=t.engineData&&t.engineData.scene;r&&e(r,t)},null,!1)}raycast(e,t){if(this.root)if(this.accelerateRaycast)My(this,this.root,e,t);else{let r=e.firstHitOnly?[]:t;for(let n of this.activeTiles){let{scene:i}=n.engineData;this.invokeOnePlugin(a=>a.raycastTile&&a.raycastTile(n,i,e,r))||e.intersectObject(i,!0,r)}e.firstHitOnly&&r.length>0&&(r.sort((n,i)=>n.distance-i.distance),t.push(r[0]))}}hasCamera(e){return this.cameraMap.has(e)}setCamera(e){let t=this.cameras,r=this.cameraMap;return r.has(e)?!1:(r.set(e,new ad),t.push(e),this.dispatchEvent({type:"add-camera",camera:e}),!0)}setResolution(e,t,r){let n=this.cameraMap;if(!n.has(e))return!1;let i=t.isVector2?t.x:t,a=t.isVector2?t.y:r,o=n.get(e);return(o.width!==i||o.height!==a)&&(o.set(i,a),this.dispatchEvent({type:"camera-resolution-change"})),!0}getResolution(e,t){let r=this.cameraMap.get(e);return r?t.copy(r):null}setResolutionFromRenderer(e,t){return t.getSize(td),this.setResolution(e,td.x,td.y)}deleteCamera(e){let t=this.cameras,r=this.cameraMap;if(r.has(e)){let n=t.indexOf(e);return t.splice(n,1),r.delete(e),this.dispatchEvent({type:"delete-camera",camera:e}),!0}return!1}loadRootTileset(...e){return super.loadRootTileset(...e).then(t=>{let{asset:r,extensions:n={}}=t;switch((r&&r.gltfUpAxis||"y").toLowerCase()){case"x":this._upRotationMatrix.makeRotationAxis(R_,-Math.PI/2);break;case"y":this._upRotationMatrix.makeRotationAxis(A_,Math.PI/2);break}if("3DTILES_ellipsoid"in n){let i=n["3DTILES_ellipsoid"],{ellipsoid:a}=this;a.name=i.body,i.radii?a.radius.set(...i.radii):a.radius.set(1,1,1)}return t})}prepareForTraversal(){let e=this.group,t=this.cameras,r=this.cameraMap,n=this.cameraInfo;for(;n.length>t.length;)n.pop();for(;n.length<t.length;)n.push({frustum:new __,isOrthographic:!1,sseDenominator:-1,position:new Se,invScale:-1,pixelSize:0});oa.setFromMatrixScale(e.matrixWorldInverse),Math.abs(Math.max(oa.x-oa.y,oa.x-oa.z))>1e-6&&console.warn("ThreeTilesRenderer : Non uniform scale used for tile which may cause issues when calculating screen space error.");for(let i=0,a=n.length;i<a;i++){let o=t[i],s=n[i],c=s.frustum,l=s.position,d=r.get(o);(d.width===0||d.height===0)&&console.warn("TilesRenderer: resolution for camera error calculation is not set.");let u=o.projectionMatrix.elements;if(s.isOrthographic=u[15]===1,s.isOrthographic){let p=2/u[0],h=2/u[5];s.pixelSize=Math.max(h/d.height,p/d.width)}else s.sseDenominator=2/u[5]/d.height;fl.copy(e.matrixWorld),fl.premultiply(o.matrixWorldInverse),fl.premultiply(o.projectionMatrix),c.setFromProjectionMatrix(fl,o.coordinateSystem,o.reversedDepth),l.set(0,0,0),l.applyMatrix4(o.matrixWorld),l.applyMatrix4(e.matrixWorldInverse)}}update(){if(super.update(),this.cameras.length===0&&this.root){let e=!1;this.invokeAllPlugins(t=>e||(e=!!(t!==this&&t.calculateTileViewError))),e===!1&&console.warn("TilesRenderer: no cameras defined. Cannot update 3d tiles.")}}preprocessNode(e,t,r=null){super.preprocessNode(e,t,r);let n=new yt;if(e.transform){let o=e.transform;for(let s=0;s<16;s++)n.elements[s]=o[s]}r&&n.premultiply(r.engineData.transform);let i=new yt().copy(n).invert(),a=new S_;"sphere"in e.boundingVolume&&a.setSphereData(...e.boundingVolume.sphere,n),"box"in e.boundingVolume&&a.setObbData(e.boundingVolume.box,n),"region"in e.boundingVolume&&a.setRegionData(this.ellipsoid,...e.boundingVolume.region),e.engineData.transform=n,e.engineData.transformInverse=i,e.engineData.boundingVolume=a,e.engineData.geometry=null,e.engineData.materials=null,e.engineData.textures=null,e.toJSON=k_}async parseTile(e,t,r,n,i){let a=t.engineData,o=ol(n),s=this.fetchOptions,c=this.manager,l=null,d=a.transform,u=this._upRotationMatrix,p=(Jn(e)||r).toLowerCase();switch(p){case"b3dm":{let v=new ld(c);v.workingPath=o,v.fetchOptions=s,v.adjustmentTransform.copy(u),l=v.parse(e);break}case"pnts":{let v=new cd(c);v.workingPath=o,v.fetchOptions=s,l=v.parse(e);break}case"i3dm":{let v=new dd(c);v.workingPath=o,v.fetchOptions=s,v.adjustmentTransform.copy(u),v.ellipsoid.copy(this.ellipsoid),l=v.parse(e);break}case"cmpt":{let v=new wy(c);v.workingPath=o,v.fetchOptions=s,v.adjustmentTransform.copy(u),v.ellipsoid.copy(this.ellipsoid),l=v.parse(e).then(C=>C.scene);break}case"gltf":case"glb":{let v=c.getHandler("path.gltf")||c.getHandler("path.glb")||new sd(c);v.setWithCredentials(s.credentials==="include"),v.setRequestHeader(s.headers||{}),s.credentials==="include"&&s.mode==="cors"&&v.setCrossOrigin("use-credentials");let C=v.resourcePath||v.path||o;!/[\\/]$/.test(C)&&C.length&&(C+="/"),l=v.parseAsync(e,C).then(P=>{P.scene=P.scene||new id;let{scene:b}=P;return b.updateMatrix(),b.matrix.multiply(u).decompose(b.position,b.quaternion,b.scale),P});break}default:l=this.invokeOnePlugin(v=>v.parseToMesh&&v.parseToMesh(e,t,r,n,i));break}let h=await l;if(h===null)throw Error(`TilesRenderer: Content type "${p}" not supported.`);let m,g;h.isObject3D?(m=h,g=null):(m=h.scene,g=h),m.updateMatrix(),m.matrix.premultiply(d),m.matrix.decompose(m.position,m.quaternion,m.scale),await this.invokeAllPlugins(v=>v.processTileModel&&v.processTileModel(m,t)),m.traverse(v=>{v[Cy]=v.frustumCulled,v.userData.tile=t}),gy(m,!this.autoDisableRendererCulling);let f=[],y=[],x=[];if(m.traverse(v=>{if(v.geometry&&y.push(v.geometry),v.material){let C=v.material;f.push(v.material);for(let P in C){let b=C[P];b&&b.isTexture&&x.push(b)}}}),i.aborted){for(let v=0,C=x.length;v<C;v++){let P=x[v];P.image instanceof ImageBitmap&&P.image.close(),P.dispose()}return}a.materials=f,a.geometry=y,a.textures=x,a.scene=m,a.metadata=g}disposeTile(e){super.disposeTile(e);let t=e.engineData;if(t.scene){let r=t.materials,n=t.geometry,i=t.textures,a=t.scene.parent;t.scene.traverse(o=>{o.userData.meshFeatures&&o.userData.meshFeatures.dispose(),o.userData.structuralMetadata&&o.userData.structuralMetadata.dispose()});for(let o=0,s=n.length;o<s;o++)n[o].dispose();for(let o=0,s=r.length;o<s;o++)r[o].dispose();for(let o=0,s=i.length;o<s;o++){let c=i[o];c.image instanceof ImageBitmap&&c.image.close(),c.dispose()}a&&a.remove(t.scene),t.scene=null,t.materials=null,t.textures=null,t.geometry=null,t.metadata=null}}setTileActive(e,t){super.setTileActive(e,t);let r=e.engineData.scene;r&&(t?(r.parent=this.group,r.updateMatrixWorld(!0)):r.parent=null)}setTileVisible(e,t){let r=e.engineData.scene,{activeTiles:n,group:i}=this;r&&(t?i.add(r):(i.remove(r),n.has(e)&&(r.parent=i))),super.setTileVisible(e,t)}calculateBytesUsed(e,t){let r=this._bytesUsed;return!r.has(e)&&t&&r.set(e,E_(t)),r.get(e)??null}calculateTileViewError(e,t){let r=e.engineData,n=this.cameras,i=this.cameraInfo,a=r.boundingVolume,o=!1,s=0,c=1/0,l=0,d=1/0;for(let u=0,p=n.length;u<p;u++){let h=i[u],m,g;if(h.isOrthographic){let y=h.pixelSize;m=e.geometricError/y,g=1/0}else{let y=h.sseDenominator;g=a.distanceToPoint(h.position),m=g===0?1/0:e.geometricError/(g*y)}let f=i[u].frustum;a.intersectsFrustum(f)&&(o=!0,s=Math.max(s,m),c=Math.min(c,g)),l=Math.max(l,m),d=Math.min(d,g)}o?(t.inView=!0,t.error=s,t.distanceFromCamera=c):(t.inView=!1,t.error=l,t.distanceFromCamera=d)}dispose(){super.dispose(),this.group.removeFromParent()}};import{BatchedMesh as l5,Box2 as D_,Box3 as c5,Box3Helper as u5,BoxGeometry as d5,BufferAttribute as fd,BufferGeometry as p5,CanvasTexture as h5,Color as m5,CustomBlending as L_,DataTexture as O_,DefaultLoadingManager as f5,DoubleSide as g5,EventDispatcher as b5,FileLoader as I_,FloatType as y5,Frustum as x5,GreaterDepth as v5,Group as w5,LineBasicMaterial as M5,LineSegments as S5,LinearFilter as B_,LinearMipMapLinearFilter as C5,MathUtils as gd,Matrix2 as N_,Matrix3 as z_,Matrix4 as j_,Mesh as T5,MeshBasicMaterial as V_,MeshLambertMaterial as _5,MeshStandardMaterial as P5,OneFactor as F_,PlaneGeometry as E5,Points as A5,PointsMaterial as R5,Quaternion as k5,REVISION as D5,RGFormat as L5,Ray as O5,Raycaster as I5,RedFormat as B5,SRGBColorSpace as N5,ShaderMaterial as U_,Source as z5,Sphere as j5,SphereGeometry as V5,Texture as F5,TextureUtils as U5,Triangle as G5,UnsignedByteType as H5,Vector2 as mr,Vector3 as Vy,Vector4 as G_,WebGLArrayRenderTarget as W5,WebGLRenderTarget as Ty,WebGLRenderer as H_,ZeroFactor as W_}from"three";import{GLTFLoader as X_}from"three/addons/loaders/GLTFLoader.js";import{FullScreenQuad as Fy}from"three/addons/postprocessing/Pass.js";var $5=Object.freeze({fill:"#cccccc",stroke:"transparent",strokeWidth:1,radius:2,order:0,visible:!0});var _y=new Pr;_y.maxJobs=10,_y.priorityCallback=(e,t)=>{let r=e.tile,n=t.tile,i=r.internal.renderer,a=n.internal.renderer,o=i.visibleTiles.has(r);return o===a.visibleTiles.has(n)?Xi(r,n):o?1:-1};var Py=new Vy;function la(e,t){if(e.isInterleavedBufferAttribute||e.array instanceof t)return e;let r=t===Int8Array||t===Int16Array||t===Int32Array?-1:0,n=new fd(new t(e.count*e.itemSize),e.itemSize,!0),i=e.itemSize,a=e.count;for(let o=0;o<a;o++)for(let s=0;s<i;s++){let c=gd.clamp(e.getComponent(o,s),r,1);n.setComponent(o,s,c)}return n}function q_(e,t=Int16Array){let r=e.geometry,n=r.attributes,i=n.position;if(i.isInterleavedBufferAttribute||i.array instanceof t)return i;let a=new fd(new t(i.count*i.itemSize),i.itemSize,!1),o=i.itemSize,s=i.count;r.computeBoundingBox();let c=r.boundingBox,{min:l,max:d}=c,u=2**(8*t.BYTES_PER_ELEMENT-1)-1,p=-u;for(let h=0;h<s;h++)for(let m=0;m<o;m++){let g=m===0?"x":m===1?"y":"z",f=l[g],y=d[g],x=gd.mapLinear(i.getComponent(h,m),f,y,p,u);a.setComponent(h,m,x)}c.getCenter(Py).multiply(e.scale).applyQuaternion(e.quaternion),e.position.add(Py),e.scale.x*=.5*(d.x-l.x)/u,e.scale.y*=.5*(d.y-l.y)/u,e.scale.z*=.5*(d.z-l.z)/u,n.position=a,e.geometry.boundingBox=null,e.geometry.boundingSphere=null,e.updateMatrixWorld()}var bd=class{constructor(e){this._options={generateNormals:!1,disableMipmaps:!0,compressIndex:!0,compressNormals:!1,compressUvs:!1,compressPosition:!1,uvType:Int8Array,normalType:Int8Array,positionType:Int16Array,...e},this.name="TILES_COMPRESSION_PLUGIN",this.priority=-100}processTileModel(e,t){let{generateNormals:r,disableMipmaps:n,compressIndex:i,compressUvs:a,compressNormals:o,compressPosition:s,uvType:c,normalType:l,positionType:d}=this._options;e.traverse(u=>{if(u.material&&n){let p=u.material;for(let h in p){let m=p[h];m&&m.isTexture&&m.generateMipmaps&&(m.generateMipmaps=!1,m.minFilter=B_)}}if(u.geometry){let p=u.geometry,h=p.attributes;if(a){let{uv:m,uv1:g,uv2:f,uv3:y}=h;m&&(h.uv=la(m,c)),g&&(h.uv1=la(g,c)),f&&(h.uv2=la(f,c)),y&&(h.uv3=la(y,c))}if(r&&!h.normals&&p.computeVertexNormals(),o&&h.normals&&(h.normals=la(h.normals,l)),s&&q_(u,d),i&&p.index){let m=h.position.count,g=p.index,f=m>65535?Uint32Array:m>255?Uint16Array:Uint8Array;if(!(g.array instanceof f)){let y=new f(p.index.count);y.set(g.array);let x=new fd(y,1);p.setIndex(x)}}}})}};function xt(e,t,r){return e&&t in e?e[t]:r}function Uy(e){return e!=="BOOLEAN"&&e!=="STRING"&&e!=="ENUM"}function $_(e){return/^FLOAT/.test(e)}function pa(e){return/^VEC/.test(e)}function ha(e){return/^MAT/.test(e)}function Gy(e,t,r,n=null){return ha(r)||pa(r)?n.fromArray(e,t):e[t]}function hd(e){let{type:t,componentType:r}=e;switch(t){case"SCALAR":return r==="INT64"?0n:0;case"VEC2":return new mr;case"VEC3":return new Vy;case"VEC4":return new G_;case"MAT2":return new N_;case"MAT3":return new z_;case"MAT4":return new j_;case"BOOLEAN":return!1;case"STRING":return"";case"ENUM":return 0}}function Ey(e,t){if(t==null)return!1;switch(e){case"SCALAR":return typeof t=="number"||typeof t=="bigint";case"VEC2":return t.isVector2;case"VEC3":return t.isVector3;case"VEC4":return t.isVector4;case"MAT2":return t.isMatrix2;case"MAT3":return t.isMatrix3;case"MAT4":return t.isMatrix4;case"BOOLEAN":return typeof t=="boolean";case"STRING":return typeof t=="string";case"ENUM":return typeof t=="number"||typeof t=="bigint"}throw Error("ClassProperty: invalid type.")}function da(e,t=null){switch(e){case"INT8":return Int8Array;case"INT16":return Int16Array;case"INT32":return Int32Array;case"INT64":return BigInt64Array;case"UINT8":return Uint8Array;case"UINT16":return Uint16Array;case"UINT32":return Uint32Array;case"UINT64":return BigUint64Array;case"FLOAT32":return Float32Array;case"FLOAT64":return Float64Array}switch(t){case"BOOLEAN":return Uint8Array;case"STRING":return Uint8Array}throw Error("ClassProperty: invalid type.")}function Y_(e,t=null){if(e.array){t=t&&Array.isArray(t)?t:[],t.length=e.count;for(let r=0,n=t.length;r<n;r++)t[r]=bl(e,t[r])}else t=bl(e,t);return t}function bl(e,t=null){let r=e.default,n=e.type;if(t||(t=hd(e)),r===null){switch(n){case"SCALAR":return 0;case"VEC2":return t.set(0,0);case"VEC3":return t.set(0,0,0);case"VEC4":return t.set(0,0,0,0);case"MAT2":return t.identity();case"MAT3":return t.identity();case"MAT4":return t.identity();case"BOOLEAN":return!1;case"STRING":return"";case"ENUM":return""}throw Error("ClassProperty: invalid type.")}else if(ha(n))t.fromArray(r);else if(pa(n))t.fromArray(r);else return r}function K_(e,t){if(e.noData===null)return t;let r=e.noData,n=e.type;if(Array.isArray(t))for(let o=0,s=t.length;o<s;o++)t[o]=i(t[o]);else t=i(t);return t;function i(o){return a(o)&&(o=bl(e,o)),o}function a(o){if(ha(n)){let s=o.elements;for(let c=0,l=r.length;c<l;c++)if(r[c]!==s[c])return!1;return!0}else if(pa(n)){for(let s=0,c=r.length;s<c;s++)if(r[s]!==o.getComponent(s))return!1;return!0}else return r===o}}function Q_(e,t){switch(e){case"INT8":return Math.max(t/127,-1);case"INT16":return Math.max(t,32767,-1);case"INT32":return Math.max(t/2147483647,-1);case"INT64":return Math.max(Number(t)/9223372036854776e3,-1);case"UINT8":return t/255;case"UINT16":return t/65535;case"UINT32":return t/4294967295;case"UINT64":return Number(t)/18446744073709552e3}}function J_(e,t){let{type:r,componentType:n,scale:i,offset:a,normalized:o}=e;if(Array.isArray(t))for(let u=0,p=t.length;u<p;u++)t[u]=s(t[u]);else t=s(t);return t;function s(u){return u=ha(r)?l(u):pa(r)?c(u):d(u),u}function c(u){return u.x=d(u.x),u.y=d(u.y),"z"in u&&(u.z=d(u.z)),"w"in u&&(u.w=d(u.w)),u}function l(u){let p=u.elements;for(let h=0,m=p.length;h<m;h++)p[h]=d(p[h]);return u}function d(u){return o&&(u=Q_(n,u)),(o||$_(n))&&(u=u*i+a),u}}function yd(e,t,r=null){if(e.array){Array.isArray(t)||(t=Array(e.count||0)),t.length=r===null?e.count:r;for(let n=0,i=t.length;n<i;n++)Ey(e.type,t[n])||(t[n]=hd(e))}else Ey(e.type,t)||(t=hd(e));return t}function yl(e,t){for(let r in t)r in e||delete t[r];for(let r in e){let n=e[r];t[r]=yd(n,t[r])}}function Z_(e){switch(e){case"ENUM":return 1;case"SCALAR":return 1;case"VEC2":return 2;case"VEC3":return 3;case"VEC4":return 4;case"MAT2":return 4;case"MAT3":return 9;case"MAT4":return 16;case"BOOLEAN":return-1;case"STRING":return-1;default:return-1}}var vl=class{constructor(e,t,r=null){this.name=t.name||null,this.description=t.description||null,this.type=t.type,this.componentType=t.componentType||null,this.enumType=t.enumType||null,this.array=t.array||!1,this.count=t.count||0,this.normalized=t.normalized||!1,this.offset=t.offset||0,this.scale=xt(t,"scale",1),this.max=xt(t,"max",1/0),this.min=xt(t,"min",-1/0),this.required=t.required||!1,this.noData=xt(t,"noData",null),this.default=xt(t,"default",null),this.semantic=xt(t,"semantic",null),this.enumSet=null,this.accessorProperty=r,r&&(this.offset=xt(r,"offset",this.offset),this.scale=xt(r,"scale",this.scale),this.max=xt(r,"max",this.max),this.min=xt(r,"min",this.min)),t.type==="ENUM"&&(this.enumSet=e[this.enumType],this.componentType===null&&(this.componentType=xt(this.enumSet,"valueType","UINT16")))}shapeToProperty(e,t=null){return yd(this,e,t)}resolveDefaultElement(e){return bl(this,e)}resolveDefault(e){return Y_(this,e)}resolveNoData(e){return K_(this,e)}resolveEnumsToStrings(e){let t=this.enumSet;if(this.type==="ENUM")if(Array.isArray(e))for(let n=0,i=e.length;n<i;n++)e[n]=r(e[n]);else e=r(e);return e;function r(n){let i=t.values.find(a=>a.value===n);return i===null?"":i.name}}adjustValueScaleOffset(e){return Uy(this.type)?J_(this,e):e}},xd=class{constructor(e,t={},r={},n=null){this.definition=e,this.class=t[e.class],this.className=e.class,this.enums=r,this.data=n,this.name="name"in e?e.name:null,this.properties=null}getPropertyNames(){return Object.keys(this.class.properties)}includesData(e){return!!this.definition.properties[e]}dispose(){}_initProperties(e=vl){let t={};for(let r in this.class.properties)t[r]=new e(this.enums,this.class.properties[r],this.definition.properties[r]);this.properties=t}},eP=class extends vl{constructor(e,t,r=null){super(e,t,r),this.attribute=r?.attribute??null}},tP=class extends xd{constructor(...e){super(...e),this.isPropertyAttributeAccessor=!0,this._initProperties(eP)}getData(e,t,r={}){let n=this.properties;yl(n,r);for(let i in n)r[i]=this.getPropertyValue(i,e,t,r[i]);return r}getPropertyValue(e,t,r,n=null){if(t>=this.count)throw Error("PropertyAttributeAccessor: Requested index is outside the range of the buffer.");let i=this.properties[e],a=i.type;if(!i)throw Error("PropertyAttributeAccessor: Requested class property does not exist.");if(!this.definition.properties[e])return i.resolveDefault(n);n=i.shapeToProperty(n);let o=r.getAttribute(i.attribute.toLowerCase());if(ha(a)){let s=n.elements;for(let c=s.length;0<c;)s[0]=o.getComponent(t,0)}else if(pa(a))n.fromBufferAttribute(o,t);else if(a==="SCALAR"||a==="ENUM")n=o.getX(t);else throw Error("StructuredMetadata.PropertyAttributeAccessor: BOOLEAN and STRING types are not supported by property attributes.");return n=i.adjustValueScaleOffset(n),n=i.resolveEnumsToStrings(n),n=i.resolveNoData(n),n}},rP=class extends vl{constructor(e,t,r=null){super(e,t,r),this.values=r?.values??null,this.valueLength=Z_(this.type),this.arrayOffsets=xt(r,"arrayOffsets",null),this.stringOffsets=xt(r,"stringOffsets",null),this.arrayOffsetType=xt(r,"arrayOffsetType","UINT32"),this.stringOffsetType=xt(r,"stringOffsetType","UINT32")}getArrayLengthFromId(e,t){let r=this.count;if(this.arrayOffsets!==null){let{arrayOffsets:n,arrayOffsetType:i}=this,a=new(da(i))(e[n]);r=a[t+1]-a[t]}return r}getIndexOffsetFromId(e,t){let r=t;if(this.arrayOffsets){let{arrayOffsets:n,arrayOffsetType:i}=this;r=new(da(i))(e[n])[r]}else this.array&&(r*=this.count);return r}},nP=class extends xd{constructor(...e){super(...e),this.isPropertyTableAccessor=!0,this.count=this.definition.count,this._initProperties(rP)}getData(e,t={}){let r=this.properties;yl(r,t);for(let n in r)t[n]=this.getPropertyValue(n,e,t[n]);return t}_readValueAtIndex(e,t,r,n=null){let i=this.properties[e],{componentType:a,type:o}=i,s=this.data,c=s[i.values],l=new(da(a,o))(c),d=i.getIndexOffsetFromId(s,t);if(Uy(o)||o==="ENUM")return Gy(l,(d+r)*i.valueLength,o,n);if(o==="STRING"){let u=d+r,p=0;if(i.stringOffsets!==null){let{stringOffsets:m,stringOffsetType:g}=i,f=new(da(g))(s[m]);p=f[u+1]-f[u],u=f[u]}let h=new Uint8Array(l.buffer,u,p);n=new TextDecoder().decode(h)}else if(o==="BOOLEAN"){let u=d+r,p=Math.floor(u/8),h=u%8;n=(l[p]>>h&1)==1}return n}getPropertyValue(e,t,r=null){if(t>=this.count)throw Error("PropertyTableAccessor: Requested index is outside the range of the table.");let n=this.properties[e];if(!n)throw Error("PropertyTableAccessor: Requested property does not exist.");if(!this.definition.properties[e])return n.resolveDefault(r);let i=n.array,a=this.data,o=n.getArrayLengthFromId(a,t);if(r=n.shapeToProperty(r,o),i)for(let s=0,c=r.length;s<c;s++)r[s]=this._readValueAtIndex(e,t,s,r[s]);else r=this._readValueAtIndex(e,t,0,r);return r=n.adjustValueScaleOffset(r),r=n.resolveEnumsToStrings(r),r=n.resolveNoData(r),r}},ca=new D_,Ay=class{constructor(){this._renderer=new H_,this._target=new Ty(1,1),this._texTarget=new Ty,this._quad=new Fy(new U_({blending:L_,blendDst:W_,blendSrc:F_,uniforms:{map:{value:null},pixel:{value:new mr}},vertexShader:`
13
+ void main() {
14
+
15
+ gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
16
+
17
+ }
18
+ `,fragmentShader:`
19
+ uniform sampler2D map;
20
+ uniform ivec2 pixel;
21
+
22
+ void main() {
23
+
24
+ gl_FragColor = texelFetch( map, pixel, 0 );
25
+
26
+ }
27
+ `}))}increaseSizeTo(e){this._target.setSize(Math.max(this._target.width,e),1)}readDataAsync(e){let{_renderer:t,_target:r}=this;return t.readRenderTargetPixelsAsync(r,0,0,e.length/4,1,e)}readData(e){let{_renderer:t,_target:r}=this;t.readRenderTargetPixels(r,0,0,e.length/4,1,e)}renderPixelToTarget(e,t,r){let{_renderer:n,_target:i}=this;ca.min.copy(t),ca.max.copy(t),ca.max.x+=1,ca.max.y+=1,n.initRenderTarget(i),n.copyTextureToTexture(e,i.texture,ca,r,0)}},Mn=new class{constructor(){let e=null;Object.getOwnPropertyNames(Ay.prototype).forEach(t=>{t!=="constructor"&&(this[t]=(...r)=>(e||(e=new Ay),e[t](...r)))})}},Ry=new mr,ky=new mr,Dy=new mr;function iP(e,t){return t===0?e.getAttribute("uv"):e.getAttribute(`uv${t}`)}function Hy(e,t,r=[,,,]){let n=3*t,i=3*t+1,a=3*t+2;return e.index&&(n=e.index.getX(n),i=e.index.getX(i),a=e.index.getX(a)),r[0]=n,r[1]=i,r[2]=a,r}function Wy(e,t,r,n,i){let[a,o,s]=n,c=iP(e,t);Ry.fromBufferAttribute(c,a),ky.fromBufferAttribute(c,o),Dy.fromBufferAttribute(c,s),i.set(0,0,0).addScaledVector(Ry,r.x).addScaledVector(ky,r.y).addScaledVector(Dy,r.z)}function Xy(e,t,r,n){let i=e.x-Math.floor(e.x),a=e.y-Math.floor(e.y),o=Math.floor(i*t%t),s=Math.floor(a*r%r);return n.set(o,s),n}var Ly=new mr,Oy=new mr,Iy=new mr,oP=class extends vl{constructor(e,t,r=null){super(e,t,r),this.channels=xt(r,"channels",[0]),this.index=xt(r,"index",null),this.texCoord=xt(r,"texCoord",null),this.valueLength=parseInt(this.type.replace(/[^0-9]/g,""))||1}readDataFromBuffer(e,t,r=null){let n=this.type;if(n==="BOOLEAN"||n==="STRING")throw Error("PropertyTextureAccessor: BOOLEAN and STRING types not supported.");return Gy(e,t*this.valueLength,n,r)}},aP=class extends xd{constructor(...e){super(...e),this.isPropertyTextureAccessor=!0,this._asyncRead=!1,this._initProperties(oP)}getData(e,t,r,n={}){let i=this.properties;yl(i,n);let a=Object.keys(i),o=a.map(s=>n[s]);return this.getPropertyValuesAtTexel(a,e,t,r,o),a.forEach((s,c)=>n[s]=o[c]),n}async getDataAsync(e,t,r,n={}){let i=this.properties;yl(i,n);let a=Object.keys(i),o=a.map(s=>n[s]);return await this.getPropertyValuesAtTexelAsync(a,e,t,r,o),a.forEach((s,c)=>n[s]=o[c]),n}getPropertyValuesAtTexelAsync(...e){this._asyncRead=!0;let t=this.getPropertyValuesAtTexel(...e);return this._asyncRead=!1,t}getPropertyValuesAtTexel(e,t,r,n,i=[]){for(;i.length<e.length;)i.push(null);i.length=e.length,Mn.increaseSizeTo(i.length);let a=this.data,o=this.definition.properties,s=this.properties,c=Hy(n,t);for(let u=0,p=e.length;u<p;u++){let h=e[u];if(!o[h])continue;let m=s[h],g=a[m.index];Wy(n,m.texCoord,r,c,Ly),Xy(Ly,g.image.width,g.image.height,Oy),Iy.set(u,0),Mn.renderPixelToTarget(g,Oy,Iy)}let l=new Uint8Array(e.length*4);if(this._asyncRead)return Mn.readDataAsync(l).then(()=>(d.call(this),i));return Mn.readData(l),d.call(this),i;function d(){for(let u=0,p=e.length;u<p;u++){let h=e[u],m=s[h],g=m.type;if(i[u]=yd(m,i[u]),!m)throw Error("PropertyTextureAccessor: Requested property does not exist.");if(!o[h]){i[u]=m.resolveDefault(i);continue}let f=m.valueLength*(m.count||1),y=m.channels.map(C=>l[4*u+C]),x=m.componentType,v=new(da(x,g))(f);if(new Uint8Array(v.buffer).set(y),m.array){let C=i[u];for(let P=0,b=C.length;P<b;P++)C[P]=m.readDataFromBuffer(v,P,C[P])}else i[u]=m.readDataFromBuffer(v,0,i[u]);i[u]=m.adjustValueScaleOffset(i[u]),i[u]=m.resolveEnumsToStrings(i[u]),i[u]=m.resolveNoData(i[u])}}}dispose(){this.data.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},md=class{constructor(e,t,r,n=null,i=null){let{schema:a,propertyTables:o=[],propertyTextures:s=[],propertyAttributes:c=[]}=e,{enums:l,classes:d}=a,u=o.map(m=>new nP(m,d,l,r)),p=[],h=[];n&&(n.propertyTextures&&(p=n.propertyTextures.map(m=>new aP(s[m],d,l,t))),n.propertyAttributes&&(h=n.propertyAttributes.map(m=>new tP(c[m],d,l)))),this.schema=a,this.tableAccessors=u,this.textureAccessors=p,this.attributeAccessors=h,this.object=i,this.textures=t,this.nodeMetadata=n}getPropertyTableData(e,t,r=null){if(!Array.isArray(e))r||(r={}),r=this.tableAccessors[e].getData(t,r);else{r||(r=[]);let n=Math.min(e.length,t.length);r.length=n;for(let i=0;i<n;i++){let a=this.tableAccessors[e[i]];r[i]=a.getData(t[i],r[i])}}if(Array.isArray(e)!==Array.isArray(r)||Array.isArray(e)!==Array.isArray(t))throw Error("StructuralMetadata: Scalar and array inputs cannot be mixed.");return r}getPropertyTableInfo(e=null){if(e===null&&(e=this.tableAccessors.map((t,r)=>r)),Array.isArray(e))return e.map(t=>{let r=this.tableAccessors[t];return{name:r.name,className:r.definition.class}});{let t=this.tableAccessors[e];return{name:t.name,className:t.definition.class}}}getPropertyTextureData(e,t,r=[]){let n=this.textureAccessors;r.length=n.length;for(let i=0;i<n.length;i++)r[i]=n[i].getData(e,t,this.object.geometry,r[i]);return r}async getPropertyTextureDataAsync(e,t,r=[]){let n=this.textureAccessors;r.length=n.length;let i=[];for(let a=0;a<n.length;a++){let o=n[a].getDataAsync(e,t,this.object.geometry,r[a]).then(s=>{r[a]=s});i.push(o)}return await Promise.all(i),r}getPropertyTextureInfo(){return this.textureAccessors}getPropertyAttributeData(e,t=[]){let r=this.attributeAccessors;t.length=r.length;for(let n=0;n<r.length;n++)t[n]=r[n].getData(e,this.object.geometry,t[n]);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())}},ua="EXT_structural_metadata";function sP(e,t=[]){let r=e.json.textures?.length||0,n=Array(r).fill(null);return t.forEach(({properties:i})=>{for(let a in i){let{index:o}=i[a];n[o]===null&&(n[o]=e.loadTexture(o))}}),Promise.all(n)}function lP(e,t=[]){let r=e.json.bufferViews?.length||0,n=Array(r).fill(null);return t.forEach(({properties:i})=>{for(let a in i){let{values:o,arrayOffsets:s,stringOffsets:c}=i[a];n[o]===null&&(n[o]=e.getDependency("bufferView",o)),n[s]===null&&(n[s]=e.getDependency("bufferView",s)),n[c]===null&&(n[c]=e.getDependency("bufferView",c))}}),Promise.all(n)}var qy=class{constructor(e){this.parser=e,this.name=ua}async afterRoot({scene:e,parser:t}){let r=t.json.extensionsUsed;if(!r||!r.includes(ua))return;let n=null,i=t.json.extensions[ua];if(i.schemaUri){let{manager:c,path:l,requestHeader:d,crossOrigin:u}=t.options,p=new URL(i.schemaUri,l).toString(),h=new I_(c);h.setCrossOrigin(u),h.setResponseType("json"),h.setRequestHeader(d),n=h.loadAsync(p).then(m=>{i={...i,schema:m}})}let[a,o]=await Promise.all([sP(t,i.propertyTextures),lP(t,i.propertyTables),n]),s=new md(i,a,o);e.userData.structuralMetadata=s,e.traverse(c=>{if(t.associations.has(c)){let{meshes:l,primitives:d}=t.associations.get(c),u=t.json.meshes[l]?.primitives[d];if(u&&u.extensions&&u.extensions[ua]){let p=u.extensions[ua];c.userData.structuralMetadata=new md(i,a,o,p,c)}else c.userData.structuralMetadata=s}})}},By=new mr,Ny=new mr,zy=new mr;function cP(e){return e.x>e.y&&e.x>e.z?0:e.y>e.z?1:2}var $y=class{constructor(e,t,r){this.geometry=e,this.textures=t,this.data=r,this._asyncRead=!1,this.featureIds=r.featureIds.map(n=>{let{texture:i,...a}=n,o={label:null,propertyTable:null,nullFeatureId:null,...a};return i&&(o.texture={texCoord:0,channels:[0],...i}),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:r,textures:n,featureIds:i}=this,a=Array(i.length).fill(null),o=i.length;Mn.increaseSizeTo(o);let s=Hy(r,e),c=s[cP(t)];for(let u=0,p=i.length;u<p;u++){let h=i[u],m="nullFeatureId"in h?h.nullFeatureId:null;if("texture"in h){let g=n[h.texture.index];Wy(r,h.texture.texCoord,t,s,By),Xy(By,g.image.width,g.image.height,Ny),zy.set(u,0),Mn.renderPixelToTarget(n[h.texture.index],Ny,zy)}else if("attribute"in h){let g=r.getAttribute(`_feature_id_${h.attribute}`).getX(c);g!==m&&(a[u]=g)}else{let g=c;g!==m&&(a[u]=g)}}let l=new Uint8Array(o*4);if(this._asyncRead)return Mn.readDataAsync(l).then(()=>(d(),a));return Mn.readData(l),d(),a;function d(){let u=new Uint32Array(1);for(let p=0,h=i.length;p<h;p++){let m=i[p],g="nullFeatureId"in m?m.nullFeatureId:null;if("texture"in m){let{channels:f}=m.texture,y=f.map(v=>l[4*p+v]);new Uint8Array(u.buffer).set(y);let x=u[0];x!==g&&(a[p]=x)}}}}dispose(){this.textures.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},xl="EXT_mesh_features";function jy(e,t,r){e.traverse(n=>{if(t.associations.has(n)){let{meshes:i,primitives:a}=t.associations.get(n),o=t.json.meshes[i]?.primitives[a];o&&o.extensions&&o.extensions[xl]&&r(n,o.extensions[xl])}})}var Yy=class{constructor(e){this.parser=e,this.name=xl}async afterRoot({scene:e,parser:t}){let r=t.json.extensionsUsed;if(!r||!r.includes(xl))return;let n=t.json.textures?.length||0,i=Array(n).fill(null);jy(e,t,(o,{featureIds:s})=>{s.forEach(c=>{if(c.texture&&i[c.texture.index]===null){let l=c.texture.index;i[l]=t.loadTexture(l)}})});let a=await Promise.all(i);jy(e,t,(o,s)=>{o.userData.meshFeatures=new $y(o.geometry,a,s)})}},Ky=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])}}},vd=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 X_(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 Ky),this.metadata&&(t.register(()=>new qy),t.register(()=>new Yy)),this.plugins.forEach(r=>t.register(r)),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:Y5}=gd;var K5=new Fy(new V_),uP=new O_(new Uint8Array([255,255,255,255]),1,1);uP.needsUpdate=!0;var dP=0,pP=1,hP=2,mP=3,fP=4,gP=5,bP=6,yP=7,xP=8,vP=9,wP=10,MP=11,Q5=Object.freeze({NONE:dP,SCREEN_ERROR:pP,GEOMETRIC_ERROR:hP,DISTANCE:mP,DEPTH:fP,RELATIVE_DEPTH:gP,IS_LEAF:bP,RANDOM_COLOR:yP,RANDOM_NODE_COLOR:xP,CUSTOM_COLOR:vP,LOAD_ORDER:wP,INDEXED_COLOR:MP});var J5=Math.PI/4,Z5=3/5;var wn={NONE:0,NOT_READY:1,NO_FIT:2,DEPTH:3,OCCUPANCY:4,SPACING:5,ANGLE:6,FACING:7};var eB=new class{constructor(){this._cache={}}getColor(...e){let t=e.pop(),r=e.join("_"),{_cache:n}=this;return r in n||(t.setHSL(Math.random(),1,.5),n[r]=t.getHex()),t.set(n[r])}};var tB={[wn.NONE]:16777215,[wn.NOT_READY]:7829367,[wn.NO_FIT]:2250239,[wn.DEPTH]:4473924,[wn.OCCUPANCY]:65535,[wn.SPACING]:16776960,[wn.ANGLE]:16711680,[wn.FACING]:16711935};var rB=Math.PI/180;var nB=Zn*Math.PI*2;var iB=Zn*Math.PI*2;import{DRACOLoader as EP}from"three/examples/jsm/loaders/DRACOLoader.js";import{KTX2Loader as AP}from"three/examples/jsm/loaders/KTX2Loader.js";import{MeshoptDecoder as RP}from"three/examples/jsm/libs/meshopt_decoder.module.js";import{Box3 as kP,DoubleSide as DP,MathUtils as LP,Matrix4 as ex,Sphere as OP,Vector3 as IP}from"three";import{BufferAttribute as Qy,MathUtils as SP}from"three";function Jy(e){return!!e&&!e.isInterleavedBufferAttribute}function Zy(e,t,r,n){for(let i=0;i<e.count;i+=1)for(let a=0;a<e.itemSize;a+=1)t.setComponent(i,a,SP.clamp(e.getComponent(i,a),r,n));return t}function CP(e){for(let t=0;t<e.count;t+=1)for(let r=0;r<e.itemSize;r+=1){let n=e.getComponent(t,r);if(!Number.isFinite(n)||n<0||n>1)return!1}return!0}var wl=class{constructor(){this.name="RI_VERTEX_COMPRESSION_PLUGIN";this.priority=-99}processTileModel(t){t.traverse(r=>{let n=r.geometry;if(!n)return;let i=n.attributes.normal;Jy(i)&&!(i.array instanceof Int16Array)&&(n.attributes.normal=Zy(i,new Qy(new Int16Array(i.count*i.itemSize),i.itemSize,!0),-1,1));for(let a of["uv","uv1","uv2","uv3"]){let o=n.attributes[a];!Jy(o)||o.array instanceof Uint16Array||!CP(o)||(n.attributes[a]=Zy(o,new Qy(new Uint16Array(o.count*o.itemSize),o.itemSize,!0),0,1))}})}};import{jsx as rx,jsxs as FP}from"react/jsx-runtime";var BP=0,tx=4,NP=6,zP=12,jP=4;function VP(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 Md({url:e,rotation:t=[0,0,0],errorTarget:r=64,cacheSize:n=800,memoryBudgetMB:i=800,decoderConfig:a,objectBindings:o,itemMaterials:s,sceneConfig:c,selectedItem:l,panelHoveredItem:d,highlightOnHover:u=!0,onItemClick:p,onItemHover:h,onItemDoubleClick:m,onItemContextMenu:g,onObjectCatalog:f,onTilesetBounds:y,onModelLoaded:x,onLoadError:v,nodeRefsOut:C,onNodeRefsChange:P,materialRefsOut:b,explodeFactor:E=0,suspendBindingTransforms:T=!1}){let{camera:_,gl:M,invalidate:S}=PP(),A=Lt(null),[D,k]=wd(null),I=Lt({onItemClick:p,onItemHover:h,onItemDoubleClick:m,onObjectCatalog:f,onTilesetBounds:y,onModelLoaded:x,onLoadError:v,onNodeRefsChange:P});I.current={onItemClick:p,onItemHover:h,onItemDoubleClick:m,onObjectCatalog:f,onTilesetBounds:y,onModelLoaded:x,onLoadError:v,onNodeRefsChange:P};let R=Lt(!0),[V,L]=wd(null),O=Lt(null);O.current=V;let G=Lt([]),le=Lt(!1);Cn(()=>{let W=new Ks;return L(W),()=>W.dispose()},[e]);let H=Lt(null),be=Lt(0),De=Lt(!1),Z=i*1024*1024,ye=Lt(!1),me=Lt(Nu),je=Lt(null),lt=Lt(null),fe=Lt(null);Cn(()=>()=>{fe.current!==null&&clearTimeout(fe.current)},[]);let Te=a?.dracoDecoderPath??Em,Oe=a?.ktx2TranscoderPath??Am,pt=a?.meshopt??!0,[Y,$t]=wd(null);Cn(()=>{De.current=!1,ye.current=!1;let W=new pd(e);W.loadAncestors=!0;let re=new rl;re.priorityCallback=W.downloadQueue.priorityCallback,re.maxJobsPerOrigin=zP;let se=new Pr;se.priorityCallback=W.parseQueue.priorityCallback,se.maxJobs=NP;let xe=new Pr;xe.priorityCallback=W.processNodeQueue.priorityCallback,xe.maxJobs=W.processNodeQueue.maxJobs;let Ie=new Jo;Ie.unloadPriorityCallback=W.lruCache.unloadPriorityCallback,W.downloadQueue=re,W.parseQueue=se,W.processNodeQueue=xe,W.lruCache=Ie;let Ee=Te?new EP().setDecoderPath(Te).setWorkerLimit(jP):null,Ce=Oe?new AP().setTranscoderPath(Oe).detectSupport(M):null;return W.registerPlugin(new vd({dracoLoader:Ee,ktxLoader:Ce,meshoptDecoder:pt?RP:null,autoDispose:!1})),W.registerPlugin(new bd({disableMipmaps:!1,compressIndex:!0,compressNormals:!1,compressUvs:!1,compressPosition:!0})),W.registerPlugin(new wl),$t(W),window.__riTiles=W,()=>{W.forEachLoadedModel(Q=>Co(Q)),W.dispose(),Ee?.dispose(),Ce?.dispose(),$t(Q=>Q===W?null:Q)}},[Te,M,Oe,pt,e]),Cn(()=>{Y&&(me.current=Nu,je.current=null,Y.errorTarget=r,Y.lruCache.maxSize=n,Y.lruCache.minSize=Math.max(1,Math.floor(n*.75)),Y.lruCache.maxBytesSize=Z,Y.lruCache.minBytesSize=Z*.75,S())},[n,r,S,Z,Y]);let Je=TP(()=>{let W=o??{};return{objectBindings:W,keyByModelObject:Eb(W),itemMaterials:s,shadingMode:c?.model.shading??"lit",rendererMode:c?.model.renderer??"pbr",selectedKey:l??null,hoveredKey:Ab(D,d),highlightOnHover:u,suspendTransforms:T,placementFrame:Y?.group.matrixWorld,invalidate:S}},[D,u,S,s,o,d,c,l,T,Y]),Ue=Sn(()=>{if(!Y)return;let W=Ve.current,re=le.current?O.current?.nodesByBinding(W)??{}:{},se={};Y.group.traverse(Ce=>{if(!Ce.isMesh)return;let Q=Iu(Ce);if(!Q)return;let ve=W.keyByModelObject[Q]??Q;if(!W.objectBindings[ve])return;re[ve]||(re[ve]=Ce);let ke=Ce.material;ke&&(se[ve]=ke)});let xe=C?.current??{},Ie=Object.keys(xe),Ee=Ie.length!==Object.keys(re).length||Ie.some(Ce=>xe[Ce]!==re[Ce]);C&&(C.current=re),b&&(b.current=se),(Ee||!C)&&I.current.onNodeRefsChange?.()},[b,C,Y]),$=Sn(W=>$s(W,Je),[Je]),pe=Sn(W=>kb(W,Je),[Je]),Ze=Lt(pe);Ze.current=pe;let Ve=Lt(Je);Ve.current=Je;let Fe=Sn(()=>{let W=H.current,re=be.current;return!W||re<=0?Ve.current:{...Ve.current,explode:{factor:re,centre:W.centre,radius:W.radius}}},[]);Cn(()=>{Y&&(pe(Y.group),R.current=!0,Y.forEachLoadedModel(W=>{pe(W),Wi(W,Fe())}),S())},[pe,S,Fe,Y]),Cn(()=>{let W=VP(e);if(!W)return;let re=!1;return fetch(W).then(se=>se.ok?se.json():null).then(se=>{re||!se?.objects||(G.current=se.objects,le.current=se.bindingFrame==="gltf-identity-v2",le.current&&O.current?.setCatalog(se.objects),R.current=!0,I.current.onObjectCatalog?.(se.objects),S())}).catch(()=>{}),()=>{re=!0}},[e,S,V]),Cn(()=>{if(!Y)return;let W=!1,re=()=>S(),se=Q=>{Q.scene&&(Q.scene.traverse(ve=>{let ke=ve.material;for(let ht of Array.isArray(ke)?ke:ke?[ke]:[])ht.transparent&&ht.side===DP&&(ht.forceSinglePass=!0)}),Ze.current(Q.scene),Wi(Q.scene,Fe()),Ya(Q.scene)),R.current=!0,W||(W=!0,I.current.onModelLoaded?.(Y.group)),S()},xe=Q=>{I.current.onLoadError?.(Q.error)},Ie=Q=>{Q.scene&&(Bu(Q.scene),Co(Q.scene)),R.current=!0};Y.setCamera(_),Y.setResolutionFromRenderer(_,M),Y.addEventListener("needs-update",re),Y.addEventListener("load-model",se),Y.addEventListener("load-error",xe),Y.addEventListener("dispose-model",Ie);let Ee=()=>{R.current=!0,S()};Y.addEventListener("tile-visibility-change",Ee);let Ce=()=>{let Q=Y.root;Q&&!Q.content?.uri&&Q.refine==="REPLACE"&&(Q.refine="ADD",S())};return Y.addEventListener("load-root-tileset",Ce),S(),()=>{Y.removeEventListener("needs-update",re),Y.removeEventListener("load-model",se),Y.removeEventListener("load-error",xe),Y.removeEventListener("dispose-model",Ie),Y.removeEventListener("tile-visibility-change",Ee),Y.removeEventListener("load-root-tileset",Ce),Bu(Y.group),Y.deleteCamera(_),C&&(C.current={}),b&&(b.current={})}},[_,M,S,b,C,Fe,Y]);let ae=ls(W=>$(W)?.binding??null,g),ie=Sn(W=>{if(ae.consumeClick())return;let re=$(W.object);re&&(W.stopPropagation(),I.current.onItemClick?.(re.binding))},[$,ae,p]),rt=Sn(W=>{let re=$(W.object);if(!re)return;I.current.onItemDoubleClick?.(re.binding,Li(W))&&W.stopPropagation()},[$]),Le=Sn(W=>{let re=$(W.object),se=re?.key??null;se!==A.current&&(A.current=se,k(se),I.current.onItemHover?.(re?.binding??null))},[$]),nt=Sn(()=>{A.current!==null&&(A.current=null,k(null),I.current.onItemHover?.(null))},[]);return Cn(()=>{S()},[S,Y]),_P((W,re)=>{if(!Y)return;if(Y.setResolutionFromRenderer(_,M),le.current&&V){let Mt=V.sync(Fe(),l,T);V.updateBounds(Y.root),T&&Y.forEachLoadedModel(yr=>Wi(yr,Mt))}if(Y.update(),!De.current){let Mt=new kP;if(Y.getBoundingBox(Mt)){De.current=!0,Y.group.updateMatrixWorld(),Mt.applyMatrix4(Y.group.matrixWorld);let yr=Mt.getBoundingSphere(new OP);H.current={centre:yr.center.clone(),radius:Mt.getSize(new IP).length()*.5},I.current.onTilesetBounds?.(Mt),S()}}R.current&&(R.current=!1,Ue());let se=Math.min(Math.max(E,0),1),xe=be.current;Math.abs(xe-se)>1e-4?(be.current=LP.lerp(xe,se,1-Math.exp(-6*re)),Wi(Y.group,Fe()),S()):xe!==se&&(be.current=se,Wi(Y.group,Fe()),S());let Ie=Y,Ee=Y.lruCache,Ce=Ee.isFull(),Q=me.current,ve=Q.loosened&&je.current?je.current:{bytes:Ee.maxBytesSize,items:Ee.maxSize},ke=0;for(let Mt of Ee.usedSet??[])ke+=Ee.bytesMap?.get(Mt)??0;let ht=!1,Yt=Y;for(let Mt of Yt.usedSet??[]){let yr=Mt.internal?.loadingState??tx;if(Mt.traversal?.used&&Mt.internal?.hasContent&&yr>=BP&&yr<tx){ht=!0;break}}let mt=lt.current??(lt.current={world:new ex,projection:new ex}),Pt=!mt.world.equals(_.matrixWorld)||!mt.projection.equals(_.projectionMatrix);Pt&&(mt.world.copy(_.matrixWorld),mt.projection.copy(_.projectionMatrix));let br={full:Ce,wanting:ht,moved:Pt,usage:Math.max(ke/Math.max(1,ve.bytes),(Ee.usedSet?.size??0)/Math.max(1,ve.items)),now:performance.now()},Et=Gb(Q,br);Et!==Q&&(Et.loosened&&(!Q.loosened||Et.raisedAt!==Q.raisedAt)?(Q.loosened||(je.current=ve),Ee.maxBytesSize=Math.max(ve.bytes,Ee.cachedBytes??0)*zu,Ee.maxSize=Math.ceil(Math.max(ve.items,Ee.itemSet?.size??0)*zu)):!Et.loosened&&Q.loosened&&je.current&&(Ee.maxBytesSize=je.current.bytes,Ee.maxSize=je.current.items,je.current=null),me.current=Et,Y.errorTarget=r*Et.factor,S()),!ye.current&&Ce&&br.wanting&&Et.factor>=$o&&(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 Rn=Hb(Et,br);Rn===0?S():Rn!==null&&fe.current===null&&(fe.current=setTimeout(()=>{fe.current=null,S()},Rn)),((Ie.stats?.downloading??0)>0||(Ie.stats?.parsing??0)>0||Ie.loadProgress!==void 0&&Ie.loadProgress<1&&!Ce)&&S()}),Y?FP("group",{rotation:t,children:[V?rx("primitive",{object:V.group}):null,rx("primitive",{object:Y.group,onClick:ie,onDoubleClick:rt,onPointerDown:g?ae.onPointerDown:void 0,onPointerMove:Le,onPointerOut:nt})]}):null}import{Matrix4 as Sd}from"three";var UP=new Sd().makeRotationX(Math.PI/2);function nx(e){e.updateMatrixWorld(!0);let t=new Sd().copy(e.matrixWorld).invert().premultiply(UP),r=new Sd,n=[];for(let[i,a]of Object.entries(Ti(e).nodesById)){let o=a;if(!o.isMesh||!o.geometry||!a.name)continue;let s=o.geometry;s.boundingBox||s.computeBoundingBox();let c=s.boundingBox.clone().applyMatrix4(r.multiplyMatrices(t,a.matrixWorld)),l=s.index?s.index.count:s.getAttribute("position")?.count??0;n.push({name:i,triangles:Math.floor(l/3),minimum:c.min.toArray(),maximum:c.max.toArray()})}return n.sort((i,a)=>i.name.localeCompare(a.name))}import{useMemo as Tn,useRef as Ar,useState as ri,useEffect as Kr,useCallback as Qi}from"react";import{Html as sx}from"@react-three/drei";import{useFrame as lx,useThree as Pd}from"@react-three/fiber";import{MathUtils as _d,Vector3 as Ji}from"three";import{Vector3 as ix}from"three";function Cd(e){if(!e?.trim()||/[\u0000-\u001f\u007f]/.test(e))return null;try{let t=new URL(e.trim(),"https://annotation.invalid/");return t.protocol==="https:"||t.protocol==="http:"?e.trim():null}catch{return null}}function Td(e){return e.category?.trim()??""}function ox(e,t){if(t===null)return e;let r=new Set(t.map(n=>n.trim()));return e.filter(n=>r.has(Td(n)))}function ax(e,t){let r=Number.isFinite(e.minDistance)?Math.max(0,e.minDistance):0,n=Number.isFinite(e.maxDistance)?Math.max(0,e.maxDistance):1/0;return t>=r&&t<=n}function Ml(e){return!!e&&[e.position,e.target].every(t=>Array.isArray(t)&&t.length===3&&t.every(Number.isFinite))}function ma(e){let t=e.camera;return{position:e.getPosition(new ix,!1).toArray(),target:e.getTarget(new ix,!1).toArray(),azimuthAngle:e.azimuthAngle,polarAngle:e.polarAngle,fov:"fov"in t?Number(t.fov):null,zoom:t.zoom}}function fa(e,t){Ml(t)&&(e.setLookAt(...t.position,...t.target,!0),Number.isFinite(t.azimuthAngle)&&Number.isFinite(t.polarAngle)&&e.rotateTo(t.azimuthAngle,t.polarAngle,!0),ga(e,t))}function ga(e,t){let r=!1;t.fov!=null&&Number.isFinite(t.fov)&&t.fov>0&&t.fov<180&&"fov"in e.camera&&(e.camera.fov=t.fov,e.camera.updateProjectionMatrix(),r=!0),t.zoom!=null&&Number.isFinite(t.zoom)&&t.zoom>0&&e.zoomTo(t.zoom,!0),r&&e.dispatchEvent({type:"update"})}import{jsx as qt,jsxs as Ed}from"react/jsx-runtime";var GP=.02;function cx(e,t,r=!1){let n=Ar(null),[i,a]=ri(!0),o=Ar(!0),s=Tn(()=>new Ji,[]),c=Pd(m=>m.scene),l=Ar(null),d=Tn(()=>new Ji(...e.anchorLocalPosition??e.localPosition??e.worldPosition),[e.anchorLocalPosition,e.localPosition,e.worldPosition]),u=Tn(()=>new Ji,[]),p=Tn(()=>new Ji,[]),h=Tn(()=>new Ji,[]);return Kr(()=>{l.current=null},[e.anchorNodeName]),lx(({camera:m})=>{let g=n.current,f=g?.parent;if(!g||!f)return;let y=l.current;if(e.anchorNodeName&&(!y||!y.parent)&&(y=un(c,e.anchorNodeName),l.current=y),y?(y.updateWorldMatrix(!0,!1),u.copy(d).applyMatrix4(y.matrixWorld)):(u.copy(d),f.localToWorld(u)),t){let v=t.current.get(e.id);v||(v=new Ji,t.current.set(e.id,v)),v.copy(u)}m.getWorldPosition(s);let x=!r||ax(e,s.distanceTo(u));x!==o.current&&(o.current=x,a(x)),h.copy(s).sub(u),h.lengthSq()>0?(h.normalize(),p.copy(u).addScaledVector(h,GP)):p.copy(u),f.worldToLocal(p),g.position.copy(p)}),{anchorRef:n,inRange:i}}function HP({annotation:e,occluders:t,worldPositionsRef:r,onClick:n,onHover:i,showAnnotationOnHover:a}){let o=ne(),[s,c]=ri(!1),{anchorRef:l,inRange:d}=cx(e,r,!0),u=s||!d,[p,h]=ri(!1),[m,g]=ri(1),f=Ar(null),y=Ar(null),x=Ar(null);Kr(()=>{d||(f.current&&clearTimeout(f.current),p&&(h(!1),i?.(null)))},[d,p,i]),Kr(()=>()=>{f.current&&(clearTimeout(f.current),f.current=null),x.current&&(clearTimeout(x.current),x.current=null)},[]);let v=T=>{T.stopPropagation(),T.preventDefault(),f.current&&(clearTimeout(f.current),f.current=null),f.current=window.setTimeout(()=>{n?.(e),f.current=null},10)},C=T=>{T.stopPropagation(),h(!0),g(100),x.current&&(clearTimeout(x.current),x.current=null),i?.(e)},P=T=>{T.stopPropagation(),h(!1),g(1),x.current&&clearTimeout(x.current),x.current=window.setTimeout(()=>{i?.(null),a&&i?.(null),x.current=null},50)},b=T=>{T.stopPropagation();let _=T.currentTarget;_.dataset.pointerX=String(T.clientX),_.dataset.pointerY=String(T.clientY)},E=T=>{T.stopPropagation();let _=T.currentTarget,M=parseFloat(_.dataset.pointerX||"0"),S=parseFloat(_.dataset.pointerY||"0"),A=T.clientX-M,D=T.clientY-S;Math.sqrt(A*A+D*D)<10&&v(T)};return qt("group",{ref:l,children:qt(sx,{center:!0,occlude:t,onOcclude:c,pointerEvents:u?"none":"auto",zIndexRange:[1,200],style:{pointerEvents:u?"none":"auto",zIndex:m},className:"annotation-html-wrapper",transparent:!0,children:qt("div",{ref:y,className:`ri-annotationMarker ${p?"ri-annotationMarker--hovered":""}`,title:e.title,style:{display:u?"none":"flex"},onPointerDown:b,onPointerUp:E,onPointerEnter:C,onPointerLeave:P,onDoubleClick:T=>{T.stopPropagation(),n?.(e)},role:"button",tabIndex:0,"aria-label":o("annotationMarker",{id:e.id,title:e.title}),onKeyDown:T=>{(T.key==="Enter"||T.key===" ")&&(T.preventDefault(),T.stopPropagation(),n?.(e))},children:qt("span",{className:"ri-annotationMarker-id",children:e.id})})})})}function WP({annotation:e,occluders:t,popupRef:r,onClose:n,hideCloseButton:i=!1}){let a=ne(),[o,s]=ri(!1),{anchorRef:c}=cx(e),l=Ed("div",{ref:r,className:"ri-viewAnnotationPopup",style:{display:o?"none":"block"},onPointerDown:d=>d.stopPropagation(),onClick:d=>d.stopPropagation(),children:[Ed("div",{className:"ri-viewAnnotationHeader",children:[qt("h4",{className:"ri-viewAnnotationTitle",children:e.title}),!i&&qt("button",{onClick:d=>{d.stopPropagation(),n?.()},className:"ri-viewAnnotationClose","aria-label":a("closeAnnotation"),children:"\xD7"})]}),e.category&&qt("span",{className:"ri-annotationCategory",children:e.category}),e.description&&qt("p",{className:"ri-viewAnnotationDescription",children:e.description}),e.images?.map((d,u)=>{let p=Cd(d.src);return p?qt("img",{className:"ri-annotationImage",src:p,alt:d.alt??"",loading:"lazy"},`${p}-${u}`):null}),e.links?.map((d,u)=>{let p=Cd(d.href);return p?qt("a",{className:"ri-annotationLink",href:p,target:"_blank",rel:"noopener noreferrer",children:d.label||a("learnMore")},`${p}-${u}`):null})]});return qt("group",{ref:c,children:qt(sx,{occlude:t,onOcclude:s,pointerEvents:o?"none":"auto",zIndexRange:[1e3,2e3],style:{pointerEvents:o?"none":"auto",zIndex:1e3},transparent:!0,children:l})})}function Ad({annotations:e,sceneConfig:t,activeAnnotation:r,popupRef:n,canvasRootRef:i,worldPositionsRef:a,modelLoaded:o,onAnnotationClick:s,onAnnotationHover:c,onCloseAnnotation:l,hideCloseButton:d=!1,showAnnotationOnHover:u=!1}){let p=Pd(R=>R.invalidate),h=Pd(R=>R.scene),[m,g]=ri(null),[f,y]=ri(!1),x=Ar(null);Kr(()=>{x.current!==null&&r===null&&(g(null),y(!1)),x.current=r?.id??null},[r]);let v=Ar(null),C=Ar(null),P=Ar(null),b=Tn(()=>{let R=[];return h.traverse(V=>{let L=V;L.isMesh&&!L.isSkinnedMesh&&R.push({current:V})}),R},[h,e,o]),E=Qi(()=>{p();let R=()=>{p(),C.current=window.requestAnimationFrame(()=>{p(),C.current=null})};C.current=window.requestAnimationFrame(R)},[p]);Kr(()=>{E()},[e,E]),Kr(()=>{E()},[r,E]),Kr(()=>()=>{C.current!==null&&window.cancelAnimationFrame(C.current),P.current&&clearTimeout(P.current)},[]);let T=r||m,_=Tn(()=>T?e.find(R=>R.id===T.id)??null:null,[T,e]),M=Qi(R=>{if(f&&m?.id===R.id){y(!1),g(null),l?.();return}y(!0),g(R),s?.(R)},[f,m,s,l]),S=Qi(R=>{c?.(R),u&&!f&&(P.current&&(clearTimeout(P.current),P.current=null),R?g(R):P.current=window.setTimeout(()=>{g(null),l?.(),P.current=null},100))},[f,c,u,l]),A=Qi(()=>{y(!1),g(null),l?.()},[l]),D=Qi(R=>{let V=R.target;if(V.closest?.(".ri-annotationMarker")||V.closest?.(".ri-viewAnnotationPopup")||V.closest?.(".annotation-html-wrapper"))return;let L=i.current;L&&L.contains(V)&&(y(!1),g(null),l?.())},[i,l]),k=Qi(R=>{R.key==="Escape"&&f&&(y(!1),g(null),l?.())},[f,l]);Kr(()=>{let R=i.current;return R&&(R.addEventListener("click",D),R.addEventListener("pointerdown",D)),document.addEventListener("keydown",k),()=>{R&&(R.removeEventListener("click",D),R.removeEventListener("pointerdown",D)),document.removeEventListener("keydown",k)}},[i,D,k]);let I=Tn(()=>(t?.model.rotation??[0,0,0]).map(R=>R*Math.PI/180),[t?.model.rotation]);return Kr(()=>{p()},[p,I]),lx((R,V)=>{if(!v.current)return;v.current.rotation.x=_d.lerp(v.current.rotation.x,I[0],1-Math.exp(-5*V)),v.current.rotation.y=_d.lerp(v.current.rotation.y,I[1],1-Math.exp(-5*V)),v.current.rotation.z=_d.lerp(v.current.rotation.z,I[2],1-Math.exp(-5*V));let{rotation:L}=v.current;Math.abs(L.x-I[0])+Math.abs(L.y-I[1])+Math.abs(L.z-I[2])>1e-4&&p()}),Ed("group",{ref:v,children:[e.map(R=>{let V=`${R.worldPosition.join(",")}-${R.title}-${R.id}`;return qt(HP,{annotation:R,occluders:b,worldPositionsRef:a,onClick:M,onHover:S,showAnnotationOnHover:u},V)}),_?qt(WP,{annotation:_,occluders:b,popupRef:n,onClose:A,hideCloseButton:d},`popup-${_.id}`):null]})}import{useEffect as hx,useMemo as ba}from"react";import{Html as kd}from"@react-three/drei";import{useEffect as XP,useMemo as qP}from"react";import{Line as $P}from"@react-three/drei";import{useThree as YP}from"@react-three/fiber";import{BufferGeometry as KP,Line as QP,LineBasicMaterial as JP,LineDashedMaterial as ZP,Vector3 as ux}from"three";import{jsx as Rd}from"react/jsx-runtime";function ni(e){return YP(r=>Si(r.gl))?Rd(e2,{...e}):Rd($P,{points:e.points,color:e.color,lineWidth:e.lineWidth,dashed:e.dashed})}function e2({points:e,color:t,dashed:r=!1}){let n=qP(()=>{let i=new KP().setFromPoints(e.map(s=>s instanceof ux?s:new ux(...s))),a=r?new ZP({color:t,dashSize:.02,gapSize:.02}):new JP({color:t}),o=new QP(i,a);return r&&o.computeLineDistances(),o},[e,t,r]);return XP(()=>()=>{n.geometry.dispose(),n.material.dispose()},[n]),Rd("primitive",{object:n})}import{BoxGeometry as t2,BufferGeometry as r2,DoubleSide as n2,EdgesGeometry as i2,Float32BufferAttribute as o2,Vector3 as Qr}from"three";import{Fragment as Sl,jsx as $e,jsxs as ir}from"react/jsx-runtime";var ii="#22d3ee",a2="#facc15";function Zi(e,t){let r=e<10?e.toFixed(3):e.toFixed(2);return t?`${r} ${t}`:r}function dx(e,t){return[(e[0]+t[0])/2,(e[1]+t[1])/2,(e[2]+t[2])/2]}function _n({position:e,children:t}){return $e(kd,{center:!0,position:e,zIndexRange:[20,0],style:{pointerEvents:"none"},children:$e("div",{className:"ri-measureLabel",children:t})})}function px({positions:e,triangles:t}){let r=ba(()=>{let n=new Qr(...e[0]),i=new r2;return i.setAttribute("position",new o2(e.flatMap(a=>new Qr(...a).sub(n).toArray()),3)),i.setIndex(t.flat()),i},[e,t]);return hx(()=>()=>r.dispose(),[r]),$e("mesh",{position:e[0],geometry:r,raycast:()=>{},renderOrder:100,children:$e("meshBasicMaterial",{color:ii,side:n2,transparent:!0,opacity:.18,depthWrite:!1})})}var s2=[[0,1,2]];function l2({positions:e}){let t=_s(e);if(t===null)return null;let r=new Qr(...e[1]),n=new Qr(...e[0]).sub(r),i=new Qr(...e[2]).sub(r),a=Math.min(n.length(),i.length())*.22;n.normalize(),i.normalize();let o=n.clone().cross(i);o.lengthSq()<1e-12&&o.copy(n).cross(Math.abs(n.y)<.9?new Qr(0,1,0):new Qr(1,0,0)),o.normalize();let s=t*Math.PI/180,c=Array.from({length:33},(d,u)=>n.clone().applyAxisAngle(o,s*u/32).multiplyScalar(a).add(r).toArray()),l=n.clone().applyAxisAngle(o,s/2).multiplyScalar(a*1.4).add(r).toArray();return ir(Sl,{children:[$e(ni,{points:c,color:ii,lineWidth:2}),ir(_n,{position:l,children:[t.toFixed(2),"\xB0"]})]})}function c2({box:e,unit:t}){let r=ba(()=>[(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]),n=ba(()=>{let[s,c,l]=e.size,d=new t2(s||1e-4,c||1e-4,l||1e-4),u=new i2(d);return d.dispose(),u},[e.size]);hx(()=>()=>{n.dispose()},[n]);let[i,a,o]=e.size;return ir("group",{position:r,children:[$e("lineSegments",{geometry:n,children:$e("lineBasicMaterial",{color:a2})}),ir(_n,{position:[0,-a/2,o/2],children:["W ",Zi(i,t)]}),ir(_n,{position:[-i/2,0,o/2],children:["H ",Zi(a,t)]}),ir(_n,{position:[i/2,-a/2,0],children:["D ",Zi(o,t)]})]})}function Dd({points:e,unit:t,box:r,showDimensions:n,tool:i="distance",areaClosed:a=!1,snapPreview:o}){let s=ba(()=>e.map(d=>d.position),[e]),c=ba(()=>i==="area"&&a?Ps(s):null,[i,a,s]),l=i==="pointToPlane"&&e.length===2?Rg(e[0],e[1].position):null;return ir("group",{children:[e.map(d=>$e(kd,{center:!0,position:d.position,zIndexRange:[15,0],style:{pointerEvents:"none"},children:$e("div",{className:`ri-measureDot${d.snapped?" ri-measureDot--snapped":""}`})},d.id)),i==="distance"&&e.slice(1).map((d,u)=>{let p=e[u].position,h=d.position,m=new Qr(...p).distanceTo(new Qr(...h));return ir("group",{children:[$e(ni,{points:[p,h],color:ii,lineWidth:2}),$e(_n,{position:dx(p,h),children:Zi(m,t)})]},`${e[u].id}-${d.id}`)}),(i==="angle"||i==="area")&&s.length>=2&&$e(ni,{points:a?[...s,s[0]]:s,color:ii,lineWidth:2}),i==="angle"&&$e(l2,{positions:s}),c&&!("error"in c)&&ir(Sl,{children:[$e(px,{positions:s,triangles:c.triangles}),$e(_n,{position:c.center,children:Zi(c.area,t?`${t}\xB2`:"")})]}),i==="pointToPlane"&&e[0]?.faceVertices&&ir(Sl,{children:[$e(px,{positions:e[0].faceVertices,triangles:s2}),$e(ni,{points:[...e[0].faceVertices,e[0].faceVertices[0]],color:ii,lineWidth:1}),e.length===1&&$e(_n,{position:e[0].position,children:"Reference plane"})]}),l&&ir(Sl,{children:[$e(ni,{points:[e[1].position,l.projection],color:ii,lineWidth:2}),$e(ni,{points:[e[0].position,l.projection],color:ii,lineWidth:1,dashed:!0}),$e(_n,{position:dx(e[1].position,l.projection),children:Zi(l.distance,t)})]}),o&&ir(kd,{center:!0,position:o.position,zIndexRange:[20,0],style:{pointerEvents:"none"},children:[$e("div",{className:"ri-measureSnapTarget"}),$e("div",{className:"ri-measureSnapLabel",children:o.snapped==="vertex"?"Vertex":"Edge"})]}),n&&r?$e(c2,{box:r,unit:t}):null]})}import{Eraser as u2,PencilRuler as d2,RulerDimensionLine as p2,Undo2 as h2}from"lucide-react";import{useLayoutEffect as m2,useRef as f2}from"react";import{Fragment as mx,jsx as vt,jsxs as eo}from"react/jsx-runtime";function Ld(e){let t=ne(),r=f2(null);m2(()=>{if(!r.current)return;let s=()=>e.onHeight(r.current?.getBoundingClientRect().height??34),c=new ResizeObserver(s);return c.observe(r.current),s(),()=>c.disconnect()},[e.onHeight]);let{tool:n,pointCount:i,areaClosed:a}=e,o=n==="angle"?[t("angleFirstArmHint"),t("angleVertexHint"),t("angleSecondArmHint"),t("angleNewHint")][i]:n==="area"?t(a?"areaNewHint":"areaCornersHint"):n==="pointToPlane"?[t("pointToPlaneFaceHint"),t("pointToPlanePointHint"),t("pointToPlaneNewHint")][i]:t("distanceHint");return eo("div",{ref:r,className:"ri-measureTools",style:{top:e.top},children:[eo("div",{className:"ri-measureToolbarRow",children:[vt("button",{type:"button",className:`ri-measureButton ${e.active?"ri-measureButton--active":""}`,disabled:e.disabled,onClick:e.onToggle,title:e.active?t("stopMeasuring"):t("startMeasuring"),"aria-pressed":e.active,children:vt(d2,{size:16})}),vt("button",{type:"button",className:`ri-measureButton ${e.showDimensions?"ri-measureButton--active":""}`,disabled:e.disabled,onClick:e.onDimensions,title:t("toggleBoundingDimensions"),"aria-pressed":e.showDimensions,children:vt(p2,{size:16})}),e.active&&eo(mx,{children:[eo("select",{className:"ri-measureSelect","aria-label":t("measurementTool"),value:n,disabled:e.disabled,onChange:s=>e.onTool(s.target.value),children:[vt("option",{value:"distance",children:t("distance")}),vt("option",{value:"angle",children:t("angle")}),vt("option",{value:"area",children:t("area")}),vt("option",{value:"pointToPlane",children:t("pointToPlane")})]}),eo("select",{className:"ri-measureSelect","aria-label":t("measurementSnapping"),value:e.snap,disabled:e.disabled,onChange:s=>e.onSnap(s.target.value),children:[vt("option",{value:"none",children:t("noSnapping")}),vt("option",{value:"auto",children:t("snapAuto")}),vt("option",{value:"vertex",children:t("snapVertex")}),vt("option",{value:"edge",children:t("snapEdge")})]})]}),i>0&&eo(mx,{children:[vt("button",{type:"button",className:"ri-measureButton",onClick:e.onUndo,disabled:e.disabled,title:t("undoMeasurementPoint"),children:vt(h2,{size:16})}),vt("button",{type:"button",className:"ri-measureButton",onClick:e.onClear,disabled:e.disabled,title:t("clearMeasurements"),children:vt(u2,{size:16})})]}),e.active&&n==="area"&&!a&&vt("button",{type:"button",className:"ri-measureFinish",onClick:e.onFinishArea,disabled:e.disabled||i<3,children:t("finishArea")})]}),e.active&&vt("div",{className:`ri-measureHint${e.error?" ri-measureHint--error":""}`,role:"status",children:e.error?t.message(e.error):o})]})}import{forwardRef as g2,useCallback as ya,useEffect as fx,useImperativeHandle as b2,useMemo as gx,useRef as Ot}from"react";import{useXR as bx,useXRHitTest as y2,useXRInputSourceEvent as x2}from"@react-three/xr";import{useFrame as v2}from"@react-three/fiber";import{Matrix4 as w2,Vector3 as yx}from"three";import{Fragment as P2,jsx as xa,jsxs as Mx}from"react/jsx-runtime";var M2=1,xx=1,S2=.1,C2=10;function T2(e,t){let[r,n,i]=e.size,a=(e.min[0]+e.max[0])/2,o=(e.min[2]+e.max[2])/2,s=Math.max(r,n,i)||1;return{scale:t==="real-world"?1:M2/s,offset:[-a,-e.min[1],-o]}}function vx(e){let t=e[0].clientX-e[1].clientX,r=e[0].clientY-e[1].clientY;return Math.hypot(t,r)}function wx(e){let t=e[0].clientX-e[1].clientX,r=e[0].clientY-e[1].clientY;return Math.atan2(r,t)}var _2=g2(function({box:t,scaleMode:r,children:n,onARStateChange:i},a){let o=Ot(null),s=Ot(null),c=Ot(null),l=bx(R=>R.session!=null),d=bx(R=>R.mode==="immersive-ar"),u=gx(()=>t?T2(t,r):null,[t,r]),p=Ot(new yx(0,0,-xx)),h=Ot(1),m=Ot(0),g=Ot(!0),f=Ot(!1),y=gx(()=>new w2,[]),x=Ot(new yx),v=Ot(!1),C=Ot(null),P=Ot(!1),b=Ot(0),E=Ot(0),T=Ot(1),_=Ot(0),M=ya(()=>{if(!i||!d)return;let R={canPlace:v.current,isPlacementMode:g.current,isModelPlaced:f.current},V=C.current;V&&V.canPlace===R.canPlace&&V.isPlacementMode===R.isPlacementMode&&V.isModelPlaced===R.isModelPlaced||(C.current=R,i(R))},[d,i]),S=ya(()=>!d||!v.current?!1:(p.current.copy(x.current),f.current=!0,g.current=!1,M(),!0),[M,d]),A=ya(()=>{d&&(g.current=!0,M())},[M,d]),D=ya(()=>{let R=S();return!R&&d&&(g.current=!1,M()),R},[M,d,S]),k=ya(()=>{d&&(g.current=!1,M())},[M,d]);b2(a,()=>({placeCurrent:S,startPlacementMode:A,finishPlacementMode:D,cancelPlacementMode:k}),[k,D,S,A]),fx(()=>{if(!l){p.current.set(0,0,-xx),h.current=1,m.current=0,v.current=!1,P.current=!1,g.current=!0,f.current=!1,C.current=null;return}d&&(v.current=!1,P.current=!1,g.current=!0,f.current=!1,C.current=null,M())},[M,l,d]),y2((R,V)=>{if(!d||R.length===0){v.current&&(v.current=!1,M());return}V(y,R[0])&&(x.current.setFromMatrixPosition(y),v.current||(v.current=!0,M()))},"viewer"),x2("all","select",()=>{!d||P.current||!g.current||S()},[d,S]),fx(()=>{if(!d)return;let R=O=>{O.touches.length===2&&(P.current=!0,b.current=vx(O.touches),E.current=wx(O.touches),T.current=h.current,_.current=m.current)},V=O=>{if(!P.current||O.touches.length!==2)return;O.preventDefault();let G=vx(O.touches);if(b.current>0){let H=G/b.current;h.current=Math.min(C2,Math.max(S2,T.current*H))}let le=wx(O.touches);m.current=_.current-(le-E.current)},L=O=>{O.touches.length===0&&requestAnimationFrame(()=>{P.current=!1})};return window.addEventListener("touchstart",R),window.addEventListener("touchmove",V,{passive:!1}),window.addEventListener("touchend",L),window.addEventListener("touchcancel",L),()=>{window.removeEventListener("touchstart",R),window.removeEventListener("touchmove",V),window.removeEventListener("touchend",L),window.removeEventListener("touchcancel",L)}},[d]),v2(()=>{let R=o.current,V=s.current;if(!R||!V)return;!l||!u?(R.visible=!0,R.position.set(0,0,0),R.rotation.set(0,0,0),V.scale.setScalar(1)):(R.visible=!d||f.current,R.position.copy(p.current),R.rotation.set(0,m.current,0),V.scale.setScalar(u.scale*h.current));let L=c.current;if(L){let O=d&&g.current&&v.current;L.visible=O,O&&L.position.copy(x.current)}});let I=l&&u?u.offset:[0,0,0];return Mx(P2,{children:[Mx("mesh",{ref:c,visible:!1,rotation:[-Math.PI/2,0,0],children:[xa("ringGeometry",{args:[.05,.07,32]}),xa("meshBasicMaterial",{color:"#22d3ee",transparent:!0,opacity:.95})]}),xa("group",{ref:o,children:xa("group",{ref:s,children:xa("group",{position:I,children:n})})})]})}),Sx=_2;import{useRef as oi,useState as E2,useCallback as Rr,useEffect as A2}from"react";import{jsx as Jt,jsxs as Od}from"react/jsx-runtime";var R2={up:{width:38,height:22},down:{width:38,height:22},left:{width:22,height:38},right:{width:22,height:38}},k2={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"},Cl=({direction:e})=>{let t=R2[e],r=k2[e];return Od("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:[Jt("polyline",{points:r,stroke:"rgba(0, 0, 0, 0.9)",strokeWidth:"6",strokeLinecap:"round",strokeLinejoin:"round"}),Jt("polyline",{points:r,stroke:"#2095F2",strokeWidth:"4",strokeLinecap:"round",strokeLinejoin:"round"})]})},Jr=16,D2={"bottom-left":{bottom:Jr,left:Jr,top:"auto",right:"auto",transform:"none"},"bottom-right":{bottom:Jr,right:Jr,top:"auto",left:"auto",transform:"none"},"top-left":{top:Jr,left:Jr,bottom:"auto",right:"auto",transform:"none"},"top-right":{top:Jr,right:Jr,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:Jr,left:"50%",bottom:"auto",right:"auto",transform:"translateX(-50%)"}},L2=({controlsRef:e,enabled:t=!0,opacity:r=.9,moveSensitivity:n=.001,rotateSensitivity:i=.01,position:a="center-bottom"})=>{let o=ne(),s=oi(null),[c,l]=E2({x:0,y:0}),d=oi(!1),u=oi({x:0,y:0}),p=oi(void 0),h=oi(void 0),m=oi(null),g=oi(0),f=()=>e.current,y=(k,I,R)=>{let V=Math.hypot(k,I);if(V>R){let L=R/V;return{x:k*L,y:I*L}}return{x:k,y:I}},x=k=>{let R=Math.abs(k);return R<.12?0:Math.sign(k)*((R-.12)/(1-.12))},v=Rr(()=>{let k=()=>{let{x:I,y:R}=u.current,V=x(I),L=x(R);if(t&&(V!==0||L!==0)){let O=f();O&&O.rotate(-V*i,-L*i,!0)}p.current=requestAnimationFrame(k)};p.current=requestAnimationFrame(k)},[t,i]),C=Rr(()=>{p.current&&cancelAnimationFrame(p.current)},[]),P=Rr((k,I)=>{if(!s.current||!d.current)return;let R=s.current.getBoundingClientRect(),V=R.left+R.width/2,L=R.top+R.height/2,O=R.width/2-18,G=k-V,le=I-L,H=y(G,le,O);l(H),u.current={x:H.x/O,y:H.y/O}},[]),b=Rr(k=>{if(!t)return;k.preventDefault(),k.stopPropagation(),d.current=!0,v();let I="touches"in k?k.touches[0]:k;P(I.clientX,I.clientY)},[t,v,P]),E=Rr(k=>{if(!d.current)return;k.preventDefault();let I="touches"in k?k.touches[0]:k;P(I.clientX,I.clientY)},[P]),T=Rr(()=>{d.current=!1,l({x:0,y:0}),u.current={x:0,y:0},C()},[C]),_=n*10,M=Rr(k=>{t&&f()?.forward(k*_,!0)},[t,_]),S=Rr(k=>{t&&f()?.truck(k*_,0,!0)},[t,_]),A=Rr((k,I,R)=>{if(!t)return;h.current&&cancelAnimationFrame(h.current),m.current={control:k,amount:I,action:R},g.current=0,R(I);let V=L=>{if(!m.current)return;if(g.current===0){g.current=L,h.current=requestAnimationFrame(V);return}if(L-g.current>200){let{amount:G,action:le}=m.current;le(G),g.current=L}h.current=requestAnimationFrame(V)};h.current=requestAnimationFrame(V)},[t]),D=Rr(k=>{m.current?.control===k&&(h.current&&(cancelAnimationFrame(h.current),h.current=void 0),m.current=null,g.current=0)},[]);return A2(()=>(window.addEventListener("mousemove",E),window.addEventListener("mouseup",T),window.addEventListener("touchmove",E,{passive:!1}),window.addEventListener("touchend",T),window.addEventListener("touchcancel",T),()=>{window.removeEventListener("mousemove",E),window.removeEventListener("mouseup",T),window.removeEventListener("touchmove",E),window.removeEventListener("touchend",T),window.removeEventListener("touchcancel",T),C(),h.current&&cancelAnimationFrame(h.current)}),[E,T,C]),t?Jt("div",{className:"mc__wrapper",style:{opacity:r,...D2[a]},children:Od("div",{className:"mc__dpad",children:[Jt("button",{"aria-label":o("moveForward"),className:"mc__arrow mc__arrow--up",onMouseDown:()=>A("up",1,M),onMouseUp:()=>D("up"),onMouseLeave:()=>D("up"),onTouchStart:k=>{k.preventDefault(),A("up",1,M)},onTouchEnd:()=>D("up"),onTouchCancel:()=>D("up"),children:Jt(Cl,{direction:"up"})}),Od("div",{className:"mc__middle-row",children:[Jt("button",{"aria-label":o("moveLeft"),className:"mc__arrow mc__arrow--left",onMouseDown:()=>A("left",-1,S),onMouseUp:()=>D("left"),onMouseLeave:()=>D("left"),onTouchStart:k=>{k.preventDefault(),A("left",-1,S)},onTouchEnd:()=>D("left"),onTouchCancel:()=>D("left"),children:Jt(Cl,{direction:"left"})}),Jt("div",{ref:s,className:"mc__joystick",onMouseDown:b,onTouchStart:b,children:Jt("div",{className:"mc__knob",style:{transform:`translate(${c.x}px, ${c.y}px)`}})}),Jt("button",{"aria-label":o("moveRight"),className:"mc__arrow mc__arrow--right",onMouseDown:()=>A("right",1,S),onMouseUp:()=>D("right"),onMouseLeave:()=>D("right"),onTouchStart:k=>{k.preventDefault(),A("right",1,S)},onTouchEnd:()=>D("right"),onTouchCancel:()=>D("right"),children:Jt(Cl,{direction:"right"})})]}),Jt("button",{"aria-label":o("moveBackward"),className:"mc__arrow mc__arrow--down",onMouseDown:()=>A("down",-1,M),onMouseUp:()=>D("down"),onMouseLeave:()=>D("down"),onTouchStart:k=>{k.preventDefault(),A("down",-1,M)},onTouchEnd:()=>D("down"),onTouchCancel:()=>D("down"),children:Jt(Cl,{direction:"down"})})]})}):null},Cx=L2;import{useMemo as I2}from"react";import{useEffect as O2}from"react";import{useThree as Tx}from"@react-three/fiber";var _x=new WeakMap;function Tl(e){let t=Tx(n=>n.get),r=Tx(n=>n.setEvents);O2(()=>{if(!e)return;let n=_x.get(t);if(!n){let a=new Set;n=a,_x.set(t,a);let o=t().events.filter;r({filter:(s,c)=>{let l=o?o(s,c):s;return a.size===0?l:l.filter(d=>{for(let u of a)if(!u(d))return!1;return!0})}})}n.add(e);let i=n;return()=>{i.delete(e)}},[e,t,r])}function Id({setAside:e,nodeRefs:t}){let r=I2(()=>{if(e.size===0)return null;let n={refs:null,bound:new Map};return i=>{let a=t.current??{};if(n.refs!==a){let s=new Map;for(let[c,l]of Object.entries(a))s.set(l,e.has(c));n={refs:a,bound:s}}let{bound:o}=n;for(let s=i.object;s;s=s.parent){let c=o.get(s);if(c!==void 0)return!c}return!0}},[e,t]);return Tl(r),null}import{useEffect as Nd,useMemo as zd,useRef as Ox,useState as Dx}from"react";import{Edges as B2}from"@react-three/drei";import{useFrame as N2,useThree as jd}from"@react-three/fiber";import{DoubleSide as Pl,Plane as z2}from"three";import{Vector3 as Px}from"three";var _l={x:0,y:1,z:2},Ex=e=>Math.min(Math.max(e,0),1);function Bd(e,t){let r=_l[t.axis],n=e.min[r],i=e.max[r];if(!Number.isFinite(n)||!Number.isFinite(i)||i<n)return null;let a=Number.isFinite(t.position)?t.position:.5;return n+(i-n)*Ex(a)}function Ax(e,t,r){let n=Bd(t,r);if(n===null)return!1;let i=new Px;return i.setComponent(_l[r.axis],r.flip?1:-1),e.normal.copy(i),e.constant=r.flip?-n:n,!0}function Rx(e,t,r,n){let i=_l[n],a=new Px().setComponent(i,1),o=r.clone().addScaledVector(a,-r.dot(a));if(o.lengthSq()<1e-8)return null;o.normalize();let s=e.direction.dot(o);if(Math.abs(s)<1e-8)return null;let c=t.clone().sub(e.origin).dot(o)/s;return Number.isFinite(c)?e.origin.getComponent(i)+e.direction.getComponent(i)*c:null}function kx(e,t,r){let n=_l[t],i=e.max[n]-e.min[n];return i>0?Ex((r-e.min[n])/i):null}import{jsx as El,jsxs as F2}from"react/jsx-runtime";var j2={x:0,y:1,z:2},Lx="#22d3ee";function Vd({section:e,box:t,modelRef:r,showHandle:n,onPositionChange:i,onDraggingChange:a}){let o=jd(g=>g.gl),s=jd(g=>g.raycaster),c=jd(g=>g.invalidate),l=zd(()=>new z2,[]),d=zd(()=>[l],[l]),u=e.enabled&&t!==null&&Ax(l,t,e),p=Ox(new Map),h=()=>{for(let[g,f]of p.current)g.clippingPlanes=f.clippingPlanes,g.side=f.side,g.needsUpdate=!0;p.current.clear()};Nd(()=>{if(u)return o.localClippingEnabled=!0,c(),()=>{h(),c()}},[u,o,c]),Nd(()=>{u&&c()},[u,e.axis,e.position,e.flip,t,c]),N2(()=>{let g=r.current;if(!u||!g)return;let f=p.current;g.traverse(y=>{let x=y.material;if(x)for(let v of Array.isArray(x)?x:[x]){let C=f.get(v);if(v.clippingPlanes===d&&v.side===Pl)continue;let P=v.side===Pl&&C?C.side:v.side;f.set(v,{clippingPlanes:C?C.clippingPlanes:v.clippingPlanes,side:P}),v.clippingPlanes=d,v.clipShadows=!0,v.side=Pl,v.needsUpdate=!0}})});let m=zd(()=>u?g=>!!g.object.userData.riSectionHandle||l.distanceToPoint(g.point)>=-1e-4:null,[u,l]);return Tl(m),Nd(()=>{if(!u)return;let g=s,f=g.firstHitOnly;return g.firstHitOnly=!1,()=>{g.firstHitOnly=f}},[u,s]),!u||!n||!t?null:El(V2,{section:e,box:t,onPositionChange:i,onDraggingChange:a})}function V2({section:e,box:t,onPositionChange:r,onDraggingChange:n}){let[i,a]=Dx(!1),[o,s]=Dx(!1),c=Ox(null),l=j2[e.axis],d=Bd(t,e)??0,u=[0,1,2].map(y=>(t.max[y]-t.min[y])*1.08||.01),p=[0,1,2].map(y=>(t.min[y]+t.max[y])/2);p[l]=d;let[h,m]=e.axis==="x"?[u[2],u[1]]:e.axis==="y"?[u[0],u[2]]:[u[0],u[1]],g=e.axis==="x"?[0,Math.PI/2,0]:e.axis==="y"?[-Math.PI/2,0,0]:[0,0,0],f=y=>{o&&(y.target?.releasePointerCapture?.(y.pointerId),c.current=null,s(!1),n(!1))};return F2("mesh",{ref:y=>{y&&(us(y),y.userData.riSectionHandle=!0)},position:p,rotation:g,renderOrder:2,onPointerOver:y=>{y.stopPropagation(),a(!0)},onPointerOut:()=>a(!1),onPointerDown:y=>{y.stopPropagation(),y.target?.setPointerCapture?.(y.pointerId),c.current={point:y.point.clone(),direction:y.ray.direction.clone(),coordinate:y.point.getComponent(l),cut:d},s(!0),n(!0)},onPointerMove:y=>{let x=c.current;if(!o||!x)return;y.stopPropagation();let v=Rx(y.ray,x.point,x.direction,e.axis);if(v===null)return;let C=kx(t,e.axis,x.cut+(v-x.coordinate));C!==null&&r(C)},onPointerUp:f,onPointerCancel:f,onClick:y=>y.stopPropagation(),children:[El("planeGeometry",{args:[h,m]}),El("meshBasicMaterial",{color:Lx,transparent:!0,opacity:o?.22:i?.16:.08,side:Pl,depthWrite:!1,toneMapped:!1}),El(B2,{color:Lx,renderOrder:3})]})}import{HexColorPicker as U2}from"react-colorful";import{jsx as Al,jsxs as Ix}from"react/jsx-runtime";var Fd=({colorPicker:e,onClose:t,itemMaterials:r,setItemMaterials:n,inline:i=!1})=>{let a=ne();return Ix("div",{className:`ri-popover${i?" ri-popover--inline":""}`,style:i?{padding:12}:{left:e.x,top:e.y,width:"min(225px, calc(100vw - 24px))",padding:12},onPointerDown:o=>o.stopPropagation(),children:[Al("p",{className:"ri-popoverLabel",children:a("color")}),Al(U2,{color:r[e.objectId]?.hex??"#ffffff",onChange:o=>n(s=>({...s,[e.objectId]:{...s[e.objectId],hex:o}}))}),Ix("div",{className:"ri-inlineRow",children:[Al("span",{className:"ri-colorCode",children:r[e.objectId]?.hex??"#ffffff"}),Al("button",{className:"ri-secondaryButton",onClick:t,children:a("done")})]})]})};import{jsx as st,jsxs as Zr}from"react/jsx-runtime";var Ud=({materialPopup:e,textureUrl:t,triggerFileUpload:r,clearTexture:n,canPlaceImage:i=!0,inline:a=!1,offset:o,rotationDegrees:s,onOffsetChange:c,onRotationChange:l,isPositioning:d=!1,onEndPositioning:u})=>{let p=ne();return Zr("div",{className:`ri-popover${a?" ri-popover--inline":""}`,style:a?{overflow:"hidden"}:{left:e.x,top:e.y,width:"min(300px, calc(100vw - 24px))",overflow:"hidden"},onPointerDown:h=>h.stopPropagation(),children:[st("div",{className:"ri-popoverHeader",children:st("p",{className:"ri-popoverLabel",style:{marginBottom:0},children:p("material")})}),Zr("div",{className:"ri-materialBody",children:[t?st("div",{className:"ri-previewFrame",children:st("img",{src:t,alt:p("texturePreview"),className:"ri-previewImage"})}):Zr("div",{className:"ri-emptyState",children:[st("svg",{width:"24",height:"24",fill:"none",stroke:"currentColor",strokeWidth:1.5,viewBox:"0 0 24 24",children:st("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"})}),st("span",{style:{fontSize:12},children:p("noTextureApplied")})]}),i?st("button",{onClick:()=>r(e.objectId),className:"ri-uploadButton",children:p(t?"replaceImage":"uploadImage")}):st("p",{className:"ri-formatHint",children:p("noTextureCoordinates")}),t&&st("button",{onClick:()=>n(e.objectId),className:"ri-removeButton",children:p("removeTexture")}),i?st("p",{className:"ri-formatHint",children:"JPG \xB7 PNG \xB7 WebP"}):null,t&&(c||l)&&Zr("div",{className:"ri-texturePosition",children:[st("p",{className:"ri-texturePositionLabel",children:p("texturePosition")}),Zr("div",{className:"ri-texturePositionGrid",children:[Zr("label",{className:"ri-texturePositionField",children:[st("span",{children:p("offsetX")}),st("input",{type:"number",step:.01,value:o?.[0]??0,onChange:h=>c?.(e.objectId,0,Number(h.target.value))})]}),Zr("label",{className:"ri-texturePositionField",children:[st("span",{children:p("offsetY")}),st("input",{type:"number",step:.01,value:o?.[1]??0,onChange:h=>c?.(e.objectId,1,Number(h.target.value))})]})]}),Zr("label",{className:"ri-texturePositionField ri-texturePositionField--full",children:[st("span",{children:p("rotation")}),Zr("div",{className:"ri-texturePositionSliderRow",children:[st("input",{type:"range",min:0,max:360,step:1,value:s??0,onChange:h=>l?.(e.objectId,Number(h.target.value))}),st("input",{type:"number",min:0,max:360,step:1,value:Math.round(s??0),onChange:h=>l?.(e.objectId,Number(h.target.value))})]})]}),d?st("button",{type:"button",className:"ri-uploadButton",onClick:u,title:p("confirmTexturePosition"),children:p("donePositioning")}):st("p",{className:"ri-texturePositionHint",children:p("textureOffsetHint")})]})]})]})};import{Fragment as G2,useEffect as Gd,useRef as H2,useState as Hd}from"react";import{Fragment as Wd,jsx as wt,jsxs as to}from"react/jsx-runtime";function Bx({entries:e}){return wt(Wd,{children:e.map(([t,r])=>{let n=r!==null&&typeof r=="object",i=n?Object.entries(r):[];return n&&i.length>0?to("div",{className:"left-panel__data-group",children:[wt("span",{className:"left-panel__data-key",children:t}),wt("div",{className:"left-panel__data-children",children:wt(Bx,{entries:i})})]},t):to("div",{className:"left-panel__data-row",children:[wt("span",{className:"left-panel__data-key",children:t}),wt("span",{className:`left-panel__data-value left-panel__data-value--${typeof r}`,children:n?Array.isArray(r)?"[]":"{}":String(r)})]},t)})})}function W2({content:e}){let t=e!=null,[r,n]=Hd(t),[i,a]=Hd(t),o=H2(e);return t&&(o.current=e),Gd(()=>{if(t){n(!0);return}if(r){a(!1);let s=setTimeout(()=>n(!1),300);return()=>clearTimeout(s)}},[t,r]),Gd(()=>{if(r&&t){let s=requestAnimationFrame(()=>a(!0));return()=>cancelAnimationFrame(s)}},[r,t]),r?wt("div",{className:`left-panel__action-extra${i?" left-panel__action-extra--open":""}`,children:wt("div",{className:"left-panel__action-extra-inner",children:e??o.current})}):null}function Xd({isOpen:e,selectedObject:t,currentAction:r,onClose:n,onAction:i,renderActionExtra:a,translateDefaultActions:o=!1}){let s=ne(),[c,l]=Hd(t);Gd(()=>{t&&l(t)},[t]);let d=t??c,u=d?Object.entries(d).filter(([p])=>p!=="actions"&&p!=="decals"):[];return wt("div",{className:`left-panel ${e?"left-panel--open":"left-panel--closed"}`,children:d&&to(Wd,{children:[to("div",{className:"left-panel__header",children:[wt("p",{className:"left-panel__title",children:d.label}),wt("button",{onClick:n,className:"left-panel__close-btn","aria-label":s("closePanel"),children:"\u2715"})]}),u.length>0&&wt("div",{className:"left-panel__data",children:wt(Bx,{entries:u})}),wt("hr",{className:"left-panel__divider"}),d.actions&&d.actions.length>0&&to(Wd,{children:[wt("div",{className:"left-panel__actions-label",children:s("actions")}),wt("div",{className:"left-panel__actions-list",children:d.actions.map((p,h)=>{let m=r?.action.id===p.id&&(r.binding===d||r.binding?.id===d.id||r.binding?.modelObjectId===d.modelObjectId||r.objectId===d.id||r.objectId===d.modelObjectId),g=a?.(p.id);return to(G2,{children:[wt("button",{onClick:f=>i({objectId:d.modelObjectId||d.id||"",action:p,binding:d,screenX:f.clientX,screenY:f.clientY}),className:["left-panel__action-btn",`left-panel__action-btn--${p.id}`,m?"left-panel__action-btn--active":""].filter(Boolean).join(" "),"data-action-id":p.id,"data-label":p.label,children:o?s.message(p.label):p.label}),wt(W2,{content:g})]},h)})})]})]})})}import{useMemo as q2,useState as zx}from"react";import{Boxes as $2,Focus as Y2}from"lucide-react";import{useState as X2}from"react";import{jsx as en,jsxs as va}from"react/jsx-runtime";function Nx({openButtonLabel:e,openButtonAriaLabel:t,eyebrow:r,title:n,searchValue:i,onSearchChange:a,searchPlaceholder:o,children:s,isOpen:c,onToggle:l,openButtonIcon:d,closeButtonIcon:u,closeButtonAriaLabel:p}){let h=ne(),[m,g]=X2(!1),f=c!==void 0?c:m,y=x=>{c===void 0&&g(x),l?.(x)};return va("div",{className:`ri-sidepanel-wrap ${f?"ri-sidepanel-wrap--open":"ri-sidepanel-wrap--closed"}`,children:[!f&&va("button",{type:"button",className:"ri-sidepanel__open-btn",onClick:()=>y(!0),"aria-label":t,title:h("openPanel"),children:[d,e?en("span",{children:e}):null]}),va("div",{className:`ri-sidepanel ${f?"ri-sidepanel--open":"ri-sidepanel--closed"}`,"aria-hidden":!f,children:[va("div",{className:"ri-sidepanel__header",children:[va("div",{className:"ri-sidepanel__header-top",children:[en("span",{className:"ri-sidepanel__eyebrow",children:r}),en("button",{type:"button",className:"ri-sidepanel__close-btn",onClick:()=>y(!1),"aria-label":p,title:h("close"),children:u??en("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none","aria-hidden":"true",children:en("path",{d:"M1 1L11 11M11 1L1 11",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})})})]}),en("p",{className:"ri-sidepanel__title",children:n})]}),en("div",{className:"ri-sidepanel__search-wrap",children:en("input",{className:"ri-sidepanel__search",type:"text",placeholder:o,value:i,onChange:x=>a(x.target.value)})}),en("div",{className:"ri-sidepanel__list",children:s})]})]})}import{jsx as tn,jsxs as K2}from"react/jsx-runtime";function qd({objectBindings:e,onAction:t,onFocus:r,onHover:n,isOpen:i,onToggle:a,isolatedKeys:o=null,onIsolate:s}){let c=ne(),[l,d]=zx(null),[u,p]=zx(""),h=q2(()=>Object.entries(e).filter(([m,g])=>{let f=u.toLowerCase();return m.toLowerCase().includes(f)||(g.label??"").toLowerCase().includes(f)}),[e,u]);return tn(Nx,{openButtonLabel:"",openButtonAriaLabel:c("openSceneObjectsPanel"),openButtonIcon:tn($2,{width:16,height:16,"aria-hidden":"true"}),eyebrow:c("sceneObjects"),title:c("visibleEntries",{count:h.length}),searchValue:u,onSearchChange:p,searchPlaceholder:c("searchNodesLabels"),isOpen:i,onToggle:a,closeButtonAriaLabel:c("closeSceneObjectsPanel"),children:h.map(([m,g])=>{let f=g.visible!==!1,y=l===m,x=o?.has(m)??!1;return K2("div",{onClick:()=>r(g),onMouseEnter:()=>{d(m),n?.(g)},onMouseLeave:()=>{d(null),n?.(null)},className:`ri-sidepanel__row${y?" ri-sidepanel__row--hovered":""}${o!==null&&!x?" ri-sidepanel__row--setAside":""}`,children:[tn("button",{type:"button",className:`ri-sidepanel__label ri-sidepanel__labelButton${y?" ri-sidepanel__label--hovered":""}`,onFocus:()=>{d(m),n?.(g)},onBlur:()=>{d(null),n?.(null)},children:g.label??m}),s?tn("button",{type:"button",onClick:C=>{C.stopPropagation(),s(g)},className:`ri-sidepanel__isolate-btn${x?" ri-sidepanel__isolate-btn--active":""}`,title:c(x?"showAll":"isolate"),"aria-label":c(x?"showAllObject":"isolateObject",{name:g.label??m}),"aria-pressed":x,children:tn(Y2,{width:14,height:14,"aria-hidden":"true"})}):null,tn("button",{type:"button",onClick:C=>{C.stopPropagation(),t?.({objectId:m,action:{id:"toggle-visibility",label:"Toggle Visibility",type:"command"},binding:g})},className:"ri-sidepanel__vis-btn",title:c(f?"hide":"show"),"aria-label":c(f?"hideObject":"showObject",{name:g.label??m}),children:tn("span",{className:`ri-sidepanel__checkbox${f?" ri-sidepanel__checkbox--checked":""}`,children:f&&tn("svg",{width:"9",height:"9",viewBox:"0 0 10 10",fill:"none",children:tn("path",{d:"M1.5 5L4 7.5L8.5 2.5",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})})})})]},m)})})}import{useEffect as Ux,useId as Q2,useRef as Gx,useState as Hx}from"react";function jx(e,t){let r=[];for(let[n,i]of Object.entries(e))(t.bindings[n]??i).visible!==!1&&(t.setAside.has(n)||r.push({key:n,binding:i,label:i.label||n}));return r}function Vx(e,t,r){if(r===0)return null;switch(e){case"ArrowDown":case"ArrowRight":return Math.min(t+1,r-1);case"ArrowUp":case"ArrowLeft":return Math.max(t-1,0);case"Home":return 0;case"End":return r-1;default:return null}}function Fx(e,t,r){let n=r.toLocaleLowerCase();if(!n)return null;let i=[...n].every(s=>s===n[0]),a=n.length>1&&!i?t:t+1,o=i?[n,n[0]]:[n];for(let s of o)for(let c=0;c<e.length;c++){let l=((a+c)%e.length+e.length)%e.length;if(e[l].label.toLocaleLowerCase().startsWith(s))return l}return null}import{jsx as Rl,jsxs as Wx}from"react/jsx-runtime";var J2=600;function Xx({objects:e,selectedKey:t,onHighlight:r,onSelect:n,onClearSelection:i}){let a=ne(),o=Q2(),[s,c]=Hx(!1),[l,d]=Hx(null),u=Gx({query:"",at:0}),p=l?e.findIndex(C=>C.key===l):-1,h=p>=0?e[p]:null;Ux(()=>{t&&e.some(C=>C.key===t)&&d(t)},[t,e]);let m=s?h?.binding??null:null,g=Gx(r);g.current=r,Ux(()=>{if(s)return g.current(m),()=>g.current(null)},[s,m]);let f=C=>{C!==null&&e[C]&&d(e[C].key)},y=C=>{let P=h?p:-1,b=Vx(C.key,Math.max(P,0),e.length);if(b!==null){C.preventDefault(),f(P<0&&C.key!=="End"?0:b);return}if(C.key==="Enter"||C.key===" "){if(!h)return;C.preventDefault(),n(h.binding);return}if(C.key==="Escape"){if(!t)return;C.preventDefault(),C.stopPropagation(),i();return}if(C.key.length===1&&C.key!==" "&&!C.ctrlKey&&!C.metaKey&&!C.altKey){let E=Date.now(),T=u.current;T.query=E-T.at>J2?C.key:T.query+C.key,T.at=E,C.preventDefault(),f(Fx(e,P,T.query))}};if(e.length===0)return null;let x=`${o}-option`,v=`${o}-hint`;return Wx("div",{className:`ri-objectNavigator${s?" ri-objectNavigator--focused":""}`,children:[Rl("div",{role:"listbox",tabIndex:0,className:"ri-objectNavigator__list","aria-label":a("objectNavigator"),"aria-describedby":v,"aria-activedescendant":h?x:void 0,onFocus:()=>{c(!0),h||d(e[0].key)},onBlur:()=>c(!1),onKeyDown:y,children:h?Wx("div",{id:x,role:"option","aria-selected":h.key===t,"aria-setsize":e.length,"aria-posinset":p+1,className:`ri-objectNavigator__option${h.key===t?" ri-objectNavigator__option--selected":""}`,children:[Rl("span",{className:"ri-objectNavigator__name",children:h.label}),Rl("span",{className:"ri-objectNavigator__position","aria-hidden":"true",children:a("objectNavigatorPosition",{position:p+1,count:e.length})})]}):null}),Rl("div",{id:v,className:"ri-objectNavigator__hint",children:a("objectNavigatorHint")})]})}import{RotateCcw as yA}from"lucide-react";import{useRef as ut,useEffect as wa,useMemo as or,useCallback as kl,useSyncExternalStore as rE}from"react";import{useThree as nE,useFrame as iE}from"@react-three/fiber";import{Sphere as oE,PivotControls as aE}from"@react-three/drei";import{Vector3 as fr,Vector2 as sE,AdditiveBlending as $d,TextureLoader as lE,Matrix4 as cE,Quaternion as ro,Euler as Dl}from"three";var qx="data:image/png;base64,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";var $x="data:image/png;base64,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";var Yx="data:image/png;base64,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";import{Fragment as xE,jsx as He,jsxs as ar}from"react/jsx-runtime";var Yd=-100,Kd=100,iv=.03,uE=.03,dE=.03,Kx=.5,pE=qx,hE=$x,mE=Yx,fE=Math.PI/4,Qx=.4,no=64,Jx=iv*3,Qd="#4d7dff",Zx="#ffcc00",ev=.02,gE=new fr(0,1,0),Ll=32,tv="#ff9d3d",Ol=4;function Jd(e){let t=new Float32Array((no+1)*3);for(let r=0;r<=no;r++){let n=r/no*Math.PI*2,i=Math.cos(n)*Qx,a=Math.sin(n)*Qx,o=0,s=0,c=0;e==="x"?(s=i,c=a):e==="y"?(o=i,c=a):(o=i,s=a),t[r*3]=o,t[r*3+1]=s,t[r*3+2]=c}return t}function bE(e){let t=Math.abs(e.y)<.99?new fr(0,1,0):new fr(1,0,0),r=new fr().crossVectors(e,t).normalize(),n=new fr().crossVectors(e,r).normalize();return[r,n]}function rv(e,t,r=1e-5){return Math.abs(e[0]-t[0])<r&&Math.abs(e[1]-t[1])<r&&Math.abs(e[2]-t[2])<r}var io=null,ep=new Set;function Zd(e){io!==e&&(io=e,ep.forEach(t=>t()))}function yE(e){return ep.add(e),()=>ep.delete(e)}function nv(){return io}function ov({light:e,position:t,rotation:r=[0,0,0],color:n,intensity:i,visible:a,onPositionChange:o,onRotationChange:s,onDraggingChange:c}){let{activeTab:l,activeSubTab:d,setActiveTab:u,setActiveSubTab:p}=is(),{camera:h,gl:m,raycaster:g,invalidate:f}=nE(),y=ut(null),x=ut(null),v=ut(null),C=ut(null),P=ut(null),b=ut(null),E=ut(null),T=ut(null),_=ut(null),M=ut(null),S=ut(null),A=or(()=>new cE,[]),D=or(()=>new ro,[]),k=or(()=>new fr(1,1,1),[]),I=ut([0,0,0]),R=ut([0,0,0]),V=ut(!1),L=ut(null),O=ut(null),G=ut(null),le=ut(c);wa(()=>{le.current=c},[c]);let H=or(()=>new fr(t[0],t[1],t[2]),[t]),be=or(()=>new Dl(r[0],r[1],r[2]),[r]),De=or(()=>new Float32Array(6),[]),Z=or(()=>Jd("x"),[]),ye=or(()=>Jd("y"),[]),me=or(()=>Jd("z"),[]),je=or(()=>new Float32Array((Ll+1)*3),[]),lt=or(()=>new Float32Array(Ol*2*3),[]),fe=e?.type==="point",Te=e?.type==="spot",Oe=fe?hE:Te?mE:pE,pt=fe?uE:Te?dE:iv,Y=or(()=>new lE().load(Oe),[Oe]),$t=rE(yE,nv,nv),Je=!!e&&$t===e.id,Ue=ut(new fr),$=ut(new Dl);wa(()=>{V.current||(Ue.current.copy(H),$.current.copy(be),f())},[H,be,f]),wa(()=>{e&&io===e.id&&!a&&Zd(null)},[e?.id,a]),wa(()=>()=>{e&&io===e.id&&Zd(null),G.current!==null&&(cancelAnimationFrame(G.current),G.current=null)},[e?.id]);let pe=kl(()=>{if(V.current||!Je)return;let ae=Ue.current,ie=new ro().setFromEuler($.current);A.compose(ae,ie,k)},[A,k,Je]);iE(()=>{if(y.current&&y.current.position.copy(Ue.current),pe(),v.current){v.current.lookAt(h.position);let ae=h,ie;ae.isOrthographicCamera?ie=pt/ae.zoom:ie=h.position.distanceTo(Ue.current)*pt,v.current.scale.setScalar(ie)}if(E.current){let ae=h,ie;ae.isOrthographicCamera?ie=Jx/ae.zoom:ie=h.position.distanceTo(Ue.current)*Jx,E.current.scale.setScalar(ie)}if(P.current){let ae=P.current.getAttribute("position"),ie=ae.array;ie[0]=0,ie[1]=0,ie[2]=0,ie[3]=Ue.current.x,ie[4]=Ue.current.y,ie[5]=Ue.current.z,ae.needsUpdate=!0,P.current.computeBoundingSphere()}if(b.current){let ae=Ue.current,ie=ae.length();b.current.visible=ie>Kx,ie>1e-6&&(b.current.position.copy(ae).multiplyScalar(.5),b.current.scale.set(1,ie,1),b.current.quaternion.setFromUnitVectors(gE,ae.clone().normalize()))}if(C.current&&(C.current.visible=Ue.current.length()>Kx),Te&&T.current&&_.current&&M.current){let ae=Ue.current,ie=ae.length();if(ie>1e-6){T.current.visible=!0;let rt=ae.clone().negate().normalize(),Le=ie,nt=e?.angle??Math.PI/6,W=Le*Math.tan(nt),re=ae.clone().add(rt.clone().multiplyScalar(Le)),[se,xe]=bE(rt),Ie=_.current.getAttribute("position"),Ee=Ie.array;for(let ve=0;ve<=Ll;ve++){let ke=ve/Ll*Math.PI*2,ht=re.x+(se.x*Math.cos(ke)+xe.x*Math.sin(ke))*W,Yt=re.y+(se.y*Math.cos(ke)+xe.y*Math.sin(ke))*W,mt=re.z+(se.z*Math.cos(ke)+xe.z*Math.sin(ke))*W;Ee[ve*3]=ht,Ee[ve*3+1]=Yt,Ee[ve*3+2]=mt}Ie.needsUpdate=!0,_.current.computeBoundingSphere();let Ce=M.current.getAttribute("position"),Q=Ce.array;for(let ve=0;ve<Ol;ve++){let ke=ve/Ol*Math.PI*2,ht=re.x+(se.x*Math.cos(ke)+xe.x*Math.sin(ke))*W,Yt=re.y+(se.y*Math.cos(ke)+xe.y*Math.sin(ke))*W,mt=re.z+(se.z*Math.cos(ke)+xe.z*Math.sin(ke))*W,Pt=ve*6;Q[Pt]=ae.x,Q[Pt+1]=ae.y,Q[Pt+2]=ae.z,Q[Pt+3]=ht,Q[Pt+4]=Yt,Q[Pt+5]=mt}Ce.needsUpdate=!0,M.current.computeBoundingSphere()}else T.current.visible=!1}});let Ze=kl(()=>{G.current!==null&&(cancelAnimationFrame(G.current),G.current=null),I.current=t,R.current=[r[0],r[1],r[2]],V.current=!0,L.current=null,O.current=null,le.current?.(!0)},[t,r]),Ve=kl((ae,ie,rt,Le)=>{let nt=new fr(I.current[0],I.current[1],I.current[2]),W=new fr,re=new ro,se=new fr;Le.decompose(W,re,se);let xe=nt.clone().applyMatrix4(Le),Ie=[Math.min(Math.max(xe.x,Yd),Kd),Math.min(Math.max(xe.y,Yd),Kd),Math.min(Math.max(xe.z,Yd),Kd)],Ee=new ro().setFromEuler(new Dl(R.current[0],R.current[1],R.current[2],"XYZ")),Ce=new ro().copy(re).multiply(Ee),Q=new Dl().setFromQuaternion(Ce,"XYZ"),ve=[Q.x,Q.y,Q.z];Ue.current.set(Ie[0],Ie[1],Ie[2]),$.current.set(ve[0],ve[1],ve[2]),L.current=Ie,O.current=ve;let ke=new ro().setFromEuler($.current);A.compose(Ue.current,ke,k),f()},[A,k,f]),Fe=kl(()=>{V.current=!1;let ae=L.current,ie=O.current;L.current=null,O.current=null;let rt=ae&&!rv(ae,I.current),Le=ie&&!rv(ie,R.current);rt&&o&&o(ae),Le&&s&&s(ie),rt||Le?G.current=requestAnimationFrame(()=>{G.current=null,le.current?.(!1)}):le.current?.(!1)},[o,s]);return wa(()=>{let ae=Le=>{let nt=m.domElement.getBoundingClientRect();return new sE((Le.clientX-nt.left)/nt.width*2-1,-((Le.clientY-nt.top)/nt.height)*2+1)},ie=Le=>!!Le.target.closest?.("button, input, textarea, .ri-annotationPopup, .ri-colorPicker, .ri-materialPicker"),rt=Le=>{if(ie(Le))return;let nt=ae(Le);g.setFromCamera(nt,h);let W=[];if(x.current&&W.push(x.current),v.current&&W.push(v.current),W.length===0)return;if(g.intersectObjects(W,!1).length>0){let se=e?.id??null;io!==se&&(Zd(se),u?.("scene"),p?.("Lighting")),Le.preventDefault(),Le.stopPropagation()}};return m.domElement.addEventListener("pointerdown",rt),()=>{m.domElement.removeEventListener("pointerdown",rt)}},[h,g,m,e,u,p]),l!=="scene"||d!=="Lighting"||!e||!a||e.type==="none"||e.type==="hemisphere"?null:ar("group",{ref:ae=>{ae&&us(ae)},children:[ar("group",{ref:y,children:[He("sprite",{ref:v,children:He("spriteMaterial",{map:Y,transparent:!0,opacity:.9,blending:$d,depthWrite:!1,rotation:Te?fE:0},Oe)}),He(oE,{ref:x,args:[.25,16,16],children:He("meshBasicMaterial",{transparent:!0,opacity:.01})}),fe&&ar("group",{ref:E,children:[ar("lineLoop",{renderOrder:999,children:[He("bufferGeometry",{children:He("bufferAttribute",{attach:"attributes-position",args:[Z,3],count:no+1})}),He("lineBasicMaterial",{color:Qd,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),ar("lineLoop",{renderOrder:999,children:[He("bufferGeometry",{children:He("bufferAttribute",{attach:"attributes-position",args:[ye,3],count:no+1})}),He("lineBasicMaterial",{color:Qd,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),ar("lineLoop",{renderOrder:999,children:[He("bufferGeometry",{children:He("bufferAttribute",{attach:"attributes-position",args:[me,3],count:no+1})}),He("lineBasicMaterial",{color:Qd,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]})]})]}),!fe&&!Te&&ar(xE,{children:[ar("mesh",{ref:b,children:[He("cylinderGeometry",{args:[ev,ev,1,8,1,!0]}),He("meshBasicMaterial",{color:Zx,transparent:!0,opacity:.05,blending:$d,depthWrite:!1,depthTest:!1})]}),ar("line",{ref:C,children:[He("bufferGeometry",{ref:P,children:He("bufferAttribute",{attach:"attributes-position",args:[De,3],count:2})}),He("lineBasicMaterial",{color:Zx,transparent:!0,opacity:.7,blending:$d})]})]}),Te&&ar("group",{ref:T,children:[ar("lineLoop",{renderOrder:999,children:[He("bufferGeometry",{ref:_,children:He("bufferAttribute",{attach:"attributes-position",args:[je,3],count:Ll+1})}),He("lineBasicMaterial",{color:tv,transparent:!0,opacity:.85,depthTest:!1,depthWrite:!1})]}),ar("lineSegments",{renderOrder:999,children:[He("bufferGeometry",{ref:M,children:He("bufferAttribute",{attach:"attributes-position",args:[lt,3],count:Ol*2})}),He("lineBasicMaterial",{color:tv,transparent:!0,opacity:.5,depthTest:!1,depthWrite:!1})]})]}),Je&&o&&He(aE,{ref:S,matrix:A,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:Ze,onDrag:Ve,onDragEnd:Fe})]})}import{useCallback as tp,useLayoutEffect as vE,useMemo as kr,useRef as rn}from"react";import{PivotControls as wE}from"@react-three/drei";import{useFrame as ME,useThree as SE}from"@react-three/fiber";import{Euler as av,Matrix4 as Il,Quaternion as Bl,Vector3 as Ma}from"three";import{jsx as sv}from"react/jsx-runtime";function rp({node:e,space:t,onTransformChange:r,onDraggingChange:n}){let i=SE(S=>S.invalidate),a=kr(()=>xf(e),[e]),o=kr(()=>new Il,[]),s=rn(!1),c=rn(new Il),l=rn(new Il),d=rn(null),u=rn(0),p=rn([]),h=rn(null),m=rn(n);m.current=n;let g=kr(()=>new Ma,[]),f=kr(()=>new Bl,[]),y=kr(()=>new Ma,[]),x=kr(()=>new Bl,[]),v=kr(()=>new Ma(1,1,1),[]),C=kr(()=>new Bl,[]),P=kr(()=>new Ma,[]),b=kr(()=>new Ma,[]),E=rn([0,0,0]),T=tp(()=>{s.current||(e.updateWorldMatrix(!0,!1),g.copy(a).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(f),x.copy(f),t==="world"&&x.identity(),o.compose(g,x,v))},[g,o,x,v,e,a,t,f]);vE(()=>(T(),()=>{let S=h.current!==null;S&&(cancelAnimationFrame(h.current),h.current=null),(s.current||S)&&(s.current=!1,m.current(!1));for(let A of p.current)Di(A);p.current=[]}),[T]),ME(()=>T());let _=tp(()=>{h.current!==null&&(cancelAnimationFrame(h.current),h.current=null),e.updateWorldMatrix(!0,!0),p.current=[];for(let S of ki(e))wf(S)||(os(S,S.matrixWorld),p.current.push(S));e.updateWorldMatrix(!0,!1),g.copy(a).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(f),e.getWorldScale(y),c.current.compose(g,f,y),l.current.copy(o),E.current=[e.rotation.x,e.rotation.y,e.rotation.z],d.current=null,s.current=!0,n(!0)},[g,o,e,n,a,f,y]),M=tp((S,A)=>{let D=c.current.clone().premultiply(A),k=l.current.clone().premultiply(A);D.decompose(P,f,b);let I=P.clone();k.decompose(g,x,v),t==="world"&&x.identity(),o.compose(g,x,v),S.decompose(P,C,b);let R=new av().setFromQuaternion(C,e.rotation.order),[V,L,O]=E.current,G=[V+R.x,L+R.y,O+R.z],le=new Bl().setFromEuler(new av(G[0],G[1],G[2],e.rotation.order)),be=(e.parent?.matrixWorld||new Il).clone().invert(),De=I.clone().applyMatrix4(be),Z=a.clone().multiply(e.scale).applyQuaternion(le),ye=De.clone().sub(Z),me=[ye.x,ye.y,ye.z];e.position.set(me[0],me[1],me[2]),e.rotation.set(G[0],G[1],G[2],e.rotation.order),e.updateMatrixWorld(!0),i(),d.current={position:me,rotation:G}},[g,C,o,x,v,i,e,a,P,b,t,f]);return sv("group",{children:sv(wE,{matrix:o,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:_,onDrag:(S,A,D,k)=>M(A,k),onDragEnd:()=>{s.current=!1;let S=d.current;if(d.current=null,S)r(S),h.current=requestAnimationFrame(()=>{h.current=null,n(!1)});else if(p.current.length>0){for(let A of p.current)Di(A);e.updateMatrixWorld(!0),i(),n(!1)}else n(!1);p.current=[]}})})}import{Vector3 as CE}from"three";function TE(e){let t=e.object;if(!t.isSkinnedMesh||!e.face||!t.skeleton)return null;let r=t.geometry,n=r.getAttribute("skinIndex"),i=r.getAttribute("skinWeight"),a=r.getAttribute("position");if(!n||!i||!a)return null;let o=t.worldToLocal(e.point.clone()),s=[e.face.a,e.face.b,e.face.c],c=new CE,l=s[0],d=1/0;for(let h of s){c.fromBufferAttribute(a,h);let m=c.distanceToSquared(o);m<d&&(d=m,l=h)}let u=n.getComponent(l,0),p=i.getComponent(l,0);for(let h=1;h<4;h++){let m=i.getComponent(l,h);m>p&&(p=m,u=n.getComponent(l,h))}return t.skeleton.bones[u]??null}function lv(e){let t=TE(e)??e.object,r=Po(t);if(!r)return null;t.updateWorldMatrix(!0,!1);let n=t.worldToLocal(e.point.clone());return{anchorNodeName:r,anchorLocalPosition:[n.x,n.y,n.z]}}function cv(e,t,r){if(!e.anchorNodeName||!e.anchorLocalPosition)return!1;let n=un(t,e.anchorNodeName);return n?(n.updateWorldMatrix(!0,!1),r.set(...e.anchorLocalPosition).applyMatrix4(n.matrixWorld),!0):!1}import{useEffect as _E,useMemo as np,useRef as uv}from"react";import{useFrame as PE,useThree as EE}from"@react-three/fiber";import{Vector3 as ip}from"three";function op({annotation:e,enabled:t,controlsRef:r,offsetRef:n}){let i=EE(p=>p.scene),a=uv(null),o=uv(!1),s=np(()=>new ip,[]),c=np(()=>new ip,[]),l=np(()=>new ip,[]),d=e?.anchorNodeName,u=e?.anchorLocalPosition;return _E(()=>{a.current=null,o.current=!1},[d,e?.id]),PE(()=>{let p=r.current,h=n.current;if(!t||!p||!h||!d||!u){o.current=!1;return}let m=a.current;if((!m||!m.parent)&&(m=un(i,d),a.current=m),!m){o.current=!1;return}m.updateWorldMatrix(!0,!1),s.set(u[0],u[1],u[2]).applyMatrix4(m.matrixWorld),!(o.current&&s.distanceToSquared(c)<1e-8)&&(c.copy(s),o.current=!0,l.copy(s).add(h),p.setLookAt(l.x,l.y,l.z,s.x,s.y,s.z,!0))}),null}import{useCallback as Dr,useEffect as oo,useMemo as ao,useRef as ap,useState as Pn}from"react";import{Box3 as AE,Vector3 as Nl}from"three";function dv({sceneAnnotations:e,controlledAnnotationCategories:t,onAnnotationCategoriesChange:r,showAnnotationFilters:n,initialCategories:i,controlledActiveAnnotation:a,onActiveAnnotationChange:o,onAnnotationsChange:s,controlsRef:c,sceneRef:l,annotationWorldPositionsRef:d,tourCameraOffsetRef:u,initialCameraStateRef:p,engagement:h,engagementRef:m}){let[g,f]=Pn(!1),[y,x]=Pn(()=>e??[]);oo(()=>{if(y.length>0){let $=y.reduce((pe,Ze)=>Math.max(pe,Ze.id),0);E.current=$}else E.current=0},[y]);let[v,C]=Pn(null),[P,b]=Pn({title:"",description:""}),E=ap(0),[T,_]=Pn(null),[M,S]=Pn(-1),[A,D]=Pn(!1),k=ap(null),[I,R]=Pn(()=>i),V=t===void 0?I:t,L=ao(()=>ox(y,V),[y,V]),O=ao(()=>[...new Set(y.map(Td))].sort(),[y]),G=n&&O.some(Boolean),le=$=>{t===void 0&&R($),r?.($)},H=ao(()=>[...L].sort(($,pe)=>$.id-pe.id),[L]),be=ao(()=>JSON.stringify([V?.map($=>$.trim()).sort()??null,H]),[V,H]),De=ao(()=>M<0||M>=H.length?null:H[M],[M,H]),Z=Dr($=>{if(a!==void 0){o?.($);return}_($?{annotation:$}:null)},[a,o]),ye=ap(null),me=Dr($=>{let pe=c.current,Ze=l.current;if(!pe)return;let Ve=new Nl,Fe=d.current.get($.id);Fe?Ve.copy(Fe):Ze&&cv($,Ze,Ve)||Ve.set($.worldPosition[0],$.worldPosition[1],$.worldPosition[2]),u.current=null;let ae=pe.smoothTime;pe.smoothTime=Ei(pe,.6);let ie=$.worldNormal;if(Ml($.cameraView))fa(pe,$.cameraView);else{if(Ze){let rt=new AE().setFromObject(Ze),Le=new Nl;rt.getCenter(Le);let nt=new Nl;rt.getSize(nt);let W=nt.length()*.2,re;ie?re=new Nl(ie[0],ie[1],ie[2]):re=Ve.clone().sub(Le),re.lengthSq()<1e-6&&re.set(0,0,1),re.normalize();let se=Math.max(W*.6,.3),xe=Ve.clone().add(re.multiplyScalar(se));pe.setPosition(xe.x,xe.y,xe.z,!0),$.anchorNodeName&&$.anchorLocalPosition&&(u.current=xe.clone().sub(Ve))}pe.setTarget(Ve.x,Ve.y,Ve.z,!0),ye.current&&ga(pe,ye.current)}k.current&&clearTimeout(k.current),k.current=setTimeout(()=>{pe.smoothTime=ae,k.current=null},800),Z($)},[Z]),je=Dr(()=>{H.length!==0&&(c.current&&(ye.current=ma(c.current)),h.startTour(H.length),f(!0),S(0),me(H[0]))},[H,me,h]),lt=Dr(()=>{if(H.length===0||M<0)return;D(!0);let $=(M-1+H.length)%H.length;S($),me(H[$]),setTimeout(()=>D(!1),500)},[M,H,me]),fe=Dr(()=>{if(H.length===0||M<0)return;if(M===H.length-1){if(h.completeTour(),f(!1),S(-1),Z(null),c.current&&p.current){let pe=p.current;fa(c.current,{...ye.current,...pe}),ye.current=null}return}D(!0);let $=M+1;S($),me(H[$]),setTimeout(()=>D(!1),500)},[M,H,me,Z,h]),Te=Dr(()=>{if(h.stopTour(),f(!1),S(-1),Z(null),c.current&&p.current){let $=p.current;fa(c.current,{...ye.current,...$}),ye.current=null}},[Z,h]);oo(()=>{m.current.stopTour("annotations-changed"),ye.current&&c.current&&(fa(c.current,{...ye.current,...p.current??{}}),ye.current=null),u.current=null,S(-1),f(!1)},[be]),oo(()=>()=>{k.current&&clearTimeout(k.current)},[]),oo(()=>{De&&g&&ye.current&&Z(De)},[De,Z,g]),oo(()=>{if(e===void 0)return;let $=e.map(pe=>({...pe,localPosition:pe.localPosition??pe.worldPosition}));x($)},[e]);let Oe=Dr(()=>{if(a!==void 0){o?.(null);return}_(null)},[a,o]),pt=a!==void 0?a:T?.annotation??null,Y=ao(()=>pt?L.find(pe=>pe.id===pt.id)??null:null,[pt,L]);oo(()=>{pt&&!Y&&Oe()},[pt,Y,Oe]);let $t=Dr(()=>{if(!v||!P.title.trim())return;E.current+=1;let pe={id:E.current,worldPosition:v.worldPosition,localPosition:v.localPosition,worldNormal:v.worldNormal,anchorNodeName:v.anchor?.anchorNodeName,anchorLocalPosition:v.anchor?.anchorLocalPosition,title:P.title.trim(),description:P.description},Ze=[...y,pe];x(Ze),s?.(Ze),C(null)},[v,P,y,s]),Je=Dr(()=>C(null),[]),Ue=Dr($=>{Ml($.cameraView)?me($):Z($)},[Z,me]);return{annotations:y,pendingAnnotation:v,setPendingAnnotation:C,annotationForm:P,setAnnotationForm:b,currentAnnotationIndex:M,isNavigating:A,localAnnotationCategories:I,selectedAnnotationCategories:V,visibleAnnotations:L,availableAnnotationCategories:O,annotationFiltersVisible:G,changeAnnotationCategories:le,sortedAnnotations:H,currentAnnotation:De,setActiveAnnotation:Z,focusAnnotation:me,startGuidedTour:je,goToPreviousAnnotation:lt,goToNextAnnotation:fe,stopGuidedTour:Te,closeViewingAnnotation:Oe,activeAnnotation:pt,activeViewingAnnotation:Y,isGuidedTourActive:g,handleAnnotationOk:$t,handleAnnotationCancel:Je,handleAnnotationMarkerClick:Ue}}import{useCallback as zl,useEffect as pv,useMemo as RE,useRef as kE}from"react";import{Vector3 as DE}from"three";var hv=()=>`decal-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`;function mv({currentObjectBindings:e,currentObjectBindingsRef:t,applyObjectBindings:r,nodeRefsMap:n,controlsRef:i,decalMove:a,decalDragging:o,setDecalDragging:s,setDecalError:c,setDecalControl:l,decalRequestRef:d,onTextureUpload:u,currentPanelObjectId:p,modelUrl:h}){let m=zl((b,E)=>{let T=t.current,_=T[b];if(!_)return;let M=E(_.decals??[]);r({...T,[b]:{..._,decals:M.length>0?M:void 0}})},[r,e]),g=RE(()=>{if(!o)return null;let{objectKey:b,decalId:E}=o,T=e[b],_=T?.decals?.find(M=>M.id===E);return _?{objectId:T.modelObjectId??b,decal:_,onCancel:()=>s(null),onCommit:M=>{m(b,S=>S.map(A=>A.id===E?{...A,...M}:A)),s(null)}}:null},[o,e,m]),f=a??g,y=zl((b,E)=>{d.current++;let T=t.current[b],_=n.current[T?.modelObjectId??b],M=Cf(_,i.current?.camera);if(!M)return c("Could not find a surface on this object for the decal."),!1;let S={...E,...M};return m(b,A=>[...A,S]),c(null),l(A=>A&&{...A,activeId:S.id}),s({objectKey:b,decalId:S.id}),!0},[m]),x=zl(b=>{let E=t.current[b],T=n.current[E?.modelObjectId??b]?.geometry;if(!T)return .2;T.boundingBox||T.computeBoundingBox();let _=T.boundingBox?.getSize(new DE),M=_?Math.max(_.x,_.y,_.z):0;return M>0&&Number.isFinite(M)?M/3:.2},[]),v=kE([]);pv(()=>()=>{for(let b of v.current)URL.revokeObjectURL(b)},[]);let C=zl(async(b,E,T)=>{let _=++d.current;s(null);let M;if(u){if(M=await u(T,b),_!==d.current)return}else M=URL.createObjectURL(T),v.current.push(M);y(E,{id:hv(),image:M,size:x(E)})},[x,u,y]);return pv(()=>{d.current++,c(null),s(null)},[p,h]),{editDecals:m,activeDecalMove:f,addCenteredDecal:y,decalSizeFor:x,startImageDecal:C,decalControlHandlers:(b,E)=>({onSelect:T=>{d.current++,c(null),s(null),l({...b,activeId:T})},onAddText:(T,_)=>y(E,{id:hv(),text:T,color:_,size:x(E)}),onAddImage:T=>{C(b.objectId,E,T)},onChange:(T,_)=>m(E,M=>M.map(S=>S.id===T?{...S,..._}:S)),onNudge:(T,_)=>{let M=t.current[E],S=M?.decals?.find(k=>k.id===T);if(!S)return;let A=n.current[M.modelObjectId??E],D=_f(A,i.current?.camera,S,_);if(!D){c("No visible surface in that direction. Try another arrow or rotate the view.");return}c(null),s(null),m(E,k=>k.map(I=>I.id===T?{...I,...D}:I))},onMove:T=>{d.current++,e[E]?.decals?.find(M=>M.id===T)&&(c(null),s(M=>M?.objectKey===E&&M.decalId===T?null:{objectKey:E,decalId:T}))},onRemove:T=>{s(null),m(E,_=>_.filter(M=>M.id!==T)),l({...b,activeId:null})},onClose:()=>{d.current++,c(null),s(null),l(null)}})}}import{useEffect as LE,useRef as fv}from"react";function gv({canvasAreaElement:e,controlsRef:t,enabled:r}){let n=fv(new Set),i=fv(null);LE(()=>{let a=e;if(!a||!r)return;let o=new Set(["w","a","s","d"," ","c"]),s=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"]),c=0,l=m=>m.code==="Space"?" ":m.key.toLowerCase(),d=()=>{n.current.clear(),c=0,i.current!==null&&(cancelAnimationFrame(i.current),i.current=null)},u=m=>{let g=t.current,f=n.current;if(!g||f.size===0){i.current=null,c=0;return}let y=c?Math.min((m-c)/1e3,.05):1/60;c=m;let x=Math.max(g.distance*.75,.01)*y;f.has("w")&&g.forward(x,!1),f.has("s")&&g.forward(-x,!1),f.has("a")&&g.truck(-x,0,!1),f.has("d")&&g.truck(x,0,!1),f.has(" ")&&g.truck(0,x,!1),f.has("c")&&g.truck(0,-x,!1),i.current=requestAnimationFrame(u)},p=m=>{if(m.target!==a){d();return}if(s.has(m.key)){let f=t.current;if(!f)return;m.preventDefault();let y=Math.PI/90,x=Math.max(f.distance*.05,.01);m.key==="ArrowUp"?m.shiftKey?f.forward(x,!0):f.rotate(0,-y,!0):m.key==="ArrowDown"?m.shiftKey?f.forward(-x,!0):f.rotate(0,y,!0):m.key==="ArrowLeft"?f.rotate(-y,0,!0):f.rotate(y,0,!0);return}let g=l(m);o.has(g)&&(m.preventDefault(),n.current.add(g),i.current===null&&(i.current=requestAnimationFrame(u)))},h=m=>{n.current.delete(l(m))};return a.addEventListener("keydown",p),a.addEventListener("keyup",h),a.addEventListener("blur",d),()=>{a.removeEventListener("keydown",p),a.removeEventListener("keyup",h),a.removeEventListener("blur",d),d()}},[e,t,r])}import{useCallback as so,useEffect as sp,useRef as lo}from"react";var bv=1,OE=4,IE=.0015,BE=.1,NE=8;function yv({moveZoomTarget:e,setMoveZoomTarget:t,currentObjectBindingsRef:r,materialRefsOut:n,rendererCaptureRef:i,canvasAreaRef:a,canvasAreaElement:o,applyBindingStyle:s}){let c=lo(null),l=lo(!1),d=lo([0,0]),u=lo([0,0]),p=lo(1),h=lo(null),m=so((C,P)=>{let b=e;if(!b)return;let E=r.current[b.objectKey]?.style?.material?.[b.textureKey],T=E?.path;if(!T)return;let _=E?.rotation??0,M=ur(b.textureKey),S=Bo(T,M),A=n.current[b.objectKey],D=Array.isArray(A)?A:A?[A]:[],k=Ka[b.textureKey];for(let I of D){let R=I;k in R&&(R[k]=Ms(R.userData,b.textureKey,S,T,C,P,_))}i.current?.invalidate()},[e]),g=so(C=>{if(!e)return;C.currentTarget.setPointerCapture?.(C.pointerId),c.current={x:C.clientX,y:C.clientY},l.current=!1;let P=r.current[e.objectKey]?.style?.material?.[e.textureKey];if(d.current=P?.offset??[0,0],u.current=d.current,p.current=P?.scale??1,h.current===null){let b=()=>{i.current?.invalidate(),h.current=requestAnimationFrame(b)};h.current=requestAnimationFrame(b)}},[e]),f=so(C=>{if(!e||!c.current)return;let P=a.current,b=P?.clientWidth||1,E=P?.clientHeight||1,T=C.clientX-c.current.x,_=C.clientY-c.current.y;if(!l.current&&Math.hypot(T,_)<OE)return;l.current=!0;let M=-(T/b)*bv,S=_/E*bv,[A,D]=d.current,k=[A+M,D+S];u.current=k,m(k,p.current),s(e.objectKey,I=>({...I,material:{...I?.material,[e.textureKey]:{...I?.material?.[e.textureKey],path:r.current[e.objectKey]?.style?.material?.[e.textureKey]?.path,offset:k}}}))},[e,m,s]),y=so(C=>{if(!e)return;C.target?.releasePointerCapture?.(C.pointerId),h.current!==null&&(cancelAnimationFrame(h.current),h.current=null);let P=l.current,b=e;if(P){s(b.objectKey,E=>({...E,material:{...E?.material,[b.textureKey]:{...E?.material?.[b.textureKey],path:r.current[b.objectKey]?.style?.material?.[b.textureKey]?.path,offset:u.current}}})),c.current=null,l.current=!1;return}c.current=null,t(null)},[e,s]);sp(()=>{if(!e)return h.current!==null&&(cancelAnimationFrame(h.current),h.current=null),()=>{h.current!==null&&(cancelAnimationFrame(h.current),h.current=null)}},[e]),sp(()=>{let C=o;if(!(!C||!e))return C.addEventListener("pointermove",f),C.addEventListener("pointerup",y),C.addEventListener("pointercancel",y),()=>{C.removeEventListener("pointermove",f),C.removeEventListener("pointerup",y),C.removeEventListener("pointercancel",y)}},[o,e,f,y]);let x=so(C=>{if(!e)return;C.preventDefault();let P=e,b=Math.exp(-C.deltaY*IE),E=Math.min(NE,Math.max(BE,p.current*b));p.current=E,m(u.current,E),s(P.objectKey,T=>({...T,material:{...T?.material,[P.textureKey]:{...T?.material?.[P.textureKey],path:r.current[P.objectKey]?.style?.material?.[P.textureKey]?.path,scale:E}}}))},[e,m,s]);return sp(()=>{let C=o;if(!(!C||!e))return C.addEventListener("wheel",x,{passive:!1}),()=>C.removeEventListener("wheel",x)},[o,e,x]),{beginMoveZoom:so(C=>{l.current=!1,c.current=null,t(C)},[t]),handleMoveZoomPointerDown:g}}import{useFrame as zE,useThree as jE}from"@react-three/fiber";var VE=.2;function lp({enabled:e,speed:t,controlsRef:r}){let n=jE(i=>i.invalidate);return zE((i,a)=>{!e||!r.current||(r.current.rotate(a*VE*t,0,!1),n())}),null}import{AlertTriangle as Sa,RotateCcw as FE,X as xv}from"lucide-react";import{jsx as dt,jsxs as En}from"react/jsx-runtime";function vv({count:e,onDismiss:t}){let r=ne();return En("div",{className:"ri-bindingsMismatchBanner",children:[dt(Sa,{size:14,className:"ri-bindingsMismatchBanner__icon"}),dt("span",{children:r(e===1?"bindingMismatchOne":"bindingMismatchMany",{count:e})}),dt("button",{type:"button",className:"ri-bindingsMismatchBanner__dismiss",onClick:n=>{n.stopPropagation(),t()},"aria-label":r("dismiss"),children:dt(xv,{size:12})})]})}function wv({triangles:e,offset:t,onDismiss:r}){let n=ne();return En("div",{className:`ri-largeModelBanner ${t?"ri-largeModelBanner--offset":""}`,children:[dt(Sa,{size:14,className:"ri-largeModelBanner__icon"}),dt("span",{children:n("largeModelWarning",{millions:Math.round(e/1e6)})}),dt("button",{type:"button",className:"ri-largeModelBanner__dismiss",onClick:i=>{i.stopPropagation(),r()},"aria-label":n("dismiss"),children:dt(xv,{size:12})})]})}function Mv({missing:e,total:t}){let r=ne();return En("div",{className:"ri-uvCheckerBanner",role:"status",children:[dt(Sa,{size:14,className:"ri-uvCheckerBanner__icon"}),En("span",{children:[e===t?"UV Checker: this model has no UV0 coordinates.":`UV Checker: ${e} of ${t} meshes have no UV0 coordinates.`," ",r("missingUVsAreShownInMagenta")]})]})}function Sv({failure:e,source:t}){return dt("div",{className:"ri-loadError",role:"alert",children:En("div",{className:"ri-loadError__card",children:[En("div",{className:"ri-loadError__header",children:[dt(Sa,{size:16,"aria-hidden":"true"}),dt("span",{className:"ri-loadError__title",children:e.title})]}),dt("p",{className:"ri-loadError__detail",children:e.detail}),dt("p",{className:"ri-loadError__source",children:t}),e.technical&&dt("p",{className:"ri-loadError__technical",children:e.technical})]})})}function Cv({rebuilding:e,onReload:t}){let r=ne();return dt("div",{className:"ri-contextRecovery",role:"alert",children:En("div",{className:"ri-contextRecovery__card",children:[dt(Sa,{size:24,"aria-hidden":"true"}),dt("h2",{children:r(e?"contextRestoringTitle":"contextLostTitle")}),dt("p",{children:r(e?"contextRestoringMessage":"contextLostMessage")}),En("button",{type:"button",onClick:t,disabled:e,children:[dt(FE,{size:16,"aria-hidden":"true"}),r("reloadViewer")]})]})})}import{useCallback as jl}from"react";function Tv({applyBindingStyle:e,resolveObjectKey:t,onTextureUpload:r,fileInputRef:n,pendingObjectId:i,createdBlobUrls:a,texturePositioning:o,setMoveZoomTarget:s}){let c=jl((y,x)=>{let v=a.current[y];v&&URL.revokeObjectURL(v),x.startsWith("blob:")?a.current[y]=x:delete a.current[y],e(y,C=>({...C,material:{...C?.material,texture:{path:x}}}))},[e]),l=y=>{let x=y.target.files?.[0],v=i.current;if(!x||!v)return;let C=t(v);C&&(r?r(x,C).then(P=>c(C,P),P=>console.error("onTextureUpload failed:",P)):c(C,URL.createObjectURL(x)),y.target.value="")},d=y=>{i.current=y,n.current?.click()},u=y=>{let x=t(y);if(!x)return;e(x,C=>C?.material?.texture?{...C,material:{...C.material,texture:void 0}}:C);let v=a.current[x];v&&(URL.revokeObjectURL(v),delete a.current[x])},p=!!o,h=typeof o=="object"?o:void 0,m=jl((y,x,v)=>{if(h?.onOffsetChange){h.onOffsetChange(y,x,v);return}e(y,C=>{let P=C?.material?.texture;if(!P?.path)return C;let b=P.offset??[0,0],E=[b[0],b[1]];return E[x]=v,{...C,material:{...C?.material,texture:{...P,offset:E}}}})},[e,h]),g=jl((y,x)=>{if(h?.onRotationChange){h.onRotationChange(y,x);return}e(y,v=>{let C=v?.material?.texture;if(!C?.path)return v;let P=(x%360+360)%360;return{...v,material:{...v?.material,texture:{...C,rotation:P*Math.PI/180}}}})},[e,h]),f=jl(()=>{s(null),h?.onEndPositioning?.()},[h]);return{handleFileChange:l,triggerFileUpload:d,clearTexture:u,texturePositioningEnabled:p,texturePositioningOverrides:h,setMaterialTextureOffset:m,setMaterialTextureRotation:g,endMaterialTexturePositioning:f}}function _v({materialPopup:e,resolveObjectKey:t,currentObjectBindings:r,nodeRefsMap:n,moveZoomTarget:i,texturePositioningEnabled:a,texturePositioningOverrides:o,setMaterialTextureOffset:s,setMaterialTextureRotation:c,endMaterialTexturePositioning:l}){let d=e?t(e.objectId):null,u=d?r[d]?.style?.material?.texture?.path:void 0,p=u?lg(u)??u:void 0,h=bm(d?n.current[d]:null),m=a?o?.offset??(d?r[d]?.style?.material?.texture?.offset:void 0):void 0,g=a?o?.rotationDegrees??(d?((r[d]?.style?.material?.texture?.rotation??0)*180/Math.PI%360+360)%360:0):0,f=a?o?.isPositioning??!!(d&&i?.objectKey===d&&i?.textureKey==="texture"):!1;return{materialTextureUrl:p,materialTargetTakesImage:h,materialTextureOffset:m,materialTextureRotationDegrees:g,isMaterialTexturePositioning:f,materialTextureOnOffsetChange:a?s:void 0,materialTextureOnRotationChange:a?c:void 0,materialTextureOnEndPositioning:a?l:void 0}}import{useCallback as cp,useRef as UE}from"react";var Vl=e=>e==="#000000"?"#ffffff":e;function Pv({nodeRefsMap:e,currentObjectBindingsRef:t,applyObjectBindings:r}){let n=UE({}),i=cp(o=>{let s=Wf(e.current[o]),c=t.current[o]?.style?.material,l=c?.emissive??s.color,d=c?.emissiveIntensity??s.intensity;return{color:l,intensity:d,on:l!=="#000000"&&d>0}},[]),a=cp((o,s)=>{let c=t.current,l=c[o];l&&r({...c,[o]:{...l,style:{...l.style,material:{...l.style?.material,...s}}}})},[r]);return{glowMemoryRef:n,readObjectGlow:i,applyGlow:a}}function Ev({setCurrentAction:e,bindingKeyIndex:t,currentObjectBindings:r,applyObjectBindings:n,resolveObjectKey:i,closeColorPicker:a,setColorPicker:o,setMaterialPopupsByObject:s,setItemMaterials:c,getPopoverPosition:l,decalRequestRef:d,setDecalError:u,setDecalDragging:p,setDecalControl:h,resolvedSceneConfigRef:m,applyLightPatches:g,readObjectGlow:f,applyGlow:y,glowMemoryRef:x,setLightControl:v,onAction:C}){return cp(P=>{let{objectId:b,action:E,binding:T}=P;switch(e(P),E.id){case"toggle-visibility":{let _=b;T?.modelObjectId&&(_=t.byModelObjectId.get(T.modelObjectId)??_);let M=r[_],S=M?.visible===!1;M&&n({...r,[_]:{...M,visible:S}});break}case"change-color":a(),s(_=>{if(!(b in _))return _;let M={..._};return delete M[b],M}),c(_=>{let M=i(b,T)??b,S=_[b]?.hex,A=r[M]?.style?.material?.baseColor;return{..._,[b]:{..._[b],hex:S??A??"#ffffff"}}}),o(l(b,225,250,T,P));break;case"change-material":a(),s(_=>{if(b in _){let M={..._};return delete M[b],M}return{..._,[b]:l(b,300,320,T,P)}});break;case"add-text":case"add-image":{a();let _=E.id;d.current++,u(null),p(null),h(M=>M?.objectId===b&&M.kind===_?null:{objectId:b,kind:_,activeId:null});break}case"toggle-light":case"change-light-color":case"set-brightness":{let _=i(b,T);if(!_)break;let M=Hf(m.current,r,_);if(E.id==="toggle-light"){if(M.length>0){let k=!M.some(I=>I.visible);g(Object.fromEntries(M.map(I=>[I.id,{visible:k}])));break}let D=f(_);D.on?(x.current[_]=D.intensity,y(_,{emissiveIntensity:0})):y(_,{emissive:Vl(D.color),emissiveIntensity:x.current[_]??1});break}let S=E.id,A=M.length>0?null:f(_);v(D=>D?.objectId===b&&D.kind===S?null:{objectId:b,kind:S,target:A?{type:"glow",objectKey:_,baseIntensity:A.on?A.intensity:x.current[_]??1}:{type:"lights",lightIds:M.map(k=>k.id),baseIntensity:Object.fromEntries(M.map(k=>[k.id,k.intensity]))},percent:A&&!A.on?0:100});break}default:break}C?.(P)},[n,y,g,f,r,l,C,a,i,t])}import{Box as GE,Camera as HE,ChevronLeft as WE,ChevronRight as XE,Download as qE,FileImage as $E,Maximize as YE,Minimize as KE,Orbit as QE,Play as Av,Square as JE}from"lucide-react";import{Fragment as Ca,jsx as ce,jsxs as We}from"react/jsx-runtime";function Rv({categories:e,selected:t,disabled:r,onChange:n}){let i=ne();return We("div",{className:"ri-annotationFilters",role:"group","aria-label":i("annotationCategories"),onPointerDown:a=>a.stopPropagation(),children:[ce("span",{children:i("annotations")}),ce("button",{type:"button","aria-pressed":t===null,disabled:r,onClick:()=>n(null),children:i("all")}),e.map(a=>ce("button",{type:"button",disabled:r,"aria-pressed":t?.some(o=>o.trim()===a)??!1,onClick:()=>n(t===null?[a]:t.some(o=>o.trim()===a)?t.filter(o=>o.trim()!==a):[...t,a]),children:a||i("uncategorized")},a))]})}function kv({onCancel:e}){let t=ne();return We("div",{className:"ri-isolationPill",role:"status",onPointerDown:r=>r.stopPropagation(),children:[ce("span",{className:"ri-isolationPill__label",children:t("decalDragHint")}),ce("button",{type:"button",className:"ri-isolationPill__button",onClick:e,children:t("cancel")})]})}function Dv({label:e,onShowAll:t}){let r=ne();return We("div",{className:"ri-isolationPill",onPointerDown:n=>n.stopPropagation(),children:[ce("span",{className:"ri-isolationPill__label",children:e}),ce("button",{type:"button",className:"ri-isolationPill__button",onClick:t,children:r("showAll")})]})}function Lv({groups:e,activeVariants:t,onSelect:r}){let n=ne();return ce(Ca,{children:e.map((i,a)=>We("div",{className:"ri-variantPicker",role:"group","aria-label":i.name??n("materialVariants"),onPointerDown:o=>o.stopPropagation(),children:[i.name?ce("span",{className:"ri-variantPicker__group","aria-hidden":"true",children:i.name}):null,i.variants.map(o=>{let s=t.includes(o.name);return We("button",{type:"button",className:`ri-variantPicker__option ${s?"ri-variantPicker__option--active":""}`,"aria-pressed":s,onClick:()=>r(o.name),children:[o.swatch?ce("span",{className:"ri-variantPicker__swatch",style:{background:o.swatch},"aria-hidden":"true"}):null,o.label]},o.name)})]},i.name??`group-${a}`))})}function Ov({count:e,active:t,index:r,navigating:n,onStart:i,onPrevious:a,onNext:o,onStop:s}){let c=ne();return t?We(Ca,{children:[We("button",{className:"ri-tourButton",onClick:a,disabled:n||e===0||r<=0,title:c("previousAnnotation"),children:[ce(WE,{size:16}),ce("span",{children:c("previous")})]}),ce("button",{className:"ri-tourButton ri-tourButton--stop",onClick:s,title:c("stopGuidedTour"),children:ce(JE,{size:16})}),We("button",{className:"ri-tourButton ri-tourButton--next",onClick:o,disabled:n||e===0,title:c("nextAnnotation"),children:[ce("span",{children:c("next")}),ce(XE,{size:16})]})]}):ce("button",{className:"ri-navButtonSingle",onClick:i,disabled:e===0,title:c("startGuidedTour"),children:c("guidedTour")})}function Iv({fullscreen:e,disabled:t}){let r=ne();return We("div",{className:"mv-fullscreenWrapper",children:[e.error&&ce("div",{className:"mv-fullscreenError",role:"alert",children:r.message(e.error)}),ce("button",{type:"button",className:"mv-fullscreenButton",onClick:()=>{e.toggle()},disabled:e.pending||t,title:e.active?r("exitFullscreen"):r("enterFullscreen"),"aria-label":e.active?r("exitFullscreen"):r("enterFullscreen"),"aria-pressed":e.active,children:e.active?ce(KE,{}):ce(YE,{})})]})}function Bv({open:e,current:t,disabled:r,onSelect:n,onToggle:i}){let a=ne();return We("div",{className:"mv-controllersWrapper",onPointerDown:o=>o.stopPropagation(),children:[e&&We("div",{className:"mv-controllersMenu",children:[ce("button",{type:"button",className:`mv-controllersMenuItem ${t==="orbit"?"mv-controllersMenuItem--active":""}`,onClick:()=>n("orbit"),children:a("orbitControl")}),ce("button",{type:"button",className:`mv-controllersMenuItem ${t==="pointerLock"?"mv-controllersMenuItem--active":""}`,onClick:()=>n("pointerLock"),children:a("pointLock")})]}),ce("button",{className:"mv-controllersButton",onClick:i,title:a("cameraController"),"aria-label":a("cameraControllerSettings"),disabled:r,children:ce(QE,{size:15})})]})}function Nv({menu:e,recording:t,hasScene:r,canCaptureImage:n,canRecord:i,hasCinematic:a}){let o=ne(),{isDownloading:s,downloadMenuOpen:c,uvExportError:l,toggleDownloadMenu:d,handleDownloadMesh:u,handleDownloadScreenshot:p,handleDownloadUvLayout:h,handleDownloadVideo:m,videoFormat:g,setVideoFormat:f,videoExportError:y}=e;return We("div",{className:"mv-downloadWrapper",onPointerDown:x=>x.stopPropagation(),children:[c&&We("div",{className:"mv-downloadMenu",children:[We("button",{className:"mv-downloadMenuItem",onClick:u,disabled:s||t||!r,children:[ce(GE,{size:14}),o("downloadGLB")]}),ce("div",{className:"mv-downloadMenuDivider"}),n&&We(Ca,{children:[We("button",{className:"mv-downloadMenuItem",onClick:p,disabled:t||!r,children:[ce(HE,{size:14}),o("downloadPNG")]}),ce("div",{className:"mv-downloadMenuDivider"})]}),We("button",{className:"mv-downloadMenuItem",onClick:h,disabled:t||!r,children:[ce($E,{size:14}),o("downloadUVLayout")]}),ce("div",{className:"mv-downloadMenuDivider"}),We("label",{className:"mv-downloadMenuItem",children:[o("videoFormat"),We("select",{"aria-label":o("videoFormat"),value:g,onChange:x=>f(x.target.value),children:[ce("option",{value:"auto",children:o("auto")}),ce("option",{value:"webm",disabled:!Vr("webm"),children:"WebM"}),ce("option",{value:"mp4",disabled:!Vr("mp4"),children:"MP4"}),ce("option",{value:"gif",disabled:!Vr("gif"),children:"GIF"})]})]}),We("button",{className:"mv-downloadMenuItem",onClick:()=>{m("turntable")},disabled:t||!i||!Vr(g),children:[ce(Av,{size:14}),o("recordTurntableVideo")]}),a&&We("button",{className:"mv-downloadMenuItem",onClick:()=>{m("cinematic")},disabled:t||!i||!Vr(g),children:[ce(Av,{size:14}),o("recordCinematicVideo")]}),!Vr()&&!Vr("gif")&&ce("div",{className:"mv-downloadMenuNotice",role:"status",children:o("videoUnsupported")}),y&&ce("div",{className:"mv-downloadMenuNotice",role:"alert",children:o.message(y)}),l&&ce("div",{className:"mv-downloadMenuNotice",role:"status","aria-live":"polite",children:o.message(l)})]}),ce("button",{className:"mv-downloadButton",onClick:d,disabled:s||t||!r,title:o("downloadOptions"),children:s?We(Ca,{children:[ce("span",{className:"mv-downloadButton__spinner"}),o("exporting")]}):We(Ca,{children:[ce(qE,{size:15}),o("download")]})})]})}function zv({x:e,y:t,form:r,setForm:n,onOk:i,onCancel:a}){let o=ne();return We("div",{className:"ri-annotationPopup",style:{left:e,top:t},onPointerDown:s=>s.stopPropagation(),onClick:s=>s.stopPropagation(),children:[ce("input",{autoFocus:!0,className:"ri-annotationInput",placeholder:o("annotationTitlePlaceholder"),value:r.title,onChange:s=>n(c=>({...c,title:s.target.value})),onKeyDown:s=>{s.key==="Enter"&&i(),s.key==="Escape"&&a()}}),ce("textarea",{className:"ri-annotationTextarea",placeholder:o("description"),value:r.description,onChange:s=>n(c=>({...c,description:s.target.value})),onKeyDown:s=>{s.key==="Escape"&&a()},rows:5}),We("div",{className:"ri-annotationActions",children:[ce("button",{onClick:i,className:`ri-annotationOkBtn ${r.title.trim()?"":"disabled"}`,disabled:!r.title.trim(),children:o("ok")}),ce("button",{onClick:a,className:"ri-annotationCancelBtn",children:o("cancel")}),ce("div",{className:"ri-annotationIcons"})]})]})}import{QRCodeSVG as ZE}from"qrcode.react";import{Box as eA,Expand as tA,FlipVertical2 as rA,Grid3X3 as nA,Pause as iA,Play as oA,QrCode as aA,RectangleGoggles as sA,Slice as lA,Smartphone as jv,Square as cA,X as uA}from"lucide-react";import{jsx as Me,jsxs as gr}from"react/jsx-runtime";function Vv({top:e,xrStore:t,arSupported:r,vrSupported:n,quickLookSupported:i,mobileHandoffUrl:a,mobileHandoffOpen:o,onQuickLook:s,onOpenMobileHandoff:c}){let l=ne();return gr("div",{className:"ri-xrTools",style:{top:`${e}px`},children:[!r&&i&&gr("button",{type:"button",className:"ri-xrButton",onClick:s,title:l("viewThisModelInARWithAppleQuickLook"),children:[Me(eA,{size:16}),l("viewInAR")]}),a&&gr("button",{type:"button",className:"ri-xrButton",onClick:c,title:l("openThisExperienceOnAPhoneForAR"),"aria-haspopup":"dialog","aria-expanded":o,children:[Me(aA,{size:16}),Me("span",{children:l("openOnPhone")})]}),t&&r&&gr("button",{type:"button",className:"ri-xrButton",onClick:()=>t.enterAR().catch(d=>{console.error("Failed to enter AR session:",d)}),title:l("viewThisModelInYourSpace"),children:[Me(jv,{size:16}),Me("span",{children:l("enterAR")})]}),t&&n&&gr("button",{type:"button",className:"ri-xrButton",onClick:()=>t.enterVR().catch(d=>{console.error("Failed to enter VR session:",d)}),title:l("viewThisModelInVR"),children:[Me(sA,{size:16}),Me("span",{children:l("enterVR")})]})]})}function Fv({url:e,onClose:t}){let r=ne();return Me("div",{className:"ri-mobileHandoffBackdrop",onMouseDown:n=>{n.target===n.currentTarget&&t()},children:gr("section",{className:"ri-mobileHandoffDialog",role:"dialog","aria-modal":"true","aria-labelledby":"ri-mobileHandoffTitle",children:[Me("button",{type:"button",className:"ri-mobileHandoffClose",onClick:t,"aria-label":r("closePhoneHandoff"),children:Me(uA,{size:18})}),Me(jv,{size:22,"aria-hidden":"true"}),Me("h2",{id:"ri-mobileHandoffTitle",children:r("viewInAR")}),Me("p",{children:r("arScanCode")}),Me("div",{className:"ri-mobileHandoffQr",children:Me(ZE,{value:e,size:208,level:"M",marginSize:4,title:r("qrCodeToOpenThisModelOnAPhone")})})]})})}function Uv({top:e,active:t,onToggle:r}){let n=ne();return Me("div",{className:"ri-uvCheckerTools",style:{top:`${e}px`},children:Me("button",{type:"button",className:`ri-measureButton ${t?"ri-measureButton--active":""}`,onClick:r,title:n(t?"disableUVChecker":"enableUVChecker"),"aria-label":n(t?"disableUVChecker":"enableUVChecker"),"aria-pressed":t,children:Me(nA,{size:16})})})}function Gv({top:e,open:t,factor:r,onToggleOpen:n,onFactorChange:i}){let a=ne();return gr("div",{className:"ri-explodeTools",style:{top:`${e}px`},children:[Me("button",{type:"button",className:`ri-measureButton ${t||r>0?"ri-measureButton--active":""}`,onClick:n,title:a("explodedView"),"aria-pressed":t,children:Me(tA,{size:16})}),t&&Me("div",{className:"ri-explodeSlider",onPointerDown:o=>o.stopPropagation(),children:Me("input",{type:"range",min:0,max:100,value:Math.round(r*100),onChange:o=>i(Number(o.target.value)/100),"aria-label":a("explodeAmount")})})]})}function Hv({top:e,section:t,onChange:r}){let n=ne();return gr("div",{className:"ri-sectionTools",style:{top:`${e}px`},children:[Me("button",{type:"button",className:`ri-measureButton ${t.enabled?"ri-measureButton--active":""}`,onClick:()=>r({enabled:!t.enabled}),title:t.enabled?n("removeSectionCut"):n("sectionCut"),"aria-label":n("sectionCut"),"aria-pressed":t.enabled,children:Me(lA,{size:16})}),t.enabled&&gr("div",{className:"ri-sectionPanel",onPointerDown:i=>i.stopPropagation(),children:[Me("div",{className:"ri-sectionAxes",role:"group","aria-label":n("sectionAxis"),children:_m.map(i=>Me("button",{type:"button",className:`ri-sectionAxis ${t.axis===i?"ri-sectionAxis--active":""}`,"aria-pressed":t.axis===i,onClick:()=>r({axis:i}),children:i.toUpperCase()},i))}),Me("input",{type:"range",min:0,max:100,value:Math.round(t.position*100),onChange:i=>r({position:Number(i.target.value)/100}),"aria-label":n("sectionPosition")}),Me("button",{type:"button",className:`ri-sectionAxis ${t.flip?"ri-sectionAxis--active":""}`,"aria-pressed":t.flip,"aria-label":n("keepTheOtherSide"),title:n("keepTheOtherSide"),onClick:()=>r({flip:!t.flip}),children:Me(rA,{size:14})})]})]})}function Wv({top:e,playing:t,disabled:r,onPlay:n,onPause:i,onStop:a}){let o=ne();return gr("div",{className:"ri-cinematicTools",style:{top:`${e}px`},children:[Me("button",{type:"button",className:`ri-measureButton ${t?"ri-measureButton--active":""}`,disabled:r,onClick:t?i:n,title:o(t?"pauseCinematic":"playCinematic"),"aria-pressed":t,children:t?Me(iA,{size:16}):Me(oA,{size:16})}),t&&Me("button",{type:"button",className:"ri-measureButton ri-measureButton--stop",onClick:a,title:o("stopCinematicAndResetCamera"),children:Me(cA,{size:16})})]})}function Xv({progress:e,onCancel:t}){let r=ne();return Me("div",{className:"ri-recordingOverlay",onPointerDown:n=>n.stopPropagation(),children:gr("div",{className:"ri-isolationPill",role:"status","aria-live":"polite",children:[Me("span",{className:"ri-isolationPill__label",children:r("recordingVideo",{progress:e})}),Me("button",{type:"button",className:"ri-isolationPill__button",onClick:t,children:r("cancel")})]})})}function qv(e){let t={total:0,missing:0};return e.traverse(r=>{let n=r;!n.isMesh||!n.geometry||(t.total+=1,n.geometry.getAttribute("uv")||(t.missing+=1))}),t}import{Box3 as Ta,PerspectiveCamera as $v,Sphere as dA,Vector3 as co}from"three";function Yv(e,t,r){let n=t?.camera;if(!(n instanceof $v))return null;let a=(e instanceof Ta?e:new Ta().setFromObject(e)).getSize(new co).length();return!Number.isFinite(a)||a<=0?null:(n.near=a/100,n.far=a*100,n.updateProjectionMatrix(),t&&r===void 0&&(t.maxDistance=a*10),a)}function Kv(e,t){let r=e.camera;if(!(r instanceof $v)||!(t>0))return;let n=Math.min(Math.max(e.distance/200,t/1e5),t/100);Math.abs(n-r.near)<=r.near*.01||(r.near=n,r.updateProjectionMatrix())}var Fl={paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5},_a={kind:"model"};function Qv(e,t){let r=new Ta().setFromObject(t);return r.isEmpty()?!1:(r.expandByScalar(r.getSize(new co).length()*.05),r.containsPoint(e.getTarget(new co)))}function Jv(e,t){return e.getTarget(new co).distanceTo(t)<=Math.max(e.distance,1)*.001}async function up(e,t,r=.6){let n=e.smoothTime;e.smoothTime=Ei(e,r);try{return await t()}finally{e.smoothTime=n}}async function Zv(e,t,{flyIn:r,onStart:n,invalidate:i}){if(r){let a=(t instanceof Ta?t:new Ta().setFromObject(t)).getBoundingSphere(new dA),o=a.center.clone(),c=e.getPosition(new co).clone().sub(e.getTarget(new co));c.lengthSq()<1e-6&&c.set(0,0,1),c.normalize();let l=Math.max(a.radius*10,20),d=o.clone().add(c.multiplyScalar(l));await e.setLookAt(d.x,d.y,d.z,o.x,o.y,o.z,!1)}n(),await up(e,()=>e.fitToBox(t,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),await new Promise(a=>{let o=performance.now(),s=()=>{e.active===!1||performance.now()-o>8e3?(e.dispatchEvent({type:"update"}),i(),a()):(i(),setTimeout(s,100))};setTimeout(s,100)})}import{useEffect as pA}from"react";function e0({enabled:e,canvasAreaElement:t,fitAttemptedRef:r,fitInFlightRef:n,controlsRef:i,cameraFramingRef:a,nodeRefsMap:o,fitScene:s}){pA(()=>{if(!e)return;let c=t;if(!c)return;let l=null,d=new ResizeObserver(()=>{!r.current||n.current||(l&&clearTimeout(l),l=setTimeout(()=>{let u=i.current,p=a.current;if(p.kind==="view"&&u){if(Jv(u,p.target))return}else if(p.kind==="object"&&u){let h=o.current[p.key];if(h&&Qv(u,h)){u.fitToBox(h,!0,Fl).catch(()=>{});return}}s()},150))});return d.observe(c),()=>{d.disconnect(),l&&clearTimeout(l)}},[t,s,e])}import{Fragment as wA,jsx as q,jsxs as An}from"react/jsx-runtime";var n0=Object.freeze({});function xA(e){let t=qm(e),r=bs(t.modelUrl,t.tilesetUrl),n=ge(r);n.current=r;let i=ge(null),a=ge(null),o=he(()=>{let g=a.current;g&&(i.current=g.snapshot())},[]),s=jf(o),c=Uf(e),[l,d]=ue(null);Be(()=>()=>{l&&URL.revokeObjectURL(l)},[l]);let u=()=>{o();let g=n.current;a.current?.captureFrame().then(f=>{f&&(g===n.current?d(f):URL.revokeObjectURL(f))})};mn(()=>{i.current=null,d(null)},[r]);let p=ge(null),h=hm({loading:t.loading,reveal:t.reveal,rootRef:p,onPark:u}),{release:m}=s;return Be(()=>{h.live||m()},[h.live,m]),q(em,{labels:e.labels,children:q("div",{className:"ri-viewerSlot",ref:p,children:h.live?q(vA,{...t,contextRecovery:s,engagement:c,resumeRef:i,viewerHandleRef:a,offscreen:!h.visible,frame:l},s.generation):q(mm,{className:"ri-viewer",background:$c(t.backgroundColor,t.sceneConfig),poster:l??t.poster,onReveal:h.awaitingReveal?h.reveal:void 0})})})}function vA({labels:e,contextRecovery:t,engagement:r,modelUrl:n,tilesetUrl:i,tilesErrorTarget:a=8,tilesCacheSize:o=800,onObjectCatalog:s,modelFormat:c,licenseKey:l,licenseValidationUrl:d,objectBindings:u="auto",selectedObject:p,panelHoveredObject:h,onObjectBindingsChange:m,onObjectSelect:g,onObjectHover:f,onObjectDoubleClick:y,onObjectContextMenu:x,decalMove:v,onObjectEditLeaseChange:C,onSceneLoaded:P,onModelLoaded:b,onLoadError:E,onProgress:T,onCameraControllerChange:_,cameraControllerType:M,onAction:S,onHiddenObjectsChange:A,onCameraChange:D,onViewerReady:k,onTextureUpload:I,onAnimationsReady:R,onAnnotationsChange:V,activeAnnotation:L,onActiveAnnotationChange:O,camera:G,cameraLimits:le,backgroundColor:H,shadows:be=!0,showObjectBindingDataPanel:De=!0,customObjectBindingDataPanel:Z,customSceneObjectsPanel:ye,showSceneObjectsPanel:me=!0,showDownloadButton:je=!0,downloadFilename:lt="model",showResetButton:fe=!0,showFullscreenButton:Te=!1,showLoadingOverlay:Oe=!0,showMouseController:pt=!1,mouseControllerPosition:Y="center-bottom",mouseControllerOpacity:$t=1,moveSensitivity:Je=.08,zoomSensitivity:Ue=1,sceneConfig:$,onSceneConfigChange:pe,disableZoom:Ze=!1,zoomOnSelected:Ve=!0,highlightOnHover:Fe=!0,enableCameraControls:ae=!0,onAutoFit:ie,refitOnResize:rt=!0,renderMode:Le="demand",maxDpr:nt=2,preserveDrawingBuffer:W=!1,webgpu:re=!1,performanceProfile:se="auto",dracoDecoderPath:xe,ktx2TranscoderPath:Ie,meshopt:Ee=!0,showMeasureTools:Ce=!1,showUvCheckerButton:Q=!1,showExplodeControls:ve=!1,showMaterialVariants:ke=!0,showObjectNavigator:ht=!0,showSectionTools:Yt=!1,isolation:mt,onIsolationChange:Pt,showIsolateControls:br=!1,cinematic:Et,measurementUnit:Rn="m",enableXR:uo=!1,usdzUrl:Mt,arScaleMode:yr="normalized",mobileHandoffUrl:B,showAnnotationNavigation:z=!0,showAnnotationOnHover:j=!1,showAnnotationFilters:X=!0,annotationCategories:U,onAnnotationCategoriesChange:J,moveModeEnabled:te=!1,objectTransformSpace:it="world",enableKeyboardNavigation:_e=!1,reducedMotion:Ye="user",showViewGizmo:Ge=!1,overlay:Ke,unsafe_sceneChildren:oe,autoRotate:et,autoRotateSpeed:St,onTexturePositioningChange:At,endTexturePositioningRef:Zt,texturePositioning:Rt,poster:kt,resumeRef:ai,viewerHandleRef:Wl,offscreen:s0,frame:pp}){let Dt=ne(),hp=bs(n,i),[Ct]=ue(()=>ai.current?.model===hp?ai.current:null),po=Vm(Ye);Be(()=>()=>r.interrupt(),[r]);let mp=ge(r);mp.current=r;let ho=u==="auto",Pa=ho?n0:u,{isInsideEditor:Xl,activeTab:ql,activeSubTab:$l}=is(),l0=Xl&&ql==="scene"&&$l==="Lighting",Ea=gf(l,d),[Yl,c0]=ue(()=>Ct?.lightEdits??{}),[Aa,fp]=ue(Ct?.variantEdit),[Ra,gp]=ue(Ct?.sectionEdit),Pe=Vt(()=>{let w=iu($??Pm,Yl);return Aa!==void 0&&(w={...w,model:Gc(w.model,Aa)}),Ra!==void 0&&(w={...w,section:{..._o,...w.section,...Ra}}),w},[$,Yl,Aa,Ra]),mo=ge(Pe);mo.current=Pe;let Kl=Vt(()=>_i(Pe.model),[Pe.model]);Be(()=>{r.setActiveVariants(Kl)},[Kl,r]);let u0=$?_i($.model).join(`
28
+ `):"";mn(()=>{fp(void 0)},[u0,n]);let d0=JSON.stringify($?.section??null);mn(()=>{gp(void 0)},[d0,n]);let bp=he(w=>{if(pe){let N=mo.current;pe({...N,section:{..._o,...N.section,...w}});return}gp(N=>({...N,...w}))},[pe]),[yp,p0]=ue(!1),xp=ge([]),h0=he(w=>{let N=mo.current,F=_i(N.model),K=xp.current,ee=K.find(Ne=>Ne.variants.some(tt=>tt.name===w)),Re=F.find(Ne=>ee?ee.variants.some(tt=>tt.name===Ne):Ne===w)??null,ot=F.includes(w)?F.filter(Ne=>Ne!==w):Dm(F,w,K);if(r.chooseVariant(ot.includes(w)?w:null,Re,ee?.name??null),pe){pe({...N,model:Gc(N.model,ot)});return}fp(ot)},[pe,r]),Ql=he(w=>{if(pe){pe(iu(mo.current,w));return}c0(N=>{let F={...N};for(let[K,ee]of Object.entries(w))F[K]={...N[K],...ee};return F})},[pe]),[Jl,Zl]=ue(null),[ec,vp]=ue(null),[wp,Mp]=ue(null),Sp=ge(0),[tc,Cp]=ue(null),[Tp,_p]=ue(Ct?.uvCheckerOverride??null),fo=Pe.model.renderer==="uv-checker",rc=Q?Tp??fo:fo,kn=Vt(()=>{let w=rc?"uv-checker":fo?"pbr":Pe.model.renderer;return w===Pe.model.renderer?Pe:{...Pe,model:{...Pe.model,renderer:w}}},[fo,Pe,rc]);mn(()=>{_p(null)},[n,Pe.model.renderer,Q,i]);let Pp=Vt(()=>$c(H,Pe),[H,Pe]),Ep=Vt(()=>({dracoDecoderPath:xe,ktx2TranscoderPath:Ie,meshopt:Ee}),[xe,Ie,Ee]),m0=Vt(()=>pm(se),[se]),Ae=ge(null),[Ap,f0]=ue(()=>Ct&&Ct.cameraControllerType!=="pointerLock"?Ct.cameraControllerType:"orbit"),[g0,Rp]=ue(!1),Dn=M!==void 0?M:Ap,ka=he(w=>{Rp(!1),w!==Dn&&(f0(w),_?.(w))},[Dn,_]),[Da,kp]=ue(!1),[It,La]=ue(null),go=!!(Rt||At||Zt),Dp=ge(At);Dp.current=At,Be(()=>{Dp.current?.(It)},[It]),Be(()=>{if(Zt)return Zt.current=()=>La(null),()=>{Zt.current=null}},[]),Be(()=>{Ae.current&&(Ae.current.dollySpeed=Math.max(Ue,0))},[Ue]),Be(()=>{Ae.current&&(Ae.current.enabled=ae&&!Da&&!yp&&!It)},[ae,Da,yp,It]);let Lp=ge(null),Op=ge(new Map),Ip=ge(null),b0=ge(null),er=ge(null),Bp=ge({});Be(()=>()=>{for(let w of Object.values(Bp.current))URL.revokeObjectURL(w)},[]);let Ft=ge({}),si=ge(_a),[,y0]=ue(0),Np=he(()=>{y0(w=>w+1)},[]),Oa=ge({}),zp=ge(null),Ia=Bf(Te),xr=ge(null),[nc,x0]=ue(null),v0=he(w=>{xr.current=w,x0(w)},[]);gv({canvasAreaElement:nc,controlsRef:Ae,enabled:_e&&ae&&!te});let ic=ge(null),[jp,Vp]=ue(()=>Ct?.objectBindings??Pa),[li,Ba]=ue({}),[Fp,oc]=ue(null),[ac,sc]=ue(null),[w0,M0]=ue(null),[S0,C0]=ue(null),[sr,Up]=ue(null),[T0,_0]=ue({}),Ut=ge(null),Na=ge(null),lc=ge(0),Gp=ge(null),[P0,E0]=ue(0),vr=ge(!1),bo=ge(!1),cc=ge(!!G);cc.current=!!G;let wr=ge(null),za=ge(Ct?.camera?{camera:Ct.camera,home:Ct.home}:null),[ja,ci]=ue(!!n),[Ln,ui]=ue(!n||!!ie||!!G),[Kt,Hp]=ue(!1),[uc,Wp]=ue([]),[Xp,dc]=ue(!1),[A0,pc]=ue(null),[qp,yo]=ue(!1),[R0,k0]=ue(0),hc=ge(""),$p=ge(""),[Yp,Kp]=ue(!1),[mc,D0]=ue(null),[L0,Qp]=ue(!1),[fc,Jp]=ue({total:0,missing:0}),[O0,Zp]=ue("loadingModel"),[I0,gc]=ue(null),nn=ge({}),di=he(()=>{let w=Ae.current;!w||wr.current||(wr.current=ma(w))},[]),[Va,eh]=ue(()=>Ct?.explodeFactor??0),[B0,th]=ue(!1);mn(()=>{eh(0),th(!1)},[n,i]);let On=Vt(()=>{let w=Pe.cinematic,N=w?.enabled?{waypoints:w.waypoints,duration:w.duration,loop:w.loop,autoPlay:w.autoPlay}:null;return Et===void 0?N&&(N.waypoints?.length??0)>=2?N:null:Et===!1?null:Et===!0?N??{}:{...N??{},...Et}},[Et,Pe]),[rh,Qt]=ue(!1),[N0,In]=ue(!1),bc=ge(!1);Be(()=>{Qt(!1),In(!1),bc.current=!1},[n,i]),Be(()=>{if(!(!On?.autoPlay||bc.current)&&Kt&&Ln&&!ja){if(bc.current=!0,po)return;Qt(!0),In(!1)}},[On,Kt,Ln,ja,po]);let z0=he(()=>{Qt(!1),In(!0)},[]),{captureVideo:yc,cancelVideo:xc,isRecording:nh,recording:Tt,progress:j0,onProgress:V0}=If({rendererCaptureRef:er,controlsRef:Ae,cinematicConfig:On,ready:t.status==="ready"&&Kt&&Ln&&!ja,modelUrl:`${n}|${i??""}`,onCaptureStart:z0});Be(()=>{t.status==="lost"&&(r.interrupt(),xc(),Qt(!1),Ae.current?.stop())},[t.status,xc,r]);let{xrStore:F0,presenterRef:U0,arSupported:ih,vrSupported:oh,quickLookSupported:ah,resolvedMobileHandoffUrl:Fa,isMobileHandoffOpen:sh,arOverlay:G0,openMobileHandoff:H0,closeMobileHandoff:W0,openQuickLook:X0,handleARStateChange:q0}=Vg({enableXR:uo,usdzUrl:Mt,mobileHandoffUrl:B,engagement:r}),pi=nm(re),lh=ge(pi);lh.current=pi;let hi=pi==="webgpu",Ua=hi?null:F0,ch=Yt||Pe.section?.enabled===!0;Be(()=>{if(!hi)return;let w=[ch&&"the section cut",te&&"the move gizmo"].filter(Boolean);w.length!==0&&console.info(`[react-immersive] With WebGPU, ${w.join(" and ")} ${w.length>1?"aren't":"isn't"} available; ${w.length>1?"they need":"it needs"} WebGL.`)},[hi,ch,te]);let{annotations:CA,pendingAnnotation:Bn,setPendingAnnotation:uh,annotationForm:$0,setAnnotationForm:vc,currentAnnotationIndex:Y0,isNavigating:K0,localAnnotationCategories:Q0,selectedAnnotationCategories:J0,visibleAnnotations:Z0,availableAnnotationCategories:ew,annotationFiltersVisible:wc,changeAnnotationCategories:tw,sortedAnnotations:Mc,currentAnnotation:rw,setActiveAnnotation:TA,focusAnnotation:_A,startGuidedTour:nw,goToPreviousAnnotation:iw,goToNextAnnotation:ow,stopGuidedTour:aw,closeViewingAnnotation:Sc,activeAnnotation:PA,activeViewingAnnotation:Cc,isGuidedTourActive:Tc,handleAnnotationOk:sw,handleAnnotationCancel:lw,handleAnnotationMarkerClick:cw}=dv({sceneAnnotations:$?.annotations,controlledAnnotationCategories:U,onAnnotationCategoriesChange:J,showAnnotationFilters:X,initialCategories:Ct?.annotationCategories??null,controlledActiveAnnotation:L,onActiveAnnotationChange:O,onAnnotationsChange:V,controlsRef:Ae,sceneRef:Ut,annotationWorldPositionsRef:Op,tourCameraOffsetRef:Lp,initialCameraStateRef:wr,engagement:r,engagementRef:mp}),uw=Pe.section??_o,dh=ke&&Kt&&uc.length>0;xp.current=uc;let ph=fe||je||Te&&Ia.supported||z&&Mc.length>0,mi=!ho&&m!==void 0,we=mi?Pa:jp;nn.current=we,Be(()=>{if(!It)return;let w=we[It.objectKey]?.style?.material?.[It.textureKey]?.path;(!go||!w)&&La(null)},[we,go,It]);let _c=ge({}),[Ga,dw]=ue({});Be(()=>{let w={...Ga},N=!1,F=new Set;for(let[K,ee]of Object.entries(we)){F.add(K);let Re=ee.style?.material,ot=_c.current[K]??{},Ne={};for(let ft of cn){let cr=Re?.[ft]?.path;cr&&(Ne[ft]=cr,cr!==ot[ft]&&(w[K]!==ft&&(N=!0),w[K]=ft))}let tt=w[K];if(tt&&!Ne[tt]){let ft=cn.find(cr=>!!Ne[cr]);ft?w[K]=ft:delete w[K],N=!0}_c.current[K]=Ne}for(let K of Object.keys(w))F.has(K)||(delete w[K],delete _c.current[K],N=!0);N&&dw(w)},[we]);let pw=Vt(()=>Object.entries(we).map(([w,N])=>JSON.stringify([w,N.modelObjectId,N.transform??null])).sort().join(""),[we]),{measureMode:Nn,measureModeRef:hh,measurePoints:mh,measurementTool:fh,areaClosed:gh,measurementError:hw,selectMeasurementTool:mw,undoMeasurementPoint:fw,finishMeasureArea:gw,snapMode:bw,setSnapMode:yw,snapPreview:xw,handleMeasurePointerMove:vw,clearSnapPreview:bh,showDimensions:yh,measureBox:Pc,modelBounds:ww,refreshBounds:xh,clearMeasurements:Mw,toggleMeasureMode:Sw,toggleDimensions:Cw,handleMeasurePointerDown:Tw,handleMeasureClick:_w}=Bg({canvasAreaRef:xr,controlsRef:Ae,sceneRef:Ut,modelUrl:`${n}|${i??""}`,modelRotation:Pe.model.rotation,bindingTransformSignature:pw,modelLoaded:Kt,enabled:Ce&&!Tt}),[Pw,Ew]=ue(34),Aw=Pg({sceneRef:Ut,materialRefs:Oa,rendererCaptureRef:er,objectBindings:we,downloadFilename:lt,captureVideo:yc}),vh=Vt(()=>Object.fromEntries(Object.entries(we).filter(([,w])=>w.visible===!1).map(([w])=>[w,!0])),[we]),on=Vt(()=>{let w=new WeakMap,N=new Map,F=new Map;for(let[K,ee]of Object.entries(we))w.set(ee,K),N.has(ee.id)||N.set(ee.id,K),F.has(ee.modelObjectId)||F.set(ee.modelObjectId,K);return{byReference:w,byId:N,byModelObjectId:F}},[we]),lr=he(w=>w?on.byReference.get(w)??on.byModelObjectId.get(w.modelObjectId)??on.byId.get(w.id)??null:null,[on]),Ec=p!==void 0,zn=Ec?p??null:S0,Qe=lr(zn);Be(()=>{r.setSelectedPart(Qe)},[Qe,r]);let Ac=Qe?Ft.current[Qe]??null:null,Rw=Qe?Ga[Qe]:void 0,wh=lr(Fe?h??ac??w0:null),kw=wh?Ft.current[wh]??null:null,Mh=he(w=>{M0(w),f?.(w)},[f]),Sh=De&&zn!==null&&Qe!==null,jn=(Qe?we[Qe]:null)??zn,xo=jn&&(jn.modelObjectId||jn.id)||null,vo=xo?T0[xo]??null:null,[Dw,Ch]=ue(""),Th=ge(null);Be(()=>{let w=Th.current;if(w!==Qe)if(Th.current=Qe,Qe){let N=jn?.label||zn?.label||Qe;Ch(Dt("objectSelected",{name:N}))}else w&&Ch(Dt("selectionCleared"))},[Qe,jn,zn,Dt]),mn(()=>{mi||Vp(Pa)},[mi,Pa]),Be(()=>{A?.(vh)},[vh,A]);let fi=he((w,N)=>{if(Dn==="pointerLock"){ka("orbit");return}w&&N?r.viewPart({objectId:w.id,objectKey:lr(w)??(w.modelObjectId||w.id),label:w.label,source:N}):w||r.setSelectedPart(null),Ec||C0(w),g?.(w)},[Dn,ka,Ec,g,lr,r]),Lr=he(w=>{mi||Vp(w),m?.(w)},[mi,m]),_h=ge(Ct?.objectBindings?`${n}
29
+ ${i??""}`:null),Ha=he((w,N)=>{if(!ho)return;let F=`${n}
30
+ ${i??""}`,K=_h.current===F?nn.current:n0;_h.current=F;let ee=Um(w,N);for(let Re of Object.keys(ee))K[Re]&&(ee[Re]=K[Re]);Lr(ee)},[ho,n,i,Lr]),{glowMemoryRef:Ph,readObjectGlow:Wa,applyGlow:Rc}=Pv({nodeRefsMap:Ft,currentObjectBindingsRef:nn,applyObjectBindings:Lr}),Lw=he(w=>{let N=Qe;if(!N||!w)return;let F=nn.current[N];F&&Lr({...nn.current,[N]:{...F,transform:{...F.transform,...w}}})},[Lr,Qe]),an=he((w,N)=>we[w]?w:N?lr(N):on.byId.get(w)??on.byModelObjectId.get(w)??null,[we,lr,on]),Xa=he((w,N)=>{let F=an(w),K=F?we[F]:void 0;!F||!K||Lr({...we,[F]:{...K,style:N(K.style)}})},[an,we,Lr]),Mr=he(()=>{if(sr){let w=li[sr.objectId]?.hex;w!==void 0&&(Xa(sr.objectId,N=>({...N,material:{...N?.material,baseColor:w}})),Ba(N=>({...N,[sr.objectId]:{}})))}Up(null)},[sr,li,Xa]),kc=he(()=>{fi(null),oc(null),Mr()},[fi,Mr]),Ow=he((w,N,F,K,ee)=>{let Re=zp.current,ot=xr.current,Ne=Ae.current?.camera;if(!Re)return{objectId:w,x:24,y:24};let tt=Re.getBoundingClientRect(),ft=12,cr=tt.width-N-ft,vi=tt.height-F-ft,ln=Math.max(ft,(tt.width-N)/2),Mo=Math.max(ft,(tt.height-F)/2),wi=an(w,K),So=wi?Ft.current[wi]:null,Sr=(Mi,Vn)=>Vn<=ft?ft:Math.min(Math.max(Mi,ft),Vn);if(ot&&Ne&&So){let Mi=ot.getBoundingClientRect(),Vn=new r0;new fA().setFromObject(So).getCenter(Vn),Vn.project(Ne);let o1=(Vn.x+1)/2*Mi.width+(Mi.left-tt.left),a1=(1-Vn.y)/2*Mi.height+(Mi.top-tt.top);return{objectId:w,x:Sr(o1+24,cr),y:Sr(a1-F/2,vi)}}let Nc=typeof ee?.screenX=="number"?ee.screenX-tt.left:ln,zc=typeof ee?.screenY=="number"?ee.screenY-tt.top:Mo;return{objectId:w,x:Sr(Nc,cr),y:Sr(zc,vi)}},[an]),qa=Ev({setCurrentAction:oc,bindingKeyIndex:on,currentObjectBindings:we,applyObjectBindings:Lr,resolveObjectKey:an,closeColorPicker:Mr,setColorPicker:Up,setMaterialPopupsByObject:_0,setItemMaterials:Ba,getPopoverPosition:Ow,decalRequestRef:Sp,setDecalError:Mp,setDecalDragging:Cp,setDecalControl:vp,resolvedSceneConfigRef:mo,applyLightPatches:Ql,readObjectGlow:Wa,applyGlow:Rc,glowMemoryRef:Ph,setLightControl:Zl,onAction:S});Be(()=>{if(sr)return window.addEventListener("pointerdown",Mr),()=>window.removeEventListener("pointerdown",Mr)},[sr,Mr]),Be(()=>{if(!Cc)return;let w=N=>{if(ic.current&&!ic.current.contains(N.target)){if(N.target.closest?.(".ri-annotationMarker"))return;Sc()}};return document.addEventListener("mousedown",w),document.addEventListener("touchstart",w),()=>{document.removeEventListener("mousedown",w),document.removeEventListener("touchstart",w)}},[Cc,Sc]),Be(()=>{if(!Bn)return;let w=N=>{let F=N.target;if(F.closest?.(".ri-annotationPopup")||F.closest?.("button, input, textarea, .ri-measureTools, .ri-xrTools, .ri-buttonContainer"))return;let K=xr.current;!K||!K.contains(F)||(uh(null),vc({title:"",description:""}))};return document.addEventListener("mousedown",w,!0),document.addEventListener("touchstart",w,!0),()=>{document.removeEventListener("mousedown",w,!0),document.removeEventListener("touchstart",w,!0)}},[Bn]);let{handleFileChange:Iw,triggerFileUpload:Eh,clearTexture:Ah,texturePositioningEnabled:Bw,texturePositioningOverrides:Nw,setMaterialTextureOffset:zw,setMaterialTextureRotation:jw,endMaterialTexturePositioning:Vw}=Tv({applyBindingStyle:Xa,resolveObjectKey:an,onTextureUpload:I,fileInputRef:Ip,pendingObjectId:b0,createdBlobUrls:Bp,texturePositioning:Rt,setMoveZoomTarget:La}),Dc=ge(k);Dc.current=k;let tr=he(()=>{let w=Ae.current;!w||!Dc.current||Dc.current({objectBindings:nn.current,homeCameraState:wr.current,captureImage:N=>nh()?Promise.reject(new Error("Wait for video export to finish before capturing an image.")):ps(er.current,N),captureVideo:yc,invalidate:()=>er.current?.invalidate(),rendererBackend:lh.current??"webgl",raw:{controls:w,scene:Ut.current,nodes:Ft.current}})},[yc,nh]),wo=he(async(w=!1)=>{let N=Ae.current,F=Na.current??Ut.current;if(!N||!F)return!1;si.current=_a;try{return await Zv(N,F,{flyIn:w,onStart:()=>ui(!0),invalidate:()=>er.current?.invalidate()}),vr.current=!0,di(),tr(),!0}catch(K){return console.error("Fit scene error:",K),!1}},[di,tr]);Be(()=>{if(vr.current=!1,bo.current=!1,wr.current=null,Ut.current=null,Na.current=null,Hp(!1),Wp([]),dc(!1),pc(null),yo(!1),hc.current="",Jp({total:0,missing:0}),Zp("loadingModel"),gc(null),Ct?.model!==bs(n,i)&&(za.current=null),!n){ci(!1),ui(!0);return}ci(!0),ui(!!ie||cc.current);let w=!1,N=null,F=ee=>{N=setTimeout(K,ee)},K=()=>{if(w||vr.current||bo.current)return;let ee=Na.current??Ut.current;if(!Ae.current||!ee){F(100);return}lc.current=Yv(ee,Ae.current,le?.maxDistance)??lc.current;let Re=za.current;if(Re){za.current=null,Vf(Ae.current,Re.camera),vr.current=!0,Re.home?wr.current=Re.home:di(),tr(),ci(!1),ui(!0),er.current?.invalidate();return}if($m(Ae.current)){vr.current=!0,di(),tr(),ci(!1),ui(!0),er.current?.invalidate();return}bo.current=!0,(ie?ie():cc.current?Promise.resolve(!0):wo(!0)).then(Ne=>{vr.current=Ne!==!1,vr.current?(di(),tr(),ci(!1)):w||F(100)}).catch(()=>{vr.current=!1,w||F(100)}).finally(()=>{bo.current=!1})};return F(50),()=>{w=!0,N&&clearTimeout(N)}},[di,le?.maxDistance,wo,n,tr,ie,Ct,i]),e0({enabled:rt,canvasAreaElement:nc,fitAttemptedRef:vr,fitInFlightRef:bo,controlsRef:Ae,cameraFramingRef:si,nodeRefsMap:Ft,fitScene:wo});let $a=he(w=>{let N=Ae.current;if(!N)return;let F=w.cameraState;if(F?.position&&F?.target){let[Re,ot,Ne]=F.position,tt=new r0(...F.target);N.setPosition(Re,ot,Ne,!0),N.setTarget(tt.x,tt.y,tt.z,!0),si.current={kind:"view",target:tt};return}let K=lr(w),ee=K?Ft.current[K]:null;!K||!ee||(N.fitToBox(ee,!0,Fl).catch(()=>{}),si.current={kind:"object",key:K})},[lr]);Be(()=>{Qe||(si.current=_a)},[Qe]);let Lc=he((w,N="canvas")=>{hh.current||(Qt(!1),Mr(),oc(null),fi(w,N),!(Ze||!Ve)&&$a(w))},[fi,Mr,$a,Ze,Ve]),{beginMoveZoom:Rh,handleMoveZoomPointerDown:Fw}=yv({moveZoomTarget:It,setMoveZoomTarget:La,currentObjectBindingsRef:nn,materialRefsOut:Oa,rendererCaptureRef:er,canvasAreaRef:xr,canvasAreaElement:nc,applyBindingStyle:Xa}),kh=he(w=>{if(!go)return!1;let N=lr(w);if(!N)return!1;let F=Ga[N];return F?(Rh({objectKey:N,textureKey:F}),!0):!1},[go,lr,Ga,Rh]),Oc=ge(!1),{editDecals:AA,activeDecalMove:gi,addCenteredDecal:RA,decalSizeFor:Uw,startImageDecal:kA,decalControlHandlers:Gw}=mv({currentObjectBindings:we,currentObjectBindingsRef:nn,applyObjectBindings:Lr,nodeRefsMap:Ft,controlsRef:Ae,decalMove:v,decalDragging:tc,setDecalDragging:Cp,setDecalError:Mp,setDecalControl:vp,decalRequestRef:Sp,onTextureUpload:I,currentPanelObjectId:xo,modelUrl:n}),Dh=Vt(()=>Nm(we,kn.styleRules),[we,kn.styleRules]),[Lh,Oh]=ue(()=>Ct?.isolation??null);mn(()=>{Oh(null)},[n]);let bi=mt!==void 0?mt:Lh,Ic=he(w=>{mt===void 0&&Oh(w),Pt?.(w)},[mt,Pt]),Or=Vt(()=>jm(Dh,bi),[Dh,bi]),Ir=Vt(()=>Or.setAside.size>0?zm(we,bi):null,[Or,we,bi]),Hw=he(w=>{let N=lr(w),F=N!==null&&Ir?.size===1&&Ir.has(N);Ic(F?null:{...bi,target:w.id})},[Ic,bi,Ir]),{sourceOf:sn}=Or,Ww=Vt(()=>ht?jx(we,Or):[],[ht,we,Or]),Ih=he(w=>{let N=sn(w);Lc(N)},[Lc,sn]),Bh=he(w=>Mh(w&&sn(w)),[Mh,sn]),Nh=he((w,N)=>{let F=sn(w);return y?.({binding:F,...N})===!0?(Oc.current=!0,!0):kh(F)},[y,kh,sn]),zh=Vt(()=>x?(w,N)=>x({binding:sn(w),...N}):void 0,[x,sn]),jh=he(w=>{fi(w,"panel"),!Ze&&$a(w)},[fi,$a,Ze]);Be(()=>{tr()},[tr,we]);let Vh=he((w,N)=>{Kv(N,lc.current),D?.(Br(w,N)),tr()},[tr,D]),Xw=he(w=>{Gp.current=new Set(w.map(N=>N.name)),E0(N=>N+1),Ha(w.map(N=>N.name)),s?.(w)},[Ha,s]),qw=he(w=>{Na.current=w,er.current?.invalidate()},[]),Fh=he(w=>{Ut.current=w,xh(w),Jp(qv(w));let N=rm(w);D0(N>Vc?N:null),Qp(!1),gc(null),N>Vc&&Zp("preparingLargeModel"),Hp(!0),Wp(Lm(w)),dc(!1),pc(null),Kp(!1),i||(s&&s(nx(w)),Ha(Hm(w),Gm(w))),P?.(w),b?.(Bm(w)),tr()},[Ha,tr,b,s,P,xh,i]),Uh=he(w=>{ci(!1),ui(!0),dc(!0),pc(w),E?.(w)},[E]),$w=he(w=>{w.lengthComputable&&w.total>0&&gc(w.loaded/w.total*100),T?.(w)},[T]),Gh=he((w,N,F)=>{if(!pe)return;let K={...Pe,lighting:{...Pe.lighting,lights:Pe.lighting.lights.map(ee=>ee.id===w?{...ee,position:N,...F?{rotation:F}:{}}:ee)}};pe(K)},[Pe,pe]);Be(()=>{let w=Ut.current;if(!Kt||!w){yo(!1);return}let N=Object.entries(we);if(N.length===0){yo(!1);return}let F=i?Gp.current:new Set(Object.keys(Ti(w).nodesById));if(!F||F.size===0){yo(!1);return}let K=N.map(([Re,ot])=>ot.modelObjectId??Re).filter(Re=>!F.has(Re));yo(K.length>0),k0(K.length);let ee=K.join(`
31
+ `);if(K.length>0&&ee!==hc.current){let Re=K.slice(0,10).map(Ne=>`"${Ne}"`).join(", "),ot=K.length>10?` and ${K.length-10} more`:"";console.warn(`[react-immersive] ${K.length} object binding(s) point at nodes this model doesn't have, so they can't be selected: ${Re}${ot}. Each binding's modelObjectId (or its key) must match a node name; log onObjectCatalog to see this model's names.`)}hc.current=ee},[Kt,we,P0,i]),Be(()=>{if(S||Xl)return;let w=[];for(let[F,K]of Object.entries(we))for(let ee of K.actions??[])Uc.includes(ee.id)||w.push(`"${ee.id}" on "${K.label??F}"`);let N=w.join(`
32
+ `);if(w.length>0&&N!==$p.current){let F=w.slice(0,10).join(", "),K=w.length>10?` and ${w.length-10} more`:"";console.warn(`[react-immersive] ${w.length} action button(s) do nothing because ModelViewer has no onAction handler: ${F}${K}. ModelViewer itself handles ${Uc.join(", ")}; handle other ids in onAction, or pass useViewerActions().handleAction to run their effects.`)}$p.current=N},[we,Xl,S]);let Bc=he(async()=>{if(Ae.current&&wr.current&&ga(Ae.current,wr.current),ie){await ie();return}let w=Ae.current;if(!w)return;let N=wr.current;try{N?(si.current=_a,await up(w,()=>w.setLookAt(N.position[0],N.position[1],N.position[2],N.target[0],N.target[1],N.target[2],!0))):await wo()}catch(F){console.error("Reset camera error:",F)}},[ie,wo]),DA=he(()=>{In(!1),Qt(!0)},[]),LA=he(()=>{Qt(!1)},[]),Yw=he(()=>{Qt(!1),In(!0),setTimeout(()=>{Bc()},100)},[Bc]),Kw=he((w,N)=>{Vh(w,N)},[Vh]),Qw=he(w=>{if(hh.current)return;if(Oc.current){Oc.current=!1;return}let N=ql==="scene"&&$l==="Annotations";if(w.target.closest("button, input, textarea, .ri-colorPicker, .ri-materialPicker, .ri-annotationPopup, .ri-annotationMarker, .ri-viewAnnotationPopup"))return;let K=xr.current,ee=Ae.current,Re=ee?.camera,ot=Ut.current;if(!K||!ee||!Re||!ot||!N&&!ee.enabled)return;let Ne=K.getBoundingClientRect(),tt=(w.clientX-Ne.left)/Ne.width*2-1,ft=-((w.clientY-Ne.top)/Ne.height)*2+1,cr=new gA;cr.setFromCamera(new bA(tt,ft),Re);let vi=cr.intersectObject(ot,!0);if(vi.length===0)return;if(!N){let{x:Sr,y:Nc,z:zc}=vi[0].point;ee.setOrbitPoint(Sr,Nc,zc);return}let ln=vi[0],Mo=ln.point,wi=ot.worldToLocal(ln.point.clone()),So=[0,0,1];if(ln.face){let Sr=ln.face.normal.clone().transformDirection(ln.object.matrixWorld).normalize();So=[Sr.x,Sr.y,Sr.z]}uh({worldPosition:[Mo.x,Mo.y,Mo.z],localPosition:[wi.x,wi.y,wi.z],worldNormal:So,anchor:lv(ln),screenX:w.clientX-Ne.left,screenY:w.clientY-Ne.top}),vc({title:"",description:""})},[ql,$l]);if(Be(()=>{Wl.current={snapshot:()=>{let w=Ae.current,N=za.current;return{model:hp,camera:vr.current&&w?ma(w):N?.camera,home:wr.current??N?.home,lightEdits:Yl,variantEdit:Aa,sectionEdit:Ra,isolation:Lh,objectBindings:mi?void 0:jp,explodeFactor:Va,cameraControllerType:Ap,uvCheckerOverride:Tp,annotationCategories:Q0}},captureFrame:()=>{let w=er.current;return!w||t.status!=="ready"||!Kt||!Ln?Promise.resolve(null):lm(w)}}}),Be(()=>()=>{Wl.current=null},[Wl]),Ea.status==="checking"){let w=pp??kt;return w?q("div",{className:"ri-viewer ri-viewerPlaceholder",style:{background:Pp},children:q(Fc,{src:w})}):q("div",{className:"ri-viewer ri-viewer--license-checking",children:q(rs,{title:Dt("verifyingLicense"),message:Dt("checkingYourLicenseKey")})})}if(Ea.status==="invalid")return q("div",{className:"ri-viewer ri-viewer--license-invalid",children:q(rs,{tone:"error",title:Dt("invalidLicense"),message:Ea.isLocalDomain?Ea.reason??Dt("licenseHasBeenRevokedOrHasExpired"):Dt("failedToLoadPleaseContactTheSiteAdministrator")})});let{materialTextureUrl:Hh,materialTargetTakesImage:Wh,materialTextureOffset:Xh,materialTextureRotationDegrees:qh,isMaterialTexturePositioning:$h,materialTextureOnOffsetChange:Yh,materialTextureOnRotationChange:Kh,materialTextureOnEndPositioning:Qh}=_v({materialPopup:vo,resolveObjectKey:an,currentObjectBindings:we,nodeRefsMap:Ft,moveZoomTarget:It,texturePositioningEnabled:Bw,texturePositioningOverrides:Nw,setMaterialTextureOffset:zw,setMaterialTextureRotation:jw,endMaterialTexturePositioning:Vw}),Jw=xr.current?.offsetWidth??600,Zw=xr.current?.offsetHeight??400,e1=350,t1=290,r1=Bn?Math.min(Bn.screenX+12,Jw-e1-8):0,n1=Bn?Math.min(Bn.screenY,Zw-t1-8):0,i1=Oe&&!!n&&!Xp&&!Kt,yi=uo&&(Ua&&(ih||oh)||ah||!!Fa),Jh=(yi?1:0)+(Q?1:0),xi=w=>16+w*42+(Ce&&w>Jh?Math.max(0,Pw-34):0);return An("div",{className:"ri-viewer",ref:Ia.rootRef,style:{background:Pp},"data-reduced-motion":po?"":void 0,children:[q("div",{className:"ri-visuallyHidden",role:"status","aria-atomic":"true",children:Dw}),t.status!=="ready"&&q(Cv,{rebuilding:t.status==="rebuilding",onReload:t.reload}),An("div",{className:"ri-viewerLeft",ref:zp,inert:t.status!=="ready",children:[Z?Z({isOpen:Sh,selectedObject:jn,currentAction:Fp,onClose:kc,onAction:qa}):q(Xd,{translateDefaultActions:ho,isOpen:Sh,selectedObject:jn,currentAction:Fp,onClose:kc,onAction:qa,renderActionExtra:w=>{if(w==="change-color"&&sr)return q(Fd,{inline:!0,colorPicker:sr,onClose:Mr,itemMaterials:li,setItemMaterials:Ba});if((w==="change-light-color"||w==="set-brightness")&&Jl?.kind===w&&Jl.objectId===xo){let N=Jl,F=N.target,K=F.type==="lights"?Pe.lighting.lights.find(ee=>ee.id===F.lightIds[0])?.color??"#ffffff":Vl(Wa(F.objectKey).color);return q(qf,{kind:N.kind,color:K,brightness:N.percent,onColorChange:ee=>{if(F.type==="lights"){Ql(Object.fromEntries(F.lightIds.map(ot=>[ot,{color:ee}])));return}let Re=Wa(F.objectKey);Rc(F.objectKey,{emissive:ee,emissiveIntensity:Re.intensity>0?Re.intensity:Ph.current[F.objectKey]??1})},onBrightnessChange:ee=>{if(Zl({...N,percent:ee}),F.type==="lights"){Ql(Object.fromEntries(F.lightIds.map(Re=>[Re,{intensity:(F.baseIntensity[Re]??0)*(ee/100)}])));return}Rc(F.objectKey,{emissive:Vl(Wa(F.objectKey).color),emissiveIntensity:F.baseIntensity*(ee/100)})},onClose:()=>Zl(null)})}if((w==="add-text"||w==="add-image")&&ec?.kind===w&&ec.objectId===xo){let N=ec,F=an(N.objectId);if(!F)return null;let K=w==="add-image";return q(Zf,{kind:w,decals:(we[F]?.decals??[]).filter(ee=>!!ee.image===K),activeId:N.activeId,error:wp?Dt.message(wp):null,moving:tc?.objectKey===F&&tc.decalId===N.activeId,defaultSize:Uw(F),...Gw(N,F)})}return w==="change-material"&&vo?q(Ud,{inline:!0,triggerFileUpload:Eh,materialPopup:vo,textureUrl:Hh,clearTexture:Ah,canPlaceImage:Wh,offset:Xh,rotationDegrees:qh,onOffsetChange:Yh,onRotationChange:Kh,isPositioning:$h,onEndPositioning:Qh}):null}}),An("div",{className:`ri-canvasArea ${Nn?"ri-canvasArea--measuring":""} ${Ln?"":"ri-canvasArea--positioning"} ${te?"ri-canvasArea--moveMode":""}`,ref:v0,tabIndex:_e?0:void 0,role:_e?"group":void 0,"aria-label":_e?Dt("cameraKeyboardHelp"):void 0,onDoubleClick:Qw,onPointerDown:w=>{if(_e&&xr.current?.focus({preventScroll:!0}),It){Fw(w);return}Tw(w)},onClick:It?void 0:_w,onPointerMove:vw,onPointerLeave:bh,onWheel:bh,children:[Kt&&!Nn&&t.status==="ready"?q(Xx,{objects:Ww,selectedKey:Qe,onHighlight:sc,onSelect:w=>Lc(w,"keyboard"),onClearSelection:kc}):null,go&&!i&&(It||Rw)&&q("div",{className:"ri-moveZoomHint",role:"status",style:{position:"absolute",top:12,left:"50%",transform:"translateX(-50%)",zIndex:5,padding:"6px 12px",borderRadius:999,fontSize:12,fontWeight:500,color:"#fff",background:It?"rgba(37, 99, 235, 0.92)":"rgba(0, 0, 0, 0.6)",pointerEvents:"none",whiteSpace:"nowrap"},children:Dt(It?"texturePositioningHint":"texturePositioningStartHint")}),qp&&!Yp&&q(vv,{count:R0,onDismiss:()=>Kp(!0)}),mc!==null&&!L0&&q(wv,{triangles:mc,offset:qp&&!Yp,onDismiss:()=>Qp(!0)}),kn.model.renderer==="uv-checker"&&fc.missing>0&&q(Mv,{missing:fc.missing,total:fc.total}),q("input",{ref:Ip,type:"file",accept:"image/png,image/jpeg,image/webp",className:"ri-hiddenInput",onChange:Iw}),q(Oi,{onError:t.fail,children:pi?An(Eu,{backend:pi,onRendererCreated:t.onRendererCreated,suspended:t.status!=="ready",paused:s0&&!Tt,camera:G,backgroundColor:H,shadows:be&&Pe.shadows.enabled,sceneConfig:kn,selectedObjectRef:Ac,hoveredObjectRef:kw,highlightOnHover:Fe,renderMode:Le,maxDpr:nt,reduceGpuLoad:m0,xrStore:Ua,rendererCaptureRef:er,preserveDrawingBuffer:W,children:[q(ku,{lightingConfig:Pe.lighting,shadowConfig:Pe.shadows,shadowsEnabled:be,environmentRotation:Pe.environment.rotation,environmentConfig:Pe.environment,modelBounds:ww,objectBindings:we,nodeRefs:Ft}),l0&&Pe.lighting.lights.map(w=>!w.visible||w.type==="none"||w.type==="hemisphere"||w.attachment?null:q(ov,{light:w,position:w.position,rotation:w.rotation,color:w.color,intensity:w.intensity,visible:w.visible,onPositionChange:N=>Gh(w.id,N,w.rotation),onRotationChange:N=>Gh(w.id,w.position,N),onDraggingChange:kp},w.id)),q(Id,{setAside:Or.setAside,nodeRefs:Ft}),!hi&&q(Vd,{section:Pe.section??_o,box:Pc,modelRef:Ut,showHandle:Yt,onPositionChange:w=>bp({position:w}),onDraggingChange:p0}),q(Au,{controlsRef:Ae,onCameraChange:Kw,cameraLimits:le,controllerType:Dn,onPointerLockExit:()=>ka("orbit"),reducedMotion:po}),q(lp,{enabled:Tt||Nn||gi||po||Dn==="pointerLock"?!1:et??Pe.model.autoRotate??!1,speed:St??Pe.model.autoRotateSpeed??1,controlsRef:Ae}),Ge&&!Tt&&q(hA,{alignment:"top-right",margin:[80,80],renderPriority:2,onUpdate:()=>{Ae.current?.update(0),er.current?.invalidate()},children:q(mA,{axisColors:["#ff3653","#8adb00","#2c8fff"],labelColor:"white"})}),te&&!hi&&Ac&&Qe&&q(rp,{node:Ac,space:it,onTransformChange:Lw,onDraggingChange:w=>{kp(w),zn&&C?.(zn,w)}},Qe),gi&&q(xg,{target:gi,nodes:Ft,controls:Ae}),q(cs,{onLoadError:Uh,children:q(t0,{fallback:null,children:(()=>{let w=An(wA,{children:[i?q(Md,{url:i,rotation:kn.model.rotation,errorTarget:a,cacheSize:o,decoderConfig:Ep,objectBindings:Or.bindings,itemMaterials:li,sceneConfig:kn,selectedItem:Qe,panelHoveredItem:h??ac,highlightOnHover:Fe,onItemClick:Ih,onItemHover:Bh,onItemDoubleClick:Nh,onItemContextMenu:zh,onObjectCatalog:Xw,onTilesetBounds:qw,onModelLoaded:Fh,onLoadError:Uh,nodeRefsOut:Ft,onNodeRefsChange:Np,materialRefsOut:Oa,explodeFactor:Va,suspendBindingTransforms:Da}):q(Lu,{url:n,modelFormat:c,objectBindings:Or.bindings,selectedItem:Qe,itemMaterials:li,onItemClick:Ih,onItemDoubleClick:Nh,onItemContextMenu:zh,onItemHover:Bh,onModelLoaded:Fh,onAnimationsReady:R,nodeRefsOut:Ft,onNodeRefsChange:Np,materialRefsOut:Oa,panelHoveredItem:h??ac,sceneConfig:kn,zoomOnSelected:Ve,highlightOnHover:Fe,decoderConfig:Ep,onLoadProgress:$w,explodeFactor:Va,suspendBindingTransforms:Da,pulses:Or.pulses}),q(Ad,{annotations:Z0,sceneConfig:Pe,activeAnnotation:Cc,popupRef:ic,canvasRootRef:xr,worldPositionsRef:Op,modelLoaded:Kt,onAnnotationClick:cw,onCloseAnnotation:Sc,hideCloseButton:Tc,showAnnotationOnHover:j}),q(op,{annotation:rw,enabled:Tc&&!Tt,controlsRef:Ae,offsetRef:Lp}),Tt?q(ms,{controlsRef:Ae,sceneRef:Ut,config:Tt.config,playing:!0,resetOnPlay:!0,playOnce:!0,startAtPath:!0,onStarted:Tt.onStarted,onFinished:Tt.onFinished,onProgress:V0},"video-export"):On&&q(ms,{controlsRef:Ae,sceneRef:Ut,config:On,playing:rh&&!Nn,resetOnPlay:N0,onFinished:()=>{Qt(!1),In(!1)},onUserInteract:()=>{Qt(!1)}},"cinematic-preview"),Ce&&q(Dd,{points:mh,unit:Rn,box:Pc,showDimensions:yh,tool:fh,areaClosed:gh,snapPreview:Nn?xw:null})]});return Ua?q(Sx,{ref:U0,box:Pc,scaleMode:yr,onARStateChange:q0,children:w}):w})()})},i??n),oe&&q(t0,{fallback:null,children:oe})]}):null}),q(Fc,{src:pp??kt,hidden:Kt&&Ln}),Ke&&q("div",{className:"ri-overlay",children:Ke}),Oe&&n&&Xp&&q(Sv,{failure:Gf(A0,i||n,i?void 0:c,e),source:i||n}),q(Fm,{visible:i1,message:Dt(O0,{millions:Math.round((mc??0)/1e6)}),progress:I0??void 0}),yi&&q(Vv,{top:xi(0),xrStore:Ua,arSupported:ih,vrSupported:oh,quickLookSupported:ah,mobileHandoffUrl:Fa,mobileHandoffOpen:sh,onQuickLook:X0,onOpenMobileHandoff:H0}),G0,sh&&Fa&&q(Fv,{url:Fa,onClose:W0}),Q&&q(Uv,{top:xi(yi?1:0),active:rc,onToggle:()=>_p(w=>!(w??fo))}),Ce&&q(Ld,{top:xi(Jh),active:Nn,disabled:!!Tt,tool:fh,snap:bw,pointCount:mh.length,areaClosed:gh,error:hw,showDimensions:yh,onToggle:()=>{Qt(!1),Sw()},onTool:mw,onSnap:yw,onUndo:fw,onClear:Mw,onFinishArea:gw,onDimensions:Cw,onHeight:Ew}),ve&&q(Gv,{top:xi((yi?1:0)+(Q?1:0)+(Ce?1:0)),open:B0,factor:Va,onToggleOpen:()=>th(w=>!w),onFactorChange:eh}),Yt&&!hi&&q(Hv,{top:xi((yi?1:0)+(Q?1:0)+(Ce?1:0)+(ve?1:0)),section:uw,onChange:bp}),On&&q(Wv,{top:xi((yi?1:0)+(Q?1:0)+(Ce?1:0)+(ve?1:0)+(Yt?1:0)),playing:rh,disabled:!!Tt||Nn,onPlay:()=>{In(!1),Qt(!0)},onPause:()=>Qt(!1),onStop:Yw}),Tt&&q(Xv,{progress:j0,onCancel:xc}),(wc||dh||gi||br&&Ir)&&An("div",{className:`ri-bottomStack ${ph?"ri-bottomStack--aboveButtons":""} ${wc?"ri-bottomStack--annotationFilters":""}`,children:[wc&&q(Rv,{categories:ew,selected:J0,disabled:!!Tt,onChange:tw}),gi&&q(kv,{onCancel:gi.onCancel}),br&&Ir&&q(Dv,{label:Ir.size===1?Dt("isolatedObject",{name:(()=>{let[w]=Ir;return we[w]?.label??w})()}):Dt("isolatedObjects",{count:Ir.size}),onShowAll:()=>Ic(null)}),dh&&q(Lv,{groups:uc,activeVariants:Kl,onSelect:h0})]}),ph&&An("div",{className:"ri-buttonContainer",children:[q("div",{className:"ri-tourControls",children:z&&Mc.length>0&&q(Ov,{count:Mc.length,active:Tc,index:Y0,navigating:K0,onStart:nw,onPrevious:iw,onNext:ow,onStop:aw})}),An("div",{className:"mv-rightControls",children:[Te&&Ia.supported&&q(Iv,{fullscreen:Ia,disabled:!!Tt}),fe&&q("button",{className:"mv-resetButton",onClick:Bc,disabled:!!Tt,title:Dt("resetCameraView"),children:q(yA,{})}),q(Bv,{open:g0,current:Dn,disabled:!!Tt,onSelect:ka,onToggle:()=>Rp(w=>!w)}),je&&q(Nv,{menu:Aw,recording:!!Tt,hasScene:!!Ut.current,canCaptureImage:W||pi==="webgpu",canRecord:Kt&&Ln&&!ja,hasCinematic:!!On})]})]}),Bn&&q(zv,{x:r1,y:n1,form:$0,setForm:vc,onOk:sw,onCancel:lw})]}),Z&&sr&&q(Fd,{colorPicker:sr,onClose:Mr,itemMaterials:li,setItemMaterials:Ba}),Z&&vo&&q(Ud,{triggerFileUpload:Eh,materialPopup:vo,textureUrl:Hh,clearTexture:Ah,canPlaceImage:Wh,offset:Xh,rotationDegrees:qh,onOffsetChange:Yh,onRotationChange:Kh,isPositioning:$h,onEndPositioning:Qh})]}),me&&q("div",{className:"ri-viewerRight",inert:t.status!=="ready",children:ye?ye({objectBindings:we,onAction:qa,onFocus:jh,onHover:sc}):q(qd,{objectBindings:we,onAction:qa,onFocus:jh,onHover:sc,isolatedKeys:Ir,onIsolate:br?Hw:void 0})}),pt&&q(Cx,{controlsRef:Ae,enabled:t.status==="ready",opacity:$t,moveSensitivity:Je,position:Y})]})}import{Vector3 as Ul}from"three";var Gl=1e-6;function eU(){let e=[null,null],t=0,r=!1,n=new Ul,i=new Ul,a=new Ul,o=new Ul,s=(l,d)=>{let u=e[l],p=e[d];if(!u||!p)return;u.controls.getPosition(n,!1),u.controls.getTarget(a,!1),p.controls.getPosition(i,!1),p.controls.getTarget(o,!1);let h=u.controls.camera.zoom;if(!(n.distanceToSquared(i)<Gl&&a.distanceToSquared(o)<Gl&&Math.abs(h-p.controls.camera.zoom)<Gl)){r=!0;try{Math.abs(h-p.controls.camera.zoom)>=Gl&&p.controls.zoomTo(h,!1),p.controls.setLookAt(n.x,n.y,n.z,a.x,a.y,a.z,!1)}finally{r=!1}p.invalidate()}},c=l=>{r||(l===t?s(l,1-l):s(t,l))};return{attach(l,d,u){let p=e[l];if(p?.controls===d){p.invalidate=u;return}p?.detach();let h=()=>c(l),m=()=>{t=l};d.addEventListener("update",h),d.addEventListener("controlstart",m),e[l]={controls:d,invalidate:u,detach:()=>{d.removeEventListener("update",h),d.removeEventListener("controlstart",m)}},s(t,1-t)},get leader(){return t},detach(){e.forEach(l=>l?.detach()),e[0]=e[1]=null}}}import{Fragment as MA,jsx as dp,jsxs as a0}from"react/jsx-runtime";var Hl=.05,i0=.2,o0=e=>Math.min(Math.max(Number.isFinite(e)?e:.5,0),1);function nU({split:e,onSplitChange:t,labels:r,containerRef:n,beforeAction:i}){let a=ne(),o=u=>{let p=n.current?.getBoundingClientRect();p&&p.width>0&&t(o0((u-p.left)/p.width))},s=u=>{u.preventDefault(),u.stopPropagation(),u.currentTarget.setPointerCapture(u.pointerId),u.currentTarget.focus(),o(u.clientX)},c=u=>{u.currentTarget.hasPointerCapture(u.pointerId)&&o(u.clientX)},l=u=>{let p={ArrowLeft:e-Hl,ArrowDown:e-Hl,ArrowRight:e+Hl,ArrowUp:e+Hl,PageDown:e-i0,PageUp:e+i0,Home:0,End:1}[u.key];p!==void 0&&(u.preventDefault(),u.stopPropagation(),t(o0(p)))},d=Math.round(e*100);return a0(MA,{children:[a0("span",{className:"ri-compare__label ri-compare__label--before",hidden:e<.08,children:[r[0],i]}),dp("span",{className:"ri-compare__label ri-compare__label--after",hidden:e>.92,children:r[1]}),dp("div",{className:"ri-compare__divider",role:"slider",tabIndex:0,"aria-label":a("compareDivider"),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":d,"aria-valuetext":a("compareDividerValue",{before:r[0],after:r[1],percent:d,rest:100-d}),onPointerDown:s,onPointerMove:c,onKeyDown:l,children:dp("span",{className:"ri-compare__handle","aria-hidden":"true"})})]})}export{rs as a,$c as b,s1 as c,Kf as d,jk as e,lg as f,Vk as g,Fk as h,No as i,wg as j,Cd as k,Ml as l,gf as m,HA as n,I1 as o,is as p,Zd as q,yE as r,nv as s,xf as t,uR as u,Cf as v,_f as w,xA as x,eU as y,o0 as z,nU as A,qA as B};