@needle-tools/engine 4.16.0-next.35df6b8 → 4.16.0

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
- `,Do?.prepend(i),s===!0&&ev()<=0&&_v(),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.":"")),_l=!1,Qt=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function qS(){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"),Qt?.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 Rp="padding: 10px; font-family: monospace;",Jy="margin-bottom: 10px;",Lo="margin-bottom: 10px; margin-top: 15px;",XS="width: 100%; border-collapse: collapse; border: 1px solid rgba(0,0,0,0.1); table-layout: fixed;",bv="border: 1px solid rgba(0,0,0,0.1); padding: 5px;",QS=bv,YS=bv+" word-break: break-all;";function Pn(s,e=!1){e&&s.sort((i,n)=>(n.value?1:0)-(i.value?1:0));let t=`<table style='${XS}'>`;t+="<tbody>";for(const i of s){const n=typeof i.value=="boolean"?i.value?"✅":"❌":i.value;t+=`<tr><td style='${QS}'>${i.label}</td><td style='${YS}'>${n}</td></tr>`}return t+="</tbody></table>",t}function vv(){try{if(document.createElement("canvas").getContext("webgl2"))return"✅"}catch{}return"❌"}function KS(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("device-utilities","📱 Device Info");return s.on("renderTab",function(e){let t=`<div style='${Rp}'>`;const i=aC();t+=`<h3 style='${Jy}'>Device: ${i}</h3>`,t+=Pn([{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+=Pn(n,!1)),t+="</div>",t+=`<div style='${Rp} margin-top: 20px;'>`,t+=`<h3 style='${Jy}'>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:vv()}];t+=Pn(l,!1),t+="</div>",e(t)}),s}function ZS(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("graphics-info","🎨 Graphics Info");return s.on("renderTab",async function(e){let t=`<div style='${Rp}'>`;const i=JS();i.length>0&&(t+=`<h3 style='${Lo}'>General GPU Info</h3>`,t+=Pn(i,!1));const n=tC();n.length>0&&(t+=`<h3 style='${Lo}'>WebGL</h3>`,t+=Pn(n,!1));const o=iC();o.length>0&&(t+=`<h3 style='${Lo}'>WebGL 2 Features</h3>`,t+=Pn(o,!1));const r=nC();r.length>0&&(t+=`<h3 style='${Lo}'>WebGL Limits</h3>`,t+=Pn(r,!1));const a=sC();a.length>0&&(t+=`<h3 style='${Lo}'>Texture Formats</h3>`,t+=Pn(a,!1));const l=await oC();if(l.length>0&&(t+=`<h3 style='${Lo}'>WebGPU</h3>`,t+=Pn(l,!1)),exports.DeviceUtilities.isSafari()){const h=rC();h.length>0&&(t+=`<h3 style='${Lo}'>Safari GPU Info</h3>`,t+=Pn(h,!1))}t+="</div>",e(t)}),s}function JS(){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=wv();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=eC(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 eC(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 tC(){const s=[],e=wv();return e&&(s.push({label:"📊 WebGL Version",value:e.version}),s.push({label:"🎮 WebGL 2 Available",value:vv()})),s}function iC(){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 nC(){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 sC(){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 oC(){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 wv(){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 rC(){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 aC(){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 lC(){const s=document.querySelector("#__vconsole .vc-switch");return s||null}function cC(){const s=document.querySelector("#__vconsole");return s||null}const xv=x("debugdefines");mo('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";');mo('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";');mo('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";');mo('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');mo('globalThis["__NEEDLE_ENGINE_VERSION__"] = "4.16.0";');mo('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');mo('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Thu Mar 05 2026 14:33:44 GMT+0000 (Coordinated Universal Time)";');mo('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const ui="4.16.0",ka="undefined",fc="Thu Mar 05 2026 14:33:44 GMT+0000 (Coordinated Universal Time)";xv&&console.log(`Engine version: ${ui} (generator: ${ka})
144
+ `,Do?.prepend(i),s===!0&&ev()<=0&&_v(),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.":"")),_l=!1,Qt=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function qS(){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"),Qt?.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 Rp="padding: 10px; font-family: monospace;",Jy="margin-bottom: 10px;",Lo="margin-bottom: 10px; margin-top: 15px;",XS="width: 100%; border-collapse: collapse; border: 1px solid rgba(0,0,0,0.1); table-layout: fixed;",bv="border: 1px solid rgba(0,0,0,0.1); padding: 5px;",QS=bv,YS=bv+" word-break: break-all;";function Pn(s,e=!1){e&&s.sort((i,n)=>(n.value?1:0)-(i.value?1:0));let t=`<table style='${XS}'>`;t+="<tbody>";for(const i of s){const n=typeof i.value=="boolean"?i.value?"✅":"❌":i.value;t+=`<tr><td style='${QS}'>${i.label}</td><td style='${YS}'>${n}</td></tr>`}return t+="</tbody></table>",t}function vv(){try{if(document.createElement("canvas").getContext("webgl2"))return"✅"}catch{}return"❌"}function KS(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("device-utilities","📱 Device Info");return s.on("renderTab",function(e){let t=`<div style='${Rp}'>`;const i=aC();t+=`<h3 style='${Jy}'>Device: ${i}</h3>`,t+=Pn([{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+=Pn(n,!1)),t+="</div>",t+=`<div style='${Rp} margin-top: 20px;'>`,t+=`<h3 style='${Jy}'>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:vv()}];t+=Pn(l,!1),t+="</div>",e(t)}),s}function ZS(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("graphics-info","🎨 Graphics Info");return s.on("renderTab",async function(e){let t=`<div style='${Rp}'>`;const i=JS();i.length>0&&(t+=`<h3 style='${Lo}'>General GPU Info</h3>`,t+=Pn(i,!1));const n=tC();n.length>0&&(t+=`<h3 style='${Lo}'>WebGL</h3>`,t+=Pn(n,!1));const o=iC();o.length>0&&(t+=`<h3 style='${Lo}'>WebGL 2 Features</h3>`,t+=Pn(o,!1));const r=nC();r.length>0&&(t+=`<h3 style='${Lo}'>WebGL Limits</h3>`,t+=Pn(r,!1));const a=sC();a.length>0&&(t+=`<h3 style='${Lo}'>Texture Formats</h3>`,t+=Pn(a,!1));const l=await oC();if(l.length>0&&(t+=`<h3 style='${Lo}'>WebGPU</h3>`,t+=Pn(l,!1)),exports.DeviceUtilities.isSafari()){const h=rC();h.length>0&&(t+=`<h3 style='${Lo}'>Safari GPU Info</h3>`,t+=Pn(h,!1))}t+="</div>",e(t)}),s}function JS(){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=wv();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=eC(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 eC(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 tC(){const s=[],e=wv();return e&&(s.push({label:"📊 WebGL Version",value:e.version}),s.push({label:"🎮 WebGL 2 Available",value:vv()})),s}function iC(){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 nC(){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 sC(){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 oC(){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 wv(){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 rC(){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 aC(){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 lC(){const s=document.querySelector("#__vconsole .vc-switch");return s||null}function cC(){const s=document.querySelector("#__vconsole");return s||null}const xv=x("debugdefines");mo('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";');mo('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";');mo('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";');mo('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');mo('globalThis["__NEEDLE_ENGINE_VERSION__"] = "4.16.0";');mo('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');mo('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Thu Mar 05 2026 14:43:31 GMT+0000 (Coordinated Universal Time)";');mo('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const ui="4.16.0",ka="undefined",fc="Thu Mar 05 2026 14:43:31 GMT+0000 (Coordinated Universal Time)";xv&&console.log(`Engine version: ${ui} (generator: ${ka})
145
145
  Project built at ${fc}`);const to=NEEDLE_PUBLIC_KEY,us="needle_isActiveInHierarchy",Wo="builtin_components",Kl="needle_editor_guid";function mo(s){try{(0,eval)(s)}catch(e){xv&&console.error(e)}}let Sv,e_=null;function ln(){return Sv}function jm(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}e_!==s&&(e_=s,Sv=new s)}function hC(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.")}}function Cv(s){const e=s;return!!(e.parser&&e.parser.json)}var lu=(s=>(s[s.None=0]="None",s[s.DontExport=1]="DontExport",s))(lu||{});const Pv=Symbol("component-name");function Bm(s){return s&&s.isComponent}const dC=Symbol("object"),Sf=new pi(()=>new c.Vector3,20);class Ov{_point;_normal;_tangentVelocity;distance;impulse;friction;get point(){return Sf.get().set(this._point.x,this._point.y,this._point.z)}get normal(){return Sf.get().set(this._normal.x,this._normal.y,this._normal.z)}get tangentVelocity(){return Sf.get().set(this._tangentVelocity.x,this._tangentVelocity.y,this._tangentVelocity.z)}constructor(e,t,i,n,o,r){this._point=e,this.distance=t,this._normal=i,this.impulse=n,this.friction=o,this._tangentVelocity=r}}class Mv{contacts;constructor(e,t,i){this.me=e,this._collider=t,this._gameObject=t.gameObject,this.contacts=i}me;_collider;get collider(){return this._collider}_gameObject;get gameObject(){return this._gameObject}get rigidBody(){return this.collider?.attachedRigidbody}}class kv{object;collider;constructor(e,t){this.object=e,this.collider=t}}class Id{constructor(e){this.context=e,this.root.style.cssText=`
146
146
  position: absolute;
147
147
  width: 1px; height: 1px;
@@ -173,7 +173,7 @@ See https://engine.needle.tools/docs/scripting.html#special-lifecycle-hooks for
173
173
  `+Pi):console.debug("Connected to networking backend",Pi),n(!0),this.onSendQueued(sn.OnConnection)}).onClose(h=>{this._connectingToWebsocketPromise=null,this.connected=!1,this._isInRoom=!1,n(!1);let d="Websocket connection closed...";Pi?.includes("/socket")||(d+=' Do you perhaps mean to connect to "/socket"?'),console.error(d)}).onError(h=>{console.error("Websocket connection failed..."),n(!1),Jt.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){qt&&i==="pong"?console.log("<<",i):T()&&console.error("Failed to parse message",n)}}async handleIncomingBinaryMessage(e){Ah&&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=Iv(n),l=jv(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(qt&&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,Jt.sendEvent(this.context,"networking",{event:"connected"}))}else console.warn("Expected connection id in "+e.key);break;case"joined-room":if(qt&&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),(Ah||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}
174
174
  ${a.href}`)}this.onSendQueued(sn.OnRoomJoin),Jt.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,(Ah||T())&&console.debug("Left Needle Engine Room: "+n.room)),Jt.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),qt&&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&&(qt&&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":qt&&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),qt&&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));qt&&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 Zl=x("debugwebxr");class Cf{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=>{Zl&&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||(Zl&&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),Zl&&console.log(`XRSync: ${i.type} ${i.handedness} added`,i.index)}}}class Vv{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)||(Zl&&console.log("XRSync: Local user joined room",this.context.connection.connectionId),this._states.set(this.context.connection.connectionId,new Cf(this.context.connection.connectionId,this.context)));for(const e of this.context.connection.usersInRoom())this._states.has(e)||this._states.set(e,new Cf(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)||(Zl&&console.log("XRSync: Remote user joined room",t),this._states.set(t,new Cf(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 h_{_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 TC='<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>',AC=btoa(TC),DC="data:image/svg+xml;base64,"+AC,Ta=DC,LC=`<?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(LC);const IC='<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>',jC=btoa(IC),BC="data:image/svg+xml;charset=utf-8;base64,"+jC,d_=BC;var Fa=(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))(Fa||{});class yo{static createText(e,t){let i=null;const n=t?.font||FC(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=UC(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",zC(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 UC(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 Dh=new Map;function FC(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://cdn.needle.tools/static/fonts/facetype/Helvetiker_Regular_ascii.json";break}if(Dh.has(e)){const n=Dh.get(e);if(n)return n}const t=new q.FontLoader,i=new Promise((n,o)=>{t.load(e,r=>{Dh.set(e,r),n(r)},void 0,o)});return Dh.set(e,i),i}let Pf=!1,Of=null;function zC(s,e){if(Of===null){const t="https://cdn.needle.tools/static/models/shaderball.glb",i=new q.GLTFLoader,n=oe.createLoaders(null);i.setDRACOLoader(n.dracoLoader),i.setKTX2Loader(n.ktx2Loader),Pf=!0,Of=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),f_())).finally(()=>{Pf=!1})}if(Pf){const t=f_();t.name="ShaderBall-Placeholder";const i=t.children[0];i?.type==="Mesh"&&u_(i,e),s.add(t)}Of.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(),u_(n,e)),s.add(i)})}function u_(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 f_(){return new c.Group().add(yo.createPrimitive("Sphere",{material:new c.MeshBasicMaterial({transparent:!0,opacity:.1})}))}class Aa{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 Aa(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 ms(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 ms(1e3),this._scene.clear()}setupScene(){this._scene.background=new c.Color(0);let e=Ta;if(Un()){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 v=i.height-p*1.5,R=v*m,O=(i.width-R)/2;n.drawImage(o,O,0,R,v)}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 w=new c.TextureLoader().load(i.toDataURL());w.generateMipmaps=!0,w.colorSpace="srgb",w.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=w,t.material.needsUpdate=!0};o.onload=()=>r(),o.onerror=d=>{console.error("Failed to load temporary XR logo:",e,d),o.src=Ta},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=Fa.Sphere,g=yo.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 mc;(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})(mc||(mc={}));const je=x("debugwebxr"),p_=x("stats");let Mf=0;function NC(s){let e=null;const t=s;return t.getAROverlayContainer?e=t.getAROverlayContainer():e=s,e}VC();async function VC(){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;ga(!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($v()&&(await Aa.start(e||s,i||G.getDefaultSessionInit(s)).catch(o=>console.warn("[NeedleXRSession:granted] TemporaryXRContext start failed:",o)),await HC(),n=await Aa.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 $C(s,e){sessionStorage.setItem("needle_xr_session_mode",s),sessionStorage.setItem("needle_xr_session_init",JSON.stringify(e))}function WC(){sessionStorage.removeItem("needle_xr_session_mode"),sessionStorage.removeItem("needle_xr_session_init")}const Hm=new Set;le.registerCallback(ae.ContextCreationStart,async s=>{Hm.add(s.context)});le.registerCallback(ae.ContextCreated,async s=>{Hm.delete(s.context);const e=s.context?.domElement.getAttribute("autostart")||null;GC(e)});function $v(){return Hm.size>0}function HC(){return new Promise(s=>{const e=Date.now(),t=setInterval(()=>{(!$v()||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 GC(s){s&&s?.toLowerCase()==="ar"&&cn.registerWaitForInteraction(()=>{G.start("ar")})}const Lh=Symbol("initial-fov");class G{static _sync=null;static getXRSync(e){return this._sync||(this._sync=new Vv(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 Jt.sendEvent(U.Current,"xr",{action:"quicklook_export",source:"NeedleXRSession.start"}),mc.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();Jt.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+`
175
175
  `,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 Aa.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=NC(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 Aa.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()+")"),Jt.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&&cr(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(Kt(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(cr(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=Kt(i.transform.orientation),r=this.context.mainCamera;if(r?.parent!==this._cameraRenderParent&&n.applyMatrix4(ya),r?.parent){n.applyMatrix4(r.parent.matrixWorld),o.multiply(Ti);const a=fe(r.parent);a.premultiply(Ti),o.premultiply(a)}return{hit:e,position:n,quaternion:o}}return null}convertSpace(e){const t=B(e.position);t.applyMatrix4(ya);const i=Kt(e.orientation);return i.premultiply(Ti),{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){$C(e,n.init),this.session=t,this.mode=e,this.context=i,(je||x("console"))&&ga(!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,bs(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[Lh]=this.context.mainCamera.fov)),this._defaultRig=new bC,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 zm(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"),Jt.sendEvent(U.Current,"xr",{action:"session_end",mode:this.mode,source:"NeedleXRSession.onEnd"}),WC(),this.onAfterRender(),this.revertCustomForward(),this._didStart=!1,this._previousCameraParent=null,this.requestedCameraNearPlane=null,go(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()}),Av({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&&an(this.context.mainCamera,this._originalCameraWorldRotation),this._originalCameraWorldScale&&Ma(this.context.mainCamera,this._originalCameraWorldScale),this.context.mainCamera instanceof c.PerspectiveCamera&&this.context.mainCamera[Lh]&&(this.context.mainCamera.fov=this.context.mainCamera[Lh],this.context.mainCamera[Lh]=0)),this.context.requestSizeUpdate(),this._defaultRig.gameObject.removeFromParent(),ga(!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=bi(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)}}}Tv({session:this}),yr();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&&(ga(!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||p_)&&this.rig&&(Mf++,Mf>=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||p_)for(const o of this.controllers)n+=`
176
- ${o.hand?"hand":"ctrl"} ${o.inputSource.handedness}[${o.index}] con:${o.connected} tr:${o.isTracking} hts:${o.hasHitTestSource?"yes":"no"}`;Mf=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 h_),this._transition}fadeTransition(){return this._transition||(this._transition=new h_),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 kf=x("debugwebxr");class Wv{static tryFindAvatarObjects(e,t,i){if(i.head&&i.leftHand&&i.rightHand)return;const n=e.name.toLocaleLowerCase();!i.head&&n.includes("head")&&(kf&&console.log("FOUND AVATAR HEAD",e.name),i.head=new K("",t,e)),n.includes("hand")&&(!i.leftHand&&n.includes("left")&&(kf&&console.log("FOUND AVATAR LEFT HAND",e.name),i.leftHand=new K("",t,e)),!i.rightHand&&n.includes("right")&&(kf&&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,m_=new c.Vector3,g_=new c.Quaternion,qC=x("debuggizmos"),Zi=8947848,Ef=32;class j{constructor(){}static enabled=!0;static isGizmo(e){return e[Lp]!==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),g_.set(t.x,t.y,t.z,t.w),St.applyQuaternion(g_)):(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);lr(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);lr(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(m_.set(e.x,e.y,e.z)).normalize());const h=St.set(t.x,t.y,t.z).sub(m_.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 XC=new c.BoxGeometry(1,1,1);function Gm(s=null){const e=new c.Color(s??14540253),t=new c.EdgesGeometry(XC);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 Lp=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://cdn.needle.tools/static/fonts/msdf/arial/arial-msdf.json","https://cdn.needle.tools/static/fonts/msdf/arial/arial.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),qC&&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(Ef*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/(Ef-1);for(let h=0;h<Ef+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[Lp]=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(cr(n))continue;const o=e.isInVR,r=!1,a=!o;Ic(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(),cr(r)!=!0&&r[Lp].push(r))}}}const zt=x("debugphysics"),QC=x("debugworker"),y_=new c.Layers;class _o{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){y_.set(e),this.layerMask=y_}setMask(e){this.layerMask||(this.layerMask=new c.Layers);const t=this.layerMask;t?t.mask=e:this.layerMask=e}}class qm{distance;point;object;constructor(e,t,i){this.object=e,this.distance=t,this.point=i}}class Da{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 _o;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,Da._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))),Da._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&&__(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=oe.getRaycastMesh(o);p&&(a.geometry=p)}if(!u&&KC(a,e,i)||(n.useAcceleratedRaycast!==!1?jd.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&&__(u)||(h=!1),h){if(a){const p=this.sphere;p.center.copy(t),p.radius=i;const m=o.length;if(jd.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 qm(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 __(s){return!(s.index&&s.index.array.length<3)}const Io=new c.Sphere,Ih=new c.Plane,YC=new c.Matrix3;function KC(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){Ih.setFromNormalAndCoplanarPoint(B(0,1,0),B(0,-l.position.y,0)),Ih.applyMatrix4(l.matrixWorld,YC);const u=o.ray.intersectPlane(Ih,B());if(u){Io.copy(h),Io.applyMatrix4(l.matrixWorld);const m=B(u).sub(o.ray.origin).length(),g=Io.radius*.5;m<g&&r.push({distance:m,point:u,object:l,normal:Ih.normal.clone()})}return}Io.copy(h),Io.applyMatrix4(l.matrixWorld);const d=o.ray.intersectSphere(Io,B());if(d){const u=B(d).sub(o.ray.origin),p=u.length();if(p>Io.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 jd;(s=>{let e=0;function t(b,v,R,O,M){if(!v.geometry||!v.geometry.hasAttribute("position"))return!1;const A=v.geometry;if(v?.isSkinnedMesh){const D=v,L=D.bvhNeedsUpdate;if(!D.staticGenerator)l(),r&&(D.staticGenerator=new r(v),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 ${v.name} after ${$.toFixed(2)}ms`),D.bvhNeedsUpdate=!1,D.staticGeometryLastUpdate=N,D.staticGenerator?.generate(D.staticGeometry),A.boundsTree.refit())}}else if(!A.boundsTree){d||w();let D=!0;if((O.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{QC&&console.warn("[GenerateMeshBVHWorker] Creating worker with import.meta.url:",typeof document>"u"?require("url").pathToFileURL(__filename).href:ma&&ma.tagName.toUpperCase()==="SCRIPT"&&ma.src||new URL("needle-engine.bundle-DN7uXrFB.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=v.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=v.raycast;if(A.boundsTree)l(),n&&(v.acceleratedRaycast||(v.acceleratedRaycast=n.bind(v),zt&&console.debug(`Physics: bind acceleratedRaycast fn to "${v.name}"`)),v.raycast=v.acceleratedRaycast);else if(zt&&console.warn("No bounds tree found for mesh",v.name,{workerTask:A[m],hasAcceleratedRaycast:n!=null}),M.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(v,!1,R),D.firstHitOnly=N,v.raycast=L,!0}else if(b instanceof c.Sphere){const D=A.boundsTree;if(D){const L=b;if(h.copy(v.matrixWorld).invert(),L.applyMatrix4(h),D.intersectsSphere(L)){const $=Q(v),k=$.distanceTo(L.center),z=new qm(v,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-BwxpsdCm.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 w(){d=!0,u=!0,Promise.resolve().then(()=>tA).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})}})(jd||(jd={}));const b_=Symbol("gltf-loader-internal-usage-tracker"),ZC=x("debugusers");class ba{get name(){return"NEEDLE_internal_usage_tracker"}static isLoading(e){return ba._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(){ba._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[b_]=e._loadingId),r)),o},null}afterRoot(e){ba._loadingProcesses--,this.parser.getDependency=this._getDependency;for(const t of this._loadedObjects)delete t[b_],t instanceof c.Object3D&&(t.parent||t instanceof c.Mesh&&setTimeout(()=>{ZC&&console.warn("> GLTF LOADER: Mesh not used in scene!",t),t.material=null,t.geometry=null},1e3));return null}}class Hv{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:
176
+ ${o.hand?"hand":"ctrl"} ${o.inputSource.handedness}[${o.index}] con:${o.connected} tr:${o.isTracking} hts:${o.hasHitTestSource?"yes":"no"}`;Mf=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 h_),this._transition}fadeTransition(){return this._transition||(this._transition=new h_),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 kf=x("debugwebxr");class Wv{static tryFindAvatarObjects(e,t,i){if(i.head&&i.leftHand&&i.rightHand)return;const n=e.name.toLocaleLowerCase();!i.head&&n.includes("head")&&(kf&&console.log("FOUND AVATAR HEAD",e.name),i.head=new K("",t,e)),n.includes("hand")&&(!i.leftHand&&n.includes("left")&&(kf&&console.log("FOUND AVATAR LEFT HAND",e.name),i.leftHand=new K("",t,e)),!i.rightHand&&n.includes("right")&&(kf&&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,m_=new c.Vector3,g_=new c.Quaternion,qC=x("debuggizmos"),Zi=8947848,Ef=32;class j{constructor(){}static enabled=!0;static isGizmo(e){return e[Lp]!==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),g_.set(t.x,t.y,t.z,t.w),St.applyQuaternion(g_)):(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);lr(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);lr(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(m_.set(e.x,e.y,e.z)).normalize());const h=St.set(t.x,t.y,t.z).sub(m_.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 XC=new c.BoxGeometry(1,1,1);function Gm(s=null){const e=new c.Color(s??14540253),t=new c.EdgesGeometry(XC);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 Lp=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://cdn.needle.tools/static/fonts/msdf/arial/arial-msdf.json","https://cdn.needle.tools/static/fonts/msdf/arial/arial.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),qC&&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(Ef*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/(Ef-1);for(let h=0;h<Ef+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[Lp]=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(cr(n))continue;const o=e.isInVR,r=!1,a=!o;Ic(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(),cr(r)!=!0&&r[Lp].push(r))}}}const zt=x("debugphysics"),QC=x("debugworker"),y_=new c.Layers;class _o{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){y_.set(e),this.layerMask=y_}setMask(e){this.layerMask||(this.layerMask=new c.Layers);const t=this.layerMask;t?t.mask=e:this.layerMask=e}}class qm{distance;point;object;constructor(e,t,i){this.object=e,this.distance=t,this.point=i}}class Da{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 _o;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,Da._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))),Da._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&&__(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=oe.getRaycastMesh(o);p&&(a.geometry=p)}if(!u&&KC(a,e,i)||(n.useAcceleratedRaycast!==!1?jd.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&&__(u)||(h=!1),h){if(a){const p=this.sphere;p.center.copy(t),p.radius=i;const m=o.length;if(jd.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 qm(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 __(s){return!(s.index&&s.index.array.length<3)}const Io=new c.Sphere,Ih=new c.Plane,YC=new c.Matrix3;function KC(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){Ih.setFromNormalAndCoplanarPoint(B(0,1,0),B(0,-l.position.y,0)),Ih.applyMatrix4(l.matrixWorld,YC);const u=o.ray.intersectPlane(Ih,B());if(u){Io.copy(h),Io.applyMatrix4(l.matrixWorld);const m=B(u).sub(o.ray.origin).length(),g=Io.radius*.5;m<g&&r.push({distance:m,point:u,object:l,normal:Ih.normal.clone()})}return}Io.copy(h),Io.applyMatrix4(l.matrixWorld);const d=o.ray.intersectSphere(Io,B());if(d){const u=B(d).sub(o.ray.origin),p=u.length();if(p>Io.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 jd;(s=>{let e=0;function t(b,v,R,O,M){if(!v.geometry||!v.geometry.hasAttribute("position"))return!1;const A=v.geometry;if(v?.isSkinnedMesh){const D=v,L=D.bvhNeedsUpdate;if(!D.staticGenerator)l(),r&&(D.staticGenerator=new r(v),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 ${v.name} after ${$.toFixed(2)}ms`),D.bvhNeedsUpdate=!1,D.staticGeometryLastUpdate=N,D.staticGenerator?.generate(D.staticGeometry),A.boundsTree.refit())}}else if(!A.boundsTree){d||w();let D=!0;if((O.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{QC&&console.warn("[GenerateMeshBVHWorker] Creating worker with import.meta.url:",typeof document>"u"?require("url").pathToFileURL(__filename).href:ma&&ma.tagName.toUpperCase()==="SCRIPT"&&ma.src||new URL("needle-engine.bundle-CXVjO2uF.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=v.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=v.raycast;if(A.boundsTree)l(),n&&(v.acceleratedRaycast||(v.acceleratedRaycast=n.bind(v),zt&&console.debug(`Physics: bind acceleratedRaycast fn to "${v.name}"`)),v.raycast=v.acceleratedRaycast);else if(zt&&console.warn("No bounds tree found for mesh",v.name,{workerTask:A[m],hasAcceleratedRaycast:n!=null}),M.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(v,!1,R),D.firstHitOnly=N,v.raycast=L,!0}else if(b instanceof c.Sphere){const D=A.boundsTree;if(D){const L=b;if(h.copy(v.matrixWorld).invert(),L.applyMatrix4(h),D.intersectsSphere(L)){const $=Q(v),k=$.distanceTo(L.center),z=new qm(v,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-BwxpsdCm.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 w(){d=!0,u=!0,Promise.resolve().then(()=>tA).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})}})(jd||(jd={}));const b_=Symbol("gltf-loader-internal-usage-tracker"),ZC=x("debugusers");class ba{get name(){return"NEEDLE_internal_usage_tracker"}static isLoading(e){return ba._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(){ba._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[b_]=e._loadingId),r)),o},null}afterRoot(e){ba._loadingProcesses--,this.parser.getDependency=this._getDependency;for(const t of this._loadedObjects)delete t[b_],t instanceof c.Object3D&&(t.parent||t instanceof c.Mesh&&setTimeout(()=>{ZC&&console.warn("> GLTF LOADER: Mesh not used in scene!",t),t.material=null,t.geometry=null},1e3));return null}}class Hv{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:
177
177
  `+i.src),e.preventDefault())}})}}const uu=x("trackresources");function Gv(){return uu==="dispose"}let _r=!0;uu===0&&(_r=!1);function JC(s){_r=s}function qv(){return _r}const Xv=Symbol("disposable");function Qv(s,e){s&&(s[Xv]=e,Jo&&console.warn("Set disposable",e,s))}const Yv=Symbol("disposed");function e1(s){return s[Yv]===!0}function be(s){if(s){if(s[Xv]===!1){Jo&&console.warn("Object is marked as not disposable",s);return}if(typeof s=="object"&&(s[Yv]=!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){Vr(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)Jo&&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){Vr(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?(Vr(s),Vr(s.source),s.source?.data instanceof ImageBitmap&&Vr(s.source.data)):s instanceof c.Skeleton?(Vr(s.boneTexture),s.boneTexture=null):s instanceof c.Bone||!(s instanceof c.Object3D)&&Jo&&console.warn("Unknown object type",s)}}function Vr(s){s&&((Jo||Gv()||uu)&&console.warn("🧨 FREE",s),s instanceof ImageBitmap||"dispose"in s&&typeof s.dispose=="function"&&s.dispose())}function t1(s){}const i1=new Set;function Xm(s,e,t=null,i){if(i||(i=i1,i.clear()),!s)return i;const n=s[gc];if(n)for(const o of n)i.has(o)||t?.call(null,o)!==!1&&(i.add(o),e&&Xm(o,!0,t,i));return i}function n1(s){return s[Bl]}const Jo=x("debugresourceusers")||x("debugmemory"),gc=Symbol("needle-resource-users"),Bl=Symbol("needle-resource-users-count");function It(s,e){cu(s,e,function(t,i){_r&&!Da.raycasting&&(Bd(gc,this,t,!1),Bd(gc,this,i,!0))})}_r&&(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 s1(s){if(_r===!1)return;const e=s[gc];if(e)for(const t of e)Bd(gc,t,s,!1)}_r&&cu(c.Material.prototype,"dispose",function(){s1(this)});let Ip=0;function Bd(s,e,t,i){if(Ip>0)return;if(Array.isArray(t)){for(const o of t)Bd(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[Bl]||0;o+=1,t[Bl]=o,Jo&&console.warn(`🟢 Added user of "${t.type}"`,e,t,o,"users:",n)}}else if(e&&n.has(e)){n.delete(e);let o=t[Bl]||0;o>0&&(o-=1,t[Bl]=o),Jo&&console.warn(`🔴 Removed user of "${t.type}"`,e,t,o,"users:",n),o<=0&&(ba.isLoading(t)||(uu&&console.warn(`🔴 Removed all user of "${t.type}"`,t),Gv()&&be(t)))}t[s]=n}try{cu(c.WebGLRenderer.prototype,"render",function(){Ip++},function(){Ip--})}catch(s){console.warn("Could not wrap WebGLRenderer.render",s)}const v_=x("debugcomponentevents");class fu{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),v_&&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(v_&&console.log("Dispatching event "+e,i),!!i)for(const n of i)n(t)}}const yc=Symbol("NEEDLE_NEED_UPDATE_INSTANCE"),Kv=Symbol("isUsingInstancing"),Zv=Symbol("instancingRenderer"),Ul=Symbol("instancingAutoUpdateBounds");class Ui{static isUsingInstancing(e){return e[Kv]===!0}static getRenderer(e){return e[Zv]||null}setAutoUpdateBounds(e,t){const i=Ui.getRenderer(e);i&&(i[Ul]=t)}static markDirty(e,t=!0){if(e&&(this.isUsingInstancing(e)&&(e[yc]=!0,e.matrixWorldNeedsUpdate=!0),t))for(const i of e.children)Ui.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 va(s,e){try{e||s()}catch(t){return console.error(t),!1}return!0}const jp=x("debugnewscripts"),o1=x("debughierarchy"),Se=[];function r1(){return Se.length>0}function Ud(s){if(jp&&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()||jp)&&console.error(`Registered script is not a Needle Engine component.
178
178
  The script will be ignored. Please make sure your component extends "Behaviour" imported from "@needle-tools/engine"
179
179
  `,t),Se.splice(e,1),e--;continue}if(t.destroyed)continue;if(!t.gameObject){console.warn(`Component can not be initialized: no GameObject assigned.
@@ -1651,4 +1651,4 @@ Error:`,r),null}}updateColliderCollisionGroups(e){const t=e[Pt],i=e.membership;l
1651
1651
  justify-content: center;
1652
1652
  gap: .5rem;
1653
1653
  }
1654
- `),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),Wd(Xp,{element:this.#t}),this.#o?.disconnect(),this.#o??=new MutationObserver(()=>this.#c()),this.#o.observe(this.#e,{attributes:!0}),xp&&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=>{xp&&console.log("Needle Button clicked",{defaultPrevented:e.defaultPrevented,hasButton:!!this.#e}),!e.defaultPrevented&&this.#e&&this.#e.click()}}typeof window<"u"&&!window.customElements.get(Gb)&&window.customElements.define(Gb,Tx);const Ll=x("debugavatar");class By{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 Ax{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 un;i=S.instantiate(Oa(t,e.scene),o)}}else i=t;if(!i)return null;const n=this.findAvatar(i);return n.isValid?(Ll&&console.log("[Custom Avatar] valid config",t,Ll?n:""),n):(console.warn("[Custom Avatar] config isn't valid",t,Ll?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(Ll&&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 ln().parseSync(e,o,null,0))?.scene??null:null}const i=new q.GLTFLoader;return cg(i,e),new Promise((n,o)=>{const r=this.avatarRegistryUrl+"/"+t;i.load(r,async a=>{await ln().createBuiltinComponents(e,r,a,null,void 0),n(a.scene)},a=>{Ll&&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 By(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 Dx{get extensionName(){return"DocumentExtension"}onAfterBuildDocument(e){}}class Lx{}const JT=Object.freeze(Object.defineProperty({__proto__:null,ActionBuilder:he,ActionCollection:zw,ActionModel:Yt,AlignmentConstraint:Hc,Animation:Et,AnimationCurve:lh,AnimationExtension:Du,AnimationTrackHandler:kc,Animator:at,AnimatorController:Fi,Antialiasing:hh,Attractor:nl,AudioExtension:Or,AudioListener:as,AudioSource:gi,AudioTrackHandler:hs,Avatar:uo,AvatarBlink_Simple:xr,AvatarEyeLook_Rotation:_g,AvatarLoader:Ax,AvatarMarker:Pe,AvatarModel:By,Avatar_Brain_LookAt:Sc,Avatar_MouthShapes:Qc,Avatar_MustacheShake:gg,Avatar_POI:rr,AxesHelper:$a,BaseUIComponent:Ni,BasicIKConstraint:vg,BehaviorExtension:Yg,BehaviorModel:bt,BloomEffect:Xu,BoxCollider:Mu,BoxGizmo:Rr,BoxHelperComponent:st,Button:Rs,CallInfo:rs,Camera:ei,CameraTargetReachedEvent:xc,Canvas:ja,CanvasGroup:fo,CapsuleCollider:gs,ChangeMaterialOnClick:Ng,ChangeTransformOnClick:Mr,CharacterController:Sr,CharacterControllerInput:ws,ChromaticAberration:dh,ClickThrough:uf,ColorAdjustments:Mo,ColorBySpeedModule:il,ColorOverLifetimeModule:Hu,ContactShadows:Yc,ControlTrackHandler:of,CursorFollow:zr,CustomBranding:Er,Deletable:Cg,DeleteBox:oo,DepthOfField:mn,DeviceFlag:ku,DocumentExtension:Dx,DragControls:Qo,DropListener:Ss,Duplicatable:Ag,EffectWrapper:Mc,EmissionModule:Ms,EmphasizeOnClick:qa,EnvironmentScene:hf,EventList:ie,EventListEvent:Su,EventSystem:$t,EventTrigger:Tu,FieldWithDefault:ww,FixedJoint:hy,Fog:Za,GltfExport:Bg,GltfExportBox:Ig,Gradient:Ar,Graphic:oh,GraphicRaycaster:Cu,GridHelper:Ja,GridLayoutGroup:iy,GroundProjectedEnv:$n,GroupActionModel:Yo,HideOnStart:Ai,HingeJoint:ah,HorizontalLayoutGroup:ty,get HoverAnimation(){return exports.HoverAnimation},Image:cl,InheritVelocityModule:my,InputField:Ey,InstanceHandle:ar,InstancingHandler:fr,Interactable:Sg,Keyframe:ti,LODGroup:Vu,LODModel:el,Light:xt,LimitVelocityOverLifetimeModule:tt,LogStats:xg,LookAt:Ry,LookAtConstraint:wr,MainModule:At,MarkerTrackHandler:sf,MaskableGraphic:rh,MeshCollider:vo,MeshRenderer:Jc,MinMaxCurve:H,MinMaxGradient:Dr,NeedleMenu:Hn,NestedGltf:tl,Networking:fy,NoiseModule:pe,ObjectRaycaster:zi,OffsetConstraint:Tr,OpenURL:hl,OrbitControls:de,Outline:Ka,Padding:kr,ParticleBurst:iu,ParticleSubEmitter:gy,ParticleSystem:Oc,ParticleSystemRenderer:qi,PhysicsExtension:Kg,PixelationEffect:uh,PlayAnimationOnClick:Cc,PlayAudioOnClick:ho,PlayableDirector:gr,PlayerColor:Ba,PointerEventData:qc,PostProcessingHandler:wy,PreliminaryAction:Xa,PreliminaryTrigger:th,RawImage:lf,Rect:Hw,RectTransform:dn,ReflectionProbe:ts,RegisteredAnimationInfo:io,RemoteSkybox:Yu,Renderer:Wt,RendererLightmap:Eg,Rigidbody:Fe,RotationBySpeedModule:Gi,RotationOverLifetimeModule:pn,SceneSwitcher:Ne,ScreenCapture:ko,ScreenSpaceAmbientOcclusion:ks,ScreenSpaceAmbientOcclusionN8:gn,ScrollFollow:Ts,SeeThrough:Es,SetActiveOnClick:Vg,ShadowCatcher:gh,ShapeModule:py,SharpeningEffect:ph,SignalAsset:nf,SignalReceiver:wh,SignalReceiverEvent:vh,SignalTrackHandler:Ec,Size:Ww,SizeBySpeedModule:ri,SizeOverLifetimeModule:Lr,SkinnedMeshRenderer:Rg,SmoothFollow:Zu,SpatialGrabRaycaster:dr,SpatialHtml:Sh,SpatialTrigger:Ju,SpatialTriggerReceiver:zn,SpectatorCamera:ef,SphereCollider:Wa,SplineContainer:Ur,SplineData:Vn,SplineWalker:Qi,Sprite:Cs,SpriteData:Ca,SpriteRenderer:si,SpriteSheet:Ia,SubEmitterSystem:nu,SyncedCamera:Sy,SyncedRoom:yn,SyncedTransform:hn,TapGestureTrigger:Wg,TeleportTarget:Uu,TestRunner:Cy,TestSimulateUserData:Py,Text:Tt,TextBuilder:Jg,TextExtension:zu,TextureSheetAnimationModule:Dt,TiltShiftEffect:qn,ToneMappingEffect:po,TrailModule:Te,TransformData:Ee,TransformGizmo:Fr,TriggerBuilder:kt,TriggerModel:ro,UIRaycastUtils:ug,UIRootComponent:nh,USDZExporter:Fn,USDZText:fa,USDZUIExtension:sy,UsageMarker:Kc,VariantAction:zg,VelocityOverLifetimeModule:Ie,VerticalLayoutGroup:ey,VideoPlayer:Je,get ViewBox(){return exports.ViewBox},Vignette:Br,VisibilityAction:ih,Voip:bo,Volume:ol,VolumeParameter:F,VolumeProfile:Gu,WebARCameraBackground:Ph,WebARSessionRoot:ji,WebXR:Fu,WebXRImageTracking:Oh,WebXRImageTrackingModel:Ds,WebXRPlaneTracking:Ls,WebXRTrackedImage:Ua,XRControllerFollow:As,XRControllerModel:ys,XRControllerMovement:_i,XRFlag:Di,XRRig:mf,XRState:Vt,__Ignore:Lx},Symbol.toStringTag,{value:"Module"})),Tc=x("debugmissingcamera");le.registerCallback(ae.MissingCamera,s=>{Tc&&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 ei;if(i.sourceId=s.files?.[0]?.src??"unknown",i.fieldOfView=35,s.context.domElement.getAttribute("transparent")!=null)i.clearFlags=or.Uninitialized;else if(s.context.domElement.getAttribute("background-image")?.length||s.context.lightmaps.tryGetSkybox(i.sourceId))i.clearFlags=or.Skybox;else{if(i.clearFlags=or.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 hf("neutral");e.environment=a.fromScene(l,.025).texture}}const o=er(t,i,!0);return t.position.x=0,t.position.y=1,t.position.z=2,s.context.domElement?.cameraControls!=!1&&Ix(s.context,o),o});le.registerCallback(ae.ContextCreated,s=>{if(!s.context.mainCamera){Tc&&console.log("Will not auto-fit because a default camera exists");return}if(s.context.domElement?.cameraControls==!0){if(ov(s.context.mainCamera)?.isCameraController==!0){Tc&&console.log("Will not auto-fit because a camera controller exists");return}Ix(s.context)}});function Ix(s,e){e=e??s.mainCameraComponent;const t=e?.gameObject;if(Tc&&console.log("Creating default camera controls",e?.name),t){const i=zc(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,Tc&&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 gr&&n.playOnAwake===!0)return!0;if(n instanceof Et)return n.playAutomatically=!0,!0;if(n instanceof gr)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 Ur,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 eA extends re.WorkerBase{constructor(){super(new Worker(new URL("/generateMeshBVH.worker-DiCnZlf3.js",typeof document>"u"?require("url").pathToFileURL(__filename).href:ma&&ma.tagName.toUpperCase()==="SCRIPT"&&ma.src||new URL("needle-engine.bundle-DN7uXrFB.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 tA=Object.freeze(Object.defineProperty({__proto__:null,GenerateMeshBVHWorker:eA},Symbol.toStringTag,{value:"Module"}));exports.$componentName=Pv;exports.$physicsKey=dC;exports.ActionBuilder=he;exports.ActionCollection=zw;exports.ActionModel=Yt;exports.Addressables=k0;exports.AlignmentConstraint=Hc;exports.AmbientMode=wa;exports.Animation=Et;exports.AnimationCurve=lh;exports.AnimationExtension=Du;exports.AnimationTrackHandler=kc;exports.AnimationUtils=Nn;exports.Animator=at;exports.AnimatorConditionMode=Ys;exports.AnimatorController=Fi;exports.AnimatorControllerParameterType=hg;exports.AnimatorStateInfo=Fl;exports.Antialiasing=hh;exports.Application=cn;exports.AssetDatabase=Hv;exports.AssetReference=K;exports.Attractor=nl;exports.AudioExtension=Or;exports.AudioListener=as;exports.AudioSource=gi;exports.AudioTrackHandler=hs;exports.Avatar=uo;exports.AvatarBlink_Simple=xr;exports.AvatarEyeLook_Rotation=_g;exports.AvatarLoader=Ax;exports.AvatarMarker=Pe;exports.AvatarModel=By;exports.Avatar_Brain_LookAt=Sc;exports.Avatar_MouthShapes=Qc;exports.Avatar_MustacheShake=gg;exports.Avatar_POI=rr;exports.Axes=da;exports.AxesHelper=$a;exports.BUILD_TIME=fc;exports.BaseUIComponent=Ni;exports.BasicIKConstraint=vg;exports.BehaviorExtension=Yg;exports.BehaviorModel=bt;exports.BloomEffect=Xu;exports.BoxCollider=Mu;exports.BoxGizmo=Rr;exports.BoxHelperComponent=st;exports.Button=Rs;exports.ButtonsFactory=Ii;exports.CallDirection=ow;exports.CallInfo=rs;exports.Camera=ei;exports.CameraTargetReachedEvent=xc;exports.Canvas=ja;exports.CanvasGroup=fo;exports.CapsuleCollider=gs;exports.ChangeMaterialOnClick=Ng;exports.ChangeTransformOnClick=Mr;exports.CharacterController=Sr;exports.CharacterControllerInput=ws;exports.ChromaticAberration=dh;exports.CircularBuffer=pi;exports.ClearFlags=or;exports.ClickThrough=uf;exports.ClipExtrapolation=Cn;exports.Collider=Hi;exports.Collision=Mv;exports.CollisionDetectionMode=xu;exports.ColorAdjustments=Mo;exports.ColorBySpeedModule=il;exports.ColorOverLifetimeModule=Hu;exports.Component=OP;exports.Component$1=E;exports.ComponentLifecycleEvents=fu;exports.Components=JT;exports.ConnectionEvents=Fv;exports.ContactPoint=Ov;exports.ContactShadows=Yc;exports.Context=U;exports.ContextArgs=dP;exports.ContextEvent=ae;exports.ContextRegistry=le;exports.ControlTrackHandler=of;exports.CursorFollow=zr;exports.CustomBranding=Er;exports.CustomShader=_e;exports.DefaultReflectionMode=$d;exports.Deletable=Cg;exports.DeleteBox=oo;exports.DepthOfField=mn;exports.DeviceFlag=ku;exports.DocumentExtension=Dx;exports.DragControls=Qo;exports.DragMode=Pg;exports.DropListener=Ss;exports.Duplicatable=Ag;exports.EffectWrapper=Mc;exports.EmissionModule=Ms;exports.EmphasizeOnClick=qa;exports.EngineLoadingView=Rc;exports.EnvironmentScene=hf;exports.EventList=ie;exports.EventListEvent=Su;exports.EventSystem=$t;exports.EventTrigger=Tu;exports.FieldWithDefault=ww;exports.FileReference=nr;exports.FileReferenceSerializer=R0;exports.FileSpawnModel=NO;exports.File_Event=uw;exports.FixedJoint=hy;exports.Fog=Za;exports.FrameEvent=me;exports.GENERATOR=ka;exports.GameObject=S;exports.Gizmos=j;exports.GltfExport=Bg;exports.GltfExportBox=Ig;exports.Gradient=Ar;exports.Graphic=oh;exports.GraphicRaycaster=Cu;exports.Graphics=lo;exports.GridHelper=Ja;exports.GridLayoutGroup=iy;exports.GroundProjectedEnv=$n;exports.GroupActionModel=Yo;exports.HideFlags=lu;exports.HideOnStart=Ai;exports.HingeJoint=ah;exports.HorizontalLayoutGroup=ty;exports.HostData=u1;exports.Image=cl;exports.ImageReference=ir;exports.ImageReferenceSerializer=E0;exports.InheritVelocityModule=my;exports.Input=Dv;exports.InputEventQueue=Zt;exports.InputEvents=Ce;exports.InputField=Ey;exports.InstanceHandle=ar;exports.InstancingHandler=fr;exports.InstancingUtil=Ui;exports.InstantiateEvent=i0;exports.InstantiateIdProvider=_t;exports.InstantiateOptions=un;exports.Interactable=Sg;exports.JoinedRoomResponse=kC;exports.KeyEventArgs=yC;exports.Keyframe=ti;exports.LODGroup=Vu;exports.LODModel=el;exports.LeftRoomResponse=EC;exports.Light=xt;exports.LightData=I0;exports.LimitVelocityOverLifetimeModule=tt;exports.LoadingElementOptions=FT;exports.LogStats=xg;exports.LogType=di;exports.LookAt=Ry;exports.LookAtConstraint=wr;exports.MainModule=At;exports.MarkerTrackHandler=sf;exports.MarkerType=Oy;exports.MaskableGraphic=rh;exports.MaterialPropertyBlock=ps;exports.Mathf=I;exports.MeshCollider=vo;exports.MeshRenderer=Jc;exports.MinMaxCurve=H;exports.MinMaxGradient=Dr;exports.NEKeyboardEvent=Il;exports.NEPointerEvent=es;exports.NeedleButtonElement=Tx;exports.NeedleEngineWebComponent=jy;exports.NeedleMenu=Hn;exports.NeedlePatchesKey=hd;exports.NeedleXRController=zm;exports.NeedleXRSession=G;exports.NeedleXRSync=Vv;exports.NeedleXRUtils=Wv;exports.NestedGltf=tl;exports.NetworkConnection=Nv;exports.NetworkedStreamEvents=Dn;exports.NetworkedStreams=Xc;exports.Networking=fy;exports.NewInstanceModel=s0;exports.NoiseModule=pe;exports.ObjectRaycaster=zi;exports.ObjectUtils=yo;exports.OffsetConstraint=Tr;exports.OneEuroFilter=ld;exports.OneEuroFilterXYZ=km;exports.OpenURL=hl;exports.OrbitControls=de;exports.Outline=Ka;exports.OwnershipEvent=zv;exports.OwnershipModel=Wm;exports.PUBLIC_KEY=to;exports.Padding=kr;exports.ParticleBurst=iu;exports.ParticleSubEmitter=gy;exports.ParticleSystem=Oc;exports.ParticleSystemBaseBehaviour=Oo;exports.ParticleSystemRenderer=qi;exports.ParticleSystemShapeType=tu;exports.PeerHandle=ls;exports.PeerNetworking=Uv;exports.Physics=Da;exports.PhysicsExtension=Kg;exports.PhysicsMaterialCombine=it;exports.PixelationEffect=uh;exports.PlayAnimationOnClick=Cc;exports.PlayAudioOnClick=ho;exports.PlayableDirector=gr;exports.PlayerColor=Ba;exports.PlayerState=Bi;exports.PlayerStateEvent=$w;exports.PlayerSync=Xg;exports.PlayerView=A0;exports.PlayerViewManager=D0;exports.PointerEventData=qc;exports.PointerType=du;exports.PostProcessingEffect=Ge;exports.PostProcessingEffectOrder=Ze;exports.PostProcessingHandler=wy;exports.PreliminaryAction=Xa;exports.PreliminaryTrigger=th;exports.PrimitiveType=Fa;exports.Progress=se;exports.PromiseAllWithErrors=Om;exports.PromiseErrorResult=Pp;exports.RGBAColor=ee;exports.RapierPhysics=Pa;exports.RawImage=lf;exports.RaycastOptions=_o;exports.Rect=Hw;exports.RectTransform=dn;exports.ReflectionProbe=ts;exports.RegisteredAnimationInfo=io;exports.RemoteSkybox=Yu;exports.RenderTexture=An;exports.RenderTextureSerializer=iw;exports.Renderer=Wt;exports.RendererData=L0;exports.RendererLightmap=Eg;exports.Rigidbody=Fe;exports.RigidbodyConstraints=Ue;exports.RoomEvents=Y;exports.RotationBySpeedModule=Gi;exports.RotationOverLifetimeModule=pn;exports.SceneLightSettings=Yd;exports.SceneSwitcher=Ne;exports.ScreenCapture=ko;exports.ScreenSpaceAmbientOcclusion=ks;exports.ScreenSpaceAmbientOcclusionN8=gn;exports.ScrollFollow=Ts;exports.SeeThrough=Es;exports.SendQueue=sn;exports.SerializationContext=tg;exports.SetActiveOnClick=Vg;exports.ShadowCatcher=gh;exports.ShapeModule=py;exports.ShapeOverlapResult=kv;exports.SharpeningEffect=ph;exports.SignalAsset=nf;exports.SignalReceiver=wh;exports.SignalReceiverEvent=vh;exports.SignalTrackHandler=Ec;exports.Size=Ww;exports.SizeBySpeedModule=ri;exports.SizeOverLifetimeModule=Lr;exports.SkinnedMeshRenderer=Rg;exports.SmoothFollow=Zu;exports.SpatialGrabRaycaster=dr;exports.SpatialHtml=Sh;exports.SpatialTrigger=Ju;exports.SpatialTriggerReceiver=zn;exports.SpectatorCamera=ef;exports.SphereCollider=Wa;exports.SphereIntersection=qm;exports.SplineContainer=Ur;exports.SplineData=Vn;exports.SplineWalker=Qi;exports.Sprite=Cs;exports.SpriteData=Ca;exports.SpriteRenderer=si;exports.SpriteSheet=Ia;exports.StateMachineBehaviour=AP;exports.StreamEndedEvent=pg;exports.StreamReceivedEvent=sw;exports.SubEmitterSystem=nu;exports.SyncedCamera=Sy;exports.SyncedRoom=yn;exports.SyncedTransform=hn;exports.TapGestureTrigger=Wg;exports.TeleportTarget=Uu;exports.TestRunner=Cy;exports.TestSimulateUserData=Py;exports.Text=Tt;exports.TextBuilder=Jg;exports.TextExtension=zu;exports.TextureSheetAnimationModule=Dt;exports.TiltShiftEffect=qn;exports.Time=j0;exports.ToneMappingEffect=po;exports.TrackHandler=ll;exports.TrackType=li;exports.TrailModule=Te;exports.TransformData=Ee;exports.TransformGizmo=Fr;exports.TriggerBuilder=kt;exports.TriggerModel=ro;exports.TypeStore=P;exports.UIRaycastUtils=ug;exports.UIRootComponent=nh;exports.USDDocument=Ug;exports.USDObject=He;exports.USDWriter=Tw;exports.USDZExporter=Aw;exports.USDZExporter$1=Fn;exports.USDZText=fa;exports.USDZUIExtension=sy;exports.UriSerializer=nw;exports.UsageMarker=Kc;exports.UserJoinedOrLeftRoomModel=RC;exports.VERSION=ui;exports.VariantAction=zg;exports.VelocityOverLifetimeModule=Ie;exports.VerticalLayoutGroup=ey;exports.VideoPlayer=Je;exports.ViewDevice=fs;exports.Vignette=Br;exports.VisibilityAction=ih;exports.Voip=bo;exports.Volume=ol;exports.VolumeParameter=F;exports.VolumeProfile=Gu;exports.WaitForFrames=W1;exports.WaitForPromise=T0;exports.WaitForSeconds=sg;exports.Watch=ds;exports.WebARCameraBackground=Ph;exports.WebARSessionRoot=ji;exports.WebXR=Fu;exports.WebXRButtonFactory=ao;exports.WebXRImageTracking=Oh;exports.WebXRImageTrackingModel=Ds;exports.WebXRPlaneTracking=Ls;exports.WebXRTrackedImage=Ua;exports.XRControllerFollow=As;exports.XRControllerModel=ys;exports.XRControllerMovement=_i;exports.XRFlag=Di;exports.XRRig=mf;exports.XRState=Vt;exports.XRStateFlag=Rn;exports.__Ignore=Lx;exports.__internalNotifyObjectDestroyed=t1;exports.activeInHierarchyFieldName=us;exports.addAttributeChangeCallback=Cm;exports.addComponent=on;exports.addCustomExtensionPlugin=uM;exports.addNewComponent=er;exports.addPatch=cu;exports.apply=mu;exports.applyHMRChanges=PP;exports.applyPrototypeExtensions=g0;exports.beginListenDestroy=n0;exports.beginListenInstantiate=r0;exports.binaryIdentifierCasts=Nm;exports.build_scene_functions=hP;exports.builtinComponentKeyName=Wo;exports.calculateProgress01=Iy;exports.clearMessages=hS;exports.colorSerializer=QP;exports.compareAssociation=h0;exports.componentSerializer=bd;exports.copyTexture=uv;exports.createMotion=K0;exports.debugNet=qt;exports.debugOwner=jl;exports.decompressGpuTexture=jw;exports.deepClone=Dc;exports.delay=ms;exports.delayForFrames=Lc;exports.deserializeObject=Nd;exports.destroy=mi;exports.destroyComponentInstance=b0;exports.determineMimeTypeFromExtension=fw;exports.disposeObjectResources=be;exports.disposeStream=Ln;exports.editorGuidKeyName=Kl;exports.enableSpatialConsole=ga;exports.euler=KP;exports.eventListSerializer=tO;exports.exportAsGLTF=YT;exports.findByGuid=ng;exports.findObjectOfType=Na;exports.findObjectsOfType=w0;exports.findResourceUsers=Xm;exports.fitCamera=Z0;exports.fitObjectIntoVolume=pv;exports.foreachComponent=hr;exports.foreachComponentEnumerator=yu;exports.forward=kS;exports.generateQRCode=F0;exports.generateSeed=o0;exports.getBoundingBox=bi;exports.getCameraController=ov;exports.getComponent=br;exports.getComponentInChildren=Vc;exports.getComponentInParent=_c;exports.getComponents=Nc;exports.getComponentsInChildren=za;exports.getComponentsInParent=pu;exports.getFormattedDate=Mw;exports.getIconElement=yt;exports.getIconTexture=qp;exports.getLoader=ln;exports.getOrAddComponent=zc;exports.getParam=x;exports.getParentHierarchyPath=TS;exports.getPath=Vx;exports.getPeerOptions=CC;exports.getPeerjsInstance=Bv;exports.getResourceUserCount=n1;exports.getTempColor=lv;exports.getTempQuaternion=Kt;exports.getTempVector=B;exports.getUrlParams=Ac;exports.getVisibleInCustomShadowRendering=fv;exports.getWorldDirection=cv;exports.getWorldEuler=Tm;exports.getWorldPosition=Q;exports.getWorldQuaternion=fe;exports.getWorldRotation=au;exports.getWorldScale=Le;exports.hasCommercialLicense=Un;exports.hasIndieLicense=Wc;exports.hasPointerEventComponent=qd;exports.hasProLicense=Bn;exports.hideDebugConsole=_v;exports.imageToCanvas=Bw;exports.instantiate=co;exports.invokeLoadedImportPluginHooks=vw;exports.invokeXRSessionEnd=Av;exports.invokeXRSessionStart=Tv;exports.isActiveInHierarchy=x0;exports.isActiveSelf=Va;exports.isAndroidDevice=Xx;exports.isAnimationAction=dv;exports.isComponent=Bm;exports.isDebugMode=Ux;exports.isDesktop=Wx;exports.isDestroyed=cr;exports.isDevEnvironment=T;exports.isDisposed=e1;exports.isExporting=XT;exports.isGLTFModel=Cv;exports.isHostedOnGlitch=qb;exports.isHotReloadEnabled=Zp;exports.isHotReloading=SP;exports.isIPad=Gx;exports.isIconElement=z0;exports.isLocalNetwork=fi;exports.isMacOS=Yx;exports.isMobileDevice=Hx;exports.isMozillaXR=Qx;exports.isQuest=Jx;exports.isResourceTrackingEnabled=qv;exports.isSafari=Zx;exports.isUsingInstancing=gu;exports.isiOS=Kx;exports.isiPad=qx;exports.loadAsset=DT;exports.loadPMREM=Og;exports.loadSync=Ly;exports.logHierarchy=Dd;exports.lookAtInverse=vS;exports.lookAtObject=Ic;exports.lookAtScreenPoint=wS;exports.makeId=zx;exports.makeIdFromRandomWords=Yb;exports.makeNameSafe=yi;exports.markAsInstancedRendered=S0;exports.microphonePermissionsGranted=eS;exports.nameof=Bx;exports.nameofFactory=Xb;exports.objectSerializer=tw;exports.offXRSessionEnd=gC;exports.offXRSessionStart=mC;exports.onAfterRender=mP;exports.onBeforeRender=pP;exports.onClear=uP;exports.onDestroy=fP;exports.onInitialized=ag;exports.onStart=vu;exports.onUpdate=$0;exports.onXRSessionEnd=Fm;exports.onXRSessionStart=hu;exports.parseSync=Ox;exports.placeOnSurface=mv;exports.postprocessFBXMaterials=Lm;exports.prefix=$P;exports.pushState=Qb;exports.randomNumber=Nx;exports.registerBinaryType=Vm;exports.registerComponent=bu;exports.registerComponentExtension=Mg;exports.registerCustomEffectType=Xi;exports.registerExportExtensions=kg;exports.registerExtensions=Zd;exports.registerHotReloadType=q0;exports.registerLoader=jm;exports.registerPrefabProvider=l0;exports.registerPrototypeExtensions=y0;exports.registerType=Zm;exports.relativePathPrefix=Zb;exports.removeAttributeChangeCallback=Pm;exports.removeComponent=ig;exports.removeCustomImportExtensionType=fM;exports.removePatch=fC;exports.resolveUrl=_s;exports.sanitizeString=Kb;exports.saveImage=xx;exports.screenshot=gT;exports.screenshot2=Dy;exports.sendDestroyed=Ym;exports.serializable=f;exports.serializeObject=u0;exports.serializeable=ze;exports.setActive=ec;exports.setAllowBalloonMessages=iv;exports.setAllowOverlayMessages=rS;exports.setAutoFitEnabled=Td;exports.setCameraController=Mp;exports.setDestroyed=P0;exports.setDevEnvironment=FS;exports.setDisposable=Qv;exports.setDontDestroy=ea;exports.setOrAddParamsToUrl=Cp;exports.setParam=Fx;exports.setParamWithoutReload=uc;exports.setPeerOptions=PC;exports.setResourceTrackingEnabled=JC;exports.setState=xm;exports.setVisibleInCustomShadowRendering=Dm;exports.setWorldEuler=Am;exports.setWorldPosition=rt;exports.setWorldPositionXYZ=lr;exports.setWorldQuaternion=an;exports.setWorldQuaternionXYZW=Rm;exports.setWorldRotation=hv;exports.setWorldRotationXYZ=jc;exports.setWorldScale=Ma;exports.showBalloonError=Bc;exports.showBalloonMessage=we;exports.showBalloonWarning=ue;exports.showDebugConsole=Im;exports.slerp=bS;exports.syncDestroy=Uc;exports.syncField=qg;exports.syncInstantiate=Km;exports.textureToCanvas=AS;exports.toSourceId=Jb;exports.tryCastBinary=Iv;exports.tryDetermineMimetypeFromBinary=mw;exports.tryDetermineMimetypeFromURL=pw;exports.tryFindObject=Oa;exports.tryGetGuid=jv;exports.unregisterHotReloadType=X0;exports.unwatchWrite=Sm;exports.useForAutoFit=rv;exports.validate=vt;exports.watchWrite=ru;
1654
+ `),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),Wd(Xp,{element:this.#t}),this.#o?.disconnect(),this.#o??=new MutationObserver(()=>this.#c()),this.#o.observe(this.#e,{attributes:!0}),xp&&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=>{xp&&console.log("Needle Button clicked",{defaultPrevented:e.defaultPrevented,hasButton:!!this.#e}),!e.defaultPrevented&&this.#e&&this.#e.click()}}typeof window<"u"&&!window.customElements.get(Gb)&&window.customElements.define(Gb,Tx);const Ll=x("debugavatar");class By{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 Ax{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 un;i=S.instantiate(Oa(t,e.scene),o)}}else i=t;if(!i)return null;const n=this.findAvatar(i);return n.isValid?(Ll&&console.log("[Custom Avatar] valid config",t,Ll?n:""),n):(console.warn("[Custom Avatar] config isn't valid",t,Ll?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(Ll&&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 ln().parseSync(e,o,null,0))?.scene??null:null}const i=new q.GLTFLoader;return cg(i,e),new Promise((n,o)=>{const r=this.avatarRegistryUrl+"/"+t;i.load(r,async a=>{await ln().createBuiltinComponents(e,r,a,null,void 0),n(a.scene)},a=>{Ll&&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 By(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 Dx{get extensionName(){return"DocumentExtension"}onAfterBuildDocument(e){}}class Lx{}const JT=Object.freeze(Object.defineProperty({__proto__:null,ActionBuilder:he,ActionCollection:zw,ActionModel:Yt,AlignmentConstraint:Hc,Animation:Et,AnimationCurve:lh,AnimationExtension:Du,AnimationTrackHandler:kc,Animator:at,AnimatorController:Fi,Antialiasing:hh,Attractor:nl,AudioExtension:Or,AudioListener:as,AudioSource:gi,AudioTrackHandler:hs,Avatar:uo,AvatarBlink_Simple:xr,AvatarEyeLook_Rotation:_g,AvatarLoader:Ax,AvatarMarker:Pe,AvatarModel:By,Avatar_Brain_LookAt:Sc,Avatar_MouthShapes:Qc,Avatar_MustacheShake:gg,Avatar_POI:rr,AxesHelper:$a,BaseUIComponent:Ni,BasicIKConstraint:vg,BehaviorExtension:Yg,BehaviorModel:bt,BloomEffect:Xu,BoxCollider:Mu,BoxGizmo:Rr,BoxHelperComponent:st,Button:Rs,CallInfo:rs,Camera:ei,CameraTargetReachedEvent:xc,Canvas:ja,CanvasGroup:fo,CapsuleCollider:gs,ChangeMaterialOnClick:Ng,ChangeTransformOnClick:Mr,CharacterController:Sr,CharacterControllerInput:ws,ChromaticAberration:dh,ClickThrough:uf,ColorAdjustments:Mo,ColorBySpeedModule:il,ColorOverLifetimeModule:Hu,ContactShadows:Yc,ControlTrackHandler:of,CursorFollow:zr,CustomBranding:Er,Deletable:Cg,DeleteBox:oo,DepthOfField:mn,DeviceFlag:ku,DocumentExtension:Dx,DragControls:Qo,DropListener:Ss,Duplicatable:Ag,EffectWrapper:Mc,EmissionModule:Ms,EmphasizeOnClick:qa,EnvironmentScene:hf,EventList:ie,EventListEvent:Su,EventSystem:$t,EventTrigger:Tu,FieldWithDefault:ww,FixedJoint:hy,Fog:Za,GltfExport:Bg,GltfExportBox:Ig,Gradient:Ar,Graphic:oh,GraphicRaycaster:Cu,GridHelper:Ja,GridLayoutGroup:iy,GroundProjectedEnv:$n,GroupActionModel:Yo,HideOnStart:Ai,HingeJoint:ah,HorizontalLayoutGroup:ty,get HoverAnimation(){return exports.HoverAnimation},Image:cl,InheritVelocityModule:my,InputField:Ey,InstanceHandle:ar,InstancingHandler:fr,Interactable:Sg,Keyframe:ti,LODGroup:Vu,LODModel:el,Light:xt,LimitVelocityOverLifetimeModule:tt,LogStats:xg,LookAt:Ry,LookAtConstraint:wr,MainModule:At,MarkerTrackHandler:sf,MaskableGraphic:rh,MeshCollider:vo,MeshRenderer:Jc,MinMaxCurve:H,MinMaxGradient:Dr,NeedleMenu:Hn,NestedGltf:tl,Networking:fy,NoiseModule:pe,ObjectRaycaster:zi,OffsetConstraint:Tr,OpenURL:hl,OrbitControls:de,Outline:Ka,Padding:kr,ParticleBurst:iu,ParticleSubEmitter:gy,ParticleSystem:Oc,ParticleSystemRenderer:qi,PhysicsExtension:Kg,PixelationEffect:uh,PlayAnimationOnClick:Cc,PlayAudioOnClick:ho,PlayableDirector:gr,PlayerColor:Ba,PointerEventData:qc,PostProcessingHandler:wy,PreliminaryAction:Xa,PreliminaryTrigger:th,RawImage:lf,Rect:Hw,RectTransform:dn,ReflectionProbe:ts,RegisteredAnimationInfo:io,RemoteSkybox:Yu,Renderer:Wt,RendererLightmap:Eg,Rigidbody:Fe,RotationBySpeedModule:Gi,RotationOverLifetimeModule:pn,SceneSwitcher:Ne,ScreenCapture:ko,ScreenSpaceAmbientOcclusion:ks,ScreenSpaceAmbientOcclusionN8:gn,ScrollFollow:Ts,SeeThrough:Es,SetActiveOnClick:Vg,ShadowCatcher:gh,ShapeModule:py,SharpeningEffect:ph,SignalAsset:nf,SignalReceiver:wh,SignalReceiverEvent:vh,SignalTrackHandler:Ec,Size:Ww,SizeBySpeedModule:ri,SizeOverLifetimeModule:Lr,SkinnedMeshRenderer:Rg,SmoothFollow:Zu,SpatialGrabRaycaster:dr,SpatialHtml:Sh,SpatialTrigger:Ju,SpatialTriggerReceiver:zn,SpectatorCamera:ef,SphereCollider:Wa,SplineContainer:Ur,SplineData:Vn,SplineWalker:Qi,Sprite:Cs,SpriteData:Ca,SpriteRenderer:si,SpriteSheet:Ia,SubEmitterSystem:nu,SyncedCamera:Sy,SyncedRoom:yn,SyncedTransform:hn,TapGestureTrigger:Wg,TeleportTarget:Uu,TestRunner:Cy,TestSimulateUserData:Py,Text:Tt,TextBuilder:Jg,TextExtension:zu,TextureSheetAnimationModule:Dt,TiltShiftEffect:qn,ToneMappingEffect:po,TrailModule:Te,TransformData:Ee,TransformGizmo:Fr,TriggerBuilder:kt,TriggerModel:ro,UIRaycastUtils:ug,UIRootComponent:nh,USDZExporter:Fn,USDZText:fa,USDZUIExtension:sy,UsageMarker:Kc,VariantAction:zg,VelocityOverLifetimeModule:Ie,VerticalLayoutGroup:ey,VideoPlayer:Je,get ViewBox(){return exports.ViewBox},Vignette:Br,VisibilityAction:ih,Voip:bo,Volume:ol,VolumeParameter:F,VolumeProfile:Gu,WebARCameraBackground:Ph,WebARSessionRoot:ji,WebXR:Fu,WebXRImageTracking:Oh,WebXRImageTrackingModel:Ds,WebXRPlaneTracking:Ls,WebXRTrackedImage:Ua,XRControllerFollow:As,XRControllerModel:ys,XRControllerMovement:_i,XRFlag:Di,XRRig:mf,XRState:Vt,__Ignore:Lx},Symbol.toStringTag,{value:"Module"})),Tc=x("debugmissingcamera");le.registerCallback(ae.MissingCamera,s=>{Tc&&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 ei;if(i.sourceId=s.files?.[0]?.src??"unknown",i.fieldOfView=35,s.context.domElement.getAttribute("transparent")!=null)i.clearFlags=or.Uninitialized;else if(s.context.domElement.getAttribute("background-image")?.length||s.context.lightmaps.tryGetSkybox(i.sourceId))i.clearFlags=or.Skybox;else{if(i.clearFlags=or.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 hf("neutral");e.environment=a.fromScene(l,.025).texture}}const o=er(t,i,!0);return t.position.x=0,t.position.y=1,t.position.z=2,s.context.domElement?.cameraControls!=!1&&Ix(s.context,o),o});le.registerCallback(ae.ContextCreated,s=>{if(!s.context.mainCamera){Tc&&console.log("Will not auto-fit because a default camera exists");return}if(s.context.domElement?.cameraControls==!0){if(ov(s.context.mainCamera)?.isCameraController==!0){Tc&&console.log("Will not auto-fit because a camera controller exists");return}Ix(s.context)}});function Ix(s,e){e=e??s.mainCameraComponent;const t=e?.gameObject;if(Tc&&console.log("Creating default camera controls",e?.name),t){const i=zc(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,Tc&&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 gr&&n.playOnAwake===!0)return!0;if(n instanceof Et)return n.playAutomatically=!0,!0;if(n instanceof gr)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 Ur,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 eA extends re.WorkerBase{constructor(){super(new Worker(new URL("/generateMeshBVH.worker-DiCnZlf3.js",typeof document>"u"?require("url").pathToFileURL(__filename).href:ma&&ma.tagName.toUpperCase()==="SCRIPT"&&ma.src||new URL("needle-engine.bundle-CXVjO2uF.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 tA=Object.freeze(Object.defineProperty({__proto__:null,GenerateMeshBVHWorker:eA},Symbol.toStringTag,{value:"Module"}));exports.$componentName=Pv;exports.$physicsKey=dC;exports.ActionBuilder=he;exports.ActionCollection=zw;exports.ActionModel=Yt;exports.Addressables=k0;exports.AlignmentConstraint=Hc;exports.AmbientMode=wa;exports.Animation=Et;exports.AnimationCurve=lh;exports.AnimationExtension=Du;exports.AnimationTrackHandler=kc;exports.AnimationUtils=Nn;exports.Animator=at;exports.AnimatorConditionMode=Ys;exports.AnimatorController=Fi;exports.AnimatorControllerParameterType=hg;exports.AnimatorStateInfo=Fl;exports.Antialiasing=hh;exports.Application=cn;exports.AssetDatabase=Hv;exports.AssetReference=K;exports.Attractor=nl;exports.AudioExtension=Or;exports.AudioListener=as;exports.AudioSource=gi;exports.AudioTrackHandler=hs;exports.Avatar=uo;exports.AvatarBlink_Simple=xr;exports.AvatarEyeLook_Rotation=_g;exports.AvatarLoader=Ax;exports.AvatarMarker=Pe;exports.AvatarModel=By;exports.Avatar_Brain_LookAt=Sc;exports.Avatar_MouthShapes=Qc;exports.Avatar_MustacheShake=gg;exports.Avatar_POI=rr;exports.Axes=da;exports.AxesHelper=$a;exports.BUILD_TIME=fc;exports.BaseUIComponent=Ni;exports.BasicIKConstraint=vg;exports.BehaviorExtension=Yg;exports.BehaviorModel=bt;exports.BloomEffect=Xu;exports.BoxCollider=Mu;exports.BoxGizmo=Rr;exports.BoxHelperComponent=st;exports.Button=Rs;exports.ButtonsFactory=Ii;exports.CallDirection=ow;exports.CallInfo=rs;exports.Camera=ei;exports.CameraTargetReachedEvent=xc;exports.Canvas=ja;exports.CanvasGroup=fo;exports.CapsuleCollider=gs;exports.ChangeMaterialOnClick=Ng;exports.ChangeTransformOnClick=Mr;exports.CharacterController=Sr;exports.CharacterControllerInput=ws;exports.ChromaticAberration=dh;exports.CircularBuffer=pi;exports.ClearFlags=or;exports.ClickThrough=uf;exports.ClipExtrapolation=Cn;exports.Collider=Hi;exports.Collision=Mv;exports.CollisionDetectionMode=xu;exports.ColorAdjustments=Mo;exports.ColorBySpeedModule=il;exports.ColorOverLifetimeModule=Hu;exports.Component=OP;exports.Component$1=E;exports.ComponentLifecycleEvents=fu;exports.Components=JT;exports.ConnectionEvents=Fv;exports.ContactPoint=Ov;exports.ContactShadows=Yc;exports.Context=U;exports.ContextArgs=dP;exports.ContextEvent=ae;exports.ContextRegistry=le;exports.ControlTrackHandler=of;exports.CursorFollow=zr;exports.CustomBranding=Er;exports.CustomShader=_e;exports.DefaultReflectionMode=$d;exports.Deletable=Cg;exports.DeleteBox=oo;exports.DepthOfField=mn;exports.DeviceFlag=ku;exports.DocumentExtension=Dx;exports.DragControls=Qo;exports.DragMode=Pg;exports.DropListener=Ss;exports.Duplicatable=Ag;exports.EffectWrapper=Mc;exports.EmissionModule=Ms;exports.EmphasizeOnClick=qa;exports.EngineLoadingView=Rc;exports.EnvironmentScene=hf;exports.EventList=ie;exports.EventListEvent=Su;exports.EventSystem=$t;exports.EventTrigger=Tu;exports.FieldWithDefault=ww;exports.FileReference=nr;exports.FileReferenceSerializer=R0;exports.FileSpawnModel=NO;exports.File_Event=uw;exports.FixedJoint=hy;exports.Fog=Za;exports.FrameEvent=me;exports.GENERATOR=ka;exports.GameObject=S;exports.Gizmos=j;exports.GltfExport=Bg;exports.GltfExportBox=Ig;exports.Gradient=Ar;exports.Graphic=oh;exports.GraphicRaycaster=Cu;exports.Graphics=lo;exports.GridHelper=Ja;exports.GridLayoutGroup=iy;exports.GroundProjectedEnv=$n;exports.GroupActionModel=Yo;exports.HideFlags=lu;exports.HideOnStart=Ai;exports.HingeJoint=ah;exports.HorizontalLayoutGroup=ty;exports.HostData=u1;exports.Image=cl;exports.ImageReference=ir;exports.ImageReferenceSerializer=E0;exports.InheritVelocityModule=my;exports.Input=Dv;exports.InputEventQueue=Zt;exports.InputEvents=Ce;exports.InputField=Ey;exports.InstanceHandle=ar;exports.InstancingHandler=fr;exports.InstancingUtil=Ui;exports.InstantiateEvent=i0;exports.InstantiateIdProvider=_t;exports.InstantiateOptions=un;exports.Interactable=Sg;exports.JoinedRoomResponse=kC;exports.KeyEventArgs=yC;exports.Keyframe=ti;exports.LODGroup=Vu;exports.LODModel=el;exports.LeftRoomResponse=EC;exports.Light=xt;exports.LightData=I0;exports.LimitVelocityOverLifetimeModule=tt;exports.LoadingElementOptions=FT;exports.LogStats=xg;exports.LogType=di;exports.LookAt=Ry;exports.LookAtConstraint=wr;exports.MainModule=At;exports.MarkerTrackHandler=sf;exports.MarkerType=Oy;exports.MaskableGraphic=rh;exports.MaterialPropertyBlock=ps;exports.Mathf=I;exports.MeshCollider=vo;exports.MeshRenderer=Jc;exports.MinMaxCurve=H;exports.MinMaxGradient=Dr;exports.NEKeyboardEvent=Il;exports.NEPointerEvent=es;exports.NeedleButtonElement=Tx;exports.NeedleEngineWebComponent=jy;exports.NeedleMenu=Hn;exports.NeedlePatchesKey=hd;exports.NeedleXRController=zm;exports.NeedleXRSession=G;exports.NeedleXRSync=Vv;exports.NeedleXRUtils=Wv;exports.NestedGltf=tl;exports.NetworkConnection=Nv;exports.NetworkedStreamEvents=Dn;exports.NetworkedStreams=Xc;exports.Networking=fy;exports.NewInstanceModel=s0;exports.NoiseModule=pe;exports.ObjectRaycaster=zi;exports.ObjectUtils=yo;exports.OffsetConstraint=Tr;exports.OneEuroFilter=ld;exports.OneEuroFilterXYZ=km;exports.OpenURL=hl;exports.OrbitControls=de;exports.Outline=Ka;exports.OwnershipEvent=zv;exports.OwnershipModel=Wm;exports.PUBLIC_KEY=to;exports.Padding=kr;exports.ParticleBurst=iu;exports.ParticleSubEmitter=gy;exports.ParticleSystem=Oc;exports.ParticleSystemBaseBehaviour=Oo;exports.ParticleSystemRenderer=qi;exports.ParticleSystemShapeType=tu;exports.PeerHandle=ls;exports.PeerNetworking=Uv;exports.Physics=Da;exports.PhysicsExtension=Kg;exports.PhysicsMaterialCombine=it;exports.PixelationEffect=uh;exports.PlayAnimationOnClick=Cc;exports.PlayAudioOnClick=ho;exports.PlayableDirector=gr;exports.PlayerColor=Ba;exports.PlayerState=Bi;exports.PlayerStateEvent=$w;exports.PlayerSync=Xg;exports.PlayerView=A0;exports.PlayerViewManager=D0;exports.PointerEventData=qc;exports.PointerType=du;exports.PostProcessingEffect=Ge;exports.PostProcessingEffectOrder=Ze;exports.PostProcessingHandler=wy;exports.PreliminaryAction=Xa;exports.PreliminaryTrigger=th;exports.PrimitiveType=Fa;exports.Progress=se;exports.PromiseAllWithErrors=Om;exports.PromiseErrorResult=Pp;exports.RGBAColor=ee;exports.RapierPhysics=Pa;exports.RawImage=lf;exports.RaycastOptions=_o;exports.Rect=Hw;exports.RectTransform=dn;exports.ReflectionProbe=ts;exports.RegisteredAnimationInfo=io;exports.RemoteSkybox=Yu;exports.RenderTexture=An;exports.RenderTextureSerializer=iw;exports.Renderer=Wt;exports.RendererData=L0;exports.RendererLightmap=Eg;exports.Rigidbody=Fe;exports.RigidbodyConstraints=Ue;exports.RoomEvents=Y;exports.RotationBySpeedModule=Gi;exports.RotationOverLifetimeModule=pn;exports.SceneLightSettings=Yd;exports.SceneSwitcher=Ne;exports.ScreenCapture=ko;exports.ScreenSpaceAmbientOcclusion=ks;exports.ScreenSpaceAmbientOcclusionN8=gn;exports.ScrollFollow=Ts;exports.SeeThrough=Es;exports.SendQueue=sn;exports.SerializationContext=tg;exports.SetActiveOnClick=Vg;exports.ShadowCatcher=gh;exports.ShapeModule=py;exports.ShapeOverlapResult=kv;exports.SharpeningEffect=ph;exports.SignalAsset=nf;exports.SignalReceiver=wh;exports.SignalReceiverEvent=vh;exports.SignalTrackHandler=Ec;exports.Size=Ww;exports.SizeBySpeedModule=ri;exports.SizeOverLifetimeModule=Lr;exports.SkinnedMeshRenderer=Rg;exports.SmoothFollow=Zu;exports.SpatialGrabRaycaster=dr;exports.SpatialHtml=Sh;exports.SpatialTrigger=Ju;exports.SpatialTriggerReceiver=zn;exports.SpectatorCamera=ef;exports.SphereCollider=Wa;exports.SphereIntersection=qm;exports.SplineContainer=Ur;exports.SplineData=Vn;exports.SplineWalker=Qi;exports.Sprite=Cs;exports.SpriteData=Ca;exports.SpriteRenderer=si;exports.SpriteSheet=Ia;exports.StateMachineBehaviour=AP;exports.StreamEndedEvent=pg;exports.StreamReceivedEvent=sw;exports.SubEmitterSystem=nu;exports.SyncedCamera=Sy;exports.SyncedRoom=yn;exports.SyncedTransform=hn;exports.TapGestureTrigger=Wg;exports.TeleportTarget=Uu;exports.TestRunner=Cy;exports.TestSimulateUserData=Py;exports.Text=Tt;exports.TextBuilder=Jg;exports.TextExtension=zu;exports.TextureSheetAnimationModule=Dt;exports.TiltShiftEffect=qn;exports.Time=j0;exports.ToneMappingEffect=po;exports.TrackHandler=ll;exports.TrackType=li;exports.TrailModule=Te;exports.TransformData=Ee;exports.TransformGizmo=Fr;exports.TriggerBuilder=kt;exports.TriggerModel=ro;exports.TypeStore=P;exports.UIRaycastUtils=ug;exports.UIRootComponent=nh;exports.USDDocument=Ug;exports.USDObject=He;exports.USDWriter=Tw;exports.USDZExporter=Aw;exports.USDZExporter$1=Fn;exports.USDZText=fa;exports.USDZUIExtension=sy;exports.UriSerializer=nw;exports.UsageMarker=Kc;exports.UserJoinedOrLeftRoomModel=RC;exports.VERSION=ui;exports.VariantAction=zg;exports.VelocityOverLifetimeModule=Ie;exports.VerticalLayoutGroup=ey;exports.VideoPlayer=Je;exports.ViewDevice=fs;exports.Vignette=Br;exports.VisibilityAction=ih;exports.Voip=bo;exports.Volume=ol;exports.VolumeParameter=F;exports.VolumeProfile=Gu;exports.WaitForFrames=W1;exports.WaitForPromise=T0;exports.WaitForSeconds=sg;exports.Watch=ds;exports.WebARCameraBackground=Ph;exports.WebARSessionRoot=ji;exports.WebXR=Fu;exports.WebXRButtonFactory=ao;exports.WebXRImageTracking=Oh;exports.WebXRImageTrackingModel=Ds;exports.WebXRPlaneTracking=Ls;exports.WebXRTrackedImage=Ua;exports.XRControllerFollow=As;exports.XRControllerModel=ys;exports.XRControllerMovement=_i;exports.XRFlag=Di;exports.XRRig=mf;exports.XRState=Vt;exports.XRStateFlag=Rn;exports.__Ignore=Lx;exports.__internalNotifyObjectDestroyed=t1;exports.activeInHierarchyFieldName=us;exports.addAttributeChangeCallback=Cm;exports.addComponent=on;exports.addCustomExtensionPlugin=uM;exports.addNewComponent=er;exports.addPatch=cu;exports.apply=mu;exports.applyHMRChanges=PP;exports.applyPrototypeExtensions=g0;exports.beginListenDestroy=n0;exports.beginListenInstantiate=r0;exports.binaryIdentifierCasts=Nm;exports.build_scene_functions=hP;exports.builtinComponentKeyName=Wo;exports.calculateProgress01=Iy;exports.clearMessages=hS;exports.colorSerializer=QP;exports.compareAssociation=h0;exports.componentSerializer=bd;exports.copyTexture=uv;exports.createMotion=K0;exports.debugNet=qt;exports.debugOwner=jl;exports.decompressGpuTexture=jw;exports.deepClone=Dc;exports.delay=ms;exports.delayForFrames=Lc;exports.deserializeObject=Nd;exports.destroy=mi;exports.destroyComponentInstance=b0;exports.determineMimeTypeFromExtension=fw;exports.disposeObjectResources=be;exports.disposeStream=Ln;exports.editorGuidKeyName=Kl;exports.enableSpatialConsole=ga;exports.euler=KP;exports.eventListSerializer=tO;exports.exportAsGLTF=YT;exports.findByGuid=ng;exports.findObjectOfType=Na;exports.findObjectsOfType=w0;exports.findResourceUsers=Xm;exports.fitCamera=Z0;exports.fitObjectIntoVolume=pv;exports.foreachComponent=hr;exports.foreachComponentEnumerator=yu;exports.forward=kS;exports.generateQRCode=F0;exports.generateSeed=o0;exports.getBoundingBox=bi;exports.getCameraController=ov;exports.getComponent=br;exports.getComponentInChildren=Vc;exports.getComponentInParent=_c;exports.getComponents=Nc;exports.getComponentsInChildren=za;exports.getComponentsInParent=pu;exports.getFormattedDate=Mw;exports.getIconElement=yt;exports.getIconTexture=qp;exports.getLoader=ln;exports.getOrAddComponent=zc;exports.getParam=x;exports.getParentHierarchyPath=TS;exports.getPath=Vx;exports.getPeerOptions=CC;exports.getPeerjsInstance=Bv;exports.getResourceUserCount=n1;exports.getTempColor=lv;exports.getTempQuaternion=Kt;exports.getTempVector=B;exports.getUrlParams=Ac;exports.getVisibleInCustomShadowRendering=fv;exports.getWorldDirection=cv;exports.getWorldEuler=Tm;exports.getWorldPosition=Q;exports.getWorldQuaternion=fe;exports.getWorldRotation=au;exports.getWorldScale=Le;exports.hasCommercialLicense=Un;exports.hasIndieLicense=Wc;exports.hasPointerEventComponent=qd;exports.hasProLicense=Bn;exports.hideDebugConsole=_v;exports.imageToCanvas=Bw;exports.instantiate=co;exports.invokeLoadedImportPluginHooks=vw;exports.invokeXRSessionEnd=Av;exports.invokeXRSessionStart=Tv;exports.isActiveInHierarchy=x0;exports.isActiveSelf=Va;exports.isAndroidDevice=Xx;exports.isAnimationAction=dv;exports.isComponent=Bm;exports.isDebugMode=Ux;exports.isDesktop=Wx;exports.isDestroyed=cr;exports.isDevEnvironment=T;exports.isDisposed=e1;exports.isExporting=XT;exports.isGLTFModel=Cv;exports.isHostedOnGlitch=qb;exports.isHotReloadEnabled=Zp;exports.isHotReloading=SP;exports.isIPad=Gx;exports.isIconElement=z0;exports.isLocalNetwork=fi;exports.isMacOS=Yx;exports.isMobileDevice=Hx;exports.isMozillaXR=Qx;exports.isQuest=Jx;exports.isResourceTrackingEnabled=qv;exports.isSafari=Zx;exports.isUsingInstancing=gu;exports.isiOS=Kx;exports.isiPad=qx;exports.loadAsset=DT;exports.loadPMREM=Og;exports.loadSync=Ly;exports.logHierarchy=Dd;exports.lookAtInverse=vS;exports.lookAtObject=Ic;exports.lookAtScreenPoint=wS;exports.makeId=zx;exports.makeIdFromRandomWords=Yb;exports.makeNameSafe=yi;exports.markAsInstancedRendered=S0;exports.microphonePermissionsGranted=eS;exports.nameof=Bx;exports.nameofFactory=Xb;exports.objectSerializer=tw;exports.offXRSessionEnd=gC;exports.offXRSessionStart=mC;exports.onAfterRender=mP;exports.onBeforeRender=pP;exports.onClear=uP;exports.onDestroy=fP;exports.onInitialized=ag;exports.onStart=vu;exports.onUpdate=$0;exports.onXRSessionEnd=Fm;exports.onXRSessionStart=hu;exports.parseSync=Ox;exports.placeOnSurface=mv;exports.postprocessFBXMaterials=Lm;exports.prefix=$P;exports.pushState=Qb;exports.randomNumber=Nx;exports.registerBinaryType=Vm;exports.registerComponent=bu;exports.registerComponentExtension=Mg;exports.registerCustomEffectType=Xi;exports.registerExportExtensions=kg;exports.registerExtensions=Zd;exports.registerHotReloadType=q0;exports.registerLoader=jm;exports.registerPrefabProvider=l0;exports.registerPrototypeExtensions=y0;exports.registerType=Zm;exports.relativePathPrefix=Zb;exports.removeAttributeChangeCallback=Pm;exports.removeComponent=ig;exports.removeCustomImportExtensionType=fM;exports.removePatch=fC;exports.resolveUrl=_s;exports.sanitizeString=Kb;exports.saveImage=xx;exports.screenshot=gT;exports.screenshot2=Dy;exports.sendDestroyed=Ym;exports.serializable=f;exports.serializeObject=u0;exports.serializeable=ze;exports.setActive=ec;exports.setAllowBalloonMessages=iv;exports.setAllowOverlayMessages=rS;exports.setAutoFitEnabled=Td;exports.setCameraController=Mp;exports.setDestroyed=P0;exports.setDevEnvironment=FS;exports.setDisposable=Qv;exports.setDontDestroy=ea;exports.setOrAddParamsToUrl=Cp;exports.setParam=Fx;exports.setParamWithoutReload=uc;exports.setPeerOptions=PC;exports.setResourceTrackingEnabled=JC;exports.setState=xm;exports.setVisibleInCustomShadowRendering=Dm;exports.setWorldEuler=Am;exports.setWorldPosition=rt;exports.setWorldPositionXYZ=lr;exports.setWorldQuaternion=an;exports.setWorldQuaternionXYZW=Rm;exports.setWorldRotation=hv;exports.setWorldRotationXYZ=jc;exports.setWorldScale=Ma;exports.showBalloonError=Bc;exports.showBalloonMessage=we;exports.showBalloonWarning=ue;exports.showDebugConsole=Im;exports.slerp=bS;exports.syncDestroy=Uc;exports.syncField=qg;exports.syncInstantiate=Km;exports.textureToCanvas=AS;exports.toSourceId=Jb;exports.tryCastBinary=Iv;exports.tryDetermineMimetypeFromBinary=mw;exports.tryDetermineMimetypeFromURL=pw;exports.tryFindObject=Oa;exports.tryGetGuid=jv;exports.unregisterHotReloadType=X0;exports.unwatchWrite=Sm;exports.useForAutoFit=rv;exports.validate=vt;exports.watchWrite=ru;
@@ -1990,9 +1990,9 @@ Ro('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUIL
1990
1990
  Ro('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');
1991
1991
  Ro('globalThis["__NEEDLE_ENGINE_VERSION__"] = "4.16.0";');
1992
1992
  Ro('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');
1993
- Ro('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Thu Mar 05 2026 14:33:44 GMT+0000 (Coordinated Universal Time)";');
1993
+ Ro('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Thu Mar 05 2026 14:43:31 GMT+0000 (Coordinated Universal Time)";');
1994
1994
  Ro('globalThis["__NEEDLE_PUBLIC_KEY__"] = "' + NEEDLE_PUBLIC_KEY + '";');
1995
- const Gi = "4.16.0", Rc = "undefined", Bd = "Thu Mar 05 2026 14:33:44 GMT+0000 (Coordinated Universal Time)";
1995
+ const Gi = "4.16.0", Rc = "undefined", Bd = "Thu Mar 05 2026 14:43:31 GMT+0000 (Coordinated Universal Time)";
1996
1996
  e0 && console.log(`Engine version: ${Gi} (generator: ${Rc})
1997
1997
  Project built at ${Bd}`);
1998
1998
  const mr = NEEDLE_PUBLIC_KEY, bo = "needle_isActiveInHierarchy", ha = "builtin_components", cd = "needle_editor_guid";
@@ -141,7 +141,7 @@ void main(){
141
141
  #__vconsole .vc-mask {
142
142
  overflow: hidden;
143
143
  }
144
- `,Or?.prepend(i),o===!0&&n_()<=0&&T_(),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.":"")),vc=!1,hi=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function KO(){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"),hi?.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 fg="padding: 10px; font-family: monospace;",I_="margin-bottom: 10px;",kr="margin-bottom: 10px; margin-top: 15px;",JO="width: 100%; border-collapse: collapse; border: 1px solid rgba(0,0,0,0.1); table-layout: fixed;",L_="border: 1px solid rgba(0,0,0,0.1); padding: 5px;",ek=L_,tk=L_+" word-break: break-all;";function Hn(o,e=!1){e&&o.sort((i,n)=>(n.value?1:0)-(i.value?1:0));let t=`<table style='${JO}'>`;t+="<tbody>";for(const i of o){const n=typeof i.value=="boolean"?i.value?"\u2705":"\u274C":i.value;t+=`<tr><td style='${ek}'>${i.label}</td><td style='${tk}'>${n}</td></tr>`}return t+="</tbody></table>",t}function D_(){try{if(document.createElement("canvas").getContext("webgl2"))return"\u2705"}catch{}return"\u274C"}function ik(){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='${fg}'>`;const i=uk();t+=`<h3 style='${I_}'>Device: ${i}</h3>`,t+=Hn([{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+=Hn(n,!1)),t+="</div>",t+=`<div style='${fg} margin-top: 20px;'>`,t+=`<h3 style='${I_}'>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:D_()}];t+=Hn(l,!1),t+="</div>",e(t)}),o}function nk(){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='${fg}'>`;const i=ok();i.length>0&&(t+=`<h3 style='${kr}'>General GPU Info</h3>`,t+=Hn(i,!1));const n=rk();n.length>0&&(t+=`<h3 style='${kr}'>WebGL</h3>`,t+=Hn(n,!1));const s=ak();s.length>0&&(t+=`<h3 style='${kr}'>WebGL 2 Features</h3>`,t+=Hn(s,!1));const r=lk();r.length>0&&(t+=`<h3 style='${kr}'>WebGL Limits</h3>`,t+=Hn(r,!1));const a=ck();a.length>0&&(t+=`<h3 style='${kr}'>Texture Formats</h3>`,t+=Hn(a,!1));const l=await hk();if(l.length>0&&(t+=`<h3 style='${kr}'>WebGPU</h3>`,t+=Hn(l,!1)),I.isSafari()){const c=dk();c.length>0&&(t+=`<h3 style='${kr}'>Safari GPU Info</h3>`,t+=Hn(c,!1))}t+="</div>",e(t)}),o}function ok(){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=j_();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=sk(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 sk(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 rk(){const o=[],e=j_();return e&&(o.push({label:"\u{1F4CA} WebGL Version",value:e.version}),o.push({label:"\u{1F3AE} WebGL 2 Available",value:D_()})),o}function ak(){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 lk(){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 ck(){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 hk(){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 j_(){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 dk(){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 uk(){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 pk(){return document.querySelector("#__vconsole .vc-switch")||null}function mk(){return document.querySelector("#__vconsole")||null}const B_=w("debugdefines");Ss('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";'),Ss('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";'),Ss('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";'),Ss('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";'),Ss('globalThis["__NEEDLE_ENGINE_VERSION__"] = "4.16.0";'),Ss('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";'),Ss('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Thu Mar 05 2026 14:33:44 GMT+0000 (Coordinated Universal Time)";'),Ss('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const Ti="4.16.0",Wa="undefined",wc="Thu Mar 05 2026 14:33:44 GMT+0000 (Coordinated Universal Time)";B_&&console.log(`Engine version: ${Ti} (generator: ${Wa})
144
+ `,Or?.prepend(i),o===!0&&n_()<=0&&T_(),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.":"")),vc=!1,hi=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function KO(){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"),hi?.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 fg="padding: 10px; font-family: monospace;",I_="margin-bottom: 10px;",kr="margin-bottom: 10px; margin-top: 15px;",JO="width: 100%; border-collapse: collapse; border: 1px solid rgba(0,0,0,0.1); table-layout: fixed;",L_="border: 1px solid rgba(0,0,0,0.1); padding: 5px;",ek=L_,tk=L_+" word-break: break-all;";function Hn(o,e=!1){e&&o.sort((i,n)=>(n.value?1:0)-(i.value?1:0));let t=`<table style='${JO}'>`;t+="<tbody>";for(const i of o){const n=typeof i.value=="boolean"?i.value?"\u2705":"\u274C":i.value;t+=`<tr><td style='${ek}'>${i.label}</td><td style='${tk}'>${n}</td></tr>`}return t+="</tbody></table>",t}function D_(){try{if(document.createElement("canvas").getContext("webgl2"))return"\u2705"}catch{}return"\u274C"}function ik(){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='${fg}'>`;const i=uk();t+=`<h3 style='${I_}'>Device: ${i}</h3>`,t+=Hn([{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+=Hn(n,!1)),t+="</div>",t+=`<div style='${fg} margin-top: 20px;'>`,t+=`<h3 style='${I_}'>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:D_()}];t+=Hn(l,!1),t+="</div>",e(t)}),o}function nk(){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='${fg}'>`;const i=ok();i.length>0&&(t+=`<h3 style='${kr}'>General GPU Info</h3>`,t+=Hn(i,!1));const n=rk();n.length>0&&(t+=`<h3 style='${kr}'>WebGL</h3>`,t+=Hn(n,!1));const s=ak();s.length>0&&(t+=`<h3 style='${kr}'>WebGL 2 Features</h3>`,t+=Hn(s,!1));const r=lk();r.length>0&&(t+=`<h3 style='${kr}'>WebGL Limits</h3>`,t+=Hn(r,!1));const a=ck();a.length>0&&(t+=`<h3 style='${kr}'>Texture Formats</h3>`,t+=Hn(a,!1));const l=await hk();if(l.length>0&&(t+=`<h3 style='${kr}'>WebGPU</h3>`,t+=Hn(l,!1)),I.isSafari()){const c=dk();c.length>0&&(t+=`<h3 style='${kr}'>Safari GPU Info</h3>`,t+=Hn(c,!1))}t+="</div>",e(t)}),o}function ok(){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=j_();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=sk(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 sk(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 rk(){const o=[],e=j_();return e&&(o.push({label:"\u{1F4CA} WebGL Version",value:e.version}),o.push({label:"\u{1F3AE} WebGL 2 Available",value:D_()})),o}function ak(){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 lk(){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 ck(){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 hk(){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 j_(){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 dk(){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 uk(){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 pk(){return document.querySelector("#__vconsole .vc-switch")||null}function mk(){return document.querySelector("#__vconsole")||null}const B_=w("debugdefines");Ss('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";'),Ss('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";'),Ss('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";'),Ss('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";'),Ss('globalThis["__NEEDLE_ENGINE_VERSION__"] = "4.16.0";'),Ss('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";'),Ss('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Thu Mar 05 2026 14:43:31 GMT+0000 (Coordinated Universal Time)";'),Ss('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const Ti="4.16.0",Wa="undefined",wc="Thu Mar 05 2026 14:43:31 GMT+0000 (Coordinated Universal Time)";B_&&console.log(`Engine version: ${Ti} (generator: ${Wa})
145
145
  Project built at ${wc}`);const xs=NEEDLE_PUBLIC_KEY,Ao="needle_isActiveInHierarchy",Mr="builtin_components",xc="needle_editor_guid";function Ss(o){try{(0,eval)(o)}catch(e){B_&&console.error(e)}}let F_,U_=null;function Cn(){return F_}function yg(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}U_!==o&&(U_=o,F_=new o)}function gk(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.")}}function z_(o){const e=o;return!!(e.parser&&e.parser.json)}var Gd=(o=>(o[o.None=0]="None",o[o.DontExport=1]="DontExport",o))(Gd||{});const N_=Symbol("component-name");function bg(o){return o&&o.isComponent}const fk=Symbol("object"),_g=new Mi(()=>new b,20);class W_{_point;_normal;_tangentVelocity;distance;impulse;friction;get point(){return _g.get().set(this._point.x,this._point.y,this._point.z)}get normal(){return _g.get().set(this._normal.x,this._normal.y,this._normal.z)}get tangentVelocity(){return _g.get().set(this._tangentVelocity.x,this._tangentVelocity.y,this._tangentVelocity.z)}constructor(e,t,i,n,s,r){this._point=e,this.distance=t,this._normal=i,this.impulse=n,this.friction=s,this._tangentVelocity=r}}class V_{contacts;constructor(e,t,i){this.me=e,this._collider=t,this._gameObject=t.gameObject,this.contacts=i}me;_collider;get collider(){return this._collider}_gameObject;get gameObject(){return this._gameObject}get rigidBody(){return this.collider?.attachedRigidbody}}class $_{object;collider;constructor(e,t){this.object=e,this.collider=t}}class wm{constructor(e){this.context=e,this.root.style.cssText=`
146
146
  position: absolute;
147
147
  width: 1px; height: 1px;
@@ -23000,22 +23000,6 @@ declare global {
23000
23000
  }
23001
23001
 
23002
23002
 
23003
- /**
23004
- * @category Splines
23005
- * @see {@link SplineContainer} for the main spline component that defines the path and knots
23006
- */
23007
- export declare namespace SplineUtils {
23008
- /**
23009
- * Creates a SplineContainer from an array of points.
23010
- * @param positions The positions of the knots.
23011
- * @param closed Whether the spline is closed (the last knot connects to the first).
23012
- * @param tension The tension of the spline. 0 is no tension, 1 is high tension (straight lines between knots). Default is 0.75.
23013
- * @return The created SplineContainer component - add it to an Object3D to use it.
23014
- */
23015
- function createFromPoints(positions: Vector3[], closed?: boolean, tension?: number): SplineContainer;
23016
- }
23017
-
23018
-
23019
23003
  declare module 'three' {
23020
23004
  interface Object3D {
23021
23005
  get guid(): string | undefined;
@@ -23155,6 +23139,22 @@ declare module 'three' {
23155
23139
  }
23156
23140
  }
23157
23141
 
23142
+
23143
+ /**
23144
+ * @category Splines
23145
+ * @see {@link SplineContainer} for the main spline component that defines the path and knots
23146
+ */
23147
+ export declare namespace SplineUtils {
23148
+ /**
23149
+ * Creates a SplineContainer from an array of points.
23150
+ * @param positions The positions of the knots.
23151
+ * @param closed Whether the spline is closed (the last knot connects to the first).
23152
+ * @param tension The tension of the spline. 0 is no tension, 1 is high tension (straight lines between knots). Default is 0.75.
23153
+ * @return The created SplineContainer component - add it to an Object3D to use it.
23154
+ */
23155
+ function createFromPoints(positions: Vector3[], closed?: boolean, tension?: number): SplineContainer;
23156
+ }
23157
+
23158
23158
  declare global {
23159
23159
  interface HTMLElementTagNameMap {
23160
23160
  "needle-logo-element": NeedleLogoElement;
@@ -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-Bnwvh-4P.js";
2
- import { $componentName as A, $physicsKey as T, ActionBuilder as b, ActionCollection as M, ActionModel as I, Addressables as D, AlignmentConstraint as O, AmbientMode as x, Animation as k, AnimationCurve as L, AnimationExtension as N, AnimationTrackHandler as B, AnimationUtils as F, Animator as w, AnimatorConditionMode as U, AnimatorController as G, AnimatorControllerParameterType as W, AnimatorStateInfo as H, Antialiasing as X, Application as z, AssetDatabase as V, AssetReference as _, Attractor as j, AudioExtension as Z, AudioListener as K, AudioSource as Q, AudioTrackHandler as $, Avatar as Y, AvatarBlink_Simple as J, AvatarEyeLook_Rotation as q, AvatarLoader as ee, AvatarMarker as te, AvatarModel as oe, Avatar_Brain_LookAt as re, Avatar_MouthShapes as ne, Avatar_MustacheShake as ie, Avatar_POI as ae, Axes as se, AxesHelper as le, BUILD_TIME as de, BaseUIComponent as ce, BasicIKConstraint as me, BehaviorExtension as pe, BehaviorModel as ge, Component$1 as ue, BlobStorage as Se, BloomEffect as Ce, BoxCollider as ye, BoxGizmo as Ee, BoxHelperComponent as Re, Button as he, ButtonsFactory as fe, CallDirection as ve, CallInfo as Pe, Camera as Ae, CameraTargetReachedEvent as Te, Canvas as be, CanvasGroup as Me, CapsuleCollider as Ie, ChangeMaterialOnClick as De, ChangeTransformOnClick as Oe, CharacterController as xe, CharacterControllerInput as ke, ChromaticAberration as Le, CircularBuffer as Ne, ClearFlags as Be, ClickThrough as Fe, ClipExtrapolation as we, Collider as Ue, Collision as Ge, CollisionDetectionMode as We, ColorAdjustments as He, ColorBySpeedModule as Xe, ColorOverLifetimeModule as ze, Component$1 as Ve, ComponentLifecycleEvents as _e, ConnectionEvents as je, ContactPoint as Ze, ContactShadows as Ke, ContextArgs as Qe, ContextEvent as $e, ContextRegistry as Ye, ControlTrackHandler as Je, CursorFollow as qe, CustomBranding as et, CustomShader as tt, DefaultReflectionMode as ot, Deletable as rt, DeleteBox as nt, DepthOfField as it, DeviceFlag as at, DeviceUtilities as st, DocumentExtension as lt, DragControls as dt, DragMode as ct, DropListener as mt, Duplicatable as pt, EffectWrapper as gt, EmissionModule as ut, EmphasizeOnClick as St, EngineLoadingView as Ct, EnvironmentScene as yt, EventList as Et, EventListEvent as Rt, EventSystem as ht, EventTrigger as ft, FieldWithDefault as vt, FileReference as Pt, FileReferenceSerializer as At, FileSpawnModel as Tt, File_Event as bt, FixedJoint as Mt, Fog as It, FrameEvent as Dt, GENERATOR as Ot, Gizmos as xt, GltfExport as kt, GltfExportBox as Lt, Gradient as Nt, Graphic as Bt, GraphicRaycaster as Ft, Graphics as wt, GridHelper as Ut, GridLayoutGroup as Gt, GroundProjectedEnv as Wt, GroupActionModel as Ht, HideFlags as Xt, HideOnStart as zt, HingeJoint as Vt, HorizontalLayoutGroup as _t, HostData as jt, HoverAnimation as Zt, Image as Kt, ImageReference as Qt, ImageReferenceSerializer as $t, InheritVelocityModule as Yt, Input as Jt, InputEventQueue as qt, InputEvents as eo, InputField as to, InstanceHandle as oo, InstancingHandler as ro, InstancingUtil as no, InstantiateEvent as io, InstantiateIdProvider as ao, InstantiateOptions as so, Interactable as lo, InternalScreenshotUtils as co, JoinedRoomResponse as mo, KeyEventArgs as po, Keyframe as go, LODGroup as uo, LODModel as So, LeftRoomResponse as Co, Light as yo, LightData as Eo, LimitVelocityOverLifetimeModule as Ro, LoadingElementOptions as ho, LogStats as fo, LogType as vo, LookAt as Po, LookAtConstraint as Ao, MainModule as To, MarkerTrackHandler as bo, MarkerType as Mo, MaskableGraphic as Io, MaterialPropertyBlock as Do, MaterialX as Oo, Mathf as xo, MeshCollider as ko, MeshRenderer as Lo, MinMaxCurve as No, MinMaxGradient as Bo, NEEDLE_ENGINE_FEATURE_FLAGS as Fo, MODULES as wo, NEKeyboardEvent as Uo, NEPointerEvent as Go, NeedleButtonElement as Wo, ContextRegistry as Ho, NeedleEngineModelLoader as Xo, NeedleEngineWebComponent as zo, NeedleMenu as Vo, NeedlePatchesKey as _o, USDZExporter as jo, NeedleXRController as Zo, NeedleXRSync as Ko, NeedleXRUtils as Qo, NestedGltf as $o, NetworkConnection as Yo, NetworkedStreamEvents as Jo, NetworkedStreams as qo, Networking as er, NewInstanceModel as tr, NoiseModule as or, ObjectRaycaster as rr, ObjectUtils as nr, OffsetConstraint as ir, OneEuroFilter as ar, OneEuroFilterXYZ as sr, OpenURL as lr, OrbitControls as dr, Outline as cr, OwnershipEvent as mr, OwnershipModel as pr, PUBLIC_KEY as gr, Padding as ur, ParticleBurst as Sr, ParticleSubEmitter as Cr, ParticleSystem as yr, ParticleSystemBaseBehaviour as Er, ParticleSystemRenderer as Rr, ParticleSystemShapeType as hr, PeerHandle as fr, PeerNetworking as vr, Physics as Pr, PhysicsExtension as Ar, PhysicsMaterialCombine as Tr, PixelationEffect as br, PlayAnimationOnClick as Mr, PlayAudioOnClick as Ir, PlayableDirector as Dr, PlayerColor as Or, PlayerState as xr, PlayerStateEvent as kr, PlayerSync as Lr, PlayerView as Nr, PlayerViewManager as Br, PointerEventData as Fr, PointerType as wr, PostProcessingEffect as Ur, PostProcessingEffectOrder as Gr, PostProcessingHandler as Wr, Volume as Hr, PreliminaryAction as Xr, PreliminaryTrigger as zr, PreviewHelper as Vr, PrimitiveType as _r, Progress as jr, PromiseAllWithErrors as Zr, PromiseErrorResult as Kr, RGBAColor as Qr, RapierPhysics as $r, RawImage as Yr, RaycastOptions as Jr, Rect as qr, RectTransform as en, ReflectionProbe as tn, RegisteredAnimationInfo as on, RemoteSkybox as rn, RenderTexture as nn, RenderTextureSerializer as an, Renderer as sn, RendererData as ln, RendererLightmap as dn, Rigidbody as cn, RigidbodyConstraints as mn, RoomEvents as pn, RotationBySpeedModule as gn, RotationOverLifetimeModule as un, SceneLightSettings as Sn, SceneSwitcher as Cn, ScreenCapture as yn, ScreenSpaceAmbientOcclusion as En, ScreenSpaceAmbientOcclusionN8 as Rn, ScrollFollow as hn, SeeThrough as fn, SendQueue as vn, SerializationContext as Pn, SetActiveOnClick as An, ShadowCatcher as Tn, ShapeModule as bn, ShapeOverlapResult as Mn, SharpeningEffect as In, SignalAsset as Dn, SignalReceiver as On, SignalReceiverEvent as xn, SignalTrackHandler as kn, Size as Ln, SizeBySpeedModule as Nn, SizeOverLifetimeModule as Bn, SkinnedMeshRenderer as Fn, SmoothFollow as wn, SpatialGrabRaycaster as Un, SpatialHtml as Gn, SpatialTrigger as Wn, SpatialTriggerReceiver as Hn, SpectatorCamera as Xn, SphereCollider as zn, SphereIntersection as Vn, SplineContainer as _n, SplineData as jn, SplineUtils as Zn, SplineWalker as Kn, Sprite as Qn, SpriteData as $n, SpriteRenderer as Yn, SpriteSheet as Jn, StateMachineBehaviour as qn, StreamEndedEvent as ei, StreamReceivedEvent as ti, SubEmitterSystem as oi, SyncedCamera as ri, SyncedRoom as ni, SyncedTransform as ii, TapGestureTrigger as ai, TeleportTarget as si, TestRunner as li, TestSimulateUserData as di, Text as ci, TextBuilder as mi, TextExtension as pi, TextureSheetAnimationModule as gi, TiltShiftEffect as ui, Time as Si, ToneMappingEffect as Ci, TrackHandler as yi, TrackType as Ei, TrailModule as Ri, TransformData as hi, TransformGizmo as fi, TriggerBuilder as vi, TriggerModel as Pi, UIRaycastUtils as Ai, UIRootComponent as Ti, USDDocument as bi, USDObject as Mi, USDWriter as Ii, USDZExporter$1 as Di, USDZText as Oi, USDZUIExtension as xi, UriSerializer as ki, UsageMarker as Li, UserJoinedOrLeftRoomModel as Ni, VariantAction as Bi, VelocityOverLifetimeModule as Fi, VerticalLayoutGroup as wi, VideoPlayer as Ui, ViewBox as Gi, ViewDevice as Wi, Vignette as Hi, VisibilityAction as Xi, Voip as zi, Volume as Vi, VolumeParameter as _i, VolumeProfile as ji, WaitForFrames as Zi, WaitForPromise as Ki, WaitForSeconds as Qi, Watch as $i, WebARCameraBackground as Yi, WebARSessionRoot as Ji, WebXR as qi, WebXRButtonFactory as ea, WebXRImageTracking as ta, WebXRImageTrackingModel as oa, WebXRPlaneTracking as ra, WebXRTrackedImage as na, XRControllerFollow as ia, XRControllerModel as aa, XRControllerMovement as sa, XRFlag as la, XRRig as da, XRState as ca, XRStateFlag as ma, __Ignore as pa, __internalNotifyObjectDestroyed as ga, activeInHierarchyFieldName as ua, addAttributeChangeCallback as Sa, addComponent as Ca, addCustomExtensionPlugin as ya, addNewComponent as Ea, addPatch as Ra, apply as ha, applyHMRChanges as fa, applyPrototypeExtensions as va, beginListenDestroy as Pa, beginListenInstantiate as Aa, binaryIdentifierCasts as Ta, build_scene_functions as ba, builtinComponentKeyName as Ma, calculateProgress01 as Ia, clearMessages as Da, clearMessages as Oa, colorSerializer as xa, compareAssociation as ka, componentSerializer as La, copyTexture as Na, createMotion as Ba, debugNet as Fa, debugOwner as wa, decompressGpuTexture as Ua, deepClone as Ga, delay as Wa, delayForFrames as Ha, deserializeObject as Xa, destroy as za, destroyComponentInstance as Va, determineMimeTypeFromExtension as _a, disposeObjectResources as ja, disposeStream as Za, editorGuidKeyName as Ka, enableSpatialConsole as Qa, euler as $a, eventListSerializer as Ya, exportAsGLTF as Ja, findByGuid as qa, findObjectOfType as es, findObjectsOfType as ts, findResourceUsers as os, fitCamera as rs, fitObjectIntoVolume as ns, foreachComponent as is, foreachComponentEnumerator as as, forward as ss, generateQRCode as ls, generateSeed as ds, getBoundingBox as cs, getCameraController as ms, getComponent as ps, getComponentInChildren as gs, getComponentInParent as us, getComponents as Ss, getComponentsInChildren as Cs, getComponentsInParent as ys, getFormattedDate as Es, getIconElement as Rs, getIconTexture as hs, getLoader as fs, getOrAddComponent as vs, getParam as Ps, getParentHierarchyPath as As, getPath as Ts, getPeerOptions as bs, getPeerjsInstance as Ms, getResourceUserCount as Is, getTempColor as Ds, getTempQuaternion as Os, getTempVector as xs, getUrlParams as ks, getVisibleInCustomShadowRendering as Ls, getWorldDirection as Ns, getWorldEuler as Bs, getWorldPosition as Fs, getWorldQuaternion as ws, getWorldRotation as Us, getWorldScale as Gs, hasCommercialLicense as Ws, hasIndieLicense as Hs, hasPointerEventComponent as Xs, hasProLicense as zs, hideDebugConsole as Vs, imageToCanvas as _s, instantiate as js, invokeLoadedImportPluginHooks as Zs, invokeXRSessionEnd as Ks, invokeXRSessionStart as Qs, isActiveInHierarchy as $s, isActiveSelf as Ys, isAndroidDevice as Js, isAnimationAction as qs, isComponent as el, isDebugMode as tl, isDesktop as ol, isDestroyed as rl, isDevEnvironment as nl, isDisposed as il, isExporting as al, isGLTFModel as sl, isHostedOnGlitch as ll, isHotReloadEnabled as dl, isHotReloading as cl, isIPad as ml, isIconElement as pl, isLocalNetwork as gl, isMacOS as ul, isMobileDevice as Sl, isMozillaXR as Cl, isQuest as yl, isResourceTrackingEnabled as El, isSafari as Rl, isUsingInstancing as hl, isiOS as fl, isiPad as vl, loadPMREM as Pl, loadSync as Al, logHierarchy as Tl, lookAtInverse as bl, lookAtObject as Ml, lookAtScreenPoint as Il, makeId as Dl, makeIdFromRandomWords as Ol, makeNameSafe as xl, markAsInstancedRendered as kl, microphonePermissionsGranted as Ll, nameof as Nl, nameofFactory as Bl, objectSerializer as Fl, offXRSessionEnd as wl, offXRSessionStart as Ul, onXRSessionEnd as Gl, onXRSessionStart as Wl, parseSync as Hl, placeOnSurface as Xl, postprocessFBXMaterials as zl, prefix as Vl, pushState as _l, randomNumber as jl, registerBinaryType as Zl, registerComponent as Kl, registerComponentExtension as Ql, registerCustomEffectType as $l, registerExportExtensions as Yl, registerExtensions as Jl, registerHotReloadType as ql, registerLoader as ed, registerPrefabProvider as td, registerPrototypeExtensions as od, registerType as rd, relativePathPrefix as nd, removeAttributeChangeCallback as id, removeComponent as ad, removeCustomImportExtensionType as sd, removePatch as ld, resolveUrl as dd, sanitizeString as cd, saveImage as md, screenshot as pd, screenshot2 as gd, sendDestroyed as ud, serializable as Sd, serializeObject as Cd, serializeable as yd, setActive as Ed, setAllowBalloonMessages as Rd, setAllowOverlayMessages as hd, setAutoFitEnabled as fd, setCameraController as vd, setDestroyed as Pd, setDevEnvironment as Ad, setDisposable as Td, setDontDestroy as bd, setOrAddParamsToUrl as Md, setParam as Id, setParamWithoutReload as Dd, setPeerOptions as Od, setResourceTrackingEnabled as xd, setState as kd, setVisibleInCustomShadowRendering as Ld, setWorldEuler as Nd, setWorldPosition as Bd, setWorldPositionXYZ as Fd, setWorldQuaternion as wd, setWorldQuaternionXYZW as Ud, setWorldRotation as Gd, setWorldRotationXYZ as Wd, setWorldScale as Hd, showBalloonError as Xd, showBalloonMessage as zd, showBalloonWarning as Vd, showDebugConsole as _d, slerp as jd, syncDestroy as Zd, syncField as Kd, syncInstantiate as Qd, textureToCanvas as $d, toSourceId as Yd, tryCastBinary as Jd, tryDetermineMimetypeFromBinary as qd, tryDetermineMimetypeFromURL as ec, tryFindObject as tc, tryGetGuid as oc, unregisterHotReloadType as rc, unwatchWrite as nc, useForAutoFit as ic, validate as ac, watchWrite as sc } from "./needle-engine.bundle-Bnwvh-4P.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-Cx8Qrpbp.js";
2
+ import { $componentName as A, $physicsKey as T, ActionBuilder as b, ActionCollection as M, ActionModel as I, Addressables as D, AlignmentConstraint as O, AmbientMode as x, Animation as k, AnimationCurve as L, AnimationExtension as N, AnimationTrackHandler as B, AnimationUtils as F, Animator as w, AnimatorConditionMode as U, AnimatorController as G, AnimatorControllerParameterType as W, AnimatorStateInfo as H, Antialiasing as X, Application as z, AssetDatabase as V, AssetReference as _, Attractor as j, AudioExtension as Z, AudioListener as K, AudioSource as Q, AudioTrackHandler as $, Avatar as Y, AvatarBlink_Simple as J, AvatarEyeLook_Rotation as q, AvatarLoader as ee, AvatarMarker as te, AvatarModel as oe, Avatar_Brain_LookAt as re, Avatar_MouthShapes as ne, Avatar_MustacheShake as ie, Avatar_POI as ae, Axes as se, AxesHelper as le, BUILD_TIME as de, BaseUIComponent as ce, BasicIKConstraint as me, BehaviorExtension as pe, BehaviorModel as ge, Component$1 as ue, BlobStorage as Se, BloomEffect as Ce, BoxCollider as ye, BoxGizmo as Ee, BoxHelperComponent as Re, Button as he, ButtonsFactory as fe, CallDirection as ve, CallInfo as Pe, Camera as Ae, CameraTargetReachedEvent as Te, Canvas as be, CanvasGroup as Me, CapsuleCollider as Ie, ChangeMaterialOnClick as De, ChangeTransformOnClick as Oe, CharacterController as xe, CharacterControllerInput as ke, ChromaticAberration as Le, CircularBuffer as Ne, ClearFlags as Be, ClickThrough as Fe, ClipExtrapolation as we, Collider as Ue, Collision as Ge, CollisionDetectionMode as We, ColorAdjustments as He, ColorBySpeedModule as Xe, ColorOverLifetimeModule as ze, Component$1 as Ve, ComponentLifecycleEvents as _e, ConnectionEvents as je, ContactPoint as Ze, ContactShadows as Ke, ContextArgs as Qe, ContextEvent as $e, ContextRegistry as Ye, ControlTrackHandler as Je, CursorFollow as qe, CustomBranding as et, CustomShader as tt, DefaultReflectionMode as ot, Deletable as rt, DeleteBox as nt, DepthOfField as it, DeviceFlag as at, DeviceUtilities as st, DocumentExtension as lt, DragControls as dt, DragMode as ct, DropListener as mt, Duplicatable as pt, EffectWrapper as gt, EmissionModule as ut, EmphasizeOnClick as St, EngineLoadingView as Ct, EnvironmentScene as yt, EventList as Et, EventListEvent as Rt, EventSystem as ht, EventTrigger as ft, FieldWithDefault as vt, FileReference as Pt, FileReferenceSerializer as At, FileSpawnModel as Tt, File_Event as bt, FixedJoint as Mt, Fog as It, FrameEvent as Dt, GENERATOR as Ot, Gizmos as xt, GltfExport as kt, GltfExportBox as Lt, Gradient as Nt, Graphic as Bt, GraphicRaycaster as Ft, Graphics as wt, GridHelper as Ut, GridLayoutGroup as Gt, GroundProjectedEnv as Wt, GroupActionModel as Ht, HideFlags as Xt, HideOnStart as zt, HingeJoint as Vt, HorizontalLayoutGroup as _t, HostData as jt, HoverAnimation as Zt, Image as Kt, ImageReference as Qt, ImageReferenceSerializer as $t, InheritVelocityModule as Yt, Input as Jt, InputEventQueue as qt, InputEvents as eo, InputField as to, InstanceHandle as oo, InstancingHandler as ro, InstancingUtil as no, InstantiateEvent as io, InstantiateIdProvider as ao, InstantiateOptions as so, Interactable as lo, InternalScreenshotUtils as co, JoinedRoomResponse as mo, KeyEventArgs as po, Keyframe as go, LODGroup as uo, LODModel as So, LeftRoomResponse as Co, Light as yo, LightData as Eo, LimitVelocityOverLifetimeModule as Ro, LoadingElementOptions as ho, LogStats as fo, LogType as vo, LookAt as Po, LookAtConstraint as Ao, MainModule as To, MarkerTrackHandler as bo, MarkerType as Mo, MaskableGraphic as Io, MaterialPropertyBlock as Do, MaterialX as Oo, Mathf as xo, MeshCollider as ko, MeshRenderer as Lo, MinMaxCurve as No, MinMaxGradient as Bo, NEEDLE_ENGINE_FEATURE_FLAGS as Fo, MODULES as wo, NEKeyboardEvent as Uo, NEPointerEvent as Go, NeedleButtonElement as Wo, ContextRegistry as Ho, NeedleEngineModelLoader as Xo, NeedleEngineWebComponent as zo, NeedleMenu as Vo, NeedlePatchesKey as _o, USDZExporter as jo, NeedleXRController as Zo, NeedleXRSync as Ko, NeedleXRUtils as Qo, NestedGltf as $o, NetworkConnection as Yo, NetworkedStreamEvents as Jo, NetworkedStreams as qo, Networking as er, NewInstanceModel as tr, NoiseModule as or, ObjectRaycaster as rr, ObjectUtils as nr, OffsetConstraint as ir, OneEuroFilter as ar, OneEuroFilterXYZ as sr, OpenURL as lr, OrbitControls as dr, Outline as cr, OwnershipEvent as mr, OwnershipModel as pr, PUBLIC_KEY as gr, Padding as ur, ParticleBurst as Sr, ParticleSubEmitter as Cr, ParticleSystem as yr, ParticleSystemBaseBehaviour as Er, ParticleSystemRenderer as Rr, ParticleSystemShapeType as hr, PeerHandle as fr, PeerNetworking as vr, Physics as Pr, PhysicsExtension as Ar, PhysicsMaterialCombine as Tr, PixelationEffect as br, PlayAnimationOnClick as Mr, PlayAudioOnClick as Ir, PlayableDirector as Dr, PlayerColor as Or, PlayerState as xr, PlayerStateEvent as kr, PlayerSync as Lr, PlayerView as Nr, PlayerViewManager as Br, PointerEventData as Fr, PointerType as wr, PostProcessingEffect as Ur, PostProcessingEffectOrder as Gr, PostProcessingHandler as Wr, Volume as Hr, PreliminaryAction as Xr, PreliminaryTrigger as zr, PreviewHelper as Vr, PrimitiveType as _r, Progress as jr, PromiseAllWithErrors as Zr, PromiseErrorResult as Kr, RGBAColor as Qr, RapierPhysics as $r, RawImage as Yr, RaycastOptions as Jr, Rect as qr, RectTransform as en, ReflectionProbe as tn, RegisteredAnimationInfo as on, RemoteSkybox as rn, RenderTexture as nn, RenderTextureSerializer as an, Renderer as sn, RendererData as ln, RendererLightmap as dn, Rigidbody as cn, RigidbodyConstraints as mn, RoomEvents as pn, RotationBySpeedModule as gn, RotationOverLifetimeModule as un, SceneLightSettings as Sn, SceneSwitcher as Cn, ScreenCapture as yn, ScreenSpaceAmbientOcclusion as En, ScreenSpaceAmbientOcclusionN8 as Rn, ScrollFollow as hn, SeeThrough as fn, SendQueue as vn, SerializationContext as Pn, SetActiveOnClick as An, ShadowCatcher as Tn, ShapeModule as bn, ShapeOverlapResult as Mn, SharpeningEffect as In, SignalAsset as Dn, SignalReceiver as On, SignalReceiverEvent as xn, SignalTrackHandler as kn, Size as Ln, SizeBySpeedModule as Nn, SizeOverLifetimeModule as Bn, SkinnedMeshRenderer as Fn, SmoothFollow as wn, SpatialGrabRaycaster as Un, SpatialHtml as Gn, SpatialTrigger as Wn, SpatialTriggerReceiver as Hn, SpectatorCamera as Xn, SphereCollider as zn, SphereIntersection as Vn, SplineContainer as _n, SplineData as jn, SplineUtils as Zn, SplineWalker as Kn, Sprite as Qn, SpriteData as $n, SpriteRenderer as Yn, SpriteSheet as Jn, StateMachineBehaviour as qn, StreamEndedEvent as ei, StreamReceivedEvent as ti, SubEmitterSystem as oi, SyncedCamera as ri, SyncedRoom as ni, SyncedTransform as ii, TapGestureTrigger as ai, TeleportTarget as si, TestRunner as li, TestSimulateUserData as di, Text as ci, TextBuilder as mi, TextExtension as pi, TextureSheetAnimationModule as gi, TiltShiftEffect as ui, Time as Si, ToneMappingEffect as Ci, TrackHandler as yi, TrackType as Ei, TrailModule as Ri, TransformData as hi, TransformGizmo as fi, TriggerBuilder as vi, TriggerModel as Pi, UIRaycastUtils as Ai, UIRootComponent as Ti, USDDocument as bi, USDObject as Mi, USDWriter as Ii, USDZExporter$1 as Di, USDZText as Oi, USDZUIExtension as xi, UriSerializer as ki, UsageMarker as Li, UserJoinedOrLeftRoomModel as Ni, VariantAction as Bi, VelocityOverLifetimeModule as Fi, VerticalLayoutGroup as wi, VideoPlayer as Ui, ViewBox as Gi, ViewDevice as Wi, Vignette as Hi, VisibilityAction as Xi, Voip as zi, Volume as Vi, VolumeParameter as _i, VolumeProfile as ji, WaitForFrames as Zi, WaitForPromise as Ki, WaitForSeconds as Qi, Watch as $i, WebARCameraBackground as Yi, WebARSessionRoot as Ji, WebXR as qi, WebXRButtonFactory as ea, WebXRImageTracking as ta, WebXRImageTrackingModel as oa, WebXRPlaneTracking as ra, WebXRTrackedImage as na, XRControllerFollow as ia, XRControllerModel as aa, XRControllerMovement as sa, XRFlag as la, XRRig as da, XRState as ca, XRStateFlag as ma, __Ignore as pa, __internalNotifyObjectDestroyed as ga, activeInHierarchyFieldName as ua, addAttributeChangeCallback as Sa, addComponent as Ca, addCustomExtensionPlugin as ya, addNewComponent as Ea, addPatch as Ra, apply as ha, applyHMRChanges as fa, applyPrototypeExtensions as va, beginListenDestroy as Pa, beginListenInstantiate as Aa, binaryIdentifierCasts as Ta, build_scene_functions as ba, builtinComponentKeyName as Ma, calculateProgress01 as Ia, clearMessages as Da, clearMessages as Oa, colorSerializer as xa, compareAssociation as ka, componentSerializer as La, copyTexture as Na, createMotion as Ba, debugNet as Fa, debugOwner as wa, decompressGpuTexture as Ua, deepClone as Ga, delay as Wa, delayForFrames as Ha, deserializeObject as Xa, destroy as za, destroyComponentInstance as Va, determineMimeTypeFromExtension as _a, disposeObjectResources as ja, disposeStream as Za, editorGuidKeyName as Ka, enableSpatialConsole as Qa, euler as $a, eventListSerializer as Ya, exportAsGLTF as Ja, findByGuid as qa, findObjectOfType as es, findObjectsOfType as ts, findResourceUsers as os, fitCamera as rs, fitObjectIntoVolume as ns, foreachComponent as is, foreachComponentEnumerator as as, forward as ss, generateQRCode as ls, generateSeed as ds, getBoundingBox as cs, getCameraController as ms, getComponent as ps, getComponentInChildren as gs, getComponentInParent as us, getComponents as Ss, getComponentsInChildren as Cs, getComponentsInParent as ys, getFormattedDate as Es, getIconElement as Rs, getIconTexture as hs, getLoader as fs, getOrAddComponent as vs, getParam as Ps, getParentHierarchyPath as As, getPath as Ts, getPeerOptions as bs, getPeerjsInstance as Ms, getResourceUserCount as Is, getTempColor as Ds, getTempQuaternion as Os, getTempVector as xs, getUrlParams as ks, getVisibleInCustomShadowRendering as Ls, getWorldDirection as Ns, getWorldEuler as Bs, getWorldPosition as Fs, getWorldQuaternion as ws, getWorldRotation as Us, getWorldScale as Gs, hasCommercialLicense as Ws, hasIndieLicense as Hs, hasPointerEventComponent as Xs, hasProLicense as zs, hideDebugConsole as Vs, imageToCanvas as _s, instantiate as js, invokeLoadedImportPluginHooks as Zs, invokeXRSessionEnd as Ks, invokeXRSessionStart as Qs, isActiveInHierarchy as $s, isActiveSelf as Ys, isAndroidDevice as Js, isAnimationAction as qs, isComponent as el, isDebugMode as tl, isDesktop as ol, isDestroyed as rl, isDevEnvironment as nl, isDisposed as il, isExporting as al, isGLTFModel as sl, isHostedOnGlitch as ll, isHotReloadEnabled as dl, isHotReloading as cl, isIPad as ml, isIconElement as pl, isLocalNetwork as gl, isMacOS as ul, isMobileDevice as Sl, isMozillaXR as Cl, isQuest as yl, isResourceTrackingEnabled as El, isSafari as Rl, isUsingInstancing as hl, isiOS as fl, isiPad as vl, loadPMREM as Pl, loadSync as Al, logHierarchy as Tl, lookAtInverse as bl, lookAtObject as Ml, lookAtScreenPoint as Il, makeId as Dl, makeIdFromRandomWords as Ol, makeNameSafe as xl, markAsInstancedRendered as kl, microphonePermissionsGranted as Ll, nameof as Nl, nameofFactory as Bl, objectSerializer as Fl, offXRSessionEnd as wl, offXRSessionStart as Ul, onXRSessionEnd as Gl, onXRSessionStart as Wl, parseSync as Hl, placeOnSurface as Xl, postprocessFBXMaterials as zl, prefix as Vl, pushState as _l, randomNumber as jl, registerBinaryType as Zl, registerComponent as Kl, registerComponentExtension as Ql, registerCustomEffectType as $l, registerExportExtensions as Yl, registerExtensions as Jl, registerHotReloadType as ql, registerLoader as ed, registerPrefabProvider as td, registerPrototypeExtensions as od, registerType as rd, relativePathPrefix as nd, removeAttributeChangeCallback as id, removeComponent as ad, removeCustomImportExtensionType as sd, removePatch as ld, resolveUrl as dd, sanitizeString as cd, saveImage as md, screenshot as pd, screenshot2 as gd, sendDestroyed as ud, serializable as Sd, serializeObject as Cd, serializeable as yd, setActive as Ed, setAllowBalloonMessages as Rd, setAllowOverlayMessages as hd, setAutoFitEnabled as fd, setCameraController as vd, setDestroyed as Pd, setDevEnvironment as Ad, setDisposable as Td, setDontDestroy as bd, setOrAddParamsToUrl as Md, setParam as Id, setParamWithoutReload as Dd, setPeerOptions as Od, setResourceTrackingEnabled as xd, setState as kd, setVisibleInCustomShadowRendering as Ld, setWorldEuler as Nd, setWorldPosition as Bd, setWorldPositionXYZ as Fd, setWorldQuaternion as wd, setWorldQuaternionXYZW as Ud, setWorldRotation as Gd, setWorldRotationXYZ as Wd, setWorldScale as Hd, showBalloonError as Xd, showBalloonMessage as zd, showBalloonWarning as Vd, showDebugConsole as _d, slerp as jd, syncDestroy as Zd, syncField as Kd, syncInstantiate as Qd, textureToCanvas as $d, toSourceId as Yd, tryCastBinary as Jd, tryDetermineMimetypeFromBinary as qd, tryDetermineMimetypeFromURL as ec, tryFindObject as tc, tryGetGuid as oc, unregisterHotReloadType as rc, unwatchWrite as nc, useForAutoFit as ic, validate as ac, watchWrite as sc } from "./needle-engine.bundle-Cx8Qrpbp.js";
3
3
  import { NEEDLE_progressive as dc } from "./gltf-progressive-_wvokUUu.js";
4
4
  import { THREE as R } from "./three.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-DY3LoYIi.min.js";import{$componentName as R,$physicsKey as h,ActionBuilder as v,ActionCollection as f,ActionModel as P,Addressables as A,AlignmentConstraint as T,AmbientMode as M,Animation as b,AnimationCurve as I,AnimationExtension as D,AnimationTrackHandler as O,AnimationUtils as x,Animator as k,AnimatorConditionMode as L,AnimatorController as B,AnimatorControllerParameterType as F,AnimatorStateInfo as N,Antialiasing as w,Application as W,AssetDatabase as G,AssetReference as U,Attractor as H,AudioExtension as X,AudioListener as z,AudioSource as V,AudioTrackHandler as _,Avatar as j,AvatarBlink_Simple as K,AvatarEyeLook_Rotation as Q,AvatarLoader as Z,AvatarMarker as Y,AvatarModel as J,Avatar_Brain_LookAt as $,Avatar_MouthShapes as q,Avatar_MustacheShake as ee,Avatar_POI as ae,Axes as se,AxesHelper as te,BUILD_TIME as oe,BaseUIComponent as re,BasicIKConstraint as ne,BehaviorExtension as ie,BehaviorModel as le,Component$1 as de,BlobStorage as ce,BloomEffect as me,BoxCollider as pe,BoxGizmo as ge,BoxHelperComponent as ue,Button as Se,ButtonsFactory as Ce,CallDirection as ye,CallInfo as Ee,Camera as Re,CameraTargetReachedEvent as he,Canvas as ve,CanvasGroup as fe,CapsuleCollider as Pe,ChangeMaterialOnClick as Ae,ChangeTransformOnClick as Te,CharacterController as Me,CharacterControllerInput as be,ChromaticAberration as Ie,CircularBuffer as De,ClearFlags as Oe,ClickThrough as xe,ClipExtrapolation as ke,Collider as Le,Collision as Be,CollisionDetectionMode as Fe,ColorAdjustments as Ne,ColorBySpeedModule as we,ColorOverLifetimeModule as We,Component$1 as Ge,ComponentLifecycleEvents as Ue,ConnectionEvents as He,ContactPoint as Xe,ContactShadows as ze,ContextArgs as Ve,ContextEvent as _e,ContextRegistry as je,ControlTrackHandler as Ke,CursorFollow as Qe,CustomBranding as Ze,CustomShader as Ye,DefaultReflectionMode as Je,Deletable as $e,DeleteBox as qe,DepthOfField as ea,DeviceFlag as aa,DeviceUtilities as sa,DocumentExtension as ta,DragControls as oa,DragMode as ra,DropListener as na,Duplicatable as ia,EffectWrapper as la,EmissionModule as da,EmphasizeOnClick as ca,EngineLoadingView as ma,EnvironmentScene as pa,EventList as ga,EventListEvent as ua,EventSystem as Sa,EventTrigger as Ca,FieldWithDefault as ya,FileReference as Ea,FileReferenceSerializer as Ra,FileSpawnModel as ha,File_Event as va,FixedJoint as fa,Fog as Pa,FrameEvent as Aa,GENERATOR as Ta,Gizmos as Ma,GltfExport as ba,GltfExportBox as Ia,Gradient as Da,Graphic as Oa,GraphicRaycaster as xa,Graphics as ka,GridHelper as La,GridLayoutGroup as Ba,GroundProjectedEnv as Fa,GroupActionModel as Na,HideFlags as wa,HideOnStart as Wa,HingeJoint as Ga,HorizontalLayoutGroup as Ua,HostData as Ha,HoverAnimation as Xa,Image as za,ImageReference as Va,ImageReferenceSerializer as _a,InheritVelocityModule as ja,Input as Ka,InputEventQueue as Qa,InputEvents as Za,InputField as Ya,InstanceHandle as Ja,InstancingHandler as $a,InstancingUtil as qa,InstantiateEvent as es,InstantiateIdProvider as as,InstantiateOptions as ss,Interactable as ts,InternalScreenshotUtils as os,JoinedRoomResponse as rs,KeyEventArgs as ns,Keyframe as is,LODGroup as ls,LODModel as ds,LeftRoomResponse as cs,Light as ms,LightData as ps,LimitVelocityOverLifetimeModule as gs,LoadingElementOptions as us,LogStats as Ss,LogType as Cs,LookAt as ys,LookAtConstraint as Es,MainModule as Rs,MarkerTrackHandler as hs,MarkerType as vs,MaskableGraphic as fs,MaterialPropertyBlock as Ps,MaterialX as As,Mathf as Ts,MeshCollider as Ms,MeshRenderer as bs,MinMaxCurve as Is,MinMaxGradient as Ds,NEEDLE_ENGINE_FEATURE_FLAGS as Os,MODULES as xs,NEKeyboardEvent as ks,NEPointerEvent as Ls,NeedleButtonElement as Bs,ContextRegistry as Fs,NeedleEngineModelLoader as Ns,NeedleEngineWebComponent as ws,NeedleMenu as Ws,NeedlePatchesKey as Gs,USDZExporter as Us,NeedleXRController as Hs,NeedleXRSync as Xs,NeedleXRUtils as zs,NestedGltf as Vs,NetworkConnection as _s,NetworkedStreamEvents as js,NetworkedStreams as Ks,Networking as Qs,NewInstanceModel as Zs,NoiseModule as Ys,ObjectRaycaster as Js,ObjectUtils as $s,OffsetConstraint as qs,OneEuroFilter as et,OneEuroFilterXYZ as at,OpenURL as st,OrbitControls as tt,Outline as ot,OwnershipEvent as rt,OwnershipModel as nt,PUBLIC_KEY as it,Padding as lt,ParticleBurst as dt,ParticleSubEmitter as ct,ParticleSystem as mt,ParticleSystemBaseBehaviour as pt,ParticleSystemRenderer as gt,ParticleSystemShapeType as ut,PeerHandle as St,PeerNetworking as Ct,Physics as yt,PhysicsExtension as Et,PhysicsMaterialCombine as Rt,PixelationEffect as ht,PlayAnimationOnClick as vt,PlayAudioOnClick as ft,PlayableDirector as Pt,PlayerColor as At,PlayerState as Tt,PlayerStateEvent as Mt,PlayerSync as bt,PlayerView as It,PlayerViewManager as Dt,PointerEventData as Ot,PointerType as xt,PostProcessingEffect as kt,PostProcessingEffectOrder as Lt,PostProcessingHandler as Bt,Volume as Ft,PreliminaryAction as Nt,PreliminaryTrigger as wt,PreviewHelper as Wt,PrimitiveType as Gt,Progress as Ut,PromiseAllWithErrors as Ht,PromiseErrorResult as Xt,RGBAColor as zt,RapierPhysics as Vt,RawImage as _t,RaycastOptions as jt,Rect as Kt,RectTransform as Qt,ReflectionProbe as Zt,RegisteredAnimationInfo as Yt,RemoteSkybox as Jt,RenderTexture as $t,RenderTextureSerializer as qt,Renderer as eo,RendererData as ao,RendererLightmap as so,Rigidbody as to,RigidbodyConstraints as oo,RoomEvents as ro,RotationBySpeedModule as no,RotationOverLifetimeModule as io,SceneLightSettings as lo,SceneSwitcher as co,ScreenCapture as mo,ScreenSpaceAmbientOcclusion as po,ScreenSpaceAmbientOcclusionN8 as go,ScrollFollow as uo,SeeThrough as So,SendQueue as Co,SerializationContext as yo,SetActiveOnClick as Eo,ShadowCatcher as Ro,ShapeModule as ho,ShapeOverlapResult as vo,SharpeningEffect as fo,SignalAsset as Po,SignalReceiver as Ao,SignalReceiverEvent as To,SignalTrackHandler as Mo,Size as bo,SizeBySpeedModule as Io,SizeOverLifetimeModule as Do,SkinnedMeshRenderer as Oo,SmoothFollow as xo,SpatialGrabRaycaster as ko,SpatialHtml as Lo,SpatialTrigger as Bo,SpatialTriggerReceiver as Fo,SpectatorCamera as No,SphereCollider as wo,SphereIntersection as Wo,SplineContainer as Go,SplineData as Uo,SplineUtils as Ho,SplineWalker as Xo,Sprite as zo,SpriteData as Vo,SpriteRenderer as _o,SpriteSheet as jo,StateMachineBehaviour as Ko,StreamEndedEvent as Qo,StreamReceivedEvent as Zo,SubEmitterSystem as Yo,SyncedCamera as Jo,SyncedRoom as $o,SyncedTransform as qo,TapGestureTrigger as er,TeleportTarget as ar,TestRunner as sr,TestSimulateUserData as tr,Text as or,TextBuilder as rr,TextExtension as nr,TextureSheetAnimationModule as ir,TiltShiftEffect as lr,Time as dr,ToneMappingEffect as cr,TrackHandler as mr,TrackType as pr,TrailModule as gr,TransformData as ur,TransformGizmo as Sr,TriggerBuilder as Cr,TriggerModel as yr,UIRaycastUtils as Er,UIRootComponent as Rr,USDDocument as hr,USDObject as vr,USDWriter as fr,USDZExporter$1 as Pr,USDZText as Ar,USDZUIExtension as Tr,UriSerializer as Mr,UsageMarker as br,UserJoinedOrLeftRoomModel as Ir,VariantAction as Dr,VelocityOverLifetimeModule as Or,VerticalLayoutGroup as xr,VideoPlayer as kr,ViewBox as Lr,ViewDevice as Br,Vignette as Fr,VisibilityAction as Nr,Voip as wr,Volume as Wr,VolumeParameter as Gr,VolumeProfile as Ur,WaitForFrames as Hr,WaitForPromise as Xr,WaitForSeconds as zr,Watch as Vr,WebARCameraBackground as _r,WebARSessionRoot as jr,WebXR as Kr,WebXRButtonFactory as Qr,WebXRImageTracking as Zr,WebXRImageTrackingModel as Yr,WebXRPlaneTracking as Jr,WebXRTrackedImage as $r,XRControllerFollow as qr,XRControllerModel as en,XRControllerMovement as an,XRFlag as sn,XRRig as tn,XRState as on,XRStateFlag as rn,__Ignore as nn,__internalNotifyObjectDestroyed as ln,activeInHierarchyFieldName as dn,addAttributeChangeCallback as cn,addComponent as mn,addCustomExtensionPlugin as pn,addNewComponent as gn,addPatch as un,apply as Sn,applyHMRChanges as Cn,applyPrototypeExtensions as yn,beginListenDestroy as En,beginListenInstantiate as Rn,binaryIdentifierCasts as hn,build_scene_functions as vn,builtinComponentKeyName as fn,calculateProgress01 as Pn,clearMessages as An,clearMessages as Tn,colorSerializer as Mn,compareAssociation as bn,componentSerializer as In,copyTexture as Dn,createMotion as On,debugNet as xn,debugOwner as kn,decompressGpuTexture as Ln,deepClone as Bn,delay as Fn,delayForFrames as Nn,deserializeObject as wn,destroy as Wn,destroyComponentInstance as Gn,determineMimeTypeFromExtension as Un,disposeObjectResources as Hn,disposeStream as Xn,editorGuidKeyName as zn,enableSpatialConsole as Vn,euler as _n,eventListSerializer as jn,exportAsGLTF as Kn,findByGuid as Qn,findObjectOfType as Zn,findObjectsOfType as Yn,findResourceUsers as Jn,fitCamera as $n,fitObjectIntoVolume as qn,foreachComponent as ei,foreachComponentEnumerator as ai,forward as si,generateQRCode as ti,generateSeed as oi,getBoundingBox as ri,getCameraController as ni,getComponent as ii,getComponentInChildren as li,getComponentInParent as di,getComponents as ci,getComponentsInChildren as mi,getComponentsInParent as pi,getFormattedDate as gi,getIconElement as ui,getIconTexture as Si,getLoader as Ci,getOrAddComponent as yi,getParam as Ei,getParentHierarchyPath as Ri,getPath as hi,getPeerOptions as vi,getPeerjsInstance as fi,getResourceUserCount as Pi,getTempColor as Ai,getTempQuaternion as Ti,getTempVector as Mi,getUrlParams as bi,getVisibleInCustomShadowRendering as Ii,getWorldDirection as Di,getWorldEuler as Oi,getWorldPosition as xi,getWorldQuaternion as ki,getWorldRotation as Li,getWorldScale as Bi,hasCommercialLicense as Fi,hasIndieLicense as Ni,hasPointerEventComponent as wi,hasProLicense as Wi,hideDebugConsole as Gi,imageToCanvas as Ui,instantiate as Hi,invokeLoadedImportPluginHooks as Xi,invokeXRSessionEnd as zi,invokeXRSessionStart as Vi,isActiveInHierarchy as _i,isActiveSelf as ji,isAndroidDevice as Ki,isAnimationAction as Qi,isComponent as Zi,isDebugMode as Yi,isDesktop as Ji,isDestroyed as $i,isDevEnvironment as qi,isDisposed as el,isExporting as al,isGLTFModel as sl,isHostedOnGlitch as tl,isHotReloadEnabled as ol,isHotReloading as rl,isIPad as nl,isIconElement as il,isLocalNetwork as ll,isMacOS as dl,isMobileDevice as cl,isMozillaXR as ml,isQuest as pl,isResourceTrackingEnabled as gl,isSafari as ul,isUsingInstancing as Sl,isiOS as Cl,isiPad as yl,loadPMREM as El,loadSync as Rl,logHierarchy as hl,lookAtInverse as vl,lookAtObject as fl,lookAtScreenPoint as Pl,makeId as Al,makeIdFromRandomWords as Tl,makeNameSafe as Ml,markAsInstancedRendered as bl,microphonePermissionsGranted as Il,nameof as Dl,nameofFactory as Ol,objectSerializer as xl,offXRSessionEnd as kl,offXRSessionStart as Ll,onXRSessionEnd as Bl,onXRSessionStart as Fl,parseSync as Nl,placeOnSurface as wl,postprocessFBXMaterials as Wl,prefix as Gl,pushState as Ul,randomNumber as Hl,registerBinaryType as Xl,registerComponent as zl,registerComponentExtension as Vl,registerCustomEffectType as _l,registerExportExtensions as jl,registerExtensions as Kl,registerHotReloadType as Ql,registerLoader as Zl,registerPrefabProvider as Yl,registerPrototypeExtensions as Jl,registerType as $l,relativePathPrefix as ql,removeAttributeChangeCallback as ed,removeComponent as ad,removeCustomImportExtensionType as sd,removePatch as td,resolveUrl as od,sanitizeString as rd,saveImage as nd,screenshot as id,screenshot2 as ld,sendDestroyed as dd,serializable as cd,serializeObject as md,serializeable as pd,setActive as gd,setAllowBalloonMessages as ud,setAllowOverlayMessages as Sd,setAutoFitEnabled as Cd,setCameraController as yd,setDestroyed as Ed,setDevEnvironment as Rd,setDisposable as hd,setDontDestroy as vd,setOrAddParamsToUrl as fd,setParam as Pd,setParamWithoutReload as Ad,setPeerOptions as Td,setResourceTrackingEnabled as Md,setState as bd,setVisibleInCustomShadowRendering as Id,setWorldEuler as Dd,setWorldPosition as Od,setWorldPositionXYZ as xd,setWorldQuaternion as kd,setWorldQuaternionXYZW as Ld,setWorldRotation as Bd,setWorldRotationXYZ as Fd,setWorldScale as Nd,showBalloonError as wd,showBalloonMessage as Wd,showBalloonWarning as Gd,showDebugConsole as Ud,slerp as Hd,syncDestroy as Xd,syncField as zd,syncInstantiate as Vd,textureToCanvas as _d,toSourceId as jd,tryCastBinary as Kd,tryDetermineMimetypeFromBinary as Qd,tryDetermineMimetypeFromURL as Zd,tryFindObject as Yd,tryGetGuid as Jd,unregisterHotReloadType as $d,unwatchWrite as qd,useForAutoFit as ec,validate as ac,watchWrite as sc}from"./needle-engine.bundle-DY3LoYIi.min.js";import{NEEDLE_progressive as tc}from"./gltf-progressive-DQa78GTA.min.js";import{THREE as oc}from"./three.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=oc;export{R as $componentName,h as $physicsKey,v as ActionBuilder,f as ActionCollection,P as ActionModel,A as Addressables,T as AlignmentConstraint,M as AmbientMode,b as Animation,I as AnimationCurve,D as AnimationExtension,O as AnimationTrackHandler,x as AnimationUtils,k as Animator,L as AnimatorConditionMode,B as AnimatorController,F as AnimatorControllerParameterType,N as AnimatorStateInfo,w as Antialiasing,W as Application,G as AssetDatabase,U as AssetReference,H as Attractor,X as AudioExtension,z as AudioListener,V as AudioSource,_ as AudioTrackHandler,j as Avatar,K as AvatarBlink_Simple,Q as AvatarEyeLook_Rotation,Z as AvatarLoader,Y as AvatarMarker,J as AvatarModel,$ as Avatar_Brain_LookAt,q as Avatar_MouthShapes,ee as Avatar_MustacheShake,ae as Avatar_POI,se as Axes,te as AxesHelper,oe as BUILD_TIME,re as BaseUIComponent,ne as BasicIKConstraint,ie as BehaviorExtension,le as BehaviorModel,de as Behaviour,ce as BlobStorage,me as BloomEffect,pe as BoxCollider,ge as BoxGizmo,ue as BoxHelperComponent,Se as Button,Ce as ButtonsFactory,ye as CallDirection,Ee as CallInfo,Re as Camera,he as CameraTargetReachedEvent,ve as Canvas,fe as CanvasGroup,Pe as CapsuleCollider,Ae as ChangeMaterialOnClick,Te as ChangeTransformOnClick,Me as CharacterController,be as CharacterControllerInput,Ie as ChromaticAberration,De as CircularBuffer,Oe as ClearFlags,xe as ClickThrough,ke as ClipExtrapolation,Le as Collider,Be as Collision,Fe as CollisionDetectionMode,Ne as ColorAdjustments,we as ColorBySpeedModule,We as ColorOverLifetimeModule,Ge as Component,Ue as ComponentLifecycleEvents,He as ConnectionEvents,Xe as ContactPoint,ze as ContactShadows,u as Context,Ve as ContextArgs,_e as ContextEvent,je as ContextRegistry,Ke as ControlTrackHandler,Qe as CursorFollow,Ze as CustomBranding,Ye as CustomShader,Je as DefaultReflectionMode,$e as Deletable,qe as DeleteBox,ea as DepthOfField,aa as DeviceFlag,sa as DeviceUtilities,ta as DocumentExtension,oa as DragControls,ra as DragMode,na as DropListener,ia as Duplicatable,la as EffectWrapper,da as EmissionModule,ca as EmphasizeOnClick,ma as EngineLoadingView,pa as EnvironmentScene,ga as EventList,ua as EventListEvent,Sa as EventSystem,Ca as EventTrigger,ya as FieldWithDefault,Ea as FileReference,Ra as FileReferenceSerializer,ha as FileSpawnModel,va as File_Event,fa as FixedJoint,Pa as Fog,Aa as FrameEvent,Ta as GENERATOR,s as GameObject,Ma as Gizmos,ba as GltfExport,Ia as GltfExportBox,Da as Gradient,Oa as Graphic,xa as GraphicRaycaster,ka as Graphics,La as GridHelper,Ba as GridLayoutGroup,Fa as GroundProjectedEnv,Na as GroupActionModel,wa as HideFlags,Wa as HideOnStart,Ga as HingeJoint,Ua as HorizontalLayoutGroup,Ha as HostData,Xa as HoverAnimation,za as Image,Va as ImageReference,_a as ImageReferenceSerializer,ja as InheritVelocityModule,Ka as Input,Qa as InputEventQueue,Za as InputEvents,Ya as InputField,Ja as InstanceHandle,$a as InstancingHandler,qa as InstancingUtil,es as InstantiateEvent,as as InstantiateIdProvider,ss as InstantiateOptions,ts as Interactable,os as InternalScreenshotUtils,rs as JoinedRoomResponse,ns as KeyEventArgs,is as Keyframe,ls as LODGroup,ds as LODModel,cs as LeftRoomResponse,ms as Light,ps as LightData,gs as LimitVelocityOverLifetimeModule,us as LoadingElementOptions,Ss as LogStats,Cs as LogType,ys as LookAt,Es as LookAtConstraint,Rs as MainModule,hs as MarkerTrackHandler,vs as MarkerType,fs as MaskableGraphic,Ps as MaterialPropertyBlock,As as MaterialX,Ts as Mathf,Ms as MeshCollider,bs as MeshRenderer,Is as MinMaxCurve,Ds as MinMaxGradient,Os as NEEDLE_ENGINE_FEATURE_FLAGS,xs as NEEDLE_ENGINE_MODULES,tc as NEEDLE_progressive,ks as NEKeyboardEvent,Ls as NEPointerEvent,Bs as NeedleButtonElement,Fs as NeedleEngine,Ns as NeedleEngineModelLoader,ws as NeedleEngineWebComponent,Ws as NeedleMenu,Gs as NeedlePatchesKey,Us as NeedleUSDZExporter,Hs as NeedleXRController,g as NeedleXRSession,Xs as NeedleXRSync,zs as NeedleXRUtils,Vs as NestedGltf,_s as NetworkConnection,js as NetworkedStreamEvents,Ks as NetworkedStreams,Qs as Networking,Zs as NewInstanceModel,Ys as NoiseModule,Js as ObjectRaycaster,$s as ObjectUtils,qs as OffsetConstraint,et as OneEuroFilter,at as OneEuroFilterXYZ,st as OpenURL,tt as OrbitControls,ot as Outline,rt as OwnershipEvent,nt as OwnershipModel,it as PUBLIC_KEY,lt as Padding,dt as ParticleBurst,ct as ParticleSubEmitter,mt as ParticleSystem,pt as ParticleSystemBaseBehaviour,gt as ParticleSystemRenderer,ut as ParticleSystemShapeType,St as PeerHandle,Ct as PeerNetworking,yt as Physics,Et as PhysicsExtension,Rt as PhysicsMaterialCombine,ht as PixelationEffect,vt as PlayAnimationOnClick,ft as PlayAudioOnClick,Pt as PlayableDirector,At as PlayerColor,Tt as PlayerState,Mt as PlayerStateEvent,bt as PlayerSync,It as PlayerView,Dt as PlayerViewManager,Ot as PointerEventData,xt as PointerType,kt as PostProcessingEffect,Lt as PostProcessingEffectOrder,Bt as PostProcessingHandler,Ft as PostProcessingManager,Nt as PreliminaryAction,wt as PreliminaryTrigger,Wt as PreviewHelper,Gt as PrimitiveType,Ut as Progress,Ht as PromiseAllWithErrors,Xt as PromiseErrorResult,zt as RGBAColor,Vt as RapierPhysics,_t as RawImage,jt as RaycastOptions,Kt as Rect,Qt as RectTransform,Zt as ReflectionProbe,Yt as RegisteredAnimationInfo,Jt as RemoteSkybox,$t as RenderTexture,qt as RenderTextureSerializer,eo as Renderer,ao as RendererData,so as RendererLightmap,to as Rigidbody,oo as RigidbodyConstraints,ro as RoomEvents,no as RotationBySpeedModule,io as RotationOverLifetimeModule,lo as SceneLightSettings,co as SceneSwitcher,mo as ScreenCapture,po as ScreenSpaceAmbientOcclusion,go as ScreenSpaceAmbientOcclusionN8,uo as ScrollFollow,So as SeeThrough,Co as SendQueue,yo as SerializationContext,Eo as SetActiveOnClick,Ro as ShadowCatcher,ho as ShapeModule,vo as ShapeOverlapResult,fo as SharpeningEffect,Po as SignalAsset,Ao as SignalReceiver,To as SignalReceiverEvent,Mo as SignalTrackHandler,bo as Size,Io as SizeBySpeedModule,Do as SizeOverLifetimeModule,Oo as SkinnedMeshRenderer,xo as SmoothFollow,ko as SpatialGrabRaycaster,Lo as SpatialHtml,Bo as SpatialTrigger,Fo as SpatialTriggerReceiver,No as SpectatorCamera,wo as SphereCollider,Wo as SphereIntersection,Go as SplineContainer,Uo as SplineData,Ho as SplineUtils,Xo as SplineWalker,zo as Sprite,Vo as SpriteData,_o as SpriteRenderer,jo as SpriteSheet,Ko as StateMachineBehaviour,Qo as StreamEndedEvent,Zo as StreamReceivedEvent,Yo as SubEmitterSystem,Jo as SyncedCamera,$o as SyncedRoom,qo as SyncedTransform,er as TapGestureTrigger,ar as TeleportTarget,sr as TestRunner,tr as TestSimulateUserData,or as Text,rr as TextBuilder,nr as TextExtension,ir as TextureSheetAnimationModule,lr as TiltShiftEffect,dr as Time,cr as ToneMappingEffect,mr as TrackHandler,pr as TrackType,gr as TrailModule,ur as TransformData,Sr as TransformGizmo,Cr as TriggerBuilder,yr as TriggerModel,m as TypeStore,Er as UIRaycastUtils,Rr as UIRootComponent,hr as USDDocument,vr as USDObject,fr as USDWriter,Pr as USDZExporter,Ar as USDZText,Tr as USDZUIExtension,Mr as UriSerializer,br as UsageMarker,Ir as UserJoinedOrLeftRoomModel,S as VERSION,Dr as VariantAction,Or as VelocityOverLifetimeModule,xr as VerticalLayoutGroup,kr as VideoPlayer,Lr as ViewBox,Br as ViewDevice,Fr as Vignette,Nr as VisibilityAction,wr as Voip,Wr as Volume,Gr as VolumeParameter,Ur as VolumeProfile,Hr as WaitForFrames,Xr as WaitForPromise,zr as WaitForSeconds,Vr as Watch,_r as WebARCameraBackground,jr as WebARSessionRoot,Kr as WebXR,Qr as WebXRButtonFactory,Zr as WebXRImageTracking,Yr as WebXRImageTrackingModel,Jr as WebXRPlaneTracking,$r as WebXRTrackedImage,qr as XRControllerFollow,en as XRControllerModel,an as XRControllerMovement,sn as XRFlag,tn as XRRig,on as XRState,rn as XRStateFlag,nn as __Ignore,ln as __internalNotifyObjectDestroyed,dn as activeInHierarchyFieldName,cn as addAttributeChangeCallback,mn as addComponent,pn as addCustomExtensionPlugin,gn as addNewComponent,un as addPatch,Sn as apply,Cn as applyHMRChanges,yn as applyPrototypeExtensions,En as beginListenDestroy,Rn as beginListenInstantiate,hn as binaryIdentifierCasts,vn as build_scene_functions,fn as builtinComponentKeyName,Pn as calculateProgress01,An as clearBalloonMessages,Tn as clearOverlayMessages,Mn as colorSerializer,bn as compareAssociation,In as componentSerializer,Dn as copyTexture,On as createMotion,xn as debugNet,kn as debugOwner,Ln as decompressGpuTexture,Bn as deepClone,Fn as delay,Nn as delayForFrames,wn as deserializeObject,Wn as destroy,Gn as destroyComponentInstance,Un as determineMimeTypeFromExtension,Hn as disposeObjectResources,Xn as disposeStream,zn as editorGuidKeyName,Vn as enableSpatialConsole,_n as euler,jn as eventListSerializer,Kn as exportAsGLTF,Qn as findByGuid,Zn as findObjectOfType,Yn as findObjectsOfType,Jn as findResourceUsers,$n as fitCamera,qn as fitObjectIntoVolume,ei as foreachComponent,ai as foreachComponentEnumerator,si as forward,ti as generateQRCode,oi as generateSeed,ri as getBoundingBox,ni as getCameraController,ii as getComponent,li as getComponentInChildren,di as getComponentInParent,ci as getComponents,mi as getComponentsInChildren,pi as getComponentsInParent,gi as getFormattedDate,ui as getIconElement,Si as getIconTexture,Ci as getLoader,yi as getOrAddComponent,Ei as getParam,Ri as getParentHierarchyPath,hi as getPath,vi as getPeerOptions,fi as getPeerjsInstance,Pi as getResourceUserCount,Ai as getTempColor,Ti as getTempQuaternion,Mi as getTempVector,bi as getUrlParams,Ii as getVisibleInCustomShadowRendering,Di as getWorldDirection,Oi as getWorldEuler,xi as getWorldPosition,ki as getWorldQuaternion,Li as getWorldRotation,Bi as getWorldScale,Fi as hasCommercialLicense,Ni as hasIndieLicense,wi as hasPointerEventComponent,Wi as hasProLicense,Gi as hideDebugConsole,Ui as imageToCanvas,Hi as instantiate,Xi as invokeLoadedImportPluginHooks,zi as invokeXRSessionEnd,Vi as invokeXRSessionStart,_i as isActiveInHierarchy,ji as isActiveSelf,Ki as isAndroidDevice,Qi as isAnimationAction,Zi as isComponent,Yi as isDebugMode,Ji as isDesktop,$i as isDestroyed,qi as isDevEnvironment,el as isDisposed,al as isExporting,sl as isGLTFModel,tl as isHostedOnGlitch,ol as isHotReloadEnabled,rl as isHotReloading,nl as isIPad,il as isIconElement,ll as isLocalNetwork,dl as isMacOS,cl as isMobileDevice,ml as isMozillaXR,pl as isQuest,gl as isResourceTrackingEnabled,ul as isSafari,Sl as isUsingInstancing,Cl as isiOS,yl as isiPad,p as loadAsset,El as loadPMREM,Rl as loadSync,hl as logHierarchy,vl as lookAtInverse,fl as lookAtObject,Pl as lookAtScreenPoint,Al as makeId,Tl as makeIdFromRandomWords,Ml as makeNameSafeForUSD,bl as markAsInstancedRendered,Il as microphonePermissionsGranted,Dl as nameof,Ol as nameofFactory,xl as objectSerializer,kl as offXRSessionEnd,Ll as offXRSessionStart,i as onAfterRender,l as onBeforeRender,o as onClear,r as onDestroy,n as onInitialized,c as onStart,d as onUpdate,Bl as onXRSessionEnd,Fl as onXRSessionStart,Nl as parseSync,wl as placeOnSurface,Wl as postprocessFBXMaterials,Gl as prefix,Ul as pushState,Hl as randomNumber,Xl as registerBinaryType,zl as registerComponent,Vl as registerComponentExtension,_l as registerCustomEffectType,jl as registerExportExtensions,Kl as registerExtensions,Ql as registerHotReloadType,Zl as registerLoader,Yl as registerPrefabProvider,Jl as registerPrototypeExtensions,$l as registerType,ql as relativePathPrefix,ed as removeAttributeChangeCallback,ad as removeComponent,sd as removeCustomImportExtensionType,td as removePatch,od as resolveUrl,rd as sanitizeString,nd as saveImage,id as screenshot,ld as screenshot2,dd as sendDestroyed,cd as serializable,md as serializeObject,pd as serializeable,gd as setActive,ud as setAllowBalloonMessages,Sd as setAllowOverlayMessages,Cd as setAutoFitEnabled,yd as setCameraController,Ed as setDestroyed,Rd as setDevEnvironment,hd as setDisposable,vd as setDontDestroy,fd as setOrAddParamsToUrl,Pd as setParam,Ad as setParamWithoutReload,Td as setPeerOptions,Md as setResourceTrackingEnabled,bd as setState,Id as setVisibleInCustomShadowRendering,Dd as setWorldEuler,Od as setWorldPosition,xd as setWorldPositionXYZ,kd as setWorldQuaternion,Ld as setWorldQuaternionXYZW,Bd as setWorldRotation,Fd as setWorldRotationXYZ,Nd as setWorldScale,wd as showBalloonError,Wd as showBalloonMessage,Gd as showBalloonWarning,Ud as showDebugConsole,Hd as slerp,Xd as syncDestroy,zd as syncField,Vd as syncInstantiate,_d as textureToCanvas,jd as toSourceId,Kd as tryCastBinary,Qd as tryDetermineMimetypeFromBinary,Zd as tryDetermineMimetypeFromURL,Yd as tryFindObject,Jd as tryGetGuid,$d as unregisterHotReloadType,qd as unwatchWrite,ec as useForAutoFit,ac as validate,sc 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-mHgaFC2W.min.js";import{$componentName as R,$physicsKey as h,ActionBuilder as v,ActionCollection as f,ActionModel as P,Addressables as A,AlignmentConstraint as T,AmbientMode as M,Animation as b,AnimationCurve as I,AnimationExtension as D,AnimationTrackHandler as O,AnimationUtils as x,Animator as k,AnimatorConditionMode as L,AnimatorController as B,AnimatorControllerParameterType as F,AnimatorStateInfo as N,Antialiasing as w,Application as W,AssetDatabase as G,AssetReference as U,Attractor as H,AudioExtension as X,AudioListener as z,AudioSource as V,AudioTrackHandler as _,Avatar as j,AvatarBlink_Simple as K,AvatarEyeLook_Rotation as Q,AvatarLoader as Z,AvatarMarker as Y,AvatarModel as J,Avatar_Brain_LookAt as $,Avatar_MouthShapes as q,Avatar_MustacheShake as ee,Avatar_POI as ae,Axes as se,AxesHelper as te,BUILD_TIME as oe,BaseUIComponent as re,BasicIKConstraint as ne,BehaviorExtension as ie,BehaviorModel as le,Component$1 as de,BlobStorage as ce,BloomEffect as me,BoxCollider as pe,BoxGizmo as ge,BoxHelperComponent as ue,Button as Se,ButtonsFactory as Ce,CallDirection as ye,CallInfo as Ee,Camera as Re,CameraTargetReachedEvent as he,Canvas as ve,CanvasGroup as fe,CapsuleCollider as Pe,ChangeMaterialOnClick as Ae,ChangeTransformOnClick as Te,CharacterController as Me,CharacterControllerInput as be,ChromaticAberration as Ie,CircularBuffer as De,ClearFlags as Oe,ClickThrough as xe,ClipExtrapolation as ke,Collider as Le,Collision as Be,CollisionDetectionMode as Fe,ColorAdjustments as Ne,ColorBySpeedModule as we,ColorOverLifetimeModule as We,Component$1 as Ge,ComponentLifecycleEvents as Ue,ConnectionEvents as He,ContactPoint as Xe,ContactShadows as ze,ContextArgs as Ve,ContextEvent as _e,ContextRegistry as je,ControlTrackHandler as Ke,CursorFollow as Qe,CustomBranding as Ze,CustomShader as Ye,DefaultReflectionMode as Je,Deletable as $e,DeleteBox as qe,DepthOfField as ea,DeviceFlag as aa,DeviceUtilities as sa,DocumentExtension as ta,DragControls as oa,DragMode as ra,DropListener as na,Duplicatable as ia,EffectWrapper as la,EmissionModule as da,EmphasizeOnClick as ca,EngineLoadingView as ma,EnvironmentScene as pa,EventList as ga,EventListEvent as ua,EventSystem as Sa,EventTrigger as Ca,FieldWithDefault as ya,FileReference as Ea,FileReferenceSerializer as Ra,FileSpawnModel as ha,File_Event as va,FixedJoint as fa,Fog as Pa,FrameEvent as Aa,GENERATOR as Ta,Gizmos as Ma,GltfExport as ba,GltfExportBox as Ia,Gradient as Da,Graphic as Oa,GraphicRaycaster as xa,Graphics as ka,GridHelper as La,GridLayoutGroup as Ba,GroundProjectedEnv as Fa,GroupActionModel as Na,HideFlags as wa,HideOnStart as Wa,HingeJoint as Ga,HorizontalLayoutGroup as Ua,HostData as Ha,HoverAnimation as Xa,Image as za,ImageReference as Va,ImageReferenceSerializer as _a,InheritVelocityModule as ja,Input as Ka,InputEventQueue as Qa,InputEvents as Za,InputField as Ya,InstanceHandle as Ja,InstancingHandler as $a,InstancingUtil as qa,InstantiateEvent as es,InstantiateIdProvider as as,InstantiateOptions as ss,Interactable as ts,InternalScreenshotUtils as os,JoinedRoomResponse as rs,KeyEventArgs as ns,Keyframe as is,LODGroup as ls,LODModel as ds,LeftRoomResponse as cs,Light as ms,LightData as ps,LimitVelocityOverLifetimeModule as gs,LoadingElementOptions as us,LogStats as Ss,LogType as Cs,LookAt as ys,LookAtConstraint as Es,MainModule as Rs,MarkerTrackHandler as hs,MarkerType as vs,MaskableGraphic as fs,MaterialPropertyBlock as Ps,MaterialX as As,Mathf as Ts,MeshCollider as Ms,MeshRenderer as bs,MinMaxCurve as Is,MinMaxGradient as Ds,NEEDLE_ENGINE_FEATURE_FLAGS as Os,MODULES as xs,NEKeyboardEvent as ks,NEPointerEvent as Ls,NeedleButtonElement as Bs,ContextRegistry as Fs,NeedleEngineModelLoader as Ns,NeedleEngineWebComponent as ws,NeedleMenu as Ws,NeedlePatchesKey as Gs,USDZExporter as Us,NeedleXRController as Hs,NeedleXRSync as Xs,NeedleXRUtils as zs,NestedGltf as Vs,NetworkConnection as _s,NetworkedStreamEvents as js,NetworkedStreams as Ks,Networking as Qs,NewInstanceModel as Zs,NoiseModule as Ys,ObjectRaycaster as Js,ObjectUtils as $s,OffsetConstraint as qs,OneEuroFilter as et,OneEuroFilterXYZ as at,OpenURL as st,OrbitControls as tt,Outline as ot,OwnershipEvent as rt,OwnershipModel as nt,PUBLIC_KEY as it,Padding as lt,ParticleBurst as dt,ParticleSubEmitter as ct,ParticleSystem as mt,ParticleSystemBaseBehaviour as pt,ParticleSystemRenderer as gt,ParticleSystemShapeType as ut,PeerHandle as St,PeerNetworking as Ct,Physics as yt,PhysicsExtension as Et,PhysicsMaterialCombine as Rt,PixelationEffect as ht,PlayAnimationOnClick as vt,PlayAudioOnClick as ft,PlayableDirector as Pt,PlayerColor as At,PlayerState as Tt,PlayerStateEvent as Mt,PlayerSync as bt,PlayerView as It,PlayerViewManager as Dt,PointerEventData as Ot,PointerType as xt,PostProcessingEffect as kt,PostProcessingEffectOrder as Lt,PostProcessingHandler as Bt,Volume as Ft,PreliminaryAction as Nt,PreliminaryTrigger as wt,PreviewHelper as Wt,PrimitiveType as Gt,Progress as Ut,PromiseAllWithErrors as Ht,PromiseErrorResult as Xt,RGBAColor as zt,RapierPhysics as Vt,RawImage as _t,RaycastOptions as jt,Rect as Kt,RectTransform as Qt,ReflectionProbe as Zt,RegisteredAnimationInfo as Yt,RemoteSkybox as Jt,RenderTexture as $t,RenderTextureSerializer as qt,Renderer as eo,RendererData as ao,RendererLightmap as so,Rigidbody as to,RigidbodyConstraints as oo,RoomEvents as ro,RotationBySpeedModule as no,RotationOverLifetimeModule as io,SceneLightSettings as lo,SceneSwitcher as co,ScreenCapture as mo,ScreenSpaceAmbientOcclusion as po,ScreenSpaceAmbientOcclusionN8 as go,ScrollFollow as uo,SeeThrough as So,SendQueue as Co,SerializationContext as yo,SetActiveOnClick as Eo,ShadowCatcher as Ro,ShapeModule as ho,ShapeOverlapResult as vo,SharpeningEffect as fo,SignalAsset as Po,SignalReceiver as Ao,SignalReceiverEvent as To,SignalTrackHandler as Mo,Size as bo,SizeBySpeedModule as Io,SizeOverLifetimeModule as Do,SkinnedMeshRenderer as Oo,SmoothFollow as xo,SpatialGrabRaycaster as ko,SpatialHtml as Lo,SpatialTrigger as Bo,SpatialTriggerReceiver as Fo,SpectatorCamera as No,SphereCollider as wo,SphereIntersection as Wo,SplineContainer as Go,SplineData as Uo,SplineUtils as Ho,SplineWalker as Xo,Sprite as zo,SpriteData as Vo,SpriteRenderer as _o,SpriteSheet as jo,StateMachineBehaviour as Ko,StreamEndedEvent as Qo,StreamReceivedEvent as Zo,SubEmitterSystem as Yo,SyncedCamera as Jo,SyncedRoom as $o,SyncedTransform as qo,TapGestureTrigger as er,TeleportTarget as ar,TestRunner as sr,TestSimulateUserData as tr,Text as or,TextBuilder as rr,TextExtension as nr,TextureSheetAnimationModule as ir,TiltShiftEffect as lr,Time as dr,ToneMappingEffect as cr,TrackHandler as mr,TrackType as pr,TrailModule as gr,TransformData as ur,TransformGizmo as Sr,TriggerBuilder as Cr,TriggerModel as yr,UIRaycastUtils as Er,UIRootComponent as Rr,USDDocument as hr,USDObject as vr,USDWriter as fr,USDZExporter$1 as Pr,USDZText as Ar,USDZUIExtension as Tr,UriSerializer as Mr,UsageMarker as br,UserJoinedOrLeftRoomModel as Ir,VariantAction as Dr,VelocityOverLifetimeModule as Or,VerticalLayoutGroup as xr,VideoPlayer as kr,ViewBox as Lr,ViewDevice as Br,Vignette as Fr,VisibilityAction as Nr,Voip as wr,Volume as Wr,VolumeParameter as Gr,VolumeProfile as Ur,WaitForFrames as Hr,WaitForPromise as Xr,WaitForSeconds as zr,Watch as Vr,WebARCameraBackground as _r,WebARSessionRoot as jr,WebXR as Kr,WebXRButtonFactory as Qr,WebXRImageTracking as Zr,WebXRImageTrackingModel as Yr,WebXRPlaneTracking as Jr,WebXRTrackedImage as $r,XRControllerFollow as qr,XRControllerModel as en,XRControllerMovement as an,XRFlag as sn,XRRig as tn,XRState as on,XRStateFlag as rn,__Ignore as nn,__internalNotifyObjectDestroyed as ln,activeInHierarchyFieldName as dn,addAttributeChangeCallback as cn,addComponent as mn,addCustomExtensionPlugin as pn,addNewComponent as gn,addPatch as un,apply as Sn,applyHMRChanges as Cn,applyPrototypeExtensions as yn,beginListenDestroy as En,beginListenInstantiate as Rn,binaryIdentifierCasts as hn,build_scene_functions as vn,builtinComponentKeyName as fn,calculateProgress01 as Pn,clearMessages as An,clearMessages as Tn,colorSerializer as Mn,compareAssociation as bn,componentSerializer as In,copyTexture as Dn,createMotion as On,debugNet as xn,debugOwner as kn,decompressGpuTexture as Ln,deepClone as Bn,delay as Fn,delayForFrames as Nn,deserializeObject as wn,destroy as Wn,destroyComponentInstance as Gn,determineMimeTypeFromExtension as Un,disposeObjectResources as Hn,disposeStream as Xn,editorGuidKeyName as zn,enableSpatialConsole as Vn,euler as _n,eventListSerializer as jn,exportAsGLTF as Kn,findByGuid as Qn,findObjectOfType as Zn,findObjectsOfType as Yn,findResourceUsers as Jn,fitCamera as $n,fitObjectIntoVolume as qn,foreachComponent as ei,foreachComponentEnumerator as ai,forward as si,generateQRCode as ti,generateSeed as oi,getBoundingBox as ri,getCameraController as ni,getComponent as ii,getComponentInChildren as li,getComponentInParent as di,getComponents as ci,getComponentsInChildren as mi,getComponentsInParent as pi,getFormattedDate as gi,getIconElement as ui,getIconTexture as Si,getLoader as Ci,getOrAddComponent as yi,getParam as Ei,getParentHierarchyPath as Ri,getPath as hi,getPeerOptions as vi,getPeerjsInstance as fi,getResourceUserCount as Pi,getTempColor as Ai,getTempQuaternion as Ti,getTempVector as Mi,getUrlParams as bi,getVisibleInCustomShadowRendering as Ii,getWorldDirection as Di,getWorldEuler as Oi,getWorldPosition as xi,getWorldQuaternion as ki,getWorldRotation as Li,getWorldScale as Bi,hasCommercialLicense as Fi,hasIndieLicense as Ni,hasPointerEventComponent as wi,hasProLicense as Wi,hideDebugConsole as Gi,imageToCanvas as Ui,instantiate as Hi,invokeLoadedImportPluginHooks as Xi,invokeXRSessionEnd as zi,invokeXRSessionStart as Vi,isActiveInHierarchy as _i,isActiveSelf as ji,isAndroidDevice as Ki,isAnimationAction as Qi,isComponent as Zi,isDebugMode as Yi,isDesktop as Ji,isDestroyed as $i,isDevEnvironment as qi,isDisposed as el,isExporting as al,isGLTFModel as sl,isHostedOnGlitch as tl,isHotReloadEnabled as ol,isHotReloading as rl,isIPad as nl,isIconElement as il,isLocalNetwork as ll,isMacOS as dl,isMobileDevice as cl,isMozillaXR as ml,isQuest as pl,isResourceTrackingEnabled as gl,isSafari as ul,isUsingInstancing as Sl,isiOS as Cl,isiPad as yl,loadPMREM as El,loadSync as Rl,logHierarchy as hl,lookAtInverse as vl,lookAtObject as fl,lookAtScreenPoint as Pl,makeId as Al,makeIdFromRandomWords as Tl,makeNameSafe as Ml,markAsInstancedRendered as bl,microphonePermissionsGranted as Il,nameof as Dl,nameofFactory as Ol,objectSerializer as xl,offXRSessionEnd as kl,offXRSessionStart as Ll,onXRSessionEnd as Bl,onXRSessionStart as Fl,parseSync as Nl,placeOnSurface as wl,postprocessFBXMaterials as Wl,prefix as Gl,pushState as Ul,randomNumber as Hl,registerBinaryType as Xl,registerComponent as zl,registerComponentExtension as Vl,registerCustomEffectType as _l,registerExportExtensions as jl,registerExtensions as Kl,registerHotReloadType as Ql,registerLoader as Zl,registerPrefabProvider as Yl,registerPrototypeExtensions as Jl,registerType as $l,relativePathPrefix as ql,removeAttributeChangeCallback as ed,removeComponent as ad,removeCustomImportExtensionType as sd,removePatch as td,resolveUrl as od,sanitizeString as rd,saveImage as nd,screenshot as id,screenshot2 as ld,sendDestroyed as dd,serializable as cd,serializeObject as md,serializeable as pd,setActive as gd,setAllowBalloonMessages as ud,setAllowOverlayMessages as Sd,setAutoFitEnabled as Cd,setCameraController as yd,setDestroyed as Ed,setDevEnvironment as Rd,setDisposable as hd,setDontDestroy as vd,setOrAddParamsToUrl as fd,setParam as Pd,setParamWithoutReload as Ad,setPeerOptions as Td,setResourceTrackingEnabled as Md,setState as bd,setVisibleInCustomShadowRendering as Id,setWorldEuler as Dd,setWorldPosition as Od,setWorldPositionXYZ as xd,setWorldQuaternion as kd,setWorldQuaternionXYZW as Ld,setWorldRotation as Bd,setWorldRotationXYZ as Fd,setWorldScale as Nd,showBalloonError as wd,showBalloonMessage as Wd,showBalloonWarning as Gd,showDebugConsole as Ud,slerp as Hd,syncDestroy as Xd,syncField as zd,syncInstantiate as Vd,textureToCanvas as _d,toSourceId as jd,tryCastBinary as Kd,tryDetermineMimetypeFromBinary as Qd,tryDetermineMimetypeFromURL as Zd,tryFindObject as Yd,tryGetGuid as Jd,unregisterHotReloadType as $d,unwatchWrite as qd,useForAutoFit as ec,validate as ac,watchWrite as sc}from"./needle-engine.bundle-mHgaFC2W.min.js";import{NEEDLE_progressive as tc}from"./gltf-progressive-DQa78GTA.min.js";import{THREE as oc}from"./three.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=oc;export{R as $componentName,h as $physicsKey,v as ActionBuilder,f as ActionCollection,P as ActionModel,A as Addressables,T as AlignmentConstraint,M as AmbientMode,b as Animation,I as AnimationCurve,D as AnimationExtension,O as AnimationTrackHandler,x as AnimationUtils,k as Animator,L as AnimatorConditionMode,B as AnimatorController,F as AnimatorControllerParameterType,N as AnimatorStateInfo,w as Antialiasing,W as Application,G as AssetDatabase,U as AssetReference,H as Attractor,X as AudioExtension,z as AudioListener,V as AudioSource,_ as AudioTrackHandler,j as Avatar,K as AvatarBlink_Simple,Q as AvatarEyeLook_Rotation,Z as AvatarLoader,Y as AvatarMarker,J as AvatarModel,$ as Avatar_Brain_LookAt,q as Avatar_MouthShapes,ee as Avatar_MustacheShake,ae as Avatar_POI,se as Axes,te as AxesHelper,oe as BUILD_TIME,re as BaseUIComponent,ne as BasicIKConstraint,ie as BehaviorExtension,le as BehaviorModel,de as Behaviour,ce as BlobStorage,me as BloomEffect,pe as BoxCollider,ge as BoxGizmo,ue as BoxHelperComponent,Se as Button,Ce as ButtonsFactory,ye as CallDirection,Ee as CallInfo,Re as Camera,he as CameraTargetReachedEvent,ve as Canvas,fe as CanvasGroup,Pe as CapsuleCollider,Ae as ChangeMaterialOnClick,Te as ChangeTransformOnClick,Me as CharacterController,be as CharacterControllerInput,Ie as ChromaticAberration,De as CircularBuffer,Oe as ClearFlags,xe as ClickThrough,ke as ClipExtrapolation,Le as Collider,Be as Collision,Fe as CollisionDetectionMode,Ne as ColorAdjustments,we as ColorBySpeedModule,We as ColorOverLifetimeModule,Ge as Component,Ue as ComponentLifecycleEvents,He as ConnectionEvents,Xe as ContactPoint,ze as ContactShadows,u as Context,Ve as ContextArgs,_e as ContextEvent,je as ContextRegistry,Ke as ControlTrackHandler,Qe as CursorFollow,Ze as CustomBranding,Ye as CustomShader,Je as DefaultReflectionMode,$e as Deletable,qe as DeleteBox,ea as DepthOfField,aa as DeviceFlag,sa as DeviceUtilities,ta as DocumentExtension,oa as DragControls,ra as DragMode,na as DropListener,ia as Duplicatable,la as EffectWrapper,da as EmissionModule,ca as EmphasizeOnClick,ma as EngineLoadingView,pa as EnvironmentScene,ga as EventList,ua as EventListEvent,Sa as EventSystem,Ca as EventTrigger,ya as FieldWithDefault,Ea as FileReference,Ra as FileReferenceSerializer,ha as FileSpawnModel,va as File_Event,fa as FixedJoint,Pa as Fog,Aa as FrameEvent,Ta as GENERATOR,s as GameObject,Ma as Gizmos,ba as GltfExport,Ia as GltfExportBox,Da as Gradient,Oa as Graphic,xa as GraphicRaycaster,ka as Graphics,La as GridHelper,Ba as GridLayoutGroup,Fa as GroundProjectedEnv,Na as GroupActionModel,wa as HideFlags,Wa as HideOnStart,Ga as HingeJoint,Ua as HorizontalLayoutGroup,Ha as HostData,Xa as HoverAnimation,za as Image,Va as ImageReference,_a as ImageReferenceSerializer,ja as InheritVelocityModule,Ka as Input,Qa as InputEventQueue,Za as InputEvents,Ya as InputField,Ja as InstanceHandle,$a as InstancingHandler,qa as InstancingUtil,es as InstantiateEvent,as as InstantiateIdProvider,ss as InstantiateOptions,ts as Interactable,os as InternalScreenshotUtils,rs as JoinedRoomResponse,ns as KeyEventArgs,is as Keyframe,ls as LODGroup,ds as LODModel,cs as LeftRoomResponse,ms as Light,ps as LightData,gs as LimitVelocityOverLifetimeModule,us as LoadingElementOptions,Ss as LogStats,Cs as LogType,ys as LookAt,Es as LookAtConstraint,Rs as MainModule,hs as MarkerTrackHandler,vs as MarkerType,fs as MaskableGraphic,Ps as MaterialPropertyBlock,As as MaterialX,Ts as Mathf,Ms as MeshCollider,bs as MeshRenderer,Is as MinMaxCurve,Ds as MinMaxGradient,Os as NEEDLE_ENGINE_FEATURE_FLAGS,xs as NEEDLE_ENGINE_MODULES,tc as NEEDLE_progressive,ks as NEKeyboardEvent,Ls as NEPointerEvent,Bs as NeedleButtonElement,Fs as NeedleEngine,Ns as NeedleEngineModelLoader,ws as NeedleEngineWebComponent,Ws as NeedleMenu,Gs as NeedlePatchesKey,Us as NeedleUSDZExporter,Hs as NeedleXRController,g as NeedleXRSession,Xs as NeedleXRSync,zs as NeedleXRUtils,Vs as NestedGltf,_s as NetworkConnection,js as NetworkedStreamEvents,Ks as NetworkedStreams,Qs as Networking,Zs as NewInstanceModel,Ys as NoiseModule,Js as ObjectRaycaster,$s as ObjectUtils,qs as OffsetConstraint,et as OneEuroFilter,at as OneEuroFilterXYZ,st as OpenURL,tt as OrbitControls,ot as Outline,rt as OwnershipEvent,nt as OwnershipModel,it as PUBLIC_KEY,lt as Padding,dt as ParticleBurst,ct as ParticleSubEmitter,mt as ParticleSystem,pt as ParticleSystemBaseBehaviour,gt as ParticleSystemRenderer,ut as ParticleSystemShapeType,St as PeerHandle,Ct as PeerNetworking,yt as Physics,Et as PhysicsExtension,Rt as PhysicsMaterialCombine,ht as PixelationEffect,vt as PlayAnimationOnClick,ft as PlayAudioOnClick,Pt as PlayableDirector,At as PlayerColor,Tt as PlayerState,Mt as PlayerStateEvent,bt as PlayerSync,It as PlayerView,Dt as PlayerViewManager,Ot as PointerEventData,xt as PointerType,kt as PostProcessingEffect,Lt as PostProcessingEffectOrder,Bt as PostProcessingHandler,Ft as PostProcessingManager,Nt as PreliminaryAction,wt as PreliminaryTrigger,Wt as PreviewHelper,Gt as PrimitiveType,Ut as Progress,Ht as PromiseAllWithErrors,Xt as PromiseErrorResult,zt as RGBAColor,Vt as RapierPhysics,_t as RawImage,jt as RaycastOptions,Kt as Rect,Qt as RectTransform,Zt as ReflectionProbe,Yt as RegisteredAnimationInfo,Jt as RemoteSkybox,$t as RenderTexture,qt as RenderTextureSerializer,eo as Renderer,ao as RendererData,so as RendererLightmap,to as Rigidbody,oo as RigidbodyConstraints,ro as RoomEvents,no as RotationBySpeedModule,io as RotationOverLifetimeModule,lo as SceneLightSettings,co as SceneSwitcher,mo as ScreenCapture,po as ScreenSpaceAmbientOcclusion,go as ScreenSpaceAmbientOcclusionN8,uo as ScrollFollow,So as SeeThrough,Co as SendQueue,yo as SerializationContext,Eo as SetActiveOnClick,Ro as ShadowCatcher,ho as ShapeModule,vo as ShapeOverlapResult,fo as SharpeningEffect,Po as SignalAsset,Ao as SignalReceiver,To as SignalReceiverEvent,Mo as SignalTrackHandler,bo as Size,Io as SizeBySpeedModule,Do as SizeOverLifetimeModule,Oo as SkinnedMeshRenderer,xo as SmoothFollow,ko as SpatialGrabRaycaster,Lo as SpatialHtml,Bo as SpatialTrigger,Fo as SpatialTriggerReceiver,No as SpectatorCamera,wo as SphereCollider,Wo as SphereIntersection,Go as SplineContainer,Uo as SplineData,Ho as SplineUtils,Xo as SplineWalker,zo as Sprite,Vo as SpriteData,_o as SpriteRenderer,jo as SpriteSheet,Ko as StateMachineBehaviour,Qo as StreamEndedEvent,Zo as StreamReceivedEvent,Yo as SubEmitterSystem,Jo as SyncedCamera,$o as SyncedRoom,qo as SyncedTransform,er as TapGestureTrigger,ar as TeleportTarget,sr as TestRunner,tr as TestSimulateUserData,or as Text,rr as TextBuilder,nr as TextExtension,ir as TextureSheetAnimationModule,lr as TiltShiftEffect,dr as Time,cr as ToneMappingEffect,mr as TrackHandler,pr as TrackType,gr as TrailModule,ur as TransformData,Sr as TransformGizmo,Cr as TriggerBuilder,yr as TriggerModel,m as TypeStore,Er as UIRaycastUtils,Rr as UIRootComponent,hr as USDDocument,vr as USDObject,fr as USDWriter,Pr as USDZExporter,Ar as USDZText,Tr as USDZUIExtension,Mr as UriSerializer,br as UsageMarker,Ir as UserJoinedOrLeftRoomModel,S as VERSION,Dr as VariantAction,Or as VelocityOverLifetimeModule,xr as VerticalLayoutGroup,kr as VideoPlayer,Lr as ViewBox,Br as ViewDevice,Fr as Vignette,Nr as VisibilityAction,wr as Voip,Wr as Volume,Gr as VolumeParameter,Ur as VolumeProfile,Hr as WaitForFrames,Xr as WaitForPromise,zr as WaitForSeconds,Vr as Watch,_r as WebARCameraBackground,jr as WebARSessionRoot,Kr as WebXR,Qr as WebXRButtonFactory,Zr as WebXRImageTracking,Yr as WebXRImageTrackingModel,Jr as WebXRPlaneTracking,$r as WebXRTrackedImage,qr as XRControllerFollow,en as XRControllerModel,an as XRControllerMovement,sn as XRFlag,tn as XRRig,on as XRState,rn as XRStateFlag,nn as __Ignore,ln as __internalNotifyObjectDestroyed,dn as activeInHierarchyFieldName,cn as addAttributeChangeCallback,mn as addComponent,pn as addCustomExtensionPlugin,gn as addNewComponent,un as addPatch,Sn as apply,Cn as applyHMRChanges,yn as applyPrototypeExtensions,En as beginListenDestroy,Rn as beginListenInstantiate,hn as binaryIdentifierCasts,vn as build_scene_functions,fn as builtinComponentKeyName,Pn as calculateProgress01,An as clearBalloonMessages,Tn as clearOverlayMessages,Mn as colorSerializer,bn as compareAssociation,In as componentSerializer,Dn as copyTexture,On as createMotion,xn as debugNet,kn as debugOwner,Ln as decompressGpuTexture,Bn as deepClone,Fn as delay,Nn as delayForFrames,wn as deserializeObject,Wn as destroy,Gn as destroyComponentInstance,Un as determineMimeTypeFromExtension,Hn as disposeObjectResources,Xn as disposeStream,zn as editorGuidKeyName,Vn as enableSpatialConsole,_n as euler,jn as eventListSerializer,Kn as exportAsGLTF,Qn as findByGuid,Zn as findObjectOfType,Yn as findObjectsOfType,Jn as findResourceUsers,$n as fitCamera,qn as fitObjectIntoVolume,ei as foreachComponent,ai as foreachComponentEnumerator,si as forward,ti as generateQRCode,oi as generateSeed,ri as getBoundingBox,ni as getCameraController,ii as getComponent,li as getComponentInChildren,di as getComponentInParent,ci as getComponents,mi as getComponentsInChildren,pi as getComponentsInParent,gi as getFormattedDate,ui as getIconElement,Si as getIconTexture,Ci as getLoader,yi as getOrAddComponent,Ei as getParam,Ri as getParentHierarchyPath,hi as getPath,vi as getPeerOptions,fi as getPeerjsInstance,Pi as getResourceUserCount,Ai as getTempColor,Ti as getTempQuaternion,Mi as getTempVector,bi as getUrlParams,Ii as getVisibleInCustomShadowRendering,Di as getWorldDirection,Oi as getWorldEuler,xi as getWorldPosition,ki as getWorldQuaternion,Li as getWorldRotation,Bi as getWorldScale,Fi as hasCommercialLicense,Ni as hasIndieLicense,wi as hasPointerEventComponent,Wi as hasProLicense,Gi as hideDebugConsole,Ui as imageToCanvas,Hi as instantiate,Xi as invokeLoadedImportPluginHooks,zi as invokeXRSessionEnd,Vi as invokeXRSessionStart,_i as isActiveInHierarchy,ji as isActiveSelf,Ki as isAndroidDevice,Qi as isAnimationAction,Zi as isComponent,Yi as isDebugMode,Ji as isDesktop,$i as isDestroyed,qi as isDevEnvironment,el as isDisposed,al as isExporting,sl as isGLTFModel,tl as isHostedOnGlitch,ol as isHotReloadEnabled,rl as isHotReloading,nl as isIPad,il as isIconElement,ll as isLocalNetwork,dl as isMacOS,cl as isMobileDevice,ml as isMozillaXR,pl as isQuest,gl as isResourceTrackingEnabled,ul as isSafari,Sl as isUsingInstancing,Cl as isiOS,yl as isiPad,p as loadAsset,El as loadPMREM,Rl as loadSync,hl as logHierarchy,vl as lookAtInverse,fl as lookAtObject,Pl as lookAtScreenPoint,Al as makeId,Tl as makeIdFromRandomWords,Ml as makeNameSafeForUSD,bl as markAsInstancedRendered,Il as microphonePermissionsGranted,Dl as nameof,Ol as nameofFactory,xl as objectSerializer,kl as offXRSessionEnd,Ll as offXRSessionStart,i as onAfterRender,l as onBeforeRender,o as onClear,r as onDestroy,n as onInitialized,c as onStart,d as onUpdate,Bl as onXRSessionEnd,Fl as onXRSessionStart,Nl as parseSync,wl as placeOnSurface,Wl as postprocessFBXMaterials,Gl as prefix,Ul as pushState,Hl as randomNumber,Xl as registerBinaryType,zl as registerComponent,Vl as registerComponentExtension,_l as registerCustomEffectType,jl as registerExportExtensions,Kl as registerExtensions,Ql as registerHotReloadType,Zl as registerLoader,Yl as registerPrefabProvider,Jl as registerPrototypeExtensions,$l as registerType,ql as relativePathPrefix,ed as removeAttributeChangeCallback,ad as removeComponent,sd as removeCustomImportExtensionType,td as removePatch,od as resolveUrl,rd as sanitizeString,nd as saveImage,id as screenshot,ld as screenshot2,dd as sendDestroyed,cd as serializable,md as serializeObject,pd as serializeable,gd as setActive,ud as setAllowBalloonMessages,Sd as setAllowOverlayMessages,Cd as setAutoFitEnabled,yd as setCameraController,Ed as setDestroyed,Rd as setDevEnvironment,hd as setDisposable,vd as setDontDestroy,fd as setOrAddParamsToUrl,Pd as setParam,Ad as setParamWithoutReload,Td as setPeerOptions,Md as setResourceTrackingEnabled,bd as setState,Id as setVisibleInCustomShadowRendering,Dd as setWorldEuler,Od as setWorldPosition,xd as setWorldPositionXYZ,kd as setWorldQuaternion,Ld as setWorldQuaternionXYZW,Bd as setWorldRotation,Fd as setWorldRotationXYZ,Nd as setWorldScale,wd as showBalloonError,Wd as showBalloonMessage,Gd as showBalloonWarning,Ud as showDebugConsole,Hd as slerp,Xd as syncDestroy,zd as syncField,Vd as syncInstantiate,_d as textureToCanvas,jd as toSourceId,Kd as tryCastBinary,Qd as tryDetermineMimetypeFromBinary,Zd as tryDetermineMimetypeFromURL,Yd as tryFindObject,Jd as tryGetGuid,$d as unregisterHotReloadType,qd as unwatchWrite,ec as useForAutoFit,ac as validate,sc as watchWrite};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./needle-engine.bundle-DN7uXrFB.umd.cjs"),i=require("./gltf-progressive-LOFTyzy4.umd.cjs"),a=require("./three.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.$componentName=e.$componentName;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;exports.MaterialPropertyBlock=e.MaterialPropertyBlock;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.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-CXVjO2uF.umd.cjs"),i=require("./gltf-progressive-LOFTyzy4.umd.cjs"),a=require("./three.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.$componentName=e.$componentName;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;exports.MaterialPropertyBlock=e.MaterialPropertyBlock;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.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.16.0-next.35df6b8",
3
+ "version": "4.16.0",
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": {
@@ -184,4 +184,4 @@
184
184
  "module": "lib/needle-engine.js",
185
185
  "typings": "lib/needle-engine.d.ts",
186
186
  "types": "lib/needle-engine.d.ts"
187
- }
187
+ }