@tresjs/core 2.4.0-next.2 → 2.4.0-next.3

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,8 +1,7 @@
1
1
  import { ComputedRef } from "vue";
2
2
  export declare function useCamera(sizes: any): {
3
- cameras: import("vue").ShallowRef<TresCamera[]>;
3
+ cameras: import("vue").ShallowReactive<TresCamera[]>;
4
4
  camera: ComputedRef<any>;
5
5
  addCamera: (camera: TresCamera, active?: boolean) => void;
6
6
  setCameraToActive: (cameraId: string) => void;
7
- clearCameras: () => void;
8
7
  };
package/dist/tres.js CHANGED
@@ -1,55 +1,52 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v2.4.0-next.2
3
+ * version: v2.4.0-next.3
4
4
  * (c) 2023
5
5
  * description: Declarative ThreeJS using Vue Components
6
6
  * author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
7
7
  */
8
- import { shallowRef as A, computed as R, watchEffect as $, ref as U, toRefs as ne, watch as W, shallowReactive as ae, provide as oe, inject as re, onUnmounted as ie, reactive as Ce, readonly as z, createRenderer as Te, defineComponent as Pe, useSlots as _e, onMounted as xe, openBlock as he, createElementBlock as Ae, normalizeStyle as Re } from "vue";
8
+ import { shallowReactive as $, computed as A, watchEffect as U, shallowRef as j, ref as Y, toRefs as oe, watch as W, provide as ae, inject as re, onUnmounted as ie, reactive as Te, readonly as z, createRenderer as Ce, defineComponent as Pe, useSlots as _e, onMounted as xe, openBlock as he, createElementBlock as Ae, normalizeStyle as Re } from "vue";
9
9
  import * as Se from "three";
10
- import { PerspectiveCamera as se, Clock as Le, Vector3 as Oe, Color as G, SRGBColorSpace as ke, ACESFilmicToneMapping as Ie, PCFSoftShadowMap as Be, PCFShadowMap as De, LinearSRGBColorSpace as J, NoToneMapping as X, WebGLRenderer as je, LoadingManager as Ve, TextureLoader as ze, Raycaster as Ge, Vector2 as He, BufferAttribute as Fe, Scene as Ne } from "three";
11
- import { createEventHook as S, useRafFn as We, useDevicePixelRatio as $e, unrefElement as Q, toValue as m, usePointer as Ue, useElementBounding as Ye, useWindowSize as qe, useElementSize as Ke } from "@vueuse/core";
10
+ import { PerspectiveCamera as se, Clock as Le, Vector3 as Oe, Color as G, SRGBColorSpace as ke, ACESFilmicToneMapping as Ie, PCFSoftShadowMap as Be, PCFShadowMap as De, LinearSRGBColorSpace as X, NoToneMapping as Q, WebGLRenderer as je, LoadingManager as Ve, TextureLoader as ze, Raycaster as Ge, Vector2 as He, BufferAttribute as Fe, Scene as Ne } from "three";
11
+ import { createEventHook as R, useRafFn as We, useDevicePixelRatio as $e, unrefElement as Z, toValue as m, usePointer as Ue, useElementBounding as Ye, useWindowSize as qe, useElementSize as Ke } from "@vueuse/core";
12
12
  function Je(e) {
13
- const n = A([]), o = R(() => n.value.find((c) => c.userData.IS_ACTIVE_CAMERA));
14
- function t(c, a = !0) {
15
- n.value.push(c), a && r(c.uuid);
13
+ const n = $([]), o = A(() => n.find((i) => i.userData.IS_ACTIVE_CAMERA));
14
+ function t(i, s = !0) {
15
+ n.push(i), s && r(i.uuid);
16
16
  }
17
- function r(c) {
18
- const a = n.value.find((s) => s.uuid === c);
19
- a && (n.value.forEach((s) => s.userData.IS_ACTIVE_CAMERA = !1), a.userData.IS_ACTIVE_CAMERA = !0);
17
+ function r(i) {
18
+ const s = n.find((a) => a.uuid === i);
19
+ s && (n.forEach((a) => a.userData.IS_ACTIVE_CAMERA = !1), s.userData.IS_ACTIVE_CAMERA = !0);
20
20
  }
21
- function i() {
22
- n.value = [];
23
- }
24
- return $(() => {
25
- var c;
26
- (c = e.aspectRatio) != null && c.value && (console.log("camera watcher aspectRatio", e.aspectRatio.value), n.value.forEach((a) => {
27
- a instanceof se && (a.aspect = e.aspectRatio.value), a.updateProjectionMatrix();
21
+ return U(() => {
22
+ var i;
23
+ (i = e.aspectRatio) != null && i.value && (console.log("camera watcher aspectRatio", e.aspectRatio.value), n.forEach((s) => {
24
+ s instanceof se && (s.aspect = e.aspectRatio.value), s.updateProjectionMatrix();
28
25
  }));
29
26
  }), {
30
27
  cameras: n,
31
28
  camera: o,
32
29
  addCamera: t,
33
- setCameraToActive: r,
34
- clearCameras: i
30
+ setCameraToActive: r
31
+ /* clearCameras, */
35
32
  };
36
33
  }
37
- const ce = S(), ue = S(), Y = S(), h = new Le();
38
- let D = 0, j = 0;
34
+ const ce = R(), ue = R(), q = R(), h = new Le();
35
+ let B = 0, D = 0;
39
36
  const { pause: Xe, resume: Qe, isActive: Ze } = We(
40
37
  () => {
41
- ce.trigger({ delta: D, elapsed: j, clock: h }), ue.trigger({ delta: D, elapsed: j, clock: h }), Y.trigger({ delta: D, elapsed: j, clock: h });
38
+ ce.trigger({ delta: B, elapsed: D, clock: h }), ue.trigger({ delta: B, elapsed: D, clock: h }), q.trigger({ delta: B, elapsed: D, clock: h });
42
39
  },
43
40
  { immediate: !1 }
44
41
  );
45
- Y.on(() => {
46
- D = h.getDelta(), j = h.getElapsedTime();
42
+ q.on(() => {
43
+ B = h.getDelta(), D = h.getElapsedTime();
47
44
  });
48
45
  function fe() {
49
46
  return {
50
47
  onBeforeLoop: ce.on,
51
48
  onLoop: ue.on,
52
- onAfterLoop: Y.on,
49
+ onAfterLoop: q.on,
53
50
  pause: Xe,
54
51
  resume: Qe,
55
52
  isActive: Ze
@@ -75,30 +72,30 @@ const H = {
75
72
  for (const o of Object.keys(n))
76
73
  n[o] instanceof Object && Object.assign(n[o], le(e[o], n[o]));
77
74
  return Object.assign(e || {}, n), e;
78
- }, tt = "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", nt = /* @__PURE__ */ at(tt);
79
- function B(e) {
75
+ }, tt = "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", nt = /* @__PURE__ */ ot(tt);
76
+ function I(e) {
80
77
  return e.replace(/-([a-z])/g, (n, o) => o.toUpperCase());
81
78
  }
82
- function at(e, n) {
79
+ function ot(e, n) {
83
80
  const o = /* @__PURE__ */ Object.create(null), t = e.split(",");
84
81
  for (let r = 0; r < t.length; r++)
85
82
  o[t[r]] = !0;
86
83
  return n ? (r) => !!o[r.toLowerCase()] : (r) => !!o[r];
87
84
  }
88
- const ot = (e, n) => {
85
+ const at = (e, n) => {
89
86
  const o = /* @__PURE__ */ new Set(), t = [];
90
87
  for (const r of e) {
91
88
  const i = n(r);
92
89
  o.has(i) || (o.add(i), t.push(r));
93
90
  }
94
91
  return t;
95
- }, _t = !0, Z = "[TresJS ▲ ■ ●] ";
92
+ }, _t = !0, ee = "[TresJS ▲ ■ ●] ";
96
93
  function P() {
97
94
  function e(t, r) {
98
- console.error(`${Z} ${t}`, r || "");
95
+ console.error(`${ee} ${t}`, r || "");
99
96
  }
100
97
  function n(t) {
101
- console.warn(`${Z} ${t}`);
98
+ console.warn(`${ee} ${t}`);
102
99
  }
103
100
  function o(t, r) {
104
101
  }
@@ -109,11 +106,11 @@ function P() {
109
106
  };
110
107
  }
111
108
  function rt(e, n, o) {
112
- const t = A(), r = U(!1), {
109
+ const t = j(), r = Y(!1), {
113
110
  alpha: i = !0,
114
- antialias: c = !0,
111
+ antialias: s = !0,
115
112
  depth: a,
116
- logarithmicDepthBuffer: s,
113
+ logarithmicDepthBuffer: c,
117
114
  failIfMajorPerformanceCaveat: u,
118
115
  precision: l,
119
116
  premultipliedAlpha: p,
@@ -121,55 +118,55 @@ function rt(e, n, o) {
121
118
  shadows: M = !1,
122
119
  shadowMapType: E = De,
123
120
  useLegacyLights: b = !1,
124
- outputColorSpace: g = J,
125
- toneMapping: y = X,
121
+ outputColorSpace: g = X,
122
+ toneMapping: y = Q,
126
123
  toneMappingExposure: _ = 1,
127
- context: L = void 0,
128
- powerPreference: O = "default",
129
- preserveDrawingBuffer: k = !1,
130
- clearColor: T,
124
+ context: S = void 0,
125
+ powerPreference: L = "default",
126
+ preserveDrawingBuffer: O = !1,
127
+ clearColor: C,
131
128
  windowSize: f = !1,
132
129
  preset: v = void 0
133
- } = ne(o), { cameras: Et, setRenderer: ge, sizes: V } = n, { logError: we, logWarning: yt } = P(), { pixelRatio: I } = $e(), { pause: be, resume: Ee } = fe(), q = () => {
134
- t.value && (t.value.setSize(V.width.value, V.height.value), t.value.setPixelRatio(Math.min(I.value, 2)));
135
- }, K = () => {
130
+ } = oe(o), { cameras: Et, setRenderer: ge, sizes: V } = n, { logError: we, logWarning: yt } = P(), { pixelRatio: k } = $e(), { pause: be, resume: Ee } = fe(), K = () => {
131
+ t.value && (t.value.setSize(V.width.value, V.height.value), t.value.setPixelRatio(Math.min(k.value, 2)));
132
+ }, J = () => {
136
133
  if (!t.value)
137
134
  return;
138
- const C = m(v);
139
- if (C) {
140
- C in H || we("Renderer Preset must be one of these: " + Object.keys(H).join(", ")), le(t.value, H[C]);
135
+ const T = m(v);
136
+ if (T) {
137
+ T in H || we("Renderer Preset must be one of these: " + Object.keys(H).join(", ")), le(t.value, H[T]);
141
138
  return;
142
139
  }
143
- t.value.shadowMap.enabled = m(M), t.value.shadowMap.type = m(E), t.value.toneMapping = m(y) || X, t.value.toneMappingExposure = m(_), t.value.outputColorSpace = m(g) || J, T != null && T.value && t.value.setClearColor(et(m(T))), t.value.useLegacyLights = m(b);
140
+ t.value.shadowMap.enabled = m(M), t.value.shadowMap.type = m(E), t.value.toneMapping = m(y) || Q, t.value.toneMappingExposure = m(_), t.value.outputColorSpace = m(g) || X, C != null && C.value && t.value.setClearColor(et(m(C))), t.value.useLegacyLights = m(b);
144
141
  }, ye = () => {
145
- const C = Q(e);
146
- console.count("init renderer"), C && (t.value = new je({
147
- canvas: C,
142
+ const T = Z(e);
143
+ console.count("init renderer"), T && (t.value = new je({
144
+ canvas: T,
148
145
  alpha: m(i),
149
- antialias: m(c),
150
- context: m(L),
146
+ antialias: m(s),
147
+ context: m(S),
151
148
  depth: m(a),
152
149
  failIfMajorPerformanceCaveat: m(u),
153
- logarithmicDepthBuffer: m(s),
154
- powerPreference: m(O),
150
+ logarithmicDepthBuffer: m(c),
151
+ powerPreference: m(L),
155
152
  precision: m(l),
156
153
  stencil: m(d),
157
- preserveDrawingBuffer: m(k),
154
+ preserveDrawingBuffer: m(O),
158
155
  premultipliedAlpha: m(p)
159
- }), ge(t.value), K(), q(), Ee(), r.value = !0);
156
+ }), ge(t.value), J(), K(), Ee(), r.value = !0);
160
157
  }, Me = () => {
161
158
  t.value && (t.value.dispose(), t.value = void 0, r.value = !1, be());
162
159
  };
163
- return $(() => {
164
- var C;
165
- ((C = V.aspectRatio) != null && C.value || I != null && I.value) && q();
160
+ return U(() => {
161
+ var T;
162
+ ((T = V.aspectRatio) != null && T.value || k != null && k.value) && K();
166
163
  }), W(
167
- [M, E, g, b, y, _, T],
168
- K
164
+ [M, E, g, b, y, _, C],
165
+ J
169
166
  ), W(
170
167
  e,
171
168
  () => {
172
- Q(e) && ye();
169
+ Z(e) && ye();
173
170
  },
174
171
  { immediate: !0, deep: !0 }
175
172
  ), {
@@ -178,7 +175,7 @@ function rt(e, n, o) {
178
175
  dispose: Me
179
176
  };
180
177
  }
181
- const ee = (e) => typeof e == "function", de = (e) => !!e && e.constructor === Array;
178
+ const te = (e) => typeof e == "function", de = (e) => !!e && e.constructor === Array;
182
179
  function it(e) {
183
180
  const n = { nodes: {}, materials: {} };
184
181
  return e && e.traverse((o) => {
@@ -186,11 +183,11 @@ function it(e) {
186
183
  }), n;
187
184
  }
188
185
  async function xt(e, n, o, t, r) {
189
- const { logError: i } = P(), c = new e();
190
- r && r(c), o && o(c);
191
- const s = (Array.isArray(n) ? n : [n]).map(
186
+ const { logError: i } = P(), s = new e();
187
+ r && r(s), o && o(s);
188
+ const c = (Array.isArray(n) ? n : [n]).map(
192
189
  (u) => new Promise((l, p) => {
193
- c.load(
190
+ s.load(
194
191
  u,
195
192
  (d) => {
196
193
  d.scene && Object.assign(d, it(d.scene)), l(d);
@@ -200,16 +197,16 @@ async function xt(e, n, o, t, r) {
200
197
  );
201
198
  })
202
199
  );
203
- return de(n) ? await Promise.all(s) : await s[0];
200
+ return de(n) ? await Promise.all(c) : await c[0];
204
201
  }
205
202
  async function ht(e) {
206
- const n = new Ve(), o = new ze(n), t = (r) => new Promise((i, c) => {
203
+ const n = new Ve(), o = new ze(n), t = (r) => new Promise((i, s) => {
207
204
  o.load(
208
205
  r,
209
206
  (a) => i(a),
210
207
  () => null,
211
208
  () => {
212
- c(new Error("[useTextures] - Failed to load texture"));
209
+ s(new Error("[useTextures] - Failed to load texture"));
213
210
  }
214
211
  );
215
212
  });
@@ -220,9 +217,9 @@ async function ht(e) {
220
217
  const {
221
218
  map: r,
222
219
  displacementMap: i,
223
- normalMap: c,
220
+ normalMap: s,
224
221
  roughnessMap: a,
225
- metalnessMap: s,
222
+ metalnessMap: c,
226
223
  aoMap: u,
227
224
  alphaMap: l,
228
225
  matcap: p
@@ -230,9 +227,9 @@ async function ht(e) {
230
227
  return {
231
228
  map: r ? await t(r) : null,
232
229
  displacementMap: i ? await t(i) : null,
233
- normalMap: c ? await t(c) : null,
230
+ normalMap: s ? await t(s) : null,
234
231
  roughnessMap: a ? await t(a) : null,
235
- metalnessMap: s ? await t(s) : null,
232
+ metalnessMap: c ? await t(c) : null,
236
233
  aoMap: u ? await t(u) : null,
237
234
  alphaMap: l ? await t(l) : null,
238
235
  matcap: p ? await t(p) : null
@@ -246,7 +243,7 @@ function st() {
246
243
  }
247
244
  const me = Symbol();
248
245
  function At() {
249
- const e = ae({
246
+ const e = $({
250
247
  uuid: st(),
251
248
  camera: void 0,
252
249
  cameras: [],
@@ -264,14 +261,14 @@ function At() {
264
261
  }
265
262
  const t = {
266
263
  state: e,
267
- ...ne(e),
264
+ ...oe(e),
268
265
  getState: n,
269
266
  setState: o
270
267
  };
271
- return oe(me, t), t;
268
+ return ae(me, t), t;
272
269
  }
273
270
  const ct = () => re(me, {
274
- state: ae({
271
+ state: $({
275
272
  camera: void 0,
276
273
  cameras: [],
277
274
  canvas: void 0,
@@ -280,14 +277,14 @@ const ct = () => re(me, {
280
277
  pointerEventHandler: void 0
281
278
  })
282
279
  }), ut = (e) => {
283
- const { state: n } = ct(), o = R(() => {
280
+ const { state: n } = ct(), o = A(() => {
284
281
  var f;
285
282
  return (f = n.canvas) == null ? void 0 : f.value;
286
- }), { x: t, y: r } = Ue({ target: o }), { width: i, height: c, top: a, left: s } = Ye(o), u = new Ge(), l = ({ x: f, y: v }) => {
283
+ }), { x: t, y: r } = Ue({ target: o }), { width: i, height: s, top: a, left: c } = Ye(o), u = new Ge(), l = ({ x: f, y: v }) => {
287
284
  if (o.value)
288
285
  return {
289
- x: (f - s.value) / i.value * 2 - 1,
290
- y: -((v - a.value) / c.value) * 2 + 1
286
+ x: (f - c.value) / i.value * 2 - 1,
287
+ y: -((v - a.value) / s.value) * 2 + 1
291
288
  };
292
289
  }, p = ({ x: f, y: v }) => {
293
290
  if (n.camera)
@@ -298,23 +295,23 @@ const ct = () => re(me, {
298
295
  y: (f == null ? void 0 : f.clientY) ?? r.value
299
296
  });
300
297
  return v ? p(v) || [] : [];
301
- }, M = R(() => d()), E = S(), b = S(), g = (f, v) => {
298
+ }, M = A(() => d()), E = R(), b = R(), g = (f, v) => {
302
299
  f.trigger({ event: v, intersects: d(v) });
303
300
  }, y = (f) => {
304
301
  g(b, f);
305
302
  };
306
303
  let _;
307
- const L = (f) => {
304
+ const S = (f) => {
308
305
  var v;
309
306
  _ = (v = d(f)[0]) == null ? void 0 : v.object;
310
- }, O = (f) => {
307
+ }, L = (f) => {
311
308
  var v;
312
309
  f instanceof PointerEvent && _ === ((v = d(f)[0]) == null ? void 0 : v.object) && g(E, f);
313
- }, k = (f) => b.trigger({ event: f, intersects: [] }), T = $(() => {
314
- o != null && o.value && (o.value.addEventListener("pointerup", O), o.value.addEventListener("pointerdown", L), o.value.addEventListener("pointermove", y), o.value.addEventListener("pointerleave", k), T());
310
+ }, O = (f) => b.trigger({ event: f, intersects: [] }), C = U(() => {
311
+ o != null && o.value && (o.value.addEventListener("pointerup", L), o.value.addEventListener("pointerdown", S), o.value.addEventListener("pointermove", y), o.value.addEventListener("pointerleave", O), C());
315
312
  });
316
313
  return ie(() => {
317
- o != null && o.value && (o.value.removeEventListener("pointerup", O), o.value.removeEventListener("pointerdown", L), o.value.removeEventListener("pointermove", y), o.value.removeEventListener("pointerleave", k));
314
+ o != null && o.value && (o.value.removeEventListener("pointerup", L), o.value.removeEventListener("pointerdown", S), o.value.removeEventListener("pointermove", y), o.value.removeEventListener("pointerleave", O));
318
315
  }), {
319
316
  intersects: M,
320
317
  onClick: (f) => E.on(f).off,
@@ -324,10 +321,10 @@ const ct = () => re(me, {
324
321
  function Rt() {
325
322
  const { logWarning: e } = P();
326
323
  function n(t, r, i) {
327
- let c = null;
324
+ let s = null;
328
325
  return t.traverse((a) => {
329
- a[r] === i && (c = a);
330
- }), c || e(`Child with ${r} '${i}' not found.`), c;
326
+ a[r] === i && (s = a);
327
+ }), s || e(`Child with ${r} '${i}' not found.`), s;
331
328
  }
332
329
  function o(t, r) {
333
330
  return n(t, "name", r);
@@ -338,35 +335,35 @@ function Rt() {
338
335
  };
339
336
  }
340
337
  const St = () => {
341
- const e = Ce({
338
+ const e = Te({
342
339
  click: /* @__PURE__ */ new Map(),
343
340
  pointerMove: /* @__PURE__ */ new Map(),
344
341
  pointerEnter: /* @__PURE__ */ new Map(),
345
342
  pointerLeave: /* @__PURE__ */ new Map()
346
343
  }), n = (a) => {
347
- Object.values(e).forEach((s) => s.delete(a));
344
+ Object.values(e).forEach((c) => c.delete(a));
348
345
  }, o = (a) => {
349
- const { onClick: s, onPointerMove: u, onPointerEnter: l, onPointerLeave: p } = a;
350
- s && e.click.set(a, s), u && e.pointerMove.set(a, u), l && e.pointerEnter.set(a, l), p && e.pointerLeave.set(a, p), a.addEventListener("removed", () => {
346
+ const { onClick: c, onPointerMove: u, onPointerEnter: l, onPointerLeave: p } = a;
347
+ c && e.click.set(a, c), u && e.pointerMove.set(a, u), l && e.pointerEnter.set(a, l), p && e.pointerLeave.set(a, p), a.addEventListener("removed", () => {
351
348
  a.traverse((d) => {
352
349
  n(d);
353
350
  }), n(a);
354
351
  });
355
- }, t = R(
356
- () => ot(
352
+ }, t = A(
353
+ () => at(
357
354
  Object.values(e).map((a) => Array.from(a.keys())).flat(),
358
355
  ({ uuid: a }) => a
359
356
  )
360
357
  ), { onClick: r, onPointerMove: i } = ut(t);
361
- r(({ intersects: a, event: s }) => {
358
+ r(({ intersects: a, event: c }) => {
362
359
  var u;
363
- a.length && ((u = e.click.get(a[0].object)) == null || u(a[0], s));
360
+ a.length && ((u = e.click.get(a[0].object)) == null || u(a[0], c));
364
361
  });
365
- let c;
366
- return i(({ intersects: a, event: s }) => {
362
+ let s;
363
+ return i(({ intersects: a, event: c }) => {
367
364
  var M, E, b, g;
368
365
  const u = (M = a == null ? void 0 : a[0]) == null ? void 0 : M.object, { pointerLeave: l, pointerEnter: p, pointerMove: d } = e;
369
- c && c !== u && ((E = l.get(c)) == null || E(c, s)), u && (c !== u && ((b = p.get(u)) == null || b(a[0], s)), (g = d.get(u)) == null || g(a[0], s)), c = u || null;
366
+ s && s !== u && ((E = l.get(s)) == null || E(s, c)), u && (s !== u && ((b = p.get(u)) == null || b(a[0], c)), (g = d.get(u)) == null || g(a[0], c)), s = u || null;
370
367
  }), {
371
368
  registerObject: o,
372
369
  deregisterObject: n
@@ -375,25 +372,25 @@ const St = () => {
375
372
  function lt(e, n, o) {
376
373
  var b;
377
374
  e || ft("A scene most be provided to the TresProvider");
378
- const { width: t, height: r } = m(o.windowSize) == !0 || m(o.windowSize) === "" || m(o.windowSize) === "true" || n.value === void 0 ? qe() : Ke((b = n.value) == null ? void 0 : b.parentElement), i = R(() => t.value / r.value), c = {
375
+ const { width: t, height: r } = m(o.windowSize) == !0 || m(o.windowSize) === "" || m(o.windowSize) === "true" || n.value === void 0 ? qe() : Ke((b = n.value) == null ? void 0 : b.parentElement), i = A(() => t.value / r.value), s = {
379
376
  height: r,
380
377
  width: t,
381
378
  aspectRatio: i
382
- }, a = A(e), { camera: s, cameras: u, addCamera: l, setCameraToActive: p } = Je(c), d = A(null);
379
+ }, a = j(e), { camera: c, cameras: u, addCamera: l, setCameraToActive: p } = Je(s), d = j(null);
383
380
  function M(g) {
384
381
  d.value || (d.value = g);
385
382
  }
386
383
  const E = {
387
384
  scene: z(a),
388
385
  cameras: z(u),
389
- camera: s,
386
+ camera: c,
390
387
  addCamera: l,
391
388
  setCameraToActive: p,
392
389
  renderer: z(d),
393
390
  setRenderer: M,
394
- sizes: c
391
+ sizes: s
395
392
  };
396
- return oe("useTres", E), E;
393
+ return ae("useTres", E), E;
397
394
  }
398
395
  function Lt() {
399
396
  const e = re("useTres");
@@ -401,47 +398,47 @@ function Lt() {
401
398
  throw new Error("useTresContext must be used within a TresProvider");
402
399
  return e;
403
400
  }
404
- const pe = U({}), ve = (e) => void Object.assign(pe.value, e), F = {
401
+ const pe = Y({}), ve = (e) => void Object.assign(pe.value, e), F = {
405
402
  GEOMETRY_VIA_PROP: "tres__geometryViaProp",
406
403
  MATERIAL_VIA_PROP: "tres__materialViaProp",
407
404
  REGISTER_AT_POINTER_EVENT_HANDLER: "tres__registerAtPointerEventHandler"
408
405
  };
409
406
  let N = null, x = null;
410
- const { logError: te } = P(), dt = {
407
+ const { logError: ne } = P(), dt = {
411
408
  createElement(e, n, o, t) {
412
- var s, u;
409
+ var c, u;
413
410
  if (t || (t = {}), t.args || (t.args = []), e === "template" || nt(e))
414
411
  return null;
415
412
  let r = e.replace("Tres", ""), i;
416
413
  if (e === "primitive") {
417
- (t == null ? void 0 : t.object) === void 0 && te("Tres primitives need a prop 'object'");
414
+ (t == null ? void 0 : t.object) === void 0 && ne("Tres primitives need a prop 'object'");
418
415
  const l = t.object;
419
416
  r = l.type, i = Object.assign(l, { type: r, attach: t.attach, primitive: !0 });
420
417
  } else {
421
418
  const l = pe.value[r];
422
- l || te(`${r} is not defined on the THREE namespace. Use extend to add it to the catalog.`), i = new l(...t.args);
419
+ l || ne(`${r} is not defined on the THREE namespace. Use extend to add it to the catalog.`), i = new l(...t.args);
423
420
  }
424
421
  i.isCamera && (t != null && t.position || i.position.set(3, 3, 3), t != null && t.lookAt || i.lookAt(0, 0, 0)), (t == null ? void 0 : t.attach) === void 0 && (i.isMaterial ? i.attach = "material" : i.isBufferGeometry && (i.attach = "geometry"));
425
- const { GEOMETRY_VIA_PROP: c, MATERIAL_VIA_PROP: a } = F;
426
- return i.isObject3D && ((s = t == null ? void 0 : t.material) != null && s.isMaterial && (i.userData[a] = !0), (u = t == null ? void 0 : t.geometry) != null && u.isBufferGeometry && (i.userData[c] = !0)), i;
422
+ const { GEOMETRY_VIA_PROP: s, MATERIAL_VIA_PROP: a } = F;
423
+ return i.isObject3D && ((c = t == null ? void 0 : t.material) != null && c.isMaterial && (i.userData[a] = !0), (u = t == null ? void 0 : t.geometry) != null && u.isBufferGeometry && (i.userData[s] = !0)), i;
427
424
  },
428
425
  insert(e, n) {
429
- var o, t, r, i, c, a, s;
426
+ var o, t, r, i, s, a, c;
430
427
  if (n && n.isScene && (x = n), (((o = e == null ? void 0 : e.__vnode) == null ? void 0 : o.type) === "TresGroup" || ((t = e == null ? void 0 : e.__vnode) == null ? void 0 : t.type) === "TresObject3D") && n === null && !((i = (r = e == null ? void 0 : e.__vnode) == null ? void 0 : r.ctx) != null && i.asyncResolved)) {
431
428
  N = e;
432
429
  return;
433
430
  } else
434
- (c = e == null ? void 0 : e.__vnode) != null && c.type.includes("Controls") && n === null && (N = x);
435
- n || (n = N), e != null && e.isObject3D && (n != null && n.isObject3D) ? (n.add(e), e.dispatchEvent({ type: "added" }), (s = (a = x == null ? void 0 : x.userData) == null ? void 0 : a[F.REGISTER_AT_POINTER_EVENT_HANDLER]) == null || s.call(a, e)) : e != null && e.isFog ? n.fog = e : typeof (e == null ? void 0 : e.attach) == "string" && (e.__previousAttach = e[n == null ? void 0 : n.attach], n && (n[e.attach] = e));
431
+ (s = e == null ? void 0 : e.__vnode) != null && s.type.includes("Controls") && n === null && (N = x);
432
+ n || (n = N), e != null && e.isObject3D && (n != null && n.isObject3D) ? (n.add(e), e.dispatchEvent({ type: "added" }), (c = (a = x == null ? void 0 : x.userData) == null ? void 0 : a[F.REGISTER_AT_POINTER_EVENT_HANDLER]) == null || c.call(a, e)) : e != null && e.isFog ? n.fog = e : typeof (e == null ? void 0 : e.attach) == "string" && (e.__previousAttach = e[n == null ? void 0 : n.attach], n && (n[e.attach] = e));
436
433
  },
437
434
  remove(e) {
438
435
  var n, o;
439
436
  if (e) {
440
437
  if (e.isObject3D) {
441
438
  const t = e, r = (i) => {
442
- var s, u;
443
- const { GEOMETRY_VIA_PROP: c, MATERIAL_VIA_PROP: a } = F;
444
- i.userData[a] || (s = i.material) == null || s.dispose(), i.userData[c] || (u = i.geometry) == null || u.dispose();
439
+ var c, u;
440
+ const { GEOMETRY_VIA_PROP: s, MATERIAL_VIA_PROP: a } = F;
441
+ i.userData[a] || (c = i.material) == null || c.dispose(), i.userData[s] || (u = i.geometry) == null || u.dispose();
445
442
  };
446
443
  t.traverse((i) => {
447
444
  r(i);
@@ -452,26 +449,26 @@ const { logError: te } = P(), dt = {
452
449
  },
453
450
  patchProp(e, n, o, t) {
454
451
  if (e) {
455
- let r = e, i = n, c = B(i), a = r == null ? void 0 : r[c];
452
+ let r = e, i = n, s = I(i), a = r == null ? void 0 : r[s];
456
453
  if (r.type === "BufferGeometry") {
457
454
  if (i === "args")
458
455
  return;
459
456
  r.setAttribute(
460
- B(i),
457
+ I(i),
461
458
  new Fe(...t)
462
459
  );
463
460
  return;
464
461
  }
465
462
  if (i.includes("-") && a === void 0) {
466
463
  const u = i.split("-");
467
- a = u.reduce((l, p) => l[B(p)], r), i = u.pop(), c = i.toLowerCase(), a != null && a.set || (r = u.reduce((l, p) => l[B(p)], r));
464
+ a = u.reduce((l, p) => l[I(p)], r), i = u.pop(), s = i.toLowerCase(), a != null && a.set || (r = u.reduce((l, p) => l[I(p)], r));
468
465
  }
469
- let s = t;
470
- if (s === "" && (s = !0), ee(a)) {
471
- Array.isArray(s) ? e[c](...s) : e[c](s);
466
+ let c = t;
467
+ if (c === "" && (c = !0), te(a)) {
468
+ Array.isArray(c) ? e[s](...c) : e[s](c);
472
469
  return;
473
470
  }
474
- !(a != null && a.set) && !ee(a) ? r[c] = s : a.constructor === s.constructor && (a != null && a.copy) ? a == null || a.copy(s) : Array.isArray(s) ? a.set(...s) : !a.isColor && a.setScalar ? a.setScalar(s) : a.set(s);
471
+ !(a != null && a.set) && !te(a) ? r[s] = c : a.constructor === c.constructor && (a != null && a.copy) ? a == null || a.copy(c) : Array.isArray(c) ? a.set(...c) : !a.isColor && a.setScalar ? a.setScalar(c) : a.set(c);
475
472
  }
476
473
  },
477
474
  parentNode(e) {
@@ -486,7 +483,7 @@ const { logError: te } = P(), dt = {
486
483
  setScopeId: () => void 0,
487
484
  cloneNode: () => void 0,
488
485
  insertStaticContent: () => void 0
489
- }, { createApp: mt } = Te(dt), pt = (e) => {
486
+ }, { createApp: mt } = Ce(dt), pt = (e) => {
490
487
  const n = mt(o);
491
488
  function o() {
492
489
  return e && e.default ? e.default() : [];
@@ -513,15 +510,15 @@ const vt = ["data-scene"], gt = /* @__PURE__ */ Pe({
513
510
  camera: {}
514
511
  },
515
512
  setup(e) {
516
- const n = e, { logWarning: o } = P(), t = U(), r = A(new Ne()), { onLoop: i } = fe(), c = _e();
513
+ const n = e, { logWarning: o } = P(), t = Y(), r = j(new Ne()), { onLoop: i } = fe(), s = _e();
517
514
  function a() {
518
- const s = lt(r.value, t, n), { addCamera: u, camera: l, clearCameras: p } = s;
515
+ const c = lt(r.value, t, n), { addCamera: u, camera: l, clearCameras: p } = c;
519
516
  let d;
520
517
  function M() {
521
- d = pt(c), d.provide("useTres", s), d.provide("extend", ve), d.mount(r.value), b();
518
+ d = pt(s), d.provide("useTres", c), d.provide("extend", ve), d.mount(r.value), b();
522
519
  }
523
520
  M();
524
- const { renderer: E } = rt(t, s, n);
521
+ const { renderer: E } = rt(t, c, n);
525
522
  n.camera && u(n.camera), i(() => {
526
523
  var g;
527
524
  l.value && n.disableRender !== !0 && ((g = E.value) == null || g.render(r.value, l.value));
@@ -546,7 +543,7 @@ const vt = ["data-scene"], gt = /* @__PURE__ */ Pe({
546
543
  return xe(() => {
547
544
  a();
548
545
  }), ie(() => {
549
- }), (s, u) => (he(), Ae("canvas", {
546
+ }), (c, u) => (he(), Ae("canvas", {
550
547
  ref_key: "canvas",
551
548
  ref: t,
552
549
  "data-scene": r.value.uuid,
@@ -554,7 +551,7 @@ const vt = ["data-scene"], gt = /* @__PURE__ */ Pe({
554
551
  display: "block",
555
552
  width: "100%",
556
553
  height: "100%",
557
- position: s.windowSize ? "fixed" : "relative",
554
+ position: c.windowSize ? "fixed" : "relative",
558
555
  top: 0,
559
556
  left: 0,
560
557
  pointerEvents: "auto",
package/dist/tres.umd.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v2.4.0-next.2
3
+ * version: v2.4.0-next.3
4
4
  * (c) 2023
5
5
  * description: Declarative ThreeJS using Vue Components
6
6
  * author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
7
7
  */
8
- (function(d,u){typeof exports=="object"&&typeof module<"u"?u(exports,require("vue"),require("three"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","three","@vueuse/core"],u):(d=typeof globalThis<"u"?globalThis:d||self,u(d.tres={},d.Vue,d.Three,d.VueUseCore))})(this,function(d,u,g,f){"use strict";function ue(e){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const a in e)if(a!=="default"){const t=Object.getOwnPropertyDescriptor(e,a);Object.defineProperty(n,a,t.get?t:{enumerable:!0,get:()=>e[a]})}}return n.default=e,Object.freeze(n)}const le=ue(g);function Y(e){const n=u.shallowRef([]),a=u.computed(()=>n.value.find(c=>c.userData.IS_ACTIVE_CAMERA));function t(c,o=!0){n.value.push(c),o&&r(c.uuid)}function r(c){const o=n.value.find(s=>s.uuid===c);o&&(n.value.forEach(s=>s.userData.IS_ACTIVE_CAMERA=!1),o.userData.IS_ACTIVE_CAMERA=!0)}function i(){n.value=[]}return u.watchEffect(()=>{var c;(c=e.aspectRatio)!=null&&c.value&&(console.log("camera watcher aspectRatio",e.aspectRatio.value),n.value.forEach(o=>{o instanceof g.PerspectiveCamera&&(o.aspect=e.aspectRatio.value),o.updateProjectionMatrix()}))}),{cameras:n,camera:a,addCamera:t,setCameraToActive:r,clearCameras:i}}const K=f.createEventHook(),X=f.createEventHook(),I=f.createEventHook(),E=new g.Clock;let R=0,x=0;const{pause:fe,resume:de,isActive:me}=f.useRafFn(()=>{K.trigger({delta:R,elapsed:x,clock:E}),X.trigger({delta:R,elapsed:x,clock:E}),I.trigger({delta:R,elapsed:x,clock:E})},{immediate:!1});I.on(()=>{R=E.getDelta(),x=E.getElapsedTime()});function z(){return{onBeforeLoop:K.on,onLoop:X.on,onAfterLoop:I.on,pause:fe,resume:de,isActive:me}}function pe(e){return typeof e=="number"?[e,e,e]:e instanceof g.Vector3?[e.x,e.y,e.z]:e}function J(e){return e instanceof g.Color?e:Array.isArray(e)?new g.Color(...e):new g.Color(e)}const G={realistic:{outputColorSpace:g.SRGBColorSpace,toneMapping:g.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:g.PCFSoftShadowMap}}},Q=(e,n)=>{for(const a of Object.keys(n))n[a]instanceof Object&&Object.assign(n[a],Q(e[a],n[a]));return Object.assign(e||{},n),e},ve=ge("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 k(e){return e.replace(/-([a-z])/g,(n,a)=>a.toUpperCase())}function ge(e,n){const a=Object.create(null),t=e.split(",");for(let r=0;r<t.length;r++)a[t[r]]=!0;return n?r=>!!a[r.toLowerCase()]:r=>!!a[r]}const we=(e,n)=>{const a=new Set,t=[];for(const r of e){const i=n(r);a.has(i)||(a.add(i),t.push(r))}return t},be=!0,Z="[TresJS ▲ ■ ●] ";function A(){function e(t,r){console.error(`${Z} ${t}`,r||"")}function n(t){console.warn(`${Z} ${t}`)}function a(t,r){}return{logError:e,logWarning:n,logMessage:a}}function H(e,n,a){const t=u.shallowRef(),r=u.ref(!1),{alpha:i=!0,antialias:c=!0,depth:o,logarithmicDepthBuffer:s,failIfMajorPerformanceCaveat:l,precision:p,premultipliedAlpha:w,stencil:v,shadows:_=!1,shadowMapType:M=g.PCFShadowMap,useLegacyLights:h=!1,outputColorSpace:C=g.LinearSRGBColorSpace,toneMapping:P=g.NoToneMapping,toneMappingExposure:O=1,context:V=void 0,powerPreference:j="default",preserveDrawingBuffer:B=!1,clearColor:S,windowSize:m=!1,preset:b=void 0}=u.toRefs(a),{cameras:Ue,setRenderer:je,sizes:q}=n,{logError:Be,logWarning:$e}=A(),{pixelRatio:D}=f.useDevicePixelRatio(),{pause:De,resume:Ie}=z(),se=()=>{t.value&&(t.value.setSize(q.width.value,q.height.value),t.value.setPixelRatio(Math.min(D.value,2)))},ce=()=>{if(!t.value)return;const T=f.toValue(b);if(T){T in G||Be("Renderer Preset must be one of these: "+Object.keys(G).join(", ")),Q(t.value,G[T]);return}t.value.shadowMap.enabled=f.toValue(_),t.value.shadowMap.type=f.toValue(M),t.value.toneMapping=f.toValue(P)||g.NoToneMapping,t.value.toneMappingExposure=f.toValue(O),t.value.outputColorSpace=f.toValue(C)||g.LinearSRGBColorSpace,S!=null&&S.value&&t.value.setClearColor(J(f.toValue(S))),t.value.useLegacyLights=f.toValue(h)},ze=()=>{const T=f.unrefElement(e);console.count("init renderer"),T&&(t.value=new g.WebGLRenderer({canvas:T,alpha:f.toValue(i),antialias:f.toValue(c),context:f.toValue(V),depth:f.toValue(o),failIfMajorPerformanceCaveat:f.toValue(l),logarithmicDepthBuffer:f.toValue(s),powerPreference:f.toValue(j),precision:f.toValue(p),stencil:f.toValue(v),preserveDrawingBuffer:f.toValue(B),premultipliedAlpha:f.toValue(w)}),je(t.value),ce(),se(),Ie(),r.value=!0)},Ge=()=>{t.value&&(t.value.dispose(),t.value=void 0,r.value=!1,De())};return u.watchEffect(()=>{var T;((T=q.aspectRatio)!=null&&T.value||D!=null&&D.value)&&se()}),u.watch([_,M,C,h,P,O,S],ce),u.watch(e,()=>{f.unrefElement(e)&&ze()},{immediate:!0,deep:!0}),{renderer:t,isReady:r,dispose:Ge}}const ee=e=>typeof e=="function",te=e=>!!e&&e.constructor===Array;function ne(e){const n={nodes:{},materials:{}};return e&&e.traverse(a=>{a.name&&(n.nodes[a.name]=a),a.material&&!n.materials[a.material.name]&&(n.materials[a.material.name]=a.material)}),n}async function ye(e,n,a,t,r){const{logError:i}=A(),c=new e;r&&r(c),a&&a(c);const s=(Array.isArray(n)?n:[n]).map(l=>new Promise((p,w)=>{c.load(l,v=>{v.scene&&Object.assign(v,ne(v.scene)),p(v)},t,v=>w(i("[useLoader] - Failed to load resource",v)))}));return te(n)?await Promise.all(s):await s[0]}async function Ce(e){const n=new g.LoadingManager,a=new g.TextureLoader(n),t=r=>new Promise((i,c)=>{a.load(r,o=>i(o),()=>null,()=>{c(new Error("[useTextures] - Failed to load texture"))})});if(te(e)){const r=await Promise.all(e.map(i=>t(i)));return e.length>1?r:r[0]}else{const{map:r,displacementMap:i,normalMap:c,roughnessMap:o,metalnessMap:s,aoMap:l,alphaMap:p,matcap:w}=e;return{map:r?await t(r):null,displacementMap:i?await t(i):null,normalMap:c?await t(c):null,roughnessMap:o?await t(o):null,metalnessMap:s?await t(s):null,aoMap:l?await t(l):null,alphaMap:p?await t(p):null,matcap:w?await t(w):null}}}const y=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];function he(){const e=Math.random()*4294967295|0,n=Math.random()*4294967295|0,a=Math.random()*4294967295|0,t=Math.random()*4294967295|0;return(y[e&255]+y[e>>8&255]+y[e>>16&255]+y[e>>24&255]+"-"+y[n&255]+y[n>>8&255]+"-"+y[n>>16&15|64]+y[n>>24&255]+"-"+y[a&63|128]+y[a>>8&255]+"-"+y[a>>16&255]+y[a>>24&255]+y[t&255]+y[t>>8&255]+y[t>>16&255]+y[t>>24&255]).toLowerCase()}const N=Symbol();function Me(){const e=u.shallowReactive({uuid:he(),camera:void 0,cameras:[],canvas:void 0,scene:void 0,renderer:void 0,aspectRatio:void 0,pointerEventHandler:void 0});function n(r){return e[r]}function a(r,i){e[r]=i}const t={state:e,...u.toRefs(e),getState:n,setState:a};return u.provide(N,t),t}const ae=()=>u.inject(N,{state:u.shallowReactive({camera:void 0,cameras:[],canvas:void 0,scene:void 0,renderer:void 0,pointerEventHandler:void 0})}),oe=e=>{const{state:n}=ae(),a=u.computed(()=>{var m;return(m=n.canvas)==null?void 0:m.value}),{x:t,y:r}=f.usePointer({target:a}),{width:i,height:c,top:o,left:s}=f.useElementBounding(a),l=new g.Raycaster,p=({x:m,y:b})=>{if(a.value)return{x:(m-s.value)/i.value*2-1,y:-((b-o.value)/c.value)*2+1}},w=({x:m,y:b})=>{if(n.camera)return l.setFromCamera(new g.Vector2(m,b),n.camera),l.intersectObjects(e.value,!1)},v=m=>{const b=p({x:(m==null?void 0:m.clientX)??t.value,y:(m==null?void 0:m.clientY)??r.value});return b?w(b)||[]:[]},_=u.computed(()=>v()),M=f.createEventHook(),h=f.createEventHook(),C=(m,b)=>{m.trigger({event:b,intersects:v(b)})},P=m=>{C(h,m)};let O;const V=m=>{var b;O=(b=v(m)[0])==null?void 0:b.object},j=m=>{var b;m instanceof PointerEvent&&O===((b=v(m)[0])==null?void 0:b.object)&&C(M,m)},B=m=>h.trigger({event:m,intersects:[]}),S=u.watchEffect(()=>{a!=null&&a.value&&(a.value.addEventListener("pointerup",j),a.value.addEventListener("pointerdown",V),a.value.addEventListener("pointermove",P),a.value.addEventListener("pointerleave",B),S())});return u.onUnmounted(()=>{a!=null&&a.value&&(a.value.removeEventListener("pointerup",j),a.value.removeEventListener("pointerdown",V),a.value.removeEventListener("pointermove",P),a.value.removeEventListener("pointerleave",B))}),{intersects:_,onClick:m=>M.on(m).off,onPointerMove:m=>h.on(m).off}};function Pe(){const{logWarning:e}=A();function n(t,r,i){let c=null;return t.traverse(o=>{o[r]===i&&(c=o)}),c||e(`Child with ${r} '${i}' not found.`),c}function a(t,r){return n(t,"name",r)}return{seek:n,seekByName:a}}const _e=()=>{const e=u.reactive({click:new Map,pointerMove:new Map,pointerEnter:new Map,pointerLeave:new Map}),n=o=>{Object.values(e).forEach(s=>s.delete(o))},a=o=>{const{onClick:s,onPointerMove:l,onPointerEnter:p,onPointerLeave:w}=o;s&&e.click.set(o,s),l&&e.pointerMove.set(o,l),p&&e.pointerEnter.set(o,p),w&&e.pointerLeave.set(o,w),o.addEventListener("removed",()=>{o.traverse(v=>{n(v)}),n(o)})},t=u.computed(()=>we(Object.values(e).map(o=>Array.from(o.keys())).flat(),({uuid:o})=>o)),{onClick:r,onPointerMove:i}=oe(t);r(({intersects:o,event:s})=>{var l;o.length&&((l=e.click.get(o[0].object))==null||l(o[0],s))});let c;return i(({intersects:o,event:s})=>{var _,M,h,C;const l=(_=o==null?void 0:o[0])==null?void 0:_.object,{pointerLeave:p,pointerEnter:w,pointerMove:v}=e;c&&c!==l&&((M=p.get(c))==null||M(c,s)),l&&(c!==l&&((h=w.get(l))==null||h(o[0],s)),(C=v.get(l))==null||C(o[0],s)),c=l||null}),{registerObject:a,deregisterObject:n}},{logError:Te}=A();function Ae(e,n,a){var h;e||Te("A scene most be provided to the TresProvider");const{width:t,height:r}=f.toValue(a.windowSize)==!0||f.toValue(a.windowSize)===""||f.toValue(a.windowSize)==="true"||n.value===void 0?f.useWindowSize():f.useElementSize((h=n.value)==null?void 0:h.parentElement),i=u.computed(()=>t.value/r.value),c={height:r,width:t,aspectRatio:i},o=u.shallowRef(e),{camera:s,cameras:l,addCamera:p,setCameraToActive:w}=Y(c),v=u.shallowRef(null);function _(C){v.value||(v.value=C)}const M={scene:u.readonly(o),cameras:u.readonly(l),camera:s,addCamera:p,setCameraToActive:w,renderer:u.readonly(v),setRenderer:_,sizes:c};return u.provide("useTres",M),M}function Se(){const e=u.inject("useTres");if(!e)throw new Error("useTresContext must be used within a TresProvider");return e}const F=u.ref({}),W=e=>void Object.assign(F.value,e),U={GEOMETRY_VIA_PROP:"tres__geometryViaProp",MATERIAL_VIA_PROP:"tres__materialViaProp",REGISTER_AT_POINTER_EVENT_HANDLER:"tres__registerAtPointerEventHandler"};function Fe(e){}let $=null,L=null;const{logError:re}=A(),Ee={createElement(e,n,a,t){var s,l;if(t||(t={}),t.args||(t.args=[]),e==="template"||ve(e))return null;let r=e.replace("Tres",""),i;if(e==="primitive"){(t==null?void 0:t.object)===void 0&&re("Tres primitives need a prop 'object'");const p=t.object;r=p.type,i=Object.assign(p,{type:r,attach:t.attach,primitive:!0})}else{const p=F.value[r];p||re(`${r} is not defined on the THREE namespace. Use extend to add it to the catalog.`),i=new p(...t.args)}i.isCamera&&(t!=null&&t.position||i.position.set(3,3,3),t!=null&&t.lookAt||i.lookAt(0,0,0)),(t==null?void 0:t.attach)===void 0&&(i.isMaterial?i.attach="material":i.isBufferGeometry&&(i.attach="geometry"));const{GEOMETRY_VIA_PROP:c,MATERIAL_VIA_PROP:o}=U;return i.isObject3D&&((s=t==null?void 0:t.material)!=null&&s.isMaterial&&(i.userData[o]=!0),(l=t==null?void 0:t.geometry)!=null&&l.isBufferGeometry&&(i.userData[c]=!0)),i},insert(e,n){var a,t,r,i,c,o,s;if(n&&n.isScene&&(L=n),(((a=e==null?void 0:e.__vnode)==null?void 0:a.type)==="TresGroup"||((t=e==null?void 0:e.__vnode)==null?void 0:t.type)==="TresObject3D")&&n===null&&!((i=(r=e==null?void 0:e.__vnode)==null?void 0:r.ctx)!=null&&i.asyncResolved)){$=e;return}else(c=e==null?void 0:e.__vnode)!=null&&c.type.includes("Controls")&&n===null&&($=L);n||(n=$),e!=null&&e.isObject3D&&(n!=null&&n.isObject3D)?(n.add(e),e.dispatchEvent({type:"added"}),(s=(o=L==null?void 0:L.userData)==null?void 0:o[U.REGISTER_AT_POINTER_EVENT_HANDLER])==null||s.call(o,e)):e!=null&&e.isFog?n.fog=e:typeof(e==null?void 0:e.attach)=="string"&&(e.__previousAttach=e[n==null?void 0:n.attach],n&&(n[e.attach]=e))},remove(e){var n,a;if(e){if(e.isObject3D){const t=e,r=i=>{var s,l;const{GEOMETRY_VIA_PROP:c,MATERIAL_VIA_PROP:o}=U;i.userData[o]||(s=i.material)==null||s.dispose(),i.userData[c]||(l=i.geometry)==null||l.dispose()};t.traverse(i=>{r(i)}),r(t)}(n=e.removeFromParent)==null||n.call(e),(a=e.dispose)==null||a.call(e)}},patchProp(e,n,a,t){if(e){let r=e,i=n,c=k(i),o=r==null?void 0:r[c];if(r.type==="BufferGeometry"){if(i==="args")return;r.setAttribute(k(i),new g.BufferAttribute(...t));return}if(i.includes("-")&&o===void 0){const l=i.split("-");o=l.reduce((p,w)=>p[k(w)],r),i=l.pop(),c=i.toLowerCase(),o!=null&&o.set||(r=l.reduce((p,w)=>p[k(w)],r))}let s=t;if(s===""&&(s=!0),ee(o)){Array.isArray(s)?e[c](...s):e[c](s);return}!(o!=null&&o.set)&&!ee(o)?r[c]=s:o.constructor===s.constructor&&(o!=null&&o.copy)?o==null||o.copy(s):Array.isArray(s)?o.set(...s):!o.isColor&&o.setScalar?o.setScalar(s):o.set(s)}},parentNode(e){return(e==null?void 0:e.parent)||null},createText:()=>void 0,createComment:()=>void 0,setText:()=>void 0,setElementText:()=>void 0,nextSibling:()=>void 0,querySelector:()=>void 0,setScopeId:()=>void 0,cloneNode:()=>void 0,insertStaticContent:()=>void 0},{createApp:Le}=u.createRenderer(Ee),Oe=e=>{const n=Le(a);function a(){return e&&e.default?e.default():[]}return n};W(le);const Re=["data-scene"],ie=u.defineComponent({__name:"TresCanvas",props:{shadows:{type:Boolean},shadowMapType:{},useLegacyLights:{type:Boolean},outputColorSpace:{},toneMapping:{},toneMappingExposure:{},context:{},powerPreference:{},preserveDrawingBuffer:{type:Boolean},clearColor:{},windowSize:{type:Boolean},preset:{},disableRender:{type:Boolean},camera:{}},setup(e){const n=e,{logWarning:a}=A(),t=u.ref(),r=u.shallowRef(new g.Scene),{onLoop:i}=z(),c=u.useSlots();function o(){const s=Ae(r.value,t,n),{addCamera:l,camera:p,clearCameras:w}=s;let v;function _(){v=Oe(c),v.provide("useTres",s),v.provide("extend",W),v.mount(r.value),h()}_();const{renderer:M}=H(t,s,n);n.camera&&l(n.camera),i(()=>{var C;p.value&&n.disableRender!==!0&&((C=M.value)==null||C.render(r.value,p.value))});function h(){const C=r.value.getObjectByProperty("isCamera",!0);if(C)l(C);else{a("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene.");const P=new g.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);P.position.set(3,3,3),P.lookAt(0,0,0),l(P)}u.watch(()=>n.camera,P=>{P&&(w(),l(P))})}}return u.onMounted(()=>{o()}),u.onUnmounted(()=>{}),(s,l)=>(u.openBlock(),u.createElementBlock("canvas",{ref_key:"canvas",ref:t,"data-scene":r.value.uuid,style:u.normalizeStyle({display:"block",width:"100%",height:"100%",position:s.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none",zIndex:1})},null,12,Re))}}),xe=["TresCanvas","TresLeches","TresScene"],ke={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!xe.includes(e)||e==="primitive"}}},Ve={install(e){e.component("TresCanvas",ie)}};d.TRES_CONTEXT_KEY=N,d.TresCanvas=ie,d.catalogue=F,d.default=Ve,d.extend=W,d.isProd=be,d.normalizeColor=J,d.normalizeVectorFlexibleParam=pe,d.templateCompilerOptions=ke,d.trasverseObjects=ne,d.useCamera=Y,d.useLoader=ye,d.useLogger=A,d.usePointerEventHandler=_e,d.useRaycaster=oe,d.useRenderLoop=z,d.useRenderer=H,d.useSeek=Pe,d.useTexture=Ce,d.useTres=ae,d.useTresContext=Se,d.useTresProvider=Me,Object.defineProperties(d,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
8
+ (function(d,u){typeof exports=="object"&&typeof module<"u"?u(exports,require("vue"),require("three"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","three","@vueuse/core"],u):(d=typeof globalThis<"u"?globalThis:d||self,u(d.tres={},d.Vue,d.Three,d.VueUseCore))})(this,function(d,u,g,f){"use strict";function ue(e){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const a in e)if(a!=="default"){const t=Object.getOwnPropertyDescriptor(e,a);Object.defineProperty(n,a,t.get?t:{enumerable:!0,get:()=>e[a]})}}return n.default=e,Object.freeze(n)}const le=ue(g);function Y(e){const n=u.shallowReactive([]),a=u.computed(()=>n.find(i=>i.userData.IS_ACTIVE_CAMERA));function t(i,s=!0){n.push(i),s&&r(i.uuid)}function r(i){const s=n.find(o=>o.uuid===i);s&&(n.forEach(o=>o.userData.IS_ACTIVE_CAMERA=!1),s.userData.IS_ACTIVE_CAMERA=!0)}return u.watchEffect(()=>{var i;(i=e.aspectRatio)!=null&&i.value&&(console.log("camera watcher aspectRatio",e.aspectRatio.value),n.forEach(s=>{s instanceof g.PerspectiveCamera&&(s.aspect=e.aspectRatio.value),s.updateProjectionMatrix()}))}),{cameras:n,camera:a,addCamera:t,setCameraToActive:r}}const K=f.createEventHook(),X=f.createEventHook(),I=f.createEventHook(),E=new g.Clock;let R=0,x=0;const{pause:fe,resume:de,isActive:me}=f.useRafFn(()=>{K.trigger({delta:R,elapsed:x,clock:E}),X.trigger({delta:R,elapsed:x,clock:E}),I.trigger({delta:R,elapsed:x,clock:E})},{immediate:!1});I.on(()=>{R=E.getDelta(),x=E.getElapsedTime()});function z(){return{onBeforeLoop:K.on,onLoop:X.on,onAfterLoop:I.on,pause:fe,resume:de,isActive:me}}function pe(e){return typeof e=="number"?[e,e,e]:e instanceof g.Vector3?[e.x,e.y,e.z]:e}function J(e){return e instanceof g.Color?e:Array.isArray(e)?new g.Color(...e):new g.Color(e)}const G={realistic:{outputColorSpace:g.SRGBColorSpace,toneMapping:g.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:g.PCFSoftShadowMap}}},Q=(e,n)=>{for(const a of Object.keys(n))n[a]instanceof Object&&Object.assign(n[a],Q(e[a],n[a]));return Object.assign(e||{},n),e},ve=ge("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 k(e){return e.replace(/-([a-z])/g,(n,a)=>a.toUpperCase())}function ge(e,n){const a=Object.create(null),t=e.split(",");for(let r=0;r<t.length;r++)a[t[r]]=!0;return n?r=>!!a[r.toLowerCase()]:r=>!!a[r]}const we=(e,n)=>{const a=new Set,t=[];for(const r of e){const i=n(r);a.has(i)||(a.add(i),t.push(r))}return t},be=!0,Z="[TresJS ▲ ■ ●] ";function A(){function e(t,r){console.error(`${Z} ${t}`,r||"")}function n(t){console.warn(`${Z} ${t}`)}function a(t,r){}return{logError:e,logWarning:n,logMessage:a}}function H(e,n,a){const t=u.shallowRef(),r=u.ref(!1),{alpha:i=!0,antialias:s=!0,depth:o,logarithmicDepthBuffer:c,failIfMajorPerformanceCaveat:l,precision:p,premultipliedAlpha:w,stencil:v,shadows:_=!1,shadowMapType:M=g.PCFShadowMap,useLegacyLights:h=!1,outputColorSpace:C=g.LinearSRGBColorSpace,toneMapping:P=g.NoToneMapping,toneMappingExposure:O=1,context:V=void 0,powerPreference:j="default",preserveDrawingBuffer:B=!1,clearColor:S,windowSize:m=!1,preset:b=void 0}=u.toRefs(a),{cameras:Ue,setRenderer:je,sizes:q}=n,{logError:Be,logWarning:$e}=A(),{pixelRatio:D}=f.useDevicePixelRatio(),{pause:De,resume:Ie}=z(),se=()=>{t.value&&(t.value.setSize(q.width.value,q.height.value),t.value.setPixelRatio(Math.min(D.value,2)))},ce=()=>{if(!t.value)return;const T=f.toValue(b);if(T){T in G||Be("Renderer Preset must be one of these: "+Object.keys(G).join(", ")),Q(t.value,G[T]);return}t.value.shadowMap.enabled=f.toValue(_),t.value.shadowMap.type=f.toValue(M),t.value.toneMapping=f.toValue(P)||g.NoToneMapping,t.value.toneMappingExposure=f.toValue(O),t.value.outputColorSpace=f.toValue(C)||g.LinearSRGBColorSpace,S!=null&&S.value&&t.value.setClearColor(J(f.toValue(S))),t.value.useLegacyLights=f.toValue(h)},ze=()=>{const T=f.unrefElement(e);console.count("init renderer"),T&&(t.value=new g.WebGLRenderer({canvas:T,alpha:f.toValue(i),antialias:f.toValue(s),context:f.toValue(V),depth:f.toValue(o),failIfMajorPerformanceCaveat:f.toValue(l),logarithmicDepthBuffer:f.toValue(c),powerPreference:f.toValue(j),precision:f.toValue(p),stencil:f.toValue(v),preserveDrawingBuffer:f.toValue(B),premultipliedAlpha:f.toValue(w)}),je(t.value),ce(),se(),Ie(),r.value=!0)},Ge=()=>{t.value&&(t.value.dispose(),t.value=void 0,r.value=!1,De())};return u.watchEffect(()=>{var T;((T=q.aspectRatio)!=null&&T.value||D!=null&&D.value)&&se()}),u.watch([_,M,C,h,P,O,S],ce),u.watch(e,()=>{f.unrefElement(e)&&ze()},{immediate:!0,deep:!0}),{renderer:t,isReady:r,dispose:Ge}}const ee=e=>typeof e=="function",te=e=>!!e&&e.constructor===Array;function ne(e){const n={nodes:{},materials:{}};return e&&e.traverse(a=>{a.name&&(n.nodes[a.name]=a),a.material&&!n.materials[a.material.name]&&(n.materials[a.material.name]=a.material)}),n}async function ye(e,n,a,t,r){const{logError:i}=A(),s=new e;r&&r(s),a&&a(s);const c=(Array.isArray(n)?n:[n]).map(l=>new Promise((p,w)=>{s.load(l,v=>{v.scene&&Object.assign(v,ne(v.scene)),p(v)},t,v=>w(i("[useLoader] - Failed to load resource",v)))}));return te(n)?await Promise.all(c):await c[0]}async function Ce(e){const n=new g.LoadingManager,a=new g.TextureLoader(n),t=r=>new Promise((i,s)=>{a.load(r,o=>i(o),()=>null,()=>{s(new Error("[useTextures] - Failed to load texture"))})});if(te(e)){const r=await Promise.all(e.map(i=>t(i)));return e.length>1?r:r[0]}else{const{map:r,displacementMap:i,normalMap:s,roughnessMap:o,metalnessMap:c,aoMap:l,alphaMap:p,matcap:w}=e;return{map:r?await t(r):null,displacementMap:i?await t(i):null,normalMap:s?await t(s):null,roughnessMap:o?await t(o):null,metalnessMap:c?await t(c):null,aoMap:l?await t(l):null,alphaMap:p?await t(p):null,matcap:w?await t(w):null}}}const y=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];function he(){const e=Math.random()*4294967295|0,n=Math.random()*4294967295|0,a=Math.random()*4294967295|0,t=Math.random()*4294967295|0;return(y[e&255]+y[e>>8&255]+y[e>>16&255]+y[e>>24&255]+"-"+y[n&255]+y[n>>8&255]+"-"+y[n>>16&15|64]+y[n>>24&255]+"-"+y[a&63|128]+y[a>>8&255]+"-"+y[a>>16&255]+y[a>>24&255]+y[t&255]+y[t>>8&255]+y[t>>16&255]+y[t>>24&255]).toLowerCase()}const N=Symbol();function Me(){const e=u.shallowReactive({uuid:he(),camera:void 0,cameras:[],canvas:void 0,scene:void 0,renderer:void 0,aspectRatio:void 0,pointerEventHandler:void 0});function n(r){return e[r]}function a(r,i){e[r]=i}const t={state:e,...u.toRefs(e),getState:n,setState:a};return u.provide(N,t),t}const ae=()=>u.inject(N,{state:u.shallowReactive({camera:void 0,cameras:[],canvas:void 0,scene:void 0,renderer:void 0,pointerEventHandler:void 0})}),oe=e=>{const{state:n}=ae(),a=u.computed(()=>{var m;return(m=n.canvas)==null?void 0:m.value}),{x:t,y:r}=f.usePointer({target:a}),{width:i,height:s,top:o,left:c}=f.useElementBounding(a),l=new g.Raycaster,p=({x:m,y:b})=>{if(a.value)return{x:(m-c.value)/i.value*2-1,y:-((b-o.value)/s.value)*2+1}},w=({x:m,y:b})=>{if(n.camera)return l.setFromCamera(new g.Vector2(m,b),n.camera),l.intersectObjects(e.value,!1)},v=m=>{const b=p({x:(m==null?void 0:m.clientX)??t.value,y:(m==null?void 0:m.clientY)??r.value});return b?w(b)||[]:[]},_=u.computed(()=>v()),M=f.createEventHook(),h=f.createEventHook(),C=(m,b)=>{m.trigger({event:b,intersects:v(b)})},P=m=>{C(h,m)};let O;const V=m=>{var b;O=(b=v(m)[0])==null?void 0:b.object},j=m=>{var b;m instanceof PointerEvent&&O===((b=v(m)[0])==null?void 0:b.object)&&C(M,m)},B=m=>h.trigger({event:m,intersects:[]}),S=u.watchEffect(()=>{a!=null&&a.value&&(a.value.addEventListener("pointerup",j),a.value.addEventListener("pointerdown",V),a.value.addEventListener("pointermove",P),a.value.addEventListener("pointerleave",B),S())});return u.onUnmounted(()=>{a!=null&&a.value&&(a.value.removeEventListener("pointerup",j),a.value.removeEventListener("pointerdown",V),a.value.removeEventListener("pointermove",P),a.value.removeEventListener("pointerleave",B))}),{intersects:_,onClick:m=>M.on(m).off,onPointerMove:m=>h.on(m).off}};function Pe(){const{logWarning:e}=A();function n(t,r,i){let s=null;return t.traverse(o=>{o[r]===i&&(s=o)}),s||e(`Child with ${r} '${i}' not found.`),s}function a(t,r){return n(t,"name",r)}return{seek:n,seekByName:a}}const _e=()=>{const e=u.reactive({click:new Map,pointerMove:new Map,pointerEnter:new Map,pointerLeave:new Map}),n=o=>{Object.values(e).forEach(c=>c.delete(o))},a=o=>{const{onClick:c,onPointerMove:l,onPointerEnter:p,onPointerLeave:w}=o;c&&e.click.set(o,c),l&&e.pointerMove.set(o,l),p&&e.pointerEnter.set(o,p),w&&e.pointerLeave.set(o,w),o.addEventListener("removed",()=>{o.traverse(v=>{n(v)}),n(o)})},t=u.computed(()=>we(Object.values(e).map(o=>Array.from(o.keys())).flat(),({uuid:o})=>o)),{onClick:r,onPointerMove:i}=oe(t);r(({intersects:o,event:c})=>{var l;o.length&&((l=e.click.get(o[0].object))==null||l(o[0],c))});let s;return i(({intersects:o,event:c})=>{var _,M,h,C;const l=(_=o==null?void 0:o[0])==null?void 0:_.object,{pointerLeave:p,pointerEnter:w,pointerMove:v}=e;s&&s!==l&&((M=p.get(s))==null||M(s,c)),l&&(s!==l&&((h=w.get(l))==null||h(o[0],c)),(C=v.get(l))==null||C(o[0],c)),s=l||null}),{registerObject:a,deregisterObject:n}},{logError:Te}=A();function Ae(e,n,a){var h;e||Te("A scene most be provided to the TresProvider");const{width:t,height:r}=f.toValue(a.windowSize)==!0||f.toValue(a.windowSize)===""||f.toValue(a.windowSize)==="true"||n.value===void 0?f.useWindowSize():f.useElementSize((h=n.value)==null?void 0:h.parentElement),i=u.computed(()=>t.value/r.value),s={height:r,width:t,aspectRatio:i},o=u.shallowRef(e),{camera:c,cameras:l,addCamera:p,setCameraToActive:w}=Y(s),v=u.shallowRef(null);function _(C){v.value||(v.value=C)}const M={scene:u.readonly(o),cameras:u.readonly(l),camera:c,addCamera:p,setCameraToActive:w,renderer:u.readonly(v),setRenderer:_,sizes:s};return u.provide("useTres",M),M}function Se(){const e=u.inject("useTres");if(!e)throw new Error("useTresContext must be used within a TresProvider");return e}const F=u.ref({}),W=e=>void Object.assign(F.value,e),U={GEOMETRY_VIA_PROP:"tres__geometryViaProp",MATERIAL_VIA_PROP:"tres__materialViaProp",REGISTER_AT_POINTER_EVENT_HANDLER:"tres__registerAtPointerEventHandler"};function Fe(e){}let $=null,L=null;const{logError:re}=A(),Ee={createElement(e,n,a,t){var c,l;if(t||(t={}),t.args||(t.args=[]),e==="template"||ve(e))return null;let r=e.replace("Tres",""),i;if(e==="primitive"){(t==null?void 0:t.object)===void 0&&re("Tres primitives need a prop 'object'");const p=t.object;r=p.type,i=Object.assign(p,{type:r,attach:t.attach,primitive:!0})}else{const p=F.value[r];p||re(`${r} is not defined on the THREE namespace. Use extend to add it to the catalog.`),i=new p(...t.args)}i.isCamera&&(t!=null&&t.position||i.position.set(3,3,3),t!=null&&t.lookAt||i.lookAt(0,0,0)),(t==null?void 0:t.attach)===void 0&&(i.isMaterial?i.attach="material":i.isBufferGeometry&&(i.attach="geometry"));const{GEOMETRY_VIA_PROP:s,MATERIAL_VIA_PROP:o}=U;return i.isObject3D&&((c=t==null?void 0:t.material)!=null&&c.isMaterial&&(i.userData[o]=!0),(l=t==null?void 0:t.geometry)!=null&&l.isBufferGeometry&&(i.userData[s]=!0)),i},insert(e,n){var a,t,r,i,s,o,c;if(n&&n.isScene&&(L=n),(((a=e==null?void 0:e.__vnode)==null?void 0:a.type)==="TresGroup"||((t=e==null?void 0:e.__vnode)==null?void 0:t.type)==="TresObject3D")&&n===null&&!((i=(r=e==null?void 0:e.__vnode)==null?void 0:r.ctx)!=null&&i.asyncResolved)){$=e;return}else(s=e==null?void 0:e.__vnode)!=null&&s.type.includes("Controls")&&n===null&&($=L);n||(n=$),e!=null&&e.isObject3D&&(n!=null&&n.isObject3D)?(n.add(e),e.dispatchEvent({type:"added"}),(c=(o=L==null?void 0:L.userData)==null?void 0:o[U.REGISTER_AT_POINTER_EVENT_HANDLER])==null||c.call(o,e)):e!=null&&e.isFog?n.fog=e:typeof(e==null?void 0:e.attach)=="string"&&(e.__previousAttach=e[n==null?void 0:n.attach],n&&(n[e.attach]=e))},remove(e){var n,a;if(e){if(e.isObject3D){const t=e,r=i=>{var c,l;const{GEOMETRY_VIA_PROP:s,MATERIAL_VIA_PROP:o}=U;i.userData[o]||(c=i.material)==null||c.dispose(),i.userData[s]||(l=i.geometry)==null||l.dispose()};t.traverse(i=>{r(i)}),r(t)}(n=e.removeFromParent)==null||n.call(e),(a=e.dispose)==null||a.call(e)}},patchProp(e,n,a,t){if(e){let r=e,i=n,s=k(i),o=r==null?void 0:r[s];if(r.type==="BufferGeometry"){if(i==="args")return;r.setAttribute(k(i),new g.BufferAttribute(...t));return}if(i.includes("-")&&o===void 0){const l=i.split("-");o=l.reduce((p,w)=>p[k(w)],r),i=l.pop(),s=i.toLowerCase(),o!=null&&o.set||(r=l.reduce((p,w)=>p[k(w)],r))}let c=t;if(c===""&&(c=!0),ee(o)){Array.isArray(c)?e[s](...c):e[s](c);return}!(o!=null&&o.set)&&!ee(o)?r[s]=c:o.constructor===c.constructor&&(o!=null&&o.copy)?o==null||o.copy(c):Array.isArray(c)?o.set(...c):!o.isColor&&o.setScalar?o.setScalar(c):o.set(c)}},parentNode(e){return(e==null?void 0:e.parent)||null},createText:()=>void 0,createComment:()=>void 0,setText:()=>void 0,setElementText:()=>void 0,nextSibling:()=>void 0,querySelector:()=>void 0,setScopeId:()=>void 0,cloneNode:()=>void 0,insertStaticContent:()=>void 0},{createApp:Le}=u.createRenderer(Ee),Oe=e=>{const n=Le(a);function a(){return e&&e.default?e.default():[]}return n};W(le);const Re=["data-scene"],ie=u.defineComponent({__name:"TresCanvas",props:{shadows:{type:Boolean},shadowMapType:{},useLegacyLights:{type:Boolean},outputColorSpace:{},toneMapping:{},toneMappingExposure:{},context:{},powerPreference:{},preserveDrawingBuffer:{type:Boolean},clearColor:{},windowSize:{type:Boolean},preset:{},disableRender:{type:Boolean},camera:{}},setup(e){const n=e,{logWarning:a}=A(),t=u.ref(),r=u.shallowRef(new g.Scene),{onLoop:i}=z(),s=u.useSlots();function o(){const c=Ae(r.value,t,n),{addCamera:l,camera:p,clearCameras:w}=c;let v;function _(){v=Oe(s),v.provide("useTres",c),v.provide("extend",W),v.mount(r.value),h()}_();const{renderer:M}=H(t,c,n);n.camera&&l(n.camera),i(()=>{var C;p.value&&n.disableRender!==!0&&((C=M.value)==null||C.render(r.value,p.value))});function h(){const C=r.value.getObjectByProperty("isCamera",!0);if(C)l(C);else{a("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene.");const P=new g.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);P.position.set(3,3,3),P.lookAt(0,0,0),l(P)}u.watch(()=>n.camera,P=>{P&&(w(),l(P))})}}return u.onMounted(()=>{o()}),u.onUnmounted(()=>{}),(c,l)=>(u.openBlock(),u.createElementBlock("canvas",{ref_key:"canvas",ref:t,"data-scene":r.value.uuid,style:u.normalizeStyle({display:"block",width:"100%",height:"100%",position:c.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none",zIndex:1})},null,12,Re))}}),xe=["TresCanvas","TresLeches","TresScene"],ke={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!xe.includes(e)||e==="primitive"}}},Ve={install(e){e.component("TresCanvas",ie)}};d.TRES_CONTEXT_KEY=N,d.TresCanvas=ie,d.catalogue=F,d.default=Ve,d.extend=W,d.isProd=be,d.normalizeColor=J,d.normalizeVectorFlexibleParam=pe,d.templateCompilerOptions=ke,d.trasverseObjects=ne,d.useCamera=Y,d.useLoader=ye,d.useLogger=A,d.usePointerEventHandler=_e,d.useRaycaster=oe,d.useRenderLoop=z,d.useRenderer=H,d.useSeek=Pe,d.useTexture=Ce,d.useTres=ae,d.useTresContext=Se,d.useTresProvider=Me,Object.defineProperties(d,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tresjs/core",
3
3
  "description": "Declarative ThreeJS using Vue Components",
4
- "version": "2.4.0-next.2",
4
+ "version": "2.4.0-next.3",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@8.3.1",
7
7
  "author": "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",