@needle-tools/engine 4.8.2-next.f60a325 → 4.8.3-next.106dc4b

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/dist/{gltf-progressive-B--ZfCTJ.min.js → gltf-progressive-DLhfUtEV.min.js} +1 -1
  3. package/dist/{gltf-progressive-Do1XJNMG.js → gltf-progressive-DVx_cW0s.js} +1 -5
  4. package/dist/{needle-engine.bundle-D8-9woI_.umd.cjs → needle-engine.bundle-CS0KpoXy.umd.cjs} +35 -25
  5. package/dist/{needle-engine.bundle-BX9NZ5lg.min.js → needle-engine.bundle-D48x8WMx.min.js} +42 -32
  6. package/dist/{needle-engine.bundle-ClHmG8SZ.js → needle-engine.bundle-XSFxeb08.js} +219 -201
  7. package/dist/needle-engine.d.ts +15 -15
  8. package/dist/needle-engine.js +3 -3
  9. package/dist/needle-engine.min.js +1 -1
  10. package/dist/needle-engine.umd.cjs +1 -1
  11. package/dist/{vendor-CGONwIc0.js → vendor-B_ytQUuR.js} +6 -6
  12. package/dist/{vendor-BlSxe9JJ.min.js → vendor-C31T0mYm.min.js} +2 -2
  13. package/dist/{vendor-Cty8Dnri.umd.cjs → vendor-D51IT5ns.umd.cjs} +9 -9
  14. package/lib/engine/engine_context.d.ts +2 -0
  15. package/lib/engine/engine_context.js +9 -9
  16. package/lib/engine/engine_context.js.map +1 -1
  17. package/lib/engine/engine_networking_streams.js +13 -2
  18. package/lib/engine/engine_networking_streams.js.map +1 -1
  19. package/lib/engine/webcomponents/buttons.js +6 -2
  20. package/lib/engine/webcomponents/buttons.js.map +1 -1
  21. package/lib/engine/webcomponents/needle menu/needle-menu.js +10 -0
  22. package/lib/engine/webcomponents/needle menu/needle-menu.js.map +1 -1
  23. package/lib/engine-components/OrbitControls.d.ts +1 -0
  24. package/lib/engine-components/OrbitControls.js +6 -0
  25. package/lib/engine-components/OrbitControls.js.map +1 -1
  26. package/package.json +2 -2
  27. package/plugins/vite/peer.js +60 -2
  28. package/plugins/vite/poster-client.js +35 -51
  29. package/plugins/vite/poster.js +2 -3
  30. package/src/engine/engine_context.ts +10 -9
  31. package/src/engine/engine_networking_streams.ts +17 -8
  32. package/src/engine/webcomponents/buttons.ts +6 -2
  33. package/src/engine/webcomponents/needle menu/needle-menu.ts +10 -0
  34. package/src/engine-components/OrbitControls.ts +5 -0
@@ -1,7 +1,7 @@
1
1
  import { Vector2 as J, Vector3 as b, Vector4 as de, Quaternion as $, PlaneGeometry as Nn, WebGLRenderer as dr, PerspectiveCamera as pe, OrthographicCamera as Md, Scene as bi, Mesh as H, Texture as Te, Uniform$1 as Ui, Color as se, ShaderMaterial as jn, Box3 as yi, ShadowMaterial as ab, Euler as Tt, MeshStandardMaterial as ct, Box3Helper as qw, GridHelper as rm, Object3D as M, Material as _e, Matrix3 as lb, Matrix4 as te, Layers as lo, Ray as co, MathUtils as gs, AxesHelper as _i, MeshBasicMaterial as we, DoubleSide as vi, BufferGeometry as In, Group as no, CylinderGeometry as cb, SphereGeometry as Rd, BoxGeometry as la, SpriteMaterial as Xw, Sprite as Qw, Shape as Yw, ExtrudeGeometry as Kw, Fog as hb, DirectionalLight as Zf, PointLight as am, EdgesGeometry as Zw, LineSegments as db, LineBasicMaterial as ub, Line as Zl, BufferAttribute as ht, Raycaster as Td, Sphere as Ed, ArrayCamera as Jw, Plane as ir, SkinnedMesh as ys, InterleavedBufferAttribute as fb, Skeleton as ex, Bone as tx, Source as ix, WebGLCubeRenderTarget as nx, CubeCamera as sx, AnimationClip as so, FileLoader as lm, TextureLoader as Qr, PropertyBinding as ca, LinearSRGBColorSpace as Ss, ShaderChunk as Vt, UniformsLib as ox, DataTexture as cm, RGBAFormat as Ad, EquirectangularReflectionMapping as _s, SRGBColorSpace as Cs, Clock as rx, NeutralToneMapping as ha, AgXToneMapping as Id, ACESFilmicToneMapping as Ld, NoToneMapping as Vh, PCFSoftShadowMap$1 as ax, BasicNodeLibrary as lx, WebGLRenderTarget as Bn, DepthTexture as pb, NearestFilter as Hh, LoopRepeat as cx, LoopOnce as Jf, AnimationMixer as hm, CompressedTexture as hx, FrontSide as ho, Camera as dx, Frustum as Gg, AudioListener as ux, PositionalAudio as fx, AudioLoader as ep, EventDispatcher as dm, BackSide as Dd, MeshDepthMaterial as px, CustomBlending as mx, MaxEquation as gx, AmbientLight as yx, HemisphereLight as _x, AlwaysStencilFunc as bx, GreaterEqualStencilFunc as vx, NotEqualStencilFunc as wx, GreaterStencilFunc as xx, LessEqualStencilFunc as Sx, EqualStencilFunc as Cx, LessStencilFunc as Px, NeverStencilFunc as qg, InvertStencilOp as Ox, DecrementWrapStencilOp as kx, IncrementWrapStencilOp as Mx, DecrementStencilOp as Rx, IncrementStencilOp as Tx, ReplaceStencilOp as Ex, ZeroStencilOp as Ax, KeepStencilOp as Ix, RawShaderMaterial as mb, GLSL3 as Lx, AlwaysDepth as Dx, GreaterEqualDepth as jx, GreaterDepth as Bx, LessEqualDepth as Fx, LessDepth as zx, NotEqualDepth as Ux, EqualDepth as Nx, BatchedMesh as Xg, MeshPhysicalMaterial as tp, LinearFilter as Gh, UnsignedByteType as $x, RingGeometry as Wx, Line3 as Vx, AdditiveBlending as gb, BoxHelper as Hx, SpotLight as Gx, DirectionalLightHelper as qx, CameraHelper as Xx, LOD as Qx, Triangle as Yx, NormalBlending as Kx, ReinhardToneMapping as um, LinearToneMapping as fm, HalfFloatType as Nu, VideoTexture as Zx, CubeTexture as Jx, CompressedCubeTexture as eS, EquirectangularRefractionMapping as tS, VectorKeyframeTrack as iS, QuaternionKeyframeTrack as nS, Audio as sS, ShaderLib as qh, UniformsUtils as yb, MirroredRepeatWrapping as Qg, MeshNormalMaterial as oS, AudioContext as rS, PMREMGenerator$1 as aS } from "./three-DrqIzZTH.js";
2
- import { createLoaders as pm, getRaycastMesh as _b, LODsManager as Io, NEEDLE_progressive as We, addDracoAndKTX2Loaders as lS, configureLoader as cS, setKTX2TranscoderLocation as hS, setDracoDecoderLocation as dS } from "./gltf-progressive-Do1XJNMG.js";
2
+ import { createLoaders as pm, getRaycastMesh as _b, LODsManager as Io, NEEDLE_progressive as We, addDracoAndKTX2Loaders as lS, configureLoader as cS, setKTX2TranscoderLocation as hS, setDracoDecoderLocation as dS } from "./gltf-progressive-DVx_cW0s.js";
3
3
  import { GroundedSkybox as da, Font as uS, TextGeometry as fS, FontLoader as pS, GLTFLoader as Ps, TransformControlsGizmo as bb, EXRLoader as Xh, RGBELoader as ip, Stats as mS, nodeFrame as gS, OrbitControls as vb, PositionalAudioHelper as yS, HorizontalBlurShader as _S, VerticalBlurShader as bS, GLTFExporter as wb, strToU8 as xb, zipSync as vS, XRControllerModelFactory as wS, XRHandMeshModel as xS, Line2 as SS, LineGeometry as CS, LineMaterial as PS, KTX2Loader as OS, TransformControls as kS, InteractiveGroup as MS, HTMLMesh as RS, VertexNormalsHelper as TS, OBJLoader as mm, FBXLoader as Sb, mergeVertices as ES } from "./three-examples-BIuXQPSf.js";
4
- import { fetchProfile as AS, MotionController as IS, $70d766613f57b014$export$2e2bcd8739ae039 as Yg, ByteBuffer as LS, v5 as Kg, md5 as Zg, SIZE_PREFIX_LENGTH as Cb, Builder as gm, createNoise4D as DS, Matrix4 as $u, BatchedParticleRenderer as jS, ParticleSystem as BS, RenderMode as as, ConstantColor as FS, Vector4 as zS, ConstantValue as US, TrailParticle as Jg, WorkerBase as NS, MeshBVH as $S } from "./vendor-CGONwIc0.js";
4
+ import { fetchProfile as AS, MotionController as IS, $70d766613f57b014$export$2e2bcd8739ae039 as Yg, ByteBuffer as LS, v5 as Kg, md5 as Zg, SIZE_PREFIX_LENGTH as Cb, Builder as gm, createNoise4D as DS, Matrix4 as $u, BatchedParticleRenderer as jS, ParticleSystem as BS, RenderMode as as, ConstantColor as FS, Vector4 as zS, ConstantValue as US, TrailParticle as Jg, WorkerBase as NS, MeshBVH as $S } from "./vendor-B_ytQUuR.js";
5
5
  import { __webpack_exports__default as Ce, __webpack_exports__Text as Pb, __webpack_exports__Block as Ob, __webpack_exports__update as WS, SimpleStateBehavior as VS, __webpack_exports__Inline as Wu, __webpack_exports__FontLibrary as ey, ThreeMeshUI as ty } from "./three-mesh-ui-D6Mz5Yl7.js";
6
6
  import { EffectAttribute as HS } from "./postprocessing-DddlM3CK.js";
7
7
  const Vu = /* @__PURE__ */ new Map();
@@ -1582,14 +1582,14 @@ function Wb(s, ...e) {
1582
1582
  }
1583
1583
  }
1584
1584
  const GC = w("nodevlogs");
1585
- function je(s, e = Ni.Log) {
1585
+ function Be(s, e = Ni.Log) {
1586
1586
  kn(e, s);
1587
1587
  }
1588
1588
  function me(s) {
1589
- je(s, Ni.Warn);
1589
+ Be(s, Ni.Warn);
1590
1590
  }
1591
1591
  function Nd(s) {
1592
- je(s, Ni.Error);
1592
+ Be(s, Ni.Error);
1593
1593
  }
1594
1594
  let cp, Yu;
1595
1595
  function L() {
@@ -1785,11 +1785,11 @@ po('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"]
1785
1785
  po('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";');
1786
1786
  po('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";');
1787
1787
  po('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');
1788
- po('globalThis["__NEEDLE_ENGINE_VERSION__"] = "4.8.2-alpha";');
1788
+ po('globalThis["__NEEDLE_ENGINE_VERSION__"] = "4.8.3";');
1789
1789
  po('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');
1790
- po('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Fri Aug 15 2025 11:22:58 GMT+0000 (Coordinated Universal Time)";');
1790
+ po('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Mon Aug 18 2025 14:21:29 GMT+0000 (Coordinated Universal Time)";');
1791
1791
  po('globalThis["__NEEDLE_PUBLIC_KEY__"] = "' + NEEDLE_PUBLIC_KEY + '";');
1792
- const Ln = "4.8.2-alpha", wm = "undefined", Qb = "Fri Aug 15 2025 11:22:58 GMT+0000 (Coordinated Universal Time)";
1792
+ const Ln = "4.8.3", wm = "undefined", Qb = "Mon Aug 18 2025 14:21:29 GMT+0000 (Coordinated Universal Time)";
1793
1793
  Xb && console.log(`Engine version: ${Ln} (generator: ${wm})
1794
1794
  Project built at ${Qb}`);
1795
1795
  const vl = NEEDLE_PUBLIC_KEY, ro = "needle_isActiveInHierarchy", jr = "builtin_components", Oh = "needle_editor_guid";
@@ -1911,7 +1911,7 @@ function o1(s) {
1911
1911
  pa[e](s);
1912
1912
  }
1913
1913
  const tt = w("debuginput");
1914
- var Pm = /* @__PURE__ */ ((s) => (s.Mouse = "mouse", s.Touch = "touch", s.Controller = "controller", s.Hand = "hand", s))(Pm || {}), Le = /* @__PURE__ */ ((s) => (s.PointerDown = "pointerdown", s.PointerUp = "pointerup", s.PointerMove = "pointermove", s.KeyDown = "keydown", s.KeyUp = "keyup", s.KeyPressed = "keypress", s))(Le || {});
1914
+ var Pm = /* @__PURE__ */ ((s) => (s.Mouse = "mouse", s.Touch = "touch", s.Controller = "controller", s.Hand = "hand", s))(Pm || {}), De = /* @__PURE__ */ ((s) => (s.PointerDown = "pointerdown", s.PointerUp = "pointerup", s.PointerMove = "pointermove", s.KeyDown = "keydown", s.KeyUp = "keyup", s.KeyPressed = "keypress", s))(De || {});
1915
1915
  class Vs extends PointerEvent {
1916
1916
  /**
1917
1917
  * Spatial input data
@@ -2396,13 +2396,13 @@ class r1 {
2396
2396
  createInputEvent(e) {
2397
2397
  switch (e.type) {
2398
2398
  case "pointerdown":
2399
- tt && je("Create Pointer down"), this.onDownButton(e.deviceIndex, e.button), this.onDown(e);
2399
+ tt && Be("Create Pointer down"), this.onDownButton(e.deviceIndex, e.button), this.onDown(e);
2400
2400
  break;
2401
2401
  case "pointermove":
2402
- tt && je("Create Pointer move"), this.onMove(e);
2402
+ tt && Be("Create Pointer move"), this.onMove(e);
2403
2403
  break;
2404
2404
  case "pointerup":
2405
- tt && je("Create Pointer up"), this.onUp(e), this.onReleaseButton(e.deviceIndex, e.button);
2405
+ tt && Be("Create Pointer up"), this.onUp(e), this.onReleaseButton(e.deviceIndex, e.button);
2406
2406
  break;
2407
2407
  }
2408
2408
  }
@@ -2496,7 +2496,7 @@ class r1 {
2496
2496
  if (this.context.isInAR || this.canReceiveInput(e) === !1) return;
2497
2497
  e.target instanceof HTMLElement && e.target.setPointerCapture(e.pointerId);
2498
2498
  const t = this.getPointerId(e);
2499
- tt && je(`pointer down #${t}, identifier:${e.pointerId}`);
2499
+ tt && Be(`pointer down #${t}, identifier:${e.pointerId}`);
2500
2500
  const i = this.getAndUpdateSpatialObjectForScreenPosition(t, e.clientX, e.clientY), n = new Vs("pointerdown", e, { origin: this, mode: "screen", deviceIndex: 0, pointerId: t, button: e.button, clientX: e.clientX, clientY: e.clientY, pointerType: e.pointerType, buttonName: this.getButtonName(e), device: i, pressure: e.pressure });
2501
2501
  this.onDown(n);
2502
2502
  };
@@ -3178,16 +3178,16 @@ Pinch: ${this.getGesture("pinch")?.value.toFixed(3)}`), n += `
3178
3178
  if (!this.emitPointerDownEvent || this.inputSource !== e.inputSource) return;
3179
3179
  this.onUpdateFrame(e.frame), this._hasSelectEvent = !0;
3180
3180
  const t = this._layout?.selectComponentId, i = this._layout?.components[t]?.gamepadIndices?.button;
3181
- i !== void 0 && (this._selectButtonIndex = i), !Xc && (Yn && F.DrawDirection(this.rayWorldPosition, G(0, 0.01, 1).applyQuaternion(this.rayWorldQuaternion), 16711680, 10), this.emitPointerEvent(Le.PointerDown, this._selectButtonIndex || 0, "xr-standard-trigger", !0, e));
3181
+ i !== void 0 && (this._selectButtonIndex = i), !Xc && (Yn && F.DrawDirection(this.rayWorldPosition, G(0, 0.01, 1).applyQuaternion(this.rayWorldQuaternion), 16711680, 10), this.emitPointerEvent(De.PointerDown, this._selectButtonIndex || 0, "xr-standard-trigger", !0, e));
3182
3182
  };
3183
3183
  onSelectEnd = (e) => {
3184
- this.emitPointerUpEvent && (Xc || this.inputSource === e.inputSource && this.emitPointerEvent(Le.PointerUp, this._selectButtonIndex || 0, "xr-standard-trigger", !0, e));
3184
+ this.emitPointerUpEvent && (Xc || this.inputSource === e.inputSource && this.emitPointerEvent(De.PointerUp, this._selectButtonIndex || 0, "xr-standard-trigger", !0, e));
3185
3185
  };
3186
3186
  onSequeezeStart = (e) => {
3187
- this.emitPointerDownEvent && this.inputSource === e.inputSource && (this._squeezeButtonIndex = this._layout?.components["xr-standard-squeeze"]?.gamepadIndices?.button, this._squeezeButtonIndex !== void 0 && (Yn && F.DrawDirection(this.rayWorldPosition, G(0, 0.01, 1).applyQuaternion(this.rayWorldQuaternion), 255, 10), this.emitPointerEvent(Le.PointerDown, this._squeezeButtonIndex || 0, "xr-standard-squeeze", !0, e)));
3187
+ this.emitPointerDownEvent && this.inputSource === e.inputSource && (this._squeezeButtonIndex = this._layout?.components["xr-standard-squeeze"]?.gamepadIndices?.button, this._squeezeButtonIndex !== void 0 && (Yn && F.DrawDirection(this.rayWorldPosition, G(0, 0.01, 1).applyQuaternion(this.rayWorldQuaternion), 255, 10), this.emitPointerEvent(De.PointerDown, this._squeezeButtonIndex || 0, "xr-standard-squeeze", !0, e)));
3188
3188
  };
3189
3189
  onSequeezeEnd = (e) => {
3190
- this.emitPointerUpEvent && this.inputSource === e.inputSource && this._squeezeButtonIndex !== void 0 && this.emitPointerEvent(Le.PointerUp, this._squeezeButtonIndex || 0, "xr-standard-squeeze", !0, e);
3190
+ this.emitPointerUpEvent && this.inputSource === e.inputSource && this._squeezeButtonIndex !== void 0 && this.emitPointerEvent(De.PointerUp, this._squeezeButtonIndex || 0, "xr-standard-squeeze", !0, e);
3191
3191
  };
3192
3192
  /** Index = button index */
3193
3193
  states = {};
@@ -3252,7 +3252,7 @@ Pinch: ${this.getGesture("pinch")?.value.toFixed(3)}`), n += `
3252
3252
  pointerInit;
3253
3253
  emitPointerEvent(e, t, i, n, o = null, r) {
3254
3254
  if (!this.emitEvents) {
3255
- Yn && e !== Le.PointerMove && console.warn("Pointer events are disabled for this controller", this.index, e, t);
3255
+ Yn && e !== De.PointerMove && console.warn("Pointer events are disabled for this controller", this.index, e, t);
3256
3256
  return;
3257
3257
  }
3258
3258
  if (this.xr.mode === "immersive-vr" || this.xr.isPassThrough) {
@@ -3474,7 +3474,7 @@ function m1(s, e) {
3474
3474
  }, s ? new Yg(s, e) : new Yg(e);
3475
3475
  }
3476
3476
  async function Py() {
3477
- const s = await import("./vendor-CGONwIc0.js").then((e) => e.bundler);
3477
+ const s = await import("./vendor-B_ytQUuR.js").then((e) => e.bundler);
3478
3478
  return console.log(s), s.default === void 0 ? s : s.default;
3479
3479
  }
3480
3480
  class g1 {
@@ -3887,7 +3887,7 @@ class w1 {
3887
3887
  }
3888
3888
  console.debug(`⊡ Connecting to networking backend on
3889
3889
  ` + Ti);
3890
- const o = await import("./vendor-CGONwIc0.js").then((c) => c.index), r = o.default?.WebsocketBuilder ?? o.WebsocketBuilder, a = o.default?.ExponentialBackoff ?? o.ExponentialBackoff, l = new r(Ti).withMaxRetries(10).withBackoff(new a(2e3, 4)).onOpen(() => {
3890
+ const o = await import("./vendor-B_ytQUuR.js").then((c) => c.index), r = o.default?.WebsocketBuilder ?? o.WebsocketBuilder, a = o.default?.ExponentialBackoff ?? o.ExponentialBackoff, l = new r(Ti).withMaxRetries(10).withBackoff(new a(2e3, 4)).onOpen(() => {
3891
3891
  this._connectingToWebsocketPromise = null, this._ws = l, this.connected = !0, L() || ai ? console.log(`⊞ Connected to networking backend
3892
3892
  ` + Ti) : console.debug("⊞ Connected to networking backend", Ti), n(!0), this.onSendQueued(xn.OnConnection);
3893
3893
  }).onClose((c) => {
@@ -4752,7 +4752,7 @@ class K {
4752
4752
  a.onBeforeXR && a.onBeforeXR(e, t);
4753
4753
  for (const a of this._sessionRequestStartListeners)
4754
4754
  a({ mode: e, init: t });
4755
- He && je("Requesting " + e + " session (" + Date.now() + ")"), this._currentSessionRequest = navigator.xr?.requestSession(e, t), this._currentSessionRequestMode = e;
4755
+ He && Be("Requesting " + e + " session (" + Date.now() + ")"), this._currentSessionRequest = navigator.xr?.requestSession(e, t), this._currentSessionRequestMode = e;
4756
4756
  const o = await this._currentSessionRequest?.catch((a) => {
4757
4757
  console.error(a, "Code: " + a.code), a.code === 9 && me("Make sure your device has the required permissions (e.g. camera access)"), 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:" && me("XR requires a secure connection (HTTPS)");
4758
4758
  });
@@ -6008,7 +6008,7 @@ var ed;
6008
6008
  s.runMeshBVHRaycast = e;
6009
6009
  let t = !1, i = null, n = null, o = null, r = null;
6010
6010
  function a() {
6011
- t || (t = !0, import("./vendor-CGONwIc0.js").then((v) => v.index$1).then((v) => {
6011
+ t || (t = !0, import("./vendor-B_ytQUuR.js").then((v) => v.index$1).then((v) => {
6012
6012
  i = v.acceleratedRaycast, n = v.MeshBVH, o = v.StaticGeometryGenerator, r = v.computeBoundsTree;
6013
6013
  }).catch((v) => {
6014
6014
  (Wt || L()) && console.error("Failed to load BVH library...", v.message);
@@ -9238,13 +9238,15 @@ class Rn {
9238
9238
  L() && window.location.href.includes("://localhost") && me("To access your website from another device in the same local network you have to use the IP address instead of localhost. The IP address is logged in your development server console when you start the server."), o();
9239
9239
  });
9240
9240
  async function o() {
9241
- await a(), document.body.appendChild(i);
9242
- const l = n.getBoundingClientRect(), c = t.getBoundingClientRect();
9243
- i.style.left = c.left + c.width * 0.5 - l.width * 0.5 + "px";
9244
- const h = c.top < l.height, d = "1.3rem";
9245
- h ? i.style.top = `calc(${c.bottom}px + ${i.style.padding} + 0.0rem)` : i.style.top = `calc(${c.top - l.height}px - ${i.style.padding} - ${d})`, i.style.opacity = "0", i.style.pointerEvents = "all", i.style.transition = "opacity 0.2s ease-in-out", setTimeout(() => {
9241
+ await a();
9242
+ const c = document.body.querySelector("needle-engine") || document.body;
9243
+ c.appendChild(i);
9244
+ const h = n.getBoundingClientRect(), d = t.getBoundingClientRect();
9245
+ i.style.left = d.left + d.width * 0.5 - h.width * 0.5 + "px";
9246
+ const f = d.top < h.height, p = "1.3rem";
9247
+ f ? i.style.top = `calc(${d.bottom}px + ${i.style.padding} + 0.0rem)` : i.style.top = `calc(${d.top - h.height}px - ${i.style.padding} - ${p})`, i.style.opacity = "0", i.style.pointerEvents = "all", i.style.transition = "opacity 0.2s ease-in-out", setTimeout(() => {
9246
9248
  i.style.opacity = "1", window.addEventListener("click", r, { once: !0 });
9247
- }), window.addEventListener("resize", r), window.addEventListener("scroll", r), document.fullscreenElement ? document.fullscreenElement.appendChild(i) : document.body.appendChild(i);
9249
+ }), window.addEventListener("resize", r), window.addEventListener("scroll", r), document.fullscreenElement ? document.fullscreenElement.appendChild(i) : c.appendChild(i);
9248
9250
  }
9249
9251
  function r() {
9250
9252
  i.style.pointerEvents = "none", i.style.transition = "opacity 0.2s", i.style.opacity = "0", setTimeout(() => i.parentNode?.removeChild(i), 500), window.removeEventListener("click", r), window.removeEventListener("resize", r), window.removeEventListener("scroll", r);
@@ -9774,6 +9776,16 @@ class Xd extends HTMLElement {
9774
9776
  const e = document.createElement("template");
9775
9777
  e.innerHTML = `<style>
9776
9778
 
9779
+ /** Styling attributes that ensure the nested menu z-index does not cause it to overlay elements outside of <needle-engine> */
9780
+ :host {
9781
+ position: absolute;
9782
+ width: 100%;
9783
+ height: 100%;
9784
+ z-index: 0;
9785
+ top: 0;
9786
+ pointer-events: none;
9787
+ }
9788
+
9777
9789
  #root {
9778
9790
  position: absolute;
9779
9791
  width: auto;
@@ -10983,9 +10995,13 @@ Start a coroutine from a component by calling "this.startCoroutine(myCoroutine()
10983
10995
  get isVisibleToUser() {
10984
10996
  if (this.isInXR) return !0;
10985
10997
  if (!this._isVisible) return !1;
10998
+ if (!this._needsVisibleUpdate && this._lastStyleComputedResult !== void 0) return this._lastStyleComputedResult;
10999
+ this._needsVisibleUpdate = !1;
10986
11000
  const e = getComputedStyle(this.domElement);
10987
- return e.visibility !== "hidden" && e.display !== "none" && e.opacity !== "0";
11001
+ return this._lastStyleComputedResult = e.visibility !== "hidden" && e.display !== "none" && e.opacity !== "0", this._lastStyleComputedResult;
10988
11002
  }
11003
+ _needsVisibleUpdate = !0;
11004
+ _lastStyleComputedResult = void 0;
10989
11005
  _createId = 0;
10990
11006
  async internalOnCreate(e) {
10991
11007
  const t = ++this._createId;
@@ -11137,7 +11153,7 @@ Possible solutions:
11137
11153
  try {
11138
11154
  this.internalStep(e, t), this._renderlooperrors = 0;
11139
11155
  } catch (i) {
11140
- this._renderlooperrors += 1, (L() || Xe) && (i instanceof Error || i instanceof TypeError) && je("Caught unhandled exception during render-loop - see console for details.", Ni.Error), console.error("Frame #" + this.time.frame + `
11156
+ this._renderlooperrors += 1, (L() || Xe) && (i instanceof Error || i instanceof TypeError) && Be("Caught unhandled exception during render-loop - see console for details.", Ni.Error), console.error("Frame #" + this.time.frame + `
11141
11157
  `, i), this._renderlooperrors >= 3 && (console.warn("Stopping render loop due to error"), this.renderer.setAnimationLoop(null)), this.domElement.dispatchEvent(new CustomEvent("error", { detail: i }));
11142
11158
  }
11143
11159
  else
@@ -11158,7 +11174,7 @@ Possible solutions:
11158
11174
  this.internalOnBeforeRender(e, t) !== !1 && (this.internalOnRender(), this.internalOnAfterRender());
11159
11175
  }
11160
11176
  internalOnBeforeRender(e, t) {
11161
- this.renderer.info.autoReset = !!t, this.renderer.info.autoReset === !1 && this.renderer.info.reset();
11177
+ this.renderer.info.autoReset = !!t, this.renderer.info.autoReset === !1 && this.renderer.info.reset(), this._needsVisibleUpdate = !0;
11162
11178
  const i = t !== null && this._xrFrame === null;
11163
11179
  if (this._xrFrame = t, i && this.domElement.dispatchEvent(new CustomEvent("xr-session-started", { detail: { context: this, session: this.xrSession, frame: t } })), this._currentFrameEvent = -1, this.isManagedExternally === !1 && this.isInXR === !1 && this.targetFrameRate !== void 0) {
11164
11180
  this._lastTimestamp === 0 && (this._lastTimestamp = e), this._accumulatedTime += (e - this._lastTimestamp) / 1e3, this._lastTimestamp = e;
@@ -11190,28 +11206,26 @@ Possible solutions:
11190
11206
  const o = this.scripts_earlyUpdate[n];
11191
11207
  o.activeAndEnabled && o.earlyUpdate !== void 0 && (N.Current = this, o.earlyUpdate());
11192
11208
  }
11193
- if (this.executeCoroutines(
11209
+ this.executeCoroutines(
11194
11210
  0
11195
11211
  /* EarlyUpdate */
11196
11212
  ), yn(
11197
11213
  this,
11198
11214
  0
11199
11215
  /* EarlyUpdate */
11200
- ), this.onHandlePaused()) return !1;
11201
- this._currentFrameEvent = 1;
11216
+ ), this._currentFrameEvent = 1;
11202
11217
  for (let n = 0; n < this.scripts_update.length; n++) {
11203
11218
  const o = this.scripts_update[n];
11204
11219
  o.activeAndEnabled && o.update !== void 0 && (N.Current = this, o.update());
11205
11220
  }
11206
- if (this.executeCoroutines(
11221
+ this.executeCoroutines(
11207
11222
  1
11208
11223
  /* Update */
11209
11224
  ), yn(
11210
11225
  this,
11211
11226
  1
11212
11227
  /* Update */
11213
- ), this.onHandlePaused()) return !1;
11214
- this._currentFrameEvent = 2;
11228
+ ), this._currentFrameEvent = 2;
11215
11229
  for (let n = 0; n < this.scripts_lateUpdate.length; n++) {
11216
11230
  const o = this.scripts_lateUpdate[n];
11217
11231
  o.activeAndEnabled && o.lateUpdate !== void 0 && (N.Current = this, o.lateUpdate());
@@ -11223,8 +11237,7 @@ Possible solutions:
11223
11237
  this,
11224
11238
  2
11225
11239
  /* LateUpdate */
11226
- ), this.onHandlePaused() || (this.physicsSteps === void 0 && (this.physicsSteps = 1), this.physics.engine && this.physicsSteps > 0 && this.internalUpdatePhysics(this.physicsSteps), this.onHandlePaused())) return !1;
11227
- if (this.isVisibleToUser || this.runInBackground) {
11240
+ ), this.physicsSteps === void 0 && (this.physicsSteps = 1), this.physics.engine && this.physicsSteps > 0 && this.internalUpdatePhysics(this.physicsSteps), this.isVisibleToUser || this.runInBackground) {
11228
11241
  this._currentFrameEvent = 3;
11229
11242
  for (let n = 0; n < this.scripts_onBeforeRender.length; n++) {
11230
11243
  const o = this.scripts_onBeforeRender[n];
@@ -14255,7 +14268,7 @@ const Lt = function(s, e) {
14255
14268
  function UO(s, e, t, i, n) {
14256
14269
  if (!n && !i && !s.onValidate) return;
14257
14270
  if (t !== void 0) {
14258
- console.error("Invalid usage of validate decorator. Only fields can be validated.", s, e, t), je("Invalid usage of validate decorator. Only fields can be validated. Property: " + e, Ni.Error);
14271
+ console.error("Invalid usage of validate decorator. Only fields can be validated.", s, e, t), Be("Invalid usage of validate decorator. Only fields can be validated. Property: " + e, Ni.Error);
14259
14272
  return;
14260
14273
  }
14261
14274
  let o = "";
@@ -15481,10 +15494,10 @@ class ei extends T {
15481
15494
  this.context.scene.getComponent(Sa) || this.context.scene.addComponent(Gi);
15482
15495
  }
15483
15496
  onEnable() {
15484
- this.context.input.addEventListener(Le.PointerDown, this.onPointerEvent), this.context.input.addEventListener(Le.PointerUp, this.onPointerEvent), this.context.input.addEventListener(Le.PointerMove, this.onPointerEvent);
15497
+ this.context.input.addEventListener(De.PointerDown, this.onPointerEvent), this.context.input.addEventListener(De.PointerUp, this.onPointerEvent), this.context.input.addEventListener(De.PointerMove, this.onPointerEvent);
15485
15498
  }
15486
15499
  onDisable() {
15487
- this.context.input.removeEventListener(Le.PointerDown, this.onPointerEvent), this.context.input.removeEventListener(Le.PointerUp, this.onPointerEvent), this.context.input.removeEventListener(Le.PointerMove, this.onPointerEvent);
15500
+ this.context.input.removeEventListener(De.PointerDown, this.onPointerEvent), this.context.input.removeEventListener(De.PointerUp, this.onPointerEvent), this.context.input.removeEventListener(De.PointerMove, this.onPointerEvent);
15488
15501
  }
15489
15502
  /**
15490
15503
  * all pointers that have pressed something
@@ -15509,7 +15522,7 @@ class ei extends T {
15509
15522
  onPointerEvent = (e) => {
15510
15523
  if (e === void 0 || e.propagationStopped || e.defaultPrevented || e.used) return;
15511
15524
  const t = new Zd(this.context.input, e);
15512
- this._currentPointerEventName = e.type, t.inputSource = this.context.input, t.isClick = e.isClick, t.isDoubleClick = e.isDoubleClick, t.isDown = e.type == Le.PointerDown, t.isUp = e.type == Le.PointerUp, t.isPressed = this.context.input.getPointerPressed(e.pointerId);
15525
+ this._currentPointerEventName = e.type, t.inputSource = this.context.input, t.isClick = e.isClick, t.isDoubleClick = e.isDoubleClick, t.isDown = e.type == De.PointerDown, t.isUp = e.type == De.PointerUp, t.isPressed = this.context.input.getPointerPressed(e.pointerId);
15513
15526
  const i = new pr();
15514
15527
  e.hasRay ? i.ray = e.ray : i.screenPoint = this.context.input.getPointerPositionRC(e.pointerId), i.allowSlowRaycastFallback = e.isClick || e.isDoubleClick;
15515
15528
  const n = this.performRaycast(i);
@@ -15522,7 +15535,7 @@ class ei extends T {
15522
15535
  hits: n
15523
15536
  });
15524
15537
  }
15525
- Gs && t.isClick && je("EventSystem: " + t.pointerId + " - " + this.context.time.frame + " - Up:" + t.isUp + ", Down:" + t.isDown);
15538
+ Gs && t.isClick && Be("EventSystem: " + t.pointerId + " - " + this.context.time.frame + " - Up:" + t.isUp + ", Down:" + t.isDown);
15526
15539
  const o = {
15527
15540
  sender: this,
15528
15541
  args: t,
@@ -15741,7 +15754,7 @@ class ei extends T {
15741
15754
  }
15742
15755
  /** invoke the pointerMove event on all captured handlers */
15743
15756
  invokePointerCapture(e) {
15744
- if (e.event.type === Le.PointerMove) {
15757
+ if (e.event.type === De.PointerMove) {
15745
15758
  const t = e.pointerId, i = this._capturedPointer[t];
15746
15759
  if (i) {
15747
15760
  Gs && console.log("Captured", t, i);
@@ -16094,6 +16107,9 @@ class ge extends T {
16094
16107
  afterHandleInput(e) {
16095
16108
  e.detail.args.pointerId === 0 && (e.detail.args.isDown ? this._controls && this._eventSystem && (this._shouldDisable = this._eventSystem.hasActiveUI) : (!e.detail.args.isPressed || e.detail.args.isUp) && (this._shouldDisable = !1));
16096
16109
  }
16110
+ onPausedChanged(e) {
16111
+ this._controls && e && (this._controls.enabled = !1);
16112
+ }
16097
16113
  /** @internal */
16098
16114
  onBeforeRender() {
16099
16115
  if (!this._controls) return;
@@ -16712,7 +16728,7 @@ const qs = w("debugcam"), u_ = w("debugscreenpointtoray"), Dt = class Cl extends
16712
16728
  if (typeof t._transparent == "boolean")
16713
16729
  return t._transparent;
16714
16730
  const i = t.environmentBlendMode;
16715
- qs && je("Environment blend mode: " + i + " on " + navigator.userAgent);
16731
+ qs && Be("Environment blend mode: " + i + " on " + navigator.userAgent);
16716
16732
  let n = i === "additive" || i === "alpha-blend";
16717
16733
  return e.isInAR && i === "opaque" && (navigator.userAgent?.includes("OculusBrowser") || navigator.userAgent?.includes("Mozilla") && navigator.userAgent?.includes("Mobile WebXRViewer/v2")) && (n = !0), t._transparent = n, n;
16718
16734
  }
@@ -17162,29 +17178,29 @@ fn([
17162
17178
  ], Ki.prototype, "rollOffMode", 2);
17163
17179
  let hn = Ki;
17164
17180
  const uk = w("debugavatar");
17165
- class De extends T {
17181
+ class je extends T {
17166
17182
  static getAvatar(e) {
17167
- return e >= 0 && e < De.instances.length ? De.instances[e] : null;
17183
+ return e >= 0 && e < je.instances.length ? je.instances[e] : null;
17168
17184
  }
17169
17185
  static instances = [];
17170
17186
  static onAvatarMarkerCreated(e) {
17171
- return De._onNewAvatarMarkerAdded.push(e), e;
17187
+ return je._onNewAvatarMarkerAdded.push(e), e;
17172
17188
  }
17173
17189
  static onAvatarMarkerDestroyed(e) {
17174
- return De._onAvatarMarkerDestroyed.push(e), e;
17190
+ return je._onAvatarMarkerDestroyed.push(e), e;
17175
17191
  }
17176
17192
  static _onNewAvatarMarkerAdded = [];
17177
17193
  static _onAvatarMarkerDestroyed = [];
17178
17194
  connectionId;
17179
17195
  avatar;
17180
17196
  awake() {
17181
- De.instances.push(this), uk && console.log(this);
17182
- for (const e of De._onNewAvatarMarkerAdded)
17197
+ je.instances.push(this), uk && console.log(this);
17198
+ for (const e of je._onNewAvatarMarkerAdded)
17183
17199
  e({ avatarMarker: this, gameObject: this.gameObject });
17184
17200
  }
17185
17201
  onDestroy() {
17186
- De.instances.splice(De.instances.indexOf(this), 1);
17187
- for (const e of De._onAvatarMarkerDestroyed)
17202
+ je.instances.splice(je.instances.indexOf(this), 1);
17203
+ for (const e of je._onAvatarMarkerDestroyed)
17188
17204
  e({ avatarMarker: this, gameObject: this.gameObject });
17189
17205
  }
17190
17206
  isLocalAvatar() {
@@ -17234,8 +17250,8 @@ class ud extends T {
17234
17250
  _lookDuration = 0;
17235
17251
  _lastPoiChangedTime = 0;
17236
17252
  awake() {
17237
- if (this.avatar = x.getComponentInParent(this.gameObject, De), this.avatar) {
17238
- const e = x.getComponentInParent(this.gameObject, De);
17253
+ if (this.avatar = x.getComponentInParent(this.gameObject, je), this.avatar) {
17254
+ const e = x.getComponentInParent(this.gameObject, je);
17239
17255
  this._model = new o0(this.context.connection, this.guid), e?.isLocalAvatar && this._model.requestOwnership();
17240
17256
  }
17241
17257
  this.context.connection.beginListen("avatar-look-target-changed", (e) => {
@@ -17328,7 +17344,7 @@ class _k {
17328
17344
  this.object = e, this.collider = t;
17329
17345
  }
17330
17346
  }
17331
- const Ne = w("debugnetworkingstreams");
17347
+ const Le = w("debugnetworkingstreams");
17332
17348
  var ps = /* @__PURE__ */ ((s) => (s.Connected = "peer-user-connected", s.StreamReceived = "receive-stream", s.StreamEnded = "call-ended", s.Disconnected = "peer-user-disconnected", s.UserJoined = "user-joined", s))(ps || {});
17333
17349
  class X0 {
17334
17350
  type = "call-ended";
@@ -17382,7 +17398,7 @@ class xk extends dm {
17382
17398
  }
17383
17399
  constructor(e, t, i, n = null) {
17384
17400
  super(), this.peerId = t.peer, this.userId = e, this.call = t, this.direction = i, this._stream = n, t.on("stream", (o) => {
17385
- if (Ne && console.log("Receive stream", `
17401
+ if (Le && console.log("Receive stream", `
17386
17402
  Audio:`, o.getAudioTracks(), `
17387
17403
  Video:`, o.getVideoTracks()), this._stream = o, i === "incoming") {
17388
17404
  const r = new bk(e, o, this);
@@ -17416,7 +17432,7 @@ class to extends dm {
17416
17432
  }
17417
17433
  makeCall(e, t) {
17418
17434
  if (!t?.id) {
17419
- Ne ? console.warn("Can not make a call: mediastream has no id or is undefined") : console.debug("Can not make a call: mediastream has no id or is undefined");
17435
+ Le ? console.warn("Can not make a call: mediastream has no id or is undefined") : console.debug("Can not make a call: mediastream has no id or is undefined");
17420
17436
  return;
17421
17437
  }
17422
17438
  const i = {
@@ -17428,10 +17444,10 @@ class to extends dm {
17428
17444
  }, n = this._peer?.call(e, t, i);
17429
17445
  if (n) {
17430
17446
  const o = this.registerCall(n, "outgoing", t);
17431
- return Ne && console.warn(`📞 CALL ${e}`, `
17447
+ return Le && console.warn(`📞 CALL ${e}`, `
17432
17448
  Outgoing:`, this._outgoingCalls, `
17433
17449
  Incoming:`, this._incomingCalls), o;
17434
- } else Ne && console.error("Failed to make call", e, t, this._peer);
17450
+ } else Le && console.error("Failed to make call", e, t, this._peer);
17435
17451
  }
17436
17452
  closeAll() {
17437
17453
  for (const e of this._incomingCalls)
@@ -17448,7 +17464,7 @@ Incoming:`, this._incomingCalls), o;
17448
17464
  for (let e = this._outgoingCalls.length - 1; e >= 0; e--) {
17449
17465
  const t = this._outgoingCalls[e];
17450
17466
  let i = !1;
17451
- t.isClosed && !t.isOpening && (t.stream?.active ? Ne && console.warn("!!! Stream is still active, don't remove call", t.userId, "Your id: " + this.context.connection.connectionId) : (Ne && console.warn("!!! Remove closed call", t.userId), i = !0)), this.context.connection.userIsInRoom(t.userId) === !1 && (Ne && console.warn("!!! User is not in room anymore, remove call", t.userId), i = !0), i && (t.close(), this._outgoingCalls.splice(e, 1));
17467
+ t.isClosed && !t.isOpening && (t.stream?.active ? Le && console.warn("!!! Stream is still active, don't remove call", t.userId, "Your id: " + this.context.connection.connectionId) : (Le && console.warn("!!! Remove closed call", t.userId), i = !0)), this.context.connection.userIsInRoom(t.userId) === !1 && (Le && console.warn("!!! User is not in room anymore, remove call", t.userId), i = !0), i && (t.close(), this._outgoingCalls.splice(e, 1));
17452
17468
  }
17453
17469
  };
17454
17470
  get peer() {
@@ -17463,7 +17479,13 @@ Incoming:`, this._incomingCalls), o;
17463
17479
  _outgoingCalls = [];
17464
17480
  _peer;
17465
17481
  constructor(e, t) {
17466
- super(), this.context = e, this.id = t, this.setupPeer(), navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
17482
+ super(), this.context = e, this.id = t, this.setupPeer();
17483
+ const i = Object.getOwnPropertyDescriptor(navigator, "getUserMedia")?.writable;
17484
+ try {
17485
+ i ? navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia : Le && console.warn("[PeerJs] getUserMedia is not writable");
17486
+ } catch (n) {
17487
+ Le && console.error("[PeerJs] Error setting getUserMedia", n);
17488
+ }
17467
17489
  }
17468
17490
  _enabled = !1;
17469
17491
  _enabledPeer = !1;
@@ -17503,7 +17525,7 @@ Incoming:`, this._incomingCalls), o;
17503
17525
  * @param id ID of the peer
17504
17526
  */
17505
17527
  onPeerConnect = (e) => {
17506
- if (Ne && console.log("PEER opened as", e), e === null) {
17528
+ if (Le && console.log("PEER opened as", e), e === null) {
17507
17529
  console.error("Peer connection failed", e);
17508
17530
  return;
17509
17531
  }
@@ -17511,17 +17533,17 @@ Incoming:`, this._incomingCalls), o;
17511
17533
  };
17512
17534
  /** Emitted when the peer is destroyed and can no longer accept or create any new connections. At this time, the peer's connections will all be closed. */
17513
17535
  onPeerClose = () => {
17514
- Ne && console.log("PEER closed"), this.updateCalls();
17536
+ Le && console.log("PEER closed"), this.updateCalls();
17515
17537
  };
17516
17538
  /** Emitted when the peer is disconnected from the signalling server, either manually or because the connection to the signalling server was lost. */
17517
17539
  onPeerDisconnected = () => {
17518
- Ne && console.log("PEER disconnected"), this.updateCalls();
17540
+ Le && console.log("PEER disconnected"), this.updateCalls();
17519
17541
  };
17520
17542
  /**
17521
17543
  * Errors on the peer are almost always fatal and will destroy the peer. Errors from the underlying socket and PeerConnections are forwarded here.
17522
17544
  */
17523
17545
  onPeerError = (e) => {
17524
- Ne && console.error("PEER error", e);
17546
+ Le && console.error("PEER error", e);
17525
17547
  };
17526
17548
  onPeerReceivingCall = (e) => {
17527
17549
  e.answer(void 0, {
@@ -17532,12 +17554,12 @@ Incoming:`, this._incomingCalls), o;
17532
17554
  const n = e.metadata;
17533
17555
  (!n || !n.userId) && console.error("Missing call metadata", e);
17534
17556
  const o = n.userId;
17535
- t === "incoming" && Ne ? console.warn("← Receive call from", e.metadata, e.connectionId) : Ne && console.warn("→ Make call to", e.metadata);
17557
+ t === "incoming" && Le ? console.warn("← Receive call from", e.metadata, e.connectionId) : Le && console.warn("→ Make call to", e.metadata);
17536
17558
  const r = t === "incoming" ? this._incomingCalls : this._outgoingCalls, a = new xk(o, e, t, i);
17537
17559
  return r.push(a), e.on("error", (l) => {
17538
17560
  console.error("Call error", l);
17539
17561
  }), e.on("close", () => {
17540
- Ne && console.log("Call ended", e.metadata);
17562
+ Le && console.log("Call ended", e.metadata);
17541
17563
  const l = r.indexOf(a);
17542
17564
  l !== -1 && r.splice(l, 1), a.close(), this.dispatchEvent(new X0(o, t));
17543
17565
  }), a.addEventListener("call-ended", (l) => {
@@ -17545,11 +17567,11 @@ Incoming:`, this._incomingCalls), o;
17545
17567
  }), t === "incoming" && (a.addEventListener("receive-stream", (l) => {
17546
17568
  this.dispatchEvent(l);
17547
17569
  }), e.on("stream", () => {
17548
- Ne && console.log("Received stream for call", e.metadata);
17570
+ Le && console.log("Received stream for call", e.metadata);
17549
17571
  let l = 0;
17550
17572
  const c = setInterval(() => {
17551
17573
  const h = l === 0;
17552
- !a.isOpen && h && (Ne && console.warn("Close call because stream is not active", e.metadata), l += 1, clearInterval(c), a.close());
17574
+ !a.isOpen && h && (Le && console.warn("Close call because stream is not active", e.metadata), l += 1, clearInterval(c), a.close());
17553
17575
  }, 2e3);
17554
17576
  })), a;
17555
17577
  }
@@ -17582,7 +17604,7 @@ class Jd extends dm {
17582
17604
  if (!(e instanceof N)) throw new Error("Failed to create NetworkedStreams because context is not an instance of Context");
17583
17605
  } else throw new Error("Failed to create NetworkedStreams because context is undefined");
17584
17606
  if (!t) throw new Error("Failed to create NetworkedStreams because peer is undefined");
17585
- this.context = e, this.peer = t, Ne && (this.debug = !0);
17607
+ this.context = e, this.peer = t, Le && (this.debug = !0);
17586
17608
  }
17587
17609
  startSendingStream(e) {
17588
17610
  this._sendingStreams.has(e) ? console.warn("Received start sending stream with stream that is already being sent") : (this._sendingStreams.set(e, []), this.updateSendingCalls());
@@ -17644,7 +17666,7 @@ class Jd extends dm {
17644
17666
  const t = this._sendingStreams.keys().next().value;
17645
17667
  this.peer.makeCall(e.peerId, t);
17646
17668
  } else
17647
- Ne && console.log("Unknown user connected", e.guid, e.peerId);
17669
+ Le && console.log("Unknown user connected", e.guid, e.peerId);
17648
17670
  };
17649
17671
  onUserLeft = (e) => {
17650
17672
  this.debug && console.log("User left room: " + e.userId), this.stopCallsToUsersThatAreNotInTheRoomAnymore();
@@ -17657,7 +17679,7 @@ class Jd extends dm {
17657
17679
  if (n === e) continue;
17658
17680
  const o = this.peer.getPeerIdFromUserId(n);
17659
17681
  if (i.find((a) => a.peerId === o && a.direction === "outgoing" && !a.isClosed && a.stream?.active))
17660
- Ne && console.debug("Already have a call with user " + n + " / peer " + o);
17682
+ Le && console.debug("Already have a call with user " + n + " / peer " + o);
17661
17683
  else {
17662
17684
  const a = this.peer.makeCall(o, t);
17663
17685
  a && i.push(a);
@@ -17688,7 +17710,7 @@ class Jd extends dm {
17688
17710
  if (t)
17689
17711
  for (let i = t.length - 1; i >= 0; i--) {
17690
17712
  const n = t[i];
17691
- this.context.connection.userIsInRoom(n.userId) ? Ne && (this.context.connection.connectionId === n.userId ? console.warn(`You are still in the room [${i}] ${n.userId}`) : console.log(`User is still in room [${i}] ${n.userId}`)) : (Ne && console.log(`Remove call ${[i]} to user that is not in room anymore ${n.userId}`), n.close(), t.splice(i, 1));
17713
+ this.context.connection.userIsInRoom(n.userId) ? Le && (this.context.connection.connectionId === n.userId ? console.warn(`You are still in the room [${i}] ${n.userId}`) : console.log(`User is still in room [${i}] ${n.userId}`)) : (Le && console.log(`Remove call ${[i]} to user that is not in room anymore ${n.userId}`), n.close(), t.splice(i, 1));
17692
17714
  }
17693
17715
  }
17694
17716
  this.peer.updateCalls(), this.debug && this.debugLogCurrentState();
@@ -17886,7 +17908,7 @@ class eu extends T {
17886
17908
  mouthChangeLength = 0;
17887
17909
  awake() {
17888
17910
  setTimeout(() => {
17889
- this.voip = x.findObjectOfType(yr, this.context), this.marker || (this.marker = x.getComponentInParent(this.gameObject, De));
17911
+ this.voip = x.findObjectOfType(yr, this.context), this.marker || (this.marker = x.getComponentInParent(this.gameObject, je));
17890
17912
  }, 3e3);
17891
17913
  }
17892
17914
  update() {
@@ -17944,7 +17966,7 @@ class Y0 extends T {
17944
17966
  marker = null;
17945
17967
  _startPosition = null;
17946
17968
  awake() {
17947
- this.voip = x.findObjectOfType(yr, this.context), this.marker = x.getComponentInParent(this.gameObject, De);
17969
+ this.voip = x.findObjectOfType(yr, this.context), this.marker = x.getComponentInParent(this.gameObject, je);
17948
17970
  }
17949
17971
  update() {
17950
17972
  if (!this.voip || !this.marker || this.context.time.frameCount % 10 !== 0) return;
@@ -23950,7 +23972,7 @@ class Go {
23950
23972
  return this._start === void 0 && (this._start = this.ext.getStartTimeByClip(this.clip)), this._start;
23951
23973
  }
23952
23974
  get duration() {
23953
- return this.clip?.duration ?? ze.restPoseClipDuration;
23975
+ return this.clip?.duration ?? Ue.restPoseClipDuration;
23954
23976
  }
23955
23977
  get nearestAnimatedRoot() {
23956
23978
  return this._nearestAnimatedRoot;
@@ -24002,7 +24024,7 @@ class Go {
24002
24024
  return e;
24003
24025
  }
24004
24026
  }
24005
- class ze {
24027
+ class Ue {
24006
24028
  clip;
24007
24029
  pos;
24008
24030
  rot;
@@ -24018,7 +24040,7 @@ class ze {
24018
24040
  static animationDurationPadding = 6 / 60;
24019
24041
  static restPoseClipDuration = 6 / 60;
24020
24042
  constructor(e, t, i) {
24021
- if (this.root = e, this.target = t, this.clip = i, i ? this.duration = i.duration : this.duration = ze.restPoseClipDuration, i && i.tracks) {
24043
+ if (this.root = e, this.target = t, this.clip = i, i ? this.duration = i.duration : this.duration = Ue.restPoseClipDuration, i && i.tracks) {
24022
24044
  const o = Math.max(...i.tracks.map((r) => r.times[r.times.length - 1]));
24023
24045
  o !== this.duration && (console.warn("USDZExporter: Animation clip duration does not match the maximum time value in the tracks.", i, o, this.duration), this.duration = o);
24024
24046
  }
@@ -24061,7 +24083,7 @@ class ze {
24061
24083
  const f = 0;
24062
24084
  for (let p = 0 - f; p < e.length + f; p++) {
24063
24085
  let g = 0, _ = 0;
24064
- if (p < 0 ? (g = e[0], _ = g - ze.animationDurationPadding / 2 + 1 / 60) : p >= e.length ? (g = e[e.length - 1], _ = g + ze.animationDurationPadding / 2 - 1 / 60) : (g = e[p], _ = g), c) {
24086
+ if (p < 0 ? (g = e[0], _ = g - Ue.animationDurationPadding / 2 + 1 / 60) : p >= e.length ? (g = e[e.length - 1], _ = g + Ue.animationDurationPadding / 2 - 1 / 60) : (g = e[p], _ = g), c) {
24065
24087
  const m = c.evaluate(g);
24066
24088
  o.set(m[0], m[1], m[2]);
24067
24089
  }
@@ -24121,7 +24143,7 @@ class ag {
24121
24143
  this.injectRestPoses = e, this.injectImplicitBehaviours = e;
24122
24144
  }
24123
24145
  getStartTimeCode() {
24124
- return !this.injectRestPoses || this.rootAndClipToRegisteredAnimationMap.size === 0 ? 0 : (ze.restPoseClipDuration + ze.animationDurationPadding) * 60;
24146
+ return !this.injectRestPoses || this.rootAndClipToRegisteredAnimationMap.size === 0 ? 0 : (Ue.restPoseClipDuration + Ue.animationDurationPadding) * 60;
24125
24147
  }
24126
24148
  /** Returns the end time code, based on 60 frames per second, for all registered animations.
24127
24149
  * This matches the highest time value in the USDZ file. */
@@ -24209,9 +24231,9 @@ class ag {
24209
24231
  console.warn("no transform data found for target ", d, "at slot " + o + ", this is likely a bug");
24210
24232
  continue;
24211
24233
  }
24212
- a.delete(d), this.injectRestPoses && !f[0] && (console.log("Injecting rest pose", d, t, "at slot", o), f[0] = new ze(null, d, null));
24234
+ a.delete(d), this.injectRestPoses && !f[0] && (console.log("Injecting rest pose", d, t, "at slot", o), f[0] = new Ue(null, d, null));
24213
24235
  let p = f[o];
24214
- p || (p = new ze(e, d, t), f[o] = p), p.addTrack(c), r?.includes(d) || r?.push(d);
24236
+ p || (p = new Ue(e, d, t), f[o] = p), p.addTrack(c), r?.includes(d) || r?.push(d);
24215
24237
  }
24216
24238
  Pn && console.log("Unregistered nodes for this clip", a, "clip", t, "at slot", o, "for root", e, "targets", r);
24217
24239
  for (const c of a) {
@@ -24219,18 +24241,18 @@ class ag {
24219
24241
  if (!h) continue;
24220
24242
  if (this.injectRestPoses && !h[0]) {
24221
24243
  console.warn("Adding rest pose for ", c, t, "at slot", o, "This is likely a bug, should have been added earlier.");
24222
- const f = new ze(null, c, null);
24244
+ const f = new Ue(null, c, null);
24223
24245
  h[0] = f;
24224
24246
  }
24225
24247
  let d = h[o];
24226
- d || (Pn && console.log("Adding padding clip for ", c, t, "at slot", o), d = new ze(e, c, t), h[o] = d);
24248
+ d || (Pn && console.log("Adding padding clip for ", c, t, "at slot", o), d = new Ue(e, c, t), h[o] = d);
24227
24249
  }
24228
24250
  const l = new Go(this, e, t);
24229
24251
  if (this.rootAndClipToRegisteredAnimationMap.set(i, l), Pn && console.log({ root: e, clip: t, info: l }), t) {
24230
24252
  const c = this.rootToRegisteredClip.get(e);
24231
24253
  if (c ? c.push(t) : this.rootToRegisteredClip.set(e, [t]), !this.clipToStartTime.get(t)) {
24232
- this.lastClipEndTime == null && (this.lastClipEndTime = ze.restPoseClipDuration);
24233
- let d = this.lastClipEndTime + ze.animationDurationPadding, f = d + t.duration;
24254
+ this.lastClipEndTime == null && (this.lastClipEndTime = Ue.restPoseClipDuration);
24255
+ let d = this.lastClipEndTime + Ue.animationDurationPadding, f = d + t.duration;
24234
24256
  const p = Math.round(d * 60) / 60, g = Math.round(f * 60) / 60;
24235
24257
  Math.abs(p - d) < 0.01 && (d = p), Math.abs(g - f) < 0.01 && (f = g), d = Math.ceil(d), f = d + t.duration, this.clipToStartTime.set(t, d), this.lastClipEndTime = f;
24236
24258
  }
@@ -24258,7 +24280,7 @@ class ag {
24258
24280
  let c = a[l];
24259
24281
  if (!c) {
24260
24282
  const d = l - (this.injectRestPoses ? 1 : 0);
24261
- a[l] = new ze(null, r, this.rootToRegisteredClip.get(t)[d]), c = a[l];
24283
+ a[l] = new Ue(null, r, this.rootToRegisteredClip.get(t)[d]), c = a[l];
24262
24284
  }
24263
24285
  const h = c.getDuration();
24264
24286
  if (o[l] === void 0) o[l] = h;
@@ -24344,7 +24366,7 @@ class KM {
24344
24366
  for (const Je of W) {
24345
24367
  const Ri = A.get(Je);
24346
24368
  let Vc;
24347
- Ri ? console.assert(Ri.length === Se, "We should have the same number of TransformData entries for each bone", Ri, U) : Vc = new ze(null, Je, null);
24369
+ Ri ? console.assert(Ri.length === Se, "We should have the same number of TransformData entries for each bone", Ri, U) : Vc = new Ue(null, Je, null);
24348
24370
  for (let js = 0; js < Se; js++) {
24349
24371
  const Uu = Ri ? Ri[js] : Vc, Or = U[js];
24350
24372
  for (const { time: Ya, translation: Ka } of Uu.getValues(Or.pos, !0, !1, !1)) {
@@ -24464,7 +24486,7 @@ class KM {
24464
24486
  const i = this.animationData.get(this.object);
24465
24487
  if (i)
24466
24488
  for (let h = 0; h < i.length; h++)
24467
- i[h] === void 0 && (i[h] = new ze(null, this.object, null));
24489
+ i[h] === void 0 && (i[h] = new Ue(null, this.object, null));
24468
24490
  const n = this.ext;
24469
24491
  this.skinnedMeshExport(e, t, n);
24470
24492
  const o = this.object, r = this.model, a = this.animationData.get(o);
@@ -24503,21 +24525,21 @@ class KM {
24503
24525
  const v = !g.clip, y = d === "position" && (g.pos || v), S = d === "rotation" && (g.rot || v), I = d === "scale" && (g.scale || v);
24504
24526
  if (y || S || I) {
24505
24527
  const O = g.clip?.name ?? "rest", k = g.getDuration();
24506
- Pn && console.log("Write .timeSamples:", O, _, k, h), e.appendLine("# " + O + ": start=" + l.format(_ * ze.frameRate) + ", length=" + l.format(k * ze.frameRate) + ", frames=" + g.getFrames());
24528
+ Pn && console.log("Write .timeSamples:", O, _, k, h), e.appendLine("# " + O + ": start=" + l.format(_ * Ue.frameRate) + ", length=" + l.format(k * Ue.frameRate) + ", frames=" + g.getFrames());
24507
24529
  }
24508
24530
  if (y)
24509
24531
  for (const { time: O, translation: k } of g.getValues(m, !0, !1, !1)) {
24510
- const z = `${l.format((_ + O) * ze.frameRate)}: (${ae(k.x)}, ${ae(k.y)}, ${ae(k.z)}),`;
24532
+ const z = `${l.format((_ + O) * Ue.frameRate)}: (${ae(k.x)}, ${ae(k.y)}, ${ae(k.z)}),`;
24511
24533
  e.appendLine(z);
24512
24534
  }
24513
24535
  if (S)
24514
24536
  for (const { time: O, rotation: k } of g.getValues(m, !1, !0, !1)) {
24515
- const z = `${l.format((_ + O) * ze.frameRate)}: (${ae(k.w)}, ${ae(k.x)}, ${ae(k.y)}, ${ae(k.z)}),`;
24537
+ const z = `${l.format((_ + O) * Ue.frameRate)}: (${ae(k.w)}, ${ae(k.x)}, ${ae(k.y)}, ${ae(k.z)}),`;
24516
24538
  e.appendLine(z);
24517
24539
  }
24518
24540
  if (I)
24519
24541
  for (const { time: O, scale: k } of g.getValues(m, !1, !1, !0)) {
24520
- const z = `${l.format((_ + O) * ze.frameRate)}: (${ae(k.x)}, ${ae(k.y)}, ${ae(k.z)}),`;
24542
+ const z = `${l.format((_ + O) * Ue.frameRate)}: (${ae(k.x)}, ${ae(k.y)}, ${ae(k.z)}),`;
24521
24543
  e.appendLine(z);
24522
24544
  }
24523
24545
  }
@@ -24567,7 +24589,7 @@ class La {
24567
24589
  }
24568
24590
  }
24569
24591
  }
24570
- var JM = Object.defineProperty, Be = (s, e, t, i) => {
24592
+ var JM = Object.defineProperty, Fe = (s, e, t, i) => {
24571
24593
  for (var n = void 0, o = s.length - 1, r; o >= 0; o--)
24572
24594
  (r = s[o]) && (n = r(e, t, n) || n);
24573
24595
  return n && JM(e, t, n), n;
@@ -24623,16 +24645,16 @@ class Da extends T {
24623
24645
  }
24624
24646
  }
24625
24647
  }
24626
- Be([
24648
+ Fe([
24627
24649
  u(M)
24628
24650
  ], Da.prototype, "object");
24629
- Be([
24651
+ Fe([
24630
24652
  u(M)
24631
24653
  ], Da.prototype, "target");
24632
- Be([
24654
+ Fe([
24633
24655
  u()
24634
24656
  ], Da.prototype, "duration");
24635
- Be([
24657
+ Fe([
24636
24658
  u()
24637
24659
  ], Da.prototype, "relativeMotion");
24638
24660
  const lu = class Ut extends T {
@@ -24727,13 +24749,13 @@ const lu = class Ut extends T {
24727
24749
  return e;
24728
24750
  }
24729
24751
  };
24730
- Be([
24752
+ Fe([
24731
24753
  u(_e)
24732
24754
  ], lu.prototype, "materialToSwitch");
24733
- Be([
24755
+ Fe([
24734
24756
  u(_e)
24735
24757
  ], lu.prototype, "variantMaterial");
24736
- Be([
24758
+ Fe([
24737
24759
  u()
24738
24760
  ], lu.prototype, "fadeDuration");
24739
24761
  let Iv = lu;
@@ -24816,16 +24838,16 @@ const Sc = class Ae extends T {
24816
24838
  this.gameObject[Ae.wasVisible] !== void 0 && (this.gameObject.visible = this.gameObject[Ae.wasVisible], delete this.gameObject[Ae.wasVisible]), this.target && this.target[Ae.wasVisible] !== void 0 && (this.target.visible = this.target[Ae.wasVisible], delete this.target[Ae.wasVisible]), delete this.gameObject[Ae.toggleClone], delete this.gameObject[Ae.reverseToggleClone];
24817
24839
  }
24818
24840
  };
24819
- Be([
24841
+ Fe([
24820
24842
  u(M)
24821
24843
  ], Sc.prototype, "target");
24822
- Be([
24844
+ Fe([
24823
24845
  u()
24824
24846
  ], Sc.prototype, "toggleOnClick");
24825
- Be([
24847
+ Fe([
24826
24848
  u()
24827
24849
  ], Sc.prototype, "targetState");
24828
- Be([
24850
+ Fe([
24829
24851
  u()
24830
24852
  ], Sc.prototype, "hideSelf");
24831
24853
  let Lv = Sc;
@@ -24873,13 +24895,13 @@ class Cc extends T {
24873
24895
  afterCreateDocument(e, t) {
24874
24896
  }
24875
24897
  }
24876
- Be([
24898
+ Fe([
24877
24899
  u()
24878
24900
  ], Cc.prototype, "target");
24879
- Be([
24901
+ Fe([
24880
24902
  u()
24881
24903
  ], Cc.prototype, "duration");
24882
- Be([
24904
+ Fe([
24883
24905
  u()
24884
24906
  ], Cc.prototype, "motionType");
24885
24907
  class or extends T {
@@ -24938,13 +24960,13 @@ class or extends T {
24938
24960
  }
24939
24961
  }
24940
24962
  }
24941
- Be([
24963
+ Fe([
24942
24964
  u(hn)
24943
24965
  ], or.prototype, "target");
24944
- Be([
24966
+ Fe([
24945
24967
  u(URL)
24946
24968
  ], or.prototype, "clip");
24947
- Be([
24969
+ Fe([
24948
24970
  u()
24949
24971
  ], or.prototype, "toggleOnClick");
24950
24972
  const lg = class bn extends T {
@@ -25146,10 +25168,10 @@ const lg = class bn extends T {
25146
25168
  n && (this.animationSequence = n.animationSequence, this.animationLoopAfterSequence = n.animationLoopAfterSequence, this.randomOffsetNormalized = n.randomTimeOffset, this.stateAnimationModel = t);
25147
25169
  }
25148
25170
  };
25149
- Be([
25171
+ Fe([
25150
25172
  u(It)
25151
25173
  ], lg.prototype, "animator");
25152
- Be([
25174
+ Fe([
25153
25175
  u()
25154
25176
  ], lg.prototype, "stateName");
25155
25177
  let gd = lg;
@@ -25160,13 +25182,13 @@ class Pc extends T {
25160
25182
  getDuration() {
25161
25183
  }
25162
25184
  }
25163
- Be([
25185
+ Fe([
25164
25186
  u(M)
25165
25187
  ], Pc.prototype, "target");
25166
25188
  class cu extends T {
25167
25189
  target;
25168
25190
  }
25169
- Be([
25191
+ Fe([
25170
25192
  u(Pc)
25171
25193
  ], cu.prototype, "target");
25172
25194
  class hu extends Pc {
@@ -25184,10 +25206,10 @@ class hu extends Pc {
25184
25206
  return this.duration;
25185
25207
  }
25186
25208
  }
25187
- Be([
25209
+ Fe([
25188
25210
  u()
25189
25211
  ], hu.prototype, "type");
25190
- Be([
25212
+ Fe([
25191
25213
  u()
25192
25214
  ], hu.prototype, "duration");
25193
25215
  class Dv extends cu {
@@ -25274,7 +25296,7 @@ class tr {
25274
25296
  const e = "https://oculus.com/open_url/?url=", t = document.createElement("button");
25275
25297
  return this._sendToQuestButton = t, t.dataset.needle = "webxr-sendtoquest-button", t.innerText = "Open on Quest", t.prepend(Rt("share_windows")), t.title = "Click to send this page to the Oculus Browser on your Quest", t.addEventListener("click", () => {
25276
25298
  const i = encodeURIComponent(window.location.href), n = e + i;
25277
- window.open(n) == null && je("This page doesn't allow popups. Please paste " + n + " into your browser.");
25299
+ window.open(n) == null && Be("This page doesn't allow popups. Please paste " + n + " into your browser.");
25278
25300
  }), this.listenToXRSessionState(t), this.hideElementDuringXRSession(t), q.isMozillaXR() || navigator.xr?.addEventListener("devicechange", () => {
25279
25301
  navigator.xr?.isSessionSupported("immersive-vr") ? t.style.display = "none" : t.style.display = "";
25280
25302
  }), t;
@@ -26391,12 +26413,12 @@ class ar extends T {
26391
26413
  rl && console.warn("AVATAR ENTER XR", this.guid, this.sourceId, this, this.activeAndEnabled), this._syncTransforms && (this._syncTransforms.length = 0), await this.prepareAvatar();
26392
26414
  const t = En.getFor(this);
26393
26415
  if (t?.owner) {
26394
- const i = this.gameObject.addComponent(De);
26416
+ const i = this.gameObject.addComponent(je);
26395
26417
  i.avatar = this.gameObject, i.connectionId = t.owner;
26396
26418
  } else this.context.connection.isConnected ? console.error("No player state found for avatar", this) : t && !this.context.connection.isConnected && (t.dontDestroy = !0);
26397
26419
  }
26398
26420
  onLeaveXR(e) {
26399
- const t = this.gameObject.getComponent(De);
26421
+ const t = this.gameObject.getComponent(je);
26400
26422
  t && t.destroy();
26401
26423
  }
26402
26424
  onUpdateXR(e) {
@@ -29018,11 +29040,11 @@ const si = class Wp extends T {
29018
29040
  /** @internal */
29019
29041
  onEnable() {
29020
29042
  const e = q.supportsQuickLookAR(), t = q.isiOS() || q.isiPad();
29021
- !this.button && (oi || e || t) && (this.allowCreateQuicklookButton && (this.button = this.createQuicklookButton()), this.lastCallback = this.quicklookCallback.bind(this), this.link = j_(this.context, e), this.link.addEventListener("message", this.lastCallback)), oi && je("USDZ Exporter enabled: " + this.name), document.getElementById("open-in-ar")?.addEventListener("click", this.onClickedOpenInARElement), ic.registerExporter(this);
29043
+ !this.button && (oi || e || t) && (this.allowCreateQuicklookButton && (this.button = this.createQuicklookButton()), this.lastCallback = this.quicklookCallback.bind(this), this.link = j_(this.context, e), this.link.addEventListener("message", this.lastCallback)), oi && Be("USDZ Exporter enabled: " + this.name), document.getElementById("open-in-ar")?.addEventListener("click", this.onClickedOpenInARElement), ic.registerExporter(this);
29022
29044
  }
29023
29045
  /** @internal */
29024
29046
  onDisable() {
29025
- this.button?.remove(), this.link?.removeEventListener("message", this.lastCallback), oi && je("USDZ Exporter disabled: " + this.name), document.getElementById("open-in-ar")?.removeEventListener("click", this.onClickedOpenInARElement), ic.unregisterExporter(this);
29047
+ this.button?.remove(), this.link?.removeEventListener("message", this.lastCallback), oi && Be("USDZ Exporter disabled: " + this.name), document.getElementById("open-in-ar")?.removeEventListener("click", this.onClickedOpenInARElement), ic.unregisterExporter(this);
29026
29048
  }
29027
29049
  onClickedOpenInARElement = (e) => {
29028
29050
  e.preventDefault(), this.exportAndOpen();
@@ -29094,7 +29116,7 @@ const si = class Wp extends T {
29094
29116
  }));
29095
29117
  }
29096
29118
  }
29097
- oi && je("Progressive Loading: " + n.length), await Promise.all(n), oi && je("Progressive Loading: done"), le.end("export-usdz-textures");
29119
+ oi && Be("Progressive Loading: " + n.length), await Promise.all(n), oi && Be("Progressive Loading: done"), le.end("export-usdz-textures");
29098
29120
  const r = Jt.Global.Mask;
29099
29121
  Jt.Global.Set(us.AR);
29100
29122
  const a = new jM(), l = new ag(this.quickLookCompatible);
@@ -29177,7 +29199,7 @@ const si = class Wp extends T {
29177
29199
  const i = new URLSearchParams(this.link.href);
29178
29200
  if (i) {
29179
29201
  const n = i.get("callToActionURL");
29180
- oi && je("Quicklook url: " + n), n && (bs() ? globalThis.open(n, "_blank") : console.warn("Quicklook closed: custom redirects require a Needle Engine Pro license: https://needle.tools/pricing", n));
29202
+ oi && Be("Quicklook url: " + n), n && (bs() ? globalThis.open(n, "_blank") : console.warn("Quicklook closed: custom redirects require a Needle Engine Pro license: https://needle.tools/pricing", n));
29181
29203
  }
29182
29204
  }
29183
29205
  }
@@ -30878,7 +30900,7 @@ C([
30878
30900
  C([
30879
30901
  u()
30880
30902
  ], ve.prototype, "strengthZMultiplier");
30881
- class Ue {
30903
+ class Ne {
30882
30904
  enabled;
30883
30905
  attachRibbonToTransform = !1;
30884
30906
  colorOverLifetime;
@@ -30910,64 +30932,64 @@ class Ue {
30910
30932
  }
30911
30933
  C([
30912
30934
  u()
30913
- ], Ue.prototype, "enabled");
30935
+ ], Ne.prototype, "enabled");
30914
30936
  C([
30915
30937
  u()
30916
- ], Ue.prototype, "attachRibbonToTransform");
30938
+ ], Ne.prototype, "attachRibbonToTransform");
30917
30939
  C([
30918
30940
  u(Wa)
30919
- ], Ue.prototype, "colorOverLifetime");
30941
+ ], Ne.prototype, "colorOverLifetime");
30920
30942
  C([
30921
30943
  u(Wa)
30922
- ], Ue.prototype, "colorOverTrail");
30944
+ ], Ne.prototype, "colorOverTrail");
30923
30945
  C([
30924
30946
  u()
30925
- ], Ue.prototype, "dieWithParticles");
30947
+ ], Ne.prototype, "dieWithParticles");
30926
30948
  C([
30927
30949
  u()
30928
- ], Ue.prototype, "inheritParticleColor");
30950
+ ], Ne.prototype, "inheritParticleColor");
30929
30951
  C([
30930
30952
  u(Y)
30931
- ], Ue.prototype, "lifetime");
30953
+ ], Ne.prototype, "lifetime");
30932
30954
  C([
30933
30955
  u()
30934
- ], Ue.prototype, "lifetimeMultiplier");
30956
+ ], Ne.prototype, "lifetimeMultiplier");
30935
30957
  C([
30936
30958
  u()
30937
- ], Ue.prototype, "minVertexDistance");
30959
+ ], Ne.prototype, "minVertexDistance");
30938
30960
  C([
30939
30961
  u()
30940
- ], Ue.prototype, "mode");
30962
+ ], Ne.prototype, "mode");
30941
30963
  C([
30942
30964
  u()
30943
- ], Ue.prototype, "ratio");
30965
+ ], Ne.prototype, "ratio");
30944
30966
  C([
30945
30967
  u()
30946
- ], Ue.prototype, "ribbonCount");
30968
+ ], Ne.prototype, "ribbonCount");
30947
30969
  C([
30948
30970
  u()
30949
- ], Ue.prototype, "shadowBias");
30971
+ ], Ne.prototype, "shadowBias");
30950
30972
  C([
30951
30973
  u()
30952
- ], Ue.prototype, "sizeAffectsLifetime");
30974
+ ], Ne.prototype, "sizeAffectsLifetime");
30953
30975
  C([
30954
30976
  u()
30955
- ], Ue.prototype, "sizeAffectsWidth");
30977
+ ], Ne.prototype, "sizeAffectsWidth");
30956
30978
  C([
30957
30979
  u()
30958
- ], Ue.prototype, "splitSubEmitterRibbons");
30980
+ ], Ne.prototype, "splitSubEmitterRibbons");
30959
30981
  C([
30960
30982
  u()
30961
- ], Ue.prototype, "textureMode");
30983
+ ], Ne.prototype, "textureMode");
30962
30984
  C([
30963
30985
  u(Y)
30964
- ], Ue.prototype, "widthOverTrail");
30986
+ ], Ne.prototype, "widthOverTrail");
30965
30987
  C([
30966
30988
  u()
30967
- ], Ue.prototype, "widthOverTrailMultiplier");
30989
+ ], Ne.prototype, "widthOverTrailMultiplier");
30968
30990
  C([
30969
30991
  u()
30970
- ], Ue.prototype, "worldSpace");
30992
+ ], Ne.prototype, "worldSpace");
30971
30993
  class Ve {
30972
30994
  enabled;
30973
30995
  space = 0;
@@ -31500,7 +31522,7 @@ class ow {
31500
31522
  ), this.particleSystem.worldSpace || i.multiplyMatrices(this._emitterMatrix, i), this.subParticleSystem.emit(t, e.emissionState, i);
31501
31523
  }
31502
31524
  }
31503
- var oT = Object.defineProperty, Fe = (s, e, t, i) => {
31525
+ var oT = Object.defineProperty, ze = (s, e, t, i) => {
31504
31526
  for (var n = void 0, o = s.length - 1, r; o >= 0; o--)
31505
31527
  (r = s[o]) && (n = r(e, t, n) || n);
31506
31528
  return n && oT(e, t, n), n;
@@ -31550,28 +31572,28 @@ class mn extends T {
31550
31572
  return new H(t, this.getMaterial());
31551
31573
  }
31552
31574
  }
31553
- Fe([
31575
+ ze([
31554
31576
  u()
31555
31577
  ], mn.prototype, "renderMode");
31556
- Fe([
31578
+ ze([
31557
31579
  u(_e)
31558
31580
  ], mn.prototype, "particleMaterial");
31559
- Fe([
31581
+ ze([
31560
31582
  u(_e)
31561
31583
  ], mn.prototype, "trailMaterial");
31562
- Fe([
31584
+ ze([
31563
31585
  u()
31564
31586
  ], mn.prototype, "maxParticleSize");
31565
- Fe([
31587
+ ze([
31566
31588
  u()
31567
31589
  ], mn.prototype, "minParticleSize");
31568
- Fe([
31590
+ ze([
31569
31591
  u()
31570
31592
  ], mn.prototype, "velocityScale");
31571
- Fe([
31593
+ ze([
31572
31594
  u()
31573
31595
  ], mn.prototype, "cameraVelocityScale");
31574
- Fe([
31596
+ ze([
31575
31597
  u()
31576
31598
  ], mn.prototype, "lengthScale");
31577
31599
  class vh {
@@ -32208,49 +32230,49 @@ const jt = class Uh extends T {
32208
32230
  }
32209
32231
  }
32210
32232
  };
32211
- Fe([
32233
+ ze([
32212
32234
  u(Cg)
32213
32235
  ], jt.prototype, "colorOverLifetime");
32214
- Fe([
32236
+ ze([
32215
32237
  u(Qt)
32216
32238
  ], jt.prototype, "main");
32217
- Fe([
32239
+ ze([
32218
32240
  u(Co)
32219
32241
  ], jt.prototype, "emission");
32220
- Fe([
32242
+ ze([
32221
32243
  u(Va)
32222
32244
  ], jt.prototype, "sizeOverLifetime");
32223
- Fe([
32245
+ ze([
32224
32246
  u(iw)
32225
32247
  ], jt.prototype, "shape");
32226
- Fe([
32248
+ ze([
32227
32249
  u(ve)
32228
32250
  ], jt.prototype, "noise");
32229
- Fe([
32230
- u(Ue)
32251
+ ze([
32252
+ u(Ne)
32231
32253
  ], jt.prototype, "trails");
32232
- Fe([
32254
+ ze([
32233
32255
  u(Ve)
32234
32256
  ], jt.prototype, "velocityOverLifetime");
32235
- Fe([
32257
+ ze([
32236
32258
  u(yt)
32237
32259
  ], jt.prototype, "limitVelocityOverLifetime");
32238
- Fe([
32260
+ ze([
32239
32261
  u(sw)
32240
32262
  ], jt.prototype, "inheritVelocity");
32241
- Fe([
32263
+ ze([
32242
32264
  u(Ic)
32243
32265
  ], jt.prototype, "colorBySpeed");
32244
- Fe([
32266
+ ze([
32245
32267
  u(Yt)
32246
32268
  ], jt.prototype, "textureSheetAnimation");
32247
- Fe([
32269
+ ze([
32248
32270
  u(Gn)
32249
32271
  ], jt.prototype, "rotationOverLifetime");
32250
- Fe([
32272
+ ze([
32251
32273
  u(pn)
32252
32274
  ], jt.prototype, "rotationBySpeed");
32253
- Fe([
32275
+ ze([
32254
32276
  u(Oi)
32255
32277
  ], jt.prototype, "sizeBySpeed");
32256
32278
  let bd = jt;
@@ -32299,7 +32321,7 @@ class uc extends T {
32299
32321
  const e = x.getComponentInParent(this.gameObject, En);
32300
32322
  if (e && e.owner)
32301
32323
  return this._didAssignPlayerColor = !0, this.assignUserColor(e.owner), !0;
32302
- const t = x.getComponentInParent(this.gameObject, De);
32324
+ const t = x.getComponentInParent(this.gameObject, je);
32303
32325
  return t?.connectionId ? (this._didAssignPlayerColor = !0, this.assignUserColor(t.connectionId), !0) : !1;
32304
32326
  };
32305
32327
  assignUserColor(e) {
@@ -33584,7 +33606,7 @@ class Dc extends T {
33584
33606
  /** @internal */
33585
33607
  awake() {
33586
33608
  Bo && (console.log("PostprocessingManager Awake", this), console.log("Press P to toggle post processing"), window.addEventListener("keydown", (e) => {
33587
- e.key === "p" && (this.enabled = !this.enabled, je("Toggle PostProcessing " + this.name + ": Enabled=" + this.enabled), this.markDirty());
33609
+ e.key === "p" && (this.enabled = !this.enabled, Be("Toggle PostProcessing " + this.name + ": Enabled=" + this.enabled), this.markDirty());
33588
33610
  })), this.sharedProfile?.__init(this);
33589
33611
  }
33590
33612
  _componentEnabledTime = -1;
@@ -33782,7 +33804,7 @@ class Ze extends T {
33782
33804
  }
33783
33805
  /** @internal */
33784
33806
  async onEnable() {
33785
- if (globalThis.addEventListener("popstate", this.onPopState), this.context.input.addEventListener(Le.KeyDown, this.onInputKeyDown), this.context.input.addEventListener(Le.PointerMove, this.onInputPointerMove), this.context.input.addEventListener(Le.PointerUp, this.onInputPointerUp), this._engineElementOverserver || (this._engineElementOverserver = new MutationObserver((e) => {
33807
+ if (globalThis.addEventListener("popstate", this.onPopState), this.context.input.addEventListener(De.KeyDown, this.onInputKeyDown), this.context.input.addEventListener(De.PointerMove, this.onInputPointerMove), this.context.input.addEventListener(De.PointerUp, this.onInputPointerUp), this._engineElementOverserver || (this._engineElementOverserver = new MutationObserver((e) => {
33786
33808
  for (const t of e)
33787
33809
  if (t.type === "attributes" && t.attributeName === $h) {
33788
33810
  const i = this.context.domElement.getAttribute($h);
@@ -33814,7 +33836,7 @@ class Ze extends T {
33814
33836
  }
33815
33837
  /** @internal */
33816
33838
  onDisable() {
33817
- if (globalThis.removeEventListener("popstate", this.onPopState), this.context.input.removeEventListener(Le.KeyDown, this.onInputKeyDown), this.context.input.removeEventListener(Le.PointerMove, this.onInputPointerMove), this.context.input.removeEventListener(Le.PointerUp, this.onInputPointerUp), this._preloadScheduler?.stop(), this._menuButtons) {
33839
+ if (globalThis.removeEventListener("popstate", this.onPopState), this.context.input.removeEventListener(De.KeyDown, this.onInputKeyDown), this.context.input.removeEventListener(De.PointerMove, this.onInputPointerMove), this.context.input.removeEventListener(De.PointerUp, this.onInputPointerUp), this._preloadScheduler?.stop(), this._menuButtons) {
33818
33840
  for (const e of this._menuButtons)
33819
33841
  e.remove();
33820
33842
  this._menuButtons = void 0;
@@ -35851,7 +35873,7 @@ class Lg extends T {
35851
35873
  */
35852
35874
  setAvatarFlagsBeforeRender() {
35853
35875
  const e = this._mode === 0;
35854
- for (const t of De.instances)
35876
+ for (const t of je.instances)
35855
35877
  if (t.avatar && "isLocalAvatar" in t.avatar && "flags" in t.avatar) {
35856
35878
  let i = us.All;
35857
35879
  this.isSpectatingSelf && (i = e && t.avatar.isLocalAvatar ? us.FirstPerson : us.ThirdPerson);
@@ -35865,7 +35887,7 @@ class Lg extends T {
35865
35887
  * Restores avatar visibility flags after spectator rendering
35866
35888
  */
35867
35889
  resetAvatarFlags() {
35868
- for (const e of De.instances)
35890
+ for (const e of je.instances)
35869
35891
  if (e.avatar && "flags" in e.avatar) {
35870
35892
  const t = e.avatar.flags;
35871
35893
  if (!t) continue;
@@ -35951,9 +35973,9 @@ class OE {
35951
35973
  n.key === "Escape" && this.spectator.stopSpectating();
35952
35974
  });
35953
35975
  let i = 0;
35954
- this.context.input.addEventListener(Le.PointerDown, (n) => {
35976
+ this.context.input.addEventListener(De.PointerDown, (n) => {
35955
35977
  i = this.context.time.time;
35956
- }), this.context.input.addEventListener(Le.PointerUp, (n) => {
35978
+ }), this.context.input.addEventListener(De.PointerUp, (n) => {
35957
35979
  const o = this.context.time.time - i;
35958
35980
  o > 1 ? this.spectator.stopSpectating() : this.context.input.getPointerClicked(0) && o < 0.3 && this.trySelectObject();
35959
35981
  });
@@ -35968,7 +35990,7 @@ class OE {
35968
35990
  if (pi && console.log(...t), t?.length)
35969
35991
  for (const i of t) {
35970
35992
  if (i.distance < 0.2) continue;
35971
- const n = i.object, o = x.getComponentInParent(n, De), r = o?.connectionId;
35993
+ const n = i.object, o = x.getComponentInParent(n, je), r = o?.connectionId;
35972
35994
  if (r) {
35973
35995
  const a = this.context.players.getPlayerView(r);
35974
35996
  this.spectator.target = a, pi && console.log("spectate", r, o);
@@ -36250,7 +36272,7 @@ const xw = class em extends T {
36250
36272
  l.context = this.context;
36251
36273
  const c = x.instantiate(this.cameraPrefab, l);
36252
36274
  n = this.remoteCams[t] = { obj: c, lastUpdate: this.context.time.realtimeSinceStartup, userId: i }, n.obj.visible = !0, this.gameObject.add(c), this.userToCamMap[i] = t, em.instances.push(n);
36253
- const h = x.getOrAddComponent(c, De);
36275
+ const h = x.getOrAddComponent(c, je);
36254
36276
  h.connectionId = i, h.avatar = c;
36255
36277
  } else
36256
36278
  return;
@@ -36411,7 +36433,7 @@ C) Set "joinRandomRoom" to true`), !1) : (qf && console.log("Join " + this.roomN
36411
36433
  const t = this.getViewOnlyUrl();
36412
36434
  t?.length ? navigator.canShare({ url: t }) ? navigator.share({ url: t })?.catch((i) => {
36413
36435
  console.warn(i);
36414
- }) : (navigator.clipboard.writeText(t), je("View only URL copied to clipboard")) : me("Could not create view only URL");
36436
+ }) : (navigator.clipboard.writeText(t), Be("View only URL copied to clipboard")) : me("Could not create view only URL");
36415
36437
  }, e.title = "Copy the view only URL: A page accessed by the view only URL can not be modified by visiting users.", e.textContent = "Share View URL", e.prepend(Rt("visibility"));
36416
36438
  }
36417
36439
  this.context.menu.appendChild(this._viewOnlyButton);
@@ -37782,7 +37804,7 @@ class Mo extends T {
37782
37804
  Fo && console.warn("Button Up", this.animationTriggers?.highlightedTrigger, this.animator, this._isHovered), this.interactable && (this.transition == 3 && this.animationTriggers && this.animator ? this.animator.setTrigger(this._isHovered ? this.animationTriggers.highlightedTrigger : this.animationTriggers.normalTrigger) : this.transition === 1 && this.colors && this._image?.setState(this._isHovered ? "hovered" : "normal"));
37783
37805
  }
37784
37806
  onPointerClick(e) {
37785
- if (this.interactable && !(e.button !== 0 && e.event.pointerType === Pm.Mouse) && (Fo && (console.warn("Button Click", this.onClick), je("CLICKED button " + this.name + " at " + this.context.time.frameCount)), this.onClick && this.onClick.listenerCount > 0 && (this.onClick.invoke(), e.use(), Fo))) {
37807
+ if (this.interactable && !(e.button !== 0 && e.event.pointerType === Pm.Mouse) && (Fo && (console.warn("Button Click", this.onClick), Be("CLICKED button " + this.name + " at " + this.context.time.frameCount)), this.onClick && this.onClick.listenerCount > 0 && (this.onClick.invoke(), e.use(), Fo))) {
37786
37808
  const t = this.gameObject.worldPosition;
37787
37809
  t.add(this.gameObject.worldUp.multiplyScalar(1 + Math.random() * 0.5)), F.DrawLabel(t, "CLICK:" + Date.now(), 0.1, 1 + Math.random() * 0.5);
37788
37810
  }
@@ -38356,7 +38378,7 @@ class Wc extends T {
38356
38378
  }
38357
38379
  this._validateUrl();
38358
38380
  let e = this.url;
38359
- switch (!e.startsWith("mailto:") && e.includes("@") && (e = "mailto:" + e), L() && je("Open URL: " + e), this.mode) {
38381
+ switch (!e.startsWith("mailto:") && e.includes("@") && (e = "mailto:" + e), L() && Be("Open URL: " + e), this.mode) {
38360
38382
  case 0:
38361
38383
  q.isSafari(), globalThis.open(e, "_blank");
38362
38384
  break;
@@ -39533,7 +39555,7 @@ P.add("TeleportTarget", ug);
39533
39555
  P.add("WebARCameraBackground", zu);
39534
39556
  P.add("WebARSessionRoot", $i);
39535
39557
  P.add("WebXR", fg);
39536
- P.add("AvatarMarker", De);
39558
+ P.add("AvatarMarker", je);
39537
39559
  P.add("WebXRImageTracking", Pd);
39538
39560
  P.add("WebXRPlaneTracking", Ao);
39539
39561
  P.add("XRRig", Vg);
@@ -39622,7 +39644,7 @@ async function sm(s, e, t, i) {
39622
39644
  }
39623
39645
  if (ul.length > 0) {
39624
39646
  const r = ul.join(", ");
39625
- console.warn("unknown components: " + r), ul.length = 0, ti() && je(`<strong>Unknown components in scene</strong>:
39647
+ console.warn("unknown components: " + r), ul.length = 0, ti() && Be(`<strong>Unknown components in scene</strong>:
39626
39648
 
39627
39649
  ${r}
39628
39650
 
@@ -39805,7 +39827,7 @@ function xA(s) {
39805
39827
  if (new URL(s, window.location.href).href.startsWith("file://")) {
39806
39828
  const t = `Hi - it looks like you are trying to load a local file which will not work. You need to use a webserver to serve your files.
39807
39829
  Please refer to the documentation on <a href="https://fwd.needle.tools/needle-engine/docs/local-server">https://docs.needle.tools</a> or ask for help in our <a href="https://discord.needle.tools">discord community</a>`;
39808
- je(t), console.warn(t);
39830
+ Be(t), console.warn(t);
39809
39831
  }
39810
39832
  }
39811
39833
  function SA(s, e) {
@@ -41734,7 +41756,7 @@ const pL = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
41734
41756
  AvatarBlink_Simple: Ta,
41735
41757
  AvatarEyeLook_Rotation: ev,
41736
41758
  AvatarLoader: FA,
41737
- AvatarMarker: De,
41759
+ AvatarMarker: je,
41738
41760
  AvatarModel: Hw,
41739
41761
  Avatar_Brain_LookAt: ud,
41740
41762
  Avatar_MouthShapes: eu,
@@ -41895,8 +41917,8 @@ const pL = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
41895
41917
  TextureSheetAnimationModule: Yt,
41896
41918
  TiltShiftEffect: Ds,
41897
41919
  ToneMappingEffect: cr,
41898
- TrailModule: Ue,
41899
- TransformData: ze,
41920
+ TrailModule: Ne,
41921
+ TransformData: Ue,
41900
41922
  TransformGizmo: qa,
41901
41923
  TriggerBuilder: Gt,
41902
41924
  TriggerModel: er,
@@ -41999,11 +42021,7 @@ he.registerCallback(ce.ContextCreated, (s) => {
41999
42021
  });
42000
42022
  class NA extends NS {
42001
42023
  constructor() {
42002
- super(new Worker(new URL(
42003
- /* @vite-ignore */
42004
- "/generateMeshBVH.worker-2qGLkQjg.js",
42005
- import.meta.url
42006
- ), { type: "module" })), this.name = "GenerateMeshBVHWorker";
42024
+ super(new Worker(URL.createObjectURL(new Blob(["import '" + `${new URL('./generateMeshBVH.worker-2qGLkQjg.js', import.meta.url).toString()}` + "';"], { type: 'text/javascript' })), { type: "module" })), this.name = "GenerateMeshBVHWorker";
42007
42025
  }
42008
42026
  runTask(e, t, i = {}) {
42009
42027
  return new Promise((n, o) => {
@@ -42077,7 +42095,7 @@ export {
42077
42095
  Ta as AvatarBlink_Simple,
42078
42096
  ev as AvatarEyeLook_Rotation,
42079
42097
  FA as AvatarLoader,
42080
- De as AvatarMarker,
42098
+ je as AvatarMarker,
42081
42099
  Hw as AvatarModel,
42082
42100
  ud as Avatar_Brain_LookAt,
42083
42101
  eu as Avatar_MouthShapes,
@@ -42184,7 +42202,7 @@ export {
42184
42202
  sw as InheritVelocityModule,
42185
42203
  r1 as Input,
42186
42204
  di as InputEventQueue,
42187
- Le as InputEvents,
42205
+ De as InputEvents,
42188
42206
  Rw as InputField,
42189
42207
  ra as InstanceHandle,
42190
42208
  Pa as InstancingHandler,
@@ -42352,8 +42370,8 @@ export {
42352
42370
  cr as ToneMappingEffect,
42353
42371
  Iu as TrackHandler,
42354
42372
  Bi as TrackType,
42355
- Ue as TrailModule,
42356
- ze as TransformData,
42373
+ Ne as TrailModule,
42374
+ Ue as TransformData,
42357
42375
  qa as TransformGizmo,
42358
42376
  Gt as TriggerBuilder,
42359
42377
  er as TriggerModel,
@@ -42599,7 +42617,7 @@ export {
42599
42617
  Ud as setWorldRotationXYZ,
42600
42618
  tc as setWorldScale,
42601
42619
  Nd as showBalloonError,
42602
- je as showBalloonMessage,
42620
+ Be as showBalloonMessage,
42603
42621
  me as showBalloonWarning,
42604
42622
  Hb as showDebugConsole,
42605
42623
  pI as slerp,