softbox 4.25.0 → 4.25.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/simple-viewer.cjs +7 -7
- package/dist/simple-viewer.es.js +673 -647
- package/package.json +3 -1
package/dist/simple-viewer.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./smoothstep-BsyRnZAu.cjs");let t=require("react");t=e.I(t,1);let n=require("three");n=e.I(n,1);let r=require("react/jsx-runtime");var i=`softboxVariants`;function a(t){let n=t??`meters`;if(!Object.prototype.hasOwnProperty.call(e.j,n))throw new e.F(`Unknown units '${String(n)}'. Valid values: ${Object.keys(e.j).join(`, `)}`,e.P.INVALID_PARAMETER);return e.j[n]}var o=2,s=120,c=75;function l(e){if(!e)return;let t=typeof e==`object`?e:{},n=(e,t)=>e!==void 0&&e>0?e:t;return{height:n(t.height,o),radius:Math.max(n(t.radius,s),c)}}function u(e){return{backgroundBlurriness:e.environment?.backgroundBlurriness,backgroundIntensity:e.environment?.backgroundIntensity,environmentIntensity:e.environment?.environmentIntensity,groundProjection:l(e.environment?.groundProjection)}}var d=`#1a1a1f`,f=e=>{if(Array.isArray(e))return e;if(e&&typeof e==`object`)return[e.x,e.y,e.z]},p=e=>e===void 0?void 0:String(e),m=class{configureScene(e,t,n){if(n.helpers){let r={grid:n.helpers.grid,axes:n.helpers.axes,gridColor:`#AAAAAA`},i=t.addHelpers(e,r);i.ok||console.warn(`Failed to add helpers:`,i.error)}let r=n.lighting;if(r){let n={ambient:r.ambientLight?{color:String(r.ambientLight.color),intensity:r.ambientLight.intensity}:void 0,hemisphere:r.hemisphereLight?{skyColor:String(r.hemisphereLight.skyColor),groundColor:String(r.hemisphereLight.groundColor),intensity:r.hemisphereLight.intensity}:void 0,directional:r.directionalLight?{color:p(r.directionalLight.color),intensity:r.directionalLight.intensity,position:f(r.directionalLight.position),castShadow:r.directionalLight.castShadow,shadow:r.directionalLight.shadow}:void 0,fill:r.fillLight?{color:p(r.fillLight.color),intensity:r.fillLight.intensity,position:f(r.fillLight.position)}:void 0,rim:r.rimLight?{color:p(r.rimLight.color),intensity:r.rimLight.intensity,position:f(r.rimLight.position)}:void 0},i=t.addLighting(e,n);i.ok||console.warn(`Failed to add lighting:`,i.error)}let i=n.environment?.url,a=(n.helpers?.studioEnvironment??!1)&&(n.helpers?.darkStudioMode??!1);if(n.backgroundColor&&!i&&!a){let r=String(n.backgroundColor),i=n.backgroundColorEdge,a=i===void 0?{topColor:r,bottomColor:r}:{topColor:r,bottomColor:String(i),radial:!0},o=t.createGradientBackground(e,a);o.ok||console.warn(`Failed to set background:`,o.error)}}async configureEnvironment(e,t,n,r,i,a){let o=await t.initialize({renderer:r,autoDispose:!0});if(a())return;o.ok||console.warn(`Failed to initialize environment service:`,o.error);let s=u(i),c=i.environment?.url;if(c){let r=await t.loadEnvironmentMap(c);if(a())return;if(r.ok){let n=t.applyToScene(e,r.value,s);n.ok||console.warn(`Failed to apply environment map:`,n.error);return}console.warn(`Failed to load environment map, falling back to the studio look:`,r.error),i.helpers?.studioEnvironment!==!1&&this.applyStudioEnvironment(e,t,n,i,s),this.paintFallbackBackdrop(e,n,i);return}i.helpers?.studioEnvironment&&this.applyStudioEnvironment(e,t,n,i,s)}paintFallbackBackdrop(e,t,n){if(!t||n.backgroundColor===void 0)return;let r=String(n.backgroundColor),i=n.backgroundColorEdge,a=i===void 0?{topColor:r,bottomColor:r}:{topColor:r,bottomColor:String(i),radial:!0},o=t.createGradientBackground(e,a);o.ok||console.warn(`Failed to paint the fallback backdrop:`,o.error)}applyStudioEnvironment(e,t,n,r,i){let a=t.createStudioEnvironment(r.environment?.studioLook);if(!a.ok){console.warn(`Failed to create studio environment:`,a.error);return}if(t.applyToScene(e,a.value,{...i,setBackground:!1}),r.helpers?.darkStudioMode&&n){let t=n.createGradientBackground(e,{topColor:d,bottomColor:d});t.ok||console.warn(`Failed to set dark studio background:`,t.error)}}},h=class{constructor(e={}){this.animationFrameId=null,this.lastRenderTime=0,this.idleTimeout=null,this.isIdle=!1,this.needsRender=!0,this.continuousRenderingEnabled=!1,this.continuousReasons=new Set,this.alwaysRender=!1,this.enableIdleDetection=e.enableIdleDetection??!0,this.idleDelay=e.idleDelay??1e3,this.targetFPS=e.targetFPS??60,this.frameInterval=1e3/this.targetFPS,this.enableFrameRateLimiting=e.enableFrameRateLimiting??!0,this.alwaysRender=e.alwaysRender??!1,this.lastRenderTime=performance.now()}requestRender(){this.needsRender=!0,this.wakeUp()}requireContinuous(e){this.continuousReasons.add(e),this.continuousRenderingEnabled=!0,this.wakeUp()}releaseContinuous(e){this.continuousReasons.delete(e),this.continuousRenderingEnabled=this.continuousReasons.size>0}hasContinuousDemand(){return this.continuousReasons.size>0}setAlwaysRender(e){this.alwaysRender=e,e&&this.wakeUp()}wakeUp(){this.idleTimeout!==null&&(clearTimeout(this.idleTimeout),this.idleTimeout=null),this.isIdle=!1}start(e){if(this.animationFrameId!==null)return;let t=n=>{if(this.animationFrameId===null)return;let r=n-this.lastRenderTime;if(this.enableFrameRateLimiting&&r<this.frameInterval){this.animationFrameId=requestAnimationFrame(t);return}(this.alwaysRender||this.needsRender||this.continuousRenderingEnabled)&&(e(r),this.lastRenderTime=n,this.needsRender=!1),this.enableIdleDetection&&!this.alwaysRender&&(this.continuousRenderingEnabled||this.needsRender?this.wakeUp():this.idleTimeout===null&&!this.isIdle&&(this.idleTimeout=window.setTimeout(()=>{this.isIdle=!0},this.idleDelay))),this.alwaysRender||!this.enableIdleDetection||!this.isIdle||this.continuousRenderingEnabled||this.needsRender?this.animationFrameId=requestAnimationFrame(t):this.animationFrameId=null};this.animationFrameId=requestAnimationFrame(t)}stop(){this.animationFrameId!==null&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.idleTimeout!==null&&(clearTimeout(this.idleTimeout),this.idleTimeout=null),this.isIdle=!1,this.needsRender=!1,this.continuousRenderingEnabled=!1,this.continuousReasons.clear(),this.alwaysRender=!1}isRunning(){return this.animationFrameId!==null}getIsIdle(){return this.isIdle}getNeedsRender(){return this.needsRender||this.continuousRenderingEnabled||this.alwaysRender}};function g(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function _(e,t){if(!g(e)||!g(t))return t===void 0?e:t;let n=t,r={...e};for(let e of Object.keys(n)){let t=n[e];if(t===void 0)continue;let i=r[e];r[e]=g(i)&&g(t)?_(i,t):t}return r}var v=e=>{typeof requestAnimationFrame==`function`?requestAnimationFrame(()=>setTimeout(()=>requestAnimationFrame(()=>setTimeout(e,0)),0)):setTimeout(e,0)},y=class{static serialize(e,t,n,r){let i=t.position,a=n.target||{x:0,y:0,z:0,set:()=>{},copy:()=>{},add:()=>{},multiply:()=>{},normalize:()=>{},length:()=>0};return{modelUrl:e,cameraPosition:{x:i.x,y:i.y,z:i.z},cameraTarget:{x:a.x,y:a.y,z:a.z},controlsTarget:{x:a.x,y:a.y,z:a.z},rendererSize:{width:r.clientWidth,height:r.clientHeight}}}static async restore(e,t,n,r){t.position.set(e.cameraPosition.x,e.cameraPosition.y,e.cameraPosition.z),t.lookAt({x:e.cameraTarget.x,y:e.cameraTarget.y,z:e.cameraTarget.z,set:()=>{},copy:()=>{},add:()=>{},multiply:()=>{},normalize:()=>{},length:()=>0}),n.target&&n.target.set(e.controlsTarget.x,e.controlsTarget.y,e.controlsTarget.z),n.update&&n.update(),e.modelUrl&&r&&await r(e.modelUrl)}};function b(e,t){e.type===`perspective`&&`aspect`in e&&(e.aspect=t),e.updateProjectionMatrix()}var x=class e{constructor(e={}){this.data=Object.freeze({status:`idle`,currentModel:null,error:null,isInitialized:!1,loadProgress:0,renderInfo:{frameCount:0,fps:0,lastRenderTime:0,averageRenderTime:0},...e})}get status(){return this.data.status}get currentModel(){return this.data.currentModel}get error(){return this.data.error}get isInitialized(){return this.data.isInitialized}get loadProgress(){return this.data.loadProgress}get renderInfo(){return this.data.renderInfo}setInitialized(){return new e({...this.data,isInitialized:!0,status:`idle`})}startLoading(){return new e({...this.data,status:`loading`,loadProgress:0,error:null})}updateLoadProgress(t){return new e({...this.data,loadProgress:Math.min(Math.max(0,t),1)})}setLoaded(t){return new e({...this.data,status:`loaded`,currentModel:t,loadProgress:1,error:null})}setError(t){return new e({...this.data,status:`error`,error:t,loadProgress:0})}startRendering(){return new e({...this.data,status:`rendering`})}updateRenderInfo(t){return new e({...this.data,renderInfo:{...this.data.renderInfo,...t}})}dispose(){return new e({...this.data,status:`disposed`,currentModel:null})}canLoad(){return this.data.isInitialized&&(this.data.status===`idle`||this.data.status===`loaded`||this.data.status===`error`||this.data.status===`rendering`)}canRender(){return this.data.isInitialized&&this.data.status===`loaded`&&this.data.currentModel!==null}isLoading(){return this.data.status===`loading`}hasError(){return this.data.status===`error`&&this.data.error!==null}toJSON(){return{...this.data}}},S=class{constructor(){this.state=new x,this.stateChangeCallbacks=new Set}getState(){return this.state}setInitialized(){this.updateState(this.state.setInitialized())}startLoading(){this.updateState(this.state.startLoading())}setLoaded(e){this.updateState(this.state.setLoaded(e))}setError(e){this.updateState(this.state.setError(e))}startRendering(){this.updateState(this.state.startRendering())}updateRenderInfo(e){this.updateState(this.state.updateRenderInfo(e))}setDisposed(){this.updateState(this.state.dispose())}canLoad(){return this.state.canLoad()}isInitialized(){return this.state.isInitialized}getStatus(){return this.state.status}getCurrentModel(){return this.state.currentModel}onStateChange(e){return this.stateChangeCallbacks.add(e),()=>{this.stateChangeCallbacks.delete(e)}}clearCallbacks(){this.stateChangeCallbacks.clear()}updateState(e){this.state=e,this.stateChangeCallbacks.forEach(t=>{try{t(e)}catch(e){console.error(`Error in state change callback:`,e)}})}};function C(e){let t=e.toDataURL(`image/png`);return!t||t===`data:,`?null:t}var ee=class{constructor(e){this.screenshotElement=null,this.isShowingScreenshot=!1,this.renderer=e.renderer,this.onRestore=e.onRestore}isActive(){return this.isShowingScreenshot}captureAndReplace(e,t,n,r){if(this.isShowingScreenshot)return;let i=this.renderer.getDomElement(),a=C(i);if(!a){console.warn(`[ScreenshotManager] Screenshot capture produced no image, keeping live scene`);return}let o=document.createElement(`img`);o.src=a,o.style.position=`absolute`,o.style.top=`0`,o.style.left=`0`,o.style.width=`100%`,o.style.height=`100%`,o.style.pointerEvents=`auto`,o.style.cursor=`grab`;let s=i.parentElement;if(s){this.serializedSceneState=y.serialize(n,e,t,i),i.style.display=`none`,s.appendChild(o),this.screenshotElement=o,this.isShowingScreenshot=!0;let a=()=>{this.restore()};o.addEventListener(`mousedown`,a),o.addEventListener(`touchstart`,a);let c=()=>{this.isShowingScreenshot&&this.restore()};window.addEventListener(`resize`,c),this.screenshotResizeHandler=c,r?.()}}async restore(){if(!this.isShowingScreenshot||!this.screenshotElement)return;let e=this.renderer.getDomElement(),t=this.screenshotElement.parentElement;t&&(this.screenshotResizeHandler&&=(window.removeEventListener(`resize`,this.screenshotResizeHandler),void 0),t.removeChild(this.screenshotElement),e.style.display=``,this.screenshotElement=null,this.isShowingScreenshot=!1,this.onRestore&&await this.onRestore())}getSerializedState(){return this.serializedSceneState}dispose(){this.screenshotResizeHandler&&=(window.removeEventListener(`resize`,this.screenshotResizeHandler),void 0),this.screenshotElement&&this.screenshotElement.parentElement&&this.screenshotElement.parentElement.removeChild(this.screenshotElement),this.isShowingScreenshot&&(this.renderer.getDomElement().style.display=``),this.screenshotElement=null,this.isShowingScreenshot=!1,this.serializedSceneState=void 0}},w=class{constructor(e){this.currentModel=null,this.currentModelUrl=null,this.currentVariants=[],this.modelLoader=e.modelLoader,this.scene=e.scene,this.camera=e.camera,this.controls=e.controls,this.floorAlignmentService=e.floorAlignmentService,this.sceneSetupService=e.sceneSetupService,this.autoFitToObject=e.autoFitToObject??!1,this.floorAlignment=e.floorAlignment??!0,this.unitsScaleToMeters=e.unitsScaleToMeters??1}getCurrentModel(){return this.currentModel}getLastModelUrl(){return this.lastModelUrl}getCurrentModelUrl(){return this.currentModelUrl}getVariantNames(){return[...this.currentVariants]}async loadModel(t,n){let r=performance.now();try{let i;if(typeof t==`string`){this.lastModelUrl=t,n.emit(`model:loading`,{url:t});let e=await this.modelLoader.load(t,(e,r)=>{n.emit(`model:progress`,{url:t,loaded:e,total:r})});if(!e.ok)throw e.error;i=e.value.scene,this.currentModelUrl=t,this.currentVariants=e.value.userData?.softboxVariants??[]}else i=t,this.currentModelUrl=null,this.currentVariants=[];if(this.unitsScaleToMeters!==1){if(!this.sceneSetupService)throw new e.F(`A units conversion is configured but no scene setup service is available to apply it`,e.P.INVALID_PARAMETER);let t=this.sceneSetupService.wrapInUnitsScaleGroup(i,this.unitsScaleToMeters);if(!t.ok)throw t.error;i=t.value}this.currentModel&&(this.scene.remove(this.currentModel),this.disposeObject(this.currentModel));let a=this.scene.add(i);if(!a.ok)throw a.error;if(this.floorAlignment&&this.floorAlignmentService){let e=this.floorAlignmentService.alignToFloor(i);e.ok||console.warn(`Failed to align model to floor:`,e.error)}if(i.traverse(e=>{`castShadow`in e&&`receiveShadow`in e&&(e.castShadow=!0,e.receiveShadow=!0)}),this.currentModel=i,this.sceneSetupService){let e=this.sceneSetupService.addDynamicGrid(this.scene,i,2);if(e.ok||console.warn(`Failed to add dynamic grid:`,e.error),this.floorAlignment){let e=this.sceneSetupService.snapObjectToFloor(this.scene,i);e.ok||console.warn(`Failed to snap object to floor:`,e.error)}let t=this.sceneSetupService.fitShadowCameraToObject(this.scene,i);t.ok||console.warn(`Failed to fit shadow camera to object:`,t.error);let n=this.sceneSetupService.resetContactShadow(this.scene);n.ok||console.warn(`Failed to reset the contact shadow:`,n.error)}if(this.autoFitToObject&&this.sceneSetupService){let e=this.sceneSetupService.fitCameraToObject(i,this.camera,this.controls);e.ok||console.warn(`Failed to fit camera to object:`,e.error)}let o=performance.now()-r;return n.emit(`model:loaded`,{model:i,loadTime:o}),e.N.ok(i)}catch(r){let i=r instanceof e.F?r:new e.F(`Failed to load model`,e.P.MODEL_LOAD_FAILED,{originalError:r,source:t});return n.emit(`model:error`,{error:i,url:typeof t==`string`?t:void 0}),e.N.err(i)}}disposeCurrentModel(){this.currentModel&&=(this.scene.remove(this.currentModel),this.disposeObject(this.currentModel),null)}disposeObject(e){e.dispose()}dispose(){this.disposeCurrentModel(),this.modelLoader.dispose?.(),this.lastModelUrl=void 0}},T=class{constructor(e){this.scene=e.scene,this.pathTracingService=e.pathTracingService,this.environmentService=e.environmentService}updateServices(e){e.pathTracingService&&(this.pathTracingService=e.pathTracingService),e.environmentService&&(this.environmentService=e.environmentService)}disposeSceneResources(e=!1){this.scene.disposeContents({keepBackgrounds:!0}),this.triggerGarbageCollection()}disposeServices(){this.pathTracingService&&=(this.pathTracingService.dispose(),void 0),this.environmentService&&=(this.environmentService.dispose(),void 0)}dispose(){this.disposeServices(),this.scene.disposeContents(),this.triggerGarbageCollection()}triggerGarbageCollection(){globalThis.gc&&globalThis.gc?.()}},E=class{constructor(e){this.completeHandled=!1,this.suspendedForAnimation=!1,this.initialized=!1,this.initializing=!1,this.selfPauseListeners=new Set,this.deps=e}isEnabled(){return!!(this.deps.service&&(this.deps.getOptions().pathTracing?.enabled??!1))}getMaxSamples(){return this.deps.getOptions().pathTracing?.maxSamples??300}isCompleteHandled(){return this.completeHandled}isAccumulating(){return!!this.deps.service?.isEnabled()}onSelfPause(e){return this.selfPauseListeners.add(e),()=>this.selfPauseListeners.delete(e)}async initialize(){this.isEnabled()&&await this.ensureInitialized()}async ensureInitialized(){let{service:e,getOptions:t,isDisposed:n,renderer:r,renderLoopManager:i,schedule:a}=this.deps;if(!(!e||this.initialized||this.initializing)){this.initializing=!0;try{let o=await e.initialize({enabled:!0,renderer:r});if(n())return;if(!o.ok){this.deps.events.emit(`error`,{error:o.error}),console.warn(`Failed to initialize path tracing:`,o.error);return}this.initialized=!0;let s=t().pathTracing;s&&e.updateSettings({samples:s.maxSamples??300,bounces:s.bounces,transmissiveBounces:s.transmissiveBounces,renderScale:s.renderScale,lowResScale:s.lowResScale,dynamicLowRes:s.dynamicLowRes,enablePathTracing:s.enabled??!0}),e.events.on(`pathtracing:paused`,({reason:e})=>{i.releaseContinuous(`path-tracing`);let n=!!t().staticScene;n||i.setAlwaysRender(e===`gave-up`),!n&&e===`gave-up`||a(()=>{i.hasContinuousDemand()||i.stop()},100),e===`gave-up`&&this.selfPauseListeners.forEach(e=>e())})}finally{this.initializing=!1}}}async enableRuntime(){let{service:e,renderLoopManager:t,getOptions:n}=this.deps;return!e||(await this.ensureInitialized(),!this.initialized)||!(n().pathTracing?.enabled??!1)?!1:(e.setEnabled(!0),e.reset(!0),this.completeHandled=!1,this.suspendedForAnimation=!1,t.requireContinuous(`path-tracing`),!0)}disableRuntime(){let{service:e,renderLoopManager:t}=this.deps;e&&(e.setEnabled(!1),e.reset(),t.releaseContinuous(`path-tracing`),this.deps.getOptions().staticScene||t.setAlwaysRender(!0),this.completeHandled=!1,this.suspendedForAnimation=!1,this.selfPauseListeners.forEach(e=>e()))}resetAccumulation(e=!1){let{service:t,renderLoopManager:n}=this.deps;!t||!this.isEnabled()||(t.reset(e),this.completeHandled=!1,!t.isEnabled()&&(t.canResume()||this.suspendedForAnimation)&&(this.suspendedForAnimation=!1,t.setEnabled(!0),n.requireContinuous(`path-tracing`)))}suspendWhileAnimating(){let e=this.deps.service;if(e)if(e.isEnabled()){let t=!this.suspendedForAnimation;this.suspendedForAnimation=!0,e.setEnabled(!1),this.deps.renderLoopManager.releaseContinuous(`path-tracing`),t&&this.selfPauseListeners.forEach(e=>e())}else e.canResume()&&e.getSampleCount()>0&&(e.reset(),this.completeHandled=!1,this.suspendedForAnimation=!0)}getSampleCount(){return this.deps.service?.getSampleCount()||0}beforeFrame(){return{wasActive:this.deps.service?.isEnabled()||!1,samples:this.getSampleCount()}}render(e,t){let n=this.deps.service;if(!n||n.isPathTracerDisposed())return null;let r=n.getSampleCount(),i=r>=this.getMaxSamples()&&r>0;return!n.isEnabled()&&!i?null:(r===0&&(this.startTime=performance.now()),n.render(e,t))}detectCompletion(e,t){let n=this.deps.service;n&&(n.getSampleCount()||0)>=this.getMaxSamples()&&!this.completeHandled&&e.wasActive&&this.handleComplete(e.samples,t)}handleComplete(e,t){let{events:n,renderLoopManager:r,getOptions:i,schedule:a,replaceWithScreenshot:o}=this.deps;this.completeHandled=!0,r.releaseContinuous(`path-tracing`),i().staticScene||r.setAlwaysRender(!1),n.emit(`pathtracing:complete`,{samples:e,totalTime:t-(this.startTime||0)});let s=()=>{r.hasContinuousDemand()||r.stop()};if(i().replaceWithScreenshotOnComplete){a(()=>{o(),a(s,200)},100);return}r.requestRender(),a(s,100)}};function D(){return Array.from(`xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`,e=>e===`x`?`0123456789abcdef`[Math.floor(Math.random()*16)]:e===`y`?(Math.floor(Math.random()*16)&3|8).toString(16):e).join(``)}var te=e=>[e,`video/webm;codecs=vp9`,`video/webm;codecs=vp8`,`video/webm`,`video/mp4`].filter(e=>!!e).find(e=>MediaRecorder.isTypeSupported(e)),ne=class{constructor(e){this.pendingSettlers=new Set,this.pathTracedWaitSettlers=new Set,this.deps=e}async captureStill(t={}){return this.deps.isDisposed()?e.N.err(new e.F(`Cannot capture a still from a disposed viewer`,e.P.INVALID_STATE)):(await this.deps.awaitModelLoads().catch(()=>void 0),this.deps.isDisposed()?e.N.err(new e.F(`Viewer was disposed while a model load finished`,e.P.INVALID_STATE)):this.deps.isScreenshotActive()?e.N.err(new e.F(`Cannot capture a still while a screenshot is replacing the canvas`,e.P.INVALID_STATE)):this.deps.pathTracing.isEnabled()?this.capturePathTracedStill(t):this.captureRasterStill(t))}settleOnDispose(){[...this.pendingSettlers].forEach(e=>e(`disposed`))}notifyTurntableEnabled(){[...this.pathTracedWaitSettlers].forEach(e=>e(`turntable`))}async captureVideo(t={}){if(this.deps.isDisposed())return e.N.err(new e.F(`Cannot capture video from a disposed viewer`,e.P.INVALID_STATE));if(await this.deps.awaitModelLoads().catch(()=>void 0),this.deps.isDisposed())return e.N.err(new e.F(`Viewer was disposed while a model load finished`,e.P.INVALID_STATE));if(this.deps.isScreenshotActive())return e.N.err(new e.F(`Cannot capture video while a screenshot is replacing the canvas`,e.P.INVALID_STATE));let n=t.duration??3;if(!(n>0))return e.N.err(new e.F(`Video duration must be a positive number of seconds`,e.P.INVALID_PARAMETER));let r=this.deps.renderer.getDomElement();if(typeof MediaRecorder>`u`||typeof r.captureStream!=`function`)return e.N.err(new e.F(`Video capture needs MediaRecorder and canvas.captureStream support`,e.P.UNSUPPORTED_FORMAT));let i=r.captureStream(t.fps??30),a;try{a=new MediaRecorder(i,{mimeType:te(t.mimeType),videoBitsPerSecond:t.videoBitsPerSecond})}catch(t){return i.getTracks().forEach(e=>e.stop()),e.N.err(new e.F(`Failed to start the video recorder`,e.P.OPERATION_FAILED,{originalError:t}))}let o=i.getVideoTracks()[0],s=o?.requestFrame?.bind(o),c=s?this.deps.events.on(`render:complete`,()=>s()):()=>{},l=`video-capture:${D()}`;return this.deps.renderLoopManager.requireContinuous(l),this.deps.reviveRenderLoop(),this.deps.renderLoopManager.requestRender(),new Promise(t=>{let r=[],o=null,s=!1,u=e=>{s||(s=!0,this.pendingSettlers.delete(d),c(),o!==null&&clearTimeout(o),this.deps.renderLoopManager.releaseContinuous(l),i.getTracks().forEach(e=>e.stop()),t(e))},d=()=>{u(e.N.err(new e.F(`Viewer was disposed during video capture`,e.P.INVALID_STATE)));try{a.stop()}catch{}};this.pendingSettlers.add(d),a.ondataavailable=e=>{e.data.size>0&&r.push(e.data)},a.onstop=()=>{u(e.N.ok(new Blob(r,{type:a.mimeType||`video/webm`})))},a.onerror=()=>{u(e.N.err(new e.F(`Video recording failed`,e.P.OPERATION_FAILED)))},a.start(250),o=setTimeout(()=>{a.state!==`inactive`&&a.stop()},n*1e3)})}async capturePathTracedStill(t){if(t.width!==void 0||t.height!==void 0)return e.N.err(new e.F(`Path-traced stills are captured at the canvas resolution; omit width/height`,e.P.INVALID_PARAMETER));if(this.deps.isAutoRotating())return e.N.err(new e.F(`Cannot capture a path-traced still while the turntable is spinning — pause autoRotate first`,e.P.INVALID_STATE));let n=this.deps.pathTracing.isAccumulating()&&this.deps.getStatus()!==`error`;if(!this.deps.pathTracing.isCompleteHandled()&&n){let t=await this.waitForPathTracingOutcome();if(t===`disposed`)return e.N.err(new e.F(`Viewer was disposed while waiting for the path tracer`,e.P.INVALID_STATE));if(t===`error`)return e.N.err(new e.F(`Model failed while waiting for the path tracer`,e.P.RENDER_FAILED));if(t===`turntable`)return e.N.err(new e.F(`Cannot capture a path-traced still while the turntable is spinning — pause autoRotate first`,e.P.INVALID_STATE))}return this.readCanvasPng()}waitForPathTracingOutcome(){return new Promise(e=>{let t=()=>{},n=()=>{},r=()=>{},i=()=>{},a=o=>{this.pendingSettlers.delete(a),this.pathTracedWaitSettlers.delete(a),t(),n(),r(),i(),e(o)};this.pendingSettlers.add(a),this.pathTracedWaitSettlers.add(a),t=this.deps.events.once(`pathtracing:complete`,()=>a(`complete`)),n=this.deps.events.once(`model:error`,()=>a(`error`)),r=this.deps.pathTracing.onSelfPause(()=>a(`complete`)),i=this.deps.events.on(`controls:change`,()=>{this.deps.isAutoRotating()&&a(`turntable`)})})}captureRasterStill(t){let{renderer:n,scene:r,camera:i,renderLoopManager:a}=this.deps,o=n.getDomElement(),s=n.getPixelRatio(),c=o.clientWidth>0&&o.clientHeight>0,l=c?o.clientWidth:Math.round(o.width/s),u=c?o.clientHeight:Math.round(o.height/s);if(l<=0||u<=0)return e.N.err(new e.F(`Cannot capture: the canvas has no size`,e.P.INVALID_STATE));let d=l/u,f=Math.round(t.width??(t.height===void 0?l*s:t.height*d)),p=Math.round(t.height??(t.width===void 0?u*s:t.width/d)),m=n.capabilities.maxTextureSize;if(!Number.isFinite(f)||!Number.isFinite(p)||f<=0||p<=0||f>m||p>m)return e.N.err(new e.F(`Requested still size ${f}x${p} is outside 1..${m}`,e.P.INVALID_PARAMETER));n.setPixelRatio(1),n.setSize(f,p),b(i,f/p);let h=n.renderPostProcessed?n.renderPostProcessed(r,i):n.render(r,i),g=h.ok?this.readCanvasPng():e.N.err(h.error);return n.setSize(l,u),n.setPixelRatio(s),b(i,d),n.renderPostProcessed?n.renderPostProcessed(r,i):n.render(r,i),a.requestRender(),g}readCanvasPng(){let t=C(this.deps.renderer.getDomElement());return t?e.N.ok(t):e.N.err(new e.F(`Canvas produced an empty image`,e.P.RENDER_FAILED))}},re=class{constructor(e){this.deps=e}backgroundGradient(e,t){return t===void 0?{topColor:String(e),bottomColor:String(e)}:{topColor:String(e),bottomColor:String(t),radial:!0}}applyBackgroundColor(e){let t=this.deps.getOptions();if(t.environment?.url||!this.deps.sceneSetupService)return;let n=this.backgroundGradient(e,t.backgroundColorEdge),r=this.deps.sceneSetupService.createGradientBackground(this.deps.scene,n);if(!r.ok){console.warn(`Failed to update background color:`,r.error);return}this.deps.renderLoopManager.requestRender()}async setEnvironmentMap(t){if(this.deps.isDisposed())return e.N.err(new e.F(`Viewer is disposed`,e.P.INVALID_STATE));if(!this.deps.environmentService)return e.N.err(new e.F(`Environment service unavailable`,e.P.INVALID_STATE));let n=await this.deps.environmentService.loadEnvironmentMap(t);if(this.deps.isDisposed())return e.N.err(new e.F(`Viewer is disposed`,e.P.INVALID_STATE));if(!n.ok)return e.N.err(n.error);let r=this.deps.getOptions(),i=this.deps.environmentService.applyToScene(this.deps.scene,n.value,{...u(r),setBackground:!0});return i.ok?(this.deps.mergeOptions({environment:{url:t}}),this.repaintAfterEnvironmentChange(),e.N.ok(void 0)):i}resetEnvironment(){if(this.deps.isDisposed())return e.N.err(new e.F(`Viewer is disposed`,e.P.INVALID_STATE));if(!this.deps.environmentService)return e.N.err(new e.F(`Environment service unavailable`,e.P.INVALID_STATE));let t=this.deps.environmentService.createStudioEnvironment(this.deps.getOptions().environment?.studioLook);if(!t.ok)return e.N.err(t.error);let n=this.deps.environmentService.applyToScene(this.deps.scene,t.value,{setBackground:!1});if(!n.ok)return n;let r=this.deps.getOptions();return r.environment&&(r.environment.url=void 0),this.restoreBackgroundColor(),this.repaintAfterEnvironmentChange(),e.N.ok(void 0)}async setBackgroundImage(t){if(this.deps.isDisposed())return e.N.err(new e.F(`Viewer is disposed`,e.P.INVALID_STATE));if(!this.deps.environmentService)return e.N.err(new e.F(`Environment service unavailable`,e.P.INVALID_STATE));let n=await this.deps.environmentService.setBackgroundImage(this.deps.scene,t);return this.deps.isDisposed()?e.N.err(new e.F(`Viewer is disposed`,e.P.INVALID_STATE)):n.ok?(this.deps.environmentService.removeGroundProjection(this.deps.scene),this.repaintAfterEnvironmentChange(),e.N.ok(void 0)):n}setBackgroundColor(t){if(this.deps.isDisposed())return e.N.err(new e.F(`Viewer is disposed`,e.P.INVALID_STATE));if(!this.deps.sceneSetupService)return e.N.err(new e.F(`Scene setup service unavailable`,e.P.INVALID_STATE));let n=this.deps.sceneSetupService.createGradientBackground(this.deps.scene,this.backgroundGradient(t,void 0));return n.ok?(this.deps.environmentService?.removeGroundProjection(this.deps.scene),this.deps.mergeOptions({backgroundColor:t}),this.deps.getOptions().backgroundColorEdge=void 0,this.repaintAfterEnvironmentChange(),e.N.ok(void 0)):n}restoreBackgroundColor(){let e=this.deps.getOptions(),t=e.backgroundColor;if(t===void 0||!this.deps.sceneSetupService)return;let n=this.deps.sceneSetupService.createGradientBackground(this.deps.scene,this.backgroundGradient(t,e.backgroundColorEdge));n.ok||console.warn(`Failed to restore the background color:`,n.error)}repaintAfterEnvironmentChange(){this.deps.pathTracing.resetAccumulation(!0),this.deps.reviveRenderLoop(),this.deps.renderLoopManager.requestRender()}},ie=class t{constructor(t){this.frameCount=0,this.disposed=!1,this.pendingTimers=new Set,this.modelLoadChain=Promise.resolve(),this.controlsChangeUnsubscribe=null,this.renderer=t.renderer,this.scene=t.scene,this.camera=t.camera,this.controls=t.controls,this.options=t.options,this.rendererOptions=t.rendererOptions,this.sceneSetupService=t.sceneSetupService,this.environmentService=t.environmentService,this.selectionService=t.selectionService,this.anchorProjectionService=t.anchorProjectionService,this.animationService=t.animationService,this.deferToNextFrame=t.deferToNextFrame??v,this.stateManager=new S,this.screenshotManager=new ee({renderer:this.renderer,onRestore:async()=>{await this.restoreFromScreenshot()}});let n=a(this.options.units);this.modelManager=new w({modelLoader:t.modelLoader,scene:this.scene,camera:this.camera,controls:this.controls,floorAlignmentService:t.floorAlignmentService,sceneSetupService:this.sceneSetupService,autoFitToObject:this.options.camera?.autoFitToObject,floorAlignment:this.options.floorAlignment,unitsScaleToMeters:n}),this.resourceManager=new T({scene:this.scene,pathTracingService:t.pathTracingService,environmentService:this.environmentService}),this.sceneConfigurator=new m,this.events=new e.M;let r=this.options.rendering||{},i=this.options.staticScene!==!1;this.renderLoopManager=new h({enableIdleDetection:r.enableIdleDetection??i,idleDelay:r.idleDelay,targetFPS:r.targetFPS,enableFrameRateLimiting:r.enableFrameRateLimiting,alwaysRender:!1}),this.pathTracing=new E({service:t.pathTracingService,events:this.events,renderLoopManager:this.renderLoopManager,renderer:this.renderer,getOptions:()=>this.options,isDisposed:()=>this.disposed,schedule:(e,t)=>this.schedule(e,t),replaceWithScreenshot:()=>this.replaceWithScreenshot()}),this.capture=new ne({renderer:this.renderer,scene:this.scene,camera:this.camera,events:this.events,renderLoopManager:this.renderLoopManager,pathTracing:this.pathTracing,getStatus:()=>this.stateManager.getStatus(),isDisposed:()=>this.disposed,awaitModelLoads:()=>this.modelLoadChain,reviveRenderLoop:()=>this.reviveRenderLoop(),isAutoRotating:()=>this.controls.autoRotate,isScreenshotActive:()=>this.screenshotManager.isActive()}),this.environment=new re({scene:this.scene,renderLoopManager:this.renderLoopManager,pathTracing:this.pathTracing,environmentService:this.environmentService,sceneSetupService:this.sceneSetupService,getOptions:()=>this.options,mergeOptions:e=>{this.options=_(this.options,e)},isDisposed:()=>this.disposed,reviveRenderLoop:()=>this.reviveRenderLoop()})}async initialize(){try{this.renderer.setPostProcessingErrorHandler?.(t=>{this.disposed||this.events.emit(`error`,{error:new e.F(`Post-processing effects failed to load; rendering without them`,e.P.POST_PROCESSING_FAILED,{originalError:t})})});let t=this.renderer.initialize(this.rendererOptions||{});return t.ok?(this.sceneSetupService&&this.sceneConfigurator.configureScene(this.scene,this.sceneSetupService,this.options),this.environmentService&&(await this.sceneConfigurator.configureEnvironment(this.scene,this.environmentService,this.sceneSetupService,this.renderer,this.options,()=>this.disposed),this.disposed)||(await this.pathTracing.initialize(),this.disposed)?e.N.ok(void 0):(this.selectionService&&this.selectionService.initialize({canvas:this.renderer.getDomElement(),camera:this.camera,getPickRoot:()=>this.modelManager.getCurrentModel(),bvh:this.options.selection?.bvh,onPick:e=>{e&&!this.disposed&&this.events.emit(`object:selected`,e)}}),this.stateManager.setInitialized(),this.startRenderLoop(),this.controlsChangeUnsubscribe=this.controls.onChange(()=>{this.disposed||(this.reviveRenderLoop(),this.renderLoopManager.requestRender())}),this.options.staticScene?this.pathTracing.isEnabled()&&this.renderLoopManager.requireContinuous(`path-tracing`):this.renderLoopManager.setAlwaysRender(!0),this.options.controls?.autoRotate&&this.renderLoopManager.requireContinuous(`turntable`),this.renderLoopManager.requestRender(),e.N.ok(void 0))):t}catch(t){let n=new e.F(`Failed to initialize viewer`,e.P.INITIALIZATION_FAILED,{originalError:t});return this.stateManager.setError(n),this.events.emit(`error`,{error:n}),e.N.err(n)}}loadModel(e){let t=this.modelLoadChain.then(()=>this.runLoadModel(e));return this.modelLoadChain=t.then(()=>void 0,()=>void 0),t}async runLoadModel(t){if(this.disposed)return e.N.err(new e.F(`Cannot load model after dispose`,e.P.INVALID_STATE));if(!this.stateManager.canLoad())return e.N.err(new e.F(`Cannot load model in current state`,e.P.INVALID_STATE,{currentState:this.stateManager.getStatus(),isInitialized:this.stateManager.isInitialized()}));try{this.stateManager.startLoading();let n=await this.modelManager.loadModel(t,this.events);return this.disposed?(n.ok&&this.modelManager.disposeCurrentModel(),e.N.err(new e.F(`Viewer was disposed while the model was loading`,e.P.INVALID_STATE))):n.ok?(this.stateManager.setLoaded(n.value),this.attachAnimations(n.value),this.options.variant&&this.applyVariantOrWarn(this.options.variant),this.reviveRenderLoop(),this.renderLoopManager.requestRender(),this.pathTracing.resetAccumulation(!0),this.scheduleContactShadowBake(n.value),e.N.ok(void 0)):(this.stateManager.setError(n.error),n)}catch(n){let r=n instanceof e.F?n:new e.F(`Failed to load model`,e.P.MODEL_LOAD_FAILED,{originalError:n,source:t});return this.stateManager.setError(r),e.N.err(r)}}startRenderLoop(){this.renderLoopManager.start(e=>{if(this.disposed){this.renderLoopManager.stop();return}if(!this.stateManager.isInitialized()||this.stateManager.getStatus()===`error`)return;if(!this.renderer||this.renderer.isDisposed()){this.renderLoopManager.stop();return}let t=performance.now(),n=e>0?1e3/e:0,r=this.animationService?.isPlaying()??!1;this.controls.enabled&&this.controls.update()&&(this.events.emit(`controls:change`,{controls:this.controls}),r||this.pathTracing.resetAccumulation(),this.renderLoopManager.requestRender()),r&&this.animationService&&(this.animationService.update(e/1e3),this.pathTracing.suspendWhileAnimating());let i=this.pathTracing.beforeFrame();this.renderFrame().catch(e=>{console.error(`[ViewerCore] Render frame error:`,e)}),this.pathTracing.detectCompletion(i,t),this.frameCount++,this.stateManager.updateRenderInfo({frameCount:this.frameCount,fps:Math.round(n),lastRenderTime:performance.now()-t})})}stopRenderLoop(){this.renderLoopManager.stop()}schedule(e,t){let n=setTimeout(()=>{this.pendingTimers.delete(n),!this.disposed&&e()},t);this.pendingTimers.add(n)}async renderFrame(){let e=performance.now();if(!this.renderer||!this.scene||!this.camera){console.warn(`[ViewerCore] Cannot render - components not initialized`);return}if(this.screenshotManager.isActive())return;this.stateManager.startRendering();let t=await(this.pathTracing.render(this.scene,this.camera)??Promise.resolve(this.renderRaster()));if(!t.ok){console.error(`[ViewerCore] Render failed:`,t.error),this.events.emit(`error`,{error:t.error});return}this.events.emit(`render:complete`,{frame:this.frameCount,renderTime:performance.now()-e,samples:this.pathTracing.getSampleCount()})}renderRaster(){return this.renderer.renderPostProcessed?this.renderer.renderPostProcessed(this.scene,this.camera):this.renderer.render(this.scene,this.camera)}updateOptions(e){if(this.disposed)return;let n=this.options.animations?.autoplay,r=this.options.controls?.autoRotate,i=this.options.pathTracing?.enabled??!1,a=t.postEffectsKey(this.options),o=this.options.backgroundColor,s=this.options.backgroundColorEdge,c=this.options.environment?.environmentIntensity,l=this.options.variant;this.options=_(this.options,e),`backgroundColorEdge`in e&&(this.options.backgroundColorEdge=e.backgroundColorEdge),e.renderer&&`colorGrade`in e.renderer&&this.options.renderer&&(this.options.renderer.colorGrade=e.renderer.colorGrade);let u=!1;(e.backgroundColor!==void 0||e.backgroundColorEdge!==void 0)&&this.options.backgroundColor!==void 0&&(this.environment.applyBackgroundColor(this.options.backgroundColor),(this.options.backgroundColor!==o||this.options.backgroundColorEdge!==s)&&!this.options.environment?.url&&this.pathTracing.resetAccumulation(!0));let d=e.renderer?.toneMappingExposure;d!==void 0&&(this.renderer.setToneMappingExposure(d),u=!0);let f=t.postEffectsKey(this.options);e.renderer&&f!==a&&this.renderer.setPostProcessing&&(this.renderer.setPostProcessing({bloom:this.options.renderer?.bloom??!1,vignette:this.options.renderer?.vignette??!1,filmGrain:this.options.renderer?.filmGrain??!1,colorGrade:this.options.renderer?.colorGrade??!1}),this.pathTracing.resetAccumulation(!0),u=!0);let p=e.environment?.environmentIntensity;p!==void 0&&(this.scene.setEnvironmentIntensity(p),p!==c&&this.pathTracing.resetAccumulation(!0),u=!0);let m=e.controls?.autoRotate;m!==void 0&&m!==r&&(this.controls.autoRotate=m,m?(this.renderLoopManager.requireContinuous(`turntable`),this.capture.notifyTurntableEnabled()):this.renderLoopManager.releaseContinuous(`turntable`),u=!0);let h=e.controls?.autoRotateSpeed;h!==void 0&&(this.controls.autoRotateSpeed=h,u=!0);let g=e.animations?.autoplay;g!==void 0&&g!==n&&(g?this.modelManager.getCurrentModel()&&this.autoplayFromOptions(g):this.pauseAnimations(),u=!0);let v=e.animations?.speed;v!==void 0&&(this.animationService?.setSpeed(v),u=!0);let y=e.pathTracing?.enabled;if(y!==void 0&&y!==i&&(this.setPathTracingEnabled(y),u=!0),`variant`in e){let t=e.variant??null;t!==(l??null)&&this.applyVariantOrWarn(t)}u&&(this.reviveRenderLoop(),this.renderLoopManager.requestRender())}static postEffectsKey(e){let t=e.renderer;return JSON.stringify([t?.bloom??!1,t?.vignette??!1,t?.filmGrain??!1,t?.colorGrade??!1])}setEnvironmentMap(e){return this.environment.setEnvironmentMap(e)}resetEnvironment(){return this.environment.resetEnvironment()}setBackgroundImage(e){return this.environment.setBackgroundImage(e)}setBackgroundColor(e){return this.environment.setBackgroundColor(e)}resize(e,t){if(this.disposed)return;let n=e/t,r=this.renderer.getDomElement(),i=this.renderer.getPixelRatio(),a=r.width===Math.floor(e*i)&&r.height===Math.floor(t*i),o=this.camera.type===`perspective`&&`aspect`in this.camera?this.camera.aspect:null,s=o===null||Math.abs(o-n)<1e-6;if(!(a&&s)){b(this.camera,n),a||this.renderer.setSize(e,t);try{this.renderRaster()}catch{}this.pathTracing.resetAccumulation(),this.reviveRenderLoop(),this.renderLoopManager.requestRender()}}getState(){return this.stateManager.getState()}onStateChange(e){return this.stateManager.onStateChange(e)}getEvents(){return this.events}getDomElement(){return this.renderer.getDomElement()}getRenderer(){return this.renderer}getScene(){return this.scene}getCamera(){return this.camera}getControls(){return this.controls}getModel(){return this.modelManager.getCurrentModel()}requestRender(){this.renderLoopManager.requestRender()}reviveRenderLoop(){this.stateManager.isInitialized()&&!this.renderLoopManager.isRunning()&&this.startRenderLoop()}setPathTracingEnabled(t){t?this.pathTracing.enableRuntime().then(e=>{e&&!this.disposed&&(this.reviveRenderLoop(),this.renderLoopManager.requestRender())}).catch(t=>{this.disposed||this.events.emit(`error`,{error:new e.F(`Failed to enable path tracing`,e.P.PATH_TRACING_INIT_FAILED,{originalError:t})})}):(this.pathTracing.disableRuntime(),this.reviveRenderLoop(),this.renderLoopManager.requestRender())}getAnimationNames(){return this.animationService?.getClipNames()??[]}getVariantNames(){return this.modelManager.getVariantNames()}getModelUrl(){return this.modelManager.getCurrentModelUrl()}setMaterialVariant(t){let n=this.modelManager.getCurrentModel();return n&&t!==null&&!this.modelManager.getVariantNames().includes(t)?e.N.err(new e.F(`Unknown material variant '${t}'`,e.P.INVALID_PARAMETER)):(this.options.variant=t??void 0,!n||!this.sceneSetupService||this.sceneSetupService.applyMaterialVariant(n,t).then(e=>{if(!e.ok){console.warn(`Failed to apply material variant:`,e.error);return}let t=this.disposed||this.modelManager.getCurrentModel()!==n;!e.value||t||(this.pathTracing.resetAccumulation(!0),this.reviveRenderLoop(),this.renderLoopManager.requestRender())}),e.N.ok(void 0))}applyVariantOrWarn(e){let t=this.setMaterialVariant(e);t.ok||console.warn(`Failed to apply material variant:`,t.error)}playAnimations(t){if(!this.animationService)return t===void 0?e.N.ok(void 0):e.N.err(new e.F(`Cannot play animation clip '${t}': the viewer was assembled without an animation service`,e.P.INVALID_STATE));let n=this.animationService.play(t);return n.ok?(this.animationService.isPlaying()&&(this.sceneSetupService?.setContactShadowMode(this.scene,`live`),this.renderLoopManager.requireContinuous(`animations`),this.reviveRenderLoop(),this.renderLoopManager.requestRender()),e.N.ok(void 0)):n}autoplayFromOptions(e){let t=this.playAnimations(typeof e==`string`?e:void 0);t.ok||console.error(`animations.autoplay failed:`,t.error.message)}pauseAnimations(){this.animationService?.pause(),this.renderLoopManager.releaseContinuous(`animations`),this.rebakeContactShadowForCurrentPose(),this.pathTracing.resetAccumulation(!0),this.renderLoopManager.requestRender()}rebakeContactShadowForCurrentPose(){let e=this.modelManager.getCurrentModel();if(!e||!this.sceneSetupService)return;let t=this.sceneSetupService.bakeContactShadow(this.scene,e,this.renderer);t.ok||console.warn(`Failed to bake contact shadow:`,t.error)}scheduleContactShadowBake(e){this.deferToNextFrame(()=>{this.disposed||this.modelManager.getCurrentModel()!==e||this.animationService?.isPlaying()||(this.rebakeContactShadowForCurrentPose(),this.reviveRenderLoop(),this.renderLoopManager.requestRender())})}attachAnimations(e){if(!this.animationService)return;this.renderLoopManager.releaseContinuous(`animations`),this.animationService.attach(e);let t=this.options.animations;t?.speed!==void 0&&this.animationService.setSpeed(t.speed);let n=t?.autoplay;n&&this.autoplayFromOptions(n)}createAnchorProjector(){return this.anchorProjectionService?this.anchorProjectionService.createProjector({camera:this.camera,getCanvas:()=>this.renderer.getDomElement(),getModel:()=>this.getModel()}):null}captureStill(e={}){return this.capture.captureStill(e)}captureVideo(e={}){return this.capture.captureVideo(e)}replaceWithScreenshot(){let e=this.modelManager.getLastModelUrl();this.screenshotManager.captureAndReplace(this.camera,this.controls,e,()=>{this.modelManager.disposeCurrentModel(),this.resourceManager.disposeSceneResources(!0)})}async restoreFromScreenshot(){let e=this.screenshotManager.getSerializedState();e&&await y.restore(e,this.camera,this.controls,async e=>{let t=await this.loadModel(e);t.ok||console.error(`[ViewerCore] Failed to reload model:`,t.error)}),this.renderLoopManager.isRunning()||this.startRenderLoop(),this.renderLoopManager.requestRender()}isDisposed(){return this.disposed}dispose(){this.disposed=!0,this.pendingTimers.forEach(e=>clearTimeout(e)),this.pendingTimers.clear(),this.stopRenderLoop(),this.controlsChangeUnsubscribe?.(),this.controlsChangeUnsubscribe=null,this.selectionService?.dispose(),this.animationService?.detach(),this.modelManager.dispose(),this.resourceManager.dispose(),this.screenshotManager.dispose(),this.controls.dispose(),this.renderer.dispose(),this.stateManager.setDisposed(),this.capture.settleOnDispose(),this.events.removeAllListeners(),this.stateManager.clearCallbacks()}},O=class e{constructor(e){this.vector=e}get x(){return this.vector.x}set x(e){this.vector.x=e}get y(){return this.vector.y}set y(e){this.vector.y=e}get z(){return this.vector.z}set z(e){this.vector.z=e}set(e,t,n){this.vector.set(e,t,n)}copy(e){this.vector.set(e.x,e.y,e.z)}add(e){this.vector.x+=e.x,this.vector.y+=e.y,this.vector.z+=e.z}multiply(e){this.vector.x*=e.x,this.vector.y*=e.y,this.vector.z*=e.z}normalize(){this.vector.normalize()}length(){return this.vector.length()}getThreeVector(){return this.vector}static fromThreeVector(t){return new e(t)}static create(t=0,r=0,i=0){return new e(new n.Vector3(t,r,i))}},k=class{constructor(e){this.euler=e}get x(){return this.euler.x}set x(e){this.euler.x=e}get y(){return this.euler.y}set y(e){this.euler.y=e}get z(){return this.euler.z}set z(e){this.euler.z=e}set(e,t,n){this.euler.set(e,t,n)}copy(e){this.euler.set(e.x,e.y,e.z)}add(e){this.euler.set(this.euler.x+e.x,this.euler.y+e.y,this.euler.z+e.z)}multiply(e){this.euler.set(this.euler.x*e.x,this.euler.y*e.y,this.euler.z*e.z)}normalize(){let e=this.length();e>0&&this.euler.set(this.euler.x/e,this.euler.y/e,this.euler.z/e)}length(){return Math.hypot(this.euler.x,this.euler.y,this.euler.z)}},A=class t{constructor(e){this.object=e,this.positionAdapter=O.fromThreeVector(e.position),this.rotationAdapter=new k(e.rotation),this.scaleAdapter=O.fromThreeVector(e.scale)}get id(){return this.object.uuid}get name(){return this.object.name}set name(e){this.object.name=e}get visible(){return this.object.visible}set visible(e){this.object.visible=e}get castShadow(){return this.object.castShadow}set castShadow(e){this.object.castShadow=e}get receiveShadow(){return this.object.receiveShadow}set receiveShadow(e){this.object.receiveShadow=e}get position(){return this.positionAdapter}get rotation(){return this.rotationAdapter}get scale(){return this.scaleAdapter}add(n){try{return n instanceof t?(this.object.add(n.getThreeObject()),e.N.ok(void 0)):e.N.err(new e.F(`Child must be a ThreeObject3DAdapter`,e.P.INVALID_PARAMETER))}catch(t){return e.N.err(new e.F(`Failed to add child object`,e.P.SCENE_OPERATION_FAILED,{originalError:t}))}}remove(n){try{return n instanceof t?(this.object.remove(n.getThreeObject()),e.N.ok(void 0)):e.N.err(new e.F(`Child must be a ThreeObject3DAdapter`,e.P.INVALID_PARAMETER))}catch(t){return e.N.err(new e.F(`Failed to remove child object`,e.P.SCENE_OPERATION_FAILED,{originalError:t}))}}traverse(e){this.object.traverse(n=>{e(new t(n))})}clone(){return new t(this.object.clone())}dispose(){e.v(this.object)}getThreeObject(){return this.object}static fromThreeObject(e){return new t(e)}static create(){return new t(new n.Object3D)}},ae=`softboxOwnedBackground`;function oe(e){e.userData[ae]=!0}function se(e){let t=e.background;t instanceof n.Texture&&t.userData?.[ae]&&t!==e.environment&&t.dispose()}var j=class{constructor(e){this.scene=e||new n.Scene}get id(){return this.scene.uuid}get name(){return this.scene.name}set name(e){this.scene.name=e}add(t){try{return t instanceof A?(this.scene.add(t.getThreeObject()),e.N.ok(void 0)):e.N.err(new e.F(`Object must be a ThreeObject3DAdapter`,e.P.INVALID_PARAMETER))}catch(t){return e.N.err(new e.F(`Failed to add object to scene`,e.P.SCENE_OPERATION_FAILED,{originalError:t}))}}remove(t){try{return t instanceof A?(this.scene.remove(t.getThreeObject()),e.N.ok(void 0)):e.N.err(new e.F(`Object must be a ThreeObject3DAdapter`,e.P.INVALID_PARAMETER))}catch(t){return e.N.err(new e.F(`Failed to remove object from scene`,e.P.SCENE_OPERATION_FAILED,{originalError:t}))}}clear(){for(;this.scene.children.length>0;)this.scene.remove(this.scene.children[0])}disposeContents(t){e.y(this.scene,t)}traverse(e){this.scene.traverse(t=>{e(new A(t))})}get background(){return this.scene.background instanceof n.Color?new ce(this.scene.background):this.scene.background instanceof n.Texture?new le(this.scene.background):null}set background(e){se(this.scene),e instanceof ce?this.scene.background=e.getThreeColor():e instanceof le?this.scene.background=e.getThreeTexture():this.scene.background=null}get fog(){return this.scene.fog?new ue(this.scene.fog):null}set fog(e){e instanceof ue?this.scene.fog=e.getThreeFog():this.scene.fog=null}get environment(){return this.scene.environment?new le(this.scene.environment):null}set environment(e){e instanceof le?this.scene.environment=e.getThreeTexture():this.scene.environment=null}setEnvironmentIntensity(e){this.scene.environmentIntensity=e}getInternalRenderer(){return this.scene}getThreeScene(){return this.scene}},ce=class{constructor(e){this.color=e}get r(){return this.color.r}set r(e){this.color.r=e}get g(){return this.color.g}set g(e){this.color.g=e}get b(){return this.color.b}set b(e){this.color.b=e}setHex(e){this.color.setHex(e)}setRGB(e,t,n){this.color.setRGB(e,t,n)}getHex(){return this.color.getHex()}getThreeColor(){return this.color}},le=class{constructor(e){this.texture=e}get id(){return this.texture.uuid}get image(){return this.texture.image||null}get needsUpdate(){return this.texture.needsUpdate}set needsUpdate(e){this.texture.needsUpdate=e}dispose(){this.texture.dispose()}getThreeTexture(){return this.texture}},ue=class{constructor(e){this.fog=e}get color(){return new ce(this.fog.color)}get near(){return this.fog.near||0}get far(){return this.fog.far||1e3}getThreeFog(){return this.fog}},de=class extends A{constructor(e){super(e),this.camera=e}get near(){return this.camera instanceof n.PerspectiveCamera||this.camera instanceof n.OrthographicCamera?this.camera.near:.1}set near(e){(this.camera instanceof n.PerspectiveCamera||this.camera instanceof n.OrthographicCamera)&&(this.camera.near=e)}get far(){return this.camera instanceof n.PerspectiveCamera||this.camera instanceof n.OrthographicCamera?this.camera.far:1e3}set far(e){(this.camera instanceof n.PerspectiveCamera||this.camera instanceof n.OrthographicCamera)&&(this.camera.far=e)}lookAt(e){e instanceof O?this.camera.lookAt(e.getThreeVector()):this.camera.lookAt(e.x,e.y,e.z)}updateProjectionMatrix(){(this.camera instanceof n.PerspectiveCamera||this.camera instanceof n.OrthographicCamera)&&this.camera.updateProjectionMatrix()}getWorldDirection(e){let t=new n.Vector3;this.camera.getWorldDirection(t),e.set(t.x,t.y,t.z)}getInternalRenderer(){return this.camera}getThreeCamera(){return this.camera}},fe=class e extends de{constructor(e){let t=e||new n.PerspectiveCamera;super(t),this.perspectiveCamera=t}get type(){return`perspective`}get fov(){return this.perspectiveCamera.fov}set fov(e){this.perspectiveCamera.fov=e}get aspect(){return this.perspectiveCamera.aspect}set aspect(e){this.perspectiveCamera.aspect=e}static create(t=30,r=1,i=.1,a=1e3){return new e(new n.PerspectiveCamera(t,r,i,a))}},pe={none:n.NoToneMapping,linear:n.LinearToneMapping,reinhard:n.ReinhardToneMapping,cineon:n.CineonToneMapping,aces:n.ACESFilmicToneMapping,agx:n.AgXToneMapping,neutral:n.NeutralToneMapping},me=new Map(Object.entries(pe).map(([e,t])=>[t,e])),he=class{static convertRendererOptions(e){let t={antialias:e.antialias,alpha:e.alpha,premultipliedAlpha:e.premultipliedAlpha,preserveDrawingBuffer:e.preserveDrawingBuffer,powerPreference:e.powerPreference,pixelRatio:e.pixelRatio};(e.shadowMapEnabled!==void 0||e.shadowMapType!==void 0)&&(t.shadowMap={enabled:e.shadowMapEnabled??!0,type:this.convertShadowMapType(e.shadowMapType)}),(e.toneMapping!==void 0||e.toneMappingExposure!==void 0)&&(t.toneMapping={type:this.convertToneMappingType(e.toneMapping),exposure:e.toneMappingExposure??1});let n=e.bloom,r=e.vignette,i=e.filmGrain,a=this.resolveColorGrade(e.colorGrade);return(n||r||i||a)&&(t.postProcessing={bloom:n??!1,vignette:r??!1,filmGrain:i??!1,colorGrade:a}),t}static{this.DEFAULT_GRADE_CONTRAST=.12}static{this.DEFAULT_GRADE_SATURATION=.15}static resolveColorGrade(e){if(e){if(e===!0)return{contrast:this.DEFAULT_GRADE_CONTRAST,saturation:this.DEFAULT_GRADE_SATURATION};if(typeof e==`object`){let t=e;return{contrast:t.contrast??this.DEFAULT_GRADE_CONTRAST,saturation:t.saturation??this.DEFAULT_GRADE_SATURATION}}}}static convertShadowMapType(e){if(typeof e==`number`){if(e===n.BasicShadowMap)return`basic`;if(e===n.PCFShadowMap)return`pcf`;if(e===n.PCFSoftShadowMap)return`pcfsoft`;if(e===n.VSMShadowMap)return`vsm`}return typeof e==`string`?e:void 0}static convertToneMappingType(e){if(typeof e==`number`){let t=me.get(e);if(t)return t}return typeof e==`string`?e:`neutral`}};function ge(e){return e.bloom||e.vignette||e.filmGrain||e.colorGrade!==null}var _e=.08,ve=.25,ye=2.5,be=1.15,xe=1.05,Se={uniforms:{tDiffuse:{value:null},intensity:{value:.05}},vertexShader:`
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./smoothstep-BsyRnZAu.cjs");let t=require("react");t=e.I(t,1);let n=require("three");n=e.I(n,1);let r=require("react/jsx-runtime");var i=`softboxVariants`;function a(t){let n=t??`meters`;if(!Object.prototype.hasOwnProperty.call(e.j,n))throw new e.F(`Unknown units '${String(n)}'. Valid values: ${Object.keys(e.j).join(`, `)}`,e.P.INVALID_PARAMETER);return e.j[n]}var o=2,s=120,c=75;function l(e){if(!e)return;let t=typeof e==`object`?e:{},n=(e,t)=>e!==void 0&&e>0?e:t;return{height:n(t.height,o),radius:Math.max(n(t.radius,s),c)}}function u(e){return{backgroundBlurriness:e.environment?.backgroundBlurriness,backgroundIntensity:e.environment?.backgroundIntensity,environmentIntensity:e.environment?.environmentIntensity,groundProjection:l(e.environment?.groundProjection)}}var d=`#1a1a1f`,f=e=>{if(Array.isArray(e))return e;if(e&&typeof e==`object`)return[e.x,e.y,e.z]},p=e=>e===void 0?void 0:String(e),m=class{configureScene(e,t,n){if(n.helpers){let r={grid:n.helpers.grid,axes:n.helpers.axes,gridColor:`#AAAAAA`},i=t.addHelpers(e,r);i.ok||console.warn(`Failed to add helpers:`,i.error)}let r=n.lighting;if(r){let n={ambient:r.ambientLight?{color:String(r.ambientLight.color),intensity:r.ambientLight.intensity}:void 0,hemisphere:r.hemisphereLight?{skyColor:String(r.hemisphereLight.skyColor),groundColor:String(r.hemisphereLight.groundColor),intensity:r.hemisphereLight.intensity}:void 0,directional:r.directionalLight?{color:p(r.directionalLight.color),intensity:r.directionalLight.intensity,position:f(r.directionalLight.position),castShadow:r.directionalLight.castShadow,shadow:r.directionalLight.shadow}:void 0,fill:r.fillLight?{color:p(r.fillLight.color),intensity:r.fillLight.intensity,position:f(r.fillLight.position)}:void 0,rim:r.rimLight?{color:p(r.rimLight.color),intensity:r.rimLight.intensity,position:f(r.rimLight.position)}:void 0},i=t.addLighting(e,n);i.ok||console.warn(`Failed to add lighting:`,i.error)}let i=n.environment?.url,a=(n.helpers?.studioEnvironment??!1)&&(n.helpers?.darkStudioMode??!1);if(n.backgroundColor&&!i&&!a){let r=String(n.backgroundColor),i=n.backgroundColorEdge,a=i===void 0?{topColor:r,bottomColor:r}:{topColor:r,bottomColor:String(i),radial:!0},o=t.createGradientBackground(e,a);o.ok||console.warn(`Failed to set background:`,o.error)}}async configureEnvironment(e,t,n,r,i,a){let o=await t.initialize({renderer:r,autoDispose:!0});if(a())return;o.ok||console.warn(`Failed to initialize environment service:`,o.error);let s=u(i),c=i.environment?.url;if(c){let r=await t.loadEnvironmentMap(c);if(a())return;if(r.ok){let n=t.applyToScene(e,r.value,s);n.ok||console.warn(`Failed to apply environment map:`,n.error);return}console.warn(`Failed to load environment map, falling back to the studio look:`,r.error),i.helpers?.studioEnvironment!==!1&&this.applyStudioEnvironment(e,t,n,i,s),this.paintFallbackBackdrop(e,n,i);return}i.helpers?.studioEnvironment&&this.applyStudioEnvironment(e,t,n,i,s)}paintFallbackBackdrop(e,t,n){if(!t||n.backgroundColor===void 0)return;let r=String(n.backgroundColor),i=n.backgroundColorEdge,a=i===void 0?{topColor:r,bottomColor:r}:{topColor:r,bottomColor:String(i),radial:!0},o=t.createGradientBackground(e,a);o.ok||console.warn(`Failed to paint the fallback backdrop:`,o.error)}applyStudioEnvironment(e,t,n,r,i){let a=t.createStudioEnvironment(r.environment?.studioLook);if(!a.ok){console.warn(`Failed to create studio environment:`,a.error);return}if(t.applyToScene(e,a.value,{...i,setBackground:!1}),r.helpers?.darkStudioMode&&n){let t=n.createGradientBackground(e,{topColor:d,bottomColor:d});t.ok||console.warn(`Failed to set dark studio background:`,t.error)}}},h=class{constructor(e={}){this.animationFrameId=null,this.lastRenderTime=0,this.idleTimeout=null,this.isIdle=!1,this.needsRender=!0,this.continuousRenderingEnabled=!1,this.continuousReasons=new Set,this.alwaysRender=!1,this.enableIdleDetection=e.enableIdleDetection??!0,this.idleDelay=e.idleDelay??1e3,this.targetFPS=e.targetFPS??60,this.frameInterval=1e3/this.targetFPS,this.enableFrameRateLimiting=e.enableFrameRateLimiting??!0,this.alwaysRender=e.alwaysRender??!1,this.lastRenderTime=performance.now()}requestRender(){this.needsRender=!0,this.wakeUp()}requireContinuous(e){this.continuousReasons.add(e),this.continuousRenderingEnabled=!0,this.wakeUp()}releaseContinuous(e){this.continuousReasons.delete(e),this.continuousRenderingEnabled=this.continuousReasons.size>0}hasContinuousDemand(){return this.continuousReasons.size>0}setAlwaysRender(e){this.alwaysRender=e,e&&this.wakeUp()}wakeUp(){this.idleTimeout!==null&&(clearTimeout(this.idleTimeout),this.idleTimeout=null),this.isIdle=!1}start(e){if(this.animationFrameId!==null)return;let t=n=>{if(this.animationFrameId===null)return;let r=n-this.lastRenderTime;if(this.enableFrameRateLimiting&&r<this.frameInterval){this.animationFrameId=requestAnimationFrame(t);return}(this.alwaysRender||this.needsRender||this.continuousRenderingEnabled)&&(e(r),this.lastRenderTime=n,this.needsRender=!1),this.enableIdleDetection&&!this.alwaysRender&&(this.continuousRenderingEnabled||this.needsRender?this.wakeUp():this.idleTimeout===null&&!this.isIdle&&(this.idleTimeout=window.setTimeout(()=>{this.isIdle=!0},this.idleDelay))),this.alwaysRender||!this.enableIdleDetection||!this.isIdle||this.continuousRenderingEnabled||this.needsRender?this.animationFrameId=requestAnimationFrame(t):this.animationFrameId=null};this.animationFrameId=requestAnimationFrame(t)}stop(){this.animationFrameId!==null&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.idleTimeout!==null&&(clearTimeout(this.idleTimeout),this.idleTimeout=null),this.isIdle=!1,this.needsRender=!1,this.continuousRenderingEnabled=!1,this.continuousReasons.clear(),this.alwaysRender=!1}isRunning(){return this.animationFrameId!==null}getIsIdle(){return this.isIdle}getNeedsRender(){return this.needsRender||this.continuousRenderingEnabled||this.alwaysRender}};function g(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function _(e,t){if(!g(e)||!g(t))return t===void 0?e:t;let n=t,r={...e};for(let e of Object.keys(n)){let t=n[e];if(t===void 0)continue;let i=r[e];r[e]=g(i)&&g(t)?_(i,t):t}return r}var v=e=>{typeof requestAnimationFrame==`function`?requestAnimationFrame(()=>setTimeout(()=>requestAnimationFrame(()=>setTimeout(e,0)),0)):setTimeout(e,0)},y=class{static serialize(e,t,n,r){let i=t.position,a=n.target||{x:0,y:0,z:0,set:()=>{},copy:()=>{},add:()=>{},multiply:()=>{},normalize:()=>{},length:()=>0};return{modelUrl:e,cameraPosition:{x:i.x,y:i.y,z:i.z},cameraTarget:{x:a.x,y:a.y,z:a.z},controlsTarget:{x:a.x,y:a.y,z:a.z},rendererSize:{width:r.clientWidth,height:r.clientHeight}}}static async restore(e,t,n,r){t.position.set(e.cameraPosition.x,e.cameraPosition.y,e.cameraPosition.z),t.lookAt({x:e.cameraTarget.x,y:e.cameraTarget.y,z:e.cameraTarget.z,set:()=>{},copy:()=>{},add:()=>{},multiply:()=>{},normalize:()=>{},length:()=>0}),n.target&&n.target.set(e.controlsTarget.x,e.controlsTarget.y,e.controlsTarget.z),n.update&&n.update(),e.modelUrl&&r&&await r(e.modelUrl)}};function b(e,t){e.type===`perspective`&&`aspect`in e&&(e.aspect=t),e.updateProjectionMatrix()}var x=class e{constructor(e={}){this.data=Object.freeze({status:`idle`,currentModel:null,error:null,isInitialized:!1,loadProgress:0,renderInfo:{frameCount:0,fps:0,lastRenderTime:0,averageRenderTime:0},...e})}get status(){return this.data.status}get currentModel(){return this.data.currentModel}get error(){return this.data.error}get isInitialized(){return this.data.isInitialized}get loadProgress(){return this.data.loadProgress}get renderInfo(){return this.data.renderInfo}setInitialized(){return new e({...this.data,isInitialized:!0,status:`idle`})}startLoading(){return new e({...this.data,status:`loading`,loadProgress:0,error:null})}updateLoadProgress(t){return new e({...this.data,loadProgress:Math.min(Math.max(0,t),1)})}setLoaded(t){return new e({...this.data,status:`loaded`,currentModel:t,loadProgress:1,error:null})}setError(t){return new e({...this.data,status:`error`,error:t,loadProgress:0})}startRendering(){return new e({...this.data,status:`rendering`})}updateRenderInfo(t){return new e({...this.data,renderInfo:{...this.data.renderInfo,...t}})}dispose(){return new e({...this.data,status:`disposed`,currentModel:null})}canLoad(){return this.data.isInitialized&&(this.data.status===`idle`||this.data.status===`loaded`||this.data.status===`error`||this.data.status===`rendering`)}canRender(){return this.data.isInitialized&&this.data.status===`loaded`&&this.data.currentModel!==null}isLoading(){return this.data.status===`loading`}hasError(){return this.data.status===`error`&&this.data.error!==null}toJSON(){return{...this.data}}},S=class{constructor(){this.state=new x,this.stateChangeCallbacks=new Set}getState(){return this.state}setInitialized(){this.updateState(this.state.setInitialized())}startLoading(){this.updateState(this.state.startLoading())}setLoaded(e){this.updateState(this.state.setLoaded(e))}setError(e){this.updateState(this.state.setError(e))}startRendering(){this.updateState(this.state.startRendering())}updateRenderInfo(e){this.updateState(this.state.updateRenderInfo(e))}setDisposed(){this.updateState(this.state.dispose())}canLoad(){return this.state.canLoad()}isInitialized(){return this.state.isInitialized}getStatus(){return this.state.status}getCurrentModel(){return this.state.currentModel}onStateChange(e){return this.stateChangeCallbacks.add(e),()=>{this.stateChangeCallbacks.delete(e)}}clearCallbacks(){this.stateChangeCallbacks.clear()}updateState(e){this.state=e,this.stateChangeCallbacks.forEach(t=>{try{t(e)}catch(e){console.error(`Error in state change callback:`,e)}})}};function ee(e){let t=e.toDataURL(`image/png`);return!t||t===`data:,`?null:t}var te=class{constructor(e){this.screenshotElement=null,this.isShowingScreenshot=!1,this.renderer=e.renderer,this.onRestore=e.onRestore}isActive(){return this.isShowingScreenshot}captureAndReplace(e,t,n,r){if(this.isShowingScreenshot)return;let i=this.renderer.getDomElement(),a=ee(i);if(!a){console.warn(`[ScreenshotManager] Screenshot capture produced no image, keeping live scene`);return}let o=document.createElement(`img`);o.src=a,o.style.position=`absolute`,o.style.top=`0`,o.style.left=`0`,o.style.width=`100%`,o.style.height=`100%`,o.style.pointerEvents=`auto`,o.style.cursor=`grab`;let s=i.parentElement;if(s){this.serializedSceneState=y.serialize(n,e,t,i),i.style.display=`none`,s.appendChild(o),this.screenshotElement=o,this.isShowingScreenshot=!0;let a=()=>{this.restore()};o.addEventListener(`mousedown`,a),o.addEventListener(`touchstart`,a);let c=()=>{this.isShowingScreenshot&&this.restore()};window.addEventListener(`resize`,c),this.screenshotResizeHandler=c,r?.()}}async restore(){if(!this.isShowingScreenshot||!this.screenshotElement)return;let e=this.renderer.getDomElement(),t=this.screenshotElement.parentElement;t&&(this.screenshotResizeHandler&&=(window.removeEventListener(`resize`,this.screenshotResizeHandler),void 0),t.removeChild(this.screenshotElement),e.style.display=``,this.screenshotElement=null,this.isShowingScreenshot=!1,this.onRestore&&await this.onRestore())}getSerializedState(){return this.serializedSceneState}dispose(){this.screenshotResizeHandler&&=(window.removeEventListener(`resize`,this.screenshotResizeHandler),void 0),this.screenshotElement&&this.screenshotElement.parentElement&&this.screenshotElement.parentElement.removeChild(this.screenshotElement),this.isShowingScreenshot&&(this.renderer.getDomElement().style.display=``),this.screenshotElement=null,this.isShowingScreenshot=!1,this.serializedSceneState=void 0}},C=class{constructor(e){this.currentModel=null,this.currentModelUrl=null,this.currentVariants=[],this.modelLoader=e.modelLoader,this.scene=e.scene,this.camera=e.camera,this.controls=e.controls,this.floorAlignmentService=e.floorAlignmentService,this.sceneSetupService=e.sceneSetupService,this.autoFitToObject=e.autoFitToObject??!1,this.floorAlignment=e.floorAlignment??!0,this.unitsScaleToMeters=e.unitsScaleToMeters??1}getCurrentModel(){return this.currentModel}getLastModelUrl(){return this.lastModelUrl}getCurrentModelUrl(){return this.currentModelUrl}getVariantNames(){return[...this.currentVariants]}async loadModel(t,n){let r=performance.now();try{let i;if(typeof t==`string`){this.lastModelUrl=t,n.emit(`model:loading`,{url:t});let e=await this.modelLoader.load(t,(e,r)=>{n.emit(`model:progress`,{url:t,loaded:e,total:r})});if(!e.ok)throw e.error;i=e.value.scene,this.currentModelUrl=t,this.currentVariants=e.value.userData?.softboxVariants??[]}else i=t,this.currentModelUrl=null,this.currentVariants=[];if(this.unitsScaleToMeters!==1){if(!this.sceneSetupService)throw new e.F(`A units conversion is configured but no scene setup service is available to apply it`,e.P.INVALID_PARAMETER);let t=this.sceneSetupService.wrapInUnitsScaleGroup(i,this.unitsScaleToMeters);if(!t.ok)throw t.error;i=t.value}this.currentModel&&(this.scene.remove(this.currentModel),this.disposeObject(this.currentModel));let a=this.scene.add(i);if(!a.ok)throw a.error;if(this.floorAlignment&&this.floorAlignmentService){let e=this.floorAlignmentService.alignToFloor(i);e.ok||console.warn(`Failed to align model to floor:`,e.error)}if(i.traverse(e=>{`castShadow`in e&&`receiveShadow`in e&&(e.castShadow=!0,e.receiveShadow=!0)}),this.currentModel=i,this.sceneSetupService){let e=this.sceneSetupService.addDynamicGrid(this.scene,i,2);if(e.ok||console.warn(`Failed to add dynamic grid:`,e.error),this.floorAlignment){let e=this.sceneSetupService.snapObjectToFloor(this.scene,i);e.ok||console.warn(`Failed to snap object to floor:`,e.error)}let t=this.sceneSetupService.fitShadowCameraToObject(this.scene,i);t.ok||console.warn(`Failed to fit shadow camera to object:`,t.error);let n=this.sceneSetupService.resetContactShadow(this.scene);n.ok||console.warn(`Failed to reset the contact shadow:`,n.error)}if(this.autoFitToObject&&this.sceneSetupService){let e=this.sceneSetupService.fitCameraToObject(i,this.camera,this.controls);e.ok||console.warn(`Failed to fit camera to object:`,e.error)}let o=performance.now()-r;return n.emit(`model:loaded`,{model:i,loadTime:o}),e.N.ok(i)}catch(r){let i=r instanceof e.F?r:new e.F(`Failed to load model`,e.P.MODEL_LOAD_FAILED,{originalError:r,source:t});return n.emit(`model:error`,{error:i,url:typeof t==`string`?t:void 0}),e.N.err(i)}}disposeCurrentModel(){this.currentModel&&=(this.scene.remove(this.currentModel),this.disposeObject(this.currentModel),null)}disposeObject(e){e.dispose()}dispose(){this.disposeCurrentModel(),this.modelLoader.dispose?.(),this.lastModelUrl=void 0}},w=class{constructor(e){this.scene=e.scene,this.pathTracingService=e.pathTracingService,this.environmentService=e.environmentService}updateServices(e){e.pathTracingService&&(this.pathTracingService=e.pathTracingService),e.environmentService&&(this.environmentService=e.environmentService)}disposeSceneResources(e=!1){this.scene.disposeContents({keepBackgrounds:!0}),this.triggerGarbageCollection()}disposeServices(){this.pathTracingService&&=(this.pathTracingService.dispose(),void 0),this.environmentService&&=(this.environmentService.dispose(),void 0)}dispose(){this.disposeServices(),this.scene.disposeContents(),this.triggerGarbageCollection()}triggerGarbageCollection(){globalThis.gc&&globalThis.gc?.()}},T=class{constructor(e){this.completeHandled=!1,this.suspendedForAnimation=!1,this.initialized=!1,this.initializing=!1,this.selfPauseListeners=new Set,this.deps=e}isEnabled(){return!!(this.deps.service&&(this.deps.getOptions().pathTracing?.enabled??!1))}getMaxSamples(){return this.deps.getOptions().pathTracing?.maxSamples??300}isCompleteHandled(){return this.completeHandled}isAccumulating(){return!!this.deps.service?.isEnabled()}onSelfPause(e){return this.selfPauseListeners.add(e),()=>this.selfPauseListeners.delete(e)}async initialize(){this.isEnabled()&&await this.ensureInitialized()}async ensureInitialized(){let{service:e,getOptions:t,isDisposed:n,renderer:r,renderLoopManager:i,schedule:a}=this.deps;if(!(!e||this.initialized||this.initializing)){this.initializing=!0;try{let o=await e.initialize({enabled:!0,renderer:r});if(n())return;if(!o.ok){this.deps.events.emit(`error`,{error:o.error}),console.warn(`Failed to initialize path tracing:`,o.error);return}this.initialized=!0;let s=t().pathTracing;s&&e.updateSettings({samples:s.maxSamples??300,bounces:s.bounces,transmissiveBounces:s.transmissiveBounces,renderScale:s.renderScale,lowResScale:s.lowResScale,dynamicLowRes:s.dynamicLowRes,enablePathTracing:s.enabled??!0}),e.events.on(`pathtracing:paused`,({reason:e})=>{i.releaseContinuous(`path-tracing`);let n=!!t().staticScene;n||i.setAlwaysRender(e===`gave-up`),!n&&e===`gave-up`||a(()=>{i.hasContinuousDemand()||i.stop()},100),e===`gave-up`&&this.selfPauseListeners.forEach(e=>e())})}finally{this.initializing=!1}}}async enableRuntime(){let{service:e,renderLoopManager:t,getOptions:n}=this.deps;return!e||(await this.ensureInitialized(),!this.initialized)||!(n().pathTracing?.enabled??!1)?!1:(e.setEnabled(!0),e.reset(!0),this.completeHandled=!1,this.suspendedForAnimation=!1,t.requireContinuous(`path-tracing`),!0)}disableRuntime(){let{service:e,renderLoopManager:t}=this.deps;e&&(e.setEnabled(!1),e.reset(),t.releaseContinuous(`path-tracing`),this.deps.getOptions().staticScene||t.setAlwaysRender(!0),this.completeHandled=!1,this.suspendedForAnimation=!1,this.selfPauseListeners.forEach(e=>e()))}resetAccumulation(e=!1){let{service:t,renderLoopManager:n}=this.deps;!t||!this.isEnabled()||(t.reset(e),this.completeHandled=!1,!t.isEnabled()&&(t.canResume()||this.suspendedForAnimation)&&(this.suspendedForAnimation=!1,t.setEnabled(!0),n.requireContinuous(`path-tracing`)))}suspendWhileAnimating(){let e=this.deps.service;if(e)if(e.isEnabled()){let t=!this.suspendedForAnimation;this.suspendedForAnimation=!0,e.setEnabled(!1),this.deps.renderLoopManager.releaseContinuous(`path-tracing`),t&&this.selfPauseListeners.forEach(e=>e())}else e.canResume()&&e.getSampleCount()>0&&(e.reset(),this.completeHandled=!1,this.suspendedForAnimation=!0)}getSampleCount(){return this.deps.service?.getSampleCount()||0}beforeFrame(){return{wasActive:this.deps.service?.isEnabled()||!1,samples:this.getSampleCount()}}render(e,t){let n=this.deps.service;if(!n||n.isPathTracerDisposed())return null;let r=n.getSampleCount(),i=r>=this.getMaxSamples()&&r>0;return!n.isEnabled()&&!i?null:(r===0&&(this.startTime=performance.now()),n.render(e,t))}detectCompletion(e,t){let n=this.deps.service;n&&(n.getSampleCount()||0)>=this.getMaxSamples()&&!this.completeHandled&&e.wasActive&&this.handleComplete(e.samples,t)}handleComplete(e,t){let{events:n,renderLoopManager:r,getOptions:i,schedule:a,replaceWithScreenshot:o}=this.deps;this.completeHandled=!0,r.releaseContinuous(`path-tracing`),i().staticScene||r.setAlwaysRender(!1),n.emit(`pathtracing:complete`,{samples:e,totalTime:t-(this.startTime||0)});let s=()=>{r.hasContinuousDemand()||r.stop()};if(i().replaceWithScreenshotOnComplete){a(()=>{o(),a(s,200)},100);return}r.requestRender(),a(s,100)}};function E(){return Array.from(`xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`,e=>e===`x`?`0123456789abcdef`[Math.floor(Math.random()*16)]:e===`y`?(Math.floor(Math.random()*16)&3|8).toString(16):e).join(``)}var ne=e=>[e,`video/webm;codecs=vp9`,`video/webm;codecs=vp8`,`video/webm`,`video/mp4`].filter(e=>!!e).find(e=>MediaRecorder.isTypeSupported(e)),re=class{constructor(e){this.pendingSettlers=new Set,this.pathTracedWaitSettlers=new Set,this.deps=e}async captureStill(t={}){return this.deps.isDisposed()?e.N.err(new e.F(`Cannot capture a still from a disposed viewer`,e.P.INVALID_STATE)):(await this.deps.awaitModelLoads().catch(()=>void 0),this.deps.isDisposed()?e.N.err(new e.F(`Viewer was disposed while a model load finished`,e.P.INVALID_STATE)):this.deps.isScreenshotActive()?e.N.err(new e.F(`Cannot capture a still while a screenshot is replacing the canvas`,e.P.INVALID_STATE)):this.deps.pathTracing.isEnabled()?this.capturePathTracedStill(t):this.captureRasterStill(t))}settleOnDispose(){[...this.pendingSettlers].forEach(e=>e(`disposed`))}notifyTurntableEnabled(){[...this.pathTracedWaitSettlers].forEach(e=>e(`turntable`))}async captureVideo(t={}){if(this.deps.isDisposed())return e.N.err(new e.F(`Cannot capture video from a disposed viewer`,e.P.INVALID_STATE));if(await this.deps.awaitModelLoads().catch(()=>void 0),this.deps.isDisposed())return e.N.err(new e.F(`Viewer was disposed while a model load finished`,e.P.INVALID_STATE));if(this.deps.isScreenshotActive())return e.N.err(new e.F(`Cannot capture video while a screenshot is replacing the canvas`,e.P.INVALID_STATE));let n=t.duration??3;if(!(n>0))return e.N.err(new e.F(`Video duration must be a positive number of seconds`,e.P.INVALID_PARAMETER));let r=this.deps.renderer.getDomElement();if(typeof MediaRecorder>`u`||typeof r.captureStream!=`function`)return e.N.err(new e.F(`Video capture needs MediaRecorder and canvas.captureStream support`,e.P.UNSUPPORTED_FORMAT));let i=r.captureStream(t.fps??30),a;try{a=new MediaRecorder(i,{mimeType:ne(t.mimeType),videoBitsPerSecond:t.videoBitsPerSecond})}catch(t){return i.getTracks().forEach(e=>e.stop()),e.N.err(new e.F(`Failed to start the video recorder`,e.P.OPERATION_FAILED,{originalError:t}))}let o=i.getVideoTracks()[0],s=o?.requestFrame?.bind(o),c=s?this.deps.events.on(`render:complete`,()=>s()):()=>{},l=`video-capture:${E()}`;return this.deps.renderLoopManager.requireContinuous(l),this.deps.reviveRenderLoop(),this.deps.renderLoopManager.requestRender(),new Promise(t=>{let r=[],o=null,s=!1,u=e=>{s||(s=!0,this.pendingSettlers.delete(d),c(),o!==null&&clearTimeout(o),this.deps.renderLoopManager.releaseContinuous(l),i.getTracks().forEach(e=>e.stop()),t(e))},d=()=>{u(e.N.err(new e.F(`Viewer was disposed during video capture`,e.P.INVALID_STATE)));try{a.stop()}catch{}};this.pendingSettlers.add(d),a.ondataavailable=e=>{e.data.size>0&&r.push(e.data)},a.onstop=()=>{u(e.N.ok(new Blob(r,{type:a.mimeType||`video/webm`})))},a.onerror=()=>{u(e.N.err(new e.F(`Video recording failed`,e.P.OPERATION_FAILED)))},a.start(250),o=setTimeout(()=>{a.state!==`inactive`&&a.stop()},n*1e3)})}async capturePathTracedStill(t){if(t.width!==void 0||t.height!==void 0)return e.N.err(new e.F(`Path-traced stills are captured at the canvas resolution; omit width/height`,e.P.INVALID_PARAMETER));if(this.deps.isAutoRotating())return e.N.err(new e.F(`Cannot capture a path-traced still while the turntable is spinning — pause autoRotate first`,e.P.INVALID_STATE));let n=this.deps.pathTracing.isAccumulating()&&this.deps.getStatus()!==`error`;if(!this.deps.pathTracing.isCompleteHandled()&&n){let t=await this.waitForPathTracingOutcome();if(t===`disposed`)return e.N.err(new e.F(`Viewer was disposed while waiting for the path tracer`,e.P.INVALID_STATE));if(t===`error`)return e.N.err(new e.F(`Model failed while waiting for the path tracer`,e.P.RENDER_FAILED));if(t===`turntable`)return e.N.err(new e.F(`Cannot capture a path-traced still while the turntable is spinning — pause autoRotate first`,e.P.INVALID_STATE))}return this.readCanvasPng()}waitForPathTracingOutcome(){return new Promise(e=>{let t=()=>{},n=()=>{},r=()=>{},i=()=>{},a=o=>{this.pendingSettlers.delete(a),this.pathTracedWaitSettlers.delete(a),t(),n(),r(),i(),e(o)};this.pendingSettlers.add(a),this.pathTracedWaitSettlers.add(a),t=this.deps.events.once(`pathtracing:complete`,()=>a(`complete`)),n=this.deps.events.once(`model:error`,()=>a(`error`)),r=this.deps.pathTracing.onSelfPause(()=>a(`complete`)),i=this.deps.events.on(`controls:change`,()=>{this.deps.isAutoRotating()&&a(`turntable`)})})}captureRasterStill(t){let{renderer:n,scene:r,camera:i,renderLoopManager:a}=this.deps,o=n.getDomElement(),s=n.getPixelRatio(),c=o.clientWidth>0&&o.clientHeight>0,l=c?o.clientWidth:Math.round(o.width/s),u=c?o.clientHeight:Math.round(o.height/s);if(l<=0||u<=0)return e.N.err(new e.F(`Cannot capture: the canvas has no size`,e.P.INVALID_STATE));let d=l/u,f=Math.round(t.width??(t.height===void 0?l*s:t.height*d)),p=Math.round(t.height??(t.width===void 0?u*s:t.width/d)),m=n.capabilities.maxTextureSize;if(!Number.isFinite(f)||!Number.isFinite(p)||f<=0||p<=0||f>m||p>m)return e.N.err(new e.F(`Requested still size ${f}x${p} is outside 1..${m}`,e.P.INVALID_PARAMETER));n.setPixelRatio(1),n.setSize(f,p),b(i,f/p);let h=n.renderPostProcessed?n.renderPostProcessed(r,i):n.render(r,i),g=h.ok?this.readCanvasPng():e.N.err(h.error);return n.setSize(l,u),n.setPixelRatio(s),b(i,d),n.renderPostProcessed?n.renderPostProcessed(r,i):n.render(r,i),a.requestRender(),g}readCanvasPng(){let t=ee(this.deps.renderer.getDomElement());return t?e.N.ok(t):e.N.err(new e.F(`Canvas produced an empty image`,e.P.RENDER_FAILED))}},ie=class{constructor(e){this.deps=e}backgroundGradient(e,t){return t===void 0?{topColor:String(e),bottomColor:String(e)}:{topColor:String(e),bottomColor:String(t),radial:!0}}applyBackgroundColor(e){let t=this.deps.getOptions();if(t.environment?.url||!this.deps.sceneSetupService)return;let n=this.backgroundGradient(e,t.backgroundColorEdge),r=this.deps.sceneSetupService.createGradientBackground(this.deps.scene,n);if(!r.ok){console.warn(`Failed to update background color:`,r.error);return}this.deps.renderLoopManager.requestRender()}async setEnvironmentMap(t){if(this.deps.isDisposed())return e.N.err(new e.F(`Viewer is disposed`,e.P.INVALID_STATE));if(!this.deps.environmentService)return e.N.err(new e.F(`Environment service unavailable`,e.P.INVALID_STATE));let n=await this.deps.environmentService.loadEnvironmentMap(t);if(this.deps.isDisposed())return e.N.err(new e.F(`Viewer is disposed`,e.P.INVALID_STATE));if(!n.ok)return e.N.err(n.error);let r=this.deps.getOptions(),i=this.deps.environmentService.applyToScene(this.deps.scene,n.value,{...u(r),setBackground:!0});return i.ok?(this.deps.mergeOptions({environment:{url:t}}),this.repaintAfterEnvironmentChange(),e.N.ok(void 0)):i}resetEnvironment(){if(this.deps.isDisposed())return e.N.err(new e.F(`Viewer is disposed`,e.P.INVALID_STATE));if(!this.deps.environmentService)return e.N.err(new e.F(`Environment service unavailable`,e.P.INVALID_STATE));let t=this.deps.environmentService.createStudioEnvironment(this.deps.getOptions().environment?.studioLook);if(!t.ok)return e.N.err(t.error);let n=this.deps.environmentService.applyToScene(this.deps.scene,t.value,{setBackground:!1});if(!n.ok)return n;let r=this.deps.getOptions();return r.environment&&(r.environment.url=void 0),this.restoreBackgroundColor(),this.repaintAfterEnvironmentChange(),e.N.ok(void 0)}async setBackgroundImage(t){if(this.deps.isDisposed())return e.N.err(new e.F(`Viewer is disposed`,e.P.INVALID_STATE));if(!this.deps.environmentService)return e.N.err(new e.F(`Environment service unavailable`,e.P.INVALID_STATE));let n=await this.deps.environmentService.setBackgroundImage(this.deps.scene,t);return this.deps.isDisposed()?e.N.err(new e.F(`Viewer is disposed`,e.P.INVALID_STATE)):n.ok?(this.deps.environmentService.removeGroundProjection(this.deps.scene),this.repaintAfterEnvironmentChange(),e.N.ok(void 0)):n}setBackgroundColor(t){if(this.deps.isDisposed())return e.N.err(new e.F(`Viewer is disposed`,e.P.INVALID_STATE));if(!this.deps.sceneSetupService)return e.N.err(new e.F(`Scene setup service unavailable`,e.P.INVALID_STATE));let n=this.deps.sceneSetupService.createGradientBackground(this.deps.scene,this.backgroundGradient(t,void 0));return n.ok?(this.deps.environmentService?.removeGroundProjection(this.deps.scene),this.deps.mergeOptions({backgroundColor:t}),this.deps.getOptions().backgroundColorEdge=void 0,this.repaintAfterEnvironmentChange(),e.N.ok(void 0)):n}restoreBackgroundColor(){let e=this.deps.getOptions(),t=e.backgroundColor;if(t===void 0||!this.deps.sceneSetupService)return;let n=this.deps.sceneSetupService.createGradientBackground(this.deps.scene,this.backgroundGradient(t,e.backgroundColorEdge));n.ok||console.warn(`Failed to restore the background color:`,n.error)}repaintAfterEnvironmentChange(){this.deps.pathTracing.resetAccumulation(!0),this.deps.reviveRenderLoop(),this.deps.renderLoopManager.requestRender()}},ae=class t{constructor(t){this.frameCount=0,this.disposed=!1,this.pendingTimers=new Set,this.modelLoadChain=Promise.resolve(),this.controlsChangeUnsubscribe=null,this.renderer=t.renderer,this.scene=t.scene,this.camera=t.camera,this.controls=t.controls,this.options=t.options,this.rendererOptions=t.rendererOptions,this.sceneSetupService=t.sceneSetupService,this.environmentService=t.environmentService,this.selectionService=t.selectionService,this.anchorProjectionService=t.anchorProjectionService,this.animationService=t.animationService,this.deferToNextFrame=t.deferToNextFrame??v,this.stateManager=new S,this.screenshotManager=new te({renderer:this.renderer,onRestore:async()=>{await this.restoreFromScreenshot()}});let n=a(this.options.units);this.modelManager=new C({modelLoader:t.modelLoader,scene:this.scene,camera:this.camera,controls:this.controls,floorAlignmentService:t.floorAlignmentService,sceneSetupService:this.sceneSetupService,autoFitToObject:this.options.camera?.autoFitToObject,floorAlignment:this.options.floorAlignment,unitsScaleToMeters:n}),this.resourceManager=new w({scene:this.scene,pathTracingService:t.pathTracingService,environmentService:this.environmentService}),this.sceneConfigurator=new m,this.events=new e.M;let r=this.options.rendering||{},i=this.options.staticScene!==!1;this.renderLoopManager=new h({enableIdleDetection:r.enableIdleDetection??i,idleDelay:r.idleDelay,targetFPS:r.targetFPS,enableFrameRateLimiting:r.enableFrameRateLimiting,alwaysRender:!1}),this.pathTracing=new T({service:t.pathTracingService,events:this.events,renderLoopManager:this.renderLoopManager,renderer:this.renderer,getOptions:()=>this.options,isDisposed:()=>this.disposed,schedule:(e,t)=>this.schedule(e,t),replaceWithScreenshot:()=>this.replaceWithScreenshot()}),this.capture=new re({renderer:this.renderer,scene:this.scene,camera:this.camera,events:this.events,renderLoopManager:this.renderLoopManager,pathTracing:this.pathTracing,getStatus:()=>this.stateManager.getStatus(),isDisposed:()=>this.disposed,awaitModelLoads:()=>this.modelLoadChain,reviveRenderLoop:()=>this.reviveRenderLoop(),isAutoRotating:()=>this.controls.autoRotate,isScreenshotActive:()=>this.screenshotManager.isActive()}),this.environment=new ie({scene:this.scene,renderLoopManager:this.renderLoopManager,pathTracing:this.pathTracing,environmentService:this.environmentService,sceneSetupService:this.sceneSetupService,getOptions:()=>this.options,mergeOptions:e=>{this.options=_(this.options,e)},isDisposed:()=>this.disposed,reviveRenderLoop:()=>this.reviveRenderLoop()})}async initialize(){try{this.renderer.setPostProcessingErrorHandler?.(t=>{this.disposed||this.events.emit(`error`,{error:new e.F(`Post-processing effects failed to load; rendering without them`,e.P.POST_PROCESSING_FAILED,{originalError:t})})});let t=this.renderer.initialize(this.rendererOptions||{});return t.ok?(this.sceneSetupService&&this.sceneConfigurator.configureScene(this.scene,this.sceneSetupService,this.options),this.environmentService&&(await this.sceneConfigurator.configureEnvironment(this.scene,this.environmentService,this.sceneSetupService,this.renderer,this.options,()=>this.disposed),this.disposed)||(await this.pathTracing.initialize(),this.disposed)?e.N.ok(void 0):(this.selectionService&&this.selectionService.initialize({canvas:this.renderer.getDomElement(),camera:this.camera,getPickRoot:()=>this.modelManager.getCurrentModel(),bvh:this.options.selection?.bvh,onPick:e=>{e&&!this.disposed&&this.events.emit(`object:selected`,e)}}),this.stateManager.setInitialized(),this.startRenderLoop(),this.controlsChangeUnsubscribe=this.controls.onChange(()=>{this.disposed||(this.reviveRenderLoop(),this.renderLoopManager.requestRender())}),this.options.staticScene?this.pathTracing.isEnabled()&&this.renderLoopManager.requireContinuous(`path-tracing`):this.renderLoopManager.setAlwaysRender(!0),this.options.controls?.autoRotate&&this.renderLoopManager.requireContinuous(`turntable`),this.renderLoopManager.requestRender(),e.N.ok(void 0))):t}catch(t){let n=new e.F(`Failed to initialize viewer`,e.P.INITIALIZATION_FAILED,{originalError:t});return this.stateManager.setError(n),this.events.emit(`error`,{error:n}),e.N.err(n)}}loadModel(e){let t=this.modelLoadChain.then(()=>this.runLoadModel(e));return this.modelLoadChain=t.then(()=>void 0,()=>void 0),t}async runLoadModel(t){if(this.disposed)return e.N.err(new e.F(`Cannot load model after dispose`,e.P.INVALID_STATE));if(!this.stateManager.canLoad())return e.N.err(new e.F(`Cannot load model in current state`,e.P.INVALID_STATE,{currentState:this.stateManager.getStatus(),isInitialized:this.stateManager.isInitialized()}));try{this.stateManager.startLoading();let n=await this.modelManager.loadModel(t,this.events);return this.disposed?(n.ok&&this.modelManager.disposeCurrentModel(),e.N.err(new e.F(`Viewer was disposed while the model was loading`,e.P.INVALID_STATE))):n.ok?(this.stateManager.setLoaded(n.value),this.attachAnimations(n.value),this.options.variant&&this.applyVariantOrWarn(this.options.variant),this.reviveRenderLoop(),this.renderLoopManager.requestRender(),this.pathTracing.resetAccumulation(!0),this.scheduleContactShadowBake(n.value),e.N.ok(void 0)):(this.stateManager.setError(n.error),n)}catch(n){let r=n instanceof e.F?n:new e.F(`Failed to load model`,e.P.MODEL_LOAD_FAILED,{originalError:n,source:t});return this.stateManager.setError(r),e.N.err(r)}}startRenderLoop(){this.renderLoopManager.start(e=>{if(this.disposed){this.renderLoopManager.stop();return}if(!this.stateManager.isInitialized()||this.stateManager.getStatus()===`error`)return;if(!this.renderer||this.renderer.isDisposed()){this.renderLoopManager.stop();return}let t=performance.now(),n=e>0?1e3/e:0,r=this.animationService?.isPlaying()??!1;this.controls.enabled&&this.controls.update()&&(this.events.emit(`controls:change`,{controls:this.controls}),r||this.pathTracing.resetAccumulation(),this.renderLoopManager.requestRender()),r&&this.animationService&&(this.animationService.update(e/1e3),this.pathTracing.suspendWhileAnimating());let i=this.pathTracing.beforeFrame();this.renderFrame().catch(e=>{console.error(`[ViewerCore] Render frame error:`,e)}),this.pathTracing.detectCompletion(i,t),this.frameCount++,this.stateManager.updateRenderInfo({frameCount:this.frameCount,fps:Math.round(n),lastRenderTime:performance.now()-t})})}stopRenderLoop(){this.renderLoopManager.stop()}schedule(e,t){let n=setTimeout(()=>{this.pendingTimers.delete(n),!this.disposed&&e()},t);this.pendingTimers.add(n)}async renderFrame(){let e=performance.now();if(!this.renderer||!this.scene||!this.camera){console.warn(`[ViewerCore] Cannot render - components not initialized`);return}if(this.screenshotManager.isActive())return;this.stateManager.startRendering();let t=await(this.pathTracing.render(this.scene,this.camera)??Promise.resolve(this.renderRaster()));if(!t.ok){console.error(`[ViewerCore] Render failed:`,t.error),this.events.emit(`error`,{error:t.error});return}this.events.emit(`render:complete`,{frame:this.frameCount,renderTime:performance.now()-e,samples:this.pathTracing.getSampleCount()})}renderRaster(){return this.renderer.renderPostProcessed?this.renderer.renderPostProcessed(this.scene,this.camera):this.renderer.render(this.scene,this.camera)}updateOptions(e){if(this.disposed)return;let n=this.options.animations?.autoplay,r=this.options.controls?.autoRotate,i=this.options.pathTracing?.enabled??!1,a=t.postEffectsKey(this.options),o=this.options.backgroundColor,s=this.options.backgroundColorEdge,c=this.options.environment?.environmentIntensity,l=this.options.variant;this.options=_(this.options,e),`backgroundColorEdge`in e&&(this.options.backgroundColorEdge=e.backgroundColorEdge),e.renderer&&`colorGrade`in e.renderer&&this.options.renderer&&(this.options.renderer.colorGrade=e.renderer.colorGrade);let u=!1;(e.backgroundColor!==void 0||e.backgroundColorEdge!==void 0)&&this.options.backgroundColor!==void 0&&(this.environment.applyBackgroundColor(this.options.backgroundColor),(this.options.backgroundColor!==o||this.options.backgroundColorEdge!==s)&&!this.options.environment?.url&&this.pathTracing.resetAccumulation(!0));let d=e.renderer?.toneMappingExposure;d!==void 0&&(this.renderer.setToneMappingExposure(d),u=!0);let f=t.postEffectsKey(this.options);e.renderer&&f!==a&&this.renderer.setPostProcessing&&(this.renderer.setPostProcessing({bloom:this.options.renderer?.bloom??!1,vignette:this.options.renderer?.vignette??!1,filmGrain:this.options.renderer?.filmGrain??!1,colorGrade:this.options.renderer?.colorGrade??!1}),this.pathTracing.resetAccumulation(!0),u=!0);let p=e.environment?.environmentIntensity;p!==void 0&&(this.scene.setEnvironmentIntensity(p),p!==c&&this.pathTracing.resetAccumulation(!0),u=!0);let m=e.controls?.autoRotate;m!==void 0&&m!==r&&(this.controls.autoRotate=m,m?(this.renderLoopManager.requireContinuous(`turntable`),this.capture.notifyTurntableEnabled()):this.renderLoopManager.releaseContinuous(`turntable`),u=!0);let h=e.controls?.autoRotateSpeed;h!==void 0&&(this.controls.autoRotateSpeed=h,u=!0);let g=e.animations?.autoplay;g!==void 0&&g!==n&&(g?this.modelManager.getCurrentModel()&&this.autoplayFromOptions(g):this.pauseAnimations(),u=!0);let v=e.animations?.speed;v!==void 0&&(this.animationService?.setSpeed(v),u=!0);let y=e.pathTracing?.enabled;if(y!==void 0&&y!==i&&(this.setPathTracingEnabled(y),u=!0),`variant`in e){let t=e.variant??null;t!==(l??null)&&this.applyVariantOrWarn(t)}u&&(this.reviveRenderLoop(),this.renderLoopManager.requestRender())}static postEffectsKey(e){let t=e.renderer;return JSON.stringify([t?.bloom??!1,t?.vignette??!1,t?.filmGrain??!1,t?.colorGrade??!1])}setEnvironmentMap(e){return this.environment.setEnvironmentMap(e)}resetEnvironment(){return this.environment.resetEnvironment()}setBackgroundImage(e){return this.environment.setBackgroundImage(e)}setBackgroundColor(e){return this.environment.setBackgroundColor(e)}resize(e,t){if(this.disposed)return;let n=e/t,r=this.renderer.getDomElement(),i=this.renderer.getPixelRatio(),a=r.width===Math.floor(e*i)&&r.height===Math.floor(t*i),o=this.camera.type===`perspective`&&`aspect`in this.camera?this.camera.aspect:null,s=o===null||Math.abs(o-n)<1e-6;if(!(a&&s)){b(this.camera,n),a||this.renderer.setSize(e,t);try{this.renderRaster()}catch{}this.pathTracing.resetAccumulation(),this.reviveRenderLoop(),this.renderLoopManager.requestRender()}}getState(){return this.stateManager.getState()}onStateChange(e){return this.stateManager.onStateChange(e)}getEvents(){return this.events}getDomElement(){return this.renderer.getDomElement()}getRenderer(){return this.renderer}getScene(){return this.scene}getCamera(){return this.camera}getControls(){return this.controls}getModel(){return this.modelManager.getCurrentModel()}requestRender(){this.renderLoopManager.requestRender()}reviveRenderLoop(){this.stateManager.isInitialized()&&!this.renderLoopManager.isRunning()&&this.startRenderLoop()}setPathTracingEnabled(t){t?this.pathTracing.enableRuntime().then(e=>{e&&!this.disposed&&(this.reviveRenderLoop(),this.renderLoopManager.requestRender())}).catch(t=>{this.disposed||this.events.emit(`error`,{error:new e.F(`Failed to enable path tracing`,e.P.PATH_TRACING_INIT_FAILED,{originalError:t})})}):(this.pathTracing.disableRuntime(),this.reviveRenderLoop(),this.renderLoopManager.requestRender())}getAnimationNames(){return this.animationService?.getClipNames()??[]}getVariantNames(){return this.modelManager.getVariantNames()}getModelUrl(){return this.modelManager.getCurrentModelUrl()}setMaterialVariant(t){let n=this.modelManager.getCurrentModel();return n&&t!==null&&!this.modelManager.getVariantNames().includes(t)?e.N.err(new e.F(`Unknown material variant '${t}'`,e.P.INVALID_PARAMETER)):(this.options.variant=t??void 0,!n||!this.sceneSetupService||this.sceneSetupService.applyMaterialVariant(n,t).then(e=>{if(!e.ok){console.warn(`Failed to apply material variant:`,e.error);return}let t=this.disposed||this.modelManager.getCurrentModel()!==n;!e.value||t||(this.pathTracing.resetAccumulation(!0),this.reviveRenderLoop(),this.renderLoopManager.requestRender())}),e.N.ok(void 0))}applyVariantOrWarn(e){let t=this.setMaterialVariant(e);t.ok||console.warn(`Failed to apply material variant:`,t.error)}playAnimations(t){if(!this.animationService)return t===void 0?e.N.ok(void 0):e.N.err(new e.F(`Cannot play animation clip '${t}': the viewer was assembled without an animation service`,e.P.INVALID_STATE));let n=this.animationService.play(t);return n.ok?(this.animationService.isPlaying()&&(this.sceneSetupService?.setContactShadowMode(this.scene,`live`),this.renderLoopManager.requireContinuous(`animations`),this.reviveRenderLoop(),this.renderLoopManager.requestRender()),e.N.ok(void 0)):n}autoplayFromOptions(e){let t=this.playAnimations(typeof e==`string`?e:void 0);t.ok||console.error(`animations.autoplay failed:`,t.error.message)}pauseAnimations(){this.animationService?.pause(),this.renderLoopManager.releaseContinuous(`animations`),this.rebakeContactShadowForCurrentPose(),this.pathTracing.resetAccumulation(!0),this.renderLoopManager.requestRender()}rebakeContactShadowForCurrentPose(){let e=this.modelManager.getCurrentModel();if(!e||!this.sceneSetupService)return;let t=this.sceneSetupService.bakeContactShadow(this.scene,e,this.renderer);t.ok||console.warn(`Failed to bake contact shadow:`,t.error)}scheduleContactShadowBake(e){this.deferToNextFrame(()=>{this.disposed||this.modelManager.getCurrentModel()!==e||this.animationService?.isPlaying()||(this.rebakeContactShadowForCurrentPose(),this.reviveRenderLoop(),this.renderLoopManager.requestRender())})}attachAnimations(e){if(!this.animationService)return;this.renderLoopManager.releaseContinuous(`animations`),this.animationService.attach(e);let t=this.options.animations;t?.speed!==void 0&&this.animationService.setSpeed(t.speed);let n=t?.autoplay;n&&this.autoplayFromOptions(n)}createAnchorProjector(){return this.anchorProjectionService?this.anchorProjectionService.createProjector({camera:this.camera,getCanvas:()=>this.renderer.getDomElement(),getModel:()=>this.getModel()}):null}captureStill(e={}){return this.capture.captureStill(e)}captureVideo(e={}){return this.capture.captureVideo(e)}replaceWithScreenshot(){let e=this.modelManager.getLastModelUrl();this.screenshotManager.captureAndReplace(this.camera,this.controls,e,()=>{this.modelManager.disposeCurrentModel(),this.resourceManager.disposeSceneResources(!0)})}async restoreFromScreenshot(){let e=this.screenshotManager.getSerializedState();e&&await y.restore(e,this.camera,this.controls,async e=>{let t=await this.loadModel(e);t.ok||console.error(`[ViewerCore] Failed to reload model:`,t.error)}),this.renderLoopManager.isRunning()||this.startRenderLoop(),this.renderLoopManager.requestRender()}isDisposed(){return this.disposed}dispose(){this.disposed=!0,this.pendingTimers.forEach(e=>clearTimeout(e)),this.pendingTimers.clear(),this.stopRenderLoop(),this.controlsChangeUnsubscribe?.(),this.controlsChangeUnsubscribe=null,this.selectionService?.dispose(),this.animationService?.detach(),this.modelManager.dispose(),this.resourceManager.dispose(),this.screenshotManager.dispose(),this.controls.dispose(),this.renderer.dispose(),this.stateManager.setDisposed(),this.capture.settleOnDispose(),this.events.removeAllListeners(),this.stateManager.clearCallbacks()}},D=class e{constructor(e){this.vector=e}get x(){return this.vector.x}set x(e){this.vector.x=e}get y(){return this.vector.y}set y(e){this.vector.y=e}get z(){return this.vector.z}set z(e){this.vector.z=e}set(e,t,n){this.vector.set(e,t,n)}copy(e){this.vector.set(e.x,e.y,e.z)}add(e){this.vector.x+=e.x,this.vector.y+=e.y,this.vector.z+=e.z}multiply(e){this.vector.x*=e.x,this.vector.y*=e.y,this.vector.z*=e.z}normalize(){this.vector.normalize()}length(){return this.vector.length()}getThreeVector(){return this.vector}static fromThreeVector(t){return new e(t)}static create(t=0,r=0,i=0){return new e(new n.Vector3(t,r,i))}},O=class{constructor(e){this.euler=e}get x(){return this.euler.x}set x(e){this.euler.x=e}get y(){return this.euler.y}set y(e){this.euler.y=e}get z(){return this.euler.z}set z(e){this.euler.z=e}set(e,t,n){this.euler.set(e,t,n)}copy(e){this.euler.set(e.x,e.y,e.z)}add(e){this.euler.set(this.euler.x+e.x,this.euler.y+e.y,this.euler.z+e.z)}multiply(e){this.euler.set(this.euler.x*e.x,this.euler.y*e.y,this.euler.z*e.z)}normalize(){let e=this.length();e>0&&this.euler.set(this.euler.x/e,this.euler.y/e,this.euler.z/e)}length(){return Math.hypot(this.euler.x,this.euler.y,this.euler.z)}},k=class t{constructor(e){this.object=e,this.positionAdapter=D.fromThreeVector(e.position),this.rotationAdapter=new O(e.rotation),this.scaleAdapter=D.fromThreeVector(e.scale)}get id(){return this.object.uuid}get name(){return this.object.name}set name(e){this.object.name=e}get visible(){return this.object.visible}set visible(e){this.object.visible=e}get castShadow(){return this.object.castShadow}set castShadow(e){this.object.castShadow=e}get receiveShadow(){return this.object.receiveShadow}set receiveShadow(e){this.object.receiveShadow=e}get position(){return this.positionAdapter}get rotation(){return this.rotationAdapter}get scale(){return this.scaleAdapter}add(n){try{return n instanceof t?(this.object.add(n.getThreeObject()),e.N.ok(void 0)):e.N.err(new e.F(`Child must be a ThreeObject3DAdapter`,e.P.INVALID_PARAMETER))}catch(t){return e.N.err(new e.F(`Failed to add child object`,e.P.SCENE_OPERATION_FAILED,{originalError:t}))}}remove(n){try{return n instanceof t?(this.object.remove(n.getThreeObject()),e.N.ok(void 0)):e.N.err(new e.F(`Child must be a ThreeObject3DAdapter`,e.P.INVALID_PARAMETER))}catch(t){return e.N.err(new e.F(`Failed to remove child object`,e.P.SCENE_OPERATION_FAILED,{originalError:t}))}}traverse(e){this.object.traverse(n=>{e(new t(n))})}clone(){return new t(this.object.clone())}dispose(){e.v(this.object)}getThreeObject(){return this.object}static fromThreeObject(e){return new t(e)}static create(){return new t(new n.Object3D)}},oe=`softboxOwnedBackground`;function se(e){e.userData[oe]=!0}function ce(e){let t=e.background;t instanceof n.Texture&&t.userData?.[oe]&&t!==e.environment&&t.dispose()}var A=class{constructor(e){this.scene=e||new n.Scene}get id(){return this.scene.uuid}get name(){return this.scene.name}set name(e){this.scene.name=e}add(t){try{return t instanceof k?(this.scene.add(t.getThreeObject()),e.N.ok(void 0)):e.N.err(new e.F(`Object must be a ThreeObject3DAdapter`,e.P.INVALID_PARAMETER))}catch(t){return e.N.err(new e.F(`Failed to add object to scene`,e.P.SCENE_OPERATION_FAILED,{originalError:t}))}}remove(t){try{return t instanceof k?(this.scene.remove(t.getThreeObject()),e.N.ok(void 0)):e.N.err(new e.F(`Object must be a ThreeObject3DAdapter`,e.P.INVALID_PARAMETER))}catch(t){return e.N.err(new e.F(`Failed to remove object from scene`,e.P.SCENE_OPERATION_FAILED,{originalError:t}))}}clear(){for(;this.scene.children.length>0;)this.scene.remove(this.scene.children[0])}disposeContents(t){e.y(this.scene,t)}traverse(e){this.scene.traverse(t=>{e(new k(t))})}get background(){return this.scene.background instanceof n.Color?new le(this.scene.background):this.scene.background instanceof n.Texture?new ue(this.scene.background):null}set background(e){ce(this.scene),e instanceof le?this.scene.background=e.getThreeColor():e instanceof ue?this.scene.background=e.getThreeTexture():this.scene.background=null}get fog(){return this.scene.fog?new de(this.scene.fog):null}set fog(e){e instanceof de?this.scene.fog=e.getThreeFog():this.scene.fog=null}get environment(){return this.scene.environment?new ue(this.scene.environment):null}set environment(e){e instanceof ue?this.scene.environment=e.getThreeTexture():this.scene.environment=null}setEnvironmentIntensity(e){this.scene.environmentIntensity=e}getInternalRenderer(){return this.scene}getThreeScene(){return this.scene}},le=class{constructor(e){this.color=e}get r(){return this.color.r}set r(e){this.color.r=e}get g(){return this.color.g}set g(e){this.color.g=e}get b(){return this.color.b}set b(e){this.color.b=e}setHex(e){this.color.setHex(e)}setRGB(e,t,n){this.color.setRGB(e,t,n)}getHex(){return this.color.getHex()}getThreeColor(){return this.color}},ue=class{constructor(e){this.texture=e}get id(){return this.texture.uuid}get image(){return this.texture.image||null}get needsUpdate(){return this.texture.needsUpdate}set needsUpdate(e){this.texture.needsUpdate=e}dispose(){this.texture.dispose()}getThreeTexture(){return this.texture}},de=class{constructor(e){this.fog=e}get color(){return new le(this.fog.color)}get near(){return this.fog.near||0}get far(){return this.fog.far||1e3}getThreeFog(){return this.fog}},fe=class extends k{constructor(e){super(e),this.camera=e}get near(){return this.camera instanceof n.PerspectiveCamera||this.camera instanceof n.OrthographicCamera?this.camera.near:.1}set near(e){(this.camera instanceof n.PerspectiveCamera||this.camera instanceof n.OrthographicCamera)&&(this.camera.near=e)}get far(){return this.camera instanceof n.PerspectiveCamera||this.camera instanceof n.OrthographicCamera?this.camera.far:1e3}set far(e){(this.camera instanceof n.PerspectiveCamera||this.camera instanceof n.OrthographicCamera)&&(this.camera.far=e)}lookAt(e){e instanceof D?this.camera.lookAt(e.getThreeVector()):this.camera.lookAt(e.x,e.y,e.z)}updateProjectionMatrix(){(this.camera instanceof n.PerspectiveCamera||this.camera instanceof n.OrthographicCamera)&&this.camera.updateProjectionMatrix()}getWorldDirection(e){let t=new n.Vector3;this.camera.getWorldDirection(t),e.set(t.x,t.y,t.z)}getInternalRenderer(){return this.camera}getThreeCamera(){return this.camera}},pe=class e extends fe{constructor(e){let t=e||new n.PerspectiveCamera;super(t),this.perspectiveCamera=t}get type(){return`perspective`}get fov(){return this.perspectiveCamera.fov}set fov(e){this.perspectiveCamera.fov=e}get aspect(){return this.perspectiveCamera.aspect}set aspect(e){this.perspectiveCamera.aspect=e}static create(t=30,r=1,i=.1,a=1e3){return new e(new n.PerspectiveCamera(t,r,i,a))}},me=`softboxCoverFitBackground`;function he(e){e.userData[me]=!0}function ge(e,t){let n=e.background;if(!_e(n))return;let r=ve(n.image);!ye(r)||!ye(t)||(n.repeat.set(Math.min(1,t/r),Math.min(1,r/t)),n.offset.set((1-n.repeat.x)/2,(1-n.repeat.y)/2))}function _e(e){return e instanceof n.Texture&&e.userData[me]===!0}function ve(e){return(e?.naturalWidth||e?.width||0)/(e?.naturalHeight||e?.height||0)}function ye(e){return Number.isFinite(e)&&e>0}var be={none:n.NoToneMapping,linear:n.LinearToneMapping,reinhard:n.ReinhardToneMapping,cineon:n.CineonToneMapping,aces:n.ACESFilmicToneMapping,agx:n.AgXToneMapping,neutral:n.NeutralToneMapping},xe=new Map(Object.entries(be).map(([e,t])=>[t,e])),Se=class{static convertRendererOptions(e){let t={antialias:e.antialias,alpha:e.alpha,premultipliedAlpha:e.premultipliedAlpha,preserveDrawingBuffer:e.preserveDrawingBuffer,powerPreference:e.powerPreference,pixelRatio:e.pixelRatio};(e.shadowMapEnabled!==void 0||e.shadowMapType!==void 0)&&(t.shadowMap={enabled:e.shadowMapEnabled??!0,type:this.convertShadowMapType(e.shadowMapType)}),(e.toneMapping!==void 0||e.toneMappingExposure!==void 0)&&(t.toneMapping={type:this.convertToneMappingType(e.toneMapping),exposure:e.toneMappingExposure??1});let n=e.bloom,r=e.vignette,i=e.filmGrain,a=this.resolveColorGrade(e.colorGrade);return(n||r||i||a)&&(t.postProcessing={bloom:n??!1,vignette:r??!1,filmGrain:i??!1,colorGrade:a}),t}static{this.DEFAULT_GRADE_CONTRAST=.12}static{this.DEFAULT_GRADE_SATURATION=.15}static resolveColorGrade(e){if(e){if(e===!0)return{contrast:this.DEFAULT_GRADE_CONTRAST,saturation:this.DEFAULT_GRADE_SATURATION};if(typeof e==`object`){let t=e;return{contrast:t.contrast??this.DEFAULT_GRADE_CONTRAST,saturation:t.saturation??this.DEFAULT_GRADE_SATURATION}}}}static convertShadowMapType(e){if(typeof e==`number`){if(e===n.BasicShadowMap)return`basic`;if(e===n.PCFShadowMap)return`pcf`;if(e===n.PCFSoftShadowMap)return`pcfsoft`;if(e===n.VSMShadowMap)return`vsm`}return typeof e==`string`?e:void 0}static convertToneMappingType(e){if(typeof e==`number`){let t=xe.get(e);if(t)return t}return typeof e==`string`?e:`neutral`}};function Ce(e){return e.bloom||e.vignette||e.filmGrain||e.colorGrade!==null}var j=.08,M=.25,we=2.5,Te=1.15,N=1.05,P={uniforms:{tDiffuse:{value:null},intensity:{value:.05}},vertexShader:`
|
|
2
2
|
varying vec2 vUv;
|
|
3
3
|
void main() {
|
|
4
4
|
vUv = uv;
|
|
@@ -16,7 +16,7 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=requi
|
|
|
16
16
|
float grain = hash( floor( gl_FragCoord.xy ) ) - 0.5;
|
|
17
17
|
gl_FragColor = vec4( color.rgb + grain * intensity, color.a );
|
|
18
18
|
}
|
|
19
|
-
`},M=class{constructor(e,t,n){this.modules=null,this.composer=null,this.renderPass=null,this.passes=[],this.disposed=!1,this.loadFailed=!1,this.renderer=e,this.config=t,this.onLoadError=n,this.load()}async load(){try{let e=this.config.colorGrade!==null,t=this.config.vignette||this.config.filmGrain||e,[n,r,i,a,o,s,c]=await Promise.all([Promise.resolve().then(()=>require("./EffectComposer-CdAQB6p0.cjs")),Promise.resolve().then(()=>require("./RenderPass-DlRq51Kq.cjs")),Promise.resolve().then(()=>require("./OutputPass-DicIJHut.cjs")),this.config.bloom?Promise.resolve().then(()=>require("./UnrealBloomPass-CQHHa-s_.cjs")):Promise.resolve(null),t?Promise.resolve().then(()=>require("./ShaderPass-DghZ7TAj.cjs")):Promise.resolve(null),this.config.vignette?Promise.resolve().then(()=>require("./VignetteShader-CQmGrpns.cjs")):Promise.resolve(null),e?Promise.all([Promise.resolve().then(()=>require("./BrightnessContrastShader-C1jbh-NA.cjs")),Promise.resolve().then(()=>require("./HueSaturationShader-bN5IWhh8.cjs"))]):Promise.resolve(null)]);if(this.disposed)return;this.modules={EffectComposer:n.EffectComposer,RenderPass:r.RenderPass,OutputPass:i.OutputPass,UnrealBloomPass:a?.UnrealBloomPass,ShaderPass:o?.ShaderPass,VignetteShader:s?.VignetteShader,BrightnessContrastShader:c?.[0].BrightnessContrastShader,HueSaturationShader:c?.[1].HueSaturationShader}}catch(e){this.loadFailed=!0,this.disposed||this.onLoadError?.(e),console.warn(`Failed to load post-processing effects; falling back to the plain renderer:`,e)}}isReady(){return this.modules!==null&&!this.disposed&&!this.loadFailed}render(e,t){let n=this.modules;if(n===null||this.disposed||this.loadFailed)return!1;let r=this.composer??this.build(n,e,t);return this.renderPass&&(this.renderPass.scene=e,this.renderPass.camera=t),r.render(),!0}build(e,t,r){let i=this.renderer.getDrawingBufferSize(new n.Vector2),a=new e.EffectComposer(this.renderer),o=Math.min(4,this.renderer.capabilities.maxSamples||0);o>0&&(a.renderTarget1.samples=o,a.renderTarget2.samples=o);let s=new e.RenderPass(t,r);this.renderPass=s,this.addPass(a,s),this.config.bloom&&e.UnrealBloomPass&&this.addPass(a,new e.UnrealBloomPass(new n.Vector2(i.x,i.y),_e,ve,ye)),this.addPass(a,new e.OutputPass);let c=this.config.colorGrade;if(c&&e.ShaderPass&&e.BrightnessContrastShader&&e.HueSaturationShader){let t=new e.ShaderPass(e.BrightnessContrastShader);t.uniforms.contrast.value=c.contrast,this.addPass(a,t);let n=new e.ShaderPass(e.HueSaturationShader);n.uniforms.saturation.value=c.saturation,this.addPass(a,n)}if(this.config.vignette&&e.ShaderPass&&e.VignetteShader){let t=new e.ShaderPass(e.VignetteShader);t.uniforms.offset.value=be,t.uniforms.darkness.value=xe,this.addPass(a,t)}return this.config.filmGrain&&e.ShaderPass&&this.addPass(a,new e.ShaderPass(Se)),this.composer=a,a}setSize(e,t){this.composer?.setSize(e,t)}setPixelRatio(e){this.composer?.setPixelRatio?.(e)}addPass(e,t){this.passes.push(t),e.addPass(t)}dispose(){this.disposed=!0;for(let e of this.passes)e.dispose?.();this.passes=[],this.composer?.dispose?.(),this.composer=null,this.renderPass=null,this.modules=null}},N=class{constructor(e){this.renderer=null,this._id=D(),this.postPipeline=null,this.requestedPixelRatio=1,this.canvas=e}setPostProcessingErrorHandler(e){this.postLoadErrorHandler=e}get id(){return this._id}initialize(t){try{if(this.renderer=new n.WebGLRenderer({canvas:this.canvas,antialias:t.antialias??!0,alpha:t.alpha??!1,premultipliedAlpha:t.premultipliedAlpha??!0,preserveDrawingBuffer:t.preserveDrawingBuffer??!1,powerPreference:t.powerPreference??`default`}),t.shadowMap&&(this.renderer.shadowMap.enabled=t.shadowMap.enabled,this.renderer.shadowMap.autoUpdate=!0,t.shadowMap.type)){let e={basic:n.BasicShadowMap,pcf:n.PCFShadowMap,pcfsoft:n.PCFSoftShadowMap,vsm:n.VSMShadowMap};this.renderer.shadowMap.type=e[t.shadowMap.type]}t.toneMapping&&(this.renderer.toneMapping=pe[t.toneMapping.type],this.renderer.toneMappingExposure=t.toneMapping.exposure);let r={bloom:t.postProcessing?.bloom??!1,vignette:t.postProcessing?.vignette??!1,filmGrain:t.postProcessing?.filmGrain??!1,colorGrade:t.postProcessing?.colorGrade??null},i=ge(r);if(this.requestedPixelRatio=t.pixelRatio??window.devicePixelRatio,this.renderer.setPixelRatio(i?Math.min(this.requestedPixelRatio,2):this.requestedPixelRatio),this.canvas){let{clientWidth:e,clientHeight:t}=this.canvas.parentElement||this.canvas;e&&t&&this.renderer.setSize(e,t)}return this.renderer.outputColorSpace=n.SRGBColorSpace,i&&(this.postPipeline=new M(this.renderer,r,e=>this.postLoadErrorHandler?.(e))),e.N.ok(void 0)}catch(n){return e.N.err(new e.F(`Failed to initialize renderer`,e.P.RENDERER_INIT_FAILED,{originalError:n,options:t}))}}render(t,n){if(!this.renderer)return e.N.err(new e.F(`Renderer not initialized`,e.P.RENDERER_NOT_INITIALIZED));try{if(!(t instanceof j))return e.N.err(new e.F(`Scene must be a ThreeSceneAdapter`,e.P.INVALID_PARAMETER));if(!(n instanceof de))return e.N.err(new e.F(`Camera must be a ThreeCameraAdapter`,e.P.INVALID_PARAMETER));let r=t.getThreeScene(),i=n.getThreeCamera();return this.renderer.render(r,i),e.N.ok(void 0)}catch(t){return e.N.err(new e.F(`Failed to render frame`,e.P.RENDER_FAILED,{originalError:t}))}}renderPostProcessed(t,n){if(!this.postPipeline||!this.renderer||!(t instanceof j)||!(n instanceof de))return this.render(t,n);try{return this.postPipeline.render(t.getThreeScene(),n.getThreeCamera())?e.N.ok(void 0):this.render(t,n)}catch(t){return e.N.err(new e.F(`Failed to render frame with post-processing`,e.P.RENDER_FAILED,{originalError:t}))}}setSize(e,t){if(this.renderer){this.renderer.setSize(e,t,!1),this.postPipeline?.setSize(e,t);let n=this.renderer.domElement;n.style.width=`100%`,n.style.height=`100%`}}setPixelRatio(e){this.renderer&&(this.renderer.setPixelRatio(e),this.postPipeline?.setPixelRatio(e))}getPixelRatio(){return this.renderer?this.renderer.getPixelRatio():1}setToneMappingExposure(e){this.renderer&&(this.renderer.toneMappingExposure=e)}setPostProcessing(e){if(!this.renderer)return;let t={bloom:e.bloom,vignette:e.vignette,filmGrain:e.filmGrain,colorGrade:he.resolveColorGrade(e.colorGrade)??null};this.postPipeline?.dispose(),this.postPipeline=null;let n=ge(t);this.renderer.setPixelRatio(n?Math.min(this.requestedPixelRatio,2):this.requestedPixelRatio),n&&(this.postPipeline=new M(this.renderer,t,e=>this.postLoadErrorHandler?.(e)))}getDomElement(){if(!this.renderer)throw Error(`Renderer not initialized`);return this.renderer.domElement}getContext(){if(!this.renderer)throw Error(`Renderer not initialized`);return this.renderer.getContext()}get capabilities(){if(!this.renderer)return{maxTextureSize:0,maxCubemapSize:0,maxAttributes:0,maxVertexUniforms:0,maxFragmentUniforms:0,maxSamples:0,isWebGL2:!1};let e=this.renderer.capabilities;return{maxTextureSize:e.maxTextureSize,maxCubemapSize:e.maxCubemapSize,maxAttributes:e.maxAttributes,maxVertexUniforms:e.maxVertexUniforms,maxFragmentUniforms:e.maxFragmentUniforms,maxSamples:e.maxSamples||0,isWebGL2:e.isWebGL2}}dispose(){this.postPipeline?.dispose(),this.postPipeline=null,this.renderer&&=(this.renderer.dispose(),null)}isDisposed(){return this.renderer===null}getInternalRenderer(){return this.renderer}getThreeRenderer(){return this.getInternalRenderer()}};function Ce(e,t){if(t===n.TrianglesDrawMode)return console.warn(`THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles.`),e;if(t===n.TriangleFanDrawMode||t===n.TriangleStripDrawMode){let r=e.getIndex();if(r===null){let t=[],n=e.getAttribute(`position`);if(n!==void 0){for(let e=0;e<n.count;e++)t.push(e);e.setIndex(t),r=e.getIndex()}else return console.error(`THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.`),e}let i=r.count-2,a=[];if(t===n.TriangleFanDrawMode)for(let e=1;e<=i;e++)a.push(r.getX(0)),a.push(r.getX(e)),a.push(r.getX(e+1));else for(let e=0;e<i;e++)e%2==0?(a.push(r.getX(e)),a.push(r.getX(e+1)),a.push(r.getX(e+2))):(a.push(r.getX(e+2)),a.push(r.getX(e+1)),a.push(r.getX(e)));a.length/3!==i&&console.error(`THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.`);let o=e.clone();return o.setIndex(a),o.clearGroups(),o}else return console.error(`THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:`,t),e}function we(e){let t=new Map,n=new Map,r=e.clone();return P(e,r,function(e,r){t.set(r,e),n.set(e,r)}),r.traverse(function(e){if(!e.isSkinnedMesh)return;let r=e,i=t.get(e),a=i.skeleton.bones;r.skeleton=i.skeleton.clone(),r.bindMatrix.copy(i.bindMatrix),r.skeleton.bones=a.map(function(e){return n.get(e)}),r.bind(r.skeleton,r.bindMatrix)}),r}function P(e,t,n){n(e,t);for(let r=0;r<e.children.length;r++)P(e.children[r],t.children[r],n)}var F=class extends n.Loader{constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register(function(e){return new ke(e)}),this.register(function(e){return new Ae(e)}),this.register(function(e){return new ze(e)}),this.register(function(e){return new Be(e)}),this.register(function(e){return new Ve(e)}),this.register(function(e){return new Me(e)}),this.register(function(e){return new Ne(e)}),this.register(function(e){return new Pe(e)}),this.register(function(e){return new Fe(e)}),this.register(function(e){return new Oe(e)}),this.register(function(e){return new Ie(e)}),this.register(function(e){return new je(e)}),this.register(function(e){return new Re(e)}),this.register(function(e){return new Le(e)}),this.register(function(e){return new Ee(e)}),this.register(function(e){return new He(e,L.EXT_MESHOPT_COMPRESSION)}),this.register(function(e){return new He(e,L.KHR_MESHOPT_COMPRESSION)}),this.register(function(e){return new Ue(e)})}load(e,t,r,i){let a=this,o;if(this.resourcePath!==``)o=this.resourcePath;else if(this.path!==``){let t=n.LoaderUtils.extractUrlBase(e);o=n.LoaderUtils.resolveURL(t,this.path)}else o=n.LoaderUtils.extractUrlBase(e);this.manager.itemStart(e);let s=function(t){i?i(t):console.error(t),a.manager.itemError(e),a.manager.itemEnd(e)},c=new n.FileLoader(this.manager);c.setPath(this.path),c.setResponseType(`arraybuffer`),c.setRequestHeader(this.requestHeader),c.setWithCredentials(this.withCredentials),c.load(e,function(n){try{a.parse(n,o,function(n){t(n),a.manager.itemEnd(e)},s)}catch(e){s(e)}},r,s)}setDRACOLoader(e){return this.dracoLoader=e,this}setKTX2Loader(e){return this.ktx2Loader=e,this}setMeshoptDecoder(e){return this.meshoptDecoder=e,this}register(e){return this.pluginCallbacks.indexOf(e)===-1&&this.pluginCallbacks.push(e),this}unregister(e){return this.pluginCallbacks.indexOf(e)!==-1&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e),1),this}parse(e,t,n,r){let i,a={},o={},s=new TextDecoder;if(typeof e==`string`)i=JSON.parse(e);else if(e instanceof ArrayBuffer)if(s.decode(new Uint8Array(e,0,4))===We){try{a[L.KHR_BINARY_GLTF]=new qe(e)}catch(e){r&&r(e);return}i=JSON.parse(a[L.KHR_BINARY_GLTF].content)}else i=JSON.parse(s.decode(e));else i=e;if(i.asset===void 0||i.asset.version[0]<2){r&&r(Error(`THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.`));return}let c=new gt(i,{path:t||this.resourcePath||``,crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});c.fileLoader.setRequestHeader(this.requestHeader);for(let e=0;e<this.pluginCallbacks.length;e++){let t=this.pluginCallbacks[e](c);t.name||console.error(`THREE.GLTFLoader: Invalid plugin found: missing name`),o[t.name]=t,a[t.name]=!0}if(i.extensionsUsed)for(let e=0;e<i.extensionsUsed.length;++e){let t=i.extensionsUsed[e],n=i.extensionsRequired||[];switch(t){case L.KHR_MATERIALS_UNLIT:a[t]=new De;break;case L.KHR_DRACO_MESH_COMPRESSION:a[t]=new Je(i,this.dracoLoader);break;case L.KHR_TEXTURE_TRANSFORM:a[t]=new Ye;break;case L.KHR_MESH_QUANTIZATION:a[t]=new Xe;break;default:n.indexOf(t)>=0&&o[t]===void 0&&console.warn(`THREE.GLTFLoader: Unknown extension "`+t+`".`)}}c.setExtensions(a),c.setPlugins(o),c.parse(n,r)}parseAsync(e,t){let n=this;return new Promise(function(r,i){n.parse(e,t,r,i)})}};function Te(){let e={};return{get:function(t){return e[t]},add:function(t,n){e[t]=n},remove:function(t){delete e[t]},removeAll:function(){e={}}}}function I(e,t,n){let r=e.json.materials[t];return r.extensions&&r.extensions[n]?r.extensions[n]:null}var L={KHR_BINARY_GLTF:`KHR_binary_glTF`,KHR_DRACO_MESH_COMPRESSION:`KHR_draco_mesh_compression`,KHR_LIGHTS_PUNCTUAL:`KHR_lights_punctual`,KHR_MATERIALS_CLEARCOAT:`KHR_materials_clearcoat`,KHR_MATERIALS_DISPERSION:`KHR_materials_dispersion`,KHR_MATERIALS_IOR:`KHR_materials_ior`,KHR_MATERIALS_SHEEN:`KHR_materials_sheen`,KHR_MATERIALS_SPECULAR:`KHR_materials_specular`,KHR_MATERIALS_TRANSMISSION:`KHR_materials_transmission`,KHR_MATERIALS_IRIDESCENCE:`KHR_materials_iridescence`,KHR_MATERIALS_ANISOTROPY:`KHR_materials_anisotropy`,KHR_MATERIALS_UNLIT:`KHR_materials_unlit`,KHR_MATERIALS_VOLUME:`KHR_materials_volume`,KHR_TEXTURE_BASISU:`KHR_texture_basisu`,KHR_TEXTURE_TRANSFORM:`KHR_texture_transform`,KHR_MESH_QUANTIZATION:`KHR_mesh_quantization`,KHR_MATERIALS_EMISSIVE_STRENGTH:`KHR_materials_emissive_strength`,EXT_MATERIALS_BUMP:`EXT_materials_bump`,EXT_TEXTURE_WEBP:`EXT_texture_webp`,EXT_TEXTURE_AVIF:`EXT_texture_avif`,EXT_MESHOPT_COMPRESSION:`EXT_meshopt_compression`,KHR_MESHOPT_COMPRESSION:`KHR_meshopt_compression`,EXT_MESH_GPU_INSTANCING:`EXT_mesh_gpu_instancing`},Ee=class{constructor(e){this.parser=e,this.name=L.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){let e=this.parser,t=this.parser.json.nodes||[];for(let n=0,r=t.length;n<r;n++){let r=t[n];r.extensions&&r.extensions[this.name]&&r.extensions[this.name].light!==void 0&&e._addNodeRef(this.cache,r.extensions[this.name].light)}}_loadLight(e){let t=this.parser,r=`light:`+e,i=t.cache.get(r);if(i)return i;let a=t.json,o=((a.extensions&&a.extensions[this.name]||{}).lights||[])[e],s,c=new n.Color(16777215);o.color!==void 0&&c.setRGB(o.color[0],o.color[1],o.color[2],n.LinearSRGBColorSpace);let l=o.range===void 0?0:o.range;switch(o.type){case`directional`:s=new n.DirectionalLight(c),s.target.position.set(0,0,-1),s.add(s.target);break;case`point`:s=new n.PointLight(c),s.distance=l;break;case`spot`:s=new n.SpotLight(c),s.distance=l,o.spot=o.spot||{},o.spot.innerConeAngle=o.spot.innerConeAngle===void 0?0:o.spot.innerConeAngle,o.spot.outerConeAngle=o.spot.outerConeAngle===void 0?Math.PI/4:o.spot.outerConeAngle,s.angle=o.spot.outerConeAngle,s.penumbra=1-o.spot.innerConeAngle/o.spot.outerConeAngle,s.target.position.set(0,0,-1),s.add(s.target);break;default:throw Error(`THREE.GLTFLoader: Unexpected light type: `+o.type)}return s.position.set(0,0,0),B(s,o),o.intensity!==void 0&&(s.intensity=o.intensity),s.name=t.createUniqueName(o.name||`light_`+e),i=Promise.resolve(s),t.cache.add(r,i),i}getDependency(e,t){if(e===`light`)return this._loadLight(t)}createNodeAttachment(e){let t=this,n=this.parser,r=n.json.nodes[e],i=(r.extensions&&r.extensions[this.name]||{}).light;return i===void 0?null:this._loadLight(i).then(function(e){return n._getNodeRef(t.cache,i,e)})}},De=class{constructor(){this.name=L.KHR_MATERIALS_UNLIT}getMaterialType(){return n.MeshBasicMaterial}extendParams(e,t,r){let i=[];e.color=new n.Color(1,1,1),e.opacity=1;let a=t.pbrMetallicRoughness;if(a){if(Array.isArray(a.baseColorFactor)){let t=a.baseColorFactor;e.color.setRGB(t[0],t[1],t[2],n.LinearSRGBColorSpace),e.opacity=t[3]}a.baseColorTexture!==void 0&&i.push(r.assignTexture(e,`map`,a.baseColorTexture,n.SRGBColorSpace))}return Promise.all(i)}},Oe=class{constructor(e){this.parser=e,this.name=L.KHR_MATERIALS_EMISSIVE_STRENGTH}extendMaterialParams(e,t){let n=I(this.parser,e,this.name);return n===null||n.emissiveStrength!==void 0&&(t.emissiveIntensity=n.emissiveStrength),Promise.resolve()}},ke=class{constructor(e){this.parser=e,this.name=L.KHR_MATERIALS_CLEARCOAT}getMaterialType(e){return I(this.parser,e,this.name)===null?null:n.MeshPhysicalMaterial}extendMaterialParams(e,t){let r=I(this.parser,e,this.name);if(r===null)return Promise.resolve();let i=[];if(r.clearcoatFactor!==void 0&&(t.clearcoat=r.clearcoatFactor),r.clearcoatTexture!==void 0&&i.push(this.parser.assignTexture(t,`clearcoatMap`,r.clearcoatTexture)),r.clearcoatRoughnessFactor!==void 0&&(t.clearcoatRoughness=r.clearcoatRoughnessFactor),r.clearcoatRoughnessTexture!==void 0&&i.push(this.parser.assignTexture(t,`clearcoatRoughnessMap`,r.clearcoatRoughnessTexture)),r.clearcoatNormalTexture!==void 0&&(i.push(this.parser.assignTexture(t,`clearcoatNormalMap`,r.clearcoatNormalTexture)),r.clearcoatNormalTexture.scale!==void 0)){let e=r.clearcoatNormalTexture.scale;t.clearcoatNormalScale=new n.Vector2(e,e)}return Promise.all(i)}},Ae=class{constructor(e){this.parser=e,this.name=L.KHR_MATERIALS_DISPERSION}getMaterialType(e){return I(this.parser,e,this.name)===null?null:n.MeshPhysicalMaterial}extendMaterialParams(e,t){let n=I(this.parser,e,this.name);return n===null||(t.dispersion=n.dispersion===void 0?0:n.dispersion),Promise.resolve()}},je=class{constructor(e){this.parser=e,this.name=L.KHR_MATERIALS_IRIDESCENCE}getMaterialType(e){return I(this.parser,e,this.name)===null?null:n.MeshPhysicalMaterial}extendMaterialParams(e,t){let n=I(this.parser,e,this.name);if(n===null)return Promise.resolve();let r=[];return n.iridescenceFactor!==void 0&&(t.iridescence=n.iridescenceFactor),n.iridescenceTexture!==void 0&&r.push(this.parser.assignTexture(t,`iridescenceMap`,n.iridescenceTexture)),n.iridescenceIor!==void 0&&(t.iridescenceIOR=n.iridescenceIor),t.iridescenceThicknessRange===void 0&&(t.iridescenceThicknessRange=[100,400]),n.iridescenceThicknessMinimum!==void 0&&(t.iridescenceThicknessRange[0]=n.iridescenceThicknessMinimum),n.iridescenceThicknessMaximum!==void 0&&(t.iridescenceThicknessRange[1]=n.iridescenceThicknessMaximum),n.iridescenceThicknessTexture!==void 0&&r.push(this.parser.assignTexture(t,`iridescenceThicknessMap`,n.iridescenceThicknessTexture)),Promise.all(r)}},Me=class{constructor(e){this.parser=e,this.name=L.KHR_MATERIALS_SHEEN}getMaterialType(e){return I(this.parser,e,this.name)===null?null:n.MeshPhysicalMaterial}extendMaterialParams(e,t){let r=I(this.parser,e,this.name);if(r===null)return Promise.resolve();let i=[];if(t.sheenColor=new n.Color(0,0,0),t.sheenRoughness=0,t.sheen=1,r.sheenColorFactor!==void 0){let e=r.sheenColorFactor;t.sheenColor.setRGB(e[0],e[1],e[2],n.LinearSRGBColorSpace)}return r.sheenRoughnessFactor!==void 0&&(t.sheenRoughness=r.sheenRoughnessFactor),r.sheenColorTexture!==void 0&&i.push(this.parser.assignTexture(t,`sheenColorMap`,r.sheenColorTexture,n.SRGBColorSpace)),r.sheenRoughnessTexture!==void 0&&i.push(this.parser.assignTexture(t,`sheenRoughnessMap`,r.sheenRoughnessTexture)),Promise.all(i)}},Ne=class{constructor(e){this.parser=e,this.name=L.KHR_MATERIALS_TRANSMISSION}getMaterialType(e){return I(this.parser,e,this.name)===null?null:n.MeshPhysicalMaterial}extendMaterialParams(e,t){let n=I(this.parser,e,this.name);if(n===null)return Promise.resolve();let r=[];return n.transmissionFactor!==void 0&&(t.transmission=n.transmissionFactor),n.transmissionTexture!==void 0&&r.push(this.parser.assignTexture(t,`transmissionMap`,n.transmissionTexture)),Promise.all(r)}},Pe=class{constructor(e){this.parser=e,this.name=L.KHR_MATERIALS_VOLUME}getMaterialType(e){return I(this.parser,e,this.name)===null?null:n.MeshPhysicalMaterial}extendMaterialParams(e,t){let r=I(this.parser,e,this.name);if(r===null)return Promise.resolve();let i=[];t.thickness=r.thicknessFactor===void 0?0:r.thicknessFactor,r.thicknessTexture!==void 0&&i.push(this.parser.assignTexture(t,`thicknessMap`,r.thicknessTexture)),t.attenuationDistance=r.attenuationDistance||1/0;let a=r.attenuationColor||[1,1,1];return t.attenuationColor=new n.Color().setRGB(a[0],a[1],a[2],n.LinearSRGBColorSpace),Promise.all(i)}},Fe=class{constructor(e){this.parser=e,this.name=L.KHR_MATERIALS_IOR}getMaterialType(e){return I(this.parser,e,this.name)===null?null:n.MeshPhysicalMaterial}extendMaterialParams(e,t){let n=I(this.parser,e,this.name);return n===null?Promise.resolve():(t.ior=n.ior===void 0?1.5:n.ior,t.ior===0&&(t.ior=1e3),Promise.resolve())}},Ie=class{constructor(e){this.parser=e,this.name=L.KHR_MATERIALS_SPECULAR}getMaterialType(e){return I(this.parser,e,this.name)===null?null:n.MeshPhysicalMaterial}extendMaterialParams(e,t){let r=I(this.parser,e,this.name);if(r===null)return Promise.resolve();let i=[];t.specularIntensity=r.specularFactor===void 0?1:r.specularFactor,r.specularTexture!==void 0&&i.push(this.parser.assignTexture(t,`specularIntensityMap`,r.specularTexture));let a=r.specularColorFactor||[1,1,1];return t.specularColor=new n.Color().setRGB(a[0],a[1],a[2],n.LinearSRGBColorSpace),r.specularColorTexture!==void 0&&i.push(this.parser.assignTexture(t,`specularColorMap`,r.specularColorTexture,n.SRGBColorSpace)),Promise.all(i)}},Le=class{constructor(e){this.parser=e,this.name=L.EXT_MATERIALS_BUMP}getMaterialType(e){return I(this.parser,e,this.name)===null?null:n.MeshPhysicalMaterial}extendMaterialParams(e,t){let n=I(this.parser,e,this.name);if(n===null)return Promise.resolve();let r=[];return t.bumpScale=n.bumpFactor===void 0?1:n.bumpFactor,n.bumpTexture!==void 0&&r.push(this.parser.assignTexture(t,`bumpMap`,n.bumpTexture)),Promise.all(r)}},Re=class{constructor(e){this.parser=e,this.name=L.KHR_MATERIALS_ANISOTROPY}getMaterialType(e){return I(this.parser,e,this.name)===null?null:n.MeshPhysicalMaterial}extendMaterialParams(e,t){let n=I(this.parser,e,this.name);if(n===null)return Promise.resolve();let r=[];return n.anisotropyStrength!==void 0&&(t.anisotropy=n.anisotropyStrength),n.anisotropyRotation!==void 0&&(t.anisotropyRotation=n.anisotropyRotation),n.anisotropyTexture!==void 0&&r.push(this.parser.assignTexture(t,`anisotropyMap`,n.anisotropyTexture)),Promise.all(r)}},ze=class{constructor(e){this.parser=e,this.name=L.KHR_TEXTURE_BASISU}loadTexture(e){let t=this.parser,n=t.json,r=n.textures[e];if(!r.extensions||!r.extensions[this.name])return null;let i=r.extensions[this.name],a=t.options.ktx2Loader;if(!a){if(n.extensionsRequired&&n.extensionsRequired.indexOf(this.name)>=0)throw Error(`THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures`);return null}return t.loadTextureImage(e,i.source,a)}},Be=class{constructor(e){this.parser=e,this.name=L.EXT_TEXTURE_WEBP}loadTexture(e){let t=this.name,n=this.parser,r=n.json,i=r.textures[e];if(!i.extensions||!i.extensions[t])return null;let a=i.extensions[t],o=r.images[a.source],s=n.textureLoader;if(o.uri){let e=n.options.manager.getHandler(o.uri);e!==null&&(s=e)}return n.loadTextureImage(e,a.source,s)}},Ve=class{constructor(e){this.parser=e,this.name=L.EXT_TEXTURE_AVIF}loadTexture(e){let t=this.name,n=this.parser,r=n.json,i=r.textures[e];if(!i.extensions||!i.extensions[t])return null;let a=i.extensions[t],o=r.images[a.source],s=n.textureLoader;if(o.uri){let e=n.options.manager.getHandler(o.uri);e!==null&&(s=e)}return n.loadTextureImage(e,a.source,s)}},He=class{constructor(e,t){this.name=t,this.parser=e}loadBufferView(e){let t=this.parser.json,n=t.bufferViews[e];if(n.extensions&&n.extensions[this.name]){let e=n.extensions[this.name],r=this.parser.getDependency(`buffer`,e.buffer),i=this.parser.options.meshoptDecoder;if(!i||!i.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw Error(`THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files`);return null}return r.then(function(t){let n=e.byteOffset||0,r=e.byteLength||0,a=e.count,o=e.byteStride,s=new Uint8Array(t,n,r);return i.decodeGltfBufferAsync?i.decodeGltfBufferAsync(a,o,s,e.mode,e.filter).then(function(e){return e.buffer}):i.ready.then(function(){let t=new ArrayBuffer(a*o);return i.decodeGltfBuffer(new Uint8Array(t),a,o,s,e.mode,e.filter),t})})}else return null}},Ue=class{constructor(e){this.name=L.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){let t=this.parser.json,r=t.nodes[e];if(!r.extensions||!r.extensions[this.name]||r.mesh===void 0)return null;let i=t.meshes[r.mesh];for(let e of i.primitives)if(e.mode!==z.TRIANGLES&&e.mode!==z.TRIANGLE_STRIP&&e.mode!==z.TRIANGLE_FAN&&e.mode!==void 0)return null;let a=r.extensions[this.name].attributes,o=[],s={};for(let e in a)o.push(this.parser.getDependency(`accessor`,a[e]).then(t=>(s[e]=t,s[e])));return o.length<1?null:(o.push(this.parser.createNodeMesh(e)),Promise.all(o).then(e=>{let t=e.pop(),r=t.isGroup?t.children:[t],i=e[0].count,a=[];for(let e of r){let t=new n.Matrix4,r=new n.Vector3,o=new n.Quaternion,c=new n.Vector3(1,1,1),l=new n.InstancedMesh(e.geometry,e.material,i);for(let e=0;e<i;e++)s.TRANSLATION&&r.fromBufferAttribute(s.TRANSLATION,e),s.ROTATION&&o.fromBufferAttribute(s.ROTATION,e),s.SCALE&&c.fromBufferAttribute(s.SCALE,e),l.setMatrixAt(e,t.compose(r,o,c));for(let t in s)if(t===`_COLOR_0`){let e=s[t];l.instanceColor=new n.InstancedBufferAttribute(e.array,e.itemSize,e.normalized)}else t!==`TRANSLATION`&&t!==`ROTATION`&&t!==`SCALE`&&e.geometry.setAttribute(t,s[t]);n.Object3D.prototype.copy.call(l,e),this.parser.assignFinalMaterial(l),a.push(l)}return t.isGroup?(t.clear(),t.add(...a),t):a[0]}))}},We=`glTF`,Ge=12,Ke={JSON:1313821514,BIN:5130562},qe=class{constructor(e){this.name=L.KHR_BINARY_GLTF,this.content=null,this.body=null;let t=new DataView(e,0,Ge),n=new TextDecoder;if(this.header={magic:n.decode(new Uint8Array(e.slice(0,4))),version:t.getUint32(4,!0),length:t.getUint32(8,!0)},this.header.magic!==We)throw Error(`THREE.GLTFLoader: Unsupported glTF-Binary header.`);if(this.header.version<2)throw Error(`THREE.GLTFLoader: Legacy binary file detected.`);let r=this.header.length-Ge,i=new DataView(e,Ge),a=0;for(;a<r;){let t=i.getUint32(a,!0);a+=4;let r=i.getUint32(a,!0);if(a+=4,r===Ke.JSON){let r=new Uint8Array(e,Ge+a,t);this.content=n.decode(r)}else if(r===Ke.BIN){let n=Ge+a;this.body=e.slice(n,n+t)}a+=t}if(this.content===null)throw Error(`THREE.GLTFLoader: JSON content not found.`)}},Je=class{constructor(e,t){if(!t)throw Error(`THREE.GLTFLoader: No DRACOLoader instance provided.`);this.name=L.KHR_DRACO_MESH_COMPRESSION,this.json=e,this.dracoLoader=t,this.dracoLoader.preload()}decodePrimitive(e,t){let r=this.json,i=this.dracoLoader,a=e.extensions[this.name].bufferView,o=e.extensions[this.name].attributes,s={},c={},l={};for(let e in o){let t=rt[e]||e.toLowerCase();s[t]=o[e]}for(let t in e.attributes){let n=rt[t]||t.toLowerCase();if(o[t]!==void 0){let i=r.accessors[e.attributes[t]];l[n]=$e[i.componentType].name,c[n]=i.normalized===!0}}return t.getDependency(`bufferView`,a).then(function(e){return new Promise(function(t,r){i.decodeDracoFile(e,function(e){for(let t in e.attributes){let n=e.attributes[t],r=c[t];r!==void 0&&(n.normalized=r)}t(e)},s,l,n.LinearSRGBColorSpace,r)})})}},Ye=class{constructor(){this.name=L.KHR_TEXTURE_TRANSFORM}extendTexture(e,t){return(t.texCoord===void 0||t.texCoord===e.channel)&&t.offset===void 0&&t.rotation===void 0&&t.scale===void 0?e:(e=e.clone(),t.texCoord!==void 0&&(e.channel=t.texCoord),t.offset!==void 0&&e.offset.fromArray(t.offset),t.rotation!==void 0&&(e.rotation=t.rotation),t.scale!==void 0&&e.repeat.fromArray(t.scale),e.needsUpdate=!0,e)}},Xe=class{constructor(){this.name=L.KHR_MESH_QUANTIZATION}},Ze=class extends n.Interpolant{constructor(e,t,n,r){super(e,t,n,r)}copySampleValue_(e){let t=this.resultBuffer,n=this.sampleValues,r=this.valueSize,i=e*r*3+r;for(let e=0;e!==r;e++)t[e]=n[i+e];return t}interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=o*2,c=o*3,l=r-t,u=(n-t)/l,d=u*u,f=d*u,p=e*c,m=p-c,h=-2*f+3*d,g=f-d,_=1-h,v=g-d+u;for(let e=0;e!==o;e++){let t=a[m+e+o],n=a[m+e+s]*l,r=a[p+e+o],c=a[p+e]*l;i[e]=_*t+v*n+h*r+g*c}return i}},Qe=new n.Quaternion,R=class extends Ze{interpolate_(e,t,n,r){let i=super.interpolate_(e,t,n,r);return Qe.fromArray(i).normalize().toArray(i),i}},z={FLOAT:5126,FLOAT_MAT3:35675,FLOAT_MAT4:35676,FLOAT_VEC2:35664,FLOAT_VEC3:35665,FLOAT_VEC4:35666,LINEAR:9729,REPEAT:10497,SAMPLER_2D:35678,POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6,UNSIGNED_BYTE:5121,UNSIGNED_SHORT:5123},$e={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},et={9728:n.NearestFilter,9729:n.LinearFilter,9984:n.NearestMipmapNearestFilter,9985:n.LinearMipmapNearestFilter,9986:n.NearestMipmapLinearFilter,9987:n.LinearMipmapLinearFilter},tt={33071:n.ClampToEdgeWrapping,33648:n.MirroredRepeatWrapping,10497:n.RepeatWrapping},nt={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},rt={POSITION:`position`,NORMAL:`normal`,TANGENT:`tangent`,TEXCOORD_0:`uv`,TEXCOORD_1:`uv1`,TEXCOORD_2:`uv2`,TEXCOORD_3:`uv3`,COLOR_0:`color`,WEIGHTS_0:`skinWeight`,JOINTS_0:`skinIndex`},it={scale:`scale`,translation:`position`,rotation:`quaternion`,weights:`morphTargetInfluences`},at={CUBICSPLINE:void 0,LINEAR:n.InterpolateLinear,STEP:n.InterpolateDiscrete},ot={OPAQUE:`OPAQUE`,MASK:`MASK`,BLEND:`BLEND`};function st(e){return e.DefaultMaterial===void 0&&(e.DefaultMaterial=new n.MeshStandardMaterial({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:n.FrontSide})),e.DefaultMaterial}function ct(e,t,n){for(let r in n.extensions)e[r]===void 0&&(t.userData.gltfExtensions=t.userData.gltfExtensions||{},t.userData.gltfExtensions[r]=n.extensions[r])}function B(e,t){t.extras!==void 0&&(typeof t.extras==`object`?Object.assign(e.userData,t.extras):console.warn(`THREE.GLTFLoader: Ignoring primitive type .extras, `+t.extras))}function lt(e,t,n){let r=!1,i=!1,a=!1;for(let e=0,n=t.length;e<n;e++){let n=t[e];if(n.POSITION!==void 0&&(r=!0),n.NORMAL!==void 0&&(i=!0),n.COLOR_0!==void 0&&(a=!0),r&&i&&a)break}if(!r&&!i&&!a)return Promise.resolve(e);let o=[],s=[],c=[];for(let l=0,u=t.length;l<u;l++){let u=t[l];if(r){let t=u.POSITION===void 0?e.attributes.position:n.getDependency(`accessor`,u.POSITION);o.push(t)}if(i){let t=u.NORMAL===void 0?e.attributes.normal:n.getDependency(`accessor`,u.NORMAL);s.push(t)}if(a){let t=u.COLOR_0===void 0?e.attributes.color:n.getDependency(`accessor`,u.COLOR_0);c.push(t)}}return Promise.all([Promise.all(o),Promise.all(s),Promise.all(c)]).then(function(t){let n=t[0],o=t[1],s=t[2];return r&&(e.morphAttributes.position=n),i&&(e.morphAttributes.normal=o),a&&(e.morphAttributes.color=s),e.morphTargetsRelative=!0,e})}function ut(e,t){if(e.updateMorphTargets(),t.weights!==void 0)for(let n=0,r=t.weights.length;n<r;n++)e.morphTargetInfluences[n]=t.weights[n];if(t.extras&&Array.isArray(t.extras.targetNames)){let n=t.extras.targetNames;if(e.morphTargetInfluences.length===n.length){e.morphTargetDictionary={};for(let t=0,r=n.length;t<r;t++)e.morphTargetDictionary[n[t]]=t}else console.warn(`THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.`)}}function dt(e){let t,n=e.extensions&&e.extensions[L.KHR_DRACO_MESH_COMPRESSION];if(t=n?`draco:`+n.bufferView+`:`+n.indices+`:`+ft(n.attributes):e.indices+`:`+ft(e.attributes)+`:`+e.mode,e.targets!==void 0)for(let n=0,r=e.targets.length;n<r;n++)t+=`:`+ft(e.targets[n]);return t}function ft(e){let t=``,n=Object.keys(e).sort();for(let r=0,i=n.length;r<i;r++)t+=n[r]+`:`+e[n[r]]+`;`;return t}function pt(e){switch(e){case Int8Array:return 1/127;case Uint8Array:return 1/255;case Int16Array:return 1/32767;case Uint16Array:return 1/65535;default:throw Error(`THREE.GLTFLoader: Unsupported normalized accessor component type.`)}}function mt(e){return e.search(/\.jpe?g($|\?)/i)>0||e.search(/^data\:image\/jpeg/)===0?`image/jpeg`:e.search(/\.webp($|\?)/i)>0||e.search(/^data\:image\/webp/)===0?`image/webp`:e.search(/\.ktx2($|\?)/i)>0||e.search(/^data\:image\/ktx2/)===0?`image/ktx2`:`image/png`}var ht=new n.Matrix4,gt=class{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new Te,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let r=!1,i=-1,a=!1,o=-1;if(typeof navigator<`u`&&navigator.userAgent!==void 0){let e=navigator.userAgent;r=/^((?!chrome|android).)*safari/i.test(e)===!0;let t=e.match(/Version\/(\d+)/);i=r&&t?parseInt(t[1],10):-1,a=e.indexOf(`Firefox`)>-1,o=a?e.match(/Firefox\/([0-9]+)\./)[1]:-1}typeof createImageBitmap>`u`||r&&i<17||a&&o<98?this.textureLoader=new n.TextureLoader(this.options.manager):this.textureLoader=new n.ImageBitmapLoader(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new n.FileLoader(this.options.manager),this.fileLoader.setResponseType(`arraybuffer`),this.options.crossOrigin===`use-credentials`&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){let n=this,r=this.json,i=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(e){return e._markDefs&&e._markDefs()}),Promise.all(this._invokeAll(function(e){return e.beforeRoot&&e.beforeRoot()})).then(function(){return Promise.all([n.getDependencies(`scene`),n.getDependencies(`animation`),n.getDependencies(`camera`)])}).then(function(t){let a={scene:t[0][r.scene||0],scenes:t[0],animations:t[1],cameras:t[2],asset:r.asset,parser:n,userData:{}};return ct(i,a,r),B(a,r),Promise.all(n._invokeAll(function(e){return e.afterRoot&&e.afterRoot(a)})).then(function(){for(let e of a.scenes)e.updateMatrixWorld();e(a)})}).catch(t)}_markDefs(){let e=this.json.nodes||[],t=this.json.skins||[],n=this.json.meshes||[];for(let n=0,r=t.length;n<r;n++){let r=t[n].joints;for(let t=0,n=r.length;t<n;t++)e[r[t]].isBone=!0}for(let t=0,r=e.length;t<r;t++){let r=e[t];r.mesh!==void 0&&(this._addNodeRef(this.meshCache,r.mesh),r.skin!==void 0&&(n[r.mesh].isSkinnedMesh=!0)),r.camera!==void 0&&this._addNodeRef(this.cameraCache,r.camera)}}_addNodeRef(e,t){t!==void 0&&(e.refs[t]===void 0&&(e.refs[t]=e.uses[t]=0),e.refs[t]++)}_getNodeRef(e,t,n){if(e.refs[t]<=1)return n;let r=n.clone(),i=(e,t)=>{let n=this.associations.get(e);n!=null&&this.associations.set(t,n);for(let[n,r]of e.children.entries())i(r,t.children[n])};return i(n,r),r.name+=`_instance_`+e.uses[t]++,r}_invokeOne(e){let t=Object.values(this.plugins);t.push(this);for(let n=0;n<t.length;n++){let r=e(t[n]);if(r)return r}return null}_invokeAll(e){let t=Object.values(this.plugins);t.unshift(this);let n=[];for(let r=0;r<t.length;r++){let i=e(t[r]);i&&n.push(i)}return n}getDependency(e,t){let n=e+`:`+t,r=this.cache.get(n);if(!r){switch(e){case`scene`:r=this.loadScene(t);break;case`node`:r=this._invokeOne(function(e){return e.loadNode&&e.loadNode(t)});break;case`mesh`:r=this._invokeOne(function(e){return e.loadMesh&&e.loadMesh(t)});break;case`accessor`:r=this.loadAccessor(t);break;case`bufferView`:r=this._invokeOne(function(e){return e.loadBufferView&&e.loadBufferView(t)});break;case`buffer`:r=this.loadBuffer(t);break;case`material`:r=this._invokeOne(function(e){return e.loadMaterial&&e.loadMaterial(t)});break;case`texture`:r=this._invokeOne(function(e){return e.loadTexture&&e.loadTexture(t)});break;case`skin`:r=this.loadSkin(t);break;case`animation`:r=this._invokeOne(function(e){return e.loadAnimation&&e.loadAnimation(t)});break;case`camera`:r=this.loadCamera(t);break;default:if(r=this._invokeOne(function(n){return n!=this&&n.getDependency&&n.getDependency(e,t)}),!r)throw Error(`Unknown type: `+e);break}this.cache.add(n,r)}return r}getDependencies(e){let t=this.cache.get(e);if(!t){let n=this,r=this.json[e+(e===`mesh`?`es`:`s`)]||[];t=Promise.all(r.map(function(t,r){return n.getDependency(e,r)})),this.cache.add(e,t)}return t}loadBuffer(e){let t=this.json.buffers[e],r=this.fileLoader;if(t.type&&t.type!==`arraybuffer`)throw Error(`THREE.GLTFLoader: `+t.type+` buffer type is not supported.`);if(t.uri===void 0&&e===0)return Promise.resolve(this.extensions[L.KHR_BINARY_GLTF].body);let i=this.options;return new Promise(function(e,a){r.load(n.LoaderUtils.resolveURL(t.uri,i.path),e,void 0,function(){a(Error(`THREE.GLTFLoader: Failed to load buffer "`+t.uri+`".`))})})}loadBufferView(e){let t=this.json.bufferViews[e];return this.getDependency(`buffer`,t.buffer).then(function(e){let n=t.byteLength||0,r=t.byteOffset||0;return e.slice(r,r+n)})}loadAccessor(e){let t=this,r=this.json,i=this.json.accessors[e];if(i.bufferView===void 0&&i.sparse===void 0){let e=nt[i.type],t=$e[i.componentType],r=i.normalized===!0,a=new t(i.count*e);return Promise.resolve(new n.BufferAttribute(a,e,r))}let a=[];return i.bufferView===void 0?a.push(null):a.push(this.getDependency(`bufferView`,i.bufferView)),i.sparse!==void 0&&(a.push(this.getDependency(`bufferView`,i.sparse.indices.bufferView)),a.push(this.getDependency(`bufferView`,i.sparse.values.bufferView))),Promise.all(a).then(function(e){let a=e[0],o=nt[i.type],s=$e[i.componentType],c=s.BYTES_PER_ELEMENT,l=c*o,u=i.byteOffset||0,d=i.bufferView===void 0?void 0:r.bufferViews[i.bufferView].byteStride,f=i.normalized===!0,p,m;if(d&&d!==l){let e=Math.floor(u/d),r=`InterleavedBuffer:`+i.bufferView+`:`+i.componentType+`:`+e+`:`+i.count,l=t.cache.get(r);l||(p=new s(a,e*d,i.count*d/c),l=new n.InterleavedBuffer(p,d/c),t.cache.add(r,l)),m=new n.InterleavedBufferAttribute(l,o,u%d/c,f)}else p=a===null?new s(i.count*o):new s(a,u,i.count*o),m=new n.BufferAttribute(p,o,f);if(i.sparse!==void 0){let t=nt.SCALAR,r=$e[i.sparse.indices.componentType],c=i.sparse.indices.byteOffset||0,l=i.sparse.values.byteOffset||0,u=new r(e[1],c,i.sparse.count*t),d=new s(e[2],l,i.sparse.count*o);a!==null&&(m=new n.BufferAttribute(m.array.slice(),m.itemSize,m.normalized)),m.normalized=!1;for(let e=0,t=u.length;e<t;e++){let t=u[e];if(m.setX(t,d[e*o]),o>=2&&m.setY(t,d[e*o+1]),o>=3&&m.setZ(t,d[e*o+2]),o>=4&&m.setW(t,d[e*o+3]),o>=5)throw Error(`THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.`)}m.normalized=f}return m})}loadTexture(e){let t=this.json,n=this.options,r=t.textures[e].source,i=t.images[r],a=this.textureLoader;if(i.uri){let e=n.manager.getHandler(i.uri);e!==null&&(a=e)}return this.loadTextureImage(e,r,a)}loadTextureImage(e,t,r){let i=this,a=this.json,o=a.textures[e],s=a.images[t],c=(s.uri||s.bufferView)+`:`+o.sampler;if(this.textureCache[c])return this.textureCache[c];let l=this.loadImageSource(t,r).then(function(t){t.flipY=!1,t.name=o.name||s.name||``,t.name===``&&typeof s.uri==`string`&&s.uri.startsWith(`data:image/`)===!1&&(t.name=s.uri);let r=(a.samplers||{})[o.sampler]||{};return t.magFilter=et[r.magFilter]||n.LinearFilter,t.minFilter=et[r.minFilter]||n.LinearMipmapLinearFilter,t.wrapS=tt[r.wrapS]||n.RepeatWrapping,t.wrapT=tt[r.wrapT]||n.RepeatWrapping,t.generateMipmaps=!t.isCompressedTexture&&t.minFilter!==n.NearestFilter&&t.minFilter!==n.LinearFilter,i.associations.set(t,{textures:e}),t}).catch(function(){return null});return this.textureCache[c]=l,l}loadImageSource(e,t){let r=this,i=this.json,a=this.options;if(this.sourceCache[e]!==void 0)return this.sourceCache[e].then(e=>e.clone());let o=i.images[e],s=self.URL||self.webkitURL,c=o.uri||``,l=!1;if(o.bufferView!==void 0)c=r.getDependency(`bufferView`,o.bufferView).then(function(e){l=!0;let t=new Blob([e],{type:o.mimeType});return c=s.createObjectURL(t),c});else if(o.uri===void 0)throw Error(`THREE.GLTFLoader: Image `+e+` is missing URI and bufferView`);let u=Promise.resolve(c).then(function(e){return new Promise(function(r,i){let o=r;t.isImageBitmapLoader===!0&&(o=function(e){let t=new n.Texture(e);t.needsUpdate=!0,r(t)}),t.load(n.LoaderUtils.resolveURL(e,a.path),o,void 0,i)})}).then(function(e){return l===!0&&s.revokeObjectURL(c),B(e,o),e.userData.mimeType=o.mimeType||mt(o.uri),e}).catch(function(e){throw console.error(`THREE.GLTFLoader: Couldn't load texture`,c),e});return this.sourceCache[e]=u,u}assignTexture(e,t,n,r){let i=this;return this.getDependency(`texture`,n.index).then(function(a){if(!a)return null;if(n.texCoord!==void 0&&n.texCoord>0&&(a=a.clone(),a.channel=n.texCoord),i.extensions[L.KHR_TEXTURE_TRANSFORM]){let e=n.extensions===void 0?void 0:n.extensions[L.KHR_TEXTURE_TRANSFORM];if(e){let t=i.associations.get(a);a=i.extensions[L.KHR_TEXTURE_TRANSFORM].extendTexture(a,e),i.associations.set(a,t)}}return r!==void 0&&(a.colorSpace=r),e[t]=a,a})}assignFinalMaterial(e){let t=e.geometry,r=e.material,i=t.attributes.tangent===void 0,a=t.attributes.color!==void 0,o=t.attributes.normal===void 0;if(e.isPoints){let e=`PointsMaterial:`+r.uuid,t=this.cache.get(e);t||(t=new n.PointsMaterial,n.Material.prototype.copy.call(t,r),t.color.copy(r.color),t.map=r.map,t.sizeAttenuation=!1,this.cache.add(e,t)),r=t}else if(e.isLine){let e=`LineBasicMaterial:`+r.uuid,t=this.cache.get(e);t||(t=new n.LineBasicMaterial,n.Material.prototype.copy.call(t,r),t.color.copy(r.color),t.map=r.map,this.cache.add(e,t)),r=t}if(i||a||o){let e=`ClonedMaterial:`+r.uuid+`:`;i&&(e+=`derivative-tangents:`),a&&(e+=`vertex-colors:`),o&&(e+=`flat-shading:`);let t=this.cache.get(e);t||(t=r.clone(),a&&(t.vertexColors=!0),o&&(t.flatShading=!0),i&&(t.normalScale&&(t.normalScale.y*=-1),t.clearcoatNormalScale&&(t.clearcoatNormalScale.y*=-1)),this.cache.add(e,t),this.associations.set(t,this.associations.get(r))),r=t}e.material=r}getMaterialType(){return n.MeshStandardMaterial}loadMaterial(e){let t=this,r=this.json,i=this.extensions,a=r.materials[e],o,s={},c=a.extensions||{},l=[];if(c[L.KHR_MATERIALS_UNLIT]){let e=i[L.KHR_MATERIALS_UNLIT];o=e.getMaterialType(),l.push(e.extendParams(s,a,t))}else{let r=a.pbrMetallicRoughness||{};if(s.color=new n.Color(1,1,1),s.opacity=1,Array.isArray(r.baseColorFactor)){let e=r.baseColorFactor;s.color.setRGB(e[0],e[1],e[2],n.LinearSRGBColorSpace),s.opacity=e[3]}r.baseColorTexture!==void 0&&l.push(t.assignTexture(s,`map`,r.baseColorTexture,n.SRGBColorSpace)),s.metalness=r.metallicFactor===void 0?1:r.metallicFactor,s.roughness=r.roughnessFactor===void 0?1:r.roughnessFactor,r.metallicRoughnessTexture!==void 0&&(l.push(t.assignTexture(s,`metalnessMap`,r.metallicRoughnessTexture)),l.push(t.assignTexture(s,`roughnessMap`,r.metallicRoughnessTexture))),o=this._invokeOne(function(t){return t.getMaterialType&&t.getMaterialType(e)}),l.push(Promise.all(this._invokeAll(function(t){return t.extendMaterialParams&&t.extendMaterialParams(e,s)})))}a.doubleSided===!0&&(s.side=n.DoubleSide);let u=a.alphaMode||ot.OPAQUE;if(u===ot.BLEND?(s.transparent=!0,s.depthWrite=!1):(s.transparent=!1,u===ot.MASK&&(s.alphaTest=a.alphaCutoff===void 0?.5:a.alphaCutoff)),a.normalTexture!==void 0&&o!==n.MeshBasicMaterial&&(l.push(t.assignTexture(s,`normalMap`,a.normalTexture)),s.normalScale=new n.Vector2(1,1),a.normalTexture.scale!==void 0)){let e=a.normalTexture.scale;s.normalScale.set(e,e)}if(a.occlusionTexture!==void 0&&o!==n.MeshBasicMaterial&&(l.push(t.assignTexture(s,`aoMap`,a.occlusionTexture)),a.occlusionTexture.strength!==void 0&&(s.aoMapIntensity=a.occlusionTexture.strength)),a.emissiveFactor!==void 0&&o!==n.MeshBasicMaterial){let e=a.emissiveFactor;s.emissive=new n.Color().setRGB(e[0],e[1],e[2],n.LinearSRGBColorSpace)}return a.emissiveTexture!==void 0&&o!==n.MeshBasicMaterial&&l.push(t.assignTexture(s,`emissiveMap`,a.emissiveTexture,n.SRGBColorSpace)),Promise.all(l).then(function(){let n=new o(s);return a.name&&(n.name=a.name),B(n,a),t.associations.set(n,{materials:e}),a.extensions&&ct(i,n,a),n})}createUniqueName(e){let t=n.PropertyBinding.sanitizeNodeName(e||``);return t in this.nodeNamesUsed?t+`_`+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){let t=this,r=this.extensions,i=this.primitiveCache;function a(e){return r[L.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(e,t).then(function(n){return vt(n,e,t)})}let o=[];for(let r=0,s=e.length;r<s;r++){let s=e[r],c=dt(s),l=i[c];if(l)o.push(l.promise);else{let e;e=s.extensions&&s.extensions[L.KHR_DRACO_MESH_COMPRESSION]?a(s):vt(new n.BufferGeometry,s,t),i[c]={primitive:s,promise:e},o.push(e)}}return Promise.all(o)}loadMesh(e){let t=this,r=this.json,i=this.extensions,a=r.meshes[e],o=a.primitives,s=[];for(let e=0,t=o.length;e<t;e++){let t=o[e].material===void 0?st(this.cache):this.getDependency(`material`,o[e].material);s.push(t)}return s.push(t.loadGeometries(o)),Promise.all(s).then(function(r){let s=r.slice(0,r.length-1),c=r[r.length-1],l=[];for(let r=0,u=c.length;r<u;r++){let u=c[r],d=o[r],f,p=s[r];if(d.mode===z.TRIANGLES||d.mode===z.TRIANGLE_STRIP||d.mode===z.TRIANGLE_FAN||d.mode===void 0)f=a.isSkinnedMesh===!0?new n.SkinnedMesh(u,p):new n.Mesh(u,p),f.isSkinnedMesh===!0&&f.normalizeSkinWeights(),d.mode===z.TRIANGLE_STRIP?f.geometry=Ce(f.geometry,n.TriangleStripDrawMode):d.mode===z.TRIANGLE_FAN&&(f.geometry=Ce(f.geometry,n.TriangleFanDrawMode));else if(d.mode===z.LINES)f=new n.LineSegments(u,p);else if(d.mode===z.LINE_STRIP)f=new n.Line(u,p);else if(d.mode===z.LINE_LOOP)f=new n.LineLoop(u,p);else if(d.mode===z.POINTS)f=new n.Points(u,p);else throw Error(`THREE.GLTFLoader: Primitive mode unsupported: `+d.mode);Object.keys(f.geometry.morphAttributes).length>0&&ut(f,a),f.name=t.createUniqueName(a.name||`mesh_`+e),B(f,a),d.extensions&&ct(i,f,d),t.assignFinalMaterial(f),l.push(f)}for(let n=0,r=l.length;n<r;n++)t.associations.set(l[n],{meshes:e,primitives:n});if(l.length===1)return a.extensions&&ct(i,l[0],a),l[0];let u=new n.Group;a.extensions&&ct(i,u,a),t.associations.set(u,{meshes:e});for(let e=0,t=l.length;e<t;e++)u.add(l[e]);return u})}loadCamera(e){let t,r=this.json.cameras[e],i=r[r.type];if(!i){console.warn(`THREE.GLTFLoader: Missing camera parameters.`);return}return r.type===`perspective`?t=new n.PerspectiveCamera(n.MathUtils.radToDeg(i.yfov),i.aspectRatio||1,i.znear||1,i.zfar||2e6):r.type===`orthographic`&&(t=new n.OrthographicCamera(-i.xmag,i.xmag,i.ymag,-i.ymag,i.znear,i.zfar)),r.name&&(t.name=this.createUniqueName(r.name)),B(t,r),Promise.resolve(t)}loadSkin(e){let t=this.json.skins[e],r=[];for(let e=0,n=t.joints.length;e<n;e++)r.push(this._loadNodeShallow(t.joints[e]));return t.inverseBindMatrices===void 0?r.push(null):r.push(this.getDependency(`accessor`,t.inverseBindMatrices)),Promise.all(r).then(function(e){let r=e.pop(),i=e,a=[],o=[];for(let e=0,s=i.length;e<s;e++){let s=i[e];if(s){a.push(s);let t=new n.Matrix4;r!==null&&t.fromArray(r.array,e*16),o.push(t)}else console.warn(`THREE.GLTFLoader: Joint "%s" could not be found.`,t.joints[e])}return new n.Skeleton(a,o)})}loadAnimation(e){let t=this.json,r=this,i=t.animations[e],a=i.name?i.name:`animation_`+e,o=[],s=[],c=[],l=[],u=[];for(let e=0,t=i.channels.length;e<t;e++){let t=i.channels[e],n=i.samplers[t.sampler],r=t.target,a=r.node,d=i.parameters===void 0?n.input:i.parameters[n.input],f=i.parameters===void 0?n.output:i.parameters[n.output];r.node!==void 0&&(o.push(this.getDependency(`node`,a)),s.push(this.getDependency(`accessor`,d)),c.push(this.getDependency(`accessor`,f)),l.push(n),u.push(r))}return Promise.all([Promise.all(o),Promise.all(s),Promise.all(c),Promise.all(l),Promise.all(u)]).then(function(e){let t=e[0],o=e[1],s=e[2],c=e[3],l=e[4],u=[];for(let e=0,n=t.length;e<n;e++){let n=t[e],i=o[e],a=s[e],d=c[e],f=l[e];if(n===void 0)continue;n.updateMatrix&&n.updateMatrix();let p=r._createAnimationTracks(n,i,a,d,f);if(p)for(let e=0;e<p.length;e++)u.push(p[e])}let d=new n.AnimationClip(a,void 0,u);return B(d,i),d})}createNodeMesh(e){let t=this.json,n=this,r=t.nodes[e];return r.mesh===void 0?null:n.getDependency(`mesh`,r.mesh).then(function(e){let t=n._getNodeRef(n.meshCache,r.mesh,e);return r.weights!==void 0&&t.traverse(function(e){if(e.isMesh)for(let t=0,n=r.weights.length;t<n;t++)e.morphTargetInfluences[t]=r.weights[t]}),t})}loadNode(e){let t=this.json,r=this,i=t.nodes[e],a=r._loadNodeShallow(e),o=[],s=i.children||[];for(let e=0,t=s.length;e<t;e++)o.push(r.getDependency(`node`,s[e]));let c=i.skin===void 0?Promise.resolve(null):r.getDependency(`skin`,i.skin);return Promise.all([a,Promise.all(o),c]).then(function(e){let t=e[0],r=e[1],i=e[2];i!==null&&t.traverse(function(e){e.isSkinnedMesh&&e.bind(i,ht)});for(let e=0,n=r.length;e<n;e++)t.add(r[e]);if(t.userData.pivot!==void 0&&r.length>0){let e=t.userData.pivot,i=r[0];t.pivot=new n.Vector3().fromArray(e),t.position.x-=e[0],t.position.y-=e[1],t.position.z-=e[2],i.position.set(0,0,0),delete t.userData.pivot}return t})}_loadNodeShallow(e){let t=this.json,r=this.extensions,i=this;if(this.nodeCache[e]!==void 0)return this.nodeCache[e];let a=t.nodes[e],o=a.name?i.createUniqueName(a.name):``,s=[],c=i._invokeOne(function(t){return t.createNodeMesh&&t.createNodeMesh(e)});return c&&s.push(c),a.camera!==void 0&&s.push(i.getDependency(`camera`,a.camera).then(function(e){return i._getNodeRef(i.cameraCache,a.camera,e)})),i._invokeAll(function(t){return t.createNodeAttachment&&t.createNodeAttachment(e)}).forEach(function(e){s.push(e)}),this.nodeCache[e]=Promise.all(s).then(function(t){let s;if(s=a.isBone===!0?new n.Bone:t.length>1?new n.Group:t.length===1?t[0]:new n.Object3D,s!==t[0])for(let e=0,n=t.length;e<n;e++)s.add(t[e]);if(a.name&&(s.userData.name=a.name,s.name=o),B(s,a),a.extensions&&ct(r,s,a),a.matrix!==void 0){let e=new n.Matrix4;e.fromArray(a.matrix),s.applyMatrix4(e)}else a.translation!==void 0&&s.position.fromArray(a.translation),a.rotation!==void 0&&s.quaternion.fromArray(a.rotation),a.scale!==void 0&&s.scale.fromArray(a.scale);if(!i.associations.has(s))i.associations.set(s,{});else if(a.mesh!==void 0&&i.meshCache.refs[a.mesh]>1){let e=i.associations.get(s);i.associations.set(s,{...e})}return i.associations.get(s).nodes=e,s}),this.nodeCache[e]}loadScene(e){let t=this.extensions,r=this.json.scenes[e],i=this,a=new n.Group;r.name&&(a.name=i.createUniqueName(r.name)),B(a,r),r.extensions&&ct(t,a,r);let o=r.nodes||[],s=[];for(let e=0,t=o.length;e<t;e++)s.push(i.getDependency(`node`,o[e]));return Promise.all(s).then(function(e){for(let t=0,n=e.length;t<n;t++){let n=e[t];n.parent===null?a.add(n):a.add(we(n))}return i.associations=(e=>{let t=new Map;for(let[e,r]of i.associations)(e instanceof n.Material||e instanceof n.Texture)&&t.set(e,r);return e.traverse(e=>{let n=i.associations.get(e);n!=null&&t.set(e,n)}),t})(a),a})}_createAnimationTracks(e,t,r,i,a){let o=[],s=e.name?e.name:e.uuid,c=[];function l(e){e.morphTargetInfluences&&c.push(e.name?e.name:e.uuid)}it[a.path]===it.weights?(l(e),e.isGroup&&e.children.forEach(l)):c.push(s);let u;switch(it[a.path]){case it.weights:u=n.NumberKeyframeTrack;break;case it.rotation:u=n.QuaternionKeyframeTrack;break;case it.translation:case it.scale:u=n.VectorKeyframeTrack;break;default:switch(r.itemSize){case 1:u=n.NumberKeyframeTrack;break;default:u=n.VectorKeyframeTrack;break}break}let d=i.interpolation===void 0?n.InterpolateLinear:at[i.interpolation],f=this._getArrayFromAccessor(r);for(let e=0,n=c.length;e<n;e++){let n=new u(c[e]+`.`+it[a.path],t.array,f,d);i.interpolation===`CUBICSPLINE`&&this._createCubicSplineTrackInterpolant(n),o.push(n)}return o}_getArrayFromAccessor(e){let t=e.array;if(e.normalized){let e=pt(t.constructor),n=new Float32Array(t.length);for(let r=0,i=t.length;r<i;r++)n[r]=t[r]*e;t=n}return t}_createCubicSplineTrackInterpolant(e){e.createInterpolant=function(e){return new(this instanceof n.QuaternionKeyframeTrack?R:Ze)(this.times,this.values,this.getValueSize()/3,e)},e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0}};function _t(e,t,r){let i=t.attributes,a=new n.Box3;if(i.POSITION!==void 0){let e=r.json.accessors[i.POSITION],t=e.min,o=e.max;if(t!==void 0&&o!==void 0){if(a.set(new n.Vector3(t[0],t[1],t[2]),new n.Vector3(o[0],o[1],o[2])),e.normalized){let t=pt($e[e.componentType]);a.min.multiplyScalar(t),a.max.multiplyScalar(t)}}else{console.warn(`THREE.GLTFLoader: Missing min/max properties for accessor POSITION.`);return}}else return;let o=t.targets;if(o!==void 0){let e=new n.Vector3,t=new n.Vector3;for(let n=0,i=o.length;n<i;n++){let i=o[n];if(i.POSITION!==void 0){let n=r.json.accessors[i.POSITION],a=n.min,o=n.max;if(a!==void 0&&o!==void 0){if(t.setX(Math.max(Math.abs(a[0]),Math.abs(o[0]))),t.setY(Math.max(Math.abs(a[1]),Math.abs(o[1]))),t.setZ(Math.max(Math.abs(a[2]),Math.abs(o[2]))),n.normalized){let e=pt($e[n.componentType]);t.multiplyScalar(e)}e.max(t)}else console.warn(`THREE.GLTFLoader: Missing min/max properties for accessor POSITION.`)}}a.expandByVector(e)}e.boundingBox=a;let s=new n.Sphere;a.getCenter(s.center),s.radius=a.min.distanceTo(a.max)/2,e.boundingSphere=s}function vt(e,t,r){let i=t.attributes,a=[];function o(t,n){return r.getDependency(`accessor`,t).then(function(t){e.setAttribute(n,t)})}for(let t in i){let n=rt[t]||t.toLowerCase();n in e.attributes||a.push(o(i[t],n))}if(t.indices!==void 0&&!e.index){let n=r.getDependency(`accessor`,t.indices).then(function(t){e.setIndex(t)});a.push(n)}return n.ColorManagement.workingColorSpace!==n.LinearSRGBColorSpace&&`COLOR_0`in i&&console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${n.ColorManagement.workingColorSpace}" not supported.`),B(e,t),_t(e,t,r),Promise.all(a).then(function(){return t.targets===void 0?e:lt(e,t.targets,r)})}var yt=`KHR_materials_variants`,bt=`softboxVariantMaterials`,xt=`softboxDefaultMaterial`,St=`softboxVariantResolution`;function Ct(e){let t=(e.userData.gltfExtensions?.[yt]?.variants??[]).map(e=>e.name).filter(e=>typeof e==`string`);t.length!==0&&(e.userData[i]=t,e.scene.userData[St]=Tt(e,t).catch(e=>{console.warn(`Failed to resolve material variants:`,e)}))}function wt(e){let t=[];return e.traverse(e=>{let n=e.userData[St];n&&t.push(n)}),Promise.all(t).then(()=>void 0)}async function Tt(e,t){let n=e.parser,r=[];e.scene.traverse(e=>{let t=e;t.isMesh&&t.userData.gltfExtensions?.[yt]&&r.push(t)}),await Promise.all(r.map(e=>Et(e,n,t)))}async function Et(t,n,r){let i=t.userData.gltfExtensions[yt].mappings??[],a=t.material,o={};try{for(let e of i){t.material=await n.getDependency(`material`,e.material),n.assignFinalMaterial(t);let i=t.material;for(let t of e.variants){let e=r[t];e!==void 0&&(o[e]=i)}}}finally{t.material=a}let s=[...new Set(Object.values(o))],c=Array.isArray(a)?a:[a];if(c.some(e=>e.userData.softboxDisposed)){s.forEach(e._);return}t.userData[bt]=o,t.userData[xt]=a,t.userData[e.g]=[...new Set([...s,...c])]}function Dt(e,t){let n=!1;return e.traverse(e=>{let r=e;if(!r.isMesh||!r.userData.softboxVariantMaterials)return;let i=r.userData[bt],a=(t===null?void 0:i[t])??r.userData.softboxDefaultMaterial;r.material!==a&&(r.material=a,n=!0)}),n}var Ot=`https://cdn.jsdelivr.net/npm/three@0.${n.REVISION.replace(/\D/g,``)}/examples/jsm/libs`,kt=`${Ot}/draco/`,At=`${Ot}/basis/`,jt=class{constructor(e={}){this.loadingManager=new n.LoadingManager,this.loader=new F(this.loadingManager),this.config=e}ensureDecoders(){return this.decodersReady||=this.configureDecoders(),this.decodersReady}async configureDecoders(){let e=this.config,t=[];(e.draco??!0)&&t.push(this.configureDraco(e)),(e.ktx2??!0)&&t.push(this.configureKtx2(e)),(e.meshopt??!0)&&t.push(this.configureMeshopt());let n=await Promise.allSettled(t);for(let e of n)e.status===`rejected`&&console.warn(`softbox: a compression decoder failed to initialize; compressed assets using it may not load.`,e.reason)}async configureDraco(e){let{DRACOLoader:t}=await import(`three/examples/jsm/loaders/DRACOLoader.js`),n=new t(this.loadingManager);n.setDecoderPath(e.dracoDecoderPath??kt),this.dracoLoader=n,this.loader.setDRACOLoader(n)}async configureKtx2(e){let{KTX2Loader:t}=await import(`three/examples/jsm/loaders/KTX2Loader.js`),n=new t(this.loadingManager);n.setTranscoderPath(e.ktx2TranscoderPath??At),e.renderer&&n.detectSupport(e.renderer),this.ktx2Loader=n,this.loader.setKTX2Loader(n)}async configureMeshopt(){let e=await import(`three/examples/jsm/libs/meshopt_decoder.module.js`);this.loader.setMeshoptDecoder(e.MeshoptDecoder)}async load(t,r){try{return await this.ensureDecoders(),new Promise(i=>{this.loader.load(t,t=>{(this.config.bvh??!0)&&e.b(t.scene);try{Ct(t)}catch(e){console.warn(`Failed to resolve material variants:`,e)}t.scene.animations=t.animations;let r={scene:new A(t.scene),animations:this.convertAnimations(t.animations),cameras:t.cameras?.map(e=>{let t=e instanceof n.PerspectiveCamera,r=e instanceof n.OrthographicCamera;return{name:e.name,type:e.type,fov:t?e.fov:void 0,aspect:t?e.aspect:void 0,near:t||r?e.near:.1,far:t||r?e.far:1e3}}),userData:t.userData};i(e.N.ok(r))},e=>{e.total>0&&r?.(e.loaded,e.total)},n=>{i(e.N.err(new e.F(`Failed to load GLTF model`,e.P.MODEL_LOAD_FAILED,{url:t,originalError:n})))})})}catch(n){return e.N.err(new e.F(`Failed to initiate model loading`,e.P.MODEL_LOAD_FAILED,{url:t,originalError:n}))}}supports(e){let t=e.split(`.`).pop()?.toLowerCase();return t===`gltf`||t===`glb`}dispose(){this.dracoLoader?.dispose(),this.ktx2Loader?.dispose()}convertAnimations(e){return e.map(e=>({name:e.name,duration:e.duration,tracks:e.tracks.map(e=>({name:e.name,type:this.getTrackType(e),times:e.times,values:e.values}))}))}getTrackType(e){return e instanceof n.VectorKeyframeTrack?`vector`:e instanceof n.QuaternionKeyframeTrack?`quaternion`:e instanceof n.NumberKeyframeTrack?`number`:e instanceof n.BooleanKeyframeTrack?`boolean`:`number`}},Mt=class{static createLoader(t,n={}){let r=t.split(`.`).pop()?.toLowerCase();switch(r){case`gltf`:case`glb`:return new jt(n);default:throw new e.F(`Unsupported file format: ${r}`,e.P.UNSUPPORTED_FORMAT,{url:t,extension:r})}}},Nt={type:`change`},Pt={type:`start`},Ft={type:`end`},It=new n.Ray,Lt=new n.Plane,Rt=Math.cos(70*n.MathUtils.DEG2RAD),V=new n.Vector3,H=2*Math.PI,U={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},zt=1e-6,Bt=class extends n.Controls{constructor(e,t=null){super(e,t),this.state=U.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._cursorStyle=`auto`,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=Ht.bind(this),this._onPointerDown=Vt.bind(this),this._onPointerUp=Ut.bind(this),this._onContextMenu=Xt.bind(this),this._onMouseWheel=Kt.bind(this),this._onKeyDown=qt.bind(this),this._onTouchStart=Jt.bind(this),this._onTouchMove=Yt.bind(this),this._onMouseDown=Wt.bind(this),this._onMouseMove=Gt.bind(this),this._interceptControlDown=Zt.bind(this),this._interceptControlUp=Qt.bind(this),this.domElement!==null&&this.connect(this.domElement),this.update()}set cursorStyle(e){this._cursorStyle=e,e===`grab`?this.domElement.style.cursor=`grab`:this.domElement.style.cursor=`auto`}get cursorStyle(){return this._cursorStyle}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.ownerDocument.removeEventListener(`pointermove`,this._onPointerMove),this.domElement.ownerDocument.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=``}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(Nt),this.update(),this.state=U.NONE}pan(e,t){this._pan(e,t),this.update()}dollyIn(e){this._dollyIn(e),this.update()}dollyOut(e){this._dollyOut(e),this.update()}rotateLeft(e){this._rotateLeft(e),this.update()}rotateUp(e){this._rotateUp(e),this.update()}update(e=null){let t=this.object.position;V.copy(t).sub(this.target),V.applyQuaternion(this._quat),this._spherical.setFromVector3(V),this.autoRotate&&this.state===U.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+=H:r>Math.PI&&(r-=H),i<-Math.PI?i+=H:i>Math.PI&&(i-=H),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(V.setFromSpherical(this._spherical),V.applyQuaternion(this._quatInverse),t.copy(this.target).add(V),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=V.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=V.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):(It.origin.copy(this.object.position),It.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(It.direction))<Rt?this.object.lookAt(this.target):(Lt.setFromNormalAndCoplanarPoint(this.object.up,this.target),It.intersectPlane(Lt,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)>zt||8*(1-this._lastQuaternion.dot(this.object.quaternion))>zt||this._lastTargetPosition.distanceToSquared(this.target)>zt?(this.dispatchEvent(Nt),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(e){return e===null?H/60/60*this.autoRotateSpeed:H/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){V.setFromMatrixColumn(t,0),V.multiplyScalar(-e),this._panOffset.add(V)}_panUp(e,t){this.screenSpacePanning===!0?V.setFromMatrixColumn(t,1):(V.setFromMatrixColumn(t,0),V.crossVectors(this.object.up,V)),V.multiplyScalar(e),this._panOffset.add(V)}_pan(e,t){let n=this.domElement;if(this.object.isPerspectiveCamera){let r=this.object.position;V.copy(r).sub(this.target);let i=V.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(H*this._rotateDelta.x/t.clientHeight),this._rotateUp(H*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(H*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(-H*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(H*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(-H*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(H*this._rotateDelta.x/t.clientHeight),this._rotateUp(H*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 Vt(e){this.enabled!==!1&&(this._pointers.length===0&&(this.domElement.setPointerCapture(e.pointerId),this.domElement.ownerDocument.addEventListener(`pointermove`,this._onPointerMove),this.domElement.ownerDocument.addEventListener(`pointerup`,this._onPointerUp)),!this._isTrackingPointer(e)&&(this._addPointer(e),e.pointerType===`touch`?this._onTouchStart(e):this._onMouseDown(e),this._cursorStyle===`grab`&&(this.domElement.style.cursor=`grabbing`)))}function Ht(e){this.enabled!==!1&&(e.pointerType===`touch`?this._onTouchMove(e):this._onMouseMove(e))}function Ut(e){switch(this._removePointer(e),this._pointers.length){case 0:this.domElement.releasePointerCapture(e.pointerId),this.domElement.ownerDocument.removeEventListener(`pointermove`,this._onPointerMove),this.domElement.ownerDocument.removeEventListener(`pointerup`,this._onPointerUp),this.dispatchEvent(Ft),this.state=U.NONE,this._cursorStyle===`grab`&&(this.domElement.style.cursor=`grab`);break;case 1:let t=this._pointers[0],n=this._pointerPositions[t];this._onTouchStart({pointerId:t,pageX:n.x,pageY:n.y});break}}function Wt(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=U.DOLLY;break;case n.MOUSE.ROTATE:if(e.ctrlKey||e.metaKey||e.shiftKey){if(this.enablePan===!1)return;this._handleMouseDownPan(e),this.state=U.PAN}else{if(this.enableRotate===!1)return;this._handleMouseDownRotate(e),this.state=U.ROTATE}break;case n.MOUSE.PAN:if(e.ctrlKey||e.metaKey||e.shiftKey){if(this.enableRotate===!1)return;this._handleMouseDownRotate(e),this.state=U.ROTATE}else{if(this.enablePan===!1)return;this._handleMouseDownPan(e),this.state=U.PAN}break;default:this.state=U.NONE}this.state!==U.NONE&&this.dispatchEvent(Pt)}function Gt(e){switch(this.state){case U.ROTATE:if(this.enableRotate===!1)return;this._handleMouseMoveRotate(e);break;case U.DOLLY:if(this.enableZoom===!1)return;this._handleMouseMoveDolly(e);break;case U.PAN:if(this.enablePan===!1)return;this._handleMouseMovePan(e);break}}function Kt(e){this.enabled===!1||this.enableZoom===!1||this.state!==U.NONE||(e.preventDefault(),this.dispatchEvent(Pt),this._handleMouseWheel(this._customWheelEvent(e)),this.dispatchEvent(Ft))}function qt(e){this.enabled!==!1&&this._handleKeyDown(e)}function Jt(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=U.TOUCH_ROTATE;break;case n.TOUCH.PAN:if(this.enablePan===!1)return;this._handleTouchStartPan(e),this.state=U.TOUCH_PAN;break;default:this.state=U.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=U.TOUCH_DOLLY_PAN;break;case n.TOUCH.DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchStartDollyRotate(e),this.state=U.TOUCH_DOLLY_ROTATE;break;default:this.state=U.NONE}break;default:this.state=U.NONE}this.state!==U.NONE&&this.dispatchEvent(Pt)}function Yt(e){switch(this._trackPointer(e),this.state){case U.TOUCH_ROTATE:if(this.enableRotate===!1)return;this._handleTouchMoveRotate(e),this.update();break;case U.TOUCH_PAN:if(this.enablePan===!1)return;this._handleTouchMovePan(e),this.update();break;case U.TOUCH_DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchMoveDollyPan(e),this.update();break;case U.TOUCH_DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchMoveDollyRotate(e),this.update();break;default:this.state=U.NONE}}function Xt(e){this.enabled!==!1&&e.preventDefault()}function Zt(e){e.key===`Control`&&(this._controlActive=!0,this.domElement.getRootNode().addEventListener(`keyup`,this._interceptControlUp,{passive:!0,capture:!0}))}function Qt(e){e.key===`Control`&&(this._controlActive=!1,this.domElement.getRootNode().removeEventListener(`keyup`,this._interceptControlUp,{passive:!0,capture:!0}))}var $t=new n.Plane,en=new n.Raycaster,tn=new n.Vector2,nn=new n.Vector3,rn=class extends Bt{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},this._panWorldStart=new n.Vector3}_handleMouseDownPan(e){if(super._handleMouseDownPan(e),this._panOffset.set(0,0,0),this.screenSpacePanning===!0)return;$t.setFromNormalAndCoplanarPoint(this.object.up,this.target);let t=this.domElement.getBoundingClientRect();tn.x=(e.clientX-t.left)/t.width*2-1,tn.y=-((e.clientY-t.top)/t.height)*2+1,en.setFromCamera(tn,this.object),en.ray.intersectPlane($t,this._panWorldStart)}_handleMouseMovePan(e){if(this.screenSpacePanning===!0){super._handleMouseMovePan(e);return}let t=this.domElement.getBoundingClientRect();tn.x=(e.clientX-t.left)/t.width*2-1,tn.y=-((e.clientY-t.top)/t.height)*2+1,en.setFromCamera(tn,this.object),en.ray.intersectPlane($t,nn)&&(nn.sub(this._panWorldStart),this._panOffset.copy(nn).negate(),this.update())}},an=class{constructor(e){this.controls=e,this.targetAdapter=O.fromThreeVector(e.target)}get enabled(){return this.controls.enabled}set enabled(e){this.controls.enabled=e}get enableDamping(){return this.controls.enableDamping}set enableDamping(e){this.controls.enableDamping=e}get dampingFactor(){return this.controls.dampingFactor}set dampingFactor(e){this.controls.dampingFactor=e}get enableZoom(){return this.controls.enableZoom}set enableZoom(e){this.controls.enableZoom=e}get enableRotate(){return this.controls.enableRotate}set enableRotate(e){this.controls.enableRotate=e}get enablePan(){return this.controls.enablePan}set enablePan(e){this.controls.enablePan=e}get zoomSpeed(){return this.controls.zoomSpeed}set zoomSpeed(e){this.controls.zoomSpeed=e}get minDistance(){return this.controls.minDistance}set minDistance(e){this.controls.minDistance=e}get maxDistance(){return this.controls.maxDistance}set maxDistance(e){this.controls.maxDistance=e}get rotateSpeed(){return this.controls.rotateSpeed}set rotateSpeed(e){this.controls.rotateSpeed=e}get minPolarAngle(){return this.controls.minPolarAngle}set minPolarAngle(e){this.controls.minPolarAngle=e}get maxPolarAngle(){return this.controls.maxPolarAngle}set maxPolarAngle(e){this.controls.maxPolarAngle=e}get minAzimuthAngle(){return this.controls.minAzimuthAngle}set minAzimuthAngle(e){this.controls.minAzimuthAngle=e}get maxAzimuthAngle(){return this.controls.maxAzimuthAngle}set maxAzimuthAngle(e){this.controls.maxAzimuthAngle=e}get panSpeed(){return this.controls.panSpeed}set panSpeed(e){this.controls.panSpeed=e}get screenSpacePanning(){return this.controls.screenSpacePanning}set screenSpacePanning(e){this.controls.screenSpacePanning=e}get target(){return this.targetAdapter}update(){return this.controls.update()}onChange(e){return this.controls.addEventListener(`change`,e),()=>this.controls.removeEventListener(`change`,e)}reset(){this.controls.reset()}dispose(){this.controls.dispose()}connect(e){}disconnect(){this.controls.dispose()}get autoRotate(){return this.controls.autoRotate}set autoRotate(e){this.controls.autoRotate=e}get autoRotateSpeed(){return this.controls.autoRotateSpeed}set autoRotateSpeed(e){this.controls.autoRotateSpeed=e}getThreeControls(){return this.controls}},on=class extends an{constructor(e,t){super(new Bt(e,t))}get type(){return`orbit`}},sn=class extends an{constructor(e,t){let n=new rn(e,t);super(n),n.screenSpacePanning=!0}get type(){return`map`}get screenSpacePanning(){return!0}set screenSpacePanning(e){}},W=function(e){return e.SHADOW_FLOOR=`shadow_floor`,e.CONCRETE_DISC=`concrete_disc`,e.SQUARE_WIRE=`square_wire`,e.HEXAGONAL_WIRE=`hexagonal_wire`,e.HEXAGONAL_GLASS=`hexagonal_glass`,e.STONE_TILES=`stone_tiles`,e.CUSTOM=`custom`,e}({}),cn=class{constructor(){this.name=`Square Wire Grid`}createGrid(e){let t=e.size||10,r=e.divisions||10,i=new n.Color(e.color||8947848),a=new n.Color(e.centerLineColor||e.color||4473924),o=new n.GridHelper(t,r,a,i);if(e.opacity!==void 0&&e.opacity<1){let t=o.material;t.transparent=!0,t.opacity=e.opacity}return o}dispose(){}},ln=class{constructor(){this.name=`Hexagonal Wire Grid`}createGrid(e){let t=new n.Group,r=e.styleOptions?.hexRadius??Math.floor(e.divisions/2),i=e.size/Math.max(1,r*2),a=new n.Color(e.color||8947848),o=e.opacity||.4,s=new n.LineBasicMaterial({color:a,transparent:!0,opacity:o}),c=i*Math.sqrt(3),l=i*2;for(let e=-r;e<=r;e++){let a=Math.max(-r,-e-r),o=Math.min(r,-e+r);for(let r=a;r<=o;r++){let a=c*(e+r/2),o=l*.75*r,u=[],d=Math.PI*2/6;for(let e=0;e<=6;e++){let t=e*d+Math.PI/6,r=a+i*Math.cos(t),s=o+i*Math.sin(t);u.push(new n.Vector3(r,0,s))}let f=new n.BufferGeometry().setFromPoints(u),p=new n.Line(f,s);t.add(p)}}return t}dispose(){}},un=class{static{this.HEIGHT_RATIO=.075}static{this.BEVEL_RATIO=.04}static{this.GAP_FACTOR=1.05}static getHeight(e){return e*this.HEIGHT_RATIO}static getBevelSize(e){return e*this.BEVEL_RATIO}static getBevelThickness(e){return this.getBevelSize(e)}static getBaseSize(e){return e+this.getBevelSize(e)+this.getBevelThickness(e)}static getGapFactor(){return this.GAP_FACTOR}static getGridSpacing(e){let t=this.getBaseSize(e),n=this.getGapFactor();return{width:Math.sqrt(3)*t*n,height:2*t*n}}static getYPosition(e){return-this.getBevelSize(e)}},dn=class{constructor(e,t,n,r={}){this.position=e,this.size=t,this.color=n,this.materialOptions=r,this.height=un.getHeight(this.size),this.bevel=un.getBevelSize(this.size)}createGeometry(){let e=new n.Shape,t=this.size+this.bevel,r=Math.PI*2/6;for(let n=0;n<6;n++){let i=t*Math.cos(n*r),a=t*Math.sin(n*r);n===0?e.moveTo(i,a):e.lineTo(i,a)}e.closePath();let i={depth:this.height,bevelEnabled:!0,bevelSize:this.bevel,bevelThickness:this.bevel,bevelSegments:2},a=new n.ExtrudeGeometry(e,i);return a.rotateZ(Math.PI/6),a.rotateX(Math.PI/2),a.translate(this.position.x,this.position.y,this.position.z),a}createMaterial(){let{metalness:e=0,roughness:t=.15,transmission:r=1,thickness:i=.4,ior:a=1.5}=this.materialOptions,o=r>0;return new n.MeshPhysicalMaterial({color:new n.Color(this.color),metalness:e,roughness:t,transparent:o,transmission:r,thickness:i,ior:a,opacity:1,clearcoat:+!!o,clearcoatRoughness:.05,sheen:+!!o,sheenColor:new n.Color(16777215),envMapIntensity:1})}};function fn(t,r=.28){let i=new n.Mesh(new n.CircleGeometry(Math.max(t,1),64),new n.ShadowMaterial({opacity:r}));return i.name=e.u,i.userData[e.l]=!0,i.rotation.x=-Math.PI/2,i.position.y=.002,i.receiveShadow=!0,i}function pn(e,t){let r=e.getIndex()?e.toNonIndexed():e,i=r.getAttribute(`position`).array,a=r.getAttribute(`normal`).array,o=r.getAttribute(`uv`)?.array,s=new Float32Array(i.length*t.length),c=new Float32Array(a.length*t.length),l=o?new Float32Array(o.length*t.length):void 0;t.forEach((e,t)=>{let n=t*i.length;s.set(i,n);for(let t=n;t<n+i.length;t+=3)s[t]+=e.x,s[t+1]+=e.y,s[t+2]+=e.z;c.set(a,t*a.length),l&&o&&l.set(o,t*o.length)});let u=new n.BufferGeometry;return u.setAttribute(`position`,new n.BufferAttribute(s,3)),u.setAttribute(`normal`,new n.BufferAttribute(c,3)),l&&u.setAttribute(`uv`,new n.BufferAttribute(l,2)),u}var mn=class{constructor(){this.name=`Hexagonal Glass Grid`}createGrid(e){let t=new n.Group,r=e.styleOptions?.hexRadius??Math.floor(e.divisions/2),i=e.styleOptions?.tileSize||1,a=String(e.color||`#ffffff`),o=un.getGridSpacing(i),s=o.width,c=o.height,l=new dn(new n.Vector3(0,0,0),i,a,{metalness:e.styleOptions?.metalness,roughness:e.styleOptions?.roughness,transmission:e.styleOptions?.transmission,thickness:e.styleOptions?.thickness,ior:e.styleOptions?.ior}),u=l.createGeometry(),d=un.getYPosition(i),f=[];for(let e=-r;e<=r;e++){let t=Math.max(-r,-e-r),i=Math.min(r,-e+r);for(let r=t;r<=i;r++)f.push(new n.Vector3(s*(e+r/2),d,c*.75*r))}let p=new n.Mesh(pn(u,f),l.createMaterial());return p.receiveShadow=!0,t.add(p),u.dispose(),t.add(fn(s*(r+.5),.35)),t}dispose(){}},hn=class{constructor(){this.name=`Stone Tile Grid`,this.textureLoader=new n.TextureLoader}createGrid(e){let t=new n.Group,r=e.size,i=Math.max(1,e.divisions),a=r/i,o=a-a*.02,s=e.styleOptions?.height||a*.05,c=e.styleOptions?.bevelSize||s*.2,l=e.styleOptions?.randomHeight||!1,u=e.styleOptions?.randomRotation||!1,d=this.createStoneMaterial(e);for(let e=0;e<i;e++)for(let r=0;r<i;r++){let f=(e-i/2)*a+a/2,p=(r-i/2)*a+a/2,m=l?s*(.8+Math.random()*.4):s,h=new n.Shape,g=o/2;h.moveTo(-g,-g),h.lineTo(g,-g),h.lineTo(g,g),h.lineTo(-g,g),h.closePath();let _={depth:m,bevelEnabled:!0,bevelSize:c,bevelThickness:c,bevelSegments:2},v=new n.ExtrudeGeometry(h,_);v.rotateX(-Math.PI/2);let y=new n.Mesh(v,d);y.position.set(f,-m/2,p),y.castShadow=!0,y.receiveShadow=!0,u&&(y.rotation.y=Math.floor(Math.random()*4)*(Math.PI/2)),t.add(y)}return t}createStoneMaterial(e){let t={color:new n.Color(e.color||8421504),metalness:e.styleOptions?.metalness||0,roughness:e.styleOptions?.roughness||.8};if(e.styleOptions?.texture){let r=this.loadTexture(e.styleOptions.texture);r&&(t.map=r,r.wrapS=r.wrapT=n.RepeatWrapping,r.repeat.set(1,1))}if(e.styleOptions?.normalMap){let r=this.loadTexture(e.styleOptions.normalMap);r&&(t.normalMap=r,r.wrapS=r.wrapT=n.RepeatWrapping,r.repeat.set(1,1))}if(e.styleOptions?.roughnessMap){let r=this.loadTexture(e.styleOptions.roughnessMap);r&&(t.roughnessMap=r,r.wrapS=r.wrapT=n.RepeatWrapping,r.repeat.set(1,1))}return new n.MeshStandardMaterial(t)}loadTexture(e){try{return this.textureLoader.load(e)}catch(t){return console.warn(`Failed to load texture:`,e,t),null}}},gn=class{constructor(){this.name=`Shadow Floor`}createGrid(e){let t=new n.Group,r=Math.max(e.size||1,1)*1.5;return t.add(fn(r)),t.add(this.createPathTracingDome(r)),t}createPathTracingDome(t){let r=Math.max(t,1),i=r*1.6,a=r*2,o=r*.5,s=i-o,c=[new n.Vector2(0,0),new n.Vector2(s,0)];for(let e=1;e<=16;e+=1){let t=e/16*(Math.PI/2);c.push(new n.Vector2(s+o*Math.sin(t),o*(1-Math.cos(t))))}c.push(new n.Vector2(i,a));let l=new n.Mesh(new n.LatheGeometry(c,96),new n.MeshStandardMaterial({color:`#f0f0f0`,roughness:1,metalness:0,side:n.DoubleSide}));return l.userData[e.f]=!0,l.position.y=.001,l.receiveShadow=!0,l.visible=!1,l}dispose(){}},_n=4,vn=7,yn=(e,t)=>Math.min(Math.max(e/10,.35),t),bn=new n.Color(1.55,1.62,1.72),xn=8,Sn=70,Cn=.55,wn=`#b6b3ac`,G=512,Tn=1592639710,En=e=>{let t=e;return()=>{t|=0,t=t+1831565813|0;let e=Math.imul(t^t>>>15,1|t);return e=e+Math.imul(e^e>>>7,61|e)^e,((e^e>>>14)>>>0)/4294967296}},Dn=t=>{let n=new Float32Array(16384);for(let e=0;e<n.length;e+=1)n[e]=t();let r=(e,t,r)=>{let i=128/r,a=(e%r+r)%r,o=(t%r+r)%r,s=Math.floor(a*i)%128,c=Math.floor(o*i)%128;return n[c*128+s]};return(t,n,i)=>{let a=t*i,o=n*i,s=Math.floor(a),c=Math.floor(o),l=e.t(a-s),u=e.t(o-c),d=r(s,c,i),f=r(s+1,c,i),p=r(s,c+1,i),m=r(s+1,c+1,i);return(d*(1-l)+f*l)*(1-u)+(p*(1-l)+m*l)*u}},On=e=>(t,n)=>.45*e(t,n,32)+.3*e(t,n,64)+.25*e(t,n,128),kn=`
|
|
19
|
+
`},Ee=class{constructor(e,t,n){this.modules=null,this.composer=null,this.renderPass=null,this.passes=[],this.disposed=!1,this.loadFailed=!1,this.renderer=e,this.config=t,this.onLoadError=n,this.load()}async load(){try{let e=this.config.colorGrade!==null,t=this.config.vignette||this.config.filmGrain||e,[n,r,i,a,o,s,c]=await Promise.all([Promise.resolve().then(()=>require("./EffectComposer-CdAQB6p0.cjs")),Promise.resolve().then(()=>require("./RenderPass-DlRq51Kq.cjs")),Promise.resolve().then(()=>require("./OutputPass-DicIJHut.cjs")),this.config.bloom?Promise.resolve().then(()=>require("./UnrealBloomPass-CQHHa-s_.cjs")):Promise.resolve(null),t?Promise.resolve().then(()=>require("./ShaderPass-DghZ7TAj.cjs")):Promise.resolve(null),this.config.vignette?Promise.resolve().then(()=>require("./VignetteShader-CQmGrpns.cjs")):Promise.resolve(null),e?Promise.all([Promise.resolve().then(()=>require("./BrightnessContrastShader-C1jbh-NA.cjs")),Promise.resolve().then(()=>require("./HueSaturationShader-bN5IWhh8.cjs"))]):Promise.resolve(null)]);if(this.disposed)return;this.modules={EffectComposer:n.EffectComposer,RenderPass:r.RenderPass,OutputPass:i.OutputPass,UnrealBloomPass:a?.UnrealBloomPass,ShaderPass:o?.ShaderPass,VignetteShader:s?.VignetteShader,BrightnessContrastShader:c?.[0].BrightnessContrastShader,HueSaturationShader:c?.[1].HueSaturationShader}}catch(e){this.loadFailed=!0,this.disposed||this.onLoadError?.(e),console.warn(`Failed to load post-processing effects; falling back to the plain renderer:`,e)}}isReady(){return this.modules!==null&&!this.disposed&&!this.loadFailed}render(e,t){let n=this.modules;if(n===null||this.disposed||this.loadFailed)return!1;let r=this.composer??this.build(n,e,t);return this.renderPass&&(this.renderPass.scene=e,this.renderPass.camera=t),r.render(),!0}build(e,t,r){let i=this.renderer.getDrawingBufferSize(new n.Vector2),a=new e.EffectComposer(this.renderer),o=Math.min(4,this.renderer.capabilities.maxSamples||0);o>0&&(a.renderTarget1.samples=o,a.renderTarget2.samples=o);let s=new e.RenderPass(t,r);this.renderPass=s,this.addPass(a,s),this.config.bloom&&e.UnrealBloomPass&&this.addPass(a,new e.UnrealBloomPass(new n.Vector2(i.x,i.y),j,M,we)),this.addPass(a,new e.OutputPass);let c=this.config.colorGrade;if(c&&e.ShaderPass&&e.BrightnessContrastShader&&e.HueSaturationShader){let t=new e.ShaderPass(e.BrightnessContrastShader);t.uniforms.contrast.value=c.contrast,this.addPass(a,t);let n=new e.ShaderPass(e.HueSaturationShader);n.uniforms.saturation.value=c.saturation,this.addPass(a,n)}if(this.config.vignette&&e.ShaderPass&&e.VignetteShader){let t=new e.ShaderPass(e.VignetteShader);t.uniforms.offset.value=Te,t.uniforms.darkness.value=N,this.addPass(a,t)}return this.config.filmGrain&&e.ShaderPass&&this.addPass(a,new e.ShaderPass(P)),this.composer=a,a}setSize(e,t){this.composer?.setSize(e,t)}setPixelRatio(e){this.composer?.setPixelRatio?.(e)}addPass(e,t){this.passes.push(t),e.addPass(t)}dispose(){this.disposed=!0;for(let e of this.passes)e.dispose?.();this.passes=[],this.composer?.dispose?.(),this.composer=null,this.renderPass=null,this.modules=null}},F=class{constructor(e){this.renderer=null,this._id=E(),this.postPipeline=null,this.requestedPixelRatio=1,this.canvas=e}setPostProcessingErrorHandler(e){this.postLoadErrorHandler=e}get id(){return this._id}initialize(t){try{if(this.renderer=new n.WebGLRenderer({canvas:this.canvas,antialias:t.antialias??!0,alpha:t.alpha??!1,premultipliedAlpha:t.premultipliedAlpha??!0,preserveDrawingBuffer:t.preserveDrawingBuffer??!1,powerPreference:t.powerPreference??`default`}),t.shadowMap&&(this.renderer.shadowMap.enabled=t.shadowMap.enabled,this.renderer.shadowMap.autoUpdate=!0,t.shadowMap.type)){let e={basic:n.BasicShadowMap,pcf:n.PCFShadowMap,pcfsoft:n.PCFSoftShadowMap,vsm:n.VSMShadowMap};this.renderer.shadowMap.type=e[t.shadowMap.type]}t.toneMapping&&(this.renderer.toneMapping=be[t.toneMapping.type],this.renderer.toneMappingExposure=t.toneMapping.exposure);let r={bloom:t.postProcessing?.bloom??!1,vignette:t.postProcessing?.vignette??!1,filmGrain:t.postProcessing?.filmGrain??!1,colorGrade:t.postProcessing?.colorGrade??null},i=Ce(r);if(this.requestedPixelRatio=t.pixelRatio??window.devicePixelRatio,this.renderer.setPixelRatio(i?Math.min(this.requestedPixelRatio,2):this.requestedPixelRatio),this.canvas){let{clientWidth:e,clientHeight:t}=this.canvas.parentElement||this.canvas;e&&t&&this.renderer.setSize(e,t)}return this.renderer.outputColorSpace=n.SRGBColorSpace,i&&(this.postPipeline=new Ee(this.renderer,r,e=>this.postLoadErrorHandler?.(e))),e.N.ok(void 0)}catch(n){return e.N.err(new e.F(`Failed to initialize renderer`,e.P.RENDERER_INIT_FAILED,{originalError:n,options:t}))}}render(t,n){if(!this.renderer)return e.N.err(new e.F(`Renderer not initialized`,e.P.RENDERER_NOT_INITIALIZED));try{if(!(t instanceof A))return e.N.err(new e.F(`Scene must be a ThreeSceneAdapter`,e.P.INVALID_PARAMETER));if(!(n instanceof fe))return e.N.err(new e.F(`Camera must be a ThreeCameraAdapter`,e.P.INVALID_PARAMETER));let r=t.getThreeScene(),i=n.getThreeCamera();return this.fitBackgroundToDrawingBuffer(r,this.renderer),this.renderer.render(r,i),e.N.ok(void 0)}catch(t){return e.N.err(new e.F(`Failed to render frame`,e.P.RENDER_FAILED,{originalError:t}))}}renderPostProcessed(t,n){if(!this.postPipeline||!this.renderer||!(t instanceof A)||!(n instanceof fe))return this.render(t,n);try{let r=t.getThreeScene();return this.fitBackgroundToDrawingBuffer(r,this.renderer),this.postPipeline.render(r,n.getThreeCamera())?e.N.ok(void 0):this.render(t,n)}catch(t){return e.N.err(new e.F(`Failed to render frame with post-processing`,e.P.RENDER_FAILED,{originalError:t}))}}fitBackgroundToDrawingBuffer(e,t){let n=t.domElement;ge(e,n.width/n.height)}setSize(e,t){if(this.renderer){this.renderer.setSize(e,t,!1),this.postPipeline?.setSize(e,t);let n=this.renderer.domElement;n.style.width=`100%`,n.style.height=`100%`}}setPixelRatio(e){this.renderer&&(this.renderer.setPixelRatio(e),this.postPipeline?.setPixelRatio(e))}getPixelRatio(){return this.renderer?this.renderer.getPixelRatio():1}setToneMappingExposure(e){this.renderer&&(this.renderer.toneMappingExposure=e)}setPostProcessing(e){if(!this.renderer)return;let t={bloom:e.bloom,vignette:e.vignette,filmGrain:e.filmGrain,colorGrade:Se.resolveColorGrade(e.colorGrade)??null};this.postPipeline?.dispose(),this.postPipeline=null;let n=Ce(t);this.renderer.setPixelRatio(n?Math.min(this.requestedPixelRatio,2):this.requestedPixelRatio),n&&(this.postPipeline=new Ee(this.renderer,t,e=>this.postLoadErrorHandler?.(e)))}getDomElement(){if(!this.renderer)throw Error(`Renderer not initialized`);return this.renderer.domElement}getContext(){if(!this.renderer)throw Error(`Renderer not initialized`);return this.renderer.getContext()}get capabilities(){if(!this.renderer)return{maxTextureSize:0,maxCubemapSize:0,maxAttributes:0,maxVertexUniforms:0,maxFragmentUniforms:0,maxSamples:0,isWebGL2:!1};let e=this.renderer.capabilities;return{maxTextureSize:e.maxTextureSize,maxCubemapSize:e.maxCubemapSize,maxAttributes:e.maxAttributes,maxVertexUniforms:e.maxVertexUniforms,maxFragmentUniforms:e.maxFragmentUniforms,maxSamples:e.maxSamples||0,isWebGL2:e.isWebGL2}}dispose(){this.postPipeline?.dispose(),this.postPipeline=null,this.renderer&&=(this.renderer.dispose(),null)}isDisposed(){return this.renderer===null}getInternalRenderer(){return this.renderer}getThreeRenderer(){return this.getInternalRenderer()}};function De(e,t){if(t===n.TrianglesDrawMode)return console.warn(`THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles.`),e;if(t===n.TriangleFanDrawMode||t===n.TriangleStripDrawMode){let r=e.getIndex();if(r===null){let t=[],n=e.getAttribute(`position`);if(n!==void 0){for(let e=0;e<n.count;e++)t.push(e);e.setIndex(t),r=e.getIndex()}else return console.error(`THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.`),e}let i=r.count-2,a=[];if(t===n.TriangleFanDrawMode)for(let e=1;e<=i;e++)a.push(r.getX(0)),a.push(r.getX(e)),a.push(r.getX(e+1));else for(let e=0;e<i;e++)e%2==0?(a.push(r.getX(e)),a.push(r.getX(e+1)),a.push(r.getX(e+2))):(a.push(r.getX(e+2)),a.push(r.getX(e+1)),a.push(r.getX(e)));a.length/3!==i&&console.error(`THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.`);let o=e.clone();return o.setIndex(a),o.clearGroups(),o}else return console.error(`THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:`,t),e}function Oe(e){let t=new Map,n=new Map,r=e.clone();return ke(e,r,function(e,r){t.set(r,e),n.set(e,r)}),r.traverse(function(e){if(!e.isSkinnedMesh)return;let r=e,i=t.get(e),a=i.skeleton.bones;r.skeleton=i.skeleton.clone(),r.bindMatrix.copy(i.bindMatrix),r.skeleton.bones=a.map(function(e){return n.get(e)}),r.bind(r.skeleton,r.bindMatrix)}),r}function ke(e,t,n){n(e,t);for(let r=0;r<e.children.length;r++)ke(e.children[r],t.children[r],n)}var Ae=class extends n.Loader{constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register(function(e){return new Fe(e)}),this.register(function(e){return new Ie(e)}),this.register(function(e){return new Ge(e)}),this.register(function(e){return new Ke(e)}),this.register(function(e){return new qe(e)}),this.register(function(e){return new Re(e)}),this.register(function(e){return new ze(e)}),this.register(function(e){return new Be(e)}),this.register(function(e){return new Ve(e)}),this.register(function(e){return new Pe(e)}),this.register(function(e){return new He(e)}),this.register(function(e){return new Le(e)}),this.register(function(e){return new We(e)}),this.register(function(e){return new Ue(e)}),this.register(function(e){return new Me(e)}),this.register(function(e){return new Je(e,L.EXT_MESHOPT_COMPRESSION)}),this.register(function(e){return new Je(e,L.KHR_MESHOPT_COMPRESSION)}),this.register(function(e){return new Ye(e)})}load(e,t,r,i){let a=this,o;if(this.resourcePath!==``)o=this.resourcePath;else if(this.path!==``){let t=n.LoaderUtils.extractUrlBase(e);o=n.LoaderUtils.resolveURL(t,this.path)}else o=n.LoaderUtils.extractUrlBase(e);this.manager.itemStart(e);let s=function(t){i?i(t):console.error(t),a.manager.itemError(e),a.manager.itemEnd(e)},c=new n.FileLoader(this.manager);c.setPath(this.path),c.setResponseType(`arraybuffer`),c.setRequestHeader(this.requestHeader),c.setWithCredentials(this.withCredentials),c.load(e,function(n){try{a.parse(n,o,function(n){t(n),a.manager.itemEnd(e)},s)}catch(e){s(e)}},r,s)}setDRACOLoader(e){return this.dracoLoader=e,this}setKTX2Loader(e){return this.ktx2Loader=e,this}setMeshoptDecoder(e){return this.meshoptDecoder=e,this}register(e){return this.pluginCallbacks.indexOf(e)===-1&&this.pluginCallbacks.push(e),this}unregister(e){return this.pluginCallbacks.indexOf(e)!==-1&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e),1),this}parse(e,t,n,r){let i,a={},o={},s=new TextDecoder;if(typeof e==`string`)i=JSON.parse(e);else if(e instanceof ArrayBuffer)if(s.decode(new Uint8Array(e,0,4))===Xe){try{a[L.KHR_BINARY_GLTF]=new R(e)}catch(e){r&&r(e);return}i=JSON.parse(a[L.KHR_BINARY_GLTF].content)}else i=JSON.parse(s.decode(e));else i=e;if(i.asset===void 0||i.asset.version[0]<2){r&&r(Error(`THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.`));return}let c=new xt(i,{path:t||this.resourcePath||``,crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});c.fileLoader.setRequestHeader(this.requestHeader);for(let e=0;e<this.pluginCallbacks.length;e++){let t=this.pluginCallbacks[e](c);t.name||console.error(`THREE.GLTFLoader: Invalid plugin found: missing name`),o[t.name]=t,a[t.name]=!0}if(i.extensionsUsed)for(let e=0;e<i.extensionsUsed.length;++e){let t=i.extensionsUsed[e],n=i.extensionsRequired||[];switch(t){case L.KHR_MATERIALS_UNLIT:a[t]=new Ne;break;case L.KHR_DRACO_MESH_COMPRESSION:a[t]=new z(i,this.dracoLoader);break;case L.KHR_TEXTURE_TRANSFORM:a[t]=new $e;break;case L.KHR_MESH_QUANTIZATION:a[t]=new et;break;default:n.indexOf(t)>=0&&o[t]===void 0&&console.warn(`THREE.GLTFLoader: Unknown extension "`+t+`".`)}}c.setExtensions(a),c.setPlugins(o),c.parse(n,r)}parseAsync(e,t){let n=this;return new Promise(function(r,i){n.parse(e,t,r,i)})}};function je(){let e={};return{get:function(t){return e[t]},add:function(t,n){e[t]=n},remove:function(t){delete e[t]},removeAll:function(){e={}}}}function I(e,t,n){let r=e.json.materials[t];return r.extensions&&r.extensions[n]?r.extensions[n]:null}var L={KHR_BINARY_GLTF:`KHR_binary_glTF`,KHR_DRACO_MESH_COMPRESSION:`KHR_draco_mesh_compression`,KHR_LIGHTS_PUNCTUAL:`KHR_lights_punctual`,KHR_MATERIALS_CLEARCOAT:`KHR_materials_clearcoat`,KHR_MATERIALS_DISPERSION:`KHR_materials_dispersion`,KHR_MATERIALS_IOR:`KHR_materials_ior`,KHR_MATERIALS_SHEEN:`KHR_materials_sheen`,KHR_MATERIALS_SPECULAR:`KHR_materials_specular`,KHR_MATERIALS_TRANSMISSION:`KHR_materials_transmission`,KHR_MATERIALS_IRIDESCENCE:`KHR_materials_iridescence`,KHR_MATERIALS_ANISOTROPY:`KHR_materials_anisotropy`,KHR_MATERIALS_UNLIT:`KHR_materials_unlit`,KHR_MATERIALS_VOLUME:`KHR_materials_volume`,KHR_TEXTURE_BASISU:`KHR_texture_basisu`,KHR_TEXTURE_TRANSFORM:`KHR_texture_transform`,KHR_MESH_QUANTIZATION:`KHR_mesh_quantization`,KHR_MATERIALS_EMISSIVE_STRENGTH:`KHR_materials_emissive_strength`,EXT_MATERIALS_BUMP:`EXT_materials_bump`,EXT_TEXTURE_WEBP:`EXT_texture_webp`,EXT_TEXTURE_AVIF:`EXT_texture_avif`,EXT_MESHOPT_COMPRESSION:`EXT_meshopt_compression`,KHR_MESHOPT_COMPRESSION:`KHR_meshopt_compression`,EXT_MESH_GPU_INSTANCING:`EXT_mesh_gpu_instancing`},Me=class{constructor(e){this.parser=e,this.name=L.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){let e=this.parser,t=this.parser.json.nodes||[];for(let n=0,r=t.length;n<r;n++){let r=t[n];r.extensions&&r.extensions[this.name]&&r.extensions[this.name].light!==void 0&&e._addNodeRef(this.cache,r.extensions[this.name].light)}}_loadLight(e){let t=this.parser,r=`light:`+e,i=t.cache.get(r);if(i)return i;let a=t.json,o=((a.extensions&&a.extensions[this.name]||{}).lights||[])[e],s,c=new n.Color(16777215);o.color!==void 0&&c.setRGB(o.color[0],o.color[1],o.color[2],n.LinearSRGBColorSpace);let l=o.range===void 0?0:o.range;switch(o.type){case`directional`:s=new n.DirectionalLight(c),s.target.position.set(0,0,-1),s.add(s.target);break;case`point`:s=new n.PointLight(c),s.distance=l;break;case`spot`:s=new n.SpotLight(c),s.distance=l,o.spot=o.spot||{},o.spot.innerConeAngle=o.spot.innerConeAngle===void 0?0:o.spot.innerConeAngle,o.spot.outerConeAngle=o.spot.outerConeAngle===void 0?Math.PI/4:o.spot.outerConeAngle,s.angle=o.spot.outerConeAngle,s.penumbra=1-o.spot.innerConeAngle/o.spot.outerConeAngle,s.target.position.set(0,0,-1),s.add(s.target);break;default:throw Error(`THREE.GLTFLoader: Unexpected light type: `+o.type)}return s.position.set(0,0,0),V(s,o),o.intensity!==void 0&&(s.intensity=o.intensity),s.name=t.createUniqueName(o.name||`light_`+e),i=Promise.resolve(s),t.cache.add(r,i),i}getDependency(e,t){if(e===`light`)return this._loadLight(t)}createNodeAttachment(e){let t=this,n=this.parser,r=n.json.nodes[e],i=(r.extensions&&r.extensions[this.name]||{}).light;return i===void 0?null:this._loadLight(i).then(function(e){return n._getNodeRef(t.cache,i,e)})}},Ne=class{constructor(){this.name=L.KHR_MATERIALS_UNLIT}getMaterialType(){return n.MeshBasicMaterial}extendParams(e,t,r){let i=[];e.color=new n.Color(1,1,1),e.opacity=1;let a=t.pbrMetallicRoughness;if(a){if(Array.isArray(a.baseColorFactor)){let t=a.baseColorFactor;e.color.setRGB(t[0],t[1],t[2],n.LinearSRGBColorSpace),e.opacity=t[3]}a.baseColorTexture!==void 0&&i.push(r.assignTexture(e,`map`,a.baseColorTexture,n.SRGBColorSpace))}return Promise.all(i)}},Pe=class{constructor(e){this.parser=e,this.name=L.KHR_MATERIALS_EMISSIVE_STRENGTH}extendMaterialParams(e,t){let n=I(this.parser,e,this.name);return n===null||n.emissiveStrength!==void 0&&(t.emissiveIntensity=n.emissiveStrength),Promise.resolve()}},Fe=class{constructor(e){this.parser=e,this.name=L.KHR_MATERIALS_CLEARCOAT}getMaterialType(e){return I(this.parser,e,this.name)===null?null:n.MeshPhysicalMaterial}extendMaterialParams(e,t){let r=I(this.parser,e,this.name);if(r===null)return Promise.resolve();let i=[];if(r.clearcoatFactor!==void 0&&(t.clearcoat=r.clearcoatFactor),r.clearcoatTexture!==void 0&&i.push(this.parser.assignTexture(t,`clearcoatMap`,r.clearcoatTexture)),r.clearcoatRoughnessFactor!==void 0&&(t.clearcoatRoughness=r.clearcoatRoughnessFactor),r.clearcoatRoughnessTexture!==void 0&&i.push(this.parser.assignTexture(t,`clearcoatRoughnessMap`,r.clearcoatRoughnessTexture)),r.clearcoatNormalTexture!==void 0&&(i.push(this.parser.assignTexture(t,`clearcoatNormalMap`,r.clearcoatNormalTexture)),r.clearcoatNormalTexture.scale!==void 0)){let e=r.clearcoatNormalTexture.scale;t.clearcoatNormalScale=new n.Vector2(e,e)}return Promise.all(i)}},Ie=class{constructor(e){this.parser=e,this.name=L.KHR_MATERIALS_DISPERSION}getMaterialType(e){return I(this.parser,e,this.name)===null?null:n.MeshPhysicalMaterial}extendMaterialParams(e,t){let n=I(this.parser,e,this.name);return n===null||(t.dispersion=n.dispersion===void 0?0:n.dispersion),Promise.resolve()}},Le=class{constructor(e){this.parser=e,this.name=L.KHR_MATERIALS_IRIDESCENCE}getMaterialType(e){return I(this.parser,e,this.name)===null?null:n.MeshPhysicalMaterial}extendMaterialParams(e,t){let n=I(this.parser,e,this.name);if(n===null)return Promise.resolve();let r=[];return n.iridescenceFactor!==void 0&&(t.iridescence=n.iridescenceFactor),n.iridescenceTexture!==void 0&&r.push(this.parser.assignTexture(t,`iridescenceMap`,n.iridescenceTexture)),n.iridescenceIor!==void 0&&(t.iridescenceIOR=n.iridescenceIor),t.iridescenceThicknessRange===void 0&&(t.iridescenceThicknessRange=[100,400]),n.iridescenceThicknessMinimum!==void 0&&(t.iridescenceThicknessRange[0]=n.iridescenceThicknessMinimum),n.iridescenceThicknessMaximum!==void 0&&(t.iridescenceThicknessRange[1]=n.iridescenceThicknessMaximum),n.iridescenceThicknessTexture!==void 0&&r.push(this.parser.assignTexture(t,`iridescenceThicknessMap`,n.iridescenceThicknessTexture)),Promise.all(r)}},Re=class{constructor(e){this.parser=e,this.name=L.KHR_MATERIALS_SHEEN}getMaterialType(e){return I(this.parser,e,this.name)===null?null:n.MeshPhysicalMaterial}extendMaterialParams(e,t){let r=I(this.parser,e,this.name);if(r===null)return Promise.resolve();let i=[];if(t.sheenColor=new n.Color(0,0,0),t.sheenRoughness=0,t.sheen=1,r.sheenColorFactor!==void 0){let e=r.sheenColorFactor;t.sheenColor.setRGB(e[0],e[1],e[2],n.LinearSRGBColorSpace)}return r.sheenRoughnessFactor!==void 0&&(t.sheenRoughness=r.sheenRoughnessFactor),r.sheenColorTexture!==void 0&&i.push(this.parser.assignTexture(t,`sheenColorMap`,r.sheenColorTexture,n.SRGBColorSpace)),r.sheenRoughnessTexture!==void 0&&i.push(this.parser.assignTexture(t,`sheenRoughnessMap`,r.sheenRoughnessTexture)),Promise.all(i)}},ze=class{constructor(e){this.parser=e,this.name=L.KHR_MATERIALS_TRANSMISSION}getMaterialType(e){return I(this.parser,e,this.name)===null?null:n.MeshPhysicalMaterial}extendMaterialParams(e,t){let n=I(this.parser,e,this.name);if(n===null)return Promise.resolve();let r=[];return n.transmissionFactor!==void 0&&(t.transmission=n.transmissionFactor),n.transmissionTexture!==void 0&&r.push(this.parser.assignTexture(t,`transmissionMap`,n.transmissionTexture)),Promise.all(r)}},Be=class{constructor(e){this.parser=e,this.name=L.KHR_MATERIALS_VOLUME}getMaterialType(e){return I(this.parser,e,this.name)===null?null:n.MeshPhysicalMaterial}extendMaterialParams(e,t){let r=I(this.parser,e,this.name);if(r===null)return Promise.resolve();let i=[];t.thickness=r.thicknessFactor===void 0?0:r.thicknessFactor,r.thicknessTexture!==void 0&&i.push(this.parser.assignTexture(t,`thicknessMap`,r.thicknessTexture)),t.attenuationDistance=r.attenuationDistance||1/0;let a=r.attenuationColor||[1,1,1];return t.attenuationColor=new n.Color().setRGB(a[0],a[1],a[2],n.LinearSRGBColorSpace),Promise.all(i)}},Ve=class{constructor(e){this.parser=e,this.name=L.KHR_MATERIALS_IOR}getMaterialType(e){return I(this.parser,e,this.name)===null?null:n.MeshPhysicalMaterial}extendMaterialParams(e,t){let n=I(this.parser,e,this.name);return n===null?Promise.resolve():(t.ior=n.ior===void 0?1.5:n.ior,t.ior===0&&(t.ior=1e3),Promise.resolve())}},He=class{constructor(e){this.parser=e,this.name=L.KHR_MATERIALS_SPECULAR}getMaterialType(e){return I(this.parser,e,this.name)===null?null:n.MeshPhysicalMaterial}extendMaterialParams(e,t){let r=I(this.parser,e,this.name);if(r===null)return Promise.resolve();let i=[];t.specularIntensity=r.specularFactor===void 0?1:r.specularFactor,r.specularTexture!==void 0&&i.push(this.parser.assignTexture(t,`specularIntensityMap`,r.specularTexture));let a=r.specularColorFactor||[1,1,1];return t.specularColor=new n.Color().setRGB(a[0],a[1],a[2],n.LinearSRGBColorSpace),r.specularColorTexture!==void 0&&i.push(this.parser.assignTexture(t,`specularColorMap`,r.specularColorTexture,n.SRGBColorSpace)),Promise.all(i)}},Ue=class{constructor(e){this.parser=e,this.name=L.EXT_MATERIALS_BUMP}getMaterialType(e){return I(this.parser,e,this.name)===null?null:n.MeshPhysicalMaterial}extendMaterialParams(e,t){let n=I(this.parser,e,this.name);if(n===null)return Promise.resolve();let r=[];return t.bumpScale=n.bumpFactor===void 0?1:n.bumpFactor,n.bumpTexture!==void 0&&r.push(this.parser.assignTexture(t,`bumpMap`,n.bumpTexture)),Promise.all(r)}},We=class{constructor(e){this.parser=e,this.name=L.KHR_MATERIALS_ANISOTROPY}getMaterialType(e){return I(this.parser,e,this.name)===null?null:n.MeshPhysicalMaterial}extendMaterialParams(e,t){let n=I(this.parser,e,this.name);if(n===null)return Promise.resolve();let r=[];return n.anisotropyStrength!==void 0&&(t.anisotropy=n.anisotropyStrength),n.anisotropyRotation!==void 0&&(t.anisotropyRotation=n.anisotropyRotation),n.anisotropyTexture!==void 0&&r.push(this.parser.assignTexture(t,`anisotropyMap`,n.anisotropyTexture)),Promise.all(r)}},Ge=class{constructor(e){this.parser=e,this.name=L.KHR_TEXTURE_BASISU}loadTexture(e){let t=this.parser,n=t.json,r=n.textures[e];if(!r.extensions||!r.extensions[this.name])return null;let i=r.extensions[this.name],a=t.options.ktx2Loader;if(!a){if(n.extensionsRequired&&n.extensionsRequired.indexOf(this.name)>=0)throw Error(`THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures`);return null}return t.loadTextureImage(e,i.source,a)}},Ke=class{constructor(e){this.parser=e,this.name=L.EXT_TEXTURE_WEBP}loadTexture(e){let t=this.name,n=this.parser,r=n.json,i=r.textures[e];if(!i.extensions||!i.extensions[t])return null;let a=i.extensions[t],o=r.images[a.source],s=n.textureLoader;if(o.uri){let e=n.options.manager.getHandler(o.uri);e!==null&&(s=e)}return n.loadTextureImage(e,a.source,s)}},qe=class{constructor(e){this.parser=e,this.name=L.EXT_TEXTURE_AVIF}loadTexture(e){let t=this.name,n=this.parser,r=n.json,i=r.textures[e];if(!i.extensions||!i.extensions[t])return null;let a=i.extensions[t],o=r.images[a.source],s=n.textureLoader;if(o.uri){let e=n.options.manager.getHandler(o.uri);e!==null&&(s=e)}return n.loadTextureImage(e,a.source,s)}},Je=class{constructor(e,t){this.name=t,this.parser=e}loadBufferView(e){let t=this.parser.json,n=t.bufferViews[e];if(n.extensions&&n.extensions[this.name]){let e=n.extensions[this.name],r=this.parser.getDependency(`buffer`,e.buffer),i=this.parser.options.meshoptDecoder;if(!i||!i.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw Error(`THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files`);return null}return r.then(function(t){let n=e.byteOffset||0,r=e.byteLength||0,a=e.count,o=e.byteStride,s=new Uint8Array(t,n,r);return i.decodeGltfBufferAsync?i.decodeGltfBufferAsync(a,o,s,e.mode,e.filter).then(function(e){return e.buffer}):i.ready.then(function(){let t=new ArrayBuffer(a*o);return i.decodeGltfBuffer(new Uint8Array(t),a,o,s,e.mode,e.filter),t})})}else return null}},Ye=class{constructor(e){this.name=L.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){let t=this.parser.json,r=t.nodes[e];if(!r.extensions||!r.extensions[this.name]||r.mesh===void 0)return null;let i=t.meshes[r.mesh];for(let e of i.primitives)if(e.mode!==B.TRIANGLES&&e.mode!==B.TRIANGLE_STRIP&&e.mode!==B.TRIANGLE_FAN&&e.mode!==void 0)return null;let a=r.extensions[this.name].attributes,o=[],s={};for(let e in a)o.push(this.parser.getDependency(`accessor`,a[e]).then(t=>(s[e]=t,s[e])));return o.length<1?null:(o.push(this.parser.createNodeMesh(e)),Promise.all(o).then(e=>{let t=e.pop(),r=t.isGroup?t.children:[t],i=e[0].count,a=[];for(let e of r){let t=new n.Matrix4,r=new n.Vector3,o=new n.Quaternion,c=new n.Vector3(1,1,1),l=new n.InstancedMesh(e.geometry,e.material,i);for(let e=0;e<i;e++)s.TRANSLATION&&r.fromBufferAttribute(s.TRANSLATION,e),s.ROTATION&&o.fromBufferAttribute(s.ROTATION,e),s.SCALE&&c.fromBufferAttribute(s.SCALE,e),l.setMatrixAt(e,t.compose(r,o,c));for(let t in s)if(t===`_COLOR_0`){let e=s[t];l.instanceColor=new n.InstancedBufferAttribute(e.array,e.itemSize,e.normalized)}else t!==`TRANSLATION`&&t!==`ROTATION`&&t!==`SCALE`&&e.geometry.setAttribute(t,s[t]);n.Object3D.prototype.copy.call(l,e),this.parser.assignFinalMaterial(l),a.push(l)}return t.isGroup?(t.clear(),t.add(...a),t):a[0]}))}},Xe=`glTF`,Ze=12,Qe={JSON:1313821514,BIN:5130562},R=class{constructor(e){this.name=L.KHR_BINARY_GLTF,this.content=null,this.body=null;let t=new DataView(e,0,Ze),n=new TextDecoder;if(this.header={magic:n.decode(new Uint8Array(e.slice(0,4))),version:t.getUint32(4,!0),length:t.getUint32(8,!0)},this.header.magic!==Xe)throw Error(`THREE.GLTFLoader: Unsupported glTF-Binary header.`);if(this.header.version<2)throw Error(`THREE.GLTFLoader: Legacy binary file detected.`);let r=this.header.length-Ze,i=new DataView(e,Ze),a=0;for(;a<r;){let t=i.getUint32(a,!0);a+=4;let r=i.getUint32(a,!0);if(a+=4,r===Qe.JSON){let r=new Uint8Array(e,Ze+a,t);this.content=n.decode(r)}else if(r===Qe.BIN){let n=Ze+a;this.body=e.slice(n,n+t)}a+=t}if(this.content===null)throw Error(`THREE.GLTFLoader: JSON content not found.`)}},z=class{constructor(e,t){if(!t)throw Error(`THREE.GLTFLoader: No DRACOLoader instance provided.`);this.name=L.KHR_DRACO_MESH_COMPRESSION,this.json=e,this.dracoLoader=t,this.dracoLoader.preload()}decodePrimitive(e,t){let r=this.json,i=this.dracoLoader,a=e.extensions[this.name].bufferView,o=e.extensions[this.name].attributes,s={},c={},l={};for(let e in o){let t=ct[e]||e.toLowerCase();s[t]=o[e]}for(let t in e.attributes){let n=ct[t]||t.toLowerCase();if(o[t]!==void 0){let i=r.accessors[e.attributes[t]];l[n]=it[i.componentType].name,c[n]=i.normalized===!0}}return t.getDependency(`bufferView`,a).then(function(e){return new Promise(function(t,r){i.decodeDracoFile(e,function(e){for(let t in e.attributes){let n=e.attributes[t],r=c[t];r!==void 0&&(n.normalized=r)}t(e)},s,l,n.LinearSRGBColorSpace,r)})})}},$e=class{constructor(){this.name=L.KHR_TEXTURE_TRANSFORM}extendTexture(e,t){return(t.texCoord===void 0||t.texCoord===e.channel)&&t.offset===void 0&&t.rotation===void 0&&t.scale===void 0?e:(e=e.clone(),t.texCoord!==void 0&&(e.channel=t.texCoord),t.offset!==void 0&&e.offset.fromArray(t.offset),t.rotation!==void 0&&(e.rotation=t.rotation),t.scale!==void 0&&e.repeat.fromArray(t.scale),e.needsUpdate=!0,e)}},et=class{constructor(){this.name=L.KHR_MESH_QUANTIZATION}},tt=class extends n.Interpolant{constructor(e,t,n,r){super(e,t,n,r)}copySampleValue_(e){let t=this.resultBuffer,n=this.sampleValues,r=this.valueSize,i=e*r*3+r;for(let e=0;e!==r;e++)t[e]=n[i+e];return t}interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=o*2,c=o*3,l=r-t,u=(n-t)/l,d=u*u,f=d*u,p=e*c,m=p-c,h=-2*f+3*d,g=f-d,_=1-h,v=g-d+u;for(let e=0;e!==o;e++){let t=a[m+e+o],n=a[m+e+s]*l,r=a[p+e+o],c=a[p+e]*l;i[e]=_*t+v*n+h*r+g*c}return i}},nt=new n.Quaternion,rt=class extends tt{interpolate_(e,t,n,r){let i=super.interpolate_(e,t,n,r);return nt.fromArray(i).normalize().toArray(i),i}},B={FLOAT:5126,FLOAT_MAT3:35675,FLOAT_MAT4:35676,FLOAT_VEC2:35664,FLOAT_VEC3:35665,FLOAT_VEC4:35666,LINEAR:9729,REPEAT:10497,SAMPLER_2D:35678,POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6,UNSIGNED_BYTE:5121,UNSIGNED_SHORT:5123},it={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},at={9728:n.NearestFilter,9729:n.LinearFilter,9984:n.NearestMipmapNearestFilter,9985:n.LinearMipmapNearestFilter,9986:n.NearestMipmapLinearFilter,9987:n.LinearMipmapLinearFilter},ot={33071:n.ClampToEdgeWrapping,33648:n.MirroredRepeatWrapping,10497:n.RepeatWrapping},st={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},ct={POSITION:`position`,NORMAL:`normal`,TANGENT:`tangent`,TEXCOORD_0:`uv`,TEXCOORD_1:`uv1`,TEXCOORD_2:`uv2`,TEXCOORD_3:`uv3`,COLOR_0:`color`,WEIGHTS_0:`skinWeight`,JOINTS_0:`skinIndex`},lt={scale:`scale`,translation:`position`,rotation:`quaternion`,weights:`morphTargetInfluences`},ut={CUBICSPLINE:void 0,LINEAR:n.InterpolateLinear,STEP:n.InterpolateDiscrete},dt={OPAQUE:`OPAQUE`,MASK:`MASK`,BLEND:`BLEND`};function ft(e){return e.DefaultMaterial===void 0&&(e.DefaultMaterial=new n.MeshStandardMaterial({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:n.FrontSide})),e.DefaultMaterial}function pt(e,t,n){for(let r in n.extensions)e[r]===void 0&&(t.userData.gltfExtensions=t.userData.gltfExtensions||{},t.userData.gltfExtensions[r]=n.extensions[r])}function V(e,t){t.extras!==void 0&&(typeof t.extras==`object`?Object.assign(e.userData,t.extras):console.warn(`THREE.GLTFLoader: Ignoring primitive type .extras, `+t.extras))}function mt(e,t,n){let r=!1,i=!1,a=!1;for(let e=0,n=t.length;e<n;e++){let n=t[e];if(n.POSITION!==void 0&&(r=!0),n.NORMAL!==void 0&&(i=!0),n.COLOR_0!==void 0&&(a=!0),r&&i&&a)break}if(!r&&!i&&!a)return Promise.resolve(e);let o=[],s=[],c=[];for(let l=0,u=t.length;l<u;l++){let u=t[l];if(r){let t=u.POSITION===void 0?e.attributes.position:n.getDependency(`accessor`,u.POSITION);o.push(t)}if(i){let t=u.NORMAL===void 0?e.attributes.normal:n.getDependency(`accessor`,u.NORMAL);s.push(t)}if(a){let t=u.COLOR_0===void 0?e.attributes.color:n.getDependency(`accessor`,u.COLOR_0);c.push(t)}}return Promise.all([Promise.all(o),Promise.all(s),Promise.all(c)]).then(function(t){let n=t[0],o=t[1],s=t[2];return r&&(e.morphAttributes.position=n),i&&(e.morphAttributes.normal=o),a&&(e.morphAttributes.color=s),e.morphTargetsRelative=!0,e})}function ht(e,t){if(e.updateMorphTargets(),t.weights!==void 0)for(let n=0,r=t.weights.length;n<r;n++)e.morphTargetInfluences[n]=t.weights[n];if(t.extras&&Array.isArray(t.extras.targetNames)){let n=t.extras.targetNames;if(e.morphTargetInfluences.length===n.length){e.morphTargetDictionary={};for(let t=0,r=n.length;t<r;t++)e.morphTargetDictionary[n[t]]=t}else console.warn(`THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.`)}}function gt(e){let t,n=e.extensions&&e.extensions[L.KHR_DRACO_MESH_COMPRESSION];if(t=n?`draco:`+n.bufferView+`:`+n.indices+`:`+_t(n.attributes):e.indices+`:`+_t(e.attributes)+`:`+e.mode,e.targets!==void 0)for(let n=0,r=e.targets.length;n<r;n++)t+=`:`+_t(e.targets[n]);return t}function _t(e){let t=``,n=Object.keys(e).sort();for(let r=0,i=n.length;r<i;r++)t+=n[r]+`:`+e[n[r]]+`;`;return t}function vt(e){switch(e){case Int8Array:return 1/127;case Uint8Array:return 1/255;case Int16Array:return 1/32767;case Uint16Array:return 1/65535;default:throw Error(`THREE.GLTFLoader: Unsupported normalized accessor component type.`)}}function yt(e){return e.search(/\.jpe?g($|\?)/i)>0||e.search(/^data\:image\/jpeg/)===0?`image/jpeg`:e.search(/\.webp($|\?)/i)>0||e.search(/^data\:image\/webp/)===0?`image/webp`:e.search(/\.ktx2($|\?)/i)>0||e.search(/^data\:image\/ktx2/)===0?`image/ktx2`:`image/png`}var bt=new n.Matrix4,xt=class{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new je,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let r=!1,i=-1,a=!1,o=-1;if(typeof navigator<`u`&&navigator.userAgent!==void 0){let e=navigator.userAgent;r=/^((?!chrome|android).)*safari/i.test(e)===!0;let t=e.match(/Version\/(\d+)/);i=r&&t?parseInt(t[1],10):-1,a=e.indexOf(`Firefox`)>-1,o=a?e.match(/Firefox\/([0-9]+)\./)[1]:-1}typeof createImageBitmap>`u`||r&&i<17||a&&o<98?this.textureLoader=new n.TextureLoader(this.options.manager):this.textureLoader=new n.ImageBitmapLoader(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new n.FileLoader(this.options.manager),this.fileLoader.setResponseType(`arraybuffer`),this.options.crossOrigin===`use-credentials`&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){let n=this,r=this.json,i=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(e){return e._markDefs&&e._markDefs()}),Promise.all(this._invokeAll(function(e){return e.beforeRoot&&e.beforeRoot()})).then(function(){return Promise.all([n.getDependencies(`scene`),n.getDependencies(`animation`),n.getDependencies(`camera`)])}).then(function(t){let a={scene:t[0][r.scene||0],scenes:t[0],animations:t[1],cameras:t[2],asset:r.asset,parser:n,userData:{}};return pt(i,a,r),V(a,r),Promise.all(n._invokeAll(function(e){return e.afterRoot&&e.afterRoot(a)})).then(function(){for(let e of a.scenes)e.updateMatrixWorld();e(a)})}).catch(t)}_markDefs(){let e=this.json.nodes||[],t=this.json.skins||[],n=this.json.meshes||[];for(let n=0,r=t.length;n<r;n++){let r=t[n].joints;for(let t=0,n=r.length;t<n;t++)e[r[t]].isBone=!0}for(let t=0,r=e.length;t<r;t++){let r=e[t];r.mesh!==void 0&&(this._addNodeRef(this.meshCache,r.mesh),r.skin!==void 0&&(n[r.mesh].isSkinnedMesh=!0)),r.camera!==void 0&&this._addNodeRef(this.cameraCache,r.camera)}}_addNodeRef(e,t){t!==void 0&&(e.refs[t]===void 0&&(e.refs[t]=e.uses[t]=0),e.refs[t]++)}_getNodeRef(e,t,n){if(e.refs[t]<=1)return n;let r=n.clone(),i=(e,t)=>{let n=this.associations.get(e);n!=null&&this.associations.set(t,n);for(let[n,r]of e.children.entries())i(r,t.children[n])};return i(n,r),r.name+=`_instance_`+e.uses[t]++,r}_invokeOne(e){let t=Object.values(this.plugins);t.push(this);for(let n=0;n<t.length;n++){let r=e(t[n]);if(r)return r}return null}_invokeAll(e){let t=Object.values(this.plugins);t.unshift(this);let n=[];for(let r=0;r<t.length;r++){let i=e(t[r]);i&&n.push(i)}return n}getDependency(e,t){let n=e+`:`+t,r=this.cache.get(n);if(!r){switch(e){case`scene`:r=this.loadScene(t);break;case`node`:r=this._invokeOne(function(e){return e.loadNode&&e.loadNode(t)});break;case`mesh`:r=this._invokeOne(function(e){return e.loadMesh&&e.loadMesh(t)});break;case`accessor`:r=this.loadAccessor(t);break;case`bufferView`:r=this._invokeOne(function(e){return e.loadBufferView&&e.loadBufferView(t)});break;case`buffer`:r=this.loadBuffer(t);break;case`material`:r=this._invokeOne(function(e){return e.loadMaterial&&e.loadMaterial(t)});break;case`texture`:r=this._invokeOne(function(e){return e.loadTexture&&e.loadTexture(t)});break;case`skin`:r=this.loadSkin(t);break;case`animation`:r=this._invokeOne(function(e){return e.loadAnimation&&e.loadAnimation(t)});break;case`camera`:r=this.loadCamera(t);break;default:if(r=this._invokeOne(function(n){return n!=this&&n.getDependency&&n.getDependency(e,t)}),!r)throw Error(`Unknown type: `+e);break}this.cache.add(n,r)}return r}getDependencies(e){let t=this.cache.get(e);if(!t){let n=this,r=this.json[e+(e===`mesh`?`es`:`s`)]||[];t=Promise.all(r.map(function(t,r){return n.getDependency(e,r)})),this.cache.add(e,t)}return t}loadBuffer(e){let t=this.json.buffers[e],r=this.fileLoader;if(t.type&&t.type!==`arraybuffer`)throw Error(`THREE.GLTFLoader: `+t.type+` buffer type is not supported.`);if(t.uri===void 0&&e===0)return Promise.resolve(this.extensions[L.KHR_BINARY_GLTF].body);let i=this.options;return new Promise(function(e,a){r.load(n.LoaderUtils.resolveURL(t.uri,i.path),e,void 0,function(){a(Error(`THREE.GLTFLoader: Failed to load buffer "`+t.uri+`".`))})})}loadBufferView(e){let t=this.json.bufferViews[e];return this.getDependency(`buffer`,t.buffer).then(function(e){let n=t.byteLength||0,r=t.byteOffset||0;return e.slice(r,r+n)})}loadAccessor(e){let t=this,r=this.json,i=this.json.accessors[e];if(i.bufferView===void 0&&i.sparse===void 0){let e=st[i.type],t=it[i.componentType],r=i.normalized===!0,a=new t(i.count*e);return Promise.resolve(new n.BufferAttribute(a,e,r))}let a=[];return i.bufferView===void 0?a.push(null):a.push(this.getDependency(`bufferView`,i.bufferView)),i.sparse!==void 0&&(a.push(this.getDependency(`bufferView`,i.sparse.indices.bufferView)),a.push(this.getDependency(`bufferView`,i.sparse.values.bufferView))),Promise.all(a).then(function(e){let a=e[0],o=st[i.type],s=it[i.componentType],c=s.BYTES_PER_ELEMENT,l=c*o,u=i.byteOffset||0,d=i.bufferView===void 0?void 0:r.bufferViews[i.bufferView].byteStride,f=i.normalized===!0,p,m;if(d&&d!==l){let e=Math.floor(u/d),r=`InterleavedBuffer:`+i.bufferView+`:`+i.componentType+`:`+e+`:`+i.count,l=t.cache.get(r);l||(p=new s(a,e*d,i.count*d/c),l=new n.InterleavedBuffer(p,d/c),t.cache.add(r,l)),m=new n.InterleavedBufferAttribute(l,o,u%d/c,f)}else p=a===null?new s(i.count*o):new s(a,u,i.count*o),m=new n.BufferAttribute(p,o,f);if(i.sparse!==void 0){let t=st.SCALAR,r=it[i.sparse.indices.componentType],c=i.sparse.indices.byteOffset||0,l=i.sparse.values.byteOffset||0,u=new r(e[1],c,i.sparse.count*t),d=new s(e[2],l,i.sparse.count*o);a!==null&&(m=new n.BufferAttribute(m.array.slice(),m.itemSize,m.normalized)),m.normalized=!1;for(let e=0,t=u.length;e<t;e++){let t=u[e];if(m.setX(t,d[e*o]),o>=2&&m.setY(t,d[e*o+1]),o>=3&&m.setZ(t,d[e*o+2]),o>=4&&m.setW(t,d[e*o+3]),o>=5)throw Error(`THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.`)}m.normalized=f}return m})}loadTexture(e){let t=this.json,n=this.options,r=t.textures[e].source,i=t.images[r],a=this.textureLoader;if(i.uri){let e=n.manager.getHandler(i.uri);e!==null&&(a=e)}return this.loadTextureImage(e,r,a)}loadTextureImage(e,t,r){let i=this,a=this.json,o=a.textures[e],s=a.images[t],c=(s.uri||s.bufferView)+`:`+o.sampler;if(this.textureCache[c])return this.textureCache[c];let l=this.loadImageSource(t,r).then(function(t){t.flipY=!1,t.name=o.name||s.name||``,t.name===``&&typeof s.uri==`string`&&s.uri.startsWith(`data:image/`)===!1&&(t.name=s.uri);let r=(a.samplers||{})[o.sampler]||{};return t.magFilter=at[r.magFilter]||n.LinearFilter,t.minFilter=at[r.minFilter]||n.LinearMipmapLinearFilter,t.wrapS=ot[r.wrapS]||n.RepeatWrapping,t.wrapT=ot[r.wrapT]||n.RepeatWrapping,t.generateMipmaps=!t.isCompressedTexture&&t.minFilter!==n.NearestFilter&&t.minFilter!==n.LinearFilter,i.associations.set(t,{textures:e}),t}).catch(function(){return null});return this.textureCache[c]=l,l}loadImageSource(e,t){let r=this,i=this.json,a=this.options;if(this.sourceCache[e]!==void 0)return this.sourceCache[e].then(e=>e.clone());let o=i.images[e],s=self.URL||self.webkitURL,c=o.uri||``,l=!1;if(o.bufferView!==void 0)c=r.getDependency(`bufferView`,o.bufferView).then(function(e){l=!0;let t=new Blob([e],{type:o.mimeType});return c=s.createObjectURL(t),c});else if(o.uri===void 0)throw Error(`THREE.GLTFLoader: Image `+e+` is missing URI and bufferView`);let u=Promise.resolve(c).then(function(e){return new Promise(function(r,i){let o=r;t.isImageBitmapLoader===!0&&(o=function(e){let t=new n.Texture(e);t.needsUpdate=!0,r(t)}),t.load(n.LoaderUtils.resolveURL(e,a.path),o,void 0,i)})}).then(function(e){return l===!0&&s.revokeObjectURL(c),V(e,o),e.userData.mimeType=o.mimeType||yt(o.uri),e}).catch(function(e){throw console.error(`THREE.GLTFLoader: Couldn't load texture`,c),e});return this.sourceCache[e]=u,u}assignTexture(e,t,n,r){let i=this;return this.getDependency(`texture`,n.index).then(function(a){if(!a)return null;if(n.texCoord!==void 0&&n.texCoord>0&&(a=a.clone(),a.channel=n.texCoord),i.extensions[L.KHR_TEXTURE_TRANSFORM]){let e=n.extensions===void 0?void 0:n.extensions[L.KHR_TEXTURE_TRANSFORM];if(e){let t=i.associations.get(a);a=i.extensions[L.KHR_TEXTURE_TRANSFORM].extendTexture(a,e),i.associations.set(a,t)}}return r!==void 0&&(a.colorSpace=r),e[t]=a,a})}assignFinalMaterial(e){let t=e.geometry,r=e.material,i=t.attributes.tangent===void 0,a=t.attributes.color!==void 0,o=t.attributes.normal===void 0;if(e.isPoints){let e=`PointsMaterial:`+r.uuid,t=this.cache.get(e);t||(t=new n.PointsMaterial,n.Material.prototype.copy.call(t,r),t.color.copy(r.color),t.map=r.map,t.sizeAttenuation=!1,this.cache.add(e,t)),r=t}else if(e.isLine){let e=`LineBasicMaterial:`+r.uuid,t=this.cache.get(e);t||(t=new n.LineBasicMaterial,n.Material.prototype.copy.call(t,r),t.color.copy(r.color),t.map=r.map,this.cache.add(e,t)),r=t}if(i||a||o){let e=`ClonedMaterial:`+r.uuid+`:`;i&&(e+=`derivative-tangents:`),a&&(e+=`vertex-colors:`),o&&(e+=`flat-shading:`);let t=this.cache.get(e);t||(t=r.clone(),a&&(t.vertexColors=!0),o&&(t.flatShading=!0),i&&(t.normalScale&&(t.normalScale.y*=-1),t.clearcoatNormalScale&&(t.clearcoatNormalScale.y*=-1)),this.cache.add(e,t),this.associations.set(t,this.associations.get(r))),r=t}e.material=r}getMaterialType(){return n.MeshStandardMaterial}loadMaterial(e){let t=this,r=this.json,i=this.extensions,a=r.materials[e],o,s={},c=a.extensions||{},l=[];if(c[L.KHR_MATERIALS_UNLIT]){let e=i[L.KHR_MATERIALS_UNLIT];o=e.getMaterialType(),l.push(e.extendParams(s,a,t))}else{let r=a.pbrMetallicRoughness||{};if(s.color=new n.Color(1,1,1),s.opacity=1,Array.isArray(r.baseColorFactor)){let e=r.baseColorFactor;s.color.setRGB(e[0],e[1],e[2],n.LinearSRGBColorSpace),s.opacity=e[3]}r.baseColorTexture!==void 0&&l.push(t.assignTexture(s,`map`,r.baseColorTexture,n.SRGBColorSpace)),s.metalness=r.metallicFactor===void 0?1:r.metallicFactor,s.roughness=r.roughnessFactor===void 0?1:r.roughnessFactor,r.metallicRoughnessTexture!==void 0&&(l.push(t.assignTexture(s,`metalnessMap`,r.metallicRoughnessTexture)),l.push(t.assignTexture(s,`roughnessMap`,r.metallicRoughnessTexture))),o=this._invokeOne(function(t){return t.getMaterialType&&t.getMaterialType(e)}),l.push(Promise.all(this._invokeAll(function(t){return t.extendMaterialParams&&t.extendMaterialParams(e,s)})))}a.doubleSided===!0&&(s.side=n.DoubleSide);let u=a.alphaMode||dt.OPAQUE;if(u===dt.BLEND?(s.transparent=!0,s.depthWrite=!1):(s.transparent=!1,u===dt.MASK&&(s.alphaTest=a.alphaCutoff===void 0?.5:a.alphaCutoff)),a.normalTexture!==void 0&&o!==n.MeshBasicMaterial&&(l.push(t.assignTexture(s,`normalMap`,a.normalTexture)),s.normalScale=new n.Vector2(1,1),a.normalTexture.scale!==void 0)){let e=a.normalTexture.scale;s.normalScale.set(e,e)}if(a.occlusionTexture!==void 0&&o!==n.MeshBasicMaterial&&(l.push(t.assignTexture(s,`aoMap`,a.occlusionTexture)),a.occlusionTexture.strength!==void 0&&(s.aoMapIntensity=a.occlusionTexture.strength)),a.emissiveFactor!==void 0&&o!==n.MeshBasicMaterial){let e=a.emissiveFactor;s.emissive=new n.Color().setRGB(e[0],e[1],e[2],n.LinearSRGBColorSpace)}return a.emissiveTexture!==void 0&&o!==n.MeshBasicMaterial&&l.push(t.assignTexture(s,`emissiveMap`,a.emissiveTexture,n.SRGBColorSpace)),Promise.all(l).then(function(){let n=new o(s);return a.name&&(n.name=a.name),V(n,a),t.associations.set(n,{materials:e}),a.extensions&&pt(i,n,a),n})}createUniqueName(e){let t=n.PropertyBinding.sanitizeNodeName(e||``);return t in this.nodeNamesUsed?t+`_`+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){let t=this,r=this.extensions,i=this.primitiveCache;function a(e){return r[L.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(e,t).then(function(n){return Ct(n,e,t)})}let o=[];for(let r=0,s=e.length;r<s;r++){let s=e[r],c=gt(s),l=i[c];if(l)o.push(l.promise);else{let e;e=s.extensions&&s.extensions[L.KHR_DRACO_MESH_COMPRESSION]?a(s):Ct(new n.BufferGeometry,s,t),i[c]={primitive:s,promise:e},o.push(e)}}return Promise.all(o)}loadMesh(e){let t=this,r=this.json,i=this.extensions,a=r.meshes[e],o=a.primitives,s=[];for(let e=0,t=o.length;e<t;e++){let t=o[e].material===void 0?ft(this.cache):this.getDependency(`material`,o[e].material);s.push(t)}return s.push(t.loadGeometries(o)),Promise.all(s).then(function(r){let s=r.slice(0,r.length-1),c=r[r.length-1],l=[];for(let r=0,u=c.length;r<u;r++){let u=c[r],d=o[r],f,p=s[r];if(d.mode===B.TRIANGLES||d.mode===B.TRIANGLE_STRIP||d.mode===B.TRIANGLE_FAN||d.mode===void 0)f=a.isSkinnedMesh===!0?new n.SkinnedMesh(u,p):new n.Mesh(u,p),f.isSkinnedMesh===!0&&f.normalizeSkinWeights(),d.mode===B.TRIANGLE_STRIP?f.geometry=De(f.geometry,n.TriangleStripDrawMode):d.mode===B.TRIANGLE_FAN&&(f.geometry=De(f.geometry,n.TriangleFanDrawMode));else if(d.mode===B.LINES)f=new n.LineSegments(u,p);else if(d.mode===B.LINE_STRIP)f=new n.Line(u,p);else if(d.mode===B.LINE_LOOP)f=new n.LineLoop(u,p);else if(d.mode===B.POINTS)f=new n.Points(u,p);else throw Error(`THREE.GLTFLoader: Primitive mode unsupported: `+d.mode);Object.keys(f.geometry.morphAttributes).length>0&&ht(f,a),f.name=t.createUniqueName(a.name||`mesh_`+e),V(f,a),d.extensions&&pt(i,f,d),t.assignFinalMaterial(f),l.push(f)}for(let n=0,r=l.length;n<r;n++)t.associations.set(l[n],{meshes:e,primitives:n});if(l.length===1)return a.extensions&&pt(i,l[0],a),l[0];let u=new n.Group;a.extensions&&pt(i,u,a),t.associations.set(u,{meshes:e});for(let e=0,t=l.length;e<t;e++)u.add(l[e]);return u})}loadCamera(e){let t,r=this.json.cameras[e],i=r[r.type];if(!i){console.warn(`THREE.GLTFLoader: Missing camera parameters.`);return}return r.type===`perspective`?t=new n.PerspectiveCamera(n.MathUtils.radToDeg(i.yfov),i.aspectRatio||1,i.znear||1,i.zfar||2e6):r.type===`orthographic`&&(t=new n.OrthographicCamera(-i.xmag,i.xmag,i.ymag,-i.ymag,i.znear,i.zfar)),r.name&&(t.name=this.createUniqueName(r.name)),V(t,r),Promise.resolve(t)}loadSkin(e){let t=this.json.skins[e],r=[];for(let e=0,n=t.joints.length;e<n;e++)r.push(this._loadNodeShallow(t.joints[e]));return t.inverseBindMatrices===void 0?r.push(null):r.push(this.getDependency(`accessor`,t.inverseBindMatrices)),Promise.all(r).then(function(e){let r=e.pop(),i=e,a=[],o=[];for(let e=0,s=i.length;e<s;e++){let s=i[e];if(s){a.push(s);let t=new n.Matrix4;r!==null&&t.fromArray(r.array,e*16),o.push(t)}else console.warn(`THREE.GLTFLoader: Joint "%s" could not be found.`,t.joints[e])}return new n.Skeleton(a,o)})}loadAnimation(e){let t=this.json,r=this,i=t.animations[e],a=i.name?i.name:`animation_`+e,o=[],s=[],c=[],l=[],u=[];for(let e=0,t=i.channels.length;e<t;e++){let t=i.channels[e],n=i.samplers[t.sampler],r=t.target,a=r.node,d=i.parameters===void 0?n.input:i.parameters[n.input],f=i.parameters===void 0?n.output:i.parameters[n.output];r.node!==void 0&&(o.push(this.getDependency(`node`,a)),s.push(this.getDependency(`accessor`,d)),c.push(this.getDependency(`accessor`,f)),l.push(n),u.push(r))}return Promise.all([Promise.all(o),Promise.all(s),Promise.all(c),Promise.all(l),Promise.all(u)]).then(function(e){let t=e[0],o=e[1],s=e[2],c=e[3],l=e[4],u=[];for(let e=0,n=t.length;e<n;e++){let n=t[e],i=o[e],a=s[e],d=c[e],f=l[e];if(n===void 0)continue;n.updateMatrix&&n.updateMatrix();let p=r._createAnimationTracks(n,i,a,d,f);if(p)for(let e=0;e<p.length;e++)u.push(p[e])}let d=new n.AnimationClip(a,void 0,u);return V(d,i),d})}createNodeMesh(e){let t=this.json,n=this,r=t.nodes[e];return r.mesh===void 0?null:n.getDependency(`mesh`,r.mesh).then(function(e){let t=n._getNodeRef(n.meshCache,r.mesh,e);return r.weights!==void 0&&t.traverse(function(e){if(e.isMesh)for(let t=0,n=r.weights.length;t<n;t++)e.morphTargetInfluences[t]=r.weights[t]}),t})}loadNode(e){let t=this.json,r=this,i=t.nodes[e],a=r._loadNodeShallow(e),o=[],s=i.children||[];for(let e=0,t=s.length;e<t;e++)o.push(r.getDependency(`node`,s[e]));let c=i.skin===void 0?Promise.resolve(null):r.getDependency(`skin`,i.skin);return Promise.all([a,Promise.all(o),c]).then(function(e){let t=e[0],r=e[1],i=e[2];i!==null&&t.traverse(function(e){e.isSkinnedMesh&&e.bind(i,bt)});for(let e=0,n=r.length;e<n;e++)t.add(r[e]);if(t.userData.pivot!==void 0&&r.length>0){let e=t.userData.pivot,i=r[0];t.pivot=new n.Vector3().fromArray(e),t.position.x-=e[0],t.position.y-=e[1],t.position.z-=e[2],i.position.set(0,0,0),delete t.userData.pivot}return t})}_loadNodeShallow(e){let t=this.json,r=this.extensions,i=this;if(this.nodeCache[e]!==void 0)return this.nodeCache[e];let a=t.nodes[e],o=a.name?i.createUniqueName(a.name):``,s=[],c=i._invokeOne(function(t){return t.createNodeMesh&&t.createNodeMesh(e)});return c&&s.push(c),a.camera!==void 0&&s.push(i.getDependency(`camera`,a.camera).then(function(e){return i._getNodeRef(i.cameraCache,a.camera,e)})),i._invokeAll(function(t){return t.createNodeAttachment&&t.createNodeAttachment(e)}).forEach(function(e){s.push(e)}),this.nodeCache[e]=Promise.all(s).then(function(t){let s;if(s=a.isBone===!0?new n.Bone:t.length>1?new n.Group:t.length===1?t[0]:new n.Object3D,s!==t[0])for(let e=0,n=t.length;e<n;e++)s.add(t[e]);if(a.name&&(s.userData.name=a.name,s.name=o),V(s,a),a.extensions&&pt(r,s,a),a.matrix!==void 0){let e=new n.Matrix4;e.fromArray(a.matrix),s.applyMatrix4(e)}else a.translation!==void 0&&s.position.fromArray(a.translation),a.rotation!==void 0&&s.quaternion.fromArray(a.rotation),a.scale!==void 0&&s.scale.fromArray(a.scale);if(!i.associations.has(s))i.associations.set(s,{});else if(a.mesh!==void 0&&i.meshCache.refs[a.mesh]>1){let e=i.associations.get(s);i.associations.set(s,{...e})}return i.associations.get(s).nodes=e,s}),this.nodeCache[e]}loadScene(e){let t=this.extensions,r=this.json.scenes[e],i=this,a=new n.Group;r.name&&(a.name=i.createUniqueName(r.name)),V(a,r),r.extensions&&pt(t,a,r);let o=r.nodes||[],s=[];for(let e=0,t=o.length;e<t;e++)s.push(i.getDependency(`node`,o[e]));return Promise.all(s).then(function(e){for(let t=0,n=e.length;t<n;t++){let n=e[t];n.parent===null?a.add(n):a.add(Oe(n))}return i.associations=(e=>{let t=new Map;for(let[e,r]of i.associations)(e instanceof n.Material||e instanceof n.Texture)&&t.set(e,r);return e.traverse(e=>{let n=i.associations.get(e);n!=null&&t.set(e,n)}),t})(a),a})}_createAnimationTracks(e,t,r,i,a){let o=[],s=e.name?e.name:e.uuid,c=[];function l(e){e.morphTargetInfluences&&c.push(e.name?e.name:e.uuid)}lt[a.path]===lt.weights?(l(e),e.isGroup&&e.children.forEach(l)):c.push(s);let u;switch(lt[a.path]){case lt.weights:u=n.NumberKeyframeTrack;break;case lt.rotation:u=n.QuaternionKeyframeTrack;break;case lt.translation:case lt.scale:u=n.VectorKeyframeTrack;break;default:switch(r.itemSize){case 1:u=n.NumberKeyframeTrack;break;default:u=n.VectorKeyframeTrack;break}break}let d=i.interpolation===void 0?n.InterpolateLinear:ut[i.interpolation],f=this._getArrayFromAccessor(r);for(let e=0,n=c.length;e<n;e++){let n=new u(c[e]+`.`+lt[a.path],t.array,f,d);i.interpolation===`CUBICSPLINE`&&this._createCubicSplineTrackInterpolant(n),o.push(n)}return o}_getArrayFromAccessor(e){let t=e.array;if(e.normalized){let e=vt(t.constructor),n=new Float32Array(t.length);for(let r=0,i=t.length;r<i;r++)n[r]=t[r]*e;t=n}return t}_createCubicSplineTrackInterpolant(e){e.createInterpolant=function(e){return new(this instanceof n.QuaternionKeyframeTrack?rt:tt)(this.times,this.values,this.getValueSize()/3,e)},e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0}};function St(e,t,r){let i=t.attributes,a=new n.Box3;if(i.POSITION!==void 0){let e=r.json.accessors[i.POSITION],t=e.min,o=e.max;if(t!==void 0&&o!==void 0){if(a.set(new n.Vector3(t[0],t[1],t[2]),new n.Vector3(o[0],o[1],o[2])),e.normalized){let t=vt(it[e.componentType]);a.min.multiplyScalar(t),a.max.multiplyScalar(t)}}else{console.warn(`THREE.GLTFLoader: Missing min/max properties for accessor POSITION.`);return}}else return;let o=t.targets;if(o!==void 0){let e=new n.Vector3,t=new n.Vector3;for(let n=0,i=o.length;n<i;n++){let i=o[n];if(i.POSITION!==void 0){let n=r.json.accessors[i.POSITION],a=n.min,o=n.max;if(a!==void 0&&o!==void 0){if(t.setX(Math.max(Math.abs(a[0]),Math.abs(o[0]))),t.setY(Math.max(Math.abs(a[1]),Math.abs(o[1]))),t.setZ(Math.max(Math.abs(a[2]),Math.abs(o[2]))),n.normalized){let e=vt(it[n.componentType]);t.multiplyScalar(e)}e.max(t)}else console.warn(`THREE.GLTFLoader: Missing min/max properties for accessor POSITION.`)}}a.expandByVector(e)}e.boundingBox=a;let s=new n.Sphere;a.getCenter(s.center),s.radius=a.min.distanceTo(a.max)/2,e.boundingSphere=s}function Ct(e,t,r){let i=t.attributes,a=[];function o(t,n){return r.getDependency(`accessor`,t).then(function(t){e.setAttribute(n,t)})}for(let t in i){let n=ct[t]||t.toLowerCase();n in e.attributes||a.push(o(i[t],n))}if(t.indices!==void 0&&!e.index){let n=r.getDependency(`accessor`,t.indices).then(function(t){e.setIndex(t)});a.push(n)}return n.ColorManagement.workingColorSpace!==n.LinearSRGBColorSpace&&`COLOR_0`in i&&console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${n.ColorManagement.workingColorSpace}" not supported.`),V(e,t),St(e,t,r),Promise.all(a).then(function(){return t.targets===void 0?e:mt(e,t.targets,r)})}var wt=`KHR_materials_variants`,Tt=`softboxVariantMaterials`,Et=`softboxDefaultMaterial`,Dt=`softboxVariantResolution`;function Ot(e){let t=(e.userData.gltfExtensions?.[wt]?.variants??[]).map(e=>e.name).filter(e=>typeof e==`string`);t.length!==0&&(e.userData[i]=t,e.scene.userData[Dt]=At(e,t).catch(e=>{console.warn(`Failed to resolve material variants:`,e)}))}function kt(e){let t=[];return e.traverse(e=>{let n=e.userData[Dt];n&&t.push(n)}),Promise.all(t).then(()=>void 0)}async function At(e,t){let n=e.parser,r=[];e.scene.traverse(e=>{let t=e;t.isMesh&&t.userData.gltfExtensions?.[wt]&&r.push(t)}),await Promise.all(r.map(e=>jt(e,n,t)))}async function jt(t,n,r){let i=t.userData.gltfExtensions[wt].mappings??[],a=t.material,o={};try{for(let e of i){t.material=await n.getDependency(`material`,e.material),n.assignFinalMaterial(t);let i=t.material;for(let t of e.variants){let e=r[t];e!==void 0&&(o[e]=i)}}}finally{t.material=a}let s=[...new Set(Object.values(o))],c=Array.isArray(a)?a:[a];if(c.some(e=>e.userData.softboxDisposed)){s.forEach(e._);return}t.userData[Tt]=o,t.userData[Et]=a,t.userData[e.g]=[...new Set([...s,...c])]}function Mt(e,t){let n=!1;return e.traverse(e=>{let r=e;if(!r.isMesh||!r.userData.softboxVariantMaterials)return;let i=r.userData[Tt],a=(t===null?void 0:i[t])??r.userData.softboxDefaultMaterial;r.material!==a&&(r.material=a,n=!0)}),n}var Nt=`https://cdn.jsdelivr.net/npm/three@0.${n.REVISION.replace(/\D/g,``)}/examples/jsm/libs`,Pt=`${Nt}/draco/`,Ft=`${Nt}/basis/`,It=class{constructor(e={}){this.loadingManager=new n.LoadingManager,this.loader=new Ae(this.loadingManager),this.config=e}ensureDecoders(){return this.decodersReady||=this.configureDecoders(),this.decodersReady}async configureDecoders(){let e=this.config,t=[];(e.draco??!0)&&t.push(this.configureDraco(e)),(e.ktx2??!0)&&t.push(this.configureKtx2(e)),(e.meshopt??!0)&&t.push(this.configureMeshopt());let n=await Promise.allSettled(t);for(let e of n)e.status===`rejected`&&console.warn(`softbox: a compression decoder failed to initialize; compressed assets using it may not load.`,e.reason)}async configureDraco(e){let{DRACOLoader:t}=await import(`three/examples/jsm/loaders/DRACOLoader.js`),n=new t(this.loadingManager);n.setDecoderPath(e.dracoDecoderPath??Pt),this.dracoLoader=n,this.loader.setDRACOLoader(n)}async configureKtx2(e){let{KTX2Loader:t}=await import(`three/examples/jsm/loaders/KTX2Loader.js`),n=new t(this.loadingManager);n.setTranscoderPath(e.ktx2TranscoderPath??Ft),e.renderer&&n.detectSupport(e.renderer),this.ktx2Loader=n,this.loader.setKTX2Loader(n)}async configureMeshopt(){let e=await import(`three/examples/jsm/libs/meshopt_decoder.module.js`);this.loader.setMeshoptDecoder(e.MeshoptDecoder)}async load(t,r){try{return await this.ensureDecoders(),new Promise(i=>{this.loader.load(t,t=>{(this.config.bvh??!0)&&e.b(t.scene);try{Ot(t)}catch(e){console.warn(`Failed to resolve material variants:`,e)}t.scene.animations=t.animations;let r={scene:new k(t.scene),animations:this.convertAnimations(t.animations),cameras:t.cameras?.map(e=>{let t=e instanceof n.PerspectiveCamera,r=e instanceof n.OrthographicCamera;return{name:e.name,type:e.type,fov:t?e.fov:void 0,aspect:t?e.aspect:void 0,near:t||r?e.near:.1,far:t||r?e.far:1e3}}),userData:t.userData};i(e.N.ok(r))},e=>{e.total>0&&r?.(e.loaded,e.total)},n=>{i(e.N.err(new e.F(`Failed to load GLTF model`,e.P.MODEL_LOAD_FAILED,{url:t,originalError:n})))})})}catch(n){return e.N.err(new e.F(`Failed to initiate model loading`,e.P.MODEL_LOAD_FAILED,{url:t,originalError:n}))}}supports(e){let t=e.split(`.`).pop()?.toLowerCase();return t===`gltf`||t===`glb`}dispose(){this.dracoLoader?.dispose(),this.ktx2Loader?.dispose()}convertAnimations(e){return e.map(e=>({name:e.name,duration:e.duration,tracks:e.tracks.map(e=>({name:e.name,type:this.getTrackType(e),times:e.times,values:e.values}))}))}getTrackType(e){return e instanceof n.VectorKeyframeTrack?`vector`:e instanceof n.QuaternionKeyframeTrack?`quaternion`:e instanceof n.NumberKeyframeTrack?`number`:e instanceof n.BooleanKeyframeTrack?`boolean`:`number`}},Lt=class{static createLoader(t,n={}){let r=t.split(`.`).pop()?.toLowerCase();switch(r){case`gltf`:case`glb`:return new It(n);default:throw new e.F(`Unsupported file format: ${r}`,e.P.UNSUPPORTED_FORMAT,{url:t,extension:r})}}},Rt={type:`change`},zt={type:`start`},Bt={type:`end`},Vt=new n.Ray,Ht=new n.Plane,Ut=Math.cos(70*n.MathUtils.DEG2RAD),H=new n.Vector3,U=2*Math.PI,W={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},Wt=1e-6,Gt=class extends n.Controls{constructor(e,t=null){super(e,t),this.state=W.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._cursorStyle=`auto`,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=qt.bind(this),this._onPointerDown=Kt.bind(this),this._onPointerUp=Jt.bind(this),this._onContextMenu=tn.bind(this),this._onMouseWheel=Zt.bind(this),this._onKeyDown=Qt.bind(this),this._onTouchStart=$t.bind(this),this._onTouchMove=en.bind(this),this._onMouseDown=Yt.bind(this),this._onMouseMove=Xt.bind(this),this._interceptControlDown=nn.bind(this),this._interceptControlUp=rn.bind(this),this.domElement!==null&&this.connect(this.domElement),this.update()}set cursorStyle(e){this._cursorStyle=e,e===`grab`?this.domElement.style.cursor=`grab`:this.domElement.style.cursor=`auto`}get cursorStyle(){return this._cursorStyle}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.ownerDocument.removeEventListener(`pointermove`,this._onPointerMove),this.domElement.ownerDocument.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=``}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(Rt),this.update(),this.state=W.NONE}pan(e,t){this._pan(e,t),this.update()}dollyIn(e){this._dollyIn(e),this.update()}dollyOut(e){this._dollyOut(e),this.update()}rotateLeft(e){this._rotateLeft(e),this.update()}rotateUp(e){this._rotateUp(e),this.update()}update(e=null){let t=this.object.position;H.copy(t).sub(this.target),H.applyQuaternion(this._quat),this._spherical.setFromVector3(H),this.autoRotate&&this.state===W.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+=U:r>Math.PI&&(r-=U),i<-Math.PI?i+=U:i>Math.PI&&(i-=U),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(H.setFromSpherical(this._spherical),H.applyQuaternion(this._quatInverse),t.copy(this.target).add(H),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=H.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=H.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):(Vt.origin.copy(this.object.position),Vt.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(Vt.direction))<Ut?this.object.lookAt(this.target):(Ht.setFromNormalAndCoplanarPoint(this.object.up,this.target),Vt.intersectPlane(Ht,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)>Wt||8*(1-this._lastQuaternion.dot(this.object.quaternion))>Wt||this._lastTargetPosition.distanceToSquared(this.target)>Wt?(this.dispatchEvent(Rt),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(e){return e===null?U/60/60*this.autoRotateSpeed:U/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){H.setFromMatrixColumn(t,0),H.multiplyScalar(-e),this._panOffset.add(H)}_panUp(e,t){this.screenSpacePanning===!0?H.setFromMatrixColumn(t,1):(H.setFromMatrixColumn(t,0),H.crossVectors(this.object.up,H)),H.multiplyScalar(e),this._panOffset.add(H)}_pan(e,t){let n=this.domElement;if(this.object.isPerspectiveCamera){let r=this.object.position;H.copy(r).sub(this.target);let i=H.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(U*this._rotateDelta.x/t.clientHeight),this._rotateUp(U*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(U*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(-U*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(U*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(-U*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(U*this._rotateDelta.x/t.clientHeight),this._rotateUp(U*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 Kt(e){this.enabled!==!1&&(this._pointers.length===0&&(this.domElement.setPointerCapture(e.pointerId),this.domElement.ownerDocument.addEventListener(`pointermove`,this._onPointerMove),this.domElement.ownerDocument.addEventListener(`pointerup`,this._onPointerUp)),!this._isTrackingPointer(e)&&(this._addPointer(e),e.pointerType===`touch`?this._onTouchStart(e):this._onMouseDown(e),this._cursorStyle===`grab`&&(this.domElement.style.cursor=`grabbing`)))}function qt(e){this.enabled!==!1&&(e.pointerType===`touch`?this._onTouchMove(e):this._onMouseMove(e))}function Jt(e){switch(this._removePointer(e),this._pointers.length){case 0:this.domElement.releasePointerCapture(e.pointerId),this.domElement.ownerDocument.removeEventListener(`pointermove`,this._onPointerMove),this.domElement.ownerDocument.removeEventListener(`pointerup`,this._onPointerUp),this.dispatchEvent(Bt),this.state=W.NONE,this._cursorStyle===`grab`&&(this.domElement.style.cursor=`grab`);break;case 1:let t=this._pointers[0],n=this._pointerPositions[t];this._onTouchStart({pointerId:t,pageX:n.x,pageY:n.y});break}}function Yt(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=W.DOLLY;break;case n.MOUSE.ROTATE:if(e.ctrlKey||e.metaKey||e.shiftKey){if(this.enablePan===!1)return;this._handleMouseDownPan(e),this.state=W.PAN}else{if(this.enableRotate===!1)return;this._handleMouseDownRotate(e),this.state=W.ROTATE}break;case n.MOUSE.PAN:if(e.ctrlKey||e.metaKey||e.shiftKey){if(this.enableRotate===!1)return;this._handleMouseDownRotate(e),this.state=W.ROTATE}else{if(this.enablePan===!1)return;this._handleMouseDownPan(e),this.state=W.PAN}break;default:this.state=W.NONE}this.state!==W.NONE&&this.dispatchEvent(zt)}function Xt(e){switch(this.state){case W.ROTATE:if(this.enableRotate===!1)return;this._handleMouseMoveRotate(e);break;case W.DOLLY:if(this.enableZoom===!1)return;this._handleMouseMoveDolly(e);break;case W.PAN:if(this.enablePan===!1)return;this._handleMouseMovePan(e);break}}function Zt(e){this.enabled===!1||this.enableZoom===!1||this.state!==W.NONE||(e.preventDefault(),this.dispatchEvent(zt),this._handleMouseWheel(this._customWheelEvent(e)),this.dispatchEvent(Bt))}function Qt(e){this.enabled!==!1&&this._handleKeyDown(e)}function $t(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=W.TOUCH_ROTATE;break;case n.TOUCH.PAN:if(this.enablePan===!1)return;this._handleTouchStartPan(e),this.state=W.TOUCH_PAN;break;default:this.state=W.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=W.TOUCH_DOLLY_PAN;break;case n.TOUCH.DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchStartDollyRotate(e),this.state=W.TOUCH_DOLLY_ROTATE;break;default:this.state=W.NONE}break;default:this.state=W.NONE}this.state!==W.NONE&&this.dispatchEvent(zt)}function en(e){switch(this._trackPointer(e),this.state){case W.TOUCH_ROTATE:if(this.enableRotate===!1)return;this._handleTouchMoveRotate(e),this.update();break;case W.TOUCH_PAN:if(this.enablePan===!1)return;this._handleTouchMovePan(e),this.update();break;case W.TOUCH_DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchMoveDollyPan(e),this.update();break;case W.TOUCH_DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchMoveDollyRotate(e),this.update();break;default:this.state=W.NONE}}function tn(e){this.enabled!==!1&&e.preventDefault()}function nn(e){e.key===`Control`&&(this._controlActive=!0,this.domElement.getRootNode().addEventListener(`keyup`,this._interceptControlUp,{passive:!0,capture:!0}))}function rn(e){e.key===`Control`&&(this._controlActive=!1,this.domElement.getRootNode().removeEventListener(`keyup`,this._interceptControlUp,{passive:!0,capture:!0}))}var an=new n.Plane,on=new n.Raycaster,sn=new n.Vector2,cn=new n.Vector3,ln=class extends Gt{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},this._panWorldStart=new n.Vector3}_handleMouseDownPan(e){if(super._handleMouseDownPan(e),this._panOffset.set(0,0,0),this.screenSpacePanning===!0)return;an.setFromNormalAndCoplanarPoint(this.object.up,this.target);let t=this.domElement.getBoundingClientRect();sn.x=(e.clientX-t.left)/t.width*2-1,sn.y=-((e.clientY-t.top)/t.height)*2+1,on.setFromCamera(sn,this.object),on.ray.intersectPlane(an,this._panWorldStart)}_handleMouseMovePan(e){if(this.screenSpacePanning===!0){super._handleMouseMovePan(e);return}let t=this.domElement.getBoundingClientRect();sn.x=(e.clientX-t.left)/t.width*2-1,sn.y=-((e.clientY-t.top)/t.height)*2+1,on.setFromCamera(sn,this.object),on.ray.intersectPlane(an,cn)&&(cn.sub(this._panWorldStart),this._panOffset.copy(cn).negate(),this.update())}},un=class{constructor(e){this.controls=e,this.targetAdapter=D.fromThreeVector(e.target)}get enabled(){return this.controls.enabled}set enabled(e){this.controls.enabled=e}get enableDamping(){return this.controls.enableDamping}set enableDamping(e){this.controls.enableDamping=e}get dampingFactor(){return this.controls.dampingFactor}set dampingFactor(e){this.controls.dampingFactor=e}get enableZoom(){return this.controls.enableZoom}set enableZoom(e){this.controls.enableZoom=e}get enableRotate(){return this.controls.enableRotate}set enableRotate(e){this.controls.enableRotate=e}get enablePan(){return this.controls.enablePan}set enablePan(e){this.controls.enablePan=e}get zoomSpeed(){return this.controls.zoomSpeed}set zoomSpeed(e){this.controls.zoomSpeed=e}get minDistance(){return this.controls.minDistance}set minDistance(e){this.controls.minDistance=e}get maxDistance(){return this.controls.maxDistance}set maxDistance(e){this.controls.maxDistance=e}get rotateSpeed(){return this.controls.rotateSpeed}set rotateSpeed(e){this.controls.rotateSpeed=e}get minPolarAngle(){return this.controls.minPolarAngle}set minPolarAngle(e){this.controls.minPolarAngle=e}get maxPolarAngle(){return this.controls.maxPolarAngle}set maxPolarAngle(e){this.controls.maxPolarAngle=e}get minAzimuthAngle(){return this.controls.minAzimuthAngle}set minAzimuthAngle(e){this.controls.minAzimuthAngle=e}get maxAzimuthAngle(){return this.controls.maxAzimuthAngle}set maxAzimuthAngle(e){this.controls.maxAzimuthAngle=e}get panSpeed(){return this.controls.panSpeed}set panSpeed(e){this.controls.panSpeed=e}get screenSpacePanning(){return this.controls.screenSpacePanning}set screenSpacePanning(e){this.controls.screenSpacePanning=e}get target(){return this.targetAdapter}update(){return this.controls.update()}onChange(e){return this.controls.addEventListener(`change`,e),()=>this.controls.removeEventListener(`change`,e)}reset(){this.controls.reset()}dispose(){this.controls.dispose()}connect(e){}disconnect(){this.controls.dispose()}get autoRotate(){return this.controls.autoRotate}set autoRotate(e){this.controls.autoRotate=e}get autoRotateSpeed(){return this.controls.autoRotateSpeed}set autoRotateSpeed(e){this.controls.autoRotateSpeed=e}getThreeControls(){return this.controls}},dn=class extends un{constructor(e,t){super(new Gt(e,t))}get type(){return`orbit`}},fn=class extends un{constructor(e,t){let n=new ln(e,t);super(n),n.screenSpacePanning=!0}get type(){return`map`}get screenSpacePanning(){return!0}set screenSpacePanning(e){}},pn=function(e){return e.SHADOW_FLOOR=`shadow_floor`,e.CONCRETE_DISC=`concrete_disc`,e.SQUARE_WIRE=`square_wire`,e.HEXAGONAL_WIRE=`hexagonal_wire`,e.HEXAGONAL_GLASS=`hexagonal_glass`,e.STONE_TILES=`stone_tiles`,e.CUSTOM=`custom`,e}({}),mn=class{constructor(){this.name=`Square Wire Grid`}createGrid(e){let t=e.size||10,r=e.divisions||10,i=new n.Color(e.color||8947848),a=new n.Color(e.centerLineColor||e.color||4473924),o=new n.GridHelper(t,r,a,i);if(e.opacity!==void 0&&e.opacity<1){let t=o.material;t.transparent=!0,t.opacity=e.opacity}return o}dispose(){}},hn=class{constructor(){this.name=`Hexagonal Wire Grid`}createGrid(e){let t=new n.Group,r=e.styleOptions?.hexRadius??Math.floor(e.divisions/2),i=e.size/Math.max(1,r*2),a=new n.Color(e.color||8947848),o=e.opacity||.4,s=new n.LineBasicMaterial({color:a,transparent:!0,opacity:o}),c=i*Math.sqrt(3),l=i*2;for(let e=-r;e<=r;e++){let a=Math.max(-r,-e-r),o=Math.min(r,-e+r);for(let r=a;r<=o;r++){let a=c*(e+r/2),o=l*.75*r,u=[],d=Math.PI*2/6;for(let e=0;e<=6;e++){let t=e*d+Math.PI/6,r=a+i*Math.cos(t),s=o+i*Math.sin(t);u.push(new n.Vector3(r,0,s))}let f=new n.BufferGeometry().setFromPoints(u),p=new n.Line(f,s);t.add(p)}}return t}dispose(){}},gn=class{static{this.HEIGHT_RATIO=.075}static{this.BEVEL_RATIO=.04}static{this.GAP_FACTOR=1.05}static getHeight(e){return e*this.HEIGHT_RATIO}static getBevelSize(e){return e*this.BEVEL_RATIO}static getBevelThickness(e){return this.getBevelSize(e)}static getBaseSize(e){return e+this.getBevelSize(e)+this.getBevelThickness(e)}static getGapFactor(){return this.GAP_FACTOR}static getGridSpacing(e){let t=this.getBaseSize(e),n=this.getGapFactor();return{width:Math.sqrt(3)*t*n,height:2*t*n}}static getYPosition(e){return-this.getBevelSize(e)}},_n=class{constructor(e,t,n,r={}){this.position=e,this.size=t,this.color=n,this.materialOptions=r,this.height=gn.getHeight(this.size),this.bevel=gn.getBevelSize(this.size)}createGeometry(){let e=new n.Shape,t=this.size+this.bevel,r=Math.PI*2/6;for(let n=0;n<6;n++){let i=t*Math.cos(n*r),a=t*Math.sin(n*r);n===0?e.moveTo(i,a):e.lineTo(i,a)}e.closePath();let i={depth:this.height,bevelEnabled:!0,bevelSize:this.bevel,bevelThickness:this.bevel,bevelSegments:2},a=new n.ExtrudeGeometry(e,i);return a.rotateZ(Math.PI/6),a.rotateX(Math.PI/2),a.translate(this.position.x,this.position.y,this.position.z),a}createMaterial(){let{metalness:e=0,roughness:t=.15,transmission:r=1,thickness:i=.4,ior:a=1.5}=this.materialOptions,o=r>0;return new n.MeshPhysicalMaterial({color:new n.Color(this.color),metalness:e,roughness:t,transparent:o,transmission:r,thickness:i,ior:a,opacity:1,clearcoat:+!!o,clearcoatRoughness:.05,sheen:+!!o,sheenColor:new n.Color(16777215),envMapIntensity:1})}};function vn(t,r=.28){let i=new n.Mesh(new n.CircleGeometry(Math.max(t,1),64),new n.ShadowMaterial({opacity:r}));return i.name=e.u,i.userData[e.l]=!0,i.rotation.x=-Math.PI/2,i.position.y=.002,i.receiveShadow=!0,i}function yn(e,t){let r=e.getIndex()?e.toNonIndexed():e,i=r.getAttribute(`position`).array,a=r.getAttribute(`normal`).array,o=r.getAttribute(`uv`)?.array,s=new Float32Array(i.length*t.length),c=new Float32Array(a.length*t.length),l=o?new Float32Array(o.length*t.length):void 0;t.forEach((e,t)=>{let n=t*i.length;s.set(i,n);for(let t=n;t<n+i.length;t+=3)s[t]+=e.x,s[t+1]+=e.y,s[t+2]+=e.z;c.set(a,t*a.length),l&&o&&l.set(o,t*o.length)});let u=new n.BufferGeometry;return u.setAttribute(`position`,new n.BufferAttribute(s,3)),u.setAttribute(`normal`,new n.BufferAttribute(c,3)),l&&u.setAttribute(`uv`,new n.BufferAttribute(l,2)),u}var bn=class{constructor(){this.name=`Hexagonal Glass Grid`}createGrid(e){let t=new n.Group,r=e.styleOptions?.hexRadius??Math.floor(e.divisions/2),i=e.styleOptions?.tileSize||1,a=String(e.color||`#ffffff`),o=gn.getGridSpacing(i),s=o.width,c=o.height,l=new _n(new n.Vector3(0,0,0),i,a,{metalness:e.styleOptions?.metalness,roughness:e.styleOptions?.roughness,transmission:e.styleOptions?.transmission,thickness:e.styleOptions?.thickness,ior:e.styleOptions?.ior}),u=l.createGeometry(),d=gn.getYPosition(i),f=[];for(let e=-r;e<=r;e++){let t=Math.max(-r,-e-r),i=Math.min(r,-e+r);for(let r=t;r<=i;r++)f.push(new n.Vector3(s*(e+r/2),d,c*.75*r))}let p=new n.Mesh(yn(u,f),l.createMaterial());return p.receiveShadow=!0,t.add(p),u.dispose(),t.add(vn(s*(r+.5),.35)),t}dispose(){}},xn=class{constructor(){this.name=`Stone Tile Grid`,this.textureLoader=new n.TextureLoader}createGrid(e){let t=new n.Group,r=e.size,i=Math.max(1,e.divisions),a=r/i,o=a-a*.02,s=e.styleOptions?.height||a*.05,c=e.styleOptions?.bevelSize||s*.2,l=e.styleOptions?.randomHeight||!1,u=e.styleOptions?.randomRotation||!1,d=this.createStoneMaterial(e);for(let e=0;e<i;e++)for(let r=0;r<i;r++){let f=(e-i/2)*a+a/2,p=(r-i/2)*a+a/2,m=l?s*(.8+Math.random()*.4):s,h=new n.Shape,g=o/2;h.moveTo(-g,-g),h.lineTo(g,-g),h.lineTo(g,g),h.lineTo(-g,g),h.closePath();let _={depth:m,bevelEnabled:!0,bevelSize:c,bevelThickness:c,bevelSegments:2},v=new n.ExtrudeGeometry(h,_);v.rotateX(-Math.PI/2);let y=new n.Mesh(v,d);y.position.set(f,-m/2,p),y.castShadow=!0,y.receiveShadow=!0,u&&(y.rotation.y=Math.floor(Math.random()*4)*(Math.PI/2)),t.add(y)}return t}createStoneMaterial(e){let t={color:new n.Color(e.color||8421504),metalness:e.styleOptions?.metalness||0,roughness:e.styleOptions?.roughness||.8};if(e.styleOptions?.texture){let r=this.loadTexture(e.styleOptions.texture);r&&(t.map=r,r.wrapS=r.wrapT=n.RepeatWrapping,r.repeat.set(1,1))}if(e.styleOptions?.normalMap){let r=this.loadTexture(e.styleOptions.normalMap);r&&(t.normalMap=r,r.wrapS=r.wrapT=n.RepeatWrapping,r.repeat.set(1,1))}if(e.styleOptions?.roughnessMap){let r=this.loadTexture(e.styleOptions.roughnessMap);r&&(t.roughnessMap=r,r.wrapS=r.wrapT=n.RepeatWrapping,r.repeat.set(1,1))}return new n.MeshStandardMaterial(t)}loadTexture(e){try{return this.textureLoader.load(e)}catch(t){return console.warn(`Failed to load texture:`,e,t),null}}},Sn=class{constructor(){this.name=`Shadow Floor`}createGrid(e){let t=new n.Group,r=Math.max(e.size||1,1)*1.5;return t.add(vn(r)),t.add(this.createPathTracingDome(r)),t}createPathTracingDome(t){let r=Math.max(t,1),i=r*1.6,a=r*2,o=r*.5,s=i-o,c=[new n.Vector2(0,0),new n.Vector2(s,0)];for(let e=1;e<=16;e+=1){let t=e/16*(Math.PI/2);c.push(new n.Vector2(s+o*Math.sin(t),o*(1-Math.cos(t))))}c.push(new n.Vector2(i,a));let l=new n.Mesh(new n.LatheGeometry(c,96),new n.MeshStandardMaterial({color:`#f0f0f0`,roughness:1,metalness:0,side:n.DoubleSide}));return l.userData[e.f]=!0,l.position.y=.001,l.receiveShadow=!0,l.visible=!1,l}dispose(){}},Cn=4,wn=7,Tn=(e,t)=>Math.min(Math.max(e/10,.35),t),En=new n.Color(1.55,1.62,1.72),Dn=8,On=70,kn=.55,An=`#b6b3ac`,G=512,jn=1592639710,Mn=e=>{let t=e;return()=>{t|=0,t=t+1831565813|0;let e=Math.imul(t^t>>>15,1|t);return e=e+Math.imul(e^e>>>7,61|e)^e,((e^e>>>14)>>>0)/4294967296}},Nn=t=>{let n=new Float32Array(16384);for(let e=0;e<n.length;e+=1)n[e]=t();let r=(e,t,r)=>{let i=128/r,a=(e%r+r)%r,o=(t%r+r)%r,s=Math.floor(a*i)%128,c=Math.floor(o*i)%128;return n[c*128+s]};return(t,n,i)=>{let a=t*i,o=n*i,s=Math.floor(a),c=Math.floor(o),l=e.t(a-s),u=e.t(o-c),d=r(s,c,i),f=r(s+1,c,i),p=r(s,c+1,i),m=r(s+1,c+1,i);return(d*(1-l)+f*l)*(1-u)+(p*(1-l)+m*l)*u}},Pn=e=>(t,n)=>.45*e(t,n,32)+.3*e(t,n,64)+.25*e(t,n,128),Fn=`
|
|
20
20
|
vec3 softboxHash3(vec2 p) {
|
|
21
21
|
return fract(sin(vec3(
|
|
22
22
|
1.0 + dot(p, vec2(37.0, 17.0)),
|
|
@@ -91,25 +91,25 @@ vec3 softboxNormalNoTile(sampler2D samp, vec2 uv) {
|
|
|
91
91
|
flat3 + (w.x * a + w.y * b + w.z * c + w.w * d) * inversesqrt(dot(w, w))
|
|
92
92
|
);
|
|
93
93
|
}
|
|
94
|
-
`,
|
|
94
|
+
`,In=`
|
|
95
95
|
#ifdef USE_MAP
|
|
96
96
|
vec4 sampledDiffuseColor = softboxTextureNoTile( map, vMapUv );
|
|
97
97
|
diffuseColor *= sampledDiffuseColor;
|
|
98
98
|
#endif
|
|
99
|
-
`,
|
|
99
|
+
`,Ln=`
|
|
100
100
|
#ifdef USE_NORMALMAP_TANGENTSPACE
|
|
101
101
|
vec3 mapN = softboxNormalNoTile( normalMap, vNormalMapUv );
|
|
102
102
|
mapN.xy *= normalScale;
|
|
103
103
|
normal = normalize( tbn * mapN );
|
|
104
104
|
#endif
|
|
105
|
-
`,
|
|
105
|
+
`,Rn=`
|
|
106
106
|
float roughnessFactor = roughness;
|
|
107
107
|
#ifdef USE_ROUGHNESSMAP
|
|
108
108
|
vec4 texelRoughness = softboxTextureNoTile( roughnessMap, vRoughnessMapUv );
|
|
109
109
|
roughnessFactor *= texelRoughness.g;
|
|
110
110
|
#endif
|
|
111
|
-
`,Nn=e=>{e.onBeforeCompile=e=>{e.fragmentShader=e.fragmentShader.replace(`#include <common>`,`#include <common>\n${kn}`).replace(`#include <map_fragment>`,An).replace(`#include <normal_fragment_maps>`,jn).replace(`#include <roughnessmap_fragment>`,Mn)}},Pn=null,Fn=()=>{let e=En(Tn),t=On(Dn(e)),r=new Float32Array(G*G);for(let e=0;e<G;e+=1)for(let n=0;n<G;n+=1)r[e*G+n]=t(n/G,e/G);for(let t=0;t<900;t+=1){let t=Math.floor(e()*G),n=Math.floor(e()*G),i=.12+e()*.2;r[n*G+t]=Math.max(0,r[n*G+t]-i)}let i=(e,t)=>r[(t+G)%G*G+(e+G)%G],a=new n.Color(wn),o=new Uint8ClampedArray(G*G*4),s=new Uint8ClampedArray(G*G*4),c=new Uint8ClampedArray(G*G*4),l=2.4;for(let t=0;t<G;t+=1)for(let n=0;n<G;n+=1){let r=(t*G+n)*4,u=i(n,t),d=.91+u*.18+(e()-.5)*.03;o[r]=Math.min(255,a.r*255*d),o[r+1]=Math.min(255,a.g*255*d),o[r+2]=Math.min(255,a.b*255*d),o[r+3]=255;let f=(i(n+1,t)-i(n-1,t))*l,p=(i(n,t+1)-i(n,t-1))*l,m=1/Math.hypot(f,p,1);s[r]=(-f*m*.5+.5)*255,s[r+1]=(-p*m*.5+.5)*255,s[r+2]=(m*.5+.5)*255,s[r+3]=255;let h=(.86+u*.12)*255;c[r]=h,c[r+1]=h,c[r+2]=h,c[r+3]=255}return{albedo:o,normal:s,roughness:c}},In=class{constructor(){this.name=`Concrete Disc`}createGrid(e){let t=new n.Group,r=Math.max(e.size||1,1),i=Math.min(r*xn,Sn),a=e=>{let t=new n.MeshStandardMaterial({color:wn,roughness:.95,metalness:0,transparent:e,vertexColors:!0});return Nn(t),t},o=[a(!1),a(!0)];e.styleOptions?.texture?this.applyPhotoMaps(o,i,e.styleOptions):this.applyProceduralMaps(o,i);let s=i*Cn,c=new n.Mesh(this.createGroundGeometry(i,0,s),o[0]);c.rotation.x=-Math.PI/2,c.receiveShadow=!0,t.add(c);let l=new n.Mesh(this.createGroundGeometry(i,s,i),o[1]);return l.rotation.x=-Math.PI/2,l.receiveShadow=!0,l.renderOrder=-1,t.add(l),t.add(fn(r*1.5)),t}applyPhotoMaps(e,t,r){let i=new n.TextureLoader,a=t*2/yn(t,vn),o=!1,s=()=>{if(!o&&(o=!0,!e.every(e=>e.userData.softboxDisposed))){for(let t of e)t.map?.dispose(),t.normalMap?.dispose(),t.roughnessMap?.dispose(),t.map=null,t.normalMap=null,t.roughnessMap=null,t.color=new n.Color(wn),t.roughness=.95,t.needsUpdate=!0;this.applyProceduralMaps(e,t)}},c=(e,t)=>{let r=i.load(e,void 0,void 0,s);return r.wrapS=n.RepeatWrapping,r.wrapT=n.RepeatWrapping,r.repeat.set(a,a),r.anisotropy=4,t&&(r.colorSpace=n.SRGBColorSpace),r},l=c(r.texture,!0),u=r.normalMap?c(r.normalMap,!1):null,d=r.roughnessMap?c(r.roughnessMap,!1):null;for(let t of e)t.map=l,u&&(t.normalMap=u,t.normalScale=new n.Vector2(.9,.9)),d&&(t.roughnessMap=d),t.color=bn.clone(),t.roughness=1}applyProceduralMaps(e,t){let r=this.createConcretePbrMaps();if(!r)return;let i=t*2/yn(t,_n);for(let e of[r.map,r.normalMap,r.roughnessMap])e.repeat.set(i,i);for(let t of e)t.map=r.map,t.normalMap=r.normalMap,t.normalScale=new n.Vector2(.6,.6),t.roughnessMap=r.roughnessMap,t.color=new n.Color(`#ffffff`),t.roughness=1}createGroundGeometry(t,r,i){let a=new n.RingGeometry(r,i,128,32),o=Dn(En(-1059407513)),s=a.getAttribute(`position`),c=new Float32Array(s.count*4);for(let n=0;n<s.count;n+=1){let r=s.getX(n),i=s.getY(n),a=Math.hypot(r,i)/t,l=a<=Cn?1:1-e.t(Math.min((a-Cn)/(1-Cn),1)),u=r/(t*2)+.5,d=i/(t*2)+.5,f=.9+(.6*o(u,d,4)+.4*o(u,d,32))*.2;c[n*4]=f,c[n*4+1]=f,c[n*4+2]=f,c[n*4+3]=l}return a.setAttribute(`color`,new n.BufferAttribute(c,4)),a}createConcretePbrMaps(){if(typeof document>`u`)return null;let e=[],t=[];for(let n=0;n<3;n+=1){let n=document.createElement(`canvas`);n.width=G,n.height=G;let r=n.getContext(`2d`);if(!r)return null;e.push(n),t.push(r)}Pn??=Fn();let r=[Pn.albedo,Pn.normal,Pn.roughness];t.forEach((e,t)=>{let n=e.createImageData(G,G);n.data.set(r[t]),e.putImageData(n,0,0)});let[i,a,o]=e.map(e=>{let t=new n.CanvasTexture(e);return t.wrapS=n.RepeatWrapping,t.wrapT=n.RepeatWrapping,t.anisotropy=4,t});return i.colorSpace=n.SRGBColorSpace,{map:i,normalMap:a,roughnessMap:o}}dispose(){}},Ln=class{static{this.gridStyles=new Map([[W.SHADOW_FLOOR,new gn],[W.CONCRETE_DISC,new In],[W.SQUARE_WIRE,new cn],[W.HEXAGONAL_WIRE,new ln],[W.HEXAGONAL_GLASS,new mn],[W.STONE_TILES,new hn]])}static createGrid(e,t){let n=this.gridStyles.get(e);if(!n){console.warn(`Unknown grid type: ${e}, falling back to square wire grid`);let n=this.gridStyles.get(W.SQUARE_WIRE);if(!n)throw Error(`Square wire grid style not found`);return n.createGrid(t)}let r=n.createGrid(t);return r.name=`Grid_${e}`,r}static registerGridStyle(e,t){this.gridStyles.set(e,t)}static getAvailableTypes(){return Array.from(this.gridStyles.keys())}static disposeGridStyle(e){let t=this.gridStyles.get(e);t&&t.dispose&&t.dispose()}};function Rn(t,r){try{let i=e.o(t);if(!i)return e.N.err(new e.F(`Scene must be ThreeSceneAdapter`,e.P.INVALID_PARAMETER));if(r.grid){let e=i.userData,t=typeof r.grid==`object`?r.grid:null,n={enabled:!0,color:t?.colorGrid||r.gridColor||`#AAAAAA`,type:t?.type?t.type:W.HEXAGONAL_GLASS,opacity:t?.opacity,styleOptions:t?.styleOptions};if(i.userData={...e,gridOptions:n},t?.size||t?.divisions){let e=n.type||W.HEXAGONAL_GLASS,r=t.size||10,a=t.divisions||10,o={size:r,divisions:a,color:n.color,opacity:n.opacity,styleOptions:{hexRadius:Math.floor(a/2),tileSize:1,...n.styleOptions}},s=Ln.createGrid(e,o);s.userData.isGrid=!0,s.userData.isDefaultGrid=!0,i.add(s)}}if(r.axes){let e=r.axesSize||5,t=new n.AxesHelper(e);i.add(t)}return e.N.ok(void 0)}catch(t){return e.N.err(new e.F(`Failed to add helpers to scene`,e.P.SCENE_OPERATION_FAILED,{originalError:t,options:r}))}}function zn(t,r,i=1.2){try{let a=e.o(t);if(!a)return e.N.err(new e.F(`Scene must be ThreeSceneAdapter`,e.P.INVALID_PARAMETER));let o=a.userData?.gridOptions;if(!o?.enabled)return e.N.ok(void 0);let s=[];a.traverse(e=>{(e.userData?.isGrid||e.userData?.isHexGrid||e.userData?.isDefaultGrid)&&s.push(e)}),s.forEach(t=>{e.v(t),a.remove(t)});let c=e.i(r);if(!c)return e.N.err(new e.F(`Object must expose a Three.js Object3D`,e.P.INVALID_PARAMETER));let l=new n.Box3().setFromObject(c),u=l.getSize(new n.Vector3);if(l.isEmpty()||!Number.isFinite(u.x)||!Number.isFinite(u.z))return console.warn(`Skipping dynamic grid: object has an empty or non-finite bounding box`),e.N.ok(void 0);let d=o.styleOptions?.tileSize,f=typeof d==`number`?d:1,p=un.getGridSpacing(f).width,m=Math.max(u.x,u.z)*i+u.y,h=m<=p?0:Math.ceil((m/p-1)/2);h>60&&(console.warn(`Dynamic grid would need ${h} rings to cover the object; capping at 60. The floor will not fully reach the configured coverage for this tileSize/object-size combination.`),h=60),m<p*.8?h=0:h<3&&m>p*2&&(h=3);let g=o.type||W.HEXAGONAL_GLASS,_={size:Math.max(u.x,u.z)*i,divisions:h*2+1,color:o.color,opacity:o.opacity,styleOptions:{hexRadius:h,tileSize:f,...o.styleOptions}},v=Ln.createGrid(g,_);v.userData.isGrid=!0,v.userData.isHexGrid=!0;let y=n.MathUtils.clamp(u.y*.0025,2e-4,.002),b=v.getObjectByName(e.u);b&&(b.position.y=y),v.traverse(e=>{e.userData?.softboxPathTracingFloor&&(e.position.y=y)});let x=l.getCenter(new n.Vector3);return v.position.set(x.x,0,x.z),a.add(v),e.N.ok(void 0)}catch(t){return e.N.err(new e.F(`Failed to add dynamic grid`,e.P.SCENE_OPERATION_FAILED,{originalError:t}))}}function Bn(t,r){try{let i=e.o(t);if(!i)return e.N.err(new e.F(`Scene must be ThreeSceneAdapter`,e.P.INVALID_PARAMETER));let a=e.i(r);if(!a)return e.N.err(new e.F(`Object must expose a Three.js Object3D`,e.P.INVALID_PARAMETER));let o=e=>{let t=e;for(;t;){if(t.userData?.isGrid||t.userData?.isHexGrid||t.userData?.isDefaultGrid)return!0;t=t.parent}return!1};i.updateMatrixWorld(!0);let s=[];i.traverse(e=>{e.userData?.softboxPathTracingFloor||e.isMesh&&o(e)&&s.push(e)});let c=[];if(a.traverse(e=>{e.isMesh&&c.push(e)}),s.length===0||c.length===0)return e.N.ok(void 0);let l=-1/0,u=new n.Box3;for(let e of s)u.setFromObject(e),Number.isFinite(u.max.y)&&(l=Math.max(l,u.max.y));if(!Number.isFinite(l))return e.N.ok(void 0);let d=new n.Box3().setFromObject(a);if(d.isEmpty()||!Number.isFinite(d.min.x)||!Number.isFinite(d.max.x))return e.N.ok(void 0);let f=Math.max(1,d.max.y-d.min.y),p=d.max.y+f,m=d.min.y-f,h=new n.Raycaster,g=new n.Vector3(0,-1,0),_=new n.Vector3(0,1,0),v=1/0,y=(e,t,r,i)=>{h.set(new n.Vector3(e,t,r),i);for(let e of h.intersectObjects(c,!1))e.point.y<v&&(v=e.point.y)};for(let e=0;e<=40;e++)for(let t=0;t<=40;t++){let n=d.min.x+(d.max.x-d.min.x)*(e/40),r=d.min.z+(d.max.z-d.min.z)*(t/40);y(n,p,r,g),y(n,m,r,_)}if(Number.isFinite(v)){let e=v-l;Math.abs(e)>1e-4&&(a.position.y-=e)}return e.N.ok(void 0)}catch(t){return e.N.err(new e.F(`Failed to snap object to floor`,e.P.SCENE_OPERATION_FAILED,{originalError:t}))}}var Vn=e=>{let t=null;return e.traverse(e=>{!t&&e.isDirectionalLight&&(t=e)}),t};function Hn(t,r){try{let i=e.o(t);if(!i)return e.N.err(new e.F(`Scene must be ThreeSceneAdapter`,e.P.INVALID_PARAMETER));let a=e.i(r);if(!a)return e.N.err(new e.F(`Object must expose a Three.js Object3D`,e.P.INVALID_PARAMETER));let o=new n.Box3().setFromObject(a);if(o.isEmpty()||!Number.isFinite(o.min.x)||!Number.isFinite(o.max.x))return e.N.ok(void 0);let s=o.getSize(new n.Vector3),c=o.getCenter(new n.Vector3),l=Vn(i);if(!l||!l.castShadow)return e.N.ok(void 0);if(l.parent===i&&l.target.parent===i){let e=l.position.clone().sub(l.target.position);l.target.position.copy(c),l.position.copy(c).add(e)}let u=Math.max(s.x,s.y,s.z,.1)*2,d=l.shadow.camera;d.left=-u,d.right=u,d.top=u,d.bottom=-u;let f=l.getWorldPosition(new n.Vector3),p=l.target.getWorldPosition(new n.Vector3).sub(f).normalize(),m=c.clone().sub(f).dot(p),h=u*2;return d.near=Math.max(m-h,m*.01),d.far=m+h,d.updateProjectionMatrix(),e.N.ok(void 0)}catch(t){return e.N.err(new e.F(`Failed to fit shadow camera to object`,e.P.SCENE_OPERATION_FAILED,{originalError:t}))}}function Un(t,n,r,i){try{let a=e.o(t);if(!a)return e.N.err(new e.F(`Scene must be ThreeSceneAdapter`,e.P.INVALID_PARAMETER));let o=e.i(n);if(!o)return e.N.err(new e.F(`Object must expose a Three.js Object3D`,e.P.INVALID_PARAMETER));let s=e.a(r);if(!s||!s.shadowMap.enabled)return e.N.ok(void 0);let c=Vn(a);return!c||!c.castShadow||i.bake({renderer:s,scene:a,object:o,light:c}),e.N.ok(void 0)}catch(t){return e.N.err(new e.F(`Failed to bake contact shadow`,e.P.SCENE_OPERATION_FAILED,{originalError:t}))}}function Wn(t){try{let n=e.o(t);return n?(e.p(n),e.N.ok(void 0)):e.N.err(new e.F(`Scene must be ThreeSceneAdapter`,e.P.INVALID_PARAMETER))}catch(t){return e.N.err(new e.F(`Failed to reset the contact shadow`,e.P.SCENE_OPERATION_FAILED,{originalError:t}))}}function Gn(t,n){try{let r=e.o(t);if(!r)return e.N.err(new e.F(`Scene must be ThreeSceneAdapter`,e.P.INVALID_PARAMETER));let i=r.getObjectByName(e.c),a=r.getObjectByName(e.u);return n===`baked`&&!i?e.N.ok(void 0):(i&&(i.visible=n===`baked`),a&&(a.visible=n===`live`),e.N.ok(void 0))}catch(t){return e.N.err(new e.F(`Failed to switch contact shadow mode`,e.P.SCENE_OPERATION_FAILED,{originalError:t}))}}function Kn(t,r){try{let i=e.i(t);if(!i)return e.N.err(new e.F(`Object must expose a Three.js Object3D`,e.P.INVALID_PARAMETER));let a=new n.Group;return a.name=e.A,a.scale.setScalar(r),a.add(i),e.N.ok(new A(a))}catch(t){return e.N.err(new e.F(`Failed to apply the units scale to the model`,e.P.SCENE_OPERATION_FAILED,{originalError:t}))}}function qn(t,r){try{let i=e.o(t);if(!i)return e.N.err(new e.F(`Scene must be ThreeSceneAdapter`,e.P.INVALID_PARAMETER));if(r.ambient){let e=new n.Color(r.ambient.color||`#404040`),t=r.ambient.intensity??Math.PI,a=new n.AmbientLight(e,t);i.add(a)}if(r.hemisphere){let e=new n.Color(r.hemisphere.skyColor||`#ffffbb`),t=new n.Color(r.hemisphere.groundColor||`#080820`),a=r.hemisphere.intensity??1,o=new n.HemisphereLight(e,t,a);i.add(o)}if(r.directional){let e=new n.Color(r.directional.color||`#ffffff`),t=r.directional.intensity??Math.PI,a=new n.DirectionalLight(e,t);if(r.directional.position){let e=r.directional.position;if(e instanceof n.Vector3)a.position.copy(e);else if(Array.isArray(e))a.position.set(e[0],e[1],e[2]);else if(typeof e==`object`&&`x`in e&&`y`in e&&`z`in e){let t=e;a.position.set(t.x,t.y,t.z)}}else a.position.set(6,6,6);if(r.directional.castShadow&&(a.castShadow=!0,r.directional.shadow)){let e=r.directional.shadow;if(e.mapSize&&(a.shadow.mapSize.width=e.mapSize.width,a.shadow.mapSize.height=e.mapSize.height),e.camera){let t=a.shadow.camera;e.camera.near!==void 0&&(t.near=e.camera.near),e.camera.far!==void 0&&(t.far=e.camera.far),e.camera.left!==void 0&&(t.left=e.camera.left),e.camera.right!==void 0&&(t.right=e.camera.right),e.camera.top!==void 0&&(t.top=e.camera.top),e.camera.bottom!==void 0&&(t.bottom=e.camera.bottom)}e.bias!==void 0&&(a.shadow.bias=e.bias),e.normalBias!==void 0&&(a.shadow.normalBias=e.normalBias),e.radius!==void 0&&(a.shadow.radius=e.radius)}a.target.position.set(0,0,0),i.add(a),i.add(a.target),a.shadow&&a.shadow.camera.updateProjectionMatrix()}let a=(e,t)=>{let r=new n.DirectionalLight(new n.Color(e.color||`#ffffff`),e.intensity??1),a=e.position??t;r.position.set(a[0],a[1],a[2]),r.target.position.set(0,0,0),i.add(r),i.add(r.target)};return r.fill&&a(r.fill,[-60,30,30]),r.rim&&a(r.rim,[20,50,-70]),e.N.ok(void 0)}catch(t){return e.N.err(new e.F(`Failed to add lighting to scene`,e.P.SCENE_OPERATION_FAILED,{originalError:t,options:r}))}}function Jn(t,r){try{let i=e.o(t);if(!i)return e.N.err(new e.F(`Scene must be ThreeSceneAdapter`,e.P.INVALID_PARAMETER));let a=document.createElement(`canvas`);a.width=r.radial?512:2,a.height=512;let o=a.getContext(`2d`);if(!o)return e.N.err(new e.F(`Failed to create canvas context`,e.P.SCENE_OPERATION_FAILED));let s=r.radial?o.createRadialGradient(256,205,0,256,256,380):o.createLinearGradient(0,0,0,a.height);s.addColorStop(0,r.topColor),s.addColorStop(1,r.bottomColor),o.fillStyle=s,o.fillRect(0,0,a.width,a.height);let c=new n.CanvasTexture(a);return c.needsUpdate=!0,oe(c),se(i),i.background=c,e.N.ok(void 0)}catch(t){return e.N.err(new e.F(`Failed to create gradient background`,e.P.SCENE_OPERATION_FAILED,{originalError:t,options:r}))}}function Yn(t,r,i){try{let a=e.i(t);if(!a)return e.N.err(new e.F(`Object must expose a Three.js Object3D`,e.P.INVALID_PARAMETER));let o=e.n(r);if(!(o instanceof n.PerspectiveCamera)&&!(o instanceof n.OrthographicCamera))return e.N.err(new e.F(`Camera must expose a perspective or orthographic Three.js camera`,e.P.INVALID_PARAMETER));let s=e.r(i);if(!s)return e.N.err(new e.F(`Controls must expose the underlying Three.js controls`,e.P.INVALID_PARAMETER));let c=new n.Box3().setFromObject(a),l=c.getCenter(new n.Vector3),u=c.getSize(new n.Vector3),d=Math.max(u.x,u.y,u.z),f;f=`fov`in o?o.fov*(Math.PI/180):Math.PI/180*50;let p=Math.abs(d/2/Math.tan(f/2));p*=1.65;let m=-Math.PI/4,h=Math.PI/8,g=l.x+p*Math.sin(m)*Math.cos(h),_=l.y+p*Math.sin(h),v=l.z+p*Math.cos(m)*Math.cos(h);return o.position.set(g,_,v),o.lookAt(l),o.updateProjectionMatrix(),s.target&&(s.target.copy(l),s.update()),e.N.ok(void 0)}catch(t){return e.N.err(new e.F(`Failed to fit camera to object`,e.P.CAMERA_INIT_FAILED,{originalError:t}))}}var Xn=class{constructor(){this.contactShadowBaker=new e.d}addHelpers(e,t){return Rn(e,t)}addDynamicGrid(e,t,n=1.2){return zn(e,t,n)}snapObjectToFloor(e,t){return Bn(e,t)}fitShadowCameraToObject(e,t){return Hn(e,t)}bakeContactShadow(e,t,n){return Un(e,t,n,this.contactShadowBaker)}resetContactShadow(e){return Wn(e)}setContactShadowMode(e,t){return Gn(e,t)}wrapInUnitsScaleGroup(e,t){return Kn(e,t)}async applyMaterialVariant(t,n){let r=e.i(t);return r?(await wt(r),e.N.ok(Dt(r,n))):e.N.err(new e.F(`Model must expose a Three.js Object3D`,e.P.INVALID_PARAMETER))}addLighting(e,t){return qn(e,t)}createGradientBackground(e,t){return Jn(e,t)}fitCameraToObject(e,t,n){return Yn(e,t,n)}},Zn=class{constructor(){this.events=new e.M,this.disposed=!1}async initialize(t){let n;try{({ThreePathTracingService:n}=await Promise.resolve().then(()=>require("./ThreePathTracingService-CamzPwtW.cjs")))}catch(t){return e.N.err(new e.F(`Failed to load the path-tracing chunk`,e.P.PATH_TRACING_INIT_FAILED,{originalError:t}))}if(this.disposed)return e.N.ok(void 0);let r=new n;return this.inner=r,r.events.on(`pathtracing:paused`,e=>{this.events.emit(`pathtracing:paused`,e)}),this.pendingSettings&&=(r.updateSettings(this.pendingSettings),void 0),this.pendingEnabled!==void 0&&(r.setEnabled(this.pendingEnabled),this.pendingEnabled=void 0),r.initialize(t)}setEnabled(e){this.inner?this.inner.setEnabled(e):this.pendingEnabled=e}updateSettings(e){this.inner?this.inner.updateSettings(e):this.pendingSettings={...this.pendingSettings,...e}}render(t,n){return this.inner?this.inner.render(t,n):Promise.resolve(e.N.ok(void 0))}getSampleCount(){return this.inner?.getSampleCount()??0}isEnabled(){return this.inner?.isEnabled()??!1}isPathTracerDisposed(){return this.inner?.isPathTracerDisposed()??!1}canResume(){return this.inner?.canResume()??!1}reset(e){this.inner?.reset(e)}dispose(){this.disposed=!0,this.inner?.dispose()}isSupported(){return this.inner?.isSupported()??!0}},K=Uint8Array,Qn=Uint16Array,$n=Int32Array,er=new K([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),tr=new K([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),nr=new K([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),rr=function(e,t){for(var n=new Qn(31),r=0;r<31;++r)n[r]=t+=1<<e[r-1];for(var i=new $n(n[30]),r=1;r<30;++r)for(var a=n[r];a<n[r+1];++a)i[a]=a-n[r]<<5|r;return{b:n,r:i}},ir=rr(er,2),ar=ir.b,or=ir.r;ar[28]=258,or[258]=28;var sr=rr(tr,0),cr=sr.b;sr.r;for(var lr=new Qn(32768),q=0;q<32768;++q){var ur=(q&43690)>>1|(q&21845)<<1;ur=(ur&52428)>>2|(ur&13107)<<2,ur=(ur&61680)>>4|(ur&3855)<<4,lr[q]=((ur&65280)>>8|(ur&255)<<8)>>1}for(var dr=(function(e,t,n){for(var r=e.length,i=0,a=new Qn(t);i<r;++i)e[i]&&++a[e[i]-1];var o=new Qn(t);for(i=1;i<t;++i)o[i]=o[i-1]+a[i-1]<<1;var s;if(n){s=new Qn(1<<t);var c=15-t;for(i=0;i<r;++i)if(e[i])for(var l=i<<4|e[i],u=t-e[i],d=o[e[i]-1]++<<u,f=d|(1<<u)-1;d<=f;++d)s[lr[d]>>c]=l}else for(s=new Qn(r),i=0;i<r;++i)e[i]&&(s[i]=lr[o[e[i]-1]++]>>15-e[i]);return s}),fr=new K(288),q=0;q<144;++q)fr[q]=8;for(var q=144;q<256;++q)fr[q]=9;for(var q=256;q<280;++q)fr[q]=7;for(var q=280;q<288;++q)fr[q]=8;for(var pr=new K(32),q=0;q<32;++q)pr[q]=5;var mr=dr(fr,9,1),hr=dr(pr,5,1),gr=function(e){for(var t=e[0],n=1;n<e.length;++n)e[n]>t&&(t=e[n]);return t},J=function(e,t,n){var r=t/8|0;return(e[r]|e[r+1]<<8)>>(t&7)&n},_r=function(e,t){var n=t/8|0;return(e[n]|e[n+1]<<8|e[n+2]<<16)>>(t&7)},vr=function(e){return(e+7)/8|0},yr=function(e,t,n){return(t==null||t<0)&&(t=0),(n==null||n>e.length)&&(n=e.length),new K(e.subarray(t,n))},br=[`unexpected EOF`,`invalid block type`,`invalid length/literal`,`invalid distance`,`stream finished`,`no stream handler`,,`no callback`,`invalid UTF-8 data`,`extra field too long`,`date not in range 1980-2099`,`filename too long`,`stream finishing`,`invalid zip data`],Y=function(e,t,n){var r=Error(t||br[e]);if(r.code=e,Error.captureStackTrace&&Error.captureStackTrace(r,Y),!n)throw r;return r},xr=function(e,t,n,r){var i=e.length,a=r?r.length:0;if(!i||t.f&&!t.l)return n||new K(0);var o=!n,s=o||t.i!=2,c=t.i;o&&(n=new K(i*3));var l=function(e){var t=n.length;if(e>t){var r=new K(Math.max(t*2,e));r.set(n),n=r}},u=t.f||0,d=t.p||0,f=t.b||0,p=t.l,m=t.d,h=t.m,g=t.n,_=i*8;do{if(!p){u=J(e,d,1);var v=J(e,d+1,3);if(d+=3,!v){var y=vr(d)+4,b=e[y-4]|e[y-3]<<8,x=y+b;if(x>i){c&&Y(0);break}s&&l(f+b),n.set(e.subarray(y,x),f),t.b=f+=b,t.p=d=x*8,t.f=u;continue}else if(v==1)p=mr,m=hr,h=9,g=5;else if(v==2){var S=J(e,d,31)+257,C=J(e,d+10,15)+4,ee=S+J(e,d+5,31)+1;d+=14;for(var w=new K(ee),T=new K(19),E=0;E<C;++E)T[nr[E]]=J(e,d+E*3,7);d+=C*3;for(var D=gr(T),te=(1<<D)-1,ne=dr(T,D,1),E=0;E<ee;){var re=ne[J(e,d,te)];d+=re&15;var y=re>>4;if(y<16)w[E++]=y;else{var ie=0,O=0;for(y==16?(O=3+J(e,d,3),d+=2,ie=w[E-1]):y==17?(O=3+J(e,d,7),d+=3):y==18&&(O=11+J(e,d,127),d+=7);O--;)w[E++]=ie}}var k=w.subarray(0,S),A=w.subarray(S);h=gr(k),g=gr(A),p=dr(k,h,1),m=dr(A,g,1)}else Y(1);if(d>_){c&&Y(0);break}}s&&l(f+131072);for(var ae=(1<<h)-1,oe=(1<<g)-1,se=d;;se=d){var ie=p[_r(e,d)&ae],j=ie>>4;if(d+=ie&15,d>_){c&&Y(0);break}if(ie||Y(2),j<256)n[f++]=j;else if(j==256){se=d,p=null;break}else{var ce=j-254;if(j>264){var E=j-257,le=er[E];ce=J(e,d,(1<<le)-1)+ar[E],d+=le}var ue=m[_r(e,d)&oe],de=ue>>4;ue||Y(3),d+=ue&15;var A=cr[de];if(de>3){var le=tr[de];A+=_r(e,d)&(1<<le)-1,d+=le}if(d>_){c&&Y(0);break}s&&l(f+131072);var fe=f+ce;if(f<A){var pe=a-A,me=Math.min(A,fe);for(pe+f<0&&Y(3);f<me;++f)n[f]=r[pe+f]}for(;f<fe;++f)n[f]=n[f-A]}}t.l=p,t.p=se,t.b=f,t.f=u,p&&(u=1,t.m=h,t.d=m,t.n=g)}while(!u);return f!=n.length&&o?yr(n,0,f):n.subarray(0,f)},Sr=new K(0),Cr=function(e,t){return((e[0]&15)!=8||e[0]>>4>7||(e[0]<<8|e[1])%31)&&Y(6,`invalid zlib data`),(e[1]>>5&1)==+!t&&Y(6,`invalid zlib data: `+(e[1]&32?`need`:`unexpected`)+` dictionary`),(e[1]>>3&4)+2};function wr(e,t){return xr(e.subarray(Cr(e,t&&t.dictionary),-4),{i:2},t&&t.out,t&&t.dictionary)}var Tr=typeof TextDecoder<`u`&&new TextDecoder;try{Tr.decode(Sr,{stream:!0})}catch{}var Er=class extends n.DataTextureLoader{constructor(e){super(e),this.type=n.HalfFloatType,this.outputFormat=n.RGBAFormat,this.part=0}parse(e){let t=65536,r=8192,i=65537,a=16384,o=a-1,s=65535,c=2.7182818**2.2,l=null;function u(e,n){let r=0;for(let i=0;i<t;++i)(i==0||e[i>>3]&1<<(i&7))&&(n[r++]=i);let i=r-1;for(;r<t;)n[r++]=0;return i}function d(e){for(let t=0;t<a;t++)e[t]={},e[t].len=0,e[t].lit=0,e[t].p=null}let f={l:0,c:0,lc:0};function p(e,t,n,r,i){for(;n<e;)t=t<<8|Ce(r,i),n+=8;n-=e,f.l=t>>n&(1<<e)-1,f.c=t,f.lc=n}let m=Array(59);function h(e){for(let e=0;e<=58;++e)m[e]=0;for(let t=0;t<i;++t)m[e[t]]+=1;let t=0;for(let e=58;e>0;--e){let n=t+m[e]>>1;m[e]=t,t=n}for(let t=0;t<i;++t){let n=e[t];n>0&&(e[t]=n|m[n]++<<6)}}function g(e,t,n,r,i,a){let o=t,s=0,c=0;for(;r<=i;r++){if(o.value-t.value>n)return!1;p(6,s,c,e,o);let l=f.l;if(s=f.c,c=f.lc,a[r]=l,l==63){if(o.value-t.value>n)throw Error(`THREE.EXRLoader: Something wrong with hufUnpackEncTable`);p(8,s,c,e,o);let l=f.l+6;if(s=f.c,c=f.lc,r+l>i+1)throw Error(`THREE.EXRLoader: Something wrong with hufUnpackEncTable`);for(;l--;)a[r++]=0;r--}else if(l>=59){let e=l-59+2;if(r+e>i+1)throw Error(`THREE.EXRLoader: Something wrong with hufUnpackEncTable`);for(;e--;)a[r++]=0;r--}}h(a)}function _(e){return e&63}function v(e){return e>>6}function y(e,t,n,r){for(;t<=n;t++){let n=v(e[t]),i=_(e[t]);if(n>>i)throw Error(`THREE.EXRLoader: Invalid table entry`);if(i>14){let e=r[n>>i-14];if(e.len)throw Error(`THREE.EXRLoader: Invalid table entry`);if(e.lit++,e.p){let t=e.p;e.p=Array(e.lit);for(let n=0;n<e.lit-1;++n)e.p[n]=t[n]}else e.p=[,];e.p[e.lit-1]=t}else if(i){let e=0;for(let a=1<<14-i;a>0;a--){let a=r[(n<<14-i)+e];if(a.len||a.p)throw Error(`THREE.EXRLoader: Invalid table entry`);a.len=i,a.lit=t,e++}}}return!0}let b={c:0,lc:0};function x(e,t,n,r){e=e<<8|Ce(n,r),t+=8,b.c=e,b.lc=t}let S={c:0,lc:0};function C(e,t,n,r,i,a,o,s,c){if(e==t){r<8&&(x(n,r,i,a),n=b.c,r=b.lc),r-=8;let e=n>>r;if(e=new Uint8Array([e])[0],s.value+e>c)return!1;let t=o[s.value-1];for(;e-->0;)o[s.value++]=t}else if(s.value<c)o[s.value++]=e;else return!1;S.c=n,S.lc=r}function ee(e){return e&65535}function w(e){let t=ee(e);return t>32767?t-65536:t}let T={a:0,b:0};function E(e,t){let n=w(e),r=w(t),i=n+(r&1)+(r>>1),a=i,o=i-r;T.a=a,T.b=o}function D(e,t){let n=ee(e),r=ee(t),i=n-(r>>1)&s,a=r+i-32768&s;T.a=a,T.b=i}function te(e,t,n,r,i,a,o){let s=o<16384,c=n>i?i:n,l=1,u,d;for(;l<=c;)l<<=1;for(l>>=1,u=l,l>>=1;l>=1;){d=0;let o=d+a*(i-u),c=a*l,f=a*u,p=r*l,m=r*u,h,g,_,v;for(;d<=o;d+=f){let i=d,a=d+r*(n-u);for(;i<=a;i+=m){let n=i+p,r=i+c,a=r+p;s?(E(e[i+t],e[r+t]),h=T.a,_=T.b,E(e[n+t],e[a+t]),g=T.a,v=T.b,E(h,g),e[i+t]=T.a,e[n+t]=T.b,E(_,v),e[r+t]=T.a,e[a+t]=T.b):(D(e[i+t],e[r+t]),h=T.a,_=T.b,D(e[n+t],e[a+t]),g=T.a,v=T.b,D(h,g),e[i+t]=T.a,e[n+t]=T.b,D(_,v),e[r+t]=T.a,e[a+t]=T.b)}if(n&l){let n=i+c;s?E(e[i+t],e[n+t]):D(e[i+t],e[n+t]),h=T.a,e[n+t]=T.b,e[i+t]=h}}if(i&l){let i=d,a=d+r*(n-u);for(;i<=a;i+=m){let n=i+p;s?E(e[i+t],e[n+t]):D(e[i+t],e[n+t]),h=T.a,e[n+t]=T.b,e[i+t]=h}}u=l,l>>=1}return d}function ne(e,t,n,r,i,a,s,c,l){let u=0,d=0,f=s,p=Math.trunc(r.value+(i+7)/8);for(;r.value<p;)for(x(u,d,n,r),u=b.c,d=b.lc;d>=14;){let i=t[u>>d-14&o];if(i.len)d-=i.len,C(i.lit,a,u,d,n,r,c,l,f),u=S.c,d=S.lc;else{if(!i.p)throw Error(`THREE.EXRLoader: hufDecode issues`);let t;for(t=0;t<i.lit;t++){let o=_(e[i.p[t]]);for(;d<o&&r.value<p;)x(u,d,n,r),u=b.c,d=b.lc;if(d>=o&&v(e[i.p[t]])==(u>>d-o&(1<<o)-1)){d-=o,C(i.p[t],a,u,d,n,r,c,l,f),u=S.c,d=S.lc;break}}if(t==i.lit)throw Error(`THREE.EXRLoader: hufDecode issues`)}}let m=8-i&7;for(u>>=m,d-=m;d>0;){let e=t[u<<14-d&o];if(e.len)d-=e.len,C(e.lit,a,u,d,n,r,c,l,f),u=S.c,d=S.lc;else throw Error(`THREE.EXRLoader: hufDecode issues`)}return!0}function re(e,t,n,r,o,s){let c={value:0},l=n.value,u=N(t,n),f=N(t,n);n.value+=4;let p=N(t,n);if(n.value+=4,u<0||u>=i||f<0||f>=i)throw Error(`THREE.EXRLoader: Something wrong with HUF_ENCSIZE`);let m=Array(i),h=Array(a);if(d(h),g(e,n,r-(n.value-l),u,f,m),p>8*(r-(n.value-l)))throw Error(`THREE.EXRLoader: Something wrong with hufUncompress`);y(m,u,f,h),ne(m,h,e,n,p,f,s,o,c)}function ie(e,t,n){for(let r=0;r<n;++r)t[r]=e[t[r]]}function O(e){for(let t=1;t<e.length;t++)e[t]=e[t-1]+e[t]-128}function k(e,t){let n=0,r=Math.floor((e.length+1)/2),i=0,a=e.length-1;for(;!(i>a||(t[i++]=e[n++],i>a));)t[i++]=e[r++]}function A(e){let t=e.byteLength,n=[],r=0,i=new DataView(e);for(;t>0;){let e=i.getInt8(r++);if(e<0){let a=-e;t-=a+1;for(let e=0;e<a;e++)n.push(i.getUint8(r++))}else{let a=e;t-=2;let o=i.getUint8(r++);for(let e=0;e<a+1;e++)n.push(o)}}return n}function ae(e,t,n,r,i,a){let o=new DataView(a.buffer),s=n[e.idx[0]].width,c=n[e.idx[0]].height,l=Math.floor(s/8),u=Math.ceil(s/8),d=Math.ceil(c/8),f=s-(u-1)*8,p=c-(d-1)*8,m={value:0},h=[,,,],g=[,,,],_=[,,,],v=[,,,],y=[,,,];for(let n=0;n<3;++n)y[n]=t[e.idx[n]],h[n]=n<1?0:h[n-1]+u*d,g[n]=new Float32Array(64),_[n]=new Uint16Array(64),v[n]=new Uint16Array(u*64);for(let t=0;t<d;++t){let a=8;t==d-1&&(a=p);let s=8;for(let e=0;e<u;++e){e==u-1&&(s=f);for(let e=0;e<3;++e)_[e].fill(0),_[e][0]=i[h[e]++],se(m,r,_[e]),j(_[e],g[e]),ce(g[e]);le(g);for(let t=0;t<3;++t)ue(g[t],v[t],e*64)}let c=0;for(let r=0;r<3;++r){let i=n[e.idx[r]].type;for(let e=8*t;e<8*t+a;++e){c=y[r][e];for(let t=0;t<l;++t){let n=t*64+(e&7)*8;o.setUint16(c+0*i,v[r][n+0],!0),o.setUint16(c+2*i,v[r][n+1],!0),o.setUint16(c+4*i,v[r][n+2],!0),o.setUint16(c+6*i,v[r][n+3],!0),o.setUint16(c+8*i,v[r][n+4],!0),o.setUint16(c+10*i,v[r][n+5],!0),o.setUint16(c+12*i,v[r][n+6],!0),o.setUint16(c+14*i,v[r][n+7],!0),c+=16*i}}if(l!=u)for(let e=8*t;e<8*t+a;++e){let t=y[r][e]+8*l*2*i,n=l*64+(e&7)*8;for(let e=0;e<s;++e)o.setUint16(t+e*2*i,v[r][n+e],!0)}}}let b=new Uint16Array(s);o=new DataView(a.buffer);for(let t=0;t<3;++t){n[e.idx[t]].decoded=!0;let r=n[e.idx[t]].type;if(n[t].type==2)for(let e=0;e<c;++e){let n=y[t][e];for(let e=0;e<s;++e)b[e]=o.getUint16(n+e*2*r,!0);for(let e=0;e<s;++e)o.setFloat32(n+e*2*r,I(b[e]),!0)}}}function oe(e,t,n,r,i,a){let o=new DataView(a.buffer),s=n[e],c=s.width,l=s.height,u=Math.ceil(c/8),d=Math.ceil(l/8),f=Math.floor(c/8),p=c-(u-1)*8,m=l-(d-1)*8,h={value:0},g=0,_=new Float32Array(64),v=new Uint16Array(64),y=new Uint16Array(u*64);for(let n=0;n<d;++n){let a=8;n==d-1&&(a=m);for(let e=0;e<u;++e)v.fill(0),v[0]=i[g++],se(h,r,v),j(v,_),ce(_),ue(_,y,e*64);for(let r=8*n;r<8*n+a;++r){let n=t[e][r];for(let e=0;e<f;++e){let t=e*64+(r&7)*8;for(let e=0;e<8;++e)o.setUint16(n+e*2*s.type,y[t+e],!0);n+=16*s.type}if(u!=f){let e=f*64+(r&7)*8;for(let t=0;t<p;++t)o.setUint16(n+t*2*s.type,y[e+t],!0)}}}s.decoded=!0}function se(e,t,n){let r,i=1;for(;i<64;)r=t[e.value],r==65280?i=64:r>>8==255?i+=r&255:(n[i]=r,i++),e.value++}function j(e,t){t[0]=I(e[0]),t[1]=I(e[1]),t[2]=I(e[5]),t[3]=I(e[6]),t[4]=I(e[14]),t[5]=I(e[15]),t[6]=I(e[27]),t[7]=I(e[28]),t[8]=I(e[2]),t[9]=I(e[4]),t[10]=I(e[7]),t[11]=I(e[13]),t[12]=I(e[16]),t[13]=I(e[26]),t[14]=I(e[29]),t[15]=I(e[42]),t[16]=I(e[3]),t[17]=I(e[8]),t[18]=I(e[12]),t[19]=I(e[17]),t[20]=I(e[25]),t[21]=I(e[30]),t[22]=I(e[41]),t[23]=I(e[43]),t[24]=I(e[9]),t[25]=I(e[11]),t[26]=I(e[18]),t[27]=I(e[24]),t[28]=I(e[31]),t[29]=I(e[40]),t[30]=I(e[44]),t[31]=I(e[53]),t[32]=I(e[10]),t[33]=I(e[19]),t[34]=I(e[23]),t[35]=I(e[32]),t[36]=I(e[39]),t[37]=I(e[45]),t[38]=I(e[52]),t[39]=I(e[54]),t[40]=I(e[20]),t[41]=I(e[22]),t[42]=I(e[33]),t[43]=I(e[38]),t[44]=I(e[46]),t[45]=I(e[51]),t[46]=I(e[55]),t[47]=I(e[60]),t[48]=I(e[21]),t[49]=I(e[34]),t[50]=I(e[37]),t[51]=I(e[47]),t[52]=I(e[50]),t[53]=I(e[56]),t[54]=I(e[59]),t[55]=I(e[61]),t[56]=I(e[35]),t[57]=I(e[36]),t[58]=I(e[48]),t[59]=I(e[49]),t[60]=I(e[57]),t[61]=I(e[58]),t[62]=I(e[62]),t[63]=I(e[63])}function ce(e){let t=.5*Math.cos(3.14159/4),n=.5*Math.cos(3.14159/16),r=.5*Math.cos(3.14159/8),i=.5*Math.cos(3*3.14159/16),a=.5*Math.cos(5*3.14159/16),o=.5*Math.cos(3*3.14159/8),s=.5*Math.cos(7*3.14159/16),c=[,,,,],l=[,,,,],u=[,,,,],d=[,,,,];for(let f=0;f<8;++f){let p=f*8;c[0]=r*e[p+2],c[1]=o*e[p+2],c[2]=r*e[p+6],c[3]=o*e[p+6],l[0]=n*e[p+1]+i*e[p+3]+a*e[p+5]+s*e[p+7],l[1]=i*e[p+1]-s*e[p+3]-n*e[p+5]-a*e[p+7],l[2]=a*e[p+1]-n*e[p+3]+s*e[p+5]+i*e[p+7],l[3]=s*e[p+1]-a*e[p+3]+i*e[p+5]-n*e[p+7],u[0]=t*(e[p+0]+e[p+4]),u[3]=t*(e[p+0]-e[p+4]),u[1]=c[0]+c[3],u[2]=c[1]-c[2],d[0]=u[0]+u[1],d[1]=u[3]+u[2],d[2]=u[3]-u[2],d[3]=u[0]-u[1],e[p+0]=d[0]+l[0],e[p+1]=d[1]+l[1],e[p+2]=d[2]+l[2],e[p+3]=d[3]+l[3],e[p+4]=d[3]-l[3],e[p+5]=d[2]-l[2],e[p+6]=d[1]-l[1],e[p+7]=d[0]-l[0]}for(let f=0;f<8;++f)c[0]=r*e[16+f],c[1]=o*e[16+f],c[2]=r*e[48+f],c[3]=o*e[48+f],l[0]=n*e[8+f]+i*e[24+f]+a*e[40+f]+s*e[56+f],l[1]=i*e[8+f]-s*e[24+f]-n*e[40+f]-a*e[56+f],l[2]=a*e[8+f]-n*e[24+f]+s*e[40+f]+i*e[56+f],l[3]=s*e[8+f]-a*e[24+f]+i*e[40+f]-n*e[56+f],u[0]=t*(e[f]+e[32+f]),u[3]=t*(e[f]-e[32+f]),u[1]=c[0]+c[3],u[2]=c[1]-c[2],d[0]=u[0]+u[1],d[1]=u[3]+u[2],d[2]=u[3]-u[2],d[3]=u[0]-u[1],e[0+f]=d[0]+l[0],e[8+f]=d[1]+l[1],e[16+f]=d[2]+l[2],e[24+f]=d[3]+l[3],e[32+f]=d[3]-l[3],e[40+f]=d[2]-l[2],e[48+f]=d[1]-l[1],e[56+f]=d[0]-l[0]}function le(e){for(let t=0;t<64;++t){let n=e[0][t],r=e[1][t],i=e[2][t];e[0][t]=n+1.5747*i,e[1][t]=n-.1873*r-.4682*i,e[2][t]=n+1.8556*r}}function ue(e,t,r){for(let i=0;i<64;++i)t[r+i]=n.DataUtils.toHalfFloat(de(e[i]))}function de(e){return e<=1?Math.sign(e)*Math.abs(e)**2.2:Math.sign(e)*c**(Math.abs(e)-1)}function fe(e){return new DataView(e.array.buffer,e.offset.value,e.size)}function pe(e){let t=e.viewer.buffer.slice(e.offset.value,e.offset.value+e.size),n=new Uint8Array(A(t)),r=new Uint8Array(n.length);return O(n),k(n,r),new DataView(r.buffer)}function me(e){let t=wr(e.array.slice(e.offset.value,e.offset.value+e.size)),n=new Uint8Array(t.length);return O(t),k(t,n),new DataView(n.buffer)}function he(e){let n=e.viewer,i={value:e.offset.value},a=new Uint16Array(e.columns*e.lines*(e.inputChannels.length*e.type)),o=new Uint8Array(r),s=0,c=Array(e.inputChannels.length);for(let t=0,n=e.inputChannels.length;t<n;t++)c[t]={},c[t].start=s,c[t].end=c[t].start,c[t].nx=e.columns,c[t].ny=e.lines,c[t].size=e.type,s+=c[t].nx*c[t].ny*c[t].size;let l=L(n,i),d=L(n,i);if(d>=r)throw Error(`THREE.EXRLoader: Something is wrong with PIZ_COMPRESSION BITMAP_SIZE`);if(l<=d)for(let e=0;e<d-l+1;e++)o[e+l]=we(n,i);let f=new Uint16Array(t),p=u(o,f),m=N(n,i);re(e.array,n,i,m,a,s);for(let t=0;t<e.inputChannels.length;++t){let e=c[t];for(let n=0;n<c[t].size;++n)te(a,e.start+n,e.nx,e.size,e.ny,e.nx*e.size,p)}ie(f,a,s);let h=0,g=new Uint8Array(a.buffer.byteLength);for(let t=0;t<e.lines;t++)for(let t=0;t<e.inputChannels.length;t++){let e=c[t],n=e.nx*e.size,r=new Uint8Array(a.buffer,e.end*2,n*2);g.set(r,h),h+=n*2,e.end+=n}return new DataView(g.buffer)}function ge(e){let t=wr(e.array.slice(e.offset.value,e.offset.value+e.size)),n=e.inputChannels.length*e.lines*e.columns*e.totalBytes,r=new ArrayBuffer(n),i=new DataView(r),a=0,o=0,s=[,,,,];for(let n=0;n<e.lines;n++)for(let n=0;n<e.inputChannels.length;n++){let r=0;switch(e.inputChannels[n].pixelType){case 1:s[0]=a,s[1]=s[0]+e.columns,a=s[1]+e.columns;for(let n=0;n<e.columns;++n){let e=t[s[0]++]<<8|t[s[1]++];r+=e,i.setUint16(o,r,!0),o+=2}break;case 2:s[0]=a,s[1]=s[0]+e.columns,s[2]=s[1]+e.columns,a=s[2]+e.columns;for(let n=0;n<e.columns;++n){let e=t[s[0]++]<<24|t[s[1]++]<<16|t[s[2]++]<<8;r+=e,i.setUint32(o,r,!0),o+=4}break}}return i}function _e(e){let t=e.array,r=e.offset.value,i=e.columns,a=e.lines,o=e.inputChannels,s=e.totalBytes,c=R.compression===`B44A_COMPRESSION`,u=new Uint8Array(a*i*s),d=new Uint16Array(16),f=0;for(let e=0;e<o.length;e++){let p=o[e],m=p.pixelType*2,h=Math.ceil(i/p.xSampling),g=Math.ceil(a/p.ySampling),_=p.xSampling===1&&p.ySampling===1;if(p.pixelType!==1){for(let e=0;e<g;e++)if(_){let n=e*i*s+f*i;for(let e=0;e<h*m;e++)u[n+e]=t[r++]}else r+=h*m;f+=m;continue}let v=Math.ceil(h/4),y=Math.ceil(g/4);for(let e=0;e<y;e++)for(let o=0;o<v;o++){if(c&&t[r+2]>=52){let e=t[r]<<8|t[r+1],n=e&32768?e&32767:~e&65535;d.fill(n),r+=3}else{let e=t[r]<<8|t[r+1],n=t[r+2]>>2,i=32<<n,a=e+((t[r+2]<<4|t[r+3]>>4)&63)*(1<<n)-i&65535,o=a+((t[r+3]<<2|t[r+4]>>6)&63)*(1<<n)-i&65535,s=o+(t[r+4]&63)*(1<<n)-i&65535,c=e+(t[r+5]>>2&63)*(1<<n)-i&65535,l=a+((t[r+5]<<4|t[r+6]>>4)&63)*(1<<n)-i&65535,u=o+((t[r+6]<<2|t[r+7]>>6)&63)*(1<<n)-i&65535,f=s+(t[r+7]&63)*(1<<n)-i&65535,p=c+(t[r+8]>>2&63)*(1<<n)-i&65535,m=l+((t[r+8]<<4|t[r+9]>>4)&63)*(1<<n)-i&65535,h=u+((t[r+9]<<2|t[r+10]>>6)&63)*(1<<n)-i&65535,g=f+(t[r+10]&63)*(1<<n)-i&65535,_=[e,c,p,p+(t[r+11]>>2&63)*(1<<n)-i&65535,a,l,m,m+((t[r+11]<<4|t[r+12]>>4)&63)*(1<<n)-i&65535,o,u,h,h+((t[r+12]<<2|t[r+13]>>6)&63)*(1<<n)-i&65535,s,f,g,g+(t[r+13]&63)*(1<<n)-i&65535];for(let e=0;e<16;e++)d[e]=_[e]&32768?_[e]&32767:~_[e]&65535;r+=14}if(p.pLinear){if(l===null){l=new Uint16Array(65536);for(let e=0;e<65536;e++)if((e&31744)==31744||e>32768)l[e]=0;else{let t=I(e);l[e]=t<=0?0:n.DataUtils.toHalfFloat(8*Math.log(t))}}for(let e=0;e<16;e++)d[e]=l[d[e]]}for(let t=0;t<4;t++){let n=e*4+t;if(!(n>=g))for(let e=0;e<4;e++){let r=o*4+e;if(r>=h)continue;let c=d[t*4+e];for(let e=0;e<p.ySampling;e++){let t=n*p.ySampling+e;if(!(t>=a))for(let e=0;e<p.xSampling;e++){let n=r*p.xSampling+e;if(n>=i)continue;let a=t*i*s+f*i+n*2;u[a]=c&255,u[a+1]=c>>8&255}}}}}f+=2}return new DataView(u.buffer)}function ve(e){let t=e.viewer,n={value:e.offset.value},r=new Uint8Array(e.columns*e.lines*(e.inputChannels.length*e.type*2)),i={version:P(t,n),unknownUncompressedSize:P(t,n),unknownCompressedSize:P(t,n),acCompressedSize:P(t,n),dcCompressedSize:P(t,n),rleCompressedSize:P(t,n),rleUncompressedSize:P(t,n),rleRawSize:P(t,n),totalAcUncompressedCount:P(t,n),totalDcUncompressedCount:P(t,n),acCompression:P(t,n)};if(i.version<2)throw Error(`THREE.EXRLoader: `+R.compression+` version `+i.version+` is unsupported`);let a=[],o=L(t,n)-2;for(;o>0;){let e=ye(t.buffer,n),r=we(t,n),i=r>>2&3,s=(r>>4)-1,c=new Int8Array([s])[0],l=we(t,n);a.push({name:e,index:c,type:l,compression:i}),o-=e.length+3}let s=R.channels,c=Array(e.inputChannels.length);for(let t=0;t<e.inputChannels.length;++t){let n=c[t]={},r=s[t];n.name=r.name,n.compression=0,n.decoded=!1,n.type=r.pixelType,n.pLinear=r.pLinear,n.width=e.columns,n.height=e.lines}let l={idx:[,,,]};for(let t=0;t<e.inputChannels.length;++t){let e=c[t],n=e.name.lastIndexOf(`.`),r=n>=0?e.name.substring(n+1):e.name;for(let n=0;n<a.length;++n){let i=a[n];r===i.name&&e.type===i.type&&(e.compression=i.compression,i.index>=0&&(l.idx[i.index]=t),e.offset=t)}}let u,d,f;if(i.acCompressedSize>0)switch(i.acCompression){case 0:u=new Uint16Array(i.totalAcUncompressedCount),re(e.array,t,n,i.acCompressedSize,u,i.totalAcUncompressedCount);break;case 1:let r=wr(e.array.slice(n.value,n.value+i.totalAcUncompressedCount));u=new Uint16Array(r.buffer),n.value+=i.totalAcUncompressedCount;break}if(i.dcCompressedSize>0){let t={array:e.array,offset:n,size:i.dcCompressedSize};d=new Uint16Array(me(t).buffer),n.value+=i.dcCompressedSize}i.rleRawSize>0&&(f=A(wr(e.array.slice(n.value,n.value+i.rleCompressedSize)).buffer),n.value+=i.rleCompressedSize);let p=0,m=Array(c.length);for(let e=0;e<m.length;++e)m[e]=[];for(let t=0;t<e.lines;++t)for(let t=0;t<c.length;++t)m[t].push(p),p+=c[t].width*e.type*2;l.idx[0]!==void 0&&c[l.idx[0]]&&ae(l,m,c,u,d,r);for(let t=0;t<c.length;++t){let n=c[t];if(!n.decoded)switch(n.compression){case 2:let i=0,a=0;for(let o=0;o<e.lines;++o){let e=m[t][i];for(let t=0;t<n.width;++t){for(let t=0;t<2*n.type;++t)r[e++]=f[a+t*n.width*n.height];a++}i++}break;case 1:oe(t,m,c,u,d,r);break;default:throw Error(`THREE.EXRLoader: unsupported channel compression`)}}return new DataView(r.buffer)}function ye(e,t){let n=new Uint8Array(e),r=0;for(;n[t.value+r]!=0;)r+=1;let i=new TextDecoder().decode(n.slice(t.value,t.value+r));return t.value=t.value+r+1,i}function be(e,t,n){let r=new TextDecoder().decode(new Uint8Array(e).slice(t.value,t.value+n));return t.value+=n,r}function xe(e,t){return[M(e,t),N(e,t)]}function Se(e,t){return[N(e,t),N(e,t)]}function M(e,t){let n=e.getInt32(t.value,!0);return t.value+=4,n}function N(e,t){let n=e.getUint32(t.value,!0);return t.value+=4,n}function Ce(e,t){let n=e[t.value];return t.value+=1,n}function we(e,t){let n=e.getUint8(t.value);return t.value+=1,n}let P=function(e,t){let n=Number(e.getBigInt64(t.value,!0));return t.value+=8,n};function F(e,t){let n=e.getFloat32(t.value,!0);return t.value+=4,n}function Te(e,t){return n.DataUtils.toHalfFloat(F(e,t))}function I(e){let t=(e&31744)>>10,n=e&1023;return(e>>15?-1:1)*(t?t===31?n?NaN:1/0:2**(t-15)*(1+n/1024):n/1024*6103515625e-14)}function L(e,t){let n=e.getUint16(t.value,!0);return t.value+=2,n}function Ee(e,t){return I(L(e,t))}function De(e,t,n,r){let i=n.value,a=[];for(;n.value<i+r-1;){let r=ye(t,n),i=M(e,n),o=we(e,n);n.value+=3;let s=M(e,n),c=M(e,n);a.push({name:r,pixelType:i,pLinear:o,xSampling:s,ySampling:c})}return n.value+=1,a}function Oe(e,t){return{redX:F(e,t),redY:F(e,t),greenX:F(e,t),greenY:F(e,t),blueX:F(e,t),blueY:F(e,t),whiteX:F(e,t),whiteY:F(e,t)}}function ke(e,t){return[`NO_COMPRESSION`,`RLE_COMPRESSION`,`ZIPS_COMPRESSION`,`ZIP_COMPRESSION`,`PIZ_COMPRESSION`,`PXR24_COMPRESSION`,`B44_COMPRESSION`,`B44A_COMPRESSION`,`DWAA_COMPRESSION`,`DWAB_COMPRESSION`][we(e,t)]}function Ae(e,t){return{xMin:M(e,t),yMin:M(e,t),xMax:M(e,t),yMax:M(e,t)}}function je(e,t){return[`INCREASING_Y`,`DECREASING_Y`,`RANDOM_Y`][we(e,t)]}function Me(e,t){return[`ENVMAP_LATLONG`,`ENVMAP_CUBE`][we(e,t)]}function Ne(e,t){let n=[`ONE_LEVEL`,`MIPMAP_LEVELS`,`RIPMAP_LEVELS`],r=[`ROUND_DOWN`,`ROUND_UP`],i=N(e,t),a=N(e,t),o=we(e,t);return{xSize:i,ySize:a,levelMode:n[o&15],roundingMode:r[o>>4]}}function Pe(e,t){return[F(e,t),F(e,t)]}function Fe(e,t){return[F(e,t),F(e,t),F(e,t)]}function Ie(e,t,n,r,i){if(r===`string`||r===`stringvector`||r===`iccProfile`)return be(t,n,i);if(r===`chlist`)return De(e,t,n,i);if(r===`chromaticities`)return Oe(e,n);if(r===`compression`)return ke(e,n);if(r===`box2i`)return Ae(e,n);if(r===`envmap`)return Me(e,n);if(r===`tiledesc`)return Ne(e,n);if(r===`lineOrder`)return je(e,n);if(r===`float`)return F(e,n);if(r===`v2f`)return Pe(e,n);if(r===`v3f`)return Fe(e,n);if(r===`int`)return M(e,n);if(r===`rational`)return xe(e,n);if(r===`timecode`)return Se(e,n);if(r===`preview`||r===`deepImageState`||r===`idmanifest`)return n.value+=i,`skipped`;n.value+=i}function Le(e,t){let n=Math.log2(e);return t==`ROUND_DOWN`?Math.floor(n):Math.ceil(n)}function Re(e,t,n){let r=0;switch(e.levelMode){case`ONE_LEVEL`:r=1;break;case`MIPMAP_LEVELS`:r=Le(Math.max(t,n),e.roundingMode)+1;break;case`RIPMAP_LEVELS`:throw Error(`THREE.EXRLoader: RIPMAP_LEVELS tiles currently unsupported.`)}return r}function ze(e,t,n,r){let i=Array(e);for(let a=0;a<e;a++){let e=1<<a,o=t/e|0;r==`ROUND_UP`&&o*e<t&&(o+=1),i[a]=(Math.max(o,1)+n-1)/n|0}return i}function Be(){let e=this,t=e.offset,n={value:0};for(let r=0;r<e.tileCount;r++){let r=M(e.viewer,t),i=M(e.viewer,t);t.value+=8,e.size=N(e.viewer,t);let a=r*e.blockWidth,o=i*e.blockHeight;e.columns=a+e.blockWidth>e.width?e.width-a:e.blockWidth,e.lines=o+e.blockHeight>e.height?e.height-o:e.blockHeight;let s=e.columns*e.totalBytes,c=e.size<e.lines*s?e.uncompress(e):fe(e);t.value+=e.size;for(let t=0;t<e.lines;t++){let r=t*e.columns*e.totalBytes;for(let i=0;i<e.inputChannels.length;i++){let s=R.channels[i].name,l=e.channelByteOffsets[s]*e.columns,u=e.decodeChannels[s];if(u===void 0)continue;n.value=r+l;let d=(e.height-(1+o+t))*e.outLineWidth;for(let t=0;t<e.columns;t++){let r=d+(t+a)*e.outputChannels+u;e.byteArray[r]=e.getter(c,n)}}}}}function Ve(){let e=this,t=e.offset,n={value:0};for(let r=0;r<e.height/e.blockHeight;r++){let r=M(e.viewer,t)-R.dataWindow.yMin;e.size=N(e.viewer,t),e.lines=r+e.blockHeight>e.height?e.height-r:e.blockHeight;let i=e.columns*e.totalBytes,a=e.size<e.lines*i?e.uncompress(e):fe(e);t.value+=e.size;for(let t=0;t<e.lines;t++){let o=r+t,s=t*i,c=(e.height-1-o)*e.outLineWidth;for(let t=0;t<e.inputChannels.length;t++){let r=R.channels[t].name,i=e.channelByteOffsets[r]*e.columns,o=e.decodeChannels[r];if(o!==void 0){n.value=s+i;for(let t=0;t<e.columns;t++){let r=c+t*e.outputChannels+o;e.byteArray[r]=e.getter(a,n)}}}}}}function He(){let e=this,t=e.chunkOffsets,n={value:0};for(let r=0;r<t.length;r++){let i={value:t[r]};i.value+=4;let a=M(e.viewer,i)-R.dataWindow.yMin;e.size=N(e.viewer,i),e.lines=a+e.blockHeight>e.height?e.height-a:e.blockHeight;let o=e.columns*e.totalBytes,s=e.size<e.lines*o,c=e.offset;e.offset=i;let l=s?e.uncompress(e):fe(e);e.offset=c;for(let t=0;t<e.lines;t++){let r=a+t,i=t*o,s=(e.height-1-r)*e.outLineWidth;for(let t=0;t<e.inputChannels.length;t++){let r=R.channels[t].name,a=e.channelByteOffsets[r]*e.columns,o=e.decodeChannels[r];if(o!==void 0){n.value=i+a;for(let t=0;t<e.columns;t++){let r=s+t*e.outputChannels+o;e.byteArray[r]=e.getter(l,n)}}}}}}function Ue(e,t,n,r){if(n===0)return null;let i=e.slice(t,t+n);switch(r){case`NO_COMPRESSION`:return new DataView(i.buffer,i.byteOffset,i.byteLength);case`RLE_COMPRESSION`:{let e=new Uint8Array(A(i.buffer.slice(i.byteOffset,i.byteOffset+i.byteLength))),t=new Uint8Array(e.length);return O(e),k(e,t),new DataView(t.buffer)}case`ZIPS_COMPRESSION`:{let e=wr(i),t=new Uint8Array(e.length);return O(e),k(e,t),new DataView(t.buffer)}default:throw Error(`THREE.EXRLoader: `+r+` is unsupported for deep data`)}}function We(){let e=this,t=e.chunkOffsets,r=e.width,i=e.height,a=e.deepChannels,o=R.compression,s=e.multiPart,c=e.decodeChannels,l=e.outputChannels,u=e.byteArray instanceof Uint16Array,d=-1;for(let e=0;e<a.length;e++)if(a[e].name===`A`){d=e;break}for(let f=0;f<t.length;f++){let p={value:t[f]};s&&(p.value+=4);let m=M(e.viewer,p)-R.dataWindow.yMin,h=P(e.viewer,p),g=P(e.viewer,p);P(e.viewer,p);let _=Ue(e.array,p.value,h,o);if(p.value+=h,_===null)continue;let v=new Uint32Array(r);for(let e=0;e<r;e++)v[e]=_.getUint32(e*4,!0);let y=v[r-1];if(y===0){p.value+=g;continue}let b=Ue(e.array,p.value,g,o),x=[],S=0;for(let e=0;e<a.length;e++)x.push(S),S+=y*a[e].bytesPerSample;let C=(i-1-m)*e.outLineWidth;for(let t=0;t<r;t++){let r=t===0?0:v[t-1],i=v[t]-r;if(i===0)continue;let o=new Float32Array(l),s=0;for(let e=0;e<i;e++){let t=r+e,n=1-s;if(n<=0)break;let i=1;if(d>=0){let e=a[d].bytesPerSample,n=x[d]+t*e;i=e===2?I(b.getUint16(n,!0)):b.getFloat32(n,!0)}for(let e=0;e<a.length;e++){let r=a[e],i=c[r.name];if(i===void 0)continue;let s=r.bytesPerSample,l=x[e]+t*s,u=s===2?I(b.getUint16(l,!0)):b.getFloat32(l,!0);o[i]+=u*n}s+=i*n}c.A!==void 0&&(o[c.A]=s);let f=C+t*l;for(let t=0;t<l;t++)e.byteArray[f+t]=u?n.DataUtils.toHalfFloat(o[t]):o[t]}}}function Ge(e,t,n){let r={},i=!1;for(;;){let a=ye(t,n);if(a===``)break;i=!0;let o=ye(t,n),s=Ie(e,t,n,o,N(e,n));s===void 0?console.warn(`THREE.EXRLoader: Skipped unknown header attribute type \'${o}\'.`):r[a]=s}return i?r:null}function Ke(e,t,n){if(e.getUint32(0,!0)!=20000630)throw Error(`THREE.EXRLoader: Provided file doesn't appear to be in OpenEXR format.`);let r=e.getUint8(4),i=e.getUint8(5),a={singleTile:!!(i&2),longName:!!(i&4),deepFormat:!!(i&8),multiPart:!!(i&16)};n.value=8;let o=[];if(a.multiPart){for(;;){let i=Ge(e,t,n);if(i===null)break;i.version=r,i.spec=a,o.push(i)}if(o.length===0)throw Error(`THREE.EXRLoader: No valid part headers found.`)}else{let i=Ge(e,t,n);i.version=r,i.spec=a,o.push(i)}return o}function qe(e,t,r,i,a,o){let s={size:0,viewer:t,array:r,offset:i,width:e.dataWindow.xMax-e.dataWindow.xMin+1,height:e.dataWindow.yMax-e.dataWindow.yMin+1,inputChannels:e.channels,channelByteOffsets:{},shouldExpand:!1,yCbCr:!1,totalBytes:null,columns:null,lines:null,type:null,uncompress:null,getter:null,format:null,colorSpace:n.LinearSRGBColorSpace};switch(e.compression){case`NO_COMPRESSION`:s.blockHeight=1,s.uncompress=fe;break;case`RLE_COMPRESSION`:s.blockHeight=1,s.uncompress=pe;break;case`ZIPS_COMPRESSION`:s.blockHeight=1,s.uncompress=me;break;case`ZIP_COMPRESSION`:s.blockHeight=16,s.uncompress=me;break;case`PIZ_COMPRESSION`:s.blockHeight=32,s.uncompress=he;break;case`PXR24_COMPRESSION`:s.blockHeight=16,s.uncompress=ge;break;case`B44_COMPRESSION`:case`B44A_COMPRESSION`:s.blockHeight=32,s.uncompress=_e;break;case`DWAA_COMPRESSION`:s.blockHeight=32,s.uncompress=ve;break;case`DWAB_COMPRESSION`:s.blockHeight=256,s.uncompress=ve;break;default:throw Error(`THREE.EXRLoader: `+e.compression+` is unsupported`)}let c={};for(let t of e.channels)switch(t.name){case`BY`:case`RY`:case`Y`:case`R`:case`G`:case`B`:case`A`:c[t.name]=!0,s.type=t.pixelType}let l=!1,u=!1;if(c.Y&&c.RY&&c.BY)s.outputChannels=4,s.yCbCr=!0;else if(c.R&&c.G&&c.B)s.outputChannels=4;else if(c.Y)s.outputChannels=1;else throw Error(`THREE.EXRLoader: file contains unsupported data channels.`);switch(s.outputChannels){case 4:o==n.RGBAFormat?(l=!c.A,s.format=n.RGBAFormat,s.colorSpace=n.LinearSRGBColorSpace,s.outputChannels=4,s.decodeChannels={R:0,G:1,B:2,A:3}):o==n.RGFormat?(s.format=n.RGFormat,s.colorSpace=n.LinearSRGBColorSpace,s.outputChannels=2,s.decodeChannels={R:0,G:1}):o==n.RedFormat?(s.format=n.RedFormat,s.colorSpace=n.LinearSRGBColorSpace,s.outputChannels=1,s.decodeChannels={R:0}):u=!0;break;case 1:o==n.RGBAFormat?(l=!0,s.format=n.RGBAFormat,s.colorSpace=n.LinearSRGBColorSpace,s.outputChannels=4,s.shouldExpand=!0,s.decodeChannels={Y:0}):o==n.RGFormat?(s.format=n.RGFormat,s.colorSpace=n.LinearSRGBColorSpace,s.outputChannels=2,s.shouldExpand=!0,s.decodeChannels={Y:0}):o==n.RedFormat?(s.format=n.RedFormat,s.colorSpace=n.LinearSRGBColorSpace,s.outputChannels=1,s.decodeChannels={Y:0}):u=!0;break;default:u=!0}if(u)throw Error(`THREE.EXRLoader: invalid output format for specified file.`);if(s.yCbCr&&(s.format=n.RGBAFormat,s.outputChannels=4,s.decodeChannels={Y:0,RY:1,BY:2},l=!0),s.type==1)switch(a){case n.FloatType:s.getter=Ee;break;case n.HalfFloatType:s.getter=L;break}else if(s.type==2)switch(a){case n.FloatType:s.getter=F;break;case n.HalfFloatType:s.getter=Te}else throw Error(`THREE.EXRLoader: unsupported pixelType `+s.type+` for `+e.compression+`.`);s.columns=s.width;let d=s.width*s.height*s.outputChannels;switch(a){case n.FloatType:s.byteArray=new Float32Array(d),l&&s.byteArray.fill(1,0,d);break;case n.HalfFloatType:s.byteArray=new Uint16Array(d),l&&s.byteArray.fill(15360,0,d);break;default:console.error(`THREE.EXRLoader: unsupported type: `,a);break}let f=0;for(let t of e.channels)s.decodeChannels[t.name]!==void 0&&(s.channelByteOffsets[t.name]=f),f+=t.pixelType*2;if(s.totalBytes=f,s.outLineWidth=s.width*s.outputChannels,e.spec.deepFormat){s.deepChannels=[];let t=0;for(let n of e.channels){let e=n.pixelType===0?4:n.pixelType*2;s.deepChannels.push({name:n.name,pixelType:n.pixelType,bytesPerSample:e}),t+=e}s.deepBytesPerSample=t,s.chunkOffsets=e._chunkOffsets,s.multiPart=e.spec.multiPart,s.decode=We.bind(s)}else if(e.spec.singleTile){s.blockHeight=e.tiles.ySize,s.blockWidth=e.tiles.xSize;let n=Re(e.tiles,s.width,s.height),r=ze(n,s.width,e.tiles.xSize,e.tiles.roundingMode),a=ze(n,s.height,e.tiles.ySize,e.tiles.roundingMode);s.tileCount=r[0]*a[0];for(let e=0;e<n;e++)for(let n=0;n<a[e];n++)for(let n=0;n<r[e];n++)P(t,i);s.decode=Be.bind(s)}else if(e.spec.multiPart)s.blockWidth=s.width,s.chunkOffsets=e._chunkOffsets,s.decode=He.bind(s);else{s.blockWidth=s.width;let e=Math.ceil(s.height/s.blockHeight);for(let n=0;n<e;n++)P(t,i);s.decode=Ve.bind(s)}return s}let Je={value:0},Ye=new DataView(e),Xe=new Uint8Array(e),Ze=Ke(Ye,e,Je),Qe=Math.max(0,Math.min(this.part,Ze.length-1)),R=Ze[Qe];if(R.spec.multiPart||R.spec.deepFormat)for(let e=0;e<Ze.length;e++){let t=Ze[e].chunkCount;if(e===Qe){R._chunkOffsets=[];for(let e=0;e<t;e++)R._chunkOffsets.push(P(Ye,Je))}else for(let e=0;e<t;e++)P(Ye,Je)}let z=qe(R,Ye,Xe,Je,this.type,this.outputFormat);if(z.decode(),z.shouldExpand){let e=z.byteArray;if(this.outputFormat==n.RGBAFormat)for(let t=0;t<e.length;t+=4)e[t+2]=e[t+1]=e[t];else if(this.outputFormat==n.RGFormat)for(let t=0;t<e.length;t+=2)e[t+1]=e[t]}if(z.yCbCr){let e=z.byteArray,t=z.width*z.height;if(this.type===n.HalfFloatType)for(let r=0;r<t;r++){let t=r*4,i=I(e[t]),a=I(e[t+1]),o=I(e[t+2]),s=(1+a)*i,c=(1+o)*i,l=(i-s*.2126-c*.0722)/.7152;e[t]=n.DataUtils.toHalfFloat(Math.max(0,s)),e[t+1]=n.DataUtils.toHalfFloat(Math.max(0,l)),e[t+2]=n.DataUtils.toHalfFloat(Math.max(0,c))}else for(let n=0;n<t;n++){let t=n*4,r=e[t],i=e[t+1],a=e[t+2],o=(1+i)*r,s=(1+a)*r;e[t]=Math.max(0,o),e[t+1]=Math.max(0,(r-o*.2126-s*.0722)/.7152),e[t+2]=Math.max(0,s)}}return{header:R,width:z.width,height:z.height,data:z.byteArray,format:z.format,colorSpace:z.colorSpace,type:this.type,minFilter:n.LinearFilter,magFilter:n.LinearFilter,generateMipmaps:!1,flipY:!1}}setDataType(e){return this.type=e,this}setOutputFormat(e){return this.outputFormat=e,this}setPart(e){return this.part=e,this}},Dr=class extends n.DataTextureLoader{constructor(e){super(e),this.type=n.HalfFloatType}parse(e){let t=function(e,t){switch(e){case 1:throw Error(`THREE.HDRLoader: Read Error: `+(t||``));case 2:throw Error(`THREE.HDRLoader: Write Error: `+(t||``));case 3:throw Error(`THREE.HDRLoader: Bad File Format: `+(t||``));default:case 4:throw Error(`THREE.HDRLoader: Memory Error: `+(t||``))}},r=function(e,t,n){t||=1024;let r=e.pos,i=-1,a=0,o=``,s=String.fromCharCode.apply(null,new Uint16Array(e.subarray(r,r+128)));for(;0>(i=s.indexOf(`
|
|
111
|
+
`,zn=e=>{e.onBeforeCompile=e=>{e.fragmentShader=e.fragmentShader.replace(`#include <common>`,`#include <common>\n${Fn}`).replace(`#include <map_fragment>`,In).replace(`#include <normal_fragment_maps>`,Ln).replace(`#include <roughnessmap_fragment>`,Rn)}},Bn=null,Vn=()=>{let e=Mn(jn),t=Pn(Nn(e)),r=new Float32Array(G*G);for(let e=0;e<G;e+=1)for(let n=0;n<G;n+=1)r[e*G+n]=t(n/G,e/G);for(let t=0;t<900;t+=1){let t=Math.floor(e()*G),n=Math.floor(e()*G),i=.12+e()*.2;r[n*G+t]=Math.max(0,r[n*G+t]-i)}let i=(e,t)=>r[(t+G)%G*G+(e+G)%G],a=new n.Color(An),o=new Uint8ClampedArray(G*G*4),s=new Uint8ClampedArray(G*G*4),c=new Uint8ClampedArray(G*G*4),l=2.4;for(let t=0;t<G;t+=1)for(let n=0;n<G;n+=1){let r=(t*G+n)*4,u=i(n,t),d=.91+u*.18+(e()-.5)*.03;o[r]=Math.min(255,a.r*255*d),o[r+1]=Math.min(255,a.g*255*d),o[r+2]=Math.min(255,a.b*255*d),o[r+3]=255;let f=(i(n+1,t)-i(n-1,t))*l,p=(i(n,t+1)-i(n,t-1))*l,m=1/Math.hypot(f,p,1);s[r]=(-f*m*.5+.5)*255,s[r+1]=(-p*m*.5+.5)*255,s[r+2]=(m*.5+.5)*255,s[r+3]=255;let h=(.86+u*.12)*255;c[r]=h,c[r+1]=h,c[r+2]=h,c[r+3]=255}return{albedo:o,normal:s,roughness:c}},Hn=class{constructor(){this.name=`Concrete Disc`}createGrid(e){let t=new n.Group,r=Math.max(e.size||1,1),i=Math.min(r*Dn,On),a=e=>{let t=new n.MeshStandardMaterial({color:An,roughness:.95,metalness:0,transparent:e,vertexColors:!0});return zn(t),t},o=[a(!1),a(!0)];e.styleOptions?.texture?this.applyPhotoMaps(o,i,e.styleOptions):this.applyProceduralMaps(o,i);let s=i*kn,c=new n.Mesh(this.createGroundGeometry(i,0,s),o[0]);c.rotation.x=-Math.PI/2,c.receiveShadow=!0,t.add(c);let l=new n.Mesh(this.createGroundGeometry(i,s,i),o[1]);return l.rotation.x=-Math.PI/2,l.receiveShadow=!0,l.renderOrder=-1,t.add(l),t.add(vn(r*1.5)),t}applyPhotoMaps(e,t,r){let i=new n.TextureLoader,a=t*2/Tn(t,wn),o=!1,s=()=>{if(!o&&(o=!0,!e.every(e=>e.userData.softboxDisposed))){for(let t of e)t.map?.dispose(),t.normalMap?.dispose(),t.roughnessMap?.dispose(),t.map=null,t.normalMap=null,t.roughnessMap=null,t.color=new n.Color(An),t.roughness=.95,t.needsUpdate=!0;this.applyProceduralMaps(e,t)}},c=(e,t)=>{let r=i.load(e,void 0,void 0,s);return r.wrapS=n.RepeatWrapping,r.wrapT=n.RepeatWrapping,r.repeat.set(a,a),r.anisotropy=4,t&&(r.colorSpace=n.SRGBColorSpace),r},l=c(r.texture,!0),u=r.normalMap?c(r.normalMap,!1):null,d=r.roughnessMap?c(r.roughnessMap,!1):null;for(let t of e)t.map=l,u&&(t.normalMap=u,t.normalScale=new n.Vector2(.9,.9)),d&&(t.roughnessMap=d),t.color=En.clone(),t.roughness=1}applyProceduralMaps(e,t){let r=this.createConcretePbrMaps();if(!r)return;let i=t*2/Tn(t,Cn);for(let e of[r.map,r.normalMap,r.roughnessMap])e.repeat.set(i,i);for(let t of e)t.map=r.map,t.normalMap=r.normalMap,t.normalScale=new n.Vector2(.6,.6),t.roughnessMap=r.roughnessMap,t.color=new n.Color(`#ffffff`),t.roughness=1}createGroundGeometry(t,r,i){let a=new n.RingGeometry(r,i,128,32),o=Nn(Mn(-1059407513)),s=a.getAttribute(`position`),c=new Float32Array(s.count*4);for(let n=0;n<s.count;n+=1){let r=s.getX(n),i=s.getY(n),a=Math.hypot(r,i)/t,l=a<=kn?1:1-e.t(Math.min((a-kn)/(1-kn),1)),u=r/(t*2)+.5,d=i/(t*2)+.5,f=.9+(.6*o(u,d,4)+.4*o(u,d,32))*.2;c[n*4]=f,c[n*4+1]=f,c[n*4+2]=f,c[n*4+3]=l}return a.setAttribute(`color`,new n.BufferAttribute(c,4)),a}createConcretePbrMaps(){if(typeof document>`u`)return null;let e=[],t=[];for(let n=0;n<3;n+=1){let n=document.createElement(`canvas`);n.width=G,n.height=G;let r=n.getContext(`2d`);if(!r)return null;e.push(n),t.push(r)}Bn??=Vn();let r=[Bn.albedo,Bn.normal,Bn.roughness];t.forEach((e,t)=>{let n=e.createImageData(G,G);n.data.set(r[t]),e.putImageData(n,0,0)});let[i,a,o]=e.map(e=>{let t=new n.CanvasTexture(e);return t.wrapS=n.RepeatWrapping,t.wrapT=n.RepeatWrapping,t.anisotropy=4,t});return i.colorSpace=n.SRGBColorSpace,{map:i,normalMap:a,roughnessMap:o}}dispose(){}},Un=class{static{this.gridStyles=new Map([[pn.SHADOW_FLOOR,new Sn],[pn.CONCRETE_DISC,new Hn],[pn.SQUARE_WIRE,new mn],[pn.HEXAGONAL_WIRE,new hn],[pn.HEXAGONAL_GLASS,new bn],[pn.STONE_TILES,new xn]])}static createGrid(e,t){let n=this.gridStyles.get(e);if(!n){console.warn(`Unknown grid type: ${e}, falling back to square wire grid`);let n=this.gridStyles.get(pn.SQUARE_WIRE);if(!n)throw Error(`Square wire grid style not found`);return n.createGrid(t)}let r=n.createGrid(t);return r.name=`Grid_${e}`,r}static registerGridStyle(e,t){this.gridStyles.set(e,t)}static getAvailableTypes(){return Array.from(this.gridStyles.keys())}static disposeGridStyle(e){let t=this.gridStyles.get(e);t&&t.dispose&&t.dispose()}};function Wn(t,r){try{let i=e.o(t);if(!i)return e.N.err(new e.F(`Scene must be ThreeSceneAdapter`,e.P.INVALID_PARAMETER));if(r.grid){let e=i.userData,t=typeof r.grid==`object`?r.grid:null,n={enabled:!0,color:t?.colorGrid||r.gridColor||`#AAAAAA`,type:t?.type?t.type:pn.HEXAGONAL_GLASS,opacity:t?.opacity,styleOptions:t?.styleOptions};if(i.userData={...e,gridOptions:n},t?.size||t?.divisions){let e=n.type||pn.HEXAGONAL_GLASS,r=t.size||10,a=t.divisions||10,o={size:r,divisions:a,color:n.color,opacity:n.opacity,styleOptions:{hexRadius:Math.floor(a/2),tileSize:1,...n.styleOptions}},s=Un.createGrid(e,o);s.userData.isGrid=!0,s.userData.isDefaultGrid=!0,i.add(s)}}if(r.axes){let e=r.axesSize||5,t=new n.AxesHelper(e);i.add(t)}return e.N.ok(void 0)}catch(t){return e.N.err(new e.F(`Failed to add helpers to scene`,e.P.SCENE_OPERATION_FAILED,{originalError:t,options:r}))}}function Gn(t,r,i=1.2){try{let a=e.o(t);if(!a)return e.N.err(new e.F(`Scene must be ThreeSceneAdapter`,e.P.INVALID_PARAMETER));let o=a.userData?.gridOptions;if(!o?.enabled)return e.N.ok(void 0);let s=[];a.traverse(e=>{(e.userData?.isGrid||e.userData?.isHexGrid||e.userData?.isDefaultGrid)&&s.push(e)}),s.forEach(t=>{e.v(t),a.remove(t)});let c=e.i(r);if(!c)return e.N.err(new e.F(`Object must expose a Three.js Object3D`,e.P.INVALID_PARAMETER));let l=new n.Box3().setFromObject(c),u=l.getSize(new n.Vector3);if(l.isEmpty()||!Number.isFinite(u.x)||!Number.isFinite(u.z))return console.warn(`Skipping dynamic grid: object has an empty or non-finite bounding box`),e.N.ok(void 0);let d=o.styleOptions?.tileSize,f=typeof d==`number`?d:1,p=gn.getGridSpacing(f).width,m=Math.max(u.x,u.z)*i+u.y,h=m<=p?0:Math.ceil((m/p-1)/2);h>60&&(console.warn(`Dynamic grid would need ${h} rings to cover the object; capping at 60. The floor will not fully reach the configured coverage for this tileSize/object-size combination.`),h=60),m<p*.8?h=0:h<3&&m>p*2&&(h=3);let g=o.type||pn.HEXAGONAL_GLASS,_={size:Math.max(u.x,u.z)*i,divisions:h*2+1,color:o.color,opacity:o.opacity,styleOptions:{hexRadius:h,tileSize:f,...o.styleOptions}},v=Un.createGrid(g,_);v.userData.isGrid=!0,v.userData.isHexGrid=!0;let y=n.MathUtils.clamp(u.y*.0025,2e-4,.002),b=v.getObjectByName(e.u);b&&(b.position.y=y),v.traverse(e=>{e.userData?.softboxPathTracingFloor&&(e.position.y=y)});let x=l.getCenter(new n.Vector3);return v.position.set(x.x,0,x.z),a.add(v),e.N.ok(void 0)}catch(t){return e.N.err(new e.F(`Failed to add dynamic grid`,e.P.SCENE_OPERATION_FAILED,{originalError:t}))}}function Kn(t,r){try{let i=e.o(t);if(!i)return e.N.err(new e.F(`Scene must be ThreeSceneAdapter`,e.P.INVALID_PARAMETER));let a=e.i(r);if(!a)return e.N.err(new e.F(`Object must expose a Three.js Object3D`,e.P.INVALID_PARAMETER));let o=e=>{let t=e;for(;t;){if(t.userData?.isGrid||t.userData?.isHexGrid||t.userData?.isDefaultGrid)return!0;t=t.parent}return!1};i.updateMatrixWorld(!0);let s=[];i.traverse(e=>{e.userData?.softboxPathTracingFloor||e.isMesh&&o(e)&&s.push(e)});let c=[];if(a.traverse(e=>{e.isMesh&&c.push(e)}),s.length===0||c.length===0)return e.N.ok(void 0);let l=-1/0,u=new n.Box3;for(let e of s)u.setFromObject(e),Number.isFinite(u.max.y)&&(l=Math.max(l,u.max.y));if(!Number.isFinite(l))return e.N.ok(void 0);let d=new n.Box3().setFromObject(a);if(d.isEmpty()||!Number.isFinite(d.min.x)||!Number.isFinite(d.max.x))return e.N.ok(void 0);let f=Math.max(1,d.max.y-d.min.y),p=d.max.y+f,m=d.min.y-f,h=new n.Raycaster,g=new n.Vector3(0,-1,0),_=new n.Vector3(0,1,0),v=1/0,y=(e,t,r,i)=>{h.set(new n.Vector3(e,t,r),i);for(let e of h.intersectObjects(c,!1))e.point.y<v&&(v=e.point.y)};for(let e=0;e<=40;e++)for(let t=0;t<=40;t++){let n=d.min.x+(d.max.x-d.min.x)*(e/40),r=d.min.z+(d.max.z-d.min.z)*(t/40);y(n,p,r,g),y(n,m,r,_)}if(Number.isFinite(v)){let e=v-l;Math.abs(e)>1e-4&&(a.position.y-=e)}return e.N.ok(void 0)}catch(t){return e.N.err(new e.F(`Failed to snap object to floor`,e.P.SCENE_OPERATION_FAILED,{originalError:t}))}}var qn=e=>{let t=null;return e.traverse(e=>{!t&&e.isDirectionalLight&&(t=e)}),t};function Jn(t,r){try{let i=e.o(t);if(!i)return e.N.err(new e.F(`Scene must be ThreeSceneAdapter`,e.P.INVALID_PARAMETER));let a=e.i(r);if(!a)return e.N.err(new e.F(`Object must expose a Three.js Object3D`,e.P.INVALID_PARAMETER));let o=new n.Box3().setFromObject(a);if(o.isEmpty()||!Number.isFinite(o.min.x)||!Number.isFinite(o.max.x))return e.N.ok(void 0);let s=o.getSize(new n.Vector3),c=o.getCenter(new n.Vector3),l=qn(i);if(!l||!l.castShadow)return e.N.ok(void 0);if(l.parent===i&&l.target.parent===i){let e=l.position.clone().sub(l.target.position);l.target.position.copy(c),l.position.copy(c).add(e)}let u=Math.max(s.x,s.y,s.z,.1)*2,d=l.shadow.camera;d.left=-u,d.right=u,d.top=u,d.bottom=-u;let f=l.getWorldPosition(new n.Vector3),p=l.target.getWorldPosition(new n.Vector3).sub(f).normalize(),m=c.clone().sub(f).dot(p),h=u*2;return d.near=Math.max(m-h,m*.01),d.far=m+h,d.updateProjectionMatrix(),e.N.ok(void 0)}catch(t){return e.N.err(new e.F(`Failed to fit shadow camera to object`,e.P.SCENE_OPERATION_FAILED,{originalError:t}))}}function Yn(t,n,r,i){try{let a=e.o(t);if(!a)return e.N.err(new e.F(`Scene must be ThreeSceneAdapter`,e.P.INVALID_PARAMETER));let o=e.i(n);if(!o)return e.N.err(new e.F(`Object must expose a Three.js Object3D`,e.P.INVALID_PARAMETER));let s=e.a(r);if(!s||!s.shadowMap.enabled)return e.N.ok(void 0);let c=qn(a);return!c||!c.castShadow||i.bake({renderer:s,scene:a,object:o,light:c}),e.N.ok(void 0)}catch(t){return e.N.err(new e.F(`Failed to bake contact shadow`,e.P.SCENE_OPERATION_FAILED,{originalError:t}))}}function Xn(t){try{let n=e.o(t);return n?(e.p(n),e.N.ok(void 0)):e.N.err(new e.F(`Scene must be ThreeSceneAdapter`,e.P.INVALID_PARAMETER))}catch(t){return e.N.err(new e.F(`Failed to reset the contact shadow`,e.P.SCENE_OPERATION_FAILED,{originalError:t}))}}function Zn(t,n){try{let r=e.o(t);if(!r)return e.N.err(new e.F(`Scene must be ThreeSceneAdapter`,e.P.INVALID_PARAMETER));let i=r.getObjectByName(e.c),a=r.getObjectByName(e.u);return n===`baked`&&!i?e.N.ok(void 0):(i&&(i.visible=n===`baked`),a&&(a.visible=n===`live`),e.N.ok(void 0))}catch(t){return e.N.err(new e.F(`Failed to switch contact shadow mode`,e.P.SCENE_OPERATION_FAILED,{originalError:t}))}}function Qn(t,r){try{let i=e.i(t);if(!i)return e.N.err(new e.F(`Object must expose a Three.js Object3D`,e.P.INVALID_PARAMETER));let a=new n.Group;return a.name=e.A,a.scale.setScalar(r),a.add(i),e.N.ok(new k(a))}catch(t){return e.N.err(new e.F(`Failed to apply the units scale to the model`,e.P.SCENE_OPERATION_FAILED,{originalError:t}))}}function $n(t,r){try{let i=e.o(t);if(!i)return e.N.err(new e.F(`Scene must be ThreeSceneAdapter`,e.P.INVALID_PARAMETER));if(r.ambient){let e=new n.Color(r.ambient.color||`#404040`),t=r.ambient.intensity??Math.PI,a=new n.AmbientLight(e,t);i.add(a)}if(r.hemisphere){let e=new n.Color(r.hemisphere.skyColor||`#ffffbb`),t=new n.Color(r.hemisphere.groundColor||`#080820`),a=r.hemisphere.intensity??1,o=new n.HemisphereLight(e,t,a);i.add(o)}if(r.directional){let e=new n.Color(r.directional.color||`#ffffff`),t=r.directional.intensity??Math.PI,a=new n.DirectionalLight(e,t);if(r.directional.position){let e=r.directional.position;if(e instanceof n.Vector3)a.position.copy(e);else if(Array.isArray(e))a.position.set(e[0],e[1],e[2]);else if(typeof e==`object`&&`x`in e&&`y`in e&&`z`in e){let t=e;a.position.set(t.x,t.y,t.z)}}else a.position.set(6,6,6);if(r.directional.castShadow&&(a.castShadow=!0,r.directional.shadow)){let e=r.directional.shadow;if(e.mapSize&&(a.shadow.mapSize.width=e.mapSize.width,a.shadow.mapSize.height=e.mapSize.height),e.camera){let t=a.shadow.camera;e.camera.near!==void 0&&(t.near=e.camera.near),e.camera.far!==void 0&&(t.far=e.camera.far),e.camera.left!==void 0&&(t.left=e.camera.left),e.camera.right!==void 0&&(t.right=e.camera.right),e.camera.top!==void 0&&(t.top=e.camera.top),e.camera.bottom!==void 0&&(t.bottom=e.camera.bottom)}e.bias!==void 0&&(a.shadow.bias=e.bias),e.normalBias!==void 0&&(a.shadow.normalBias=e.normalBias),e.radius!==void 0&&(a.shadow.radius=e.radius)}a.target.position.set(0,0,0),i.add(a),i.add(a.target),a.shadow&&a.shadow.camera.updateProjectionMatrix()}let a=(e,t)=>{let r=new n.DirectionalLight(new n.Color(e.color||`#ffffff`),e.intensity??1),a=e.position??t;r.position.set(a[0],a[1],a[2]),r.target.position.set(0,0,0),i.add(r),i.add(r.target)};return r.fill&&a(r.fill,[-60,30,30]),r.rim&&a(r.rim,[20,50,-70]),e.N.ok(void 0)}catch(t){return e.N.err(new e.F(`Failed to add lighting to scene`,e.P.SCENE_OPERATION_FAILED,{originalError:t,options:r}))}}function er(t,r){try{let i=e.o(t);if(!i)return e.N.err(new e.F(`Scene must be ThreeSceneAdapter`,e.P.INVALID_PARAMETER));let a=document.createElement(`canvas`);a.width=r.radial?512:2,a.height=512;let o=a.getContext(`2d`);if(!o)return e.N.err(new e.F(`Failed to create canvas context`,e.P.SCENE_OPERATION_FAILED));let s=r.radial?o.createRadialGradient(256,205,0,256,256,380):o.createLinearGradient(0,0,0,a.height);s.addColorStop(0,r.topColor),s.addColorStop(1,r.bottomColor),o.fillStyle=s,o.fillRect(0,0,a.width,a.height);let c=new n.CanvasTexture(a);return c.needsUpdate=!0,se(c),ce(i),i.background=c,e.N.ok(void 0)}catch(t){return e.N.err(new e.F(`Failed to create gradient background`,e.P.SCENE_OPERATION_FAILED,{originalError:t,options:r}))}}function tr(t,r,i){try{let a=e.i(t);if(!a)return e.N.err(new e.F(`Object must expose a Three.js Object3D`,e.P.INVALID_PARAMETER));let o=e.n(r);if(!(o instanceof n.PerspectiveCamera)&&!(o instanceof n.OrthographicCamera))return e.N.err(new e.F(`Camera must expose a perspective or orthographic Three.js camera`,e.P.INVALID_PARAMETER));let s=e.r(i);if(!s)return e.N.err(new e.F(`Controls must expose the underlying Three.js controls`,e.P.INVALID_PARAMETER));let c=new n.Box3().setFromObject(a),l=c.getCenter(new n.Vector3),u=c.getSize(new n.Vector3),d=Math.max(u.x,u.y,u.z),f;f=`fov`in o?o.fov*(Math.PI/180):Math.PI/180*50;let p=Math.abs(d/2/Math.tan(f/2));p*=1.65;let m=-Math.PI/4,h=Math.PI/8,g=l.x+p*Math.sin(m)*Math.cos(h),_=l.y+p*Math.sin(h),v=l.z+p*Math.cos(m)*Math.cos(h);return o.position.set(g,_,v),o.lookAt(l),o.updateProjectionMatrix(),s.target&&(s.target.copy(l),s.update()),e.N.ok(void 0)}catch(t){return e.N.err(new e.F(`Failed to fit camera to object`,e.P.CAMERA_INIT_FAILED,{originalError:t}))}}var nr=class{constructor(){this.contactShadowBaker=new e.d}addHelpers(e,t){return Wn(e,t)}addDynamicGrid(e,t,n=1.2){return Gn(e,t,n)}snapObjectToFloor(e,t){return Kn(e,t)}fitShadowCameraToObject(e,t){return Jn(e,t)}bakeContactShadow(e,t,n){return Yn(e,t,n,this.contactShadowBaker)}resetContactShadow(e){return Xn(e)}setContactShadowMode(e,t){return Zn(e,t)}wrapInUnitsScaleGroup(e,t){return Qn(e,t)}async applyMaterialVariant(t,n){let r=e.i(t);return r?(await kt(r),e.N.ok(Mt(r,n))):e.N.err(new e.F(`Model must expose a Three.js Object3D`,e.P.INVALID_PARAMETER))}addLighting(e,t){return $n(e,t)}createGradientBackground(e,t){return er(e,t)}fitCameraToObject(e,t,n){return tr(e,t,n)}},rr=class{constructor(){this.events=new e.M,this.disposed=!1}async initialize(t){let n;try{({ThreePathTracingService:n}=await Promise.resolve().then(()=>require("./ThreePathTracingService-CamzPwtW.cjs")))}catch(t){return e.N.err(new e.F(`Failed to load the path-tracing chunk`,e.P.PATH_TRACING_INIT_FAILED,{originalError:t}))}if(this.disposed)return e.N.ok(void 0);let r=new n;return this.inner=r,r.events.on(`pathtracing:paused`,e=>{this.events.emit(`pathtracing:paused`,e)}),this.pendingSettings&&=(r.updateSettings(this.pendingSettings),void 0),this.pendingEnabled!==void 0&&(r.setEnabled(this.pendingEnabled),this.pendingEnabled=void 0),r.initialize(t)}setEnabled(e){this.inner?this.inner.setEnabled(e):this.pendingEnabled=e}updateSettings(e){this.inner?this.inner.updateSettings(e):this.pendingSettings={...this.pendingSettings,...e}}render(t,n){return this.inner?this.inner.render(t,n):Promise.resolve(e.N.ok(void 0))}getSampleCount(){return this.inner?.getSampleCount()??0}isEnabled(){return this.inner?.isEnabled()??!1}isPathTracerDisposed(){return this.inner?.isPathTracerDisposed()??!1}canResume(){return this.inner?.canResume()??!1}reset(e){this.inner?.reset(e)}dispose(){this.disposed=!0,this.inner?.dispose()}isSupported(){return this.inner?.isSupported()??!0}},K=Uint8Array,ir=Uint16Array,ar=Int32Array,or=new K([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),sr=new K([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),cr=new K([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),lr=function(e,t){for(var n=new ir(31),r=0;r<31;++r)n[r]=t+=1<<e[r-1];for(var i=new ar(n[30]),r=1;r<30;++r)for(var a=n[r];a<n[r+1];++a)i[a]=a-n[r]<<5|r;return{b:n,r:i}},ur=lr(or,2),dr=ur.b,fr=ur.r;dr[28]=258,fr[258]=28;var pr=lr(sr,0),mr=pr.b;pr.r;for(var hr=new ir(32768),q=0;q<32768;++q){var gr=(q&43690)>>1|(q&21845)<<1;gr=(gr&52428)>>2|(gr&13107)<<2,gr=(gr&61680)>>4|(gr&3855)<<4,hr[q]=((gr&65280)>>8|(gr&255)<<8)>>1}for(var _r=(function(e,t,n){for(var r=e.length,i=0,a=new ir(t);i<r;++i)e[i]&&++a[e[i]-1];var o=new ir(t);for(i=1;i<t;++i)o[i]=o[i-1]+a[i-1]<<1;var s;if(n){s=new ir(1<<t);var c=15-t;for(i=0;i<r;++i)if(e[i])for(var l=i<<4|e[i],u=t-e[i],d=o[e[i]-1]++<<u,f=d|(1<<u)-1;d<=f;++d)s[hr[d]>>c]=l}else for(s=new ir(r),i=0;i<r;++i)e[i]&&(s[i]=hr[o[e[i]-1]++]>>15-e[i]);return s}),vr=new K(288),q=0;q<144;++q)vr[q]=8;for(var q=144;q<256;++q)vr[q]=9;for(var q=256;q<280;++q)vr[q]=7;for(var q=280;q<288;++q)vr[q]=8;for(var yr=new K(32),q=0;q<32;++q)yr[q]=5;var br=_r(vr,9,1),xr=_r(yr,5,1),Sr=function(e){for(var t=e[0],n=1;n<e.length;++n)e[n]>t&&(t=e[n]);return t},J=function(e,t,n){var r=t/8|0;return(e[r]|e[r+1]<<8)>>(t&7)&n},Cr=function(e,t){var n=t/8|0;return(e[n]|e[n+1]<<8|e[n+2]<<16)>>(t&7)},wr=function(e){return(e+7)/8|0},Tr=function(e,t,n){return(t==null||t<0)&&(t=0),(n==null||n>e.length)&&(n=e.length),new K(e.subarray(t,n))},Er=[`unexpected EOF`,`invalid block type`,`invalid length/literal`,`invalid distance`,`stream finished`,`no stream handler`,,`no callback`,`invalid UTF-8 data`,`extra field too long`,`date not in range 1980-2099`,`filename too long`,`stream finishing`,`invalid zip data`],Y=function(e,t,n){var r=Error(t||Er[e]);if(r.code=e,Error.captureStackTrace&&Error.captureStackTrace(r,Y),!n)throw r;return r},Dr=function(e,t,n,r){var i=e.length,a=r?r.length:0;if(!i||t.f&&!t.l)return n||new K(0);var o=!n,s=o||t.i!=2,c=t.i;o&&(n=new K(i*3));var l=function(e){var t=n.length;if(e>t){var r=new K(Math.max(t*2,e));r.set(n),n=r}},u=t.f||0,d=t.p||0,f=t.b||0,p=t.l,m=t.d,h=t.m,g=t.n,_=i*8;do{if(!p){u=J(e,d,1);var v=J(e,d+1,3);if(d+=3,!v){var y=wr(d)+4,b=e[y-4]|e[y-3]<<8,x=y+b;if(x>i){c&&Y(0);break}s&&l(f+b),n.set(e.subarray(y,x),f),t.b=f+=b,t.p=d=x*8,t.f=u;continue}else if(v==1)p=br,m=xr,h=9,g=5;else if(v==2){var S=J(e,d,31)+257,ee=J(e,d+10,15)+4,te=S+J(e,d+5,31)+1;d+=14;for(var C=new K(te),w=new K(19),T=0;T<ee;++T)w[cr[T]]=J(e,d+T*3,7);d+=ee*3;for(var E=Sr(w),ne=(1<<E)-1,re=_r(w,E,1),T=0;T<te;){var ie=re[J(e,d,ne)];d+=ie&15;var y=ie>>4;if(y<16)C[T++]=y;else{var ae=0,D=0;for(y==16?(D=3+J(e,d,3),d+=2,ae=C[T-1]):y==17?(D=3+J(e,d,7),d+=3):y==18&&(D=11+J(e,d,127),d+=7);D--;)C[T++]=ae}}var O=C.subarray(0,S),k=C.subarray(S);h=Sr(O),g=Sr(k),p=_r(O,h,1),m=_r(k,g,1)}else Y(1);if(d>_){c&&Y(0);break}}s&&l(f+131072);for(var oe=(1<<h)-1,se=(1<<g)-1,ce=d;;ce=d){var ae=p[Cr(e,d)&oe],A=ae>>4;if(d+=ae&15,d>_){c&&Y(0);break}if(ae||Y(2),A<256)n[f++]=A;else if(A==256){ce=d,p=null;break}else{var le=A-254;if(A>264){var T=A-257,ue=or[T];le=J(e,d,(1<<ue)-1)+dr[T],d+=ue}var de=m[Cr(e,d)&se],fe=de>>4;de||Y(3),d+=de&15;var k=mr[fe];if(fe>3){var ue=sr[fe];k+=Cr(e,d)&(1<<ue)-1,d+=ue}if(d>_){c&&Y(0);break}s&&l(f+131072);var pe=f+le;if(f<k){var me=a-k,he=Math.min(k,pe);for(me+f<0&&Y(3);f<he;++f)n[f]=r[me+f]}for(;f<pe;++f)n[f]=n[f-k]}}t.l=p,t.p=ce,t.b=f,t.f=u,p&&(u=1,t.m=h,t.d=m,t.n=g)}while(!u);return f!=n.length&&o?Tr(n,0,f):n.subarray(0,f)},Or=new K(0),kr=function(e,t){return((e[0]&15)!=8||e[0]>>4>7||(e[0]<<8|e[1])%31)&&Y(6,`invalid zlib data`),(e[1]>>5&1)==+!t&&Y(6,`invalid zlib data: `+(e[1]&32?`need`:`unexpected`)+` dictionary`),(e[1]>>3&4)+2};function Ar(e,t){return Dr(e.subarray(kr(e,t&&t.dictionary),-4),{i:2},t&&t.out,t&&t.dictionary)}var jr=typeof TextDecoder<`u`&&new TextDecoder;try{jr.decode(Or,{stream:!0})}catch{}var Mr=class extends n.DataTextureLoader{constructor(e){super(e),this.type=n.HalfFloatType,this.outputFormat=n.RGBAFormat,this.part=0}parse(e){let t=65536,r=8192,i=65537,a=16384,o=a-1,s=65535,c=2.7182818**2.2,l=null;function u(e,n){let r=0;for(let i=0;i<t;++i)(i==0||e[i>>3]&1<<(i&7))&&(n[r++]=i);let i=r-1;for(;r<t;)n[r++]=0;return i}function d(e){for(let t=0;t<a;t++)e[t]={},e[t].len=0,e[t].lit=0,e[t].p=null}let f={l:0,c:0,lc:0};function p(e,t,n,r,i){for(;n<e;)t=t<<8|we(r,i),n+=8;n-=e,f.l=t>>n&(1<<e)-1,f.c=t,f.lc=n}let m=Array(59);function h(e){for(let e=0;e<=58;++e)m[e]=0;for(let t=0;t<i;++t)m[e[t]]+=1;let t=0;for(let e=58;e>0;--e){let n=t+m[e]>>1;m[e]=t,t=n}for(let t=0;t<i;++t){let n=e[t];n>0&&(e[t]=n|m[n]++<<6)}}function g(e,t,n,r,i,a){let o=t,s=0,c=0;for(;r<=i;r++){if(o.value-t.value>n)return!1;p(6,s,c,e,o);let l=f.l;if(s=f.c,c=f.lc,a[r]=l,l==63){if(o.value-t.value>n)throw Error(`THREE.EXRLoader: Something wrong with hufUnpackEncTable`);p(8,s,c,e,o);let l=f.l+6;if(s=f.c,c=f.lc,r+l>i+1)throw Error(`THREE.EXRLoader: Something wrong with hufUnpackEncTable`);for(;l--;)a[r++]=0;r--}else if(l>=59){let e=l-59+2;if(r+e>i+1)throw Error(`THREE.EXRLoader: Something wrong with hufUnpackEncTable`);for(;e--;)a[r++]=0;r--}}h(a)}function _(e){return e&63}function v(e){return e>>6}function y(e,t,n,r){for(;t<=n;t++){let n=v(e[t]),i=_(e[t]);if(n>>i)throw Error(`THREE.EXRLoader: Invalid table entry`);if(i>14){let e=r[n>>i-14];if(e.len)throw Error(`THREE.EXRLoader: Invalid table entry`);if(e.lit++,e.p){let t=e.p;e.p=Array(e.lit);for(let n=0;n<e.lit-1;++n)e.p[n]=t[n]}else e.p=[,];e.p[e.lit-1]=t}else if(i){let e=0;for(let a=1<<14-i;a>0;a--){let a=r[(n<<14-i)+e];if(a.len||a.p)throw Error(`THREE.EXRLoader: Invalid table entry`);a.len=i,a.lit=t,e++}}}return!0}let b={c:0,lc:0};function x(e,t,n,r){e=e<<8|we(n,r),t+=8,b.c=e,b.lc=t}let S={c:0,lc:0};function ee(e,t,n,r,i,a,o,s,c){if(e==t){r<8&&(x(n,r,i,a),n=b.c,r=b.lc),r-=8;let e=n>>r;if(e=new Uint8Array([e])[0],s.value+e>c)return!1;let t=o[s.value-1];for(;e-->0;)o[s.value++]=t}else if(s.value<c)o[s.value++]=e;else return!1;S.c=n,S.lc=r}function te(e){return e&65535}function C(e){let t=te(e);return t>32767?t-65536:t}let w={a:0,b:0};function T(e,t){let n=C(e),r=C(t),i=n+(r&1)+(r>>1),a=i,o=i-r;w.a=a,w.b=o}function E(e,t){let n=te(e),r=te(t),i=n-(r>>1)&s,a=r+i-32768&s;w.a=a,w.b=i}function ne(e,t,n,r,i,a,o){let s=o<16384,c=n>i?i:n,l=1,u,d;for(;l<=c;)l<<=1;for(l>>=1,u=l,l>>=1;l>=1;){d=0;let o=d+a*(i-u),c=a*l,f=a*u,p=r*l,m=r*u,h,g,_,v;for(;d<=o;d+=f){let i=d,a=d+r*(n-u);for(;i<=a;i+=m){let n=i+p,r=i+c,a=r+p;s?(T(e[i+t],e[r+t]),h=w.a,_=w.b,T(e[n+t],e[a+t]),g=w.a,v=w.b,T(h,g),e[i+t]=w.a,e[n+t]=w.b,T(_,v),e[r+t]=w.a,e[a+t]=w.b):(E(e[i+t],e[r+t]),h=w.a,_=w.b,E(e[n+t],e[a+t]),g=w.a,v=w.b,E(h,g),e[i+t]=w.a,e[n+t]=w.b,E(_,v),e[r+t]=w.a,e[a+t]=w.b)}if(n&l){let n=i+c;s?T(e[i+t],e[n+t]):E(e[i+t],e[n+t]),h=w.a,e[n+t]=w.b,e[i+t]=h}}if(i&l){let i=d,a=d+r*(n-u);for(;i<=a;i+=m){let n=i+p;s?T(e[i+t],e[n+t]):E(e[i+t],e[n+t]),h=w.a,e[n+t]=w.b,e[i+t]=h}}u=l,l>>=1}return d}function re(e,t,n,r,i,a,s,c,l){let u=0,d=0,f=s,p=Math.trunc(r.value+(i+7)/8);for(;r.value<p;)for(x(u,d,n,r),u=b.c,d=b.lc;d>=14;){let i=t[u>>d-14&o];if(i.len)d-=i.len,ee(i.lit,a,u,d,n,r,c,l,f),u=S.c,d=S.lc;else{if(!i.p)throw Error(`THREE.EXRLoader: hufDecode issues`);let t;for(t=0;t<i.lit;t++){let o=_(e[i.p[t]]);for(;d<o&&r.value<p;)x(u,d,n,r),u=b.c,d=b.lc;if(d>=o&&v(e[i.p[t]])==(u>>d-o&(1<<o)-1)){d-=o,ee(i.p[t],a,u,d,n,r,c,l,f),u=S.c,d=S.lc;break}}if(t==i.lit)throw Error(`THREE.EXRLoader: hufDecode issues`)}}let m=8-i&7;for(u>>=m,d-=m;d>0;){let e=t[u<<14-d&o];if(e.len)d-=e.len,ee(e.lit,a,u,d,n,r,c,l,f),u=S.c,d=S.lc;else throw Error(`THREE.EXRLoader: hufDecode issues`)}return!0}function ie(e,t,n,r,o,s){let c={value:0},l=n.value,u=M(t,n),f=M(t,n);n.value+=4;let p=M(t,n);if(n.value+=4,u<0||u>=i||f<0||f>=i)throw Error(`THREE.EXRLoader: Something wrong with HUF_ENCSIZE`);let m=Array(i),h=Array(a);if(d(h),g(e,n,r-(n.value-l),u,f,m),p>8*(r-(n.value-l)))throw Error(`THREE.EXRLoader: Something wrong with hufUncompress`);y(m,u,f,h),re(m,h,e,n,p,f,s,o,c)}function ae(e,t,n){for(let r=0;r<n;++r)t[r]=e[t[r]]}function D(e){for(let t=1;t<e.length;t++)e[t]=e[t-1]+e[t]-128}function O(e,t){let n=0,r=Math.floor((e.length+1)/2),i=0,a=e.length-1;for(;!(i>a||(t[i++]=e[n++],i>a));)t[i++]=e[r++]}function k(e){let t=e.byteLength,n=[],r=0,i=new DataView(e);for(;t>0;){let e=i.getInt8(r++);if(e<0){let a=-e;t-=a+1;for(let e=0;e<a;e++)n.push(i.getUint8(r++))}else{let a=e;t-=2;let o=i.getUint8(r++);for(let e=0;e<a+1;e++)n.push(o)}}return n}function oe(e,t,n,r,i,a){let o=new DataView(a.buffer),s=n[e.idx[0]].width,c=n[e.idx[0]].height,l=Math.floor(s/8),u=Math.ceil(s/8),d=Math.ceil(c/8),f=s-(u-1)*8,p=c-(d-1)*8,m={value:0},h=[,,,],g=[,,,],_=[,,,],v=[,,,],y=[,,,];for(let n=0;n<3;++n)y[n]=t[e.idx[n]],h[n]=n<1?0:h[n-1]+u*d,g[n]=new Float32Array(64),_[n]=new Uint16Array(64),v[n]=new Uint16Array(u*64);for(let t=0;t<d;++t){let a=8;t==d-1&&(a=p);let s=8;for(let e=0;e<u;++e){e==u-1&&(s=f);for(let e=0;e<3;++e)_[e].fill(0),_[e][0]=i[h[e]++],ce(m,r,_[e]),A(_[e],g[e]),le(g[e]);ue(g);for(let t=0;t<3;++t)de(g[t],v[t],e*64)}let c=0;for(let r=0;r<3;++r){let i=n[e.idx[r]].type;for(let e=8*t;e<8*t+a;++e){c=y[r][e];for(let t=0;t<l;++t){let n=t*64+(e&7)*8;o.setUint16(c+0*i,v[r][n+0],!0),o.setUint16(c+2*i,v[r][n+1],!0),o.setUint16(c+4*i,v[r][n+2],!0),o.setUint16(c+6*i,v[r][n+3],!0),o.setUint16(c+8*i,v[r][n+4],!0),o.setUint16(c+10*i,v[r][n+5],!0),o.setUint16(c+12*i,v[r][n+6],!0),o.setUint16(c+14*i,v[r][n+7],!0),c+=16*i}}if(l!=u)for(let e=8*t;e<8*t+a;++e){let t=y[r][e]+8*l*2*i,n=l*64+(e&7)*8;for(let e=0;e<s;++e)o.setUint16(t+e*2*i,v[r][n+e],!0)}}}let b=new Uint16Array(s);o=new DataView(a.buffer);for(let t=0;t<3;++t){n[e.idx[t]].decoded=!0;let r=n[e.idx[t]].type;if(n[t].type==2)for(let e=0;e<c;++e){let n=y[t][e];for(let e=0;e<s;++e)b[e]=o.getUint16(n+e*2*r,!0);for(let e=0;e<s;++e)o.setFloat32(n+e*2*r,F(b[e]),!0)}}}function se(e,t,n,r,i,a){let o=new DataView(a.buffer),s=n[e],c=s.width,l=s.height,u=Math.ceil(c/8),d=Math.ceil(l/8),f=Math.floor(c/8),p=c-(u-1)*8,m=l-(d-1)*8,h={value:0},g=0,_=new Float32Array(64),v=new Uint16Array(64),y=new Uint16Array(u*64);for(let n=0;n<d;++n){let a=8;n==d-1&&(a=m);for(let e=0;e<u;++e)v.fill(0),v[0]=i[g++],ce(h,r,v),A(v,_),le(_),de(_,y,e*64);for(let r=8*n;r<8*n+a;++r){let n=t[e][r];for(let e=0;e<f;++e){let t=e*64+(r&7)*8;for(let e=0;e<8;++e)o.setUint16(n+e*2*s.type,y[t+e],!0);n+=16*s.type}if(u!=f){let e=f*64+(r&7)*8;for(let t=0;t<p;++t)o.setUint16(n+t*2*s.type,y[e+t],!0)}}}s.decoded=!0}function ce(e,t,n){let r,i=1;for(;i<64;)r=t[e.value],r==65280?i=64:r>>8==255?i+=r&255:(n[i]=r,i++),e.value++}function A(e,t){t[0]=F(e[0]),t[1]=F(e[1]),t[2]=F(e[5]),t[3]=F(e[6]),t[4]=F(e[14]),t[5]=F(e[15]),t[6]=F(e[27]),t[7]=F(e[28]),t[8]=F(e[2]),t[9]=F(e[4]),t[10]=F(e[7]),t[11]=F(e[13]),t[12]=F(e[16]),t[13]=F(e[26]),t[14]=F(e[29]),t[15]=F(e[42]),t[16]=F(e[3]),t[17]=F(e[8]),t[18]=F(e[12]),t[19]=F(e[17]),t[20]=F(e[25]),t[21]=F(e[30]),t[22]=F(e[41]),t[23]=F(e[43]),t[24]=F(e[9]),t[25]=F(e[11]),t[26]=F(e[18]),t[27]=F(e[24]),t[28]=F(e[31]),t[29]=F(e[40]),t[30]=F(e[44]),t[31]=F(e[53]),t[32]=F(e[10]),t[33]=F(e[19]),t[34]=F(e[23]),t[35]=F(e[32]),t[36]=F(e[39]),t[37]=F(e[45]),t[38]=F(e[52]),t[39]=F(e[54]),t[40]=F(e[20]),t[41]=F(e[22]),t[42]=F(e[33]),t[43]=F(e[38]),t[44]=F(e[46]),t[45]=F(e[51]),t[46]=F(e[55]),t[47]=F(e[60]),t[48]=F(e[21]),t[49]=F(e[34]),t[50]=F(e[37]),t[51]=F(e[47]),t[52]=F(e[50]),t[53]=F(e[56]),t[54]=F(e[59]),t[55]=F(e[61]),t[56]=F(e[35]),t[57]=F(e[36]),t[58]=F(e[48]),t[59]=F(e[49]),t[60]=F(e[57]),t[61]=F(e[58]),t[62]=F(e[62]),t[63]=F(e[63])}function le(e){let t=.5*Math.cos(3.14159/4),n=.5*Math.cos(3.14159/16),r=.5*Math.cos(3.14159/8),i=.5*Math.cos(3*3.14159/16),a=.5*Math.cos(5*3.14159/16),o=.5*Math.cos(3*3.14159/8),s=.5*Math.cos(7*3.14159/16),c=[,,,,],l=[,,,,],u=[,,,,],d=[,,,,];for(let f=0;f<8;++f){let p=f*8;c[0]=r*e[p+2],c[1]=o*e[p+2],c[2]=r*e[p+6],c[3]=o*e[p+6],l[0]=n*e[p+1]+i*e[p+3]+a*e[p+5]+s*e[p+7],l[1]=i*e[p+1]-s*e[p+3]-n*e[p+5]-a*e[p+7],l[2]=a*e[p+1]-n*e[p+3]+s*e[p+5]+i*e[p+7],l[3]=s*e[p+1]-a*e[p+3]+i*e[p+5]-n*e[p+7],u[0]=t*(e[p+0]+e[p+4]),u[3]=t*(e[p+0]-e[p+4]),u[1]=c[0]+c[3],u[2]=c[1]-c[2],d[0]=u[0]+u[1],d[1]=u[3]+u[2],d[2]=u[3]-u[2],d[3]=u[0]-u[1],e[p+0]=d[0]+l[0],e[p+1]=d[1]+l[1],e[p+2]=d[2]+l[2],e[p+3]=d[3]+l[3],e[p+4]=d[3]-l[3],e[p+5]=d[2]-l[2],e[p+6]=d[1]-l[1],e[p+7]=d[0]-l[0]}for(let f=0;f<8;++f)c[0]=r*e[16+f],c[1]=o*e[16+f],c[2]=r*e[48+f],c[3]=o*e[48+f],l[0]=n*e[8+f]+i*e[24+f]+a*e[40+f]+s*e[56+f],l[1]=i*e[8+f]-s*e[24+f]-n*e[40+f]-a*e[56+f],l[2]=a*e[8+f]-n*e[24+f]+s*e[40+f]+i*e[56+f],l[3]=s*e[8+f]-a*e[24+f]+i*e[40+f]-n*e[56+f],u[0]=t*(e[f]+e[32+f]),u[3]=t*(e[f]-e[32+f]),u[1]=c[0]+c[3],u[2]=c[1]-c[2],d[0]=u[0]+u[1],d[1]=u[3]+u[2],d[2]=u[3]-u[2],d[3]=u[0]-u[1],e[0+f]=d[0]+l[0],e[8+f]=d[1]+l[1],e[16+f]=d[2]+l[2],e[24+f]=d[3]+l[3],e[32+f]=d[3]-l[3],e[40+f]=d[2]-l[2],e[48+f]=d[1]-l[1],e[56+f]=d[0]-l[0]}function ue(e){for(let t=0;t<64;++t){let n=e[0][t],r=e[1][t],i=e[2][t];e[0][t]=n+1.5747*i,e[1][t]=n-.1873*r-.4682*i,e[2][t]=n+1.8556*r}}function de(e,t,r){for(let i=0;i<64;++i)t[r+i]=n.DataUtils.toHalfFloat(fe(e[i]))}function fe(e){return e<=1?Math.sign(e)*Math.abs(e)**2.2:Math.sign(e)*c**(Math.abs(e)-1)}function pe(e){return new DataView(e.array.buffer,e.offset.value,e.size)}function me(e){let t=e.viewer.buffer.slice(e.offset.value,e.offset.value+e.size),n=new Uint8Array(k(t)),r=new Uint8Array(n.length);return D(n),O(n,r),new DataView(r.buffer)}function he(e){let t=Ar(e.array.slice(e.offset.value,e.offset.value+e.size)),n=new Uint8Array(t.length);return D(t),O(t,n),new DataView(n.buffer)}function ge(e){let n=e.viewer,i={value:e.offset.value},a=new Uint16Array(e.columns*e.lines*(e.inputChannels.length*e.type)),o=new Uint8Array(r),s=0,c=Array(e.inputChannels.length);for(let t=0,n=e.inputChannels.length;t<n;t++)c[t]={},c[t].start=s,c[t].end=c[t].start,c[t].nx=e.columns,c[t].ny=e.lines,c[t].size=e.type,s+=c[t].nx*c[t].ny*c[t].size;let l=De(n,i),d=De(n,i);if(d>=r)throw Error(`THREE.EXRLoader: Something is wrong with PIZ_COMPRESSION BITMAP_SIZE`);if(l<=d)for(let e=0;e<d-l+1;e++)o[e+l]=Te(n,i);let f=new Uint16Array(t),p=u(o,f),m=M(n,i);ie(e.array,n,i,m,a,s);for(let t=0;t<e.inputChannels.length;++t){let e=c[t];for(let n=0;n<c[t].size;++n)ne(a,e.start+n,e.nx,e.size,e.ny,e.nx*e.size,p)}ae(f,a,s);let h=0,g=new Uint8Array(a.buffer.byteLength);for(let t=0;t<e.lines;t++)for(let t=0;t<e.inputChannels.length;t++){let e=c[t],n=e.nx*e.size,r=new Uint8Array(a.buffer,e.end*2,n*2);g.set(r,h),h+=n*2,e.end+=n}return new DataView(g.buffer)}function _e(e){let t=Ar(e.array.slice(e.offset.value,e.offset.value+e.size)),n=e.inputChannels.length*e.lines*e.columns*e.totalBytes,r=new ArrayBuffer(n),i=new DataView(r),a=0,o=0,s=[,,,,];for(let n=0;n<e.lines;n++)for(let n=0;n<e.inputChannels.length;n++){let r=0;switch(e.inputChannels[n].pixelType){case 1:s[0]=a,s[1]=s[0]+e.columns,a=s[1]+e.columns;for(let n=0;n<e.columns;++n){let e=t[s[0]++]<<8|t[s[1]++];r+=e,i.setUint16(o,r,!0),o+=2}break;case 2:s[0]=a,s[1]=s[0]+e.columns,s[2]=s[1]+e.columns,a=s[2]+e.columns;for(let n=0;n<e.columns;++n){let e=t[s[0]++]<<24|t[s[1]++]<<16|t[s[2]++]<<8;r+=e,i.setUint32(o,r,!0),o+=4}break}}return i}function ve(e){let t=e.array,r=e.offset.value,i=e.columns,a=e.lines,o=e.inputChannels,s=e.totalBytes,c=R.compression===`B44A_COMPRESSION`,u=new Uint8Array(a*i*s),d=new Uint16Array(16),f=0;for(let e=0;e<o.length;e++){let p=o[e],m=p.pixelType*2,h=Math.ceil(i/p.xSampling),g=Math.ceil(a/p.ySampling),_=p.xSampling===1&&p.ySampling===1;if(p.pixelType!==1){for(let e=0;e<g;e++)if(_){let n=e*i*s+f*i;for(let e=0;e<h*m;e++)u[n+e]=t[r++]}else r+=h*m;f+=m;continue}let v=Math.ceil(h/4),y=Math.ceil(g/4);for(let e=0;e<y;e++)for(let o=0;o<v;o++){if(c&&t[r+2]>=52){let e=t[r]<<8|t[r+1],n=e&32768?e&32767:~e&65535;d.fill(n),r+=3}else{let e=t[r]<<8|t[r+1],n=t[r+2]>>2,i=32<<n,a=e+((t[r+2]<<4|t[r+3]>>4)&63)*(1<<n)-i&65535,o=a+((t[r+3]<<2|t[r+4]>>6)&63)*(1<<n)-i&65535,s=o+(t[r+4]&63)*(1<<n)-i&65535,c=e+(t[r+5]>>2&63)*(1<<n)-i&65535,l=a+((t[r+5]<<4|t[r+6]>>4)&63)*(1<<n)-i&65535,u=o+((t[r+6]<<2|t[r+7]>>6)&63)*(1<<n)-i&65535,f=s+(t[r+7]&63)*(1<<n)-i&65535,p=c+(t[r+8]>>2&63)*(1<<n)-i&65535,m=l+((t[r+8]<<4|t[r+9]>>4)&63)*(1<<n)-i&65535,h=u+((t[r+9]<<2|t[r+10]>>6)&63)*(1<<n)-i&65535,g=f+(t[r+10]&63)*(1<<n)-i&65535,_=[e,c,p,p+(t[r+11]>>2&63)*(1<<n)-i&65535,a,l,m,m+((t[r+11]<<4|t[r+12]>>4)&63)*(1<<n)-i&65535,o,u,h,h+((t[r+12]<<2|t[r+13]>>6)&63)*(1<<n)-i&65535,s,f,g,g+(t[r+13]&63)*(1<<n)-i&65535];for(let e=0;e<16;e++)d[e]=_[e]&32768?_[e]&32767:~_[e]&65535;r+=14}if(p.pLinear){if(l===null){l=new Uint16Array(65536);for(let e=0;e<65536;e++)if((e&31744)==31744||e>32768)l[e]=0;else{let t=F(e);l[e]=t<=0?0:n.DataUtils.toHalfFloat(8*Math.log(t))}}for(let e=0;e<16;e++)d[e]=l[d[e]]}for(let t=0;t<4;t++){let n=e*4+t;if(!(n>=g))for(let e=0;e<4;e++){let r=o*4+e;if(r>=h)continue;let c=d[t*4+e];for(let e=0;e<p.ySampling;e++){let t=n*p.ySampling+e;if(!(t>=a))for(let e=0;e<p.xSampling;e++){let n=r*p.xSampling+e;if(n>=i)continue;let a=t*i*s+f*i+n*2;u[a]=c&255,u[a+1]=c>>8&255}}}}}f+=2}return new DataView(u.buffer)}function ye(e){let t=e.viewer,n={value:e.offset.value},r=new Uint8Array(e.columns*e.lines*(e.inputChannels.length*e.type*2)),i={version:N(t,n),unknownUncompressedSize:N(t,n),unknownCompressedSize:N(t,n),acCompressedSize:N(t,n),dcCompressedSize:N(t,n),rleCompressedSize:N(t,n),rleUncompressedSize:N(t,n),rleRawSize:N(t,n),totalAcUncompressedCount:N(t,n),totalDcUncompressedCount:N(t,n),acCompression:N(t,n)};if(i.version<2)throw Error(`THREE.EXRLoader: `+R.compression+` version `+i.version+` is unsupported`);let a=[],o=De(t,n)-2;for(;o>0;){let e=be(t.buffer,n),r=Te(t,n),i=r>>2&3,s=(r>>4)-1,c=new Int8Array([s])[0],l=Te(t,n);a.push({name:e,index:c,type:l,compression:i}),o-=e.length+3}let s=R.channels,c=Array(e.inputChannels.length);for(let t=0;t<e.inputChannels.length;++t){let n=c[t]={},r=s[t];n.name=r.name,n.compression=0,n.decoded=!1,n.type=r.pixelType,n.pLinear=r.pLinear,n.width=e.columns,n.height=e.lines}let l={idx:[,,,]};for(let t=0;t<e.inputChannels.length;++t){let e=c[t],n=e.name.lastIndexOf(`.`),r=n>=0?e.name.substring(n+1):e.name;for(let n=0;n<a.length;++n){let i=a[n];r===i.name&&e.type===i.type&&(e.compression=i.compression,i.index>=0&&(l.idx[i.index]=t),e.offset=t)}}let u,d,f;if(i.acCompressedSize>0)switch(i.acCompression){case 0:u=new Uint16Array(i.totalAcUncompressedCount),ie(e.array,t,n,i.acCompressedSize,u,i.totalAcUncompressedCount);break;case 1:let r=Ar(e.array.slice(n.value,n.value+i.totalAcUncompressedCount));u=new Uint16Array(r.buffer),n.value+=i.totalAcUncompressedCount;break}if(i.dcCompressedSize>0){let t={array:e.array,offset:n,size:i.dcCompressedSize};d=new Uint16Array(he(t).buffer),n.value+=i.dcCompressedSize}i.rleRawSize>0&&(f=k(Ar(e.array.slice(n.value,n.value+i.rleCompressedSize)).buffer),n.value+=i.rleCompressedSize);let p=0,m=Array(c.length);for(let e=0;e<m.length;++e)m[e]=[];for(let t=0;t<e.lines;++t)for(let t=0;t<c.length;++t)m[t].push(p),p+=c[t].width*e.type*2;l.idx[0]!==void 0&&c[l.idx[0]]&&oe(l,m,c,u,d,r);for(let t=0;t<c.length;++t){let n=c[t];if(!n.decoded)switch(n.compression){case 2:let i=0,a=0;for(let o=0;o<e.lines;++o){let e=m[t][i];for(let t=0;t<n.width;++t){for(let t=0;t<2*n.type;++t)r[e++]=f[a+t*n.width*n.height];a++}i++}break;case 1:se(t,m,c,u,d,r);break;default:throw Error(`THREE.EXRLoader: unsupported channel compression`)}}return new DataView(r.buffer)}function be(e,t){let n=new Uint8Array(e),r=0;for(;n[t.value+r]!=0;)r+=1;let i=new TextDecoder().decode(n.slice(t.value,t.value+r));return t.value=t.value+r+1,i}function xe(e,t,n){let r=new TextDecoder().decode(new Uint8Array(e).slice(t.value,t.value+n));return t.value+=n,r}function Se(e,t){return[j(e,t),M(e,t)]}function Ce(e,t){return[M(e,t),M(e,t)]}function j(e,t){let n=e.getInt32(t.value,!0);return t.value+=4,n}function M(e,t){let n=e.getUint32(t.value,!0);return t.value+=4,n}function we(e,t){let n=e[t.value];return t.value+=1,n}function Te(e,t){let n=e.getUint8(t.value);return t.value+=1,n}let N=function(e,t){let n=Number(e.getBigInt64(t.value,!0));return t.value+=8,n};function P(e,t){let n=e.getFloat32(t.value,!0);return t.value+=4,n}function Ee(e,t){return n.DataUtils.toHalfFloat(P(e,t))}function F(e){let t=(e&31744)>>10,n=e&1023;return(e>>15?-1:1)*(t?t===31?n?NaN:1/0:2**(t-15)*(1+n/1024):n/1024*6103515625e-14)}function De(e,t){let n=e.getUint16(t.value,!0);return t.value+=2,n}function Oe(e,t){return F(De(e,t))}function ke(e,t,n,r){let i=n.value,a=[];for(;n.value<i+r-1;){let r=be(t,n),i=j(e,n),o=Te(e,n);n.value+=3;let s=j(e,n),c=j(e,n);a.push({name:r,pixelType:i,pLinear:o,xSampling:s,ySampling:c})}return n.value+=1,a}function Ae(e,t){return{redX:P(e,t),redY:P(e,t),greenX:P(e,t),greenY:P(e,t),blueX:P(e,t),blueY:P(e,t),whiteX:P(e,t),whiteY:P(e,t)}}function je(e,t){return[`NO_COMPRESSION`,`RLE_COMPRESSION`,`ZIPS_COMPRESSION`,`ZIP_COMPRESSION`,`PIZ_COMPRESSION`,`PXR24_COMPRESSION`,`B44_COMPRESSION`,`B44A_COMPRESSION`,`DWAA_COMPRESSION`,`DWAB_COMPRESSION`][Te(e,t)]}function I(e,t){return{xMin:j(e,t),yMin:j(e,t),xMax:j(e,t),yMax:j(e,t)}}function L(e,t){return[`INCREASING_Y`,`DECREASING_Y`,`RANDOM_Y`][Te(e,t)]}function Me(e,t){return[`ENVMAP_LATLONG`,`ENVMAP_CUBE`][Te(e,t)]}function Ne(e,t){let n=[`ONE_LEVEL`,`MIPMAP_LEVELS`,`RIPMAP_LEVELS`],r=[`ROUND_DOWN`,`ROUND_UP`],i=M(e,t),a=M(e,t),o=Te(e,t);return{xSize:i,ySize:a,levelMode:n[o&15],roundingMode:r[o>>4]}}function Pe(e,t){return[P(e,t),P(e,t)]}function Fe(e,t){return[P(e,t),P(e,t),P(e,t)]}function Ie(e,t,n,r,i){if(r===`string`||r===`stringvector`||r===`iccProfile`)return xe(t,n,i);if(r===`chlist`)return ke(e,t,n,i);if(r===`chromaticities`)return Ae(e,n);if(r===`compression`)return je(e,n);if(r===`box2i`)return I(e,n);if(r===`envmap`)return Me(e,n);if(r===`tiledesc`)return Ne(e,n);if(r===`lineOrder`)return L(e,n);if(r===`float`)return P(e,n);if(r===`v2f`)return Pe(e,n);if(r===`v3f`)return Fe(e,n);if(r===`int`)return j(e,n);if(r===`rational`)return Se(e,n);if(r===`timecode`)return Ce(e,n);if(r===`preview`||r===`deepImageState`||r===`idmanifest`)return n.value+=i,`skipped`;n.value+=i}function Le(e,t){let n=Math.log2(e);return t==`ROUND_DOWN`?Math.floor(n):Math.ceil(n)}function Re(e,t,n){let r=0;switch(e.levelMode){case`ONE_LEVEL`:r=1;break;case`MIPMAP_LEVELS`:r=Le(Math.max(t,n),e.roundingMode)+1;break;case`RIPMAP_LEVELS`:throw Error(`THREE.EXRLoader: RIPMAP_LEVELS tiles currently unsupported.`)}return r}function ze(e,t,n,r){let i=Array(e);for(let a=0;a<e;a++){let e=1<<a,o=t/e|0;r==`ROUND_UP`&&o*e<t&&(o+=1),i[a]=(Math.max(o,1)+n-1)/n|0}return i}function Be(){let e=this,t=e.offset,n={value:0};for(let r=0;r<e.tileCount;r++){let r=j(e.viewer,t),i=j(e.viewer,t);t.value+=8,e.size=M(e.viewer,t);let a=r*e.blockWidth,o=i*e.blockHeight;e.columns=a+e.blockWidth>e.width?e.width-a:e.blockWidth,e.lines=o+e.blockHeight>e.height?e.height-o:e.blockHeight;let s=e.columns*e.totalBytes,c=e.size<e.lines*s?e.uncompress(e):pe(e);t.value+=e.size;for(let t=0;t<e.lines;t++){let r=t*e.columns*e.totalBytes;for(let i=0;i<e.inputChannels.length;i++){let s=R.channels[i].name,l=e.channelByteOffsets[s]*e.columns,u=e.decodeChannels[s];if(u===void 0)continue;n.value=r+l;let d=(e.height-(1+o+t))*e.outLineWidth;for(let t=0;t<e.columns;t++){let r=d+(t+a)*e.outputChannels+u;e.byteArray[r]=e.getter(c,n)}}}}}function Ve(){let e=this,t=e.offset,n={value:0};for(let r=0;r<e.height/e.blockHeight;r++){let r=j(e.viewer,t)-R.dataWindow.yMin;e.size=M(e.viewer,t),e.lines=r+e.blockHeight>e.height?e.height-r:e.blockHeight;let i=e.columns*e.totalBytes,a=e.size<e.lines*i?e.uncompress(e):pe(e);t.value+=e.size;for(let t=0;t<e.lines;t++){let o=r+t,s=t*i,c=(e.height-1-o)*e.outLineWidth;for(let t=0;t<e.inputChannels.length;t++){let r=R.channels[t].name,i=e.channelByteOffsets[r]*e.columns,o=e.decodeChannels[r];if(o!==void 0){n.value=s+i;for(let t=0;t<e.columns;t++){let r=c+t*e.outputChannels+o;e.byteArray[r]=e.getter(a,n)}}}}}}function He(){let e=this,t=e.chunkOffsets,n={value:0};for(let r=0;r<t.length;r++){let i={value:t[r]};i.value+=4;let a=j(e.viewer,i)-R.dataWindow.yMin;e.size=M(e.viewer,i),e.lines=a+e.blockHeight>e.height?e.height-a:e.blockHeight;let o=e.columns*e.totalBytes,s=e.size<e.lines*o,c=e.offset;e.offset=i;let l=s?e.uncompress(e):pe(e);e.offset=c;for(let t=0;t<e.lines;t++){let r=a+t,i=t*o,s=(e.height-1-r)*e.outLineWidth;for(let t=0;t<e.inputChannels.length;t++){let r=R.channels[t].name,a=e.channelByteOffsets[r]*e.columns,o=e.decodeChannels[r];if(o!==void 0){n.value=i+a;for(let t=0;t<e.columns;t++){let r=s+t*e.outputChannels+o;e.byteArray[r]=e.getter(l,n)}}}}}}function Ue(e,t,n,r){if(n===0)return null;let i=e.slice(t,t+n);switch(r){case`NO_COMPRESSION`:return new DataView(i.buffer,i.byteOffset,i.byteLength);case`RLE_COMPRESSION`:{let e=new Uint8Array(k(i.buffer.slice(i.byteOffset,i.byteOffset+i.byteLength))),t=new Uint8Array(e.length);return D(e),O(e,t),new DataView(t.buffer)}case`ZIPS_COMPRESSION`:{let e=Ar(i),t=new Uint8Array(e.length);return D(e),O(e,t),new DataView(t.buffer)}default:throw Error(`THREE.EXRLoader: `+r+` is unsupported for deep data`)}}function We(){let e=this,t=e.chunkOffsets,r=e.width,i=e.height,a=e.deepChannels,o=R.compression,s=e.multiPart,c=e.decodeChannels,l=e.outputChannels,u=e.byteArray instanceof Uint16Array,d=-1;for(let e=0;e<a.length;e++)if(a[e].name===`A`){d=e;break}for(let f=0;f<t.length;f++){let p={value:t[f]};s&&(p.value+=4);let m=j(e.viewer,p)-R.dataWindow.yMin,h=N(e.viewer,p),g=N(e.viewer,p);N(e.viewer,p);let _=Ue(e.array,p.value,h,o);if(p.value+=h,_===null)continue;let v=new Uint32Array(r);for(let e=0;e<r;e++)v[e]=_.getUint32(e*4,!0);let y=v[r-1];if(y===0){p.value+=g;continue}let b=Ue(e.array,p.value,g,o),x=[],S=0;for(let e=0;e<a.length;e++)x.push(S),S+=y*a[e].bytesPerSample;let ee=(i-1-m)*e.outLineWidth;for(let t=0;t<r;t++){let r=t===0?0:v[t-1],i=v[t]-r;if(i===0)continue;let o=new Float32Array(l),s=0;for(let e=0;e<i;e++){let t=r+e,n=1-s;if(n<=0)break;let i=1;if(d>=0){let e=a[d].bytesPerSample,n=x[d]+t*e;i=e===2?F(b.getUint16(n,!0)):b.getFloat32(n,!0)}for(let e=0;e<a.length;e++){let r=a[e],i=c[r.name];if(i===void 0)continue;let s=r.bytesPerSample,l=x[e]+t*s,u=s===2?F(b.getUint16(l,!0)):b.getFloat32(l,!0);o[i]+=u*n}s+=i*n}c.A!==void 0&&(o[c.A]=s);let f=ee+t*l;for(let t=0;t<l;t++)e.byteArray[f+t]=u?n.DataUtils.toHalfFloat(o[t]):o[t]}}}function Ge(e,t,n){let r={},i=!1;for(;;){let a=be(t,n);if(a===``)break;i=!0;let o=be(t,n),s=Ie(e,t,n,o,M(e,n));s===void 0?console.warn(`THREE.EXRLoader: Skipped unknown header attribute type \'${o}\'.`):r[a]=s}return i?r:null}function Ke(e,t,n){if(e.getUint32(0,!0)!=20000630)throw Error(`THREE.EXRLoader: Provided file doesn't appear to be in OpenEXR format.`);let r=e.getUint8(4),i=e.getUint8(5),a={singleTile:!!(i&2),longName:!!(i&4),deepFormat:!!(i&8),multiPart:!!(i&16)};n.value=8;let o=[];if(a.multiPart){for(;;){let i=Ge(e,t,n);if(i===null)break;i.version=r,i.spec=a,o.push(i)}if(o.length===0)throw Error(`THREE.EXRLoader: No valid part headers found.`)}else{let i=Ge(e,t,n);i.version=r,i.spec=a,o.push(i)}return o}function qe(e,t,r,i,a,o){let s={size:0,viewer:t,array:r,offset:i,width:e.dataWindow.xMax-e.dataWindow.xMin+1,height:e.dataWindow.yMax-e.dataWindow.yMin+1,inputChannels:e.channels,channelByteOffsets:{},shouldExpand:!1,yCbCr:!1,totalBytes:null,columns:null,lines:null,type:null,uncompress:null,getter:null,format:null,colorSpace:n.LinearSRGBColorSpace};switch(e.compression){case`NO_COMPRESSION`:s.blockHeight=1,s.uncompress=pe;break;case`RLE_COMPRESSION`:s.blockHeight=1,s.uncompress=me;break;case`ZIPS_COMPRESSION`:s.blockHeight=1,s.uncompress=he;break;case`ZIP_COMPRESSION`:s.blockHeight=16,s.uncompress=he;break;case`PIZ_COMPRESSION`:s.blockHeight=32,s.uncompress=ge;break;case`PXR24_COMPRESSION`:s.blockHeight=16,s.uncompress=_e;break;case`B44_COMPRESSION`:case`B44A_COMPRESSION`:s.blockHeight=32,s.uncompress=ve;break;case`DWAA_COMPRESSION`:s.blockHeight=32,s.uncompress=ye;break;case`DWAB_COMPRESSION`:s.blockHeight=256,s.uncompress=ye;break;default:throw Error(`THREE.EXRLoader: `+e.compression+` is unsupported`)}let c={};for(let t of e.channels)switch(t.name){case`BY`:case`RY`:case`Y`:case`R`:case`G`:case`B`:case`A`:c[t.name]=!0,s.type=t.pixelType}let l=!1,u=!1;if(c.Y&&c.RY&&c.BY)s.outputChannels=4,s.yCbCr=!0;else if(c.R&&c.G&&c.B)s.outputChannels=4;else if(c.Y)s.outputChannels=1;else throw Error(`THREE.EXRLoader: file contains unsupported data channels.`);switch(s.outputChannels){case 4:o==n.RGBAFormat?(l=!c.A,s.format=n.RGBAFormat,s.colorSpace=n.LinearSRGBColorSpace,s.outputChannels=4,s.decodeChannels={R:0,G:1,B:2,A:3}):o==n.RGFormat?(s.format=n.RGFormat,s.colorSpace=n.LinearSRGBColorSpace,s.outputChannels=2,s.decodeChannels={R:0,G:1}):o==n.RedFormat?(s.format=n.RedFormat,s.colorSpace=n.LinearSRGBColorSpace,s.outputChannels=1,s.decodeChannels={R:0}):u=!0;break;case 1:o==n.RGBAFormat?(l=!0,s.format=n.RGBAFormat,s.colorSpace=n.LinearSRGBColorSpace,s.outputChannels=4,s.shouldExpand=!0,s.decodeChannels={Y:0}):o==n.RGFormat?(s.format=n.RGFormat,s.colorSpace=n.LinearSRGBColorSpace,s.outputChannels=2,s.shouldExpand=!0,s.decodeChannels={Y:0}):o==n.RedFormat?(s.format=n.RedFormat,s.colorSpace=n.LinearSRGBColorSpace,s.outputChannels=1,s.decodeChannels={Y:0}):u=!0;break;default:u=!0}if(u)throw Error(`THREE.EXRLoader: invalid output format for specified file.`);if(s.yCbCr&&(s.format=n.RGBAFormat,s.outputChannels=4,s.decodeChannels={Y:0,RY:1,BY:2},l=!0),s.type==1)switch(a){case n.FloatType:s.getter=Oe;break;case n.HalfFloatType:s.getter=De;break}else if(s.type==2)switch(a){case n.FloatType:s.getter=P;break;case n.HalfFloatType:s.getter=Ee}else throw Error(`THREE.EXRLoader: unsupported pixelType `+s.type+` for `+e.compression+`.`);s.columns=s.width;let d=s.width*s.height*s.outputChannels;switch(a){case n.FloatType:s.byteArray=new Float32Array(d),l&&s.byteArray.fill(1,0,d);break;case n.HalfFloatType:s.byteArray=new Uint16Array(d),l&&s.byteArray.fill(15360,0,d);break;default:console.error(`THREE.EXRLoader: unsupported type: `,a);break}let f=0;for(let t of e.channels)s.decodeChannels[t.name]!==void 0&&(s.channelByteOffsets[t.name]=f),f+=t.pixelType*2;if(s.totalBytes=f,s.outLineWidth=s.width*s.outputChannels,e.spec.deepFormat){s.deepChannels=[];let t=0;for(let n of e.channels){let e=n.pixelType===0?4:n.pixelType*2;s.deepChannels.push({name:n.name,pixelType:n.pixelType,bytesPerSample:e}),t+=e}s.deepBytesPerSample=t,s.chunkOffsets=e._chunkOffsets,s.multiPart=e.spec.multiPart,s.decode=We.bind(s)}else if(e.spec.singleTile){s.blockHeight=e.tiles.ySize,s.blockWidth=e.tiles.xSize;let n=Re(e.tiles,s.width,s.height),r=ze(n,s.width,e.tiles.xSize,e.tiles.roundingMode),a=ze(n,s.height,e.tiles.ySize,e.tiles.roundingMode);s.tileCount=r[0]*a[0];for(let e=0;e<n;e++)for(let n=0;n<a[e];n++)for(let n=0;n<r[e];n++)N(t,i);s.decode=Be.bind(s)}else if(e.spec.multiPart)s.blockWidth=s.width,s.chunkOffsets=e._chunkOffsets,s.decode=He.bind(s);else{s.blockWidth=s.width;let e=Math.ceil(s.height/s.blockHeight);for(let n=0;n<e;n++)N(t,i);s.decode=Ve.bind(s)}return s}let Je={value:0},Ye=new DataView(e),Xe=new Uint8Array(e),Ze=Ke(Ye,e,Je),Qe=Math.max(0,Math.min(this.part,Ze.length-1)),R=Ze[Qe];if(R.spec.multiPart||R.spec.deepFormat)for(let e=0;e<Ze.length;e++){let t=Ze[e].chunkCount;if(e===Qe){R._chunkOffsets=[];for(let e=0;e<t;e++)R._chunkOffsets.push(N(Ye,Je))}else for(let e=0;e<t;e++)N(Ye,Je)}let z=qe(R,Ye,Xe,Je,this.type,this.outputFormat);if(z.decode(),z.shouldExpand){let e=z.byteArray;if(this.outputFormat==n.RGBAFormat)for(let t=0;t<e.length;t+=4)e[t+2]=e[t+1]=e[t];else if(this.outputFormat==n.RGFormat)for(let t=0;t<e.length;t+=2)e[t+1]=e[t]}if(z.yCbCr){let e=z.byteArray,t=z.width*z.height;if(this.type===n.HalfFloatType)for(let r=0;r<t;r++){let t=r*4,i=F(e[t]),a=F(e[t+1]),o=F(e[t+2]),s=(1+a)*i,c=(1+o)*i,l=(i-s*.2126-c*.0722)/.7152;e[t]=n.DataUtils.toHalfFloat(Math.max(0,s)),e[t+1]=n.DataUtils.toHalfFloat(Math.max(0,l)),e[t+2]=n.DataUtils.toHalfFloat(Math.max(0,c))}else for(let n=0;n<t;n++){let t=n*4,r=e[t],i=e[t+1],a=e[t+2],o=(1+i)*r,s=(1+a)*r;e[t]=Math.max(0,o),e[t+1]=Math.max(0,(r-o*.2126-s*.0722)/.7152),e[t+2]=Math.max(0,s)}}return{header:R,width:z.width,height:z.height,data:z.byteArray,format:z.format,colorSpace:z.colorSpace,type:this.type,minFilter:n.LinearFilter,magFilter:n.LinearFilter,generateMipmaps:!1,flipY:!1}}setDataType(e){return this.type=e,this}setOutputFormat(e){return this.outputFormat=e,this}setPart(e){return this.part=e,this}},Nr=class extends n.DataTextureLoader{constructor(e){super(e),this.type=n.HalfFloatType}parse(e){let t=function(e,t){switch(e){case 1:throw Error(`THREE.HDRLoader: Read Error: `+(t||``));case 2:throw Error(`THREE.HDRLoader: Write Error: `+(t||``));case 3:throw Error(`THREE.HDRLoader: Bad File Format: `+(t||``));default:case 4:throw Error(`THREE.HDRLoader: Memory Error: `+(t||``))}},r=function(e,t,n){t||=1024;let r=e.pos,i=-1,a=0,o=``,s=String.fromCharCode.apply(null,new Uint16Array(e.subarray(r,r+128)));for(;0>(i=s.indexOf(`
|
|
112
112
|
`))&&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+`
|
|
113
113
|
`;l=r(e),!1!==l;){if(c.string+=l+`
|
|
114
114
|
`,l.charAt(0)===`#`){c.comments+=l+`
|
|
115
|
-
`;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}},Or=class extends Dr{constructor(e){console.warn(`RGBELoader has been deprecated. Please use HDRLoader instead.`),super(e)}},kr=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,Ar(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,Ar(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,Ar(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,Ar(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,Ar(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,Ar(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 Ar(e){return new n.MeshLambertMaterial({color:0,emissive:16777215,emissiveIntensity:e})}var jr=class extends n.Mesh{constructor(e,t,r,i=128){if(t<=0||r<=0||i<=0)throw Error(`THREE.GroundedSkybox: height, radius, and resolution must be positive.`);let a=new n.SphereGeometry(r,2*i,i);a.scale(1,1,-1);let o=a.getAttribute(`position`),s=new n.Vector3;for(let e=0;e<o.count;++e)if(s.fromBufferAttribute(o,e),s.y<0){let n=-t*3/2,r=s.y<n?-t/s.y:1-s.y*s.y/(3*n*n);s.multiplyScalar(r),s.toArray(o.array,3*e)}o.needsUpdate=!0,super(a,new n.MeshBasicMaterial({map:e,depthWrite:!1}))}},Mr=.42,Nr=1.15,Pr=.7,Fr=1;function Ir(e){e.traverse(e=>{let t=e;if(t.isPointLight){t.intensity*=Pr;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)>Fr?t.emissiveIntensity*=Nr:t.color&&t.color.multiplyScalar(Mr)}})}var Lr=function(e){return e.MapControls=`MapControls`,e.OrbitControls=`OrbitControls`,e}({}),Rr=`crisp`,zr=256,Br=.1,Vr=100,Hr=`softbox-grounded-skybox`,Ur=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.N.ok(void 0)):e.N.err(new e.F(`Could not access Three.js renderer`,e.P.INITIALIZATION_FAILED))}catch(t){return e.N.err(new e.F(`Failed to initialize environment service`,e.P.INITIALIZATION_FAILED,{originalError:t}))}}async loadEnvironmentMap(t){try{let r=this.loadedTextures.get(t);if(r)return e.N.ok(new Wr(r));let i=t.split(`.`).pop()?.toLowerCase(),a;switch(i){case`hdr`:a=new Or;break;case`exr`:a=new Er;break;case`jpg`:case`jpeg`:case`png`:a=new n.TextureLoader;break;default:return e.N.err(new e.F(`Unsupported environment map format: ${i}`,e.P.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.N.err(new e.F(`Environment service was disposed during the load`,e.P.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.N.ok(new Wr(i))}return this.loadedTextures.set(t,o),e.N.ok(new Wr(o))}catch(n){return e.N.err(new e.F(`Failed to load environment map`,e.P.TEXTURE_LOAD_FAILED,{url:t,originalError:n}))}}applyToScene(t,r,i){try{let a=e.o(t);if(!a)return e.N.err(new e.F(`Scene must be ThreeSceneAdapter`,e.P.INVALID_PARAMETER));let o=e.s(r);if(!o)return e.N.err(new e.F(`Texture must be ThreeTextureAdapter`,e.P.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);o.mapping===n.CubeUVReflectionMapping?s?a.__originalEnvironmentTexture=s:delete a.__originalEnvironmentTexture:o.mapping===n.EquirectangularReflectionMapping&&(a.__originalEnvironmentTexture=o),(i?.setBackground??!0)&&(se(a),o.mapping===n.CubeUVReflectionMapping&&s?.mapping===n.EquirectangularReflectionMapping?a.background=s:a.background=o),this.removeGroundedSkybox(a);let c=o.mapping===n.EquirectangularReflectionMapping?o:s?.mapping===n.EquirectangularReflectionMapping?s:null;return i?.groundProjection&&c&&this.addGroundedSkybox(a,c,i.groundProjection,i.backgroundIntensity),e.N.ok(void 0)}catch(t){return e.N.err(new e.F(`Failed to apply environment to scene`,e.P.SCENE_OPERATION_FAILED,{originalError:t}))}}addGroundedSkybox(t,n,r,i){let a=new jr(n,r.height,r.radius);a.name=Hr,a.userData[e.l]=!0,a.userData[e.m]=!0;let o=Array.isArray(a.material)?a.material:[a.material];for(let t of o)t.userData[e.h]=!0,i!==void 0&&`color`in t&&t.color.setScalar(i);a.position.y=r.height-.01,t.add(a)}removeGroundProjection(t){let n=e.o(t);n&&this.removeGroundedSkybox(n)}removeGroundedSkybox(e){let t=e.getObjectByName(Hr);t&&(t.removeFromParent(),t.geometry.dispose(),(Array.isArray(t.material)?t.material:[t.material]).forEach(e=>e.dispose()))}getOriginalEnvironmentTexture(e){let t=this.loadedTextures.get(e+`_original`);return t?new Wr(t):null}async setBackgroundImage(t,r){try{let i=e.o(t);if(!i)return e.N.err(new e.F(`Scene must be ThreeSceneAdapter`,e.P.INVALID_PARAMETER));let a=await this.loadBackgroundTexture(r);return a.colorSpace=n.SRGBColorSpace,a.needsUpdate=!0,oe(a),se(i),i.background=a,e.N.ok(void 0)}catch(t){return e.N.err(new e.F(`Failed to set background image`,e.P.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=Rr){try{if(!this.pmremGenerator)return e.N.err(new e.F(`Environment service not initialized`,e.P.INITIALIZATION_FAILED));let n=this.studioBakes.get(t);if(n)return e.N.ok(new Wr(n.pmremTexture));let r=new kr;t!==`soft`&&Ir(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.N.ok(new Wr(a))}catch(t){return e.N.err(new e.F(`Failed to create studio environment`,e.P.TEXTURE_LOAD_FAILED,{originalError:t}))}}captureStudioCubeOriginal(e,t,r){if(this.threeRenderer)try{let i=new n.WebGLCubeRenderTarget(zr,{type:n.HalfFloatType}),a=new n.CubeCamera(Br,Vr,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}},Wr=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}},Gr=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)}},Kr=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 Gr(r).alignToFloor(),e.N.ok(void 0)):e.N.err(new e.F(`Could not get Three.js object for floor alignment`,e.P.INVALID_PARAMETER))}catch(t){return e.N.err(new e.F(`Failed to align object to floor`,e.P.OPERATION_FAILED,{originalError:t}))}}},qr={touch:10,default:5},Jr=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`?qr.touch:qr.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.i(o()),l=e.n(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.b(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 A(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()}},Yr=.001,Xr={visible:!1},Zr=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.n(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)?Xr:(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.i(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-Yr)}},Qr=class{createProjector(e){return new Zr(e)}},$r=class{constructor(){this.mixer=null,this.clips=[],this.activeActions=[],this.playing=!1,this.speed=1}attach(t){this.detach();let r=e.i(t);if(!r)return;let i=ei(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.N.err(new e.F(`Cannot play animation clip '${t}': no animation clips are attached`,e.P.INVALID_STATE));if(!this.clips.some(e=>e.name===t)){let n=this.clips.map(e=>e.name);return e.N.err(new e.F(`Unknown animation clip '${t}'. Available clips: ${n.join(`, `)}`,e.P.INVALID_PARAMETER))}}if(!this.mixer)return e.N.ok(void 0);if(!this.playing&&this.activeActions.length>0&&t===void 0)return this.playing=!0,e.N.ok(void 0);let n=t?this.clips.filter(e=>e.name===t):this.clips;if(n.length===0)return e.N.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.N.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 ei(e){let t=null;return e.traverse(e=>{!t&&(e.animations?.length??0)>0&&(t=e)}),t}var ti=class{static createViewer(e,t){a(t.units);let n=new N(e),r=new j,i=this.createCamera(t),o=this.createControls(i.getThreeCamera(),e,t),s=new ni().createDefaultLoader({renderer:n.getThreeRenderer()??void 0,bvh:t.selection?.bvh,...t.loaders}),c=new Xn,l=new Ur,u=new Zn,d=new Kr,f=new Jr,p=new Qr,m=new $r,h=he.convertRendererOptions(t.renderer||{});return h.preserveDrawingBuffer=!0,new ie({renderer:n,scene:r,camera:i,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=fe.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||Lr.OrbitControls,a;a=i===Lr.MapControls?new sn(e,t):new on(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}},ni=class extends Mt{createDefaultLoader(e={}){return Mt.createLoader(`model.glb`,e)}},ri=[`toneMappingExposure`,`bloom`,`vignette`,`filmGrain`,`colorGrade`],ii=[`environmentIntensity`],ai=[`autoRotate`,`autoRotateSpeed`],oi=[`enabled`];function si(e){let t={backgroundColor:e.backgroundColor,backgroundColorEdge:e.backgroundColorEdge};return`variant`in e&&(t.variant=e.variant??null),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 ci={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:Rr},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:Lr.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}},li=`https://dl.polyhaven.org/file/ph-assets/HDRIs/hdr/2k/kloofendal_48d_partly_cloudy_puresky_2k.hdr`,ui={texture:`https://dl.polyhaven.org/file/ph-assets/Textures/jpg/1k/concrete_floor_02/concrete_floor_02_diff_1k.jpg`,normalMap:`https://dl.polyhaven.org/file/ph-assets/Textures/jpg/1k/concrete_floor_02/concrete_floor_02_nor_gl_1k.jpg`,roughnessMap:`https://dl.polyhaven.org/file/ph-assets/Textures/jpg/1k/concrete_floor_02/concrete_floor_02_rough_1k.jpg`},di={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}}},outdoor_concrete:{helpers:{grid:{type:`concrete_disc`,styleOptions:{...ui}},studioEnvironment:!0},environment:{url:li,groundProjection:!0},lighting:{ambientLight:{intensity:.22},hemisphereLight:{intensity:.38},directionalLight:{intensity:2.6,color:`#fff2e2`,position:[-70,52,18]},fillLight:{intensity:.25},rimLight:{intensity:.25}}}},fi=`studio_dome`;function pi(e){return e?di[e]??{}:{}}var mi={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 hi(e){return e?mi[e]??{}:{}}function gi(e,t){return _(_(_(e,pi(t.scene)),hi(t.preset)),t)}var _i=(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 vi(e){let n=(0,t.useMemo)(()=>JSON.stringify({pathTracing:_i(e.pathTracing,...oi),staticScene:e.staticScene,renderer:_i(e.renderer,...ri),camera:e.camera,controls:_i(e.controls,...ai),environment:_i(e.environment,...ii),scene:e.scene??`studio_dome`,lighting:e.lighting,helpers:_i(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=gi(ci,e);return JSON.stringify(si(t))},[e.preset,e.backgroundColor,e.backgroundColorEdge,e.variant,e.renderer,e.environment,e.controls,e.animations,e.pathTracing]);return{options:(0,t.useMemo)(()=>e,[n,r]),structuralKey:n,runtimeKey:r}}var yi=`200px`;function bi(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:yi});return a.observe(t),()=>a.disconnect()},[e,n,r]),r}function xi(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}=vi(n),p=bi(e,(n.loading??`eager`)===`lazy`);return(0,t.useEffect)(()=>{if(!p||!e.current||r.current)return;l(null);let t=gi(ci,u),n;try{n=ti.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=gi(ci,u);a.updateOptions(si(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 Si(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 Ci(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 wi(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 Ti(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 A(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 Ei=class{static toThreeObject(t){let r=e.i(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.n(t)??new n.PerspectiveCamera}static toThreeControls(t){return e.r(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 Di(n){let r=(0,t.useRef)(new e.M);return Si(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`,Ei.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`,Ei.convertControlsChange(e)),"object:selected":e=>r.current.emit(`object:selected`,Ei.convertObjectSelected(e)),error:e=>r.current.emit(`error`,e)}),[])),r.current}function Oi(e,n,r){let i=(0,t.useRef)(r);i.current=r,Si(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 ki=(0,t.createContext)(null);function Ai({viewer:e,canvasRef:n,children:i}){let a=(0,t.useMemo)(()=>({viewer:e,canvasRef:n}),[e,n]);return(0,r.jsx)(ki.Provider,{value:a,children:i})}function ji(){let e=(0,t.useContext)(ki);if(!e)throw Error(`useViewerContext must be used within ViewerProvider`);return e}function Mi(){let{canvasRef:e}=ji();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 Ni=(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)},Pi={type:`change`},Fi={type:`start`},Ii={type:`end`},Li=new n.Ray,Ri=new n.Plane,zi=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},Bi=1e-6,Vi=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=Ui.bind(this),this._onPointerDown=Hi.bind(this),this._onPointerUp=Wi.bind(this),this._onContextMenu=Zi.bind(this),this._onMouseWheel=qi.bind(this),this._onKeyDown=Ji.bind(this),this._onTouchStart=Yi.bind(this),this._onTouchMove=Xi.bind(this),this._onMouseDown=Gi.bind(this),this._onMouseMove=Ki.bind(this),this._interceptControlDown=Qi.bind(this),this._interceptControlUp=$i.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(Pi),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):(Li.origin.copy(this.object.position),Li.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(Li.direction))<zi?this.object.lookAt(this.target):(Ri.setFromNormalAndCoplanarPoint(this.object.up,this.target),Li.intersectPlane(Ri,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)>Bi||8*(1-this._lastQuaternion.dot(this.object.quaternion))>Bi||this._lastTargetPosition.distanceToSquared(this.target)>Bi?(this.dispatchEvent(Pi),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 Hi(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 Ui(e){this.enabled!==!1&&(e.pointerType===`touch`?this._onTouchMove(e):this._onMouseMove(e))}function Wi(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(Ii),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 Gi(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(Fi)}function Ki(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 qi(e){this.enabled===!1||this.enableZoom===!1||this.state!==Q.NONE||(e.preventDefault(),this.dispatchEvent(Fi),this._handleMouseWheel(this._customWheelEvent(e)),this.dispatchEvent(Ii))}function Ji(e){this.enabled!==!1&&this._handleKeyDown(e)}function Yi(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(Fi)}function Xi(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 Zi(e){this.enabled!==!1&&e.preventDefault()}function Qi(e){e.key===`Control`&&(this._controlActive=!0,this.domElement.getRootNode().addEventListener(`keyup`,this._interceptControlUp,{passive:!0,capture:!0}))}function $i(e){e.key===`Control`&&(this._controlActive=!1,this.domElement.getRootNode().removeEventListener(`keyup`,this._interceptControlUp,{passive:!0,capture:!0}))}var ea=class extends Vi{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},ta=(e=>(e.FRONT=`FRONT`,e.BACK=`BACK`,e.RIGHT=`RIGHT`,e.LEFT=`LEFT`,e.TOP=`TOP`,e.BOTTOM=`BOTTOM`,e))(ta||{});new n.Vector3(0,1,0);var na=`rotation-arrows-name`,ra=`left-rotation-arrow-name`,ia=`right-rotation-arrow-name`,aa=`gizmo-group-name`,oa=[ia,ra],sa={GIZMO_DISTANCE:8,DEFAULT_UP:new n.Vector3(0,1,0),FORWARD:new n.Vector3(0,0,-1)},ca=e=>sa.FORWARD.clone().applyQuaternion(e),la=(e,t,r=new n.Vector3)=>r.clone().add(e.multiplyScalar(-t)),ua=class{constructor(e,t=na){this.gizmoScene=e,this.gizmoArrowsName=t}syncGizmoWithMain(e,t){e.quaternion.copy(t.quaternion),e.up.copy(t.up);let n=ca(e.quaternion).normalize();e.position.copy(la(n,sa.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 ea&&!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=ca(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(sa.DEFAULT_UP),e.camera.lookAt(n)}syncOrbitControls(e,t,n,r){let i=ca(t.quaternion),a=sa.DEFAULT_UP.clone().applyQuaternion(t.quaternion),o=la(i,r,n);e.position.copy(o),e.up.copy(a),e.camera.lookAt(n)}},da=e=>new ua(e),fa=(e,t,n)=>{da(n).syncGizmoWithMain({camera:e,position:e.position,quaternion:e.quaternion,up:e.up},{camera:t,position:t.position,quaternion:t.quaternion,up:t.up})},pa=(e,t,n)=>{da(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)},ma=()=>{try{let e=document.createElement(`canvas`);return!!(window.WebGLRenderingContext&&(e.getContext(`webgl`)||e.getContext(`experimental-webgl`)))}catch{return!1}},ha=()=>ma()?new n.WebGLRenderer({alpha:!0,antialias:!1}):(console.error(`WebGL is not supported in this environment.`),null),ga=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},_a=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}},va=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:_a.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}},ya=(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},ba=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 ta.BACK:return new n.Euler(0,Math.PI,0);case ta.RIGHT:return new n.Euler(0,-Math.PI/2,0);case ta.LEFT:return new n.Euler(0,Math.PI/2,0);case ta.TOP:return new n.Euler(Math.PI/2,0,0);case ta.BOTTOM:return new n.Euler(-Math.PI/2,0,0);case ta.FRONT:default:return new n.Euler(0,0,0)}}createWireframe(){let e=$.CUBE_SIZE+$.EDGE_SECTION_SIZE,t=va.createWireframe([e,e,e]);return t.userData.gizmoCube=this,t}createEdgeBox(e,t,n){let r=va.createEdgeBox(e,t,n);return r.userData.gizmoCube=this,r}createCornerCube(e,t){let n=va.createCornerCube(e,t);return n.userData.gizmoCube=this,n}createFace(e,t,n){let r=va.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=ya(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=aa;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}}},xa=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 Vi(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 ba({initialFace:this.options?.initialFace??ta.FRONT}).create();this.gizmoScene.add(e),ga(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(na)?.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)}},Sa=(e,t)=>{let n;return function(...r){n||(e.apply(this,r),n=!0,setTimeout(()=>n=!1,t))}};function Ca(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 wa=(e,t,n,r)=>(r.setFromCamera(e,t),r.intersectObjects(n.children,!0)),Ta=e=>{let t=[`Wireframe`,``];return e.find(e=>!t.includes(e.object.name))?.object||null};function Ea(e,t,n,r){return!t||!n?null:Ta(wa(e,t,n,r))}function Da(e,t){let n=e?.userData.gizmoCube;if(e&&n){n.handleClick();let e=n.vectorToCube;e&&t(e)}}var Oa={radius:2.1,color:12369854,tubeRadius:.1,tubeSegments:8,numPoints:64,tubeOffset:1.5},ka={size:.2,depth:.1,heightRatio:1.4,segments:1},Aa=class{constructor(e={}){this.config={...Oa,...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=na,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,ra),r(t,ia)]}createArrowHeads([e,t]){let{size:r,depth:i,heightRatio:a,segments:o}=ka,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,ra),l(t.getPoint(1),this.calculateArrowRotation(t.getTangent(1))-Math.PI/2,ia)]}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)}},ja=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)},Ma=25,Na=200;function Pa({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(na),t=ja(i);if(e&&t){r.remove(e);return}if(e||t)return;let n=new Aa().create();n.rotation.copy(i.rotation),r.add(n)},[r,i]),f=(0,t.useCallback)(()=>{let e=r.getObjectByName(na);e&&r.remove(e)},[r]),p=(0,t.useCallback)(Sa(t=>{if(!o.current||!e)return;Ca(t,e,u);let n=wa(u,i,r,l),a=Ta(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/Ma),[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===ia?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)<Na){Ca(t,e,u);let n=Ea(u,i,r,l);n!=null&&n.name&&oa.includes(n.name)?h(n):Da(n,a)}s.current=null,c.current=null},[h,a,e,i,r,l,u]),onMouseLeave:f}}var Fa=({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)(()=>ha()),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:_}=Pa({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),Ni(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 xa({gizmoParams:{gizmoDiv:t,gizmoScene:l,gizmoRenderer:u,gizmoCamera:d},mainParams:{mainCamera:e,mainControls:i,renderGizmo:p},syncFunctions:{syncGizmoCameraWithMain:fa,syncMainCameraWithGizmo:pa},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&&(fa(d,e,l),p())},[e,p]),(0,r.jsx)(`div`,{className:a?`${a}`:`gizmo-default`,ref:c})},Ia=10,La=e=>({top:e.startsWith(`top`)?Ia:`auto`,bottom:e.startsWith(`bottom`)?Ia:`auto`,left:e.endsWith(`left`)?Ia:`auto`,right:e.endsWith(`right`)?Ia:`auto`}),Ra=({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,...La(i)},children:(0,r.jsx)(Fa,{camera:e,controls:o,render:n})})},za=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}},Ba=`(prefers-reduced-motion: reduce)`,Va=()=>typeof window<`u`&&typeof window.matchMedia==`function`,Ha=e=>{if(!Va())return()=>{};let t=window.matchMedia(Ba);return t.addEventListener(`change`,e),()=>t.removeEventListener(`change`,e)},Ua=()=>Va()&&window.matchMedia(Ba).matches;function Wa({status:e,label:n,color:i,backdrop:a}){let o=(0,t.useSyncExternalStore)(Ha,Ua,()=>!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 Ga=`-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`,Ka={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)`},qa=Object.keys(mi);function Ja({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`,...Ka},children:qa.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:Ga,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 Ya=`#softbox-ar-failed`;function Xa(){return typeof document>`u`||typeof navigator>`u`?null:document.createElement(`a`).relList?.supports?.(`ar`)?`quick-look`:/android/i.test(navigator.userAgent)?`scene-viewer`:null}function Za(e){if(typeof window>`u`||typeof e!=`string`||e.length===0)return null;try{let t=new URL(e,window.location.href);return t.protocol===`https:`?t.toString():null}catch{return null}}function Qa(e,t){let n=`file=${encodeURIComponent(e)}&mode=ar_preferred`;t&&(n+=`&title=${encodeURIComponent(t)}`);let r=new URL(window.location.href);return r.hash=Ya,`intent://arvr.google.com/scene-viewer/1.0?${n}#Intent;scheme=https;package=com.google.ar.core;action=android.intent.action.VIEW;S.browser_fallback_url=${encodeURIComponent(r.toString())};end;`}function $a(e){let t=document.createElement(`a`);t.rel=`ar`,t.appendChild(document.createElement(`img`)),t.href=e,t.click()}function eo(e){let t=document.createElement(`a`);t.href=e,t.click()}var to={"top-left":{top:16,left:16},"top-right":{top:16,right:16},"bottom-left":{bottom:16,left:16},"bottom-right":{bottom:16,right:16}};function no({source:e,options:n,clearPresetRow:i}){let[a,o]=(0,t.useState)(null);(0,t.useEffect)(()=>{o(Xa())},[]);let[s,c]=(0,t.useState)(!1);(0,t.useEffect)(()=>{let e=()=>{window.location.hash===`#softbox-ar-failed`&&(history.replaceState(null,``,window.location.pathname+window.location.search),c(!0))};return window.addEventListener(`hashchange`,e),()=>window.removeEventListener(`hashchange`,e)},[]);let l=Za(e),u=(0,t.useMemo)(()=>{if(s)return null;if(a===`quick-look`&&n.iosSrc){let e=n.iosSrc;return()=>$a(e)}return a===`scene-viewer`&&l?()=>eo(Qa(l,n.title)):null},[s,a,n.iosSrc,n.title,l]);if(!u)return null;let d={...to[n.placement??`bottom-left`]};return i&&d.bottom!==void 0&&(d.bottom=64),(0,r.jsx)(`button`,{type:`button`,"data-testid":`viewer-ar-button`,"aria-label":`View in your space (AR)`,onClick:u,style:{position:`absolute`,zIndex:10,padding:`8px 16px`,borderRadius:999,color:`#111318`,fontFamily:Ga,fontSize:13,fontWeight:600,lineHeight:1,cursor:`pointer`,...d,...Ka},children:`AR`})}var ro=400;function io({src:e,visible:n}){let[i,a]=(0,t.useState)(!1);return(0,t.useEffect)(()=>{if(n)return;let e=setTimeout(()=>a(!0),500);return()=>clearTimeout(e)},[n]),i?null:(0,r.jsx)(`img`,{"data-testid":`viewer-poster`,src:e,alt:``,"aria-hidden":`true`,draggable:!1,onTransitionEnd:()=>{n||a(!0)},style:{position:`absolute`,inset:0,width:`100%`,height:`100%`,objectFit:`cover`,zIndex:15,pointerEvents:n?`auto`:`none`,opacity:+!!n,transition:`opacity ${ro}ms ease`}})}var ao={enabled:!0,label:`Loading…`,color:`#ffffff`,backdrop:`rgba(15,16,20,0.6)`};function oo(e){return e===void 0||e===!0?ao:e===!1?{...ao,enabled:!1}:{enabled:e.enabled??!0,label:e.label??ao.label,errorLabel:e.errorLabel,color:e.color??ao.color,backdrop:e.backdrop??ao.backdrop}}var so=()=>new e.F(`Viewer is not ready yet`,e.P.COMPONENT_NOT_MOUNTED),co=(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}=Ci(i.preset??a,i.ui),{viewer:h,isInitialized:g,initError:_}=xi(d,wi(i,f,o,s,c)),v=Ti(h,g,n),y=Di(h);Oi(h,_,i);let b=h?e.n(h.getCamera()):null,x=h?e.r(h.getControls()):null,S=h?e.a(h.getRenderer()):null,C=(0,t.useCallback)(()=>{h?.requestRender()},[h]),ee=i.helpers?.gizmo!==void 0&&i.helpers.gizmo!==!1,w=typeof i.helpers?.gizmo==`object`?i.helpers.gizmo:{},T=i.ar===!0?{}:i.ar||null,[E,D]=(0,t.useState)(null);(0,t.useEffect)(()=>{if(!h){D(null);return}let e=()=>D(h.getModelUrl());return e(),y.on(`model:loaded`,e),()=>y.off(`model:loaded`,e)},[h,y]);let te=E??n,ne=i.poster||null,[re,ie]=(0,t.useState)(!1);(0,t.useEffect)(()=>{if(!ne||re)return;if(v.status===`loaded`){ie(!0);return}let e=!1,t=()=>{e=!0},n=()=>{e&&ie(!0)};return y.on(`model:loaded`,t),y.on(`render:complete`,n),()=>{y.off(`model:loaded`,t),y.off(`render:complete`,n)}},[ne,re,y]);let O=(0,t.useMemo)(()=>oo(i.loadingIndicator),[i.loadingIndicator]),k=v.status===`error`||!!_,ae=O.enabled&&(v.status===`loading`||k),oe=!re&&!(k&&!O.enabled);return(0,t.useImperativeHandle)(u,()=>({scene:h?e.o(h.getScene()):null,camera:b,renderer:S,controls:x,events:y,loadModel:async e=>{if(!h)throw so();let t=typeof e==`string`?e:new A(e),n=await h.loadModel(t);if(!n.ok)throw n.error},captureStill:async e=>{if(!h)throw so();let t=await h.captureStill(e);if(!t.ok)throw t.error;return t.value},captureVideo:async e=>{if(!h)throw so();let t=await h.captureVideo(e);if(!t.ok)throw t.error;return t.value},getAnimationNames:()=>h?.getAnimationNames()??[],getVariantNames:()=>h?.getVariantNames()??[],setVariant:e=>{if(!h)throw so();let t=h.setMaterialVariant(e);if(!t.ok)throw t.error},playAnimations:e=>{if(!h)throw so();let t=h.playAnimations(e);if(!t.ok)throw t.error},pauseAnimations:()=>{h?.pauseAnimations()},setEnvironmentMap:async e=>{if(!h)throw so();let t=await h.setEnvironmentMap(e);if(!t.ok)throw t.error},resetEnvironment:()=>{if(!h)throw so();let e=h.resetEnvironment();if(!e.ok)throw e.error},setBackgroundImage:async e=>{if(!h)throw so();let t=await h.setBackgroundImage(e);if(!t.ok)throw t.error},setBackgroundColor:e=>{if(!h)throw so();let t=h.setBackgroundColor(e);if(!t.ok)throw t.error},dispose:()=>{h?.dispose()}}),[h,b,S,x,y]),(0,r.jsx)(za,{children:(0,r.jsx)(Ai,{viewer:h,canvasRef:d,children:(0,r.jsxs)(`div`,{style:{position:`relative`,width:`100%`,height:`100%`},children:[(0,r.jsx)(Mi,{}),ee&&g&&b&&x&&(0,r.jsx)(Ra,{camera:b,controls:x,render:C,placement:w.placement,size:w.size}),ae&&(0,r.jsx)(Wa,{status:k?`error`:`loading`,label:k?O.errorLabel??_?.message??v.error??`Failed to load model`:O.label,color:O.color,backdrop:O.backdrop}),p&&(0,r.jsx)(Ja,{active:f??`studio`,onSelect:m}),T&&(0,r.jsx)(no,{source:te,options:T,clearPresetRow:p}),ne&&(0,r.jsx)(io,{src:ne,visible:oe}),l]})})})});co.displayName=`SimpleViewer`;var lo=(0,t.forwardRef)((e,t)=>(0,r.jsx)(co,{ref:t,...e}));lo.displayName=`SimpleViewer`;var uo=()=>(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 fo({position:e,occlude:n=!1,children:i}){let{viewer:a}=ji(),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)(uo,{})})}exports.ControlType=Lr,exports.DEFAULT_OUTDOOR_CONCRETE_TEXTURES=ui,exports.DEFAULT_OUTDOOR_HDRI_URL=li,exports.DEFAULT_SCENE=fi,exports.DEFAULT_STUDIO_LOOK=Rr,exports.ErrorCode=e.P,exports.Hotspot=fo,exports.SimpleViewer=lo,exports.ThreeViewerError=e.F,exports.TypedEventEmitter=e.M,exports.VIEWER_PRESETS=mi,exports.VIEWER_SCENES=di,exports.defaultOptions=ci,exports.resolvePreset=hi,exports.resolveScene=pi;
|
|
115
|
+
`;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}},Pr=class extends Nr{constructor(e){console.warn(`RGBELoader has been deprecated. Please use HDRLoader instead.`),super(e)}},Fr=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,Ir(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,Ir(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,Ir(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,Ir(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,Ir(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,Ir(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 Ir(e){return new n.MeshLambertMaterial({color:0,emissive:16777215,emissiveIntensity:e})}var Lr=class extends n.Mesh{constructor(e,t,r,i=128){if(t<=0||r<=0||i<=0)throw Error(`THREE.GroundedSkybox: height, radius, and resolution must be positive.`);let a=new n.SphereGeometry(r,2*i,i);a.scale(1,1,-1);let o=a.getAttribute(`position`),s=new n.Vector3;for(let e=0;e<o.count;++e)if(s.fromBufferAttribute(o,e),s.y<0){let n=-t*3/2,r=s.y<n?-t/s.y:1-s.y*s.y/(3*n*n);s.multiplyScalar(r),s.toArray(o.array,3*e)}o.needsUpdate=!0,super(a,new n.MeshBasicMaterial({map:e,depthWrite:!1}))}},Rr=.42,zr=1.15,Br=.7,Vr=1;function Hr(e){e.traverse(e=>{let t=e;if(t.isPointLight){t.intensity*=Br;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)>Vr?t.emissiveIntensity*=zr:t.color&&t.color.multiplyScalar(Rr)}})}var Ur=function(e){return e.MapControls=`MapControls`,e.OrbitControls=`OrbitControls`,e}({}),Wr=`crisp`,Gr=256,Kr=.1,qr=100,Jr=`softbox-grounded-skybox`,Yr=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.N.ok(void 0)):e.N.err(new e.F(`Could not access Three.js renderer`,e.P.INITIALIZATION_FAILED))}catch(t){return e.N.err(new e.F(`Failed to initialize environment service`,e.P.INITIALIZATION_FAILED,{originalError:t}))}}async loadEnvironmentMap(t){try{let r=this.loadedTextures.get(t);if(r)return e.N.ok(new Xr(r));let i=t.split(`.`).pop()?.toLowerCase(),a;switch(i){case`hdr`:a=new Pr;break;case`exr`:a=new Mr;break;case`jpg`:case`jpeg`:case`png`:a=new n.TextureLoader;break;default:return e.N.err(new e.F(`Unsupported environment map format: ${i}`,e.P.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.N.err(new e.F(`Environment service was disposed during the load`,e.P.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.N.ok(new Xr(i))}return this.loadedTextures.set(t,o),e.N.ok(new Xr(o))}catch(n){return e.N.err(new e.F(`Failed to load environment map`,e.P.TEXTURE_LOAD_FAILED,{url:t,originalError:n}))}}applyToScene(t,r,i){try{let a=e.o(t);if(!a)return e.N.err(new e.F(`Scene must be ThreeSceneAdapter`,e.P.INVALID_PARAMETER));let o=e.s(r);if(!o)return e.N.err(new e.F(`Texture must be ThreeTextureAdapter`,e.P.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);o.mapping===n.CubeUVReflectionMapping?s?a.__originalEnvironmentTexture=s:delete a.__originalEnvironmentTexture:o.mapping===n.EquirectangularReflectionMapping&&(a.__originalEnvironmentTexture=o),(i?.setBackground??!0)&&(ce(a),o.mapping===n.CubeUVReflectionMapping&&s?.mapping===n.EquirectangularReflectionMapping?a.background=s:a.background=o),this.removeGroundedSkybox(a);let c=o.mapping===n.EquirectangularReflectionMapping?o:s?.mapping===n.EquirectangularReflectionMapping?s:null;return i?.groundProjection&&c&&this.addGroundedSkybox(a,c,i.groundProjection,i.backgroundIntensity),e.N.ok(void 0)}catch(t){return e.N.err(new e.F(`Failed to apply environment to scene`,e.P.SCENE_OPERATION_FAILED,{originalError:t}))}}addGroundedSkybox(t,n,r,i){let a=new Lr(n,r.height,r.radius);a.name=Jr,a.userData[e.l]=!0,a.userData[e.m]=!0;let o=Array.isArray(a.material)?a.material:[a.material];for(let t of o)t.userData[e.h]=!0,i!==void 0&&`color`in t&&t.color.setScalar(i);a.position.y=r.height-.01,t.add(a)}removeGroundProjection(t){let n=e.o(t);n&&this.removeGroundedSkybox(n)}removeGroundedSkybox(e){let t=e.getObjectByName(Jr);t&&(t.removeFromParent(),t.geometry.dispose(),(Array.isArray(t.material)?t.material:[t.material]).forEach(e=>e.dispose()))}getOriginalEnvironmentTexture(e){let t=this.loadedTextures.get(e+`_original`);return t?new Xr(t):null}async setBackgroundImage(t,r){try{let i=e.o(t);if(!i)return e.N.err(new e.F(`Scene must be ThreeSceneAdapter`,e.P.INVALID_PARAMETER));let a=await this.loadBackgroundTexture(r);return a.colorSpace=n.SRGBColorSpace,a.needsUpdate=!0,se(a),he(a),ce(i),i.background=a,e.N.ok(void 0)}catch(t){return e.N.err(new e.F(`Failed to set background image`,e.P.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=Wr){try{if(!this.pmremGenerator)return e.N.err(new e.F(`Environment service not initialized`,e.P.INITIALIZATION_FAILED));let n=this.studioBakes.get(t);if(n)return e.N.ok(new Xr(n.pmremTexture));let r=new Fr;t!==`soft`&&Hr(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.N.ok(new Xr(a))}catch(t){return e.N.err(new e.F(`Failed to create studio environment`,e.P.TEXTURE_LOAD_FAILED,{originalError:t}))}}captureStudioCubeOriginal(e,t,r){if(this.threeRenderer)try{let i=new n.WebGLCubeRenderTarget(Gr,{type:n.HalfFloatType}),a=new n.CubeCamera(Kr,qr,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}},Xr=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}},Zr=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)}},Qr=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 Zr(r).alignToFloor(),e.N.ok(void 0)):e.N.err(new e.F(`Could not get Three.js object for floor alignment`,e.P.INVALID_PARAMETER))}catch(t){return e.N.err(new e.F(`Failed to align object to floor`,e.P.OPERATION_FAILED,{originalError:t}))}}},$r={touch:10,default:5},ei=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`?$r.touch:$r.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.i(o()),l=e.n(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.b(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 k(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()}},ti=.001,ni={visible:!1},ri=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.n(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)?ni:(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.i(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-ti)}},ii=class{createProjector(e){return new ri(e)}},ai=class{constructor(){this.mixer=null,this.clips=[],this.activeActions=[],this.playing=!1,this.speed=1}attach(t){this.detach();let r=e.i(t);if(!r)return;let i=oi(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.N.err(new e.F(`Cannot play animation clip '${t}': no animation clips are attached`,e.P.INVALID_STATE));if(!this.clips.some(e=>e.name===t)){let n=this.clips.map(e=>e.name);return e.N.err(new e.F(`Unknown animation clip '${t}'. Available clips: ${n.join(`, `)}`,e.P.INVALID_PARAMETER))}}if(!this.mixer)return e.N.ok(void 0);if(!this.playing&&this.activeActions.length>0&&t===void 0)return this.playing=!0,e.N.ok(void 0);let n=t?this.clips.filter(e=>e.name===t):this.clips;if(n.length===0)return e.N.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.N.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 oi(e){let t=null;return e.traverse(e=>{!t&&(e.animations?.length??0)>0&&(t=e)}),t}var si=class{static createViewer(e,t){a(t.units);let n=new F(e),r=new A,i=this.createCamera(t),o=this.createControls(i.getThreeCamera(),e,t),s=new ci().createDefaultLoader({renderer:n.getThreeRenderer()??void 0,bvh:t.selection?.bvh,...t.loaders}),c=new nr,l=new Yr,u=new rr,d=new Qr,f=new ei,p=new ii,m=new ai,h=Se.convertRendererOptions(t.renderer||{});return h.preserveDrawingBuffer=!0,new ae({renderer:n,scene:r,camera:i,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=pe.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||Ur.OrbitControls,a;a=i===Ur.MapControls?new fn(e,t):new dn(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}},ci=class extends Lt{createDefaultLoader(e={}){return Lt.createLoader(`model.glb`,e)}},li=[`toneMappingExposure`,`bloom`,`vignette`,`filmGrain`,`colorGrade`],ui=[`environmentIntensity`],di=[`autoRotate`,`autoRotateSpeed`],fi=[`enabled`];function pi(e){let t={backgroundColor:e.backgroundColor,backgroundColorEdge:e.backgroundColorEdge};return`variant`in e&&(t.variant=e.variant??null),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 mi={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:Wr},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:Ur.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}},hi=`https://dl.polyhaven.org/file/ph-assets/HDRIs/hdr/2k/kloofendal_48d_partly_cloudy_puresky_2k.hdr`,gi={texture:`https://dl.polyhaven.org/file/ph-assets/Textures/jpg/1k/concrete_floor_02/concrete_floor_02_diff_1k.jpg`,normalMap:`https://dl.polyhaven.org/file/ph-assets/Textures/jpg/1k/concrete_floor_02/concrete_floor_02_nor_gl_1k.jpg`,roughnessMap:`https://dl.polyhaven.org/file/ph-assets/Textures/jpg/1k/concrete_floor_02/concrete_floor_02_rough_1k.jpg`},_i={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}}},outdoor_concrete:{helpers:{grid:{type:`concrete_disc`,styleOptions:{...gi}},studioEnvironment:!0},environment:{url:hi,groundProjection:!0},lighting:{ambientLight:{intensity:.22},hemisphereLight:{intensity:.38},directionalLight:{intensity:2.6,color:`#fff2e2`,position:[-70,52,18]},fillLight:{intensity:.25},rimLight:{intensity:.25}}}},vi=`studio_dome`;function yi(e){return e?_i[e]??{}:{}}var bi={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 xi(e){return e?bi[e]??{}:{}}function Si(e,t){return _(_(_(e,yi(t.scene)),xi(t.preset)),t)}var Ci=(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 wi(e){let n=(0,t.useMemo)(()=>JSON.stringify({pathTracing:Ci(e.pathTracing,...fi),staticScene:e.staticScene,renderer:Ci(e.renderer,...li),camera:e.camera,controls:Ci(e.controls,...di),environment:Ci(e.environment,...ui),scene:e.scene??`studio_dome`,lighting:e.lighting,helpers:Ci(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=Si(mi,e);return JSON.stringify(pi(t))},[e.preset,e.backgroundColor,e.backgroundColorEdge,e.variant,e.renderer,e.environment,e.controls,e.animations,e.pathTracing]);return{options:(0,t.useMemo)(()=>e,[n,r]),structuralKey:n,runtimeKey:r}}var Ti=`200px`;function Ei(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:Ti});return a.observe(t),()=>a.disconnect()},[e,n,r]),r}function Di(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}=wi(n),p=Ei(e,(n.loading??`eager`)===`lazy`);return(0,t.useEffect)(()=>{if(!p||!e.current||r.current)return;l(null);let t=Si(mi,u),n;try{n=si.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=Si(mi,u);a.updateOptions(pi(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 Oi(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 ki(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 Ai(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 ji(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 k(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 Mi=class{static toThreeObject(t){let r=e.i(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.n(t)??new n.PerspectiveCamera}static toThreeControls(t){return e.r(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 Ni(n){let r=(0,t.useRef)(new e.M);return Oi(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`,Mi.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`,Mi.convertControlsChange(e)),"object:selected":e=>r.current.emit(`object:selected`,Mi.convertObjectSelected(e)),error:e=>r.current.emit(`error`,e)}),[])),r.current}function Pi(e,n,r){let i=(0,t.useRef)(r);i.current=r,Oi(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 Fi=(0,t.createContext)(null);function Ii({viewer:e,canvasRef:n,children:i}){let a=(0,t.useMemo)(()=>({viewer:e,canvasRef:n}),[e,n]);return(0,r.jsx)(Fi.Provider,{value:a,children:i})}function Li(){let e=(0,t.useContext)(Fi);if(!e)throw Error(`useViewerContext must be used within ViewerProvider`);return e}function Ri(){let{canvasRef:e}=Li();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 zi=(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)},Bi={type:`change`},Vi={type:`start`},Hi={type:`end`},Ui=new n.Ray,Wi=new n.Plane,Gi=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},Ki=1e-6,qi=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=Yi.bind(this),this._onPointerDown=Ji.bind(this),this._onPointerUp=Xi.bind(this),this._onContextMenu=ra.bind(this),this._onMouseWheel=$i.bind(this),this._onKeyDown=ea.bind(this),this._onTouchStart=ta.bind(this),this._onTouchMove=na.bind(this),this._onMouseDown=Zi.bind(this),this._onMouseMove=Qi.bind(this),this._interceptControlDown=ia.bind(this),this._interceptControlUp=aa.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(Bi),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):(Ui.origin.copy(this.object.position),Ui.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(Ui.direction))<Gi?this.object.lookAt(this.target):(Wi.setFromNormalAndCoplanarPoint(this.object.up,this.target),Ui.intersectPlane(Wi,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)>Ki||8*(1-this._lastQuaternion.dot(this.object.quaternion))>Ki||this._lastTargetPosition.distanceToSquared(this.target)>Ki?(this.dispatchEvent(Bi),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 Ji(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 Yi(e){this.enabled!==!1&&(e.pointerType===`touch`?this._onTouchMove(e):this._onMouseMove(e))}function Xi(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(Hi),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 Zi(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(Vi)}function Qi(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 $i(e){this.enabled===!1||this.enableZoom===!1||this.state!==Q.NONE||(e.preventDefault(),this.dispatchEvent(Vi),this._handleMouseWheel(this._customWheelEvent(e)),this.dispatchEvent(Hi))}function ea(e){this.enabled!==!1&&this._handleKeyDown(e)}function ta(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(Vi)}function na(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 ra(e){this.enabled!==!1&&e.preventDefault()}function ia(e){e.key===`Control`&&(this._controlActive=!0,this.domElement.getRootNode().addEventListener(`keyup`,this._interceptControlUp,{passive:!0,capture:!0}))}function aa(e){e.key===`Control`&&(this._controlActive=!1,this.domElement.getRootNode().removeEventListener(`keyup`,this._interceptControlUp,{passive:!0,capture:!0}))}var oa=class extends qi{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},sa=(e=>(e.FRONT=`FRONT`,e.BACK=`BACK`,e.RIGHT=`RIGHT`,e.LEFT=`LEFT`,e.TOP=`TOP`,e.BOTTOM=`BOTTOM`,e))(sa||{});new n.Vector3(0,1,0);var ca=`rotation-arrows-name`,la=`left-rotation-arrow-name`,ua=`right-rotation-arrow-name`,da=`gizmo-group-name`,fa=[ua,la],pa={GIZMO_DISTANCE:8,DEFAULT_UP:new n.Vector3(0,1,0),FORWARD:new n.Vector3(0,0,-1)},ma=e=>pa.FORWARD.clone().applyQuaternion(e),ha=(e,t,r=new n.Vector3)=>r.clone().add(e.multiplyScalar(-t)),ga=class{constructor(e,t=ca){this.gizmoScene=e,this.gizmoArrowsName=t}syncGizmoWithMain(e,t){e.quaternion.copy(t.quaternion),e.up.copy(t.up);let n=ma(e.quaternion).normalize();e.position.copy(ha(n,pa.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 oa&&!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=ma(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(pa.DEFAULT_UP),e.camera.lookAt(n)}syncOrbitControls(e,t,n,r){let i=ma(t.quaternion),a=pa.DEFAULT_UP.clone().applyQuaternion(t.quaternion),o=ha(i,r,n);e.position.copy(o),e.up.copy(a),e.camera.lookAt(n)}},_a=e=>new ga(e),va=(e,t,n)=>{_a(n).syncGizmoWithMain({camera:e,position:e.position,quaternion:e.quaternion,up:e.up},{camera:t,position:t.position,quaternion:t.quaternion,up:t.up})},ya=(e,t,n)=>{_a(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)},ba=()=>{try{let e=document.createElement(`canvas`);return!!(window.WebGLRenderingContext&&(e.getContext(`webgl`)||e.getContext(`experimental-webgl`)))}catch{return!1}},xa=()=>ba()?new n.WebGLRenderer({alpha:!0,antialias:!1}):(console.error(`WebGL is not supported in this environment.`),null),Sa=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},Ca=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}},wa=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:Ca.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}},Ta=(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},Ea=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 sa.BACK:return new n.Euler(0,Math.PI,0);case sa.RIGHT:return new n.Euler(0,-Math.PI/2,0);case sa.LEFT:return new n.Euler(0,Math.PI/2,0);case sa.TOP:return new n.Euler(Math.PI/2,0,0);case sa.BOTTOM:return new n.Euler(-Math.PI/2,0,0);case sa.FRONT:default:return new n.Euler(0,0,0)}}createWireframe(){let e=$.CUBE_SIZE+$.EDGE_SECTION_SIZE,t=wa.createWireframe([e,e,e]);return t.userData.gizmoCube=this,t}createEdgeBox(e,t,n){let r=wa.createEdgeBox(e,t,n);return r.userData.gizmoCube=this,r}createCornerCube(e,t){let n=wa.createCornerCube(e,t);return n.userData.gizmoCube=this,n}createFace(e,t,n){let r=wa.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=Ta(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=da;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}}},Da=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 qi(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 Ea({initialFace:this.options?.initialFace??sa.FRONT}).create();this.gizmoScene.add(e),Sa(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(ca)?.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)}},Oa=(e,t)=>{let n;return function(...r){n||(e.apply(this,r),n=!0,setTimeout(()=>n=!1,t))}};function ka(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 Aa=(e,t,n,r)=>(r.setFromCamera(e,t),r.intersectObjects(n.children,!0)),ja=e=>{let t=[`Wireframe`,``];return e.find(e=>!t.includes(e.object.name))?.object||null};function Ma(e,t,n,r){return!t||!n?null:ja(Aa(e,t,n,r))}function Na(e,t){let n=e?.userData.gizmoCube;if(e&&n){n.handleClick();let e=n.vectorToCube;e&&t(e)}}var Pa={radius:2.1,color:12369854,tubeRadius:.1,tubeSegments:8,numPoints:64,tubeOffset:1.5},Fa={size:.2,depth:.1,heightRatio:1.4,segments:1},Ia=class{constructor(e={}){this.config={...Pa,...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=ca,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,la),r(t,ua)]}createArrowHeads([e,t]){let{size:r,depth:i,heightRatio:a,segments:o}=Fa,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,la),l(t.getPoint(1),this.calculateArrowRotation(t.getTangent(1))-Math.PI/2,ua)]}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)}},La=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)},Ra=25,za=200;function Ba({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(ca),t=La(i);if(e&&t){r.remove(e);return}if(e||t)return;let n=new Ia().create();n.rotation.copy(i.rotation),r.add(n)},[r,i]),f=(0,t.useCallback)(()=>{let e=r.getObjectByName(ca);e&&r.remove(e)},[r]),p=(0,t.useCallback)(Oa(t=>{if(!o.current||!e)return;ka(t,e,u);let n=Aa(u,i,r,l),a=ja(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/Ra),[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===ua?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)<za){ka(t,e,u);let n=Ma(u,i,r,l);n!=null&&n.name&&fa.includes(n.name)?h(n):Na(n,a)}s.current=null,c.current=null},[h,a,e,i,r,l,u]),onMouseLeave:f}}var Va=({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)(()=>xa()),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:_}=Ba({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),zi(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 Da({gizmoParams:{gizmoDiv:t,gizmoScene:l,gizmoRenderer:u,gizmoCamera:d},mainParams:{mainCamera:e,mainControls:i,renderGizmo:p},syncFunctions:{syncGizmoCameraWithMain:va,syncMainCameraWithGizmo:ya},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&&(va(d,e,l),p())},[e,p]),(0,r.jsx)(`div`,{className:a?`${a}`:`gizmo-default`,ref:c})},Ha=10,Ua=e=>({top:e.startsWith(`top`)?Ha:`auto`,bottom:e.startsWith(`bottom`)?Ha:`auto`,left:e.endsWith(`left`)?Ha:`auto`,right:e.endsWith(`right`)?Ha:`auto`}),Wa=({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,...Ua(i)},children:(0,r.jsx)(Va,{camera:e,controls:o,render:n})})},Ga=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}},Ka=`(prefers-reduced-motion: reduce)`,qa=()=>typeof window<`u`&&typeof window.matchMedia==`function`,Ja=e=>{if(!qa())return()=>{};let t=window.matchMedia(Ka);return t.addEventListener(`change`,e),()=>t.removeEventListener(`change`,e)},Ya=()=>qa()&&window.matchMedia(Ka).matches;function Xa({status:e,label:n,color:i,backdrop:a}){let o=(0,t.useSyncExternalStore)(Ja,Ya,()=>!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 Za=`-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`,Qa={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)`},$a=Object.keys(bi);function eo({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`,...Qa},children:$a.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:Za,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 to=`#softbox-ar-failed`;function no(){return typeof document>`u`||typeof navigator>`u`?null:document.createElement(`a`).relList?.supports?.(`ar`)?`quick-look`:/android/i.test(navigator.userAgent)?`scene-viewer`:null}function ro(e){if(typeof window>`u`||typeof e!=`string`||e.length===0)return null;try{let t=new URL(e,window.location.href);return t.protocol===`https:`?t.toString():null}catch{return null}}function io(e,t){let n=`file=${encodeURIComponent(e)}&mode=ar_preferred`;t&&(n+=`&title=${encodeURIComponent(t)}`);let r=new URL(window.location.href);return r.hash=to,`intent://arvr.google.com/scene-viewer/1.0?${n}#Intent;scheme=https;package=com.google.ar.core;action=android.intent.action.VIEW;S.browser_fallback_url=${encodeURIComponent(r.toString())};end;`}function ao(e){let t=document.createElement(`a`);t.rel=`ar`,t.appendChild(document.createElement(`img`)),t.href=e,t.click()}function oo(e){let t=document.createElement(`a`);t.href=e,t.click()}var so={"top-left":{top:16,left:16},"top-right":{top:16,right:16},"bottom-left":{bottom:16,left:16},"bottom-right":{bottom:16,right:16}};function co({source:e,options:n,clearPresetRow:i}){let[a,o]=(0,t.useState)(null);(0,t.useEffect)(()=>{o(no())},[]);let[s,c]=(0,t.useState)(!1);(0,t.useEffect)(()=>{let e=()=>{window.location.hash===`#softbox-ar-failed`&&(history.replaceState(null,``,window.location.pathname+window.location.search),c(!0))};return window.addEventListener(`hashchange`,e),()=>window.removeEventListener(`hashchange`,e)},[]);let l=ro(e),u=(0,t.useMemo)(()=>{if(s)return null;if(a===`quick-look`&&n.iosSrc){let e=n.iosSrc;return()=>ao(e)}return a===`scene-viewer`&&l?()=>oo(io(l,n.title)):null},[s,a,n.iosSrc,n.title,l]);if(!u)return null;let d={...so[n.placement??`bottom-left`]};return i&&d.bottom!==void 0&&(d.bottom=64),(0,r.jsx)(`button`,{type:`button`,"data-testid":`viewer-ar-button`,"aria-label":`View in your space (AR)`,onClick:u,style:{position:`absolute`,zIndex:10,padding:`8px 16px`,borderRadius:999,color:`#111318`,fontFamily:Za,fontSize:13,fontWeight:600,lineHeight:1,cursor:`pointer`,...d,...Qa},children:`AR`})}var lo=400;function uo({src:e,visible:n}){let[i,a]=(0,t.useState)(!1);return(0,t.useEffect)(()=>{if(n)return;let e=setTimeout(()=>a(!0),500);return()=>clearTimeout(e)},[n]),i?null:(0,r.jsx)(`img`,{"data-testid":`viewer-poster`,src:e,alt:``,"aria-hidden":`true`,draggable:!1,onTransitionEnd:()=>{n||a(!0)},style:{position:`absolute`,inset:0,width:`100%`,height:`100%`,objectFit:`cover`,zIndex:15,pointerEvents:n?`auto`:`none`,opacity:+!!n,transition:`opacity ${lo}ms ease`}})}var fo={enabled:!0,label:`Loading…`,color:`#ffffff`,backdrop:`rgba(15,16,20,0.6)`};function po(e){return e===void 0||e===!0?fo:e===!1?{...fo,enabled:!1}:{enabled:e.enabled??!0,label:e.label??fo.label,errorLabel:e.errorLabel,color:e.color??fo.color,backdrop:e.backdrop??fo.backdrop}}var mo=()=>new e.F(`Viewer is not ready yet`,e.P.COMPONENT_NOT_MOUNTED),ho=(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}=ki(i.preset??a,i.ui),{viewer:h,isInitialized:g,initError:_}=Di(d,Ai(i,f,o,s,c)),v=ji(h,g,n),y=Ni(h);Pi(h,_,i);let b=h?e.n(h.getCamera()):null,x=h?e.r(h.getControls()):null,S=h?e.a(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=i.ar===!0?{}:i.ar||null,[T,E]=(0,t.useState)(null);(0,t.useEffect)(()=>{if(!h){E(null);return}let e=()=>E(h.getModelUrl());return e(),y.on(`model:loaded`,e),()=>y.off(`model:loaded`,e)},[h,y]);let ne=T??n,re=i.poster||null,[ie,ae]=(0,t.useState)(!1);(0,t.useEffect)(()=>{if(!re||ie)return;if(v.status===`loaded`){ae(!0);return}let e=!1,t=()=>{e=!0},n=()=>{e&&ae(!0)};return y.on(`model:loaded`,t),y.on(`render:complete`,n),()=>{y.off(`model:loaded`,t),y.off(`render:complete`,n)}},[re,ie,y]);let D=(0,t.useMemo)(()=>po(i.loadingIndicator),[i.loadingIndicator]),O=v.status===`error`||!!_,oe=D.enabled&&(v.status===`loading`||O),se=!ie&&!(O&&!D.enabled);return(0,t.useImperativeHandle)(u,()=>({scene:h?e.o(h.getScene()):null,camera:b,renderer:S,controls:x,events:y,loadModel:async e=>{if(!h)throw mo();let t=typeof e==`string`?e:new k(e),n=await h.loadModel(t);if(!n.ok)throw n.error},captureStill:async e=>{if(!h)throw mo();let t=await h.captureStill(e);if(!t.ok)throw t.error;return t.value},captureVideo:async e=>{if(!h)throw mo();let t=await h.captureVideo(e);if(!t.ok)throw t.error;return t.value},getAnimationNames:()=>h?.getAnimationNames()??[],getVariantNames:()=>h?.getVariantNames()??[],setVariant:e=>{if(!h)throw mo();let t=h.setMaterialVariant(e);if(!t.ok)throw t.error},playAnimations:e=>{if(!h)throw mo();let t=h.playAnimations(e);if(!t.ok)throw t.error},pauseAnimations:()=>{h?.pauseAnimations()},setEnvironmentMap:async e=>{if(!h)throw mo();let t=await h.setEnvironmentMap(e);if(!t.ok)throw t.error},resetEnvironment:()=>{if(!h)throw mo();let e=h.resetEnvironment();if(!e.ok)throw e.error},setBackgroundImage:async e=>{if(!h)throw mo();let t=await h.setBackgroundImage(e);if(!t.ok)throw t.error},setBackgroundColor:e=>{if(!h)throw mo();let t=h.setBackgroundColor(e);if(!t.ok)throw t.error},dispose:()=>{h?.dispose()}}),[h,b,S,x,y]),(0,r.jsx)(Ga,{children:(0,r.jsx)(Ii,{viewer:h,canvasRef:d,children:(0,r.jsxs)(`div`,{style:{position:`relative`,width:`100%`,height:`100%`},children:[(0,r.jsx)(Ri,{}),te&&g&&b&&x&&(0,r.jsx)(Wa,{camera:b,controls:x,render:ee,placement:C.placement,size:C.size}),oe&&(0,r.jsx)(Xa,{status:O?`error`:`loading`,label:O?D.errorLabel??_?.message??v.error??`Failed to load model`:D.label,color:D.color,backdrop:D.backdrop}),p&&(0,r.jsx)(eo,{active:f??`studio`,onSelect:m}),w&&(0,r.jsx)(co,{source:ne,options:w,clearPresetRow:p}),re&&(0,r.jsx)(uo,{src:re,visible:se}),l]})})})});ho.displayName=`SimpleViewer`;var go=(0,t.forwardRef)((e,t)=>(0,r.jsx)(ho,{ref:t,...e}));go.displayName=`SimpleViewer`;var _o=()=>(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 vo({position:e,occlude:n=!1,children:i}){let{viewer:a}=Li(),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)(_o,{})})}exports.ControlType=Ur,exports.DEFAULT_OUTDOOR_CONCRETE_TEXTURES=gi,exports.DEFAULT_OUTDOOR_HDRI_URL=hi,exports.DEFAULT_SCENE=vi,exports.DEFAULT_STUDIO_LOOK=Wr,exports.ErrorCode=e.P,exports.Hotspot=vo,exports.SimpleViewer=go,exports.ThreeViewerError=e.F,exports.TypedEventEmitter=e.M,exports.VIEWER_PRESETS=bi,exports.VIEWER_SCENES=_i,exports.defaultOptions=mi,exports.resolvePreset=xi,exports.resolveScene=yi;
|