@needle-tools/engine 5.1.11 → 5.1.12

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.
Files changed (46) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/dist/{needle-engine.bundle-ue2Lw4bF.js → needle-engine.bundle-9m-VdGg2.js} +10 -10
  3. package/dist/{needle-engine.bundle-d-dLyN3s.min.js → needle-engine.bundle-BmdWLmLa.min.js} +2 -2
  4. package/dist/{needle-engine.bundle-n5YALNtc.umd.cjs → needle-engine.bundle-DdH96IqH.umd.cjs} +3 -3
  5. package/dist/needle-engine.d.ts +6 -6
  6. package/dist/needle-engine.js +509 -509
  7. package/dist/needle-engine.min.js +1 -1
  8. package/dist/needle-engine.umd.cjs +1 -1
  9. package/lib/engine/api.d.ts +1 -1
  10. package/lib/engine/api.js +1 -1
  11. package/lib/engine/api.js.map +1 -1
  12. package/lib/engine/engine_init.js +2 -2
  13. package/lib/engine/engine_init.js.map +1 -1
  14. package/lib/engine/engine_license.d.ts +7 -7
  15. package/lib/engine/engine_license.js +71 -71
  16. package/lib/engine/engine_license.js.map +1 -1
  17. package/lib/engine/engine_networking_blob.js +3 -3
  18. package/lib/engine/engine_networking_blob.js.map +1 -1
  19. package/lib/engine/engine_utils_qrcode.js +2 -2
  20. package/lib/engine/engine_utils_qrcode.js.map +1 -1
  21. package/lib/engine/webcomponents/needle menu/needle-menu-spatial.js +2 -2
  22. package/lib/engine/webcomponents/needle menu/needle-menu-spatial.js.map +1 -1
  23. package/lib/engine/webcomponents/needle menu/needle-menu.js +5 -5
  24. package/lib/engine/webcomponents/needle menu/needle-menu.js.map +1 -1
  25. package/lib/engine/webcomponents/needle-engine.js +2 -2
  26. package/lib/engine/webcomponents/needle-engine.js.map +1 -1
  27. package/lib/engine/webcomponents/needle-engine.loading.js +2 -2
  28. package/lib/engine/webcomponents/needle-engine.loading.js.map +1 -1
  29. package/lib/engine/xr/TempXRContext.js +2 -2
  30. package/lib/engine/xr/TempXRContext.js.map +1 -1
  31. package/lib/engine-components/export/usdz/USDZExporter.js +4 -4
  32. package/lib/engine-components/export/usdz/USDZExporter.js.map +1 -1
  33. package/package.json +1 -1
  34. package/plugins/common/license.js +4 -4
  35. package/plugins/vite/license.js +4 -4
  36. package/src/engine/api.ts +1 -1
  37. package/src/engine/engine_init.ts +2 -2
  38. package/src/engine/engine_license.ts +68 -68
  39. package/src/engine/engine_networking_blob.ts +3 -3
  40. package/src/engine/engine_utils_qrcode.ts +2 -2
  41. package/src/engine/webcomponents/needle menu/needle-menu-spatial.ts +2 -2
  42. package/src/engine/webcomponents/needle menu/needle-menu.ts +5 -5
  43. package/src/engine/webcomponents/needle-engine.loading.ts +6 -6
  44. package/src/engine/webcomponents/needle-engine.ts +2 -2
  45. package/src/engine/xr/TempXRContext.ts +2 -2
  46. package/src/engine-components/export/usdz/USDZExporter.ts +4 -4
@@ -140,7 +140,7 @@ void main(){
140
140
  #__vconsole .vc-mask {
141
141
  overflow: hidden;
142
142
  }
143
- `,Uo?.prepend(i),s===!0&&A0()<=0&&Z0(),console.log("🌵 Debug console has loaded")}},e.onerror=()=>{console.warn("🌵 Debug console failed to load."+(window.crossOriginIsolated?"This page is using cross-origin isolation, so external scripts can't be loaded.":"")),Fl=!1,ni=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function X1(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("needle-console","🌵 Inspect glTF"),e=()=>document.querySelector("#__vc_plug_"+s._id+" iframe");return s.on("renderTab",function(t){const i=globalThis["needle:codegen_files"];if(!i||i.length===0)return;let n=globalThis["needle:codegen_files"][0];const o=n.indexOf("?");o>-1&&(n=n.substring(0,o));const a=location.protocol+"//"+location.host+location.pathname+"/"+n,l=encodeURIComponent(a);s.fullUrl="https://viewer.needle.tools?inspect&file="+l;var h='<iframe src="" style="width: 100%; height: 99%; border: none;"></iframe>';t(h)}),s.on("show",function(){const t=e();t&&t.src!==s.fullUrl&&(t.src=s.fullUrl)}),s.on("hide",function(){const t=e();t&&(t.src="")}),s.on("addTopBar",function(t){var i=new Array;i.push({name:"Open in new window ↗",onClick:function(n){window.open(s.fullUrl,"_blank"),ni?.hide()}}),i.push({name:"Reload",onClick:function(n){const o=e();o&&(o.src=s.fullUrl)}}),i.push({name:"Fullscreen",onClick:function(n){const o=e();o.requestFullscreen?o.requestFullscreen():o.webkitRequestFullscreen instanceof Function&&o.webkitRequestFullscreen()}}),t(i)}),s}const Rm="padding: 10px; font-family: monospace;",cb="margin-bottom: 10px;",zo="margin-bottom: 10px; margin-top: 15px;",Q1="width: 100%; border-collapse: collapse; border: 1px solid rgba(0,0,0,0.1); table-layout: fixed;",J0="border: 1px solid rgba(0,0,0,0.1); padding: 5px;",Y1=J0,K1=J0+" word-break: break-all;";function Ln(s,e=!1){e&&s.sort((i,n)=>(n.value?1:0)-(i.value?1:0));let t=`<table style='${Q1}'>`;t+="<tbody>";for(const i of s){const n=typeof i.value=="boolean"?i.value?"✅":"❌":i.value;t+=`<tr><td style='${Y1}'>${i.label}</td><td style='${K1}'>${n}</td></tr>`}return t+="</tbody></table>",t}function ew(){try{if(Ku())return"✅"}catch{}return"❌"}function Z1(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("device-utilities","📱 Device Info");return s.on("renderTab",function(e){let t=`<div style='${Rm}'>`;const i=lP();t+=`<h3 style='${cb}'>Device: ${i}</h3>`,t+=Ln([{label:"💻 Desktop",value:exports.DeviceUtilities.isDesktop()},{label:"📱 Mobile Device",value:exports.DeviceUtilities.isMobileDevice()},{label:"🍎 iOS",value:exports.DeviceUtilities.isiOS()},{label:"📱 iPad",value:exports.DeviceUtilities.isiPad()},{label:"🤖 Android",value:exports.DeviceUtilities.isAndroidDevice()},{label:"🦊 Mozilla XR",value:exports.DeviceUtilities.isMozillaXR()},{label:"🌵 Needle App Clip",value:exports.DeviceUtilities.isNeedleAppClip()},{label:"🍏 macOS",value:exports.DeviceUtilities.isMacOS()},{label:"👓 VisionOS",value:exports.DeviceUtilities.isVisionOS()},{label:"🧭 Safari",value:exports.DeviceUtilities.isSafari()},{label:"🕶️ Meta Quest",value:exports.DeviceUtilities.isQuest()},{label:"🔗 QuickLook AR Support",value:exports.DeviceUtilities.supportsQuickLookAR()}],!0);const n=[],o=exports.DeviceUtilities.getiOSVersion();o&&n.push({label:"🍎 iOS Version",value:o});const r=exports.DeviceUtilities.getChromeVersion();r&&n.push({label:"🌐 Chrome Version",value:r});const a=exports.DeviceUtilities.getSafariVersion();a&&n.push({label:"🧭 Safari Version",value:a}),n.length>0&&(t+=Ln(n,!1)),t+="</div>",t+=`<div style='${Rm} margin-top: 20px;'>`,t+=`<h3 style='${cb}'>User Agent Info</h3>`;const l=[{label:"User Agent",value:navigator.userAgent},{label:"Platform",value:navigator.platform},{label:"App Version",value:navigator.appVersion},{label:"User Agent Data",value:navigator.userAgentData?`Platform: ${navigator.userAgentData.platform}, Mobile: ${navigator.userAgentData.mobile}`:"Not supported"},{label:"WebXR",value:"xr"in navigator?"✅":"❌"},{label:"WebGPU",value:"gpu"in navigator?"✅":"❌"},{label:"WebGL 2",value:ew()}];t+=Ln(l,!1),t+="</div>",e(t)}),s}function J1(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("graphics-info","🎨 Graphics Info");return s.on("renderTab",async function(e){let t=`<div style='${Rm}'>`;const i=eP();i.length>0&&(t+=`<h3 style='${zo}'>General GPU Info</h3>`,t+=Ln(i,!1));const n=iP();n.length>0&&(t+=`<h3 style='${zo}'>WebGL</h3>`,t+=Ln(n,!1));const o=nP();o.length>0&&(t+=`<h3 style='${zo}'>WebGL 2 Features</h3>`,t+=Ln(o,!1));const r=sP();r.length>0&&(t+=`<h3 style='${zo}'>WebGL Limits</h3>`,t+=Ln(r,!1));const a=oP();a.length>0&&(t+=`<h3 style='${zo}'>Texture Formats</h3>`,t+=Ln(a,!1));const l=await rP();if(l.length>0&&(t+=`<h3 style='${zo}'>WebGPU</h3>`,t+=Ln(l,!1)),exports.DeviceUtilities.isSafari()){const h=aP();h.length>0&&(t+=`<h3 style='${zo}'>Safari GPU Info</h3>`,t+=Ln(h,!1))}t+="</div>",e(t)}),s}function eP(){const s=[],e=window.devicePixelRatio;s.push({label:"Device Pixel Ratio",value:e.toString()}),s.push({label:"Width (px)",value:(window.innerWidth*e).toString()}),s.push({label:"Height (px)",value:(window.innerHeight*e).toString()});const i=exports.DeviceUtilities.isMobileDevice()?150:96,n=screen.width/i,o=screen.height/i,r=n*2.54,a=o*2.54;s.push({label:"Estimated Width (cm)",value:r.toFixed(1)}),s.push({label:"Estimated Height (cm)",value:a.toFixed(1)});const l=tw();if(l){s.push({label:"GPU",value:l.renderer}),s.push({label:"Driver",value:l.vendor}),s.push({label:"ANGLE",value:l.angle||"Not detected"});const h=tP(l.renderer);h&&(h.manufacturer&&s.push({label:"Manufacturer",value:h.manufacturer}),h.cardVersion&&s.push({label:"Card Version",value:h.cardVersion}),h.brand&&s.push({label:"Brand",value:h.brand}),s.push({label:"Integrated",value:h.integrated?"Yes":"No"}),h.layer&&s.push({label:"WebGL Layer",value:h.layer}))}return s}function tP(s){if(!s)return null;const e=(h,d)=>{const u=d.match(h);return u&&u[0]},t=e(/(ANGLE)/g,s)||void 0,i=e(/((NVIDIA|AMD|Intel)[^\d]*[^\s]+)/,s)||s,n=i.split(" ");n.shift();const o=e(/(NVIDIA|AMD|Intel)/g,i)||void 0,r=n.length>0?n.pop():void 0,a=n.length>0?n.join(" "):void 0;return{manufacturer:o,cardVersion:r,brand:a,integrated:o==="Intel",layer:t,card:i}}function iP(){const s=[],e=tw();return e&&(s.push({label:"📊 WebGL Version",value:e.version}),s.push({label:"🎮 WebGL 2 Available",value:ew()})),s}function nP(){const s=[];try{const e=Ku();if(!e)return s;s.push({label:"Float Color Buffer",value:e.getExtension("EXT_color_buffer_float")?"✅":"❌"}),s.push({label:"Anisotropic Filtering",value:e.getExtension("EXT_texture_filter_anisotropic")?"✅":"❌"}),s.push({label:"Float Texture Linear",value:e.getExtension("OES_texture_float_linear")?"✅":"❌"}),s.push({label:"S3TC Compression",value:e.getExtension("WEBGL_compressed_texture_s3tc")?"✅":"❌"}),s.push({label:"ETC Compression",value:e.getExtension("WEBGL_compressed_texture_etc")?"✅":"❌"}),s.push({label:"PVRTC Compression",value:e.getExtension("WEBGL_compressed_texture_pvrtc")?"✅":"❌"}),s.push({label:"ASTC Compression",value:e.getExtension("WEBGL_compressed_texture_astc")?"✅":"❌"})}catch{}return s}function sP(){const s=[];try{const e=K0();if(!e)return s;const t=e instanceof WebGL2RenderingContext;s.push({label:"📏 Max Texture Size",value:e.getParameter(e.MAX_TEXTURE_SIZE).toString()}),s.push({label:"🎨 Max Renderbuffer Size",value:e.getParameter(e.MAX_RENDERBUFFER_SIZE).toString()}),s.push({label:"🔗 Max Vertex Attribs",value:e.getParameter(e.MAX_VERTEX_ATTRIBS).toString()}),s.push({label:"🎯 Max Texture Units",value:e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS).toString()}),t&&(s.push({label:"⚡ Max Samples",value:e.getParameter(e.MAX_SAMPLES).toString()}),s.push({label:"🔄 Max Uniform Buffer Bindings",value:e.getParameter(e.MAX_UNIFORM_BUFFER_BINDINGS).toString()}),s.push({label:"📐 Max 3D Texture Size",value:e.getParameter(e.MAX_3D_TEXTURE_SIZE).toString()}))}catch{}return s}function oP(){const s=[];try{_u()&&(s.push({label:"WebGL 1 RGBA",value:"✅"}),s.push({label:"WebGL 1 RGB",value:"✅"}));const t=Ku();t&&(s.push({label:"WebGL 2 RGBA32F",value:t.getExtension("EXT_color_buffer_float")?"✅":"❌"}),s.push({label:"WebGL 2 RGB32F",value:t.getExtension("EXT_color_buffer_float")?"✅":"❌"}),s.push({label:"WebGL 2 R11F_G11F_B10F",value:"✅"}),s.push({label:"WebGL 2 RGB565",value:"✅"}),s.push({label:"WebGL 2 RGB5_A1",value:"✅"}),s.push({label:"WebGL 2 RGBA4444",value:"✅"}))}catch{}return s}async function rP(){const s=[];if(!("gpu"in navigator))return s.push({label:"🚀 WebGPU Support",value:"❌ Not supported"}),s;s.push({label:"🚀 WebGPU Support",value:"✅ Supported"});try{const e=await navigator.gpu.requestAdapter();if(!e)return s.push({label:"🎯 Adapter",value:"No adapter available"}),s;s.push({label:"🎯 Adapter",value:e.name||"Unknown Adapter"});const t=await e.requestDevice();s.push({label:"🔧 Device",value:t.label||"WebGPU Device"}),s.push({label:"📏 Max Texture 2D",value:t.limits.maxTextureDimension2D.toString()}),s.push({label:"📐 Max Texture 3D",value:t.limits.maxTextureDimension3D.toString()}),s.push({label:"📊 Max Texture Array Layers",value:t.limits.maxTextureArrayLayers.toString()}),s.push({label:"💾 Max Buffer Size",value:`${(t.limits.maxBufferSize/1024/1024).toFixed(1)}MB`}),s.push({label:"🔗 Max Bind Groups",value:t.limits.maxBindGroups.toString()})}catch(e){s.push({label:"❌ Error",value:e.message})}return s}function tw(){try{const s=K0();if(!s)return null;const e=s.getExtension("WEBGL_debug_renderer_info"),t=e?s.getParameter(e.UNMASKED_RENDERER_WEBGL):s.getParameter(s.RENDERER),i=e?s.getParameter(e.UNMASKED_VENDOR_WEBGL):s.getParameter(s.VENDOR),n=s.getParameter(s.VERSION);let o;if(t&&t.includes("ANGLE")){const r=t.match(/ANGLE \(([^)]+)\)/);r&&(o=r[1])}return{renderer:t,vendor:i,version:n,angle:o}}catch{return null}}function aP(){const s=[];try{const e=_u();if(e){const t=e.getExtension("WEBGL_debug_renderer_info");if(t){const i=e.getParameter(t.UNMASKED_RENDERER_WEBGL);i&&i.includes("Apple")&&s.push({label:"🍎 Apple GPU",value:i})}}}catch{}try{const e=_u();e&&(e.getSupportedExtensions()||[]).includes("WEBGL_compressed_texture_pvrtc")&&s.push({label:"🗜️ PVRTC Support",value:"✅"})}catch{}return s}function lP(){return exports.DeviceUtilities.isQuest()?"Meta Quest":exports.DeviceUtilities.isVisionOS()?"Vision Pro":exports.DeviceUtilities.isiOS()?exports.DeviceUtilities.isiPad()?"iPad":"iPhone/iPod":exports.DeviceUtilities.isAndroidDevice()?"Android Device":exports.DeviceUtilities.isMozillaXR()?"Mozilla XR Browser":exports.DeviceUtilities.isNeedleAppClip()?"Needle App Clip":exports.DeviceUtilities.isMacOS()?"Mac":exports.DeviceUtilities.isDesktop()?"Desktop PC":"Unknown Device"}function cP(){const s=document.querySelector("#__vconsole .vc-switch");return s||null}function hP(){const s=document.querySelector("#__vconsole");return s||null}const Kh=x("debugtypes");class dP{_types=new Map;_reverseTypes=new Map;_lazyLoaders=new Map;constructor(){Kh&&console.warn("TypeStore: Created",this)}add(e,t){Kh&&console.warn("ADD TYPE",e);const i=this._types.get(e);i?Kh&&i!==t&&console.warn("Type name exists multiple times in your project and may lead to runtime errors:",e):(this._types.set(e,t),this._reverseTypes.set(t,e))}addLazy(e,t){this._types.has(e)||this._lazyLoaders.set(e,t)}get(e){return this._types.get(e)||null}async getAsync(e){const t=this._types.get(e);if(t)return t;const i=this._lazyLoaders.get(e);if(i){Kh&&console.warn("LAZY LOAD TYPE",e);const n=await i();return this.add(e,n),this._lazyLoaders.delete(e),n}return null}getKey(e){return this._reverseTypes.get(e)||null}}const uP=Symbol("BuiltInType"),M=new dP,qg=function(s){M.get(s.name)||M.add(s.name,s)};class fP{context;mixers=[];constructor(e){this.context=e}onDestroy(){this.mixers.forEach(e=>e.stopAllAction()),this.mixers.length=0}registerAnimationMixer(e){if(!e){console.warn("AnimationsRegistry.registerAnimationMixer called with null or undefined mixer");return}this.mixers.includes(e)||this.mixers.push(e)}unregisterAnimationMixer(e){if(!e){console.warn("AnimationsRegistry.unregisterAnimationMixer called with null or undefined mixer");return}const t=this.mixers.indexOf(e);t!==-1&&this.mixers.splice(t,1)}}exports.AnimationUtils=void 0;(s=>{function e(d,u){const f=d.getRoot();return f&&(f.userData.static||f.matrixAutoUpdate===!1||f.matrixWorldAutoUpdate===!1)?((u===!0||u===void 0&&E())&&console.warn(`AnimationUtils: The root object (${f.name||f.type}) of this AnimationAction has matrixAutoUpdate or matrixWorldAutoUpdate set to false. This may prevent the animation from working correctly. If the object is marked as static, try to change it to dynamic.`,{static:f.userData.static,name:f.userData.name,tag:f.userData.tag,matrixAutoUpdate:f.matrixAutoUpdate,matrixWorldAutoUpdate:f.matrixWorldAutoUpdate}),!1):!0}s.testIfRootCanAnimate=e;function t(d){const u=d._actions;return u||null}s.tryGetActionsFromMixer=t;function i(d,u){if(u||(u=new Array),d)d.animations&&u.push(...d.animations);else return u;if(d.children)for(const f of d.children)i(f,u);return u}s.tryGetAnimationClipsFromObjectHierarchy=i;const n=Symbol("objectIsAnimatedData");function o(d,u,f){if(!d)return;if(d[n]===void 0){if(!f)return;d[n]=new Set}const m=d[n];f?m.add(u):m.has(u)&&m.delete(u)}s.setObjectAnimated=o;function r(d){if(!d)return!1;const u=d[n];return u!==void 0&&u.size>0}s.getObjectAnimated=r;function a(d){if(!d||!d.animations)return console.debug("No animations found in file"),null;const u="scene"in d?d.scene:d,f=new Array;for(let g=0;g<d.animations.length;g++){const v=d.animations[g];if(!v.tracks||v.tracks.length<=0){console.warn("Animation has no tracks");continue}for(const y in v.tracks){const _=v.tracks[y],b=c.PropertyBinding.parseTrackName(_.name);let w=c.PropertyBinding.findNode(u,b.nodeName);if(!w){const k=_.__objectName??_.name.substring(0,_.name.indexOf("."));if(w=u.getObjectByProperty("uuid",k),!w)continue}let P=m(w)||m(u);if(!P){const k=M.get("Animation");if(P=u.addComponent(k),!P){console.error("Failed creating Animation component: No 'Animation' component found in TypeStore");break}}f.push(P),P.addClip&&P.addClip(v)}}return f;function m(g){if(!g)return null;const v=g.userData?.components;if(v&&v.length>0)for(let y=0;y<v.length;y++){const _=v[y];if(_.isAnimationComponent===!0)return _}return m(g.parent)}}s.autoplayAnimations=a;function l(){return new c.AnimationClip("empty",0,[])}s.emptyClip=l;function h(d){const u=d?.duration??.3;let f={x:1,y:1,z:1};d?.scale!==void 0&&(typeof d.scale=="number"?f={x:d.scale,y:d.scale,z:d.scale}:f=d.scale);const m=d?.type??"linear",g=d?.scaleFactor??1.2,v=new Array,y=new Array;switch(m){case"linear":v.push(0,u),y.push(f.x,f.y,f.z,f.x*g,f.y*g,f.z*g);break;case"spring":v.push(0,u*.3,u*.5,u*.7,u*.9,u),y.push(f.x,f.y,f.z,f.x*g,f.y*g,f.z*g,f.x*.9,f.y*.9,f.z*.9,f.x*1.05,f.y*1.05,f.z*1.05,f.x*.98,f.y*.98,f.z*.98,f.x,f.y,f.z);break}const _=new c.KeyframeTrack(".scale",v,y);return new c.AnimationClip("scale",v[v.length-1],[_])}s.createScaleClip=h})(exports.AnimationUtils||(exports.AnimationUtils={}));const Ge=function(s){return p(s)},p=function(s){if(s===void 0&&(s=null),!Array.isArray(s))s=hb(s);else for(let e=0;e<s.length;e++){const t=s[e];s[e]=hb(t)}return function(e,t){if(!e){const n=typeof t=="string"?t:t.name;console.warn(`@serializable without a target at '${n}'.`);return}typeof t!="string"&&(t=t.name),Object.getOwnPropertyDescriptor(e,"$serializedTypes")||(e.$serializedTypes={});const i=e.$serializedTypes=e.$serializedTypes||{};i[t]=s}};function hb(s){switch(s?.prototype?.constructor?.name){case"Number":case"String":case"Boolean":return null}return s}const db=x("debugcomponentevents");class Zu{static eventListeners=new Map;static addComponentLifecylceEventListener(e,t){this.eventListeners.has(e)&&this.eventListeners.set(e,[]);let i=this.eventListeners.get(e);i||(i=[]),i.push(t),this.eventListeners.set(e,i),db&&console.log("Added event listener for "+e,this.eventListeners)}static removeComponentLifecylceEventListener(e,t){const i=this.eventListeners.get(e);if(!i)return;const n=i.indexOf(t);n<0||i.splice(n,1)}static dispatchComponentLifecycleEvent(e,t){const i=this.eventListeners.get(e);if(db&&console.log("Dispatching event "+e,i),!!i)for(const n of i)n(t)}}const iw=x("debugdefines");Co('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";');Co('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";');Co('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";');Co('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');Co('globalThis["__NEEDLE_ENGINE_VERSION__"] = "5.1.11";');Co('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');Co('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Thu Aug 13 2026 12:42:37 GMT+0000 (Coordinated Universal Time)";');Co('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const Qt="5.1.11",Va="undefined",Ic="Thu Aug 13 2026 12:42:37 GMT+0000 (Coordinated Universal Time)";iw&&console.log(`Engine version: ${Qt} (generator: ${Va})
143
+ `,Uo?.prepend(i),s===!0&&A0()<=0&&Z0(),console.log("🌵 Debug console has loaded")}},e.onerror=()=>{console.warn("🌵 Debug console failed to load."+(window.crossOriginIsolated?"This page is using cross-origin isolation, so external scripts can't be loaded.":"")),Fl=!1,ni=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function X1(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("needle-console","🌵 Inspect glTF"),e=()=>document.querySelector("#__vc_plug_"+s._id+" iframe");return s.on("renderTab",function(t){const i=globalThis["needle:codegen_files"];if(!i||i.length===0)return;let n=globalThis["needle:codegen_files"][0];const o=n.indexOf("?");o>-1&&(n=n.substring(0,o));const a=location.protocol+"//"+location.host+location.pathname+"/"+n,l=encodeURIComponent(a);s.fullUrl="https://viewer.needle.tools?inspect&file="+l;var h='<iframe src="" style="width: 100%; height: 99%; border: none;"></iframe>';t(h)}),s.on("show",function(){const t=e();t&&t.src!==s.fullUrl&&(t.src=s.fullUrl)}),s.on("hide",function(){const t=e();t&&(t.src="")}),s.on("addTopBar",function(t){var i=new Array;i.push({name:"Open in new window ↗",onClick:function(n){window.open(s.fullUrl,"_blank"),ni?.hide()}}),i.push({name:"Reload",onClick:function(n){const o=e();o&&(o.src=s.fullUrl)}}),i.push({name:"Fullscreen",onClick:function(n){const o=e();o.requestFullscreen?o.requestFullscreen():o.webkitRequestFullscreen instanceof Function&&o.webkitRequestFullscreen()}}),t(i)}),s}const Rm="padding: 10px; font-family: monospace;",cb="margin-bottom: 10px;",zo="margin-bottom: 10px; margin-top: 15px;",Q1="width: 100%; border-collapse: collapse; border: 1px solid rgba(0,0,0,0.1); table-layout: fixed;",J0="border: 1px solid rgba(0,0,0,0.1); padding: 5px;",Y1=J0,K1=J0+" word-break: break-all;";function Ln(s,e=!1){e&&s.sort((i,n)=>(n.value?1:0)-(i.value?1:0));let t=`<table style='${Q1}'>`;t+="<tbody>";for(const i of s){const n=typeof i.value=="boolean"?i.value?"✅":"❌":i.value;t+=`<tr><td style='${Y1}'>${i.label}</td><td style='${K1}'>${n}</td></tr>`}return t+="</tbody></table>",t}function ew(){try{if(Ku())return"✅"}catch{}return"❌"}function Z1(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("device-utilities","📱 Device Info");return s.on("renderTab",function(e){let t=`<div style='${Rm}'>`;const i=lP();t+=`<h3 style='${cb}'>Device: ${i}</h3>`,t+=Ln([{label:"💻 Desktop",value:exports.DeviceUtilities.isDesktop()},{label:"📱 Mobile Device",value:exports.DeviceUtilities.isMobileDevice()},{label:"🍎 iOS",value:exports.DeviceUtilities.isiOS()},{label:"📱 iPad",value:exports.DeviceUtilities.isiPad()},{label:"🤖 Android",value:exports.DeviceUtilities.isAndroidDevice()},{label:"🦊 Mozilla XR",value:exports.DeviceUtilities.isMozillaXR()},{label:"🌵 Needle App Clip",value:exports.DeviceUtilities.isNeedleAppClip()},{label:"🍏 macOS",value:exports.DeviceUtilities.isMacOS()},{label:"👓 VisionOS",value:exports.DeviceUtilities.isVisionOS()},{label:"🧭 Safari",value:exports.DeviceUtilities.isSafari()},{label:"🕶️ Meta Quest",value:exports.DeviceUtilities.isQuest()},{label:"🔗 QuickLook AR Support",value:exports.DeviceUtilities.supportsQuickLookAR()}],!0);const n=[],o=exports.DeviceUtilities.getiOSVersion();o&&n.push({label:"🍎 iOS Version",value:o});const r=exports.DeviceUtilities.getChromeVersion();r&&n.push({label:"🌐 Chrome Version",value:r});const a=exports.DeviceUtilities.getSafariVersion();a&&n.push({label:"🧭 Safari Version",value:a}),n.length>0&&(t+=Ln(n,!1)),t+="</div>",t+=`<div style='${Rm} margin-top: 20px;'>`,t+=`<h3 style='${cb}'>User Agent Info</h3>`;const l=[{label:"User Agent",value:navigator.userAgent},{label:"Platform",value:navigator.platform},{label:"App Version",value:navigator.appVersion},{label:"User Agent Data",value:navigator.userAgentData?`Platform: ${navigator.userAgentData.platform}, Mobile: ${navigator.userAgentData.mobile}`:"Not supported"},{label:"WebXR",value:"xr"in navigator?"✅":"❌"},{label:"WebGPU",value:"gpu"in navigator?"✅":"❌"},{label:"WebGL 2",value:ew()}];t+=Ln(l,!1),t+="</div>",e(t)}),s}function J1(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("graphics-info","🎨 Graphics Info");return s.on("renderTab",async function(e){let t=`<div style='${Rm}'>`;const i=eP();i.length>0&&(t+=`<h3 style='${zo}'>General GPU Info</h3>`,t+=Ln(i,!1));const n=iP();n.length>0&&(t+=`<h3 style='${zo}'>WebGL</h3>`,t+=Ln(n,!1));const o=nP();o.length>0&&(t+=`<h3 style='${zo}'>WebGL 2 Features</h3>`,t+=Ln(o,!1));const r=sP();r.length>0&&(t+=`<h3 style='${zo}'>WebGL Limits</h3>`,t+=Ln(r,!1));const a=oP();a.length>0&&(t+=`<h3 style='${zo}'>Texture Formats</h3>`,t+=Ln(a,!1));const l=await rP();if(l.length>0&&(t+=`<h3 style='${zo}'>WebGPU</h3>`,t+=Ln(l,!1)),exports.DeviceUtilities.isSafari()){const h=aP();h.length>0&&(t+=`<h3 style='${zo}'>Safari GPU Info</h3>`,t+=Ln(h,!1))}t+="</div>",e(t)}),s}function eP(){const s=[],e=window.devicePixelRatio;s.push({label:"Device Pixel Ratio",value:e.toString()}),s.push({label:"Width (px)",value:(window.innerWidth*e).toString()}),s.push({label:"Height (px)",value:(window.innerHeight*e).toString()});const i=exports.DeviceUtilities.isMobileDevice()?150:96,n=screen.width/i,o=screen.height/i,r=n*2.54,a=o*2.54;s.push({label:"Estimated Width (cm)",value:r.toFixed(1)}),s.push({label:"Estimated Height (cm)",value:a.toFixed(1)});const l=tw();if(l){s.push({label:"GPU",value:l.renderer}),s.push({label:"Driver",value:l.vendor}),s.push({label:"ANGLE",value:l.angle||"Not detected"});const h=tP(l.renderer);h&&(h.manufacturer&&s.push({label:"Manufacturer",value:h.manufacturer}),h.cardVersion&&s.push({label:"Card Version",value:h.cardVersion}),h.brand&&s.push({label:"Brand",value:h.brand}),s.push({label:"Integrated",value:h.integrated?"Yes":"No"}),h.layer&&s.push({label:"WebGL Layer",value:h.layer}))}return s}function tP(s){if(!s)return null;const e=(h,d)=>{const u=d.match(h);return u&&u[0]},t=e(/(ANGLE)/g,s)||void 0,i=e(/((NVIDIA|AMD|Intel)[^\d]*[^\s]+)/,s)||s,n=i.split(" ");n.shift();const o=e(/(NVIDIA|AMD|Intel)/g,i)||void 0,r=n.length>0?n.pop():void 0,a=n.length>0?n.join(" "):void 0;return{manufacturer:o,cardVersion:r,brand:a,integrated:o==="Intel",layer:t,card:i}}function iP(){const s=[],e=tw();return e&&(s.push({label:"📊 WebGL Version",value:e.version}),s.push({label:"🎮 WebGL 2 Available",value:ew()})),s}function nP(){const s=[];try{const e=Ku();if(!e)return s;s.push({label:"Float Color Buffer",value:e.getExtension("EXT_color_buffer_float")?"✅":"❌"}),s.push({label:"Anisotropic Filtering",value:e.getExtension("EXT_texture_filter_anisotropic")?"✅":"❌"}),s.push({label:"Float Texture Linear",value:e.getExtension("OES_texture_float_linear")?"✅":"❌"}),s.push({label:"S3TC Compression",value:e.getExtension("WEBGL_compressed_texture_s3tc")?"✅":"❌"}),s.push({label:"ETC Compression",value:e.getExtension("WEBGL_compressed_texture_etc")?"✅":"❌"}),s.push({label:"PVRTC Compression",value:e.getExtension("WEBGL_compressed_texture_pvrtc")?"✅":"❌"}),s.push({label:"ASTC Compression",value:e.getExtension("WEBGL_compressed_texture_astc")?"✅":"❌"})}catch{}return s}function sP(){const s=[];try{const e=K0();if(!e)return s;const t=e instanceof WebGL2RenderingContext;s.push({label:"📏 Max Texture Size",value:e.getParameter(e.MAX_TEXTURE_SIZE).toString()}),s.push({label:"🎨 Max Renderbuffer Size",value:e.getParameter(e.MAX_RENDERBUFFER_SIZE).toString()}),s.push({label:"🔗 Max Vertex Attribs",value:e.getParameter(e.MAX_VERTEX_ATTRIBS).toString()}),s.push({label:"🎯 Max Texture Units",value:e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS).toString()}),t&&(s.push({label:"⚡ Max Samples",value:e.getParameter(e.MAX_SAMPLES).toString()}),s.push({label:"🔄 Max Uniform Buffer Bindings",value:e.getParameter(e.MAX_UNIFORM_BUFFER_BINDINGS).toString()}),s.push({label:"📐 Max 3D Texture Size",value:e.getParameter(e.MAX_3D_TEXTURE_SIZE).toString()}))}catch{}return s}function oP(){const s=[];try{_u()&&(s.push({label:"WebGL 1 RGBA",value:"✅"}),s.push({label:"WebGL 1 RGB",value:"✅"}));const t=Ku();t&&(s.push({label:"WebGL 2 RGBA32F",value:t.getExtension("EXT_color_buffer_float")?"✅":"❌"}),s.push({label:"WebGL 2 RGB32F",value:t.getExtension("EXT_color_buffer_float")?"✅":"❌"}),s.push({label:"WebGL 2 R11F_G11F_B10F",value:"✅"}),s.push({label:"WebGL 2 RGB565",value:"✅"}),s.push({label:"WebGL 2 RGB5_A1",value:"✅"}),s.push({label:"WebGL 2 RGBA4444",value:"✅"}))}catch{}return s}async function rP(){const s=[];if(!("gpu"in navigator))return s.push({label:"🚀 WebGPU Support",value:"❌ Not supported"}),s;s.push({label:"🚀 WebGPU Support",value:"✅ Supported"});try{const e=await navigator.gpu.requestAdapter();if(!e)return s.push({label:"🎯 Adapter",value:"No adapter available"}),s;s.push({label:"🎯 Adapter",value:e.name||"Unknown Adapter"});const t=await e.requestDevice();s.push({label:"🔧 Device",value:t.label||"WebGPU Device"}),s.push({label:"📏 Max Texture 2D",value:t.limits.maxTextureDimension2D.toString()}),s.push({label:"📐 Max Texture 3D",value:t.limits.maxTextureDimension3D.toString()}),s.push({label:"📊 Max Texture Array Layers",value:t.limits.maxTextureArrayLayers.toString()}),s.push({label:"💾 Max Buffer Size",value:`${(t.limits.maxBufferSize/1024/1024).toFixed(1)}MB`}),s.push({label:"🔗 Max Bind Groups",value:t.limits.maxBindGroups.toString()})}catch(e){s.push({label:"❌ Error",value:e.message})}return s}function tw(){try{const s=K0();if(!s)return null;const e=s.getExtension("WEBGL_debug_renderer_info"),t=e?s.getParameter(e.UNMASKED_RENDERER_WEBGL):s.getParameter(s.RENDERER),i=e?s.getParameter(e.UNMASKED_VENDOR_WEBGL):s.getParameter(s.VENDOR),n=s.getParameter(s.VERSION);let o;if(t&&t.includes("ANGLE")){const r=t.match(/ANGLE \(([^)]+)\)/);r&&(o=r[1])}return{renderer:t,vendor:i,version:n,angle:o}}catch{return null}}function aP(){const s=[];try{const e=_u();if(e){const t=e.getExtension("WEBGL_debug_renderer_info");if(t){const i=e.getParameter(t.UNMASKED_RENDERER_WEBGL);i&&i.includes("Apple")&&s.push({label:"🍎 Apple GPU",value:i})}}}catch{}try{const e=_u();e&&(e.getSupportedExtensions()||[]).includes("WEBGL_compressed_texture_pvrtc")&&s.push({label:"🗜️ PVRTC Support",value:"✅"})}catch{}return s}function lP(){return exports.DeviceUtilities.isQuest()?"Meta Quest":exports.DeviceUtilities.isVisionOS()?"Vision Pro":exports.DeviceUtilities.isiOS()?exports.DeviceUtilities.isiPad()?"iPad":"iPhone/iPod":exports.DeviceUtilities.isAndroidDevice()?"Android Device":exports.DeviceUtilities.isMozillaXR()?"Mozilla XR Browser":exports.DeviceUtilities.isNeedleAppClip()?"Needle App Clip":exports.DeviceUtilities.isMacOS()?"Mac":exports.DeviceUtilities.isDesktop()?"Desktop PC":"Unknown Device"}function cP(){const s=document.querySelector("#__vconsole .vc-switch");return s||null}function hP(){const s=document.querySelector("#__vconsole");return s||null}const Kh=x("debugtypes");class dP{_types=new Map;_reverseTypes=new Map;_lazyLoaders=new Map;constructor(){Kh&&console.warn("TypeStore: Created",this)}add(e,t){Kh&&console.warn("ADD TYPE",e);const i=this._types.get(e);i?Kh&&i!==t&&console.warn("Type name exists multiple times in your project and may lead to runtime errors:",e):(this._types.set(e,t),this._reverseTypes.set(t,e))}addLazy(e,t){this._types.has(e)||this._lazyLoaders.set(e,t)}get(e){return this._types.get(e)||null}async getAsync(e){const t=this._types.get(e);if(t)return t;const i=this._lazyLoaders.get(e);if(i){Kh&&console.warn("LAZY LOAD TYPE",e);const n=await i();return this.add(e,n),this._lazyLoaders.delete(e),n}return null}getKey(e){return this._reverseTypes.get(e)||null}}const uP=Symbol("BuiltInType"),M=new dP,qg=function(s){M.get(s.name)||M.add(s.name,s)};class fP{context;mixers=[];constructor(e){this.context=e}onDestroy(){this.mixers.forEach(e=>e.stopAllAction()),this.mixers.length=0}registerAnimationMixer(e){if(!e){console.warn("AnimationsRegistry.registerAnimationMixer called with null or undefined mixer");return}this.mixers.includes(e)||this.mixers.push(e)}unregisterAnimationMixer(e){if(!e){console.warn("AnimationsRegistry.unregisterAnimationMixer called with null or undefined mixer");return}const t=this.mixers.indexOf(e);t!==-1&&this.mixers.splice(t,1)}}exports.AnimationUtils=void 0;(s=>{function e(d,u){const f=d.getRoot();return f&&(f.userData.static||f.matrixAutoUpdate===!1||f.matrixWorldAutoUpdate===!1)?((u===!0||u===void 0&&E())&&console.warn(`AnimationUtils: The root object (${f.name||f.type}) of this AnimationAction has matrixAutoUpdate or matrixWorldAutoUpdate set to false. This may prevent the animation from working correctly. If the object is marked as static, try to change it to dynamic.`,{static:f.userData.static,name:f.userData.name,tag:f.userData.tag,matrixAutoUpdate:f.matrixAutoUpdate,matrixWorldAutoUpdate:f.matrixWorldAutoUpdate}),!1):!0}s.testIfRootCanAnimate=e;function t(d){const u=d._actions;return u||null}s.tryGetActionsFromMixer=t;function i(d,u){if(u||(u=new Array),d)d.animations&&u.push(...d.animations);else return u;if(d.children)for(const f of d.children)i(f,u);return u}s.tryGetAnimationClipsFromObjectHierarchy=i;const n=Symbol("objectIsAnimatedData");function o(d,u,f){if(!d)return;if(d[n]===void 0){if(!f)return;d[n]=new Set}const m=d[n];f?m.add(u):m.has(u)&&m.delete(u)}s.setObjectAnimated=o;function r(d){if(!d)return!1;const u=d[n];return u!==void 0&&u.size>0}s.getObjectAnimated=r;function a(d){if(!d||!d.animations)return console.debug("No animations found in file"),null;const u="scene"in d?d.scene:d,f=new Array;for(let g=0;g<d.animations.length;g++){const v=d.animations[g];if(!v.tracks||v.tracks.length<=0){console.warn("Animation has no tracks");continue}for(const y in v.tracks){const _=v.tracks[y],b=c.PropertyBinding.parseTrackName(_.name);let w=c.PropertyBinding.findNode(u,b.nodeName);if(!w){const k=_.__objectName??_.name.substring(0,_.name.indexOf("."));if(w=u.getObjectByProperty("uuid",k),!w)continue}let P=m(w)||m(u);if(!P){const k=M.get("Animation");if(P=u.addComponent(k),!P){console.error("Failed creating Animation component: No 'Animation' component found in TypeStore");break}}f.push(P),P.addClip&&P.addClip(v)}}return f;function m(g){if(!g)return null;const v=g.userData?.components;if(v&&v.length>0)for(let y=0;y<v.length;y++){const _=v[y];if(_.isAnimationComponent===!0)return _}return m(g.parent)}}s.autoplayAnimations=a;function l(){return new c.AnimationClip("empty",0,[])}s.emptyClip=l;function h(d){const u=d?.duration??.3;let f={x:1,y:1,z:1};d?.scale!==void 0&&(typeof d.scale=="number"?f={x:d.scale,y:d.scale,z:d.scale}:f=d.scale);const m=d?.type??"linear",g=d?.scaleFactor??1.2,v=new Array,y=new Array;switch(m){case"linear":v.push(0,u),y.push(f.x,f.y,f.z,f.x*g,f.y*g,f.z*g);break;case"spring":v.push(0,u*.3,u*.5,u*.7,u*.9,u),y.push(f.x,f.y,f.z,f.x*g,f.y*g,f.z*g,f.x*.9,f.y*.9,f.z*.9,f.x*1.05,f.y*1.05,f.z*1.05,f.x*.98,f.y*.98,f.z*.98,f.x,f.y,f.z);break}const _=new c.KeyframeTrack(".scale",v,y);return new c.AnimationClip("scale",v[v.length-1],[_])}s.createScaleClip=h})(exports.AnimationUtils||(exports.AnimationUtils={}));const Ge=function(s){return p(s)},p=function(s){if(s===void 0&&(s=null),!Array.isArray(s))s=hb(s);else for(let e=0;e<s.length;e++){const t=s[e];s[e]=hb(t)}return function(e,t){if(!e){const n=typeof t=="string"?t:t.name;console.warn(`@serializable without a target at '${n}'.`);return}typeof t!="string"&&(t=t.name),Object.getOwnPropertyDescriptor(e,"$serializedTypes")||(e.$serializedTypes={});const i=e.$serializedTypes=e.$serializedTypes||{};i[t]=s}};function hb(s){switch(s?.prototype?.constructor?.name){case"Number":case"String":case"Boolean":return null}return s}const db=x("debugcomponentevents");class Zu{static eventListeners=new Map;static addComponentLifecylceEventListener(e,t){this.eventListeners.has(e)&&this.eventListeners.set(e,[]);let i=this.eventListeners.get(e);i||(i=[]),i.push(t),this.eventListeners.set(e,i),db&&console.log("Added event listener for "+e,this.eventListeners)}static removeComponentLifecylceEventListener(e,t){const i=this.eventListeners.get(e);if(!i)return;const n=i.indexOf(t);n<0||i.splice(n,1)}static dispatchComponentLifecycleEvent(e,t){const i=this.eventListeners.get(e);if(db&&console.log("Dispatching event "+e,i),!!i)for(const n of i)n(t)}}const iw=x("debugdefines");Co('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";');Co('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";');Co('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";');Co('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');Co('globalThis["__NEEDLE_ENGINE_VERSION__"] = "5.1.12";');Co('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');Co('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Thu Aug 13 2026 13:15:09 GMT+0000 (Coordinated Universal Time)";');Co('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const Qt="5.1.12",Va="undefined",Ic="Thu Aug 13 2026 13:15:09 GMT+0000 (Coordinated Universal Time)";iw&&console.log(`Engine version: ${Qt} (generator: ${Va})
144
144
  Project built at ${Ic}`);const ho=NEEDLE_PUBLIC_KEY,Wn="needle_isActiveInHierarchy",Zo="builtin_components",yc="needle_editor_guid";function Co(s){try{(0,eval)(s)}catch(e){iw&&console.error(e)}}globalThis.NEEDLE_USE_RAPIER=globalThis.NEEDLE_USE_RAPIER!==void 0?globalThis.NEEDLE_USE_RAPIER:!0;globalThis.NEEDLE_USE_POSTPROCESSING=globalThis.NEEDLE_USE_POSTPROCESSING!==void 0?globalThis.NEEDLE_USE_POSTPROCESSING:!0;const Xg={experimentalSmartHierarchyUpdate:!1},yi=Symbol("shadowDomOwner"),pP=x("debugpatch");function Ju(s,e,t,i){const n=pP===e;if(!t&&!i)return;const o=e+"___needle";gP(s,e,t,i);const r=Object.getOwnPropertyDescriptor(s,e),a=s[e];n&&console.log("Patch",s.constructor.name,e,r,a),r?(n&&console.log("Apply patch with existing descriptor",s.constructor.name,e,r),typeof r.value=="function"&&(s[e]=fb(r.value,s,e))):(n&&console.log("Create patch with new property",s.constructor.name,e,r),Object.defineProperty(s,e,{set:function(l){if(typeof l=="function")this[o]=fb(l,s,e);else{const h=this[o];nw(s,e,this,h,l),this[o]=l,sw(s,e,this,h,l)}},get:function(){const l=this[o];return typeof l=="function"&&l[o]?l[o]:l}}))}function mP(s,e,t){const i=Qg(s,e);if(i)for(let n=i.length-1;n>=0;n--){const o=i[n];o.prefix===t&&(o.prefix=null),o.postfix===t&&(o.postfix=null),!o.prefix&&!o.postfix&&i.splice(n,1)}}const ub=Symbol("Needle:Patches:WrappedFunction");function fb(s,e,t){if(s[ub])return s;const i=function(...n){nw(e,t,this,...n);const o=s.apply(this,n);return sw(e,t,this,o,...n),o};return i[ub]=!0,i}const Wd="Needle:Patches";function Am(){return globalThis[Wd]||(globalThis[Wd]=new WeakMap),globalThis[Wd]}function Qg(s,e){const t=Am().get(s);return t?t.get(e):null}function gP(s,e,t,i){let n=Am().get(s);n||(n=new Map,Am().set(s,n));let o=n.get(e);o||(o=[],n.set(e,o)),o.push({prefix:t,postfix:i})}function nw(s,e,t,...i){if(!t)return;const n=Qg(s,e);if(n)for(const o of n)o.prefix?.call(t,...i)}function sw(s,e,t,i,...n){if(!t)return;const o=Qg(s,e);if(o)for(const r of o)r.postfix?.call(t,i,...n)}function yP(s,e){if(typeof window!==void 0&&window.SPECTOR){console.log(window.SPECTOR);const t=new URLSearchParams(window.location.search);if(t.has("spector")){let i=function(){if(n>s.time.frame)return window.requestAnimationFrame(()=>i());const r=o.captureCanvas(e);r&&r instanceof Promise?r.then(()=>o.displayUI()):o.displayUI()};const n=Number.parseInt(t.get("spector")||"0")||0;console.log("Scheduled Spector capture at frame #"+n);const o=new window.SPECTOR.Spector;o.spyCanvases=!0,i();return}else E()&&console.debug("Spector available: Add '?spector=<frame>' to the URL to enable it and capture a frame.")}}function ow(s){const e=s;return!!(e.parser&&e.parser.json)}var ef=(s=>(s[s.None=0]="None",s[s.DontExport=1]="DontExport",s))(ef||{});const bu=Symbol("component-name");function tf(s){return s&&typeof s=="object"&&s.isComponent}const _P=Symbol("object"),bp=new xi(()=>new c.Vector3,20);class rw{_point;_normal;_tangentVelocity;distance;impulse;friction;get point(){return bp.get().set(this._point.x,this._point.y,this._point.z)}get normal(){return bp.get().set(this._normal.x,this._normal.y,this._normal.z)}get tangentVelocity(){return bp.get().set(this._tangentVelocity.x,this._tangentVelocity.y,this._tangentVelocity.z)}constructor(e,t,i,n,o,r){this._point=e,this.distance=t,this._normal=i,this.impulse=n,this.friction=o,this._tangentVelocity=r}}class aw{contacts;constructor(e,t,i){this.me=e,this._collider=t,this._gameObject=t.gameObject,this.contacts=i}me;_collider;get collider(){return this._collider}_gameObject;get gameObject(){return this._gameObject}get rigidBody(){return this.collider?.attachedRigidbody}}class lw{object;collider;constructor(e,t){this.object=e,this.collider=t}}class vu{constructor(e){this.context=e,this.root.style.cssText=`
145
145
  position: absolute;
146
146
  width: 1px; height: 1px;
@@ -880,7 +880,7 @@ Possible solutions:
880
880
  Render:`,{shaders:this.renderer.info.programs?.length,...this.renderer.info.render},`
881
881
  Memory:`,{usedMemory:t,...this.renderer.info.memory},`
882
882
  Renderer:`,{dpr:this.renderer.getPixelRatio(),windowDpr:window.devicePixelRatio,antialias:i.getContextAttributes()?.antialias,samples:i.getParameter(i.SAMPLES),resolution:`${this.renderer.domElement.width}x${this.renderer.domElement.height}`},`
883
- Target Framerate: `+this.targetFrameRate)}}this._dispatchReadyAfterFrame&&(this._dispatchReadyAfterFrame=!1,this.domElement.dispatchEvent(new CustomEvent("ready")),se.dispatchCallback(re.ContextFirstFrameRendered,this))}_tempClearColor=new c.Color;_tempClearColor2=new c.Color;renderNow(e){if(!e&&(e=this.mainCamera,!e))return!1;if(this.handleRendererContextLost(),this._isRendering=!0,this.renderRequiredTextures(),this.renderer.toneMapping!==c.NoToneMapping&&Qw(),this.postprocessing.update(),this.composer&&!this.isInXR){e&&"setMainCamera"in this.composer&&this.composer.passes[0]?.mainCamera!=e&&this.composer.setMainCamera(e);const t=this.renderer.getClearColor(this._tempClearColor),i=this.renderer.getClearAlpha();this._tempClearColor2.copy(t),this.renderer.setClearColor(t.convertSRGBToLinear(),this.renderer.getClearAlpha()),this.composer.render(this.time.deltaTime),this.renderer.setClearColor(this._tempClearColor2,i)}else e&&(this.isInXR&&exports.DeviceUtilities.isMacOS()&&this.renderer.clearDepth(),this.renderer.render(this.scene,e));return this._isRendering=!1,!0}_contextRestoreTries=0;handleRendererContextLost(){this.time.frame%10&&this.renderer.getContext().isContextLost()&&this._contextRestoreTries++<100&&(console.warn("Attempting to recover WebGL context..."),this.renderer.forceContextRestore())}_wasPaused=!1;onHandlePaused(){const e=this.evaluatePaused();if(this._wasPaused!==e){iM&&console.log("Paused?",e,"context:"+this.alias);for(let t=0;t<this.scripts_pausedChanged.length;t++){const i=this.scripts_pausedChanged[t];i.activeAndEnabled&&i.onPausedChanged!==void 0&&(z.Current=this,i.onPausedChanged(e,this._wasPaused))}}return this._wasPaused=e,e}evaluatePaused(){return this.isInXR?!1:this.isPaused?!0:this.runInBackground?!1:!this.isVisibleToUser}renderRequiredTextures(){if(!this.mainCamera||!this._requireDepthTexture&&!this._requireColorTexture)return;if(!this._renderTarget){if(this._renderTarget=new c.WebGLRenderTarget(this.domWidth,this.domHeight),this._requireDepthTexture){const i=new c.DepthTexture(this.domWidth,this.domHeight);this._renderTarget.depthTexture=i}this._requireColorTexture&&(this._renderTarget.texture=new c.Texture,this._renderTarget.texture.generateMipmaps=!1,this._renderTarget.texture.minFilter=c.NearestFilter,this._renderTarget.texture.magFilter=c.NearestFilter,this._renderTarget.texture.format=c.RGBAFormat)}const e=this._renderTarget;e.texture&&(e.texture.colorSpace=this.renderer.outputColorSpace);const t=this.renderer.getRenderTarget();this.renderer.setRenderTarget(e),this.renderer.render(this.scene,this.mainCamera),this.renderer.setRenderTarget(t)}executeCoroutines(e){if(this.coroutines[e]){const i=this.coroutines[e];for(let n=0;n<i.length;n++)try{const o=i[n];if(!o.comp||o.comp.destroyed||!o.main||o.comp.enabled===!1){sM&&console.log("Removing coroutine",o.comp,o.comp.enabled),i.splice(n,1),--n;continue}const a=o.chained;if(a&&a.length>0){const u=a[a.length-1].next();if(u.done&&a.pop(),t(u)&&(o.chained||(o.chained=[]),o.chained.push(u.value)),!u.done)continue}const l=o.main.next();if(l.done===!0){i.splice(n,1),--n;continue}const h=l.value;if(t(h)){if(h.next().done)continue;o.chained||(o.chained=[]),o.chained.push(h)}else if(h instanceof Promise){const d=h;o.chained||(o.chained=[]);const u=Aw(d);o.chained?.push(u);continue}}catch(o){console.error(o)}}function t(i){return!!(i&&i.next&&i.return)}}}const Ap=x("debugwebxr");class hx{static tryFindAvatarObjects(e,t,i){if(i.head&&i.leftHand&&i.rightHand)return;const n=e.name.toLocaleLowerCase();!i.head&&n.includes("head")&&(Ap&&console.log("FOUND AVATAR HEAD",e.name),i.head=new J("",t,e)),n.includes("hand")&&(!i.leftHand&&n.includes("left")&&(Ap&&console.log("FOUND AVATAR LEFT HAND",e.name),i.leftHand=new J("",t,e)),!i.rightHand&&n.includes("right")&&(Ap&&console.log("FOUND AVATAR RIGHT HAND",e.name),i.rightHand=new J("",t,e)));for(let o=0;o<e.children.length;o++){if(i.head&&i.leftHand&&i.rightHand)return;const r=e.children[o];this.tryFindAvatarObjects(r,t,i)}}}class ne extends c.Color{alpha=1;get isRGBAColor(){return!0}set a(e){this.alpha=e}get a(){return this.alpha}constructor(e,t,i,n){super(),typeof e=="number"&&typeof t=="number"&&typeof i=="number"?(this.set(e,t,i),this.alpha=typeof n=="number"?n:1):e!==void 0&&(this.set(e),this.alpha=1)}clone(){const e=super.clone();return e.alpha=this.alpha,e}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,"alpha"in e&&typeof e.alpha=="number"?this.alpha=e.alpha:typeof e.a=="number"&&(this.alpha=e.a),this}lerp(e,t){const i=e;return i.alpha!=null&&(this.alpha=L.lerp(this.alpha,i.alpha,t)),super.lerp(e,t)}lerpColors(e,t,i){const n=e,o=t;return n.alpha!=null&&o.alpha!=null&&(this.alpha=L.lerp(n.alpha,o.alpha,i)),super.lerpColors(e,t,i)}multiply(e){const t=e;return t.alpha!=null&&(this.alpha=this.alpha*t.alpha),super.multiply(e)}fromArray(e,t=0){return this.alpha=e[t+3],super.fromArray(e,t)}static fromColorRepresentation(e){if(typeof e=="string"){if(e.trim()==="transparent")return new ne(0,0,0,0);if(e.startsWith("#")&&e.length===9){const t=parseInt(e.slice(1,9),16),i=t>>24&255,n=t>>16&255,o=t>>8&255,r=t>>0&255;return new ne(i/255,n/255,o/255,r/255)}else if(e.startsWith("#")){const t=parseInt(e.slice(1),16),i=t>>16&255,n=t>>8&255,o=t>>0&255;return new ne(i/255,n/255,o/255,1)}else if(e.startsWith("rgba")){const t=e.slice(5,-1).split(",").map(Number);return new ne(t[0]/255,t[1]/255,t[2]/255,t[3])}else if(e.startsWith("rgb")){const t=e.slice(4,-1).split(",").map(Number);return new ne(t[0]/255,t[1]/255,t[2]/255,1)}}else if(Array.isArray(e)){if(e.length===4)return new ne(e[0],e[1],e[2],e[3]);if(e.length===3)return new ne(e[0],e[1],e[2],1);console.error("Invalid color array length. Expected 3 or 4, got "+e.length)}return new ne(e)}}const At=new c.Vector3,$b=new c.Vector3,Vb=new c.Quaternion,aM=x("debuggizmos"),ln=8947848,Dp=32;class B{constructor(){}static enabled=!0;static isGizmo(e){return e[qm]!==void 0}static setVisible(e){for(const t of Li.timedObjectsBuffer)t.visible=e}static DrawLabel(e,t,i=.05,n=0,o,r,a){if(!B.enabled)return null;o||(o=ln);const l=V.active?.rigScale??1,h=Li.getTextLabel(n,t,i*l,o,r);return a instanceof c.Object3D&&a.add(h),h.position.x=e.x,h.position.y=e.y,h.position.z=e.z,h}static DrawRay(e,t,i=ln,n=0,o=!0){if(!B.enabled)return;const r=Li.getLine(n),a=r.geometry.getAttribute("position");a.setXYZ(0,e.x,e.y,e.z),At.set(t.x,t.y,t.z).multiplyScalar(999999999),a.setXYZ(1,e.x+At.x,e.y+At.y,e.z+At.z),a.needsUpdate=!0,r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,dn(r.material,i)}static DrawDirection(e,t,i=ln,n=0,o=!0,r=1){if(!B.enabled)return;const a=Li.getLine(n),l=a.geometry.getAttribute("position");l.setXYZ(0,e.x,e.y,e.z),t.w!==void 0?(At.set(0,0,-r),Vb.set(t.x,t.y,t.z,t.w),At.applyQuaternion(Vb)):(At.set(t.x,t.y,t.z),At.multiplyScalar(r)),l.setXYZ(1,e.x+At.x,e.y+At.y,e.z+At.z),l.needsUpdate=!0,a.material.depthTest=o,a.material.depthWrite=!1,dn(a.material,i)}static DrawLine(e,t,i=ln,n=0,o=!0){if(!B.enabled)return;const r=Li.getLine(n),a=r.geometry.getAttribute("position");a.setXYZ(0,e.x,e.y,e.z),a.setXYZ(1,t.x,t.y,t.z),a.needsUpdate=!0,r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,dn(r.material,i)}static DrawCircle(e,t,i,n=ln,o=0,r=!0){if(!B.enabled)return;const a=Li.getCircle(o);a.position.set(e.x,e.y,e.z),a.scale.set(i,i,i),a.quaternion.setFromUnitVectors(this._up,At.set(t.x,t.y,t.z).normalize()),a.material.depthTest=r,a.material.depthWrite=!1,a.material.fog=!1,dn(a.material,n)}static DrawWireSphere(e,t,i=ln,n=0,o=!0){if(!B.enabled)return;const r=Li.getSphere(t,n,!0);gr(r,e.x,e.y,e.z),r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,dn(r.material,i)}static DrawSphere(e,t,i=ln,n=0,o=!0){if(!B.enabled)return;const r=Li.getSphere(t,n,!1);gr(r,e.x,e.y,e.z),r.material.depthTest=o,r.material.depthWrite=!1,dn(r.material,i)}static DrawWireBox(e,t,i=ln,n=0,o=!0,r=void 0){if(!B.enabled)return;const a=Li.getBox(n);a.position.set(e.x,e.y,e.z),a.scale.set(t.x,t.y,t.z),r?a.quaternion.copy(r):a.quaternion.identity(),a.material.depthTest=o,a.material.wireframe=!0,a.material.depthWrite=!1,a.material.fog=!1,dn(a.material,i)}static DrawWireBox3(e,t=ln,i=0,n=!0){if(!B.enabled)return;const o=Li.getBox(i);o.position.copy(e.getCenter(At)),o.scale.copy(e.getSize(At)),o.material.depthTest=n,o.material.wireframe=!0,o.material.depthWrite=!1,o.material.fog=!1,dn(o.material,t)}static _up=new c.Vector3(0,1,0);static DrawArrow(e,t,i=ln,n=0,o=!0,r=!1){if(!B.enabled)return;const a=Li.getArrowHead(n);a.position.set(t.x,t.y,t.z),a.quaternion.setFromUnitVectors(this._up.set(0,1,0),At.set(t.x,t.y,t.z).sub($b.set(e.x,e.y,e.z)).normalize());const h=At.set(t.x,t.y,t.z).sub($b.set(e.x,e.y,e.z)).length()*.1;a.scale.set(h,h,h),a.material.depthTest=o,a.material.wireframe=r,dn(a.material,i),this.DrawLine(e,t,i,n,o)}static DrawWireMesh(e){const t=Li.getMesh(e.duration??0);"mesh"in e?(t.geometry=e.mesh.geometry,t.matrixWorld.copy(e.mesh.matrixWorld)):(t.geometry=e.geometry,t.matrixWorld.copy(e.matrix)),t.matrixAutoUpdate=!1,t.matrixWorldAutoUpdate=!1,t.material.depthTest=e.depthTest??!0,t.material.wireframe=!0,dn(t.material,e.color??ln)}}const lM=new c.BoxGeometry(1,1,1);function fy(s=null){const e=new c.Color(s??14540253),t=new c.EdgesGeometry(lM);return new c.LineSegments(t,new c.LineBasicMaterial({color:e}))}function dn(s,e){if(Array.isArray(s)){for(const i of s)dn(i,e);return}const t=e instanceof ne?e.a:1;s.color.set(e),s.opacity=t,s.transparent=t<1}const qm=Symbol("GizmoCache");class Li{static familyName="needle-gizmos";static ensureFont(){let e=ae.__webpack_exports__default.FontLibrary.getFontFamily(this.familyName);e||(e=ae.__webpack_exports__default.FontLibrary.addFontFamily(this.familyName),e.addVariant("normal","normal","https://cdn.needle.tools/static/fonts/msdf/arial/arial-msdf.json","https://cdn.needle.tools/static/fonts/msdf/arial/arial.png")?.addEventListener("ready",()=>{ae.__webpack_exports__default.update()}))}static getTextLabel(e,t,i,n,o){this.ensureFont();let r=this.textLabelCache.pop(),a=1;o&&typeof o=="string"&&o?.length>=8&&o.startsWith("#")?(a=parseInt(o.substring(7),16)/255,o=o.substring(0,7),aM&&console.log(o,a)):typeof o=="object"&&o.a!==void 0&&(a=o.a);const l={boxSizing:"border-box",fontFamily:this.familyName,width:"auto",fontSize:i,color:n,lineHeight:1,backgroundColor:o??void 0,backgroundOpacity:a,textContent:t,borderRadius:.5*i,padding:.8*i,whiteSpace:"pre",offset:.05*i};if(r)r.set(l);else{r=new ae.__webpack_exports__Text(l);const h=this,d=r;d.setText=function(u){this.set({textContent:u}),h.tmuiNeedsUpdate=!0}}return this.tmuiNeedsUpdate=!0,this.registerTimedObject(z.Current,r,e,this.textLabelCache),r}static getBox(e){let t=this.boxesCache.pop();if(!t){const i=new c.BoxGeometry(1,1,1);t=new c.Mesh(i)}return this.registerTimedObject(z.Current,t,e,this.boxesCache),t}static getLine(e){let t=this.linesCache.pop();if(!t){t=new c.Line;let i=t.geometry.getAttribute("position");i||(i=new c.BufferAttribute(new Float32Array(6),3),t.geometry.setAttribute("position",i))}return t.frustumCulled=!1,this.registerTimedObject(z.Current,t,e,this.linesCache),t}static getCircle(e){let t=this.circlesCache.pop();if(!t){t=new c.Line;let i=t.geometry.getAttribute("position");if(!i){i=new c.BufferAttribute(new Float32Array(Dp*3),3),t.geometry.setAttribute("position",i);const n=j(0,1,0),o=j(0,0,1),r=j(o);r.cross(n).normalize();const a=j(r),l=Math.PI*2/(Dp-1);for(let h=0;h<Dp+1;h++){const d=l*h;n.copy(a).multiplyScalar(Math.cos(d)*1),r.copy(o).multiplyScalar(Math.sin(d)*1);const u=n.add(r);i.setXYZ(h,u.x,u.y,u.z)}}}return t.frustumCulled=!1,this.registerTimedObject(z.Current,t,e,this.circlesCache),t}static getSphere(e,t,i){let n=this.spheresCache.pop();return n||(n=new c.Mesh(new c.SphereGeometry(1,8,8))),n.scale.set(e,e,e),n.material.wireframe=i,this.registerTimedObject(z.Current,n,t,this.spheresCache),n}static getArrowHead(e){let t=this.arrowHeadsCache.pop();return t||(t=new c.Mesh(new c.CylinderGeometry(0,.5,1,8))),this.registerTimedObject(z.Current,t,e,this.arrowHeadsCache),t}static getMesh(e){let t=this.mesh.pop();return t||(t=new c.Mesh,t.material=new c.MeshBasicMaterial),this.registerTimedObject(z.Current,t,e,this.mesh),t}static linesCache=[];static circlesCache=[];static spheresCache=[];static boxesCache=[];static arrowHeadsCache=[];static mesh=[];static textLabelCache=[];static registerTimedObject(e,t,i,n){if(!e){console.error("No Needle Engine context available. Did you call a Gizmos function in global scope?");return}const o=this.contextBeforeRenderCallbacks.get(e),r=this.contextPostRenderCallbacks.get(e);if(o){if(e.pre_render_callbacks[e.pre_render_callbacks.length-1]!==o){const a=e.pre_render_callbacks.indexOf(o);a>=0&&e.pre_render_callbacks.splice(a,1),e.pre_render_callbacks.push(o)}}else{const a=()=>{this.onBeforeRender(e,this.timedObjectsBuffer)};this.contextBeforeRenderCallbacks.set(e,a),e.pre_render_callbacks.push(a)}if(r){if(e.post_render_callbacks[e.post_render_callbacks.length-1]!==r){const a=e.post_render_callbacks.indexOf(r);a>=0&&e.post_render_callbacks.splice(a,1),e.post_render_callbacks.push(r)}}else{const a=()=>{this.onPostRender(e,this.timedObjectsBuffer,this.timesBuffer)};this.contextPostRenderCallbacks.set(e,a),e.post_render_callbacks.push(a)}t.traverse(a=>{a.layers.disableAll(),a.layers.enable(2)}),t.renderOrder=999999,t[qm]=n,t.castShadow=!1,t.receiveShadow=!1,t.isGizmo=!0,this.timedObjectsBuffer.push(t),this.timesBuffer.push(z.Current.time.realtimeSinceStartup+i),e.scene.add(t)}static timedObjectsBuffer=new Array;static timesBuffer=new Array;static contextPostRenderCallbacks=new Map;static contextBeforeRenderCallbacks=new Map;static tmuiNeedsUpdate=!1;static onBeforeRender(e,t){this.tmuiNeedsUpdate&&(this.tmuiNeedsUpdate=!1,ae.__webpack_exports__default.update());for(let i=0;i<t.length;i++){const n=t[i];if(e.mainCamera&&n instanceof ae.__webpack_exports__default.MeshUIBaseElement){if(_r(n))continue;const o=e.isInVR,r=!1,a=!o;sh(n,e.mainCamera,r,a)}}}static onPostRender(e,t,i){const n=e.time.realtimeSinceStartup;for(let o=t.length-1;o>=0;o--){const r=t[o];n>=i[o]-1e-6&&(t.splice(o,1),i.splice(o,1),r.removeFromParent(),_r(r)!=!0&&r[qm].push(r))}}}const qt=x("debugphysics"),cM=x("debugworker"),Wb=new c.Layers;class kr{static AllLayers=4294967295;ray;cam;screenPoint;raycaster;results;targets;recursive=!0;minDistance;maxDistance;lineThreshold;layerMask;ignore;testObject;useAcceleratedRaycast;allowSlowRaycastFallback=!0;screenPointFromOffset(e,t){this.screenPoint===void 0&&(this.screenPoint=new c.Vector2),this.screenPoint.x=e/window.innerWidth*2-1,this.screenPoint.y=-(t/window.innerHeight)*2+1}setLayer(e){Wb.set(e),this.layerMask=Wb}setMask(e){this.layerMask||(this.layerMask=new c.Layers);const t=this.layerMask;t?t.mask=e:this.layerMask=e}}class py{distance;point;object;constructor(e,t,i){this.object=e,this.distance=t,this.point=i}}class Ya{static _raycasting=0;static get raycasting(){return this._raycasting>0}raycastPhysicsFast(e,t=void 0,i=1/0,n=!0){return this.context.physics.engine?.raycast(e,t,{maxDistance:i,solid:n})??null}raycastPhysicsFastAndGetNormal(e,t=void 0,i=1/0,n=!0){return this.context.physics.engine?.raycastAndGetNormal(e,t,{maxDistance:i,solid:n})??null}sphereOverlapPhysics(e,t){return this.context.physics.engine?.sphereOverlap(e,t)??null}context;engine;constructor(e){this.context=e}raycaster=new c.Raycaster;defaultRaycastOptions=new kr;targetBuffer=new Array(1);defaultThresholds={Mesh:{},Line:{threshold:-1},LOD:{},Points:{threshold:0},Sprite:{}};sphereResults=new Array;sphereMask=new c.Layers;sphere=new c.Sphere;sphereOverlap(e,t,i=!0,n=!1,o=null){if(this.sphereResults.length=0,!this.context.scene)return this.sphereResults;const r=this.sphereMask;r.enableAll(),r.disable(2);for(const a of this.context.scene.children)this.intersectSphere(a,e,t,r,this.sphereResults,i,n,o);return this.sphereResults.sort((a,l)=>a.distance-l.distance)}raycastFromRay(e,t=null){const i=t??this.defaultRaycastOptions;i.ray=e;const n=this.raycast(i);return i===this.defaultRaycastOptions&&(i.ray=void 0),n}raycast(e=null){qt&&performance.mark("raycast.start"),e||(e=this.defaultRaycastOptions);const t=e.screenPoint??this.context.input.mousePositionRC,i=e.raycaster??this.raycaster;if(i.near=e.minDistance??0,i.far=e.maxDistance??1/0,i.params=this.defaultThresholds,e.lineThreshold===void 0&&(e.lineThreshold=-1),i.params.Line={threshold:e.lineThreshold},e.ray)i.ray.copy(e.ray);else{const a=e.cam??this.context.mainCamera;if(!a)return qt&&console.error("Can not perform raycast - no main camera found"),this.defaultRaycastOptions.results&&(this.defaultRaycastOptions.results.length=0),this.defaultRaycastOptions.results??[];const l=this.context.xrCamera;this.context.isInXR&&l instanceof c.ArrayCamera&&l.cameras.length>0?i.setFromCamera(t,l.cameras[0]):i.setFromCamera(t,a)}let n=e.targets;n||(n=this.targetBuffer,n.length=1,n[0]=this.context.scene);let o=e.results;this.defaultRaycastOptions.results&&(this.defaultRaycastOptions.results.length=0),o||(this.defaultRaycastOptions.results||(this.defaultRaycastOptions.results=new Array),o=this.defaultRaycastOptions.results),e.layerMask!==void 0?e.layerMask instanceof c.Layers?i.layers.mask=e.layerMask.mask:i.layers.mask=e.layerMask:(i.layers.enableAll(),i.layers.disable(2)),qt&&console.time("raycast"),o.length=0,Ya._raycasting++,this.intersect(this.raycaster,n,o,e),o.sort((a,l)=>a.distance-l.distance);const r=e.ignore;return r!==void 0&&r.length>0&&(o=o.filter(a=>!r.includes(a.object))),Ya._raycasting--,qt&&(console.timeEnd("raycast"),console.warn("#"+this.context.time.frame+", hits:",o?.length?[...o]:"nothing"),performance.mark("raycast.end"),performance.measure("raycast","raycast.start","raycast.end")),o}intersect(e,t,i,n){for(const o of t){if(!o||o.visible===!1||B.isGizmo(o)||n.lineThreshold!==void 0&&n.lineThreshold<0&&o instanceof c.Line)continue;let r=!0;const a=o,l=a.geometry;if(o.raycastAllowed===!1&&(r=!1),r&&n.testObject){const h=n.testObject?.(o);if(h===!1)continue;h==="continue in children"&&(r=!1)}else r&&(l&&Gb(l)||(r=!1));if(r){const h=i.length,d=o.raycastPreference||"lod";let u=d!=="bounds";if(n.precise===!1&&(u=!1),l&&(u||=l.getAttribute("position")?.array?.length<64),a instanceof K.GroundedSkybox&&(u=!1),d==="lod"){const f=oe.getRaycastMesh(o);f&&(a.geometry=f)}if(!u&&dM(a,e,i)||(n.useAcceleratedRaycast!==!1?Ou.runMeshBVHRaycast(e,a,i,this.context,n):e.intersectObject(a,!1,i)),a.geometry=l,qt&&i.length!=h){const f=i[i.length-1];B.DrawWireSphere(f.point,.1,7798784,1,!1),B.DrawWireMesh({mesh:o,depthTest:!1,duration:.2,color:7798784})}}n.recursive!==!1&&this.intersect(e,o.children,i,n)}return i}tempBoundingBox=new c.Box3;intersectSphere(e,t,i,n,o,r,a,l){let h=e&&e.isMesh&&e.layers.test(n)&&!B.isGizmo(e);h&&=e.visible,h&&=!(e instanceof c.Line),h&&=!(e instanceof K.GroundedSkybox);const d=e,u=d.geometry;if(h&&l){const f=l(e);if(f===!1)return;f==="continue in children"&&(h=!1)}if(u&&Gb(u)||(h=!1),h){if(a){const f=this.sphere;f.center.copy(t),f.radius=i;const m=o.length;if(Ou.runMeshBVHRaycast(this.sphere,d,o,this.context,{}),m!=o.length&&!r)return}else if(u.boundingBox||u.computeBoundingBox(),u.boundingBox){d.matrixWorldNeedsUpdate&&d.updateWorldMatrix(!1,!1);const f=this.tempBoundingBox.copy(u.boundingBox).applyMatrix4(d.matrixWorld),m=this.sphere;if(m.center.copy(t),m.radius=i,m.intersectsBox(f)){const g=te(e),v=g.distanceTo(m.center),y=new py(e,v,g);if(o.push(y),!r)return}}}if(e.children)for(const f of e.children){const m=o.length;if(this.intersectSphere(f,t,i,n,o,r,a,l),m!=o.length&&!r)return}}}function Gb(s){return!(s.index&&s.index.array.length<3)}const $o=new c.Sphere,ld=new c.Plane,hM=new c.Matrix3;function dM(s,e,t){const i=s._computeIntersections;if(!i)return!1;let n=s["_computeIntersections:Needle"];return n||(n=s["_computeIntersections:Needle"]=function(o,r,a){const l=this,h=l.geometry.boundingSphere;if(h){if(l instanceof K.GroundedSkybox){ld.setFromNormalAndCoplanarPoint(j(0,1,0),j(0,-l.position.y,0)),ld.applyMatrix4(l.matrixWorld,hM);const u=o.ray.intersectPlane(ld,j());if(u){$o.copy(h),$o.applyMatrix4(l.matrixWorld);const m=j(u).sub(o.ray.origin).length(),g=$o.radius*.5;m<g&&r.push({distance:m,point:u,object:l,normal:ld.normal.clone()})}return}$o.copy(h),$o.applyMatrix4(l.matrixWorld);const d=o.ray.intersectSphere($o,j());if(d){const u=j(d).sub(o.ray.origin),f=u.length();if(f>$o.radius){const m=u.clone().normalize();r.push({distance:f,point:d,object:l,normal:m})}}}}),s._computeIntersections=n,e.intersectObject(s,!1,t),s._computeIntersections=i,!0}var Ou;(s=>{let e=0;function t(b,w,P,k,O){if(!w.geometry||!w.geometry.hasAttribute("position"))return!1;const D=w.geometry;if(w?.isSkinnedMesh){const I=w,F=I.bvhNeedsUpdate;if(!I.staticGenerator)l(),r&&(I.staticGenerator=new r(w),I.staticGenerator.applyWorldTransforms=!1,I.staticGeometry=I.staticGenerator.generate(),D.boundsTree=a?.call(I.staticGeometry),I.staticGeometryLastUpdate=performance.now()+Math.random()*200,I.bvhNeedsUpdate=!0);else if(D.boundsTree&&(I.autoUpdateMeshBvhInterval!==void 0&&I.autoUpdateMeshBvhInterval>=0||F===!0)){const $=performance.now(),W=$-I.staticGeometryLastUpdate,T=I.autoUpdateMeshBvhInterval??100;(F||W>T)&&(qt&&console.warn(`Physics: updating skinned mesh bvh for ${w.name} after ${W.toFixed(2)}ms`),I.bvhNeedsUpdate=!1,I.staticGeometryLastUpdate=$,I.staticGenerator?.generate(I.staticGeometry),D.boundsTree.refit())}}else if(!D.boundsTree){d||_();let I=!0;if((k.xr||D[g]===!1||D.getAttribute("position")?.isInterleavedBufferAttribute||D.index&&D.index?.isInterleavedBufferAttribute||e>10)&&(I=!1),I&&f){if(D[m]===void 0){let F=null;if(y.length>0){const $=y.shift();$&&!$.running&&(F=$)}if(!F&&v.length<3)try{cM&&console.warn("[GenerateMeshBVHWorker] Creating worker with import.meta.url:",typeof document>"u"?require("url").pathToFileURL(__filename).href:Ra&&Ra.tagName.toUpperCase()==="SCRIPT"&&Ra.src||new URL("needle-engine.bundle-n5YALNtc.umd.cjs",document.baseURI).href),F=new f,v.push(F)}catch($){$ instanceof DOMException&&$.name==="SecurityError"?(console.warn("Failed to create MeshBVH worker, falling back to main thread generation. This can happen when running from file://, if the browser does not support workers or if the browser is blocking workers for other reasons."),console.debug($),e+=10):(console.error("Failed to create MeshBVH worker. Please see below for more details:"),console.log($)),e++}if(F!=null&&!F.running){const $=w.name;qt&&console.log("<<<< worker start",$,F),D[m]="queued",performance.mark("bvh.create.start");const W=D.clone();try{F.generate(W).then(T=>{D[m]="done",D.boundsTree=T}).catch(T=>{D[m]="failed - "+T?.message,D[g]=!1,qt&&console.error("Failed to generate mesh bvh on worker",T)}).finally(()=>{qt&&console.log(">>>>> worker done",$,{hasBoundsTre:D.boundsTree!=null}),y.push(F),W.dispose(),performance.mark("bvh.create.end"),performance.measure("bvh.create (worker)","bvh.create.start","bvh.create.end")})}catch(T){console.error("Failed to generate mesh bvh on worker",T)}}else qt&&console.warn("No worker available")}}else(!u||!I)&&(l(),o&&(performance.mark("bvh.create.start"),D.boundsTree=new o(D),performance.mark("bvh.create.end"),performance.measure("bvh.create","bvh.create.start","bvh.create.end")))}if(b instanceof c.Raycaster){const I=b,F=w.raycast;if(D.boundsTree)l(),n&&(w.acceleratedRaycast||(w.acceleratedRaycast=n.bind(w),qt&&console.debug(`Physics: bind acceleratedRaycast fn to "${w.name}"`)),w.raycast=w.acceleratedRaycast);else if(qt&&console.warn("No bounds tree found for mesh",w.name,{workerTask:D[m],hasAcceleratedRaycast:n!=null}),O.allowSlowRaycastFallback===!1&&(D.getAttribute("position")?.array?.length??0)>2e3)return qt&&console.warn("Skipping raycast because no bounds tree is available and allowSlowRaycastFallback is false"),!1;const $=I.firstHitOnly;return I.firstHitOnly=!1,I.intersectObject(w,!1,P),I.firstHitOnly=$,w.raycast=F,!0}else if(b instanceof c.Sphere){const I=D.boundsTree;if(I){const F=b;if(h.copy(w.matrixWorld).invert(),F.applyMatrix4(h),I.intersectsSphere(F)){const W=te(w),T=W.distanceTo(F.center),U=new py(w,T,W);P.push(U)}}return!0}return!1}s.runMeshBVHRaycast=t;let i=!1,n=null,o=null,r=null,a=null;function l(){i||(i=!0,Promise.resolve().then(()=>require("./vendor-DE_m5MvL.umd.cjs")).then(b=>b.index$1).then(b=>{n=b.acceleratedRaycast,o=b.MeshBVH,r=b.StaticGeometryGenerator,a=b.computeBoundsTree}).catch(b=>{(qt||E())&&console.error("Failed to load BVH library...",b.message)}))}const h=new c.Matrix4;let d=!1,u=!1,f=null;const m=Symbol("Needle:MeshBVH-Worker"),g=Symbol("Needle:MeshBVH-CanUseWorker"),v=[],y=[];function _(){d=!0,u=!0,Promise.resolve().then(()=>mL).then(b=>{f=b.GenerateMeshBVHWorker}).catch(b=>{qt||E()?console.warn("Failed to setup mesh bvh worker"):console.debug("Failed to setup mesh bvh worker",b)}).finally(()=>{u=!1})}})(Ou||(Ou={}));const Hb=Symbol("gltf-loader-internal-usage-tracker"),uM=x("debugusers");class ja{get name(){return"NEEDLE_internal_usage_tracker"}static isLoading(e){return ja._loadingProcesses>0}static _loadingProcesses=0;parser;_getDependency;_loadingId;_loadedObjects=new Set;constructor(e){this.parser=e,this._getDependency=this.parser.getDependency,this._loadingId=Date.now().toString()}beforeRoot(){ja._loadingProcesses++;const e=this,t=this._getDependency;return this.parser.getDependency=function(i,n){const o=t.call(this,i,n);return o.then(r=>(r&&(e._loadedObjects.add(r),r[Hb]=e._loadingId),r)),o},null}afterRoot(e){ja._loadingProcesses--,this.parser.getDependency=this._getDependency;for(const t of this._loadedObjects)delete t[Hb],t instanceof c.Object3D&&(t.parent||t instanceof c.Mesh&&setTimeout(()=>{uM&&console.warn("> GLTF LOADER: Mesh not used in scene!",t),t.material=null,t.geometry=null},1e3));return null}}class dx{constructor(){window.addEventListener("unhandledrejection",e=>{if(e.defaultPrevented)return;const t=e?.reason?.path;if(t){const i=t[0];i&&i.tagName==="IMG"&&(console.warn(`Could not load image:
883
+ Target Framerate: `+this.targetFrameRate)}}this._dispatchReadyAfterFrame&&(this._dispatchReadyAfterFrame=!1,this.domElement.dispatchEvent(new CustomEvent("ready")),se.dispatchCallback(re.ContextFirstFrameRendered,this))}_tempClearColor=new c.Color;_tempClearColor2=new c.Color;renderNow(e){if(!e&&(e=this.mainCamera,!e))return!1;if(this.handleRendererContextLost(),this._isRendering=!0,this.renderRequiredTextures(),this.renderer.toneMapping!==c.NoToneMapping&&Qw(),this.postprocessing.update(),this.composer&&!this.isInXR){e&&"setMainCamera"in this.composer&&this.composer.passes[0]?.mainCamera!=e&&this.composer.setMainCamera(e);const t=this.renderer.getClearColor(this._tempClearColor),i=this.renderer.getClearAlpha();this._tempClearColor2.copy(t),this.renderer.setClearColor(t.convertSRGBToLinear(),this.renderer.getClearAlpha()),this.composer.render(this.time.deltaTime),this.renderer.setClearColor(this._tempClearColor2,i)}else e&&(this.isInXR&&exports.DeviceUtilities.isMacOS()&&this.renderer.clearDepth(),this.renderer.render(this.scene,e));return this._isRendering=!1,!0}_contextRestoreTries=0;handleRendererContextLost(){this.time.frame%10&&this.renderer.getContext().isContextLost()&&this._contextRestoreTries++<100&&(console.warn("Attempting to recover WebGL context..."),this.renderer.forceContextRestore())}_wasPaused=!1;onHandlePaused(){const e=this.evaluatePaused();if(this._wasPaused!==e){iM&&console.log("Paused?",e,"context:"+this.alias);for(let t=0;t<this.scripts_pausedChanged.length;t++){const i=this.scripts_pausedChanged[t];i.activeAndEnabled&&i.onPausedChanged!==void 0&&(z.Current=this,i.onPausedChanged(e,this._wasPaused))}}return this._wasPaused=e,e}evaluatePaused(){return this.isInXR?!1:this.isPaused?!0:this.runInBackground?!1:!this.isVisibleToUser}renderRequiredTextures(){if(!this.mainCamera||!this._requireDepthTexture&&!this._requireColorTexture)return;if(!this._renderTarget){if(this._renderTarget=new c.WebGLRenderTarget(this.domWidth,this.domHeight),this._requireDepthTexture){const i=new c.DepthTexture(this.domWidth,this.domHeight);this._renderTarget.depthTexture=i}this._requireColorTexture&&(this._renderTarget.texture=new c.Texture,this._renderTarget.texture.generateMipmaps=!1,this._renderTarget.texture.minFilter=c.NearestFilter,this._renderTarget.texture.magFilter=c.NearestFilter,this._renderTarget.texture.format=c.RGBAFormat)}const e=this._renderTarget;e.texture&&(e.texture.colorSpace=this.renderer.outputColorSpace);const t=this.renderer.getRenderTarget();this.renderer.setRenderTarget(e),this.renderer.render(this.scene,this.mainCamera),this.renderer.setRenderTarget(t)}executeCoroutines(e){if(this.coroutines[e]){const i=this.coroutines[e];for(let n=0;n<i.length;n++)try{const o=i[n];if(!o.comp||o.comp.destroyed||!o.main||o.comp.enabled===!1){sM&&console.log("Removing coroutine",o.comp,o.comp.enabled),i.splice(n,1),--n;continue}const a=o.chained;if(a&&a.length>0){const u=a[a.length-1].next();if(u.done&&a.pop(),t(u)&&(o.chained||(o.chained=[]),o.chained.push(u.value)),!u.done)continue}const l=o.main.next();if(l.done===!0){i.splice(n,1),--n;continue}const h=l.value;if(t(h)){if(h.next().done)continue;o.chained||(o.chained=[]),o.chained.push(h)}else if(h instanceof Promise){const d=h;o.chained||(o.chained=[]);const u=Aw(d);o.chained?.push(u);continue}}catch(o){console.error(o)}}function t(i){return!!(i&&i.next&&i.return)}}}const Ap=x("debugwebxr");class hx{static tryFindAvatarObjects(e,t,i){if(i.head&&i.leftHand&&i.rightHand)return;const n=e.name.toLocaleLowerCase();!i.head&&n.includes("head")&&(Ap&&console.log("FOUND AVATAR HEAD",e.name),i.head=new J("",t,e)),n.includes("hand")&&(!i.leftHand&&n.includes("left")&&(Ap&&console.log("FOUND AVATAR LEFT HAND",e.name),i.leftHand=new J("",t,e)),!i.rightHand&&n.includes("right")&&(Ap&&console.log("FOUND AVATAR RIGHT HAND",e.name),i.rightHand=new J("",t,e)));for(let o=0;o<e.children.length;o++){if(i.head&&i.leftHand&&i.rightHand)return;const r=e.children[o];this.tryFindAvatarObjects(r,t,i)}}}class ne extends c.Color{alpha=1;get isRGBAColor(){return!0}set a(e){this.alpha=e}get a(){return this.alpha}constructor(e,t,i,n){super(),typeof e=="number"&&typeof t=="number"&&typeof i=="number"?(this.set(e,t,i),this.alpha=typeof n=="number"?n:1):e!==void 0&&(this.set(e),this.alpha=1)}clone(){const e=super.clone();return e.alpha=this.alpha,e}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,"alpha"in e&&typeof e.alpha=="number"?this.alpha=e.alpha:typeof e.a=="number"&&(this.alpha=e.a),this}lerp(e,t){const i=e;return i.alpha!=null&&(this.alpha=L.lerp(this.alpha,i.alpha,t)),super.lerp(e,t)}lerpColors(e,t,i){const n=e,o=t;return n.alpha!=null&&o.alpha!=null&&(this.alpha=L.lerp(n.alpha,o.alpha,i)),super.lerpColors(e,t,i)}multiply(e){const t=e;return t.alpha!=null&&(this.alpha=this.alpha*t.alpha),super.multiply(e)}fromArray(e,t=0){return this.alpha=e[t+3],super.fromArray(e,t)}static fromColorRepresentation(e){if(typeof e=="string"){if(e.trim()==="transparent")return new ne(0,0,0,0);if(e.startsWith("#")&&e.length===9){const t=parseInt(e.slice(1,9),16),i=t>>24&255,n=t>>16&255,o=t>>8&255,r=t>>0&255;return new ne(i/255,n/255,o/255,r/255)}else if(e.startsWith("#")){const t=parseInt(e.slice(1),16),i=t>>16&255,n=t>>8&255,o=t>>0&255;return new ne(i/255,n/255,o/255,1)}else if(e.startsWith("rgba")){const t=e.slice(5,-1).split(",").map(Number);return new ne(t[0]/255,t[1]/255,t[2]/255,t[3])}else if(e.startsWith("rgb")){const t=e.slice(4,-1).split(",").map(Number);return new ne(t[0]/255,t[1]/255,t[2]/255,1)}}else if(Array.isArray(e)){if(e.length===4)return new ne(e[0],e[1],e[2],e[3]);if(e.length===3)return new ne(e[0],e[1],e[2],1);console.error("Invalid color array length. Expected 3 or 4, got "+e.length)}return new ne(e)}}const At=new c.Vector3,$b=new c.Vector3,Vb=new c.Quaternion,aM=x("debuggizmos"),ln=8947848,Dp=32;class B{constructor(){}static enabled=!0;static isGizmo(e){return e[qm]!==void 0}static setVisible(e){for(const t of Li.timedObjectsBuffer)t.visible=e}static DrawLabel(e,t,i=.05,n=0,o,r,a){if(!B.enabled)return null;o||(o=ln);const l=V.active?.rigScale??1,h=Li.getTextLabel(n,t,i*l,o,r);return a instanceof c.Object3D&&a.add(h),h.position.x=e.x,h.position.y=e.y,h.position.z=e.z,h}static DrawRay(e,t,i=ln,n=0,o=!0){if(!B.enabled)return;const r=Li.getLine(n),a=r.geometry.getAttribute("position");a.setXYZ(0,e.x,e.y,e.z),At.set(t.x,t.y,t.z).multiplyScalar(999999999),a.setXYZ(1,e.x+At.x,e.y+At.y,e.z+At.z),a.needsUpdate=!0,r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,dn(r.material,i)}static DrawDirection(e,t,i=ln,n=0,o=!0,r=1){if(!B.enabled)return;const a=Li.getLine(n),l=a.geometry.getAttribute("position");l.setXYZ(0,e.x,e.y,e.z),t.w!==void 0?(At.set(0,0,-r),Vb.set(t.x,t.y,t.z,t.w),At.applyQuaternion(Vb)):(At.set(t.x,t.y,t.z),At.multiplyScalar(r)),l.setXYZ(1,e.x+At.x,e.y+At.y,e.z+At.z),l.needsUpdate=!0,a.material.depthTest=o,a.material.depthWrite=!1,dn(a.material,i)}static DrawLine(e,t,i=ln,n=0,o=!0){if(!B.enabled)return;const r=Li.getLine(n),a=r.geometry.getAttribute("position");a.setXYZ(0,e.x,e.y,e.z),a.setXYZ(1,t.x,t.y,t.z),a.needsUpdate=!0,r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,dn(r.material,i)}static DrawCircle(e,t,i,n=ln,o=0,r=!0){if(!B.enabled)return;const a=Li.getCircle(o);a.position.set(e.x,e.y,e.z),a.scale.set(i,i,i),a.quaternion.setFromUnitVectors(this._up,At.set(t.x,t.y,t.z).normalize()),a.material.depthTest=r,a.material.depthWrite=!1,a.material.fog=!1,dn(a.material,n)}static DrawWireSphere(e,t,i=ln,n=0,o=!0){if(!B.enabled)return;const r=Li.getSphere(t,n,!0);gr(r,e.x,e.y,e.z),r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,dn(r.material,i)}static DrawSphere(e,t,i=ln,n=0,o=!0){if(!B.enabled)return;const r=Li.getSphere(t,n,!1);gr(r,e.x,e.y,e.z),r.material.depthTest=o,r.material.depthWrite=!1,dn(r.material,i)}static DrawWireBox(e,t,i=ln,n=0,o=!0,r=void 0){if(!B.enabled)return;const a=Li.getBox(n);a.position.set(e.x,e.y,e.z),a.scale.set(t.x,t.y,t.z),r?a.quaternion.copy(r):a.quaternion.identity(),a.material.depthTest=o,a.material.wireframe=!0,a.material.depthWrite=!1,a.material.fog=!1,dn(a.material,i)}static DrawWireBox3(e,t=ln,i=0,n=!0){if(!B.enabled)return;const o=Li.getBox(i);o.position.copy(e.getCenter(At)),o.scale.copy(e.getSize(At)),o.material.depthTest=n,o.material.wireframe=!0,o.material.depthWrite=!1,o.material.fog=!1,dn(o.material,t)}static _up=new c.Vector3(0,1,0);static DrawArrow(e,t,i=ln,n=0,o=!0,r=!1){if(!B.enabled)return;const a=Li.getArrowHead(n);a.position.set(t.x,t.y,t.z),a.quaternion.setFromUnitVectors(this._up.set(0,1,0),At.set(t.x,t.y,t.z).sub($b.set(e.x,e.y,e.z)).normalize());const h=At.set(t.x,t.y,t.z).sub($b.set(e.x,e.y,e.z)).length()*.1;a.scale.set(h,h,h),a.material.depthTest=o,a.material.wireframe=r,dn(a.material,i),this.DrawLine(e,t,i,n,o)}static DrawWireMesh(e){const t=Li.getMesh(e.duration??0);"mesh"in e?(t.geometry=e.mesh.geometry,t.matrixWorld.copy(e.mesh.matrixWorld)):(t.geometry=e.geometry,t.matrixWorld.copy(e.matrix)),t.matrixAutoUpdate=!1,t.matrixWorldAutoUpdate=!1,t.material.depthTest=e.depthTest??!0,t.material.wireframe=!0,dn(t.material,e.color??ln)}}const lM=new c.BoxGeometry(1,1,1);function fy(s=null){const e=new c.Color(s??14540253),t=new c.EdgesGeometry(lM);return new c.LineSegments(t,new c.LineBasicMaterial({color:e}))}function dn(s,e){if(Array.isArray(s)){for(const i of s)dn(i,e);return}const t=e instanceof ne?e.a:1;s.color.set(e),s.opacity=t,s.transparent=t<1}const qm=Symbol("GizmoCache");class Li{static familyName="needle-gizmos";static ensureFont(){let e=ae.__webpack_exports__default.FontLibrary.getFontFamily(this.familyName);e||(e=ae.__webpack_exports__default.FontLibrary.addFontFamily(this.familyName),e.addVariant("normal","normal","https://cdn.needle.tools/static/fonts/msdf/arial/arial-msdf.json","https://cdn.needle.tools/static/fonts/msdf/arial/arial.png")?.addEventListener("ready",()=>{ae.__webpack_exports__default.update()}))}static getTextLabel(e,t,i,n,o){this.ensureFont();let r=this.textLabelCache.pop(),a=1;o&&typeof o=="string"&&o?.length>=8&&o.startsWith("#")?(a=parseInt(o.substring(7),16)/255,o=o.substring(0,7),aM&&console.log(o,a)):typeof o=="object"&&o.a!==void 0&&(a=o.a);const l={boxSizing:"border-box",fontFamily:this.familyName,width:"auto",fontSize:i,color:n,lineHeight:1,backgroundColor:o??void 0,backgroundOpacity:a,textContent:t,borderRadius:.5*i,padding:.8*i,whiteSpace:"pre",offset:.05*i};if(r)r.set(l);else{r=new ae.__webpack_exports__Text(l);const h=this,d=r;d.setText=function(u){this.set({textContent:u}),h.tmuiNeedsUpdate=!0}}return this.tmuiNeedsUpdate=!0,this.registerTimedObject(z.Current,r,e,this.textLabelCache),r}static getBox(e){let t=this.boxesCache.pop();if(!t){const i=new c.BoxGeometry(1,1,1);t=new c.Mesh(i)}return this.registerTimedObject(z.Current,t,e,this.boxesCache),t}static getLine(e){let t=this.linesCache.pop();if(!t){t=new c.Line;let i=t.geometry.getAttribute("position");i||(i=new c.BufferAttribute(new Float32Array(6),3),t.geometry.setAttribute("position",i))}return t.frustumCulled=!1,this.registerTimedObject(z.Current,t,e,this.linesCache),t}static getCircle(e){let t=this.circlesCache.pop();if(!t){t=new c.Line;let i=t.geometry.getAttribute("position");if(!i){i=new c.BufferAttribute(new Float32Array(Dp*3),3),t.geometry.setAttribute("position",i);const n=j(0,1,0),o=j(0,0,1),r=j(o);r.cross(n).normalize();const a=j(r),l=Math.PI*2/(Dp-1);for(let h=0;h<Dp+1;h++){const d=l*h;n.copy(a).multiplyScalar(Math.cos(d)*1),r.copy(o).multiplyScalar(Math.sin(d)*1);const u=n.add(r);i.setXYZ(h,u.x,u.y,u.z)}}}return t.frustumCulled=!1,this.registerTimedObject(z.Current,t,e,this.circlesCache),t}static getSphere(e,t,i){let n=this.spheresCache.pop();return n||(n=new c.Mesh(new c.SphereGeometry(1,8,8))),n.scale.set(e,e,e),n.material.wireframe=i,this.registerTimedObject(z.Current,n,t,this.spheresCache),n}static getArrowHead(e){let t=this.arrowHeadsCache.pop();return t||(t=new c.Mesh(new c.CylinderGeometry(0,.5,1,8))),this.registerTimedObject(z.Current,t,e,this.arrowHeadsCache),t}static getMesh(e){let t=this.mesh.pop();return t||(t=new c.Mesh,t.material=new c.MeshBasicMaterial),this.registerTimedObject(z.Current,t,e,this.mesh),t}static linesCache=[];static circlesCache=[];static spheresCache=[];static boxesCache=[];static arrowHeadsCache=[];static mesh=[];static textLabelCache=[];static registerTimedObject(e,t,i,n){if(!e){console.error("No Needle Engine context available. Did you call a Gizmos function in global scope?");return}const o=this.contextBeforeRenderCallbacks.get(e),r=this.contextPostRenderCallbacks.get(e);if(o){if(e.pre_render_callbacks[e.pre_render_callbacks.length-1]!==o){const a=e.pre_render_callbacks.indexOf(o);a>=0&&e.pre_render_callbacks.splice(a,1),e.pre_render_callbacks.push(o)}}else{const a=()=>{this.onBeforeRender(e,this.timedObjectsBuffer)};this.contextBeforeRenderCallbacks.set(e,a),e.pre_render_callbacks.push(a)}if(r){if(e.post_render_callbacks[e.post_render_callbacks.length-1]!==r){const a=e.post_render_callbacks.indexOf(r);a>=0&&e.post_render_callbacks.splice(a,1),e.post_render_callbacks.push(r)}}else{const a=()=>{this.onPostRender(e,this.timedObjectsBuffer,this.timesBuffer)};this.contextPostRenderCallbacks.set(e,a),e.post_render_callbacks.push(a)}t.traverse(a=>{a.layers.disableAll(),a.layers.enable(2)}),t.renderOrder=999999,t[qm]=n,t.castShadow=!1,t.receiveShadow=!1,t.isGizmo=!0,this.timedObjectsBuffer.push(t),this.timesBuffer.push(z.Current.time.realtimeSinceStartup+i),e.scene.add(t)}static timedObjectsBuffer=new Array;static timesBuffer=new Array;static contextPostRenderCallbacks=new Map;static contextBeforeRenderCallbacks=new Map;static tmuiNeedsUpdate=!1;static onBeforeRender(e,t){this.tmuiNeedsUpdate&&(this.tmuiNeedsUpdate=!1,ae.__webpack_exports__default.update());for(let i=0;i<t.length;i++){const n=t[i];if(e.mainCamera&&n instanceof ae.__webpack_exports__default.MeshUIBaseElement){if(_r(n))continue;const o=e.isInVR,r=!1,a=!o;sh(n,e.mainCamera,r,a)}}}static onPostRender(e,t,i){const n=e.time.realtimeSinceStartup;for(let o=t.length-1;o>=0;o--){const r=t[o];n>=i[o]-1e-6&&(t.splice(o,1),i.splice(o,1),r.removeFromParent(),_r(r)!=!0&&r[qm].push(r))}}}const qt=x("debugphysics"),cM=x("debugworker"),Wb=new c.Layers;class kr{static AllLayers=4294967295;ray;cam;screenPoint;raycaster;results;targets;recursive=!0;minDistance;maxDistance;lineThreshold;layerMask;ignore;testObject;useAcceleratedRaycast;allowSlowRaycastFallback=!0;screenPointFromOffset(e,t){this.screenPoint===void 0&&(this.screenPoint=new c.Vector2),this.screenPoint.x=e/window.innerWidth*2-1,this.screenPoint.y=-(t/window.innerHeight)*2+1}setLayer(e){Wb.set(e),this.layerMask=Wb}setMask(e){this.layerMask||(this.layerMask=new c.Layers);const t=this.layerMask;t?t.mask=e:this.layerMask=e}}class py{distance;point;object;constructor(e,t,i){this.object=e,this.distance=t,this.point=i}}class Ya{static _raycasting=0;static get raycasting(){return this._raycasting>0}raycastPhysicsFast(e,t=void 0,i=1/0,n=!0){return this.context.physics.engine?.raycast(e,t,{maxDistance:i,solid:n})??null}raycastPhysicsFastAndGetNormal(e,t=void 0,i=1/0,n=!0){return this.context.physics.engine?.raycastAndGetNormal(e,t,{maxDistance:i,solid:n})??null}sphereOverlapPhysics(e,t){return this.context.physics.engine?.sphereOverlap(e,t)??null}context;engine;constructor(e){this.context=e}raycaster=new c.Raycaster;defaultRaycastOptions=new kr;targetBuffer=new Array(1);defaultThresholds={Mesh:{},Line:{threshold:-1},LOD:{},Points:{threshold:0},Sprite:{}};sphereResults=new Array;sphereMask=new c.Layers;sphere=new c.Sphere;sphereOverlap(e,t,i=!0,n=!1,o=null){if(this.sphereResults.length=0,!this.context.scene)return this.sphereResults;const r=this.sphereMask;r.enableAll(),r.disable(2);for(const a of this.context.scene.children)this.intersectSphere(a,e,t,r,this.sphereResults,i,n,o);return this.sphereResults.sort((a,l)=>a.distance-l.distance)}raycastFromRay(e,t=null){const i=t??this.defaultRaycastOptions;i.ray=e;const n=this.raycast(i);return i===this.defaultRaycastOptions&&(i.ray=void 0),n}raycast(e=null){qt&&performance.mark("raycast.start"),e||(e=this.defaultRaycastOptions);const t=e.screenPoint??this.context.input.mousePositionRC,i=e.raycaster??this.raycaster;if(i.near=e.minDistance??0,i.far=e.maxDistance??1/0,i.params=this.defaultThresholds,e.lineThreshold===void 0&&(e.lineThreshold=-1),i.params.Line={threshold:e.lineThreshold},e.ray)i.ray.copy(e.ray);else{const a=e.cam??this.context.mainCamera;if(!a)return qt&&console.error("Can not perform raycast - no main camera found"),this.defaultRaycastOptions.results&&(this.defaultRaycastOptions.results.length=0),this.defaultRaycastOptions.results??[];const l=this.context.xrCamera;this.context.isInXR&&l instanceof c.ArrayCamera&&l.cameras.length>0?i.setFromCamera(t,l.cameras[0]):i.setFromCamera(t,a)}let n=e.targets;n||(n=this.targetBuffer,n.length=1,n[0]=this.context.scene);let o=e.results;this.defaultRaycastOptions.results&&(this.defaultRaycastOptions.results.length=0),o||(this.defaultRaycastOptions.results||(this.defaultRaycastOptions.results=new Array),o=this.defaultRaycastOptions.results),e.layerMask!==void 0?e.layerMask instanceof c.Layers?i.layers.mask=e.layerMask.mask:i.layers.mask=e.layerMask:(i.layers.enableAll(),i.layers.disable(2)),qt&&console.time("raycast"),o.length=0,Ya._raycasting++,this.intersect(this.raycaster,n,o,e),o.sort((a,l)=>a.distance-l.distance);const r=e.ignore;return r!==void 0&&r.length>0&&(o=o.filter(a=>!r.includes(a.object))),Ya._raycasting--,qt&&(console.timeEnd("raycast"),console.warn("#"+this.context.time.frame+", hits:",o?.length?[...o]:"nothing"),performance.mark("raycast.end"),performance.measure("raycast","raycast.start","raycast.end")),o}intersect(e,t,i,n){for(const o of t){if(!o||o.visible===!1||B.isGizmo(o)||n.lineThreshold!==void 0&&n.lineThreshold<0&&o instanceof c.Line)continue;let r=!0;const a=o,l=a.geometry;if(o.raycastAllowed===!1&&(r=!1),r&&n.testObject){const h=n.testObject?.(o);if(h===!1)continue;h==="continue in children"&&(r=!1)}else r&&(l&&Gb(l)||(r=!1));if(r){const h=i.length,d=o.raycastPreference||"lod";let u=d!=="bounds";if(n.precise===!1&&(u=!1),l&&(u||=l.getAttribute("position")?.array?.length<64),a instanceof K.GroundedSkybox&&(u=!1),d==="lod"){const f=oe.getRaycastMesh(o);f&&(a.geometry=f)}if(!u&&dM(a,e,i)||(n.useAcceleratedRaycast!==!1?Ou.runMeshBVHRaycast(e,a,i,this.context,n):e.intersectObject(a,!1,i)),a.geometry=l,qt&&i.length!=h){const f=i[i.length-1];B.DrawWireSphere(f.point,.1,7798784,1,!1),B.DrawWireMesh({mesh:o,depthTest:!1,duration:.2,color:7798784})}}n.recursive!==!1&&this.intersect(e,o.children,i,n)}return i}tempBoundingBox=new c.Box3;intersectSphere(e,t,i,n,o,r,a,l){let h=e&&e.isMesh&&e.layers.test(n)&&!B.isGizmo(e);h&&=e.visible,h&&=!(e instanceof c.Line),h&&=!(e instanceof K.GroundedSkybox);const d=e,u=d.geometry;if(h&&l){const f=l(e);if(f===!1)return;f==="continue in children"&&(h=!1)}if(u&&Gb(u)||(h=!1),h){if(a){const f=this.sphere;f.center.copy(t),f.radius=i;const m=o.length;if(Ou.runMeshBVHRaycast(this.sphere,d,o,this.context,{}),m!=o.length&&!r)return}else if(u.boundingBox||u.computeBoundingBox(),u.boundingBox){d.matrixWorldNeedsUpdate&&d.updateWorldMatrix(!1,!1);const f=this.tempBoundingBox.copy(u.boundingBox).applyMatrix4(d.matrixWorld),m=this.sphere;if(m.center.copy(t),m.radius=i,m.intersectsBox(f)){const g=te(e),v=g.distanceTo(m.center),y=new py(e,v,g);if(o.push(y),!r)return}}}if(e.children)for(const f of e.children){const m=o.length;if(this.intersectSphere(f,t,i,n,o,r,a,l),m!=o.length&&!r)return}}}function Gb(s){return!(s.index&&s.index.array.length<3)}const $o=new c.Sphere,ld=new c.Plane,hM=new c.Matrix3;function dM(s,e,t){const i=s._computeIntersections;if(!i)return!1;let n=s["_computeIntersections:Needle"];return n||(n=s["_computeIntersections:Needle"]=function(o,r,a){const l=this,h=l.geometry.boundingSphere;if(h){if(l instanceof K.GroundedSkybox){ld.setFromNormalAndCoplanarPoint(j(0,1,0),j(0,-l.position.y,0)),ld.applyMatrix4(l.matrixWorld,hM);const u=o.ray.intersectPlane(ld,j());if(u){$o.copy(h),$o.applyMatrix4(l.matrixWorld);const m=j(u).sub(o.ray.origin).length(),g=$o.radius*.5;m<g&&r.push({distance:m,point:u,object:l,normal:ld.normal.clone()})}return}$o.copy(h),$o.applyMatrix4(l.matrixWorld);const d=o.ray.intersectSphere($o,j());if(d){const u=j(d).sub(o.ray.origin),f=u.length();if(f>$o.radius){const m=u.clone().normalize();r.push({distance:f,point:d,object:l,normal:m})}}}}),s._computeIntersections=n,e.intersectObject(s,!1,t),s._computeIntersections=i,!0}var Ou;(s=>{let e=0;function t(b,w,P,k,O){if(!w.geometry||!w.geometry.hasAttribute("position"))return!1;const D=w.geometry;if(w?.isSkinnedMesh){const I=w,F=I.bvhNeedsUpdate;if(!I.staticGenerator)l(),r&&(I.staticGenerator=new r(w),I.staticGenerator.applyWorldTransforms=!1,I.staticGeometry=I.staticGenerator.generate(),D.boundsTree=a?.call(I.staticGeometry),I.staticGeometryLastUpdate=performance.now()+Math.random()*200,I.bvhNeedsUpdate=!0);else if(D.boundsTree&&(I.autoUpdateMeshBvhInterval!==void 0&&I.autoUpdateMeshBvhInterval>=0||F===!0)){const $=performance.now(),W=$-I.staticGeometryLastUpdate,T=I.autoUpdateMeshBvhInterval??100;(F||W>T)&&(qt&&console.warn(`Physics: updating skinned mesh bvh for ${w.name} after ${W.toFixed(2)}ms`),I.bvhNeedsUpdate=!1,I.staticGeometryLastUpdate=$,I.staticGenerator?.generate(I.staticGeometry),D.boundsTree.refit())}}else if(!D.boundsTree){d||_();let I=!0;if((k.xr||D[g]===!1||D.getAttribute("position")?.isInterleavedBufferAttribute||D.index&&D.index?.isInterleavedBufferAttribute||e>10)&&(I=!1),I&&f){if(D[m]===void 0){let F=null;if(y.length>0){const $=y.shift();$&&!$.running&&(F=$)}if(!F&&v.length<3)try{cM&&console.warn("[GenerateMeshBVHWorker] Creating worker with import.meta.url:",typeof document>"u"?require("url").pathToFileURL(__filename).href:Ra&&Ra.tagName.toUpperCase()==="SCRIPT"&&Ra.src||new URL("needle-engine.bundle-DdH96IqH.umd.cjs",document.baseURI).href),F=new f,v.push(F)}catch($){$ instanceof DOMException&&$.name==="SecurityError"?(console.warn("Failed to create MeshBVH worker, falling back to main thread generation. This can happen when running from file://, if the browser does not support workers or if the browser is blocking workers for other reasons."),console.debug($),e+=10):(console.error("Failed to create MeshBVH worker. Please see below for more details:"),console.log($)),e++}if(F!=null&&!F.running){const $=w.name;qt&&console.log("<<<< worker start",$,F),D[m]="queued",performance.mark("bvh.create.start");const W=D.clone();try{F.generate(W).then(T=>{D[m]="done",D.boundsTree=T}).catch(T=>{D[m]="failed - "+T?.message,D[g]=!1,qt&&console.error("Failed to generate mesh bvh on worker",T)}).finally(()=>{qt&&console.log(">>>>> worker done",$,{hasBoundsTre:D.boundsTree!=null}),y.push(F),W.dispose(),performance.mark("bvh.create.end"),performance.measure("bvh.create (worker)","bvh.create.start","bvh.create.end")})}catch(T){console.error("Failed to generate mesh bvh on worker",T)}}else qt&&console.warn("No worker available")}}else(!u||!I)&&(l(),o&&(performance.mark("bvh.create.start"),D.boundsTree=new o(D),performance.mark("bvh.create.end"),performance.measure("bvh.create","bvh.create.start","bvh.create.end")))}if(b instanceof c.Raycaster){const I=b,F=w.raycast;if(D.boundsTree)l(),n&&(w.acceleratedRaycast||(w.acceleratedRaycast=n.bind(w),qt&&console.debug(`Physics: bind acceleratedRaycast fn to "${w.name}"`)),w.raycast=w.acceleratedRaycast);else if(qt&&console.warn("No bounds tree found for mesh",w.name,{workerTask:D[m],hasAcceleratedRaycast:n!=null}),O.allowSlowRaycastFallback===!1&&(D.getAttribute("position")?.array?.length??0)>2e3)return qt&&console.warn("Skipping raycast because no bounds tree is available and allowSlowRaycastFallback is false"),!1;const $=I.firstHitOnly;return I.firstHitOnly=!1,I.intersectObject(w,!1,P),I.firstHitOnly=$,w.raycast=F,!0}else if(b instanceof c.Sphere){const I=D.boundsTree;if(I){const F=b;if(h.copy(w.matrixWorld).invert(),F.applyMatrix4(h),I.intersectsSphere(F)){const W=te(w),T=W.distanceTo(F.center),U=new py(w,T,W);P.push(U)}}return!0}return!1}s.runMeshBVHRaycast=t;let i=!1,n=null,o=null,r=null,a=null;function l(){i||(i=!0,Promise.resolve().then(()=>require("./vendor-DE_m5MvL.umd.cjs")).then(b=>b.index$1).then(b=>{n=b.acceleratedRaycast,o=b.MeshBVH,r=b.StaticGeometryGenerator,a=b.computeBoundsTree}).catch(b=>{(qt||E())&&console.error("Failed to load BVH library...",b.message)}))}const h=new c.Matrix4;let d=!1,u=!1,f=null;const m=Symbol("Needle:MeshBVH-Worker"),g=Symbol("Needle:MeshBVH-CanUseWorker"),v=[],y=[];function _(){d=!0,u=!0,Promise.resolve().then(()=>mL).then(b=>{f=b.GenerateMeshBVHWorker}).catch(b=>{qt||E()?console.warn("Failed to setup mesh bvh worker"):console.debug("Failed to setup mesh bvh worker",b)}).finally(()=>{u=!1})}})(Ou||(Ou={}));const Hb=Symbol("gltf-loader-internal-usage-tracker"),uM=x("debugusers");class ja{get name(){return"NEEDLE_internal_usage_tracker"}static isLoading(e){return ja._loadingProcesses>0}static _loadingProcesses=0;parser;_getDependency;_loadingId;_loadedObjects=new Set;constructor(e){this.parser=e,this._getDependency=this.parser.getDependency,this._loadingId=Date.now().toString()}beforeRoot(){ja._loadingProcesses++;const e=this,t=this._getDependency;return this.parser.getDependency=function(i,n){const o=t.call(this,i,n);return o.then(r=>(r&&(e._loadedObjects.add(r),r[Hb]=e._loadingId),r)),o},null}afterRoot(e){ja._loadingProcesses--,this.parser.getDependency=this._getDependency;for(const t of this._loadedObjects)delete t[Hb],t instanceof c.Object3D&&(t.parent||t instanceof c.Mesh&&setTimeout(()=>{uM&&console.warn("> GLTF LOADER: Mesh not used in scene!",t),t.material=null,t.geometry=null},1e3));return null}}class dx{constructor(){window.addEventListener("unhandledrejection",e=>{if(e.defaultPrevented)return;const t=e?.reason?.path;if(t){const i=t[0];i&&i.tagName==="IMG"&&(console.warn(`Could not load image:
884
884
  `+i.src),e.preventDefault())}})}}const hf=x("trackresources");function ux(){return hf==="dispose"}let Mr=!0;hf===0&&(Mr=!1);function fM(s){Mr=s}function fx(){return Mr}const px=Symbol("disposable");function mx(s,e){s&&(s[px]=e,hr&&console.warn("Set disposable",e,s))}const gx=Symbol("disposed");function pM(s){return s[gx]===!0}function Ce(s){if(s){if(s[px]===!1){hr&&console.warn("Object is marked as not disposable",s);return}if(typeof s=="object"&&(s[gx]=!0),s instanceof c.Scene)Ce(s.environment),Ce(s.background),Ce(s.customDepthMaterial),Ce(s.customDistanceMaterial);else if(s instanceof c.SkinnedMesh)Ce(s.geometry),Ce(s.material),Ce(s.skeleton),Ce(s.bindMatrix),Ce(s.bindMatrixInverse),Ce(s.customDepthMaterial),Ce(s.customDistanceMaterial),s.visible=!1;else if(s instanceof c.Mesh)Ce(s.geometry),Ce(s.material),Ce(s.customDepthMaterial),Ce(s.customDistanceMaterial),s.visible=!1;else if(s instanceof c.Object3D)s.visible=!1;else if(s instanceof c.BufferGeometry){ia(s);for(const e of Object.keys(s.attributes)){const t=s.attributes[e];Ce(t)}}else if(s instanceof c.BufferAttribute||s instanceof c.InterleavedBufferAttribute)hr&&console.warn("BufferAttribute dispose not supported",s.count);else if(s instanceof Array)for(const e of s)e instanceof c.Material&&Ce(e);else if(s instanceof c.Material){ia(s);for(const t of Object.keys(s)){const i=s[t];i instanceof c.Texture&&Ce(i)}const e=s.uniforms;if(e)for(const t of Object.keys(e)){const i=e[t];i instanceof c.Texture?Ce(i):i instanceof c.Uniform$1&&Ce(i.value)}}else s instanceof c.Texture?(ia(s),ia(s.source),s.source?.data instanceof ImageBitmap&&ia(s.source.data)):s instanceof c.Skeleton?(ia(s.boneTexture),s.boneTexture=null):s instanceof c.Bone||!(s instanceof c.Object3D)&&hr&&console.warn("Unknown object type",s)}}function ia(s){s&&((hr||ux()||hf)&&console.warn("🧨 FREE",s),s instanceof ImageBitmap||"dispose"in s&&typeof s.dispose=="function"&&s.dispose())}function mM(s){}const gM=new Set;function my(s,e,t=null,i){if(i||(i=gM,i.clear()),!s)return i;const n=s[zc];if(n)for(const o of n)i.has(o)||t?.call(null,o)!==!1&&(i.add(o),e&&my(o,!0,t,i));return i}function yM(s){return s[oc]}const hr=x("debugresourceusers")||x("debugmemory"),zc=Symbol("needle-resource-users"),oc=Symbol("needle-resource-users-count");function Nt(s,e){Ju(s,e,function(t,i){Mr&&!Ya.raycasting&&(Eu(zc,this,t,!1),Eu(zc,this,i,!0))})}Mr&&(Nt(c.Mesh.prototype,"material"),Nt(c.Mesh.prototype,"geometry"),Nt(c.Material.prototype,"map"),Nt(c.Material.prototype,"bumpMap"),Nt(c.Material.prototype,"alphaMap"),Nt(c.Material.prototype,"normalMap"),Nt(c.Material.prototype,"displacementMap"),Nt(c.Material.prototype,"roughnessMap"),Nt(c.Material.prototype,"metalnessMap"),Nt(c.Material.prototype,"emissiveMap"),Nt(c.Material.prototype,"specularMap"),Nt(c.Material.prototype,"envMap"),Nt(c.Material.prototype,"lightMap"),Nt(c.Material.prototype,"aoMap"),Nt(c.Material.prototype,"gradientMap"));function _M(s){if(Mr===!1)return;const e=s[zc];if(e)for(const t of e)Eu(zc,t,s,!1)}Mr&&Ju(c.Material.prototype,"dispose",function(){_M(this)});let Xm=0;function Eu(s,e,t,i){if(Xm>0)return;if(Array.isArray(t)){for(const o of t)Eu(s,e,o,i);return}if(!t)return;let n=t[s];if(n||(n=new Set),i){if(e&&!n.has(e)){n.add(e);let o=t[oc]||0;o+=1,t[oc]=o,hr&&console.warn(`🟢 Added user of "${t.type}"`,e,t,o,"users:",n)}}else if(e&&n.has(e)){n.delete(e);let o=t[oc]||0;o>0&&(o-=1,t[oc]=o),hr&&console.warn(`🔴 Removed user of "${t.type}"`,e,t,o,"users:",n),o<=0&&(ja.isLoading(t)||(hf&&console.warn(`🔴 Removed all user of "${t.type}"`,t),ux()&&Ce(t)))}t[s]=n}try{Ju(c.WebGLRenderer.prototype,"render",function(){Xm++},function(){Xm--})}catch(s){console.warn("Could not wrap WebGLRenderer.render",s)}const Nc=Symbol("NEEDLE_NEED_UPDATE_INSTANCE"),yx=Symbol("isUsingInstancing"),_x=Symbol("instancingRenderer"),rc=Symbol("instancingAutoUpdateBounds");class qi{static isUsingInstancing(e){return e[yx]===!0}static getRenderer(e){return e[_x]||null}setAutoUpdateBounds(e,t){const i=qi.getRenderer(e);i&&(i[rc]=t)}static markDirty(e,t=!0){if(e&&(this.isUsingInstancing(e)&&(e[Nc]=!0,e.matrixWorldNeedsUpdate=!0),t))for(const i of e.children)qi.markDirty(i,!0)}}const po=x("debuginstantiate"),na=new Map,Qm=Symbol("original-component-name");function Ym(s,e,t){if(e===null||!s)return;const i=s.guid,n=s.guid;n?.length&&(na.has(n)||(po&&console.log('Creating InstanceIdProvider with key "'+n+'" for object '+s.name),na.set(n,new at(n))));const o=n&&na.get(n)||e;if(s.guid=o.generateUUID(),i&&i!=="invalid"&&(t[i]=s.guid),s&&s.userData&&s.userData.components)for(const r of s.userData.components){if(r===null)continue;const a=r.guid;a?na.has(a)||(po&&console.log('Creating InstanceIdProvider with key "'+a+'" for component '+r[Qm]),na.set(a,new at(a))):po&&console.warn("Can not create IdProvider: component "+r[Qm]+" has no guid",r.guid);const l=na.get(a)||e,h=r.guid;r.guid=l.generateUUID(),h&&h!=="invalid"&&(t[h]=r.guid)}if(s.children)for(const r of s.children)Ym(r,e,t)}function bM(s){for(const e in s){const i=s[e].clone;if(!(!i?.isObject3D||!i?.userData?.components))for(let n=0;n<i.userData.components.length;n++){const o=i.userData.components[n],r=Object.entries(o);for(const[a,l]of r){if(l==null||typeof l!="object"&&typeof l!="string")continue;const h=yr(a,l,s);h!==void 0&&(o[a]=h)}}}}let gi=null;function qb(s,e){if(!po){Km(s,e);return}gi={objects:0,components:0,props:0,remapped:0};const t=typeof performance<"u"?performance.now():Date.now();Km(s,e);const i=(typeof performance<"u"?performance.now():Date.now())-t,n=gi;gi=null,console.log(`[resolveStringGuids] root="${s.name}" objects=${n.objects} components=${n.components} propsVisited=${n.props} remapped=${n.remapped} mapSize=${Object.keys(e).length} in ${i.toFixed(2)}ms`)}function Km(s,e){if(gi&&gi.objects++,s.userData?.components)for(const t of s.userData.components)t!==null&&(gi&&gi.components++,Zm(t,e));if(s.children)for(const t of s.children)Km(t,e)}function Zm(s,e,t){if(t||(t=new WeakSet),!t.has(s)){t.add(s);for(const i of Object.keys(s)){gi&&gi.props++;const n=s[i];if(n!=null)if(typeof n=="string"){const o=e[n];o&&(s[i]=o,gi&&gi.remapped++)}else if(Array.isArray(n))for(let o=0;o<n.length;o++){const r=n[o];if(typeof r=="string"){const a=e[r];a&&(n[o]=a,gi&&gi.remapped++)}else(Array.isArray(r)||Jm(r))&&Zm(r,e,t)}else Jm(n)&&Zm(n,e,t)}}}function yr(s,e,t){if(e!==void 0){if(e===null)return null;if(typeof e=="string"){const i=t[e];return i?i.clone:void 0}if(typeof e=="object"){if(tf(e))return vM(e,t);if(e.isObject3D===!0){if(s==="gameObject")return;const i=e.uuid,n=t[i]?.clone;return n?(po&&console.log(s,"old",e,"new",n),n):void 0}if(kM(e))return e.clone();if(Array.isArray(e))return wM(s,e,t);if(e instanceof Map)return xM(e,t);if(e instanceof Set)return SM(e,t);if(!(e instanceof WeakMap||e instanceof WeakSet)){if(KP(e)&&e.$serializedTypes)return CM(e,t);if(Jm(e))return PM(s,e,t)}}}}function vM(s,e){const t=s.gameObject;if(!t)return;const i=t.uuid,n=e[i]?.clone;if(!n){po&&console.log("Component reference did not change (external)",s);return}const o=t.userData.components.indexOf(s);if(o>=0&&n.isObject3D)return po&&console.log("Resolved component",i,"at index",o),n.userData.components[o];console.warn("Could not find component at expected index",s)}function wM(s,e,t){const i=[];for(let n=0;n<e.length;n++){const o=e[n];if(o==null){i.push(o);continue}if(typeof o!="object"&&typeof o!="string"){i.push(o);continue}const r=yr(s,o,t);i.push(r!==void 0?r:o)}return i}function xM(s,e){const t=new Map;let i=!1;for(const[n,o]of s){let r=n,a=o;if(typeof n=="object"&&n!==null){const l=yr("",n,e);l!==void 0&&(r=l,i=!0)}if(typeof o=="object"&&o!==null){const l=yr("",o,e);l!==void 0&&(a=l,i=!0)}t.set(r,a)}return t}function SM(s,e){const t=new Set;for(const i of s)if(typeof i=="object"&&i!==null){const n=yr("",i,e);t.add(n!==void 0?n:i)}else t.add(i);return t}function CM(s,e){const t=Object.assign(Object.create(Object.getPrototypeOf(s)),s);let i=!1;for(const n in t.$serializedTypes){const o=t[n];if(o!=null&&typeof o=="object"){po&&console.log("Recursively resolve references for",n,o);const r=yr(n,o,e);r!==void 0&&(t[n]=r,i=!0)}}return i?t:void 0}function PM(s,e,t){let i=!1;const n={...e};for(const o of Object.keys(n)){const r=n[o];if(r==null||typeof r!="object"&&typeof r!="string")continue;const a=yr(o,r,t);a!==void 0&&(n[o]=a,i=!0)}return i?n:void 0}function Jm(s){if(typeof s!="object"||s===null)return!1;const e=Object.getPrototypeOf(s);return e===Object.prototype||e===null}function kM(s){return s.isVector2===!0||s.isVector3===!0||s.isVector4===!0||s.isQuaternion===!0||s.isEuler===!0||s.isColor===!0||s.isMatrix2===!0||s.isMatrix3===!0||s.isMatrix4===!0}const bx=new Map;function vx(s,e){if(!s)return;if(!e){console.warn("No prototype found",s,s.prototype,s.constructor);return}const t=bx.get(e);t&&t.apply(s)}function gy(s){const e=MM(s.prototype);bx.set(s,e)}function MM(s){return new OM(s)}class OM{$symbol;extensions;descriptors;constructor(e){this.$symbol=Symbol("prototype-extension"),this.extensions=Object.keys(e),this.descriptors=new Array;for(let t=0;t<this.extensions.length;t++){const i=this.extensions[t],n=Object.getOwnPropertyDescriptor(e,i);n&&this.descriptors.push(n)}}apply(e){if(!e[this.$symbol]){e[this.$symbol]=!0;for(let t=0;t<this.extensions.length;t++){const i=this.extensions[t],n=this.descriptors[t];n&&Object.defineProperty(e,i,n)}}}}function df(s){s&&s.isObject3D===!0&&vx(s,c.Object3D)}let Xb=!1;function EM(){if(Xb)return;if(Xb=!0,Xg.experimentalSmartHierarchyUpdate){const i=c.Object3D.prototype.add;c.Object3D.prototype.add=function(...r){return Lp(),i.apply(this,r)};const n=c.Object3D.prototype.attach;c.Object3D.prototype.attach=function(...r){return Lp(),n.apply(this,r)};const o=c.Object3D.prototype.remove;c.Object3D.prototype.remove=function(...r){return Lp(),o.apply(this,r)}}c.Object3D.prototype.SetActive=function(i){this.visible=i},c.Object3D.prototype.setActive=function(i){this.visible=i},c.Object3D.prototype.destroy=function(){Ci(this)},c.Object3D.prototype.addComponent=function(i,n){return Yn(this,i,n)},c.Object3D.prototype.addNewComponent=function(i,n){return Yn(this,i,n)},c.Object3D.prototype.removeComponent=function(i){return vy(this,i)},c.Object3D.prototype.getOrAddComponent=function(i,n){return hh(this,i,n)},c.Object3D.prototype.getComponent=function(i){return Mo(this,i)},c.Object3D.prototype.getComponents=function(i,n){return rl(this,i,n)},c.Object3D.prototype.getComponentInChildren=function(i,n=!1){return dh(this,i,n)},c.Object3D.prototype.getComponentsInChildren=function(i,n){return al(this,i,n)},c.Object3D.prototype.getComponentInParent=function(i,n=!1){return $c(this,i,n)},c.Object3D.prototype.getComponentsInParent=function(i,n){return ff(this,i,n)},Object.getOwnPropertyDescriptor(c.Object3D.prototype,"activeSelf")||Object.defineProperty(c.Object3D.prototype,"activeSelf",{get:function(){return ol(this)},set:function(i){xc(this,i)}}),Object.getOwnPropertyDescriptor(c.Object3D.prototype,"raycastAllowed")||Object.defineProperty(c.Object3D.prototype,"raycastAllowed",{get:function(){return this.userData&&this.userData.raycastAllowed!==!1},set:function(i){const n=this;n.userData||(n.userData={}),n.userData.raycastAllowed=i}}),Object.getOwnPropertyDescriptor(c.Object3D.prototype,"worldPosition")||Object.defineProperty(c.Object3D.prototype,"worldPosition",{get:function(){return this instanceof K.TransformControlsGizmo?te(this.object):te(this)},set:function(i){Si(this,i)}}),Object.getOwnPropertyDescriptor(c.Object3D.prototype,"worldQuaternion")||Object.defineProperty(c.Object3D.prototype,"worldQuaternion",{get:function(){return this instanceof K.TransformControlsGizmo?_e(this.object):_e(this)},set:function(i){gn(this,i)}}),Object.getOwnPropertyDescriptor(c.Object3D.prototype,"worldRotation")||Object.defineProperty(c.Object3D.prototype,"worldRotation",{get:function(){return Yu(this)},set:function(i){V0(this,i)}}),Object.getOwnPropertyDescriptor(c.Object3D.prototype,"worldScale")||Object.defineProperty(c.Object3D.prototype,"worldScale",{get:function(){return Ue(this)},set:function(i){$a(this,i)}});const s=new c.Matrix4,e=new c.Vector3(0,0,0),t=new c.Vector3(0,1,0);Object.getOwnPropertyDescriptor(c.Object3D.prototype,"worldForward")||Object.defineProperty(c.Object3D.prototype,"worldForward",{get:function(){return j().set(0,0,1).applyQuaternion(_e(this))},set:function(i){const n=oi().setFromRotationMatrix(s.lookAt(e.set(0,0,0),i,t.set(0,1,0)));this.worldQuaternion=n}}),Object.getOwnPropertyDescriptor(c.Object3D.prototype,"worldRight")||Object.defineProperty(c.Object3D.prototype,"worldRight",{get:function(){return j().set(1,0,0).applyQuaternion(_e(this))}}),Object.getOwnPropertyDescriptor(c.Object3D.prototype,"worldUp")||Object.defineProperty(c.Object3D.prototype,"worldUp",{get:function(){return j().set(0,1,0).applyQuaternion(_e(this))}}),Object.getOwnPropertyDescriptor(c.Object3D.prototype,"contains")||Object.defineProperty(c.Object3D.prototype,"contains",{value:function(i){if(!i)return!1;if(this===i)return!0;for(const n of this.children)if(n.contains(i))return!0;return!1}}),gy(c.Object3D)}const Qd=x("debuggetcomponent"),TM=x("debuginstantiate");class ts{idProvider;parent;keepWorldPosition;position;rotation;scale;visible;context;components;clone(){const e=new ts;return e.idProvider=this.idProvider,e.parent=this.parent,e.keepWorldPosition=this.keepWorldPosition,e.position=Array.isArray(this.position)?[...this.position]:this.position?.clone(),e.rotation=Array.isArray(this.rotation)?[...this.rotation]:this.rotation?.clone(),e.scale=Array.isArray(this.scale)?[...this.scale]:this.scale?.clone(),e.visible=this.visible,e.context=this.context,e.components=this.components,e}cloneAssign(e){this.idProvider=e.idProvider,this.parent=e.parent,this.keepWorldPosition=e.keepWorldPosition,this.position=Array.isArray(e.position)?[...e.position]:e.position?.clone(),this.rotation=Array.isArray(e.rotation)?[...e.rotation]:e.rotation?.clone(),this.scale=Array.isArray(e.scale)?[...e.scale]:e.scale?.clone(),this.visible=e.visible,this.context=e.context,this.components=e.components}}function ol(s){return s.visible}function xc(s,e){return typeof e=="number"&&(e=e>.5),s.visible=e,s.visible}function wx(s){return s[Wn]||uf(s)}function xx(s,e){s[yx]=e}function uf(s){return qi.isUsingInstancing(s)}function yy(s,e){return Dc(s,e,!0,!0)}const Sx=Symbol("isDestroyed");function _r(s){return s[Sx]}function Cx(s,e){s[Sx]=e}const eg=Symbol("isDontDestroy");function pa(s,e=!0){s[eg]=e}const Yd=[],Kd=[];function Ci(s,e=!0,t=!1){Yd.length=0,Kd.length=0,tg(s,e,!0);for(const i of Yd)i.gameObject=null,i.context=null;for(const i of Kd)Cx(i,!0),t&&Ce(i);Kd.length=0,Yd.length=0}function tg(s,e=!0,t=!0){if(s==null)return;const i=s;if(i.isComponent){if(i[eg])return;Yd.push(i);const r=i.gameObject;i.__internalDisable?.(),i.__internalDestroy?.(),i.gameObject=r;return}if(s[eg])return;const n=s;Qd&&console.log(n),Kd.push(n);const o=n.userData?.components;if(o!=null&&Array.isArray(o)){let r=o.length;for(let a=0;a<o.length;a++){const l=o[a];tg(l,e,!1),o.length<r&&(r=o.length,a--)}}if(e&&n.children)for(const r of n.children)tg(r,e,!1);t&&n.removeFromParent()}function br(s,e,t=!0){return Px(s,e,t)}function*_y(s,e,t=!1,i=999,n=0){if(s?.userData.components&&!(n>i)){for(const o of s.userData.components)e&&o?.isComponent===!0&&o instanceof e?yield o:yield o;if(t===!0)for(const o of s.children)yield*_y(o,e,!0,i,n+1)}}function Px(s,e,t,i=0){if(s){if(s.isObject3D,i>1e3){console.warn("Failed to iterate components: too many levels");return}if(s.userData?.components)for(let n=0;n<s.userData.components.length;n++){const o=s.userData.components[n];if(o?.isComponent===!0){const r=e(o);if(r!==void 0)return r}}if(t&&s.children){const n=i+1;for(let o=0;o<s.children.length;o++){const r=s.children[o];if(!r)continue;const a=Px(r,e,t,n);if(a!==void 0)return a}}}}function vo(s,e){if("isAssetReference"in s)return s.instantiate(e??void 0);let t=null;e!=null&&(e.x!==void 0?(t=new ts,t.position=e):t=e);let i=z.Current;t?.context&&(i=t.context),Qd&&i.alias&&console.log("context",i.alias),t&&!t.idProvider&&(t.idProvider=new at(Date.now()));const n=[],o={},r={},a=kx(i,s,t,n,o,r);a&&(bM(o),AM(r,o)),Qd&&(gu(s,!0),gu(a,!0));const l={};for(const h in o){const d=o[h],u=d.original,f=d.clone;u instanceof c.Object3D&&f instanceof c.Object3D&&(l[u.guid||u.uuid]=f.guid||f.uuid)}if(t?.components!==!1){for(const h in n){const d=n[h],u=d.guid;t&&t.idProvider&&(d.guid=t.idProvider.generateUUID(),l[u]=d.guid,Qd&&console.log(d.name,d.guid)),cf(d,i),d.__internalNewInstanceCreated&&d.__internalNewInstanceCreated()}for(const h in n){const d=n[h];d.enabled!==!1&&(d.enabled=!0)}Tu(i)}return a}function kx(s,e,t,i,n,o){if(!e||e[yi]||e instanceof c.Audio||e instanceof c.AudioListener)return null;const r=e.userData;e.userData={};const a=e.children;e.children=[];const l=e.clone(!1);df(l),e.userData=r,e.children=a;const h={original:e,clone:l};if(n[e.uuid]=h,e.guid&&e.guid!==e.uuid&&(n[e.guid]=h),TM&&console.log("ADD",e,l),e.type==="SkinnedMesh"&&(o[e.uuid]={original:e,clone:l}),t?.visible!==void 0&&(l.visible=t.visible),t?.idProvider){l.uuid=t.idProvider.generateUUID();const u=l;u&&(u.guid=l.uuid)}e.animations&&e.animations.length>0&&(l.animations=[...e.animations]);const d=e.parent;if(d&&d.add(l),t?.position)if(Array.isArray(t.position)){const u=new c.Vector3;u.fromArray(t.position),l.worldPosition=u}else l.worldPosition=t.position;else l.position.copy(e.position);if(t?.rotation){if(t.rotation instanceof c.Quaternion)l.worldQuaternion=t.rotation;else if(t.rotation instanceof c.Euler)l.worldQuaternion=oi().setFromEuler(t.rotation);else if(Array.isArray(t.rotation)){const u=new c.Euler;u.fromArray(t.rotation),l.worldQuaternion=oi().setFromEuler(u)}}else l.quaternion.copy(e.quaternion);if(t?.scale)if(Array.isArray(t.scale)){const u=new c.Vector3;u.fromArray(t.scale),t.scale=u}else l.scale.copy(t.scale);else l.scale.copy(e.scale);if(t?.parent&&t.parent!=="scene"){let u=null;if(typeof t.parent=="string"?u=Dc(t.parent,s.scene,!0):u=t.parent,u){const f=t.keepWorldPosition===!0?u.attach:u.add;f?f.call(u,l):console.error("Invalid parent object",u,"received when instantiating:",e)}else console.warn("could not find parent:",t.parent)}for(const[u,f]of Object.entries(e.userData))u!=="components"&&(l.userData[u]=f);if(e.userData?.components){const u=e.userData.components,f=[];l.userData.components=f;for(let m=0;m<u.length;m++){const g=u[m],v=new g.constructor;RM(g,v),g[yc]!==void 0&&(v[yc]=g[yc]),f.push(v),v.gameObject=l,i.push(v),n[g.guid]={original:g,clone:v},Zu.dispatchComponentLifecycleEvent("component-added",v)}}t&&(t.position=void 0,t.rotation=void 0,t.scale=void 0,t.parent=void 0,t.visible=void 0);for(const u in e.children){const f=e.children[u],m=kx(s,f,t,i,n,o);m&&(n[m.uuid]={original:f,clone:m},l.add(m))}return l}function RM(s,e,t){Ga(e,s,void 0,{})}function AM(s,e){for(const t in s){const i=s[t],n=i.original,o=n.skeleton,r=i.clone;if(!o){console.warn("Skinned mesh has no skeleton?",i);continue}const a=o.bones,l=r.skeleton.clone();r.skeleton=l,r.bindMatrix.clone().copy(n.bindMatrix),r.bindMatrixInverse.copy(n.bindMatrixInverse);const h=[];l.bones=h;for(let d=0;d<a.length;d++){const u=a[d],m=e[u.uuid].clone;h.push(m)}}for(const t in s){const i=s[t].clone;i.skeleton.update(),i.bind(i.skeleton,i.bindMatrix),i.updateMatrixWorld(!0)}}function Sc(s,e){try{e||s()}catch(t){return console.error(t),!1}return!0}const ig=x("debugnewscripts"),DM=x("debughierarchy"),Me=[];function IM(){return Me.length>0}function Tu(s){if(ig&&console.log("Register new components",s.new_scripts.length,[...s.new_scripts],s.alias?"element: "+s.alias:s.hash,s),s.new_scripts_pre_setup_callbacks.length>0){for(const e of s.new_scripts_pre_setup_callbacks)e&&e();s.new_scripts_pre_setup_callbacks.length=0}if(!(s.new_scripts.length<=0)){Me.length=0,s.new_scripts.length>0&&Me.push(...s.new_scripts),s.new_scripts.length=0;for(let e=0;e<Me.length;e++)try{const t=Me[e];if(t.isComponent!==!0){(E()||ig)&&console.error(`Registered script is not a Needle Engine component.
885
885
  The script will be ignored. Please make sure your component extends "Behaviour" imported from "@needle-tools/engine"
886
886
  `,t),Me.splice(e,1),e--;continue}if(t.destroyed)continue;if(!t.gameObject){console.warn(`Component can not be initialized: no GameObject assigned.
@@ -1750,4 +1750,4 @@ Needle Engine: finished loading `+i+`
1750
1750
  ---------------------------------
1751
1751
  • `+r.passes.map(u=>u.name||u.constructor.name+"*").join(`
1752
1752
  • `)+`
1753
- `),ti&&this._onCreateEffectsDebug(this._composer,o)}createPassForMergeableEffects(e,t,i,n){if(e.length>0){const o=new A.POSTPROCESSING.MODULE.EffectPass(i,...e);o.name=e.map(r=>r.name).join(", "),o.mainScene=n,o.enabled=!0,o.renderToScreen=!1,t.addPass(o),e.length=0}}handleDevicePixelRatio(){typeof this.context.devicePixelRatio=="number"&&this.context.requestSizeUpdate()}_menuEntry=null;_passIndices=null;_onCreateEffectsDebug(e,t){if(ti==="passes"){const i=new A.POSTPROCESSING.MODULE.DepthEffect({blendFunction:A.POSTPROCESSING.MODULE.BlendFunction.NORMAL,inverted:!0});i.name="Depth Effect";const n=new A.POSTPROCESSING.MODULE.EffectPass(t,i);if(n.name="Depth Effect Pass",n.enabled=!1,e.passes.push(n),this._passIndices!==null){const r=[e.passes[0]];this._passIndices.length>0&&r.push(...this._passIndices.filter(a=>a!==0).map(a=>e.passes[a]).filter(a=>a)),r.length>0&&console.log("[PostProcessing] Passes (selected) →",r),e.passes.length=0;for(const a of r)a.enabled=!0,a.renderToScreen=!1,e.addPass(a)}const o=this.context.menu;if(o&&this._passIndices===null){this._menuEntry&&this._menuEntry.remove();const r=document.createElement("select");r.multiple=!0;const a=document.createElement("option");a.innerText="Final Output",a.value="-1",r.appendChild(a);for(const l of e.passes){const h=document.createElement("option");h.innerText=l.name,h.value=`${e.passes.indexOf(l)}`,h.title=l.name,r.appendChild(h)}o.appendChild(r),this._menuEntry=r,r.addEventListener("change",()=>{const l=Array.from(r.selectedOptions).map(h=>parseInt(h.value));l.length===1&&l[0]===-1?this._passIndices=null:this._passIndices=l,this.applyEffects(this.context)})}}}}const uL=Object.freeze(Object.defineProperty({__proto__:null,PostProcessingHandler:il},Symbol.toStringTag,{value:"Module"}));class dp{_name;_tracks=[];_currentTrack=null;_pendingSignals=[];_idProvider;constructor(e,t){this._name=e,this._idProvider=new at(t??Date.now())}static create(e,t){return new dp(e??"Timeline",t)}animationTrack(e,t){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,ge.Animation,t??null),this}audioTrack(e,t,i){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,ge.Audio,t??null),this._currentTrack.volume=i,this}activationTrack(e,t){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,ge.Activation,t??null),this}controlTrack(e){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,ge.Control,null),this}signalTrack(e,t){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,ge.Signal,t??null),this}markerTrack(e){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,ge.Marker,null),this}clip(e,t){if(!this._currentTrack)throw new Error("TimelineBuilder: .clip() must be called after a track method (e.g. .animationTrack())");this.commitInlineTracks();const i=this._currentTrack;switch(i.type){case ge.Animation:{let n;if(e instanceof c.AnimationClip)n=e;else{const d=Array.isArray(e)?e:[e],u=i.outputs[0],f=u instanceof c.Object3D?u:u!=null&&"gameObject"in u?u.gameObject:void 0;n=Wc(d,f)}const o=t??{},r=o.duration??n.duration,a=o.start??i.cursor,l=a+r,h={start:a,end:l,duration:r,timeScale:o.speed??1,clipIn:o.clipIn??0,easeInDuration:o.easeIn??0,easeOutDuration:o.easeOut??0,preExtrapolationMode:o.preExtrapolation??Ye.None,postExtrapolationMode:o.postExtrapolation??Ye.None,reversed:o.reversed,asset:{clip:n,loop:o.loop??!1,duration:n.duration,removeStartOffset:o.removeStartOffset??!1}};i.clips.push(h),i.cursor=l;break}case ge.Audio:{const n=e,o=t??{},r=o.duration,a=o.start??i.cursor,l=a+r,h={start:a,end:l,duration:r,timeScale:o.speed??1,clipIn:0,easeInDuration:o.easeIn??0,easeOutDuration:o.easeOut??0,preExtrapolationMode:Ye.None,postExtrapolationMode:Ye.None,asset:{clip:n,loop:o.loop??!1,volume:o.volume??1}};i.clips.push(h),i.cursor=l;break}case ge.Activation:{const n=e,o=n.start??i.cursor,r=o+n.duration,a={start:o,end:r,duration:n.duration,timeScale:1,clipIn:0,easeInDuration:n.easeIn??0,easeOutDuration:n.easeOut??0,preExtrapolationMode:Ye.None,postExtrapolationMode:Ye.None,asset:{}};i.clips.push(a),i.cursor=r;break}case ge.Control:{const n=e,o=t??{},r=o.start??i.cursor,a=o.duration,l=r+a,h={start:r,end:l,duration:a,timeScale:1,clipIn:0,easeInDuration:0,easeOutDuration:0,preExtrapolationMode:Ye.None,postExtrapolationMode:Ye.None,asset:{sourceObject:n,controlActivation:o.controlActivation??!0,updateDirector:o.updateDirector??!0}};i.clips.push(h),i.cursor=l;break}default:throw new Error(`TimelineBuilder: .clip() is not supported on track type "${i.type}"`)}return this}marker(e,t,i){if(!this._currentTrack)throw new Error("TimelineBuilder: .marker() must be called after a track method");if(this._currentTrack.type!==ge.Signal&&this._currentTrack.type!==ge.Marker)throw new Error(`TimelineBuilder: .marker() is only supported on signal and marker tracks, not "${this._currentTrack.type}"`);const n={type:Xc.Signal,time:e,retroActive:i?.retroActive??!1,emitOnce:i?.emitOnce??!1,asset:t};return this._currentTrack.markers.push(n),e>this._currentTrack.cursor&&(this._currentTrack.cursor=e),this}signal(e,t,i){if(!this._currentTrack)throw new Error("TimelineBuilder: .signal() must be called after a track method");if(this._currentTrack.type!==ge.Signal&&this._currentTrack.type!==ge.Marker)throw new Error(`TimelineBuilder: .signal() is only supported on signal and marker tracks, not "${this._currentTrack.type}"`);const n=this._idProvider.generateUUID(),o=this._tracks.indexOf(this._currentTrack),r={type:Xc.Signal,time:e,retroActive:i?.retroActive??!1,emitOnce:i?.emitOnce??!1,asset:n};return this._currentTrack.markers.push(r),this._pendingSignals.push({trackIndex:o,guid:n,callback:t}),e>this._currentTrack.cursor&&(this._currentTrack.cursor=e),this}muted(e=!0){if(!this._currentTrack)throw new Error("TimelineBuilder: .muted() must be called after a track method");return this._currentTrack.muted=e,this}track(e,t,i,n){if(!this._currentTrack)throw new Error("TimelineBuilder: .track() must be called after .animationTrack()");if(this._currentTrack.type!==ge.Animation)throw new Error("TimelineBuilder: .track() is only supported on animation tracks");return this._currentTrack.inlineTracks.push(wy(e,t,i,n)),this}build(){this.commitInlineTracks();const e=this._tracks.map(t=>{const i={name:t.name,type:t.type,muted:t.muted,outputs:t.outputs};return t.clips.length>0&&(i.clips=t.clips),t.markers.length>0&&(i.markers=t.markers),t.volume!==void 0&&(i.volume=t.volume),t.trackOffset!==void 0&&(i.trackOffset=t.trackOffset),i});return{name:this._name,tracks:e}}install(e){const t=this.build();if(this._pendingSignals.length>0){const i=e.gameObject;let n=C.getComponent(i,wr);n||(n=C.addComponent(i,wr)),n.events||(n.events=[]);for(const o of this._pendingSignals){const r=new ph;r.guid=o.guid;const a=new cl;a.signal=r,a.reaction=new Z([o.callback]),n.events.push(a);const l=t.tracks[o.trackIndex];l&&!l.outputs.includes(n)&&l.outputs.push(n)}}return e.playableAsset=t,t}pushTrack(e,t,i){const n={name:e,type:t,muted:!1,outputs:i?[i]:[],clips:[],markers:[],cursor:0,inlineTracks:[]};return this._tracks.push(n),n}commitInlineTracks(){if(!this._currentTrack||this._currentTrack.inlineTracks.length===0)return;const e=this._currentTrack,t=e.outputs[0],i=t instanceof c.Object3D?t:t!=null&&"gameObject"in t?t.gameObject:void 0,n=Wc(e.inlineTracks,i),o=e.cursor,r=n.duration,a={start:o,end:o+r,duration:r,timeScale:1,clipIn:0,easeInDuration:0,easeOutDuration:0,preExtrapolationMode:Ye.None,postExtrapolationMode:Ye.None,asset:{clip:n,loop:!1,duration:n.duration,removeStartOffset:!1}};e.clips.push(a),e.cursor=o+r,e.inlineTracks=[]}}class BC{}const fL=Object.freeze(Object.defineProperty({__proto__:null,ActionBuilder:pe,ActionCollection:BS,ActionModel:si,AlignmentConstraint:gh,Animation:Lt,AnimationBuilder:pf,AnimationCurve:Th,AnimationExtension:Lf,Animator:gt,AnimatorController:Gn,Antialiasing:Ah,Attractor:Cl,AudioExtension:Dr,AudioListener:bs,AudioSource:Pi,Avatar:xo,AvatarMarker:Ze,AxesHelper:hl,AxisRotationConstraint:jy,BaseUIComponent:Yi,BasicIKConstraint:Ry,BehaviorExtension:l_,BehaviorModel:Et,BloomEffect:Yf,BoxCollider:kf,BoxGizmo:jr,BoxHelperComponent:Ot,Button:Ns,CallInfo:Hn,Camera:Yt,CameraTargetReachedEvent:qc,Canvas:Ja,CanvasGroup:So,CapsuleCollider:Os,ChangeMaterialOnClick:t_,ChangeTransformOnClick:Ir,CharacterController:Rr,CharacterControllerInput:As,ChromaticAberration:Dh,ClickThrough:ap,ColorAdjustments:Io,ColorBySpeedModule:Sl,ColorOverLifetimeModule:qf,ContactShadows:yh,CursorFollow:Qr,CustomBranding:Br,Deletable:Ly,DeleteBox:go,DepthOfField:Sn,DeviceFlag:Mf,DocumentExtension:LC,DragControls:sr,DragProfile:Iu,DropListener:Is,Duplicatable:Hy,EffectWrapper:eh,EmissionModule:Fs,EmphasizeOnClick:pl,EnvironmentScene:Cf,EventList:Z,EventListEvent:xy,EventSystem:Kt,EventTrigger:Df,FieldWithDefault:pS,FixedJoint:x_,FixedRotationAxesConstraint:iS,Fog:bl,GltfExport:Ky,GltfExportBox:Qy,GrabPointPlaneConstraint:bh,Gradient:Ur,Graphic:Mh,GraphicRaycaster:_f,GridHelper:vl,GridLayoutGroup:p_,GridSnapConstraint:Of,GroundProjectedEnv:is,GroupActionModel:or,HideOnStart:Ni,HingeJoint:Eh,HorizontalLayoutGroup:f_,get HoverAnimation(){return exports.HoverAnimation},Image:El,InheritVelocityModule:M_,InputField:U_,InstanceHandle:mr,InstancingHandler:Cr,Interactable:Iy,KeepRotationConstraint:Ef,KeepScaleConstraint:tS,Keyframe:ci,LODGroup:Wf,LODModel:wl,Light:Rt,LimitVelocityOverLifetimeModule:ht,LogStats:Dy,LookAt:z_,LookAtConstraint:Er,MainModule:Ft,MaskableGraphic:Oh,MeshCollider:Oo,MeshRenderer:wh,MinMaxCurve:X,MinMaxGradient:zr,NeedleMenu:ss,NestedGltf:xl,Networking:P_,NoiseModule:me,ObjectRaycaster:Qi,OffsetConstraint:Fr,OpenURL:Tl,OrbitControls:de,Outline:_l,Padding:Lr,ParticleBurst:Vu,ParticleSubEmitter:O_,ParticleSystem:Jc,ParticleSystemRenderer:tn,PhysicsExtension:c_,PixelationEffect:Ih,PlaneHeightLockConstraint:Fy,PlayAnimationOnClick:Kc,PlayAudioOnClick:wo,PlayableDirector:Ka,PlayerColor:el,PointerEventData:fh,PostProcessingHandler:il,PreliminaryAction:ml,PreliminaryTrigger:Sh,RawImage:sp,Rect:GS,RectTransform:bn,ReflectionProbe:gs,RegisteredAnimationInfo:fo,RemoteSkybox:Ey,Renderer:Zt,RendererLightmap:Vy,Rigidbody:We,RotationBySpeedModule:en,RotationOverLifetimeModule:xn,ScaleLimitConstraint:By,SceneSwitcher:He,ScreenCapture:Lo,ScreenSpaceAmbientOcclusion:Us,ScreenSpaceAmbientOcclusionN8:Cn,ScrollFollow:as,SeeThrough:I_,SetActiveOnClick:i_,ShadowCatcher:zh,ShapeModule:k_,SharpeningEffect:Bh,SignalAsset:ph,SignalReceiver:wr,SignalReceiverEvent:cl,SignalTrackHandler:Yc,Size:WS,SizeBySpeedModule:pi,SizeOverLifetimeModule:Nr,SkinnedMeshRenderer:Wy,SmoothFollow:Jf,SnapToSurfaceConstraint:Tf,SpatialGrabRaycaster:vr,SpatialHtml:Wh,SpatialTrigger:ep,SpatialTriggerReceiver:Zn,SpectatorCamera:tp,SphereCollider:dl,SplineContainer:qr,SplineData:Jn,SplineWalker:sn,Sprite:Ls,SpriteData:za,SpriteRenderer:ui,SpriteSheet:Za,SubEmitterSystem:Wu,SyncedCamera:L_,SyncedRoom:Pn,SyncedTransform:_n,TapGestureTrigger:s_,TeleportTarget:zf,TestRunner:B_,TestSimulateUserData:j_,Text:jt,TextBuilder:d_,TextExtension:$f,TextureSheetAnimationModule:Ut,TiltShiftEffect:rs,TimelineActivationTrack:wf,TimelineAnimationTrack:Qc,TimelineAudioTrack:vs,TimelineBuilder:dp,TimelineControlTrack:xf,TimelineMarkerTrack:vf,ToneMappingEffect:$r,TrailModule:Be,TransformData:De,TransformGizmo:Xr,TriggerBuilder:It,TriggerModel:yo,UIRaycastUtils:Cy,UIRootComponent:Ph,USDZExporter:Kn,USDZText:Oa,USDZUIExtension:g_,UsageMarker:_h,VariantAction:e_,VelocityOverLifetimeModule:ze,VerticalLayoutGroup:u_,VideoPlayer:lt,get ViewBox(){return exports.ViewBox},Vignette:Gr,VisibilityAction:Ch,Voip:zs,Volume:jh,VolumeParameter:N,VolumeProfile:Xf,WebARCameraBackground:Hh,WebARSessionRoot:Gi,WebXR:Nf,WebXRImageTracking:Dl,WebXRImageTrackingModel:Xi,WebXRPlaneTracking:Ws,WebXRTrackedImage:tl,XRControllerFollow:$s,XRControllerModel:Es,XRControllerMovement:Mi,XRFlag:pn,XRRig:hp,XRState:Xt,__Ignore:BC},Symbol.toStringTag,{value:"Module"}));exports.SplineUtils=void 0;(s=>{function e(t,i=!1,n=.75){const o=new qr,r=1-L.clamp(n,0,1);return t.forEach((a,l)=>{const h=new c.Vector3;l<t.length-1?h.subVectors(t[l+1],a).normalize().multiplyScalar(r):i&&t.length>1&&h.subVectors(t[0],a).normalize().multiplyScalar(r);const d=new Jn;d.position.copy(a),d.tangentIn.copy(h),d.tangentOut.copy(h),o.addKnot(d)}),o.closed=i,o}s.createFromPoints=e})(exports.SplineUtils||(exports.SplineUtils={}));class pL extends fe.WorkerBase{constructor(){super(new Worker(new URL("/generateMeshBVH.worker-DiCnZlf3.js",typeof document>"u"?require("url").pathToFileURL(__filename).href:Ra&&Ra.tagName.toUpperCase()==="SCRIPT"&&Ra.src||new URL("needle-engine.bundle-n5YALNtc.umd.cjs",document.baseURI).href),{type:"module"})),this.name="GenerateMeshBVHWorker"}runTask(e,t,i={}){return new Promise((n,o)=>{if(t.getAttribute("position").isInterleavedBufferAttribute||t.index&&t.index.isInterleavedBufferAttribute)throw new Error("GenerateMeshBVHWorker: InterleavedBufferAttribute are not supported for the geometry attributes.");e.onerror=h=>{o(new Error(`[GenerateMeshBVHWorker] ${h.message||"Could not load worker."}`))},e.onmessage=h=>{const{data:d}=h;if(d.error)o(new Error(d.error)),e.onmessage=null;else if(d.serialized){const{serialized:u,position:f}=d,m=fe.MeshBVH.deserialize(u,t,{setIndex:!1}),g=Object.assign({setBoundingBox:!0},i);if(t.attributes.position.array=f,u.index)if(t.index)t.index.array=u.index;else{const v=new c.BufferAttribute(u.index,1,!1);t.setIndex(v)}g.setBoundingBox&&(t.boundingBox=m.getBoundingBox(new c.Box3)),i.onProgress&&i.onProgress(d.progress),n(m),e.onmessage=null}else i.onProgress&&i.onProgress(d.progress)};const r=t.index?t.index.array:null,a=t.attributes.position.array,l=[a];r&&l.push(r),e.postMessage({index:r,position:a,options:{...i,onProgress:null,includedProgressCallback:!!i.onProgress,groups:[...t.groups]}},l.map(h=>h.buffer).filter(h=>typeof SharedArrayBuffer>"u"||!(h instanceof SharedArrayBuffer)))})}}const mL=Object.freeze(Object.defineProperty({__proto__:null,GenerateMeshBVHWorker:pL},Symbol.toStringTag,{value:"Module"}));exports.$componentName=bu;exports.$physicsKey=_P;exports.ActionBuilder=pe;exports.ActionCollection=BS;exports.ActionModel=si;exports.Addressables=Ow;exports.AlignmentConstraint=gh;exports.AmbientMode=La;exports.Animation=Lt;exports.AnimationBuilder=pf;exports.AnimationCurve=Th;exports.AnimationExtension=Lf;exports.Animator=gt;exports.AnimatorConditionMode=ai;exports.AnimatorController=Gn;exports.AnimatorControllerBuilder=mf;exports.AnimatorControllerParameterType=nr;exports.AnimatorStateInfo=ac;exports.Antialiasing=Ah;exports.Application=yn;exports.AssetDatabase=dx;exports.AssetReference=J;exports.Attractor=Cl;exports.AudioClip=cg;exports.AudioExtension=Dr;exports.AudioListener=bs;exports.AudioRolloffMode=Hx;exports.AudioSource=Pi;exports.Avatar=xo;exports.AvatarMarker=Ze;exports.Axes=ka;exports.AxesHelper=hl;exports.AxisRotationConstraint=jy;exports.BUILD_TIME=Ic;exports.BaseUIComponent=Yi;exports.BasicIKConstraint=Ry;exports.BehaviorExtension=l_;exports.BehaviorModel=Et;exports.BloomEffect=Yf;exports.BoxCollider=kf;exports.BoxGizmo=jr;exports.BoxHelperComponent=Ot;exports.Button=Ns;exports.ButtonsFactory=Wi;exports.CallDirection=cC;exports.CallInfo=Hn;exports.Camera=Yt;exports.CameraTargetReachedEvent=qc;exports.Canvas=Ja;exports.CanvasGroup=So;exports.CapsuleCollider=Os;exports.ChangeMaterialOnClick=t_;exports.ChangeTransformOnClick=Ir;exports.CharacterController=Rr;exports.CharacterControllerInput=As;exports.ChromaticAberration=Dh;exports.CircularBuffer=xi;exports.ClearFlags=fr;exports.ClickThrough=ap;exports.ClipExtrapolation=Ye;exports.Collider=Ti;exports.Collision=aw;exports.CollisionDetectionMode=yf;exports.ColorAdjustments=Io;exports.ColorBySpeedModule=Sl;exports.ColorOverLifetimeModule=qf;exports.Component=XM;exports.Component$1=R;exports.ComponentLifecycleEvents=Zu;exports.Components=fL;exports.ConnectionEvents=Uw;exports.ContactPoint=rw;exports.ContactShadows=yh;exports.Context=z;exports.ContextArgs=rM;exports.ContextEvent=re;exports.ContextRegistry=se;exports.CursorFollow=Qr;exports.CustomBranding=Br;exports.CustomShader=Se;exports.DefaultReflectionMode=ku;exports.Deletable=Ly;exports.DeleteBox=go;exports.DepthOfField=Sn;exports.DepthOfFieldMode=oC;exports.DeviceFlag=Mf;exports.DirectorWrapMode=Xx;exports.DisposableStore=eu;exports.DocumentExtension=LC;exports.DragControls=sr;exports.DragMode=Uy;exports.DragProfile=Iu;exports.DropListener=Is;exports.Duplicatable=Hy;exports.EffectWrapper=eh;exports.EmissionModule=Fs;exports.EmphasizeOnClick=pl;exports.EngineLoadingView=th;exports.EnvironmentScene=Cf;exports.EventBus=$m;exports.EventList=Z;exports.EventListEvent=xy;exports.EventSystem=Kt;exports.EventTrigger=Df;exports.FieldWithDefault=pS;exports.FileReference=cr;exports.FileReferenceSerializer=Tw;exports.FileSpawnModel=ZE;exports.File_Event=sS;exports.FixedJoint=x_;exports.FixedRotationAxesConstraint=iS;exports.Fog=bl;exports.FontStyle=Nu;exports.FrameEvent=ve;exports.GENERATOR=Va;exports.GameObject=C;exports.Gizmos=B;exports.GltfExport=Ky;exports.GltfExportBox=Qy;exports.GrabPointPlaneConstraint=bh;exports.Gradient=Ur;exports.Graphic=Mh;exports.GraphicRaycaster=_f;exports.Graphics=bo;exports.GridHelper=vl;exports.GridLayoutGroup=p_;exports.GridSnapConstraint=Of;exports.GroundProjectedEnv=is;exports.GroupActionModel=or;exports.HideFlags=ef;exports.HideOnStart=Ni;exports.HingeJoint=Eh;exports.HorizontalLayoutGroup=f_;exports.HorizontalWrapMode=YS;exports.HostData=zP;exports.Image=El;exports.ImageReference=lr;exports.ImageReferenceSerializer=Ew;exports.InheritVelocityModule=M_;exports.Input=Dw;exports.InputEventQueue=ri;exports.InputEvents=be;exports.InputField=U_;exports.InstanceHandle=mr;exports.InstancingHandler=Cr;exports.InstancingUtil=qi;exports.InstantiateEvent=gw;exports.InstantiateIdProvider=at;exports.InstantiateOptions=ts;exports.Interactable=Iy;exports.JoinedRoomResponse=_k;exports.KeepRotationConstraint=Ef;exports.KeepScaleConstraint=tS;exports.KeyEventArgs=hk;exports.Keyframe=ci;exports.LODGroup=Wf;exports.LODModel=wl;exports.LODsManager=Iw;exports.LeftRoomResponse=bk;exports.Light=Rt;exports.LightData=qw;exports.LimitVelocityOverLifetimeModule=ht;exports.LoadingElementOptions=ZI;exports.LogStats=Dy;exports.LogType=bi;exports.LookAt=z_;exports.LookAtConstraint=Er;exports.MODULES=A;exports.MainModule=Ft;exports.MarkerType=Xc;exports.MaskableGraphic=Oh;exports.MaterialPropertyBlock=Ps;exports.Mathf=L;exports.MeshCollider=Oo;exports.MeshRenderer=wh;exports.MinMaxCurve=X;exports.MinMaxGradient=zr;exports.NEEDLE_ENGINE_FEATURE_FLAGS=Xg;exports.NEKeyboardEvent=sc;exports.NEPointerEvent=ms;exports.NEToneMappingMode=Ta;exports.NeedleButtonElement=RC;exports.NeedleEngineWebComponent=H_;exports.NeedleMenu=ss;exports.NeedlePatchesKey=Wd;exports.NeedleXRController=cy;exports.NeedleXRSession=V;exports.NeedleXRSync=Zw;exports.NeedleXRUtils=hx;exports.NestedGltf=xl;exports.NetworkConnection=Bc;exports.NetworkedStreamEvents=Qn;exports.NetworkedStreams=Fh;exports.Networking=P_;exports.NewInstanceModel=_w;exports.NoiseModule=me;exports.ObjectRaycaster=Qi;exports.ObjectUtils=ko;exports.OffsetConstraint=Fr;exports.OneEuroFilter=$d;exports.OneEuroFilterXYZ=Ug;exports.OpenURL=Tl;exports.OrbitControls=de;exports.Outline=_l;exports.OwnershipEvent=zw;exports.OwnershipModel=Nw;exports.PUBLIC_KEY=ho;exports.Padding=Lr;exports.ParticleBurst=Vu;exports.ParticleSubEmitter=O_;exports.ParticleSystem=Jc;exports.ParticleSystemBaseBehaviour=Do;exports.ParticleSystemRenderer=tn;exports.ParticleSystemShapeType=$u;exports.PeerHandle=ws;exports.PeerNetworking=Fw;exports.Physics=Ya;exports.PhysicsExtension=c_;exports.PhysicsMaterialCombine=dt;exports.PixelationEffect=Ih;exports.PlaneHeightLockConstraint=Fy;exports.PlayAnimationOnClick=Kc;exports.PlayAudioOnClick=wo;exports.PlayableDirector=Ka;exports.PlayerColor=el;exports.PlayerState=li;exports.PlayerStateEvent=US;exports.PlayerSync=r_;exports.PlayerView=$w;exports.PlayerViewManager=Vw;exports.PointerEventData=fh;exports.PointerType=of;exports.PostProcessing=Kw;exports.PostProcessingEffect=tt;exports.PostProcessingEffectOrder=rt;exports.PostProcessingHandler=il;exports.Prefabs=Wa;exports.PreliminaryAction=ml;exports.PreliminaryTrigger=Sh;exports.PrimitiveType=sl;exports.Progress=ce;exports.PromiseAllWithErrors=jg;exports.PromiseErrorResult=km;exports.QualityLevel=iC;exports.RGBAColor=ne;exports.RapierPhysics=Na;exports.RawImage=sp;exports.RaycastOptions=kr;exports.Rect=GS;exports.RectTransform=bn;exports.ReflectionProbe=gs;exports.ReflectionProbeUsage=fS;exports.RegisteredAnimationInfo=fo;exports.RemoteSkybox=Ey;exports.RenderTexture=qn;exports.RenderTextureSerializer=Ux;exports.Renderer=Zt;exports.RendererData=Hw;exports.RendererLightmap=Vy;exports.Rigidbody=We;exports.RigidbodyConstraints=Ve;exports.RoomEvents=ee;exports.RotationBySpeedModule=en;exports.RotationOverLifetimeModule=xn;exports.ScaleLimitConstraint=By;exports.SceneLightSettings=Lu;exports.SceneSwitcher=He;exports.ScreenCapture=Lo;exports.ScreenSpaceAmbientOcclusion=Us;exports.ScreenSpaceAmbientOcclusionN8=Cn;exports.ScreenSpaceAmbientOcclusionN8QualityMode=Gu;exports.ScrollFollow=as;exports.SeeThrough=I_;exports.SendQueue=fn;exports.SerializationContext=ny;exports.SetActiveOnClick=i_;exports.ShadowCastingMode=Fu;exports.ShadowCatcher=zh;exports.ShapeModule=k_;exports.ShapeOverlapResult=lw;exports.SharpeningEffect=Bh;exports.SignalAsset=ph;exports.SignalReceiver=wr;exports.SignalReceiverEvent=cl;exports.SignalTrackHandler=Yc;exports.Size=WS;exports.SizeBySpeedModule=pi;exports.SizeOverLifetimeModule=Nr;exports.SkinnedMeshRenderer=Wy;exports.SmoothFollow=Jf;exports.SnapToSurfaceConstraint=Tf;exports.SpatialGrabRaycaster=vr;exports.SpatialHtml=Wh;exports.SpatialTrigger=ep;exports.SpatialTriggerReceiver=Zn;exports.SpectatorCamera=tp;exports.SphereCollider=dl;exports.SphereIntersection=py;exports.SplineContainer=qr;exports.SplineData=Jn;exports.SplineWalker=sn;exports.Sprite=Ls;exports.SpriteData=za;exports.SpriteRenderer=ui;exports.SpriteSheet=Za;exports.StateMachineBehaviour=JM;exports.StreamEndedEvent=D_;exports.StreamReceivedEvent=lC;exports.SubEmitterSystem=Wu;exports.SyncedCamera=L_;exports.SyncedRoom=Pn;exports.SyncedTransform=_n;exports.TapGestureTrigger=s_;exports.TeleportTarget=zf;exports.TestRunner=B_;exports.TestSimulateUserData=j_;exports.Text=jt;exports.TextAnchor=Qe;exports.TextBuilder=d_;exports.TextExtension=$f;exports.TextureSheetAnimationModule=Ut;exports.TiltShiftEffect=rs;exports.Time=Xw;exports.TimelineActivationTrack=wf;exports.TimelineAnimationTrack=Qc;exports.TimelineAudioTrack=vs;exports.TimelineBuilder=dp;exports.TimelineControlTrack=xf;exports.TimelineMarkerTrack=vf;exports.TimelineTrackHandler=Tr;exports.ToneMappingEffect=$r;exports.TrackType=ge;exports.TrailModule=Be;exports.TransformData=De;exports.TransformGizmo=Xr;exports.TriggerBuilder=It;exports.TriggerModel=yo;exports.TypeStore=M;exports.UIRaycastUtils=Cy;exports.UIRootComponent=Ph;exports.USDDocument=Zy;exports.USDObject=Je;exports.USDWriter=MS;exports.USDZExporter=OS;exports.USDZExporter$1=Kn;exports.USDZText=Oa;exports.USDZUIExtension=g_;exports.UriSerializer=zx;exports.UsageMarker=_h;exports.UserJoinedOrLeftRoomModel=vk;exports.VERSION=Qt;exports.VariantAction=e_;exports.VelocityOverLifetimeModule=ze;exports.VerticalLayoutGroup=u_;exports.VerticalWrapMode=QS;exports.VideoPlayer=lt;exports.ViewDevice=Cs;exports.Vignette=Gr;exports.VisibilityAction=Ch;exports.Voip=zs;exports.Volume=jh;exports.VolumeParameter=N;exports.VolumeProfile=Xf;exports.WaitForFrames=rk;exports.WaitForPromise=Aw;exports.WaitForSeconds=sy;exports.Watch=xs;exports.WebARCameraBackground=Hh;exports.WebARSessionRoot=Gi;exports.WebXR=Nf;exports.WebXRButtonFactory=_o;exports.WebXRImageTracking=Dl;exports.WebXRImageTrackingModel=Xi;exports.WebXRPlaneTracking=Ws;exports.WebXRTrackedImage=tl;exports.XRControllerFollow=$s;exports.XRControllerModel=Es;exports.XRControllerMovement=Mi;exports.XRFlag=pn;exports.XRRig=hp;exports.XRState=Xt;exports.XRStateFlag=$n;exports.__Ignore=BC;exports.__internalNotifyObjectDestroyed=mM;exports.__nlZsk=rh;exports.__zrAx=Hi;exports.activeInHierarchyFieldName=Wn;exports.addAttributeChangeCallback=uu;exports.addComponent=Yn;exports.addCustomExtensionPlugin=xT;exports.addNewComponent=dr;exports.addPatch=Ju;exports.apply=df;exports.applyHMRChanges=GM;exports.applyPrototypeExtensions=vx;exports.beginListenDestroy=yw;exports.beginListenInstantiate=ww;exports.binaryIdentifierCasts=oy;exports.build_scene_functions=oM;exports.builtinComponentKeyName=Zo;exports.calculateProgress01=G_;exports.clearMessages=d1;exports.compareAssociation=Cw;exports.copyTexture=G0;exports.createMotion=Bx;exports.debugNet=ii;exports.debugOwner=fa;exports.decompressGpuTexture=AS;exports.deepClone=nh;exports.delay=ks;exports.delayForFrames=Xu;exports.deserializeObject=Cu;exports.destroy=Ci;exports.destroyComponentInstance=Tx;exports.determineMimeTypeFromExtension=oS;exports.disposeObjectResources=Ce;exports.disposeStream=$i;exports.editorGuidKeyName=yc;exports.enableSpatialConsole=Aa;exports.exportAsGLTF=cL;exports.findByGuid=yy;exports.findObjectOfType=ll;exports.findObjectsOfType=Ax;exports.findResourceUsers=my;exports.fitCamera=Vx;exports.fitObjectIntoVolume=q0;exports.foreachComponent=br;exports.foreachComponentEnumerator=_y;exports.forward=T1;exports.generateQRCode=rx;exports.generateSeed=vw;exports.getBoundingBox=hi;exports.getCameraController=j0;exports.getComponent=Mo;exports.getComponentInChildren=dh;exports.getComponentInParent=$c;exports.getComponents=rl;exports.getComponentsInChildren=al;exports.getComponentsInParent=ff;exports.getFormattedDate=SS;exports.getIconElement=mt;exports.getIconTexture=Gm;exports.getLoader=Ms;exports.getOrAddComponent=hh;exports.getParam=x;exports.getParentHierarchyPath=D1;exports.getPath=VC;exports.getPeerOptions=fk;exports.getPeerjsInstance=jw;exports.getResourceUserCount=yM;exports.getSceneData=Gw;exports.getTempColor=N0;exports.getTempQuaternion=oi;exports.getTempVector=j;exports.getUrlParams=ih;exports.getVisibleInCustomShadowRendering=H0;exports.getWorldDirection=$0;exports.getWorldEuler=$g;exports.getWorldPosition=te;exports.getWorldQuaternion=_e;exports.getWorldRotation=Yu;exports.getWorldScale=Ue;exports.hasPointerEventComponent=Au;exports.hideDebugConsole=Z0;exports.imageToCanvas=DS;exports.initAddressableSerializers=Rw;exports.initBuiltinSerializers=Nx;exports.initEngine=rL;exports.initPhysics=TC;exports.initVolumeParameterSerializer=Yx;exports.instantiate=vo;exports.invokeLoadedImportPluginHooks=dS;exports.invokeXRSessionEnd=ox;exports.invokeXRSessionStart=sx;exports.isActiveInHierarchy=wx;exports.isActiveSelf=ol;exports.isAndroidDevice=QC;exports.isAnimationAction=W0;exports.isComponent=tf;exports.isDebugMode=FC;exports.isDesktop=GC;exports.isDestroyed=_r;exports.isDevEnvironment=E;exports.isDisposable=HM;exports.isDisposed=pM;exports.isExporting=aL;exports.isGLTFModel=ow;exports.isHostedOnGlitch=C0;exports.isHotReloadEnabled=ag;exports.isHotReloading=VM;exports.isIPad=qC;exports.isIconElement=ax;exports.isLocalNetwork=wi;exports.isMacOS=KC;exports.isMobileDevice=HC;exports.isMozillaXR=YC;exports.isQuest=e1;exports.isResourceTrackingEnabled=fx;exports.isSafari=JC;exports.isTrackModel=oE;exports.isUsingInstancing=uf;exports.isiOS=ZC;exports.isiPad=XC;exports.loadAsset=$I;exports.loadPMREM=Pf;exports.loadSync=W_;exports.logHierarchy=gu;exports.lookAtInverse=x1;exports.lookAtObject=sh;exports.lookAtScreenPoint=S1;exports.makeId=zC;exports.makeIdFromRandomWords=M0;exports.makeNameSafe=ki;exports.markAsInstancedRendered=xx;exports.microphonePermissionsGranted=t1;exports.nameof=jC;exports.nameofFactory=P0;exports.needle=xk;exports.oMxKl=Ss;exports.offBeforeXRSession=nx;exports.offXRSessionEnd=ix;exports.offXRSessionStart=tx;exports.on=qM;exports.onAfterRender=CP;exports.onBeforeRender=SP;exports.onBeforeXRSession=Yk;exports.onClear=wP;exports.onDestroy=xP;exports.onInitialized=Kg;exports.onStart=sf;exports.onSyncDestroy=UP;exports.onSyncInstantiate=bw;exports.onUpdate=uw;exports.onXRSessionEnd=dy;exports.onXRSessionStart=af;exports.parseSync=OC;exports.placeOnSurface=X0;exports.postprocessFBXMaterials=Gg;exports.prefix=UO;exports.pushState=k0;exports.randomNumber=NC;exports.registerBinaryType=ry;exports.registerComponent=cf;exports.registerComponentExtension=Ny;exports.registerCustomEffectType=nn;exports.registerExportExtensions=$y;exports.registerExtensions=ju;exports.registerHotReloadType=Dx;exports.registerLoader=hw;exports.registerPrefabProvider=xw;exports.registerPrototypeExtensions=gy;exports.registerType=qg;exports.relativePathPrefix=E0;exports.removeAttributeChangeCallback=R0;exports.removeComponent=vy;exports.removeCustomImportExtensionType=ST;exports.removePatch=mP;exports.resolveUrl=es;exports.sanitizeString=O0;exports.saveImage=CC;exports.screenshot=wI;exports.screenshot2=V_;exports.sendDestroyed=Jg;exports.serializable=p;exports.serializeObject=kw;exports.serializeable=Ge;exports.setActive=xc;exports.setAllowBalloonMessages=I0;exports.setAllowOverlayMessages=a1;exports.setAutoFitEnabled=pu;exports.setCameraController=Em;exports.setDestroyed=Cx;exports.setDevEnvironment=g1;exports.setDisposable=mx;exports.setDontDestroy=pa;exports.setOrAddParamsToUrl=Pm;exports.setParam=UC;exports.setParamWithoutReload=Ac;exports.setPeerOptions=pk;exports.setResourceTrackingEnabled=fM;exports.setState=Lg;exports.setVisibleInCustomShadowRendering=Wg;exports.setWorldEuler=Vg;exports.setWorldPosition=Si;exports.setWorldPositionXYZ=gr;exports.setWorldQuaternion=gn;exports.setWorldQuaternionXYZW=Ng;exports.setWorldRotation=V0;exports.setWorldRotationXYZ=oh;exports.setWorldScale=$a;exports.showBalloonError=nl;exports.showBalloonMessage=ke;exports.showBalloonWarning=he;exports.showDebugConsole=Hg;exports.slerp=U0;exports.syncDestroy=ah;exports.syncField=Oy;exports.syncInstantiate=ey;exports.textureToCanvas=I1;exports.toSourceId=T0;exports.tryCastBinary=Lw;exports.tryDetermineMimetypeFromBinary=aS;exports.tryDetermineMimetypeFromURL=rS;exports.tryFindObject=Dc;exports.tryGetGuid=Bw;exports.unregisterHotReloadType=Ix;exports.unregisterPrefabProvider=$P;exports.unwatchWrite=Bg;exports.useForAutoFit=F0;exports.validate=Ie;exports.watchWrite=Qu;
1753
+ `),ti&&this._onCreateEffectsDebug(this._composer,o)}createPassForMergeableEffects(e,t,i,n){if(e.length>0){const o=new A.POSTPROCESSING.MODULE.EffectPass(i,...e);o.name=e.map(r=>r.name).join(", "),o.mainScene=n,o.enabled=!0,o.renderToScreen=!1,t.addPass(o),e.length=0}}handleDevicePixelRatio(){typeof this.context.devicePixelRatio=="number"&&this.context.requestSizeUpdate()}_menuEntry=null;_passIndices=null;_onCreateEffectsDebug(e,t){if(ti==="passes"){const i=new A.POSTPROCESSING.MODULE.DepthEffect({blendFunction:A.POSTPROCESSING.MODULE.BlendFunction.NORMAL,inverted:!0});i.name="Depth Effect";const n=new A.POSTPROCESSING.MODULE.EffectPass(t,i);if(n.name="Depth Effect Pass",n.enabled=!1,e.passes.push(n),this._passIndices!==null){const r=[e.passes[0]];this._passIndices.length>0&&r.push(...this._passIndices.filter(a=>a!==0).map(a=>e.passes[a]).filter(a=>a)),r.length>0&&console.log("[PostProcessing] Passes (selected) →",r),e.passes.length=0;for(const a of r)a.enabled=!0,a.renderToScreen=!1,e.addPass(a)}const o=this.context.menu;if(o&&this._passIndices===null){this._menuEntry&&this._menuEntry.remove();const r=document.createElement("select");r.multiple=!0;const a=document.createElement("option");a.innerText="Final Output",a.value="-1",r.appendChild(a);for(const l of e.passes){const h=document.createElement("option");h.innerText=l.name,h.value=`${e.passes.indexOf(l)}`,h.title=l.name,r.appendChild(h)}o.appendChild(r),this._menuEntry=r,r.addEventListener("change",()=>{const l=Array.from(r.selectedOptions).map(h=>parseInt(h.value));l.length===1&&l[0]===-1?this._passIndices=null:this._passIndices=l,this.applyEffects(this.context)})}}}}const uL=Object.freeze(Object.defineProperty({__proto__:null,PostProcessingHandler:il},Symbol.toStringTag,{value:"Module"}));class dp{_name;_tracks=[];_currentTrack=null;_pendingSignals=[];_idProvider;constructor(e,t){this._name=e,this._idProvider=new at(t??Date.now())}static create(e,t){return new dp(e??"Timeline",t)}animationTrack(e,t){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,ge.Animation,t??null),this}audioTrack(e,t,i){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,ge.Audio,t??null),this._currentTrack.volume=i,this}activationTrack(e,t){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,ge.Activation,t??null),this}controlTrack(e){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,ge.Control,null),this}signalTrack(e,t){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,ge.Signal,t??null),this}markerTrack(e){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,ge.Marker,null),this}clip(e,t){if(!this._currentTrack)throw new Error("TimelineBuilder: .clip() must be called after a track method (e.g. .animationTrack())");this.commitInlineTracks();const i=this._currentTrack;switch(i.type){case ge.Animation:{let n;if(e instanceof c.AnimationClip)n=e;else{const d=Array.isArray(e)?e:[e],u=i.outputs[0],f=u instanceof c.Object3D?u:u!=null&&"gameObject"in u?u.gameObject:void 0;n=Wc(d,f)}const o=t??{},r=o.duration??n.duration,a=o.start??i.cursor,l=a+r,h={start:a,end:l,duration:r,timeScale:o.speed??1,clipIn:o.clipIn??0,easeInDuration:o.easeIn??0,easeOutDuration:o.easeOut??0,preExtrapolationMode:o.preExtrapolation??Ye.None,postExtrapolationMode:o.postExtrapolation??Ye.None,reversed:o.reversed,asset:{clip:n,loop:o.loop??!1,duration:n.duration,removeStartOffset:o.removeStartOffset??!1}};i.clips.push(h),i.cursor=l;break}case ge.Audio:{const n=e,o=t??{},r=o.duration,a=o.start??i.cursor,l=a+r,h={start:a,end:l,duration:r,timeScale:o.speed??1,clipIn:0,easeInDuration:o.easeIn??0,easeOutDuration:o.easeOut??0,preExtrapolationMode:Ye.None,postExtrapolationMode:Ye.None,asset:{clip:n,loop:o.loop??!1,volume:o.volume??1}};i.clips.push(h),i.cursor=l;break}case ge.Activation:{const n=e,o=n.start??i.cursor,r=o+n.duration,a={start:o,end:r,duration:n.duration,timeScale:1,clipIn:0,easeInDuration:n.easeIn??0,easeOutDuration:n.easeOut??0,preExtrapolationMode:Ye.None,postExtrapolationMode:Ye.None,asset:{}};i.clips.push(a),i.cursor=r;break}case ge.Control:{const n=e,o=t??{},r=o.start??i.cursor,a=o.duration,l=r+a,h={start:r,end:l,duration:a,timeScale:1,clipIn:0,easeInDuration:0,easeOutDuration:0,preExtrapolationMode:Ye.None,postExtrapolationMode:Ye.None,asset:{sourceObject:n,controlActivation:o.controlActivation??!0,updateDirector:o.updateDirector??!0}};i.clips.push(h),i.cursor=l;break}default:throw new Error(`TimelineBuilder: .clip() is not supported on track type "${i.type}"`)}return this}marker(e,t,i){if(!this._currentTrack)throw new Error("TimelineBuilder: .marker() must be called after a track method");if(this._currentTrack.type!==ge.Signal&&this._currentTrack.type!==ge.Marker)throw new Error(`TimelineBuilder: .marker() is only supported on signal and marker tracks, not "${this._currentTrack.type}"`);const n={type:Xc.Signal,time:e,retroActive:i?.retroActive??!1,emitOnce:i?.emitOnce??!1,asset:t};return this._currentTrack.markers.push(n),e>this._currentTrack.cursor&&(this._currentTrack.cursor=e),this}signal(e,t,i){if(!this._currentTrack)throw new Error("TimelineBuilder: .signal() must be called after a track method");if(this._currentTrack.type!==ge.Signal&&this._currentTrack.type!==ge.Marker)throw new Error(`TimelineBuilder: .signal() is only supported on signal and marker tracks, not "${this._currentTrack.type}"`);const n=this._idProvider.generateUUID(),o=this._tracks.indexOf(this._currentTrack),r={type:Xc.Signal,time:e,retroActive:i?.retroActive??!1,emitOnce:i?.emitOnce??!1,asset:n};return this._currentTrack.markers.push(r),this._pendingSignals.push({trackIndex:o,guid:n,callback:t}),e>this._currentTrack.cursor&&(this._currentTrack.cursor=e),this}muted(e=!0){if(!this._currentTrack)throw new Error("TimelineBuilder: .muted() must be called after a track method");return this._currentTrack.muted=e,this}track(e,t,i,n){if(!this._currentTrack)throw new Error("TimelineBuilder: .track() must be called after .animationTrack()");if(this._currentTrack.type!==ge.Animation)throw new Error("TimelineBuilder: .track() is only supported on animation tracks");return this._currentTrack.inlineTracks.push(wy(e,t,i,n)),this}build(){this.commitInlineTracks();const e=this._tracks.map(t=>{const i={name:t.name,type:t.type,muted:t.muted,outputs:t.outputs};return t.clips.length>0&&(i.clips=t.clips),t.markers.length>0&&(i.markers=t.markers),t.volume!==void 0&&(i.volume=t.volume),t.trackOffset!==void 0&&(i.trackOffset=t.trackOffset),i});return{name:this._name,tracks:e}}install(e){const t=this.build();if(this._pendingSignals.length>0){const i=e.gameObject;let n=C.getComponent(i,wr);n||(n=C.addComponent(i,wr)),n.events||(n.events=[]);for(const o of this._pendingSignals){const r=new ph;r.guid=o.guid;const a=new cl;a.signal=r,a.reaction=new Z([o.callback]),n.events.push(a);const l=t.tracks[o.trackIndex];l&&!l.outputs.includes(n)&&l.outputs.push(n)}}return e.playableAsset=t,t}pushTrack(e,t,i){const n={name:e,type:t,muted:!1,outputs:i?[i]:[],clips:[],markers:[],cursor:0,inlineTracks:[]};return this._tracks.push(n),n}commitInlineTracks(){if(!this._currentTrack||this._currentTrack.inlineTracks.length===0)return;const e=this._currentTrack,t=e.outputs[0],i=t instanceof c.Object3D?t:t!=null&&"gameObject"in t?t.gameObject:void 0,n=Wc(e.inlineTracks,i),o=e.cursor,r=n.duration,a={start:o,end:o+r,duration:r,timeScale:1,clipIn:0,easeInDuration:0,easeOutDuration:0,preExtrapolationMode:Ye.None,postExtrapolationMode:Ye.None,asset:{clip:n,loop:!1,duration:n.duration,removeStartOffset:!1}};e.clips.push(a),e.cursor=o+r,e.inlineTracks=[]}}class BC{}const fL=Object.freeze(Object.defineProperty({__proto__:null,ActionBuilder:pe,ActionCollection:BS,ActionModel:si,AlignmentConstraint:gh,Animation:Lt,AnimationBuilder:pf,AnimationCurve:Th,AnimationExtension:Lf,Animator:gt,AnimatorController:Gn,Antialiasing:Ah,Attractor:Cl,AudioExtension:Dr,AudioListener:bs,AudioSource:Pi,Avatar:xo,AvatarMarker:Ze,AxesHelper:hl,AxisRotationConstraint:jy,BaseUIComponent:Yi,BasicIKConstraint:Ry,BehaviorExtension:l_,BehaviorModel:Et,BloomEffect:Yf,BoxCollider:kf,BoxGizmo:jr,BoxHelperComponent:Ot,Button:Ns,CallInfo:Hn,Camera:Yt,CameraTargetReachedEvent:qc,Canvas:Ja,CanvasGroup:So,CapsuleCollider:Os,ChangeMaterialOnClick:t_,ChangeTransformOnClick:Ir,CharacterController:Rr,CharacterControllerInput:As,ChromaticAberration:Dh,ClickThrough:ap,ColorAdjustments:Io,ColorBySpeedModule:Sl,ColorOverLifetimeModule:qf,ContactShadows:yh,CursorFollow:Qr,CustomBranding:Br,Deletable:Ly,DeleteBox:go,DepthOfField:Sn,DeviceFlag:Mf,DocumentExtension:LC,DragControls:sr,DragProfile:Iu,DropListener:Is,Duplicatable:Hy,EffectWrapper:eh,EmissionModule:Fs,EmphasizeOnClick:pl,EnvironmentScene:Cf,EventList:Z,EventListEvent:xy,EventSystem:Kt,EventTrigger:Df,FieldWithDefault:pS,FixedJoint:x_,FixedRotationAxesConstraint:iS,Fog:bl,GltfExport:Ky,GltfExportBox:Qy,GrabPointPlaneConstraint:bh,Gradient:Ur,Graphic:Mh,GraphicRaycaster:_f,GridHelper:vl,GridLayoutGroup:p_,GridSnapConstraint:Of,GroundProjectedEnv:is,GroupActionModel:or,HideOnStart:Ni,HingeJoint:Eh,HorizontalLayoutGroup:f_,get HoverAnimation(){return exports.HoverAnimation},Image:El,InheritVelocityModule:M_,InputField:U_,InstanceHandle:mr,InstancingHandler:Cr,Interactable:Iy,KeepRotationConstraint:Ef,KeepScaleConstraint:tS,Keyframe:ci,LODGroup:Wf,LODModel:wl,Light:Rt,LimitVelocityOverLifetimeModule:ht,LogStats:Dy,LookAt:z_,LookAtConstraint:Er,MainModule:Ft,MaskableGraphic:Oh,MeshCollider:Oo,MeshRenderer:wh,MinMaxCurve:X,MinMaxGradient:zr,NeedleMenu:ss,NestedGltf:xl,Networking:P_,NoiseModule:me,ObjectRaycaster:Qi,OffsetConstraint:Fr,OpenURL:Tl,OrbitControls:de,Outline:_l,Padding:Lr,ParticleBurst:Vu,ParticleSubEmitter:O_,ParticleSystem:Jc,ParticleSystemRenderer:tn,PhysicsExtension:c_,PixelationEffect:Ih,PlaneHeightLockConstraint:Fy,PlayAnimationOnClick:Kc,PlayAudioOnClick:wo,PlayableDirector:Ka,PlayerColor:el,PointerEventData:fh,PostProcessingHandler:il,PreliminaryAction:ml,PreliminaryTrigger:Sh,RawImage:sp,Rect:GS,RectTransform:bn,ReflectionProbe:gs,RegisteredAnimationInfo:fo,RemoteSkybox:Ey,Renderer:Zt,RendererLightmap:Vy,Rigidbody:We,RotationBySpeedModule:en,RotationOverLifetimeModule:xn,ScaleLimitConstraint:By,SceneSwitcher:He,ScreenCapture:Lo,ScreenSpaceAmbientOcclusion:Us,ScreenSpaceAmbientOcclusionN8:Cn,ScrollFollow:as,SeeThrough:I_,SetActiveOnClick:i_,ShadowCatcher:zh,ShapeModule:k_,SharpeningEffect:Bh,SignalAsset:ph,SignalReceiver:wr,SignalReceiverEvent:cl,SignalTrackHandler:Yc,Size:WS,SizeBySpeedModule:pi,SizeOverLifetimeModule:Nr,SkinnedMeshRenderer:Wy,SmoothFollow:Jf,SnapToSurfaceConstraint:Tf,SpatialGrabRaycaster:vr,SpatialHtml:Wh,SpatialTrigger:ep,SpatialTriggerReceiver:Zn,SpectatorCamera:tp,SphereCollider:dl,SplineContainer:qr,SplineData:Jn,SplineWalker:sn,Sprite:Ls,SpriteData:za,SpriteRenderer:ui,SpriteSheet:Za,SubEmitterSystem:Wu,SyncedCamera:L_,SyncedRoom:Pn,SyncedTransform:_n,TapGestureTrigger:s_,TeleportTarget:zf,TestRunner:B_,TestSimulateUserData:j_,Text:jt,TextBuilder:d_,TextExtension:$f,TextureSheetAnimationModule:Ut,TiltShiftEffect:rs,TimelineActivationTrack:wf,TimelineAnimationTrack:Qc,TimelineAudioTrack:vs,TimelineBuilder:dp,TimelineControlTrack:xf,TimelineMarkerTrack:vf,ToneMappingEffect:$r,TrailModule:Be,TransformData:De,TransformGizmo:Xr,TriggerBuilder:It,TriggerModel:yo,UIRaycastUtils:Cy,UIRootComponent:Ph,USDZExporter:Kn,USDZText:Oa,USDZUIExtension:g_,UsageMarker:_h,VariantAction:e_,VelocityOverLifetimeModule:ze,VerticalLayoutGroup:u_,VideoPlayer:lt,get ViewBox(){return exports.ViewBox},Vignette:Gr,VisibilityAction:Ch,Voip:zs,Volume:jh,VolumeParameter:N,VolumeProfile:Xf,WebARCameraBackground:Hh,WebARSessionRoot:Gi,WebXR:Nf,WebXRImageTracking:Dl,WebXRImageTrackingModel:Xi,WebXRPlaneTracking:Ws,WebXRTrackedImage:tl,XRControllerFollow:$s,XRControllerModel:Es,XRControllerMovement:Mi,XRFlag:pn,XRRig:hp,XRState:Xt,__Ignore:BC},Symbol.toStringTag,{value:"Module"}));exports.SplineUtils=void 0;(s=>{function e(t,i=!1,n=.75){const o=new qr,r=1-L.clamp(n,0,1);return t.forEach((a,l)=>{const h=new c.Vector3;l<t.length-1?h.subVectors(t[l+1],a).normalize().multiplyScalar(r):i&&t.length>1&&h.subVectors(t[0],a).normalize().multiplyScalar(r);const d=new Jn;d.position.copy(a),d.tangentIn.copy(h),d.tangentOut.copy(h),o.addKnot(d)}),o.closed=i,o}s.createFromPoints=e})(exports.SplineUtils||(exports.SplineUtils={}));class pL extends fe.WorkerBase{constructor(){super(new Worker(new URL("/generateMeshBVH.worker-DiCnZlf3.js",typeof document>"u"?require("url").pathToFileURL(__filename).href:Ra&&Ra.tagName.toUpperCase()==="SCRIPT"&&Ra.src||new URL("needle-engine.bundle-DdH96IqH.umd.cjs",document.baseURI).href),{type:"module"})),this.name="GenerateMeshBVHWorker"}runTask(e,t,i={}){return new Promise((n,o)=>{if(t.getAttribute("position").isInterleavedBufferAttribute||t.index&&t.index.isInterleavedBufferAttribute)throw new Error("GenerateMeshBVHWorker: InterleavedBufferAttribute are not supported for the geometry attributes.");e.onerror=h=>{o(new Error(`[GenerateMeshBVHWorker] ${h.message||"Could not load worker."}`))},e.onmessage=h=>{const{data:d}=h;if(d.error)o(new Error(d.error)),e.onmessage=null;else if(d.serialized){const{serialized:u,position:f}=d,m=fe.MeshBVH.deserialize(u,t,{setIndex:!1}),g=Object.assign({setBoundingBox:!0},i);if(t.attributes.position.array=f,u.index)if(t.index)t.index.array=u.index;else{const v=new c.BufferAttribute(u.index,1,!1);t.setIndex(v)}g.setBoundingBox&&(t.boundingBox=m.getBoundingBox(new c.Box3)),i.onProgress&&i.onProgress(d.progress),n(m),e.onmessage=null}else i.onProgress&&i.onProgress(d.progress)};const r=t.index?t.index.array:null,a=t.attributes.position.array,l=[a];r&&l.push(r),e.postMessage({index:r,position:a,options:{...i,onProgress:null,includedProgressCallback:!!i.onProgress,groups:[...t.groups]}},l.map(h=>h.buffer).filter(h=>typeof SharedArrayBuffer>"u"||!(h instanceof SharedArrayBuffer)))})}}const mL=Object.freeze(Object.defineProperty({__proto__:null,GenerateMeshBVHWorker:pL},Symbol.toStringTag,{value:"Module"}));exports.$componentName=bu;exports.$physicsKey=_P;exports.$uxbFepO=Hi;exports.ActionBuilder=pe;exports.ActionCollection=BS;exports.ActionModel=si;exports.Addressables=Ow;exports.AlignmentConstraint=gh;exports.AmbientMode=La;exports.Animation=Lt;exports.AnimationBuilder=pf;exports.AnimationCurve=Th;exports.AnimationExtension=Lf;exports.Animator=gt;exports.AnimatorConditionMode=ai;exports.AnimatorController=Gn;exports.AnimatorControllerBuilder=mf;exports.AnimatorControllerParameterType=nr;exports.AnimatorStateInfo=ac;exports.Antialiasing=Ah;exports.Application=yn;exports.AssetDatabase=dx;exports.AssetReference=J;exports.Attractor=Cl;exports.AudioClip=cg;exports.AudioExtension=Dr;exports.AudioListener=bs;exports.AudioRolloffMode=Hx;exports.AudioSource=Pi;exports.Avatar=xo;exports.AvatarMarker=Ze;exports.Axes=ka;exports.AxesHelper=hl;exports.AxisRotationConstraint=jy;exports.BUILD_TIME=Ic;exports.BaseUIComponent=Yi;exports.BasicIKConstraint=Ry;exports.BehaviorExtension=l_;exports.BehaviorModel=Et;exports.BloomEffect=Yf;exports.BoxCollider=kf;exports.BoxGizmo=jr;exports.BoxHelperComponent=Ot;exports.Button=Ns;exports.ButtonsFactory=Wi;exports.CallDirection=cC;exports.CallInfo=Hn;exports.Camera=Yt;exports.CameraTargetReachedEvent=qc;exports.Canvas=Ja;exports.CanvasGroup=So;exports.CapsuleCollider=Os;exports.ChangeMaterialOnClick=t_;exports.ChangeTransformOnClick=Ir;exports.CharacterController=Rr;exports.CharacterControllerInput=As;exports.ChromaticAberration=Dh;exports.CircularBuffer=xi;exports.ClearFlags=fr;exports.ClickThrough=ap;exports.ClipExtrapolation=Ye;exports.Collider=Ti;exports.Collision=aw;exports.CollisionDetectionMode=yf;exports.ColorAdjustments=Io;exports.ColorBySpeedModule=Sl;exports.ColorOverLifetimeModule=qf;exports.Component=XM;exports.Component$1=R;exports.ComponentLifecycleEvents=Zu;exports.Components=fL;exports.ConnectionEvents=Uw;exports.ContactPoint=rw;exports.ContactShadows=yh;exports.Context=z;exports.ContextArgs=rM;exports.ContextEvent=re;exports.ContextRegistry=se;exports.CursorFollow=Qr;exports.CustomBranding=Br;exports.CustomShader=Se;exports.DefaultReflectionMode=ku;exports.Deletable=Ly;exports.DeleteBox=go;exports.DepthOfField=Sn;exports.DepthOfFieldMode=oC;exports.DeviceFlag=Mf;exports.DirectorWrapMode=Xx;exports.DisposableStore=eu;exports.DocumentExtension=LC;exports.DragControls=sr;exports.DragMode=Uy;exports.DragProfile=Iu;exports.DropListener=Is;exports.Duplicatable=Hy;exports.EffectWrapper=eh;exports.EmissionModule=Fs;exports.EmphasizeOnClick=pl;exports.EngineLoadingView=th;exports.EnvironmentScene=Cf;exports.EventBus=$m;exports.EventList=Z;exports.EventListEvent=xy;exports.EventSystem=Kt;exports.EventTrigger=Df;exports.FieldWithDefault=pS;exports.FileReference=cr;exports.FileReferenceSerializer=Tw;exports.FileSpawnModel=ZE;exports.File_Event=sS;exports.FixedJoint=x_;exports.FixedRotationAxesConstraint=iS;exports.Fog=bl;exports.FontStyle=Nu;exports.FrameEvent=ve;exports.GENERATOR=Va;exports.GameObject=C;exports.Gizmos=B;exports.GltfExport=Ky;exports.GltfExportBox=Qy;exports.GrabPointPlaneConstraint=bh;exports.Gradient=Ur;exports.Graphic=Mh;exports.GraphicRaycaster=_f;exports.Graphics=bo;exports.GridHelper=vl;exports.GridLayoutGroup=p_;exports.GridSnapConstraint=Of;exports.GroundProjectedEnv=is;exports.GroupActionModel=or;exports.HideFlags=ef;exports.HideOnStart=Ni;exports.HingeJoint=Eh;exports.HorizontalLayoutGroup=f_;exports.HorizontalWrapMode=YS;exports.HostData=zP;exports.Image=El;exports.ImageReference=lr;exports.ImageReferenceSerializer=Ew;exports.InheritVelocityModule=M_;exports.Input=Dw;exports.InputEventQueue=ri;exports.InputEvents=be;exports.InputField=U_;exports.InstanceHandle=mr;exports.InstancingHandler=Cr;exports.InstancingUtil=qi;exports.InstantiateEvent=gw;exports.InstantiateIdProvider=at;exports.InstantiateOptions=ts;exports.Interactable=Iy;exports.JoinedRoomResponse=_k;exports.KeepRotationConstraint=Ef;exports.KeepScaleConstraint=tS;exports.KeyEventArgs=hk;exports.Keyframe=ci;exports.LODGroup=Wf;exports.LODModel=wl;exports.LODsManager=Iw;exports.LeftRoomResponse=bk;exports.Light=Rt;exports.LightData=qw;exports.LimitVelocityOverLifetimeModule=ht;exports.LoadingElementOptions=ZI;exports.LogStats=Dy;exports.LogType=bi;exports.LookAt=z_;exports.LookAtConstraint=Er;exports.MODULES=A;exports.MainModule=Ft;exports.MarkerType=Xc;exports.MaskableGraphic=Oh;exports.MaterialPropertyBlock=Ps;exports.Mathf=L;exports.MeshCollider=Oo;exports.MeshRenderer=wh;exports.MinMaxCurve=X;exports.MinMaxGradient=zr;exports.NEEDLE_ENGINE_FEATURE_FLAGS=Xg;exports.NEKeyboardEvent=sc;exports.NEPointerEvent=ms;exports.NEToneMappingMode=Ta;exports.NeedleButtonElement=RC;exports.NeedleEngineWebComponent=H_;exports.NeedleMenu=ss;exports.NeedlePatchesKey=Wd;exports.NeedleXRController=cy;exports.NeedleXRSession=V;exports.NeedleXRSync=Zw;exports.NeedleXRUtils=hx;exports.NestedGltf=xl;exports.NetworkConnection=Bc;exports.NetworkedStreamEvents=Qn;exports.NetworkedStreams=Fh;exports.Networking=P_;exports.NewInstanceModel=_w;exports.NoiseModule=me;exports.ObjectRaycaster=Qi;exports.ObjectUtils=ko;exports.OffsetConstraint=Fr;exports.OneEuroFilter=$d;exports.OneEuroFilterXYZ=Ug;exports.OpenURL=Tl;exports.OrbitControls=de;exports.Outline=_l;exports.OwnershipEvent=zw;exports.OwnershipModel=Nw;exports.PUBLIC_KEY=ho;exports.Padding=Lr;exports.ParticleBurst=Vu;exports.ParticleSubEmitter=O_;exports.ParticleSystem=Jc;exports.ParticleSystemBaseBehaviour=Do;exports.ParticleSystemRenderer=tn;exports.ParticleSystemShapeType=$u;exports.PeerHandle=ws;exports.PeerNetworking=Fw;exports.Physics=Ya;exports.PhysicsExtension=c_;exports.PhysicsMaterialCombine=dt;exports.PixelationEffect=Ih;exports.PlaneHeightLockConstraint=Fy;exports.PlayAnimationOnClick=Kc;exports.PlayAudioOnClick=wo;exports.PlayableDirector=Ka;exports.PlayerColor=el;exports.PlayerState=li;exports.PlayerStateEvent=US;exports.PlayerSync=r_;exports.PlayerView=$w;exports.PlayerViewManager=Vw;exports.PointerEventData=fh;exports.PointerType=of;exports.PostProcessing=Kw;exports.PostProcessingEffect=tt;exports.PostProcessingEffectOrder=rt;exports.PostProcessingHandler=il;exports.Prefabs=Wa;exports.PreliminaryAction=ml;exports.PreliminaryTrigger=Sh;exports.PrimitiveType=sl;exports.Progress=ce;exports.PromiseAllWithErrors=jg;exports.PromiseErrorResult=km;exports.QualityLevel=iC;exports.RGBAColor=ne;exports.RapierPhysics=Na;exports.RawImage=sp;exports.RaycastOptions=kr;exports.Rect=GS;exports.RectTransform=bn;exports.ReflectionProbe=gs;exports.ReflectionProbeUsage=fS;exports.RegisteredAnimationInfo=fo;exports.RemoteSkybox=Ey;exports.RenderTexture=qn;exports.RenderTextureSerializer=Ux;exports.Renderer=Zt;exports.RendererData=Hw;exports.RendererLightmap=Vy;exports.Rigidbody=We;exports.RigidbodyConstraints=Ve;exports.RoomEvents=ee;exports.RotationBySpeedModule=en;exports.RotationOverLifetimeModule=xn;exports.ScaleLimitConstraint=By;exports.SceneLightSettings=Lu;exports.SceneSwitcher=He;exports.ScreenCapture=Lo;exports.ScreenSpaceAmbientOcclusion=Us;exports.ScreenSpaceAmbientOcclusionN8=Cn;exports.ScreenSpaceAmbientOcclusionN8QualityMode=Gu;exports.ScrollFollow=as;exports.SeeThrough=I_;exports.SendQueue=fn;exports.SerializationContext=ny;exports.SetActiveOnClick=i_;exports.ShadowCastingMode=Fu;exports.ShadowCatcher=zh;exports.ShapeModule=k_;exports.ShapeOverlapResult=lw;exports.SharpeningEffect=Bh;exports.SignalAsset=ph;exports.SignalReceiver=wr;exports.SignalReceiverEvent=cl;exports.SignalTrackHandler=Yc;exports.Size=WS;exports.SizeBySpeedModule=pi;exports.SizeOverLifetimeModule=Nr;exports.SkinnedMeshRenderer=Wy;exports.SmoothFollow=Jf;exports.SnapToSurfaceConstraint=Tf;exports.SpatialGrabRaycaster=vr;exports.SpatialHtml=Wh;exports.SpatialTrigger=ep;exports.SpatialTriggerReceiver=Zn;exports.SpectatorCamera=tp;exports.SphereCollider=dl;exports.SphereIntersection=py;exports.SplineContainer=qr;exports.SplineData=Jn;exports.SplineWalker=sn;exports.Sprite=Ls;exports.SpriteData=za;exports.SpriteRenderer=ui;exports.SpriteSheet=Za;exports.StateMachineBehaviour=JM;exports.StreamEndedEvent=D_;exports.StreamReceivedEvent=lC;exports.SubEmitterSystem=Wu;exports.SyncedCamera=L_;exports.SyncedRoom=Pn;exports.SyncedTransform=_n;exports.TapGestureTrigger=s_;exports.TeleportTarget=zf;exports.TestRunner=B_;exports.TestSimulateUserData=j_;exports.Text=jt;exports.TextAnchor=Qe;exports.TextBuilder=d_;exports.TextExtension=$f;exports.TextureSheetAnimationModule=Ut;exports.TiltShiftEffect=rs;exports.Time=Xw;exports.TimelineActivationTrack=wf;exports.TimelineAnimationTrack=Qc;exports.TimelineAudioTrack=vs;exports.TimelineBuilder=dp;exports.TimelineControlTrack=xf;exports.TimelineMarkerTrack=vf;exports.TimelineTrackHandler=Tr;exports.ToneMappingEffect=$r;exports.TrackType=ge;exports.TrailModule=Be;exports.TransformData=De;exports.TransformGizmo=Xr;exports.TriggerBuilder=It;exports.TriggerModel=yo;exports.TypeStore=M;exports.UIRaycastUtils=Cy;exports.UIRootComponent=Ph;exports.USDDocument=Zy;exports.USDObject=Je;exports.USDWriter=MS;exports.USDZExporter=OS;exports.USDZExporter$1=Kn;exports.USDZText=Oa;exports.USDZUIExtension=g_;exports.UriSerializer=zx;exports.UsageMarker=_h;exports.UserJoinedOrLeftRoomModel=vk;exports.VERSION=Qt;exports.VariantAction=e_;exports.VelocityOverLifetimeModule=ze;exports.VerticalLayoutGroup=u_;exports.VerticalWrapMode=QS;exports.VideoPlayer=lt;exports.ViewDevice=Cs;exports.Vignette=Gr;exports.VisibilityAction=Ch;exports.Voip=zs;exports.Volume=jh;exports.VolumeParameter=N;exports.VolumeProfile=Xf;exports.WaitForFrames=rk;exports.WaitForPromise=Aw;exports.WaitForSeconds=sy;exports.Watch=xs;exports.WebARCameraBackground=Hh;exports.WebARSessionRoot=Gi;exports.WebXR=Nf;exports.WebXRButtonFactory=_o;exports.WebXRImageTracking=Dl;exports.WebXRImageTrackingModel=Xi;exports.WebXRPlaneTracking=Ws;exports.WebXRTrackedImage=tl;exports.XRControllerFollow=$s;exports.XRControllerModel=Es;exports.XRControllerMovement=Mi;exports.XRFlag=pn;exports.XRRig=hp;exports.XRState=Xt;exports.XRStateFlag=$n;exports._$EHSDVcNK=rh;exports._$VfAckLjB=Ss;exports.__Ignore=BC;exports.__internalNotifyObjectDestroyed=mM;exports.activeInHierarchyFieldName=Wn;exports.addAttributeChangeCallback=uu;exports.addComponent=Yn;exports.addCustomExtensionPlugin=xT;exports.addNewComponent=dr;exports.addPatch=Ju;exports.apply=df;exports.applyHMRChanges=GM;exports.applyPrototypeExtensions=vx;exports.beginListenDestroy=yw;exports.beginListenInstantiate=ww;exports.binaryIdentifierCasts=oy;exports.build_scene_functions=oM;exports.builtinComponentKeyName=Zo;exports.calculateProgress01=G_;exports.clearMessages=d1;exports.compareAssociation=Cw;exports.copyTexture=G0;exports.createMotion=Bx;exports.debugNet=ii;exports.debugOwner=fa;exports.decompressGpuTexture=AS;exports.deepClone=nh;exports.delay=ks;exports.delayForFrames=Xu;exports.deserializeObject=Cu;exports.destroy=Ci;exports.destroyComponentInstance=Tx;exports.determineMimeTypeFromExtension=oS;exports.disposeObjectResources=Ce;exports.disposeStream=$i;exports.editorGuidKeyName=yc;exports.enableSpatialConsole=Aa;exports.exportAsGLTF=cL;exports.findByGuid=yy;exports.findObjectOfType=ll;exports.findObjectsOfType=Ax;exports.findResourceUsers=my;exports.fitCamera=Vx;exports.fitObjectIntoVolume=q0;exports.foreachComponent=br;exports.foreachComponentEnumerator=_y;exports.forward=T1;exports.generateQRCode=rx;exports.generateSeed=vw;exports.getBoundingBox=hi;exports.getCameraController=j0;exports.getComponent=Mo;exports.getComponentInChildren=dh;exports.getComponentInParent=$c;exports.getComponents=rl;exports.getComponentsInChildren=al;exports.getComponentsInParent=ff;exports.getFormattedDate=SS;exports.getIconElement=mt;exports.getIconTexture=Gm;exports.getLoader=Ms;exports.getOrAddComponent=hh;exports.getParam=x;exports.getParentHierarchyPath=D1;exports.getPath=VC;exports.getPeerOptions=fk;exports.getPeerjsInstance=jw;exports.getResourceUserCount=yM;exports.getSceneData=Gw;exports.getTempColor=N0;exports.getTempQuaternion=oi;exports.getTempVector=j;exports.getUrlParams=ih;exports.getVisibleInCustomShadowRendering=H0;exports.getWorldDirection=$0;exports.getWorldEuler=$g;exports.getWorldPosition=te;exports.getWorldQuaternion=_e;exports.getWorldRotation=Yu;exports.getWorldScale=Ue;exports.hasPointerEventComponent=Au;exports.hideDebugConsole=Z0;exports.imageToCanvas=DS;exports.initAddressableSerializers=Rw;exports.initBuiltinSerializers=Nx;exports.initEngine=rL;exports.initPhysics=TC;exports.initVolumeParameterSerializer=Yx;exports.instantiate=vo;exports.invokeLoadedImportPluginHooks=dS;exports.invokeXRSessionEnd=ox;exports.invokeXRSessionStart=sx;exports.isActiveInHierarchy=wx;exports.isActiveSelf=ol;exports.isAndroidDevice=QC;exports.isAnimationAction=W0;exports.isComponent=tf;exports.isDebugMode=FC;exports.isDesktop=GC;exports.isDestroyed=_r;exports.isDevEnvironment=E;exports.isDisposable=HM;exports.isDisposed=pM;exports.isExporting=aL;exports.isGLTFModel=ow;exports.isHostedOnGlitch=C0;exports.isHotReloadEnabled=ag;exports.isHotReloading=VM;exports.isIPad=qC;exports.isIconElement=ax;exports.isLocalNetwork=wi;exports.isMacOS=KC;exports.isMobileDevice=HC;exports.isMozillaXR=YC;exports.isQuest=e1;exports.isResourceTrackingEnabled=fx;exports.isSafari=JC;exports.isTrackModel=oE;exports.isUsingInstancing=uf;exports.isiOS=ZC;exports.isiPad=XC;exports.loadAsset=$I;exports.loadPMREM=Pf;exports.loadSync=W_;exports.logHierarchy=gu;exports.lookAtInverse=x1;exports.lookAtObject=sh;exports.lookAtScreenPoint=S1;exports.makeId=zC;exports.makeIdFromRandomWords=M0;exports.makeNameSafe=ki;exports.markAsInstancedRendered=xx;exports.microphonePermissionsGranted=t1;exports.nameof=jC;exports.nameofFactory=P0;exports.needle=xk;exports.offBeforeXRSession=nx;exports.offXRSessionEnd=ix;exports.offXRSessionStart=tx;exports.on=qM;exports.onAfterRender=CP;exports.onBeforeRender=SP;exports.onBeforeXRSession=Yk;exports.onClear=wP;exports.onDestroy=xP;exports.onInitialized=Kg;exports.onStart=sf;exports.onSyncDestroy=UP;exports.onSyncInstantiate=bw;exports.onUpdate=uw;exports.onXRSessionEnd=dy;exports.onXRSessionStart=af;exports.parseSync=OC;exports.placeOnSurface=X0;exports.postprocessFBXMaterials=Gg;exports.prefix=UO;exports.pushState=k0;exports.randomNumber=NC;exports.registerBinaryType=ry;exports.registerComponent=cf;exports.registerComponentExtension=Ny;exports.registerCustomEffectType=nn;exports.registerExportExtensions=$y;exports.registerExtensions=ju;exports.registerHotReloadType=Dx;exports.registerLoader=hw;exports.registerPrefabProvider=xw;exports.registerPrototypeExtensions=gy;exports.registerType=qg;exports.relativePathPrefix=E0;exports.removeAttributeChangeCallback=R0;exports.removeComponent=vy;exports.removeCustomImportExtensionType=ST;exports.removePatch=mP;exports.resolveUrl=es;exports.sanitizeString=O0;exports.saveImage=CC;exports.screenshot=wI;exports.screenshot2=V_;exports.sendDestroyed=Jg;exports.serializable=p;exports.serializeObject=kw;exports.serializeable=Ge;exports.setActive=xc;exports.setAllowBalloonMessages=I0;exports.setAllowOverlayMessages=a1;exports.setAutoFitEnabled=pu;exports.setCameraController=Em;exports.setDestroyed=Cx;exports.setDevEnvironment=g1;exports.setDisposable=mx;exports.setDontDestroy=pa;exports.setOrAddParamsToUrl=Pm;exports.setParam=UC;exports.setParamWithoutReload=Ac;exports.setPeerOptions=pk;exports.setResourceTrackingEnabled=fM;exports.setState=Lg;exports.setVisibleInCustomShadowRendering=Wg;exports.setWorldEuler=Vg;exports.setWorldPosition=Si;exports.setWorldPositionXYZ=gr;exports.setWorldQuaternion=gn;exports.setWorldQuaternionXYZW=Ng;exports.setWorldRotation=V0;exports.setWorldRotationXYZ=oh;exports.setWorldScale=$a;exports.showBalloonError=nl;exports.showBalloonMessage=ke;exports.showBalloonWarning=he;exports.showDebugConsole=Hg;exports.slerp=U0;exports.syncDestroy=ah;exports.syncField=Oy;exports.syncInstantiate=ey;exports.textureToCanvas=I1;exports.toSourceId=T0;exports.tryCastBinary=Lw;exports.tryDetermineMimetypeFromBinary=aS;exports.tryDetermineMimetypeFromURL=rS;exports.tryFindObject=Dc;exports.tryGetGuid=Bw;exports.unregisterHotReloadType=Ix;exports.unregisterPrefabProvider=$P;exports.unwatchWrite=Bg;exports.useForAutoFit=F0;exports.validate=Ie;exports.watchWrite=Qu;
@@ -116,17 +116,19 @@ import { XRHandSpace } from 'three';
116
116
 
117
117
  export declare const $componentName: unique symbol;
118
118
 
119
+ /* Excluded from this release type: _$EHSDVcNK */
120
+
119
121
  export declare const $physicsKey: unique symbol;
120
122
 
123
+ /* Excluded from this release type: $uxbFepO */
124
+
125
+ /* Excluded from this release type: _$VfAckLjB */
126
+
121
127
  export declare class __Ignore {
122
128
  }
123
129
 
124
130
  export declare function __internalNotifyObjectDestroyed(obj: Object3D): void;
125
131
 
126
- /* Excluded from this release type: __nlZsk */
127
-
128
- /* Excluded from this release type: __zrAx */
129
-
130
132
  /** Data describing the accessible semantics for a 3D object or component. */
131
133
  declare type AccessibilityData = {
132
134
  /** ARIA role (e.g. `"button"`, `"img"`, `"region"`). */
@@ -14098,8 +14100,6 @@ export declare function offXRSessionEnd(fn: (evt: XRSessionEventArgs) => void):
14098
14100
  */
14099
14101
  export declare function offXRSessionStart(fn: (evt: XRSessionEventArgs) => void): void;
14100
14102
 
14101
- /* Excluded from this release type: oMxKl */
14102
-
14103
14103
  /**
14104
14104
  * @experimental
14105
14105
  * Subscribe to a DOM event on any {@link EventTarget} (window, document, HTML elements, etc.)