softbox 4.20.0 → 4.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -20,4 +20,4 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=requi
20
20
  `))&&a<t&&r<e.byteLength;)o+=s,a+=s.length,r+=128,s=String.fromCharCode.apply(null,new Uint16Array(e.subarray(r,r+128)));return-1<i?(!1!==n&&(e.pos+=a+i+1),o+s.slice(0,i)):!1},i=function(e){let n=/^#\?(\S+)/,i=/^\s*GAMMA\s*=\s*(\d+(\.\d+)?)\s*$/,a=/^\s*EXPOSURE\s*=\s*(\d+(\.\d+)?)\s*$/,o=/^\s*FORMAT=(\S+)\s*$/,s=/^\s*\-Y\s+(\d+)\s+\+X\s+(\d+)\s*$/,c={valid:0,string:``,comments:``,programtype:`RGBE`,format:``,gamma:1,exposure:1,width:0,height:0},l,u;for((e.pos>=e.byteLength||!(l=r(e)))&&t(1,`no header found`),(u=l.match(n))||t(3,`bad initial token`),c.valid|=1,c.programtype=u[1],c.string+=l+`
21
21
  `;l=r(e),!1!==l;){if(c.string+=l+`
22
22
  `,l.charAt(0)===`#`){c.comments+=l+`
23
- `;continue}if((u=l.match(i))&&(c.gamma=parseFloat(u[1])),(u=l.match(a))&&(c.exposure=parseFloat(u[1])),(u=l.match(o))&&(c.valid|=2,c.format=u[1]),(u=l.match(s))&&(c.valid|=4,c.height=parseInt(u[1],10),c.width=parseInt(u[2],10)),c.valid&2&&c.valid&4)break}return c.valid&2||t(3,`missing format specifier`),c.valid&4||t(3,`missing image size specifier`),c},a=function(e,n,r){let i=n;if(i<8||i>32767||e[0]!==2||e[1]!==2||e[2]&128)return new Uint8Array(e);i!==(e[2]<<8|e[3])&&t(3,`wrong scanline width`);let a=new Uint8Array(4*n*r);a.length||t(4,`unable to allocate buffer space`);let o=0,s=0,c=4*i,l=new Uint8Array(4),u=new Uint8Array(c),d=r;for(;d>0&&s<e.byteLength;){s+4>e.byteLength&&t(1),l[0]=e[s++],l[1]=e[s++],l[2]=e[s++],l[3]=e[s++],(l[0]!=2||l[1]!=2||(l[2]<<8|l[3])!=i)&&t(3,`bad rgbe scanline format`);let n=0,r;for(;n<c&&s<e.byteLength;){r=e[s++];let i=r>128;if(i&&(r-=128),(r===0||n+r>c)&&t(3,`bad scanline data`),i){let t=e[s++];for(let e=0;e<r;e++)u[n++]=t}else u.set(e.subarray(s,s+r),n),n+=r,s+=r}let f=i;for(let e=0;e<f;e++){let t=0;a[o]=u[e+t],t+=i,a[o+1]=u[e+t],t+=i,a[o+2]=u[e+t],t+=i,a[o+3]=u[e+t],o+=4}d--}return a},o=function(e,t,n,r){let i=2**(e[t+3]-128)/255;n[r+0]=e[t+0]*i,n[r+1]=e[t+1]*i,n[r+2]=e[t+2]*i,n[r+3]=1},s=function(e,t,r,i){let a=2**(e[t+3]-128)/255;r[i+0]=n.DataUtils.toHalfFloat(Math.min(e[t+0]*a,65504)),r[i+1]=n.DataUtils.toHalfFloat(Math.min(e[t+1]*a,65504)),r[i+2]=n.DataUtils.toHalfFloat(Math.min(e[t+2]*a,65504)),r[i+3]=n.DataUtils.toHalfFloat(1)},c=new Uint8Array(e);c.pos=0;let l=i(c),u=l.width,d=l.height,f=a(c.subarray(c.pos),u,d),p,m,h;switch(this.type){case n.FloatType:h=f.length/4;let e=new Float32Array(h*4);for(let t=0;t<h;t++)o(f,t*4,e,t*4);p=e,m=n.FloatType;break;case n.HalfFloatType:h=f.length/4;let t=new Uint16Array(h*4);for(let e=0;e<h;e++)s(f,e*4,t,e*4);p=t,m=n.HalfFloatType;break;default:throw Error(`THREE.HDRLoader: Unsupported type: `+this.type)}return{width:u,height:d,data:p,header:l.string,gamma:l.gamma,exposure:l.exposure,type:m,colorSpace:n.LinearSRGBColorSpace,minFilter:n.LinearFilter,magFilter:n.LinearFilter,generateMipmaps:!1,flipY:!0}}setDataType(e){return this.type=e,this}},Gn=class extends Wn{constructor(e){console.warn(`RGBELoader has been deprecated. Please use HDRLoader instead.`),super(e)}},Kn=class extends n.Scene{constructor(){super(),this.name=`RoomEnvironment`,this.position.y=-3.5;let e=new n.BoxGeometry;e.deleteAttribute(`uv`);let t=new n.MeshStandardMaterial({side:n.BackSide}),r=new n.MeshStandardMaterial,i=new n.PointLight(16777215,900,28,2);i.position.set(.418,16.199,.3),this.add(i);let a=new n.Mesh(e,t);a.position.set(-.757,13.219,.717),a.scale.set(31.713,28.305,28.591),this.add(a);let o=new n.InstancedMesh(e,r,6),s=new n.Object3D;s.position.set(-10.906,2.009,1.846),s.rotation.set(0,-.195,0),s.scale.set(2.328,7.905,4.651),s.updateMatrix(),o.setMatrixAt(0,s.matrix),s.position.set(-5.607,-.754,-.758),s.rotation.set(0,.994,0),s.scale.set(1.97,1.534,3.955),s.updateMatrix(),o.setMatrixAt(1,s.matrix),s.position.set(6.167,.857,7.803),s.rotation.set(0,.561,0),s.scale.set(3.927,6.285,3.687),s.updateMatrix(),o.setMatrixAt(2,s.matrix),s.position.set(-2.017,.018,6.124),s.rotation.set(0,.333,0),s.scale.set(2.002,4.566,2.064),s.updateMatrix(),o.setMatrixAt(3,s.matrix),s.position.set(2.291,-.756,-2.621),s.rotation.set(0,-.286,0),s.scale.set(1.546,1.552,1.496),s.updateMatrix(),o.setMatrixAt(4,s.matrix),s.position.set(-2.193,-.369,-5.547),s.rotation.set(0,.516,0),s.scale.set(3.875,3.487,2.986),s.updateMatrix(),o.setMatrixAt(5,s.matrix),this.add(o);let c=new n.Mesh(e,qn(50));c.position.set(-16.116,14.37,8.208),c.scale.set(.1,2.428,2.739),this.add(c);let l=new n.Mesh(e,qn(50));l.position.set(-16.109,18.021,-8.207),l.scale.set(.1,2.425,2.751),this.add(l);let u=new n.Mesh(e,qn(17));u.position.set(14.904,12.198,-1.832),u.scale.set(.15,4.265,6.331),this.add(u);let d=new n.Mesh(e,qn(43));d.position.set(-.462,8.89,14.52),d.scale.set(4.38,5.441,.088),this.add(d);let f=new n.Mesh(e,qn(20));f.position.set(3.235,11.486,-12.541),f.scale.set(2.5,2,.1),this.add(f);let p=new n.Mesh(e,qn(100));p.position.set(0,20,0),p.scale.set(1,.1,1),this.add(p)}dispose(){let e=new Set;this.traverse(t=>{t.isMesh&&(e.add(t.geometry),e.add(t.material))});for(let t of e)t.dispose()}};function qn(e){return new n.MeshLambertMaterial({color:0,emissive:16777215,emissiveIntensity:e})}var Jn=.42,Yn=1.15,Xn=.7,Zn=1;function Qn(e){e.traverse(e=>{let t=e;if(t.isPointLight){t.intensity*=Xn;return}let n=e;if(!n.isMesh)return;let r=Array.isArray(n.material)?n.material:[n.material];for(let e of r){if(!e)continue;let t=e;(t.emissiveIntensity??0)>Zn?t.emissiveIntensity*=Yn:t.color&&t.color.multiplyScalar(Jn)}})}var $n=function(e){return e.MapControls=`MapControls`,e.OrbitControls=`OrbitControls`,e}({}),er=`crisp`,tr=256,nr=.1,rr=100,ir=class{constructor(){this.pmremGenerator=null,this.threeRenderer=null,this.loadedTextures=new Map,this.renderTargets=[],this.studioBakes=new Map,this.originalByPmrem=new WeakMap,this.disposed=!1}async initialize(t){try{let r=t.renderer,i=r.renderer||r.getThreeRenderer?.();return i?(this.threeRenderer=i,this.pmremGenerator=new n.PMREMGenerator(i),this.pmremGenerator.compileEquirectangularShader(),e.O.ok(void 0)):e.O.err(new e.A(`Could not access Three.js renderer`,e.k.INITIALIZATION_FAILED))}catch(t){return e.O.err(new e.A(`Failed to initialize environment service`,e.k.INITIALIZATION_FAILED,{originalError:t}))}}async loadEnvironmentMap(t){try{let r=this.loadedTextures.get(t);if(r)return e.O.ok(new ar(r));let i=t.split(`.`).pop()?.toLowerCase(),a;switch(i){case`hdr`:a=new Gn;break;case`exr`:a=new Un;break;case`jpg`:case`jpeg`:case`png`:a=new n.TextureLoader;break;default:return e.O.err(new e.A(`Unsupported environment map format: ${i}`,e.k.UNSUPPORTED_FORMAT,{url:t,extension:i}))}let o=await new Promise((e,n)=>{a.load(t,t=>{e(t)},void 0,e=>n(e))});if(this.disposed)return o.dispose(),e.O.err(new e.A(`Environment service was disposed during the load`,e.k.INVALID_STATE,{url:t}));if(this.pmremGenerator){o.mapping=n.EquirectangularReflectionMapping;let r=this.pmremGenerator.fromEquirectangular(o);this.renderTargets.push(r);let i=r.texture;return this.loadedTextures.set(t,i),this.loadedTextures.set(t+`_original`,o),this.originalByPmrem.set(i,o),e.O.ok(new ar(i))}return this.loadedTextures.set(t,o),e.O.ok(new ar(o))}catch(n){return e.O.err(new e.A(`Failed to load environment map`,e.k.TEXTURE_LOAD_FAILED,{url:t,originalError:n}))}}applyToScene(t,r,i){try{let a=e.a(t);if(!a)return e.O.err(new e.A(`Scene must be ThreeSceneAdapter`,e.k.INVALID_PARAMETER));let o=e.o(r);if(!o)return e.O.err(new e.A(`Texture must be ThreeTextureAdapter`,e.k.INVALID_PARAMETER));a.environment=o,i&&(i.backgroundBlurriness!==void 0&&(a.backgroundBlurriness=i.backgroundBlurriness),i.backgroundIntensity!==void 0&&(a.backgroundIntensity=i.backgroundIntensity),i.environmentIntensity!==void 0&&(a.environmentIntensity=i.environmentIntensity));let s=this.originalByPmrem.get(o);return o.mapping===n.CubeUVReflectionMapping?s?a.__originalEnvironmentTexture=s:delete a.__originalEnvironmentTexture:o.mapping===n.EquirectangularReflectionMapping&&(a.__originalEnvironmentTexture=o),(i?.setBackground??!0)&&(O(a),o.mapping===n.CubeUVReflectionMapping&&s?.mapping===n.EquirectangularReflectionMapping?a.background=s:a.background=o),e.O.ok(void 0)}catch(t){return e.O.err(new e.A(`Failed to apply environment to scene`,e.k.SCENE_OPERATION_FAILED,{originalError:t}))}}getOriginalEnvironmentTexture(e){let t=this.loadedTextures.get(e+`_original`);return t?new ar(t):null}async setBackgroundImage(t,r){try{let i=e.a(t);if(!i)return e.O.err(new e.A(`Scene must be ThreeSceneAdapter`,e.k.INVALID_PARAMETER));let a=await this.loadBackgroundTexture(r);return a.colorSpace=n.SRGBColorSpace,a.needsUpdate=!0,re(a),O(i),i.background=a,e.O.ok(void 0)}catch(t){return e.O.err(new e.A(`Failed to set background image`,e.k.TEXTURE_LOAD_FAILED,{originalError:t}))}}loadBackgroundTexture(e){if(typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement){let t=new n.Texture(e);return t.needsUpdate=!0,Promise.resolve(t)}let t=typeof File<`u`&&e instanceof File?URL.createObjectURL(e):null,r=t??e;return new Promise((e,i)=>{new n.TextureLoader().load(r,n=>{t&&URL.revokeObjectURL(t),e(n)},void 0,e=>{t&&URL.revokeObjectURL(t),i(e)})})}createStudioEnvironment(t=er){try{if(!this.pmremGenerator)return e.O.err(new e.A(`Environment service not initialized`,e.k.INITIALIZATION_FAILED));let n=this.studioBakes.get(t);if(n)return e.O.ok(new ar(n.pmremTexture));let r=new Kn;t!==`soft`&&Qn(r);let i=this.pmremGenerator.fromScene(r);this.renderTargets.push(i);let a=i.texture;return this.captureStudioCubeOriginal(t,r,a),this.studioBakes.has(t)||this.studioBakes.set(t,{pmremTexture:a,cubeTarget:null}),r.dispose(),e.O.ok(new ar(a))}catch(t){return e.O.err(new e.A(`Failed to create studio environment`,e.k.TEXTURE_LOAD_FAILED,{originalError:t}))}}captureStudioCubeOriginal(e,t,r){if(this.threeRenderer)try{let i=new n.WebGLCubeRenderTarget(tr,{type:n.HalfFloatType}),a=new n.CubeCamera(nr,rr,i),o=this.threeRenderer.toneMapping;this.threeRenderer.toneMapping=n.NoToneMapping;try{a.update(this.threeRenderer,t)}finally{this.threeRenderer.toneMapping=o}this.studioBakes.set(e,{pmremTexture:r,cubeTarget:i}),this.originalByPmrem.set(r,i.texture)}catch(e){console.warn(`Failed to capture the studio environment for path tracing:`,e)}}dispose(){this.disposed=!0,this.loadedTextures.forEach(e=>e.dispose()),this.loadedTextures.clear(),this.renderTargets.forEach(e=>e.dispose()),this.renderTargets=[],this.studioBakes.forEach(e=>e.cubeTarget?.dispose()),this.studioBakes.clear(),this.pmremGenerator&&=(this.pmremGenerator.dispose(),null),this.threeRenderer=null}},ar=class{constructor(e){this.texture=e}get id(){return this.texture.uuid}get image(){return this.texture.image}get needsUpdate(){return this.texture.needsUpdate}set needsUpdate(e){this.texture.needsUpdate=e}dispose(){this.texture.dispose()}getThreeTexture(){return this.texture}},or=class{constructor(e){this.object=e,this.boundingBox=new n.Box3().setFromObject(this.object)}alignToFloor(){let e=this.calculateFloorOffset();this.applyOffset(e)}calculateFloorOffset(){let e=this.boundingBox.min.y,t=this.boundingBox.max.y-e,r=new n.Vector3;return t>0?r.y=-e:r.y=0,r}applyOffset(e){this.object.position.add(e)}},sr=class{alignToFloor(t){try{let r=null;return`getThreeObject`in t&&typeof t.getThreeObject==`function`?r=t.getThreeObject():t instanceof n.Object3D&&(r=t),r?(new or(r).alignToFloor(),e.O.ok(void 0)):e.O.err(new e.A(`Could not get Three.js object for floor alignment`,e.k.INVALID_PARAMETER))}catch(t){return e.O.err(new e.A(`Failed to align object to floor`,e.k.OPERATION_FAILED,{originalError:t}))}}},cr={touch:10,default:5},lr=class{constructor(){this.raycaster=new n.Raycaster,this.activePointers=new Set,this.options=null,this.pending=null,this.detach=null}initialize(e){this.dispose(),this.options=e;let{canvas:t}=e,n=e=>{this.activePointers.add(e.pointerId);try{t.setPointerCapture(e.pointerId)}catch{}if(this.activePointers.size>1||e.button!==0){this.pending=null;return}this.pending={pointerId:e.pointerId,x:e.clientX,y:e.clientY,threshold:e.pointerType===`touch`?cr.touch:cr.default}},r=e=>{this.activePointers.delete(e.pointerId);let t=this.pending;!t||t.pointerId!==e.pointerId||(this.pending=null,!(Math.hypot(e.clientX-t.x,e.clientY-t.y)>t.threshold)&&this.pick(e.clientX,e.clientY))},i=e=>{this.activePointers.delete(e.pointerId),this.pending=null};t.addEventListener(`pointerdown`,n),t.addEventListener(`pointerup`,r),t.addEventListener(`pointercancel`,i),this.detach=()=>{t.removeEventListener(`pointerdown`,n),t.removeEventListener(`pointerup`,r),t.removeEventListener(`pointercancel`,i)}}pick(t,r){if(!this.options)return;let{canvas:i,camera:a,getPickRoot:o,onPick:s}=this.options,c=e.r(o()),l=e.t(a);if(!c||!l){s(null);return}let u=i.getBoundingClientRect();if(u.width===0||u.height===0){s(null);return}let d=new n.Vector2((t-u.left)/u.width*2-1,-((r-u.top)/u.height)*2+1);(this.options.bvh??!0)&&e.h(c),this.raycaster.setFromCamera(d,l),this.raycaster.firstHitOnly=!0;let f=this.raycaster.intersectObject(c,!0)[0];if(!f){s(null);return}s({object:new D(f.object),point:{x:f.point.x,y:f.point.y,z:f.point.z}})}dispose(){this.detach?.(),this.detach=null,this.options=null,this.pending=null,this.activePointers.clear()}},ur=.001,dr={visible:!1},fr=class{constructor(e){this.sources=e,this.anchor=new n.Vector3,this.projected=new n.Vector3,this.cameraPosition=new n.Vector3,this.toAnchor=new n.Vector3,this.raycaster=new n.Raycaster,this.lastCameraMatrix=new n.Matrix4,this.lastWidth=-1,this.lastHeight=-1,this.hasProjected=!1}invalidate(){this.hasProjected=!1}project(t,n){let r=e.t(this.sources.camera),i=this.sources.getCanvas();if(!r||!i)return null;let a=i.clientWidth||i.width,o=i.clientHeight||i.height;return this.hasProjected&&a===this.lastWidth&&o===this.lastHeight&&this.lastCameraMatrix.equals(r.matrixWorld)?null:(this.lastCameraMatrix.copy(r.matrixWorld),this.lastWidth=a,this.lastHeight=o,this.hasProjected=!0,this.anchor.set(t.x,t.y,t.z),r.getWorldPosition(this.cameraPosition),this.projected.copy(this.anchor).applyMatrix4(r.matrixWorldInverse),this.projected.z>=0||n&&this.isOccluded(r)?dr:(this.projected.copy(this.anchor).project(r),{visible:!0,left:(this.projected.x+1)/2*a,top:(1-this.projected.y)/2*o}))}isOccluded(t){let n=e.r(this.sources.getModel());if(!n)return!1;this.toAnchor.copy(this.anchor).sub(this.cameraPosition);let r=this.toAnchor.length();this.raycaster.set(this.cameraPosition,this.toAnchor.normalize()),this.raycaster.camera=t,this.raycaster.firstHitOnly=!0;let i=this.raycaster.intersectObject(n,!0)[0];return!!(i&&i.distance<r-ur)}},pr=class{createProjector(e){return new fr(e)}},mr=class{constructor(){this.mixer=null,this.clips=[],this.activeActions=[],this.playing=!1,this.speed=1}attach(t){this.detach();let r=e.r(t);if(!r)return;let i=hr(r);i&&(this.clips=i.animations,this.mixer=new n.AnimationMixer(i),this.mixer.timeScale=this.speed)}getClipNames(){return this.clips.map(e=>e.name)}play(t){if(t!==void 0){if(this.clips.length===0)return e.O.err(new e.A(`Cannot play animation clip '${t}': no animation clips are attached`,e.k.INVALID_STATE));if(!this.clips.some(e=>e.name===t)){let n=this.clips.map(e=>e.name);return e.O.err(new e.A(`Unknown animation clip '${t}'. Available clips: ${n.join(`, `)}`,e.k.INVALID_PARAMETER))}}if(!this.mixer)return e.O.ok(void 0);if(!this.playing&&this.activeActions.length>0&&t===void 0)return this.playing=!0,e.O.ok(void 0);let n=t?this.clips.filter(e=>e.name===t):this.clips;if(n.length===0)return e.O.ok(void 0);let r=this.mixer;return r.stopAllAction(),this.activeActions=n.map(e=>{let t=r.clipAction(e);return t.play(),t}),this.playing=!0,e.O.ok(void 0)}pause(){this.playing=!1}isPlaying(){return this.playing}setSpeed(e){this.speed=e,this.mixer&&(this.mixer.timeScale=e)}update(e){this.playing&&this.mixer&&this.mixer.update(e)}detach(){this.mixer&&(this.mixer.stopAllAction(),this.mixer.uncacheRoot(this.mixer.getRoot())),this.mixer=null,this.clips=[],this.activeActions=[],this.playing=!1}};function hr(e){let t=null;return e.traverse(e=>{!t&&(e.animations?.length??0)>0&&(t=e)}),t}var gr=class{static createViewer(e,t){i(t.units);let n=new ve(e),r=new k,a=this.createCamera(t),o=this.createControls(a.getThreeCamera(),e,t),s=new _r().createDefaultLoader({renderer:n.getThreeRenderer()??void 0,bvh:t.selection?.bvh,...t.loaders}),c=new pn,l=new ir,u=new mn,d=new sr,f=new lr,p=new pr,m=new mr,h=le.convertRendererOptions(t.renderer||{});return h.preserveDrawingBuffer=!0,new w({renderer:n,scene:r,camera:a,controls:o,modelLoader:s,options:t,rendererOptions:h,sceneSetupService:c,environmentService:l,pathTracingService:u,floorAlignmentService:d,selectionService:f,anchorProjectionService:p,animationService:m})}static createCamera(e){let t=e.camera||{},n=t.fov||t.cameraFov||30,r=t.near||t.cameraNear||.1,i=t.far||t.cameraFar||1e5,a=t.position||t.cameraPosition,o=t.target||t.cameraTarget,s=se.create(n,1,r,i);return a&&s.position.set(a[0],a[1],a[2]),o&&s.lookAt({x:o[0],y:o[1],z:o[2],set:()=>{},copy:()=>{},add:()=>{},multiply:()=>{},normalize:()=>{},length:()=>0}),s}static createControls(e,t,n){let r=n.controls||{},i=r.type||$n.OrbitControls,a;a=i===$n.MapControls?new Ut(e,t):new Ht(e,t),a.enabled=r.enabled??!0,a.enableDamping=r.enableDamping??!0,a.dampingFactor=r.dampingFactor??.25,a.enableZoom=r.enableZoom??!0,a.enableRotate=r.enableRotate??!0,a.enablePan=r.enablePan??!0,a.autoRotate=r.autoRotate??!1,r.autoRotateSpeed!==void 0&&(a.autoRotateSpeed=r.autoRotateSpeed),r.minDistance!==void 0&&(a.minDistance=r.minDistance),r.maxDistance!==void 0&&(a.maxDistance=r.maxDistance),r.minPolarAngle!==void 0&&(a.minPolarAngle=r.minPolarAngle),r.maxPolarAngle!==void 0&&(a.maxPolarAngle=r.maxPolarAngle);let o=n.camera||{},s=o.target||o.cameraTarget;return s&&a.target&&(a.target.set(s[0],s[1],s[2]),a.update()),a}},_r=class extends ht{createDefaultLoader(e={}){return ht.createLoader(`model.glb`,e)}},vr=[`toneMappingExposure`,`bloom`,`vignette`,`filmGrain`,`colorGrade`],yr=[`environmentIntensity`],br=[`autoRotate`,`autoRotateSpeed`],xr=[`enabled`];function Sr(e){let t={backgroundColor:e.backgroundColor,backgroundColorEdge:e.backgroundColorEdge};return t.renderer={bloom:e.renderer?.bloom??!1,vignette:e.renderer?.vignette??!1,filmGrain:e.renderer?.filmGrain??!1,colorGrade:e.renderer?.colorGrade??!1},e.renderer?.toneMappingExposure!==void 0&&(t.renderer.toneMappingExposure=e.renderer.toneMappingExposure),e.environment?.environmentIntensity!==void 0&&(t.environment={environmentIntensity:e.environment.environmentIntensity}),(e.controls?.autoRotate!==void 0||e.controls?.autoRotateSpeed!==void 0)&&(t.controls={autoRotate:e.controls?.autoRotate,autoRotateSpeed:e.controls?.autoRotateSpeed}),(e.animations?.autoplay!==void 0||e.animations?.speed!==void 0)&&(t.animations={autoplay:e.animations?.autoplay,speed:e.animations?.speed}),e.pathTracing?.enabled!==void 0&&(t.pathTracing={enabled:e.pathTracing.enabled}),t}var Cr={staticScene:!1,backgroundColor:`#f0f0f7`,replaceWithScreenshotOnComplete:!1,units:`meters`,floorAlignment:!0,pathTracing:{enabled:!1,maxSamples:1024,bounces:16,transmissiveBounces:4,renderScale:.8,lowResScale:.25,dynamicLowRes:!0},camera:{position:[60,60,60],target:[0,0,0],fov:30,near:.1,far:1e5,autoFitToObject:!0},environment:{backgroundIntensity:1,environmentIntensity:.5,studioLook:er},lighting:{ambientLight:{color:`#4a4a4a`,intensity:.32},hemisphereLight:{skyColor:`#fff6ec`,groundColor:`#3c3630`,intensity:.3},directionalLight:{color:`#fff8f2`,intensity:2.4,position:[40,90,40],castShadow:!0,shadow:{mapSize:{width:4096,height:4096},camera:{near:.5,far:200,left:-50,right:50,top:50,bottom:-50},bias:-1e-4,radius:14}},fillLight:{color:`#eef2ff`,intensity:.6,position:[-55,28,34]},rimLight:{color:`#f2f6ff`,intensity:2.6,position:[18,52,-72]}},renderer:{antialias:!0,alpha:!1,shadowMapEnabled:!0,pixelRatio:typeof window<`u`?window.devicePixelRatio:1,shadowMapType:1,toneMapping:7,toneMappingExposure:1.15},controls:{type:$n.OrbitControls,enabled:!0,enableDamping:!0,dampingFactor:.25,enableZoom:!0,enableRotate:!0,enablePan:!0,maxPolarAngle:Math.PI/2},helpers:{grid:{type:`shadow_floor`,size:20,divisions:20,colorGrid:`#a8a8a2`,opacity:.5,styleOptions:{tileSize:.1173,metalness:0,roughness:.9,transmission:0}},axes:!1,stats:!1,gizmo:!1,studioEnvironment:!0,darkStudioMode:!1}},wr={studio_dome:{helpers:{grid:{type:`shadow_floor`},studioEnvironment:!0},environment:{studioLook:`crisp`}},studio_soft:{helpers:{grid:{type:`shadow_floor`},studioEnvironment:!0},environment:{studioLook:`soft`}}},Tr=`studio_dome`;function Er(e){return e?wr[e]??{}:{}}var Dr={studio:{backgroundColor:`#f0f0f7`,renderer:{toneMappingExposure:1.15},environment:{environmentIntensity:.5}},product:{backgroundColor:`#ffffff`,renderer:{toneMappingExposure:1.2},environment:{environmentIntensity:.55}},neutral:{backgroundColor:`#d9d9de`,renderer:{toneMappingExposure:1.1},environment:{environmentIntensity:.45}},dark:{backgroundColor:`#242430`,backgroundColorEdge:`#050507`,renderer:{toneMappingExposure:1.3},environment:{environmentIntensity:.42}},outdoor:{backgroundColor:`#bcd4e6`,renderer:{toneMappingExposure:1.2},environment:{environmentIntensity:.6}}};function Or(e){return e?Dr[e]??{}:{}}function kr(e,t){return d(d(d(e,Er(t.scene)),Or(t.preset)),t)}var Ar=(e,...t)=>{if(!e)return;let n={...e};for(let e of t)delete n[e];return Object.keys(n).length>0?n:void 0};function jr(e){let n=(0,t.useMemo)(()=>JSON.stringify({pathTracing:Ar(e.pathTracing,...xr),staticScene:e.staticScene,renderer:Ar(e.renderer,...vr),camera:e.camera,controls:Ar(e.controls,...br),environment:Ar(e.environment,...yr),scene:e.scene??`studio_dome`,lighting:e.lighting,helpers:Ar(e.helpers,`gizmo`),rendering:e.rendering,replaceWithScreenshotOnComplete:e.replaceWithScreenshotOnComplete,loaders:e.loaders,units:e.units??`meters`,floorAlignment:e.floorAlignment??!0,selectionBvh:e.selection?.bvh!==!1}),[e.pathTracing,e.staticScene,e.renderer,e.camera,e.controls,e.environment,e.scene,e.lighting,e.helpers,e.rendering,e.replaceWithScreenshotOnComplete,e.loaders,e.units,e.floorAlignment,e.selection]),r=(0,t.useMemo)(()=>{let t=kr(Cr,e);return JSON.stringify(Sr(t))},[e.preset,e.backgroundColor,e.backgroundColorEdge,e.renderer,e.environment,e.controls,e.animations,e.pathTracing]);return{options:(0,t.useMemo)(()=>e,[n,r]),structuralKey:n,runtimeKey:r}}var Mr=`200px`;function Nr(e,n){let[r,i]=(0,t.useState)(!n);return(0,t.useEffect)(()=>{if(r)return;if(!n){i(!0);return}let t=e.current;if(!t||typeof IntersectionObserver>`u`){i(!0);return}let a=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&i(!0)},{rootMargin:Mr});return a.observe(t),()=>a.disconnect()},[e,n,r]),r}function Pr(e,n){let r=(0,t.useRef)(null),i=(0,t.useRef)({width:0,height:0}),[a,o]=(0,t.useState)(!1),[s,c]=(0,t.useState)(null),{options:l,structuralKey:u,runtimeKey:d}=jr(n),f=Nr(e,(n.loading??`eager`)===`lazy`);return(0,t.useEffect)(()=>{if(!f||!e.current||r.current)return;c(null);let t=kr(Cr,l),n;try{n=gr.createViewer(e.current,t)}catch(e){console.error(`Failed to create viewer:`,e),c(e instanceof Error?e:Error(String(e)));return}r.current=n,i.current={width:0,height:0};let a=!1;return n.initialize().then(e=>{a||(e.ok?o(!0):(console.error(`Failed to initialize viewer:`,e.error),c(e.error)))}),()=>{a=!0,n.dispose(),r.current=null,o(!1)}},[e,u,f]),(0,t.useEffect)(()=>{if(!r.current||!a)return;let e=kr(Cr,l);r.current.updateOptions(Sr(e))},[d,a]),(0,t.useEffect)(()=>{if(!r.current||!e.current)return;let t=null,n=n=>{if(e.current&&r.current){let{clientWidth:a,clientHeight:o}=e.current.parentElement||e.current;if(n&&n[0]){let{width:e,height:t}=n[0].contentRect;a=Math.floor(e),o=Math.floor(t)}if(i.current.width===a&&i.current.height===o)return;t!==null&&cancelAnimationFrame(t),t=requestAnimationFrame(()=>{r.current&&e.current&&(r.current.resize(a,o),i.current={width:a,height:o})})}};n();let a=()=>n();window.addEventListener(`resize`,a);let o=null;return typeof ResizeObserver<`u`&&e.current.parentElement&&(o=new ResizeObserver(n),o.observe(e.current.parentElement)),()=>{window.removeEventListener(`resize`,a),o?.disconnect(),t!==null&&cancelAnimationFrame(t)}},[a,e,u]),{viewer:r.current,isInitialized:a,initError:s}}function Fr(e,n){let r=(0,t.useRef)(n);r.current=n,(0,t.useEffect)(()=>{if(!e)return;let t=e.getEvents(),i=[],a=e=>{let n=t=>{r.current[e]?.(t)};return t.on(e,n),()=>t.off(e,n)};return Object.keys(n).forEach(e=>{n[e]&&i.push(a(e))}),()=>{i.forEach(e=>e())}},[e])}function Ir(e,n){let[r,i]=(0,t.useState)(null),a=(0,t.useRef)(new Set);(0,t.useEffect)(()=>{if(e!==void 0&&a.current.has(e)){a.current.delete(e),i(t=>t===e?null:t);return}a.current.clear(),i(null)},[e]);let o=!!n?.presets;(0,t.useEffect)(()=>{o||(a.current.clear(),i(null))},[o]);let s=n?.onPresetChange,c=(0,t.useCallback)(e=>{i(e),s&&(a.current.add(e),s(e))},[s]);return{activePreset:r??e,pickerEnabled:o,selectPreset:c}}function Lr(e,n,r,i,a){return(0,t.useMemo)(()=>{let t=e.preset!==n,o=r===!0&&e.pathTracing?.enabled===void 0,s=i!==void 0&&e.controls?.autoRotate===void 0,c=a!==void 0&&e.animations?.autoplay===void 0;return!t&&!o&&!s&&!c?e:{...e,...t?{preset:n}:{},...o?{pathTracing:{...e.pathTracing,enabled:!0}}:{},...s?{controls:{...e.controls,autoRotate:i}}:{},...c?{animations:{...e.animations,autoplay:a}}:{}}},[e,n,r,i,a])}function Rr(e,n,r){let i=(0,t.useMemo)(()=>{if(typeof r==`string`)return r;if(r)return`object-${r.uuid||`no-uuid`}`},[r]),[a,o]=(0,t.useState)(()=>({status:r?`loading`:`idle`}));return(0,t.useEffect)(()=>{o({status:r?`loading`:`idle`})},[i]),(0,t.useEffect)(()=>{if(!e||!n||!r||e.isDisposed())return;let t=!0,i=typeof r==`string`?r:new D(r);return e.loadModel(i).then(n=>{!t||e.isDisposed()||(n.ok?o({status:`loaded`}):(o({status:`error`,error:n.error.message}),console.error(`Failed to load model:`,n.error)))}),()=>{t=!1}},[e,n,i]),a}var zr=class{static toThreeObject(t){let r=e.r(t);if(r)return r;let i=new n.Object3D;return i.position.set(t.position.x,t.position.y,t.position.z),i.rotation.set(t.rotation.x,t.rotation.y,t.rotation.z),i.scale.set(t.scale.x,t.scale.y,t.scale.z),i}static toThreeCamera(t){return e.t(t)??new n.PerspectiveCamera}static toThreeControls(t){return e.n(t)??t}static convertModelLoaded(e){return{model:this.toThreeObject(e.model),loadTime:e.loadTime}}static convertControlsChange(e){return{type:e.type,camera:e.camera?this.toThreeCamera(e.camera):void 0,controls:e.controls?this.toThreeControls(e.controls):void 0}}static convertObjectSelected(e){return{object:this.toThreeObject(e.object),point:e.point}}static convertInitialized(e,t){return{viewer:t}}static convertDisposed(e,t){return{viewer:t}}};function Br(n){let r=(0,t.useRef)(new e.D);return Fr(n,(0,t.useMemo)(()=>({"model:loading":e=>r.current.emit(`model:loading`,e),"model:progress":e=>r.current.emit(`model:progress`,e),"model:loaded":e=>r.current.emit(`model:loaded`,zr.convertModelLoaded(e)),"model:error":e=>r.current.emit(`model:error`,e),"render:complete":e=>r.current.emit(`render:complete`,e),"controls:change":e=>r.current.emit(`controls:change`,zr.convertControlsChange(e)),"object:selected":e=>r.current.emit(`object:selected`,zr.convertObjectSelected(e)),error:e=>r.current.emit(`error`,e)}),[])),r.current}function Vr(e,n,r){let i=(0,t.useRef)(r);i.current=r,Fr(e,(0,t.useMemo)(()=>({"model:loaded":()=>i.current.onLoad?.(),"model:progress":e=>i.current.onProgress?.(Math.min(1,e.loaded/e.total)),"model:error":e=>i.current.onError?.(e.error)}),[]));let a=(0,t.useRef)(null);(0,t.useEffect)(()=>{if(!n){a.current=null;return}let e=i.current.onError;e&&a.current!==n&&(a.current=n,e(n))})}var Hr=(0,t.createContext)(null);function Ur({viewer:e,canvasRef:n,children:i}){let a=(0,t.useMemo)(()=>({viewer:e,canvasRef:n}),[e,n]);return(0,r.jsx)(Hr.Provider,{value:a,children:i})}function Wr(){let e=(0,t.useContext)(Hr);if(!e)throw Error(`useViewerContext must be used within ViewerProvider`);return e}function Gr(){let{canvasRef:e}=Wr();return(0,r.jsx)(`canvas`,{ref:e,style:{width:`100%`,height:`100%`,display:`block`,imageRendering:`auto`,background:`transparent`}})}(function(){"use strict";try{if(typeof document<`u`){var e=document.createElement(`style`);e.appendChild(document.createTextNode(`.gizmo-default{width:100px;height:100px;position:absolute;top:0;right:0;z-index:2;cursor:pointer}.custom-gizmo-style{width:360px;height:360px;position:absolute;top:0;right:0;z-index:2;cursor:pointer}.map-gizmo-style,.cad-gizmo-style{width:96px;height:96px;position:absolute;top:0;right:0;z-index:2;cursor:pointer}.example-container{position:relative;width:640px;height:360px;background-color:#3d5361;border-radius:6px;overflow:hidden}body{background-color:#f0f0f0;margin:0;padding:0}.content{display:flex;justify-content:center;align-items:center;flex-direction:column;height:100vh}.example-select{margin-bottom:24px}`)),document.head.appendChild(e)}}catch(e){console.error(`vite-plugin-css-injected-by-js`,e)}})();var Kr=(e,t,n,r,i,a)=>{let o=performance.now(),s=()=>{let c=performance.now()-o,l=Math.min(c/i,1);e.position.lerpVectors(n,r,l),t?.update(),a(),l<1&&requestAnimationFrame(s)};requestAnimationFrame(s)},qr={type:`change`},Jr={type:`start`},Yr={type:`end`},Xr=new n.Ray,Zr=new n.Plane,Qr=Math.cos(70*n.MathUtils.DEG2RAD),X=new n.Vector3,Z=2*Math.PI,Q={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},$r=1e-6,ei=class extends n.Controls{constructor(e,t=null){super(e,t),this.state=Q.NONE,this.target=new n.Vector3,this.cursor=new n.Vector3,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minTargetRadius=0,this.maxTargetRadius=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.05,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.keyRotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!0,this.keyPanSpeed=7,this.zoomToCursor=!1,this.autoRotate=!1,this.autoRotateSpeed=2,this.keys={LEFT:`ArrowLeft`,UP:`ArrowUp`,RIGHT:`ArrowRight`,BOTTOM:`ArrowDown`},this.mouseButtons={LEFT:n.MOUSE.ROTATE,MIDDLE:n.MOUSE.DOLLY,RIGHT:n.MOUSE.PAN},this.touches={ONE:n.TOUCH.ROTATE,TWO:n.TOUCH.DOLLY_PAN},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this._domElementKeyEvents=null,this._lastPosition=new n.Vector3,this._lastQuaternion=new n.Quaternion,this._lastTargetPosition=new n.Vector3,this._quat=new n.Quaternion().setFromUnitVectors(e.up,new n.Vector3(0,1,0)),this._quatInverse=this._quat.clone().invert(),this._spherical=new n.Spherical,this._sphericalDelta=new n.Spherical,this._scale=1,this._panOffset=new n.Vector3,this._rotateStart=new n.Vector2,this._rotateEnd=new n.Vector2,this._rotateDelta=new n.Vector2,this._panStart=new n.Vector2,this._panEnd=new n.Vector2,this._panDelta=new n.Vector2,this._dollyStart=new n.Vector2,this._dollyEnd=new n.Vector2,this._dollyDelta=new n.Vector2,this._dollyDirection=new n.Vector3,this._mouse=new n.Vector2,this._performCursorZoom=!1,this._pointers=[],this._pointerPositions={},this._controlActive=!1,this._onPointerMove=ni.bind(this),this._onPointerDown=ti.bind(this),this._onPointerUp=ri.bind(this),this._onContextMenu=ui.bind(this),this._onMouseWheel=oi.bind(this),this._onKeyDown=si.bind(this),this._onTouchStart=ci.bind(this),this._onTouchMove=li.bind(this),this._onMouseDown=ii.bind(this),this._onMouseMove=ai.bind(this),this._interceptControlDown=di.bind(this),this._interceptControlUp=fi.bind(this),this.domElement!==null&&this.connect(this.domElement),this.update()}connect(e){super.connect(e),this.domElement.addEventListener(`pointerdown`,this._onPointerDown),this.domElement.addEventListener(`pointercancel`,this._onPointerUp),this.domElement.addEventListener(`contextmenu`,this._onContextMenu),this.domElement.addEventListener(`wheel`,this._onMouseWheel,{passive:!1}),this.domElement.getRootNode().addEventListener(`keydown`,this._interceptControlDown,{passive:!0,capture:!0}),this.domElement.style.touchAction=`none`}disconnect(){this.domElement.removeEventListener(`pointerdown`,this._onPointerDown),this.domElement.removeEventListener(`pointermove`,this._onPointerMove),this.domElement.removeEventListener(`pointerup`,this._onPointerUp),this.domElement.removeEventListener(`pointercancel`,this._onPointerUp),this.domElement.removeEventListener(`wheel`,this._onMouseWheel),this.domElement.removeEventListener(`contextmenu`,this._onContextMenu),this.stopListenToKeyEvents(),this.domElement.getRootNode().removeEventListener(`keydown`,this._interceptControlDown,{capture:!0}),this.domElement.style.touchAction=`auto`}dispose(){this.disconnect()}getPolarAngle(){return this._spherical.phi}getAzimuthalAngle(){return this._spherical.theta}getDistance(){return this.object.position.distanceTo(this.target)}listenToKeyEvents(e){e.addEventListener(`keydown`,this._onKeyDown),this._domElementKeyEvents=e}stopListenToKeyEvents(){this._domElementKeyEvents!==null&&(this._domElementKeyEvents.removeEventListener(`keydown`,this._onKeyDown),this._domElementKeyEvents=null)}saveState(){this.target0.copy(this.target),this.position0.copy(this.object.position),this.zoom0=this.object.zoom}reset(){this.target.copy(this.target0),this.object.position.copy(this.position0),this.object.zoom=this.zoom0,this.object.updateProjectionMatrix(),this.dispatchEvent(qr),this.update(),this.state=Q.NONE}update(e=null){let t=this.object.position;X.copy(t).sub(this.target),X.applyQuaternion(this._quat),this._spherical.setFromVector3(X),this.autoRotate&&this.state===Q.NONE&&this._rotateLeft(this._getAutoRotationAngle(e)),this.enableDamping?(this._spherical.theta+=this._sphericalDelta.theta*this.dampingFactor,this._spherical.phi+=this._sphericalDelta.phi*this.dampingFactor):(this._spherical.theta+=this._sphericalDelta.theta,this._spherical.phi+=this._sphericalDelta.phi);let r=this.minAzimuthAngle,i=this.maxAzimuthAngle;isFinite(r)&&isFinite(i)&&(r<-Math.PI?r+=Z:r>Math.PI&&(r-=Z),i<-Math.PI?i+=Z:i>Math.PI&&(i-=Z),r<=i?this._spherical.theta=Math.max(r,Math.min(i,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(r+i)/2?Math.max(r,this._spherical.theta):Math.min(i,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let a=!1;if(this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{let e=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._scale),a=e!=this._spherical.radius}if(X.setFromSpherical(this._spherical),X.applyQuaternion(this._quatInverse),t.copy(this.target).add(X),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let e=null;if(this.object.isPerspectiveCamera){let t=X.length();e=this._clampDistance(t*this._scale);let n=t-e;this.object.position.addScaledVector(this._dollyDirection,n),this.object.updateMatrixWorld(),a=!!n}else if(this.object.isOrthographicCamera){let t=new n.Vector3(this._mouse.x,this._mouse.y,0);t.unproject(this.object);let r=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),this.object.updateProjectionMatrix(),a=r!==this.object.zoom;let i=new n.Vector3(this._mouse.x,this._mouse.y,0);i.unproject(this.object),this.object.position.sub(i).add(t),this.object.updateMatrixWorld(),e=X.length()}else console.warn(`WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled.`),this.zoomToCursor=!1;e!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(e).add(this.object.position):(Xr.origin.copy(this.object.position),Xr.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(Xr.direction))<Qr?this.object.lookAt(this.target):(Zr.setFromNormalAndCoplanarPoint(this.object.up,this.target),Xr.intersectPlane(Zr,this.target))))}else if(this.object.isOrthographicCamera){let e=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),e!==this.object.zoom&&(this.object.updateProjectionMatrix(),a=!0)}return this._scale=1,this._performCursorZoom=!1,a||this._lastPosition.distanceToSquared(this.object.position)>$r||8*(1-this._lastQuaternion.dot(this.object.quaternion))>$r||this._lastTargetPosition.distanceToSquared(this.target)>$r?(this.dispatchEvent(qr),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(e){return e===null?Z/60/60*this.autoRotateSpeed:Z/60*this.autoRotateSpeed*e}_getZoomScale(e){let t=Math.abs(e*.01);return .95**(this.zoomSpeed*t)}_rotateLeft(e){this._sphericalDelta.theta-=e}_rotateUp(e){this._sphericalDelta.phi-=e}_panLeft(e,t){X.setFromMatrixColumn(t,0),X.multiplyScalar(-e),this._panOffset.add(X)}_panUp(e,t){this.screenSpacePanning===!0?X.setFromMatrixColumn(t,1):(X.setFromMatrixColumn(t,0),X.crossVectors(this.object.up,X)),X.multiplyScalar(e),this._panOffset.add(X)}_pan(e,t){let n=this.domElement;if(this.object.isPerspectiveCamera){let r=this.object.position;X.copy(r).sub(this.target);let i=X.length();i*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*e*i/n.clientHeight,this.object.matrix),this._panUp(2*t*i/n.clientHeight,this.object.matrix)}else this.object.isOrthographicCamera?(this._panLeft(e*(this.object.right-this.object.left)/this.object.zoom/n.clientWidth,this.object.matrix),this._panUp(t*(this.object.top-this.object.bottom)/this.object.zoom/n.clientHeight,this.object.matrix)):(console.warn(`WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.`),this.enablePan=!1)}_dollyOut(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=e:(console.warn(`WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.`),this.enableZoom=!1)}_dollyIn(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=e:(console.warn(`WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.`),this.enableZoom=!1)}_updateZoomParameters(e,t){if(!this.zoomToCursor)return;this._performCursorZoom=!0;let n=this.domElement.getBoundingClientRect(),r=e-n.left,i=t-n.top,a=n.width,o=n.height;this._mouse.x=r/a*2-1,this._mouse.y=-(i/o)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(e){return Math.max(this.minDistance,Math.min(this.maxDistance,e))}_handleMouseDownRotate(e){this._rotateStart.set(e.clientX,e.clientY)}_handleMouseDownDolly(e){this._updateZoomParameters(e.clientX,e.clientX),this._dollyStart.set(e.clientX,e.clientY)}_handleMouseDownPan(e){this._panStart.set(e.clientX,e.clientY)}_handleMouseMoveRotate(e){this._rotateEnd.set(e.clientX,e.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);let t=this.domElement;this._rotateLeft(Z*this._rotateDelta.x/t.clientHeight),this._rotateUp(Z*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(e){this._dollyEnd.set(e.clientX,e.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(e){this._panEnd.set(e.clientX,e.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(e){this._updateZoomParameters(e.clientX,e.clientY),e.deltaY<0?this._dollyIn(this._getZoomScale(e.deltaY)):e.deltaY>0&&this._dollyOut(this._getZoomScale(e.deltaY)),this.update()}_handleKeyDown(e){let t=!1;switch(e.code){case this.keys.UP:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(Z*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,this.keyPanSpeed),t=!0;break;case this.keys.BOTTOM:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(-Z*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,-this.keyPanSpeed),t=!0;break;case this.keys.LEFT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(Z*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(this.keyPanSpeed,0),t=!0;break;case this.keys.RIGHT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(-Z*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(-this.keyPanSpeed,0),t=!0;break}t&&(e.preventDefault(),this.update())}_handleTouchStartRotate(e){if(this._pointers.length===1)this._rotateStart.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._rotateStart.set(n,r)}}_handleTouchStartPan(e){if(this._pointers.length===1)this._panStart.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._panStart.set(n,r)}}_handleTouchStartDolly(e){let t=this._getSecondPointerPosition(e),n=e.pageX-t.x,r=e.pageY-t.y,i=Math.sqrt(n*n+r*r);this._dollyStart.set(0,i)}_handleTouchStartDollyPan(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enablePan&&this._handleTouchStartPan(e)}_handleTouchStartDollyRotate(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enableRotate&&this._handleTouchStartRotate(e)}_handleTouchMoveRotate(e){if(this._pointers.length==1)this._rotateEnd.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._rotateEnd.set(n,r)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);let t=this.domElement;this._rotateLeft(Z*this._rotateDelta.x/t.clientHeight),this._rotateUp(Z*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(e){if(this._pointers.length===1)this._panEnd.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._panEnd.set(n,r)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(e){let t=this._getSecondPointerPosition(e),n=e.pageX-t.x,r=e.pageY-t.y,i=Math.sqrt(n*n+r*r);this._dollyEnd.set(0,i),this._dollyDelta.set(0,(this._dollyEnd.y/this._dollyStart.y)**+this.zoomSpeed),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);let a=(e.pageX+t.x)*.5,o=(e.pageY+t.y)*.5;this._updateZoomParameters(a,o)}_handleTouchMoveDollyPan(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enablePan&&this._handleTouchMovePan(e)}_handleTouchMoveDollyRotate(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enableRotate&&this._handleTouchMoveRotate(e)}_addPointer(e){this._pointers.push(e.pointerId)}_removePointer(e){delete this._pointerPositions[e.pointerId];for(let t=0;t<this._pointers.length;t++)if(this._pointers[t]==e.pointerId){this._pointers.splice(t,1);return}}_isTrackingPointer(e){for(let t=0;t<this._pointers.length;t++)if(this._pointers[t]==e.pointerId)return!0;return!1}_trackPointer(e){let t=this._pointerPositions[e.pointerId];t===void 0&&(t=new n.Vector2,this._pointerPositions[e.pointerId]=t),t.set(e.pageX,e.pageY)}_getSecondPointerPosition(e){let t=e.pointerId===this._pointers[0]?this._pointers[1]:this._pointers[0];return this._pointerPositions[t]}_customWheelEvent(e){let t=e.deltaMode,n={clientX:e.clientX,clientY:e.clientY,deltaY:e.deltaY};switch(t){case 1:n.deltaY*=16;break;case 2:n.deltaY*=100;break}return e.ctrlKey&&!this._controlActive&&(n.deltaY*=10),n}};function ti(e){this.enabled!==!1&&(this._pointers.length===0&&(this.domElement.setPointerCapture(e.pointerId),this.domElement.addEventListener(`pointermove`,this._onPointerMove),this.domElement.addEventListener(`pointerup`,this._onPointerUp)),!this._isTrackingPointer(e)&&(this._addPointer(e),e.pointerType===`touch`?this._onTouchStart(e):this._onMouseDown(e)))}function ni(e){this.enabled!==!1&&(e.pointerType===`touch`?this._onTouchMove(e):this._onMouseMove(e))}function ri(e){switch(this._removePointer(e),this._pointers.length){case 0:this.domElement.releasePointerCapture(e.pointerId),this.domElement.removeEventListener(`pointermove`,this._onPointerMove),this.domElement.removeEventListener(`pointerup`,this._onPointerUp),this.dispatchEvent(Yr),this.state=Q.NONE;break;case 1:let t=this._pointers[0],n=this._pointerPositions[t];this._onTouchStart({pointerId:t,pageX:n.x,pageY:n.y});break}}function ii(e){let t;switch(e.button){case 0:t=this.mouseButtons.LEFT;break;case 1:t=this.mouseButtons.MIDDLE;break;case 2:t=this.mouseButtons.RIGHT;break;default:t=-1}switch(t){case n.MOUSE.DOLLY:if(this.enableZoom===!1)return;this._handleMouseDownDolly(e),this.state=Q.DOLLY;break;case n.MOUSE.ROTATE:if(e.ctrlKey||e.metaKey||e.shiftKey){if(this.enablePan===!1)return;this._handleMouseDownPan(e),this.state=Q.PAN}else{if(this.enableRotate===!1)return;this._handleMouseDownRotate(e),this.state=Q.ROTATE}break;case n.MOUSE.PAN:if(e.ctrlKey||e.metaKey||e.shiftKey){if(this.enableRotate===!1)return;this._handleMouseDownRotate(e),this.state=Q.ROTATE}else{if(this.enablePan===!1)return;this._handleMouseDownPan(e),this.state=Q.PAN}break;default:this.state=Q.NONE}this.state!==Q.NONE&&this.dispatchEvent(Jr)}function ai(e){switch(this.state){case Q.ROTATE:if(this.enableRotate===!1)return;this._handleMouseMoveRotate(e);break;case Q.DOLLY:if(this.enableZoom===!1)return;this._handleMouseMoveDolly(e);break;case Q.PAN:if(this.enablePan===!1)return;this._handleMouseMovePan(e);break}}function oi(e){this.enabled===!1||this.enableZoom===!1||this.state!==Q.NONE||(e.preventDefault(),this.dispatchEvent(Jr),this._handleMouseWheel(this._customWheelEvent(e)),this.dispatchEvent(Yr))}function si(e){this.enabled!==!1&&this._handleKeyDown(e)}function ci(e){switch(this._trackPointer(e),this._pointers.length){case 1:switch(this.touches.ONE){case n.TOUCH.ROTATE:if(this.enableRotate===!1)return;this._handleTouchStartRotate(e),this.state=Q.TOUCH_ROTATE;break;case n.TOUCH.PAN:if(this.enablePan===!1)return;this._handleTouchStartPan(e),this.state=Q.TOUCH_PAN;break;default:this.state=Q.NONE}break;case 2:switch(this.touches.TWO){case n.TOUCH.DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchStartDollyPan(e),this.state=Q.TOUCH_DOLLY_PAN;break;case n.TOUCH.DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchStartDollyRotate(e),this.state=Q.TOUCH_DOLLY_ROTATE;break;default:this.state=Q.NONE}break;default:this.state=Q.NONE}this.state!==Q.NONE&&this.dispatchEvent(Jr)}function li(e){switch(this._trackPointer(e),this.state){case Q.TOUCH_ROTATE:if(this.enableRotate===!1)return;this._handleTouchMoveRotate(e),this.update();break;case Q.TOUCH_PAN:if(this.enablePan===!1)return;this._handleTouchMovePan(e),this.update();break;case Q.TOUCH_DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchMoveDollyPan(e),this.update();break;case Q.TOUCH_DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchMoveDollyRotate(e),this.update();break;default:this.state=Q.NONE}}function ui(e){this.enabled!==!1&&e.preventDefault()}function di(e){e.key===`Control`&&(this._controlActive=!0,this.domElement.getRootNode().addEventListener(`keyup`,this._interceptControlUp,{passive:!0,capture:!0}))}function fi(e){e.key===`Control`&&(this._controlActive=!1,this.domElement.getRootNode().removeEventListener(`keyup`,this._interceptControlUp,{passive:!0,capture:!0}))}var pi=class extends ei{constructor(e,t){super(e,t),this.screenSpacePanning=!1,this.mouseButtons={LEFT:n.MOUSE.PAN,MIDDLE:n.MOUSE.DOLLY,RIGHT:n.MOUSE.ROTATE},this.touches={ONE:n.TOUCH.PAN,TWO:n.TOUCH.DOLLY_ROTATE}}},$={CUBE_SIZE:1.8,EDGE_SECTION_SIZE:.35,FACE_THICKNESS:.35,CANVAS_SIZE:256,FONT_SIZE:`62px`,TEXT_COLOR:`#000000`,TEXT_ALIGN:`center`,TEXT_BASELINE:`middle`,FACE_COLOR:`#EFF3F2`,FACE_OPACITY:1,EDGE_COLOR:`#EFF3F2`,CORNER_COLOR:`#EFF3F2`,LINE_COLOR:0},mi=(e=>(e.FRONT=`FRONT`,e.BACK=`BACK`,e.RIGHT=`RIGHT`,e.LEFT=`LEFT`,e.TOP=`TOP`,e.BOTTOM=`BOTTOM`,e))(mi||{});new n.Vector3(0,1,0);var hi=`rotation-arrows-name`,gi=`left-rotation-arrow-name`,_i=`right-rotation-arrow-name`,vi=`gizmo-group-name`,yi=[_i,gi],bi={GIZMO_DISTANCE:8,DEFAULT_UP:new n.Vector3(0,1,0),FORWARD:new n.Vector3(0,0,-1)},xi=e=>bi.FORWARD.clone().applyQuaternion(e),Si=(e,t,r=new n.Vector3)=>r.clone().add(e.multiplyScalar(-t)),Ci=class{constructor(e,t=hi){this.gizmoScene=e,this.gizmoArrowsName=t}syncGizmoWithMain(e,t){e.quaternion.copy(t.quaternion),e.up.copy(t.up);let n=xi(e.quaternion).normalize();e.position.copy(Si(n,bi.GIZMO_DISTANCE)),e.camera.updateMatrixWorld(!0);let r=this.gizmoScene.getObjectByName(this.gizmoArrowsName);r&&r.rotation.copy(e.camera.rotation)}syncMainWithGizmo(e,t,r){let i=r.target.clone(),a=e.position.distanceTo(i),o=e.camera instanceof n.PerspectiveCamera;r instanceof pi&&!o?this.syncMapControls(e,t,i,a):this.syncOrbitControls(e,t,i,a),e.camera.updateMatrix(),e.camera.updateMatrixWorld(!0),r.update()}syncMapControls(e,t,n,r){let i=e.position.y-n.y,a=xi(t.quaternion);a.y=0,a.normalize();let o=n.clone();o.y+=i,o.add(a.multiplyScalar(-r)),e.position.copy(o),e.up.copy(bi.DEFAULT_UP),e.camera.lookAt(n)}syncOrbitControls(e,t,n,r){let i=xi(t.quaternion),a=bi.DEFAULT_UP.clone().applyQuaternion(t.quaternion),o=Si(i,r,n);e.position.copy(o),e.up.copy(a),e.camera.lookAt(n)}},wi=e=>new Ci(e),Ti=(e,t,n)=>{wi(n).syncGizmoWithMain({camera:e,position:e.position,quaternion:e.quaternion,up:e.up},{camera:t,position:t.position,quaternion:t.quaternion,up:t.up})},Ei=(e,t,n)=>{wi(t.userData.scene).syncMainWithGizmo({camera:e,position:e.position,quaternion:e.quaternion,up:e.up},{camera:t,position:t.position,quaternion:t.quaternion,up:t.up},n)},Di=()=>{try{let e=document.createElement(`canvas`);return!!(window.WebGLRenderingContext&&(e.getContext(`webgl`)||e.getContext(`experimental-webgl`)))}catch{return!1}},Oi=()=>Di()?new n.WebGLRenderer({alpha:!0,antialias:!1}):(console.error(`WebGL is not supported in this environment.`),null),ki=e=>{let t=new n.AmbientLight(16777215,1);e.add(t);let r=new n.DirectionalLight(16777215,1);r.position.set(5,10,5),e.add(r);let i=new n.DirectionalLight(16777215,1);i.position.set(-5,-10,5),e.add(i);let a=new n.PointLight(16777215,1,100);a.position.set(0,0,5),e.add(a),r.castShadow=!1,i.castShadow=!1,a.castShadow=!1},Ai=class{static createTextTexture(e){let t=document.createElement(`canvas`),r=t.getContext(`2d`);t.width=$.CANVAS_SIZE,t.height=$.CANVAS_SIZE,r&&(r.clearRect(0,0,t.width,t.height),r.font=`${$.FONT_SIZE} Arial`,r.fillStyle=$.TEXT_COLOR,r.textAlign=$.TEXT_ALIGN,r.textBaseline=$.TEXT_BASELINE,r.fillText(e,t.width/2,t.height/2));let i=new n.CanvasTexture(t);return i.needsUpdate=!0,i}},ji=class{static createWireframe([e,t,r]){let i=new n.BoxGeometry(e,t,r),a=new n.EdgesGeometry(i),o=new n.LineBasicMaterial({color:$.LINE_COLOR}),s=new n.LineSegments(a,o);return s.name=`Wireframe`,s}static createEdgeBox(e,t,r){let i=$.CUBE_SIZE-$.EDGE_SECTION_SIZE,a={x:$.EDGE_SECTION_SIZE,y:$.EDGE_SECTION_SIZE,z:$.EDGE_SECTION_SIZE};a[t]=i;let o=new n.BoxGeometry(a.x,a.y,a.z),s=new n.MeshStandardMaterial({color:$.EDGE_COLOR}),c=new n.Mesh(o,s);return c.position.copy(e),c.name=`Edge Box ${r}`,c}static createCornerCube(e,t){let r=new n.BoxGeometry($.EDGE_SECTION_SIZE,$.EDGE_SECTION_SIZE,$.EDGE_SECTION_SIZE),i=new n.MeshStandardMaterial({color:$.CORNER_COLOR}),a=new n.Mesh(r,i);return a.position.copy(e),a.name=`Corner Cube ${t}`,a}static createFace(e,t,r){let i=new n.Group,a=new n.BoxGeometry($.CUBE_SIZE-$.EDGE_SECTION_SIZE,$.CUBE_SIZE-$.EDGE_SECTION_SIZE,$.FACE_THICKNESS),o=new n.MeshStandardMaterial({color:$.FACE_COLOR}),s=new n.Mesh(a,o);s.name=`Face Box ${r}`,i.add(s);let c=new n.PlaneGeometry($.CUBE_SIZE-$.EDGE_SECTION_SIZE,$.CUBE_SIZE-$.EDGE_SECTION_SIZE),l=new n.MeshStandardMaterial({map:Ai.createTextTexture(r),transparent:!0,depthWrite:!1}),u=new n.Mesh(c,l);return u.position.set(0,0,$.FACE_THICKNESS/2+.01),i.add(u),i.position.copy(e),i.rotation.copy(t),i}},Mi=(e,t)=>{let r=document.createElement(`canvas`);r.width=64,r.height=64;let i=r.getContext(`2d`);i.fillStyle=`rgba(0, 0, 0, 0)`,i.fillRect(0,0,r.width,r.height),i.font=`Bold 48px Arial`,i.fillStyle=`#${t.toString(16).padStart(6,`0`)}`,i.textAlign=`center`,i.textBaseline=`middle`,i.fillText(e,r.width/2,r.height/2);let a=new n.CanvasTexture(r),o=new n.SpriteMaterial({map:a}),s=new n.Sprite(o);return s.scale.set(.5,.5,.5),s},Ni=class{constructor(e){this.hoveredObject=null,this.originalColor=null,this.config=e}get vectorToCube(){return this.hoveredObject?.userData.vectorToCube}getInitialRotation(){switch(this.config.initialFace){case mi.BACK:return new n.Euler(0,Math.PI,0);case mi.RIGHT:return new n.Euler(0,-Math.PI/2,0);case mi.LEFT:return new n.Euler(0,Math.PI/2,0);case mi.TOP:return new n.Euler(Math.PI/2,0,0);case mi.BOTTOM:return new n.Euler(-Math.PI/2,0,0);case mi.FRONT:default:return new n.Euler(0,0,0)}}createWireframe(){let e=$.CUBE_SIZE+$.EDGE_SECTION_SIZE,t=ji.createWireframe([e,e,e]);return t.userData.gizmoCube=this,t}createEdgeBox(e,t,n){let r=ji.createEdgeBox(e,t,n);return r.userData.gizmoCube=this,r}createCornerCube(e,t){let n=ji.createCornerCube(e,t);return n.userData.gizmoCube=this,n}createFace(e,t,n){let r=ji.createFace(e,t,n),i=r.getObjectByName(`Face Box ${n}`);return i.userData.gizmoCube=this,r}createEdges(e){let t=$.CUBE_SIZE/2;[{axis:`x`,pos:new n.Vector3(0,t,-t)},{axis:`x`,pos:new n.Vector3(0,t,t)},{axis:`x`,pos:new n.Vector3(0,-t,-t)},{axis:`x`,pos:new n.Vector3(0,-t,t)},{axis:`y`,pos:new n.Vector3(t,0,-t)},{axis:`y`,pos:new n.Vector3(t,0,t)},{axis:`y`,pos:new n.Vector3(-t,0,-t)},{axis:`y`,pos:new n.Vector3(-t,0,t)},{axis:`z`,pos:new n.Vector3(t,t,0)},{axis:`z`,pos:new n.Vector3(t,-t,0)},{axis:`z`,pos:new n.Vector3(-t,t,0)},{axis:`z`,pos:new n.Vector3(-t,-t,0)}].forEach(({axis:t,pos:n},r)=>{let i=this.createEdgeBox(n,t,r+1);e.add(i)})}createCorners(e){let t=$.CUBE_SIZE/2;[new n.Vector3(-t,-t,-t),new n.Vector3(-t,-t,t),new n.Vector3(-t,t,-t),new n.Vector3(-t,t,t),new n.Vector3(t,-t,-t),new n.Vector3(t,-t,t),new n.Vector3(t,t,-t),new n.Vector3(t,t,t)].forEach((t,n)=>{let r=this.createCornerCube(t,n+1);e.add(r)})}createFaces(e){let t=$.CUBE_SIZE/2;[{pos:new n.Vector3(0,0,t),rotation:new n.Euler(0,0,0),label:`FRONT`},{pos:new n.Vector3(0,0,-t),rotation:new n.Euler(0,Math.PI,0),label:`BACK`},{pos:new n.Vector3(t,0,0),rotation:new n.Euler(0,Math.PI/2,0),label:`RIGHT`},{pos:new n.Vector3(-t,0,0),rotation:new n.Euler(0,-Math.PI/2,0),label:`LEFT`},{pos:new n.Vector3(0,t,0),rotation:new n.Euler(-Math.PI/2,0,0),label:`TOP`},{pos:new n.Vector3(0,-t,0),rotation:new n.Euler(Math.PI/2,0,0),label:`BOTTOM`}].forEach(({pos:t,rotation:n,label:r})=>{let i=this.createFace(t,n,r);e.add(i)})}createAxis(e){let{color:t,direction:r,length:i,origin:a,lineWidth:o,label:s}=e,c=new n.Group,l=o/2,u=new n.CylinderGeometry(l,l,i,32),d=new n.MeshBasicMaterial({color:t}),f=new n.Mesh(u,d);if(f.position.copy(a).add(r.clone().multiplyScalar(i/2)),!r.equals(new n.Vector3(0,1,0))){let e=new n.Vector3(0,1,0).cross(r).normalize(),t=Math.acos(new n.Vector3(0,1,0).dot(r));f.setRotationFromAxisAngle(e,t)}c.add(f);let p=Mi(s,t);return p.position.copy(a).add(r.clone().multiplyScalar(i+.1)),c.add(p),c}createCoordinateAxes(){let e=new n.Group,t=$.CUBE_SIZE,r=$.EDGE_SECTION_SIZE,i=-(t/2+r/2),a=e=>{let t=new n.Vector3(1,1,1);return new n.Vector3(e,e,e).add(t.clone().normalize().negate().multiplyScalar(.04))},o=t+1.25*r;return[{color:16711680,direction:new n.Vector3(1,0,0),length:o,origin:a(i),lineWidth:.04,label:`X`},{color:65280,direction:new n.Vector3(0,1,0),length:o,origin:a(i),lineWidth:.04,label:`Y`},{color:255,direction:new n.Vector3(0,0,1),length:o,origin:a(i),lineWidth:.04,label:`Z`}].forEach(t=>{let n=this.createAxis(t);e.add(n)}),e}create(){let e=new n.Group;e.name=vi;let t=this.createWireframe();e.add(t),this.createEdges(e),this.createCorners(e),this.createFaces(e);let r=this.createCoordinateAxes();e.add(r);let i=this.getInitialRotation();return e.setRotationFromEuler(i),e}highlightObject(e){if(this.hoveredObject!==e)if(this.hoveredObject&&this.originalColor&&this.hoveredObject.material.color.set(this.originalColor),e&&e instanceof n.Mesh){let t=e.material;this.hoveredObject=e,this.originalColor=t.color.clone(),t.color.set(11519973)}else this.hoveredObject=null,this.originalColor=null}handleClick(){if(this.hoveredObject){let e=new n.Vector3;e=this.hoveredObject.getWorldPosition(e).clone();let t=new n.Vector3(0,0,0),r=e.sub(t).normalize();this.hoveredObject.userData.vectorToCube=r}}},Pi=class{constructor(e){this.onChangeMainControlsListener=()=>{},this.onChangeGizmoControlsListener=()=>{},this.animationId=0;let{gizmoParams:t,mainParams:n,syncFunctions:r,options:i}=e;this.gizmoDiv=t.gizmoDiv,this.gizmoScene=t.gizmoScene,this.gizmoRenderer=t.gizmoRenderer,this.gizmoCamera=t.gizmoCamera,this.mainCamera=n.mainCamera,this.mainControls=n.mainControls,this.renderGizmo=n.renderGizmo,this.syncFunctions=r,this.options=i,this.gizmoControls=new ei(this.gizmoCamera,this.gizmoRenderer.domElement),this.initializeRenderer(),this.initializeScene(),this.initializeControls(),this.startAnimationLoop()}initializeRenderer(){var e;this.gizmoRenderer.setPixelRatio(window.devicePixelRatio),this.gizmoRenderer.setSize(this.gizmoDiv.clientWidth,this.gizmoDiv.clientHeight);let t=this.gizmoDiv.clientWidth/this.gizmoDiv.clientHeight;this.gizmoCamera.aspect=t,this.gizmoCamera.updateProjectionMatrix(),(e=this.options)!=null&&e.up&&this.gizmoCamera.up.copy(this.options.up),this.gizmoDiv.appendChild(this.gizmoRenderer.domElement)}initializeScene(){let e=new Ni({initialFace:this.options?.initialFace??mi.FRONT}).create();this.gizmoScene.add(e),ki(this.gizmoScene)}initializeControls(){this.onChangeMainControlsListener=()=>this.syncFunctions.syncGizmoCameraWithMain(this.gizmoCamera,this.mainCamera,this.gizmoScene),this.mainControls.addEventListener(`change`,this.onChangeMainControlsListener),this.gizmoControls.enableZoom=!1,this.gizmoControls.enablePan=!1,this.gizmoControls.rotateSpeed=.5,this.gizmoControls.update(),this.onChangeGizmoControlsListener=()=>{this.gizmoScene.getObjectByName(hi)?.rotation.copy(this.gizmoCamera.rotation),this.syncFunctions.syncMainCameraWithGizmo(this.mainCamera,this.gizmoCamera,this.mainControls),this.renderGizmo()},this.gizmoControls.addEventListener(`change`,this.onChangeGizmoControlsListener)}startAnimationLoop(){let e=()=>{this.gizmoRenderer.render(this.gizmoScene,this.gizmoCamera)},t=()=>{this.animationId=requestAnimationFrame(t),e()};t()}dispose(){this.mainControls.removeEventListener(`change`,this.onChangeMainControlsListener),this.gizmoControls.removeEventListener(`change`,this.onChangeGizmoControlsListener),this.gizmoScene.clear(),cancelAnimationFrame(this.animationId)}},Fi=(e,t)=>{let n;return function(...r){n||(e.apply(this,r),n=!0,setTimeout(()=>n=!1,t))}};function Ii(e,t,n){if(!t)return;let r=t.domElement.getBoundingClientRect();n.x=(e.clientX-r.left)/r.width*2-1,n.y=-((e.clientY-r.top)/r.height)*2+1}var Li=(e,t,n,r)=>(r.setFromCamera(e,t),r.intersectObjects(n.children,!0)),Ri=e=>{let t=[`Wireframe`,``];return e.find(e=>!t.includes(e.object.name))?.object||null};function zi(e,t,n,r){return!t||!n?null:Ri(Li(e,t,n,r))}function Bi(e,t){let n=e?.userData.gizmoCube;if(e&&n){n.handleClick();let e=n.vectorToCube;e&&t(e)}}var Vi={radius:2.1,color:12369854,tubeRadius:.1,tubeSegments:8,numPoints:64,tubeOffset:1.5},Hi={size:.2,depth:.1,heightRatio:1.4,segments:1},Ui=class{constructor(e={}){this.config={...Vi,...e},this.material=new n.MeshBasicMaterial({color:this.config.color})}create(){let e=new n.Group,t=this.createQuarterCircleCurves();return e.add(...this.createTubes(t),...this.createArrowHeads(t)),e.name=hi,e}createQuarterCircleCurves(){let e=this.generateQuarterCirclePoints(),t=Math.floor(e.length/2);return[new n.CatmullRomCurve3(e.slice(0,t-this.config.tubeOffset)),new n.CatmullRomCurve3(e.slice(t+this.config.tubeOffset))]}generateQuarterCirclePoints(){let e=Math.PI/2,t=e/2,r=e/4;return Array.from({length:this.config.numPoints+1},(e,i)=>{let a=i/this.config.numPoints,o=r+t*a,s=this.config.radius*Math.sin(o),c=this.config.radius*Math.cos(o);return new n.Vector3(s,c,0)})}createTubes([e,t]){let r=(e,t)=>{let r=new n.TubeGeometry(e,this.config.numPoints,this.config.tubeRadius,this.config.tubeSegments,!1),i=new n.Mesh(r,this.material);return i.name=t,i};return[r(e,gi),r(t,_i)]}createArrowHeads([e,t]){let{size:r,depth:i,heightRatio:a,segments:o}=Hi,s=this.createArrowShape(r,a),c=new n.ExtrudeGeometry(s,{steps:o,depth:i,bevelEnabled:!1}).center(),l=(e,t,r)=>{let i=new n.Mesh(c,this.material);return i.position.copy(e),i.rotation.z=t,i.name=r,i};return[l(e.getPoint(0),this.calculateArrowRotation(e.getTangent(0))+Math.PI/2,gi),l(t.getPoint(1),this.calculateArrowRotation(t.getTangent(1))-Math.PI/2,_i)]}createArrowShape(e,t){return new n.Shape().moveTo(0,0).lineTo(e,-e*t).lineTo(-e,-e*t).lineTo(0,0)}calculateArrowRotation(e){return Math.atan2(e.y,e.x)}},Wi=e=>{let t=e.rotation,n=.01,r=Math.PI,i=(Math.abs(t.x)%(2*r)+2*r)%(2*r),a=(Math.abs(t.y)%(2*r)+2*r)%(2*r),o=Math.abs(i-r/2)<n||Math.abs(i-3*r/2)<n||Math.abs(a-r/2)<n||Math.abs(a-3*r/2)<n,s=(Math.abs(i)<n||Math.abs(i-r)<n)&&(Math.abs(a)<n||Math.abs(a-r)<n);return!(o||s)},Gi=25,Ki=200;function qi({gizmoRenderer:e,gizmoScene:r,gizmoCamera:i,alignCameraWithVector:a,gizmoControlRef:o}){let s=(0,t.useRef)(null),c=(0,t.useRef)(null),l=(0,t.useRef)(new n.Raycaster).current,u=(0,t.useRef)(new n.Vector2).current,d=(0,t.useCallback)(()=>{let e=r.getObjectByName(hi),t=Wi(i);if(e&&t){r.remove(e);return}if(e||t)return;let n=new Ui().create();n.rotation.copy(i.rotation),r.add(n)},[r,i]),f=(0,t.useCallback)(()=>{let e=r.getObjectByName(hi);e&&r.remove(e)},[r]),p=(0,t.useCallback)(Fi(t=>{if(!o.current||!e)return;Ii(t,e,u);let n=Li(u,i,r,l),a=Ri(n);a!=null&&a.userData.gizmoCube?a.userData.gizmoCube.highlightObject(a):r.traverse(e=>{e.userData.gizmoCube&&e.userData.gizmoCube.highlightObject(null)}),n.length>0?d():f()},1e3/Gi),[o,e,i,r,l,u,d,f]),m=(0,t.useCallback)(e=>{s.current=Date.now(),c.current={x:e.clientX,y:e.clientY}},[]),h=(0,t.useCallback)(e=>{var t;let r=e.name===_i?1:-1,a=90*Math.PI/180,s=new n.Vector3(0,0,0),c=r*a,l=new n.Matrix4;l.makeRotationZ(c),i.up.applyMatrix4(l),i.lookAt(s),(t=o.current)==null||t.gizmoControls.update()},[i,o]);return{onMouseDown:m,onMouseMove:p,onMouseUp:(0,t.useCallback)(t=>{if((s.current?Date.now()-s.current:0)<Ki){Ii(t,e,u);let n=zi(u,i,r,l);n!=null&&n.name&&yi.includes(n.name)?h(n):Bi(n,a)}s.current=null,c.current=null},[h,a,e,i,r,l,u]),onMouseLeave:f}}var Ji=({camera:e,controls:i,className:a,render:o,options:s})=>{let c=(0,t.useRef)(null),l=(0,t.useRef)(new n.Scene).current,[u]=(0,t.useState)(()=>Oi()),d=(0,t.useRef)(new n.PerspectiveCamera(30,1,.1,10)).current,f=(0,t.useRef)(null),p=(0,t.useCallback)(()=>{u&&(o(),u.render(l,d))},[o,u,l,d]),{onMouseDown:m,onMouseMove:h,onMouseUp:g,onMouseLeave:_}=qi({gizmoRenderer:u,gizmoScene:l,gizmoCamera:d,alignCameraWithVector:(0,t.useCallback)(t=>{if(!e||!i)return;let r=e.position.length(),a=t.clone().multiplyScalar(r),o=new n.Matrix4;o.lookAt(a,new n.Vector3(0,0,0),new n.Vector3(0,1,0));let s=new n.Quaternion;s.setFromRotationMatrix(o),e.quaternion.copy(s),Kr(e,i,e.position.clone(),a,400,p),e.up.set(0,1,0),e.lookAt(new n.Vector3(0,0,0)),i.target.set(0,0,0),i.update()},[e,i,p,l]),gizmoControlRef:f});return(0,t.useEffect)(()=>{let t=c.current;if(!(!t||!e||!i||!u))return f.current&&f.current.dispose(),f.current=new Pi({gizmoParams:{gizmoDiv:t,gizmoScene:l,gizmoRenderer:u,gizmoCamera:d},mainParams:{mainCamera:e,mainControls:i,renderGizmo:p},syncFunctions:{syncGizmoCameraWithMain:Ti,syncMainCameraWithGizmo:Ei},options:s}),t.addEventListener(`mousedown`,m),t.addEventListener(`mousemove`,h),t.addEventListener(`mouseup`,g),t.addEventListener(`mouseleave`,_),()=>{f.current&&=(f.current.dispose(),null),t.removeEventListener(`mousedown`,m),t.removeEventListener(`mousemove`,h),t.removeEventListener(`mouseup`,g),t.removeEventListener(`mouseleave`,_)}},[e,i,p,h,m,g]),(0,t.useEffect)(()=>{e&&(Ti(d,e,l),p())},[e,p]),(0,r.jsx)(`div`,{className:a?`${a}`:`gizmo-default`,ref:c})},Yi=10,Xi=e=>({top:e.startsWith(`top`)?Yi:`auto`,bottom:e.startsWith(`bottom`)?Yi:`auto`,left:e.endsWith(`left`)?Yi:`auto`,right:e.endsWith(`right`)?Yi:`auto`}),Zi=({camera:e,controls:t,render:n,placement:i=`top-right`,size:a=128})=>{if(!e||!t)return null;let o=t;return(0,r.jsx)(`div`,{className:`viewer-gizmo-container`,style:{position:`absolute`,width:a,height:a,zIndex:10,...Xi(i)},children:(0,r.jsx)(Ji,{camera:e,controls:o,render:n})})},Qi=class extends t.Component{constructor(e){super(e),this.reset=()=>{this.setState({hasError:!1,error:null})},this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){console.error(`ViewerErrorBoundary caught error:`,e,t)}render(){return this.state.hasError?this.props.fallback?this.props.fallback:(0,r.jsx)(`div`,{style:{width:`100%`,height:`100%`,display:`flex`,alignItems:`center`,justifyContent:`center`,backgroundColor:`#f0f0f0`,color:`#333`,fontFamily:`sans-serif`,padding:`20px`,textAlign:`center`},children:(0,r.jsxs)(`div`,{children:[(0,r.jsx)(`h3`,{children:`Error Loading 3D Viewer`}),(0,r.jsx)(`p`,{children:this.state.error?.message||`An unexpected error occurred`}),(0,r.jsx)(`button`,{type:`button`,onClick:this.reset,children:`Try again`})]})}):this.props.children}},$i=`(prefers-reduced-motion: reduce)`,ea=()=>typeof window<`u`&&typeof window.matchMedia==`function`,ta=e=>{if(!ea())return()=>{};let t=window.matchMedia($i);return t.addEventListener(`change`,e),()=>t.removeEventListener(`change`,e)},na=()=>ea()&&window.matchMedia($i).matches;function ra({status:e,label:n,color:i,backdrop:a}){let o=(0,t.useSyncExternalStore)(ta,na,()=>!1);return(0,r.jsxs)(`div`,{"data-testid":`viewer-loading-overlay`,role:`status`,"aria-live":`polite`,"aria-busy":e===`loading`,style:{position:`absolute`,inset:0,zIndex:20,display:`flex`,flexDirection:`column`,alignItems:`center`,justifyContent:`center`,gap:12,background:a,color:i,pointerEvents:`none`,userSelect:`none`,fontFamily:`system-ui, -apple-system, Segoe UI, Roboto, sans-serif`,fontSize:14},children:[e===`loading`?(0,r.jsxs)(`svg`,{width:`44`,height:`44`,viewBox:`0 0 44 44`,"aria-hidden":`true`,children:[(0,r.jsx)(`circle`,{cx:`22`,cy:`22`,r:`18`,fill:`none`,stroke:i,strokeOpacity:`0.25`,strokeWidth:`4`}),(0,r.jsx)(`path`,{d:`M22 4 a18 18 0 0 1 18 18`,fill:`none`,stroke:i,strokeWidth:`4`,strokeLinecap:`round`,children:!o&&(0,r.jsx)(`animateTransform`,{attributeName:`transform`,type:`rotate`,from:`0 22 22`,to:`360 22 22`,dur:`0.9s`,repeatCount:`indefinite`})})]}):(0,r.jsxs)(`svg`,{width:`40`,height:`40`,viewBox:`0 0 24 24`,fill:`none`,stroke:i,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,r.jsx)(`path`,{d:`M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z`}),(0,r.jsx)(`line`,{x1:`12`,y1:`9`,x2:`12`,y2:`13`}),(0,r.jsx)(`line`,{x1:`12`,y1:`17`,x2:`12.01`,y2:`17`})]}),n&&(0,r.jsx)(`div`,{style:{opacity:.92,maxWidth:`80%`,textAlign:`center`},children:n})]})}var ia=`-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`,aa={background:`rgba(255,255,255,0.78)`,backdropFilter:`blur(16px)`,WebkitBackdropFilter:`blur(16px)`,border:`1px solid rgba(0,0,0,0.06)`,boxShadow:`0 8px 30px rgba(0,0,0,0.10)`},oa=Object.keys(Dr);function sa({active:e,onSelect:t}){return(0,r.jsx)(`div`,{"data-testid":`viewer-preset-picker`,role:`group`,"aria-label":`Visual preset`,style:{position:`absolute`,bottom:16,left:`50%`,transform:`translateX(-50%)`,zIndex:10,display:`flex`,gap:2,padding:4,borderRadius:999,maxWidth:`calc(100% - 16px)`,overflowX:`auto`,...aa},children:oa.map(n=>(0,r.jsx)(`button`,{type:`button`,"aria-pressed":n===e,onClick:()=>t(n),style:{padding:`6px 14px`,borderRadius:999,border:n===e?`1px solid #111318`:`1px solid transparent`,background:n===e?`#111318`:`transparent`,color:n===e?`#fff`:`#3f3f4a`,fontFamily:ia,fontSize:13,fontWeight:500,lineHeight:1,whiteSpace:`nowrap`,flexShrink:0,cursor:`pointer`,textTransform:`capitalize`,transition:`background 120ms ease, color 120ms ease`},children:n},n))})}var ca={enabled:!0,label:`Loading…`,color:`#ffffff`,backdrop:`rgba(15,16,20,0.6)`};function la(e){return e===void 0||e===!0?ca:e===!1?{...ca,enabled:!1}:{enabled:e.enabled??!0,label:e.label??ca.label,errorLabel:e.errorLabel,color:e.color??ca.color,backdrop:e.backdrop??ca.backdrop}}var ua=()=>new e.A(`Viewer is not ready yet`,e.k.COMPONENT_NOT_MOUNTED),da=(0,t.forwardRef)(({object:n,options:i={},preset:a,pathTraced:o,turntable:s,animations:c,children:l},u)=>{let d=(0,t.useRef)(null),{activePreset:f,pickerEnabled:p,selectPreset:m}=Ir(i.preset??a,i.ui),{viewer:h,isInitialized:g,initError:_}=Pr(d,Lr(i,f,o,s,c)),v=Rr(h,g,n),y=Br(h);Vr(h,_,i);let b=h?e.t(h.getCamera()):null,x=h?e.n(h.getControls()):null,S=h?e.i(h.getRenderer()):null,ee=(0,t.useCallback)(()=>{h?.requestRender()},[h]),te=i.helpers?.gizmo!==void 0&&i.helpers.gizmo!==!1,C=typeof i.helpers?.gizmo==`object`?i.helpers.gizmo:{},w=(0,t.useMemo)(()=>la(i.loadingIndicator),[i.loadingIndicator]),T=v.status===`error`||!!_,E=w.enabled&&(v.status===`loading`||T);return(0,t.useImperativeHandle)(u,()=>({scene:h?e.a(h.getScene()):null,camera:b,renderer:S,controls:x,events:y,loadModel:async e=>{if(!h)throw ua();let t=typeof e==`string`?e:new D(e),n=await h.loadModel(t);if(!n.ok)throw n.error},captureStill:async e=>{if(!h)throw ua();let t=await h.captureStill(e);if(!t.ok)throw t.error;return t.value},captureVideo:async e=>{if(!h)throw ua();let t=await h.captureVideo(e);if(!t.ok)throw t.error;return t.value},getAnimationNames:()=>h?.getAnimationNames()??[],playAnimations:e=>{if(!h)throw ua();let t=h.playAnimations(e);if(!t.ok)throw t.error},pauseAnimations:()=>{h?.pauseAnimations()},setEnvironmentMap:async e=>{if(!h)throw ua();let t=await h.setEnvironmentMap(e);if(!t.ok)throw t.error},resetEnvironment:()=>{if(!h)throw ua();let e=h.resetEnvironment();if(!e.ok)throw e.error},setBackgroundImage:async e=>{if(!h)throw ua();let t=await h.setBackgroundImage(e);if(!t.ok)throw t.error},setBackgroundColor:e=>{if(!h)throw ua();let t=h.setBackgroundColor(e);if(!t.ok)throw t.error},dispose:()=>{h?.dispose()}}),[h,b,S,x,y]),(0,r.jsx)(Qi,{children:(0,r.jsx)(Ur,{viewer:h,canvasRef:d,children:(0,r.jsxs)(`div`,{style:{position:`relative`,width:`100%`,height:`100%`},children:[(0,r.jsx)(Gr,{}),te&&g&&b&&x&&(0,r.jsx)(Zi,{camera:b,controls:x,render:ee,placement:C.placement,size:C.size}),E&&(0,r.jsx)(ra,{status:T?`error`:`loading`,label:T?w.errorLabel??_?.message??v.error??`Failed to load model`:w.label,color:w.color,backdrop:w.backdrop}),p&&(0,r.jsx)(sa,{active:f??`studio`,onSelect:m}),l]})})})});da.displayName=`SimpleViewer`;var fa=(0,t.forwardRef)((e,t)=>(0,r.jsx)(da,{ref:t,...e}));fa.displayName=`SimpleViewer`;var pa=()=>(0,r.jsx)(`span`,{"aria-hidden":`true`,style:{display:`block`,width:14,height:14,borderRadius:`50%`,background:`rgba(17,19,24,0.9)`,border:`2px solid rgba(255,255,255,0.95)`,boxShadow:`0 2px 8px rgba(0,0,0,0.35)`}});function ma({position:e,occlude:n=!1,children:i}){let{viewer:a}=Wr(),o=(0,t.useRef)(null),[s,c,l]=e;(0,t.useEffect)(()=>{if(!a)return;let e=o.current;if(!e)return;let t=a.createAnchorProjector();if(!t)return;let r={x:s,y:c,z:l},i=()=>{let i=t.project(r,n);if(i){if(!i.visible){e.style.visibility=`hidden`;return}e.style.visibility=`visible`,e.style.left=`${i.left}px`,e.style.top=`${i.top}px`}},u=()=>{t.invalidate(),i()};i();let d=a.getEvents(),f=[d.on(`render:complete`,i),d.on(`controls:change`,i),d.on(`model:loaded`,u)];return window.addEventListener(`resize`,u),()=>{f.forEach(e=>e()),window.removeEventListener(`resize`,u)}},[a,s,c,l,n]);let u=i!=null&&i!==!1;return(0,r.jsx)(`div`,{ref:o,"data-testid":`viewer-hotspot`,style:{position:`absolute`,left:0,top:0,transform:`translate(-50%, -50%)`,visibility:`hidden`,zIndex:5,pointerEvents:u?`auto`:`none`},children:u?i:(0,r.jsx)(pa,{})})}exports.ControlType=$n,exports.DEFAULT_SCENE=Tr,exports.DEFAULT_STUDIO_LOOK=er,exports.ErrorCode=e.k,exports.Hotspot=ma,exports.SimpleViewer=fa,exports.ThreeViewerError=e.A,exports.TypedEventEmitter=e.D,exports.VIEWER_PRESETS=Dr,exports.VIEWER_SCENES=wr,exports.defaultOptions=Cr,exports.resolvePreset=Or,exports.resolveScene=Er;
23
+ `;continue}if((u=l.match(i))&&(c.gamma=parseFloat(u[1])),(u=l.match(a))&&(c.exposure=parseFloat(u[1])),(u=l.match(o))&&(c.valid|=2,c.format=u[1]),(u=l.match(s))&&(c.valid|=4,c.height=parseInt(u[1],10),c.width=parseInt(u[2],10)),c.valid&2&&c.valid&4)break}return c.valid&2||t(3,`missing format specifier`),c.valid&4||t(3,`missing image size specifier`),c},a=function(e,n,r){let i=n;if(i<8||i>32767||e[0]!==2||e[1]!==2||e[2]&128)return new Uint8Array(e);i!==(e[2]<<8|e[3])&&t(3,`wrong scanline width`);let a=new Uint8Array(4*n*r);a.length||t(4,`unable to allocate buffer space`);let o=0,s=0,c=4*i,l=new Uint8Array(4),u=new Uint8Array(c),d=r;for(;d>0&&s<e.byteLength;){s+4>e.byteLength&&t(1),l[0]=e[s++],l[1]=e[s++],l[2]=e[s++],l[3]=e[s++],(l[0]!=2||l[1]!=2||(l[2]<<8|l[3])!=i)&&t(3,`bad rgbe scanline format`);let n=0,r;for(;n<c&&s<e.byteLength;){r=e[s++];let i=r>128;if(i&&(r-=128),(r===0||n+r>c)&&t(3,`bad scanline data`),i){let t=e[s++];for(let e=0;e<r;e++)u[n++]=t}else u.set(e.subarray(s,s+r),n),n+=r,s+=r}let f=i;for(let e=0;e<f;e++){let t=0;a[o]=u[e+t],t+=i,a[o+1]=u[e+t],t+=i,a[o+2]=u[e+t],t+=i,a[o+3]=u[e+t],o+=4}d--}return a},o=function(e,t,n,r){let i=2**(e[t+3]-128)/255;n[r+0]=e[t+0]*i,n[r+1]=e[t+1]*i,n[r+2]=e[t+2]*i,n[r+3]=1},s=function(e,t,r,i){let a=2**(e[t+3]-128)/255;r[i+0]=n.DataUtils.toHalfFloat(Math.min(e[t+0]*a,65504)),r[i+1]=n.DataUtils.toHalfFloat(Math.min(e[t+1]*a,65504)),r[i+2]=n.DataUtils.toHalfFloat(Math.min(e[t+2]*a,65504)),r[i+3]=n.DataUtils.toHalfFloat(1)},c=new Uint8Array(e);c.pos=0;let l=i(c),u=l.width,d=l.height,f=a(c.subarray(c.pos),u,d),p,m,h;switch(this.type){case n.FloatType:h=f.length/4;let e=new Float32Array(h*4);for(let t=0;t<h;t++)o(f,t*4,e,t*4);p=e,m=n.FloatType;break;case n.HalfFloatType:h=f.length/4;let t=new Uint16Array(h*4);for(let e=0;e<h;e++)s(f,e*4,t,e*4);p=t,m=n.HalfFloatType;break;default:throw Error(`THREE.HDRLoader: Unsupported type: `+this.type)}return{width:u,height:d,data:p,header:l.string,gamma:l.gamma,exposure:l.exposure,type:m,colorSpace:n.LinearSRGBColorSpace,minFilter:n.LinearFilter,magFilter:n.LinearFilter,generateMipmaps:!1,flipY:!0}}setDataType(e){return this.type=e,this}},Gn=class extends Wn{constructor(e){console.warn(`RGBELoader has been deprecated. Please use HDRLoader instead.`),super(e)}},Kn=class extends n.Scene{constructor(){super(),this.name=`RoomEnvironment`,this.position.y=-3.5;let e=new n.BoxGeometry;e.deleteAttribute(`uv`);let t=new n.MeshStandardMaterial({side:n.BackSide}),r=new n.MeshStandardMaterial,i=new n.PointLight(16777215,900,28,2);i.position.set(.418,16.199,.3),this.add(i);let a=new n.Mesh(e,t);a.position.set(-.757,13.219,.717),a.scale.set(31.713,28.305,28.591),this.add(a);let o=new n.InstancedMesh(e,r,6),s=new n.Object3D;s.position.set(-10.906,2.009,1.846),s.rotation.set(0,-.195,0),s.scale.set(2.328,7.905,4.651),s.updateMatrix(),o.setMatrixAt(0,s.matrix),s.position.set(-5.607,-.754,-.758),s.rotation.set(0,.994,0),s.scale.set(1.97,1.534,3.955),s.updateMatrix(),o.setMatrixAt(1,s.matrix),s.position.set(6.167,.857,7.803),s.rotation.set(0,.561,0),s.scale.set(3.927,6.285,3.687),s.updateMatrix(),o.setMatrixAt(2,s.matrix),s.position.set(-2.017,.018,6.124),s.rotation.set(0,.333,0),s.scale.set(2.002,4.566,2.064),s.updateMatrix(),o.setMatrixAt(3,s.matrix),s.position.set(2.291,-.756,-2.621),s.rotation.set(0,-.286,0),s.scale.set(1.546,1.552,1.496),s.updateMatrix(),o.setMatrixAt(4,s.matrix),s.position.set(-2.193,-.369,-5.547),s.rotation.set(0,.516,0),s.scale.set(3.875,3.487,2.986),s.updateMatrix(),o.setMatrixAt(5,s.matrix),this.add(o);let c=new n.Mesh(e,qn(50));c.position.set(-16.116,14.37,8.208),c.scale.set(.1,2.428,2.739),this.add(c);let l=new n.Mesh(e,qn(50));l.position.set(-16.109,18.021,-8.207),l.scale.set(.1,2.425,2.751),this.add(l);let u=new n.Mesh(e,qn(17));u.position.set(14.904,12.198,-1.832),u.scale.set(.15,4.265,6.331),this.add(u);let d=new n.Mesh(e,qn(43));d.position.set(-.462,8.89,14.52),d.scale.set(4.38,5.441,.088),this.add(d);let f=new n.Mesh(e,qn(20));f.position.set(3.235,11.486,-12.541),f.scale.set(2.5,2,.1),this.add(f);let p=new n.Mesh(e,qn(100));p.position.set(0,20,0),p.scale.set(1,.1,1),this.add(p)}dispose(){let e=new Set;this.traverse(t=>{t.isMesh&&(e.add(t.geometry),e.add(t.material))});for(let t of e)t.dispose()}};function qn(e){return new n.MeshLambertMaterial({color:0,emissive:16777215,emissiveIntensity:e})}var Jn=.42,Yn=1.15,Xn=.7,Zn=1;function Qn(e){e.traverse(e=>{let t=e;if(t.isPointLight){t.intensity*=Xn;return}let n=e;if(!n.isMesh)return;let r=Array.isArray(n.material)?n.material:[n.material];for(let e of r){if(!e)continue;let t=e;(t.emissiveIntensity??0)>Zn?t.emissiveIntensity*=Yn:t.color&&t.color.multiplyScalar(Jn)}})}var $n=function(e){return e.MapControls=`MapControls`,e.OrbitControls=`OrbitControls`,e}({}),er=`crisp`,tr=256,nr=.1,rr=100,ir=class{constructor(){this.pmremGenerator=null,this.threeRenderer=null,this.loadedTextures=new Map,this.renderTargets=[],this.studioBakes=new Map,this.originalByPmrem=new WeakMap,this.disposed=!1}async initialize(t){try{let r=t.renderer,i=r.renderer||r.getThreeRenderer?.();return i?(this.threeRenderer=i,this.pmremGenerator=new n.PMREMGenerator(i),this.pmremGenerator.compileEquirectangularShader(),e.O.ok(void 0)):e.O.err(new e.A(`Could not access Three.js renderer`,e.k.INITIALIZATION_FAILED))}catch(t){return e.O.err(new e.A(`Failed to initialize environment service`,e.k.INITIALIZATION_FAILED,{originalError:t}))}}async loadEnvironmentMap(t){try{let r=this.loadedTextures.get(t);if(r)return e.O.ok(new ar(r));let i=t.split(`.`).pop()?.toLowerCase(),a;switch(i){case`hdr`:a=new Gn;break;case`exr`:a=new Un;break;case`jpg`:case`jpeg`:case`png`:a=new n.TextureLoader;break;default:return e.O.err(new e.A(`Unsupported environment map format: ${i}`,e.k.UNSUPPORTED_FORMAT,{url:t,extension:i}))}let o=await new Promise((e,n)=>{a.load(t,t=>{e(t)},void 0,e=>n(e))});if(this.disposed)return o.dispose(),e.O.err(new e.A(`Environment service was disposed during the load`,e.k.INVALID_STATE,{url:t}));if(this.pmremGenerator){o.mapping=n.EquirectangularReflectionMapping;let r=this.pmremGenerator.fromEquirectangular(o);this.renderTargets.push(r);let i=r.texture;return this.loadedTextures.set(t,i),this.loadedTextures.set(t+`_original`,o),this.originalByPmrem.set(i,o),e.O.ok(new ar(i))}return this.loadedTextures.set(t,o),e.O.ok(new ar(o))}catch(n){return e.O.err(new e.A(`Failed to load environment map`,e.k.TEXTURE_LOAD_FAILED,{url:t,originalError:n}))}}applyToScene(t,r,i){try{let a=e.a(t);if(!a)return e.O.err(new e.A(`Scene must be ThreeSceneAdapter`,e.k.INVALID_PARAMETER));let o=e.o(r);if(!o)return e.O.err(new e.A(`Texture must be ThreeTextureAdapter`,e.k.INVALID_PARAMETER));a.environment=o,i&&(i.backgroundBlurriness!==void 0&&(a.backgroundBlurriness=i.backgroundBlurriness),i.backgroundIntensity!==void 0&&(a.backgroundIntensity=i.backgroundIntensity),i.environmentIntensity!==void 0&&(a.environmentIntensity=i.environmentIntensity));let s=this.originalByPmrem.get(o);return o.mapping===n.CubeUVReflectionMapping?s?a.__originalEnvironmentTexture=s:delete a.__originalEnvironmentTexture:o.mapping===n.EquirectangularReflectionMapping&&(a.__originalEnvironmentTexture=o),(i?.setBackground??!0)&&(O(a),o.mapping===n.CubeUVReflectionMapping&&s?.mapping===n.EquirectangularReflectionMapping?a.background=s:a.background=o),e.O.ok(void 0)}catch(t){return e.O.err(new e.A(`Failed to apply environment to scene`,e.k.SCENE_OPERATION_FAILED,{originalError:t}))}}getOriginalEnvironmentTexture(e){let t=this.loadedTextures.get(e+`_original`);return t?new ar(t):null}async setBackgroundImage(t,r){try{let i=e.a(t);if(!i)return e.O.err(new e.A(`Scene must be ThreeSceneAdapter`,e.k.INVALID_PARAMETER));let a=await this.loadBackgroundTexture(r);return a.colorSpace=n.SRGBColorSpace,a.needsUpdate=!0,re(a),O(i),i.background=a,e.O.ok(void 0)}catch(t){return e.O.err(new e.A(`Failed to set background image`,e.k.TEXTURE_LOAD_FAILED,{originalError:t}))}}loadBackgroundTexture(e){if(typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement){let t=new n.Texture(e);return t.needsUpdate=!0,Promise.resolve(t)}let t=typeof File<`u`&&e instanceof File?URL.createObjectURL(e):null,r=t??e;return new Promise((e,i)=>{new n.TextureLoader().load(r,n=>{t&&URL.revokeObjectURL(t),e(n)},void 0,e=>{t&&URL.revokeObjectURL(t),i(e)})})}createStudioEnvironment(t=er){try{if(!this.pmremGenerator)return e.O.err(new e.A(`Environment service not initialized`,e.k.INITIALIZATION_FAILED));let n=this.studioBakes.get(t);if(n)return e.O.ok(new ar(n.pmremTexture));let r=new Kn;t!==`soft`&&Qn(r);let i=this.pmremGenerator.fromScene(r);this.renderTargets.push(i);let a=i.texture;return this.captureStudioCubeOriginal(t,r,a),this.studioBakes.has(t)||this.studioBakes.set(t,{pmremTexture:a,cubeTarget:null}),r.dispose(),e.O.ok(new ar(a))}catch(t){return e.O.err(new e.A(`Failed to create studio environment`,e.k.TEXTURE_LOAD_FAILED,{originalError:t}))}}captureStudioCubeOriginal(e,t,r){if(this.threeRenderer)try{let i=new n.WebGLCubeRenderTarget(tr,{type:n.HalfFloatType}),a=new n.CubeCamera(nr,rr,i),o=this.threeRenderer.toneMapping;this.threeRenderer.toneMapping=n.NoToneMapping;try{a.update(this.threeRenderer,t)}finally{this.threeRenderer.toneMapping=o}this.studioBakes.set(e,{pmremTexture:r,cubeTarget:i}),this.originalByPmrem.set(r,i.texture)}catch(e){console.warn(`Failed to capture the studio environment for path tracing:`,e)}}dispose(){this.disposed=!0,this.loadedTextures.forEach(e=>e.dispose()),this.loadedTextures.clear(),this.renderTargets.forEach(e=>e.dispose()),this.renderTargets=[],this.studioBakes.forEach(e=>e.cubeTarget?.dispose()),this.studioBakes.clear(),this.pmremGenerator&&=(this.pmremGenerator.dispose(),null),this.threeRenderer=null}},ar=class{constructor(e){this.texture=e}get id(){return this.texture.uuid}get image(){return this.texture.image}get needsUpdate(){return this.texture.needsUpdate}set needsUpdate(e){this.texture.needsUpdate=e}dispose(){this.texture.dispose()}getThreeTexture(){return this.texture}},or=class{constructor(e){this.object=e,this.boundingBox=new n.Box3().setFromObject(this.object)}alignToFloor(){let e=this.calculateFloorOffset();this.applyOffset(e)}calculateFloorOffset(){let e=this.boundingBox.min.y,t=this.boundingBox.max.y-e,r=new n.Vector3;return t>0?r.y=-e:r.y=0,r}applyOffset(e){this.object.position.add(e)}},sr=class{alignToFloor(t){try{let r=null;return`getThreeObject`in t&&typeof t.getThreeObject==`function`?r=t.getThreeObject():t instanceof n.Object3D&&(r=t),r?(new or(r).alignToFloor(),e.O.ok(void 0)):e.O.err(new e.A(`Could not get Three.js object for floor alignment`,e.k.INVALID_PARAMETER))}catch(t){return e.O.err(new e.A(`Failed to align object to floor`,e.k.OPERATION_FAILED,{originalError:t}))}}},cr={touch:10,default:5},lr=class{constructor(){this.raycaster=new n.Raycaster,this.activePointers=new Set,this.options=null,this.pending=null,this.detach=null}initialize(e){this.dispose(),this.options=e;let{canvas:t}=e,n=e=>{this.activePointers.add(e.pointerId);try{t.setPointerCapture(e.pointerId)}catch{}if(this.activePointers.size>1||e.button!==0){this.pending=null;return}this.pending={pointerId:e.pointerId,x:e.clientX,y:e.clientY,threshold:e.pointerType===`touch`?cr.touch:cr.default}},r=e=>{this.activePointers.delete(e.pointerId);let t=this.pending;!t||t.pointerId!==e.pointerId||(this.pending=null,!(Math.hypot(e.clientX-t.x,e.clientY-t.y)>t.threshold)&&this.pick(e.clientX,e.clientY))},i=e=>{this.activePointers.delete(e.pointerId),this.pending=null};t.addEventListener(`pointerdown`,n),t.addEventListener(`pointerup`,r),t.addEventListener(`pointercancel`,i),this.detach=()=>{t.removeEventListener(`pointerdown`,n),t.removeEventListener(`pointerup`,r),t.removeEventListener(`pointercancel`,i)}}pick(t,r){if(!this.options)return;let{canvas:i,camera:a,getPickRoot:o,onPick:s}=this.options,c=e.r(o()),l=e.t(a);if(!c||!l){s(null);return}let u=i.getBoundingClientRect();if(u.width===0||u.height===0){s(null);return}let d=new n.Vector2((t-u.left)/u.width*2-1,-((r-u.top)/u.height)*2+1);(this.options.bvh??!0)&&e.h(c),this.raycaster.setFromCamera(d,l),this.raycaster.firstHitOnly=!0;let f=this.raycaster.intersectObject(c,!0)[0];if(!f){s(null);return}s({object:new D(f.object),point:{x:f.point.x,y:f.point.y,z:f.point.z}})}dispose(){this.detach?.(),this.detach=null,this.options=null,this.pending=null,this.activePointers.clear()}},ur=.001,dr={visible:!1},fr=class{constructor(e){this.sources=e,this.anchor=new n.Vector3,this.projected=new n.Vector3,this.cameraPosition=new n.Vector3,this.toAnchor=new n.Vector3,this.raycaster=new n.Raycaster,this.lastCameraMatrix=new n.Matrix4,this.lastWidth=-1,this.lastHeight=-1,this.hasProjected=!1}invalidate(){this.hasProjected=!1}project(t,n){let r=e.t(this.sources.camera),i=this.sources.getCanvas();if(!r||!i)return null;let a=i.clientWidth||i.width,o=i.clientHeight||i.height;return this.hasProjected&&a===this.lastWidth&&o===this.lastHeight&&this.lastCameraMatrix.equals(r.matrixWorld)?null:(this.lastCameraMatrix.copy(r.matrixWorld),this.lastWidth=a,this.lastHeight=o,this.hasProjected=!0,this.anchor.set(t.x,t.y,t.z),r.getWorldPosition(this.cameraPosition),this.projected.copy(this.anchor).applyMatrix4(r.matrixWorldInverse),this.projected.z>=0||n&&this.isOccluded(r)?dr:(this.projected.copy(this.anchor).project(r),{visible:!0,left:(this.projected.x+1)/2*a,top:(1-this.projected.y)/2*o}))}isOccluded(t){let n=e.r(this.sources.getModel());if(!n)return!1;this.toAnchor.copy(this.anchor).sub(this.cameraPosition);let r=this.toAnchor.length();this.raycaster.set(this.cameraPosition,this.toAnchor.normalize()),this.raycaster.camera=t,this.raycaster.firstHitOnly=!0;let i=this.raycaster.intersectObject(n,!0)[0];return!!(i&&i.distance<r-ur)}},pr=class{createProjector(e){return new fr(e)}},mr=class{constructor(){this.mixer=null,this.clips=[],this.activeActions=[],this.playing=!1,this.speed=1}attach(t){this.detach();let r=e.r(t);if(!r)return;let i=hr(r);i&&(this.clips=i.animations,this.mixer=new n.AnimationMixer(i),this.mixer.timeScale=this.speed)}getClipNames(){return this.clips.map(e=>e.name)}play(t){if(t!==void 0){if(this.clips.length===0)return e.O.err(new e.A(`Cannot play animation clip '${t}': no animation clips are attached`,e.k.INVALID_STATE));if(!this.clips.some(e=>e.name===t)){let n=this.clips.map(e=>e.name);return e.O.err(new e.A(`Unknown animation clip '${t}'. Available clips: ${n.join(`, `)}`,e.k.INVALID_PARAMETER))}}if(!this.mixer)return e.O.ok(void 0);if(!this.playing&&this.activeActions.length>0&&t===void 0)return this.playing=!0,e.O.ok(void 0);let n=t?this.clips.filter(e=>e.name===t):this.clips;if(n.length===0)return e.O.ok(void 0);let r=this.mixer;return r.stopAllAction(),this.activeActions=n.map(e=>{let t=r.clipAction(e);return t.play(),t}),this.playing=!0,e.O.ok(void 0)}pause(){this.playing=!1}isPlaying(){return this.playing}setSpeed(e){this.speed=e,this.mixer&&(this.mixer.timeScale=e)}update(e){this.playing&&this.mixer&&this.mixer.update(e)}detach(){this.mixer&&(this.mixer.stopAllAction(),this.mixer.uncacheRoot(this.mixer.getRoot())),this.mixer=null,this.clips=[],this.activeActions=[],this.playing=!1}};function hr(e){let t=null;return e.traverse(e=>{!t&&(e.animations?.length??0)>0&&(t=e)}),t}var gr=class{static createViewer(e,t){i(t.units);let n=new ve(e),r=new k,a=this.createCamera(t),o=this.createControls(a.getThreeCamera(),e,t),s=new _r().createDefaultLoader({renderer:n.getThreeRenderer()??void 0,bvh:t.selection?.bvh,...t.loaders}),c=new pn,l=new ir,u=new mn,d=new sr,f=new lr,p=new pr,m=new mr,h=le.convertRendererOptions(t.renderer||{});return h.preserveDrawingBuffer=!0,new w({renderer:n,scene:r,camera:a,controls:o,modelLoader:s,options:t,rendererOptions:h,sceneSetupService:c,environmentService:l,pathTracingService:u,floorAlignmentService:d,selectionService:f,anchorProjectionService:p,animationService:m})}static createCamera(e){let t=e.camera||{},n=t.fov||t.cameraFov||30,r=t.near||t.cameraNear||.1,i=t.far||t.cameraFar||1e5,a=t.position||t.cameraPosition,o=t.target||t.cameraTarget,s=se.create(n,1,r,i);return a&&s.position.set(a[0],a[1],a[2]),o&&s.lookAt({x:o[0],y:o[1],z:o[2],set:()=>{},copy:()=>{},add:()=>{},multiply:()=>{},normalize:()=>{},length:()=>0}),s}static createControls(e,t,n){let r=n.controls||{},i=r.type||$n.OrbitControls,a;a=i===$n.MapControls?new Ut(e,t):new Ht(e,t),a.enabled=r.enabled??!0,a.enableDamping=r.enableDamping??!0,a.dampingFactor=r.dampingFactor??.25,a.enableZoom=r.enableZoom??!0,a.enableRotate=r.enableRotate??!0,a.enablePan=r.enablePan??!0,a.autoRotate=r.autoRotate??!1,r.autoRotateSpeed!==void 0&&(a.autoRotateSpeed=r.autoRotateSpeed),r.minDistance!==void 0&&(a.minDistance=r.minDistance),r.maxDistance!==void 0&&(a.maxDistance=r.maxDistance),r.minPolarAngle!==void 0&&(a.minPolarAngle=r.minPolarAngle),r.maxPolarAngle!==void 0&&(a.maxPolarAngle=r.maxPolarAngle);let o=n.camera||{},s=o.target||o.cameraTarget;return s&&a.target&&(a.target.set(s[0],s[1],s[2]),a.update()),a}},_r=class extends ht{createDefaultLoader(e={}){return ht.createLoader(`model.glb`,e)}},vr=[`toneMappingExposure`,`bloom`,`vignette`,`filmGrain`,`colorGrade`],yr=[`environmentIntensity`],br=[`autoRotate`,`autoRotateSpeed`],xr=[`enabled`];function Sr(e){let t={backgroundColor:e.backgroundColor,backgroundColorEdge:e.backgroundColorEdge};return t.renderer={bloom:e.renderer?.bloom??!1,vignette:e.renderer?.vignette??!1,filmGrain:e.renderer?.filmGrain??!1,colorGrade:e.renderer?.colorGrade??!1},e.renderer?.toneMappingExposure!==void 0&&(t.renderer.toneMappingExposure=e.renderer.toneMappingExposure),e.environment?.environmentIntensity!==void 0&&(t.environment={environmentIntensity:e.environment.environmentIntensity}),(e.controls?.autoRotate!==void 0||e.controls?.autoRotateSpeed!==void 0)&&(t.controls={autoRotate:e.controls?.autoRotate,autoRotateSpeed:e.controls?.autoRotateSpeed}),(e.animations?.autoplay!==void 0||e.animations?.speed!==void 0)&&(t.animations={autoplay:e.animations?.autoplay,speed:e.animations?.speed}),e.pathTracing?.enabled!==void 0&&(t.pathTracing={enabled:e.pathTracing.enabled}),t}var Cr={staticScene:!1,backgroundColor:`#f0f0f7`,replaceWithScreenshotOnComplete:!1,units:`meters`,floorAlignment:!0,pathTracing:{enabled:!1,maxSamples:1024,bounces:16,transmissiveBounces:4,renderScale:.8,lowResScale:.25,dynamicLowRes:!0},camera:{position:[60,60,60],target:[0,0,0],fov:30,near:.1,far:1e5,autoFitToObject:!0},environment:{backgroundIntensity:1,environmentIntensity:.5,studioLook:er},lighting:{ambientLight:{color:`#4a4a4a`,intensity:.32},hemisphereLight:{skyColor:`#fff6ec`,groundColor:`#3c3630`,intensity:.3},directionalLight:{color:`#fff8f2`,intensity:2.4,position:[40,90,40],castShadow:!0,shadow:{mapSize:{width:4096,height:4096},camera:{near:.5,far:200,left:-50,right:50,top:50,bottom:-50},bias:-1e-4,radius:14}},fillLight:{color:`#eef2ff`,intensity:.6,position:[-55,28,34]},rimLight:{color:`#f2f6ff`,intensity:2.6,position:[18,52,-72]}},renderer:{antialias:!0,alpha:!1,shadowMapEnabled:!0,pixelRatio:typeof window<`u`?window.devicePixelRatio:1,shadowMapType:1,toneMapping:7,toneMappingExposure:1.15},controls:{type:$n.OrbitControls,enabled:!0,enableDamping:!0,dampingFactor:.25,enableZoom:!0,enableRotate:!0,enablePan:!0,maxPolarAngle:Math.PI/2},helpers:{grid:{type:`shadow_floor`,size:20,divisions:20,colorGrid:`#a8a8a2`,opacity:.5,styleOptions:{tileSize:.1173,metalness:0,roughness:.9,transmission:0}},axes:!1,stats:!1,gizmo:!1,studioEnvironment:!0,darkStudioMode:!1}},wr={studio_dome:{helpers:{grid:{type:`shadow_floor`},studioEnvironment:!0},environment:{studioLook:`crisp`}},studio_soft:{helpers:{grid:{type:`shadow_floor`},studioEnvironment:!0},environment:{studioLook:`soft`},lighting:{ambientLight:{intensity:.55},hemisphereLight:{intensity:.6},directionalLight:{intensity:1.4,shadow:{radius:26}},fillLight:{intensity:1.2},rimLight:{intensity:.7}}}},Tr=`studio_dome`;function Er(e){return e?wr[e]??{}:{}}var Dr={studio:{backgroundColor:`#f0f0f7`,renderer:{toneMappingExposure:1.15},environment:{environmentIntensity:.5}},product:{backgroundColor:`#ffffff`,renderer:{toneMappingExposure:1.2},environment:{environmentIntensity:.55}},neutral:{backgroundColor:`#d9d9de`,renderer:{toneMappingExposure:1.1},environment:{environmentIntensity:.45}},dark:{backgroundColor:`#242430`,backgroundColorEdge:`#050507`,renderer:{toneMappingExposure:1.3},environment:{environmentIntensity:.42}},outdoor:{backgroundColor:`#bcd4e6`,renderer:{toneMappingExposure:1.2},environment:{environmentIntensity:.6}}};function Or(e){return e?Dr[e]??{}:{}}function kr(e,t){return d(d(d(e,Er(t.scene)),Or(t.preset)),t)}var Ar=(e,...t)=>{if(!e)return;let n={...e};for(let e of t)delete n[e];return Object.keys(n).length>0?n:void 0};function jr(e){let n=(0,t.useMemo)(()=>JSON.stringify({pathTracing:Ar(e.pathTracing,...xr),staticScene:e.staticScene,renderer:Ar(e.renderer,...vr),camera:e.camera,controls:Ar(e.controls,...br),environment:Ar(e.environment,...yr),scene:e.scene??`studio_dome`,lighting:e.lighting,helpers:Ar(e.helpers,`gizmo`),rendering:e.rendering,replaceWithScreenshotOnComplete:e.replaceWithScreenshotOnComplete,loaders:e.loaders,units:e.units??`meters`,floorAlignment:e.floorAlignment??!0,selectionBvh:e.selection?.bvh!==!1}),[e.pathTracing,e.staticScene,e.renderer,e.camera,e.controls,e.environment,e.scene,e.lighting,e.helpers,e.rendering,e.replaceWithScreenshotOnComplete,e.loaders,e.units,e.floorAlignment,e.selection]),r=(0,t.useMemo)(()=>{let t=kr(Cr,e);return JSON.stringify(Sr(t))},[e.preset,e.backgroundColor,e.backgroundColorEdge,e.renderer,e.environment,e.controls,e.animations,e.pathTracing]);return{options:(0,t.useMemo)(()=>e,[n,r]),structuralKey:n,runtimeKey:r}}var Mr=`200px`;function Nr(e,n){let[r,i]=(0,t.useState)(!n);return(0,t.useEffect)(()=>{if(r)return;if(!n){i(!0);return}let t=e.current;if(!t||typeof IntersectionObserver>`u`){i(!0);return}let a=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&i(!0)},{rootMargin:Mr});return a.observe(t),()=>a.disconnect()},[e,n,r]),r}function Pr(e,n){let r=(0,t.useRef)(null),i=(0,t.useRef)({width:0,height:0}),[a,o]=(0,t.useState)(null),s=a!==null,[c,l]=(0,t.useState)(null),{options:u,structuralKey:d,runtimeKey:f}=jr(n),p=Nr(e,(n.loading??`eager`)===`lazy`);return(0,t.useEffect)(()=>{if(!p||!e.current||r.current)return;l(null);let t=kr(Cr,u),n;try{n=gr.createViewer(e.current,t)}catch(e){console.error(`Failed to create viewer:`,e),l(e instanceof Error?e:Error(String(e)));return}r.current=n,i.current={width:0,height:0};let a=!1;return n.initialize().then(e=>{a||(e.ok?o(n):(console.error(`Failed to initialize viewer:`,e.error),l(e.error)))}),()=>{a=!0,n.dispose(),r.current=null,o(null)}},[e,d,p]),(0,t.useEffect)(()=>{if(!a)return;let e=kr(Cr,u);a.updateOptions(Sr(e))},[f,a]),(0,t.useEffect)(()=>{if(!r.current||!e.current)return;let t=null,n=n=>{if(e.current&&r.current){let{clientWidth:a,clientHeight:o}=e.current.parentElement||e.current;if(n&&n[0]){let{width:e,height:t}=n[0].contentRect;a=Math.floor(e),o=Math.floor(t)}if(i.current.width===a&&i.current.height===o)return;t!==null&&cancelAnimationFrame(t),t=requestAnimationFrame(()=>{r.current&&e.current&&(r.current.resize(a,o),i.current={width:a,height:o})})}};n();let a=()=>n();window.addEventListener(`resize`,a);let o=null;return typeof ResizeObserver<`u`&&e.current.parentElement&&(o=new ResizeObserver(n),o.observe(e.current.parentElement)),()=>{window.removeEventListener(`resize`,a),o?.disconnect(),t!==null&&cancelAnimationFrame(t)}},[a,e]),{viewer:a,isInitialized:s,initError:c}}function Fr(e,n){let r=(0,t.useRef)(n);r.current=n,(0,t.useEffect)(()=>{if(!e)return;let t=e.getEvents(),i=[],a=e=>{let n=t=>{r.current[e]?.(t)};return t.on(e,n),()=>t.off(e,n)};return Object.keys(n).forEach(e=>{n[e]&&i.push(a(e))}),()=>{i.forEach(e=>e())}},[e])}function Ir(e,n){let[r,i]=(0,t.useState)(null),a=(0,t.useRef)(new Set);(0,t.useEffect)(()=>{if(e!==void 0&&a.current.has(e)){a.current.delete(e),i(t=>t===e?null:t);return}a.current.clear(),i(null)},[e]);let o=!!n?.presets;(0,t.useEffect)(()=>{o||(a.current.clear(),i(null))},[o]);let s=n?.onPresetChange,c=(0,t.useCallback)(e=>{i(e),s&&(a.current.add(e),s(e))},[s]);return{activePreset:r??e,pickerEnabled:o,selectPreset:c}}function Lr(e,n,r,i,a){return(0,t.useMemo)(()=>{let t=e.preset!==n,o=r===!0&&e.pathTracing?.enabled===void 0,s=i!==void 0&&e.controls?.autoRotate===void 0,c=a!==void 0&&e.animations?.autoplay===void 0;return!t&&!o&&!s&&!c?e:{...e,...t?{preset:n}:{},...o?{pathTracing:{...e.pathTracing,enabled:!0}}:{},...s?{controls:{...e.controls,autoRotate:i}}:{},...c?{animations:{...e.animations,autoplay:a}}:{}}},[e,n,r,i,a])}function Rr(e,n,r){let i=(0,t.useMemo)(()=>{if(typeof r==`string`)return r;if(r)return`object-${r.uuid||`no-uuid`}`},[r]),[a,o]=(0,t.useState)(()=>({status:r?`loading`:`idle`}));return(0,t.useEffect)(()=>{o({status:r?`loading`:`idle`})},[i]),(0,t.useEffect)(()=>{if(!e||!n||!r||e.isDisposed())return;let t=!0,i=typeof r==`string`?r:new D(r);return e.loadModel(i).then(n=>{!t||e.isDisposed()||(n.ok?o({status:`loaded`}):(o({status:`error`,error:n.error.message}),console.error(`Failed to load model:`,n.error)))}),()=>{t=!1}},[e,n,i]),a}var zr=class{static toThreeObject(t){let r=e.r(t);if(r)return r;let i=new n.Object3D;return i.position.set(t.position.x,t.position.y,t.position.z),i.rotation.set(t.rotation.x,t.rotation.y,t.rotation.z),i.scale.set(t.scale.x,t.scale.y,t.scale.z),i}static toThreeCamera(t){return e.t(t)??new n.PerspectiveCamera}static toThreeControls(t){return e.n(t)??t}static convertModelLoaded(e){return{model:this.toThreeObject(e.model),loadTime:e.loadTime}}static convertControlsChange(e){return{type:e.type,camera:e.camera?this.toThreeCamera(e.camera):void 0,controls:e.controls?this.toThreeControls(e.controls):void 0}}static convertObjectSelected(e){return{object:this.toThreeObject(e.object),point:e.point}}static convertInitialized(e,t){return{viewer:t}}static convertDisposed(e,t){return{viewer:t}}};function Br(n){let r=(0,t.useRef)(new e.D);return Fr(n,(0,t.useMemo)(()=>({"model:loading":e=>r.current.emit(`model:loading`,e),"model:progress":e=>r.current.emit(`model:progress`,e),"model:loaded":e=>r.current.emit(`model:loaded`,zr.convertModelLoaded(e)),"model:error":e=>r.current.emit(`model:error`,e),"render:complete":e=>r.current.emit(`render:complete`,e),"controls:change":e=>r.current.emit(`controls:change`,zr.convertControlsChange(e)),"object:selected":e=>r.current.emit(`object:selected`,zr.convertObjectSelected(e)),error:e=>r.current.emit(`error`,e)}),[])),r.current}function Vr(e,n,r){let i=(0,t.useRef)(r);i.current=r,Fr(e,(0,t.useMemo)(()=>({"model:loaded":()=>i.current.onLoad?.(),"model:progress":e=>i.current.onProgress?.(Math.min(1,e.loaded/e.total)),"model:error":e=>i.current.onError?.(e.error)}),[]));let a=(0,t.useRef)(null);(0,t.useEffect)(()=>{if(!n){a.current=null;return}let e=i.current.onError;e&&a.current!==n&&(a.current=n,e(n))})}var Hr=(0,t.createContext)(null);function Ur({viewer:e,canvasRef:n,children:i}){let a=(0,t.useMemo)(()=>({viewer:e,canvasRef:n}),[e,n]);return(0,r.jsx)(Hr.Provider,{value:a,children:i})}function Wr(){let e=(0,t.useContext)(Hr);if(!e)throw Error(`useViewerContext must be used within ViewerProvider`);return e}function Gr(){let{canvasRef:e}=Wr();return(0,r.jsx)(`canvas`,{ref:e,style:{width:`100%`,height:`100%`,display:`block`,imageRendering:`auto`,background:`transparent`}})}(function(){"use strict";try{if(typeof document<`u`){var e=document.createElement(`style`);e.appendChild(document.createTextNode(`.gizmo-default{width:100px;height:100px;position:absolute;top:0;right:0;z-index:2;cursor:pointer}.custom-gizmo-style{width:360px;height:360px;position:absolute;top:0;right:0;z-index:2;cursor:pointer}.map-gizmo-style,.cad-gizmo-style{width:96px;height:96px;position:absolute;top:0;right:0;z-index:2;cursor:pointer}.example-container{position:relative;width:640px;height:360px;background-color:#3d5361;border-radius:6px;overflow:hidden}body{background-color:#f0f0f0;margin:0;padding:0}.content{display:flex;justify-content:center;align-items:center;flex-direction:column;height:100vh}.example-select{margin-bottom:24px}`)),document.head.appendChild(e)}}catch(e){console.error(`vite-plugin-css-injected-by-js`,e)}})();var Kr=(e,t,n,r,i,a)=>{let o=performance.now(),s=()=>{let c=performance.now()-o,l=Math.min(c/i,1);e.position.lerpVectors(n,r,l),t?.update(),a(),l<1&&requestAnimationFrame(s)};requestAnimationFrame(s)},qr={type:`change`},Jr={type:`start`},Yr={type:`end`},Xr=new n.Ray,Zr=new n.Plane,Qr=Math.cos(70*n.MathUtils.DEG2RAD),X=new n.Vector3,Z=2*Math.PI,Q={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},$r=1e-6,ei=class extends n.Controls{constructor(e,t=null){super(e,t),this.state=Q.NONE,this.target=new n.Vector3,this.cursor=new n.Vector3,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minTargetRadius=0,this.maxTargetRadius=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.05,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.keyRotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!0,this.keyPanSpeed=7,this.zoomToCursor=!1,this.autoRotate=!1,this.autoRotateSpeed=2,this.keys={LEFT:`ArrowLeft`,UP:`ArrowUp`,RIGHT:`ArrowRight`,BOTTOM:`ArrowDown`},this.mouseButtons={LEFT:n.MOUSE.ROTATE,MIDDLE:n.MOUSE.DOLLY,RIGHT:n.MOUSE.PAN},this.touches={ONE:n.TOUCH.ROTATE,TWO:n.TOUCH.DOLLY_PAN},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this._domElementKeyEvents=null,this._lastPosition=new n.Vector3,this._lastQuaternion=new n.Quaternion,this._lastTargetPosition=new n.Vector3,this._quat=new n.Quaternion().setFromUnitVectors(e.up,new n.Vector3(0,1,0)),this._quatInverse=this._quat.clone().invert(),this._spherical=new n.Spherical,this._sphericalDelta=new n.Spherical,this._scale=1,this._panOffset=new n.Vector3,this._rotateStart=new n.Vector2,this._rotateEnd=new n.Vector2,this._rotateDelta=new n.Vector2,this._panStart=new n.Vector2,this._panEnd=new n.Vector2,this._panDelta=new n.Vector2,this._dollyStart=new n.Vector2,this._dollyEnd=new n.Vector2,this._dollyDelta=new n.Vector2,this._dollyDirection=new n.Vector3,this._mouse=new n.Vector2,this._performCursorZoom=!1,this._pointers=[],this._pointerPositions={},this._controlActive=!1,this._onPointerMove=ni.bind(this),this._onPointerDown=ti.bind(this),this._onPointerUp=ri.bind(this),this._onContextMenu=ui.bind(this),this._onMouseWheel=oi.bind(this),this._onKeyDown=si.bind(this),this._onTouchStart=ci.bind(this),this._onTouchMove=li.bind(this),this._onMouseDown=ii.bind(this),this._onMouseMove=ai.bind(this),this._interceptControlDown=di.bind(this),this._interceptControlUp=fi.bind(this),this.domElement!==null&&this.connect(this.domElement),this.update()}connect(e){super.connect(e),this.domElement.addEventListener(`pointerdown`,this._onPointerDown),this.domElement.addEventListener(`pointercancel`,this._onPointerUp),this.domElement.addEventListener(`contextmenu`,this._onContextMenu),this.domElement.addEventListener(`wheel`,this._onMouseWheel,{passive:!1}),this.domElement.getRootNode().addEventListener(`keydown`,this._interceptControlDown,{passive:!0,capture:!0}),this.domElement.style.touchAction=`none`}disconnect(){this.domElement.removeEventListener(`pointerdown`,this._onPointerDown),this.domElement.removeEventListener(`pointermove`,this._onPointerMove),this.domElement.removeEventListener(`pointerup`,this._onPointerUp),this.domElement.removeEventListener(`pointercancel`,this._onPointerUp),this.domElement.removeEventListener(`wheel`,this._onMouseWheel),this.domElement.removeEventListener(`contextmenu`,this._onContextMenu),this.stopListenToKeyEvents(),this.domElement.getRootNode().removeEventListener(`keydown`,this._interceptControlDown,{capture:!0}),this.domElement.style.touchAction=`auto`}dispose(){this.disconnect()}getPolarAngle(){return this._spherical.phi}getAzimuthalAngle(){return this._spherical.theta}getDistance(){return this.object.position.distanceTo(this.target)}listenToKeyEvents(e){e.addEventListener(`keydown`,this._onKeyDown),this._domElementKeyEvents=e}stopListenToKeyEvents(){this._domElementKeyEvents!==null&&(this._domElementKeyEvents.removeEventListener(`keydown`,this._onKeyDown),this._domElementKeyEvents=null)}saveState(){this.target0.copy(this.target),this.position0.copy(this.object.position),this.zoom0=this.object.zoom}reset(){this.target.copy(this.target0),this.object.position.copy(this.position0),this.object.zoom=this.zoom0,this.object.updateProjectionMatrix(),this.dispatchEvent(qr),this.update(),this.state=Q.NONE}update(e=null){let t=this.object.position;X.copy(t).sub(this.target),X.applyQuaternion(this._quat),this._spherical.setFromVector3(X),this.autoRotate&&this.state===Q.NONE&&this._rotateLeft(this._getAutoRotationAngle(e)),this.enableDamping?(this._spherical.theta+=this._sphericalDelta.theta*this.dampingFactor,this._spherical.phi+=this._sphericalDelta.phi*this.dampingFactor):(this._spherical.theta+=this._sphericalDelta.theta,this._spherical.phi+=this._sphericalDelta.phi);let r=this.minAzimuthAngle,i=this.maxAzimuthAngle;isFinite(r)&&isFinite(i)&&(r<-Math.PI?r+=Z:r>Math.PI&&(r-=Z),i<-Math.PI?i+=Z:i>Math.PI&&(i-=Z),r<=i?this._spherical.theta=Math.max(r,Math.min(i,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(r+i)/2?Math.max(r,this._spherical.theta):Math.min(i,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let a=!1;if(this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{let e=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._scale),a=e!=this._spherical.radius}if(X.setFromSpherical(this._spherical),X.applyQuaternion(this._quatInverse),t.copy(this.target).add(X),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let e=null;if(this.object.isPerspectiveCamera){let t=X.length();e=this._clampDistance(t*this._scale);let n=t-e;this.object.position.addScaledVector(this._dollyDirection,n),this.object.updateMatrixWorld(),a=!!n}else if(this.object.isOrthographicCamera){let t=new n.Vector3(this._mouse.x,this._mouse.y,0);t.unproject(this.object);let r=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),this.object.updateProjectionMatrix(),a=r!==this.object.zoom;let i=new n.Vector3(this._mouse.x,this._mouse.y,0);i.unproject(this.object),this.object.position.sub(i).add(t),this.object.updateMatrixWorld(),e=X.length()}else console.warn(`WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled.`),this.zoomToCursor=!1;e!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(e).add(this.object.position):(Xr.origin.copy(this.object.position),Xr.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(Xr.direction))<Qr?this.object.lookAt(this.target):(Zr.setFromNormalAndCoplanarPoint(this.object.up,this.target),Xr.intersectPlane(Zr,this.target))))}else if(this.object.isOrthographicCamera){let e=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),e!==this.object.zoom&&(this.object.updateProjectionMatrix(),a=!0)}return this._scale=1,this._performCursorZoom=!1,a||this._lastPosition.distanceToSquared(this.object.position)>$r||8*(1-this._lastQuaternion.dot(this.object.quaternion))>$r||this._lastTargetPosition.distanceToSquared(this.target)>$r?(this.dispatchEvent(qr),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(e){return e===null?Z/60/60*this.autoRotateSpeed:Z/60*this.autoRotateSpeed*e}_getZoomScale(e){let t=Math.abs(e*.01);return .95**(this.zoomSpeed*t)}_rotateLeft(e){this._sphericalDelta.theta-=e}_rotateUp(e){this._sphericalDelta.phi-=e}_panLeft(e,t){X.setFromMatrixColumn(t,0),X.multiplyScalar(-e),this._panOffset.add(X)}_panUp(e,t){this.screenSpacePanning===!0?X.setFromMatrixColumn(t,1):(X.setFromMatrixColumn(t,0),X.crossVectors(this.object.up,X)),X.multiplyScalar(e),this._panOffset.add(X)}_pan(e,t){let n=this.domElement;if(this.object.isPerspectiveCamera){let r=this.object.position;X.copy(r).sub(this.target);let i=X.length();i*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*e*i/n.clientHeight,this.object.matrix),this._panUp(2*t*i/n.clientHeight,this.object.matrix)}else this.object.isOrthographicCamera?(this._panLeft(e*(this.object.right-this.object.left)/this.object.zoom/n.clientWidth,this.object.matrix),this._panUp(t*(this.object.top-this.object.bottom)/this.object.zoom/n.clientHeight,this.object.matrix)):(console.warn(`WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.`),this.enablePan=!1)}_dollyOut(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=e:(console.warn(`WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.`),this.enableZoom=!1)}_dollyIn(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=e:(console.warn(`WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.`),this.enableZoom=!1)}_updateZoomParameters(e,t){if(!this.zoomToCursor)return;this._performCursorZoom=!0;let n=this.domElement.getBoundingClientRect(),r=e-n.left,i=t-n.top,a=n.width,o=n.height;this._mouse.x=r/a*2-1,this._mouse.y=-(i/o)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(e){return Math.max(this.minDistance,Math.min(this.maxDistance,e))}_handleMouseDownRotate(e){this._rotateStart.set(e.clientX,e.clientY)}_handleMouseDownDolly(e){this._updateZoomParameters(e.clientX,e.clientX),this._dollyStart.set(e.clientX,e.clientY)}_handleMouseDownPan(e){this._panStart.set(e.clientX,e.clientY)}_handleMouseMoveRotate(e){this._rotateEnd.set(e.clientX,e.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);let t=this.domElement;this._rotateLeft(Z*this._rotateDelta.x/t.clientHeight),this._rotateUp(Z*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(e){this._dollyEnd.set(e.clientX,e.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(e){this._panEnd.set(e.clientX,e.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(e){this._updateZoomParameters(e.clientX,e.clientY),e.deltaY<0?this._dollyIn(this._getZoomScale(e.deltaY)):e.deltaY>0&&this._dollyOut(this._getZoomScale(e.deltaY)),this.update()}_handleKeyDown(e){let t=!1;switch(e.code){case this.keys.UP:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(Z*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,this.keyPanSpeed),t=!0;break;case this.keys.BOTTOM:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(-Z*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,-this.keyPanSpeed),t=!0;break;case this.keys.LEFT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(Z*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(this.keyPanSpeed,0),t=!0;break;case this.keys.RIGHT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(-Z*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(-this.keyPanSpeed,0),t=!0;break}t&&(e.preventDefault(),this.update())}_handleTouchStartRotate(e){if(this._pointers.length===1)this._rotateStart.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._rotateStart.set(n,r)}}_handleTouchStartPan(e){if(this._pointers.length===1)this._panStart.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._panStart.set(n,r)}}_handleTouchStartDolly(e){let t=this._getSecondPointerPosition(e),n=e.pageX-t.x,r=e.pageY-t.y,i=Math.sqrt(n*n+r*r);this._dollyStart.set(0,i)}_handleTouchStartDollyPan(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enablePan&&this._handleTouchStartPan(e)}_handleTouchStartDollyRotate(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enableRotate&&this._handleTouchStartRotate(e)}_handleTouchMoveRotate(e){if(this._pointers.length==1)this._rotateEnd.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._rotateEnd.set(n,r)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);let t=this.domElement;this._rotateLeft(Z*this._rotateDelta.x/t.clientHeight),this._rotateUp(Z*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(e){if(this._pointers.length===1)this._panEnd.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._panEnd.set(n,r)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(e){let t=this._getSecondPointerPosition(e),n=e.pageX-t.x,r=e.pageY-t.y,i=Math.sqrt(n*n+r*r);this._dollyEnd.set(0,i),this._dollyDelta.set(0,(this._dollyEnd.y/this._dollyStart.y)**+this.zoomSpeed),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);let a=(e.pageX+t.x)*.5,o=(e.pageY+t.y)*.5;this._updateZoomParameters(a,o)}_handleTouchMoveDollyPan(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enablePan&&this._handleTouchMovePan(e)}_handleTouchMoveDollyRotate(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enableRotate&&this._handleTouchMoveRotate(e)}_addPointer(e){this._pointers.push(e.pointerId)}_removePointer(e){delete this._pointerPositions[e.pointerId];for(let t=0;t<this._pointers.length;t++)if(this._pointers[t]==e.pointerId){this._pointers.splice(t,1);return}}_isTrackingPointer(e){for(let t=0;t<this._pointers.length;t++)if(this._pointers[t]==e.pointerId)return!0;return!1}_trackPointer(e){let t=this._pointerPositions[e.pointerId];t===void 0&&(t=new n.Vector2,this._pointerPositions[e.pointerId]=t),t.set(e.pageX,e.pageY)}_getSecondPointerPosition(e){let t=e.pointerId===this._pointers[0]?this._pointers[1]:this._pointers[0];return this._pointerPositions[t]}_customWheelEvent(e){let t=e.deltaMode,n={clientX:e.clientX,clientY:e.clientY,deltaY:e.deltaY};switch(t){case 1:n.deltaY*=16;break;case 2:n.deltaY*=100;break}return e.ctrlKey&&!this._controlActive&&(n.deltaY*=10),n}};function ti(e){this.enabled!==!1&&(this._pointers.length===0&&(this.domElement.setPointerCapture(e.pointerId),this.domElement.addEventListener(`pointermove`,this._onPointerMove),this.domElement.addEventListener(`pointerup`,this._onPointerUp)),!this._isTrackingPointer(e)&&(this._addPointer(e),e.pointerType===`touch`?this._onTouchStart(e):this._onMouseDown(e)))}function ni(e){this.enabled!==!1&&(e.pointerType===`touch`?this._onTouchMove(e):this._onMouseMove(e))}function ri(e){switch(this._removePointer(e),this._pointers.length){case 0:this.domElement.releasePointerCapture(e.pointerId),this.domElement.removeEventListener(`pointermove`,this._onPointerMove),this.domElement.removeEventListener(`pointerup`,this._onPointerUp),this.dispatchEvent(Yr),this.state=Q.NONE;break;case 1:let t=this._pointers[0],n=this._pointerPositions[t];this._onTouchStart({pointerId:t,pageX:n.x,pageY:n.y});break}}function ii(e){let t;switch(e.button){case 0:t=this.mouseButtons.LEFT;break;case 1:t=this.mouseButtons.MIDDLE;break;case 2:t=this.mouseButtons.RIGHT;break;default:t=-1}switch(t){case n.MOUSE.DOLLY:if(this.enableZoom===!1)return;this._handleMouseDownDolly(e),this.state=Q.DOLLY;break;case n.MOUSE.ROTATE:if(e.ctrlKey||e.metaKey||e.shiftKey){if(this.enablePan===!1)return;this._handleMouseDownPan(e),this.state=Q.PAN}else{if(this.enableRotate===!1)return;this._handleMouseDownRotate(e),this.state=Q.ROTATE}break;case n.MOUSE.PAN:if(e.ctrlKey||e.metaKey||e.shiftKey){if(this.enableRotate===!1)return;this._handleMouseDownRotate(e),this.state=Q.ROTATE}else{if(this.enablePan===!1)return;this._handleMouseDownPan(e),this.state=Q.PAN}break;default:this.state=Q.NONE}this.state!==Q.NONE&&this.dispatchEvent(Jr)}function ai(e){switch(this.state){case Q.ROTATE:if(this.enableRotate===!1)return;this._handleMouseMoveRotate(e);break;case Q.DOLLY:if(this.enableZoom===!1)return;this._handleMouseMoveDolly(e);break;case Q.PAN:if(this.enablePan===!1)return;this._handleMouseMovePan(e);break}}function oi(e){this.enabled===!1||this.enableZoom===!1||this.state!==Q.NONE||(e.preventDefault(),this.dispatchEvent(Jr),this._handleMouseWheel(this._customWheelEvent(e)),this.dispatchEvent(Yr))}function si(e){this.enabled!==!1&&this._handleKeyDown(e)}function ci(e){switch(this._trackPointer(e),this._pointers.length){case 1:switch(this.touches.ONE){case n.TOUCH.ROTATE:if(this.enableRotate===!1)return;this._handleTouchStartRotate(e),this.state=Q.TOUCH_ROTATE;break;case n.TOUCH.PAN:if(this.enablePan===!1)return;this._handleTouchStartPan(e),this.state=Q.TOUCH_PAN;break;default:this.state=Q.NONE}break;case 2:switch(this.touches.TWO){case n.TOUCH.DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchStartDollyPan(e),this.state=Q.TOUCH_DOLLY_PAN;break;case n.TOUCH.DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchStartDollyRotate(e),this.state=Q.TOUCH_DOLLY_ROTATE;break;default:this.state=Q.NONE}break;default:this.state=Q.NONE}this.state!==Q.NONE&&this.dispatchEvent(Jr)}function li(e){switch(this._trackPointer(e),this.state){case Q.TOUCH_ROTATE:if(this.enableRotate===!1)return;this._handleTouchMoveRotate(e),this.update();break;case Q.TOUCH_PAN:if(this.enablePan===!1)return;this._handleTouchMovePan(e),this.update();break;case Q.TOUCH_DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchMoveDollyPan(e),this.update();break;case Q.TOUCH_DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchMoveDollyRotate(e),this.update();break;default:this.state=Q.NONE}}function ui(e){this.enabled!==!1&&e.preventDefault()}function di(e){e.key===`Control`&&(this._controlActive=!0,this.domElement.getRootNode().addEventListener(`keyup`,this._interceptControlUp,{passive:!0,capture:!0}))}function fi(e){e.key===`Control`&&(this._controlActive=!1,this.domElement.getRootNode().removeEventListener(`keyup`,this._interceptControlUp,{passive:!0,capture:!0}))}var pi=class extends ei{constructor(e,t){super(e,t),this.screenSpacePanning=!1,this.mouseButtons={LEFT:n.MOUSE.PAN,MIDDLE:n.MOUSE.DOLLY,RIGHT:n.MOUSE.ROTATE},this.touches={ONE:n.TOUCH.PAN,TWO:n.TOUCH.DOLLY_ROTATE}}},$={CUBE_SIZE:1.8,EDGE_SECTION_SIZE:.35,FACE_THICKNESS:.35,CANVAS_SIZE:256,FONT_SIZE:`62px`,TEXT_COLOR:`#000000`,TEXT_ALIGN:`center`,TEXT_BASELINE:`middle`,FACE_COLOR:`#EFF3F2`,FACE_OPACITY:1,EDGE_COLOR:`#EFF3F2`,CORNER_COLOR:`#EFF3F2`,LINE_COLOR:0},mi=(e=>(e.FRONT=`FRONT`,e.BACK=`BACK`,e.RIGHT=`RIGHT`,e.LEFT=`LEFT`,e.TOP=`TOP`,e.BOTTOM=`BOTTOM`,e))(mi||{});new n.Vector3(0,1,0);var hi=`rotation-arrows-name`,gi=`left-rotation-arrow-name`,_i=`right-rotation-arrow-name`,vi=`gizmo-group-name`,yi=[_i,gi],bi={GIZMO_DISTANCE:8,DEFAULT_UP:new n.Vector3(0,1,0),FORWARD:new n.Vector3(0,0,-1)},xi=e=>bi.FORWARD.clone().applyQuaternion(e),Si=(e,t,r=new n.Vector3)=>r.clone().add(e.multiplyScalar(-t)),Ci=class{constructor(e,t=hi){this.gizmoScene=e,this.gizmoArrowsName=t}syncGizmoWithMain(e,t){e.quaternion.copy(t.quaternion),e.up.copy(t.up);let n=xi(e.quaternion).normalize();e.position.copy(Si(n,bi.GIZMO_DISTANCE)),e.camera.updateMatrixWorld(!0);let r=this.gizmoScene.getObjectByName(this.gizmoArrowsName);r&&r.rotation.copy(e.camera.rotation)}syncMainWithGizmo(e,t,r){let i=r.target.clone(),a=e.position.distanceTo(i),o=e.camera instanceof n.PerspectiveCamera;r instanceof pi&&!o?this.syncMapControls(e,t,i,a):this.syncOrbitControls(e,t,i,a),e.camera.updateMatrix(),e.camera.updateMatrixWorld(!0),r.update()}syncMapControls(e,t,n,r){let i=e.position.y-n.y,a=xi(t.quaternion);a.y=0,a.normalize();let o=n.clone();o.y+=i,o.add(a.multiplyScalar(-r)),e.position.copy(o),e.up.copy(bi.DEFAULT_UP),e.camera.lookAt(n)}syncOrbitControls(e,t,n,r){let i=xi(t.quaternion),a=bi.DEFAULT_UP.clone().applyQuaternion(t.quaternion),o=Si(i,r,n);e.position.copy(o),e.up.copy(a),e.camera.lookAt(n)}},wi=e=>new Ci(e),Ti=(e,t,n)=>{wi(n).syncGizmoWithMain({camera:e,position:e.position,quaternion:e.quaternion,up:e.up},{camera:t,position:t.position,quaternion:t.quaternion,up:t.up})},Ei=(e,t,n)=>{wi(t.userData.scene).syncMainWithGizmo({camera:e,position:e.position,quaternion:e.quaternion,up:e.up},{camera:t,position:t.position,quaternion:t.quaternion,up:t.up},n)},Di=()=>{try{let e=document.createElement(`canvas`);return!!(window.WebGLRenderingContext&&(e.getContext(`webgl`)||e.getContext(`experimental-webgl`)))}catch{return!1}},Oi=()=>Di()?new n.WebGLRenderer({alpha:!0,antialias:!1}):(console.error(`WebGL is not supported in this environment.`),null),ki=e=>{let t=new n.AmbientLight(16777215,1);e.add(t);let r=new n.DirectionalLight(16777215,1);r.position.set(5,10,5),e.add(r);let i=new n.DirectionalLight(16777215,1);i.position.set(-5,-10,5),e.add(i);let a=new n.PointLight(16777215,1,100);a.position.set(0,0,5),e.add(a),r.castShadow=!1,i.castShadow=!1,a.castShadow=!1},Ai=class{static createTextTexture(e){let t=document.createElement(`canvas`),r=t.getContext(`2d`);t.width=$.CANVAS_SIZE,t.height=$.CANVAS_SIZE,r&&(r.clearRect(0,0,t.width,t.height),r.font=`${$.FONT_SIZE} Arial`,r.fillStyle=$.TEXT_COLOR,r.textAlign=$.TEXT_ALIGN,r.textBaseline=$.TEXT_BASELINE,r.fillText(e,t.width/2,t.height/2));let i=new n.CanvasTexture(t);return i.needsUpdate=!0,i}},ji=class{static createWireframe([e,t,r]){let i=new n.BoxGeometry(e,t,r),a=new n.EdgesGeometry(i),o=new n.LineBasicMaterial({color:$.LINE_COLOR}),s=new n.LineSegments(a,o);return s.name=`Wireframe`,s}static createEdgeBox(e,t,r){let i=$.CUBE_SIZE-$.EDGE_SECTION_SIZE,a={x:$.EDGE_SECTION_SIZE,y:$.EDGE_SECTION_SIZE,z:$.EDGE_SECTION_SIZE};a[t]=i;let o=new n.BoxGeometry(a.x,a.y,a.z),s=new n.MeshStandardMaterial({color:$.EDGE_COLOR}),c=new n.Mesh(o,s);return c.position.copy(e),c.name=`Edge Box ${r}`,c}static createCornerCube(e,t){let r=new n.BoxGeometry($.EDGE_SECTION_SIZE,$.EDGE_SECTION_SIZE,$.EDGE_SECTION_SIZE),i=new n.MeshStandardMaterial({color:$.CORNER_COLOR}),a=new n.Mesh(r,i);return a.position.copy(e),a.name=`Corner Cube ${t}`,a}static createFace(e,t,r){let i=new n.Group,a=new n.BoxGeometry($.CUBE_SIZE-$.EDGE_SECTION_SIZE,$.CUBE_SIZE-$.EDGE_SECTION_SIZE,$.FACE_THICKNESS),o=new n.MeshStandardMaterial({color:$.FACE_COLOR}),s=new n.Mesh(a,o);s.name=`Face Box ${r}`,i.add(s);let c=new n.PlaneGeometry($.CUBE_SIZE-$.EDGE_SECTION_SIZE,$.CUBE_SIZE-$.EDGE_SECTION_SIZE),l=new n.MeshStandardMaterial({map:Ai.createTextTexture(r),transparent:!0,depthWrite:!1}),u=new n.Mesh(c,l);return u.position.set(0,0,$.FACE_THICKNESS/2+.01),i.add(u),i.position.copy(e),i.rotation.copy(t),i}},Mi=(e,t)=>{let r=document.createElement(`canvas`);r.width=64,r.height=64;let i=r.getContext(`2d`);i.fillStyle=`rgba(0, 0, 0, 0)`,i.fillRect(0,0,r.width,r.height),i.font=`Bold 48px Arial`,i.fillStyle=`#${t.toString(16).padStart(6,`0`)}`,i.textAlign=`center`,i.textBaseline=`middle`,i.fillText(e,r.width/2,r.height/2);let a=new n.CanvasTexture(r),o=new n.SpriteMaterial({map:a}),s=new n.Sprite(o);return s.scale.set(.5,.5,.5),s},Ni=class{constructor(e){this.hoveredObject=null,this.originalColor=null,this.config=e}get vectorToCube(){return this.hoveredObject?.userData.vectorToCube}getInitialRotation(){switch(this.config.initialFace){case mi.BACK:return new n.Euler(0,Math.PI,0);case mi.RIGHT:return new n.Euler(0,-Math.PI/2,0);case mi.LEFT:return new n.Euler(0,Math.PI/2,0);case mi.TOP:return new n.Euler(Math.PI/2,0,0);case mi.BOTTOM:return new n.Euler(-Math.PI/2,0,0);case mi.FRONT:default:return new n.Euler(0,0,0)}}createWireframe(){let e=$.CUBE_SIZE+$.EDGE_SECTION_SIZE,t=ji.createWireframe([e,e,e]);return t.userData.gizmoCube=this,t}createEdgeBox(e,t,n){let r=ji.createEdgeBox(e,t,n);return r.userData.gizmoCube=this,r}createCornerCube(e,t){let n=ji.createCornerCube(e,t);return n.userData.gizmoCube=this,n}createFace(e,t,n){let r=ji.createFace(e,t,n),i=r.getObjectByName(`Face Box ${n}`);return i.userData.gizmoCube=this,r}createEdges(e){let t=$.CUBE_SIZE/2;[{axis:`x`,pos:new n.Vector3(0,t,-t)},{axis:`x`,pos:new n.Vector3(0,t,t)},{axis:`x`,pos:new n.Vector3(0,-t,-t)},{axis:`x`,pos:new n.Vector3(0,-t,t)},{axis:`y`,pos:new n.Vector3(t,0,-t)},{axis:`y`,pos:new n.Vector3(t,0,t)},{axis:`y`,pos:new n.Vector3(-t,0,-t)},{axis:`y`,pos:new n.Vector3(-t,0,t)},{axis:`z`,pos:new n.Vector3(t,t,0)},{axis:`z`,pos:new n.Vector3(t,-t,0)},{axis:`z`,pos:new n.Vector3(-t,t,0)},{axis:`z`,pos:new n.Vector3(-t,-t,0)}].forEach(({axis:t,pos:n},r)=>{let i=this.createEdgeBox(n,t,r+1);e.add(i)})}createCorners(e){let t=$.CUBE_SIZE/2;[new n.Vector3(-t,-t,-t),new n.Vector3(-t,-t,t),new n.Vector3(-t,t,-t),new n.Vector3(-t,t,t),new n.Vector3(t,-t,-t),new n.Vector3(t,-t,t),new n.Vector3(t,t,-t),new n.Vector3(t,t,t)].forEach((t,n)=>{let r=this.createCornerCube(t,n+1);e.add(r)})}createFaces(e){let t=$.CUBE_SIZE/2;[{pos:new n.Vector3(0,0,t),rotation:new n.Euler(0,0,0),label:`FRONT`},{pos:new n.Vector3(0,0,-t),rotation:new n.Euler(0,Math.PI,0),label:`BACK`},{pos:new n.Vector3(t,0,0),rotation:new n.Euler(0,Math.PI/2,0),label:`RIGHT`},{pos:new n.Vector3(-t,0,0),rotation:new n.Euler(0,-Math.PI/2,0),label:`LEFT`},{pos:new n.Vector3(0,t,0),rotation:new n.Euler(-Math.PI/2,0,0),label:`TOP`},{pos:new n.Vector3(0,-t,0),rotation:new n.Euler(Math.PI/2,0,0),label:`BOTTOM`}].forEach(({pos:t,rotation:n,label:r})=>{let i=this.createFace(t,n,r);e.add(i)})}createAxis(e){let{color:t,direction:r,length:i,origin:a,lineWidth:o,label:s}=e,c=new n.Group,l=o/2,u=new n.CylinderGeometry(l,l,i,32),d=new n.MeshBasicMaterial({color:t}),f=new n.Mesh(u,d);if(f.position.copy(a).add(r.clone().multiplyScalar(i/2)),!r.equals(new n.Vector3(0,1,0))){let e=new n.Vector3(0,1,0).cross(r).normalize(),t=Math.acos(new n.Vector3(0,1,0).dot(r));f.setRotationFromAxisAngle(e,t)}c.add(f);let p=Mi(s,t);return p.position.copy(a).add(r.clone().multiplyScalar(i+.1)),c.add(p),c}createCoordinateAxes(){let e=new n.Group,t=$.CUBE_SIZE,r=$.EDGE_SECTION_SIZE,i=-(t/2+r/2),a=e=>{let t=new n.Vector3(1,1,1);return new n.Vector3(e,e,e).add(t.clone().normalize().negate().multiplyScalar(.04))},o=t+1.25*r;return[{color:16711680,direction:new n.Vector3(1,0,0),length:o,origin:a(i),lineWidth:.04,label:`X`},{color:65280,direction:new n.Vector3(0,1,0),length:o,origin:a(i),lineWidth:.04,label:`Y`},{color:255,direction:new n.Vector3(0,0,1),length:o,origin:a(i),lineWidth:.04,label:`Z`}].forEach(t=>{let n=this.createAxis(t);e.add(n)}),e}create(){let e=new n.Group;e.name=vi;let t=this.createWireframe();e.add(t),this.createEdges(e),this.createCorners(e),this.createFaces(e);let r=this.createCoordinateAxes();e.add(r);let i=this.getInitialRotation();return e.setRotationFromEuler(i),e}highlightObject(e){if(this.hoveredObject!==e)if(this.hoveredObject&&this.originalColor&&this.hoveredObject.material.color.set(this.originalColor),e&&e instanceof n.Mesh){let t=e.material;this.hoveredObject=e,this.originalColor=t.color.clone(),t.color.set(11519973)}else this.hoveredObject=null,this.originalColor=null}handleClick(){if(this.hoveredObject){let e=new n.Vector3;e=this.hoveredObject.getWorldPosition(e).clone();let t=new n.Vector3(0,0,0),r=e.sub(t).normalize();this.hoveredObject.userData.vectorToCube=r}}},Pi=class{constructor(e){this.onChangeMainControlsListener=()=>{},this.onChangeGizmoControlsListener=()=>{},this.animationId=0;let{gizmoParams:t,mainParams:n,syncFunctions:r,options:i}=e;this.gizmoDiv=t.gizmoDiv,this.gizmoScene=t.gizmoScene,this.gizmoRenderer=t.gizmoRenderer,this.gizmoCamera=t.gizmoCamera,this.mainCamera=n.mainCamera,this.mainControls=n.mainControls,this.renderGizmo=n.renderGizmo,this.syncFunctions=r,this.options=i,this.gizmoControls=new ei(this.gizmoCamera,this.gizmoRenderer.domElement),this.initializeRenderer(),this.initializeScene(),this.initializeControls(),this.startAnimationLoop()}initializeRenderer(){var e;this.gizmoRenderer.setPixelRatio(window.devicePixelRatio),this.gizmoRenderer.setSize(this.gizmoDiv.clientWidth,this.gizmoDiv.clientHeight);let t=this.gizmoDiv.clientWidth/this.gizmoDiv.clientHeight;this.gizmoCamera.aspect=t,this.gizmoCamera.updateProjectionMatrix(),(e=this.options)!=null&&e.up&&this.gizmoCamera.up.copy(this.options.up),this.gizmoDiv.appendChild(this.gizmoRenderer.domElement)}initializeScene(){let e=new Ni({initialFace:this.options?.initialFace??mi.FRONT}).create();this.gizmoScene.add(e),ki(this.gizmoScene)}initializeControls(){this.onChangeMainControlsListener=()=>this.syncFunctions.syncGizmoCameraWithMain(this.gizmoCamera,this.mainCamera,this.gizmoScene),this.mainControls.addEventListener(`change`,this.onChangeMainControlsListener),this.gizmoControls.enableZoom=!1,this.gizmoControls.enablePan=!1,this.gizmoControls.rotateSpeed=.5,this.gizmoControls.update(),this.onChangeGizmoControlsListener=()=>{this.gizmoScene.getObjectByName(hi)?.rotation.copy(this.gizmoCamera.rotation),this.syncFunctions.syncMainCameraWithGizmo(this.mainCamera,this.gizmoCamera,this.mainControls),this.renderGizmo()},this.gizmoControls.addEventListener(`change`,this.onChangeGizmoControlsListener)}startAnimationLoop(){let e=()=>{this.gizmoRenderer.render(this.gizmoScene,this.gizmoCamera)},t=()=>{this.animationId=requestAnimationFrame(t),e()};t()}dispose(){this.mainControls.removeEventListener(`change`,this.onChangeMainControlsListener),this.gizmoControls.removeEventListener(`change`,this.onChangeGizmoControlsListener),this.gizmoScene.clear(),cancelAnimationFrame(this.animationId)}},Fi=(e,t)=>{let n;return function(...r){n||(e.apply(this,r),n=!0,setTimeout(()=>n=!1,t))}};function Ii(e,t,n){if(!t)return;let r=t.domElement.getBoundingClientRect();n.x=(e.clientX-r.left)/r.width*2-1,n.y=-((e.clientY-r.top)/r.height)*2+1}var Li=(e,t,n,r)=>(r.setFromCamera(e,t),r.intersectObjects(n.children,!0)),Ri=e=>{let t=[`Wireframe`,``];return e.find(e=>!t.includes(e.object.name))?.object||null};function zi(e,t,n,r){return!t||!n?null:Ri(Li(e,t,n,r))}function Bi(e,t){let n=e?.userData.gizmoCube;if(e&&n){n.handleClick();let e=n.vectorToCube;e&&t(e)}}var Vi={radius:2.1,color:12369854,tubeRadius:.1,tubeSegments:8,numPoints:64,tubeOffset:1.5},Hi={size:.2,depth:.1,heightRatio:1.4,segments:1},Ui=class{constructor(e={}){this.config={...Vi,...e},this.material=new n.MeshBasicMaterial({color:this.config.color})}create(){let e=new n.Group,t=this.createQuarterCircleCurves();return e.add(...this.createTubes(t),...this.createArrowHeads(t)),e.name=hi,e}createQuarterCircleCurves(){let e=this.generateQuarterCirclePoints(),t=Math.floor(e.length/2);return[new n.CatmullRomCurve3(e.slice(0,t-this.config.tubeOffset)),new n.CatmullRomCurve3(e.slice(t+this.config.tubeOffset))]}generateQuarterCirclePoints(){let e=Math.PI/2,t=e/2,r=e/4;return Array.from({length:this.config.numPoints+1},(e,i)=>{let a=i/this.config.numPoints,o=r+t*a,s=this.config.radius*Math.sin(o),c=this.config.radius*Math.cos(o);return new n.Vector3(s,c,0)})}createTubes([e,t]){let r=(e,t)=>{let r=new n.TubeGeometry(e,this.config.numPoints,this.config.tubeRadius,this.config.tubeSegments,!1),i=new n.Mesh(r,this.material);return i.name=t,i};return[r(e,gi),r(t,_i)]}createArrowHeads([e,t]){let{size:r,depth:i,heightRatio:a,segments:o}=Hi,s=this.createArrowShape(r,a),c=new n.ExtrudeGeometry(s,{steps:o,depth:i,bevelEnabled:!1}).center(),l=(e,t,r)=>{let i=new n.Mesh(c,this.material);return i.position.copy(e),i.rotation.z=t,i.name=r,i};return[l(e.getPoint(0),this.calculateArrowRotation(e.getTangent(0))+Math.PI/2,gi),l(t.getPoint(1),this.calculateArrowRotation(t.getTangent(1))-Math.PI/2,_i)]}createArrowShape(e,t){return new n.Shape().moveTo(0,0).lineTo(e,-e*t).lineTo(-e,-e*t).lineTo(0,0)}calculateArrowRotation(e){return Math.atan2(e.y,e.x)}},Wi=e=>{let t=e.rotation,n=.01,r=Math.PI,i=(Math.abs(t.x)%(2*r)+2*r)%(2*r),a=(Math.abs(t.y)%(2*r)+2*r)%(2*r),o=Math.abs(i-r/2)<n||Math.abs(i-3*r/2)<n||Math.abs(a-r/2)<n||Math.abs(a-3*r/2)<n,s=(Math.abs(i)<n||Math.abs(i-r)<n)&&(Math.abs(a)<n||Math.abs(a-r)<n);return!(o||s)},Gi=25,Ki=200;function qi({gizmoRenderer:e,gizmoScene:r,gizmoCamera:i,alignCameraWithVector:a,gizmoControlRef:o}){let s=(0,t.useRef)(null),c=(0,t.useRef)(null),l=(0,t.useRef)(new n.Raycaster).current,u=(0,t.useRef)(new n.Vector2).current,d=(0,t.useCallback)(()=>{let e=r.getObjectByName(hi),t=Wi(i);if(e&&t){r.remove(e);return}if(e||t)return;let n=new Ui().create();n.rotation.copy(i.rotation),r.add(n)},[r,i]),f=(0,t.useCallback)(()=>{let e=r.getObjectByName(hi);e&&r.remove(e)},[r]),p=(0,t.useCallback)(Fi(t=>{if(!o.current||!e)return;Ii(t,e,u);let n=Li(u,i,r,l),a=Ri(n);a!=null&&a.userData.gizmoCube?a.userData.gizmoCube.highlightObject(a):r.traverse(e=>{e.userData.gizmoCube&&e.userData.gizmoCube.highlightObject(null)}),n.length>0?d():f()},1e3/Gi),[o,e,i,r,l,u,d,f]),m=(0,t.useCallback)(e=>{s.current=Date.now(),c.current={x:e.clientX,y:e.clientY}},[]),h=(0,t.useCallback)(e=>{var t;let r=e.name===_i?1:-1,a=90*Math.PI/180,s=new n.Vector3(0,0,0),c=r*a,l=new n.Matrix4;l.makeRotationZ(c),i.up.applyMatrix4(l),i.lookAt(s),(t=o.current)==null||t.gizmoControls.update()},[i,o]);return{onMouseDown:m,onMouseMove:p,onMouseUp:(0,t.useCallback)(t=>{if((s.current?Date.now()-s.current:0)<Ki){Ii(t,e,u);let n=zi(u,i,r,l);n!=null&&n.name&&yi.includes(n.name)?h(n):Bi(n,a)}s.current=null,c.current=null},[h,a,e,i,r,l,u]),onMouseLeave:f}}var Ji=({camera:e,controls:i,className:a,render:o,options:s})=>{let c=(0,t.useRef)(null),l=(0,t.useRef)(new n.Scene).current,[u]=(0,t.useState)(()=>Oi()),d=(0,t.useRef)(new n.PerspectiveCamera(30,1,.1,10)).current,f=(0,t.useRef)(null),p=(0,t.useCallback)(()=>{u&&(o(),u.render(l,d))},[o,u,l,d]),{onMouseDown:m,onMouseMove:h,onMouseUp:g,onMouseLeave:_}=qi({gizmoRenderer:u,gizmoScene:l,gizmoCamera:d,alignCameraWithVector:(0,t.useCallback)(t=>{if(!e||!i)return;let r=e.position.length(),a=t.clone().multiplyScalar(r),o=new n.Matrix4;o.lookAt(a,new n.Vector3(0,0,0),new n.Vector3(0,1,0));let s=new n.Quaternion;s.setFromRotationMatrix(o),e.quaternion.copy(s),Kr(e,i,e.position.clone(),a,400,p),e.up.set(0,1,0),e.lookAt(new n.Vector3(0,0,0)),i.target.set(0,0,0),i.update()},[e,i,p,l]),gizmoControlRef:f});return(0,t.useEffect)(()=>{let t=c.current;if(!(!t||!e||!i||!u))return f.current&&f.current.dispose(),f.current=new Pi({gizmoParams:{gizmoDiv:t,gizmoScene:l,gizmoRenderer:u,gizmoCamera:d},mainParams:{mainCamera:e,mainControls:i,renderGizmo:p},syncFunctions:{syncGizmoCameraWithMain:Ti,syncMainCameraWithGizmo:Ei},options:s}),t.addEventListener(`mousedown`,m),t.addEventListener(`mousemove`,h),t.addEventListener(`mouseup`,g),t.addEventListener(`mouseleave`,_),()=>{f.current&&=(f.current.dispose(),null),t.removeEventListener(`mousedown`,m),t.removeEventListener(`mousemove`,h),t.removeEventListener(`mouseup`,g),t.removeEventListener(`mouseleave`,_)}},[e,i,p,h,m,g]),(0,t.useEffect)(()=>{e&&(Ti(d,e,l),p())},[e,p]),(0,r.jsx)(`div`,{className:a?`${a}`:`gizmo-default`,ref:c})},Yi=10,Xi=e=>({top:e.startsWith(`top`)?Yi:`auto`,bottom:e.startsWith(`bottom`)?Yi:`auto`,left:e.endsWith(`left`)?Yi:`auto`,right:e.endsWith(`right`)?Yi:`auto`}),Zi=({camera:e,controls:t,render:n,placement:i=`top-right`,size:a=128})=>{if(!e||!t)return null;let o=t;return(0,r.jsx)(`div`,{className:`viewer-gizmo-container`,style:{position:`absolute`,width:a,height:a,zIndex:10,...Xi(i)},children:(0,r.jsx)(Ji,{camera:e,controls:o,render:n})})},Qi=class extends t.Component{constructor(e){super(e),this.reset=()=>{this.setState({hasError:!1,error:null})},this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){console.error(`ViewerErrorBoundary caught error:`,e,t)}render(){return this.state.hasError?this.props.fallback?this.props.fallback:(0,r.jsx)(`div`,{style:{width:`100%`,height:`100%`,display:`flex`,alignItems:`center`,justifyContent:`center`,backgroundColor:`#f0f0f0`,color:`#333`,fontFamily:`sans-serif`,padding:`20px`,textAlign:`center`},children:(0,r.jsxs)(`div`,{children:[(0,r.jsx)(`h3`,{children:`Error Loading 3D Viewer`}),(0,r.jsx)(`p`,{children:this.state.error?.message||`An unexpected error occurred`}),(0,r.jsx)(`button`,{type:`button`,onClick:this.reset,children:`Try again`})]})}):this.props.children}},$i=`(prefers-reduced-motion: reduce)`,ea=()=>typeof window<`u`&&typeof window.matchMedia==`function`,ta=e=>{if(!ea())return()=>{};let t=window.matchMedia($i);return t.addEventListener(`change`,e),()=>t.removeEventListener(`change`,e)},na=()=>ea()&&window.matchMedia($i).matches;function ra({status:e,label:n,color:i,backdrop:a}){let o=(0,t.useSyncExternalStore)(ta,na,()=>!1);return(0,r.jsxs)(`div`,{"data-testid":`viewer-loading-overlay`,role:`status`,"aria-live":`polite`,"aria-busy":e===`loading`,style:{position:`absolute`,inset:0,zIndex:20,display:`flex`,flexDirection:`column`,alignItems:`center`,justifyContent:`center`,gap:12,background:a,color:i,pointerEvents:`none`,userSelect:`none`,fontFamily:`system-ui, -apple-system, Segoe UI, Roboto, sans-serif`,fontSize:14},children:[e===`loading`?(0,r.jsxs)(`svg`,{width:`44`,height:`44`,viewBox:`0 0 44 44`,"aria-hidden":`true`,children:[(0,r.jsx)(`circle`,{cx:`22`,cy:`22`,r:`18`,fill:`none`,stroke:i,strokeOpacity:`0.25`,strokeWidth:`4`}),(0,r.jsx)(`path`,{d:`M22 4 a18 18 0 0 1 18 18`,fill:`none`,stroke:i,strokeWidth:`4`,strokeLinecap:`round`,children:!o&&(0,r.jsx)(`animateTransform`,{attributeName:`transform`,type:`rotate`,from:`0 22 22`,to:`360 22 22`,dur:`0.9s`,repeatCount:`indefinite`})})]}):(0,r.jsxs)(`svg`,{width:`40`,height:`40`,viewBox:`0 0 24 24`,fill:`none`,stroke:i,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,r.jsx)(`path`,{d:`M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z`}),(0,r.jsx)(`line`,{x1:`12`,y1:`9`,x2:`12`,y2:`13`}),(0,r.jsx)(`line`,{x1:`12`,y1:`17`,x2:`12.01`,y2:`17`})]}),n&&(0,r.jsx)(`div`,{style:{opacity:.92,maxWidth:`80%`,textAlign:`center`},children:n})]})}var ia=`-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`,aa={background:`rgba(255,255,255,0.78)`,backdropFilter:`blur(16px)`,WebkitBackdropFilter:`blur(16px)`,border:`1px solid rgba(0,0,0,0.06)`,boxShadow:`0 8px 30px rgba(0,0,0,0.10)`},oa=Object.keys(Dr);function sa({active:e,onSelect:t}){return(0,r.jsx)(`div`,{"data-testid":`viewer-preset-picker`,role:`group`,"aria-label":`Visual preset`,style:{position:`absolute`,bottom:16,left:`50%`,transform:`translateX(-50%)`,zIndex:10,display:`flex`,gap:2,padding:4,borderRadius:999,maxWidth:`calc(100% - 16px)`,overflowX:`auto`,...aa},children:oa.map(n=>(0,r.jsx)(`button`,{type:`button`,"aria-pressed":n===e,onClick:()=>t(n),style:{padding:`6px 14px`,borderRadius:999,border:n===e?`1px solid #111318`:`1px solid transparent`,background:n===e?`#111318`:`transparent`,color:n===e?`#fff`:`#3f3f4a`,fontFamily:ia,fontSize:13,fontWeight:500,lineHeight:1,whiteSpace:`nowrap`,flexShrink:0,cursor:`pointer`,textTransform:`capitalize`,transition:`background 120ms ease, color 120ms ease`},children:n},n))})}var ca={enabled:!0,label:`Loading…`,color:`#ffffff`,backdrop:`rgba(15,16,20,0.6)`};function la(e){return e===void 0||e===!0?ca:e===!1?{...ca,enabled:!1}:{enabled:e.enabled??!0,label:e.label??ca.label,errorLabel:e.errorLabel,color:e.color??ca.color,backdrop:e.backdrop??ca.backdrop}}var ua=()=>new e.A(`Viewer is not ready yet`,e.k.COMPONENT_NOT_MOUNTED),da=(0,t.forwardRef)(({object:n,options:i={},preset:a,pathTraced:o,turntable:s,animations:c,children:l},u)=>{let d=(0,t.useRef)(null),{activePreset:f,pickerEnabled:p,selectPreset:m}=Ir(i.preset??a,i.ui),{viewer:h,isInitialized:g,initError:_}=Pr(d,Lr(i,f,o,s,c)),v=Rr(h,g,n),y=Br(h);Vr(h,_,i);let b=h?e.t(h.getCamera()):null,x=h?e.n(h.getControls()):null,S=h?e.i(h.getRenderer()):null,ee=(0,t.useCallback)(()=>{h?.requestRender()},[h]),te=i.helpers?.gizmo!==void 0&&i.helpers.gizmo!==!1,C=typeof i.helpers?.gizmo==`object`?i.helpers.gizmo:{},w=(0,t.useMemo)(()=>la(i.loadingIndicator),[i.loadingIndicator]),T=v.status===`error`||!!_,E=w.enabled&&(v.status===`loading`||T);return(0,t.useImperativeHandle)(u,()=>({scene:h?e.a(h.getScene()):null,camera:b,renderer:S,controls:x,events:y,loadModel:async e=>{if(!h)throw ua();let t=typeof e==`string`?e:new D(e),n=await h.loadModel(t);if(!n.ok)throw n.error},captureStill:async e=>{if(!h)throw ua();let t=await h.captureStill(e);if(!t.ok)throw t.error;return t.value},captureVideo:async e=>{if(!h)throw ua();let t=await h.captureVideo(e);if(!t.ok)throw t.error;return t.value},getAnimationNames:()=>h?.getAnimationNames()??[],playAnimations:e=>{if(!h)throw ua();let t=h.playAnimations(e);if(!t.ok)throw t.error},pauseAnimations:()=>{h?.pauseAnimations()},setEnvironmentMap:async e=>{if(!h)throw ua();let t=await h.setEnvironmentMap(e);if(!t.ok)throw t.error},resetEnvironment:()=>{if(!h)throw ua();let e=h.resetEnvironment();if(!e.ok)throw e.error},setBackgroundImage:async e=>{if(!h)throw ua();let t=await h.setBackgroundImage(e);if(!t.ok)throw t.error},setBackgroundColor:e=>{if(!h)throw ua();let t=h.setBackgroundColor(e);if(!t.ok)throw t.error},dispose:()=>{h?.dispose()}}),[h,b,S,x,y]),(0,r.jsx)(Qi,{children:(0,r.jsx)(Ur,{viewer:h,canvasRef:d,children:(0,r.jsxs)(`div`,{style:{position:`relative`,width:`100%`,height:`100%`},children:[(0,r.jsx)(Gr,{}),te&&g&&b&&x&&(0,r.jsx)(Zi,{camera:b,controls:x,render:ee,placement:C.placement,size:C.size}),E&&(0,r.jsx)(ra,{status:T?`error`:`loading`,label:T?w.errorLabel??_?.message??v.error??`Failed to load model`:w.label,color:w.color,backdrop:w.backdrop}),p&&(0,r.jsx)(sa,{active:f??`studio`,onSelect:m}),l]})})})});da.displayName=`SimpleViewer`;var fa=(0,t.forwardRef)((e,t)=>(0,r.jsx)(da,{ref:t,...e}));fa.displayName=`SimpleViewer`;var pa=()=>(0,r.jsx)(`span`,{"aria-hidden":`true`,style:{display:`block`,width:14,height:14,borderRadius:`50%`,background:`rgba(17,19,24,0.9)`,border:`2px solid rgba(255,255,255,0.95)`,boxShadow:`0 2px 8px rgba(0,0,0,0.35)`}});function ma({position:e,occlude:n=!1,children:i}){let{viewer:a}=Wr(),o=(0,t.useRef)(null),[s,c,l]=e;(0,t.useEffect)(()=>{if(!a)return;let e=o.current;if(!e)return;let t=a.createAnchorProjector();if(!t)return;let r={x:s,y:c,z:l},i=()=>{let i=t.project(r,n);if(i){if(!i.visible){e.style.visibility=`hidden`;return}e.style.visibility=`visible`,e.style.left=`${i.left}px`,e.style.top=`${i.top}px`}},u=()=>{t.invalidate(),i()};i();let d=a.getEvents(),f=[d.on(`render:complete`,i),d.on(`controls:change`,i),d.on(`model:loaded`,u)];return window.addEventListener(`resize`,u),()=>{f.forEach(e=>e()),window.removeEventListener(`resize`,u)}},[a,s,c,l,n]);let u=i!=null&&i!==!1;return(0,r.jsx)(`div`,{ref:o,"data-testid":`viewer-hotspot`,style:{position:`absolute`,left:0,top:0,transform:`translate(-50%, -50%)`,visibility:`hidden`,zIndex:5,pointerEvents:u?`auto`:`none`},children:u?i:(0,r.jsx)(pa,{})})}exports.ControlType=$n,exports.DEFAULT_SCENE=Tr,exports.DEFAULT_STUDIO_LOOK=er,exports.ErrorCode=e.k,exports.Hotspot=ma,exports.SimpleViewer=fa,exports.ThreeViewerError=e.A,exports.TypedEventEmitter=e.D,exports.VIEWER_PRESETS=Dr,exports.VIEWER_SCENES=wr,exports.defaultOptions=Cr,exports.resolvePreset=Or,exports.resolveScene=Er;
@@ -6665,7 +6665,17 @@ var Aa = {
6665
6665
  grid: { type: "shadow_floor" },
6666
6666
  studioEnvironment: !0
6667
6667
  },
6668
- environment: { studioLook: "soft" }
6668
+ environment: { studioLook: "soft" },
6669
+ lighting: {
6670
+ ambientLight: { intensity: .55 },
6671
+ hemisphereLight: { intensity: .6 },
6672
+ directionalLight: {
6673
+ intensity: 1.4,
6674
+ shadow: { radius: 26 }
6675
+ },
6676
+ fillLight: { intensity: 1.2 },
6677
+ rimLight: { intensity: .7 }
6678
+ }
6669
6679
  }
6670
6680
  }, Ma = "studio_dome";
6671
6681
  function Na(e) {
@@ -6799,15 +6809,15 @@ function Va(e, t) {
6799
6809
  let n = O(null), r = O({
6800
6810
  width: 0,
6801
6811
  height: 0
6802
- }), [i, a] = te(!1), [o, s] = te(null), { options: c, structuralKey: l, runtimeKey: u } = Ra(t), d = Ba(e, (t.loading ?? "eager") === "lazy");
6812
+ }), [i, a] = te(null), o = i !== null, [s, c] = te(null), { options: l, structuralKey: u, runtimeKey: d } = Ra(t), f = Ba(e, (t.loading ?? "eager") === "lazy");
6803
6813
  return E(() => {
6804
- if (!d || !e.current || n.current) return;
6805
- s(null);
6806
- let t = Ia(Aa, c), i;
6814
+ if (!f || !e.current || n.current) return;
6815
+ c(null);
6816
+ let t = Ia(Aa, l), i;
6807
6817
  try {
6808
6818
  i = Ca.createViewer(e.current, t);
6809
6819
  } catch (e) {
6810
- console.error("Failed to create viewer:", e), s(e instanceof Error ? e : Error(String(e)));
6820
+ console.error("Failed to create viewer:", e), c(e instanceof Error ? e : Error(String(e)));
6811
6821
  return;
6812
6822
  }
6813
6823
  n.current = i, r.current = {
@@ -6816,19 +6826,19 @@ function Va(e, t) {
6816
6826
  };
6817
6827
  let o = !1;
6818
6828
  return i.initialize().then((e) => {
6819
- o || (e.ok ? a(!0) : (console.error("Failed to initialize viewer:", e.error), s(e.error)));
6829
+ o || (e.ok ? a(i) : (console.error("Failed to initialize viewer:", e.error), c(e.error)));
6820
6830
  }), () => {
6821
- o = !0, i.dispose(), n.current = null, a(!1);
6831
+ o = !0, i.dispose(), n.current = null, a(null);
6822
6832
  };
6823
6833
  }, [
6824
6834
  e,
6825
- l,
6826
- d
6835
+ u,
6836
+ f
6827
6837
  ]), E(() => {
6828
- if (!n.current || !i) return;
6829
- let e = Ia(Aa, c);
6830
- n.current.updateOptions(ka(e));
6831
- }, [u, i]), E(() => {
6838
+ if (!i) return;
6839
+ let e = Ia(Aa, l);
6840
+ i.updateOptions(ka(e));
6841
+ }, [d, i]), E(() => {
6832
6842
  if (!n.current || !e.current) return;
6833
6843
  let t = null, i = (i) => {
6834
6844
  if (e.current && n.current) {
@@ -6853,14 +6863,10 @@ function Va(e, t) {
6853
6863
  return typeof ResizeObserver < "u" && e.current.parentElement && (o = new ResizeObserver(i), o.observe(e.current.parentElement)), () => {
6854
6864
  window.removeEventListener("resize", a), o?.disconnect(), t !== null && cancelAnimationFrame(t);
6855
6865
  };
6856
- }, [
6857
- i,
6858
- e,
6859
- l
6860
- ]), {
6861
- viewer: n.current,
6862
- isInitialized: i,
6863
- initError: o
6866
+ }, [i, e]), {
6867
+ viewer: i,
6868
+ isInitialized: o,
6869
+ initError: s
6864
6870
  };
6865
6871
  }
6866
6872
  //#endregion
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "softbox",
3
3
  "private": false,
4
- "version": "4.20.0",
4
+ "version": "4.21.0",
5
5
  "homepage": "https://leming.github.io/softbox/",
6
6
  "type": "module",
7
7
  "description": "Batteries-included React 3D viewer — any GLB looks studio-shot in one line",