@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
package/CHANGELOG.md CHANGED
@@ -4,7 +4,7 @@ All notable changes to this package will be documented in this file.
4
4
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
5
5
  and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
6
6
 
7
- ## [5.1.11] - 2026-08-13
7
+ ## [5.1.12] - 2026-08-13
8
8
  - Fix: mirrored and negatively-scaled instanced meshes now render correctly (NE-7069)
9
9
 
10
10
  ## [5.1.10] - 2026-08-07
@@ -2331,11 +2331,11 @@ Vo('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"]
2331
2331
  Vo('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";');
2332
2332
  Vo('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";');
2333
2333
  Vo('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');
2334
- Vo('globalThis["__NEEDLE_ENGINE_VERSION__"] = "5.1.11";');
2334
+ Vo('globalThis["__NEEDLE_ENGINE_VERSION__"] = "5.1.12";');
2335
2335
  Vo('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');
2336
- Vo('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Thu Aug 13 2026 12:42:37 GMT+0000 (Coordinated Universal Time)";');
2336
+ Vo('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Thu Aug 13 2026 13:15:09 GMT+0000 (Coordinated Universal Time)";');
2337
2337
  Vo('globalThis["__NEEDLE_PUBLIC_KEY__"] = "' + NEEDLE_PUBLIC_KEY + '";');
2338
- const gi = "5.1.11", Qc = "undefined", Tu = "Thu Aug 13 2026 12:42:37 GMT+0000 (Coordinated Universal Time)";
2338
+ const gi = "5.1.12", Qc = "undefined", Tu = "Thu Aug 13 2026 13:15:09 GMT+0000 (Coordinated Universal Time)";
2339
2339
  Nw && console.log(`Engine version: ${gi} (generator: ${Qc})
2340
2340
  Project built at ${Tu}`);
2341
2341
  const Pr = NEEDLE_PUBLIC_KEY, As = "needle_isActiveInHierarchy", wa = "builtin_components", Qd = "needle_editor_guid";
@@ -47228,7 +47228,7 @@ class tf {
47228
47228
  }
47229
47229
  // private async handleRuntimeLicense(loadingElement: HTMLElement) {
47230
47230
  // // First check if we have a commercial license
47231
- // let commercialLicense = __zrAx();
47231
+ // let commercialLicense = $uxbFepO();
47232
47232
  // // if it's the case then we don't need to perform a runtime check
47233
47233
  // if (commercialLicense) return;
47234
47234
  // // If we don't have a commercial license, then we need to display our message
@@ -47246,10 +47246,10 @@ class tf {
47246
47246
  // nonCommercialContainer.style.opacity = "0";
47247
47247
  // loadingElement.appendChild(nonCommercialContainer);
47248
47248
  // // Use the runtime license check
47249
- // if (!isDevEnvironment() && $StfvQ) {
47249
+ // if (!isDevEnvironment() && UxRDt) {
47250
47250
  // if (debugLicense) console.log("Waiting for runtime license check");
47251
- // await $StfvQ;
47252
- // commercialLicense = __zrAx();
47251
+ // await UxRDt;
47252
+ // commercialLicense = $uxbFepO();
47253
47253
  // }
47254
47254
  // if (commercialLicense) return;
47255
47255
  // nonCommercialContainer.style.transition = "opacity .5s ease-in-out";
@@ -48955,6 +48955,7 @@ const yB = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
48955
48955
  export {
48956
48956
  Gm as $componentName,
48957
48957
  QB as $physicsKey,
48958
+ Tn as $uxbFepO,
48958
48959
  _e as ActionBuilder,
48959
48960
  eL as ActionCollection,
48960
48961
  Pi as ActionModel,
@@ -49345,10 +49346,10 @@ export {
49345
49346
  K_ as XRRig,
49346
49347
  mi as XRState,
49347
49348
  Rs as XRStateFlag,
49349
+ mf as _$EHSDVcNK,
49350
+ Io as _$VfAckLjB,
49348
49351
  mB as __Ignore,
49349
49352
  _j as __internalNotifyObjectDestroyed,
49350
- mf as __nlZsk,
49351
- Tn as __zrAx,
49352
49353
  As as activeInHierarchyFieldName,
49353
49354
  jm as addAttributeChangeCallback,
49354
49355
  zs as addComponent,
@@ -49484,7 +49485,6 @@ export {
49484
49485
  SB as nameof,
49485
49486
  VP as nameofFactory,
49486
49487
  dj as needle,
49487
- Io as oMxKl,
49488
49488
  Fx as objectSerializer,
49489
49489
  vT as offBeforeXRSession,
49490
49490
  bT as offXRSessionEnd,
@@ -140,7 +140,7 @@ void main(){
140
140
  #__vconsole .vc-mask {
141
141
  overflow: hidden;
142
142
  }
143
- `,Tr?.prepend(i),o===!0&&vv()<=0&&Yv(),console.log("\u{1F335} Debug console has loaded")}},e.onerror=()=>{console.warn("\u{1F335} Debug console failed to load."+(window.crossOriginIsolated?"This page is using cross-origin isolation, so external scripts can't be loaded.":"")),Wc=!1,wi=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function cM(){if(!globalThis.VConsole)return;const o=new VConsole.VConsolePlugin("needle-console","\u{1F335} Inspect glTF"),e=()=>document.querySelector("#__vc_plug_"+o._id+" iframe");return o.on("renderTab",function(t){const i=globalThis["needle:codegen_files"];if(!i||i.length===0)return;let n=globalThis["needle:codegen_files"][0];const s=n.indexOf("?");s>-1&&(n=n.substring(0,s));const r=location.protocol+"//"+location.host+location.pathname+"/"+n,a=encodeURIComponent(r);o.fullUrl="https://viewer.needle.tools?inspect&file="+a;var l='<iframe src="" style="width: 100%; height: 99%; border: none;"></iframe>';t(l)}),o.on("show",function(){const t=e();t&&t.src!==o.fullUrl&&(t.src=o.fullUrl)}),o.on("hide",function(){const t=e();t&&(t.src="")}),o.on("addTopBar",function(t){var i=new Array;i.push({name:"Open in new window \u2197",onClick:function(n){window.open(o.fullUrl,"_blank"),wi?.hide()}}),i.push({name:"Reload",onClick:function(n){const s=e();s&&(s.src=o.fullUrl)}}),i.push({name:"Fullscreen",onClick:function(n){const s=e();s.requestFullscreen?s.requestFullscreen():s.webkitRequestFullscreen instanceof Function&&s.webkitRequestFullscreen()}}),t(i)}),o}const yf="padding: 10px; font-family: monospace;",Zv="margin-bottom: 10px;",Ar="margin-bottom: 10px; margin-top: 15px;",hM="width: 100%; border-collapse: collapse; border: 1px solid rgba(0,0,0,0.1); table-layout: fixed;",Jv="border: 1px solid rgba(0,0,0,0.1); padding: 5px;",dM=Jv,uM=Jv+" word-break: break-all;";function no(o,e=!1){e&&o.sort((i,n)=>(n.value?1:0)-(i.value?1:0));let t=`<table style='${hM}'>`;t+="<tbody>";for(const i of o){const n=typeof i.value=="boolean"?i.value?"\u2705":"\u274C":i.value;t+=`<tr><td style='${dM}'>${i.label}</td><td style='${uM}'>${n}</td></tr>`}return t+="</tbody></table>",t}function ew(){try{if(bu())return"\u2705"}catch{}return"\u274C"}function pM(){if(!globalThis.VConsole)return;const o=new VConsole.VConsolePlugin("device-utilities","\u{1F4F1} Device Info");return o.on("renderTab",function(e){let t=`<div style='${yf}'>`;const i=SM();t+=`<h3 style='${Zv}'>Device: ${i}</h3>`,t+=no([{label:"\u{1F4BB} Desktop",value:I.isDesktop()},{label:"\u{1F4F1} Mobile Device",value:I.isMobileDevice()},{label:"\u{1F34E} iOS",value:I.isiOS()},{label:"\u{1F4F1} iPad",value:I.isiPad()},{label:"\u{1F916} Android",value:I.isAndroidDevice()},{label:"\u{1F98A} Mozilla XR",value:I.isMozillaXR()},{label:"\u{1F335} Needle App Clip",value:I.isNeedleAppClip()},{label:"\u{1F34F} macOS",value:I.isMacOS()},{label:"\u{1F453} VisionOS",value:I.isVisionOS()},{label:"\u{1F9ED} Safari",value:I.isSafari()},{label:"\u{1F576}\uFE0F Meta Quest",value:I.isQuest()},{label:"\u{1F517} QuickLook AR Support",value:I.supportsQuickLookAR()}],!0);const n=[],s=I.getiOSVersion();s&&n.push({label:"\u{1F34E} iOS Version",value:s});const r=I.getChromeVersion();r&&n.push({label:"\u{1F310} Chrome Version",value:r});const a=I.getSafariVersion();a&&n.push({label:"\u{1F9ED} Safari Version",value:a}),n.length>0&&(t+=no(n,!1)),t+="</div>",t+=`<div style='${yf} margin-top: 20px;'>`,t+=`<h3 style='${Zv}'>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?"\u2705":"\u274C"},{label:"WebGPU",value:"gpu"in navigator?"\u2705":"\u274C"},{label:"WebGL 2",value:ew()}];t+=no(l,!1),t+="</div>",e(t)}),o}function mM(){if(!globalThis.VConsole)return;const o=new VConsole.VConsolePlugin("graphics-info","\u{1F3A8} Graphics Info");return o.on("renderTab",async function(e){let t=`<div style='${yf}'>`;const i=gM();i.length>0&&(t+=`<h3 style='${Ar}'>General GPU Info</h3>`,t+=no(i,!1));const n=yM();n.length>0&&(t+=`<h3 style='${Ar}'>WebGL</h3>`,t+=no(n,!1));const s=bM();s.length>0&&(t+=`<h3 style='${Ar}'>WebGL 2 Features</h3>`,t+=no(s,!1));const r=_M();r.length>0&&(t+=`<h3 style='${Ar}'>WebGL Limits</h3>`,t+=no(r,!1));const a=vM();a.length>0&&(t+=`<h3 style='${Ar}'>Texture Formats</h3>`,t+=no(a,!1));const l=await wM();if(l.length>0&&(t+=`<h3 style='${Ar}'>WebGPU</h3>`,t+=no(l,!1)),I.isSafari()){const c=xM();c.length>0&&(t+=`<h3 style='${Ar}'>Safari GPU Info</h3>`,t+=no(c,!1))}t+="</div>",e(t)}),o}function gM(){const o=[],e=window.devicePixelRatio;o.push({label:"Device Pixel Ratio",value:e.toString()}),o.push({label:"Width (px)",value:(window.innerWidth*e).toString()}),o.push({label:"Height (px)",value:(window.innerHeight*e).toString()});const t=I.isMobileDevice()?150:96,i=screen.width/t,n=screen.height/t,s=i*2.54,r=n*2.54;o.push({label:"Estimated Width (cm)",value:s.toFixed(1)}),o.push({label:"Estimated Height (cm)",value:r.toFixed(1)});const a=tw();if(a){o.push({label:"GPU",value:a.renderer}),o.push({label:"Driver",value:a.vendor}),o.push({label:"ANGLE",value:a.angle||"Not detected"});const l=fM(a.renderer);l&&(l.manufacturer&&o.push({label:"Manufacturer",value:l.manufacturer}),l.cardVersion&&o.push({label:"Card Version",value:l.cardVersion}),l.brand&&o.push({label:"Brand",value:l.brand}),o.push({label:"Integrated",value:l.integrated?"Yes":"No"}),l.layer&&o.push({label:"WebGL Layer",value:l.layer}))}return o}function fM(o){if(!o)return null;const e=(l,c)=>{const h=c.match(l);return h&&h[0]},t=e(/(ANGLE)/g,o)||void 0,i=e(/((NVIDIA|AMD|Intel)[^\d]*[^\s]+)/,o)||o,n=i.split(" ");n.shift();const s=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:s,cardVersion:r,brand:a,integrated:s==="Intel",layer:t,card:i}}function yM(){const o=[],e=tw();return e&&(o.push({label:"\u{1F4CA} WebGL Version",value:e.version}),o.push({label:"\u{1F3AE} WebGL 2 Available",value:ew()})),o}function bM(){const o=[];try{const e=bu();if(!e)return o;o.push({label:"Float Color Buffer",value:e.getExtension("EXT_color_buffer_float")?"\u2705":"\u274C"}),o.push({label:"Anisotropic Filtering",value:e.getExtension("EXT_texture_filter_anisotropic")?"\u2705":"\u274C"}),o.push({label:"Float Texture Linear",value:e.getExtension("OES_texture_float_linear")?"\u2705":"\u274C"}),o.push({label:"S3TC Compression",value:e.getExtension("WEBGL_compressed_texture_s3tc")?"\u2705":"\u274C"}),o.push({label:"ETC Compression",value:e.getExtension("WEBGL_compressed_texture_etc")?"\u2705":"\u274C"}),o.push({label:"PVRTC Compression",value:e.getExtension("WEBGL_compressed_texture_pvrtc")?"\u2705":"\u274C"}),o.push({label:"ASTC Compression",value:e.getExtension("WEBGL_compressed_texture_astc")?"\u2705":"\u274C"})}catch{}return o}function _M(){const o=[];try{const e=Qv();if(!e)return o;const t=e instanceof WebGL2RenderingContext;o.push({label:"\u{1F4CF} Max Texture Size",value:e.getParameter(e.MAX_TEXTURE_SIZE).toString()}),o.push({label:"\u{1F3A8} Max Renderbuffer Size",value:e.getParameter(e.MAX_RENDERBUFFER_SIZE).toString()}),o.push({label:"\u{1F517} Max Vertex Attribs",value:e.getParameter(e.MAX_VERTEX_ATTRIBS).toString()}),o.push({label:"\u{1F3AF} Max Texture Units",value:e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS).toString()}),t&&(o.push({label:"\u26A1 Max Samples",value:e.getParameter(e.MAX_SAMPLES).toString()}),o.push({label:"\u{1F504} Max Uniform Buffer Bindings",value:e.getParameter(e.MAX_UNIFORM_BUFFER_BINDINGS).toString()}),o.push({label:"\u{1F4D0} Max 3D Texture Size",value:e.getParameter(e.MAX_3D_TEXTURE_SIZE).toString()}))}catch{}return o}function vM(){const o=[];try{yu()&&(o.push({label:"WebGL 1 RGBA",value:"\u2705"}),o.push({label:"WebGL 1 RGB",value:"\u2705"}));const e=bu();e&&(o.push({label:"WebGL 2 RGBA32F",value:e.getExtension("EXT_color_buffer_float")?"\u2705":"\u274C"}),o.push({label:"WebGL 2 RGB32F",value:e.getExtension("EXT_color_buffer_float")?"\u2705":"\u274C"}),o.push({label:"WebGL 2 R11F_G11F_B10F",value:"\u2705"}),o.push({label:"WebGL 2 RGB565",value:"\u2705"}),o.push({label:"WebGL 2 RGB5_A1",value:"\u2705"}),o.push({label:"WebGL 2 RGBA4444",value:"\u2705"}))}catch{}return o}async function wM(){const o=[];if(!("gpu"in navigator))return o.push({label:"\u{1F680} WebGPU Support",value:"\u274C Not supported"}),o;o.push({label:"\u{1F680} WebGPU Support",value:"\u2705 Supported"});try{const e=await navigator.gpu.requestAdapter();if(!e)return o.push({label:"\u{1F3AF} Adapter",value:"No adapter available"}),o;o.push({label:"\u{1F3AF} Adapter",value:e.name||"Unknown Adapter"});const t=await e.requestDevice();o.push({label:"\u{1F527} Device",value:t.label||"WebGPU Device"}),o.push({label:"\u{1F4CF} Max Texture 2D",value:t.limits.maxTextureDimension2D.toString()}),o.push({label:"\u{1F4D0} Max Texture 3D",value:t.limits.maxTextureDimension3D.toString()}),o.push({label:"\u{1F4CA} Max Texture Array Layers",value:t.limits.maxTextureArrayLayers.toString()}),o.push({label:"\u{1F4BE} Max Buffer Size",value:`${(t.limits.maxBufferSize/1024/1024).toFixed(1)}MB`}),o.push({label:"\u{1F517} Max Bind Groups",value:t.limits.maxBindGroups.toString()})}catch(e){o.push({label:"\u274C Error",value:e.message})}return o}function tw(){try{const o=Qv();if(!o)return null;const e=o.getExtension("WEBGL_debug_renderer_info"),t=e?o.getParameter(e.UNMASKED_RENDERER_WEBGL):o.getParameter(o.RENDERER),i=e?o.getParameter(e.UNMASKED_VENDOR_WEBGL):o.getParameter(o.VENDOR),n=o.getParameter(o.VERSION);let s;if(t&&t.includes("ANGLE")){const r=t.match(/ANGLE \(([^)]+)\)/);r&&(s=r[1])}return{renderer:t,vendor:i,version:n,angle:s}}catch{return null}}function xM(){const o=[];try{const e=yu();if(e){const t=e.getExtension("WEBGL_debug_renderer_info");if(t){const i=e.getParameter(t.UNMASKED_RENDERER_WEBGL);i&&i.includes("Apple")&&o.push({label:"\u{1F34E} Apple GPU",value:i})}}}catch{}try{const e=yu();e&&(e.getSupportedExtensions()||[]).includes("WEBGL_compressed_texture_pvrtc")&&o.push({label:"\u{1F5DC}\uFE0F PVRTC Support",value:"\u2705"})}catch{}return o}function SM(){return I.isQuest()?"Meta Quest":I.isVisionOS()?"Vision Pro":I.isiOS()?I.isiPad()?"iPad":"iPhone/iPod":I.isAndroidDevice()?"Android Device":I.isMozillaXR()?"Mozilla XR Browser":I.isNeedleAppClip()?"Needle App Clip":I.isMacOS()?"Mac":I.isDesktop()?"Desktop PC":"Unknown Device"}function CM(){return document.querySelector("#__vconsole .vc-switch")||null}function PM(){return document.querySelector("#__vconsole")||null}const _u=x("debugtypes");class kM{_types=new Map;_reverseTypes=new Map;_lazyLoaders=new Map;constructor(){_u&&console.warn("TypeStore: Created",this)}add(e,t){_u&&console.warn("ADD TYPE",e);const i=this._types.get(e);i?_u&&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){_u&&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 OM=Symbol("BuiltInType"),k=new kM,bf=function(o){k.get(o.name)||k.add(o.name,o)};class EM{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)}}var oi;(o=>{function e(h,d){const p=h.getRoot();return p&&(p.userData.static||p.matrixAutoUpdate===!1||p.matrixWorldAutoUpdate===!1)?((d===!0||d===void 0&&E())&&console.warn(`AnimationUtils: The root object (${p.name||p.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:p.userData.static,name:p.userData.name,tag:p.userData.tag,matrixAutoUpdate:p.matrixAutoUpdate,matrixWorldAutoUpdate:p.matrixWorldAutoUpdate}),!1):!0}o.testIfRootCanAnimate=e;function t(h){return h._actions||null}o.tryGetActionsFromMixer=t;function i(h,d){if(d||(d=new Array),h)h.animations&&d.push(...h.animations);else return d;if(h.children)for(const p of h.children)i(p,d);return d}o.tryGetAnimationClipsFromObjectHierarchy=i;const n=Symbol("objectIsAnimatedData");function s(h,d,p){if(!h)return;if(h[n]===void 0){if(!p)return;h[n]=new Set}const m=h[n];p?m.add(d):m.has(d)&&m.delete(d)}o.setObjectAnimated=s;function r(h){if(!h)return!1;const d=h[n];return d!==void 0&&d.size>0}o.getObjectAnimated=r;function a(h){if(!h||!h.animations)return console.debug("No animations found in file"),null;const d="scene"in h?h.scene:h,p=new Array;for(let g=0;g<h.animations.length;g++){const y=h.animations[g];if(!y.tracks||y.tracks.length<=0){console.warn("Animation has no tracks");continue}for(const b in y.tracks){const f=y.tracks[b],_=$a.parseTrackName(f.name);let w=$a.findNode(d,_.nodeName);if(!w){const O=f.__objectName??f.name.substring(0,f.name.indexOf("."));if(w=d.getObjectByProperty("uuid",O),!w)continue}let S=m(w)||m(d);if(!S){const O=k.get("Animation");if(S=d.addComponent(O),!S){console.error("Failed creating Animation component: No 'Animation' component found in TypeStore");break}}p.push(S),S.addClip&&S.addClip(y)}}return p;function m(g){if(!g)return null;const y=g.userData?.components;if(y&&y.length>0)for(let b=0;b<y.length;b++){const f=y[b];if(f.isAnimationComponent===!0)return f}return m(g.parent)}}o.autoplayAnimations=a;function l(){return new Gt("empty",0,[])}o.emptyClip=l;function c(h){const d=h?.duration??.3;let p={x:1,y:1,z:1};h?.scale!==void 0&&(typeof h.scale=="number"?p={x:h.scale,y:h.scale,z:h.scale}:p=h.scale);const m=h?.type??"linear",g=h?.scaleFactor??1.2,y=new Array,b=new Array;switch(m){case"linear":y.push(0,d),b.push(p.x,p.y,p.z,p.x*g,p.y*g,p.z*g);break;case"spring":y.push(0,d*.3,d*.5,d*.7,d*.9,d),b.push(p.x,p.y,p.z,p.x*g,p.y*g,p.z*g,p.x*.9,p.y*.9,p.z*.9,p.x*1.05,p.y*1.05,p.z*1.05,p.x*.98,p.y*.98,p.z*.98,p.x,p.y,p.z);break}const f=new ck(".scale",y,b);return new Gt("scale",y[y.length-1],[f])}o.createScaleClip=c})(oi||(oi={}));const Ze=function(o){return u(o)},u=function(o){if(o===void 0&&(o=null),!Array.isArray(o))o=iw(o);else for(let e=0;e<o.length;e++){const t=o[e];o[e]=iw(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]=o}};function iw(o){switch(o?.prototype?.constructor?.name){case"Number":case"String":case"Boolean":return null}return o}const nw=x("debugcomponentevents");class vu{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),nw&&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(nw&&console.log("Dispatching event "+e,i),!!i)for(const n of i)n(t)}}const ow=x("debugdefines");As('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";'),As('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";'),As('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";'),As('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";'),As('globalThis["__NEEDLE_ENGINE_VERSION__"] = "5.1.11";'),As('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";'),As('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Thu Aug 13 2026 12:42:37 GMT+0000 (Coordinated Universal Time)";'),As('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const si="5.1.11",Za="undefined",Vc="Thu Aug 13 2026 12:42:37 GMT+0000 (Coordinated Universal Time)";ow&&console.log(`Engine version: ${si} (generator: ${Za})
143
+ `,Tr?.prepend(i),o===!0&&vv()<=0&&Yv(),console.log("\u{1F335} Debug console has loaded")}},e.onerror=()=>{console.warn("\u{1F335} Debug console failed to load."+(window.crossOriginIsolated?"This page is using cross-origin isolation, so external scripts can't be loaded.":"")),Wc=!1,wi=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function cM(){if(!globalThis.VConsole)return;const o=new VConsole.VConsolePlugin("needle-console","\u{1F335} Inspect glTF"),e=()=>document.querySelector("#__vc_plug_"+o._id+" iframe");return o.on("renderTab",function(t){const i=globalThis["needle:codegen_files"];if(!i||i.length===0)return;let n=globalThis["needle:codegen_files"][0];const s=n.indexOf("?");s>-1&&(n=n.substring(0,s));const r=location.protocol+"//"+location.host+location.pathname+"/"+n,a=encodeURIComponent(r);o.fullUrl="https://viewer.needle.tools?inspect&file="+a;var l='<iframe src="" style="width: 100%; height: 99%; border: none;"></iframe>';t(l)}),o.on("show",function(){const t=e();t&&t.src!==o.fullUrl&&(t.src=o.fullUrl)}),o.on("hide",function(){const t=e();t&&(t.src="")}),o.on("addTopBar",function(t){var i=new Array;i.push({name:"Open in new window \u2197",onClick:function(n){window.open(o.fullUrl,"_blank"),wi?.hide()}}),i.push({name:"Reload",onClick:function(n){const s=e();s&&(s.src=o.fullUrl)}}),i.push({name:"Fullscreen",onClick:function(n){const s=e();s.requestFullscreen?s.requestFullscreen():s.webkitRequestFullscreen instanceof Function&&s.webkitRequestFullscreen()}}),t(i)}),o}const yf="padding: 10px; font-family: monospace;",Zv="margin-bottom: 10px;",Ar="margin-bottom: 10px; margin-top: 15px;",hM="width: 100%; border-collapse: collapse; border: 1px solid rgba(0,0,0,0.1); table-layout: fixed;",Jv="border: 1px solid rgba(0,0,0,0.1); padding: 5px;",dM=Jv,uM=Jv+" word-break: break-all;";function no(o,e=!1){e&&o.sort((i,n)=>(n.value?1:0)-(i.value?1:0));let t=`<table style='${hM}'>`;t+="<tbody>";for(const i of o){const n=typeof i.value=="boolean"?i.value?"\u2705":"\u274C":i.value;t+=`<tr><td style='${dM}'>${i.label}</td><td style='${uM}'>${n}</td></tr>`}return t+="</tbody></table>",t}function ew(){try{if(bu())return"\u2705"}catch{}return"\u274C"}function pM(){if(!globalThis.VConsole)return;const o=new VConsole.VConsolePlugin("device-utilities","\u{1F4F1} Device Info");return o.on("renderTab",function(e){let t=`<div style='${yf}'>`;const i=SM();t+=`<h3 style='${Zv}'>Device: ${i}</h3>`,t+=no([{label:"\u{1F4BB} Desktop",value:I.isDesktop()},{label:"\u{1F4F1} Mobile Device",value:I.isMobileDevice()},{label:"\u{1F34E} iOS",value:I.isiOS()},{label:"\u{1F4F1} iPad",value:I.isiPad()},{label:"\u{1F916} Android",value:I.isAndroidDevice()},{label:"\u{1F98A} Mozilla XR",value:I.isMozillaXR()},{label:"\u{1F335} Needle App Clip",value:I.isNeedleAppClip()},{label:"\u{1F34F} macOS",value:I.isMacOS()},{label:"\u{1F453} VisionOS",value:I.isVisionOS()},{label:"\u{1F9ED} Safari",value:I.isSafari()},{label:"\u{1F576}\uFE0F Meta Quest",value:I.isQuest()},{label:"\u{1F517} QuickLook AR Support",value:I.supportsQuickLookAR()}],!0);const n=[],s=I.getiOSVersion();s&&n.push({label:"\u{1F34E} iOS Version",value:s});const r=I.getChromeVersion();r&&n.push({label:"\u{1F310} Chrome Version",value:r});const a=I.getSafariVersion();a&&n.push({label:"\u{1F9ED} Safari Version",value:a}),n.length>0&&(t+=no(n,!1)),t+="</div>",t+=`<div style='${yf} margin-top: 20px;'>`,t+=`<h3 style='${Zv}'>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?"\u2705":"\u274C"},{label:"WebGPU",value:"gpu"in navigator?"\u2705":"\u274C"},{label:"WebGL 2",value:ew()}];t+=no(l,!1),t+="</div>",e(t)}),o}function mM(){if(!globalThis.VConsole)return;const o=new VConsole.VConsolePlugin("graphics-info","\u{1F3A8} Graphics Info");return o.on("renderTab",async function(e){let t=`<div style='${yf}'>`;const i=gM();i.length>0&&(t+=`<h3 style='${Ar}'>General GPU Info</h3>`,t+=no(i,!1));const n=yM();n.length>0&&(t+=`<h3 style='${Ar}'>WebGL</h3>`,t+=no(n,!1));const s=bM();s.length>0&&(t+=`<h3 style='${Ar}'>WebGL 2 Features</h3>`,t+=no(s,!1));const r=_M();r.length>0&&(t+=`<h3 style='${Ar}'>WebGL Limits</h3>`,t+=no(r,!1));const a=vM();a.length>0&&(t+=`<h3 style='${Ar}'>Texture Formats</h3>`,t+=no(a,!1));const l=await wM();if(l.length>0&&(t+=`<h3 style='${Ar}'>WebGPU</h3>`,t+=no(l,!1)),I.isSafari()){const c=xM();c.length>0&&(t+=`<h3 style='${Ar}'>Safari GPU Info</h3>`,t+=no(c,!1))}t+="</div>",e(t)}),o}function gM(){const o=[],e=window.devicePixelRatio;o.push({label:"Device Pixel Ratio",value:e.toString()}),o.push({label:"Width (px)",value:(window.innerWidth*e).toString()}),o.push({label:"Height (px)",value:(window.innerHeight*e).toString()});const t=I.isMobileDevice()?150:96,i=screen.width/t,n=screen.height/t,s=i*2.54,r=n*2.54;o.push({label:"Estimated Width (cm)",value:s.toFixed(1)}),o.push({label:"Estimated Height (cm)",value:r.toFixed(1)});const a=tw();if(a){o.push({label:"GPU",value:a.renderer}),o.push({label:"Driver",value:a.vendor}),o.push({label:"ANGLE",value:a.angle||"Not detected"});const l=fM(a.renderer);l&&(l.manufacturer&&o.push({label:"Manufacturer",value:l.manufacturer}),l.cardVersion&&o.push({label:"Card Version",value:l.cardVersion}),l.brand&&o.push({label:"Brand",value:l.brand}),o.push({label:"Integrated",value:l.integrated?"Yes":"No"}),l.layer&&o.push({label:"WebGL Layer",value:l.layer}))}return o}function fM(o){if(!o)return null;const e=(l,c)=>{const h=c.match(l);return h&&h[0]},t=e(/(ANGLE)/g,o)||void 0,i=e(/((NVIDIA|AMD|Intel)[^\d]*[^\s]+)/,o)||o,n=i.split(" ");n.shift();const s=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:s,cardVersion:r,brand:a,integrated:s==="Intel",layer:t,card:i}}function yM(){const o=[],e=tw();return e&&(o.push({label:"\u{1F4CA} WebGL Version",value:e.version}),o.push({label:"\u{1F3AE} WebGL 2 Available",value:ew()})),o}function bM(){const o=[];try{const e=bu();if(!e)return o;o.push({label:"Float Color Buffer",value:e.getExtension("EXT_color_buffer_float")?"\u2705":"\u274C"}),o.push({label:"Anisotropic Filtering",value:e.getExtension("EXT_texture_filter_anisotropic")?"\u2705":"\u274C"}),o.push({label:"Float Texture Linear",value:e.getExtension("OES_texture_float_linear")?"\u2705":"\u274C"}),o.push({label:"S3TC Compression",value:e.getExtension("WEBGL_compressed_texture_s3tc")?"\u2705":"\u274C"}),o.push({label:"ETC Compression",value:e.getExtension("WEBGL_compressed_texture_etc")?"\u2705":"\u274C"}),o.push({label:"PVRTC Compression",value:e.getExtension("WEBGL_compressed_texture_pvrtc")?"\u2705":"\u274C"}),o.push({label:"ASTC Compression",value:e.getExtension("WEBGL_compressed_texture_astc")?"\u2705":"\u274C"})}catch{}return o}function _M(){const o=[];try{const e=Qv();if(!e)return o;const t=e instanceof WebGL2RenderingContext;o.push({label:"\u{1F4CF} Max Texture Size",value:e.getParameter(e.MAX_TEXTURE_SIZE).toString()}),o.push({label:"\u{1F3A8} Max Renderbuffer Size",value:e.getParameter(e.MAX_RENDERBUFFER_SIZE).toString()}),o.push({label:"\u{1F517} Max Vertex Attribs",value:e.getParameter(e.MAX_VERTEX_ATTRIBS).toString()}),o.push({label:"\u{1F3AF} Max Texture Units",value:e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS).toString()}),t&&(o.push({label:"\u26A1 Max Samples",value:e.getParameter(e.MAX_SAMPLES).toString()}),o.push({label:"\u{1F504} Max Uniform Buffer Bindings",value:e.getParameter(e.MAX_UNIFORM_BUFFER_BINDINGS).toString()}),o.push({label:"\u{1F4D0} Max 3D Texture Size",value:e.getParameter(e.MAX_3D_TEXTURE_SIZE).toString()}))}catch{}return o}function vM(){const o=[];try{yu()&&(o.push({label:"WebGL 1 RGBA",value:"\u2705"}),o.push({label:"WebGL 1 RGB",value:"\u2705"}));const e=bu();e&&(o.push({label:"WebGL 2 RGBA32F",value:e.getExtension("EXT_color_buffer_float")?"\u2705":"\u274C"}),o.push({label:"WebGL 2 RGB32F",value:e.getExtension("EXT_color_buffer_float")?"\u2705":"\u274C"}),o.push({label:"WebGL 2 R11F_G11F_B10F",value:"\u2705"}),o.push({label:"WebGL 2 RGB565",value:"\u2705"}),o.push({label:"WebGL 2 RGB5_A1",value:"\u2705"}),o.push({label:"WebGL 2 RGBA4444",value:"\u2705"}))}catch{}return o}async function wM(){const o=[];if(!("gpu"in navigator))return o.push({label:"\u{1F680} WebGPU Support",value:"\u274C Not supported"}),o;o.push({label:"\u{1F680} WebGPU Support",value:"\u2705 Supported"});try{const e=await navigator.gpu.requestAdapter();if(!e)return o.push({label:"\u{1F3AF} Adapter",value:"No adapter available"}),o;o.push({label:"\u{1F3AF} Adapter",value:e.name||"Unknown Adapter"});const t=await e.requestDevice();o.push({label:"\u{1F527} Device",value:t.label||"WebGPU Device"}),o.push({label:"\u{1F4CF} Max Texture 2D",value:t.limits.maxTextureDimension2D.toString()}),o.push({label:"\u{1F4D0} Max Texture 3D",value:t.limits.maxTextureDimension3D.toString()}),o.push({label:"\u{1F4CA} Max Texture Array Layers",value:t.limits.maxTextureArrayLayers.toString()}),o.push({label:"\u{1F4BE} Max Buffer Size",value:`${(t.limits.maxBufferSize/1024/1024).toFixed(1)}MB`}),o.push({label:"\u{1F517} Max Bind Groups",value:t.limits.maxBindGroups.toString()})}catch(e){o.push({label:"\u274C Error",value:e.message})}return o}function tw(){try{const o=Qv();if(!o)return null;const e=o.getExtension("WEBGL_debug_renderer_info"),t=e?o.getParameter(e.UNMASKED_RENDERER_WEBGL):o.getParameter(o.RENDERER),i=e?o.getParameter(e.UNMASKED_VENDOR_WEBGL):o.getParameter(o.VENDOR),n=o.getParameter(o.VERSION);let s;if(t&&t.includes("ANGLE")){const r=t.match(/ANGLE \(([^)]+)\)/);r&&(s=r[1])}return{renderer:t,vendor:i,version:n,angle:s}}catch{return null}}function xM(){const o=[];try{const e=yu();if(e){const t=e.getExtension("WEBGL_debug_renderer_info");if(t){const i=e.getParameter(t.UNMASKED_RENDERER_WEBGL);i&&i.includes("Apple")&&o.push({label:"\u{1F34E} Apple GPU",value:i})}}}catch{}try{const e=yu();e&&(e.getSupportedExtensions()||[]).includes("WEBGL_compressed_texture_pvrtc")&&o.push({label:"\u{1F5DC}\uFE0F PVRTC Support",value:"\u2705"})}catch{}return o}function SM(){return I.isQuest()?"Meta Quest":I.isVisionOS()?"Vision Pro":I.isiOS()?I.isiPad()?"iPad":"iPhone/iPod":I.isAndroidDevice()?"Android Device":I.isMozillaXR()?"Mozilla XR Browser":I.isNeedleAppClip()?"Needle App Clip":I.isMacOS()?"Mac":I.isDesktop()?"Desktop PC":"Unknown Device"}function CM(){return document.querySelector("#__vconsole .vc-switch")||null}function PM(){return document.querySelector("#__vconsole")||null}const _u=x("debugtypes");class kM{_types=new Map;_reverseTypes=new Map;_lazyLoaders=new Map;constructor(){_u&&console.warn("TypeStore: Created",this)}add(e,t){_u&&console.warn("ADD TYPE",e);const i=this._types.get(e);i?_u&&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){_u&&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 OM=Symbol("BuiltInType"),k=new kM,bf=function(o){k.get(o.name)||k.add(o.name,o)};class EM{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)}}var oi;(o=>{function e(h,d){const p=h.getRoot();return p&&(p.userData.static||p.matrixAutoUpdate===!1||p.matrixWorldAutoUpdate===!1)?((d===!0||d===void 0&&E())&&console.warn(`AnimationUtils: The root object (${p.name||p.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:p.userData.static,name:p.userData.name,tag:p.userData.tag,matrixAutoUpdate:p.matrixAutoUpdate,matrixWorldAutoUpdate:p.matrixWorldAutoUpdate}),!1):!0}o.testIfRootCanAnimate=e;function t(h){return h._actions||null}o.tryGetActionsFromMixer=t;function i(h,d){if(d||(d=new Array),h)h.animations&&d.push(...h.animations);else return d;if(h.children)for(const p of h.children)i(p,d);return d}o.tryGetAnimationClipsFromObjectHierarchy=i;const n=Symbol("objectIsAnimatedData");function s(h,d,p){if(!h)return;if(h[n]===void 0){if(!p)return;h[n]=new Set}const m=h[n];p?m.add(d):m.has(d)&&m.delete(d)}o.setObjectAnimated=s;function r(h){if(!h)return!1;const d=h[n];return d!==void 0&&d.size>0}o.getObjectAnimated=r;function a(h){if(!h||!h.animations)return console.debug("No animations found in file"),null;const d="scene"in h?h.scene:h,p=new Array;for(let g=0;g<h.animations.length;g++){const y=h.animations[g];if(!y.tracks||y.tracks.length<=0){console.warn("Animation has no tracks");continue}for(const b in y.tracks){const f=y.tracks[b],_=$a.parseTrackName(f.name);let w=$a.findNode(d,_.nodeName);if(!w){const O=f.__objectName??f.name.substring(0,f.name.indexOf("."));if(w=d.getObjectByProperty("uuid",O),!w)continue}let S=m(w)||m(d);if(!S){const O=k.get("Animation");if(S=d.addComponent(O),!S){console.error("Failed creating Animation component: No 'Animation' component found in TypeStore");break}}p.push(S),S.addClip&&S.addClip(y)}}return p;function m(g){if(!g)return null;const y=g.userData?.components;if(y&&y.length>0)for(let b=0;b<y.length;b++){const f=y[b];if(f.isAnimationComponent===!0)return f}return m(g.parent)}}o.autoplayAnimations=a;function l(){return new Gt("empty",0,[])}o.emptyClip=l;function c(h){const d=h?.duration??.3;let p={x:1,y:1,z:1};h?.scale!==void 0&&(typeof h.scale=="number"?p={x:h.scale,y:h.scale,z:h.scale}:p=h.scale);const m=h?.type??"linear",g=h?.scaleFactor??1.2,y=new Array,b=new Array;switch(m){case"linear":y.push(0,d),b.push(p.x,p.y,p.z,p.x*g,p.y*g,p.z*g);break;case"spring":y.push(0,d*.3,d*.5,d*.7,d*.9,d),b.push(p.x,p.y,p.z,p.x*g,p.y*g,p.z*g,p.x*.9,p.y*.9,p.z*.9,p.x*1.05,p.y*1.05,p.z*1.05,p.x*.98,p.y*.98,p.z*.98,p.x,p.y,p.z);break}const f=new ck(".scale",y,b);return new Gt("scale",y[y.length-1],[f])}o.createScaleClip=c})(oi||(oi={}));const Ze=function(o){return u(o)},u=function(o){if(o===void 0&&(o=null),!Array.isArray(o))o=iw(o);else for(let e=0;e<o.length;e++){const t=o[e];o[e]=iw(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]=o}};function iw(o){switch(o?.prototype?.constructor?.name){case"Number":case"String":case"Boolean":return null}return o}const nw=x("debugcomponentevents");class vu{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),nw&&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(nw&&console.log("Dispatching event "+e,i),!!i)for(const n of i)n(t)}}const ow=x("debugdefines");As('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";'),As('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";'),As('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";'),As('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";'),As('globalThis["__NEEDLE_ENGINE_VERSION__"] = "5.1.12";'),As('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";'),As('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Thu Aug 13 2026 13:15:09 GMT+0000 (Coordinated Universal Time)";'),As('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const si="5.1.12",Za="undefined",Vc="Thu Aug 13 2026 13:15:09 GMT+0000 (Coordinated Universal Time)";ow&&console.log(`Engine version: ${si} (generator: ${Za})
144
144
  Project built at ${Vc}`);const Ts=NEEDLE_PUBLIC_KEY,oo="needle_isActiveInHierarchy",Ir="builtin_components",Hc="needle_editor_guid";function As(o){try{(0,eval)(o)}catch(e){ow&&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 _f={experimentalSmartHierarchyUpdate:!1},Ui=Symbol("shadowDomOwner"),MM=x("debugpatch");function wu(o,e,t,i){const n=MM===e;if(!t&&!i)return;const s=e+"___needle";TM(o,e,t,i);const r=Object.getOwnPropertyDescriptor(o,e),a=o[e];n&&console.log("Patch",o.constructor.name,e,r,a),r?(n&&console.log("Apply patch with existing descriptor",o.constructor.name,e,r),typeof r.value=="function"&&(o[e]=rw(r.value,o,e))):(n&&console.log("Create patch with new property",o.constructor.name,e,r),Object.defineProperty(o,e,{set:function(l){if(typeof l=="function")this[s]=rw(l,o,e);else{const c=this[s];aw(o,e,this,c,l),this[s]=l,lw(o,e,this,c,l)}},get:function(){const l=this[s];return typeof l=="function"&&l[s]?l[s]:l}}))}function RM(o,e,t){const i=wf(o,e);if(i)for(let n=i.length-1;n>=0;n--){const s=i[n];s.prefix===t&&(s.prefix=null),s.postfix===t&&(s.postfix=null),!s.prefix&&!s.postfix&&i.splice(n,1)}}const sw=Symbol("Needle:Patches:WrappedFunction");function rw(o,e,t){if(o[sw])return o;const i=function(...n){aw(e,t,this,...n);const s=o.apply(this,n);return lw(e,t,this,s,...n),s};return i[sw]=!0,i}const xu="Needle:Patches";function vf(){return globalThis[xu]||(globalThis[xu]=new WeakMap),globalThis[xu]}function wf(o,e){const t=vf().get(o);return t?t.get(e):null}function TM(o,e,t,i){let n=vf().get(o);n||(n=new Map,vf().set(o,n));let s=n.get(e);s||(s=[],n.set(e,s)),s.push({prefix:t,postfix:i})}function aw(o,e,t,...i){if(!t)return;const n=wf(o,e);if(n)for(const s of n)s.prefix?.call(t,...i)}function lw(o,e,t,i,...n){if(!t)return;const s=wf(o,e);if(s)for(const r of s)r.postfix?.call(t,i,...n)}function AM(o,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>o.time.frame)return window.requestAnimationFrame(()=>i());const r=s.captureCanvas(e);r&&r instanceof Promise?r.then(()=>s.displayUI()):s.displayUI()};const n=Number.parseInt(t.get("spector")||"0")||0;console.log("Scheduled Spector capture at frame #"+n);const s=new window.SPECTOR.Spector;s.spyCanvases=!0,i();return}else E()&&console.debug("Spector available: Add '?spector=<frame>' to the URL to enable it and capture a frame.")}}function cw(o){const e=o;return!!(e.parser&&e.parser.json)}var Su=(o=>(o[o.None=0]="None",o[o.DontExport=1]="DontExport",o))(Su||{});const Cu=Symbol("component-name");function Pu(o){return o&&typeof o=="object"&&o.isComponent}const IM=Symbol("object"),xf=new Bi(()=>new v,20);class hw{_point;_normal;_tangentVelocity;distance;impulse;friction;get point(){return xf.get().set(this._point.x,this._point.y,this._point.z)}get normal(){return xf.get().set(this._normal.x,this._normal.y,this._normal.z)}get tangentVelocity(){return xf.get().set(this._tangentVelocity.x,this._tangentVelocity.y,this._tangentVelocity.z)}constructor(e,t,i,n,s,r){this._point=e,this.distance=t,this._normal=i,this.impulse=n,this.friction=s,this._tangentVelocity=r}}class dw{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 uw{object;collider;constructor(e,t){this.object=e,this.collider=t}}class mg{constructor(e){this.context=e,this.root.style.cssText=`
145
145
  position: absolute;
146
146
  width: 1px; height: 1px;
@@ -1750,4 +1750,4 @@ Needle Engine: finished loading `+i+`
1750
1750
  ---------------------------------
1751
1751
  \u2022 `+r.passes.map(d=>d.name||d.constructor.name+"*").join(`
1752
1752
  \u2022 `)+`
1753
- `),Ti&&this._onCreateEffectsDebug(this._composer,s)}createPassForMergeableEffects(e,t,i,n){if(e.length>0){const s=new A.POSTPROCESSING.MODULE.EffectPass(i,...e);s.name=e.map(r=>r.name).join(", "),s.mainScene=n,s.enabled=!0,s.renderToScreen=!1,t.addPass(s),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) \u2192",r),e.passes.length=0;for(const a of r)a.enabled=!0,a.renderToScreen=!1,e.addPass(a)}const s=this.context.menu;if(s&&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 c=document.createElement("option");c.innerText=l.name,c.value=`${e.passes.indexOf(l)}`,c.title=l.name,r.appendChild(c)}s.appendChild(r),this._menuEntry=r,r.addEventListener("change",()=>{const l=Array.from(r.selectedOptions).map(c=>parseInt(c.value));l.length===1&&l[0]===-1?this._passIndices=null:this._passIndices=l,this.applyEffects(this.context)})}}}}const OB=Object.freeze(Object.defineProperty({__proto__:null,PostProcessingHandler:Ec},Symbol.toStringTag,{value:"Module"}));class vg{_name;_tracks=[];_currentTrack=null;_pendingSignals=[];_idProvider;constructor(e,t){this._name=e,this._idProvider=new St(t??Date.now())}static create(e,t){return new vg(e??"Timeline",t)}animationTrack(e,t){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,Pe.Animation,t??null),this}audioTrack(e,t,i){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,Pe.Audio,t??null),this._currentTrack.volume=i,this}activationTrack(e,t){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,Pe.Activation,t??null),this}controlTrack(e){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,Pe.Control,null),this}signalTrack(e,t){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,Pe.Signal,t??null),this}markerTrack(e){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,Pe.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 Pe.Animation:{let n;if(e instanceof Gt)n=e;else{const h=Array.isArray(e)?e:[e],d=i.outputs[0],p=d instanceof M?d:d!=null&&"gameObject"in d?d.gameObject:void 0;n=vh(h,p)}const s=t??{},r=s.duration??n.duration,a=s.start??i.cursor,l=a+r,c={start:a,end:l,duration:r,timeScale:s.speed??1,clipIn:s.clipIn??0,easeInDuration:s.easeIn??0,easeOutDuration:s.easeOut??0,preExtrapolationMode:s.preExtrapolation??rt.None,postExtrapolationMode:s.postExtrapolation??rt.None,reversed:s.reversed,asset:{clip:n,loop:s.loop??!1,duration:n.duration,removeStartOffset:s.removeStartOffset??!1}};i.clips.push(c),i.cursor=l;break}case Pe.Audio:{const n=e,s=t??{},r=s.duration,a=s.start??i.cursor,l=a+r,c={start:a,end:l,duration:r,timeScale:s.speed??1,clipIn:0,easeInDuration:s.easeIn??0,easeOutDuration:s.easeOut??0,preExtrapolationMode:rt.None,postExtrapolationMode:rt.None,asset:{clip:n,loop:s.loop??!1,volume:s.volume??1}};i.clips.push(c),i.cursor=l;break}case Pe.Activation:{const n=e,s=n.start??i.cursor,r=s+n.duration,a={start:s,end:r,duration:n.duration,timeScale:1,clipIn:0,easeInDuration:n.easeIn??0,easeOutDuration:n.easeOut??0,preExtrapolationMode:rt.None,postExtrapolationMode:rt.None,asset:{}};i.clips.push(a),i.cursor=r;break}case Pe.Control:{const n=e,s=t??{},r=s.start??i.cursor,a=s.duration,l=r+a,c={start:r,end:l,duration:a,timeScale:1,clipIn:0,easeInDuration:0,easeOutDuration:0,preExtrapolationMode:rt.None,postExtrapolationMode:rt.None,asset:{sourceObject:n,controlActivation:s.controlActivation??!0,updateDirector:s.updateDirector??!0}};i.clips.push(c),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!==Pe.Signal&&this._currentTrack.type!==Pe.Marker)throw new Error(`TimelineBuilder: .marker() is only supported on signal and marker tracks, not "${this._currentTrack.type}"`);const n={type:Rh.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!==Pe.Signal&&this._currentTrack.type!==Pe.Marker)throw new Error(`TimelineBuilder: .signal() is only supported on signal and marker tracks, not "${this._currentTrack.type}"`);const n=this._idProvider.generateUUID(),s=this._tracks.indexOf(this._currentTrack),r={type:Rh.Signal,time:e,retroActive:i?.retroActive??!1,emitOnce:i?.emitOnce??!1,asset:n};return this._currentTrack.markers.push(r),this._pendingSignals.push({trackIndex:s,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!==Pe.Animation)throw new Error("TimelineBuilder: .track() is only supported on animation tracks");return this._currentTrack.inlineTracks.push(zy(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=P.getComponent(i,Zr);n||(n=P.addComponent(i,Zr)),n.events||(n.events=[]);for(const s of this._pendingSignals){const r=new Mh;r.guid=s.guid;const a=new Pl;a.signal=r,a.reaction=new se([s.callback]),n.events.push(a);const l=t.tracks[s.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 M?t:t!=null&&"gameObject"in t?t.gameObject:void 0,n=vh(e.inlineTracks,i),s=e.cursor,r=n.duration,a={start:s,end:s+r,duration:r,timeScale:1,clipIn:0,easeInDuration:0,easeOutDuration:0,preExtrapolationMode:rt.None,postExtrapolationMode:rt.None,asset:{clip:n,loop:!1,duration:n.duration,removeStartOffset:!1}};e.clips.push(a),e.cursor=s+r,e.inlineTracks=[]}}class VP{}const EB=Object.freeze(Object.defineProperty({__proto__:null,ActionBuilder:ye,ActionCollection:_C,ActionModel:Ai,AlignmentConstraint:jh,Animation:Xt,AnimationBuilder:yg,AnimationCurve:sd,AnimationExtension:pm,Animator:Ot,AnimatorController:co,Antialiasing:cd,Attractor:rc,AudioExtension:La,AudioListener:Zo,AudioSource:Gi,Avatar:Ks,AvatarMarker:ft,AxesHelper:Ol,AxisRotationConstraint:p0,BaseUIComponent:xn,BasicIKConstraint:s0,BehaviorExtension:rb,BehaviorModel:Wt,BloomEffect:Nm,BoxCollider:Lp,BoxGizmo:ma,BoxHelperComponent:Vt,Button:ms,CallInfo:Ns,Camera:ci,CameraTargetReachedEvent:Eh,Canvas:Zl,CanvasGroup:nr,CapsuleCollider:Jo,ChangeMaterialOnClick:Q0,ChangeTransformOnClick:ha,CharacterController:ta,CharacterControllerInput:ts,ChromaticAberration:hd,ClickThrough:og,ColorAdjustments:lr,ColorBySpeedModule:oc,ColorOverLifetimeModule:Lm,ContactShadows:Bh,CursorFollow:Ea,CustomBranding:pa,Deletable:h0,DeleteBox:wr,DepthOfField:Gn,DeviceFlag:Dp,DocumentExtension:WP,DragControls:sa,DragProfile:Up,DropListener:os,Duplicatable:I0,EffectWrapper:dd,EmissionModule:ds,EmphasizeOnClick:Wl,EnvironmentScene:kp,EventList:se,EventListEvent:Uy,EventSystem:bi,EventTrigger:nm,FieldWithDefault:VS,FixedJoint:Cb,FixedRotationAxesConstraint:_S,Fog:Jl,GltfExport:F0,GltfExportBox:j0,GrabPointPlaneConstraint:zh,Gradient:fa,Graphic:td,GraphicRaycaster:bp,GridHelper:ec,GridLayoutGroup:gb,GridSnapConstraint:jp,GroundProjectedEnv:uo,GroupActionModel:ca,HideOnStart:Pn,HingeJoint:od,HorizontalLayoutGroup:mb,get HoverAnimation(){return Mo},Image:uc,InheritVelocityModule:Ab,InputField:t_,InstanceHandle:za,InstancingHandler:Da,Interactable:c0,KeepRotationConstraint:Bp,KeepScaleConstraint:yS,Keyframe:Mi,LODGroup:Om,LODModel:ic,Light:Ft,LimitVelocityOverLifetimeModule:_t,LogStats:l0,LookAt:i_,LookAtConstraint:Qr,MainModule:Jt,MaskableGraphic:id,MeshCollider:qs,MeshRenderer:Nh,MinMaxCurve:Z,MinMaxGradient:ya,NeedleMenu:vo,NestedGltf:nc,Networking:Mb,NoiseModule:ve,ObjectRaycaster:hn,OffsetConstraint:ga,OpenURL:pc,OrbitControls:fe,Outline:Yl,Padding:ua,ParticleBurst:Im,ParticleSubEmitter:Ib,ParticleSystem:ld,ParticleSystemRenderer:fn,PhysicsExtension:ab,PixelationEffect:ud,PlaneHeightLockConstraint:m0,PlayAnimationOnClick:Vh,PlayAudioOnClick:Ys,PlayableDirector:kl,PlayerColor:Pc,PointerEventData:$d,PostProcessingHandler:Ec,PreliminaryAction:Vl,PreliminaryTrigger:Hh,RawImage:tg,Rect:LC,RectTransform:Vn,ReflectionProbe:is,RegisteredAnimationInfo:xr,RemoteSkybox:n0,Renderer:di,RendererLightmap:R0,Rigidbody:it,RotationBySpeedModule:gn,RotationOverLifetimeModule:Hn,ScaleLimitConstraint:d0,SceneSwitcher:nt,ScreenCapture:cr,ScreenSpaceAmbientOcclusion:us,ScreenSpaceAmbientOcclusionN8:qn,ScrollFollow:Ro,SeeThrough:Qb,SetActiveOnClick:Y0,ShadowCatcher:yd,ShapeModule:Tb,SharpeningEffect:md,SignalAsset:Mh,SignalReceiver:Zr,SignalReceiverEvent:Pl,SignalTrackHandler:Ah,Size:IC,SizeBySpeedModule:Ri,SizeOverLifetimeModule:ba,SkinnedMeshRenderer:T0,SmoothFollow:Xm,SnapToSurfaceConstraint:zp,SpatialGrabRaycaster:Ia,SpatialHtml:xd,SpatialTrigger:Qm,SpatialTriggerReceiver:Oo,SpectatorCamera:Ym,SphereCollider:El,SplineContainer:Pa,SplineData:Eo,SplineWalker:_n,Sprite:rs,SpriteData:Gl,SpriteRenderer:ki,SpriteSheet:Hl,SubEmitterSystem:Fm,SyncedCamera:Yb,SyncedRoom:Xn,SyncedTransform:Fn,TapGestureTrigger:Z0,TeleportTarget:vm,TestRunner:Zb,TestSimulateUserData:Jb,Text:Zt,TextBuilder:ub,TextExtension:Pm,TextureSheetAnimationModule:ei,TiltShiftEffect:Po,TimelineActivationTrack:Sp,TimelineAnimationTrack:Th,TimelineAudioTrack:Cs,TimelineBuilder:vg,TimelineControlTrack:Cp,TimelineMarkerTrack:xp,ToneMappingEffect:va,TrailModule:$e,TransformData:qe,TransformGizmo:ka,TriggerBuilder:Yt,TriggerModel:yr,UIRaycastUtils:Gy,UIRootComponent:Zh,USDZExporter:So,USDZText:Kl,USDZUIExtension:bb,UsageMarker:Fh,VariantAction:q0,VelocityOverLifetimeModule:Ke,VerticalLayoutGroup:pb,VideoPlayer:wt,get ViewBox(){return mt},Vignette:Sa,VisibilityAction:Gh,Voip:ps,Volume:gd,VolumeParameter:$,VolumeProfile:zm,WebARCameraBackground:kd,WebARSessionRoot:kn,WebXR:wm,WebXRImageTracking:yc,WebXRImageTrackingModel:vn,WebXRPlaneTracking:bs,WebXRTrackedImage:kc,XRControllerFollow:fs,XRControllerModel:as,XRControllerMovement:Qi,XRFlag:$n,XRRig:ag,XRState:yi,__Ignore:VP},Symbol.toStringTag,{value:"Module"}));var S_;(o=>{function e(t,i=!1,n=.75){const s=new Pa,r=1-j.clamp(n,0,1);return t.forEach((a,l)=>{const c=new v;l<t.length-1?c.subVectors(t[l+1],a).normalize().multiplyScalar(r):i&&t.length>1&&c.subVectors(t[0],a).normalize().multiplyScalar(r);const h=new Eo;h.position.copy(a),h.tangentIn.copy(c),h.tangentOut.copy(c),s.addKnot(h)}),s.closed=i,s}o.createFromPoints=e})(S_||(S_={}));class MB extends XO{constructor(){super(new Worker(URL.createObjectURL(new Blob([`import '${new URL("./generateMeshBVH.worker-DiCnZlf3.js",import.meta.url).toString()}';`],{type:"text/javascript"})),{type:"module"})),this.name="GenerateMeshBVHWorker"}runTask(e,t,i={}){return new Promise((n,s)=>{if(t.getAttribute("position").isInterleavedBufferAttribute||t.index&&t.index.isInterleavedBufferAttribute)throw new Error("GenerateMeshBVHWorker: InterleavedBufferAttribute are not supported for the geometry attributes.");e.onerror=c=>{s(new Error(`[GenerateMeshBVHWorker] ${c.message||"Could not load worker."}`))},e.onmessage=c=>{const{data:h}=c;if(h.error)s(new Error(h.error)),e.onmessage=null;else if(h.serialized){const{serialized:d,position:p}=h,m=QO.deserialize(d,t,{setIndex:!1}),g=Object.assign({setBoundingBox:!0},i);if(t.attributes.position.array=p,d.index)if(t.index)t.index.array=d.index;else{const y=new ot(d.index,1,!1);t.setIndex(y)}g.setBoundingBox&&(t.boundingBox=m.getBoundingBox(new ii)),i.onProgress&&i.onProgress(h.progress),n(m),e.onmessage=null}else i.onProgress&&i.onProgress(h.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(c=>c.buffer).filter(c=>typeof SharedArrayBuffer>"u"||!(c instanceof SharedArrayBuffer)))})}}const RB=Object.freeze(Object.defineProperty({__proto__:null,GenerateMeshBVHWorker:MB},Symbol.toStringTag,{value:"Module"}));export{Cu as $componentName,IM as $physicsKey,ye as ActionBuilder,_C as ActionCollection,Ai as ActionModel,$w as Addressables,jh as AlignmentConstraint,cl as AmbientMode,Xt as Animation,yg as AnimationBuilder,sd as AnimationCurve,pm as AnimationExtension,oi as AnimationUtils,Ot as Animator,Ci as AnimatorConditionMode,co as AnimatorController,bg as AnimatorControllerBuilder,Xr as AnimatorControllerParameterType,_h as AnimatorStateInfo,cd as Antialiasing,Yn as Application,Xx as AssetDatabase,ie as AssetReference,rc as Attractor,Ny as AudioClip,La as AudioExtension,Zo as AudioListener,Y1 as AudioRolloffMode,Gi as AudioSource,Ks as Avatar,ft as AvatarMarker,Sl as Axes,Ol as AxesHelper,p0 as AxisRotationConstraint,Vc as BUILD_TIME,xn as BaseUIComponent,s0 as BasicIKConstraint,rb as BehaviorExtension,Wt as BehaviorModel,Lr as BlobStorage,Nm as BloomEffect,Lp as BoxCollider,ma as BoxGizmo,Vt as BoxHelperComponent,ms as Button,Sn as ButtonsFactory,oP as CallDirection,Ns as CallInfo,ci as Camera,Eh as CameraTargetReachedEvent,Zl as Canvas,nr as CanvasGroup,Jo as CapsuleCollider,Q0 as ChangeMaterialOnClick,ha as ChangeTransformOnClick,ta as CharacterController,ts as CharacterControllerInput,hd as ChromaticAberration,Bi as CircularBuffer,Kr as ClearFlags,og as ClickThrough,rt as ClipExtrapolation,qi as Collider,dw as Collision,fp as CollisionDetectionMode,lr as ColorAdjustments,oc as ColorBySpeedModule,Lm as ColorOverLifetimeModule,cA as Component,R as Component$1,vu as ComponentLifecycleEvents,EB as Components,sx as ConnectionEvents,hw as ContactPoint,Bh as ContactShadows,U as Context,wT as ContextArgs,de as ContextEvent,he as ContextRegistry,Ea as CursorFollow,pa as CustomBranding,je as CustomShader,Wu as DefaultReflectionMode,h0 as Deletable,wr as DeleteBox,Gn as DepthOfField,JC as DepthOfFieldMode,Dp as DeviceFlag,I as DeviceUtilities,Z1 as DirectorWrapMode,dp as DisposableStore,WP as DocumentExtension,sa as DragControls,f0 as DragMode,Up as DragProfile,os as DropListener,I0 as Duplicatable,dd as EffectWrapper,ds as EmissionModule,Wl as EmphasizeOnClick,Gd as EngineLoadingView,kp as EnvironmentScene,Wf as EventBus,se as EventList,Uy as EventListEvent,bi as EventSystem,nm as EventTrigger,VS as FieldWithDefault,Fa as FileReference,Vw as FileReferenceSerializer,pI as FileSpawnModel,CS as File_Event,Cb as FixedJoint,_S as FixedRotationAxesConstraint,Jl as Fog,Cm as FontStyle,Oe as FrameEvent,Za as GENERATOR,P as GameObject,B as Gizmos,F0 as GltfExport,j0 as GltfExportBox,zh as GrabPointPlaneConstraint,fa as Gradient,td as Graphic,bp as GraphicRaycaster,_r as Graphics,ec as GridHelper,gb as GridLayoutGroup,jp as GridSnapConstraint,uo as GroundProjectedEnv,ca as GroupActionModel,Su as HideFlags,Pn as HideOnStart,od as HingeJoint,mb as HorizontalLayoutGroup,FC as HorizontalWrapMode,tR as HostData,Mo as HoverAnimation,uc as Image,Ba as ImageReference,Ww as ImageReferenceSerializer,Ab as InheritVelocityModule,Qw as Input,xi as InputEventQueue,ke as InputEvents,t_ as InputField,za as InstanceHandle,Da as InstancingHandler,Cn as InstancingUtil,Ow as InstantiateEvent,St as InstantiateIdProvider,Io as InstantiateOptions,c0 as Interactable,Pd as InternalScreenshotUtils,IR as JoinedRoomResponse,Bp as KeepRotationConstraint,yS as KeepScaleConstraint,PR as KeyEventArgs,Mi as Keyframe,Om as LODGroup,ic as LODModel,Zw as LODsManager,LR as LeftRoomResponse,Ft as Light,fx as LightData,_t as LimitVelocityOverLifetimeModule,pB as LoadingElementOptions,l0 as LogStats,Fi as LogType,i_ as LookAt,Qr as LookAtConstraint,A as MODULES,Jt as MainModule,Rh as MarkerType,id as MaskableGraphic,Ss as MaterialPropertyBlock,Yp as MaterialX,j as Mathf,qs as MeshCollider,Nh as MeshRenderer,Z as MinMaxCurve,ya as MinMaxGradient,_f as NEEDLE_ENGINE_FEATURE_FLAGS,Jc as NEKeyboardEvent,qo as NEPointerEvent,ac as NEToneMappingMode,LP as NeedleButtonElement,_0 as NeedleEngineModelLoader,v_ as NeedleEngineWebComponent,vo as NeedleMenu,xu as NeedlePatchesKey,ey as NeedleXRController,X as NeedleXRSession,Px as NeedleXRSync,$x as NeedleXRUtils,nc as NestedGltf,Vd as NetworkConnection,ko as NetworkedStreamEvents,Wd as NetworkedStreams,Mb as Networking,Mw as NewInstanceModel,ve as NoiseModule,hn as ObjectRaycaster,Ds as ObjectUtils,ga as OffsetConstraint,lu as OneEuroFilter,sf as OneEuroFilterXYZ,pc as OpenURL,fe as OrbitControls,Yl as Outline,rx as OwnershipEvent,ax as OwnershipModel,Ts as PUBLIC_KEY,ua as Padding,Im as ParticleBurst,Ib as ParticleSubEmitter,ld as ParticleSystem,ar as ParticleSystemBaseBehaviour,fn as ParticleSystemRenderer,Am as ParticleSystemShapeType,Ps as PeerHandle,nx as PeerNetworking,Sc as Physics,ab as PhysicsExtension,Et as PhysicsMaterialCombine,ud as PixelationEffect,m0 as PlaneHeightLockConstraint,Vh as PlayAnimationOnClick,Ys as PlayAudioOnClick,kl as PlayableDirector,Pc as PlayerColor,Oi as PlayerState,SC as PlayerStateEvent,tb as PlayerSync,lx as PlayerView,cx as PlayerViewManager,$d as PointerEventData,Bu as PointerType,xx as PostProcessing,dt as PostProcessingEffect,vt as PostProcessingEffectOrder,Ec as PostProcessingHandler,tl as Prefabs,Vl as PreliminaryAction,Hh as PreliminaryTrigger,Tl as PreviewHelper,ol as PrimitiveType,ue as Progress,Kg as PromiseAllWithErrors,Yg as PromiseErrorResult,YC as QualityLevel,ce as RGBAColor,Oc as RapierPhysics,tg as RawImage,Fr as RaycastOptions,LC as Rect,Vn as RectTransform,is as ReflectionProbe,WS as ReflectionProbeUsage,xr as RegisteredAnimationInfo,n0 as RemoteSkybox,jo as RenderTexture,j1 as RenderTextureSerializer,di as Renderer,gx as RendererData,R0 as RendererLightmap,it as Rigidbody,tt as RigidbodyConstraints,oe as RoomEvents,gn as RotationBySpeedModule,Hn as RotationOverLifetimeModule,d0 as ScaleLimitConstraint,Qp as SceneLightSettings,nt as SceneSwitcher,cr as ScreenCapture,us as ScreenSpaceAmbientOcclusion,qn as ScreenSpaceAmbientOcclusionN8,Vm as ScreenSpaceAmbientOcclusionN8QualityMode,Ro as ScrollFollow,Qb as SeeThrough,In as SendQueue,Ff as SerializationContext,Y0 as SetActiveOnClick,em as ShadowCastingMode,yd as ShadowCatcher,Tb as ShapeModule,uw as ShapeOverlapResult,md as SharpeningEffect,Mh as SignalAsset,Zr as SignalReceiver,Pl as SignalReceiverEvent,Ah as SignalTrackHandler,IC as Size,Ri as SizeBySpeedModule,ba as SizeOverLifetimeModule,T0 as SkinnedMeshRenderer,Xm as SmoothFollow,zp as SnapToSurfaceConstraint,Ia as SpatialGrabRaycaster,xd as SpatialHtml,Qm as SpatialTrigger,Oo as SpatialTriggerReceiver,Ym as SpectatorCamera,El as SphereCollider,fy as SphereIntersection,Pa as SplineContainer,Eo as SplineData,S_ as SplineUtils,_n as SplineWalker,rs as Sprite,Gl as SpriteData,ki as SpriteRenderer,Hl as SpriteSheet,mA as StateMachineBehaviour,Xb as StreamEndedEvent,nP as StreamReceivedEvent,Fm as SubEmitterSystem,Yb as SyncedCamera,Xn as SyncedRoom,Fn as SyncedTransform,Z0 as TapGestureTrigger,vm as TeleportTarget,Zb as TestRunner,Jb as TestSimulateUserData,Zt as Text,lt as TextAnchor,ub as TextBuilder,Pm as TextExtension,ei as TextureSheetAnimationModule,Po as TiltShiftEffect,bx as Time,Sp as TimelineActivationTrack,Th as TimelineAnimationTrack,Cs as TimelineAudioTrack,vg as TimelineBuilder,Cp as TimelineControlTrack,xp as TimelineMarkerTrack,Jr as TimelineTrackHandler,va as ToneMappingEffect,Pe as TrackType,$e as TrailModule,qe as TransformData,ka as TransformGizmo,Yt as TriggerBuilder,yr as TriggerModel,k as TypeStore,Gy as UIRaycastUtils,Zh as UIRootComponent,z0 as USDDocument,gt as USDObject,iC as USDWriter,oC as USDZExporter,So as USDZExporter$1,Kl as USDZText,bb as USDZUIExtension,B1 as UriSerializer,Fh as UsageMarker,DR as UserJoinedOrLeftRoomModel,si as VERSION,q0 as VariantAction,Ke as VelocityOverLifetimeModule,pb as VerticalLayoutGroup,BC as VerticalWrapMode,wt as VideoPlayer,mt as ViewBox,Qo as ViewDevice,Sa as Vignette,Gh as VisibilityAction,ps as Voip,gd as Volume,$ as VolumeParameter,zm as VolumeProfile,wR as WaitForFrames,Gw as WaitForPromise,Vf as WaitForSeconds,xs as Watch,kd as WebARCameraBackground,kn as WebARSessionRoot,wm as WebXR,br as WebXRButtonFactory,yc as WebXRImageTracking,vn as WebXRImageTrackingModel,bs as WebXRPlaneTracking,kc as WebXRTrackedImage,fs as XRControllerFollow,as as XRControllerModel,Qi as XRControllerMovement,$n as XRFlag,ag as XRRig,yi as XRState,wo as XRStateFlag,VP as __Ignore,RT as __internalNotifyObjectDestroyed,qc as __nlZsk,sn as __zrAx,oo as activeInHierarchyFieldName,ru as addAttributeChangeCallback,lo as addComponent,BI as addCustomExtensionPlugin,Gr as addNewComponent,wu as addPatch,ip as apply,rA as applyHMRChanges,o1 as applyPrototypeExtensions,Ew as beginListenDestroy,Aw as beginListenInstantiate,Xf as binaryIdentifierCasts,vT as build_scene_functions,Ir as builtinComponentKeyName,__ as calculateProgress01,kE as clearMessages,F1 as colorSerializer,Dw as compareAssociation,wh as componentSerializer,$v as copyTexture,k1 as createMotion,Si as debugNet,al as debugOwner,cC as decompressGpuTexture,Fc as deepClone,Wo as delay,nu as delayForFrames,Du as deserializeObject,Vi as destroy,b1 as destroyComponentInstance,PS as determineMimeTypeFromExtension,Ie as disposeObjectResources,bn as disposeStream,Hc as editorGuidKeyName,Ya as enableSpatialConsole,z1 as eventListSerializer,CB as exportAsGLTF,Py as findByGuid,xl as findObjectOfType,w1 as findObjectsOfType,yy as findResourceUsers,H1 as fitCamera,Vv as fitObjectIntoVolume,Vr as foreachComponent,Ey as foreachComponentEnumerator,HE as forward,jx as generateQRCode,Tw as generateSeed,vi as getBoundingBox,Mv as getCameraController,Fs as getComponent,gh as getComponentInChildren,fh as getComponentInParent,vl as getComponents,wl as getComponentsInChildren,hp as getComponentsInParent,ZS as getFormattedDate,kt as getIconElement,ay as getIconTexture,Vo as getLoader,mh as getOrAddComponent,x as getParam,XE as getParentHierarchyPath,oE as getPath,ER as getPeerOptions,tx as getPeerjsInstance,AT as getResourceUserCount,ux as getSceneData,Iv as getTempColor,_i as getTempQuaternion,z as getTempVector,Dc as getUrlParams,Wv as getVisibleInCustomShadowRendering,Bv as getWorldDirection,uf as getWorldEuler,le as getWorldPosition,Se as getWorldQuaternion,uu as getWorldRotation,Qe as getWorldScale,yp as hasPointerEventComponent,Yv as hideDebugConsole,hC as imageToCanvas,Hw as initAddressableSerializers,U1 as initBuiltinSerializers,wB as initEngine,TP as initPhysics,nS as initVolumeParameterSerializer,Hr as instantiate,BS as invokeLoadedImportPluginHooks,Dx as invokeXRSessionEnd,Lx as invokeXRSessionStart,r1 as isActiveInHierarchy,bl as isActiveSelf,hE as isAndroidDevice,Nv as isAnimationAction,Pu as isComponent,JO as isDebugMode,rE as isDesktop,Wr as isDestroyed,E as isDevEnvironment,aA as isDisposable,MT as isDisposed,xB as isExporting,cw as isGLTFModel,hv as isHostedOnGlitch,Fy as isHotReloadEnabled,oA as isHotReloading,lE as isIPad,Bx as isIconElement,ji as isLocalNetwork,uE as isMacOS,aE as isMobileDevice,dE as isMozillaXR,gE as isQuest,Yx as isResourceTrackingEnabled,mE as isSafari,v2 as isTrackModel,op as isUsingInstancing,pE as isiOS,cE as isiPad,nB as loadAsset,Mp as loadPMREM,g_ as loadSync,pu as logHierarchy,BE as lookAtInverse,zc as lookAtObject,FE as lookAtScreenPoint,tE as makeId,gv as makeIdFromRandomWords,Xi as makeNameSafe,a1 as markAsInstancedRendered,fE as microphonePermissionsGranted,ZO as nameof,dv as nameofFactory,BR as needle,Go as oMxKl,$y as objectSerializer,Ix as offBeforeXRSession,Ax as offXRSessionEnd,Tx as offXRSessionStart,lA as on,zM as onAfterRender,FM as onBeforeRender,dT as onBeforeXRSession,jM as onClear,BM as onDestroy,Pf as onInitialized,Eu as onStart,eR as onSyncDestroy,Rw as onSyncInstantiate,vw as onUpdate,sy as onXRSessionEnd,Gu as onXRSessionStart,EP as parseSync,Hv as placeOnSurface,gf as postprocessFBXMaterials,e2 as prefix,uv as pushState,iE as randomNumber,Qf as registerBinaryType,Ku as registerComponent,k0 as registerComponentExtension,yn as registerCustomEffectType,O0 as registerExportExtensions,Zp as registerExtensions,x1 as registerHotReloadType,gw as registerLoader,Iw as registerPrefabProvider,Cy as registerPrototypeExtensions,bf as registerType,yv as relativePathPrefix,_v as removeAttributeChangeCallback,By as removeComponent,FI as removeCustomImportExtensionType,RM as removePatch,to as resolveUrl,fv as sanitizeString,wP as saveImage,j3 as screenshot,c_ as screenshot2,Af as sendDestroyed,u as serializable,zw as serializeObject,Ze as serializeable,dh as setActive,xv as setAllowBalloonMessages,xE as setAllowOverlayMessages,hu as setAutoFitEnabled,rf as setCameraController,c1 as setDestroyed,TE as setDevEnvironment,Zx as setDisposable,_l as setDontDestroy,qg as setOrAddParamsToUrl,eE as setParam,jc as setParamWithoutReload,MR as setPeerOptions,ET as setResourceTrackingEnabled,Xg as setState,mf as setVisibleInCustomShadowRendering,pf as setWorldEuler,zi as setWorldPosition,Er as setWorldPositionXYZ,An as setWorldQuaternion,df as setWorldQuaternionXYZW,Uv as setWorldRotation,Uc as setWorldRotationXYZ,Qa as setWorldScale,Ka as showBalloonError,Ae as showBalloonMessage,ge as showBalloonWarning,ff as showDebugConsole,Tv as slerp,Yc as syncDestroy,t0 as syncField,If as syncInstantiate,QE as textureToCanvas,bv as toSourceId,Jw as tryCastBinary,OS as tryDetermineMimetypeFromBinary,kS as tryDetermineMimetypeFromURL,Bc as tryFindObject,ex as tryGetGuid,S1 as unregisterHotReloadType,nR as unregisterPrefabProvider,Qg as unwatchWrite,Rv as useForAutoFit,Fe as validate,su as watchWrite};
1753
+ `),Ti&&this._onCreateEffectsDebug(this._composer,s)}createPassForMergeableEffects(e,t,i,n){if(e.length>0){const s=new A.POSTPROCESSING.MODULE.EffectPass(i,...e);s.name=e.map(r=>r.name).join(", "),s.mainScene=n,s.enabled=!0,s.renderToScreen=!1,t.addPass(s),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) \u2192",r),e.passes.length=0;for(const a of r)a.enabled=!0,a.renderToScreen=!1,e.addPass(a)}const s=this.context.menu;if(s&&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 c=document.createElement("option");c.innerText=l.name,c.value=`${e.passes.indexOf(l)}`,c.title=l.name,r.appendChild(c)}s.appendChild(r),this._menuEntry=r,r.addEventListener("change",()=>{const l=Array.from(r.selectedOptions).map(c=>parseInt(c.value));l.length===1&&l[0]===-1?this._passIndices=null:this._passIndices=l,this.applyEffects(this.context)})}}}}const OB=Object.freeze(Object.defineProperty({__proto__:null,PostProcessingHandler:Ec},Symbol.toStringTag,{value:"Module"}));class vg{_name;_tracks=[];_currentTrack=null;_pendingSignals=[];_idProvider;constructor(e,t){this._name=e,this._idProvider=new St(t??Date.now())}static create(e,t){return new vg(e??"Timeline",t)}animationTrack(e,t){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,Pe.Animation,t??null),this}audioTrack(e,t,i){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,Pe.Audio,t??null),this._currentTrack.volume=i,this}activationTrack(e,t){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,Pe.Activation,t??null),this}controlTrack(e){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,Pe.Control,null),this}signalTrack(e,t){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,Pe.Signal,t??null),this}markerTrack(e){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,Pe.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 Pe.Animation:{let n;if(e instanceof Gt)n=e;else{const h=Array.isArray(e)?e:[e],d=i.outputs[0],p=d instanceof M?d:d!=null&&"gameObject"in d?d.gameObject:void 0;n=vh(h,p)}const s=t??{},r=s.duration??n.duration,a=s.start??i.cursor,l=a+r,c={start:a,end:l,duration:r,timeScale:s.speed??1,clipIn:s.clipIn??0,easeInDuration:s.easeIn??0,easeOutDuration:s.easeOut??0,preExtrapolationMode:s.preExtrapolation??rt.None,postExtrapolationMode:s.postExtrapolation??rt.None,reversed:s.reversed,asset:{clip:n,loop:s.loop??!1,duration:n.duration,removeStartOffset:s.removeStartOffset??!1}};i.clips.push(c),i.cursor=l;break}case Pe.Audio:{const n=e,s=t??{},r=s.duration,a=s.start??i.cursor,l=a+r,c={start:a,end:l,duration:r,timeScale:s.speed??1,clipIn:0,easeInDuration:s.easeIn??0,easeOutDuration:s.easeOut??0,preExtrapolationMode:rt.None,postExtrapolationMode:rt.None,asset:{clip:n,loop:s.loop??!1,volume:s.volume??1}};i.clips.push(c),i.cursor=l;break}case Pe.Activation:{const n=e,s=n.start??i.cursor,r=s+n.duration,a={start:s,end:r,duration:n.duration,timeScale:1,clipIn:0,easeInDuration:n.easeIn??0,easeOutDuration:n.easeOut??0,preExtrapolationMode:rt.None,postExtrapolationMode:rt.None,asset:{}};i.clips.push(a),i.cursor=r;break}case Pe.Control:{const n=e,s=t??{},r=s.start??i.cursor,a=s.duration,l=r+a,c={start:r,end:l,duration:a,timeScale:1,clipIn:0,easeInDuration:0,easeOutDuration:0,preExtrapolationMode:rt.None,postExtrapolationMode:rt.None,asset:{sourceObject:n,controlActivation:s.controlActivation??!0,updateDirector:s.updateDirector??!0}};i.clips.push(c),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!==Pe.Signal&&this._currentTrack.type!==Pe.Marker)throw new Error(`TimelineBuilder: .marker() is only supported on signal and marker tracks, not "${this._currentTrack.type}"`);const n={type:Rh.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!==Pe.Signal&&this._currentTrack.type!==Pe.Marker)throw new Error(`TimelineBuilder: .signal() is only supported on signal and marker tracks, not "${this._currentTrack.type}"`);const n=this._idProvider.generateUUID(),s=this._tracks.indexOf(this._currentTrack),r={type:Rh.Signal,time:e,retroActive:i?.retroActive??!1,emitOnce:i?.emitOnce??!1,asset:n};return this._currentTrack.markers.push(r),this._pendingSignals.push({trackIndex:s,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!==Pe.Animation)throw new Error("TimelineBuilder: .track() is only supported on animation tracks");return this._currentTrack.inlineTracks.push(zy(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=P.getComponent(i,Zr);n||(n=P.addComponent(i,Zr)),n.events||(n.events=[]);for(const s of this._pendingSignals){const r=new Mh;r.guid=s.guid;const a=new Pl;a.signal=r,a.reaction=new se([s.callback]),n.events.push(a);const l=t.tracks[s.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 M?t:t!=null&&"gameObject"in t?t.gameObject:void 0,n=vh(e.inlineTracks,i),s=e.cursor,r=n.duration,a={start:s,end:s+r,duration:r,timeScale:1,clipIn:0,easeInDuration:0,easeOutDuration:0,preExtrapolationMode:rt.None,postExtrapolationMode:rt.None,asset:{clip:n,loop:!1,duration:n.duration,removeStartOffset:!1}};e.clips.push(a),e.cursor=s+r,e.inlineTracks=[]}}class VP{}const EB=Object.freeze(Object.defineProperty({__proto__:null,ActionBuilder:ye,ActionCollection:_C,ActionModel:Ai,AlignmentConstraint:jh,Animation:Xt,AnimationBuilder:yg,AnimationCurve:sd,AnimationExtension:pm,Animator:Ot,AnimatorController:co,Antialiasing:cd,Attractor:rc,AudioExtension:La,AudioListener:Zo,AudioSource:Gi,Avatar:Ks,AvatarMarker:ft,AxesHelper:Ol,AxisRotationConstraint:p0,BaseUIComponent:xn,BasicIKConstraint:s0,BehaviorExtension:rb,BehaviorModel:Wt,BloomEffect:Nm,BoxCollider:Lp,BoxGizmo:ma,BoxHelperComponent:Vt,Button:ms,CallInfo:Ns,Camera:ci,CameraTargetReachedEvent:Eh,Canvas:Zl,CanvasGroup:nr,CapsuleCollider:Jo,ChangeMaterialOnClick:Q0,ChangeTransformOnClick:ha,CharacterController:ta,CharacterControllerInput:ts,ChromaticAberration:hd,ClickThrough:og,ColorAdjustments:lr,ColorBySpeedModule:oc,ColorOverLifetimeModule:Lm,ContactShadows:Bh,CursorFollow:Ea,CustomBranding:pa,Deletable:h0,DeleteBox:wr,DepthOfField:Gn,DeviceFlag:Dp,DocumentExtension:WP,DragControls:sa,DragProfile:Up,DropListener:os,Duplicatable:I0,EffectWrapper:dd,EmissionModule:ds,EmphasizeOnClick:Wl,EnvironmentScene:kp,EventList:se,EventListEvent:Uy,EventSystem:bi,EventTrigger:nm,FieldWithDefault:VS,FixedJoint:Cb,FixedRotationAxesConstraint:_S,Fog:Jl,GltfExport:F0,GltfExportBox:j0,GrabPointPlaneConstraint:zh,Gradient:fa,Graphic:td,GraphicRaycaster:bp,GridHelper:ec,GridLayoutGroup:gb,GridSnapConstraint:jp,GroundProjectedEnv:uo,GroupActionModel:ca,HideOnStart:Pn,HingeJoint:od,HorizontalLayoutGroup:mb,get HoverAnimation(){return Mo},Image:uc,InheritVelocityModule:Ab,InputField:t_,InstanceHandle:za,InstancingHandler:Da,Interactable:c0,KeepRotationConstraint:Bp,KeepScaleConstraint:yS,Keyframe:Mi,LODGroup:Om,LODModel:ic,Light:Ft,LimitVelocityOverLifetimeModule:_t,LogStats:l0,LookAt:i_,LookAtConstraint:Qr,MainModule:Jt,MaskableGraphic:id,MeshCollider:qs,MeshRenderer:Nh,MinMaxCurve:Z,MinMaxGradient:ya,NeedleMenu:vo,NestedGltf:nc,Networking:Mb,NoiseModule:ve,ObjectRaycaster:hn,OffsetConstraint:ga,OpenURL:pc,OrbitControls:fe,Outline:Yl,Padding:ua,ParticleBurst:Im,ParticleSubEmitter:Ib,ParticleSystem:ld,ParticleSystemRenderer:fn,PhysicsExtension:ab,PixelationEffect:ud,PlaneHeightLockConstraint:m0,PlayAnimationOnClick:Vh,PlayAudioOnClick:Ys,PlayableDirector:kl,PlayerColor:Pc,PointerEventData:$d,PostProcessingHandler:Ec,PreliminaryAction:Vl,PreliminaryTrigger:Hh,RawImage:tg,Rect:LC,RectTransform:Vn,ReflectionProbe:is,RegisteredAnimationInfo:xr,RemoteSkybox:n0,Renderer:di,RendererLightmap:R0,Rigidbody:it,RotationBySpeedModule:gn,RotationOverLifetimeModule:Hn,ScaleLimitConstraint:d0,SceneSwitcher:nt,ScreenCapture:cr,ScreenSpaceAmbientOcclusion:us,ScreenSpaceAmbientOcclusionN8:qn,ScrollFollow:Ro,SeeThrough:Qb,SetActiveOnClick:Y0,ShadowCatcher:yd,ShapeModule:Tb,SharpeningEffect:md,SignalAsset:Mh,SignalReceiver:Zr,SignalReceiverEvent:Pl,SignalTrackHandler:Ah,Size:IC,SizeBySpeedModule:Ri,SizeOverLifetimeModule:ba,SkinnedMeshRenderer:T0,SmoothFollow:Xm,SnapToSurfaceConstraint:zp,SpatialGrabRaycaster:Ia,SpatialHtml:xd,SpatialTrigger:Qm,SpatialTriggerReceiver:Oo,SpectatorCamera:Ym,SphereCollider:El,SplineContainer:Pa,SplineData:Eo,SplineWalker:_n,Sprite:rs,SpriteData:Gl,SpriteRenderer:ki,SpriteSheet:Hl,SubEmitterSystem:Fm,SyncedCamera:Yb,SyncedRoom:Xn,SyncedTransform:Fn,TapGestureTrigger:Z0,TeleportTarget:vm,TestRunner:Zb,TestSimulateUserData:Jb,Text:Zt,TextBuilder:ub,TextExtension:Pm,TextureSheetAnimationModule:ei,TiltShiftEffect:Po,TimelineActivationTrack:Sp,TimelineAnimationTrack:Th,TimelineAudioTrack:Cs,TimelineBuilder:vg,TimelineControlTrack:Cp,TimelineMarkerTrack:xp,ToneMappingEffect:va,TrailModule:$e,TransformData:qe,TransformGizmo:ka,TriggerBuilder:Yt,TriggerModel:yr,UIRaycastUtils:Gy,UIRootComponent:Zh,USDZExporter:So,USDZText:Kl,USDZUIExtension:bb,UsageMarker:Fh,VariantAction:q0,VelocityOverLifetimeModule:Ke,VerticalLayoutGroup:pb,VideoPlayer:wt,get ViewBox(){return mt},Vignette:Sa,VisibilityAction:Gh,Voip:ps,Volume:gd,VolumeParameter:$,VolumeProfile:zm,WebARCameraBackground:kd,WebARSessionRoot:kn,WebXR:wm,WebXRImageTracking:yc,WebXRImageTrackingModel:vn,WebXRPlaneTracking:bs,WebXRTrackedImage:kc,XRControllerFollow:fs,XRControllerModel:as,XRControllerMovement:Qi,XRFlag:$n,XRRig:ag,XRState:yi,__Ignore:VP},Symbol.toStringTag,{value:"Module"}));var S_;(o=>{function e(t,i=!1,n=.75){const s=new Pa,r=1-j.clamp(n,0,1);return t.forEach((a,l)=>{const c=new v;l<t.length-1?c.subVectors(t[l+1],a).normalize().multiplyScalar(r):i&&t.length>1&&c.subVectors(t[0],a).normalize().multiplyScalar(r);const h=new Eo;h.position.copy(a),h.tangentIn.copy(c),h.tangentOut.copy(c),s.addKnot(h)}),s.closed=i,s}o.createFromPoints=e})(S_||(S_={}));class MB extends XO{constructor(){super(new Worker(URL.createObjectURL(new Blob([`import '${new URL("./generateMeshBVH.worker-DiCnZlf3.js",import.meta.url).toString()}';`],{type:"text/javascript"})),{type:"module"})),this.name="GenerateMeshBVHWorker"}runTask(e,t,i={}){return new Promise((n,s)=>{if(t.getAttribute("position").isInterleavedBufferAttribute||t.index&&t.index.isInterleavedBufferAttribute)throw new Error("GenerateMeshBVHWorker: InterleavedBufferAttribute are not supported for the geometry attributes.");e.onerror=c=>{s(new Error(`[GenerateMeshBVHWorker] ${c.message||"Could not load worker."}`))},e.onmessage=c=>{const{data:h}=c;if(h.error)s(new Error(h.error)),e.onmessage=null;else if(h.serialized){const{serialized:d,position:p}=h,m=QO.deserialize(d,t,{setIndex:!1}),g=Object.assign({setBoundingBox:!0},i);if(t.attributes.position.array=p,d.index)if(t.index)t.index.array=d.index;else{const y=new ot(d.index,1,!1);t.setIndex(y)}g.setBoundingBox&&(t.boundingBox=m.getBoundingBox(new ii)),i.onProgress&&i.onProgress(h.progress),n(m),e.onmessage=null}else i.onProgress&&i.onProgress(h.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(c=>c.buffer).filter(c=>typeof SharedArrayBuffer>"u"||!(c instanceof SharedArrayBuffer)))})}}const RB=Object.freeze(Object.defineProperty({__proto__:null,GenerateMeshBVHWorker:MB},Symbol.toStringTag,{value:"Module"}));export{Cu as $componentName,IM as $physicsKey,sn as $uxbFepO,ye as ActionBuilder,_C as ActionCollection,Ai as ActionModel,$w as Addressables,jh as AlignmentConstraint,cl as AmbientMode,Xt as Animation,yg as AnimationBuilder,sd as AnimationCurve,pm as AnimationExtension,oi as AnimationUtils,Ot as Animator,Ci as AnimatorConditionMode,co as AnimatorController,bg as AnimatorControllerBuilder,Xr as AnimatorControllerParameterType,_h as AnimatorStateInfo,cd as Antialiasing,Yn as Application,Xx as AssetDatabase,ie as AssetReference,rc as Attractor,Ny as AudioClip,La as AudioExtension,Zo as AudioListener,Y1 as AudioRolloffMode,Gi as AudioSource,Ks as Avatar,ft as AvatarMarker,Sl as Axes,Ol as AxesHelper,p0 as AxisRotationConstraint,Vc as BUILD_TIME,xn as BaseUIComponent,s0 as BasicIKConstraint,rb as BehaviorExtension,Wt as BehaviorModel,Lr as BlobStorage,Nm as BloomEffect,Lp as BoxCollider,ma as BoxGizmo,Vt as BoxHelperComponent,ms as Button,Sn as ButtonsFactory,oP as CallDirection,Ns as CallInfo,ci as Camera,Eh as CameraTargetReachedEvent,Zl as Canvas,nr as CanvasGroup,Jo as CapsuleCollider,Q0 as ChangeMaterialOnClick,ha as ChangeTransformOnClick,ta as CharacterController,ts as CharacterControllerInput,hd as ChromaticAberration,Bi as CircularBuffer,Kr as ClearFlags,og as ClickThrough,rt as ClipExtrapolation,qi as Collider,dw as Collision,fp as CollisionDetectionMode,lr as ColorAdjustments,oc as ColorBySpeedModule,Lm as ColorOverLifetimeModule,cA as Component,R as Component$1,vu as ComponentLifecycleEvents,EB as Components,sx as ConnectionEvents,hw as ContactPoint,Bh as ContactShadows,U as Context,wT as ContextArgs,de as ContextEvent,he as ContextRegistry,Ea as CursorFollow,pa as CustomBranding,je as CustomShader,Wu as DefaultReflectionMode,h0 as Deletable,wr as DeleteBox,Gn as DepthOfField,JC as DepthOfFieldMode,Dp as DeviceFlag,I as DeviceUtilities,Z1 as DirectorWrapMode,dp as DisposableStore,WP as DocumentExtension,sa as DragControls,f0 as DragMode,Up as DragProfile,os as DropListener,I0 as Duplicatable,dd as EffectWrapper,ds as EmissionModule,Wl as EmphasizeOnClick,Gd as EngineLoadingView,kp as EnvironmentScene,Wf as EventBus,se as EventList,Uy as EventListEvent,bi as EventSystem,nm as EventTrigger,VS as FieldWithDefault,Fa as FileReference,Vw as FileReferenceSerializer,pI as FileSpawnModel,CS as File_Event,Cb as FixedJoint,_S as FixedRotationAxesConstraint,Jl as Fog,Cm as FontStyle,Oe as FrameEvent,Za as GENERATOR,P as GameObject,B as Gizmos,F0 as GltfExport,j0 as GltfExportBox,zh as GrabPointPlaneConstraint,fa as Gradient,td as Graphic,bp as GraphicRaycaster,_r as Graphics,ec as GridHelper,gb as GridLayoutGroup,jp as GridSnapConstraint,uo as GroundProjectedEnv,ca as GroupActionModel,Su as HideFlags,Pn as HideOnStart,od as HingeJoint,mb as HorizontalLayoutGroup,FC as HorizontalWrapMode,tR as HostData,Mo as HoverAnimation,uc as Image,Ba as ImageReference,Ww as ImageReferenceSerializer,Ab as InheritVelocityModule,Qw as Input,xi as InputEventQueue,ke as InputEvents,t_ as InputField,za as InstanceHandle,Da as InstancingHandler,Cn as InstancingUtil,Ow as InstantiateEvent,St as InstantiateIdProvider,Io as InstantiateOptions,c0 as Interactable,Pd as InternalScreenshotUtils,IR as JoinedRoomResponse,Bp as KeepRotationConstraint,yS as KeepScaleConstraint,PR as KeyEventArgs,Mi as Keyframe,Om as LODGroup,ic as LODModel,Zw as LODsManager,LR as LeftRoomResponse,Ft as Light,fx as LightData,_t as LimitVelocityOverLifetimeModule,pB as LoadingElementOptions,l0 as LogStats,Fi as LogType,i_ as LookAt,Qr as LookAtConstraint,A as MODULES,Jt as MainModule,Rh as MarkerType,id as MaskableGraphic,Ss as MaterialPropertyBlock,Yp as MaterialX,j as Mathf,qs as MeshCollider,Nh as MeshRenderer,Z as MinMaxCurve,ya as MinMaxGradient,_f as NEEDLE_ENGINE_FEATURE_FLAGS,Jc as NEKeyboardEvent,qo as NEPointerEvent,ac as NEToneMappingMode,LP as NeedleButtonElement,_0 as NeedleEngineModelLoader,v_ as NeedleEngineWebComponent,vo as NeedleMenu,xu as NeedlePatchesKey,ey as NeedleXRController,X as NeedleXRSession,Px as NeedleXRSync,$x as NeedleXRUtils,nc as NestedGltf,Vd as NetworkConnection,ko as NetworkedStreamEvents,Wd as NetworkedStreams,Mb as Networking,Mw as NewInstanceModel,ve as NoiseModule,hn as ObjectRaycaster,Ds as ObjectUtils,ga as OffsetConstraint,lu as OneEuroFilter,sf as OneEuroFilterXYZ,pc as OpenURL,fe as OrbitControls,Yl as Outline,rx as OwnershipEvent,ax as OwnershipModel,Ts as PUBLIC_KEY,ua as Padding,Im as ParticleBurst,Ib as ParticleSubEmitter,ld as ParticleSystem,ar as ParticleSystemBaseBehaviour,fn as ParticleSystemRenderer,Am as ParticleSystemShapeType,Ps as PeerHandle,nx as PeerNetworking,Sc as Physics,ab as PhysicsExtension,Et as PhysicsMaterialCombine,ud as PixelationEffect,m0 as PlaneHeightLockConstraint,Vh as PlayAnimationOnClick,Ys as PlayAudioOnClick,kl as PlayableDirector,Pc as PlayerColor,Oi as PlayerState,SC as PlayerStateEvent,tb as PlayerSync,lx as PlayerView,cx as PlayerViewManager,$d as PointerEventData,Bu as PointerType,xx as PostProcessing,dt as PostProcessingEffect,vt as PostProcessingEffectOrder,Ec as PostProcessingHandler,tl as Prefabs,Vl as PreliminaryAction,Hh as PreliminaryTrigger,Tl as PreviewHelper,ol as PrimitiveType,ue as Progress,Kg as PromiseAllWithErrors,Yg as PromiseErrorResult,YC as QualityLevel,ce as RGBAColor,Oc as RapierPhysics,tg as RawImage,Fr as RaycastOptions,LC as Rect,Vn as RectTransform,is as ReflectionProbe,WS as ReflectionProbeUsage,xr as RegisteredAnimationInfo,n0 as RemoteSkybox,jo as RenderTexture,j1 as RenderTextureSerializer,di as Renderer,gx as RendererData,R0 as RendererLightmap,it as Rigidbody,tt as RigidbodyConstraints,oe as RoomEvents,gn as RotationBySpeedModule,Hn as RotationOverLifetimeModule,d0 as ScaleLimitConstraint,Qp as SceneLightSettings,nt as SceneSwitcher,cr as ScreenCapture,us as ScreenSpaceAmbientOcclusion,qn as ScreenSpaceAmbientOcclusionN8,Vm as ScreenSpaceAmbientOcclusionN8QualityMode,Ro as ScrollFollow,Qb as SeeThrough,In as SendQueue,Ff as SerializationContext,Y0 as SetActiveOnClick,em as ShadowCastingMode,yd as ShadowCatcher,Tb as ShapeModule,uw as ShapeOverlapResult,md as SharpeningEffect,Mh as SignalAsset,Zr as SignalReceiver,Pl as SignalReceiverEvent,Ah as SignalTrackHandler,IC as Size,Ri as SizeBySpeedModule,ba as SizeOverLifetimeModule,T0 as SkinnedMeshRenderer,Xm as SmoothFollow,zp as SnapToSurfaceConstraint,Ia as SpatialGrabRaycaster,xd as SpatialHtml,Qm as SpatialTrigger,Oo as SpatialTriggerReceiver,Ym as SpectatorCamera,El as SphereCollider,fy as SphereIntersection,Pa as SplineContainer,Eo as SplineData,S_ as SplineUtils,_n as SplineWalker,rs as Sprite,Gl as SpriteData,ki as SpriteRenderer,Hl as SpriteSheet,mA as StateMachineBehaviour,Xb as StreamEndedEvent,nP as StreamReceivedEvent,Fm as SubEmitterSystem,Yb as SyncedCamera,Xn as SyncedRoom,Fn as SyncedTransform,Z0 as TapGestureTrigger,vm as TeleportTarget,Zb as TestRunner,Jb as TestSimulateUserData,Zt as Text,lt as TextAnchor,ub as TextBuilder,Pm as TextExtension,ei as TextureSheetAnimationModule,Po as TiltShiftEffect,bx as Time,Sp as TimelineActivationTrack,Th as TimelineAnimationTrack,Cs as TimelineAudioTrack,vg as TimelineBuilder,Cp as TimelineControlTrack,xp as TimelineMarkerTrack,Jr as TimelineTrackHandler,va as ToneMappingEffect,Pe as TrackType,$e as TrailModule,qe as TransformData,ka as TransformGizmo,Yt as TriggerBuilder,yr as TriggerModel,k as TypeStore,Gy as UIRaycastUtils,Zh as UIRootComponent,z0 as USDDocument,gt as USDObject,iC as USDWriter,oC as USDZExporter,So as USDZExporter$1,Kl as USDZText,bb as USDZUIExtension,B1 as UriSerializer,Fh as UsageMarker,DR as UserJoinedOrLeftRoomModel,si as VERSION,q0 as VariantAction,Ke as VelocityOverLifetimeModule,pb as VerticalLayoutGroup,BC as VerticalWrapMode,wt as VideoPlayer,mt as ViewBox,Qo as ViewDevice,Sa as Vignette,Gh as VisibilityAction,ps as Voip,gd as Volume,$ as VolumeParameter,zm as VolumeProfile,wR as WaitForFrames,Gw as WaitForPromise,Vf as WaitForSeconds,xs as Watch,kd as WebARCameraBackground,kn as WebARSessionRoot,wm as WebXR,br as WebXRButtonFactory,yc as WebXRImageTracking,vn as WebXRImageTrackingModel,bs as WebXRPlaneTracking,kc as WebXRTrackedImage,fs as XRControllerFollow,as as XRControllerModel,Qi as XRControllerMovement,$n as XRFlag,ag as XRRig,yi as XRState,wo as XRStateFlag,qc as _$EHSDVcNK,Go as _$VfAckLjB,VP as __Ignore,RT as __internalNotifyObjectDestroyed,oo as activeInHierarchyFieldName,ru as addAttributeChangeCallback,lo as addComponent,BI as addCustomExtensionPlugin,Gr as addNewComponent,wu as addPatch,ip as apply,rA as applyHMRChanges,o1 as applyPrototypeExtensions,Ew as beginListenDestroy,Aw as beginListenInstantiate,Xf as binaryIdentifierCasts,vT as build_scene_functions,Ir as builtinComponentKeyName,__ as calculateProgress01,kE as clearMessages,F1 as colorSerializer,Dw as compareAssociation,wh as componentSerializer,$v as copyTexture,k1 as createMotion,Si as debugNet,al as debugOwner,cC as decompressGpuTexture,Fc as deepClone,Wo as delay,nu as delayForFrames,Du as deserializeObject,Vi as destroy,b1 as destroyComponentInstance,PS as determineMimeTypeFromExtension,Ie as disposeObjectResources,bn as disposeStream,Hc as editorGuidKeyName,Ya as enableSpatialConsole,z1 as eventListSerializer,CB as exportAsGLTF,Py as findByGuid,xl as findObjectOfType,w1 as findObjectsOfType,yy as findResourceUsers,H1 as fitCamera,Vv as fitObjectIntoVolume,Vr as foreachComponent,Ey as foreachComponentEnumerator,HE as forward,jx as generateQRCode,Tw as generateSeed,vi as getBoundingBox,Mv as getCameraController,Fs as getComponent,gh as getComponentInChildren,fh as getComponentInParent,vl as getComponents,wl as getComponentsInChildren,hp as getComponentsInParent,ZS as getFormattedDate,kt as getIconElement,ay as getIconTexture,Vo as getLoader,mh as getOrAddComponent,x as getParam,XE as getParentHierarchyPath,oE as getPath,ER as getPeerOptions,tx as getPeerjsInstance,AT as getResourceUserCount,ux as getSceneData,Iv as getTempColor,_i as getTempQuaternion,z as getTempVector,Dc as getUrlParams,Wv as getVisibleInCustomShadowRendering,Bv as getWorldDirection,uf as getWorldEuler,le as getWorldPosition,Se as getWorldQuaternion,uu as getWorldRotation,Qe as getWorldScale,yp as hasPointerEventComponent,Yv as hideDebugConsole,hC as imageToCanvas,Hw as initAddressableSerializers,U1 as initBuiltinSerializers,wB as initEngine,TP as initPhysics,nS as initVolumeParameterSerializer,Hr as instantiate,BS as invokeLoadedImportPluginHooks,Dx as invokeXRSessionEnd,Lx as invokeXRSessionStart,r1 as isActiveInHierarchy,bl as isActiveSelf,hE as isAndroidDevice,Nv as isAnimationAction,Pu as isComponent,JO as isDebugMode,rE as isDesktop,Wr as isDestroyed,E as isDevEnvironment,aA as isDisposable,MT as isDisposed,xB as isExporting,cw as isGLTFModel,hv as isHostedOnGlitch,Fy as isHotReloadEnabled,oA as isHotReloading,lE as isIPad,Bx as isIconElement,ji as isLocalNetwork,uE as isMacOS,aE as isMobileDevice,dE as isMozillaXR,gE as isQuest,Yx as isResourceTrackingEnabled,mE as isSafari,v2 as isTrackModel,op as isUsingInstancing,pE as isiOS,cE as isiPad,nB as loadAsset,Mp as loadPMREM,g_ as loadSync,pu as logHierarchy,BE as lookAtInverse,zc as lookAtObject,FE as lookAtScreenPoint,tE as makeId,gv as makeIdFromRandomWords,Xi as makeNameSafe,a1 as markAsInstancedRendered,fE as microphonePermissionsGranted,ZO as nameof,dv as nameofFactory,BR as needle,$y as objectSerializer,Ix as offBeforeXRSession,Ax as offXRSessionEnd,Tx as offXRSessionStart,lA as on,zM as onAfterRender,FM as onBeforeRender,dT as onBeforeXRSession,jM as onClear,BM as onDestroy,Pf as onInitialized,Eu as onStart,eR as onSyncDestroy,Rw as onSyncInstantiate,vw as onUpdate,sy as onXRSessionEnd,Gu as onXRSessionStart,EP as parseSync,Hv as placeOnSurface,gf as postprocessFBXMaterials,e2 as prefix,uv as pushState,iE as randomNumber,Qf as registerBinaryType,Ku as registerComponent,k0 as registerComponentExtension,yn as registerCustomEffectType,O0 as registerExportExtensions,Zp as registerExtensions,x1 as registerHotReloadType,gw as registerLoader,Iw as registerPrefabProvider,Cy as registerPrototypeExtensions,bf as registerType,yv as relativePathPrefix,_v as removeAttributeChangeCallback,By as removeComponent,FI as removeCustomImportExtensionType,RM as removePatch,to as resolveUrl,fv as sanitizeString,wP as saveImage,j3 as screenshot,c_ as screenshot2,Af as sendDestroyed,u as serializable,zw as serializeObject,Ze as serializeable,dh as setActive,xv as setAllowBalloonMessages,xE as setAllowOverlayMessages,hu as setAutoFitEnabled,rf as setCameraController,c1 as setDestroyed,TE as setDevEnvironment,Zx as setDisposable,_l as setDontDestroy,qg as setOrAddParamsToUrl,eE as setParam,jc as setParamWithoutReload,MR as setPeerOptions,ET as setResourceTrackingEnabled,Xg as setState,mf as setVisibleInCustomShadowRendering,pf as setWorldEuler,zi as setWorldPosition,Er as setWorldPositionXYZ,An as setWorldQuaternion,df as setWorldQuaternionXYZW,Uv as setWorldRotation,Uc as setWorldRotationXYZ,Qa as setWorldScale,Ka as showBalloonError,Ae as showBalloonMessage,ge as showBalloonWarning,ff as showDebugConsole,Tv as slerp,Yc as syncDestroy,t0 as syncField,If as syncInstantiate,QE as textureToCanvas,bv as toSourceId,Jw as tryCastBinary,OS as tryDetermineMimetypeFromBinary,kS as tryDetermineMimetypeFromURL,Bc as tryFindObject,ex as tryGetGuid,S1 as unregisterHotReloadType,nR as unregisterPrefabProvider,Qg as unwatchWrite,Rv as useForAutoFit,Fe as validate,su as watchWrite};