@needle-tools/engine 4.13.0-next.a59e904 → 4.13.0-next.e6dcd1c

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -141,7 +141,7 @@ void main(){
141
141
  #__vconsole .vc-mask {
142
142
  overflow: hidden;
143
143
  }
144
- `,Ro?.prepend(i),s===!0&&$b()<=0&&av(),console.log("🌵 Debug console has loaded")}},e.onerror=()=>{console.warn("🌵 Debug console failed to load."+(window.crossOriginIsolated?"This page is using cross-origin isolation, so external scripts can't be loaded.":"")),pl=!1,Yt=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function US(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("needle-console","🌵 Inspect glTF"),e=()=>document.querySelector("#__vc_plug_"+s._id+" iframe");return s.on("renderTab",function(t){const i=globalThis["needle:codegen_files"];if(!i||i.length===0)return;let n=globalThis["needle:codegen_files"][0];const o=n.indexOf("?");o>-1&&(n=n.substring(0,o));const a=location.protocol+"//"+location.host+location.pathname+"/"+n,l=encodeURIComponent(a);s.fullUrl="https://viewer.needle.tools?inspect&file="+l;var h='<iframe src="" style="width: 100%; height: 99%; border: none;"></iframe>';t(h)}),s.on("show",function(){const t=e();t&&t.src!==s.fullUrl&&(t.src=s.fullUrl)}),s.on("hide",function(){const t=e();t&&(t.src="")}),s.on("addTopBar",function(t){var i=new Array;i.push({name:"Open in new window ↗",onClick:function(n){window.open(s.fullUrl,"_blank"),Yt?.hide()}}),i.push({name:"Reload",onClick:function(n){const o=e();o&&(o.src=s.fullUrl)}}),i.push({name:"Fullscreen",onClick:function(n){const o=e();o.requestFullscreen?o.requestFullscreen():o.webkitRequestFullscreen instanceof Function&&o.webkitRequestFullscreen()}}),t(i)}),s}const Op="padding: 10px; font-family: monospace;",Wy="margin-bottom: 10px;",To="margin-bottom: 10px; margin-top: 15px;",FS="width: 100%; border-collapse: collapse; border: 1px solid rgba(0,0,0,0.1); table-layout: fixed;",lv="border: 1px solid rgba(0,0,0,0.1); padding: 5px;",zS=lv,NS=lv+" word-break: break-all;";function Mn(s,e=!1){e&&s.sort((i,n)=>(n.value?1:0)-(i.value?1:0));let t=`<table style='${FS}'>`;t+="<tbody>";for(const i of s){const n=typeof i.value=="boolean"?i.value?"✅":"❌":i.value;t+=`<tr><td style='${zS}'>${i.label}</td><td style='${NS}'>${n}</td></tr>`}return t+="</tbody></table>",t}function cv(){try{if(document.createElement("canvas").getContext("webgl2"))return"✅"}catch{}return"❌"}function VS(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("device-utilities","📱 Device Info");return s.on("renderTab",function(e){let t=`<div style='${Op}'>`;const i=ZS();t+=`<h3 style='${Wy}'>Device: ${i}</h3>`,t+=Mn([{label:"💻 Desktop",value:exports.DeviceUtilities.isDesktop()},{label:"📱 Mobile Device",value:exports.DeviceUtilities.isMobileDevice()},{label:"🍎 iOS",value:exports.DeviceUtilities.isiOS()},{label:"📱 iPad",value:exports.DeviceUtilities.isiPad()},{label:"🤖 Android",value:exports.DeviceUtilities.isAndroidDevice()},{label:"🦊 Mozilla XR",value:exports.DeviceUtilities.isMozillaXR()},{label:"🌵 Needle App Clip",value:exports.DeviceUtilities.isNeedleAppClip()},{label:"🍏 macOS",value:exports.DeviceUtilities.isMacOS()},{label:"👓 VisionOS",value:exports.DeviceUtilities.isVisionOS()},{label:"🧭 Safari",value:exports.DeviceUtilities.isSafari()},{label:"🕶️ Meta Quest",value:exports.DeviceUtilities.isQuest()},{label:"🔗 QuickLook AR Support",value:exports.DeviceUtilities.supportsQuickLookAR()}],!0);const n=[],o=exports.DeviceUtilities.getiOSVersion();o&&n.push({label:"🍎 iOS Version",value:o});const r=exports.DeviceUtilities.getChromeVersion();r&&n.push({label:"🌐 Chrome Version",value:r});const a=exports.DeviceUtilities.getSafariVersion();a&&n.push({label:"🧭 Safari Version",value:a}),n.length>0&&(t+=Mn(n,!1)),t+="</div>",t+=`<div style='${Op} margin-top: 20px;'>`,t+=`<h3 style='${Wy}'>User Agent Info</h3>`;const l=[{label:"User Agent",value:navigator.userAgent},{label:"Platform",value:navigator.platform},{label:"App Version",value:navigator.appVersion},{label:"User Agent Data",value:navigator.userAgentData?`Platform: ${navigator.userAgentData.platform}, Mobile: ${navigator.userAgentData.mobile}`:"Not supported"},{label:"WebXR",value:"xr"in navigator?"✅":"❌"},{label:"WebGPU",value:"gpu"in navigator?"✅":"❌"},{label:"WebGL 2",value:cv()}];t+=Mn(l,!1),t+="</div>",e(t)}),s}function $S(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("graphics-info","🎨 Graphics Info");return s.on("renderTab",async function(e){let t=`<div style='${Op}'>`;const i=WS();i.length>0&&(t+=`<h3 style='${To}'>General GPU Info</h3>`,t+=Mn(i,!1));const n=GS();n.length>0&&(t+=`<h3 style='${To}'>WebGL</h3>`,t+=Mn(n,!1));const o=qS();o.length>0&&(t+=`<h3 style='${To}'>WebGL 2 Features</h3>`,t+=Mn(o,!1));const r=XS();r.length>0&&(t+=`<h3 style='${To}'>WebGL Limits</h3>`,t+=Mn(r,!1));const a=QS();a.length>0&&(t+=`<h3 style='${To}'>Texture Formats</h3>`,t+=Mn(a,!1));const l=await YS();if(l.length>0&&(t+=`<h3 style='${To}'>WebGPU</h3>`,t+=Mn(l,!1)),exports.DeviceUtilities.isSafari()){const h=KS();h.length>0&&(t+=`<h3 style='${To}'>Safari GPU Info</h3>`,t+=Mn(h,!1))}t+="</div>",e(t)}),s}function WS(){const s=[],e=window.devicePixelRatio;s.push({label:"Device Pixel Ratio",value:e.toString()}),s.push({label:"Width (px)",value:(window.innerWidth*e).toString()}),s.push({label:"Height (px)",value:(window.innerHeight*e).toString()});const i=exports.DeviceUtilities.isMobileDevice()?150:96,n=screen.width/i,o=screen.height/i,r=n*2.54,a=o*2.54;s.push({label:"Estimated Width (cm)",value:r.toFixed(1)}),s.push({label:"Estimated Height (cm)",value:a.toFixed(1)});const l=hv();if(l){s.push({label:"GPU",value:l.renderer}),s.push({label:"Driver",value:l.vendor}),s.push({label:"ANGLE",value:l.angle||"Not detected"});const h=HS(l.renderer);h&&(h.manufacturer&&s.push({label:"Manufacturer",value:h.manufacturer}),h.cardVersion&&s.push({label:"Card Version",value:h.cardVersion}),h.brand&&s.push({label:"Brand",value:h.brand}),s.push({label:"Integrated",value:h.integrated?"Yes":"No"}),h.layer&&s.push({label:"WebGL Layer",value:h.layer}))}return s}function HS(s){if(!s)return null;const e=(h,d)=>{const u=d.match(h);return u&&u[0]},t=e(/(ANGLE)/g,s)||void 0,i=e(/((NVIDIA|AMD|Intel)[^\d]*[^\s]+)/,s)||s,n=i.split(" ");n.shift();const o=e(/(NVIDIA|AMD|Intel)/g,i)||void 0,r=n.length>0?n.pop():void 0,a=n.length>0?n.join(" "):void 0;return{manufacturer:o,cardVersion:r,brand:a,integrated:o==="Intel",layer:t,card:i}}function GS(){const s=[],e=hv();return e&&(s.push({label:"📊 WebGL Version",value:e.version}),s.push({label:"🎮 WebGL 2 Available",value:cv()})),s}function qS(){const s=[];try{const t=document.createElement("canvas").getContext("webgl2");if(!t)return s;s.push({label:"Float Color Buffer",value:t.getExtension("EXT_color_buffer_float")?"✅":"❌"}),s.push({label:"Anisotropic Filtering",value:t.getExtension("EXT_texture_filter_anisotropic")?"✅":"❌"}),s.push({label:"Float Texture Linear",value:t.getExtension("OES_texture_float_linear")?"✅":"❌"}),s.push({label:"S3TC Compression",value:t.getExtension("WEBGL_compressed_texture_s3tc")?"✅":"❌"}),s.push({label:"ETC Compression",value:t.getExtension("WEBGL_compressed_texture_etc")?"✅":"❌"}),s.push({label:"PVRTC Compression",value:t.getExtension("WEBGL_compressed_texture_pvrtc")?"✅":"❌"}),s.push({label:"ASTC Compression",value:t.getExtension("WEBGL_compressed_texture_astc")?"✅":"❌"})}catch{}return s}function XS(){const s=[];try{const e=document.createElement("canvas"),t=e.getContext("webgl2")||e.getContext("webgl");if(!t)return s;const i=t instanceof WebGL2RenderingContext;s.push({label:"📏 Max Texture Size",value:t.getParameter(t.MAX_TEXTURE_SIZE).toString()}),s.push({label:"🎨 Max Renderbuffer Size",value:t.getParameter(t.MAX_RENDERBUFFER_SIZE).toString()}),s.push({label:"🔗 Max Vertex Attribs",value:t.getParameter(t.MAX_VERTEX_ATTRIBS).toString()}),s.push({label:"🎯 Max Texture Units",value:t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS).toString()}),i&&(s.push({label:"⚡ Max Samples",value:t.getParameter(t.MAX_SAMPLES).toString()}),s.push({label:"🔄 Max Uniform Buffer Bindings",value:t.getParameter(t.MAX_UNIFORM_BUFFER_BINDINGS).toString()}),s.push({label:"📐 Max 3D Texture Size",value:t.getParameter(t.MAX_3D_TEXTURE_SIZE).toString()}))}catch{}return s}function QS(){const s=[];try{document.createElement("canvas").getContext("webgl")&&(s.push({label:"WebGL 1 RGBA",value:"✅"}),s.push({label:"WebGL 1 RGB",value:"✅"}));const n=document.createElement("canvas").getContext("webgl2");n&&(s.push({label:"WebGL 2 RGBA32F",value:n.getExtension("EXT_color_buffer_float")?"✅":"❌"}),s.push({label:"WebGL 2 RGB32F",value:n.getExtension("EXT_color_buffer_float")?"✅":"❌"}),s.push({label:"WebGL 2 R11F_G11F_B10F",value:"✅"}),s.push({label:"WebGL 2 RGB565",value:"✅"}),s.push({label:"WebGL 2 RGB5_A1",value:"✅"}),s.push({label:"WebGL 2 RGBA4444",value:"✅"}))}catch{}return s}async function YS(){const s=[];if(!("gpu"in navigator))return s.push({label:"🚀 WebGPU Support",value:"❌ Not supported"}),s;s.push({label:"🚀 WebGPU Support",value:"✅ Supported"});try{const e=await navigator.gpu.requestAdapter();if(!e)return s.push({label:"🎯 Adapter",value:"No adapter available"}),s;s.push({label:"🎯 Adapter",value:e.name||"Unknown Adapter"});const t=await e.requestDevice();s.push({label:"🔧 Device",value:t.label||"WebGPU Device"}),s.push({label:"📏 Max Texture 2D",value:t.limits.maxTextureDimension2D.toString()}),s.push({label:"📐 Max Texture 3D",value:t.limits.maxTextureDimension3D.toString()}),s.push({label:"📊 Max Texture Array Layers",value:t.limits.maxTextureArrayLayers.toString()}),s.push({label:"💾 Max Buffer Size",value:`${(t.limits.maxBufferSize/1024/1024).toFixed(1)}MB`}),s.push({label:"🔗 Max Bind Groups",value:t.limits.maxBindGroups.toString()})}catch(e){s.push({label:"❌ Error",value:e.message})}return s}function hv(){try{const s=document.createElement("canvas"),e=s.getContext("webgl2")||s.getContext("webgl");if(!e)return null;const t=e.getExtension("WEBGL_debug_renderer_info"),i=t?e.getParameter(t.UNMASKED_RENDERER_WEBGL):e.getParameter(e.RENDERER),n=t?e.getParameter(t.UNMASKED_VENDOR_WEBGL):e.getParameter(e.VENDOR),o=e.getParameter(e.VERSION);let r;if(i&&i.includes("ANGLE")){const a=i.match(/ANGLE \(([^)]+)\)/);a&&(r=a[1])}return{renderer:i,vendor:n,version:o,angle:r}}catch{return null}}function KS(){const s=[];try{const t=document.createElement("canvas").getContext("webgl");if(t){const i=t.getExtension("WEBGL_debug_renderer_info");if(i){const n=t.getParameter(i.UNMASKED_RENDERER_WEBGL);n&&n.includes("Apple")&&s.push({label:"🍎 Apple GPU",value:n})}}}catch{}try{const t=document.createElement("canvas").getContext("webgl");t&&(t.getSupportedExtensions()||[]).includes("WEBGL_compressed_texture_pvrtc")&&s.push({label:"🗜️ PVRTC Support",value:"✅"})}catch{}return s}function ZS(){return exports.DeviceUtilities.isQuest()?"Meta Quest":exports.DeviceUtilities.isVisionOS()?"Vision Pro":exports.DeviceUtilities.isiOS()?exports.DeviceUtilities.isiPad()?"iPad":"iPhone/iPod":exports.DeviceUtilities.isAndroidDevice()?"Android Device":exports.DeviceUtilities.isMozillaXR()?"Mozilla XR Browser":exports.DeviceUtilities.isNeedleAppClip()?"Needle App Clip":exports.DeviceUtilities.isMacOS()?"Mac":exports.DeviceUtilities.isDesktop()?"Desktop PC":"Unknown Device"}function JS(){const s=document.querySelector("#__vconsole .vc-switch");return s||null}function eC(){const s=document.querySelector("#__vconsole");return s||null}const dv=x("debugdefines");uo('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";');uo('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";');uo('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";');uo('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');uo('globalThis["__NEEDLE_ENGINE_VERSION__"] = "4.13.0";');uo('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');uo('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Tue Feb 10 2026 20:56:20 GMT+0000 (Coordinated Universal Time)";');uo('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const fi="4.13.0",Ca="undefined",dc="Tue Feb 10 2026 20:56:20 GMT+0000 (Coordinated Universal Time)";dv&&console.log(`Engine version: ${fi} (generator: ${Ca})
144
+ `,Ro?.prepend(i),s===!0&&$b()<=0&&av(),console.log("🌵 Debug console has loaded")}},e.onerror=()=>{console.warn("🌵 Debug console failed to load."+(window.crossOriginIsolated?"This page is using cross-origin isolation, so external scripts can't be loaded.":"")),pl=!1,Yt=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function US(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("needle-console","🌵 Inspect glTF"),e=()=>document.querySelector("#__vc_plug_"+s._id+" iframe");return s.on("renderTab",function(t){const i=globalThis["needle:codegen_files"];if(!i||i.length===0)return;let n=globalThis["needle:codegen_files"][0];const o=n.indexOf("?");o>-1&&(n=n.substring(0,o));const a=location.protocol+"//"+location.host+location.pathname+"/"+n,l=encodeURIComponent(a);s.fullUrl="https://viewer.needle.tools?inspect&file="+l;var h='<iframe src="" style="width: 100%; height: 99%; border: none;"></iframe>';t(h)}),s.on("show",function(){const t=e();t&&t.src!==s.fullUrl&&(t.src=s.fullUrl)}),s.on("hide",function(){const t=e();t&&(t.src="")}),s.on("addTopBar",function(t){var i=new Array;i.push({name:"Open in new window ↗",onClick:function(n){window.open(s.fullUrl,"_blank"),Yt?.hide()}}),i.push({name:"Reload",onClick:function(n){const o=e();o&&(o.src=s.fullUrl)}}),i.push({name:"Fullscreen",onClick:function(n){const o=e();o.requestFullscreen?o.requestFullscreen():o.webkitRequestFullscreen instanceof Function&&o.webkitRequestFullscreen()}}),t(i)}),s}const Op="padding: 10px; font-family: monospace;",Wy="margin-bottom: 10px;",To="margin-bottom: 10px; margin-top: 15px;",FS="width: 100%; border-collapse: collapse; border: 1px solid rgba(0,0,0,0.1); table-layout: fixed;",lv="border: 1px solid rgba(0,0,0,0.1); padding: 5px;",zS=lv,NS=lv+" word-break: break-all;";function Mn(s,e=!1){e&&s.sort((i,n)=>(n.value?1:0)-(i.value?1:0));let t=`<table style='${FS}'>`;t+="<tbody>";for(const i of s){const n=typeof i.value=="boolean"?i.value?"✅":"❌":i.value;t+=`<tr><td style='${zS}'>${i.label}</td><td style='${NS}'>${n}</td></tr>`}return t+="</tbody></table>",t}function cv(){try{if(document.createElement("canvas").getContext("webgl2"))return"✅"}catch{}return"❌"}function VS(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("device-utilities","📱 Device Info");return s.on("renderTab",function(e){let t=`<div style='${Op}'>`;const i=ZS();t+=`<h3 style='${Wy}'>Device: ${i}</h3>`,t+=Mn([{label:"💻 Desktop",value:exports.DeviceUtilities.isDesktop()},{label:"📱 Mobile Device",value:exports.DeviceUtilities.isMobileDevice()},{label:"🍎 iOS",value:exports.DeviceUtilities.isiOS()},{label:"📱 iPad",value:exports.DeviceUtilities.isiPad()},{label:"🤖 Android",value:exports.DeviceUtilities.isAndroidDevice()},{label:"🦊 Mozilla XR",value:exports.DeviceUtilities.isMozillaXR()},{label:"🌵 Needle App Clip",value:exports.DeviceUtilities.isNeedleAppClip()},{label:"🍏 macOS",value:exports.DeviceUtilities.isMacOS()},{label:"👓 VisionOS",value:exports.DeviceUtilities.isVisionOS()},{label:"🧭 Safari",value:exports.DeviceUtilities.isSafari()},{label:"🕶️ Meta Quest",value:exports.DeviceUtilities.isQuest()},{label:"🔗 QuickLook AR Support",value:exports.DeviceUtilities.supportsQuickLookAR()}],!0);const n=[],o=exports.DeviceUtilities.getiOSVersion();o&&n.push({label:"🍎 iOS Version",value:o});const r=exports.DeviceUtilities.getChromeVersion();r&&n.push({label:"🌐 Chrome Version",value:r});const a=exports.DeviceUtilities.getSafariVersion();a&&n.push({label:"🧭 Safari Version",value:a}),n.length>0&&(t+=Mn(n,!1)),t+="</div>",t+=`<div style='${Op} margin-top: 20px;'>`,t+=`<h3 style='${Wy}'>User Agent Info</h3>`;const l=[{label:"User Agent",value:navigator.userAgent},{label:"Platform",value:navigator.platform},{label:"App Version",value:navigator.appVersion},{label:"User Agent Data",value:navigator.userAgentData?`Platform: ${navigator.userAgentData.platform}, Mobile: ${navigator.userAgentData.mobile}`:"Not supported"},{label:"WebXR",value:"xr"in navigator?"✅":"❌"},{label:"WebGPU",value:"gpu"in navigator?"✅":"❌"},{label:"WebGL 2",value:cv()}];t+=Mn(l,!1),t+="</div>",e(t)}),s}function $S(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("graphics-info","🎨 Graphics Info");return s.on("renderTab",async function(e){let t=`<div style='${Op}'>`;const i=WS();i.length>0&&(t+=`<h3 style='${To}'>General GPU Info</h3>`,t+=Mn(i,!1));const n=GS();n.length>0&&(t+=`<h3 style='${To}'>WebGL</h3>`,t+=Mn(n,!1));const o=qS();o.length>0&&(t+=`<h3 style='${To}'>WebGL 2 Features</h3>`,t+=Mn(o,!1));const r=XS();r.length>0&&(t+=`<h3 style='${To}'>WebGL Limits</h3>`,t+=Mn(r,!1));const a=QS();a.length>0&&(t+=`<h3 style='${To}'>Texture Formats</h3>`,t+=Mn(a,!1));const l=await YS();if(l.length>0&&(t+=`<h3 style='${To}'>WebGPU</h3>`,t+=Mn(l,!1)),exports.DeviceUtilities.isSafari()){const h=KS();h.length>0&&(t+=`<h3 style='${To}'>Safari GPU Info</h3>`,t+=Mn(h,!1))}t+="</div>",e(t)}),s}function WS(){const s=[],e=window.devicePixelRatio;s.push({label:"Device Pixel Ratio",value:e.toString()}),s.push({label:"Width (px)",value:(window.innerWidth*e).toString()}),s.push({label:"Height (px)",value:(window.innerHeight*e).toString()});const i=exports.DeviceUtilities.isMobileDevice()?150:96,n=screen.width/i,o=screen.height/i,r=n*2.54,a=o*2.54;s.push({label:"Estimated Width (cm)",value:r.toFixed(1)}),s.push({label:"Estimated Height (cm)",value:a.toFixed(1)});const l=hv();if(l){s.push({label:"GPU",value:l.renderer}),s.push({label:"Driver",value:l.vendor}),s.push({label:"ANGLE",value:l.angle||"Not detected"});const h=HS(l.renderer);h&&(h.manufacturer&&s.push({label:"Manufacturer",value:h.manufacturer}),h.cardVersion&&s.push({label:"Card Version",value:h.cardVersion}),h.brand&&s.push({label:"Brand",value:h.brand}),s.push({label:"Integrated",value:h.integrated?"Yes":"No"}),h.layer&&s.push({label:"WebGL Layer",value:h.layer}))}return s}function HS(s){if(!s)return null;const e=(h,d)=>{const u=d.match(h);return u&&u[0]},t=e(/(ANGLE)/g,s)||void 0,i=e(/((NVIDIA|AMD|Intel)[^\d]*[^\s]+)/,s)||s,n=i.split(" ");n.shift();const o=e(/(NVIDIA|AMD|Intel)/g,i)||void 0,r=n.length>0?n.pop():void 0,a=n.length>0?n.join(" "):void 0;return{manufacturer:o,cardVersion:r,brand:a,integrated:o==="Intel",layer:t,card:i}}function GS(){const s=[],e=hv();return e&&(s.push({label:"📊 WebGL Version",value:e.version}),s.push({label:"🎮 WebGL 2 Available",value:cv()})),s}function qS(){const s=[];try{const t=document.createElement("canvas").getContext("webgl2");if(!t)return s;s.push({label:"Float Color Buffer",value:t.getExtension("EXT_color_buffer_float")?"✅":"❌"}),s.push({label:"Anisotropic Filtering",value:t.getExtension("EXT_texture_filter_anisotropic")?"✅":"❌"}),s.push({label:"Float Texture Linear",value:t.getExtension("OES_texture_float_linear")?"✅":"❌"}),s.push({label:"S3TC Compression",value:t.getExtension("WEBGL_compressed_texture_s3tc")?"✅":"❌"}),s.push({label:"ETC Compression",value:t.getExtension("WEBGL_compressed_texture_etc")?"✅":"❌"}),s.push({label:"PVRTC Compression",value:t.getExtension("WEBGL_compressed_texture_pvrtc")?"✅":"❌"}),s.push({label:"ASTC Compression",value:t.getExtension("WEBGL_compressed_texture_astc")?"✅":"❌"})}catch{}return s}function XS(){const s=[];try{const e=document.createElement("canvas"),t=e.getContext("webgl2")||e.getContext("webgl");if(!t)return s;const i=t instanceof WebGL2RenderingContext;s.push({label:"📏 Max Texture Size",value:t.getParameter(t.MAX_TEXTURE_SIZE).toString()}),s.push({label:"🎨 Max Renderbuffer Size",value:t.getParameter(t.MAX_RENDERBUFFER_SIZE).toString()}),s.push({label:"🔗 Max Vertex Attribs",value:t.getParameter(t.MAX_VERTEX_ATTRIBS).toString()}),s.push({label:"🎯 Max Texture Units",value:t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS).toString()}),i&&(s.push({label:"⚡ Max Samples",value:t.getParameter(t.MAX_SAMPLES).toString()}),s.push({label:"🔄 Max Uniform Buffer Bindings",value:t.getParameter(t.MAX_UNIFORM_BUFFER_BINDINGS).toString()}),s.push({label:"📐 Max 3D Texture Size",value:t.getParameter(t.MAX_3D_TEXTURE_SIZE).toString()}))}catch{}return s}function QS(){const s=[];try{document.createElement("canvas").getContext("webgl")&&(s.push({label:"WebGL 1 RGBA",value:"✅"}),s.push({label:"WebGL 1 RGB",value:"✅"}));const n=document.createElement("canvas").getContext("webgl2");n&&(s.push({label:"WebGL 2 RGBA32F",value:n.getExtension("EXT_color_buffer_float")?"✅":"❌"}),s.push({label:"WebGL 2 RGB32F",value:n.getExtension("EXT_color_buffer_float")?"✅":"❌"}),s.push({label:"WebGL 2 R11F_G11F_B10F",value:"✅"}),s.push({label:"WebGL 2 RGB565",value:"✅"}),s.push({label:"WebGL 2 RGB5_A1",value:"✅"}),s.push({label:"WebGL 2 RGBA4444",value:"✅"}))}catch{}return s}async function YS(){const s=[];if(!("gpu"in navigator))return s.push({label:"🚀 WebGPU Support",value:"❌ Not supported"}),s;s.push({label:"🚀 WebGPU Support",value:"✅ Supported"});try{const e=await navigator.gpu.requestAdapter();if(!e)return s.push({label:"🎯 Adapter",value:"No adapter available"}),s;s.push({label:"🎯 Adapter",value:e.name||"Unknown Adapter"});const t=await e.requestDevice();s.push({label:"🔧 Device",value:t.label||"WebGPU Device"}),s.push({label:"📏 Max Texture 2D",value:t.limits.maxTextureDimension2D.toString()}),s.push({label:"📐 Max Texture 3D",value:t.limits.maxTextureDimension3D.toString()}),s.push({label:"📊 Max Texture Array Layers",value:t.limits.maxTextureArrayLayers.toString()}),s.push({label:"💾 Max Buffer Size",value:`${(t.limits.maxBufferSize/1024/1024).toFixed(1)}MB`}),s.push({label:"🔗 Max Bind Groups",value:t.limits.maxBindGroups.toString()})}catch(e){s.push({label:"❌ Error",value:e.message})}return s}function hv(){try{const s=document.createElement("canvas"),e=s.getContext("webgl2")||s.getContext("webgl");if(!e)return null;const t=e.getExtension("WEBGL_debug_renderer_info"),i=t?e.getParameter(t.UNMASKED_RENDERER_WEBGL):e.getParameter(e.RENDERER),n=t?e.getParameter(t.UNMASKED_VENDOR_WEBGL):e.getParameter(e.VENDOR),o=e.getParameter(e.VERSION);let r;if(i&&i.includes("ANGLE")){const a=i.match(/ANGLE \(([^)]+)\)/);a&&(r=a[1])}return{renderer:i,vendor:n,version:o,angle:r}}catch{return null}}function KS(){const s=[];try{const t=document.createElement("canvas").getContext("webgl");if(t){const i=t.getExtension("WEBGL_debug_renderer_info");if(i){const n=t.getParameter(i.UNMASKED_RENDERER_WEBGL);n&&n.includes("Apple")&&s.push({label:"🍎 Apple GPU",value:n})}}}catch{}try{const t=document.createElement("canvas").getContext("webgl");t&&(t.getSupportedExtensions()||[]).includes("WEBGL_compressed_texture_pvrtc")&&s.push({label:"🗜️ PVRTC Support",value:"✅"})}catch{}return s}function ZS(){return exports.DeviceUtilities.isQuest()?"Meta Quest":exports.DeviceUtilities.isVisionOS()?"Vision Pro":exports.DeviceUtilities.isiOS()?exports.DeviceUtilities.isiPad()?"iPad":"iPhone/iPod":exports.DeviceUtilities.isAndroidDevice()?"Android Device":exports.DeviceUtilities.isMozillaXR()?"Mozilla XR Browser":exports.DeviceUtilities.isNeedleAppClip()?"Needle App Clip":exports.DeviceUtilities.isMacOS()?"Mac":exports.DeviceUtilities.isDesktop()?"Desktop PC":"Unknown Device"}function JS(){const s=document.querySelector("#__vconsole .vc-switch");return s||null}function eC(){const s=document.querySelector("#__vconsole");return s||null}const dv=x("debugdefines");uo('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";');uo('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";');uo('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";');uo('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');uo('globalThis["__NEEDLE_ENGINE_VERSION__"] = "4.13.0";');uo('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');uo('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Tue Feb 10 2026 21:11:09 GMT+0000 (Coordinated Universal Time)";');uo('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const fi="4.13.0",Ca="undefined",dc="Tue Feb 10 2026 21:11:09 GMT+0000 (Coordinated Universal Time)";dv&&console.log(`Engine version: ${fi} (generator: ${Ca})
145
145
  Project built at ${dc}`);const Ks=NEEDLE_PUBLIC_KEY,ds="needle_isActiveInHierarchy",No="builtin_components",Xl="needle_editor_guid";function uo(s){try{(0,eval)(s)}catch(e){dv&&console.error(e)}}let uv,Hy=null;function cn(){return uv}function Tm(s){if(s==null){console.warn("Oh no: someone tried registering a non-existend gltf-loader. When you see this log it might mean that needle-engine is being imported multiple times. Please check your project setup.");return}Hy!==s&&(Hy=s,uv=new s)}function tC(s,e){if(typeof window!==void 0&&window.SPECTOR){console.log(window.SPECTOR);const t=new URLSearchParams(window.location.search);if(t.has("spector")){let i=function(){if(n>s.time.frame)return window.requestAnimationFrame(()=>i());const r=o.captureCanvas(e);r&&r instanceof Promise?r.then(()=>o.displayUI()):o.displayUI()};const n=Number.parseInt(t.get("spector")||"0")||0;console.log("Scheduled Spector capture at frame #"+n);const o=new window.SPECTOR.Spector;o.spyCanvases=!0,i();return}else T()&&console.debug("Spector available: Add '?spector=<frame>' to the URL to enable it and capture a frame.")}}const hi=Symbol("shadowDomOwner"),iC=x("debugpatch");function ou(s,e,t,i){const n=iC===e;if(!t&&!i)return;const o=e+"___needle";sC(s,e,t,i);const r=Object.getOwnPropertyDescriptor(s,e),a=s[e];n&&console.log("Patch",s.constructor.name,e,r,a),r?(n&&console.log("Apply patch with existing descriptor",s.constructor.name,e,r),typeof r.value=="function"&&(s[e]=qy(r.value,s,e))):(n&&console.log("Create patch with new property",s.constructor.name,e,r),Object.defineProperty(s,e,{set:function(l){if(typeof l=="function")this[o]=qy(l,s,e);else{const h=this[o];fv(s,e,this,h,l),this[o]=l,pv(s,e,this,h,l)}},get:function(){const l=this[o];return typeof l=="function"&&l[o]?l[o]:l}}))}function nC(s,e,t){const i=Am(s,e);if(i)for(let n=i.length-1;n>=0;n--){const o=i[n];o.prefix===t&&(o.prefix=null),o.postfix===t&&(o.postfix=null),!o.prefix&&!o.postfix&&i.splice(n,1)}}const Gy=Symbol("Needle:Patches:WrappedFunction");function qy(s,e,t){if(s[Gy])return s;const i=function(...n){fv(e,t,this,...n);const o=s.apply(this,n);return pv(e,t,this,o,...n),o};return i[Gy]=!0,i}const hd="Needle:Patches";function kp(){return globalThis[hd]||(globalThis[hd]=new WeakMap),globalThis[hd]}function Am(s,e){const t=kp().get(s);return t?t.get(e):null}function sC(s,e,t,i){let n=kp().get(s);n||(n=new Map,kp().set(s,n));let o=n.get(e);o||(o=[],n.set(e,o)),o.push({prefix:t,postfix:i})}function fv(s,e,t,...i){if(!t)return;const n=Am(s,e);if(n)for(const o of n)o.prefix?.call(t,...i)}function pv(s,e,t,i,...n){if(!t)return;const o=Am(s,e);if(o)for(const r of o)r.postfix?.call(t,i,...n)}const Pa=[];function ru(s){Pa.indexOf(s)===-1&&Pa.push(s)}function oC(s){const e=Pa.indexOf(s);e!==-1&&Pa.splice(e,1)}const Ma=[];function Dm(s){Ma.indexOf(s)===-1&&Ma.push(s)}function rC(s){const e=Ma.indexOf(s);e!==-1&&Ma.splice(e,1)}function mv(s){globalThis.dispatchEvent(new CustomEvent("needle-xrsession-start",{detail:s}));for(let e=0;e<Pa.length;e++)Pa[e](s)}function gv(s){globalThis.dispatchEvent(new CustomEvent("needle-xrsession-end",{detail:s}));for(let e=0;e<Ma.length;e++)Ma[e](s)}const Be=x("debuginput");var au=(s=>(s.Mouse="mouse",s.Touch="touch",s.Controller="controller",s.Hand="hand",s))(au||{}),Ce=(s=>(s.PointerDown="pointerdown",s.PointerUp="pointerup",s.PointerMove="pointermove",s.KeyDown="keydown",s.KeyUp="keyup",s.KeyPressed="keypress",s))(Ce||{});class ts extends PointerEvent{clientZ;deviceIndex;origin;source;mode;get isSpatial(){return this.mode!="screen"}get ray(){return this._ray||(this._ray=new c.Ray(this.space.worldPosition.clone(),this.space.worldForward.clone())),this._ray}set ray(e){this._ray=e}get hasRay(){return this._ray!==void 0}_ray;space;isClick=!1;isDoubleClick=!1;get used(){return this._used}_used=!1;use(){this._used=!0}get pointerId(){return this._pointerid}_pointerid;get pointerType(){return this._pointerType}_pointerType;buttonName=void 0;get type(){return this._type}_type;metadata={};intersections=new Array;constructor(e,t,i){super(e,i),this.clientZ=i.clientZ,this._pointerid=i.pointerId,this._pointerType=i.pointerType,this._type=e,this.deviceIndex=i.deviceIndex,this.origin=i.origin,this.source=t,this.mode=i.mode,this._ray=i.ray,this.space=i.device,this.buttonName=i.buttonName}_immediatePropagationStopped=!1;get immediatePropagationStopped(){return this._immediatePropagationStopped}_propagationStopped=!1;get propagationStopped(){return this._immediatePropagationStopped||this._propagationStopped}stopImmediatePropagation(){this._immediatePropagationStopped=!0,super.stopImmediatePropagation(),this.source?.stopImmediatePropagation()}stopPropagation(){this._propagationStopped=!0,super.stopPropagation(),this.source?.stopPropagation(),Be&&console.warn("Stop propagation...",this.pointerId,this.pointerType)}}class Tl extends KeyboardEvent{source;constructor(e,t,i){super(e,i),this.source=t}stopImmediatePropagation(){super.stopImmediatePropagation(),this.source?.stopImmediatePropagation()}}class aC{key;keyType;source;constructor(e){this.key=e.key,this.keyType=e.type,this.source=e}}var Jt=(s=>(s[s.Early=-100]="Early",s[s.Default=0]="Default",s[s.Late=100]="Late",s))(Jt||{});class yv{_eventListeners={};addEventListener(e,t,i){if(this._eventListeners[e]||(this._eventListeners[e]=[]),!t||typeof t!="function"){console.error("Invalid call to addEventListener: callback is required and must be a function!");return}i?i={...i}:i={};let n=0;i?.queue!=null&&(n=i.queue);const o=this._eventListeners[e],r=o.find(a=>a.priority===n);r?r.listeners.push({callback:t,options:i}):(o.push({priority:n,listeners:[{callback:t,options:i}]}),o.sort((a,l)=>a.priority-l.priority))}removeEventListener(e,t,i){if(!this._eventListeners[e]||!t)return;const n=this._eventListeners[e];if(i?.queue!=null){const o=n.find(a=>a.priority===i.queue);if(!o)return;const r=o.listeners.findIndex(a=>a.callback===t);r>=0&&o.listeners.splice(r,1)}else for(const o of n){const r=o.listeners.findIndex(a=>a.callback===t);r>=0&&o.listeners.splice(r,1)}}dispatchEvent(e){let t=!1;if(e instanceof Tl){const i=this._eventListeners[e.type];if(i)for(const n of i)for(let o=0;o<n.listeners.length;o++){const r=n.listeners[o];if(r.options?.signal?.aborted){n.listeners.splice(o,1),o--;continue}r.options.once&&(n.listeners.splice(o,1),o--),r.callback(e)}}if(e instanceof ts){const i=this._eventListeners[e.type];if(i)for(const n of i){if(t)break;for(let o=0;o<n.listeners.length;o++){const r=n.listeners[o];if(r.options?.signal?.aborted){n.listeners.splice(o,1),o--;continue}if(e.immediatePropagationStopped){t=!0,Be&&console.log("immediatePropagationStopped",e.type);break}else e.propagationStopped&&(t=!0,Be&&console.log("propagationStopped",e.type));r.options.once&&(n.listeners.splice(o,1),o--),r.callback(e)}}}}_doubleClickTimeThreshold=.2;_longPressTimeThreshold=1;get mousePosition(){return this._pointerPositions[0]}get mousePositionRC(){return this._pointerPositionsRC[0]}get mouseDown(){return this._pointerDown[0]}get mouseUp(){return this._pointerUp[0]}get mouseClick(){return this._pointerClick[0]}get mouseDoubleClick(){return this._pointerDoubleClick[0]}get mousePressed(){return this._pointerPressed[0]}get mouseWheelChanged(){return this.getMouseWheelChanged(0)}get click(){return this._pointerClick[0]}get doubleClick(){return this._pointerDoubleClick[0]}getGamepad(e=0){return typeof navigator<"u"&&"getGamepads"in navigator&&navigator.getGamepads()[e]||null}_setCursorTypes=[];setCursorPointer(){this.setCursor("pointer")}setCursorNormal(){this.unsetCursor("pointer")}setCursor(e){this._setCursorTypes.push(e),this._setCursorTypes.length>10&&this._setCursorTypes.shift(),this.updateCursor()}unsetCursor(e){for(let t=this._setCursorTypes.length-1;t>=0;t--)if(this._setCursorTypes[t]===e){this._setCursorTypes.splice(t,1),this.updateCursor();break}}updateCursor(){this._setCursorTypes?.length==0?this.context.domElement.style.cursor="default":this.context.domElement.style.cursor=this._setCursorTypes[this._setCursorTypes.length-1]}getIsPointerIdInUse(e){for(const t of this._pointerEventsPressed)if(t.pointerId===e&&t.used)return!0;return!1}getPointerPressedCount(){let e=0;for(let t=0;t<this._pointerPressed.length;t++)this._pointerPressed[t]&&e++;return e}getPointerPosition(e){return e>=this._pointerPositions.length?null:this._pointerPositions[e]}getPointerPositionLastFrame(e){return e>=this._pointerPositionsLastFrame.length?null:this._pointerPositionsLastFrame[e]}getPointerPositionDelta(e){return e>=this._pointerPositionsDelta.length?null:this._pointerPositionsDelta[e]}getPointerPositionRC(e){return e>=this._pointerPositionsRC.length?null:this._pointerPositionsRC[e]}getPointerDown(e){return e>=this._pointerDown.length?!1:this._pointerDown[e]}getPointerUp(e){return e>=this._pointerUp.length?!1:this._pointerUp[e]}getPointerPressed(e){return e>=this._pointerPressed.length?!1:this._pointerPressed[e]}getPointerClicked(e){return e>=this._pointerClick.length?!1:this._pointerClick[e]}getPointerDoubleClicked(e){return e>=this._pointerDoubleClick.length?!1:this._pointerDoubleClick[e]}getPointerDownTime(e){return e>=this._pointerDownTime.length?-1:this._pointerDownTime[e]}getPointerUpTime(e){return e>=this._pointerUpTime.length?-1:this._pointerUpTime[e]}getPointerLongPress(e){return e>=this._pointerDownTime.length?!1:this.getPointerPressed(e)&&this.context.time.time-this._pointerDownTime[e]>this._longPressTimeThreshold}getIsMouse(e){return e<0||e>=this._pointerTypes.length?!1:this._pointerTypes[e]==="mouse"}getIsTouch(e){return e<0||e>=this._pointerTypes.length?!1:this._pointerTypes[e]==="touch"}getTouchesPressedCount(){let e=0;for(let t=0;t<this._pointerPressed.length;t++)this._pointerPressed[t]&&this.getIsTouch(t)&&e++;return e}getMouseWheelChanged(e=0){return e>=this._mouseWheelChanged.length?!1:this._mouseWheelChanged[e]}getMouseWheelDeltaY(e=0){return e>=this._mouseWheelDeltaY.length?0:this._mouseWheelDeltaY[e]}getPointerEvent(e){if(!(e>=this._pointerEvent.length))return this._pointerEvent[e]??void 0}*foreachPointerId(e){for(let t=0;t<this._pointerTypes.length;t++)if(this._pointerIsActive(t)){if(e!==void 0){const i=this._pointerTypes[t];if(Array.isArray(e)){let n=!1;for(const o of e)if(i===o){n=!0;break}if(!n)continue}else if(e!==i)continue}yield t}}*foreachTouchId(){for(let e=0;e<this._pointerTypes.length;e++)this._pointerTypes[e]==="touch"&&this._pointerIsActive[e]&&(yield e)}_pointerIsActive(e){return e<0?!1:this._pointerPressed[e]||this._pointerDown[e]||this._pointerUp[e]}context;_pointerDown=[!1];_pointerUp=[!1];_pointerClick=[!1];_pointerDoubleClick=[!1];_pointerPressed=[!1];_pointerPositions=[new c.Vector2];_pointerPositionsLastFrame=[new c.Vector2];_pointerPositionsDelta=[new c.Vector2];_pointerPositionsRC=[new c.Vector2];_pointerPositionDown=[new c.Vector3];_pointerDownTime=[];_pointerUpTime=[];_pointerUpTimestamp=[];_pointerIds=[];_pointerTypes=[""];_mouseWheelChanged=[!1];_mouseWheelDeltaY=[0];_pointerEvent=[];_pointerEventsPressed=[];_pointerSpace=[];_pressedStack=new Map;onDownButton(e,t){let i=this._pressedStack.get(e);i||(i=[],this._pressedStack.set(e,i)),i.push(t)}onReleaseButton(e,t){const i=this._pressedStack.get(e);if(!i)return;const n=i.indexOf(t);n>=0&&i.splice(n,1)}getFirstPressedButtonForPointer(e){const t=this._pressedStack.get(e);if(t)return t[0]}getLatestPressedButtonForPointer(e){const t=this._pressedStack.get(e);if(t)return t[t.length-1]}getKeyDown(e){if(e!==void 0)return this.isKeyDown(e);for(const t in this.keysPressed){const i=this.keysPressed[t];if(i.startFrame===this.context.time.frameCount)return i.key}return null}getKeyPressed(e){if(e!==void 0)return this.isKeyPressed(e);for(const t in this.keysPressed){const i=this.keysPressed[t];if(i.pressed)return i.key}return null}getKeyUp(e){if(e!==void 0)return this.isKeyUp(e);for(const t in this.keysPressed){const i=this.keysPressed[t];return i.pressed===!1&&i.frame===this.context.time.frameCount}return null}isKeyDown(e){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;const t=this.getCodeForCommonKeyName(e);if(t!==null){for(const n of t)if(this.isKeyDown(n))return!0;return!1}const i=this.keysPressed[e];return i?i.startFrame===this.context.time.frameCount&&i.pressed:!1}isKeyUp(e){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;const t=this.getCodeForCommonKeyName(e);if(t!==null){for(const n of t)if(this.isKeyUp(n))return!0;return!1}const i=this.keysPressed[e];return i?i.frame===this.context.time.frameCount&&i.pressed===!1:!1}isKeyPressed(e){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;const t=this.getCodeForCommonKeyName(e);if(t!==null){for(const n of t)if(this.isKeyPressed(n))return!0;return!1}const i=this.keysPressed[e];return i&&i.pressed||!1}getCodeForCommonKeyName(e){if(e.length===1){if(e>="0"&&e<="9")return["Digit"+e];if(e>="a"&&e<="z")return["Key"+e.toUpperCase()];if(e==" ")return["Space"]}switch(e){case"shift":case"Shift":return["ShiftLeft","ShiftRight"];case"control":case"Control":return["ControlLeft","ControlRight"];case"alt":case"Alt":return["AltLeft","AltRight"]}return null}createInputEvent(e){switch(e.type){case"pointerdown":Be&&we("Create Pointer down"),this.onDownButton(e.deviceIndex,e.button),this.onDown(e);break;case"pointermove":Be&&we("Create Pointer move"),this.onMove(e);break;case"pointerup":Be&&we("Create Pointer up"),this.onUp(e),this.onReleaseButton(e.deviceIndex,e.button);break}}convertScreenspaceToRaycastSpace(e){return e.x=(e.x-this.context.domX)/this.context.domWidth*2-1,e.y=-((e.y-this.context.domY)/this.context.domHeight)*2+1,e}constructor(e){this.context=e,this.context.post_render_callbacks.push(this.onEndOfFrame)}_htmlEventSource;bindEvents(){this.unbindEvents(),this._htmlEventSource=this.context.renderer.domElement,window.addEventListener("contextmenu",this.onContextMenu),this._htmlEventSource.addEventListener("pointerdown",this.onPointerDown,{passive:!0}),window.addEventListener("pointermove",this.onPointerMove,{passive:!0,capture:!0}),window.addEventListener("pointerup",this.onPointerUp,{passive:!0}),window.addEventListener("pointercancel",this.onPointerCancel,{passive:!0}),window.addEventListener("touchstart",this.onTouchStart,{passive:!0}),window.addEventListener("touchmove",this.onTouchMove,{passive:!0}),window.addEventListener("touchend",this.onTouchEnd,{passive:!0}),this._htmlEventSource.addEventListener("wheel",this.onMouseWheel,{passive:!0}),window.addEventListener("wheel",this.onWheelWindow,{passive:!0}),window.addEventListener("keydown",this.onKeyDown,!1),window.addEventListener("keypress",this.onKeyPressed,!1),window.addEventListener("keyup",this.onKeyUp,!1),window.addEventListener("blur",this.onLostFocus)}unbindEvents(){for(const e in this._eventListeners)this._eventListeners[e].length=0;window.removeEventListener("contextmenu",this.onContextMenu),this._htmlEventSource?.removeEventListener("pointerdown",this.onPointerDown),window.removeEventListener("pointermove",this.onPointerMove),window.removeEventListener("pointerup",this.onPointerUp),window.removeEventListener("pointercancel",this.onPointerCancel),window.removeEventListener("touchstart",this.onTouchStart),window.removeEventListener("touchmove",this.onTouchMove),window.removeEventListener("touchend",this.onTouchEnd),this._htmlEventSource?.removeEventListener("wheel",this.onMouseWheel,!1),window.removeEventListener("wheel",this.onWheelWindow,!1),window.removeEventListener("keydown",this.onKeyDown,!1),window.removeEventListener("keypress",this.onKeyPressed,!1),window.removeEventListener("keyup",this.onKeyUp,!1),window.removeEventListener("blur",this.onLostFocus)}dispose(){const e=this.context.post_render_callbacks.indexOf(this.onEndOfFrame);e>=0&&this.context.post_render_callbacks.splice(e,1),this.unbindEvents()}onLostFocus=()=>{for(const e in this.keysPressed)this.keysPressed[e].pressed=!1};_receivedPointerMoveEventsThisFrame=new Array;onEndOfFrame=()=>{this._receivedPointerMoveEventsThisFrame.length=0;for(let e=0;e<this._pointerUp.length;e++)this._pointerUp[e]=!1;for(let e=0;e<this._pointerDown.length;e++)this._pointerDown[e]=!1;for(let e=0;e<this._pointerClick.length;e++)this._pointerClick[e]=!1;for(let e=0;e<this._pointerDoubleClick.length;e++)this._pointerDoubleClick[e]=!1;for(const e of this._pointerPositionsDelta)e.set(0,0);for(let e=0;e<this._mouseWheelChanged.length;e++)this._mouseWheelChanged[e]=!1;for(let e=0;e<this._mouseWheelDeltaY.length;e++)this._mouseWheelDeltaY[e]=0};canReceiveInput(e){return e.target===this.context.renderer?.domElement||e.target===this.context.domElement||this.context.isInAR||this.context.isInAR&&e.target===document.body&&exports.DeviceUtilities.isMozillaXR()?!0:(Be&&console.warn("CanReceiveInput:False for",e.target),!1)}onContextMenu=e=>{this.canReceiveInput(e)};keysPressed={};onKeyDown=e=>{if(Be&&console.log(`key down ${e.code}, ${this.context.application.hasFocus}`,e),!this.context.application.hasFocus)return;const t=this.keysPressed[e.code];if(t&&t.pressed)return;this.keysPressed[e.code]={pressed:!0,frame:this.context.time.frameCount+1,startFrame:this.context.time.frameCount+1,key:e.key,code:e.code};const i=new Tl("keydown",e,e);this.onDispatchEvent(i)};onKeyPressed=e=>{if(!this.context.application.hasFocus)return;const t=this.keysPressed[e.code];if(!t)return;t.pressed=!0,t.frame=this.context.time.frameCount+1;const i=new Tl("keypress",e,e);this.onDispatchEvent(i)};onKeyUp=e=>{if(!this.context.application.hasFocus)return;const t=this.keysPressed[e.code];if(!t)return;t.pressed=!1,t.frame=this.context.time.frameCount+1;const i=new Tl("keyup",e,e);this.onDispatchEvent(i)};onWheelWindow=e=>{document.pointerLockElement&&this.onMouseWheel(e)};onMouseWheel=e=>{if(this.canReceiveInput(e)===!1)return;this._mouseWheelDeltaY.length<=0&&this._mouseWheelDeltaY.push(0),this._mouseWheelChanged.length<=0&&this._mouseWheelChanged.push(!1),this._mouseWheelChanged[0]=!0;const t=this._mouseWheelDeltaY[0];this._mouseWheelDeltaY[0]=t+e.deltaY};onPointerDown=e=>{if(this.context.isInAR||this.canReceiveInput(e)===!1)return;e.target instanceof HTMLElement&&e.target.setPointerCapture(e.pointerId);const t=this.getPointerId(e);Be&&we(`pointer down #${t}, identifier:${e.pointerId}`);const i=this.getAndUpdateSpatialObjectForScreenPosition(t,e.clientX,e.clientY),n=new ts("pointerdown",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:t,button:e.button,clientX:e.clientX,clientY:e.clientY,pointerType:e.pointerType,buttonName:this.getButtonName(e),device:i,pressure:e.pressure});this.onDown(n)};onPointerMove=e=>{if(this.context.isInAR||this._receivedPointerMoveEventsThisFrame.includes(e.pointerId))return;this._receivedPointerMoveEventsThisFrame.push(e.pointerId);let t=e.button;e.pointerType==="mouse"&&(t=this.getFirstPressedButtonForPointer(0)??0);const i=this.getPointerId(e,t);t===-1&&(t=i);const n=this.getAndUpdateSpatialObjectForScreenPosition(i,e.clientX,e.clientY),o=new ts("pointermove",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:i,button:t,clientX:e.clientX,clientY:e.clientY,pointerType:e.pointerType,buttonName:this.getButtonName(e),device:n,pressure:e.pressure});this.onMove(o)};onPointerCancel=e=>{this.context.isInAR||(Be&&console.log("Pointer cancel",e),this.onPointerUp(e))};onPointerUp=e=>{if(this.context.isInAR)return;e.target instanceof HTMLElement&&e.target.releasePointerCapture(e.pointerId);const t=this.getPointerId(e),i=new ts("pointerup",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:t,button:e.button,clientX:e.clientX,clientY:e.clientY,pointerType:e.pointerType,buttonName:this.getButtonName(e),device:this.getAndUpdateSpatialObjectForScreenPosition(t,e.clientX,e.clientY),pressure:e.pressure});this.onUp(i),this._pointerIds[t]=-1,Be&&console.log("ID="+t,"PointerId="+e.pointerId,"ALL:",[...this._pointerIds])};getPointerId(e,t){return e.pointerType==="mouse"?0+(t??e.button):this.getPointerIndex(e.pointerId)}getButtonName(e){const t=e.button;if(e.pointerType==="mouse")switch(t){case 0:return"left";case 1:return"middle";case 2:return"right"}return"unknown"}onTouchStart=e=>{if(this.context.isInAR)for(let t=0;t<e.changedTouches.length;t++){const i=e.changedTouches[t],n=this.getPointerIndex(i.identifier),o=this.getAndUpdateSpatialObjectForScreenPosition(n,i.clientX,i.clientY),r=new ts("pointerdown",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:n,button:0,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",buttonName:"unknown",device:o,pressure:i.force});this.onDown(r)}};onTouchMove=e=>{if(this.context.isInAR)for(let t=0;t<e.changedTouches.length;t++){const i=e.changedTouches[t],n=this.getPointerIndex(i.identifier),o=this.getAndUpdateSpatialObjectForScreenPosition(n,i.clientX,i.clientY),r=new ts("pointermove",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:n,button:0,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",buttonName:"unknown",device:o,pressure:i.force});this.onMove(r)}};onTouchEnd=e=>{if(this.context.isInAR)for(let t=0;t<e.changedTouches.length;t++){const i=e.changedTouches[t],n=this.getPointerIndex(i.identifier),o=new ts("pointerup",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:n,button:0,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",buttonName:"unknown",device:this.getAndUpdateSpatialObjectForScreenPosition(n,i.clientX,i.clientY),pressure:i.force});this.onUp(o),this._pointerIds[n]=-1}};tempNearPlaneVector=new c.Vector3;tempFarPlaneVector=new c.Vector3;tempLookMatrix=new c.Matrix4;getAndUpdateSpatialObjectForScreenPosition(e,t,i){let n=this._pointerSpace[e];n||(n=new c.Object3D,this._pointerSpace[e]=n),this._pointerSpace[e]=n;const o=this.context.mainCamera;if(o){const r=this.tempNearPlaneVector.set(t,i,-1);this.convertScreenspaceToRaycastSpace(r);const a=this.tempFarPlaneVector.set(r.x,r.y,1);r.unproject(o),a.unproject(o);const l=o.worldUp||B(0,1,0).applyQuaternion(fe(o));this.tempLookMatrix.lookAt(a,r,l),n.position.set(r.x,r.y,r.z),n.quaternion.setFromRotationMatrix(this.tempLookMatrix)}return n}isInRect(e){if(this.context.isInXR)return!0;const t=this.context.domElement.getBoundingClientRect(),i=e.clientX,n=e.clientY,o=i>=t.x&&i<=t.right&&n>=t.y&&n<=t.bottom;return Be&&!o&&console.log("Not in rect",t,i,n),o}onDown(e){const t=e.pointerId;if(this.getPointerPressed(t)){Be&&console.warn(`Received pointerDown event for pointerId that is already pressed: ${t}/${e.button}`,Be?e:"");return}if(Be&&console.log(e.pointerType,"DOWN",t,e.button),!!this.isInRect(e)){for(this.setPointerState(t,this._pointerPressed,!0),this.setPointerState(t,this._pointerDown,!0),this.setPointerStateT(t,this._pointerEvent,e.source);t>=this._pointerTypes.length;)this._pointerTypes.push(e.pointerType);for(this._pointerTypes[t]=e.pointerType;t>=this._pointerPositionDown.length;)this._pointerPositionDown.push(new c.Vector3);for(this._pointerPositionDown[t].set(e.clientX,e.clientY,e.clientZ??0);t>=this._pointerPositions.length;)this._pointerPositions.push(new c.Vector2);this._pointerPositions[t].set(e.clientX,e.clientY),t>=this._pointerDownTime.length&&this._pointerDownTime.push(0),this._pointerDownTime[t]=this.context.time.realtimeSinceStartup,this.updatePointerPosition(e),this._pointerEventsPressed.push(e),this.onDispatchEvent(e)}}onMove(e){const t=e.pointerId,i=this.getPointerPressed(t);i===!1&&!this.isInRect(e)||e.pointerType==="touch"&&!i||(this.updatePointerPosition(e),this.setPointerStateT(t,this._pointerEvent,e.source),this.onDispatchEvent(e))}onUp(e){const t=e.pointerId;if(!this.getPointerPressed(t)){Be&&console.warn(`Received pointerUp for pointerId that is not pressed: ${t}/${e.button}`,Be?e:"");return}Be&&console.log(e.pointerType,"UP",t),this.setPointerState(t,this._pointerPressed,!1),this.setPointerStateT(t,this._pointerEvent,e.source),this.setPointerState(t,this._pointerUp,!0),this.updatePointerPosition(e);for(let l=this._pointerEventsPressed.length-1;l>=0;l--)if(this._pointerEventsPressed[l].pointerId===t){this._pointerEventsPressed.splice(l,1);break}if(!this._pointerPositionDown[t]){Be&&ue("[Received pointer up event without matching down event for button: "+t),console.warn("Received pointer up event without matching down event for button: "+t);return}const n=this._pointerUpTime[t],o=this._pointerDownTime[t],r=this.context.time.realtimeSinceStartup,a=r-o;if(t>=this._pointerUpTime.length&&this._pointerUpTime.push(-99),this._pointerUpTime[t]=r,a<1){let l=e.clientX-this._pointerPositionDown[t].x,h=e.clientY-this._pointerPositionDown[t].y,d=0;if(e.isSpatial&&e.clientZ!=null&&(d=e.clientZ-this._pointerPositionDown[t].z,l*=200,h*=200,d*=200),Math.abs(l)<5&&Math.abs(h)<5&&Math.abs(d)<5){this.setPointerState(t,this._pointerClick,!0),e.isClick=!0;const u=r-n;Be&&console.log("CLICK",t,l,h,d,u),u<this._doubleClickTimeThreshold&&u>0&&(this.setPointerState(t,this._pointerDoubleClick,!0),e.isDoubleClick=!0)}}this.onDispatchEvent(e)}updatePointerPosition(e){const t=e.pointerId;for(;t>=this._pointerPositions.length;)this._pointerPositions.push(new c.Vector2);for(;t>=this._pointerPositionsLastFrame.length;)this._pointerPositionsLastFrame.push(new c.Vector2);for(;t>=this._pointerPositionsDelta.length;)this._pointerPositionsDelta.push(new c.Vector2);const i=this._pointerPositionsLastFrame[t];i.copy(this._pointerPositions[t]);const n=this._pointerPositionsDelta[t];let o=e.clientX-i.x,r=e.clientY-i.y;if(e.source instanceof MouseEvent||e.source instanceof TouchEvent){const d=e.source;o===0&&d.movementX!==0&&(o=d.movementX||0),r===0&&d.movementY!==0&&(r=d.movementY||0)}n.x+=o,n.y+=r,this._pointerPositions[t].x=e.clientX,this._pointerPositions[t].y=e.clientY;const a=e.clientX,l=e.clientY;for(;t>=this._pointerPositionsRC.length;)this._pointerPositionsRC.push(new c.Vector2);const h=this._pointerPositionsRC[t];h.set(a,l),this.convertScreenspaceToRaycastSpace(h)}getPointerIndex(e){let t=-1;for(let i=0;i<this._pointerIds.length;i++){if(this._pointerIds[i]===e)return i;t===-1&&this._pointerIds[i]===-1&&(t=i)}return t!==-1?(this._pointerIds[t]=e,t):(Be&&console.log("PUSH pointerId:",e),this._pointerIds.push(e),this._pointerIds.length-1)}setPointerState(e,t,i){t[e]=i}setPointerStateT(e,t,i){return t[e]=i,i}onDispatchEvent(e){const t=U.Current;try{U.Current=this.context,this.dispatchEvent(e)}finally{U.Current=t}}}const pa=new c.Matrix4().makeRotationY(Math.PI),Ai=new c.Quaternion().setFromAxisAngle(new c.Vector3(0,1,0),Math.PI),lC=x("debugwebxr");class cC{priority=-1e5;gameObject;isXRRig(){return!0}get isActive(){return this.gameObject.visible}constructor(){if(this.gameObject=new c.Object3D,this.gameObject.name="Implicit XR Rig",lC){const e=zm(16733661);e.position.y+=.5,this.gameObject.add(e)}}}const Xn=x("debugwebxr"),Th=x("debugcustomgesture"),hC="https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles",dC="generic-trigger",uC=new c.Quaternion().setFromEuler(new c.Euler(c.MathUtils.degToRad(0),c.MathUtils.degToRad(-90),c.MathUtils.degToRad(-90))),fC=new c.Vector3(.04,-.04,0);class Lm{xr;get context(){return this.xr.context}inputSource;index=0;emitEvents=!0;get connected(){return this._connected}_connected=!0;get isTracking(){return this._isTracking}_isTracking=!1;get gamepad(){return this.__gamepad??=this.inputSource.gamepad}__gamepad;get isHand(){return this.hand!=null}get hand(){return this.__hand??=this.inputSource.hand}__hand;get handObject(){return this.context.renderer.xr.getHand(this.index)}get profiles(){return this.inputSource.profiles}get layout(){return this._layout}get targetRayMode(){return this.inputSource.targetRayMode}get targetRaySpace(){return this.inputSource.targetRaySpace}get gripSpace(){return this.inputSource.gripSpace}get side(){return this.__side??=this.inputSource.handedness}__side=void 0;get isRight(){return this.side==="right"}get isLeft(){return this.side==="left"}get isStylus(){return this._isMxInk}getHitTestSource(){return this._hitTestSource||this._requestHitTestSource(),this._hitTestSource}get hasHitTestSource(){return this._hitTestSource}cancelHitTestSource(){this._hitTestSource&&(this._hitTestSource.cancel(),this._hitTestSource=void 0)}_hitTestSource=void 0;_hasSelectEvent=!1;get hasSelectEvent(){return this._hasSelectEvent}_isMxInk=!1;_isMetaQuestTouchController=!1;getHitTest(){return this.xr.getHitTest(this)}_handJointPoses=new Map;getHandJointPose(e,t){if(t=t||this.xr.frame,!this.hand||!t?.getJointPose||!this.xr.referenceSpace)return null;let i=this._handJointPoses?.get(e);return i||(i=t.getJointPose(e,this.xr.referenceSpace),i&&this._handJointPoses.set(e,i),i)}_gripMatrix=new c.Matrix4;_gripPosition=new c.Vector3;_gripQuaternion=new c.Quaternion;_linearVelocity=new c.Vector3;_rayPositionRaw=new c.Vector3;_rayRotationRaw=new c.Quaternion;_rayMatrix=new c.Matrix4;_rayPosition=new c.Vector3;_rayQuaternion=new c.Quaternion;get gripPosition(){return B(this._gripPosition)}get gripQuaternion(){return Zt(this._gripQuaternion)}get gripMatrix(){return this._gripMatrix}get gripLinearVelocity(){return B(this._linearVelocity).applyQuaternion(Ai)}get rayPosition(){return B(this._rayPosition)}get rayQuaternion(){return Zt(this._rayQuaternion)}get gripWorldPosition(){return B(this._gripWorldPosition)}_gripWorldPosition=new c.Vector3;get gripWorldQuaternion(){return Zt(this._gripWorldQuaternion)}_gripWorldQuaternion=new c.Quaternion;get rayWorldPosition(){return B(this._rayWorldPosition)}_rayWorldPosition=new c.Vector3;updateRayWorldPosition(){const e=this.xr.context.mainCamera?.parent;this._rayWorldPosition.copy(this._rayPositionRaw),e&&this._rayWorldPosition.applyMatrix4(e.matrixWorld)}get rayWorldQuaternion(){return Zt(this._rayWorldQuaternion)}_rayWorldQuaternion=new c.Quaternion;get pinchPosition(){return B(this._pinchPosition)}_pinchPosition=new c.Vector3;updateRayWorldQuaternion(){const e=this.xr.context.mainCamera?.parent,t=e?fe(e):void 0;this._rayWorldQuaternion.copy(this._rayRotationRaw).multiply(Ai),t&&this._rayWorldQuaternion.premultiply(t)}get ray(){return this._ray.origin.copy(this.rayWorldPosition),this._ray.direction.copy(B(0,0,1).applyQuaternion(this.rayWorldQuaternion)),this._ray}_ray;_hand_wristDotUp=void 0;get handWristDotUp(){if(this._hand_wristDotUp!==void 0)return this._hand_wristDotUp;const e=this.handObject?.joints.wrist;if(e){const t=B(0,1,0).applyQuaternion(e.quaternion),i=B(0,1,0).dot(t);return this._hand_wristDotUp=i}}get isHandUpsideDown(){return this.handWristDotUp!==void 0?this.handWristDotUp<-.7:!1}get isTeleportGesture(){return this.isHandUpsideDown&&this.getGesture("pinch")?.isDown}get object(){return this._object}_object;_gripSpaceObject;_raySpaceObject;model=null;_debugAxesHelper=new c.AxesHelper(.15);_debugGripAxesHelper=new c.AxesHelper(.07);_debugRayAxesHelper=new c.AxesHelper(.07);async getModelUrl(){return this.getMotionController?.then(e=>e?.assetUrl||null)}constructor(e,t,i){this.xr=e,this.inputSource=t,this.index=i,this._object=new c.Object3D,this._object.name=`NeedleXRController_${i}`,Xn&&(this._object.add(this._debugAxesHelper),this._gripSpaceObject=new c.Object3D,this._raySpaceObject=new c.Object3D,this._gripSpaceObject.name=`NeedleXRController_${i}_gripSpace`,this._raySpaceObject.name=`NeedleXRController_${i}_raySpace`,this._gripSpaceObject.add(this._debugGripAxesHelper),this._raySpaceObject.add(this._debugRayAxesHelper),this.xr.context.scene.add(this._gripSpaceObject),this.xr.context.scene.add(this._raySpaceObject)),this.xr.context.scene.add(this._object),this._ray=new c.Ray,this.pointerInit={origin:this,pointerType:this.hand?"hand":"controller",deviceIndex:this.index,pointerId:-1,mode:this.inputSource.targetRayMode,ray:this._ray,device:this._object,buttonName:"none"},this.initialize(),this.subscribeEvents()}_hitTestSourcePromise=null;_requestHitTestSource(){return this._hitTestSourcePromise?this._hitTestSourcePromise:this.xr.mode==="immersive-ar"&&this.inputSource.targetRayMode==="tracked-pointer"&&this.xr.session.requestHitTestSourceForTransientInput?this._hitTestSourcePromise=this.xr.session.requestHitTestSourceForTransientInput({profile:this.inputSource.profiles[0],offsetRay:new XRRay})?.then(e=>(this._hitTestSourcePromise=null,this.connected?this._hitTestSource=e:(e.cancel(),null)))??null:null}onPointerHits=e=>{};onUpdate(e){this.onUpdateFrame(e),this.updateInputEvents(),this.onUpdateMove()}onRenderDebug(){j.DrawSphere(this.rayWorldPosition,.003),j.DrawDirection(this.rayWorldPosition,B(0,0,10).applyQuaternion(this.rayWorldQuaternion));const t=(this.inputSource.gripSpace?this.gripWorldPosition:this.object.worldPosition).sub(this.object.worldForward.multiplyScalar(.1)),i=this.inputSource.profiles.join(`
146
146
  `);let n=`Controller[${this.index}] (${this.inputSource.targetRayMode}, ${this.side})
147
147
  C:${this.connected?"x":"-"} T:${this.isTracking?"x":"-"} Hand:${this.inputSource.hand?"x":"-"} Pen: ${this._isMxInk?"x":"-"}`;if(this.inputSource.hand&&(n+=`
@@ -165,7 +165,7 @@ See https://engine.needle.tools/docs/scripting.html#special-lifecycle-hooks for
165
165
  `+Mi):console.debug("Connected to networking backend",Mi),n(!0),this.onSendQueued(sn.OnConnection)}).onClose(h=>{this._connectingToWebsocketPromise=null,this.connected=!1,this._isInRoom=!1,n(!1);let d="Websocket connection closed...";Mi?.includes("/socket")||(d+=' Do you perhaps mean to connect to "/socket"?'),console.error(d)}).onError(h=>{console.error("Websocket connection failed..."),n(!1),ei.sendEvent(this.context,"networking",{event:"connection_error"})}).onRetry(()=>{console.log("Retry connecting to networking websocket")}).build();l.addEventListener(o.WebsocketEvent.message,(h,d)=>{this.onMessage(h,d)})})}onMessage(e,t){const i=t.data;try{if(typeof i!="string"){i.size&&this.handleIncomingBinaryMessage(i);return}const n=JSON.parse(i);if(Array.isArray(n))for(const o of n)this.handleIncomingStringMessage(o);else this.handleIncomingStringMessage(n);return}catch(n){Xt&&i==="pong"?console.log("<<",i):T()&&console.error("Failed to parse message",n)}}async handleIncomingBinaryMessage(e){Dh&&console.log("<< bin",this.context.time.frame);const t=await e.arrayBuffer();var i=new Uint8Array(t);const n=new re.ByteBuffer(i),o=n.getBufferIdentifier(),r=this._listenersBinary[o],a=bv(n),l=vv(a);if(l&&typeof l=="string"&&(this._state[l]=a),!r)return;const h=a??n;for(const d of r)d(h)}handleIncomingStringMessage(e){if(Xt&&console.log("<<",e.key??e),e.key)switch(e.key){case"connection-start-info":if(e.data){const r=e.data;r&&(console.assert(r.id!==void 0&&r.id!==null&&r.id.length>0,"server did not send connection id",r.id),console.debug("Your id is: "+r.id,this.context.alias??""),this._connectionId=r.id,ei.sendEvent(this.context,"networking",{event:"connected"}))}else console.warn("Expected connection id in "+e.key);break;case"joined-room":if(Xt&&console.log(e),e){this._isInRoom=!0;const r=e;this._currentRoomName=r.room,this._currentRoomViewId=r.viewId,this._currentRoomAllowEditing=r.allowEditing??!0,this._currentInRoom.length=0,this._currentInRoom.push(...r.inRoom),(Dh||T())&&console.debug("Joined Needle Engine Room: "+r.room);const a=new URL(window.location.href);a.searchParams.has("room")&&a.searchParams.delete("room"),a.searchParams.set("view",this._currentRoomViewId),console.debug(`Room view id: ${this._currentRoomViewId}
166
166
  ${a.href}`)}this.onSendQueued(sn.OnRoomJoin),ei.sendEvent(this.context,"networking",{event:"joined_room",room:this._currentRoomName});break;case"left-room":const n=e;n.room===this.currentRoomName&&(this._isInRoom=!1,this._currentRoomName=null,this._currentRoomAllowEditing=!0,this._currentInRoom.length=0,(Dh||T())&&console.debug("Left Needle Engine Room: "+n.room)),ei.sendEvent(this.context,"networking",{event:"left_room",room:n.room});break;case"user-joined-room":if(e.data){const r=e.data;this._currentInRoom.push(r.userId),Xt&&console.log(r.userId+" joined","now in room:",this._currentInRoom)}break;case"user-left-room":if(e.data){const r=e.data,a=this._currentInRoom.indexOf(r.userId);a>=0&&(Xt&&console.log(r.userId+" left","now in room:",this._currentInRoom),this._currentInRoom.splice(a,1)),r.userId===this.connectionId&&console.log("you left the room")}break;case"all-room-state-deleted":Xt&&console.log("RECEIVED all-room-state-deleted"),this._state={};break;case"ping":case"pong":const o=e.data?.time;o&&(this._currentDelay=this.context.time.time-o),Xt&&console.log(`Current latency: ${(this._currentDelay*1e3).toFixed()} ms`,"Clients in room: "+this._currentInRoom?.length);break}const t=e.data;t&&(this._state[t.guid]=t);let i=this._listeners[e.key];if(i){i=[...i];for(const n of i)try{n(e.data)}catch(o){console.error('Error invoking callback for "'+e.key+'"',o)}}}toMessage(e,t){return{key:e,data:t}}sendWithWebsocket(e,t,i=sn.OnRoomJoin){if(!this._ws){const o=this._waitingForSocket[i]||[];o.push(()=>this.sendWithWebsocket(e,t,i)),this._waitingForSocket[i]=o;return}const n=JSON.stringify(this.toMessage(e,t));Xt&&console.log(">>",e),this._ws.send(n)}onSendQueued(e){const t=this._waitingForSocket[e];if(t){for(const i of t)i();t.length=0}}}const Ql=x("debugwebxr");class yf{controllerStates=[];userId;context;userStateEvtName;constructor(e,t){this.userId=e,this.context=t,this.userStateEvtName="xr-sync-user-state-"+e,this.context.connection.beginListen(this.userStateEvtName,this.onReceivedControllerState)}dispose(){this.context.connection.stopListen(this.userStateEvtName,this.onReceivedControllerState)}onReceivedControllerState=e=>{Ql&&console.log(`XRSync: Received change for ${this.userId}: ${e.type} ${e.handedness}; tracked=${e.isTracking}`);let t=!1;for(let i=0;i<this.controllerStates.length;i++)if(this.controllerStates[i].index===e.index){this.controllerStates[i]=e,t=!0;break}t||this.controllerStates.push(e)};update(e){if(this.context.connection.isConnected!=!1){for(let t=this.controllerStates.length-1;t>=0;t--){const i=this.controllerStates[t];let n=!1;for(let o=0;o<e.controllers.length;o++)e.controllers[o].index===i.index&&(n=!0);n||(Ql&&console.log(`XRSync: ${i.type} ${i.handedness} removed`,i.index),this.controllerStates.splice(t,1),this.sendControllerRemoved(i))}for(const t of e.controllers)this.updateControllerStates(t)}}onExitXR(e){for(const t of this.controllerStates)this.sendControllerRemoved(t);this.controllerStates.length=0}sendControllerRemoved(e){e.isTracking=!1,e.guid="",this.context.connection.send(this.userStateEvtName,e),this.context.connection.sendDeleteRemoteState(e.guid)}updateControllerStates(e){const t=this.controllerStates.find(i=>i.index===e.index);if(t){let i=!1;i||=t.isTracking!=e.isTracking,i&&(t.isTracking=e.isTracking,this.context.connection.send(this.userStateEvtName,t))}else{const i={guid:this.userId+"-"+e.index,isTracking:e.isTracking,handedness:e.side,index:e.index,type:e.hand?"hand":"controller"};this.controllerStates.push(i),this.context.connection.send(this.userStateEvtName,i),Ql&&console.log(`XRSync: ${i.type} ${i.handedness} added`,i.index)}}}class Mv{hasState(e){return e?this._states.has(e):!1}isTracking(e,t){if(!e)return;const i=this._states.get(e);return i?i.controllerStates.find(o=>o.handedness===t)?.isTracking||!1:void 0}getDeviceType(e,t){if(!e)return;const i=this._states.get(e);return i?i.controllerStates.find(o=>o.handedness===t)?.type||"unknown":void 0}context;constructor(e){this.context=e,this.context.connection.beginListen(Y.JoinedRoom,this.onJoinedRoom),this.context.connection.beginListen(Y.LeftRoom,this.onLeftRoom),this.context.connection.beginListen(Y.UserJoinedRoom,this.onOtherUserJoinedRoom),this.context.connection.beginListen(Y.UserLeftRoom,this.onOtherUserLeftRoom)}destroy(){this.context.connection.stopListen(Y.JoinedRoom,this.onJoinedRoom),this.context.connection.stopListen(Y.LeftRoom,this.onLeftRoom),this.context.connection.stopListen(Y.UserJoinedRoom,this.onOtherUserJoinedRoom),this.context.connection.stopListen(Y.UserLeftRoom,this.onOtherUserLeftRoom)}onJoinedRoom=()=>{if(this.context.connection.connectionId){this._states.has(this.context.connection.connectionId)||(Ql&&console.log("XRSync: Local user joined room",this.context.connection.connectionId),this._states.set(this.context.connection.connectionId,new yf(this.context.connection.connectionId,this.context)));for(const e of this.context.connection.usersInRoom())this._states.has(e)||this._states.set(e,new yf(e,this.context))}};onLeftRoom=()=>{this.context.connection.connectionId&&(this._states.has(this.context.connection.connectionId)||(this._states.get(this.context.connection.connectionId)?.dispose(),this._states.delete(this.context.connection.connectionId)))};onOtherUserJoinedRoom=e=>{const t=e.userId;this._states.has(t)||(Ql&&console.log("XRSync: Remote user joined room",t),this._states.set(t,new yf(t,this.context)))};onOtherUserLeftRoom=e=>{const t=e.userId;this._states.has(t)||(this._states.get(t)?.dispose(),this._states.delete(t))};_states=new Map;onUpdate(e){this.context.connection.isConnected&&this.context.connection.connectionId&&this._states.get(this.context.connection.connectionId)?.update(e)}onExitXR(e){this.context.connection.isConnected&&this.context.connection.connectionId&&this._states.get(this.context.connection.connectionId)?.onExitXR(e)}}class t_{_fadeToColorQuad;_fadeToColorMaterial;constructor(){this._fadeToColorMaterial=new c.MeshBasicMaterial({color:0,transparent:!0,depthTest:!1,fog:!1,side:c.DoubleSide}),this._fadeToColorQuad=new c.Mesh(new c.PlaneGeometry(10,10),this._fadeToColorMaterial)}dispose(){this._fadeToColorQuad.geometry.dispose(),this._fadeToColorMaterial.dispose()}update(e,t){const i=this._fadeToColorQuad,n=this._fadeToColorMaterial;i.parent!==e&&n.opacity>0?e.add(i):n.opacity===0&&i.removeFromParent(),i.layers.set(2),i.material=this._fadeToColorMaterial,i.position.z=-1,i.renderOrder=1/0;const o=this._requestedFadeValue;n.opacity=I.lerp(n.opacity,o,t/.03),Math.abs(n.opacity-o)<=.01&&this._transitionResolve&&(this._transitionResolve(),this._transitionResolve=null,this._transitionPromise=null,this._requestedFadeValue=0)}remove(){this._fadeToColorQuad.removeFromParent()}fadeTransition(){if(this._transitionPromise)return this._transitionPromise;this._requestedFadeValue=1;const e=new Promise(t=>{this._transitionResolve=t});return this._transitionPromise=e,e}_requestedFadeValue=0;_transitionPromise=null;_transitionResolve=null}const wC='<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 187.74"><defs><linearGradient id="a" x1="89.64" y1="184.81" x2="90.48" y2="21.85" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#62d399"/><stop offset=".51" stop-color="#acd842"/><stop offset=".9" stop-color="#d7db0a"/></linearGradient><linearGradient id="b" x1="69.68" y1="178.9" x2="68.08" y2="16.77" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#0ba398"/><stop offset=".5" stop-color="#4ca352"/><stop offset="1" stop-color="#76a30a"/></linearGradient><linearGradient id="c" x1="36.6" y1="152.17" x2="34.7" y2="84.19" gradientUnits="userSpaceOnUse"><stop offset=".19" stop-color="#36a382"/><stop offset=".54" stop-color="#49a459"/><stop offset="1" stop-color="#76a30b"/></linearGradient><linearGradient id="d" x1="15.82" y1="153.24" x2="18" y2="90.86" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#267880"/><stop offset=".51" stop-color="#457a5c"/><stop offset="1" stop-color="#717516"/></linearGradient><linearGradient id="e" x1="135.08" y1="135.43" x2="148.93" y2="63.47" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#b0d939"/><stop offset="1" stop-color="#eadb04"/></linearGradient><linearGradient id="f" x1="-4163.25" y1="2285.12" x2="-4160.81" y2="2215.34" gradientTransform="rotate(20 4088.49 13316.712)" gradientUnits="userSpaceOnUse"><stop offset=".17" stop-color="#74af52"/><stop offset=".48" stop-color="#99be32"/><stop offset="1" stop-color="#c0c40a"/></linearGradient><symbol id="g" viewBox="0 0 160 187.74"><path style="fill:url(#a)" d="M79.32 36.98v150.76L95 174.54l6.59-156.31-22.27 18.75z"/><path style="fill:url(#b)" d="M79.32 36.98 57.05 18.23l6.59 156.31 15.68 13.2V36.98z"/><path style="fill:url(#c)" d="m25.19 104.83 8.63 49.04 12.5-14.95-2.46-56.42-18.67 22.33z"/><path style="fill:url(#d)" d="M25.19 104.83 0 90.24l16.97 53.86 16.85 9.77-8.63-49.04z"/><path style="fill:#9c3" d="M43.86 82.5 18.69 67.98 0 90.24l25.18 14.59L43.86 82.5z"/><path style="fill:url(#e)" d="m134.82 78.69-9.97 56.5 15.58-9.04L160 64.1l-25.18 14.59z"/><path style="fill:url(#f)" d="m134.82 78.69-18.68-22.33-2.86 65 11.57 13.83 9.97-56.5z"/><path style="fill:#ffe113" d="m160 64.1-18.69-22.26-25.17 14.52 18.67 22.33L160 64.1z"/><path style="fill:#f3e600" d="M101.59 18.23 79.32 0 57.05 18.23l22.27 18.75 22.27-18.75z"/></symbol></defs><use width="160" height="187.74" xlink:href="#g"/></svg>',xC=btoa(wC),SC="data:image/svg+xml;base64,"+xC,Oa=SC,CC=`<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'> <svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" version="1.1" viewBox="0 0 1014 282" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m665.95 132.73v44.88l-10.56-8.4c-0.8-0.64-1.2-1.44-1.2-2.4v-32.4c0-6.48-4.12-9.72-12.36-9.72-2.16 0-4.18 0.4-6.06 1.2s-3.54 1.8-4.98 3-2.56 2.5-3.36 3.9-1.2 2.7-1.2 3.9v40.92l-10.68-8.4c-0.72-0.64-1.08-1.44-1.08-2.4v-53.76l10.92 8.52c0.32 0.24 0.56 0.44 0.72 0.6s0.36 0.32 0.6 0.48c0.96-1.2 2.14-2.28 3.54-3.24s2.92-1.76 4.56-2.4 3.34-1.14 5.1-1.5 3.44-0.54 5.04-0.54c1.44 0 2.92 0.04 4.44 0.12s2.84 0.28 3.96 0.6c4.56 1.12 7.8 3.12 9.72 6s2.88 6.56 2.88 11.04z" fill-rule="nonzero"/> </g> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m732.38 146.05c0 0.88 0.02 1.5 0.06 1.86s-0.02 0.98-0.18 1.86h-7.08c-2.08 0-4.44-0.02-7.08-0.06s-5.36-0.06-8.16-0.06h-22.08c0 2.88 0.56 5.36 1.68 7.44s2.6 3.8 4.44 5.16 3.94 2.36 6.3 3 4.74 0.96 7.14 0.96c3.04 0 5.9-0.76 8.58-2.28s4.94-3.52 6.78-6c0.64 0.56 1.54 1.48 2.7 2.76s2.94 3.2 5.34 5.76c-2.8 3.36-6.22 6.02-10.26 7.98s-8.42 2.94-13.14 2.94-8.92-0.64-12.84-1.92-7.32-3.24-10.2-5.88-5.12-5.98-6.72-10.02-2.4-8.82-2.4-14.34c0-4.96 0.66-9.42 1.98-13.38s3.22-7.32 5.7-10.08 5.44-4.9 8.88-6.42 7.32-2.28 11.64-2.28c5.76 0 10.52 0.88 14.28 2.64s6.72 4.16 8.88 7.2 3.66 6.54 4.5 10.5 1.26 8.18 1.26 12.66zm-29.4-22.8c-2.16 0.16-4.16 0.72-6 1.68s-3.42 2.2-4.74 3.72-2.36 3.28-3.12 5.28-1.14 4.12-1.14 6.36h33.12c0-2-0.22-4.06-0.66-6.18s-1.3-4.02-2.58-5.7-3.1-3.02-5.46-4.02-5.5-1.38-9.42-1.14z" fill-rule="nonzero"/> </g> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m795.93 146.05c0 0.88 0.02 1.5 0.06 1.86s-0.02 0.98-0.18 1.86h-7.08c-2.08 0-4.44-0.02-7.08-0.06s-5.36-0.06-8.16-0.06h-22.08c0 2.88 0.56 5.36 1.68 7.44s2.6 3.8 4.44 5.16 3.94 2.36 6.3 3 4.74 0.96 7.14 0.96c3.04 0 5.9-0.76 8.58-2.28s4.94-3.52 6.78-6c0.64 0.56 1.54 1.48 2.7 2.76s2.94 3.2 5.34 5.76c-2.8 3.36-6.22 6.02-10.26 7.98s-8.42 2.94-13.14 2.94-8.92-0.64-12.84-1.92-7.32-3.24-10.2-5.88-5.12-5.98-6.72-10.02-2.4-8.82-2.4-14.34c0-4.96 0.66-9.42 1.98-13.38s3.22-7.32 5.7-10.08 5.44-4.9 8.88-6.42 7.32-2.28 11.64-2.28c5.76 0 10.52 0.88 14.28 2.64s6.72 4.16 8.88 7.2 3.66 6.54 4.5 10.5 1.26 8.18 1.26 12.66zm-29.4-22.8c-2.16 0.16-4.16 0.72-6 1.68s-3.42 2.2-4.74 3.72-2.36 3.28-3.12 5.28-1.14 4.12-1.14 6.36h33.12c0-2-0.22-4.06-0.66-6.18s-1.3-4.02-2.58-5.7-3.1-3.02-5.46-4.02-5.5-1.38-9.42-1.14z" fill-rule="nonzero"/> </g> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m858.57 97.21c0.64 0.48 0.96 1.16 0.96 2.04v74.88c-0.08 1.04-0.12 2.12-0.12 3.24-1.84-1.52-3.56-2.92-5.16-4.2-1.36-1.12-2.66-2.18-3.9-3.18s-2.06-1.66-2.46-1.98c-1.76 2.48-4.26 4.44-7.5 5.88s-7.02 2.16-11.34 2.16c-3.84 0-7.4-0.7-10.68-2.1s-6.14-3.44-8.58-6.12-4.34-5.94-5.7-9.78-2.04-8.16-2.04-12.96c0-4.32 0.78-8.34 2.34-12.06s3.6-6.92 6.12-9.6 5.38-4.78 8.58-6.3 6.48-2.28 9.84-2.28c2.56 0 4.82 0.22 6.78 0.66s3.68 1.06 5.16 1.86 2.78 1.74 3.9 2.82 2.16 2.22 3.12 3.42v-35.04l10.68 8.64zm-27.96 67.92c3.6 0 6.52-0.68 8.76-2.04s3.98-3.06 5.22-5.1 2.1-4.22 2.58-6.54 0.72-4.44 0.72-6.36v-1.2c0-1.12-0.22-2.7-0.66-4.74s-1.28-4.06-2.52-6.06-3-3.7-5.28-5.1-5.22-2.02-8.82-1.86c-3.44 0-6.26 0.74-8.46 2.22s-3.96 3.26-5.28 5.34-2.24 4.2-2.76 6.36-0.78 3.92-0.78 5.28c0 1.84 0.24 3.92 0.72 6.24s1.36 4.48 2.64 6.48 3.04 3.68 5.28 5.04 5.12 2.04 8.64 2.04z" fill-rule="nonzero"/> </g> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m882.81 97.09c0.64 0.48 0.96 1.12 0.96 1.92l-0.12 41.04v37.08l-10.56-8.4c-0.72-0.64-1.08-1.44-1.08-2.4v-77.88l10.8 8.64z" fill-rule="nonzero"/> </g> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m950.36 146.05c0 0.88 0.02 1.5 0.06 1.86s-0.02 0.98-0.18 1.86h-7.08c-2.08 0-4.44-0.02-7.08-0.06s-5.36-0.06-8.16-0.06h-22.08c0 2.88 0.56 5.36 1.68 7.44s2.6 3.8 4.44 5.16 3.94 2.36 6.3 3 4.74 0.96 7.14 0.96c3.04 0 5.9-0.76 8.58-2.28s4.94-3.52 6.78-6c0.64 0.56 1.54 1.48 2.7 2.76s2.94 3.2 5.34 5.76c-2.8 3.36-6.22 6.02-10.26 7.98s-8.42 2.94-13.14 2.94-8.92-0.64-12.84-1.92-7.32-3.24-10.2-5.88-5.12-5.98-6.72-10.02-2.4-8.82-2.4-14.34c0-4.96 0.66-9.42 1.98-13.38s3.22-7.32 5.7-10.08 5.44-4.9 8.88-6.42 7.32-2.28 11.64-2.28c5.76 0 10.52 0.88 14.28 2.64s6.72 4.16 8.88 7.2 3.66 6.54 4.5 10.5 1.26 8.18 1.26 12.66zm-29.4-22.8c-2.16 0.16-4.16 0.72-6 1.68s-3.42 2.2-4.74 3.72-2.36 3.28-3.12 5.28-1.14 4.12-1.14 6.36h33.12c0-2-0.22-4.06-0.66-6.18s-1.3-4.02-2.58-5.7-3.1-3.02-5.46-4.02-5.5-1.38-9.42-1.14z" fill-rule="nonzero"/> </g> <g transform="matrix(1.8559 0 0 .7642 45.348 36.475)"> <g transform="translate(2.7114)"> <path d="m3.935 173.02c-0.331 0-0.497-0.402-0.497-1.207v-51.002c0-0.738 0.138-1.107 0.414-1.107h1.781c0.277 0 0.415 0.335 0.415 1.006v5.935c0 0.336 0.027 0.553 0.083 0.654 0.055 0.101 0.151-0.017 0.289-0.352 0.912-1.744 1.754-3.236 2.527-4.477 0.773-1.24 1.554-2.179 2.341-2.816s1.65-0.956 2.588-0.956c1.685 0 3.011 0.922 3.977 2.766 0.967 1.845 1.602 3.84 1.905 5.986 0.056 0.268 0.139 0.369 0.249 0.302s0.221-0.235 0.331-0.503c0.939-1.811 1.802-3.353 2.589-4.628 0.787-1.274 1.581-2.246 2.382-2.917s1.671-1.006 2.61-1.006c2.016 0 3.569 1.392 4.66 4.175 1.09 2.783 1.636 6.421 1.636 10.915v37.925c0 0.871-0.18 1.307-0.539 1.307h-1.739c-0.138 0-0.249-0.1-0.332-0.301-0.083-0.202-0.124-0.503-0.124-0.906v-36.315c0-3.555-0.338-6.321-1.015-8.3-0.676-1.978-1.76-2.967-3.251-2.967-0.884 0-1.726 0.386-2.527 1.157s-1.519 1.727-2.154 2.867-1.201 2.213-1.699 3.219c-0.248 0.469-0.421 0.905-0.517 1.308-0.097 0.402-0.145 0.972-0.145 1.71v37.221c0 0.871-0.166 1.307-0.497 1.307h-1.74c-0.166 0-0.29-0.1-0.373-0.301-0.083-0.202-0.124-0.503-0.124-0.906v-36.315c0-3.555-0.332-6.321-0.994-8.3-0.663-1.978-1.754-2.967-3.273-2.967-1.242 0-2.375 0.704-3.396 2.112-1.022 1.409-2.223 3.555-3.604 6.439v39.031c0 0.805-0.18 1.207-0.539 1.207h-1.698z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m53.642 166.28c-1.077 2.549-2.237 4.477-3.479 5.785-1.243 1.307-2.61 1.961-4.101 1.961-2.154 0-3.853-1.324-5.095-3.973-1.243-2.649-1.864-6.187-1.864-10.613 0-3.488 0.4-6.489 1.201-9.004s1.988-4.51 3.562-5.985c1.574-1.476 3.521-2.414 5.841-2.817l3.686-0.704c0.221-0.067 0.394-0.218 0.518-0.453 0.124-0.234 0.187-0.587 0.187-1.056v-2.917c0-3.89-0.504-6.975-1.512-9.255s-2.354-3.42-4.039-3.42c-1.298 0-2.472 0.72-3.521 2.162s-2.002 3.572-2.858 6.388c-0.083 0.268-0.159 0.453-0.228 0.554-0.069 0.1-0.172 0.083-0.311-0.051l-1.698-1.71c-0.083-0.134-0.138-0.285-0.166-0.453-0.027-0.167 0.014-0.452 0.125-0.855 0.856-3.353 2.009-6.052 3.459-8.098 1.449-2.045 3.224-3.068 5.322-3.068 1.74 0 3.211 0.687 4.412 2.062s2.112 3.37 2.734 5.986c0.621 2.615 0.932 5.7 0.932 9.255v35.712c0 0.536-0.035 0.888-0.104 1.056s-0.2 0.251-0.393 0.251h-1.533c-0.166 0-0.29-0.117-0.373-0.352-0.083-0.234-0.124-0.553-0.124-0.955l-0.083-5.231c-0.055-0.939-0.221-1.006-0.497-0.202zm0.456-19.314c0-1.14-0.194-1.643-0.58-1.509l-3.107 0.603c-1.436 0.202-2.686 0.638-3.749 1.308-1.063 0.671-1.953 1.543-2.671 2.616s-1.257 2.33-1.616 3.772-0.538 3.102-0.538 4.98c0 3.152 0.455 5.616 1.367 7.393 0.911 1.778 2.14 2.666 3.686 2.666 0.939 0 1.85-0.419 2.734-1.257s1.671-1.895 2.361-3.169c0.663-1.408 1.181-2.85 1.553-4.326 0.373-1.475 0.56-2.883 0.56-4.225v-8.852z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m79.034 173.02c-0.166 0-0.297-0.117-0.394-0.352-0.096-0.234-0.145-0.553-0.145-0.955v-4.628c0-0.536-0.041-0.838-0.124-0.905s-0.207 0.1-0.373 0.503c-0.276 0.67-0.69 1.593-1.242 2.766-0.553 1.174-1.271 2.23-2.154 3.169-0.884 0.939-1.961 1.408-3.231 1.408-1.74 0-3.314-0.989-4.722-2.967-1.409-1.979-2.534-4.963-3.376-8.953-0.843-3.991-1.264-8.937-1.264-14.838 0-5.701 0.415-10.68 1.243-14.939s1.988-7.595 3.479-10.009c1.492-2.415 3.204-3.622 5.137-3.622 1.436 0 2.616 0.57 3.541 1.71 0.926 1.14 1.719 2.381 2.382 3.722 0.249 0.47 0.414 0.637 0.497 0.503s0.125-0.536 0.125-1.207v-23.841c0-0.805 0.151-1.208 0.455-1.208h1.864c0.276 0 0.414 0.369 0.414 1.107v72.128c0 0.537-0.041 0.905-0.124 1.107-0.083 0.201-0.235 0.301-0.455 0.301h-1.533zm-0.621-42.049c-0.939-2.213-1.885-3.94-2.838-5.181s-2.009-1.861-3.169-1.861c-1.463 0-2.768 0.889-3.914 2.666s-2.044 4.376-2.693 7.796-0.973 7.578-0.973 12.474c0 5.097 0.338 9.272 1.015 12.524 0.676 3.253 1.567 5.651 2.672 7.193 1.104 1.543 2.305 2.314 3.603 2.314 1.188 0 2.258-0.704 3.211-2.113 0.952-1.408 1.705-3.118 2.257-5.13s0.829-3.957 0.829-5.835v-24.847z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m89.514 149.38c0 3.42 0.345 6.606 1.035 9.557 0.691 2.951 1.609 5.315 2.755 7.092s2.437 2.666 3.873 2.666c1.519 0 2.837-0.738 3.956-2.213 1.118-1.476 2.064-3.655 2.837-6.539 0.083-0.336 0.166-0.52 0.249-0.554 0.083-0.033 0.179 0.017 0.29 0.151l1.408 1.912c0.221 0.268 0.235 0.67 0.041 1.207-0.69 2.548-1.47 4.661-2.34 6.337-0.87 1.677-1.857 2.935-2.962 3.773-1.104 0.838-2.319 1.257-3.645 1.257-2.043 0-3.838-1.14-5.385-3.42-1.546-2.28-2.761-5.482-3.645-9.607-0.884-4.124-1.325-8.836-1.325-14.134 0-5.901 0.455-10.931 1.367-15.089 0.911-4.158 2.14-7.377 3.686-9.658 1.547-2.28 3.3-3.42 5.261-3.42 1.988 0 3.714 1.073 5.178 3.219 1.463 2.146 2.595 5.231 3.396 9.255s1.201 8.886 1.201 14.587c0 0.469-0.02 0.939-0.062 1.408-0.041 0.469-0.214 0.704-0.517 0.704h-16.362c-0.083 0-0.152 0.151-0.207 0.453-0.056 0.302-0.083 0.654-0.083 1.056zm13.752-6.237c0.304 0 0.497-0.1 0.58-0.302 0.083-0.201 0.124-0.57 0.124-1.106 0-3.219-0.283-6.187-0.849-8.903s-1.367-4.896-2.402-6.539c-1.036-1.643-2.272-2.464-3.708-2.464-1.629 0-2.996 0.955-4.101 2.867-1.104 1.911-1.94 4.342-2.506 7.293s-0.849 6.002-0.849 9.154h13.711z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m148.54 119.7c0.165 0 0.283 0.117 0.352 0.352s0.076 0.52 0.02 0.855l-6.254 50.902c-0.028 0.47-0.104 0.788-0.228 0.956s-0.297 0.251-0.518 0.251h-1.615c-0.442 0-0.718-0.402-0.829-1.207l-5.26-40.138c-0.111-0.604-0.201-0.905-0.27-0.905s-0.131 0.301-0.186 0.905l-5.012 40.138c-0.028 0.47-0.097 0.788-0.207 0.956-0.111 0.168-0.277 0.251-0.497 0.251h-1.74c-0.442 0-0.718-0.402-0.829-1.207l-6.503-50.801c-0.055-0.403-0.048-0.721 0.021-0.956s0.2-0.352 0.393-0.352h1.823c0.166 0 0.297 0.067 0.393 0.201 0.097 0.134 0.159 0.403 0.187 0.805l5.302 41.848c0.083 0.671 0.179 0.989 0.29 0.956 0.11-0.034 0.207-0.386 0.29-1.056l5.219-41.949c0.055-0.268 0.124-0.47 0.207-0.604s0.193-0.201 0.331-0.201h1.533c0.138 0 0.262 0.067 0.373 0.201 0.11 0.134 0.179 0.403 0.207 0.805l5.468 41.848c0.083 0.671 0.179 0.989 0.29 0.956 0.11-0.034 0.207-0.386 0.29-1.056l5.053-41.849c0.055-0.335 0.138-0.57 0.249-0.704 0.11-0.134 0.234-0.201 0.373-0.201h1.284z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m156.49 171.51c0 0.604-0.042 1.006-0.125 1.208-0.082 0.201-0.262 0.301-0.538 0.301h-1.533c-0.221 0-0.366-0.083-0.435-0.251s-0.103-0.486-0.103-0.956v-50.902c0-0.805 0.152-1.207 0.456-1.207h1.822c0.304 0 0.456 0.402 0.456 1.207v50.6zm0.165-63.979c0 1.207-0.207 1.811-0.621 1.811h-1.905c-0.221 0-0.366-0.135-0.435-0.403s-0.104-0.67-0.104-1.207v-7.847c0-1.006 0.18-1.509 0.539-1.509h1.988c0.359 0 0.538 0.47 0.538 1.409v7.746z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m168.3 124.83c-0.221 0-0.331 0.269-0.331 0.805v33.801c0 3.42 0.221 5.667 0.663 6.74 0.441 1.073 1.09 1.609 1.946 1.609h3.024c0.138 0 0.242 0.084 0.311 0.252 0.069 0.167 0.103 0.419 0.103 0.754v2.716c0 0.537-0.138 0.906-0.414 1.107-0.248 0.067-0.614 0.134-1.098 0.201-0.483 0.067-0.959 0.118-1.429 0.151-0.469 0.034-0.828 0.05-1.077 0.05-1.712 0-2.934-0.955-3.665-2.867-0.732-1.911-1.098-5.013-1.098-9.305v-35.108c0-0.604-0.124-0.906-0.373-0.906h-3.521c-0.248 0-0.373-0.268-0.373-0.804v-3.521c0-0.537 0.111-0.805 0.332-0.805h3.686c0.166 0 0.263-0.268 0.29-0.805l0.415-16.095c0-0.805 0.124-1.207 0.372-1.207h1.492c0.303 0 0.455 0.436 0.455 1.307v15.995c0 0.537 0.097 0.805 0.29 0.805h5.468c0.221 0 0.331 0.268 0.331 0.805v3.521c0 0.536-0.124 0.804-0.373 0.804h-5.426z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m179.4 173.02c-0.331 0-0.497-0.402-0.497-1.207v-72.329c0-0.738 0.138-1.107 0.414-1.107h1.782c0.276 0 0.414 0.336 0.414 1.006v27.162c0 0.335 0.034 0.536 0.103 0.603s0.159-0.033 0.27-0.302c0.994-1.81 1.898-3.319 2.713-4.526 0.814-1.208 1.629-2.113 2.444-2.717 0.814-0.603 1.691-0.905 2.63-0.905 2.182 0 3.839 1.375 4.971 4.125 1.132 2.749 1.698 6.404 1.698 10.965v37.925c0 0.871-0.166 1.307-0.497 1.307h-1.74c-0.165 0-0.29-0.1-0.373-0.301-0.082-0.202-0.124-0.503-0.124-0.906v-36.315c0-3.555-0.366-6.321-1.097-8.3-0.732-1.978-1.899-2.967-3.501-2.967-0.883 0-1.705 0.318-2.464 0.956-0.76 0.637-1.526 1.576-2.299 2.816-0.773 1.241-1.643 2.834-2.61 4.779v39.031c0 0.805-0.179 1.207-0.538 1.207h-1.699z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> </g> <g transform="matrix(.80638 0 0 .80638 452.53 65.421)" fill-rule="nonzero"> <path d="m79.32 36.98v150.76l15.68-13.2 6.59-156.31-22.27 18.75z" fill="url(#f)"/> <path d="m79.32 36.98-22.27-18.75 6.59 156.31 15.68 13.2v-150.76z" fill="url(#e)"/> <path d="m25.19 104.83 8.63 49.04 12.5-14.95-2.46-56.42-18.67 22.33z" fill="url(#d)"/> <path d="m25.19 104.83-25.19-14.59 16.97 53.86 16.85 9.77-8.63-49.04z" fill="url(#c)"/> <path d="M43.86,82.5L18.69,67.98L0,90.24L25.18,104.83L43.86,82.5Z" fill="#9c3"/> <path d="m134.82 78.69-9.97 56.5 15.58-9.04 19.57-62.05-25.18 14.59z" fill="url(#b)"/> <path d="m134.82 78.69-18.68-22.33-2.86 65 11.57 13.83 9.97-56.5z" fill="url(#a)"/> <path d="m160 64.1-18.69-22.26-25.17 14.52 18.67 22.33 25.19-14.59z" fill="#ffe113"/> <path d="M101.59,18.23L79.32,0L57.05,18.23L79.32,36.98L101.59,18.23Z" fill="#f3e600"/> </g> <defs> <linearGradient id="f" x2="1" gradientTransform="matrix(.84 -162.96 162.96 .84 89.64 184.81)" gradientUnits="userSpaceOnUse"><stop stop-color="#62d399" offset="0"/><stop stop-color="#acd842" offset=".51"/><stop stop-color="#d7db0a" offset=".9"/><stop stop-color="#d7db0a" offset="1"/></linearGradient> <linearGradient id="e" x2="1" gradientTransform="matrix(-1.6,-162.13,162.13,-1.6,69.68,178.9)" gradientUnits="userSpaceOnUse"><stop stop-color="#0ba398" offset="0"/><stop stop-color="#4ca352" offset=".5"/><stop stop-color="#76a30a" offset="1"/></linearGradient> <linearGradient id="d" x2="1" gradientTransform="matrix(-1.9,-67.98,67.98,-1.9,36.6,152.17)" gradientUnits="userSpaceOnUse"><stop stop-color="#36a382" offset="0"/><stop stop-color="#36a382" offset=".19"/><stop stop-color="#49a459" offset=".54"/><stop stop-color="#76a30b" offset="1"/></linearGradient> <linearGradient id="c" x2="1" gradientTransform="matrix(2.18,-62.38,62.38,2.18,15.82,153.24)" gradientUnits="userSpaceOnUse"><stop stop-color="#267880" offset="0"/><stop stop-color="#457a5c" offset=".51"/><stop stop-color="#717516" offset="1"/></linearGradient> <linearGradient id="b" x2="1" gradientTransform="matrix(13.85,-71.96,71.96,13.85,135.08,135.43)" gradientUnits="userSpaceOnUse"><stop stop-color="#b0d939" offset="0"/><stop stop-color="#eadb04" offset="1"/></linearGradient> <linearGradient id="a" x2="1" gradientTransform="matrix(26.159 -64.737 64.737 26.159 107.42 128.14)" gradientUnits="userSpaceOnUse"><stop stop-color="#74af52" offset="0"/><stop stop-color="#74af52" offset=".17"/><stop stop-color="#99be32" offset=".48"/><stop stop-color="#c0c40a" offset="1"/></linearGradient> </defs> </svg>`;btoa(CC);const PC='<svg viewBox="0 0 509 154" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><path d="M665.95 132.73v44.88l-10.56-8.4c-.8-.64-1.2-1.44-1.2-2.4v-32.4c0-6.48-4.12-9.72-12.36-9.72-2.16 0-4.18.4-6.06 1.2-1.88.8-3.54 1.8-4.98 3-1.44 1.2-2.56 2.5-3.36 3.9-.8 1.4-1.2 2.7-1.2 3.9v40.92l-10.68-8.4c-.72-.64-1.08-1.44-1.08-2.4v-53.76l10.92 8.52c.32.24.56.44.72.6.16.16.36.32.6.48.96-1.2 2.14-2.28 3.54-3.24 1.4-.96 2.92-1.76 4.56-2.4 1.64-.64 3.34-1.14 5.1-1.5 1.76-.36 3.44-.54 5.04-.54 1.44 0 2.92.04 4.44.12 1.52.08 2.84.28 3.96.6 4.56 1.12 7.8 3.12 9.72 6 1.92 2.88 2.88 6.56 2.88 11.04ZM732.38 146.05c0 .88.02 1.5.06 1.86.04.36-.02.98-.18 1.86h-7.08c-2.08 0-4.44-.02-7.08-.06-2.64-.04-5.36-.06-8.16-.06h-22.08c0 2.88.56 5.36 1.68 7.44 1.12 2.08 2.6 3.8 4.44 5.16 1.84 1.36 3.94 2.36 6.3 3 2.36.64 4.74.96 7.14.96 3.04 0 5.9-.76 8.58-2.28 2.68-1.52 4.94-3.52 6.78-6 .64.56 1.54 1.48 2.7 2.76 1.16 1.28 2.94 3.2 5.34 5.76-2.8 3.36-6.22 6.02-10.26 7.98-4.04 1.96-8.42 2.94-13.14 2.94-4.72 0-8.92-.64-12.84-1.92-3.92-1.28-7.32-3.24-10.2-5.88-2.88-2.64-5.12-5.98-6.72-10.02-1.6-4.04-2.4-8.82-2.4-14.34 0-4.96.66-9.42 1.98-13.38 1.32-3.96 3.22-7.32 5.7-10.08s5.44-4.9 8.88-6.42c3.44-1.52 7.32-2.28 11.64-2.28 5.76 0 10.52.88 14.28 2.64 3.76 1.76 6.72 4.16 8.88 7.2 2.16 3.04 3.66 6.54 4.5 10.5.84 3.96 1.26 8.18 1.26 12.66Zm-29.4-22.8c-2.16.16-4.16.72-6 1.68-1.84.96-3.42 2.2-4.74 3.72-1.32 1.52-2.36 3.28-3.12 5.28-.76 2-1.14 4.12-1.14 6.36h33.12c0-2-.22-4.06-.66-6.18-.44-2.12-1.3-4.02-2.58-5.7-1.28-1.68-3.1-3.02-5.46-4.02-2.36-1-5.5-1.38-9.42-1.14ZM795.93 146.05c0 .88.02 1.5.06 1.86.04.36-.02.98-.18 1.86h-7.08c-2.08 0-4.44-.02-7.08-.06-2.64-.04-5.36-.06-8.16-.06h-22.08c0 2.88.56 5.36 1.68 7.44 1.12 2.08 2.6 3.8 4.44 5.16 1.84 1.36 3.94 2.36 6.3 3 2.36.64 4.74.96 7.14.96 3.04 0 5.9-.76 8.58-2.28 2.68-1.52 4.94-3.52 6.78-6 .64.56 1.54 1.48 2.7 2.76 1.16 1.28 2.94 3.2 5.34 5.76-2.8 3.36-6.22 6.02-10.26 7.98-4.04 1.96-8.42 2.94-13.14 2.94-4.72 0-8.92-.64-12.84-1.92-3.92-1.28-7.32-3.24-10.2-5.88-2.88-2.64-5.12-5.98-6.72-10.02-1.6-4.04-2.4-8.82-2.4-14.34 0-4.96.66-9.42 1.98-13.38 1.32-3.96 3.22-7.32 5.7-10.08s5.44-4.9 8.88-6.42c3.44-1.52 7.32-2.28 11.64-2.28 5.76 0 10.52.88 14.28 2.64 3.76 1.76 6.72 4.16 8.88 7.2 2.16 3.04 3.66 6.54 4.5 10.5.84 3.96 1.26 8.18 1.26 12.66Zm-29.4-22.8c-2.16.16-4.16.72-6 1.68-1.84.96-3.42 2.2-4.74 3.72-1.32 1.52-2.36 3.28-3.12 5.28-.76 2-1.14 4.12-1.14 6.36h33.12c0-2-.22-4.06-.66-6.18-.44-2.12-1.3-4.02-2.58-5.7-1.28-1.68-3.1-3.02-5.46-4.02-2.36-1-5.5-1.38-9.42-1.14ZM858.57 97.21c.64.48.96 1.16.96 2.04v74.88c-.08 1.04-.12 2.12-.12 3.24-1.84-1.52-3.56-2.92-5.16-4.2-1.36-1.12-2.66-2.18-3.9-3.18-1.24-1-2.06-1.66-2.46-1.98-1.76 2.48-4.26 4.44-7.5 5.88-3.24 1.44-7.02 2.16-11.34 2.16-3.84 0-7.4-.7-10.68-2.1-3.28-1.4-6.14-3.44-8.58-6.12-2.44-2.68-4.34-5.94-5.7-9.78-1.36-3.84-2.04-8.16-2.04-12.96 0-4.32.78-8.34 2.34-12.06 1.56-3.72 3.6-6.92 6.12-9.6 2.52-2.68 5.38-4.78 8.58-6.3 3.2-1.52 6.48-2.28 9.84-2.28 2.56 0 4.82.22 6.78.66 1.96.44 3.68 1.06 5.16 1.86s2.78 1.74 3.9 2.82a35.92 35.92 0 0 1 3.12 3.42V88.57l10.68 8.64Zm-27.96 67.92c3.6 0 6.52-.68 8.76-2.04 2.24-1.36 3.98-3.06 5.22-5.1a20.5 20.5 0 0 0 2.58-6.54c.48-2.32.72-4.44.72-6.36v-1.2c0-1.12-.22-2.7-.66-4.74-.44-2.04-1.28-4.06-2.52-6.06s-3-3.7-5.28-5.1c-2.28-1.4-5.22-2.02-8.82-1.86-3.44 0-6.26.74-8.46 2.22-2.2 1.48-3.96 3.26-5.28 5.34-1.32 2.08-2.24 4.2-2.76 6.36-.52 2.16-.78 3.92-.78 5.28 0 1.84.24 3.92.72 6.24.48 2.32 1.36 4.48 2.64 6.48s3.04 3.68 5.28 5.04c2.24 1.36 5.12 2.04 8.64 2.04ZM882.81 97.09c.64.48.96 1.12.96 1.92l-.12 41.04v37.08l-10.56-8.4c-.72-.64-1.08-1.44-1.08-2.4V88.45l10.8 8.64ZM950.36 146.05c0 .88.02 1.5.06 1.86.04.36-.02.98-.18 1.86h-7.08c-2.08 0-4.44-.02-7.08-.06-2.64-.04-5.36-.06-8.16-.06h-22.08c0 2.88.56 5.36 1.68 7.44 1.12 2.08 2.6 3.8 4.44 5.16 1.84 1.36 3.94 2.36 6.3 3 2.36.64 4.74.96 7.14.96 3.04 0 5.9-.76 8.58-2.28 2.68-1.52 4.94-3.52 6.78-6 .64.56 1.54 1.48 2.7 2.76 1.16 1.28 2.94 3.2 5.34 5.76-2.8 3.36-6.22 6.02-10.26 7.98-4.04 1.96-8.42 2.94-13.14 2.94-4.72 0-8.92-.64-12.84-1.92-3.92-1.28-7.32-3.24-10.2-5.88-2.88-2.64-5.12-5.98-6.72-10.02-1.6-4.04-2.4-8.82-2.4-14.34 0-4.96.66-9.42 1.98-13.38 1.32-3.96 3.22-7.32 5.7-10.08s5.44-4.9 8.88-6.42c3.44-1.52 7.32-2.28 11.64-2.28 5.76 0 10.52.88 14.28 2.64 3.76 1.76 6.72 4.16 8.88 7.2 2.16 3.04 3.66 6.54 4.5 10.5.84 3.96 1.26 8.18 1.26 12.66Zm-29.4-22.8c-2.16.16-4.16.72-6 1.68-1.84.96-3.42 2.2-4.74 3.72-1.32 1.52-2.36 3.28-3.12 5.28-.76 2-1.14 4.12-1.14 6.36h33.12c0-2-.22-4.06-.66-6.18-.44-2.12-1.3-4.02-2.58-5.7-1.28-1.68-3.1-3.02-5.46-4.02-2.36-1-5.5-1.38-9.42-1.14Z" style="fill-rule:nonzero" transform="translate(-452.406 -63.709) scale(1.00797)"/><path d="M79.32 36.98v150.76L95 174.54l6.59-156.31-22.27 18.75Z" style="fill:url(#a);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="M79.32 36.98 57.05 18.23l6.59 156.31 15.68 13.2V36.98Z" style="fill:url(#b);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="m25.19 104.83 8.63 49.04 12.5-14.95-2.46-56.42-18.67 22.33Z" style="fill:url(#c);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="M25.19 104.83 0 90.24l16.97 53.86 16.85 9.77-8.63-49.04Z" style="fill:url(#d);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="M43.86 82.5 18.69 67.98 0 90.24l25.18 14.59L43.86 82.5Z" style="fill:#9c3;fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="m134.82 78.69-9.97 56.5 15.58-9.04L160 64.1l-25.18 14.59Z" style="fill:url(#e);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="m134.82 78.69-18.68-22.33-2.86 65 11.57 13.83 9.97-56.5Z" style="fill:url(#f);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="m160 64.1-18.69-22.26-25.17 14.52 18.67 22.33L160 64.1Z" style="fill:#ffe113;fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="M101.59 18.23 79.32 0 57.05 18.23l22.27 18.75 22.27-18.75Z" style="fill:#f3e600;fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><defs><linearGradient id="a" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(.84 -162.96 162.96 .84 89.64 184.81)"><stop offset="0" style="stop-color:#62d399;stop-opacity:1"/><stop offset=".51" style="stop-color:#acd842;stop-opacity:1"/><stop offset=".9" style="stop-color:#d7db0a;stop-opacity:1"/><stop offset="1" style="stop-color:#d7db0a;stop-opacity:1"/></linearGradient><linearGradient id="b" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-90.565 123.412 54.953) scale(162.14)"><stop offset="0" style="stop-color:#0ba398;stop-opacity:1"/><stop offset=".5" style="stop-color:#4ca352;stop-opacity:1"/><stop offset="1" style="stop-color:#76a30a;stop-opacity:1"/></linearGradient><linearGradient id="c" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="scale(-68) rotate(88.4 .881 -1.396)"><stop offset="0" style="stop-color:#36a382;stop-opacity:1"/><stop offset=".19" style="stop-color:#36a382;stop-opacity:1"/><stop offset=".54" style="stop-color:#49a459;stop-opacity:1"/><stop offset="1" style="stop-color:#76a30b;stop-opacity:1"/></linearGradient><linearGradient id="d" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-88 87.255 68.431) scale(62.42)"><stop offset="0" style="stop-color:#267880;stop-opacity:1"/><stop offset=".51" style="stop-color:#457a5c;stop-opacity:1"/><stop offset="1" style="stop-color:#717516;stop-opacity:1"/></linearGradient><linearGradient id="e" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-79.1 149.53 -14.065) scale(73.28)"><stop offset="0" style="stop-color:#b0d939;stop-opacity:1"/><stop offset="1" style="stop-color:#eadb04;stop-opacity:1"/></linearGradient><linearGradient id="f" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-67.997 148.705 -15.558) scale(69.8226)"><stop offset="0" style="stop-color:#74af52;stop-opacity:1"/><stop offset=".17" style="stop-color:#74af52;stop-opacity:1"/><stop offset=".48" style="stop-color:#99be32;stop-opacity:1"/><stop offset="1" style="stop-color:#c0c40a;stop-opacity:1"/></linearGradient></defs></svg>',MC=btoa(PC),OC="data:image/svg+xml;charset=utf-8;base64,"+MC,i_=OC;var ja=(s=>(s[s.Quad=0]="Quad",s[s.Cube=1]="Cube",s[s.Sphere=2]="Sphere",s[s.Cylinder=3]="Cylinder",s[s.RoundedCube=10]="RoundedCube",s))(ja||{});class po{static createText(e,t){let i=null;const n=t?.font||EC(t?.familyFamily||null);n instanceof q.Font?i=this.#t(e,n,t):i==null&&(i=new c.BufferGeometry);const o=t?.color||16777215,r=new c.Mesh(i,t?.material??new c.MeshStandardMaterial({color:o}));return this.applyDefaultObjectOptions(r,t),n instanceof Promise?n.then(a=>{r.geometry=this.#t(e,a,t),t?.onGeometry&&t.onGeometry(r)}):t?.onGeometry&&t.onGeometry(r),r}static#t(e,t,i){const n=i?.depth||.1;return new q.TextGeometry(e,{font:t,size:1,depth:n,height:n,bevelEnabled:i?.bevel||!1,bevelThickness:.01,bevelOffset:.01,bevelSize:.01})}static createOccluder(e){const t=new c.MeshBasicMaterial({colorWrite:!1,depthWrite:!0,side:c.DoubleSide});return this.createPrimitive(e,{material:t})}static createPrimitive(e,t){let i;const n=t?.color||16777215;switch(e){case"Quad":case 0:{const o=new c.PlaneGeometry(1,1,1,1),r=t?.material??new c.MeshStandardMaterial({color:n});t?.texture&&"map"in r&&(r.map=t.texture),i=new c.Mesh(o,r),i.name="Quad"}break;case"Cube":case 1:{const o=new c.BoxGeometry(1,1,1),r=t?.material??new c.MeshStandardMaterial({color:n});t?.texture&&"map"in r&&(r.map=t.texture),i=new c.Mesh(o,r),i.name="Cube"}break;case 10:case"RoundedCube":{const o=kC(1,1,1,.1,2),r=t?.material??new c.MeshStandardMaterial({color:n});t?.texture&&"map"in r&&(r.map=t.texture),i=new c.Mesh(o,r),i.name="RoundedCube"}break;case"Sphere":case 2:{const o=new c.SphereGeometry(.5,16,16),r=t?.material??new c.MeshStandardMaterial({color:n});t?.texture&&"map"in r&&(r.map=t.texture),i=new c.Mesh(o,r),i.name="Sphere"}break;case"Cylinder":case 3:{const o=new c.CylinderGeometry(.5,.5,1,32),r=t?.material??new c.MeshStandardMaterial({color:n});t?.texture&&"map"in r&&(r.map=t.texture),i=new c.Mesh(o,r),i.name="Cylinder"}break;case"ShaderBall":i=new c.Group,i.name="ShaderBall",RC(i,t);break}return this.applyDefaultObjectOptions(i,t),i}static createSprite(e){const i=new c.SpriteMaterial({color:16777215});e?.texture&&"map"in i&&(i.map=e.texture);const n=new c.Sprite(i);return this.applyDefaultObjectOptions(n,e),n}static applyDefaultObjectOptions(e,t){e.receiveShadow=!0,e.castShadow=!0,t?.name&&(e.name=t.name),t?.position&&(Array.isArray(t.position)?e.position.set(t.position[0],t.position[1],t.position[2]):e.position.set(t.position.x||0,t.position.y||0,t.position.z||0)),t?.rotation&&(Array.isArray(t.rotation)?e.rotation.set(t.rotation[0],t.rotation[1],t.rotation[2]):e.rotation.set(t.rotation.x||0,t.rotation.y||0,t.rotation.z||0)),t?.scale&&(typeof t.scale=="number"?e.scale.set(t.scale,t.scale,t.scale):Array.isArray(t.scale)?e.scale.set(t.scale[0],t.scale[1],t.scale[2]):e.scale.set(t.scale.x||1,t.scale.y||1,t.scale.z||1)),t?.receiveShadow!=null&&(e.receiveShadow=t.receiveShadow),t?.castShadow!=null&&(e.castShadow=t.castShadow),t?.parent&&t.parent.add(e)}}function kC(s,e,t,i,n){const o=new c.Shape,r=1e-5,a=i-r;o.absarc(r,r,r,-Math.PI/2,-Math.PI,!0),o.absarc(r,e-a*2,r,Math.PI,Math.PI/2,!0),o.absarc(s-a*2,e-a*2,r,Math.PI/2,0,!0),o.absarc(s-a*2,r,r,0,-Math.PI/2,!0);const l=new c.ExtrudeGeometry(o,{bevelEnabled:!0,bevelSegments:n*2,steps:1,bevelSize:a,bevelThickness:i,curveSegments:n,UVGenerator:{generateTopUV:(h,d)=>{const u=[];for(let p=0;p<d.length;p+=3)u.push(new c.Vector2(d[p]/s,d[p+1]/e));return u},generateSideWallUV:(h,d,u,p,m,g)=>{const _=[];return _.push(new c.Vector2(d[u]/s,d[u+1]/e)),_.push(new c.Vector2(d[p]/s,d[p+1]/e)),_.push(new c.Vector2(d[m]/s,d[m+1]/e)),_.push(new c.Vector2(d[g]/s,d[g+1]/e)),_}}});return l.scale(1,1,1-i),l.center(),l.index||l.setIndex(Array.from({length:l.attributes.position.count},(h,d)=>d)),l.computeVertexNormals(),l}const Lh=new Map;function EC(s){let e="";switch(s){default:case"OpenSans":e="https://cdn.needle.tools/static/fonts/facetype/Open Sans_Regular_ascii.json";break;case"Helvetiker":e="https://raw.githubusercontent.com/mrdoob/three.js/master/examples/fonts/helvetiker_regular.typeface.json";break}if(Lh.has(e)){const n=Lh.get(e);if(n)return n}const t=new q.FontLoader,i=new Promise((n,o)=>{t.load(e,r=>{Lh.set(e,r),n(r)},void 0,o)});return Lh.set(e,i),i}let _f=!1,bf=null;function RC(s,e){if(bf===null){const t="https://cdn.needle.tools/static/models/shaderball.glb",i=new q.GLTFLoader,n=se.createLoaders(null);i.setDRACOLoader(n.dracoLoader),i.setKTX2Loader(n.ktx2Loader),_f=!0,bf=i.loadAsync(t).then(o=>{const r=o.scene;return r.position.y-=.5,r}).catch(o=>(console.warn("Failed to load shaderball mesh: "+o.message),s_())).finally(()=>{_f=!1})}if(_f){const t=s_();t.name="ShaderBall-Placeholder";const i=t.children[0];i?.type==="Mesh"&&n_(i,e),s.add(t)}bf.then(t=>{s.children.forEach(o=>{o.name==="ShaderBall-Placeholder"&&s.remove(o)});const i=t.clone(),n=i.children[0];n?.type==="Mesh"&&(n.geometry.attributes.tangent||n.geometry.computeTangents(),n_(n,e)),s.add(i)})}function n_(s,e){if(e?.color||e?.material||e?.texture){const i=e?.material??s.material?.clone()??new c.MeshStandardMaterial;e.color&&"color"in i&&i.color instanceof c.Color&&i.color.set(e.color),e?.texture&&"map"in i&&(i.map=e.texture),s.material=i}}function s_(){return new c.Group().add(po.createPrimitive("Sphere",{material:new c.MeshBasicMaterial({transparent:!0,opacity:.1})}))}class ka{static _active=null;static get active(){return this._active}static _requestInFlight=!1;static async start(e,t){if(this._active)return console.error("Cannot start a new XR session while one is already active"),null;if(this._requestInFlight)return console.error("Cannot start a new XR session while a request is already in flight"),null;if("xr"in navigator&&navigator.xr){if(!t)return console.error("XRSessionInit must be provided"),null;this._requestInFlight=!0;const i=await navigator.xr.requestSession(e,t).catch(n=>{console.error("Failed to start temporary XR session:",n)});return i?(i.addEventListener("end",()=>{this._active=null}),this._requestInFlight?(this._requestInFlight=!1,this._active=new ka(e,t,i),this._active):(i.end(),null)):(this._requestInFlight=!1,null)}return null}static async handoff(){return this._active?this._active.handoff():null}static async stop(){this._requestInFlight=!1,this._active&&(await this._active.end(),await fs(100)),this._active=null}_session;_mode;_init;get isAR(){return this._mode==="immersive-ar"}get isVR(){return this._mode==="immersive-vr"}_renderer;_camera;_scene;constructor(e,t,i){this._mode=e,this._init=t,this._session=i,this._session.addEventListener("end",this.onEnd),this._renderer=new c.WebGLRenderer({alpha:!0,antialias:!0}),this._renderer.outputColorSpace="srgb",this._renderer.setPixelRatio(Math.min(2,window.devicePixelRatio)),this._renderer.setSize(window.innerWidth,window.innerHeight,!0),exports.DeviceUtilities.isNeedleAppClip()&&window.requestAnimationFrame(()=>{const n=Math.min(2,window.devicePixelRatio),o=Math.floor(window.innerWidth*n),r=Math.floor(window.innerHeight*n);this._renderer.domElement.width=o,this._renderer.domElement.height=r}),this._renderer.setAnimationLoop(this.onFrame),this._renderer.xr.setSession(i),this._renderer.xr.enabled=!0,this._camera=new c.PerspectiveCamera,this._scene=new c.Scene,this._scene.fog=new c.Fog(4473924,10,250),this._scene.add(this._camera),this.setupScene()}end(){return this._session?this._session.end():Promise.resolve()}async handoff(){if(!this._session)throw new Error("Cannot handoff a session that has already ended");const e={session:this._session,mode:this._mode,init:this._init};return await this.onBeforeHandoff(),this.onEnd(),this._session=null,e}onEnd=()=>{this._session?.removeEventListener("end",this.onEnd),this._renderer.setAnimationLoop(null),this._renderer.dispose(),this._scene.clear()};_lastTime=0;_frames=0;onFrame=(e,t)=>{const i=e-this._lastTime;this.update(e,i),this._camera.parent!==this._scene&&this._scene.add(this._camera),this._renderer.render(this._scene,this._camera),this._lastTime=e,this._frames++};_roomFlyObjects=[];_logoObject=null;get _logoDistance(){return this.isAR?.3:5}get _logoScale(){return this.isAR?.04:1}update(e,t){const i=e*4e-4;for(let r=0;r<this._roomFlyObjects.length;r++){const a=this._roomFlyObjects[r];a.position.y+=Math.sin(i+r*.5)*.005,a.rotateY(.002)}const n=this._logoObject,o=this._renderer.xr.getCamera();if(n){const r=new c.Vector3;o.getWorldDirection(r);const a=o.position.clone().addScaledVector(r,this._logoDistance),l=this.isAR?.005:1e-5;n.position.lerp(a,this._frames<=2?1:t*l),n.lookAt(this._camera.position)}}async onBeforeHandoff(){await fs(1e3),this._scene.clear()}setupScene(){this._scene.background=new c.Color(0);let e=Oa;if(Fn()){const d=document.querySelector("needle-engine");if(d){const u=d.getAttribute("logo-src");u?.length&&(e=u,T()&&console.debug("[XR] Using custom loading logo from license:",e))}}const t=this._logoObject=new c.Mesh(new c.PlaneGeometry(1,1,1,1),new c.MeshBasicMaterial({transparent:!0,side:2}));t.scale.multiplyScalar(this._logoScale*window.devicePixelRatio),t.renderOrder=1e3,t.material.opacity=0,this._scene.add(t);const i=document.createElement("canvas"),n=i.getContext("2d"),o=new Image,r=d=>{if(!n)return;t.material.opacity=1;const u=1024;i.width=u,i.height=u,n.imageSmoothingQuality="high";const p=u*.19,m=o.width/o.height;{const w=i.height-p*1.5,R=w*m,M=(i.width-R)/2;n.drawImage(o,M,0,R,w)}const g=u*.12,_="Loading...";n.shadowBlur=0,n.fillStyle=this.isAR?"white":"rgba(255,255,255,0.4)",n.font=`${g}px Arial`,n.shadowBlur=u*.02,n.shadowColor="rgba(0,0,0,0.5)",n.shadowOffsetX=0,n.shadowOffsetY=0;const y=n.measureText(_);n.fillText(_,i.width/2-y.width/2,i.height-p/4),n.font=`${g}px Arial`,n.fillText(_,i.width/2-y.width/2,i.height-p/4);const v=new c.TextureLoader().load(i.toDataURL());v.generateMipmaps=!0,v.colorSpace="srgb",v.anisotropy=4;const b=i.width/i.height;t.scale.x=this._logoScale*b*window.devicePixelRatio,t.scale.y=this._logoScale*window.devicePixelRatio,t.material.map=v,t.material.needsUpdate=!0};o.onload=()=>r(),o.onerror=d=>{console.error("Failed to load temporary XR logo:",e,d),o.src=Oa},o.crossOrigin="anonymous",o.src=e;const a=new c.DirectionalLight(16777215,1);a.position.set(0,20,0),a.castShadow=!1,this._scene.add(a);const l=new c.DirectionalLight(16777215,1);l.position.set(0,-1,0),l.castShadow=!1,this._scene.add(l);const h=new c.PointLight(16777215,1,100,1);if(h.position.set(0,2,0),h.castShadow=!1,h.distance=200,this._scene.add(h),this.isAR===!1)for(let u=0;u<100;u++){const p=new c.MeshStandardMaterial({color:2236962,metalness:1,roughness:.8}),m=ja.Sphere,g=po.createPrimitive(m,{material:p});g.position.x=I.random(-50,50),g.position.y=I.random(-2,50),g.position.z=I.random(-50,50),g.rotation.x=I.random(0,Math.PI*2),g.rotation.y=I.random(0,Math.PI*2),g.rotation.z=I.random(0,Math.PI*2),g.scale.multiplyScalar(.5+Math.random()*10);const _=g.position.distanceTo(this._camera.position)-g.scale.x;_<10&&(g.position.z+=5,g.position.multiplyScalar(1+1/_)),this._roomFlyObjects.push(g),this._scene.add(g)}}}var fc;(s=>{const e=[];function t(){e?.length||T()&&console.warn("No USDZ exporters found – cannot export USDZ for QuickLook.");for(const o of e)o.exportAndOpen();return!0}s.exportAndOpen=t;function i(o){e.push(o)}s.registerExporter=i;function n(o){if(!e)return;const r=e.indexOf(o);r>=0&&e.splice(r,1)}s.unregisterExporter=n})(fc||(fc={}));const je=x("debugwebxr"),o_=x("stats");let vf=0;function TC(s){let e=null;const t=s;return t.getAROverlayContainer?e=t.getAROverlayContainer():e=s,e}AC();async function AC(){let s="immersive-vr";try{if(exports.DeviceUtilities.isNeedleAppClip()?s="immersive-ar":await navigator.xr?.isSessionSupported("immersive-vr")||(s="immersive-ar"),!await navigator.xr?.isSessionSupported("immersive-ar")&&s==="immersive-ar")return}catch(e){console.debug("[NeedleXRSession:granted] Error while checking XR support:",e);return}if(x("debugasap")){let e=globalThis["needle:XRSession"];if(e instanceof Promise){delete globalThis["needle:XRSession"],le.addContextCreatedCallback(async t=>{if(!e)return;fa(!0);const i=await e;if(i){const n=G.getDefaultSessionInit(s);G.setSession(s,i,n,t.context)}else console.error("[NeedleXRSession:granted] ASAP session was rejected");e=void 0});return}}if("xr"in navigator){if(/WebXRViewer\//i.test(navigator.userAgent)){console.warn("WebXRViewer does not support addEventListener");return}navigator.xr?.addEventListener("sessiongranted",async()=>{const e=sessionStorage.getItem("needle_xr_session_mode"),t=sessionStorage.getItem("needle_xr_session_init")??null,i=t?JSON.parse(t):null;let n=null;if(Ov()&&(await ka.start(e||s,i||G.getDefaultSessionInit(s)).catch(o=>console.warn("[NeedleXRSession:granted] TemporaryXRContext start failed:",o)),await IC(),n=await ka.handoff()),n)G.setSession(n.mode,n.session,n.init,U.Current);else if(e&&t){console.log("[NeedleXRSession:granted] Restore last session");const o=JSON.parse(t);G.start(e,o).catch(r=>console.warn(r))}else G.start(s).catch(o=>console.warn("[NeedleXRSession:granted] failed:",o))},{once:!0})}}function DC(s,e){sessionStorage.setItem("needle_xr_session_mode",s),sessionStorage.setItem("needle_xr_session_init",JSON.stringify(e))}function LC(){sessionStorage.removeItem("needle_xr_session_mode"),sessionStorage.removeItem("needle_xr_session_init")}const Fm=new Set;le.registerCallback(ae.ContextCreationStart,async s=>{Fm.add(s.context)});le.registerCallback(ae.ContextCreated,async s=>{Fm.delete(s.context);const e=s.context?.domElement.getAttribute("autostart")||null;jC(e)});function Ov(){return Fm.size>0}function IC(){return new Promise(s=>{const e=Date.now(),t=setInterval(()=>{(!Ov()||Date.now()-e>6e4)&&(clearInterval(t),s())},100)})}exports.DeviceUtilities.isDesktop()&&T()&&window.addEventListener("keydown",s=>{(s.key==="x"||s.key==="Escape")&&G.active&&G.stop()});function jC(s){s&&s?.toLowerCase()==="ar"&&hn.registerWaitForInteraction(()=>{G.start("ar")})}const Ih=Symbol("initial-fov");class G{static _sync=null;static getXRSync(e){return this._sync||(this._sync=new Mv(e)),this._sync}static get currentSessionRequest(){return this._currentSessionRequestMode}static _currentSessionRequestMode=null;static get active(){return this._activeSession}static get activeMode(){return this._activeSession?.mode??null}static get xrSystem(){return"xr"in navigator?navigator.xr:void 0}static isXRSupported(){return Promise.all([this.isVRSupported(),this.isARSupported()]).then(e=>e.some(t=>t)).catch(()=>!1)}static isVRSupported(){return this.isSessionSupported("immersive-vr")}static isARSupported(){return this.isSessionSupported("immersive-ar")}static isSessionSupported(e){return this.xrSystem?.isSessionSupported(e).catch(t=>(je&&console.error(t),!1))??Promise.resolve(!1)}static _currentSessionRequest;static _activeSession;static onSessionRequestStart(e){this._sessionRequestStartListeners.push(e)}static offSessionRequestStart(e){const t=this._sessionRequestStartListeners.indexOf(e);t>=0&&this._sessionRequestStartListeners.splice(t,1)}static _sessionRequestStartListeners=[];static onSessionRequestEnd(e){this._sessionRequestEndListeners.push(e)}static offSessionRequestEnd(e){const t=this._sessionRequestEndListeners.indexOf(e);t>=0&&this._sessionRequestEndListeners.splice(t,1)}static _sessionRequestEndListeners=[];static onXRSessionStart(e){this._xrStartListeners.push(e)}static offXRSessionStart(e){const t=this._xrStartListeners.indexOf(e);t>=0&&this._xrStartListeners.splice(t,1)}static _xrStartListeners=[];static onXRSessionEnd(e){this._xrEndListeners.push(e)}static offXRSessionEnd(e){const t=this._xrEndListeners.indexOf(e);t>=0&&this._xrEndListeners.splice(t,1)}static _xrEndListeners=[];static onControllerAdded(e){this._controllerAddedListeners.push(e)}static offControllerAdded(e){const t=this._controllerAddedListeners.indexOf(e);t>=0&&this._controllerAddedListeners.splice(t,1)}static _controllerAddedListeners=[];static onControllerRemoved(e){this._controllerRemovedListeners.push(e)}static offControllerRemoved(e){const t=this._controllerRemovedListeners.indexOf(e);t>=0&&this._controllerRemovedListeners.splice(t,1)}static _controllerRemovedListeners=[];static offerSession(e,t,i){return"xr"in navigator&&navigator.xr&&"offerSession"in navigator.xr?(typeof navigator.xr.offerSession=="function"&&(console.log("WebXR offerSession is available - requesting mode: "+e),t=="default"&&(t=this.getDefaultSessionInit(e)),navigator.xr.offerSession(e,{...t}).then(n=>G.setSession(e,n,t,i)).catch(n=>{console.log("XRSession offer rejected (perhaps because another call to offerSession was made or a call to requestSession was made)")})),!0):!1}static getDefaultSessionInit(e){switch(e){case"immersive-ar":const t=["anchors","local-floor","layers","dom-overlay","hit-test","unbounded"];return exports.DeviceUtilities.isVisionOS()||t.push("hand-tracking"),{optionalFeatures:t};case"immersive-vr":const i=["local-floor","bounded-floor","high-fixed-foveation-level","layers"];return exports.DeviceUtilities.isVisionOS()||i.push("hand-tracking"),{optionalFeatures:i};default:return console.warn("No default session init for mode",e),{}}}static async start(e,t,i){if(t||(t={}),exports.DeviceUtilities.isiOS()){const a=await this.isARSupported().catch(()=>!1);if(exports.DeviceUtilities.isVisionOS()&&!a&&(e==="ar"||e==="immersive-ar")&&(e="quicklook"),e==="quicklook")return ei.sendEvent(U.Current,"xr",{action:"quicklook_export",source:"NeedleXRSession.start"}),fc.exportAndOpen(),null;if(!a&&(e==="immersive-ar"||e==="ar")){this.invokeSessionRequestStart("immersive-ar",t);const l=new URL("https://appclip.apple.com/id?p=tools.needle.launch-app.Clip");l.searchParams.set("url",location.href);const h=l.toString();ei.sendEvent(U.Current,"xr",{action:"app_clip_launch",source:"NeedleXRSession.start",url:h});const d=window.top||window;try{console.debug("iOS device detected - opening Needle App Clip for AR experience",{mode:e,init:t,url:l}),d.location.href=h}catch(u){console.warn("Error navigating to AppClip "+h+`
167
167
  `,u),window!==window.top?window.open(h,"_blank"):window.location.href=h}return setTimeout(()=>{this.invokeSessionRequestEnd("immersive-ar",t||{},null)},3e3),null}}if(e==="quicklook")return console.warn("QuickLook mode is only supported on iOS devices"),null;if(e=="ar"&&(e="immersive-ar"),T()&&x("debugxrpreroom"))return console.warn("Debug: Starting temporary XR session"),await ka.start(e,t||G.getDefaultSessionInit(e)),null;if(this._currentSessionRequest)return console.warn("A XRSession is already being requested"),(je||T())&&ue("A XRSession is already being requested"),this._currentSessionRequest.then(()=>this._activeSession);if(this._activeSession)return console.error("A XRSession is already running"),this._activeSession;if(i||(i=U.Current),i||(i=le.All[0]),!i)throw new Error("No Needle Engine Context found");switch(e){case"immersive-ar":{if(await this.xrSystem?.isSessionSupported("immersive-ar")!==!0)return console.error(e+" is not supported by this browser."),null;const l=this.getDefaultSessionInit(e),h=TC(i.domElement);h&&!exports.DeviceUtilities.isQuest()&&(l.domOverlay={root:h},l.optionalFeatures.push("dom-overlay")),t={...l,...t}}break;case"immersive-vr":{if(await this.xrSystem?.isSessionSupported("immersive-vr")!==!0)return console.error(e+" is not supported by this browser."),null;t={...this.getDefaultSessionInit(e),...t}}break;default:console.warn("No default session init for mode",e);break}t.optionalFeatures??=[],t.requiredFeatures??=[],await ka.stop();const n=e=="immersive-ar"?i.scripts_immersive_ar:i.scripts_immersive_vr;je?console.log(`%cRequesting ${e} session`,"font-weight:bold;",t,n):console.log(`%cRequesting ${e} session`,"font-weight:bold;");for(const a of n)a.onBeforeXR&&a.activeAndEnabled&&!a.destroyed&&a.onBeforeXR(e,t);this.invokeSessionRequestStart(e,t),je&&we("Requesting "+e+" session ("+Date.now()+")"),ei.sendEvent(U.Current,"xr",{action:"session_request",mode:e,features:(t.requiredFeatures??[]).concat(t.optionalFeatures??[]).join(","),source:"NeedleXRSession.start"}),this._currentSessionRequest=navigator?.xr?.requestSession(e,t),this._currentSessionRequestMode=e;const o=await this._currentSessionRequest?.catch(a=>{console.error(a,"Code: "+a?.code),a?.code===9&&ue("Couldn't start XR session. Make sure you allow the required permissions."),console.log("If the specified XR configuration is not supported (e.g. entering AR doesnt work) - make sure you access the website on a secure connection (HTTPS) and your device has the required permissions (e.g. camera access)"),location.protocol==="http:"&&ue("XR requires a secure connection (HTTPS)")});return this._currentSessionRequest=void 0,this._currentSessionRequestMode=null,this.invokeSessionRequestEnd(e,t,o),o?this.setSession(e,o,t,i):(console.warn("XR Session request was rejected"),null)}static invokeSessionRequestStart(e,t){for(const i of this._sessionRequestStartListeners)i({mode:e,init:t})}static invokeSessionRequestEnd(e,t,i){for(const n of this._sessionRequestEndListeners)n({mode:e,init:t,newSession:i||null})}static setSession(e,t,i,n){if(this._activeSession)return console.error("A XRSession is already running"),this._activeSession;const o=e=="immersive-ar"?n.scripts_immersive_ar:n.scripts_immersive_vr;return this._activeSession=new G(e,t,n,{scripts:o,controller_added:this._controllerAddedListeners,controller_removed:this._controllerRemovedListeners,init:i}),t.addEventListener("end",this.onEnd),je?console.log(`%cStarted ${e} session`,"font-weight:bold;",o):console.log(`%cStarted ${e} session`,"font-weight:bold;"),this._activeSession}static $_stop_request=Symbol();static stop(){const e=this._activeSession;e&&(e[this.$_stop_request]===void 0?(je&&console.log("[NeedleXRSession] Stopping XR Session... (new)"),e[this.$_stop_request]=setTimeout(()=>{e.end()})):je&&console.warn("[NeedleXRSession] XR Session stop already requested"))}static onEnd=()=>{je&&console.log("XR Session ended"),this._activeSession=null};context;get sync(){return G._sync}get running(){return!this._ended&&this.session!=null}session;mode;get interactionMode(){return this.session.interactionMode}get visibilityState(){return this.session.visibilityState}get isVisibleBlurred(){return this.session.visibilityState==="visible-blurred"}get isSystemKeyboardSupported(){return this.session.isSystemKeyboardSupported}get environmentBlendMode(){return this.session.environmentBlendMode}get frame(){return this.context.xrFrame}controllers=[];get leftController(){return this.controllers.find(e=>e.side==="left")}get rightController(){return this.controllers.find(e=>e.side==="right")}getController(e){return typeof e=="number"?this.controllers[e]||null:this.controllers.find(t=>t.side===e)||null}get isPassThrough(){return!!(this.environmentBlendMode!=="opaque"&&this.interactionMode==="world-space"||this.mode==="immersive-ar"&&this.environmentBlendMode!=="opaque"&&this.controllers.some(e=>e.inputSource.targetRayMode==="tracked-pointer")||T()&&exports.DeviceUtilities.isDesktop()&&this.mode==="immersive-ar")}get isAR(){return this.mode==="immersive-ar"}get isVR(){return this.mode==="immersive-vr"}get isScreenBasedAR(){return this.isAR&&!this.isPassThrough}get posePosition(){return this._transformPosition}get poseOrientation(){return this._transformOrientation}get referenceSpace(){return this.context.renderer.xr.getReferenceSpace()}get viewerPose(){return this._viewerPose}get isTrackingImages(){if(this.frame&&"getImageTrackingResults"in this.frame&&typeof this.frame.getImageTrackingResults=="function")try{const e=this.frame.getImageTrackingResults();for(const t of e)if(t.trackingState==="tracked")return!0}catch{return!1}return!1}get rig(){const e=this._rigs[0]??null;return e?.gameObject&&ar(e.gameObject)||e?.isActive===!1?(this.updateActiveXRRig(),this._rigs[0]??null):e}_rigScale=1;_lastRigScaleUpdate=-1;get rigScale(){return this._rigs[0]?(this._lastRigScaleUpdate!==this.context.time.frame&&(this._lastRigScaleUpdate=this.context.time.frame,this._rigScale=this._rigs[0].gameObject.worldScale.x),this._rigScale):1}addRig(e){this._rigs.indexOf(e)>=0||(e.priority===void 0&&(e.priority=0),this._rigs.push(e),this.updateActiveXRRig())}removeRig(e){const t=this._rigs.indexOf(e);t!==-1&&(this._rigs.splice(t,1),this.updateActiveXRRig())}setRigActive(e){const t=this._rigs.indexOf(e),i=this._rigs[0];this._rigs.splice(t,1),this._rigs.unshift(e),e.priority=i?.priority??0,this.updateActiveXRRig()}getUserOffsetInRig(){const e=this.context.mainCamera?.position;if(!e||!this.rig)return B(0,0,0);const t=B(e);return t.x*=-1,t.z*=-1,t.applyQuaternion(Zt(this.rig.gameObject.quaternion)),t}updateActiveXRRig(){const e=this._rigs[0]??null;this._defaultRig.gameObject.parent!==this.context.scene&&this.context.scene.add(this._defaultRig.gameObject),this._defaultRig.gameObject.visible=!0,this._rigs.includes(this._defaultRig)||this._rigs.push(this._defaultRig);let t=this._rigs[0];t&&t.priority===void 0&&(t.priority=0);for(let i=1;i<this._rigs.length;i++){const n=this._rigs[i];if(n.isActive){if(ar(n.gameObject)){this._rigs.splice(i,1),i--;continue}(!t||t.isActive===!1||n.priority!==void 0&&n.priority>t.priority)&&(t=n)}}if(e!==t){const i=this._rigs.indexOf(t);i>=0&&this._rigs.splice(i,1),this._rigs.unshift(t)}je&&(e===t?console.log("Updated Active XR Rig:",t,"prev:",e):console.log("Updated Active XRRig:",t," (the same as before)"))}_rigs=[];_viewerHitTestSource=null;getHitTest(e){if(e)return this.getControllerHitTest(e);if(!this._viewerHitTestSource)return null;const t=this._viewerHitTestSource,i=this.frame.getHitTestResults(t);if(i.length>0){const n=i[0];return this.convertHitTestResult(n)}return null}getControllerHitTest(e){const t=e.getHitTestSource();if(!t)return null;const i=this.frame.getHitTestResultsForTransientInput(t);for(const n of i)if(n.inputSource===e.inputSource)for(const o of n.results)return this.convertHitTestResult(o);return null}convertHitTestResult(e){const t=this.context.renderer.xr.getReferenceSpace(),i=t&&e.getPose(t);if(i){const n=B(i.transform.position),o=Zt(i.transform.orientation),r=this.context.mainCamera;if(r?.parent!==this._cameraRenderParent&&n.applyMatrix4(pa),r?.parent){n.applyMatrix4(r.parent.matrixWorld),o.multiply(Ai);const a=fe(r.parent);a.premultiply(Ai),o.premultiply(a)}return{hit:e,position:n,quaternion:o}}return null}convertSpace(e){const t=B(e.position);t.applyMatrix4(pa);const i=Zt(e.orientation);return i.premultiply(Ai),{position:t,quaternion:i}}_defaultRig;_xr_scripts;_xr_update_scripts=[];_inactive_scripts=[];_controllerAdded;_controllerRemoved;_originalCameraWorldPosition;_originalCameraWorldRotation;_originalCameraWorldScale;_originalCameraParent;_mainCamera=null;constructor(e,t,i,n){DC(e,n.init),this.session=t,this.mode=e,this.context=i,(je||x("console"))&&fa(!0),this._xr_scripts=[...n.scripts],this._xr_update_scripts=this._xr_scripts.filter(o=>typeof o.onUpdateXR=="function"),this._controllerAdded=n.controller_added,this._controllerRemoved=n.controller_removed,gs(this.onBefore,me.LateUpdate),this.context.pre_render_callbacks.push(this.onBeforeRender),this.context.post_render_callbacks.push(this.onAfterRender),(n.init.optionalFeatures?.includes("hit-test")||n.init.requiredFeatures?.includes("hit-test"))&&t.requestReferenceSpace("viewer").then(o=>t.requestHitTestSource?.call(t,{space:o})?.then(r=>this._viewerHitTestSource=r).catch(r=>console.error(r))).catch(o=>console.error(o)),this.context.mainCamera&&(this._originalCameraWorldPosition=Q(this.context.mainCamera,new c.Vector3),this._originalCameraWorldRotation=fe(this.context.mainCamera,new c.Quaternion),this._originalCameraWorldScale=Le(this.context.mainCamera,new c.Vector3),this._originalCameraParent=this.context.mainCamera.parent,this.context.mainCamera instanceof c.PerspectiveCamera&&(this.context.mainCamera[Ih]=this.context.mainCamera.fov)),this._defaultRig=new cC,this.context.scene.add(this._defaultRig.gameObject),this.addRig(this._defaultRig);for(let o=0;o<t.inputSources.length;o++){const r=t.inputSources[o];if(!r.handedness){console.warn("Input source in xr session has no handedness - ignoring",o);continue}this.onInputSourceAdded(r)}this.session.addEventListener("end",this.onEnd),this.session.addEventListener("inputsourceschange",o=>{for(const r of o.removed)this.disconnectInputSource(r);for(const r of o.added)this.onInputSourceAdded(r)}),this.context.xr=this,this.context.renderer.xr.setSession(this.session).then(this.onRendererSessionSet),"controllerAutoUpdate"in this.context.renderer.xr?(console.debug("Disabling three.js controllerAutoUpdate"),this.context.renderer.xr.controllerAutoUpdate=!1):je&&console.warn("controllerAutoUpdate is not available in three.js - cannot disable it"),exports.DeviceUtilities.isNeedleAppClip()&&window.requestAnimationFrame(()=>{const o=this.context.renderer.domElement,r=window.devicePixelRatio||1,a=o.width,l=o.height,h=Math.floor(window.innerWidth*r),d=Math.floor(window.innerHeight*r);(Math.abs(a-h)>2||Math.abs(l-d)>2)&&(o.width=h,o.height=d,console.debug("Applied DPR scaling for Needle AppClip XR session",r,o.width,o.height))})}onRendererSessionSet=()=>{this.running&&(this.context.renderer.xr.enabled=!0,this.context.renderer.xr.updateCamera(this.context.mainCamera),this.context.mainCameraComponent?.applyClearFlags())};onInputSourceAdded=e=>{if(e.targetRayMode==="screen")return;let t=0;for(let n=0;n<this.session.inputSources.length;n++)if(this.session.inputSources[n]===e){t=n;break}if(this.controllers.find(n=>n.inputSource===e)){console.debug("Controller already exists for input source",t);return}else if(this._newControllers.find(n=>n.inputSource===e)){console.debug("Controller already registered for input source",t);return}const i=new Lm(this,e,t);this._newControllers.push(i)};disconnectInputSource(e){const t=(o,r)=>{if(o.inputSource===e){je&&console.log("Disconnecting controller",o.index);const a=r.indexOf(o);a>=0&&r.splice(a,1),this.invokeControllerEvent(o,this._controllerRemoved,"removed");const l={xr:this,controller:o,change:"removed"};for(const h of this._xr_scripts)h.onXRControllerRemoved&&h.onXRControllerRemoved(l);o.onDisconnected()}},i=[...this.controllers];for(let o=i.length-1;o>=0;o--){const r=i[o];t(r,this.controllers)}const n=[...this._newControllers];for(let o=n.length-1;o>=0;o--){const r=n[o];t(r,this._newControllers)}}end(){this._ended||this.session.end().catch(e=>console.warn(e))}_ended=!1;_newControllers=[];onEnd=e=>{if(this._ended)return;this._ended=!0,console.debug("XR Session ended"),ei.sendEvent(U.Current,"xr",{action:"session_end",mode:this.mode,source:"NeedleXRSession.onEnd"}),LC(),this.onAfterRender(),this.revertCustomForward(),this._didStart=!1,this._previousCameraParent=null,this.requestedCameraNearPlane=null,fo(this.onBefore,me.LateUpdate);const t=this.context.pre_render_callbacks.indexOf(this.onBeforeRender);t>=0&&this.context.pre_render_callbacks.splice(t,1);const i=this.context.post_render_callbacks.indexOf(this.onAfterRender);i>=0&&this.context.post_render_callbacks.splice(i,1),this.context.xr=null,this.context.renderer.xr.enabled=!1,this.context.pre_update_oneshot_callbacks.push(()=>{this.context.mainCameraComponent?.applyClearFlags(),this.context.mainCameraComponent?.applyClippingPlane()}),gv({session:this});for(const o of G._xrEndListeners)o({xr:this});const n=[...this.controllers];for(let o=0;o<n.length;o++)this.disconnectInputSource(n[o].inputSource);this.controllers.length=0,this._newControllers.length=0;for(const o of this._xr_scripts)o?.onLeaveXR?.({xr:this});this.sync?.onExitXR(this),this.context.mainCamera&&(this._originalCameraParent?.add(this.context.mainCamera),this._originalCameraWorldPosition&&rt(this.context.mainCamera,this._originalCameraWorldPosition),this._originalCameraWorldRotation&&ln(this.context.mainCamera,this._originalCameraWorldRotation),this._originalCameraWorldScale&&Sa(this.context.mainCamera,this._originalCameraWorldScale),this.context.mainCamera instanceof c.PerspectiveCamera&&this.context.mainCamera[Ih]&&(this.context.mainCamera.fov=this.context.mainCamera[Ih],this.context.mainCamera[Ih]=0)),this.context.requestSizeUpdate(),this._defaultRig.gameObject.removeFromParent(),fa(!1)};_didStart=!1;onBefore=e=>{const t=e.xrFrame;if(!t)return;this.context.xr=this,this.context.mainCameraComponent&&this.context.mainCameraComponent!==this._mainCamera&&(this._mainCamera=this.context.mainCameraComponent),this.rig?.isActive==!1&&(je&&console.warn("Latest rig is not active - trying to activate a different rig",this.rig),this.updateActiveXRRig()),this.rig&&this._mainCamera?.gameObject&&this._mainCamera?.gameObject?.parent!==this.rig.gameObject&&this.rig.gameObject.add(this._mainCamera?.gameObject),this.internalUpdateState(),this.applyCustomForward();const i={xr:this};if(this._didStart){if(this.context.new_scripts_xr.length>0){const n=[...this.context.new_scripts_xr];for(let o=0;o<n.length;o++){const r=this.context.new_scripts_xr[o];if(!r||r.destroyed||r.supportsXR?.(this.mode)==!1){this.context.new_scripts_xr.splice(o,1);continue}if(!r.activeAndEnabled){this.context.new_scripts_xr.splice(o,1),this.markInactive(r);continue}if(this.addScript(r)){this.invokeCallback_EnterXR(r);for(const a of this.controllers)this.invokeCallback_ControllerAdded(r,a)}}}}else{if(this._didStart=!0,this.mode==="immersive-vr"){const o=Wt(this.context.scene.children);if(o){const r=o.getSize(B());if(r.length()>0){const a=this._defaultRig.gameObject;a.position.set(o.min.x+r.x*.5,o.min.y,o.max.z+r.z*.5+1.5);const l=o.getCenter(B());l.y=a.position.y,a.lookAt(l)}}}mv({session:this}),mr();for(const o of G._xrStartListeners)o(i);const n=[...this._xr_scripts];je&&console.log("NeedleXRSession start, handle scripts:",n);for(const o of n){if(o.destroyed){this._script_to_remove.push(o);continue}if(!o.activeAndEnabled){this.markInactive(o);continue}this.invokeCallback_EnterXR(o);for(const r of this.controllers)this.invokeCallback_ControllerAdded(o,r)}}this.syncCameraCullingMask();for(const n of this.controllers)n.onUpdate(t);if(this._newControllers.length>0){const n=[...this._newControllers];this._newControllers.length=0;for(const o of n){if(!o.connected){console.warn("New controller is not connected",o);continue}this.controllers.push(o);for(const r of this._xr_scripts){if(r.destroyed){this._script_to_remove.push(r);continue}r.activeAndEnabled!==!1&&this.invokeCallback_ControllerAdded(r,o)}}this.controllers.sort((o,r)=>o.index-r.index)}je&&this.context.time.frame%30===0&&this.controllers.length<=0&&this.session.inputSources.length>0&&(fa(!0),console.error("XRControllers are not added but inputSources are present"));for(const n of this._xr_update_scripts){if(n.destroyed===!0){this._script_to_remove.push(n);continue}if(n.activeAndEnabled===!1){this.markInactive(n);continue}n.onUpdateXR&&n.onUpdateXR(i)}if(this.handleInactiveScripts(),this._script_to_remove.length>0){const n=[...new Set(this._script_to_remove)];this._script_to_remove.length=0;for(const o of n)!o.destroyed&&this.running&&o.onLeaveXR?.(i),this.removeScript(o)}this.sync?.onUpdate(this),this.onRenderDebug()};onRenderDebug(){if(je)for(const e of this.controllers)e.onRenderDebug();if((je||o_)&&this.rig&&(vf++,vf>=20)){const e=this.rig.gameObject.worldPosition,t=this.rig.gameObject.worldForward;e.add(t.multiplyScalar(1.5));const i=this.rig.gameObject.worldUp;e.add(i.multiplyScalar(2.5));let n="";if(n+=`${this.context.time.smoothedFps.toFixed(0)} FPS`,n+=`, calls: ${this.context.renderer.info.render.calls}, tris: ${this.context.renderer.info.render.triangles.toLocaleString()}`,je||o_)for(const o of this.controllers)n+=`
168
- ${o.hand?"hand":"ctrl"} ${o.inputSource.handedness}[${o.index}] con:${o.connected} tr:${o.isTracking} hts:${o.hasHitTestSource?"yes":"no"}`;vf=0,j.DrawLabel(e,n,void 0,1/60*20)}}onBeforeRender=()=>{this.context.mainCamera&&(this.updateFade(this.context.mainCamera),this.requestedCameraNearPlane!==null&&this.context.mainCamera instanceof c.PerspectiveCamera&&(this.context.mainCamera.near=this.requestedCameraNearPlane,this.requestedCameraNearPlane=null))};onAfterRender=()=>{if(this.onUpdateFade_PostRender(),exports.DeviceUtilities.isDesktop()||!this._renderOnceOnDevice){const e=this.context.renderer;if(e.xr.isPresenting&&this.context.mainCamera){this._renderOnceOnDevice=!0;const t=e.xr.enabled,i=e.getRenderTarget(),n=this.context.scene.background;e.xr.enabled=!1,e.setRenderTarget(null),this.isPassThrough&&(this.context.scene.background=null),this.context.composer?this.context.composer.render(this.context.time.deltaTime):e.render(this.context.scene,this.context.mainCamera),e.xr.enabled=t,e.setRenderTarget(i),this.context.scene.background=n}}};addScript(e){return this._xr_scripts.includes(e)?!1:(je&&console.log("Register new XRScript",e),this._xr_scripts.push(e),typeof e.onUpdateXR=="function"&&this._xr_update_scripts.push(e),!0)}markInactive(e){if(!(this._inactive_scripts.indexOf(e)>=0)){this.removeScript(e,!1),this._inactive_scripts.push(e);for(const t of this.controllers)this.invokeCallback_ControllerRemoved(e,t);this.invokeCallback_LeaveXR(e)}}handleInactiveScripts(){if(this._inactive_scripts.length>0)for(let e=this._inactive_scripts.length-1;e>=0;e--){const t=this._inactive_scripts[e];if(t.activeAndEnabled){this._inactive_scripts.splice(e,1),this.addScript(t),this.invokeCallback_EnterXR(t);for(const i of this.controllers)this.invokeCallback_ControllerAdded(t,i)}}}_script_to_remove=[];removeScript(e,t=!0){je&&console.log("Remove XRScript",e);const i=this._xr_scripts.indexOf(e);i>=0&&this._xr_scripts.splice(i,1);const n=this._xr_update_scripts.indexOf(e);if(n>=0&&this._xr_update_scripts.splice(n,1),t){const o=this._inactive_scripts.indexOf(e);o>=0&&this._inactive_scripts.splice(o,1)}}invokeCallback_EnterXR(e){e.onEnterXR&&e.onEnterXR({xr:this})}invokeCallback_ControllerAdded(e,t){e.onXRControllerAdded&&e.onXRControllerAdded({xr:this,controller:t,change:"added"})}invokeCallback_ControllerRemoved(e,t){e.onXRControllerRemoved&&e.onXRControllerRemoved({xr:this,controller:t,change:"removed"})}invokeCallback_LeaveXR(e){e.onLeaveXR&&!e.destroyed&&e.onLeaveXR({xr:this})}syncCameraCullingMask(){const e=this.context.xrCamera,t=this.context.mainCameraComponent?.cullingMask;if(e&&t!==void 0){for(const i of e.cameras)i.layers.mask=t;e.layers.mask=t}else if(e){for(const i of e.cameras)i.layers.enableAll();e.layers.enableAll()}}invokeControllerEvent(e,t,i){for(let n=t.length-1;n>=0;n--){const o=t[n];if(o)try{o({xr:this,controller:e,change:i})}catch(r){console.error(r)}}}_camera;_cameraRenderParent=new c.Object3D().rotateY(Math.PI);_previousCameraParent;_customforward=!0;originalCameraNearPlane;requestedCameraNearPlane=null;applyCustomForward(){if(this.context.mainCamera&&this._customforward){this._camera=this.context.mainCamera,this._camera.parent!==this._cameraRenderParent&&(this._previousCameraParent=this._camera.parent,this._previousCameraParent?.add(this._cameraRenderParent)),this._cameraRenderParent.name="XR Camera Render Parent",this._cameraRenderParent.add(this._camera);{let e=.02;const t=.001;if(this.rig){const i=Le(this.rig.gameObject);e*=i.x}this._camera instanceof c.PerspectiveCamera&&Math.abs(this._camera.near-e)>t&&(this.isAR?this.originalCameraNearPlane=this._camera.near:this._camera.near=e,je&&console.debug(`Setting camera near plane to ${e} (was ${this.originalCameraNearPlane}) to account for XR rendering scale`))}}}revertCustomForward(){this._camera&&this._previousCameraParent&&this._previousCameraParent.add(this._camera),this._previousCameraParent=null,this._camera instanceof c.PerspectiveCamera&&this.originalCameraNearPlane!=null&&(this._camera.near=this.originalCameraNearPlane,this.originalCameraNearPlane=void 0)}_viewerPose;_transformOrientation=new c.Quaternion;_transformPosition=new c.Vector3;internalUpdateState(){const e=this.context.renderer.xr.getReferenceSpace();if(!e){this._viewerPose=void 0;return}if(this._viewerPose=this.frame.getViewerPose(e),this._viewerPose){const t=this._viewerPose.transform;this._transformPosition.set(t.position.x,t.position.y,t.position.z),this._transformOrientation.set(t.orientation.x,t.orientation.y,t.orientation.z,t.orientation.w)}}_transition;get transition(){return this._transition||(this._transition=new t_),this._transition}fadeTransition(){return this._transition||(this._transition=new t_),this._transition.fadeTransition()}updateFade(e){this._transition&&e instanceof c.PerspectiveCamera&&this._transition.update(e,this.context.time.deltaTime)}onUpdateFade_PostRender(){this._transition?.remove()}}const wf=x("debugwebxr");class kv{static tryFindAvatarObjects(e,t,i){if(i.head&&i.leftHand&&i.rightHand)return;const n=e.name.toLocaleLowerCase();!i.head&&n.includes("head")&&(wf&&console.log("FOUND AVATAR HEAD",e.name),i.head=new K("",t,e)),n.includes("hand")&&(!i.leftHand&&n.includes("left")&&(wf&&console.log("FOUND AVATAR LEFT HAND",e.name),i.leftHand=new K("",t,e)),!i.rightHand&&n.includes("right")&&(wf&&console.log("FOUND AVATAR RIGHT HAND",e.name),i.rightHand=new K("",t,e)));for(let o=0;o<e.children.length;o++){if(i.head&&i.leftHand&&i.rightHand)return;const r=e.children[o];this.tryFindAvatarObjects(r,t,i)}}}class ee extends c.Color{alpha=1;get isRGBAColor(){return!0}set a(e){this.alpha=e}get a(){return this.alpha}constructor(e,t,i,n){super(),typeof e=="number"&&typeof t=="number"&&typeof i=="number"?(this.set(e,t,i),this.alpha=typeof n=="number"?n:1):e!==void 0&&(this.set(e),this.alpha=1)}clone(){const e=super.clone();return e.alpha=this.alpha,e}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,"alpha"in e&&typeof e.alpha=="number"?this.alpha=e.alpha:typeof e.a=="number"&&(this.alpha=e.a),this}lerp(e,t){const i=e;return i.alpha!=null&&(this.alpha=I.lerp(this.alpha,i.alpha,t)),super.lerp(e,t)}lerpColors(e,t,i){const n=e,o=t;return n.alpha!=null&&o.alpha!=null&&(this.alpha=I.lerp(n.alpha,o.alpha,i)),super.lerpColors(e,t,i)}multiply(e){const t=e;return t.alpha!=null&&(this.alpha=this.alpha*t.alpha),super.multiply(e)}fromArray(e,t=0){return this.alpha=e[t+3],super.fromArray(e,t)}static fromColorRepresentation(e){if(typeof e=="string"){if(e.trim()==="transparent")return new ee(0,0,0,0);if(e.startsWith("#")&&e.length===9){const t=parseInt(e.slice(1,9),16),i=t>>24&255,n=t>>16&255,o=t>>8&255,r=t>>0&255;return new ee(i/255,n/255,o/255,r/255)}else if(e.startsWith("#")){const t=parseInt(e.slice(1),16),i=t>>16&255,n=t>>8&255,o=t>>0&255;return new ee(i/255,n/255,o/255,1)}else if(e.startsWith("rgba")){const t=e.slice(5,-1).split(",").map(Number);return new ee(t[0]/255,t[1]/255,t[2]/255,t[3])}else if(e.startsWith("rgb")){const t=e.slice(4,-1).split(",").map(Number);return new ee(t[0]/255,t[1]/255,t[2]/255,1)}}else if(Array.isArray(e)){if(e.length===4)return new ee(e[0],e[1],e[2],e[3]);if(e.length===3)return new ee(e[0],e[1],e[2],1);console.error("Invalid color array length. Expected 3 or 4, got "+e.length)}return new ee(e)}}const St=new c.Vector3,r_=new c.Vector3,a_=new c.Quaternion,BC=x("debuggizmos"),Zi=8947848,xf=32;class j{constructor(){}static enabled=!0;static isGizmo(e){return e[Tp]!==void 0}static setVisible(e){for(const t of Oi.timedObjectsBuffer)t.visible=e}static DrawLabel(e,t,i=.05,n=0,o,r,a){if(!j.enabled)return null;o||(o=Zi);const l=G.active?.rigScale??1,h=Oi.getTextLabel(n,t,i*l,o,r);return a instanceof c.Object3D&&a.add(h),h.position.x=e.x,h.position.y=e.y,h.position.z=e.z,h}static DrawRay(e,t,i=Zi,n=0,o=!0){if(!j.enabled)return;const r=Oi.getLine(n),a=r.geometry.getAttribute("position");a.setXYZ(0,e.x,e.y,e.z),St.set(t.x,t.y,t.z).multiplyScalar(999999999),a.setXYZ(1,e.x+St.x,e.y+St.y,e.z+St.z),a.needsUpdate=!0,r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,nn(r.material,i)}static DrawDirection(e,t,i=Zi,n=0,o=!0,r=1){if(!j.enabled)return;const a=Oi.getLine(n),l=a.geometry.getAttribute("position");l.setXYZ(0,e.x,e.y,e.z),t.w!==void 0?(St.set(0,0,-r),a_.set(t.x,t.y,t.z,t.w),St.applyQuaternion(a_)):(St.set(t.x,t.y,t.z),St.multiplyScalar(r)),l.setXYZ(1,e.x+St.x,e.y+St.y,e.z+St.z),l.needsUpdate=!0,a.material.depthTest=o,a.material.depthWrite=!1,nn(a.material,i)}static DrawLine(e,t,i=Zi,n=0,o=!0){if(!j.enabled)return;const r=Oi.getLine(n),a=r.geometry.getAttribute("position");a.setXYZ(0,e.x,e.y,e.z),a.setXYZ(1,t.x,t.y,t.z),a.needsUpdate=!0,r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,nn(r.material,i)}static DrawCircle(e,t,i,n=Zi,o=0,r=!0){if(!j.enabled)return;const a=Oi.getCircle(o);a.position.set(e.x,e.y,e.z),a.scale.set(i,i,i),a.quaternion.setFromUnitVectors(this._up,St.set(t.x,t.y,t.z).normalize()),a.material.depthTest=r,a.material.depthWrite=!1,a.material.fog=!1,nn(a.material,n)}static DrawWireSphere(e,t,i=Zi,n=0,o=!0){if(!j.enabled)return;const r=Oi.getSphere(t,n,!0);rr(r,e.x,e.y,e.z),r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,nn(r.material,i)}static DrawSphere(e,t,i=Zi,n=0,o=!0){if(!j.enabled)return;const r=Oi.getSphere(t,n,!1);rr(r,e.x,e.y,e.z),r.material.depthTest=o,r.material.depthWrite=!1,nn(r.material,i)}static DrawWireBox(e,t,i=Zi,n=0,o=!0,r=void 0){if(!j.enabled)return;const a=Oi.getBox(n);a.position.set(e.x,e.y,e.z),a.scale.set(t.x,t.y,t.z),r?a.quaternion.copy(r):a.quaternion.identity(),a.material.depthTest=o,a.material.wireframe=!0,a.material.depthWrite=!1,a.material.fog=!1,nn(a.material,i)}static DrawWireBox3(e,t=Zi,i=0,n=!0){if(!j.enabled)return;const o=Oi.getBox(i);o.position.copy(e.getCenter(St)),o.scale.copy(e.getSize(St)),o.material.depthTest=n,o.material.wireframe=!0,o.material.depthWrite=!1,o.material.fog=!1,nn(o.material,t)}static _up=new c.Vector3(0,1,0);static DrawArrow(e,t,i=Zi,n=0,o=!0,r=!1){if(!j.enabled)return;const a=Oi.getArrowHead(n);a.position.set(t.x,t.y,t.z),a.quaternion.setFromUnitVectors(this._up.set(0,1,0),St.set(t.x,t.y,t.z).sub(r_.set(e.x,e.y,e.z)).normalize());const h=St.set(t.x,t.y,t.z).sub(r_.set(e.x,e.y,e.z)).length()*.1;a.scale.set(h,h,h),a.material.depthTest=o,a.material.wireframe=r,nn(a.material,i),this.DrawLine(e,t,i,n,o)}static DrawWireMesh(e){const t=Oi.getMesh(e.duration??0);"mesh"in e?(t.geometry=e.mesh.geometry,t.matrixWorld.copy(e.mesh.matrixWorld)):(t.geometry=e.geometry,t.matrixWorld.copy(e.matrix)),t.matrixAutoUpdate=!1,t.matrixWorldAutoUpdate=!1,t.material.depthTest=e.depthTest??!0,t.material.wireframe=!0,nn(t.material,e.color??Zi)}}const UC=new c.BoxGeometry(1,1,1);function zm(s=null){const e=new c.Color(s??14540253),t=new c.EdgesGeometry(UC);return new c.LineSegments(t,new c.LineBasicMaterial({color:e}))}function nn(s,e){if(Array.isArray(s)){for(const i of s)nn(i,e);return}const t=e instanceof ee?e.a:1;s.color.set(e),s.opacity=t,s.transparent=t<1}const Tp=Symbol("GizmoCache");class Oi{static familyName="needle-gizmos";static ensureFont(){let e=te.__webpack_exports__default.FontLibrary.getFontFamily(this.familyName);e||(e=te.__webpack_exports__default.FontLibrary.addFontFamily(this.familyName),e.addVariant("normal","normal","https://uploads.needle.tools/include/font-msdf.json","https://uploads.needle.tools/include/font.png")?.addEventListener("ready",()=>{te.__webpack_exports__default.update()}))}static getTextLabel(e,t,i,n,o){this.ensureFont();let r=this.textLabelCache.pop(),a=1;o&&typeof o=="string"&&o?.length>=8&&o.startsWith("#")?(a=parseInt(o.substring(7),16)/255,o=o.substring(0,7),BC&&console.log(o,a)):typeof o=="object"&&o.a!==void 0&&(a=o.a);const l={boxSizing:"border-box",fontFamily:this.familyName,width:"auto",fontSize:i,color:n,lineHeight:1,backgroundColor:o??void 0,backgroundOpacity:a,textContent:t,borderRadius:.5*i,padding:.8*i,whiteSpace:"pre",offset:.05*i};if(r)r.set(l);else{r=new te.__webpack_exports__Text(l);const h=this,d=r;d.setText=function(u){this.set({textContent:u}),h.tmuiNeedsUpdate=!0}}return this.tmuiNeedsUpdate=!0,this.registerTimedObject(U.Current,r,e,this.textLabelCache),r}static getBox(e){let t=this.boxesCache.pop();if(!t){const i=new c.BoxGeometry(1,1,1);t=new c.Mesh(i)}return this.registerTimedObject(U.Current,t,e,this.boxesCache),t}static getLine(e){let t=this.linesCache.pop();if(!t){t=new c.Line;let i=t.geometry.getAttribute("position");i||(i=new c.BufferAttribute(new Float32Array(6),3),t.geometry.setAttribute("position",i))}return t.frustumCulled=!1,this.registerTimedObject(U.Current,t,e,this.linesCache),t}static getCircle(e){let t=this.circlesCache.pop();if(!t){t=new c.Line;let i=t.geometry.getAttribute("position");if(!i){i=new c.BufferAttribute(new Float32Array(xf*3),3),t.geometry.setAttribute("position",i);const n=B(0,1,0),o=B(0,0,1),r=B(o);r.cross(n).normalize();const a=B(r),l=Math.PI*2/(xf-1);for(let h=0;h<xf+1;h++){const d=l*h;n.copy(a).multiplyScalar(Math.cos(d)*1),r.copy(o).multiplyScalar(Math.sin(d)*1);const u=n.add(r);i.setXYZ(h,u.x,u.y,u.z)}}}return t.frustumCulled=!1,this.registerTimedObject(U.Current,t,e,this.circlesCache),t}static getSphere(e,t,i){let n=this.spheresCache.pop();return n||(n=new c.Mesh(new c.SphereGeometry(1,8,8))),n.scale.set(e,e,e),n.material.wireframe=i,this.registerTimedObject(U.Current,n,t,this.spheresCache),n}static getArrowHead(e){let t=this.arrowHeadsCache.pop();return t||(t=new c.Mesh(new c.CylinderGeometry(0,.5,1,8))),this.registerTimedObject(U.Current,t,e,this.arrowHeadsCache),t}static getMesh(e){let t=this.mesh.pop();return t||(t=new c.Mesh,t.material=new c.MeshBasicMaterial),this.registerTimedObject(U.Current,t,e,this.mesh),t}static linesCache=[];static circlesCache=[];static spheresCache=[];static boxesCache=[];static arrowHeadsCache=[];static mesh=[];static textLabelCache=[];static registerTimedObject(e,t,i,n){if(!e){console.error("No Needle Engine context available. Did you call a Gizmos function in global scope?");return}const o=this.contextBeforeRenderCallbacks.get(e),r=this.contextPostRenderCallbacks.get(e);if(o){if(e.pre_render_callbacks[e.pre_render_callbacks.length-1]!==o){const a=e.pre_render_callbacks.indexOf(o);a>=0&&e.pre_render_callbacks.splice(a,1),e.pre_render_callbacks.push(o)}}else{const a=()=>{this.onBeforeRender(e,this.timedObjectsBuffer)};this.contextBeforeRenderCallbacks.set(e,a),e.pre_render_callbacks.push(a)}if(r){if(e.post_render_callbacks[e.post_render_callbacks.length-1]!==r){const a=e.post_render_callbacks.indexOf(r);a>=0&&e.post_render_callbacks.splice(a,1),e.post_render_callbacks.push(r)}}else{const a=()=>{this.onPostRender(e,this.timedObjectsBuffer,this.timesBuffer)};this.contextPostRenderCallbacks.set(e,a),e.post_render_callbacks.push(a)}t.traverse(a=>{a.layers.disableAll(),a.layers.enable(2)}),t.renderOrder=999999,t[Tp]=n,t.castShadow=!1,t.receiveShadow=!1,t.isGizmo=!0,this.timedObjectsBuffer.push(t),this.timesBuffer.push(U.Current.time.realtimeSinceStartup+i),e.scene.add(t)}static timedObjectsBuffer=new Array;static timesBuffer=new Array;static contextPostRenderCallbacks=new Map;static contextBeforeRenderCallbacks=new Map;static tmuiNeedsUpdate=!1;static onBeforeRender(e,t){this.tmuiNeedsUpdate&&(this.tmuiNeedsUpdate=!1,te.__webpack_exports__default.update());for(let i=0;i<t.length;i++){const n=t[i];if(e.mainCamera&&n instanceof te.__webpack_exports__default.MeshUIBaseElement){if(ar(n))continue;const o=e.isInVR,r=!1,a=!o;Dc(n,e.mainCamera,r,a)}}}static onPostRender(e,t,i){const n=e.time.realtimeSinceStartup;for(let o=t.length-1;o>=0;o--){const r=t[o];n>=i[o]-1e-6&&(t.splice(o,1),i.splice(o,1),r.removeFromParent(),ar(r)!=!0&&r[Tp].push(r))}}}const zt=x("debugphysics"),FC=x("debugworker"),l_=new c.Layers;class mo{static AllLayers=4294967295;ray;cam;screenPoint;raycaster;results;targets;recursive=!0;minDistance;maxDistance;lineThreshold;layerMask;ignore;testObject;useAcceleratedRaycast;allowSlowRaycastFallback=!0;screenPointFromOffset(e,t){this.screenPoint===void 0&&(this.screenPoint=new c.Vector2),this.screenPoint.x=e/window.innerWidth*2-1,this.screenPoint.y=-(t/window.innerHeight)*2+1}setLayer(e){l_.set(e),this.layerMask=l_}setMask(e){this.layerMask||(this.layerMask=new c.Layers);const t=this.layerMask;t?t.mask=e:this.layerMask=e}}class Nm{distance;point;object;constructor(e,t,i){this.object=e,this.distance=t,this.point=i}}class Ea{static _raycasting=0;static get raycasting(){return this._raycasting>0}raycastPhysicsFast(e,t=void 0,i=1/0,n=!0){return this.context.physics.engine?.raycast(e,t,{maxDistance:i,solid:n})??null}raycastPhysicsFastAndGetNormal(e,t=void 0,i=1/0,n=!0){return this.context.physics.engine?.raycastAndGetNormal(e,t,{maxDistance:i,solid:n})??null}sphereOverlapPhysics(e,t){return this.context.physics.engine?.sphereOverlap(e,t)??null}context;engine;constructor(e){this.context=e}raycaster=new c.Raycaster;defaultRaycastOptions=new mo;targetBuffer=new Array(1);defaultThresholds={Mesh:{},Line:{threshold:-1},LOD:{},Points:{threshold:0},Sprite:{}};sphereResults=new Array;sphereMask=new c.Layers;sphere=new c.Sphere;sphereOverlap(e,t,i=!0,n=!1,o=null){if(this.sphereResults.length=0,!this.context.scene)return this.sphereResults;const r=this.sphereMask;r.enableAll(),r.disable(2);for(const a of this.context.scene.children)this.intersectSphere(a,e,t,r,this.sphereResults,i,n,o);return this.sphereResults.sort((a,l)=>a.distance-l.distance)}raycastFromRay(e,t=null){const i=t??this.defaultRaycastOptions;i.ray=e;const n=this.raycast(i);return i===this.defaultRaycastOptions&&(i.ray=void 0),n}raycast(e=null){zt&&performance.mark("raycast.start"),e||(e=this.defaultRaycastOptions);const t=e.screenPoint??this.context.input.mousePositionRC,i=e.raycaster??this.raycaster;if(i.near=e.minDistance??0,i.far=e.maxDistance??1/0,i.params=this.defaultThresholds,e.lineThreshold===void 0&&(e.lineThreshold=-1),i.params.Line={threshold:e.lineThreshold},e.ray)i.ray.copy(e.ray);else{const a=e.cam??this.context.mainCamera;if(!a)return zt&&console.error("Can not perform raycast - no main camera found"),this.defaultRaycastOptions.results&&(this.defaultRaycastOptions.results.length=0),this.defaultRaycastOptions.results??[];const l=this.context.xrCamera;this.context.isInXR&&l instanceof c.ArrayCamera&&l.cameras.length>0?i.setFromCamera(t,l.cameras[0]):i.setFromCamera(t,a)}let n=e.targets;n||(n=this.targetBuffer,n.length=1,n[0]=this.context.scene);let o=e.results;this.defaultRaycastOptions.results&&(this.defaultRaycastOptions.results.length=0),o||(this.defaultRaycastOptions.results||(this.defaultRaycastOptions.results=new Array),o=this.defaultRaycastOptions.results),e.layerMask!==void 0?e.layerMask instanceof c.Layers?i.layers.mask=e.layerMask.mask:i.layers.mask=e.layerMask:(i.layers.enableAll(),i.layers.disable(2)),zt&&console.time("raycast"),o.length=0,Ea._raycasting++,this.intersect(this.raycaster,n,o,e),o.sort((a,l)=>a.distance-l.distance);const r=e.ignore;return r!==void 0&&r.length>0&&(o=o.filter(a=>!r.includes(a.object))),Ea._raycasting--,zt&&(console.timeEnd("raycast"),console.warn("#"+this.context.time.frame+", hits:",o?.length?[...o]:"nothing"),performance.mark("raycast.end"),performance.measure("raycast","raycast.start","raycast.end")),o}intersect(e,t,i,n){for(const o of t){if(!o||o.visible===!1||j.isGizmo(o)||n.lineThreshold!==void 0&&n.lineThreshold<0&&o instanceof c.Line)continue;let r=!0;const a=o,l=a.geometry;if(o.raycastAllowed===!1&&(r=!1),r&&n.testObject){const h=n.testObject?.(o);if(h===!1)continue;h==="continue in children"&&(r=!1)}else r&&(l&&c_(l)||(r=!1));if(r){const h=i.length,d=o.raycastPreference||"lod";let u=d!=="bounds";if(n.precise===!1&&(u=!1),l&&(u||=l.getAttribute("position")?.array?.length<64),a instanceof q.GroundedSkybox&&(u=!1),d==="lod"){const p=se.getRaycastMesh(o);p&&(a.geometry=p)}if(!u&&NC(a,e,i)||(n.useAcceleratedRaycast!==!1?Dd.runMeshBVHRaycast(e,a,i,this.context,n):e.intersectObject(a,!1,i)),a.geometry=l,zt&&i.length!=h){const p=i[i.length-1];j.DrawWireSphere(p.point,.1,7798784,1,!1),j.DrawWireMesh({mesh:o,depthTest:!1,duration:.2,color:7798784})}}n.recursive!==!1&&this.intersect(e,o.children,i,n)}return i}tempBoundingBox=new c.Box3;intersectSphere(e,t,i,n,o,r,a,l){let h=e&&e.isMesh&&e.layers.test(n)&&!j.isGizmo(e);h&&=e.visible,h&&=!(e instanceof c.Line),h&&=!(e instanceof q.GroundedSkybox);const d=e,u=d.geometry;if(h&&l){const p=l(e);if(p===!1)return;p==="continue in children"&&(h=!1)}if(u&&c_(u)||(h=!1),h){if(a){const p=this.sphere;p.center.copy(t),p.radius=i;const m=o.length;if(Dd.runMeshBVHRaycast(this.sphere,d,o,this.context,{}),m!=o.length&&!r)return}else if(u.boundingBox||u.computeBoundingBox(),u.boundingBox){d.matrixWorldNeedsUpdate&&d.updateWorldMatrix(!1,!1);const p=this.tempBoundingBox.copy(u.boundingBox).applyMatrix4(d.matrixWorld),m=this.sphere;if(m.center.copy(t),m.radius=i,m.intersectsBox(p)){const g=Q(e),_=g.distanceTo(m.center),y=new Nm(e,_,g);if(o.push(y),!r)return}}}if(e.children)for(const p of e.children){const m=o.length;if(this.intersectSphere(p,t,i,n,o,r,a,l),m!=o.length&&!r)return}}}function c_(s){return!(s.index&&s.index.array.length<3)}const Ao=new c.Sphere,jh=new c.Plane,zC=new c.Matrix3;function NC(s,e,t){const i=s._computeIntersections;if(!i)return!1;let n=s["_computeIntersections:Needle"];return n||(n=s["_computeIntersections:Needle"]=function(o,r,a){const l=this,h=l.geometry.boundingSphere;if(h){if(l instanceof q.GroundedSkybox){jh.setFromNormalAndCoplanarPoint(B(0,1,0),B(0,-l.position.y,0)),jh.applyMatrix4(l.matrixWorld,zC);const u=o.ray.intersectPlane(jh,B());if(u){Ao.copy(h),Ao.applyMatrix4(l.matrixWorld);const m=B(u).sub(o.ray.origin).length(),g=Ao.radius*.5;m<g&&r.push({distance:m,point:u,object:l,normal:jh.normal.clone()})}return}Ao.copy(h),Ao.applyMatrix4(l.matrixWorld);const d=o.ray.intersectSphere(Ao,B());if(d){const u=B(d).sub(o.ray.origin),p=u.length();if(p>Ao.radius){const m=u.clone().normalize();r.push({distance:p,point:d,object:l,normal:m})}}}}),s._computeIntersections=n,e.intersectObject(s,!1,t),s._computeIntersections=i,!0}var Dd;(s=>{let e=0;function t(b,w,R,M,O){if(!w.geometry||!w.geometry.hasAttribute("position"))return!1;const A=w.geometry;if(w?.isSkinnedMesh){const D=w,L=D.bvhNeedsUpdate;if(!D.staticGenerator)l(),r&&(D.staticGenerator=new r(w),D.staticGenerator.applyWorldTransforms=!1,D.staticGeometry=D.staticGenerator.generate(),A.boundsTree=a?.call(D.staticGeometry),D.staticGeometryLastUpdate=performance.now()+Math.random()*200,D.bvhNeedsUpdate=!0);else if(A.boundsTree&&(D.autoUpdateMeshBvhInterval!==void 0&&D.autoUpdateMeshBvhInterval>=0||L===!0)){const N=performance.now(),$=N-D.staticGeometryLastUpdate,k=D.autoUpdateMeshBvhInterval??100;(L||$>k)&&(zt&&console.warn(`Physics: updating skinned mesh bvh for ${w.name} after ${$.toFixed(2)}ms`),D.bvhNeedsUpdate=!1,D.staticGeometryLastUpdate=N,D.staticGenerator?.generate(D.staticGeometry),A.boundsTree.refit())}}else if(!A.boundsTree){d||v();let D=!0;if((M.xr||A[g]===!1||A.getAttribute("position")?.isInterleavedBufferAttribute||A.index&&A.index?.isInterleavedBufferAttribute||e>10)&&(D=!1),D&&p){if(A[m]===void 0){let L=null;if(y.length>0){const N=y.shift();N&&!N.running&&(L=N)}if(!L&&_.length<3)try{FC&&console.warn("[GenerateMeshBVHWorker] Creating worker with import.meta.url:",typeof document>"u"?require("url").pathToFileURL(__filename).href:ua&&ua.tagName.toUpperCase()==="SCRIPT"&&ua.src||new URL("needle-engine.bundle-MTOikD86.umd.cjs",document.baseURI).href),L=new p,_.push(L)}catch(N){N instanceof DOMException&&N.name==="SecurityError"?(console.warn("Failed to create MeshBVH worker, falling back to main thread generation. This can happen when running from file://, if the browser does not support workers or if the browser is blocking workers for other reasons."),console.debug(N),e+=10):(console.error("Failed to create MeshBVH worker. Please see below for more details:"),console.log(N)),e++}if(L!=null&&!L.running){const N=w.name;zt&&console.log("<<<< worker start",N,L),A[m]="queued",performance.mark("bvh.create.start");const $=A.clone();try{L.generate($).then(k=>{A[m]="done",A.boundsTree=k}).catch(k=>{A[m]="failed - "+k?.message,A[g]=!1,zt&&console.error("Failed to generate mesh bvh on worker",k)}).finally(()=>{zt&&console.log(">>>>> worker done",N,{hasBoundsTre:A.boundsTree!=null}),y.push(L),$.dispose(),performance.mark("bvh.create.end"),performance.measure("bvh.create (worker)","bvh.create.start","bvh.create.end")})}catch(k){console.error("Failed to generate mesh bvh on worker",k)}}else zt&&console.warn("No worker available")}}else(!u||!D)&&(l(),o&&(performance.mark("bvh.create.start"),A.boundsTree=new o(A),performance.mark("bvh.create.end"),performance.measure("bvh.create","bvh.create.start","bvh.create.end")))}if(b instanceof c.Raycaster){const D=b,L=w.raycast;if(A.boundsTree)l(),n&&(w.acceleratedRaycast||(w.acceleratedRaycast=n.bind(w),zt&&console.debug(`Physics: bind acceleratedRaycast fn to "${w.name}"`)),w.raycast=w.acceleratedRaycast);else if(zt&&console.warn("No bounds tree found for mesh",w.name,{workerTask:A[m],hasAcceleratedRaycast:n!=null}),O.allowSlowRaycastFallback===!1&&(A.getAttribute("position")?.array?.length??0)>2e3)return zt&&console.warn("Skipping raycast because no bounds tree is available and allowSlowRaycastFallback is false"),!1;const N=D.firstHitOnly;return D.firstHitOnly=!1,D.intersectObject(w,!1,R),D.firstHitOnly=N,w.raycast=L,!0}else if(b instanceof c.Sphere){const D=A.boundsTree;if(D){const L=b;if(h.copy(w.matrixWorld).invert(),L.applyMatrix4(h),D.intersectsSphere(L)){const $=Q(w),k=$.distanceTo(L.center),z=new Nm(w,k,$);R.push(z)}}return!0}return!1}s.runMeshBVHRaycast=t;let i=!1,n=null,o=null,r=null,a=null;function l(){i||(i=!0,Promise.resolve().then(()=>require("./vendor-COVQl0b8.umd.cjs")).then(b=>b.index$1).then(b=>{n=b.acceleratedRaycast,o=b.MeshBVH,r=b.StaticGeometryGenerator,a=b.computeBoundsTree}).catch(b=>{(zt||T())&&console.error("Failed to load BVH library...",b.message)}))}const h=new c.Matrix4;let d=!1,u=!1,p=null;const m=Symbol("Needle:MeshBVH-Worker"),g=Symbol("Needle:MeshBVH-CanUseWorker"),_=[],y=[];function v(){d=!0,u=!0,Promise.resolve().then(()=>VT).then(b=>{p=b.GenerateMeshBVHWorker}).catch(b=>{zt||T()?console.warn("Failed to setup mesh bvh worker"):console.debug("Failed to setup mesh bvh worker",b)}).finally(()=>{u=!1})}})(Dd||(Dd={}));const h_=Symbol("gltf-loader-internal-usage-tracker"),VC=x("debugusers");class ga{get name(){return"NEEDLE_internal_usage_tracker"}static isLoading(e){return ga._loadingProcesses>0}static _loadingProcesses=0;parser;_getDependency;_loadingId;_loadedObjects=new Set;constructor(e){this.parser=e,this._getDependency=this.parser.getDependency,this._loadingId=Date.now().toString()}beforeRoot(){ga._loadingProcesses++;const e=this,t=this._getDependency;return this.parser.getDependency=function(i,n){const o=t.call(this,i,n);return o.then(r=>(r&&(e._loadedObjects.add(r),r[h_]=e._loadingId),r)),o},null}afterRoot(e){ga._loadingProcesses--,this.parser.getDependency=this._getDependency;for(const t of this._loadedObjects)delete t[h_],t instanceof c.Object3D&&(t.parent||t instanceof c.Mesh&&setTimeout(()=>{VC&&console.warn("> GLTF LOADER: Mesh not used in scene!",t),t.material=null,t.geometry=null},1e3));return null}}class Ev{constructor(){window.addEventListener("unhandledrejection",e=>{if(e.defaultPrevented)return;const t=e?.reason?.path;if(t){const i=t[0];i&&i.tagName==="IMG"&&(console.warn(`Could not load image:
168
+ ${o.hand?"hand":"ctrl"} ${o.inputSource.handedness}[${o.index}] con:${o.connected} tr:${o.isTracking} hts:${o.hasHitTestSource?"yes":"no"}`;vf=0,j.DrawLabel(e,n,void 0,1/60*20)}}onBeforeRender=()=>{this.context.mainCamera&&(this.updateFade(this.context.mainCamera),this.requestedCameraNearPlane!==null&&this.context.mainCamera instanceof c.PerspectiveCamera&&(this.context.mainCamera.near=this.requestedCameraNearPlane,this.requestedCameraNearPlane=null))};onAfterRender=()=>{if(this.onUpdateFade_PostRender(),exports.DeviceUtilities.isDesktop()||!this._renderOnceOnDevice){const e=this.context.renderer;if(e.xr.isPresenting&&this.context.mainCamera){this._renderOnceOnDevice=!0;const t=e.xr.enabled,i=e.getRenderTarget(),n=this.context.scene.background;e.xr.enabled=!1,e.setRenderTarget(null),this.isPassThrough&&(this.context.scene.background=null),this.context.composer?this.context.composer.render(this.context.time.deltaTime):e.render(this.context.scene,this.context.mainCamera),e.xr.enabled=t,e.setRenderTarget(i),this.context.scene.background=n}}};addScript(e){return this._xr_scripts.includes(e)?!1:(je&&console.log("Register new XRScript",e),this._xr_scripts.push(e),typeof e.onUpdateXR=="function"&&this._xr_update_scripts.push(e),!0)}markInactive(e){if(!(this._inactive_scripts.indexOf(e)>=0)){this.removeScript(e,!1),this._inactive_scripts.push(e);for(const t of this.controllers)this.invokeCallback_ControllerRemoved(e,t);this.invokeCallback_LeaveXR(e)}}handleInactiveScripts(){if(this._inactive_scripts.length>0)for(let e=this._inactive_scripts.length-1;e>=0;e--){const t=this._inactive_scripts[e];if(t.activeAndEnabled){this._inactive_scripts.splice(e,1),this.addScript(t),this.invokeCallback_EnterXR(t);for(const i of this.controllers)this.invokeCallback_ControllerAdded(t,i)}}}_script_to_remove=[];removeScript(e,t=!0){je&&console.log("Remove XRScript",e);const i=this._xr_scripts.indexOf(e);i>=0&&this._xr_scripts.splice(i,1);const n=this._xr_update_scripts.indexOf(e);if(n>=0&&this._xr_update_scripts.splice(n,1),t){const o=this._inactive_scripts.indexOf(e);o>=0&&this._inactive_scripts.splice(o,1)}}invokeCallback_EnterXR(e){e.onEnterXR&&e.onEnterXR({xr:this})}invokeCallback_ControllerAdded(e,t){e.onXRControllerAdded&&e.onXRControllerAdded({xr:this,controller:t,change:"added"})}invokeCallback_ControllerRemoved(e,t){e.onXRControllerRemoved&&e.onXRControllerRemoved({xr:this,controller:t,change:"removed"})}invokeCallback_LeaveXR(e){e.onLeaveXR&&!e.destroyed&&e.onLeaveXR({xr:this})}syncCameraCullingMask(){const e=this.context.xrCamera,t=this.context.mainCameraComponent?.cullingMask;if(e&&t!==void 0){for(const i of e.cameras)i.layers.mask=t;e.layers.mask=t}else if(e){for(const i of e.cameras)i.layers.enableAll();e.layers.enableAll()}}invokeControllerEvent(e,t,i){for(let n=t.length-1;n>=0;n--){const o=t[n];if(o)try{o({xr:this,controller:e,change:i})}catch(r){console.error(r)}}}_camera;_cameraRenderParent=new c.Object3D().rotateY(Math.PI);_previousCameraParent;_customforward=!0;originalCameraNearPlane;requestedCameraNearPlane=null;applyCustomForward(){if(this.context.mainCamera&&this._customforward){this._camera=this.context.mainCamera,this._camera.parent!==this._cameraRenderParent&&(this._previousCameraParent=this._camera.parent,this._previousCameraParent?.add(this._cameraRenderParent)),this._cameraRenderParent.name="XR Camera Render Parent",this._cameraRenderParent.add(this._camera);{let e=.02;const t=.001;if(this.rig){const i=Le(this.rig.gameObject);e*=i.x}this._camera instanceof c.PerspectiveCamera&&Math.abs(this._camera.near-e)>t&&(this.isAR?this.originalCameraNearPlane=this._camera.near:this._camera.near=e,je&&console.debug(`Setting camera near plane to ${e} (was ${this.originalCameraNearPlane}) to account for XR rendering scale`))}}}revertCustomForward(){this._camera&&this._previousCameraParent&&this._previousCameraParent.add(this._camera),this._previousCameraParent=null,this._camera instanceof c.PerspectiveCamera&&this.originalCameraNearPlane!=null&&(this._camera.near=this.originalCameraNearPlane,this.originalCameraNearPlane=void 0)}_viewerPose;_transformOrientation=new c.Quaternion;_transformPosition=new c.Vector3;internalUpdateState(){const e=this.context.renderer.xr.getReferenceSpace();if(!e){this._viewerPose=void 0;return}if(this._viewerPose=this.frame.getViewerPose(e),this._viewerPose){const t=this._viewerPose.transform;this._transformPosition.set(t.position.x,t.position.y,t.position.z),this._transformOrientation.set(t.orientation.x,t.orientation.y,t.orientation.z,t.orientation.w)}}_transition;get transition(){return this._transition||(this._transition=new t_),this._transition}fadeTransition(){return this._transition||(this._transition=new t_),this._transition.fadeTransition()}updateFade(e){this._transition&&e instanceof c.PerspectiveCamera&&this._transition.update(e,this.context.time.deltaTime)}onUpdateFade_PostRender(){this._transition?.remove()}}const wf=x("debugwebxr");class kv{static tryFindAvatarObjects(e,t,i){if(i.head&&i.leftHand&&i.rightHand)return;const n=e.name.toLocaleLowerCase();!i.head&&n.includes("head")&&(wf&&console.log("FOUND AVATAR HEAD",e.name),i.head=new K("",t,e)),n.includes("hand")&&(!i.leftHand&&n.includes("left")&&(wf&&console.log("FOUND AVATAR LEFT HAND",e.name),i.leftHand=new K("",t,e)),!i.rightHand&&n.includes("right")&&(wf&&console.log("FOUND AVATAR RIGHT HAND",e.name),i.rightHand=new K("",t,e)));for(let o=0;o<e.children.length;o++){if(i.head&&i.leftHand&&i.rightHand)return;const r=e.children[o];this.tryFindAvatarObjects(r,t,i)}}}class ee extends c.Color{alpha=1;get isRGBAColor(){return!0}set a(e){this.alpha=e}get a(){return this.alpha}constructor(e,t,i,n){super(),typeof e=="number"&&typeof t=="number"&&typeof i=="number"?(this.set(e,t,i),this.alpha=typeof n=="number"?n:1):e!==void 0&&(this.set(e),this.alpha=1)}clone(){const e=super.clone();return e.alpha=this.alpha,e}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,"alpha"in e&&typeof e.alpha=="number"?this.alpha=e.alpha:typeof e.a=="number"&&(this.alpha=e.a),this}lerp(e,t){const i=e;return i.alpha!=null&&(this.alpha=I.lerp(this.alpha,i.alpha,t)),super.lerp(e,t)}lerpColors(e,t,i){const n=e,o=t;return n.alpha!=null&&o.alpha!=null&&(this.alpha=I.lerp(n.alpha,o.alpha,i)),super.lerpColors(e,t,i)}multiply(e){const t=e;return t.alpha!=null&&(this.alpha=this.alpha*t.alpha),super.multiply(e)}fromArray(e,t=0){return this.alpha=e[t+3],super.fromArray(e,t)}static fromColorRepresentation(e){if(typeof e=="string"){if(e.trim()==="transparent")return new ee(0,0,0,0);if(e.startsWith("#")&&e.length===9){const t=parseInt(e.slice(1,9),16),i=t>>24&255,n=t>>16&255,o=t>>8&255,r=t>>0&255;return new ee(i/255,n/255,o/255,r/255)}else if(e.startsWith("#")){const t=parseInt(e.slice(1),16),i=t>>16&255,n=t>>8&255,o=t>>0&255;return new ee(i/255,n/255,o/255,1)}else if(e.startsWith("rgba")){const t=e.slice(5,-1).split(",").map(Number);return new ee(t[0]/255,t[1]/255,t[2]/255,t[3])}else if(e.startsWith("rgb")){const t=e.slice(4,-1).split(",").map(Number);return new ee(t[0]/255,t[1]/255,t[2]/255,1)}}else if(Array.isArray(e)){if(e.length===4)return new ee(e[0],e[1],e[2],e[3]);if(e.length===3)return new ee(e[0],e[1],e[2],1);console.error("Invalid color array length. Expected 3 or 4, got "+e.length)}return new ee(e)}}const St=new c.Vector3,r_=new c.Vector3,a_=new c.Quaternion,BC=x("debuggizmos"),Zi=8947848,xf=32;class j{constructor(){}static enabled=!0;static isGizmo(e){return e[Tp]!==void 0}static setVisible(e){for(const t of Oi.timedObjectsBuffer)t.visible=e}static DrawLabel(e,t,i=.05,n=0,o,r,a){if(!j.enabled)return null;o||(o=Zi);const l=G.active?.rigScale??1,h=Oi.getTextLabel(n,t,i*l,o,r);return a instanceof c.Object3D&&a.add(h),h.position.x=e.x,h.position.y=e.y,h.position.z=e.z,h}static DrawRay(e,t,i=Zi,n=0,o=!0){if(!j.enabled)return;const r=Oi.getLine(n),a=r.geometry.getAttribute("position");a.setXYZ(0,e.x,e.y,e.z),St.set(t.x,t.y,t.z).multiplyScalar(999999999),a.setXYZ(1,e.x+St.x,e.y+St.y,e.z+St.z),a.needsUpdate=!0,r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,nn(r.material,i)}static DrawDirection(e,t,i=Zi,n=0,o=!0,r=1){if(!j.enabled)return;const a=Oi.getLine(n),l=a.geometry.getAttribute("position");l.setXYZ(0,e.x,e.y,e.z),t.w!==void 0?(St.set(0,0,-r),a_.set(t.x,t.y,t.z,t.w),St.applyQuaternion(a_)):(St.set(t.x,t.y,t.z),St.multiplyScalar(r)),l.setXYZ(1,e.x+St.x,e.y+St.y,e.z+St.z),l.needsUpdate=!0,a.material.depthTest=o,a.material.depthWrite=!1,nn(a.material,i)}static DrawLine(e,t,i=Zi,n=0,o=!0){if(!j.enabled)return;const r=Oi.getLine(n),a=r.geometry.getAttribute("position");a.setXYZ(0,e.x,e.y,e.z),a.setXYZ(1,t.x,t.y,t.z),a.needsUpdate=!0,r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,nn(r.material,i)}static DrawCircle(e,t,i,n=Zi,o=0,r=!0){if(!j.enabled)return;const a=Oi.getCircle(o);a.position.set(e.x,e.y,e.z),a.scale.set(i,i,i),a.quaternion.setFromUnitVectors(this._up,St.set(t.x,t.y,t.z).normalize()),a.material.depthTest=r,a.material.depthWrite=!1,a.material.fog=!1,nn(a.material,n)}static DrawWireSphere(e,t,i=Zi,n=0,o=!0){if(!j.enabled)return;const r=Oi.getSphere(t,n,!0);rr(r,e.x,e.y,e.z),r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,nn(r.material,i)}static DrawSphere(e,t,i=Zi,n=0,o=!0){if(!j.enabled)return;const r=Oi.getSphere(t,n,!1);rr(r,e.x,e.y,e.z),r.material.depthTest=o,r.material.depthWrite=!1,nn(r.material,i)}static DrawWireBox(e,t,i=Zi,n=0,o=!0,r=void 0){if(!j.enabled)return;const a=Oi.getBox(n);a.position.set(e.x,e.y,e.z),a.scale.set(t.x,t.y,t.z),r?a.quaternion.copy(r):a.quaternion.identity(),a.material.depthTest=o,a.material.wireframe=!0,a.material.depthWrite=!1,a.material.fog=!1,nn(a.material,i)}static DrawWireBox3(e,t=Zi,i=0,n=!0){if(!j.enabled)return;const o=Oi.getBox(i);o.position.copy(e.getCenter(St)),o.scale.copy(e.getSize(St)),o.material.depthTest=n,o.material.wireframe=!0,o.material.depthWrite=!1,o.material.fog=!1,nn(o.material,t)}static _up=new c.Vector3(0,1,0);static DrawArrow(e,t,i=Zi,n=0,o=!0,r=!1){if(!j.enabled)return;const a=Oi.getArrowHead(n);a.position.set(t.x,t.y,t.z),a.quaternion.setFromUnitVectors(this._up.set(0,1,0),St.set(t.x,t.y,t.z).sub(r_.set(e.x,e.y,e.z)).normalize());const h=St.set(t.x,t.y,t.z).sub(r_.set(e.x,e.y,e.z)).length()*.1;a.scale.set(h,h,h),a.material.depthTest=o,a.material.wireframe=r,nn(a.material,i),this.DrawLine(e,t,i,n,o)}static DrawWireMesh(e){const t=Oi.getMesh(e.duration??0);"mesh"in e?(t.geometry=e.mesh.geometry,t.matrixWorld.copy(e.mesh.matrixWorld)):(t.geometry=e.geometry,t.matrixWorld.copy(e.matrix)),t.matrixAutoUpdate=!1,t.matrixWorldAutoUpdate=!1,t.material.depthTest=e.depthTest??!0,t.material.wireframe=!0,nn(t.material,e.color??Zi)}}const UC=new c.BoxGeometry(1,1,1);function zm(s=null){const e=new c.Color(s??14540253),t=new c.EdgesGeometry(UC);return new c.LineSegments(t,new c.LineBasicMaterial({color:e}))}function nn(s,e){if(Array.isArray(s)){for(const i of s)nn(i,e);return}const t=e instanceof ee?e.a:1;s.color.set(e),s.opacity=t,s.transparent=t<1}const Tp=Symbol("GizmoCache");class Oi{static familyName="needle-gizmos";static ensureFont(){let e=te.__webpack_exports__default.FontLibrary.getFontFamily(this.familyName);e||(e=te.__webpack_exports__default.FontLibrary.addFontFamily(this.familyName),e.addVariant("normal","normal","https://uploads.needle.tools/include/font-msdf.json","https://uploads.needle.tools/include/font.png")?.addEventListener("ready",()=>{te.__webpack_exports__default.update()}))}static getTextLabel(e,t,i,n,o){this.ensureFont();let r=this.textLabelCache.pop(),a=1;o&&typeof o=="string"&&o?.length>=8&&o.startsWith("#")?(a=parseInt(o.substring(7),16)/255,o=o.substring(0,7),BC&&console.log(o,a)):typeof o=="object"&&o.a!==void 0&&(a=o.a);const l={boxSizing:"border-box",fontFamily:this.familyName,width:"auto",fontSize:i,color:n,lineHeight:1,backgroundColor:o??void 0,backgroundOpacity:a,textContent:t,borderRadius:.5*i,padding:.8*i,whiteSpace:"pre",offset:.05*i};if(r)r.set(l);else{r=new te.__webpack_exports__Text(l);const h=this,d=r;d.setText=function(u){this.set({textContent:u}),h.tmuiNeedsUpdate=!0}}return this.tmuiNeedsUpdate=!0,this.registerTimedObject(U.Current,r,e,this.textLabelCache),r}static getBox(e){let t=this.boxesCache.pop();if(!t){const i=new c.BoxGeometry(1,1,1);t=new c.Mesh(i)}return this.registerTimedObject(U.Current,t,e,this.boxesCache),t}static getLine(e){let t=this.linesCache.pop();if(!t){t=new c.Line;let i=t.geometry.getAttribute("position");i||(i=new c.BufferAttribute(new Float32Array(6),3),t.geometry.setAttribute("position",i))}return t.frustumCulled=!1,this.registerTimedObject(U.Current,t,e,this.linesCache),t}static getCircle(e){let t=this.circlesCache.pop();if(!t){t=new c.Line;let i=t.geometry.getAttribute("position");if(!i){i=new c.BufferAttribute(new Float32Array(xf*3),3),t.geometry.setAttribute("position",i);const n=B(0,1,0),o=B(0,0,1),r=B(o);r.cross(n).normalize();const a=B(r),l=Math.PI*2/(xf-1);for(let h=0;h<xf+1;h++){const d=l*h;n.copy(a).multiplyScalar(Math.cos(d)*1),r.copy(o).multiplyScalar(Math.sin(d)*1);const u=n.add(r);i.setXYZ(h,u.x,u.y,u.z)}}}return t.frustumCulled=!1,this.registerTimedObject(U.Current,t,e,this.circlesCache),t}static getSphere(e,t,i){let n=this.spheresCache.pop();return n||(n=new c.Mesh(new c.SphereGeometry(1,8,8))),n.scale.set(e,e,e),n.material.wireframe=i,this.registerTimedObject(U.Current,n,t,this.spheresCache),n}static getArrowHead(e){let t=this.arrowHeadsCache.pop();return t||(t=new c.Mesh(new c.CylinderGeometry(0,.5,1,8))),this.registerTimedObject(U.Current,t,e,this.arrowHeadsCache),t}static getMesh(e){let t=this.mesh.pop();return t||(t=new c.Mesh,t.material=new c.MeshBasicMaterial),this.registerTimedObject(U.Current,t,e,this.mesh),t}static linesCache=[];static circlesCache=[];static spheresCache=[];static boxesCache=[];static arrowHeadsCache=[];static mesh=[];static textLabelCache=[];static registerTimedObject(e,t,i,n){if(!e){console.error("No Needle Engine context available. Did you call a Gizmos function in global scope?");return}const o=this.contextBeforeRenderCallbacks.get(e),r=this.contextPostRenderCallbacks.get(e);if(o){if(e.pre_render_callbacks[e.pre_render_callbacks.length-1]!==o){const a=e.pre_render_callbacks.indexOf(o);a>=0&&e.pre_render_callbacks.splice(a,1),e.pre_render_callbacks.push(o)}}else{const a=()=>{this.onBeforeRender(e,this.timedObjectsBuffer)};this.contextBeforeRenderCallbacks.set(e,a),e.pre_render_callbacks.push(a)}if(r){if(e.post_render_callbacks[e.post_render_callbacks.length-1]!==r){const a=e.post_render_callbacks.indexOf(r);a>=0&&e.post_render_callbacks.splice(a,1),e.post_render_callbacks.push(r)}}else{const a=()=>{this.onPostRender(e,this.timedObjectsBuffer,this.timesBuffer)};this.contextPostRenderCallbacks.set(e,a),e.post_render_callbacks.push(a)}t.traverse(a=>{a.layers.disableAll(),a.layers.enable(2)}),t.renderOrder=999999,t[Tp]=n,t.castShadow=!1,t.receiveShadow=!1,t.isGizmo=!0,this.timedObjectsBuffer.push(t),this.timesBuffer.push(U.Current.time.realtimeSinceStartup+i),e.scene.add(t)}static timedObjectsBuffer=new Array;static timesBuffer=new Array;static contextPostRenderCallbacks=new Map;static contextBeforeRenderCallbacks=new Map;static tmuiNeedsUpdate=!1;static onBeforeRender(e,t){this.tmuiNeedsUpdate&&(this.tmuiNeedsUpdate=!1,te.__webpack_exports__default.update());for(let i=0;i<t.length;i++){const n=t[i];if(e.mainCamera&&n instanceof te.__webpack_exports__default.MeshUIBaseElement){if(ar(n))continue;const o=e.isInVR,r=!1,a=!o;Dc(n,e.mainCamera,r,a)}}}static onPostRender(e,t,i){const n=e.time.realtimeSinceStartup;for(let o=t.length-1;o>=0;o--){const r=t[o];n>=i[o]-1e-6&&(t.splice(o,1),i.splice(o,1),r.removeFromParent(),ar(r)!=!0&&r[Tp].push(r))}}}const zt=x("debugphysics"),FC=x("debugworker"),l_=new c.Layers;class mo{static AllLayers=4294967295;ray;cam;screenPoint;raycaster;results;targets;recursive=!0;minDistance;maxDistance;lineThreshold;layerMask;ignore;testObject;useAcceleratedRaycast;allowSlowRaycastFallback=!0;screenPointFromOffset(e,t){this.screenPoint===void 0&&(this.screenPoint=new c.Vector2),this.screenPoint.x=e/window.innerWidth*2-1,this.screenPoint.y=-(t/window.innerHeight)*2+1}setLayer(e){l_.set(e),this.layerMask=l_}setMask(e){this.layerMask||(this.layerMask=new c.Layers);const t=this.layerMask;t?t.mask=e:this.layerMask=e}}class Nm{distance;point;object;constructor(e,t,i){this.object=e,this.distance=t,this.point=i}}class Ea{static _raycasting=0;static get raycasting(){return this._raycasting>0}raycastPhysicsFast(e,t=void 0,i=1/0,n=!0){return this.context.physics.engine?.raycast(e,t,{maxDistance:i,solid:n})??null}raycastPhysicsFastAndGetNormal(e,t=void 0,i=1/0,n=!0){return this.context.physics.engine?.raycastAndGetNormal(e,t,{maxDistance:i,solid:n})??null}sphereOverlapPhysics(e,t){return this.context.physics.engine?.sphereOverlap(e,t)??null}context;engine;constructor(e){this.context=e}raycaster=new c.Raycaster;defaultRaycastOptions=new mo;targetBuffer=new Array(1);defaultThresholds={Mesh:{},Line:{threshold:-1},LOD:{},Points:{threshold:0},Sprite:{}};sphereResults=new Array;sphereMask=new c.Layers;sphere=new c.Sphere;sphereOverlap(e,t,i=!0,n=!1,o=null){if(this.sphereResults.length=0,!this.context.scene)return this.sphereResults;const r=this.sphereMask;r.enableAll(),r.disable(2);for(const a of this.context.scene.children)this.intersectSphere(a,e,t,r,this.sphereResults,i,n,o);return this.sphereResults.sort((a,l)=>a.distance-l.distance)}raycastFromRay(e,t=null){const i=t??this.defaultRaycastOptions;i.ray=e;const n=this.raycast(i);return i===this.defaultRaycastOptions&&(i.ray=void 0),n}raycast(e=null){zt&&performance.mark("raycast.start"),e||(e=this.defaultRaycastOptions);const t=e.screenPoint??this.context.input.mousePositionRC,i=e.raycaster??this.raycaster;if(i.near=e.minDistance??0,i.far=e.maxDistance??1/0,i.params=this.defaultThresholds,e.lineThreshold===void 0&&(e.lineThreshold=-1),i.params.Line={threshold:e.lineThreshold},e.ray)i.ray.copy(e.ray);else{const a=e.cam??this.context.mainCamera;if(!a)return zt&&console.error("Can not perform raycast - no main camera found"),this.defaultRaycastOptions.results&&(this.defaultRaycastOptions.results.length=0),this.defaultRaycastOptions.results??[];const l=this.context.xrCamera;this.context.isInXR&&l instanceof c.ArrayCamera&&l.cameras.length>0?i.setFromCamera(t,l.cameras[0]):i.setFromCamera(t,a)}let n=e.targets;n||(n=this.targetBuffer,n.length=1,n[0]=this.context.scene);let o=e.results;this.defaultRaycastOptions.results&&(this.defaultRaycastOptions.results.length=0),o||(this.defaultRaycastOptions.results||(this.defaultRaycastOptions.results=new Array),o=this.defaultRaycastOptions.results),e.layerMask!==void 0?e.layerMask instanceof c.Layers?i.layers.mask=e.layerMask.mask:i.layers.mask=e.layerMask:(i.layers.enableAll(),i.layers.disable(2)),zt&&console.time("raycast"),o.length=0,Ea._raycasting++,this.intersect(this.raycaster,n,o,e),o.sort((a,l)=>a.distance-l.distance);const r=e.ignore;return r!==void 0&&r.length>0&&(o=o.filter(a=>!r.includes(a.object))),Ea._raycasting--,zt&&(console.timeEnd("raycast"),console.warn("#"+this.context.time.frame+", hits:",o?.length?[...o]:"nothing"),performance.mark("raycast.end"),performance.measure("raycast","raycast.start","raycast.end")),o}intersect(e,t,i,n){for(const o of t){if(!o||o.visible===!1||j.isGizmo(o)||n.lineThreshold!==void 0&&n.lineThreshold<0&&o instanceof c.Line)continue;let r=!0;const a=o,l=a.geometry;if(o.raycastAllowed===!1&&(r=!1),r&&n.testObject){const h=n.testObject?.(o);if(h===!1)continue;h==="continue in children"&&(r=!1)}else r&&(l&&c_(l)||(r=!1));if(r){const h=i.length,d=o.raycastPreference||"lod";let u=d!=="bounds";if(n.precise===!1&&(u=!1),l&&(u||=l.getAttribute("position")?.array?.length<64),a instanceof q.GroundedSkybox&&(u=!1),d==="lod"){const p=se.getRaycastMesh(o);p&&(a.geometry=p)}if(!u&&NC(a,e,i)||(n.useAcceleratedRaycast!==!1?Dd.runMeshBVHRaycast(e,a,i,this.context,n):e.intersectObject(a,!1,i)),a.geometry=l,zt&&i.length!=h){const p=i[i.length-1];j.DrawWireSphere(p.point,.1,7798784,1,!1),j.DrawWireMesh({mesh:o,depthTest:!1,duration:.2,color:7798784})}}n.recursive!==!1&&this.intersect(e,o.children,i,n)}return i}tempBoundingBox=new c.Box3;intersectSphere(e,t,i,n,o,r,a,l){let h=e&&e.isMesh&&e.layers.test(n)&&!j.isGizmo(e);h&&=e.visible,h&&=!(e instanceof c.Line),h&&=!(e instanceof q.GroundedSkybox);const d=e,u=d.geometry;if(h&&l){const p=l(e);if(p===!1)return;p==="continue in children"&&(h=!1)}if(u&&c_(u)||(h=!1),h){if(a){const p=this.sphere;p.center.copy(t),p.radius=i;const m=o.length;if(Dd.runMeshBVHRaycast(this.sphere,d,o,this.context,{}),m!=o.length&&!r)return}else if(u.boundingBox||u.computeBoundingBox(),u.boundingBox){d.matrixWorldNeedsUpdate&&d.updateWorldMatrix(!1,!1);const p=this.tempBoundingBox.copy(u.boundingBox).applyMatrix4(d.matrixWorld),m=this.sphere;if(m.center.copy(t),m.radius=i,m.intersectsBox(p)){const g=Q(e),_=g.distanceTo(m.center),y=new Nm(e,_,g);if(o.push(y),!r)return}}}if(e.children)for(const p of e.children){const m=o.length;if(this.intersectSphere(p,t,i,n,o,r,a,l),m!=o.length&&!r)return}}}function c_(s){return!(s.index&&s.index.array.length<3)}const Ao=new c.Sphere,jh=new c.Plane,zC=new c.Matrix3;function NC(s,e,t){const i=s._computeIntersections;if(!i)return!1;let n=s["_computeIntersections:Needle"];return n||(n=s["_computeIntersections:Needle"]=function(o,r,a){const l=this,h=l.geometry.boundingSphere;if(h){if(l instanceof q.GroundedSkybox){jh.setFromNormalAndCoplanarPoint(B(0,1,0),B(0,-l.position.y,0)),jh.applyMatrix4(l.matrixWorld,zC);const u=o.ray.intersectPlane(jh,B());if(u){Ao.copy(h),Ao.applyMatrix4(l.matrixWorld);const m=B(u).sub(o.ray.origin).length(),g=Ao.radius*.5;m<g&&r.push({distance:m,point:u,object:l,normal:jh.normal.clone()})}return}Ao.copy(h),Ao.applyMatrix4(l.matrixWorld);const d=o.ray.intersectSphere(Ao,B());if(d){const u=B(d).sub(o.ray.origin),p=u.length();if(p>Ao.radius){const m=u.clone().normalize();r.push({distance:p,point:d,object:l,normal:m})}}}}),s._computeIntersections=n,e.intersectObject(s,!1,t),s._computeIntersections=i,!0}var Dd;(s=>{let e=0;function t(b,w,R,M,O){if(!w.geometry||!w.geometry.hasAttribute("position"))return!1;const A=w.geometry;if(w?.isSkinnedMesh){const D=w,L=D.bvhNeedsUpdate;if(!D.staticGenerator)l(),r&&(D.staticGenerator=new r(w),D.staticGenerator.applyWorldTransforms=!1,D.staticGeometry=D.staticGenerator.generate(),A.boundsTree=a?.call(D.staticGeometry),D.staticGeometryLastUpdate=performance.now()+Math.random()*200,D.bvhNeedsUpdate=!0);else if(A.boundsTree&&(D.autoUpdateMeshBvhInterval!==void 0&&D.autoUpdateMeshBvhInterval>=0||L===!0)){const N=performance.now(),$=N-D.staticGeometryLastUpdate,k=D.autoUpdateMeshBvhInterval??100;(L||$>k)&&(zt&&console.warn(`Physics: updating skinned mesh bvh for ${w.name} after ${$.toFixed(2)}ms`),D.bvhNeedsUpdate=!1,D.staticGeometryLastUpdate=N,D.staticGenerator?.generate(D.staticGeometry),A.boundsTree.refit())}}else if(!A.boundsTree){d||v();let D=!0;if((M.xr||A[g]===!1||A.getAttribute("position")?.isInterleavedBufferAttribute||A.index&&A.index?.isInterleavedBufferAttribute||e>10)&&(D=!1),D&&p){if(A[m]===void 0){let L=null;if(y.length>0){const N=y.shift();N&&!N.running&&(L=N)}if(!L&&_.length<3)try{FC&&console.warn("[GenerateMeshBVHWorker] Creating worker with import.meta.url:",typeof document>"u"?require("url").pathToFileURL(__filename).href:ua&&ua.tagName.toUpperCase()==="SCRIPT"&&ua.src||new URL("needle-engine.bundle-DGrKAD9m.umd.cjs",document.baseURI).href),L=new p,_.push(L)}catch(N){N instanceof DOMException&&N.name==="SecurityError"?(console.warn("Failed to create MeshBVH worker, falling back to main thread generation. This can happen when running from file://, if the browser does not support workers or if the browser is blocking workers for other reasons."),console.debug(N),e+=10):(console.error("Failed to create MeshBVH worker. Please see below for more details:"),console.log(N)),e++}if(L!=null&&!L.running){const N=w.name;zt&&console.log("<<<< worker start",N,L),A[m]="queued",performance.mark("bvh.create.start");const $=A.clone();try{L.generate($).then(k=>{A[m]="done",A.boundsTree=k}).catch(k=>{A[m]="failed - "+k?.message,A[g]=!1,zt&&console.error("Failed to generate mesh bvh on worker",k)}).finally(()=>{zt&&console.log(">>>>> worker done",N,{hasBoundsTre:A.boundsTree!=null}),y.push(L),$.dispose(),performance.mark("bvh.create.end"),performance.measure("bvh.create (worker)","bvh.create.start","bvh.create.end")})}catch(k){console.error("Failed to generate mesh bvh on worker",k)}}else zt&&console.warn("No worker available")}}else(!u||!D)&&(l(),o&&(performance.mark("bvh.create.start"),A.boundsTree=new o(A),performance.mark("bvh.create.end"),performance.measure("bvh.create","bvh.create.start","bvh.create.end")))}if(b instanceof c.Raycaster){const D=b,L=w.raycast;if(A.boundsTree)l(),n&&(w.acceleratedRaycast||(w.acceleratedRaycast=n.bind(w),zt&&console.debug(`Physics: bind acceleratedRaycast fn to "${w.name}"`)),w.raycast=w.acceleratedRaycast);else if(zt&&console.warn("No bounds tree found for mesh",w.name,{workerTask:A[m],hasAcceleratedRaycast:n!=null}),O.allowSlowRaycastFallback===!1&&(A.getAttribute("position")?.array?.length??0)>2e3)return zt&&console.warn("Skipping raycast because no bounds tree is available and allowSlowRaycastFallback is false"),!1;const N=D.firstHitOnly;return D.firstHitOnly=!1,D.intersectObject(w,!1,R),D.firstHitOnly=N,w.raycast=L,!0}else if(b instanceof c.Sphere){const D=A.boundsTree;if(D){const L=b;if(h.copy(w.matrixWorld).invert(),L.applyMatrix4(h),D.intersectsSphere(L)){const $=Q(w),k=$.distanceTo(L.center),z=new Nm(w,k,$);R.push(z)}}return!0}return!1}s.runMeshBVHRaycast=t;let i=!1,n=null,o=null,r=null,a=null;function l(){i||(i=!0,Promise.resolve().then(()=>require("./vendor-COVQl0b8.umd.cjs")).then(b=>b.index$1).then(b=>{n=b.acceleratedRaycast,o=b.MeshBVH,r=b.StaticGeometryGenerator,a=b.computeBoundsTree}).catch(b=>{(zt||T())&&console.error("Failed to load BVH library...",b.message)}))}const h=new c.Matrix4;let d=!1,u=!1,p=null;const m=Symbol("Needle:MeshBVH-Worker"),g=Symbol("Needle:MeshBVH-CanUseWorker"),_=[],y=[];function v(){d=!0,u=!0,Promise.resolve().then(()=>VT).then(b=>{p=b.GenerateMeshBVHWorker}).catch(b=>{zt||T()?console.warn("Failed to setup mesh bvh worker"):console.debug("Failed to setup mesh bvh worker",b)}).finally(()=>{u=!1})}})(Dd||(Dd={}));const h_=Symbol("gltf-loader-internal-usage-tracker"),VC=x("debugusers");class ga{get name(){return"NEEDLE_internal_usage_tracker"}static isLoading(e){return ga._loadingProcesses>0}static _loadingProcesses=0;parser;_getDependency;_loadingId;_loadedObjects=new Set;constructor(e){this.parser=e,this._getDependency=this.parser.getDependency,this._loadingId=Date.now().toString()}beforeRoot(){ga._loadingProcesses++;const e=this,t=this._getDependency;return this.parser.getDependency=function(i,n){const o=t.call(this,i,n);return o.then(r=>(r&&(e._loadedObjects.add(r),r[h_]=e._loadingId),r)),o},null}afterRoot(e){ga._loadingProcesses--,this.parser.getDependency=this._getDependency;for(const t of this._loadedObjects)delete t[h_],t instanceof c.Object3D&&(t.parent||t instanceof c.Mesh&&setTimeout(()=>{VC&&console.warn("> GLTF LOADER: Mesh not used in scene!",t),t.material=null,t.geometry=null},1e3));return null}}class Ev{constructor(){window.addEventListener("unhandledrejection",e=>{if(e.defaultPrevented)return;const t=e?.reason?.path;if(t){const i=t[0];i&&i.tagName==="IMG"&&(console.warn(`Could not load image:
169
169
  `+i.src),e.preventDefault())}})}}const lu=x("trackresources");function Rv(){return lu==="dispose"}let gr=!0;lu===0&&(gr=!1);function $C(s){gr=s}function Tv(){return gr}const Av=Symbol("disposable");function Dv(s,e){s&&(s[Av]=e,Ko&&console.warn("Set disposable",e,s))}const Lv=Symbol("disposed");function WC(s){return s[Lv]===!0}function be(s){if(s){if(s[Av]===!1){Ko&&console.warn("Object is marked as not disposable",s);return}if(typeof s=="object"&&(s[Lv]=!0),s instanceof c.Scene)be(s.environment),be(s.background),be(s.customDepthMaterial),be(s.customDistanceMaterial);else if(s instanceof c.SkinnedMesh)be(s.geometry),be(s.material),be(s.skeleton),be(s.bindMatrix),be(s.bindMatrixInverse),be(s.customDepthMaterial),be(s.customDistanceMaterial),s.visible=!1;else if(s instanceof c.Mesh)be(s.geometry),be(s.material),be(s.customDepthMaterial),be(s.customDistanceMaterial),s.visible=!1;else if(s instanceof c.Object3D)s.visible=!1;else if(s instanceof c.BufferGeometry){zr(s);for(const e of Object.keys(s.attributes)){const t=s.attributes[e];be(t)}}else if(s instanceof c.BufferAttribute||s instanceof c.InterleavedBufferAttribute)Ko&&console.warn("BufferAttribute dispose not supported",s.count);else if(s instanceof Array)for(const e of s)e instanceof c.Material&&be(e);else if(s instanceof c.Material){zr(s);for(const t of Object.keys(s)){const i=s[t];i instanceof c.Texture&&be(i)}const e=s.uniforms;if(e)for(const t of Object.keys(e)){const i=e[t];i instanceof c.Texture?be(i):i instanceof c.Uniform$1&&be(i.value)}}else s instanceof c.Texture?(zr(s),zr(s.source),s.source?.data instanceof ImageBitmap&&zr(s.source.data)):s instanceof c.Skeleton?(zr(s.boneTexture),s.boneTexture=null):s instanceof c.Bone||!(s instanceof c.Object3D)&&Ko&&console.warn("Unknown object type",s)}}function zr(s){s&&((Ko||Rv()||lu)&&console.warn("🧨 FREE",s),s instanceof ImageBitmap||"dispose"in s&&typeof s.dispose=="function"&&s.dispose())}function HC(s){}const GC=new Set;function Vm(s,e,t=null,i){if(i||(i=GC,i.clear()),!s)return i;const n=s[pc];if(n)for(const o of n)i.has(o)||t?.call(null,o)!==!1&&(i.add(o),e&&Vm(o,!0,t,i));return i}function qC(s){return s[Dl]}const Ko=x("debugresourceusers")||x("debugmemory"),pc=Symbol("needle-resource-users"),Dl=Symbol("needle-resource-users-count");function It(s,e){ou(s,e,function(t,i){gr&&!Ea.raycasting&&(Ld(pc,this,t,!1),Ld(pc,this,i,!0))})}gr&&(It(c.Mesh.prototype,"material"),It(c.Mesh.prototype,"geometry"),It(c.Material.prototype,"map"),It(c.Material.prototype,"bumpMap"),It(c.Material.prototype,"alphaMap"),It(c.Material.prototype,"normalMap"),It(c.Material.prototype,"displacementMap"),It(c.Material.prototype,"roughnessMap"),It(c.Material.prototype,"metalnessMap"),It(c.Material.prototype,"emissiveMap"),It(c.Material.prototype,"specularMap"),It(c.Material.prototype,"envMap"),It(c.Material.prototype,"lightMap"),It(c.Material.prototype,"aoMap"),It(c.Material.prototype,"gradientMap"));function XC(s){if(gr===!1)return;const e=s[pc];if(e)for(const t of e)Ld(pc,t,s,!1)}gr&&ou(c.Material.prototype,"dispose",function(){XC(this)});let Ap=0;function Ld(s,e,t,i){if(Ap>0)return;if(Array.isArray(t)){for(const o of t)Ld(s,e,o,i);return}if(!t)return;let n=t[s];if(n||(n=new Set),i){if(e&&!n.has(e)){n.add(e);let o=t[Dl]||0;o+=1,t[Dl]=o,Ko&&console.warn(`🟢 Added user of "${t.type}"`,e,t,o,"users:",n)}}else if(e&&n.has(e)){n.delete(e);let o=t[Dl]||0;o>0&&(o-=1,t[Dl]=o),Ko&&console.warn(`🔴 Removed user of "${t.type}"`,e,t,o,"users:",n),o<=0&&(ga.isLoading(t)||(lu&&console.warn(`🔴 Removed all user of "${t.type}"`,t),Rv()&&be(t)))}t[s]=n}try{ou(c.WebGLRenderer.prototype,"render",function(){Ap++},function(){Ap--})}catch(s){console.warn("Could not wrap WebGLRenderer.render",s)}const d_=x("debugcomponentevents");class cu{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),d_&&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(d_&&console.log("Dispatching event "+e,i),!!i)for(const n of i)n(t)}}const mc=Symbol("NEEDLE_NEED_UPDATE_INSTANCE"),Iv=Symbol("isUsingInstancing"),jv=Symbol("instancingRenderer"),Ll=Symbol("instancingAutoUpdateBounds");class Fi{static isUsingInstancing(e){return e[Iv]===!0}static getRenderer(e){return e[jv]||null}setAutoUpdateBounds(e,t){const i=Fi.getRenderer(e);i&&(i[Ll]=t)}static markDirty(e,t=!0){if(e&&(this.isUsingInstancing(e)&&(e[mc]=!0,e.matrixWorldNeedsUpdate=!0),t))for(const i of e.children)Fi.markDirty(i,!0)}}exports.NEEDLE_ENGINE_FEATURE_FLAGS=void 0;(s=>{s.experimentalSmartHierarchyUpdate=!1})(exports.NEEDLE_ENGINE_FEATURE_FLAGS||(exports.NEEDLE_ENGINE_FEATURE_FLAGS={}));function ya(s,e){try{e||s()}catch(t){return console.error(t),!1}return!0}const Dp=x("debugnewscripts"),QC=x("debughierarchy"),Se=[];function YC(){return Se.length>0}function Id(s){if(Dp&&console.log("Register new components",s.new_scripts.length,[...s.new_scripts],s.alias?"element: "+s.alias:s.hash,s),s.new_scripts_pre_setup_callbacks.length>0){for(const e of s.new_scripts_pre_setup_callbacks)e&&e();s.new_scripts_pre_setup_callbacks.length=0}if(!(s.new_scripts.length<=0)){Se.length=0,s.new_scripts.length>0&&Se.push(...s.new_scripts),s.new_scripts.length=0;for(let e=0;e<Se.length;e++)try{const t=Se[e];if(t.isComponent!==!0){(T()||Dp)&&console.error(`Registered script is not a Needle Engine component.
170
170
  The script will be ignored. Please make sure your component extends "Behaviour" imported from "@needle-tools/engine"
171
171
  `,t),Se.splice(e,1),e--;continue}if(t.destroyed)continue;if(!t.gameObject){console.warn(`Component can not be initialized: no GameObject assigned.
@@ -1650,4 +1650,4 @@ Error:`,r),null}}updateColliderCollisionGroups(e){const t=e[Pt],i=e.membership;l
1650
1650
  justify-content: center;
1651
1651
  gap: .5rem;
1652
1652
  }
1653
- `),this.#n.innerHTML=this.#e.innerHTML,this.#n.style.cssText="display: flex; align-items: center; justify-content: center;",this.#e.innerHTML=this.#n.outerHTML,this.#t.innerHTML=this.#e.outerHTML,this.#t.prepend(this.#s),Nd(Hp,{element:this.#t}),this.#o?.disconnect(),this.#o??=new MutationObserver(()=>this.#c()),this.#o.observe(this.#e,{attributes:!0}),bp&&console.log("Needle Button updated",this)}#c(){this.#e&&(this.#e.style.display==="none"?this.style.display="none":this.style.display==="none"&&(this.style.display=""))}#a=e=>{bp&&console.log("Needle Button clicked",{defaultPrevented:e.defaultPrevented,hasButton:!!this.#e}),!e.defaultPrevented&&this.#e&&this.#e.click()}}typeof window<"u"&&!window.customElements.get(Ib)&&window.customElements.define(Ib,xx);const Rl=x("debugavatar");class Ry{root;head;leftHand;rigthHand;get isValid(){return this.head!==null&&this.head!==void 0}constructor(e,t,i,n){this.root=e,this.head=t,this.leftHand=i,this.rigthHand=n,this.root?.traverse(o=>o.layers.set(2))}}class Sx{avatarRegistryUrl=null;async getOrCreateNewAvatarInstance(e,t){if(!t)return console.error("Can not create avatar: failed to provide id or root object"),null;let i=null;if(typeof t=="string"){if(i=await this.loadAvatar(e,t),!i){const o=new fn;i=S.instantiate(xa(t,e.scene),o)}}else i=t;if(!i)return null;const n=this.findAvatar(i);return n.isValid?(Rl&&console.log("[Custom Avatar] valid config",t,Rl?n:""),n):(console.warn("[Custom Avatar] config isn't valid",t,Rl?n:""),null)}async loadAvatar(e,t){if(console.assert(t!=null&&typeof t=="string","Avatar id must not be null"),t.length<=0||!t)return null;if(Rl&&console.log("[Custom Avatar] "+t+", loading..."),t.endsWith(".glb")||(t+=".glb"),this.avatarRegistryUrl===null){const n=await fetch("./"+t);let o=null;if(n.ok){const a=await n.blob();a&&(o=await a.arrayBuffer())}return o?(await cn().parseSync(e,o,null,0))?.scene??null:null}const i=new q.GLTFLoader;return ng(i,e),new Promise((n,o)=>{const r=this.avatarRegistryUrl+"/"+t;i.load(r,async a=>{await cn().createBuiltinComponents(e,r,a,null,void 0),n(a.scene)},a=>{Rl&&console.log("[Custom Avatar] "+a.loaded/a.total*100+"% loaded of "+a.total/1024+"kB")},a=>{console.error("[Custom Avatar] Error when loading: "+a),n(null)})})}cacheModel(e,t){}findAvatar(e){const t=e;let i=t;i.children.length==1&&(i=e.children[0]);let n=this.findAvatarPart(i,["head"]);const o=this.findAvatarPart(i,["left","hand"]),r=this.findAvatarPart(i,["right","hand"]);if(!n){n=t;const l=new c.Vector3;new c.Box3().setFromObject(n).getSize(l);const h=Math.max(l.x,l.y,l.z);console.warn("[Custom Avatar] Normalizing head scale, it's too big: "+h+" meters! Should be < 0.3m"),h>.3&&n.scale.multiplyScalar(1/h*.3)}return new Ry(t,n,o,r)}findAvatarPart(e,t){const i=e.name.toLowerCase();let n=!0;for(const o of t){if(!n)break;i.indexOf(o)===-1&&(n=!1)}if(n)return e;if(e.children)for(const o of e.children){const r=this.findAvatarPart(o,t);if(r)return r}return null}handleCustomAvatarErrors(e){if(!e.ok)throw Error(e.statusText);return e}}class Cx{get extensionName(){return"DocumentExtension"}onAfterBuildDocument(e){}}class Px{}const zT=Object.freeze(Object.defineProperty({__proto__:null,ActionBuilder:he,ActionCollection:Ew,ActionModel:Kt,AlignmentConstraint:$c,Animation:Et,AnimationCurve:ch,AnimationExtension:Eu,AnimationTrackHandler:Mc,Animator:at,AnimatorController:zi,Antialiasing:dh,Attractor:Ja,AudioExtension:Cr,AudioListener:as,AudioSource:_i,AudioTrackHandler:cs,Avatar:ao,AvatarBlink_Simple:vr,AvatarEyeLook_Rotation:ug,AvatarLoader:Sx,AvatarMarker:Pe,AvatarModel:Ry,Avatar_Brain_LookAt:vc,Avatar_MouthShapes:qc,Avatar_MustacheShake:hg,Avatar_POI:sr,AxesHelper:za,BaseUIComponent:Ni,BasicIKConstraint:pg,BehaviorExtension:Wg,BehaviorModel:bt,BloomEffect:Vu,BoxCollider:Cu,BoxGizmo:kr,BoxHelperComponent:st,Button:Os,CallInfo:rs,Camera:ti,CameraTargetReachedEvent:bc,Canvas:Da,CanvasGroup:lo,CapsuleCollider:ps,ChangeMaterialOnClick:Ig,ChangeTransformOnClick:Pr,CharacterController:wr,CharacterControllerInput:_s,ChromaticAberration:uh,ClickThrough:rf,ColorAdjustments:Co,ColorBySpeedModule:Za,ColorOverLifetimeModule:Fu,ContactShadows:Xc,ControlTrackHandler:Zu,CursorFollow:Ur,CustomBranding:Or,Deletable:_g,DeleteBox:to,DepthOfField:gn,DeviceFlag:Pu,DocumentExtension:Cx,DragControls:qo,DropListener:vs,Duplicatable:Mg,EffectWrapper:Pc,EmissionModule:Cs,EmphasizeOnClick:Wa,EnvironmentScene:sf,EventList:oe,EventListEvent:bu,EventSystem:$t,EventTrigger:Ou,FieldWithDefault:hw,FixedJoint:sy,Fog:Qa,GltfExport:Tg,GltfExportBox:Eg,Gradient:Rr,Graphic:nh,GraphicRaycaster:vu,GridHelper:Ya,GridLayoutGroup:Yg,GroundProjectedEnv:$n,GroupActionModel:Xo,HideOnStart:Di,HingeJoint:oh,HorizontalLayoutGroup:Qg,get HoverAnimation(){return exports.HoverAnimation},Image:ol,InheritVelocityModule:ly,InputField:xy,InstanceHandle:or,InstancingHandler:dr,Interactable:yg,Keyframe:ii,LODGroup:ah,LODModel:Ka,Light:xt,LimitVelocityOverLifetimeModule:et,LogStats:gg,LookAt:Sy,LookAtConstraint:br,MainModule:At,MarkerTrackHandler:Ku,MaskableGraphic:sh,MeshCollider:yo,MeshRenderer:Yc,MinMaxCurve:H,MinMaxGradient:Tr,NeedleMenu:Hn,NestedGltf:lh,Networking:ry,NoiseModule:pe,ObjectRaycaster:yi,OffsetConstraint:Er,OpenURL:rl,OrbitControls:de,Outline:Xa,Padding:Mr,ParticleBurst:Jd,ParticleSubEmitter:cy,ParticleSystem:Cc,ParticleSystemRenderer:qi,PhysicsExtension:Hg,PixelationEffect:fh,PlayAnimationOnClick:xc,PlayAudioOnClick:ro,PlayableDirector:pr,PlayerColor:La,PointerEventData:Hc,PostProcessingHandler:py,PreliminaryAction:Ha,PreliminaryTrigger:Jc,RawImage:tf,Rect:Lw,RectTransform:un,ReflectionProbe:wc,RegisteredAnimationInfo:Zs,RemoteSkybox:Wu,Renderer:Ht,RendererLightmap:Sg,Rigidbody:Fe,RotationBySpeedModule:Gi,RotationOverLifetimeModule:mn,SceneSwitcher:Ne,ScreenCapture:Po,ScreenSpaceAmbientOcclusion:Ps,ScreenSpaceAmbientOcclusionN8:yn,ScrollFollow:ks,SeeThrough:Ms,SetActiveOnClick:jg,ShadowCatcher:yh,ShapeModule:ay,SharpeningEffect:mh,SignalAsset:Yu,SignalReceiver:xh,SignalReceiverEvent:wh,SignalTrackHandler:Oc,Size:Dw,SizeBySpeedModule:ai,SizeOverLifetimeModule:Ar,SkinnedMeshRenderer:Cg,SmoothFollow:Gu,SpatialGrabRaycaster:cr,SpatialHtml:Ch,SpatialTrigger:qu,SpatialTriggerReceiver:zn,SpectatorCamera:Xu,SphereCollider:Na,SplineContainer:jr,SplineData:Vn,SplineWalker:Qi,Sprite:ws,SpriteData:va,SpriteRenderer:oi,SpriteSheet:Aa,SubEmitterSystem:eu,SyncedCamera:gy,SyncedRoom:_n,SyncedTransform:dn,TapGestureTrigger:Ug,TeleportTarget:Lu,TestRunner:yy,TestSimulateUserData:_y,Text:Tt,TextBuilder:qg,TextExtension:ju,TextureSheetAnimationModule:Dt,TiltShiftEffect:qn,ToneMappingEffect:co,TrailModule:Te,TransformData:Ee,TransformGizmo:Br,TriggerBuilder:kt,TriggerModel:io,UIRaycastUtils:rg,UIRootComponent:th,USDZExporter:an,USDZText:ha,USDZUIExtension:Zg,UsageMarker:Qc,VariantAction:Lg,VelocityOverLifetimeModule:Ie,VerticalLayoutGroup:Xg,VideoPlayer:Ze,get ViewBox(){return exports.ViewBox},Vignette:Ir,VisibilityAction:eh,Voip:go,Volume:tl,VolumeParameter:F,VolumeProfile:zu,WebARCameraBackground:Mh,WebARSessionRoot:Bi,WebXR:Iu,WebXRImageTracking:Oh,WebXRImageTrackingModel:Rs,WebXRPlaneTracking:Ts,WebXRTrackedImage:Ia,XRControllerFollow:Es,XRControllerModel:ms,XRControllerMovement:vi,XRFlag:Li,XRRig:cf,XRState:Vt,__Ignore:Px},Symbol.toStringTag,{value:"Module"})),Ec=x("debugmissingcamera");le.registerCallback(ae.MissingCamera,s=>{Ec&&console.warn("Creating missing camera");const e=s.context.scene,t=new c.PerspectiveCamera;t.name="Default Fallback Camera",e.add(t);const i=new ti;if(i.sourceId=s.files?.[0]?.src??"unknown",i.fieldOfView=35,s.context.domElement.getAttribute("transparent")!=null)i.clearFlags=nr.Uninitialized;else if(s.context.domElement.getAttribute("background-image")?.length||s.context.lightmaps.tryGetSkybox(i.sourceId))i.clearFlags=nr.Skybox;else{if(i.clearFlags=nr.SolidColor,!s.context.domElement.getAttribute("background-color")){let a="#efefef";typeof window!==void 0&&window.matchMedia("(prefers-color-scheme: dark)").matches&&(a="#1f1f1f"),e.background=new c.Color(a)}if(!e.environment){const a=new c.PMREMGenerator$1(s.context.renderer),l=new sf("neutral");e.environment=a.fromScene(l,.025).texture}}const o=Zo(t,i,!0);return t.position.x=0,t.position.y=1,t.position.z=2,s.context.domElement?.cameraControls!=!1&&Mx(s.context,o),o});le.registerCallback(ae.ContextCreated,s=>{if(!s.context.mainCamera){Ec&&console.log("Will not auto-fit because a default camera exists");return}if(s.context.domElement?.cameraControls==!0){if(Xb(s.context.mainCamera)?.isCameraController==!0){Ec&&console.log("Will not auto-fit because a camera controller exists");return}Mx(s.context)}});function Mx(s,e){e=e??s.mainCameraComponent;const t=e?.gameObject;if(Ec&&console.log("Creating default camera controls",e?.name),t){const i=Uc(t,de);i.sourceId=e?.sourceId??"unknown";const n=s.domElement.getAttribute("auto-rotate");i.autoRotate=n!="0"&&n?.toLowerCase()!="false";const o=Number.parseFloat(n||".5");i.autoRotateSpeed=isNaN(o)?.5:o,Ec&&console.log("Auto-rotate",i.autoRotate,"speed:",i.autoRotateSpeed);const r=s.domElement.getAttribute("auto-fit");i.autoFit=r!=="0"&&r?.toLowerCase()!="false",i.autoTarget=!0}else console.warn("Missing camera object, can not add orbit controls")}le.registerCallback(ae.ContextCreated,s=>{const e=s.context.domElement.getAttribute("autoplay");if(e!==void 0&&(e===""||e==="true"||e==="1")&&s.files)for(const t of s.files)S.foreachComponent(t.file.scene,n=>{if(n.enabled!==!1){if(n instanceof Et&&n.playAutomatically||n instanceof at||n instanceof pr&&n.playOnAwake===!0)return!0;if(n instanceof Et)return n.playAutomatically=!0,!0;if(n instanceof pr)return n.playOnAwake=!0,!0}},!0)!==!0&&Nn.autoplayAnimations(t.file)});exports.SplineUtils=void 0;(s=>{function e(t,i=!1,n=.75){const o=new jr,r=1-I.clamp(n,0,1);return t.forEach((a,l)=>{const h=new c.Vector3;l<t.length-1?h.subVectors(t[l+1],a).normalize().multiplyScalar(r):i&&t.length>1&&h.subVectors(t[0],a).normalize().multiplyScalar(r);const d=new Vn;d.position.copy(a),d.tangentIn.copy(h),d.tangentOut.copy(h),o.addKnot(d)}),o.closed=i,o}s.createFromPoints=e})(exports.SplineUtils||(exports.SplineUtils={}));class NT extends re.WorkerBase{constructor(){super(new Worker(new URL("/generateMeshBVH.worker-iyfPIK6R.js",typeof document>"u"?require("url").pathToFileURL(__filename).href:ua&&ua.tagName.toUpperCase()==="SCRIPT"&&ua.src||new URL("needle-engine.bundle-MTOikD86.umd.cjs",document.baseURI).href),{type:"module"})),this.name="GenerateMeshBVHWorker"}runTask(e,t,i={}){return new Promise((n,o)=>{if(t.getAttribute("position").isInterleavedBufferAttribute||t.index&&t.index.isInterleavedBufferAttribute)throw new Error("GenerateMeshBVHWorker: InterleavedBufferAttribute are not supported for the geometry attributes.");e.onerror=h=>{o(new Error(`[GenerateMeshBVHWorker] ${h.message||"Unknown error. Please check the server console. If you're using vite try adding 'three-mesh-bvh' to 'optimizeDeps.exclude' in your vite.config.js"}`))},e.onmessage=h=>{const{data:d}=h;if(d.error)o(new Error(d.error)),e.onmessage=null;else if(d.serialized){const{serialized:u,position:p}=d,m=re.MeshBVH.deserialize(u,t,{setIndex:!1}),g=Object.assign({setBoundingBox:!0},i);if(t.attributes.position.array=p,u.index)if(t.index)t.index.array=u.index;else{const _=new c.BufferAttribute(u.index,1,!1);t.setIndex(_)}g.setBoundingBox&&(t.boundingBox=m.getBoundingBox(new c.Box3)),i.onProgress&&i.onProgress(d.progress),n(m),e.onmessage=null}else i.onProgress&&i.onProgress(d.progress)};const r=t.index?t.index.array:null,a=t.attributes.position.array,l=[a];r&&l.push(r),e.postMessage({index:r,position:a,options:{...i,onProgress:null,includedProgressCallback:!!i.onProgress,groups:[...t.groups]}},l.map(h=>h.buffer).filter(h=>typeof SharedArrayBuffer>"u"||!(h instanceof SharedArrayBuffer)))})}}const VT=Object.freeze(Object.defineProperty({__proto__:null,GenerateMeshBVHWorker:NT},Symbol.toStringTag,{value:"Module"}));exports.$physicsKey=hM;exports.ActionBuilder=he;exports.ActionCollection=Ew;exports.ActionModel=Kt;exports.Addressables=u0;exports.AlignmentConstraint=$c;exports.AmbientMode=_a;exports.Animation=Et;exports.AnimationCurve=ch;exports.AnimationExtension=Eu;exports.AnimationTrackHandler=Mc;exports.AnimationUtils=Nn;exports.Animator=at;exports.AnimatorConditionMode=Gs;exports.AnimatorController=zi;exports.AnimatorControllerParameterType=sg;exports.AnimatorStateInfo=Il;exports.Antialiasing=dh;exports.Application=hn;exports.AssetDatabase=Ev;exports.AssetReference=K;exports.Attractor=Ja;exports.AudioExtension=Cr;exports.AudioListener=as;exports.AudioSource=_i;exports.AudioTrackHandler=cs;exports.Avatar=ao;exports.AvatarBlink_Simple=vr;exports.AvatarEyeLook_Rotation=ug;exports.AvatarLoader=Sx;exports.AvatarMarker=Pe;exports.AvatarModel=Ry;exports.Avatar_Brain_LookAt=vc;exports.Avatar_MouthShapes=qc;exports.Avatar_MustacheShake=hg;exports.Avatar_POI=sr;exports.Axes=la;exports.AxesHelper=za;exports.BUILD_TIME=dc;exports.BaseUIComponent=Ni;exports.BasicIKConstraint=pg;exports.BehaviorExtension=Wg;exports.BehaviorModel=bt;exports.BloomEffect=Vu;exports.BoxCollider=Cu;exports.BoxGizmo=kr;exports.BoxHelperComponent=st;exports.Button=Os;exports.ButtonsFactory=ji;exports.CallDirection=X0;exports.CallInfo=rs;exports.Camera=ti;exports.CameraTargetReachedEvent=bc;exports.Canvas=Da;exports.CanvasGroup=lo;exports.CapsuleCollider=ps;exports.ChangeMaterialOnClick=Ig;exports.ChangeTransformOnClick=Pr;exports.CharacterController=wr;exports.CharacterControllerInput=_s;exports.ChromaticAberration=uh;exports.CircularBuffer=mi;exports.ClearFlags=nr;exports.ClickThrough=rf;exports.ClipExtrapolation=Pn;exports.Collider=Hi;exports.Collision=H0;exports.CollisionDetectionMode=_u;exports.ColorAdjustments=Co;exports.ColorBySpeedModule=Za;exports.ColorOverLifetimeModule=Fu;exports.Component=yP;exports.Component$1=E;exports.ComponentLifecycleEvents=cu;exports.Components=zT;exports.ConnectionEvents=Sv;exports.ContactPoint=W0;exports.ContactShadows=Xc;exports.Context=U;exports.ContextArgs=tP;exports.ContextEvent=ae;exports.ContextRegistry=le;exports.ControlTrackHandler=Zu;exports.CursorFollow=Ur;exports.CustomBranding=Or;exports.CustomShader=_e;exports.DefaultReflectionMode=zd;exports.Deletable=_g;exports.DeleteBox=to;exports.DepthOfField=gn;exports.DeviceFlag=Pu;exports.DocumentExtension=Cx;exports.DragControls=qo;exports.DragMode=bg;exports.DropListener=vs;exports.Duplicatable=Mg;exports.EffectWrapper=Pc;exports.EmissionModule=Cs;exports.EmphasizeOnClick=Wa;exports.EngineLoadingView=kc;exports.EnvironmentScene=sf;exports.EventList=oe;exports.EventListEvent=bu;exports.EventSystem=$t;exports.EventTrigger=Ou;exports.FieldWithDefault=hw;exports.FileReference=tr;exports.FileReferenceSerializer=p0;exports.FileSpawnModel=DM;exports.File_Event=tw;exports.FixedJoint=sy;exports.Fog=Qa;exports.FrameEvent=me;exports.GENERATOR=Ca;exports.GameObject=S;exports.Gizmos=j;exports.GltfExport=Tg;exports.GltfExportBox=Eg;exports.Gradient=Rr;exports.Graphic=nh;exports.GraphicRaycaster=vu;exports.Graphics=so;exports.GridHelper=Ya;exports.GridLayoutGroup=Yg;exports.GroundProjectedEnv=$n;exports.GroupActionModel=Xo;exports.HideFlags=wu;exports.HideOnStart=Di;exports.HingeJoint=oh;exports.HorizontalLayoutGroup=Qg;exports.HostData=i1;exports.Image=ol;exports.ImageReference=er;exports.ImageReferenceSerializer=f0;exports.InheritVelocityModule=ly;exports.Input=yv;exports.InputEventQueue=Jt;exports.InputEvents=Ce;exports.InputField=xy;exports.InstanceHandle=or;exports.InstancingHandler=dr;exports.InstancingUtil=Fi;exports.InstantiateEvent=zv;exports.InstantiateIdProvider=_t;exports.InstantiateOptions=fn;exports.Interactable=yg;exports.JoinedRoomResponse=_C;exports.KeyEventArgs=aC;exports.Keyframe=ii;exports.LODGroup=ah;exports.LODModel=Ka;exports.LeftRoomResponse=bC;exports.Light=xt;exports.LightData=b0;exports.LimitVelocityOverLifetimeModule=et;exports.LoadingElementOptions=PT;exports.LogStats=gg;exports.LogType=ui;exports.LookAt=Sy;exports.LookAtConstraint=br;exports.MainModule=At;exports.MarkerTrackHandler=Ku;exports.MarkerType=by;exports.MaskableGraphic=sh;exports.Mathf=I;exports.MeshCollider=yo;exports.MeshRenderer=Yc;exports.MinMaxCurve=H;exports.MinMaxGradient=Tr;exports.NEKeyboardEvent=Tl;exports.NEPointerEvent=ts;exports.NeedleButtonElement=xx;exports.NeedleEngineWebComponent=Ey;exports.NeedleMenu=Hn;exports.NeedlePatchesKey=hd;exports.NeedleXRController=Lm;exports.NeedleXRSession=G;exports.NeedleXRSync=Mv;exports.NeedleXRUtils=kv;exports.NestedGltf=lh;exports.NetworkConnection=Pv;exports.NetworkedStreamEvents=Ln;exports.NetworkedStreams=Gc;exports.Networking=ry;exports.NewInstanceModel=Vv;exports.NoiseModule=pe;exports.ObjectRaycaster=yi;exports.ObjectUtils=po;exports.OffsetConstraint=Er;exports.OneEuroFilter=ld;exports.OneEuroFilterXYZ=Sm;exports.OpenURL=rl;exports.OrbitControls=de;exports.Outline=Xa;exports.OwnershipEvent=Cv;exports.OwnershipModel=Um;exports.PUBLIC_KEY=Ks;exports.Padding=Mr;exports.ParticleBurst=Jd;exports.ParticleSubEmitter=cy;exports.ParticleSystem=Cc;exports.ParticleSystemBaseBehaviour=So;exports.ParticleSystemRenderer=qi;exports.ParticleSystemShapeType=Zd;exports.PeerHandle=ls;exports.PeerNetworking=xv;exports.Physics=Ea;exports.PhysicsExtension=Hg;exports.PhysicsMaterialCombine=it;exports.PixelationEffect=fh;exports.PlayAnimationOnClick=xc;exports.PlayAudioOnClick=ro;exports.PlayableDirector=pr;exports.PlayerColor=La;exports.PlayerState=Ui;exports.PlayerStateEvent=Aw;exports.PlayerSync=Vg;exports.PlayerView=g0;exports.PlayerViewManager=y0;exports.PointerEventData=Hc;exports.PointerType=au;exports.PostProcessingEffect=He;exports.PostProcessingEffectOrder=Ke;exports.PostProcessingHandler=py;exports.PreliminaryAction=Ha;exports.PreliminaryTrigger=Jc;exports.PrimitiveType=ja;exports.Progress=ne;exports.PromiseAllWithErrors=wm;exports.PromiseErrorResult=xp;exports.RGBAColor=ee;exports.RapierPhysics=wa;exports.RawImage=tf;exports.RaycastOptions=mo;exports.Rect=Lw;exports.RectTransform=un;exports.ReflectionProbe=wc;exports.RegisteredAnimationInfo=Zs;exports.RemoteSkybox=Wu;exports.RenderTexture=Dn;exports.RenderTextureSerializer=z0;exports.Renderer=Ht;exports.RendererData=_0;exports.RendererLightmap=Sg;exports.Rigidbody=Fe;exports.RigidbodyConstraints=Ue;exports.RoomEvents=Y;exports.RotationBySpeedModule=Gi;exports.RotationOverLifetimeModule=mn;exports.SceneLightSettings=qd;exports.SceneSwitcher=Ne;exports.ScreenCapture=Po;exports.ScreenSpaceAmbientOcclusion=Ps;exports.ScreenSpaceAmbientOcclusionN8=yn;exports.ScrollFollow=ks;exports.SeeThrough=Ms;exports.SendQueue=sn;exports.SerializationContext=Qm;exports.SetActiveOnClick=jg;exports.ShadowCatcher=yh;exports.ShapeModule=ay;exports.ShapeOverlapResult=G0;exports.SharpeningEffect=mh;exports.SignalAsset=Yu;exports.SignalReceiver=xh;exports.SignalReceiverEvent=wh;exports.SignalTrackHandler=Oc;exports.Size=Dw;exports.SizeBySpeedModule=ai;exports.SizeOverLifetimeModule=Ar;exports.SkinnedMeshRenderer=Cg;exports.SmoothFollow=Gu;exports.SpatialGrabRaycaster=cr;exports.SpatialHtml=Ch;exports.SpatialTrigger=qu;exports.SpatialTriggerReceiver=zn;exports.SpectatorCamera=Xu;exports.SphereCollider=Na;exports.SphereIntersection=Nm;exports.SplineContainer=jr;exports.SplineData=Vn;exports.SplineWalker=Qi;exports.Sprite=ws;exports.SpriteData=va;exports.SpriteRenderer=oi;exports.SpriteSheet=Aa;exports.StateMachineBehaviour=SP;exports.StreamEndedEvent=lg;exports.StreamReceivedEvent=q0;exports.SubEmitterSystem=eu;exports.SyncedCamera=gy;exports.SyncedRoom=_n;exports.SyncedTransform=dn;exports.TapGestureTrigger=Ug;exports.TeleportTarget=Lu;exports.TestRunner=yy;exports.TestSceneUtils=LT;exports.TestSimulateUserData=_y;exports.Text=Tt;exports.TextBuilder=qg;exports.TextExtension=ju;exports.TextureSheetAnimationModule=Dt;exports.TiltShiftEffect=qn;exports.Time=v0;exports.ToneMappingEffect=co;exports.TrackHandler=sl;exports.TrackType=ci;exports.TrailModule=Te;exports.TransformData=Ee;exports.TransformGizmo=Br;exports.TriggerBuilder=kt;exports.TriggerModel=io;exports.TypeStore=P;exports.UIRaycastUtils=rg;exports.UIRootComponent=th;exports.USDDocument=Ag;exports.USDObject=We;exports.USDWriter=vw;exports.USDZExporter=ww;exports.USDZExporter$1=an;exports.USDZText=ha;exports.USDZUIExtension=Zg;exports.UriSerializer=N0;exports.UsageMarker=Qc;exports.UserJoinedOrLeftRoomModel=vC;exports.VERSION=fi;exports.VariantAction=Lg;exports.VelocityOverLifetimeModule=Ie;exports.VerticalLayoutGroup=Xg;exports.VideoPlayer=Ze;exports.ViewDevice=us;exports.Vignette=Ir;exports.VisibilityAction=eh;exports.Voip=go;exports.Volume=tl;exports.VolumeParameter=F;exports.VolumeProfile=zu;exports.WaitForFrames=L1;exports.WaitForPromise=m0;exports.WaitForSeconds=Zm;exports.Watch=hs;exports.WebARCameraBackground=Mh;exports.WebARSessionRoot=Bi;exports.WebXR=Iu;exports.WebXRButtonFactory=no;exports.WebXRImageTracking=Oh;exports.WebXRImageTrackingModel=Rs;exports.WebXRPlaneTracking=Ts;exports.WebXRTrackedImage=Ia;exports.XRControllerFollow=Es;exports.XRControllerModel=ms;exports.XRControllerMovement=vi;exports.XRFlag=Li;exports.XRRig=cf;exports.XRState=Vt;exports.XRStateFlag=Tn;exports.__Ignore=Px;exports.__internalNotifyObjectDestroyed=HC;exports.activeInHierarchyFieldName=ds;exports.addAttributeChangeCallback=bm;exports.addComponent=on;exports.addCustomExtensionPlugin=KM;exports.addNewComponent=Zo;exports.addPatch=ou;exports.apply=du;exports.applyHMRChanges=mP;exports.applyPrototypeExtensions=e0;exports.beginListenDestroy=Nv;exports.beginListenInstantiate=Wv;exports.binaryIdentifierCasts=Im;exports.build_scene_functions=eP;exports.builtinComponentKeyName=No;exports.calculateProgress01=ky;exports.clearMessages=tS;exports.colorSerializer=zP;exports.compareAssociation=Xv;exports.componentSerializer=bd;exports.copyTexture=tv;exports.createMotion=I0;exports.debugNet=Xt;exports.debugOwner=Al;exports.decompressGpuTexture=Pw;exports.deepClone=Tc;exports.delay=fs;exports.delayForFrames=Ac;exports.deserializeObject=Ud;exports.destroy=gi;exports.destroyComponentInstance=n0;exports.determineMimeTypeFromExtension=iw;exports.disposeObjectResources=be;exports.disposeStream=In;exports.editorGuidKeyName=Xl;exports.enableSpatialConsole=fa;exports.euler=VP;exports.eventListSerializer=GP;exports.exportAsGLTF=BT;exports.findByGuid=Km;exports.findObjectOfType=Ua;exports.findObjectsOfType=o0;exports.findResourceUsers=Vm;exports.fitCamera=j0;exports.fitObjectIntoVolume=nv;exports.foreachComponent=lr;exports.foreachComponentEnumerator=fu;exports.forward=bS;exports.generateQRCode=S0;exports.generateSeed=$v;exports.getBoundingBox=Wt;exports.getCameraController=Xb;exports.getComponent=yr;exports.getComponentInChildren=zc;exports.getComponentInParent=gc;exports.getComponents=Fc;exports.getComponentsInChildren=Ba;exports.getComponentsInParent=hu;exports.getFormattedDate=gw;exports.getIconElement=yt;exports.getIconTexture=Wp;exports.getLoader=cn;exports.getOrAddComponent=Uc;exports.getParam=x;exports.getParentHierarchyPath=xS;exports.getPath=Dx;exports.getPeerOptions=pC;exports.getPeerjsInstance=wv;exports.getResourceUserCount=qC;exports.getTempColor=Kb;exports.getTempQuaternion=Zt;exports.getTempVector=B;exports.getUrlParams=Rc;exports.getVisibleInCustomShadowRendering=iv;exports.getWorldDirection=Zb;exports.getWorldEuler=Mm;exports.getWorldPosition=Q;exports.getWorldQuaternion=fe;exports.getWorldRotation=su;exports.getWorldScale=Le;exports.hasCommercialLicense=Fn;exports.hasIndieLicense=Vc;exports.hasPointerEventComponent=Wd;exports.hasProLicense=Un;exports.hideDebugConsole=av;exports.imageToCanvas=Mw;exports.instantiate=oo;exports.invokeLoadedImportPluginHooks=cw;exports.invokeXRSessionEnd=gv;exports.invokeXRSessionStart=mv;exports.isActiveInHierarchy=r0;exports.isActiveSelf=Fa;exports.isAndroidDevice=Fx;exports.isAnimationAction=ev;exports.isComponent=$0;exports.isDebugMode=Ex;exports.isDesktop=Ix;exports.isDestroyed=ar;exports.isDevEnvironment=T;exports.isDisposed=WC;exports.isExporting=IT;exports.isGLTFModel=V0;exports.isHostedOnGlitch=jb;exports.isHotReloadEnabled=Qp;exports.isHotReloading=fP;exports.isIPad=Bx;exports.isIconElement=C0;exports.isLocalNetwork=pi;exports.isMacOS=Nx;exports.isMobileDevice=jx;exports.isMozillaXR=zx;exports.isQuest=Wx;exports.isResourceTrackingEnabled=Tv;exports.isSafari=$x;exports.isUsingInstancing=uu;exports.isiOS=Vx;exports.isiPad=Ux;exports.loadAsset=bT;exports.loadPMREM=ix;exports.loadSync=Oy;exports.logHierarchy=Td;exports.lookAtInverse=dS;exports.lookAtObject=Dc;exports.lookAtScreenPoint=uS;exports.makeId=Tx;exports.makeIdFromRandomWords=Fb;exports.makeNameSafe=bi;exports.markAsInstancedRendered=a0;exports.microphonePermissionsGranted=Hx;exports.nameof=kx;exports.nameofFactory=Bb;exports.objectSerializer=F0;exports.offXRSessionEnd=rC;exports.offXRSessionStart=oC;exports.onAfterRender=oP;exports.onBeforeRender=sP;exports.onClear=iP;exports.onDestroy=nP;exports.onInitialized=tg;exports.onStart=gu;exports.onUpdate=O0;exports.onXRSessionEnd=Dm;exports.onXRSessionStart=ru;exports.parseSync=yx;exports.placeOnSurface=sv;exports.postprocessFBXMaterials=Em;exports.prefix=LP;exports.pushState=Ub;exports.randomNumber=Ax;exports.registerBinaryType=jm;exports.registerComponent=mu;exports.registerComponentExtension=wg;exports.registerCustomEffectType=Xi;exports.registerExportExtensions=xg;exports.registerExtensions=Qd;exports.registerHotReloadType=T0;exports.registerLoader=Tm;exports.registerPrefabProvider=Gv;exports.registerPrototypeExtensions=t0;exports.registerType=Gm;exports.relativePathPrefix=Nb;exports.removeAttributeChangeCallback=vm;exports.removeComponent=Ym;exports.removeCustomImportExtensionType=ZM;exports.removePatch=nC;exports.resolveUrl=ho;exports.sanitizeString=zb;exports.saveImage=fx;exports.screenshot=iT;exports.screenshot2=My;exports.sendDestroyed=Wm;exports.serializable=f;exports.serializeObject=Yv;exports.serializeable=ze;exports.setActive=Kl;exports.setAllowBalloonMessages=Hb;exports.setAllowOverlayMessages=Kx;exports.setAutoFitEnabled=Ed;exports.setCameraController=Cp;exports.setDestroyed=c0;exports.setDevEnvironment=RS;exports.setDisposable=Dv;exports.setDontDestroy=Jr;exports.setOrAddParamsToUrl=wp;exports.setParam=Rx;exports.setParamWithoutReload=hc;exports.setPeerOptions=mC;exports.setResourceTrackingEnabled=$C;exports.setState=ym;exports.setVisibleInCustomShadowRendering=km;exports.setWorldEuler=Om;exports.setWorldPosition=rt;exports.setWorldPositionXYZ=rr;exports.setWorldQuaternion=ln;exports.setWorldQuaternionXYZW=Pm;exports.setWorldRotation=Jb;exports.setWorldRotationXYZ=Lc;exports.setWorldScale=Sa;exports.showBalloonError=Ic;exports.showBalloonMessage=we;exports.showBalloonWarning=ue;exports.showDebugConsole=Rm;exports.slerp=hS;exports.syncDestroy=jc;exports.syncField=Ng;exports.syncInstantiate=Hm;exports.textureToCanvas=SS;exports.toSourceId=Vb;exports.tryCastBinary=bv;exports.tryDetermineMimetypeFromBinary=sw;exports.tryDetermineMimetypeFromURL=nw;exports.tryFindObject=xa;exports.tryGetGuid=vv;exports.unregisterHotReloadType=A0;exports.unwatchWrite=_m;exports.useForAutoFit=Qb;exports.validate=vt;exports.watchWrite=nu;
1653
+ `),this.#n.innerHTML=this.#e.innerHTML,this.#n.style.cssText="display: flex; align-items: center; justify-content: center;",this.#e.innerHTML=this.#n.outerHTML,this.#t.innerHTML=this.#e.outerHTML,this.#t.prepend(this.#s),Nd(Hp,{element:this.#t}),this.#o?.disconnect(),this.#o??=new MutationObserver(()=>this.#c()),this.#o.observe(this.#e,{attributes:!0}),bp&&console.log("Needle Button updated",this)}#c(){this.#e&&(this.#e.style.display==="none"?this.style.display="none":this.style.display==="none"&&(this.style.display=""))}#a=e=>{bp&&console.log("Needle Button clicked",{defaultPrevented:e.defaultPrevented,hasButton:!!this.#e}),!e.defaultPrevented&&this.#e&&this.#e.click()}}typeof window<"u"&&!window.customElements.get(Ib)&&window.customElements.define(Ib,xx);const Rl=x("debugavatar");class Ry{root;head;leftHand;rigthHand;get isValid(){return this.head!==null&&this.head!==void 0}constructor(e,t,i,n){this.root=e,this.head=t,this.leftHand=i,this.rigthHand=n,this.root?.traverse(o=>o.layers.set(2))}}class Sx{avatarRegistryUrl=null;async getOrCreateNewAvatarInstance(e,t){if(!t)return console.error("Can not create avatar: failed to provide id or root object"),null;let i=null;if(typeof t=="string"){if(i=await this.loadAvatar(e,t),!i){const o=new fn;i=S.instantiate(xa(t,e.scene),o)}}else i=t;if(!i)return null;const n=this.findAvatar(i);return n.isValid?(Rl&&console.log("[Custom Avatar] valid config",t,Rl?n:""),n):(console.warn("[Custom Avatar] config isn't valid",t,Rl?n:""),null)}async loadAvatar(e,t){if(console.assert(t!=null&&typeof t=="string","Avatar id must not be null"),t.length<=0||!t)return null;if(Rl&&console.log("[Custom Avatar] "+t+", loading..."),t.endsWith(".glb")||(t+=".glb"),this.avatarRegistryUrl===null){const n=await fetch("./"+t);let o=null;if(n.ok){const a=await n.blob();a&&(o=await a.arrayBuffer())}return o?(await cn().parseSync(e,o,null,0))?.scene??null:null}const i=new q.GLTFLoader;return ng(i,e),new Promise((n,o)=>{const r=this.avatarRegistryUrl+"/"+t;i.load(r,async a=>{await cn().createBuiltinComponents(e,r,a,null,void 0),n(a.scene)},a=>{Rl&&console.log("[Custom Avatar] "+a.loaded/a.total*100+"% loaded of "+a.total/1024+"kB")},a=>{console.error("[Custom Avatar] Error when loading: "+a),n(null)})})}cacheModel(e,t){}findAvatar(e){const t=e;let i=t;i.children.length==1&&(i=e.children[0]);let n=this.findAvatarPart(i,["head"]);const o=this.findAvatarPart(i,["left","hand"]),r=this.findAvatarPart(i,["right","hand"]);if(!n){n=t;const l=new c.Vector3;new c.Box3().setFromObject(n).getSize(l);const h=Math.max(l.x,l.y,l.z);console.warn("[Custom Avatar] Normalizing head scale, it's too big: "+h+" meters! Should be < 0.3m"),h>.3&&n.scale.multiplyScalar(1/h*.3)}return new Ry(t,n,o,r)}findAvatarPart(e,t){const i=e.name.toLowerCase();let n=!0;for(const o of t){if(!n)break;i.indexOf(o)===-1&&(n=!1)}if(n)return e;if(e.children)for(const o of e.children){const r=this.findAvatarPart(o,t);if(r)return r}return null}handleCustomAvatarErrors(e){if(!e.ok)throw Error(e.statusText);return e}}class Cx{get extensionName(){return"DocumentExtension"}onAfterBuildDocument(e){}}class Px{}const zT=Object.freeze(Object.defineProperty({__proto__:null,ActionBuilder:he,ActionCollection:Ew,ActionModel:Kt,AlignmentConstraint:$c,Animation:Et,AnimationCurve:ch,AnimationExtension:Eu,AnimationTrackHandler:Mc,Animator:at,AnimatorController:zi,Antialiasing:dh,Attractor:Ja,AudioExtension:Cr,AudioListener:as,AudioSource:_i,AudioTrackHandler:cs,Avatar:ao,AvatarBlink_Simple:vr,AvatarEyeLook_Rotation:ug,AvatarLoader:Sx,AvatarMarker:Pe,AvatarModel:Ry,Avatar_Brain_LookAt:vc,Avatar_MouthShapes:qc,Avatar_MustacheShake:hg,Avatar_POI:sr,AxesHelper:za,BaseUIComponent:Ni,BasicIKConstraint:pg,BehaviorExtension:Wg,BehaviorModel:bt,BloomEffect:Vu,BoxCollider:Cu,BoxGizmo:kr,BoxHelperComponent:st,Button:Os,CallInfo:rs,Camera:ti,CameraTargetReachedEvent:bc,Canvas:Da,CanvasGroup:lo,CapsuleCollider:ps,ChangeMaterialOnClick:Ig,ChangeTransformOnClick:Pr,CharacterController:wr,CharacterControllerInput:_s,ChromaticAberration:uh,ClickThrough:rf,ColorAdjustments:Co,ColorBySpeedModule:Za,ColorOverLifetimeModule:Fu,ContactShadows:Xc,ControlTrackHandler:Zu,CursorFollow:Ur,CustomBranding:Or,Deletable:_g,DeleteBox:to,DepthOfField:gn,DeviceFlag:Pu,DocumentExtension:Cx,DragControls:qo,DropListener:vs,Duplicatable:Mg,EffectWrapper:Pc,EmissionModule:Cs,EmphasizeOnClick:Wa,EnvironmentScene:sf,EventList:oe,EventListEvent:bu,EventSystem:$t,EventTrigger:Ou,FieldWithDefault:hw,FixedJoint:sy,Fog:Qa,GltfExport:Tg,GltfExportBox:Eg,Gradient:Rr,Graphic:nh,GraphicRaycaster:vu,GridHelper:Ya,GridLayoutGroup:Yg,GroundProjectedEnv:$n,GroupActionModel:Xo,HideOnStart:Di,HingeJoint:oh,HorizontalLayoutGroup:Qg,get HoverAnimation(){return exports.HoverAnimation},Image:ol,InheritVelocityModule:ly,InputField:xy,InstanceHandle:or,InstancingHandler:dr,Interactable:yg,Keyframe:ii,LODGroup:ah,LODModel:Ka,Light:xt,LimitVelocityOverLifetimeModule:et,LogStats:gg,LookAt:Sy,LookAtConstraint:br,MainModule:At,MarkerTrackHandler:Ku,MaskableGraphic:sh,MeshCollider:yo,MeshRenderer:Yc,MinMaxCurve:H,MinMaxGradient:Tr,NeedleMenu:Hn,NestedGltf:lh,Networking:ry,NoiseModule:pe,ObjectRaycaster:yi,OffsetConstraint:Er,OpenURL:rl,OrbitControls:de,Outline:Xa,Padding:Mr,ParticleBurst:Jd,ParticleSubEmitter:cy,ParticleSystem:Cc,ParticleSystemRenderer:qi,PhysicsExtension:Hg,PixelationEffect:fh,PlayAnimationOnClick:xc,PlayAudioOnClick:ro,PlayableDirector:pr,PlayerColor:La,PointerEventData:Hc,PostProcessingHandler:py,PreliminaryAction:Ha,PreliminaryTrigger:Jc,RawImage:tf,Rect:Lw,RectTransform:un,ReflectionProbe:wc,RegisteredAnimationInfo:Zs,RemoteSkybox:Wu,Renderer:Ht,RendererLightmap:Sg,Rigidbody:Fe,RotationBySpeedModule:Gi,RotationOverLifetimeModule:mn,SceneSwitcher:Ne,ScreenCapture:Po,ScreenSpaceAmbientOcclusion:Ps,ScreenSpaceAmbientOcclusionN8:yn,ScrollFollow:ks,SeeThrough:Ms,SetActiveOnClick:jg,ShadowCatcher:yh,ShapeModule:ay,SharpeningEffect:mh,SignalAsset:Yu,SignalReceiver:xh,SignalReceiverEvent:wh,SignalTrackHandler:Oc,Size:Dw,SizeBySpeedModule:ai,SizeOverLifetimeModule:Ar,SkinnedMeshRenderer:Cg,SmoothFollow:Gu,SpatialGrabRaycaster:cr,SpatialHtml:Ch,SpatialTrigger:qu,SpatialTriggerReceiver:zn,SpectatorCamera:Xu,SphereCollider:Na,SplineContainer:jr,SplineData:Vn,SplineWalker:Qi,Sprite:ws,SpriteData:va,SpriteRenderer:oi,SpriteSheet:Aa,SubEmitterSystem:eu,SyncedCamera:gy,SyncedRoom:_n,SyncedTransform:dn,TapGestureTrigger:Ug,TeleportTarget:Lu,TestRunner:yy,TestSimulateUserData:_y,Text:Tt,TextBuilder:qg,TextExtension:ju,TextureSheetAnimationModule:Dt,TiltShiftEffect:qn,ToneMappingEffect:co,TrailModule:Te,TransformData:Ee,TransformGizmo:Br,TriggerBuilder:kt,TriggerModel:io,UIRaycastUtils:rg,UIRootComponent:th,USDZExporter:an,USDZText:ha,USDZUIExtension:Zg,UsageMarker:Qc,VariantAction:Lg,VelocityOverLifetimeModule:Ie,VerticalLayoutGroup:Xg,VideoPlayer:Ze,get ViewBox(){return exports.ViewBox},Vignette:Ir,VisibilityAction:eh,Voip:go,Volume:tl,VolumeParameter:F,VolumeProfile:zu,WebARCameraBackground:Mh,WebARSessionRoot:Bi,WebXR:Iu,WebXRImageTracking:Oh,WebXRImageTrackingModel:Rs,WebXRPlaneTracking:Ts,WebXRTrackedImage:Ia,XRControllerFollow:Es,XRControllerModel:ms,XRControllerMovement:vi,XRFlag:Li,XRRig:cf,XRState:Vt,__Ignore:Px},Symbol.toStringTag,{value:"Module"})),Ec=x("debugmissingcamera");le.registerCallback(ae.MissingCamera,s=>{Ec&&console.warn("Creating missing camera");const e=s.context.scene,t=new c.PerspectiveCamera;t.name="Default Fallback Camera",e.add(t);const i=new ti;if(i.sourceId=s.files?.[0]?.src??"unknown",i.fieldOfView=35,s.context.domElement.getAttribute("transparent")!=null)i.clearFlags=nr.Uninitialized;else if(s.context.domElement.getAttribute("background-image")?.length||s.context.lightmaps.tryGetSkybox(i.sourceId))i.clearFlags=nr.Skybox;else{if(i.clearFlags=nr.SolidColor,!s.context.domElement.getAttribute("background-color")){let a="#efefef";typeof window!==void 0&&window.matchMedia("(prefers-color-scheme: dark)").matches&&(a="#1f1f1f"),e.background=new c.Color(a)}if(!e.environment){const a=new c.PMREMGenerator$1(s.context.renderer),l=new sf("neutral");e.environment=a.fromScene(l,.025).texture}}const o=Zo(t,i,!0);return t.position.x=0,t.position.y=1,t.position.z=2,s.context.domElement?.cameraControls!=!1&&Mx(s.context,o),o});le.registerCallback(ae.ContextCreated,s=>{if(!s.context.mainCamera){Ec&&console.log("Will not auto-fit because a default camera exists");return}if(s.context.domElement?.cameraControls==!0){if(Xb(s.context.mainCamera)?.isCameraController==!0){Ec&&console.log("Will not auto-fit because a camera controller exists");return}Mx(s.context)}});function Mx(s,e){e=e??s.mainCameraComponent;const t=e?.gameObject;if(Ec&&console.log("Creating default camera controls",e?.name),t){const i=Uc(t,de);i.sourceId=e?.sourceId??"unknown";const n=s.domElement.getAttribute("auto-rotate");i.autoRotate=n!="0"&&n?.toLowerCase()!="false";const o=Number.parseFloat(n||".5");i.autoRotateSpeed=isNaN(o)?.5:o,Ec&&console.log("Auto-rotate",i.autoRotate,"speed:",i.autoRotateSpeed);const r=s.domElement.getAttribute("auto-fit");i.autoFit=r!=="0"&&r?.toLowerCase()!="false",i.autoTarget=!0}else console.warn("Missing camera object, can not add orbit controls")}le.registerCallback(ae.ContextCreated,s=>{const e=s.context.domElement.getAttribute("autoplay");if(e!==void 0&&(e===""||e==="true"||e==="1")&&s.files)for(const t of s.files)S.foreachComponent(t.file.scene,n=>{if(n.enabled!==!1){if(n instanceof Et&&n.playAutomatically||n instanceof at||n instanceof pr&&n.playOnAwake===!0)return!0;if(n instanceof Et)return n.playAutomatically=!0,!0;if(n instanceof pr)return n.playOnAwake=!0,!0}},!0)!==!0&&Nn.autoplayAnimations(t.file)});exports.SplineUtils=void 0;(s=>{function e(t,i=!1,n=.75){const o=new jr,r=1-I.clamp(n,0,1);return t.forEach((a,l)=>{const h=new c.Vector3;l<t.length-1?h.subVectors(t[l+1],a).normalize().multiplyScalar(r):i&&t.length>1&&h.subVectors(t[0],a).normalize().multiplyScalar(r);const d=new Vn;d.position.copy(a),d.tangentIn.copy(h),d.tangentOut.copy(h),o.addKnot(d)}),o.closed=i,o}s.createFromPoints=e})(exports.SplineUtils||(exports.SplineUtils={}));class NT extends re.WorkerBase{constructor(){super(new Worker(new URL("/generateMeshBVH.worker-iyfPIK6R.js",typeof document>"u"?require("url").pathToFileURL(__filename).href:ua&&ua.tagName.toUpperCase()==="SCRIPT"&&ua.src||new URL("needle-engine.bundle-DGrKAD9m.umd.cjs",document.baseURI).href),{type:"module"})),this.name="GenerateMeshBVHWorker"}runTask(e,t,i={}){return new Promise((n,o)=>{if(t.getAttribute("position").isInterleavedBufferAttribute||t.index&&t.index.isInterleavedBufferAttribute)throw new Error("GenerateMeshBVHWorker: InterleavedBufferAttribute are not supported for the geometry attributes.");e.onerror=h=>{o(new Error(`[GenerateMeshBVHWorker] ${h.message||"Unknown error. Please check the server console. If you're using vite try adding 'three-mesh-bvh' to 'optimizeDeps.exclude' in your vite.config.js"}`))},e.onmessage=h=>{const{data:d}=h;if(d.error)o(new Error(d.error)),e.onmessage=null;else if(d.serialized){const{serialized:u,position:p}=d,m=re.MeshBVH.deserialize(u,t,{setIndex:!1}),g=Object.assign({setBoundingBox:!0},i);if(t.attributes.position.array=p,u.index)if(t.index)t.index.array=u.index;else{const _=new c.BufferAttribute(u.index,1,!1);t.setIndex(_)}g.setBoundingBox&&(t.boundingBox=m.getBoundingBox(new c.Box3)),i.onProgress&&i.onProgress(d.progress),n(m),e.onmessage=null}else i.onProgress&&i.onProgress(d.progress)};const r=t.index?t.index.array:null,a=t.attributes.position.array,l=[a];r&&l.push(r),e.postMessage({index:r,position:a,options:{...i,onProgress:null,includedProgressCallback:!!i.onProgress,groups:[...t.groups]}},l.map(h=>h.buffer).filter(h=>typeof SharedArrayBuffer>"u"||!(h instanceof SharedArrayBuffer)))})}}const VT=Object.freeze(Object.defineProperty({__proto__:null,GenerateMeshBVHWorker:NT},Symbol.toStringTag,{value:"Module"}));exports.$physicsKey=hM;exports.ActionBuilder=he;exports.ActionCollection=Ew;exports.ActionModel=Kt;exports.Addressables=u0;exports.AlignmentConstraint=$c;exports.AmbientMode=_a;exports.Animation=Et;exports.AnimationCurve=ch;exports.AnimationExtension=Eu;exports.AnimationTrackHandler=Mc;exports.AnimationUtils=Nn;exports.Animator=at;exports.AnimatorConditionMode=Gs;exports.AnimatorController=zi;exports.AnimatorControllerParameterType=sg;exports.AnimatorStateInfo=Il;exports.Antialiasing=dh;exports.Application=hn;exports.AssetDatabase=Ev;exports.AssetReference=K;exports.Attractor=Ja;exports.AudioExtension=Cr;exports.AudioListener=as;exports.AudioSource=_i;exports.AudioTrackHandler=cs;exports.Avatar=ao;exports.AvatarBlink_Simple=vr;exports.AvatarEyeLook_Rotation=ug;exports.AvatarLoader=Sx;exports.AvatarMarker=Pe;exports.AvatarModel=Ry;exports.Avatar_Brain_LookAt=vc;exports.Avatar_MouthShapes=qc;exports.Avatar_MustacheShake=hg;exports.Avatar_POI=sr;exports.Axes=la;exports.AxesHelper=za;exports.BUILD_TIME=dc;exports.BaseUIComponent=Ni;exports.BasicIKConstraint=pg;exports.BehaviorExtension=Wg;exports.BehaviorModel=bt;exports.BloomEffect=Vu;exports.BoxCollider=Cu;exports.BoxGizmo=kr;exports.BoxHelperComponent=st;exports.Button=Os;exports.ButtonsFactory=ji;exports.CallDirection=X0;exports.CallInfo=rs;exports.Camera=ti;exports.CameraTargetReachedEvent=bc;exports.Canvas=Da;exports.CanvasGroup=lo;exports.CapsuleCollider=ps;exports.ChangeMaterialOnClick=Ig;exports.ChangeTransformOnClick=Pr;exports.CharacterController=wr;exports.CharacterControllerInput=_s;exports.ChromaticAberration=uh;exports.CircularBuffer=mi;exports.ClearFlags=nr;exports.ClickThrough=rf;exports.ClipExtrapolation=Pn;exports.Collider=Hi;exports.Collision=H0;exports.CollisionDetectionMode=_u;exports.ColorAdjustments=Co;exports.ColorBySpeedModule=Za;exports.ColorOverLifetimeModule=Fu;exports.Component=yP;exports.Component$1=E;exports.ComponentLifecycleEvents=cu;exports.Components=zT;exports.ConnectionEvents=Sv;exports.ContactPoint=W0;exports.ContactShadows=Xc;exports.Context=U;exports.ContextArgs=tP;exports.ContextEvent=ae;exports.ContextRegistry=le;exports.ControlTrackHandler=Zu;exports.CursorFollow=Ur;exports.CustomBranding=Or;exports.CustomShader=_e;exports.DefaultReflectionMode=zd;exports.Deletable=_g;exports.DeleteBox=to;exports.DepthOfField=gn;exports.DeviceFlag=Pu;exports.DocumentExtension=Cx;exports.DragControls=qo;exports.DragMode=bg;exports.DropListener=vs;exports.Duplicatable=Mg;exports.EffectWrapper=Pc;exports.EmissionModule=Cs;exports.EmphasizeOnClick=Wa;exports.EngineLoadingView=kc;exports.EnvironmentScene=sf;exports.EventList=oe;exports.EventListEvent=bu;exports.EventSystem=$t;exports.EventTrigger=Ou;exports.FieldWithDefault=hw;exports.FileReference=tr;exports.FileReferenceSerializer=p0;exports.FileSpawnModel=DM;exports.File_Event=tw;exports.FixedJoint=sy;exports.Fog=Qa;exports.FrameEvent=me;exports.GENERATOR=Ca;exports.GameObject=S;exports.Gizmos=j;exports.GltfExport=Tg;exports.GltfExportBox=Eg;exports.Gradient=Rr;exports.Graphic=nh;exports.GraphicRaycaster=vu;exports.Graphics=so;exports.GridHelper=Ya;exports.GridLayoutGroup=Yg;exports.GroundProjectedEnv=$n;exports.GroupActionModel=Xo;exports.HideFlags=wu;exports.HideOnStart=Di;exports.HingeJoint=oh;exports.HorizontalLayoutGroup=Qg;exports.HostData=i1;exports.Image=ol;exports.ImageReference=er;exports.ImageReferenceSerializer=f0;exports.InheritVelocityModule=ly;exports.Input=yv;exports.InputEventQueue=Jt;exports.InputEvents=Ce;exports.InputField=xy;exports.InstanceHandle=or;exports.InstancingHandler=dr;exports.InstancingUtil=Fi;exports.InstantiateEvent=zv;exports.InstantiateIdProvider=_t;exports.InstantiateOptions=fn;exports.Interactable=yg;exports.JoinedRoomResponse=_C;exports.KeyEventArgs=aC;exports.Keyframe=ii;exports.LODGroup=ah;exports.LODModel=Ka;exports.LeftRoomResponse=bC;exports.Light=xt;exports.LightData=b0;exports.LimitVelocityOverLifetimeModule=et;exports.LoadingElementOptions=PT;exports.LogStats=gg;exports.LogType=ui;exports.LookAt=Sy;exports.LookAtConstraint=br;exports.MainModule=At;exports.MarkerTrackHandler=Ku;exports.MarkerType=by;exports.MaskableGraphic=sh;exports.Mathf=I;exports.MeshCollider=yo;exports.MeshRenderer=Yc;exports.MinMaxCurve=H;exports.MinMaxGradient=Tr;exports.NEKeyboardEvent=Tl;exports.NEPointerEvent=ts;exports.NeedleButtonElement=xx;exports.NeedleEngineWebComponent=Ey;exports.NeedleMenu=Hn;exports.NeedlePatchesKey=hd;exports.NeedleXRController=Lm;exports.NeedleXRSession=G;exports.NeedleXRSync=Mv;exports.NeedleXRUtils=kv;exports.NestedGltf=lh;exports.NetworkConnection=Pv;exports.NetworkedStreamEvents=Ln;exports.NetworkedStreams=Gc;exports.Networking=ry;exports.NewInstanceModel=Vv;exports.NoiseModule=pe;exports.ObjectRaycaster=yi;exports.ObjectUtils=po;exports.OffsetConstraint=Er;exports.OneEuroFilter=ld;exports.OneEuroFilterXYZ=Sm;exports.OpenURL=rl;exports.OrbitControls=de;exports.Outline=Xa;exports.OwnershipEvent=Cv;exports.OwnershipModel=Um;exports.PUBLIC_KEY=Ks;exports.Padding=Mr;exports.ParticleBurst=Jd;exports.ParticleSubEmitter=cy;exports.ParticleSystem=Cc;exports.ParticleSystemBaseBehaviour=So;exports.ParticleSystemRenderer=qi;exports.ParticleSystemShapeType=Zd;exports.PeerHandle=ls;exports.PeerNetworking=xv;exports.Physics=Ea;exports.PhysicsExtension=Hg;exports.PhysicsMaterialCombine=it;exports.PixelationEffect=fh;exports.PlayAnimationOnClick=xc;exports.PlayAudioOnClick=ro;exports.PlayableDirector=pr;exports.PlayerColor=La;exports.PlayerState=Ui;exports.PlayerStateEvent=Aw;exports.PlayerSync=Vg;exports.PlayerView=g0;exports.PlayerViewManager=y0;exports.PointerEventData=Hc;exports.PointerType=au;exports.PostProcessingEffect=He;exports.PostProcessingEffectOrder=Ke;exports.PostProcessingHandler=py;exports.PreliminaryAction=Ha;exports.PreliminaryTrigger=Jc;exports.PrimitiveType=ja;exports.Progress=ne;exports.PromiseAllWithErrors=wm;exports.PromiseErrorResult=xp;exports.RGBAColor=ee;exports.RapierPhysics=wa;exports.RawImage=tf;exports.RaycastOptions=mo;exports.Rect=Lw;exports.RectTransform=un;exports.ReflectionProbe=wc;exports.RegisteredAnimationInfo=Zs;exports.RemoteSkybox=Wu;exports.RenderTexture=Dn;exports.RenderTextureSerializer=z0;exports.Renderer=Ht;exports.RendererData=_0;exports.RendererLightmap=Sg;exports.Rigidbody=Fe;exports.RigidbodyConstraints=Ue;exports.RoomEvents=Y;exports.RotationBySpeedModule=Gi;exports.RotationOverLifetimeModule=mn;exports.SceneLightSettings=qd;exports.SceneSwitcher=Ne;exports.ScreenCapture=Po;exports.ScreenSpaceAmbientOcclusion=Ps;exports.ScreenSpaceAmbientOcclusionN8=yn;exports.ScrollFollow=ks;exports.SeeThrough=Ms;exports.SendQueue=sn;exports.SerializationContext=Qm;exports.SetActiveOnClick=jg;exports.ShadowCatcher=yh;exports.ShapeModule=ay;exports.ShapeOverlapResult=G0;exports.SharpeningEffect=mh;exports.SignalAsset=Yu;exports.SignalReceiver=xh;exports.SignalReceiverEvent=wh;exports.SignalTrackHandler=Oc;exports.Size=Dw;exports.SizeBySpeedModule=ai;exports.SizeOverLifetimeModule=Ar;exports.SkinnedMeshRenderer=Cg;exports.SmoothFollow=Gu;exports.SpatialGrabRaycaster=cr;exports.SpatialHtml=Ch;exports.SpatialTrigger=qu;exports.SpatialTriggerReceiver=zn;exports.SpectatorCamera=Xu;exports.SphereCollider=Na;exports.SphereIntersection=Nm;exports.SplineContainer=jr;exports.SplineData=Vn;exports.SplineWalker=Qi;exports.Sprite=ws;exports.SpriteData=va;exports.SpriteRenderer=oi;exports.SpriteSheet=Aa;exports.StateMachineBehaviour=SP;exports.StreamEndedEvent=lg;exports.StreamReceivedEvent=q0;exports.SubEmitterSystem=eu;exports.SyncedCamera=gy;exports.SyncedRoom=_n;exports.SyncedTransform=dn;exports.TapGestureTrigger=Ug;exports.TeleportTarget=Lu;exports.TestRunner=yy;exports.TestSceneUtils=LT;exports.TestSimulateUserData=_y;exports.Text=Tt;exports.TextBuilder=qg;exports.TextExtension=ju;exports.TextureSheetAnimationModule=Dt;exports.TiltShiftEffect=qn;exports.Time=v0;exports.ToneMappingEffect=co;exports.TrackHandler=sl;exports.TrackType=ci;exports.TrailModule=Te;exports.TransformData=Ee;exports.TransformGizmo=Br;exports.TriggerBuilder=kt;exports.TriggerModel=io;exports.TypeStore=P;exports.UIRaycastUtils=rg;exports.UIRootComponent=th;exports.USDDocument=Ag;exports.USDObject=We;exports.USDWriter=vw;exports.USDZExporter=ww;exports.USDZExporter$1=an;exports.USDZText=ha;exports.USDZUIExtension=Zg;exports.UriSerializer=N0;exports.UsageMarker=Qc;exports.UserJoinedOrLeftRoomModel=vC;exports.VERSION=fi;exports.VariantAction=Lg;exports.VelocityOverLifetimeModule=Ie;exports.VerticalLayoutGroup=Xg;exports.VideoPlayer=Ze;exports.ViewDevice=us;exports.Vignette=Ir;exports.VisibilityAction=eh;exports.Voip=go;exports.Volume=tl;exports.VolumeParameter=F;exports.VolumeProfile=zu;exports.WaitForFrames=L1;exports.WaitForPromise=m0;exports.WaitForSeconds=Zm;exports.Watch=hs;exports.WebARCameraBackground=Mh;exports.WebARSessionRoot=Bi;exports.WebXR=Iu;exports.WebXRButtonFactory=no;exports.WebXRImageTracking=Oh;exports.WebXRImageTrackingModel=Rs;exports.WebXRPlaneTracking=Ts;exports.WebXRTrackedImage=Ia;exports.XRControllerFollow=Es;exports.XRControllerModel=ms;exports.XRControllerMovement=vi;exports.XRFlag=Li;exports.XRRig=cf;exports.XRState=Vt;exports.XRStateFlag=Tn;exports.__Ignore=Px;exports.__internalNotifyObjectDestroyed=HC;exports.activeInHierarchyFieldName=ds;exports.addAttributeChangeCallback=bm;exports.addComponent=on;exports.addCustomExtensionPlugin=KM;exports.addNewComponent=Zo;exports.addPatch=ou;exports.apply=du;exports.applyHMRChanges=mP;exports.applyPrototypeExtensions=e0;exports.beginListenDestroy=Nv;exports.beginListenInstantiate=Wv;exports.binaryIdentifierCasts=Im;exports.build_scene_functions=eP;exports.builtinComponentKeyName=No;exports.calculateProgress01=ky;exports.clearMessages=tS;exports.colorSerializer=zP;exports.compareAssociation=Xv;exports.componentSerializer=bd;exports.copyTexture=tv;exports.createMotion=I0;exports.debugNet=Xt;exports.debugOwner=Al;exports.decompressGpuTexture=Pw;exports.deepClone=Tc;exports.delay=fs;exports.delayForFrames=Ac;exports.deserializeObject=Ud;exports.destroy=gi;exports.destroyComponentInstance=n0;exports.determineMimeTypeFromExtension=iw;exports.disposeObjectResources=be;exports.disposeStream=In;exports.editorGuidKeyName=Xl;exports.enableSpatialConsole=fa;exports.euler=VP;exports.eventListSerializer=GP;exports.exportAsGLTF=BT;exports.findByGuid=Km;exports.findObjectOfType=Ua;exports.findObjectsOfType=o0;exports.findResourceUsers=Vm;exports.fitCamera=j0;exports.fitObjectIntoVolume=nv;exports.foreachComponent=lr;exports.foreachComponentEnumerator=fu;exports.forward=bS;exports.generateQRCode=S0;exports.generateSeed=$v;exports.getBoundingBox=Wt;exports.getCameraController=Xb;exports.getComponent=yr;exports.getComponentInChildren=zc;exports.getComponentInParent=gc;exports.getComponents=Fc;exports.getComponentsInChildren=Ba;exports.getComponentsInParent=hu;exports.getFormattedDate=gw;exports.getIconElement=yt;exports.getIconTexture=Wp;exports.getLoader=cn;exports.getOrAddComponent=Uc;exports.getParam=x;exports.getParentHierarchyPath=xS;exports.getPath=Dx;exports.getPeerOptions=pC;exports.getPeerjsInstance=wv;exports.getResourceUserCount=qC;exports.getTempColor=Kb;exports.getTempQuaternion=Zt;exports.getTempVector=B;exports.getUrlParams=Rc;exports.getVisibleInCustomShadowRendering=iv;exports.getWorldDirection=Zb;exports.getWorldEuler=Mm;exports.getWorldPosition=Q;exports.getWorldQuaternion=fe;exports.getWorldRotation=su;exports.getWorldScale=Le;exports.hasCommercialLicense=Fn;exports.hasIndieLicense=Vc;exports.hasPointerEventComponent=Wd;exports.hasProLicense=Un;exports.hideDebugConsole=av;exports.imageToCanvas=Mw;exports.instantiate=oo;exports.invokeLoadedImportPluginHooks=cw;exports.invokeXRSessionEnd=gv;exports.invokeXRSessionStart=mv;exports.isActiveInHierarchy=r0;exports.isActiveSelf=Fa;exports.isAndroidDevice=Fx;exports.isAnimationAction=ev;exports.isComponent=$0;exports.isDebugMode=Ex;exports.isDesktop=Ix;exports.isDestroyed=ar;exports.isDevEnvironment=T;exports.isDisposed=WC;exports.isExporting=IT;exports.isGLTFModel=V0;exports.isHostedOnGlitch=jb;exports.isHotReloadEnabled=Qp;exports.isHotReloading=fP;exports.isIPad=Bx;exports.isIconElement=C0;exports.isLocalNetwork=pi;exports.isMacOS=Nx;exports.isMobileDevice=jx;exports.isMozillaXR=zx;exports.isQuest=Wx;exports.isResourceTrackingEnabled=Tv;exports.isSafari=$x;exports.isUsingInstancing=uu;exports.isiOS=Vx;exports.isiPad=Ux;exports.loadAsset=bT;exports.loadPMREM=ix;exports.loadSync=Oy;exports.logHierarchy=Td;exports.lookAtInverse=dS;exports.lookAtObject=Dc;exports.lookAtScreenPoint=uS;exports.makeId=Tx;exports.makeIdFromRandomWords=Fb;exports.makeNameSafe=bi;exports.markAsInstancedRendered=a0;exports.microphonePermissionsGranted=Hx;exports.nameof=kx;exports.nameofFactory=Bb;exports.objectSerializer=F0;exports.offXRSessionEnd=rC;exports.offXRSessionStart=oC;exports.onAfterRender=oP;exports.onBeforeRender=sP;exports.onClear=iP;exports.onDestroy=nP;exports.onInitialized=tg;exports.onStart=gu;exports.onUpdate=O0;exports.onXRSessionEnd=Dm;exports.onXRSessionStart=ru;exports.parseSync=yx;exports.placeOnSurface=sv;exports.postprocessFBXMaterials=Em;exports.prefix=LP;exports.pushState=Ub;exports.randomNumber=Ax;exports.registerBinaryType=jm;exports.registerComponent=mu;exports.registerComponentExtension=wg;exports.registerCustomEffectType=Xi;exports.registerExportExtensions=xg;exports.registerExtensions=Qd;exports.registerHotReloadType=T0;exports.registerLoader=Tm;exports.registerPrefabProvider=Gv;exports.registerPrototypeExtensions=t0;exports.registerType=Gm;exports.relativePathPrefix=Nb;exports.removeAttributeChangeCallback=vm;exports.removeComponent=Ym;exports.removeCustomImportExtensionType=ZM;exports.removePatch=nC;exports.resolveUrl=ho;exports.sanitizeString=zb;exports.saveImage=fx;exports.screenshot=iT;exports.screenshot2=My;exports.sendDestroyed=Wm;exports.serializable=f;exports.serializeObject=Yv;exports.serializeable=ze;exports.setActive=Kl;exports.setAllowBalloonMessages=Hb;exports.setAllowOverlayMessages=Kx;exports.setAutoFitEnabled=Ed;exports.setCameraController=Cp;exports.setDestroyed=c0;exports.setDevEnvironment=RS;exports.setDisposable=Dv;exports.setDontDestroy=Jr;exports.setOrAddParamsToUrl=wp;exports.setParam=Rx;exports.setParamWithoutReload=hc;exports.setPeerOptions=mC;exports.setResourceTrackingEnabled=$C;exports.setState=ym;exports.setVisibleInCustomShadowRendering=km;exports.setWorldEuler=Om;exports.setWorldPosition=rt;exports.setWorldPositionXYZ=rr;exports.setWorldQuaternion=ln;exports.setWorldQuaternionXYZW=Pm;exports.setWorldRotation=Jb;exports.setWorldRotationXYZ=Lc;exports.setWorldScale=Sa;exports.showBalloonError=Ic;exports.showBalloonMessage=we;exports.showBalloonWarning=ue;exports.showDebugConsole=Rm;exports.slerp=hS;exports.syncDestroy=jc;exports.syncField=Ng;exports.syncInstantiate=Hm;exports.textureToCanvas=SS;exports.toSourceId=Vb;exports.tryCastBinary=bv;exports.tryDetermineMimetypeFromBinary=sw;exports.tryDetermineMimetypeFromURL=nw;exports.tryFindObject=xa;exports.tryGetGuid=vv;exports.unregisterHotReloadType=A0;exports.unwatchWrite=_m;exports.useForAutoFit=Qb;exports.validate=vt;exports.watchWrite=nu;
@@ -1917,9 +1917,9 @@ Oo('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUIL
1917
1917
  Oo('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');
1918
1918
  Oo('globalThis["__NEEDLE_ENGINE_VERSION__"] = "4.13.0";');
1919
1919
  Oo('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');
1920
- Oo('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Tue Feb 10 2026 20:56:20 GMT+0000 (Coordinated Universal Time)";');
1920
+ Oo('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Tue Feb 10 2026 21:11:09 GMT+0000 (Coordinated Universal Time)";');
1921
1921
  Oo('globalThis["__NEEDLE_PUBLIC_KEY__"] = "' + NEEDLE_PUBLIC_KEY + '";');
1922
- const Xi = "4.13.0", Rc = "undefined", Ad = "Tue Feb 10 2026 20:56:20 GMT+0000 (Coordinated Universal Time)";
1922
+ const Xi = "4.13.0", Rc = "undefined", Ad = "Tue Feb 10 2026 21:11:09 GMT+0000 (Coordinated Universal Time)";
1923
1923
  G0 && console.log(`Engine version: ${Xi} (generator: ${Rc})
1924
1924
  Project built at ${Ad}`);
1925
1925
  const ur = NEEDLE_PUBLIC_KEY, yo = "needle_isActiveInHierarchy", ca = "builtin_components", rd = "needle_editor_guid";
@@ -141,7 +141,7 @@ void main(){
141
141
  #__vconsole .vc-mask {
142
142
  overflow: hidden;
143
143
  }
144
- `,Sr?.prepend(i),o===!0&&Zb()<=0&&S_(),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.":"")),yc=!1,di=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function $O(){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"),di?.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 dg="padding: 10px; font-family: monospace;",P_="margin-bottom: 10px;",Cr="margin-bottom: 10px; margin-top: 15px;",HO="width: 100%; border-collapse: collapse; border: 1px solid rgba(0,0,0,0.1); table-layout: fixed;",O_="border: 1px solid rgba(0,0,0,0.1); padding: 5px;",GO=O_,qO=O_+" word-break: break-all;";function qn(o,e=!1){e&&o.sort((i,n)=>(n.value?1:0)-(i.value?1:0));let t=`<table style='${HO}'>`;t+="<tbody>";for(const i of o){const n=typeof i.value=="boolean"?i.value?"\u2705":"\u274C":i.value;t+=`<tr><td style='${GO}'>${i.label}</td><td style='${qO}'>${n}</td></tr>`}return t+="</tbody></table>",t}function k_(){try{if(document.createElement("canvas").getContext("webgl2"))return"\u2705"}catch{}return"\u274C"}function XO(){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='${dg}'>`;const i=ok();t+=`<h3 style='${P_}'>Device: ${i}</h3>`,t+=qn([{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+=qn(n,!1)),t+="</div>",t+=`<div style='${dg} margin-top: 20px;'>`,t+=`<h3 style='${P_}'>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:k_()}];t+=qn(l,!1),t+="</div>",e(t)}),o}function QO(){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='${dg}'>`;const i=YO();i.length>0&&(t+=`<h3 style='${Cr}'>General GPU Info</h3>`,t+=qn(i,!1));const n=KO();n.length>0&&(t+=`<h3 style='${Cr}'>WebGL</h3>`,t+=qn(n,!1));const s=JO();s.length>0&&(t+=`<h3 style='${Cr}'>WebGL 2 Features</h3>`,t+=qn(s,!1));const r=ek();r.length>0&&(t+=`<h3 style='${Cr}'>WebGL Limits</h3>`,t+=qn(r,!1));const a=tk();a.length>0&&(t+=`<h3 style='${Cr}'>Texture Formats</h3>`,t+=qn(a,!1));const l=await ik();if(l.length>0&&(t+=`<h3 style='${Cr}'>WebGPU</h3>`,t+=qn(l,!1)),I.isSafari()){const c=nk();c.length>0&&(t+=`<h3 style='${Cr}'>Safari GPU Info</h3>`,t+=qn(c,!1))}t+="</div>",e(t)}),o}function YO(){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=M_();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=ZO(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 ZO(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 KO(){const o=[],e=M_();return e&&(o.push({label:"\u{1F4CA} WebGL Version",value:e.version}),o.push({label:"\u{1F3AE} WebGL 2 Available",value:k_()})),o}function JO(){const o=[];try{const e=document.createElement("canvas").getContext("webgl2");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 ek(){const o=[];try{const e=document.createElement("canvas"),t=e.getContext("webgl2")||e.getContext("webgl");if(!t)return o;const i=t instanceof WebGL2RenderingContext;o.push({label:"\u{1F4CF} Max Texture Size",value:t.getParameter(t.MAX_TEXTURE_SIZE).toString()}),o.push({label:"\u{1F3A8} Max Renderbuffer Size",value:t.getParameter(t.MAX_RENDERBUFFER_SIZE).toString()}),o.push({label:"\u{1F517} Max Vertex Attribs",value:t.getParameter(t.MAX_VERTEX_ATTRIBS).toString()}),o.push({label:"\u{1F3AF} Max Texture Units",value:t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS).toString()}),i&&(o.push({label:"\u26A1 Max Samples",value:t.getParameter(t.MAX_SAMPLES).toString()}),o.push({label:"\u{1F504} Max Uniform Buffer Bindings",value:t.getParameter(t.MAX_UNIFORM_BUFFER_BINDINGS).toString()}),o.push({label:"\u{1F4D0} Max 3D Texture Size",value:t.getParameter(t.MAX_3D_TEXTURE_SIZE).toString()}))}catch{}return o}function tk(){const o=[];try{document.createElement("canvas").getContext("webgl")&&(o.push({label:"WebGL 1 RGBA",value:"\u2705"}),o.push({label:"WebGL 1 RGB",value:"\u2705"}));const e=document.createElement("canvas").getContext("webgl2");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 ik(){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 M_(){try{const o=document.createElement("canvas"),e=o.getContext("webgl2")||o.getContext("webgl");if(!e)return null;const t=e.getExtension("WEBGL_debug_renderer_info"),i=t?e.getParameter(t.UNMASKED_RENDERER_WEBGL):e.getParameter(e.RENDERER),n=t?e.getParameter(t.UNMASKED_VENDOR_WEBGL):e.getParameter(e.VENDOR),s=e.getParameter(e.VERSION);let r;if(i&&i.includes("ANGLE")){const a=i.match(/ANGLE \(([^)]+)\)/);a&&(r=a[1])}return{renderer:i,vendor:n,version:s,angle:r}}catch{return null}}function nk(){const o=[];try{const e=document.createElement("canvas").getContext("webgl");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=document.createElement("canvas").getContext("webgl");e&&(e.getSupportedExtensions()||[]).includes("WEBGL_compressed_texture_pvrtc")&&o.push({label:"\u{1F5DC}\uFE0F PVRTC Support",value:"\u2705"})}catch{}return o}function ok(){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 sk(){return document.querySelector("#__vconsole .vc-switch")||null}function rk(){return document.querySelector("#__vconsole")||null}const R_=v("debugdefines");ws('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";'),ws('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";'),ws('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";'),ws('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";'),ws('globalThis["__NEEDLE_ENGINE_VERSION__"] = "4.13.0";'),ws('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";'),ws('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Tue Feb 10 2026 20:56:20 GMT+0000 (Coordinated Universal Time)";'),ws('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const Ai="4.13.0",Ua="undefined",bc="Tue Feb 10 2026 20:56:20 GMT+0000 (Coordinated Universal Time)";R_&&console.log(`Engine version: ${Ai} (generator: ${Ua})
144
+ `,Sr?.prepend(i),o===!0&&Zb()<=0&&S_(),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.":"")),yc=!1,di=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function $O(){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"),di?.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 dg="padding: 10px; font-family: monospace;",P_="margin-bottom: 10px;",Cr="margin-bottom: 10px; margin-top: 15px;",HO="width: 100%; border-collapse: collapse; border: 1px solid rgba(0,0,0,0.1); table-layout: fixed;",O_="border: 1px solid rgba(0,0,0,0.1); padding: 5px;",GO=O_,qO=O_+" word-break: break-all;";function qn(o,e=!1){e&&o.sort((i,n)=>(n.value?1:0)-(i.value?1:0));let t=`<table style='${HO}'>`;t+="<tbody>";for(const i of o){const n=typeof i.value=="boolean"?i.value?"\u2705":"\u274C":i.value;t+=`<tr><td style='${GO}'>${i.label}</td><td style='${qO}'>${n}</td></tr>`}return t+="</tbody></table>",t}function k_(){try{if(document.createElement("canvas").getContext("webgl2"))return"\u2705"}catch{}return"\u274C"}function XO(){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='${dg}'>`;const i=ok();t+=`<h3 style='${P_}'>Device: ${i}</h3>`,t+=qn([{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+=qn(n,!1)),t+="</div>",t+=`<div style='${dg} margin-top: 20px;'>`,t+=`<h3 style='${P_}'>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:k_()}];t+=qn(l,!1),t+="</div>",e(t)}),o}function QO(){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='${dg}'>`;const i=YO();i.length>0&&(t+=`<h3 style='${Cr}'>General GPU Info</h3>`,t+=qn(i,!1));const n=KO();n.length>0&&(t+=`<h3 style='${Cr}'>WebGL</h3>`,t+=qn(n,!1));const s=JO();s.length>0&&(t+=`<h3 style='${Cr}'>WebGL 2 Features</h3>`,t+=qn(s,!1));const r=ek();r.length>0&&(t+=`<h3 style='${Cr}'>WebGL Limits</h3>`,t+=qn(r,!1));const a=tk();a.length>0&&(t+=`<h3 style='${Cr}'>Texture Formats</h3>`,t+=qn(a,!1));const l=await ik();if(l.length>0&&(t+=`<h3 style='${Cr}'>WebGPU</h3>`,t+=qn(l,!1)),I.isSafari()){const c=nk();c.length>0&&(t+=`<h3 style='${Cr}'>Safari GPU Info</h3>`,t+=qn(c,!1))}t+="</div>",e(t)}),o}function YO(){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=M_();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=ZO(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 ZO(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 KO(){const o=[],e=M_();return e&&(o.push({label:"\u{1F4CA} WebGL Version",value:e.version}),o.push({label:"\u{1F3AE} WebGL 2 Available",value:k_()})),o}function JO(){const o=[];try{const e=document.createElement("canvas").getContext("webgl2");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 ek(){const o=[];try{const e=document.createElement("canvas"),t=e.getContext("webgl2")||e.getContext("webgl");if(!t)return o;const i=t instanceof WebGL2RenderingContext;o.push({label:"\u{1F4CF} Max Texture Size",value:t.getParameter(t.MAX_TEXTURE_SIZE).toString()}),o.push({label:"\u{1F3A8} Max Renderbuffer Size",value:t.getParameter(t.MAX_RENDERBUFFER_SIZE).toString()}),o.push({label:"\u{1F517} Max Vertex Attribs",value:t.getParameter(t.MAX_VERTEX_ATTRIBS).toString()}),o.push({label:"\u{1F3AF} Max Texture Units",value:t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS).toString()}),i&&(o.push({label:"\u26A1 Max Samples",value:t.getParameter(t.MAX_SAMPLES).toString()}),o.push({label:"\u{1F504} Max Uniform Buffer Bindings",value:t.getParameter(t.MAX_UNIFORM_BUFFER_BINDINGS).toString()}),o.push({label:"\u{1F4D0} Max 3D Texture Size",value:t.getParameter(t.MAX_3D_TEXTURE_SIZE).toString()}))}catch{}return o}function tk(){const o=[];try{document.createElement("canvas").getContext("webgl")&&(o.push({label:"WebGL 1 RGBA",value:"\u2705"}),o.push({label:"WebGL 1 RGB",value:"\u2705"}));const e=document.createElement("canvas").getContext("webgl2");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 ik(){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 M_(){try{const o=document.createElement("canvas"),e=o.getContext("webgl2")||o.getContext("webgl");if(!e)return null;const t=e.getExtension("WEBGL_debug_renderer_info"),i=t?e.getParameter(t.UNMASKED_RENDERER_WEBGL):e.getParameter(e.RENDERER),n=t?e.getParameter(t.UNMASKED_VENDOR_WEBGL):e.getParameter(e.VENDOR),s=e.getParameter(e.VERSION);let r;if(i&&i.includes("ANGLE")){const a=i.match(/ANGLE \(([^)]+)\)/);a&&(r=a[1])}return{renderer:i,vendor:n,version:s,angle:r}}catch{return null}}function nk(){const o=[];try{const e=document.createElement("canvas").getContext("webgl");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=document.createElement("canvas").getContext("webgl");e&&(e.getSupportedExtensions()||[]).includes("WEBGL_compressed_texture_pvrtc")&&o.push({label:"\u{1F5DC}\uFE0F PVRTC Support",value:"\u2705"})}catch{}return o}function ok(){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 sk(){return document.querySelector("#__vconsole .vc-switch")||null}function rk(){return document.querySelector("#__vconsole")||null}const R_=v("debugdefines");ws('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";'),ws('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";'),ws('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";'),ws('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";'),ws('globalThis["__NEEDLE_ENGINE_VERSION__"] = "4.13.0";'),ws('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";'),ws('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Tue Feb 10 2026 21:11:09 GMT+0000 (Coordinated Universal Time)";'),ws('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const Ai="4.13.0",Ua="undefined",bc="Tue Feb 10 2026 21:11:09 GMT+0000 (Coordinated Universal Time)";R_&&console.log(`Engine version: ${Ai} (generator: ${Ua})
145
145
  Project built at ${bc}`);const vs=NEEDLE_PUBLIC_KEY,To="needle_isActiveInHierarchy",Pr="builtin_components",_c="needle_editor_guid";function ws(o){try{(0,eval)(o)}catch(e){R_&&console.error(e)}}let E_,T_=null;function Cn(){return E_}function ug(o){if(o==null){console.warn("Oh no: someone tried registering a non-existend gltf-loader. When you see this log it might mean that needle-engine is being imported multiple times. Please check your project setup.");return}T_!==o&&(T_=o,E_=new o)}function ak(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 A()&&console.debug("Spector available: Add '?spector=<frame>' to the URL to enable it and capture a frame.")}}const Ii=Symbol("shadowDomOwner"),lk=v("debugpatch");function qd(o,e,t,i){const n=lk===e;if(!t&&!i)return;const s=e+"___needle";hk(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]=I_(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]=I_(l,o,e);else{const c=this[s];L_(o,e,this,c,l),this[s]=l,D_(o,e,this,c,l)}},get:function(){const l=this[s];return typeof l=="function"&&l[s]?l[s]:l}}))}function ck(o,e,t){const i=mg(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 A_=Symbol("Needle:Patches:WrappedFunction");function I_(o,e,t){if(o[A_])return o;const i=function(...n){L_(e,t,this,...n);const s=o.apply(this,n);return D_(e,t,this,s,...n),s};return i[A_]=!0,i}const Xd="Needle:Patches";function pg(){return globalThis[Xd]||(globalThis[Xd]=new WeakMap),globalThis[Xd]}function mg(o,e){const t=pg().get(o);return t?t.get(e):null}function hk(o,e,t,i){let n=pg().get(o);n||(n=new Map,pg().set(o,n));let s=n.get(e);s||(s=[],n.set(e,s)),s.push({prefix:t,postfix:i})}function L_(o,e,t,...i){if(!t)return;const n=mg(o,e);if(n)for(const s of n)s.prefix?.call(t,...i)}function D_(o,e,t,i,...n){if(!t)return;const s=mg(o,e);if(s)for(const r of s)r.postfix?.call(t,i,...n)}const za=[];function Qd(o){za.indexOf(o)===-1&&za.push(o)}function dk(o){const e=za.indexOf(o);e!==-1&&za.splice(e,1)}const Na=[];function gg(o){Na.indexOf(o)===-1&&Na.push(o)}function uk(o){const e=Na.indexOf(o);e!==-1&&Na.splice(e,1)}function j_(o){globalThis.dispatchEvent(new CustomEvent("needle-xrsession-start",{detail:o}));for(let e=0;e<za.length;e++)za[e](o)}function B_(o){globalThis.dispatchEvent(new CustomEvent("needle-xrsession-end",{detail:o}));for(let e=0;e<Na.length;e++)Na[e](o)}const qe=v("debuginput");var Yd=(o=>(o.Mouse="mouse",o.Touch="touch",o.Controller="controller",o.Hand="hand",o))(Yd||{}),Te=(o=>(o.PointerDown="pointerdown",o.PointerUp="pointerup",o.PointerMove="pointermove",o.KeyDown="keydown",o.KeyUp="keyup",o.KeyPressed="keypress",o))(Te||{});class Ao extends PointerEvent{clientZ;deviceIndex;origin;source;mode;get isSpatial(){return this.mode!="screen"}get ray(){return this._ray||(this._ray=new So(this.space.worldPosition.clone(),this.space.worldForward.clone())),this._ray}set ray(e){this._ray=e}get hasRay(){return this._ray!==void 0}_ray;space;isClick=!1;isDoubleClick=!1;get used(){return this._used}_used=!1;use(){this._used=!0}get pointerId(){return this._pointerid}_pointerid;get pointerType(){return this._pointerType}_pointerType;buttonName=void 0;get type(){return this._type}_type;metadata={};intersections=new Array;constructor(e,t,i){super(e,i),this.clientZ=i.clientZ,this._pointerid=i.pointerId,this._pointerType=i.pointerType,this._type=e,this.deviceIndex=i.deviceIndex,this.origin=i.origin,this.source=t,this.mode=i.mode,this._ray=i.ray,this.space=i.device,this.buttonName=i.buttonName}_immediatePropagationStopped=!1;get immediatePropagationStopped(){return this._immediatePropagationStopped}_propagationStopped=!1;get propagationStopped(){return this._immediatePropagationStopped||this._propagationStopped}stopImmediatePropagation(){this._immediatePropagationStopped=!0,super.stopImmediatePropagation(),this.source?.stopImmediatePropagation()}stopPropagation(){this._propagationStopped=!0,super.stopPropagation(),this.source?.stopPropagation(),qe&&console.warn("Stop propagation...",this.pointerId,this.pointerType)}}class vc extends KeyboardEvent{source;constructor(e,t,i){super(e,i),this.source=t}stopImmediatePropagation(){super.stopImmediatePropagation(),this.source?.stopImmediatePropagation()}}class pk{key;keyType;source;constructor(e){this.key=e.key,this.keyType=e.type,this.source=e}}var ui=(o=>(o[o.Early=-100]="Early",o[o.Default=0]="Default",o[o.Late=100]="Late",o))(ui||{});class F_{_eventListeners={};addEventListener(e,t,i){if(this._eventListeners[e]||(this._eventListeners[e]=[]),!t||typeof t!="function"){console.error("Invalid call to addEventListener: callback is required and must be a function!");return}i?i={...i}:i={};let n=0;i?.queue!=null&&(n=i.queue);const s=this._eventListeners[e],r=s.find(a=>a.priority===n);r?r.listeners.push({callback:t,options:i}):(s.push({priority:n,listeners:[{callback:t,options:i}]}),s.sort((a,l)=>a.priority-l.priority))}removeEventListener(e,t,i){if(!this._eventListeners[e]||!t)return;const n=this._eventListeners[e];if(i?.queue!=null){const s=n.find(a=>a.priority===i.queue);if(!s)return;const r=s.listeners.findIndex(a=>a.callback===t);r>=0&&s.listeners.splice(r,1)}else for(const s of n){const r=s.listeners.findIndex(a=>a.callback===t);r>=0&&s.listeners.splice(r,1)}}dispatchEvent(e){let t=!1;if(e instanceof vc){const i=this._eventListeners[e.type];if(i)for(const n of i)for(let s=0;s<n.listeners.length;s++){const r=n.listeners[s];if(r.options?.signal?.aborted){n.listeners.splice(s,1),s--;continue}r.options.once&&(n.listeners.splice(s,1),s--),r.callback(e)}}if(e instanceof Ao){const i=this._eventListeners[e.type];if(i)for(const n of i){if(t)break;for(let s=0;s<n.listeners.length;s++){const r=n.listeners[s];if(r.options?.signal?.aborted){n.listeners.splice(s,1),s--;continue}if(e.immediatePropagationStopped){t=!0,qe&&console.log("immediatePropagationStopped",e.type);break}else e.propagationStopped&&(t=!0,qe&&console.log("propagationStopped",e.type));r.options.once&&(n.listeners.splice(s,1),s--),r.callback(e)}}}}_doubleClickTimeThreshold=.2;_longPressTimeThreshold=1;get mousePosition(){return this._pointerPositions[0]}get mousePositionRC(){return this._pointerPositionsRC[0]}get mouseDown(){return this._pointerDown[0]}get mouseUp(){return this._pointerUp[0]}get mouseClick(){return this._pointerClick[0]}get mouseDoubleClick(){return this._pointerDoubleClick[0]}get mousePressed(){return this._pointerPressed[0]}get mouseWheelChanged(){return this.getMouseWheelChanged(0)}get click(){return this._pointerClick[0]}get doubleClick(){return this._pointerDoubleClick[0]}getGamepad(e=0){return typeof navigator<"u"&&"getGamepads"in navigator&&navigator.getGamepads()[e]||null}_setCursorTypes=[];setCursorPointer(){this.setCursor("pointer")}setCursorNormal(){this.unsetCursor("pointer")}setCursor(e){this._setCursorTypes.push(e),this._setCursorTypes.length>10&&this._setCursorTypes.shift(),this.updateCursor()}unsetCursor(e){for(let t=this._setCursorTypes.length-1;t>=0;t--)if(this._setCursorTypes[t]===e){this._setCursorTypes.splice(t,1),this.updateCursor();break}}updateCursor(){this._setCursorTypes?.length==0?this.context.domElement.style.cursor="default":this.context.domElement.style.cursor=this._setCursorTypes[this._setCursorTypes.length-1]}getIsPointerIdInUse(e){for(const t of this._pointerEventsPressed)if(t.pointerId===e&&t.used)return!0;return!1}getPointerPressedCount(){let e=0;for(let t=0;t<this._pointerPressed.length;t++)this._pointerPressed[t]&&e++;return e}getPointerPosition(e){return e>=this._pointerPositions.length?null:this._pointerPositions[e]}getPointerPositionLastFrame(e){return e>=this._pointerPositionsLastFrame.length?null:this._pointerPositionsLastFrame[e]}getPointerPositionDelta(e){return e>=this._pointerPositionsDelta.length?null:this._pointerPositionsDelta[e]}getPointerPositionRC(e){return e>=this._pointerPositionsRC.length?null:this._pointerPositionsRC[e]}getPointerDown(e){return e>=this._pointerDown.length?!1:this._pointerDown[e]}getPointerUp(e){return e>=this._pointerUp.length?!1:this._pointerUp[e]}getPointerPressed(e){return e>=this._pointerPressed.length?!1:this._pointerPressed[e]}getPointerClicked(e){return e>=this._pointerClick.length?!1:this._pointerClick[e]}getPointerDoubleClicked(e){return e>=this._pointerDoubleClick.length?!1:this._pointerDoubleClick[e]}getPointerDownTime(e){return e>=this._pointerDownTime.length?-1:this._pointerDownTime[e]}getPointerUpTime(e){return e>=this._pointerUpTime.length?-1:this._pointerUpTime[e]}getPointerLongPress(e){return e>=this._pointerDownTime.length?!1:this.getPointerPressed(e)&&this.context.time.time-this._pointerDownTime[e]>this._longPressTimeThreshold}getIsMouse(e){return e<0||e>=this._pointerTypes.length?!1:this._pointerTypes[e]==="mouse"}getIsTouch(e){return e<0||e>=this._pointerTypes.length?!1:this._pointerTypes[e]==="touch"}getTouchesPressedCount(){let e=0;for(let t=0;t<this._pointerPressed.length;t++)this._pointerPressed[t]&&this.getIsTouch(t)&&e++;return e}getMouseWheelChanged(e=0){return e>=this._mouseWheelChanged.length?!1:this._mouseWheelChanged[e]}getMouseWheelDeltaY(e=0){return e>=this._mouseWheelDeltaY.length?0:this._mouseWheelDeltaY[e]}getPointerEvent(e){if(!(e>=this._pointerEvent.length))return this._pointerEvent[e]??void 0}*foreachPointerId(e){for(let t=0;t<this._pointerTypes.length;t++)if(this._pointerIsActive(t)){if(e!==void 0){const i=this._pointerTypes[t];if(Array.isArray(e)){let n=!1;for(const s of e)if(i===s){n=!0;break}if(!n)continue}else if(e!==i)continue}yield t}}*foreachTouchId(){for(let e=0;e<this._pointerTypes.length;e++)this._pointerTypes[e]==="touch"&&this._pointerIsActive[e]&&(yield e)}_pointerIsActive(e){return e<0?!1:this._pointerPressed[e]||this._pointerDown[e]||this._pointerUp[e]}context;_pointerDown=[!1];_pointerUp=[!1];_pointerClick=[!1];_pointerDoubleClick=[!1];_pointerPressed=[!1];_pointerPositions=[new ee];_pointerPositionsLastFrame=[new ee];_pointerPositionsDelta=[new ee];_pointerPositionsRC=[new ee];_pointerPositionDown=[new b];_pointerDownTime=[];_pointerUpTime=[];_pointerUpTimestamp=[];_pointerIds=[];_pointerTypes=[""];_mouseWheelChanged=[!1];_mouseWheelDeltaY=[0];_pointerEvent=[];_pointerEventsPressed=[];_pointerSpace=[];_pressedStack=new Map;onDownButton(e,t){let i=this._pressedStack.get(e);i||(i=[],this._pressedStack.set(e,i)),i.push(t)}onReleaseButton(e,t){const i=this._pressedStack.get(e);if(!i)return;const n=i.indexOf(t);n>=0&&i.splice(n,1)}getFirstPressedButtonForPointer(e){const t=this._pressedStack.get(e);if(t)return t[0]}getLatestPressedButtonForPointer(e){const t=this._pressedStack.get(e);if(t)return t[t.length-1]}getKeyDown(e){if(e!==void 0)return this.isKeyDown(e);for(const t in this.keysPressed){const i=this.keysPressed[t];if(i.startFrame===this.context.time.frameCount)return i.key}return null}getKeyPressed(e){if(e!==void 0)return this.isKeyPressed(e);for(const t in this.keysPressed){const i=this.keysPressed[t];if(i.pressed)return i.key}return null}getKeyUp(e){if(e!==void 0)return this.isKeyUp(e);for(const t in this.keysPressed){const i=this.keysPressed[t];return i.pressed===!1&&i.frame===this.context.time.frameCount}return null}isKeyDown(e){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;const t=this.getCodeForCommonKeyName(e);if(t!==null){for(const n of t)if(this.isKeyDown(n))return!0;return!1}const i=this.keysPressed[e];return i?i.startFrame===this.context.time.frameCount&&i.pressed:!1}isKeyUp(e){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;const t=this.getCodeForCommonKeyName(e);if(t!==null){for(const n of t)if(this.isKeyUp(n))return!0;return!1}const i=this.keysPressed[e];return i?i.frame===this.context.time.frameCount&&i.pressed===!1:!1}isKeyPressed(e){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;const t=this.getCodeForCommonKeyName(e);if(t!==null){for(const n of t)if(this.isKeyPressed(n))return!0;return!1}const i=this.keysPressed[e];return i&&i.pressed||!1}getCodeForCommonKeyName(e){if(e.length===1){if(e>="0"&&e<="9")return["Digit"+e];if(e>="a"&&e<="z")return["Key"+e.toUpperCase()];if(e==" ")return["Space"]}switch(e){case"shift":case"Shift":return["ShiftLeft","ShiftRight"];case"control":case"Control":return["ControlLeft","ControlRight"];case"alt":case"Alt":return["AltLeft","AltRight"]}return null}createInputEvent(e){switch(e.type){case"pointerdown":qe&&Pe("Create Pointer down"),this.onDownButton(e.deviceIndex,e.button),this.onDown(e);break;case"pointermove":qe&&Pe("Create Pointer move"),this.onMove(e);break;case"pointerup":qe&&Pe("Create Pointer up"),this.onUp(e),this.onReleaseButton(e.deviceIndex,e.button);break}}convertScreenspaceToRaycastSpace(e){return e.x=(e.x-this.context.domX)/this.context.domWidth*2-1,e.y=-((e.y-this.context.domY)/this.context.domHeight)*2+1,e}constructor(e){this.context=e,this.context.post_render_callbacks.push(this.onEndOfFrame)}_htmlEventSource;bindEvents(){this.unbindEvents(),this._htmlEventSource=this.context.renderer.domElement,window.addEventListener("contextmenu",this.onContextMenu),this._htmlEventSource.addEventListener("pointerdown",this.onPointerDown,{passive:!0}),window.addEventListener("pointermove",this.onPointerMove,{passive:!0,capture:!0}),window.addEventListener("pointerup",this.onPointerUp,{passive:!0}),window.addEventListener("pointercancel",this.onPointerCancel,{passive:!0}),window.addEventListener("touchstart",this.onTouchStart,{passive:!0}),window.addEventListener("touchmove",this.onTouchMove,{passive:!0}),window.addEventListener("touchend",this.onTouchEnd,{passive:!0}),this._htmlEventSource.addEventListener("wheel",this.onMouseWheel,{passive:!0}),window.addEventListener("wheel",this.onWheelWindow,{passive:!0}),window.addEventListener("keydown",this.onKeyDown,!1),window.addEventListener("keypress",this.onKeyPressed,!1),window.addEventListener("keyup",this.onKeyUp,!1),window.addEventListener("blur",this.onLostFocus)}unbindEvents(){for(const e in this._eventListeners)this._eventListeners[e].length=0;window.removeEventListener("contextmenu",this.onContextMenu),this._htmlEventSource?.removeEventListener("pointerdown",this.onPointerDown),window.removeEventListener("pointermove",this.onPointerMove),window.removeEventListener("pointerup",this.onPointerUp),window.removeEventListener("pointercancel",this.onPointerCancel),window.removeEventListener("touchstart",this.onTouchStart),window.removeEventListener("touchmove",this.onTouchMove),window.removeEventListener("touchend",this.onTouchEnd),this._htmlEventSource?.removeEventListener("wheel",this.onMouseWheel,!1),window.removeEventListener("wheel",this.onWheelWindow,!1),window.removeEventListener("keydown",this.onKeyDown,!1),window.removeEventListener("keypress",this.onKeyPressed,!1),window.removeEventListener("keyup",this.onKeyUp,!1),window.removeEventListener("blur",this.onLostFocus)}dispose(){const e=this.context.post_render_callbacks.indexOf(this.onEndOfFrame);e>=0&&this.context.post_render_callbacks.splice(e,1),this.unbindEvents()}onLostFocus=()=>{for(const e in this.keysPressed)this.keysPressed[e].pressed=!1};_receivedPointerMoveEventsThisFrame=new Array;onEndOfFrame=()=>{this._receivedPointerMoveEventsThisFrame.length=0;for(let e=0;e<this._pointerUp.length;e++)this._pointerUp[e]=!1;for(let e=0;e<this._pointerDown.length;e++)this._pointerDown[e]=!1;for(let e=0;e<this._pointerClick.length;e++)this._pointerClick[e]=!1;for(let e=0;e<this._pointerDoubleClick.length;e++)this._pointerDoubleClick[e]=!1;for(const e of this._pointerPositionsDelta)e.set(0,0);for(let e=0;e<this._mouseWheelChanged.length;e++)this._mouseWheelChanged[e]=!1;for(let e=0;e<this._mouseWheelDeltaY.length;e++)this._mouseWheelDeltaY[e]=0};canReceiveInput(e){return e.target===this.context.renderer?.domElement||e.target===this.context.domElement||this.context.isInAR||this.context.isInAR&&e.target===document.body&&I.isMozillaXR()?!0:(qe&&console.warn("CanReceiveInput:False for",e.target),!1)}onContextMenu=e=>{this.canReceiveInput(e)};keysPressed={};onKeyDown=e=>{if(qe&&console.log(`key down ${e.code}, ${this.context.application.hasFocus}`,e),!this.context.application.hasFocus)return;const t=this.keysPressed[e.code];if(t&&t.pressed)return;this.keysPressed[e.code]={pressed:!0,frame:this.context.time.frameCount+1,startFrame:this.context.time.frameCount+1,key:e.key,code:e.code};const i=new vc("keydown",e,e);this.onDispatchEvent(i)};onKeyPressed=e=>{if(!this.context.application.hasFocus)return;const t=this.keysPressed[e.code];if(!t)return;t.pressed=!0,t.frame=this.context.time.frameCount+1;const i=new vc("keypress",e,e);this.onDispatchEvent(i)};onKeyUp=e=>{if(!this.context.application.hasFocus)return;const t=this.keysPressed[e.code];if(!t)return;t.pressed=!1,t.frame=this.context.time.frameCount+1;const i=new vc("keyup",e,e);this.onDispatchEvent(i)};onWheelWindow=e=>{document.pointerLockElement&&this.onMouseWheel(e)};onMouseWheel=e=>{if(this.canReceiveInput(e)===!1)return;this._mouseWheelDeltaY.length<=0&&this._mouseWheelDeltaY.push(0),this._mouseWheelChanged.length<=0&&this._mouseWheelChanged.push(!1),this._mouseWheelChanged[0]=!0;const t=this._mouseWheelDeltaY[0];this._mouseWheelDeltaY[0]=t+e.deltaY};onPointerDown=e=>{if(this.context.isInAR||this.canReceiveInput(e)===!1)return;e.target instanceof HTMLElement&&e.target.setPointerCapture(e.pointerId);const t=this.getPointerId(e);qe&&Pe(`pointer down #${t}, identifier:${e.pointerId}`);const i=this.getAndUpdateSpatialObjectForScreenPosition(t,e.clientX,e.clientY),n=new Ao("pointerdown",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:t,button:e.button,clientX:e.clientX,clientY:e.clientY,pointerType:e.pointerType,buttonName:this.getButtonName(e),device:i,pressure:e.pressure});this.onDown(n)};onPointerMove=e=>{if(this.context.isInAR||this._receivedPointerMoveEventsThisFrame.includes(e.pointerId))return;this._receivedPointerMoveEventsThisFrame.push(e.pointerId);let t=e.button;e.pointerType==="mouse"&&(t=this.getFirstPressedButtonForPointer(0)??0);const i=this.getPointerId(e,t);t===-1&&(t=i);const n=this.getAndUpdateSpatialObjectForScreenPosition(i,e.clientX,e.clientY),s=new Ao("pointermove",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:i,button:t,clientX:e.clientX,clientY:e.clientY,pointerType:e.pointerType,buttonName:this.getButtonName(e),device:n,pressure:e.pressure});this.onMove(s)};onPointerCancel=e=>{this.context.isInAR||(qe&&console.log("Pointer cancel",e),this.onPointerUp(e))};onPointerUp=e=>{if(this.context.isInAR)return;e.target instanceof HTMLElement&&e.target.releasePointerCapture(e.pointerId);const t=this.getPointerId(e),i=new Ao("pointerup",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:t,button:e.button,clientX:e.clientX,clientY:e.clientY,pointerType:e.pointerType,buttonName:this.getButtonName(e),device:this.getAndUpdateSpatialObjectForScreenPosition(t,e.clientX,e.clientY),pressure:e.pressure});this.onUp(i),this._pointerIds[t]=-1,qe&&console.log("ID="+t,"PointerId="+e.pointerId,"ALL:",[...this._pointerIds])};getPointerId(e,t){return e.pointerType==="mouse"?0+(t??e.button):this.getPointerIndex(e.pointerId)}getButtonName(e){const t=e.button;if(e.pointerType==="mouse")switch(t){case 0:return"left";case 1:return"middle";case 2:return"right"}return"unknown"}onTouchStart=e=>{if(this.context.isInAR)for(let t=0;t<e.changedTouches.length;t++){const i=e.changedTouches[t],n=this.getPointerIndex(i.identifier),s=this.getAndUpdateSpatialObjectForScreenPosition(n,i.clientX,i.clientY),r=new Ao("pointerdown",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:n,button:0,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",buttonName:"unknown",device:s,pressure:i.force});this.onDown(r)}};onTouchMove=e=>{if(this.context.isInAR)for(let t=0;t<e.changedTouches.length;t++){const i=e.changedTouches[t],n=this.getPointerIndex(i.identifier),s=this.getAndUpdateSpatialObjectForScreenPosition(n,i.clientX,i.clientY),r=new Ao("pointermove",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:n,button:0,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",buttonName:"unknown",device:s,pressure:i.force});this.onMove(r)}};onTouchEnd=e=>{if(this.context.isInAR)for(let t=0;t<e.changedTouches.length;t++){const i=e.changedTouches[t],n=this.getPointerIndex(i.identifier),s=new Ao("pointerup",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:n,button:0,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",buttonName:"unknown",device:this.getAndUpdateSpatialObjectForScreenPosition(n,i.clientX,i.clientY),pressure:i.force});this.onUp(s),this._pointerIds[n]=-1}};tempNearPlaneVector=new b;tempFarPlaneVector=new b;tempLookMatrix=new K;getAndUpdateSpatialObjectForScreenPosition(e,t,i){let n=this._pointerSpace[e];n||(n=new M,this._pointerSpace[e]=n),this._pointerSpace[e]=n;const s=this.context.mainCamera;if(s){const r=this.tempNearPlaneVector.set(t,i,-1);this.convertScreenspaceToRaycastSpace(r);const a=this.tempFarPlaneVector.set(r.x,r.y,1);r.unproject(s),a.unproject(s);const l=s.worldUp||F(0,1,0).applyQuaternion(_e(s));this.tempLookMatrix.lookAt(a,r,l),n.position.set(r.x,r.y,r.z),n.quaternion.setFromRotationMatrix(this.tempLookMatrix)}return n}isInRect(e){if(this.context.isInXR)return!0;const t=this.context.domElement.getBoundingClientRect(),i=e.clientX,n=e.clientY,s=i>=t.x&&i<=t.right&&n>=t.y&&n<=t.bottom;return qe&&!s&&console.log("Not in rect",t,i,n),s}onDown(e){const t=e.pointerId;if(this.getPointerPressed(t)){qe&&console.warn(`Received pointerDown event for pointerId that is already pressed: ${t}/${e.button}`,qe?e:"");return}if(qe&&console.log(e.pointerType,"DOWN",t,e.button),!!this.isInRect(e)){for(this.setPointerState(t,this._pointerPressed,!0),this.setPointerState(t,this._pointerDown,!0),this.setPointerStateT(t,this._pointerEvent,e.source);t>=this._pointerTypes.length;)this._pointerTypes.push(e.pointerType);for(this._pointerTypes[t]=e.pointerType;t>=this._pointerPositionDown.length;)this._pointerPositionDown.push(new b);for(this._pointerPositionDown[t].set(e.clientX,e.clientY,e.clientZ??0);t>=this._pointerPositions.length;)this._pointerPositions.push(new ee);this._pointerPositions[t].set(e.clientX,e.clientY),t>=this._pointerDownTime.length&&this._pointerDownTime.push(0),this._pointerDownTime[t]=this.context.time.realtimeSinceStartup,this.updatePointerPosition(e),this._pointerEventsPressed.push(e),this.onDispatchEvent(e)}}onMove(e){const t=e.pointerId,i=this.getPointerPressed(t);i===!1&&!this.isInRect(e)||e.pointerType==="touch"&&!i||(this.updatePointerPosition(e),this.setPointerStateT(t,this._pointerEvent,e.source),this.onDispatchEvent(e))}onUp(e){const t=e.pointerId;if(!this.getPointerPressed(t)){qe&&console.warn(`Received pointerUp for pointerId that is not pressed: ${t}/${e.button}`,qe?e:"");return}qe&&console.log(e.pointerType,"UP",t),this.setPointerState(t,this._pointerPressed,!1),this.setPointerStateT(t,this._pointerEvent,e.source),this.setPointerState(t,this._pointerUp,!0),this.updatePointerPosition(e);for(let a=this._pointerEventsPressed.length-1;a>=0;a--)if(this._pointerEventsPressed[a].pointerId===t){this._pointerEventsPressed.splice(a,1);break}if(!this._pointerPositionDown[t]){qe&&be("[Received pointer up event without matching down event for button: "+t),console.warn("Received pointer up event without matching down event for button: "+t);return}const i=this._pointerUpTime[t],n=this._pointerDownTime[t],s=this.context.time.realtimeSinceStartup,r=s-n;if(t>=this._pointerUpTime.length&&this._pointerUpTime.push(-99),this._pointerUpTime[t]=s,r<1){let a=e.clientX-this._pointerPositionDown[t].x,l=e.clientY-this._pointerPositionDown[t].y,c=0;if(e.isSpatial&&e.clientZ!=null&&(c=e.clientZ-this._pointerPositionDown[t].z,a*=200,l*=200,c*=200),Math.abs(a)<5&&Math.abs(l)<5&&Math.abs(c)<5){this.setPointerState(t,this._pointerClick,!0),e.isClick=!0;const h=s-i;qe&&console.log("CLICK",t,a,l,c,h),h<this._doubleClickTimeThreshold&&h>0&&(this.setPointerState(t,this._pointerDoubleClick,!0),e.isDoubleClick=!0)}}this.onDispatchEvent(e)}updatePointerPosition(e){const t=e.pointerId;for(;t>=this._pointerPositions.length;)this._pointerPositions.push(new ee);for(;t>=this._pointerPositionsLastFrame.length;)this._pointerPositionsLastFrame.push(new ee);for(;t>=this._pointerPositionsDelta.length;)this._pointerPositionsDelta.push(new ee);const i=this._pointerPositionsLastFrame[t];i.copy(this._pointerPositions[t]);const n=this._pointerPositionsDelta[t];let s=e.clientX-i.x,r=e.clientY-i.y;if(e.source instanceof MouseEvent||e.source instanceof TouchEvent){const h=e.source;s===0&&h.movementX!==0&&(s=h.movementX||0),r===0&&h.movementY!==0&&(r=h.movementY||0)}n.x+=s,n.y+=r,this._pointerPositions[t].x=e.clientX,this._pointerPositions[t].y=e.clientY;const a=e.clientX,l=e.clientY;for(;t>=this._pointerPositionsRC.length;)this._pointerPositionsRC.push(new ee);const c=this._pointerPositionsRC[t];c.set(a,l),this.convertScreenspaceToRaycastSpace(c)}getPointerIndex(e){let t=-1;for(let i=0;i<this._pointerIds.length;i++){if(this._pointerIds[i]===e)return i;t===-1&&this._pointerIds[i]===-1&&(t=i)}return t!==-1?(this._pointerIds[t]=e,t):(qe&&console.log("PUSH pointerId:",e),this._pointerIds.push(e),this._pointerIds.length-1)}setPointerState(e,t,i){t[e]=i}setPointerStateT(e,t,i){return t[e]=i,i}onDispatchEvent(e){const t=U.Current;try{U.Current=this.context,this.dispatchEvent(e)}finally{U.Current=t}}}const Wa=new K().makeRotationY(Math.PI),Xi=new N().setFromAxisAngle(new b(0,1,0),Math.PI),mk=v("debugwebxr");class gk{priority=-1e5;gameObject;isXRRig(){return!0}get isActive(){return this.gameObject.visible}constructor(){if(this.gameObject=new M,this.gameObject.name="Implicit XR Rig",mk){const e=Eg(16733661);e.position.y+=.5,this.gameObject.add(e)}}}const Io=v("debugwebxr"),Zd=v("debugcustomgesture"),fk="https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles",yk="generic-trigger",bk=new N().setFromEuler(new rt(Co.degToRad(0),Co.degToRad(-90),Co.degToRad(-90))),_k=new b(.04,-.04,0);class fg{xr;get context(){return this.xr.context}inputSource;index=0;emitEvents=!0;get connected(){return this._connected}_connected=!0;get isTracking(){return this._isTracking}_isTracking=!1;get gamepad(){return this.__gamepad??=this.inputSource.gamepad}__gamepad;get isHand(){return this.hand!=null}get hand(){return this.__hand??=this.inputSource.hand}__hand;get handObject(){return this.context.renderer.xr.getHand(this.index)}get profiles(){return this.inputSource.profiles}get layout(){return this._layout}get targetRayMode(){return this.inputSource.targetRayMode}get targetRaySpace(){return this.inputSource.targetRaySpace}get gripSpace(){return this.inputSource.gripSpace}get side(){return this.__side??=this.inputSource.handedness}__side=void 0;get isRight(){return this.side==="right"}get isLeft(){return this.side==="left"}get isStylus(){return this._isMxInk}getHitTestSource(){return this._hitTestSource||this._requestHitTestSource(),this._hitTestSource}get hasHitTestSource(){return this._hitTestSource}cancelHitTestSource(){this._hitTestSource&&(this._hitTestSource.cancel(),this._hitTestSource=void 0)}_hitTestSource=void 0;_hasSelectEvent=!1;get hasSelectEvent(){return this._hasSelectEvent}_isMxInk=!1;_isMetaQuestTouchController=!1;getHitTest(){return this.xr.getHitTest(this)}_handJointPoses=new Map;getHandJointPose(e,t){if(t=t||this.xr.frame,!this.hand||!t?.getJointPose||!this.xr.referenceSpace)return null;let i=this._handJointPoses?.get(e);return i||(i=t.getJointPose(e,this.xr.referenceSpace),i&&this._handJointPoses.set(e,i),i)}_gripMatrix=new K;_gripPosition=new b;_gripQuaternion=new N;_linearVelocity=new b;_rayPositionRaw=new b;_rayRotationRaw=new N;_rayMatrix=new K;_rayPosition=new b;_rayQuaternion=new N;get gripPosition(){return F(this._gripPosition)}get gripQuaternion(){return hi(this._gripQuaternion)}get gripMatrix(){return this._gripMatrix}get gripLinearVelocity(){return F(this._linearVelocity).applyQuaternion(Xi)}get rayPosition(){return F(this._rayPosition)}get rayQuaternion(){return hi(this._rayQuaternion)}get gripWorldPosition(){return F(this._gripWorldPosition)}_gripWorldPosition=new b;get gripWorldQuaternion(){return hi(this._gripWorldQuaternion)}_gripWorldQuaternion=new N;get rayWorldPosition(){return F(this._rayWorldPosition)}_rayWorldPosition=new b;updateRayWorldPosition(){const e=this.xr.context.mainCamera?.parent;this._rayWorldPosition.copy(this._rayPositionRaw),e&&this._rayWorldPosition.applyMatrix4(e.matrixWorld)}get rayWorldQuaternion(){return hi(this._rayWorldQuaternion)}_rayWorldQuaternion=new N;get pinchPosition(){return F(this._pinchPosition)}_pinchPosition=new b;updateRayWorldQuaternion(){const e=this.xr.context.mainCamera?.parent,t=e?_e(e):void 0;this._rayWorldQuaternion.copy(this._rayRotationRaw).multiply(Xi),t&&this._rayWorldQuaternion.premultiply(t)}get ray(){return this._ray.origin.copy(this.rayWorldPosition),this._ray.direction.copy(F(0,0,1).applyQuaternion(this.rayWorldQuaternion)),this._ray}_ray;_hand_wristDotUp=void 0;get handWristDotUp(){if(this._hand_wristDotUp!==void 0)return this._hand_wristDotUp;const e=this.handObject?.joints.wrist;if(e){const t=F(0,1,0).applyQuaternion(e.quaternion),i=F(0,1,0).dot(t);return this._hand_wristDotUp=i}}get isHandUpsideDown(){return this.handWristDotUp!==void 0?this.handWristDotUp<-.7:!1}get isTeleportGesture(){return this.isHandUpsideDown&&this.getGesture("pinch")?.isDown}get object(){return this._object}_object;_gripSpaceObject;_raySpaceObject;model=null;_debugAxesHelper=new Oi(.15);_debugGripAxesHelper=new Oi(.07);_debugRayAxesHelper=new Oi(.07);async getModelUrl(){return this.getMotionController?.then(e=>e?.assetUrl||null)}constructor(e,t,i){this.xr=e,this.inputSource=t,this.index=i,this._object=new M,this._object.name=`NeedleXRController_${i}`,Io&&(this._object.add(this._debugAxesHelper),this._gripSpaceObject=new M,this._raySpaceObject=new M,this._gripSpaceObject.name=`NeedleXRController_${i}_gripSpace`,this._raySpaceObject.name=`NeedleXRController_${i}_raySpace`,this._gripSpaceObject.add(this._debugGripAxesHelper),this._raySpaceObject.add(this._debugRayAxesHelper),this.xr.context.scene.add(this._gripSpaceObject),this.xr.context.scene.add(this._raySpaceObject)),this.xr.context.scene.add(this._object),this._ray=new So,this.pointerInit={origin:this,pointerType:this.hand?"hand":"controller",deviceIndex:this.index,pointerId:-1,mode:this.inputSource.targetRayMode,ray:this._ray,device:this._object,buttonName:"none"},this.initialize(),this.subscribeEvents()}_hitTestSourcePromise=null;_requestHitTestSource(){return this._hitTestSourcePromise?this._hitTestSourcePromise:this.xr.mode==="immersive-ar"&&this.inputSource.targetRayMode==="tracked-pointer"&&this.xr.session.requestHitTestSourceForTransientInput?this._hitTestSourcePromise=this.xr.session.requestHitTestSourceForTransientInput({profile:this.inputSource.profiles[0],offsetRay:new XRRay})?.then(e=>(this._hitTestSourcePromise=null,this.connected?this._hitTestSource=e:(e.cancel(),null)))??null:null}onPointerHits=e=>{};onUpdate(e){this.onUpdateFrame(e),this.updateInputEvents(),this.onUpdateMove()}onRenderDebug(){B.DrawSphere(this.rayWorldPosition,.003),B.DrawDirection(this.rayWorldPosition,F(0,0,10).applyQuaternion(this.rayWorldQuaternion));const e=(this.inputSource.gripSpace?this.gripWorldPosition:this.object.worldPosition).sub(this.object.worldForward.multiplyScalar(.1)),t=this.inputSource.profiles.join(`
146
146
  `);let i=`Controller[${this.index}] (${this.inputSource.targetRayMode}, ${this.side})
147
147
  C:${this.connected?"x":"-"} T:${this.isTracking?"x":"-"} Hand:${this.inputSource.hand?"x":"-"} Pen: ${this._isMxInk?"x":"-"}`;if(this.inputSource.hand&&(i+=`
@@ -18323,6 +18323,21 @@ export declare class OrbitControls extends Component implements ICameraControlle
18323
18323
  export { }
18324
18324
 
18325
18325
 
18326
+ declare module 'three/examples/jsm/controls/OrbitControls.js' {
18327
+ interface OrbitControls {
18328
+ _sphericalDelta: import("three").Spherical;
18329
+ _rotateLeft: (angleInRadians: number) => void;
18330
+ _rotateUp: (angleInRadians: number) => void;
18331
+ _pan: (dx: number, dy: number) => void;
18332
+ _dollyIn: (dollyScale: number) => void;
18333
+ _dollyOut: (dollyScale: number) => void;
18334
+ }
18335
+ interface OrbitControlsEventMap {
18336
+ endMovement: Event;
18337
+ }
18338
+ }
18339
+
18340
+
18326
18341
  declare module 'three' {
18327
18342
  interface SkinnedMesh {
18328
18343
  staticGenerator?: StaticGeometryGenerator;
@@ -18345,21 +18360,6 @@ declare module 'three' {
18345
18360
  }
18346
18361
 
18347
18362
 
18348
- declare module 'three/examples/jsm/controls/OrbitControls.js' {
18349
- interface OrbitControls {
18350
- _sphericalDelta: import("three").Spherical;
18351
- _rotateLeft: (angleInRadians: number) => void;
18352
- _rotateUp: (angleInRadians: number) => void;
18353
- _pan: (dx: number, dy: number) => void;
18354
- _dollyIn: (dollyScale: number) => void;
18355
- _dollyOut: (dollyScale: number) => void;
18356
- }
18357
- interface OrbitControlsEventMap {
18358
- endMovement: Event;
18359
- }
18360
- }
18361
-
18362
-
18363
18363
  declare module 'three' {
18364
18364
  interface Object3D {
18365
18365
  get guid(): string | undefined;
@@ -1,5 +1,5 @@
1
- import { GameObject as r, onClear as i, onDestroy as a, onInitialized as s, onAfterRender as l, onBeforeRender as d, onUpdate as c, onStart as m, TypeStore as p, loadAsset as g, NeedleXRSession as u, Context as S, VERSION as C, Component as y, Components as E } from "./needle-engine.bundle-PUurnalQ.js";
2
- import { $physicsKey as T, ActionBuilder as A, ActionCollection as b, ActionModel as M, Addressables as I, AlignmentConstraint as D, AmbientMode as O, Animation as x, AnimationCurve as k, AnimationExtension as L, AnimationTrackHandler as N, AnimationUtils as B, Animator as F, AnimatorConditionMode as U, AnimatorController as w, AnimatorControllerParameterType as G, AnimatorStateInfo as W, Antialiasing as H, Application as X, AssetDatabase as z, AssetReference as V, Attractor as _, AudioExtension as j, AudioListener as Z, AudioSource as K, AudioTrackHandler as Q, Avatar as Y, AvatarBlink_Simple as $, AvatarEyeLook_Rotation as J, AvatarLoader as q, AvatarMarker as ee, AvatarModel as te, Avatar_Brain_LookAt as oe, Avatar_MouthShapes as re, Avatar_MustacheShake as ne, Avatar_POI as ie, Axes as ae, AxesHelper as se, BUILD_TIME as le, BaseUIComponent as de, BasicIKConstraint as ce, BehaviorExtension as me, BehaviorModel as pe, Component$1 as ge, BlobStorage as ue, BloomEffect as Se, BoxCollider as Ce, BoxGizmo as ye, BoxHelperComponent as Ee, Button as Re, ButtonsFactory as he, CallDirection as fe, CallInfo as ve, Camera as Pe, CameraTargetReachedEvent as Te, Canvas as Ae, CanvasGroup as be, CapsuleCollider as Me, ChangeMaterialOnClick as Ie, ChangeTransformOnClick as De, CharacterController as Oe, CharacterControllerInput as xe, ChromaticAberration as ke, CircularBuffer as Le, ClearFlags as Ne, ClickThrough as Be, ClipExtrapolation as Fe, Collider as Ue, Collision as we, CollisionDetectionMode as Ge, ColorAdjustments as We, ColorBySpeedModule as He, ColorOverLifetimeModule as Xe, Component$1 as ze, ComponentLifecycleEvents as Ve, ConnectionEvents as _e, ContactPoint as je, ContactShadows as Ze, ContextArgs as Ke, ContextEvent as Qe, ContextRegistry as Ye, ControlTrackHandler as $e, CursorFollow as Je, CustomBranding as qe, CustomShader as et, DefaultReflectionMode as tt, Deletable as ot, DeleteBox as rt, DepthOfField as nt, DeviceFlag as it, DeviceUtilities as at, DocumentExtension as st, DragControls as lt, DragMode as dt, DropListener as ct, Duplicatable as mt, EffectWrapper as pt, EmissionModule as gt, EmphasizeOnClick as ut, EngineLoadingView as St, EnvironmentScene as Ct, EventList as yt, EventListEvent as Et, EventSystem as Rt, EventTrigger as ht, FieldWithDefault as ft, FileReference as vt, FileReferenceSerializer as Pt, FileSpawnModel as Tt, File_Event as At, FixedJoint as bt, Fog as Mt, FrameEvent as It, GENERATOR as Dt, Gizmos as Ot, GltfExport as xt, GltfExportBox as kt, Gradient as Lt, Graphic as Nt, GraphicRaycaster as Bt, Graphics as Ft, GridHelper as Ut, GridLayoutGroup as wt, GroundProjectedEnv as Gt, GroupActionModel as Wt, HideFlags as Ht, HideOnStart as Xt, HingeJoint as zt, HorizontalLayoutGroup as Vt, HostData as _t, HoverAnimation as jt, Image as Zt, ImageReference as Kt, ImageReferenceSerializer as Qt, InheritVelocityModule as Yt, Input as $t, InputEventQueue as Jt, InputEvents as qt, InputField as eo, InstanceHandle as to, InstancingHandler as oo, InstancingUtil as ro, InstantiateEvent as no, InstantiateIdProvider as io, InstantiateOptions as ao, Interactable as so, InternalScreenshotUtils as lo, JoinedRoomResponse as co, KeyEventArgs as mo, Keyframe as po, LODGroup as go, LODModel as uo, LeftRoomResponse as So, Light as Co, LightData as yo, LimitVelocityOverLifetimeModule as Eo, LoadingElementOptions as Ro, LogStats as ho, LogType as fo, LookAt as vo, LookAtConstraint as Po, MainModule as To, MarkerTrackHandler as Ao, MarkerType as bo, MaskableGraphic as Mo, MaterialX as Io, Mathf as Do, MeshCollider as Oo, MeshRenderer as xo, MinMaxCurve as ko, MinMaxGradient as Lo, NEEDLE_ENGINE_FEATURE_FLAGS as No, MODULES as Bo, NEKeyboardEvent as Fo, NEPointerEvent as Uo, NeedleButtonElement as wo, ContextRegistry as Go, NeedleEngineModelLoader as Wo, NeedleEngineWebComponent as Ho, NeedleMenu as Xo, NeedlePatchesKey as zo, USDZExporter as Vo, NeedleXRController as _o, NeedleXRSync as jo, NeedleXRUtils as Zo, NestedGltf as Ko, NetworkConnection as Qo, NetworkedStreamEvents as Yo, NetworkedStreams as $o, Networking as Jo, NewInstanceModel as qo, NoiseModule as er, ObjectRaycaster as tr, ObjectUtils as or, OffsetConstraint as rr, OneEuroFilter as nr, OneEuroFilterXYZ as ir, OpenURL as ar, OrbitControls as sr, Outline as lr, OwnershipEvent as dr, OwnershipModel as cr, PUBLIC_KEY as mr, Padding as pr, ParticleBurst as gr, ParticleSubEmitter as ur, ParticleSystem as Sr, ParticleSystemBaseBehaviour as Cr, ParticleSystemRenderer as yr, ParticleSystemShapeType as Er, PeerHandle as Rr, PeerNetworking as hr, Physics as fr, PhysicsExtension as vr, PhysicsMaterialCombine as Pr, PixelationEffect as Tr, PlayAnimationOnClick as Ar, PlayAudioOnClick as br, PlayableDirector as Mr, PlayerColor as Ir, PlayerState as Dr, PlayerStateEvent as Or, PlayerSync as xr, PlayerView as kr, PlayerViewManager as Lr, PointerEventData as Nr, PointerType as Br, PostProcessingEffect as Fr, PostProcessingEffectOrder as Ur, PostProcessingHandler as wr, Volume as Gr, PreliminaryAction as Wr, PreliminaryTrigger as Hr, PreviewHelper as Xr, PrimitiveType as zr, Progress as Vr, PromiseAllWithErrors as _r, PromiseErrorResult as jr, RGBAColor as Zr, RapierPhysics as Kr, RawImage as Qr, RaycastOptions as Yr, Rect as $r, RectTransform as Jr, ReflectionProbe as qr, RegisteredAnimationInfo as en, RemoteSkybox as tn, RenderTexture as on, RenderTextureSerializer as rn, Renderer as nn, RendererData as an, RendererLightmap as sn, Rigidbody as ln, RigidbodyConstraints as dn, RoomEvents as cn, RotationBySpeedModule as mn, RotationOverLifetimeModule as pn, SceneLightSettings as gn, SceneSwitcher as un, ScreenCapture as Sn, ScreenSpaceAmbientOcclusion as Cn, ScreenSpaceAmbientOcclusionN8 as yn, ScrollFollow as En, SeeThrough as Rn, SendQueue as hn, SerializationContext as fn, SetActiveOnClick as vn, ShadowCatcher as Pn, ShapeModule as Tn, ShapeOverlapResult as An, SharpeningEffect as bn, SignalAsset as Mn, SignalReceiver as In, SignalReceiverEvent as Dn, SignalTrackHandler as On, Size as xn, SizeBySpeedModule as kn, SizeOverLifetimeModule as Ln, SkinnedMeshRenderer as Nn, SmoothFollow as Bn, SpatialGrabRaycaster as Fn, SpatialHtml as Un, SpatialTrigger as wn, SpatialTriggerReceiver as Gn, SpectatorCamera as Wn, SphereCollider as Hn, SphereIntersection as Xn, SplineContainer as zn, SplineData as Vn, SplineUtils as _n, SplineWalker as jn, Sprite as Zn, SpriteData as Kn, SpriteRenderer as Qn, SpriteSheet as Yn, StateMachineBehaviour as $n, StreamEndedEvent as Jn, StreamReceivedEvent as qn, SubEmitterSystem as ei, SyncedCamera as ti, SyncedRoom as oi, SyncedTransform as ri, TapGestureTrigger as ni, TeleportTarget as ii, TestRunner as ai, TestSceneUtils as si, TestSimulateUserData as li, Text as di, TextBuilder as ci, TextExtension as mi, TextureSheetAnimationModule as pi, TiltShiftEffect as gi, Time as ui, ToneMappingEffect as Si, TrackHandler as Ci, TrackType as yi, TrailModule as Ei, TransformData as Ri, TransformGizmo as hi, TriggerBuilder as fi, TriggerModel as vi, UIRaycastUtils as Pi, UIRootComponent as Ti, USDDocument as Ai, USDObject as bi, USDWriter as Mi, USDZExporter$1 as Ii, USDZText as Di, USDZUIExtension as Oi, UriSerializer as xi, UsageMarker as ki, UserJoinedOrLeftRoomModel as Li, VariantAction as Ni, VelocityOverLifetimeModule as Bi, VerticalLayoutGroup as Fi, VideoPlayer as Ui, ViewBox as wi, ViewDevice as Gi, Vignette as Wi, VisibilityAction as Hi, Voip as Xi, Volume as zi, VolumeParameter as Vi, VolumeProfile as _i, WaitForFrames as ji, WaitForPromise as Zi, WaitForSeconds as Ki, Watch as Qi, WebARCameraBackground as Yi, WebARSessionRoot as $i, WebXR as Ji, WebXRButtonFactory as qi, WebXRImageTracking as ea, WebXRImageTrackingModel as ta, WebXRPlaneTracking as oa, WebXRTrackedImage as ra, XRControllerFollow as na, XRControllerModel as ia, XRControllerMovement as aa, XRFlag as sa, XRRig as la, XRState as da, XRStateFlag as ca, __Ignore as ma, __internalNotifyObjectDestroyed as pa, activeInHierarchyFieldName as ga, addAttributeChangeCallback as ua, addComponent as Sa, addCustomExtensionPlugin as Ca, addNewComponent as ya, addPatch as Ea, apply as Ra, applyHMRChanges as ha, applyPrototypeExtensions as fa, beginListenDestroy as va, beginListenInstantiate as Pa, binaryIdentifierCasts as Ta, build_scene_functions as Aa, builtinComponentKeyName as ba, calculateProgress01 as Ma, clearMessages as Ia, clearMessages as Da, colorSerializer as Oa, compareAssociation as xa, componentSerializer as ka, copyTexture as La, createMotion as Na, debugNet as Ba, debugOwner as Fa, decompressGpuTexture as Ua, deepClone as wa, delay as Ga, delayForFrames as Wa, deserializeObject as Ha, destroy as Xa, destroyComponentInstance as za, determineMimeTypeFromExtension as Va, disposeObjectResources as _a, disposeStream as ja, editorGuidKeyName as Za, enableSpatialConsole as Ka, euler as Qa, eventListSerializer as Ya, exportAsGLTF as $a, findByGuid as Ja, findObjectOfType as qa, findObjectsOfType as es, findResourceUsers as ts, fitCamera as os, fitObjectIntoVolume as rs, foreachComponent as ns, foreachComponentEnumerator as is, forward as as, generateQRCode as ss, generateSeed as ls, getBoundingBox as ds, getCameraController as cs, getComponent as ms, getComponentInChildren as ps, getComponentInParent as gs, getComponents as us, getComponentsInChildren as Ss, getComponentsInParent as Cs, getFormattedDate as ys, getIconElement as Es, getIconTexture as Rs, getLoader as hs, getOrAddComponent as fs, getParam as vs, getParentHierarchyPath as Ps, getPath as Ts, getPeerOptions as As, getPeerjsInstance as bs, getResourceUserCount as Ms, getTempColor as Is, getTempQuaternion as Ds, getTempVector as Os, getUrlParams as xs, getVisibleInCustomShadowRendering as ks, getWorldDirection as Ls, getWorldEuler as Ns, getWorldPosition as Bs, getWorldQuaternion as Fs, getWorldRotation as Us, getWorldScale as ws, hasCommercialLicense as Gs, hasIndieLicense as Ws, hasPointerEventComponent as Hs, hasProLicense as Xs, hideDebugConsole as zs, imageToCanvas as Vs, instantiate as _s, invokeLoadedImportPluginHooks as js, invokeXRSessionEnd as Zs, invokeXRSessionStart as Ks, isActiveInHierarchy as Qs, isActiveSelf as Ys, isAndroidDevice as $s, isAnimationAction as Js, isComponent as qs, isDebugMode as el, isDesktop as tl, isDestroyed as ol, isDevEnvironment as rl, isDisposed as nl, isExporting as il, isGLTFModel as al, isHostedOnGlitch as sl, isHotReloadEnabled as ll, isHotReloading as dl, isIPad as cl, isIconElement as ml, isLocalNetwork as pl, isMacOS as gl, isMobileDevice as ul, isMozillaXR as Sl, isQuest as Cl, isResourceTrackingEnabled as yl, isSafari as El, isUsingInstancing as Rl, isiOS as hl, isiPad as fl, loadPMREM as vl, loadSync as Pl, logHierarchy as Tl, lookAtInverse as Al, lookAtObject as bl, lookAtScreenPoint as Ml, makeId as Il, makeIdFromRandomWords as Dl, makeNameSafe as Ol, markAsInstancedRendered as xl, microphonePermissionsGranted as kl, nameof as Ll, nameofFactory as Nl, objectSerializer as Bl, offXRSessionEnd as Fl, offXRSessionStart as Ul, onXRSessionEnd as wl, onXRSessionStart as Gl, parseSync as Wl, placeOnSurface as Hl, postprocessFBXMaterials as Xl, prefix as zl, pushState as Vl, randomNumber as _l, registerBinaryType as jl, registerComponent as Zl, registerComponentExtension as Kl, registerCustomEffectType as Ql, registerExportExtensions as Yl, registerExtensions as $l, registerHotReloadType as Jl, registerLoader as ql, registerPrefabProvider as ed, registerPrototypeExtensions as td, registerType as od, relativePathPrefix as rd, removeAttributeChangeCallback as nd, removeComponent as id, removeCustomImportExtensionType as ad, removePatch as sd, resolveUrl as ld, sanitizeString as dd, saveImage as cd, screenshot as md, screenshot2 as pd, sendDestroyed as gd, serializable as ud, serializeObject as Sd, serializeable as Cd, setActive as yd, setAllowBalloonMessages as Ed, setAllowOverlayMessages as Rd, setAutoFitEnabled as hd, setCameraController as fd, setDestroyed as vd, setDevEnvironment as Pd, setDisposable as Td, setDontDestroy as Ad, setOrAddParamsToUrl as bd, setParam as Md, setParamWithoutReload as Id, setPeerOptions as Dd, setResourceTrackingEnabled as Od, setState as xd, setVisibleInCustomShadowRendering as kd, setWorldEuler as Ld, setWorldPosition as Nd, setWorldPositionXYZ as Bd, setWorldQuaternion as Fd, setWorldQuaternionXYZW as Ud, setWorldRotation as wd, setWorldRotationXYZ as Gd, setWorldScale as Wd, showBalloonError as Hd, showBalloonMessage as Xd, showBalloonWarning as zd, showDebugConsole as Vd, slerp as _d, syncDestroy as jd, syncField as Zd, syncInstantiate as Kd, textureToCanvas as Qd, toSourceId as Yd, tryCastBinary as $d, tryDetermineMimetypeFromBinary as Jd, tryDetermineMimetypeFromURL as qd, tryFindObject as ec, tryGetGuid as tc, unregisterHotReloadType as oc, unwatchWrite as rc, useForAutoFit as nc, validate as ic, watchWrite as ac } from "./needle-engine.bundle-PUurnalQ.js";
1
+ import { GameObject as r, onClear as i, onDestroy as a, onInitialized as s, onAfterRender as l, onBeforeRender as d, onUpdate as c, onStart as m, TypeStore as p, loadAsset as g, NeedleXRSession as u, Context as S, VERSION as C, Component as y, Components as E } from "./needle-engine.bundle-_--DT-Vr.js";
2
+ import { $physicsKey as T, ActionBuilder as A, ActionCollection as b, ActionModel as M, Addressables as I, AlignmentConstraint as D, AmbientMode as O, Animation as x, AnimationCurve as k, AnimationExtension as L, AnimationTrackHandler as N, AnimationUtils as B, Animator as F, AnimatorConditionMode as U, AnimatorController as w, AnimatorControllerParameterType as G, AnimatorStateInfo as W, Antialiasing as H, Application as X, AssetDatabase as z, AssetReference as V, Attractor as _, AudioExtension as j, AudioListener as Z, AudioSource as K, AudioTrackHandler as Q, Avatar as Y, AvatarBlink_Simple as $, AvatarEyeLook_Rotation as J, AvatarLoader as q, AvatarMarker as ee, AvatarModel as te, Avatar_Brain_LookAt as oe, Avatar_MouthShapes as re, Avatar_MustacheShake as ne, Avatar_POI as ie, Axes as ae, AxesHelper as se, BUILD_TIME as le, BaseUIComponent as de, BasicIKConstraint as ce, BehaviorExtension as me, BehaviorModel as pe, Component$1 as ge, BlobStorage as ue, BloomEffect as Se, BoxCollider as Ce, BoxGizmo as ye, BoxHelperComponent as Ee, Button as Re, ButtonsFactory as he, CallDirection as fe, CallInfo as ve, Camera as Pe, CameraTargetReachedEvent as Te, Canvas as Ae, CanvasGroup as be, CapsuleCollider as Me, ChangeMaterialOnClick as Ie, ChangeTransformOnClick as De, CharacterController as Oe, CharacterControllerInput as xe, ChromaticAberration as ke, CircularBuffer as Le, ClearFlags as Ne, ClickThrough as Be, ClipExtrapolation as Fe, Collider as Ue, Collision as we, CollisionDetectionMode as Ge, ColorAdjustments as We, ColorBySpeedModule as He, ColorOverLifetimeModule as Xe, Component$1 as ze, ComponentLifecycleEvents as Ve, ConnectionEvents as _e, ContactPoint as je, ContactShadows as Ze, ContextArgs as Ke, ContextEvent as Qe, ContextRegistry as Ye, ControlTrackHandler as $e, CursorFollow as Je, CustomBranding as qe, CustomShader as et, DefaultReflectionMode as tt, Deletable as ot, DeleteBox as rt, DepthOfField as nt, DeviceFlag as it, DeviceUtilities as at, DocumentExtension as st, DragControls as lt, DragMode as dt, DropListener as ct, Duplicatable as mt, EffectWrapper as pt, EmissionModule as gt, EmphasizeOnClick as ut, EngineLoadingView as St, EnvironmentScene as Ct, EventList as yt, EventListEvent as Et, EventSystem as Rt, EventTrigger as ht, FieldWithDefault as ft, FileReference as vt, FileReferenceSerializer as Pt, FileSpawnModel as Tt, File_Event as At, FixedJoint as bt, Fog as Mt, FrameEvent as It, GENERATOR as Dt, Gizmos as Ot, GltfExport as xt, GltfExportBox as kt, Gradient as Lt, Graphic as Nt, GraphicRaycaster as Bt, Graphics as Ft, GridHelper as Ut, GridLayoutGroup as wt, GroundProjectedEnv as Gt, GroupActionModel as Wt, HideFlags as Ht, HideOnStart as Xt, HingeJoint as zt, HorizontalLayoutGroup as Vt, HostData as _t, HoverAnimation as jt, Image as Zt, ImageReference as Kt, ImageReferenceSerializer as Qt, InheritVelocityModule as Yt, Input as $t, InputEventQueue as Jt, InputEvents as qt, InputField as eo, InstanceHandle as to, InstancingHandler as oo, InstancingUtil as ro, InstantiateEvent as no, InstantiateIdProvider as io, InstantiateOptions as ao, Interactable as so, InternalScreenshotUtils as lo, JoinedRoomResponse as co, KeyEventArgs as mo, Keyframe as po, LODGroup as go, LODModel as uo, LeftRoomResponse as So, Light as Co, LightData as yo, LimitVelocityOverLifetimeModule as Eo, LoadingElementOptions as Ro, LogStats as ho, LogType as fo, LookAt as vo, LookAtConstraint as Po, MainModule as To, MarkerTrackHandler as Ao, MarkerType as bo, MaskableGraphic as Mo, MaterialX as Io, Mathf as Do, MeshCollider as Oo, MeshRenderer as xo, MinMaxCurve as ko, MinMaxGradient as Lo, NEEDLE_ENGINE_FEATURE_FLAGS as No, MODULES as Bo, NEKeyboardEvent as Fo, NEPointerEvent as Uo, NeedleButtonElement as wo, ContextRegistry as Go, NeedleEngineModelLoader as Wo, NeedleEngineWebComponent as Ho, NeedleMenu as Xo, NeedlePatchesKey as zo, USDZExporter as Vo, NeedleXRController as _o, NeedleXRSync as jo, NeedleXRUtils as Zo, NestedGltf as Ko, NetworkConnection as Qo, NetworkedStreamEvents as Yo, NetworkedStreams as $o, Networking as Jo, NewInstanceModel as qo, NoiseModule as er, ObjectRaycaster as tr, ObjectUtils as or, OffsetConstraint as rr, OneEuroFilter as nr, OneEuroFilterXYZ as ir, OpenURL as ar, OrbitControls as sr, Outline as lr, OwnershipEvent as dr, OwnershipModel as cr, PUBLIC_KEY as mr, Padding as pr, ParticleBurst as gr, ParticleSubEmitter as ur, ParticleSystem as Sr, ParticleSystemBaseBehaviour as Cr, ParticleSystemRenderer as yr, ParticleSystemShapeType as Er, PeerHandle as Rr, PeerNetworking as hr, Physics as fr, PhysicsExtension as vr, PhysicsMaterialCombine as Pr, PixelationEffect as Tr, PlayAnimationOnClick as Ar, PlayAudioOnClick as br, PlayableDirector as Mr, PlayerColor as Ir, PlayerState as Dr, PlayerStateEvent as Or, PlayerSync as xr, PlayerView as kr, PlayerViewManager as Lr, PointerEventData as Nr, PointerType as Br, PostProcessingEffect as Fr, PostProcessingEffectOrder as Ur, PostProcessingHandler as wr, Volume as Gr, PreliminaryAction as Wr, PreliminaryTrigger as Hr, PreviewHelper as Xr, PrimitiveType as zr, Progress as Vr, PromiseAllWithErrors as _r, PromiseErrorResult as jr, RGBAColor as Zr, RapierPhysics as Kr, RawImage as Qr, RaycastOptions as Yr, Rect as $r, RectTransform as Jr, ReflectionProbe as qr, RegisteredAnimationInfo as en, RemoteSkybox as tn, RenderTexture as on, RenderTextureSerializer as rn, Renderer as nn, RendererData as an, RendererLightmap as sn, Rigidbody as ln, RigidbodyConstraints as dn, RoomEvents as cn, RotationBySpeedModule as mn, RotationOverLifetimeModule as pn, SceneLightSettings as gn, SceneSwitcher as un, ScreenCapture as Sn, ScreenSpaceAmbientOcclusion as Cn, ScreenSpaceAmbientOcclusionN8 as yn, ScrollFollow as En, SeeThrough as Rn, SendQueue as hn, SerializationContext as fn, SetActiveOnClick as vn, ShadowCatcher as Pn, ShapeModule as Tn, ShapeOverlapResult as An, SharpeningEffect as bn, SignalAsset as Mn, SignalReceiver as In, SignalReceiverEvent as Dn, SignalTrackHandler as On, Size as xn, SizeBySpeedModule as kn, SizeOverLifetimeModule as Ln, SkinnedMeshRenderer as Nn, SmoothFollow as Bn, SpatialGrabRaycaster as Fn, SpatialHtml as Un, SpatialTrigger as wn, SpatialTriggerReceiver as Gn, SpectatorCamera as Wn, SphereCollider as Hn, SphereIntersection as Xn, SplineContainer as zn, SplineData as Vn, SplineUtils as _n, SplineWalker as jn, Sprite as Zn, SpriteData as Kn, SpriteRenderer as Qn, SpriteSheet as Yn, StateMachineBehaviour as $n, StreamEndedEvent as Jn, StreamReceivedEvent as qn, SubEmitterSystem as ei, SyncedCamera as ti, SyncedRoom as oi, SyncedTransform as ri, TapGestureTrigger as ni, TeleportTarget as ii, TestRunner as ai, TestSceneUtils as si, TestSimulateUserData as li, Text as di, TextBuilder as ci, TextExtension as mi, TextureSheetAnimationModule as pi, TiltShiftEffect as gi, Time as ui, ToneMappingEffect as Si, TrackHandler as Ci, TrackType as yi, TrailModule as Ei, TransformData as Ri, TransformGizmo as hi, TriggerBuilder as fi, TriggerModel as vi, UIRaycastUtils as Pi, UIRootComponent as Ti, USDDocument as Ai, USDObject as bi, USDWriter as Mi, USDZExporter$1 as Ii, USDZText as Di, USDZUIExtension as Oi, UriSerializer as xi, UsageMarker as ki, UserJoinedOrLeftRoomModel as Li, VariantAction as Ni, VelocityOverLifetimeModule as Bi, VerticalLayoutGroup as Fi, VideoPlayer as Ui, ViewBox as wi, ViewDevice as Gi, Vignette as Wi, VisibilityAction as Hi, Voip as Xi, Volume as zi, VolumeParameter as Vi, VolumeProfile as _i, WaitForFrames as ji, WaitForPromise as Zi, WaitForSeconds as Ki, Watch as Qi, WebARCameraBackground as Yi, WebARSessionRoot as $i, WebXR as Ji, WebXRButtonFactory as qi, WebXRImageTracking as ea, WebXRImageTrackingModel as ta, WebXRPlaneTracking as oa, WebXRTrackedImage as ra, XRControllerFollow as na, XRControllerModel as ia, XRControllerMovement as aa, XRFlag as sa, XRRig as la, XRState as da, XRStateFlag as ca, __Ignore as ma, __internalNotifyObjectDestroyed as pa, activeInHierarchyFieldName as ga, addAttributeChangeCallback as ua, addComponent as Sa, addCustomExtensionPlugin as Ca, addNewComponent as ya, addPatch as Ea, apply as Ra, applyHMRChanges as ha, applyPrototypeExtensions as fa, beginListenDestroy as va, beginListenInstantiate as Pa, binaryIdentifierCasts as Ta, build_scene_functions as Aa, builtinComponentKeyName as ba, calculateProgress01 as Ma, clearMessages as Ia, clearMessages as Da, colorSerializer as Oa, compareAssociation as xa, componentSerializer as ka, copyTexture as La, createMotion as Na, debugNet as Ba, debugOwner as Fa, decompressGpuTexture as Ua, deepClone as wa, delay as Ga, delayForFrames as Wa, deserializeObject as Ha, destroy as Xa, destroyComponentInstance as za, determineMimeTypeFromExtension as Va, disposeObjectResources as _a, disposeStream as ja, editorGuidKeyName as Za, enableSpatialConsole as Ka, euler as Qa, eventListSerializer as Ya, exportAsGLTF as $a, findByGuid as Ja, findObjectOfType as qa, findObjectsOfType as es, findResourceUsers as ts, fitCamera as os, fitObjectIntoVolume as rs, foreachComponent as ns, foreachComponentEnumerator as is, forward as as, generateQRCode as ss, generateSeed as ls, getBoundingBox as ds, getCameraController as cs, getComponent as ms, getComponentInChildren as ps, getComponentInParent as gs, getComponents as us, getComponentsInChildren as Ss, getComponentsInParent as Cs, getFormattedDate as ys, getIconElement as Es, getIconTexture as Rs, getLoader as hs, getOrAddComponent as fs, getParam as vs, getParentHierarchyPath as Ps, getPath as Ts, getPeerOptions as As, getPeerjsInstance as bs, getResourceUserCount as Ms, getTempColor as Is, getTempQuaternion as Ds, getTempVector as Os, getUrlParams as xs, getVisibleInCustomShadowRendering as ks, getWorldDirection as Ls, getWorldEuler as Ns, getWorldPosition as Bs, getWorldQuaternion as Fs, getWorldRotation as Us, getWorldScale as ws, hasCommercialLicense as Gs, hasIndieLicense as Ws, hasPointerEventComponent as Hs, hasProLicense as Xs, hideDebugConsole as zs, imageToCanvas as Vs, instantiate as _s, invokeLoadedImportPluginHooks as js, invokeXRSessionEnd as Zs, invokeXRSessionStart as Ks, isActiveInHierarchy as Qs, isActiveSelf as Ys, isAndroidDevice as $s, isAnimationAction as Js, isComponent as qs, isDebugMode as el, isDesktop as tl, isDestroyed as ol, isDevEnvironment as rl, isDisposed as nl, isExporting as il, isGLTFModel as al, isHostedOnGlitch as sl, isHotReloadEnabled as ll, isHotReloading as dl, isIPad as cl, isIconElement as ml, isLocalNetwork as pl, isMacOS as gl, isMobileDevice as ul, isMozillaXR as Sl, isQuest as Cl, isResourceTrackingEnabled as yl, isSafari as El, isUsingInstancing as Rl, isiOS as hl, isiPad as fl, loadPMREM as vl, loadSync as Pl, logHierarchy as Tl, lookAtInverse as Al, lookAtObject as bl, lookAtScreenPoint as Ml, makeId as Il, makeIdFromRandomWords as Dl, makeNameSafe as Ol, markAsInstancedRendered as xl, microphonePermissionsGranted as kl, nameof as Ll, nameofFactory as Nl, objectSerializer as Bl, offXRSessionEnd as Fl, offXRSessionStart as Ul, onXRSessionEnd as wl, onXRSessionStart as Gl, parseSync as Wl, placeOnSurface as Hl, postprocessFBXMaterials as Xl, prefix as zl, pushState as Vl, randomNumber as _l, registerBinaryType as jl, registerComponent as Zl, registerComponentExtension as Kl, registerCustomEffectType as Ql, registerExportExtensions as Yl, registerExtensions as $l, registerHotReloadType as Jl, registerLoader as ql, registerPrefabProvider as ed, registerPrototypeExtensions as td, registerType as od, relativePathPrefix as rd, removeAttributeChangeCallback as nd, removeComponent as id, removeCustomImportExtensionType as ad, removePatch as sd, resolveUrl as ld, sanitizeString as dd, saveImage as cd, screenshot as md, screenshot2 as pd, sendDestroyed as gd, serializable as ud, serializeObject as Sd, serializeable as Cd, setActive as yd, setAllowBalloonMessages as Ed, setAllowOverlayMessages as Rd, setAutoFitEnabled as hd, setCameraController as fd, setDestroyed as vd, setDevEnvironment as Pd, setDisposable as Td, setDontDestroy as Ad, setOrAddParamsToUrl as bd, setParam as Md, setParamWithoutReload as Id, setPeerOptions as Dd, setResourceTrackingEnabled as Od, setState as xd, setVisibleInCustomShadowRendering as kd, setWorldEuler as Ld, setWorldPosition as Nd, setWorldPositionXYZ as Bd, setWorldQuaternion as Fd, setWorldQuaternionXYZW as Ud, setWorldRotation as wd, setWorldRotationXYZ as Gd, setWorldScale as Wd, showBalloonError as Hd, showBalloonMessage as Xd, showBalloonWarning as zd, showDebugConsole as Vd, slerp as _d, syncDestroy as jd, syncField as Zd, syncInstantiate as Kd, textureToCanvas as Qd, toSourceId as Yd, tryCastBinary as $d, tryDetermineMimetypeFromBinary as Jd, tryDetermineMimetypeFromURL as qd, tryFindObject as ec, tryGetGuid as tc, unregisterHotReloadType as oc, unwatchWrite as rc, useForAutoFit as nc, validate as ic, watchWrite as ac } from "./needle-engine.bundle-_--DT-Vr.js";
3
3
  import { NEEDLE_progressive as lc } from "./gltf-progressive-eiJCrjLb.js";
4
4
  import { THREE as R } from "./three-VvRoMeIN.js";
5
5
  const t = {
@@ -1 +1 @@
1
- import{GameObject as s,onClear as o,onDestroy as r,onInitialized as n,onAfterRender as i,onBeforeRender as l,onUpdate as d,onStart as c,TypeStore as m,loadAsset as p,NeedleXRSession as g,Context as u,VERSION as S,Component as y,Components as E}from"./needle-engine.bundle-B4j7AgFb.min.js";import{$physicsKey as R,ActionBuilder as h,ActionCollection as v,ActionModel as f,Addressables as P,AlignmentConstraint as A,AmbientMode as T,Animation as b,AnimationCurve as M,AnimationExtension as I,AnimationTrackHandler as D,AnimationUtils as O,Animator as x,AnimatorConditionMode as k,AnimatorController as L,AnimatorControllerParameterType as B,AnimatorStateInfo as F,Antialiasing as N,Application as w,AssetDatabase as U,AssetReference as W,Attractor as G,AudioExtension as H,AudioListener as X,AudioSource as z,AudioTrackHandler as V,Avatar as _,AvatarBlink_Simple as j,AvatarEyeLook_Rotation as K,AvatarLoader as Q,AvatarMarker as Z,AvatarModel as Y,Avatar_Brain_LookAt as J,Avatar_MouthShapes as $,Avatar_MustacheShake as q,Avatar_POI as ee,Axes as ae,AxesHelper as se,BUILD_TIME as te,BaseUIComponent as oe,BasicIKConstraint as re,BehaviorExtension as ne,BehaviorModel as ie,Component$1 as le,BlobStorage as de,BloomEffect as ce,BoxCollider as me,BoxGizmo as pe,BoxHelperComponent as ge,Button as ue,ButtonsFactory as Se,CallDirection as Ce,CallInfo as ye,Camera as Ee,CameraTargetReachedEvent as Re,Canvas as he,CanvasGroup as ve,CapsuleCollider as fe,ChangeMaterialOnClick as Pe,ChangeTransformOnClick as Ae,CharacterController as Te,CharacterControllerInput as be,ChromaticAberration as Me,CircularBuffer as Ie,ClearFlags as De,ClickThrough as Oe,ClipExtrapolation as xe,Collider as ke,Collision as Le,CollisionDetectionMode as Be,ColorAdjustments as Fe,ColorBySpeedModule as Ne,ColorOverLifetimeModule as we,Component$1 as Ue,ComponentLifecycleEvents as We,ConnectionEvents as Ge,ContactPoint as He,ContactShadows as Xe,ContextArgs as ze,ContextEvent as Ve,ContextRegistry as _e,ControlTrackHandler as je,CursorFollow as Ke,CustomBranding as Qe,CustomShader as Ze,DefaultReflectionMode as Ye,Deletable as Je,DeleteBox as $e,DepthOfField as qe,DeviceFlag as ea,DeviceUtilities as aa,DocumentExtension as sa,DragControls as ta,DragMode as oa,DropListener as ra,Duplicatable as na,EffectWrapper as ia,EmissionModule as la,EmphasizeOnClick as da,EngineLoadingView as ca,EnvironmentScene as ma,EventList as pa,EventListEvent as ga,EventSystem as ua,EventTrigger as Sa,FieldWithDefault as Ca,FileReference as ya,FileReferenceSerializer as Ea,FileSpawnModel as Ra,File_Event as ha,FixedJoint as va,Fog as fa,FrameEvent as Pa,GENERATOR as Aa,Gizmos as Ta,GltfExport as ba,GltfExportBox as Ma,Gradient as Ia,Graphic as Da,GraphicRaycaster as Oa,Graphics as xa,GridHelper as ka,GridLayoutGroup as La,GroundProjectedEnv as Ba,GroupActionModel as Fa,HideFlags as Na,HideOnStart as wa,HingeJoint as Ua,HorizontalLayoutGroup as Wa,HostData as Ga,HoverAnimation as Ha,Image as Xa,ImageReference as za,ImageReferenceSerializer as Va,InheritVelocityModule as _a,Input as ja,InputEventQueue as Ka,InputEvents as Qa,InputField as Za,InstanceHandle as Ya,InstancingHandler as Ja,InstancingUtil as $a,InstantiateEvent as qa,InstantiateIdProvider as es,InstantiateOptions as as,Interactable as ss,InternalScreenshotUtils as ts,JoinedRoomResponse as os,KeyEventArgs as rs,Keyframe as ns,LODGroup as is,LODModel as ls,LeftRoomResponse as ds,Light as cs,LightData as ms,LimitVelocityOverLifetimeModule as ps,LoadingElementOptions as gs,LogStats as us,LogType as Ss,LookAt as Cs,LookAtConstraint as ys,MainModule as Es,MarkerTrackHandler as Rs,MarkerType as hs,MaskableGraphic as vs,MaterialX as fs,Mathf as Ps,MeshCollider as As,MeshRenderer as Ts,MinMaxCurve as bs,MinMaxGradient as Ms,NEEDLE_ENGINE_FEATURE_FLAGS as Is,MODULES as Ds,NEKeyboardEvent as Os,NEPointerEvent as xs,NeedleButtonElement as ks,ContextRegistry as Ls,NeedleEngineModelLoader as Bs,NeedleEngineWebComponent as Fs,NeedleMenu as Ns,NeedlePatchesKey as ws,USDZExporter as Us,NeedleXRController as Ws,NeedleXRSync as Gs,NeedleXRUtils as Hs,NestedGltf as Xs,NetworkConnection as zs,NetworkedStreamEvents as Vs,NetworkedStreams as _s,Networking as js,NewInstanceModel as Ks,NoiseModule as Qs,ObjectRaycaster as Zs,ObjectUtils as Ys,OffsetConstraint as Js,OneEuroFilter as $s,OneEuroFilterXYZ as qs,OpenURL as et,OrbitControls as at,Outline as st,OwnershipEvent as tt,OwnershipModel as ot,PUBLIC_KEY as rt,Padding as nt,ParticleBurst as it,ParticleSubEmitter as lt,ParticleSystem as dt,ParticleSystemBaseBehaviour as ct,ParticleSystemRenderer as mt,ParticleSystemShapeType as pt,PeerHandle as gt,PeerNetworking as ut,Physics as St,PhysicsExtension as Ct,PhysicsMaterialCombine as yt,PixelationEffect as Et,PlayAnimationOnClick as Rt,PlayAudioOnClick as ht,PlayableDirector as vt,PlayerColor as ft,PlayerState as Pt,PlayerStateEvent as At,PlayerSync as Tt,PlayerView as bt,PlayerViewManager as Mt,PointerEventData as It,PointerType as Dt,PostProcessingEffect as Ot,PostProcessingEffectOrder as xt,PostProcessingHandler as kt,Volume as Lt,PreliminaryAction as Bt,PreliminaryTrigger as Ft,PreviewHelper as Nt,PrimitiveType as wt,Progress as Ut,PromiseAllWithErrors as Wt,PromiseErrorResult as Gt,RGBAColor as Ht,RapierPhysics as Xt,RawImage as zt,RaycastOptions as Vt,Rect as _t,RectTransform as jt,ReflectionProbe as Kt,RegisteredAnimationInfo as Qt,RemoteSkybox as Zt,RenderTexture as Yt,RenderTextureSerializer as Jt,Renderer as $t,RendererData as qt,RendererLightmap as eo,Rigidbody as ao,RigidbodyConstraints as so,RoomEvents as to,RotationBySpeedModule as oo,RotationOverLifetimeModule as ro,SceneLightSettings as no,SceneSwitcher as io,ScreenCapture as lo,ScreenSpaceAmbientOcclusion as co,ScreenSpaceAmbientOcclusionN8 as mo,ScrollFollow as po,SeeThrough as go,SendQueue as uo,SerializationContext as So,SetActiveOnClick as Co,ShadowCatcher as yo,ShapeModule as Eo,ShapeOverlapResult as Ro,SharpeningEffect as ho,SignalAsset as vo,SignalReceiver as fo,SignalReceiverEvent as Po,SignalTrackHandler as Ao,Size as To,SizeBySpeedModule as bo,SizeOverLifetimeModule as Mo,SkinnedMeshRenderer as Io,SmoothFollow as Do,SpatialGrabRaycaster as Oo,SpatialHtml as xo,SpatialTrigger as ko,SpatialTriggerReceiver as Lo,SpectatorCamera as Bo,SphereCollider as Fo,SphereIntersection as No,SplineContainer as wo,SplineData as Uo,SplineUtils as Wo,SplineWalker as Go,Sprite as Ho,SpriteData as Xo,SpriteRenderer as zo,SpriteSheet as Vo,StateMachineBehaviour as _o,StreamEndedEvent as jo,StreamReceivedEvent as Ko,SubEmitterSystem as Qo,SyncedCamera as Zo,SyncedRoom as Yo,SyncedTransform as Jo,TapGestureTrigger as $o,TeleportTarget as qo,TestRunner as er,TestSceneUtils as ar,TestSimulateUserData as sr,Text as tr,TextBuilder as or,TextExtension as rr,TextureSheetAnimationModule as nr,TiltShiftEffect as ir,Time as lr,ToneMappingEffect as dr,TrackHandler as cr,TrackType as mr,TrailModule as pr,TransformData as gr,TransformGizmo as ur,TriggerBuilder as Sr,TriggerModel as Cr,UIRaycastUtils as yr,UIRootComponent as Er,USDDocument as Rr,USDObject as hr,USDWriter as vr,USDZExporter$1 as fr,USDZText as Pr,USDZUIExtension as Ar,UriSerializer as Tr,UsageMarker as br,UserJoinedOrLeftRoomModel as Mr,VariantAction as Ir,VelocityOverLifetimeModule as Dr,VerticalLayoutGroup as Or,VideoPlayer as xr,ViewBox as kr,ViewDevice as Lr,Vignette as Br,VisibilityAction as Fr,Voip as Nr,Volume as wr,VolumeParameter as Ur,VolumeProfile as Wr,WaitForFrames as Gr,WaitForPromise as Hr,WaitForSeconds as Xr,Watch as zr,WebARCameraBackground as Vr,WebARSessionRoot as _r,WebXR as jr,WebXRButtonFactory as Kr,WebXRImageTracking as Qr,WebXRImageTrackingModel as Zr,WebXRPlaneTracking as Yr,WebXRTrackedImage as Jr,XRControllerFollow as $r,XRControllerModel as qr,XRControllerMovement as en,XRFlag as an,XRRig as sn,XRState as tn,XRStateFlag as on,__Ignore as rn,__internalNotifyObjectDestroyed as nn,activeInHierarchyFieldName as ln,addAttributeChangeCallback as dn,addComponent as cn,addCustomExtensionPlugin as mn,addNewComponent as pn,addPatch as gn,apply as un,applyHMRChanges as Sn,applyPrototypeExtensions as Cn,beginListenDestroy as yn,beginListenInstantiate as En,binaryIdentifierCasts as Rn,build_scene_functions as hn,builtinComponentKeyName as vn,calculateProgress01 as fn,clearMessages as Pn,clearMessages as An,colorSerializer as Tn,compareAssociation as bn,componentSerializer as Mn,copyTexture as In,createMotion as Dn,debugNet as On,debugOwner as xn,decompressGpuTexture as kn,deepClone as Ln,delay as Bn,delayForFrames as Fn,deserializeObject as Nn,destroy as wn,destroyComponentInstance as Un,determineMimeTypeFromExtension as Wn,disposeObjectResources as Gn,disposeStream as Hn,editorGuidKeyName as Xn,enableSpatialConsole as zn,euler as Vn,eventListSerializer as _n,exportAsGLTF as jn,findByGuid as Kn,findObjectOfType as Qn,findObjectsOfType as Zn,findResourceUsers as Yn,fitCamera as Jn,fitObjectIntoVolume as $n,foreachComponent as qn,foreachComponentEnumerator as ei,forward as ai,generateQRCode as si,generateSeed as ti,getBoundingBox as oi,getCameraController as ri,getComponent as ni,getComponentInChildren as ii,getComponentInParent as li,getComponents as di,getComponentsInChildren as ci,getComponentsInParent as mi,getFormattedDate as pi,getIconElement as gi,getIconTexture as ui,getLoader as Si,getOrAddComponent as Ci,getParam as yi,getParentHierarchyPath as Ei,getPath as Ri,getPeerOptions as hi,getPeerjsInstance as vi,getResourceUserCount as fi,getTempColor as Pi,getTempQuaternion as Ai,getTempVector as Ti,getUrlParams as bi,getVisibleInCustomShadowRendering as Mi,getWorldDirection as Ii,getWorldEuler as Di,getWorldPosition as Oi,getWorldQuaternion as xi,getWorldRotation as ki,getWorldScale as Li,hasCommercialLicense as Bi,hasIndieLicense as Fi,hasPointerEventComponent as Ni,hasProLicense as wi,hideDebugConsole as Ui,imageToCanvas as Wi,instantiate as Gi,invokeLoadedImportPluginHooks as Hi,invokeXRSessionEnd as Xi,invokeXRSessionStart as zi,isActiveInHierarchy as Vi,isActiveSelf as _i,isAndroidDevice as ji,isAnimationAction as Ki,isComponent as Qi,isDebugMode as Zi,isDesktop as Yi,isDestroyed as Ji,isDevEnvironment as $i,isDisposed as qi,isExporting as el,isGLTFModel as al,isHostedOnGlitch as sl,isHotReloadEnabled as tl,isHotReloading as ol,isIPad as rl,isIconElement as nl,isLocalNetwork as il,isMacOS as ll,isMobileDevice as dl,isMozillaXR as cl,isQuest as ml,isResourceTrackingEnabled as pl,isSafari as gl,isUsingInstancing as ul,isiOS as Sl,isiPad as Cl,loadPMREM as yl,loadSync as El,logHierarchy as Rl,lookAtInverse as hl,lookAtObject as vl,lookAtScreenPoint as fl,makeId as Pl,makeIdFromRandomWords as Al,makeNameSafe as Tl,markAsInstancedRendered as bl,microphonePermissionsGranted as Ml,nameof as Il,nameofFactory as Dl,objectSerializer as Ol,offXRSessionEnd as xl,offXRSessionStart as kl,onXRSessionEnd as Ll,onXRSessionStart as Bl,parseSync as Fl,placeOnSurface as Nl,postprocessFBXMaterials as wl,prefix as Ul,pushState as Wl,randomNumber as Gl,registerBinaryType as Hl,registerComponent as Xl,registerComponentExtension as zl,registerCustomEffectType as Vl,registerExportExtensions as _l,registerExtensions as jl,registerHotReloadType as Kl,registerLoader as Ql,registerPrefabProvider as Zl,registerPrototypeExtensions as Yl,registerType as Jl,relativePathPrefix as $l,removeAttributeChangeCallback as ql,removeComponent as ed,removeCustomImportExtensionType as ad,removePatch as sd,resolveUrl as td,sanitizeString as od,saveImage as rd,screenshot as nd,screenshot2 as id,sendDestroyed as ld,serializable as dd,serializeObject as cd,serializeable as md,setActive as pd,setAllowBalloonMessages as gd,setAllowOverlayMessages as ud,setAutoFitEnabled as Sd,setCameraController as Cd,setDestroyed as yd,setDevEnvironment as Ed,setDisposable as Rd,setDontDestroy as hd,setOrAddParamsToUrl as vd,setParam as fd,setParamWithoutReload as Pd,setPeerOptions as Ad,setResourceTrackingEnabled as Td,setState as bd,setVisibleInCustomShadowRendering as Md,setWorldEuler as Id,setWorldPosition as Dd,setWorldPositionXYZ as Od,setWorldQuaternion as xd,setWorldQuaternionXYZW as kd,setWorldRotation as Ld,setWorldRotationXYZ as Bd,setWorldScale as Fd,showBalloonError as Nd,showBalloonMessage as wd,showBalloonWarning as Ud,showDebugConsole as Wd,slerp as Gd,syncDestroy as Hd,syncField as Xd,syncInstantiate as zd,textureToCanvas as Vd,toSourceId as _d,tryCastBinary as jd,tryDetermineMimetypeFromBinary as Kd,tryDetermineMimetypeFromURL as Qd,tryFindObject as Zd,tryGetGuid as Yd,unregisterHotReloadType as Jd,unwatchWrite as $d,useForAutoFit as qd,validate as ec,watchWrite as ac}from"./needle-engine.bundle-B4j7AgFb.min.js";import{NEEDLE_progressive as sc}from"./gltf-progressive-DHLDFNvQ.min.js";import{THREE as tc}from"./three-I__hSXzr.min.js";const a={VERSION:S,Context:u,NeedleXRSession:g,assets:{loadFromURL:p},types:m,onStart:c,onUpdate:d,onBeforeRender:l,onAfterRender:i,onInitializedContext:n,onDestroyContext:r,onClearContext:o};globalThis.Needle?.VERSION!==void 0&&console.warn(`Needle Engine is already imported: ${globalThis.Needle.VERSION}`);function C(e){for(const t in e)a[t]=e[t]}C(y),C(E);for(const e of Object.getOwnPropertyNames(s))switch(e){case"prototype":case"constructor":case"length":case"name":continue;default:a[e]=s[e];break}if(!globalThis.Needle)globalThis.Needle=a;else for(const e in a)globalThis.Needle[e]=a[e];globalThis.THREE?console.warn("Three.js is already imported"):globalThis.THREE=tc;export{R as $physicsKey,h as ActionBuilder,v as ActionCollection,f as ActionModel,P as Addressables,A as AlignmentConstraint,T as AmbientMode,b as Animation,M as AnimationCurve,I as AnimationExtension,D as AnimationTrackHandler,O as AnimationUtils,x as Animator,k as AnimatorConditionMode,L as AnimatorController,B as AnimatorControllerParameterType,F as AnimatorStateInfo,N as Antialiasing,w as Application,U as AssetDatabase,W as AssetReference,G as Attractor,H as AudioExtension,X as AudioListener,z as AudioSource,V as AudioTrackHandler,_ as Avatar,j as AvatarBlink_Simple,K as AvatarEyeLook_Rotation,Q as AvatarLoader,Z as AvatarMarker,Y as AvatarModel,J as Avatar_Brain_LookAt,$ as Avatar_MouthShapes,q as Avatar_MustacheShake,ee as Avatar_POI,ae as Axes,se as AxesHelper,te as BUILD_TIME,oe as BaseUIComponent,re as BasicIKConstraint,ne as BehaviorExtension,ie as BehaviorModel,le as Behaviour,de as BlobStorage,ce as BloomEffect,me as BoxCollider,pe as BoxGizmo,ge as BoxHelperComponent,ue as Button,Se as ButtonsFactory,Ce as CallDirection,ye as CallInfo,Ee as Camera,Re as CameraTargetReachedEvent,he as Canvas,ve as CanvasGroup,fe as CapsuleCollider,Pe as ChangeMaterialOnClick,Ae as ChangeTransformOnClick,Te as CharacterController,be as CharacterControllerInput,Me as ChromaticAberration,Ie as CircularBuffer,De as ClearFlags,Oe as ClickThrough,xe as ClipExtrapolation,ke as Collider,Le as Collision,Be as CollisionDetectionMode,Fe as ColorAdjustments,Ne as ColorBySpeedModule,we as ColorOverLifetimeModule,Ue as Component,We as ComponentLifecycleEvents,Ge as ConnectionEvents,He as ContactPoint,Xe as ContactShadows,u as Context,ze as ContextArgs,Ve as ContextEvent,_e as ContextRegistry,je as ControlTrackHandler,Ke as CursorFollow,Qe as CustomBranding,Ze as CustomShader,Ye as DefaultReflectionMode,Je as Deletable,$e as DeleteBox,qe as DepthOfField,ea as DeviceFlag,aa as DeviceUtilities,sa as DocumentExtension,ta as DragControls,oa as DragMode,ra as DropListener,na as Duplicatable,ia as EffectWrapper,la as EmissionModule,da as EmphasizeOnClick,ca as EngineLoadingView,ma as EnvironmentScene,pa as EventList,ga as EventListEvent,ua as EventSystem,Sa as EventTrigger,Ca as FieldWithDefault,ya as FileReference,Ea as FileReferenceSerializer,Ra as FileSpawnModel,ha as File_Event,va as FixedJoint,fa as Fog,Pa as FrameEvent,Aa as GENERATOR,s as GameObject,Ta as Gizmos,ba as GltfExport,Ma as GltfExportBox,Ia as Gradient,Da as Graphic,Oa as GraphicRaycaster,xa as Graphics,ka as GridHelper,La as GridLayoutGroup,Ba as GroundProjectedEnv,Fa as GroupActionModel,Na as HideFlags,wa as HideOnStart,Ua as HingeJoint,Wa as HorizontalLayoutGroup,Ga as HostData,Ha as HoverAnimation,Xa as Image,za as ImageReference,Va as ImageReferenceSerializer,_a as InheritVelocityModule,ja as Input,Ka as InputEventQueue,Qa as InputEvents,Za as InputField,Ya as InstanceHandle,Ja as InstancingHandler,$a as InstancingUtil,qa as InstantiateEvent,es as InstantiateIdProvider,as as InstantiateOptions,ss as Interactable,ts as InternalScreenshotUtils,os as JoinedRoomResponse,rs as KeyEventArgs,ns as Keyframe,is as LODGroup,ls as LODModel,ds as LeftRoomResponse,cs as Light,ms as LightData,ps as LimitVelocityOverLifetimeModule,gs as LoadingElementOptions,us as LogStats,Ss as LogType,Cs as LookAt,ys as LookAtConstraint,Es as MainModule,Rs as MarkerTrackHandler,hs as MarkerType,vs as MaskableGraphic,fs as MaterialX,Ps as Mathf,As as MeshCollider,Ts as MeshRenderer,bs as MinMaxCurve,Ms as MinMaxGradient,Is as NEEDLE_ENGINE_FEATURE_FLAGS,Ds as NEEDLE_ENGINE_MODULES,sc as NEEDLE_progressive,Os as NEKeyboardEvent,xs as NEPointerEvent,ks as NeedleButtonElement,Ls as NeedleEngine,Bs as NeedleEngineModelLoader,Fs as NeedleEngineWebComponent,Ns as NeedleMenu,ws as NeedlePatchesKey,Us as NeedleUSDZExporter,Ws as NeedleXRController,g as NeedleXRSession,Gs as NeedleXRSync,Hs as NeedleXRUtils,Xs as NestedGltf,zs as NetworkConnection,Vs as NetworkedStreamEvents,_s as NetworkedStreams,js as Networking,Ks as NewInstanceModel,Qs as NoiseModule,Zs as ObjectRaycaster,Ys as ObjectUtils,Js as OffsetConstraint,$s as OneEuroFilter,qs as OneEuroFilterXYZ,et as OpenURL,at as OrbitControls,st as Outline,tt as OwnershipEvent,ot as OwnershipModel,rt as PUBLIC_KEY,nt as Padding,it as ParticleBurst,lt as ParticleSubEmitter,dt as ParticleSystem,ct as ParticleSystemBaseBehaviour,mt as ParticleSystemRenderer,pt as ParticleSystemShapeType,gt as PeerHandle,ut as PeerNetworking,St as Physics,Ct as PhysicsExtension,yt as PhysicsMaterialCombine,Et as PixelationEffect,Rt as PlayAnimationOnClick,ht as PlayAudioOnClick,vt as PlayableDirector,ft as PlayerColor,Pt as PlayerState,At as PlayerStateEvent,Tt as PlayerSync,bt as PlayerView,Mt as PlayerViewManager,It as PointerEventData,Dt as PointerType,Ot as PostProcessingEffect,xt as PostProcessingEffectOrder,kt as PostProcessingHandler,Lt as PostProcessingManager,Bt as PreliminaryAction,Ft as PreliminaryTrigger,Nt as PreviewHelper,wt as PrimitiveType,Ut as Progress,Wt as PromiseAllWithErrors,Gt as PromiseErrorResult,Ht as RGBAColor,Xt as RapierPhysics,zt as RawImage,Vt as RaycastOptions,_t as Rect,jt as RectTransform,Kt as ReflectionProbe,Qt as RegisteredAnimationInfo,Zt as RemoteSkybox,Yt as RenderTexture,Jt as RenderTextureSerializer,$t as Renderer,qt as RendererData,eo as RendererLightmap,ao as Rigidbody,so as RigidbodyConstraints,to as RoomEvents,oo as RotationBySpeedModule,ro as RotationOverLifetimeModule,no as SceneLightSettings,io as SceneSwitcher,lo as ScreenCapture,co as ScreenSpaceAmbientOcclusion,mo as ScreenSpaceAmbientOcclusionN8,po as ScrollFollow,go as SeeThrough,uo as SendQueue,So as SerializationContext,Co as SetActiveOnClick,yo as ShadowCatcher,Eo as ShapeModule,Ro as ShapeOverlapResult,ho as SharpeningEffect,vo as SignalAsset,fo as SignalReceiver,Po as SignalReceiverEvent,Ao as SignalTrackHandler,To as Size,bo as SizeBySpeedModule,Mo as SizeOverLifetimeModule,Io as SkinnedMeshRenderer,Do as SmoothFollow,Oo as SpatialGrabRaycaster,xo as SpatialHtml,ko as SpatialTrigger,Lo as SpatialTriggerReceiver,Bo as SpectatorCamera,Fo as SphereCollider,No as SphereIntersection,wo as SplineContainer,Uo as SplineData,Wo as SplineUtils,Go as SplineWalker,Ho as Sprite,Xo as SpriteData,zo as SpriteRenderer,Vo as SpriteSheet,_o as StateMachineBehaviour,jo as StreamEndedEvent,Ko as StreamReceivedEvent,Qo as SubEmitterSystem,Zo as SyncedCamera,Yo as SyncedRoom,Jo as SyncedTransform,$o as TapGestureTrigger,qo as TeleportTarget,er as TestRunner,ar as TestSceneUtils,sr as TestSimulateUserData,tr as Text,or as TextBuilder,rr as TextExtension,nr as TextureSheetAnimationModule,ir as TiltShiftEffect,lr as Time,dr as ToneMappingEffect,cr as TrackHandler,mr as TrackType,pr as TrailModule,gr as TransformData,ur as TransformGizmo,Sr as TriggerBuilder,Cr as TriggerModel,m as TypeStore,yr as UIRaycastUtils,Er as UIRootComponent,Rr as USDDocument,hr as USDObject,vr as USDWriter,fr as USDZExporter,Pr as USDZText,Ar as USDZUIExtension,Tr as UriSerializer,br as UsageMarker,Mr as UserJoinedOrLeftRoomModel,S as VERSION,Ir as VariantAction,Dr as VelocityOverLifetimeModule,Or as VerticalLayoutGroup,xr as VideoPlayer,kr as ViewBox,Lr as ViewDevice,Br as Vignette,Fr as VisibilityAction,Nr as Voip,wr as Volume,Ur as VolumeParameter,Wr as VolumeProfile,Gr as WaitForFrames,Hr as WaitForPromise,Xr as WaitForSeconds,zr as Watch,Vr as WebARCameraBackground,_r as WebARSessionRoot,jr as WebXR,Kr as WebXRButtonFactory,Qr as WebXRImageTracking,Zr as WebXRImageTrackingModel,Yr as WebXRPlaneTracking,Jr as WebXRTrackedImage,$r as XRControllerFollow,qr as XRControllerModel,en as XRControllerMovement,an as XRFlag,sn as XRRig,tn as XRState,on as XRStateFlag,rn as __Ignore,nn as __internalNotifyObjectDestroyed,ln as activeInHierarchyFieldName,dn as addAttributeChangeCallback,cn as addComponent,mn as addCustomExtensionPlugin,pn as addNewComponent,gn as addPatch,un as apply,Sn as applyHMRChanges,Cn as applyPrototypeExtensions,yn as beginListenDestroy,En as beginListenInstantiate,Rn as binaryIdentifierCasts,hn as build_scene_functions,vn as builtinComponentKeyName,fn as calculateProgress01,Pn as clearBalloonMessages,An as clearOverlayMessages,Tn as colorSerializer,bn as compareAssociation,Mn as componentSerializer,In as copyTexture,Dn as createMotion,On as debugNet,xn as debugOwner,kn as decompressGpuTexture,Ln as deepClone,Bn as delay,Fn as delayForFrames,Nn as deserializeObject,wn as destroy,Un as destroyComponentInstance,Wn as determineMimeTypeFromExtension,Gn as disposeObjectResources,Hn as disposeStream,Xn as editorGuidKeyName,zn as enableSpatialConsole,Vn as euler,_n as eventListSerializer,jn as exportAsGLTF,Kn as findByGuid,Qn as findObjectOfType,Zn as findObjectsOfType,Yn as findResourceUsers,Jn as fitCamera,$n as fitObjectIntoVolume,qn as foreachComponent,ei as foreachComponentEnumerator,ai as forward,si as generateQRCode,ti as generateSeed,oi as getBoundingBox,ri as getCameraController,ni as getComponent,ii as getComponentInChildren,li as getComponentInParent,di as getComponents,ci as getComponentsInChildren,mi as getComponentsInParent,pi as getFormattedDate,gi as getIconElement,ui as getIconTexture,Si as getLoader,Ci as getOrAddComponent,yi as getParam,Ei as getParentHierarchyPath,Ri as getPath,hi as getPeerOptions,vi as getPeerjsInstance,fi as getResourceUserCount,Pi as getTempColor,Ai as getTempQuaternion,Ti as getTempVector,bi as getUrlParams,Mi as getVisibleInCustomShadowRendering,Ii as getWorldDirection,Di as getWorldEuler,Oi as getWorldPosition,xi as getWorldQuaternion,ki as getWorldRotation,Li as getWorldScale,Bi as hasCommercialLicense,Fi as hasIndieLicense,Ni as hasPointerEventComponent,wi as hasProLicense,Ui as hideDebugConsole,Wi as imageToCanvas,Gi as instantiate,Hi as invokeLoadedImportPluginHooks,Xi as invokeXRSessionEnd,zi as invokeXRSessionStart,Vi as isActiveInHierarchy,_i as isActiveSelf,ji as isAndroidDevice,Ki as isAnimationAction,Qi as isComponent,Zi as isDebugMode,Yi as isDesktop,Ji as isDestroyed,$i as isDevEnvironment,qi as isDisposed,el as isExporting,al as isGLTFModel,sl as isHostedOnGlitch,tl as isHotReloadEnabled,ol as isHotReloading,rl as isIPad,nl as isIconElement,il as isLocalNetwork,ll as isMacOS,dl as isMobileDevice,cl as isMozillaXR,ml as isQuest,pl as isResourceTrackingEnabled,gl as isSafari,ul as isUsingInstancing,Sl as isiOS,Cl as isiPad,p as loadAsset,yl as loadPMREM,El as loadSync,Rl as logHierarchy,hl as lookAtInverse,vl as lookAtObject,fl as lookAtScreenPoint,Pl as makeId,Al as makeIdFromRandomWords,Tl as makeNameSafeForUSD,bl as markAsInstancedRendered,Ml as microphonePermissionsGranted,Il as nameof,Dl as nameofFactory,Ol as objectSerializer,xl as offXRSessionEnd,kl as offXRSessionStart,i as onAfterRender,l as onBeforeRender,o as onClear,r as onDestroy,n as onInitialized,c as onStart,d as onUpdate,Ll as onXRSessionEnd,Bl as onXRSessionStart,Fl as parseSync,Nl as placeOnSurface,wl as postprocessFBXMaterials,Ul as prefix,Wl as pushState,Gl as randomNumber,Hl as registerBinaryType,Xl as registerComponent,zl as registerComponentExtension,Vl as registerCustomEffectType,_l as registerExportExtensions,jl as registerExtensions,Kl as registerHotReloadType,Ql as registerLoader,Zl as registerPrefabProvider,Yl as registerPrototypeExtensions,Jl as registerType,$l as relativePathPrefix,ql as removeAttributeChangeCallback,ed as removeComponent,ad as removeCustomImportExtensionType,sd as removePatch,td as resolveUrl,od as sanitizeString,rd as saveImage,nd as screenshot,id as screenshot2,ld as sendDestroyed,dd as serializable,cd as serializeObject,md as serializeable,pd as setActive,gd as setAllowBalloonMessages,ud as setAllowOverlayMessages,Sd as setAutoFitEnabled,Cd as setCameraController,yd as setDestroyed,Ed as setDevEnvironment,Rd as setDisposable,hd as setDontDestroy,vd as setOrAddParamsToUrl,fd as setParam,Pd as setParamWithoutReload,Ad as setPeerOptions,Td as setResourceTrackingEnabled,bd as setState,Md as setVisibleInCustomShadowRendering,Id as setWorldEuler,Dd as setWorldPosition,Od as setWorldPositionXYZ,xd as setWorldQuaternion,kd as setWorldQuaternionXYZW,Ld as setWorldRotation,Bd as setWorldRotationXYZ,Fd as setWorldScale,Nd as showBalloonError,wd as showBalloonMessage,Ud as showBalloonWarning,Wd as showDebugConsole,Gd as slerp,Hd as syncDestroy,Xd as syncField,zd as syncInstantiate,Vd as textureToCanvas,_d as toSourceId,jd as tryCastBinary,Kd as tryDetermineMimetypeFromBinary,Qd as tryDetermineMimetypeFromURL,Zd as tryFindObject,Yd as tryGetGuid,Jd as unregisterHotReloadType,$d as unwatchWrite,qd as useForAutoFit,ec as validate,ac as watchWrite};
1
+ import{GameObject as s,onClear as o,onDestroy as r,onInitialized as n,onAfterRender as i,onBeforeRender as l,onUpdate as d,onStart as c,TypeStore as m,loadAsset as p,NeedleXRSession as g,Context as u,VERSION as S,Component as y,Components as E}from"./needle-engine.bundle-zcyz7kwz.min.js";import{$physicsKey as R,ActionBuilder as h,ActionCollection as v,ActionModel as f,Addressables as P,AlignmentConstraint as A,AmbientMode as T,Animation as b,AnimationCurve as M,AnimationExtension as I,AnimationTrackHandler as D,AnimationUtils as O,Animator as x,AnimatorConditionMode as k,AnimatorController as L,AnimatorControllerParameterType as B,AnimatorStateInfo as F,Antialiasing as N,Application as w,AssetDatabase as U,AssetReference as W,Attractor as G,AudioExtension as H,AudioListener as X,AudioSource as z,AudioTrackHandler as V,Avatar as _,AvatarBlink_Simple as j,AvatarEyeLook_Rotation as K,AvatarLoader as Q,AvatarMarker as Z,AvatarModel as Y,Avatar_Brain_LookAt as J,Avatar_MouthShapes as $,Avatar_MustacheShake as q,Avatar_POI as ee,Axes as ae,AxesHelper as se,BUILD_TIME as te,BaseUIComponent as oe,BasicIKConstraint as re,BehaviorExtension as ne,BehaviorModel as ie,Component$1 as le,BlobStorage as de,BloomEffect as ce,BoxCollider as me,BoxGizmo as pe,BoxHelperComponent as ge,Button as ue,ButtonsFactory as Se,CallDirection as Ce,CallInfo as ye,Camera as Ee,CameraTargetReachedEvent as Re,Canvas as he,CanvasGroup as ve,CapsuleCollider as fe,ChangeMaterialOnClick as Pe,ChangeTransformOnClick as Ae,CharacterController as Te,CharacterControllerInput as be,ChromaticAberration as Me,CircularBuffer as Ie,ClearFlags as De,ClickThrough as Oe,ClipExtrapolation as xe,Collider as ke,Collision as Le,CollisionDetectionMode as Be,ColorAdjustments as Fe,ColorBySpeedModule as Ne,ColorOverLifetimeModule as we,Component$1 as Ue,ComponentLifecycleEvents as We,ConnectionEvents as Ge,ContactPoint as He,ContactShadows as Xe,ContextArgs as ze,ContextEvent as Ve,ContextRegistry as _e,ControlTrackHandler as je,CursorFollow as Ke,CustomBranding as Qe,CustomShader as Ze,DefaultReflectionMode as Ye,Deletable as Je,DeleteBox as $e,DepthOfField as qe,DeviceFlag as ea,DeviceUtilities as aa,DocumentExtension as sa,DragControls as ta,DragMode as oa,DropListener as ra,Duplicatable as na,EffectWrapper as ia,EmissionModule as la,EmphasizeOnClick as da,EngineLoadingView as ca,EnvironmentScene as ma,EventList as pa,EventListEvent as ga,EventSystem as ua,EventTrigger as Sa,FieldWithDefault as Ca,FileReference as ya,FileReferenceSerializer as Ea,FileSpawnModel as Ra,File_Event as ha,FixedJoint as va,Fog as fa,FrameEvent as Pa,GENERATOR as Aa,Gizmos as Ta,GltfExport as ba,GltfExportBox as Ma,Gradient as Ia,Graphic as Da,GraphicRaycaster as Oa,Graphics as xa,GridHelper as ka,GridLayoutGroup as La,GroundProjectedEnv as Ba,GroupActionModel as Fa,HideFlags as Na,HideOnStart as wa,HingeJoint as Ua,HorizontalLayoutGroup as Wa,HostData as Ga,HoverAnimation as Ha,Image as Xa,ImageReference as za,ImageReferenceSerializer as Va,InheritVelocityModule as _a,Input as ja,InputEventQueue as Ka,InputEvents as Qa,InputField as Za,InstanceHandle as Ya,InstancingHandler as Ja,InstancingUtil as $a,InstantiateEvent as qa,InstantiateIdProvider as es,InstantiateOptions as as,Interactable as ss,InternalScreenshotUtils as ts,JoinedRoomResponse as os,KeyEventArgs as rs,Keyframe as ns,LODGroup as is,LODModel as ls,LeftRoomResponse as ds,Light as cs,LightData as ms,LimitVelocityOverLifetimeModule as ps,LoadingElementOptions as gs,LogStats as us,LogType as Ss,LookAt as Cs,LookAtConstraint as ys,MainModule as Es,MarkerTrackHandler as Rs,MarkerType as hs,MaskableGraphic as vs,MaterialX as fs,Mathf as Ps,MeshCollider as As,MeshRenderer as Ts,MinMaxCurve as bs,MinMaxGradient as Ms,NEEDLE_ENGINE_FEATURE_FLAGS as Is,MODULES as Ds,NEKeyboardEvent as Os,NEPointerEvent as xs,NeedleButtonElement as ks,ContextRegistry as Ls,NeedleEngineModelLoader as Bs,NeedleEngineWebComponent as Fs,NeedleMenu as Ns,NeedlePatchesKey as ws,USDZExporter as Us,NeedleXRController as Ws,NeedleXRSync as Gs,NeedleXRUtils as Hs,NestedGltf as Xs,NetworkConnection as zs,NetworkedStreamEvents as Vs,NetworkedStreams as _s,Networking as js,NewInstanceModel as Ks,NoiseModule as Qs,ObjectRaycaster as Zs,ObjectUtils as Ys,OffsetConstraint as Js,OneEuroFilter as $s,OneEuroFilterXYZ as qs,OpenURL as et,OrbitControls as at,Outline as st,OwnershipEvent as tt,OwnershipModel as ot,PUBLIC_KEY as rt,Padding as nt,ParticleBurst as it,ParticleSubEmitter as lt,ParticleSystem as dt,ParticleSystemBaseBehaviour as ct,ParticleSystemRenderer as mt,ParticleSystemShapeType as pt,PeerHandle as gt,PeerNetworking as ut,Physics as St,PhysicsExtension as Ct,PhysicsMaterialCombine as yt,PixelationEffect as Et,PlayAnimationOnClick as Rt,PlayAudioOnClick as ht,PlayableDirector as vt,PlayerColor as ft,PlayerState as Pt,PlayerStateEvent as At,PlayerSync as Tt,PlayerView as bt,PlayerViewManager as Mt,PointerEventData as It,PointerType as Dt,PostProcessingEffect as Ot,PostProcessingEffectOrder as xt,PostProcessingHandler as kt,Volume as Lt,PreliminaryAction as Bt,PreliminaryTrigger as Ft,PreviewHelper as Nt,PrimitiveType as wt,Progress as Ut,PromiseAllWithErrors as Wt,PromiseErrorResult as Gt,RGBAColor as Ht,RapierPhysics as Xt,RawImage as zt,RaycastOptions as Vt,Rect as _t,RectTransform as jt,ReflectionProbe as Kt,RegisteredAnimationInfo as Qt,RemoteSkybox as Zt,RenderTexture as Yt,RenderTextureSerializer as Jt,Renderer as $t,RendererData as qt,RendererLightmap as eo,Rigidbody as ao,RigidbodyConstraints as so,RoomEvents as to,RotationBySpeedModule as oo,RotationOverLifetimeModule as ro,SceneLightSettings as no,SceneSwitcher as io,ScreenCapture as lo,ScreenSpaceAmbientOcclusion as co,ScreenSpaceAmbientOcclusionN8 as mo,ScrollFollow as po,SeeThrough as go,SendQueue as uo,SerializationContext as So,SetActiveOnClick as Co,ShadowCatcher as yo,ShapeModule as Eo,ShapeOverlapResult as Ro,SharpeningEffect as ho,SignalAsset as vo,SignalReceiver as fo,SignalReceiverEvent as Po,SignalTrackHandler as Ao,Size as To,SizeBySpeedModule as bo,SizeOverLifetimeModule as Mo,SkinnedMeshRenderer as Io,SmoothFollow as Do,SpatialGrabRaycaster as Oo,SpatialHtml as xo,SpatialTrigger as ko,SpatialTriggerReceiver as Lo,SpectatorCamera as Bo,SphereCollider as Fo,SphereIntersection as No,SplineContainer as wo,SplineData as Uo,SplineUtils as Wo,SplineWalker as Go,Sprite as Ho,SpriteData as Xo,SpriteRenderer as zo,SpriteSheet as Vo,StateMachineBehaviour as _o,StreamEndedEvent as jo,StreamReceivedEvent as Ko,SubEmitterSystem as Qo,SyncedCamera as Zo,SyncedRoom as Yo,SyncedTransform as Jo,TapGestureTrigger as $o,TeleportTarget as qo,TestRunner as er,TestSceneUtils as ar,TestSimulateUserData as sr,Text as tr,TextBuilder as or,TextExtension as rr,TextureSheetAnimationModule as nr,TiltShiftEffect as ir,Time as lr,ToneMappingEffect as dr,TrackHandler as cr,TrackType as mr,TrailModule as pr,TransformData as gr,TransformGizmo as ur,TriggerBuilder as Sr,TriggerModel as Cr,UIRaycastUtils as yr,UIRootComponent as Er,USDDocument as Rr,USDObject as hr,USDWriter as vr,USDZExporter$1 as fr,USDZText as Pr,USDZUIExtension as Ar,UriSerializer as Tr,UsageMarker as br,UserJoinedOrLeftRoomModel as Mr,VariantAction as Ir,VelocityOverLifetimeModule as Dr,VerticalLayoutGroup as Or,VideoPlayer as xr,ViewBox as kr,ViewDevice as Lr,Vignette as Br,VisibilityAction as Fr,Voip as Nr,Volume as wr,VolumeParameter as Ur,VolumeProfile as Wr,WaitForFrames as Gr,WaitForPromise as Hr,WaitForSeconds as Xr,Watch as zr,WebARCameraBackground as Vr,WebARSessionRoot as _r,WebXR as jr,WebXRButtonFactory as Kr,WebXRImageTracking as Qr,WebXRImageTrackingModel as Zr,WebXRPlaneTracking as Yr,WebXRTrackedImage as Jr,XRControllerFollow as $r,XRControllerModel as qr,XRControllerMovement as en,XRFlag as an,XRRig as sn,XRState as tn,XRStateFlag as on,__Ignore as rn,__internalNotifyObjectDestroyed as nn,activeInHierarchyFieldName as ln,addAttributeChangeCallback as dn,addComponent as cn,addCustomExtensionPlugin as mn,addNewComponent as pn,addPatch as gn,apply as un,applyHMRChanges as Sn,applyPrototypeExtensions as Cn,beginListenDestroy as yn,beginListenInstantiate as En,binaryIdentifierCasts as Rn,build_scene_functions as hn,builtinComponentKeyName as vn,calculateProgress01 as fn,clearMessages as Pn,clearMessages as An,colorSerializer as Tn,compareAssociation as bn,componentSerializer as Mn,copyTexture as In,createMotion as Dn,debugNet as On,debugOwner as xn,decompressGpuTexture as kn,deepClone as Ln,delay as Bn,delayForFrames as Fn,deserializeObject as Nn,destroy as wn,destroyComponentInstance as Un,determineMimeTypeFromExtension as Wn,disposeObjectResources as Gn,disposeStream as Hn,editorGuidKeyName as Xn,enableSpatialConsole as zn,euler as Vn,eventListSerializer as _n,exportAsGLTF as jn,findByGuid as Kn,findObjectOfType as Qn,findObjectsOfType as Zn,findResourceUsers as Yn,fitCamera as Jn,fitObjectIntoVolume as $n,foreachComponent as qn,foreachComponentEnumerator as ei,forward as ai,generateQRCode as si,generateSeed as ti,getBoundingBox as oi,getCameraController as ri,getComponent as ni,getComponentInChildren as ii,getComponentInParent as li,getComponents as di,getComponentsInChildren as ci,getComponentsInParent as mi,getFormattedDate as pi,getIconElement as gi,getIconTexture as ui,getLoader as Si,getOrAddComponent as Ci,getParam as yi,getParentHierarchyPath as Ei,getPath as Ri,getPeerOptions as hi,getPeerjsInstance as vi,getResourceUserCount as fi,getTempColor as Pi,getTempQuaternion as Ai,getTempVector as Ti,getUrlParams as bi,getVisibleInCustomShadowRendering as Mi,getWorldDirection as Ii,getWorldEuler as Di,getWorldPosition as Oi,getWorldQuaternion as xi,getWorldRotation as ki,getWorldScale as Li,hasCommercialLicense as Bi,hasIndieLicense as Fi,hasPointerEventComponent as Ni,hasProLicense as wi,hideDebugConsole as Ui,imageToCanvas as Wi,instantiate as Gi,invokeLoadedImportPluginHooks as Hi,invokeXRSessionEnd as Xi,invokeXRSessionStart as zi,isActiveInHierarchy as Vi,isActiveSelf as _i,isAndroidDevice as ji,isAnimationAction as Ki,isComponent as Qi,isDebugMode as Zi,isDesktop as Yi,isDestroyed as Ji,isDevEnvironment as $i,isDisposed as qi,isExporting as el,isGLTFModel as al,isHostedOnGlitch as sl,isHotReloadEnabled as tl,isHotReloading as ol,isIPad as rl,isIconElement as nl,isLocalNetwork as il,isMacOS as ll,isMobileDevice as dl,isMozillaXR as cl,isQuest as ml,isResourceTrackingEnabled as pl,isSafari as gl,isUsingInstancing as ul,isiOS as Sl,isiPad as Cl,loadPMREM as yl,loadSync as El,logHierarchy as Rl,lookAtInverse as hl,lookAtObject as vl,lookAtScreenPoint as fl,makeId as Pl,makeIdFromRandomWords as Al,makeNameSafe as Tl,markAsInstancedRendered as bl,microphonePermissionsGranted as Ml,nameof as Il,nameofFactory as Dl,objectSerializer as Ol,offXRSessionEnd as xl,offXRSessionStart as kl,onXRSessionEnd as Ll,onXRSessionStart as Bl,parseSync as Fl,placeOnSurface as Nl,postprocessFBXMaterials as wl,prefix as Ul,pushState as Wl,randomNumber as Gl,registerBinaryType as Hl,registerComponent as Xl,registerComponentExtension as zl,registerCustomEffectType as Vl,registerExportExtensions as _l,registerExtensions as jl,registerHotReloadType as Kl,registerLoader as Ql,registerPrefabProvider as Zl,registerPrototypeExtensions as Yl,registerType as Jl,relativePathPrefix as $l,removeAttributeChangeCallback as ql,removeComponent as ed,removeCustomImportExtensionType as ad,removePatch as sd,resolveUrl as td,sanitizeString as od,saveImage as rd,screenshot as nd,screenshot2 as id,sendDestroyed as ld,serializable as dd,serializeObject as cd,serializeable as md,setActive as pd,setAllowBalloonMessages as gd,setAllowOverlayMessages as ud,setAutoFitEnabled as Sd,setCameraController as Cd,setDestroyed as yd,setDevEnvironment as Ed,setDisposable as Rd,setDontDestroy as hd,setOrAddParamsToUrl as vd,setParam as fd,setParamWithoutReload as Pd,setPeerOptions as Ad,setResourceTrackingEnabled as Td,setState as bd,setVisibleInCustomShadowRendering as Md,setWorldEuler as Id,setWorldPosition as Dd,setWorldPositionXYZ as Od,setWorldQuaternion as xd,setWorldQuaternionXYZW as kd,setWorldRotation as Ld,setWorldRotationXYZ as Bd,setWorldScale as Fd,showBalloonError as Nd,showBalloonMessage as wd,showBalloonWarning as Ud,showDebugConsole as Wd,slerp as Gd,syncDestroy as Hd,syncField as Xd,syncInstantiate as zd,textureToCanvas as Vd,toSourceId as _d,tryCastBinary as jd,tryDetermineMimetypeFromBinary as Kd,tryDetermineMimetypeFromURL as Qd,tryFindObject as Zd,tryGetGuid as Yd,unregisterHotReloadType as Jd,unwatchWrite as $d,useForAutoFit as qd,validate as ec,watchWrite as ac}from"./needle-engine.bundle-zcyz7kwz.min.js";import{NEEDLE_progressive as sc}from"./gltf-progressive-DHLDFNvQ.min.js";import{THREE as tc}from"./three-I__hSXzr.min.js";const a={VERSION:S,Context:u,NeedleXRSession:g,assets:{loadFromURL:p},types:m,onStart:c,onUpdate:d,onBeforeRender:l,onAfterRender:i,onInitializedContext:n,onDestroyContext:r,onClearContext:o};globalThis.Needle?.VERSION!==void 0&&console.warn(`Needle Engine is already imported: ${globalThis.Needle.VERSION}`);function C(e){for(const t in e)a[t]=e[t]}C(y),C(E);for(const e of Object.getOwnPropertyNames(s))switch(e){case"prototype":case"constructor":case"length":case"name":continue;default:a[e]=s[e];break}if(!globalThis.Needle)globalThis.Needle=a;else for(const e in a)globalThis.Needle[e]=a[e];globalThis.THREE?console.warn("Three.js is already imported"):globalThis.THREE=tc;export{R as $physicsKey,h as ActionBuilder,v as ActionCollection,f as ActionModel,P as Addressables,A as AlignmentConstraint,T as AmbientMode,b as Animation,M as AnimationCurve,I as AnimationExtension,D as AnimationTrackHandler,O as AnimationUtils,x as Animator,k as AnimatorConditionMode,L as AnimatorController,B as AnimatorControllerParameterType,F as AnimatorStateInfo,N as Antialiasing,w as Application,U as AssetDatabase,W as AssetReference,G as Attractor,H as AudioExtension,X as AudioListener,z as AudioSource,V as AudioTrackHandler,_ as Avatar,j as AvatarBlink_Simple,K as AvatarEyeLook_Rotation,Q as AvatarLoader,Z as AvatarMarker,Y as AvatarModel,J as Avatar_Brain_LookAt,$ as Avatar_MouthShapes,q as Avatar_MustacheShake,ee as Avatar_POI,ae as Axes,se as AxesHelper,te as BUILD_TIME,oe as BaseUIComponent,re as BasicIKConstraint,ne as BehaviorExtension,ie as BehaviorModel,le as Behaviour,de as BlobStorage,ce as BloomEffect,me as BoxCollider,pe as BoxGizmo,ge as BoxHelperComponent,ue as Button,Se as ButtonsFactory,Ce as CallDirection,ye as CallInfo,Ee as Camera,Re as CameraTargetReachedEvent,he as Canvas,ve as CanvasGroup,fe as CapsuleCollider,Pe as ChangeMaterialOnClick,Ae as ChangeTransformOnClick,Te as CharacterController,be as CharacterControllerInput,Me as ChromaticAberration,Ie as CircularBuffer,De as ClearFlags,Oe as ClickThrough,xe as ClipExtrapolation,ke as Collider,Le as Collision,Be as CollisionDetectionMode,Fe as ColorAdjustments,Ne as ColorBySpeedModule,we as ColorOverLifetimeModule,Ue as Component,We as ComponentLifecycleEvents,Ge as ConnectionEvents,He as ContactPoint,Xe as ContactShadows,u as Context,ze as ContextArgs,Ve as ContextEvent,_e as ContextRegistry,je as ControlTrackHandler,Ke as CursorFollow,Qe as CustomBranding,Ze as CustomShader,Ye as DefaultReflectionMode,Je as Deletable,$e as DeleteBox,qe as DepthOfField,ea as DeviceFlag,aa as DeviceUtilities,sa as DocumentExtension,ta as DragControls,oa as DragMode,ra as DropListener,na as Duplicatable,ia as EffectWrapper,la as EmissionModule,da as EmphasizeOnClick,ca as EngineLoadingView,ma as EnvironmentScene,pa as EventList,ga as EventListEvent,ua as EventSystem,Sa as EventTrigger,Ca as FieldWithDefault,ya as FileReference,Ea as FileReferenceSerializer,Ra as FileSpawnModel,ha as File_Event,va as FixedJoint,fa as Fog,Pa as FrameEvent,Aa as GENERATOR,s as GameObject,Ta as Gizmos,ba as GltfExport,Ma as GltfExportBox,Ia as Gradient,Da as Graphic,Oa as GraphicRaycaster,xa as Graphics,ka as GridHelper,La as GridLayoutGroup,Ba as GroundProjectedEnv,Fa as GroupActionModel,Na as HideFlags,wa as HideOnStart,Ua as HingeJoint,Wa as HorizontalLayoutGroup,Ga as HostData,Ha as HoverAnimation,Xa as Image,za as ImageReference,Va as ImageReferenceSerializer,_a as InheritVelocityModule,ja as Input,Ka as InputEventQueue,Qa as InputEvents,Za as InputField,Ya as InstanceHandle,Ja as InstancingHandler,$a as InstancingUtil,qa as InstantiateEvent,es as InstantiateIdProvider,as as InstantiateOptions,ss as Interactable,ts as InternalScreenshotUtils,os as JoinedRoomResponse,rs as KeyEventArgs,ns as Keyframe,is as LODGroup,ls as LODModel,ds as LeftRoomResponse,cs as Light,ms as LightData,ps as LimitVelocityOverLifetimeModule,gs as LoadingElementOptions,us as LogStats,Ss as LogType,Cs as LookAt,ys as LookAtConstraint,Es as MainModule,Rs as MarkerTrackHandler,hs as MarkerType,vs as MaskableGraphic,fs as MaterialX,Ps as Mathf,As as MeshCollider,Ts as MeshRenderer,bs as MinMaxCurve,Ms as MinMaxGradient,Is as NEEDLE_ENGINE_FEATURE_FLAGS,Ds as NEEDLE_ENGINE_MODULES,sc as NEEDLE_progressive,Os as NEKeyboardEvent,xs as NEPointerEvent,ks as NeedleButtonElement,Ls as NeedleEngine,Bs as NeedleEngineModelLoader,Fs as NeedleEngineWebComponent,Ns as NeedleMenu,ws as NeedlePatchesKey,Us as NeedleUSDZExporter,Ws as NeedleXRController,g as NeedleXRSession,Gs as NeedleXRSync,Hs as NeedleXRUtils,Xs as NestedGltf,zs as NetworkConnection,Vs as NetworkedStreamEvents,_s as NetworkedStreams,js as Networking,Ks as NewInstanceModel,Qs as NoiseModule,Zs as ObjectRaycaster,Ys as ObjectUtils,Js as OffsetConstraint,$s as OneEuroFilter,qs as OneEuroFilterXYZ,et as OpenURL,at as OrbitControls,st as Outline,tt as OwnershipEvent,ot as OwnershipModel,rt as PUBLIC_KEY,nt as Padding,it as ParticleBurst,lt as ParticleSubEmitter,dt as ParticleSystem,ct as ParticleSystemBaseBehaviour,mt as ParticleSystemRenderer,pt as ParticleSystemShapeType,gt as PeerHandle,ut as PeerNetworking,St as Physics,Ct as PhysicsExtension,yt as PhysicsMaterialCombine,Et as PixelationEffect,Rt as PlayAnimationOnClick,ht as PlayAudioOnClick,vt as PlayableDirector,ft as PlayerColor,Pt as PlayerState,At as PlayerStateEvent,Tt as PlayerSync,bt as PlayerView,Mt as PlayerViewManager,It as PointerEventData,Dt as PointerType,Ot as PostProcessingEffect,xt as PostProcessingEffectOrder,kt as PostProcessingHandler,Lt as PostProcessingManager,Bt as PreliminaryAction,Ft as PreliminaryTrigger,Nt as PreviewHelper,wt as PrimitiveType,Ut as Progress,Wt as PromiseAllWithErrors,Gt as PromiseErrorResult,Ht as RGBAColor,Xt as RapierPhysics,zt as RawImage,Vt as RaycastOptions,_t as Rect,jt as RectTransform,Kt as ReflectionProbe,Qt as RegisteredAnimationInfo,Zt as RemoteSkybox,Yt as RenderTexture,Jt as RenderTextureSerializer,$t as Renderer,qt as RendererData,eo as RendererLightmap,ao as Rigidbody,so as RigidbodyConstraints,to as RoomEvents,oo as RotationBySpeedModule,ro as RotationOverLifetimeModule,no as SceneLightSettings,io as SceneSwitcher,lo as ScreenCapture,co as ScreenSpaceAmbientOcclusion,mo as ScreenSpaceAmbientOcclusionN8,po as ScrollFollow,go as SeeThrough,uo as SendQueue,So as SerializationContext,Co as SetActiveOnClick,yo as ShadowCatcher,Eo as ShapeModule,Ro as ShapeOverlapResult,ho as SharpeningEffect,vo as SignalAsset,fo as SignalReceiver,Po as SignalReceiverEvent,Ao as SignalTrackHandler,To as Size,bo as SizeBySpeedModule,Mo as SizeOverLifetimeModule,Io as SkinnedMeshRenderer,Do as SmoothFollow,Oo as SpatialGrabRaycaster,xo as SpatialHtml,ko as SpatialTrigger,Lo as SpatialTriggerReceiver,Bo as SpectatorCamera,Fo as SphereCollider,No as SphereIntersection,wo as SplineContainer,Uo as SplineData,Wo as SplineUtils,Go as SplineWalker,Ho as Sprite,Xo as SpriteData,zo as SpriteRenderer,Vo as SpriteSheet,_o as StateMachineBehaviour,jo as StreamEndedEvent,Ko as StreamReceivedEvent,Qo as SubEmitterSystem,Zo as SyncedCamera,Yo as SyncedRoom,Jo as SyncedTransform,$o as TapGestureTrigger,qo as TeleportTarget,er as TestRunner,ar as TestSceneUtils,sr as TestSimulateUserData,tr as Text,or as TextBuilder,rr as TextExtension,nr as TextureSheetAnimationModule,ir as TiltShiftEffect,lr as Time,dr as ToneMappingEffect,cr as TrackHandler,mr as TrackType,pr as TrailModule,gr as TransformData,ur as TransformGizmo,Sr as TriggerBuilder,Cr as TriggerModel,m as TypeStore,yr as UIRaycastUtils,Er as UIRootComponent,Rr as USDDocument,hr as USDObject,vr as USDWriter,fr as USDZExporter,Pr as USDZText,Ar as USDZUIExtension,Tr as UriSerializer,br as UsageMarker,Mr as UserJoinedOrLeftRoomModel,S as VERSION,Ir as VariantAction,Dr as VelocityOverLifetimeModule,Or as VerticalLayoutGroup,xr as VideoPlayer,kr as ViewBox,Lr as ViewDevice,Br as Vignette,Fr as VisibilityAction,Nr as Voip,wr as Volume,Ur as VolumeParameter,Wr as VolumeProfile,Gr as WaitForFrames,Hr as WaitForPromise,Xr as WaitForSeconds,zr as Watch,Vr as WebARCameraBackground,_r as WebARSessionRoot,jr as WebXR,Kr as WebXRButtonFactory,Qr as WebXRImageTracking,Zr as WebXRImageTrackingModel,Yr as WebXRPlaneTracking,Jr as WebXRTrackedImage,$r as XRControllerFollow,qr as XRControllerModel,en as XRControllerMovement,an as XRFlag,sn as XRRig,tn as XRState,on as XRStateFlag,rn as __Ignore,nn as __internalNotifyObjectDestroyed,ln as activeInHierarchyFieldName,dn as addAttributeChangeCallback,cn as addComponent,mn as addCustomExtensionPlugin,pn as addNewComponent,gn as addPatch,un as apply,Sn as applyHMRChanges,Cn as applyPrototypeExtensions,yn as beginListenDestroy,En as beginListenInstantiate,Rn as binaryIdentifierCasts,hn as build_scene_functions,vn as builtinComponentKeyName,fn as calculateProgress01,Pn as clearBalloonMessages,An as clearOverlayMessages,Tn as colorSerializer,bn as compareAssociation,Mn as componentSerializer,In as copyTexture,Dn as createMotion,On as debugNet,xn as debugOwner,kn as decompressGpuTexture,Ln as deepClone,Bn as delay,Fn as delayForFrames,Nn as deserializeObject,wn as destroy,Un as destroyComponentInstance,Wn as determineMimeTypeFromExtension,Gn as disposeObjectResources,Hn as disposeStream,Xn as editorGuidKeyName,zn as enableSpatialConsole,Vn as euler,_n as eventListSerializer,jn as exportAsGLTF,Kn as findByGuid,Qn as findObjectOfType,Zn as findObjectsOfType,Yn as findResourceUsers,Jn as fitCamera,$n as fitObjectIntoVolume,qn as foreachComponent,ei as foreachComponentEnumerator,ai as forward,si as generateQRCode,ti as generateSeed,oi as getBoundingBox,ri as getCameraController,ni as getComponent,ii as getComponentInChildren,li as getComponentInParent,di as getComponents,ci as getComponentsInChildren,mi as getComponentsInParent,pi as getFormattedDate,gi as getIconElement,ui as getIconTexture,Si as getLoader,Ci as getOrAddComponent,yi as getParam,Ei as getParentHierarchyPath,Ri as getPath,hi as getPeerOptions,vi as getPeerjsInstance,fi as getResourceUserCount,Pi as getTempColor,Ai as getTempQuaternion,Ti as getTempVector,bi as getUrlParams,Mi as getVisibleInCustomShadowRendering,Ii as getWorldDirection,Di as getWorldEuler,Oi as getWorldPosition,xi as getWorldQuaternion,ki as getWorldRotation,Li as getWorldScale,Bi as hasCommercialLicense,Fi as hasIndieLicense,Ni as hasPointerEventComponent,wi as hasProLicense,Ui as hideDebugConsole,Wi as imageToCanvas,Gi as instantiate,Hi as invokeLoadedImportPluginHooks,Xi as invokeXRSessionEnd,zi as invokeXRSessionStart,Vi as isActiveInHierarchy,_i as isActiveSelf,ji as isAndroidDevice,Ki as isAnimationAction,Qi as isComponent,Zi as isDebugMode,Yi as isDesktop,Ji as isDestroyed,$i as isDevEnvironment,qi as isDisposed,el as isExporting,al as isGLTFModel,sl as isHostedOnGlitch,tl as isHotReloadEnabled,ol as isHotReloading,rl as isIPad,nl as isIconElement,il as isLocalNetwork,ll as isMacOS,dl as isMobileDevice,cl as isMozillaXR,ml as isQuest,pl as isResourceTrackingEnabled,gl as isSafari,ul as isUsingInstancing,Sl as isiOS,Cl as isiPad,p as loadAsset,yl as loadPMREM,El as loadSync,Rl as logHierarchy,hl as lookAtInverse,vl as lookAtObject,fl as lookAtScreenPoint,Pl as makeId,Al as makeIdFromRandomWords,Tl as makeNameSafeForUSD,bl as markAsInstancedRendered,Ml as microphonePermissionsGranted,Il as nameof,Dl as nameofFactory,Ol as objectSerializer,xl as offXRSessionEnd,kl as offXRSessionStart,i as onAfterRender,l as onBeforeRender,o as onClear,r as onDestroy,n as onInitialized,c as onStart,d as onUpdate,Ll as onXRSessionEnd,Bl as onXRSessionStart,Fl as parseSync,Nl as placeOnSurface,wl as postprocessFBXMaterials,Ul as prefix,Wl as pushState,Gl as randomNumber,Hl as registerBinaryType,Xl as registerComponent,zl as registerComponentExtension,Vl as registerCustomEffectType,_l as registerExportExtensions,jl as registerExtensions,Kl as registerHotReloadType,Ql as registerLoader,Zl as registerPrefabProvider,Yl as registerPrototypeExtensions,Jl as registerType,$l as relativePathPrefix,ql as removeAttributeChangeCallback,ed as removeComponent,ad as removeCustomImportExtensionType,sd as removePatch,td as resolveUrl,od as sanitizeString,rd as saveImage,nd as screenshot,id as screenshot2,ld as sendDestroyed,dd as serializable,cd as serializeObject,md as serializeable,pd as setActive,gd as setAllowBalloonMessages,ud as setAllowOverlayMessages,Sd as setAutoFitEnabled,Cd as setCameraController,yd as setDestroyed,Ed as setDevEnvironment,Rd as setDisposable,hd as setDontDestroy,vd as setOrAddParamsToUrl,fd as setParam,Pd as setParamWithoutReload,Ad as setPeerOptions,Td as setResourceTrackingEnabled,bd as setState,Md as setVisibleInCustomShadowRendering,Id as setWorldEuler,Dd as setWorldPosition,Od as setWorldPositionXYZ,xd as setWorldQuaternion,kd as setWorldQuaternionXYZW,Ld as setWorldRotation,Bd as setWorldRotationXYZ,Fd as setWorldScale,Nd as showBalloonError,wd as showBalloonMessage,Ud as showBalloonWarning,Wd as showDebugConsole,Gd as slerp,Hd as syncDestroy,Xd as syncField,zd as syncInstantiate,Vd as textureToCanvas,_d as toSourceId,jd as tryCastBinary,Kd as tryDetermineMimetypeFromBinary,Qd as tryDetermineMimetypeFromURL,Zd as tryFindObject,Yd as tryGetGuid,Jd as unregisterHotReloadType,$d as unwatchWrite,qd as useForAutoFit,ec as validate,ac as watchWrite};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./needle-engine.bundle-MTOikD86.umd.cjs"),i=require("./gltf-progressive-BURrJW0U.umd.cjs"),a=require("./three-BW2s1Yl-.umd.cjs"),o={VERSION:e.VERSION,Context:e.Context,NeedleXRSession:e.NeedleXRSession,assets:{loadFromURL:e.loadAsset},types:e.TypeStore,onStart:e.onStart,onUpdate:e.onUpdate,onBeforeRender:e.onBeforeRender,onAfterRender:e.onAfterRender,onInitializedContext:e.onInitialized,onDestroyContext:e.onDestroy,onClearContext:e.onClear};globalThis.Needle?.VERSION!==void 0&&console.warn(`Needle Engine is already imported: ${globalThis.Needle.VERSION}`);function n(t){for(const r in t)o[r]=t[r]}n(e.Component);n(e.Components);for(const t of Object.getOwnPropertyNames(e.GameObject))switch(t){case"prototype":case"constructor":case"length":case"name":continue;default:o[t]=e.GameObject[t];break}if(!globalThis.Needle)globalThis.Needle=o;else for(const t in o)globalThis.Needle[t]=o[t];globalThis.THREE?console.warn("Three.js is already imported"):globalThis.THREE=a.THREE;exports.$physicsKey=e.$physicsKey;exports.ActionBuilder=e.ActionBuilder;exports.ActionCollection=e.ActionCollection;exports.ActionModel=e.ActionModel;exports.Addressables=e.Addressables;exports.AlignmentConstraint=e.AlignmentConstraint;exports.AmbientMode=e.AmbientMode;exports.Animation=e.Animation;exports.AnimationCurve=e.AnimationCurve;exports.AnimationExtension=e.AnimationExtension;exports.AnimationTrackHandler=e.AnimationTrackHandler;exports.AnimationUtils=e.AnimationUtils;exports.Animator=e.Animator;exports.AnimatorConditionMode=e.AnimatorConditionMode;exports.AnimatorController=e.AnimatorController;exports.AnimatorControllerParameterType=e.AnimatorControllerParameterType;exports.AnimatorStateInfo=e.AnimatorStateInfo;exports.Antialiasing=e.Antialiasing;exports.Application=e.Application;exports.AssetDatabase=e.AssetDatabase;exports.AssetReference=e.AssetReference;exports.Attractor=e.Attractor;exports.AudioExtension=e.AudioExtension;exports.AudioListener=e.AudioListener;exports.AudioSource=e.AudioSource;exports.AudioTrackHandler=e.AudioTrackHandler;exports.Avatar=e.Avatar;exports.AvatarBlink_Simple=e.AvatarBlink_Simple;exports.AvatarEyeLook_Rotation=e.AvatarEyeLook_Rotation;exports.AvatarLoader=e.AvatarLoader;exports.AvatarMarker=e.AvatarMarker;exports.AvatarModel=e.AvatarModel;exports.Avatar_Brain_LookAt=e.Avatar_Brain_LookAt;exports.Avatar_MouthShapes=e.Avatar_MouthShapes;exports.Avatar_MustacheShake=e.Avatar_MustacheShake;exports.Avatar_POI=e.Avatar_POI;exports.Axes=e.Axes;exports.AxesHelper=e.AxesHelper;exports.BUILD_TIME=e.BUILD_TIME;exports.BaseUIComponent=e.BaseUIComponent;exports.BasicIKConstraint=e.BasicIKConstraint;exports.BehaviorExtension=e.BehaviorExtension;exports.BehaviorModel=e.BehaviorModel;exports.Behaviour=e.Component$1;Object.defineProperty(exports,"BlobStorage",{enumerable:!0,get:()=>e.BlobStorage});exports.BloomEffect=e.BloomEffect;exports.BoxCollider=e.BoxCollider;exports.BoxGizmo=e.BoxGizmo;exports.BoxHelperComponent=e.BoxHelperComponent;exports.Button=e.Button;exports.ButtonsFactory=e.ButtonsFactory;exports.CallDirection=e.CallDirection;exports.CallInfo=e.CallInfo;exports.Camera=e.Camera;exports.CameraTargetReachedEvent=e.CameraTargetReachedEvent;exports.Canvas=e.Canvas;exports.CanvasGroup=e.CanvasGroup;exports.CapsuleCollider=e.CapsuleCollider;exports.ChangeMaterialOnClick=e.ChangeMaterialOnClick;exports.ChangeTransformOnClick=e.ChangeTransformOnClick;exports.CharacterController=e.CharacterController;exports.CharacterControllerInput=e.CharacterControllerInput;exports.ChromaticAberration=e.ChromaticAberration;exports.CircularBuffer=e.CircularBuffer;exports.ClearFlags=e.ClearFlags;exports.ClickThrough=e.ClickThrough;exports.ClipExtrapolation=e.ClipExtrapolation;exports.Collider=e.Collider;exports.Collision=e.Collision;exports.CollisionDetectionMode=e.CollisionDetectionMode;exports.ColorAdjustments=e.ColorAdjustments;exports.ColorBySpeedModule=e.ColorBySpeedModule;exports.ColorOverLifetimeModule=e.ColorOverLifetimeModule;exports.Component=e.Component$1;exports.ComponentLifecycleEvents=e.ComponentLifecycleEvents;exports.ConnectionEvents=e.ConnectionEvents;exports.ContactPoint=e.ContactPoint;exports.ContactShadows=e.ContactShadows;exports.Context=e.Context;exports.ContextArgs=e.ContextArgs;exports.ContextEvent=e.ContextEvent;exports.ContextRegistry=e.ContextRegistry;exports.ControlTrackHandler=e.ControlTrackHandler;exports.CursorFollow=e.CursorFollow;exports.CustomBranding=e.CustomBranding;exports.CustomShader=e.CustomShader;exports.DefaultReflectionMode=e.DefaultReflectionMode;exports.Deletable=e.Deletable;exports.DeleteBox=e.DeleteBox;exports.DepthOfField=e.DepthOfField;exports.DeviceFlag=e.DeviceFlag;Object.defineProperty(exports,"DeviceUtilities",{enumerable:!0,get:()=>e.DeviceUtilities});exports.DocumentExtension=e.DocumentExtension;exports.DragControls=e.DragControls;exports.DragMode=e.DragMode;exports.DropListener=e.DropListener;exports.Duplicatable=e.Duplicatable;exports.EffectWrapper=e.EffectWrapper;exports.EmissionModule=e.EmissionModule;exports.EmphasizeOnClick=e.EmphasizeOnClick;exports.EngineLoadingView=e.EngineLoadingView;exports.EnvironmentScene=e.EnvironmentScene;exports.EventList=e.EventList;exports.EventListEvent=e.EventListEvent;exports.EventSystem=e.EventSystem;exports.EventTrigger=e.EventTrigger;exports.FieldWithDefault=e.FieldWithDefault;exports.FileReference=e.FileReference;exports.FileReferenceSerializer=e.FileReferenceSerializer;exports.FileSpawnModel=e.FileSpawnModel;exports.File_Event=e.File_Event;exports.FixedJoint=e.FixedJoint;exports.Fog=e.Fog;exports.FrameEvent=e.FrameEvent;exports.GENERATOR=e.GENERATOR;exports.GameObject=e.GameObject;exports.Gizmos=e.Gizmos;exports.GltfExport=e.GltfExport;exports.GltfExportBox=e.GltfExportBox;exports.Gradient=e.Gradient;exports.Graphic=e.Graphic;exports.GraphicRaycaster=e.GraphicRaycaster;exports.Graphics=e.Graphics;exports.GridHelper=e.GridHelper;exports.GridLayoutGroup=e.GridLayoutGroup;exports.GroundProjectedEnv=e.GroundProjectedEnv;exports.GroupActionModel=e.GroupActionModel;exports.HideFlags=e.HideFlags;exports.HideOnStart=e.HideOnStart;exports.HingeJoint=e.HingeJoint;exports.HorizontalLayoutGroup=e.HorizontalLayoutGroup;exports.HostData=e.HostData;Object.defineProperty(exports,"HoverAnimation",{enumerable:!0,get:()=>e.HoverAnimation});exports.Image=e.Image;exports.ImageReference=e.ImageReference;exports.ImageReferenceSerializer=e.ImageReferenceSerializer;exports.InheritVelocityModule=e.InheritVelocityModule;exports.Input=e.Input;exports.InputEventQueue=e.InputEventQueue;exports.InputEvents=e.InputEvents;exports.InputField=e.InputField;exports.InstanceHandle=e.InstanceHandle;exports.InstancingHandler=e.InstancingHandler;exports.InstancingUtil=e.InstancingUtil;exports.InstantiateEvent=e.InstantiateEvent;exports.InstantiateIdProvider=e.InstantiateIdProvider;exports.InstantiateOptions=e.InstantiateOptions;exports.Interactable=e.Interactable;Object.defineProperty(exports,"InternalScreenshotUtils",{enumerable:!0,get:()=>e.InternalScreenshotUtils});exports.JoinedRoomResponse=e.JoinedRoomResponse;exports.KeyEventArgs=e.KeyEventArgs;exports.Keyframe=e.Keyframe;exports.LODGroup=e.LODGroup;exports.LODModel=e.LODModel;exports.LeftRoomResponse=e.LeftRoomResponse;exports.Light=e.Light;exports.LightData=e.LightData;exports.LimitVelocityOverLifetimeModule=e.LimitVelocityOverLifetimeModule;exports.LoadingElementOptions=e.LoadingElementOptions;exports.LogStats=e.LogStats;exports.LogType=e.LogType;exports.LookAt=e.LookAt;exports.LookAtConstraint=e.LookAtConstraint;exports.MainModule=e.MainModule;exports.MarkerTrackHandler=e.MarkerTrackHandler;exports.MarkerType=e.MarkerType;exports.MaskableGraphic=e.MaskableGraphic;Object.defineProperty(exports,"MaterialX",{enumerable:!0,get:()=>e.MaterialX});exports.Mathf=e.Mathf;exports.MeshCollider=e.MeshCollider;exports.MeshRenderer=e.MeshRenderer;exports.MinMaxCurve=e.MinMaxCurve;exports.MinMaxGradient=e.MinMaxGradient;Object.defineProperty(exports,"NEEDLE_ENGINE_FEATURE_FLAGS",{enumerable:!0,get:()=>e.NEEDLE_ENGINE_FEATURE_FLAGS});Object.defineProperty(exports,"NEEDLE_ENGINE_MODULES",{enumerable:!0,get:()=>e.MODULES});exports.NEKeyboardEvent=e.NEKeyboardEvent;exports.NEPointerEvent=e.NEPointerEvent;exports.NeedleButtonElement=e.NeedleButtonElement;exports.NeedleEngine=e.ContextRegistry;Object.defineProperty(exports,"NeedleEngineModelLoader",{enumerable:!0,get:()=>e.NeedleEngineModelLoader});exports.NeedleEngineWebComponent=e.NeedleEngineWebComponent;exports.NeedleMenu=e.NeedleMenu;exports.NeedlePatchesKey=e.NeedlePatchesKey;exports.NeedleUSDZExporter=e.USDZExporter;exports.NeedleXRController=e.NeedleXRController;exports.NeedleXRSession=e.NeedleXRSession;exports.NeedleXRSync=e.NeedleXRSync;exports.NeedleXRUtils=e.NeedleXRUtils;exports.NestedGltf=e.NestedGltf;exports.NetworkConnection=e.NetworkConnection;exports.NetworkedStreamEvents=e.NetworkedStreamEvents;exports.NetworkedStreams=e.NetworkedStreams;exports.Networking=e.Networking;exports.NewInstanceModel=e.NewInstanceModel;exports.NoiseModule=e.NoiseModule;exports.ObjectRaycaster=e.ObjectRaycaster;exports.ObjectUtils=e.ObjectUtils;exports.OffsetConstraint=e.OffsetConstraint;exports.OneEuroFilter=e.OneEuroFilter;exports.OneEuroFilterXYZ=e.OneEuroFilterXYZ;exports.OpenURL=e.OpenURL;exports.OrbitControls=e.OrbitControls;exports.Outline=e.Outline;exports.OwnershipEvent=e.OwnershipEvent;exports.OwnershipModel=e.OwnershipModel;exports.PUBLIC_KEY=e.PUBLIC_KEY;exports.Padding=e.Padding;exports.ParticleBurst=e.ParticleBurst;exports.ParticleSubEmitter=e.ParticleSubEmitter;exports.ParticleSystem=e.ParticleSystem;exports.ParticleSystemBaseBehaviour=e.ParticleSystemBaseBehaviour;exports.ParticleSystemRenderer=e.ParticleSystemRenderer;exports.ParticleSystemShapeType=e.ParticleSystemShapeType;exports.PeerHandle=e.PeerHandle;exports.PeerNetworking=e.PeerNetworking;exports.Physics=e.Physics;exports.PhysicsExtension=e.PhysicsExtension;exports.PhysicsMaterialCombine=e.PhysicsMaterialCombine;exports.PixelationEffect=e.PixelationEffect;exports.PlayAnimationOnClick=e.PlayAnimationOnClick;exports.PlayAudioOnClick=e.PlayAudioOnClick;exports.PlayableDirector=e.PlayableDirector;exports.PlayerColor=e.PlayerColor;exports.PlayerState=e.PlayerState;exports.PlayerStateEvent=e.PlayerStateEvent;exports.PlayerSync=e.PlayerSync;exports.PlayerView=e.PlayerView;exports.PlayerViewManager=e.PlayerViewManager;exports.PointerEventData=e.PointerEventData;exports.PointerType=e.PointerType;exports.PostProcessingEffect=e.PostProcessingEffect;exports.PostProcessingEffectOrder=e.PostProcessingEffectOrder;exports.PostProcessingHandler=e.PostProcessingHandler;exports.PostProcessingManager=e.Volume;exports.PreliminaryAction=e.PreliminaryAction;exports.PreliminaryTrigger=e.PreliminaryTrigger;Object.defineProperty(exports,"PreviewHelper",{enumerable:!0,get:()=>e.PreviewHelper});exports.PrimitiveType=e.PrimitiveType;exports.Progress=e.Progress;exports.PromiseAllWithErrors=e.PromiseAllWithErrors;exports.PromiseErrorResult=e.PromiseErrorResult;exports.RGBAColor=e.RGBAColor;exports.RapierPhysics=e.RapierPhysics;exports.RawImage=e.RawImage;exports.RaycastOptions=e.RaycastOptions;exports.Rect=e.Rect;exports.RectTransform=e.RectTransform;exports.ReflectionProbe=e.ReflectionProbe;exports.RegisteredAnimationInfo=e.RegisteredAnimationInfo;exports.RemoteSkybox=e.RemoteSkybox;exports.RenderTexture=e.RenderTexture;exports.RenderTextureSerializer=e.RenderTextureSerializer;exports.Renderer=e.Renderer;exports.RendererData=e.RendererData;exports.RendererLightmap=e.RendererLightmap;exports.Rigidbody=e.Rigidbody;exports.RigidbodyConstraints=e.RigidbodyConstraints;exports.RoomEvents=e.RoomEvents;exports.RotationBySpeedModule=e.RotationBySpeedModule;exports.RotationOverLifetimeModule=e.RotationOverLifetimeModule;exports.SceneLightSettings=e.SceneLightSettings;exports.SceneSwitcher=e.SceneSwitcher;exports.ScreenCapture=e.ScreenCapture;exports.ScreenSpaceAmbientOcclusion=e.ScreenSpaceAmbientOcclusion;exports.ScreenSpaceAmbientOcclusionN8=e.ScreenSpaceAmbientOcclusionN8;exports.ScrollFollow=e.ScrollFollow;exports.SeeThrough=e.SeeThrough;exports.SendQueue=e.SendQueue;exports.SerializationContext=e.SerializationContext;exports.SetActiveOnClick=e.SetActiveOnClick;exports.ShadowCatcher=e.ShadowCatcher;exports.ShapeModule=e.ShapeModule;exports.ShapeOverlapResult=e.ShapeOverlapResult;exports.SharpeningEffect=e.SharpeningEffect;exports.SignalAsset=e.SignalAsset;exports.SignalReceiver=e.SignalReceiver;exports.SignalReceiverEvent=e.SignalReceiverEvent;exports.SignalTrackHandler=e.SignalTrackHandler;exports.Size=e.Size;exports.SizeBySpeedModule=e.SizeBySpeedModule;exports.SizeOverLifetimeModule=e.SizeOverLifetimeModule;exports.SkinnedMeshRenderer=e.SkinnedMeshRenderer;exports.SmoothFollow=e.SmoothFollow;exports.SpatialGrabRaycaster=e.SpatialGrabRaycaster;exports.SpatialHtml=e.SpatialHtml;exports.SpatialTrigger=e.SpatialTrigger;exports.SpatialTriggerReceiver=e.SpatialTriggerReceiver;exports.SpectatorCamera=e.SpectatorCamera;exports.SphereCollider=e.SphereCollider;exports.SphereIntersection=e.SphereIntersection;exports.SplineContainer=e.SplineContainer;exports.SplineData=e.SplineData;Object.defineProperty(exports,"SplineUtils",{enumerable:!0,get:()=>e.SplineUtils});exports.SplineWalker=e.SplineWalker;exports.Sprite=e.Sprite;exports.SpriteData=e.SpriteData;exports.SpriteRenderer=e.SpriteRenderer;exports.SpriteSheet=e.SpriteSheet;exports.StateMachineBehaviour=e.StateMachineBehaviour;exports.StreamEndedEvent=e.StreamEndedEvent;exports.StreamReceivedEvent=e.StreamReceivedEvent;exports.SubEmitterSystem=e.SubEmitterSystem;exports.SyncedCamera=e.SyncedCamera;exports.SyncedRoom=e.SyncedRoom;exports.SyncedTransform=e.SyncedTransform;exports.TapGestureTrigger=e.TapGestureTrigger;exports.TeleportTarget=e.TeleportTarget;exports.TestRunner=e.TestRunner;exports.TestSceneUtils=e.TestSceneUtils;exports.TestSimulateUserData=e.TestSimulateUserData;exports.Text=e.Text;exports.TextBuilder=e.TextBuilder;exports.TextExtension=e.TextExtension;exports.TextureSheetAnimationModule=e.TextureSheetAnimationModule;exports.TiltShiftEffect=e.TiltShiftEffect;exports.Time=e.Time;exports.ToneMappingEffect=e.ToneMappingEffect;exports.TrackHandler=e.TrackHandler;exports.TrackType=e.TrackType;exports.TrailModule=e.TrailModule;exports.TransformData=e.TransformData;exports.TransformGizmo=e.TransformGizmo;exports.TriggerBuilder=e.TriggerBuilder;exports.TriggerModel=e.TriggerModel;exports.TypeStore=e.TypeStore;exports.UIRaycastUtils=e.UIRaycastUtils;exports.UIRootComponent=e.UIRootComponent;exports.USDDocument=e.USDDocument;exports.USDObject=e.USDObject;exports.USDWriter=e.USDWriter;exports.USDZExporter=e.USDZExporter$1;exports.USDZText=e.USDZText;exports.USDZUIExtension=e.USDZUIExtension;exports.UriSerializer=e.UriSerializer;exports.UsageMarker=e.UsageMarker;exports.UserJoinedOrLeftRoomModel=e.UserJoinedOrLeftRoomModel;exports.VERSION=e.VERSION;exports.VariantAction=e.VariantAction;exports.VelocityOverLifetimeModule=e.VelocityOverLifetimeModule;exports.VerticalLayoutGroup=e.VerticalLayoutGroup;exports.VideoPlayer=e.VideoPlayer;Object.defineProperty(exports,"ViewBox",{enumerable:!0,get:()=>e.ViewBox});exports.ViewDevice=e.ViewDevice;exports.Vignette=e.Vignette;exports.VisibilityAction=e.VisibilityAction;exports.Voip=e.Voip;exports.Volume=e.Volume;exports.VolumeParameter=e.VolumeParameter;exports.VolumeProfile=e.VolumeProfile;exports.WaitForFrames=e.WaitForFrames;exports.WaitForPromise=e.WaitForPromise;exports.WaitForSeconds=e.WaitForSeconds;exports.Watch=e.Watch;exports.WebARCameraBackground=e.WebARCameraBackground;exports.WebARSessionRoot=e.WebARSessionRoot;exports.WebXR=e.WebXR;exports.WebXRButtonFactory=e.WebXRButtonFactory;exports.WebXRImageTracking=e.WebXRImageTracking;exports.WebXRImageTrackingModel=e.WebXRImageTrackingModel;exports.WebXRPlaneTracking=e.WebXRPlaneTracking;exports.WebXRTrackedImage=e.WebXRTrackedImage;exports.XRControllerFollow=e.XRControllerFollow;exports.XRControllerModel=e.XRControllerModel;exports.XRControllerMovement=e.XRControllerMovement;exports.XRFlag=e.XRFlag;exports.XRRig=e.XRRig;exports.XRState=e.XRState;exports.XRStateFlag=e.XRStateFlag;exports.__Ignore=e.__Ignore;exports.__internalNotifyObjectDestroyed=e.__internalNotifyObjectDestroyed;exports.activeInHierarchyFieldName=e.activeInHierarchyFieldName;exports.addAttributeChangeCallback=e.addAttributeChangeCallback;exports.addComponent=e.addComponent;exports.addCustomExtensionPlugin=e.addCustomExtensionPlugin;exports.addNewComponent=e.addNewComponent;exports.addPatch=e.addPatch;exports.apply=e.apply;exports.applyHMRChanges=e.applyHMRChanges;exports.applyPrototypeExtensions=e.applyPrototypeExtensions;exports.beginListenDestroy=e.beginListenDestroy;exports.beginListenInstantiate=e.beginListenInstantiate;exports.binaryIdentifierCasts=e.binaryIdentifierCasts;exports.build_scene_functions=e.build_scene_functions;exports.builtinComponentKeyName=e.builtinComponentKeyName;exports.calculateProgress01=e.calculateProgress01;exports.clearBalloonMessages=e.clearMessages;exports.clearOverlayMessages=e.clearMessages;exports.colorSerializer=e.colorSerializer;exports.compareAssociation=e.compareAssociation;exports.componentSerializer=e.componentSerializer;exports.copyTexture=e.copyTexture;exports.createMotion=e.createMotion;exports.debugNet=e.debugNet;exports.debugOwner=e.debugOwner;exports.decompressGpuTexture=e.decompressGpuTexture;exports.deepClone=e.deepClone;exports.delay=e.delay;exports.delayForFrames=e.delayForFrames;exports.deserializeObject=e.deserializeObject;exports.destroy=e.destroy;exports.destroyComponentInstance=e.destroyComponentInstance;exports.determineMimeTypeFromExtension=e.determineMimeTypeFromExtension;exports.disposeObjectResources=e.disposeObjectResources;exports.disposeStream=e.disposeStream;exports.editorGuidKeyName=e.editorGuidKeyName;exports.enableSpatialConsole=e.enableSpatialConsole;exports.euler=e.euler;exports.eventListSerializer=e.eventListSerializer;exports.exportAsGLTF=e.exportAsGLTF;exports.findByGuid=e.findByGuid;exports.findObjectOfType=e.findObjectOfType;exports.findObjectsOfType=e.findObjectsOfType;exports.findResourceUsers=e.findResourceUsers;exports.fitCamera=e.fitCamera;exports.fitObjectIntoVolume=e.fitObjectIntoVolume;exports.foreachComponent=e.foreachComponent;exports.foreachComponentEnumerator=e.foreachComponentEnumerator;exports.forward=e.forward;exports.generateQRCode=e.generateQRCode;exports.generateSeed=e.generateSeed;exports.getBoundingBox=e.getBoundingBox;exports.getCameraController=e.getCameraController;exports.getComponent=e.getComponent;exports.getComponentInChildren=e.getComponentInChildren;exports.getComponentInParent=e.getComponentInParent;exports.getComponents=e.getComponents;exports.getComponentsInChildren=e.getComponentsInChildren;exports.getComponentsInParent=e.getComponentsInParent;exports.getFormattedDate=e.getFormattedDate;exports.getIconElement=e.getIconElement;exports.getIconTexture=e.getIconTexture;exports.getLoader=e.getLoader;exports.getOrAddComponent=e.getOrAddComponent;exports.getParam=e.getParam;exports.getParentHierarchyPath=e.getParentHierarchyPath;exports.getPath=e.getPath;exports.getPeerOptions=e.getPeerOptions;exports.getPeerjsInstance=e.getPeerjsInstance;exports.getResourceUserCount=e.getResourceUserCount;exports.getTempColor=e.getTempColor;exports.getTempQuaternion=e.getTempQuaternion;exports.getTempVector=e.getTempVector;exports.getUrlParams=e.getUrlParams;exports.getVisibleInCustomShadowRendering=e.getVisibleInCustomShadowRendering;exports.getWorldDirection=e.getWorldDirection;exports.getWorldEuler=e.getWorldEuler;exports.getWorldPosition=e.getWorldPosition;exports.getWorldQuaternion=e.getWorldQuaternion;exports.getWorldRotation=e.getWorldRotation;exports.getWorldScale=e.getWorldScale;exports.hasCommercialLicense=e.hasCommercialLicense;exports.hasIndieLicense=e.hasIndieLicense;exports.hasPointerEventComponent=e.hasPointerEventComponent;exports.hasProLicense=e.hasProLicense;exports.hideDebugConsole=e.hideDebugConsole;exports.imageToCanvas=e.imageToCanvas;exports.instantiate=e.instantiate;exports.invokeLoadedImportPluginHooks=e.invokeLoadedImportPluginHooks;exports.invokeXRSessionEnd=e.invokeXRSessionEnd;exports.invokeXRSessionStart=e.invokeXRSessionStart;exports.isActiveInHierarchy=e.isActiveInHierarchy;exports.isActiveSelf=e.isActiveSelf;exports.isAndroidDevice=e.isAndroidDevice;exports.isAnimationAction=e.isAnimationAction;exports.isComponent=e.isComponent;exports.isDebugMode=e.isDebugMode;exports.isDesktop=e.isDesktop;exports.isDestroyed=e.isDestroyed;exports.isDevEnvironment=e.isDevEnvironment;exports.isDisposed=e.isDisposed;exports.isExporting=e.isExporting;exports.isGLTFModel=e.isGLTFModel;exports.isHostedOnGlitch=e.isHostedOnGlitch;exports.isHotReloadEnabled=e.isHotReloadEnabled;exports.isHotReloading=e.isHotReloading;exports.isIPad=e.isIPad;exports.isIconElement=e.isIconElement;exports.isLocalNetwork=e.isLocalNetwork;exports.isMacOS=e.isMacOS;exports.isMobileDevice=e.isMobileDevice;exports.isMozillaXR=e.isMozillaXR;exports.isQuest=e.isQuest;exports.isResourceTrackingEnabled=e.isResourceTrackingEnabled;exports.isSafari=e.isSafari;exports.isUsingInstancing=e.isUsingInstancing;exports.isiOS=e.isiOS;exports.isiPad=e.isiPad;exports.loadAsset=e.loadAsset;exports.loadPMREM=e.loadPMREM;exports.loadSync=e.loadSync;exports.logHierarchy=e.logHierarchy;exports.lookAtInverse=e.lookAtInverse;exports.lookAtObject=e.lookAtObject;exports.lookAtScreenPoint=e.lookAtScreenPoint;exports.makeId=e.makeId;exports.makeIdFromRandomWords=e.makeIdFromRandomWords;exports.makeNameSafeForUSD=e.makeNameSafe;exports.markAsInstancedRendered=e.markAsInstancedRendered;exports.microphonePermissionsGranted=e.microphonePermissionsGranted;exports.nameof=e.nameof;exports.nameofFactory=e.nameofFactory;exports.objectSerializer=e.objectSerializer;exports.offXRSessionEnd=e.offXRSessionEnd;exports.offXRSessionStart=e.offXRSessionStart;exports.onAfterRender=e.onAfterRender;exports.onBeforeRender=e.onBeforeRender;exports.onClear=e.onClear;exports.onDestroy=e.onDestroy;exports.onInitialized=e.onInitialized;exports.onStart=e.onStart;exports.onUpdate=e.onUpdate;exports.onXRSessionEnd=e.onXRSessionEnd;exports.onXRSessionStart=e.onXRSessionStart;exports.parseSync=e.parseSync;exports.placeOnSurface=e.placeOnSurface;exports.postprocessFBXMaterials=e.postprocessFBXMaterials;exports.prefix=e.prefix;exports.pushState=e.pushState;exports.randomNumber=e.randomNumber;exports.registerBinaryType=e.registerBinaryType;exports.registerComponent=e.registerComponent;exports.registerComponentExtension=e.registerComponentExtension;exports.registerCustomEffectType=e.registerCustomEffectType;exports.registerExportExtensions=e.registerExportExtensions;exports.registerExtensions=e.registerExtensions;exports.registerHotReloadType=e.registerHotReloadType;exports.registerLoader=e.registerLoader;exports.registerPrefabProvider=e.registerPrefabProvider;exports.registerPrototypeExtensions=e.registerPrototypeExtensions;exports.registerType=e.registerType;exports.relativePathPrefix=e.relativePathPrefix;exports.removeAttributeChangeCallback=e.removeAttributeChangeCallback;exports.removeComponent=e.removeComponent;exports.removeCustomImportExtensionType=e.removeCustomImportExtensionType;exports.removePatch=e.removePatch;exports.resolveUrl=e.resolveUrl;exports.sanitizeString=e.sanitizeString;exports.saveImage=e.saveImage;exports.screenshot=e.screenshot;exports.screenshot2=e.screenshot2;exports.sendDestroyed=e.sendDestroyed;exports.serializable=e.serializable;exports.serializeObject=e.serializeObject;exports.serializeable=e.serializeable;exports.setActive=e.setActive;exports.setAllowBalloonMessages=e.setAllowBalloonMessages;exports.setAllowOverlayMessages=e.setAllowOverlayMessages;exports.setAutoFitEnabled=e.setAutoFitEnabled;exports.setCameraController=e.setCameraController;exports.setDestroyed=e.setDestroyed;exports.setDevEnvironment=e.setDevEnvironment;exports.setDisposable=e.setDisposable;exports.setDontDestroy=e.setDontDestroy;exports.setOrAddParamsToUrl=e.setOrAddParamsToUrl;exports.setParam=e.setParam;exports.setParamWithoutReload=e.setParamWithoutReload;exports.setPeerOptions=e.setPeerOptions;exports.setResourceTrackingEnabled=e.setResourceTrackingEnabled;exports.setState=e.setState;exports.setVisibleInCustomShadowRendering=e.setVisibleInCustomShadowRendering;exports.setWorldEuler=e.setWorldEuler;exports.setWorldPosition=e.setWorldPosition;exports.setWorldPositionXYZ=e.setWorldPositionXYZ;exports.setWorldQuaternion=e.setWorldQuaternion;exports.setWorldQuaternionXYZW=e.setWorldQuaternionXYZW;exports.setWorldRotation=e.setWorldRotation;exports.setWorldRotationXYZ=e.setWorldRotationXYZ;exports.setWorldScale=e.setWorldScale;exports.showBalloonError=e.showBalloonError;exports.showBalloonMessage=e.showBalloonMessage;exports.showBalloonWarning=e.showBalloonWarning;exports.showDebugConsole=e.showDebugConsole;exports.slerp=e.slerp;exports.syncDestroy=e.syncDestroy;exports.syncField=e.syncField;exports.syncInstantiate=e.syncInstantiate;exports.textureToCanvas=e.textureToCanvas;exports.toSourceId=e.toSourceId;exports.tryCastBinary=e.tryCastBinary;exports.tryDetermineMimetypeFromBinary=e.tryDetermineMimetypeFromBinary;exports.tryDetermineMimetypeFromURL=e.tryDetermineMimetypeFromURL;exports.tryFindObject=e.tryFindObject;exports.tryGetGuid=e.tryGetGuid;exports.unregisterHotReloadType=e.unregisterHotReloadType;exports.unwatchWrite=e.unwatchWrite;exports.useForAutoFit=e.useForAutoFit;exports.validate=e.validate;exports.watchWrite=e.watchWrite;exports.NEEDLE_progressive=i.NEEDLE_progressive;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./needle-engine.bundle-DGrKAD9m.umd.cjs"),i=require("./gltf-progressive-BURrJW0U.umd.cjs"),a=require("./three-BW2s1Yl-.umd.cjs"),o={VERSION:e.VERSION,Context:e.Context,NeedleXRSession:e.NeedleXRSession,assets:{loadFromURL:e.loadAsset},types:e.TypeStore,onStart:e.onStart,onUpdate:e.onUpdate,onBeforeRender:e.onBeforeRender,onAfterRender:e.onAfterRender,onInitializedContext:e.onInitialized,onDestroyContext:e.onDestroy,onClearContext:e.onClear};globalThis.Needle?.VERSION!==void 0&&console.warn(`Needle Engine is already imported: ${globalThis.Needle.VERSION}`);function n(t){for(const r in t)o[r]=t[r]}n(e.Component);n(e.Components);for(const t of Object.getOwnPropertyNames(e.GameObject))switch(t){case"prototype":case"constructor":case"length":case"name":continue;default:o[t]=e.GameObject[t];break}if(!globalThis.Needle)globalThis.Needle=o;else for(const t in o)globalThis.Needle[t]=o[t];globalThis.THREE?console.warn("Three.js is already imported"):globalThis.THREE=a.THREE;exports.$physicsKey=e.$physicsKey;exports.ActionBuilder=e.ActionBuilder;exports.ActionCollection=e.ActionCollection;exports.ActionModel=e.ActionModel;exports.Addressables=e.Addressables;exports.AlignmentConstraint=e.AlignmentConstraint;exports.AmbientMode=e.AmbientMode;exports.Animation=e.Animation;exports.AnimationCurve=e.AnimationCurve;exports.AnimationExtension=e.AnimationExtension;exports.AnimationTrackHandler=e.AnimationTrackHandler;exports.AnimationUtils=e.AnimationUtils;exports.Animator=e.Animator;exports.AnimatorConditionMode=e.AnimatorConditionMode;exports.AnimatorController=e.AnimatorController;exports.AnimatorControllerParameterType=e.AnimatorControllerParameterType;exports.AnimatorStateInfo=e.AnimatorStateInfo;exports.Antialiasing=e.Antialiasing;exports.Application=e.Application;exports.AssetDatabase=e.AssetDatabase;exports.AssetReference=e.AssetReference;exports.Attractor=e.Attractor;exports.AudioExtension=e.AudioExtension;exports.AudioListener=e.AudioListener;exports.AudioSource=e.AudioSource;exports.AudioTrackHandler=e.AudioTrackHandler;exports.Avatar=e.Avatar;exports.AvatarBlink_Simple=e.AvatarBlink_Simple;exports.AvatarEyeLook_Rotation=e.AvatarEyeLook_Rotation;exports.AvatarLoader=e.AvatarLoader;exports.AvatarMarker=e.AvatarMarker;exports.AvatarModel=e.AvatarModel;exports.Avatar_Brain_LookAt=e.Avatar_Brain_LookAt;exports.Avatar_MouthShapes=e.Avatar_MouthShapes;exports.Avatar_MustacheShake=e.Avatar_MustacheShake;exports.Avatar_POI=e.Avatar_POI;exports.Axes=e.Axes;exports.AxesHelper=e.AxesHelper;exports.BUILD_TIME=e.BUILD_TIME;exports.BaseUIComponent=e.BaseUIComponent;exports.BasicIKConstraint=e.BasicIKConstraint;exports.BehaviorExtension=e.BehaviorExtension;exports.BehaviorModel=e.BehaviorModel;exports.Behaviour=e.Component$1;Object.defineProperty(exports,"BlobStorage",{enumerable:!0,get:()=>e.BlobStorage});exports.BloomEffect=e.BloomEffect;exports.BoxCollider=e.BoxCollider;exports.BoxGizmo=e.BoxGizmo;exports.BoxHelperComponent=e.BoxHelperComponent;exports.Button=e.Button;exports.ButtonsFactory=e.ButtonsFactory;exports.CallDirection=e.CallDirection;exports.CallInfo=e.CallInfo;exports.Camera=e.Camera;exports.CameraTargetReachedEvent=e.CameraTargetReachedEvent;exports.Canvas=e.Canvas;exports.CanvasGroup=e.CanvasGroup;exports.CapsuleCollider=e.CapsuleCollider;exports.ChangeMaterialOnClick=e.ChangeMaterialOnClick;exports.ChangeTransformOnClick=e.ChangeTransformOnClick;exports.CharacterController=e.CharacterController;exports.CharacterControllerInput=e.CharacterControllerInput;exports.ChromaticAberration=e.ChromaticAberration;exports.CircularBuffer=e.CircularBuffer;exports.ClearFlags=e.ClearFlags;exports.ClickThrough=e.ClickThrough;exports.ClipExtrapolation=e.ClipExtrapolation;exports.Collider=e.Collider;exports.Collision=e.Collision;exports.CollisionDetectionMode=e.CollisionDetectionMode;exports.ColorAdjustments=e.ColorAdjustments;exports.ColorBySpeedModule=e.ColorBySpeedModule;exports.ColorOverLifetimeModule=e.ColorOverLifetimeModule;exports.Component=e.Component$1;exports.ComponentLifecycleEvents=e.ComponentLifecycleEvents;exports.ConnectionEvents=e.ConnectionEvents;exports.ContactPoint=e.ContactPoint;exports.ContactShadows=e.ContactShadows;exports.Context=e.Context;exports.ContextArgs=e.ContextArgs;exports.ContextEvent=e.ContextEvent;exports.ContextRegistry=e.ContextRegistry;exports.ControlTrackHandler=e.ControlTrackHandler;exports.CursorFollow=e.CursorFollow;exports.CustomBranding=e.CustomBranding;exports.CustomShader=e.CustomShader;exports.DefaultReflectionMode=e.DefaultReflectionMode;exports.Deletable=e.Deletable;exports.DeleteBox=e.DeleteBox;exports.DepthOfField=e.DepthOfField;exports.DeviceFlag=e.DeviceFlag;Object.defineProperty(exports,"DeviceUtilities",{enumerable:!0,get:()=>e.DeviceUtilities});exports.DocumentExtension=e.DocumentExtension;exports.DragControls=e.DragControls;exports.DragMode=e.DragMode;exports.DropListener=e.DropListener;exports.Duplicatable=e.Duplicatable;exports.EffectWrapper=e.EffectWrapper;exports.EmissionModule=e.EmissionModule;exports.EmphasizeOnClick=e.EmphasizeOnClick;exports.EngineLoadingView=e.EngineLoadingView;exports.EnvironmentScene=e.EnvironmentScene;exports.EventList=e.EventList;exports.EventListEvent=e.EventListEvent;exports.EventSystem=e.EventSystem;exports.EventTrigger=e.EventTrigger;exports.FieldWithDefault=e.FieldWithDefault;exports.FileReference=e.FileReference;exports.FileReferenceSerializer=e.FileReferenceSerializer;exports.FileSpawnModel=e.FileSpawnModel;exports.File_Event=e.File_Event;exports.FixedJoint=e.FixedJoint;exports.Fog=e.Fog;exports.FrameEvent=e.FrameEvent;exports.GENERATOR=e.GENERATOR;exports.GameObject=e.GameObject;exports.Gizmos=e.Gizmos;exports.GltfExport=e.GltfExport;exports.GltfExportBox=e.GltfExportBox;exports.Gradient=e.Gradient;exports.Graphic=e.Graphic;exports.GraphicRaycaster=e.GraphicRaycaster;exports.Graphics=e.Graphics;exports.GridHelper=e.GridHelper;exports.GridLayoutGroup=e.GridLayoutGroup;exports.GroundProjectedEnv=e.GroundProjectedEnv;exports.GroupActionModel=e.GroupActionModel;exports.HideFlags=e.HideFlags;exports.HideOnStart=e.HideOnStart;exports.HingeJoint=e.HingeJoint;exports.HorizontalLayoutGroup=e.HorizontalLayoutGroup;exports.HostData=e.HostData;Object.defineProperty(exports,"HoverAnimation",{enumerable:!0,get:()=>e.HoverAnimation});exports.Image=e.Image;exports.ImageReference=e.ImageReference;exports.ImageReferenceSerializer=e.ImageReferenceSerializer;exports.InheritVelocityModule=e.InheritVelocityModule;exports.Input=e.Input;exports.InputEventQueue=e.InputEventQueue;exports.InputEvents=e.InputEvents;exports.InputField=e.InputField;exports.InstanceHandle=e.InstanceHandle;exports.InstancingHandler=e.InstancingHandler;exports.InstancingUtil=e.InstancingUtil;exports.InstantiateEvent=e.InstantiateEvent;exports.InstantiateIdProvider=e.InstantiateIdProvider;exports.InstantiateOptions=e.InstantiateOptions;exports.Interactable=e.Interactable;Object.defineProperty(exports,"InternalScreenshotUtils",{enumerable:!0,get:()=>e.InternalScreenshotUtils});exports.JoinedRoomResponse=e.JoinedRoomResponse;exports.KeyEventArgs=e.KeyEventArgs;exports.Keyframe=e.Keyframe;exports.LODGroup=e.LODGroup;exports.LODModel=e.LODModel;exports.LeftRoomResponse=e.LeftRoomResponse;exports.Light=e.Light;exports.LightData=e.LightData;exports.LimitVelocityOverLifetimeModule=e.LimitVelocityOverLifetimeModule;exports.LoadingElementOptions=e.LoadingElementOptions;exports.LogStats=e.LogStats;exports.LogType=e.LogType;exports.LookAt=e.LookAt;exports.LookAtConstraint=e.LookAtConstraint;exports.MainModule=e.MainModule;exports.MarkerTrackHandler=e.MarkerTrackHandler;exports.MarkerType=e.MarkerType;exports.MaskableGraphic=e.MaskableGraphic;Object.defineProperty(exports,"MaterialX",{enumerable:!0,get:()=>e.MaterialX});exports.Mathf=e.Mathf;exports.MeshCollider=e.MeshCollider;exports.MeshRenderer=e.MeshRenderer;exports.MinMaxCurve=e.MinMaxCurve;exports.MinMaxGradient=e.MinMaxGradient;Object.defineProperty(exports,"NEEDLE_ENGINE_FEATURE_FLAGS",{enumerable:!0,get:()=>e.NEEDLE_ENGINE_FEATURE_FLAGS});Object.defineProperty(exports,"NEEDLE_ENGINE_MODULES",{enumerable:!0,get:()=>e.MODULES});exports.NEKeyboardEvent=e.NEKeyboardEvent;exports.NEPointerEvent=e.NEPointerEvent;exports.NeedleButtonElement=e.NeedleButtonElement;exports.NeedleEngine=e.ContextRegistry;Object.defineProperty(exports,"NeedleEngineModelLoader",{enumerable:!0,get:()=>e.NeedleEngineModelLoader});exports.NeedleEngineWebComponent=e.NeedleEngineWebComponent;exports.NeedleMenu=e.NeedleMenu;exports.NeedlePatchesKey=e.NeedlePatchesKey;exports.NeedleUSDZExporter=e.USDZExporter;exports.NeedleXRController=e.NeedleXRController;exports.NeedleXRSession=e.NeedleXRSession;exports.NeedleXRSync=e.NeedleXRSync;exports.NeedleXRUtils=e.NeedleXRUtils;exports.NestedGltf=e.NestedGltf;exports.NetworkConnection=e.NetworkConnection;exports.NetworkedStreamEvents=e.NetworkedStreamEvents;exports.NetworkedStreams=e.NetworkedStreams;exports.Networking=e.Networking;exports.NewInstanceModel=e.NewInstanceModel;exports.NoiseModule=e.NoiseModule;exports.ObjectRaycaster=e.ObjectRaycaster;exports.ObjectUtils=e.ObjectUtils;exports.OffsetConstraint=e.OffsetConstraint;exports.OneEuroFilter=e.OneEuroFilter;exports.OneEuroFilterXYZ=e.OneEuroFilterXYZ;exports.OpenURL=e.OpenURL;exports.OrbitControls=e.OrbitControls;exports.Outline=e.Outline;exports.OwnershipEvent=e.OwnershipEvent;exports.OwnershipModel=e.OwnershipModel;exports.PUBLIC_KEY=e.PUBLIC_KEY;exports.Padding=e.Padding;exports.ParticleBurst=e.ParticleBurst;exports.ParticleSubEmitter=e.ParticleSubEmitter;exports.ParticleSystem=e.ParticleSystem;exports.ParticleSystemBaseBehaviour=e.ParticleSystemBaseBehaviour;exports.ParticleSystemRenderer=e.ParticleSystemRenderer;exports.ParticleSystemShapeType=e.ParticleSystemShapeType;exports.PeerHandle=e.PeerHandle;exports.PeerNetworking=e.PeerNetworking;exports.Physics=e.Physics;exports.PhysicsExtension=e.PhysicsExtension;exports.PhysicsMaterialCombine=e.PhysicsMaterialCombine;exports.PixelationEffect=e.PixelationEffect;exports.PlayAnimationOnClick=e.PlayAnimationOnClick;exports.PlayAudioOnClick=e.PlayAudioOnClick;exports.PlayableDirector=e.PlayableDirector;exports.PlayerColor=e.PlayerColor;exports.PlayerState=e.PlayerState;exports.PlayerStateEvent=e.PlayerStateEvent;exports.PlayerSync=e.PlayerSync;exports.PlayerView=e.PlayerView;exports.PlayerViewManager=e.PlayerViewManager;exports.PointerEventData=e.PointerEventData;exports.PointerType=e.PointerType;exports.PostProcessingEffect=e.PostProcessingEffect;exports.PostProcessingEffectOrder=e.PostProcessingEffectOrder;exports.PostProcessingHandler=e.PostProcessingHandler;exports.PostProcessingManager=e.Volume;exports.PreliminaryAction=e.PreliminaryAction;exports.PreliminaryTrigger=e.PreliminaryTrigger;Object.defineProperty(exports,"PreviewHelper",{enumerable:!0,get:()=>e.PreviewHelper});exports.PrimitiveType=e.PrimitiveType;exports.Progress=e.Progress;exports.PromiseAllWithErrors=e.PromiseAllWithErrors;exports.PromiseErrorResult=e.PromiseErrorResult;exports.RGBAColor=e.RGBAColor;exports.RapierPhysics=e.RapierPhysics;exports.RawImage=e.RawImage;exports.RaycastOptions=e.RaycastOptions;exports.Rect=e.Rect;exports.RectTransform=e.RectTransform;exports.ReflectionProbe=e.ReflectionProbe;exports.RegisteredAnimationInfo=e.RegisteredAnimationInfo;exports.RemoteSkybox=e.RemoteSkybox;exports.RenderTexture=e.RenderTexture;exports.RenderTextureSerializer=e.RenderTextureSerializer;exports.Renderer=e.Renderer;exports.RendererData=e.RendererData;exports.RendererLightmap=e.RendererLightmap;exports.Rigidbody=e.Rigidbody;exports.RigidbodyConstraints=e.RigidbodyConstraints;exports.RoomEvents=e.RoomEvents;exports.RotationBySpeedModule=e.RotationBySpeedModule;exports.RotationOverLifetimeModule=e.RotationOverLifetimeModule;exports.SceneLightSettings=e.SceneLightSettings;exports.SceneSwitcher=e.SceneSwitcher;exports.ScreenCapture=e.ScreenCapture;exports.ScreenSpaceAmbientOcclusion=e.ScreenSpaceAmbientOcclusion;exports.ScreenSpaceAmbientOcclusionN8=e.ScreenSpaceAmbientOcclusionN8;exports.ScrollFollow=e.ScrollFollow;exports.SeeThrough=e.SeeThrough;exports.SendQueue=e.SendQueue;exports.SerializationContext=e.SerializationContext;exports.SetActiveOnClick=e.SetActiveOnClick;exports.ShadowCatcher=e.ShadowCatcher;exports.ShapeModule=e.ShapeModule;exports.ShapeOverlapResult=e.ShapeOverlapResult;exports.SharpeningEffect=e.SharpeningEffect;exports.SignalAsset=e.SignalAsset;exports.SignalReceiver=e.SignalReceiver;exports.SignalReceiverEvent=e.SignalReceiverEvent;exports.SignalTrackHandler=e.SignalTrackHandler;exports.Size=e.Size;exports.SizeBySpeedModule=e.SizeBySpeedModule;exports.SizeOverLifetimeModule=e.SizeOverLifetimeModule;exports.SkinnedMeshRenderer=e.SkinnedMeshRenderer;exports.SmoothFollow=e.SmoothFollow;exports.SpatialGrabRaycaster=e.SpatialGrabRaycaster;exports.SpatialHtml=e.SpatialHtml;exports.SpatialTrigger=e.SpatialTrigger;exports.SpatialTriggerReceiver=e.SpatialTriggerReceiver;exports.SpectatorCamera=e.SpectatorCamera;exports.SphereCollider=e.SphereCollider;exports.SphereIntersection=e.SphereIntersection;exports.SplineContainer=e.SplineContainer;exports.SplineData=e.SplineData;Object.defineProperty(exports,"SplineUtils",{enumerable:!0,get:()=>e.SplineUtils});exports.SplineWalker=e.SplineWalker;exports.Sprite=e.Sprite;exports.SpriteData=e.SpriteData;exports.SpriteRenderer=e.SpriteRenderer;exports.SpriteSheet=e.SpriteSheet;exports.StateMachineBehaviour=e.StateMachineBehaviour;exports.StreamEndedEvent=e.StreamEndedEvent;exports.StreamReceivedEvent=e.StreamReceivedEvent;exports.SubEmitterSystem=e.SubEmitterSystem;exports.SyncedCamera=e.SyncedCamera;exports.SyncedRoom=e.SyncedRoom;exports.SyncedTransform=e.SyncedTransform;exports.TapGestureTrigger=e.TapGestureTrigger;exports.TeleportTarget=e.TeleportTarget;exports.TestRunner=e.TestRunner;exports.TestSceneUtils=e.TestSceneUtils;exports.TestSimulateUserData=e.TestSimulateUserData;exports.Text=e.Text;exports.TextBuilder=e.TextBuilder;exports.TextExtension=e.TextExtension;exports.TextureSheetAnimationModule=e.TextureSheetAnimationModule;exports.TiltShiftEffect=e.TiltShiftEffect;exports.Time=e.Time;exports.ToneMappingEffect=e.ToneMappingEffect;exports.TrackHandler=e.TrackHandler;exports.TrackType=e.TrackType;exports.TrailModule=e.TrailModule;exports.TransformData=e.TransformData;exports.TransformGizmo=e.TransformGizmo;exports.TriggerBuilder=e.TriggerBuilder;exports.TriggerModel=e.TriggerModel;exports.TypeStore=e.TypeStore;exports.UIRaycastUtils=e.UIRaycastUtils;exports.UIRootComponent=e.UIRootComponent;exports.USDDocument=e.USDDocument;exports.USDObject=e.USDObject;exports.USDWriter=e.USDWriter;exports.USDZExporter=e.USDZExporter$1;exports.USDZText=e.USDZText;exports.USDZUIExtension=e.USDZUIExtension;exports.UriSerializer=e.UriSerializer;exports.UsageMarker=e.UsageMarker;exports.UserJoinedOrLeftRoomModel=e.UserJoinedOrLeftRoomModel;exports.VERSION=e.VERSION;exports.VariantAction=e.VariantAction;exports.VelocityOverLifetimeModule=e.VelocityOverLifetimeModule;exports.VerticalLayoutGroup=e.VerticalLayoutGroup;exports.VideoPlayer=e.VideoPlayer;Object.defineProperty(exports,"ViewBox",{enumerable:!0,get:()=>e.ViewBox});exports.ViewDevice=e.ViewDevice;exports.Vignette=e.Vignette;exports.VisibilityAction=e.VisibilityAction;exports.Voip=e.Voip;exports.Volume=e.Volume;exports.VolumeParameter=e.VolumeParameter;exports.VolumeProfile=e.VolumeProfile;exports.WaitForFrames=e.WaitForFrames;exports.WaitForPromise=e.WaitForPromise;exports.WaitForSeconds=e.WaitForSeconds;exports.Watch=e.Watch;exports.WebARCameraBackground=e.WebARCameraBackground;exports.WebARSessionRoot=e.WebARSessionRoot;exports.WebXR=e.WebXR;exports.WebXRButtonFactory=e.WebXRButtonFactory;exports.WebXRImageTracking=e.WebXRImageTracking;exports.WebXRImageTrackingModel=e.WebXRImageTrackingModel;exports.WebXRPlaneTracking=e.WebXRPlaneTracking;exports.WebXRTrackedImage=e.WebXRTrackedImage;exports.XRControllerFollow=e.XRControllerFollow;exports.XRControllerModel=e.XRControllerModel;exports.XRControllerMovement=e.XRControllerMovement;exports.XRFlag=e.XRFlag;exports.XRRig=e.XRRig;exports.XRState=e.XRState;exports.XRStateFlag=e.XRStateFlag;exports.__Ignore=e.__Ignore;exports.__internalNotifyObjectDestroyed=e.__internalNotifyObjectDestroyed;exports.activeInHierarchyFieldName=e.activeInHierarchyFieldName;exports.addAttributeChangeCallback=e.addAttributeChangeCallback;exports.addComponent=e.addComponent;exports.addCustomExtensionPlugin=e.addCustomExtensionPlugin;exports.addNewComponent=e.addNewComponent;exports.addPatch=e.addPatch;exports.apply=e.apply;exports.applyHMRChanges=e.applyHMRChanges;exports.applyPrototypeExtensions=e.applyPrototypeExtensions;exports.beginListenDestroy=e.beginListenDestroy;exports.beginListenInstantiate=e.beginListenInstantiate;exports.binaryIdentifierCasts=e.binaryIdentifierCasts;exports.build_scene_functions=e.build_scene_functions;exports.builtinComponentKeyName=e.builtinComponentKeyName;exports.calculateProgress01=e.calculateProgress01;exports.clearBalloonMessages=e.clearMessages;exports.clearOverlayMessages=e.clearMessages;exports.colorSerializer=e.colorSerializer;exports.compareAssociation=e.compareAssociation;exports.componentSerializer=e.componentSerializer;exports.copyTexture=e.copyTexture;exports.createMotion=e.createMotion;exports.debugNet=e.debugNet;exports.debugOwner=e.debugOwner;exports.decompressGpuTexture=e.decompressGpuTexture;exports.deepClone=e.deepClone;exports.delay=e.delay;exports.delayForFrames=e.delayForFrames;exports.deserializeObject=e.deserializeObject;exports.destroy=e.destroy;exports.destroyComponentInstance=e.destroyComponentInstance;exports.determineMimeTypeFromExtension=e.determineMimeTypeFromExtension;exports.disposeObjectResources=e.disposeObjectResources;exports.disposeStream=e.disposeStream;exports.editorGuidKeyName=e.editorGuidKeyName;exports.enableSpatialConsole=e.enableSpatialConsole;exports.euler=e.euler;exports.eventListSerializer=e.eventListSerializer;exports.exportAsGLTF=e.exportAsGLTF;exports.findByGuid=e.findByGuid;exports.findObjectOfType=e.findObjectOfType;exports.findObjectsOfType=e.findObjectsOfType;exports.findResourceUsers=e.findResourceUsers;exports.fitCamera=e.fitCamera;exports.fitObjectIntoVolume=e.fitObjectIntoVolume;exports.foreachComponent=e.foreachComponent;exports.foreachComponentEnumerator=e.foreachComponentEnumerator;exports.forward=e.forward;exports.generateQRCode=e.generateQRCode;exports.generateSeed=e.generateSeed;exports.getBoundingBox=e.getBoundingBox;exports.getCameraController=e.getCameraController;exports.getComponent=e.getComponent;exports.getComponentInChildren=e.getComponentInChildren;exports.getComponentInParent=e.getComponentInParent;exports.getComponents=e.getComponents;exports.getComponentsInChildren=e.getComponentsInChildren;exports.getComponentsInParent=e.getComponentsInParent;exports.getFormattedDate=e.getFormattedDate;exports.getIconElement=e.getIconElement;exports.getIconTexture=e.getIconTexture;exports.getLoader=e.getLoader;exports.getOrAddComponent=e.getOrAddComponent;exports.getParam=e.getParam;exports.getParentHierarchyPath=e.getParentHierarchyPath;exports.getPath=e.getPath;exports.getPeerOptions=e.getPeerOptions;exports.getPeerjsInstance=e.getPeerjsInstance;exports.getResourceUserCount=e.getResourceUserCount;exports.getTempColor=e.getTempColor;exports.getTempQuaternion=e.getTempQuaternion;exports.getTempVector=e.getTempVector;exports.getUrlParams=e.getUrlParams;exports.getVisibleInCustomShadowRendering=e.getVisibleInCustomShadowRendering;exports.getWorldDirection=e.getWorldDirection;exports.getWorldEuler=e.getWorldEuler;exports.getWorldPosition=e.getWorldPosition;exports.getWorldQuaternion=e.getWorldQuaternion;exports.getWorldRotation=e.getWorldRotation;exports.getWorldScale=e.getWorldScale;exports.hasCommercialLicense=e.hasCommercialLicense;exports.hasIndieLicense=e.hasIndieLicense;exports.hasPointerEventComponent=e.hasPointerEventComponent;exports.hasProLicense=e.hasProLicense;exports.hideDebugConsole=e.hideDebugConsole;exports.imageToCanvas=e.imageToCanvas;exports.instantiate=e.instantiate;exports.invokeLoadedImportPluginHooks=e.invokeLoadedImportPluginHooks;exports.invokeXRSessionEnd=e.invokeXRSessionEnd;exports.invokeXRSessionStart=e.invokeXRSessionStart;exports.isActiveInHierarchy=e.isActiveInHierarchy;exports.isActiveSelf=e.isActiveSelf;exports.isAndroidDevice=e.isAndroidDevice;exports.isAnimationAction=e.isAnimationAction;exports.isComponent=e.isComponent;exports.isDebugMode=e.isDebugMode;exports.isDesktop=e.isDesktop;exports.isDestroyed=e.isDestroyed;exports.isDevEnvironment=e.isDevEnvironment;exports.isDisposed=e.isDisposed;exports.isExporting=e.isExporting;exports.isGLTFModel=e.isGLTFModel;exports.isHostedOnGlitch=e.isHostedOnGlitch;exports.isHotReloadEnabled=e.isHotReloadEnabled;exports.isHotReloading=e.isHotReloading;exports.isIPad=e.isIPad;exports.isIconElement=e.isIconElement;exports.isLocalNetwork=e.isLocalNetwork;exports.isMacOS=e.isMacOS;exports.isMobileDevice=e.isMobileDevice;exports.isMozillaXR=e.isMozillaXR;exports.isQuest=e.isQuest;exports.isResourceTrackingEnabled=e.isResourceTrackingEnabled;exports.isSafari=e.isSafari;exports.isUsingInstancing=e.isUsingInstancing;exports.isiOS=e.isiOS;exports.isiPad=e.isiPad;exports.loadAsset=e.loadAsset;exports.loadPMREM=e.loadPMREM;exports.loadSync=e.loadSync;exports.logHierarchy=e.logHierarchy;exports.lookAtInverse=e.lookAtInverse;exports.lookAtObject=e.lookAtObject;exports.lookAtScreenPoint=e.lookAtScreenPoint;exports.makeId=e.makeId;exports.makeIdFromRandomWords=e.makeIdFromRandomWords;exports.makeNameSafeForUSD=e.makeNameSafe;exports.markAsInstancedRendered=e.markAsInstancedRendered;exports.microphonePermissionsGranted=e.microphonePermissionsGranted;exports.nameof=e.nameof;exports.nameofFactory=e.nameofFactory;exports.objectSerializer=e.objectSerializer;exports.offXRSessionEnd=e.offXRSessionEnd;exports.offXRSessionStart=e.offXRSessionStart;exports.onAfterRender=e.onAfterRender;exports.onBeforeRender=e.onBeforeRender;exports.onClear=e.onClear;exports.onDestroy=e.onDestroy;exports.onInitialized=e.onInitialized;exports.onStart=e.onStart;exports.onUpdate=e.onUpdate;exports.onXRSessionEnd=e.onXRSessionEnd;exports.onXRSessionStart=e.onXRSessionStart;exports.parseSync=e.parseSync;exports.placeOnSurface=e.placeOnSurface;exports.postprocessFBXMaterials=e.postprocessFBXMaterials;exports.prefix=e.prefix;exports.pushState=e.pushState;exports.randomNumber=e.randomNumber;exports.registerBinaryType=e.registerBinaryType;exports.registerComponent=e.registerComponent;exports.registerComponentExtension=e.registerComponentExtension;exports.registerCustomEffectType=e.registerCustomEffectType;exports.registerExportExtensions=e.registerExportExtensions;exports.registerExtensions=e.registerExtensions;exports.registerHotReloadType=e.registerHotReloadType;exports.registerLoader=e.registerLoader;exports.registerPrefabProvider=e.registerPrefabProvider;exports.registerPrototypeExtensions=e.registerPrototypeExtensions;exports.registerType=e.registerType;exports.relativePathPrefix=e.relativePathPrefix;exports.removeAttributeChangeCallback=e.removeAttributeChangeCallback;exports.removeComponent=e.removeComponent;exports.removeCustomImportExtensionType=e.removeCustomImportExtensionType;exports.removePatch=e.removePatch;exports.resolveUrl=e.resolveUrl;exports.sanitizeString=e.sanitizeString;exports.saveImage=e.saveImage;exports.screenshot=e.screenshot;exports.screenshot2=e.screenshot2;exports.sendDestroyed=e.sendDestroyed;exports.serializable=e.serializable;exports.serializeObject=e.serializeObject;exports.serializeable=e.serializeable;exports.setActive=e.setActive;exports.setAllowBalloonMessages=e.setAllowBalloonMessages;exports.setAllowOverlayMessages=e.setAllowOverlayMessages;exports.setAutoFitEnabled=e.setAutoFitEnabled;exports.setCameraController=e.setCameraController;exports.setDestroyed=e.setDestroyed;exports.setDevEnvironment=e.setDevEnvironment;exports.setDisposable=e.setDisposable;exports.setDontDestroy=e.setDontDestroy;exports.setOrAddParamsToUrl=e.setOrAddParamsToUrl;exports.setParam=e.setParam;exports.setParamWithoutReload=e.setParamWithoutReload;exports.setPeerOptions=e.setPeerOptions;exports.setResourceTrackingEnabled=e.setResourceTrackingEnabled;exports.setState=e.setState;exports.setVisibleInCustomShadowRendering=e.setVisibleInCustomShadowRendering;exports.setWorldEuler=e.setWorldEuler;exports.setWorldPosition=e.setWorldPosition;exports.setWorldPositionXYZ=e.setWorldPositionXYZ;exports.setWorldQuaternion=e.setWorldQuaternion;exports.setWorldQuaternionXYZW=e.setWorldQuaternionXYZW;exports.setWorldRotation=e.setWorldRotation;exports.setWorldRotationXYZ=e.setWorldRotationXYZ;exports.setWorldScale=e.setWorldScale;exports.showBalloonError=e.showBalloonError;exports.showBalloonMessage=e.showBalloonMessage;exports.showBalloonWarning=e.showBalloonWarning;exports.showDebugConsole=e.showDebugConsole;exports.slerp=e.slerp;exports.syncDestroy=e.syncDestroy;exports.syncField=e.syncField;exports.syncInstantiate=e.syncInstantiate;exports.textureToCanvas=e.textureToCanvas;exports.toSourceId=e.toSourceId;exports.tryCastBinary=e.tryCastBinary;exports.tryDetermineMimetypeFromBinary=e.tryDetermineMimetypeFromBinary;exports.tryDetermineMimetypeFromURL=e.tryDetermineMimetypeFromURL;exports.tryFindObject=e.tryFindObject;exports.tryGetGuid=e.tryGetGuid;exports.unregisterHotReloadType=e.unregisterHotReloadType;exports.unwatchWrite=e.unwatchWrite;exports.useForAutoFit=e.useForAutoFit;exports.validate=e.validate;exports.watchWrite=e.watchWrite;exports.NEEDLE_progressive=i.NEEDLE_progressive;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@needle-tools/engine",
3
- "version": "4.13.0-next.a59e904",
3
+ "version": "4.13.0-next.e6dcd1c",
4
4
  "description": "Needle Engine is a web-based runtime for 3D apps. It runs on your machine for development with great integrations into editors like Unity or Blender - and can be deployed onto any device! It is flexible, extensible and networking and XR are built-in.",
5
5
  "main": "dist/needle-engine.min.js",
6
6
  "exports": {