@liveroom-tech/react-immersive 6.2.1 → 6.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/AnimationsTab-IKAAKT3P.mjs +1 -0
  2. package/dist/AnnotationsTab-NEJIXCOM.mjs +1 -0
  3. package/dist/CinematicTab-TIQXCPFE.mjs +1 -0
  4. package/dist/ConfigureTab-NYRMOFW4.mjs +6 -0
  5. package/dist/RulesTab-2U4MFYOZ.mjs +1 -0
  6. package/dist/SequencesTab-LTMJTB76.mjs +1 -0
  7. package/dist/SequencesTab-O7USMDFP.css +1 -0
  8. package/dist/{StreamingTilesModel-6Z7SIC2J.mjs → StreamingTilesModel-IM2DDWO5.mjs} +1 -1
  9. package/dist/binding-builder.css +1 -1
  10. package/dist/binding-builder.d.mts +3 -3
  11. package/dist/binding-builder.d.ts +3 -3
  12. package/dist/binding-builder.js +45 -45
  13. package/dist/binding-builder.mjs +1 -1
  14. package/dist/{chunk-25WC5KDO.mjs → chunk-2LGQKX6Z.mjs} +1 -1
  15. package/dist/chunk-37QOMZW6.mjs +1 -0
  16. package/dist/chunk-3PLML3PO.mjs +1 -0
  17. package/dist/chunk-5C4H7SRF.mjs +1 -0
  18. package/dist/chunk-IT2PUTJS.mjs +1 -0
  19. package/dist/chunk-LEOHZ5HM.mjs +69 -0
  20. package/dist/chunk-RSUXTWM6.mjs +1 -0
  21. package/dist/{chunk-3OCHN3CA.mjs → chunk-SOAUR4DL.mjs} +1 -1
  22. package/dist/chunk-SXN3YYD3.mjs +1 -0
  23. package/dist/chunk-WU3SQZGD.mjs +3 -0
  24. package/dist/{chunk-UTVFRMYW.mjs → chunk-XKJQC3N5.mjs} +2 -2
  25. package/dist/exportSceneMesh-MSQIMBFF.mjs +1 -0
  26. package/dist/hosted.css +1 -1
  27. package/dist/hosted.d.mts +5 -3
  28. package/dist/hosted.d.ts +5 -3
  29. package/dist/hosted.js +44 -44
  30. package/dist/hosted.mjs +1 -1
  31. package/dist/index.css +1 -1
  32. package/dist/index.d.mts +4 -4
  33. package/dist/index.d.ts +4 -4
  34. package/dist/index.js +42 -42
  35. package/dist/index.mjs +1 -1
  36. package/dist/{modelFileResolver-CVmON8hg.d.mts → modelFileResolver-Bq4pW9vc.d.mts} +39 -29
  37. package/dist/{modelFileResolver-CVmON8hg.d.ts → modelFileResolver-Bq4pW9vc.d.ts} +39 -29
  38. package/dist/{modelViewerProps-CIY4nsNY.d.mts → modelViewerProps-BnrJO5DK.d.ts} +2 -1
  39. package/dist/{modelViewerProps-BBnZTFO-.d.ts → modelViewerProps-wjBT4fks.d.mts} +2 -1
  40. package/dist/{publicProps-BARVwXu7.d.ts → publicProps-BZPMIRwj.d.ts} +1 -1
  41. package/dist/{publicProps-n0Yvr_Km.d.mts → publicProps-CW5X_HFh.d.mts} +1 -1
  42. package/dist/simple-model-viewer.css +1 -1
  43. package/dist/simple-model-viewer.d.mts +2 -2
  44. package/dist/simple-model-viewer.d.ts +2 -2
  45. package/dist/simple-model-viewer.js +5 -5
  46. package/dist/simple-model-viewer.mjs +1 -1
  47. package/dist/utils.d.mts +4 -4
  48. package/dist/utils.d.ts +4 -4
  49. package/dist/utils.js +1 -1
  50. package/dist/utils.mjs +1 -1
  51. package/package.json +1 -1
  52. package/dist/AnimationsTab-NUJTEMZ5.mjs +0 -1
  53. package/dist/AnnotationsTab-OHRVWRKI.mjs +0 -1
  54. package/dist/CinematicTab-IJAY2BS6.mjs +0 -1
  55. package/dist/ConfigureTab-UQRRATCY.mjs +0 -6
  56. package/dist/RulesTab-YVBZGJZX.mjs +0 -1
  57. package/dist/SequencesTab-IC5LWQ6N.css +0 -1
  58. package/dist/SequencesTab-VZKEKAUG.mjs +0 -1
  59. package/dist/chunk-7OVEHDDE.mjs +0 -1
  60. package/dist/chunk-AL6UIGWP.mjs +0 -1
  61. package/dist/chunk-KYXJG3TX.mjs +0 -1
  62. package/dist/chunk-LD7QWHB4.mjs +0 -3
  63. package/dist/chunk-RKDATTUM.mjs +0 -1
  64. package/dist/chunk-UHRJ2RBF.mjs +0 -1
  65. package/dist/chunk-YKDDNX2D.mjs +0 -69
  66. package/dist/exportSceneMesh-YJFOLFHS.mjs +0 -1
@@ -1,4 +1,4 @@
1
- import{b as oe}from"./chunk-NMRTI3NQ.mjs";import{b as ce}from"./chunk-2AJK643D.mjs";import{i as de}from"./chunk-RKDATTUM.mjs";import{a as F,c as le,d as ue}from"./chunk-KFLS7GI6.mjs";import{b as re}from"./chunk-UAZ6I25Y.mjs";import{e as ie,f as se,g as ae}from"./chunk-BNKTI3CY.mjs";import{a as te,e as ne}from"./chunk-RXZ4Q7CY.mjs";var fe;function pe(e){fe=e}function x(e){fe?.(e)}import{strFromU8 as pt,strToU8 as mt,unzip as bt}from"fflate";var gt=[".glb",".gltf",".obj",".fbx",".usdz",".stl",".ply",".zip"],ht=["model/gltf-binary","model/gltf+json","model/vnd.usdz+zip","application/vnd.usdz+zip","application/zip","application/x-zip-compressed"],M=1024*1024,me=128*M,be=1024,ge=128*M,he=256*M,ve=200,vt=M,g=new Map,nr=".glb,.gltf,.obj,.fbx,.usdz,.stl,.ply,.zip,model/gltf-binary,model/gltf+json,model/vnd.usdz+zip,application/vnd.usdz+zip,application/zip";function S(e){let t=e.split(/[?#]/,1)[0].toLowerCase();return t.endsWith(".obj")?"obj":t.endsWith(".fbx")?"fbx":t.endsWith(".usdz")?"usdz":t.endsWith(".stl")?"stl":t.endsWith(".ply")?"ply":t.endsWith(".gltf")?"gltf":"glb"}function Me(e){return g.get(e)??{format:S(e)}}function yt(e){let t=e.name.toLowerCase();return gt.some(n=>t.endsWith(n))||ht.includes(e.type)}async function rr(e){if(!yt(e))throw new Error("Unsupported model file. Please upload a .glb, .gltf, .obj, .fbx, .usdz, .stl, .ply, or .zip asset.");let t=e.name.toLowerCase();if(t.endsWith(".usdz")||e.type==="model/vnd.usdz+zip"||e.type==="application/vnd.usdz+zip")return ye(e,"usdz");if(t.endsWith(".zip")||wt(e.type))return xt(e);if(t.endsWith(".gltf")||e.type==="model/gltf+json")return we(e);let n=S(e.name);return n==="gltf"?we(e):ye(e,n)}function ye(e,t){let n=URL.createObjectURL(e);return g.set(n,{format:t,entryPath:e.name,sourceBytes:e.size}),{url:n,name:e.name,format:t,cleanup:()=>{x(n),g.delete(n),URL.revokeObjectURL(n)}}}function wt(e){return e==="application/zip"||e==="application/x-zip-compressed"}async function we(e){let t=await e.text(),n=Se(t,e.name);for(let o of Ee(n))if(!I(o))throw new Error(`${e.name} references external assets. Upload a .zip containing the .gltf file and its dependencies.`);let r=URL.createObjectURL(e);return g.set(r,{format:"gltf",entryPath:e.name,sourceBytes:e.size}),{url:r,name:e.name,format:"gltf",cleanup:()=>{x(r),g.delete(r),URL.revokeObjectURL(r)}}}async function xt(e){if(e.size>me)throw new Error(`Model zip is too large. The compressed archive must be ${U(me)} or smaller.`);let t=await Mt(new Uint8Array(await e.arrayBuffer())),n=new Map;for(let[i,a]of Object.entries(t)){let l=D(i);!l||Le(l)||n.set(l,a)}let r=[...n.keys()].filter(i=>/\.(gltf|obj|fbx|stl|ply)$/i.test(i));if(r.length===0)throw new Error("Invalid model zip: no .gltf, .obj, .fbx, .stl, or .ply file found.");if(r.length>1)throw new Error("Invalid model zip: multiple model entry files found.");let o=r[0],s=S(o);if(s==="gltf")return Et(e,o,n);if(s==="obj"||s==="fbx"||s==="stl"||s==="ply")return St(e,o,s,n);throw new Error(`Unsupported model entry ${o}.`)}function Mt(e){return new Promise((t,n)=>{let r=0,o=0,s=null,i=l=>(s??(s=new Error(`Invalid model zip: ${l}`)),!1);bt(e,{filter:l=>{if(s)return!1;if(r+=1,r>be)return i(`archive contains more than ${be.toLocaleString()} entries.`);if(l.originalSize>ge)return i(`${l.name} expands beyond the ${U(ge)} per-file limit.`);if(o+=l.originalSize,o>he)return i(`expanded contents exceed ${U(he)}.`);if(l.originalSize>=vt&&(l.size===0||l.originalSize/l.size>ve))return i(`${l.name} exceeds the ${ve}:1 compression-ratio limit.`);let u=D(l.name);return!!u&&!Le(u)}},(l,u)=>{s?n(s):l?n(new Error(`Invalid model zip: ${l.message}`)):t(u)})})}function U(e){return`${e/M} MiB`}function St(e,t,n,r){let o=[],s={};for(let[a,l]of r){let u=URL.createObjectURL(new Blob([l],{type:Pe(a)}));o.push(u),s[a]=u}let i=s[t];if(!i)throw o.forEach(a=>URL.revokeObjectURL(a)),new Error(`Invalid model zip: could not read ${t}.`);return g.set(i,{format:n,entryPath:t,resourceUrls:s}),{url:i,name:e.name,format:n,cleanup:()=>{x(i),g.delete(i),o.forEach(a=>URL.revokeObjectURL(a))}}}function Et(e,t,n){let r=n.get(t);if(!r)throw new Error("Invalid GLTF zip: no .gltf found.");let o=Se(pt(r),t);Lt(o,t);let s=Pt(t),i=[];try{xe(o.buffers,s,n,i),xe(o.images,s,n,i);let a=new Blob([mt(JSON.stringify(o))],{type:"model/gltf+json"}),l=URL.createObjectURL(a);return i.push(l),g.set(l,{format:"gltf",entryPath:t}),{url:l,name:e.name,format:"gltf",cleanup:()=>{x(l),g.delete(l),i.forEach(u=>URL.revokeObjectURL(u))}}}catch(a){throw i.forEach(l=>URL.revokeObjectURL(l)),a}}function xe(e,t,n,r){for(let o of e??[]){if(typeof o.uri!="string"||I(o.uri))continue;let s=Rt(t,o.uri),i=n.get(s);if(!i)throw new Error(`Invalid GLTF zip: missing referenced asset ${o.uri}.`);let a=URL.createObjectURL(new Blob([i],{type:Pe(s)}));r.push(a),o.uri=a}}function Se(e,t){try{return JSON.parse(e)}catch{throw new Error(`${t} is not a valid .gltf JSON file.`)}}function Ee(e){return[...e.buffers??[],...e.images??[]].map(t=>t.uri).filter(t=>typeof t=="string"&&t.length>0)}function Lt(e,t){for(let n of Ee(e)){if(I(n))continue;let r=/^[a-z][a-z0-9+.-]*:/i.test(n),o=n.startsWith("/")||n.startsWith("\\");if(r||o)throw new Error(`${t} references external assets. Include every dependency inside the uploaded .zip.`)}}function I(e){return e.startsWith("data:")}function D(e){let t=[];for(let n of e.replace(/\\/g,"/").replace(/^\/+/,"").split("/").filter(r=>r&&r!==".")){if(n===".."){t.pop();continue}t.push(n)}return t.join("/")}function Le(e){let t=e.split("/");return e.endsWith("/")||t.includes("__MACOSX")||t.some(n=>n===".DS_Store"||n.startsWith("._"))}function Pt(e){let t=e.lastIndexOf("/");return t===-1?"":e.slice(0,t)}function Rt(e,t){let n=t.split(/[?#]/)[0],r=At(n);return D(e?`${e}/${r}`:r)}function At(e){try{return decodeURI(e)}catch{return e}}function Pe(e){let t=e.toLowerCase();return t.endsWith(".obj")||t.endsWith(".mtl")?"text/plain":t.endsWith(".fbx")?"application/octet-stream":t.endsWith(".usdz")?"model/vnd.usdz+zip":t.endsWith(".bin")?"application/octet-stream":t.endsWith(".png")?"image/png":t.endsWith(".jpg")||t.endsWith(".jpeg")?"image/jpeg":t.endsWith(".webp")?"image/webp":t.endsWith(".avif")?"image/avif":t.endsWith(".ktx2")?"image/ktx2":"application/octet-stream"}import{useEffect as j,useMemo as zt,useRef as Ct,useState as Ot}from"react";import{Box3 as Ce,Color as G,DoubleSide as kt,ShaderMaterial as Bt,Vector3 as Tt}from"three";import{useThree as Ft}from"@react-three/fiber";var Re="riEditorGizmo",N=new WeakMap;function Ae(e){return e.userData[Re]=!0,e}function ar(e,t){let n=N.get(e);return n||(n=new Set,N.set(e,n)),n.add(t),()=>{n.delete(t)}}function lr(e){let t=[],n=r=>{r.visible=!1,t.push(r)};return e.traverse(r=>{r.visible&&r.userData[Re]&&n(r)}),N.get(e)?.forEach(r=>{r.visible&&n(r)}),()=>{for(let r of t)r.visible=!0}}function ze(e){return!Number.isFinite(e)||e<=0?1:10**Math.floor(Math.log10(e/10))}import{jsx as Oe}from"react/jsx-runtime";var Ut=`
1
+ import{b as oe}from"./chunk-NMRTI3NQ.mjs";import{b as ce}from"./chunk-2AJK643D.mjs";import{k as de}from"./chunk-5C4H7SRF.mjs";import{a as F,c as le,d as ue}from"./chunk-KFLS7GI6.mjs";import{b as re}from"./chunk-UAZ6I25Y.mjs";import{e as ie,f as se,g as ae}from"./chunk-BNKTI3CY.mjs";import{a as te,e as ne}from"./chunk-RXZ4Q7CY.mjs";var fe;function pe(e){fe=e}function x(e){fe?.(e)}import{strFromU8 as pt,strToU8 as mt,unzip as bt}from"fflate";var gt=[".glb",".gltf",".obj",".fbx",".usdz",".stl",".ply",".zip"],ht=["model/gltf-binary","model/gltf+json","model/vnd.usdz+zip","application/vnd.usdz+zip","application/zip","application/x-zip-compressed"],M=1024*1024,me=128*M,be=1024,ge=128*M,he=256*M,ve=200,vt=M,g=new Map,rr=".glb,.gltf,.obj,.fbx,.usdz,.stl,.ply,.zip,model/gltf-binary,model/gltf+json,model/vnd.usdz+zip,application/vnd.usdz+zip,application/zip";function S(e){let t=e.split(/[?#]/,1)[0].toLowerCase();return t.endsWith(".obj")?"obj":t.endsWith(".fbx")?"fbx":t.endsWith(".usdz")?"usdz":t.endsWith(".stl")?"stl":t.endsWith(".ply")?"ply":t.endsWith(".gltf")?"gltf":"glb"}function Me(e){return g.get(e)??{format:S(e)}}function yt(e){let t=e.name.toLowerCase();return gt.some(n=>t.endsWith(n))||ht.includes(e.type)}async function or(e){if(!yt(e))throw new Error("Unsupported model file. Please upload a .glb, .gltf, .obj, .fbx, .usdz, .stl, .ply, or .zip asset.");let t=e.name.toLowerCase();if(t.endsWith(".usdz")||e.type==="model/vnd.usdz+zip"||e.type==="application/vnd.usdz+zip")return ye(e,"usdz");if(t.endsWith(".zip")||wt(e.type))return xt(e);if(t.endsWith(".gltf")||e.type==="model/gltf+json")return we(e);let n=S(e.name);return n==="gltf"?we(e):ye(e,n)}function ye(e,t){let n=URL.createObjectURL(e);return g.set(n,{format:t,entryPath:e.name,sourceBytes:e.size}),{url:n,name:e.name,format:t,cleanup:()=>{x(n),g.delete(n),URL.revokeObjectURL(n)}}}function wt(e){return e==="application/zip"||e==="application/x-zip-compressed"}async function we(e){let t=await e.text(),n=Se(t,e.name);for(let o of Ee(n))if(!I(o))throw new Error(`${e.name} references external assets. Upload a .zip containing the .gltf file and its dependencies.`);let r=URL.createObjectURL(e);return g.set(r,{format:"gltf",entryPath:e.name,sourceBytes:e.size}),{url:r,name:e.name,format:"gltf",cleanup:()=>{x(r),g.delete(r),URL.revokeObjectURL(r)}}}async function xt(e){if(e.size>me)throw new Error(`Model zip is too large. The compressed archive must be ${U(me)} or smaller.`);let t=await Mt(new Uint8Array(await e.arrayBuffer())),n=new Map;for(let[i,a]of Object.entries(t)){let l=D(i);!l||Le(l)||n.set(l,a)}let r=[...n.keys()].filter(i=>/\.(gltf|obj|fbx|stl|ply)$/i.test(i));if(r.length===0)throw new Error("Invalid model zip: no .gltf, .obj, .fbx, .stl, or .ply file found.");if(r.length>1)throw new Error("Invalid model zip: multiple model entry files found.");let o=r[0],s=S(o);if(s==="gltf")return Et(e,o,n);if(s==="obj"||s==="fbx"||s==="stl"||s==="ply")return St(e,o,s,n);throw new Error(`Unsupported model entry ${o}.`)}function Mt(e){return new Promise((t,n)=>{let r=0,o=0,s=null,i=l=>(s??(s=new Error(`Invalid model zip: ${l}`)),!1);bt(e,{filter:l=>{if(s)return!1;if(r+=1,r>be)return i(`archive contains more than ${be.toLocaleString()} entries.`);if(l.originalSize>ge)return i(`${l.name} expands beyond the ${U(ge)} per-file limit.`);if(o+=l.originalSize,o>he)return i(`expanded contents exceed ${U(he)}.`);if(l.originalSize>=vt&&(l.size===0||l.originalSize/l.size>ve))return i(`${l.name} exceeds the ${ve}:1 compression-ratio limit.`);let u=D(l.name);return!!u&&!Le(u)}},(l,u)=>{s?n(s):l?n(new Error(`Invalid model zip: ${l.message}`)):t(u)})})}function U(e){return`${e/M} MiB`}function St(e,t,n,r){let o=[],s={};for(let[a,l]of r){let u=URL.createObjectURL(new Blob([l],{type:Pe(a)}));o.push(u),s[a]=u}let i=s[t];if(!i)throw o.forEach(a=>URL.revokeObjectURL(a)),new Error(`Invalid model zip: could not read ${t}.`);return g.set(i,{format:n,entryPath:t,resourceUrls:s}),{url:i,name:e.name,format:n,cleanup:()=>{x(i),g.delete(i),o.forEach(a=>URL.revokeObjectURL(a))}}}function Et(e,t,n){let r=n.get(t);if(!r)throw new Error("Invalid GLTF zip: no .gltf found.");let o=Se(pt(r),t);Lt(o,t);let s=Pt(t),i=[];try{xe(o.buffers,s,n,i),xe(o.images,s,n,i);let a=new Blob([mt(JSON.stringify(o))],{type:"model/gltf+json"}),l=URL.createObjectURL(a);return i.push(l),g.set(l,{format:"gltf",entryPath:t}),{url:l,name:e.name,format:"gltf",cleanup:()=>{x(l),g.delete(l),i.forEach(u=>URL.revokeObjectURL(u))}}}catch(a){throw i.forEach(l=>URL.revokeObjectURL(l)),a}}function xe(e,t,n,r){for(let o of e??[]){if(typeof o.uri!="string"||I(o.uri))continue;let s=At(t,o.uri),i=n.get(s);if(!i)throw new Error(`Invalid GLTF zip: missing referenced asset ${o.uri}.`);let a=URL.createObjectURL(new Blob([i],{type:Pe(s)}));r.push(a),o.uri=a}}function Se(e,t){try{return JSON.parse(e)}catch{throw new Error(`${t} is not a valid .gltf JSON file.`)}}function Ee(e){return[...e.buffers??[],...e.images??[]].map(t=>t.uri).filter(t=>typeof t=="string"&&t.length>0)}function Lt(e,t){for(let n of Ee(e)){if(I(n))continue;let r=/^[a-z][a-z0-9+.-]*:/i.test(n),o=n.startsWith("/")||n.startsWith("\\");if(r||o)throw new Error(`${t} references external assets. Include every dependency inside the uploaded .zip.`)}}function I(e){return e.startsWith("data:")}function D(e){let t=[];for(let n of e.replace(/\\/g,"/").replace(/^\/+/,"").split("/").filter(r=>r&&r!==".")){if(n===".."){t.pop();continue}t.push(n)}return t.join("/")}function Le(e){let t=e.split("/");return e.endsWith("/")||t.includes("__MACOSX")||t.some(n=>n===".DS_Store"||n.startsWith("._"))}function Pt(e){let t=e.lastIndexOf("/");return t===-1?"":e.slice(0,t)}function At(e,t){let n=t.split(/[?#]/)[0],r=Rt(n);return D(e?`${e}/${r}`:r)}function Rt(e){try{return decodeURI(e)}catch{return e}}function Pe(e){let t=e.toLowerCase();return t.endsWith(".obj")||t.endsWith(".mtl")?"text/plain":t.endsWith(".fbx")?"application/octet-stream":t.endsWith(".usdz")?"model/vnd.usdz+zip":t.endsWith(".bin")?"application/octet-stream":t.endsWith(".png")?"image/png":t.endsWith(".jpg")||t.endsWith(".jpeg")?"image/jpeg":t.endsWith(".webp")?"image/webp":t.endsWith(".avif")?"image/avif":t.endsWith(".ktx2")?"image/ktx2":"application/octet-stream"}import{useEffect as j,useMemo as zt,useRef as Ct,useState as Ot}from"react";import{Box3 as Ce,Color as G,DoubleSide as kt,ShaderMaterial as Bt,Vector3 as Tt}from"three";import{useThree as Ft}from"@react-three/fiber";var Ae="riEditorGizmo",N=new WeakMap;function Re(e){return e.userData[Ae]=!0,e}function cr(e,t){let n=N.get(e);return n||(n=new Set,N.set(e,n)),n.add(t),()=>{n.delete(t)}}function dr(e){let t=[],n=r=>{r.visible=!1,t.push(r)};return e.traverse(r=>{r.visible&&r.userData[Ae]&&n(r)}),N.get(e)?.forEach(r=>{r.visible&&n(r)}),()=>{for(let r of t)r.visible=!0}}function ze(e){return!Number.isFinite(e)||e<=0?1:10**Math.floor(Math.log10(e/10))}import{jsx as Oe}from"react/jsx-runtime";var Ut=`
2
2
  varying vec3 vWorld;
3
3
  void main() {
4
4
  vec4 world = modelMatrix * vec4(position, 1.0);
@@ -44,4 +44,4 @@ import{b as oe}from"./chunk-NMRTI3NQ.mjs";import{b as ce}from"./chunk-2AJK643D.m
44
44
  gl_FragColor = vec4(color, uLinearTarget ? pow(alpha, 2.2) : alpha);
45
45
  #include <colorspace_fragment>
46
46
  }
47
- `,Dt=()=>{};function hr({getTarget:e,revision:t,lineColor:n}){let r=Ft(c=>c.invalidate),[o,s]=Ot({y:0,size:10}),i=Ct(null);j(()=>{i.current&&Ae(i.current)},[]),j(()=>{let c=e();if(!c)return;let d=c instanceof Ce?c:new Ce().setFromObject(c);if(d.isEmpty())return;let f=d.getSize(new Tt);s({y:d.min.y,size:Math.max(f.x,f.y,f.z)}),r()},[e,t,r]);let a=zt(()=>new Bt({vertexShader:Ut,fragmentShader:It,transparent:!0,depthWrite:!1,side:kt,uniforms:{uCell:{value:1},uMajor:{value:5},uFade:{value:100},uLinearTarget:{value:!1},uLine:{value:new G},uAxisX:{value:new G("#e5484d")},uAxisZ:{value:new G("#3e8bff")}}}),[]);j(()=>()=>a.dispose(),[a]);let l=ze(o.size);a.uniforms.uCell.value=l,a.uniforms.uMajor.value=l*5,a.uniforms.uFade.value=o.size*12,a.uniforms.uLine.value.set(n);let u=o.size*40;return Oe("mesh",{ref:i,rotation:[-Math.PI/2,0,0],position:[0,o.y-o.size*5e-4,0],raycast:Dt,renderOrder:-1,frustumCulled:!1,material:a,onBeforeRender:c=>{let d=c.getRenderTarget()!==null;a.uniforms.uLinearTarget.value!==d&&(a.uniforms.uLinearTarget.value=d,a.uniformsNeedUpdate=!0)},children:Oe("planeGeometry",{args:[u,u]})})}import{useThree as _}from"@react-three/fiber";import{useEffect as Fe}from"react";import{useEffect as Nt,useState as jt}from"react";function Te(e){return!!e?.isWebGPURenderer}var ke;function Gt(){return ke??(ke=(async()=>{let e=typeof navigator>"u"?void 0:navigator.gpu;if(!e)return!1;try{return!!await e.requestAdapter()}catch{return!1}})()),ke}var Be=!1;function xr(e){let[t,n]=jt(null);return Nt(()=>{if(!e)return;let r=!1;return Gt().then(o=>{r||(!o&&!Be&&(Be=!0,console.info("[react-immersive] WebGPU isn't available in this browser; using WebGL.")),n(o))}),()=>{r=!0}},[e]),e?t===null?null:t?"webgpu":"webgl":"webgl"}async function Mr(e){let{WebGPURenderer:t}=await import("three/webgpu"),n=new t({canvas:e.canvas,antialias:e.antialias??!0,alpha:e.alpha??!0});return await n.init(),n}function Rr({captureRef:e}){let{gl:t,scene:n,camera:r,invalidate:o,get:s}=_();return Fe(()=>{if(!e)return;let i=()=>{let a=s();a.advance(a.frameloop==="never"?a.clock.elapsedTime:performance.now())};return e.current={gl:t,scene:n,camera:r,invalidate:o,drawNow:i},()=>{e.current=null}},[e,t,n,r,o,s]),null}function Ar(){let e=_(n=>n.frameloop),t=_(n=>n.invalidate);return Fe(()=>{e!=="never"&&t()},[e,t]),null}function zr(e){e.dispose(),"forceContextLoss"in e&&!Te(e)&&(e.forceContextLoss(),e.forceContextLoss=()=>{})}function Cr(e){if(!e)return Promise.resolve(null);try{e.drawNow();let t=e.gl.domElement;return new Promise(n=>{t.toBlob(r=>n(r?URL.createObjectURL(r):null),"image/webp",.85)})}catch{return Promise.resolve(null)}}import{useEffect as Kt,useState as qt}from"react";import{useEffect as _t,useState as Ue}from"react";var Vt="200px",Ie=new Map;function De(e,t,n){let r=Ie.get(t);if(!r){let i=new Map;r={observer:new IntersectionObserver(l=>{for(let u of l)i.get(u.target)?.(u.isIntersecting)},{rootMargin:t}),watchers:i},Ie.set(t,r)}let{observer:o,watchers:s}=r;return s.set(e,n),o.observe(e),()=>{s.delete(e),o.unobserve(e)}}function Ne(e){let t=typeof IntersectionObserver<"u",[n,r]=Ue(!t),[o,s]=Ue(!t);return _t(()=>{let i=e.current;if(!i||!t)return;let a=De(i,Vt,r),l=De(i,"0px",s);return()=>{a(),l()}},[e,t]),{near:n,visible:o}}import{useEffect as je,useRef as Ge,useState as Zt}from"react";function V(){return typeof navigator>"u"?!1:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}function Wt(){if(typeof navigator>"u")return!1;let e=navigator.userAgent;return/iPhone|iPad|iPod/i.test(e)?!0:navigator.platform==="MacIntel"&&typeof navigator.maxTouchPoints=="number"&&navigator.maxTouchPoints>1}function Tr(){return V()||Wt()}function $t(){if(typeof window>"u"||typeof navigator>"u")return!1;let e=i=>typeof window.matchMedia=="function"&&window.matchMedia(i).matches,t=e("(pointer: coarse)")||e("(any-pointer: coarse)"),n=e("(hover: none)")||e("(any-hover: none)"),r=navigator.maxTouchPoints>0,o=typeof window.screen<"u"&&Math.min(window.screen.width,window.screen.height)<=1024,s=V();return t||s||r&&n||r&&o}function W(){if(!$t())return!1;if(V())return!0;let e=navigator.deviceMemory;return!(typeof e=="number"&&e>=8)}function Fr(e="auto"){switch(e){case"high":return!1;case"low":return!0;default:return W()}}function Xt(e,t){let n=new Set,r=o=>{for(let s of o){if(n.size>=t)return;n.add(s.id)}};return r(e.filter(o=>o.wanted).sort((o,s)=>Number(s.visible)-Number(o.visible)||Number(s.live)-Number(o.live)||o.since-s.since)),r(e.filter(o=>!o.wanted&&o.live).sort((o,s)=>s.since-o.since)),n}var Ht=12,Jt=6,P=new Map,Yt=1,$=!1,_e;function Ve(){$||($=!0,queueMicrotask(()=>{$=!1,_e??(_e=W()?Jt:Ht);let e=Xt([...P.values()],_e);for(let t of P.values()){let n=e.has(t.id);n!==t.live&&(t.live=n,t.onLiveChange(n))}}))}function We({managed:e,wanted:t,visible:n,onPark:r}){let[o,s]=Zt(!1),i=Ge(r);i.current=r;let a=Ge(null);return je(()=>{if(!e)return;let l={id:Yt++,wanted:!1,visible:!1,live:!1,since:performance.now(),onLiveChange:u=>{u||i.current?.(),s(u)}};return P.set(l.id,l),a.current=l,()=>{P.delete(l.id),a.current=null,s(!1),Ve()}},[e]),je(()=>{let l=a.current;!l||l.wanted===t&&l.visible===n||(l.wanted!==t&&(l.since=performance.now()),l.wanted=t,l.visible=n,Ve())},[e,t,n]),e?o:t}function Vr({loading:e="lazy",reveal:t="auto",rootRef:n,onPark:r}){let{near:o,visible:s}=Ne(n),[i,a]=qt(t==="auto");return Kt(()=>{t==="auto"&&a(!0)},[t]),{live:We({managed:e==="lazy",wanted:i&&(e==="eager"||o),visible:s,onPark:r}),visible:s,awaitingReveal:!i,reveal:()=>a(!0)}}import{Box as Qt}from"lucide-react";import{jsx as Z,jsxs as $e}from"react/jsx-runtime";function en({src:e,hidden:t=!1}){return e?Z("img",{className:`ri-poster${t?" ri-poster--hidden":""}`,src:e,alt:"","aria-hidden":"true",draggable:!1,decoding:"async"}):null}function Yr({className:e,background:t,poster:n,onReveal:r}){let o=oe();return $e("div",{className:`${e} ri-viewerPlaceholder`,style:{background:t},children:[Z(en,{src:n}),r?$e("button",{type:"button",className:"ri-revealButton",onClick:r,children:[Z(Qt,{size:16,"aria-hidden":"true"}),o("viewIn3D")]}):null]})}import{Color as tn}from"three";function Ze(e){let t=new tn(0,0,0);try{t.setStyle(e,"srgb-linear")}catch{return!1}let n=[t.r,t.g,t.b].map(r=>r<=.04045?r/12.92:((r+.055)/1.055)**2.4);return .2126*n[0]+.7152*n[1]+.0722*n[2]>.3}function eo(e,t){if(e)return e;let n=t?.background;return n?.enabled&&n.type==="color"?n.color:"#1c1c1d"}var nn={glb:"GLB",gltf:"glTF",obj:"OBJ",fbx:"FBX",usdz:"USDZ",stl:"STL",ply:"PLY"},rn=/\.(glb|gltf|obj|fbx|usdz|stl|ply|zip)$/i;function on(e,t){let n=e?.response?.status;if(typeof n=="number")return n;let r=/responded with (\d{3})/.exec(t);return r?Number(r[1]):null}function io(e,t,n,r){let o=e instanceof Error?e.message:e==null?"":String(e),s=(f,p)=>re(r,f,p),i=s("loadErrorTitle"),a=o||null;if(ce(e))return{title:i,detail:s("loadErrorPointCloud"),technical:a};let l=on(e,o);if(l===404||l===410)return{title:i,detail:s("loadErrorNotFound",{status:l}),technical:a};if(l===401||l===403)return{title:i,detail:s("loadErrorDenied",{status:l}),technical:a};if(l!==null)return{title:i,detail:s("loadErrorStatus",{status:l}),technical:a};if(/failed to fetch|networkerror|load failed|network error/i.test(o))return{title:i,detail:s("loadErrorNetwork"),technical:a};if(/<!doctype|<html/i.test(o))return{title:i,detail:s("loadErrorHtml"),technical:a};let u=t.split(/[?#]/,1)[0],c=nn[n??S(t)],d=rn.test(u);return{title:i,detail:d||n?s(n?"loadErrorInvalidExplicitFormat":"loadErrorInvalidFile",{format:c}):s("loadErrorMissingFormat",{format:c}),technical:a}}import{useEffect as sn,useState as an}from"react";var X=80,ln=99,un=6e3,cn=200;function dn(e,t=0){let n=Math.min(Math.max(e,0),100);return n<100?n/100*X:X+(ln-X)*(1-Math.exp(-t/un))}function lo(e,t=!1){let n=e!==null&&e>=100&&!t,[r,o]=an(0);return sn(()=>{if(!n){o(0);return}let s=performance.now(),i=setInterval(()=>o(performance.now()-s),cn);return()=>clearInterval(i)},[n]),e===null?null:t?100:dn(e,r)}import{DataTexture as fn,DataUtils as Xe,EquirectangularReflectionMapping as pn,HalfFloatType as mn,LinearFilter as He,LinearSRGBColorSpace as bn,RGBAFormat as gn,Vector3 as y}from"three";var Je="neutral",hn=[{direction:[.62,.48,.62],size:[.38,.28],radiance:9},{direction:[-.75,.2,.55],size:[.32,.36],radiance:3.5},{direction:[0,1,0],size:[.55,.55],radiance:4},{direction:[.15,.3,-1],size:[.45,.16],radiance:5}],R=(e,t,n)=>{let r=Math.min(Math.max((n-e)/(t-e),0),1);return r*r*(3-2*r)},vn=hn.map(e=>{let t=new y(...e.direction).normalize(),n=Math.abs(t.y)>.9?new y(0,0,1):new y(0,1,0),r=new y().crossVectors(n,t).normalize(),o=new y().crossVectors(t,r).normalize();return{center:t,right:r,up:o,box:e}}),yn=.9;function wn(e){let t=e.y,n=.2+.18*R(-.35,.05,t)+.17*R(0,.9,t);for(let{center:r,right:o,up:s,box:i}of vn){let a=e.dot(r);if(a<=0)continue;let l=Math.abs(e.dot(o)/a)/i.size[0],u=Math.abs(e.dot(s)/a)/i.size[1],c=(1-R(.82,1,l))*(1-R(.82,1,u));n+=i.radiance*c}return n*yn}var H=null;function Ye(){if(H)return H;let e=512,t=256,n=new Uint16Array(e*t*4),r=new y;for(let s=0;s<t;s++){let i=((s+.5)/t-.5)*Math.PI;for(let a=0;a<e;a++){let l=((a+.5)/e-.5)*2*Math.PI;r.set(Math.cos(i)*Math.cos(l),Math.sin(i),Math.cos(i)*Math.sin(l));let u=Xe.toHalfFloat(wn(r)),c=(s*e+a)*4;n[c]=u,n[c+1]=u,n[c+2]=u,n[c+3]=Xe.toHalfFloat(1)}}let o=new fn(n,e,t,gn,mn);return o.mapping=pn,o.colorSpace=bn,o.magFilter=He,o.minFilter=He,o.generateMipmaps=!1,o.needsUpdate=!0,H=o,o}import{lazy as xn,useLayoutEffect as Mn}from"react";import{useThree as Ke}from"@react-three/fiber";import{jsx as J}from"react/jsx-runtime";var qe=xn(()=>import("./DownloadedEnvironment-NHM4U2LJ.mjs"));function go({preset:e,files:t,...n}){return!t&&e===Je?J(Sn,{...n}):t?J(qe,{files:t,...n}):J(qe,{preset:e,...n})}function Sn({background:e=!1,environmentIntensity:t=1,backgroundIntensity:n=1,backgroundBlurriness:r=0}){let o=Ke(i=>i.scene),s=Ke(i=>i.invalidate);return Mn(()=>{let i=Ye(),a={environment:o.environment,environmentIntensity:o.environmentIntensity,background:o.background,backgroundIntensity:o.backgroundIntensity,backgroundBlurriness:o.backgroundBlurriness};return o.environment=i,o.environmentIntensity=t,e&&(o.background=i,o.backgroundIntensity=n,o.backgroundBlurriness=r),s(),()=>{Object.assign(o,a),s()}},[o,s,e,t,n,r]),null}import{useFrame as Y,useThree as h}from"@react-three/fiber";import{ContactShadows as En}from"@react-three/drei";import{Color as Ln,PerspectiveCamera as Pn}from"three";import{useEffect as A,useLayoutEffect as et,useRef as Rn}from"react";import{Fragment as zn,jsx as Qe,jsxs as Cn}from"react/jsx-runtime";function Eo({active:e}){let t=h(n=>n.invalidate);return A(()=>{e&&t()},[e,t]),Y(()=>{e&&t()}),null}function Lo(e){let t=h(r=>r.gl),n=Rn(t.autoClear);return Y(()=>{n.current=t.autoClear,t.autoClear=!0},-1),Cn(zn,{children:[Qe(En,{...e}),Qe(An,{saved:n})]})}function An({saved:e}){let t=h(n=>n.gl);return Y(()=>{t.autoClear=e.current}),null}function Po({color:e}){let{scene:t,invalidate:n}=h();return et(()=>(t.background=e?new Ln(e):null,n(),()=>{t.background=null}),[t,e,n]),null}function Ro(){let e=h(t=>t.invalidate);return A(()=>{e()},[e]),null}function Ao({rotation:e}){let{scene:t,invalidate:n}=h();return et(()=>{let r=e*Math.PI/180;t.environmentRotation.set(0,r,0),t.backgroundRotation.set(0,r,0)}),A(()=>{n()},[e,n]),null}function zo({cameraConfig:e}){let{camera:t,invalidate:n}=h();return A(()=>{if(!(t instanceof Pn))return;let r=e?.fov;typeof r=="number"&&t.fov!==r&&(t.fov=r,t.updateProjectionMatrix(),n())},[t,e,n]),null}var z=e=>e*Math.PI/180;function ko(e){return{minDistance:e?.minDistance??0,maxDistance:e?.maxDistance??1/0,minPolarAngle:z(e?.minPolarAngle??0),maxPolarAngle:z(e?.maxPolarAngle??180),minAzimuthAngle:z(e?.minAzimuthAngle??-1/0),maxAzimuthAngle:z(e?.maxAzimuthAngle??1/0),boundaryEnclosesCamera:e?.boundaryEnclosesCamera??!1,boundaryFriction:e?.boundaryFriction??0,panBoundary:e?.panBoundary}}import{useEffect as On}from"react";import{useThree as tt}from"@react-three/fiber";function nt(e,t,{zoom:n,pageScroll:r},o){if(!n)return{wheel:t.NONE,middle:t.NONE,two:t.TOUCH_TRUCK};let s=r&&!o?t.NONE:e.wheel;return{...e,wheel:s}}function kn({pageScroll:e}){return e?"pan-y":null}function Uo({controlsRef:e,zoom:t=!0,pageScroll:n=!1}){let r=tt(i=>i.gl.domElement),s=tt(i=>i.events.connected)??r;return On(()=>{let i=e&&typeof e=="object"?e.current:null,a=i?.constructor.ACTION;if(!i||!a||!s||t&&!n)return;let l={zoom:t,pageScroll:n},u={wheel:i.mouseButtons.wheel,middle:i.mouseButtons.middle,two:i.touches.two},c=b=>{i.mouseButtons.wheel=b.wheel,i.mouseButtons.middle=b.middle,i.touches.two=b.two};c(nt(u,a,l));let d=b=>{c(nt(u,a,l,b.ctrlKey||b.metaKey))};s.addEventListener("wheel",d,{capture:!0,passive:!0});let f=kn(l),p=[...new Set([r,s])],m=p.map(b=>[b,b.style.touchAction]),L=null;if(f){let b=()=>{if(i.enabled)for(let v of p)v.style.touchAction!==f&&(v.style.touchAction=f)};b(),L=new MutationObserver(b);for(let v of p)L.observe(v,{attributes:!0,attributeFilter:["style"]})}return()=>{if(s.removeEventListener("wheel",d,{capture:!0}),L?.disconnect(),f)for(let[b,v]of m)b.style.touchAction=v;c(u)}},[e,r,s,t,n]),null}import{useLoader as ot,useThree as Bn}from"@react-three/fiber";import{FileLoader as it,Loader as Tn,LoadingManager as Fn}from"three";import{GLTFLoader as Un}from"three-stdlib";var O=class extends Tn{constructor(){super(...arguments);this.options={source:{format:"glb"}}}configure(n){return this.options=n,this}load(n,r,o,s){let i=performance.now(),a={format:this.options.source.format,name:this.options.source.entryPath??le(n),sourceBytes:this.options.source.sourceBytes??null,failedResources:[]},l=u=>{a.sourceBytes===null&&u.lengthComputable&&u.total>0&&(a.sourceBytes=u.total),o?.(u)};this.loadAsset(n,l,a).then(u=>{a.loadDurationMs=Math.max(0,performance.now()-i),F(u.scene,a),r(u)}).catch(u=>{a.loadDurationMs=Math.max(0,performance.now()-i),u&&typeof u=="object"&&F(u,a),s?.(u)})}async loadAsset(n,r,o){let s=Nn(this.options.source);s.onError=u=>{let c=Object.entries(this.options.source.resourceUrls??{}).find(([,f])=>f===u)?.[0],d=ue(c??u);o.failedResources.includes(d)||o.failedResources.push(d)};let{format:i}=this.options.source;if(i==="obj")return In(n,s,this.options.source,r);if(i==="fbx"){let{FBXLoader:u}=await import("three/examples/jsm/loaders/FBXLoader.js"),c=K(this,new u(s)),d=_n(n,this.options.source);d&&c.setResourcePath(d);let f=await c.loadAsync(n,r);return C(f,"FBXMesh",!1),{scene:f,animations:f.animations??[]}}if(i==="stl"||i==="ply"){let{meshNameFromPath:u,parsePly:c,parseStl:d}=await import("./meshFormats-4C6NHYOA.mjs"),f=await Dn(n,s,r),p=u(this.options.source.entryPath??n,i==="stl"?"STL model":"PLY model"),m=i==="stl"?d(f,p):c(f,p);return C(m,i==="stl"?"STLMesh":"PLYMesh",!0),{scene:m,animations:[]}}if(i==="usdz"){let{USDLoader:u}=await import("three/examples/jsm/loaders/USDLoader.js"),d=await K(this,new u(s)).loadAsync(n,r);return C(d,"USDZMesh",!1),{scene:d,animations:d.animations??[]}}let a=K(this,new Un(s));de(a,this.options.decoderConfig,this.options.renderer),a.register(u=>{let c=u.json,d=f=>Array.isArray(f)?f.filter(p=>typeof p=="string"):[];return o.extensionsUsed=d(c.extensionsUsed),o.extensionsRequired=d(c.extensionsRequired),{name:"RI_asset_diagnostics",beforeRoot:()=>null}});let l=await a.loadAsync(n,r);return{scene:l.scene,animations:l.animations??[],materialVariants:ie(l)}}};pe(e=>{ot.clear(O,e)});function Zo(e,t={},n,r){let o=Bn(a=>a.gl),s=Me(e),i=n?{...s,format:n}:s;return ot(O,e,a=>{a.configure({source:i,decoderConfig:t,renderer:o})},r)}async function In(e,t,n,r){let[{OBJLoader:o},s]=await Promise.all([import("three/examples/jsm/loaders/OBJLoader.js"),rt(e,t,r)]),i=new o(t),a=jn(s);if(a){let u=Gn(a,e,n);if(u)try{let c=await rt(u.url,t),{MTLLoader:d}=await import("three/examples/jsm/loaders/MTLLoader.js"),p=new d(t).parse(c,u.basePath);p.preload(),i.setMaterials(p)}catch(c){console.warn(`[react-immersive] Could not load OBJ material ${a}; rendering geometry with fallback materials.`,c)}}let l=i.parse(s);return C(l,"OBJMesh",!0),{scene:l,animations:[]}}function C(e,t,n){let r=new Set,o=0;e.traverse(s=>{if(!("isMesh"in s&&s.isMesh===!0)){s.name&&r.add(s.name);return}let a=s.name||`${t}_${++o}`;if(!n&&s.name){r.add(s.name);return}let l=a,u=2;for(;r.has(l);)l=`${a}_${u++}`;s.name=l,r.add(l)})}function rt(e,t,n){let r=new it(t);return r.setResponseType("text"),r.loadAsync(e,n)}function Dn(e,t,n){let r=new it(t);return r.setResponseType("arraybuffer"),r.loadAsync(e,n)}function K(e,t){return t.setCrossOrigin(e.crossOrigin),t.setWithCredentials(e.withCredentials),t.setRequestHeader(e.requestHeader),t}function Nn(e){let t=new Fn,n=e.resourceUrls;return n&&t.setURLModifier(r=>{if(/^(?:blob:|data:)/i.test(r))return r;let o=B(at(r).split(/[?#]/)[0]),s=n[o];if(s)return s;let i=k(e.entryPath??""),a=B(i?`${i}/${o}`:o);return n[a]??r}),t}function jn(e){return/^\s*mtllib\s+(.+?)\s*$/im.exec(e)?.[1]?.trim()||null}function Gn(e,t,n){if(n.resourceUrls&&n.entryPath){let r=B(`${k(n.entryPath)}/${at(e)}`),o=n.resourceUrls[r];if(!o)return null;let s=k(r);return{url:o,basePath:s?`${s}/`:""}}try{let r=new URL(e,t).href;return{url:r,basePath:st(r)}}catch{return null}}function _n(e,t){if(t.resourceUrls&&t.entryPath){let n=k(t.entryPath);return n?`${n}/`:""}return st(e)}function st(e){let t=e.lastIndexOf("/");return t===-1?"":e.slice(0,t+1)}function k(e){let t=B(e),n=t.lastIndexOf("/");return n===-1?"":t.slice(0,n)}function B(e){let t=[];for(let n of e.replace(/\\/g,"/").replace(/^\/+/,"").split("/").filter(r=>r&&r!=="."))n===".."?t.pop():t.push(n);return t.join("/")}function at(e){try{return decodeURI(e)}catch{return e}}import{Box3 as q,Matrix4 as Vn,Sphere as Wn,Vector3 as Q}from"three";var lt=new WeakMap,ut=new Q,$n=new Q,Zn=new Q,Xn=new q,ct=new Vn;function w(e){return"data"in e?e.data.version:e.version}function Hn(e){var l;let{geometry:t,skeleton:n}=e,r=t.getAttribute("position"),o=t.getAttribute("skinIndex"),s=t.getAttribute("skinWeight"),i=lt.get(e);if(i?.geometry===t&&i.position===r&&i.indices===o&&i.weights===s&&i.skeleton===n&&i.bindMatrix.equals(e.bindMatrix)&&i.versions[0]===w(r)&&i.versions[1]===w(o)&&i.versions[2]===w(s)&&i.inverses.length===n.boneInverses.length&&i.inverses.every((u,c)=>u.equals(n.boneInverses[c])))return i;let a={geometry:t,position:r,indices:o,weights:s,skeleton:n,versions:[w(r),w(o),w(s)],bindMatrix:e.bindMatrix.clone(),inverses:n.boneInverses.map(u=>u.clone()),bones:[],weightDeviation:0};e:for(let u=0;u<r.count;u++){ut.fromBufferAttribute(r,u).applyMatrix4(e.bindMatrix);let c=0;for(let f=0;f<4;f++){let p=s.getComponent(u,f);if(p===0)continue;let m=o.getComponent(u,f);if(!Number.isFinite(p)||p<0||!Number.isInteger(m)||!n.bones[m]||!a.inverses[m]){a.bones=null;break e}c+=p,((l=a.bones)[m]??(l[m]=new q)).expandByPoint($n.copy(ut).applyMatrix4(a.inverses[m]))}let d=Math.abs(c-1);if(d>1e-4){a.bones=null;break}a.weightDeviation=Math.max(a.weightDeviation,d)}return lt.set(e,a),a}function Yo(e,{precise:t=!1,updateFallbacks:n=!0}={}){e.updateMatrixWorld(!0),e.traverse(r=>{if(!te(r))return;let o=r;if(!o.skeleton)return;let s=ne(o);s&&o.bindMatrixInverse.copy(s);let a=!!o.geometry.morphAttributes.position?.length?null:Hn(o);if(!t&&!a?.bones&&!n&&o.boundingBox&&o.boundingSphere)return;let l=o.boundingBox??(o.boundingBox=new q),u=o.boundingSphere??(o.boundingSphere=new Wn);if(l.makeEmpty(),t||!a?.bones){let c=o.geometry.getAttribute("position");for(let d=0;d<c.count;d++)l.expandByPoint(o.getVertexPosition(d,Zn))}else{for(let c=0;c<a.bones.length;c++){let d=a.bones[c];d&&(ct.multiplyMatrices(o.bindMatrixInverse,o.skeleton.bones[c].matrixWorld),l.union(Xn.copy(d).applyMatrix4(ct)))}if(!l.isEmpty()){let c=l.min,d=l.max,f=o.bindMatrixInverse.elements,p=Math.max(1,Math.abs(c.x),Math.abs(c.y),Math.abs(c.z),Math.abs(d.x),Math.abs(d.y),Math.abs(d.z)),m=Math.max(Math.abs(c.x-f[12]),Math.abs(d.x-f[12]),Math.abs(c.y-f[13]),Math.abs(d.y-f[13]),Math.abs(c.z-f[14]),Math.abs(d.z-f[14]));l.expandByScalar(a.weightDeviation*m+p*1e-10)}}l.getBoundingSphere(u)})}import{useCallback as dt,useEffect as Jn,useRef as Yn}from"react";import{useThree as Kn}from"@react-three/fiber";function ei(){let e=Kn(o=>o.gl.domElement),t=Yn(void 0),n=dt(o=>{t.current===void 0&&(t.current=e.style.cursor),e.style.cursor=o},[e]),r=dt(()=>{let o=t.current;o!==void 0&&(e.style.cursor=o,t.current=void 0)},[e]);return Jn(()=>()=>{r()},[r]),{setCanvasCursor:n,restoreCanvasCursor:r}}import{Box3 as qn,Vector3 as ft}from"three";function T(e){return[e.x,e.y,e.z]}function oi(e){let t=new qn().setFromObject(e),n=0;return e.traverse(r=>{r.isMesh&&(n+=1)}),{bounds:{min:T(t.min),max:T(t.max),center:T(t.getCenter(new ft)),size:T(t.getSize(new ft))},objectCount:n,materialVariants:se(e),materialVariantGroups:ae(e)}}import{jsx as E,jsxs as ee}from"react/jsx-runtime";function ci({visible:e,title:t,message:n,progress:r,background:o,seeThrough:s=!1}){if(!e)return null;let i=o!==void 0&&Ze(o),a=s?"transparent":o,l=typeof r=="number"&&Number.isFinite(r),u=l?Math.round(Math.min(Math.max(r,0),100)):0;return E("div",{className:`bb-loadingOverlay${i?" bb-loadingOverlay--light":""}`,style:a?{background:a}:void 0,role:"status","aria-live":"polite",children:ee("div",{className:"bb-loadingCard",children:[ee("div",{className:"bb-loadingHeader",children:[E("span",{className:"bb-loadingTitle",title:t??n,children:t??n}),l?ee("span",{className:"bb-loadingPercent",children:[u,"%"]}):null]}),E("div",{className:`bb-loadingProgress ${l?"":"bb-loadingProgress--unknown"}`,role:"progressbar","aria-label":t??n,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":l?u:void 0,children:E("div",{className:"bb-loadingProgress__bar",style:l?{width:`${u}%`}:void 0})}),t?E("span",{className:"bb-loadingMessage",children:n}):null]})})}export{Ae as a,ar as b,lr as c,Wt as d,Tr as e,W as f,Fr as g,x as h,nr as i,Me as j,rr as k,Te as l,xr as m,Mr as n,hr as o,Rr as p,Ar as q,zr as r,Cr as s,Vr as t,en as u,Yr as v,eo as w,io as x,lo as y,Je as z,go as A,Eo as B,Lo as C,Po as D,Ro as E,Ao as F,zo as G,ko as H,Uo as I,Zo as J,Yo as K,ei as L,oi as M,ci as N};
47
+ `,Dt=()=>{};function wr({getTarget:e,revision:t,lineColor:n}){let r=Ft(c=>c.invalidate),[o,s]=Ot({y:0,size:10}),i=Ct(null);j(()=>{i.current&&Re(i.current)},[]),j(()=>{let c=e();if(!c)return;let d=c instanceof Ce?c:new Ce().setFromObject(c);if(d.isEmpty())return;let f=d.getSize(new Tt);s({y:d.min.y,size:Math.max(f.x,f.y,f.z)}),r()},[e,t,r]);let a=zt(()=>new Bt({vertexShader:Ut,fragmentShader:It,transparent:!0,depthWrite:!1,side:kt,uniforms:{uCell:{value:1},uMajor:{value:5},uFade:{value:100},uLinearTarget:{value:!1},uLine:{value:new G},uAxisX:{value:new G("#e5484d")},uAxisZ:{value:new G("#3e8bff")}}}),[]);j(()=>()=>a.dispose(),[a]);let l=ze(o.size);a.uniforms.uCell.value=l,a.uniforms.uMajor.value=l*5,a.uniforms.uFade.value=o.size*12,a.uniforms.uLine.value.set(n);let u=o.size*40;return Oe("mesh",{ref:i,rotation:[-Math.PI/2,0,0],position:[0,o.y-o.size*5e-4,0],raycast:Dt,renderOrder:-1,frustumCulled:!1,material:a,onBeforeRender:c=>{let d=c.getRenderTarget()!==null;a.uniforms.uLinearTarget.value!==d&&(a.uniforms.uLinearTarget.value=d,a.uniformsNeedUpdate=!0)},children:Oe("planeGeometry",{args:[u,u]})})}import{useThree as _}from"@react-three/fiber";import{useEffect as Fe}from"react";import{useEffect as Nt,useState as jt}from"react";function Te(e){return!!e?.isWebGPURenderer}var ke;function Gt(){return ke??(ke=(async()=>{let e=typeof navigator>"u"?void 0:navigator.gpu;if(!e)return!1;try{return!!await e.requestAdapter()}catch{return!1}})()),ke}var Be=!1;function Er(e){let[t,n]=jt(null);return Nt(()=>{if(!e)return;let r=!1;return Gt().then(o=>{r||(!o&&!Be&&(Be=!0,console.info("[react-immersive] WebGPU isn't available in this browser; using WebGL.")),n(o))}),()=>{r=!0}},[e]),e?t===null?null:t?"webgpu":"webgl":"webgl"}async function Lr(e){let{WebGPURenderer:t}=await import("three/webgpu"),n=new t({canvas:e.canvas,antialias:e.antialias??!0,alpha:e.alpha??!0});return await n.init(),n}function Cr({captureRef:e}){let{gl:t,scene:n,camera:r,invalidate:o,get:s}=_();return Fe(()=>{if(!e)return;let i=()=>{let a=s();a.advance(a.frameloop==="never"?a.clock.elapsedTime:performance.now())};return e.current={gl:t,scene:n,camera:r,invalidate:o,drawNow:i},()=>{e.current=null}},[e,t,n,r,o,s]),null}function Or(){let e=_(n=>n.frameloop),t=_(n=>n.invalidate);return Fe(()=>{e!=="never"&&t()},[e,t]),null}function kr(e){e.dispose(),"forceContextLoss"in e&&!Te(e)&&(e.forceContextLoss(),e.forceContextLoss=()=>{})}function Br(e){if(!e)return Promise.resolve(null);try{e.drawNow();let t=e.gl.domElement;return new Promise(n=>{t.toBlob(r=>n(r?URL.createObjectURL(r):null),"image/webp",.85)})}catch{return Promise.resolve(null)}}import{useEffect as Kt,useState as qt}from"react";import{useEffect as _t,useState as Ue}from"react";var Vt="200px",Ie=new Map;function De(e,t,n){let r=Ie.get(t);if(!r){let i=new Map;r={observer:new IntersectionObserver(l=>{for(let u of l)i.get(u.target)?.(u.isIntersecting)},{rootMargin:t}),watchers:i},Ie.set(t,r)}let{observer:o,watchers:s}=r;return s.set(e,n),o.observe(e),()=>{s.delete(e),o.unobserve(e)}}function Ne(e){let t=typeof IntersectionObserver<"u",[n,r]=Ue(!t),[o,s]=Ue(!t);return _t(()=>{let i=e.current;if(!i||!t)return;let a=De(i,Vt,r),l=De(i,"0px",s);return()=>{a(),l()}},[e,t]),{near:n,visible:o}}import{useEffect as je,useRef as Ge,useState as Zt}from"react";function V(){return typeof navigator>"u"?!1:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}function Wt(){if(typeof navigator>"u")return!1;let e=navigator.userAgent;return/iPhone|iPad|iPod/i.test(e)?!0:navigator.platform==="MacIntel"&&typeof navigator.maxTouchPoints=="number"&&navigator.maxTouchPoints>1}function Ir(){return V()||Wt()}function $t(){if(typeof window>"u"||typeof navigator>"u")return!1;let e=i=>typeof window.matchMedia=="function"&&window.matchMedia(i).matches,t=e("(pointer: coarse)")||e("(any-pointer: coarse)"),n=e("(hover: none)")||e("(any-hover: none)"),r=navigator.maxTouchPoints>0,o=typeof window.screen<"u"&&Math.min(window.screen.width,window.screen.height)<=1024,s=V();return t||s||r&&n||r&&o}function W(){if(!$t())return!1;if(V())return!0;let e=navigator.deviceMemory;return!(typeof e=="number"&&e>=8)}function Dr(e="auto"){switch(e){case"high":return!1;case"low":return!0;default:return W()}}function Xt(e,t){let n=new Set,r=o=>{for(let s of o){if(n.size>=t)return;n.add(s.id)}};return r(e.filter(o=>o.wanted).sort((o,s)=>Number(s.visible)-Number(o.visible)||Number(s.live)-Number(o.live)||o.since-s.since)),r(e.filter(o=>!o.wanted&&o.live).sort((o,s)=>s.since-o.since)),n}var Ht=12,Jt=6,P=new Map,Yt=1,$=!1,_e;function Ve(){$||($=!0,queueMicrotask(()=>{$=!1,_e??(_e=W()?Jt:Ht);let e=Xt([...P.values()],_e);for(let t of P.values()){let n=e.has(t.id);n!==t.live&&(t.live=n,t.onLiveChange(n))}}))}function We({managed:e,wanted:t,visible:n,onPark:r}){let[o,s]=Zt(!1),i=Ge(r);i.current=r;let a=Ge(null);return je(()=>{if(!e)return;let l={id:Yt++,wanted:!1,visible:!1,live:!1,since:performance.now(),onLiveChange:u=>{u||i.current?.(),s(u)}};return P.set(l.id,l),a.current=l,()=>{P.delete(l.id),a.current=null,s(!1),Ve()}},[e]),je(()=>{let l=a.current;!l||l.wanted===t&&l.visible===n||(l.wanted!==t&&(l.since=performance.now()),l.wanted=t,l.visible=n,Ve())},[e,t,n]),e?o:t}function Zr({loading:e="lazy",reveal:t="auto",rootRef:n,onPark:r}){let{near:o,visible:s}=Ne(n),[i,a]=qt(t==="auto");return Kt(()=>{t==="auto"&&a(!0)},[t]),{live:We({managed:e==="lazy",wanted:i&&(e==="eager"||o),visible:s,onPark:r}),visible:s,awaitingReveal:!i,reveal:()=>a(!0)}}import{Box as Qt}from"lucide-react";import{jsx as Z,jsxs as $e}from"react/jsx-runtime";function en({src:e,hidden:t=!1}){return e?Z("img",{className:`ri-poster${t?" ri-poster--hidden":""}`,src:e,alt:"","aria-hidden":"true",draggable:!1,decoding:"async"}):null}function Qr({className:e,background:t,poster:n,onReveal:r}){let o=oe();return $e("div",{className:`${e} ri-viewerPlaceholder`,style:{background:t},children:[Z(en,{src:n}),r?$e("button",{type:"button",className:"ri-revealButton",onClick:r,children:[Z(Qt,{size:16,"aria-hidden":"true"}),o("viewIn3D")]}):null]})}import{Color as tn}from"three";function Ze(e){let t=new tn(0,0,0);try{t.setStyle(e,"srgb-linear")}catch{return!1}let n=[t.r,t.g,t.b].map(r=>r<=.04045?r/12.92:((r+.055)/1.055)**2.4);return .2126*n[0]+.7152*n[1]+.0722*n[2]>.3}function ro(e,t){if(e)return e;let n=t?.background;return n?.enabled&&n.type==="color"?n.color:"#1c1c1d"}var nn={glb:"GLB",gltf:"glTF",obj:"OBJ",fbx:"FBX",usdz:"USDZ",stl:"STL",ply:"PLY"},rn=/\.(glb|gltf|obj|fbx|usdz|stl|ply|zip)$/i;function on(e,t){let n=e?.response?.status;if(typeof n=="number")return n;let r=/responded with (\d{3})/.exec(t);return r?Number(r[1]):null}function lo(e,t,n,r){let o=e instanceof Error?e.message:e==null?"":String(e),s=(f,p)=>re(r,f,p),i=s("loadErrorTitle"),a=o||null;if(ce(e))return{title:i,detail:s("loadErrorPointCloud"),technical:a};let l=on(e,o);if(l===404||l===410)return{title:i,detail:s("loadErrorNotFound",{status:l}),technical:a};if(l===401||l===403)return{title:i,detail:s("loadErrorDenied",{status:l}),technical:a};if(l!==null)return{title:i,detail:s("loadErrorStatus",{status:l}),technical:a};if(/failed to fetch|networkerror|load failed|network error/i.test(o))return{title:i,detail:s("loadErrorNetwork"),technical:a};if(/<!doctype|<html/i.test(o))return{title:i,detail:s("loadErrorHtml"),technical:a};let u=t.split(/[?#]/,1)[0],c=nn[n??S(t)],d=rn.test(u);return{title:i,detail:d||n?s(n?"loadErrorInvalidExplicitFormat":"loadErrorInvalidFile",{format:c}):s("loadErrorMissingFormat",{format:c}),technical:a}}import{useEffect as sn,useState as an}from"react";var X=80,ln=99,un=6e3,cn=200;function dn(e,t=0){let n=Math.min(Math.max(e,0),100);return n<100?n/100*X:X+(ln-X)*(1-Math.exp(-t/un))}function fo(e,t=!1){let n=e!==null&&e>=100&&!t,[r,o]=an(0);return sn(()=>{if(!n){o(0);return}let s=performance.now(),i=setInterval(()=>o(performance.now()-s),cn);return()=>clearInterval(i)},[n]),e===null?null:t?100:dn(e,r)}import{DataTexture as fn,DataUtils as Xe,EquirectangularReflectionMapping as pn,HalfFloatType as mn,LinearFilter as He,LinearSRGBColorSpace as bn,RGBAFormat as gn,Vector3 as y}from"three";var Je="neutral",hn=[{direction:[.62,.48,.62],size:[.38,.28],radiance:9},{direction:[-.75,.2,.55],size:[.32,.36],radiance:3.5},{direction:[0,1,0],size:[.55,.55],radiance:4},{direction:[.15,.3,-1],size:[.45,.16],radiance:5}],A=(e,t,n)=>{let r=Math.min(Math.max((n-e)/(t-e),0),1);return r*r*(3-2*r)},vn=hn.map(e=>{let t=new y(...e.direction).normalize(),n=Math.abs(t.y)>.9?new y(0,0,1):new y(0,1,0),r=new y().crossVectors(n,t).normalize(),o=new y().crossVectors(t,r).normalize();return{center:t,right:r,up:o,box:e}}),yn=.9;function wn(e){let t=e.y,n=.2+.18*A(-.35,.05,t)+.17*A(0,.9,t);for(let{center:r,right:o,up:s,box:i}of vn){let a=e.dot(r);if(a<=0)continue;let l=Math.abs(e.dot(o)/a)/i.size[0],u=Math.abs(e.dot(s)/a)/i.size[1],c=(1-A(.82,1,l))*(1-A(.82,1,u));n+=i.radiance*c}return n*yn}var H=null;function Ye(){if(H)return H;let e=512,t=256,n=new Uint16Array(e*t*4),r=new y;for(let s=0;s<t;s++){let i=((s+.5)/t-.5)*Math.PI;for(let a=0;a<e;a++){let l=((a+.5)/e-.5)*2*Math.PI;r.set(Math.cos(i)*Math.cos(l),Math.sin(i),Math.cos(i)*Math.sin(l));let u=Xe.toHalfFloat(wn(r)),c=(s*e+a)*4;n[c]=u,n[c+1]=u,n[c+2]=u,n[c+3]=Xe.toHalfFloat(1)}}let o=new fn(n,e,t,gn,mn);return o.mapping=pn,o.colorSpace=bn,o.magFilter=He,o.minFilter=He,o.generateMipmaps=!1,o.needsUpdate=!0,H=o,o}import{lazy as xn,useLayoutEffect as Mn}from"react";import{useThree as Ke}from"@react-three/fiber";import{jsx as J}from"react/jsx-runtime";var qe=xn(()=>import("./DownloadedEnvironment-NHM4U2LJ.mjs"));function yo({preset:e,files:t,...n}){return!t&&e===Je?J(Sn,{...n}):t?J(qe,{files:t,...n}):J(qe,{preset:e,...n})}function Sn({background:e=!1,environmentIntensity:t=1,backgroundIntensity:n=1,backgroundBlurriness:r=0}){let o=Ke(i=>i.scene),s=Ke(i=>i.invalidate);return Mn(()=>{let i=Ye(),a={environment:o.environment,environmentIntensity:o.environmentIntensity,background:o.background,backgroundIntensity:o.backgroundIntensity,backgroundBlurriness:o.backgroundBlurriness};return o.environment=i,o.environmentIntensity=t,e&&(o.background=i,o.backgroundIntensity=n,o.backgroundBlurriness=r),s(),()=>{Object.assign(o,a),s()}},[o,s,e,t,n,r]),null}import{useFrame as Y,useThree as h}from"@react-three/fiber";import{ContactShadows as En}from"@react-three/drei";import{Color as Ln,PerspectiveCamera as Pn}from"three";import{useEffect as R,useLayoutEffect as et,useRef as An}from"react";import{Fragment as zn,jsx as Qe,jsxs as Cn}from"react/jsx-runtime";function Ao({active:e}){let t=h(n=>n.invalidate);return R(()=>{e&&t()},[e,t]),Y(()=>{e&&t()}),null}function Ro(e){let t=h(r=>r.gl),n=An(t.autoClear);return Y(()=>{n.current=t.autoClear,t.autoClear=!0},-1),Cn(zn,{children:[Qe(En,{...e}),Qe(Rn,{saved:n})]})}function Rn({saved:e}){let t=h(n=>n.gl);return Y(()=>{t.autoClear=e.current}),null}function zo({color:e}){let{scene:t,invalidate:n}=h();return et(()=>(t.background=e?new Ln(e):null,n(),()=>{t.background=null}),[t,e,n]),null}function Co(){let e=h(t=>t.invalidate);return R(()=>{e()},[e]),null}function Oo({rotation:e}){let{scene:t,invalidate:n}=h();return et(()=>{let r=e*Math.PI/180;t.environmentRotation.set(0,r,0),t.backgroundRotation.set(0,r,0)}),R(()=>{n()},[e,n]),null}function ko({cameraConfig:e}){let{camera:t,invalidate:n}=h();return R(()=>{if(!(t instanceof Pn))return;let r=e?.fov;typeof r=="number"&&t.fov!==r&&(t.fov=r,t.updateProjectionMatrix(),n())},[t,e,n]),null}var On=["minDistance","maxDistance","minPolarAngle","maxPolarAngle","minAzimuthAngle","maxAzimuthAngle","panBoundary","boundaryEnclosesCamera","boundaryFriction"];function Fo(e){if(!e)return;let t=e.floorOutline;if(t&&t.points?.length>=3)return{floorOutline:t};if(e.insideModel)return{insideModel:!0};if(e.aroundModel)return{aroundModel:!0};let n={};for(let r of On)e[r]!==void 0&&(n[r]=e[r]);return Object.keys(n).length?n:void 0}var z=e=>e*Math.PI/180;function Uo(e){return{minDistance:e?.minDistance??0,maxDistance:e?.maxDistance??1/0,minPolarAngle:z(e?.minPolarAngle??0),maxPolarAngle:z(e?.maxPolarAngle??180),minAzimuthAngle:z(e?.minAzimuthAngle??-1/0),maxAzimuthAngle:z(e?.maxAzimuthAngle??1/0),boundaryEnclosesCamera:e?.boundaryEnclosesCamera??!1,boundaryFriction:e?.boundaryFriction??0,panBoundary:e?.panBoundary}}import{useEffect as kn}from"react";import{useThree as tt}from"@react-three/fiber";function nt(e,t,{zoom:n,pageScroll:r},o){if(!n)return{wheel:t.NONE,middle:t.NONE,two:t.TOUCH_TRUCK};let s=r&&!o?t.NONE:e.wheel;return{...e,wheel:s}}function Bn({pageScroll:e}){return e?"pan-y":null}function jo({controlsRef:e,zoom:t=!0,pageScroll:n=!1}){let r=tt(i=>i.gl.domElement),s=tt(i=>i.events.connected)??r;return kn(()=>{let i=e&&typeof e=="object"?e.current:null,a=i?.constructor.ACTION;if(!i||!a||!s||t&&!n)return;let l={zoom:t,pageScroll:n},u={wheel:i.mouseButtons.wheel,middle:i.mouseButtons.middle,two:i.touches.two},c=b=>{i.mouseButtons.wheel=b.wheel,i.mouseButtons.middle=b.middle,i.touches.two=b.two};c(nt(u,a,l));let d=b=>{c(nt(u,a,l,b.ctrlKey||b.metaKey))};s.addEventListener("wheel",d,{capture:!0,passive:!0});let f=Bn(l),p=[...new Set([r,s])],m=p.map(b=>[b,b.style.touchAction]),L=null;if(f){let b=()=>{if(i.enabled)for(let v of p)v.style.touchAction!==f&&(v.style.touchAction=f)};b(),L=new MutationObserver(b);for(let v of p)L.observe(v,{attributes:!0,attributeFilter:["style"]})}return()=>{if(s.removeEventListener("wheel",d,{capture:!0}),L?.disconnect(),f)for(let[b,v]of m)b.style.touchAction=v;c(u)}},[e,r,s,t,n]),null}import{useLoader as ot,useThree as Tn}from"@react-three/fiber";import{FileLoader as it,Loader as Fn,LoadingManager as Un}from"three";import{GLTFLoader as In}from"three-stdlib";var O=class extends Fn{constructor(){super(...arguments);this.options={source:{format:"glb"}}}configure(n){return this.options=n,this}load(n,r,o,s){let i=performance.now(),a={format:this.options.source.format,name:this.options.source.entryPath??le(n),sourceBytes:this.options.source.sourceBytes??null,failedResources:[]},l=u=>{a.sourceBytes===null&&u.lengthComputable&&u.total>0&&(a.sourceBytes=u.total),o?.(u)};this.loadAsset(n,l,a).then(u=>{a.loadDurationMs=Math.max(0,performance.now()-i),F(u.scene,a),r(u)}).catch(u=>{a.loadDurationMs=Math.max(0,performance.now()-i),u&&typeof u=="object"&&F(u,a),s?.(u)})}async loadAsset(n,r,o){let s=jn(this.options.source);s.onError=u=>{let c=Object.entries(this.options.source.resourceUrls??{}).find(([,f])=>f===u)?.[0],d=ue(c??u);o.failedResources.includes(d)||o.failedResources.push(d)};let{format:i}=this.options.source;if(i==="obj")return Dn(n,s,this.options.source,r);if(i==="fbx"){let{FBXLoader:u}=await import("three/examples/jsm/loaders/FBXLoader.js"),c=K(this,new u(s)),d=Vn(n,this.options.source);d&&c.setResourcePath(d);let f=await c.loadAsync(n,r);return C(f,"FBXMesh",!1),{scene:f,animations:f.animations??[]}}if(i==="stl"||i==="ply"){let{meshNameFromPath:u,parsePly:c,parseStl:d}=await import("./meshFormats-4C6NHYOA.mjs"),f=await Nn(n,s,r),p=u(this.options.source.entryPath??n,i==="stl"?"STL model":"PLY model"),m=i==="stl"?d(f,p):c(f,p);return C(m,i==="stl"?"STLMesh":"PLYMesh",!0),{scene:m,animations:[]}}if(i==="usdz"){let{USDLoader:u}=await import("three/examples/jsm/loaders/USDLoader.js"),d=await K(this,new u(s)).loadAsync(n,r);return C(d,"USDZMesh",!1),{scene:d,animations:d.animations??[]}}let a=K(this,new In(s));de(a,this.options.decoderConfig,this.options.renderer),a.register(u=>{let c=u.json,d=f=>Array.isArray(f)?f.filter(p=>typeof p=="string"):[];return o.extensionsUsed=d(c.extensionsUsed),o.extensionsRequired=d(c.extensionsRequired),{name:"RI_asset_diagnostics",beforeRoot:()=>null}});let l=await a.loadAsync(n,r);return{scene:l.scene,animations:l.animations??[],materialVariants:ie(l)}}};pe(e=>{ot.clear(O,e)});function Yo(e,t={},n,r){let o=Tn(a=>a.gl),s=Me(e),i=n?{...s,format:n}:s;return ot(O,e,a=>{a.configure({source:i,decoderConfig:t,renderer:o})},r)}async function Dn(e,t,n,r){let[{OBJLoader:o},s]=await Promise.all([import("three/examples/jsm/loaders/OBJLoader.js"),rt(e,t,r)]),i=new o(t),a=Gn(s);if(a){let u=_n(a,e,n);if(u)try{let c=await rt(u.url,t),{MTLLoader:d}=await import("three/examples/jsm/loaders/MTLLoader.js"),p=new d(t).parse(c,u.basePath);p.preload(),i.setMaterials(p)}catch(c){console.warn(`[react-immersive] Could not load OBJ material ${a}; rendering geometry with fallback materials.`,c)}}let l=i.parse(s);return C(l,"OBJMesh",!0),{scene:l,animations:[]}}function C(e,t,n){let r=new Set,o=0;e.traverse(s=>{if(!("isMesh"in s&&s.isMesh===!0)){s.name&&r.add(s.name);return}let a=s.name||`${t}_${++o}`;if(!n&&s.name){r.add(s.name);return}let l=a,u=2;for(;r.has(l);)l=`${a}_${u++}`;s.name=l,r.add(l)})}function rt(e,t,n){let r=new it(t);return r.setResponseType("text"),r.loadAsync(e,n)}function Nn(e,t,n){let r=new it(t);return r.setResponseType("arraybuffer"),r.loadAsync(e,n)}function K(e,t){return t.setCrossOrigin(e.crossOrigin),t.setWithCredentials(e.withCredentials),t.setRequestHeader(e.requestHeader),t}function jn(e){let t=new Un,n=e.resourceUrls;return n&&t.setURLModifier(r=>{if(/^(?:blob:|data:)/i.test(r))return r;let o=B(at(r).split(/[?#]/)[0]),s=n[o];if(s)return s;let i=k(e.entryPath??""),a=B(i?`${i}/${o}`:o);return n[a]??r}),t}function Gn(e){return/^\s*mtllib\s+(.+?)\s*$/im.exec(e)?.[1]?.trim()||null}function _n(e,t,n){if(n.resourceUrls&&n.entryPath){let r=B(`${k(n.entryPath)}/${at(e)}`),o=n.resourceUrls[r];if(!o)return null;let s=k(r);return{url:o,basePath:s?`${s}/`:""}}try{let r=new URL(e,t).href;return{url:r,basePath:st(r)}}catch{return null}}function Vn(e,t){if(t.resourceUrls&&t.entryPath){let n=k(t.entryPath);return n?`${n}/`:""}return st(e)}function st(e){let t=e.lastIndexOf("/");return t===-1?"":e.slice(0,t+1)}function k(e){let t=B(e),n=t.lastIndexOf("/");return n===-1?"":t.slice(0,n)}function B(e){let t=[];for(let n of e.replace(/\\/g,"/").replace(/^\/+/,"").split("/").filter(r=>r&&r!=="."))n===".."?t.pop():t.push(n);return t.join("/")}function at(e){try{return decodeURI(e)}catch{return e}}import{Box3 as q,Matrix4 as Wn,Sphere as $n,Vector3 as Q}from"three";var lt=new WeakMap,ut=new Q,Zn=new Q,Xn=new Q,Hn=new q,ct=new Wn;function w(e){return"data"in e?e.data.version:e.version}function Jn(e){var l;let{geometry:t,skeleton:n}=e,r=t.getAttribute("position"),o=t.getAttribute("skinIndex"),s=t.getAttribute("skinWeight"),i=lt.get(e);if(i?.geometry===t&&i.position===r&&i.indices===o&&i.weights===s&&i.skeleton===n&&i.bindMatrix.equals(e.bindMatrix)&&i.versions[0]===w(r)&&i.versions[1]===w(o)&&i.versions[2]===w(s)&&i.inverses.length===n.boneInverses.length&&i.inverses.every((u,c)=>u.equals(n.boneInverses[c])))return i;let a={geometry:t,position:r,indices:o,weights:s,skeleton:n,versions:[w(r),w(o),w(s)],bindMatrix:e.bindMatrix.clone(),inverses:n.boneInverses.map(u=>u.clone()),bones:[],weightDeviation:0};e:for(let u=0;u<r.count;u++){ut.fromBufferAttribute(r,u).applyMatrix4(e.bindMatrix);let c=0;for(let f=0;f<4;f++){let p=s.getComponent(u,f);if(p===0)continue;let m=o.getComponent(u,f);if(!Number.isFinite(p)||p<0||!Number.isInteger(m)||!n.bones[m]||!a.inverses[m]){a.bones=null;break e}c+=p,((l=a.bones)[m]??(l[m]=new q)).expandByPoint(Zn.copy(ut).applyMatrix4(a.inverses[m]))}let d=Math.abs(c-1);if(d>1e-4){a.bones=null;break}a.weightDeviation=Math.max(a.weightDeviation,d)}return lt.set(e,a),a}function ei(e,{precise:t=!1,updateFallbacks:n=!0}={}){e.updateMatrixWorld(!0),e.traverse(r=>{if(!te(r))return;let o=r;if(!o.skeleton)return;let s=ne(o);s&&o.bindMatrixInverse.copy(s);let a=!!o.geometry.morphAttributes.position?.length?null:Jn(o);if(!t&&!a?.bones&&!n&&o.boundingBox&&o.boundingSphere)return;let l=o.boundingBox??(o.boundingBox=new q),u=o.boundingSphere??(o.boundingSphere=new $n);if(l.makeEmpty(),t||!a?.bones){let c=o.geometry.getAttribute("position");for(let d=0;d<c.count;d++)l.expandByPoint(o.getVertexPosition(d,Xn))}else{for(let c=0;c<a.bones.length;c++){let d=a.bones[c];d&&(ct.multiplyMatrices(o.bindMatrixInverse,o.skeleton.bones[c].matrixWorld),l.union(Hn.copy(d).applyMatrix4(ct)))}if(!l.isEmpty()){let c=l.min,d=l.max,f=o.bindMatrixInverse.elements,p=Math.max(1,Math.abs(c.x),Math.abs(c.y),Math.abs(c.z),Math.abs(d.x),Math.abs(d.y),Math.abs(d.z)),m=Math.max(Math.abs(c.x-f[12]),Math.abs(d.x-f[12]),Math.abs(c.y-f[13]),Math.abs(d.y-f[13]),Math.abs(c.z-f[14]),Math.abs(d.z-f[14]));l.expandByScalar(a.weightDeviation*m+p*1e-10)}}l.getBoundingSphere(u)})}import{useCallback as dt,useEffect as Yn,useRef as Kn}from"react";import{useThree as qn}from"@react-three/fiber";function oi(){let e=qn(o=>o.gl.domElement),t=Kn(void 0),n=dt(o=>{t.current===void 0&&(t.current=e.style.cursor),e.style.cursor=o},[e]),r=dt(()=>{let o=t.current;o!==void 0&&(e.style.cursor=o,t.current=void 0)},[e]);return Yn(()=>()=>{r()},[r]),{setCanvasCursor:n,restoreCanvasCursor:r}}import{Box3 as Qn,Vector3 as ft}from"three";function T(e){return[e.x,e.y,e.z]}function li(e){let t=new Qn().setFromObject(e),n=0;return e.traverse(r=>{r.isMesh&&(n+=1)}),{bounds:{min:T(t.min),max:T(t.max),center:T(t.getCenter(new ft)),size:T(t.getSize(new ft))},objectCount:n,materialVariants:se(e),materialVariantGroups:ae(e)}}import{jsx as E,jsxs as ee}from"react/jsx-runtime";function mi({visible:e,title:t,message:n,progress:r,background:o,seeThrough:s=!1}){if(!e)return null;let i=o!==void 0&&Ze(o),a=s?"transparent":o,l=typeof r=="number"&&Number.isFinite(r),u=l?Math.round(Math.min(Math.max(r,0),100)):0;return E("div",{className:`bb-loadingOverlay${i?" bb-loadingOverlay--light":""}`,style:a?{background:a}:void 0,role:"status","aria-live":"polite",children:ee("div",{className:"bb-loadingCard",children:[ee("div",{className:"bb-loadingHeader",children:[E("span",{className:"bb-loadingTitle",title:t??n,children:t??n}),l?ee("span",{className:"bb-loadingPercent",children:[u,"%"]}):null]}),E("div",{className:`bb-loadingProgress ${l?"":"bb-loadingProgress--unknown"}`,role:"progressbar","aria-label":t??n,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":l?u:void 0,children:E("div",{className:"bb-loadingProgress__bar",style:l?{width:`${u}%`}:void 0})}),t?E("span",{className:"bb-loadingMessage",children:n}):null]})})}export{Re as a,cr as b,dr as c,Wt as d,Ir as e,W as f,Dr as g,x as h,rr as i,Me as j,or as k,Te as l,Er as m,Lr as n,wr as o,Cr as p,Or as q,kr as r,Br as s,Zr as t,en as u,Qr as v,ro as w,lo as x,fo as y,Je as z,yo as A,Ao as B,Ro as C,zo as D,Co as E,Oo as F,ko as G,Fo as H,Uo as I,jo as J,Yo as K,ei as L,oi as M,li as N,mi as O};
@@ -0,0 +1 @@
1
+ import{a as B,c as E}from"./chunk-TUYVYSN5.mjs";import{a as M,f as w,h as N,i as I}from"./chunk-RXZ4Q7CY.mjs";import"./chunk-JR557W27.mjs";import{AnimationClip as F,Group as x,Matrix4 as q,Mesh as P,PropertyBinding as k,Quaternion as C,Scene as U,Vector3 as A}from"three";import{GLTFExporter as G,SkeletonUtils as K}from"three-stdlib";var W="reactImmersiveSkinFreeze",L=new Set(["position","quaternion","scale","morphTargetInfluences"]);function se({sources:n,downloadFilename:e,filenameSuffix:a="",onComplete:r}){let s=new U,c=[];try{for(let l of n){let t=_(l,n.length>1);if(n.length===1)s.name=t.sceneName,s.userData=t.sceneUserData,t.nodes.length&&s.add(...t.nodes);else{let i=new x;i.name=l.label??t.sceneName,t.nodes.length&&i.add(...t.nodes),s.add(i)}c.push(...t.animations)}}catch(l){console.error("GLB export failed:",l),r();return}new G().parse(s,l=>{let t=l instanceof ArrayBuffer?new Blob([l],{type:"model/gltf-binary"}):new Blob([JSON.stringify(l)],{type:"model/gltf+json"}),i=l instanceof ArrayBuffer?".glb":".gltf";B(t,`${e}${a}${i}`),r()},l=>{console.error("GLTFExporter error:",l),r()},{binary:!0,onlyVisible:!0,animations:c})}function _(n,e){let{root:a,clone:r,animations:s}=H(n,e);return r?{sceneName:r.name,sceneUserData:{...r.userData},nodes:z(a,r,s),animations:s}:{sceneName:n.scene.name,sceneUserData:{},nodes:[],animations:s}}function z(n,e,a){n.updateWorldMatrix(!0,!0);let r=e.matrixWorld.clone(),s=[...e.children],c=()=>(s.forEach(t=>e.remove(t)),s),p=new Set(a.flatMap(t=>t.tracks.map(i=>k.parseTrackName(i.name).nodeName)));if(p.has(e.uuid))return[n.children[0]];if(r.equals(V))return c();let l=[];for(let t of s){if(p.has(t.uuid))return[n.children[0]];t.updateMatrix();let i=r.clone().multiply(t.matrix),f=new A,b=new C,h=new A;i.decompose(f,b,h);let D=new q().compose(f,b,h);if(!Y(D,i))return[n.children[0]];l.push(i)}return s.forEach((t,i)=>{l[i].decompose(t.position,t.quaternion,t.scale),t.matrix.copy(l[i])}),c()}var V=new q;function Y(n,e){let a=Math.max(1,...e.elements.map(Math.abs));return n.elements.every((r,s)=>Math.abs(r-e.elements[s])<=1e-6*a)}function H({scene:n,objectBindings:e,matRefs:a,label:r},s){let c=new x;c.name=r??n.name??"";let p=new Map;for(let[o,u]of Object.entries(e))p.set(u.modelObjectId??o,o);let l=o=>{let u=o.name||o.uuid;return p.get(u)??u},t=o=>{let u=e[l(o)];return u?u.visible===!1:o.visible===!1};for(let o=n;o;o=o.parent)if(t(o))return{root:c,clone:null,animations:[]};n.updateWorldMatrix(!0,!0);let i=K.clone(n),f=new Map,b=[],h=[];n.traverse(o=>b.push(o)),i.traverse(o=>h.push(o)),b.forEach((o,u)=>f.set(o,h[u]));let D=[];for(let o=n.parent;o;o=o.parent)D.unshift(o);let O=c;for(let o of D){let u=v(o);O.add(u),O=u}O.add(i);let m=new Map,d=[],y=new Set;for(let o of b){let u=f.get(o);if(o.userData?.isWireframeOverlay){d.push(u);continue}delete u.userData[W];let g=u;if(g.isMesh){let S=a[l(o)];g.material=R(S??g.material,m)}(t(o)||o.parent&&y.has(o.parent))&&y.add(o),u.visible=!0}d.forEach(o=>o.removeFromParent());for(let o of y){let u=f.get(o);if(T(u,c)){if(!Z(u)){u.removeFromParent();continue}if(u.isMesh){let g=v(u);g.name=u.name,g.userData=u.userData;for(let S of[...u.children])g.add(S);u.parent.add(g),u.removeFromParent(),f.set(o,g)}}}let j=X(n,c,f,s&&r?`${r}: `:"");return j.length===0?Q(b,f,c):J(b,f,c,j),{root:c,clone:i,animations:j}}function R(n,e){if(Array.isArray(n))return n.map(p=>R(p,e));let a=n,r=e.get(a);if(r)return r;let s=null;for(let[p,l]of Object.entries(a)){let t=l;if(!t?.isTexture||t.center.x===0&&t.center.y===0)continue;let{offset:i,repeat:f,rotation:b,center:h}=t,D=Math.cos(b),O=Math.sin(b),m=t.clone();m.center.set(0,0),m.offset.set(-f.x*(D*h.x+O*h.y)+h.x+i.x,-f.y*(-O*h.x+D*h.y)+h.y+i.y),s??(s=a.clone()),s[p]=m}let c=s??a;return e.set(a,c),c}function v(n){let e=new x;return e.position.copy(n.position),e.quaternion.copy(n.quaternion),e.scale.copy(n.scale),e.matrix.copy(n.matrix),e.matrixAutoUpdate=n.matrixAutoUpdate,e}function J(n,e,a,r){let s=r.map(c=>[...c.tracks]);for(let c of n){let p=w(c),l=e.get(c);if(!p||!M(l)||!T(l,a))continue;let t=l,i=new Set;for(let m of t.skeleton.bones)for(let d=m;d&&(i.add(d),d!==a);d=d.parent);let f=new Map,b=m=>{let d=m.isBone?m.clone(!1):v(m);f.set(m.uuid,d);for(let y of m.children)i.has(y)&&d.add(b(y));return d},h=b(a),D=new x,O=D;for(let m of[...p].reverse()){let d=new x;m.decompose(d.position,d.quaternion,d.scale);let y=new x;y.scale.set(1/d.scale.x,1/d.scale.y,1/d.scale.z);let j=new x;j.quaternion.copy(d.quaternion).invert();let o=new x;o.position.copy(d.position).negate(),O.add(y),y.add(j),j.add(o),O=o}O.add(h),t.add(D),t.skeleton.bones=t.skeleton.bones.map(m=>f.get(m.uuid)),r.forEach((m,d)=>{for(let y of s[d]){let j=k.parseTrackName(y.name);if(j.propertyName==="morphTargetInfluences")continue;let o=f.get(j.nodeName);if(!o)continue;let u=y.clone();u.name=$(o.uuid,j),m.tracks.push(u)}})}}function Q(n,e,a){a.updateWorldMatrix(!0,!0);for(let r of n){let s=e.get(r);if(!M(r)||!M(s)||!s.parent||!T(s,a))continue;let c=s,p=new P(N(r),c.material);p.name=c.name,p.userData=c.userData,p.matrix.copy(s.parent.matrixWorld).invert().multiply(I(r)),p.matrixAutoUpdate=!1,p.matrix.decompose(p.position,p.quaternion,p.scale);let l=s.parent;l.children.splice(l.children.indexOf(s),1,p),p.parent=l,s.parent=null,p.updateMatrixWorld(!0);for(let t of[...s.children])p.attach(t)}}function Z(n){let e=!1;return n.traverse(a=>{a.isBone&&(e=!0)}),e}function T(n,e){for(let a=n;a;a=a.parent)if(a===e)return!0;return!1}function X(n,e,a,r){let s=[];for(let c of n.animations??[]){let p=[];for(let l of c.tracks){let t=k.parseTrackName(l.name);if(!L.has(t.propertyName))continue;let i=k.findNode(n,t.nodeName);if(t.objectName){if(t.objectName!=="bones"||!i||!M(i))continue;i=i.skeleton.getBoneByName(t.objectIndex)??null,t.objectName="",t.objectIndex=""}let f=i?a.get(i):void 0;if(!f||!T(f,e)||t.propertyName==="morphTargetInfluences"&&!f.morphTargetInfluences)continue;ee(i,f,t.propertyName);let b=l.clone();b.name=$(f.uuid,t),p.push(b)}p.length!==0&&s.push(new F(`${r}${c.name}`,c.duration,p,c.blendMode))}return s}function ee(n,e,a){let r=E(n);r&&(a==="position"?e.position.copy(r.position):a==="quaternion"?e.quaternion.copy(r.quaternion):a==="scale"?e.scale.copy(r.scale):a==="morphTargetInfluences"&&r.morphTargetInfluences&&e.morphTargetInfluences?.length===r.morphTargetInfluences.length&&(e.morphTargetInfluences=[...r.morphTargetInfluences]))}function $(n,e){let a=e.objectName?`.${e.objectName}${e.objectIndex!==void 0?`[${e.objectIndex}]`:""}`:"",r=e.propertyIndex!==void 0?`[${e.propertyIndex}]`:"";return`${n}${a}.${e.propertyName}${r}`}export{se as exportSceneMesh};