@needle-tools/engine 5.1.7 → 5.1.8

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 (55) hide show
  1. package/CHANGELOG.md +3 -0
  2. package/components.needle.json +1 -1
  3. package/dist/{needle-engine.bundle-DT6F1AXh.js → needle-engine.bundle-CaD5rOJ0.js} +10 -10
  4. package/dist/{needle-engine.bundle-1QN--joB.umd.cjs → needle-engine.bundle-D8gP8Nd0.umd.cjs} +3 -3
  5. package/dist/{needle-engine.bundle-DlX4Rcl_.min.js → needle-engine.bundle-X7Y4A-EO.min.js} +2 -2
  6. package/dist/needle-engine.d.ts +45 -15
  7. package/dist/needle-engine.js +277 -277
  8. package/dist/needle-engine.min.js +1 -1
  9. package/dist/needle-engine.umd.cjs +1 -1
  10. package/lib/engine/api.d.ts +1 -1
  11. package/lib/engine/api.js +1 -1
  12. package/lib/engine/api.js.map +1 -1
  13. package/lib/engine/engine_init.js +2 -2
  14. package/lib/engine/engine_init.js.map +1 -1
  15. package/lib/engine/engine_license.d.ts +7 -7
  16. package/lib/engine/engine_license.js +71 -71
  17. package/lib/engine/engine_license.js.map +1 -1
  18. package/lib/engine/engine_networking_blob.js +3 -3
  19. package/lib/engine/engine_networking_blob.js.map +1 -1
  20. package/lib/engine/engine_utils_qrcode.js +2 -2
  21. package/lib/engine/engine_utils_qrcode.js.map +1 -1
  22. package/lib/engine/webcomponents/needle menu/needle-menu-spatial.js +2 -2
  23. package/lib/engine/webcomponents/needle menu/needle-menu-spatial.js.map +1 -1
  24. package/lib/engine/webcomponents/needle menu/needle-menu.js +5 -5
  25. package/lib/engine/webcomponents/needle menu/needle-menu.js.map +1 -1
  26. package/lib/engine/webcomponents/needle-engine.js +2 -2
  27. package/lib/engine/webcomponents/needle-engine.js.map +1 -1
  28. package/lib/engine/webcomponents/needle-engine.loading.js +2 -2
  29. package/lib/engine/webcomponents/needle-engine.loading.js.map +1 -1
  30. package/lib/engine/xr/TempXRContext.js +2 -2
  31. package/lib/engine/xr/TempXRContext.js.map +1 -1
  32. package/lib/engine-components/export/usdz/USDZExporter.js +4 -4
  33. package/lib/engine-components/export/usdz/USDZExporter.js.map +1 -1
  34. package/lib/engine-components/webxr/TeleportTarget.d.ts +21 -8
  35. package/lib/engine-components/webxr/TeleportTarget.js +21 -8
  36. package/lib/engine-components/webxr/TeleportTarget.js.map +1 -1
  37. package/lib/engine-components/webxr/controllers/XRControllerMovement.d.ts +18 -1
  38. package/lib/engine-components/webxr/controllers/XRControllerMovement.js +18 -1
  39. package/lib/engine-components/webxr/controllers/XRControllerMovement.js.map +1 -1
  40. package/package.json +1 -1
  41. package/plugins/common/license.js +4 -4
  42. package/plugins/vite/license.js +4 -4
  43. package/src/engine/api.ts +1 -1
  44. package/src/engine/engine_init.ts +2 -2
  45. package/src/engine/engine_license.ts +68 -68
  46. package/src/engine/engine_networking_blob.ts +3 -3
  47. package/src/engine/engine_utils_qrcode.ts +2 -2
  48. package/src/engine/webcomponents/needle menu/needle-menu-spatial.ts +2 -2
  49. package/src/engine/webcomponents/needle menu/needle-menu.ts +5 -5
  50. package/src/engine/webcomponents/needle-engine.loading.ts +6 -6
  51. package/src/engine/webcomponents/needle-engine.ts +2 -2
  52. package/src/engine/xr/TempXRContext.ts +2 -2
  53. package/src/engine-components/export/usdz/USDZExporter.ts +4 -4
  54. package/src/engine-components/webxr/TeleportTarget.ts +23 -10
  55. package/src/engine-components/webxr/controllers/XRControllerMovement.ts +20 -3
@@ -140,7 +140,7 @@ void main(){
140
140
  #__vconsole .vc-mask {
141
141
  overflow: hidden;
142
142
  }
143
- `,Mr?.prepend(i),o===!0&&bv()<=0&&Xv(),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.":"")),Uc=!1,wi=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function oM(){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 ff="padding: 10px; font-family: monospace;",Yv="margin-bottom: 10px;",Tr="margin-bottom: 10px; margin-top: 15px;",sM="width: 100%; border-collapse: collapse; border: 1px solid rgba(0,0,0,0.1); table-layout: fixed;",Kv="border: 1px solid rgba(0,0,0,0.1); padding: 5px;",rM=Kv,aM=Kv+" word-break: break-all;";function io(o,e=!1){e&&o.sort((i,n)=>(n.value?1:0)-(i.value?1:0));let t=`<table style='${sM}'>`;t+="<tbody>";for(const i of o){const n=typeof i.value=="boolean"?i.value?"\u2705":"\u274C":i.value;t+=`<tr><td style='${rM}'>${i.label}</td><td style='${aM}'>${n}</td></tr>`}return t+="</tbody></table>",t}function Zv(){try{if(bu())return"\u2705"}catch{}return"\u274C"}function lM(){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='${ff}'>`;const i=bM();t+=`<h3 style='${Yv}'>Device: ${i}</h3>`,t+=io([{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+=io(n,!1)),t+="</div>",t+=`<div style='${ff} margin-top: 20px;'>`,t+=`<h3 style='${Yv}'>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:Zv()}];t+=io(l,!1),t+="</div>",e(t)}),o}function cM(){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='${ff}'>`;const i=hM();i.length>0&&(t+=`<h3 style='${Tr}'>General GPU Info</h3>`,t+=io(i,!1));const n=uM();n.length>0&&(t+=`<h3 style='${Tr}'>WebGL</h3>`,t+=io(n,!1));const s=pM();s.length>0&&(t+=`<h3 style='${Tr}'>WebGL 2 Features</h3>`,t+=io(s,!1));const r=mM();r.length>0&&(t+=`<h3 style='${Tr}'>WebGL Limits</h3>`,t+=io(r,!1));const a=gM();a.length>0&&(t+=`<h3 style='${Tr}'>Texture Formats</h3>`,t+=io(a,!1));const l=await fM();if(l.length>0&&(t+=`<h3 style='${Tr}'>WebGPU</h3>`,t+=io(l,!1)),I.isSafari()){const c=yM();c.length>0&&(t+=`<h3 style='${Tr}'>Safari GPU Info</h3>`,t+=io(c,!1))}t+="</div>",e(t)}),o}function hM(){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=Jv();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=dM(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 dM(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 uM(){const o=[],e=Jv();return e&&(o.push({label:"\u{1F4CA} WebGL Version",value:e.version}),o.push({label:"\u{1F3AE} WebGL 2 Available",value:Zv()})),o}function pM(){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 mM(){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 gM(){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 fM(){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 Jv(){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 yM(){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 bM(){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 _M(){return document.querySelector("#__vconsole .vc-switch")||null}function vM(){return document.querySelector("#__vconsole")||null}const _u=x("debugtypes");class wM{_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 xM=Symbol("BuiltInType"),k=new wM,yf=function(o){k.get(o.name)||k.add(o.name,o)};class SM{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&&M())&&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],_=Na.parseTrackName(f.name);let w=Na.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 nk(".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=ew(o);else for(let e=0;e<o.length;e++){const t=o[e];o[e]=ew(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 ew(o){switch(o?.prototype?.constructor?.name){case"Number":case"String":case"Boolean":return null}return o}const tw=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),tw&&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(tw&&console.log("Dispatching event "+e,i),!!i)for(const n of i)n(t)}}const iw=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.7";'),As('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";'),As('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Fri Jul 17 2026 12:05:24 GMT+0000 (Coordinated Universal Time)";'),As('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const si="5.1.7",Ya="undefined",Nc="Fri Jul 17 2026 12:05:24 GMT+0000 (Coordinated Universal Time)";iw&&console.log(`Engine version: ${si} (generator: ${Ya})
143
+ `,Mr?.prepend(i),o===!0&&bv()<=0&&Xv(),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.":"")),Uc=!1,wi=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function oM(){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 ff="padding: 10px; font-family: monospace;",Yv="margin-bottom: 10px;",Tr="margin-bottom: 10px; margin-top: 15px;",sM="width: 100%; border-collapse: collapse; border: 1px solid rgba(0,0,0,0.1); table-layout: fixed;",Kv="border: 1px solid rgba(0,0,0,0.1); padding: 5px;",rM=Kv,aM=Kv+" word-break: break-all;";function io(o,e=!1){e&&o.sort((i,n)=>(n.value?1:0)-(i.value?1:0));let t=`<table style='${sM}'>`;t+="<tbody>";for(const i of o){const n=typeof i.value=="boolean"?i.value?"\u2705":"\u274C":i.value;t+=`<tr><td style='${rM}'>${i.label}</td><td style='${aM}'>${n}</td></tr>`}return t+="</tbody></table>",t}function Zv(){try{if(bu())return"\u2705"}catch{}return"\u274C"}function lM(){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='${ff}'>`;const i=bM();t+=`<h3 style='${Yv}'>Device: ${i}</h3>`,t+=io([{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+=io(n,!1)),t+="</div>",t+=`<div style='${ff} margin-top: 20px;'>`,t+=`<h3 style='${Yv}'>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:Zv()}];t+=io(l,!1),t+="</div>",e(t)}),o}function cM(){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='${ff}'>`;const i=hM();i.length>0&&(t+=`<h3 style='${Tr}'>General GPU Info</h3>`,t+=io(i,!1));const n=uM();n.length>0&&(t+=`<h3 style='${Tr}'>WebGL</h3>`,t+=io(n,!1));const s=pM();s.length>0&&(t+=`<h3 style='${Tr}'>WebGL 2 Features</h3>`,t+=io(s,!1));const r=mM();r.length>0&&(t+=`<h3 style='${Tr}'>WebGL Limits</h3>`,t+=io(r,!1));const a=gM();a.length>0&&(t+=`<h3 style='${Tr}'>Texture Formats</h3>`,t+=io(a,!1));const l=await fM();if(l.length>0&&(t+=`<h3 style='${Tr}'>WebGPU</h3>`,t+=io(l,!1)),I.isSafari()){const c=yM();c.length>0&&(t+=`<h3 style='${Tr}'>Safari GPU Info</h3>`,t+=io(c,!1))}t+="</div>",e(t)}),o}function hM(){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=Jv();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=dM(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 dM(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 uM(){const o=[],e=Jv();return e&&(o.push({label:"\u{1F4CA} WebGL Version",value:e.version}),o.push({label:"\u{1F3AE} WebGL 2 Available",value:Zv()})),o}function pM(){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 mM(){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 gM(){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 fM(){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 Jv(){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 yM(){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 bM(){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 _M(){return document.querySelector("#__vconsole .vc-switch")||null}function vM(){return document.querySelector("#__vconsole")||null}const _u=x("debugtypes");class wM{_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 xM=Symbol("BuiltInType"),k=new wM,yf=function(o){k.get(o.name)||k.add(o.name,o)};class SM{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&&M())&&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],_=Na.parseTrackName(f.name);let w=Na.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 nk(".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=ew(o);else for(let e=0;e<o.length;e++){const t=o[e];o[e]=ew(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 ew(o){switch(o?.prototype?.constructor?.name){case"Number":case"String":case"Boolean":return null}return o}const tw=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),tw&&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(tw&&console.log("Dispatching event "+e,i),!!i)for(const n of i)n(t)}}const iw=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.8";'),As('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";'),As('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Thu Jul 23 2026 13:06:37 GMT+0000 (Coordinated Universal Time)";'),As('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const si="5.1.8",Ya="undefined",Nc="Thu Jul 23 2026 13:06:37 GMT+0000 (Coordinated Universal Time)";iw&&console.log(`Engine version: ${si} (generator: ${Ya})
144
144
  Project built at ${Nc}`);const Rs=NEEDLE_PUBLIC_KEY,no="needle_isActiveInHierarchy",Rr="builtin_components",Wc="needle_editor_guid";function As(o){try{(0,eval)(o)}catch(e){iw&&console.error(e)}}globalThis.NEEDLE_USE_RAPIER=globalThis.NEEDLE_USE_RAPIER!==void 0?globalThis.NEEDLE_USE_RAPIER:!0,globalThis.NEEDLE_USE_POSTPROCESSING=globalThis.NEEDLE_USE_POSTPROCESSING!==void 0?globalThis.NEEDLE_USE_POSTPROCESSING:!0;const bf={experimentalSmartHierarchyUpdate:!1},Ui=Symbol("shadowDomOwner"),CM=x("debugpatch");function wu(o,e,t,i){const n=CM===e;if(!t&&!i)return;const s=e+"___needle";kM(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]=ow(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]=ow(l,o,e);else{const c=this[s];sw(o,e,this,c,l),this[s]=l,rw(o,e,this,c,l)}},get:function(){const l=this[s];return typeof l=="function"&&l[s]?l[s]:l}}))}function PM(o,e,t){const i=vf(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 nw=Symbol("Needle:Patches:WrappedFunction");function ow(o,e,t){if(o[nw])return o;const i=function(...n){sw(e,t,this,...n);const s=o.apply(this,n);return rw(e,t,this,s,...n),s};return i[nw]=!0,i}const xu="Needle:Patches";function _f(){return globalThis[xu]||(globalThis[xu]=new WeakMap),globalThis[xu]}function vf(o,e){const t=_f().get(o);return t?t.get(e):null}function kM(o,e,t,i){let n=_f().get(o);n||(n=new Map,_f().set(o,n));let s=n.get(e);s||(s=[],n.set(e,s)),s.push({prefix:t,postfix:i})}function sw(o,e,t,...i){if(!t)return;const n=vf(o,e);if(n)for(const s of n)s.prefix?.call(t,...i)}function rw(o,e,t,i,...n){if(!t)return;const s=vf(o,e);if(s)for(const r of s)r.postfix?.call(t,i,...n)}function OM(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 M()&&console.debug("Spector available: Add '?spector=<frame>' to the URL to enable it and capture a frame.")}}function aw(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 EM=Symbol("object"),wf=new Bi(()=>new v,20);class lw{_point;_normal;_tangentVelocity;distance;impulse;friction;get point(){return wf.get().set(this._point.x,this._point.y,this._point.z)}get normal(){return wf.get().set(this._normal.x,this._normal.y,this._normal.z)}get tangentVelocity(){return wf.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 cw{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 hw{object;collider;constructor(e,t){this.object=e,this.collider=t}}class pg{constructor(e){this.context=e,this.root.style.cssText=`
145
145
  position: absolute;
146
146
  width: 1px; height: 1px;
@@ -1749,4 +1749,4 @@ Needle Engine: finished loading `+i+`
1749
1749
  ---------------------------------
1750
1750
  \u2022 `+r.passes.map(d=>d.name||d.constructor.name+"*").join(`
1751
1751
  \u2022 `)+`
1752
- `),Ri&&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(Ri==="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 vB=Object.freeze(Object.defineProperty({__proto__:null,PostProcessingHandler:Pc},Symbol.toStringTag,{value:"Module"}));class _g{_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 _g(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 E?d:d!=null&&"gameObject"in d?d.gameObject:void 0;n=yh(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??st.None,postExtrapolationMode:s.postExtrapolation??st.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:st.None,postExtrapolationMode:st.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:st.None,postExtrapolationMode:st.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:st.None,postExtrapolationMode:st.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:Oh.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:Oh.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(Fy(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,Yr);n||(n=P.addComponent(i,Yr)),n.events||(n.events=[]);for(const s of this._pendingSignals){const r=new kh;r.guid=s.guid;const a=new Sl;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 E?t:t!=null&&"gameObject"in t?t.gameObject:void 0,n=yh(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:st.None,postExtrapolationMode:st.None,asset:{clip:n,loop:!1,duration:n.duration,removeStartOffset:!1}};e.clips.push(a),e.cursor=s+r,e.inlineTracks=[]}}class FP{}const wB=Object.freeze(Object.defineProperty({__proto__:null,ActionBuilder:ye,ActionCollection:fC,ActionModel:Ai,AlignmentConstraint:Ih,Animation:Xt,AnimationBuilder:fg,AnimationCurve:id,AnimationExtension:pm,Animator:Ot,AnimatorController:lo,Antialiasing:rd,Attractor:oc,AudioExtension:Ia,AudioListener:Yo,AudioSource:Gi,Avatar:Ks,AvatarMarker:gt,AxesHelper:Pl,AxisRotationConstraint:u0,BaseUIComponent:xn,BasicIKConstraint:o0,BehaviorExtension:sb,BehaviorModel:$t,BloomEffect:Nm,BoxCollider:Lp,BoxGizmo:ua,BoxHelperComponent:Vt,Button:us,CallInfo:Ns,Camera:ci,CameraTargetReachedEvent:Ph,Canvas:Yl,CanvasGroup:nr,CapsuleCollider:Ko,ChangeMaterialOnClick:X0,ChangeTransformOnClick:la,CharacterController:Jr,CharacterControllerInput:Jo,ChromaticAberration:ad,ClickThrough:ig,ColorAdjustments:lr,ColorBySpeedModule:ic,ColorOverLifetimeModule:Lm,ContactShadows:Lh,CursorFollow:ka,CustomBranding:da,Deletable:c0,DeleteBox:_r,DepthOfField:Hn,DeviceFlag:Dp,DocumentExtension:BP,DragControls:na,DragProfile:Up,DropListener:is,Duplicatable:A0,EffectWrapper:cd,EmissionModule:cs,EmphasizeOnClick:Nl,EnvironmentScene:kp,EventList:se,EventListEvent:zy,EventSystem:bi,EventTrigger:nm,FieldWithDefault:NS,FixedJoint:Sb,FixedRotationAxesConstraint:yS,Fog:Kl,GltfExport:B0,GltfExportBox:D0,GrabPointPlaneConstraint:jh,Gradient:ma,Graphic:Zh,GraphicRaycaster:bp,GridHelper:Zl,GridLayoutGroup:mb,GridSnapConstraint:jp,GroundProjectedEnv:ho,GroupActionModel:aa,HideOnStart:Pn,HingeJoint:td,HorizontalLayoutGroup:pb,get HoverAnimation(){return Eo},Image:cc,InheritVelocityModule:Rb,InputField:i_,InstanceHandle:Fa,InstancingHandler:La,Interactable:l0,KeepRotationConstraint:Bp,KeepScaleConstraint:gS,Keyframe:Mi,LODGroup:Om,LODModel:ec,Light:Ft,LimitVelocityOverLifetimeModule:_t,LogStats:a0,LookAt:n_,LookAtConstraint:qr,MainModule:Jt,MaskableGraphic:Jh,MeshCollider:qs,MeshRenderer:Fh,MinMaxCurve:Z,MinMaxGradient:ga,NeedleMenu:_o,NestedGltf:tc,Networking:Eb,NoiseModule:ve,ObjectRaycaster:dn,OffsetConstraint:pa,OpenURL:hc,OrbitControls:ge,Outline:Xl,Padding:ha,ParticleBurst:Im,ParticleSubEmitter:Ab,ParticleSystem:sd,ParticleSystemRenderer:yn,PhysicsExtension:rb,PixelationEffect:hd,PlaneHeightLockConstraint:p0,PlayAnimationOnClick:Nh,PlayAudioOnClick:Ys,PlayableDirector:Cl,PlayerColor:xc,PointerEventData:Nd,PostProcessingHandler:Pc,PreliminaryAction:Wl,PreliminaryTrigger:Wh,RawImage:Jm,Rect:TC,RectTransform:$n,ReflectionProbe:es,RegisteredAnimationInfo:vr,RemoteSkybox:i0,Renderer:di,RendererLightmap:M0,Rigidbody:it,RotationBySpeedModule:fn,RotationOverLifetimeModule:Vn,ScaleLimitConstraint:h0,SceneSwitcher:nt,ScreenCapture:cr,ScreenSpaceAmbientOcclusion:hs,ScreenSpaceAmbientOcclusionN8:Gn,ScrollFollow:Mo,SeeThrough:Qb,SetActiveOnClick:Q0,ShadowCatcher:gd,ShapeModule:Tb,SharpeningEffect:ud,SignalAsset:kh,SignalReceiver:Yr,SignalReceiverEvent:Sl,SignalTrackHandler:Mh,Size:MC,SizeBySpeedModule:Ti,SizeOverLifetimeModule:fa,SkinnedMeshRenderer:T0,SmoothFollow:qm,SnapToSurfaceConstraint:zp,SpatialGrabRaycaster:Aa,SpatialHtml:vd,SpatialTrigger:Xm,SpatialTriggerReceiver:ko,SpectatorCamera:Qm,SphereCollider:kl,SplineContainer:Sa,SplineData:Oo,SplineWalker:vn,Sprite:os,SpriteData:Vl,SpriteRenderer:ki,SpriteSheet:$l,SubEmitterSystem:Fm,SyncedCamera:Yb,SyncedRoom:qn,SyncedTransform:Fn,TapGestureTrigger:K0,TeleportTarget:vm,TestRunner:Jb,TestSimulateUserData:e_,Text:Zt,TextBuilder:db,TextExtension:Pm,TextureSheetAnimationModule:ei,TiltShiftEffect:Co,TimelineActivationTrack:Sp,TimelineAnimationTrack:Eh,TimelineAudioTrack:Ss,TimelineBuilder:_g,TimelineControlTrack:Cp,TimelineMarkerTrack:xp,ToneMappingEffect:ba,TrailModule:We,TransformData:qe,TransformGizmo:Ca,TriggerBuilder:Yt,TriggerModel:gr,UIRaycastUtils:Hy,UIRootComponent:Qh,USDZExporter:xo,USDZText:Ql,USDZUIExtension:yb,UsageMarker:Dh,VariantAction:G0,VelocityOverLifetimeModule:Ke,VerticalLayoutGroup:ub,VideoPlayer:wt,get ViewBox(){return pt},Vignette:wa,VisibilityAction:$h,Voip:ds,Volume:pd,VolumeParameter:W,VolumeProfile:zm,WebARCameraBackground:Cd,WebARSessionRoot:kn,WebXR:wm,WebXRImageTracking:pc,WebXRImageTrackingModel:fs,WebXRPlaneTracking:ys,WebXRTrackedImage:Sc,XRControllerFollow:ms,XRControllerModel:ss,XRControllerMovement:Yi,XRFlag:Nn,XRRig:rg,XRState:yi,__Ignore:FP},Symbol.toStringTag,{value:"Module"}));var w_;(o=>{function e(t,i=!1,n=.75){const s=new Sa,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 Oo;h.position.copy(a),h.tangentIn.copy(c),h.tangentOut.copy(c),s.addKnot(h)}),s.closed=i,s}o.createFromPoints=e})(w_||(w_={}));class xB extends $O{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=VO.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 SB=Object.freeze(Object.defineProperty({__proto__:null,GenerateMeshBVHWorker:xB},Symbol.toStringTag,{value:"Module"}));export{Cu as $componentName,EM as $physicsKey,ye as ActionBuilder,fC as ActionCollection,Ai as ActionModel,Uw as Addressables,Ih as AlignmentConstraint,al as AmbientMode,Xt as Animation,fg as AnimationBuilder,id as AnimationCurve,pm as AnimationExtension,oi as AnimationUtils,Ot as Animator,Ci as AnimatorConditionMode,lo as AnimatorController,yg as AnimatorControllerBuilder,Gr as AnimatorControllerParameterType,fh as AnimatorStateInfo,rd as Antialiasing,Qn as Application,Gx as AssetDatabase,ie as AssetReference,oc as Attractor,Uy as AudioClip,Ia as AudioExtension,Yo as AudioListener,X1 as AudioRolloffMode,Gi as AudioSource,Ks as Avatar,gt as AvatarMarker,wl as Axes,Pl as AxesHelper,u0 as AxisRotationConstraint,Nc as BUILD_TIME,xn as BaseUIComponent,o0 as BasicIKConstraint,sb as BehaviorExtension,$t as BehaviorModel,Ar as BlobStorage,Nm as BloomEffect,Lp as BoxCollider,ua as BoxGizmo,Vt as BoxHelperComponent,us as Button,Sn as ButtonsFactory,ZC as CallDirection,Ns as CallInfo,ci as Camera,Ph as CameraTargetReachedEvent,Yl as Canvas,nr as CanvasGroup,Ko as CapsuleCollider,X0 as ChangeMaterialOnClick,la as ChangeTransformOnClick,Jr as CharacterController,Jo as CharacterControllerInput,ad as ChromaticAberration,Bi as CircularBuffer,Qr as ClearFlags,ig as ClickThrough,st as ClipExtrapolation,qi as Collider,cw as Collision,fp as CollisionDetectionMode,lr as ColorAdjustments,ic as ColorBySpeedModule,Lm as ColorOverLifetimeModule,oA as Component,T as Component$1,vu as ComponentLifecycleEvents,wB as Components,nx as ConnectionEvents,lw as ContactPoint,Lh as ContactShadows,U as Context,fR as ContextArgs,de as ContextEvent,he as ContextRegistry,ka as CursorFollow,da as CustomBranding,je as CustomShader,$u as DefaultReflectionMode,c0 as Deletable,_r as DeleteBox,Hn as DepthOfField,Dp as DeviceFlag,I as DeviceUtilities,Y1 as DirectorWrapMode,dp as DisposableStore,BP as DocumentExtension,na as DragControls,g0 as DragMode,Up as DragProfile,is as DropListener,A0 as Duplicatable,cd as EffectWrapper,cs as EmissionModule,Nl as EmphasizeOnClick,Hd as EngineLoadingView,kp as EnvironmentScene,Wf as EventBus,se as EventList,zy as EventListEvent,bi as EventSystem,nm as EventTrigger,NS as FieldWithDefault,Ba as FileReference,Ww as FileReferenceSerializer,lI as FileSpawnModel,xS as File_Event,Sb as FixedJoint,yS as FixedRotationAxesConstraint,Kl as Fog,Cm as FontStyle,Oe as FrameEvent,Ya as GENERATOR,P as GameObject,B as Gizmos,B0 as GltfExport,D0 as GltfExportBox,jh as GrabPointPlaneConstraint,ma as Gradient,Zh as Graphic,bp as GraphicRaycaster,yr as Graphics,Zl as GridHelper,mb as GridLayoutGroup,jp as GridSnapConstraint,ho as GroundProjectedEnv,aa as GroupActionModel,Su as HideFlags,Pn as HideOnStart,td as HingeJoint,pb as HorizontalLayoutGroup,LC as HorizontalWrapMode,YM as HostData,Eo as HoverAnimation,cc as Image,ja as ImageReference,Nw as ImageReferenceSerializer,Rb as InheritVelocityModule,qw as Input,xi as InputEventQueue,ke as InputEvents,i_ as InputField,Fa as InstanceHandle,La as InstancingHandler,Cn as InstancingUtil,Pw as InstantiateEvent,St as InstantiateIdProvider,Ao as InstantiateOptions,l0 as Interactable,Sd as InternalScreenshotUtils,ET as JoinedRoomResponse,Bp as KeepRotationConstraint,gS as KeepScaleConstraint,vT as KeyEventArgs,Mi as Keyframe,Om as LODGroup,ec as LODModel,Yw as LODsManager,MT as LeftRoomResponse,Ft as Light,mx as LightData,_t as LimitVelocityOverLifetimeModule,rB as LoadingElementOptions,a0 as LogStats,Fi as LogType,n_ as LookAt,qr as LookAtConstraint,A as MODULES,Jt as MainModule,Oh as MarkerType,Jh as MaskableGraphic,xs as MaterialPropertyBlock,Yp as MaterialX,j as Mathf,qs as MeshCollider,Fh as MeshRenderer,Z as MinMaxCurve,ga as MinMaxGradient,bf as NEEDLE_ENGINE_FEATURE_FLAGS,Yc as NEKeyboardEvent,Ho as NEPointerEvent,EP as NeedleButtonElement,b0 as NeedleEngineModelLoader,b_ as NeedleEngineWebComponent,_o as NeedleMenu,xu as NeedlePatchesKey,Jf as NeedleXRController,X as NeedleXRSession,Sx as NeedleXRSync,Ux as NeedleXRUtils,tc as NestedGltf,$d as NetworkConnection,Po as NetworkedStreamEvents,Wd as NetworkedStreams,Eb as Networking,Ow as NewInstanceModel,ve as NoiseModule,dn as ObjectRaycaster,Ds as ObjectUtils,pa as OffsetConstraint,lu as OneEuroFilter,of as OneEuroFilterXYZ,hc as OpenURL,ge as OrbitControls,Xl as Outline,ox as OwnershipEvent,sx as OwnershipModel,Rs as PUBLIC_KEY,ha as Padding,Im as ParticleBurst,Ab as ParticleSubEmitter,sd as ParticleSystem,ar as ParticleSystemBaseBehaviour,yn as ParticleSystemRenderer,Am as ParticleSystemShapeType,Cs as PeerHandle,tx as PeerNetworking,vc as Physics,rb as PhysicsExtension,Et as PhysicsMaterialCombine,hd as PixelationEffect,p0 as PlaneHeightLockConstraint,Nh as PlayAnimationOnClick,Ys as PlayAudioOnClick,Cl as PlayableDirector,xc as PlayerColor,Oi as PlayerState,vC as PlayerStateEvent,eb as PlayerSync,rx as PlayerView,ax as PlayerViewManager,Nd as PointerEventData,Bu as PointerType,vx as PostProcessing,ht as PostProcessingEffect,vt as PostProcessingEffectOrder,Pc as PostProcessingHandler,Ja as Prefabs,Wl as PreliminaryAction,Wh as PreliminaryTrigger,Ml as PreviewHelper,il as PrimitiveType,ue as Progress,Yg as PromiseAllWithErrors,Qg as PromiseErrorResult,ce as RGBAColor,Cc as RapierPhysics,Jm as RawImage,jr as RaycastOptions,TC as Rect,$n as RectTransform,es as ReflectionProbe,US as ReflectionProbeUsage,vr as RegisteredAnimationInfo,i0 as RemoteSkybox,Do as RenderTexture,L1 as RenderTextureSerializer,di as Renderer,px as RendererData,M0 as RendererLightmap,it as Rigidbody,tt as RigidbodyConstraints,oe as RoomEvents,fn as RotationBySpeedModule,Vn as RotationOverLifetimeModule,h0 as ScaleLimitConstraint,Qp as SceneLightSettings,nt as SceneSwitcher,cr as ScreenCapture,hs as ScreenSpaceAmbientOcclusion,Gn as ScreenSpaceAmbientOcclusionN8,Mo as ScrollFollow,Qb as SeeThrough,In as SendQueue,Bf as SerializationContext,Q0 as SetActiveOnClick,em as ShadowCastingMode,gd as ShadowCatcher,Tb as ShapeModule,hw as ShapeOverlapResult,ud as SharpeningEffect,kh as SignalAsset,Yr as SignalReceiver,Sl as SignalReceiverEvent,Mh as SignalTrackHandler,MC as Size,Ti as SizeBySpeedModule,fa as SizeOverLifetimeModule,T0 as SkinnedMeshRenderer,qm as SmoothFollow,zp as SnapToSurfaceConstraint,Aa as SpatialGrabRaycaster,vd as SpatialHtml,Xm as SpatialTrigger,ko as SpatialTriggerReceiver,Qm as SpectatorCamera,kl as SphereCollider,gy as SphereIntersection,Sa as SplineContainer,Oo as SplineData,w_ as SplineUtils,vn as SplineWalker,os as Sprite,Vl as SpriteData,ki as SpriteRenderer,$l as SpriteSheet,cA as StateMachineBehaviour,Xb as StreamEndedEvent,KC as StreamReceivedEvent,Fm as SubEmitterSystem,Yb as SyncedCamera,qn as SyncedRoom,Fn as SyncedTransform,K0 as TapGestureTrigger,vm as TeleportTarget,Jb as TestRunner,e_ as TestSimulateUserData,Zt as Text,at as TextAnchor,db as TextBuilder,Pm as TextExtension,ei as TextureSheetAnimationModule,Co as TiltShiftEffect,fx as Time,Sp as TimelineActivationTrack,Eh as TimelineAnimationTrack,Ss as TimelineAudioTrack,_g as TimelineBuilder,Cp as TimelineControlTrack,xp as TimelineMarkerTrack,Kr as TimelineTrackHandler,ba as ToneMappingEffect,Pe as TrackType,We as TrailModule,qe as TransformData,Ca as TransformGizmo,Yt as TriggerBuilder,gr as TriggerModel,k as TypeStore,Hy as UIRaycastUtils,Qh as UIRootComponent,F0 as USDDocument,mt as USDObject,JS as USDWriter,tC as USDZExporter,xo as USDZExporter$1,Ql as USDZText,yb as USDZUIExtension,D1 as UriSerializer,Dh as UsageMarker,TT as UserJoinedOrLeftRoomModel,si as VERSION,G0 as VariantAction,Ke as VelocityOverLifetimeModule,ub as VerticalLayoutGroup,IC as VerticalWrapMode,wt as VideoPlayer,pt as ViewBox,qo as ViewDevice,wa as Vignette,$h as VisibilityAction,ds as Voip,pd as Volume,W as VolumeParameter,zm as VolumeProfile,fT as WaitForFrames,Vw as WaitForPromise,$f as WaitForSeconds,ws as Watch,Cd as WebARCameraBackground,kn as WebARSessionRoot,wm as WebXR,fr as WebXRButtonFactory,pc as WebXRImageTracking,fs as WebXRImageTrackingModel,ys as WebXRPlaneTracking,Sc as WebXRTrackedImage,ms as XRControllerFollow,ss as XRControllerModel,Yi as XRControllerMovement,Nn as XRFlag,rg as XRRig,yi as XRState,vo as XRStateFlag,Vc as _$lAjTeY,rn as _ERXbX,FP as __Ignore,PR as __internalNotifyObjectDestroyed,Vo as _owM,no as activeInHierarchyFieldName,ru as addAttributeChangeCallback,ao as addComponent,AI as addCustomExtensionPlugin,Vr as addNewComponent,wu as addPatch,ip as apply,tA as applyHMRChanges,i1 as applyPrototypeExtensions,kw as beginListenDestroy,Tw as beginListenInstantiate,qf as binaryIdentifierCasts,gR as build_scene_functions,Rr as builtinComponentKeyName,y_ as calculateProgress01,wE as clearMessages,j1 as colorSerializer,Iw as compareAssociation,bh as componentSerializer,Uv as copyTexture,C1 as createMotion,Si as debugNet,sl as debugOwner,rC as decompressGpuTexture,Lc as deepClone,No as delay,nu as delayForFrames,Du as deserializeObject,Vi as destroy,f1 as destroyComponentInstance,SS as determineMimeTypeFromExtension,Ie as disposeObjectResources,_n as disposeStream,Wc as editorGuidKeyName,Qa as enableSpatialConsole,B1 as eventListSerializer,yB as exportAsGLTF,Cy as findByGuid,vl as findObjectOfType,_1 as findObjectsOfType,fy as findResourceUsers,$1 as fitCamera,Wv as fitObjectIntoVolume,Wr as foreachComponent,Oy as foreachComponentEnumerator,UE as forward,Lx as generateQRCode,Mw as generateSeed,vi as getBoundingBox,Ov as getCameraController,Fs as getComponent,uh as getComponentInChildren,ph as getComponentInParent,bl as getComponents,_l as getComponentsInChildren,hp as getComponentsInParent,QS as getFormattedDate,kt as getIconElement,ry as getIconTexture,Wo as getLoader,dh as getOrAddComponent,x as getParam,$E as getParentHierarchyPath,JO as getPath,ST as getPeerOptions,Jw as getPeerjsInstance,OR as getResourceUserCount,hx as getSceneData,Rv as getTempColor,_i as getTempQuaternion,z as getTempVector,Rc as getUrlParams,Nv as getVisibleInCustomShadowRendering,Dv as getWorldDirection,df as getWorldEuler,le as getWorldPosition,Se as getWorldQuaternion,uu as getWorldRotation,Qe as getWorldScale,yp as hasPointerEventComponent,Xv as hideDebugConsole,aC as imageToCanvas,$w as initAddressableSerializers,F1 as initBuiltinSerializers,mB as initEngine,PP as initPhysics,tS as initVolumeParameterSerializer,$r as instantiate,DS as invokeLoadedImportPluginHooks,Ix as invokeXRSessionEnd,Ax as invokeXRSessionStart,o1 as isActiveInHierarchy,fl as isActiveSelf,sE as isAndroidDevice,zv as isAnimationAction,Pu as isComponent,XO as isDebugMode,tE as isDesktop,Nr as isDestroyed,M as isDevEnvironment,iA as isDisposable,CR as isDisposed,gB as isExporting,aw as isGLTFModel,lv as isHostedOnGlitch,By as isHotReloadEnabled,JR as isHotReloading,nE as isIPad,Dx as isIconElement,ji as isLocalNetwork,aE as isMacOS,iE as isMobileDevice,rE as isMozillaXR,hE as isQuest,Xx as isResourceTrackingEnabled,cE as isSafari,g2 as isTrackModel,op as isUsingInstancing,lE as isiOS,oE as isiPad,Y3 as loadAsset,Mp as loadPMREM,p_ as loadSync,pu as logHierarchy,AE as lookAtInverse,Dc as lookAtObject,IE as lookAtScreenPoint,YO as makeId,pv as makeIdFromRandomWords,Qi as makeNameSafe,s1 as markAsInstancedRendered,dE as microphonePermissionsGranted,qO as nameof,cv as nameofFactory,AT as needle,Ny as objectSerializer,Rx as offBeforeXRSession,Tx as offXRSessionEnd,Mx as offXRSessionStart,nA as on,LM as onAfterRender,IM as onBeforeRender,rR as onBeforeXRSession,RM as onClear,AM as onDestroy,Cf as onInitialized,Eu as onStart,QM as onSyncDestroy,Ew as onSyncInstantiate,bw as onUpdate,oy as onXRSessionEnd,Gu as onXRSessionStart,xP as parseSync,$v as placeOnSurface,mf as postprocessFBXMaterials,QA as prefix,hv as pushState,KO as randomNumber,Xf as registerBinaryType,Ku as registerComponent,P0 as registerComponentExtension,bn as registerCustomEffectType,k0 as registerExportExtensions,Zp as registerExtensions,v1 as registerHotReloadType,pw as registerLoader,Rw as registerPrefabProvider,Sy as registerPrototypeExtensions,yf as registerType,gv as relativePathPrefix,yv as removeAttributeChangeCallback,jy as removeComponent,II as removeCustomImportExtensionType,PM as removePatch,eo as resolveUrl,mv as sanitizeString,gP as saveImage,M3 as screenshot,h_ as screenshot2,Rf as sendDestroyed,u as serializable,Bw as serializeObject,Ze as serializeable,lh as setActive,vv as setAllowBalloonMessages,yE as setAllowOverlayMessages,hu as setAutoFitEnabled,sf as setCameraController,a1 as setDestroyed,kE as setDevEnvironment,Yx as setDisposable,yl as setDontDestroy,Gg as setOrAddParamsToUrl,QO as setParam,Ac as setParamWithoutReload,CT as setPeerOptions,SR as setResourceTrackingEnabled,qg as setState,pf as setVisibleInCustomShadowRendering,uf as setWorldEuler,zi as setWorldPosition,kr as setWorldPositionXYZ,An as setWorldQuaternion,hf as setWorldQuaternionXYZW,Fv as setWorldRotation,jc as setWorldRotationXYZ,Xa as setWorldScale,zc as showBalloonError,Ae as showBalloonMessage,fe as showBalloonWarning,gf as showDebugConsole,Mv as slerp,qc as syncDestroy,e0 as syncField,Af as syncInstantiate,VE as textureToCanvas,fv as toSourceId,Kw as tryCastBinary,PS as tryDetermineMimetypeFromBinary,CS as tryDetermineMimetypeFromURL,Ic as tryFindObject,Zw as tryGetGuid,w1 as unregisterHotReloadType,ZM as unregisterPrefabProvider,Xg as unwatchWrite,Ev as useForAutoFit,Fe as validate,su as watchWrite};
1752
+ `),Ri&&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(Ri==="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 vB=Object.freeze(Object.defineProperty({__proto__:null,PostProcessingHandler:Pc},Symbol.toStringTag,{value:"Module"}));class _g{_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 _g(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 E?d:d!=null&&"gameObject"in d?d.gameObject:void 0;n=yh(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??st.None,postExtrapolationMode:s.postExtrapolation??st.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:st.None,postExtrapolationMode:st.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:st.None,postExtrapolationMode:st.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:st.None,postExtrapolationMode:st.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:Oh.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:Oh.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(Fy(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,Yr);n||(n=P.addComponent(i,Yr)),n.events||(n.events=[]);for(const s of this._pendingSignals){const r=new kh;r.guid=s.guid;const a=new Sl;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 E?t:t!=null&&"gameObject"in t?t.gameObject:void 0,n=yh(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:st.None,postExtrapolationMode:st.None,asset:{clip:n,loop:!1,duration:n.duration,removeStartOffset:!1}};e.clips.push(a),e.cursor=s+r,e.inlineTracks=[]}}class FP{}const wB=Object.freeze(Object.defineProperty({__proto__:null,ActionBuilder:ye,ActionCollection:fC,ActionModel:Ai,AlignmentConstraint:Ih,Animation:Xt,AnimationBuilder:fg,AnimationCurve:id,AnimationExtension:pm,Animator:Ot,AnimatorController:lo,Antialiasing:rd,Attractor:oc,AudioExtension:Ia,AudioListener:Yo,AudioSource:Gi,Avatar:Ks,AvatarMarker:gt,AxesHelper:Pl,AxisRotationConstraint:u0,BaseUIComponent:xn,BasicIKConstraint:o0,BehaviorExtension:sb,BehaviorModel:$t,BloomEffect:Nm,BoxCollider:Lp,BoxGizmo:ua,BoxHelperComponent:Vt,Button:us,CallInfo:Ns,Camera:ci,CameraTargetReachedEvent:Ph,Canvas:Yl,CanvasGroup:nr,CapsuleCollider:Ko,ChangeMaterialOnClick:X0,ChangeTransformOnClick:la,CharacterController:Jr,CharacterControllerInput:Jo,ChromaticAberration:ad,ClickThrough:ig,ColorAdjustments:lr,ColorBySpeedModule:ic,ColorOverLifetimeModule:Lm,ContactShadows:Lh,CursorFollow:ka,CustomBranding:da,Deletable:c0,DeleteBox:_r,DepthOfField:Hn,DeviceFlag:Dp,DocumentExtension:BP,DragControls:na,DragProfile:Up,DropListener:is,Duplicatable:A0,EffectWrapper:cd,EmissionModule:cs,EmphasizeOnClick:Nl,EnvironmentScene:kp,EventList:se,EventListEvent:zy,EventSystem:bi,EventTrigger:nm,FieldWithDefault:NS,FixedJoint:Sb,FixedRotationAxesConstraint:yS,Fog:Kl,GltfExport:B0,GltfExportBox:D0,GrabPointPlaneConstraint:jh,Gradient:ma,Graphic:Zh,GraphicRaycaster:bp,GridHelper:Zl,GridLayoutGroup:mb,GridSnapConstraint:jp,GroundProjectedEnv:ho,GroupActionModel:aa,HideOnStart:Pn,HingeJoint:td,HorizontalLayoutGroup:pb,get HoverAnimation(){return Eo},Image:cc,InheritVelocityModule:Rb,InputField:i_,InstanceHandle:Fa,InstancingHandler:La,Interactable:l0,KeepRotationConstraint:Bp,KeepScaleConstraint:gS,Keyframe:Mi,LODGroup:Om,LODModel:ec,Light:Ft,LimitVelocityOverLifetimeModule:_t,LogStats:a0,LookAt:n_,LookAtConstraint:qr,MainModule:Jt,MaskableGraphic:Jh,MeshCollider:qs,MeshRenderer:Fh,MinMaxCurve:Z,MinMaxGradient:ga,NeedleMenu:_o,NestedGltf:tc,Networking:Eb,NoiseModule:ve,ObjectRaycaster:dn,OffsetConstraint:pa,OpenURL:hc,OrbitControls:ge,Outline:Xl,Padding:ha,ParticleBurst:Im,ParticleSubEmitter:Ab,ParticleSystem:sd,ParticleSystemRenderer:yn,PhysicsExtension:rb,PixelationEffect:hd,PlaneHeightLockConstraint:p0,PlayAnimationOnClick:Nh,PlayAudioOnClick:Ys,PlayableDirector:Cl,PlayerColor:xc,PointerEventData:Nd,PostProcessingHandler:Pc,PreliminaryAction:Wl,PreliminaryTrigger:Wh,RawImage:Jm,Rect:TC,RectTransform:$n,ReflectionProbe:es,RegisteredAnimationInfo:vr,RemoteSkybox:i0,Renderer:di,RendererLightmap:M0,Rigidbody:it,RotationBySpeedModule:fn,RotationOverLifetimeModule:Vn,ScaleLimitConstraint:h0,SceneSwitcher:nt,ScreenCapture:cr,ScreenSpaceAmbientOcclusion:hs,ScreenSpaceAmbientOcclusionN8:Gn,ScrollFollow:Mo,SeeThrough:Qb,SetActiveOnClick:Q0,ShadowCatcher:gd,ShapeModule:Tb,SharpeningEffect:ud,SignalAsset:kh,SignalReceiver:Yr,SignalReceiverEvent:Sl,SignalTrackHandler:Mh,Size:MC,SizeBySpeedModule:Ti,SizeOverLifetimeModule:fa,SkinnedMeshRenderer:T0,SmoothFollow:qm,SnapToSurfaceConstraint:zp,SpatialGrabRaycaster:Aa,SpatialHtml:vd,SpatialTrigger:Xm,SpatialTriggerReceiver:ko,SpectatorCamera:Qm,SphereCollider:kl,SplineContainer:Sa,SplineData:Oo,SplineWalker:vn,Sprite:os,SpriteData:Vl,SpriteRenderer:ki,SpriteSheet:$l,SubEmitterSystem:Fm,SyncedCamera:Yb,SyncedRoom:qn,SyncedTransform:Fn,TapGestureTrigger:K0,TeleportTarget:vm,TestRunner:Jb,TestSimulateUserData:e_,Text:Zt,TextBuilder:db,TextExtension:Pm,TextureSheetAnimationModule:ei,TiltShiftEffect:Co,TimelineActivationTrack:Sp,TimelineAnimationTrack:Eh,TimelineAudioTrack:Ss,TimelineBuilder:_g,TimelineControlTrack:Cp,TimelineMarkerTrack:xp,ToneMappingEffect:ba,TrailModule:We,TransformData:qe,TransformGizmo:Ca,TriggerBuilder:Yt,TriggerModel:gr,UIRaycastUtils:Hy,UIRootComponent:Qh,USDZExporter:xo,USDZText:Ql,USDZUIExtension:yb,UsageMarker:Dh,VariantAction:G0,VelocityOverLifetimeModule:Ke,VerticalLayoutGroup:ub,VideoPlayer:wt,get ViewBox(){return pt},Vignette:wa,VisibilityAction:$h,Voip:ds,Volume:pd,VolumeParameter:W,VolumeProfile:zm,WebARCameraBackground:Cd,WebARSessionRoot:kn,WebXR:wm,WebXRImageTracking:pc,WebXRImageTrackingModel:fs,WebXRPlaneTracking:ys,WebXRTrackedImage:Sc,XRControllerFollow:ms,XRControllerModel:ss,XRControllerMovement:Yi,XRFlag:Nn,XRRig:rg,XRState:yi,__Ignore:FP},Symbol.toStringTag,{value:"Module"}));var w_;(o=>{function e(t,i=!1,n=.75){const s=new Sa,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 Oo;h.position.copy(a),h.tangentIn.copy(c),h.tangentOut.copy(c),s.addKnot(h)}),s.closed=i,s}o.createFromPoints=e})(w_||(w_={}));class xB extends $O{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=VO.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 SB=Object.freeze(Object.defineProperty({__proto__:null,GenerateMeshBVHWorker:xB},Symbol.toStringTag,{value:"Module"}));export{Cu as $componentName,EM as $physicsKey,ye as ActionBuilder,fC as ActionCollection,Ai as ActionModel,Uw as Addressables,Ih as AlignmentConstraint,al as AmbientMode,Xt as Animation,fg as AnimationBuilder,id as AnimationCurve,pm as AnimationExtension,oi as AnimationUtils,Ot as Animator,Ci as AnimatorConditionMode,lo as AnimatorController,yg as AnimatorControllerBuilder,Gr as AnimatorControllerParameterType,fh as AnimatorStateInfo,rd as Antialiasing,Qn as Application,Gx as AssetDatabase,ie as AssetReference,oc as Attractor,Uy as AudioClip,Ia as AudioExtension,Yo as AudioListener,X1 as AudioRolloffMode,Gi as AudioSource,Ks as Avatar,gt as AvatarMarker,wl as Axes,Pl as AxesHelper,u0 as AxisRotationConstraint,Nc as BUILD_TIME,xn as BaseUIComponent,o0 as BasicIKConstraint,sb as BehaviorExtension,$t as BehaviorModel,Ar as BlobStorage,Nm as BloomEffect,Lp as BoxCollider,ua as BoxGizmo,Vt as BoxHelperComponent,us as Button,Sn as ButtonsFactory,ZC as CallDirection,Ns as CallInfo,ci as Camera,Ph as CameraTargetReachedEvent,Yl as Canvas,nr as CanvasGroup,Ko as CapsuleCollider,X0 as ChangeMaterialOnClick,la as ChangeTransformOnClick,Jr as CharacterController,Jo as CharacterControllerInput,ad as ChromaticAberration,Bi as CircularBuffer,Qr as ClearFlags,ig as ClickThrough,st as ClipExtrapolation,qi as Collider,cw as Collision,fp as CollisionDetectionMode,lr as ColorAdjustments,ic as ColorBySpeedModule,Lm as ColorOverLifetimeModule,oA as Component,T as Component$1,vu as ComponentLifecycleEvents,wB as Components,nx as ConnectionEvents,lw as ContactPoint,Lh as ContactShadows,U as Context,fR as ContextArgs,de as ContextEvent,he as ContextRegistry,ka as CursorFollow,da as CustomBranding,je as CustomShader,$u as DefaultReflectionMode,c0 as Deletable,_r as DeleteBox,Hn as DepthOfField,Dp as DeviceFlag,I as DeviceUtilities,Y1 as DirectorWrapMode,dp as DisposableStore,BP as DocumentExtension,na as DragControls,g0 as DragMode,Up as DragProfile,is as DropListener,A0 as Duplicatable,cd as EffectWrapper,cs as EmissionModule,Nl as EmphasizeOnClick,Hd as EngineLoadingView,kp as EnvironmentScene,Wf as EventBus,se as EventList,zy as EventListEvent,bi as EventSystem,nm as EventTrigger,NS as FieldWithDefault,Ba as FileReference,Ww as FileReferenceSerializer,lI as FileSpawnModel,xS as File_Event,Sb as FixedJoint,yS as FixedRotationAxesConstraint,Kl as Fog,Cm as FontStyle,Oe as FrameEvent,Ya as GENERATOR,P as GameObject,B as Gizmos,B0 as GltfExport,D0 as GltfExportBox,jh as GrabPointPlaneConstraint,ma as Gradient,Zh as Graphic,bp as GraphicRaycaster,yr as Graphics,Zl as GridHelper,mb as GridLayoutGroup,jp as GridSnapConstraint,ho as GroundProjectedEnv,aa as GroupActionModel,Su as HideFlags,Pn as HideOnStart,td as HingeJoint,pb as HorizontalLayoutGroup,LC as HorizontalWrapMode,YM as HostData,Eo as HoverAnimation,cc as Image,ja as ImageReference,Nw as ImageReferenceSerializer,Rb as InheritVelocityModule,qw as Input,xi as InputEventQueue,ke as InputEvents,i_ as InputField,Fa as InstanceHandle,La as InstancingHandler,Cn as InstancingUtil,Pw as InstantiateEvent,St as InstantiateIdProvider,Ao as InstantiateOptions,l0 as Interactable,Sd as InternalScreenshotUtils,ET as JoinedRoomResponse,Bp as KeepRotationConstraint,gS as KeepScaleConstraint,vT as KeyEventArgs,Mi as Keyframe,Om as LODGroup,ec as LODModel,Yw as LODsManager,MT as LeftRoomResponse,Ft as Light,mx as LightData,_t as LimitVelocityOverLifetimeModule,rB as LoadingElementOptions,a0 as LogStats,Fi as LogType,n_ as LookAt,qr as LookAtConstraint,Vo as LuMYUbW,A as MODULES,Jt as MainModule,Oh as MarkerType,Jh as MaskableGraphic,xs as MaterialPropertyBlock,Yp as MaterialX,j as Mathf,qs as MeshCollider,Fh as MeshRenderer,Z as MinMaxCurve,ga as MinMaxGradient,bf as NEEDLE_ENGINE_FEATURE_FLAGS,Yc as NEKeyboardEvent,Ho as NEPointerEvent,EP as NeedleButtonElement,b0 as NeedleEngineModelLoader,b_ as NeedleEngineWebComponent,_o as NeedleMenu,xu as NeedlePatchesKey,Jf as NeedleXRController,X as NeedleXRSession,Sx as NeedleXRSync,Ux as NeedleXRUtils,tc as NestedGltf,$d as NetworkConnection,Po as NetworkedStreamEvents,Wd as NetworkedStreams,Eb as Networking,Ow as NewInstanceModel,ve as NoiseModule,dn as ObjectRaycaster,Ds as ObjectUtils,pa as OffsetConstraint,lu as OneEuroFilter,of as OneEuroFilterXYZ,hc as OpenURL,ge as OrbitControls,Xl as Outline,ox as OwnershipEvent,sx as OwnershipModel,Rs as PUBLIC_KEY,ha as Padding,Im as ParticleBurst,Ab as ParticleSubEmitter,sd as ParticleSystem,ar as ParticleSystemBaseBehaviour,yn as ParticleSystemRenderer,Am as ParticleSystemShapeType,Cs as PeerHandle,tx as PeerNetworking,vc as Physics,rb as PhysicsExtension,Et as PhysicsMaterialCombine,hd as PixelationEffect,p0 as PlaneHeightLockConstraint,Nh as PlayAnimationOnClick,Ys as PlayAudioOnClick,Cl as PlayableDirector,xc as PlayerColor,Oi as PlayerState,vC as PlayerStateEvent,eb as PlayerSync,rx as PlayerView,ax as PlayerViewManager,Nd as PointerEventData,Bu as PointerType,vx as PostProcessing,ht as PostProcessingEffect,vt as PostProcessingEffectOrder,Pc as PostProcessingHandler,Ja as Prefabs,Wl as PreliminaryAction,Wh as PreliminaryTrigger,Ml as PreviewHelper,il as PrimitiveType,ue as Progress,Yg as PromiseAllWithErrors,Qg as PromiseErrorResult,ce as RGBAColor,Cc as RapierPhysics,Jm as RawImage,jr as RaycastOptions,TC as Rect,$n as RectTransform,es as ReflectionProbe,US as ReflectionProbeUsage,vr as RegisteredAnimationInfo,i0 as RemoteSkybox,Do as RenderTexture,L1 as RenderTextureSerializer,di as Renderer,px as RendererData,M0 as RendererLightmap,it as Rigidbody,tt as RigidbodyConstraints,oe as RoomEvents,fn as RotationBySpeedModule,Vn as RotationOverLifetimeModule,h0 as ScaleLimitConstraint,Qp as SceneLightSettings,nt as SceneSwitcher,cr as ScreenCapture,hs as ScreenSpaceAmbientOcclusion,Gn as ScreenSpaceAmbientOcclusionN8,Mo as ScrollFollow,Qb as SeeThrough,In as SendQueue,Bf as SerializationContext,Q0 as SetActiveOnClick,em as ShadowCastingMode,gd as ShadowCatcher,Tb as ShapeModule,hw as ShapeOverlapResult,ud as SharpeningEffect,kh as SignalAsset,Yr as SignalReceiver,Sl as SignalReceiverEvent,Mh as SignalTrackHandler,MC as Size,Ti as SizeBySpeedModule,fa as SizeOverLifetimeModule,T0 as SkinnedMeshRenderer,qm as SmoothFollow,zp as SnapToSurfaceConstraint,Aa as SpatialGrabRaycaster,vd as SpatialHtml,Xm as SpatialTrigger,ko as SpatialTriggerReceiver,Qm as SpectatorCamera,kl as SphereCollider,gy as SphereIntersection,Sa as SplineContainer,Oo as SplineData,w_ as SplineUtils,vn as SplineWalker,os as Sprite,Vl as SpriteData,ki as SpriteRenderer,$l as SpriteSheet,cA as StateMachineBehaviour,Xb as StreamEndedEvent,KC as StreamReceivedEvent,Fm as SubEmitterSystem,Yb as SyncedCamera,qn as SyncedRoom,Fn as SyncedTransform,K0 as TapGestureTrigger,vm as TeleportTarget,Jb as TestRunner,e_ as TestSimulateUserData,Zt as Text,at as TextAnchor,db as TextBuilder,Pm as TextExtension,ei as TextureSheetAnimationModule,Co as TiltShiftEffect,fx as Time,Sp as TimelineActivationTrack,Eh as TimelineAnimationTrack,Ss as TimelineAudioTrack,_g as TimelineBuilder,Cp as TimelineControlTrack,xp as TimelineMarkerTrack,Kr as TimelineTrackHandler,ba as ToneMappingEffect,Pe as TrackType,We as TrailModule,qe as TransformData,Ca as TransformGizmo,Yt as TriggerBuilder,gr as TriggerModel,k as TypeStore,Hy as UIRaycastUtils,Qh as UIRootComponent,F0 as USDDocument,mt as USDObject,JS as USDWriter,tC as USDZExporter,xo as USDZExporter$1,Ql as USDZText,yb as USDZUIExtension,D1 as UriSerializer,Dh as UsageMarker,TT as UserJoinedOrLeftRoomModel,si as VERSION,G0 as VariantAction,Ke as VelocityOverLifetimeModule,ub as VerticalLayoutGroup,IC as VerticalWrapMode,wt as VideoPlayer,pt as ViewBox,qo as ViewDevice,wa as Vignette,$h as VisibilityAction,ds as Voip,pd as Volume,W as VolumeParameter,zm as VolumeProfile,fT as WaitForFrames,Vw as WaitForPromise,$f as WaitForSeconds,ws as Watch,Cd as WebARCameraBackground,kn as WebARSessionRoot,wm as WebXR,fr as WebXRButtonFactory,pc as WebXRImageTracking,fs as WebXRImageTrackingModel,ys as WebXRPlaneTracking,Sc as WebXRTrackedImage,ms as XRControllerFollow,ss as XRControllerModel,Yi as XRControllerMovement,Nn as XRFlag,rg as XRRig,yi as XRState,vo as XRStateFlag,Vc as _VIq,FP as __Ignore,PR as __internalNotifyObjectDestroyed,rn as __sKHtRdk,no as activeInHierarchyFieldName,ru as addAttributeChangeCallback,ao as addComponent,AI as addCustomExtensionPlugin,Vr as addNewComponent,wu as addPatch,ip as apply,tA as applyHMRChanges,i1 as applyPrototypeExtensions,kw as beginListenDestroy,Tw as beginListenInstantiate,qf as binaryIdentifierCasts,gR as build_scene_functions,Rr as builtinComponentKeyName,y_ as calculateProgress01,wE as clearMessages,j1 as colorSerializer,Iw as compareAssociation,bh as componentSerializer,Uv as copyTexture,C1 as createMotion,Si as debugNet,sl as debugOwner,rC as decompressGpuTexture,Lc as deepClone,No as delay,nu as delayForFrames,Du as deserializeObject,Vi as destroy,f1 as destroyComponentInstance,SS as determineMimeTypeFromExtension,Ie as disposeObjectResources,_n as disposeStream,Wc as editorGuidKeyName,Qa as enableSpatialConsole,B1 as eventListSerializer,yB as exportAsGLTF,Cy as findByGuid,vl as findObjectOfType,_1 as findObjectsOfType,fy as findResourceUsers,$1 as fitCamera,Wv as fitObjectIntoVolume,Wr as foreachComponent,Oy as foreachComponentEnumerator,UE as forward,Lx as generateQRCode,Mw as generateSeed,vi as getBoundingBox,Ov as getCameraController,Fs as getComponent,uh as getComponentInChildren,ph as getComponentInParent,bl as getComponents,_l as getComponentsInChildren,hp as getComponentsInParent,QS as getFormattedDate,kt as getIconElement,ry as getIconTexture,Wo as getLoader,dh as getOrAddComponent,x as getParam,$E as getParentHierarchyPath,JO as getPath,ST as getPeerOptions,Jw as getPeerjsInstance,OR as getResourceUserCount,hx as getSceneData,Rv as getTempColor,_i as getTempQuaternion,z as getTempVector,Rc as getUrlParams,Nv as getVisibleInCustomShadowRendering,Dv as getWorldDirection,df as getWorldEuler,le as getWorldPosition,Se as getWorldQuaternion,uu as getWorldRotation,Qe as getWorldScale,yp as hasPointerEventComponent,Xv as hideDebugConsole,aC as imageToCanvas,$w as initAddressableSerializers,F1 as initBuiltinSerializers,mB as initEngine,PP as initPhysics,tS as initVolumeParameterSerializer,$r as instantiate,DS as invokeLoadedImportPluginHooks,Ix as invokeXRSessionEnd,Ax as invokeXRSessionStart,o1 as isActiveInHierarchy,fl as isActiveSelf,sE as isAndroidDevice,zv as isAnimationAction,Pu as isComponent,XO as isDebugMode,tE as isDesktop,Nr as isDestroyed,M as isDevEnvironment,iA as isDisposable,CR as isDisposed,gB as isExporting,aw as isGLTFModel,lv as isHostedOnGlitch,By as isHotReloadEnabled,JR as isHotReloading,nE as isIPad,Dx as isIconElement,ji as isLocalNetwork,aE as isMacOS,iE as isMobileDevice,rE as isMozillaXR,hE as isQuest,Xx as isResourceTrackingEnabled,cE as isSafari,g2 as isTrackModel,op as isUsingInstancing,lE as isiOS,oE as isiPad,Y3 as loadAsset,Mp as loadPMREM,p_ as loadSync,pu as logHierarchy,AE as lookAtInverse,Dc as lookAtObject,IE as lookAtScreenPoint,YO as makeId,pv as makeIdFromRandomWords,Qi as makeNameSafe,s1 as markAsInstancedRendered,dE as microphonePermissionsGranted,qO as nameof,cv as nameofFactory,AT as needle,Ny as objectSerializer,Rx as offBeforeXRSession,Tx as offXRSessionEnd,Mx as offXRSessionStart,nA as on,LM as onAfterRender,IM as onBeforeRender,rR as onBeforeXRSession,RM as onClear,AM as onDestroy,Cf as onInitialized,Eu as onStart,QM as onSyncDestroy,Ew as onSyncInstantiate,bw as onUpdate,oy as onXRSessionEnd,Gu as onXRSessionStart,xP as parseSync,$v as placeOnSurface,mf as postprocessFBXMaterials,QA as prefix,hv as pushState,KO as randomNumber,Xf as registerBinaryType,Ku as registerComponent,P0 as registerComponentExtension,bn as registerCustomEffectType,k0 as registerExportExtensions,Zp as registerExtensions,v1 as registerHotReloadType,pw as registerLoader,Rw as registerPrefabProvider,Sy as registerPrototypeExtensions,yf as registerType,gv as relativePathPrefix,yv as removeAttributeChangeCallback,jy as removeComponent,II as removeCustomImportExtensionType,PM as removePatch,eo as resolveUrl,mv as sanitizeString,gP as saveImage,M3 as screenshot,h_ as screenshot2,Rf as sendDestroyed,u as serializable,Bw as serializeObject,Ze as serializeable,lh as setActive,vv as setAllowBalloonMessages,yE as setAllowOverlayMessages,hu as setAutoFitEnabled,sf as setCameraController,a1 as setDestroyed,kE as setDevEnvironment,Yx as setDisposable,yl as setDontDestroy,Gg as setOrAddParamsToUrl,QO as setParam,Ac as setParamWithoutReload,CT as setPeerOptions,SR as setResourceTrackingEnabled,qg as setState,pf as setVisibleInCustomShadowRendering,uf as setWorldEuler,zi as setWorldPosition,kr as setWorldPositionXYZ,An as setWorldQuaternion,hf as setWorldQuaternionXYZW,Fv as setWorldRotation,jc as setWorldRotationXYZ,Xa as setWorldScale,zc as showBalloonError,Ae as showBalloonMessage,fe as showBalloonWarning,gf as showDebugConsole,Mv as slerp,qc as syncDestroy,e0 as syncField,Af as syncInstantiate,VE as textureToCanvas,fv as toSourceId,Kw as tryCastBinary,PS as tryDetermineMimetypeFromBinary,CS as tryDetermineMimetypeFromURL,Ic as tryFindObject,Zw as tryGetGuid,w1 as unregisterHotReloadType,ZM as unregisterPrefabProvider,Xg as unwatchWrite,Ev as useForAutoFit,Fe as validate,su as watchWrite};
@@ -116,8 +116,6 @@ import { XRHandSpace } from 'three';
116
116
 
117
117
  export declare const $componentName: unique symbol;
118
118
 
119
- /* Excluded from this release type: _$lAjTeY */
120
-
121
119
  export declare const $physicsKey: unique symbol;
122
120
 
123
121
  export declare class __Ignore {
@@ -125,6 +123,8 @@ export declare class __Ignore {
125
123
 
126
124
  export declare function __internalNotifyObjectDestroyed(obj: Object3D): void;
127
125
 
126
+ /* Excluded from this release type: __sKHtRdk */
127
+
128
128
  /** Data describing the accessible semantics for a 3D object or component. */
129
129
  declare type AccessibilityData = {
130
130
  /** ARIA role (e.g. `"button"`, `"img"`, `"region"`). */
@@ -6376,8 +6376,6 @@ export declare class EnvironmentScene extends Scene {
6376
6376
  createAreaLightMaterial(intensity: number): MeshBasicMaterial;
6377
6377
  }
6378
6378
 
6379
- /* Excluded from this release type: _ERXbX */
6380
-
6381
6379
  /** An Euler value, either as a Three.js Euler or as a `[x, y, z]` tuple (radians) */
6382
6380
  declare type EulerValue = Euler | [number, number, number];
6383
6381
 
@@ -11157,6 +11155,8 @@ declare class LowPassFilter {
11157
11155
  reset(value?: number): void;
11158
11156
  }
11159
11157
 
11158
+ /* Excluded from this release type: LuMYUbW */
11159
+
11160
11160
  declare type MagicSkyboxName = "studio" | "blurred-skybox" | "quicklook-ar" | "quicklook";
11161
11161
 
11162
11162
  export declare class MainModule {
@@ -14747,8 +14747,6 @@ export declare class OrbitControls extends Component implements ICameraControlle
14747
14747
  effectDistance?: Vector2;
14748
14748
  }
14749
14749
 
14750
- /* Excluded from this release type: _owM */
14751
-
14752
14750
  /** The Needle Engine networking server supports the concept of ownership that can be requested.
14753
14751
  * This enum contains possible outgoing (Request*) and incoming (Response*) events for communicating ownership.
14754
14752
  *
@@ -21477,23 +21475,36 @@ export declare class OrbitControls extends Component implements ICameraControlle
21477
21475
  * Marks a GameObject as a valid teleportation target for VR locomotion.
21478
21476
  * Add this component to objects or surfaces where users should be able to teleport.
21479
21477
  *
21480
- * **Usage:**
21481
- * - Add to floor surfaces, platforms, or designated teleport spots
21482
- * - Works with {@link XRControllerMovement} component's teleport system
21483
- * - Can be used to restrict teleportation to specific areas
21478
+ * **How targeting works (important):**
21479
+ * The teleport ray uses a **visual raycast against rendered meshes** — NOT physics colliders.
21480
+ * When {@link XRControllerMovement.useTeleportTarget} is enabled, the controller ray is cast
21481
+ * against the rendered scene and the hit object (or any of its parents) is checked for a
21482
+ * `TeleportTarget` component. You can only teleport onto an object if that object, or one of
21483
+ * its ancestors, has this component.
21484
+ *
21485
+ * **Requirements for a target to be hittable:**
21486
+ * - It MUST have a visible, rendered mesh (a `MeshRenderer` / geometry). The ray hits the
21487
+ * rendered geometry directly.
21488
+ * - **A collider is NOT required.** Teleport does not use physics colliders — adding a
21489
+ * `BoxCollider` (or any collider) has no effect on whether the target can be teleported to.
21490
+ * - It must NOT be on the IgnoreRaycast layer (three.js layer 2) and must not have
21491
+ * `raycastAllowed` / `visible` set to false, otherwise the ray skips it.
21492
+ * - The `TeleportTarget` component may be on the hit mesh itself or on any parent
21493
+ * (resolved via `getComponentInParent`).
21484
21494
  *
21485
21495
  * **Setup:**
21486
- * 1. Add this component to GameObjects that should be teleport destinations
21487
- * 2. Configure {@link XRControllerMovement} to use teleport targets (optional)
21496
+ * 1. Add this component to GameObjects (with a visible mesh) that should be teleport destinations
21497
+ * 2. Enable "Use Teleport Target" on the {@link XRControllerMovement} component so teleporting
21498
+ * is restricted to objects carrying this component
21488
21499
  * 3. Test teleportation in VR mode
21489
21500
  *
21490
21501
  * @example
21491
21502
  * ```ts
21492
- * // Make a platform teleportable
21503
+ * // Make a platform teleportable (the platform already has a visible mesh)
21493
21504
  * const platform = myPlatform.addComponent(TeleportTarget);
21494
21505
  * ```
21495
21506
  *
21496
- * @summary Marker component for valid VR teleportation destinations
21507
+ * @summary Marker component for valid VR teleportation destinations (mesh hit-test, no collider needed)
21497
21508
  * @category XR
21498
21509
  * @group Components
21499
21510
  * @see {@link XRControllerMovement} for VR locomotion and teleport configuration
@@ -23540,6 +23551,8 @@ export declare class OrbitControls extends Component implements ICameraControlle
23540
23551
  private updateDarkness;
23541
23552
  }
23542
23553
 
23554
+ /* Excluded from this release type: _VIq */
23555
+
23543
23556
  /**
23544
23557
  * Action to show or hide an object.
23545
23558
  * Use together with a {@link TapGestureTrigger} to show or hide objects when tapped or clicked.
@@ -24940,6 +24953,15 @@ export declare class OrbitControls extends Component implements ICameraControlle
24940
24953
  * Additionally it supports teleporting using the right controller's thumbstick or by pinching the index finger tip in front of the hand (if hand tracking is enabled).
24941
24954
  * It also visualizes controller rays and hit points in the scene.
24942
24955
  *
24956
+ * The component operates on the active XR rig and controllers from the {@link NeedleXRSession} (`args.xr.rig`,
24957
+ * `args.xr.leftController` / `rightController`) and receives `onUpdateXR` regardless of where it sits in the hierarchy.
24958
+ * It does NOT need to be on the same GameObject as {@link WebXR}, and does not read {@link WebXR} from its parents.
24959
+ *
24960
+ * **Duplicate-handler gotcha:** {@link WebXR.setDefaultMovementEnabled} (called when `WebXR.useDefaultControls` is enabled,
24961
+ * the default) adds an `XRControllerMovement` to the WebXR GameObject only if that object has none. If you place your own
24962
+ * `XRControllerMovement` on a different object, WebXR still adds a second, default one at runtime — two handlers then run
24963
+ * simultaneously (doubled movement, and your teleport settings such as {@link XRControllerMovement.useTeleportTarget} are
24964
+ * bypassed by the default handler). Put your component on the WebXR GameObject, or disable `WebXR.useDefaultControls`.
24943
24965
  *
24944
24966
  * @summary Move the XR rig using controller input
24945
24967
  * @category XR
@@ -24963,7 +24985,15 @@ export declare class OrbitControls extends Component implements ICameraControlle
24963
24985
  * @default true
24964
24986
  */
24965
24987
  usePinchToTeleport: boolean;
24966
- /** Enable to only allow teleporting on objects with a TeleportTarget component (see {@link TeleportTarget})
24988
+ /** Enable to only allow teleporting on objects with a {@link TeleportTarget} component.
24989
+ *
24990
+ * The teleport ray is a **visual raycast against rendered meshes** (not physics colliders):
24991
+ * it hits the rendered geometry and then looks for a {@link TeleportTarget} on the hit object
24992
+ * or any of its parents. A collider is NOT required on the target — only a visible mesh that
24993
+ * is not on the IgnoreRaycast layer.
24994
+ *
24995
+ * When enabled, teleporting is rejected if the ray does not hit a `TeleportTarget` (the
24996
+ * ground-plane fallback used in free teleport mode is also disabled).
24967
24997
  * @default false
24968
24998
  */
24969
24999
  useTeleportTarget: boolean;