@needle-tools/engine 4.8.8-next.12b5946 → 4.8.8-next.4b53212

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.
@@ -141,7 +141,7 @@ void main(){
141
141
  #__vconsole .vc-mask {
142
142
  overflow: hidden;
143
143
  }
144
- `,po?.prepend(i),s===!0&&Z_()<=0&&gb(),console.log("🌵 Debug console has loaded")}},e.onerror=()=>{console.warn("🌵 Debug console failed to load."+(window.crossOriginIsolated?"This page is using cross-origin isolation, so external scripts can't be loaded.":"")),Fa=!1,Mi=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function Yw(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("needle-console","🌵 Inspect glTF"),e=()=>document.querySelector("#__vc_plug_"+s._id+" iframe");return s.on("renderTab",function(t){const i=globalThis["needle:codegen_files"];if(!i||i.length===0)return;let n=globalThis["needle:codegen_files"][0];const o=n.indexOf("?");o>-1&&(n=n.substring(0,o));const a=location.protocol+"//"+location.host+location.pathname+"/"+n,l=encodeURIComponent(a);s.fullUrl="https://viewer.needle.tools?inspect&file="+l;var h='<iframe src="" style="width: 100%; height: 99%; border: none;"></iframe>';t(h)}),s.on("show",function(){const t=e();t&&t.src!==s.fullUrl&&(t.src=s.fullUrl)}),s.on("hide",function(){const t=e();t&&(t.src="")}),s.on("addTopBar",function(t){var i=new Array;i.push({name:"Open in new window ↗",onClick:function(n){window.open(s.fullUrl,"_blank"),Mi?.hide()}}),i.push({name:"Reload",onClick:function(n){const o=e();o&&(o.src=s.fullUrl)}}),i.push({name:"Fullscreen",onClick:function(n){const o=e();o.requestFullscreen?o.requestFullscreen():o.webkitRequestFullscreen instanceof Function&&o.webkitRequestFullscreen()}}),t(i)}),s}function Kw(){const s=document.querySelector("#__vconsole .vc-switch");return s||null}function Zw(){const s=document.querySelector("#__vconsole");return s||null}const yb=x("debugdefines");Ks('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";');Ks('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";');Ks('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";');Ks('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');Ks('globalThis["__NEEDLE_ENGINE_VERSION__"] = "4.8.8";');Ks('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');Ks('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Fri Sep 05 2025 14:20:13 GMT+0000 (Coordinated Universal Time)";');Ks('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const Ki="4.8.8",Ad="undefined",Xp="Fri Sep 05 2025 14:20:13 GMT+0000 (Coordinated Universal Time)";yb&&console.log(`Engine version: ${Ki} (generator: ${Ad})
144
+ `,po?.prepend(i),s===!0&&Z_()<=0&&gb(),console.log("🌵 Debug console has loaded")}},e.onerror=()=>{console.warn("🌵 Debug console failed to load."+(window.crossOriginIsolated?"This page is using cross-origin isolation, so external scripts can't be loaded.":"")),Fa=!1,Mi=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function Yw(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("needle-console","🌵 Inspect glTF"),e=()=>document.querySelector("#__vc_plug_"+s._id+" iframe");return s.on("renderTab",function(t){const i=globalThis["needle:codegen_files"];if(!i||i.length===0)return;let n=globalThis["needle:codegen_files"][0];const o=n.indexOf("?");o>-1&&(n=n.substring(0,o));const a=location.protocol+"//"+location.host+location.pathname+"/"+n,l=encodeURIComponent(a);s.fullUrl="https://viewer.needle.tools?inspect&file="+l;var h='<iframe src="" style="width: 100%; height: 99%; border: none;"></iframe>';t(h)}),s.on("show",function(){const t=e();t&&t.src!==s.fullUrl&&(t.src=s.fullUrl)}),s.on("hide",function(){const t=e();t&&(t.src="")}),s.on("addTopBar",function(t){var i=new Array;i.push({name:"Open in new window ↗",onClick:function(n){window.open(s.fullUrl,"_blank"),Mi?.hide()}}),i.push({name:"Reload",onClick:function(n){const o=e();o&&(o.src=s.fullUrl)}}),i.push({name:"Fullscreen",onClick:function(n){const o=e();o.requestFullscreen?o.requestFullscreen():o.webkitRequestFullscreen instanceof Function&&o.webkitRequestFullscreen()}}),t(i)}),s}function Kw(){const s=document.querySelector("#__vconsole .vc-switch");return s||null}function Zw(){const s=document.querySelector("#__vconsole");return s||null}const yb=x("debugdefines");Ks('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";');Ks('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";');Ks('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";');Ks('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');Ks('globalThis["__NEEDLE_ENGINE_VERSION__"] = "4.8.8";');Ks('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');Ks('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Fri Sep 05 2025 11:39:51 GMT+0000 (Coordinated Universal Time)";');Ks('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const Ki="4.8.8",Ad="undefined",Xp="Fri Sep 05 2025 11:39:51 GMT+0000 (Coordinated Universal Time)";yb&&console.log(`Engine version: ${Ki} (generator: ${Ad})
145
145
  Project built at ${Xp}`);const Fr=NEEDLE_PUBLIC_KEY,os="needle_isActiveInHierarchy",wo="builtin_components",wl="needle_editor_guid";function Ks(s){try{(0,eval)(s)}catch(e){yb&&console.error(e)}}let _b,ny=null;function Ji(){return _b}function Qp(s){if(s==null){console.warn("Oh no: someone tried registering a non-existend gltf-loader. When you see this log it might mean that needle-engine is being imported multiple times. Please check your project setup.");return}ny!==s&&(ny=s,_b=new s)}const ii=Symbol("shadowDomOwner"),Jw=x("debugpatch");function Ld(s,e,t,i){const n=Jw===e;if(!t&&!i)return;const o=e+"___needle";tS(s,e,t,i);const r=Object.getOwnPropertyDescriptor(s,e),a=s[e];n&&console.log("Patch",s.constructor.name,e,r,a),r?(n&&console.log("Apply patch with existing descriptor",s.constructor.name,e,r),typeof r.value=="function"&&(s[e]=oy(r.value,s,e))):(n&&console.log("Create patch with new property",s.constructor.name,e,r),Object.defineProperty(s,e,{set:function(l){if(typeof l=="function")this[o]=oy(l,s,e);else{const h=this[o];bb(s,e,this,h,l),this[o]=l,vb(s,e,this,h,l)}},get:function(){const l=this[o];return typeof l=="function"&&l[o]?l[o]:l}}))}function eS(s,e,t){const i=Yp(s,e);if(i)for(let n=i.length-1;n>=0;n--){const o=i[n];o.prefix===t&&(o.prefix=null),o.postfix===t&&(o.postfix=null),!o.prefix&&!o.postfix&&i.splice(n,1)}}const sy=Symbol("Needle:Patches:WrappedFunction");function oy(s,e,t){if(s[sy])return s;const i=function(...n){bb(e,t,this,...n);const o=s.apply(this,n);return vb(e,t,this,o,...n),o};return i[sy]=!0,i}const Lh="Needle:Patches";function Xf(){return globalThis[Lh]||(globalThis[Lh]=new WeakMap),globalThis[Lh]}function Yp(s,e){const t=Xf().get(s);return t?t.get(e):null}function tS(s,e,t,i){let n=Xf().get(s);n||(n=new Map,Xf().set(s,n));let o=n.get(e);o||(o=[],n.set(e,o)),o.push({prefix:t,postfix:i})}function bb(s,e,t,...i){if(!t)return;const n=Yp(s,e);if(n)for(const o of n)o.prefix?.call(t,...i)}function vb(s,e,t,i,...n){if(!t)return;const o=Yp(s,e);if(o)for(const r of o)r.postfix?.call(t,i,...n)}const ta=[];function Dd(s){ta.indexOf(s)===-1&&ta.push(s)}function iS(s){const e=ta.indexOf(s);e!==-1&&ta.splice(e,1)}const ia=[];function Kp(s){ia.indexOf(s)===-1&&ia.push(s)}function nS(s){const e=ia.indexOf(s);e!==-1&&ia.splice(e,1)}function xb(s){globalThis.dispatchEvent(new CustomEvent("needle-xrsession-start",{detail:s}));for(let e=0;e<ta.length;e++)ta[e](s)}function wb(s){globalThis.dispatchEvent(new CustomEvent("needle-xrsession-end",{detail:s}));for(let e=0;e<ia.length;e++)ia[e](s)}const He=x("debuginput");var Id=(s=>(s.Mouse="mouse",s.Touch="touch",s.Controller="controller",s.Hand="hand",s))(Id||{}),xe=(s=>(s.PointerDown="pointerdown",s.PointerUp="pointerup",s.PointerMove="pointermove",s.KeyDown="keydown",s.KeyUp="keyup",s.KeyPressed="keypress",s))(xe||{});class Qn extends PointerEvent{clientZ;deviceIndex;origin;source;mode;get isSpatial(){return this.mode!="screen"}get ray(){return this._ray||(this._ray=new c.Ray(this.space.worldPosition.clone(),this.space.worldForward.clone())),this._ray}set ray(e){this._ray=e}get hasRay(){return this._ray!==void 0}_ray;space;isClick=!1;isDoubleClick=!1;get used(){return this._used}_used=!1;use(){this._used=!0}get pointerId(){return this._pointerid}_pointerid;get pointerType(){return this._pointerType}_pointerType;get type(){return this._type}_type;metadata={};intersections=new Array;constructor(e,t,i){super(e,i),this.clientZ=i.clientZ,this._pointerid=i.pointerId,this._pointerType=i.pointerType,this._type=e,this.deviceIndex=i.deviceIndex,this.origin=i.origin,this.source=t,this.mode=i.mode,this._ray=i.ray,this.space=i.device}_immediatePropagationStopped=!1;get immediatePropagationStopped(){return this._immediatePropagationStopped}_propagationStopped=!1;get propagationStopped(){return this._immediatePropagationStopped||this._propagationStopped}stopImmediatePropagation(){this._immediatePropagationStopped=!0,super.stopImmediatePropagation(),this.source?.stopImmediatePropagation()}stopPropagation(){this._propagationStopped=!0,super.stopPropagation(),this.source?.stopPropagation(),He&&console.warn("Stop propagation...",this.pointerId,this.pointerType)}}class nl extends KeyboardEvent{source;constructor(e,t,i){super(e,i),this.source=t}stopImmediatePropagation(){super.stopImmediatePropagation(),this.source?.stopImmediatePropagation()}}class sS{key;keyType;source;constructor(e){this.key=e.key,this.keyType=e.type,this.source=e}}var Nt=(s=>(s[s.Early=-100]="Early",s[s.Default=0]="Default",s[s.Late=100]="Late",s))(Nt||{});class Sb{_eventListeners={};addEventListener(e,t,i){if(this._eventListeners[e]||(this._eventListeners[e]=[]),!t||typeof t!="function"){console.error("Invalid call to addEventListener: callback is required and must be a function!");return}i?i={...i}:i={};let n=0;i?.queue!=null&&(n=i.queue);const o=this._eventListeners[e],r=o.find(a=>a.priority===n);r?r.listeners.push({callback:t,options:i}):(o.push({priority:n,listeners:[{callback:t,options:i}]}),o.sort((a,l)=>a.priority-l.priority))}removeEventListener(e,t,i){if(!this._eventListeners[e]||!t)return;const n=this._eventListeners[e];if(i?.queue!=null){const o=n.find(a=>a.priority===i.queue);if(!o)return;const r=o.listeners.findIndex(a=>a.callback===t);r>=0&&o.listeners.splice(r,1)}else for(const o of n){const r=o.listeners.findIndex(a=>a.callback===t);r>=0&&o.listeners.splice(r,1)}}dispatchEvent(e){let t=!1;if(e instanceof nl){const i=this._eventListeners[e.type];if(i)for(const n of i)for(let o=0;o<n.listeners.length;o++){const r=n.listeners[o];if(r.options?.signal?.aborted){n.listeners.splice(o,1),o--;continue}r.options.once&&(n.listeners.splice(o,1),o--),r.callback(e)}}if(e instanceof Qn){const i=this._eventListeners[e.type];if(i)for(const n of i){if(t)break;for(let o=0;o<n.listeners.length;o++){const r=n.listeners[o];if(r.options?.signal?.aborted){n.listeners.splice(o,1),o--;continue}if(e.immediatePropagationStopped){t=!0,He&&console.log("immediatePropagationStopped",e.type);break}else e.propagationStopped&&(t=!0,He&&console.log("propagationStopped",e.type));r.options.once&&(n.listeners.splice(o,1),o--),r.callback(e)}}}}_doubleClickTimeThreshold=.2;_longPressTimeThreshold=1;get mousePosition(){return this._pointerPositions[0]}get mousePositionRC(){return this._pointerPositionsRC[0]}get mouseDown(){return this._pointerDown[0]}get mouseUp(){return this._pointerUp[0]}get mouseClick(){return this._pointerClick[0]}get mouseDoubleClick(){return this._pointerDoubleClick[0]}get mousePressed(){return this._pointerPressed[0]}get mouseWheelChanged(){return this.getMouseWheelChanged(0)}get click(){return this._pointerClick[0]}get doubleClick(){return this._pointerDoubleClick[0]}getGamepad(e=0){return typeof navigator<"u"&&"getGamepads"in navigator&&navigator.getGamepads()[e]||null}_setCursorTypes=[];setCursorPointer(){this.setCursor("pointer")}setCursorNormal(){this.unsetCursor("pointer")}setCursor(e){this._setCursorTypes.push(e),this._setCursorTypes.length>10&&this._setCursorTypes.shift(),this.updateCursor()}unsetCursor(e){for(let t=this._setCursorTypes.length-1;t>=0;t--)if(this._setCursorTypes[t]===e){this._setCursorTypes.splice(t,1),this.updateCursor();break}}updateCursor(){this._setCursorTypes?.length==0?this.context.domElement.style.cursor="default":this.context.domElement.style.cursor=this._setCursorTypes[this._setCursorTypes.length-1]}getIsPointerIdInUse(e){for(const t of this._pointerEventsPressed)if(t.pointerId===e&&t.used)return!0;return!1}getPointerPressedCount(){let e=0;for(let t=0;t<this._pointerPressed.length;t++)this._pointerPressed[t]&&e++;return e}getPointerPosition(e){return e>=this._pointerPositions.length?null:this._pointerPositions[e]}getPointerPositionLastFrame(e){return e>=this._pointerPositionsLastFrame.length?null:this._pointerPositionsLastFrame[e]}getPointerPositionDelta(e){return e>=this._pointerPositionsDelta.length?null:this._pointerPositionsDelta[e]}getPointerPositionRC(e){return e>=this._pointerPositionsRC.length?null:this._pointerPositionsRC[e]}getPointerDown(e){return e>=this._pointerDown.length?!1:this._pointerDown[e]}getPointerUp(e){return e>=this._pointerUp.length?!1:this._pointerUp[e]}getPointerPressed(e){return e>=this._pointerPressed.length?!1:this._pointerPressed[e]}getPointerClicked(e){return e>=this._pointerClick.length?!1:this._pointerClick[e]}getPointerDoubleClicked(e){return e>=this._pointerDoubleClick.length?!1:this._pointerDoubleClick[e]}getPointerDownTime(e){return e>=this._pointerDownTime.length?-1:this._pointerDownTime[e]}getPointerUpTime(e){return e>=this._pointerUpTime.length?-1:this._pointerUpTime[e]}getPointerLongPress(e){return e>=this._pointerDownTime.length?!1:this.getPointerPressed(e)&&this.context.time.time-this._pointerDownTime[e]>this._longPressTimeThreshold}getIsMouse(e){return e<0||e>=this._pointerTypes.length?!1:this._pointerTypes[e]==="mouse"}getIsTouch(e){return e<0||e>=this._pointerTypes.length?!1:this._pointerTypes[e]==="touch"}getTouchesPressedCount(){let e=0;for(let t=0;t<this._pointerPressed.length;t++)this._pointerPressed[t]&&this.getIsTouch(t)&&e++;return e}getMouseWheelChanged(e=0){return e>=this._mouseWheelChanged.length?!1:this._mouseWheelChanged[e]}getMouseWheelDeltaY(e=0){return e>=this._mouseWheelDeltaY.length?0:this._mouseWheelDeltaY[e]}getPointerEvent(e){if(!(e>=this._pointerEvent.length))return this._pointerEvent[e]??void 0}*foreachPointerId(e){for(let t=0;t<this._pointerTypes.length;t++)if(this._pointerIsActive(t)){if(e!==void 0){const i=this._pointerTypes[t];if(Array.isArray(e)){let n=!1;for(const o of e)if(i===o){n=!0;break}if(!n)continue}else if(e!==i)continue}yield t}}*foreachTouchId(){for(let e=0;e<this._pointerTypes.length;e++)this._pointerTypes[e]==="touch"&&this._pointerIsActive[e]&&(yield e)}_pointerIsActive(e){return e<0?!1:this._pointerPressed[e]||this._pointerDown[e]||this._pointerUp[e]}context;_pointerDown=[!1];_pointerUp=[!1];_pointerClick=[!1];_pointerDoubleClick=[!1];_pointerPressed=[!1];_pointerPositions=[new c.Vector2];_pointerPositionsLastFrame=[new c.Vector2];_pointerPositionsDelta=[new c.Vector2];_pointerPositionsRC=[new c.Vector2];_pointerPositionDown=[new c.Vector3];_pointerDownTime=[];_pointerUpTime=[];_pointerUpTimestamp=[];_pointerIds=[];_pointerTypes=[""];_mouseWheelChanged=[!1];_mouseWheelDeltaY=[0];_pointerEvent=[];_pointerEventsPressed=[];_pointerSpace=[];_pressedStack=new Map;onDownButton(e,t){let i=this._pressedStack.get(e);i||(i=[],this._pressedStack.set(e,i)),i.push(t)}onReleaseButton(e,t){const i=this._pressedStack.get(e);if(!i)return;const n=i.indexOf(t);n>=0&&i.splice(n,1)}getFirstPressedButtonForPointer(e){const t=this._pressedStack.get(e);if(t)return t[0]}getLatestPressedButtonForPointer(e){const t=this._pressedStack.get(e);if(t)return t[t.length-1]}getKeyDown(e){if(e!==void 0)return this.isKeyDown(e);for(const t in this.keysPressed){const i=this.keysPressed[t];if(i.startFrame===this.context.time.frameCount)return i.key}return null}getKeyPressed(e){if(e!==void 0)return this.isKeyPressed(e);for(const t in this.keysPressed){const i=this.keysPressed[t];if(i.pressed)return i.key}return null}getKeyUp(e){if(e!==void 0)return this.isKeyUp(e);for(const t in this.keysPressed){const i=this.keysPressed[t];return i.pressed===!1&&i.frame===this.context.time.frameCount}return null}isKeyDown(e){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;const t=this.getCodeForCommonKeyName(e);if(t!==null){for(const n of t)if(this.isKeyDown(n))return!0;return!1}const i=this.keysPressed[e];return i?i.startFrame===this.context.time.frameCount&&i.pressed:!1}isKeyUp(e){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;const t=this.getCodeForCommonKeyName(e);if(t!==null){for(const n of t)if(this.isKeyUp(n))return!0;return!1}const i=this.keysPressed[e];return i?i.frame===this.context.time.frameCount&&i.pressed===!1:!1}isKeyPressed(e){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;const t=this.getCodeForCommonKeyName(e);if(t!==null){for(const n of t)if(this.isKeyPressed(n))return!0;return!1}const i=this.keysPressed[e];return i&&i.pressed||!1}getCodeForCommonKeyName(e){if(e.length===1){if(e>="0"&&e<="9")return["Digit"+e];if(e>="a"&&e<="z")return["Key"+e.toUpperCase()];if(e==" ")return["Space"]}switch(e){case"shift":case"Shift":return["ShiftLeft","ShiftRight"];case"control":case"Control":return["ControlLeft","ControlRight"];case"alt":case"Alt":return["AltLeft","AltRight"]}return null}createInputEvent(e){switch(e.type){case"pointerdown":He&&Se("Create Pointer down"),this.onDownButton(e.deviceIndex,e.button),this.onDown(e);break;case"pointermove":He&&Se("Create Pointer move"),this.onMove(e);break;case"pointerup":He&&Se("Create Pointer up"),this.onUp(e),this.onReleaseButton(e.deviceIndex,e.button);break}}convertScreenspaceToRaycastSpace(e){return e.x=(e.x-this.context.domX)/this.context.domWidth*2-1,e.y=-((e.y-this.context.domY)/this.context.domHeight)*2+1,e}constructor(e){this.context=e,this.context.post_render_callbacks.push(this.onEndOfFrame)}_htmlEventSource;bindEvents(){this.unbindEvents(),this._htmlEventSource=this.context.renderer.domElement,window.addEventListener("contextmenu",this.onContextMenu),this._htmlEventSource.addEventListener("pointerdown",this.onPointerDown,{passive:!0}),window.addEventListener("pointermove",this.onPointerMove,{passive:!0,capture:!0}),window.addEventListener("pointerup",this.onPointerUp,{passive:!0}),window.addEventListener("pointercancel",this.onPointerCancel,{passive:!0}),window.addEventListener("touchstart",this.onTouchStart,{passive:!0}),window.addEventListener("touchmove",this.onTouchMove,{passive:!0}),window.addEventListener("touchend",this.onTouchEnd,{passive:!0}),this._htmlEventSource.addEventListener("wheel",this.onMouseWheel,{passive:!0}),window.addEventListener("wheel",this.onWheelWindow,{passive:!0}),window.addEventListener("keydown",this.onKeyDown,!1),window.addEventListener("keypress",this.onKeyPressed,!1),window.addEventListener("keyup",this.onKeyUp,!1),window.addEventListener("blur",this.onLostFocus)}unbindEvents(){for(const e in this._eventListeners)this._eventListeners[e].length=0;window.removeEventListener("contextmenu",this.onContextMenu),this._htmlEventSource?.removeEventListener("pointerdown",this.onPointerDown),window.removeEventListener("pointermove",this.onPointerMove),window.removeEventListener("pointerup",this.onPointerUp),window.removeEventListener("pointercancel",this.onPointerCancel),window.removeEventListener("touchstart",this.onTouchStart),window.removeEventListener("touchmove",this.onTouchMove),window.removeEventListener("touchend",this.onTouchEnd),this._htmlEventSource?.removeEventListener("wheel",this.onMouseWheel,!1),window.removeEventListener("wheel",this.onWheelWindow,!1),window.removeEventListener("keydown",this.onKeyDown,!1),window.removeEventListener("keypress",this.onKeyPressed,!1),window.removeEventListener("keyup",this.onKeyUp,!1),window.removeEventListener("blur",this.onLostFocus)}dispose(){const e=this.context.post_render_callbacks.indexOf(this.onEndOfFrame);e>=0&&this.context.post_render_callbacks.splice(e,1),this.unbindEvents()}onLostFocus=()=>{for(const e in this.keysPressed)this.keysPressed[e].pressed=!1};_receivedPointerMoveEventsThisFrame=new Array;onEndOfFrame=()=>{this._receivedPointerMoveEventsThisFrame.length=0;for(let e=0;e<this._pointerUp.length;e++)this._pointerUp[e]=!1;for(let e=0;e<this._pointerDown.length;e++)this._pointerDown[e]=!1;for(let e=0;e<this._pointerClick.length;e++)this._pointerClick[e]=!1;for(let e=0;e<this._pointerDoubleClick.length;e++)this._pointerDoubleClick[e]=!1;for(const e of this._pointerPositionsDelta)e.set(0,0);for(let e=0;e<this._mouseWheelChanged.length;e++)this._mouseWheelChanged[e]=!1;for(let e=0;e<this._mouseWheelDeltaY.length;e++)this._mouseWheelDeltaY[e]=0};canReceiveInput(e){return e.target===this.context.renderer?.domElement||e.target===this.context.domElement||this.context.isInAR||this.context.isInAR&&e.target===document.body&&exports.DeviceUtilities.isMozillaXR()?!0:(He&&console.warn("CanReceiveInput:False for",e.target),!1)}onContextMenu=e=>{this.canReceiveInput(e)!==!1&&e instanceof PointerEvent&&e.pointerType};keysPressed={};onKeyDown=e=>{if(He&&console.log(`key down ${e.code}, ${this.context.application.hasFocus}`,e),!this.context.application.hasFocus)return;const t=this.keysPressed[e.code];if(t&&t.pressed)return;this.keysPressed[e.code]={pressed:!0,frame:this.context.time.frameCount+1,startFrame:this.context.time.frameCount+1,key:e.key,code:e.code};const i=new nl("keydown",e,e);this.onDispatchEvent(i)};onKeyPressed=e=>{if(!this.context.application.hasFocus)return;const t=this.keysPressed[e.code];if(!t)return;t.pressed=!0,t.frame=this.context.time.frameCount+1;const i=new nl("keypress",e,e);this.onDispatchEvent(i)};onKeyUp=e=>{if(!this.context.application.hasFocus)return;const t=this.keysPressed[e.code];if(!t)return;t.pressed=!1,t.frame=this.context.time.frameCount+1;const i=new nl("keyup",e,e);this.onDispatchEvent(i)};onWheelWindow=e=>{document.pointerLockElement&&this.onMouseWheel(e)};onMouseWheel=e=>{if(this.canReceiveInput(e)===!1)return;this._mouseWheelDeltaY.length<=0&&this._mouseWheelDeltaY.push(0),this._mouseWheelChanged.length<=0&&this._mouseWheelChanged.push(!1),this._mouseWheelChanged[0]=!0;const t=this._mouseWheelDeltaY[0];this._mouseWheelDeltaY[0]=t+e.deltaY};onPointerDown=e=>{if(this.context.isInAR||this.canReceiveInput(e)===!1)return;e.target instanceof HTMLElement&&e.target.setPointerCapture(e.pointerId);const t=this.getPointerId(e);He&&Se(`pointer down #${t}, identifier:${e.pointerId}`);const i=this.getAndUpdateSpatialObjectForScreenPosition(t,e.clientX,e.clientY),n=new Qn("pointerdown",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:t,button:e.button,clientX:e.clientX,clientY:e.clientY,pointerType:e.pointerType,buttonName:this.getButtonName(e),device:i,pressure:e.pressure});this.onDown(n)};onPointerMove=e=>{if(this.context.isInAR||this._receivedPointerMoveEventsThisFrame.includes(e.pointerId))return;this._receivedPointerMoveEventsThisFrame.push(e.pointerId);let t=e.button;e.pointerType==="mouse"&&(t=this.getFirstPressedButtonForPointer(0)??0);const i=this.getPointerId(e,t);t===-1&&(t=i);const n=this.getAndUpdateSpatialObjectForScreenPosition(i,e.clientX,e.clientY),o=new Qn("pointermove",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:i,button:t,clientX:e.clientX,clientY:e.clientY,pointerType:e.pointerType,buttonName:this.getButtonName(e),device:n,pressure:e.pressure});this.onMove(o)};onPointerCancel=e=>{this.context.isInAR||(He&&console.log("Pointer cancel",e),this.onPointerUp(e))};onPointerUp=e=>{if(this.context.isInAR)return;e.target instanceof HTMLElement&&e.target.releasePointerCapture(e.pointerId);const t=this.getPointerId(e),i=new Qn("pointerup",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:t,button:e.button,clientX:e.clientX,clientY:e.clientY,pointerType:e.pointerType,buttonName:this.getButtonName(e),device:this.getAndUpdateSpatialObjectForScreenPosition(t,e.clientX,e.clientY),pressure:e.pressure});this.onUp(i),this._pointerIds[t]=-1,He&&console.log("ID="+t,"PointerId="+e.pointerId,"ALL:",[...this._pointerIds])};getPointerId(e,t){return e.pointerType==="mouse"?0+(t??e.button):this.getPointerIndex(e.pointerId)}getButtonName(e){const t=e.button;if(e.pointerType==="mouse")switch(t){case 0:return"left";case 1:return"middle";case 2:return"right"}return"unknown"}onTouchStart=e=>{if(this.context.isInAR)for(let t=0;t<e.changedTouches.length;t++){const i=e.changedTouches[t],n=this.getPointerIndex(i.identifier),o=this.getAndUpdateSpatialObjectForScreenPosition(n,i.clientX,i.clientY),r=new Qn("pointerdown",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:n,button:0,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",buttonName:"unknown",device:o,pressure:i.force});this.onDown(r)}};onTouchMove=e=>{if(this.context.isInAR)for(let t=0;t<e.changedTouches.length;t++){const i=e.changedTouches[t],n=this.getPointerIndex(i.identifier),o=this.getAndUpdateSpatialObjectForScreenPosition(n,i.clientX,i.clientY),r=new Qn("pointermove",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:n,button:0,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",buttonName:"unknown",device:o,pressure:i.force});this.onMove(r)}};onTouchEnd=e=>{if(this.context.isInAR)for(let t=0;t<e.changedTouches.length;t++){const i=e.changedTouches[t],n=this.getPointerIndex(i.identifier),o=new Qn("pointerup",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:n,button:0,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",buttonName:"unknown",device:this.getAndUpdateSpatialObjectForScreenPosition(n,i.clientX,i.clientY),pressure:i.force});this.onUp(o),this._pointerIds[n]=-1}};tempNearPlaneVector=new c.Vector3;tempFarPlaneVector=new c.Vector3;tempLookMatrix=new c.Matrix4;getAndUpdateSpatialObjectForScreenPosition(e,t,i){let n=this._pointerSpace[e];n||(n=new c.Object3D,this._pointerSpace[e]=n),this._pointerSpace[e]=n;const o=this.context.mainCamera;if(o){const r=this.tempNearPlaneVector.set(t,i,-1);this.convertScreenspaceToRaycastSpace(r);const a=this.tempFarPlaneVector.set(r.x,r.y,1);r.unproject(o),a.unproject(o);const l=o.worldUp||V(0,1,0).applyQuaternion(ue(o));this.tempLookMatrix.lookAt(a,r,l),n.position.set(r.x,r.y,r.z),n.quaternion.setFromRotationMatrix(this.tempLookMatrix)}return n}isInRect(e){if(this.context.isInXR)return!0;const t=this.context.domElement.getBoundingClientRect(),i=e.clientX,n=e.clientY,o=i>=t.x&&i<=t.right&&n>=t.y&&n<=t.bottom;return He&&!o&&console.log("Not in rect",t,i,n),o}onDown(e){const t=e.pointerId;if(this.getPointerPressed(t)&&console.warn(`Received pointerDown for pointerId that is already pressed: ${t}`,He?e:""),He&&console.log(e.pointerType,"DOWN",t),!!this.isInRect(e)){for(this.setPointerState(t,this._pointerPressed,!0),this.setPointerState(t,this._pointerDown,!0),this.setPointerStateT(t,this._pointerEvent,e.source);t>=this._pointerTypes.length;)this._pointerTypes.push(e.pointerType);for(this._pointerTypes[t]=e.pointerType;t>=this._pointerPositionDown.length;)this._pointerPositionDown.push(new c.Vector3);for(this._pointerPositionDown[t].set(e.clientX,e.clientY,e.clientZ??0);t>=this._pointerPositions.length;)this._pointerPositions.push(new c.Vector2);this._pointerPositions[t].set(e.clientX,e.clientY),t>=this._pointerDownTime.length&&this._pointerDownTime.push(0),this._pointerDownTime[t]=this.context.time.realtimeSinceStartup,this.updatePointerPosition(e),this._pointerEventsPressed.push(e),this.onDispatchEvent(e)}}onMove(e){const t=e.pointerId,i=this.getPointerPressed(t);i===!1&&!this.isInRect(e)||e.pointerType==="touch"&&!i||(this.updatePointerPosition(e),this.setPointerStateT(t,this._pointerEvent,e.source),this.onDispatchEvent(e))}onUp(e){const t=e.pointerId;if(!this.getPointerPressed(t)){He&&console.log(e.pointerType,"UP",t,"was not down");return}He&&console.log(e.pointerType,"UP",t),this.setPointerState(t,this._pointerPressed,!1),this.setPointerStateT(t,this._pointerEvent,e.source),this.setPointerState(t,this._pointerUp,!0),this.updatePointerPosition(e);for(let l=this._pointerEventsPressed.length-1;l>=0;l--)if(this._pointerEventsPressed[l].pointerId===t){this._pointerEventsPressed.splice(l,1);break}if(!this._pointerPositionDown[t]){He&&he("Received pointer up event without matching down event for button: "+t),console.warn("Received pointer up event without matching down event for button: "+t);return}const n=this._pointerUpTime[t],o=this._pointerDownTime[t],r=this.context.time.realtimeSinceStartup,a=r-o;if(t>=this._pointerUpTime.length&&this._pointerUpTime.push(-99),this._pointerUpTime[t]=r,a<1){let l=e.clientX-this._pointerPositionDown[t].x,h=e.clientY-this._pointerPositionDown[t].y,d=0;if(e.isSpatial&&e.clientZ!=null&&(d=e.clientZ-this._pointerPositionDown[t].z,l*=200,h*=200,d*=200),Math.abs(l)<5&&Math.abs(h)<5&&Math.abs(d)<5){this.setPointerState(t,this._pointerClick,!0),e.isClick=!0;const u=r-n;He&&console.log("CLICK",t,l,h,d,u),u<this._doubleClickTimeThreshold&&u>0&&(this.setPointerState(t,this._pointerDoubleClick,!0),e.isDoubleClick=!0)}}this.onDispatchEvent(e)}updatePointerPosition(e){const t=e.pointerId;for(;t>=this._pointerPositions.length;)this._pointerPositions.push(new c.Vector2);for(;t>=this._pointerPositionsLastFrame.length;)this._pointerPositionsLastFrame.push(new c.Vector2);for(;t>=this._pointerPositionsDelta.length;)this._pointerPositionsDelta.push(new c.Vector2);const i=this._pointerPositionsLastFrame[t];i.copy(this._pointerPositions[t]);const n=this._pointerPositionsDelta[t];let o=e.clientX-i.x,r=e.clientY-i.y;if(e.source instanceof MouseEvent||e.source instanceof TouchEvent){const d=e.source;o===0&&d.movementX!==0&&(o=d.movementX||0),r===0&&d.movementY!==0&&(r=d.movementY||0)}n.x+=o,n.y+=r,this._pointerPositions[t].x=e.clientX,this._pointerPositions[t].y=e.clientY;const a=e.clientX,l=e.clientY;for(;t>=this._pointerPositionsRC.length;)this._pointerPositionsRC.push(new c.Vector2);const h=this._pointerPositionsRC[t];h.set(a,l),this.convertScreenspaceToRaycastSpace(h)}getPointerIndex(e){let t=-1;for(let i=0;i<this._pointerIds.length;i++){if(this._pointerIds[i]===e)return i;t===-1&&this._pointerIds[i]===-1&&(t=i)}return t!==-1?(this._pointerIds[t]=e,t):(He&&console.log("PUSH pointerId:",e),this._pointerIds.push(e),this._pointerIds.length-1)}setPointerState(e,t,i){t[e]=i}setPointerStateT(e,t,i){return t[e]=i,i}onDispatchEvent(e){const t=F.Current;try{F.Current=this.context,this.dispatchEvent(e)}finally{F.Current=t}}}const Gr=new c.Matrix4().makeRotationY(Math.PI),Pi=new c.Quaternion().setFromAxisAngle(new c.Vector3(0,1,0),Math.PI),oS=x("debugwebxr");class rS{priority=-1e5;gameObject;isXRRig(){return!0}get isActive(){return this.gameObject.visible}constructor(){if(this.gameObject=new c.Object3D,this.gameObject.name="Implicit XR Rig",oS){const e=sm(16733661);e.position.y+=.5,this.gameObject.add(e)}}}const Un=x("debugwebxr"),eh=x("debugcustomgesture"),aS="https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles",lS="generic-trigger",cS=new c.Quaternion().setFromEuler(new c.Euler(c.MathUtils.degToRad(0),c.MathUtils.degToRad(-90),c.MathUtils.degToRad(-90))),hS=new c.Vector3(.04,-.04,0);class Zp{xr;get context(){return this.xr.context}inputSource;index=0;emitEvents=!0;get connected(){return this._connected}_connected=!0;get isTracking(){return this._isTracking}_isTracking=!1;get gamepad(){return this.__gamepad??=this.inputSource.gamepad}__gamepad;get isHand(){return this.hand!=null}get hand(){return this.__hand??=this.inputSource.hand}__hand;get handObject(){return this.context.renderer.xr.getHand(this.index)}get profiles(){return this.inputSource.profiles}get layout(){return this._layout}get targetRayMode(){return this.inputSource.targetRayMode}get targetRaySpace(){return this.inputSource.targetRaySpace}get gripSpace(){return this.inputSource.gripSpace}get side(){return this.__side??=this.inputSource.handedness}__side=void 0;get isRight(){return this.side==="right"}get isLeft(){return this.side==="left"}get isStylus(){return this._isMxInk}getHitTestSource(){return this._hitTestSource||this._requestHitTestSource(),this._hitTestSource}get hasHitTestSource(){return this._hitTestSource}cancelHitTestSource(){this._hitTestSource&&(this._hitTestSource.cancel(),this._hitTestSource=void 0)}_hitTestSource=void 0;_hasSelectEvent=!1;get hasSelectEvent(){return this._hasSelectEvent}_isMxInk=!1;_isMetaQuestTouchController=!1;getHitTest(){return this.xr.getHitTest(this)}_handJointPoses=new Map;getHandJointPose(e,t){if(t=t||this.xr.frame,!this.hand||!t?.getJointPose||!this.xr.referenceSpace)return null;let i=this._handJointPoses?.get(e);return i||(i=t.getJointPose(e,this.xr.referenceSpace),i&&this._handJointPoses.set(e,i),i)}_gripMatrix=new c.Matrix4;_gripPosition=new c.Vector3;_gripQuaternion=new c.Quaternion;_linearVelocity=new c.Vector3;_rayPositionRaw=new c.Vector3;_rayRotationRaw=new c.Quaternion;_rayMatrix=new c.Matrix4;_rayPosition=new c.Vector3;_rayQuaternion=new c.Quaternion;get gripPosition(){return V(this._gripPosition)}get gripQuaternion(){return qi(this._gripQuaternion)}get gripMatrix(){return this._gripMatrix}get gripLinearVelocity(){return V(this._linearVelocity).applyQuaternion(Pi)}get rayPosition(){return V(this._rayPosition)}get rayQuaternion(){return qi(this._rayQuaternion)}get gripWorldPosition(){return V(this._gripWorldPosition)}_gripWorldPosition=new c.Vector3;get gripWorldQuaternion(){return qi(this._gripWorldQuaternion)}_gripWorldQuaternion=new c.Quaternion;get rayWorldPosition(){return V(this._rayWorldPosition)}_rayWorldPosition=new c.Vector3;updateRayWorldPosition(){const e=this.xr.context.mainCamera?.parent;this._rayWorldPosition.copy(this._rayPositionRaw),e&&this._rayWorldPosition.applyMatrix4(e.matrixWorld)}get rayWorldQuaternion(){return qi(this._rayWorldQuaternion)}_rayWorldQuaternion=new c.Quaternion;get pinchPosition(){return V(this._pinchPosition)}_pinchPosition=new c.Vector3;updateRayWorldQuaternion(){const e=this.xr.context.mainCamera?.parent,t=e?ue(e):void 0;this._rayWorldQuaternion.copy(this._rayRotationRaw).multiply(Pi),t&&this._rayWorldQuaternion.premultiply(t)}get ray(){return this._ray.origin.copy(this.rayWorldPosition),this._ray.direction.copy(V(0,0,1).applyQuaternion(this.rayWorldQuaternion)),this._ray}_ray;_hand_wristDotUp=void 0;get handWristDotUp(){if(this._hand_wristDotUp!==void 0)return this._hand_wristDotUp;const e=this.handObject?.joints.wrist;if(e){const t=V(0,1,0).applyQuaternion(e.quaternion),i=V(0,1,0).dot(t);return this._hand_wristDotUp=i}}get isHandUpsideDown(){return this.handWristDotUp!==void 0?this.handWristDotUp<-.7:!1}get isTeleportGesture(){return this.isHandUpsideDown&&this.getGesture("pinch")?.isDown}get object(){return this._object}_object;_gripSpaceObject;_raySpaceObject;model=null;_debugAxesHelper=new c.AxesHelper(.15);_debugGripAxesHelper=new c.AxesHelper(.07);_debugRayAxesHelper=new c.AxesHelper(.07);async getModelUrl(){return this.getMotionController?.then(e=>e?.assetUrl||null)}constructor(e,t,i){this.xr=e,this.inputSource=t,this.index=i,this._object=new c.Object3D,this._object.name=`NeedleXRController_${i}`,Un&&(this._object.add(this._debugAxesHelper),this._gripSpaceObject=new c.Object3D,this._raySpaceObject=new c.Object3D,this._gripSpaceObject.name=`NeedleXRController_${i}_gripSpace`,this._raySpaceObject.name=`NeedleXRController_${i}_raySpace`,this._gripSpaceObject.add(this._debugGripAxesHelper),this._raySpaceObject.add(this._debugRayAxesHelper),this.xr.context.scene.add(this._gripSpaceObject),this.xr.context.scene.add(this._raySpaceObject)),this.xr.context.scene.add(this._object),this._ray=new c.Ray,this.pointerInit={origin:this,pointerType:this.hand?"hand":"controller",deviceIndex:this.index,pointerId:-1,mode:this.inputSource.targetRayMode,ray:this._ray,device:this._object,buttonName:"none"},this.initialize(),this.subscribeEvents()}_hitTestSourcePromise=null;_requestHitTestSource(){return this._hitTestSourcePromise?this._hitTestSourcePromise:this.xr.mode==="immersive-ar"&&this.inputSource.targetRayMode==="tracked-pointer"&&this.xr.session.requestHitTestSourceForTransientInput?this._hitTestSourcePromise=this.xr.session.requestHitTestSourceForTransientInput({profile:this.inputSource.profiles[0],offsetRay:new XRRay})?.then(e=>(this._hitTestSourcePromise=null,this.connected?this._hitTestSource=e:(e.cancel(),null)))??null:null}onPointerHits=e=>{};onUpdate(e){this.onUpdateFrame(e),this.updateInputEvents(),this.onUpdateMove()}onRenderDebug(){B.DrawSphere(this.rayWorldPosition,.003),B.DrawDirection(this.rayWorldPosition,V(0,0,10).applyQuaternion(this.rayWorldQuaternion));const t=(this.inputSource.gripSpace?this.gripWorldPosition:this.object.worldPosition).sub(this.object.worldForward.multiplyScalar(.1)),i=this.inputSource.profiles.join(`
146
146
  `);let n=`Controller[${this.index}] (${this.inputSource.targetRayMode}, ${this.side})
147
147
  C:${this.connected?"x":"-"} T:${this.isTracking?"x":"-"} Hand:${this.inputSource.hand?"x":"-"} Pen: ${this._isMxInk?"x":"-"}`;if(this.inputSource.hand&&(n+=`
@@ -946,7 +946,7 @@ ${t.path}! : AssetReference;
946
946
  Could not find method ${r.method} on object ${l.name}. Please rename ${r.method} to ${p}?
947
947
  `,l[p],`
948
948
  in script: `,l),he("EventList methods must start with lowercase letter, see console for details");return}else console.warn(`EventList method:
949
- Could not find method ${r.method} on object ${l.name}`,l,typeof l[r.method])};if(typeof l[r.method]!="function"){let p=!1,m=l;for(;m;){const y=Object.getOwnPropertyDescriptor(m,r.method);if(y&&(y.writable===!0||y.set)){p=!0;break}m=Object.getPrototypeOf(m)}!p&&(A()||st)&&d()}}if(l){let d=r.argument;if(d!==void 0?d=a(d):r.arguments!==void 0&&(d=r.arguments.map(a)),!l[r.method])console.warn(`EventList method not found: "${r.method}" on ${l?.name}`);else{d!==void 0&&!Array.isArray(d)&&(d=[d]);const p=new es(l,r.method,d,r.enabled);i.push(p)}}else A()&&console.warn(`[Dev] EventList: Could not find event listener in scene (${t.object?.name})`,r)}const n=new ae(i);st&&console.log(n);const o=t.target;return o!==void 0&&t.path!==void 0&&n.setEventTarget(t.path,o),n}}}const E1=new R1,pd=new WeakMap,T1=c.Texture.prototype.clone;c.Texture.prototype.clone=function(){const s=T1.call(this);return pd.has(s)||pd.set(s,this),s};class H0 extends Fi{constructor(){super([xn,c.WebGLRenderTarget])}onSerialize(e,t){}onDeserialize(e,t){if(e instanceof c.Texture&&t.type===xn){let i=e;pd.has(i)&&(i=pd.get(i)),i.isRenderTargetTexture=!0,i.flipY=!0,i.offset.y=1,i.repeat.y=-1,i.needsUpdate=!0,i.mipmaps=[],i instanceof c.CompressedTexture&&(i.isCompressedTexture=!1,i.format=c.RGBAFormat);const n=new xn(i.image.width,i.image.height,{colorSpace:c.LinearSRGBColorSpace});return n.texture=i,n}}}new H0;class q0 extends Fi{constructor(){super([URL])}onSerialize(e,t){return null}onDeserialize(e,t){if(typeof e=="string"&&e.length>0)return Ys(t.gltfId,e)}}new q0;var A1=Object.defineProperty,L1=(s,e,t,i)=>{for(var n=void 0,o=s.length-1,r;o>=0;o--)(r=s[o])&&(n=r(e,t,n)||n);return n&&A1(e,t,n),n};class la extends k{awake(){Dt.createIfNoneExists(this.context)}onEnable(){Dt.get(this.context)?.register(this)}onDisable(){Dt.get(this.context)?.unregister(this)}}class ci extends la{targets=null;raycastHits=[];ignoreSkinnedMeshes=!1;start(){this.targets=[this.gameObject]}performRaycast(e=null){if(!this.targets)return null;e??=new Js,e.targets=this.targets,e.results=this.raycastHits,e.useAcceleratedRaycast=!0;const t=e.testObject;this.ignoreSkinnedMeshes&&(e.testObject=n=>n instanceof c.SkinnedMesh?"continue in children":t?t(n):!0);const i=this.context.physics.raycast(e);return e.testObject=t,i}}L1([f()],ci.prototype,"ignoreSkinnedMeshes");class qd extends ci{constructor(){super(),this.ignoreSkinnedMeshes=!0}}class Ho extends la{static allow=!0;performRaycast(e){if(!H.active||!Ho.allow||!e?.ray)return null;const t=e.ray.origin;return this.context.physics.sphereOverlap(t,.015,!1,!0)}}class wm{static getObject(e){const t=e[ii];return t&&(t.isComponent===!0?e=t.gameObject:e=t),e}static isInteractable(e,t){if(t&&(t.canvasGroup=void 0,t.graphic=void 0),e==null||!e.visible||(e=this.getObject(e),!e.visible))return!1;const i=this.tryFindCanvasGroup(e);if(i?.isCanvasGroup===!0&&(t&&(t.canvasGroup=i),i.blocksRaycasts===!1||i.interactable===!1))return!1;const n=Wo(e,o=>{if(o.isGraphic===!0)return o},!1);return t&&n?.isGraphic===!0&&(t.graphic=n),!(n?.raycastTarget===!1||n?.layer===2)}static tryFindCanvasGroup(e){if(!e)return null;const t=Wo(e,i=>{const n=i;if(n.blocksRaycasts!==void 0&&n.interactable!==void 0)return n},!1);return t!==void 0?t:this.tryFindCanvasGroup(e.parent)}}function Sm(s){const e=s[ii];return e||(s.parent?Sm(s.parent):null)}function D1(s){return s.isUI===!0||typeof s[ii]=="object"}function md(s,e){if(!s)return;const t=s.material;if(t?.isMaterial===!0){const i=s.parent;i&&i.isText,t.side=e.doubleSided??!0?c.DoubleSide:c.FrontSide,t.shadowSide=e.doubleSided?c.DoubleSide:c.FrontSide,s.castShadow=e.castShadows?e.castShadows:!1,s.receiveShadow=e.receiveShadows?e.receiveShadows:!1}for(const i of s.children)md(i,e)}function Lr(s,e,t){s[e]===void 0&&console.warn("Field",e,"is undefined on",s);const i=Proxy.revocable(s[e],{set(r,a,l,h){const d=r[a],u=Reflect.set(r,a,l,h);return t(l,d),u}}),n=i.revoke,o=s[e];return i.revoke=()=>{s[e]=o,n()},s[e]=i.proxy,i}const Qy=Symbol("Scheduled action");function I1(s,e,t=pe.OnBeforeRender){let i=s[Qy];i||(i=s[Qy]={});const n=e.name;i[t]||(i[t]={});const o=i[t];if(o[n])return;function*a(){e?.call(s),o[n]=null}const l=s.startCoroutine(a(),t);o[n]=l}const Ts=x("debugeventsystem");var gp=(s=>(s.BeforeHandleInput="BeforeHandleInput",s.AfterHandleInput="AfterHandleInput",s))(gp||{});I0(s=>{Dt.createIfNoneExists(s)});class Dt extends k{static ensureUpdateMeshUI(e,t,i=!1){za.update(e,t,i)}static markUIDirty(e){za.markDirty()}static createIfNoneExists(e){e.scene.getComponent(Dt)||e.scene.addComponent(Dt)}static get(e){return this.createIfNoneExists(e),e.scene.getComponent(Dt)}static get instance(){return this.get(F.Current)}raycaster=[];register(e){e&&this.raycaster&&!this.raycaster.includes(e)&&this.raycaster?.push(e)}unregister(e){const t=this.raycaster?.indexOf(e);t!==void 0&&t!==-1&&this.raycaster?.splice(t,1)}get hasActiveUI(){return this.currentActiveMeshUIComponents.length>0}get isHoveringObjects(){return this.hoveredByID.size>0}awake(){this.gameObject!==this.context.scene&&(console.debug(`[Needle Engine] EventSystem is only allowed on the scene root. Disabling EventSystem on '${this.gameObject.name}'`),this.enabled=!1)}start(){this.context.scene.getComponent(la)||this.context.scene.addComponent(ci)}onEnable(){this.context.input.addEventListener(xe.PointerDown,this.onPointerEvent),this.context.input.addEventListener(xe.PointerUp,this.onPointerEvent),this.context.input.addEventListener(xe.PointerMove,this.onPointerEvent)}onDisable(){this.context.input.removeEventListener(xe.PointerDown,this.onPointerEvent),this.context.input.removeEventListener(xe.PointerUp,this.onPointerEvent),this.context.input.removeEventListener(xe.PointerMove,this.onPointerEvent)}pressedByID=new Map;hoveredByID=new Map;onBeforeRender(){this.resetMeshUIStates()}onPointerEvent=e=>{if(e===void 0||e.propagationStopped||e.defaultPrevented||e.used)return;const t=new fc(this.context.input,e);this._currentPointerEventName=e.type,t.inputSource=this.context.input,t.isClick=e.isClick,t.isDoubleClick=e.isDoubleClick,t.isDown=e.type==xe.PointerDown,t.isUp=e.type==xe.PointerUp,t.isPressed=this.context.input.getPointerPressed(e.pointerId);const i=new Js;e.hasRay?i.ray=e.ray:i.screenPoint=this.context.input.getPointerPositionRC(e.pointerId),i.allowSlowRaycastFallback=e.isClick||e.isDoubleClick;const n=this.performRaycast(i);if(Ts&&(t.isDown?console.log("DOWN",{id:t.pointerId,hits:n.length}):t.isUp&&console.log("UP",{id:t.pointerId,hits:n.length}),t.isClick&&console.log("CLICK",{id:t.pointerId,hits:n.length})),n){for(const r of n)r.event=e,e.intersections.push(r);e.origin.onPointerHits&&e.origin.onPointerHits({sender:this,event:e,hits:n})}Ts&&t.isClick&&Se("EventSystem: "+t.pointerId+" - "+this.context.time.frame+" - Up:"+t.isUp+", Down:"+t.isDown);const o={sender:this,args:t,hasActiveUI:this.currentActiveMeshUIComponents.length>0};this.dispatchEvent(new CustomEvent("BeforeHandleInput",{detail:o})),this.handleIntersections(n,t),this.dispatchEvent(new CustomEvent("AfterHandleInput",{detail:o}))};_sortedHits=[];_testObjectsCache=new Map;_currentlyActiveRaycaster=null;_currentPointerEventName=null;shouldRaycastObject=e=>{const t=e&&"getComponent"in e?e.getComponent(la):null;if(t&&t!=this._currentlyActiveRaycaster)return!1;let i=null;if(D1(e)&&(i=e[ii]?.gameObject),this._testObjectsCache.has(e)||i&&this._testObjectsCache.has(i))return this._testObjectsCache.get(e)===!1?"continue in children":!0;{let o=fd(e,this._currentPointerEventName);if(!o&&i&&(o=fd(i,this._currentPointerEventName)),o){this._testObjectsCache.set(e,!0);for(const r of e.children)this.shouldRaycastObject_AddToYesCache(r);return!0}return this._testObjectsCache.set(e,!1),"continue in children"}};shouldRaycastObject_AddToYesCache(e){this._testObjectsCache.set(e,!0);for(const t of e.children)this.shouldRaycastObject_AddToYesCache(t)}performRaycast(e){if(!this.raycaster)return null;this._testObjectsCache.clear(),this._sortedHits.length=0,e.testObject=this.shouldRaycastObject;for(const t of this.raycaster){if(!t.activeAndEnabled)continue;this._currentlyActiveRaycaster=t;const i=t.performRaycast(e);this._currentlyActiveRaycaster=null,i&&i.length>0&&this._sortedHits.push(...i)}return this._sortedHits.sort((t,i)=>t.distance-i.distance),this._sortedHits}assignHitInformation(e,t){t?(e.intersection=t,e.point=t.point,e.normal=t.normal,e.face=t.face,e.distance=t.distance,e.instanceId=t.instanceId):(e.intersection=void 0,e.point=void 0,e.normal=void 0,e.face=void 0,e.distance=void 0,e.instanceId=void 0)}handleIntersections(e,t){if(e?.length){e=this.sortCandidates(e);for(const n of e){if(t.event.immediatePropagationStopped)return!1;if(this.assignHitInformation(t,n),this.handleEventOnObject(n.object,t))return!0}}this.assignHitInformation(t,e?.[0]),this.invokePointerCapture(t);const i=this.hoveredByID.get(t.pointerId);return i&&this.propagatePointerExit(i.obj,i.data,null),this.hoveredByID.delete(t.pointerId),t.isUp&&(this.pressedByID.get(t.pointerId)?.handlers.forEach(n=>this.invokeOnPointerUp(t,n)),this.pressedByID.delete(t.pointerId)),!1}_sortingBuffer=[];_noDepthTestingResults=[];sortCandidates(e){this._sortingBuffer.length=0,this._noDepthTestingResults.length=0;for(let t=0;t<e.length;t++){const i=e[t],n=i.object;if(n.material&&n.material.depthTest===!1){this._noDepthTestingResults.push(i);continue}this._sortingBuffer.push(i)}for(const t of this._sortingBuffer)this._noDepthTestingResults.push(t);return this._noDepthTestingResults}out={};handleEventOnObject(e,t){if(!this.testIsVisible(e))return t.isClick&&Ts&&console.log("not allowed",e),!1;if(t.pointerId===void 0)return Ts&&console.error("Event without pointer can't be handled",t),!1;t.object=e;const i=e.parent,n=t.isClick??!1;let o=null;if(i&&i.isUI){const d=(t.isPressed||t.isClick)??!1;if(i[ii]){const u=i[ii].gameObject;if(u){if(!wm.isInteractable(u,this.out))return!1;o=this.out.canvasGroup??null,this.handleMeshUIIntersection(e,d),e=u}}}n&&Ts&&console.log(this.context.time.frame,e);const r=this.hoveredByID.get(t.pointerId),a=r?.obj;a!==e&&a&&this.propagatePointerExit(a,r.data,e);const h=this.hoveredByID.get(t.pointerId);if(h?(h.obj=e,h.data=t):this.hoveredByID.set(t.pointerId,{obj:e,data:t}),t.isDown){const d=this.pressedByID.get(t.pointerId);d?(d.obj=e,d.data=t):this.pressedByID.set(t.pointerId,{obj:e,data:t,handlers:new Set})}return(o===null||o.interactable)&&this.handleMainInteraction(e,t,a??null),!0}propagate(e,t){for(;e;)S.foreachComponent(e,i=>{t(i)},!1),e=e.parent}handleMainInteraction(e,t,i){const n=this.pressedByID.get(t.pointerId),o=i!==e;let r=!0;switch(t.event.pointerType){case"mouse":case"touch":const a=this.context.input.getPointerPositionLastFrame(t.pointerId),l=this.context.input.getPointerPosition(t.pointerId);r=a&&!D.approximately(a,l);break}this.propagate(e,a=>{const l=a;l.interactable!==!1&&(!l.activeAndEnabled||!l.enabled||(l.onPointerEnter&&o&&this.handlePointerEnter(l,t),t.isDown&&l.onPointerDown&&(l.onPointerDown(t),n?.handlers.add(l),this.handlePointerCapture(t,l)),l.onPointerMove&&(r&&l.onPointerMove(t),this.handlePointerCapture(t,l)),t.isUp&&(l.onPointerUp&&(this.invokeOnPointerUp(t,l),n?.handlers.delete(l)),l.onPointerExit&&t.event?.pointerType===Id.Touch&&(this.handlePointerExit(l,t),this.hoveredByID.delete(t.pointerId))),t.isClick&&l.onPointerClick&&l.onPointerClick(t)))}),t.isUp&&(n?.handlers.forEach(a=>{this.invokeOnPointerUp(t,a)}),this.pressedByID.delete(t.pointerId))}propagatePointerExit(e,t,i){this.propagate(e,n=>{if(!n.gameObject||n.destroyed)return;const o=n;if(o.onPointerExit||o.onPointerEnter){if(i&&this.isChild(i,n.gameObject))return;this.handlePointerExit(o,t)}})}invokeOnPointerUp(e,t){t.onPointerUp?.call(t,e),this.releasePointerCapture(e,t)}handlePointerEnter(e,t){e.onPointerEnter&&this.updatePointerState(e,t.pointerId,this.pointerEnterSymbol,!0)&&e.onPointerEnter(t),this.updatePointerState(e,t.pointerId,this.pointerExitSymbol,!1)}handlePointerExit(e,t){e.onPointerExit&&this.updatePointerState(e,t.pointerId,this.pointerExitSymbol,!0)&&e.onPointerExit(t),this.updatePointerState(e,t.pointerId,this.pointerEnterSymbol,!1)}updatePointerState(e,t,i,n){let o=e[i];if(n)return o&&o.includes(t)?!1:(o=o||[],o.push(t),e[i]=o,!0);{if(!o||!o.includes(t))return!1;const r=o.indexOf(t);return r!==-1&&o.splice(r,1),!0}}_capturedPointer={};handlePointerCapture(e,t){if(e.z__pointer_ctured){e.z__pointer_ctured=!1;const i=e.pointerId;if(t.onPointerMove){const n=this._capturedPointer[i]||[];n.push(t),this._capturedPointer[i]=n}else A()&&!t.z__warned_no_pointermove&&(t.z__warned_no_pointermove=!0,console.warn("PointerCapture was requested but the component doesn't implement onPointerMove. It will not receive any pointer events"))}else e.z__pointer_cture_rleased&&(e.z__pointer_cture_rleased=!1,this.releasePointerCapture(e,t))}releasePointerCapture(e,t){const i=e.pointerId;if(this._capturedPointer[i]){const n=this._capturedPointer[i].indexOf(t);n!==-1&&(this._capturedPointer[i].splice(n,1),Ts&&console.log("released pointer capture",i,t,this._capturedPointer))}}invokePointerCapture(e){if(e.event.type===xe.PointerMove){const t=e.pointerId,i=this._capturedPointer[t];if(i){Ts&&console.log("Captured",t,i);for(let n=0;n<i.length;n++){const o=i[n];if(o.destroyed){i.splice(n,1),n--;continue}o.onPointerMove?.call(o,e)}}}}pointerEnterSymbol=Symbol("pointerEnter");pointerExitSymbol=Symbol("pointerExit");isChild(e,t){return!e||!t?!1:e===t?!0:e.parent?this.isChild(e.parent,t):!1}handleMeshUiObjectWithoutShadowDom(e,t){return!e||!e.isUI?!0:this.handleMeshUIIntersection(e,t)}currentActiveMeshUIComponents=[];handleMeshUIIntersection(e,t){const i=za.updateState(e,t);return i&&this.currentActiveMeshUIComponents.push(i),i!==null}resetMeshUIStates(){if(this.context.input.getPointerPressedCount()>0&&za.resetLastSelected(),!(!this.currentActiveMeshUIComponents||this.currentActiveMeshUIComponents.length<=0)){for(let e=0;e<this.currentActiveMeshUIComponents.length;e++){const t=this.currentActiveMeshUIComponents[e];za.resetState(t)}this.currentActiveMeshUIComponents.length=0}}testIsVisible(e){return e?S.isActiveSelf(e)?this.testIsVisible(e.parent):!1:!0}}class za{static lastSelected=null;static lastUpdateFrame=[];static needsUpdate=!1;static markDirty(){this.needsUpdate=!0}static update(e,t,i=!1){if(i){e.update();return}const n=t.time.frameCount;for(const o of this.lastUpdateFrame)if(o.context===t){if(n===o.frame)return;o.frame=n;let r=this.needsUpdate||n<1;o.nextUpdate<=n&&(r=!0),r&&(Ts&&console.log("Update threemeshui"),this.needsUpdate=!1,o.nextUpdate=n+60,e.update());return}this.lastUpdateFrame=[{context:t,frame:n,nextUpdate:n+60}],e.update(),this.needsUpdate=!1}static updateState(e,t){let i=null;if(e&&(i=this.findBlockOrTextInParent(e),i&&i!==this.lastSelected)){if(i.interactable===!1)return null;this.needsUpdate=!0}return i}static resetLastSelected(){const e=this.lastSelected;e&&(this.lastSelected=null,this.resetState(e))}static resetState(e){e&&(this.needsUpdate=!0)}static findBlockOrTextInParent(e){return e?e.isBlock||e.isText?e:this.findBlockOrTextInParent(e.parent):null}}var j1=Object.defineProperty,Ce=(s,e,t,i)=>{for(var n=void 0,o=s.length-1,r;o>=0;o--)(r=s[o])&&(n=r(e,t,n)||n);return n&&j1(e,t,n),n};const wi=x("debugorbit"),sf=x("freecam"),Na=x("debugcamerafit"),dh=x("smoothcam"),B1={LEFT:"",UP:"",RIGHT:"",BOTTOM:""};let of;class Vl extends CustomEvent{constructor(e,t){super("target-reached",{detail:{controls:e,type:t}})}}class de extends k{get isCameraController(){return!0}get controls(){return this._controls}get controllerObject(){return this._cameraObject}onStartInteraction(e){this.controls?.addEventListener("start",e)}autoTarget=!0;autoFit=!1;enableRotate=!0;autoRotate=!1;autoRotateSpeed=1;minAzimuthAngle=1/0;maxAzimuthAngle=1/0;minPolarAngle=0;maxPolarAngle=Math.PI;enableKeys=!1;enableDamping=!0;dampingFactor=.1;enableZoom=!0;minZoom=0;maxZoom=1/0;zoomSpeed=1;zoomToCursor=!1;enablePan=!0;lookAtConstraint=null;lookAtConstraint01=1;allowInterrupt=!0;middleClickToFocus=!0;doubleClickToFocus=!0;clickBackgroundToFitScene=2;get targetElement(){return this._controls?.domElement??this._targetElement}set targetElement(e){this._targetElement=e,this._controls&&this._controls.domElement!==e&&(this._controls.disconnect(),this._controls.domElement=e,this._controls.connect())}_targetElement=null;debugLog=!1;get targetLerpSpeed(){return 5}set targetLerpSpeed(e){this.targetLerpDuration=1/e}targetLerpDuration=1;rotateLeft(e){this._controls?._rotateLeft(e)}rotateUp(e){this._controls?._rotateUp(e)}pan(e,t){this._controls?._pan(e,t)}zoomIn(e){e>0?this._controls?._dollyIn(1-e):e<0&&this._controls?._dollyOut(1+e)}_controls=null;_cameraObject=null;_lookTargetLerpActive=!1;_lookTargetStartPosition=new c.Vector3;_lookTargetEndPosition=new c.Vector3;_lookTargetLerp01=0;_lookTargetLerpDuration=0;_cameraLerpActive=!1;_cameraStartPosition=new c.Vector3;_cameraEndPosition=new c.Vector3;_cameraLerp01=0;_cameraLerpDuration=0;_fovLerpActive=!1;_fovLerpStartValue=0;_fovLerpEndValue=0;_fovLerp01=0;_fovLerpDuration=0;_inputs=0;_enableTime=0;_startedListeningToKeyEvents=!1;_eventSystem;_afterHandleInputFn;_camera=null;_syncedTransform;_didSetTarget=0;awake(){wi&&console.debug("OrbitControls",this),this._didSetTarget=0,this._startedListeningToKeyEvents=!1}start(){this._eventSystem=Dt.get(this.context)??void 0,this._eventSystem&&(this._afterHandleInputFn=this.afterHandleInput.bind(this),this._eventSystem.addEventListener(gp.AfterHandleInput,this._afterHandleInputFn))}onDestroy(){this._controls?.dispose(),this._eventSystem?.removeEventListener(gp.AfterHandleInput,this._afterHandleInputFn)}onEnable(){this._didSetTarget=0,this._enableTime=this.context.time.time;const e=S.getComponent(this.gameObject,Vt);this._camera=e;let t=e?.threeCamera;if(!t&&this.gameObject instanceof c.PerspectiveCamera&&(t=this.gameObject),t&&Gf(t,this,!0),!this._controls&&t instanceof c.Object3D){this._cameraObject=t;const i=this.targetElement??this.context.renderer.domElement,n=t?.quaternion.clone();this._controls=new q.OrbitControls(t,i),t?.quaternion.copy(n),of===void 0&&(of={...this._controls.keys});const o=X(t),r=this.gameObject.worldForward,l=o.clone().sub(r.multiplyScalar(2.5));this._controls.target.copy(l)}if(this._controls)if(sf&&(this.enablePan=!0,this.enableZoom=!0,this.middleClickToFocus=!0,exports.DeviceUtilities.isMobileDevice()&&(this.doubleClickToFocus=!0)),this._controls.addEventListener("start",this.onControlsChangeStarted),this._controls.addEventListener("endMovement",this.onControlsChangeEnded),!this._startedListeningToKeyEvents&&this.enableKeys)this._startedListeningToKeyEvents=!0,this._controls.listenToKeyEvents(this.context.domElement);else try{this._controls.stopListenToKeyEvents()}catch{}this._syncedTransform=S.getComponent(this.gameObject,tn)??void 0,this.context.pre_render_callbacks.push(this.__onPreRender),this._activePointerEvents=[],this.context.input.addEventListener("pointerdown",this._onPointerDown,{queue:Nt.Early}),this.context.input.addEventListener("pointerdown",this._onPointerDownLate,{queue:Nt.Late}),this.context.input.addEventListener("pointerup",this._onPointerUp,{queue:Nt.Early}),this.context.input.addEventListener("pointerup",this._onPointerUpLate,{queue:Nt.Late})}onDisable(){if(this._camera?.threeCamera&&Gf(this._camera.threeCamera,this,!1),this._controls){this._controls.enabled=!1,this._controls.autoRotate=!1,this._controls.removeEventListener("start",this.onControlsChangeStarted),this._controls.removeEventListener("endMovement",this.onControlsChangeEnded);try{this._controls.stopListenToKeyEvents()}catch{}this._startedListeningToKeyEvents=!1}this._activePointerEvents.length=0,this.context.input.removeEventListener("pointerdown",this._onPointerDown),this.context.input.removeEventListener("pointerdown",this._onPointerDownLate),this.context.input.removeEventListener("pointerup",this._onPointerUp),this.context.input.removeEventListener("pointerup",this._onPointerUpLate)}_activePointerEvents;_lastTimeClickOnBackground=-1;_clickOnBackgroundCount=0;_onPointerDown=e=>{this._activePointerEvents.push(e)};_onPointerDownLate=e=>{e.used&&this._controls&&(this._controls.enabled=!1)};_onPointerUp=e=>{for(let t=this._activePointerEvents.length-1;t>=0;t--){const i=this._activePointerEvents[t];if(i.pointerId===e.pointerId&&i.button===e.button){this._activePointerEvents.splice(t,1);break}}if(this.clickBackgroundToFitScene>0&&e.isClick&&e.button===0){if(e.hasRay||e.intersections.push(...this.context.physics.raycast()),e.intersections.length<=0){const t=this.context.time.time-this._lastTimeClickOnBackground;this._lastTimeClickOnBackground=this.context.time.time,this.clickBackgroundToFitScene<=1||t<this.clickBackgroundToFitScene*.15?(this._clickOnBackgroundCount+=1,this._clickOnBackgroundCount>=this.clickBackgroundToFitScene-1&&this.fitCamera(this.context.scene.children,{immediate:!1})):this._clickOnBackgroundCount=0}wi&&console.log(this.clickBackgroundToFitScene,e.intersections.length,this._clickOnBackgroundCount)}};_onPointerUpLate=e=>{this.doubleClickToFocus&&e.isDoubleClick&&!e.used&&this.setTargetFromRaycast()};updateTargetNow(e){const t=new c.Ray(this._cameraObject?.worldPosition,this._cameraObject?.worldForward.multiplyScalar(-1)),i=this.context.physics.raycastFromRay(t,e),n=i.length>0?i[0]:void 0;n&&n.distance>this.minZoom&&n.distance<this.maxZoom&&(wi&&B.DrawWireSphere(n.point,.1,16711680,2),this._controls?.target.copy(i[0].point))}_orbitStartAngle=0;_zoomStartDistance=0;onControlsChangeStarted=()=>{this._controls&&(this._orbitStartAngle=this._controls.getAzimuthalAngle()+this._controls.getPolarAngle(),this._zoomStartDistance=this._controls.getDistance()),this._syncedTransform&&this._syncedTransform.requestOwnership()};onControlsChangeEnded=()=>{if(this._controls&&this.autoTarget){const t=this._controls.getAzimuthalAngle()+this._controls.getPolarAngle()-this._orbitStartAngle;Math.abs(t)<.01?(wi&&console.debug("OrbitControls: Update target",{deltaAngle:t}),this.updateTargetNow({allowSlowRaycastFallback:!1})):wi&&console.debug("OrbitControls: No target update",{deltaAngle:t})}};_shouldDisable=!1;afterHandleInput(e){e.detail.args.pointerId===0&&(e.detail.args.isDown?this._controls&&this._eventSystem&&(this._shouldDisable=this._eventSystem.hasActiveUI):(!e.detail.args.isPressed||e.detail.args.isUp)&&(this._shouldDisable=!1))}onPausedChanged(e){this._controls&&e&&(this._controls.enabled=!1)}onBeforeRender(){if(!this._controls)return;if(this._cameraObject!==this.context.mainCamera){this._controls.enabled=!1;return}if(this._controls.enabled=!0,(this.context.input.getPointerDown(1)||this.context.input.getPointerDown(2)||this.context.input.mouseWheelChanged||this.context.input.getPointerPressed(0)&&this.context.input.getPointerPositionDelta(0)?.length())&&(this._inputs+=1),this._inputs>0&&this.allowInterrupt&&(this.enableRotate&&(this.autoRotate=!1),this._cameraLerpActive=!1,this._lookTargetLerpActive=!1),this._inputs=0,this.autoTarget&&this._didSetTarget++===0){const t=S.getComponent(this.gameObject,Vt);if(t&&!this.setLookTargetFromConstraint()){this.debugLog&&console.log("NO TARGET");const i=X(t.threeCamera),n=Math.max(.01,i.length()),o=new c.Vector3(0,0,-n).applyMatrix4(t.threeCamera.matrixWorld);wi&&B.DrawLine(i,o,5592575,10),this.setLookTargetPosition(o,!0)}if(!this.setLookTargetFromConstraint()){const i=new Js;i.screenPoint=new c.Vector2(0,0),i.lineThreshold=.1;const n=this.context.physics.raycast(i);n.length>0&&this.setLookTargetPosition(n[0].point,!0),Na&&console.log("OrbitControls hits",...n)}}if(this.middleClickToFocus&&this.context.input.getPointerClicked(1)&&this.setTargetFromRaycast(),this._lookTargetLerpActive||this._cameraLerpActive||this._fovLerpActive){if(this._cameraLerpActive&&this._cameraObject)if(this._cameraLerp01+=this.context.time.deltaTime/this._cameraLerpDuration,this._cameraLerp01>=1)this._cameraObject.position.copy(this._cameraEndPosition),this._cameraLerpActive=!1,this.dispatchEvent(new Vl(this,"camera"));else{const t=D.easeInOutCubic(this._cameraLerp01);this._cameraObject.position.lerpVectors(this._cameraStartPosition,this._cameraEndPosition,t)}if(this._lookTargetLerpActive)if(this._lookTargetLerp01+=this.context.time.deltaTime/this._lookTargetLerpDuration,this._lookTargetLerp01>=1)this.lerpLookTarget(this._lookTargetEndPosition,this._lookTargetEndPosition,1),this._lookTargetLerpActive=!1,this.dispatchEvent(new Vl(this,"lookat"));else{const t=D.easeInOutCubic(this._lookTargetLerp01);this.lerpLookTarget(this._lookTargetStartPosition,this._lookTargetEndPosition,t)}if(this._fovLerpActive&&this._cameraObject){const t=this._cameraObject;if(this._fovLerp01+=this.context.time.deltaTime/this._fovLerpDuration,this._fovLerp01>=1)t.fov=this._fovLerpEndValue,this._fovLerpActive=!1;else{const i=D.easeInOutCubic(this._fovLerp01);t.fov=D.lerp(this._fovLerpStartValue,this._fovLerpEndValue,i)}t.updateProjectionMatrix()}}if(this._controls){if(this.debugLog&&(this._controls.domElement=this.context.renderer.domElement),this._controls.enabled=!this._shouldDisable&&this._camera===this.context.mainCameraComponent&&!this.context.isInXR&&!this._activePointerEvents.some(t=>t.used),this._controls.keys=this.enableKeys?of:B1,this._controls.autoRotate=this.autoRotate,this._controls.autoRotateSpeed=this.autoRotateSpeed,this._controls.enableZoom=this.enableZoom,this._controls.zoomSpeed=this.zoomSpeed,this._controls.zoomToCursor=this.zoomToCursor,this._controls.enableDamping=this.enableDamping,this._controls.dampingFactor=this.dampingFactor,this._controls.enablePan=this.enablePan,this._controls.enableRotate=this.enableRotate,this._controls.minAzimuthAngle=this.minAzimuthAngle,this._controls.maxAzimuthAngle=this.maxAzimuthAngle,this._controls.minPolarAngle=this.minPolarAngle,this._controls.maxPolarAngle=this.maxPolarAngle,sf||(this._camera?.threeCamera?.type==="PerspectiveCamera"?(this._controls.minDistance=this.minZoom,this._controls.maxDistance=this.maxZoom,this._controls.minZoom=0,this._controls.maxZoom=1/0):(this._controls.minDistance=0,this._controls.maxDistance=1/0,this._controls.minZoom=this.minZoom,this._controls.maxZoom=this.maxZoom)),typeof dh=="number"||dh===!0){this._controls.enableDamping=!0;const t=typeof dh=="number"?dh:.99;this._controls.dampingFactor=Math.max(.001,1-Math.min(1,t))}this.allowInterrupt||(this._lookTargetLerpActive&&(this._controls.enablePan=!1),this._cameraLerpActive&&(this._controls.enableRotate=!1,this._controls.autoRotate=!1),(this._lookTargetLerpActive||this._cameraLerpActive)&&(this._controls.enableZoom=!1)),this.context.isInXR||(!sf&&this.lookAtConstraint?.locked&&!this._lookTargetLerpActive&&this.setLookTargetFromConstraint(0,this.lookAtConstraint01),this._controls.update(this.context.time.deltaTime),wi&&B.DrawWireSphere(this._controls.target,.1,65280))}}__onPreRender=()=>{const e=this.context.pre_render_callbacks.indexOf(this.__onPreRender);e>=0&&this.context.pre_render_callbacks.splice(e,1),this.autoFit&&(this.autoFit=!1,this.fitCamera({centerCamera:"y",immediate:!0,objects:this.scene.children}))};setCameraAndLookTarget(e,t=!1){if(!e)return(A()||wi)&&console.warn("[OrbitControls] setCameraAndLookTarget target is null"),!1;if(!(e instanceof c.Object3D)&&!(e instanceof Vt))return(A()||wi)&&console.warn("[OrbitControls] setCameraAndLookTarget target is not an Object3D or Camera"),!1;e instanceof Vt&&(e=e.gameObject);const i=e.worldPosition,n=e.worldForward;e instanceof c.Camera&&(wi&&console.debug("[OrbitControls] setCameraAndLookTarget flip forward direction for camera"),n.multiplyScalar(-1));const o=new c.Ray(i,n);return wi&&B.DrawRay(o.origin,o.direction,16711680,10),this.setTargetFromRaycast(o,t)||this.setLookTargetPosition(o.at(2,V()),t),this.setCameraTargetPosition(i,t),!0}setCameraTargetPosition(e,t=!1){e&&(e instanceof c.Object3D&&(e=X(e)),this._cameraEndPosition||(this._cameraEndPosition=new c.Vector3),this._cameraEndPosition.copy(e),t===!0?(this._cameraLerpActive=!1,this._cameraObject&&this._cameraObject.position.copy(this._cameraEndPosition)):this._cameraObject&&(this._cameraLerpActive=!0,this._cameraLerp01=0,this._cameraStartPosition.copy(this._cameraObject?.position),typeof t=="number"?this._cameraLerpDuration=t:this._cameraLerpDuration=this.targetLerpDuration))}get cameraLerpActive(){return this._cameraLerpActive}stopCameraLerp(){this._cameraLerpActive=!1}setFieldOfView(e,t=!1){if(!this._controls||typeof e!="number")return;const i=this._camera?.threeCamera;i&&(t===!0?i.fov=e:(this._fovLerpActive=!0,this._fovLerp01=0,this._fovLerpStartValue=i.fov,this._fovLerpEndValue=e,typeof t=="number"?this._fovLerpDuration=t:this._fovLerpDuration=this.targetLerpDuration))}setLookTargetPosition(e=null,t=!1){this._controls&&e&&(e instanceof c.Object3D&&(e=X(e)),this._lookTargetEndPosition.copy(e),this._didSetTarget++,wi&&(console.warn("OrbitControls: setLookTargetPosition",e,t),B.DrawWireSphere(this._lookTargetEndPosition,.2,16711680,2)),t===!0?this.lerpLookTarget(this._lookTargetEndPosition,this._lookTargetEndPosition,1):(this._lookTargetLerpActive=!0,this._lookTargetLerp01=0,this._lookTargetStartPosition.copy(this._controls.target),typeof t=="number"?this._lookTargetLerpDuration=t:this._lookTargetLerpDuration=this.targetLerpDuration))}get lookTargetLerpActive(){return this._lookTargetLerpActive}stopLookTargetLerp(){this._lookTargetLerpActive=!1}setLookTargetFromConstraint(e=0,t=1){if(!this._controls||this.lookAtConstraint?.enabled===!1)return!1;const i=this.lookAtConstraint?.sources;if(i&&i.length>0){const n=i[e];if(n)return n.getWorldPosition(this._lookTargetEndPosition),this.lerpLookTarget(this._controls.target,this._lookTargetEndPosition,t),!0}return!1}lerpLookTarget(e,t,i){this._controls&&(i>=1?this._controls.target.copy(t):this._controls.target.lerpVectors(e,t,i),this.lookAtConstraint&&this.lookAtConstraint.setConstraintPosition(this._controls.target))}setTargetFromRaycast(e,t=!1){if(!this.controls)return!1;const i=e?this.context.physics.raycastFromRay(e):this.context.physics.raycast();for(const n of i)if(n.distance>0&&S.isActiveInHierarchy(n.object)){const o=Sm(n.object);if(o&&o.canvas?.screenspace)break;return this.setLookTargetPosition(n.point,t),!0}return!1}fitCamera(e,t){if(this.context.isInXR){console.warn("[OrbitControls] Can not fit camera while XR session is active");return}let i;if(Array.isArray(e)||e&&"type"in e?i=e:e&&typeof e=="object"&&!(e instanceof c.Object3D)&&!Array.isArray(e)&&(t=e,i=t.objects),i&&!Array.isArray(i)&&(i=i.children),(!Array.isArray(i)||i&&i.length<=0)&&(i=this.context.scene.children),!Array.isArray(i)||i.length<=0){console.warn("No objects to fit camera to...");return}const n=this._cameraObject,o=this._controls;if(!n||!o){console.warn("No camera or controls found to fit camera to objects...");return}t||(t={});const{immediate:r=!1,centerCamera:a,cameraNearFar:l="auto",fitOffset:h=1.1,fov:d=n?.fov}=t,u=new c.Vector3,p=new c.Vector3,m=Wt(i,void 0,this._camera?.threeCamera?.layers),y=m.clone();m.getCenter(p);const b=new c.Vector3;if(m.getSize(b),n.updateMatrixWorld(),m.applyMatrix4(n.matrixWorldInverse),m.getSize(u),m.setFromCenterAndSize(p,u),Number.isNaN(u.x)||Number.isNaN(u.y)||Number.isNaN(u.z)){console.warn("Camera fit size resultet in NaN",n,m,[...i]);return}if(u.length()<=1e-10){Na&&console.warn("Camera fit size is zero",m,[...i]);return}const g=d,v=2*Math.atan(Math.tan(g*Math.PI/360/2)*n.aspect)/Math.PI*360,_=u.y/(2*Math.atan(Math.PI*g/360)),w=u.x/(2*Math.atan(Math.PI*v/360)),T=h*Math.max(_,w)+u.z/2;Na&&console.log("Fit camera to objects",{fitHeightDistance:_,fitWidthDistance:w,distance:T,verticalFov:g,horizontalFov:v}),this.maxZoom=T*10,this.minZoom=T*.01;const O=.05,M=p.clone();if(M.y-=u.y*O,t.targetOffset&&(t.targetOffset.x!==void 0&&(M.x+=t.targetOffset.x),t.targetOffset.y!==void 0&&(M.y+=t.targetOffset.y),t.targetOffset.z!==void 0&&(M.z+=t.targetOffset.z)),t.relativeTargetOffset&&(t.relativeTargetOffset.x!==void 0&&(M.x+=t.relativeTargetOffset.x*u.x),t.relativeTargetOffset.y!==void 0&&(M.y+=t.relativeTargetOffset.y*u.y),t.relativeTargetOffset.z!==void 0&&(M.z+=t.relativeTargetOffset.z*u.z)),this.setLookTargetPosition(M,r),this.setFieldOfView(t.fov,r),l==null||l=="auto"){const z=S.findObjectOfType(An),$=z?z.radius:0,E=Math.max(b.x,b.y,b.z,$);n.near=T/100,n.far=E+T*10,n.updateProjectionMatrix(),z&&(this.maxZoom=Math.max(Math.min(this.maxZoom,$*.5),T))}const R=o.getDistance();R<this.minZoom&&(this.minZoom=R*.9),R>this.maxZoom&&(this.maxZoom=R*1.1);const j=p.clone();t.fitDirection?j.sub(new c.Vector3().copy(t.fitDirection).multiplyScalar(1e6)):j.sub(n.worldPosition),a==="y"&&(j.y=0),j.normalize(),j.multiplyScalar(T),a==="y"&&(j.y+=-O*4*T);let L=p.clone().sub(j);t.cameraOffset&&(t.cameraOffset.x!==void 0&&(L.x+=t.cameraOffset.x),t.cameraOffset.y!==void 0&&(L.y+=t.cameraOffset.y),t.cameraOffset.z!==void 0&&(L.z+=t.cameraOffset.z)),t.relativeCameraOffset&&(t.relativeCameraOffset.x!==void 0&&(L.x+=t.relativeCameraOffset.x*u.x),t.relativeCameraOffset.y!==void 0&&(L.y+=t.relativeCameraOffset.y*u.y),t.relativeCameraOffset.z!==void 0&&(L.z+=t.relativeCameraOffset.z*u.z)),n.parent&&(L=n.parent.worldToLocal(L)),this.setCameraTargetPosition(L,r),(Na||t.debug)&&(B.DrawWireBox3(m,16777011,10),B.DrawWireBox3(y,65280,10),!this._haveAttachedKeyboardEvents&&Na&&(this._haveAttachedKeyboardEvents=!0,document.body.addEventListener("keydown",z=>{if(z.code==="KeyF"){let $;this._cameraObject instanceof c.PerspectiveCamera&&($=Math.random()*Math.random()*170+10),this.fitCamera({objects:i,fitOffset:h,immediate:!1,fov:$})}z.code==="KeyV"&&this._cameraObject instanceof c.PerspectiveCamera&&(this._cameraObject.fov=60)}))),this.onBeforeRender()}_haveAttachedKeyboardEvents=!1}Ce([f()],de.prototype,"autoTarget");Ce([f()],de.prototype,"autoFit");Ce([f()],de.prototype,"enableRotate");Ce([f()],de.prototype,"autoRotate");Ce([f()],de.prototype,"autoRotateSpeed");Ce([f()],de.prototype,"minAzimuthAngle");Ce([f()],de.prototype,"maxAzimuthAngle");Ce([f()],de.prototype,"minPolarAngle");Ce([f()],de.prototype,"maxPolarAngle");Ce([f()],de.prototype,"enableKeys");Ce([f()],de.prototype,"enableDamping");Ce([f()],de.prototype,"dampingFactor");Ce([f()],de.prototype,"enableZoom");Ce([f()],de.prototype,"minZoom");Ce([f()],de.prototype,"maxZoom");Ce([f()],de.prototype,"zoomSpeed");Ce([f()],de.prototype,"enablePan");Ce([f(nr)],de.prototype,"lookAtConstraint");Ce([f()],de.prototype,"lookAtConstraint01");Ce([f()],de.prototype,"allowInterrupt");Ce([f()],de.prototype,"middleClickToFocus");Ce([f()],de.prototype,"doubleClickToFocus");Ce([f()],de.prototype,"clickBackgroundToFitScene");Ce([f()],de.prototype,"targetLerpDuration");var F1=Object.defineProperty,U1=Object.getOwnPropertyDescriptor,It=(s,e,t,i)=>{for(var n=i>1?void 0:i?U1(e,t):e,o=s.length-1,r;o>=0;o--)(r=s[o])&&(n=(i?r(e,t,n):r(n))||n);return i&&n&&F1(e,t,n),n},Fo=(s=>(s[s.None=0]="None",s[s.Skybox=1]="Skybox",s[s.SolidColor=2]="SolidColor",s[s.Uninitialized=4]="Uninitialized",s))(Fo||{});const As=x("debugcam"),Yy=x("debugscreenpointtoray"),xt=class ll extends k{get isCamera(){return!0}get aspect(){return this._cam instanceof c.PerspectiveCamera?this._cam.aspect:this.context.domWidth/this.context.domHeight}set aspect(e){this._cam instanceof c.PerspectiveCamera&&this._cam.aspect!==e&&(this._cam.aspect=e,this._cam.updateProjectionMatrix())}get fieldOfView(){return this._cam instanceof c.PerspectiveCamera?this._cam.fov:this._fov}set fieldOfView(e){const t=this.fieldOfView!=e;if(this._fov=e,t&&this._cam&&this._cam instanceof c.PerspectiveCamera){if(this._fov===void 0){console.warn("Can not set undefined fov on PerspectiveCamera");return}this._cam.fov=this._fov,this._cam.updateProjectionMatrix()}}get nearClipPlane(){return this._nearClipPlane}set nearClipPlane(e){const t=this._nearClipPlane!=e;this._nearClipPlane=e,this._cam&&(t||this._cam.near!=e)&&(this._cam.near=e,this._cam.updateProjectionMatrix())}_nearClipPlane=.1;get farClipPlane(){return this._farClipPlane}set farClipPlane(e){const t=this._farClipPlane!=e;this._farClipPlane=e,this._cam&&(t||this._cam.far!=e)&&(this._cam.far=e,this._cam.updateProjectionMatrix())}_farClipPlane=1e3;applyClippingPlane(){this._cam&&(this._cam.near=this._nearClipPlane,this._cam.far=this._farClipPlane,this._cam.updateProjectionMatrix())}get clearFlags(){return this._clearFlags}set clearFlags(e){if(typeof e=="string")switch(e){case"skybox":e=1;break;case"solidcolor":e=2;break;default:e=0;break}e!==this._clearFlags&&(this._clearFlags=e,this.applyClearFlagsIfIsActiveCamera())}orthographic=!1;orthographicSize=5;ARBackgroundAlpha=0;set cullingMask(e){this._cullingMask=e,this._cam&&(this._cam.layers.mask=e)}get cullingMask(){return this._cam?this._cam.layers.mask:this._cullingMask}_cullingMask=4294967295;set cullingLayer(e){this.cullingMask=(1<<e|0)>>>0}set backgroundBlurriness(e){e!==this._backgroundBlurriness&&(e===void 0?this._backgroundBlurriness=void 0:this._backgroundBlurriness=Math.min(Math.max(e,0),1),this.applyClearFlagsIfIsActiveCamera())}get backgroundBlurriness(){return this._backgroundBlurriness}_backgroundBlurriness=void 0;set backgroundIntensity(e){e!==this._backgroundIntensity&&(e===void 0?this._backgroundIntensity=void 0:this._backgroundIntensity=Math.min(Math.max(e,0),10),this.applyClearFlagsIfIsActiveCamera())}get backgroundIntensity(){return this._backgroundIntensity}_backgroundIntensity=void 0;set backgroundRotation(e){e!==this._backgroundRotation&&(e===void 0?this._backgroundRotation=void 0:this._backgroundRotation=e,this.applyClearFlagsIfIsActiveCamera())}get backgroundRotation(){return this._backgroundRotation}_backgroundRotation=void 0;set environmentIntensity(e){this._environmentIntensity=e}get environmentIntensity(){return this._environmentIntensity}_environmentIntensity=void 0;get backgroundColor(){return this._backgroundColor??null}set backgroundColor(e){e&&(this._backgroundColor||(this._backgroundColor=new Z(1,1,1,1)),this._backgroundColor.copy(e),(!("alpha"in e)||e.alpha===void 0)&&(this._backgroundColor.alpha=1),this.applyClearFlagsIfIsActiveCamera())}set targetTexture(e){this._targetTexture=e}get targetTexture(){return this._targetTexture}_targetTexture=null;_backgroundColor;_fov;_cam=null;_clearFlags=2;_skybox;get cam(){return this.threeCamera}get threeCamera(){return this.activeAndEnabled&&this.buildCamera(),this._cam}static _origin=new c.Vector3;static _direction=new c.Vector3;screenPointToRay(e,t,i){const n=this.threeCamera,o=ll._origin;o.set(e,t,-1),this.context.input.convertScreenspaceToRaycastSpace(o),Yy&&console.log("screenPointToRay",e.toFixed(2),t.toFixed(2),"now:",o.x.toFixed(2),o.y.toFixed(2),"isInXR:"+this.context.isInXR),o.z=-1,o.unproject(n);const r=ll._direction.set(o.x,o.y,o.z),a=X(n);return r.sub(a),r.normalize(),i?(i.set(a,r),i):new c.Ray(a.clone(),r.clone())}_frustum;getFrustum(){return this._frustum||(this._frustum=new c.Frustum,this.updateFrustum()),this._frustum}updateFrustum(){this._frustum||(this._frustum=new c.Frustum),this._frustum.setFromProjectionMatrix(this.getProjectionScreenMatrix(this._projScreenMatrix,!0),this.context.renderer.coordinateSystem)}getProjectionScreenMatrix(e,t){return t&&this._projScreenMatrix.multiplyMatrices(this.threeCamera.projectionMatrix,this.threeCamera.matrixWorldInverse),e===this._projScreenMatrix?e:e.copy(this._projScreenMatrix)}_projScreenMatrix=new c.Matrix4;awake(){Yy&&window.addEventListener("pointerdown",e=>{const t=e.clientX,i=e.clientY;console.log("touch",t.toFixed(2),i.toFixed(2));const n=this.screenPointToRay(t,i),o="#"+Math.floor(Math.random()*16777215).toString(16);B.DrawRay(n.origin,n.direction,o,10)})}onEnable(){As&&console.log(`Camera enabled: "${this.name}". ClearFlags=${Fo[this._clearFlags]}`,this),this.buildCamera(),(this.tag=="MainCamera"||!this.context.mainCameraComponent)&&(this.context.setCurrentCamera(this),N1(this)),this.applyClearFlagsIfIsActiveCamera({applySkybox:!0})}onDisable(){this.context.removeCamera(this)}onLeaveXR(e){this.fieldOfView=this._fov}onBeforeRender(){if(this._cam&&(this._frustum&&this.updateFrustum(),this._clearFlags===2&&this.applyClearFlagsIfIsActiveCamera(),this._targetTexture)){this.context.isManagedExternally&&(this._warnedAboutExternalRenderer||(this._warnedAboutExternalRenderer=!0,console.warn("Rendering with external renderer is not supported yet. This may not work or throw errors. Please remove the the target texture from your camera: "+this.name,this.targetTexture))),this.context.composer;const e=this.context.renderer;if(e){const t=this.context.mainCameraComponent;this.applyClearFlags(),this._targetTexture.render(this.context.scene,this._cam,e),t?.applyClearFlags()}}}buildCamera(){if(this._cam)return;const e=this.gameObject.isCamera;let t=null;if(e?(t=this.gameObject,t?.layers.enableAll(),t instanceof c.PerspectiveCamera&&(this._fov=t.fov)):t=this.gameObject.children[0],t&&t.isCamera)t instanceof c.PerspectiveCamera&&(this._fov&&(t.fov=this._fov),t.near=this._nearClipPlane,t.far=this._farClipPlane,t.updateProjectionMatrix());else if(!this.orthographic)t=new c.PerspectiveCamera(this.fieldOfView,window.innerWidth/window.innerHeight,this._nearClipPlane,this._farClipPlane),this.fieldOfView&&(t.fov=this.fieldOfView),this.gameObject.add(t);else{const i=this.orthographicSize*100;t=new c.OrthographicCamera(window.innerWidth/-i,window.innerWidth/i,window.innerHeight/i,window.innerHeight/-i,this._nearClipPlane,this._farClipPlane),this.gameObject.add(t)}this._cam=t,this._cam.layers.mask=this._cullingMask,this.tag=="MainCamera"&&this.context.setCurrentCamera(this)}applyClearFlagsIfIsActiveCamera(e){this.context.mainCameraComponent===this&&this.applyClearFlags(e)}applyClearFlags(e){if(!this._cam){As&&console.log("Camera does not exist (apply clear flags)");return}if(this.fieldOfView=this.fieldOfView,As){const i=`[Camera] Apply ClearFlags: ${Fo[this._clearFlags]} - "${this.name}"`;console.debug(i)}const t=this.context.domElement.getAttribute("background-image")||this.context.domElement.getAttribute("background-color");switch(this._clearFlags){case 0:return;case 1:if(ll.backgroundShouldBeTransparent(this.context)&&(!this.ARBackgroundAlpha||this.ARBackgroundAlpha<.001)){this.context.scene.background=null,this.context.renderer.setClearColor(0,0);return}(!this.scene.background||!this._skybox||e?.applySkybox===!0)&&this.applySceneSkybox(),this._backgroundBlurriness!==void 0&&!this.context.domElement.getAttribute("background-blurriness")?this.context.scene.backgroundBlurriness=this._backgroundBlurriness:As&&console.warn(`Camera "${this.name}" has no background blurriness`),this._backgroundIntensity!==void 0&&!this.context.domElement.getAttribute("background-intensity")&&(this.context.scene.backgroundIntensity=this._backgroundIntensity),this._backgroundRotation!==void 0&&!this.context.domElement.getAttribute("background-rotation")?this.context.scene.backgroundRotation=this._backgroundRotation:As&&console.warn(`Camera "${this.name}" has no background intensity`);break;case 2:if(this._backgroundColor&&!t){let i=this._backgroundColor.alpha;ll.backgroundShouldBeTransparent(this.context)&&(i=this.ARBackgroundAlpha??0),this.context.scene.background=null,this.context.xr?.isVR?this.context.renderer.setClearColor(rb(this._backgroundColor).convertLinearToSRGB()):this.context.renderer.setClearColor(this._backgroundColor,i)}else this._backgroundColor||As&&console.warn(`[Camera] has no background color "${this.name}" `);break;case 4:t||(this.context.scene.background=null,this.context.renderer.setClearColor(0,0));break}}applySceneSkybox(){this._skybox||(this._skybox=new z1(this)),this._skybox.apply()}static backgroundShouldBeTransparent(e){const t=e.renderer.xr?.getSession();if(!t)return!1;if(typeof t._transparent=="boolean")return t._transparent;const i=t.environmentBlendMode;As&&Se("Environment blend mode: "+i+" on "+navigator.userAgent);let n=i==="additive"||i==="alpha-blend";return e.isInAR&&i==="opaque"&&(navigator.userAgent?.includes("OculusBrowser")||navigator.userAgent?.includes("Mozilla")&&navigator.userAgent?.includes("Mobile WebXRViewer/v2"))&&(n=!0),t._transparent=n,n}};It([f()],xt.prototype,"aspect",1);It([f()],xt.prototype,"fieldOfView",1);It([f()],xt.prototype,"nearClipPlane",1);It([f()],xt.prototype,"farClipPlane",1);It([f()],xt.prototype,"clearFlags",1);It([f()],xt.prototype,"orthographic",2);It([f()],xt.prototype,"orthographicSize",2);It([f()],xt.prototype,"ARBackgroundAlpha",2);It([f()],xt.prototype,"cullingMask",1);It([f()],xt.prototype,"backgroundBlurriness",1);It([f()],xt.prototype,"backgroundIntensity",1);It([f(c.Euler)],xt.prototype,"backgroundRotation",1);It([f()],xt.prototype,"environmentIntensity",1);It([f(Z)],xt.prototype,"backgroundColor",1);It([f(xn)],xt.prototype,"targetTexture",1);let Vt=xt;class z1{_camera;_skybox;get context(){return this._camera?.context}constructor(e){this._camera=e}apply(){if(this._skybox=this.context.lightmaps.tryGetSkybox(this._camera.sourceId),!this._skybox)this._did_log_failed_to_find_skybox||(this._did_log_failed_to_find_skybox=!0,console.warn(`Camera "${this._camera.name}" has no skybox texture. ${this._camera.sourceId}`));else if(this.context.scene.background!==this._skybox){const e=this.context.domElement.getAttribute("background-image")||this.context.domElement.getAttribute("background-color");As&&console.debug(`[Camera] Apply Skybox ${this._skybox?.name} ${e} - "${this._camera.name}"`),e?.length||(this._skybox.mapping=c.EquirectangularReflectionMapping,this.context.scene.background=this._skybox)}}}function N1(s){x("freecam")&&s.context.mainCameraComponent===s&&S.getOrAddComponent(s.gameObject,de)}class ts extends k{get listener(){return this._listener==null&&(this._listener=new c.AudioListener),this._listener}_listener=null;onEnable(){en.registerWaitForInteraction(this.onInteraction),this.addListenerIfItExists()}onDisable(){en.unregisterWaitForInteraction(this.onInteraction),this.removeListenerIfItExists()}onInteraction=()=>{this.destroyed||this.listener==null||this.addListenerIfItExists()};addListenerIfItExists(){const e=this._listener;if(!e||e?.parent)return;const t=this.context.mainCameraComponent||S.getComponentInParent(this.gameObject,Vt);t?.threeCamera?t.threeCamera.add(e):this.gameObject.add(e),e.filter?(e.gain.connect(e.filter),e.filter.connect(e.context.destination)):e.gain.connect(e.context.destination)}removeListenerIfItExists(){const e=this._listener;e&&(e.removeFromParent(),e.filter&&e.filter.disconnect(),e.gain&&e.gain.disconnect())}}var V1=Object.defineProperty,$1=Object.getOwnPropertyDescriptor,on=(s,e,t,i)=>{for(var n=i>1?void 0:i?$1(e,t):e,o=s.length-1,r;o>=0;o--)(r=s[o])&&(n=(i?r(e,t,n):r(n))||n);return i&&n&&V1(e,t,n),n};const lt=x("debugaudio"),Ui=class Ls extends k{static get userInteractionRegistered(){return en.userInteractionRegistered}static registerWaitForAllowAudio(e){en.registerWaitForInteraction(e)}clip="";playOnAwake=!1;preload=!0;playInBackground=!0;get isPlaying(){return this.sound?.isPlaying??!1}get duration(){return this.sound?.buffer?.duration}get time01(){const e=this.duration;return e&&this.sound?this.sound?.context.currentTime/e:0}set time01(e){const t=this.duration;t&&this.sound&&(this.time=e*t)}get time(){return this.sound?.source?this.sound.source?.context.currentTime-this._lastContextTime+this.sound.offset:0}set time(e){if(this.sound){if(e===this.sound.offset)return;const t=this.isPlaying;this.stop(),this.sound.offset=e,t&&this.play()}}get loop(){return this.sound&&(this._loop=this.sound.getLoop()),this._loop}set loop(e){this._loop=e,this.sound&&this.sound.setLoop(e)}get spatialBlend(){return this._spatialBlend}set spatialBlend(e){e!==this._spatialBlend&&(this._spatialBlend=e,this._needUpdateSpatialDistanceSettings=!0)}get minDistance(){return this._minDistance}set minDistance(e){this._minDistance!==e&&(this._minDistance=e,this._needUpdateSpatialDistanceSettings=!0)}get maxDistance(){return this._maxDistance}set maxDistance(e){this._maxDistance!==e&&(this._maxDistance=e,this._needUpdateSpatialDistanceSettings=!0)}_spatialBlend=0;_minDistance=1;_maxDistance=100;get volume(){return this._volume}set volume(e){this._volume=e,this.sound&&!this.context.application.muted&&(lt&&console.log(this.name,"audio set volume",e),this.sound.setVolume(e))}_volume=1;set pitch(e){this.sound&&this.sound.setPlaybackRate(e)}get pitch(){return this.sound?this.sound.getPlaybackRate():1}rollOffMode=0;_loop=!1;sound=null;helper=null;wasPlaying=!1;audioLoader=null;shouldPlay=!1;_lastClipStartedLoading=null;_audioElement=null;get Sound(){if(!this.sound&&Ls.userInteractionRegistered){let e=this.gameObject.getComponent(ts)??this.context.mainCamera.getComponent(ts)??lc(ts,this.context,!1);!e&&this.context.mainCamera&&(e=this.context.mainCamera.addComponent(ts)),e?.listener?(this.sound=new c.PositionalAudio(e.listener),this.gameObject?.add(this.sound)):lt&&console.warn("No audio listener found in scene - can not play audio")}return this.sound}get ShouldPlay(){return this.shouldPlay}get audioContext(){return this.sound?.context}awake(){lt&&console.log("[AudioSource]",this),this.audioLoader=new c.AudioLoader,this.playOnAwake&&(this.shouldPlay=!0),this.preload&&typeof this.clip=="string"&&this.audioLoader.load(this.clip,this.createAudio,()=>{},console.error)}onEnable(){this.sound&&this.gameObject.add(this.sound),Ls.userInteractionRegistered?this.playOnAwake&&this.context.application.isVisible&&this.play():Ls.registerWaitForAllowAudio(()=>{this.enabled&&!this.destroyed&&this.shouldPlay&&this.onNewClip(this.clip)}),globalThis.addEventListener("visibilitychange",this.onVisibilityChanged),this.context.application.addEventListener(Qf.MuteChanged,this.onApplicationMuteChanged)}onDisable(){globalThis.removeEventListener("visibilitychange",this.onVisibilityChanged),this.context.application.removeEventListener(Qf.MuteChanged,this.onApplicationMuteChanged),this.pause()}onVisibilityChanged=()=>{switch(document.visibilityState){case"hidden":(this.playInBackground===!1||exports.DeviceUtilities.isMobileDevice())&&(this.wasPlaying=this.isPlaying,this.isPlaying&&this.pause());break;case"visible":lt&&console.log("visible",this.enabled,this.playOnAwake,!this.isPlaying,Ls.userInteractionRegistered,this.wasPlaying),this.enabled&&this.playOnAwake&&!this.isPlaying&&Ls.userInteractionRegistered&&this.wasPlaying&&this.play();break}};onApplicationMuteChanged=()=>{this.context.application.muted?this.sound?.setVolume(0):this.sound?.setVolume(this.volume)};createAudio=e=>{if(this.destroyed){lt&&console.warn("AudioSource destroyed, not creating audio",this.name);return}lt&&console.log("AudioBuffer finished loading",e);const t=this.Sound;if(!t){lt&&console.warn("Failed getting sound?",this.name);return}t.isPlaying&&t.stop(),e&&t.setBuffer(e),t.loop=this._loop,this.context.application.muted?t.setVolume(0):t.setVolume(this.volume),t.autoplay=this.shouldPlay&&Ls.userInteractionRegistered,this.applySpatialDistanceSettings(),t.isPlaying&&t.stop(),Ls.registerWaitForAllowAudio(this.__onAllowAudioCallback)};__onAllowAudioCallback=()=>{this.shouldPlay&&this.play()};applySpatialDistanceSettings(){const e=this.sound;if(!e)return;this._needUpdateSpatialDistanceSettings=!1;const t=D.lerp(10*this._maxDistance/Math.max(1e-4,this.spatialBlend),this._minDistance,this.spatialBlend);switch(lt&&console.log(this.name,this._minDistance,this._maxDistance,this.spatialBlend,"Ref distance="+t),e.setRefDistance(t),e.setMaxDistance(Math.max(.01,this._maxDistance)),this.rollOffMode){case 0:e.setDistanceModel("exponential");break;case 1:e.setDistanceModel("linear");break;case 2:console.warn("Custom rolloff for AudioSource is not supported: "+this.name);break}this.spatialBlend>0?lt&&!this.helper&&(this.helper=new q.PositionalAudioHelper(e,e.getRefDistance()),e.add(this.helper)):this.helper&&this.helper.parent&&this.helper.removeFromParent()}async onNewClip(e){if(e&&(this.clip=e),typeof e=="string")if(lt&&console.log(e),e.endsWith(".mp3")||e.endsWith(".wav")){if(this.audioLoader||(this.audioLoader=new c.AudioLoader),this.shouldPlay=!0,this._lastClipStartedLoading===e){lt&&console.log("Is currently loading:",this._lastClipStartedLoading,this);return}this._lastClipStartedLoading=e,lt&&console.log("load audio",e);const t=await this.audioLoader.loadAsync(e).catch(console.error);if(this.destroyed)return;this._lastClipStartedLoading===e&&(this._lastClipStartedLoading=null),t&&this.createAudio(t)}else console.warn("Unsupported audio clip type",e);else this.shouldPlay=!0,this.createAudio()}play(e=void 0){!e&&this.clip&&(e=this.clip),e!==void 0&&typeof e!="string"&&!(e instanceof MediaStream)&&(A()&&console.warn("Called play on AudioSource with unknown argument type:",e+`
949
+ Could not find method ${r.method} on object ${l.name}`,l,typeof l[r.method])};if(typeof l[r.method]!="function"){let p=!1,m=l;for(;m;){const y=Object.getOwnPropertyDescriptor(m,r.method);if(y&&(y.writable===!0||y.set)){p=!0;break}m=Object.getPrototypeOf(m)}!p&&(A()||st)&&d()}}if(l){let d=r.argument;if(d!==void 0?d=a(d):r.arguments!==void 0&&(d=r.arguments.map(a)),!l[r.method])console.warn(`EventList method not found: "${r.method}" on ${l?.name}`);else{d!==void 0&&!Array.isArray(d)&&(d=[d]);const p=new es(l,r.method,d,r.enabled);i.push(p)}}else A()&&console.warn(`[Dev] EventList: Could not find event listener in scene (${t.object?.name})`,r)}const n=new ae(i);st&&console.log(n);const o=t.target;return o!==void 0&&t.path!==void 0&&n.setEventTarget(t.path,o),n}}}const E1=new R1,pd=new WeakMap,T1=c.Texture.prototype.clone;c.Texture.prototype.clone=function(){const s=T1.call(this);return pd.has(s)||pd.set(s,this),s};class H0 extends Fi{constructor(){super([xn,c.WebGLRenderTarget])}onSerialize(e,t){}onDeserialize(e,t){if(e instanceof c.Texture&&t.type===xn){let i=e;pd.has(i)&&(i=pd.get(i)),i.isRenderTargetTexture=!0,i.flipY=!0,i.offset.y=1,i.repeat.y=-1,i.needsUpdate=!0,i.mipmaps=[],i instanceof c.CompressedTexture&&(i.isCompressedTexture=!1,i.format=c.RGBAFormat);const n=new xn(i.image.width,i.image.height,{colorSpace:c.LinearSRGBColorSpace});return n.texture=i,n}}}new H0;class q0 extends Fi{constructor(){super([URL])}onSerialize(e,t){return null}onDeserialize(e,t){if(typeof e=="string"&&e.length>0)return Ys(t.gltfId,e)}}new q0;var A1=Object.defineProperty,L1=(s,e,t,i)=>{for(var n=void 0,o=s.length-1,r;o>=0;o--)(r=s[o])&&(n=r(e,t,n)||n);return n&&A1(e,t,n),n};class la extends k{awake(){Dt.createIfNoneExists(this.context)}onEnable(){Dt.get(this.context)?.register(this)}onDisable(){Dt.get(this.context)?.unregister(this)}}class ci extends la{targets=null;raycastHits=[];ignoreSkinnedMeshes=!1;start(){this.targets=[this.gameObject]}performRaycast(e=null){if(!this.targets)return null;e??=new Js,e.targets=this.targets,e.results=this.raycastHits,e.useAcceleratedRaycast=!0;const t=e.testObject;this.ignoreSkinnedMeshes&&(e.testObject=n=>n instanceof c.SkinnedMesh?"continue in children":t?t(n):!0);const i=this.context.physics.raycast(e);return e.testObject=t,i}}L1([f()],ci.prototype,"ignoreSkinnedMeshes");class qd extends ci{constructor(){super(),this.ignoreSkinnedMeshes=!0}}class Ho extends la{static allow=!0;performRaycast(e){if(!H.active||!Ho.allow||!e?.ray)return null;const t=e.ray.origin;return this.context.physics.sphereOverlap(t,.015,!1,!0)}}class wm{static getObject(e){const t=e[ii];return t&&(t.isComponent===!0?e=t.gameObject:e=t),e}static isInteractable(e,t){if(t&&(t.canvasGroup=void 0,t.graphic=void 0),e==null||!e.visible||(e=this.getObject(e),!e.visible))return!1;const i=this.tryFindCanvasGroup(e);if(i?.isCanvasGroup===!0&&(t&&(t.canvasGroup=i),i.blocksRaycasts===!1||i.interactable===!1))return!1;const n=Wo(e,o=>{if(o.isGraphic===!0)return o},!1);return t&&n?.isGraphic===!0&&(t.graphic=n),!(n?.raycastTarget===!1||n?.layer===2)}static tryFindCanvasGroup(e){if(!e)return null;const t=Wo(e,i=>{const n=i;if(n.blocksRaycasts!==void 0&&n.interactable!==void 0)return n},!1);return t!==void 0?t:this.tryFindCanvasGroup(e.parent)}}function Sm(s){const e=s[ii];return e||(s.parent?Sm(s.parent):null)}function D1(s){return s.isUI===!0||typeof s[ii]=="object"}function md(s,e){if(!s)return;const t=s.material;if(t?.isMaterial===!0){const i=s.parent;i&&i.isText,t.side=e.doubleSided??!0?c.DoubleSide:c.FrontSide,t.shadowSide=e.doubleSided?c.DoubleSide:c.FrontSide,s.castShadow=e.castShadows?e.castShadows:!1,s.receiveShadow=e.receiveShadows?e.receiveShadows:!1}for(const i of s.children)md(i,e)}function Lr(s,e,t){s[e]===void 0&&console.warn("Field",e,"is undefined on",s);const i=Proxy.revocable(s[e],{set(r,a,l,h){const d=r[a],u=Reflect.set(r,a,l,h);return t(l,d),u}}),n=i.revoke,o=s[e];return i.revoke=()=>{s[e]=o,n()},s[e]=i.proxy,i}const Qy=Symbol("Scheduled action");function I1(s,e,t=pe.OnBeforeRender){let i=s[Qy];i||(i=s[Qy]={});const n=e.name;i[t]||(i[t]={});const o=i[t];if(o[n])return;function*a(){e?.call(s),o[n]=null}const l=s.startCoroutine(a(),t);o[n]=l}const Ts=x("debugeventsystem");var gp=(s=>(s.BeforeHandleInput="BeforeHandleInput",s.AfterHandleInput="AfterHandleInput",s))(gp||{});I0(s=>{Dt.createIfNoneExists(s)});class Dt extends k{static ensureUpdateMeshUI(e,t,i=!1){za.update(e,t,i)}static markUIDirty(e){za.markDirty()}static createIfNoneExists(e){e.scene.getComponent(Dt)||e.scene.addComponent(Dt)}static get(e){return this.createIfNoneExists(e),e.scene.getComponent(Dt)}static get instance(){return this.get(F.Current)}raycaster=[];register(e){e&&this.raycaster&&!this.raycaster.includes(e)&&this.raycaster?.push(e)}unregister(e){const t=this.raycaster?.indexOf(e);t!==void 0&&t!==-1&&this.raycaster?.splice(t,1)}get hasActiveUI(){return this.currentActiveMeshUIComponents.length>0}get isHoveringObjects(){return this.hoveredByID.size>0}awake(){this.gameObject!==this.context.scene&&(console.debug(`[Needle Engine] EventSystem is only allowed on the scene root. Disabling EventSystem on '${this.gameObject.name}'`),this.enabled=!1)}start(){this.context.scene.getComponent(la)||this.context.scene.addComponent(ci)}onEnable(){this.context.input.addEventListener(xe.PointerDown,this.onPointerEvent),this.context.input.addEventListener(xe.PointerUp,this.onPointerEvent),this.context.input.addEventListener(xe.PointerMove,this.onPointerEvent)}onDisable(){this.context.input.removeEventListener(xe.PointerDown,this.onPointerEvent),this.context.input.removeEventListener(xe.PointerUp,this.onPointerEvent),this.context.input.removeEventListener(xe.PointerMove,this.onPointerEvent)}pressedByID=new Map;hoveredByID=new Map;onBeforeRender(){this.resetMeshUIStates()}onPointerEvent=e=>{if(e===void 0||e.propagationStopped||e.defaultPrevented||e.used)return;const t=new fc(this.context.input,e);this._currentPointerEventName=e.type,t.inputSource=this.context.input,t.isClick=e.isClick,t.isDoubleClick=e.isDoubleClick,t.isDown=e.type==xe.PointerDown,t.isUp=e.type==xe.PointerUp,t.isPressed=this.context.input.getPointerPressed(e.pointerId);const i=new Js;e.hasRay?i.ray=e.ray:i.screenPoint=this.context.input.getPointerPositionRC(e.pointerId),i.allowSlowRaycastFallback=e.isClick||e.isDoubleClick;const n=this.performRaycast(i);if(Ts&&(t.isDown?console.log("DOWN",{id:t.pointerId,hits:n.length}):t.isUp&&console.log("UP",{id:t.pointerId,hits:n.length}),t.isClick&&console.log("CLICK",{id:t.pointerId,hits:n.length})),n){for(const r of n)r.event=e,e.intersections.push(r);e.origin.onPointerHits&&e.origin.onPointerHits({sender:this,event:e,hits:n})}Ts&&t.isClick&&Se("EventSystem: "+t.pointerId+" - "+this.context.time.frame+" - Up:"+t.isUp+", Down:"+t.isDown);const o={sender:this,args:t,hasActiveUI:this.currentActiveMeshUIComponents.length>0};this.dispatchEvent(new CustomEvent("BeforeHandleInput",{detail:o})),this.handleIntersections(n,t),this.dispatchEvent(new CustomEvent("AfterHandleInput",{detail:o}))};_sortedHits=[];_testObjectsCache=new Map;_currentlyActiveRaycaster=null;_currentPointerEventName=null;shouldRaycastObject=e=>{const t=e&&"getComponent"in e?e.getComponent(la):null;if(t&&t!=this._currentlyActiveRaycaster)return!1;let i=null;if(D1(e)&&(i=e[ii]?.gameObject),this._testObjectsCache.has(e)||i&&this._testObjectsCache.has(i))return this._testObjectsCache.get(e)===!1?"continue in children":!0;{let o=fd(e,this._currentPointerEventName);if(!o&&i&&(o=fd(i,this._currentPointerEventName)),o){this._testObjectsCache.set(e,!0);for(const r of e.children)this.shouldRaycastObject_AddToYesCache(r);return!0}return this._testObjectsCache.set(e,!1),"continue in children"}};shouldRaycastObject_AddToYesCache(e){this._testObjectsCache.set(e,!0);for(const t of e.children)this.shouldRaycastObject_AddToYesCache(t)}performRaycast(e){if(!this.raycaster)return null;this._testObjectsCache.clear(),this._sortedHits.length=0,e.testObject=this.shouldRaycastObject;for(const t of this.raycaster){if(!t.activeAndEnabled)continue;this._currentlyActiveRaycaster=t;const i=t.performRaycast(e);this._currentlyActiveRaycaster=null,i&&i.length>0&&this._sortedHits.push(...i)}return this._sortedHits.sort((t,i)=>t.distance-i.distance),this._sortedHits}assignHitInformation(e,t){t?(e.intersection=t,e.point=t.point,e.normal=t.normal,e.face=t.face,e.distance=t.distance,e.instanceId=t.instanceId):(e.intersection=void 0,e.point=void 0,e.normal=void 0,e.face=void 0,e.distance=void 0,e.instanceId=void 0)}handleIntersections(e,t){if(e?.length){e=this.sortCandidates(e);for(const n of e){if(t.event.immediatePropagationStopped)return!1;if(this.assignHitInformation(t,n),this.handleEventOnObject(n.object,t))return!0}}this.assignHitInformation(t,e?.[0]),this.invokePointerCapture(t);const i=this.hoveredByID.get(t.pointerId);return i&&this.propagatePointerExit(i.obj,i.data,null),this.hoveredByID.delete(t.pointerId),t.isUp&&(this.pressedByID.get(t.pointerId)?.handlers.forEach(n=>this.invokeOnPointerUp(t,n)),this.pressedByID.delete(t.pointerId)),!1}_sortingBuffer=[];_noDepthTestingResults=[];sortCandidates(e){this._sortingBuffer.length=0,this._noDepthTestingResults.length=0;for(let t=0;t<e.length;t++){const i=e[t],n=i.object;if(n.material&&n.material.depthTest===!1){this._noDepthTestingResults.push(i);continue}this._sortingBuffer.push(i)}for(const t of this._sortingBuffer)this._noDepthTestingResults.push(t);return this._noDepthTestingResults}out={};handleEventOnObject(e,t){if(!this.testIsVisible(e))return t.isClick&&Ts&&console.log("not allowed",e),!1;if(t.pointerId===void 0)return Ts&&console.error("Event without pointer can't be handled",t),!1;t.object=e;const i=e.parent,n=t.isClick??!1;let o=null;if(i&&i.isUI){const d=(t.isPressed||t.isClick)??!1;if(i[ii]){const u=i[ii].gameObject;if(u){if(!wm.isInteractable(u,this.out))return!1;o=this.out.canvasGroup??null,this.handleMeshUIIntersection(e,d),e=u}}}n&&Ts&&console.log(this.context.time.frame,e);const r=this.hoveredByID.get(t.pointerId),a=r?.obj;a!==e&&a&&this.propagatePointerExit(a,r.data,e);const h=this.hoveredByID.get(t.pointerId);if(h?(h.obj=e,h.data=t):this.hoveredByID.set(t.pointerId,{obj:e,data:t}),t.isDown){const d=this.pressedByID.get(t.pointerId);d?(d.obj=e,d.data=t):this.pressedByID.set(t.pointerId,{obj:e,data:t,handlers:new Set})}return(o===null||o.interactable)&&this.handleMainInteraction(e,t,a??null),!0}propagate(e,t){for(;e;)S.foreachComponent(e,i=>{t(i)},!1),e=e.parent}handleMainInteraction(e,t,i){const n=this.pressedByID.get(t.pointerId),o=i!==e;let r=!0;switch(t.event.pointerType){case"mouse":case"touch":const a=this.context.input.getPointerPositionLastFrame(t.pointerId),l=this.context.input.getPointerPosition(t.pointerId);r=a&&!D.approximately(a,l);break}this.propagate(e,a=>{const l=a;l.interactable!==!1&&(!l.activeAndEnabled||!l.enabled||(l.onPointerEnter&&o&&this.handlePointerEnter(l,t),t.isDown&&l.onPointerDown&&(l.onPointerDown(t),n?.handlers.add(l),this.handlePointerCapture(t,l)),l.onPointerMove&&(r&&l.onPointerMove(t),this.handlePointerCapture(t,l)),t.isUp&&(l.onPointerUp&&(this.invokeOnPointerUp(t,l),n?.handlers.delete(l)),l.onPointerExit&&t.event?.pointerType===Id.Touch&&(this.handlePointerExit(l,t),this.hoveredByID.delete(t.pointerId))),t.isClick&&l.onPointerClick&&l.onPointerClick(t)))}),t.isUp&&(n?.handlers.forEach(a=>{this.invokeOnPointerUp(t,a)}),this.pressedByID.delete(t.pointerId))}propagatePointerExit(e,t,i){this.propagate(e,n=>{if(!n.gameObject||n.destroyed)return;const o=n;if(o.onPointerExit||o.onPointerEnter){if(i&&this.isChild(i,n.gameObject))return;this.handlePointerExit(o,t)}})}invokeOnPointerUp(e,t){t.onPointerUp?.call(t,e),this.releasePointerCapture(e,t)}handlePointerEnter(e,t){e.onPointerEnter&&this.updatePointerState(e,t.pointerId,this.pointerEnterSymbol,!0)&&e.onPointerEnter(t),this.updatePointerState(e,t.pointerId,this.pointerExitSymbol,!1)}handlePointerExit(e,t){e.onPointerExit&&this.updatePointerState(e,t.pointerId,this.pointerExitSymbol,!0)&&e.onPointerExit(t),this.updatePointerState(e,t.pointerId,this.pointerEnterSymbol,!1)}updatePointerState(e,t,i,n){let o=e[i];if(n)return o&&o.includes(t)?!1:(o=o||[],o.push(t),e[i]=o,!0);{if(!o||!o.includes(t))return!1;const r=o.indexOf(t);return r!==-1&&o.splice(r,1),!0}}_capturedPointer={};handlePointerCapture(e,t){if(e.z__pointer_ctured){e.z__pointer_ctured=!1;const i=e.pointerId;if(t.onPointerMove){const n=this._capturedPointer[i]||[];n.push(t),this._capturedPointer[i]=n}else A()&&!t.z__warned_no_pointermove&&(t.z__warned_no_pointermove=!0,console.warn("PointerCapture was requested but the component doesn't implement onPointerMove. It will not receive any pointer events"))}else e.z__pointer_cture_rleased&&(e.z__pointer_cture_rleased=!1,this.releasePointerCapture(e,t))}releasePointerCapture(e,t){const i=e.pointerId;if(this._capturedPointer[i]){const n=this._capturedPointer[i].indexOf(t);n!==-1&&(this._capturedPointer[i].splice(n,1),Ts&&console.log("released pointer capture",i,t,this._capturedPointer))}}invokePointerCapture(e){if(e.event.type===xe.PointerMove){const t=e.pointerId,i=this._capturedPointer[t];if(i){Ts&&console.log("Captured",t,i);for(let n=0;n<i.length;n++){const o=i[n];if(o.destroyed){i.splice(n,1),n--;continue}o.onPointerMove?.call(o,e)}}}}pointerEnterSymbol=Symbol("pointerEnter");pointerExitSymbol=Symbol("pointerExit");isChild(e,t){return!e||!t?!1:e===t?!0:e.parent?this.isChild(e.parent,t):!1}handleMeshUiObjectWithoutShadowDom(e,t){return!e||!e.isUI?!0:this.handleMeshUIIntersection(e,t)}currentActiveMeshUIComponents=[];handleMeshUIIntersection(e,t){const i=za.updateState(e,t);return i&&this.currentActiveMeshUIComponents.push(i),i!==null}resetMeshUIStates(){if(this.context.input.getPointerPressedCount()>0&&za.resetLastSelected(),!(!this.currentActiveMeshUIComponents||this.currentActiveMeshUIComponents.length<=0)){for(let e=0;e<this.currentActiveMeshUIComponents.length;e++){const t=this.currentActiveMeshUIComponents[e];za.resetState(t)}this.currentActiveMeshUIComponents.length=0}}testIsVisible(e){return e?S.isActiveSelf(e)?this.testIsVisible(e.parent):!1:!0}}class za{static lastSelected=null;static lastUpdateFrame=[];static needsUpdate=!1;static markDirty(){this.needsUpdate=!0}static update(e,t,i=!1){if(i){e.update();return}const n=t.time.frameCount;for(const o of this.lastUpdateFrame)if(o.context===t){if(n===o.frame)return;o.frame=n;let r=this.needsUpdate||n<1;o.nextUpdate<=n&&(r=!0),r&&(Ts&&console.log("Update threemeshui"),this.needsUpdate=!1,o.nextUpdate=n+60,e.update());return}this.lastUpdateFrame=[{context:t,frame:n,nextUpdate:n+60}],e.update(),this.needsUpdate=!1}static updateState(e,t){let i=null;if(e&&(i=this.findBlockOrTextInParent(e),i&&i!==this.lastSelected)){if(i.interactable===!1)return null;this.needsUpdate=!0}return i}static resetLastSelected(){const e=this.lastSelected;e&&(this.lastSelected=null,this.resetState(e))}static resetState(e){e&&(this.needsUpdate=!0)}static findBlockOrTextInParent(e){return e?e.isBlock||e.isText?e:this.findBlockOrTextInParent(e.parent):null}}var j1=Object.defineProperty,Ce=(s,e,t,i)=>{for(var n=void 0,o=s.length-1,r;o>=0;o--)(r=s[o])&&(n=r(e,t,n)||n);return n&&j1(e,t,n),n};const wi=x("debugorbit"),sf=x("freecam"),Na=x("debugcamerafit"),dh=x("smoothcam"),B1={LEFT:"",UP:"",RIGHT:"",BOTTOM:""};let of;class Vl extends CustomEvent{constructor(e,t){super("target-reached",{detail:{controls:e,type:t}})}}class de extends k{get isCameraController(){return!0}get controls(){return this._controls}get controllerObject(){return this._cameraObject}onStartInteraction(e){this.controls?.addEventListener("start",e)}autoTarget=!0;autoFit=!1;enableRotate=!0;autoRotate=!1;autoRotateSpeed=1;minAzimuthAngle=1/0;maxAzimuthAngle=1/0;minPolarAngle=0;maxPolarAngle=Math.PI;enableKeys=!1;enableDamping=!0;dampingFactor=.1;enableZoom=!0;minZoom=0;maxZoom=1/0;zoomSpeed=1;zoomToCursor=!1;enablePan=!0;lookAtConstraint=null;lookAtConstraint01=1;allowInterrupt=!0;middleClickToFocus=!0;doubleClickToFocus=!0;clickBackgroundToFitScene=2;get targetElement(){return this._controls?.domElement??this._targetElement}set targetElement(e){this._targetElement=e,this._controls&&this._controls.domElement!==e&&(this._controls.disconnect(),this._controls.domElement=e,this._controls.connect())}_targetElement=null;debugLog=!1;get targetLerpSpeed(){return 5}set targetLerpSpeed(e){this.targetLerpDuration=1/e}targetLerpDuration=1;rotateLeft(e){this._controls?._rotateLeft(e)}rotateUp(e){this._controls?._rotateUp(e)}pan(e,t){this._controls?._pan(e,t)}zoomIn(e){e>0?this._controls?._dollyIn(1-e):e<0&&this._controls?._dollyOut(1+e)}_controls=null;_cameraObject=null;_lookTargetLerpActive=!1;_lookTargetStartPosition=new c.Vector3;_lookTargetEndPosition=new c.Vector3;_lookTargetLerp01=0;_lookTargetLerpDuration=0;_cameraLerpActive=!1;_cameraStartPosition=new c.Vector3;_cameraEndPosition=new c.Vector3;_cameraLerp01=0;_cameraLerpDuration=0;_fovLerpActive=!1;_fovLerpStartValue=0;_fovLerpEndValue=0;_fovLerp01=0;_fovLerpDuration=0;_inputs=0;_enableTime=0;_startedListeningToKeyEvents=!1;_eventSystem;_afterHandleInputFn;_camera=null;_syncedTransform;_didSetTarget=0;awake(){wi&&console.debug("OrbitControls",this),this._didSetTarget=0,this._startedListeningToKeyEvents=!1}start(){this._eventSystem=Dt.get(this.context)??void 0,this._eventSystem&&(this._afterHandleInputFn=this.afterHandleInput.bind(this),this._eventSystem.addEventListener(gp.AfterHandleInput,this._afterHandleInputFn))}onDestroy(){this._controls?.dispose(),this._eventSystem?.removeEventListener(gp.AfterHandleInput,this._afterHandleInputFn)}onEnable(){this._didSetTarget=0,this._enableTime=this.context.time.time;const e=S.getComponent(this.gameObject,Vt);this._camera=e;let t=e?.threeCamera;if(!t&&this.gameObject instanceof c.PerspectiveCamera&&(t=this.gameObject),t&&Gf(t,this,!0),!this._controls&&t instanceof c.Object3D){this._cameraObject=t;const i=this.targetElement??this.context.renderer.domElement,n=t?.quaternion.clone();this._controls=new q.OrbitControls(t,i),t?.quaternion.copy(n),of===void 0&&(of={...this._controls.keys});const o=X(t),r=this.gameObject.worldForward,l=o.clone().sub(r.multiplyScalar(2.5));this._controls.target.copy(l)}if(this._controls)if(sf&&(this.enablePan=!0,this.enableZoom=!0,this.middleClickToFocus=!0,exports.DeviceUtilities.isMobileDevice()&&(this.doubleClickToFocus=!0)),this._controls.addEventListener("start",this.onControlsChangeStarted),this._controls.addEventListener("endMovement",this.onControlsChangeEnded),!this._startedListeningToKeyEvents&&this.enableKeys)this._startedListeningToKeyEvents=!0,this._controls.listenToKeyEvents(this.context.domElement);else try{this._controls.stopListenToKeyEvents()}catch{}this._syncedTransform=S.getComponent(this.gameObject,tn)??void 0,this.context.pre_render_callbacks.push(this.__onPreRender),this._activePointerEvents=[],this.context.input.addEventListener("pointerdown",this._onPointerDown,{queue:Nt.Early}),this.context.input.addEventListener("pointerdown",this._onPointerDownLate,{queue:Nt.Late}),this.context.input.addEventListener("pointerup",this._onPointerUp,{queue:Nt.Early}),this.context.input.addEventListener("pointerup",this._onPointerUpLate,{queue:Nt.Late})}onDisable(){if(this._camera?.threeCamera&&Gf(this._camera.threeCamera,this,!1),this._controls){this._controls.enabled=!1,this._controls.autoRotate=!1,this._controls.removeEventListener("start",this.onControlsChangeStarted),this._controls.removeEventListener("endMovement",this.onControlsChangeEnded);try{this._controls.stopListenToKeyEvents()}catch{}this._startedListeningToKeyEvents=!1}this._activePointerEvents.length=0,this.context.input.removeEventListener("pointerdown",this._onPointerDown),this.context.input.removeEventListener("pointerdown",this._onPointerDownLate),this.context.input.removeEventListener("pointerup",this._onPointerUp),this.context.input.removeEventListener("pointerup",this._onPointerUpLate)}_activePointerEvents;_lastTimeClickOnBackground=-1;_clickOnBackgroundCount=0;_onPointerDown=e=>{this._activePointerEvents.push(e)};_onPointerDownLate=e=>{e.used&&this._controls&&(this._controls.enabled=!1)};_onPointerUp=e=>{for(let t=this._activePointerEvents.length-1;t>=0;t--){const i=this._activePointerEvents[t];if(i.pointerId===e.pointerId&&i.button===e.button){this._activePointerEvents.splice(t,1);break}}if(this.clickBackgroundToFitScene>0&&e.isClick&&e.button===0){if(e.hasRay||e.intersections.push(...this.context.physics.raycast()),e.intersections.length<=0){const t=this.context.time.time-this._lastTimeClickOnBackground;this._lastTimeClickOnBackground=this.context.time.time,this.clickBackgroundToFitScene<=1||t<this.clickBackgroundToFitScene*.15?(this._clickOnBackgroundCount+=1,this._clickOnBackgroundCount>=this.clickBackgroundToFitScene-1&&this.fitCamera(this.context.scene.children,{immediate:!1})):this._clickOnBackgroundCount=0}wi&&console.log(this.clickBackgroundToFitScene,e.intersections.length,this._clickOnBackgroundCount)}};_onPointerUpLate=e=>{this.doubleClickToFocus&&e.isDoubleClick&&!e.used&&this.setTargetFromRaycast()};updateTargetNow(e){const t=new c.Ray(this._cameraObject?.worldPosition,this._cameraObject?.worldForward.multiplyScalar(-1)),i=this.context.physics.raycastFromRay(t,e),n=i.length>0?i[0]:void 0;n&&n.distance>this.minZoom&&n.distance<this.maxZoom&&(wi&&B.DrawWireSphere(n.point,.1,16711680,2),this._controls?.target.copy(i[0].point))}_orbitStartAngle=0;_zoomStartDistance=0;onControlsChangeStarted=()=>{this._controls&&(this._orbitStartAngle=this._controls.getAzimuthalAngle()+this._controls.getPolarAngle(),this._zoomStartDistance=this._controls.getDistance()),this._syncedTransform&&this._syncedTransform.requestOwnership()};onControlsChangeEnded=()=>{if(this._controls&&this.autoTarget){const t=this._controls.getAzimuthalAngle()+this._controls.getPolarAngle()-this._orbitStartAngle;Math.abs(t)<.01?(wi&&console.debug("OrbitControls: Update target",{deltaAngle:t}),this.updateTargetNow({allowSlowRaycastFallback:!1})):wi&&console.debug("OrbitControls: No target update",{deltaAngle:t})}};_shouldDisable=!1;afterHandleInput(e){e.detail.args.pointerId===0&&(e.detail.args.isDown?this._controls&&this._eventSystem&&(this._shouldDisable=this._eventSystem.hasActiveUI):(!e.detail.args.isPressed||e.detail.args.isUp)&&(this._shouldDisable=!1))}onPausedChanged(e){this._controls&&e&&(this._controls.enabled=!1)}onBeforeRender(){if(!this._controls)return;if(this._cameraObject!==this.context.mainCamera){this._controls.enabled=!1;return}if(this._controls.enabled=!0,(this.context.input.getPointerDown(1)||this.context.input.getPointerDown(2)||this.context.input.mouseWheelChanged||this.context.input.getPointerPressed(0)&&this.context.input.getPointerPositionDelta(0)?.length())&&(this._inputs+=1),this._inputs>0&&this.allowInterrupt&&(this.enableRotate&&(this.autoRotate=!1),this._cameraLerpActive=!1,this._lookTargetLerpActive=!1),this._inputs=0,this.autoTarget&&this._didSetTarget++===0){const t=S.getComponent(this.gameObject,Vt);if(t&&!this.setLookTargetFromConstraint()){this.debugLog&&console.log("NO TARGET");const i=X(t.threeCamera),n=Math.max(.01,i.length()),o=new c.Vector3(0,0,-n).applyMatrix4(t.threeCamera.matrixWorld);wi&&B.DrawLine(i,o,5592575,10),this.setLookTargetPosition(o,!0)}if(!this.setLookTargetFromConstraint()){const i=new Js;i.screenPoint=new c.Vector2(0,0),i.lineThreshold=.1;const n=this.context.physics.raycast(i);n.length>0&&this.setLookTargetPosition(n[0].point,!0),Na&&console.log("OrbitControls hits",...n)}}if(this.middleClickToFocus&&this.context.input.getPointerClicked(1)&&this.setTargetFromRaycast(),this._lookTargetLerpActive||this._cameraLerpActive||this._fovLerpActive){if(this._cameraLerpActive&&this._cameraObject)if(this._cameraLerp01+=this.context.time.deltaTime/this._cameraLerpDuration,this._cameraLerp01>=1)this._cameraObject.position.copy(this._cameraEndPosition),this._cameraLerpActive=!1,this.dispatchEvent(new Vl(this,"camera"));else{const t=D.easeInOutCubic(this._cameraLerp01);this._cameraObject.position.lerpVectors(this._cameraStartPosition,this._cameraEndPosition,t)}if(this._lookTargetLerpActive)if(this._lookTargetLerp01+=this.context.time.deltaTime/this._lookTargetLerpDuration,this._lookTargetLerp01>=1)this.lerpLookTarget(this._lookTargetEndPosition,this._lookTargetEndPosition,1),this._lookTargetLerpActive=!1,this.dispatchEvent(new Vl(this,"lookat"));else{const t=D.easeInOutCubic(this._lookTargetLerp01);this.lerpLookTarget(this._lookTargetStartPosition,this._lookTargetEndPosition,t)}if(this._fovLerpActive&&this._cameraObject){const t=this._cameraObject;if(this._fovLerp01+=this.context.time.deltaTime/this._fovLerpDuration,this._fovLerp01>=1)t.fov=this._fovLerpEndValue,this._fovLerpActive=!1;else{const i=D.easeInOutCubic(this._fovLerp01);t.fov=D.lerp(this._fovLerpStartValue,this._fovLerpEndValue,i)}t.updateProjectionMatrix()}}if(this._controls){if(this.debugLog&&(this._controls.domElement=this.context.renderer.domElement),this._controls.enabled=!this._shouldDisable&&this._camera===this.context.mainCameraComponent&&!this.context.isInXR&&!this._activePointerEvents.some(t=>t.used),this._controls.keys=this.enableKeys?of:B1,this._controls.autoRotate=this.autoRotate,this._controls.autoRotateSpeed=this.autoRotateSpeed,this._controls.enableZoom=this.enableZoom,this._controls.zoomSpeed=this.zoomSpeed,this._controls.zoomToCursor=this.zoomToCursor,this._controls.enableDamping=this.enableDamping,this._controls.dampingFactor=this.dampingFactor,this._controls.enablePan=this.enablePan,this._controls.enableRotate=this.enableRotate,this._controls.minAzimuthAngle=this.minAzimuthAngle,this._controls.maxAzimuthAngle=this.maxAzimuthAngle,this._controls.minPolarAngle=this.minPolarAngle,this._controls.maxPolarAngle=this.maxPolarAngle,sf||(this._camera?.threeCamera?.type==="PerspectiveCamera"?(this._controls.minDistance=this.minZoom,this._controls.maxDistance=this.maxZoom,this._controls.minZoom=0,this._controls.maxZoom=1/0):(this._controls.minDistance=0,this._controls.maxDistance=1/0,this._controls.minZoom=this.minZoom,this._controls.maxZoom=this.maxZoom)),typeof dh=="number"||dh===!0){this._controls.enableDamping=!0;const t=typeof dh=="number"?dh:.99;this._controls.dampingFactor=Math.max(.001,1-Math.min(1,t))}this.allowInterrupt||(this._lookTargetLerpActive&&(this._controls.enablePan=!1),this._cameraLerpActive&&(this._controls.enableRotate=!1,this._controls.autoRotate=!1),(this._lookTargetLerpActive||this._cameraLerpActive)&&(this._controls.enableZoom=!1)),this.context.isInXR||(!sf&&this.lookAtConstraint?.locked&&!this._lookTargetLerpActive&&this.setLookTargetFromConstraint(0,this.lookAtConstraint01),this._controls.update(this.context.time.deltaTime),wi&&B.DrawWireSphere(this._controls.target,.1,65280))}}__onPreRender=()=>{const e=this.context.pre_render_callbacks.indexOf(this.__onPreRender);e>=0&&this.context.pre_render_callbacks.splice(e,1),this.autoFit&&(this.autoFit=!1,this.fitCamera({centerCamera:"y",immediate:!0,objects:this.scene.children}))};setCameraAndLookTarget(e,t=!1){if(!e)return(A()||wi)&&console.warn("[OrbitControls] setCameraAndLookTarget target is null"),!1;if(!(e instanceof c.Object3D)&&!(e instanceof Vt))return(A()||wi)&&console.warn("[OrbitControls] setCameraAndLookTarget target is not an Object3D or Camera"),!1;e instanceof Vt&&(e=e.gameObject);const i=e.worldPosition,n=e.worldForward;e instanceof c.Camera&&(wi&&console.debug("[OrbitControls] setCameraAndLookTarget flip forward direction for camera"),n.multiplyScalar(-1));const o=new c.Ray(i,n);return wi&&B.DrawRay(o.origin,o.direction,16711680,10),this.setTargetFromRaycast(o,t)||this.setLookTargetPosition(o.at(2,V()),t),this.setCameraTargetPosition(i,t),!0}setCameraTargetPosition(e,t=!1){e&&(e instanceof c.Object3D&&(e=X(e)),this._cameraEndPosition||(this._cameraEndPosition=new c.Vector3),this._cameraEndPosition.copy(e),t===!0?(this._cameraLerpActive=!1,this._cameraObject&&this._cameraObject.position.copy(this._cameraEndPosition)):this._cameraObject&&(this._cameraLerpActive=!0,this._cameraLerp01=0,this._cameraStartPosition.copy(this._cameraObject?.position),typeof t=="number"?this._cameraLerpDuration=t:this._cameraLerpDuration=this.targetLerpDuration))}get cameraLerpActive(){return this._cameraLerpActive}stopCameraLerp(){this._cameraLerpActive=!1}setFieldOfView(e,t=!1){if(!this._controls||typeof e!="number")return;const i=this._camera?.threeCamera;i&&(t===!0?i.fov=e:(this._fovLerpActive=!0,this._fovLerp01=0,this._fovLerpStartValue=i.fov,this._fovLerpEndValue=e,typeof t=="number"?this._fovLerpDuration=t:this._fovLerpDuration=this.targetLerpDuration))}setLookTargetPosition(e=null,t=!1){this._controls&&e&&(e instanceof c.Object3D&&(e=X(e)),this._lookTargetEndPosition.copy(e),this._didSetTarget++,wi&&(console.warn("OrbitControls: setLookTargetPosition",e,t),B.DrawWireSphere(this._lookTargetEndPosition,.2,16711680,2)),t===!0?this.lerpLookTarget(this._lookTargetEndPosition,this._lookTargetEndPosition,1):(this._lookTargetLerpActive=!0,this._lookTargetLerp01=0,this._lookTargetStartPosition.copy(this._controls.target),typeof t=="number"?this._lookTargetLerpDuration=t:this._lookTargetLerpDuration=this.targetLerpDuration))}get lookTargetLerpActive(){return this._lookTargetLerpActive}stopLookTargetLerp(){this._lookTargetLerpActive=!1}setLookTargetFromConstraint(e=0,t=1){if(!this._controls||this.lookAtConstraint?.enabled===!1)return!1;const i=this.lookAtConstraint?.sources;if(i&&i.length>0){const n=i[e];if(n)return n.getWorldPosition(this._lookTargetEndPosition),this.lerpLookTarget(this._controls.target,this._lookTargetEndPosition,t),!0}return!1}lerpLookTarget(e,t,i){this._controls&&(i>=1?this._controls.target.copy(t):this._controls.target.lerpVectors(e,t,i),this.lookAtConstraint&&this.lookAtConstraint.setConstraintPosition(this._controls.target))}setTargetFromRaycast(e,t=!1){if(!this.controls)return!1;const i=e?this.context.physics.raycastFromRay(e):this.context.physics.raycast();for(const n of i)if(n.distance>0&&S.isActiveInHierarchy(n.object)){const o=Sm(n.object);if(o&&o.canvas?.screenspace)break;return this.setLookTargetPosition(n.point,t),!0}return!1}fitCamera(e,t){if(this.context.isInXR){console.warn("[OrbitControls] Can not fit camera while XR session is active");return}let i;if(Array.isArray(e)?i=e:e&&"type"in e?i=e.children:e&&typeof e=="object"&&!(e instanceof c.Object3D)&&!Array.isArray(e)&&(t=e,i=t.objects),i&&!Array.isArray(i)&&(i=i.children),(!Array.isArray(i)||i&&i.length<=0)&&(i=this.context.scene.children),!Array.isArray(i)||i.length<=0){console.warn("No objects to fit camera to...");return}const n=this._cameraObject,o=this._controls;if(!n||!o){console.warn("No camera or controls found to fit camera to objects...");return}t||(t={});const{immediate:r=!1,centerCamera:a,cameraNearFar:l="auto",fitOffset:h=1.1,fov:d=n?.fov}=t,u=new c.Vector3,p=new c.Vector3,m=Wt(i,void 0,this._camera?.threeCamera?.layers),y=m.clone();m.getCenter(p);const b=new c.Vector3;if(m.getSize(b),n.updateMatrixWorld(),m.applyMatrix4(n.matrixWorldInverse),m.getSize(u),m.setFromCenterAndSize(p,u),Number.isNaN(u.x)||Number.isNaN(u.y)||Number.isNaN(u.z)){console.warn("Camera fit size resultet in NaN",n,m,[...i]);return}if(u.length()<=1e-10){Na&&console.warn("Camera fit size is zero",m,[...i]);return}const g=d,v=2*Math.atan(Math.tan(g*Math.PI/360/2)*n.aspect)/Math.PI*360,_=u.y/(2*Math.atan(Math.PI*g/360)),w=u.x/(2*Math.atan(Math.PI*v/360)),T=h*Math.max(_,w)+u.z/2;Na&&console.log("Fit camera to objects",{fitHeightDistance:_,fitWidthDistance:w,distance:T,verticalFov:g,horizontalFov:v}),this.maxZoom=T*10,this.minZoom=T*.01;const O=.05,M=p.clone();if(M.y-=u.y*O,t.targetOffset&&(t.targetOffset.x!==void 0&&(M.x+=t.targetOffset.x),t.targetOffset.y!==void 0&&(M.y+=t.targetOffset.y),t.targetOffset.z!==void 0&&(M.z+=t.targetOffset.z)),t.relativeTargetOffset&&(t.relativeTargetOffset.x!==void 0&&(M.x+=t.relativeTargetOffset.x*u.x),t.relativeTargetOffset.y!==void 0&&(M.y+=t.relativeTargetOffset.y*u.y),t.relativeTargetOffset.z!==void 0&&(M.z+=t.relativeTargetOffset.z*u.z)),this.setLookTargetPosition(M,r),this.setFieldOfView(t.fov,r),l==null||l=="auto"){const z=S.findObjectOfType(An),$=z?z.radius:0,E=Math.max(b.x,b.y,b.z,$);n.near=T/100,n.far=E+T*10,n.updateProjectionMatrix(),z&&(this.maxZoom=Math.max(Math.min(this.maxZoom,$*.5),T))}const R=o.getDistance();R<this.minZoom&&(this.minZoom=R*.9),R>this.maxZoom&&(this.maxZoom=R*1.1);const j=p.clone();t.fitDirection?j.sub(new c.Vector3().copy(t.fitDirection).multiplyScalar(1e6)):j.sub(n.worldPosition),a==="y"&&(j.y=0),j.normalize(),j.multiplyScalar(T),a==="y"&&(j.y+=-O*4*T);let L=p.clone().sub(j);t.cameraOffset&&(t.cameraOffset.x!==void 0&&(L.x+=t.cameraOffset.x),t.cameraOffset.y!==void 0&&(L.y+=t.cameraOffset.y),t.cameraOffset.z!==void 0&&(L.z+=t.cameraOffset.z)),t.relativeCameraOffset&&(t.relativeCameraOffset.x!==void 0&&(L.x+=t.relativeCameraOffset.x*u.x),t.relativeCameraOffset.y!==void 0&&(L.y+=t.relativeCameraOffset.y*u.y),t.relativeCameraOffset.z!==void 0&&(L.z+=t.relativeCameraOffset.z*u.z)),n.parent&&(L=n.parent.worldToLocal(L)),this.setCameraTargetPosition(L,r),(Na||t.debug)&&(B.DrawWireBox3(m,16777011,10),B.DrawWireBox3(y,65280,10),!this._haveAttachedKeyboardEvents&&Na&&(this._haveAttachedKeyboardEvents=!0,document.body.addEventListener("keydown",z=>{if(z.code==="KeyF"){let $;this._cameraObject instanceof c.PerspectiveCamera&&($=Math.random()*Math.random()*170+10),this.fitCamera({objects:i,fitOffset:h,immediate:!1,fov:$})}z.code==="KeyV"&&this._cameraObject instanceof c.PerspectiveCamera&&(this._cameraObject.fov=60)}))),this.onBeforeRender()}_haveAttachedKeyboardEvents=!1}Ce([f()],de.prototype,"autoTarget");Ce([f()],de.prototype,"autoFit");Ce([f()],de.prototype,"enableRotate");Ce([f()],de.prototype,"autoRotate");Ce([f()],de.prototype,"autoRotateSpeed");Ce([f()],de.prototype,"minAzimuthAngle");Ce([f()],de.prototype,"maxAzimuthAngle");Ce([f()],de.prototype,"minPolarAngle");Ce([f()],de.prototype,"maxPolarAngle");Ce([f()],de.prototype,"enableKeys");Ce([f()],de.prototype,"enableDamping");Ce([f()],de.prototype,"dampingFactor");Ce([f()],de.prototype,"enableZoom");Ce([f()],de.prototype,"minZoom");Ce([f()],de.prototype,"maxZoom");Ce([f()],de.prototype,"zoomSpeed");Ce([f()],de.prototype,"enablePan");Ce([f(nr)],de.prototype,"lookAtConstraint");Ce([f()],de.prototype,"lookAtConstraint01");Ce([f()],de.prototype,"allowInterrupt");Ce([f()],de.prototype,"middleClickToFocus");Ce([f()],de.prototype,"doubleClickToFocus");Ce([f()],de.prototype,"clickBackgroundToFitScene");Ce([f()],de.prototype,"targetLerpDuration");var F1=Object.defineProperty,U1=Object.getOwnPropertyDescriptor,It=(s,e,t,i)=>{for(var n=i>1?void 0:i?U1(e,t):e,o=s.length-1,r;o>=0;o--)(r=s[o])&&(n=(i?r(e,t,n):r(n))||n);return i&&n&&F1(e,t,n),n},Fo=(s=>(s[s.None=0]="None",s[s.Skybox=1]="Skybox",s[s.SolidColor=2]="SolidColor",s[s.Uninitialized=4]="Uninitialized",s))(Fo||{});const As=x("debugcam"),Yy=x("debugscreenpointtoray"),xt=class ll extends k{get isCamera(){return!0}get aspect(){return this._cam instanceof c.PerspectiveCamera?this._cam.aspect:this.context.domWidth/this.context.domHeight}set aspect(e){this._cam instanceof c.PerspectiveCamera&&this._cam.aspect!==e&&(this._cam.aspect=e,this._cam.updateProjectionMatrix())}get fieldOfView(){return this._cam instanceof c.PerspectiveCamera?this._cam.fov:this._fov}set fieldOfView(e){const t=this.fieldOfView!=e;if(this._fov=e,t&&this._cam&&this._cam instanceof c.PerspectiveCamera){if(this._fov===void 0){console.warn("Can not set undefined fov on PerspectiveCamera");return}this._cam.fov=this._fov,this._cam.updateProjectionMatrix()}}get nearClipPlane(){return this._nearClipPlane}set nearClipPlane(e){const t=this._nearClipPlane!=e;this._nearClipPlane=e,this._cam&&(t||this._cam.near!=e)&&(this._cam.near=e,this._cam.updateProjectionMatrix())}_nearClipPlane=.1;get farClipPlane(){return this._farClipPlane}set farClipPlane(e){const t=this._farClipPlane!=e;this._farClipPlane=e,this._cam&&(t||this._cam.far!=e)&&(this._cam.far=e,this._cam.updateProjectionMatrix())}_farClipPlane=1e3;applyClippingPlane(){this._cam&&(this._cam.near=this._nearClipPlane,this._cam.far=this._farClipPlane,this._cam.updateProjectionMatrix())}get clearFlags(){return this._clearFlags}set clearFlags(e){if(typeof e=="string")switch(e){case"skybox":e=1;break;case"solidcolor":e=2;break;default:e=0;break}e!==this._clearFlags&&(this._clearFlags=e,this.applyClearFlagsIfIsActiveCamera())}orthographic=!1;orthographicSize=5;ARBackgroundAlpha=0;set cullingMask(e){this._cullingMask=e,this._cam&&(this._cam.layers.mask=e)}get cullingMask(){return this._cam?this._cam.layers.mask:this._cullingMask}_cullingMask=4294967295;set cullingLayer(e){this.cullingMask=(1<<e|0)>>>0}set backgroundBlurriness(e){e!==this._backgroundBlurriness&&(e===void 0?this._backgroundBlurriness=void 0:this._backgroundBlurriness=Math.min(Math.max(e,0),1),this.applyClearFlagsIfIsActiveCamera())}get backgroundBlurriness(){return this._backgroundBlurriness}_backgroundBlurriness=void 0;set backgroundIntensity(e){e!==this._backgroundIntensity&&(e===void 0?this._backgroundIntensity=void 0:this._backgroundIntensity=Math.min(Math.max(e,0),10),this.applyClearFlagsIfIsActiveCamera())}get backgroundIntensity(){return this._backgroundIntensity}_backgroundIntensity=void 0;set backgroundRotation(e){e!==this._backgroundRotation&&(e===void 0?this._backgroundRotation=void 0:this._backgroundRotation=e,this.applyClearFlagsIfIsActiveCamera())}get backgroundRotation(){return this._backgroundRotation}_backgroundRotation=void 0;set environmentIntensity(e){this._environmentIntensity=e}get environmentIntensity(){return this._environmentIntensity}_environmentIntensity=void 0;get backgroundColor(){return this._backgroundColor??null}set backgroundColor(e){e&&(this._backgroundColor||(this._backgroundColor=new Z(1,1,1,1)),this._backgroundColor.copy(e),(!("alpha"in e)||e.alpha===void 0)&&(this._backgroundColor.alpha=1),this.applyClearFlagsIfIsActiveCamera())}set targetTexture(e){this._targetTexture=e}get targetTexture(){return this._targetTexture}_targetTexture=null;_backgroundColor;_fov;_cam=null;_clearFlags=2;_skybox;get cam(){return this.threeCamera}get threeCamera(){return this.activeAndEnabled&&this.buildCamera(),this._cam}static _origin=new c.Vector3;static _direction=new c.Vector3;screenPointToRay(e,t,i){const n=this.threeCamera,o=ll._origin;o.set(e,t,-1),this.context.input.convertScreenspaceToRaycastSpace(o),Yy&&console.log("screenPointToRay",e.toFixed(2),t.toFixed(2),"now:",o.x.toFixed(2),o.y.toFixed(2),"isInXR:"+this.context.isInXR),o.z=-1,o.unproject(n);const r=ll._direction.set(o.x,o.y,o.z),a=X(n);return r.sub(a),r.normalize(),i?(i.set(a,r),i):new c.Ray(a.clone(),r.clone())}_frustum;getFrustum(){return this._frustum||(this._frustum=new c.Frustum,this.updateFrustum()),this._frustum}updateFrustum(){this._frustum||(this._frustum=new c.Frustum),this._frustum.setFromProjectionMatrix(this.getProjectionScreenMatrix(this._projScreenMatrix,!0),this.context.renderer.coordinateSystem)}getProjectionScreenMatrix(e,t){return t&&this._projScreenMatrix.multiplyMatrices(this.threeCamera.projectionMatrix,this.threeCamera.matrixWorldInverse),e===this._projScreenMatrix?e:e.copy(this._projScreenMatrix)}_projScreenMatrix=new c.Matrix4;awake(){Yy&&window.addEventListener("pointerdown",e=>{const t=e.clientX,i=e.clientY;console.log("touch",t.toFixed(2),i.toFixed(2));const n=this.screenPointToRay(t,i),o="#"+Math.floor(Math.random()*16777215).toString(16);B.DrawRay(n.origin,n.direction,o,10)})}onEnable(){As&&console.log(`Camera enabled: "${this.name}". ClearFlags=${Fo[this._clearFlags]}`,this),this.buildCamera(),(this.tag=="MainCamera"||!this.context.mainCameraComponent)&&(this.context.setCurrentCamera(this),N1(this)),this.applyClearFlagsIfIsActiveCamera({applySkybox:!0})}onDisable(){this.context.removeCamera(this)}onLeaveXR(e){this.fieldOfView=this._fov}onBeforeRender(){if(this._cam&&(this._frustum&&this.updateFrustum(),this._clearFlags===2&&this.applyClearFlagsIfIsActiveCamera(),this._targetTexture)){this.context.isManagedExternally&&(this._warnedAboutExternalRenderer||(this._warnedAboutExternalRenderer=!0,console.warn("Rendering with external renderer is not supported yet. This may not work or throw errors. Please remove the the target texture from your camera: "+this.name,this.targetTexture))),this.context.composer;const e=this.context.renderer;if(e){const t=this.context.mainCameraComponent;this.applyClearFlags(),this._targetTexture.render(this.context.scene,this._cam,e),t?.applyClearFlags()}}}buildCamera(){if(this._cam)return;const e=this.gameObject.isCamera;let t=null;if(e?(t=this.gameObject,t?.layers.enableAll(),t instanceof c.PerspectiveCamera&&(this._fov=t.fov)):t=this.gameObject.children[0],t&&t.isCamera)t instanceof c.PerspectiveCamera&&(this._fov&&(t.fov=this._fov),t.near=this._nearClipPlane,t.far=this._farClipPlane,t.updateProjectionMatrix());else if(!this.orthographic)t=new c.PerspectiveCamera(this.fieldOfView,window.innerWidth/window.innerHeight,this._nearClipPlane,this._farClipPlane),this.fieldOfView&&(t.fov=this.fieldOfView),this.gameObject.add(t);else{const i=this.orthographicSize*100;t=new c.OrthographicCamera(window.innerWidth/-i,window.innerWidth/i,window.innerHeight/i,window.innerHeight/-i,this._nearClipPlane,this._farClipPlane),this.gameObject.add(t)}this._cam=t,this._cam.layers.mask=this._cullingMask,this.tag=="MainCamera"&&this.context.setCurrentCamera(this)}applyClearFlagsIfIsActiveCamera(e){this.context.mainCameraComponent===this&&this.applyClearFlags(e)}applyClearFlags(e){if(!this._cam){As&&console.log("Camera does not exist (apply clear flags)");return}if(this.fieldOfView=this.fieldOfView,As){const i=`[Camera] Apply ClearFlags: ${Fo[this._clearFlags]} - "${this.name}"`;console.debug(i)}const t=this.context.domElement.getAttribute("background-image")||this.context.domElement.getAttribute("background-color");switch(this._clearFlags){case 0:return;case 1:if(ll.backgroundShouldBeTransparent(this.context)&&(!this.ARBackgroundAlpha||this.ARBackgroundAlpha<.001)){this.context.scene.background=null,this.context.renderer.setClearColor(0,0);return}(!this.scene.background||!this._skybox||e?.applySkybox===!0)&&this.applySceneSkybox(),this._backgroundBlurriness!==void 0&&!this.context.domElement.getAttribute("background-blurriness")?this.context.scene.backgroundBlurriness=this._backgroundBlurriness:As&&console.warn(`Camera "${this.name}" has no background blurriness`),this._backgroundIntensity!==void 0&&!this.context.domElement.getAttribute("background-intensity")&&(this.context.scene.backgroundIntensity=this._backgroundIntensity),this._backgroundRotation!==void 0&&!this.context.domElement.getAttribute("background-rotation")?this.context.scene.backgroundRotation=this._backgroundRotation:As&&console.warn(`Camera "${this.name}" has no background intensity`);break;case 2:if(this._backgroundColor&&!t){let i=this._backgroundColor.alpha;ll.backgroundShouldBeTransparent(this.context)&&(i=this.ARBackgroundAlpha??0),this.context.scene.background=null,this.context.xr?.isVR?this.context.renderer.setClearColor(rb(this._backgroundColor).convertLinearToSRGB()):this.context.renderer.setClearColor(this._backgroundColor,i)}else this._backgroundColor||As&&console.warn(`[Camera] has no background color "${this.name}" `);break;case 4:t||(this.context.scene.background=null,this.context.renderer.setClearColor(0,0));break}}applySceneSkybox(){this._skybox||(this._skybox=new z1(this)),this._skybox.apply()}static backgroundShouldBeTransparent(e){const t=e.renderer.xr?.getSession();if(!t)return!1;if(typeof t._transparent=="boolean")return t._transparent;const i=t.environmentBlendMode;As&&Se("Environment blend mode: "+i+" on "+navigator.userAgent);let n=i==="additive"||i==="alpha-blend";return e.isInAR&&i==="opaque"&&(navigator.userAgent?.includes("OculusBrowser")||navigator.userAgent?.includes("Mozilla")&&navigator.userAgent?.includes("Mobile WebXRViewer/v2"))&&(n=!0),t._transparent=n,n}};It([f()],xt.prototype,"aspect",1);It([f()],xt.prototype,"fieldOfView",1);It([f()],xt.prototype,"nearClipPlane",1);It([f()],xt.prototype,"farClipPlane",1);It([f()],xt.prototype,"clearFlags",1);It([f()],xt.prototype,"orthographic",2);It([f()],xt.prototype,"orthographicSize",2);It([f()],xt.prototype,"ARBackgroundAlpha",2);It([f()],xt.prototype,"cullingMask",1);It([f()],xt.prototype,"backgroundBlurriness",1);It([f()],xt.prototype,"backgroundIntensity",1);It([f(c.Euler)],xt.prototype,"backgroundRotation",1);It([f()],xt.prototype,"environmentIntensity",1);It([f(Z)],xt.prototype,"backgroundColor",1);It([f(xn)],xt.prototype,"targetTexture",1);let Vt=xt;class z1{_camera;_skybox;get context(){return this._camera?.context}constructor(e){this._camera=e}apply(){if(this._skybox=this.context.lightmaps.tryGetSkybox(this._camera.sourceId),!this._skybox)this._did_log_failed_to_find_skybox||(this._did_log_failed_to_find_skybox=!0,console.warn(`Camera "${this._camera.name}" has no skybox texture. ${this._camera.sourceId}`));else if(this.context.scene.background!==this._skybox){const e=this.context.domElement.getAttribute("background-image")||this.context.domElement.getAttribute("background-color");As&&console.debug(`[Camera] Apply Skybox ${this._skybox?.name} ${e} - "${this._camera.name}"`),e?.length||(this._skybox.mapping=c.EquirectangularReflectionMapping,this.context.scene.background=this._skybox)}}}function N1(s){x("freecam")&&s.context.mainCameraComponent===s&&S.getOrAddComponent(s.gameObject,de)}class ts extends k{get listener(){return this._listener==null&&(this._listener=new c.AudioListener),this._listener}_listener=null;onEnable(){en.registerWaitForInteraction(this.onInteraction),this.addListenerIfItExists()}onDisable(){en.unregisterWaitForInteraction(this.onInteraction),this.removeListenerIfItExists()}onInteraction=()=>{this.destroyed||this.listener==null||this.addListenerIfItExists()};addListenerIfItExists(){const e=this._listener;if(!e||e?.parent)return;const t=this.context.mainCameraComponent||S.getComponentInParent(this.gameObject,Vt);t?.threeCamera?t.threeCamera.add(e):this.gameObject.add(e),e.filter?(e.gain.connect(e.filter),e.filter.connect(e.context.destination)):e.gain.connect(e.context.destination)}removeListenerIfItExists(){const e=this._listener;e&&(e.removeFromParent(),e.filter&&e.filter.disconnect(),e.gain&&e.gain.disconnect())}}var V1=Object.defineProperty,$1=Object.getOwnPropertyDescriptor,on=(s,e,t,i)=>{for(var n=i>1?void 0:i?$1(e,t):e,o=s.length-1,r;o>=0;o--)(r=s[o])&&(n=(i?r(e,t,n):r(n))||n);return i&&n&&V1(e,t,n),n};const lt=x("debugaudio"),Ui=class Ls extends k{static get userInteractionRegistered(){return en.userInteractionRegistered}static registerWaitForAllowAudio(e){en.registerWaitForInteraction(e)}clip="";playOnAwake=!1;preload=!0;playInBackground=!0;get isPlaying(){return this.sound?.isPlaying??!1}get duration(){return this.sound?.buffer?.duration}get time01(){const e=this.duration;return e&&this.sound?this.sound?.context.currentTime/e:0}set time01(e){const t=this.duration;t&&this.sound&&(this.time=e*t)}get time(){return this.sound?.source?this.sound.source?.context.currentTime-this._lastContextTime+this.sound.offset:0}set time(e){if(this.sound){if(e===this.sound.offset)return;const t=this.isPlaying;this.stop(),this.sound.offset=e,t&&this.play()}}get loop(){return this.sound&&(this._loop=this.sound.getLoop()),this._loop}set loop(e){this._loop=e,this.sound&&this.sound.setLoop(e)}get spatialBlend(){return this._spatialBlend}set spatialBlend(e){e!==this._spatialBlend&&(this._spatialBlend=e,this._needUpdateSpatialDistanceSettings=!0)}get minDistance(){return this._minDistance}set minDistance(e){this._minDistance!==e&&(this._minDistance=e,this._needUpdateSpatialDistanceSettings=!0)}get maxDistance(){return this._maxDistance}set maxDistance(e){this._maxDistance!==e&&(this._maxDistance=e,this._needUpdateSpatialDistanceSettings=!0)}_spatialBlend=0;_minDistance=1;_maxDistance=100;get volume(){return this._volume}set volume(e){this._volume=e,this.sound&&!this.context.application.muted&&(lt&&console.log(this.name,"audio set volume",e),this.sound.setVolume(e))}_volume=1;set pitch(e){this.sound&&this.sound.setPlaybackRate(e)}get pitch(){return this.sound?this.sound.getPlaybackRate():1}rollOffMode=0;_loop=!1;sound=null;helper=null;wasPlaying=!1;audioLoader=null;shouldPlay=!1;_lastClipStartedLoading=null;_audioElement=null;get Sound(){if(!this.sound&&Ls.userInteractionRegistered){let e=this.gameObject.getComponent(ts)??this.context.mainCamera.getComponent(ts)??lc(ts,this.context,!1);!e&&this.context.mainCamera&&(e=this.context.mainCamera.addComponent(ts)),e?.listener?(this.sound=new c.PositionalAudio(e.listener),this.gameObject?.add(this.sound)):lt&&console.warn("No audio listener found in scene - can not play audio")}return this.sound}get ShouldPlay(){return this.shouldPlay}get audioContext(){return this.sound?.context}awake(){lt&&console.log("[AudioSource]",this),this.audioLoader=new c.AudioLoader,this.playOnAwake&&(this.shouldPlay=!0),this.preload&&typeof this.clip=="string"&&this.audioLoader.load(this.clip,this.createAudio,()=>{},console.error)}onEnable(){this.sound&&this.gameObject.add(this.sound),Ls.userInteractionRegistered?this.playOnAwake&&this.context.application.isVisible&&this.play():Ls.registerWaitForAllowAudio(()=>{this.enabled&&!this.destroyed&&this.shouldPlay&&this.onNewClip(this.clip)}),globalThis.addEventListener("visibilitychange",this.onVisibilityChanged),this.context.application.addEventListener(Qf.MuteChanged,this.onApplicationMuteChanged)}onDisable(){globalThis.removeEventListener("visibilitychange",this.onVisibilityChanged),this.context.application.removeEventListener(Qf.MuteChanged,this.onApplicationMuteChanged),this.pause()}onVisibilityChanged=()=>{switch(document.visibilityState){case"hidden":(this.playInBackground===!1||exports.DeviceUtilities.isMobileDevice())&&(this.wasPlaying=this.isPlaying,this.isPlaying&&this.pause());break;case"visible":lt&&console.log("visible",this.enabled,this.playOnAwake,!this.isPlaying,Ls.userInteractionRegistered,this.wasPlaying),this.enabled&&this.playOnAwake&&!this.isPlaying&&Ls.userInteractionRegistered&&this.wasPlaying&&this.play();break}};onApplicationMuteChanged=()=>{this.context.application.muted?this.sound?.setVolume(0):this.sound?.setVolume(this.volume)};createAudio=e=>{if(this.destroyed){lt&&console.warn("AudioSource destroyed, not creating audio",this.name);return}lt&&console.log("AudioBuffer finished loading",e);const t=this.Sound;if(!t){lt&&console.warn("Failed getting sound?",this.name);return}t.isPlaying&&t.stop(),e&&t.setBuffer(e),t.loop=this._loop,this.context.application.muted?t.setVolume(0):t.setVolume(this.volume),t.autoplay=this.shouldPlay&&Ls.userInteractionRegistered,this.applySpatialDistanceSettings(),t.isPlaying&&t.stop(),Ls.registerWaitForAllowAudio(this.__onAllowAudioCallback)};__onAllowAudioCallback=()=>{this.shouldPlay&&this.play()};applySpatialDistanceSettings(){const e=this.sound;if(!e)return;this._needUpdateSpatialDistanceSettings=!1;const t=D.lerp(10*this._maxDistance/Math.max(1e-4,this.spatialBlend),this._minDistance,this.spatialBlend);switch(lt&&console.log(this.name,this._minDistance,this._maxDistance,this.spatialBlend,"Ref distance="+t),e.setRefDistance(t),e.setMaxDistance(Math.max(.01,this._maxDistance)),this.rollOffMode){case 0:e.setDistanceModel("exponential");break;case 1:e.setDistanceModel("linear");break;case 2:console.warn("Custom rolloff for AudioSource is not supported: "+this.name);break}this.spatialBlend>0?lt&&!this.helper&&(this.helper=new q.PositionalAudioHelper(e,e.getRefDistance()),e.add(this.helper)):this.helper&&this.helper.parent&&this.helper.removeFromParent()}async onNewClip(e){if(e&&(this.clip=e),typeof e=="string")if(lt&&console.log(e),e.endsWith(".mp3")||e.endsWith(".wav")){if(this.audioLoader||(this.audioLoader=new c.AudioLoader),this.shouldPlay=!0,this._lastClipStartedLoading===e){lt&&console.log("Is currently loading:",this._lastClipStartedLoading,this);return}this._lastClipStartedLoading=e,lt&&console.log("load audio",e);const t=await this.audioLoader.loadAsync(e).catch(console.error);if(this.destroyed)return;this._lastClipStartedLoading===e&&(this._lastClipStartedLoading=null),t&&this.createAudio(t)}else console.warn("Unsupported audio clip type",e);else this.shouldPlay=!0,this.createAudio()}play(e=void 0){!e&&this.clip&&(e=this.clip),e!==void 0&&typeof e!="string"&&!(e instanceof MediaStream)&&(A()&&console.warn("Called play on AudioSource with unknown argument type:",e+`
950
950
  Using the assigned clip instead:`,this.clip),e=this.clip);let t=!this.sound||e&&e!==this.clip;if(typeof e=="string"&&!this.audioLoader&&(t=!0),(e instanceof MediaStream||typeof e=="string")&&(this.clip=e),t){this.shouldPlay=!0,this.onNewClip(e);return}if(this.shouldPlay=!0,this._hasEnded=!1,lt&&console.log("play",this.sound?.getVolume(),this.sound),this.sound&&!this.sound.isPlaying){const i=this.context.application.muted;i&&this.sound.setVolume(0),this.gameObject?.add(this.sound),this.clip instanceof MediaStream?(this.sound.setMediaStreamSource(this.clip),this._audioElement||(this._audioElement=document.createElement("audio"),this._audioElement.style.display="none"),this._audioElement.parentNode||this.context.domElement.shadowRoot?.append(this._audioElement),this._audioElement.srcObject=this.clip,this._audioElement.autoplay=!1):(this._audioElement&&this._audioElement.remove(),this.sound.play(i?.1:0))}}pause(){lt&&console.log("Pause",this),this._hasEnded=!0,this.shouldPlay=!1,this.sound&&this.sound.isPlaying&&this.sound.source&&(this._lastContextTime=this.sound?.context.currentTime,this.sound.pause()),this._audioElement?.remove()}stop(){lt&&console.log("Pause",this),this._hasEnded=!0,this.shouldPlay=!1,this.sound&&this.sound.source&&(this._lastContextTime=this.sound?.context.currentTime,lt&&console.log(this._lastContextTime),this.sound.stop()),this._audioElement?.remove()}_lastContextTime=0;_hasEnded=!0;_needUpdateSpatialDistanceSettings=!1;update(){this.helper&&(this.isPlaying&&this.helper.update(),this.helper.visible=this.isPlaying),this._needUpdateSpatialDistanceSettings&&this.applySpatialDistanceSettings(),this.sound&&!this.sound.isPlaying&&this.shouldPlay&&!this._hasEnded&&(this._hasEnded=!0,lt&&console.log("Audio clip ended",this.clip),this.dispatchEvent(new CustomEvent("ended",{detail:this})))}};on([f(URL)],Ui.prototype,"clip",2);on([f()],Ui.prototype,"playOnAwake",2);on([f()],Ui.prototype,"preload",2);on([f()],Ui.prototype,"playInBackground",2);on([f()],Ui.prototype,"loop",1);on([f()],Ui.prototype,"spatialBlend",1);on([f()],Ui.prototype,"minDistance",1);on([f()],Ui.prototype,"maxDistance",1);on([f()],Ui.prototype,"volume",1);on([f()],Ui.prototype,"pitch",1);on([f()],Ui.prototype,"rollOffMode",2);let Di=Ui;const W1=x("debugavatar");class we extends k{static getAvatar(e){return e>=0&&e<we.instances.length?we.instances[e]:null}static instances=[];static onAvatarMarkerCreated(e){return we._onNewAvatarMarkerAdded.push(e),e}static onAvatarMarkerDestroyed(e){return we._onAvatarMarkerDestroyed.push(e),e}static _onNewAvatarMarkerAdded=[];static _onAvatarMarkerDestroyed=[];connectionId;avatar;awake(){we.instances.push(this),W1&&console.log(this);for(const e of we._onNewAvatarMarkerAdded)e({avatarMarker:this,gameObject:this.gameObject})}onDestroy(){we.instances.splice(we.instances.indexOf(this),1);for(const e of we._onAvatarMarkerDestroyed)e({avatarMarker:this,gameObject:this.gameObject})}isLocalAvatar(){return this.connectionId===this.context.connection.connectionId}}class Uo{static Pois=[];static LastChangeTime=0;static Add(e,t,i=null){if(t){for(const n of this.Pois)if(n.obj===t)return;this.Pois.push({obj:t,avatar:i}),this.LastChangeTime=e.time.time}}static Remove(e,t){if(t){for(const i of this.Pois)if(i.obj===t){this.Pois.splice(this.Pois.indexOf(i),1),this.LastChangeTime=e?.time.time??F.Current?.time.time;return}}}}class G1{guid;position=new c.Vector3}class $l extends k{set controlledTarget(e){this.target=e;const t=P.get("MoveRandom");if(t&&this.target){const i=S.getComponent(this.target,t);i&&i.destroy()}}target=null;avatar=null;_model=null;_targetModel=new G1;_currentTargetObject=null;_lastUpdateTime=0;_lookDuration=0;_lastPoiChangedTime=0;awake(){if(this.avatar=S.getComponentInParent(this.gameObject,we),this.avatar){const e=S.getComponentInParent(this.gameObject,we);this._model=new im(this.context.connection,this.guid),e?.isLocalAvatar&&this._model.requestOwnership()}this.context.connection.beginListen("avatar-look-target-changed",e=>{this.target&&e&&e.guid===this.avatar?.guid&&Ye(this.target,e.position)})}update(){if((!this.context.connection.isConnected||this._model?.hasOwnership)&&(Uo.LastChangeTime!==this._lastPoiChangedTime&&(this._lastPoiChangedTime=Uo.LastChangeTime,this._lookDuration=0),this.selectTarget(),this._currentTargetObject&&this.context.time.frameCount%10===0&&this.target)){const t=X(this._currentTargetObject);Ye(this.target,t),this.context.connection.isConnected&&this.avatar&&(this.context.connection.send("avatar-look-target-changed",this._targetModel),this._targetModel.guid=this.avatar.guid,this._targetModel.position.copy(t))}}selectTarget(){if(this.context.time.time-this._lastUpdateTime>this._lookDuration){this._lastUpdateTime=this.context.time.time,this._lookDuration=Math.random()*.5+.2;const t=Uo.Pois;if(t.length>0){const i=t[Math.floor(Math.random()*t.length)];if(i&&i.obj){if(i.avatar&&i.avatar===this.avatar)return;this._currentTargetObject=i.obj}}}}}function X0(s){const e=s;return!!(e.parser&&e.parser.json)}var Xd=(s=>(s[s.None=0]="None",s[s.DontExport=1]="DontExport",s))(Xd||{});function Q0(s){return s&&s.isComponent}const H1=Symbol("object"),rf=new ai(()=>new c.Vector3,20);class Y0{_point;_normal;_tangentVelocity;distance;impulse;friction;get point(){return rf.get().set(this._point.x,this._point.y,this._point.z)}get normal(){return rf.get().set(this._normal.x,this._normal.y,this._normal.z)}get tangentVelocity(){return rf.get().set(this._tangentVelocity.x,this._tangentVelocity.y,this._tangentVelocity.z)}constructor(e,t,i,n,o,r){this._point=e,this.distance=t,this._normal=i,this.impulse=n,this.friction=o,this._tangentVelocity=r}}class K0{contacts;constructor(e,t,i){this.me=e,this._collider=t,this._gameObject=t.gameObject,this.contacts=i}me;_collider;get collider(){return this._collider}_gameObject;get gameObject(){return this._gameObject}get rigidBody(){return this.collider?.attachedRigidbody}}class Z0{object;collider;constructor(e,t){this.object=e,this.collider=t}}const Me=x("debugnetworkingstreams");var wn=(s=>(s.Connected="peer-user-connected",s.StreamReceived="receive-stream",s.StreamEnded="call-ended",s.Disconnected="peer-user-disconnected",s.UserJoined="user-joined",s))(wn||{});class Cm{type="call-ended";userId;direction;constructor(e,t){this.userId=e,this.direction=t}}class J0{type="receive-stream";userId;stream;target;constructor(e,t,i){this.userId=e,this.stream=t,this.target=i}}class q1{guid;peerId;dontSave=!0;constructor(e,t){this.guid=e.id,this.peerId=t}}var ev=(s=>(s.Incoming="incoming",s.Outgoing="outgoing",s))(ev||{});class X1 extends c.EventDispatcher{peerId;userId;direction;call;get stream(){return this._stream}_stream=null;_isDisposed=!1;close(){this._isDisposed||(this._isDisposed=!0,this.call.close(),Sn(this._stream))}get isOpen(){return this.call.peerConnection?.connectionState==="connected"}get isOpening(){return this.call.peerConnection?.connectionState==="connecting"}get isClosed(){return!this.isOpen||this._isDisposed}constructor(e,t,i,n=null){super(),this.peerId=t.peer,this.userId=e,this.call=t,this.direction=i,this._stream=n,t.on("stream",o=>{if(Me&&console.log("Receive stream",`
951
951
  Audio:`,o.getAudioTracks(),`
952
952
  Video:`,o.getVideoTracks()),this._stream=o,i==="incoming"){const r=new J0(e,o,this);this.dispatchEvent(r)}}),t.on("close",()=>{this.dispatchEvent(new Cm(e,i))})}}function Ky(s){return s=s.replace("a=fmtp:111 minptime=10;useinbandfec=1","a=fmtp:111 ptime=5;useinbandfec=1;stereo=1;maxplaybackrate=48000;maxaveragebitrat=128000;sprop-stereo=1"),s}class is extends c.EventDispatcher{static instances=new Map;static getOrCreate(e,t){if(is.instances.has(t))return is.instances.get(t);const i=new is(e,t);return is.instances.set(t,i),i}getMyPeerId(){if(this.context.connection.connectionId)return this.getPeerIdFromUserId(this.context.connection.connectionId)}getPeerIdFromUserId(e){return this.id+"-"+e}getUserIdFromPeerId(e){return e.substring(this.id.length+1)}makeCall(e,t){if(!t?.id){Me?console.warn("Can not make a call: mediastream has no id or is undefined"):console.debug("Can not make a call: mediastream has no id or is undefined");return}const i={metadata:{userId:this.context.connection.connectionId,streamId:t.id},sdpTransform:o=>Ky(o)},n=this._peer?.call(e,t,i);if(n){const o=this.registerCall(n,"outgoing",t);return Me&&console.warn(`📞 CALL ${e}`,`
@@ -1613,4 +1613,4 @@ Error:`,r),null}}updateColliderCollisionGroups(e){const t=e[kt],i=e.membership;l
1613
1613
  justify-content: center;
1614
1614
  gap: .5rem;
1615
1615
  }
1616
- `),this.#n.innerHTML=this.#e.innerHTML,this.#n.style.cssText="display: flex; align-items: center; justify-content: center;",this.#e.innerHTML=this.#n.outerHTML,this.#t.innerHTML=this.#e.outerHTML,this.#t.prepend(this.#s),dd(hp,{element:this.#t}),this.#o?.disconnect(),this.#o??=new MutationObserver(()=>this.#l()),this.#o.observe(this.#e,{attributes:!0}),zf&&console.log("Needle Button updated")}#l(){this.#e&&(this.#e.style.display==="none"?this.style.display="none":this.style.display==="none"&&(this.style.display=""))}#r=e=>{zf&&console.log("Needle Button clicked"),!e.defaultPrevented&&this.#e&&this.#e.click()}}typeof window<"u"&&!window.customElements.get(N_)&&window.customElements.define(N_,Ox);const il=x("debugavatar");class $g{root;head;leftHand;rigthHand;get isValid(){return this.head!==null&&this.head!==void 0}constructor(e,t,i,n){this.root=e,this.head=t,this.leftHand=i,this.rigthHand=n,this.root?.traverse(o=>o.layers.set(2))}}class Mx{avatarRegistryUrl=null;async getOrCreateNewAvatarInstance(e,t){if(!t)return console.error("Can not create avatar: failed to provide id or root object"),null;let i=null;if(typeof t=="string"){if(i=await this.loadAvatar(e,t),!i){const o=new sn;i=S.instantiate(Jr(t,e.scene),o)}}else i=t;if(!i)return null;const n=this.findAvatar(i);return n.isValid?(il&&console.log("[Custom Avatar] valid config",t,il?n:""),n):(console.warn("[Custom Avatar] config isn't valid",t,il?n:""),null)}async loadAvatar(e,t){if(console.assert(t!=null&&typeof t=="string","Avatar id must not be null"),t.length<=0||!t)return null;if(il&&console.log("[Custom Avatar] "+t+", loading..."),t.endsWith(".glb")||(t+=".glb"),this.avatarRegistryUrl===null){const n=await fetch("./"+t);let o=null;if(n.ok){const a=await n.blob();a&&(o=await a.arrayBuffer())}return o?(await Ji().parseSync(e,o,null,0))?.scene??null:null}const i=new q.GLTFLoader;return bm(i,e),new Promise((n,o)=>{const r=this.avatarRegistryUrl+"/"+t;i.load(r,async a=>{await Ji().createBuiltinComponents(e,r,a,null,void 0),n(a.scene)},a=>{il&&console.log("[Custom Avatar] "+a.loaded/a.total*100+"% loaded of "+a.total/1024+"kB")},a=>{console.error("[Custom Avatar] Error when loading: "+a),n(null)})})}cacheModel(e,t){}findAvatar(e){const t=e;let i=t;i.children.length==1&&(i=e.children[0]);let n=this.findAvatarPart(i,["head"]);const o=this.findAvatarPart(i,["left","hand"]),r=this.findAvatarPart(i,["right","hand"]);if(!n){n=t;const l=new c.Vector3;new c.Box3().setFromObject(n).getSize(l);const h=Math.max(l.x,l.y,l.z);console.warn("[Custom Avatar] Normalizing head scale, it's too big: "+h+" meters! Should be < 0.3m"),h>.3&&n.scale.multiplyScalar(1/h*.3)}return new $g(t,n,o,r)}findAvatarPart(e,t){const i=e.name.toLowerCase();let n=!0;for(const o of t){if(!n)break;i.indexOf(o)===-1&&(n=!1)}if(n)return e;if(e.children)for(const o of e.children){const r=this.findAvatarPart(o,t);if(r)return r}return null}handleCustomAvatarErrors(e){if(!e.ok)throw Error(e.statusText);return e}}class kx{get extensionName(){return"DocumentExtension"}onAfterBuildDocument(e){}}class Rx{}const eE=Object.freeze(Object.defineProperty({__proto__:null,ActionBuilder:le,ActionCollection:Iv,ActionModel:zt,AlignmentConstraint:dc,Animation:Gt,AnimationCurve:Tc,AnimationExtension:iu,AnimationTrackHandler:Cu,Animator:mt,AnimatorController:Ti,Antialiasing:Lc,AudioExtension:lr,AudioListener:ts,AudioSource:Di,AudioTrackHandler:ns,Avatar:qs,AvatarBlink_Simple:sr,AvatarEyeLook_Rotation:km,AvatarLoader:Mx,AvatarMarker:we,AvatarModel:$g,Avatar_Brain_LookAt:$l,Avatar_MouthShapes:mc,Avatar_MustacheShake:Om,Avatar_POI:Uo,AxesHelper:ga,BaseUIComponent:ji,BasicIKConstraint:Em,BehaviorExtension:og,BehaviorModel:pt,BloomEffect:mu,BoxCollider:Kd,BoxGizmo:ur,BoxHelperComponent:nt,Button:_s,CallInfo:es,Camera:Vt,CameraTargetReachedEvent:Vl,Canvas:ha,CanvasGroup:Xs,CapsuleCollider:rs,ChangeMaterialOnClick:Ym,ChangeTransformOnClick:cr,CharacterController:or,CharacterControllerInput:hs,ChromaticAberration:Dc,Collider:Xt,ColorAdjustments:lo,ColorBySpeedModule:ka,ColorOverLifetimeModule:uu,ContactShadows:gc,ControlTrackHandler:Pu,CustomBranding:dr,Deletable:Dm,DeleteBox:Vs,DepthOfField:an,DeviceFlag:Zd,DocumentExtension:kx,DragControls:Mo,DropListener:ds,Duplicatable:Bm,EffectWrapper:Xl,EmissionModule:gs,EmphasizeOnClick:va,EnvironmentScene:Eu,EventList:ae,EventListEvent:Hd,EventSystem:Dt,EventTrigger:eu,FieldWithDefault:vv,FixedJoint:bg,Fog:Pa,GltfExport:Hm,GltfExportBox:Wm,Gradient:pr,Graphic:Pc,GraphicRaycaster:qd,GridHelper:Oa,GridLayoutGroup:dg,GroundProjectedEnv:An,GroupActionModel:ko,HideOnStart:Oi,HingeJoint:Mc,HorizontalLayoutGroup:hg,Image:Ta,InheritVelocityModule:Sg,InputField:jg,InstanceHandle:zo,InstancingHandler:Xo,Interactable:Lm,Keyframe:$t,LODGroup:Rc,LODModel:Ma,Light:pi,LimitVelocityOverLifetimeModule:et,LogStats:Am,LookAt:Bg,LookAtConstraint:nr,MainModule:St,MaskableGraphic:Oc,MeshCollider:to,MeshRenderer:_c,MinMaxCurve:G,MinMaxGradient:mr,NeedleMenu:Dn,NestedGltf:Ec,Networking:xg,NoiseModule:fe,ObjectRaycaster:ci,OffsetConstraint:fr,OpenURL:Aa,OrbitControls:de,Outline:Ca,Padding:hr,ParticleBurst:Cd,ParticleSubEmitter:Cg,ParticleSystem:ql,ParticleSystemRenderer:Ni,PhysicsExtension:rg,PixelationEffect:Ic,PlayAnimationOnClick:Gl,PlayAudioOnClick:Hs,PlayableDirector:ua,PlayerColor:da,PointerEventData:fc,PostProcessingHandler:kg,PreliminaryAction:xa,PreliminaryTrigger:xc,RawImage:ku,Rect:zv,RectTransform:nn,ReflectionProbe:Wl,RegisteredAnimationInfo:Us,RemoteSkybox:yu,Renderer:hi,RendererLightmap:vd,Rigidbody:Ke,RotationBySpeedModule:zi,RotationOverLifetimeModule:rn,SceneSwitcher:Ie,ScreenCapture:co,ScreenSpaceAmbientOcclusion:ys,ScreenSpaceAmbientOcclusionN8:ln,SetActiveOnClick:Km,ShadowCatcher:Uc,ShapeModule:wg,SharpeningEffect:Bc,SignalAsset:Su,SignalReceiver:Wc,SignalReceiverEvent:$c,SignalTrackHandler:Ql,Size:Uv,SizeBySpeedModule:Kt,SizeOverLifetimeModule:gr,SkinnedMeshRenderer:$m,SmoothFollow:bu,SpatialGrabRaycaster:Ho,SpatialHtml:qc,SpatialTrigger:vu,SpatialTriggerReceiver:En,SpectatorCamera:xu,SphereCollider:ya,Sprite:fs,SpriteData:Kr,SpriteRenderer:Qt,SpriteSheet:ca,SubEmitterSystem:Pd,SyncedCamera:Eg,SyncedRoom:cn,SyncedTransform:tn,TapGestureTrigger:Jm,TeleportTarget:au,TestRunner:Tg,TestSimulateUserData:Ag,Text:wt,TextBuilder:lg,TextExtension:cu,TextureSheetAnimationModule:Ct,TiltShiftEffect:Bn,ToneMappingEffect:Qs,TrailModule:Ee,TransformData:ke,TransformGizmo:vr,TriggerBuilder:vt,TriggerModel:$s,UIRaycastUtils:wm,UIRootComponent:Sc,USDZExporter:Rn,USDZText:$r,USDZUIExtension:fg,UsageMarker:yc,VariantAction:Qm,VelocityOverLifetimeModule:Le,VerticalLayoutGroup:cg,VideoPlayer:Ze,Vignette:br,VisibilityAction:wc,Voip:eo,Volume:Ea,VolumeParameter:I,VolumeProfile:fu,WebARCameraBackground:Qc,WebARSessionRoot:ri,WebXR:lu,WebXRImageTracking:Yc,WebXRImageTrackingModel:vs,WebXRPlaneTracking:xs,WebXRTrackedImage:fa,XRControllerFollow:bs,XRControllerModel:as,XRControllerMovement:di,XRFlag:ki,XRRig:Au,XRState:Lt,__Ignore:Rx},Symbol.toStringTag,{value:"Module"})),Rd=x("debugmissingcamera");re.registerCallback(oe.MissingCamera,s=>{Rd&&console.warn("Creating missing camera");const e=s.context.scene,t=new c.PerspectiveCamera;t.name="Default Fallback Camera",e.add(t);const i=new Vt;if(i.sourceId=s.files?.[0]?.src??"unknown",i.fieldOfView=35,s.context.domElement.getAttribute("transparent")!=null)i.clearFlags=Fo.Uninitialized;else if(s.context.domElement.getAttribute("background-image")?.length||s.context.lightmaps.tryGetSkybox(i.sourceId))i.clearFlags=Fo.Skybox;else{if(i.clearFlags=Fo.SolidColor,!s.context.domElement.getAttribute("background-color")){let a="#efefef";typeof window!==void 0&&window.matchMedia("(prefers-color-scheme: dark)").matches&&(a="#1f1f1f"),e.background=new c.Color(a)}if(!e.environment){const a=new c.PMREMGenerator$1(s.context.renderer),l=new Eu("neutral");e.environment=a.fromScene(l,.025).texture}}const o=Lo(t,i,!0);return t.position.x=0,t.position.y=1,t.position.z=2,s.context.domElement?.cameraControls!=!1&&Ex(s.context,o),o});re.registerCallback(oe.ContextCreated,s=>{if(!s.context.mainCamera){Rd&&console.log("Will not auto-fit because a default camera exists");return}if(s.context.domElement?.cameraControls==!0){if(nb(s.context.mainCamera)?.isCameraController==!0){Rd&&console.log("Will not auto-fit because a camera controller exists");return}Ex(s.context)}});function Ex(s,e){e=e??s.mainCameraComponent;const t=e?.gameObject;if(Rd&&console.log("Creating default camera controls",e?.name),t){const i=oc(t,de);i.sourceId=e?.sourceId??"unknown";const n=s.domElement.getAttribute("auto-rotate");if(i.autoRotate=n!=null&&n!="0"&&n?.toLowerCase()!="false",i.autoRotateSpeed=.5,i.autoFit=!0,i.autoRotate&&n){const o=parseFloat(n);isNaN(o)||(i.autoRotateSpeed=o)}}else console.warn("Missing camera object, can not add orbit controls")}re.registerCallback(oe.ContextCreated,s=>{const e=s.context.domElement.getAttribute("autoplay");if(e!==void 0&&(e===""||e==="true"||e==="1")&&s.files)for(const t of s.files)S.foreachComponent(t.file.scene,n=>{if(n.enabled!==!1){if(n instanceof Gt&&n.playAutomatically||n instanceof mt||n instanceof ua&&n.playOnAwake===!0)return!0;if(n instanceof Gt)return n.playAutomatically=!0,!0;if(n instanceof ua)return n.playOnAwake=!0,!0}},!0)!==!0&&ra.autoplayAnimations(t.file)});class tE extends se.WorkerBase{constructor(){super(new Worker(new URL("/generateMeshBVH.worker-2qGLkQjg.js",typeof document>"u"?require("url").pathToFileURL(__filename).href:Du&&Du.tagName.toUpperCase()==="SCRIPT"&&Du.src||new URL("needle-engine.bundle-kYzccQZF.umd.cjs",document.baseURI).href),{type:"module"})),this.name="GenerateMeshBVHWorker"}runTask(e,t,i={}){return new Promise((n,o)=>{if(t.getAttribute("position").isInterleavedBufferAttribute||t.index&&t.index.isInterleavedBufferAttribute)throw new Error("GenerateMeshBVHWorker: InterleavedBufferAttribute are not supported for the geometry attributes.");e.onerror=h=>{o(new Error(`[GenerateMeshBVHWorker] ${h.message||"Unknown error. Please check the server console. If you're using vite try adding 'three-mesh-bvh' to 'optimizeDeps.exclude' in your vite.config.js"}`))},e.onmessage=h=>{const{data:d}=h;if(d.error)o(new Error(d.error)),e.onmessage=null;else if(d.serialized){const{serialized:u,position:p}=d,m=se.MeshBVH.deserialize(u,t,{setIndex:!1}),y=Object.assign({setBoundingBox:!0},i);if(t.attributes.position.array=p,u.index)if(t.index)t.index.array=u.index;else{const b=new c.BufferAttribute(u.index,1,!1);t.setIndex(b)}y.setBoundingBox&&(t.boundingBox=m.getBoundingBox(new c.Box3)),i.onProgress&&i.onProgress(d.progress),n(m),e.onmessage=null}else i.onProgress&&i.onProgress(d.progress)};const r=t.index?t.index.array:null,a=t.attributes.position.array,l=[a];r&&l.push(r),e.postMessage({index:r,position:a,options:{...i,onProgress:null,includedProgressCallback:!!i.onProgress,groups:[...t.groups]}},l.map(h=>h.buffer).filter(h=>typeof SharedArrayBuffer>"u"||!(h instanceof SharedArrayBuffer)))})}}const iE=Object.freeze(Object.defineProperty({__proto__:null,GenerateMeshBVHWorker:tE},Symbol.toStringTag,{value:"Module"}));exports.$physicsKey=H1;exports.ActionBuilder=le;exports.ActionCollection=Iv;exports.ActionModel=zt;exports.Addressables=b0;exports.AlignmentConstraint=dc;exports.AmbientMode=Qr;exports.Animation=Gt;exports.AnimationCurve=Tc;exports.AnimationExtension=iu;exports.AnimationTrackHandler=Cu;exports.AnimationUtils=ra;exports.Animator=mt;exports.AnimatorConditionMode=Ds;exports.AnimatorController=Ti;exports.AnimatorControllerParameterType=vm;exports.AnimatorStateInfo=al;exports.Antialiasing=Lc;exports.Application=en;exports.AssetDatabase=Ib;exports.AssetReference=Y;exports.AudioExtension=lr;exports.AudioListener=ts;exports.AudioSource=Di;exports.AudioTrackHandler=ns;exports.Avatar=qs;exports.AvatarBlink_Simple=sr;exports.AvatarEyeLook_Rotation=km;exports.AvatarLoader=Mx;exports.AvatarMarker=we;exports.AvatarModel=$g;exports.Avatar_Brain_LookAt=$l;exports.Avatar_MouthShapes=mc;exports.Avatar_MustacheShake=Om;exports.Avatar_POI=Uo;exports.Axes=Nr;exports.AxesHelper=ga;exports.BUILD_TIME=Xp;exports.BaseUIComponent=ji;exports.BasicIKConstraint=Em;exports.BehaviorExtension=og;exports.BehaviorModel=pt;exports.BloomEffect=mu;exports.BoxCollider=Kd;exports.BoxGizmo=ur;exports.BoxHelperComponent=nt;exports.Button=_s;exports.ButtonsFactory=Qi;exports.CallDirection=ev;exports.CallInfo=es;exports.Camera=Vt;exports.CameraTargetReachedEvent=Vl;exports.Canvas=ha;exports.CanvasGroup=Xs;exports.CapsuleCollider=rs;exports.ChangeMaterialOnClick=Ym;exports.ChangeTransformOnClick=cr;exports.CharacterController=or;exports.CharacterControllerInput=hs;exports.ChromaticAberration=Dc;exports.CircularBuffer=ai;exports.ClearFlags=Fo;exports.ClipExtrapolation=pn;exports.Collider=Xt;exports.Collision=K0;exports.CollisionDetectionMode=Gd;exports.ColorAdjustments=lo;exports.ColorBySpeedModule=ka;exports.ColorOverLifetimeModule=uu;exports.Component=t1;exports.Component$1=k;exports.ComponentLifecycleEvents=Bd;exports.Components=eE;exports.ConnectionEvents=Rb;exports.ContactPoint=Y0;exports.ContactShadows=gc;exports.Context=F;exports.ContextArgs=zC;exports.ContextEvent=oe;exports.ContextRegistry=re;exports.ControlTrackHandler=Pu;exports.CustomBranding=dr;exports.CustomShader=ye;exports.DefaultReflectionMode=hd;exports.Deletable=Dm;exports.DeleteBox=Vs;exports.DepthOfField=an;exports.DeviceFlag=Zd;exports.DocumentExtension=kx;exports.DragControls=Mo;exports.DragMode=Im;exports.DropListener=ds;exports.Duplicatable=Bm;exports.EffectWrapper=Xl;exports.EmissionModule=gs;exports.EmphasizeOnClick=va;exports.EngineLoadingView=Yl;exports.EnvironmentScene=Eu;exports.EventList=ae;exports.EventListEvent=Hd;exports.EventSystem=Dt;exports.EventTrigger=eu;exports.FieldWithDefault=vv;exports.FileReference=jo;exports.FileReferenceSerializer=x0;exports.FileSpawnModel=mP;exports.File_Event=av;exports.FixedJoint=bg;exports.Fog=Pa;exports.FrameEvent=pe;exports.GENERATOR=Ad;exports.GameObject=S;exports.Gizmos=B;exports.GltfExport=Hm;exports.GltfExportBox=Wm;exports.Gradient=pr;exports.Graphic=Pc;exports.GraphicRaycaster=qd;exports.Graphics=Gs;exports.GridHelper=Oa;exports.GridLayoutGroup=dg;exports.GroundProjectedEnv=An;exports.GroupActionModel=ko;exports.HideFlags=Xd;exports.HideOnStart=Oi;exports.HingeJoint=Mc;exports.HorizontalLayoutGroup=hg;exports.HostData=WS;exports.Image=Ta;exports.ImageReference=Io;exports.ImageReferenceSerializer=v0;exports.InheritVelocityModule=Sg;exports.Input=Sb;exports.InputEventQueue=Nt;exports.InputEvents=xe;exports.InputField=jg;exports.InstanceHandle=zo;exports.InstancingHandler=Xo;exports.InstancingUtil=Ei;exports.InstantiateEvent=qb;exports.InstantiateIdProvider=ft;exports.InstantiateOptions=sn;exports.Interactable=Lm;exports.JoinedRoomResponse=mS;exports.KeyEventArgs=sS;exports.Keyframe=$t;exports.LODGroup=Rc;exports.LODModel=Ma;exports.LeftRoomResponse=gS;exports.Light=pi;exports.LightData=O0;exports.LimitVelocityOverLifetimeModule=et;exports.LoadingElementOptions=UR;exports.LogStats=Am;exports.LogType=oi;exports.LookAt=Bg;exports.LookAtConstraint=nr;exports.MainModule=St;exports.MarkerType=Lg;exports.MaskableGraphic=Oc;exports.Mathf=D;exports.MeshCollider=to;exports.MeshRenderer=_c;exports.MinMaxCurve=G;exports.MinMaxGradient=mr;exports.NEKeyboardEvent=nl;exports.NEPointerEvent=Qn;exports.NeedleButtonElement=Ox;exports.NeedleEngineWebComponent=Vg;exports.NeedleMenu=Dn;exports.NeedlePatchesKey=Lh;exports.NeedleXRController=Zp;exports.NeedleXRSession=H;exports.NeedleXRSync=Ab;exports.NeedleXRUtils=Db;exports.NestedGltf=Ec;exports.NetworkConnection=Tb;exports.NetworkedStreamEvents=wn;exports.NetworkedStreams=pc;exports.Networking=xg;exports.NewInstanceModel=Qb;exports.NoiseModule=fe;exports.ObjectRaycaster=ci;exports.ObjectUtils=Zo;exports.OffsetConstraint=fr;exports.OneEuroFilter=Th;exports.OneEuroFilterXYZ=zp;exports.OpenURL=Aa;exports.OrbitControls=de;exports.Outline=Ca;exports.OwnershipEvent=Eb;exports.OwnershipModel=im;exports.PUBLIC_KEY=Fr;exports.Padding=hr;exports.ParticleBurst=Cd;exports.ParticleSubEmitter=Cg;exports.ParticleSystem=ql;exports.ParticleSystemBaseBehaviour=ao;exports.ParticleSystemRenderer=Ni;exports.ParticleSystemShapeType=Sd;exports.PeerHandle=is;exports.PeerNetworking=kb;exports.Physics=sa;exports.PhysicsExtension=rg;exports.PhysicsMaterialCombine=it;exports.PixelationEffect=Ic;exports.PlayAnimationOnClick=Gl;exports.PlayAudioOnClick=Hs;exports.PlayableDirector=ua;exports.PlayerColor=da;exports.PlayerState=Yi;exports.PlayerStateEvent=Fv;exports.PlayerSync=ng;exports.PlayerView=S0;exports.PlayerViewManager=C0;exports.PointerEventData=fc;exports.PointerType=Id;exports.PostProcessingEffect=Ne;exports.PostProcessingEffectOrder=Qe;exports.PostProcessingHandler=kg;exports.PreliminaryAction=xa;exports.PreliminaryTrigger=xc;exports.PrimitiveType=Vo;exports.Progress=ie;exports.PromiseAllWithErrors=Fp;exports.PromiseErrorResult=$f;exports.RGBAColor=Z;exports.RapierPhysics=Zr;exports.RawImage=ku;exports.RaycastOptions=Js;exports.Rect=zv;exports.RectTransform=nn;exports.ReflectionProbe=Wl;exports.RegisteredAnimationInfo=Us;exports.RemoteSkybox=yu;exports.RenderTexture=xn;exports.RenderTextureSerializer=H0;exports.Renderer=hi;exports.RendererData=P0;exports.RendererLightmap=vd;exports.Rigidbody=Ke;exports.RigidbodyConstraints=De;exports.RoomEvents=Q;exports.RotationBySpeedModule=zi;exports.RotationOverLifetimeModule=rn;exports.SceneLightSettings=yd;exports.SceneSwitcher=Ie;exports.ScreenCapture=co;exports.ScreenSpaceAmbientOcclusion=ys;exports.ScreenSpaceAmbientOcclusionN8=ln;exports.SendQueue=Xi;exports.SerializationContext=um;exports.SetActiveOnClick=Km;exports.ShadowCatcher=Uc;exports.ShapeModule=wg;exports.ShapeOverlapResult=Z0;exports.SharpeningEffect=Bc;exports.SignalAsset=Su;exports.SignalReceiver=Wc;exports.SignalReceiverEvent=$c;exports.SignalTrackHandler=Ql;exports.Size=Uv;exports.SizeBySpeedModule=Kt;exports.SizeOverLifetimeModule=gr;exports.SkinnedMeshRenderer=$m;exports.SmoothFollow=bu;exports.SpatialGrabRaycaster=Ho;exports.SpatialHtml=qc;exports.SpatialTrigger=vu;exports.SpatialTriggerReceiver=En;exports.SpectatorCamera=xu;exports.SphereCollider=ya;exports.SphereIntersection=om;exports.Sprite=fs;exports.SpriteData=Kr;exports.SpriteRenderer=Qt;exports.SpriteSheet=ca;exports.StateMachineBehaviour=a1;exports.StreamEndedEvent=Cm;exports.StreamReceivedEvent=J0;exports.SubEmitterSystem=Pd;exports.SyncedCamera=Eg;exports.SyncedRoom=cn;exports.SyncedTransform=tn;exports.TapGestureTrigger=Jm;exports.TeleportTarget=au;exports.TestRunner=Tg;exports.TestSceneUtils=XR;exports.TestSimulateUserData=Ag;exports.Text=wt;exports.TextBuilder=lg;exports.TextExtension=cu;exports.TextureSheetAnimationModule=Ct;exports.TiltShiftEffect=Bn;exports.Time=M0;exports.ToneMappingEffect=Qs;exports.TrackHandler=Gc;exports.TrackType=ei;exports.TrailModule=Ee;exports.TransformData=ke;exports.TransformGizmo=vr;exports.TriggerBuilder=vt;exports.TriggerModel=$s;exports.TypeStore=P;exports.UIRaycastUtils=wm;exports.UIRootComponent=Sc;exports.USDDocument=qm;exports.USDObject=ze;exports.USDWriter=Ov;exports.USDZExporter=Rn;exports.USDZExporter$1=Mv;exports.USDZText=$r;exports.USDZUIExtension=fg;exports.UriSerializer=q0;exports.UsageMarker=yc;exports.UserJoinedOrLeftRoomModel=yS;exports.VERSION=Ki;exports.VariantAction=Qm;exports.VelocityOverLifetimeModule=Le;exports.VerticalLayoutGroup=cg;exports.VideoPlayer=Ze;exports.ViewDevice=zs;exports.Vignette=br;exports.VisibilityAction=wc;exports.Voip=eo;exports.Volume=Ea;exports.VolumeParameter=I;exports.VolumeProfile=fu;exports.WaitForFrames=bC;exports.WaitForPromise=w0;exports.WaitForSeconds=mm;exports.Watch=ss;exports.WebARCameraBackground=Qc;exports.WebARSessionRoot=ri;exports.WebXR=lu;exports.WebXRButtonFactory=Ws;exports.WebXRImageTracking=Yc;exports.WebXRImageTrackingModel=vs;exports.WebXRPlaneTracking=xs;exports.WebXRTrackedImage=fa;exports.XRControllerFollow=bs;exports.XRControllerModel=as;exports.XRControllerMovement=di;exports.XRFlag=ki;exports.XRRig=Au;exports.XRState=Lt;exports.XRStateFlag=bn;exports.__Ignore=Rx;exports.__internalNotifyObjectDestroyed=Nb;exports.activeInHierarchyFieldName=os;exports.addAttributeChangeCallback=Q_;exports.addComponent=Zi;exports.addCustomExtensionPlugin=BP;exports.addNewComponent=Lo;exports.addPatch=Ld;exports.apply=Ud;exports.applyHMRChanges=e1;exports.applyPrototypeExtensions=a0;exports.beginListenDestroy=Xb;exports.beginListenInstantiate=Kb;exports.binaryIdentifierCasts=Jp;exports.build_scene_functions=UC;exports.builtinComponentKeyName=wo;exports.calculateProgress01=Ng;exports.clearMessages=pw;exports.colorSerializer=C1;exports.compareAssociation=t0;exports.componentSerializer=Vh;exports.copyTexture=hb;exports.createMotion=V0;exports.debugNet=jt;exports.debugOwner=sl;exports.decompressGpuTexture=Tv;exports.deepClone=Zl;exports.delay=Tn;exports.delayForFrames=Jl;exports.deserializeObject=ld;exports.destroy=li;exports.destroyComponentInstance=h0;exports.determineMimeTypeFromExtension=lv;exports.disposeObjectResources=_e;exports.disposeStream=Sn;exports.editorGuidKeyName=wl;exports.enableSpatialConsole=Eo;exports.euler=O1;exports.eventListSerializer=E1;exports.exportAsGLTF=KR;exports.findByGuid=pm;exports.findObjectOfType=lc;exports.findObjectsOfType=u0;exports.findResourceUsers=rm;exports.fitObjectIntoVolume=ub;exports.foreachComponent=Wo;exports.foreachComponentEnumerator=Nd;exports.forward=Tw;exports.generateQRCode=K_;exports.generateSeed=Yb;exports.getBoundingBox=Wt;exports.getCameraController=nb;exports.getComponent=er;exports.getComponentInChildren=ac;exports.getComponentInParent=Ul;exports.getComponents=rc;exports.getComponentsInChildren=pa;exports.getComponentsInParent=Fd;exports.getFormattedDate=wv;exports.getIconElement=ut;exports.getIconTexture=cp;exports.getLoader=Ji;exports.getOrAddComponent=oc;exports.getParam=x;exports.getParentHierarchyPath=Dw;exports.getPath=Gx;exports.getPeerOptions=dS;exports.getPeerjsInstance=Mb;exports.getResourceUserCount=IS;exports.getTempColor=rb;exports.getTempQuaternion=qi;exports.getTempVector=V;exports.getUrlParams=Kl;exports.getVisibleInCustomShadowRendering=db;exports.getWorldDirection=ab;exports.getWorldEuler=$p;exports.getWorldPosition=X;exports.getWorldQuaternion=ue;exports.getWorldRotation=Td;exports.getWorldScale=Ae;exports.hasCommercialLicense=kn;exports.hasIndieLicense=hc;exports.hasPointerEventComponent=fd;exports.hasProLicense=Mn;exports.hideDebugConsole=gb;exports.imageToCanvas=Av;exports.instantiate=Go;exports.invokeLoadedImportPluginHooks=yv;exports.invokeXRSessionEnd=wb;exports.invokeXRSessionStart=xb;exports.isActiveInHierarchy=f0;exports.isActiveSelf=ma;exports.isAndroidDevice=Kx;exports.isAnimationAction=cb;exports.isComponent=Q0;exports.isDebugMode=Nx;exports.isDesktop=qx;exports.isDestroyed=$o;exports.isDevEnvironment=A;exports.isDisposed=LS;exports.isExporting=QR;exports.isGLTFModel=X0;exports.isHostedOnGlitch=V_;exports.isHotReloadEnabled=pp;exports.isHotReloading=ZC;exports.isIPad=Qx;exports.isIconElement=E0;exports.isLocalNetwork=Ai;exports.isMacOS=Jx;exports.isMobileDevice=Xx;exports.isMozillaXR=Zx;exports.isQuest=iw;exports.isResourceTrackingEnabled=Bb;exports.isSafari=tw;exports.isUsingInstancing=zd;exports.isiOS=ew;exports.isiPad=Yx;exports.loadAsset=LR;exports.loadPMREM=lx;exports.loadSync=zg;exports.logHierarchy=ed;exports.lookAtInverse=Sw;exports.lookAtObject=ec;exports.lookAtScreenPoint=Cw;exports.makeId=$x;exports.makeIdFromRandomWords=H_;exports.makeNameSafe=Ii;exports.markAsInstancedRendered=p0;exports.microphonePermissionsGranted=nw;exports.nameof=zx;exports.nameofFactory=W_;exports.objectSerializer=G0;exports.offXRSessionEnd=nS;exports.offXRSessionStart=iS;exports.onAfterRender=YC;exports.onBeforeRender=QC;exports.onClear=qC;exports.onDestroy=XC;exports.onInitialized=I0;exports.onStart=_m;exports.onUpdate=j0;exports.onXRSessionEnd=Kp;exports.onXRSessionStart=Dd;exports.parseSync=xx;exports.placeOnSurface=fb;exports.postprocessFBXMaterials=Hp;exports.prefix=_1;exports.pushState=G_;exports.randomNumber=Wx;exports.registerBinaryType=em;exports.registerComponent=$d;exports.registerComponentExtension=zm;exports.registerCustomEffectType=Vi;exports.registerExportExtensions=Nm;exports.registerExtensions=bd;exports.registerHotReloadType=F0;exports.registerLoader=Qp;exports.registerPrefabProvider=Jb;exports.registerPrototypeExtensions=l0;exports.registerType=QS;exports.relativePathPrefix=X_;exports.removeAttributeChangeCallback=Y_;exports.removeComponent=fm;exports.removeCustomImportExtensionType=FP;exports.removePatch=eS;exports.resolveUrl=Ys;exports.sanitizeString=q_;exports.saveImage=yx;exports.screenshot=mR;exports.screenshot2=Ug;exports.sendDestroyed=lm;exports.serializable=f;exports.serializeObject=n0;exports.serializeable=tr;exports.setActive=Pl;exports.setAllowBalloonMessages=eb;exports.setAllowOverlayMessages=hw;exports.setAutoFitEnabled=Zh;exports.setCameraController=Gf;exports.setDestroyed=g0;exports.setDevEnvironment=Vw;exports.setDisposable=Ub;exports.setDontDestroy=Ar;exports.setOrAddParamsToUrl=Vf;exports.setParam=Vx;exports.setParamWithoutReload=Il;exports.setPeerOptions=uS;exports.setResourceTrackingEnabled=AS;exports.setState=jp;exports.setVisibleInCustomShadowRendering=Gp;exports.setWorldEuler=Wp;exports.setWorldPosition=Ye;exports.setWorldPositionXYZ=No;exports.setWorldQuaternion=Li;exports.setWorldQuaternionXYZW=Vp;exports.setWorldRotation=lb;exports.setWorldRotationXYZ=tc;exports.setWorldScale=ea;exports.showBalloonError=ic;exports.showBalloonMessage=Se;exports.showBalloonWarning=he;exports.showDebugConsole=qp;exports.slerp=ww;exports.syncDestroy=nc;exports.syncField=ig;exports.syncInstantiate=cm;exports.textureToCanvas=Iw;exports.tryCastBinary=Pb;exports.tryDetermineMimetypeFromBinary=hv;exports.tryDetermineMimetypeFromURL=cv;exports.tryFindObject=Jr;exports.tryGetGuid=Ob;exports.unregisterHotReloadType=U0;exports.unwatchWrite=Bp;exports.useForAutoFit=sb;exports.validate=gt;exports.watchWrite=Ed;
1616
+ `),this.#n.innerHTML=this.#e.innerHTML,this.#n.style.cssText="display: flex; align-items: center; justify-content: center;",this.#e.innerHTML=this.#n.outerHTML,this.#t.innerHTML=this.#e.outerHTML,this.#t.prepend(this.#s),dd(hp,{element:this.#t}),this.#o?.disconnect(),this.#o??=new MutationObserver(()=>this.#l()),this.#o.observe(this.#e,{attributes:!0}),zf&&console.log("Needle Button updated")}#l(){this.#e&&(this.#e.style.display==="none"?this.style.display="none":this.style.display==="none"&&(this.style.display=""))}#r=e=>{zf&&console.log("Needle Button clicked"),!e.defaultPrevented&&this.#e&&this.#e.click()}}typeof window<"u"&&!window.customElements.get(N_)&&window.customElements.define(N_,Ox);const il=x("debugavatar");class $g{root;head;leftHand;rigthHand;get isValid(){return this.head!==null&&this.head!==void 0}constructor(e,t,i,n){this.root=e,this.head=t,this.leftHand=i,this.rigthHand=n,this.root?.traverse(o=>o.layers.set(2))}}class Mx{avatarRegistryUrl=null;async getOrCreateNewAvatarInstance(e,t){if(!t)return console.error("Can not create avatar: failed to provide id or root object"),null;let i=null;if(typeof t=="string"){if(i=await this.loadAvatar(e,t),!i){const o=new sn;i=S.instantiate(Jr(t,e.scene),o)}}else i=t;if(!i)return null;const n=this.findAvatar(i);return n.isValid?(il&&console.log("[Custom Avatar] valid config",t,il?n:""),n):(console.warn("[Custom Avatar] config isn't valid",t,il?n:""),null)}async loadAvatar(e,t){if(console.assert(t!=null&&typeof t=="string","Avatar id must not be null"),t.length<=0||!t)return null;if(il&&console.log("[Custom Avatar] "+t+", loading..."),t.endsWith(".glb")||(t+=".glb"),this.avatarRegistryUrl===null){const n=await fetch("./"+t);let o=null;if(n.ok){const a=await n.blob();a&&(o=await a.arrayBuffer())}return o?(await Ji().parseSync(e,o,null,0))?.scene??null:null}const i=new q.GLTFLoader;return bm(i,e),new Promise((n,o)=>{const r=this.avatarRegistryUrl+"/"+t;i.load(r,async a=>{await Ji().createBuiltinComponents(e,r,a,null,void 0),n(a.scene)},a=>{il&&console.log("[Custom Avatar] "+a.loaded/a.total*100+"% loaded of "+a.total/1024+"kB")},a=>{console.error("[Custom Avatar] Error when loading: "+a),n(null)})})}cacheModel(e,t){}findAvatar(e){const t=e;let i=t;i.children.length==1&&(i=e.children[0]);let n=this.findAvatarPart(i,["head"]);const o=this.findAvatarPart(i,["left","hand"]),r=this.findAvatarPart(i,["right","hand"]);if(!n){n=t;const l=new c.Vector3;new c.Box3().setFromObject(n).getSize(l);const h=Math.max(l.x,l.y,l.z);console.warn("[Custom Avatar] Normalizing head scale, it's too big: "+h+" meters! Should be < 0.3m"),h>.3&&n.scale.multiplyScalar(1/h*.3)}return new $g(t,n,o,r)}findAvatarPart(e,t){const i=e.name.toLowerCase();let n=!0;for(const o of t){if(!n)break;i.indexOf(o)===-1&&(n=!1)}if(n)return e;if(e.children)for(const o of e.children){const r=this.findAvatarPart(o,t);if(r)return r}return null}handleCustomAvatarErrors(e){if(!e.ok)throw Error(e.statusText);return e}}class kx{get extensionName(){return"DocumentExtension"}onAfterBuildDocument(e){}}class Rx{}const eE=Object.freeze(Object.defineProperty({__proto__:null,ActionBuilder:le,ActionCollection:Iv,ActionModel:zt,AlignmentConstraint:dc,Animation:Gt,AnimationCurve:Tc,AnimationExtension:iu,AnimationTrackHandler:Cu,Animator:mt,AnimatorController:Ti,Antialiasing:Lc,AudioExtension:lr,AudioListener:ts,AudioSource:Di,AudioTrackHandler:ns,Avatar:qs,AvatarBlink_Simple:sr,AvatarEyeLook_Rotation:km,AvatarLoader:Mx,AvatarMarker:we,AvatarModel:$g,Avatar_Brain_LookAt:$l,Avatar_MouthShapes:mc,Avatar_MustacheShake:Om,Avatar_POI:Uo,AxesHelper:ga,BaseUIComponent:ji,BasicIKConstraint:Em,BehaviorExtension:og,BehaviorModel:pt,BloomEffect:mu,BoxCollider:Kd,BoxGizmo:ur,BoxHelperComponent:nt,Button:_s,CallInfo:es,Camera:Vt,CameraTargetReachedEvent:Vl,Canvas:ha,CanvasGroup:Xs,CapsuleCollider:rs,ChangeMaterialOnClick:Ym,ChangeTransformOnClick:cr,CharacterController:or,CharacterControllerInput:hs,ChromaticAberration:Dc,Collider:Xt,ColorAdjustments:lo,ColorBySpeedModule:ka,ColorOverLifetimeModule:uu,ContactShadows:gc,ControlTrackHandler:Pu,CustomBranding:dr,Deletable:Dm,DeleteBox:Vs,DepthOfField:an,DeviceFlag:Zd,DocumentExtension:kx,DragControls:Mo,DropListener:ds,Duplicatable:Bm,EffectWrapper:Xl,EmissionModule:gs,EmphasizeOnClick:va,EnvironmentScene:Eu,EventList:ae,EventListEvent:Hd,EventSystem:Dt,EventTrigger:eu,FieldWithDefault:vv,FixedJoint:bg,Fog:Pa,GltfExport:Hm,GltfExportBox:Wm,Gradient:pr,Graphic:Pc,GraphicRaycaster:qd,GridHelper:Oa,GridLayoutGroup:dg,GroundProjectedEnv:An,GroupActionModel:ko,HideOnStart:Oi,HingeJoint:Mc,HorizontalLayoutGroup:hg,Image:Ta,InheritVelocityModule:Sg,InputField:jg,InstanceHandle:zo,InstancingHandler:Xo,Interactable:Lm,Keyframe:$t,LODGroup:Rc,LODModel:Ma,Light:pi,LimitVelocityOverLifetimeModule:et,LogStats:Am,LookAt:Bg,LookAtConstraint:nr,MainModule:St,MaskableGraphic:Oc,MeshCollider:to,MeshRenderer:_c,MinMaxCurve:G,MinMaxGradient:mr,NeedleMenu:Dn,NestedGltf:Ec,Networking:xg,NoiseModule:fe,ObjectRaycaster:ci,OffsetConstraint:fr,OpenURL:Aa,OrbitControls:de,Outline:Ca,Padding:hr,ParticleBurst:Cd,ParticleSubEmitter:Cg,ParticleSystem:ql,ParticleSystemRenderer:Ni,PhysicsExtension:rg,PixelationEffect:Ic,PlayAnimationOnClick:Gl,PlayAudioOnClick:Hs,PlayableDirector:ua,PlayerColor:da,PointerEventData:fc,PostProcessingHandler:kg,PreliminaryAction:xa,PreliminaryTrigger:xc,RawImage:ku,Rect:zv,RectTransform:nn,ReflectionProbe:Wl,RegisteredAnimationInfo:Us,RemoteSkybox:yu,Renderer:hi,RendererLightmap:vd,Rigidbody:Ke,RotationBySpeedModule:zi,RotationOverLifetimeModule:rn,SceneSwitcher:Ie,ScreenCapture:co,ScreenSpaceAmbientOcclusion:ys,ScreenSpaceAmbientOcclusionN8:ln,SetActiveOnClick:Km,ShadowCatcher:Uc,ShapeModule:wg,SharpeningEffect:Bc,SignalAsset:Su,SignalReceiver:Wc,SignalReceiverEvent:$c,SignalTrackHandler:Ql,Size:Uv,SizeBySpeedModule:Kt,SizeOverLifetimeModule:gr,SkinnedMeshRenderer:$m,SmoothFollow:bu,SpatialGrabRaycaster:Ho,SpatialHtml:qc,SpatialTrigger:vu,SpatialTriggerReceiver:En,SpectatorCamera:xu,SphereCollider:ya,Sprite:fs,SpriteData:Kr,SpriteRenderer:Qt,SpriteSheet:ca,SubEmitterSystem:Pd,SyncedCamera:Eg,SyncedRoom:cn,SyncedTransform:tn,TapGestureTrigger:Jm,TeleportTarget:au,TestRunner:Tg,TestSimulateUserData:Ag,Text:wt,TextBuilder:lg,TextExtension:cu,TextureSheetAnimationModule:Ct,TiltShiftEffect:Bn,ToneMappingEffect:Qs,TrailModule:Ee,TransformData:ke,TransformGizmo:vr,TriggerBuilder:vt,TriggerModel:$s,UIRaycastUtils:wm,UIRootComponent:Sc,USDZExporter:Rn,USDZText:$r,USDZUIExtension:fg,UsageMarker:yc,VariantAction:Qm,VelocityOverLifetimeModule:Le,VerticalLayoutGroup:cg,VideoPlayer:Ze,Vignette:br,VisibilityAction:wc,Voip:eo,Volume:Ea,VolumeParameter:I,VolumeProfile:fu,WebARCameraBackground:Qc,WebARSessionRoot:ri,WebXR:lu,WebXRImageTracking:Yc,WebXRImageTrackingModel:vs,WebXRPlaneTracking:xs,WebXRTrackedImage:fa,XRControllerFollow:bs,XRControllerModel:as,XRControllerMovement:di,XRFlag:ki,XRRig:Au,XRState:Lt,__Ignore:Rx},Symbol.toStringTag,{value:"Module"})),Rd=x("debugmissingcamera");re.registerCallback(oe.MissingCamera,s=>{Rd&&console.warn("Creating missing camera");const e=s.context.scene,t=new c.PerspectiveCamera;t.name="Default Fallback Camera",e.add(t);const i=new Vt;if(i.sourceId=s.files?.[0]?.src??"unknown",i.fieldOfView=35,s.context.domElement.getAttribute("transparent")!=null)i.clearFlags=Fo.Uninitialized;else if(s.context.domElement.getAttribute("background-image")?.length||s.context.lightmaps.tryGetSkybox(i.sourceId))i.clearFlags=Fo.Skybox;else{if(i.clearFlags=Fo.SolidColor,!s.context.domElement.getAttribute("background-color")){let a="#efefef";typeof window!==void 0&&window.matchMedia("(prefers-color-scheme: dark)").matches&&(a="#1f1f1f"),e.background=new c.Color(a)}if(!e.environment){const a=new c.PMREMGenerator$1(s.context.renderer),l=new Eu("neutral");e.environment=a.fromScene(l,.025).texture}}const o=Lo(t,i,!0);return t.position.x=0,t.position.y=1,t.position.z=2,s.context.domElement?.cameraControls!=!1&&Ex(s.context,o),o});re.registerCallback(oe.ContextCreated,s=>{if(!s.context.mainCamera){Rd&&console.log("Will not auto-fit because a default camera exists");return}if(s.context.domElement?.cameraControls==!0){if(nb(s.context.mainCamera)?.isCameraController==!0){Rd&&console.log("Will not auto-fit because a camera controller exists");return}Ex(s.context)}});function Ex(s,e){e=e??s.mainCameraComponent;const t=e?.gameObject;if(Rd&&console.log("Creating default camera controls",e?.name),t){const i=oc(t,de);i.sourceId=e?.sourceId??"unknown";const n=s.domElement.getAttribute("auto-rotate");if(i.autoRotate=n!=null&&n!="0"&&n?.toLowerCase()!="false",i.autoRotateSpeed=.5,i.autoFit=!0,i.autoRotate&&n){const o=parseFloat(n);isNaN(o)||(i.autoRotateSpeed=o)}}else console.warn("Missing camera object, can not add orbit controls")}re.registerCallback(oe.ContextCreated,s=>{const e=s.context.domElement.getAttribute("autoplay");if(e!==void 0&&(e===""||e==="true"||e==="1")&&s.files)for(const t of s.files)S.foreachComponent(t.file.scene,n=>{if(n.enabled!==!1){if(n instanceof Gt&&n.playAutomatically||n instanceof mt||n instanceof ua&&n.playOnAwake===!0)return!0;if(n instanceof Gt)return n.playAutomatically=!0,!0;if(n instanceof ua)return n.playOnAwake=!0,!0}},!0)!==!0&&ra.autoplayAnimations(t.file)});class tE extends se.WorkerBase{constructor(){super(new Worker(new URL("/generateMeshBVH.worker-2qGLkQjg.js",typeof document>"u"?require("url").pathToFileURL(__filename).href:Du&&Du.tagName.toUpperCase()==="SCRIPT"&&Du.src||new URL("needle-engine.bundle-CxUl1z77.umd.cjs",document.baseURI).href),{type:"module"})),this.name="GenerateMeshBVHWorker"}runTask(e,t,i={}){return new Promise((n,o)=>{if(t.getAttribute("position").isInterleavedBufferAttribute||t.index&&t.index.isInterleavedBufferAttribute)throw new Error("GenerateMeshBVHWorker: InterleavedBufferAttribute are not supported for the geometry attributes.");e.onerror=h=>{o(new Error(`[GenerateMeshBVHWorker] ${h.message||"Unknown error. Please check the server console. If you're using vite try adding 'three-mesh-bvh' to 'optimizeDeps.exclude' in your vite.config.js"}`))},e.onmessage=h=>{const{data:d}=h;if(d.error)o(new Error(d.error)),e.onmessage=null;else if(d.serialized){const{serialized:u,position:p}=d,m=se.MeshBVH.deserialize(u,t,{setIndex:!1}),y=Object.assign({setBoundingBox:!0},i);if(t.attributes.position.array=p,u.index)if(t.index)t.index.array=u.index;else{const b=new c.BufferAttribute(u.index,1,!1);t.setIndex(b)}y.setBoundingBox&&(t.boundingBox=m.getBoundingBox(new c.Box3)),i.onProgress&&i.onProgress(d.progress),n(m),e.onmessage=null}else i.onProgress&&i.onProgress(d.progress)};const r=t.index?t.index.array:null,a=t.attributes.position.array,l=[a];r&&l.push(r),e.postMessage({index:r,position:a,options:{...i,onProgress:null,includedProgressCallback:!!i.onProgress,groups:[...t.groups]}},l.map(h=>h.buffer).filter(h=>typeof SharedArrayBuffer>"u"||!(h instanceof SharedArrayBuffer)))})}}const iE=Object.freeze(Object.defineProperty({__proto__:null,GenerateMeshBVHWorker:tE},Symbol.toStringTag,{value:"Module"}));exports.$physicsKey=H1;exports.ActionBuilder=le;exports.ActionCollection=Iv;exports.ActionModel=zt;exports.Addressables=b0;exports.AlignmentConstraint=dc;exports.AmbientMode=Qr;exports.Animation=Gt;exports.AnimationCurve=Tc;exports.AnimationExtension=iu;exports.AnimationTrackHandler=Cu;exports.AnimationUtils=ra;exports.Animator=mt;exports.AnimatorConditionMode=Ds;exports.AnimatorController=Ti;exports.AnimatorControllerParameterType=vm;exports.AnimatorStateInfo=al;exports.Antialiasing=Lc;exports.Application=en;exports.AssetDatabase=Ib;exports.AssetReference=Y;exports.AudioExtension=lr;exports.AudioListener=ts;exports.AudioSource=Di;exports.AudioTrackHandler=ns;exports.Avatar=qs;exports.AvatarBlink_Simple=sr;exports.AvatarEyeLook_Rotation=km;exports.AvatarLoader=Mx;exports.AvatarMarker=we;exports.AvatarModel=$g;exports.Avatar_Brain_LookAt=$l;exports.Avatar_MouthShapes=mc;exports.Avatar_MustacheShake=Om;exports.Avatar_POI=Uo;exports.Axes=Nr;exports.AxesHelper=ga;exports.BUILD_TIME=Xp;exports.BaseUIComponent=ji;exports.BasicIKConstraint=Em;exports.BehaviorExtension=og;exports.BehaviorModel=pt;exports.BloomEffect=mu;exports.BoxCollider=Kd;exports.BoxGizmo=ur;exports.BoxHelperComponent=nt;exports.Button=_s;exports.ButtonsFactory=Qi;exports.CallDirection=ev;exports.CallInfo=es;exports.Camera=Vt;exports.CameraTargetReachedEvent=Vl;exports.Canvas=ha;exports.CanvasGroup=Xs;exports.CapsuleCollider=rs;exports.ChangeMaterialOnClick=Ym;exports.ChangeTransformOnClick=cr;exports.CharacterController=or;exports.CharacterControllerInput=hs;exports.ChromaticAberration=Dc;exports.CircularBuffer=ai;exports.ClearFlags=Fo;exports.ClipExtrapolation=pn;exports.Collider=Xt;exports.Collision=K0;exports.CollisionDetectionMode=Gd;exports.ColorAdjustments=lo;exports.ColorBySpeedModule=ka;exports.ColorOverLifetimeModule=uu;exports.Component=t1;exports.Component$1=k;exports.ComponentLifecycleEvents=Bd;exports.Components=eE;exports.ConnectionEvents=Rb;exports.ContactPoint=Y0;exports.ContactShadows=gc;exports.Context=F;exports.ContextArgs=zC;exports.ContextEvent=oe;exports.ContextRegistry=re;exports.ControlTrackHandler=Pu;exports.CustomBranding=dr;exports.CustomShader=ye;exports.DefaultReflectionMode=hd;exports.Deletable=Dm;exports.DeleteBox=Vs;exports.DepthOfField=an;exports.DeviceFlag=Zd;exports.DocumentExtension=kx;exports.DragControls=Mo;exports.DragMode=Im;exports.DropListener=ds;exports.Duplicatable=Bm;exports.EffectWrapper=Xl;exports.EmissionModule=gs;exports.EmphasizeOnClick=va;exports.EngineLoadingView=Yl;exports.EnvironmentScene=Eu;exports.EventList=ae;exports.EventListEvent=Hd;exports.EventSystem=Dt;exports.EventTrigger=eu;exports.FieldWithDefault=vv;exports.FileReference=jo;exports.FileReferenceSerializer=x0;exports.FileSpawnModel=mP;exports.File_Event=av;exports.FixedJoint=bg;exports.Fog=Pa;exports.FrameEvent=pe;exports.GENERATOR=Ad;exports.GameObject=S;exports.Gizmos=B;exports.GltfExport=Hm;exports.GltfExportBox=Wm;exports.Gradient=pr;exports.Graphic=Pc;exports.GraphicRaycaster=qd;exports.Graphics=Gs;exports.GridHelper=Oa;exports.GridLayoutGroup=dg;exports.GroundProjectedEnv=An;exports.GroupActionModel=ko;exports.HideFlags=Xd;exports.HideOnStart=Oi;exports.HingeJoint=Mc;exports.HorizontalLayoutGroup=hg;exports.HostData=WS;exports.Image=Ta;exports.ImageReference=Io;exports.ImageReferenceSerializer=v0;exports.InheritVelocityModule=Sg;exports.Input=Sb;exports.InputEventQueue=Nt;exports.InputEvents=xe;exports.InputField=jg;exports.InstanceHandle=zo;exports.InstancingHandler=Xo;exports.InstancingUtil=Ei;exports.InstantiateEvent=qb;exports.InstantiateIdProvider=ft;exports.InstantiateOptions=sn;exports.Interactable=Lm;exports.JoinedRoomResponse=mS;exports.KeyEventArgs=sS;exports.Keyframe=$t;exports.LODGroup=Rc;exports.LODModel=Ma;exports.LeftRoomResponse=gS;exports.Light=pi;exports.LightData=O0;exports.LimitVelocityOverLifetimeModule=et;exports.LoadingElementOptions=UR;exports.LogStats=Am;exports.LogType=oi;exports.LookAt=Bg;exports.LookAtConstraint=nr;exports.MainModule=St;exports.MarkerType=Lg;exports.MaskableGraphic=Oc;exports.Mathf=D;exports.MeshCollider=to;exports.MeshRenderer=_c;exports.MinMaxCurve=G;exports.MinMaxGradient=mr;exports.NEKeyboardEvent=nl;exports.NEPointerEvent=Qn;exports.NeedleButtonElement=Ox;exports.NeedleEngineWebComponent=Vg;exports.NeedleMenu=Dn;exports.NeedlePatchesKey=Lh;exports.NeedleXRController=Zp;exports.NeedleXRSession=H;exports.NeedleXRSync=Ab;exports.NeedleXRUtils=Db;exports.NestedGltf=Ec;exports.NetworkConnection=Tb;exports.NetworkedStreamEvents=wn;exports.NetworkedStreams=pc;exports.Networking=xg;exports.NewInstanceModel=Qb;exports.NoiseModule=fe;exports.ObjectRaycaster=ci;exports.ObjectUtils=Zo;exports.OffsetConstraint=fr;exports.OneEuroFilter=Th;exports.OneEuroFilterXYZ=zp;exports.OpenURL=Aa;exports.OrbitControls=de;exports.Outline=Ca;exports.OwnershipEvent=Eb;exports.OwnershipModel=im;exports.PUBLIC_KEY=Fr;exports.Padding=hr;exports.ParticleBurst=Cd;exports.ParticleSubEmitter=Cg;exports.ParticleSystem=ql;exports.ParticleSystemBaseBehaviour=ao;exports.ParticleSystemRenderer=Ni;exports.ParticleSystemShapeType=Sd;exports.PeerHandle=is;exports.PeerNetworking=kb;exports.Physics=sa;exports.PhysicsExtension=rg;exports.PhysicsMaterialCombine=it;exports.PixelationEffect=Ic;exports.PlayAnimationOnClick=Gl;exports.PlayAudioOnClick=Hs;exports.PlayableDirector=ua;exports.PlayerColor=da;exports.PlayerState=Yi;exports.PlayerStateEvent=Fv;exports.PlayerSync=ng;exports.PlayerView=S0;exports.PlayerViewManager=C0;exports.PointerEventData=fc;exports.PointerType=Id;exports.PostProcessingEffect=Ne;exports.PostProcessingEffectOrder=Qe;exports.PostProcessingHandler=kg;exports.PreliminaryAction=xa;exports.PreliminaryTrigger=xc;exports.PrimitiveType=Vo;exports.Progress=ie;exports.PromiseAllWithErrors=Fp;exports.PromiseErrorResult=$f;exports.RGBAColor=Z;exports.RapierPhysics=Zr;exports.RawImage=ku;exports.RaycastOptions=Js;exports.Rect=zv;exports.RectTransform=nn;exports.ReflectionProbe=Wl;exports.RegisteredAnimationInfo=Us;exports.RemoteSkybox=yu;exports.RenderTexture=xn;exports.RenderTextureSerializer=H0;exports.Renderer=hi;exports.RendererData=P0;exports.RendererLightmap=vd;exports.Rigidbody=Ke;exports.RigidbodyConstraints=De;exports.RoomEvents=Q;exports.RotationBySpeedModule=zi;exports.RotationOverLifetimeModule=rn;exports.SceneLightSettings=yd;exports.SceneSwitcher=Ie;exports.ScreenCapture=co;exports.ScreenSpaceAmbientOcclusion=ys;exports.ScreenSpaceAmbientOcclusionN8=ln;exports.SendQueue=Xi;exports.SerializationContext=um;exports.SetActiveOnClick=Km;exports.ShadowCatcher=Uc;exports.ShapeModule=wg;exports.ShapeOverlapResult=Z0;exports.SharpeningEffect=Bc;exports.SignalAsset=Su;exports.SignalReceiver=Wc;exports.SignalReceiverEvent=$c;exports.SignalTrackHandler=Ql;exports.Size=Uv;exports.SizeBySpeedModule=Kt;exports.SizeOverLifetimeModule=gr;exports.SkinnedMeshRenderer=$m;exports.SmoothFollow=bu;exports.SpatialGrabRaycaster=Ho;exports.SpatialHtml=qc;exports.SpatialTrigger=vu;exports.SpatialTriggerReceiver=En;exports.SpectatorCamera=xu;exports.SphereCollider=ya;exports.SphereIntersection=om;exports.Sprite=fs;exports.SpriteData=Kr;exports.SpriteRenderer=Qt;exports.SpriteSheet=ca;exports.StateMachineBehaviour=a1;exports.StreamEndedEvent=Cm;exports.StreamReceivedEvent=J0;exports.SubEmitterSystem=Pd;exports.SyncedCamera=Eg;exports.SyncedRoom=cn;exports.SyncedTransform=tn;exports.TapGestureTrigger=Jm;exports.TeleportTarget=au;exports.TestRunner=Tg;exports.TestSceneUtils=XR;exports.TestSimulateUserData=Ag;exports.Text=wt;exports.TextBuilder=lg;exports.TextExtension=cu;exports.TextureSheetAnimationModule=Ct;exports.TiltShiftEffect=Bn;exports.Time=M0;exports.ToneMappingEffect=Qs;exports.TrackHandler=Gc;exports.TrackType=ei;exports.TrailModule=Ee;exports.TransformData=ke;exports.TransformGizmo=vr;exports.TriggerBuilder=vt;exports.TriggerModel=$s;exports.TypeStore=P;exports.UIRaycastUtils=wm;exports.UIRootComponent=Sc;exports.USDDocument=qm;exports.USDObject=ze;exports.USDWriter=Ov;exports.USDZExporter=Rn;exports.USDZExporter$1=Mv;exports.USDZText=$r;exports.USDZUIExtension=fg;exports.UriSerializer=q0;exports.UsageMarker=yc;exports.UserJoinedOrLeftRoomModel=yS;exports.VERSION=Ki;exports.VariantAction=Qm;exports.VelocityOverLifetimeModule=Le;exports.VerticalLayoutGroup=cg;exports.VideoPlayer=Ze;exports.ViewDevice=zs;exports.Vignette=br;exports.VisibilityAction=wc;exports.Voip=eo;exports.Volume=Ea;exports.VolumeParameter=I;exports.VolumeProfile=fu;exports.WaitForFrames=bC;exports.WaitForPromise=w0;exports.WaitForSeconds=mm;exports.Watch=ss;exports.WebARCameraBackground=Qc;exports.WebARSessionRoot=ri;exports.WebXR=lu;exports.WebXRButtonFactory=Ws;exports.WebXRImageTracking=Yc;exports.WebXRImageTrackingModel=vs;exports.WebXRPlaneTracking=xs;exports.WebXRTrackedImage=fa;exports.XRControllerFollow=bs;exports.XRControllerModel=as;exports.XRControllerMovement=di;exports.XRFlag=ki;exports.XRRig=Au;exports.XRState=Lt;exports.XRStateFlag=bn;exports.__Ignore=Rx;exports.__internalNotifyObjectDestroyed=Nb;exports.activeInHierarchyFieldName=os;exports.addAttributeChangeCallback=Q_;exports.addComponent=Zi;exports.addCustomExtensionPlugin=BP;exports.addNewComponent=Lo;exports.addPatch=Ld;exports.apply=Ud;exports.applyHMRChanges=e1;exports.applyPrototypeExtensions=a0;exports.beginListenDestroy=Xb;exports.beginListenInstantiate=Kb;exports.binaryIdentifierCasts=Jp;exports.build_scene_functions=UC;exports.builtinComponentKeyName=wo;exports.calculateProgress01=Ng;exports.clearMessages=pw;exports.colorSerializer=C1;exports.compareAssociation=t0;exports.componentSerializer=Vh;exports.copyTexture=hb;exports.createMotion=V0;exports.debugNet=jt;exports.debugOwner=sl;exports.decompressGpuTexture=Tv;exports.deepClone=Zl;exports.delay=Tn;exports.delayForFrames=Jl;exports.deserializeObject=ld;exports.destroy=li;exports.destroyComponentInstance=h0;exports.determineMimeTypeFromExtension=lv;exports.disposeObjectResources=_e;exports.disposeStream=Sn;exports.editorGuidKeyName=wl;exports.enableSpatialConsole=Eo;exports.euler=O1;exports.eventListSerializer=E1;exports.exportAsGLTF=KR;exports.findByGuid=pm;exports.findObjectOfType=lc;exports.findObjectsOfType=u0;exports.findResourceUsers=rm;exports.fitObjectIntoVolume=ub;exports.foreachComponent=Wo;exports.foreachComponentEnumerator=Nd;exports.forward=Tw;exports.generateQRCode=K_;exports.generateSeed=Yb;exports.getBoundingBox=Wt;exports.getCameraController=nb;exports.getComponent=er;exports.getComponentInChildren=ac;exports.getComponentInParent=Ul;exports.getComponents=rc;exports.getComponentsInChildren=pa;exports.getComponentsInParent=Fd;exports.getFormattedDate=wv;exports.getIconElement=ut;exports.getIconTexture=cp;exports.getLoader=Ji;exports.getOrAddComponent=oc;exports.getParam=x;exports.getParentHierarchyPath=Dw;exports.getPath=Gx;exports.getPeerOptions=dS;exports.getPeerjsInstance=Mb;exports.getResourceUserCount=IS;exports.getTempColor=rb;exports.getTempQuaternion=qi;exports.getTempVector=V;exports.getUrlParams=Kl;exports.getVisibleInCustomShadowRendering=db;exports.getWorldDirection=ab;exports.getWorldEuler=$p;exports.getWorldPosition=X;exports.getWorldQuaternion=ue;exports.getWorldRotation=Td;exports.getWorldScale=Ae;exports.hasCommercialLicense=kn;exports.hasIndieLicense=hc;exports.hasPointerEventComponent=fd;exports.hasProLicense=Mn;exports.hideDebugConsole=gb;exports.imageToCanvas=Av;exports.instantiate=Go;exports.invokeLoadedImportPluginHooks=yv;exports.invokeXRSessionEnd=wb;exports.invokeXRSessionStart=xb;exports.isActiveInHierarchy=f0;exports.isActiveSelf=ma;exports.isAndroidDevice=Kx;exports.isAnimationAction=cb;exports.isComponent=Q0;exports.isDebugMode=Nx;exports.isDesktop=qx;exports.isDestroyed=$o;exports.isDevEnvironment=A;exports.isDisposed=LS;exports.isExporting=QR;exports.isGLTFModel=X0;exports.isHostedOnGlitch=V_;exports.isHotReloadEnabled=pp;exports.isHotReloading=ZC;exports.isIPad=Qx;exports.isIconElement=E0;exports.isLocalNetwork=Ai;exports.isMacOS=Jx;exports.isMobileDevice=Xx;exports.isMozillaXR=Zx;exports.isQuest=iw;exports.isResourceTrackingEnabled=Bb;exports.isSafari=tw;exports.isUsingInstancing=zd;exports.isiOS=ew;exports.isiPad=Yx;exports.loadAsset=LR;exports.loadPMREM=lx;exports.loadSync=zg;exports.logHierarchy=ed;exports.lookAtInverse=Sw;exports.lookAtObject=ec;exports.lookAtScreenPoint=Cw;exports.makeId=$x;exports.makeIdFromRandomWords=H_;exports.makeNameSafe=Ii;exports.markAsInstancedRendered=p0;exports.microphonePermissionsGranted=nw;exports.nameof=zx;exports.nameofFactory=W_;exports.objectSerializer=G0;exports.offXRSessionEnd=nS;exports.offXRSessionStart=iS;exports.onAfterRender=YC;exports.onBeforeRender=QC;exports.onClear=qC;exports.onDestroy=XC;exports.onInitialized=I0;exports.onStart=_m;exports.onUpdate=j0;exports.onXRSessionEnd=Kp;exports.onXRSessionStart=Dd;exports.parseSync=xx;exports.placeOnSurface=fb;exports.postprocessFBXMaterials=Hp;exports.prefix=_1;exports.pushState=G_;exports.randomNumber=Wx;exports.registerBinaryType=em;exports.registerComponent=$d;exports.registerComponentExtension=zm;exports.registerCustomEffectType=Vi;exports.registerExportExtensions=Nm;exports.registerExtensions=bd;exports.registerHotReloadType=F0;exports.registerLoader=Qp;exports.registerPrefabProvider=Jb;exports.registerPrototypeExtensions=l0;exports.registerType=QS;exports.relativePathPrefix=X_;exports.removeAttributeChangeCallback=Y_;exports.removeComponent=fm;exports.removeCustomImportExtensionType=FP;exports.removePatch=eS;exports.resolveUrl=Ys;exports.sanitizeString=q_;exports.saveImage=yx;exports.screenshot=mR;exports.screenshot2=Ug;exports.sendDestroyed=lm;exports.serializable=f;exports.serializeObject=n0;exports.serializeable=tr;exports.setActive=Pl;exports.setAllowBalloonMessages=eb;exports.setAllowOverlayMessages=hw;exports.setAutoFitEnabled=Zh;exports.setCameraController=Gf;exports.setDestroyed=g0;exports.setDevEnvironment=Vw;exports.setDisposable=Ub;exports.setDontDestroy=Ar;exports.setOrAddParamsToUrl=Vf;exports.setParam=Vx;exports.setParamWithoutReload=Il;exports.setPeerOptions=uS;exports.setResourceTrackingEnabled=AS;exports.setState=jp;exports.setVisibleInCustomShadowRendering=Gp;exports.setWorldEuler=Wp;exports.setWorldPosition=Ye;exports.setWorldPositionXYZ=No;exports.setWorldQuaternion=Li;exports.setWorldQuaternionXYZW=Vp;exports.setWorldRotation=lb;exports.setWorldRotationXYZ=tc;exports.setWorldScale=ea;exports.showBalloonError=ic;exports.showBalloonMessage=Se;exports.showBalloonWarning=he;exports.showDebugConsole=qp;exports.slerp=ww;exports.syncDestroy=nc;exports.syncField=ig;exports.syncInstantiate=cm;exports.textureToCanvas=Iw;exports.tryCastBinary=Pb;exports.tryDetermineMimetypeFromBinary=hv;exports.tryDetermineMimetypeFromURL=cv;exports.tryFindObject=Jr;exports.tryGetGuid=Ob;exports.unregisterHotReloadType=U0;exports.unwatchWrite=Bp;exports.useForAutoFit=sb;exports.validate=gt;exports.watchWrite=Ed;
@@ -1,5 +1,5 @@
1
- import { GameObject as r, onClear as i, onDestroy as a, onInitialized as s, onAfterRender as l, onBeforeRender as d, onUpdate as c, onStart as m, loadAsset as g, NeedleXRSession as p, Context as u, VERSION as S, Component as C, Components as y } from "./needle-engine.bundle-lC7eSFno.js";
2
- import { $physicsKey as P, ActionBuilder as A, ActionCollection as T, ActionModel as b, Addressables as M, AlignmentConstraint as I, AmbientMode as D, Animation as O, AnimationCurve as x, AnimationExtension as k, AnimationTrackHandler as L, AnimationUtils as N, Animator as B, AnimatorConditionMode as F, AnimatorController as U, AnimatorControllerParameterType as G, AnimatorStateInfo as w, Antialiasing as W, Application as H, AssetDatabase as X, AssetReference as z, AudioExtension as V, AudioListener as _, AudioSource as j, AudioTrackHandler as K, Avatar as Z, AvatarBlink_Simple as Q, AvatarEyeLook_Rotation as Y, AvatarLoader as $, AvatarMarker as J, AvatarModel as q, Avatar_Brain_LookAt as ee, Avatar_MouthShapes as te, Avatar_MustacheShake as oe, Avatar_POI as re, Axes as ne, AxesHelper as ie, BUILD_TIME as ae, BaseUIComponent as se, BasicIKConstraint as le, BehaviorExtension as de, BehaviorModel as ce, Component$1 as me, BlobStorage as ge, BloomEffect as pe, BoxCollider as ue, BoxGizmo as Se, BoxHelperComponent as Ce, Button as ye, ButtonsFactory as Ee, CallDirection as Re, CallInfo as he, Camera as fe, CameraTargetReachedEvent as ve, Canvas as Pe, CanvasGroup as Ae, CapsuleCollider as Te, ChangeMaterialOnClick as be, ChangeTransformOnClick as Me, CharacterController as Ie, CharacterControllerInput as De, ChromaticAberration as Oe, CircularBuffer as xe, ClearFlags as ke, ClipExtrapolation as Le, Collider as Ne, Collision as Be, CollisionDetectionMode as Fe, ColorAdjustments as Ue, ColorBySpeedModule as Ge, ColorOverLifetimeModule as we, Component$1 as We, ComponentLifecycleEvents as He, ConnectionEvents as Xe, ContactPoint as ze, ContactShadows as Ve, ContextArgs as _e, ContextEvent as je, ContextRegistry as Ke, ControlTrackHandler as Ze, CustomBranding as Qe, CustomShader as Ye, DefaultReflectionMode as $e, Deletable as Je, DeleteBox as qe, DepthOfField as et, DeviceFlag as tt, DeviceUtilities as ot, DocumentExtension as rt, DragControls as nt, DragMode as it, DropListener as at, Duplicatable as st, EffectWrapper as lt, EmissionModule as dt, EmphasizeOnClick as ct, EngineLoadingView as mt, EnvironmentScene as gt, EventList as pt, EventListEvent as ut, EventSystem as St, EventTrigger as Ct, FieldWithDefault as yt, FileReference as Et, FileReferenceSerializer as Rt, FileSpawnModel as ht, File_Event as ft, FixedJoint as vt, Fog as Pt, FrameEvent as At, GENERATOR as Tt, Gizmos as bt, GltfExport as Mt, GltfExportBox as It, Gradient as Dt, Graphic as Ot, GraphicRaycaster as xt, Graphics as kt, GridHelper as Lt, GridLayoutGroup as Nt, GroundProjectedEnv as Bt, GroupActionModel as Ft, HideFlags as Ut, HideOnStart as Gt, HingeJoint as wt, HorizontalLayoutGroup as Wt, HostData as Ht, Image as Xt, ImageReference as zt, ImageReferenceSerializer as Vt, InheritVelocityModule as _t, Input as jt, InputEventQueue as Kt, InputEvents as Zt, InputField as Qt, InstanceHandle as Yt, InstancingHandler as $t, InstancingUtil as Jt, InstantiateEvent as qt, InstantiateIdProvider as eo, InstantiateOptions as to, Interactable as oo, InternalScreenshotUtils as ro, JoinedRoomResponse as no, KeyEventArgs as io, Keyframe as ao, LODGroup as so, LODModel as lo, LeftRoomResponse as co, Light as mo, LightData as go, LimitVelocityOverLifetimeModule as po, LoadingElementOptions as uo, LogStats as So, LogType as Co, LookAt as yo, LookAtConstraint as Eo, MainModule as Ro, MarkerType as ho, MaskableGraphic as fo, Mathf as vo, MeshCollider as Po, MeshRenderer as Ao, MinMaxCurve as To, MinMaxGradient as bo, NEEDLE_ENGINE_FEATURE_FLAGS as Mo, MODULES as Io, NEKeyboardEvent as Do, NEPointerEvent as Oo, NeedleButtonElement as xo, ContextRegistry as ko, NeedleEngineModelLoader as Lo, NeedleEngineWebComponent as No, NeedleMenu as Bo, NeedlePatchesKey as Fo, USDZExporter$1 as Uo, NeedleXRController as Go, NeedleXRSync as wo, NeedleXRUtils as Wo, NestedGltf as Ho, NetworkConnection as Xo, NetworkedStreamEvents as zo, NetworkedStreams as Vo, Networking as _o, NewInstanceModel as jo, NoiseModule as Ko, ObjectRaycaster as Zo, ObjectUtils as Qo, OffsetConstraint as Yo, OneEuroFilter as $o, OneEuroFilterXYZ as Jo, OpenURL as qo, OrbitControls as er, Outline as tr, OwnershipEvent as or, OwnershipModel as rr, PUBLIC_KEY as nr, Padding as ir, ParticleBurst as ar, ParticleSubEmitter as sr, ParticleSystem as lr, ParticleSystemBaseBehaviour as dr, ParticleSystemRenderer as cr, ParticleSystemShapeType as mr, PeerHandle as gr, PeerNetworking as pr, Physics as ur, PhysicsExtension as Sr, PhysicsMaterialCombine as Cr, PixelationEffect as yr, PlayAnimationOnClick as Er, PlayAudioOnClick as Rr, PlayableDirector as hr, PlayerColor as fr, PlayerState as vr, PlayerStateEvent as Pr, PlayerSync as Ar, PlayerView as Tr, PlayerViewManager as br, PointerEventData as Mr, PointerType as Ir, PostProcessingEffect as Dr, PostProcessingEffectOrder as Or, PostProcessingHandler as xr, Volume as kr, PreliminaryAction as Lr, PreliminaryTrigger as Nr, PreviewHelper as Br, PrimitiveType as Fr, Progress as Ur, PromiseAllWithErrors as Gr, PromiseErrorResult as wr, RGBAColor as Wr, RapierPhysics as Hr, RawImage as Xr, RaycastOptions as zr, Rect as Vr, RectTransform as _r, ReflectionProbe as jr, RegisteredAnimationInfo as Kr, RemoteSkybox as Zr, RenderTexture as Qr, RenderTextureSerializer as Yr, Renderer as $r, RendererData as Jr, RendererLightmap as qr, Rigidbody as en, RigidbodyConstraints as tn, RoomEvents as on, RotationBySpeedModule as rn, RotationOverLifetimeModule as nn, SceneLightSettings as an, SceneSwitcher as sn, ScreenCapture as ln, ScreenSpaceAmbientOcclusion as dn, ScreenSpaceAmbientOcclusionN8 as cn, SendQueue as mn, SerializationContext as gn, SetActiveOnClick as pn, ShadowCatcher as un, ShapeModule as Sn, ShapeOverlapResult as Cn, SharpeningEffect as yn, SignalAsset as En, SignalReceiver as Rn, SignalReceiverEvent as hn, SignalTrackHandler as fn, Size as vn, SizeBySpeedModule as Pn, SizeOverLifetimeModule as An, SkinnedMeshRenderer as Tn, SmoothFollow as bn, SpatialGrabRaycaster as Mn, SpatialHtml as In, SpatialTrigger as Dn, SpatialTriggerReceiver as On, SpectatorCamera as xn, SphereCollider as kn, SphereIntersection as Ln, Sprite as Nn, SpriteData as Bn, SpriteRenderer as Fn, SpriteSheet as Un, StateMachineBehaviour as Gn, StreamEndedEvent as wn, StreamReceivedEvent as Wn, SubEmitterSystem as Hn, SyncedCamera as Xn, SyncedRoom as zn, SyncedTransform as Vn, TapGestureTrigger as _n, TeleportTarget as jn, TestRunner as Kn, TestSceneUtils as Zn, TestSimulateUserData as Qn, Text as Yn, TextBuilder as $n, TextExtension as Jn, TextureSheetAnimationModule as qn, TiltShiftEffect as ei, Time as ti, ToneMappingEffect as oi, TrackHandler as ri, TrackType as ni, TrailModule as ii, TransformData as ai, TransformGizmo as si, TriggerBuilder as li, TriggerModel as di, TypeStore as ci, UIRaycastUtils as mi, UIRootComponent as gi, USDDocument as pi, USDObject as ui, USDWriter as Si, USDZExporter as Ci, USDZText as yi, USDZUIExtension as Ei, UriSerializer as Ri, UsageMarker as hi, UserJoinedOrLeftRoomModel as fi, VariantAction as vi, VelocityOverLifetimeModule as Pi, VerticalLayoutGroup as Ai, VideoPlayer as Ti, ViewDevice as bi, Vignette as Mi, VisibilityAction as Ii, Voip as Di, Volume as Oi, VolumeParameter as xi, VolumeProfile as ki, WaitForFrames as Li, WaitForPromise as Ni, WaitForSeconds as Bi, Watch as Fi, WebARCameraBackground as Ui, WebARSessionRoot as Gi, WebXR as wi, WebXRButtonFactory as Wi, WebXRImageTracking as Hi, WebXRImageTrackingModel as Xi, WebXRPlaneTracking as zi, WebXRTrackedImage as Vi, XRControllerFollow as _i, XRControllerModel as ji, XRControllerMovement as Ki, XRFlag as Zi, XRRig as Qi, XRState as Yi, XRStateFlag as $i, __Ignore as Ji, __internalNotifyObjectDestroyed as qi, activeInHierarchyFieldName as ea, addAttributeChangeCallback as ta, addComponent as oa, addCustomExtensionPlugin as ra, addNewComponent as na, addPatch as ia, apply as aa, applyHMRChanges as sa, applyPrototypeExtensions as la, beginListenDestroy as da, beginListenInstantiate as ca, binaryIdentifierCasts as ma, build_scene_functions as ga, builtinComponentKeyName as pa, calculateProgress01 as ua, clearMessages as Sa, clearMessages as Ca, colorSerializer as ya, compareAssociation as Ea, componentSerializer as Ra, copyTexture as ha, createMotion as fa, debugNet as va, debugOwner as Pa, decompressGpuTexture as Aa, deepClone as Ta, delay as ba, delayForFrames as Ma, deserializeObject as Ia, destroy as Da, destroyComponentInstance as Oa, determineMimeTypeFromExtension as xa, disposeObjectResources as ka, disposeStream as La, editorGuidKeyName as Na, enableSpatialConsole as Ba, euler as Fa, eventListSerializer as Ua, exportAsGLTF as Ga, findByGuid as wa, findObjectOfType as Wa, findObjectsOfType as Ha, findResourceUsers as Xa, fitObjectIntoVolume as za, foreachComponent as Va, foreachComponentEnumerator as _a, forward as ja, generateQRCode as Ka, generateSeed as Za, getBoundingBox as Qa, getCameraController as Ya, getComponent as $a, getComponentInChildren as Ja, getComponentInParent as qa, getComponents as es, getComponentsInChildren as ts, getComponentsInParent as os, getFormattedDate as rs, getIconElement as ns, getIconTexture as is, getLoader as as, getOrAddComponent as ss, getParam as ls, getParentHierarchyPath as ds, getPath as cs, getPeerOptions as ms, getPeerjsInstance as gs, getResourceUserCount as ps, getTempColor as us, getTempQuaternion as Ss, getTempVector as Cs, getUrlParams as ys, getVisibleInCustomShadowRendering as Es, getWorldDirection as Rs, getWorldEuler as hs, getWorldPosition as fs, getWorldQuaternion as vs, getWorldRotation as Ps, getWorldScale as As, hasCommercialLicense as Ts, hasIndieLicense as bs, hasPointerEventComponent as Ms, hasProLicense as Is, hideDebugConsole as Ds, imageToCanvas as Os, instantiate as xs, invokeLoadedImportPluginHooks as ks, invokeXRSessionEnd as Ls, invokeXRSessionStart as Ns, isActiveInHierarchy as Bs, isActiveSelf as Fs, isAndroidDevice as Us, isAnimationAction as Gs, isComponent as ws, isDebugMode as Ws, isDesktop as Hs, isDestroyed as Xs, isDevEnvironment as zs, isDisposed as Vs, isExporting as _s, isGLTFModel as js, isHostedOnGlitch as Ks, isHotReloadEnabled as Zs, isHotReloading as Qs, isIPad as Ys, isIconElement as $s, isLocalNetwork as Js, isMacOS as qs, isMobileDevice as el, isMozillaXR as tl, isQuest as ol, isResourceTrackingEnabled as rl, isSafari as nl, isUsingInstancing as il, isiOS as al, isiPad as sl, loadPMREM as ll, loadSync as dl, logHierarchy as cl, lookAtInverse as ml, lookAtObject as gl, lookAtScreenPoint as pl, makeId as ul, makeIdFromRandomWords as Sl, makeNameSafe as Cl, markAsInstancedRendered as yl, microphonePermissionsGranted as El, nameof as Rl, nameofFactory as hl, objectSerializer as fl, offXRSessionEnd as vl, offXRSessionStart as Pl, onXRSessionEnd as Al, onXRSessionStart as Tl, parseSync as bl, placeOnSurface as Ml, postprocessFBXMaterials as Il, prefix as Dl, pushState as Ol, randomNumber as xl, registerBinaryType as kl, registerComponent as Ll, registerComponentExtension as Nl, registerCustomEffectType as Bl, registerExportExtensions as Fl, registerExtensions as Ul, registerHotReloadType as Gl, registerLoader as wl, registerPrefabProvider as Wl, registerPrototypeExtensions as Hl, registerType as Xl, relativePathPrefix as zl, removeAttributeChangeCallback as Vl, removeComponent as _l, removeCustomImportExtensionType as jl, removePatch as Kl, resolveUrl as Zl, sanitizeString as Ql, saveImage as Yl, screenshot as $l, screenshot2 as Jl, sendDestroyed as ql, serializable as ed, serializeObject as td, serializeable as od, setActive as rd, setAllowBalloonMessages as nd, setAllowOverlayMessages as id, setAutoFitEnabled as ad, setCameraController as sd, setDestroyed as ld, setDevEnvironment as dd, setDisposable as cd, setDontDestroy as md, setOrAddParamsToUrl as gd, setParam as pd, setParamWithoutReload as ud, setPeerOptions as Sd, setResourceTrackingEnabled as Cd, setState as yd, setVisibleInCustomShadowRendering as Ed, setWorldEuler as Rd, setWorldPosition as hd, setWorldPositionXYZ as fd, setWorldQuaternion as vd, setWorldQuaternionXYZW as Pd, setWorldRotation as Ad, setWorldRotationXYZ as Td, setWorldScale as bd, showBalloonError as Md, showBalloonMessage as Id, showBalloonWarning as Dd, showDebugConsole as Od, slerp as xd, syncDestroy as kd, syncField as Ld, syncInstantiate as Nd, textureToCanvas as Bd, tryCastBinary as Fd, tryDetermineMimetypeFromBinary as Ud, tryDetermineMimetypeFromURL as Gd, tryFindObject as wd, tryGetGuid as Wd, unregisterHotReloadType as Hd, unwatchWrite as Xd, useForAutoFit as zd, validate as Vd, watchWrite as _d } from "./needle-engine.bundle-lC7eSFno.js";
1
+ import { GameObject as r, onClear as i, onDestroy as a, onInitialized as s, onAfterRender as l, onBeforeRender as d, onUpdate as c, onStart as m, loadAsset as g, NeedleXRSession as p, Context as u, VERSION as S, Component as C, Components as y } from "./needle-engine.bundle-9ZWPsgka.js";
2
+ import { $physicsKey as P, ActionBuilder as A, ActionCollection as T, ActionModel as b, Addressables as M, AlignmentConstraint as I, AmbientMode as D, Animation as O, AnimationCurve as x, AnimationExtension as k, AnimationTrackHandler as L, AnimationUtils as N, Animator as B, AnimatorConditionMode as F, AnimatorController as U, AnimatorControllerParameterType as G, AnimatorStateInfo as w, Antialiasing as W, Application as H, AssetDatabase as X, AssetReference as z, AudioExtension as V, AudioListener as _, AudioSource as j, AudioTrackHandler as K, Avatar as Z, AvatarBlink_Simple as Q, AvatarEyeLook_Rotation as Y, AvatarLoader as $, AvatarMarker as J, AvatarModel as q, Avatar_Brain_LookAt as ee, Avatar_MouthShapes as te, Avatar_MustacheShake as oe, Avatar_POI as re, Axes as ne, AxesHelper as ie, BUILD_TIME as ae, BaseUIComponent as se, BasicIKConstraint as le, BehaviorExtension as de, BehaviorModel as ce, Component$1 as me, BlobStorage as ge, BloomEffect as pe, BoxCollider as ue, BoxGizmo as Se, BoxHelperComponent as Ce, Button as ye, ButtonsFactory as Ee, CallDirection as Re, CallInfo as he, Camera as fe, CameraTargetReachedEvent as ve, Canvas as Pe, CanvasGroup as Ae, CapsuleCollider as Te, ChangeMaterialOnClick as be, ChangeTransformOnClick as Me, CharacterController as Ie, CharacterControllerInput as De, ChromaticAberration as Oe, CircularBuffer as xe, ClearFlags as ke, ClipExtrapolation as Le, Collider as Ne, Collision as Be, CollisionDetectionMode as Fe, ColorAdjustments as Ue, ColorBySpeedModule as Ge, ColorOverLifetimeModule as we, Component$1 as We, ComponentLifecycleEvents as He, ConnectionEvents as Xe, ContactPoint as ze, ContactShadows as Ve, ContextArgs as _e, ContextEvent as je, ContextRegistry as Ke, ControlTrackHandler as Ze, CustomBranding as Qe, CustomShader as Ye, DefaultReflectionMode as $e, Deletable as Je, DeleteBox as qe, DepthOfField as et, DeviceFlag as tt, DeviceUtilities as ot, DocumentExtension as rt, DragControls as nt, DragMode as it, DropListener as at, Duplicatable as st, EffectWrapper as lt, EmissionModule as dt, EmphasizeOnClick as ct, EngineLoadingView as mt, EnvironmentScene as gt, EventList as pt, EventListEvent as ut, EventSystem as St, EventTrigger as Ct, FieldWithDefault as yt, FileReference as Et, FileReferenceSerializer as Rt, FileSpawnModel as ht, File_Event as ft, FixedJoint as vt, Fog as Pt, FrameEvent as At, GENERATOR as Tt, Gizmos as bt, GltfExport as Mt, GltfExportBox as It, Gradient as Dt, Graphic as Ot, GraphicRaycaster as xt, Graphics as kt, GridHelper as Lt, GridLayoutGroup as Nt, GroundProjectedEnv as Bt, GroupActionModel as Ft, HideFlags as Ut, HideOnStart as Gt, HingeJoint as wt, HorizontalLayoutGroup as Wt, HostData as Ht, Image as Xt, ImageReference as zt, ImageReferenceSerializer as Vt, InheritVelocityModule as _t, Input as jt, InputEventQueue as Kt, InputEvents as Zt, InputField as Qt, InstanceHandle as Yt, InstancingHandler as $t, InstancingUtil as Jt, InstantiateEvent as qt, InstantiateIdProvider as eo, InstantiateOptions as to, Interactable as oo, InternalScreenshotUtils as ro, JoinedRoomResponse as no, KeyEventArgs as io, Keyframe as ao, LODGroup as so, LODModel as lo, LeftRoomResponse as co, Light as mo, LightData as go, LimitVelocityOverLifetimeModule as po, LoadingElementOptions as uo, LogStats as So, LogType as Co, LookAt as yo, LookAtConstraint as Eo, MainModule as Ro, MarkerType as ho, MaskableGraphic as fo, Mathf as vo, MeshCollider as Po, MeshRenderer as Ao, MinMaxCurve as To, MinMaxGradient as bo, NEEDLE_ENGINE_FEATURE_FLAGS as Mo, MODULES as Io, NEKeyboardEvent as Do, NEPointerEvent as Oo, NeedleButtonElement as xo, ContextRegistry as ko, NeedleEngineModelLoader as Lo, NeedleEngineWebComponent as No, NeedleMenu as Bo, NeedlePatchesKey as Fo, USDZExporter$1 as Uo, NeedleXRController as Go, NeedleXRSync as wo, NeedleXRUtils as Wo, NestedGltf as Ho, NetworkConnection as Xo, NetworkedStreamEvents as zo, NetworkedStreams as Vo, Networking as _o, NewInstanceModel as jo, NoiseModule as Ko, ObjectRaycaster as Zo, ObjectUtils as Qo, OffsetConstraint as Yo, OneEuroFilter as $o, OneEuroFilterXYZ as Jo, OpenURL as qo, OrbitControls as er, Outline as tr, OwnershipEvent as or, OwnershipModel as rr, PUBLIC_KEY as nr, Padding as ir, ParticleBurst as ar, ParticleSubEmitter as sr, ParticleSystem as lr, ParticleSystemBaseBehaviour as dr, ParticleSystemRenderer as cr, ParticleSystemShapeType as mr, PeerHandle as gr, PeerNetworking as pr, Physics as ur, PhysicsExtension as Sr, PhysicsMaterialCombine as Cr, PixelationEffect as yr, PlayAnimationOnClick as Er, PlayAudioOnClick as Rr, PlayableDirector as hr, PlayerColor as fr, PlayerState as vr, PlayerStateEvent as Pr, PlayerSync as Ar, PlayerView as Tr, PlayerViewManager as br, PointerEventData as Mr, PointerType as Ir, PostProcessingEffect as Dr, PostProcessingEffectOrder as Or, PostProcessingHandler as xr, Volume as kr, PreliminaryAction as Lr, PreliminaryTrigger as Nr, PreviewHelper as Br, PrimitiveType as Fr, Progress as Ur, PromiseAllWithErrors as Gr, PromiseErrorResult as wr, RGBAColor as Wr, RapierPhysics as Hr, RawImage as Xr, RaycastOptions as zr, Rect as Vr, RectTransform as _r, ReflectionProbe as jr, RegisteredAnimationInfo as Kr, RemoteSkybox as Zr, RenderTexture as Qr, RenderTextureSerializer as Yr, Renderer as $r, RendererData as Jr, RendererLightmap as qr, Rigidbody as en, RigidbodyConstraints as tn, RoomEvents as on, RotationBySpeedModule as rn, RotationOverLifetimeModule as nn, SceneLightSettings as an, SceneSwitcher as sn, ScreenCapture as ln, ScreenSpaceAmbientOcclusion as dn, ScreenSpaceAmbientOcclusionN8 as cn, SendQueue as mn, SerializationContext as gn, SetActiveOnClick as pn, ShadowCatcher as un, ShapeModule as Sn, ShapeOverlapResult as Cn, SharpeningEffect as yn, SignalAsset as En, SignalReceiver as Rn, SignalReceiverEvent as hn, SignalTrackHandler as fn, Size as vn, SizeBySpeedModule as Pn, SizeOverLifetimeModule as An, SkinnedMeshRenderer as Tn, SmoothFollow as bn, SpatialGrabRaycaster as Mn, SpatialHtml as In, SpatialTrigger as Dn, SpatialTriggerReceiver as On, SpectatorCamera as xn, SphereCollider as kn, SphereIntersection as Ln, Sprite as Nn, SpriteData as Bn, SpriteRenderer as Fn, SpriteSheet as Un, StateMachineBehaviour as Gn, StreamEndedEvent as wn, StreamReceivedEvent as Wn, SubEmitterSystem as Hn, SyncedCamera as Xn, SyncedRoom as zn, SyncedTransform as Vn, TapGestureTrigger as _n, TeleportTarget as jn, TestRunner as Kn, TestSceneUtils as Zn, TestSimulateUserData as Qn, Text as Yn, TextBuilder as $n, TextExtension as Jn, TextureSheetAnimationModule as qn, TiltShiftEffect as ei, Time as ti, ToneMappingEffect as oi, TrackHandler as ri, TrackType as ni, TrailModule as ii, TransformData as ai, TransformGizmo as si, TriggerBuilder as li, TriggerModel as di, TypeStore as ci, UIRaycastUtils as mi, UIRootComponent as gi, USDDocument as pi, USDObject as ui, USDWriter as Si, USDZExporter as Ci, USDZText as yi, USDZUIExtension as Ei, UriSerializer as Ri, UsageMarker as hi, UserJoinedOrLeftRoomModel as fi, VariantAction as vi, VelocityOverLifetimeModule as Pi, VerticalLayoutGroup as Ai, VideoPlayer as Ti, ViewDevice as bi, Vignette as Mi, VisibilityAction as Ii, Voip as Di, Volume as Oi, VolumeParameter as xi, VolumeProfile as ki, WaitForFrames as Li, WaitForPromise as Ni, WaitForSeconds as Bi, Watch as Fi, WebARCameraBackground as Ui, WebARSessionRoot as Gi, WebXR as wi, WebXRButtonFactory as Wi, WebXRImageTracking as Hi, WebXRImageTrackingModel as Xi, WebXRPlaneTracking as zi, WebXRTrackedImage as Vi, XRControllerFollow as _i, XRControllerModel as ji, XRControllerMovement as Ki, XRFlag as Zi, XRRig as Qi, XRState as Yi, XRStateFlag as $i, __Ignore as Ji, __internalNotifyObjectDestroyed as qi, activeInHierarchyFieldName as ea, addAttributeChangeCallback as ta, addComponent as oa, addCustomExtensionPlugin as ra, addNewComponent as na, addPatch as ia, apply as aa, applyHMRChanges as sa, applyPrototypeExtensions as la, beginListenDestroy as da, beginListenInstantiate as ca, binaryIdentifierCasts as ma, build_scene_functions as ga, builtinComponentKeyName as pa, calculateProgress01 as ua, clearMessages as Sa, clearMessages as Ca, colorSerializer as ya, compareAssociation as Ea, componentSerializer as Ra, copyTexture as ha, createMotion as fa, debugNet as va, debugOwner as Pa, decompressGpuTexture as Aa, deepClone as Ta, delay as ba, delayForFrames as Ma, deserializeObject as Ia, destroy as Da, destroyComponentInstance as Oa, determineMimeTypeFromExtension as xa, disposeObjectResources as ka, disposeStream as La, editorGuidKeyName as Na, enableSpatialConsole as Ba, euler as Fa, eventListSerializer as Ua, exportAsGLTF as Ga, findByGuid as wa, findObjectOfType as Wa, findObjectsOfType as Ha, findResourceUsers as Xa, fitObjectIntoVolume as za, foreachComponent as Va, foreachComponentEnumerator as _a, forward as ja, generateQRCode as Ka, generateSeed as Za, getBoundingBox as Qa, getCameraController as Ya, getComponent as $a, getComponentInChildren as Ja, getComponentInParent as qa, getComponents as es, getComponentsInChildren as ts, getComponentsInParent as os, getFormattedDate as rs, getIconElement as ns, getIconTexture as is, getLoader as as, getOrAddComponent as ss, getParam as ls, getParentHierarchyPath as ds, getPath as cs, getPeerOptions as ms, getPeerjsInstance as gs, getResourceUserCount as ps, getTempColor as us, getTempQuaternion as Ss, getTempVector as Cs, getUrlParams as ys, getVisibleInCustomShadowRendering as Es, getWorldDirection as Rs, getWorldEuler as hs, getWorldPosition as fs, getWorldQuaternion as vs, getWorldRotation as Ps, getWorldScale as As, hasCommercialLicense as Ts, hasIndieLicense as bs, hasPointerEventComponent as Ms, hasProLicense as Is, hideDebugConsole as Ds, imageToCanvas as Os, instantiate as xs, invokeLoadedImportPluginHooks as ks, invokeXRSessionEnd as Ls, invokeXRSessionStart as Ns, isActiveInHierarchy as Bs, isActiveSelf as Fs, isAndroidDevice as Us, isAnimationAction as Gs, isComponent as ws, isDebugMode as Ws, isDesktop as Hs, isDestroyed as Xs, isDevEnvironment as zs, isDisposed as Vs, isExporting as _s, isGLTFModel as js, isHostedOnGlitch as Ks, isHotReloadEnabled as Zs, isHotReloading as Qs, isIPad as Ys, isIconElement as $s, isLocalNetwork as Js, isMacOS as qs, isMobileDevice as el, isMozillaXR as tl, isQuest as ol, isResourceTrackingEnabled as rl, isSafari as nl, isUsingInstancing as il, isiOS as al, isiPad as sl, loadPMREM as ll, loadSync as dl, logHierarchy as cl, lookAtInverse as ml, lookAtObject as gl, lookAtScreenPoint as pl, makeId as ul, makeIdFromRandomWords as Sl, makeNameSafe as Cl, markAsInstancedRendered as yl, microphonePermissionsGranted as El, nameof as Rl, nameofFactory as hl, objectSerializer as fl, offXRSessionEnd as vl, offXRSessionStart as Pl, onXRSessionEnd as Al, onXRSessionStart as Tl, parseSync as bl, placeOnSurface as Ml, postprocessFBXMaterials as Il, prefix as Dl, pushState as Ol, randomNumber as xl, registerBinaryType as kl, registerComponent as Ll, registerComponentExtension as Nl, registerCustomEffectType as Bl, registerExportExtensions as Fl, registerExtensions as Ul, registerHotReloadType as Gl, registerLoader as wl, registerPrefabProvider as Wl, registerPrototypeExtensions as Hl, registerType as Xl, relativePathPrefix as zl, removeAttributeChangeCallback as Vl, removeComponent as _l, removeCustomImportExtensionType as jl, removePatch as Kl, resolveUrl as Zl, sanitizeString as Ql, saveImage as Yl, screenshot as $l, screenshot2 as Jl, sendDestroyed as ql, serializable as ed, serializeObject as td, serializeable as od, setActive as rd, setAllowBalloonMessages as nd, setAllowOverlayMessages as id, setAutoFitEnabled as ad, setCameraController as sd, setDestroyed as ld, setDevEnvironment as dd, setDisposable as cd, setDontDestroy as md, setOrAddParamsToUrl as gd, setParam as pd, setParamWithoutReload as ud, setPeerOptions as Sd, setResourceTrackingEnabled as Cd, setState as yd, setVisibleInCustomShadowRendering as Ed, setWorldEuler as Rd, setWorldPosition as hd, setWorldPositionXYZ as fd, setWorldQuaternion as vd, setWorldQuaternionXYZW as Pd, setWorldRotation as Ad, setWorldRotationXYZ as Td, setWorldScale as bd, showBalloonError as Md, showBalloonMessage as Id, showBalloonWarning as Dd, showDebugConsole as Od, slerp as xd, syncDestroy as kd, syncField as Ld, syncInstantiate as Nd, textureToCanvas as Bd, tryCastBinary as Fd, tryDetermineMimetypeFromBinary as Ud, tryDetermineMimetypeFromURL as Gd, tryFindObject as wd, tryGetGuid as Wd, unregisterHotReloadType as Hd, unwatchWrite as Xd, useForAutoFit as zd, validate as Vd, watchWrite as _d } from "./needle-engine.bundle-9ZWPsgka.js";
3
3
  import { NEEDLE_progressive as Kd } from "./gltf-progressive-BcHT3Nyo.js";
4
4
  import { THREE as E } from "./three-BRSLmpyi.js";
5
5
  const t = {