@tresjs/core 3.2.2 → 3.2.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.
@@ -19,7 +19,63 @@ export interface PBRTextureMaps {
19
19
  [key: string]: Texture | null;
20
20
  }
21
21
  /**
22
- * Composable for loading textures.
22
+ * Map of textures to load that can be passed to `useTexture()`.
23
+ */
24
+ export interface PBRUseTextureMap {
25
+ map?: string;
26
+ displacementMap?: string;
27
+ normalMap?: string;
28
+ roughnessMap?: string;
29
+ metalnessMap?: string;
30
+ aoMap?: string;
31
+ alphaMap?: string;
32
+ matcap?: string;
33
+ }
34
+ /**
35
+ * Loads a single texture.
36
+ *
37
+ * ```ts
38
+ * import { useTexture } from 'tres'
39
+ *
40
+ * const matcapTexture = await useTexture(['path/to/texture.png'])
41
+ * ```
42
+ * Then you can use the texture in your material.
43
+ *
44
+ * ```vue
45
+ * <TresMeshMatcapMaterial :matcap="matcapTexture" />
46
+ * ```
47
+ * @see https://tresjs.org/examples/load-textures.html
48
+ * @export
49
+ * @param paths
50
+ * @return A promise of the resulting texture
51
+ */
52
+ export declare function useTexture(paths: readonly [string]): Promise<Texture>;
53
+ /**
54
+ * Loads multiple textures.
55
+ *
56
+ * ```ts
57
+ * import { useTexture } from 'tres'
58
+ *
59
+ * const [texture1, texture2] = await useTexture([
60
+ * 'path/to/texture1.png',
61
+ * 'path/to/texture2.png',
62
+ * ])
63
+ * ```
64
+ * Then you can use the texture in your material.
65
+ *
66
+ * ```vue
67
+ * <TresMeshStandardMaterial map="texture1" />
68
+ * ```
69
+ * @see https://tresjs.org/examples/load-textures.html
70
+ * @export
71
+ * @param paths
72
+ * @return A promise of the resulting textures
73
+ */
74
+ export declare function useTexture<T extends string[]>(paths: [...T]): Promise<{
75
+ [K in keyof T]: Texture;
76
+ }>;
77
+ /**
78
+ * Loads a PBR texture map.
23
79
  *
24
80
  * ```ts
25
81
  * import { useTexture } from 'tres'
@@ -39,9 +95,9 @@ export interface PBRTextureMaps {
39
95
  * ```
40
96
  * @see https://tresjs.org/examples/load-textures.html
41
97
  * @export
42
- * @param {(Array<string> | { [key: string]: string })} paths
43
- * @return {*} {(Promise<Texture | Array<Texture> | PBRTextureMaps>)}
98
+ * @param paths
99
+ * @return A promise of the resulting pbr texture map
44
100
  */
45
- export declare function useTexture(paths: Array<string> | {
46
- [key: string]: string;
47
- }): Promise<Texture | Array<Texture> | PBRTextureMaps>;
101
+ export declare function useTexture<TextureMap extends PBRUseTextureMap>(paths: TextureMap): Promise<{
102
+ [K in keyof Required<PBRUseTextureMap>]: K extends keyof TextureMap ? Texture : null;
103
+ }>;
package/dist/tres.js CHANGED
@@ -1,15 +1,15 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v3.2.2
3
+ * version: v3.2.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 { ref as B, computed as k, watchEffect as D, onUnmounted as N, shallowRef as F, watch as te, reactive as ue, readonly as le, provide as I, inject as ce, createRenderer as fe, defineComponent as U, useSlots as me, getCurrentInstance as J, onMounted as pe, openBlock as ve, createElementBlock as ge, normalizeStyle as de, h as K, Fragment as ye } from "vue";
9
- import * as we from "three";
10
- import { PerspectiveCamera as W, OrthographicCamera as Ce, Camera as _e, Clock as Pe, Vector3 as Ee, Color as R, REVISION as Me, SRGBColorSpace as Ae, ACESFilmicToneMapping as ke, PCFSoftShadowMap as be, WebGLRenderer as z, LoadingManager as De, TextureLoader as xe, Vector2 as Oe, Raycaster as Be, BufferAttribute as Le, Scene as Te } from "three";
11
- import { createEventHook as O, useRafFn as he, toValue as P, unrefElement as Se, useDevicePixelRatio as Re, usePointer as je, useElementBounding as He, useWindowSize as Fe, useElementSize as ze } from "@vueuse/core";
12
- const Ge = ({ sizes: e, scene: n }) => {
8
+ import { ref as B, computed as k, watchEffect as D, onUnmounted as N, shallowRef as F, watch as te, reactive as ie, readonly as ue, provide as I, inject as le, createRenderer as ce, defineComponent as U, useSlots as fe, getCurrentInstance as J, onMounted as me, openBlock as pe, createElementBlock as ve, normalizeStyle as ge, h as K, Fragment as de } from "vue";
9
+ import * as ye from "three";
10
+ import { PerspectiveCamera as $, OrthographicCamera as we, Camera as Ce, Clock as _e, Vector3 as Pe, Color as R, REVISION as Ee, SRGBColorSpace as Me, ACESFilmicToneMapping as Ae, PCFSoftShadowMap as ke, WebGLRenderer as z, LoadingManager as be, TextureLoader as De, Vector2 as xe, Raycaster as Oe, BufferAttribute as Be, Scene as Le } from "three";
11
+ import { createEventHook as O, useRafFn as Te, toValue as P, unrefElement as he, useDevicePixelRatio as Se, usePointer as Re, useElementBounding as je, useWindowSize as He, useElementSize as Fe } from "@vueuse/core";
12
+ const ze = ({ sizes: e, scene: n }) => {
13
13
  const t = B([]), r = k(
14
14
  () => t.value[0]
15
15
  ), a = (i, c = !1) => {
@@ -17,7 +17,7 @@ const Ge = ({ sizes: e, scene: n }) => {
17
17
  }, o = (i) => {
18
18
  t.value = t.value.filter(({ uuid: c }) => c !== i.uuid);
19
19
  }, f = (i) => {
20
- const c = i instanceof _e ? i : t.value.find((m) => m.uuid === i);
20
+ const c = i instanceof Ce ? i : t.value.find((m) => m.uuid === i);
21
21
  if (!c)
22
22
  return;
23
23
  const u = t.value.filter(({ uuid: m }) => m !== c.uuid);
@@ -25,7 +25,7 @@ const Ge = ({ sizes: e, scene: n }) => {
25
25
  };
26
26
  return D(() => {
27
27
  e.aspectRatio.value && t.value.forEach((i) => {
28
- i instanceof W && (i.aspect = e.aspectRatio.value), (i instanceof W || i instanceof Ce) && i.updateProjectionMatrix();
28
+ i instanceof $ && (i.aspect = e.aspectRatio.value), (i instanceof $ || i instanceof we) && i.updateProjectionMatrix();
29
29
  });
30
30
  }), n.userData.tres__registerCamera = a, n.userData.tres__deregisterCamera = o, N(() => {
31
31
  t.value = [];
@@ -36,9 +36,9 @@ const Ge = ({ sizes: e, scene: n }) => {
36
36
  deregisterCamera: o,
37
37
  setCameraActive: f
38
38
  };
39
- }, re = O(), ne = O(), V = O(), x = new Pe();
39
+ }, re = O(), ne = O(), V = O(), x = new _e();
40
40
  let j = 0, H = 0;
41
- const { pause: Ie, resume: We, isActive: $e } = he(
41
+ const { pause: Ge, resume: Ie, isActive: $e } = Te(
42
42
  () => {
43
43
  re.trigger({ delta: j, elapsed: H, clock: x }), ne.trigger({ delta: j, elapsed: H, clock: x }), V.trigger({ delta: j, elapsed: H, clock: x });
44
44
  },
@@ -51,10 +51,10 @@ const ae = () => ({
51
51
  onBeforeLoop: re.on,
52
52
  onLoop: ne.on,
53
53
  onAfterLoop: V.on,
54
- pause: Ie,
55
- resume: We,
54
+ pause: Ge,
55
+ resume: Ie,
56
56
  isActive: $e
57
- }), pt = !0, X = "[TresJS ▲ ■ ●] ";
57
+ }), vt = !0, X = "[TresJS ▲ ■ ●] ";
58
58
  function L() {
59
59
  function e(r, a) {
60
60
  console.error(`${X} ${r}`, a || "");
@@ -70,30 +70,30 @@ function L() {
70
70
  logMessage: t
71
71
  };
72
72
  }
73
- function vt(e) {
74
- return typeof e == "number" ? [e, e, e] : e instanceof Ee ? [e.x, e.y, e.z] : e;
73
+ function gt(e) {
74
+ return typeof e == "number" ? [e, e, e] : e instanceof Pe ? [e.x, e.y, e.z] : e;
75
75
  }
76
- function Ne(e) {
76
+ function We(e) {
77
77
  return e instanceof R ? e : Array.isArray(e) ? new R(...e) : new R(e);
78
78
  }
79
79
  const oe = (e, n) => {
80
80
  for (const t of Object.keys(n))
81
81
  n[t] instanceof Object && Object.assign(n[t], oe(e[t], n[t]));
82
82
  return Object.assign(e || {}, n), e;
83
- }, Ve = "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", qe = /* @__PURE__ */ Ue(Ve);
83
+ }, Ne = "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", Ve = /* @__PURE__ */ qe(Ne);
84
84
  function Y(e) {
85
85
  return e && e.nodeType === 1;
86
86
  }
87
87
  function h(e) {
88
88
  return e.replace(/-([a-z])/g, (n, t) => t.toUpperCase());
89
89
  }
90
- function Ue(e, n) {
90
+ function qe(e, n) {
91
91
  const t = /* @__PURE__ */ Object.create(null), r = e.split(",");
92
92
  for (let a = 0; a < r.length; a++)
93
93
  t[r[a]] = !0;
94
94
  return n ? (a) => !!t[a.toLowerCase()] : (a) => !!t[a];
95
95
  }
96
- const Je = (e, n) => {
96
+ const Ue = (e, n) => {
97
97
  const t = /* @__PURE__ */ new Set(), r = [];
98
98
  for (const a of e) {
99
99
  const o = n(a);
@@ -105,7 +105,7 @@ const Je = (e, n) => {
105
105
  return;
106
106
  const t = Array.isArray(n) ? n : n.match(/([^[.\]])+/g);
107
107
  return t == null ? void 0 : t.reduce((r, a) => r && r[a], e);
108
- }, Ke = (e, n, t) => {
108
+ }, Je = (e, n, t) => {
109
109
  const r = Array.isArray(n) ? n : n.match(/([^[.\]])+/g);
110
110
  r && r.reduce((a, o, f) => (a[o] === void 0 && (a[o] = {}), f === r.length - 1 && (a[o] = t), a[o]), e);
111
111
  };
@@ -126,7 +126,7 @@ function se(e, n) {
126
126
  return !1;
127
127
  return !0;
128
128
  }
129
- function Xe(e, n) {
129
+ function Ke(e, n) {
130
130
  if (!Array.isArray(e) || !Array.isArray(n) || e.length !== n.length)
131
131
  return !1;
132
132
  for (let t = 0; t < e.length; t++)
@@ -134,14 +134,14 @@ function Xe(e, n) {
134
134
  return !1;
135
135
  return !0;
136
136
  }
137
- const Ye = Number.parseInt(Me.replace("dev", "")), S = {
137
+ const Xe = Array.isArray, Ye = Number.parseInt(Ee.replace("dev", "")), S = {
138
138
  realistic: {
139
- outputColorSpace: Ae,
140
- toneMapping: ke,
139
+ outputColorSpace: Me,
140
+ toneMapping: Ae,
141
141
  toneMappingExposure: 3,
142
142
  shadowMap: {
143
143
  enabled: !0,
144
- type: be
144
+ type: ke
145
145
  }
146
146
  }
147
147
  };
@@ -155,7 +155,7 @@ function Qe({
155
155
  const f = k(() => ({
156
156
  alpha: P(t.alpha),
157
157
  depth: P(t.depth),
158
- canvas: Se(n),
158
+ canvas: he(n),
159
159
  context: P(t.context),
160
160
  stencil: P(t.stencil),
161
161
  antialias: P(t.antialias) === void 0 ? !0 : P(t.antialias),
@@ -171,7 +171,7 @@ function Qe({
171
171
  }), D(() => {
172
172
  i.value.setSize(a.width.value, a.height.value);
173
173
  });
174
- const { pixelRatio: c } = Re();
174
+ const { pixelRatio: c } = Se();
175
175
  D(() => {
176
176
  i.value.setPixelRatio(c.value);
177
177
  });
@@ -199,11 +199,11 @@ function Qe({
199
199
  return b;
200
200
  const d = T();
201
201
  return d !== void 0 ? d : Q(l, A);
202
- }, E = (_, A) => Ke(i.value, A, w(_, A));
202
+ }, E = (_, A) => Je(i.value, A, w(_, A));
203
203
  E(t.shadows, "shadowMap.enabled"), E(t.toneMapping, "toneMapping"), E(t.shadowMapType, "shadowMap.type"), Ye < 150 && E(!t.useLegacyLights, "physicallyCorrectLights"), E(t.outputColorSpace, "outputColorSpace"), E(t.toneMappingExposure, "toneMappingExposure");
204
204
  const C = w(t.clearColor, "clearColor");
205
205
  C && i.value.setClearColor(
206
- C ? Ne(C) : new R(0)
206
+ C ? We(C) : new R(0)
207
207
  // default clear color is not easily/efficiently retrievable from three
208
208
  );
209
209
  });
@@ -216,14 +216,14 @@ function Qe({
216
216
  renderer: i
217
217
  };
218
218
  }
219
- const Z = (e) => typeof e == "function", ie = (e) => !!e && e.constructor === Array;
220
- function Ze(e) {
219
+ const Z = (e) => typeof e == "function", Ze = (e) => !!e && e.constructor === Array;
220
+ function et(e) {
221
221
  const n = { nodes: {}, materials: {} };
222
222
  return e && e.traverse((t) => {
223
223
  t.name && (n.nodes[t.name] = t), t.material && !n.materials[t.material.name] && (n.materials[t.material.name] = t.material);
224
224
  }), n;
225
225
  }
226
- async function gt(e, n, t, r, a) {
226
+ async function dt(e, n, t, r, a) {
227
227
  const { logError: o } = L(), f = new e();
228
228
  a && a(f), t && t(f);
229
229
  const c = (Array.isArray(n) ? n : [n]).map(
@@ -231,17 +231,17 @@ async function gt(e, n, t, r, a) {
231
231
  f.load(
232
232
  u,
233
233
  (s) => {
234
- s.scene && Object.assign(s, Ze(s.scene)), m(s);
234
+ s.scene && Object.assign(s, et(s.scene)), m(s);
235
235
  },
236
236
  r,
237
237
  (s) => l(o("[useLoader] - Failed to load resource", s))
238
238
  );
239
239
  })
240
240
  );
241
- return ie(n) ? await Promise.all(c) : await c[0];
241
+ return Ze(n) ? await Promise.all(c) : await c[0];
242
242
  }
243
- async function dt(e) {
244
- const n = new De(), t = new xe(n), r = (a) => new Promise((o, f) => {
243
+ async function yt(e) {
244
+ const n = new be(), t = new De(n), r = (a) => new Promise((o, f) => {
245
245
  t.load(
246
246
  a,
247
247
  (i) => o(i),
@@ -251,7 +251,7 @@ async function dt(e) {
251
251
  }
252
252
  );
253
253
  });
254
- if (ie(e)) {
254
+ if (Xe(e)) {
255
255
  const a = await Promise.all(e.map((o) => r(o)));
256
256
  return e.length > 1 ? a : a[0];
257
257
  } else {
@@ -277,8 +277,8 @@ async function dt(e) {
277
277
  };
278
278
  }
279
279
  }
280
- const et = (e, { renderer: n, camera: t, raycaster: r }) => {
281
- const a = k(() => n.value.domElement), { x: o, y: f } = je({ target: a }), { width: i, height: c, top: u, left: m } = He(a), l = ({ x: d, y: M }) => {
280
+ const tt = (e, { renderer: n, camera: t, raycaster: r }) => {
281
+ const a = k(() => n.value.domElement), { x: o, y: f } = Re({ target: a }), { width: i, height: c, top: u, left: m } = je(a), l = ({ x: d, y: M }) => {
282
282
  if (a.value)
283
283
  return {
284
284
  x: (d - m.value) / i.value * 2 - 1,
@@ -286,7 +286,7 @@ const et = (e, { renderer: n, camera: t, raycaster: r }) => {
286
286
  };
287
287
  }, s = ({ x: d, y: M }) => {
288
288
  if (t.value)
289
- return r.value.setFromCamera(new Oe(d, M), t.value), r.value.intersectObjects(e.value, !1);
289
+ return r.value.setFromCamera(new xe(d, M), t.value), r.value.intersectObjects(e.value, !1);
290
290
  }, v = (d) => {
291
291
  const M = l({
292
292
  x: (d == null ? void 0 : d.clientX) ?? o.value,
@@ -314,7 +314,7 @@ const et = (e, { renderer: n, camera: t, raycaster: r }) => {
314
314
  onPointerMove: (d) => w.on(d).off
315
315
  };
316
316
  };
317
- function yt() {
317
+ function wt() {
318
318
  const { logWarning: e } = L();
319
319
  function n(r, a, o) {
320
320
  let f = null;
@@ -330,8 +330,8 @@ function yt() {
330
330
  seekByName: t
331
331
  };
332
332
  }
333
- const tt = ({ scene: e, contextParts: n }) => {
334
- const t = ue({
333
+ const rt = ({ scene: e, contextParts: n }) => {
334
+ const t = ie({
335
335
  click: /* @__PURE__ */ new Map(),
336
336
  pointerMove: /* @__PURE__ */ new Map(),
337
337
  pointerEnter: /* @__PURE__ */ new Map(),
@@ -348,14 +348,14 @@ const tt = ({ scene: e, contextParts: n }) => {
348
348
  };
349
349
  e.userData.tres__registerAtPointerEventHandler = i, e.userData.tres__deregisterAtPointerEventHandler = f, e.userData.tres__registerBlockingObjectAtPointerEventHandler = a, e.userData.tres__deregisterBlockingObjectAtPointerEventHandler = o;
350
350
  const c = k(
351
- () => Je(
351
+ () => Ue(
352
352
  [
353
353
  ...Array.from(r.value),
354
354
  ...Object.values(t).map((s) => Array.from(s.keys())).flat()
355
355
  ],
356
356
  ({ uuid: s }) => s
357
357
  )
358
- ), { onClick: u, onPointerMove: m } = et(c, n);
358
+ ), { onClick: u, onPointerMove: m } = tt(c, n);
359
359
  u(({ intersects: s, event: v }) => {
360
360
  var y;
361
361
  s.length && ((y = t.click.get(s[0].object)) == null || y(s[0], v));
@@ -369,8 +369,8 @@ const tt = ({ scene: e, contextParts: n }) => {
369
369
  registerObject: i,
370
370
  deregisterObject: f
371
371
  };
372
- }, $ = B({}), q = (e) => Object.assign($.value, e);
373
- function rt({
372
+ }, W = B({}), q = (e) => Object.assign(W.value, e);
373
+ function nt({
374
374
  scene: e,
375
375
  canvas: n,
376
376
  windowSize: t,
@@ -378,7 +378,7 @@ function rt({
378
378
  rendererOptions: a
379
379
  }) {
380
380
  const o = k(
381
- () => P(t) ? Fe() : ze(P(n).parentElement)
381
+ () => P(t) ? He() : Fe(P(n).parentElement)
382
382
  ), f = k(() => o.value.width.value), i = k(() => o.value.height.value), c = k(() => f.value / i.value), u = {
383
383
  height: i,
384
384
  width: f,
@@ -389,7 +389,7 @@ function rt({
389
389
  registerCamera: v,
390
390
  deregisterCamera: y,
391
391
  setCameraActive: g
392
- } = Ge({ sizes: u, scene: e }), { renderer: w } = Qe(
392
+ } = ze({ sizes: u, scene: e }), { renderer: w } = Qe(
393
393
  {
394
394
  scene: e,
395
395
  canvas: n,
@@ -401,9 +401,9 @@ function rt({
401
401
  sizes: u,
402
402
  scene: m,
403
403
  camera: l,
404
- cameras: le(s),
404
+ cameras: ue(s),
405
405
  renderer: w,
406
- raycaster: F(new Be()),
406
+ raycaster: F(new Oe()),
407
407
  controls: B(null),
408
408
  extend: q,
409
409
  registerCamera: v,
@@ -412,18 +412,18 @@ function rt({
412
412
  };
413
413
  return I("useTres", E), E;
414
414
  }
415
- function nt() {
416
- const e = ce("useTres");
415
+ function at() {
416
+ const e = le("useTres");
417
417
  if (!e)
418
418
  throw new Error("useTresContext must be used together with useTresContextProvider");
419
419
  return e;
420
420
  }
421
- const wt = nt;
421
+ const Ct = at;
422
422
  let G = null, p = null;
423
- const { logError: ee } = L(), at = {
423
+ const { logError: ee } = L(), ot = {
424
424
  createElement(e, n, t, r) {
425
425
  var f, i;
426
- if (r || (r = {}), r.args || (r.args = []), e === "template" || qe(e))
426
+ if (r || (r = {}), r.args || (r.args = []), e === "template" || Ve(e))
427
427
  return null;
428
428
  let a = e.replace("Tres", ""), o;
429
429
  if (e === "primitive") {
@@ -431,7 +431,7 @@ const { logError: ee } = L(), at = {
431
431
  const c = r.object;
432
432
  a = c.type, o = Object.assign(c, { type: a, attach: r.attach, primitive: !0 });
433
433
  } else {
434
- const c = $.value[a];
434
+ const c = W.value[a];
435
435
  c || ee(`${a} is not defined on the THREE namespace. Use extend to add it to the catalog.`), o = new c(...r.args);
436
436
  }
437
437
  return o.isCamera && (r != null && r.position || o.position.set(3, 3, 3), r != null && r.lookAt || o.lookAt(0, 0, 0)), (r == null ? void 0 : r.attach) === void 0 && (o.isMaterial ? o.attach = "material" : o.isBufferGeometry && (o.attach = "geometry")), o.isObject3D && ((f = r == null ? void 0 : r.material) != null && f.isMaterial && (o.userData.tres__materialViaProp = !0), (i = r == null ? void 0 : r.geometry) != null && i.isBufferGeometry && (o.userData.tres__geometryViaProp = !0)), o.userData = {
@@ -499,7 +499,7 @@ const { logError: ee } = L(), at = {
499
499
  let m = h(u), l = c == null ? void 0 : c[m];
500
500
  if (u === "args") {
501
501
  const v = e, y = t ?? [], g = r ?? [], w = e.userData.tres__name || e.type;
502
- w && y.length && !Xe(y, g) && (c = Object.assign(v, new $.value[w](...r)));
502
+ w && y.length && !Ke(y, g) && (c = Object.assign(v, new W.value[w](...r)));
503
503
  return;
504
504
  }
505
505
  if (c.type === "BufferGeometry") {
@@ -507,7 +507,7 @@ const { logError: ee } = L(), at = {
507
507
  return;
508
508
  c.setAttribute(
509
509
  h(u),
510
- new Le(...r)
510
+ new Be(...r)
511
511
  );
512
512
  return;
513
513
  }
@@ -535,9 +535,9 @@ const { logError: ee } = L(), at = {
535
535
  setScopeId: () => void 0,
536
536
  cloneNode: () => void 0,
537
537
  insertStaticContent: () => void 0
538
- }, { render: ot } = fe(at);
539
- q(we);
540
- const st = ["data-scene"], it = /* @__PURE__ */ U({
538
+ }, { render: st } = ce(ot);
539
+ q(ye);
540
+ const it = ["data-scene"], ut = /* @__PURE__ */ U({
541
541
  __name: "TresCanvas",
542
542
  props: {
543
543
  shadows: { type: Boolean, default: void 0 },
@@ -565,31 +565,31 @@ const st = ["data-scene"], it = /* @__PURE__ */ U({
565
565
  },
566
566
  setup(e) {
567
567
  var m;
568
- const n = e, { logWarning: t } = L(), r = B(), a = F(new Te());
568
+ const n = e, { logWarning: t } = L(), r = B(), a = F(new Le());
569
569
  ae();
570
- const o = me(), f = (m = J()) == null ? void 0 : m.appContext.app, i = (l) => U({
570
+ const o = fe(), f = (m = J()) == null ? void 0 : m.appContext.app, i = (l) => U({
571
571
  setup() {
572
572
  var v;
573
573
  const s = (v = J()) == null ? void 0 : v.appContext;
574
- return s && (s.app = f), I("useTres", l), I("extend", q), () => K(ye, null, o != null && o.default ? o.default() : []);
574
+ return s && (s.app = f), I("useTres", l), I("extend", q), () => K(de, null, o != null && o.default ? o.default() : []);
575
575
  }
576
576
  }), c = (l) => {
577
577
  const s = i(l);
578
- ot(K(s), a.value);
578
+ st(K(s), a.value);
579
579
  }, u = k(() => n.disableRender);
580
- return pe(() => {
581
- const l = r, s = rt({
580
+ return me(() => {
581
+ const l = r, s = nt({
582
582
  scene: a.value,
583
583
  canvas: l,
584
584
  windowSize: n.windowSize,
585
585
  disableRender: u,
586
586
  rendererOptions: n
587
587
  });
588
- tt({ scene: a.value, contextParts: s });
588
+ rt({ scene: a.value, contextParts: s });
589
589
  const { registerCamera: v, camera: y, cameras: g, deregisterCamera: w } = s;
590
590
  c(s);
591
591
  const E = () => {
592
- const C = new W(
592
+ const C = new $(
593
593
  45,
594
594
  window.innerWidth / window.innerHeight,
595
595
  0.1,
@@ -611,11 +611,11 @@ const st = ["data-scene"], it = /* @__PURE__ */ U({
611
611
  ), y.value || (t(
612
612
  "No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."
613
613
  ), E());
614
- }), (l, s) => (ve(), ge("canvas", {
614
+ }), (l, s) => (pe(), ve("canvas", {
615
615
  ref_key: "canvas",
616
616
  ref: r,
617
617
  "data-scene": a.value.uuid,
618
- style: de({
618
+ style: ge({
619
619
  display: "block",
620
620
  width: "100%",
621
621
  height: "100%",
@@ -625,43 +625,43 @@ const st = ["data-scene"], it = /* @__PURE__ */ U({
625
625
  pointerEvents: "auto",
626
626
  touchAction: "none"
627
627
  })
628
- }, null, 12, st));
628
+ }, null, 12, it));
629
629
  }
630
- }), ut = [
630
+ }), lt = [
631
631
  "TresCanvas",
632
632
  "TresLeches",
633
633
  "TresScene"
634
- ], lt = {
634
+ ], ct = {
635
635
  template: {
636
636
  compilerOptions: {
637
- isCustomElement: (e) => e.startsWith("Tres") && !ut.includes(e) || e === "primitive"
637
+ isCustomElement: (e) => e.startsWith("Tres") && !lt.includes(e) || e === "primitive"
638
638
  }
639
639
  }
640
- }, Ct = lt, _t = {
640
+ }, _t = ct, Pt = {
641
641
  install(e) {
642
- e.component("TresCanvas", it);
642
+ e.component("TresCanvas", ut);
643
643
  }
644
644
  };
645
645
  export {
646
- it as TresCanvas,
647
- $ as catalogue,
648
- _t as default,
646
+ ut as TresCanvas,
647
+ W as catalogue,
648
+ Pt as default,
649
649
  q as extend,
650
- pt as isProd,
651
- Ne as normalizeColor,
652
- vt as normalizeVectorFlexibleParam,
653
- Ct as templateCompilerOptions,
654
- Ze as trasverseObjects,
655
- Ge as useCamera,
656
- gt as useLoader,
650
+ vt as isProd,
651
+ We as normalizeColor,
652
+ gt as normalizeVectorFlexibleParam,
653
+ _t as templateCompilerOptions,
654
+ et as trasverseObjects,
655
+ ze as useCamera,
656
+ dt as useLoader,
657
657
  L as useLogger,
658
- tt as usePointerEventHandler,
659
- et as useRaycaster,
658
+ rt as usePointerEventHandler,
659
+ tt as useRaycaster,
660
660
  ae as useRenderLoop,
661
661
  Qe as useRenderer,
662
- yt as useSeek,
663
- dt as useTexture,
664
- wt as useTres,
665
- nt as useTresContext,
666
- rt as useTresContextProvider
662
+ wt as useSeek,
663
+ yt as useTexture,
664
+ Ct as useTres,
665
+ at as useTresContext,
666
+ nt as useTresContextProvider
667
667
  };
package/dist/tres.umd.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v3.2.2
3
+ * version: v3.2.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(y,c){typeof exports=="object"&&typeof module<"u"?c(exports,require("vue"),require("three"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","three","@vueuse/core"],c):(y=typeof globalThis<"u"?globalThis:y||self,c(y.tres={},y.Vue,y.Three,y.VueUseCore))})(this,function(y,c,P,w){"use strict";function se(e){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,r.get?r:{enumerable:!0,get:()=>e[t]})}}return n.default=e,Object.freeze(n)}const ie=se(P),I=({sizes:e,scene:n})=>{const t=c.ref([]),r=c.computed(()=>t.value[0]),a=(i,f=!1)=>{t.value.some(({uuid:l})=>l===i.uuid)||(f?m(i):t.value.push(i))},o=i=>{t.value=t.value.filter(({uuid:f})=>f!==i.uuid)},m=i=>{const f=i instanceof P.Camera?i:t.value.find(d=>d.uuid===i);if(!f)return;const l=t.value.filter(({uuid:d})=>d!==f.uuid);t.value=[f,...l]};return c.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(i=>{i instanceof P.PerspectiveCamera&&(i.aspect=e.aspectRatio.value),(i instanceof P.PerspectiveCamera||i instanceof P.OrthographicCamera)&&i.updateProjectionMatrix()})}),n.userData.tres__registerCamera=a,n.userData.tres__deregisterCamera=o,c.onUnmounted(()=>{t.value=[]}),{camera:r,cameras:t,registerCamera:a,deregisterCamera:o,setCameraActive:m}},W=w.createEventHook(),N=w.createEventHook(),F=w.createEventHook(),S=new P.Clock;let B=0,x=0;const{pause:le,resume:ue,isActive:ce}=w.useRafFn(()=>{W.trigger({delta:B,elapsed:x,clock:S}),N.trigger({delta:B,elapsed:x,clock:S}),F.trigger({delta:B,elapsed:x,clock:S})},{immediate:!1});F.on(()=>{B=S.getDelta(),x=S.getElapsedTime()});const G=()=>({onBeforeLoop:W.on,onLoop:N.on,onAfterLoop:F.on,pause:le,resume:ue,isActive:ce}),fe=!0,$="[TresJS ▲ ■ ●] ";function L(){function e(r,a){console.error(`${$} ${r}`,a||"")}function n(r){console.warn(`${$} ${r}`)}function t(r,a){}return{logError:e,logWarning:n,logMessage:t}}function me(e){return typeof e=="number"?[e,e,e]:e instanceof P.Vector3?[e.x,e.y,e.z]:e}function q(e){return e instanceof P.Color?e:Array.isArray(e)?new P.Color(...e):new P.Color(e)}const U=(e,n)=>{for(const t of Object.keys(n))n[t]instanceof Object&&Object.assign(n[t],U(e[t],n[t]));return Object.assign(e||{},n),e},de=pe("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 H(e){return e&&e.nodeType===1}function j(e){return e.replace(/-([a-z])/g,(n,t)=>t.toUpperCase())}function pe(e,n){const t=Object.create(null),r=e.split(",");for(let a=0;a<r.length;a++)t[r[a]]=!0;return n?a=>!!t[a.toLowerCase()]:a=>!!t[a]}const ge=(e,n)=>{const t=new Set,r=[];for(const a of e){const o=n(a);t.has(o)||(t.add(o),r.push(a))}return r},J=(e,n)=>{if(!n)return;const t=Array.isArray(n)?n:n.match(/([^[.\]])+/g);return t==null?void 0:t.reduce((r,a)=>r&&r[a],e)},ve=(e,n,t)=>{const r=Array.isArray(n)?n:n.match(/([^[.\]])+/g);r&&r.reduce((a,o,m)=>(a[o]===void 0&&(a[o]={}),m===r.length-1&&(a[o]=t),a[o]),e)};function K(e,n){if(H(e)&&H(n)){const a=e.attributes,o=n.attributes;return a.length!==o.length?!1:Array.from(a).every(({name:m,value:i})=>n.getAttribute(m)===i)}if(e===n)return!0;if(e===null||typeof e!="object"||n===null||typeof n!="object")return!1;const t=Object.keys(e),r=Object.keys(n);if(t.length!==r.length)return!1;for(const a of t)if(!r.includes(a)||!K(e[a],n[a]))return!1;return!0}function ye(e,n){if(!Array.isArray(e)||!Array.isArray(n)||e.length!==n.length)return!1;for(let t=0;t<e.length;t++)if(!K(e[t],n[t]))return!1;return!0}const we=Number.parseInt(P.REVISION.replace("dev","")),T={realistic:{outputColorSpace:P.SRGBColorSpace,toneMapping:P.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:P.PCFSoftShadowMap}}};function X({scene:e,canvas:n,options:t,disableRender:r,contextParts:{sizes:a,camera:o}}){const m=c.computed(()=>({alpha:w.toValue(t.alpha),depth:w.toValue(t.depth),canvas:w.unrefElement(n),context:w.toValue(t.context),stencil:w.toValue(t.stencil),antialias:w.toValue(t.antialias)===void 0?!0:w.toValue(t.antialias),precision:w.toValue(t.precision),powerPreference:w.toValue(t.powerPreference),premultipliedAlpha:w.toValue(t.premultipliedAlpha),preserveDrawingBuffer:w.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:w.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:w.toValue(t.failIfMajorPerformanceCaveat)})),i=c.shallowRef(new P.WebGLRenderer(m.value));c.watch(m,()=>{i.value.dispose(),i.value=new P.WebGLRenderer(m.value)}),c.watchEffect(()=>{i.value.setSize(a.width.value,a.height.value)});const{pixelRatio:f}=w.useDevicePixelRatio();c.watchEffect(()=>{i.value.setPixelRatio(f.value)});const{logError:l}=L(),u=(()=>{const v=new P.WebGLRenderer,M={shadowMap:{enabled:v.shadowMap.enabled,type:v.shadowMap.type},toneMapping:v.toneMapping,toneMappingExposure:v.toneMappingExposure,outputColorSpace:v.outputColorSpace};return v.dispose(),M})();c.watchEffect(()=>{const v=w.toValue(t.preset);v&&(v in T||l(`Renderer Preset must be one of these: ${Object.keys(T).join(", ")}`),U(i.value,T[v]));const M=(k,h)=>{const D=w.toValue(k),z=()=>{if(v)return J(T[v],h)};if(D!==void 0)return D;const C=z();return C!==void 0?C:J(u,h)},A=(k,h)=>ve(i.value,h,M(k,h));A(t.shadows,"shadowMap.enabled"),A(t.toneMapping,"toneMapping"),A(t.shadowMapType,"shadowMap.type"),we<150&&A(!t.useLegacyLights,"physicallyCorrectLights"),A(t.outputColorSpace,"outputColorSpace"),A(t.toneMappingExposure,"toneMappingExposure");const b=M(t.clearColor,"clearColor");b&&i.value.setClearColor(b?q(b):new P.Color(0))});const{pause:s,resume:g,onLoop:_}=G();return _(()=>{o.value&&!w.toValue(r)&&i.value.render(e,o.value)}),g(),c.onUnmounted(()=>{s(),i.value.dispose(),i.value.forceContextLoss()}),{renderer:i}}const Y=e=>typeof e=="function",Q=e=>!!e&&e.constructor===Array;function Z(e){const n={nodes:{},materials:{}};return e&&e.traverse(t=>{t.name&&(n.nodes[t.name]=t),t.material&&!n.materials[t.material.name]&&(n.materials[t.material.name]=t.material)}),n}async function Ce(e,n,t,r,a){const{logError:o}=L(),m=new e;a&&a(m),t&&t(m);const f=(Array.isArray(n)?n:[n]).map(l=>new Promise((d,u)=>{m.load(l,s=>{s.scene&&Object.assign(s,Z(s.scene)),d(s)},r,s=>u(o("[useLoader] - Failed to load resource",s)))}));return Q(n)?await Promise.all(f):await f[0]}async function _e(e){const n=new P.LoadingManager,t=new P.TextureLoader(n),r=a=>new Promise((o,m)=>{t.load(a,i=>o(i),()=>null,()=>{m(new Error("[useTextures] - Failed to load texture"))})});if(Q(e)){const a=await Promise.all(e.map(o=>r(o)));return e.length>1?a:a[0]}else{const{map:a,displacementMap:o,normalMap:m,roughnessMap:i,metalnessMap:f,aoMap:l,alphaMap:d,matcap:u}=e;return{map:a?await r(a):null,displacementMap:o?await r(o):null,normalMap:m?await r(m):null,roughnessMap:i?await r(i):null,metalnessMap:f?await r(f):null,aoMap:l?await r(l):null,alphaMap:d?await r(d):null,matcap:u?await r(u):null}}}const ee=(e,{renderer:n,camera:t,raycaster:r})=>{const a=c.computed(()=>n.value.domElement),{x:o,y:m}=w.usePointer({target:a}),{width:i,height:f,top:l,left:d}=w.useElementBounding(a),u=({x:C,y:O})=>{if(a.value)return{x:(C-d.value)/i.value*2-1,y:-((O-l.value)/f.value)*2+1}},s=({x:C,y:O})=>{if(t.value)return r.value.setFromCamera(new P.Vector2(C,O),t.value),r.value.intersectObjects(e.value,!1)},g=C=>{const O=u({x:(C==null?void 0:C.clientX)??o.value,y:(C==null?void 0:C.clientY)??m.value});return O?s(O)||[]:[]},_=c.computed(()=>g()),v=w.createEventHook(),M=w.createEventHook(),A=(C,O)=>{C.trigger({event:O,intersects:g(O)})},b=C=>{A(M,C)};let k;const h=C=>{var O;k=(O=g(C)[0])==null?void 0:O.object},D=C=>{var O;C instanceof PointerEvent&&k===((O=g(C)[0])==null?void 0:O.object)&&A(v,C)},z=C=>M.trigger({event:C,intersects:[]});return a.value.addEventListener("pointerup",D),a.value.addEventListener("pointerdown",h),a.value.addEventListener("pointermove",b),a.value.addEventListener("pointerleave",z),c.onUnmounted(()=>{a!=null&&a.value&&(a.value.removeEventListener("pointerup",D),a.value.removeEventListener("pointerdown",h),a.value.removeEventListener("pointermove",b),a.value.removeEventListener("pointerleave",z))}),{intersects:_,onClick:C=>v.on(C).off,onPointerMove:C=>M.on(C).off}};function Pe(){const{logWarning:e}=L();function n(r,a,o){let m=null;return r.traverse(i=>{i[a]===o&&(m=i)}),m||e(`Child with ${a} '${o}' not found.`),m}function t(r,a){return n(r,"name",a)}return{seek:n,seekByName:t}}const te=({scene:e,contextParts:n})=>{const t=c.reactive({click:new Map,pointerMove:new Map,pointerEnter:new Map,pointerLeave:new Map}),r=c.ref(new Set),a=s=>{r.value.add(s)},o=s=>{r.value.delete(s)},m=s=>{Object.values(t).forEach(g=>g.delete(s)),o(s)},i=s=>{const{onClick:g,onPointerMove:_,onPointerEnter:v,onPointerLeave:M}=s;g&&t.click.set(s,g),_&&t.pointerMove.set(s,_),v&&t.pointerEnter.set(s,v),M&&t.pointerLeave.set(s,M)};e.userData.tres__registerAtPointerEventHandler=i,e.userData.tres__deregisterAtPointerEventHandler=m,e.userData.tres__registerBlockingObjectAtPointerEventHandler=a,e.userData.tres__deregisterBlockingObjectAtPointerEventHandler=o;const f=c.computed(()=>ge([...Array.from(r.value),...Object.values(t).map(s=>Array.from(s.keys())).flat()],({uuid:s})=>s)),{onClick:l,onPointerMove:d}=ee(f,n);l(({intersects:s,event:g})=>{var _;s.length&&((_=t.click.get(s[0].object))==null||_(s[0],g))});let u;return d(({intersects:s,event:g})=>{var b,k,h,D;const _=(b=s==null?void 0:s[0])==null?void 0:b.object,{pointerLeave:v,pointerEnter:M,pointerMove:A}=t;u&&u!==_&&((k=v.get(u))==null||k(u,g)),_&&(u!==_&&((h=M.get(_))==null||h(s[0],g)),(D=A.get(_))==null||D(s[0],g)),u=_||null}),{registerObject:i,deregisterObject:m}},E=c.ref({}),V=e=>Object.assign(E.value,e);function re({scene:e,canvas:n,windowSize:t,disableRender:r,rendererOptions:a}){const o=c.computed(()=>w.toValue(t)?w.useWindowSize():w.useElementSize(w.toValue(n).parentElement)),m=c.computed(()=>o.value.width.value),i=c.computed(()=>o.value.height.value),f=c.computed(()=>m.value/i.value),l={height:i,width:m,aspectRatio:f},d=c.shallowRef(e),{camera:u,cameras:s,registerCamera:g,deregisterCamera:_,setCameraActive:v}=I({sizes:l,scene:e}),{renderer:M}=X({scene:e,canvas:n,options:a,contextParts:{sizes:l,camera:u},disableRender:r}),A={sizes:l,scene:d,camera:u,cameras:c.readonly(s),renderer:M,raycaster:c.shallowRef(new P.Raycaster),controls:c.ref(null),extend:V,registerCamera:g,setCameraActive:v,deregisterCamera:_};return c.provide("useTres",A),A}function ne(){const e=c.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const Me=ne;function Se(e){}let R=null,p=null;const{logError:ae}=L(),be={createElement(e,n,t,r){var m,i;if(r||(r={}),r.args||(r.args=[]),e==="template"||de(e))return null;let a=e.replace("Tres",""),o;if(e==="primitive"){(r==null?void 0:r.object)===void 0&&ae("Tres primitives need a prop 'object'");const f=r.object;a=f.type,o=Object.assign(f,{type:a,attach:r.attach,primitive:!0})}else{const f=E.value[a];f||ae(`${a} is not defined on the THREE namespace. Use extend to add it to the catalog.`),o=new f(...r.args)}return o.isCamera&&(r!=null&&r.position||o.position.set(3,3,3),r!=null&&r.lookAt||o.lookAt(0,0,0)),(r==null?void 0:r.attach)===void 0&&(o.isMaterial?o.attach="material":o.isBufferGeometry&&(o.attach="geometry")),o.isObject3D&&((m=r==null?void 0:r.material)!=null&&m.isMaterial&&(o.userData.tres__materialViaProp=!0),(i=r==null?void 0:r.geometry)!=null&&i.isBufferGeometry&&(o.userData.tres__geometryViaProp=!0)),o.userData={...o.userData,tres__name:a},o},insert(e,n){var t,r,a,o,m,i,f,l,d,u;if(n&&n.isScene&&(p=n),(((t=e==null?void 0:e.__vnode)==null?void 0:t.type)==="TresGroup"||((r=e==null?void 0:e.__vnode)==null?void 0:r.type)==="TresObject3D")&&n===null&&!((o=(a=e==null?void 0:e.__vnode)==null?void 0:a.ctx)!=null&&o.asyncResolved)){R=e;return}else n===null&&((m=e==null?void 0:e.__vnode)!=null&&m.type.includes("Controls")||(i=e==null?void 0:e.__vnode)!=null&&i.type.includes("Helper"))&&(R=p);if(n||(n=R),e!=null&&e.isObject3D){if(e!=null&&e.isCamera){if(!(p!=null&&p.userData.tres__registerCamera))throw"could not find tres__registerCamera on scene's userData";(l=p==null?void 0:(f=p.userData).tres__registerCamera)==null||l.call(f,e)}if(e!=null&&e.onClick||e!=null&&e.onPointerMove||e!=null&&e.onPointerEnter||e!=null&&e.onPointerLeave){if(!(p!=null&&p.userData.tres__registerAtPointerEventHandler))throw"could not find tres__registerAtPointerEventHandler on scene's userData";(u=p==null?void 0:(d=p.userData).tres__registerAtPointerEventHandler)==null||u.call(d,e)}}e!=null&&e.isObject3D&&(n!=null&&n.isObject3D)?(n.add(e),e.dispatchEvent({type:"added"})):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,t;if(e){if(e.isObject3D){const r=e,a=l=>{var u,s;const d=l;l.userData.tres__materialViaProp||(u=d.material)==null||u.dispose(),l.userData.tres__geometryViaProp||(s=d.geometry)==null||s.dispose()},o=p==null?void 0:p.userData.tres__deregisterAtPointerEventHandler,m=p==null?void 0:p.userData.tres__deregisterBlockingObjectAtPointerEventHandler,i=l=>{var d,u;if(!m)throw"could not find tres__deregisterBlockingObjectAtPointerEventHandler on scene's userData";if((u=p==null?void 0:(d=p.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||u.call(d,l),!o)throw"could not find tres__deregisterAtPointerEventHandler on scene's userData";(l!=null&&l.onClick||l!=null&&l.onPointerMove||l!=null&&l.onPointerEnter||l!=null&&l.onPointerLeave)&&(o==null||o(l))},f=l=>{const d=p==null?void 0:p.userData.tres__deregisterCamera;if(!d)throw"could not find tres__deregisterCamera on scene's userData";l.isCamera&&(d==null||d(l))};r.traverse(l=>{a(l),f(l),i==null||i(l)}),a(r),f(r),i==null||i(r)}(n=e.removeFromParent)==null||n.call(e),(t=e.dispose)==null||t.call(e)}},patchProp(e,n,t,r){var a,o,m,i;if(e){let f=e,l=n;if(e.isObject3D&&l==="blocks-pointer-events"){r||r===""?(o=p==null?void 0:(a=p.userData).tres__registerBlockingObjectAtPointerEventHandler)==null||o.call(a,e):(i=p==null?void 0:(m=p.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||i.call(m,e);return}let d=j(l),u=f==null?void 0:f[d];if(l==="args"){const g=e,_=t??[],v=r??[],M=e.userData.tres__name||e.type;M&&_.length&&!ye(_,v)&&(f=Object.assign(g,new E.value[M](...r)));return}if(f.type==="BufferGeometry"){if(l==="args")return;f.setAttribute(j(l),new P.BufferAttribute(...r));return}if(l.includes("-")&&u===void 0){const g=l.split("-");u=g.reduce((_,v)=>_[j(v)],f),l=g.pop(),d=l.toLowerCase(),u!=null&&u.set||(f=g.reduce((_,v)=>_[j(v)],f))}let s=r;if(s===""&&(s=!0),Y(u)){Array.isArray(s)?e[d](...s):e[d](s);return}!(u!=null&&u.set)&&!Y(u)?f[d]=s:u.constructor===s.constructor&&(u!=null&&u.copy)?u==null||u.copy(s):Array.isArray(s)?u.set(...s):!u.isColor&&u.setScalar?u.setScalar(s):u.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},{render:ke}=c.createRenderer(be);V(ie);const Ae=["data-scene"],oe=c.defineComponent({__name:"TresCanvas",props:{shadows:{type:Boolean,default:void 0},clearColor:{},toneMapping:{},shadowMapType:{},useLegacyLights:{type:Boolean,default:void 0},outputColorSpace:{},toneMappingExposure:{},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}},setup(e){var d;const n=e,{logWarning:t}=L(),r=c.ref(),a=c.shallowRef(new P.Scene);G();const o=c.useSlots(),m=(d=c.getCurrentInstance())==null?void 0:d.appContext.app,i=u=>c.defineComponent({setup(){var g;const s=(g=c.getCurrentInstance())==null?void 0:g.appContext;return s&&(s.app=m),c.provide("useTres",u),c.provide("extend",V),()=>c.h(c.Fragment,null,o!=null&&o.default?o.default():[])}}),f=u=>{const s=i(u);ke(c.h(s),a.value)},l=c.computed(()=>n.disableRender);return c.onMounted(()=>{const u=r,s=re({scene:a.value,canvas:u,windowSize:n.windowSize,disableRender:l,rendererOptions:n});te({scene:a.value,contextParts:s});const{registerCamera:g,camera:_,cameras:v,deregisterCamera:M}=s;f(s);const A=()=>{const b=new P.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);b.position.set(3,3,3),b.lookAt(0,0,0),g(b);const k=c.watchEffect(()=>{v.value.length>=2&&(b.removeFromParent(),M(b),k==null||k())})};c.watch(()=>n.camera,(b,k)=>{b&&g(b),k&&(k.removeFromParent(),M(k))},{immediate:!0}),_.value||(t("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),A())}),(u,s)=>(c.openBlock(),c.createElementBlock("canvas",{ref_key:"canvas",ref:r,"data-scene":a.value.uuid,style:c.normalizeStyle({display:"block",width:"100%",height:"100%",position:u.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none"})},null,12,Ae))}}),Oe=["TresCanvas","TresLeches","TresScene"],he={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!Oe.includes(e)||e==="primitive"}}},De={install(e){e.component("TresCanvas",oe)}};y.TresCanvas=oe,y.catalogue=E,y.default=De,y.extend=V,y.isProd=fe,y.normalizeColor=q,y.normalizeVectorFlexibleParam=me,y.templateCompilerOptions=he,y.trasverseObjects=Z,y.useCamera=I,y.useLoader=Ce,y.useLogger=L,y.usePointerEventHandler=te,y.useRaycaster=ee,y.useRenderLoop=G,y.useRenderer=X,y.useSeek=Pe,y.useTexture=_e,y.useTres=Me,y.useTresContext=ne,y.useTresContextProvider=re,Object.defineProperties(y,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
8
+ (function(y,c){typeof exports=="object"&&typeof module<"u"?c(exports,require("vue"),require("three"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","three","@vueuse/core"],c):(y=typeof globalThis<"u"?globalThis:y||self,c(y.tres={},y.Vue,y.Three,y.VueUseCore))})(this,function(y,c,P,w){"use strict";function oe(e){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,r.get?r:{enumerable:!0,get:()=>e[t]})}}return n.default=e,Object.freeze(n)}const se=oe(P),I=({sizes:e,scene:n})=>{const t=c.ref([]),r=c.computed(()=>t.value[0]),a=(i,f=!1)=>{t.value.some(({uuid:l})=>l===i.uuid)||(f?m(i):t.value.push(i))},o=i=>{t.value=t.value.filter(({uuid:f})=>f!==i.uuid)},m=i=>{const f=i instanceof P.Camera?i:t.value.find(d=>d.uuid===i);if(!f)return;const l=t.value.filter(({uuid:d})=>d!==f.uuid);t.value=[f,...l]};return c.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(i=>{i instanceof P.PerspectiveCamera&&(i.aspect=e.aspectRatio.value),(i instanceof P.PerspectiveCamera||i instanceof P.OrthographicCamera)&&i.updateProjectionMatrix()})}),n.userData.tres__registerCamera=a,n.userData.tres__deregisterCamera=o,c.onUnmounted(()=>{t.value=[]}),{camera:r,cameras:t,registerCamera:a,deregisterCamera:o,setCameraActive:m}},W=w.createEventHook(),$=w.createEventHook(),F=w.createEventHook(),S=new P.Clock;let B=0,x=0;const{pause:ie,resume:le,isActive:ue}=w.useRafFn(()=>{W.trigger({delta:B,elapsed:x,clock:S}),$.trigger({delta:B,elapsed:x,clock:S}),F.trigger({delta:B,elapsed:x,clock:S})},{immediate:!1});F.on(()=>{B=S.getDelta(),x=S.getElapsedTime()});const G=()=>({onBeforeLoop:W.on,onLoop:$.on,onAfterLoop:F.on,pause:ie,resume:le,isActive:ue}),ce=!0,N="[TresJS ▲ ■ ●] ";function L(){function e(r,a){console.error(`${N} ${r}`,a||"")}function n(r){console.warn(`${N} ${r}`)}function t(r,a){}return{logError:e,logWarning:n,logMessage:t}}function fe(e){return typeof e=="number"?[e,e,e]:e instanceof P.Vector3?[e.x,e.y,e.z]:e}function q(e){return e instanceof P.Color?e:Array.isArray(e)?new P.Color(...e):new P.Color(e)}const U=(e,n)=>{for(const t of Object.keys(n))n[t]instanceof Object&&Object.assign(n[t],U(e[t],n[t]));return Object.assign(e||{},n),e},me=de("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 H(e){return e&&e.nodeType===1}function j(e){return e.replace(/-([a-z])/g,(n,t)=>t.toUpperCase())}function de(e,n){const t=Object.create(null),r=e.split(",");for(let a=0;a<r.length;a++)t[r[a]]=!0;return n?a=>!!t[a.toLowerCase()]:a=>!!t[a]}const pe=(e,n)=>{const t=new Set,r=[];for(const a of e){const o=n(a);t.has(o)||(t.add(o),r.push(a))}return r},J=(e,n)=>{if(!n)return;const t=Array.isArray(n)?n:n.match(/([^[.\]])+/g);return t==null?void 0:t.reduce((r,a)=>r&&r[a],e)},ge=(e,n,t)=>{const r=Array.isArray(n)?n:n.match(/([^[.\]])+/g);r&&r.reduce((a,o,m)=>(a[o]===void 0&&(a[o]={}),m===r.length-1&&(a[o]=t),a[o]),e)};function K(e,n){if(H(e)&&H(n)){const a=e.attributes,o=n.attributes;return a.length!==o.length?!1:Array.from(a).every(({name:m,value:i})=>n.getAttribute(m)===i)}if(e===n)return!0;if(e===null||typeof e!="object"||n===null||typeof n!="object")return!1;const t=Object.keys(e),r=Object.keys(n);if(t.length!==r.length)return!1;for(const a of t)if(!r.includes(a)||!K(e[a],n[a]))return!1;return!0}function ve(e,n){if(!Array.isArray(e)||!Array.isArray(n)||e.length!==n.length)return!1;for(let t=0;t<e.length;t++)if(!K(e[t],n[t]))return!1;return!0}const ye=Array.isArray,we=Number.parseInt(P.REVISION.replace("dev","")),T={realistic:{outputColorSpace:P.SRGBColorSpace,toneMapping:P.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:P.PCFSoftShadowMap}}};function X({scene:e,canvas:n,options:t,disableRender:r,contextParts:{sizes:a,camera:o}}){const m=c.computed(()=>({alpha:w.toValue(t.alpha),depth:w.toValue(t.depth),canvas:w.unrefElement(n),context:w.toValue(t.context),stencil:w.toValue(t.stencil),antialias:w.toValue(t.antialias)===void 0?!0:w.toValue(t.antialias),precision:w.toValue(t.precision),powerPreference:w.toValue(t.powerPreference),premultipliedAlpha:w.toValue(t.premultipliedAlpha),preserveDrawingBuffer:w.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:w.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:w.toValue(t.failIfMajorPerformanceCaveat)})),i=c.shallowRef(new P.WebGLRenderer(m.value));c.watch(m,()=>{i.value.dispose(),i.value=new P.WebGLRenderer(m.value)}),c.watchEffect(()=>{i.value.setSize(a.width.value,a.height.value)});const{pixelRatio:f}=w.useDevicePixelRatio();c.watchEffect(()=>{i.value.setPixelRatio(f.value)});const{logError:l}=L(),u=(()=>{const v=new P.WebGLRenderer,M={shadowMap:{enabled:v.shadowMap.enabled,type:v.shadowMap.type},toneMapping:v.toneMapping,toneMappingExposure:v.toneMappingExposure,outputColorSpace:v.outputColorSpace};return v.dispose(),M})();c.watchEffect(()=>{const v=w.toValue(t.preset);v&&(v in T||l(`Renderer Preset must be one of these: ${Object.keys(T).join(", ")}`),U(i.value,T[v]));const M=(k,h)=>{const D=w.toValue(k),z=()=>{if(v)return J(T[v],h)};if(D!==void 0)return D;const C=z();return C!==void 0?C:J(u,h)},A=(k,h)=>ge(i.value,h,M(k,h));A(t.shadows,"shadowMap.enabled"),A(t.toneMapping,"toneMapping"),A(t.shadowMapType,"shadowMap.type"),we<150&&A(!t.useLegacyLights,"physicallyCorrectLights"),A(t.outputColorSpace,"outputColorSpace"),A(t.toneMappingExposure,"toneMappingExposure");const b=M(t.clearColor,"clearColor");b&&i.value.setClearColor(b?q(b):new P.Color(0))});const{pause:s,resume:g,onLoop:_}=G();return _(()=>{o.value&&!w.toValue(r)&&i.value.render(e,o.value)}),g(),c.onUnmounted(()=>{s(),i.value.dispose(),i.value.forceContextLoss()}),{renderer:i}}const Y=e=>typeof e=="function",Ce=e=>!!e&&e.constructor===Array;function Q(e){const n={nodes:{},materials:{}};return e&&e.traverse(t=>{t.name&&(n.nodes[t.name]=t),t.material&&!n.materials[t.material.name]&&(n.materials[t.material.name]=t.material)}),n}async function _e(e,n,t,r,a){const{logError:o}=L(),m=new e;a&&a(m),t&&t(m);const f=(Array.isArray(n)?n:[n]).map(l=>new Promise((d,u)=>{m.load(l,s=>{s.scene&&Object.assign(s,Q(s.scene)),d(s)},r,s=>u(o("[useLoader] - Failed to load resource",s)))}));return Ce(n)?await Promise.all(f):await f[0]}async function Pe(e){const n=new P.LoadingManager,t=new P.TextureLoader(n),r=a=>new Promise((o,m)=>{t.load(a,i=>o(i),()=>null,()=>{m(new Error("[useTextures] - Failed to load texture"))})});if(ye(e)){const a=await Promise.all(e.map(o=>r(o)));return e.length>1?a:a[0]}else{const{map:a,displacementMap:o,normalMap:m,roughnessMap:i,metalnessMap:f,aoMap:l,alphaMap:d,matcap:u}=e;return{map:a?await r(a):null,displacementMap:o?await r(o):null,normalMap:m?await r(m):null,roughnessMap:i?await r(i):null,metalnessMap:f?await r(f):null,aoMap:l?await r(l):null,alphaMap:d?await r(d):null,matcap:u?await r(u):null}}}const Z=(e,{renderer:n,camera:t,raycaster:r})=>{const a=c.computed(()=>n.value.domElement),{x:o,y:m}=w.usePointer({target:a}),{width:i,height:f,top:l,left:d}=w.useElementBounding(a),u=({x:C,y:O})=>{if(a.value)return{x:(C-d.value)/i.value*2-1,y:-((O-l.value)/f.value)*2+1}},s=({x:C,y:O})=>{if(t.value)return r.value.setFromCamera(new P.Vector2(C,O),t.value),r.value.intersectObjects(e.value,!1)},g=C=>{const O=u({x:(C==null?void 0:C.clientX)??o.value,y:(C==null?void 0:C.clientY)??m.value});return O?s(O)||[]:[]},_=c.computed(()=>g()),v=w.createEventHook(),M=w.createEventHook(),A=(C,O)=>{C.trigger({event:O,intersects:g(O)})},b=C=>{A(M,C)};let k;const h=C=>{var O;k=(O=g(C)[0])==null?void 0:O.object},D=C=>{var O;C instanceof PointerEvent&&k===((O=g(C)[0])==null?void 0:O.object)&&A(v,C)},z=C=>M.trigger({event:C,intersects:[]});return a.value.addEventListener("pointerup",D),a.value.addEventListener("pointerdown",h),a.value.addEventListener("pointermove",b),a.value.addEventListener("pointerleave",z),c.onUnmounted(()=>{a!=null&&a.value&&(a.value.removeEventListener("pointerup",D),a.value.removeEventListener("pointerdown",h),a.value.removeEventListener("pointermove",b),a.value.removeEventListener("pointerleave",z))}),{intersects:_,onClick:C=>v.on(C).off,onPointerMove:C=>M.on(C).off}};function Me(){const{logWarning:e}=L();function n(r,a,o){let m=null;return r.traverse(i=>{i[a]===o&&(m=i)}),m||e(`Child with ${a} '${o}' not found.`),m}function t(r,a){return n(r,"name",a)}return{seek:n,seekByName:t}}const ee=({scene:e,contextParts:n})=>{const t=c.reactive({click:new Map,pointerMove:new Map,pointerEnter:new Map,pointerLeave:new Map}),r=c.ref(new Set),a=s=>{r.value.add(s)},o=s=>{r.value.delete(s)},m=s=>{Object.values(t).forEach(g=>g.delete(s)),o(s)},i=s=>{const{onClick:g,onPointerMove:_,onPointerEnter:v,onPointerLeave:M}=s;g&&t.click.set(s,g),_&&t.pointerMove.set(s,_),v&&t.pointerEnter.set(s,v),M&&t.pointerLeave.set(s,M)};e.userData.tres__registerAtPointerEventHandler=i,e.userData.tres__deregisterAtPointerEventHandler=m,e.userData.tres__registerBlockingObjectAtPointerEventHandler=a,e.userData.tres__deregisterBlockingObjectAtPointerEventHandler=o;const f=c.computed(()=>pe([...Array.from(r.value),...Object.values(t).map(s=>Array.from(s.keys())).flat()],({uuid:s})=>s)),{onClick:l,onPointerMove:d}=Z(f,n);l(({intersects:s,event:g})=>{var _;s.length&&((_=t.click.get(s[0].object))==null||_(s[0],g))});let u;return d(({intersects:s,event:g})=>{var b,k,h,D;const _=(b=s==null?void 0:s[0])==null?void 0:b.object,{pointerLeave:v,pointerEnter:M,pointerMove:A}=t;u&&u!==_&&((k=v.get(u))==null||k(u,g)),_&&(u!==_&&((h=M.get(_))==null||h(s[0],g)),(D=A.get(_))==null||D(s[0],g)),u=_||null}),{registerObject:i,deregisterObject:m}},E=c.ref({}),V=e=>Object.assign(E.value,e);function te({scene:e,canvas:n,windowSize:t,disableRender:r,rendererOptions:a}){const o=c.computed(()=>w.toValue(t)?w.useWindowSize():w.useElementSize(w.toValue(n).parentElement)),m=c.computed(()=>o.value.width.value),i=c.computed(()=>o.value.height.value),f=c.computed(()=>m.value/i.value),l={height:i,width:m,aspectRatio:f},d=c.shallowRef(e),{camera:u,cameras:s,registerCamera:g,deregisterCamera:_,setCameraActive:v}=I({sizes:l,scene:e}),{renderer:M}=X({scene:e,canvas:n,options:a,contextParts:{sizes:l,camera:u},disableRender:r}),A={sizes:l,scene:d,camera:u,cameras:c.readonly(s),renderer:M,raycaster:c.shallowRef(new P.Raycaster),controls:c.ref(null),extend:V,registerCamera:g,setCameraActive:v,deregisterCamera:_};return c.provide("useTres",A),A}function re(){const e=c.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const be=re;function Be(e){}let R=null,p=null;const{logError:ne}=L(),ke={createElement(e,n,t,r){var m,i;if(r||(r={}),r.args||(r.args=[]),e==="template"||me(e))return null;let a=e.replace("Tres",""),o;if(e==="primitive"){(r==null?void 0:r.object)===void 0&&ne("Tres primitives need a prop 'object'");const f=r.object;a=f.type,o=Object.assign(f,{type:a,attach:r.attach,primitive:!0})}else{const f=E.value[a];f||ne(`${a} is not defined on the THREE namespace. Use extend to add it to the catalog.`),o=new f(...r.args)}return o.isCamera&&(r!=null&&r.position||o.position.set(3,3,3),r!=null&&r.lookAt||o.lookAt(0,0,0)),(r==null?void 0:r.attach)===void 0&&(o.isMaterial?o.attach="material":o.isBufferGeometry&&(o.attach="geometry")),o.isObject3D&&((m=r==null?void 0:r.material)!=null&&m.isMaterial&&(o.userData.tres__materialViaProp=!0),(i=r==null?void 0:r.geometry)!=null&&i.isBufferGeometry&&(o.userData.tres__geometryViaProp=!0)),o.userData={...o.userData,tres__name:a},o},insert(e,n){var t,r,a,o,m,i,f,l,d,u;if(n&&n.isScene&&(p=n),(((t=e==null?void 0:e.__vnode)==null?void 0:t.type)==="TresGroup"||((r=e==null?void 0:e.__vnode)==null?void 0:r.type)==="TresObject3D")&&n===null&&!((o=(a=e==null?void 0:e.__vnode)==null?void 0:a.ctx)!=null&&o.asyncResolved)){R=e;return}else n===null&&((m=e==null?void 0:e.__vnode)!=null&&m.type.includes("Controls")||(i=e==null?void 0:e.__vnode)!=null&&i.type.includes("Helper"))&&(R=p);if(n||(n=R),e!=null&&e.isObject3D){if(e!=null&&e.isCamera){if(!(p!=null&&p.userData.tres__registerCamera))throw"could not find tres__registerCamera on scene's userData";(l=p==null?void 0:(f=p.userData).tres__registerCamera)==null||l.call(f,e)}if(e!=null&&e.onClick||e!=null&&e.onPointerMove||e!=null&&e.onPointerEnter||e!=null&&e.onPointerLeave){if(!(p!=null&&p.userData.tres__registerAtPointerEventHandler))throw"could not find tres__registerAtPointerEventHandler on scene's userData";(u=p==null?void 0:(d=p.userData).tres__registerAtPointerEventHandler)==null||u.call(d,e)}}e!=null&&e.isObject3D&&(n!=null&&n.isObject3D)?(n.add(e),e.dispatchEvent({type:"added"})):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,t;if(e){if(e.isObject3D){const r=e,a=l=>{var u,s;const d=l;l.userData.tres__materialViaProp||(u=d.material)==null||u.dispose(),l.userData.tres__geometryViaProp||(s=d.geometry)==null||s.dispose()},o=p==null?void 0:p.userData.tres__deregisterAtPointerEventHandler,m=p==null?void 0:p.userData.tres__deregisterBlockingObjectAtPointerEventHandler,i=l=>{var d,u;if(!m)throw"could not find tres__deregisterBlockingObjectAtPointerEventHandler on scene's userData";if((u=p==null?void 0:(d=p.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||u.call(d,l),!o)throw"could not find tres__deregisterAtPointerEventHandler on scene's userData";(l!=null&&l.onClick||l!=null&&l.onPointerMove||l!=null&&l.onPointerEnter||l!=null&&l.onPointerLeave)&&(o==null||o(l))},f=l=>{const d=p==null?void 0:p.userData.tres__deregisterCamera;if(!d)throw"could not find tres__deregisterCamera on scene's userData";l.isCamera&&(d==null||d(l))};r.traverse(l=>{a(l),f(l),i==null||i(l)}),a(r),f(r),i==null||i(r)}(n=e.removeFromParent)==null||n.call(e),(t=e.dispose)==null||t.call(e)}},patchProp(e,n,t,r){var a,o,m,i;if(e){let f=e,l=n;if(e.isObject3D&&l==="blocks-pointer-events"){r||r===""?(o=p==null?void 0:(a=p.userData).tres__registerBlockingObjectAtPointerEventHandler)==null||o.call(a,e):(i=p==null?void 0:(m=p.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||i.call(m,e);return}let d=j(l),u=f==null?void 0:f[d];if(l==="args"){const g=e,_=t??[],v=r??[],M=e.userData.tres__name||e.type;M&&_.length&&!ve(_,v)&&(f=Object.assign(g,new E.value[M](...r)));return}if(f.type==="BufferGeometry"){if(l==="args")return;f.setAttribute(j(l),new P.BufferAttribute(...r));return}if(l.includes("-")&&u===void 0){const g=l.split("-");u=g.reduce((_,v)=>_[j(v)],f),l=g.pop(),d=l.toLowerCase(),u!=null&&u.set||(f=g.reduce((_,v)=>_[j(v)],f))}let s=r;if(s===""&&(s=!0),Y(u)){Array.isArray(s)?e[d](...s):e[d](s);return}!(u!=null&&u.set)&&!Y(u)?f[d]=s:u.constructor===s.constructor&&(u!=null&&u.copy)?u==null||u.copy(s):Array.isArray(s)?u.set(...s):!u.isColor&&u.setScalar?u.setScalar(s):u.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},{render:Ae}=c.createRenderer(ke);V(se);const Oe=["data-scene"],ae=c.defineComponent({__name:"TresCanvas",props:{shadows:{type:Boolean,default:void 0},clearColor:{},toneMapping:{},shadowMapType:{},useLegacyLights:{type:Boolean,default:void 0},outputColorSpace:{},toneMappingExposure:{},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}},setup(e){var d;const n=e,{logWarning:t}=L(),r=c.ref(),a=c.shallowRef(new P.Scene);G();const o=c.useSlots(),m=(d=c.getCurrentInstance())==null?void 0:d.appContext.app,i=u=>c.defineComponent({setup(){var g;const s=(g=c.getCurrentInstance())==null?void 0:g.appContext;return s&&(s.app=m),c.provide("useTres",u),c.provide("extend",V),()=>c.h(c.Fragment,null,o!=null&&o.default?o.default():[])}}),f=u=>{const s=i(u);Ae(c.h(s),a.value)},l=c.computed(()=>n.disableRender);return c.onMounted(()=>{const u=r,s=te({scene:a.value,canvas:u,windowSize:n.windowSize,disableRender:l,rendererOptions:n});ee({scene:a.value,contextParts:s});const{registerCamera:g,camera:_,cameras:v,deregisterCamera:M}=s;f(s);const A=()=>{const b=new P.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);b.position.set(3,3,3),b.lookAt(0,0,0),g(b);const k=c.watchEffect(()=>{v.value.length>=2&&(b.removeFromParent(),M(b),k==null||k())})};c.watch(()=>n.camera,(b,k)=>{b&&g(b),k&&(k.removeFromParent(),M(k))},{immediate:!0}),_.value||(t("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),A())}),(u,s)=>(c.openBlock(),c.createElementBlock("canvas",{ref_key:"canvas",ref:r,"data-scene":a.value.uuid,style:c.normalizeStyle({display:"block",width:"100%",height:"100%",position:u.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none"})},null,12,Oe))}}),he=["TresCanvas","TresLeches","TresScene"],De={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!he.includes(e)||e==="primitive"}}},Le={install(e){e.component("TresCanvas",ae)}};y.TresCanvas=ae,y.catalogue=E,y.default=Le,y.extend=V,y.isProd=ce,y.normalizeColor=q,y.normalizeVectorFlexibleParam=fe,y.templateCompilerOptions=De,y.trasverseObjects=Q,y.useCamera=I,y.useLoader=_e,y.useLogger=L,y.usePointerEventHandler=ee,y.useRaycaster=Z,y.useRenderLoop=G,y.useRenderer=X,y.useSeek=Me,y.useTexture=Pe,y.useTres=be,y.useTresContext=re,y.useTresContextProvider=te,Object.defineProperties(y,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
@@ -9,3 +9,7 @@ export declare const get: <T>(obj: any, path: string | string[]) => T | undefine
9
9
  export declare const set: (obj: any, path: string | string[], value: any) => void;
10
10
  export declare function deepEqual(a: any, b: any): boolean;
11
11
  export declare function deepArrayEqual(arr1: any[], arr2: any[]): boolean;
12
+ /**
13
+ * TypeSafe version of Array.isArray
14
+ */
15
+ export declare const isArray: (a: any) => a is any[] | readonly any[];
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tresjs/core",
3
3
  "type": "module",
4
- "version": "3.2.2",
4
+ "version": "3.2.3",
5
5
  "packageManager": "pnpm@8.3.1",
6
6
  "description": "Declarative ThreeJS using Vue Components",
7
7
  "author": "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",