@needle-tools/engine 4.7.2-next.0e4e068 → 4.7.2-next.35f7370

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.
@@ -1806,9 +1806,9 @@ qo('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUIL
1806
1806
  qo('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');
1807
1807
  qo('globalThis["__NEEDLE_ENGINE_VERSION__"] = "4.7.2-alpha";');
1808
1808
  qo('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');
1809
- qo('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Fri Aug 01 2025 13:02:24 GMT+0000 (Coordinated Universal Time)";');
1809
+ qo('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Fri Aug 01 2025 13:40:33 GMT+0000 (Coordinated Universal Time)";');
1810
1810
  qo('globalThis["__NEEDLE_PUBLIC_KEY__"] = "' + NEEDLE_PUBLIC_KEY + '";');
1811
- const ts = "4.7.2-alpha", Eg = "undefined", av = "Fri Aug 01 2025 13:02:24 GMT+0000 (Coordinated Universal Time)";
1811
+ const ts = "4.7.2-alpha", Eg = "undefined", av = "Fri Aug 01 2025 13:40:33 GMT+0000 (Coordinated Universal Time)";
1812
1812
  rv && console.log(`Engine version: ${ts} (generator: ${Eg})
1813
1813
  Project built at ${av}`);
1814
1814
  const hc = NEEDLE_PUBLIC_KEY, zo = "needle_isActiveInHierarchy", Ca = "builtin_components", vd = "needle_editor_guid";
@@ -41658,11 +41658,19 @@ function $I(o) {
41658
41658
  t !== null && t !== "0" && Jv((e) => {
41659
41659
  var i;
41660
41660
  if (e.domElement === o) {
41661
- const n = document.createElement("div"), s = "100px";
41662
- n.style.cssText = `position: absolute; top: 0; left: 0; width: 100%; height: 100%; backdrop-filter: blur(${s}); z-index: 10; pointer-events: none;`, e.domElement.prepend(n), (i = e.lodsManager.manager) == null || i.awaitLoading().then(() => {
41661
+ const n = document.createElement("div");
41662
+ let s = "30px";
41663
+ t.endsWith("px") && (s = t), n.style.cssText = `position: absolute; top: 0; left: 0; width: 100%; height: 100%; backdrop-filter: blur(${s}); z-index: 10; pointer-events: none;`, e.domElement.prepend(n), (i = e.lodsManager.manager) == null || i.awaitLoading({
41664
+ signal: AbortSignal.timeout(1e4)
41665
+ // Limit how long the page can be blurred
41666
+ }).catch((a) => {
41667
+ }).then(() => {
41663
41668
  const a = n.animate([
41664
- { backdropFilter: "blur(0px)" }
41665
- ], { duration: 100, easing: "ease-in" });
41669
+ {
41670
+ backdropFilter: "blur(0px)",
41671
+ opacity: 0
41672
+ }
41673
+ ], { duration: 400, easing: "ease-out" });
41666
41674
  a.onfinish = () => {
41667
41675
  n.remove();
41668
41676
  };
@@ -142,7 +142,7 @@ Open this page to get the console: `+t.toString())}const o=exports.DeviceUtiliti
142
142
  #__vconsole .vc-mask {
143
143
  overflow: hidden;
144
144
  }
145
- `,vi==null||vi.prepend(i),o===!0&&Hm()<=0&&L0(),console.log("🌵 Debug console has loaded")}},t.onerror=()=>{console.warn("🌵 Debug console failed to load."+(window.crossOriginIsolated?"This page is using cross-origin isolation, so external scripts can't be loaded.":"")),Rl=!1,qt=null},t.src="https://cdn.jsdelivr.net/npm/vconsole@3.9.1/dist/vconsole.min.js",document.body.appendChild(t)}function aC(){if(!globalThis.VConsole)return;const o=new VConsole.VConsolePlugin("needle-console","🌵 Inspect glTF"),t=()=>document.querySelector("#__vc_plug_"+o._id+" iframe");return o.on("renderTab",function(e){const i=globalThis["needle:codegen_files"];if(!i||i.length===0)return;let n=globalThis["needle:codegen_files"][0];const s=n.indexOf("?");s>-1&&(n=n.substring(0,s));const l=location.protocol+"//"+location.host+location.pathname+"/"+n,c=encodeURIComponent(l);o.fullUrl="https://viewer.needle.tools?inspect&file="+c;var h='<iframe src="" style="width: 100%; height: 99%; border: none;"></iframe>';e(h)}),o.on("show",function(){const e=t();e&&e.src!==o.fullUrl&&(e.src=o.fullUrl)}),o.on("hide",function(){const e=t();e&&(e.src="")}),o.on("addTopBar",function(e){var i=new Array;i.push({name:"Open in new window ↗",onClick:function(n){window.open(o.fullUrl,"_blank"),qt==null||qt.hide()}}),i.push({name:"Reload",onClick:function(n){const s=t();s&&(s.src=o.fullUrl)}}),i.push({name:"Fullscreen",onClick:function(n){const s=t();s.requestFullscreen?s.requestFullscreen():s.webkitRequestFullscreen instanceof Function&&s.webkitRequestFullscreen()}}),e(i)}),o}function lC(){const o=document.querySelector("#__vconsole .vc-switch");return o||null}function cC(){const o=document.querySelector("#__vconsole");return o||null}const j0=S("debugdefines");Ao('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";');Ao('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";');Ao('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";');Ao('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');Ao('globalThis["__NEEDLE_ENGINE_VERSION__"] = "4.7.2-alpha";');Ao('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');Ao('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Fri Aug 01 2025 13:02:24 GMT+0000 (Coordinated Universal Time)";');Ao('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const _n="4.7.2-alpha",Fu="undefined",tg="Fri Aug 01 2025 13:02:24 GMT+0000 (Coordinated Universal Time)";j0&&console.log(`Engine version: ${_n} (generator: ${Fu})
145
+ `,vi==null||vi.prepend(i),o===!0&&Hm()<=0&&L0(),console.log("🌵 Debug console has loaded")}},t.onerror=()=>{console.warn("🌵 Debug console failed to load."+(window.crossOriginIsolated?"This page is using cross-origin isolation, so external scripts can't be loaded.":"")),Rl=!1,qt=null},t.src="https://cdn.jsdelivr.net/npm/vconsole@3.9.1/dist/vconsole.min.js",document.body.appendChild(t)}function aC(){if(!globalThis.VConsole)return;const o=new VConsole.VConsolePlugin("needle-console","🌵 Inspect glTF"),t=()=>document.querySelector("#__vc_plug_"+o._id+" iframe");return o.on("renderTab",function(e){const i=globalThis["needle:codegen_files"];if(!i||i.length===0)return;let n=globalThis["needle:codegen_files"][0];const s=n.indexOf("?");s>-1&&(n=n.substring(0,s));const l=location.protocol+"//"+location.host+location.pathname+"/"+n,c=encodeURIComponent(l);o.fullUrl="https://viewer.needle.tools?inspect&file="+c;var h='<iframe src="" style="width: 100%; height: 99%; border: none;"></iframe>';e(h)}),o.on("show",function(){const e=t();e&&e.src!==o.fullUrl&&(e.src=o.fullUrl)}),o.on("hide",function(){const e=t();e&&(e.src="")}),o.on("addTopBar",function(e){var i=new Array;i.push({name:"Open in new window ↗",onClick:function(n){window.open(o.fullUrl,"_blank"),qt==null||qt.hide()}}),i.push({name:"Reload",onClick:function(n){const s=t();s&&(s.src=o.fullUrl)}}),i.push({name:"Fullscreen",onClick:function(n){const s=t();s.requestFullscreen?s.requestFullscreen():s.webkitRequestFullscreen instanceof Function&&s.webkitRequestFullscreen()}}),e(i)}),o}function lC(){const o=document.querySelector("#__vconsole .vc-switch");return o||null}function cC(){const o=document.querySelector("#__vconsole");return o||null}const j0=S("debugdefines");Ao('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";');Ao('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";');Ao('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";');Ao('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');Ao('globalThis["__NEEDLE_ENGINE_VERSION__"] = "4.7.2-alpha";');Ao('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');Ao('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Fri Aug 01 2025 13:40:33 GMT+0000 (Coordinated Universal Time)";');Ao('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const _n="4.7.2-alpha",Fu="undefined",tg="Fri Aug 01 2025 13:40:33 GMT+0000 (Coordinated Universal Time)";j0&&console.log(`Engine version: ${_n} (generator: ${Fu})
146
146
  Project built at ${tg}`);const ba=NEEDLE_PUBLIC_KEY,Ts="needle_isActiveInHierarchy",tr="builtin_components",cc="needle_editor_guid";function Ao(o){try{(0,eval)(o)}catch(t){j0&&console.error(t)}}let B0,m_=null;function bn(){return B0}function ig(o){if(o==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}m_!==o&&(m_=o,B0=new o)}const Si=Symbol("shadowDomOwner"),hC=S("debugpatch");function Uu(o,t,e,i){const n=hC===t;if(!e&&!i)return;const s=t+"___needle";uC(o,t,e,i);const a=Object.getOwnPropertyDescriptor(o,t),l=o[t];n&&console.log("Patch",o.constructor.name,t,a,l),a?(n&&console.log("Apply patch with existing descriptor",o.constructor.name,t,a),typeof a.value=="function"&&(o[t]=y_(a.value,o,t))):(n&&console.log("Create patch with new property",o.constructor.name,t,a),Object.defineProperty(o,t,{set:function(c){if(typeof c=="function")this[s]=y_(c,o,t);else{const h=this[s];F0(o,t,this,h,c),this[s]=c,U0(o,t,this,h,c)}},get:function(){const c=this[s];return typeof c=="function"&&c[s]?c[s]:c}}))}function dC(o,t,e){const i=ng(o,t);if(i)for(let n=i.length-1;n>=0;n--){const s=i[n];s.prefix===e&&(s.prefix=null),s.postfix===e&&(s.postfix=null),!s.prefix&&!s.postfix&&i.splice(n,1)}}const g_=Symbol("Needle:Patches:WrappedFunction");function y_(o,t,e){if(o[g_])return o;const i=function(...n){F0(t,e,this,...n);const s=o.apply(this,n);return U0(t,e,this,s,...n),s};return i[g_]=!0,i}const Rd="Needle:Patches";function im(){return globalThis[Rd]||(globalThis[Rd]=new WeakMap),globalThis[Rd]}function ng(o,t){const e=im().get(o);return e?e.get(t):null}function uC(o,t,e,i){let n=im().get(o);n||(n=new Map,im().set(o,n));let s=n.get(t);s||(s=[],n.set(t,s)),s.push({prefix:e,postfix:i})}function F0(o,t,e,...i){var s;if(!e)return;const n=ng(o,t);if(n)for(const a of n)(s=a.prefix)==null||s.call(e,...i)}function U0(o,t,e,i,...n){var a;if(!e)return;const s=ng(o,t);if(s)for(const l of s)(a=l.postfix)==null||a.call(e,i,...n)}const $a=[];function zu(o){$a.indexOf(o)===-1&&$a.push(o)}function fC(o){const t=$a.indexOf(o);t!==-1&&$a.splice(t,1)}const Va=[];function sg(o){Va.indexOf(o)===-1&&Va.push(o)}function pC(o){const t=Va.indexOf(o);t!==-1&&Va.splice(t,1)}function z0(o){globalThis.dispatchEvent(new CustomEvent("needle-xrsession-start",{detail:o}));for(let t=0;t<$a.length;t++)$a[t](o)}function N0(o){globalThis.dispatchEvent(new CustomEvent("needle-xrsession-end",{detail:o}));for(let t=0;t<Va.length;t++)Va[t](o)}const et=S("debuginput");var Nu=(o=>(o.Mouse="mouse",o.Touch="touch",o.Controller="controller",o.Hand="hand",o))(Nu||{}),Re=(o=>(o.PointerDown="pointerdown",o.PointerUp="pointerup",o.PointerMove="pointermove",o.KeyDown="keydown",o.KeyUp="keyup",o.KeyPressed="keypress",o))(Re||{});class _s extends PointerEvent{constructor(e,i,n){super(e,n);r(this,"clientZ");r(this,"deviceIndex");r(this,"origin");r(this,"source");r(this,"mode");r(this,"_ray");r(this,"space");r(this,"isClick",!1);r(this,"isDoubleClick",!1);r(this,"_used",!1);r(this,"_pointerid");r(this,"_pointerType");r(this,"_type");r(this,"metadata",{});r(this,"intersections",new Array);r(this,"_immediatePropagationStopped",!1);r(this,"_propagationStopped",!1);this.clientZ=n.clientZ,this._pointerid=n.pointerId,this._pointerType=n.pointerType,this._type=e,this.deviceIndex=n.deviceIndex,this.origin=n.origin,this.source=i,this.mode=n.mode,this._ray=n.ray,this.space=n.device}get isSpatial(){return this.mode!="screen"}get ray(){return this._ray||(this._ray=new d.Ray(this.space.worldPosition.clone(),this.space.worldForward.clone())),this._ray}set ray(e){this._ray=e}get hasRay(){return this._ray!==void 0}get used(){return this._used}use(){this._used=!0}get pointerId(){return this._pointerid}get pointerType(){return this._pointerType}get type(){return this._type}get immediatePropagationStopped(){return this._immediatePropagationStopped}get propagationStopped(){return this._immediatePropagationStopped||this._propagationStopped}stopImmediatePropagation(){var e;this._immediatePropagationStopped=!0,super.stopImmediatePropagation(),(e=this.source)==null||e.stopImmediatePropagation()}stopPropagation(){var e;this._propagationStopped=!0,super.stopPropagation(),(e=this.source)==null||e.stopPropagation(),et&&console.warn("Stop propagation...",this.pointerId,this.pointerType)}}class Xl extends KeyboardEvent{constructor(e,i,n){super(e,n);r(this,"source");this.source=i}stopImmediatePropagation(){var e;super.stopImmediatePropagation(),(e=this.source)==null||e.stopImmediatePropagation()}}class mC{constructor(t){r(this,"key");r(this,"keyType");r(this,"source");this.key=t.key,this.keyType=t.type,this.source=t}}var oi=(o=>(o[o.Early=-100]="Early",o[o.Default=0]="Default",o[o.Late=100]="Late",o))(oi||{});class $0{constructor(t){r(this,"_eventListeners",{});r(this,"_doubleClickTimeThreshold",.2);r(this,"_longPressTimeThreshold",1);r(this,"_setCursorTypes",[]);r(this,"context");r(this,"_pointerDown",[!1]);r(this,"_pointerUp",[!1]);r(this,"_pointerClick",[!1]);r(this,"_pointerDoubleClick",[!1]);r(this,"_pointerPressed",[!1]);r(this,"_pointerPositions",[new d.Vector2]);r(this,"_pointerPositionsLastFrame",[new d.Vector2]);r(this,"_pointerPositionsDelta",[new d.Vector2]);r(this,"_pointerPositionsRC",[new d.Vector2]);r(this,"_pointerPositionDown",[new d.Vector3]);r(this,"_pointerDownTime",[]);r(this,"_pointerUpTime",[]);r(this,"_pointerUpTimestamp",[]);r(this,"_pointerIds",[]);r(this,"_pointerTypes",[""]);r(this,"_mouseWheelChanged",[!1]);r(this,"_mouseWheelDeltaY",[0]);r(this,"_pointerEvent",[]);r(this,"_pointerEventsPressed",[]);r(this,"_pointerSpace",[]);r(this,"_pressedStack",new Map);r(this,"_htmlEventSource");r(this,"onLostFocus",()=>{for(const t in this.keysPressed)this.keysPressed[t].pressed=!1});r(this,"_receivedPointerMoveEventsThisFrame",new Array);r(this,"onEndOfFrame",()=>{this._receivedPointerMoveEventsThisFrame.length=0;for(let t=0;t<this._pointerUp.length;t++)this._pointerUp[t]=!1;for(let t=0;t<this._pointerDown.length;t++)this._pointerDown[t]=!1;for(let t=0;t<this._pointerClick.length;t++)this._pointerClick[t]=!1;for(let t=0;t<this._pointerDoubleClick.length;t++)this._pointerDoubleClick[t]=!1;for(const t of this._pointerPositionsDelta)t.set(0,0);for(let t=0;t<this._mouseWheelChanged.length;t++)this._mouseWheelChanged[t]=!1;for(let t=0;t<this._mouseWheelDeltaY.length;t++)this._mouseWheelDeltaY[t]=0});r(this,"onContextMenu",t=>{this.canReceiveInput(t)!==!1&&t instanceof PointerEvent&&t.pointerType});r(this,"keysPressed",{});r(this,"onKeyDown",t=>{if(et&&console.log(`key down ${t.code}, ${this.context.application.hasFocus}`,t),!this.context.application.hasFocus)return;const e=this.keysPressed[t.code];if(e&&e.pressed)return;this.keysPressed[t.code]={pressed:!0,frame:this.context.time.frameCount+1,startFrame:this.context.time.frameCount+1,key:t.key,code:t.code};const i=new Xl("keydown",t,t);this.onDispatchEvent(i)});r(this,"onKeyPressed",t=>{if(!this.context.application.hasFocus)return;const e=this.keysPressed[t.code];if(!e)return;e.pressed=!0,e.frame=this.context.time.frameCount+1;const i=new Xl("keypress",t,t);this.onDispatchEvent(i)});r(this,"onKeyUp",t=>{if(!this.context.application.hasFocus)return;const e=this.keysPressed[t.code];if(!e)return;e.pressed=!1,e.frame=this.context.time.frameCount+1;const i=new Xl("keyup",t,t);this.onDispatchEvent(i)});r(this,"onWheelWindow",t=>{document.pointerLockElement&&this.onMouseWheel(t)});r(this,"onMouseWheel",t=>{if(this.canReceiveInput(t)===!1)return;this._mouseWheelDeltaY.length<=0&&this._mouseWheelDeltaY.push(0),this._mouseWheelChanged.length<=0&&this._mouseWheelChanged.push(!1),this._mouseWheelChanged[0]=!0;const e=this._mouseWheelDeltaY[0];this._mouseWheelDeltaY[0]=e+t.deltaY});r(this,"onPointerDown",t=>{if(this.context.isInAR||this.canReceiveInput(t)===!1)return;t.target instanceof HTMLElement&&t.target.setPointerCapture(t.pointerId);const e=this.getPointerId(t);et&&Ee(`pointer down #${e}, identifier:${t.pointerId}`);const i=this.getAndUpdateSpatialObjectForScreenPosition(e,t.clientX,t.clientY),n=new _s("pointerdown",t,{origin:this,mode:"screen",deviceIndex:0,pointerId:e,button:t.button,clientX:t.clientX,clientY:t.clientY,pointerType:t.pointerType,buttonName:this.getButtonName(t),device:i,pressure:t.pressure});this.onDown(n)});r(this,"onPointerMove",t=>{if(this.context.isInAR||this._receivedPointerMoveEventsThisFrame.includes(t.pointerId))return;this._receivedPointerMoveEventsThisFrame.push(t.pointerId);let e=t.button;t.pointerType==="mouse"&&(e=this.getFirstPressedButtonForPointer(0)??0);const i=this.getPointerId(t,e);e===-1&&(e=i);const n=this.getAndUpdateSpatialObjectForScreenPosition(i,t.clientX,t.clientY),s=new _s("pointermove",t,{origin:this,mode:"screen",deviceIndex:0,pointerId:i,button:e,clientX:t.clientX,clientY:t.clientY,pointerType:t.pointerType,buttonName:this.getButtonName(t),device:n,pressure:t.pressure});this.onMove(s)});r(this,"onPointerCancel",t=>{this.context.isInAR||(et&&console.log("Pointer cancel",t),this.onPointerUp(t))});r(this,"onPointerUp",t=>{if(this.context.isInAR)return;t.target instanceof HTMLElement&&t.target.releasePointerCapture(t.pointerId);const e=this.getPointerId(t),i=new _s("pointerup",t,{origin:this,mode:"screen",deviceIndex:0,pointerId:e,button:t.button,clientX:t.clientX,clientY:t.clientY,pointerType:t.pointerType,buttonName:this.getButtonName(t),device:this.getAndUpdateSpatialObjectForScreenPosition(e,t.clientX,t.clientY),pressure:t.pressure});this.onUp(i),this._pointerIds[e]=-1,et&&console.log("ID="+e,"PointerId="+t.pointerId,"ALL:",[...this._pointerIds])});r(this,"onTouchStart",t=>{if(this.context.isInAR)for(let e=0;e<t.changedTouches.length;e++){const i=t.changedTouches[e],n=this.getPointerIndex(i.identifier),s=this.getAndUpdateSpatialObjectForScreenPosition(n,i.clientX,i.clientY),a=new _s("pointerdown",t,{origin:this,mode:"screen",deviceIndex:0,pointerId:n,button:0,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",buttonName:"unknown",device:s,pressure:i.force});this.onDown(a)}});r(this,"onTouchMove",t=>{if(this.context.isInAR)for(let e=0;e<t.changedTouches.length;e++){const i=t.changedTouches[e],n=this.getPointerIndex(i.identifier),s=this.getAndUpdateSpatialObjectForScreenPosition(n,i.clientX,i.clientY),a=new _s("pointermove",t,{origin:this,mode:"screen",deviceIndex:0,pointerId:n,button:0,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",buttonName:"unknown",device:s,pressure:i.force});this.onMove(a)}});r(this,"onTouchEnd",t=>{if(this.context.isInAR)for(let e=0;e<t.changedTouches.length;e++){const i=t.changedTouches[e],n=this.getPointerIndex(i.identifier),s=new _s("pointerup",t,{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(s),this._pointerIds[n]=-1}});r(this,"tempNearPlaneVector",new d.Vector3);r(this,"tempFarPlaneVector",new d.Vector3);r(this,"tempLookMatrix",new d.Matrix4);this.context=t,this.context.post_render_callbacks.push(this.onEndOfFrame)}addEventListener(t,e,i){if(this._eventListeners[t]||(this._eventListeners[t]=[]),!e||typeof e!="function"){console.error("Invalid call to addEventListener: callback is required and must be a function!");return}i?i={...i}:i={};let n=0;(i==null?void 0:i.queue)!=null&&(n=i.queue);const s=this._eventListeners[t],a=s.find(l=>l.priority===n);a?a.listeners.push({callback:e,options:i}):(s.push({priority:n,listeners:[{callback:e,options:i}]}),s.sort((l,c)=>l.priority-c.priority))}removeEventListener(t,e,i){if(!this._eventListeners[t]||!e)return;const n=this._eventListeners[t];if((i==null?void 0:i.queue)!=null){const s=n.find(l=>l.priority===i.queue);if(!s)return;const a=s.listeners.findIndex(l=>l.callback===e);a>=0&&s.listeners.splice(a,1)}else for(const s of n){const a=s.listeners.findIndex(l=>l.callback===e);a>=0&&s.listeners.splice(a,1)}}dispatchEvent(t){var i,n,s,a;let e=!1;if(t instanceof Xl){const l=this._eventListeners[t.type];if(l)for(const c of l)for(let h=0;h<c.listeners.length;h++){const u=c.listeners[h];if((n=(i=u.options)==null?void 0:i.signal)!=null&&n.aborted){c.listeners.splice(h,1),h--;continue}u.options.once&&(c.listeners.splice(h,1),h--),u.callback(t)}}if(t instanceof _s){const l=this._eventListeners[t.type];if(l)for(const c of l){if(e)break;for(let h=0;h<c.listeners.length;h++){const u=c.listeners[h];if((a=(s=u.options)==null?void 0:s.signal)!=null&&a.aborted){c.listeners.splice(h,1),h--;continue}if(t.immediatePropagationStopped){e=!0,et&&console.log("immediatePropagationStopped",t.type);break}else t.propagationStopped&&(e=!0,et&&console.log("propagationStopped",t.type));u.options.once&&(c.listeners.splice(h,1),h--),u.callback(t)}}}}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(t=0){return typeof navigator<"u"&&"getGamepads"in navigator&&navigator.getGamepads()[t]||null}setCursorPointer(){this.setCursor("pointer")}setCursorNormal(){this.unsetCursor("pointer")}setCursor(t){this._setCursorTypes.push(t),this._setCursorTypes.length>10&&this._setCursorTypes.shift(),this.updateCursor()}unsetCursor(t){for(let e=this._setCursorTypes.length-1;e>=0;e--)if(this._setCursorTypes[e]===t){this._setCursorTypes.splice(e,1),this.updateCursor();break}}updateCursor(){var t;((t=this._setCursorTypes)==null?void 0:t.length)==0?this.context.domElement.style.cursor="default":this.context.domElement.style.cursor=this._setCursorTypes[this._setCursorTypes.length-1]}getIsPointerIdInUse(t){for(const e of this._pointerEventsPressed)if(e.pointerId===t&&e.used)return!0;return!1}getPointerPressedCount(){let t=0;for(let e=0;e<this._pointerPressed.length;e++)this._pointerPressed[e]&&t++;return t}getPointerPosition(t){return t>=this._pointerPositions.length?null:this._pointerPositions[t]}getPointerPositionLastFrame(t){return t>=this._pointerPositionsLastFrame.length?null:this._pointerPositionsLastFrame[t]}getPointerPositionDelta(t){return t>=this._pointerPositionsDelta.length?null:this._pointerPositionsDelta[t]}getPointerPositionRC(t){return t>=this._pointerPositionsRC.length?null:this._pointerPositionsRC[t]}getPointerDown(t){return t>=this._pointerDown.length?!1:this._pointerDown[t]}getPointerUp(t){return t>=this._pointerUp.length?!1:this._pointerUp[t]}getPointerPressed(t){return t>=this._pointerPressed.length?!1:this._pointerPressed[t]}getPointerClicked(t){return t>=this._pointerClick.length?!1:this._pointerClick[t]}getPointerDoubleClicked(t){return t>=this._pointerDoubleClick.length?!1:this._pointerDoubleClick[t]}getPointerDownTime(t){return t>=this._pointerDownTime.length?-1:this._pointerDownTime[t]}getPointerUpTime(t){return t>=this._pointerUpTime.length?-1:this._pointerUpTime[t]}getPointerLongPress(t){return t>=this._pointerDownTime.length?!1:this.getPointerPressed(t)&&this.context.time.time-this._pointerDownTime[t]>this._longPressTimeThreshold}getIsMouse(t){return t<0||t>=this._pointerTypes.length?!1:this._pointerTypes[t]==="mouse"}getIsTouch(t){return t<0||t>=this._pointerTypes.length?!1:this._pointerTypes[t]==="touch"}getTouchesPressedCount(){let t=0;for(let e=0;e<this._pointerPressed.length;e++)this._pointerPressed[e]&&this.getIsTouch(e)&&t++;return t}getMouseWheelChanged(t=0){return t>=this._mouseWheelChanged.length?!1:this._mouseWheelChanged[t]}getMouseWheelDeltaY(t=0){return t>=this._mouseWheelDeltaY.length?0:this._mouseWheelDeltaY[t]}getPointerEvent(t){if(!(t>=this._pointerEvent.length))return this._pointerEvent[t]??void 0}*foreachPointerId(t){for(let e=0;e<this._pointerTypes.length;e++)if(this._pointerIsActive(e)){if(t!==void 0){const i=this._pointerTypes[e];if(Array.isArray(t)){let n=!1;for(const s of t)if(i===s){n=!0;break}if(!n)continue}else if(t!==i)continue}yield e}}*foreachTouchId(){for(let t=0;t<this._pointerTypes.length;t++)this._pointerTypes[t]==="touch"&&this._pointerIsActive[t]&&(yield t)}_pointerIsActive(t){return t<0?!1:this._pointerPressed[t]||this._pointerDown[t]||this._pointerUp[t]}onDownButton(t,e){let i=this._pressedStack.get(t);i||(i=[],this._pressedStack.set(t,i)),i.push(e)}onReleaseButton(t,e){const i=this._pressedStack.get(t);if(!i)return;const n=i.indexOf(e);n>=0&&i.splice(n,1)}getFirstPressedButtonForPointer(t){const e=this._pressedStack.get(t);if(e)return e[0]}getLatestPressedButtonForPointer(t){const e=this._pressedStack.get(t);if(e)return e[e.length-1]}getKeyDown(t){if(t!==void 0)return this.isKeyDown(t);for(const e in this.keysPressed){const i=this.keysPressed[e];if(i.startFrame===this.context.time.frameCount)return i.key}return null}getKeyPressed(t){if(t!==void 0)return this.isKeyPressed(t);for(const e in this.keysPressed){const i=this.keysPressed[e];if(i.pressed)return i.key}return null}getKeyUp(t){if(t!==void 0)return this.isKeyUp(t);for(const e in this.keysPressed){const i=this.keysPressed[e];return i.pressed===!1&&i.frame===this.context.time.frameCount}return null}isKeyDown(t){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;const e=this.getCodeForCommonKeyName(t);if(e!==null){for(const n of e)if(this.isKeyDown(n))return!0;return!1}const i=this.keysPressed[t];return i?i.startFrame===this.context.time.frameCount&&i.pressed:!1}isKeyUp(t){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;const e=this.getCodeForCommonKeyName(t);if(e!==null){for(const n of e)if(this.isKeyUp(n))return!0;return!1}const i=this.keysPressed[t];return i?i.frame===this.context.time.frameCount&&i.pressed===!1:!1}isKeyPressed(t){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;const e=this.getCodeForCommonKeyName(t);if(e!==null){for(const n of e)if(this.isKeyPressed(n))return!0;return!1}const i=this.keysPressed[t];return i&&i.pressed||!1}getCodeForCommonKeyName(t){if(t.length===1){if(t>="0"&&t<="9")return["Digit"+t];if(t>="a"&&t<="z")return["Key"+t.toUpperCase()];if(t==" ")return["Space"]}switch(t){case"shift":case"Shift":return["ShiftLeft","ShiftRight"];case"control":case"Control":return["ControlLeft","ControlRight"];case"alt":case"Alt":return["AltLeft","AltRight"]}return null}createInputEvent(t){switch(t.type){case"pointerdown":et&&Ee("Create Pointer down"),this.onDownButton(t.deviceIndex,t.button),this.onDown(t);break;case"pointermove":et&&Ee("Create Pointer move"),this.onMove(t);break;case"pointerup":et&&Ee("Create Pointer up"),this.onUp(t),this.onReleaseButton(t.deviceIndex,t.button);break}}convertScreenspaceToRaycastSpace(t){return t.x=(t.x-this.context.domX)/this.context.domWidth*2-1,t.y=-((t.y-this.context.domY)/this.context.domHeight)*2+1,t}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(){var t,e;window.removeEventListener("contextmenu",this.onContextMenu),(t=this._htmlEventSource)==null||t.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),(e=this._htmlEventSource)==null||e.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 t=this.context.post_render_callbacks.indexOf(this.onEndOfFrame);t>=0&&this.context.post_render_callbacks.splice(t,1),this.unbindEvents()}canReceiveInput(t){var e;return t.target===((e=this.context.renderer)==null?void 0:e.domElement)||t.target===this.context.domElement||this.context.isInAR||this.context.isInAR&&t.target===document.body&&exports.DeviceUtilities.isMozillaXR()?!0:(et&&console.warn("CanReceiveInput:False for",t.target),!1)}getPointerId(t,e){return t.pointerType==="mouse"?0+(e??t.button):this.getPointerIndex(t.pointerId)}getButtonName(t){const e=t.button;if(t.pointerType==="mouse")switch(e){case 0:return"left";case 1:return"middle";case 2:return"right"}return"unknown"}getAndUpdateSpatialObjectForScreenPosition(t,e,i){let n=this._pointerSpace[t];n||(n=new d.Object3D,this._pointerSpace[t]=n),this._pointerSpace[t]=n;const s=this.context.mainCamera;if(s){const a=this.tempNearPlaneVector.set(e,i,-1);this.convertScreenspaceToRaycastSpace(a);const l=this.tempFarPlaneVector.set(a.x,a.y,1);a.unproject(s),l.unproject(s);const c=s.worldUp||V(0,1,0).applyQuaternion(_e(s));this.tempLookMatrix.lookAt(l,a,c),n.position.set(a.x,a.y,a.z),n.quaternion.setFromRotationMatrix(this.tempLookMatrix)}return n}isInRect(t){if(this.context.isInXR)return!0;const e=this.context.domElement.getBoundingClientRect(),i=t.clientX,n=t.clientY,s=i>=e.x&&i<=e.right&&n>=e.y&&n<=e.bottom;return et&&!s&&console.log("Not in rect",e,i,n),s}onDown(t){const e=t.pointerId;if(this.getPointerPressed(e)&&console.warn(`Received pointerDown for pointerId that is already pressed: ${e}`,et?t:""),et&&console.log(t.pointerType,"DOWN",e),!!this.isInRect(t)){for(this.setPointerState(e,this._pointerPressed,!0),this.setPointerState(e,this._pointerDown,!0),this.setPointerStateT(e,this._pointerEvent,t.source);e>=this._pointerTypes.length;)this._pointerTypes.push(t.pointerType);for(this._pointerTypes[e]=t.pointerType;e>=this._pointerPositionDown.length;)this._pointerPositionDown.push(new d.Vector3);for(this._pointerPositionDown[e].set(t.clientX,t.clientY,t.clientZ??0);e>=this._pointerPositions.length;)this._pointerPositions.push(new d.Vector2);this._pointerPositions[e].set(t.clientX,t.clientY),e>=this._pointerDownTime.length&&this._pointerDownTime.push(0),this._pointerDownTime[e]=this.context.time.realtimeSinceStartup,this.updatePointerPosition(t),this._pointerEventsPressed.push(t),this.onDispatchEvent(t)}}onMove(t){const e=t.pointerId,i=this.getPointerPressed(e);i===!1&&!this.isInRect(t)||t.pointerType==="touch"&&!i||(this.updatePointerPosition(t),this.setPointerStateT(e,this._pointerEvent,t.source),this.onDispatchEvent(t))}onUp(t){const e=t.pointerId;if(!this.getPointerPressed(e)){et&&console.log(t.pointerType,"UP",e,"was not down");return}et&&console.log(t.pointerType,"UP",e),this.setPointerState(e,this._pointerPressed,!1),this.setPointerStateT(e,this._pointerEvent,t.source),this.setPointerState(e,this._pointerUp,!0),this.updatePointerPosition(t);for(let c=this._pointerEventsPressed.length-1;c>=0;c--)if(this._pointerEventsPressed[c].pointerId===e){this._pointerEventsPressed.splice(c,1);break}if(!this._pointerPositionDown[e]){et&&me("Received pointer up event without matching down event for button: "+e),console.warn("Received pointer up event without matching down event for button: "+e);return}const n=this._pointerUpTime[e],s=this._pointerDownTime[e],a=this.context.time.realtimeSinceStartup,l=a-s;if(e>=this._pointerUpTime.length&&this._pointerUpTime.push(-99),this._pointerUpTime[e]=a,l<1){let c=t.clientX-this._pointerPositionDown[e].x,h=t.clientY-this._pointerPositionDown[e].y,u=0;if(t.isSpatial&&t.clientZ!=null&&(u=t.clientZ-this._pointerPositionDown[e].z,c*=200,h*=200,u*=200),Math.abs(c)<5&&Math.abs(h)<5&&Math.abs(u)<5){this.setPointerState(e,this._pointerClick,!0),t.isClick=!0;const f=a-n;et&&console.log("CLICK",e,c,h,u,f),f<this._doubleClickTimeThreshold&&f>0&&(this.setPointerState(e,this._pointerDoubleClick,!0),t.isDoubleClick=!0)}}this.onDispatchEvent(t)}updatePointerPosition(t){const e=t.pointerId;for(;e>=this._pointerPositions.length;)this._pointerPositions.push(new d.Vector2);for(;e>=this._pointerPositionsLastFrame.length;)this._pointerPositionsLastFrame.push(new d.Vector2);for(;e>=this._pointerPositionsDelta.length;)this._pointerPositionsDelta.push(new d.Vector2);const i=this._pointerPositionsLastFrame[e];i.copy(this._pointerPositions[e]);const n=this._pointerPositionsDelta[e];let s=t.clientX-i.x,a=t.clientY-i.y;if(t.source instanceof MouseEvent||t.source instanceof TouchEvent){const u=t.source;s===0&&u.movementX!==0&&(s=u.movementX||0),a===0&&u.movementY!==0&&(a=u.movementY||0)}n.x+=s,n.y+=a,this._pointerPositions[e].x=t.clientX,this._pointerPositions[e].y=t.clientY;const l=t.clientX,c=t.clientY;for(;e>=this._pointerPositionsRC.length;)this._pointerPositionsRC.push(new d.Vector2);const h=this._pointerPositionsRC[e];h.set(l,c),this.convertScreenspaceToRaycastSpace(h)}getPointerIndex(t){let e=-1;for(let i=0;i<this._pointerIds.length;i++){if(this._pointerIds[i]===t)return i;e===-1&&this._pointerIds[i]===-1&&(e=i)}return e!==-1?(this._pointerIds[e]=t,e):(et&&console.log("PUSH pointerId:",t),this._pointerIds.push(t),this._pointerIds.length-1)}setPointerState(t,e,i){e[t]=i}setPointerStateT(t,e,i){return e[t]=i,i}onDispatchEvent(t){const e=X.Current;try{X.Current=this.context,this.dispatchEvent(t)}finally{X.Current=e}}}const Aa=new d.Matrix4().makeRotationY(Math.PI),Ni=new d.Quaternion().setFromAxisAngle(new d.Vector3(0,1,0),Math.PI),gC=S("debugwebxr");class yC{constructor(){r(this,"priority",-1e5);r(this,"gameObject");if(this.gameObject=new d.Object3D,this.gameObject.name="Implicit XR Rig",gC){const t=dg(16733661);t.position.y+=.5,this.gameObject.add(t)}}isXRRig(){return!0}get isActive(){return this.gameObject.visible}}const ds=S("debugwebxr"),Jh=S("debugcustomgesture"),_C="https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles",bC="generic-trigger",vC=new d.Quaternion().setFromEuler(new d.Euler(d.MathUtils.degToRad(0),d.MathUtils.degToRad(-90),d.MathUtils.degToRad(-90))),wC=new d.Vector3(.04,-.04,0);class og{constructor(t,e,i){r(this,"xr");r(this,"inputSource");r(this,"index",0);r(this,"emitEvents",!0);r(this,"_connected",!0);r(this,"_isTracking",!1);r(this,"__gamepad");r(this,"__hand");r(this,"__side");r(this,"_hitTestSource");r(this,"_hasSelectEvent",!1);r(this,"_isMxInk",!1);r(this,"_isMetaQuestTouchController",!1);r(this,"_handJointPoses",new Map);r(this,"_gripMatrix",new d.Matrix4);r(this,"_gripPosition",new d.Vector3);r(this,"_gripQuaternion",new d.Quaternion);r(this,"_linearVelocity",new d.Vector3);r(this,"_rayPositionRaw",new d.Vector3);r(this,"_rayRotationRaw",new d.Quaternion);r(this,"_rayMatrix",new d.Matrix4);r(this,"_rayPosition",new d.Vector3);r(this,"_rayQuaternion",new d.Quaternion);r(this,"_gripWorldPosition",new d.Vector3);r(this,"_gripWorldQuaternion",new d.Quaternion);r(this,"_rayWorldPosition",new d.Vector3);r(this,"_rayWorldQuaternion",new d.Quaternion);r(this,"_pinchPosition",new d.Vector3);r(this,"_ray");r(this,"_hand_wristDotUp");r(this,"_object");r(this,"_gripSpaceObject");r(this,"_raySpaceObject");r(this,"model",null);r(this,"_debugAxesHelper",new d.AxesHelper(.15));r(this,"_debugGripAxesHelper",new d.AxesHelper(.07));r(this,"_debugRayAxesHelper",new d.AxesHelper(.07));r(this,"_hitTestSourcePromise",null);r(this,"onPointerHits",t=>{});r(this,"_needleGamepadButtons",{});r(this,"_buttonMap",new Map);r(this,"_motioncontroller");r(this,"_layout");r(this,"getMotionController");r(this,"emitPointerDownEvent",!0);r(this,"emitPointerUpEvent",!0);r(this,"emitPointerMoveEvent",!0);r(this,"pointerMoveDistanceThreshold",.03);r(this,"pointerMoveAngleThreshold",.05);r(this,"_selectButtonIndex");r(this,"_squeezeButtonIndex");r(this,"onSelectStart",t=>{var n,s,a,l;if(!this.emitPointerDownEvent||this.inputSource!==t.inputSource)return;this.onUpdateFrame(t.frame),this._hasSelectEvent=!0;const e=(n=this._layout)==null?void 0:n.selectComponentId,i=(l=(a=(s=this._layout)==null?void 0:s.components[e])==null?void 0:a.gamepadIndices)==null?void 0:l.button;i!==void 0&&(this._selectButtonIndex=i),!Jh&&(ds&&$.DrawDirection(this.rayWorldPosition,V(0,.01,1).applyQuaternion(this.rayWorldQuaternion),16711680,10),this.emitPointerEvent(Re.PointerDown,this._selectButtonIndex||0,"xr-standard-trigger",!0,t))});r(this,"onSelectEnd",t=>{this.emitPointerUpEvent&&(Jh||this.inputSource===t.inputSource&&this.emitPointerEvent(Re.PointerUp,this._selectButtonIndex||0,"xr-standard-trigger",!0,t))});r(this,"onSequeezeStart",t=>{var e,i,n;this.emitPointerDownEvent&&this.inputSource===t.inputSource&&(this._squeezeButtonIndex=(n=(i=(e=this._layout)==null?void 0:e.components["xr-standard-squeeze"])==null?void 0:i.gamepadIndices)==null?void 0:n.button,this._squeezeButtonIndex!==void 0&&(ds&&$.DrawDirection(this.rayWorldPosition,V(0,.01,1).applyQuaternion(this.rayWorldQuaternion),255,10),this.emitPointerEvent(Re.PointerDown,this._squeezeButtonIndex||0,"xr-standard-squeeze",!0,t)))});r(this,"onSequeezeEnd",t=>{this.emitPointerUpEvent&&this.inputSource===t.inputSource&&this._squeezeButtonIndex!==void 0&&this.emitPointerEvent(Re.PointerUp,this._squeezeButtonIndex||0,"xr-standard-squeeze",!0,t)});r(this,"states",{});r(this,"_didMoveLastFrame",!1);r(this,"_lastPointerMovePosition",new d.Vector3);r(this,"_lastPointerMoveQuaternion",new d.Quaternion);r(this,"pointerInit");this.xr=t,this.inputSource=e,this.index=i,this._object=new d.Object3D,this._object.name=`NeedleXRController_${i}`,ds&&(this._object.add(this._debugAxesHelper),this._gripSpaceObject=new d.Object3D,this._raySpaceObject=new d.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 d.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()}get context(){return this.xr.context}get connected(){return this._connected}get isTracking(){return this._isTracking}get gamepad(){return this.__gamepad??(this.__gamepad=this.inputSource.gamepad)}get isHand(){return this.hand!=null}get hand(){return this.__hand??(this.__hand=this.inputSource.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.__side=this.inputSource.handedness)}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)}get hasSelectEvent(){return this._hasSelectEvent}getHitTest(){return this.xr.getHitTest(this)}getHandJointPose(t,e){var n;if(e=e||this.xr.frame,!this.hand||!(e!=null&&e.getJointPose)||!this.xr.referenceSpace)return null;let i=(n=this._handJointPoses)==null?void 0:n.get(t);return i||(i=e.getJointPose(t,this.xr.referenceSpace),i&&this._handJointPoses.set(t,i),i)}get gripPosition(){return V(this._gripPosition)}get gripQuaternion(){return un(this._gripQuaternion)}get gripMatrix(){return this._gripMatrix}get gripLinearVelocity(){return V(this._linearVelocity).applyQuaternion(Ni)}get rayPosition(){return V(this._rayPosition)}get rayQuaternion(){return un(this._rayQuaternion)}get gripWorldPosition(){return V(this._gripWorldPosition)}get gripWorldQuaternion(){return un(this._gripWorldQuaternion)}get rayWorldPosition(){return V(this._rayWorldPosition)}updateRayWorldPosition(){var e;const t=(e=this.xr.context.mainCamera)==null?void 0:e.parent;this._rayWorldPosition.copy(this._rayPositionRaw),t&&this._rayWorldPosition.applyMatrix4(t.matrixWorld)}get rayWorldQuaternion(){return un(this._rayWorldQuaternion)}get pinchPosition(){return V(this._pinchPosition)}updateRayWorldQuaternion(){var i;const t=(i=this.xr.context.mainCamera)==null?void 0:i.parent,e=t?_e(t):void 0;this._rayWorldQuaternion.copy(this._rayRotationRaw).multiply(Ni),e&&this._rayWorldQuaternion.premultiply(e)}get ray(){return this._ray.origin.copy(this.rayWorldPosition),this._ray.direction.copy(V(0,0,1).applyQuaternion(this.rayWorldQuaternion)),this._ray}get handWristDotUp(){var e;if(this._hand_wristDotUp!==void 0)return this._hand_wristDotUp;const t=(e=this.handObject)==null?void 0:e.joints.wrist;if(t){const i=V(0,1,0).applyQuaternion(t.quaternion),n=V(0,1,0).dot(i);return this._hand_wristDotUp=n}}get isHandUpsideDown(){return this.handWristDotUp!==void 0?this.handWristDotUp<-.7:!1}get isTeleportGesture(){var t;return this.isHandUpsideDown&&((t=this.getGesture("pinch"))==null?void 0:t.isDown)}get object(){return this._object}async getModelUrl(){var t;return(t=this.getMotionController)==null?void 0:t.then(e=>(e==null?void 0:e.assetUrl)||null)}_requestHitTestSource(){var t;return this._hitTestSourcePromise?this._hitTestSourcePromise:this.xr.mode==="immersive-ar"&&this.inputSource.targetRayMode==="tracked-pointer"&&this.xr.session.requestHitTestSourceForTransientInput?this._hitTestSourcePromise=((t=this.xr.session.requestHitTestSourceForTransientInput({profile:this.inputSource.profiles[0],offsetRay:new XRRay}))==null?void 0:t.then(e=>(this._hitTestSourcePromise=null,this.connected?this._hitTestSource=e:(e.cancel(),null))))??null:null}onUpdate(t){this.onUpdateFrame(t),this.updateInputEvents(),this.onUpdateMove()}onRenderDebug(){var s;$.DrawSphere(this.rayWorldPosition,.003),$.DrawDirection(this.rayWorldPosition,V(0,0,10).applyQuaternion(this.rayWorldQuaternion));const e=(this.inputSource.gripSpace?this.gripWorldPosition:this.object.worldPosition).sub(this.object.worldForward.multiplyScalar(.1)),i=this.inputSource.profiles.join(`
147
147
  `);let n=`Controller[${this.index}] (${this.inputSource.targetRayMode}, ${this.side})
148
148
  C:${this.connected?"x":"-"} T:${this.isTracking?"x":"-"} Hand:${this.inputSource.hand?"x":"-"} Pen: ${this._isMxInk?"x":"-"}`;if(this.inputSource.hand&&(n+=`
@@ -1569,7 +1569,7 @@ Needle Engine: Begin loading `+i+`
1569
1569
  `,e),this.onBeforeBeginLoading();const l=[],c={context:this._context,name:"",progress:{},index:0,count:e.length,totalProgress01:this._loadingProgress01},h=new CustomEvent("progress",{detail:c}),u=new Array,f=new AbortController;this._abortController=f;const p={files:e,abortSignal:f.signal,onLoadingProgress:v=>{var x;if(Ce&&console.debug("Loading progress: ",v),f.signal.aborted)return;const w=v.index;!u[w]&&v.name&&(u[w]=ZE(v.name)),v.name=u[w],a&&((x=this._loadingView)==null||x.onLoadingUpdate(v)),c.name=v.name,c.progress=v.progress,this._loadingProgress01=Yy(v),c.totalProgress01=this._loadingProgress01,this.dispatchEvent(h)},onLoadingFinished:(v,w,x)=>{Ce&&console.debug(`Finished loading "${w}" (aborted? ${f.signal.aborted})`),!f.signal.aborted&&x&&l.push({src:w,file:x})}};JE(this);const g=this.getAttribute("hash");g!=null&&(this._context.hash=g),this._context.alias=n,this._createContextPromise=this._context.create(p);const y=await this._createContextPromise;if(this.applyAttributes(),Ce&&console.warn(`--------------
1570
1570
  Needle Engine: finished loading `+i+`
1571
1571
  `,e,`Aborted? ${f.signal.aborted}`),f.signal.aborted){console.log("Loading finished but aborted...");return}if(this._loadId!==i){console.log("Load id changed during loading process");return}this._loadingProgress01=1,a&&y&&((_=this._loadingView)==null||_.onLoadingUpdate(1,"creating scene")),this._didFullyLoad=!0,this.classList.remove("loading"),this.classList.add("loading-finished"),this.dispatchEvent(new CustomEvent("loadfinished",{detail:{context:this._context,src:n,loadedFiles:l}}))}applyAttributes(){var n,s;if((n=this._context)!=null&&n.renderer){const a=qv(this.toneMapping);a!==void 0&&(this._context.renderer.toneMapping=a);const l=this.getAttribute("tone-mapping-exposure");if(l!=null){const c=parseFloat(l);isNaN(c)||(this._context.renderer.toneMappingExposure=c)}}const e=this.getAttribute("background-blurriness");if(e!=null){const a=parseFloat(e);a!==void 0&&this._context&&(this._context.scene.backgroundBlurriness=a)}const i=this.getAttribute("background-color");if((s=this._context)!=null&&s.renderer&&typeof i=="string"&&i.length>0){const a=ie.fromColorRepresentation(i);Ce&&console.debug("<needle-engine> background-color changed, str:",i,"→",a),this._context.renderer.setClearColor(a,a.alpha),this.context.scene.background=null}}getSourceFiles(){const e=this.getAttribute("src");if(!e)return[];let i;Array.isArray(e)?i=e:e.startsWith("[")&&e.endsWith("]")?i=JSON.parse(e):e.includes(",")?i=e.split(","):i=[e];for(let n=i.length-1;n>=0;n--){const s=i[n];(s==="null"||s==="undefined"||(s==null?void 0:s.length)<=0)&&i.splice(n,1)}return i}checkIfSourceHasChanged(e,i){if((e==null?void 0:e.length)!==(i==null?void 0:i.length)||e==null&&i!==null||e!==null&&i==null)return!0;if(e!==null&&i!==null){for(let n=0;n<(e==null?void 0:e.length);n++)if(e[n]!==i[n])return!0}return!1}ensureLoadStartIsRegistered(){const e=this.getAttribute("loadstart");e&&this.registerEventFromAttribute("loadstart",e)}registerEventFromAttribute(e,i){const n=this._previouslyRegisteredMap.get(e);if(n&&(this._previouslyRegisteredMap.delete(e),this.removeEventListener(e,n)),typeof i=="string"&&i.length>0)try{const s=(0,eval)(i);typeof s=="function"&&(this._previouslyRegisteredMap.set(e,s),this.addEventListener(e,a=>s==null?void 0:s.call(globalThis,this._context,a)))}catch(s){console.error("Error registering event "+e+'="'+i+`" failed with the following error:
1572
- `,s)}}setPublicKey(){ba&&ba.length>0&&this.setAttribute("public-key",ba)}setVersion(){_n.length>0&&this.setAttribute("version",_n)}getAROverlayContainer(){return this._overlay_ar.createOverlayContainer(this)}getVROverlayContainer(){for(let e=0;e<this.children.length;e++){const i=this.children[e];if(i.classList.contains("vr"))return i}return null}onEnterAR(e){var n;this.onSetupAR();const i=this.getAROverlayContainer();this._overlay_ar.onBegin(this._context,i,e),this.dispatchEvent(new CustomEvent("enter-ar",{detail:{session:e,context:this._context,htmlContainer:(n=this._overlay_ar)==null?void 0:n.ARContainer}}))}onExitAR(e){var i;this._overlay_ar.onEnd(this._context),this.onSetupDesktop(),this.dispatchEvent(new CustomEvent("exit-ar",{detail:{session:e,context:this._context,htmlContainer:(i=this._overlay_ar)==null?void 0:i.ARContainer}}))}onEnterVR(e){this.onSetupVR(),this.dispatchEvent(new CustomEvent("enter-vr",{detail:{session:e,context:this._context}}))}onExitVR(e){this.onSetupDesktop(),this.dispatchEvent(new CustomEvent("exit-vr",{detail:{session:e,context:this._context}}))}onSetupAR(){this.classList.add(Wl),this.classList.remove(Gl);const e=this.getAROverlayContainer();Ce&&console.warn("onSetupAR:",e),e&&(e.classList.add(Wl),e.classList.remove(Gl)),this.foreachHtmlElement(i=>this.setupElementsForMode(i,Bx))}onSetupVR(){this.classList.remove(Wl),this.classList.remove(Gl),this.foreachHtmlElement(e=>this.setupElementsForMode(e,Fx))}onSetupDesktop(){this.classList.remove(Wl),this.classList.add(Gl);const e=this.getAROverlayContainer();e&&(e.classList.remove(Wl),e.classList.add(Gl)),this.foreachHtmlElement(i=>this.setupElementsForMode(i,Ux))}setupElementsForMode(e,i,n=null){var a,l;if(e===((l=(a=this._context)==null?void 0:a.renderer)==null?void 0:l.domElement)||e.id==="VRButton"||e.id==="ARButton")return;if(e.classList.contains(i))e.style.visibility="visible",e.style.display==="none"&&(e.style.display="block");else for(const c of YE)e.classList.contains(c)&&(e.style.visibility="hidden",e.style.display="none")}foreachHtmlElement(e){for(let i=0;i<this.children.length;i++){const n=this.children[i];n.style&&e(n)}}onBeforeBeginLoading(){const e=this.getAttribute("dracoDecoderPath");e&&(Ce&&console.log("using custom draco decoder path",e),J_(e));const i=this.getAttribute("dracoDecoderType");i&&(Ce&&console.log("using custom draco decoder type",i),eb(i));const n=this.getAttribute("ktx2DecoderPath");n&&(Ce&&console.log("using custom ktx2 decoder path",n),tb(n))}}typeof window<"u"&&!window.customElements.get(Zb)&&window.customElements.define(Zb,Ky);function ZE(o){if(o.startsWith("blob:"))return"blob";const t=o.split("/");let e=t[t.length-1];const i=e.indexOf("?");i>0&&(e=e.substring(0,i));const n=e.indexOf("=");n>0&&(e=e.substring(n));const s=e.split(".").pop(),l=s?["glb","gltf","usdz","usd","fbx","obj","mtl"].indexOf(s.toLowerCase()):-1;if(s&&l>=0&&(e=e.substring(0,e.length-s.length-1)),e=decodeURIComponent(e),e.length>3){let c="",h=!1;const u=["(",")","[","]","{","}",":",";",",",".","!","?"];for(let f=0;f<e.length;f++){let p=e[f];(p==="_"||p==="-")&&(p=" "),!(p===" "&&c.length<=0||u.includes(p)||(c.length===0&&(p=p.toUpperCase()),h&&p===" "))&&(h&&(p=p.toUpperCase()),h=!1,c+=p,p===" "&&(h=!0))}return j()&&e!==c&&console.debug('Generated display name: "'+e+'" → "'+c+'"'),c.trim()}return j()&&console.debug("Loading: use default name",e),e}function JE(o){const t=o.getAttribute("loading-blur");t!==null&&t!=="0"&&Mg(e=>{var i;if(e.domElement===o){const n=document.createElement("div"),s="100px";n.style.cssText=`position: absolute; top: 0; left: 0; width: 100%; height: 100%; backdrop-filter: blur(${s}); z-index: 10; pointer-events: none;`,e.domElement.prepend(n),(i=e.lodsManager.manager)==null||i.awaitLoading().then(()=>{const a=n.animate([{backdropFilter:"blur(0px)"}],{duration:100,easing:"ease-in"});a.onfinish=()=>{n.remove()}})}},{once:!0})}const eT=Object.freeze(Object.defineProperty({__proto__:null,NeedleEngineWebComponent:Ky},Symbol.toStringTag,{value:"Module"}));function tT(){vn.registerWaitForInteraction(()=>{const o=d.AudioContext.getContext();o.addEventListener("statechange",()=>{setTimeout(()=>{const t=o.state;(t==="suspended"||t==="interrupted")&&o.resume().then(()=>{console.log("AudioContext resumed successfully")}).catch(e=>{console.log("Failed to resume AudioContext: "+e)})},500)})})}setTimeout(tT,1e3);const Qe=S("debugphysics"),Vp=S("debugcolliderplacement"),Wp=S("debugcollisions"),iT=S("showcolliders"),Gp=S("debugraycasts"),ti=Symbol("needle component"),zt=Symbol("physics body"),Jb=Symbol("rigidbody");globalThis.NEEDLE_USE_RAPIER=globalThis.NEEDLE_USE_RAPIER!==void 0?globalThis.NEEDLE_USE_RAPIER:!0;Qe&&console.log("Use Rapier",!0,globalThis.NEEDLE_USE_RAPIER);re.registerCallback(he.ContextCreationStart,o=>{Qe&&console.log("Register rapier physics backend"),o.context.physics.engine=new Mu(o.context)});const bs=class bs{constructor(t){r(this,"debugRenderColliders",!1);r(this,"debugRenderRaycasts",!1);r(this,"context");r(this,"_initializePromise");r(this,"_isInitialized",!1);r(this,"rapierRay");r(this,"raycastVectorsBuffer",new ki(()=>new d.Vector3,10));r(this,"rapierSphere",null);r(this,"rapierColliderArray",[]);r(this,"rapierIdentityRotation",{x:0,y:0,z:0,w:1});r(this,"rapierForwardVector",{x:0,y:0,z:1});r(this,"enabled",!1);r(this,"_tempPosition",new d.Vector3);r(this,"_tempQuaternion",new d.Quaternion);r(this,"_tempScale",new d.Vector3);r(this,"_tempMatrix",new d.Matrix4);r(this,"_isUpdatingPhysicsWorld",!1);r(this,"_world");r(this,"_hasCreatedWorld",!1);r(this,"eventQueue");r(this,"collisionHandler");r(this,"objects",[]);r(this,"bodies",[]);r(this,"_meshCache",new Map);r(this,"_gravity",{x:0,y:-9.81,z:0});r(this,"lines");r(this,"_tempCenterPos",new d.Vector3);r(this,"_tempCenterVec",new d.Vector3);r(this,"_tempCenterQuaternion",new d.Quaternion);this.context=t}removeBody(t){var i,n,s;if(!t)return;this.validate();const e=t[zt];if(t[zt]=null,e&&this.world){const a=this.objects.findIndex(l=>l===t);if(a>=0){const l=this.bodies[a];if(this.bodies.splice(a,1),this.objects.splice(a,1),l instanceof exports.MODULES.RAPIER_PHYSICS.MODULE.Collider){const c=l;(i=this.world)==null||i.removeCollider(c,!0);const h=c.parent();h&&h.numColliders()<=0&&(h[ti]||(n=this.world)==null||n.removeRigidBody(h))}else l instanceof exports.MODULES.RAPIER_PHYSICS.MODULE.RigidBody&&(l.numColliders()<=0?(s=this.world)==null||s.removeRigidBody(l):j()&&(l.did_log_removing||setTimeout(()=>{l.numColliders()>0&&(l.did_log_removing=!0,console.warn("RapierPhysics: removing rigidbody with colliders from the physics world is not possible right now, please remove the colliders first"))},1)))}}}updateBody(t,e,i){if(this.validate(),!!this.enabled&&!(t.destroyed||!t.gameObject)&&!(!e&&!i))if(t.isCollider===!0)console.warn("TODO: implement updating collider position");else{const n=t,s=n[zt];s&&this.syncPhysicsBody(n.gameObject,s,e,i)}}updateProperties(t){if(this.validate(),t.isCollider){const e=t,i=e[zt];i&&(this.internalUpdateColliderProperties(e,i),e.sharedMaterial&&this.updatePhysicsMaterial(e))}else{const e=t,i=this.internal_getRigidbody(e);i&&this.internalUpdateRigidbodyProperties(e,i)}}addForce(t,e,i){this.validate();const n=this.internal_getRigidbody(t);n?n.addForce(e,i):console.warn("Rigidbody doesn't exist: can not apply force (does your object with the Rigidbody have a collider?)")}addImpulse(t,e,i){this.validate();const n=this.internal_getRigidbody(t);n?n.applyImpulse(e,i):console.warn("Rigidbody doesn't exist: can not apply impulse (does your object with the Rigidbody have a collider?)")}getLinearVelocity(t){this.validate();const e=this.internal_getRigidbody(t);return e?e.linvel():null}getAngularVelocity(t){this.validate();const e=this.internal_getRigidbody(t);return e?e.angvel():null}resetForces(t,e){this.validate();const i=this.internal_getRigidbody(t);i==null||i.resetForces(e)}resetTorques(t,e){this.validate();const i=this.internal_getRigidbody(t);i==null||i.resetTorques(e)}applyImpulse(t,e,i){this.validate();const n=this.internal_getRigidbody(t);n?n.applyImpulse(e,i):console.warn("Rigidbody doesn't exist: can not apply impulse (does your object with the Rigidbody have a collider?)")}wakeup(t){this.validate();const e=this.internal_getRigidbody(t);e?e.wakeUp():console.warn("Rigidbody doesn't exist: can not wake up (does your object with the Rigidbody have a collider?)")}isSleeping(t){this.validate();const e=this.internal_getRigidbody(t);return e==null?void 0:e.isSleeping()}setAngularVelocity(t,e,i){this.validate();const n=this.internal_getRigidbody(t);n?n.setAngvel(e,i):console.warn("Rigidbody doesn't exist: can not set angular velocity (does your object with the Rigidbody have a collider?)")}setLinearVelocity(t,e,i){this.validate();const n=this.internal_getRigidbody(t);n?n.setLinvel(e,i):console.warn("Rigidbody doesn't exist: can not set linear velocity (does your object with the Rigidbody have a collider?)")}get isInitialized(){return this._isInitialized}async initialize(){return this._initializePromise||(this._initializePromise=this.internalInitialization()),this._initializePromise}async internalInitialization(){return S("__nophysics")?(console.warn("Physics are disabled"),!1):(Qe&&console.log("Initialize rapier physics engine"),this._hasCreatedWorld?(console.error("Invalid call to create physics world: world is already created"),!0):(this._hasCreatedWorld=!0,exports.MODULES.RAPIER_PHYSICS.MAYBEMODULE==null&&(Qe&&console.trace("Loading rapier physics engine"),await(await exports.MODULES.RAPIER_PHYSICS.load()).init()),Qe&&console.log("Physics engine initialized, creating world..."),this._world=new exports.MODULES.RAPIER_PHYSICS.MODULE.World(this._gravity),this.rapierRay=new exports.MODULES.RAPIER_PHYSICS.MODULE.Ray({x:0,y:0,z:0},{x:0,y:0,z:1}),this.enabled=!0,this._isInitialized=!0,Qe&&console.log("Physics world created"),!0))}validate(){this._isInitialized||Qe&&(this._lastWarnTime=this._lastWarnTime??0,Date.now()-this._lastWarnTime>1e3&&(this._lastWarnTime=Date.now(),console.warn("Physics engine is not initialized")))}raycast(t,e,i){var c;if(!this._isInitialized)return console.log("Physics engine is not initialized"),null;let n=i==null?void 0:i.maxDistance,s=i==null?void 0:i.solid;n===void 0&&(n=1/0),s===void 0&&(s=!0);const a=this.getPhysicsRay(this.rapierRay,t,e);if(!a)return null;(this.debugRenderRaycasts||Gp)&&$.DrawRay(a.origin,a.dir,255,1);const l=(c=this.world)==null?void 0:c.castRay(a,n,s,i==null?void 0:i.queryFilterFlags,i==null?void 0:i.filterGroups,void 0,void 0,h=>{const u=h[ti];return i!=null&&i.filterPredicate?i.filterPredicate(u):(i==null?void 0:i.useIgnoreRaycastLayer)!==!1?!(u!=null&&u.gameObject.layers.isEnabled(2)):!0});if(l){const h=a.pointAt(l.timeOfImpact),u=this.raycastVectorsBuffer.get();return u.set(h.x,h.y,h.z),{point:u,collider:l.collider[ti]}}return null}raycastAndGetNormal(t,e,i){var c;if(!this._isInitialized)return null;let n=i==null?void 0:i.maxDistance,s=i==null?void 0:i.solid;n===void 0&&(n=1/0),s===void 0&&(s=!0);const a=this.getPhysicsRay(this.rapierRay,t,e);if(!a)return null;(this.debugRenderRaycasts||Gp)&&$.DrawRay(a.origin,a.dir,255,1);const l=(c=this.world)==null?void 0:c.castRayAndGetNormal(a,n,s,i==null?void 0:i.queryFilterFlags,i==null?void 0:i.filterGroups,void 0,void 0,h=>{const u=h[ti];return i!=null&&i.filterPredicate?i.filterPredicate(u):(i==null?void 0:i.useIgnoreRaycastLayer)!==!1?!(u!=null&&u.gameObject.layers.isEnabled(2)):!0});if(l){const h=a.pointAt(l.timeOfImpact),u=l.normal,f=this.raycastVectorsBuffer.get(),p=this.raycastVectorsBuffer.get();return f.set(h.x,h.y,h.z),p.set(u.x,u.y,u.z),{point:f,normal:p,collider:l.collider[ti]}}return null}getPhysicsRay(t,e,i){var l,c,h;const n=(l=this.context)==null?void 0:l.mainCamera;if(e===void 0){const u=(c=this.context)==null?void 0:c.input.getPointerPosition(0);if(u)e=u;else return null}if(e.z===void 0){if(!n)return console.error("Can not perform raycast from 2d point - no main camera found"),null;const u=this.raycastVectorsBuffer.get();u.x=e.x,u.y=e.y,u.z=0,(u.x>1||u.y>1||u.y<-1||u.x<-1)&&(Qe&&console.warn("Converting screenspace to raycast space",u),(h=this.context)==null||h.input.convertScreenspaceToRaycastSpace(u)),u.unproject(n),e=u}const s=e;t.origin.x=s.x,t.origin.y=s.y,t.origin.z=s.z;const a=this.raycastVectorsBuffer.get();if(i)a.set(i.x,i.y,i.z);else{if(!n)return console.error("Can not perform raycast - no camera found"),null;a.set(t.origin.x,t.origin.y,t.origin.z);const u=Q(n);a.sub(u)}return a.normalize(),t.dir.x=a.x,t.dir.y=a.y,t.dir.z=a.z,t}sphereOverlap(t,e){return this.rapierColliderArray.length=0,this._isInitialized?this.world?(this.rapierSphere??(this.rapierSphere=new exports.MODULES.RAPIER_PHYSICS.MODULE.Ball(e)),this.rapierSphere.radius=e,(this.debugRenderRaycasts||Gp)&&$.DrawWireSphere(t,e,3359999,1),this.world.intersectionsWithShape(t,this.rapierIdentityRotation,this.rapierSphere,i=>{const n=i[ti],s=new gw(n.gameObject,n);return this.rapierColliderArray.push(s),!0},void 0,void 0,void 0,void 0,i=>i.isSensor()?!1:i[ti].gameObject.layers.isEnabled(2)==!1),this.rapierColliderArray):this.rapierColliderArray:this.rapierColliderArray}get world(){return this._world}get isUpdating(){return this._isUpdatingPhysicsWorld}get gravity(){var t;return((t=this.world)==null?void 0:t.gravity)??this._gravity}set gravity(t){this.world?this.world.gravity=t:this._gravity=t}clearCaches(){var t,e,i,n;this._meshCache.clear(),(t=this.eventQueue)!=null&&t.raw&&((e=this.eventQueue)==null||e.free()),(i=this.world)!=null&&i.bodies&&((n=this.world)==null||n.free())}async addBoxCollider(t,e){if(this._isInitialized||await this.initialize(),!t.activeAndEnabled)return;if(!this.enabled){Qe&&console.warn("Physics are disabled");return}const i=t.gameObject,n=Ue(i,this._tempPosition).multiply(e);n.multiplyScalar(.5),n.x<0&&(n.x=Math.abs(n.x)),n.y<0&&(n.y=Math.abs(n.y)),n.z<0&&(n.z=Math.abs(n.z));const s=1e-7;n.x<s&&(n.x=s),n.y<s&&(n.y=s),n.z<s&&(n.z=s);const a=exports.MODULES.RAPIER_PHYSICS.MODULE.ColliderDesc.cuboid(n.x,n.y,n.z);this.createCollider(t,a)}async addSphereCollider(t){if(this._isInitialized||await this.initialize(),!t.activeAndEnabled)return;if(!this.enabled){Qe&&console.warn("Physics are disabled");return}const e=exports.MODULES.RAPIER_PHYSICS.MODULE.ColliderDesc.ball(.5);this.createCollider(t,e),this.updateProperties(t)}async addCapsuleCollider(t,e,i){if(this._isInitialized||await this.initialize(),!t.activeAndEnabled)return;if(!this.enabled){Qe&&console.warn("Physics are disabled");return}const n=t.gameObject,s=Ue(n,this._tempPosition);s.x=Math.abs(s.x),s.y=Math.abs(s.y);const a=i*s.x;e=Math.max(e,a*2);const l=z.clamp(e*.5*s.y-i*s.x,0,Number.MAX_SAFE_INTEGER),c=exports.MODULES.RAPIER_PHYSICS.MODULE.ColliderDesc.capsule(l,a);this.createCollider(t,c)}async addMeshCollider(t,e,i,n){var f,p,g;let s=e.geometry;if(!s){Qe&&console.warn("Missing mesh geometry",e.name);return}(p=(f=s.index)==null?void 0:f.array)!=null&&p.length||(console.warn(`Your MeshCollider is missing vertices or indices in the assined mesh "${e.name}". Consider providing an indexed geometry.`),s=H.mergeVertices(s));let a=null;const l=s.getAttribute("position");if(l instanceof d.InterleavedBufferAttribute){const y=l.count;a=new Float32Array(y*3);for(let b=0;b<y;b++){const _=l.getX(b),v=l.getY(b),w=l.getZ(b);a[b*3]=_,a[b*3+1]=v,a[b*3+2]=w}}else a=l.array;if(await this.initialize(),!this.enabled){Qe&&console.warn("Physics are disabled");return}if(!t.activeAndEnabled)return;const c=(g=s.index)==null?void 0:g.array,h=t.gameObject.worldScale.clone();if(n&&h.multiply(n),Math.abs(h.x-1)>1e-4||Math.abs(h.y-1)>1e-4||Math.abs(h.z-1)>1e-4){const y=`${s.uuid}_${h.x}_${h.y}_${h.z}_${i}`;if(this._meshCache.has(y))Qe&&console.warn("Use cached mesh collider"),a=this._meshCache.get(y);else{(Qe||j())&&console.debug(`[Performance] Your MeshCollider "${t.name}" is scaled: consider applying the scale to the collider mesh instead (${h.x}, ${h.y}, ${h.z})`);const b=new Float32Array(a.length);for(let _=0;_<a.length;_+=3)b[_]=a[_]*h.x,b[_+1]=a[_+1]*h.y,b[_+2]=a[_+2]*h.z;a=b,this._meshCache.set(y,b)}}const u=i?exports.MODULES.RAPIER_PHYSICS.MODULE.ColliderDesc.convexHull(a):exports.MODULES.RAPIER_PHYSICS.MODULE.ColliderDesc.trimesh(a,c);u&&this.createCollider(t,u)}updatePhysicsMaterial(t){if(!t)return;const e=t.sharedMaterial,i=t[zt];if(i&&e){if(e.bounciness!==void 0&&i.setRestitution(e.bounciness),e.bounceCombine!==void 0)switch(e.bounceCombine){case ht.Average:i.setRestitutionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Average);break;case ht.Maximum:i.setRestitutionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Max);break;case ht.Minimum:i.setRestitutionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Min);break;case ht.Multiply:i.setRestitutionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Multiply);break}if(e.dynamicFriction!==void 0&&i.setFriction(e.dynamicFriction),e.frictionCombine!==void 0)switch(e.frictionCombine){case ht.Average:i.setFrictionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Average);break;case ht.Maximum:i.setFrictionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Max);break;case ht.Minimum:i.setFrictionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Min);break;case ht.Multiply:i.setFrictionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Multiply);break}}}getBody(t){return t?t[zt]:null}getComponent(t){return t?t[ti]:null}createCollider(t,e){var a;if(!this.world)throw new Error("Physics world not initialized");const i=this._tempMatrix;let n;t.attachedRigidbody?n=this.getRigidbody(t,this._tempMatrix):(Qe&&console.log("Create collider without rigidbody",t.name),i.makeRotationFromQuaternion(_e(t.gameObject)),i.setPosition(Q(t.gameObject))),i.decompose(this._tempPosition,this._tempQuaternion,this._tempScale),this.tryApplyCenter(t,this._tempPosition),e.setTranslation(this._tempPosition.x,this._tempPosition.y,this._tempPosition.z),e.setRotation(this._tempQuaternion),e.setSensor(t.isTrigger);const s=t.sharedMaterial;if(s){if(s.bounciness!==void 0&&e.setRestitution(s.bounciness),s.bounceCombine!==void 0)switch(s.bounceCombine){case ht.Average:e.setRestitutionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Average);break;case ht.Maximum:e.setRestitutionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Max);break;case ht.Minimum:e.setRestitutionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Min);break;case ht.Multiply:e.setRestitutionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Multiply);break}if(s.dynamicFriction!==void 0&&e.setFriction(s.dynamicFriction),s.frictionCombine!==void 0)switch(s.frictionCombine){case ht.Average:e.setFrictionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Average);break;case ht.Maximum:e.setFrictionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Max);break;case ht.Minimum:e.setFrictionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Min);break;case ht.Multiply:e.setFrictionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Multiply);break}}((a=t.attachedRigidbody)==null?void 0:a.autoMass)===!1&&(e.setDensity(1e-6),e.setMass(1e-6));try{const l=this.world.createCollider(e,n);return l[ti]=t,t[zt]=l,l.setActiveEvents(exports.MODULES.RAPIER_PHYSICS.MODULE.ActiveEvents.COLLISION_EVENTS),l.setActiveCollisionTypes(exports.MODULES.RAPIER_PHYSICS.MODULE.ActiveCollisionTypes.ALL),this.objects.push(t),this.bodies.push(l),this.updateColliderCollisionGroups(t),l}catch(l){return console.error('Error creating collider "'+t.name+`"
1572
+ `,s)}}setPublicKey(){ba&&ba.length>0&&this.setAttribute("public-key",ba)}setVersion(){_n.length>0&&this.setAttribute("version",_n)}getAROverlayContainer(){return this._overlay_ar.createOverlayContainer(this)}getVROverlayContainer(){for(let e=0;e<this.children.length;e++){const i=this.children[e];if(i.classList.contains("vr"))return i}return null}onEnterAR(e){var n;this.onSetupAR();const i=this.getAROverlayContainer();this._overlay_ar.onBegin(this._context,i,e),this.dispatchEvent(new CustomEvent("enter-ar",{detail:{session:e,context:this._context,htmlContainer:(n=this._overlay_ar)==null?void 0:n.ARContainer}}))}onExitAR(e){var i;this._overlay_ar.onEnd(this._context),this.onSetupDesktop(),this.dispatchEvent(new CustomEvent("exit-ar",{detail:{session:e,context:this._context,htmlContainer:(i=this._overlay_ar)==null?void 0:i.ARContainer}}))}onEnterVR(e){this.onSetupVR(),this.dispatchEvent(new CustomEvent("enter-vr",{detail:{session:e,context:this._context}}))}onExitVR(e){this.onSetupDesktop(),this.dispatchEvent(new CustomEvent("exit-vr",{detail:{session:e,context:this._context}}))}onSetupAR(){this.classList.add(Wl),this.classList.remove(Gl);const e=this.getAROverlayContainer();Ce&&console.warn("onSetupAR:",e),e&&(e.classList.add(Wl),e.classList.remove(Gl)),this.foreachHtmlElement(i=>this.setupElementsForMode(i,Bx))}onSetupVR(){this.classList.remove(Wl),this.classList.remove(Gl),this.foreachHtmlElement(e=>this.setupElementsForMode(e,Fx))}onSetupDesktop(){this.classList.remove(Wl),this.classList.add(Gl);const e=this.getAROverlayContainer();e&&(e.classList.remove(Wl),e.classList.add(Gl)),this.foreachHtmlElement(i=>this.setupElementsForMode(i,Ux))}setupElementsForMode(e,i,n=null){var a,l;if(e===((l=(a=this._context)==null?void 0:a.renderer)==null?void 0:l.domElement)||e.id==="VRButton"||e.id==="ARButton")return;if(e.classList.contains(i))e.style.visibility="visible",e.style.display==="none"&&(e.style.display="block");else for(const c of YE)e.classList.contains(c)&&(e.style.visibility="hidden",e.style.display="none")}foreachHtmlElement(e){for(let i=0;i<this.children.length;i++){const n=this.children[i];n.style&&e(n)}}onBeforeBeginLoading(){const e=this.getAttribute("dracoDecoderPath");e&&(Ce&&console.log("using custom draco decoder path",e),J_(e));const i=this.getAttribute("dracoDecoderType");i&&(Ce&&console.log("using custom draco decoder type",i),eb(i));const n=this.getAttribute("ktx2DecoderPath");n&&(Ce&&console.log("using custom ktx2 decoder path",n),tb(n))}}typeof window<"u"&&!window.customElements.get(Zb)&&window.customElements.define(Zb,Ky);function ZE(o){if(o.startsWith("blob:"))return"blob";const t=o.split("/");let e=t[t.length-1];const i=e.indexOf("?");i>0&&(e=e.substring(0,i));const n=e.indexOf("=");n>0&&(e=e.substring(n));const s=e.split(".").pop(),l=s?["glb","gltf","usdz","usd","fbx","obj","mtl"].indexOf(s.toLowerCase()):-1;if(s&&l>=0&&(e=e.substring(0,e.length-s.length-1)),e=decodeURIComponent(e),e.length>3){let c="",h=!1;const u=["(",")","[","]","{","}",":",";",",",".","!","?"];for(let f=0;f<e.length;f++){let p=e[f];(p==="_"||p==="-")&&(p=" "),!(p===" "&&c.length<=0||u.includes(p)||(c.length===0&&(p=p.toUpperCase()),h&&p===" "))&&(h&&(p=p.toUpperCase()),h=!1,c+=p,p===" "&&(h=!0))}return j()&&e!==c&&console.debug('Generated display name: "'+e+'" → "'+c+'"'),c.trim()}return j()&&console.debug("Loading: use default name",e),e}function JE(o){const t=o.getAttribute("loading-blur");t!==null&&t!=="0"&&Mg(e=>{var i;if(e.domElement===o){const n=document.createElement("div");let s="30px";t.endsWith("px")&&(s=t),n.style.cssText=`position: absolute; top: 0; left: 0; width: 100%; height: 100%; backdrop-filter: blur(${s}); z-index: 10; pointer-events: none;`,e.domElement.prepend(n),(i=e.lodsManager.manager)==null||i.awaitLoading({signal:AbortSignal.timeout(1e4)}).catch(a=>{}).then(()=>{const a=n.animate([{backdropFilter:"blur(0px)",opacity:0}],{duration:400,easing:"ease-out"});a.onfinish=()=>{n.remove()}})}},{once:!0})}const eT=Object.freeze(Object.defineProperty({__proto__:null,NeedleEngineWebComponent:Ky},Symbol.toStringTag,{value:"Module"}));function tT(){vn.registerWaitForInteraction(()=>{const o=d.AudioContext.getContext();o.addEventListener("statechange",()=>{setTimeout(()=>{const t=o.state;(t==="suspended"||t==="interrupted")&&o.resume().then(()=>{console.log("AudioContext resumed successfully")}).catch(e=>{console.log("Failed to resume AudioContext: "+e)})},500)})})}setTimeout(tT,1e3);const Qe=S("debugphysics"),Vp=S("debugcolliderplacement"),Wp=S("debugcollisions"),iT=S("showcolliders"),Gp=S("debugraycasts"),ti=Symbol("needle component"),zt=Symbol("physics body"),Jb=Symbol("rigidbody");globalThis.NEEDLE_USE_RAPIER=globalThis.NEEDLE_USE_RAPIER!==void 0?globalThis.NEEDLE_USE_RAPIER:!0;Qe&&console.log("Use Rapier",!0,globalThis.NEEDLE_USE_RAPIER);re.registerCallback(he.ContextCreationStart,o=>{Qe&&console.log("Register rapier physics backend"),o.context.physics.engine=new Mu(o.context)});const bs=class bs{constructor(t){r(this,"debugRenderColliders",!1);r(this,"debugRenderRaycasts",!1);r(this,"context");r(this,"_initializePromise");r(this,"_isInitialized",!1);r(this,"rapierRay");r(this,"raycastVectorsBuffer",new ki(()=>new d.Vector3,10));r(this,"rapierSphere",null);r(this,"rapierColliderArray",[]);r(this,"rapierIdentityRotation",{x:0,y:0,z:0,w:1});r(this,"rapierForwardVector",{x:0,y:0,z:1});r(this,"enabled",!1);r(this,"_tempPosition",new d.Vector3);r(this,"_tempQuaternion",new d.Quaternion);r(this,"_tempScale",new d.Vector3);r(this,"_tempMatrix",new d.Matrix4);r(this,"_isUpdatingPhysicsWorld",!1);r(this,"_world");r(this,"_hasCreatedWorld",!1);r(this,"eventQueue");r(this,"collisionHandler");r(this,"objects",[]);r(this,"bodies",[]);r(this,"_meshCache",new Map);r(this,"_gravity",{x:0,y:-9.81,z:0});r(this,"lines");r(this,"_tempCenterPos",new d.Vector3);r(this,"_tempCenterVec",new d.Vector3);r(this,"_tempCenterQuaternion",new d.Quaternion);this.context=t}removeBody(t){var i,n,s;if(!t)return;this.validate();const e=t[zt];if(t[zt]=null,e&&this.world){const a=this.objects.findIndex(l=>l===t);if(a>=0){const l=this.bodies[a];if(this.bodies.splice(a,1),this.objects.splice(a,1),l instanceof exports.MODULES.RAPIER_PHYSICS.MODULE.Collider){const c=l;(i=this.world)==null||i.removeCollider(c,!0);const h=c.parent();h&&h.numColliders()<=0&&(h[ti]||(n=this.world)==null||n.removeRigidBody(h))}else l instanceof exports.MODULES.RAPIER_PHYSICS.MODULE.RigidBody&&(l.numColliders()<=0?(s=this.world)==null||s.removeRigidBody(l):j()&&(l.did_log_removing||setTimeout(()=>{l.numColliders()>0&&(l.did_log_removing=!0,console.warn("RapierPhysics: removing rigidbody with colliders from the physics world is not possible right now, please remove the colliders first"))},1)))}}}updateBody(t,e,i){if(this.validate(),!!this.enabled&&!(t.destroyed||!t.gameObject)&&!(!e&&!i))if(t.isCollider===!0)console.warn("TODO: implement updating collider position");else{const n=t,s=n[zt];s&&this.syncPhysicsBody(n.gameObject,s,e,i)}}updateProperties(t){if(this.validate(),t.isCollider){const e=t,i=e[zt];i&&(this.internalUpdateColliderProperties(e,i),e.sharedMaterial&&this.updatePhysicsMaterial(e))}else{const e=t,i=this.internal_getRigidbody(e);i&&this.internalUpdateRigidbodyProperties(e,i)}}addForce(t,e,i){this.validate();const n=this.internal_getRigidbody(t);n?n.addForce(e,i):console.warn("Rigidbody doesn't exist: can not apply force (does your object with the Rigidbody have a collider?)")}addImpulse(t,e,i){this.validate();const n=this.internal_getRigidbody(t);n?n.applyImpulse(e,i):console.warn("Rigidbody doesn't exist: can not apply impulse (does your object with the Rigidbody have a collider?)")}getLinearVelocity(t){this.validate();const e=this.internal_getRigidbody(t);return e?e.linvel():null}getAngularVelocity(t){this.validate();const e=this.internal_getRigidbody(t);return e?e.angvel():null}resetForces(t,e){this.validate();const i=this.internal_getRigidbody(t);i==null||i.resetForces(e)}resetTorques(t,e){this.validate();const i=this.internal_getRigidbody(t);i==null||i.resetTorques(e)}applyImpulse(t,e,i){this.validate();const n=this.internal_getRigidbody(t);n?n.applyImpulse(e,i):console.warn("Rigidbody doesn't exist: can not apply impulse (does your object with the Rigidbody have a collider?)")}wakeup(t){this.validate();const e=this.internal_getRigidbody(t);e?e.wakeUp():console.warn("Rigidbody doesn't exist: can not wake up (does your object with the Rigidbody have a collider?)")}isSleeping(t){this.validate();const e=this.internal_getRigidbody(t);return e==null?void 0:e.isSleeping()}setAngularVelocity(t,e,i){this.validate();const n=this.internal_getRigidbody(t);n?n.setAngvel(e,i):console.warn("Rigidbody doesn't exist: can not set angular velocity (does your object with the Rigidbody have a collider?)")}setLinearVelocity(t,e,i){this.validate();const n=this.internal_getRigidbody(t);n?n.setLinvel(e,i):console.warn("Rigidbody doesn't exist: can not set linear velocity (does your object with the Rigidbody have a collider?)")}get isInitialized(){return this._isInitialized}async initialize(){return this._initializePromise||(this._initializePromise=this.internalInitialization()),this._initializePromise}async internalInitialization(){return S("__nophysics")?(console.warn("Physics are disabled"),!1):(Qe&&console.log("Initialize rapier physics engine"),this._hasCreatedWorld?(console.error("Invalid call to create physics world: world is already created"),!0):(this._hasCreatedWorld=!0,exports.MODULES.RAPIER_PHYSICS.MAYBEMODULE==null&&(Qe&&console.trace("Loading rapier physics engine"),await(await exports.MODULES.RAPIER_PHYSICS.load()).init()),Qe&&console.log("Physics engine initialized, creating world..."),this._world=new exports.MODULES.RAPIER_PHYSICS.MODULE.World(this._gravity),this.rapierRay=new exports.MODULES.RAPIER_PHYSICS.MODULE.Ray({x:0,y:0,z:0},{x:0,y:0,z:1}),this.enabled=!0,this._isInitialized=!0,Qe&&console.log("Physics world created"),!0))}validate(){this._isInitialized||Qe&&(this._lastWarnTime=this._lastWarnTime??0,Date.now()-this._lastWarnTime>1e3&&(this._lastWarnTime=Date.now(),console.warn("Physics engine is not initialized")))}raycast(t,e,i){var c;if(!this._isInitialized)return console.log("Physics engine is not initialized"),null;let n=i==null?void 0:i.maxDistance,s=i==null?void 0:i.solid;n===void 0&&(n=1/0),s===void 0&&(s=!0);const a=this.getPhysicsRay(this.rapierRay,t,e);if(!a)return null;(this.debugRenderRaycasts||Gp)&&$.DrawRay(a.origin,a.dir,255,1);const l=(c=this.world)==null?void 0:c.castRay(a,n,s,i==null?void 0:i.queryFilterFlags,i==null?void 0:i.filterGroups,void 0,void 0,h=>{const u=h[ti];return i!=null&&i.filterPredicate?i.filterPredicate(u):(i==null?void 0:i.useIgnoreRaycastLayer)!==!1?!(u!=null&&u.gameObject.layers.isEnabled(2)):!0});if(l){const h=a.pointAt(l.timeOfImpact),u=this.raycastVectorsBuffer.get();return u.set(h.x,h.y,h.z),{point:u,collider:l.collider[ti]}}return null}raycastAndGetNormal(t,e,i){var c;if(!this._isInitialized)return null;let n=i==null?void 0:i.maxDistance,s=i==null?void 0:i.solid;n===void 0&&(n=1/0),s===void 0&&(s=!0);const a=this.getPhysicsRay(this.rapierRay,t,e);if(!a)return null;(this.debugRenderRaycasts||Gp)&&$.DrawRay(a.origin,a.dir,255,1);const l=(c=this.world)==null?void 0:c.castRayAndGetNormal(a,n,s,i==null?void 0:i.queryFilterFlags,i==null?void 0:i.filterGroups,void 0,void 0,h=>{const u=h[ti];return i!=null&&i.filterPredicate?i.filterPredicate(u):(i==null?void 0:i.useIgnoreRaycastLayer)!==!1?!(u!=null&&u.gameObject.layers.isEnabled(2)):!0});if(l){const h=a.pointAt(l.timeOfImpact),u=l.normal,f=this.raycastVectorsBuffer.get(),p=this.raycastVectorsBuffer.get();return f.set(h.x,h.y,h.z),p.set(u.x,u.y,u.z),{point:f,normal:p,collider:l.collider[ti]}}return null}getPhysicsRay(t,e,i){var l,c,h;const n=(l=this.context)==null?void 0:l.mainCamera;if(e===void 0){const u=(c=this.context)==null?void 0:c.input.getPointerPosition(0);if(u)e=u;else return null}if(e.z===void 0){if(!n)return console.error("Can not perform raycast from 2d point - no main camera found"),null;const u=this.raycastVectorsBuffer.get();u.x=e.x,u.y=e.y,u.z=0,(u.x>1||u.y>1||u.y<-1||u.x<-1)&&(Qe&&console.warn("Converting screenspace to raycast space",u),(h=this.context)==null||h.input.convertScreenspaceToRaycastSpace(u)),u.unproject(n),e=u}const s=e;t.origin.x=s.x,t.origin.y=s.y,t.origin.z=s.z;const a=this.raycastVectorsBuffer.get();if(i)a.set(i.x,i.y,i.z);else{if(!n)return console.error("Can not perform raycast - no camera found"),null;a.set(t.origin.x,t.origin.y,t.origin.z);const u=Q(n);a.sub(u)}return a.normalize(),t.dir.x=a.x,t.dir.y=a.y,t.dir.z=a.z,t}sphereOverlap(t,e){return this.rapierColliderArray.length=0,this._isInitialized?this.world?(this.rapierSphere??(this.rapierSphere=new exports.MODULES.RAPIER_PHYSICS.MODULE.Ball(e)),this.rapierSphere.radius=e,(this.debugRenderRaycasts||Gp)&&$.DrawWireSphere(t,e,3359999,1),this.world.intersectionsWithShape(t,this.rapierIdentityRotation,this.rapierSphere,i=>{const n=i[ti],s=new gw(n.gameObject,n);return this.rapierColliderArray.push(s),!0},void 0,void 0,void 0,void 0,i=>i.isSensor()?!1:i[ti].gameObject.layers.isEnabled(2)==!1),this.rapierColliderArray):this.rapierColliderArray:this.rapierColliderArray}get world(){return this._world}get isUpdating(){return this._isUpdatingPhysicsWorld}get gravity(){var t;return((t=this.world)==null?void 0:t.gravity)??this._gravity}set gravity(t){this.world?this.world.gravity=t:this._gravity=t}clearCaches(){var t,e,i,n;this._meshCache.clear(),(t=this.eventQueue)!=null&&t.raw&&((e=this.eventQueue)==null||e.free()),(i=this.world)!=null&&i.bodies&&((n=this.world)==null||n.free())}async addBoxCollider(t,e){if(this._isInitialized||await this.initialize(),!t.activeAndEnabled)return;if(!this.enabled){Qe&&console.warn("Physics are disabled");return}const i=t.gameObject,n=Ue(i,this._tempPosition).multiply(e);n.multiplyScalar(.5),n.x<0&&(n.x=Math.abs(n.x)),n.y<0&&(n.y=Math.abs(n.y)),n.z<0&&(n.z=Math.abs(n.z));const s=1e-7;n.x<s&&(n.x=s),n.y<s&&(n.y=s),n.z<s&&(n.z=s);const a=exports.MODULES.RAPIER_PHYSICS.MODULE.ColliderDesc.cuboid(n.x,n.y,n.z);this.createCollider(t,a)}async addSphereCollider(t){if(this._isInitialized||await this.initialize(),!t.activeAndEnabled)return;if(!this.enabled){Qe&&console.warn("Physics are disabled");return}const e=exports.MODULES.RAPIER_PHYSICS.MODULE.ColliderDesc.ball(.5);this.createCollider(t,e),this.updateProperties(t)}async addCapsuleCollider(t,e,i){if(this._isInitialized||await this.initialize(),!t.activeAndEnabled)return;if(!this.enabled){Qe&&console.warn("Physics are disabled");return}const n=t.gameObject,s=Ue(n,this._tempPosition);s.x=Math.abs(s.x),s.y=Math.abs(s.y);const a=i*s.x;e=Math.max(e,a*2);const l=z.clamp(e*.5*s.y-i*s.x,0,Number.MAX_SAFE_INTEGER),c=exports.MODULES.RAPIER_PHYSICS.MODULE.ColliderDesc.capsule(l,a);this.createCollider(t,c)}async addMeshCollider(t,e,i,n){var f,p,g;let s=e.geometry;if(!s){Qe&&console.warn("Missing mesh geometry",e.name);return}(p=(f=s.index)==null?void 0:f.array)!=null&&p.length||(console.warn(`Your MeshCollider is missing vertices or indices in the assined mesh "${e.name}". Consider providing an indexed geometry.`),s=H.mergeVertices(s));let a=null;const l=s.getAttribute("position");if(l instanceof d.InterleavedBufferAttribute){const y=l.count;a=new Float32Array(y*3);for(let b=0;b<y;b++){const _=l.getX(b),v=l.getY(b),w=l.getZ(b);a[b*3]=_,a[b*3+1]=v,a[b*3+2]=w}}else a=l.array;if(await this.initialize(),!this.enabled){Qe&&console.warn("Physics are disabled");return}if(!t.activeAndEnabled)return;const c=(g=s.index)==null?void 0:g.array,h=t.gameObject.worldScale.clone();if(n&&h.multiply(n),Math.abs(h.x-1)>1e-4||Math.abs(h.y-1)>1e-4||Math.abs(h.z-1)>1e-4){const y=`${s.uuid}_${h.x}_${h.y}_${h.z}_${i}`;if(this._meshCache.has(y))Qe&&console.warn("Use cached mesh collider"),a=this._meshCache.get(y);else{(Qe||j())&&console.debug(`[Performance] Your MeshCollider "${t.name}" is scaled: consider applying the scale to the collider mesh instead (${h.x}, ${h.y}, ${h.z})`);const b=new Float32Array(a.length);for(let _=0;_<a.length;_+=3)b[_]=a[_]*h.x,b[_+1]=a[_+1]*h.y,b[_+2]=a[_+2]*h.z;a=b,this._meshCache.set(y,b)}}const u=i?exports.MODULES.RAPIER_PHYSICS.MODULE.ColliderDesc.convexHull(a):exports.MODULES.RAPIER_PHYSICS.MODULE.ColliderDesc.trimesh(a,c);u&&this.createCollider(t,u)}updatePhysicsMaterial(t){if(!t)return;const e=t.sharedMaterial,i=t[zt];if(i&&e){if(e.bounciness!==void 0&&i.setRestitution(e.bounciness),e.bounceCombine!==void 0)switch(e.bounceCombine){case ht.Average:i.setRestitutionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Average);break;case ht.Maximum:i.setRestitutionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Max);break;case ht.Minimum:i.setRestitutionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Min);break;case ht.Multiply:i.setRestitutionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Multiply);break}if(e.dynamicFriction!==void 0&&i.setFriction(e.dynamicFriction),e.frictionCombine!==void 0)switch(e.frictionCombine){case ht.Average:i.setFrictionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Average);break;case ht.Maximum:i.setFrictionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Max);break;case ht.Minimum:i.setFrictionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Min);break;case ht.Multiply:i.setFrictionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Multiply);break}}}getBody(t){return t?t[zt]:null}getComponent(t){return t?t[ti]:null}createCollider(t,e){var a;if(!this.world)throw new Error("Physics world not initialized");const i=this._tempMatrix;let n;t.attachedRigidbody?n=this.getRigidbody(t,this._tempMatrix):(Qe&&console.log("Create collider without rigidbody",t.name),i.makeRotationFromQuaternion(_e(t.gameObject)),i.setPosition(Q(t.gameObject))),i.decompose(this._tempPosition,this._tempQuaternion,this._tempScale),this.tryApplyCenter(t,this._tempPosition),e.setTranslation(this._tempPosition.x,this._tempPosition.y,this._tempPosition.z),e.setRotation(this._tempQuaternion),e.setSensor(t.isTrigger);const s=t.sharedMaterial;if(s){if(s.bounciness!==void 0&&e.setRestitution(s.bounciness),s.bounceCombine!==void 0)switch(s.bounceCombine){case ht.Average:e.setRestitutionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Average);break;case ht.Maximum:e.setRestitutionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Max);break;case ht.Minimum:e.setRestitutionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Min);break;case ht.Multiply:e.setRestitutionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Multiply);break}if(s.dynamicFriction!==void 0&&e.setFriction(s.dynamicFriction),s.frictionCombine!==void 0)switch(s.frictionCombine){case ht.Average:e.setFrictionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Average);break;case ht.Maximum:e.setFrictionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Max);break;case ht.Minimum:e.setFrictionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Min);break;case ht.Multiply:e.setFrictionCombineRule(exports.MODULES.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Multiply);break}}((a=t.attachedRigidbody)==null?void 0:a.autoMass)===!1&&(e.setDensity(1e-6),e.setMass(1e-6));try{const l=this.world.createCollider(e,n);return l[ti]=t,t[zt]=l,l.setActiveEvents(exports.MODULES.RAPIER_PHYSICS.MODULE.ActiveEvents.COLLISION_EVENTS),l.setActiveCollisionTypes(exports.MODULES.RAPIER_PHYSICS.MODULE.ActiveCollisionTypes.ALL),this.objects.push(t),this.bodies.push(l),this.updateColliderCollisionGroups(t),l}catch(l){return console.error('Error creating collider "'+t.name+`"
1573
1573
  Error:`,l),null}}updateColliderCollisionGroups(t){const e=t[zt],i=t.membership;let n=0;if(i==null)n=65535;else for(let l=0;l<i.length;l++){const c=i[l];c>31?console.error(`Rapier only supports 32 layers, layer ${c} is not supported`):n|=1<<Math.floor(c)}const s=t.filter;let a=0;if(s==null)a=65535;else for(let l=0;l<s.length;l++){const c=s[l];c>31?console.error(`Rapier only supports 32 layers, layer ${c} is not supported`):a|=1<<Math.floor(c)}e.setCollisionGroups(n<<16|a)}getRigidbody(t,e){if(!this.world)throw new Error("Physics world not initialized");let i=null;if(t.attachedRigidbody){const n=t.attachedRigidbody;if(i=n[zt],!i){const s=n.isKinematic&&!Vp;Qe&&console.log("Create rigidbody",s);const a=s?exports.MODULES.RAPIER_PHYSICS.MODULE.RigidBodyDesc.kinematicPositionBased():exports.MODULES.RAPIER_PHYSICS.MODULE.RigidBodyDesc.dynamic(),l=Q(t.attachedRigidbody.gameObject);a.setTranslation(l.x,l.y,l.z),a.setRotation(_e(t.attachedRigidbody.gameObject)),a.centerOfMass=new exports.MODULES.RAPIER_PHYSICS.MODULE.Vector3(n.centerOfMass.x,n.centerOfMass.y,n.centerOfMass.z),i=this.world.createRigidBody(a),this.bodies.push(i),this.objects.push(n)}i[ti]=n,n[zt]=i,this.internalUpdateRigidbodyProperties(n,i),this.getRigidbodyRelativeMatrix(t.gameObject,n.gameObject,e),t[Jb]=i}else{const n=exports.MODULES.RAPIER_PHYSICS.MODULE.RigidBodyDesc.kinematicPositionBased(),s=Q(t.gameObject);n.setTranslation(s.x,s.y,s.z),n.setRotation(_e(t.gameObject)),i=this.world.createRigidBody(n),e.identity(),i[ti]=null}return i}internal_getRigidbody(t){return t.isCollider===!0?t[Jb]:t[zt]}internalUpdateColliderProperties(t,e){const i=e.shape;let n=!1;switch(i.type){case exports.MODULES.RAPIER_PHYSICS.MODULE.ShapeType.Ball:{const p=i,g=t,y=t.gameObject,b=Ue(y,this._tempPosition),_=Math.abs(g.radius*b.x);n=p.radius!==_,p.radius=_,n&&e.setShape(p);break}case exports.MODULES.RAPIER_PHYSICS.MODULE.ShapeType.Cuboid:const s=i,a=t,l=t.gameObject,c=Ue(l,this._tempPosition),h=Math.abs(a.size.x*.5*c.x),u=Math.abs(a.size.y*.5*c.y),f=Math.abs(a.size.z*.5*c.z);n=s.halfExtents.x!==h||s.halfExtents.y!==u||s.halfExtents.z!==f,s.halfExtents.x=h,s.halfExtents.y=u,s.halfExtents.z=f,n&&e.setShape(s);break}if(n){const s=t.attachedRigidbody;if(s!=null&&s.autoMass){const a=this.getBody(s);a==null||a.recomputeMassPropertiesFromColliders()}}this.updateColliderCollisionGroups(t),t.isTrigger!==e.isSensor()&&e.setSensor(t.isTrigger)}internalUpdateRigidbodyProperties(t,e){if(e.enableCcd(t.collisionDetectionMode!==Qu.Discrete),e.setLinearDamping(t.drag),e.setAngularDamping(t.angularDrag),e.setGravityScale(t.useGravity?t.gravityScale:0,!0),t.dominanceGroup<=127&&t.dominanceGroup>=-127?e.setDominanceGroup(Math.floor(t.dominanceGroup)):e.setDominanceGroup(0),t.autoMass){e.setAdditionalMass(0,!1);for(let i=0;i<e.numColliders();i++)e.collider(i).setDensity(1);e.recomputeMassPropertiesFromColliders()}else{e.setAdditionalMass(t.mass,!1);for(let i=0;i<e.numColliders();i++)e.collider(i).setDensity(1e-7);e.recomputeMassPropertiesFromColliders()}e.setEnabledRotations(!t.lockRotationX,!t.lockRotationY,!t.lockRotationZ,!1),e.setEnabledTranslations(!t.lockPositionX,!t.lockPositionY,!t.lockPositionZ,!1),t.isKinematic?e.setBodyType(exports.MODULES.RAPIER_PHYSICS.MODULE.RigidBodyType.KinematicPositionBased,!1):e.setBodyType(exports.MODULES.RAPIER_PHYSICS.MODULE.RigidBodyType.Dynamic,!1)}step(t){if(this.world&&this.enabled){if(this._isUpdatingPhysicsWorld=!0,this.eventQueue||(this.eventQueue=new exports.MODULES.RAPIER_PHYSICS.MODULE.EventQueue(!1)),t===void 0||t<=0){this._isUpdatingPhysicsWorld=!1;return}else t!==void 0&&(this.world.timestep=z.lerp(this.world.timestep,t,.8));try{this.world.step(this.eventQueue)}catch(e){console.warn("Error running physics step",e)}this._isUpdatingPhysicsWorld=!1}}postStep(){this.world&&this.enabled&&(this._isUpdatingPhysicsWorld=!0,this.syncObjects(),this._isUpdatingPhysicsWorld=!1,this.eventQueue&&!this.collisionHandler&&(this.collisionHandler=new nT(this.world,this.eventQueue)),this.collisionHandler&&(this.collisionHandler.handleCollisionEvents(),this.collisionHandler.update()),this.updateDebugRendering(this.world))}updateDebugRendering(t){var e,i,n,s;if(Qe||Vp||iT||this.debugRenderColliders===!0){if(!this.lines){const l=new d.LineBasicMaterial({color:7855479,fog:!1}),c=new d.BufferGeometry;this.lines=new d.LineSegments(c,l),this.lines.layers.disableAll(),this.lines.layers.enable(2)}this.lines.parent!==((e=this.context)==null?void 0:e.scene)&&((i=this.context)==null||i.scene.add(this.lines));const a=t.debugRender();this.lines.geometry.setAttribute("position",new d.BufferAttribute(a.vertices,3)),this.lines.geometry.setAttribute("color",new d.BufferAttribute(a.colors,4)),(this.context.time.frame%30===0||((n=this.lines.geometry.boundingSphere)==null?void 0:n.radius)===0)&&this.lines.geometry.computeBoundingSphere()}else this.lines&&((s=this.context)==null||s.scene.remove(this.lines))}syncObjects(){if(!Vp)for(let t=0;t<this.bodies.length;t++){const e=this.objects[t],i=this.bodies[t],n=e;if((n==null?void 0:n.isCollider)===!0&&!n.attachedRigidbody){const c=i.parent();c?this.syncPhysicsBody(e.gameObject,c,!0,!0):this.syncPhysicsBody(e.gameObject,i,!0,!0);continue}const s=i.translation(),a=i.rotation();if(Number.isNaN(s.x)||Number.isNaN(a.x)){!n.__COLLIDER_NAN&&j()&&(console.warn("Collider has NaN values",n.name,n.gameObject,i),n.__COLLIDER_NAN=!0);continue}const l=e.center;if(l&&l.isVector3){this._tempQuaternion.set(a.x,a.y,a.z,a.w);const c=this._tempPosition.copy(l).applyQuaternion(this._tempQuaternion),h=Ue(e.gameObject);c.multiply(h),s.x-=c.x,s.y-=c.y,s.z-=c.z}Pr(e.gameObject,s.x,s.y,s.z),Qm(e.gameObject,a.x,a.y,a.z,a.w)}}syncPhysicsBody(t,e,i,n){if(e instanceof exports.MODULES.RAPIER_PHYSICS.MODULE.RigidBody){const s=Q(t,this._tempPosition),a=_e(t,this._tempQuaternion);switch(e.bodyType()){case exports.MODULES.RAPIER_PHYSICS.MODULE.RigidBodyType.Fixed:case exports.MODULES.RAPIER_PHYSICS.MODULE.RigidBodyType.KinematicPositionBased:case exports.MODULES.RAPIER_PHYSICS.MODULE.RigidBodyType.KinematicVelocityBased:i&&e.setNextKinematicTranslation(s),n&&e.setNextKinematicRotation(a);break;default:i&&e.setTranslation(s,!1),n&&e.setRotation(a,!1);break}}else if(e instanceof exports.MODULES.RAPIER_PHYSICS.MODULE.Collider){t.matrixWorldNeedsUpdate&&t.updateWorldMatrix(!0,!1),t.matrixWorld.decompose(this._tempPosition,this._tempQuaternion,this._tempScale);const s=this._tempPosition,a=this._tempQuaternion,l=e[ti];if(this.tryApplyCenter(l,s),i){const c=e.translation();(c.x!==s.x||c.y!==s.y||c.z!==s.z)&&e.setTranslation(s)}if(n){const c=e.rotation();(c.x!==a.x||c.y!==a.y||c.z!==a.z||c.w!==a.w)&&e.setRotation(a)}}}tryApplyCenter(t,e){const i=t.center;i&&t.gameObject&&(i.x!==0||i.y!==0||i.z!==0)&&(this._tempCenterPos.x=i.x,this._tempCenterPos.y=i.y,this._tempCenterPos.z=i.z,Ue(t.gameObject,this._tempCenterVec),this._tempCenterPos.multiply(this._tempCenterVec),t.attachedRigidbody?this._tempCenterPos.applyQuaternion(t.gameObject.quaternion):(_e(t.gameObject,this._tempCenterQuaternion),this._tempCenterPos.applyQuaternion(this._tempCenterQuaternion)),e.x+=this._tempCenterPos.x,e.y+=this._tempCenterPos.y,e.z+=this._tempCenterPos.z)}getRigidbodyRelativeMatrix(t,e,i,n){if(n===void 0&&(n=bs._matricesBuffer,n.length=0),t===e){const s=Ue(t,this._tempPosition);i.makeScale(s.x,s.y,s.z);for(let a=n.length-1;a>=0;a--)i.multiply(n[a]);return i}return n.push(t.matrix),t.parent&&this.getRigidbodyRelativeMatrix(t.parent,e,i,n),i}addFixedJoint(t,e){if(!this.world){console.error("Physics world not initialized");return}const i=t[zt],n=e[zt];this.calculateJointRelativeMatrices(t.gameObject,e.gameObject,this._tempMatrix),this._tempMatrix.decompose(this._tempPosition,this._tempQuaternion,this._tempScale);const s=exports.MODULES.RAPIER_PHYSICS.MODULE.JointData.fixed(bs.centerConnectionPos,bs.centerConnectionRot,this._tempPosition,this._tempQuaternion),a=this.world.createImpulseJoint(s,i,n,!0);Qe&&console.log("ADD FIXED JOINT",a)}addHingeJoint(t,e,i,n){if(!this.world){console.error("Physics world not initialized");return}const s=t[zt],a=e[zt];this.calculateJointRelativeMatrices(t.gameObject,e.gameObject,this._tempMatrix),this._tempMatrix.decompose(this._tempPosition,this._tempQuaternion,this._tempScale);const l=exports.MODULES.RAPIER_PHYSICS.MODULE.JointData.revolute(i,this._tempPosition,n),c=this.world.createImpulseJoint(l,s,a,!0);Qe&&console.log("ADD HINGE JOINT",c)}calculateJointRelativeMatrices(t,e,i){t.updateWorldMatrix(!0,!1),e.updateWorldMatrix(!0,!1);const n=t.matrixWorld,s=e.matrixWorld;n.elements[0]=1,n.elements[5]=1,n.elements[10]=1,s.elements[0]=1,s.elements[5]=1,s.elements[10]=1,i.copy(s).premultiply(n.invert()).invert()}};r(bs,"_didLoadPhysicsEngine",!1),r(bs,"_matricesBuffer",[]),r(bs,"centerConnectionPos",{x:0,y:0,z:0}),r(bs,"centerConnectionRot",{x:0,y:0,z:0,w:1});let Mu=bs;class nT{constructor(t,e){r(this,"world");r(this,"eventQueue");r(this,"activeCollisions",[]);r(this,"activeCollisionsStay",[]);r(this,"activeTriggers",[]);this.world=t,this.eventQueue=e}handleCollisionEvents(){this.eventQueue&&this.world&&this.eventQueue.drainCollisionEvents((t,e,i)=>{const n=this.world.getCollider(t),s=this.world.getCollider(e);if(!n||!s)return;const a=n[ti],l=s[ti];Wp&&console.log("EVT",a.name,l.name,i,n,s),a&&l&&(i?(this.onCollisionStarted(a,n,l,s),this.onCollisionStarted(l,s,a,n)):(this.onCollisionEnded(a,l),this.onCollisionEnded(l,a)))})}update(){this.onHandleCollisionStay()}onCollisionStarted(t,e,i,n){let s=null;if(t.isTrigger||i.isTrigger)Rr(t.gameObject,a=>{a.onTriggerEnter&&!a.destroyed&&a.onTriggerEnter(i),this.activeTriggers.push({collider:t,component:a,otherCollider:i})});else{const a=t.gameObject;this.world.contactPair(e,n,(l,c)=>{Rr(a,h=>{var f;if(h.destroyed)return;const u=h.onCollisionEnter||h.onCollisionStay||h.onCollisionExit;if(u||Wp){if(!s){const p=[],g=l.normal();i instanceof jo&&i.convex&&(g.x=-g.x,g.y=-g.y,g.z=-g.z);for(let y=0;y<l.numSolverContacts();y++){const b=l.solverContactPoint(y),_=l.contactImpulse(y);if(b){const v=l.contactDist(y),w=l.solverContactFriction(y),x=l.solverContactTangentVelocity(y),O=new pw(b,v,g,_,w,x);p.push(O),Wp&&$.DrawDirection(b,g,16711680,3,!0)}}s=new mw(a,i,p)}if(u){const p={collider:t,component:h,collision:s};this.activeCollisions.push(p),h.onCollisionStay&&this.activeCollisionsStay.push(p),(f=h.onCollisionEnter)==null||f.call(h,s)}}})})}}onHandleCollisionStay(){for(const t of this.activeCollisionsStay){const e=t.component;if(!e.destroyed&&e.activeAndEnabled&&e.onCollisionStay){if(t.collision.collider.destroyed)continue;const i=t.collision;e.onCollisionStay(i)}}for(const t of this.activeTriggers){const e=t.component;if(!e.destroyed&&e.activeAndEnabled&&e.onTriggerStay){const i=t.otherCollider;if(i.destroyed)continue;e.onTriggerStay(i)}}}onCollisionEnded(t,e){if(!(t.destroyed||e.destroyed)){for(let i=0;i<this.activeCollisions.length;i++){const n=this.activeCollisions[i],s=n.collider;if(s.destroyed||n.collision.collider.destroyed){this.activeCollisions.splice(i,1),i--;continue}if(s===t&&n.collision.collider===e){const a=n.component;if(this.activeCollisions.splice(i,1),i--,a.activeAndEnabled&&a.onCollisionExit){const l=n.collision;a.onCollisionExit(l)}}}for(let i=0;i<this.activeCollisionsStay.length;i++){const n=this.activeCollisionsStay[i],s=n.collider;if(s.destroyed||n.collision.collider.destroyed){this.activeCollisionsStay.splice(i,1),i--;continue}if(s===t&&n.collision.collider===e){const a=n.component;if(this.activeCollisionsStay.splice(i,1),i--,a.activeAndEnabled&&a.onCollisionExit){const l=n.collision;a.onCollisionExit(l)}}}for(let i=0;i<this.activeTriggers.length;i++){const n=this.activeTriggers[i],s=n.collider;if(s.destroyed||n.otherCollider.destroyed){this.activeTriggers.splice(i,1),i--;continue}if(s===t&&n.otherCollider===e){const a=n.component;if(this.activeTriggers.splice(i,1),i--,a.activeAndEnabled&&a.onTriggerExit){const l=n.otherCollider;a.onTriggerExit(l)}}}}}}class sT{static async createComparisonScene(t){const{files:e}=t,n=await Promise.all(e.map(_=>new te(_).loadAssetAsync())),s=new d.Scene;let a=0;for(const _ of n)if(_ instanceof d.Object3D){_.position.y=a,s.add(_);const v=li([_]);a+=v.getSize(new d.Vector3).y,a+=.1}const l=new d.PerspectiveCamera(20);s.add(l);const c=t.environment||"https://dl.polyhaven.org/file/ph-assets/HDRIs/exr/1k/studio_small_09_1k.exr";{let _=null;if(c.endsWith(".hdr")){const v=(await Promise.resolve().then(()=>require("./three-examples-X3OadjXB.umd.cjs")).then(w=>w.RGBELoader$1)).RGBELoader;_=new v}else if(c.endsWith(".exr")){const v=(await Promise.resolve().then(()=>require("./three-examples-X3OadjXB.umd.cjs")).then(w=>w.EXRLoader$1)).EXRLoader;_=new v}if(_){const v=await _.loadAsync(c).catch(w=>(console.error(w),null));v&&(v.mapping=d.EquirectangularReflectionMapping,v.needsUpdate=!0,s.background=v,s.environment=v,s.backgroundBlurriness=.75)}else console.warn("Unsupported environment map format",c)}const h=li(s.children),u=h.getCenter(new d.Vector3),f=h.getSize(new d.Vector3),g=Math.max(f.x,f.y,f.z)/(2*Math.tan(Math.PI*l.fov/360));l.position.set(u.x,u.y,g),l.lookAt(u);const y=new H.OrbitControls(l,t.domElement||document.body);y.target=u,y.update();const b=(t.domElement||document.body).getBoundingClientRect();return l.aspect=b.width/b.height,l.updateProjectionMatrix(),{scene:s,camera:l}}}let $m=0;function e0(o){o?$m++:$m--}function oT(){return $m>0}const rT={binary:!0,animations:!0};async function aT(o){if(!o.context)throw new Error("No context provided to exportAsGLTF");o.scene||(o.scene=o.context.scene);const t={...rT,...o},{context:e}=t,i=new H.GLTFExporter;i.register(l=>new Dw(l)),i.register(l=>new LM(l)),i.register(l=>new Rw(l)),Qg(i,t.context);const n={binary:t.binary,animations:cT(e,t.scene,[])},s=new lT;console.debug("Exporting GLTF",n),s.onBeforeExport(t),e0(!0);const a=await i.parseAsync(t.scene,n).catch(l=>(console.error(l),null));if(e0(!1),s.onAfterExport(t),!a)throw new Error("Failed to export GLTF");if(t.downloadAs!=null){let l=null;if(a instanceof ArrayBuffer?l=new Blob([a],{type:"application/octet-stream"}):console.error("Can not download GLTF as a blob",a),l){const c=URL.createObjectURL(l),h=document.createElement("a");h.href=c;let u=t.downloadAs;!u.endsWith(".glb")&&!u.endsWith(".gltf")&&(u+=t.binary?".glb":".gltf"),h.download=u,h.click()}}return a}const t0=Symbol("needle:weight");class lT{constructor(){r(this,"_undo",[])}onBeforeExport(t){t.context.animations.mixers.forEach(e=>{const i=Ha.tryGetActionsFromMixer(e);if(i)for(let n=0;n<i.length;n++){const s=i[n];s[t0]=s.weight,s.weight=0,this._undo.push(()=>{s.weight=s[t0]})}e.update(0)}),t.context.scene.traverse(e=>{if(!Pm(e)){const i=e.parent;i&&(e.removeFromParent(),this._undo.push(()=>i.add(e)))}})}onAfterExport(t){this._undo.forEach(e=>e()),this._undo.length=0}}function cT(o,t,e){o.animations.mixers.forEach(n=>{const s=Ha.tryGetActionsFromMixer(n);if(s)for(let a=0;a<s.length;a++){const c=s[a].getClip();e.push(c)}}),Array.isArray(t)||(t=[t]);for(const n of t)Ha.tryGetAnimationClipsFromObjectHierarchy(n,e);const i=new Set(e);return Array.from(i)}const i0="needle-button",Hp=j();var mr,gr,yr,Vt,ws,Ua,nl,zx,Nx,Kc;class Zy extends HTMLElement{constructor(){super();on(this,nl);on(this,mr);on(this,gr);on(this,yr);on(this,Vt);on(this,ws);on(this,Ua);on(this,Kc,e=>{Hp&&console.log("Needle Button clicked"),!e.defaultPrevented&&ce(this,Vt)&&ce(this,Vt).click()});this.removeEventListener("click",ce(this,Kc)),this.addEventListener("click",ce(this,Kc))}attributeChangedCallback(e,i,n){Ol(this,nl,zx).call(this)}}mr=new WeakMap,gr=new WeakMap,yr=new WeakMap,Vt=new WeakMap,ws=new WeakMap,Ua=new WeakMap,nl=new WeakSet,zx=function(){var i,n;if((i=ce(this,Vt))==null||i.remove(),this.getAttribute("ar")!=null)ce(this,ws)??rn(this,ws,new Mo),rn(this,Vt,ce(this,ws).createARButton());else if(this.getAttribute("vr")!=null)ce(this,ws)??rn(this,ws,new Mo),rn(this,Vt,ce(this,ws).createVRButton());else if(this.getAttribute("quicklook")!=null)ce(this,ws)??rn(this,ws,new Mo),rn(this,Vt,ce(this,ws).createQuicklookButton());else{Hp?console.warn("No button type specified for <needle-button>. Use either ar, vr or quicklook attribute."):console.debug("No button type specified for <needle-button>. Use either ar, vr or quicklook attribute.");return}ce(this,mr)??rn(this,mr,this.attachShadow({mode:"open"})),ce(this,gr)??rn(this,gr,document.createElement("slot")),ce(this,yr)??rn(this,yr,document.createElement("style")),ce(this,yr).innerHTML=`
1574
1574
  button {
1575
1575
  all: initial;
@@ -1604,4 +1604,4 @@ Error:`,l),null}}updateColliderCollisionGroups(t){const e=t[zt],i=t.membership;l
1604
1604
  justify-content: center;
1605
1605
  gap: .5rem;
1606
1606
  }
1607
- `),ce(this,gr).innerHTML=ce(this,Vt).innerHTML,ce(this,gr).style.cssText="display: flex; align-items: center; justify-content: center;",ce(this,Vt).innerHTML=ce(this,gr).outerHTML,ce(this,mr).innerHTML=ce(this,Vt).outerHTML,ce(this,mr).prepend(ce(this,yr)),ru(_m,{element:ce(this,mr)}),(n=ce(this,Ua))==null||n.disconnect(),ce(this,Ua)??rn(this,Ua,new MutationObserver(()=>Ol(this,nl,Nx).call(this))),ce(this,Ua).observe(ce(this,Vt),{attributes:!0}),Hp&&console.log("Needle Button updated")},Nx=function(){ce(this,Vt)&&(ce(this,Vt).style.display==="none"?this.style.display="none":this.style.display==="none"&&(this.style.display=""))},Kc=new WeakMap,r(Zy,"observedAttributes",["ar","vr","quicklook"]);typeof window<"u"&&!window.customElements.get(i0)&&window.customElements.define(i0,Zy);const Hl=S("debugavatar");class Jy{constructor(t,e,i,n){r(this,"root");r(this,"head");r(this,"leftHand");r(this,"rigthHand");var s;this.root=t,this.head=e,this.leftHand=i,this.rigthHand=n,(s=this.root)==null||s.traverse(a=>a.layers.set(2))}get isValid(){return this.head!==null&&this.head!==void 0}}class $x{constructor(){r(this,"avatarRegistryUrl",null)}async getOrCreateNewAvatarInstance(t,e){if(!e)return console.error("Can not create avatar: failed to provide id or root object"),null;let i=null;if(typeof e=="string"){if(i=await this.loadAvatar(t,e),!i){const s=new xn;i=C.instantiate(za(e,t.scene),s)}}else i=e;if(!i)return null;const n=this.findAvatar(i);return n.isValid?(Hl&&console.log("[Custom Avatar] valid config",e,Hl?n:""),n):(console.warn("[Custom Avatar] config isn't valid",e,Hl?n:""),null)}async loadAvatar(t,e){if(console.assert(e!=null&&typeof e=="string","Avatar id must not be null"),e.length<=0||!e)return null;if(Hl&&console.log("[Custom Avatar] "+e+", loading..."),e.endsWith(".glb")||(e+=".glb"),this.avatarRegistryUrl===null){const n=await fetch("./"+e);let s=null;if(n.ok){const l=await n.blob();l&&(s=await l.arrayBuffer())}if(!s)return null;const a=await bn().parseSync(t,s,null,0);return(a==null?void 0:a.scene)??null}const i=new H.GLTFLoader;return Og(i,t),new Promise((n,s)=>{const a=this.avatarRegistryUrl+"/"+e;i.load(a,async l=>{await bn().createBuiltinComponents(t,a,l,null,void 0),n(l.scene)},l=>{Hl&&console.log("[Custom Avatar] "+l.loaded/l.total*100+"% loaded of "+l.total/1024+"kB")},l=>{console.error("[Custom Avatar] Error when loading: "+l),n(null)})})}cacheModel(t,e){}findAvatar(t){const e=t;let i=e;i.children.length==1&&(i=t.children[0]);let n=this.findAvatarPart(i,["head"]);const s=this.findAvatarPart(i,["left","hand"]),a=this.findAvatarPart(i,["right","hand"]);if(!n){n=e;const c=new d.Vector3;new d.Box3().setFromObject(n).getSize(c);const h=Math.max(c.x,c.y,c.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 Jy(e,n,s,a)}findAvatarPart(t,e){const i=t.name.toLowerCase();let n=!0;for(const s of e){if(!n)break;i.indexOf(s)===-1&&(n=!1)}if(n)return t;if(t.children)for(const s of t.children){const a=this.findAvatarPart(s,e);if(a)return a}return null}handleCustomAvatarErrors(t){if(!t.ok)throw Error(t.statusText);return t}}class Vx{get extensionName(){return"DocumentExtension"}onAfterBuildDocument(t){}}class Wx{}const hT=Object.freeze(Object.defineProperty({__proto__:null,ActionBuilder:fe,ActionCollection:Zw,ActionModel:xi,AlignmentConstraint:fh,Animation:Tt,AnimationCurve:Ah,AnimationExtension:af,AnimationTrackHandler:Ef,Animator:xt,AnimatorController:Gi,Antialiasing:Dh,AudioExtension:Wr,AudioListener:Os,AudioSource:qi,AudioTrackHandler:tl,Avatar:ko,AvatarBlink_Simple:zr,AvatarEyeLook_Rotation:jg,AvatarLoader:$x,AvatarMarker:At,AvatarModel:Jy,Avatar_Brain_LookAt:Uc,Avatar_MouthShapes:yh,Avatar_MustacheShake:Dg,Avatar_POI:As,AxesHelper:rl,BaseUIComponent:Qi,BasicIKConstraint:Fg,BehaviorExtension:fy,BehaviorModel:vt,BloomEffect:wf,BoxCollider:tf,BoxGizmo:Xr,BoxHelperComponent:is,Button:Ws,CallInfo:Ps,Camera:ri,CameraTargetReachedEvent:Fc,Canvas:Ja,CanvasGroup:Ro,CapsuleCollider:Ls,ChangeMaterialOnClick:sy,ChangeTransformOnClick:Gr,CharacterController:Nr,CharacterControllerInput:js,ChromaticAberration:Ih,Collider:di,ColorAdjustments:Vo,ColorBySpeedModule:_l,ColorOverLifetimeModule:_f,ContactShadows:_h,ControlTrackHandler:Tf,CustomBranding:qr,Deletable:$g,DeleteBox:Xa,DepthOfField:Pn,DeviceFlag:nf,DocumentExtension:Vx,DragControls:cr,DropListener:Bs,Duplicatable:Gg,EffectWrapper:Gc,EmissionModule:$s,EmphasizeOnClick:hl,EnvironmentScene:jf,EventList:ye,EventListEvent:Yu,EventSystem:Qt,EventTrigger:of,FieldWithDefault:Bw,FixedJoint:Oy,Fog:ml,GltfExport:ey,GltfExportBox:Zg,Gradient:Yr,Graphic:Oh,GraphicRaycaster:Ku,GridHelper:gl,GridLayoutGroup:by,GroundProjectedEnv:os,GroupActionModel:yo,HideOnStart:Ya,HingeJoint:Rh,HorizontalLayoutGroup:_y,Image:wl,InheritVelocityModule:Ty,InputField:Wy,InstanceHandle:Nc,InstancingHandler:Qa,Interactable:Ng,Keyframe:ai,LODGroup:Th,LODModel:yl,Light:pi,LimitVelocityOverLifetimeModule:lt,LogStats:zg,LookAt:Gy,LookAtConstraint:Ur,MainModule:It,MaskableGraphic:kh,MeshCollider:jo,MeshRenderer:vh,MinMaxCurve:q,MinMaxGradient:Kr,NeedleMenu:as,NestedGltf:mf,Networking:Ry,NoiseModule:be,ObjectRaycaster:Ei,OffsetConstraint:Qr,OpenURL:xl,OrbitControls:ge,Outline:pl,Padding:Hr,ParticleBurst:wu,ParticleSubEmitter:Ay,ParticleSystem:Wc,ParticleSystemRenderer:en,PhysicsExtension:py,PixelationEffect:jh,PlayAnimationOnClick:$c,PlayAudioOnClick:Oo,PlayableDirector:il,PlayerColor:el,PointerEventData:mh,PostProcessingHandler:jy,PreliminaryAction:dl,PreliminaryTrigger:Sh,RawImage:Df,Rect:nx,RectTransform:wn,ReflectionProbe:zc,RegisteredAnimationInfo:_o,RemoteSkybox:Sf,Renderer:Ti,RendererLightmap:_u,Rigidbody:ot,RotationBySpeedModule:Ji,RotationOverLifetimeModule:Cn,SceneSwitcher:Ge,ScreenCapture:Wo,ScreenSpaceAmbientOcclusion:Vs,ScreenSpaceAmbientOcclusionN8:Mn,SetActiveOnClick:oy,ShadowCatcher:zh,ShapeModule:Ey,SharpeningEffect:Fh,SignalAsset:Rf,SignalReceiver:Gh,SignalReceiverEvent:Wh,SignalTrackHandler:Hc,Size:ix,SizeBySpeedModule:mi,SizeOverLifetimeModule:Zr,SkinnedMeshRenderer:Kg,SmoothFollow:Pf,SpatialGrabRaycaster:Tr,SpatialHtml:Xh,SpatialTrigger:Mf,SpatialTriggerReceiver:Zn,SpectatorCamera:Of,SphereCollider:al,Sprite:Us,SpriteData:Fa,SpriteRenderer:ui,SpriteSheet:Za,SubEmitterSystem:xu,SyncedCamera:Fy,SyncedRoom:On,SyncedTransform:ts,TapGestureTrigger:ay,TeleportTarget:uf,TestRunner:Uy,TestSimulateUserData:zy,Text:Dt,TextBuilder:gy,TextExtension:pf,TextureSheetAnimationModule:jt,TiltShiftEffect:hs,ToneMappingEffect:Eo,TrailModule:je,TransformData:We,TransformGizmo:ia,TriggerBuilder:wt,TriggerModel:Po,UIRaycastUtils:Eg,UIRootComponent:Ph,USDZExporter:Kn,USDZText:hr,USDZUIExtension:wy,UsageMarker:bh,VariantAction:ny,VelocityOverLifetimeModule:ze,VerticalLayoutGroup:yy,VideoPlayer:rt,Vignette:ta,VisibilityAction:Ch,Voip:Io,Volume:vl,VolumeParameter:U,VolumeProfile:bf,WebARCameraBackground:Yh,WebARSessionRoot:ns,WebXR:ff,WebXRImageTracking:Xc,WebXRImageTrackingModel:Hs,WebXRPlaneTracking:qs,WebXRTrackedImage:qc,XRControllerFollow:Gs,XRControllerModel:ss,XRControllerMovement:Ai,XRFlag:$i,XRRig:Ff,XRState:Xt,__Ignore:Wx},Symbol.toStringTag,{value:"Module"})),Ou=S("debugmissingcamera");re.registerCallback(he.MissingCamera,o=>{var l,c,h;Ou&&console.warn("Creating missing camera");const t=o.context.scene,e=new d.PerspectiveCamera;e.name="Default Fallback Camera",t.add(e);const i=new ri;if(i.sourceId=((c=(l=o.files)==null?void 0:l[0])==null?void 0:c.src)??"unknown",i.fieldOfView=35,o.context.domElement.getAttribute("transparent")!=null)i.clearFlags=Co.Uninitialized;else if((h=o.context.domElement.getAttribute("background-image"))!=null&&h.length||o.context.lightmaps.tryGetSkybox(i.sourceId))i.clearFlags=Co.Skybox,o.context.domElement.getAttribute("background-blurriness")===null&&(o.context.scene.backgroundBlurriness=.2);else{if(i.clearFlags=Co.SolidColor,!o.context.domElement.getAttribute("background-color")){let u="#efefef";typeof window!==void 0&&window.matchMedia("(prefers-color-scheme: dark)").matches&&(u="#1f1f1f"),t.background=new d.Color(u)}if(!t.environment){const u=new d.PMREMGenerator$1(o.context.renderer),f=new jf("neutral");t.environment=u.fromScene(f,.025).texture}}const s=wr(e,i,!0);e.position.x=0,e.position.y=1,e.position.z=2;const a=o.context.domElement;return(a==null?void 0:a.cameraControls)!=!1&&Gx(o.context,s),s});re.registerCallback(he.ContextCreated,o=>{if(!o.context.mainCamera){Ou&&console.log("Will not auto-fit because a default camera exists");return}const t=o.context.domElement;if((t==null?void 0:t.cameraControls)==!0){const e=v0(o.context.mainCamera);if((e==null?void 0:e.isCameraController)==!0){Ou&&console.log("Will not auto-fit because a camera controller exists");return}Gx(o.context)}});function Gx(o,t){t=t??o.mainCameraComponent;const e=t==null?void 0:t.gameObject;if(Ou&&console.log("Creating default camera controls",t==null?void 0:t.name),e){const i=ah(e,ge);i.sourceId=(t==null?void 0:t.sourceId)??"unknown";const n=o.domElement.getAttribute("auto-rotate");if(i.autoRotate=n!=null&&n!="0"&&(n==null?void 0:n.toLowerCase())!="false",i.autoRotateSpeed=.5,i.autoFit=!0,i.autoRotate&&n){const s=parseFloat(n);isNaN(s)||(i.autoRotateSpeed=s)}}else console.warn("Missing camera object, can not add orbit controls")}re.registerCallback(he.ContextCreated,o=>{const t=o.context.domElement.getAttribute("autoplay");if(t!==void 0&&(t===""||t==="true"||t==="1")&&o.files)for(const e of o.files)C.foreachComponent(e.file.scene,n=>{if(n.enabled!==!1){if(n instanceof Tt&&n.playAutomatically||n instanceof xt||n instanceof il&&n.playOnAwake===!0)return!0;if(n instanceof Tt)return n.playAutomatically=!0,!0;if(n instanceof il)return n.playOnAwake=!0,!0}},!0)!==!0&&Ha.assignAnimationsFromFile(e.file,{createAnimationComponent:(n,s)=>Oi(n,Tt)})});class dT extends ae.WorkerBase{constructor(){super(new Worker(new URL("/generateMeshBVH.worker-BaNp_Xtp.js",typeof document>"u"?require("url").pathToFileURL(__filename).href:Nf&&Nf.tagName.toUpperCase()==="SCRIPT"&&Nf.src||new URL("needle-engine.bundle-Cd6HpRz5.umd.cjs",document.baseURI).href),{type:"module"})),this.name="GenerateMeshBVHWorker"}runTask(t,e,i={}){return new Promise((n,s)=>{if(e.getAttribute("position").isInterleavedBufferAttribute||e.index&&e.index.isInterleavedBufferAttribute)throw new Error("GenerateMeshBVHWorker: InterleavedBufferAttribute are not supported for the geometry attributes.");t.onerror=h=>{s(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"}`))},t.onmessage=h=>{const{data:u}=h;if(u.error)s(new Error(u.error)),t.onmessage=null;else if(u.serialized){const{serialized:f,position:p}=u,g=ae.MeshBVH.deserialize(f,e,{setIndex:!1}),y=Object.assign({setBoundingBox:!0},i);if(e.attributes.position.array=p,f.index)if(e.index)e.index.array=f.index;else{const b=new d.BufferAttribute(f.index,1,!1);e.setIndex(b)}y.setBoundingBox&&(e.boundingBox=g.getBoundingBox(new d.Box3)),i.onProgress&&i.onProgress(u.progress),n(g),t.onmessage=null}else i.onProgress&&i.onProgress(u.progress)};const a=e.index?e.index.array:null,l=e.attributes.position.array,c=[l];a&&c.push(a),t.postMessage({index:a,position:l,options:{...i,onProgress:null,includedProgressCallback:!!i.onProgress,groups:[...e.groups]}},c.map(h=>h.buffer).filter(h=>typeof SharedArrayBuffer>"u"||!(h instanceof SharedArrayBuffer)))})}}const uT=Object.freeze(Object.defineProperty({__proto__:null,GenerateMeshBVHWorker:dT},Symbol.toStringTag,{value:"Module"}));exports.$physicsKey=nM;exports.ActionBuilder=fe;exports.ActionCollection=Zw;exports.ActionModel=xi;exports.Addressables=Bv;exports.AlignmentConstraint=fh;exports.AmbientMode=Ia;exports.Animation=Tt;exports.AnimationCurve=Ah;exports.AnimationExtension=af;exports.AnimationTrackHandler=Ef;exports.AnimationUtils=Ha;exports.Animator=xt;exports.AnimatorConditionMode=oo;exports.AnimatorController=Gi;exports.AnimatorControllerParameterType=kg;exports.AnimatorStateInfo=Jl;exports.Antialiasing=Dh;exports.Application=vn;exports.AssetDatabase=ev;exports.AssetReference=te;exports.AudioExtension=Wr;exports.AudioListener=Os;exports.AudioSource=qi;exports.AudioTrackHandler=tl;exports.Avatar=ko;exports.AvatarBlink_Simple=zr;exports.AvatarEyeLook_Rotation=jg;exports.AvatarLoader=$x;exports.AvatarMarker=At;exports.AvatarModel=Jy;exports.Avatar_Brain_LookAt=Uc;exports.Avatar_MouthShapes=yh;exports.Avatar_MustacheShake=Dg;exports.Avatar_POI=As;exports.Axes=xa;exports.AxesHelper=rl;exports.BUILD_TIME=tg;exports.BaseUIComponent=Qi;exports.BasicIKConstraint=Fg;exports.BehaviorExtension=fy;exports.BehaviorModel=vt;exports.BloomEffect=wf;exports.BoxCollider=tf;exports.BoxGizmo=Xr;exports.BoxHelperComponent=is;exports.Button=Ws;exports.ButtonsFactory=zn;exports.CallDirection=_w;exports.CallInfo=Ps;exports.Camera=ri;exports.CameraTargetReachedEvent=Fc;exports.Canvas=Ja;exports.CanvasGroup=Ro;exports.CapsuleCollider=Ls;exports.ChangeMaterialOnClick=sy;exports.ChangeTransformOnClick=Gr;exports.CharacterController=Nr;exports.CharacterControllerInput=js;exports.ChromaticAberration=Ih;exports.CircularBuffer=ki;exports.ClearFlags=Co;exports.ClipExtrapolation=An;exports.Collider=di;exports.Collision=mw;exports.CollisionDetectionMode=Qu;exports.ColorAdjustments=Vo;exports.ColorBySpeedModule=_l;exports.ColorOverLifetimeModule=_f;exports.Component=uP;exports.Component$1=D;exports.ComponentLifecycleEvents=sh;exports.Components=hT;exports.ConnectionEvents=X0;exports.ContactPoint=pw;exports.ContactShadows=_h;exports.Context=X;exports.ContextArgs=K1;exports.ContextEvent=he;exports.ContextRegistry=re;exports.ControlTrackHandler=Tf;exports.CustomBranding=qr;exports.CustomShader=mu;exports.DefaultReflectionMode=ou;exports.Deletable=$g;exports.DeleteBox=Xa;exports.DepthOfField=Pn;exports.DeviceFlag=nf;exports.DocumentExtension=Vx;exports.DragControls=cr;exports.DragMode=Vg;exports.DropListener=Bs;exports.Duplicatable=Gg;exports.EffectWrapper=Gc;exports.EmissionModule=$s;exports.EmphasizeOnClick=hl;exports.EngineLoadingView=Pu;exports.EnvironmentScene=jf;exports.EventList=ye;exports.EventListEvent=Yu;exports.EventSystem=Qt;exports.EventTrigger=of;exports.FieldWithDefault=Bw;exports.FileReference=Ic;exports.FileReferenceSerializer=Uv;exports.FileSpawnModel=MM;exports.File_Event=Sw;exports.FixedJoint=Oy;exports.Fog=ml;exports.FrameEvent=we;exports.GENERATOR=Fu;exports.GameObject=C;exports.Gizmos=$;exports.GltfExport=ey;exports.GltfExportBox=Zg;exports.Gradient=Yr;exports.Graphic=Oh;exports.GraphicRaycaster=Ku;exports.Graphics=Mr;exports.GridHelper=gl;exports.GridLayoutGroup=by;exports.GroundProjectedEnv=os;exports.GroupActionModel=yo;exports.HideFlags=Zu;exports.HideOnStart=Ya;exports.HingeJoint=Rh;exports.HorizontalLayoutGroup=_y;exports.HostData=t1;exports.Image=wl;exports.ImageReference=Dc;exports.ImageReferenceSerializer=Fv;exports.InheritVelocityModule=Ty;exports.Input=$0;exports.InputEventQueue=oi;exports.InputEvents=Re;exports.InputField=Wy;exports.InstanceHandle=Nc;exports.InstancingHandler=Qa;exports.InstancingUtil=Wi;exports.InstantiateEvent=dv;exports.InstantiateIdProvider=bt;exports.InstantiateOptions=xn;exports.Interactable=Ng;exports.JoinedRoomResponse=MC;exports.KeyEventArgs=mC;exports.Keyframe=ai;exports.LODGroup=Th;exports.LODModel=yl;exports.LeftRoomResponse=OC;exports.Light=pi;exports.LightData=Wv;exports.LimitVelocityOverLifetimeModule=lt;exports.LoadingElementOptions=QE;exports.LogStats=zg;exports.LogType=Mi;exports.LookAt=Gy;exports.LookAtConstraint=Ur;exports.MainModule=It;exports.MarkerType=Ny;exports.MaskableGraphic=kh;exports.Mathf=z;exports.MeshCollider=jo;exports.MeshRenderer=vh;exports.MinMaxCurve=q;exports.MinMaxGradient=Kr;exports.NEKeyboardEvent=Xl;exports.NEPointerEvent=_s;exports.NeedleButtonElement=Zy;exports.NeedleEngineWebComponent=Ky;exports.NeedleMenu=as;exports.NeedlePatchesKey=Rd;exports.NeedleXRController=og;exports.NeedleXRSession=J;exports.NeedleXRSync=K0;exports.NeedleXRUtils=J0;exports.NestedGltf=mf;exports.NetworkConnection=Y0;exports.NetworkedStreamEvents=Nn;exports.NetworkedStreams=gh;exports.Networking=Ry;exports.NewInstanceModel=fv;exports.NoiseModule=be;exports.ObjectRaycaster=Ei;exports.ObjectUtils=Do;exports.OffsetConstraint=Qr;exports.OneEuroFilter=Od;exports.OneEuroFilterXYZ=qm;exports.OpenURL=xl;exports.OrbitControls=ge;exports.Outline=pl;exports.OwnershipEvent=Q0;exports.OwnershipModel=cg;exports.PUBLIC_KEY=ba;exports.Padding=Hr;exports.ParticleBurst=wu;exports.ParticleSubEmitter=Ay;exports.ParticleSystem=Wc;exports.ParticleSystemBaseBehaviour=$o;exports.ParticleSystemRenderer=en;exports.ParticleSystemShapeType=vu;exports.PeerHandle=ja;exports.PeerNetworking=q0;exports.Physics=Ec;exports.PhysicsExtension=py;exports.PhysicsMaterialCombine=ht;exports.PixelationEffect=jh;exports.PlayAnimationOnClick=$c;exports.PlayAudioOnClick=Oo;exports.PlayableDirector=il;exports.PlayerColor=el;exports.PlayerState=yn;exports.PlayerStateEvent=tx;exports.PlayerSync=dy;exports.PlayerView=Nv;exports.PlayerViewManager=$v;exports.PointerEventData=mh;exports.PointerType=Nu;exports.PostProcessingEffect=Ye;exports.PostProcessingEffectOrder=it;exports.PostProcessingHandler=jy;exports.PreliminaryAction=dl;exports.PreliminaryTrigger=Sh;exports.PrimitiveType=Or;exports.Progress=oe;exports.PromiseAllWithErrors=Gm;exports.PromiseErrorResult=Qp;exports.RGBAColor=ie;exports.RapierPhysics=Mu;exports.RawImage=Df;exports.RaycastOptions=es;exports.Rect=nx;exports.RectTransform=wn;exports.ReflectionProbe=zc;exports.RegisteredAnimationInfo=_o;exports.RemoteSkybox=Sf;exports.RenderTexture=Sr;exports.RenderTextureSerializer=hw;exports.Renderer=Ti;exports.RendererData=Vv;exports.RendererLightmap=_u;exports.Rigidbody=ot;exports.RigidbodyConstraints=Ne;exports.RoomEvents=ee;exports.RotationBySpeedModule=Ji;exports.RotationOverLifetimeModule=Cn;exports.SceneLightSettings=fu;exports.SceneSwitcher=Ge;exports.ScreenCapture=Wo;exports.ScreenSpaceAmbientOcclusion=Vs;exports.ScreenSpaceAmbientOcclusionN8=Mn;exports.SendQueue=fn;exports.SerializationContext=vg;exports.SetActiveOnClick=oy;exports.ShadowCatcher=zh;exports.ShapeModule=Ey;exports.SharpeningEffect=Fh;exports.SignalAsset=Rf;exports.SignalReceiver=Gh;exports.SignalReceiverEvent=Wh;exports.SignalTrackHandler=Hc;exports.Size=ix;exports.SizeBySpeedModule=mi;exports.SizeOverLifetimeModule=Zr;exports.SkinnedMeshRenderer=Kg;exports.SmoothFollow=Pf;exports.SpatialGrabRaycaster=Tr;exports.SpatialHtml=Xh;exports.SpatialTrigger=Mf;exports.SpatialTriggerReceiver=Zn;exports.SpectatorCamera=Of;exports.SphereCollider=al;exports.SphereIntersection=ug;exports.SphereOverlapResult=gw;exports.Sprite=Us;exports.SpriteData=Fa;exports.SpriteRenderer=ui;exports.SpriteSheet=Za;exports.StateMachineBehaviour=_P;exports.StreamEndedEvent=Ag;exports.StreamReceivedEvent=yw;exports.SubEmitterSystem=xu;exports.SyncedCamera=Fy;exports.SyncedRoom=On;exports.SyncedTransform=ts;exports.TapGestureTrigger=ay;exports.TeleportTarget=uf;exports.TestRunner=Uy;exports.TestSceneUtils=sT;exports.TestSimulateUserData=zy;exports.Text=Dt;exports.TextBuilder=gy;exports.TextExtension=pf;exports.TextureSheetAnimationModule=jt;exports.TiltShiftEffect=hs;exports.Time=Gv;exports.ToneMappingEffect=Eo;exports.TrackHandler=Hh;exports.TrackType=_i;exports.TrailModule=je;exports.TransformData=We;exports.TransformGizmo=ia;exports.TriggerBuilder=wt;exports.TriggerModel=Po;exports.TypeStore=k;exports.UIRaycastUtils=Eg;exports.UIRootComponent=Ph;exports.USDDocument=ty;exports.USDObject=Et;exports.USDWriter=Vw;exports.USDZExporter=Kn;exports.USDZExporter$1=Ww;exports.USDZText=hr;exports.USDZUIExtension=wy;exports.UriSerializer=dw;exports.UsageMarker=bh;exports.UserJoinedOrLeftRoomModel=kC;exports.VERSION=_n;exports.VariantAction=ny;exports.VelocityOverLifetimeModule=ze;exports.VerticalLayoutGroup=yy;exports.VideoPlayer=rt;exports.ViewDevice=wo;exports.Vignette=ta;exports.VisibilityAction=Ch;exports.Voip=Io;exports.Volume=vl;exports.VolumeParameter=U;exports.VolumeProfile=bf;exports.WaitForFrames=E1;exports.WaitForPromise=zv;exports.WaitForSeconds=Sg;exports.Watch=Es;exports.WebARCameraBackground=Yh;exports.WebARSessionRoot=ns;exports.WebXR=ff;exports.WebXRButtonFactory=Mo;exports.WebXRImageTracking=Xc;exports.WebXRImageTrackingModel=Hs;exports.WebXRPlaneTracking=qs;exports.WebXRTrackedImage=qc;exports.XRControllerFollow=Gs;exports.XRControllerModel=ss;exports.XRControllerMovement=Ai;exports.XRFlag=$i;exports.XRRig=Ff;exports.XRState=Xt;exports.XRStateFlag=Bn;exports.__Ignore=Wx;exports.__internalNotifyObjectDestroyed=ov;exports.activeInHierarchyFieldName=Ts;exports.addAttributeChangeCallback=d0;exports.addComponent=Oi;exports.addCustomExtensionPlugin=XM;exports.addNewComponent=wr;exports.addPatch=Uu;exports.apply=Wu;exports.applyHMRChanges=dP;exports.applyPrototypeExtensions=Pv;exports.beginListenDestroy=uv;exports.beginListenInstantiate=mv;exports.binaryIdentifierCasts=rg;exports.build_scene_functions=Y1;exports.builtinComponentKeyName=tr;exports.calculateProgress01=Yy;exports.clearMessages=RS;exports.colorSerializer=IP;exports.compareAssociation=bv;exports.componentSerializer=Bd;exports.copyTexture=O0;exports.createMotion=rw;exports.debugNet=Jt;exports.debugOwner=Ql;exports.decompressGpuTexture=Xw;exports.deepClone=Jc;exports.delay=Jn;exports.delayForFrames=eh;exports.deserializeObject=nu;exports.destroy=Ri;exports.destroyComponentInstance=kv;exports.determineMimeTypeFromExtension=Cw;exports.disposeObjectResources=Se;exports.disposeStream=$n;exports.editorGuidKeyName=cc;exports.enableSpatialConsole=br;exports.euler=BP;exports.eventListSerializer=NP;exports.exportAsGLTF=aT;exports.findByGuid=xg;exports.findObjectOfType=hh;exports.findObjectsOfType=Ev;exports.findResourceUsers=pg;exports.fitObjectIntoVolume=R0;exports.foreachComponent=Rr;exports.foreachComponentEnumerator=Hu;exports.forward=WS;exports.generateQRCode=f0;exports.generateSeed=pv;exports.getBoundingBox=li;exports.getCameraController=v0;exports.getComponent=jr;exports.getComponentInChildren=ch;exports.getComponentInParent=Lc;exports.getComponents=lh;exports.getComponentsInChildren=sl;exports.getComponentsInParent=Vu;exports.getFormattedDate=Uw;exports.getIconElement=_t;exports.getIconTexture=ym;exports.getLoader=bn;exports.getOrAddComponent=ah;exports.getParam=S;exports.getParentHierarchyPath=qS;exports.getPath=lS;exports.getPeerOptions=xC;exports.getPeerjsInstance=H0;exports.getResourceUserCount=HC;exports.getTempColor=S0;exports.getTempQuaternion=un;exports.getTempVector=V;exports.getUrlParams=Zc;exports.getVisibleInCustomShadowRendering=k0;exports.getWorldDirection=C0;exports.getWorldEuler=Ym;exports.getWorldPosition=Q;exports.getWorldQuaternion=_e;exports.getWorldRotation=Bu;exports.getWorldScale=Ue;exports.hasCommercialLicense=Yn;exports.hasIndieLicense=uh;exports.hasPointerEventComponent=cu;exports.hasProLicense=Qn;exports.hideDebugConsole=L0;exports.imageToCanvas=Qw;exports.instantiate=Er;exports.invokeLoadedImportPluginHooks=Lw;exports.invokeXRSessionEnd=N0;exports.invokeXRSessionStart=z0;exports.isActiveInHierarchy=Tv;exports.isActiveSelf=ol;exports.isAndroidDevice=pS;exports.isAnimationAction=M0;exports.isComponent=fw;exports.isDebugMode=sS;exports.isDesktop=hS;exports.isDestroyed=kr;exports.isDevEnvironment=j;exports.isDisposed=WC;exports.isExporting=oT;exports.isGLTFModel=uw;exports.isHostedOnGlitch=s0;exports.isHotReloadEnabled=wm;exports.isHotReloading=cP;exports.isIPad=uS;exports.isIconElement=Xv;exports.isLocalNetwork=Yt;exports.isMacOS=gS;exports.isMobileDevice=dS;exports.isMozillaXR=mS;exports.isQuest=bS;exports.isResourceTrackingEnabled=iv;exports.isSafari=_S;exports.isUsingInstancing=Gu;exports.isiOS=yS;exports.isiPad=fS;exports.loadAsset=VE;exports.loadSync=Qy;exports.logHierarchy=Xd;exports.lookAtInverse=jS;exports.lookAtObject=th;exports.lookAtScreenPoint=BS;exports.makeId=rS;exports.makeIdFromRandomWords=l0;exports.makeNameSafe=Xi;exports.markAsInstancedRendered=Av;exports.microphonePermissionsGranted=vS;exports.nameof=nS;exports.nameofFactory=r0;exports.objectSerializer=cw;exports.offXRSessionEnd=pC;exports.offXRSessionStart=fC;exports.onAfterRender=aP;exports.onBeforeRender=rP;exports.onClear=sP;exports.onDestroy=oP;exports.onInitialized=Jv;exports.onStart=Mg;exports.onUpdate=ew;exports.onXRSessionEnd=sg;exports.onXRSessionStart=zu;exports.parseSync=Ix;exports.placeOnSurface=E0;exports.postprocessFBXMaterials=Jm;exports.prefix=RP;exports.pushState=a0;exports.randomNumber=aS;exports.registerBinaryType=ag;exports.registerComponent=qu;exports.registerComponentExtension=Xg;exports.registerCustomEffectType=tn;exports.registerExportExtensions=Qg;exports.registerExtensions=yu;exports.registerHotReloadType=iw;exports.registerLoader=ig;exports.registerPrefabProvider=yv;exports.registerPrototypeExtensions=Mv;exports.registerType=r1;exports.relativePathPrefix=h0;exports.removeAttributeChangeCallback=u0;exports.removeComponent=wg;exports.removeCustomImportExtensionType=QM;exports.removePatch=dC;exports.resolveUrl=To;exports.sanitizeString=c0;exports.saveImage=Tx;exports.screenshot=ME;exports.screenshot2=qy;exports.sendDestroyed=gg;exports.serializable=m;exports.serializeObject=wv;exports.serializeable=Br;exports.setActive=uc;exports.setAllowBalloonMessages=y0;exports.setAllowOverlayMessages=PS;exports.setAutoFitEnabled=Hd;exports.setCameraController=Zp;exports.setDestroyed=Dv;exports.setDevEnvironment=tC;exports.setDisposable=fg;exports.setDontDestroy=pa;exports.setOrAddParamsToUrl=Xp;exports.setParam=oS;exports.setParamWithoutReload=Oc;exports.setPeerOptions=SC;exports.setResourceTrackingEnabled=VC;exports.setState=Vm;exports.setVisibleInCustomShadowRendering=Zm;exports.setWorldEuler=Km;exports.setWorldPosition=st;exports.setWorldPositionXYZ=Pr;exports.setWorldQuaternion=Hi;exports.setWorldQuaternionXYZW=Qm;exports.setWorldRotation=P0;exports.setWorldRotationXYZ=ih;exports.setWorldScale=Na;exports.showBalloonError=nh;exports.showBalloonMessage=Ee;exports.showBalloonWarning=me;exports.showDebugConsole=eg;exports.slerp=IS;exports.syncDestroy=oh;exports.syncField=hy;exports.syncInstantiate=yg;exports.textureToCanvas=XS;exports.tryCastBinary=W0;exports.tryDetermineMimetypeFromBinary=Mw;exports.tryDetermineMimetypeFromURL=Pw;exports.tryFindObject=za;exports.tryGetGuid=G0;exports.unregisterHotReloadType=nw;exports.unwatchWrite=Wm;exports.useForAutoFit=w0;exports.validate=St;exports.watchWrite=ju;
1607
+ `),ce(this,gr).innerHTML=ce(this,Vt).innerHTML,ce(this,gr).style.cssText="display: flex; align-items: center; justify-content: center;",ce(this,Vt).innerHTML=ce(this,gr).outerHTML,ce(this,mr).innerHTML=ce(this,Vt).outerHTML,ce(this,mr).prepend(ce(this,yr)),ru(_m,{element:ce(this,mr)}),(n=ce(this,Ua))==null||n.disconnect(),ce(this,Ua)??rn(this,Ua,new MutationObserver(()=>Ol(this,nl,Nx).call(this))),ce(this,Ua).observe(ce(this,Vt),{attributes:!0}),Hp&&console.log("Needle Button updated")},Nx=function(){ce(this,Vt)&&(ce(this,Vt).style.display==="none"?this.style.display="none":this.style.display==="none"&&(this.style.display=""))},Kc=new WeakMap,r(Zy,"observedAttributes",["ar","vr","quicklook"]);typeof window<"u"&&!window.customElements.get(i0)&&window.customElements.define(i0,Zy);const Hl=S("debugavatar");class Jy{constructor(t,e,i,n){r(this,"root");r(this,"head");r(this,"leftHand");r(this,"rigthHand");var s;this.root=t,this.head=e,this.leftHand=i,this.rigthHand=n,(s=this.root)==null||s.traverse(a=>a.layers.set(2))}get isValid(){return this.head!==null&&this.head!==void 0}}class $x{constructor(){r(this,"avatarRegistryUrl",null)}async getOrCreateNewAvatarInstance(t,e){if(!e)return console.error("Can not create avatar: failed to provide id or root object"),null;let i=null;if(typeof e=="string"){if(i=await this.loadAvatar(t,e),!i){const s=new xn;i=C.instantiate(za(e,t.scene),s)}}else i=e;if(!i)return null;const n=this.findAvatar(i);return n.isValid?(Hl&&console.log("[Custom Avatar] valid config",e,Hl?n:""),n):(console.warn("[Custom Avatar] config isn't valid",e,Hl?n:""),null)}async loadAvatar(t,e){if(console.assert(e!=null&&typeof e=="string","Avatar id must not be null"),e.length<=0||!e)return null;if(Hl&&console.log("[Custom Avatar] "+e+", loading..."),e.endsWith(".glb")||(e+=".glb"),this.avatarRegistryUrl===null){const n=await fetch("./"+e);let s=null;if(n.ok){const l=await n.blob();l&&(s=await l.arrayBuffer())}if(!s)return null;const a=await bn().parseSync(t,s,null,0);return(a==null?void 0:a.scene)??null}const i=new H.GLTFLoader;return Og(i,t),new Promise((n,s)=>{const a=this.avatarRegistryUrl+"/"+e;i.load(a,async l=>{await bn().createBuiltinComponents(t,a,l,null,void 0),n(l.scene)},l=>{Hl&&console.log("[Custom Avatar] "+l.loaded/l.total*100+"% loaded of "+l.total/1024+"kB")},l=>{console.error("[Custom Avatar] Error when loading: "+l),n(null)})})}cacheModel(t,e){}findAvatar(t){const e=t;let i=e;i.children.length==1&&(i=t.children[0]);let n=this.findAvatarPart(i,["head"]);const s=this.findAvatarPart(i,["left","hand"]),a=this.findAvatarPart(i,["right","hand"]);if(!n){n=e;const c=new d.Vector3;new d.Box3().setFromObject(n).getSize(c);const h=Math.max(c.x,c.y,c.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 Jy(e,n,s,a)}findAvatarPart(t,e){const i=t.name.toLowerCase();let n=!0;for(const s of e){if(!n)break;i.indexOf(s)===-1&&(n=!1)}if(n)return t;if(t.children)for(const s of t.children){const a=this.findAvatarPart(s,e);if(a)return a}return null}handleCustomAvatarErrors(t){if(!t.ok)throw Error(t.statusText);return t}}class Vx{get extensionName(){return"DocumentExtension"}onAfterBuildDocument(t){}}class Wx{}const hT=Object.freeze(Object.defineProperty({__proto__:null,ActionBuilder:fe,ActionCollection:Zw,ActionModel:xi,AlignmentConstraint:fh,Animation:Tt,AnimationCurve:Ah,AnimationExtension:af,AnimationTrackHandler:Ef,Animator:xt,AnimatorController:Gi,Antialiasing:Dh,AudioExtension:Wr,AudioListener:Os,AudioSource:qi,AudioTrackHandler:tl,Avatar:ko,AvatarBlink_Simple:zr,AvatarEyeLook_Rotation:jg,AvatarLoader:$x,AvatarMarker:At,AvatarModel:Jy,Avatar_Brain_LookAt:Uc,Avatar_MouthShapes:yh,Avatar_MustacheShake:Dg,Avatar_POI:As,AxesHelper:rl,BaseUIComponent:Qi,BasicIKConstraint:Fg,BehaviorExtension:fy,BehaviorModel:vt,BloomEffect:wf,BoxCollider:tf,BoxGizmo:Xr,BoxHelperComponent:is,Button:Ws,CallInfo:Ps,Camera:ri,CameraTargetReachedEvent:Fc,Canvas:Ja,CanvasGroup:Ro,CapsuleCollider:Ls,ChangeMaterialOnClick:sy,ChangeTransformOnClick:Gr,CharacterController:Nr,CharacterControllerInput:js,ChromaticAberration:Ih,Collider:di,ColorAdjustments:Vo,ColorBySpeedModule:_l,ColorOverLifetimeModule:_f,ContactShadows:_h,ControlTrackHandler:Tf,CustomBranding:qr,Deletable:$g,DeleteBox:Xa,DepthOfField:Pn,DeviceFlag:nf,DocumentExtension:Vx,DragControls:cr,DropListener:Bs,Duplicatable:Gg,EffectWrapper:Gc,EmissionModule:$s,EmphasizeOnClick:hl,EnvironmentScene:jf,EventList:ye,EventListEvent:Yu,EventSystem:Qt,EventTrigger:of,FieldWithDefault:Bw,FixedJoint:Oy,Fog:ml,GltfExport:ey,GltfExportBox:Zg,Gradient:Yr,Graphic:Oh,GraphicRaycaster:Ku,GridHelper:gl,GridLayoutGroup:by,GroundProjectedEnv:os,GroupActionModel:yo,HideOnStart:Ya,HingeJoint:Rh,HorizontalLayoutGroup:_y,Image:wl,InheritVelocityModule:Ty,InputField:Wy,InstanceHandle:Nc,InstancingHandler:Qa,Interactable:Ng,Keyframe:ai,LODGroup:Th,LODModel:yl,Light:pi,LimitVelocityOverLifetimeModule:lt,LogStats:zg,LookAt:Gy,LookAtConstraint:Ur,MainModule:It,MaskableGraphic:kh,MeshCollider:jo,MeshRenderer:vh,MinMaxCurve:q,MinMaxGradient:Kr,NeedleMenu:as,NestedGltf:mf,Networking:Ry,NoiseModule:be,ObjectRaycaster:Ei,OffsetConstraint:Qr,OpenURL:xl,OrbitControls:ge,Outline:pl,Padding:Hr,ParticleBurst:wu,ParticleSubEmitter:Ay,ParticleSystem:Wc,ParticleSystemRenderer:en,PhysicsExtension:py,PixelationEffect:jh,PlayAnimationOnClick:$c,PlayAudioOnClick:Oo,PlayableDirector:il,PlayerColor:el,PointerEventData:mh,PostProcessingHandler:jy,PreliminaryAction:dl,PreliminaryTrigger:Sh,RawImage:Df,Rect:nx,RectTransform:wn,ReflectionProbe:zc,RegisteredAnimationInfo:_o,RemoteSkybox:Sf,Renderer:Ti,RendererLightmap:_u,Rigidbody:ot,RotationBySpeedModule:Ji,RotationOverLifetimeModule:Cn,SceneSwitcher:Ge,ScreenCapture:Wo,ScreenSpaceAmbientOcclusion:Vs,ScreenSpaceAmbientOcclusionN8:Mn,SetActiveOnClick:oy,ShadowCatcher:zh,ShapeModule:Ey,SharpeningEffect:Fh,SignalAsset:Rf,SignalReceiver:Gh,SignalReceiverEvent:Wh,SignalTrackHandler:Hc,Size:ix,SizeBySpeedModule:mi,SizeOverLifetimeModule:Zr,SkinnedMeshRenderer:Kg,SmoothFollow:Pf,SpatialGrabRaycaster:Tr,SpatialHtml:Xh,SpatialTrigger:Mf,SpatialTriggerReceiver:Zn,SpectatorCamera:Of,SphereCollider:al,Sprite:Us,SpriteData:Fa,SpriteRenderer:ui,SpriteSheet:Za,SubEmitterSystem:xu,SyncedCamera:Fy,SyncedRoom:On,SyncedTransform:ts,TapGestureTrigger:ay,TeleportTarget:uf,TestRunner:Uy,TestSimulateUserData:zy,Text:Dt,TextBuilder:gy,TextExtension:pf,TextureSheetAnimationModule:jt,TiltShiftEffect:hs,ToneMappingEffect:Eo,TrailModule:je,TransformData:We,TransformGizmo:ia,TriggerBuilder:wt,TriggerModel:Po,UIRaycastUtils:Eg,UIRootComponent:Ph,USDZExporter:Kn,USDZText:hr,USDZUIExtension:wy,UsageMarker:bh,VariantAction:ny,VelocityOverLifetimeModule:ze,VerticalLayoutGroup:yy,VideoPlayer:rt,Vignette:ta,VisibilityAction:Ch,Voip:Io,Volume:vl,VolumeParameter:U,VolumeProfile:bf,WebARCameraBackground:Yh,WebARSessionRoot:ns,WebXR:ff,WebXRImageTracking:Xc,WebXRImageTrackingModel:Hs,WebXRPlaneTracking:qs,WebXRTrackedImage:qc,XRControllerFollow:Gs,XRControllerModel:ss,XRControllerMovement:Ai,XRFlag:$i,XRRig:Ff,XRState:Xt,__Ignore:Wx},Symbol.toStringTag,{value:"Module"})),Ou=S("debugmissingcamera");re.registerCallback(he.MissingCamera,o=>{var l,c,h;Ou&&console.warn("Creating missing camera");const t=o.context.scene,e=new d.PerspectiveCamera;e.name="Default Fallback Camera",t.add(e);const i=new ri;if(i.sourceId=((c=(l=o.files)==null?void 0:l[0])==null?void 0:c.src)??"unknown",i.fieldOfView=35,o.context.domElement.getAttribute("transparent")!=null)i.clearFlags=Co.Uninitialized;else if((h=o.context.domElement.getAttribute("background-image"))!=null&&h.length||o.context.lightmaps.tryGetSkybox(i.sourceId))i.clearFlags=Co.Skybox,o.context.domElement.getAttribute("background-blurriness")===null&&(o.context.scene.backgroundBlurriness=.2);else{if(i.clearFlags=Co.SolidColor,!o.context.domElement.getAttribute("background-color")){let u="#efefef";typeof window!==void 0&&window.matchMedia("(prefers-color-scheme: dark)").matches&&(u="#1f1f1f"),t.background=new d.Color(u)}if(!t.environment){const u=new d.PMREMGenerator$1(o.context.renderer),f=new jf("neutral");t.environment=u.fromScene(f,.025).texture}}const s=wr(e,i,!0);e.position.x=0,e.position.y=1,e.position.z=2;const a=o.context.domElement;return(a==null?void 0:a.cameraControls)!=!1&&Gx(o.context,s),s});re.registerCallback(he.ContextCreated,o=>{if(!o.context.mainCamera){Ou&&console.log("Will not auto-fit because a default camera exists");return}const t=o.context.domElement;if((t==null?void 0:t.cameraControls)==!0){const e=v0(o.context.mainCamera);if((e==null?void 0:e.isCameraController)==!0){Ou&&console.log("Will not auto-fit because a camera controller exists");return}Gx(o.context)}});function Gx(o,t){t=t??o.mainCameraComponent;const e=t==null?void 0:t.gameObject;if(Ou&&console.log("Creating default camera controls",t==null?void 0:t.name),e){const i=ah(e,ge);i.sourceId=(t==null?void 0:t.sourceId)??"unknown";const n=o.domElement.getAttribute("auto-rotate");if(i.autoRotate=n!=null&&n!="0"&&(n==null?void 0:n.toLowerCase())!="false",i.autoRotateSpeed=.5,i.autoFit=!0,i.autoRotate&&n){const s=parseFloat(n);isNaN(s)||(i.autoRotateSpeed=s)}}else console.warn("Missing camera object, can not add orbit controls")}re.registerCallback(he.ContextCreated,o=>{const t=o.context.domElement.getAttribute("autoplay");if(t!==void 0&&(t===""||t==="true"||t==="1")&&o.files)for(const e of o.files)C.foreachComponent(e.file.scene,n=>{if(n.enabled!==!1){if(n instanceof Tt&&n.playAutomatically||n instanceof xt||n instanceof il&&n.playOnAwake===!0)return!0;if(n instanceof Tt)return n.playAutomatically=!0,!0;if(n instanceof il)return n.playOnAwake=!0,!0}},!0)!==!0&&Ha.assignAnimationsFromFile(e.file,{createAnimationComponent:(n,s)=>Oi(n,Tt)})});class dT extends ae.WorkerBase{constructor(){super(new Worker(new URL("/generateMeshBVH.worker-BaNp_Xtp.js",typeof document>"u"?require("url").pathToFileURL(__filename).href:Nf&&Nf.tagName.toUpperCase()==="SCRIPT"&&Nf.src||new URL("needle-engine.bundle-BnOPafb9.umd.cjs",document.baseURI).href),{type:"module"})),this.name="GenerateMeshBVHWorker"}runTask(t,e,i={}){return new Promise((n,s)=>{if(e.getAttribute("position").isInterleavedBufferAttribute||e.index&&e.index.isInterleavedBufferAttribute)throw new Error("GenerateMeshBVHWorker: InterleavedBufferAttribute are not supported for the geometry attributes.");t.onerror=h=>{s(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"}`))},t.onmessage=h=>{const{data:u}=h;if(u.error)s(new Error(u.error)),t.onmessage=null;else if(u.serialized){const{serialized:f,position:p}=u,g=ae.MeshBVH.deserialize(f,e,{setIndex:!1}),y=Object.assign({setBoundingBox:!0},i);if(e.attributes.position.array=p,f.index)if(e.index)e.index.array=f.index;else{const b=new d.BufferAttribute(f.index,1,!1);e.setIndex(b)}y.setBoundingBox&&(e.boundingBox=g.getBoundingBox(new d.Box3)),i.onProgress&&i.onProgress(u.progress),n(g),t.onmessage=null}else i.onProgress&&i.onProgress(u.progress)};const a=e.index?e.index.array:null,l=e.attributes.position.array,c=[l];a&&c.push(a),t.postMessage({index:a,position:l,options:{...i,onProgress:null,includedProgressCallback:!!i.onProgress,groups:[...e.groups]}},c.map(h=>h.buffer).filter(h=>typeof SharedArrayBuffer>"u"||!(h instanceof SharedArrayBuffer)))})}}const uT=Object.freeze(Object.defineProperty({__proto__:null,GenerateMeshBVHWorker:dT},Symbol.toStringTag,{value:"Module"}));exports.$physicsKey=nM;exports.ActionBuilder=fe;exports.ActionCollection=Zw;exports.ActionModel=xi;exports.Addressables=Bv;exports.AlignmentConstraint=fh;exports.AmbientMode=Ia;exports.Animation=Tt;exports.AnimationCurve=Ah;exports.AnimationExtension=af;exports.AnimationTrackHandler=Ef;exports.AnimationUtils=Ha;exports.Animator=xt;exports.AnimatorConditionMode=oo;exports.AnimatorController=Gi;exports.AnimatorControllerParameterType=kg;exports.AnimatorStateInfo=Jl;exports.Antialiasing=Dh;exports.Application=vn;exports.AssetDatabase=ev;exports.AssetReference=te;exports.AudioExtension=Wr;exports.AudioListener=Os;exports.AudioSource=qi;exports.AudioTrackHandler=tl;exports.Avatar=ko;exports.AvatarBlink_Simple=zr;exports.AvatarEyeLook_Rotation=jg;exports.AvatarLoader=$x;exports.AvatarMarker=At;exports.AvatarModel=Jy;exports.Avatar_Brain_LookAt=Uc;exports.Avatar_MouthShapes=yh;exports.Avatar_MustacheShake=Dg;exports.Avatar_POI=As;exports.Axes=xa;exports.AxesHelper=rl;exports.BUILD_TIME=tg;exports.BaseUIComponent=Qi;exports.BasicIKConstraint=Fg;exports.BehaviorExtension=fy;exports.BehaviorModel=vt;exports.BloomEffect=wf;exports.BoxCollider=tf;exports.BoxGizmo=Xr;exports.BoxHelperComponent=is;exports.Button=Ws;exports.ButtonsFactory=zn;exports.CallDirection=_w;exports.CallInfo=Ps;exports.Camera=ri;exports.CameraTargetReachedEvent=Fc;exports.Canvas=Ja;exports.CanvasGroup=Ro;exports.CapsuleCollider=Ls;exports.ChangeMaterialOnClick=sy;exports.ChangeTransformOnClick=Gr;exports.CharacterController=Nr;exports.CharacterControllerInput=js;exports.ChromaticAberration=Ih;exports.CircularBuffer=ki;exports.ClearFlags=Co;exports.ClipExtrapolation=An;exports.Collider=di;exports.Collision=mw;exports.CollisionDetectionMode=Qu;exports.ColorAdjustments=Vo;exports.ColorBySpeedModule=_l;exports.ColorOverLifetimeModule=_f;exports.Component=uP;exports.Component$1=D;exports.ComponentLifecycleEvents=sh;exports.Components=hT;exports.ConnectionEvents=X0;exports.ContactPoint=pw;exports.ContactShadows=_h;exports.Context=X;exports.ContextArgs=K1;exports.ContextEvent=he;exports.ContextRegistry=re;exports.ControlTrackHandler=Tf;exports.CustomBranding=qr;exports.CustomShader=mu;exports.DefaultReflectionMode=ou;exports.Deletable=$g;exports.DeleteBox=Xa;exports.DepthOfField=Pn;exports.DeviceFlag=nf;exports.DocumentExtension=Vx;exports.DragControls=cr;exports.DragMode=Vg;exports.DropListener=Bs;exports.Duplicatable=Gg;exports.EffectWrapper=Gc;exports.EmissionModule=$s;exports.EmphasizeOnClick=hl;exports.EngineLoadingView=Pu;exports.EnvironmentScene=jf;exports.EventList=ye;exports.EventListEvent=Yu;exports.EventSystem=Qt;exports.EventTrigger=of;exports.FieldWithDefault=Bw;exports.FileReference=Ic;exports.FileReferenceSerializer=Uv;exports.FileSpawnModel=MM;exports.File_Event=Sw;exports.FixedJoint=Oy;exports.Fog=ml;exports.FrameEvent=we;exports.GENERATOR=Fu;exports.GameObject=C;exports.Gizmos=$;exports.GltfExport=ey;exports.GltfExportBox=Zg;exports.Gradient=Yr;exports.Graphic=Oh;exports.GraphicRaycaster=Ku;exports.Graphics=Mr;exports.GridHelper=gl;exports.GridLayoutGroup=by;exports.GroundProjectedEnv=os;exports.GroupActionModel=yo;exports.HideFlags=Zu;exports.HideOnStart=Ya;exports.HingeJoint=Rh;exports.HorizontalLayoutGroup=_y;exports.HostData=t1;exports.Image=wl;exports.ImageReference=Dc;exports.ImageReferenceSerializer=Fv;exports.InheritVelocityModule=Ty;exports.Input=$0;exports.InputEventQueue=oi;exports.InputEvents=Re;exports.InputField=Wy;exports.InstanceHandle=Nc;exports.InstancingHandler=Qa;exports.InstancingUtil=Wi;exports.InstantiateEvent=dv;exports.InstantiateIdProvider=bt;exports.InstantiateOptions=xn;exports.Interactable=Ng;exports.JoinedRoomResponse=MC;exports.KeyEventArgs=mC;exports.Keyframe=ai;exports.LODGroup=Th;exports.LODModel=yl;exports.LeftRoomResponse=OC;exports.Light=pi;exports.LightData=Wv;exports.LimitVelocityOverLifetimeModule=lt;exports.LoadingElementOptions=QE;exports.LogStats=zg;exports.LogType=Mi;exports.LookAt=Gy;exports.LookAtConstraint=Ur;exports.MainModule=It;exports.MarkerType=Ny;exports.MaskableGraphic=kh;exports.Mathf=z;exports.MeshCollider=jo;exports.MeshRenderer=vh;exports.MinMaxCurve=q;exports.MinMaxGradient=Kr;exports.NEKeyboardEvent=Xl;exports.NEPointerEvent=_s;exports.NeedleButtonElement=Zy;exports.NeedleEngineWebComponent=Ky;exports.NeedleMenu=as;exports.NeedlePatchesKey=Rd;exports.NeedleXRController=og;exports.NeedleXRSession=J;exports.NeedleXRSync=K0;exports.NeedleXRUtils=J0;exports.NestedGltf=mf;exports.NetworkConnection=Y0;exports.NetworkedStreamEvents=Nn;exports.NetworkedStreams=gh;exports.Networking=Ry;exports.NewInstanceModel=fv;exports.NoiseModule=be;exports.ObjectRaycaster=Ei;exports.ObjectUtils=Do;exports.OffsetConstraint=Qr;exports.OneEuroFilter=Od;exports.OneEuroFilterXYZ=qm;exports.OpenURL=xl;exports.OrbitControls=ge;exports.Outline=pl;exports.OwnershipEvent=Q0;exports.OwnershipModel=cg;exports.PUBLIC_KEY=ba;exports.Padding=Hr;exports.ParticleBurst=wu;exports.ParticleSubEmitter=Ay;exports.ParticleSystem=Wc;exports.ParticleSystemBaseBehaviour=$o;exports.ParticleSystemRenderer=en;exports.ParticleSystemShapeType=vu;exports.PeerHandle=ja;exports.PeerNetworking=q0;exports.Physics=Ec;exports.PhysicsExtension=py;exports.PhysicsMaterialCombine=ht;exports.PixelationEffect=jh;exports.PlayAnimationOnClick=$c;exports.PlayAudioOnClick=Oo;exports.PlayableDirector=il;exports.PlayerColor=el;exports.PlayerState=yn;exports.PlayerStateEvent=tx;exports.PlayerSync=dy;exports.PlayerView=Nv;exports.PlayerViewManager=$v;exports.PointerEventData=mh;exports.PointerType=Nu;exports.PostProcessingEffect=Ye;exports.PostProcessingEffectOrder=it;exports.PostProcessingHandler=jy;exports.PreliminaryAction=dl;exports.PreliminaryTrigger=Sh;exports.PrimitiveType=Or;exports.Progress=oe;exports.PromiseAllWithErrors=Gm;exports.PromiseErrorResult=Qp;exports.RGBAColor=ie;exports.RapierPhysics=Mu;exports.RawImage=Df;exports.RaycastOptions=es;exports.Rect=nx;exports.RectTransform=wn;exports.ReflectionProbe=zc;exports.RegisteredAnimationInfo=_o;exports.RemoteSkybox=Sf;exports.RenderTexture=Sr;exports.RenderTextureSerializer=hw;exports.Renderer=Ti;exports.RendererData=Vv;exports.RendererLightmap=_u;exports.Rigidbody=ot;exports.RigidbodyConstraints=Ne;exports.RoomEvents=ee;exports.RotationBySpeedModule=Ji;exports.RotationOverLifetimeModule=Cn;exports.SceneLightSettings=fu;exports.SceneSwitcher=Ge;exports.ScreenCapture=Wo;exports.ScreenSpaceAmbientOcclusion=Vs;exports.ScreenSpaceAmbientOcclusionN8=Mn;exports.SendQueue=fn;exports.SerializationContext=vg;exports.SetActiveOnClick=oy;exports.ShadowCatcher=zh;exports.ShapeModule=Ey;exports.SharpeningEffect=Fh;exports.SignalAsset=Rf;exports.SignalReceiver=Gh;exports.SignalReceiverEvent=Wh;exports.SignalTrackHandler=Hc;exports.Size=ix;exports.SizeBySpeedModule=mi;exports.SizeOverLifetimeModule=Zr;exports.SkinnedMeshRenderer=Kg;exports.SmoothFollow=Pf;exports.SpatialGrabRaycaster=Tr;exports.SpatialHtml=Xh;exports.SpatialTrigger=Mf;exports.SpatialTriggerReceiver=Zn;exports.SpectatorCamera=Of;exports.SphereCollider=al;exports.SphereIntersection=ug;exports.SphereOverlapResult=gw;exports.Sprite=Us;exports.SpriteData=Fa;exports.SpriteRenderer=ui;exports.SpriteSheet=Za;exports.StateMachineBehaviour=_P;exports.StreamEndedEvent=Ag;exports.StreamReceivedEvent=yw;exports.SubEmitterSystem=xu;exports.SyncedCamera=Fy;exports.SyncedRoom=On;exports.SyncedTransform=ts;exports.TapGestureTrigger=ay;exports.TeleportTarget=uf;exports.TestRunner=Uy;exports.TestSceneUtils=sT;exports.TestSimulateUserData=zy;exports.Text=Dt;exports.TextBuilder=gy;exports.TextExtension=pf;exports.TextureSheetAnimationModule=jt;exports.TiltShiftEffect=hs;exports.Time=Gv;exports.ToneMappingEffect=Eo;exports.TrackHandler=Hh;exports.TrackType=_i;exports.TrailModule=je;exports.TransformData=We;exports.TransformGizmo=ia;exports.TriggerBuilder=wt;exports.TriggerModel=Po;exports.TypeStore=k;exports.UIRaycastUtils=Eg;exports.UIRootComponent=Ph;exports.USDDocument=ty;exports.USDObject=Et;exports.USDWriter=Vw;exports.USDZExporter=Kn;exports.USDZExporter$1=Ww;exports.USDZText=hr;exports.USDZUIExtension=wy;exports.UriSerializer=dw;exports.UsageMarker=bh;exports.UserJoinedOrLeftRoomModel=kC;exports.VERSION=_n;exports.VariantAction=ny;exports.VelocityOverLifetimeModule=ze;exports.VerticalLayoutGroup=yy;exports.VideoPlayer=rt;exports.ViewDevice=wo;exports.Vignette=ta;exports.VisibilityAction=Ch;exports.Voip=Io;exports.Volume=vl;exports.VolumeParameter=U;exports.VolumeProfile=bf;exports.WaitForFrames=E1;exports.WaitForPromise=zv;exports.WaitForSeconds=Sg;exports.Watch=Es;exports.WebARCameraBackground=Yh;exports.WebARSessionRoot=ns;exports.WebXR=ff;exports.WebXRButtonFactory=Mo;exports.WebXRImageTracking=Xc;exports.WebXRImageTrackingModel=Hs;exports.WebXRPlaneTracking=qs;exports.WebXRTrackedImage=qc;exports.XRControllerFollow=Gs;exports.XRControllerModel=ss;exports.XRControllerMovement=Ai;exports.XRFlag=$i;exports.XRRig=Ff;exports.XRState=Xt;exports.XRStateFlag=Bn;exports.__Ignore=Wx;exports.__internalNotifyObjectDestroyed=ov;exports.activeInHierarchyFieldName=Ts;exports.addAttributeChangeCallback=d0;exports.addComponent=Oi;exports.addCustomExtensionPlugin=XM;exports.addNewComponent=wr;exports.addPatch=Uu;exports.apply=Wu;exports.applyHMRChanges=dP;exports.applyPrototypeExtensions=Pv;exports.beginListenDestroy=uv;exports.beginListenInstantiate=mv;exports.binaryIdentifierCasts=rg;exports.build_scene_functions=Y1;exports.builtinComponentKeyName=tr;exports.calculateProgress01=Yy;exports.clearMessages=RS;exports.colorSerializer=IP;exports.compareAssociation=bv;exports.componentSerializer=Bd;exports.copyTexture=O0;exports.createMotion=rw;exports.debugNet=Jt;exports.debugOwner=Ql;exports.decompressGpuTexture=Xw;exports.deepClone=Jc;exports.delay=Jn;exports.delayForFrames=eh;exports.deserializeObject=nu;exports.destroy=Ri;exports.destroyComponentInstance=kv;exports.determineMimeTypeFromExtension=Cw;exports.disposeObjectResources=Se;exports.disposeStream=$n;exports.editorGuidKeyName=cc;exports.enableSpatialConsole=br;exports.euler=BP;exports.eventListSerializer=NP;exports.exportAsGLTF=aT;exports.findByGuid=xg;exports.findObjectOfType=hh;exports.findObjectsOfType=Ev;exports.findResourceUsers=pg;exports.fitObjectIntoVolume=R0;exports.foreachComponent=Rr;exports.foreachComponentEnumerator=Hu;exports.forward=WS;exports.generateQRCode=f0;exports.generateSeed=pv;exports.getBoundingBox=li;exports.getCameraController=v0;exports.getComponent=jr;exports.getComponentInChildren=ch;exports.getComponentInParent=Lc;exports.getComponents=lh;exports.getComponentsInChildren=sl;exports.getComponentsInParent=Vu;exports.getFormattedDate=Uw;exports.getIconElement=_t;exports.getIconTexture=ym;exports.getLoader=bn;exports.getOrAddComponent=ah;exports.getParam=S;exports.getParentHierarchyPath=qS;exports.getPath=lS;exports.getPeerOptions=xC;exports.getPeerjsInstance=H0;exports.getResourceUserCount=HC;exports.getTempColor=S0;exports.getTempQuaternion=un;exports.getTempVector=V;exports.getUrlParams=Zc;exports.getVisibleInCustomShadowRendering=k0;exports.getWorldDirection=C0;exports.getWorldEuler=Ym;exports.getWorldPosition=Q;exports.getWorldQuaternion=_e;exports.getWorldRotation=Bu;exports.getWorldScale=Ue;exports.hasCommercialLicense=Yn;exports.hasIndieLicense=uh;exports.hasPointerEventComponent=cu;exports.hasProLicense=Qn;exports.hideDebugConsole=L0;exports.imageToCanvas=Qw;exports.instantiate=Er;exports.invokeLoadedImportPluginHooks=Lw;exports.invokeXRSessionEnd=N0;exports.invokeXRSessionStart=z0;exports.isActiveInHierarchy=Tv;exports.isActiveSelf=ol;exports.isAndroidDevice=pS;exports.isAnimationAction=M0;exports.isComponent=fw;exports.isDebugMode=sS;exports.isDesktop=hS;exports.isDestroyed=kr;exports.isDevEnvironment=j;exports.isDisposed=WC;exports.isExporting=oT;exports.isGLTFModel=uw;exports.isHostedOnGlitch=s0;exports.isHotReloadEnabled=wm;exports.isHotReloading=cP;exports.isIPad=uS;exports.isIconElement=Xv;exports.isLocalNetwork=Yt;exports.isMacOS=gS;exports.isMobileDevice=dS;exports.isMozillaXR=mS;exports.isQuest=bS;exports.isResourceTrackingEnabled=iv;exports.isSafari=_S;exports.isUsingInstancing=Gu;exports.isiOS=yS;exports.isiPad=fS;exports.loadAsset=VE;exports.loadSync=Qy;exports.logHierarchy=Xd;exports.lookAtInverse=jS;exports.lookAtObject=th;exports.lookAtScreenPoint=BS;exports.makeId=rS;exports.makeIdFromRandomWords=l0;exports.makeNameSafe=Xi;exports.markAsInstancedRendered=Av;exports.microphonePermissionsGranted=vS;exports.nameof=nS;exports.nameofFactory=r0;exports.objectSerializer=cw;exports.offXRSessionEnd=pC;exports.offXRSessionStart=fC;exports.onAfterRender=aP;exports.onBeforeRender=rP;exports.onClear=sP;exports.onDestroy=oP;exports.onInitialized=Jv;exports.onStart=Mg;exports.onUpdate=ew;exports.onXRSessionEnd=sg;exports.onXRSessionStart=zu;exports.parseSync=Ix;exports.placeOnSurface=E0;exports.postprocessFBXMaterials=Jm;exports.prefix=RP;exports.pushState=a0;exports.randomNumber=aS;exports.registerBinaryType=ag;exports.registerComponent=qu;exports.registerComponentExtension=Xg;exports.registerCustomEffectType=tn;exports.registerExportExtensions=Qg;exports.registerExtensions=yu;exports.registerHotReloadType=iw;exports.registerLoader=ig;exports.registerPrefabProvider=yv;exports.registerPrototypeExtensions=Mv;exports.registerType=r1;exports.relativePathPrefix=h0;exports.removeAttributeChangeCallback=u0;exports.removeComponent=wg;exports.removeCustomImportExtensionType=QM;exports.removePatch=dC;exports.resolveUrl=To;exports.sanitizeString=c0;exports.saveImage=Tx;exports.screenshot=ME;exports.screenshot2=qy;exports.sendDestroyed=gg;exports.serializable=m;exports.serializeObject=wv;exports.serializeable=Br;exports.setActive=uc;exports.setAllowBalloonMessages=y0;exports.setAllowOverlayMessages=PS;exports.setAutoFitEnabled=Hd;exports.setCameraController=Zp;exports.setDestroyed=Dv;exports.setDevEnvironment=tC;exports.setDisposable=fg;exports.setDontDestroy=pa;exports.setOrAddParamsToUrl=Xp;exports.setParam=oS;exports.setParamWithoutReload=Oc;exports.setPeerOptions=SC;exports.setResourceTrackingEnabled=VC;exports.setState=Vm;exports.setVisibleInCustomShadowRendering=Zm;exports.setWorldEuler=Km;exports.setWorldPosition=st;exports.setWorldPositionXYZ=Pr;exports.setWorldQuaternion=Hi;exports.setWorldQuaternionXYZW=Qm;exports.setWorldRotation=P0;exports.setWorldRotationXYZ=ih;exports.setWorldScale=Na;exports.showBalloonError=nh;exports.showBalloonMessage=Ee;exports.showBalloonWarning=me;exports.showDebugConsole=eg;exports.slerp=IS;exports.syncDestroy=oh;exports.syncField=hy;exports.syncInstantiate=yg;exports.textureToCanvas=XS;exports.tryCastBinary=W0;exports.tryDetermineMimetypeFromBinary=Mw;exports.tryDetermineMimetypeFromURL=Pw;exports.tryFindObject=za;exports.tryGetGuid=G0;exports.unregisterHotReloadType=nw;exports.unwatchWrite=Wm;exports.useForAutoFit=w0;exports.validate=St;exports.watchWrite=ju;