@tresjs/core 4.2.0 → 4.2.1

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.
@@ -1,10 +1,10 @@
1
- import { Loader, Object3D } from 'three';
1
+ import { Loader, LoadingManager, Object3D } from 'three';
2
2
 
3
3
  export interface TresLoader<T> extends Loader {
4
- load: (url: string, onLoad?: (result: T) => void, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void) => unknown;
4
+ load: (url: string, onLoad: (result: T) => void, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void) => void;
5
5
  loadAsync: (url: string, onProgress?: (event: ProgressEvent) => void) => Promise<T>;
6
6
  }
7
- export type LoaderProto<T> = new (...args: any) => TresLoader<T extends unknown ? any : T>;
7
+ export type LoaderProto<T> = new (manager?: LoadingManager) => TresLoader<T>;
8
8
  export type LoaderReturnType<T, L extends LoaderProto<T>> = T extends unknown ? Awaited<ReturnType<InstanceType<L>['loadAsync']>> : T;
9
9
  /**
10
10
  * Traverse an object and return all the nodes and materials
@@ -33,13 +33,13 @@ export type Extensions<T extends {
33
33
  * ```
34
34
  *
35
35
  * @export
36
- * @template T
37
- * @template U
38
- * @param {T} Loader
39
- * @param {U} url
40
- * @param {Extensions<T>} [extensions]
36
+ * @template LoaderProto<T>
37
+ * @template string | string[],
38
+ * @param {LoaderProto<T>} Loader
39
+ * @param {string | string[],} url
40
+ * @param {Extensions<TresLoader<T>>} [extensions]
41
41
  * @param {(event: ProgressEvent<EventTarget>) => void} [onProgress]
42
42
  * @param {(proto: TresLoader<T>) => void} [cb]
43
43
  * @return {*}
44
44
  */
45
- export declare function useLoader<T extends LoaderProto<T>, U extends string | string[]>(Loader: T, url: U, extensions?: Extensions<T>, onProgress?: (event: ProgressEvent<EventTarget>) => void, cb?: (proto: TresLoader<T>) => void): Promise<U extends any[] ? LoaderReturnType<T, T>[] : LoaderReturnType<T, T>>;
45
+ export declare function useLoader<T>(Loader: LoaderProto<T>, url: string | string[], extensions?: (loader: TresLoader<T>) => void, onProgress?: (event: ProgressEvent<EventTarget>) => void, cb?: (proto: TresLoader<T>) => void): Promise<T | T[]>;
package/dist/tres.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v4.2.0
3
+ * version: v4.2.1
4
4
  * (c) 2024
5
5
  * description: Declarative ThreeJS using Vue Components
6
6
  * author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
@@ -12,7 +12,7 @@ import { ref as I, computed as Y, watchEffect as Te, onUnmounted as Q, shallowRe
12
12
  import * as et from "three";
13
13
  import { PerspectiveCamera as we, Camera as Dt, Clock as tt, Vector3 as Se, Color as ce, Scene as nt, MathUtils as rt, MeshBasicMaterial as ot, DoubleSide as jt, REVISION as Bt, SRGBColorSpace as It, ACESFilmicToneMapping as st, PCFSoftShadowMap as Ht, NoToneMapping as $t, WebGLRenderer as he, TextureLoader as Ut, Vector2 as ge, Raycaster as Ft, BufferAttribute as Wt, Object3D as Nt, Line as zt, BufferGeometry as $e, Float32BufferAttribute as Ue, LineBasicMaterial as Gt, Mesh as Vt, BackSide as Yt, DirectionalLightHelper as qt, PointLightHelper as Jt, SpotLightHelper as Kt, HemisphereLightHelper as Qt, ArrowHelper as Xt } from "three";
14
14
  import { createEventHook as j, useRafFn as it, toValue as k, unrefElement as Zt, useDevicePixelRatio as en, usePointer as tn, useElementBounding as nn, useWindowSize as rn, useElementSize as on, refDebounced as Fe, tryOnScopeDispose as sn, useFps as an, useMemory as ln } from "@vueuse/core";
15
- const cn = "@tresjs/core", un = "module", fn = "4.2.0", dn = "pnpm@9.1.4", pn = "Declarative ThreeJS using Vue Components", mn = "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)", hn = "MIT", gn = [
15
+ const cn = "@tresjs/core", un = "module", fn = "4.2.1", dn = "pnpm@9.1.4", pn = "Declarative ThreeJS using Vue Components", mn = "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)", hn = "MIT", gn = [
16
16
  "vue",
17
17
  "3d",
18
18
  "threejs",
@@ -323,9 +323,9 @@ function Jn(e, t, n, r) {
323
323
  if (c.uuid === t)
324
324
  return c;
325
325
  for (const o of c.children) {
326
- const f = s(o);
327
- if (f)
328
- return f;
326
+ const u = s(o);
327
+ if (u)
328
+ return u;
329
329
  }
330
330
  }, a = s(e);
331
331
  if (!a) {
@@ -402,7 +402,7 @@ function er(e, t, n) {
402
402
  if (!Array.isArray(i[l])) {
403
403
  const c = i[l], o = [];
404
404
  o.__tresDetach = () => {
405
- o.every((f) => be(f)) && (i[l] = c);
405
+ o.every((u) => be(u)) && (i[l] = c);
406
406
  }, i[l] = o;
407
407
  }
408
408
  }
@@ -456,14 +456,14 @@ function rr(e, t, n, r, s) {
456
456
  return !0;
457
457
  const l = G(e, t.__tres ?? {}, s), c = t.parent ?? t.__tres.parent ?? null, o = { ...t.__tres.memoizedProps };
458
458
  delete o.object;
459
- for (const f of a)
460
- mt(f, s), ht(f, s);
459
+ for (const u of a)
460
+ mt(u, s), ht(u, s);
461
461
  i.__tres.objects = [], r.remove(t);
462
- for (const [f, v] of Object.entries(o))
463
- r.patchProp(l, f, l[f], v);
462
+ for (const [u, v] of Object.entries(o))
463
+ r.patchProp(l, u, l[u], v);
464
464
  n(e), r.insert(t, c);
465
- for (const f of a)
466
- r.insert(f, t);
465
+ for (const u of a)
466
+ r.insert(u, t);
467
467
  return !0;
468
468
  }
469
469
  function X(e) {
@@ -527,7 +527,7 @@ function sr({
527
527
  }, {
528
528
  immediate: !0
529
529
  }), le(() => t.clearColor, c);
530
- const { pixelRatio: o } = en(), { logError: f } = z(), u = (() => {
530
+ const { pixelRatio: o } = en(), { logError: u } = z(), f = (() => {
531
531
  const p = new he(), P = {
532
532
  shadowMap: {
533
533
  enabled: p.shadowMap.enabled,
@@ -543,7 +543,7 @@ function sr({
543
543
  a();
544
544
  }, 100), Te(() => {
545
545
  const p = k(t.preset);
546
- p && (p in ie || f(`Renderer Preset must be one of these: ${Object.keys(ie).join(", ")}`), ut(l.value, ie[p])), nr(l.value, o.value, k(t.dpr)), _ === "always" && (r.frames.value = Math.max(1, r.frames.value));
546
+ p && (p in ie || u(`Renderer Preset must be one of these: ${Object.keys(ie).join(", ")}`), ut(l.value, ie[p])), nr(l.value, o.value, k(t.dpr)), _ === "always" && (r.frames.value = Math.max(1, r.frames.value));
547
547
  const P = (g, E) => {
548
548
  const C = k(g), T = () => {
549
549
  if (p)
@@ -552,7 +552,7 @@ function sr({
552
552
  if (C !== void 0)
553
553
  return C;
554
554
  const M = T();
555
- return M !== void 0 ? M : Ve(u, E);
555
+ return M !== void 0 ? M : Ve(f, E);
556
556
  }, m = (g, E) => Vn(l.value, E, P(g, E));
557
557
  m(t.shadows, "shadowMap.enabled"), m(t.toneMapping ?? st, "toneMapping"), m(t.shadowMapType, "shadowMap.type"), or < 150 && m(!t.useLegacyLights, "physicallyCorrectLights"), m(t.outputColorSpace, "outputColorSpace"), m(t.toneMappingExposure, "toneMappingExposure");
558
558
  const y = P(t.clearColor, "clearColor");
@@ -577,14 +577,15 @@ async function Wr(e, t, n, r, s) {
577
577
  const { logError: a } = z(), i = new e();
578
578
  s && s(i), n && n(i);
579
579
  const c = (Array.isArray(t) ? t : [t]).map(
580
- (o) => new Promise((f, v) => {
580
+ (o) => new Promise((u, v) => {
581
581
  i.load(
582
582
  o,
583
- (u) => {
584
- u.scene && Object.assign(u, ar(u.scene)), f(u);
583
+ (f) => {
584
+ const _ = f;
585
+ _.scene && Object.assign(_, ar(_.scene)), u(_);
585
586
  },
586
587
  r,
587
- (u) => v(a("[useLoader] - Failed to load resource", u))
588
+ (f) => v(a("[useLoader] - Failed to load resource", f))
588
589
  );
589
590
  })
590
591
  );
@@ -612,7 +613,7 @@ async function Nr(e, t) {
612
613
  roughnessMap: l,
613
614
  metalnessMap: c,
614
615
  aoMap: o,
615
- alphaMap: f,
616
+ alphaMap: u,
616
617
  matcap: v
617
618
  } = e;
618
619
  return {
@@ -622,7 +623,7 @@ async function Nr(e, t) {
622
623
  roughnessMap: l ? await r(l) : null,
623
624
  metalnessMap: c ? await r(c) : null,
624
625
  aoMap: o ? await r(o) : null,
625
- alphaMap: f ? await r(f) : null,
626
+ alphaMap: u ? await r(u) : null,
626
627
  matcap: v ? await r(v) : null
627
628
  };
628
629
  }
@@ -630,13 +631,13 @@ async function Nr(e, t) {
630
631
  const lr = (e, t) => {
631
632
  const n = Y(() => t.renderer.value.domElement), r = H([]), { x: s, y: a } = tn({ target: n });
632
633
  let i = 0;
633
- const { width: l, height: c, top: o, left: f } = nn(n), v = ({ x: h, y: S }) => {
634
+ const { width: l, height: c, top: o, left: u } = nn(n), v = ({ x: h, y: S }) => {
634
635
  if (n.value)
635
636
  return {
636
- x: (h - f.value) / l.value * 2 - 1,
637
+ x: (h - u.value) / l.value * 2 - 1,
637
638
  y: -((S - o.value) / c.value) * 2 + 1
638
639
  };
639
- }, u = ({ x: h, y: S }) => {
640
+ }, f = ({ x: h, y: S }) => {
640
641
  if (t.camera.value)
641
642
  return t.raycaster.value.setFromCamera(new ge(h, S), t.camera.value), r.value = t.raycaster.value.intersectObjects(e.value, !0), r.value;
642
643
  }, _ = (h) => {
@@ -644,7 +645,7 @@ const lr = (e, t) => {
644
645
  x: (h == null ? void 0 : h.clientX) ?? s.value,
645
646
  y: (h == null ? void 0 : h.clientY) ?? a.value
646
647
  });
647
- return S ? u(S) || [] : [];
648
+ return S ? f(S) || [] : [];
648
649
  }, p = j(), P = j(), m = j(), y = j(), g = j(), E = j(), C = j(), T = j();
649
650
  function M(h) {
650
651
  const S = {};
@@ -780,9 +781,9 @@ function ur(e, t, n) {
780
781
  }
781
782
  }
782
783
  const {
783
- onClick: f,
784
+ onClick: u,
784
785
  onDblClick: v,
785
- onContextMenu: u,
786
+ onContextMenu: f,
786
787
  onPointerMove: _,
787
788
  onPointerDown: p,
788
789
  onPointerUp: P,
@@ -790,7 +791,7 @@ function ur(e, t, n) {
790
791
  onWheel: y,
791
792
  forceUpdate: g
792
793
  } = lr(l, t);
793
- P((d) => o("onPointerUp", d)), p((d) => o("onPointerDown", d)), f((d) => o("onClick", d)), v((d) => o("onDoubleClick", d)), u((d) => o("onContextMenu", d)), y((d) => o("onWheel", d));
794
+ P((d) => o("onPointerUp", d)), p((d) => o("onPointerDown", d)), u((d) => o("onClick", d)), v((d) => o("onDoubleClick", d)), f((d) => o("onContextMenu", d)), y((d) => o("onWheel", d));
794
795
  let E = [];
795
796
  _((d) => {
796
797
  const b = d.intersections.map(({ object: D }) => D), A = d.intersections;
@@ -851,22 +852,22 @@ function ve() {
851
852
  const e = /* @__PURE__ */ new Map(), t = /* @__PURE__ */ new Set();
852
853
  let n = 0, r = !1;
853
854
  const s = () => {
854
- const o = Array.from(e.entries()).sort((f, v) => {
855
- const u = f[1].priority - v[1].priority;
856
- return u === 0 ? f[1].addI - v[1].addI : u;
855
+ const o = Array.from(e.entries()).sort((u, v) => {
856
+ const f = u[1].priority - v[1].priority;
857
+ return f === 0 ? u[1].addI - v[1].addI : f;
857
858
  });
858
- t.clear(), o.forEach((f) => t.add(f[0]));
859
+ t.clear(), o.forEach((u) => t.add(u[0]));
859
860
  }, a = (o) => {
860
861
  e.delete(o), t.delete(o);
861
862
  };
862
- return { on: (o, f = 0) => {
863
- e.set(o, { priority: f, addI: n++ });
863
+ return { on: (o, u = 0) => {
864
+ e.set(o, { priority: u, addI: n++ });
864
865
  const v = () => a(o);
865
866
  return sn(v), r = !0, {
866
867
  off: v
867
868
  };
868
869
  }, off: a, trigger: (...o) => {
869
- r && (s(), r = !1), t.forEach((f) => f(...o));
870
+ r && (s(), r = !1), t.forEach((u) => u(...o));
870
871
  }, dispose: () => {
871
872
  e.clear(), t.clear();
872
873
  }, get count() {
@@ -879,18 +880,18 @@ function dr() {
879
880
  let i;
880
881
  const l = rt.generateUUID();
881
882
  let c = null;
882
- const o = ve(), f = ve(), v = ve();
883
+ const o = ve(), u = ve(), v = ve();
883
884
  M();
884
- let u = {};
885
+ let f = {};
885
886
  function _(w) {
886
- u = w;
887
+ f = w;
887
888
  }
888
889
  function p(w, L, x = 0) {
889
890
  switch (L) {
890
891
  case "before":
891
892
  return o.on(w, x);
892
893
  case "render":
893
- return c || (c = w), f.dispose(), f.on(w);
894
+ return c || (c = w), u.dispose(), u.on(w);
894
895
  case "after":
895
896
  return v.on(w, x);
896
897
  }
@@ -919,15 +920,15 @@ function dr() {
919
920
  return;
920
921
  }
921
922
  const w = r.getDelta(), L = r.getElapsedTime(), x = {
922
- camera: K(u.camera),
923
- scene: K(u.scene),
924
- renderer: K(u.renderer),
925
- raycaster: K(u.raycaster),
926
- controls: K(u.controls),
927
- invalidate: u.invalidate,
928
- advance: u.advance
923
+ camera: K(f.camera),
924
+ scene: K(f.scene),
925
+ renderer: K(f.renderer),
926
+ raycaster: K(f.raycaster),
927
+ controls: K(f.controls),
928
+ invalidate: f.invalidate,
929
+ advance: f.advance
929
930
  }, d = { delta: w, elapsed: L, clock: r, ...x };
930
- s.value && o.trigger(d), a.value || (f.count ? f.trigger(d) : c && c(d)), s.value && v.trigger(d), i = requestAnimationFrame(T);
931
+ s.value && o.trigger(d), a.value || (u.count ? u.trigger(d) : c && c(d)), s.value && v.trigger(d), i = requestAnimationFrame(T);
931
932
  }
932
933
  function M() {
933
934
  const w = !t && !n;
@@ -953,23 +954,23 @@ function pr(e, t, n = 100) {
953
954
  const r = j(), s = /* @__PURE__ */ new Set();
954
955
  let a = !1, i = !1, l = null;
955
956
  function c() {
956
- l && clearTimeout(l), !i && !a && e() ? (r.trigger(t), s.forEach((u) => u()), s.clear(), a = !0) : !i && !a && (l = setTimeout(c, n));
957
+ l && clearTimeout(l), !i && !a && e() ? (r.trigger(t), s.forEach((f) => f()), s.clear(), a = !0) : !i && !a && (l = setTimeout(c, n));
957
958
  }
958
959
  function o() {
959
960
  i = !0, l && clearTimeout(l);
960
961
  }
961
962
  c();
962
- const f = (u, ..._) => {
963
- u(..._);
963
+ const u = (f, ..._) => {
964
+ f(..._);
964
965
  };
965
966
  return {
966
- on: (u) => {
967
+ on: (f) => {
967
968
  if (a)
968
- return f(u, t), { off: () => {
969
+ return u(f, t), { off: () => {
969
970
  } };
970
971
  {
971
- const _ = r.on(u);
972
- return s.add(_.off), r.on(u);
972
+ const _ = r.on(f);
973
+ return s.add(_.off), r.on(f);
973
974
  }
974
975
  },
975
976
  off: r.off,
@@ -1006,9 +1007,9 @@ function mr({
1006
1007
  }) {
1007
1008
  const { logWarning: i } = z(), l = H(e), c = fr(n, t), {
1008
1009
  camera: o,
1009
- cameras: f,
1010
+ cameras: u,
1010
1011
  registerCamera: v,
1011
- deregisterCamera: u,
1012
+ deregisterCamera: f,
1012
1013
  setCameraActive: _
1013
1014
  } = jn({ sizes: c, scene: e }), p = {
1014
1015
  mode: I(s.renderMode || "always"),
@@ -1037,7 +1038,7 @@ function mr({
1037
1038
  sizes: c,
1038
1039
  scene: l,
1039
1040
  camera: o,
1040
- cameras: ye(f),
1041
+ cameras: ye(u),
1041
1042
  renderer: y,
1042
1043
  raycaster: H(new Ft()),
1043
1044
  controls: I(null),
@@ -1059,7 +1060,7 @@ function mr({
1059
1060
  invalidate: P,
1060
1061
  registerCamera: v,
1061
1062
  setCameraActive: _,
1062
- deregisterCamera: u,
1063
+ deregisterCamera: f,
1063
1064
  loop: dr()
1064
1065
  };
1065
1066
  _e("useTres", g), g.scene.value.__tres = {
@@ -1113,14 +1114,14 @@ function Yr() {
1113
1114
  invalidate: i,
1114
1115
  advance: l
1115
1116
  });
1116
- function c(v, u = 0) {
1117
- return r.register(v, "before", u);
1117
+ function c(v, f = 0) {
1118
+ return r.register(v, "before", f);
1118
1119
  }
1119
1120
  function o(v) {
1120
1121
  return r.register(v, "render");
1121
1122
  }
1122
- function f(v, u = 0) {
1123
- return r.register(v, "after", u);
1123
+ function u(v, f = 0) {
1124
+ return r.register(v, "after", f);
1124
1125
  }
1125
1126
  return {
1126
1127
  pause: r.pause,
@@ -1130,7 +1131,7 @@ function Yr() {
1130
1131
  isActive: r.isActive,
1131
1132
  onBeforeRender: c,
1132
1133
  render: o,
1133
- onAfterRender: f
1134
+ onAfterRender: u
1134
1135
  };
1135
1136
  }
1136
1137
  function hr(e, t = {}, n = {}) {
@@ -1169,17 +1170,17 @@ const { logError: Ke } = z(), Qe = [
1169
1170
  "onWheel"
1170
1171
  ], gr = (e) => {
1171
1172
  const t = e.scene.value;
1172
- function n(o, f, v, u) {
1173
- if (u || (u = {}), u.args || (u.args = []), o === "template" || Wn(o))
1173
+ function n(o, u, v, f) {
1174
+ if (f || (f = {}), f.args || (f.args = []), o === "template" || Wn(o))
1174
1175
  return null;
1175
1176
  let _ = o.replace("Tres", ""), p;
1176
1177
  if (o === "primitive") {
1177
- (!N(u.object) || Ct(u.object)) && Ke(
1178
+ (!N(f.object) || Ct(f.object)) && Ke(
1178
1179
  "Tres primitives need an 'object' prop, whose value is an object or shallowRef<object>"
1179
- ), _ = u.object.type;
1180
+ ), _ = f.object.type;
1180
1181
  const P = {};
1181
1182
  p = hr(
1182
- u.object,
1183
+ f.object,
1183
1184
  {
1184
1185
  object: (y) => y,
1185
1186
  isPrimitive: () => !0,
@@ -1198,36 +1199,36 @@ const { logError: Ke } = z(), Qe = [
1198
1199
  const P = Me.value[_];
1199
1200
  P || Ke(
1200
1201
  `${_} is not defined on the THREE namespace. Use extend to add it to the catalog.`
1201
- ), p = new P(...u.args);
1202
+ ), p = new P(...f.args);
1202
1203
  }
1203
- return p ? (p.isCamera && (u != null && u.position || p.position.set(3, 3, 3), u != null && u.lookAt || p.lookAt(0, 0, 0)), p = G(p, {
1204
+ return p ? (p.isCamera && (f != null && f.position || p.position.set(3, 3, 3), f != null && f.lookAt || p.lookAt(0, 0, 0)), p = G(p, {
1204
1205
  ...p.__tres,
1205
1206
  type: _,
1206
- memoizedProps: u,
1207
+ memoizedProps: f,
1207
1208
  eventCount: 0,
1208
1209
  primitive: o === "primitive",
1209
- attach: u.attach
1210
+ attach: f.attach
1210
1211
  }, e), p) : null;
1211
1212
  }
1212
- function r(o, f) {
1213
+ function r(o, u) {
1213
1214
  var _, p, P;
1214
1215
  if (!o)
1215
1216
  return;
1216
- f = f || t;
1217
- const v = o.__tres ? o : G(o, {}, e), u = f.__tres ? f : G(f, {}, e);
1218
- o = X(v), f = X(u), o.__tres && ((_ = o.__tres) == null ? void 0 : _.eventCount) > 0 && ((p = e.eventManager) == null || p.registerObject(o)), e.registerCamera(o), (P = e.eventManager) == null || P.registerPointerMissedObject(o), v.__tres.attach ? er(u, v, v.__tres.attach) : W(o) && W(u) && (u.add(o), o.dispatchEvent({ type: "added" })), v.__tres.parent = u, u.__tres.objects && !u.__tres.objects.includes(v) && u.__tres.objects.push(v);
1217
+ u = u || t;
1218
+ const v = o.__tres ? o : G(o, {}, e), f = u.__tres ? u : G(u, {}, e);
1219
+ o = X(v), u = X(f), o.__tres && ((_ = o.__tres) == null ? void 0 : _.eventCount) > 0 && ((p = e.eventManager) == null || p.registerObject(o)), e.registerCamera(o), (P = e.eventManager) == null || P.registerPointerMissedObject(o), v.__tres.attach ? er(f, v, v.__tres.attach) : W(o) && W(f) && (f.add(o), o.dispatchEvent({ type: "added" })), v.__tres.parent = f, f.__tres.objects && !f.__tres.objects.includes(v) && f.__tres.objects.push(v);
1219
1220
  }
1220
- function s(o, f) {
1221
+ function s(o, u) {
1221
1222
  var p, P, m, y;
1222
1223
  if (!o)
1223
1224
  return;
1224
- o != null && o.__tres && ((p = o.__tres) == null ? void 0 : p.eventCount) > 0 && ((P = e.eventManager) == null || P.deregisterObject(o)), f = be(f) ? "default" : f;
1225
+ o != null && o.__tres && ((p = o.__tres) == null ? void 0 : p.eventCount) > 0 && ((P = e.eventManager) == null || P.deregisterObject(o)), u = be(u) ? "default" : u;
1225
1226
  const v = (m = o.__tres) == null ? void 0 : m.dispose;
1226
- be(v) || (v === null ? f = !1 : f = v);
1227
- const u = (y = o.__tres) == null ? void 0 : y.primitive, _ = f === "default" ? !u : !!f;
1228
- if (o.__tres && "objects" in o.__tres && [...o.__tres.objects].forEach((g) => s(g, f)), _ && o.children && [...o.children].forEach((g) => s(g, f)), mt(o, e), ht(o, e), _ && !On(o)) {
1229
- if (V(f))
1230
- f(o);
1227
+ be(v) || (v === null ? u = !1 : u = v);
1228
+ const f = (y = o.__tres) == null ? void 0 : y.primitive, _ = u === "default" ? !f : !!u;
1229
+ if (o.__tres && "objects" in o.__tres && [...o.__tres.objects].forEach((g) => s(g, u)), _ && o.children && [...o.children].forEach((g) => s(g, u)), mt(o, e), ht(o, e), _ && !On(o)) {
1230
+ if (V(u))
1231
+ u(o);
1231
1232
  else if (V(o.dispose))
1232
1233
  try {
1233
1234
  o.dispose();
@@ -1236,31 +1237,31 @@ const { logError: Ke } = z(), Qe = [
1236
1237
  }
1237
1238
  "__tres" in o && delete o.__tres;
1238
1239
  }
1239
- function a(o, f, v, u) {
1240
+ function a(o, u, v, f) {
1240
1241
  var g, E;
1241
1242
  if (!o)
1242
1243
  return;
1243
- let _ = o, p = f;
1244
- if (o.__tres && (o.__tres.memoizedProps[f] = u), f === "attach") {
1244
+ let _ = o, p = u;
1245
+ if (o.__tres && (o.__tres.memoizedProps[u] = f), u === "attach") {
1245
1246
  const C = ((g = o.__tres) == null ? void 0 : g.parent) || o.parent;
1246
- s(o), G(o, { attach: u }, e), C && r(o, C);
1247
+ s(o), G(o, { attach: f }, e), C && r(o, C);
1247
1248
  return;
1248
1249
  }
1249
- if (f === "dispose") {
1250
- o.__tres || (o = G(o, {}, e)), o.__tres.dispose = u;
1250
+ if (u === "dispose") {
1251
+ o.__tres || (o = G(o, {}, e)), o.__tres.dispose = f;
1251
1252
  return;
1252
1253
  }
1253
1254
  if (W(o) && p === "blocks-pointer-events") {
1254
- u || u === "" ? o[p] = u : delete o[p];
1255
+ f || f === "" ? o[p] = f : delete o[p];
1255
1256
  return;
1256
1257
  }
1257
- Qe.includes(f) && o.__tres && (o.__tres.eventCount += 1);
1258
+ Qe.includes(u) && o.__tres && (o.__tres.eventCount += 1);
1258
1259
  let P = se(p), m = _ == null ? void 0 : _[P];
1259
1260
  if (p === "args") {
1260
- const C = o, T = v ?? [], M = u ?? [], w = ((E = o.__tres) == null ? void 0 : E.type) || o.type;
1261
+ const C = o, T = v ?? [], M = f ?? [], w = ((E = o.__tres) == null ? void 0 : E.type) || o.type;
1261
1262
  w && T.length && !Yn(T, M) && (_ = Object.assign(
1262
1263
  C,
1263
- new Me.value[w](...u)
1264
+ new Me.value[w](...f)
1264
1265
  ));
1265
1266
  return;
1266
1267
  }
@@ -1269,7 +1270,7 @@ const { logError: Ke } = z(), Qe = [
1269
1270
  return;
1270
1271
  _.setAttribute(
1271
1272
  se(p),
1272
- new Wt(...u)
1273
+ new Wt(...f)
1273
1274
  );
1274
1275
  return;
1275
1276
  }
@@ -1277,25 +1278,25 @@ const { logError: Ke } = z(), Qe = [
1277
1278
  const C = p.split("-");
1278
1279
  m = C.reduce((T, M) => T[se(M)], _), p = C.pop(), P = p, m != null && m.set || (_ = C.reduce((T, M) => T[se(M)], _));
1279
1280
  }
1280
- let y = u;
1281
+ let y = f;
1281
1282
  if (y === "" && (y = !0), V(m)) {
1282
- Qe.includes(f) || (de(y) ? o[P](...y) : o[P](y)), P.startsWith("on") && V(y) && (_[P] = y);
1283
+ Qe.includes(u) || (de(y) ? o[P](...y) : o[P](y)), P.startsWith("on") && V(y) && (_[P] = y);
1283
1284
  return;
1284
1285
  }
1285
1286
  !(m != null && m.set) && !V(m) ? _[P] = y : m.constructor === y.constructor && (m != null && m.copy) ? m == null || m.copy(y) : de(y) ? m.set(...y) : !m.isColor && m.setScalar ? m.setScalar(y) : m.set(y), pt(o);
1286
1287
  }
1287
1288
  function i(o) {
1288
- var f;
1289
- return ((f = o == null ? void 0 : o.__tres) == null ? void 0 : f.parent) || null;
1289
+ var u;
1290
+ return ((u = o == null ? void 0 : o.__tres) == null ? void 0 : u.parent) || null;
1290
1291
  }
1291
1292
  function l(o) {
1292
- const f = G(new Nt(), { type: "Comment" }, e);
1293
- return f.name = o, f;
1293
+ const u = G(new Nt(), { type: "Comment" }, e);
1294
+ return u.name = o, u;
1294
1295
  }
1295
1296
  function c(o) {
1296
1297
  var _;
1297
- const f = i(o), v = ((_ = f == null ? void 0 : f.__tres) == null ? void 0 : _.objects) || [], u = v.indexOf(o);
1298
- return u < 0 || u >= v.length - 1 ? null : v[u + 1];
1298
+ const u = i(o), v = ((_ = u == null ? void 0 : u.__tres) == null ? void 0 : _.objects) || [], f = v.indexOf(o);
1299
+ return f < 0 || f >= v.length - 1 ? null : v[f + 1];
1299
1300
  }
1300
1301
  return {
1301
1302
  insert: r,
@@ -1575,21 +1576,21 @@ const kr = ["data-scene", "data-tres"], xr = /* @__PURE__ */ Be({
1575
1576
  var P;
1576
1577
  const r = e, s = n, a = Tt(), { logWarning: i } = z(), l = I(), c = H(new nt()), o = (P = Ie()) == null ? void 0 : P.appContext.app;
1577
1578
  Ce(et);
1578
- const f = (m) => Be({
1579
+ const u = (m) => Be({
1579
1580
  setup() {
1580
1581
  var g;
1581
1582
  const y = (g = Ie()) == null ? void 0 : g.appContext;
1582
1583
  return y && (y.app = o), _e("useTres", m), _e("extend", Ce), typeof window < "u" && Ar(y == null ? void 0 : y.app, m), () => He(Ot, null, a != null && a.default ? a.default() : []);
1583
1584
  }
1584
1585
  }), v = (m) => {
1585
- const y = f(m), { render: g } = Rt(gr(m));
1586
+ const y = u(m), { render: g } = Rt(gr(m));
1586
1587
  g(He(y), c.value);
1587
- }, u = (m, y = !1) => {
1588
+ }, f = (m, y = !1) => {
1588
1589
  dt(m.scene.value), y && (m.renderer.value.dispose(), m.renderer.value.renderLists.dispose(), m.renderer.value.forceContextLoss()), c.value.__tres = {
1589
1590
  root: m
1590
1591
  }, v(m);
1591
1592
  }, _ = Y(() => r.disableRender), p = H(null);
1592
- return t({ context: p, dispose: () => u(p.value, !0) }), St(() => {
1593
+ return t({ context: p, dispose: () => f(p.value, !0) }), St(() => {
1593
1594
  const m = l;
1594
1595
  p.value = mr({
1595
1596
  scene: c.value,
@@ -1625,7 +1626,7 @@ const kr = ["data-scene", "data-tres"], xr = /* @__PURE__ */ Be({
1625
1626
  "No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."
1626
1627
  ), T());
1627
1628
  }), Q(() => {
1628
- u(p.value);
1629
+ f(p.value);
1629
1630
  }), (m, y) => (At(), kt("canvas", {
1630
1631
  ref_key: "canvas",
1631
1632
  ref: l,
package/dist/tres.umd.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v4.2.0
3
+ * version: v4.2.1
4
4
  * (c) 2024
5
5
  * description: Declarative ThreeJS using Vue Components
6
6
  * author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
7
7
  */
8
- (function(C,d){typeof exports=="object"&&typeof module<"u"?d(exports,require("vue"),require("three"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","three","@vueuse/core"],d):(C=typeof globalThis<"u"?globalThis:C||self,d(C.tres={},C.Vue,C.Three,C.VueUseCore))})(this,function(C,d,v,M){"use strict";var yn=Object.defineProperty;var _n=(C,d,v)=>d in C?yn(C,d,{enumerable:!0,configurable:!0,writable:!0,value:v}):C[d]=v;var ye=(C,d,v)=>_n(C,typeof d!="symbol"?d+"":d,v);function it(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const _e=it(v),at={name:"@tresjs/core",type:"module",version:"4.2.0",packageManager:"pnpm@9.1.4",description:"Declarative ThreeJS using Vue Components",author:"Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",license:"MIT",keywords:["vue","3d","threejs","three","threejs-vue"],sideEffects:!1,exports:{".":{types:"./dist/index.d.ts",import:"./dist/tres.js",require:"./dist/tres.umd.cjs"},"./components":{types:"./dist/src/components/index.d.ts"},"./composables":{types:"./dist/src/composables/index.d.ts"},"./types":{types:"./dist/src/types/index.d.ts"},"./utils":{types:"./dist/src/utils/index.d.ts"},"./*":"./*"},main:"./dist/tres.js",module:"./dist/tres.js",types:"./dist/index.d.ts",files:["*.d.ts","dist"],publishConfig:{access:"public"},scripts:{dev:"cd playground && npm run dev",build:"vite build",playground:"cd playground && npm run dev",test:"vitest","test:ci":"vitest run","test:ui":"vitest --ui --coverage.enabled=true",release:"release-it",coverage:"vitest run --coverage",lint:"eslint .","lint:fix":"eslint . --fix","docs:dev":"vitepress dev docs","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs","docs:preview":"vitepress preview docs","docs:contributors":"esno scripts/update-contributors.ts",prepare:"node .husky/install.mjs"},peerDependencies:{three:">=0.133",vue:">=3.4"},dependencies:{"@alvarosabu/utils":"^3.2.0","@vue/devtools-api":"^6.6.3","@vueuse/core":"^10.11.0"},devDependencies:{"@release-it/conventional-changelog":"^8.0.1","@stackblitz/sdk":"^1.11.0","@tresjs/cientos":"3.9.0","@tresjs/eslint-config":"^1.1.0","@types/three":"^0.166.0","@typescript-eslint/eslint-plugin":"^7.16.0","@typescript-eslint/parser":"^7.16.0","@vitejs/plugin-vue":"^5.0.5","@vitest/coverage-c8":"^0.33.0","@vitest/coverage-v8":"^2.0.2","@vitest/ui":"^2.0.2","@vue/test-utils":"^2.4.6",eslint:"^9.6.0","eslint-plugin-vue":"^9.27.0",esno:"^4.7.0",gsap:"^3.12.5",husky:"^9.0.11",jsdom:"^24.1.0",kolorist:"^1.8.0",ohmyfetch:"^0.4.21",pathe:"^1.1.2","release-it":"^17.5.0","rollup-plugin-analyzer":"^4.0.0","rollup-plugin-copy":"^3.5.0","rollup-plugin-visualizer":"^5.12.0",sponsorkit:"^0.14.6",three:"^0.166.1",unocss:"^0.61.3",unplugin:"^1.11.0","unplugin-vue-components":"^0.27.2",vite:"^5.3.3","vite-plugin-banner":"^0.7.1","vite-plugin-dts":"3.9.1","vite-plugin-inspect":"^0.8.4","vite-plugin-require-transform":"^1.0.21","vite-svg-loader":"^5.1.0",vitepress:"1.3.0",vitest:"^2.0.2",vue:"^3.4.31","vue-demi":"^0.14.8"}};function fe(e){return typeof e>"u"}function ee(e){return Array.isArray(e)}function lt(e){return typeof e=="number"}function we(e){return typeof e=="string"}function G(e){return typeof e=="function"}function V(e){return e===Object(e)&&!ee(e)&&!G(e)}function F(e){return V(e)&&"isObject3D"in e&&!!e.isObject3D}function be(e){return V(e)&&"isCamera"in e&&!!e.isCamera}function ct(e){return V(e)&&"isBufferGeometry"in e&&!!e.isBufferGeometry}function ut(e){return V(e)&&"isMaterial"in e&&!!e.isMaterial}function ft(e){return V(e)&&"isFog"in e&&!!e.isFog}function dt(e){return V(e)&&"isScene"in e&&!!e.isScene}function te(e){return F(e)||ct(e)||ut(e)||ft(e)}function pt(e){return V(e)&&!!e.isPrimitive}const Ce=({sizes:e})=>{const t=d.ref([]),n=d.computed(()=>t.value[0]),r=i=>{const l=i instanceof v.Camera?i:t.value.find(o=>o.uuid===i);if(!l)return;const c=t.value.filter(({uuid:o})=>o!==l.uuid);t.value=[l,...c]},s=(i,l=!1)=>{if(be(i)){const c=i;if(t.value.some(({uuid:o})=>o===c.uuid))return;l?r(c):t.value.push(c)}},a=i=>{if(be(i)){const l=i;t.value=t.value.filter(({uuid:c})=>c!==l.uuid)}};return d.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(i=>{!i.manual&&(i instanceof v.PerspectiveCamera||mt(i))&&(i instanceof v.PerspectiveCamera?i.aspect=e.aspectRatio.value:(i.left=e.width.value*-.5,i.right=e.width.value*.5,i.top=e.height.value*.5,i.bottom=e.height.value*-.5),i.updateProjectionMatrix())})}),d.onUnmounted(()=>{t.value=[]}),{camera:n,cameras:t,registerCamera:s,deregisterCamera:a,setCameraActive:r}};function mt(e){return e.hasOwnProperty("isOrthographicCamera")&&e.isOrthographicCamera}const Me=M.createEventHook(),Pe=M.createEventHook(),de=M.createEventHook(),Q=new v.Clock;let ne=0,re=0;const{pause:ht,resume:Se,isActive:gt}=M.useRafFn(()=>{Me.trigger({delta:ne,elapsed:re,clock:Q}),Pe.trigger({delta:ne,elapsed:re,clock:Q}),de.trigger({delta:ne,elapsed:re,clock:Q})},{immediate:!1});de.on(()=>{ne=Q.getDelta(),re=Q.getElapsedTime()});let ke=!1;const vt=()=>(ke||(ke=!0,Se()),{onBeforeLoop:Me.on,onLoop:Pe.on,onAfterLoop:de.on,pause:ht,resume:Se,isActive:gt}),yt=!0,oe="[TresJS ▲ ■ ●] ";function $(){function e(...r){typeof r[0]=="string"?r[0]=oe+r[0]:r.unshift(oe),console.error(...r)}function t(...r){typeof r[0]=="string"?r[0]=oe+r[0]:r.unshift(oe),console.warn(...r)}function n(r,s){}return{logError:e,logWarning:t,logMessage:n}}function _t(e){return typeof e=="number"?[e,e,e]:e instanceof v.Vector3?[e.x,e.y,e.z]:e}function Ae(e){return e instanceof v.Color?e:Array.isArray(e)?new v.Color(...e):new v.Color(e)}class wt extends _e.Mesh{constructor(...n){super(...n);ye(this,"type","HightlightMesh");ye(this,"createTime");this.createTime=Date.now()}onBeforeRender(){const r=(Date.now()-this.createTime)/1e3,i=1+.07*Math.sin(2.5*r);this.scale.set(i,i,i)}}const Le=(e,t)=>{for(const n of Object.keys(t))t[n]instanceof Object&&Object.assign(t[n],Le(e[n],t[n]));return Object.assign(e||{},t),e},bt=Pt("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot");function Oe(e){return e&&e.nodeType===1}function se(e){return e.replace(/-([a-z])/g,(t,n)=>n.toUpperCase())}const Ct=/\B([A-Z])/g;function Mt(e){return e.replace(Ct,"-$1").toLowerCase()}function Pt(e,t){const n=Object.create(null),r=e.split(",");for(let s=0;s<r.length;s++)n[r[s]]=!0;return s=>!!n[s]}const De=(e,t)=>{if(!t)return;const n=Array.isArray(t)?t:t.match(/([^[.\]])+/g);return n==null?void 0:n.reduce((r,s)=>r&&r[s],e)},St=(e,t,n)=>{const r=Array.isArray(t)?t:t.match(/([^[.\]])+/g);r&&r.reduce((s,a,i)=>(s[a]===void 0&&(s[a]={}),i===r.length-1&&(s[a]=n),s[a]),e)};function je(e,t){if(Oe(e)&&Oe(t)){const s=e.attributes,a=t.attributes;return s.length!==a.length?!1:Array.from(s).every(({name:i,value:l})=>t.getAttribute(i)===l)}if(e===t)return!0;if(e===null||typeof e!="object"||t===null||typeof t!="object")return!1;const n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(const s of n)if(!r.includes(s)||!je(e[s],t[s]))return!1;return!0}function kt(e,t){if(!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!je(e[n],t[n]))return!1;return!0}const At=Array.isArray;function Lt(e,t,n,r){const s=c=>{if(c.uuid===t)return c;for(const o of c.children){const f=s(o);if(f)return f}},a=s(e);if(!a){console.warn("Object with UUID not found in the scene.");return}let i=a;for(let c=0;c<n.length-1;c++)if(i[n[c]]!==void 0)i=i[n[c]];else{console.warn(`Property path is not valid: ${n.join(".")}`);return}const l=n[n.length-1];i[l]!==void 0?i[l]=r:console.warn(`Property path is not valid: ${n.join(".")}`)}function Ot(e){const t=new v.MeshBasicMaterial({color:11003607,transparent:!0,opacity:.2,depthTest:!1,side:v.DoubleSide});return new wt(e.geometry.clone(),t)}function Dt(e){var n;let t=e.value;return e.value&&((n=e.value)!=null&&n.isMesh)&&(t=e.value.position),Array.isArray(e.value)&&(t=new v.Vector3(...t)),t}function jt(e){return"map"in e}function Te(e){jt(e)&&e.map&&e.map.dispose(),e.dispose()}function pe(e){var n,r;if(e.parent&&((n=e.removeFromParent)==null||n.call(e)),delete e.__tres,[...e.children].forEach(s=>pe(s)),!(e instanceof v.Scene)){const s=e;e&&((r=e.dispose)==null||r.call(e)),s.geometry&&(s.geometry.dispose(),delete s.geometry),Array.isArray(s.material)?(s.material.forEach(a=>Te(a)),delete s.material):s.material&&(Te(s.material),delete s.material)}}function Tt(e,t){let n=0;for(let r=0;r<e.length;r++)t(e[r],r)&&(e[n]=e[r],n++);return e.length=n,e}function me(e,t){let n=e;if(t.includes("-")){const r=t.split("-");let s=r.shift();for(;n&&r.length;)s in n?(n=n[s],s=r.shift()):s=xe(s,r.shift());return{target:n,key:xe(s,...r)}}else return{target:n,key:t}}function xe(...e){return e.map((t,n)=>n===0?t:t.charAt(0).toUpperCase()+t.slice(1)).join("")}const Be=/-\d+$/;function xt(e,t,n){if(we(n)){if(Be.test(n)){const a=n.replace(Be,""),{target:i,key:l}=me(e,a);if(!Array.isArray(i[l])){const c=i[l],o=[];o.__tresDetach=()=>{o.every(f=>fe(f))&&(i[l]=c)},i[l]=o}}const{target:r,key:s}=me(e,n);t.__tres.previousAttach=r[s],r[s]=Y(t)}else t.__tres.previousAttach=n(e,t)}function Bt(e,t,n){var r,s,a;if(we(n)){const{target:i,key:l}=me(e,n),c=t.__tres.previousAttach;c===void 0?delete i[l]:i[l]=c,"__tresDetach"in i&&i.__tresDetach()}else(s=(r=t.__tres)==null?void 0:r.previousAttach)==null||s.call(r,e,t);(a=t.__tres)==null||delete a.previousAttach}function q(e,t,n){const r=e;return r.__tres={type:"unknown",eventCount:0,root:n,handlers:{},memoizedProps:{},objects:[],parent:null,previousAttach:null,...t},r.__tres.attach||(r.isMaterial?r.__tres.attach="material":r.isBufferGeometry?r.__tres.attach="geometry":r.isFog&&(r.__tres.attach="fog")),r}function Ie(e){var n;const t=(n=e==null?void 0:e.__tres)==null?void 0:n.root;t&&t.render&&t.render.canBeInvalidated.value&&t.invalidate()}function Vn(e){}function It(e,t,n){var s;if(!G(e.setPixelRatio))return;let r=0;if(ee(n)&&n.length>=2){const[a,i]=n;r=v.MathUtils.clamp(t,a,i)}else lt(n)?r=n:r=t;r!==((s=e.getPixelRatio)==null?void 0:s.call(e))&&e.setPixelRatio(r)}function Rt(e,t,n,r,s){const a=[...t.__tres.objects],i=Y(t);if(e=Y(e),i===e)return!0;const l=q(e,t.__tres??{},s),c=t.parent??t.__tres.parent??null,o={...t.__tres.memoizedProps};delete o.object;for(const f of a)Re(f,s),Ee(f,s);i.__tres.objects=[],r.remove(t);for(const[f,_]of Object.entries(o))r.patchProp(l,f,l[f],_);n(e),r.insert(t,c);for(const f of a)r.insert(f,t);return!0}function Y(e){return pt(e)?(e.object.__tres=e.__tres,e.object):e}function Re(e,t){var r,s,a,i;const n=((r=e.__tres)==null?void 0:r.parent)||t.scene.value;e.__tres&&(e.__tres.parent=null),n&&n.__tres&&"objects"in n.__tres&&Tt(n.__tres.objects,l=>l!==e),(s=e.__tres)!=null&&s.attach?Bt(n,e,e.__tres.attach):((i=(a=e.parent)==null?void 0:a.remove)==null||i.call(a,Y(e)),e.parent=null)}function Ee(e,t){var n;(n=e.traverse)==null||n.call(e,r=>{var s;t.deregisterCamera(r),(s=t.eventManager)==null||s.deregisterPointerMissedObject(r)}),t.deregisterCamera(e),Ie(e)}const Et=Number.parseInt(v.REVISION.replace("dev","")),ie={realistic:{shadows:!0,physicallyCorrectLights:!0,outputColorSpace:v.SRGBColorSpace,toneMapping:v.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:v.PCFSoftShadowMap}},flat:{toneMapping:v.NoToneMapping,toneMappingExposure:1}};function $e({canvas:e,options:t,contextParts:{sizes:n,render:r,invalidate:s,advance:a}}){const i=d.computed(()=>({alpha:M.toValue(t.alpha)??!0,depth:M.toValue(t.depth),canvas:M.unrefElement(e),context:M.toValue(t.context),stencil:M.toValue(t.stencil),antialias:M.toValue(t.antialias)??!0,precision:M.toValue(t.precision),powerPreference:M.toValue(t.powerPreference),premultipliedAlpha:M.toValue(t.premultipliedAlpha),preserveDrawingBuffer:M.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:M.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:M.toValue(t.failIfMajorPerformanceCaveat)})),l=d.shallowRef(new v.WebGLRenderer(i.value));function c(){t.renderMode==="on-demand"&&s()}d.watch(i,()=>{l.value.dispose(),l.value=new v.WebGLRenderer(i.value),c()}),d.watch([n.width,n.height],()=>{l.value.setSize(n.width.value,n.height.value),c()},{immediate:!0}),d.watch(()=>t.clearColor,c);const{pixelRatio:o}=M.useDevicePixelRatio(),{logError:f}=$(),u=(()=>{const m=new v.WebGLRenderer,k={shadowMap:{enabled:m.shadowMap.enabled,type:m.shadowMap.type},toneMapping:m.toneMapping,toneMappingExposure:m.toneMappingExposure,outputColorSpace:m.outputColorSpace};return m.dispose(),k})(),b=M.toValue(t.renderMode);return b==="on-demand"&&s(),b==="manual"&&setTimeout(()=>{a()},100),d.watchEffect(()=>{const m=M.toValue(t.preset);m&&(m in ie||f(`Renderer Preset must be one of these: ${Object.keys(ie).join(", ")}`),Le(l.value,ie[m])),It(l.value,o.value,M.toValue(t.dpr)),b==="always"&&(r.frames.value=Math.max(1,r.frames.value));const k=(y,O)=>{const L=M.toValue(y),D=()=>{if(m)return De(ie[m],O)};if(L!==void 0)return L;const A=D();return A!==void 0?A:De(u,O)},h=(y,O)=>St(l.value,O,k(y,O));h(t.shadows,"shadowMap.enabled"),h(t.toneMapping??v.ACESFilmicToneMapping,"toneMapping"),h(t.shadowMapType,"shadowMap.type"),Et<150&&h(!t.useLegacyLights,"physicallyCorrectLights"),h(t.outputColorSpace,"outputColorSpace"),h(t.toneMappingExposure,"toneMappingExposure");const w=k(t.clearColor,"clearColor");w&&l.value.setClearColor(w?Ae(w):new v.Color(0))}),d.onUnmounted(()=>{l.value.dispose(),l.value.forceContextLoss()}),{renderer:l}}const $t=e=>!!e&&e.constructor===Array;function Ue(e){const t={nodes:{},materials:{}};return e&&e.traverse(n=>{n.name&&(t.nodes[n.name]=n),n.material&&!t.materials[n.material.name]&&(t.materials[n.material.name]=n.material)}),t}async function Ut(e,t,n,r,s){const{logError:a}=$(),i=new e;s&&s(i),n&&n(i);const c=(Array.isArray(t)?t:[t]).map(o=>new Promise((f,_)=>{i.load(o,u=>{u.scene&&Object.assign(u,Ue(u.scene)),f(u)},r,u=>_(a("[useLoader] - Failed to load resource",u)))}));return $t(t)?await Promise.all(c):await c[0]}async function Vt(e,t){const n=new v.TextureLoader(t),r=s=>new Promise((a,i)=>{n.load(s,l=>a(l),()=>null,()=>{i(new Error("[useTextures] - Failed to load texture"))})});if(At(e)){const s=await Promise.all(e.map(a=>r(a)));return e.length>1?s:s[0]}else{const{map:s,displacementMap:a,normalMap:i,roughnessMap:l,metalnessMap:c,aoMap:o,alphaMap:f,matcap:_}=e;return{map:s?await r(s):null,displacementMap:a?await r(a):null,normalMap:i?await r(i):null,roughnessMap:l?await r(l):null,metalnessMap:c?await r(c):null,aoMap:o?await r(o):null,alphaMap:f?await r(f):null,matcap:_?await r(_):null}}}const Ve=(e,t)=>{const n=d.computed(()=>t.renderer.value.domElement),r=d.shallowRef([]),{x:s,y:a}=M.usePointer({target:n});let i=0;const{width:l,height:c,top:o,left:f}=M.useElementBounding(n),_=({x:g,y:j})=>{if(n.value)return{x:(g-f.value)/l.value*2-1,y:-((j-o.value)/c.value)*2+1}},u=({x:g,y:j})=>{if(t.camera.value)return t.raycaster.value.setFromCamera(new v.Vector2(g,j),t.camera.value),r.value=t.raycaster.value.intersectObjects(e.value,!0),r.value},b=g=>{const j=_({x:(g==null?void 0:g.clientX)??s.value,y:(g==null?void 0:g.clientY)??a.value});return j?u(j)||[]:[]},m=M.createEventHook(),k=M.createEventHook(),h=M.createEventHook(),w=M.createEventHook(),y=M.createEventHook(),O=M.createEventHook(),L=M.createEventHook(),D=M.createEventHook();function A(g){const j={};for(const z in g)typeof z!="function"&&(j[z]=g[z]);return j}const P=(g,j)=>{var rt,ot,st;const z=A(j),ue=new v.Vector3(j==null?void 0:j.clientX,j==null?void 0:j.clientY,0).unproject((rt=t.camera)==null?void 0:rt.value);g.trigger({...z,intersections:r.value,unprojectedPoint:ue,ray:(ot=t.raycaster)==null?void 0:ot.value.ray,camera:(st=t.camera)==null?void 0:st.value,sourceEvent:j,delta:i,stopPropagating:!1})};let B;const x=g=>{b(g),P(h,g),B=g},p=()=>{B&&x(B)};let S,T,E;const N=g=>{var j;S=(j=r.value[0])==null?void 0:j.object,i=0,T=new v.Vector2((g==null?void 0:g.clientX)??s.value,(g==null?void 0:g.clientY)??a.value),P(y,g)};let I,R=!1;const K=g=>{var j,z,ue;g instanceof PointerEvent&&(r.value.length===0&&P(O,g),S===((j=r.value[0])==null?void 0:j.object)&&(E=new v.Vector2((g==null?void 0:g.clientX)??s.value,(g==null?void 0:g.clientY)??a.value),i=T==null?void 0:T.distanceTo(E),g.button===0?(P(m,g),I===((z=r.value[0])==null?void 0:z.object)?R=!0:(I=(ue=r.value[0])==null?void 0:ue.object,R=!1)):g.button===2&&P(L,g)),P(w,g))},et=g=>{R&&(P(k,g),I=void 0,R=!1)},tt=g=>P(h,g),nt=g=>P(D,g);return n.value.addEventListener("pointerup",K),n.value.addEventListener("pointerdown",N),n.value.addEventListener("pointermove",x),n.value.addEventListener("pointerleave",tt),n.value.addEventListener("dblclick",et),n.value.addEventListener("wheel",nt),d.onUnmounted(()=>{n!=null&&n.value&&(n.value.removeEventListener("pointerup",K),n.value.removeEventListener("pointerdown",N),n.value.removeEventListener("pointermove",x),n.value.removeEventListener("pointerleave",tt),n.value.removeEventListener("dblclick",et),n.value.removeEventListener("wheel",nt))}),{intersects:r,onClick:g=>m.on(g).off,onDblClick:g=>k.on(g).off,onContextMenu:g=>L.on(g).off,onPointerMove:g=>h.on(g).off,onPointerUp:g=>w.on(g).off,onPointerDown:g=>y.on(g).off,onPointerMissed:g=>O.on(g).off,onWheel:g=>D.on(g).off,forceUpdate:p}};function Ft(){const{logWarning:e}=$();function t(a,i,l){let c=null;return a.traverse(o=>{o[i]===l&&(c=o)}),c||e(`Child with ${i} '${l}' not found.`),c}function n(a,i,l){const c=[];return a.traverse(o=>{o[i].includes(l)&&c.push(o)}),c.length||e(`Children with ${i} '${l}' not found.`),c}function r(a,i){return t(a,"name",i)}function s(a,i){return n(a,"name",i)}return{seek:t,seekByName:r,seekAll:n,seekAllByName:s}}function he(e){let t=0;return e.traverse(n=>{if(n.isMesh&&n.geometry){const r=n.geometry,s=r.attributes.position.count*3*Float32Array.BYTES_PER_ELEMENT,a=r.index?r.index.count*Uint32Array.BYTES_PER_ELEMENT:0,i=r.attributes.normal?r.attributes.normal.count*3*Float32Array.BYTES_PER_ELEMENT:0,l=r.attributes.uv?r.attributes.uv.count*2*Float32Array.BYTES_PER_ELEMENT:0,c=s+a+i+l;t+=c}}),t}function Wt(e){return(e/1024).toFixed(2)}const ae=d.ref({}),le=e=>Object.assign(ae.value,e);function Fe(e,t,n){var x;const r=d.shallowRef(),s=d.shallowRef();e&&(r.value=e),t&&(s.value=t);const a=p=>{var S;return((S=p.__tres)==null?void 0:S.eventCount)>0},i=p=>{var S;return((S=p.children)==null?void 0:S.some(T=>i(T)))||a(p)},l=d.shallowRef(((x=r.value)==null?void 0:x.children).filter(i)||[]);function c(p,S){if(Array.isArray(p))for(const T of p)T(S);typeof p=="function"&&p(S)}function o(p,S){const T=[],E=()=>S.stopPropagating=!0;S.stopPropagation=E;for(const N of S==null?void 0:S.intersections){if(S.stopPropagating)return;S={...S,...N};const{object:I}=N;S.eventObject=I,c(I[p],S),T.push(I);let R=I.parent;for(;R!==null&&!S.stopPropagating&&!T.includes(R);)S.eventObject=R,c(R[p],S),T.push(R),R=R.parent;const K=Mt(p.slice(2));n(K,{intersection:N,event:S})}}const{onClick:f,onDblClick:_,onContextMenu:u,onPointerMove:b,onPointerDown:m,onPointerUp:k,onPointerMissed:h,onWheel:w,forceUpdate:y}=Ve(l,t);k(p=>o("onPointerUp",p)),m(p=>o("onPointerDown",p)),f(p=>o("onClick",p)),_(p=>o("onDoubleClick",p)),u(p=>o("onContextMenu",p)),w(p=>o("onWheel",p));let O=[];b(p=>{const S=p.intersections.map(({object:E})=>E),T=p.intersections;O.forEach(({object:E})=>{S.includes(E)||(p.intersections=O,o("onPointerLeave",p),o("onPointerOut",p))}),p.intersections=T,p.intersections.forEach(({object:E})=>{O.includes(E)||(o("onPointerEnter",p),o("onPointerOver",p))}),o("onPointerMove",p),O=p.intersections});const L=[];h(p=>{const S=()=>p.stopPropagating=!0;p.stopPropagation=S,L.forEach(T=>{p.stopPropagating||(p.eventObject=T,c(T.onPointerMissed,p))}),n("pointer-missed",{event:p})});function D(p){te(p)&&F(p)&&l.value.push(p)}function A(p){if(te(p)&&F(p)){const S=l.value.indexOf(p);S>-1&&l.value.splice(S,1)}}function P(p){te(p)&&F(p)&&p.onPointerMissed&&L.push(p)}function B(p){if(te(p)&&F(p)){const S=L.indexOf(p);S>-1&&L.splice(S,1)}}return t.eventManager={forceUpdate:y,registerObject:D,deregisterObject:A,registerPointerMissedObject:P,deregisterPointerMissedObject:B},{forceUpdate:y,registerObject:D,deregisterObject:A,registerPointerMissedObject:P,deregisterPointerMissedObject:B}}function Nt(e,t,n=10){const r=M.toValue(e)?M.useWindowSize():M.useElementSize(d.computed(()=>M.toValue(t).parentElement)),s=d.readonly(M.refDebounced(r.width,n)),a=d.readonly(M.refDebounced(r.height,n)),i=d.computed(()=>s.value/a.value);return{height:a,width:s,aspectRatio:i}}function ge(){const e=new Map,t=new Set;let n=0,r=!1;const s=()=>{const o=Array.from(e.entries()).sort((f,_)=>{const u=f[1].priority-_[1].priority;return u===0?f[1].addI-_[1].addI:u});t.clear(),o.forEach(f=>t.add(f[0]))},a=o=>{e.delete(o),t.delete(o)};return{on:(o,f=0)=>{e.set(o,{priority:f,addI:n++});const _=()=>a(o);return M.tryOnScopeDispose(_),r=!0,{off:_}},off:a,trigger:(...o)=>{r&&(s(),r=!1),t.forEach(f=>f(...o))},dispose:()=>{e.clear(),t.clear()},get count(){return e.size}}}function We(){let e=!0,t=!0,n=!1;const r=new v.Clock(!1),s=d.ref(r.running),a=d.ref(!1);let i;const l=v.MathUtils.generateUUID();let c=null;const o=ge(),f=ge(),_=ge();A();let u={};function b(P){u=P}function m(P,B,x=0){switch(B){case"before":return o.on(P,x);case"render":return c||(c=P),f.dispose(),f.on(P);case"after":return _.on(P,x)}}function k(){t&&(t=!1,A(),D())}function h(){t=!0,A(),cancelAnimationFrame(i)}function w(){n=!1,A()}function y(){n=!0,A()}function O(){a.value=!0}function L(){a.value=!1}function D(){if(!e){i=requestAnimationFrame(D);return}const P=r.getDelta(),B=r.getElapsedTime(),x={camera:d.unref(u.camera),scene:d.unref(u.scene),renderer:d.unref(u.renderer),raycaster:d.unref(u.raycaster),controls:d.unref(u.controls),invalidate:u.invalidate,advance:u.advance},p={delta:P,elapsed:B,clock:r,...x};s.value&&o.trigger(p),a.value||(f.count?f.trigger(p):c&&c(p)),s.value&&_.trigger(p),i=requestAnimationFrame(D)}function A(){const P=!t&&!n;r.running!==P&&(r.running?r.stop():r.start()),s.value=r.running}return{loopId:l,register:(P,B,x)=>m(P,B,x),start:k,stop:h,pause:y,resume:w,pauseRender:O,resumeRender:L,isRenderPaused:a,isActive:s,setContext:b,setReady:P=>e=P}}function zt(e,t,n=100){n=n<=0?100:n;const r=M.createEventHook(),s=new Set;let a=!1,i=!1,l=null;function c(){l&&clearTimeout(l),!i&&!a&&e()?(r.trigger(t),s.forEach(u=>u()),s.clear(),a=!0):!i&&!a&&(l=setTimeout(c,n))}function o(){i=!0,l&&clearTimeout(l)}c();const f=(u,...b)=>{u(...b)};return{on:u=>{if(a)return f(u,t),{off:()=>{}};{const b=r.on(u);return s.add(b.off),r.on(u)}},off:r.off,trigger:r.trigger,cancel:o}}const X=new WeakMap;function Ne(e){if(e=e||H(),X.has(e))return X.get(e);const t=100,n=Date.now(),a=zt(()=>{if(Date.now()-n>=t)return!0;{const i=e.renderer.value,l=(i==null?void 0:i.domElement)||{width:0,height:0};return!!(i&&l.width>0&&l.height>0)}},e);return X.set(e,a),a}function Gt(e){const t=H();if(t)return X.has(t)?X.get(t).on(e):Ne(t).on(e)}function ze({scene:e,canvas:t,windowSize:n,disableRender:r,rendererOptions:s,emit:a}){const{logWarning:i}=$(),l=d.shallowRef(e),c=Nt(n,t),{camera:o,cameras:f,registerCamera:_,deregisterCamera:u,setCameraActive:b}=Ce({sizes:c,scene:e}),m={mode:d.ref(s.renderMode||"always"),priority:d.ref(0),frames:d.ref(0),maxFrames:60,canBeInvalidated:d.computed(()=>m.mode.value==="on-demand"&&m.frames.value===0)};function k(I=1){s.renderMode==="on-demand"?m.frames.value=Math.min(m.maxFrames,m.frames.value+I):i("`invalidate` can only be used when `renderMode` is set to `on-demand`")}function h(){s.renderMode==="manual"?m.frames.value=1:i("`advance` can only be used when `renderMode` is set to `manual`")}const{renderer:w}=$e({scene:e,canvas:t,options:s,emit:a,contextParts:{sizes:c,camera:o,render:m,invalidate:k,advance:h},disableRender:r}),y={sizes:c,scene:l,camera:o,cameras:d.readonly(f),renderer:w,raycaster:d.shallowRef(new v.Raycaster),controls:d.ref(null),perf:{maxFrames:160,fps:{value:0,accumulator:[]},memory:{currentMem:0,allocatedMem:0,accumulator:[]}},render:m,advance:h,extend:le,invalidate:k,registerCamera:_,setCameraActive:b,deregisterCamera:u,loop:We()};d.provide("useTres",y),y.scene.value.__tres={root:y},y.loop.register(()=>{o.value&&m.frames.value>0&&(w.value.render(e,o.value),a("render",y.renderer.value)),m.priority.value=0,m.mode.value==="always"?m.frames.value=1:m.frames.value=Math.max(0,m.frames.value-1)},"render");const{on:O,cancel:L}=Ne(y);y.loop.setReady(!1),y.loop.start(),O(()=>{a("ready",y),y.loop.setReady(!0),Fe(e,y,a)}),d.onUnmounted(()=>{L(),y.loop.stop()});const D=100,A=M.useFps({every:D}),{isSupported:P,memory:B}=M.useMemory({interval:D}),x=160;let p=performance.now();const S=({timestamp:I})=>{y.scene.value&&(y.perf.memory.allocatedMem=he(y.scene.value)),I-p>=D&&(p=I,y.perf.fps.accumulator.push(A.value),y.perf.fps.accumulator.length>x&&y.perf.fps.accumulator.shift(),y.perf.fps.value=A.value,P.value&&B.value&&(y.perf.memory.accumulator.push(B.value.usedJSHeapSize/1024/1024),y.perf.memory.accumulator.length>x&&y.perf.memory.accumulator.shift(),y.perf.memory.currentMem=y.perf.memory.accumulator.reduce((R,K)=>R+K,0)/y.perf.memory.accumulator.length))};let T=0;const E=1,{pause:N}=M.useRafFn(({delta:I})=>{window.__TRES__DEVTOOLS__&&(S({timestamp:performance.now()}),T+=I,T>=E&&(window.__TRES__DEVTOOLS__.cb(y),T=0))},{immediate:!0});return d.onUnmounted(()=>{N()}),y}function H(){const e=d.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const qt=H;function Yt(){const{camera:e,scene:t,renderer:n,loop:r,raycaster:s,controls:a,invalidate:i,advance:l}=H();r.setContext({camera:e,scene:t,renderer:n,raycaster:s,controls:a,invalidate:i,advance:l});function c(_,u=0){return r.register(_,"before",u)}function o(_){return r.register(_,"render")}function f(_,u=0){return r.register(_,"after",u)}return{pause:r.pause,resume:r.resume,pauseRender:r.pauseRender,resumeRender:r.resumeRender,isActive:r.isActive,onBeforeRender:c,render:o,onAfterRender:f}}function Jt(e,t={},n={}){let r=e;const s=l=>{r=l};let a=new Proxy({},{});const i={has(l,c){return c in t||c in r},get(l,c,o){return c in t?t[c](r):r[c]},set(l,c,o){return n[c]?n[c](o,r,a,s):r[c]=o,!0}};return a=new Proxy({},i),a}const{logError:Ge}=$(),qe=["onClick","onContextMenu","onPointerMove","onPointerEnter","onPointerLeave","onPointerOver","onPointerOut","onDoubleClick","onPointerDown","onPointerUp","onPointerCancel","onPointerMissed","onLostPointerCapture","onWheel"],Kt=e=>{const t=e.scene.value;function n(o,f,_,u){if(u||(u={}),u.args||(u.args=[]),o==="template"||bt(o))return null;let b=o.replace("Tres",""),m;if(o==="primitive"){(!V(u.object)||d.isRef(u.object))&&Ge("Tres primitives need an 'object' prop, whose value is an object or shallowRef<object>"),b=u.object.type;const k={};m=Jt(u.object,{object:w=>w,isPrimitive:()=>!0,__tres:()=>k},{object:(w,y,O,L)=>{Rt(w,O,L,{patchProp:a,remove:s,insert:r},e)},__tres:w=>{Object.assign(k,w)}})}else{const k=ae.value[b];k||Ge(`${b} is not defined on the THREE namespace. Use extend to add it to the catalog.`),m=new k(...u.args)}return m?(m.isCamera&&(u!=null&&u.position||m.position.set(3,3,3),u!=null&&u.lookAt||m.lookAt(0,0,0)),m=q(m,{...m.__tres,type:b,memoizedProps:u,eventCount:0,primitive:o==="primitive",attach:u.attach},e),m):null}function r(o,f){var b,m,k;if(!o)return;f=f||t;const _=o.__tres?o:q(o,{},e),u=f.__tres?f:q(f,{},e);o=Y(_),f=Y(u),o.__tres&&((b=o.__tres)==null?void 0:b.eventCount)>0&&((m=e.eventManager)==null||m.registerObject(o)),e.registerCamera(o),(k=e.eventManager)==null||k.registerPointerMissedObject(o),_.__tres.attach?xt(u,_,_.__tres.attach):F(o)&&F(u)&&(u.add(o),o.dispatchEvent({type:"added"})),_.__tres.parent=u,u.__tres.objects&&!u.__tres.objects.includes(_)&&u.__tres.objects.push(_)}function s(o,f){var m,k,h,w;if(!o)return;o!=null&&o.__tres&&((m=o.__tres)==null?void 0:m.eventCount)>0&&((k=e.eventManager)==null||k.deregisterObject(o)),f=fe(f)?"default":f;const _=(h=o.__tres)==null?void 0:h.dispose;fe(_)||(_===null?f=!1:f=_);const u=(w=o.__tres)==null?void 0:w.primitive,b=f==="default"?!u:!!f;if(o.__tres&&"objects"in o.__tres&&[...o.__tres.objects].forEach(y=>s(y,f)),b&&o.children&&[...o.children].forEach(y=>s(y,f)),Re(o,e),Ee(o,e),b&&!dt(o)){if(G(f))f(o);else if(G(o.dispose))try{o.dispose()}catch{}}"__tres"in o&&delete o.__tres}function a(o,f,_,u){var y,O;if(!o)return;let b=o,m=f;if(o.__tres&&(o.__tres.memoizedProps[f]=u),f==="attach"){const L=((y=o.__tres)==null?void 0:y.parent)||o.parent;s(o),q(o,{attach:u},e),L&&r(o,L);return}if(f==="dispose"){o.__tres||(o=q(o,{},e)),o.__tres.dispose=u;return}if(F(o)&&m==="blocks-pointer-events"){u||u===""?o[m]=u:delete o[m];return}qe.includes(f)&&o.__tres&&(o.__tres.eventCount+=1);let k=se(m),h=b==null?void 0:b[k];if(m==="args"){const L=o,D=_??[],A=u??[],P=((O=o.__tres)==null?void 0:O.type)||o.type;P&&D.length&&!kt(D,A)&&(b=Object.assign(L,new ae.value[P](...u)));return}if(b.type==="BufferGeometry"){if(m==="args")return;b.setAttribute(se(m),new v.BufferAttribute(...u));return}if(m.includes("-")&&h===void 0){const L=m.split("-");h=L.reduce((D,A)=>D[se(A)],b),m=L.pop(),k=m,h!=null&&h.set||(b=L.reduce((D,A)=>D[se(A)],b))}let w=u;if(w===""&&(w=!0),G(h)){qe.includes(f)||(ee(w)?o[k](...w):o[k](w)),k.startsWith("on")&&G(w)&&(b[k]=w);return}!(h!=null&&h.set)&&!G(h)?b[k]=w:h.constructor===w.constructor&&(h!=null&&h.copy)?h==null||h.copy(w):ee(w)?h.set(...w):!h.isColor&&h.setScalar?h.setScalar(w):h.set(w),Ie(o)}function i(o){var f;return((f=o==null?void 0:o.__tres)==null?void 0:f.parent)||null}function l(o){const f=q(new v.Object3D,{type:"Comment"},e);return f.name=o,f}function c(o){var b;const f=i(o),_=((b=f==null?void 0:f.__tres)==null?void 0:b.objects)||[],u=_.indexOf(o);return u<0||u>=_.length-1?null:_[u+1]}return{insert:r,remove:s,createElement:n,patchProp:a,parentNode:i,createText:()=>void 0,createComment:l,setText:()=>void 0,setElementText:()=>void 0,nextSibling:c,querySelector:()=>void 0,setScopeId:()=>void 0,cloneNode:()=>void 0,insertStaticContent:()=>void 0}};function Qt(){return Ye().__VUE_DEVTOOLS_GLOBAL_HOOK__}function Ye(){return typeof navigator<"u"&&typeof window<"u"?window:typeof globalThis<"u"?globalThis:{}}const Xt=typeof Proxy=="function",Ht="devtools-plugin:setup",Zt="plugin:settings:set";let J,ve;function en(){var e;return J!==void 0||(typeof window<"u"&&window.performance?(J=!0,ve=window.performance):typeof globalThis<"u"&&(!((e=globalThis.perf_hooks)===null||e===void 0)&&e.performance)?(J=!0,ve=globalThis.perf_hooks.performance):J=!1),J}function tn(){return en()?ve.now():Date.now()}class nn{constructor(t,n){this.target=null,this.targetQueue=[],this.onQueue=[],this.plugin=t,this.hook=n;const r={};if(t.settings)for(const i in t.settings){const l=t.settings[i];r[i]=l.defaultValue}const s=`__vue-devtools-plugin-settings__${t.id}`;let a=Object.assign({},r);try{const i=localStorage.getItem(s),l=JSON.parse(i);Object.assign(a,l)}catch{}this.fallbacks={getSettings(){return a},setSettings(i){try{localStorage.setItem(s,JSON.stringify(i))}catch{}a=i},now(){return tn()}},n&&n.on(Zt,(i,l)=>{i===this.plugin.id&&this.fallbacks.setSettings(l)}),this.proxiedOn=new Proxy({},{get:(i,l)=>this.target?this.target.on[l]:(...c)=>{this.onQueue.push({method:l,args:c})}}),this.proxiedTarget=new Proxy({},{get:(i,l)=>this.target?this.target[l]:l==="on"?this.proxiedOn:Object.keys(this.fallbacks).includes(l)?(...c)=>(this.targetQueue.push({method:l,args:c,resolve:()=>{}}),this.fallbacks[l](...c)):(...c)=>new Promise(o=>{this.targetQueue.push({method:l,args:c,resolve:o})})})}async setRealTarget(t){this.target=t;for(const n of this.onQueue)this.target.on[n.method](...n.args);for(const n of this.targetQueue)n.resolve(await this.target[n.method](...n.args))}}function rn(e,t){const n=e,r=Ye(),s=Qt(),a=Xt&&n.enableEarlyProxy;if(s&&(r.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__||!a))s.emit(Ht,e,t);else{const i=a?new nn(n,s):null;(r.__VUE_DEVTOOLS_PLUGINS__=r.__VUE_DEVTOOLS_PLUGINS__||[]).push({pluginDescriptor:n,setupFn:t,proxy:i}),i&&t(i.proxiedTarget)}}function on(e,t){const n=`▲ ■ ●${e}`;typeof Je=="function"?Je(n,t):console.log(n)}function Je(e,t){throw new Error(e+t)}const Ke=e=>{const t={id:e.uuid,label:e.type,children:[],tags:[]};e.name!==""&&t.tags.push({label:e.name,textColor:5750629,backgroundColor:15793395});const n=he(e);return n>0&&t.tags.push({label:`${Wt(n)} KB`,textColor:15707189,backgroundColor:16775644,tooltip:"Memory usage"}),e.type.includes("Light")&&(t.tags.push({label:`${e.intensity}`,textColor:9738662,backgroundColor:16316922,tooltip:"Intensity"}),t.tags.push({label:`#${e.color.getHexString()}`,textColor:9738662,backgroundColor:16316922,tooltip:"Color"})),e.type.includes("Camera")&&(t.tags.push({label:`${e.fov}°`,textColor:9738662,backgroundColor:16316922,tooltip:"Field of view"}),t.tags.push({label:`x: ${Math.round(e.position.x)} y: ${Math.round(e.position.y)} z: ${Math.round(e.position.z)}`,textColor:9738662,backgroundColor:16316922,tooltip:"Position"})),t};function Qe(e,t,n=""){e.children.forEach(r=>{if(r.type==="HightlightMesh"||n&&!r.type.includes(n)&&!r.name.includes(n))return;const s=Ke(r);t.children.push(s),Qe(r,s,n)})}const sn=[],Z="tres:inspector",an=d.reactive({sceneGraph:null});function ln(e,t){rn({id:"dev.esm.tres",label:"TresJS 🪐",logo:"https://raw.githubusercontent.com/Tresjs/tres/main/public/favicon.svg",packageName:"tresjs",homepage:"https://tresjs.org",componentStateTypes:sn,app:e},n=>{typeof n.now!="function"&&on("You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html."),n.addInspector({id:Z,label:"TresJS 🪐",icon:"account_tree",treeFilterPlaceholder:"Search instances"}),setInterval(()=>{n.sendInspectorTree(Z)},1e3),setInterval(()=>{n.notifyComponentUpdate()},5e3),n.on.getInspectorTree(a=>{if(a.inspectorId===Z){const i=Ke(t.scene.value);Qe(t.scene.value,i,a.filter),an.sceneGraph=i,a.rootNodes=[i]}});let r=null,s=null;n.on.getInspectorState(a=>{var i;if(a.inspectorId===Z){const[l]=t.scene.value.getObjectsByProperty("uuid",a.nodeId);if(!l)return;if(s&&r&&r.parent&&s.remove(r),l.isMesh){const c=Ot(l);l.add(c),r=c,s=l}a.state={object:Object.entries(l).map(([c,o])=>({key:c,value:o,editable:!0})).filter(({key:c})=>c!=="parent")},l.isScene&&(a.state.info={memory:he(l),objects:l.children.length,calls:t.renderer.value.info.render.calls,triangles:t.renderer.value.info.render.triangles,points:t.renderer.value.info.render.points,lines:t.renderer.value.info.render.lines},a.state.programs=((i=t.renderer.value.info.programs)==null?void 0:i.map(c=>({key:c.name,value:{...c,vertexShader:c.vertexShader,attributes:c.getAttributes(),uniforms:c.getUniforms()}})))||[])}}),n.on.editInspectorState(a=>{a.inspectorId===Z&&Lt(t.scene.value,a.nodeId,a.path,a.state.value)})})}const cn=["data-scene","data-tres"],Xe=d.defineComponent({__name:"TresCanvas",props:{shadows:{type:Boolean,default:void 0},clearColor:{},toneMapping:{},shadowMapType:{},useLegacyLights:{type:Boolean,default:void 0},outputColorSpace:{},toneMappingExposure:{},renderMode:{default:"always"},dpr:{},camera:{},preset:{},windowSize:{type:Boolean,default:void 0},disableRender:{type:Boolean,default:void 0},context:{},precision:{},alpha:{type:Boolean,default:void 0},premultipliedAlpha:{type:Boolean},antialias:{type:Boolean,default:void 0},stencil:{type:Boolean,default:void 0},preserveDrawingBuffer:{type:Boolean,default:void 0},powerPreference:{},depth:{type:Boolean,default:void 0},logarithmicDepthBuffer:{type:Boolean,default:void 0},failIfMajorPerformanceCaveat:{type:Boolean,default:void 0}},emits:["render","click","double-click","context-menu","pointer-move","pointer-up","pointer-down","pointer-enter","pointer-leave","pointer-over","pointer-out","pointer-missed","wheel","ready"],setup(e,{expose:t,emit:n}){var k;const r=e,s=n,a=d.useSlots(),{logWarning:i}=$(),l=d.ref(),c=d.shallowRef(new v.Scene),o=(k=d.getCurrentInstance())==null?void 0:k.appContext.app;le(_e);const f=h=>d.defineComponent({setup(){var y;const w=(y=d.getCurrentInstance())==null?void 0:y.appContext;return w&&(w.app=o),d.provide("useTres",h),d.provide("extend",le),typeof window<"u"&&ln(w==null?void 0:w.app,h),()=>d.h(d.Fragment,null,a!=null&&a.default?a.default():[])}}),_=h=>{const w=f(h),{render:y}=d.createRenderer(Kt(h));y(d.h(w),c.value)},u=(h,w=!1)=>{pe(h.scene.value),w&&(h.renderer.value.dispose(),h.renderer.value.renderLists.dispose(),h.renderer.value.forceContextLoss()),c.value.__tres={root:h},_(h)},b=d.computed(()=>r.disableRender),m=d.shallowRef(null);return t({context:m,dispose:()=>u(m.value,!0)}),d.onMounted(()=>{const h=l;m.value=ze({scene:c.value,canvas:h,windowSize:r.windowSize??!1,disableRender:b.value??!1,rendererOptions:r,emit:s});const{registerCamera:w,camera:y,cameras:O,deregisterCamera:L}=m.value;_(m.value);const D=()=>{const A=new v.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);A.position.set(3,3,3),A.lookAt(0,0,0),w(A);const P=d.watchEffect(()=>{O.value.length>=2&&(A.removeFromParent(),L(A),P==null||P())})};d.watch(()=>r.camera,(A,P)=>{A&&w(A),P&&(P.removeFromParent(),L(P))},{immediate:!0}),y.value||(i("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),D())}),d.onUnmounted(()=>{u(m.value)}),(h,w)=>(d.openBlock(),d.createElementBlock("canvas",{ref_key:"canvas",ref:l,"data-scene":c.value.uuid,class:d.normalizeClass(h.$attrs.class),"data-tres":`tresjs ${d.unref(at).version}`,style:d.normalizeStyle({display:"block",width:"100%",height:"100%",position:h.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none",...h.$attrs.style})},null,14,cn))}}),un=["TresCanvas","TresLeches","TresScene"],fn={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!un.includes(e)||e==="primitive"}}},dn={mounted:(e,t)=>{if(t.arg){console.log(`v-log:${t.arg}`,e[t.arg]);return}console.log("v-log",e)}};class He extends v.Line{constructor(t,n){const r=[1,1,0,-1,1,0,-1,-1,0,1,-1,0,1,1,0],s=new v.BufferGeometry;s.setAttribute("position",new v.Float32BufferAttribute(r,3)),s.computeBoundingSphere();const a=new v.LineBasicMaterial({fog:!1});super(s,a),this.light=t,this.color=n,this.type="RectAreaLightHelper";const i=[1,1,0,-1,1,0,-1,-1,0,1,1,0,-1,-1,0,1,-1,0],l=new v.BufferGeometry;l.setAttribute("position",new v.Float32BufferAttribute(i,3)),l.computeBoundingSphere(),this.add(new v.Mesh(l,new v.MeshBasicMaterial({side:v.BackSide,fog:!1})))}updateMatrixWorld(){if(this.scale.set(.5*this.light.width,.5*this.light.height,1),this.color!==void 0)this.material.color.set(this.color),this.children[0].material.color.set(this.color);else{this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);const t=this.material.color,n=Math.max(t.r,t.g,t.b);n>1&&t.multiplyScalar(1/n),this.children[0].material.color.copy(this.material.color)}this.matrixWorld.extractRotation(this.light.matrixWorld).scale(this.scale).copyPosition(this.light.matrixWorld),this.children[0].matrixWorld.copy(this.matrixWorld)}dispose(){this.geometry.dispose(),this.material.dispose(),this.children[0].geometry.dispose(),this.children[0].material.dispose()}}const{logWarning:Ze}=$();let ce,W;const pn={DirectionalLight:v.DirectionalLightHelper,PointLight:v.PointLightHelper,SpotLight:v.SpotLightHelper,HemisphereLight:v.HemisphereLightHelper,RectAreaLight:He},mn={mounted:e=>{if(!e.isLight){Ze(`${e.type} is not a light`);return}ce=pn[e.type],e.parent.add(new ce(e,1,e.color.getHex()))},updated:e=>{W=e.parent.children.find(t=>t instanceof ce),!(W instanceof He)&&W.update()},unmounted:e=>{if(!e.isLight){Ze(`${e.type} is not a light`);return}W=e.parent.children.find(t=>t instanceof ce),W&&W.dispose&&W.dispose(),e.parent.remove(W)}},{logWarning:hn}=$();let U=null;const gn={updated:(e,t)=>{var s;const n=Dt(t);if(!n){hn(`v-distance-to: problem with binding value: ${t.value}`);return}U&&(U.dispose(),e.parent.remove(U));const r=n.clone().sub(e.position);r.normalize(),U=new v.ArrowHelper(r,e.position,e.position.distanceTo(n),16776960),e.parent.add(U),console.table([["Distance:",e.position.distanceTo(n)],[`origin: ${e.name||e.type}`,`x:${e.position.x}, y:${e.position.y}, z:${(s=e.position)==null?void 0:s.z}`],[`Destiny: ${e.name||e.type}`,`x:${n.x}, y:${n.y}, z:${n==null?void 0:n.z}`]])},unmounted:e=>{U==null||U.dispose(),e.parent.remove(U)}},vn={install(e){e.component("TresCanvas",Xe)}};C.TresCanvas=Xe,C.catalogue=ae,C.createRenderLoop=We,C.default=vn,C.dispose=pe,C.extend=le,C.isProd=yt,C.normalizeColor=Ae,C.normalizeVectorFlexibleParam=_t,C.onTresReady=Gt,C.templateCompilerOptions=fn,C.trasverseObjects=Ue,C.useCamera=Ce,C.useLoader=Ut,C.useLogger=$,C.useLoop=Yt,C.useRaycaster=Ve,C.useRenderLoop=vt,C.useRenderer=$e,C.useSeek=Ft,C.useTexture=Vt,C.useTres=qt,C.useTresContext=H,C.useTresContextProvider=ze,C.useTresEventManager=Fe,C.vDistanceTo=gn,C.vLightHelper=mn,C.vLog=dn,Object.defineProperties(C,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
8
+ (function(C,d){typeof exports=="object"&&typeof module<"u"?d(exports,require("vue"),require("three"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","three","@vueuse/core"],d):(C=typeof globalThis<"u"?globalThis:C||self,d(C.tres={},C.Vue,C.Three,C.VueUseCore))})(this,function(C,d,v,M){"use strict";var yn=Object.defineProperty;var _n=(C,d,v)=>d in C?yn(C,d,{enumerable:!0,configurable:!0,writable:!0,value:v}):C[d]=v;var ye=(C,d,v)=>_n(C,typeof d!="symbol"?d+"":d,v);function it(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const _e=it(v),at={name:"@tresjs/core",type:"module",version:"4.2.1",packageManager:"pnpm@9.1.4",description:"Declarative ThreeJS using Vue Components",author:"Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",license:"MIT",keywords:["vue","3d","threejs","three","threejs-vue"],sideEffects:!1,exports:{".":{types:"./dist/index.d.ts",import:"./dist/tres.js",require:"./dist/tres.umd.cjs"},"./components":{types:"./dist/src/components/index.d.ts"},"./composables":{types:"./dist/src/composables/index.d.ts"},"./types":{types:"./dist/src/types/index.d.ts"},"./utils":{types:"./dist/src/utils/index.d.ts"},"./*":"./*"},main:"./dist/tres.js",module:"./dist/tres.js",types:"./dist/index.d.ts",files:["*.d.ts","dist"],publishConfig:{access:"public"},scripts:{dev:"cd playground && npm run dev",build:"vite build",playground:"cd playground && npm run dev",test:"vitest","test:ci":"vitest run","test:ui":"vitest --ui --coverage.enabled=true",release:"release-it",coverage:"vitest run --coverage",lint:"eslint .","lint:fix":"eslint . --fix","docs:dev":"vitepress dev docs","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs","docs:preview":"vitepress preview docs","docs:contributors":"esno scripts/update-contributors.ts",prepare:"node .husky/install.mjs"},peerDependencies:{three:">=0.133",vue:">=3.4"},dependencies:{"@alvarosabu/utils":"^3.2.0","@vue/devtools-api":"^6.6.3","@vueuse/core":"^10.11.0"},devDependencies:{"@release-it/conventional-changelog":"^8.0.1","@stackblitz/sdk":"^1.11.0","@tresjs/cientos":"3.9.0","@tresjs/eslint-config":"^1.1.0","@types/three":"^0.166.0","@typescript-eslint/eslint-plugin":"^7.16.0","@typescript-eslint/parser":"^7.16.0","@vitejs/plugin-vue":"^5.0.5","@vitest/coverage-c8":"^0.33.0","@vitest/coverage-v8":"^2.0.2","@vitest/ui":"^2.0.2","@vue/test-utils":"^2.4.6",eslint:"^9.6.0","eslint-plugin-vue":"^9.27.0",esno:"^4.7.0",gsap:"^3.12.5",husky:"^9.0.11",jsdom:"^24.1.0",kolorist:"^1.8.0",ohmyfetch:"^0.4.21",pathe:"^1.1.2","release-it":"^17.5.0","rollup-plugin-analyzer":"^4.0.0","rollup-plugin-copy":"^3.5.0","rollup-plugin-visualizer":"^5.12.0",sponsorkit:"^0.14.6",three:"^0.166.1",unocss:"^0.61.3",unplugin:"^1.11.0","unplugin-vue-components":"^0.27.2",vite:"^5.3.3","vite-plugin-banner":"^0.7.1","vite-plugin-dts":"3.9.1","vite-plugin-inspect":"^0.8.4","vite-plugin-require-transform":"^1.0.21","vite-svg-loader":"^5.1.0",vitepress:"1.3.0",vitest:"^2.0.2",vue:"^3.4.31","vue-demi":"^0.14.8"}};function fe(e){return typeof e>"u"}function ee(e){return Array.isArray(e)}function lt(e){return typeof e=="number"}function we(e){return typeof e=="string"}function G(e){return typeof e=="function"}function V(e){return e===Object(e)&&!ee(e)&&!G(e)}function F(e){return V(e)&&"isObject3D"in e&&!!e.isObject3D}function be(e){return V(e)&&"isCamera"in e&&!!e.isCamera}function ct(e){return V(e)&&"isBufferGeometry"in e&&!!e.isBufferGeometry}function ut(e){return V(e)&&"isMaterial"in e&&!!e.isMaterial}function ft(e){return V(e)&&"isFog"in e&&!!e.isFog}function dt(e){return V(e)&&"isScene"in e&&!!e.isScene}function te(e){return F(e)||ct(e)||ut(e)||ft(e)}function pt(e){return V(e)&&!!e.isPrimitive}const Ce=({sizes:e})=>{const t=d.ref([]),n=d.computed(()=>t.value[0]),r=i=>{const l=i instanceof v.Camera?i:t.value.find(o=>o.uuid===i);if(!l)return;const c=t.value.filter(({uuid:o})=>o!==l.uuid);t.value=[l,...c]},s=(i,l=!1)=>{if(be(i)){const c=i;if(t.value.some(({uuid:o})=>o===c.uuid))return;l?r(c):t.value.push(c)}},a=i=>{if(be(i)){const l=i;t.value=t.value.filter(({uuid:c})=>c!==l.uuid)}};return d.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(i=>{!i.manual&&(i instanceof v.PerspectiveCamera||mt(i))&&(i instanceof v.PerspectiveCamera?i.aspect=e.aspectRatio.value:(i.left=e.width.value*-.5,i.right=e.width.value*.5,i.top=e.height.value*.5,i.bottom=e.height.value*-.5),i.updateProjectionMatrix())})}),d.onUnmounted(()=>{t.value=[]}),{camera:n,cameras:t,registerCamera:s,deregisterCamera:a,setCameraActive:r}};function mt(e){return e.hasOwnProperty("isOrthographicCamera")&&e.isOrthographicCamera}const Me=M.createEventHook(),Pe=M.createEventHook(),de=M.createEventHook(),Q=new v.Clock;let ne=0,re=0;const{pause:ht,resume:Se,isActive:gt}=M.useRafFn(()=>{Me.trigger({delta:ne,elapsed:re,clock:Q}),Pe.trigger({delta:ne,elapsed:re,clock:Q}),de.trigger({delta:ne,elapsed:re,clock:Q})},{immediate:!1});de.on(()=>{ne=Q.getDelta(),re=Q.getElapsedTime()});let ke=!1;const vt=()=>(ke||(ke=!0,Se()),{onBeforeLoop:Me.on,onLoop:Pe.on,onAfterLoop:de.on,pause:ht,resume:Se,isActive:gt}),yt=!0,oe="[TresJS ▲ ■ ●] ";function $(){function e(...r){typeof r[0]=="string"?r[0]=oe+r[0]:r.unshift(oe),console.error(...r)}function t(...r){typeof r[0]=="string"?r[0]=oe+r[0]:r.unshift(oe),console.warn(...r)}function n(r,s){}return{logError:e,logWarning:t,logMessage:n}}function _t(e){return typeof e=="number"?[e,e,e]:e instanceof v.Vector3?[e.x,e.y,e.z]:e}function Ae(e){return e instanceof v.Color?e:Array.isArray(e)?new v.Color(...e):new v.Color(e)}class wt extends _e.Mesh{constructor(...n){super(...n);ye(this,"type","HightlightMesh");ye(this,"createTime");this.createTime=Date.now()}onBeforeRender(){const r=(Date.now()-this.createTime)/1e3,i=1+.07*Math.sin(2.5*r);this.scale.set(i,i,i)}}const Le=(e,t)=>{for(const n of Object.keys(t))t[n]instanceof Object&&Object.assign(t[n],Le(e[n],t[n]));return Object.assign(e||{},t),e},bt=Pt("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot");function Oe(e){return e&&e.nodeType===1}function se(e){return e.replace(/-([a-z])/g,(t,n)=>n.toUpperCase())}const Ct=/\B([A-Z])/g;function Mt(e){return e.replace(Ct,"-$1").toLowerCase()}function Pt(e,t){const n=Object.create(null),r=e.split(",");for(let s=0;s<r.length;s++)n[r[s]]=!0;return s=>!!n[s]}const De=(e,t)=>{if(!t)return;const n=Array.isArray(t)?t:t.match(/([^[.\]])+/g);return n==null?void 0:n.reduce((r,s)=>r&&r[s],e)},St=(e,t,n)=>{const r=Array.isArray(t)?t:t.match(/([^[.\]])+/g);r&&r.reduce((s,a,i)=>(s[a]===void 0&&(s[a]={}),i===r.length-1&&(s[a]=n),s[a]),e)};function je(e,t){if(Oe(e)&&Oe(t)){const s=e.attributes,a=t.attributes;return s.length!==a.length?!1:Array.from(s).every(({name:i,value:l})=>t.getAttribute(i)===l)}if(e===t)return!0;if(e===null||typeof e!="object"||t===null||typeof t!="object")return!1;const n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(const s of n)if(!r.includes(s)||!je(e[s],t[s]))return!1;return!0}function kt(e,t){if(!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!je(e[n],t[n]))return!1;return!0}const At=Array.isArray;function Lt(e,t,n,r){const s=c=>{if(c.uuid===t)return c;for(const o of c.children){const u=s(o);if(u)return u}},a=s(e);if(!a){console.warn("Object with UUID not found in the scene.");return}let i=a;for(let c=0;c<n.length-1;c++)if(i[n[c]]!==void 0)i=i[n[c]];else{console.warn(`Property path is not valid: ${n.join(".")}`);return}const l=n[n.length-1];i[l]!==void 0?i[l]=r:console.warn(`Property path is not valid: ${n.join(".")}`)}function Ot(e){const t=new v.MeshBasicMaterial({color:11003607,transparent:!0,opacity:.2,depthTest:!1,side:v.DoubleSide});return new wt(e.geometry.clone(),t)}function Dt(e){var n;let t=e.value;return e.value&&((n=e.value)!=null&&n.isMesh)&&(t=e.value.position),Array.isArray(e.value)&&(t=new v.Vector3(...t)),t}function jt(e){return"map"in e}function Te(e){jt(e)&&e.map&&e.map.dispose(),e.dispose()}function pe(e){var n,r;if(e.parent&&((n=e.removeFromParent)==null||n.call(e)),delete e.__tres,[...e.children].forEach(s=>pe(s)),!(e instanceof v.Scene)){const s=e;e&&((r=e.dispose)==null||r.call(e)),s.geometry&&(s.geometry.dispose(),delete s.geometry),Array.isArray(s.material)?(s.material.forEach(a=>Te(a)),delete s.material):s.material&&(Te(s.material),delete s.material)}}function Tt(e,t){let n=0;for(let r=0;r<e.length;r++)t(e[r],r)&&(e[n]=e[r],n++);return e.length=n,e}function me(e,t){let n=e;if(t.includes("-")){const r=t.split("-");let s=r.shift();for(;n&&r.length;)s in n?(n=n[s],s=r.shift()):s=xe(s,r.shift());return{target:n,key:xe(s,...r)}}else return{target:n,key:t}}function xe(...e){return e.map((t,n)=>n===0?t:t.charAt(0).toUpperCase()+t.slice(1)).join("")}const Be=/-\d+$/;function xt(e,t,n){if(we(n)){if(Be.test(n)){const a=n.replace(Be,""),{target:i,key:l}=me(e,a);if(!Array.isArray(i[l])){const c=i[l],o=[];o.__tresDetach=()=>{o.every(u=>fe(u))&&(i[l]=c)},i[l]=o}}const{target:r,key:s}=me(e,n);t.__tres.previousAttach=r[s],r[s]=Y(t)}else t.__tres.previousAttach=n(e,t)}function Bt(e,t,n){var r,s,a;if(we(n)){const{target:i,key:l}=me(e,n),c=t.__tres.previousAttach;c===void 0?delete i[l]:i[l]=c,"__tresDetach"in i&&i.__tresDetach()}else(s=(r=t.__tres)==null?void 0:r.previousAttach)==null||s.call(r,e,t);(a=t.__tres)==null||delete a.previousAttach}function q(e,t,n){const r=e;return r.__tres={type:"unknown",eventCount:0,root:n,handlers:{},memoizedProps:{},objects:[],parent:null,previousAttach:null,...t},r.__tres.attach||(r.isMaterial?r.__tres.attach="material":r.isBufferGeometry?r.__tres.attach="geometry":r.isFog&&(r.__tres.attach="fog")),r}function Ie(e){var n;const t=(n=e==null?void 0:e.__tres)==null?void 0:n.root;t&&t.render&&t.render.canBeInvalidated.value&&t.invalidate()}function Vn(e){}function It(e,t,n){var s;if(!G(e.setPixelRatio))return;let r=0;if(ee(n)&&n.length>=2){const[a,i]=n;r=v.MathUtils.clamp(t,a,i)}else lt(n)?r=n:r=t;r!==((s=e.getPixelRatio)==null?void 0:s.call(e))&&e.setPixelRatio(r)}function Rt(e,t,n,r,s){const a=[...t.__tres.objects],i=Y(t);if(e=Y(e),i===e)return!0;const l=q(e,t.__tres??{},s),c=t.parent??t.__tres.parent??null,o={...t.__tres.memoizedProps};delete o.object;for(const u of a)Re(u,s),Ee(u,s);i.__tres.objects=[],r.remove(t);for(const[u,_]of Object.entries(o))r.patchProp(l,u,l[u],_);n(e),r.insert(t,c);for(const u of a)r.insert(u,t);return!0}function Y(e){return pt(e)?(e.object.__tres=e.__tres,e.object):e}function Re(e,t){var r,s,a,i;const n=((r=e.__tres)==null?void 0:r.parent)||t.scene.value;e.__tres&&(e.__tres.parent=null),n&&n.__tres&&"objects"in n.__tres&&Tt(n.__tres.objects,l=>l!==e),(s=e.__tres)!=null&&s.attach?Bt(n,e,e.__tres.attach):((i=(a=e.parent)==null?void 0:a.remove)==null||i.call(a,Y(e)),e.parent=null)}function Ee(e,t){var n;(n=e.traverse)==null||n.call(e,r=>{var s;t.deregisterCamera(r),(s=t.eventManager)==null||s.deregisterPointerMissedObject(r)}),t.deregisterCamera(e),Ie(e)}const Et=Number.parseInt(v.REVISION.replace("dev","")),ie={realistic:{shadows:!0,physicallyCorrectLights:!0,outputColorSpace:v.SRGBColorSpace,toneMapping:v.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:v.PCFSoftShadowMap}},flat:{toneMapping:v.NoToneMapping,toneMappingExposure:1}};function $e({canvas:e,options:t,contextParts:{sizes:n,render:r,invalidate:s,advance:a}}){const i=d.computed(()=>({alpha:M.toValue(t.alpha)??!0,depth:M.toValue(t.depth),canvas:M.unrefElement(e),context:M.toValue(t.context),stencil:M.toValue(t.stencil),antialias:M.toValue(t.antialias)??!0,precision:M.toValue(t.precision),powerPreference:M.toValue(t.powerPreference),premultipliedAlpha:M.toValue(t.premultipliedAlpha),preserveDrawingBuffer:M.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:M.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:M.toValue(t.failIfMajorPerformanceCaveat)})),l=d.shallowRef(new v.WebGLRenderer(i.value));function c(){t.renderMode==="on-demand"&&s()}d.watch(i,()=>{l.value.dispose(),l.value=new v.WebGLRenderer(i.value),c()}),d.watch([n.width,n.height],()=>{l.value.setSize(n.width.value,n.height.value),c()},{immediate:!0}),d.watch(()=>t.clearColor,c);const{pixelRatio:o}=M.useDevicePixelRatio(),{logError:u}=$(),f=(()=>{const m=new v.WebGLRenderer,k={shadowMap:{enabled:m.shadowMap.enabled,type:m.shadowMap.type},toneMapping:m.toneMapping,toneMappingExposure:m.toneMappingExposure,outputColorSpace:m.outputColorSpace};return m.dispose(),k})(),b=M.toValue(t.renderMode);return b==="on-demand"&&s(),b==="manual"&&setTimeout(()=>{a()},100),d.watchEffect(()=>{const m=M.toValue(t.preset);m&&(m in ie||u(`Renderer Preset must be one of these: ${Object.keys(ie).join(", ")}`),Le(l.value,ie[m])),It(l.value,o.value,M.toValue(t.dpr)),b==="always"&&(r.frames.value=Math.max(1,r.frames.value));const k=(y,O)=>{const L=M.toValue(y),D=()=>{if(m)return De(ie[m],O)};if(L!==void 0)return L;const A=D();return A!==void 0?A:De(f,O)},h=(y,O)=>St(l.value,O,k(y,O));h(t.shadows,"shadowMap.enabled"),h(t.toneMapping??v.ACESFilmicToneMapping,"toneMapping"),h(t.shadowMapType,"shadowMap.type"),Et<150&&h(!t.useLegacyLights,"physicallyCorrectLights"),h(t.outputColorSpace,"outputColorSpace"),h(t.toneMappingExposure,"toneMappingExposure");const w=k(t.clearColor,"clearColor");w&&l.value.setClearColor(w?Ae(w):new v.Color(0))}),d.onUnmounted(()=>{l.value.dispose(),l.value.forceContextLoss()}),{renderer:l}}const $t=e=>!!e&&e.constructor===Array;function Ue(e){const t={nodes:{},materials:{}};return e&&e.traverse(n=>{n.name&&(t.nodes[n.name]=n),n.material&&!t.materials[n.material.name]&&(t.materials[n.material.name]=n.material)}),t}async function Ut(e,t,n,r,s){const{logError:a}=$(),i=new e;s&&s(i),n&&n(i);const c=(Array.isArray(t)?t:[t]).map(o=>new Promise((u,_)=>{i.load(o,f=>{const b=f;b.scene&&Object.assign(b,Ue(b.scene)),u(b)},r,f=>_(a("[useLoader] - Failed to load resource",f)))}));return $t(t)?await Promise.all(c):await c[0]}async function Vt(e,t){const n=new v.TextureLoader(t),r=s=>new Promise((a,i)=>{n.load(s,l=>a(l),()=>null,()=>{i(new Error("[useTextures] - Failed to load texture"))})});if(At(e)){const s=await Promise.all(e.map(a=>r(a)));return e.length>1?s:s[0]}else{const{map:s,displacementMap:a,normalMap:i,roughnessMap:l,metalnessMap:c,aoMap:o,alphaMap:u,matcap:_}=e;return{map:s?await r(s):null,displacementMap:a?await r(a):null,normalMap:i?await r(i):null,roughnessMap:l?await r(l):null,metalnessMap:c?await r(c):null,aoMap:o?await r(o):null,alphaMap:u?await r(u):null,matcap:_?await r(_):null}}}const Ve=(e,t)=>{const n=d.computed(()=>t.renderer.value.domElement),r=d.shallowRef([]),{x:s,y:a}=M.usePointer({target:n});let i=0;const{width:l,height:c,top:o,left:u}=M.useElementBounding(n),_=({x:g,y:j})=>{if(n.value)return{x:(g-u.value)/l.value*2-1,y:-((j-o.value)/c.value)*2+1}},f=({x:g,y:j})=>{if(t.camera.value)return t.raycaster.value.setFromCamera(new v.Vector2(g,j),t.camera.value),r.value=t.raycaster.value.intersectObjects(e.value,!0),r.value},b=g=>{const j=_({x:(g==null?void 0:g.clientX)??s.value,y:(g==null?void 0:g.clientY)??a.value});return j?f(j)||[]:[]},m=M.createEventHook(),k=M.createEventHook(),h=M.createEventHook(),w=M.createEventHook(),y=M.createEventHook(),O=M.createEventHook(),L=M.createEventHook(),D=M.createEventHook();function A(g){const j={};for(const z in g)typeof z!="function"&&(j[z]=g[z]);return j}const P=(g,j)=>{var rt,ot,st;const z=A(j),ue=new v.Vector3(j==null?void 0:j.clientX,j==null?void 0:j.clientY,0).unproject((rt=t.camera)==null?void 0:rt.value);g.trigger({...z,intersections:r.value,unprojectedPoint:ue,ray:(ot=t.raycaster)==null?void 0:ot.value.ray,camera:(st=t.camera)==null?void 0:st.value,sourceEvent:j,delta:i,stopPropagating:!1})};let B;const x=g=>{b(g),P(h,g),B=g},p=()=>{B&&x(B)};let S,T,E;const N=g=>{var j;S=(j=r.value[0])==null?void 0:j.object,i=0,T=new v.Vector2((g==null?void 0:g.clientX)??s.value,(g==null?void 0:g.clientY)??a.value),P(y,g)};let I,R=!1;const K=g=>{var j,z,ue;g instanceof PointerEvent&&(r.value.length===0&&P(O,g),S===((j=r.value[0])==null?void 0:j.object)&&(E=new v.Vector2((g==null?void 0:g.clientX)??s.value,(g==null?void 0:g.clientY)??a.value),i=T==null?void 0:T.distanceTo(E),g.button===0?(P(m,g),I===((z=r.value[0])==null?void 0:z.object)?R=!0:(I=(ue=r.value[0])==null?void 0:ue.object,R=!1)):g.button===2&&P(L,g)),P(w,g))},et=g=>{R&&(P(k,g),I=void 0,R=!1)},tt=g=>P(h,g),nt=g=>P(D,g);return n.value.addEventListener("pointerup",K),n.value.addEventListener("pointerdown",N),n.value.addEventListener("pointermove",x),n.value.addEventListener("pointerleave",tt),n.value.addEventListener("dblclick",et),n.value.addEventListener("wheel",nt),d.onUnmounted(()=>{n!=null&&n.value&&(n.value.removeEventListener("pointerup",K),n.value.removeEventListener("pointerdown",N),n.value.removeEventListener("pointermove",x),n.value.removeEventListener("pointerleave",tt),n.value.removeEventListener("dblclick",et),n.value.removeEventListener("wheel",nt))}),{intersects:r,onClick:g=>m.on(g).off,onDblClick:g=>k.on(g).off,onContextMenu:g=>L.on(g).off,onPointerMove:g=>h.on(g).off,onPointerUp:g=>w.on(g).off,onPointerDown:g=>y.on(g).off,onPointerMissed:g=>O.on(g).off,onWheel:g=>D.on(g).off,forceUpdate:p}};function Ft(){const{logWarning:e}=$();function t(a,i,l){let c=null;return a.traverse(o=>{o[i]===l&&(c=o)}),c||e(`Child with ${i} '${l}' not found.`),c}function n(a,i,l){const c=[];return a.traverse(o=>{o[i].includes(l)&&c.push(o)}),c.length||e(`Children with ${i} '${l}' not found.`),c}function r(a,i){return t(a,"name",i)}function s(a,i){return n(a,"name",i)}return{seek:t,seekByName:r,seekAll:n,seekAllByName:s}}function he(e){let t=0;return e.traverse(n=>{if(n.isMesh&&n.geometry){const r=n.geometry,s=r.attributes.position.count*3*Float32Array.BYTES_PER_ELEMENT,a=r.index?r.index.count*Uint32Array.BYTES_PER_ELEMENT:0,i=r.attributes.normal?r.attributes.normal.count*3*Float32Array.BYTES_PER_ELEMENT:0,l=r.attributes.uv?r.attributes.uv.count*2*Float32Array.BYTES_PER_ELEMENT:0,c=s+a+i+l;t+=c}}),t}function Wt(e){return(e/1024).toFixed(2)}const ae=d.ref({}),le=e=>Object.assign(ae.value,e);function Fe(e,t,n){var x;const r=d.shallowRef(),s=d.shallowRef();e&&(r.value=e),t&&(s.value=t);const a=p=>{var S;return((S=p.__tres)==null?void 0:S.eventCount)>0},i=p=>{var S;return((S=p.children)==null?void 0:S.some(T=>i(T)))||a(p)},l=d.shallowRef(((x=r.value)==null?void 0:x.children).filter(i)||[]);function c(p,S){if(Array.isArray(p))for(const T of p)T(S);typeof p=="function"&&p(S)}function o(p,S){const T=[],E=()=>S.stopPropagating=!0;S.stopPropagation=E;for(const N of S==null?void 0:S.intersections){if(S.stopPropagating)return;S={...S,...N};const{object:I}=N;S.eventObject=I,c(I[p],S),T.push(I);let R=I.parent;for(;R!==null&&!S.stopPropagating&&!T.includes(R);)S.eventObject=R,c(R[p],S),T.push(R),R=R.parent;const K=Mt(p.slice(2));n(K,{intersection:N,event:S})}}const{onClick:u,onDblClick:_,onContextMenu:f,onPointerMove:b,onPointerDown:m,onPointerUp:k,onPointerMissed:h,onWheel:w,forceUpdate:y}=Ve(l,t);k(p=>o("onPointerUp",p)),m(p=>o("onPointerDown",p)),u(p=>o("onClick",p)),_(p=>o("onDoubleClick",p)),f(p=>o("onContextMenu",p)),w(p=>o("onWheel",p));let O=[];b(p=>{const S=p.intersections.map(({object:E})=>E),T=p.intersections;O.forEach(({object:E})=>{S.includes(E)||(p.intersections=O,o("onPointerLeave",p),o("onPointerOut",p))}),p.intersections=T,p.intersections.forEach(({object:E})=>{O.includes(E)||(o("onPointerEnter",p),o("onPointerOver",p))}),o("onPointerMove",p),O=p.intersections});const L=[];h(p=>{const S=()=>p.stopPropagating=!0;p.stopPropagation=S,L.forEach(T=>{p.stopPropagating||(p.eventObject=T,c(T.onPointerMissed,p))}),n("pointer-missed",{event:p})});function D(p){te(p)&&F(p)&&l.value.push(p)}function A(p){if(te(p)&&F(p)){const S=l.value.indexOf(p);S>-1&&l.value.splice(S,1)}}function P(p){te(p)&&F(p)&&p.onPointerMissed&&L.push(p)}function B(p){if(te(p)&&F(p)){const S=L.indexOf(p);S>-1&&L.splice(S,1)}}return t.eventManager={forceUpdate:y,registerObject:D,deregisterObject:A,registerPointerMissedObject:P,deregisterPointerMissedObject:B},{forceUpdate:y,registerObject:D,deregisterObject:A,registerPointerMissedObject:P,deregisterPointerMissedObject:B}}function Nt(e,t,n=10){const r=M.toValue(e)?M.useWindowSize():M.useElementSize(d.computed(()=>M.toValue(t).parentElement)),s=d.readonly(M.refDebounced(r.width,n)),a=d.readonly(M.refDebounced(r.height,n)),i=d.computed(()=>s.value/a.value);return{height:a,width:s,aspectRatio:i}}function ge(){const e=new Map,t=new Set;let n=0,r=!1;const s=()=>{const o=Array.from(e.entries()).sort((u,_)=>{const f=u[1].priority-_[1].priority;return f===0?u[1].addI-_[1].addI:f});t.clear(),o.forEach(u=>t.add(u[0]))},a=o=>{e.delete(o),t.delete(o)};return{on:(o,u=0)=>{e.set(o,{priority:u,addI:n++});const _=()=>a(o);return M.tryOnScopeDispose(_),r=!0,{off:_}},off:a,trigger:(...o)=>{r&&(s(),r=!1),t.forEach(u=>u(...o))},dispose:()=>{e.clear(),t.clear()},get count(){return e.size}}}function We(){let e=!0,t=!0,n=!1;const r=new v.Clock(!1),s=d.ref(r.running),a=d.ref(!1);let i;const l=v.MathUtils.generateUUID();let c=null;const o=ge(),u=ge(),_=ge();A();let f={};function b(P){f=P}function m(P,B,x=0){switch(B){case"before":return o.on(P,x);case"render":return c||(c=P),u.dispose(),u.on(P);case"after":return _.on(P,x)}}function k(){t&&(t=!1,A(),D())}function h(){t=!0,A(),cancelAnimationFrame(i)}function w(){n=!1,A()}function y(){n=!0,A()}function O(){a.value=!0}function L(){a.value=!1}function D(){if(!e){i=requestAnimationFrame(D);return}const P=r.getDelta(),B=r.getElapsedTime(),x={camera:d.unref(f.camera),scene:d.unref(f.scene),renderer:d.unref(f.renderer),raycaster:d.unref(f.raycaster),controls:d.unref(f.controls),invalidate:f.invalidate,advance:f.advance},p={delta:P,elapsed:B,clock:r,...x};s.value&&o.trigger(p),a.value||(u.count?u.trigger(p):c&&c(p)),s.value&&_.trigger(p),i=requestAnimationFrame(D)}function A(){const P=!t&&!n;r.running!==P&&(r.running?r.stop():r.start()),s.value=r.running}return{loopId:l,register:(P,B,x)=>m(P,B,x),start:k,stop:h,pause:y,resume:w,pauseRender:O,resumeRender:L,isRenderPaused:a,isActive:s,setContext:b,setReady:P=>e=P}}function zt(e,t,n=100){n=n<=0?100:n;const r=M.createEventHook(),s=new Set;let a=!1,i=!1,l=null;function c(){l&&clearTimeout(l),!i&&!a&&e()?(r.trigger(t),s.forEach(f=>f()),s.clear(),a=!0):!i&&!a&&(l=setTimeout(c,n))}function o(){i=!0,l&&clearTimeout(l)}c();const u=(f,...b)=>{f(...b)};return{on:f=>{if(a)return u(f,t),{off:()=>{}};{const b=r.on(f);return s.add(b.off),r.on(f)}},off:r.off,trigger:r.trigger,cancel:o}}const X=new WeakMap;function Ne(e){if(e=e||H(),X.has(e))return X.get(e);const t=100,n=Date.now(),a=zt(()=>{if(Date.now()-n>=t)return!0;{const i=e.renderer.value,l=(i==null?void 0:i.domElement)||{width:0,height:0};return!!(i&&l.width>0&&l.height>0)}},e);return X.set(e,a),a}function Gt(e){const t=H();if(t)return X.has(t)?X.get(t).on(e):Ne(t).on(e)}function ze({scene:e,canvas:t,windowSize:n,disableRender:r,rendererOptions:s,emit:a}){const{logWarning:i}=$(),l=d.shallowRef(e),c=Nt(n,t),{camera:o,cameras:u,registerCamera:_,deregisterCamera:f,setCameraActive:b}=Ce({sizes:c,scene:e}),m={mode:d.ref(s.renderMode||"always"),priority:d.ref(0),frames:d.ref(0),maxFrames:60,canBeInvalidated:d.computed(()=>m.mode.value==="on-demand"&&m.frames.value===0)};function k(I=1){s.renderMode==="on-demand"?m.frames.value=Math.min(m.maxFrames,m.frames.value+I):i("`invalidate` can only be used when `renderMode` is set to `on-demand`")}function h(){s.renderMode==="manual"?m.frames.value=1:i("`advance` can only be used when `renderMode` is set to `manual`")}const{renderer:w}=$e({scene:e,canvas:t,options:s,emit:a,contextParts:{sizes:c,camera:o,render:m,invalidate:k,advance:h},disableRender:r}),y={sizes:c,scene:l,camera:o,cameras:d.readonly(u),renderer:w,raycaster:d.shallowRef(new v.Raycaster),controls:d.ref(null),perf:{maxFrames:160,fps:{value:0,accumulator:[]},memory:{currentMem:0,allocatedMem:0,accumulator:[]}},render:m,advance:h,extend:le,invalidate:k,registerCamera:_,setCameraActive:b,deregisterCamera:f,loop:We()};d.provide("useTres",y),y.scene.value.__tres={root:y},y.loop.register(()=>{o.value&&m.frames.value>0&&(w.value.render(e,o.value),a("render",y.renderer.value)),m.priority.value=0,m.mode.value==="always"?m.frames.value=1:m.frames.value=Math.max(0,m.frames.value-1)},"render");const{on:O,cancel:L}=Ne(y);y.loop.setReady(!1),y.loop.start(),O(()=>{a("ready",y),y.loop.setReady(!0),Fe(e,y,a)}),d.onUnmounted(()=>{L(),y.loop.stop()});const D=100,A=M.useFps({every:D}),{isSupported:P,memory:B}=M.useMemory({interval:D}),x=160;let p=performance.now();const S=({timestamp:I})=>{y.scene.value&&(y.perf.memory.allocatedMem=he(y.scene.value)),I-p>=D&&(p=I,y.perf.fps.accumulator.push(A.value),y.perf.fps.accumulator.length>x&&y.perf.fps.accumulator.shift(),y.perf.fps.value=A.value,P.value&&B.value&&(y.perf.memory.accumulator.push(B.value.usedJSHeapSize/1024/1024),y.perf.memory.accumulator.length>x&&y.perf.memory.accumulator.shift(),y.perf.memory.currentMem=y.perf.memory.accumulator.reduce((R,K)=>R+K,0)/y.perf.memory.accumulator.length))};let T=0;const E=1,{pause:N}=M.useRafFn(({delta:I})=>{window.__TRES__DEVTOOLS__&&(S({timestamp:performance.now()}),T+=I,T>=E&&(window.__TRES__DEVTOOLS__.cb(y),T=0))},{immediate:!0});return d.onUnmounted(()=>{N()}),y}function H(){const e=d.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const qt=H;function Yt(){const{camera:e,scene:t,renderer:n,loop:r,raycaster:s,controls:a,invalidate:i,advance:l}=H();r.setContext({camera:e,scene:t,renderer:n,raycaster:s,controls:a,invalidate:i,advance:l});function c(_,f=0){return r.register(_,"before",f)}function o(_){return r.register(_,"render")}function u(_,f=0){return r.register(_,"after",f)}return{pause:r.pause,resume:r.resume,pauseRender:r.pauseRender,resumeRender:r.resumeRender,isActive:r.isActive,onBeforeRender:c,render:o,onAfterRender:u}}function Jt(e,t={},n={}){let r=e;const s=l=>{r=l};let a=new Proxy({},{});const i={has(l,c){return c in t||c in r},get(l,c,o){return c in t?t[c](r):r[c]},set(l,c,o){return n[c]?n[c](o,r,a,s):r[c]=o,!0}};return a=new Proxy({},i),a}const{logError:Ge}=$(),qe=["onClick","onContextMenu","onPointerMove","onPointerEnter","onPointerLeave","onPointerOver","onPointerOut","onDoubleClick","onPointerDown","onPointerUp","onPointerCancel","onPointerMissed","onLostPointerCapture","onWheel"],Kt=e=>{const t=e.scene.value;function n(o,u,_,f){if(f||(f={}),f.args||(f.args=[]),o==="template"||bt(o))return null;let b=o.replace("Tres",""),m;if(o==="primitive"){(!V(f.object)||d.isRef(f.object))&&Ge("Tres primitives need an 'object' prop, whose value is an object or shallowRef<object>"),b=f.object.type;const k={};m=Jt(f.object,{object:w=>w,isPrimitive:()=>!0,__tres:()=>k},{object:(w,y,O,L)=>{Rt(w,O,L,{patchProp:a,remove:s,insert:r},e)},__tres:w=>{Object.assign(k,w)}})}else{const k=ae.value[b];k||Ge(`${b} is not defined on the THREE namespace. Use extend to add it to the catalog.`),m=new k(...f.args)}return m?(m.isCamera&&(f!=null&&f.position||m.position.set(3,3,3),f!=null&&f.lookAt||m.lookAt(0,0,0)),m=q(m,{...m.__tres,type:b,memoizedProps:f,eventCount:0,primitive:o==="primitive",attach:f.attach},e),m):null}function r(o,u){var b,m,k;if(!o)return;u=u||t;const _=o.__tres?o:q(o,{},e),f=u.__tres?u:q(u,{},e);o=Y(_),u=Y(f),o.__tres&&((b=o.__tres)==null?void 0:b.eventCount)>0&&((m=e.eventManager)==null||m.registerObject(o)),e.registerCamera(o),(k=e.eventManager)==null||k.registerPointerMissedObject(o),_.__tres.attach?xt(f,_,_.__tres.attach):F(o)&&F(f)&&(f.add(o),o.dispatchEvent({type:"added"})),_.__tres.parent=f,f.__tres.objects&&!f.__tres.objects.includes(_)&&f.__tres.objects.push(_)}function s(o,u){var m,k,h,w;if(!o)return;o!=null&&o.__tres&&((m=o.__tres)==null?void 0:m.eventCount)>0&&((k=e.eventManager)==null||k.deregisterObject(o)),u=fe(u)?"default":u;const _=(h=o.__tres)==null?void 0:h.dispose;fe(_)||(_===null?u=!1:u=_);const f=(w=o.__tres)==null?void 0:w.primitive,b=u==="default"?!f:!!u;if(o.__tres&&"objects"in o.__tres&&[...o.__tres.objects].forEach(y=>s(y,u)),b&&o.children&&[...o.children].forEach(y=>s(y,u)),Re(o,e),Ee(o,e),b&&!dt(o)){if(G(u))u(o);else if(G(o.dispose))try{o.dispose()}catch{}}"__tres"in o&&delete o.__tres}function a(o,u,_,f){var y,O;if(!o)return;let b=o,m=u;if(o.__tres&&(o.__tres.memoizedProps[u]=f),u==="attach"){const L=((y=o.__tres)==null?void 0:y.parent)||o.parent;s(o),q(o,{attach:f},e),L&&r(o,L);return}if(u==="dispose"){o.__tres||(o=q(o,{},e)),o.__tres.dispose=f;return}if(F(o)&&m==="blocks-pointer-events"){f||f===""?o[m]=f:delete o[m];return}qe.includes(u)&&o.__tres&&(o.__tres.eventCount+=1);let k=se(m),h=b==null?void 0:b[k];if(m==="args"){const L=o,D=_??[],A=f??[],P=((O=o.__tres)==null?void 0:O.type)||o.type;P&&D.length&&!kt(D,A)&&(b=Object.assign(L,new ae.value[P](...f)));return}if(b.type==="BufferGeometry"){if(m==="args")return;b.setAttribute(se(m),new v.BufferAttribute(...f));return}if(m.includes("-")&&h===void 0){const L=m.split("-");h=L.reduce((D,A)=>D[se(A)],b),m=L.pop(),k=m,h!=null&&h.set||(b=L.reduce((D,A)=>D[se(A)],b))}let w=f;if(w===""&&(w=!0),G(h)){qe.includes(u)||(ee(w)?o[k](...w):o[k](w)),k.startsWith("on")&&G(w)&&(b[k]=w);return}!(h!=null&&h.set)&&!G(h)?b[k]=w:h.constructor===w.constructor&&(h!=null&&h.copy)?h==null||h.copy(w):ee(w)?h.set(...w):!h.isColor&&h.setScalar?h.setScalar(w):h.set(w),Ie(o)}function i(o){var u;return((u=o==null?void 0:o.__tres)==null?void 0:u.parent)||null}function l(o){const u=q(new v.Object3D,{type:"Comment"},e);return u.name=o,u}function c(o){var b;const u=i(o),_=((b=u==null?void 0:u.__tres)==null?void 0:b.objects)||[],f=_.indexOf(o);return f<0||f>=_.length-1?null:_[f+1]}return{insert:r,remove:s,createElement:n,patchProp:a,parentNode:i,createText:()=>void 0,createComment:l,setText:()=>void 0,setElementText:()=>void 0,nextSibling:c,querySelector:()=>void 0,setScopeId:()=>void 0,cloneNode:()=>void 0,insertStaticContent:()=>void 0}};function Qt(){return Ye().__VUE_DEVTOOLS_GLOBAL_HOOK__}function Ye(){return typeof navigator<"u"&&typeof window<"u"?window:typeof globalThis<"u"?globalThis:{}}const Xt=typeof Proxy=="function",Ht="devtools-plugin:setup",Zt="plugin:settings:set";let J,ve;function en(){var e;return J!==void 0||(typeof window<"u"&&window.performance?(J=!0,ve=window.performance):typeof globalThis<"u"&&(!((e=globalThis.perf_hooks)===null||e===void 0)&&e.performance)?(J=!0,ve=globalThis.perf_hooks.performance):J=!1),J}function tn(){return en()?ve.now():Date.now()}class nn{constructor(t,n){this.target=null,this.targetQueue=[],this.onQueue=[],this.plugin=t,this.hook=n;const r={};if(t.settings)for(const i in t.settings){const l=t.settings[i];r[i]=l.defaultValue}const s=`__vue-devtools-plugin-settings__${t.id}`;let a=Object.assign({},r);try{const i=localStorage.getItem(s),l=JSON.parse(i);Object.assign(a,l)}catch{}this.fallbacks={getSettings(){return a},setSettings(i){try{localStorage.setItem(s,JSON.stringify(i))}catch{}a=i},now(){return tn()}},n&&n.on(Zt,(i,l)=>{i===this.plugin.id&&this.fallbacks.setSettings(l)}),this.proxiedOn=new Proxy({},{get:(i,l)=>this.target?this.target.on[l]:(...c)=>{this.onQueue.push({method:l,args:c})}}),this.proxiedTarget=new Proxy({},{get:(i,l)=>this.target?this.target[l]:l==="on"?this.proxiedOn:Object.keys(this.fallbacks).includes(l)?(...c)=>(this.targetQueue.push({method:l,args:c,resolve:()=>{}}),this.fallbacks[l](...c)):(...c)=>new Promise(o=>{this.targetQueue.push({method:l,args:c,resolve:o})})})}async setRealTarget(t){this.target=t;for(const n of this.onQueue)this.target.on[n.method](...n.args);for(const n of this.targetQueue)n.resolve(await this.target[n.method](...n.args))}}function rn(e,t){const n=e,r=Ye(),s=Qt(),a=Xt&&n.enableEarlyProxy;if(s&&(r.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__||!a))s.emit(Ht,e,t);else{const i=a?new nn(n,s):null;(r.__VUE_DEVTOOLS_PLUGINS__=r.__VUE_DEVTOOLS_PLUGINS__||[]).push({pluginDescriptor:n,setupFn:t,proxy:i}),i&&t(i.proxiedTarget)}}function on(e,t){const n=`▲ ■ ●${e}`;typeof Je=="function"?Je(n,t):console.log(n)}function Je(e,t){throw new Error(e+t)}const Ke=e=>{const t={id:e.uuid,label:e.type,children:[],tags:[]};e.name!==""&&t.tags.push({label:e.name,textColor:5750629,backgroundColor:15793395});const n=he(e);return n>0&&t.tags.push({label:`${Wt(n)} KB`,textColor:15707189,backgroundColor:16775644,tooltip:"Memory usage"}),e.type.includes("Light")&&(t.tags.push({label:`${e.intensity}`,textColor:9738662,backgroundColor:16316922,tooltip:"Intensity"}),t.tags.push({label:`#${e.color.getHexString()}`,textColor:9738662,backgroundColor:16316922,tooltip:"Color"})),e.type.includes("Camera")&&(t.tags.push({label:`${e.fov}°`,textColor:9738662,backgroundColor:16316922,tooltip:"Field of view"}),t.tags.push({label:`x: ${Math.round(e.position.x)} y: ${Math.round(e.position.y)} z: ${Math.round(e.position.z)}`,textColor:9738662,backgroundColor:16316922,tooltip:"Position"})),t};function Qe(e,t,n=""){e.children.forEach(r=>{if(r.type==="HightlightMesh"||n&&!r.type.includes(n)&&!r.name.includes(n))return;const s=Ke(r);t.children.push(s),Qe(r,s,n)})}const sn=[],Z="tres:inspector",an=d.reactive({sceneGraph:null});function ln(e,t){rn({id:"dev.esm.tres",label:"TresJS 🪐",logo:"https://raw.githubusercontent.com/Tresjs/tres/main/public/favicon.svg",packageName:"tresjs",homepage:"https://tresjs.org",componentStateTypes:sn,app:e},n=>{typeof n.now!="function"&&on("You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html."),n.addInspector({id:Z,label:"TresJS 🪐",icon:"account_tree",treeFilterPlaceholder:"Search instances"}),setInterval(()=>{n.sendInspectorTree(Z)},1e3),setInterval(()=>{n.notifyComponentUpdate()},5e3),n.on.getInspectorTree(a=>{if(a.inspectorId===Z){const i=Ke(t.scene.value);Qe(t.scene.value,i,a.filter),an.sceneGraph=i,a.rootNodes=[i]}});let r=null,s=null;n.on.getInspectorState(a=>{var i;if(a.inspectorId===Z){const[l]=t.scene.value.getObjectsByProperty("uuid",a.nodeId);if(!l)return;if(s&&r&&r.parent&&s.remove(r),l.isMesh){const c=Ot(l);l.add(c),r=c,s=l}a.state={object:Object.entries(l).map(([c,o])=>({key:c,value:o,editable:!0})).filter(({key:c})=>c!=="parent")},l.isScene&&(a.state.info={memory:he(l),objects:l.children.length,calls:t.renderer.value.info.render.calls,triangles:t.renderer.value.info.render.triangles,points:t.renderer.value.info.render.points,lines:t.renderer.value.info.render.lines},a.state.programs=((i=t.renderer.value.info.programs)==null?void 0:i.map(c=>({key:c.name,value:{...c,vertexShader:c.vertexShader,attributes:c.getAttributes(),uniforms:c.getUniforms()}})))||[])}}),n.on.editInspectorState(a=>{a.inspectorId===Z&&Lt(t.scene.value,a.nodeId,a.path,a.state.value)})})}const cn=["data-scene","data-tres"],Xe=d.defineComponent({__name:"TresCanvas",props:{shadows:{type:Boolean,default:void 0},clearColor:{},toneMapping:{},shadowMapType:{},useLegacyLights:{type:Boolean,default:void 0},outputColorSpace:{},toneMappingExposure:{},renderMode:{default:"always"},dpr:{},camera:{},preset:{},windowSize:{type:Boolean,default:void 0},disableRender:{type:Boolean,default:void 0},context:{},precision:{},alpha:{type:Boolean,default:void 0},premultipliedAlpha:{type:Boolean},antialias:{type:Boolean,default:void 0},stencil:{type:Boolean,default:void 0},preserveDrawingBuffer:{type:Boolean,default:void 0},powerPreference:{},depth:{type:Boolean,default:void 0},logarithmicDepthBuffer:{type:Boolean,default:void 0},failIfMajorPerformanceCaveat:{type:Boolean,default:void 0}},emits:["render","click","double-click","context-menu","pointer-move","pointer-up","pointer-down","pointer-enter","pointer-leave","pointer-over","pointer-out","pointer-missed","wheel","ready"],setup(e,{expose:t,emit:n}){var k;const r=e,s=n,a=d.useSlots(),{logWarning:i}=$(),l=d.ref(),c=d.shallowRef(new v.Scene),o=(k=d.getCurrentInstance())==null?void 0:k.appContext.app;le(_e);const u=h=>d.defineComponent({setup(){var y;const w=(y=d.getCurrentInstance())==null?void 0:y.appContext;return w&&(w.app=o),d.provide("useTres",h),d.provide("extend",le),typeof window<"u"&&ln(w==null?void 0:w.app,h),()=>d.h(d.Fragment,null,a!=null&&a.default?a.default():[])}}),_=h=>{const w=u(h),{render:y}=d.createRenderer(Kt(h));y(d.h(w),c.value)},f=(h,w=!1)=>{pe(h.scene.value),w&&(h.renderer.value.dispose(),h.renderer.value.renderLists.dispose(),h.renderer.value.forceContextLoss()),c.value.__tres={root:h},_(h)},b=d.computed(()=>r.disableRender),m=d.shallowRef(null);return t({context:m,dispose:()=>f(m.value,!0)}),d.onMounted(()=>{const h=l;m.value=ze({scene:c.value,canvas:h,windowSize:r.windowSize??!1,disableRender:b.value??!1,rendererOptions:r,emit:s});const{registerCamera:w,camera:y,cameras:O,deregisterCamera:L}=m.value;_(m.value);const D=()=>{const A=new v.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);A.position.set(3,3,3),A.lookAt(0,0,0),w(A);const P=d.watchEffect(()=>{O.value.length>=2&&(A.removeFromParent(),L(A),P==null||P())})};d.watch(()=>r.camera,(A,P)=>{A&&w(A),P&&(P.removeFromParent(),L(P))},{immediate:!0}),y.value||(i("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),D())}),d.onUnmounted(()=>{f(m.value)}),(h,w)=>(d.openBlock(),d.createElementBlock("canvas",{ref_key:"canvas",ref:l,"data-scene":c.value.uuid,class:d.normalizeClass(h.$attrs.class),"data-tres":`tresjs ${d.unref(at).version}`,style:d.normalizeStyle({display:"block",width:"100%",height:"100%",position:h.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none",...h.$attrs.style})},null,14,cn))}}),un=["TresCanvas","TresLeches","TresScene"],fn={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!un.includes(e)||e==="primitive"}}},dn={mounted:(e,t)=>{if(t.arg){console.log(`v-log:${t.arg}`,e[t.arg]);return}console.log("v-log",e)}};class He extends v.Line{constructor(t,n){const r=[1,1,0,-1,1,0,-1,-1,0,1,-1,0,1,1,0],s=new v.BufferGeometry;s.setAttribute("position",new v.Float32BufferAttribute(r,3)),s.computeBoundingSphere();const a=new v.LineBasicMaterial({fog:!1});super(s,a),this.light=t,this.color=n,this.type="RectAreaLightHelper";const i=[1,1,0,-1,1,0,-1,-1,0,1,1,0,-1,-1,0,1,-1,0],l=new v.BufferGeometry;l.setAttribute("position",new v.Float32BufferAttribute(i,3)),l.computeBoundingSphere(),this.add(new v.Mesh(l,new v.MeshBasicMaterial({side:v.BackSide,fog:!1})))}updateMatrixWorld(){if(this.scale.set(.5*this.light.width,.5*this.light.height,1),this.color!==void 0)this.material.color.set(this.color),this.children[0].material.color.set(this.color);else{this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);const t=this.material.color,n=Math.max(t.r,t.g,t.b);n>1&&t.multiplyScalar(1/n),this.children[0].material.color.copy(this.material.color)}this.matrixWorld.extractRotation(this.light.matrixWorld).scale(this.scale).copyPosition(this.light.matrixWorld),this.children[0].matrixWorld.copy(this.matrixWorld)}dispose(){this.geometry.dispose(),this.material.dispose(),this.children[0].geometry.dispose(),this.children[0].material.dispose()}}const{logWarning:Ze}=$();let ce,W;const pn={DirectionalLight:v.DirectionalLightHelper,PointLight:v.PointLightHelper,SpotLight:v.SpotLightHelper,HemisphereLight:v.HemisphereLightHelper,RectAreaLight:He},mn={mounted:e=>{if(!e.isLight){Ze(`${e.type} is not a light`);return}ce=pn[e.type],e.parent.add(new ce(e,1,e.color.getHex()))},updated:e=>{W=e.parent.children.find(t=>t instanceof ce),!(W instanceof He)&&W.update()},unmounted:e=>{if(!e.isLight){Ze(`${e.type} is not a light`);return}W=e.parent.children.find(t=>t instanceof ce),W&&W.dispose&&W.dispose(),e.parent.remove(W)}},{logWarning:hn}=$();let U=null;const gn={updated:(e,t)=>{var s;const n=Dt(t);if(!n){hn(`v-distance-to: problem with binding value: ${t.value}`);return}U&&(U.dispose(),e.parent.remove(U));const r=n.clone().sub(e.position);r.normalize(),U=new v.ArrowHelper(r,e.position,e.position.distanceTo(n),16776960),e.parent.add(U),console.table([["Distance:",e.position.distanceTo(n)],[`origin: ${e.name||e.type}`,`x:${e.position.x}, y:${e.position.y}, z:${(s=e.position)==null?void 0:s.z}`],[`Destiny: ${e.name||e.type}`,`x:${n.x}, y:${n.y}, z:${n==null?void 0:n.z}`]])},unmounted:e=>{U==null||U.dispose(),e.parent.remove(U)}},vn={install(e){e.component("TresCanvas",Xe)}};C.TresCanvas=Xe,C.catalogue=ae,C.createRenderLoop=We,C.default=vn,C.dispose=pe,C.extend=le,C.isProd=yt,C.normalizeColor=Ae,C.normalizeVectorFlexibleParam=_t,C.onTresReady=Gt,C.templateCompilerOptions=fn,C.trasverseObjects=Ue,C.useCamera=Ce,C.useLoader=Ut,C.useLogger=$,C.useLoop=Yt,C.useRaycaster=Ve,C.useRenderLoop=vt,C.useRenderer=$e,C.useSeek=Ft,C.useTexture=Vt,C.useTres=qt,C.useTresContext=H,C.useTresContextProvider=ze,C.useTresEventManager=Fe,C.vDistanceTo=gn,C.vLightHelper=mn,C.vLog=dn,Object.defineProperties(C,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tresjs/core",
3
3
  "type": "module",
4
- "version": "4.2.0",
4
+ "version": "4.2.1",
5
5
  "packageManager": "pnpm@9.1.4",
6
6
  "description": "Declarative ThreeJS using Vue Components",
7
7
  "author": "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",