@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.
- package/dist/AnimationsTab-IKAAKT3P.mjs +1 -0
- package/dist/AnnotationsTab-NEJIXCOM.mjs +1 -0
- package/dist/CinematicTab-TIQXCPFE.mjs +1 -0
- package/dist/ConfigureTab-NYRMOFW4.mjs +6 -0
- package/dist/RulesTab-2U4MFYOZ.mjs +1 -0
- package/dist/SequencesTab-LTMJTB76.mjs +1 -0
- package/dist/SequencesTab-O7USMDFP.css +1 -0
- package/dist/{StreamingTilesModel-6Z7SIC2J.mjs → StreamingTilesModel-IM2DDWO5.mjs} +1 -1
- package/dist/binding-builder.css +1 -1
- package/dist/binding-builder.d.mts +3 -3
- package/dist/binding-builder.d.ts +3 -3
- package/dist/binding-builder.js +45 -45
- package/dist/binding-builder.mjs +1 -1
- package/dist/{chunk-25WC5KDO.mjs → chunk-2LGQKX6Z.mjs} +1 -1
- package/dist/chunk-37QOMZW6.mjs +1 -0
- package/dist/chunk-3PLML3PO.mjs +1 -0
- package/dist/chunk-5C4H7SRF.mjs +1 -0
- package/dist/chunk-IT2PUTJS.mjs +1 -0
- package/dist/chunk-LEOHZ5HM.mjs +69 -0
- package/dist/chunk-RSUXTWM6.mjs +1 -0
- package/dist/{chunk-3OCHN3CA.mjs → chunk-SOAUR4DL.mjs} +1 -1
- package/dist/chunk-SXN3YYD3.mjs +1 -0
- package/dist/chunk-WU3SQZGD.mjs +3 -0
- package/dist/{chunk-UTVFRMYW.mjs → chunk-XKJQC3N5.mjs} +2 -2
- package/dist/exportSceneMesh-MSQIMBFF.mjs +1 -0
- package/dist/hosted.css +1 -1
- package/dist/hosted.d.mts +5 -3
- package/dist/hosted.d.ts +5 -3
- package/dist/hosted.js +44 -44
- package/dist/hosted.mjs +1 -1
- package/dist/index.css +1 -1
- package/dist/index.d.mts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +42 -42
- package/dist/index.mjs +1 -1
- package/dist/{modelFileResolver-CVmON8hg.d.mts → modelFileResolver-Bq4pW9vc.d.mts} +39 -29
- package/dist/{modelFileResolver-CVmON8hg.d.ts → modelFileResolver-Bq4pW9vc.d.ts} +39 -29
- package/dist/{modelViewerProps-CIY4nsNY.d.mts → modelViewerProps-BnrJO5DK.d.ts} +2 -1
- package/dist/{modelViewerProps-BBnZTFO-.d.ts → modelViewerProps-wjBT4fks.d.mts} +2 -1
- package/dist/{publicProps-BARVwXu7.d.ts → publicProps-BZPMIRwj.d.ts} +1 -1
- package/dist/{publicProps-n0Yvr_Km.d.mts → publicProps-CW5X_HFh.d.mts} +1 -1
- package/dist/simple-model-viewer.css +1 -1
- package/dist/simple-model-viewer.d.mts +2 -2
- package/dist/simple-model-viewer.d.ts +2 -2
- package/dist/simple-model-viewer.js +5 -5
- package/dist/simple-model-viewer.mjs +1 -1
- package/dist/utils.d.mts +4 -4
- package/dist/utils.d.ts +4 -4
- package/dist/utils.js +1 -1
- package/dist/utils.mjs +1 -1
- package/package.json +1 -1
- package/dist/AnimationsTab-NUJTEMZ5.mjs +0 -1
- package/dist/AnnotationsTab-OHRVWRKI.mjs +0 -1
- package/dist/CinematicTab-IJAY2BS6.mjs +0 -1
- package/dist/ConfigureTab-UQRRATCY.mjs +0 -6
- package/dist/RulesTab-YVBZGJZX.mjs +0 -1
- package/dist/SequencesTab-IC5LWQ6N.css +0 -1
- package/dist/SequencesTab-VZKEKAUG.mjs +0 -1
- package/dist/chunk-7OVEHDDE.mjs +0 -1
- package/dist/chunk-AL6UIGWP.mjs +0 -1
- package/dist/chunk-KYXJG3TX.mjs +0 -1
- package/dist/chunk-LD7QWHB4.mjs +0 -3
- package/dist/chunk-RKDATTUM.mjs +0 -1
- package/dist/chunk-UHRJ2RBF.mjs +0 -1
- package/dist/chunk-YKDDNX2D.mjs +0 -69
- package/dist/exportSceneMesh-YJFOLFHS.mjs +0 -1
package/dist/binding-builder.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{a as t,b as o,c as d}from"./chunk-
|
|
1
|
+
"use client";import{a as t,b as o,c as d}from"./chunk-IT2PUTJS.mjs";import{a}from"./chunk-MMO7KCYU.mjs";import{c as f}from"./chunk-WU3SQZGD.mjs";import"./chunk-E24EFHB5.mjs";import"./chunk-FXV4CLAK.mjs";import"./chunk-SXN3YYD3.mjs";import"./chunk-LEOHZ5HM.mjs";import"./chunk-RSUXTWM6.mjs";import"./chunk-FGAJ2UT7.mjs";import"./chunk-SOAUR4DL.mjs";import"./chunk-XKJQC3N5.mjs";import"./chunk-NMRTI3NQ.mjs";import"./chunk-37YITTIK.mjs";import"./chunk-2AJK643D.mjs";import"./chunk-5C4H7SRF.mjs";import"./chunk-3PLML3PO.mjs";import{ea as i,fa as r}from"./chunk-2LGQKX6Z.mjs";import"./chunk-LX3GXQNU.mjs";import"./chunk-7JCFNZJM.mjs";import"./chunk-37QOMZW6.mjs";import"./chunk-CCBFMNAU.mjs";import"./chunk-GV4ZRXL6.mjs";import"./chunk-7OWHW66D.mjs";import"./chunk-KFLS7GI6.mjs";import"./chunk-UAZ6I25Y.mjs";import"./chunk-BNKTI3CY.mjs";import"./chunk-UCD76KQ6.mjs";import"./chunk-TUYVYSN5.mjs";import"./chunk-RXZ4Q7CY.mjs";import"./chunk-JR557W27.mjs";import{useEffect as h,useState as m}from"react";import{jsx as l}from"react/jsx-runtime";function c(e){a("binding-builder","BindingBuilder");let[s,u]=m(!1);return h(()=>{let n=()=>u(e.arHandoff!==!1&&i(e.arHandoff)?.autoRestore!==!1&&r(window.location.href));return n(),window.addEventListener("hashchange",n),()=>window.removeEventListener("hashchange",n)},[e.arHandoff]),s?l(d,{modelUrl:"",licenseKey:e.licenseKey,onLicenseStatusChange:e.onLicenseStatusChange,enableXR:!0,arHandoff:e.arHandoff??!0,mobileHandoffUrl:e.mobileHandoffUrl,dracoDecoderPath:e.dracoDecoderPath,ktx2TranscoderPath:e.ktx2TranscoderPath,meshopt:e.meshopt,hideLicenseCheckingOverlay:e.hideLicenseCheckingOverlay}):l(f,{...o(e,t)})}export{c as BindingBuilder};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{e as Ae,f as ut}from"./chunk-LX3GXQNU.mjs";import{p as Mt}from"./chunk-7JCFNZJM.mjs";import{b as Le,c as xt,i as je,t as At}from"./chunk-UHRJ2RBF.mjs";import{a as ft,b as ve}from"./chunk-GV4ZRXL6.mjs";import{f as pt,h as gt}from"./chunk-7OWHW66D.mjs";import{a as Ct,o as ke,q as jt}from"./chunk-UCD76KQ6.mjs";import{a as ge,b as bt,c as ht,d as Me,e as Ce,f as yt,g as St,h as wt}from"./chunk-RXZ4Q7CY.mjs";var Oe=new WeakMap;function nr(e,t){return Oe.set(e,t),()=>{Oe.get(e)===t&&Oe.delete(e)}}function vt(e){Oe.get(e)?.()}var kt=new WeakMap;function $e(e){let t=kt.get(e);return t||(t={state:"active",listeners:new Set},kt.set(e,t)),t}function Ue(e){return e?$e(e).state:"active"}function _e(e){return Ue(e)==="paused"}function Fe(e,t){let o=$e(e);return o.listeners.add(t),()=>{o.listeners.delete(t)}}function ir(e,t){let o=$e(e);o.state!==t&&(o.state=t,o.listeners.forEach(n=>n()))}async function re(e,t,o){if(Ue(e)==="disconnected")throw new Error("The camera is disconnected from the viewer.");vt(e);let n=async()=>{await t(!1),e.update(0)};if(_e(e))return n();if(!o){await t(!1);return}let r=[];try{await new Promise((a,s)=>{let i=!1,c=l=>{i||(i=!0,l())};if(r.push(Fe(e,()=>{let l=Ue(e);l==="paused"?n().then(()=>c(a),f=>c(()=>s(f))):l==="disconnected"&&c(()=>s(new Error("The camera move was cancelled because the viewer disconnected.")))})),e.addEventListener&&e.removeEventListener){let l=!1,f=()=>{l=!0},u=()=>{l&&c(a)};e.addEventListener("update",f),e.addEventListener("sleep",u),r.push(()=>{e.removeEventListener?.("update",f),e.removeEventListener?.("sleep",u)})}Promise.resolve().then(()=>t(!0)).then(()=>c(a),l=>c(()=>s(l)))})}finally{r.forEach(a=>a())}}import{useCallback as Z,useRef as de,useState as He,useSyncExternalStore as Un}from"react";import{Vector3 as Et}from"three";var qe=new WeakSet;function me(e){qe.add(e)}function sr(e){let t=qe.has(e);return t&&qe.delete(e),t}var We=new WeakSet;function lr(e,t){t?We.add(e):We.delete(e)}function Ot(e,t){return We.has(e)?0:t}import{Box3 as It,Matrix4 as Ln,PerspectiveCamera as Rt,Vector3 as Ge}from"three";function fr(e,t){let o=pt(e);if(!(e.camera instanceof Rt)||!t)return o;let n=t instanceof It?t:new It().setFromObject(t);return n.isEmpty()||(o.framing={aspect:e.camera.aspect,min:n.min.toArray(),max:n.max.toArray()}),o}function Tt(e,t){let o=t.camera,n=e.framing;if(!(o instanceof Rt)||!n||!(o.aspect>0)||Math.abs(o.aspect-n.aspect)<1e-6)return[...e.position];let r=new Ge(...e.position),a=new Ge(...e.target),s=r.clone().sub(a).normalize(),i=new Ln().lookAt(r,a,o.up).invert(),c=Math.tan((e.fov??o.fov)*Math.PI/360)/(e.zoom??o.zoom);if(!(c>0)||!Number.isFinite(c))return[...e.position];let l=0;for(let f of[n.min[0],n.max[0]])for(let u of[n.min[1],n.max[1]])for(let m of[n.min[2],n.max[2]]){let d=new Ge(f,u,m).sub(r).applyMatrix4(i);l=Math.max(l,Math.abs(d.x)/(c*o.aspect)+d.z,Math.abs(d.y)/c+d.z)}return r.addScaledVector(s,l*1.02).toArray()}function Bt(e){return[e.x,e.y,e.z]}function ne(e,t){let o=new Et,n=new Et;return t.getPosition(o),t.getTarget(n),{position:Bt(o),target:Bt(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 $n(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 ue(e,t,o=.6){let n=e.smoothTime;e.smoothTime=Ot(e,o);try{await re(e,t,!0)}finally{e.smoothTime=n}}function jr(e={}){let t=de(e);t.current=e;let o=de(null),[n,r]=He(null),a=Z(y=>n?Fe(n,y):()=>{},[n]),s=Z(()=>_e(n),[n]),i=Un(a,s,()=>!1),[c,l]=He(null),[f,u]=He(()=>({...e.presets})),m=de(f);m.current=f;let d=Z(y=>{l(x=>$n(x,y)?x:y)},[]),p=Z(y=>{d(y)},[d]),M=de(null),b=de(null),S=de(null),A=Z(y=>{o.current=y,r(y.raw.controls);let x=ne(y.raw.controls.camera,y.raw.controls);d(x),y.raw.scene!==b.current&&(b.current=y.raw.scene,M.current=null,S.current=null),y.homeCameraState&&!M.current&&(M.current=y.homeCameraState);let{initialPosition:j,initialTarget:B,initialTransition:q=!1}=t.current;if((j||B)&&y.raw.scene&&(j||y.homeCameraState)&&S.current!==y.raw.controls){S.current=y.raw.controls,y.homeCameraState||me(y.raw.controls);let W=j??x.position,K=B??x.target;re(y.raw.controls,J=>y.raw.controls.setLookAt(W[0],W[1],W[2],K[0],K[1],K[2],J),q).then(()=>{if(o.current?.raw.controls!==y.raw.controls)return;let J=ne(y.raw.controls.camera,y.raw.controls);M.current={position:J.position,target:J.target},d(J)}).catch(()=>{})}},[d]),g=Z(async()=>{let y=o.current,x=y?.raw.controls;if(!x)return!1;try{let j=M.current;if(j){gt(x,j);let B=Tt(j,x);await ue(x,q=>x.setLookAt(B[0],B[1],B[2],j.target[0],j.target[1],j.target[2],q))}else y?.raw.scene?await ue(x,B=>x.fitToBox(y.raw.scene,B,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})):await ue(x,B=>x.reset(B));return!0}catch{return!1}},[]),w=Z(async()=>{let y=o.current;if(!y?.raw.controls||!y.raw.scene)return!1;try{return await ue(y.raw.controls,x=>y.raw.controls.fitToBox(y.raw.scene,x,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),v=Z(async y=>{let x=o.current;if(!x?.raw.controls)return!1;let j=ft(x.objectBindings,y);if(!j)return!1;let B=x.objectBindings[j]?.cameraState;if(B?.position&&B?.target){let[W,K,J]=B.position,[_,I,U]=B.target;try{return await ue(x.raw.controls,L=>x.raw.controls.setLookAt(W,K,J,_,I,U,L)),!0}catch{return!1}}let q=x.raw.nodes[j];if(!q)return!1;try{return await ue(x.raw.controls,W=>x.raw.controls.fitToBox(q,W,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),P=Z(async(y,x=!0)=>{let j=o.current?.raw.controls;if(!j)return!1;try{return o.current?.homeCameraState||me(j),await re(j,B=>j.setTarget(y[0],y[1],y[2],B),x),d(ne(j.camera,j)),!0}catch{return!1}},[d]),T=Z(async(y,x=!0)=>{let j=o.current?.raw.controls;if(!j)return!1;try{o.current?.homeCameraState||me(j),await re(j,async W=>{let K=[j.setLookAt(y.position[0],y.position[1],y.position[2],y.target[0],y.target[1],y.target[2],W)];y.azimuthAngle!=null&&y.polarAngle!=null&&K.push(j.rotateTo(y.azimuthAngle,y.polarAngle,W)),await Promise.all(K)},x);let B=j.camera,q=!1;return y.fov!=null&&"fov"in B&&typeof B.fov=="number"&&(B.fov=y.fov,q=!0),y.zoom!=null&&"zoom"in B&&typeof B.zoom=="number"&&(B.zoom=y.zoom,q=!0),q&&"updateProjectionMatrix"in B&&B.updateProjectionMatrix(),d(ne(B,j)),!0}catch{return!1}},[d]),N=Z((y,x=!0)=>T(y,x),[T]),O=Z((y,x,j=!0)=>T({position:y,target:x},j),[T]),h=Z(async(y,x,j=!0)=>{let B=o.current?.raw.controls;if(!B)return!1;try{return o.current?.homeCameraState||me(B),await re(B,q=>B.rotateTo(y*Math.PI/180,x*Math.PI/180,q),j),d(ne(B.camera,B)),!0}catch{return!1}},[d]),C=Z(async(y,x=!0)=>{let j=o.current?.raw.controls;if(!j)return!1;try{return o.current?.homeCameraState||me(j),await re(j,B=>j.dollyTo(y,B),x),d(ne(j.camera,j)),!0}catch{return!1}},[d]),k=Z(y=>{let x={...y};m.current=x,u(x)},[]),E=Z(y=>{let x=o.current?.raw.controls,j=y.trim();if(!x||!j)return null;let B=ne(x.camera,x);return m.current={...m.current,[j]:B},u(q=>({...q,[j]:B})),d(B),B},[d]),V=Z((y,x=!0)=>{let j=m.current[y];return j?T(j,x):Promise.resolve(!1)},[T]);return{isRenderPaused:i,cameraState:c,cameraPresets:f,setCameraPresets:k,resetView:g,focusObject:v,fitScene:w,setCameraTarget:P,setCameraState:N,lookAt:O,orbitTo:h,dollyTo:C,savePreset:E,goToPreset:V,handleCameraChange:p,handleViewerReady:A}}function kr(e){let t=e.trim();return t?/\.(hdr|exr|jpg|jpeg|png|webp)(?:[?#].*)?$/i.test(t):!1}var Or=["none","directional","point","spot","hemisphere"],Ir=["pbr","matcap","uv-checker"],Rr=["neutral","apartment","city","dawn","forest","lobby","night","park","studio","sunset","warehouse"];var Tr=["sporadic","constantMild","constantWild"],Er=["linear","radial","mirroredLinear"],Br=["verySmall","small","medium","large","veryLarge","huge"];var Xe={enabled:!1,axis:"y",position:.5,flip:!1},_n={clips:[],autoplayClip:null},Fn={autofocus:{enabled:!1,focusDistance:5,focusRange:5,focalLength:.02,bokehScale:6,target:[0,0,0],mouse:!0,debug:0,manual:!1,smoothTime:.25},toneMapping:{enabled:!1,mode:"aces",exposure:1,resolution:256,whitePoint:4,middleGrey:.6,minLuminance:.01,averageLuminance:1,adaptationRate:1},brightnessContrast:{enabled:!1,brightness:0,contrast:0},hueSaturation:{enabled:!1,hue:0,saturation:0},colorAverage:{enabled:!1},dotScreen:{enabled:!1,angle:Math.PI/2,scale:1},glitch:{enabled:!1,mode:"sporadic",delay:[1.5,3.5],duration:[.6,1],strength:[.3,1],chromaticAberrationOffset:[0,0],columns:.05,ratio:.85},ssao:{enabled:!1,samples:30,rings:4,intensity:8,radius:.25,bias:.025,luminanceInfluence:.6,fade:.01,minRadiusScale:.33,worldDistanceThreshold:20,worldDistanceFalloff:5,worldProximityThreshold:6,worldProximityFalloff:3},bloom:{enabled:!1,intensity:.3,luminanceThreshold:.9,luminanceSmoothing:.2,mipmapBlur:!0,radius:0,levels:8},godRays:{enabled:!1,sunPosition:[5,10,5],samples:60,density:.96,decay:.9,weight:.4,exposure:.6,clampMax:1,blur:!0,kernelSize:"small"},grid:{enabled:!1,scale:1,lineWidth:0},noise:{enabled:!1,opacity:1,premultiply:!1},depthOfField:{enabled:!1,focusDistance:5,focusRange:5,focalLength:.02,bokehScale:6},chromaticAberration:{enabled:!1,offsetX:.002,offsetY:.002,radialModulation:!1,modulationOffset:.15},lensflare:{enabled:!1,lensPosition:[-25,6,-60],smoothTime:.07,glareSize:.2,flareSize:.01,flareSpeed:.01,flareShape:.01,animated:!0,anamorphic:!1,colorGain:"#141414",haloScale:.5,secondaryGhosts:!0,aditionalStreaks:!0,ghostScale:0,opacity:1,starBurst:!1},vignette:{enabled:!1,offset:.3,darkness:.3,eskil:!1},smaa:{enabled:!1},sepia:{enabled:!1,intensity:0},scanline:{enabled:!1,density:1.25},pixelation:{enabled:!1,granularity:5},outline:{enabled:!1,selectionLayer:10,edgeStrength:2.5,pulseSpeed:0,visibleEdgeColor:"#ffffff",hiddenEdgeColor:"#22090a",kernelSize:"large",blur:!1,xRay:!0},selectiveBloom:{enabled:!1,selectionLayer:10,intensity:1,luminanceThreshold:.9,luminanceSmoothing:.025,kernelSize:"large",mipmapBlur:!0,inverted:!1,ignoreBackground:!1},ramp:{enabled:!1,rampType:"linear",rampStart:[.5,.5],rampEnd:[1,1],startColor:"#000000",endColor:"#ffffff",opacity:.5,rampBias:.5,rampGain:.5,rampMask:!1,rampInvert:!1}},fe={model:{rotation:[0,0,0],showAdvancedRotation:!1,renderer:"pbr",shading:"lit",autoRotate:!1,autoRotateSpeed:1},camera:{fieldOfView:50,showAdvancedSettings:!1},lighting:{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}]},shadows:{enabled:!0,mapSize:2048,bias:-5e-4,normalBias:.02,radius:3},environment:{source:"preset",preset:"neutral",customEnvironmentUrl:"",intensity:.25,rotation:0,shadowLight:{enabled:!1,intensity:2.5,bias:-5e-4}},wireframe:{enabled:!1,color:"#000000",opacity:1},background:{enabled:!1,type:"color",color:"#1c1c1d",imageUrl:""},groundShadows:{enabled:!1,mode:"shadowCatcher",intensity:.7,borderFade:1,height:0,size:10},postProcessing:Fn,animations:_n,annotations:[]};function be(e){let t=f=>{throw new Error(`Invalid section: ${f}`)},o=f=>f&&typeof f=="object"&&!Array.isArray(f)?f:t("expected an object"),n=f=>typeof f=="string"&&f.trim().length>0&&f.length<=200?f:t("expected a nonempty name or id (up to 200 characters)"),r=f=>typeof f=="number"&&Number.isFinite(f)&&f>=0&&f<=1?f:t("position must be between 0 and 1"),a=f=>!Array.isArray(f)||f.length!==3||!f.every(u=>typeof u=="number"&&Number.isFinite(u))||Math.hypot(...f)<1e-8?t("normal must be a finite, nonzero vector"):[...f],s=f=>{let u=o(f);return!["x","y","z"].includes(u.axis)||typeof u.enabled!="boolean"||typeof u.flip!="boolean"?t("invalid plane"):{enabled:u.enabled,axis:u.axis,position:r(u.position),flip:u.flip,...u.normal!==void 0?{normal:a(u.normal)}:{}}},i=f=>{let u=o(f),m=s(u);if(u.mode!==void 0){if(!["plane","planes","box"].includes(u.mode))return t("invalid mode");m.mode=u.mode}if(u.planes!==void 0){if(!Array.isArray(u.planes)||u.planes.length>6)return t("at most six planes are supported");let d=new Set;m.planes=u.planes.map(p=>{let M=o(p),b=n(M.id);return d.has(b)?t("duplicate plane id"):(d.add(b),{...s(M),id:b,name:n(M.name)})})}if(u.activePlaneId!==void 0&&(m.activePlaneId=n(u.activePlaneId)),u.invertBox!==void 0){if(typeof u.invertBox!="boolean")return t("invalid box inversion");m.invertBox=u.invertBox}if(u.box!==void 0){let d=o(u.box),p=S=>!Array.isArray(S)||S.length!==3?t("invalid box bounds"):S.map(r),M=p(d.min),b=p(d.max);if(M.some((S,A)=>S>=b[A]))return t("box minimum must be below its maximum on every axis");m.box={min:M,max:b}}return m},c=o(e),l=i(c);if(c.presets!==void 0){if(!Array.isArray(c.presets)||c.presets.length>32)return t("at most 32 presets are supported");let f=new Set;l.presets=c.presets.map(u=>{let m=o(u),d=n(m.id);return f.has(d)?t("duplicate preset id"):(f.add(d),{id:d,name:n(m.name),settings:i(m.settings)})})}return l}function Vr(e){let{presets:t,...o}=be(e);return o}function zr(e){try{return be(e)}catch{return Xe}}function Dr(e,t){if(!t||typeof t!="object"||Array.isArray(t))throw new Error("Invalid section: expected an object");let o=["enabled","axis","position","flip"].every(n=>Object.prototype.hasOwnProperty.call(t,n));return be(o?t:{...Xe,...e,...t})}import{Box3 as Pt,Matrix4 as Re,Quaternion as qn,Vector3 as Ie,Euler as Wn}from"three";var $r={version:1,placements:{},gridSize:1};function Ke(e){return e.id??e.url}function he(e){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Expected an asset transform object.");let t={};for(let o of["position","rotation","scale"]){let n=e[o];if(n!==void 0){if(!Array.isArray(n)||n.length!==3||!n.every(r=>typeof r=="number"&&Number.isFinite(r))||o==="scale"&&n.some(r=>r===0))throw new Error(`Invalid asset ${o}: expected three finite ${o==="scale"?"nonzero ":""}numbers.`);t[o]=[...n]}}return t}function _r(e){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Invalid scene composition.");let t=e;if(t.version!==1||!Number.isFinite(t.gridSize)||t.gridSize<=0||!t.placements||typeof t.placements!="object"||Array.isArray(t.placements)||Object.keys(t.placements).length>256)throw new Error("Invalid scene composition version, grid size or placements (maximum 256).");let o={};for(let[n,r]of Object.entries(t.placements)){if(!n||["__proto__","constructor","prototype"].includes(n))throw new Error("Invalid asset instance ID.");let a=he(r);if(r.label!==void 0&&(typeof r.label!="string"||r.label.length>512))throw new Error("Invalid asset label.");for(let s of["visible","deleted"])if(r[s]!==void 0&&typeof r[s]!="boolean")throw new Error(`Invalid asset ${s}.`);o[n]={...a,...r.label!==void 0?{label:r.label}:{},...r.visible!==void 0?{visible:r.visible}:{},...r.deleted!==void 0?{deleted:r.deleted}:{}}}return{version:1,gridSize:t.gridSize,placements:o}}function Fr(e,t){if(!Number.isFinite(t)||t<=0)throw new Error("Grid size must be positive.");let o=he(e),[n,r,a]=o.position??[0,0,0];return{...o,position:[Math.round(n/t)*t,r,Math.round(a/t)*t]}}function qr(e,t){let o=he(e),n=o.position??[0,0,0],r=new Re().compose(new Ie(...n),new qn().setFromEuler(new Wn(...o.rotation??[0,0,0])),new Ie(...o.scale??[1,1,1])),a=new Pt(new Ie(...t.min),new Ie(...t.max)).applyMatrix4(r);if(!Number.isFinite(a.min.y))throw new Error("Cannot place an asset with empty bounds.");return{...o,position:[n[0],n[1]-a.min.y,n[2]]}}function Wr(e){e.updateWorldMatrix(!0,!0);let t=new Re().copy(e.parent?.parent?.matrixWorld??new Re).invert(),o=new Pt;return e.traverse(n=>{let r=n;r.geometry&&(r.geometry.computeBoundingBox(),r.geometry.boundingBox&&o.union(r.geometry.boundingBox.clone().applyMatrix4(new Re().multiplyMatrices(t,r.matrixWorld))))}),o.isEmpty()||![...o.min.toArray(),...o.max.toArray()].every(Number.isFinite)?null:{min:o.min.toArray(),max:o.max.toArray()}}import{BufferGeometry as Gn,Float32BufferAttribute as Hn,Matrix4 as Vt,Mesh as Ze,ShapeUtils as Xn,Vector2 as zt,Vector3 as H,Vector4 as Kn}from"three";function Dt(e){if(e.length!==3)return null;let t=new H(...e[0]).sub(new H(...e[1])),o=new H(...e[2]).sub(new H(...e[1]));return t.lengthSq()===0||o.lengthSq()===0?null:Math.acos(Math.max(-1,Math.min(1,t.normalize().dot(o.normalize()))))*180/Math.PI}function Lt(e,t){if(!e.normal)return null;let o=new H(...e.normal);if(o.lengthSq()===0)return null;o.normalize();let n=new H(...t),r=n.clone().sub(new H(...e.position)).dot(o);return{distance:Math.abs(r),projection:n.addScaledVector(o,-r).toArray()}}function Ut(e){if(e.length<3)return{error:"Pick at least three points to finish the area."};let t=new H(...e[0]),o=e.map(b=>new H(...b).sub(t)),n=Math.max(...o.map(b=>b.length()));if(n===0)return{error:"Area points must be distinct."};let r=new H;for(let b=1;b<o.length-1;b+=1){let S=o[b].clone().cross(o[b+1]);S.lengthSq()>r.lengthSq()&&r.copy(S)}if(r.length()<=n*n*1e-10)return{error:"Area points must not lie on one straight line."};r.normalize();let a=Math.max(n*1e-5,Number.EPSILON*Math.max(...e.flat().map(Math.abs))*32);if(o.some(b=>Math.abs(b.dot(r))>a))return{error:"Area points must lie on one plane."};let s=o.find(b=>b.length()>n*1e-10).clone().normalize(),i=r.clone().cross(s).normalize(),c=o.map(b=>new zt(b.dot(s),b.dot(i))),l=(b,S,A)=>(S.x-b.x)*(A.y-b.y)-(S.y-b.y)*(A.x-b.x),f=n*n*1e-10,u=(b,S,A)=>Math.abs(l(b,S,A))<=f&&A.x>=Math.min(b.x,S.x)-n*1e-10&&A.x<=Math.max(b.x,S.x)+n*1e-10&&A.y>=Math.min(b.y,S.y)-n*1e-10&&A.y<=Math.max(b.y,S.y)+n*1e-10;for(let b=0;b<c.length;b+=1){let S=c[b],A=c[(b+1)%c.length];if(S.distanceTo(A)<=n*1e-10)return{error:"Area points must be distinct."};for(let g=b+1;g<c.length;g+=1){if(g===b+1||b===0&&g===c.length-1)continue;let w=c[g],v=c[(g+1)%c.length],P=l(S,A,w),T=l(S,A,v),N=l(w,v,S),O=l(w,v,A);if(P*T<0&&N*O<0||u(S,A,w)||u(S,A,v)||u(w,v,S)||u(w,v,A))return{error:"Area edges must not cross or touch each other."}}}let m=0,d=0,p=0;for(let b=0;b<c.length;b+=1){let S=c[b],A=c[(b+1)%c.length],g=S.x*A.y-A.x*S.y;m+=g,d+=(S.x+A.x)*g,p+=(S.y+A.y)*g}if(Math.abs(m)<=f)return{error:"The polygon has no measurable area."};let M=t.clone().addScaledVector(s,d/(3*m)).addScaledVector(i,p/(3*m));return{area:Math.abs(m)/2,center:M.toArray(),triangles:Xn.triangulateShape(c,[])}}function Ye(e,t){if(e.length<2)return 0;let o=0;for(let n=1;n<e.length;n+=1)o+=new H(...e[n]).distanceTo(new H(...e[n-1]));return t&&(o+=new H(...e[e.length-1]).distanceTo(new H(...e[0]))),o}var Zn=1e-5;function Yn(e,t){let o=e.getAttribute("position"),n=e.getIndex(),r=o.count,a=Math.max(t,1e-9),s=(p,M,b)=>`${Math.round(p/a)}_${Math.round(M/a)}_${Math.round(b/a)}`,i=new Int32Array(r),c=[],l=new Map;for(let p=0;p<r;p+=1){let M=o.getX(p),b=o.getY(p),S=o.getZ(p),A=s(M,b,S),g=l.get(A);g===void 0&&(g=c.length,c.push(new H(M,b,S)),l.set(A,g)),i[p]=g}let f=c.map(()=>new Map),u=(p,M)=>{if(p===M)return;let b=c[p].distanceTo(c[M]);f[p].has(M)||f[p].set(M,b),f[M].has(p)||f[M].set(p,b)},m=(n?n.count:r)/3,d=p=>n?n.getX(p):p;for(let p=0;p<m;p+=1)u(i[d(p*3)],i[d(p*3+1)]),u(i[d(p*3+1)],i[d(p*3+2)]),u(i[d(p*3+2)],i[d(p*3)]);return{weldedId:i,weldedPosition:c,neighbors:f}}function Jn(e,t,o){let n=new Map([[t,0]]),r=[t];for(let a=0;a<o&&r.length>0;a+=1){let s=[];for(let i of r){let c=n.get(i)??0;for(let[l,f]of e[i]??[])n.has(l)||(n.set(l,c+f),s.push(l))}r=s}return n}function Qn(e){let o=(Math.abs(e.y)<.9?new H(0,1,0):new H(1,0,0)).clone().cross(e).normalize(),n=e.clone().cross(o).normalize();return[o,n]}function eo(e,t,o){let[n,r]=Qn(t),a=0,s=0,i=0;for(let M of o){let b=M.clone().sub(e),S=b.dot(n),A=b.dot(r);a+=S*S,s+=S*A,i+=A*A}let c=a+i,l=a*i-s*s,f=Math.sqrt(Math.max(0,c*c/4-l)),u=c/2+f,m=1,d=0;Math.abs(s)>1e-12?(m=u-i,d=s):i>a&&(m=0,d=1);let p=Math.hypot(m,d)||1;return n.clone().multiplyScalar(m/p).add(r.clone().multiplyScalar(d/p)).normalize()}function to(e,t,o,n){let r=e.getAttribute("position"),a=e.getIndex(),s=r.count,i=(a?a.count:s)/3,c=m=>a?a.getX(m):m,l=m=>new H(r.getX(m),r.getY(m),r.getZ(m)).applyMatrix4(t),f=m=>m.clone().sub(o).dot(n),u=[];for(let m=0;m<i;m+=1){let d=l(c(m*3)),p=l(c(m*3+1)),M=l(c(m*3+2)),b=f(d),S=f(p),A=f(M),g=[],w=(v,P,T,N)=>{P>0!=N>0&&g.push(v.clone().lerp(T,P/(P-N)))};w(d,b,p,S),w(p,S,M,A),w(M,A,d,b),g.length===2&&u.push([g[0],g[1]])}return u}function no(e,t){let o=Math.max(t,1e-9),n=m=>`${Math.round(m.x/o)}_${Math.round(m.y/o)}_${Math.round(m.z/o)}`,r=new Map,a=[],s=m=>{let d=n(m),p=r.get(d);return p===void 0&&(p=a.length,a.push(m),r.set(d,p)),p},i=[],c=m=>{for(;i.length<=m;)i.push(new Map)};for(let[m,d]of e){let p=s(m),M=s(d);p!==M&&(c(p),c(M),i[p].set(M,(i[p].get(M)??0)+1),i[M].set(p,(i[M].get(p)??0)+1))}let l=(m,d)=>m<d?`${m}_${d}`:`${d}_${m}`,f=new Set,u=[];for(let m=0;m<i.length;m+=1)for(let d of i[m]?.keys()??[]){if(f.has(l(m,d)))continue;let p=[m],M=m,b=d;f.add(l(M,b));let S=0;for(;b!==m&&b>=0&&S<i.length+4;){p.push(b);let A=[...i[b].keys()].filter(w=>w!==M),g;if(A.length<=1)g=A[0];else{let w=a[b].clone().sub(a[M]).normalize(),v=-1/0;for(let P of A){let T=a[P].clone().sub(a[b]).normalize(),N=w.dot(T);N>v&&(v=N,g=P)}}if(g===void 0){b=-1;break}f.add(l(b,g)),M=b,b=g,S+=1}b===m&&p.length>=3&&u.push(p.map(A=>a[A]))}return u}function Nt(e,t){let o=1/0;for(let n of e)o=Math.min(o,n.distanceTo(t));return o}function oo(e,t){let o=0,n=1/0;return e.forEach((r,a)=>{let s=r.distanceTo(t);s<n&&(n=s,o=a)}),[...e.slice(o),...e.slice(0,o)]}function $t(e,t,o,n,r){let a=to(e,t,n,r);if(a.length===0)return{error:"Couldn't trace a loop around this point."};let s=no(a,o*t.getMaxScaleOnAxis());if(s.length===0)return{error:"The surface here doesn't form a closed loop around this point (it may be near an open edge)."};let i=s[0],c=Nt(i,n);for(let f of s.slice(1)){let u=Nt(f,n);u<c&&(c=u,i=f)}let l=oo(i,n).map(f=>f.toArray());return{points:l,length:Ye(l,!0)}}function _t(e){if(!(e.object instanceof Ze)||!e.face)return null;let t=e.object,o=t.geometry;if(t.isSkinnedMesh||t.morphTargetInfluences?.some(a=>a!==0)){let a=o.getAttribute("position"),s=new Hn(new Float32Array(a.count*3),3),i=new H;for(let c=0;c<a.count;c++)t.getVertexPosition(c,i),s.setXYZ(c,i.x,i.y,i.z);o=new Gn().setAttribute("position",s).setIndex(o.getIndex())}let n=t.matrixWorld.clone();if(e.instanceId!==void 0&&"getMatrixAt"in t){let a=new Vt;t.getMatrixAt(e.instanceId,a),n.multiply(a)}o.computeBoundingSphere();let r=o.boundingSphere&&o.boundingSphere.radius>0?o.boundingSphere.radius:1;return{face:e.face,geometry:o,matrix:n,weldTolerance:r*Zn}}function Xr(e,t=6){let o=_t(e);if(!o)return{error:"Pick a point on the mesh surface to trace a loop around it."};let{face:n,geometry:r,matrix:a,weldTolerance:s}=o,i=Ft(e);if(!i)return{error:"Pick a point on the mesh surface to trace a loop around it."};let c=i[1].clone().sub(i[0]).cross(i[2].clone().sub(i[0]));if(c.lengthSq()===0)return{error:"Couldn't determine the surface direction at this point."};c.normalize();let{weldedId:l,weldedPosition:f,neighbors:u}=Yn(r,s),m=r.getAttribute("position"),d=e.point.clone().applyMatrix4(a.clone().invert()),p=[n.a,n.b,n.c],M=p[0],b=1/0;for(let P of p){let N=new H(m.getX(P),m.getY(P),m.getZ(P)).distanceTo(d);N<b&&(b=N,M=P)}let S=l[M],A=f[S].clone().applyMatrix4(a),g=Jn(u,S,t),w=[];for(let P of g.keys())w.push(f[P].clone().applyMatrix4(a));if(w.length<6)return{error:"Not enough surface detail near this point to trace a loop. Try a different spot."};let v=eo(A,c,w);return $t(r,a,s,e.point.clone(),v)}function Kr(e,t=new H(0,1,0)){let o=_t(e);if(!o)return{error:"Pick a point on the mesh surface to trace a loop around it."};let{geometry:n,matrix:r,weldTolerance:a}=o,s=t.clone().normalize();return s.lengthSq()===0?{error:"Couldn't determine a horizontal direction."}:$t(n,r,a,e.point.clone(),s)}function Ft(e){if(!(e.object instanceof Ze)||!e.face)return null;let t=e.object,o=t.matrixWorld.clone();if(e.instanceId!==void 0&&"getMatrixAt"in t){let n=new Vt;t.getMatrixAt(e.instanceId,n),o.multiply(n)}return[e.face.a,e.face.b,e.face.c].map(n=>t.getVertexPosition(n,new H).applyMatrix4(o))}function Zr(e){if(!(e.object instanceof Ze))return!1;for(let o=e.object;o;o=o.parent)if(!o.visible||o.userData.riEditorGizmo||o.userData.riDecal)return!1;return(Array.isArray(e.object.material)?e.object.material:[e.object.material])[e.face?.materialIndex??0]?.visible!==!1}function Yr(e,t,o,n,r,a=12){let s=Ft(e),i=s?s[1].clone().sub(s[0]).cross(s[2].clone().sub(s[0])).normalize():null,c={position:e.point.toArray(),...i&&i.lengthSq()>0?{normal:i.toArray()}:{},...s?{faceVertices:s.map(m=>m.toArray())}:{}};if(!s||r==="none")return c;let l=m=>{let d=new Kn(m.x,m.y,m.z,1).applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix);return d.w<=0||d.z/d.w<-1||d.z/d.w>1?null:{screen:new zt((d.x/d.w+1)*n.width/2,(1-d.y/d.w)*n.height/2),w:d.w}},f=s.map(l),u=a;if((r==="vertex"||r==="auto")&&(f.forEach((m,d)=>{let p=m?.screen.distanceTo(o)??1/0;p<=u&&(u=p,c.position=s[d].toArray(),c.snapped="vertex")}),c.snapped))return c;if(r==="edge"||r==="auto")for(let m=0;m<3;m+=1){let d=(m+1)%3,p=f[m],M=f[d];if(!p||!M)continue;let b=M.screen.clone().sub(p.screen);if(b.lengthSq()===0)continue;let S=Math.max(0,Math.min(1,o.clone().sub(p.screen).dot(b)/b.lengthSq())),A=p.screen.clone().addScaledVector(b,S).distanceTo(o);if(A<=u){u=A;let g=S*p.w/((1-S)*M.w+S*p.w);c.position=s[m].clone().lerp(s[d],g).toArray(),c.snapped="edge"}}return c}var ro=["m","cm","mm","in","ft"],Je={m:1,cm:.01,mm:.001,in:.0254,ft:.3048},io=["distance","angle","area","pointToPlane","wrap","wrapHorizontal"];function Qe(e){return ro.includes(e)}function ao(e={},t="m"){let o=e.displayUnit??t,n=e.metersPerUnit??Je[e.sourceUnit??"m"];if(!Number.isFinite(n)||n<=0)throw new Error("Measurement scale must be a positive finite number.");return{displayUnit:o,metersPerUnit:n,factor:Qe(o)?n/Je[o]:1}}function ei(e){try{return new URL(e,typeof window<"u"?window.location?.href:void 0).href}catch{return e}}function ti(e,t,o,n={}){if(!Qe(o)||!Number.isFinite(e)||e<=0||!Number.isFinite(t)||t<=0)throw new Error("Calibration needs two distinct points and a positive known distance.");let r=t*Je[o]/e;if(!Number.isFinite(r)||r<=0)throw new Error("Calibration scale is outside the supported range.");return{...n,metersPerUnit:r}}function qt(e,t){let o=t.map(n=>n.position);if(e==="angle"){let n=Dt(o);return n===null?null:{value:n,dimension:0}}if(e==="area"){let n=Ut(o);return"error"in n?null:{value:n.area,dimension:2}}if(e==="pointToPlane"){let n=t.length===2?Lt(t[0],t[1].position):null;return n?{value:n.distance,dimension:1}:null}return t.length<(e==="distance"?2:3)?null:{value:Ye(o,e!=="distance"),dimension:1}}function so(e,t={},o="m",n=e.points,r=e.approximate?"approximate":"ready"){let a=qt(e.tool,n),{factor:s,displayUnit:i}=ao(t,o),c=r==="ready"||r==="approximate",l=c&&a?a.value*s**a.dimension:null;return{id:e.id,status:c?a&&l!==null&&Number.isFinite(l)?r:"invalid":r,rawValue:c&&a&&Number.isFinite(a.value)?a.value:null,value:l!==null&&Number.isFinite(l)?l:null,unit:e.tool==="angle"?"\xB0":e.tool==="area"?`${i}\xB2`:i}}function ye(e){function t(){throw new Error("Invalid measurements: expected settings and valid named measurements with finite points.")}let o=i=>!!i&&typeof i=="object"&&!Array.isArray(i),n=i=>Array.isArray(i)&&i.length===3&&i.every(c=>typeof c=="number"&&Number.isFinite(c));typeof e=="string"&&(e.length>5*1024*1024&&t(),e=JSON.parse(e)),(!o(e)||e.version!==void 0&&e.version!==1||!o(e.settings)||!Array.isArray(e.items)||e.items.length>256)&&t();let r={};for(let i of["sourceUnit","displayUnit"])e.settings[i]!==void 0&&(Qe(e.settings[i])||t(),r[i]=e.settings[i]);e.settings.metersPerUnit!==void 0&&((typeof e.settings.metersPerUnit!="number"||!Number.isFinite(e.settings.metersPerUnit)||e.settings.metersPerUnit<=0)&&t(),r.metersPerUnit=e.settings.metersPerUnit);let a=new Set,s=e.items.map(i=>{(!o(i)||typeof i.id!="string"||!i.id||a.has(i.id)||typeof i.name!="string"||!i.name.trim()||typeof i.modelId!="string"||!i.modelId||!io.includes(i.tool)||!Array.isArray(i.points)||i.points.length>8192||typeof i.createdAt!="string"||!Number.isFinite(Date.parse(i.createdAt)))&&t(),a.add(i.id),i.tilesetUrl!==void 0&&i.tilesetUrl!==null&&typeof i.tilesetUrl!="string"&&t(),(i.visible!==void 0&&typeof i.visible!="boolean"||i.approximate!==void 0&&typeof i.approximate!="boolean")&&t();let c=new Set,l=i.points.map(u=>{if((!o(u)||typeof u.id!="number"||!Number.isFinite(u.id)||!n(u.position))&&t(),c.has(u.id)&&t(),c.add(u.id),u.normal!==void 0&&!n(u.normal)&&t(),u.faceVertices!==void 0&&(!Array.isArray(u.faceVertices)||u.faceVertices.length!==3||!u.faceVertices.every(n))&&t(),u.snapped!==void 0&&!["vertex","edge"].includes(u.snapped)&&t(),u.anchor!==void 0){let d=u.anchor;(!o(d)||typeof d.nodeId!="string"||!d.nodeId||!n(d.localPosition)||typeof d.geometrySignature!="string"||typeof d.poseSignature!="string")&&t(),d.localNormal!==void 0&&!n(d.localNormal)&&t(),d.localFaceVertices!==void 0&&(!Array.isArray(d.localFaceVertices)||d.localFaceVertices.length!==3||!d.localFaceVertices.every(n))&&t(),d.instanceId!==void 0&&(!Number.isInteger(d.instanceId)||d.instanceId<0)&&t()}let m=u.anchor;return{id:u.id,position:[...u.position],...u.normal?{normal:[...u.normal]}:{},...u.faceVertices?{faceVertices:u.faceVertices.map(d=>[...d])}:{},...u.snapped?{snapped:u.snapped}:{},...m?{anchor:{nodeId:m.nodeId,localPosition:[...m.localPosition],geometrySignature:m.geometrySignature,poseSignature:m.poseSignature,...m.localNormal?{localNormal:[...m.localNormal]}:{},...m.localFaceVertices?{localFaceVertices:m.localFaceVertices.map(d=>[...d])}:{},...m.instanceId!==void 0?{instanceId:m.instanceId}:{}}}:{}}}),f={id:i.id,name:i.name,modelId:i.modelId,tool:i.tool,points:l,createdAt:i.createdAt,...i.tilesetUrl!==void 0?{tilesetUrl:i.tilesetUrl}:{},...i.visible!==void 0?{visible:i.visible}:{},...i.approximate!==void 0?{approximate:i.approximate}:{}};return qt(f.tool,l)||t(),f});return{settings:r,items:s}}function ni(e){return JSON.stringify({version:1,...ye(e)},null,2)}function oi(e,t,o="m"){let n=ye(e),r=new Map(t?.map(s=>[s.id,s])),a=s=>{let i=String(s??"");return/^[=+@-]/.test(i)&&(i=`'${i}`),`"${i.replace(/"/g,'""')}"`};return[["id","name","modelId","type","status","value","unit","createdAt"],...n.items.map(s=>{let i=r.get(s.id)??so(s,n.settings,o);return[s.id,s.name,s.modelId,s.tool,i.status,i.value,i.unit,s.createdAt]})].map(s=>s.map(a).join(",")).join(`\r
|
|
1
|
+
import{e as Ae,f as ut}from"./chunk-LX3GXQNU.mjs";import{p as Mt}from"./chunk-7JCFNZJM.mjs";import{b as Le,c as xt,i as je,t as At}from"./chunk-37QOMZW6.mjs";import{a as ft,b as ve}from"./chunk-GV4ZRXL6.mjs";import{f as pt,h as gt}from"./chunk-7OWHW66D.mjs";import{a as Ct,o as ke,q as jt}from"./chunk-UCD76KQ6.mjs";import{a as ge,b as bt,c as ht,d as Me,e as Ce,f as yt,g as St,h as wt}from"./chunk-RXZ4Q7CY.mjs";var Oe=new WeakMap;function nr(e,t){return Oe.set(e,t),()=>{Oe.get(e)===t&&Oe.delete(e)}}function vt(e){Oe.get(e)?.()}var kt=new WeakMap;function $e(e){let t=kt.get(e);return t||(t={state:"active",listeners:new Set},kt.set(e,t)),t}function Ue(e){return e?$e(e).state:"active"}function _e(e){return Ue(e)==="paused"}function Fe(e,t){let o=$e(e);return o.listeners.add(t),()=>{o.listeners.delete(t)}}function ir(e,t){let o=$e(e);o.state!==t&&(o.state=t,o.listeners.forEach(n=>n()))}async function re(e,t,o){if(Ue(e)==="disconnected")throw new Error("The camera is disconnected from the viewer.");vt(e);let n=async()=>{await t(!1),e.update(0)};if(_e(e))return n();if(!o){await t(!1);return}let r=[];try{await new Promise((a,s)=>{let i=!1,c=l=>{i||(i=!0,l())};if(r.push(Fe(e,()=>{let l=Ue(e);l==="paused"?n().then(()=>c(a),f=>c(()=>s(f))):l==="disconnected"&&c(()=>s(new Error("The camera move was cancelled because the viewer disconnected.")))})),e.addEventListener&&e.removeEventListener){let l=!1,f=()=>{l=!0},u=()=>{l&&c(a)};e.addEventListener("update",f),e.addEventListener("sleep",u),r.push(()=>{e.removeEventListener?.("update",f),e.removeEventListener?.("sleep",u)})}Promise.resolve().then(()=>t(!0)).then(()=>c(a),l=>c(()=>s(l)))})}finally{r.forEach(a=>a())}}import{useCallback as Z,useRef as de,useState as He,useSyncExternalStore as Un}from"react";import{Vector3 as Et}from"three";var qe=new WeakSet;function me(e){qe.add(e)}function sr(e){let t=qe.has(e);return t&&qe.delete(e),t}var We=new WeakSet;function lr(e,t){t?We.add(e):We.delete(e)}function Ot(e,t){return We.has(e)?0:t}import{Box3 as It,Matrix4 as Ln,PerspectiveCamera as Rt,Vector3 as Ge}from"three";function fr(e,t){let o=pt(e);if(!(e.camera instanceof Rt)||!t)return o;let n=t instanceof It?t:new It().setFromObject(t);return n.isEmpty()||(o.framing={aspect:e.camera.aspect,min:n.min.toArray(),max:n.max.toArray()}),o}function Tt(e,t){let o=t.camera,n=e.framing;if(!(o instanceof Rt)||!n||!(o.aspect>0)||Math.abs(o.aspect-n.aspect)<1e-6)return[...e.position];let r=new Ge(...e.position),a=new Ge(...e.target),s=r.clone().sub(a).normalize(),i=new Ln().lookAt(r,a,o.up).invert(),c=Math.tan((e.fov??o.fov)*Math.PI/360)/(e.zoom??o.zoom);if(!(c>0)||!Number.isFinite(c))return[...e.position];let l=0;for(let f of[n.min[0],n.max[0]])for(let u of[n.min[1],n.max[1]])for(let m of[n.min[2],n.max[2]]){let d=new Ge(f,u,m).sub(r).applyMatrix4(i);l=Math.max(l,Math.abs(d.x)/(c*o.aspect)+d.z,Math.abs(d.y)/c+d.z)}return r.addScaledVector(s,l*1.02).toArray()}function Bt(e){return[e.x,e.y,e.z]}function ne(e,t){let o=new Et,n=new Et;return t.getPosition(o),t.getTarget(n),{position:Bt(o),target:Bt(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 $n(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 ue(e,t,o=.6){let n=e.smoothTime;e.smoothTime=Ot(e,o);try{await re(e,t,!0)}finally{e.smoothTime=n}}function jr(e={}){let t=de(e);t.current=e;let o=de(null),[n,r]=He(null),a=Z(y=>n?Fe(n,y):()=>{},[n]),s=Z(()=>_e(n),[n]),i=Un(a,s,()=>!1),[c,l]=He(null),[f,u]=He(()=>({...e.presets})),m=de(f);m.current=f;let d=Z(y=>{l(x=>$n(x,y)?x:y)},[]),p=Z(y=>{d(y)},[d]),M=de(null),b=de(null),S=de(null),A=Z(y=>{o.current=y,r(y.raw.controls);let x=ne(y.raw.controls.camera,y.raw.controls);d(x),y.raw.scene!==b.current&&(b.current=y.raw.scene,M.current=null,S.current=null),y.homeCameraState&&!M.current&&(M.current=y.homeCameraState);let{initialPosition:j,initialTarget:B,initialTransition:q=!1}=t.current;if((j||B)&&y.raw.scene&&(j||y.homeCameraState)&&S.current!==y.raw.controls){S.current=y.raw.controls,y.homeCameraState||me(y.raw.controls);let W=j??x.position,K=B??x.target;re(y.raw.controls,J=>y.raw.controls.setLookAt(W[0],W[1],W[2],K[0],K[1],K[2],J),q).then(()=>{if(o.current?.raw.controls!==y.raw.controls)return;let J=ne(y.raw.controls.camera,y.raw.controls);M.current={position:J.position,target:J.target},d(J)}).catch(()=>{})}},[d]),g=Z(async()=>{let y=o.current,x=y?.raw.controls;if(!x)return!1;try{let j=M.current;if(j){gt(x,j);let B=Tt(j,x);await ue(x,q=>x.setLookAt(B[0],B[1],B[2],j.target[0],j.target[1],j.target[2],q))}else y?.raw.scene?await ue(x,B=>x.fitToBox(y.raw.scene,B,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})):await ue(x,B=>x.reset(B));return!0}catch{return!1}},[]),w=Z(async()=>{let y=o.current;if(!y?.raw.controls||!y.raw.scene)return!1;try{return await ue(y.raw.controls,x=>y.raw.controls.fitToBox(y.raw.scene,x,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),v=Z(async y=>{let x=o.current;if(!x?.raw.controls)return!1;let j=ft(x.objectBindings,y);if(!j)return!1;let B=x.objectBindings[j]?.cameraState;if(B?.position&&B?.target){let[W,K,J]=B.position,[_,I,U]=B.target;try{return await ue(x.raw.controls,L=>x.raw.controls.setLookAt(W,K,J,_,I,U,L)),!0}catch{return!1}}let q=x.raw.nodes[j];if(!q)return!1;try{return await ue(x.raw.controls,W=>x.raw.controls.fitToBox(q,W,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),P=Z(async(y,x=!0)=>{let j=o.current?.raw.controls;if(!j)return!1;try{return o.current?.homeCameraState||me(j),await re(j,B=>j.setTarget(y[0],y[1],y[2],B),x),d(ne(j.camera,j)),!0}catch{return!1}},[d]),T=Z(async(y,x=!0)=>{let j=o.current?.raw.controls;if(!j)return!1;try{o.current?.homeCameraState||me(j),await re(j,async W=>{let K=[j.setLookAt(y.position[0],y.position[1],y.position[2],y.target[0],y.target[1],y.target[2],W)];y.azimuthAngle!=null&&y.polarAngle!=null&&K.push(j.rotateTo(y.azimuthAngle,y.polarAngle,W)),await Promise.all(K)},x);let B=j.camera,q=!1;return y.fov!=null&&"fov"in B&&typeof B.fov=="number"&&(B.fov=y.fov,q=!0),y.zoom!=null&&"zoom"in B&&typeof B.zoom=="number"&&(B.zoom=y.zoom,q=!0),q&&"updateProjectionMatrix"in B&&B.updateProjectionMatrix(),d(ne(B,j)),!0}catch{return!1}},[d]),N=Z((y,x=!0)=>T(y,x),[T]),O=Z((y,x,j=!0)=>T({position:y,target:x},j),[T]),h=Z(async(y,x,j=!0)=>{let B=o.current?.raw.controls;if(!B)return!1;try{return o.current?.homeCameraState||me(B),await re(B,q=>B.rotateTo(y*Math.PI/180,x*Math.PI/180,q),j),d(ne(B.camera,B)),!0}catch{return!1}},[d]),C=Z(async(y,x=!0)=>{let j=o.current?.raw.controls;if(!j)return!1;try{return o.current?.homeCameraState||me(j),await re(j,B=>j.dollyTo(y,B),x),d(ne(j.camera,j)),!0}catch{return!1}},[d]),k=Z(y=>{let x={...y};m.current=x,u(x)},[]),E=Z(y=>{let x=o.current?.raw.controls,j=y.trim();if(!x||!j)return null;let B=ne(x.camera,x);return m.current={...m.current,[j]:B},u(q=>({...q,[j]:B})),d(B),B},[d]),V=Z((y,x=!0)=>{let j=m.current[y];return j?T(j,x):Promise.resolve(!1)},[T]);return{isRenderPaused:i,cameraState:c,cameraPresets:f,setCameraPresets:k,resetView:g,focusObject:v,fitScene:w,setCameraTarget:P,setCameraState:N,lookAt:O,orbitTo:h,dollyTo:C,savePreset:E,goToPreset:V,handleCameraChange:p,handleViewerReady:A}}function kr(e){let t=e.trim();return t?/\.(hdr|exr|jpg|jpeg|png|webp)(?:[?#].*)?$/i.test(t):!1}var Or=["none","directional","point","spot","hemisphere"],Ir=["pbr","matcap","uv-checker"],Rr=["neutral","apartment","city","dawn","forest","lobby","night","park","studio","sunset","warehouse"];var Tr=["sporadic","constantMild","constantWild"],Er=["linear","radial","mirroredLinear"],Br=["verySmall","small","medium","large","veryLarge","huge"];var Xe={enabled:!1,axis:"y",position:.5,flip:!1},_n={clips:[],autoplayClip:null},Fn={autofocus:{enabled:!1,focusDistance:5,focusRange:5,focalLength:.02,bokehScale:6,target:[0,0,0],mouse:!0,debug:0,manual:!1,smoothTime:.25},toneMapping:{enabled:!1,mode:"aces",exposure:1,resolution:256,whitePoint:4,middleGrey:.6,minLuminance:.01,averageLuminance:1,adaptationRate:1},brightnessContrast:{enabled:!1,brightness:0,contrast:0},hueSaturation:{enabled:!1,hue:0,saturation:0},colorAverage:{enabled:!1},dotScreen:{enabled:!1,angle:Math.PI/2,scale:1},glitch:{enabled:!1,mode:"sporadic",delay:[1.5,3.5],duration:[.6,1],strength:[.3,1],chromaticAberrationOffset:[0,0],columns:.05,ratio:.85},ssao:{enabled:!1,samples:30,rings:4,intensity:8,radius:.25,bias:.025,luminanceInfluence:.6,fade:.01,minRadiusScale:.33,worldDistanceThreshold:20,worldDistanceFalloff:5,worldProximityThreshold:6,worldProximityFalloff:3},bloom:{enabled:!1,intensity:.3,luminanceThreshold:.9,luminanceSmoothing:.2,mipmapBlur:!0,radius:0,levels:8},godRays:{enabled:!1,sunPosition:[5,10,5],samples:60,density:.96,decay:.9,weight:.4,exposure:.6,clampMax:1,blur:!0,kernelSize:"small"},grid:{enabled:!1,scale:1,lineWidth:0},noise:{enabled:!1,opacity:1,premultiply:!1},depthOfField:{enabled:!1,focusDistance:5,focusRange:5,focalLength:.02,bokehScale:6},chromaticAberration:{enabled:!1,offsetX:.002,offsetY:.002,radialModulation:!1,modulationOffset:.15},lensflare:{enabled:!1,lensPosition:[-25,6,-60],smoothTime:.07,glareSize:.2,flareSize:.01,flareSpeed:.01,flareShape:.01,animated:!0,anamorphic:!1,colorGain:"#141414",haloScale:.5,secondaryGhosts:!0,aditionalStreaks:!0,ghostScale:0,opacity:1,starBurst:!1},vignette:{enabled:!1,offset:.3,darkness:.3,eskil:!1},smaa:{enabled:!1},sepia:{enabled:!1,intensity:0},scanline:{enabled:!1,density:1.25},pixelation:{enabled:!1,granularity:5},outline:{enabled:!1,selectionLayer:10,edgeStrength:2.5,pulseSpeed:0,visibleEdgeColor:"#ffffff",hiddenEdgeColor:"#22090a",kernelSize:"large",blur:!1,xRay:!0},selectiveBloom:{enabled:!1,selectionLayer:10,intensity:1,luminanceThreshold:.9,luminanceSmoothing:.025,kernelSize:"large",mipmapBlur:!0,inverted:!1,ignoreBackground:!1},ramp:{enabled:!1,rampType:"linear",rampStart:[.5,.5],rampEnd:[1,1],startColor:"#000000",endColor:"#ffffff",opacity:.5,rampBias:.5,rampGain:.5,rampMask:!1,rampInvert:!1}},fe={model:{rotation:[0,0,0],showAdvancedRotation:!1,renderer:"pbr",shading:"lit",autoRotate:!1,autoRotateSpeed:1},camera:{fieldOfView:50,showAdvancedSettings:!1},lighting:{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:[3,6,3],attachedToCamera:!1,castShadow:!0,shadowBias:-5e-4,visible:!0},{id:"light-fill",type:"directional",color:"#ffffff",intensity:0,position:[-3,4,-3],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0}]},shadows:{enabled:!0,mapSize:2048,bias:-5e-4,normalBias:.02,radius:3},environment:{source:"preset",preset:"neutral",customEnvironmentUrl:"",intensity:.25,rotation:0,shadowLight:{enabled:!1,intensity:2.5,bias:-5e-4}},wireframe:{enabled:!1,color:"#000000",opacity:1},background:{enabled:!1,type:"color",color:"#1c1c1d",imageUrl:""},groundShadows:{enabled:!1,mode:"shadowCatcher",intensity:.7,borderFade:1,height:0,size:10},postProcessing:Fn,animations:_n,annotations:[]};function be(e){let t=f=>{throw new Error(`Invalid section: ${f}`)},o=f=>f&&typeof f=="object"&&!Array.isArray(f)?f:t("expected an object"),n=f=>typeof f=="string"&&f.trim().length>0&&f.length<=200?f:t("expected a nonempty name or id (up to 200 characters)"),r=f=>typeof f=="number"&&Number.isFinite(f)&&f>=0&&f<=1?f:t("position must be between 0 and 1"),a=f=>!Array.isArray(f)||f.length!==3||!f.every(u=>typeof u=="number"&&Number.isFinite(u))||Math.hypot(...f)<1e-8?t("normal must be a finite, nonzero vector"):[...f],s=f=>{let u=o(f);return!["x","y","z"].includes(u.axis)||typeof u.enabled!="boolean"||typeof u.flip!="boolean"?t("invalid plane"):{enabled:u.enabled,axis:u.axis,position:r(u.position),flip:u.flip,...u.normal!==void 0?{normal:a(u.normal)}:{}}},i=f=>{let u=o(f),m=s(u);if(u.mode!==void 0){if(!["plane","planes","box"].includes(u.mode))return t("invalid mode");m.mode=u.mode}if(u.planes!==void 0){if(!Array.isArray(u.planes)||u.planes.length>6)return t("at most six planes are supported");let d=new Set;m.planes=u.planes.map(p=>{let M=o(p),b=n(M.id);return d.has(b)?t("duplicate plane id"):(d.add(b),{...s(M),id:b,name:n(M.name)})})}if(u.activePlaneId!==void 0&&(m.activePlaneId=n(u.activePlaneId)),u.invertBox!==void 0){if(typeof u.invertBox!="boolean")return t("invalid box inversion");m.invertBox=u.invertBox}if(u.box!==void 0){let d=o(u.box),p=S=>!Array.isArray(S)||S.length!==3?t("invalid box bounds"):S.map(r),M=p(d.min),b=p(d.max);if(M.some((S,A)=>S>=b[A]))return t("box minimum must be below its maximum on every axis");m.box={min:M,max:b}}return m},c=o(e),l=i(c);if(c.presets!==void 0){if(!Array.isArray(c.presets)||c.presets.length>32)return t("at most 32 presets are supported");let f=new Set;l.presets=c.presets.map(u=>{let m=o(u),d=n(m.id);return f.has(d)?t("duplicate preset id"):(f.add(d),{id:d,name:n(m.name),settings:i(m.settings)})})}return l}function Vr(e){let{presets:t,...o}=be(e);return o}function zr(e){try{return be(e)}catch{return Xe}}function Dr(e,t){if(!t||typeof t!="object"||Array.isArray(t))throw new Error("Invalid section: expected an object");let o=["enabled","axis","position","flip"].every(n=>Object.prototype.hasOwnProperty.call(t,n));return be(o?t:{...Xe,...e,...t})}import{Box3 as Pt,Matrix4 as Re,Quaternion as qn,Vector3 as Ie,Euler as Wn}from"three";var $r={version:1,placements:{},gridSize:1};function Ke(e){return e.id??e.url}function he(e){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Expected an asset transform object.");let t={};for(let o of["position","rotation","scale"]){let n=e[o];if(n!==void 0){if(!Array.isArray(n)||n.length!==3||!n.every(r=>typeof r=="number"&&Number.isFinite(r))||o==="scale"&&n.some(r=>r===0))throw new Error(`Invalid asset ${o}: expected three finite ${o==="scale"?"nonzero ":""}numbers.`);t[o]=[...n]}}return t}function _r(e){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Invalid scene composition.");let t=e;if(t.version!==1||!Number.isFinite(t.gridSize)||t.gridSize<=0||!t.placements||typeof t.placements!="object"||Array.isArray(t.placements)||Object.keys(t.placements).length>256)throw new Error("Invalid scene composition version, grid size or placements (maximum 256).");let o={};for(let[n,r]of Object.entries(t.placements)){if(!n||["__proto__","constructor","prototype"].includes(n))throw new Error("Invalid asset instance ID.");let a=he(r);if(r.label!==void 0&&(typeof r.label!="string"||r.label.length>512))throw new Error("Invalid asset label.");for(let s of["visible","deleted"])if(r[s]!==void 0&&typeof r[s]!="boolean")throw new Error(`Invalid asset ${s}.`);o[n]={...a,...r.label!==void 0?{label:r.label}:{},...r.visible!==void 0?{visible:r.visible}:{},...r.deleted!==void 0?{deleted:r.deleted}:{}}}return{version:1,gridSize:t.gridSize,placements:o}}function Fr(e,t){if(!Number.isFinite(t)||t<=0)throw new Error("Grid size must be positive.");let o=he(e),[n,r,a]=o.position??[0,0,0];return{...o,position:[Math.round(n/t)*t,r,Math.round(a/t)*t]}}function qr(e,t){let o=he(e),n=o.position??[0,0,0],r=new Re().compose(new Ie(...n),new qn().setFromEuler(new Wn(...o.rotation??[0,0,0])),new Ie(...o.scale??[1,1,1])),a=new Pt(new Ie(...t.min),new Ie(...t.max)).applyMatrix4(r);if(!Number.isFinite(a.min.y))throw new Error("Cannot place an asset with empty bounds.");return{...o,position:[n[0],n[1]-a.min.y,n[2]]}}function Wr(e){e.updateWorldMatrix(!0,!0);let t=new Re().copy(e.parent?.parent?.matrixWorld??new Re).invert(),o=new Pt;return e.traverse(n=>{let r=n;r.geometry&&(r.geometry.computeBoundingBox(),r.geometry.boundingBox&&o.union(r.geometry.boundingBox.clone().applyMatrix4(new Re().multiplyMatrices(t,r.matrixWorld))))}),o.isEmpty()||![...o.min.toArray(),...o.max.toArray()].every(Number.isFinite)?null:{min:o.min.toArray(),max:o.max.toArray()}}import{BufferGeometry as Gn,Float32BufferAttribute as Hn,Matrix4 as Vt,Mesh as Ze,ShapeUtils as Xn,Vector2 as zt,Vector3 as H,Vector4 as Kn}from"three";function Dt(e){if(e.length!==3)return null;let t=new H(...e[0]).sub(new H(...e[1])),o=new H(...e[2]).sub(new H(...e[1]));return t.lengthSq()===0||o.lengthSq()===0?null:Math.acos(Math.max(-1,Math.min(1,t.normalize().dot(o.normalize()))))*180/Math.PI}function Lt(e,t){if(!e.normal)return null;let o=new H(...e.normal);if(o.lengthSq()===0)return null;o.normalize();let n=new H(...t),r=n.clone().sub(new H(...e.position)).dot(o);return{distance:Math.abs(r),projection:n.addScaledVector(o,-r).toArray()}}function Ut(e){if(e.length<3)return{error:"Pick at least three points to finish the area."};let t=new H(...e[0]),o=e.map(b=>new H(...b).sub(t)),n=Math.max(...o.map(b=>b.length()));if(n===0)return{error:"Area points must be distinct."};let r=new H;for(let b=1;b<o.length-1;b+=1){let S=o[b].clone().cross(o[b+1]);S.lengthSq()>r.lengthSq()&&r.copy(S)}if(r.length()<=n*n*1e-10)return{error:"Area points must not lie on one straight line."};r.normalize();let a=Math.max(n*1e-5,Number.EPSILON*Math.max(...e.flat().map(Math.abs))*32);if(o.some(b=>Math.abs(b.dot(r))>a))return{error:"Area points must lie on one plane."};let s=o.find(b=>b.length()>n*1e-10).clone().normalize(),i=r.clone().cross(s).normalize(),c=o.map(b=>new zt(b.dot(s),b.dot(i))),l=(b,S,A)=>(S.x-b.x)*(A.y-b.y)-(S.y-b.y)*(A.x-b.x),f=n*n*1e-10,u=(b,S,A)=>Math.abs(l(b,S,A))<=f&&A.x>=Math.min(b.x,S.x)-n*1e-10&&A.x<=Math.max(b.x,S.x)+n*1e-10&&A.y>=Math.min(b.y,S.y)-n*1e-10&&A.y<=Math.max(b.y,S.y)+n*1e-10;for(let b=0;b<c.length;b+=1){let S=c[b],A=c[(b+1)%c.length];if(S.distanceTo(A)<=n*1e-10)return{error:"Area points must be distinct."};for(let g=b+1;g<c.length;g+=1){if(g===b+1||b===0&&g===c.length-1)continue;let w=c[g],v=c[(g+1)%c.length],P=l(S,A,w),T=l(S,A,v),N=l(w,v,S),O=l(w,v,A);if(P*T<0&&N*O<0||u(S,A,w)||u(S,A,v)||u(w,v,S)||u(w,v,A))return{error:"Area edges must not cross or touch each other."}}}let m=0,d=0,p=0;for(let b=0;b<c.length;b+=1){let S=c[b],A=c[(b+1)%c.length],g=S.x*A.y-A.x*S.y;m+=g,d+=(S.x+A.x)*g,p+=(S.y+A.y)*g}if(Math.abs(m)<=f)return{error:"The polygon has no measurable area."};let M=t.clone().addScaledVector(s,d/(3*m)).addScaledVector(i,p/(3*m));return{area:Math.abs(m)/2,center:M.toArray(),triangles:Xn.triangulateShape(c,[])}}function Ye(e,t){if(e.length<2)return 0;let o=0;for(let n=1;n<e.length;n+=1)o+=new H(...e[n]).distanceTo(new H(...e[n-1]));return t&&(o+=new H(...e[e.length-1]).distanceTo(new H(...e[0]))),o}var Zn=1e-5;function Yn(e,t){let o=e.getAttribute("position"),n=e.getIndex(),r=o.count,a=Math.max(t,1e-9),s=(p,M,b)=>`${Math.round(p/a)}_${Math.round(M/a)}_${Math.round(b/a)}`,i=new Int32Array(r),c=[],l=new Map;for(let p=0;p<r;p+=1){let M=o.getX(p),b=o.getY(p),S=o.getZ(p),A=s(M,b,S),g=l.get(A);g===void 0&&(g=c.length,c.push(new H(M,b,S)),l.set(A,g)),i[p]=g}let f=c.map(()=>new Map),u=(p,M)=>{if(p===M)return;let b=c[p].distanceTo(c[M]);f[p].has(M)||f[p].set(M,b),f[M].has(p)||f[M].set(p,b)},m=(n?n.count:r)/3,d=p=>n?n.getX(p):p;for(let p=0;p<m;p+=1)u(i[d(p*3)],i[d(p*3+1)]),u(i[d(p*3+1)],i[d(p*3+2)]),u(i[d(p*3+2)],i[d(p*3)]);return{weldedId:i,weldedPosition:c,neighbors:f}}function Jn(e,t,o){let n=new Map([[t,0]]),r=[t];for(let a=0;a<o&&r.length>0;a+=1){let s=[];for(let i of r){let c=n.get(i)??0;for(let[l,f]of e[i]??[])n.has(l)||(n.set(l,c+f),s.push(l))}r=s}return n}function Qn(e){let o=(Math.abs(e.y)<.9?new H(0,1,0):new H(1,0,0)).clone().cross(e).normalize(),n=e.clone().cross(o).normalize();return[o,n]}function eo(e,t,o){let[n,r]=Qn(t),a=0,s=0,i=0;for(let M of o){let b=M.clone().sub(e),S=b.dot(n),A=b.dot(r);a+=S*S,s+=S*A,i+=A*A}let c=a+i,l=a*i-s*s,f=Math.sqrt(Math.max(0,c*c/4-l)),u=c/2+f,m=1,d=0;Math.abs(s)>1e-12?(m=u-i,d=s):i>a&&(m=0,d=1);let p=Math.hypot(m,d)||1;return n.clone().multiplyScalar(m/p).add(r.clone().multiplyScalar(d/p)).normalize()}function to(e,t,o,n){let r=e.getAttribute("position"),a=e.getIndex(),s=r.count,i=(a?a.count:s)/3,c=m=>a?a.getX(m):m,l=m=>new H(r.getX(m),r.getY(m),r.getZ(m)).applyMatrix4(t),f=m=>m.clone().sub(o).dot(n),u=[];for(let m=0;m<i;m+=1){let d=l(c(m*3)),p=l(c(m*3+1)),M=l(c(m*3+2)),b=f(d),S=f(p),A=f(M),g=[],w=(v,P,T,N)=>{P>0!=N>0&&g.push(v.clone().lerp(T,P/(P-N)))};w(d,b,p,S),w(p,S,M,A),w(M,A,d,b),g.length===2&&u.push([g[0],g[1]])}return u}function no(e,t){let o=Math.max(t,1e-9),n=m=>`${Math.round(m.x/o)}_${Math.round(m.y/o)}_${Math.round(m.z/o)}`,r=new Map,a=[],s=m=>{let d=n(m),p=r.get(d);return p===void 0&&(p=a.length,a.push(m),r.set(d,p)),p},i=[],c=m=>{for(;i.length<=m;)i.push(new Map)};for(let[m,d]of e){let p=s(m),M=s(d);p!==M&&(c(p),c(M),i[p].set(M,(i[p].get(M)??0)+1),i[M].set(p,(i[M].get(p)??0)+1))}let l=(m,d)=>m<d?`${m}_${d}`:`${d}_${m}`,f=new Set,u=[];for(let m=0;m<i.length;m+=1)for(let d of i[m]?.keys()??[]){if(f.has(l(m,d)))continue;let p=[m],M=m,b=d;f.add(l(M,b));let S=0;for(;b!==m&&b>=0&&S<i.length+4;){p.push(b);let A=[...i[b].keys()].filter(w=>w!==M),g;if(A.length<=1)g=A[0];else{let w=a[b].clone().sub(a[M]).normalize(),v=-1/0;for(let P of A){let T=a[P].clone().sub(a[b]).normalize(),N=w.dot(T);N>v&&(v=N,g=P)}}if(g===void 0){b=-1;break}f.add(l(b,g)),M=b,b=g,S+=1}b===m&&p.length>=3&&u.push(p.map(A=>a[A]))}return u}function Nt(e,t){let o=1/0;for(let n of e)o=Math.min(o,n.distanceTo(t));return o}function oo(e,t){let o=0,n=1/0;return e.forEach((r,a)=>{let s=r.distanceTo(t);s<n&&(n=s,o=a)}),[...e.slice(o),...e.slice(0,o)]}function $t(e,t,o,n,r){let a=to(e,t,n,r);if(a.length===0)return{error:"Couldn't trace a loop around this point."};let s=no(a,o*t.getMaxScaleOnAxis());if(s.length===0)return{error:"The surface here doesn't form a closed loop around this point (it may be near an open edge)."};let i=s[0],c=Nt(i,n);for(let f of s.slice(1)){let u=Nt(f,n);u<c&&(c=u,i=f)}let l=oo(i,n).map(f=>f.toArray());return{points:l,length:Ye(l,!0)}}function _t(e){if(!(e.object instanceof Ze)||!e.face)return null;let t=e.object,o=t.geometry;if(t.isSkinnedMesh||t.morphTargetInfluences?.some(a=>a!==0)){let a=o.getAttribute("position"),s=new Hn(new Float32Array(a.count*3),3),i=new H;for(let c=0;c<a.count;c++)t.getVertexPosition(c,i),s.setXYZ(c,i.x,i.y,i.z);o=new Gn().setAttribute("position",s).setIndex(o.getIndex())}let n=t.matrixWorld.clone();if(e.instanceId!==void 0&&"getMatrixAt"in t){let a=new Vt;t.getMatrixAt(e.instanceId,a),n.multiply(a)}o.computeBoundingSphere();let r=o.boundingSphere&&o.boundingSphere.radius>0?o.boundingSphere.radius:1;return{face:e.face,geometry:o,matrix:n,weldTolerance:r*Zn}}function Xr(e,t=6){let o=_t(e);if(!o)return{error:"Pick a point on the mesh surface to trace a loop around it."};let{face:n,geometry:r,matrix:a,weldTolerance:s}=o,i=Ft(e);if(!i)return{error:"Pick a point on the mesh surface to trace a loop around it."};let c=i[1].clone().sub(i[0]).cross(i[2].clone().sub(i[0]));if(c.lengthSq()===0)return{error:"Couldn't determine the surface direction at this point."};c.normalize();let{weldedId:l,weldedPosition:f,neighbors:u}=Yn(r,s),m=r.getAttribute("position"),d=e.point.clone().applyMatrix4(a.clone().invert()),p=[n.a,n.b,n.c],M=p[0],b=1/0;for(let P of p){let N=new H(m.getX(P),m.getY(P),m.getZ(P)).distanceTo(d);N<b&&(b=N,M=P)}let S=l[M],A=f[S].clone().applyMatrix4(a),g=Jn(u,S,t),w=[];for(let P of g.keys())w.push(f[P].clone().applyMatrix4(a));if(w.length<6)return{error:"Not enough surface detail near this point to trace a loop. Try a different spot."};let v=eo(A,c,w);return $t(r,a,s,e.point.clone(),v)}function Kr(e,t=new H(0,1,0)){let o=_t(e);if(!o)return{error:"Pick a point on the mesh surface to trace a loop around it."};let{geometry:n,matrix:r,weldTolerance:a}=o,s=t.clone().normalize();return s.lengthSq()===0?{error:"Couldn't determine a horizontal direction."}:$t(n,r,a,e.point.clone(),s)}function Ft(e){if(!(e.object instanceof Ze)||!e.face)return null;let t=e.object,o=t.matrixWorld.clone();if(e.instanceId!==void 0&&"getMatrixAt"in t){let n=new Vt;t.getMatrixAt(e.instanceId,n),o.multiply(n)}return[e.face.a,e.face.b,e.face.c].map(n=>t.getVertexPosition(n,new H).applyMatrix4(o))}function Zr(e){if(!(e.object instanceof Ze))return!1;for(let o=e.object;o;o=o.parent)if(!o.visible||o.userData.riEditorGizmo||o.userData.riDecal)return!1;return(Array.isArray(e.object.material)?e.object.material:[e.object.material])[e.face?.materialIndex??0]?.visible!==!1}function Yr(e,t,o,n,r,a=12){let s=Ft(e),i=s?s[1].clone().sub(s[0]).cross(s[2].clone().sub(s[0])).normalize():null,c={position:e.point.toArray(),...i&&i.lengthSq()>0?{normal:i.toArray()}:{},...s?{faceVertices:s.map(m=>m.toArray())}:{}};if(!s||r==="none")return c;let l=m=>{let d=new Kn(m.x,m.y,m.z,1).applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix);return d.w<=0||d.z/d.w<-1||d.z/d.w>1?null:{screen:new zt((d.x/d.w+1)*n.width/2,(1-d.y/d.w)*n.height/2),w:d.w}},f=s.map(l),u=a;if((r==="vertex"||r==="auto")&&(f.forEach((m,d)=>{let p=m?.screen.distanceTo(o)??1/0;p<=u&&(u=p,c.position=s[d].toArray(),c.snapped="vertex")}),c.snapped))return c;if(r==="edge"||r==="auto")for(let m=0;m<3;m+=1){let d=(m+1)%3,p=f[m],M=f[d];if(!p||!M)continue;let b=M.screen.clone().sub(p.screen);if(b.lengthSq()===0)continue;let S=Math.max(0,Math.min(1,o.clone().sub(p.screen).dot(b)/b.lengthSq())),A=p.screen.clone().addScaledVector(b,S).distanceTo(o);if(A<=u){u=A;let g=S*p.w/((1-S)*M.w+S*p.w);c.position=s[m].clone().lerp(s[d],g).toArray(),c.snapped="edge"}}return c}var ro=["m","cm","mm","in","ft"],Je={m:1,cm:.01,mm:.001,in:.0254,ft:.3048},io=["distance","angle","area","pointToPlane","wrap","wrapHorizontal"];function Qe(e){return ro.includes(e)}function ao(e={},t="m"){let o=e.displayUnit??t,n=e.metersPerUnit??Je[e.sourceUnit??"m"];if(!Number.isFinite(n)||n<=0)throw new Error("Measurement scale must be a positive finite number.");return{displayUnit:o,metersPerUnit:n,factor:Qe(o)?n/Je[o]:1}}function ei(e){try{return new URL(e,typeof window<"u"?window.location?.href:void 0).href}catch{return e}}function ti(e,t,o,n={}){if(!Qe(o)||!Number.isFinite(e)||e<=0||!Number.isFinite(t)||t<=0)throw new Error("Calibration needs two distinct points and a positive known distance.");let r=t*Je[o]/e;if(!Number.isFinite(r)||r<=0)throw new Error("Calibration scale is outside the supported range.");return{...n,metersPerUnit:r}}function qt(e,t){let o=t.map(n=>n.position);if(e==="angle"){let n=Dt(o);return n===null?null:{value:n,dimension:0}}if(e==="area"){let n=Ut(o);return"error"in n?null:{value:n.area,dimension:2}}if(e==="pointToPlane"){let n=t.length===2?Lt(t[0],t[1].position):null;return n?{value:n.distance,dimension:1}:null}return t.length<(e==="distance"?2:3)?null:{value:Ye(o,e!=="distance"),dimension:1}}function so(e,t={},o="m",n=e.points,r=e.approximate?"approximate":"ready"){let a=qt(e.tool,n),{factor:s,displayUnit:i}=ao(t,o),c=r==="ready"||r==="approximate",l=c&&a?a.value*s**a.dimension:null;return{id:e.id,status:c?a&&l!==null&&Number.isFinite(l)?r:"invalid":r,rawValue:c&&a&&Number.isFinite(a.value)?a.value:null,value:l!==null&&Number.isFinite(l)?l:null,unit:e.tool==="angle"?"\xB0":e.tool==="area"?`${i}\xB2`:i}}function ye(e){function t(){throw new Error("Invalid measurements: expected settings and valid named measurements with finite points.")}let o=i=>!!i&&typeof i=="object"&&!Array.isArray(i),n=i=>Array.isArray(i)&&i.length===3&&i.every(c=>typeof c=="number"&&Number.isFinite(c));typeof e=="string"&&(e.length>5*1024*1024&&t(),e=JSON.parse(e)),(!o(e)||e.version!==void 0&&e.version!==1||!o(e.settings)||!Array.isArray(e.items)||e.items.length>256)&&t();let r={};for(let i of["sourceUnit","displayUnit"])e.settings[i]!==void 0&&(Qe(e.settings[i])||t(),r[i]=e.settings[i]);e.settings.metersPerUnit!==void 0&&((typeof e.settings.metersPerUnit!="number"||!Number.isFinite(e.settings.metersPerUnit)||e.settings.metersPerUnit<=0)&&t(),r.metersPerUnit=e.settings.metersPerUnit);let a=new Set,s=e.items.map(i=>{(!o(i)||typeof i.id!="string"||!i.id||a.has(i.id)||typeof i.name!="string"||!i.name.trim()||typeof i.modelId!="string"||!i.modelId||!io.includes(i.tool)||!Array.isArray(i.points)||i.points.length>8192||typeof i.createdAt!="string"||!Number.isFinite(Date.parse(i.createdAt)))&&t(),a.add(i.id),i.tilesetUrl!==void 0&&i.tilesetUrl!==null&&typeof i.tilesetUrl!="string"&&t(),(i.visible!==void 0&&typeof i.visible!="boolean"||i.approximate!==void 0&&typeof i.approximate!="boolean")&&t();let c=new Set,l=i.points.map(u=>{if((!o(u)||typeof u.id!="number"||!Number.isFinite(u.id)||!n(u.position))&&t(),c.has(u.id)&&t(),c.add(u.id),u.normal!==void 0&&!n(u.normal)&&t(),u.faceVertices!==void 0&&(!Array.isArray(u.faceVertices)||u.faceVertices.length!==3||!u.faceVertices.every(n))&&t(),u.snapped!==void 0&&!["vertex","edge"].includes(u.snapped)&&t(),u.anchor!==void 0){let d=u.anchor;(!o(d)||typeof d.nodeId!="string"||!d.nodeId||!n(d.localPosition)||typeof d.geometrySignature!="string"||typeof d.poseSignature!="string")&&t(),d.localNormal!==void 0&&!n(d.localNormal)&&t(),d.localFaceVertices!==void 0&&(!Array.isArray(d.localFaceVertices)||d.localFaceVertices.length!==3||!d.localFaceVertices.every(n))&&t(),d.instanceId!==void 0&&(!Number.isInteger(d.instanceId)||d.instanceId<0)&&t()}let m=u.anchor;return{id:u.id,position:[...u.position],...u.normal?{normal:[...u.normal]}:{},...u.faceVertices?{faceVertices:u.faceVertices.map(d=>[...d])}:{},...u.snapped?{snapped:u.snapped}:{},...m?{anchor:{nodeId:m.nodeId,localPosition:[...m.localPosition],geometrySignature:m.geometrySignature,poseSignature:m.poseSignature,...m.localNormal?{localNormal:[...m.localNormal]}:{},...m.localFaceVertices?{localFaceVertices:m.localFaceVertices.map(d=>[...d])}:{},...m.instanceId!==void 0?{instanceId:m.instanceId}:{}}}:{}}}),f={id:i.id,name:i.name,modelId:i.modelId,tool:i.tool,points:l,createdAt:i.createdAt,...i.tilesetUrl!==void 0?{tilesetUrl:i.tilesetUrl}:{},...i.visible!==void 0?{visible:i.visible}:{},...i.approximate!==void 0?{approximate:i.approximate}:{}};return qt(f.tool,l)||t(),f});return{settings:r,items:s}}function ni(e){return JSON.stringify({version:1,...ye(e)},null,2)}function oi(e,t,o="m"){let n=ye(e),r=new Map(t?.map(s=>[s.id,s])),a=s=>{let i=String(s??"");return/^[=+@-]/.test(i)&&(i=`'${i}`),`"${i.replace(/"/g,'""')}"`};return[["id","name","modelId","type","status","value","unit","createdAt"],...n.items.map(s=>{let i=r.get(s.id)??so(s,n.settings,o);return[s.id,s.name,s.modelId,s.tool,i.status,i.value,i.unit,s.createdAt]})].map(s=>s.map(a).join(",")).join(`\r
|
|
2
2
|
`)}function Wt(e){if(!Array.isArray(e)||e.length>128)throw new Error("Invalid selections: expected up to 128 named selection sets.");let t=new Set;return e.map(o=>{if(!o||typeof o!="object"||typeof o.id!="string"||!o.id||t.has(o.id)||typeof o.name!="string"||!o.name.trim()||o.name.length>200||!Array.isArray(o.objectIds)||o.objectIds.length>1e5||o.objectIds.some(n=>typeof n!="string"||!n))throw new Error("Invalid selections: each set needs a unique id, a name, and model object ids.");return t.add(o.id),{id:o.id,name:o.name.trim(),objectIds:[...new Set(o.objectIds)]}})}var ie=5*1024*1024,co=["activeModelId","modelUrl","modelFormat","tilesetUrl","models","mergeModels","sceneConfig","isolation","multiSelectedKeys","activeAnnotation","annotationCategories","backgroundColor","shadows","cinematic","cameraControllerType","objectTransformSpace","arScaleMode","usdzUrl","measurements","measurementSettings","measurementUnit","measurementModelId"];function R(e,t){throw new Error(`Invalid viewer state at ${e}: ${t}`)}function X(e,t){(!e||typeof e!="object"||Array.isArray(e))&&R(t,"expected an object.")}function Se(e,t){(!Array.isArray(e)||!e.every(o=>typeof o=="string"))&&R(t,"expected strings.")}function ee(e,t,o){(!Array.isArray(e)||e.length!==t||!e.every(n=>typeof n=="number"&&Number.isFinite(n)))&&R(o,`expected ${t} finite numbers.`)}function lo(e){let t=new Set,o=0;function n(r,a,s){if((++o>2e5||s>64)&&R(a,"configuration is too complex."),r===null||typeof r=="string"||typeof r=="boolean"||typeof r=="number"&&Number.isFinite(r))return r;(typeof r!="object"||!r)&&R(a,"expected JSON data (finite numbers, no functions)."),t.has(r)&&R(a,"cyclic data."),!Array.isArray(r)&&Object.getPrototypeOf(r)!==Object.prototype&&Object.getPrototypeOf(r)!==null&&R(a,"expected plain JSON data."),t.add(r);let i=Array.isArray(r)?[]:{};for(let[c,l]of Object.entries(r))["__proto__","constructor","prototype"].includes(c)&&R(`${a}.${c}`,"reserved property."),l!==void 0?i[c]=n(l,`${a}.${c}`,s+1):Array.isArray(r)&&R(a,"undefined array entry.");return t.delete(r),i}return n(e,"state",0)}function te(e,t,o,n,r=!1,a){let s=e[t];if(s==null||s==="")return;typeof s!="string"&&R(o,"expected a URL.");let i=r?je(s)??s:s;if(i.trim().startsWith("blob:")){if(r&&a){a.set(s,{source:i,path:o});return}R(o,r?"this image is temporary. Use getStateAsync() for JSON or createShareUrl() to include it.":"upload this model/environment asset to a durable URL before saving or sharing.")}if(i!==s&&(s=i,e[t]=i),r&&/^data:image\//i.test(s))return;let c;try{c=new URL(s,n??"https://relative.invalid/")}catch{R(o,"invalid asset URL.")}["http:","https:"].includes(c.protocol)||R(o,"use an HTTP(S) asset URL."),n&&(e[t]=c.href)}function mo(e,t){X(e,t),ee(e.position,3,`${t}.position`),ee(e.target,3,`${t}.target`),(typeof e.zoom!="number"||e.zoom<=0)&&R(t,"zoom must be positive."),e.fov!==null&&(typeof e.fov!="number"||e.fov<=0||e.fov>=180)&&R(t,"fov must be null or between 0 and 180.");for(let o of["azimuthAngle","polarAngle"])e[o]!==void 0&&typeof e[o]!="number"&&R(t,`${o} must be a number.`)}function Xt(e,t,o,n){X(e,t),(typeof e.id!="number"||typeof e.title!="string"||typeof e.description!="string")&&R(t,"expected an annotation id, title and description.");for(let r of["worldPosition","localPosition"])ee(e[r],3,`${t}.${r}`);e.images!==void 0&&(Array.isArray(e.images)||R(t,"images must be an array."),e.images.forEach(r=>{X(r,t),te(r,"src",t,o,!0,n)})),e.links!==void 0&&(Array.isArray(e.links)||R(t,"links must be an array."),e.links.forEach(r=>{X(r,t),te(r,"href",t,o,!1,n)}))}function Kt(e,t){X(e,t),e.waypoints!==void 0&&(Array.isArray(e.waypoints)||R(t,"expected waypoints."),e.waypoints.forEach(o=>{X(o,t),ee(o.position,3,t),ee(o.target,3,t)}));for(let o of["enabled","loop","autoPlay"])e[o]!==void 0&&typeof e[o]!="boolean"&&R(t,`${o} must be boolean.`);e.duration!==void 0&&(typeof e.duration!="number"||e.duration<=0)&&R(t,"duration must be positive.")}function et(e,t,o){if(t!==null)if(Array.isArray(t))Array.isArray(e)||R(o,"expected an array."),t.length&&e.forEach(n=>et(n,t[0],o));else if(typeof t=="object"){X(e,o);for(let[n,r]of Object.entries(t))et(e[n],r,`${o}.${n}`)}else typeof e!=typeof t&&R(o,`expected ${typeof t}.`)}function Gt(e,t,o,n){if(et(e,fe,t),e.measurements!==void 0&&(e.measurements=ye(e.measurements)),e.sequences!==void 0&&(e.sequences=Ae(e.sequences)),e.selectionSets!==void 0&&(e.selectionSets=Wt(e.selectionSets)),e.product!==void 0&&(e.product=Mt(e.product),e.product.definition.groups.forEach(r=>r.options.forEach(a=>a.appearance?.forEach(s=>{for(let[i,c]of Object.entries(s.material??{}))c&&typeof c=="object"&&!Array.isArray(c)&&"path"in c&&te(c,"path",`${t}.product.material.${i}.path`,o,!0,n)})))),ee(e.model.rotation,3,`${t}.model.rotation`),e.lighting.lights.forEach(r=>ee(r.position,3,`${t}.lighting.lights`)),e.annotations.forEach(r=>Xt(r,`${t}.annotations`,o,n)),e.animations.autoplayClip!==null&&typeof e.animations.autoplayClip!="string"&&R(t,"invalid autoplay clip."),e.animations.clips.forEach(r=>{X(r,t),(typeof r.sourceName!="string"||typeof r.displayName!="string"||typeof r.hidden!="boolean"||typeof r.speed!="number"||!["repeat","once","ping-pong"].includes(r.loopMode))&&R(t,"invalid animation clip settings.")}),e.cinematic!==void 0&&Kt(e.cinematic,`${t}.cinematic`),e.styleRules!==void 0&&!Array.isArray(e.styleRules)&&R(t,"styleRules must be an array."),te(e.environment,"customEnvironmentUrl",`${t}.environment`,o,!1,n),te(e.background,"imageUrl",`${t}.background`,o,!0,n),e.model.activeVariants!==void 0&&Se(e.model.activeVariants,t),e.section!==void 0)try{e.section=be(e.section)}catch(r){R(`${t}.section`,r.message)}}function Zt(e,t,o,n){X(e,t);for(let[r,a]of Object.entries(e)){let s=`${t}.${r}`;X(a,s),(typeof a.id!="string"||typeof a.modelObjectId!="string")&&R(s,"expected binding id and modelObjectId.");for(let i of["label","group","type","status"])a[i]!==void 0&&typeof a[i]!="string"&&R(s,`${i} must be a string.`);a.tags!==void 0&&Se(a.tags,s),a.metadata!==void 0&&X(a.metadata,`${s}.metadata`),a.metrics!==void 0&&(X(a.metrics,s),Object.values(a.metrics).some(i=>typeof i!="number")&&R(s,"metrics must be numbers.")),a.actions!==void 0&&(Array.isArray(a.actions)||R(s,"actions must be an array."),a.actions.forEach(i=>{X(i,s),(typeof i.id!="string"||typeof i.label!="string"||i.type!=="command"||i.effects!==void 0&&!Array.isArray(i.effects))&&R(s,"invalid action.")}));for(let i of["visible","removed","selectable","hoverable"])a[i]!==void 0&&typeof a[i]!="boolean"&&R(s,`${i} must be boolean.`);if(a.transform!==void 0){X(a.transform,s);for(let i of["position","rotation","scale","shear"])a.transform[i]!==void 0&&ee(a.transform[i],3,`${s}.transform.${i}`);a.transform.pivot!==void 0&&(X(a.transform.pivot,s),ee(a.transform.pivot.point,3,s),ee(a.transform.pivot.offset,3,s))}if(a.style!==void 0&&(X(a.style,s),a.style.material!==void 0)){X(a.style.material,s);for(let[i,c]of Object.entries(a.style.material))c&&typeof c=="object"&&!Array.isArray(c)&&"path"in c&&te(c,"path",`${s}.style.material.${i}.path`,o,!0,n)}a.decals!==void 0&&(Array.isArray(a.decals)||R(s,"decals must be an array."),a.decals.forEach(i=>{X(i,s),(typeof i.id!="string"||typeof i.size!="number"||i.size<=0)&&R(s,"invalid decal."),ee(i.position,3,s),ee(i.normal,3,s),te(i,"image",s,o,!0,n)}))}}function Ht(e,t,o,n){Array.isArray(e)||R(t,"expected merge sources."),e.forEach(r=>{X(r,t),(typeof r.url!="string"||!r.url||typeof r.namePrefix!="string")&&R(t,"expected source URL and prefix."),te(r,"url",t,o,!1,n)})}function uo(e,t,o){X(e,"configuration");let n=Object.fromEntries(co.filter(r=>e[r]!==void 0).map(r=>[r,e[r]]));(typeof n.modelUrl!="string"||!n.modelUrl)&&R("configuration.modelUrl","expected the active model URL.");for(let r of["modelUrl","tilesetUrl","usdzUrl"])te(n,r,`configuration.${r}`,t,!1,o);if(n.sceneConfig!==void 0&&Gt(n.sceneConfig,"configuration.sceneConfig",t,o),n.mergeModels!==void 0&&Ht(n.mergeModels,"configuration.mergeModels",t,o),n.models!==void 0){(!Array.isArray(n.models)||n.models.length===0)&&R("configuration.models","expected model entries.");let r=new Set,a=new Set;n.models.forEach(s=>{X(s,"model"),(typeof s.url!="string"||!s.url)&&R("model.url","expected a URL."),te(s,"url","model.url",t,!1,o),s.id!==void 0&&(typeof s.id!="string"||!s.id.trim())&&R("model.id","expected a nonempty instance ID.");let i=Ke({id:s.id,url:s.url});a.has(i)&&R("configuration.models","instance identities must be unique; assign IDs when reusing a URL."),a.add(i),s.transform!==void 0&&(s.transform=he(s.transform)),s.visible!==void 0&&typeof s.visible!="boolean"&&R("model.visible","expected boolean."),r.add(s.url),Zt(s.objectBindings,"model.objectBindings",t,o),s.sceneConfig!==void 0&&Gt(s.sceneConfig,"model.sceneConfig",t,o),s.mergeModels!==void 0&&Ht(s.mergeModels,"model.mergeModels",t,o)}),n.activeModelId!==void 0&&(typeof n.activeModelId!="string"||!a.has(n.activeModelId))&&R("configuration.activeModelId","active instance is not in models."),n.activeModelId!==void 0&&n.models.find(s=>Ke(s)===n.activeModelId)?.url!==n.modelUrl&&R("configuration.modelUrl","source does not match the active instance."),r.has(n.modelUrl)||R("configuration.modelUrl","active model is not in models.")}if(n.multiSelectedKeys!==void 0&&Se(n.multiSelectedKeys,"configuration.multiSelectedKeys"),n.annotationCategories!==void 0&&n.annotationCategories!==null&&Se(n.annotationCategories,"configuration.annotationCategories"),n.activeAnnotation!==void 0&&n.activeAnnotation!==null&&Xt(n.activeAnnotation,"configuration.activeAnnotation",t,o),n.measurements!==void 0||n.measurementSettings!==void 0){let r=ye({items:n.measurements??[],settings:n.measurementSettings??{}});n.measurements!==void 0&&(n.measurements=r.items),n.measurementSettings!==void 0&&(n.measurementSettings=r.settings)}n.measurementModelId!==void 0&&typeof n.measurementModelId!="string"&&R("configuration.measurementModelId","expected a stable id."),n.measurementUnit!==void 0&&typeof n.measurementUnit!="string"&&R("configuration.measurementUnit","expected a unit label.");for(let r of["backgroundColor"])n[r]!==void 0&&typeof n[r]!="string"&&R(r,"expected a string.");n.shadows!==void 0&&typeof n.shadows!="boolean"&&R("shadows","expected boolean.");for(let[r,a]of Object.entries({modelFormat:["glb","gltf","obj","fbx","usdz","stl","ply"],cameraControllerType:["orbit","pointerLock"],objectTransformSpace:["world","local"],arScaleMode:["normalized","real-world"]}))n[r]!==void 0&&!a.includes(n[r])&&R(r,"unsupported value.");if(n.cinematic!==void 0&&Kt(n.cinematic,"cinematic"),n.isolation!==void 0&&n.isolation!==null){let{target:r,mode:a,ghostOpacity:s}=n.isolation;typeof r=="string"||Array.isArray(r)&&r.every(i=>typeof i=="string")||r&&typeof r=="object"&&["group","tag","type"].some(i=>typeof r[i]=="string")||R("configuration.isolation","invalid target."),a!==void 0&&!["ghost","hide"].includes(a)&&R("configuration.isolation","invalid mode."),s!==void 0&&(typeof s!="number"||s<0||s>1)&&R("configuration.isolation","opacity must be between 0 and 1.")}return n}function Yt(e,t,o,n){if(!(!e||typeof e!="object"))for(let[r,a]of Object.entries(e))r!=="metadata"&&(typeof a=="string"&&["url","modelUrl","tilesetUrl","usdzUrl","path","image","src","href","imageUrl","customEnvironmentUrl"].includes(r)?te(e,r,`${t}.${r}`,o,["path","image","src","imageUrl"].includes(r),n):Yt(a,`${t}.${r}`,o,n))}function Jt(e,t,o){typeof e=="string"&&(new TextEncoder().encode(e).length>ie&&R("state","exceeds the 5 MiB limit."),e=JSON.parse(e));let n=lo(e);X(n,"state"),new TextEncoder().encode(JSON.stringify(n)).length>ie&&R("state","exceeds the 5 MiB limit."),n.version!==void 0&&n.version!==1&&R("version","unsupported version."),n.version===void 0&&(n.objectBindings!==void 0||n.configuration!==void 0)&&R("version","full configurations require version 1.");let r={};return n.version!==void 0&&(r.version=1),n.camera!==void 0&&(mo(n.camera,"camera"),r.camera=n.camera),n.hidden!==void 0&&(Se(n.hidden,"hidden"),r.hidden=n.hidden),n.selected!==void 0&&(n.selected!==null&&typeof n.selected!="string"&&R("selected","expected an object id or null."),r.selected=n.selected),n.objectBindings!==void 0&&(Zt(n.objectBindings,"objectBindings",t,o),r.objectBindings=n.objectBindings),n.configuration!==void 0&&(r.configuration=uo(n.configuration,t,o)),Yt(r,"state",t,o),new TextEncoder().encode(JSON.stringify(r)).length>ie&&R("state","exceeds the 5 MiB limit."),r}function pi(e,t){return JSON.stringify(Te(e,t))}function Te(e,t){return Jt(e,t)}async function Qt(e,t){let o=new Map,n=Jt(e,t,o),r=new Map,a=new Map;for(let[i,{source:c,path:l}]of o){let f=r.get(c);f||(f=(async()=>{let u;try{u=await fetch(c)}catch{R(l,"this temporary image is no longer available. Reload or reselect it before saving.")}u.ok||R(l,"could not read the temporary image. Reload or reselect it before saving.");let m=await u.blob();m.size>ie*3/4&&R(l,"embedded image exceeds the 5 MiB configuration limit. Use a hosted image URL.");let d=new Uint8Array(await m.arrayBuffer()),p=m.type.split(";")[0].toLowerCase(),M=p.startsWith("image/")?p:fo(d);M||R(l,"temporary asset is not a supported image. Use a hosted asset URL.");let b="";for(let S=0;S<d.length;S+=32768)b+=String.fromCharCode(...d.subarray(S,S+32768));return`data:${M};base64,${btoa(b)}`})(),r.set(c,f)),a.set(i,await f)}function s(i){if(!(!i||typeof i!="object"))for(let[c,l]of Object.entries(i))c!=="metadata"&&(["path","image","src","imageUrl"].includes(c)&&typeof l=="string"&&a.has(l)?i[c]=a.get(l):s(l))}return s(n),Te(n,t)}function fo(e){let t=(o,n)=>String.fromCharCode(...e.subarray(o,n));if(e[0]===137&&t(1,4)==="PNG")return"image/png";if(e[0]===255&&e[1]===216&&e[2]===255)return"image/jpeg";if(t(0,3)==="GIF")return"image/gif";if(t(0,4)==="RIFF"&&t(8,12)==="WEBP")return"image/webp";if(t(4,8)==="ftyp"&&["avif","avis"].includes(t(8,12)))return"image/avif";if(/<svg[\s>]/i.test(new TextDecoder().decode(e.subarray(0,1024))))return"image/svg+xml"}import{strFromU8 as po,strToU8 as en,unzlibSync as go,zlibSync as bo}from"fflate";var Ee="ri-ar",Be="ri-ar-id",tn=4096,ho=2200,yo=en(JSON.stringify(fe)).byteLength;function nn(e){return e==="localhost"||e.endsWith(".localhost")||/^127\./.test(e)||e==="[::1]"||e==="0.0.0.0"}function on(e){if(typeof e=="string"&&/^https?:\/\//i.test(e)&&nn(new URL(e).hostname))throw new Error("An asset URL points to this computer. Use model and texture URLs reachable from the phone.");if(e&&typeof e=="object")for(let t of Object.values(e))on(t)}function wi(e){return e&&typeof e=="object"?e:void 0}function xi(e){let t=new URLSearchParams(new URL(e,"https://viewer.invalid/").hash.slice(1));return t.has(Ee)||t.has(Be)}function So(e,t){let o=new URL(e,t);if(!["https:","http:"].includes(o.protocol))throw new Error("AR handoff requires an HTTP(S) URL.");return o.toString()}function Ai(e,t="",o=2048){let n=new Set,r=a=>{if(typeof a=="string")return je(a)??a;if(a===null||typeof a!="object")return a;if(n.has(a))throw new Error("AR configuration cannot contain cycles.");n.add(a);let s=Array.isArray(a)?a.map(r):Object.fromEntries(Object.keys(a).sort().map(i=>[i,r(a[i])]));return n.delete(a),s};return JSON.stringify([t,o,r({...e,camera:void 0})])}function rn(e,t){if(JSON.stringify(e)!==JSON.stringify(t))return e&&t&&typeof e=="object"&&typeof t=="object"&&!Array.isArray(e)&&!Array.isArray(t)?Object.fromEntries(Object.entries(e).map(([o,n])=>[o,rn(n,t[o])]).filter(([,o])=>o!==void 0)):e}function an(e,t,o=0){if(o>64)throw new Error("AR configuration is too deeply nested.");if(e&&t&&typeof e=="object"&&typeof t=="object"&&!Array.isArray(e)&&!Array.isArray(t)){let n=e,r=t;return Object.fromEntries([...new Set([...Object.keys(r),...Object.keys(n)])].map(a=>[a,Object.prototype.hasOwnProperty.call(n,a)?an(n[a],r[a],o+1):r[a]]))}return e}function sn(e,t){let o=structuredClone(e);if(o.configuration){o.configuration.sceneConfig&&(o.configuration.sceneConfig=t(o.configuration.sceneConfig));for(let n of o.configuration.models??[])n.sceneConfig&&(n.sceneConfig=t(n.sceneConfig))}return o}function we(e){e?.throwIfAborted()}async function Mi(e,t,o,n){we(n);let r=new URL(So(t));if(nn(r.hostname))throw new Error("Phone links need a viewer URL reachable from your phone. Download the USDZ for local uploads, or provide a public viewer URL.");let a=await Qt(e,r.toString());we(n),on(a);let s=new URLSearchParams(r.hash.slice(1));if(s.delete(Ee),s.delete(Be),s.delete("view"),s.delete("viewId"),s.delete("view-id"),o){let i=await o.save(a);if(we(n),typeof i!="string"||!i||i.length>512)throw new Error("AR storage returned an invalid configuration ID.");s.set(Be,i)}else{let i=bo(en(JSON.stringify({ar:1,state:sn(a,l=>rn(l,fe)??{})})),{level:9});if(i.byteLength>tn)throw new Error("This configuration needs an AR storage adapter to share on a phone. The USDZ download is still available.");let c="";for(let l of i)c+=String.fromCharCode(l);s.set(Ee,btoa(c).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""))}if(r.hash=s.toString(),r.toString().length>ho)throw new Error("This configuration is too large for a reliable QR code. Use an AR storage adapter or download the USDZ.");return r.toString()}async function Ci(e,t,o){let n=new URL(e),r=new URLSearchParams(n.hash.slice(1)),a=r.get(Be),s=r.get(Ee);if(a!==null&&s!==null)throw new Error("AR link contains conflicting configurations.");if(a===null&&s===null)return null;we(o);let i;if(a!==null){if(!t)throw new Error("This AR link requires the application's configuration storage adapter.");if(!a||a.length>512)throw new Error("Invalid AR configuration ID.");i=await t.load(a)}else{if(!s||s.length>Math.ceil(tn*4/3)||!/^[\w-]+$/.test(s))throw new Error("Invalid or oversized AR link.");let l=atob(s.replace(/-/g,"+").replace(/_/g,"/")),f=Uint8Array.from(l,d=>d.charCodeAt(0)),u=go(f);if(u.byteLength>ie)throw new Error("AR configuration exceeds the 5 MiB limit.");let m=JSON.parse(po(u));if(m?.ar===1&&m.state){let d=m.state.configuration,p=(d?.sceneConfig?1:0)+(Array.isArray(d?.models)?d.models.filter(M=>M?.sceneConfig).length:0);if(u.byteLength+p*yo>ie)throw new Error("Expanded AR configuration exceeds the 5 MiB limit.");i=sn(m.state,M=>an(M,fe))}else i=m}we(o);let c=Te(i,n.toString());if(c.version!==1||!c.configuration)throw new Error("AR handoff requires a complete versioned viewer configuration.");return c}var tt=new WeakMap;function vi(e,t){t?tt.set(e,t):tt.delete(e)}function cn(e){e.traverse(t=>{let o=tt.get(t);if(o)throw new Error(o)})}import{Box3 as $o,BufferAttribute as Pe,BufferGeometry as On,Color as _o,DoubleSide as Fo,FrontSide as dt,Group as In,Matrix4 as qo,Mesh as Wo,Vector3 as Ne}from"three";import{PropertyBinding as nt}from"three";var ot=Symbol("react-immersive.model-node-id");function wo(e,t){Object.defineProperty(e,ot,{value:t,configurable:!0})}function ae(e){let t=new Map;e.traverse(c=>{if(!c.name)return;let l=t.get(c.name);l?l.push(c):t.set(c.name,[c])});let o=Object.create(null),n=new WeakMap,r=new Map,a=new Set(Array.from(t,([c,l])=>l.length===1?c:null).filter(c=>c!==null)),s=new Set,i=(c,l)=>{wo(c,l),o[l]=c,n.set(c,l),s.add(l)};for(let[c,l]of t)l.length===1&&i(l[0],c);for(let[c,l]of t){if(l.length<2)continue;let f=[];l.forEach((u,m)=>{let d=`${c} [${m+1}]`,p=d,M=2;for(;a.has(p)||s.has(p);)p=`${d}.${M++}`;i(u,p),f.push(p)}),r.set(c,f)}return{nodesById:o,idByNode:n,duplicateNames:r}}function xe(e){return e[ot]??e.name??null}function Ii(e,t){let o=t.replace(/\.[^./\\]+$/,"");e.traverse(n=>{n.name&&(n.name=nt.sanitizeNodeName(`${o}_${n.name}`))})}function Ri(e,t){let o=t.replace(/\.[^./\\]+$/,""),n=e.clone();for(let r of n.tracks){let s=nt.parseTrackName(r.name).nodeName??"",i=nt.sanitizeNodeName(`${o}_${s}`);r.name=i+r.name.slice(s.length)}return n}function ln(e,t){let o=null,n=[];return e.traverse(r=>{r[ot]===t&&(o=r),r.name===t&&n.push(r)}),o??(n.length===1?n[0]:null)}import{AnimationClip as Ro,Group as To,Matrix4 as Eo,Vector3 as Bo,PropertyBinding as Cn}from"three";import{clone as Po}from"three/examples/jsm/utils/SkeletonUtils.js";import{strFromU8 as No,strToU8 as mt,unzipSync as Vo,zipSync as zo}from"fflate";import{AnimationMixer as xo,LoopOnce as Ao,LoopPingPong as mn,LoopRepeat as Mo}from"three";function dn(e){let t=e._loopCount;return e.loop===mn&&(t&1)===1}function Co(e){return dn(e)?e.getClip().duration-e.time:e.time}function un({root:e,clips:t,getClipConfig:o,onChange:n}){let r=new xo(e),a=new Map;for(let{clip:h,sourceName:C}of t)a.set(C,r.clipAction(h));let s=new Map,i=new Set,c=new Map,l=1,f=h=>typeof h=="string",u=h=>f(h)?s.has(h)?[h]:[]:[...s.keys()],m=(h,C)=>{let k=jt(o(C));k==="once"?h.setLoop(Ao,1):k==="ping-pong"?h.setLoop(mn,1/0):h.setLoop(Mo,1/0),h.clampWhenFinished=k==="once"},d=h=>{h.action.setEffectiveTimeScale(h.reverse?-h.speed:h.speed)},p=h=>{let C=s.get(h);C&&(C.action.stop(),s.delete(h))},M=(h,C={})=>{let k=a.get(h);if(!k||o(h)?.hidden)return;let E=Number.isFinite(C.fade)&&C.fade>0?C.fade:0,V=C.reverse??!1;if(!C.alongside)for(let[B,q]of[...s])B!==h&&(E>0?(s.delete(B),q.action.fadeOut(E),i.add(q.action)):p(B));i.delete(k)&&k.stop();let y=k.getClip().duration,x=s.get(h),j=()=>{k.reset(),V&&(k.time=y),k.play()};if(!x)j(),E>0&&k.fadeIn(E);else{let B=V?k.time<=0:k.time>=y;x.finished&&B&&j(),k.paused=!1,k.enabled=!0,s.delete(h)}m(k,h),x={action:k,speed:o(h)?.speed??c.get(h)??l,reverse:V,finished:!1},x.speed=ke(x.speed),d(x),s.set(h,x),n()},b=h=>{for(let C of u(h))s.get(C).action.paused=!0;n()},S=h=>{for(let C of u(h))p(C);if(!f(h)){for(let C of i)C.stop();i.clear()}n()},A=(h,C)=>{let k=ke(h);f(C)?c.set(C,k):l=k;for(let E of u(C)){let V=s.get(E);c.set(E,k),V.speed=k,d(V)}n()},g=(h,C)=>{for(let k of u(C)){let E=s.get(k),V=E.action.getClip().duration,y=Math.min(Math.max(h,0),V);E.action.time=dn(E.action)?V-y:y,E.finished&&(E.finished=!1,E.action.paused=!0)}r.update(0),n()},w=()=>{for(let[h,C]of[...s]){let k=o(h);if(k?.hidden){p(h);continue}m(C.action,h),k?.speed!==void 0&&(C.speed=ke(k.speed),d(C))}n()},v=h=>{for(let C of s.values())C.action===h.action&&(C.finished=!0);n()};return r.addEventListener("finished",v),{play:M,pause:b,stop:S,setSpeed:A,seek:g,getState:()=>{let h=[...s].map(([k,E])=>({clip:k,status:E.finished?"finished":E.action.paused?"paused":"playing",time:Co(E.action),duration:E.action.getClip().duration,speed:E.speed,reverse:E.reverse})),C=h[h.length-1];return{currentClip:C?.clip??null,isPlaying:h.some(k=>k.status==="playing"),speed:C?.speed??l,time:C?.time??0,duration:C?.duration??0,active:h}},applyClipConfigs:w,isRunning:()=>{if(i.size>0)return!0;for(let{action:h}of s.values())if(!h.paused&&h.enabled)return!0;return!1},update:h=>{r.update(h);for(let C of i)(!C.enabled||C.getEffectiveWeight()<=0)&&(C.stop(),i.delete(C))},dispose:()=>{r.removeEventListener("finished",v),r.stopAllAction(),r.uncacheRoot(e),s.clear(),i.clear()}}}import{Color as fn}from"three";var rt=e=>e==="baseColor"?"color":e;function pn(e){let t=new Set;return e.traverse(o=>{let n=o;if(n.isMesh)for(let r of Array.isArray(n.material)?n.material:[n.material])r&&t.add(r)}),[...t]}function gn({root:e,controls:t,animations:o,invalidate:n,cameraEnabled:r=()=>!0}){let a=new Map,s=new Map,i=new Map,c=new Set,l=new Map,f=null,u="",m=g=>e()?ln(e(),g):null,d=g=>{if(g.kind==="camera"){let N=t();if(!N)return null;let O=ne(N.camera,N);return{position:O.position,target:O.target,fov:O.fov,zoom:O.zoom}}if(g.kind==="clip"){let N=o();return N?.clips.includes(g.clip)?N.getState?.().active.find(O=>O.clip===g.clip)?.time??0:null}let w=m(g.objectId);if(!w)return null;let v=g.property;if(v==="position"||v==="rotation"||v==="scale")return[w[v].x,w[v].y,w[v].z];if(v==="visible")return w.visible;let P=pn(w).find(N=>N[rt(v)]!==void 0),T=P?P[rt(v)]:void 0;return T?.isColor?`#${T.getHexString()}`:typeof T=="number"?T:null},p=g=>{if(!r())return;let w=t();w&&(w.stop(),w.setLookAt(...g.position,...g.target,!1),g.fov!==null&&"fov"in w.camera&&(w.camera.fov=g.fov,w.camera.updateProjectionMatrix()),w.zoomTo(g.zoom,!1),w.update(0))},M=g=>{if(a.has(g))return;g.updateWorldMatrix(!0,!0);let w=g.matrixAutoUpdate?void 0:xt(g.matrix,g.scale,g.quaternion).shear;a.set(g,{position:g.position.toArray(),rotation:[g.rotation.x,g.rotation.y,g.rotation.z],scale:g.scale.toArray(),matrix:g.matrix.clone(),auto:g.matrixAutoUpdate,shear:w});for(let v of bt(g))ht(v)||(Me(v,v.matrixWorld),c.add(v))},b=(g,w)=>{let v=o();v?.stop(g),w&&v&&(v.play(g,{alongside:!0,reverse:w.reverse}),v.setSpeed(w.speed,g),v.seek?.(w.time,g),w.status!=="playing"&&v.pause(g))};return{capture:d,restore:()=>{for(let[g,w]of l)b(g,w);l.clear();for(let[g,w]of a)g.position.fromArray(w.position),g.rotation.set(...w.rotation),g.scale.fromArray(w.scale),g.matrix.copy(w.matrix),g.matrixAutoUpdate=w.auto,g.matrixWorldNeedsUpdate=!0;a.clear(),s.forEach((g,w)=>w.visible=g),s.clear(),i.forEach((g,w)=>{g.forEach((v,P)=>{v instanceof fn?w[P].copy(v):w[P]=v}),w.needsUpdate=!0}),i.clear(),c.forEach(St),c.clear(),f&&p(f),f=null,u="",e()?.updateWorldMatrix(!0,!0),n()},inspect:g=>g.tracks.filter(w=>!w.muted&&w.keyframes.length&&(w.target.kind!=="camera"||r())&&d(w.target)===null).map(w=>`Unavailable target: ${w.name}.`),invalidate:n,apply:({sequence:g,time:w,playing:v})=>{let P=g.tracks.filter(O=>O.target.kind!=="camera"||r()).map(O=>({track:O,value:ut(O,w)})).filter(O=>O.value!==null);for(let[O,h]of l)P.some(({track:C})=>C.target.kind==="clip"&&C.target.clip===O)||(b(O,h),l.delete(O));for(let{track:O}of P)if(O.target.kind==="object"&&["position","rotation","scale"].includes(O.target.property)){let h=m(O.target.objectId);h&&M(h)}let T=new Map([...i.keys()].map(O=>[O,O.transparent]));s.forEach((O,h)=>h.visible=O),a.forEach((O,h)=>{h.position.fromArray(O.position),h.rotation.set(...O.rotation),h.scale.fromArray(O.scale),Le(h,O.shear)}),i.forEach((O,h)=>O.forEach((C,k)=>{C instanceof fn?h[k].copy(C):h[k]=C}));let N=o();for(let{track:O,value:h}of P){if(O.target.kind!=="clip"||!N?.seek||!N.clips.includes(O.target.clip))continue;let C=O.target.clip;l.has(C)||(l.set(C,N.getState?.().active.find(k=>k.clip===C)),N.play(C,{alongside:!0}),N.pause(C)),N.seek(h,C)}for(let{track:O,value:h}of P){let C=O.target;if(C.kind==="clip")continue;if(C.kind==="camera"){f||(f=d(C));let V=JSON.stringify(h);(v||V!==u)&&(p(h),u=V);continue}let k=m(C.objectId);if(!k)continue;let E=C.property;if(E==="visible")s.has(k)||s.set(k,k.visible),k.visible=h;else if(E==="position"||E==="rotation"||E==="scale")E==="rotation"?k.rotation.set(...h):k[E].fromArray(h),Le(k,a.get(k)?.shear);else for(let V of pn(k)){let y=rt(E),x=V[y];if(x===void 0)continue;let j=i.get(V);if(j||(j=new Map,i.set(V,j)),T.has(V)||T.set(V,V.transparent),j.has(y)||j.set(y,x?.isColor?x.clone():x),x?.isColor?x.set(h):V[y]=h,E==="opacity"){j.has("transparent")||j.set("transparent",V.transparent);let B=h<1||j.get("transparent")===!0;V.transparent=B}}}f&&!P.some(({track:O})=>O.target.kind==="camera")&&(p(f),u=""),T.forEach((O,h)=>{O!==h.transparent&&(h.needsUpdate=!0)}),e()?.updateWorldMatrix(!0,!0)}}}function bn(e){let t=new Map;return e.map((o,n)=>{let a=o.name.trim()||`Animation ${n+1}`,s=t.get(a)??0;return t.set(a,s+1),{clip:o,sourceName:s===0?a:`${a} (${s+1})`,duration:o.duration}})}import{Box3 as it,Group as jo,BufferAttribute as vo,Matrix4 as hn,Mesh as ko,Quaternion as Oo,Vector3 as pe}from"three";function Io(e){let t=e.getAttribute("arSourceVertex"),o=e.getAttribute("arNormalSign");if(!t)return;let n=new Map,r=[],a=[];for(let i=0;i<t.count;i++){let c=`${t.getX(i)}:${o?.getX(i)??1}`,l=n.get(c);l===void 0&&(l=r.length,r.push(i),n.set(c,l)),a.push(l)}let s=e.index?Array.from(e.index.array,i=>a[i]):a;for(let[i,c]of Object.entries(e.attributes)){let l=new Float32Array(r.length*c.itemSize);r.forEach((f,u)=>{for(let m=0;m<c.itemSize;m++)l[u*c.itemSize+m]=c.getComponent(f,m)}),e.setAttribute(i,new vo(l,c.itemSize))}e.setIndex(s)}function yn(e,t,o,n){let r=[],a=[],s=new Map;for(let i of e){let c=i.source;if(!c.isSkinnedMesh)continue;let l=t.get(c),f=c.skeleton,u=JSON.stringify(f.bones.map((O,h)=>[O.uuid,f.boneInverses[h].elements])),m=s.get(u);if(!m){let O=new Map(f.bones.map((x,j)=>[x,j])),h=f.bones.map(x=>{for(let j=x.parent;j;j=j.parent)if(O.has(j))return O.get(j);return-1}),C=[],k=x=>{C.includes(x)||(h[x]>=0&&k(h[x]),C.push(x))};f.bones.forEach((x,j)=>k(j));let E=C.map(x=>C.indexOf(h[x])),V=[];C.forEach((x,j)=>V.push(`${E[j]<0?"":V[E[j]]+"/"}J_${x}`));let y={name:`${n}_${r.length}`,joints:V,parents:E,bones:C.map(x=>t.get(f.bones[x])),bindTransforms:C.map(x=>f.boneInverses[x].clone().invert()),restTransforms:[],worlds:C.map(()=>new hn),referenceInverse:o.clone().invert(),frames:[]};if(y.bones.some(x=>!x))throw new Error("The AR skeleton has joints outside the exported scene.");m={rig:y,order:C},s.set(u,m),r.push(y)}Io(i.exported.geometry);let d=i.exported.geometry.getAttribute("arSourceVertex"),p=c.geometry.getAttribute("skinIndex"),M=c.geometry.getAttribute("skinWeight");if(!d||!p||!M||p.itemSize!==4||M.itemSize!==4)throw new Error("AR skeletal animation needs four joint indices and weights per vertex.");let b={target:i,node:l,rig:m.rig,reference:o,geomBind:c.bindMatrix.clone(),jointIndices:[],jointWeights:[],jointBounds:m.order.map(()=>new it),extent:new it},S=i.exported.geometry.getAttribute("position"),A=i.exported.geometry.getAttribute("normal"),g=c.geometry.getAttribute("normal"),w=i.exported.geometry.getAttribute("arNormalSign"),v=new pe,P=new pe,T=new Map(m.order.map((O,h)=>[O,h])),N=b.rig.bindTransforms.map(O=>O.clone().invert().multiply(c.bindMatrix));for(let O=0;O<d.count;O++){let h=d.getX(O);if(ko.prototype.getVertexPosition.call(c,h,v),S.setXYZ(O,v.x,v.y,v.z),g&&A){P.fromBufferAttribute(g,h);let k=P.clone();c.geometry.morphAttributes.normal?.forEach((E,V)=>{let y=c.morphTargetInfluences?.[V]??0;y&&P.addScaledVector(new pe().fromBufferAttribute(E,h).sub(c.geometry.morphTargetsRelative?new pe:k),y)}),P.normalize().multiplyScalar(w?.getX(O)??1),A.setXYZ(O,P.x,P.y,P.z)}let C=[0,1,2,3].reduce((k,E)=>k+M.getComponent(h,E),0);if(!Number.isFinite(C)||C<=0)throw new Error("The AR skin has a vertex without valid joint weights.");for(let k=0;k<4;k++){let E=M.getComponent(h,k)/C,V=E?T.get(p.getComponent(h,k))??-1:0;if(V<0||!Number.isFinite(E)||E<0)throw new Error("The AR skin has invalid joint indices or weights.");b.jointIndices.push(V),b.jointWeights.push(E),E&&b.jointBounds[V].expandByPoint(v.clone().applyMatrix4(N[V]))}}S.needsUpdate=!0,A?A.needsUpdate=!0:i.exported.geometry.computeVertexNormals(),i.exported.geometry.computeBoundingBox(),i.exported.matrixAutoUpdate=!1,i.exported.matrix.copy(ct(b)),a.push(b)}return{rigs:r,skins:a}}function ct(e){return e.node.matrixWorld.clone().multiply(e.node.bindMatrixInverse).multiply(e.reference)}function Sn(e,t,o){let n=new pe,r=new Oo,a=new pe,s=new hn;for(let i of e){let c={time:o,translations:[],rotations:[],scales:[]};i.bones.forEach((l,f)=>i.worlds[f].multiplyMatrices(i.referenceInverse,l.matrixWorld)),i.worlds.forEach((l,f)=>{let u=i.parents[f],m=u<0?l.clone():i.worlds[u].clone().invert().multiply(l);m.decompose(n,r,a),r.normalize(),s.compose(n,r,a);let d=1e-5*Math.max(1,...m.elements.map(Math.abs));if(!m.elements.every(Number.isFinite)||m.elements.some((p,M)=>Math.abs(p-s.elements[M])>d)||Math.abs(m.determinant())<1e-15)throw new Error("The AR skeleton contains a sheared or zero-scale joint that Quick Look cannot preserve. Use arHandoff.createUSDZ for this rig.");c.translations.push(...n.toArray()),c.rotations.push(r.w,r.x,r.y,r.z),c.scales.push(...a.toArray()),i.frames.length||i.restTransforms.push(m)}),i.frames.push(c)}for(let i of t)i.jointBounds.forEach((c,l)=>{c.isEmpty()||i.extent.union(c.clone().applyMatrix4(i.rig.worlds[l]))})}var lt=e=>String(Number(e.toPrecision(9))),at=e=>{let t=Array.isArray(e)?e:e.elements;return`(${[0,4,8,12].map(o=>`(${t.slice(o,o+4).map(lt).join(", ")})`).join(", ")})`},st=(e,t)=>Array.from({length:e.length/t},(o,n)=>`(${e.slice(n*t,(n+1)*t).map(lt).join(", ")})`).join(", ");function wn(e){let t=(s,i,c=1e-7)=>Math.abs(s-i)>c*Math.max(1,Math.abs(s),Math.abs(i)),o=[["translations",3,"float3"],["rotations",4,"quatf"],["scales",3,"half3"]],n=e.frames[0],r=e.joints.map((s,i)=>i).filter(s=>o.some(([i,c])=>e.frames.some(l=>l[i].slice(s*c,(s+1)*c).some((f,u)=>t(f,n[i][s*c+u])))));r.length||(r=e.joints.map((s,i)=>i));let a=o.map(([s,i,c])=>{let l=e.frames.map(u=>r.flatMap(m=>u[s].slice(m*i,(m+1)*i)));return l.some(u=>u.some((m,d)=>t(m,l[0][d],c==="half3"?1e-4:1e-7)))?`${c}[] ${s}.timeSamples = {${e.frames.map((u,m)=>`${u.time}: [${st(l[m],i)}]`).join(`,
|
|
3
3
|
`)}}`:`${c}[] ${s} = [${st(l[0],i)}]`}).join(`
|
|
4
4
|
`);return`#usda 1.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Matrix4 as H,Quaternion as V,Vector3 as b}from"three";function L(e){return new H().set(1,e[0],e[1],0,0,1,e[2],0,0,0,1,0,0,0,0,1)}function _(e,o){e.matrixAutoUpdate=!o,e.updateMatrix(),o&&(e.matrix.makeRotationFromQuaternion(e.quaternion).multiply(L(o)).scale(e.scale).setPosition(e.position),e.matrixWorldNeedsUpdate=!0)}function A(e,o,t){let r=new b().setFromMatrixColumn(e,0),s=new b().setFromMatrixColumn(e,1),n=new b().setFromMatrixColumn(e,2),a=(f,x)=>{let C=f*(x<0?-1:1);return Math.abs(C-x)<1e-10?x:C},u=a(r.length(),o.x);if(Math.abs(u)<1e-12)return{rotation:t.clone(),scale:o.clone(),shear:void 0};r.divideScalar(u);let l=r.dot(s);s.addScaledVector(r,-l);let i=a(s.length(),o.y);if(Math.abs(i)<1e-12)return{rotation:t.clone(),scale:o.clone(),shear:void 0};s.divideScalar(i);let c=r.dot(n);n.addScaledVector(r,-c);let d=s.dot(n);n.addScaledVector(s,-d);let p=a(n.length(),o.z);if(Math.abs(p)<1e-12)return{rotation:t.clone(),scale:o.clone(),shear:void 0};n.divideScalar(p);let h=[l/i,c/p,d/p].map(f=>Math.abs(f)<1e-10?0:f);return{rotation:new V().setFromRotationMatrix(new H().makeBasis(r,s,n)).normalize(),scale:new b(u,i,p),shear:h.some(Boolean)?h:void 0}}import{CanvasTexture as P,Color as $,ImageLoader as W,NoColorSpace as M,RepeatWrapping as S,SRGBColorSpace as k,Texture as j}from"three";var g=new Map,O={color:"#93c5fd",intensity:.07},Q=new $(O.color).multiplyScalar(O.intensity),X=new $(O.color),q=.28,T=new Map,G=new Map;function U(e){return`${e.name}|${e.size}|${e.lastModified}`}function D(e){let o=U(e),t=e.name.lastIndexOf("."),r=t>0?e.name.slice(0,t):e.name,s=t>0?e.name.slice(t):"",n=`materials/${e.name}`,a=2;for(;;){let u=G.get(n);if(u===o||u===void 0&&!T.has(n))return G.set(n,o),n;n=`materials/${r}-${a}${s}`,a+=1}}function J(e){return T.get(e)}function z(e,o){let t=++e.loadGeneration;e.loaded=!1,e.failed=!1;let r=()=>{if(e.loadGeneration!==t)return;e.loaded=!0;let s=e.pending;e.pending=[];for(let n of s)n()};new W().load(o,s=>{e.loadGeneration===t&&(e.texture.image=s,e.texture.needsUpdate=!0,r())},void 0,()=>{e.loadGeneration===t&&(e.failed=!0,console.warn(`Failed to load texture: ${o}`),r())})}function F(e,o){for(let t of[k,M]){let r=g.get(m(e,t));r&&z(r,o)}}function K(e,o){let t=T.get(e);t&&t!==o&&t.startsWith("blob:")&&URL.revokeObjectURL(t),T.set(e,o),F(e,o)}function Z(e){let o=T.get(e);o&&(o.startsWith("blob:")&&URL.revokeObjectURL(o),T.delete(e),G.delete(e),F(e,e))}function m(e,o){return`${o}|${e}`}function B(e,o=M,t){let r=m(e,o),s=g.get(r);if(s)return t&&!s.loaded&&s.pending.push(t),s.texture;let n=T.get(e)??e,a={texture:new j,refCount:0,loaded:!1,pending:t?[t]:[],loadGeneration:0};return a.texture.flipY=!1,a.texture.colorSpace=o,g.set(r,a),z(a,n),a.texture}function ee(e,o=M,t){let r=B(e,o,t);return g.get(m(e,o)).refCount+=1,r}function te(e,o=M){let t=g.get(m(e,o));t&&(t.refCount-=1,t.refCount<=0&&(t.loadGeneration+=1,t.pending=[],t.texture.dispose(),g.delete(m(e,o))))}function oe(e,o,t,r,s,n=1,a=0){let u=e.offsetTextures??(e.offsetTextures={}),l=u[o],i=l;if(!i||i.sourcePath!==r||i.base!==t){l?.texture.dispose();let d=t.clone();d.wrapS=S,d.wrapT=S,d.center.set(.5,.5),d.needsUpdate=!0,i={texture:d,sourcePath:r,base:t},u[o]=i}let c=n>0?n:1;return i.texture.offset.set(s[0],s[1]),i.texture.repeat.set(1/c,1/c),i.texture.rotation=a,i.texture}function ne(e,o){let t=e.offsetTextures,r=t?.[o];r&&(r.texture.dispose(),delete t[o])}function re(e){let o=e.offsetTextures;if(o){for(let t of Object.values(o))t.texture.dispose();delete e.offsetTextures}}var w=null;function se(){if(w)return w;let e=256,o=document.createElement("canvas");o.width=e,o.height=e;let t=o.getContext("2d"),r=t.createRadialGradient(e*.35,e*.35,e*.02,e*.5,e*.5,e*.55);r.addColorStop(0,"#ffffff"),r.addColorStop(.4,"#b5b5b5"),r.addColorStop(1,"#3a3a3a"),t.fillStyle=r,t.fillRect(0,0,e,e);let s=new P(o);return s.colorSpace=k,w=s,s}var y=null;function ie(){if(y)return y;let e=1024,o=8,t=e/o,r=["#ef4444","#f59e0b","#22c55e","#6366f1"],s=document.createElement("canvas");s.width=e,s.height=e;let n=s.getContext("2d");n.textAlign="center",n.textBaseline="middle";for(let u=0;u<o;u+=1)for(let l=0;l<o;l+=1){let i=l*t,c=u*t,d=(Math.floor(l/2)+Math.floor(u/2))%4;n.fillStyle=r[d],n.fillRect(i,c,t,t),n.strokeStyle="rgba(0, 0, 0, 0.28)",n.lineWidth=2;for(let R=1;R<4;R+=1){let v=R*t/4;n.beginPath(),n.moveTo(i+v,c),n.lineTo(i+v,c+t),n.moveTo(i,c+v),n.lineTo(i+t,c+v),n.stroke()}n.strokeStyle="#09090b",n.lineWidth=7,n.strokeRect(i,c,t,t);let p=i+t*.23,h=c+t*.72,f=i+t*.72,x=c+t*.23;n.lineCap="round",n.lineJoin="round",n.beginPath(),n.moveTo(p,h),n.lineTo(f,x),n.lineTo(f-t*.2,x),n.moveTo(f,x),n.lineTo(f,x+t*.2),n.stroke();let C=u*o+l+1;n.font=`700 ${Math.round(t*.2)}px ui-monospace, SFMono-Regular, Menlo, monospace`,n.fillStyle="#ffffff",n.strokeStyle="rgba(0, 0, 0, 0.85)",n.lineWidth=6;let I=String(C).padStart(2,"0");n.strokeText(I,i+t/2,c+t*.82),n.fillText(I,i+t/2,c+t*.82)}let a=new P(s);return a.colorSpace=k,a.wrapS=S,a.wrapT=S,a.flipY=!1,a.anisotropy=8,a.needsUpdate=!0,y=a,a}function ae(e){for(let o of g.values())if(o.texture.source===e.source&&(!o.loaded||o.failed))return!0;return!1}export{L as a,_ as b,A as c,O as d,Q as e,X as f,q as g,D as h,J as i,K as j,Z as k,B as l,ee as m,te as n,oe as o,ne as p,re as q,se as r,ie as s,ae as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Children as V,Fragment as U,createContext as q,isValidElement as A,useCallback as F,useContext as G,useEffect as $,useId as W,useLayoutEffect as X,useRef as D,useState as w}from"react";import{createPortal as j}from"react-dom";import{Check as J}from"lucide-react";import{Fragment as Y,jsx as u,jsxs as M}from"react/jsx-runtime";var Q=q(null);function te({value:t,onChange:s,children:b,className:o,id:g,disabled:E=!1,title:T,"aria-label":x}){let B=G(Q),S=h(b),a=S.filter(e=>e.kind==="option"),P=a.find(e=>e.value===t),[i,C]=w(!1),[c,d]=w(-1),[K,O]=w({}),p=D(null),v=D(null),m=W(),f=F(e=>{C(!1),e&&p.current?.focus()},[]),N=e=>{e.disabled||(f(!0),e.value!==t&&s?.({target:{value:e.value},currentTarget:{value:e.value}}))},R=()=>{E||(d(Math.max(0,a.findIndex(e=>e.value===t))),C(!0))};X(()=>{if(!i||!p.current)return;let e=p.current.getBoundingClientRect(),n=window.innerHeight-e.bottom-8,r=e.top-8,l=n<180&&r>n;O({left:e.left,minWidth:e.width,maxHeight:Math.min(320,l?r:n)-4,...l?{bottom:window.innerHeight-e.top+4}:{top:e.bottom+4}})},[i]),$(()=>{if(!i)return;let e=l=>{let I=l.target;v.current?.contains(I)||p.current?.contains(I)||f(!1)},n=l=>l.preventDefault(),r=v.current;return r?.addEventListener("beforexrselect",n),window.addEventListener("pointerdown",e,!0),window.addEventListener("scroll",e,!0),window.addEventListener("resize",e),()=>{r?.removeEventListener("beforexrselect",n),window.removeEventListener("pointerdown",e,!0),window.removeEventListener("scroll",e,!0),window.removeEventListener("resize",e)}},[i,f]),$(()=>{i&&v.current?.querySelector(`[data-index="${c}"]`)?.scrollIntoView({block:"nearest"})},[i,c]);let y=(e,n)=>{for(let r=e+n;r>=0&&r<a.length;r+=n)if(!a[r].disabled)return r;return e},z=e=>{if(!E){if(!i){["ArrowDown","ArrowUp","Enter"," "].includes(e.key)&&(e.preventDefault(),R());return}if(e.key==="ArrowDown")d(n=>y(n,1));else if(e.key==="ArrowUp")d(n=>y(n,-1));else if(e.key==="Home")d(y(-1,1));else if(e.key==="End")d(y(a.length,-1));else if(e.key==="Enter"||e.key===" ")a[c]&&N(a[c]);else if(e.key==="Escape")f(!0);else if(e.key==="Tab"){f(!1);return}else return;e.preventDefault()}},L=B??p.current?.closest(".bb-dialogBackdrop, .ri-viewer, .smv-root, .bb-root")??(typeof document<"u"?document.body:null),H=-1;return M(Y,{children:[u("button",{ref:p,type:"button",id:g,className:`ri-select ${o??""}`,disabled:E,title:T,"aria-label":x,"aria-haspopup":"listbox","aria-expanded":i,"aria-controls":i?m:void 0,"aria-activedescendant":i&&c>=0?`${m}-${c}`:void 0,onClick:()=>i?f(!1):R(),onKeyDown:z,children:u("span",{className:"ri-selectValue",children:P?.label??""})}),i&&L?j(u("div",{ref:v,id:m,className:"ri-selectMenu",role:"listbox","aria-label":x,style:K,children:S.map((e,n)=>{if(e.kind==="group")return u("div",{className:"ri-selectGroup",role:"presentation",children:e.label},`group-${n}`);H+=1;let r=H,l=e.value===t;return M("div",{id:`${m}-${r}`,"data-index":r,role:"option","aria-selected":l,"aria-disabled":e.disabled||void 0,className:`ri-selectOption ${r===c?"ri-selectOption--active":""}`,onPointerEnter:()=>!e.disabled&&d(r),onClick:()=>N(e),children:[u("span",{className:"ri-selectCheck",children:l?u(J,{size:13,"aria-hidden":"true"}):null}),u("span",{className:"ri-selectLabel",children:e.label})]},`${e.value}-${n}`)})}),L):null]})}function h(t,s=[]){return V.forEach(t,b=>{if(!A(b))return;let o=b;if(o.type===U)h(o.props.children,s);else if(o.type==="optgroup")s.push({kind:"group",label:String(o.props.label??"")}),h(o.props.children,s);else if(o.type==="option"){let g=k(o.props.children);s.push({kind:"option",value:o.props.value===void 0?g:String(o.props.value),label:g,disabled:!!o.props.disabled})}}),s}function k(t){return t==null||typeof t=="boolean"?"":typeof t=="string"||typeof t=="number"?String(t):Array.isArray(t)?t.map(k).join(""):A(t)?k(t.props.children):""}export{Q as a,te as b};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b as S,c as B,n as h}from"./chunk-UCD76KQ6.mjs";import{Box3 as A,BufferAttribute as I,Mesh as C}from"three";import{acceleratedRaycast as g,computeBoundsTree as O,disposeBoundsTree as W,MeshBVH as E}from"three-mesh-bvh";var T=new WeakMap;function b(e){let t=T.get(e),s=e.index;return t&&t.attribute===s&&t.array===s?.array&&t.version===s?.version?t.source:s?.array??null}function d(e,t){let s=e.index;T.set(e,{source:t,attribute:s,array:s?.array,version:s?.version})}var w=!1,p=new WeakMap,c=new WeakMap,M=new WeakMap;function F(){w||(C.prototype.raycast=g,w=!0)}function H(e){let t=new Set;return e.traverse(s=>{let a=s.geometry;!a||!a.attributes?.position||t.add(a)}),[...t]}function L(e){let t=0;for(let s of e){let a=s.index?s.index.count:s.attributes.position.count;t+=a/3}return t}var P=12e6;function ie(e){return j(e)>P}function j(e){let t=new Set;return e.traverse(s=>{let a=s.geometry;a?.attributes?.position&&t.add(a)}),L([...t])}function V(e,t){let s=b(t);return new Promise((a,n)=>{let r=m=>{let u=m.data;if(!u||!u.error&&!u.serialized)return;if(e.removeEventListener("message",r),e.removeEventListener("error",o),u.error){n(new Error(String(u.error)));return}let{serialized:f}=u,x=E.deserialize(f,t,{setIndex:!1});f.index&&(t.index?t.index.array=f.index:t.setIndex(new I(f.index,1,!1))),d(t,s),t.boundingBox=x.getBoundingBox(new A),a(x)},o=m=>{e.removeEventListener("message",r),e.removeEventListener("error",o),n(new Error(m.message||"BVH worker error"))};e.addEventListener("message",r),e.addEventListener("error",o);let i=t.index?t.index.array.slice():null,l=t.attributes.position.array.slice(),R=[l,...i?[i]:[]].map(m=>m.buffer);e.postMessage({index:i,position:l,options:{groups:[...t.groups]}},R)})}async function U(){if(typeof window>"u"||typeof Worker>"u")return null;try{let{bvhWorkerCode:e}=await import("./bvhWorkerCode-6366A3UC.mjs"),t=new Blob([e],{type:"text/javascript"}),s=URL.createObjectURL(t),a=new Worker(s);return{worker:a,dispose:()=>{a.terminate(),URL.revokeObjectURL(s)}}}catch{return null}}async function _(e,t){if(t)try{return await V(t,e)}catch{}let s=b(e)?.slice()??null,a=O.call(e);return d(e,s),e.boundsTree=void 0,await new Promise(n=>setTimeout(n,0)),a}async function N(e,t,s){if(e.boundsTree)return;if(t.buildPromise)return t.buildPromise;let a=(async()=>{let n=await s();t.references>0&&!e.boundsTree&&(e.boundsTree=n,t.ownedTree=n)})();return t.buildPromise=a.finally(()=>{t.buildPromise=void 0,t.references===0&&p.delete(e)}),t.buildPromise}function oe(e,t){let s=K(e,t);return M.set(e,s),s}async function ue(e){let t=M.get(e);if(!t)return!1;await t;let s=c.get(e);return!!(s?.length&&s.every(a=>a.boundsTree))}async function K(e,t){if(t?.aborted)return;let s=c.get(e);if(!s){if(s=H(e),L(s)>P){c.set(e,[]);return}c.set(e,s);for(let n of s){let r=p.get(n)??{references:0};r.references+=1,p.set(n,r)}}if(s.length===0)return;F();let a=await U();if(t?.aborted){a?.dispose();return}try{for(let n of s){if(t?.aborted)return;let r=p.get(n);r&&await N(n,r,()=>_(n,a?.worker))}}finally{a?.dispose()}}function pe(e){M.delete(e);let t=c.get(e);if(t){c.delete(e);for(let s of t){let a=p.get(s);a&&(a.references=Math.max(0,a.references-1),!(a.references>0)&&(a.ownedTree&&s.boundsTree===a.ownedTree&&(W.call(s),s.boundsTree=void 0),a.ownedTree=void 0,a.buildPromise||p.delete(s)))}}}import{useGLTF as me}from"@react-three/drei";import{useThree as he}from"@react-three/fiber";import{useMemo as de}from"react";import{SRGBColorSpace as X}from"three";import{DRACOLoader as q,MeshoptDecoder as z}from"three-stdlib";function Z(e){return{name:"RI_unlit_emissive_texture",async afterRoot(t){let s=e.json.materials??[],a=new Map;if(s.forEach(r=>{let o=!!r?.extensions?.KHR_materials_unlit,i=!!r?.pbrMetallicRoughness?.baseColorTexture;o&&!i&&r?.emissiveTexture&&r.name&&a.set(r.name,r.emissiveTexture.index)}),a.size===0||!t.scene)return;let n=new Map;await Promise.all([...a].map(async([r,o])=>{let i=await e.getDependency("texture",o);i&&(i.colorSpace=X,n.set(r,i))})),t.scene.traverse(r=>{let o=Array.isArray(r.material)?r.material:r.material?[r.material]:[];for(let i of o){let l=i.name?n.get(i.name):void 0;l&&!i.map&&(i.map=l,i.needsUpdate=!0)}})}}}var J="https://assets.react-immersive.liveroom.dev/three-r184/draco/",Q="https://assets.react-immersive.liveroom.dev/three-r184/basis/",k=new Map,G=new WeakMap;function Y(e){let t=k.get(e);return t||(t=new q,t.setDecoderPath(e),k.set(e,t)),t}function $(e,t){let s=G.get(t);s||(s=new Map,G.set(t,s));let a=s.get(e);return a||(a=new y(e,t),s.set(e,a)),a}var y=class{constructor(t,s){this.transcoderPath=t;this.gl=s;this.real=null}loader(){return this.real??(this.real=import("three/examples/jsm/loaders/KTX2Loader.js").then(({KTX2Loader:t})=>new t().setTranscoderPath(this.transcoderPath).detectSupport(this.gl))),this.real}load(t,s,a,n){this.loader().then(r=>r.load(t,s,a,n),r=>n?.(r))}dispose(){this.real?.then(t=>t.dispose())}};function ve(e,t={},s){let{dracoDecoderPath:a=J,ktx2TranscoderPath:n=Q,meshopt:r=!0}=t;a&&e.setDRACOLoader(Y(a)),r&&e.setMeshoptDecoder(z),n&&s&&e.setKTX2Loader($(n,s)),e.register((o=>Z(o)))}function xe(e){for(let t=e;t;t=t.parent)if(!t.visible)return!1;return!0}import{Color as v,MeshPhysicalMaterial as ee,MeshStandardMaterial as te,Texture as D}from"three";function we(e){if(S(e))return e;if(!e||typeof e!="object")return null;let t=e,s=new te;typeof t.name=="string"&&(s.name=t.name),s.metalness=0,s.roughness=1,t.type==="MeshBasicMaterial"||t.isMeshBasicMaterial===!0?(s.color.set(0),s.emissiveIntensity=1,t.map instanceof D?(s.emissiveMap=t.map,s.emissive.set(16777215)):t.color instanceof v&&s.emissive.copy(t.color)):(t.color instanceof v&&s.color.copy(t.color),t.map instanceof D&&(s.map=t.map),t.emissive instanceof v&&s.emissive.copy(t.emissive),t.emissiveMap instanceof D&&(s.emissiveMap=t.emissiveMap));let n=["aoMap","aoMapIntensity","lightMap","lightMapIntensity","alphaMap","opacity","transparent","alphaTest","side","vertexColors","wireframe","depthTest","depthWrite","visible","toneMapped","fog"];for(let r of n)t[r]!==void 0&&(s[r]=t[r]);return s.needsUpdate=!0,s}function Le(e){if(B(e))return e.clone();let t=new ee;return t.name=e.name,t.color.copy(e.color),t.map=e.map,t.lightMap=e.lightMap,t.lightMapIntensity=e.lightMapIntensity,t.aoMap=e.aoMap,t.aoMapIntensity=e.aoMapIntensity,t.emissive.copy(e.emissive),t.emissiveIntensity=e.emissiveIntensity,t.emissiveMap=e.emissiveMap,t.bumpMap=e.bumpMap,t.bumpScale=e.bumpScale,t.normalMap=e.normalMap,t.normalMapType=e.normalMapType,t.normalScale.copy(h(e.normalScale)),t.displacementMap=e.displacementMap,t.displacementScale=e.displacementScale,t.displacementBias=e.displacementBias,t.roughness=e.roughness,t.roughnessMap=e.roughnessMap,t.metalness=e.metalness,t.metalnessMap=e.metalnessMap,t.alphaMap=e.alphaMap,t.envMap=e.envMap,t.envMapRotation.copy(e.envMapRotation),t.envMapIntensity=e.envMapIntensity,t.wireframe=e.wireframe,t.wireframeLinewidth=e.wireframeLinewidth,t.flatShading=e.flatShading,t.fog=e.fog,t.opacity=e.opacity,t.transparent=e.transparent,t.alphaHash=e.alphaHash,t.blendSrc=e.blendSrc,t.blendDst=e.blendDst,t.blendEquation=e.blendEquation,t.blendSrcAlpha=e.blendSrcAlpha,t.blendDstAlpha=e.blendDstAlpha,t.blendEquationAlpha=e.blendEquationAlpha,t.blending=e.blending,t.premultipliedAlpha=e.premultipliedAlpha,t.dithering=e.dithering,t.alphaTest=e.alphaTest,t.depthTest=e.depthTest,t.depthWrite=e.depthWrite,t.colorWrite=e.colorWrite,t.stencilWrite=e.stencilWrite,t.stencilWriteMask=e.stencilWriteMask,t.stencilFunc=e.stencilFunc,t.stencilRef=e.stencilRef,t.stencilFuncMask=e.stencilFuncMask,t.stencilFail=e.stencilFail,t.stencilZFail=e.stencilZFail,t.stencilZPass=e.stencilZPass,t.side=e.side,t.shadowSide=e.shadowSide,t.toneMapped=e.toneMapped,t.vertexColors=e.vertexColors,t.visible=e.visible,t.clippingPlanes=e.clippingPlanes,t.clipIntersection=e.clipIntersection,t.clipShadows=e.clipShadows,t.forceSinglePass=e.forceSinglePass,t.polygonOffset=e.polygonOffset,t.polygonOffsetFactor=e.polygonOffsetFactor,t.polygonOffsetUnits=e.polygonOffsetUnits,t}function Pe(e){e.userData.baseColor=e.color.clone(),e.userData.baseMap=e.map??null,e.userData.baseVertexColors=e.vertexColors,e.userData.baseMetalness=e.metalness,e.userData.baseMetalnessMap=e.metalnessMap??null,e.userData.baseRoughness=e.roughness,e.userData.baseRoughnessMap=e.roughnessMap??null,e.userData.baseEmissive=e.emissive.clone(),e.userData.baseEmissiveIntensity=e.emissiveIntensity,e.userData.baseEmissiveMap=e.emissiveMap??null,e.userData.baseOpacity=e.opacity,e.userData.baseTransparent=e.transparent,e.userData.baseAlphaMap=e.alphaMap??null,e.userData.baseAlphaTest=e.alphaTest,e.userData.baseAlphaHash=e.alphaHash,e.userData.baseDithering=e.dithering,e.userData.baseBlending=e.blending,e.userData.baseDepthWrite=e.depthWrite,e.userData.baseSide=e.side,e.userData.baseNormalMap=e.normalMap??null,e.userData.baseNormalScale=h(e.normalScale),e.userData.baseBumpMap=e.bumpMap??null,e.userData.baseBumpScale=e.bumpScale,e.userData.baseAoMap=e.aoMap??null,e.userData.baseAoMapIntensity=e.aoMapIntensity,e.userData.baseDisplacementMap=e.displacementMap??null,e.userData.baseDisplacementScale=e.displacementScale,e.userData.baseDisplacementBias=e.displacementBias,e.userData.baseClearcoat=e.clearcoat,e.userData.baseClearcoatMap=e.clearcoatMap??null,e.userData.baseClearcoatRoughness=e.clearcoatRoughness,e.userData.baseClearcoatRoughnessMap=e.clearcoatRoughnessMap??null,e.userData.baseClearcoatNormalMap=e.clearcoatNormalMap??null,e.userData.baseClearcoatNormalScale=h(e.clearcoatNormalScale),e.userData.baseSheen=e.sheen,e.userData.baseSheenColor=e.sheenColor.clone(),e.userData.baseSheenColorMap=e.sheenColorMap??null,e.userData.baseSheenRoughness=e.sheenRoughness,e.userData.baseSheenRoughnessMap=e.sheenRoughnessMap??null,e.userData.baseAnisotropy=e.anisotropy,e.userData.baseAnisotropyRotation=e.anisotropyRotation,e.userData.baseAnisotropyMap=e.anisotropyMap??null,e.userData.baseTransmission=e.transmission,e.userData.baseTransmissionMap=e.transmissionMap??null,e.userData.baseThickness=e.thickness,e.userData.baseThicknessMap=e.thicknessMap??null,e.userData.baseAttenuationColor=e.attenuationColor.clone(),e.userData.baseAttenuationDistance=e.attenuationDistance,e.userData.baseReflectivity=e.reflectivity,e.userData.baseSpecularIntensity=e.specularIntensity,e.userData.baseSpecularIntensityMap=e.specularIntensityMap??null,e.userData.baseSpecularColor=e.specularColor.clone(),e.userData.baseSpecularColorMap=e.specularColorMap??null,e.userData.baseFlatShading=e.flatShading,e.userData.baseEnvMapIntensity=e.envMapIntensity}export{b as a,P as b,ie as c,j as d,oe as e,ue as f,pe as g,xe as h,J as i,Q as j,ve as k,we as l,Le as m,Pe as n};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as i}from"./chunk-MMO7KCYU.mjs";import{p as n}from"./chunk-LEOHZ5HM.mjs";var c={licenseKey:!0,onLicenseStatusChange:!0,arHandoff:!0,mobileHandoffUrl:!0,dracoDecoderPath:!0,ktx2TranscoderPath:!0,meshopt:!0,hideLicenseCheckingOverlay:!0},s={licenseValidationUrl:!0,arLanding:!0,gizmoTool:!0,showFloorGrid:!0,onObjectEditLeaseChange:!0,onSelectionClear:!0,onEmptyCanvasClick:!0,onSceneLoaded:!0,onTexturePositioningChange:!0,endTexturePositioningRef:!0};function u(e,t){let o={};for(let r of Object.keys(t))r in e&&(o[r]=e[r]);return o}function d(e,t){let o={...e};for(let r of Object.keys(t))delete o[r];return o}import{jsx as l}from"react/jsx-runtime";function a(e){return i("model-viewer","ModelViewer"),l(n,{...d(e,s)})}export{c as a,u as b,a as c};
|