@tresjs/core 3.4.0 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,6 +7,8 @@
7
7
  export interface UseSeekReturn {
8
8
  seek: (parent: THREE.Scene | THREE.Object3D, property: string, value: string) => THREE.Object3D | null;
9
9
  seekByName: (parent: THREE.Scene | THREE.Object3D, value: string) => THREE.Object3D | null;
10
+ seekAll: (parent: THREE.Scene | THREE.Object3D, property: string, value: string) => THREE.Object3D[];
11
+ seekAllByName: (parent: THREE.Scene | THREE.Object3D, value: string) => THREE.Object3D[];
10
12
  }
11
13
  /**
12
14
  * Composable that provides utilities to easily traverse and navigate through complex scenes and object children graphs
package/dist/tres.js CHANGED
@@ -1,60 +1,60 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v3.4.0
3
+ * version: v3.5.0
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 A, watchEffect as D, onUnmounted as W, shallowRef as x, watch as ee, reactive as se, readonly as ie, provide as $, inject as le, createRenderer as ue, defineComponent as q, useSlots as ce, getCurrentInstance as U, onMounted as fe, openBlock as pe, createElementBlock as me, mergeProps as de, h as J, Fragment as ve } from "vue";
9
- import * as ge from "three";
10
- import { PerspectiveCamera as I, OrthographicCamera as ye, Camera as we, Clock as Ce, Vector3 as Pe, Color as H, REVISION as he, SRGBColorSpace as _e, ACESFilmicToneMapping as Ee, PCFSoftShadowMap as Me, WebGLRenderer as z, LoadingManager as Ae, TextureLoader as ke, Vector2 as De, Raycaster as be, BufferAttribute as xe, Scene as Le } from "three";
11
- import { createEventHook as L, useRafFn as Be, toValue as _, unrefElement as Oe, useDevicePixelRatio as Te, usePointer as Se, useElementBounding as Re, useWindowSize as He, useElementSize as je } from "@vueuse/core";
12
- const Fe = ({ sizes: e, scene: a }) => {
13
- const t = B([]), r = A(
8
+ import { ref as L, computed as A, watchEffect as D, onUnmounted as N, shallowRef as x, watch as ee, reactive as se, readonly as ie, provide as z, inject as le, createRenderer as ue, defineComponent as q, useSlots as ce, getCurrentInstance as U, onMounted as fe, openBlock as pe, createElementBlock as me, normalizeClass as de, normalizeStyle as ve, h as J, Fragment as ge } from "vue";
9
+ import * as ye from "three";
10
+ import { PerspectiveCamera as I, OrthographicCamera as we, Camera as Ce, Clock as Pe, Vector3 as he, Color as H, REVISION as Ee, SRGBColorSpace as _e, ACESFilmicToneMapping as Me, PCFSoftShadowMap as Ae, WebGLRenderer as $, LoadingManager as ke, TextureLoader as De, Vector2 as be, Raycaster as xe, BufferAttribute as Be, Scene as Le } from "three";
11
+ import { createEventHook as B, useRafFn as Oe, toValue as E, unrefElement as Te, useDevicePixelRatio as Se, usePointer as Re, useElementBounding as He, useWindowSize as je, useElementSize as Fe } from "@vueuse/core";
12
+ const $e = ({ sizes: e, scene: a }) => {
13
+ const t = L([]), r = A(
14
14
  () => t.value[0]
15
15
  ), n = (s, f = !1) => {
16
- t.value.some(({ uuid: l }) => l === s.uuid) || (f ? c(s) : t.value.push(s));
16
+ t.value.some(({ uuid: i }) => i === s.uuid) || (f ? u(s) : t.value.push(s));
17
17
  }, o = (s) => {
18
18
  t.value = t.value.filter(({ uuid: f }) => f !== s.uuid);
19
- }, c = (s) => {
20
- const f = s instanceof we ? s : t.value.find((p) => p.uuid === s);
19
+ }, u = (s) => {
20
+ const f = s instanceof Ce ? s : t.value.find((m) => m.uuid === s);
21
21
  if (!f)
22
22
  return;
23
- const l = t.value.filter(({ uuid: p }) => p !== f.uuid);
24
- t.value = [f, ...l];
23
+ const i = t.value.filter(({ uuid: m }) => m !== f.uuid);
24
+ t.value = [f, ...i];
25
25
  };
26
26
  return D(() => {
27
27
  e.aspectRatio.value && t.value.forEach((s) => {
28
- s instanceof I && (s.aspect = e.aspectRatio.value), (s instanceof I || s instanceof ye) && s.updateProjectionMatrix();
28
+ s instanceof I && (s.aspect = e.aspectRatio.value), (s instanceof I || s instanceof we) && s.updateProjectionMatrix();
29
29
  });
30
- }), a.userData.tres__registerCamera = n, a.userData.tres__deregisterCamera = o, W(() => {
30
+ }), a.userData.tres__registerCamera = n, a.userData.tres__deregisterCamera = o, N(() => {
31
31
  t.value = [];
32
32
  }), {
33
33
  camera: r,
34
34
  cameras: t,
35
35
  registerCamera: n,
36
36
  deregisterCamera: o,
37
- setCameraActive: c
37
+ setCameraActive: u
38
38
  };
39
- }, te = L(), re = L(), N = L(), b = new Ce();
39
+ }, te = B(), re = B(), W = B(), b = new Pe();
40
40
  let j = 0, F = 0;
41
- const { pause: ze, resume: $e, isActive: Ie } = Be(
41
+ const { pause: ze, resume: Ie, isActive: Ge } = Oe(
42
42
  () => {
43
- te.trigger({ delta: j, elapsed: F, clock: b }), re.trigger({ delta: j, elapsed: F, clock: b }), N.trigger({ delta: j, elapsed: F, clock: b });
43
+ te.trigger({ delta: j, elapsed: F, clock: b }), re.trigger({ delta: j, elapsed: F, clock: b }), W.trigger({ delta: j, elapsed: F, clock: b });
44
44
  },
45
45
  { immediate: !1 }
46
46
  );
47
- N.on(() => {
47
+ W.on(() => {
48
48
  j = b.getDelta(), F = b.getElapsedTime();
49
49
  });
50
50
  const ne = () => ({
51
51
  onBeforeLoop: te.on,
52
52
  onLoop: re.on,
53
- onAfterLoop: N.on,
53
+ onAfterLoop: W.on,
54
54
  pause: ze,
55
- resume: $e,
56
- isActive: Ie
57
- }), mt = !0, K = "[TresJS ▲ ■ ●] ";
55
+ resume: Ie,
56
+ isActive: Ge
57
+ }), dt = !0, K = "[TresJS ▲ ■ ●] ";
58
58
  function O() {
59
59
  function e(r, n) {
60
60
  console.error(`${K} ${r}`, n || "");
@@ -70,30 +70,30 @@ function O() {
70
70
  logMessage: t
71
71
  };
72
72
  }
73
- function dt(e) {
74
- return typeof e == "number" ? [e, e, e] : e instanceof Pe ? [e.x, e.y, e.z] : e;
73
+ function vt(e) {
74
+ return typeof e == "number" ? [e, e, e] : e instanceof he ? [e.x, e.y, e.z] : e;
75
75
  }
76
- function Ge(e) {
76
+ function Ne(e) {
77
77
  return e instanceof H ? e : Array.isArray(e) ? new H(...e) : new H(e);
78
78
  }
79
79
  const ae = (e, a) => {
80
80
  for (const t of Object.keys(a))
81
81
  a[t] instanceof Object && Object.assign(a[t], ae(e[t], a[t]));
82
82
  return Object.assign(e || {}, a), e;
83
- }, We = "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", Ne = /* @__PURE__ */ Ve(We);
83
+ }, We = "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(We);
84
84
  function X(e) {
85
85
  return e && e.nodeType === 1;
86
86
  }
87
87
  function S(e) {
88
88
  return e.replace(/-([a-z])/g, (a, t) => t.toUpperCase());
89
89
  }
90
- function Ve(e, a) {
90
+ function qe(e, a) {
91
91
  const t = /* @__PURE__ */ Object.create(null), r = e.split(",");
92
92
  for (let n = 0; n < r.length; n++)
93
93
  t[r[n]] = !0;
94
94
  return a ? (n) => !!t[n.toLowerCase()] : (n) => !!t[n];
95
95
  }
96
- const qe = (e, a) => {
96
+ const Ue = (e, a) => {
97
97
  const t = /* @__PURE__ */ new Set(), r = [];
98
98
  for (const n of e) {
99
99
  const o = a(n);
@@ -105,14 +105,14 @@ const qe = (e, a) => {
105
105
  return;
106
106
  const t = Array.isArray(a) ? a : a.match(/([^[.\]])+/g);
107
107
  return t == null ? void 0 : t.reduce((r, n) => r && r[n], e);
108
- }, Ue = (e, a, t) => {
108
+ }, Je = (e, a, t) => {
109
109
  const r = Array.isArray(a) ? a : a.match(/([^[.\]])+/g);
110
- r && r.reduce((n, o, c) => (n[o] === void 0 && (n[o] = {}), c === r.length - 1 && (n[o] = t), n[o]), e);
110
+ r && r.reduce((n, o, u) => (n[o] === void 0 && (n[o] = {}), u === r.length - 1 && (n[o] = t), n[o]), e);
111
111
  };
112
112
  function oe(e, a) {
113
113
  if (X(e) && X(a)) {
114
114
  const n = e.attributes, o = a.attributes;
115
- return n.length !== o.length ? !1 : Array.from(n).every(({ name: c, value: s }) => a.getAttribute(c) === s);
115
+ return n.length !== o.length ? !1 : Array.from(n).every(({ name: u, value: s }) => a.getAttribute(u) === s);
116
116
  }
117
117
  if (e === a)
118
118
  return !0;
@@ -126,7 +126,7 @@ function oe(e, a) {
126
126
  return !1;
127
127
  return !0;
128
128
  }
129
- function Je(e, a) {
129
+ function Ke(e, a) {
130
130
  if (!Array.isArray(e) || !Array.isArray(a) || e.length !== a.length)
131
131
  return !1;
132
132
  for (let t = 0; t < e.length; t++)
@@ -134,51 +134,51 @@ function Je(e, a) {
134
134
  return !1;
135
135
  return !0;
136
136
  }
137
- const Ke = Array.isArray, Xe = Number.parseInt(he.replace("dev", "")), R = {
137
+ const Xe = Array.isArray, Ye = Number.parseInt(Ee.replace("dev", "")), R = {
138
138
  realistic: {
139
139
  shadows: !0,
140
140
  physicallyCorrectLights: !0,
141
141
  outputColorSpace: _e,
142
- toneMapping: Ee,
142
+ toneMapping: Me,
143
143
  toneMappingExposure: 3,
144
144
  shadowMap: {
145
145
  enabled: !0,
146
- type: Me
146
+ type: Ae
147
147
  }
148
148
  }
149
149
  };
150
- function Ye({
150
+ function Qe({
151
151
  scene: e,
152
152
  canvas: a,
153
153
  options: t,
154
154
  disableRender: r,
155
155
  contextParts: { sizes: n, camera: o }
156
156
  }) {
157
- const c = A(() => ({
158
- alpha: _(t.alpha),
159
- depth: _(t.depth),
160
- canvas: Oe(a),
161
- context: _(t.context),
162
- stencil: _(t.stencil),
163
- antialias: _(t.antialias) === void 0 ? !0 : _(t.antialias),
164
- precision: _(t.precision),
165
- powerPreference: _(t.powerPreference),
166
- premultipliedAlpha: _(t.premultipliedAlpha),
167
- preserveDrawingBuffer: _(t.preserveDrawingBuffer),
168
- logarithmicDepthBuffer: _(t.logarithmicDepthBuffer),
169
- failIfMajorPerformanceCaveat: _(t.failIfMajorPerformanceCaveat)
170
- })), s = x(new z(c.value));
171
- ee(c, () => {
172
- s.value.dispose(), s.value = new z(c.value);
157
+ const u = A(() => ({
158
+ alpha: E(t.alpha),
159
+ depth: E(t.depth),
160
+ canvas: Te(a),
161
+ context: E(t.context),
162
+ stencil: E(t.stencil),
163
+ antialias: E(t.antialias) === void 0 ? !0 : E(t.antialias),
164
+ precision: E(t.precision),
165
+ powerPreference: E(t.powerPreference),
166
+ premultipliedAlpha: E(t.premultipliedAlpha),
167
+ preserveDrawingBuffer: E(t.preserveDrawingBuffer),
168
+ logarithmicDepthBuffer: E(t.logarithmicDepthBuffer),
169
+ failIfMajorPerformanceCaveat: E(t.failIfMajorPerformanceCaveat)
170
+ })), s = x(new $(u.value));
171
+ ee(u, () => {
172
+ s.value.dispose(), s.value = new $(u.value);
173
173
  }), D(() => {
174
174
  s.value.setSize(n.width.value, n.height.value);
175
175
  });
176
- const { pixelRatio: f } = Te();
176
+ const { pixelRatio: f } = Se();
177
177
  D(() => {
178
178
  s.value.setPixelRatio(f.value);
179
179
  });
180
- const { logError: l } = O(), u = (() => {
181
- const v = new z(), w = {
180
+ const { logError: i } = O(), c = (() => {
181
+ const v = new $(), w = {
182
182
  shadowMap: {
183
183
  enabled: v.shadowMap.enabled,
184
184
  type: v.shadowMap.type
@@ -190,125 +190,125 @@ function Ye({
190
190
  return v.dispose(), w;
191
191
  })();
192
192
  D(() => {
193
- const v = _(t.preset);
194
- v && (v in R || l(`Renderer Preset must be one of these: ${Object.keys(R).join(", ")}`), ae(s.value, R[v]));
193
+ const v = E(t.preset);
194
+ v && (v in R || i(`Renderer Preset must be one of these: ${Object.keys(R).join(", ")}`), ae(s.value, R[v]));
195
195
  const w = (P, C) => {
196
- const k = _(P), T = () => {
196
+ const k = E(P), T = () => {
197
197
  if (v)
198
198
  return Y(R[v], C);
199
199
  };
200
200
  if (k !== void 0)
201
201
  return k;
202
202
  const y = T();
203
- return y !== void 0 ? y : Y(u, C);
204
- }, h = (P, C) => Ue(s.value, C, w(P, C));
205
- h(t.shadows, "shadowMap.enabled"), h(t.toneMapping, "toneMapping"), h(t.shadowMapType, "shadowMap.type"), Xe < 150 && h(!t.useLegacyLights, "physicallyCorrectLights"), h(t.outputColorSpace, "outputColorSpace"), h(t.toneMappingExposure, "toneMappingExposure");
203
+ return y !== void 0 ? y : Y(c, C);
204
+ }, h = (P, C) => Je(s.value, C, w(P, C));
205
+ h(t.shadows, "shadowMap.enabled"), h(t.toneMapping, "toneMapping"), h(t.shadowMapType, "shadowMap.type"), Ye < 150 && h(!t.useLegacyLights, "physicallyCorrectLights"), h(t.outputColorSpace, "outputColorSpace"), h(t.toneMappingExposure, "toneMappingExposure");
206
206
  const M = w(t.clearColor, "clearColor");
207
207
  M && s.value.setClearColor(
208
- M ? Ge(M) : new H(0)
208
+ M ? Ne(M) : new H(0)
209
209
  // default clear color is not easily/efficiently retrievable from three
210
210
  );
211
211
  });
212
- const { pause: i, resume: m, onLoop: d } = ne();
212
+ const { pause: l, resume: p, onLoop: d } = ne();
213
213
  return d(() => {
214
- o.value && !_(r) && s.value.render(e, o.value);
215
- }), m(), W(() => {
216
- i(), s.value.dispose(), s.value.forceContextLoss();
214
+ o.value && !E(r) && s.value.render(e, o.value);
215
+ }), p(), N(() => {
216
+ l(), s.value.dispose(), s.value.forceContextLoss();
217
217
  }), {
218
218
  renderer: s
219
219
  };
220
220
  }
221
- const Q = (e) => typeof e == "function", Qe = (e) => !!e && e.constructor === Array;
222
- function Ze(e) {
221
+ const Q = (e) => typeof e == "function", Ze = (e) => !!e && e.constructor === Array;
222
+ function et(e) {
223
223
  const a = { nodes: {}, materials: {} };
224
224
  return e && e.traverse((t) => {
225
225
  t.name && (a.nodes[t.name] = t), t.material && !a.materials[t.material.name] && (a.materials[t.material.name] = t.material);
226
226
  }), a;
227
227
  }
228
- async function vt(e, a, t, r, n) {
229
- const { logError: o } = O(), c = new e();
230
- n && n(c), t && t(c);
228
+ async function gt(e, a, t, r, n) {
229
+ const { logError: o } = O(), u = new e();
230
+ n && n(u), t && t(u);
231
231
  const f = (Array.isArray(a) ? a : [a]).map(
232
- (l) => new Promise((p, u) => {
233
- c.load(
234
- l,
235
- (i) => {
236
- i.scene && Object.assign(i, Ze(i.scene)), p(i);
232
+ (i) => new Promise((m, c) => {
233
+ u.load(
234
+ i,
235
+ (l) => {
236
+ l.scene && Object.assign(l, et(l.scene)), m(l);
237
237
  },
238
238
  r,
239
- (i) => u(o("[useLoader] - Failed to load resource", i))
239
+ (l) => c(o("[useLoader] - Failed to load resource", l))
240
240
  );
241
241
  })
242
242
  );
243
- return Qe(a) ? await Promise.all(f) : await f[0];
243
+ return Ze(a) ? await Promise.all(f) : await f[0];
244
244
  }
245
- async function gt(e) {
246
- const a = new Ae(), t = new ke(a), r = (n) => new Promise((o, c) => {
245
+ async function yt(e) {
246
+ const a = new ke(), t = new De(a), r = (n) => new Promise((o, u) => {
247
247
  t.load(
248
248
  n,
249
249
  (s) => o(s),
250
250
  () => null,
251
251
  () => {
252
- c(new Error("[useTextures] - Failed to load texture"));
252
+ u(new Error("[useTextures] - Failed to load texture"));
253
253
  }
254
254
  );
255
255
  });
256
- if (Ke(e)) {
256
+ if (Xe(e)) {
257
257
  const n = await Promise.all(e.map((o) => r(o)));
258
258
  return e.length > 1 ? n : n[0];
259
259
  } else {
260
260
  const {
261
261
  map: n,
262
262
  displacementMap: o,
263
- normalMap: c,
263
+ normalMap: u,
264
264
  roughnessMap: s,
265
265
  metalnessMap: f,
266
- aoMap: l,
267
- alphaMap: p,
268
- matcap: u
266
+ aoMap: i,
267
+ alphaMap: m,
268
+ matcap: c
269
269
  } = e;
270
270
  return {
271
271
  map: n ? await r(n) : null,
272
272
  displacementMap: o ? await r(o) : null,
273
- normalMap: c ? await r(c) : null,
273
+ normalMap: u ? await r(u) : null,
274
274
  roughnessMap: s ? await r(s) : null,
275
275
  metalnessMap: f ? await r(f) : null,
276
- aoMap: l ? await r(l) : null,
277
- alphaMap: p ? await r(p) : null,
278
- matcap: u ? await r(u) : null
276
+ aoMap: i ? await r(i) : null,
277
+ alphaMap: m ? await r(m) : null,
278
+ matcap: c ? await r(c) : null
279
279
  };
280
280
  }
281
281
  }
282
- const et = (e, { renderer: a, camera: t, raycaster: r }) => {
283
- const n = A(() => a.value.domElement), { x: o, y: c } = Se({ target: n }), { width: s, height: f, top: l, left: p } = Re(n), u = ({ x: y, y: E }) => {
282
+ const tt = (e, { renderer: a, camera: t, raycaster: r }) => {
283
+ const n = A(() => a.value.domElement), { x: o, y: u } = Re({ target: n }), { width: s, height: f, top: i, left: m } = He(n), c = ({ x: y, y: _ }) => {
284
284
  if (n.value)
285
285
  return {
286
- x: (y - p.value) / s.value * 2 - 1,
287
- y: -((E - l.value) / f.value) * 2 + 1
286
+ x: (y - m.value) / s.value * 2 - 1,
287
+ y: -((_ - i.value) / f.value) * 2 + 1
288
288
  };
289
- }, i = ({ x: y, y: E }) => {
289
+ }, l = ({ x: y, y: _ }) => {
290
290
  if (t.value)
291
- return r.value.setFromCamera(new De(y, E), t.value), r.value.intersectObjects(e.value, !1);
292
- }, m = (y) => {
293
- const E = u({
291
+ return r.value.setFromCamera(new be(y, _), t.value), r.value.intersectObjects(e.value, !1);
292
+ }, p = (y) => {
293
+ const _ = c({
294
294
  x: (y == null ? void 0 : y.clientX) ?? o.value,
295
- y: (y == null ? void 0 : y.clientY) ?? c.value
295
+ y: (y == null ? void 0 : y.clientY) ?? u.value
296
296
  });
297
- return E ? i(E) || [] : [];
298
- }, d = A(() => m()), v = L(), w = L(), h = (y, E) => {
299
- y.trigger({ event: E, intersects: m(E) });
297
+ return _ ? l(_) || [] : [];
298
+ }, d = A(() => p()), v = B(), w = B(), h = (y, _) => {
299
+ y.trigger({ event: _, intersects: p(_) });
300
300
  }, M = (y) => {
301
301
  h(w, y);
302
302
  };
303
303
  let P;
304
304
  const C = (y) => {
305
- var E;
306
- P = (E = m(y)[0]) == null ? void 0 : E.object;
305
+ var _;
306
+ P = (_ = p(y)[0]) == null ? void 0 : _.object;
307
307
  }, k = (y) => {
308
- var E;
309
- y instanceof PointerEvent && P === ((E = m(y)[0]) == null ? void 0 : E.object) && h(v, y);
308
+ var _;
309
+ y instanceof PointerEvent && P === ((_ = p(y)[0]) == null ? void 0 : _.object) && h(v, y);
310
310
  }, T = (y) => w.trigger({ event: y, intersects: [] });
311
- return n.value.addEventListener("pointerup", k), n.value.addEventListener("pointerdown", C), n.value.addEventListener("pointermove", M), n.value.addEventListener("pointerleave", T), W(() => {
311
+ return n.value.addEventListener("pointerup", k), n.value.addEventListener("pointerdown", C), n.value.addEventListener("pointermove", M), n.value.addEventListener("pointerleave", T), N(() => {
312
312
  n != null && n.value && (n.value.removeEventListener("pointerup", k), n.value.removeEventListener("pointerdown", C), n.value.removeEventListener("pointermove", M), n.value.removeEventListener("pointerleave", T));
313
313
  }), {
314
314
  intersects: d,
@@ -316,63 +316,74 @@ const et = (e, { renderer: a, camera: t, raycaster: r }) => {
316
316
  onPointerMove: (y) => w.on(y).off
317
317
  };
318
318
  };
319
- function yt() {
319
+ function wt() {
320
320
  const { logWarning: e } = O();
321
- function a(r, n, o) {
322
- let c = null;
323
- return r.traverse((s) => {
324
- s[n] === o && (c = s);
325
- }), c || e(`Child with ${n} '${o}' not found.`), c;
321
+ function a(o, u, s) {
322
+ let f = null;
323
+ return o.traverse((i) => {
324
+ i[u] === s && (f = i);
325
+ }), f || e(`Child with ${u} '${s}' not found.`), f;
326
326
  }
327
- function t(r, n) {
328
- return a(r, "name", n);
327
+ function t(o, u, s) {
328
+ const f = [];
329
+ return o.traverse((i) => {
330
+ i[u].includes(s) && f.push(i);
331
+ }), f.length || e(`Children with ${u} '${s}' not found.`), f;
332
+ }
333
+ function r(o, u) {
334
+ return a(o, "name", u);
335
+ }
336
+ function n(o, u) {
337
+ return t(o, "name", u);
329
338
  }
330
339
  return {
331
340
  seek: a,
332
- seekByName: t
341
+ seekByName: r,
342
+ seekAll: t,
343
+ seekAllByName: n
333
344
  };
334
345
  }
335
- const tt = ({ scene: e, contextParts: a }) => {
346
+ const rt = ({ scene: e, contextParts: a }) => {
336
347
  const t = se({
337
348
  click: /* @__PURE__ */ new Map(),
338
349
  pointerMove: /* @__PURE__ */ new Map(),
339
350
  pointerEnter: /* @__PURE__ */ new Map(),
340
351
  pointerLeave: /* @__PURE__ */ new Map()
341
- }), r = B(/* @__PURE__ */ new Set()), n = (i) => {
342
- r.value.add(i);
343
- }, o = (i) => {
344
- r.value.delete(i);
345
- }, c = (i) => {
346
- Object.values(t).forEach((m) => m.delete(i)), o(i);
347
- }, s = (i) => {
348
- const { onClick: m, onPointerMove: d, onPointerEnter: v, onPointerLeave: w } = i;
349
- m && t.click.set(i, m), d && t.pointerMove.set(i, d), v && t.pointerEnter.set(i, v), w && t.pointerLeave.set(i, w);
352
+ }), r = L(/* @__PURE__ */ new Set()), n = (l) => {
353
+ r.value.add(l);
354
+ }, o = (l) => {
355
+ r.value.delete(l);
356
+ }, u = (l) => {
357
+ Object.values(t).forEach((p) => p.delete(l)), o(l);
358
+ }, s = (l) => {
359
+ const { onClick: p, onPointerMove: d, onPointerEnter: v, onPointerLeave: w } = l;
360
+ p && t.click.set(l, p), d && t.pointerMove.set(l, d), v && t.pointerEnter.set(l, v), w && t.pointerLeave.set(l, w);
350
361
  };
351
- e.userData.tres__registerAtPointerEventHandler = s, e.userData.tres__deregisterAtPointerEventHandler = c, e.userData.tres__registerBlockingObjectAtPointerEventHandler = n, e.userData.tres__deregisterBlockingObjectAtPointerEventHandler = o;
362
+ e.userData.tres__registerAtPointerEventHandler = s, e.userData.tres__deregisterAtPointerEventHandler = u, e.userData.tres__registerBlockingObjectAtPointerEventHandler = n, e.userData.tres__deregisterBlockingObjectAtPointerEventHandler = o;
352
363
  const f = A(
353
- () => qe(
364
+ () => Ue(
354
365
  [
355
366
  ...Array.from(r.value),
356
- ...Object.values(t).map((i) => Array.from(i.keys())).flat()
367
+ ...Object.values(t).map((l) => Array.from(l.keys())).flat()
357
368
  ],
358
- ({ uuid: i }) => i
369
+ ({ uuid: l }) => l
359
370
  )
360
- ), { onClick: l, onPointerMove: p } = et(f, a);
361
- l(({ intersects: i, event: m }) => {
371
+ ), { onClick: i, onPointerMove: m } = tt(f, a);
372
+ i(({ intersects: l, event: p }) => {
362
373
  var d;
363
- i.length && ((d = t.click.get(i[0].object)) == null || d(i[0], m));
374
+ l.length && ((d = t.click.get(l[0].object)) == null || d(l[0], p));
364
375
  });
365
- let u;
366
- return p(({ intersects: i, event: m }) => {
376
+ let c;
377
+ return m(({ intersects: l, event: p }) => {
367
378
  var M, P, C, k;
368
- const d = (M = i == null ? void 0 : i[0]) == null ? void 0 : M.object, { pointerLeave: v, pointerEnter: w, pointerMove: h } = t;
369
- u && u !== d && ((P = v.get(u)) == null || P(u, m)), d && (u !== d && ((C = w.get(d)) == null || C(i[0], m)), (k = h.get(d)) == null || k(i[0], m)), u = d || null;
379
+ const d = (M = l == null ? void 0 : l[0]) == null ? void 0 : M.object, { pointerLeave: v, pointerEnter: w, pointerMove: h } = t;
380
+ c && c !== d && ((P = v.get(c)) == null || P(c, p)), d && (c !== d && ((C = w.get(d)) == null || C(l[0], p)), (k = h.get(d)) == null || k(l[0], p)), c = d || null;
370
381
  }), {
371
382
  registerObject: s,
372
- deregisterObject: c
383
+ deregisterObject: u
373
384
  };
374
- }, G = B({}), V = (e) => Object.assign(G.value, e);
375
- function rt({
385
+ }, G = L({}), V = (e) => Object.assign(G.value, e);
386
+ function nt({
376
387
  scene: e,
377
388
  canvas: a,
378
389
  windowSize: t,
@@ -380,52 +391,52 @@ function rt({
380
391
  rendererOptions: n
381
392
  }) {
382
393
  const o = A(
383
- () => _(t) ? He() : je(_(a).parentElement)
384
- ), c = A(() => o.value.width.value), s = A(() => o.value.height.value), f = A(() => c.value / s.value), l = {
394
+ () => E(t) ? je() : Fe(E(a).parentElement)
395
+ ), u = A(() => o.value.width.value), s = A(() => o.value.height.value), f = A(() => u.value / s.value), i = {
385
396
  height: s,
386
- width: c,
397
+ width: u,
387
398
  aspectRatio: f
388
- }, p = x(e), {
389
- camera: u,
390
- cameras: i,
391
- registerCamera: m,
399
+ }, m = x(e), {
400
+ camera: c,
401
+ cameras: l,
402
+ registerCamera: p,
392
403
  deregisterCamera: d,
393
404
  setCameraActive: v
394
- } = Fe({ sizes: l, scene: e }), { renderer: w } = Ye(
405
+ } = $e({ sizes: i, scene: e }), { renderer: w } = Qe(
395
406
  {
396
407
  scene: e,
397
408
  canvas: a,
398
409
  options: n,
399
- contextParts: { sizes: l, camera: u },
410
+ contextParts: { sizes: i, camera: c },
400
411
  disableRender: r
401
412
  }
402
413
  ), h = {
403
- sizes: l,
404
- scene: p,
405
- camera: u,
406
- cameras: ie(i),
414
+ sizes: i,
415
+ scene: m,
416
+ camera: c,
417
+ cameras: ie(l),
407
418
  renderer: w,
408
- raycaster: x(new be()),
409
- controls: B(null),
419
+ raycaster: x(new xe()),
420
+ controls: L(null),
410
421
  extend: V,
411
- registerCamera: m,
422
+ registerCamera: p,
412
423
  setCameraActive: v,
413
424
  deregisterCamera: d
414
425
  };
415
- return $("useTres", h), h;
426
+ return z("useTres", h), h;
416
427
  }
417
- function nt() {
428
+ function at() {
418
429
  const e = le("useTres");
419
430
  if (!e)
420
431
  throw new Error("useTresContext must be used together with useTresContextProvider");
421
432
  return e;
422
433
  }
423
- const wt = nt;
434
+ const Ct = at;
424
435
  let g = null;
425
- const { logError: Z } = O(), at = {
436
+ const { logError: Z } = O(), ot = {
426
437
  createElement(e, a, t, r) {
427
- var c, s;
428
- if (r || (r = {}), r.args || (r.args = []), e === "template" || Ne(e))
438
+ var u, s;
439
+ if (r || (r = {}), r.args || (r.args = []), e === "template" || Ve(e))
429
440
  return null;
430
441
  let n = e.replace("Tres", ""), o;
431
442
  if (e === "primitive") {
@@ -436,13 +447,13 @@ const { logError: Z } = O(), at = {
436
447
  const f = G.value[n];
437
448
  f || Z(`${n} is not defined on the THREE namespace. Use extend to add it to the catalog.`), o = new f(...r.args);
438
449
  }
439
- 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 && ((c = r == null ? void 0 : r.material) != null && c.isMaterial && (o.userData.tres__materialViaProp = !0), (s = r == null ? void 0 : r.geometry) != null && s.isBufferGeometry && (o.userData.tres__geometryViaProp = !0)), o.userData = {
450
+ 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 && ((u = r == null ? void 0 : r.material) != null && u.isMaterial && (o.userData.tres__materialViaProp = !0), (s = r == null ? void 0 : r.geometry) != null && s.isBufferGeometry && (o.userData.tres__geometryViaProp = !0)), o.userData = {
440
451
  ...o.userData,
441
452
  tres__name: n
442
453
  }, o;
443
454
  },
444
455
  insert(e, a) {
445
- var r, n, o, c;
456
+ var r, n, o, u;
446
457
  a && a.isScene && (g = a);
447
458
  const t = a || g;
448
459
  if (e != null && e.isObject3D) {
@@ -454,7 +465,7 @@ const { logError: Z } = O(), at = {
454
465
  if (e != null && e.onClick || e != null && e.onPointerMove || e != null && e.onPointerEnter || e != null && e.onPointerLeave) {
455
466
  if (!(g != null && g.userData.tres__registerAtPointerEventHandler))
456
467
  throw "could not find tres__registerAtPointerEventHandler on scene's userData";
457
- (c = g == null ? void 0 : (o = g.userData).tres__registerAtPointerEventHandler) == null || c.call(o, e);
468
+ (u = g == null ? void 0 : (o = g.userData).tres__registerAtPointerEventHandler) == null || u.call(o, e);
458
469
  }
459
470
  }
460
471
  e != null && e.isObject3D && (t != null && t.isObject3D) ? (t.add(e), e.dispatchEvent({ type: "added" })) : e != null && e.isFog ? t.fog = e : typeof (e == null ? void 0 : e.attach) == "string" && (e.__previousAttach = e[t == null ? void 0 : t.attach], t && (t[e.attach] = e));
@@ -463,63 +474,63 @@ const { logError: Z } = O(), at = {
463
474
  var a, t;
464
475
  if (e) {
465
476
  if (e.isObject3D) {
466
- const r = e, n = (l) => {
467
- var u, i;
468
- const p = l;
469
- l.userData.tres__materialViaProp || (u = p.material) == null || u.dispose(), l.userData.tres__geometryViaProp || (i = p.geometry) == null || i.dispose();
470
- }, o = g == null ? void 0 : g.userData.tres__deregisterAtPointerEventHandler, c = g == null ? void 0 : g.userData.tres__deregisterBlockingObjectAtPointerEventHandler, s = (l) => {
471
- var p, u;
472
- if (!c)
477
+ const r = e, n = (i) => {
478
+ var c, l;
479
+ const m = i;
480
+ i.userData.tres__materialViaProp || (c = m.material) == null || c.dispose(), i.userData.tres__geometryViaProp || (l = m.geometry) == null || l.dispose();
481
+ }, o = g == null ? void 0 : g.userData.tres__deregisterAtPointerEventHandler, u = g == null ? void 0 : g.userData.tres__deregisterBlockingObjectAtPointerEventHandler, s = (i) => {
482
+ var m, c;
483
+ if (!u)
473
484
  throw "could not find tres__deregisterBlockingObjectAtPointerEventHandler on scene's userData";
474
- if ((u = g == null ? void 0 : (p = g.userData).tres__deregisterBlockingObjectAtPointerEventHandler) == null || u.call(p, l), !o)
485
+ if ((c = g == null ? void 0 : (m = g.userData).tres__deregisterBlockingObjectAtPointerEventHandler) == null || c.call(m, i), !o)
475
486
  throw "could not find tres__deregisterAtPointerEventHandler on scene's userData";
476
- (l != null && l.onClick || l != null && l.onPointerMove || l != null && l.onPointerEnter || l != null && l.onPointerLeave) && (o == null || o(l));
477
- }, f = (l) => {
478
- const p = g == null ? void 0 : g.userData.tres__deregisterCamera;
479
- if (!p)
487
+ (i != null && i.onClick || i != null && i.onPointerMove || i != null && i.onPointerEnter || i != null && i.onPointerLeave) && (o == null || o(i));
488
+ }, f = (i) => {
489
+ const m = g == null ? void 0 : g.userData.tres__deregisterCamera;
490
+ if (!m)
480
491
  throw "could not find tres__deregisterCamera on scene's userData";
481
- l.isCamera && (p == null || p(l));
492
+ i.isCamera && (m == null || m(i));
482
493
  };
483
- r.traverse((l) => {
484
- n(l), f(l), s == null || s(l);
494
+ r.traverse((i) => {
495
+ n(i), f(i), s == null || s(i);
485
496
  }), n(r), f(r), s == null || s(r);
486
497
  }
487
498
  (a = e.removeFromParent) == null || a.call(e), (t = e.dispose) == null || t.call(e);
488
499
  }
489
500
  },
490
501
  patchProp(e, a, t, r) {
491
- var n, o, c, s;
502
+ var n, o, u, s;
492
503
  if (e) {
493
- let f = e, l = a;
494
- if (e.isObject3D && l === "blocks-pointer-events") {
495
- r || r === "" ? (o = g == null ? void 0 : (n = g.userData).tres__registerBlockingObjectAtPointerEventHandler) == null || o.call(n, e) : (s = g == null ? void 0 : (c = g.userData).tres__deregisterBlockingObjectAtPointerEventHandler) == null || s.call(c, e);
504
+ let f = e, i = a;
505
+ if (e.isObject3D && i === "blocks-pointer-events") {
506
+ r || r === "" ? (o = g == null ? void 0 : (n = g.userData).tres__registerBlockingObjectAtPointerEventHandler) == null || o.call(n, e) : (s = g == null ? void 0 : (u = g.userData).tres__deregisterBlockingObjectAtPointerEventHandler) == null || s.call(u, e);
496
507
  return;
497
508
  }
498
- let p = S(l), u = f == null ? void 0 : f[p];
499
- if (l === "args") {
500
- const m = e, d = t ?? [], v = r ?? [], w = e.userData.tres__name || e.type;
501
- w && d.length && !Je(d, v) && (f = Object.assign(m, new G.value[w](...r)));
509
+ let m = S(i), c = f == null ? void 0 : f[m];
510
+ if (i === "args") {
511
+ const p = e, d = t ?? [], v = r ?? [], w = e.userData.tres__name || e.type;
512
+ w && d.length && !Ke(d, v) && (f = Object.assign(p, new G.value[w](...r)));
502
513
  return;
503
514
  }
504
515
  if (f.type === "BufferGeometry") {
505
- if (l === "args")
516
+ if (i === "args")
506
517
  return;
507
518
  f.setAttribute(
508
- S(l),
509
- new xe(...r)
519
+ S(i),
520
+ new Be(...r)
510
521
  );
511
522
  return;
512
523
  }
513
- if (l.includes("-") && u === void 0) {
514
- const m = l.split("-");
515
- u = m.reduce((d, v) => d[S(v)], f), l = m.pop(), p = l.toLowerCase(), u != null && u.set || (f = m.reduce((d, v) => d[S(v)], f));
524
+ if (i.includes("-") && c === void 0) {
525
+ const p = i.split("-");
526
+ c = p.reduce((d, v) => d[S(v)], f), i = p.pop(), m = i.toLowerCase(), c != null && c.set || (f = p.reduce((d, v) => d[S(v)], f));
516
527
  }
517
- let i = r;
518
- if (i === "" && (i = !0), Q(u)) {
519
- Array.isArray(i) ? e[p](...i) : e[p](i);
528
+ let l = r;
529
+ if (l === "" && (l = !0), Q(c)) {
530
+ Array.isArray(l) ? e[m](...l) : e[m](l);
520
531
  return;
521
532
  }
522
- !(u != null && u.set) && !Q(u) ? f[p] = i : u.constructor === i.constructor && (u != null && u.copy) ? u == null || u.copy(i) : Array.isArray(i) ? u.set(...i) : !u.isColor && u.setScalar ? u.setScalar(i) : u.set(i);
533
+ !(c != null && c.set) && !Q(c) ? f[m] = l : c.constructor === l.constructor && (c != null && c.copy) ? c == null || c.copy(l) : Array.isArray(l) ? c.set(...l) : !c.isColor && c.setScalar ? c.setScalar(l) : c.set(l);
523
534
  }
524
535
  },
525
536
  parentNode(e) {
@@ -534,9 +545,9 @@ const { logError: Z } = O(), at = {
534
545
  setScopeId: () => void 0,
535
546
  cloneNode: () => void 0,
536
547
  insertStaticContent: () => void 0
537
- }, { render: ot } = ue(at);
538
- V(ge);
539
- const st = ["data-scene"], it = /* @__PURE__ */ q({
548
+ }, { render: st } = ue(ot);
549
+ V(ye);
550
+ const it = ["data-scene"], lt = /* @__PURE__ */ q({
540
551
  __name: "TresCanvas",
541
552
  props: {
542
553
  shadows: { type: Boolean, default: void 0 },
@@ -563,30 +574,30 @@ const st = ["data-scene"], it = /* @__PURE__ */ q({
563
574
  failIfMajorPerformanceCaveat: { type: Boolean, default: void 0 }
564
575
  },
565
576
  setup(e, { expose: a }) {
566
- var i;
567
- const t = e, { logWarning: r } = O(), n = B(), o = x(new Le());
577
+ var l;
578
+ const t = e, { logWarning: r } = O(), n = L(), o = x(new Le());
568
579
  ne();
569
- const c = ce(), s = (i = U()) == null ? void 0 : i.appContext.app, f = (m) => q({
580
+ const u = ce(), s = (l = U()) == null ? void 0 : l.appContext.app, f = (p) => q({
570
581
  setup() {
571
582
  var v;
572
583
  const d = (v = U()) == null ? void 0 : v.appContext;
573
- return d && (d.app = s), $("useTres", m), $("extend", V), () => J(ve, null, c != null && c.default ? c.default() : []);
584
+ return d && (d.app = s), z("useTres", p), z("extend", V), () => J(ge, null, u != null && u.default ? u.default() : []);
574
585
  }
575
- }), l = (m) => {
576
- const d = f(m);
577
- ot(J(d), o.value);
578
- }, p = A(() => t.disableRender), u = x(null);
579
- return a({ context: u }), fe(() => {
580
- const m = n;
581
- u.value = rt({
586
+ }), i = (p) => {
587
+ const d = f(p);
588
+ st(J(d), o.value);
589
+ }, m = A(() => t.disableRender), c = x(null);
590
+ return a({ context: c }), fe(() => {
591
+ const p = n;
592
+ c.value = nt({
582
593
  scene: o.value,
583
- canvas: m,
594
+ canvas: p,
584
595
  windowSize: t.windowSize,
585
- disableRender: p,
596
+ disableRender: m,
586
597
  rendererOptions: t
587
- }), tt({ scene: o.value, contextParts: u.value });
588
- const { registerCamera: d, camera: v, cameras: w, deregisterCamera: h } = u.value;
589
- l(u.value);
598
+ }), rt({ scene: o.value, contextParts: c.value });
599
+ const { registerCamera: d, camera: v, cameras: w, deregisterCamera: h } = c.value;
600
+ i(c.value);
590
601
  const M = () => {
591
602
  const P = new I(
592
603
  45,
@@ -610,58 +621,59 @@ const st = ["data-scene"], it = /* @__PURE__ */ q({
610
621
  ), v.value || (r(
611
622
  "No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."
612
623
  ), M());
613
- }), (m, d) => (pe(), me("canvas", de({
624
+ }), (p, d) => (pe(), me("canvas", {
614
625
  ref_key: "canvas",
615
626
  ref: n,
616
- "data-scene": o.value.uuid
617
- }, m.$attrs, {
618
- style: {
627
+ "data-scene": o.value.uuid,
628
+ class: de(p.$attrs.class),
629
+ style: ve({
619
630
  display: "block",
620
631
  width: "100%",
621
632
  height: "100%",
622
- position: m.windowSize ? "fixed" : "relative",
633
+ position: p.windowSize ? "fixed" : "relative",
623
634
  top: 0,
624
635
  left: 0,
625
636
  pointerEvents: "auto",
626
- touchAction: "none"
627
- }
628
- }), null, 16, st));
637
+ touchAction: "none",
638
+ ...p.$attrs.style
639
+ })
640
+ }, null, 14, it));
629
641
  }
630
- }), lt = [
642
+ }), ut = [
631
643
  "TresCanvas",
632
644
  "TresLeches",
633
645
  "TresScene"
634
- ], ut = {
646
+ ], ct = {
635
647
  template: {
636
648
  compilerOptions: {
637
- isCustomElement: (e) => e.startsWith("Tres") && !lt.includes(e) || e === "primitive"
649
+ isCustomElement: (e) => e.startsWith("Tres") && !ut.includes(e) || e === "primitive"
638
650
  }
639
651
  }
640
- }, Ct = ut, Pt = {
652
+ }, Pt = ct, ht = {
641
653
  install(e) {
642
- e.component("TresCanvas", it);
654
+ e.component("TresCanvas", lt);
643
655
  }
644
656
  };
645
657
  export {
646
- it as TresCanvas,
658
+ lt as TresCanvas,
647
659
  G as catalogue,
648
- Pt as default,
660
+ ht as default,
649
661
  V as extend,
650
- mt as isProd,
651
- Ge as normalizeColor,
652
- dt as normalizeVectorFlexibleParam,
653
- Ct as templateCompilerOptions,
654
- Ze as trasverseObjects,
655
- Fe as useCamera,
656
- vt as useLoader,
662
+ dt as isProd,
663
+ Ne as normalizeColor,
664
+ vt as normalizeVectorFlexibleParam,
665
+ Pt as templateCompilerOptions,
666
+ et as trasverseObjects,
667
+ $e as useCamera,
668
+ gt as useLoader,
657
669
  O as useLogger,
658
- tt as usePointerEventHandler,
659
- et as useRaycaster,
670
+ rt as usePointerEventHandler,
671
+ tt as useRaycaster,
660
672
  ne as useRenderLoop,
661
- Ye as useRenderer,
662
- yt as useSeek,
663
- gt as useTexture,
664
- wt as useTres,
665
- nt as useTresContext,
666
- rt as useTresContextProvider
673
+ Qe as useRenderer,
674
+ wt as useSeek,
675
+ yt as useTexture,
676
+ Ct as useTres,
677
+ at as useTresContext,
678
+ nt as useTresContextProvider
667
679
  };
package/dist/tres.umd.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v3.4.0
3
+ * version: v3.5.0
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(w,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):(w=typeof globalThis<"u"?globalThis:w||self,u(w.tres={},w.Vue,w.Three,w.VueUseCore))})(this,function(w,u,h,C){"use strict";function ae(e){const a=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(a,t,r.get?r:{enumerable:!0,get:()=>e[t]})}}return a.default=e,Object.freeze(a)}const oe=ae(h),R=({sizes:e,scene:a})=>{const t=u.ref([]),r=u.computed(()=>t.value[0]),n=(s,d=!1)=>{t.value.some(({uuid:l})=>l===s.uuid)||(d?f(s):t.value.push(s))},o=s=>{t.value=t.value.filter(({uuid:d})=>d!==s.uuid)},f=s=>{const d=s instanceof h.Camera?s:t.value.find(m=>m.uuid===s);if(!d)return;const l=t.value.filter(({uuid:m})=>m!==d.uuid);t.value=[d,...l]};return u.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(s=>{s instanceof h.PerspectiveCamera&&(s.aspect=e.aspectRatio.value),(s instanceof h.PerspectiveCamera||s instanceof h.OrthographicCamera)&&s.updateProjectionMatrix()})}),a.userData.tres__registerCamera=n,a.userData.tres__deregisterCamera=o,u.onUnmounted(()=>{t.value=[]}),{camera:r,cameras:t,registerCamera:n,deregisterCamera:o,setCameraActive:f}},I=C.createEventHook(),W=C.createEventHook(),z=C.createEventHook(),B=new h.Clock;let S=0,x=0;const{pause:se,resume:ie,isActive:le}=C.useRafFn(()=>{I.trigger({delta:S,elapsed:x,clock:B}),W.trigger({delta:S,elapsed:x,clock:B}),z.trigger({delta:S,elapsed:x,clock:B})},{immediate:!1});z.on(()=>{S=B.getDelta(),x=B.getElapsedTime()});const G=()=>({onBeforeLoop:I.on,onLoop:W.on,onAfterLoop:z.on,pause:se,resume:ie,isActive:le}),ue=!0,$="[TresJS ▲ ■ ●] ";function L(){function e(r,n){console.error(`${$} ${r}`,n||"")}function a(r){console.warn(`${$} ${r}`)}function t(r,n){}return{logError:e,logWarning:a,logMessage:t}}function ce(e){return typeof e=="number"?[e,e,e]:e instanceof h.Vector3?[e.x,e.y,e.z]:e}function N(e){return e instanceof h.Color?e:Array.isArray(e)?new h.Color(...e):new h.Color(e)}const q=(e,a)=>{for(const t of Object.keys(a))a[t]instanceof Object&&Object.assign(a[t],q(e[t],a[t]));return Object.assign(e||{},a),e},fe=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 U(e){return e&&e.nodeType===1}function E(e){return e.replace(/-([a-z])/g,(a,t)=>t.toUpperCase())}function de(e,a){const t=Object.create(null),r=e.split(",");for(let n=0;n<r.length;n++)t[r[n]]=!0;return a?n=>!!t[n.toLowerCase()]:n=>!!t[n]}const me=(e,a)=>{const t=new Set,r=[];for(const n of e){const o=a(n);t.has(o)||(t.add(o),r.push(n))}return r},H=(e,a)=>{if(!a)return;const t=Array.isArray(a)?a:a.match(/([^[.\]])+/g);return t==null?void 0:t.reduce((r,n)=>r&&r[n],e)},pe=(e,a,t)=>{const r=Array.isArray(a)?a:a.match(/([^[.\]])+/g);r&&r.reduce((n,o,f)=>(n[o]===void 0&&(n[o]={}),f===r.length-1&&(n[o]=t),n[o]),e)};function J(e,a){if(U(e)&&U(a)){const n=e.attributes,o=a.attributes;return n.length!==o.length?!1:Array.from(n).every(({name:f,value:s})=>a.getAttribute(f)===s)}if(e===a)return!0;if(e===null||typeof e!="object"||a===null||typeof a!="object")return!1;const t=Object.keys(e),r=Object.keys(a);if(t.length!==r.length)return!1;for(const n of t)if(!r.includes(n)||!J(e[n],a[n]))return!1;return!0}function ge(e,a){if(!Array.isArray(e)||!Array.isArray(a)||e.length!==a.length)return!1;for(let t=0;t<e.length;t++)if(!J(e[t],a[t]))return!1;return!0}const ve=Array.isArray,ye=Number.parseInt(h.REVISION.replace("dev","")),V={realistic:{shadows:!0,physicallyCorrectLights:!0,outputColorSpace:h.SRGBColorSpace,toneMapping:h.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:h.PCFSoftShadowMap}}};function K({scene:e,canvas:a,options:t,disableRender:r,contextParts:{sizes:n,camera:o}}){const f=u.computed(()=>({alpha:C.toValue(t.alpha),depth:C.toValue(t.depth),canvas:C.unrefElement(a),context:C.toValue(t.context),stencil:C.toValue(t.stencil),antialias:C.toValue(t.antialias)===void 0?!0:C.toValue(t.antialias),precision:C.toValue(t.precision),powerPreference:C.toValue(t.powerPreference),premultipliedAlpha:C.toValue(t.premultipliedAlpha),preserveDrawingBuffer:C.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:C.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:C.toValue(t.failIfMajorPerformanceCaveat)})),s=u.shallowRef(new h.WebGLRenderer(f.value));u.watch(f,()=>{s.value.dispose(),s.value=new h.WebGLRenderer(f.value)}),u.watchEffect(()=>{s.value.setSize(n.width.value,n.height.value)});const{pixelRatio:d}=C.useDevicePixelRatio();u.watchEffect(()=>{s.value.setPixelRatio(d.value)});const{logError:l}=L(),c=(()=>{const v=new h.WebGLRenderer,_={shadowMap:{enabled:v.shadowMap.enabled,type:v.shadowMap.type},toneMapping:v.toneMapping,toneMappingExposure:v.toneMappingExposure,outputColorSpace:v.outputColorSpace};return v.dispose(),_})();u.watchEffect(()=>{const v=C.toValue(t.preset);v&&(v in V||l(`Renderer Preset must be one of these: ${Object.keys(V).join(", ")}`),q(s.value,V[v]));const _=(A,M)=>{const O=C.toValue(A),F=()=>{if(v)return H(V[v],M)};if(O!==void 0)return O;const P=F();return P!==void 0?P:H(c,M)},k=(A,M)=>pe(s.value,M,_(A,M));k(t.shadows,"shadowMap.enabled"),k(t.toneMapping,"toneMapping"),k(t.shadowMapType,"shadowMap.type"),ye<150&&k(!t.useLegacyLights,"physicallyCorrectLights"),k(t.outputColorSpace,"outputColorSpace"),k(t.toneMappingExposure,"toneMappingExposure");const D=_(t.clearColor,"clearColor");D&&s.value.setClearColor(D?N(D):new h.Color(0))});const{pause:i,resume:p,onLoop:g}=G();return g(()=>{o.value&&!C.toValue(r)&&s.value.render(e,o.value)}),p(),u.onUnmounted(()=>{i(),s.value.dispose(),s.value.forceContextLoss()}),{renderer:s}}const X=e=>typeof e=="function",we=e=>!!e&&e.constructor===Array;function Y(e){const a={nodes:{},materials:{}};return e&&e.traverse(t=>{t.name&&(a.nodes[t.name]=t),t.material&&!a.materials[t.material.name]&&(a.materials[t.material.name]=t.material)}),a}async function Ce(e,a,t,r,n){const{logError:o}=L(),f=new e;n&&n(f),t&&t(f);const d=(Array.isArray(a)?a:[a]).map(l=>new Promise((m,c)=>{f.load(l,i=>{i.scene&&Object.assign(i,Y(i.scene)),m(i)},r,i=>c(o("[useLoader] - Failed to load resource",i)))}));return we(a)?await Promise.all(d):await d[0]}async function Pe(e){const a=new h.LoadingManager,t=new h.TextureLoader(a),r=n=>new Promise((o,f)=>{t.load(n,s=>o(s),()=>null,()=>{f(new Error("[useTextures] - Failed to load texture"))})});if(ve(e)){const n=await Promise.all(e.map(o=>r(o)));return e.length>1?n:n[0]}else{const{map:n,displacementMap:o,normalMap:f,roughnessMap:s,metalnessMap:d,aoMap:l,alphaMap:m,matcap:c}=e;return{map:n?await r(n):null,displacementMap:o?await r(o):null,normalMap:f?await r(f):null,roughnessMap:s?await r(s):null,metalnessMap:d?await r(d):null,aoMap:l?await r(l):null,alphaMap:m?await r(m):null,matcap:c?await r(c):null}}}const Q=(e,{renderer:a,camera:t,raycaster:r})=>{const n=u.computed(()=>a.value.domElement),{x:o,y:f}=C.usePointer({target:n}),{width:s,height:d,top:l,left:m}=C.useElementBounding(n),c=({x:P,y:b})=>{if(n.value)return{x:(P-m.value)/s.value*2-1,y:-((b-l.value)/d.value)*2+1}},i=({x:P,y:b})=>{if(t.value)return r.value.setFromCamera(new h.Vector2(P,b),t.value),r.value.intersectObjects(e.value,!1)},p=P=>{const b=c({x:(P==null?void 0:P.clientX)??o.value,y:(P==null?void 0:P.clientY)??f.value});return b?i(b)||[]:[]},g=u.computed(()=>p()),v=C.createEventHook(),_=C.createEventHook(),k=(P,b)=>{P.trigger({event:b,intersects:p(b)})},D=P=>{k(_,P)};let A;const M=P=>{var b;A=(b=p(P)[0])==null?void 0:b.object},O=P=>{var b;P instanceof PointerEvent&&A===((b=p(P)[0])==null?void 0:b.object)&&k(v,P)},F=P=>_.trigger({event:P,intersects:[]});return n.value.addEventListener("pointerup",O),n.value.addEventListener("pointerdown",M),n.value.addEventListener("pointermove",D),n.value.addEventListener("pointerleave",F),u.onUnmounted(()=>{n!=null&&n.value&&(n.value.removeEventListener("pointerup",O),n.value.removeEventListener("pointerdown",M),n.value.removeEventListener("pointermove",D),n.value.removeEventListener("pointerleave",F))}),{intersects:g,onClick:P=>v.on(P).off,onPointerMove:P=>_.on(P).off}};function he(){const{logWarning:e}=L();function a(r,n,o){let f=null;return r.traverse(s=>{s[n]===o&&(f=s)}),f||e(`Child with ${n} '${o}' not found.`),f}function t(r,n){return a(r,"name",n)}return{seek:a,seekByName:t}}const Z=({scene:e,contextParts:a})=>{const t=u.reactive({click:new Map,pointerMove:new Map,pointerEnter:new Map,pointerLeave:new Map}),r=u.ref(new Set),n=i=>{r.value.add(i)},o=i=>{r.value.delete(i)},f=i=>{Object.values(t).forEach(p=>p.delete(i)),o(i)},s=i=>{const{onClick:p,onPointerMove:g,onPointerEnter:v,onPointerLeave:_}=i;p&&t.click.set(i,p),g&&t.pointerMove.set(i,g),v&&t.pointerEnter.set(i,v),_&&t.pointerLeave.set(i,_)};e.userData.tres__registerAtPointerEventHandler=s,e.userData.tres__deregisterAtPointerEventHandler=f,e.userData.tres__registerBlockingObjectAtPointerEventHandler=n,e.userData.tres__deregisterBlockingObjectAtPointerEventHandler=o;const d=u.computed(()=>me([...Array.from(r.value),...Object.values(t).map(i=>Array.from(i.keys())).flat()],({uuid:i})=>i)),{onClick:l,onPointerMove:m}=Q(d,a);l(({intersects:i,event:p})=>{var g;i.length&&((g=t.click.get(i[0].object))==null||g(i[0],p))});let c;return m(({intersects:i,event:p})=>{var D,A,M,O;const g=(D=i==null?void 0:i[0])==null?void 0:D.object,{pointerLeave:v,pointerEnter:_,pointerMove:k}=t;c&&c!==g&&((A=v.get(c))==null||A(c,p)),g&&(c!==g&&((M=_.get(g))==null||M(i[0],p)),(O=k.get(g))==null||O(i[0],p)),c=g||null}),{registerObject:s,deregisterObject:f}},T=u.ref({}),j=e=>Object.assign(T.value,e);function ee({scene:e,canvas:a,windowSize:t,disableRender:r,rendererOptions:n}){const o=u.computed(()=>C.toValue(t)?C.useWindowSize():C.useElementSize(C.toValue(a).parentElement)),f=u.computed(()=>o.value.width.value),s=u.computed(()=>o.value.height.value),d=u.computed(()=>f.value/s.value),l={height:s,width:f,aspectRatio:d},m=u.shallowRef(e),{camera:c,cameras:i,registerCamera:p,deregisterCamera:g,setCameraActive:v}=R({sizes:l,scene:e}),{renderer:_}=K({scene:e,canvas:a,options:n,contextParts:{sizes:l,camera:c},disableRender:r}),k={sizes:l,scene:m,camera:c,cameras:u.readonly(i),renderer:_,raycaster:u.shallowRef(new h.Raycaster),controls:u.ref(null),extend:j,registerCamera:p,setCameraActive:v,deregisterCamera:g};return u.provide("useTres",k),k}function te(){const e=u.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const _e=te;function Be(e){}let y=null;const{logError:re}=L(),Me={createElement(e,a,t,r){var f,s;if(r||(r={}),r.args||(r.args=[]),e==="template"||fe(e))return null;let n=e.replace("Tres",""),o;if(e==="primitive"){(r==null?void 0:r.object)===void 0&&re("Tres primitives need a prop 'object'");const d=r.object;n=d.type,o=Object.assign(d,{type:n,attach:r.attach,primitive:!0})}else{const d=T.value[n];d||re(`${n} is not defined on the THREE namespace. Use extend to add it to the catalog.`),o=new d(...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&&((f=r==null?void 0:r.material)!=null&&f.isMaterial&&(o.userData.tres__materialViaProp=!0),(s=r==null?void 0:r.geometry)!=null&&s.isBufferGeometry&&(o.userData.tres__geometryViaProp=!0)),o.userData={...o.userData,tres__name:n},o},insert(e,a){var r,n,o,f;a&&a.isScene&&(y=a);const t=a||y;if(e!=null&&e.isObject3D){if(e!=null&&e.isCamera){if(!(y!=null&&y.userData.tres__registerCamera))throw"could not find tres__registerCamera on scene's userData";(n=y==null?void 0:(r=y.userData).tres__registerCamera)==null||n.call(r,e)}if(e!=null&&e.onClick||e!=null&&e.onPointerMove||e!=null&&e.onPointerEnter||e!=null&&e.onPointerLeave){if(!(y!=null&&y.userData.tres__registerAtPointerEventHandler))throw"could not find tres__registerAtPointerEventHandler on scene's userData";(f=y==null?void 0:(o=y.userData).tres__registerAtPointerEventHandler)==null||f.call(o,e)}}e!=null&&e.isObject3D&&(t!=null&&t.isObject3D)?(t.add(e),e.dispatchEvent({type:"added"})):e!=null&&e.isFog?t.fog=e:typeof(e==null?void 0:e.attach)=="string"&&(e.__previousAttach=e[t==null?void 0:t.attach],t&&(t[e.attach]=e))},remove(e){var a,t;if(e){if(e.isObject3D){const r=e,n=l=>{var c,i;const m=l;l.userData.tres__materialViaProp||(c=m.material)==null||c.dispose(),l.userData.tres__geometryViaProp||(i=m.geometry)==null||i.dispose()},o=y==null?void 0:y.userData.tres__deregisterAtPointerEventHandler,f=y==null?void 0:y.userData.tres__deregisterBlockingObjectAtPointerEventHandler,s=l=>{var m,c;if(!f)throw"could not find tres__deregisterBlockingObjectAtPointerEventHandler on scene's userData";if((c=y==null?void 0:(m=y.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||c.call(m,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))},d=l=>{const m=y==null?void 0:y.userData.tres__deregisterCamera;if(!m)throw"could not find tres__deregisterCamera on scene's userData";l.isCamera&&(m==null||m(l))};r.traverse(l=>{n(l),d(l),s==null||s(l)}),n(r),d(r),s==null||s(r)}(a=e.removeFromParent)==null||a.call(e),(t=e.dispose)==null||t.call(e)}},patchProp(e,a,t,r){var n,o,f,s;if(e){let d=e,l=a;if(e.isObject3D&&l==="blocks-pointer-events"){r||r===""?(o=y==null?void 0:(n=y.userData).tres__registerBlockingObjectAtPointerEventHandler)==null||o.call(n,e):(s=y==null?void 0:(f=y.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||s.call(f,e);return}let m=E(l),c=d==null?void 0:d[m];if(l==="args"){const p=e,g=t??[],v=r??[],_=e.userData.tres__name||e.type;_&&g.length&&!ge(g,v)&&(d=Object.assign(p,new T.value[_](...r)));return}if(d.type==="BufferGeometry"){if(l==="args")return;d.setAttribute(E(l),new h.BufferAttribute(...r));return}if(l.includes("-")&&c===void 0){const p=l.split("-");c=p.reduce((g,v)=>g[E(v)],d),l=p.pop(),m=l.toLowerCase(),c!=null&&c.set||(d=p.reduce((g,v)=>g[E(v)],d))}let i=r;if(i===""&&(i=!0),X(c)){Array.isArray(i)?e[m](...i):e[m](i);return}!(c!=null&&c.set)&&!X(c)?d[m]=i:c.constructor===i.constructor&&(c!=null&&c.copy)?c==null||c.copy(i):Array.isArray(i)?c.set(...i):!c.isColor&&c.setScalar?c.setScalar(i):c.set(i)}},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}=u.createRenderer(Me);j(oe);const ke=["data-scene"],ne=u.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,{expose:a}){var i;const t=e,{logWarning:r}=L(),n=u.ref(),o=u.shallowRef(new h.Scene);G();const f=u.useSlots(),s=(i=u.getCurrentInstance())==null?void 0:i.appContext.app,d=p=>u.defineComponent({setup(){var v;const g=(v=u.getCurrentInstance())==null?void 0:v.appContext;return g&&(g.app=s),u.provide("useTres",p),u.provide("extend",j),()=>u.h(u.Fragment,null,f!=null&&f.default?f.default():[])}}),l=p=>{const g=d(p);Ae(u.h(g),o.value)},m=u.computed(()=>t.disableRender),c=u.shallowRef(null);return a({context:c}),u.onMounted(()=>{const p=n;c.value=ee({scene:o.value,canvas:p,windowSize:t.windowSize,disableRender:m,rendererOptions:t}),Z({scene:o.value,contextParts:c.value});const{registerCamera:g,camera:v,cameras:_,deregisterCamera:k}=c.value;l(c.value);const D=()=>{const A=new h.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);A.position.set(3,3,3),A.lookAt(0,0,0),g(A);const M=u.watchEffect(()=>{_.value.length>=2&&(A.removeFromParent(),k(A),M==null||M())})};u.watch(()=>t.camera,(A,M)=>{A&&g(A),M&&(M.removeFromParent(),k(M))},{immediate:!0}),v.value||(r("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),D())}),(p,g)=>(u.openBlock(),u.createElementBlock("canvas",u.mergeProps({ref_key:"canvas",ref:n,"data-scene":o.value.uuid},p.$attrs,{style:{display:"block",width:"100%",height:"100%",position:p.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none"}}),null,16,ke))}}),be=["TresCanvas","TresLeches","TresScene"],De={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!be.includes(e)||e==="primitive"}}},Oe={install(e){e.component("TresCanvas",ne)}};w.TresCanvas=ne,w.catalogue=T,w.default=Oe,w.extend=j,w.isProd=ue,w.normalizeColor=N,w.normalizeVectorFlexibleParam=ce,w.templateCompilerOptions=De,w.trasverseObjects=Y,w.useCamera=R,w.useLoader=Ce,w.useLogger=L,w.usePointerEventHandler=Z,w.useRaycaster=Q,w.useRenderLoop=G,w.useRenderer=K,w.useSeek=he,w.useTexture=Pe,w.useTres=_e,w.useTresContext=te,w.useTresContextProvider=ee,Object.defineProperties(w,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
8
+ (function(w,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):(w=typeof globalThis<"u"?globalThis:w||self,u(w.tres={},w.Vue,w.Three,w.VueUseCore))})(this,function(w,u,P,C){"use strict";function ae(e){const a=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(a,t,r.get?r:{enumerable:!0,get:()=>e[t]})}}return a.default=e,Object.freeze(a)}const oe=ae(P),G=({sizes:e,scene:a})=>{const t=u.ref([]),r=u.computed(()=>t.value[0]),n=(s,d=!1)=>{t.value.some(({uuid:i})=>i===s.uuid)||(d?c(s):t.value.push(s))},o=s=>{t.value=t.value.filter(({uuid:d})=>d!==s.uuid)},c=s=>{const d=s instanceof P.Camera?s:t.value.find(p=>p.uuid===s);if(!d)return;const i=t.value.filter(({uuid:p})=>p!==d.uuid);t.value=[d,...i]};return u.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(s=>{s instanceof P.PerspectiveCamera&&(s.aspect=e.aspectRatio.value),(s instanceof P.PerspectiveCamera||s instanceof P.OrthographicCamera)&&s.updateProjectionMatrix()})}),a.userData.tres__registerCamera=n,a.userData.tres__deregisterCamera=o,u.onUnmounted(()=>{t.value=[]}),{camera:r,cameras:t,registerCamera:n,deregisterCamera:o,setCameraActive:c}},R=C.createEventHook(),I=C.createEventHook(),F=C.createEventHook(),B=new P.Clock;let S=0,x=0;const{pause:se,resume:ie,isActive:le}=C.useRafFn(()=>{R.trigger({delta:S,elapsed:x,clock:B}),I.trigger({delta:S,elapsed:x,clock:B}),F.trigger({delta:S,elapsed:x,clock:B})},{immediate:!1});F.on(()=>{S=B.getDelta(),x=B.getElapsedTime()});const $=()=>({onBeforeLoop:R.on,onLoop:I.on,onAfterLoop:F.on,pause:se,resume:ie,isActive:le}),ue=!0,W="[TresJS ▲ ■ ●] ";function L(){function e(r,n){console.error(`${W} ${r}`,n||"")}function a(r){console.warn(`${W} ${r}`)}function t(r,n){}return{logError:e,logWarning:a,logMessage:t}}function ce(e){return typeof e=="number"?[e,e,e]:e instanceof P.Vector3?[e.x,e.y,e.z]:e}function N(e){return e instanceof P.Color?e:Array.isArray(e)?new P.Color(...e):new P.Color(e)}const q=(e,a)=>{for(const t of Object.keys(a))a[t]instanceof Object&&Object.assign(a[t],q(e[t],a[t]));return Object.assign(e||{},a),e},fe=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 U(e){return e&&e.nodeType===1}function E(e){return e.replace(/-([a-z])/g,(a,t)=>t.toUpperCase())}function de(e,a){const t=Object.create(null),r=e.split(",");for(let n=0;n<r.length;n++)t[r[n]]=!0;return a?n=>!!t[n.toLowerCase()]:n=>!!t[n]}const me=(e,a)=>{const t=new Set,r=[];for(const n of e){const o=a(n);t.has(o)||(t.add(o),r.push(n))}return r},H=(e,a)=>{if(!a)return;const t=Array.isArray(a)?a:a.match(/([^[.\]])+/g);return t==null?void 0:t.reduce((r,n)=>r&&r[n],e)},pe=(e,a,t)=>{const r=Array.isArray(a)?a:a.match(/([^[.\]])+/g);r&&r.reduce((n,o,c)=>(n[o]===void 0&&(n[o]={}),c===r.length-1&&(n[o]=t),n[o]),e)};function J(e,a){if(U(e)&&U(a)){const n=e.attributes,o=a.attributes;return n.length!==o.length?!1:Array.from(n).every(({name:c,value:s})=>a.getAttribute(c)===s)}if(e===a)return!0;if(e===null||typeof e!="object"||a===null||typeof a!="object")return!1;const t=Object.keys(e),r=Object.keys(a);if(t.length!==r.length)return!1;for(const n of t)if(!r.includes(n)||!J(e[n],a[n]))return!1;return!0}function ge(e,a){if(!Array.isArray(e)||!Array.isArray(a)||e.length!==a.length)return!1;for(let t=0;t<e.length;t++)if(!J(e[t],a[t]))return!1;return!0}const ve=Array.isArray,ye=Number.parseInt(P.REVISION.replace("dev","")),V={realistic:{shadows:!0,physicallyCorrectLights:!0,outputColorSpace:P.SRGBColorSpace,toneMapping:P.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:P.PCFSoftShadowMap}}};function K({scene:e,canvas:a,options:t,disableRender:r,contextParts:{sizes:n,camera:o}}){const c=u.computed(()=>({alpha:C.toValue(t.alpha),depth:C.toValue(t.depth),canvas:C.unrefElement(a),context:C.toValue(t.context),stencil:C.toValue(t.stencil),antialias:C.toValue(t.antialias)===void 0?!0:C.toValue(t.antialias),precision:C.toValue(t.precision),powerPreference:C.toValue(t.powerPreference),premultipliedAlpha:C.toValue(t.premultipliedAlpha),preserveDrawingBuffer:C.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:C.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:C.toValue(t.failIfMajorPerformanceCaveat)})),s=u.shallowRef(new P.WebGLRenderer(c.value));u.watch(c,()=>{s.value.dispose(),s.value=new P.WebGLRenderer(c.value)}),u.watchEffect(()=>{s.value.setSize(n.width.value,n.height.value)});const{pixelRatio:d}=C.useDevicePixelRatio();u.watchEffect(()=>{s.value.setPixelRatio(d.value)});const{logError:i}=L(),f=(()=>{const v=new P.WebGLRenderer,_={shadowMap:{enabled:v.shadowMap.enabled,type:v.shadowMap.type},toneMapping:v.toneMapping,toneMappingExposure:v.toneMappingExposure,outputColorSpace:v.outputColorSpace};return v.dispose(),_})();u.watchEffect(()=>{const v=C.toValue(t.preset);v&&(v in V||i(`Renderer Preset must be one of these: ${Object.keys(V).join(", ")}`),q(s.value,V[v]));const _=(A,M)=>{const O=C.toValue(A),z=()=>{if(v)return H(V[v],M)};if(O!==void 0)return O;const h=z();return h!==void 0?h:H(f,M)},k=(A,M)=>pe(s.value,M,_(A,M));k(t.shadows,"shadowMap.enabled"),k(t.toneMapping,"toneMapping"),k(t.shadowMapType,"shadowMap.type"),ye<150&&k(!t.useLegacyLights,"physicallyCorrectLights"),k(t.outputColorSpace,"outputColorSpace"),k(t.toneMappingExposure,"toneMappingExposure");const D=_(t.clearColor,"clearColor");D&&s.value.setClearColor(D?N(D):new P.Color(0))});const{pause:l,resume:m,onLoop:g}=$();return g(()=>{o.value&&!C.toValue(r)&&s.value.render(e,o.value)}),m(),u.onUnmounted(()=>{l(),s.value.dispose(),s.value.forceContextLoss()}),{renderer:s}}const X=e=>typeof e=="function",we=e=>!!e&&e.constructor===Array;function Y(e){const a={nodes:{},materials:{}};return e&&e.traverse(t=>{t.name&&(a.nodes[t.name]=t),t.material&&!a.materials[t.material.name]&&(a.materials[t.material.name]=t.material)}),a}async function Ce(e,a,t,r,n){const{logError:o}=L(),c=new e;n&&n(c),t&&t(c);const d=(Array.isArray(a)?a:[a]).map(i=>new Promise((p,f)=>{c.load(i,l=>{l.scene&&Object.assign(l,Y(l.scene)),p(l)},r,l=>f(o("[useLoader] - Failed to load resource",l)))}));return we(a)?await Promise.all(d):await d[0]}async function he(e){const a=new P.LoadingManager,t=new P.TextureLoader(a),r=n=>new Promise((o,c)=>{t.load(n,s=>o(s),()=>null,()=>{c(new Error("[useTextures] - Failed to load texture"))})});if(ve(e)){const n=await Promise.all(e.map(o=>r(o)));return e.length>1?n:n[0]}else{const{map:n,displacementMap:o,normalMap:c,roughnessMap:s,metalnessMap:d,aoMap:i,alphaMap:p,matcap:f}=e;return{map:n?await r(n):null,displacementMap:o?await r(o):null,normalMap:c?await r(c):null,roughnessMap:s?await r(s):null,metalnessMap:d?await r(d):null,aoMap:i?await r(i):null,alphaMap:p?await r(p):null,matcap:f?await r(f):null}}}const Q=(e,{renderer:a,camera:t,raycaster:r})=>{const n=u.computed(()=>a.value.domElement),{x:o,y:c}=C.usePointer({target:n}),{width:s,height:d,top:i,left:p}=C.useElementBounding(n),f=({x:h,y:b})=>{if(n.value)return{x:(h-p.value)/s.value*2-1,y:-((b-i.value)/d.value)*2+1}},l=({x:h,y:b})=>{if(t.value)return r.value.setFromCamera(new P.Vector2(h,b),t.value),r.value.intersectObjects(e.value,!1)},m=h=>{const b=f({x:(h==null?void 0:h.clientX)??o.value,y:(h==null?void 0:h.clientY)??c.value});return b?l(b)||[]:[]},g=u.computed(()=>m()),v=C.createEventHook(),_=C.createEventHook(),k=(h,b)=>{h.trigger({event:b,intersects:m(b)})},D=h=>{k(_,h)};let A;const M=h=>{var b;A=(b=m(h)[0])==null?void 0:b.object},O=h=>{var b;h instanceof PointerEvent&&A===((b=m(h)[0])==null?void 0:b.object)&&k(v,h)},z=h=>_.trigger({event:h,intersects:[]});return n.value.addEventListener("pointerup",O),n.value.addEventListener("pointerdown",M),n.value.addEventListener("pointermove",D),n.value.addEventListener("pointerleave",z),u.onUnmounted(()=>{n!=null&&n.value&&(n.value.removeEventListener("pointerup",O),n.value.removeEventListener("pointerdown",M),n.value.removeEventListener("pointermove",D),n.value.removeEventListener("pointerleave",z))}),{intersects:g,onClick:h=>v.on(h).off,onPointerMove:h=>_.on(h).off}};function Pe(){const{logWarning:e}=L();function a(o,c,s){let d=null;return o.traverse(i=>{i[c]===s&&(d=i)}),d||e(`Child with ${c} '${s}' not found.`),d}function t(o,c,s){const d=[];return o.traverse(i=>{i[c].includes(s)&&d.push(i)}),d.length||e(`Children with ${c} '${s}' not found.`),d}function r(o,c){return a(o,"name",c)}function n(o,c){return t(o,"name",c)}return{seek:a,seekByName:r,seekAll:t,seekAllByName:n}}const Z=({scene:e,contextParts:a})=>{const t=u.reactive({click:new Map,pointerMove:new Map,pointerEnter:new Map,pointerLeave:new Map}),r=u.ref(new Set),n=l=>{r.value.add(l)},o=l=>{r.value.delete(l)},c=l=>{Object.values(t).forEach(m=>m.delete(l)),o(l)},s=l=>{const{onClick:m,onPointerMove:g,onPointerEnter:v,onPointerLeave:_}=l;m&&t.click.set(l,m),g&&t.pointerMove.set(l,g),v&&t.pointerEnter.set(l,v),_&&t.pointerLeave.set(l,_)};e.userData.tres__registerAtPointerEventHandler=s,e.userData.tres__deregisterAtPointerEventHandler=c,e.userData.tres__registerBlockingObjectAtPointerEventHandler=n,e.userData.tres__deregisterBlockingObjectAtPointerEventHandler=o;const d=u.computed(()=>me([...Array.from(r.value),...Object.values(t).map(l=>Array.from(l.keys())).flat()],({uuid:l})=>l)),{onClick:i,onPointerMove:p}=Q(d,a);i(({intersects:l,event:m})=>{var g;l.length&&((g=t.click.get(l[0].object))==null||g(l[0],m))});let f;return p(({intersects:l,event:m})=>{var D,A,M,O;const g=(D=l==null?void 0:l[0])==null?void 0:D.object,{pointerLeave:v,pointerEnter:_,pointerMove:k}=t;f&&f!==g&&((A=v.get(f))==null||A(f,m)),g&&(f!==g&&((M=_.get(g))==null||M(l[0],m)),(O=k.get(g))==null||O(l[0],m)),f=g||null}),{registerObject:s,deregisterObject:c}},T=u.ref({}),j=e=>Object.assign(T.value,e);function ee({scene:e,canvas:a,windowSize:t,disableRender:r,rendererOptions:n}){const o=u.computed(()=>C.toValue(t)?C.useWindowSize():C.useElementSize(C.toValue(a).parentElement)),c=u.computed(()=>o.value.width.value),s=u.computed(()=>o.value.height.value),d=u.computed(()=>c.value/s.value),i={height:s,width:c,aspectRatio:d},p=u.shallowRef(e),{camera:f,cameras:l,registerCamera:m,deregisterCamera:g,setCameraActive:v}=G({sizes:i,scene:e}),{renderer:_}=K({scene:e,canvas:a,options:n,contextParts:{sizes:i,camera:f},disableRender:r}),k={sizes:i,scene:p,camera:f,cameras:u.readonly(l),renderer:_,raycaster:u.shallowRef(new P.Raycaster),controls:u.ref(null),extend:j,registerCamera:m,setCameraActive:v,deregisterCamera:g};return u.provide("useTres",k),k}function te(){const e=u.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const _e=te;function Be(e){}let y=null;const{logError:re}=L(),Me={createElement(e,a,t,r){var c,s;if(r||(r={}),r.args||(r.args=[]),e==="template"||fe(e))return null;let n=e.replace("Tres",""),o;if(e==="primitive"){(r==null?void 0:r.object)===void 0&&re("Tres primitives need a prop 'object'");const d=r.object;n=d.type,o=Object.assign(d,{type:n,attach:r.attach,primitive:!0})}else{const d=T.value[n];d||re(`${n} is not defined on the THREE namespace. Use extend to add it to the catalog.`),o=new d(...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&&((c=r==null?void 0:r.material)!=null&&c.isMaterial&&(o.userData.tres__materialViaProp=!0),(s=r==null?void 0:r.geometry)!=null&&s.isBufferGeometry&&(o.userData.tres__geometryViaProp=!0)),o.userData={...o.userData,tres__name:n},o},insert(e,a){var r,n,o,c;a&&a.isScene&&(y=a);const t=a||y;if(e!=null&&e.isObject3D){if(e!=null&&e.isCamera){if(!(y!=null&&y.userData.tres__registerCamera))throw"could not find tres__registerCamera on scene's userData";(n=y==null?void 0:(r=y.userData).tres__registerCamera)==null||n.call(r,e)}if(e!=null&&e.onClick||e!=null&&e.onPointerMove||e!=null&&e.onPointerEnter||e!=null&&e.onPointerLeave){if(!(y!=null&&y.userData.tres__registerAtPointerEventHandler))throw"could not find tres__registerAtPointerEventHandler on scene's userData";(c=y==null?void 0:(o=y.userData).tres__registerAtPointerEventHandler)==null||c.call(o,e)}}e!=null&&e.isObject3D&&(t!=null&&t.isObject3D)?(t.add(e),e.dispatchEvent({type:"added"})):e!=null&&e.isFog?t.fog=e:typeof(e==null?void 0:e.attach)=="string"&&(e.__previousAttach=e[t==null?void 0:t.attach],t&&(t[e.attach]=e))},remove(e){var a,t;if(e){if(e.isObject3D){const r=e,n=i=>{var f,l;const p=i;i.userData.tres__materialViaProp||(f=p.material)==null||f.dispose(),i.userData.tres__geometryViaProp||(l=p.geometry)==null||l.dispose()},o=y==null?void 0:y.userData.tres__deregisterAtPointerEventHandler,c=y==null?void 0:y.userData.tres__deregisterBlockingObjectAtPointerEventHandler,s=i=>{var p,f;if(!c)throw"could not find tres__deregisterBlockingObjectAtPointerEventHandler on scene's userData";if((f=y==null?void 0:(p=y.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||f.call(p,i),!o)throw"could not find tres__deregisterAtPointerEventHandler on scene's userData";(i!=null&&i.onClick||i!=null&&i.onPointerMove||i!=null&&i.onPointerEnter||i!=null&&i.onPointerLeave)&&(o==null||o(i))},d=i=>{const p=y==null?void 0:y.userData.tres__deregisterCamera;if(!p)throw"could not find tres__deregisterCamera on scene's userData";i.isCamera&&(p==null||p(i))};r.traverse(i=>{n(i),d(i),s==null||s(i)}),n(r),d(r),s==null||s(r)}(a=e.removeFromParent)==null||a.call(e),(t=e.dispose)==null||t.call(e)}},patchProp(e,a,t,r){var n,o,c,s;if(e){let d=e,i=a;if(e.isObject3D&&i==="blocks-pointer-events"){r||r===""?(o=y==null?void 0:(n=y.userData).tres__registerBlockingObjectAtPointerEventHandler)==null||o.call(n,e):(s=y==null?void 0:(c=y.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||s.call(c,e);return}let p=E(i),f=d==null?void 0:d[p];if(i==="args"){const m=e,g=t??[],v=r??[],_=e.userData.tres__name||e.type;_&&g.length&&!ge(g,v)&&(d=Object.assign(m,new T.value[_](...r)));return}if(d.type==="BufferGeometry"){if(i==="args")return;d.setAttribute(E(i),new P.BufferAttribute(...r));return}if(i.includes("-")&&f===void 0){const m=i.split("-");f=m.reduce((g,v)=>g[E(v)],d),i=m.pop(),p=i.toLowerCase(),f!=null&&f.set||(d=m.reduce((g,v)=>g[E(v)],d))}let l=r;if(l===""&&(l=!0),X(f)){Array.isArray(l)?e[p](...l):e[p](l);return}!(f!=null&&f.set)&&!X(f)?d[p]=l:f.constructor===l.constructor&&(f!=null&&f.copy)?f==null||f.copy(l):Array.isArray(l)?f.set(...l):!f.isColor&&f.setScalar?f.setScalar(l):f.set(l)}},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}=u.createRenderer(Me);j(oe);const ke=["data-scene"],ne=u.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,{expose:a}){var l;const t=e,{logWarning:r}=L(),n=u.ref(),o=u.shallowRef(new P.Scene);$();const c=u.useSlots(),s=(l=u.getCurrentInstance())==null?void 0:l.appContext.app,d=m=>u.defineComponent({setup(){var v;const g=(v=u.getCurrentInstance())==null?void 0:v.appContext;return g&&(g.app=s),u.provide("useTres",m),u.provide("extend",j),()=>u.h(u.Fragment,null,c!=null&&c.default?c.default():[])}}),i=m=>{const g=d(m);Ae(u.h(g),o.value)},p=u.computed(()=>t.disableRender),f=u.shallowRef(null);return a({context:f}),u.onMounted(()=>{const m=n;f.value=ee({scene:o.value,canvas:m,windowSize:t.windowSize,disableRender:p,rendererOptions:t}),Z({scene:o.value,contextParts:f.value});const{registerCamera:g,camera:v,cameras:_,deregisterCamera:k}=f.value;i(f.value);const D=()=>{const A=new P.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);A.position.set(3,3,3),A.lookAt(0,0,0),g(A);const M=u.watchEffect(()=>{_.value.length>=2&&(A.removeFromParent(),k(A),M==null||M())})};u.watch(()=>t.camera,(A,M)=>{A&&g(A),M&&(M.removeFromParent(),k(M))},{immediate:!0}),v.value||(r("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),D())}),(m,g)=>(u.openBlock(),u.createElementBlock("canvas",{ref_key:"canvas",ref:n,"data-scene":o.value.uuid,class:u.normalizeClass(m.$attrs.class),style:u.normalizeStyle({display:"block",width:"100%",height:"100%",position:m.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none",...m.$attrs.style})},null,14,ke))}}),be=["TresCanvas","TresLeches","TresScene"],De={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!be.includes(e)||e==="primitive"}}},Oe={install(e){e.component("TresCanvas",ne)}};w.TresCanvas=ne,w.catalogue=T,w.default=Oe,w.extend=j,w.isProd=ue,w.normalizeColor=N,w.normalizeVectorFlexibleParam=ce,w.templateCompilerOptions=De,w.trasverseObjects=Y,w.useCamera=G,w.useLoader=Ce,w.useLogger=L,w.usePointerEventHandler=Z,w.useRaycaster=Q,w.useRenderLoop=$,w.useRenderer=K,w.useSeek=Pe,w.useTexture=he,w.useTres=_e,w.useTresContext=te,w.useTresContextProvider=ee,Object.defineProperties(w,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
@@ -1,4 +1,4 @@
1
- import type { DefineComponent, Ref, VNode } from 'vue';
1
+ import type { DefineComponent, VNode, VNodeRef } from 'vue';
2
2
  import type * as THREE from 'three';
3
3
  import type { EventProps as PointerEventHandlerEventProps } from '../composables/usePointerEventHandler';
4
4
  export type AttachFnType<O = any> = (parent: any, self: O) => () => void;
@@ -134,8 +134,8 @@ interface RaycastableRepresentation {
134
134
  type EventProps<P> = P extends RaycastableRepresentation ? Partial<EventHandlers> : unknown;
135
135
  export interface VueProps<P> {
136
136
  children?: VNode[];
137
- ref?: string | null | Ref<P>;
138
- key?: string;
137
+ ref?: VNodeRef;
138
+ key?: string | number | symbol;
139
139
  }
140
140
  type ElementProps<T extends ConstructorRepresentation, P = InstanceType<T>> = Partial<Overwrite<WithMathProps<P>, VueProps<P> & EventProps<P>>>;
141
141
  export type ThreeElement<T extends ConstructorRepresentation> = Mutable<Overwrite<ElementProps<T>, Omit<InstanceProps<InstanceType<T>, T>, 'object'>>>;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tresjs/core",
3
3
  "type": "module",
4
- "version": "3.4.0",
4
+ "version": "3.5.0",
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/)",