@tresjs/core 3.2.0 → 3.2.1-next.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.
package/dist/tres.js CHANGED
@@ -1,31 +1,31 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v3.2.0
3
+ * version: v3.2.1-next.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 h, computed as M, watchEffect as D, onUnmounted as N, shallowRef as F, watch as ee, reactive as ie, readonly as ue, provide as I, inject as le, createRenderer as ce, defineComponent as U, useSlots as fe, onMounted as me, openBlock as pe, createElementBlock as ve, normalizeStyle as de, h as J, Fragment as ge } from "vue";
9
- import * as ye from "three";
10
- import { PerspectiveCamera as W, 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 Oe, Raycaster as xe, BufferAttribute as he, Scene as Be } from "three";
11
- import { createEventHook as x, useRafFn as Le, toValue as _, unrefElement as Te, 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
- const t = h([]), r = M(
8
+ import { ref as h, 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 de, normalizeStyle as ge, 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 he, BufferAttribute as Be, Scene as Le } from "three";
11
+ import { createEventHook as O, useRafFn as Te, 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 }) => {
13
+ const t = h([]), r = k(
14
14
  () => t.value[0]
15
15
  ), a = (i, c = !1) => {
16
- t.value.some(({ uuid: s }) => s === i.uuid) || (c ? f(i) : t.value.push(i));
16
+ t.value.some(({ uuid: u }) => u === i.uuid) || (c ? f(i) : t.value.push(i));
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 Ce ? i : t.value.find((m) => m.uuid === i);
20
+ const c = i instanceof _e ? i : t.value.find((m) => m.uuid === i);
21
21
  if (!c)
22
22
  return;
23
- const s = t.value.filter(({ uuid: m }) => m !== c.uuid);
24
- t.value = [c, ...s];
23
+ const u = t.value.filter(({ uuid: m }) => m !== c.uuid);
24
+ t.value = [c, ...u];
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 we) && i.updateProjectionMatrix();
28
+ i instanceof W && (i.aspect = e.aspectRatio.value), (i instanceof W || i instanceof Ce) && i.updateProjectionMatrix();
29
29
  });
30
30
  }), n.userData.tres__registerCamera = a, n.userData.tres__deregisterCamera = o, N(() => {
31
31
  t.value = [];
@@ -36,31 +36,31 @@ const ze = ({ sizes: e, scene: n }) => {
36
36
  deregisterCamera: o,
37
37
  setCameraActive: f
38
38
  };
39
- }, te = x(), re = x(), V = x(), O = new _e();
39
+ }, re = O(), ne = O(), V = O(), x = new Pe();
40
40
  let j = 0, H = 0;
41
- const { pause: Ge, resume: Ie, isActive: We } = Le(
41
+ const { pause: Ie, resume: We, isActive: $e } = Te(
42
42
  () => {
43
- te.trigger({ delta: j, elapsed: H, clock: O }), re.trigger({ delta: j, elapsed: H, clock: O }), V.trigger({ delta: j, elapsed: H, clock: O });
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
  },
45
45
  { immediate: !1 }
46
46
  );
47
47
  V.on(() => {
48
- j = O.getDelta(), H = O.getElapsedTime();
48
+ j = x.getDelta(), H = x.getElapsedTime();
49
49
  });
50
- const ne = () => ({
51
- onBeforeLoop: te.on,
52
- onLoop: re.on,
50
+ const ae = () => ({
51
+ onBeforeLoop: re.on,
52
+ onLoop: ne.on,
53
53
  onAfterLoop: V.on,
54
- pause: Ge,
55
- resume: Ie,
56
- isActive: We
57
- }), mt = !0, K = "[TresJS ▲ ■ ●] ";
54
+ pause: Ie,
55
+ resume: We,
56
+ isActive: $e
57
+ }), pt = !0, X = "[TresJS ▲ ■ ●] ";
58
58
  function B() {
59
59
  function e(r, a) {
60
- console.error(`${K} ${r}`, a || "");
60
+ console.error(`${X} ${r}`, a || "");
61
61
  }
62
62
  function n(r) {
63
- console.warn(`${K} ${r}`);
63
+ console.warn(`${X} ${r}`);
64
64
  }
65
65
  function t(r, a) {
66
66
  }
@@ -70,47 +70,47 @@ function B() {
70
70
  logMessage: t
71
71
  };
72
72
  }
73
- function pt(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 Ee ? [e.x, e.y, e.z] : e;
75
75
  }
76
- function $e(e) {
76
+ function Ne(e) {
77
77
  return e instanceof R ? e : Array.isArray(e) ? new R(...e) : new R(e);
78
78
  }
79
- const ae = (e, n) => {
79
+ const oe = (e, n) => {
80
80
  for (const t of Object.keys(n))
81
- n[t] instanceof Object && Object.assign(n[t], ae(e[t], n[t]));
81
+ n[t] instanceof Object && Object.assign(n[t], oe(e[t], n[t]));
82
82
  return Object.assign(e || {}, n), e;
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
- function X(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);
84
+ function Y(e) {
85
85
  return e && e.nodeType === 1;
86
86
  }
87
87
  function T(e) {
88
88
  return e.replace(/-([a-z])/g, (n, t) => t.toUpperCase());
89
89
  }
90
- function qe(e, n) {
90
+ function Ue(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 Ue = (e, n) => {
96
+ const Je = (e, n) => {
97
97
  const t = /* @__PURE__ */ new Set(), r = [];
98
98
  for (const a of e) {
99
99
  const o = n(a);
100
100
  t.has(o) || (t.add(o), r.push(a));
101
101
  }
102
102
  return r;
103
- }, Y = (e, n) => {
103
+ }, Q = (e, n) => {
104
104
  if (!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
- }, Je = (e, n, t) => {
108
+ }, Ke = (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
  };
112
- function oe(e, n) {
113
- if (X(e) && X(n)) {
112
+ function se(e, n) {
113
+ if (Y(e) && Y(n)) {
114
114
  const a = e.attributes, o = n.attributes;
115
115
  return a.length !== o.length ? !1 : Array.from(a).every(({ name: f, value: i }) => n.getAttribute(f) === i);
116
116
  }
@@ -122,126 +122,126 @@ function oe(e, n) {
122
122
  if (t.length !== r.length)
123
123
  return !1;
124
124
  for (const a of t)
125
- if (!r.includes(a) || !oe(e[a], n[a]))
125
+ if (!r.includes(a) || !se(e[a], n[a]))
126
126
  return !1;
127
127
  return !0;
128
128
  }
129
- function Ke(e, n) {
129
+ function Xe(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++)
133
- if (!oe(e[t], n[t]))
133
+ if (!se(e[t], n[t]))
134
134
  return !1;
135
135
  return !0;
136
136
  }
137
- const Xe = Number.parseInt(Ee.replace("dev", "")), S = {
137
+ const Ye = Number.parseInt(Me.replace("dev", "")), S = {
138
138
  realistic: {
139
- outputColorSpace: Me,
140
- toneMapping: Ae,
139
+ outputColorSpace: Ae,
140
+ toneMapping: ke,
141
141
  toneMappingExposure: 3,
142
142
  shadowMap: {
143
143
  enabled: !0,
144
- type: ke
144
+ type: be
145
145
  }
146
146
  }
147
147
  };
148
- function Ye({
148
+ function Qe({
149
149
  scene: e,
150
150
  canvas: n,
151
151
  options: t,
152
152
  disableRender: r,
153
153
  contextParts: { sizes: a, camera: o }
154
154
  }) {
155
- const f = M(() => ({
156
- alpha: _(t.alpha),
157
- depth: _(t.depth),
158
- canvas: Te(n),
159
- context: _(t.context),
160
- stencil: _(t.stencil),
161
- antialias: _(t.antialias) === void 0 ? !0 : _(t.antialias),
162
- precision: _(t.precision),
163
- powerPreference: _(t.powerPreference),
164
- premultipliedAlpha: _(t.premultipliedAlpha),
165
- preserveDrawingBuffer: _(t.preserveDrawingBuffer),
166
- logarithmicDepthBuffer: _(t.logarithmicDepthBuffer),
167
- failIfMajorPerformanceCaveat: _(t.failIfMajorPerformanceCaveat)
155
+ const f = k(() => ({
156
+ alpha: P(t.alpha),
157
+ depth: P(t.depth),
158
+ canvas: Se(n),
159
+ context: P(t.context),
160
+ stencil: P(t.stencil),
161
+ antialias: P(t.antialias) === void 0 ? !0 : P(t.antialias),
162
+ precision: P(t.precision),
163
+ powerPreference: P(t.powerPreference),
164
+ premultipliedAlpha: P(t.premultipliedAlpha),
165
+ preserveDrawingBuffer: P(t.preserveDrawingBuffer),
166
+ logarithmicDepthBuffer: P(t.logarithmicDepthBuffer),
167
+ failIfMajorPerformanceCaveat: P(t.failIfMajorPerformanceCaveat)
168
168
  })), i = F(new z(f.value));
169
- ee(f, () => {
169
+ te(f, () => {
170
170
  i.value.dispose(), i.value = new z(f.value);
171
171
  }), D(() => {
172
172
  i.value.setSize(a.width.value, a.height.value);
173
173
  });
174
- const { pixelRatio: c } = Se();
174
+ const { pixelRatio: c } = Re();
175
175
  D(() => {
176
176
  i.value.setPixelRatio(c.value);
177
177
  });
178
- const { logError: s } = B(), l = (() => {
179
- const v = new z(), w = {
178
+ const { logError: u } = B(), l = (() => {
179
+ const d = new z(), w = {
180
180
  shadowMap: {
181
- enabled: v.shadowMap.enabled,
182
- type: v.shadowMap.type
181
+ enabled: d.shadowMap.enabled,
182
+ type: d.shadowMap.type
183
183
  },
184
- toneMapping: v.toneMapping,
185
- toneMappingExposure: v.toneMappingExposure,
186
- outputColorSpace: v.outputColorSpace
184
+ toneMapping: d.toneMapping,
185
+ toneMappingExposure: d.toneMappingExposure,
186
+ outputColorSpace: d.outputColorSpace
187
187
  };
188
- return v.dispose(), w;
188
+ return d.dispose(), w;
189
189
  })();
190
190
  D(() => {
191
- const v = _(t.preset);
192
- v && (v in S || s(`Renderer Preset must be one of these: ${Object.keys(S).join(", ")}`), ae(i.value, S[v]));
193
- const w = (k, E) => {
194
- const b = _(k), L = () => {
195
- if (v)
196
- return Y(S[v], E);
191
+ const d = P(t.preset);
192
+ d && (d in S || u(`Renderer Preset must be one of these: ${Object.keys(S).join(", ")}`), oe(i.value, S[d]));
193
+ const w = (_, A) => {
194
+ const b = P(_), L = () => {
195
+ if (d)
196
+ return Q(S[d], A);
197
197
  };
198
198
  if (b !== void 0)
199
199
  return b;
200
- const d = L();
201
- return d !== void 0 ? d : Y(l, E);
202
- }, C = (k, E) => Je(i.value, E, w(k, E));
203
- C(t.shadows, "shadowMap.enabled"), C(t.toneMapping, "toneMapping"), C(t.shadowMapType, "shadowMap.type"), Xe < 150 && C(!t.useLegacyLights, "physicallyCorrectLights"), C(t.outputColorSpace, "outputColorSpace"), C(t.toneMappingExposure, "toneMappingExposure");
204
- const A = w(t.clearColor, "clearColor");
205
- A && i.value.setClearColor(
206
- A ? $e(A) : new R(0)
200
+ const g = L();
201
+ return g !== void 0 ? g : Q(l, A);
202
+ }, E = (_, A) => Ke(i.value, A, w(_, A));
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
+ const C = w(t.clearColor, "clearColor");
205
+ C && i.value.setClearColor(
206
+ C ? Ne(C) : new R(0)
207
207
  // default clear color is not easily/efficiently retrievable from three
208
208
  );
209
209
  });
210
- const { pause: u, resume: y, onLoop: g } = ne();
211
- return g(() => {
212
- o.value && !_(r) && i.value.render(e, o.value);
213
- }), y(), N(() => {
214
- u(), i.value.dispose(), i.value.forceContextLoss();
210
+ const { pause: s, resume: v, onLoop: y } = ae();
211
+ return y(() => {
212
+ o.value && !P(r) && i.value.render(e, o.value);
213
+ }), v(), N(() => {
214
+ s(), i.value.dispose(), i.value.forceContextLoss();
215
215
  }), {
216
216
  renderer: i
217
217
  };
218
218
  }
219
- const Q = (e) => typeof e == "function", se = (e) => !!e && e.constructor === Array;
220
- function Qe(e) {
219
+ const Z = (e) => typeof e == "function", ie = (e) => !!e && e.constructor === Array;
220
+ function Ze(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 vt(e, n, t, r, a) {
226
+ async function dt(e, n, t, r, a) {
227
227
  const { logError: o } = B(), f = new e();
228
228
  a && a(f), t && t(f);
229
229
  const c = (Array.isArray(n) ? n : [n]).map(
230
- (s) => new Promise((m, l) => {
230
+ (u) => new Promise((m, l) => {
231
231
  f.load(
232
- s,
233
- (u) => {
234
- u.scene && Object.assign(u, Qe(u.scene)), m(u);
232
+ u,
233
+ (s) => {
234
+ s.scene && Object.assign(s, Ze(s.scene)), m(s);
235
235
  },
236
236
  r,
237
- (u) => l(o("[useLoader] - Failed to load resource", u))
237
+ (s) => l(o("[useLoader] - Failed to load resource", s))
238
238
  );
239
239
  })
240
240
  );
241
- return se(n) ? await Promise.all(c) : await c[0];
241
+ return ie(n) ? await Promise.all(c) : await c[0];
242
242
  }
243
- async function dt(e) {
244
- const n = new be(), t = new De(n), r = (a) => new Promise((o, f) => {
243
+ async function gt(e) {
244
+ const n = new De(), t = new xe(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 (se(e)) {
254
+ if (ie(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 {
@@ -261,7 +261,7 @@ async function dt(e) {
261
261
  normalMap: f,
262
262
  roughnessMap: i,
263
263
  metalnessMap: c,
264
- aoMap: s,
264
+ aoMap: u,
265
265
  alphaMap: m,
266
266
  matcap: l
267
267
  } = e;
@@ -271,50 +271,50 @@ async function dt(e) {
271
271
  normalMap: f ? await r(f) : null,
272
272
  roughnessMap: i ? await r(i) : null,
273
273
  metalnessMap: c ? await r(c) : null,
274
- aoMap: s ? await r(s) : null,
274
+ aoMap: u ? await r(u) : null,
275
275
  alphaMap: m ? await r(m) : null,
276
276
  matcap: l ? await r(l) : null
277
277
  };
278
278
  }
279
279
  }
280
- const Ze = (e, { renderer: n, camera: t, raycaster: r }) => {
281
- const a = M(() => n.value.domElement), { x: o, y: f } = Re({ target: a }), { width: i, height: c, top: s, left: m } = je(a), l = ({ x: d, y: P }) => {
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: g, y: M }) => {
282
282
  if (a.value)
283
283
  return {
284
- x: (d - m.value) / i.value * 2 - 1,
285
- y: -((P - s.value) / c.value) * 2 + 1
284
+ x: (g - m.value) / i.value * 2 - 1,
285
+ y: -((M - u.value) / c.value) * 2 + 1
286
286
  };
287
- }, u = ({ x: d, y: P }) => {
287
+ }, s = ({ x: g, y: M }) => {
288
288
  if (t.value)
289
- return r.value.setFromCamera(new Oe(d, P), t.value), r.value.intersectObjects(e.value, !1);
290
- }, y = (d) => {
291
- const P = l({
292
- x: (d == null ? void 0 : d.clientX) ?? o.value,
293
- y: (d == null ? void 0 : d.clientY) ?? f.value
289
+ return r.value.setFromCamera(new Oe(g, M), t.value), r.value.intersectObjects(e.value, !1);
290
+ }, v = (g) => {
291
+ const M = l({
292
+ x: (g == null ? void 0 : g.clientX) ?? o.value,
293
+ y: (g == null ? void 0 : g.clientY) ?? f.value
294
294
  });
295
- return P ? u(P) || [] : [];
296
- }, g = M(() => y()), v = x(), w = x(), C = (d, P) => {
297
- d.trigger({ event: P, intersects: y(P) });
298
- }, A = (d) => {
299
- C(w, d);
295
+ return M ? s(M) || [] : [];
296
+ }, y = k(() => v()), d = O(), w = O(), E = (g, M) => {
297
+ g.trigger({ event: M, intersects: v(M) });
298
+ }, C = (g) => {
299
+ E(w, g);
300
300
  };
301
- let k;
302
- const E = (d) => {
303
- var P;
304
- k = (P = y(d)[0]) == null ? void 0 : P.object;
305
- }, b = (d) => {
306
- var P;
307
- d instanceof PointerEvent && k === ((P = y(d)[0]) == null ? void 0 : P.object) && C(v, d);
308
- }, L = (d) => w.trigger({ event: d, intersects: [] });
309
- return a.value.addEventListener("pointerup", b), a.value.addEventListener("pointerdown", E), a.value.addEventListener("pointermove", A), a.value.addEventListener("pointerleave", L), N(() => {
310
- a != null && a.value && (a.value.removeEventListener("pointerup", b), a.value.removeEventListener("pointerdown", E), a.value.removeEventListener("pointermove", A), a.value.removeEventListener("pointerleave", L));
301
+ let _;
302
+ const A = (g) => {
303
+ var M;
304
+ _ = (M = v(g)[0]) == null ? void 0 : M.object;
305
+ }, b = (g) => {
306
+ var M;
307
+ g instanceof PointerEvent && _ === ((M = v(g)[0]) == null ? void 0 : M.object) && E(d, g);
308
+ }, L = (g) => w.trigger({ event: g, intersects: [] });
309
+ return a.value.addEventListener("pointerup", b), a.value.addEventListener("pointerdown", A), a.value.addEventListener("pointermove", C), a.value.addEventListener("pointerleave", L), N(() => {
310
+ a != null && a.value && (a.value.removeEventListener("pointerup", b), a.value.removeEventListener("pointerdown", A), a.value.removeEventListener("pointermove", C), a.value.removeEventListener("pointerleave", L));
311
311
  }), {
312
- intersects: g,
313
- onClick: (d) => v.on(d).off,
314
- onPointerMove: (d) => w.on(d).off
312
+ intersects: y,
313
+ onClick: (g) => d.on(g).off,
314
+ onPointerMove: (g) => w.on(g).off
315
315
  };
316
316
  };
317
- function gt() {
317
+ function yt() {
318
318
  const { logWarning: e } = B();
319
319
  function n(r, a, o) {
320
320
  let f = null;
@@ -330,109 +330,109 @@ function gt() {
330
330
  seekByName: t
331
331
  };
332
332
  }
333
- const et = ({ scene: e, contextParts: n }) => {
334
- const t = ie({
333
+ const tt = ({ scene: e, contextParts: n }) => {
334
+ const t = ue({
335
335
  click: /* @__PURE__ */ new Map(),
336
336
  pointerMove: /* @__PURE__ */ new Map(),
337
337
  pointerEnter: /* @__PURE__ */ new Map(),
338
338
  pointerLeave: /* @__PURE__ */ new Map()
339
- }), r = h(/* @__PURE__ */ new Set()), a = (u) => {
340
- r.value.add(u);
341
- }, o = (u) => {
342
- r.value.delete(u);
343
- }, f = (u) => {
344
- Object.values(t).forEach((y) => y.delete(u)), o(u);
345
- }, i = (u) => {
346
- const { onClick: y, onPointerMove: g, onPointerEnter: v, onPointerLeave: w } = u;
347
- y && t.click.set(u, y), g && t.pointerMove.set(u, g), v && t.pointerEnter.set(u, v), w && t.pointerLeave.set(u, w);
339
+ }), r = h(/* @__PURE__ */ new Set()), a = (s) => {
340
+ r.value.add(s);
341
+ }, o = (s) => {
342
+ r.value.delete(s);
343
+ }, f = (s) => {
344
+ Object.values(t).forEach((v) => v.delete(s)), o(s);
345
+ }, i = (s) => {
346
+ const { onClick: v, onPointerMove: y, onPointerEnter: d, onPointerLeave: w } = s;
347
+ v && t.click.set(s, v), y && t.pointerMove.set(s, y), d && t.pointerEnter.set(s, d), w && t.pointerLeave.set(s, w);
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
- const c = M(
351
- () => Ue(
350
+ const c = k(
351
+ () => Je(
352
352
  [
353
353
  ...Array.from(r.value),
354
- ...Object.values(t).map((u) => Array.from(u.keys())).flat()
354
+ ...Object.values(t).map((s) => Array.from(s.keys())).flat()
355
355
  ],
356
- ({ uuid: u }) => u
356
+ ({ uuid: s }) => s
357
357
  )
358
- ), { onClick: s, onPointerMove: m } = Ze(c, n);
359
- s(({ intersects: u, event: y }) => {
360
- var g;
361
- u.length && ((g = t.click.get(u[0].object)) == null || g(u[0], y));
358
+ ), { onClick: u, onPointerMove: m } = et(c, n);
359
+ u(({ intersects: s, event: v }) => {
360
+ var y;
361
+ s.length && ((y = t.click.get(s[0].object)) == null || y(s[0], v));
362
362
  });
363
363
  let l;
364
- return m(({ intersects: u, event: y }) => {
365
- var A, k, E, b;
366
- const g = (A = u == null ? void 0 : u[0]) == null ? void 0 : A.object, { pointerLeave: v, pointerEnter: w, pointerMove: C } = t;
367
- l && l !== g && ((k = v.get(l)) == null || k(l, y)), g && (l !== g && ((E = w.get(g)) == null || E(u[0], y)), (b = C.get(g)) == null || b(u[0], y)), l = g || null;
364
+ return m(({ intersects: s, event: v }) => {
365
+ var C, _, A, b;
366
+ const y = (C = s == null ? void 0 : s[0]) == null ? void 0 : C.object, { pointerLeave: d, pointerEnter: w, pointerMove: E } = t;
367
+ l && l !== y && ((_ = d.get(l)) == null || _(l, v)), y && (l !== y && ((A = w.get(y)) == null || A(s[0], v)), (b = E.get(y)) == null || b(s[0], v)), l = y || null;
368
368
  }), {
369
369
  registerObject: i,
370
370
  deregisterObject: f
371
371
  };
372
372
  }, $ = h({}), q = (e) => Object.assign($.value, e);
373
- function tt({
373
+ function rt({
374
374
  scene: e,
375
375
  canvas: n,
376
376
  windowSize: t,
377
377
  disableRender: r,
378
378
  rendererOptions: a
379
379
  }) {
380
- const o = M(
381
- () => _(t) ? He() : Fe(_(n).parentElement)
382
- ), f = M(() => o.value.width.value), i = M(() => o.value.height.value), c = M(() => f.value / i.value), s = {
380
+ const o = k(
381
+ () => P(t) ? Fe() : ze(P(n).parentElement)
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,
385
385
  aspectRatio: c
386
386
  }, m = F(e), {
387
387
  camera: l,
388
- cameras: u,
389
- registerCamera: y,
390
- deregisterCamera: g,
391
- setCameraActive: v
392
- } = ze({ sizes: s, scene: e }), { renderer: w } = Ye(
388
+ cameras: s,
389
+ registerCamera: v,
390
+ deregisterCamera: y,
391
+ setCameraActive: d
392
+ } = Ge({ sizes: u, scene: e }), { renderer: w } = Qe(
393
393
  {
394
394
  scene: e,
395
395
  canvas: n,
396
396
  options: a,
397
- contextParts: { sizes: s, camera: l },
397
+ contextParts: { sizes: u, camera: l },
398
398
  disableRender: r
399
399
  }
400
- ), C = {
401
- sizes: s,
400
+ ), E = {
401
+ sizes: u,
402
402
  scene: m,
403
403
  camera: l,
404
- cameras: ue(u),
404
+ cameras: le(s),
405
405
  renderer: w,
406
- raycaster: F(new xe()),
406
+ raycaster: F(new he()),
407
407
  controls: h(null),
408
408
  extend: q,
409
- registerCamera: y,
410
- setCameraActive: v,
411
- deregisterCamera: g
409
+ registerCamera: v,
410
+ setCameraActive: d,
411
+ deregisterCamera: y
412
412
  };
413
- return I("useTres", C), C;
413
+ return I("useTres", E), E;
414
414
  }
415
- function rt() {
416
- const e = le("useTres");
415
+ function nt() {
416
+ const e = ce("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 yt = rt;
421
+ const wt = nt;
422
422
  let G = null, p = null;
423
- const { logError: Z } = B(), nt = {
423
+ const { logError: ee } = B(), at = {
424
424
  createElement(e, n, t, r) {
425
425
  var f, i;
426
- if (r || (r = {}), r.args || (r.args = []), e === "template" || Ve(e))
426
+ if (r || (r = {}), r.args || (r.args = []), e === "template" || qe(e))
427
427
  return null;
428
428
  let a = e.replace("Tres", ""), o;
429
429
  if (e === "primitive") {
430
- (r == null ? void 0 : r.object) === void 0 && Z("Tres primitives need a prop 'object'");
430
+ (r == null ? void 0 : r.object) === void 0 && ee("Tres primitives need a prop 'object'");
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
434
  const c = $.value[a];
435
- c || Z(`${a} is not defined on the THREE namespace. Use extend to add it to the catalog.`), o = new c(...r.args);
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 = {
438
438
  ...o.userData,
@@ -440,7 +440,7 @@ const { logError: Z } = B(), nt = {
440
440
  }, o;
441
441
  },
442
442
  insert(e, n) {
443
- var t, r, a, o, f, i, c, s, m;
443
+ var t, r, a, o, f, i, c, u, m;
444
444
  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)) {
445
445
  G = e;
446
446
  return;
@@ -455,7 +455,7 @@ const { logError: Z } = B(), nt = {
455
455
  if (e != null && e.onClick || e != null && e.onPointerMove || e != null && e.onPointerEnter || e != null && e.onPointerLeave) {
456
456
  if (!(p != null && p.userData.tres__registerAtPointerEventHandler))
457
457
  throw "could not find tres__registerAtPointerEventHandler on scene's userData";
458
- (m = p == null ? void 0 : (s = p.userData).tres__registerAtPointerEventHandler) == null || m.call(s, e);
458
+ (m = p == null ? void 0 : (u = p.userData).tres__registerAtPointerEventHandler) == null || m.call(u, e);
459
459
  }
460
460
  }
461
461
  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));
@@ -464,25 +464,25 @@ const { logError: Z } = B(), nt = {
464
464
  var n, t;
465
465
  if (e) {
466
466
  if (e.isObject3D) {
467
- const r = e, a = (s) => {
468
- var l, u;
469
- const m = s;
470
- s.userData.tres__materialViaProp || (l = m.material) == null || l.dispose(), s.userData.tres__geometryViaProp || (u = m.geometry) == null || u.dispose();
471
- }, o = p == null ? void 0 : p.userData.tres__deregisterAtPointerEventHandler, f = p == null ? void 0 : p.userData.tres__deregisterBlockingObjectAtPointerEventHandler, i = (s) => {
467
+ const r = e, a = (u) => {
468
+ var l, s;
469
+ const m = u;
470
+ u.userData.tres__materialViaProp || (l = m.material) == null || l.dispose(), u.userData.tres__geometryViaProp || (s = m.geometry) == null || s.dispose();
471
+ }, o = p == null ? void 0 : p.userData.tres__deregisterAtPointerEventHandler, f = p == null ? void 0 : p.userData.tres__deregisterBlockingObjectAtPointerEventHandler, i = (u) => {
472
472
  var m, l;
473
473
  if (!f)
474
474
  throw "could not find tres__deregisterBlockingObjectAtPointerEventHandler on scene's userData";
475
- if ((l = p == null ? void 0 : (m = p.userData).tres__deregisterBlockingObjectAtPointerEventHandler) == null || l.call(m, s), !o)
475
+ if ((l = p == null ? void 0 : (m = p.userData).tres__deregisterBlockingObjectAtPointerEventHandler) == null || l.call(m, u), !o)
476
476
  throw "could not find tres__deregisterAtPointerEventHandler on scene's userData";
477
- (s != null && s.onClick || s != null && s.onPointerMove || s != null && s.onPointerEnter || s != null && s.onPointerLeave) && (o == null || o(s));
478
- }, c = (s) => {
477
+ (u != null && u.onClick || u != null && u.onPointerMove || u != null && u.onPointerEnter || u != null && u.onPointerLeave) && (o == null || o(u));
478
+ }, c = (u) => {
479
479
  const m = p == null ? void 0 : p.userData.tres__deregisterCamera;
480
480
  if (!m)
481
481
  throw "could not find tres__deregisterCamera on scene's userData";
482
- s.isCamera && (m == null || m(s));
482
+ u.isCamera && (m == null || m(u));
483
483
  };
484
- r.traverse((s) => {
485
- a(s), c(s), i == null || i(s);
484
+ r.traverse((u) => {
485
+ a(u), c(u), i == null || i(u);
486
486
  }), a(r), c(r), i == null || i(r);
487
487
  }
488
488
  (n = e.removeFromParent) == null || n.call(e), (t = e.dispose) == null || t.call(e);
@@ -491,36 +491,36 @@ const { logError: Z } = B(), nt = {
491
491
  patchProp(e, n, t, r) {
492
492
  var a, o, f, i;
493
493
  if (e) {
494
- let c = e, s = n;
495
- if (e.isObject3D && s === "blocks-pointer-events") {
494
+ let c = e, u = n;
495
+ if (e.isObject3D && u === "blocks-pointer-events") {
496
496
  r || r === "" ? (o = p == null ? void 0 : (a = p.userData).tres__registerBlockingObjectAtPointerEventHandler) == null || o.call(a, e) : (i = p == null ? void 0 : (f = p.userData).tres__deregisterBlockingObjectAtPointerEventHandler) == null || i.call(f, e);
497
497
  return;
498
498
  }
499
- let m = T(s), l = c == null ? void 0 : c[m];
500
- if (s === "args") {
501
- const y = e, g = t ?? [], v = r ?? [], w = e.userData.tres__name || e.type;
502
- w && g.length && !Ke(g, v) && (c = Object.assign(y, new $.value[w](...r)));
499
+ let m = T(u), l = c == null ? void 0 : c[m];
500
+ if (u === "args") {
501
+ const v = e, y = t ?? [], d = r ?? [], w = e.userData.tres__name || e.type;
502
+ w && y.length && !Xe(y, d) && (c = Object.assign(v, new $.value[w](...r)));
503
503
  return;
504
504
  }
505
505
  if (c.type === "BufferGeometry") {
506
- if (s === "args")
506
+ if (u === "args")
507
507
  return;
508
508
  c.setAttribute(
509
- T(s),
510
- new he(...r)
509
+ T(u),
510
+ new Be(...r)
511
511
  );
512
512
  return;
513
513
  }
514
- if (s.includes("-") && l === void 0) {
515
- const y = s.split("-");
516
- l = y.reduce((g, v) => g[T(v)], c), s = y.pop(), m = s.toLowerCase(), l != null && l.set || (c = y.reduce((g, v) => g[T(v)], c));
514
+ if (u.includes("-") && l === void 0) {
515
+ const v = u.split("-");
516
+ l = v.reduce((y, d) => y[T(d)], c), u = v.pop(), m = u.toLowerCase(), l != null && l.set || (c = v.reduce((y, d) => y[T(d)], c));
517
517
  }
518
- let u = r;
519
- if (u === "" && (u = !0), Q(l)) {
520
- Array.isArray(u) ? e[m](...u) : e[m](u);
518
+ let s = r;
519
+ if (s === "" && (s = !0), Z(l)) {
520
+ Array.isArray(s) ? e[m](...s) : e[m](s);
521
521
  return;
522
522
  }
523
- !(l != null && l.set) && !Q(l) ? c[m] = u : l.constructor === u.constructor && (l != null && l.copy) ? l == null || l.copy(u) : Array.isArray(u) ? l.set(...u) : !l.isColor && l.setScalar ? l.setScalar(u) : l.set(u);
523
+ !(l != null && l.set) && !Z(l) ? c[m] = s : l.constructor === s.constructor && (l != null && l.copy) ? l == null || l.copy(s) : Array.isArray(s) ? l.set(...s) : !l.isColor && l.setScalar ? l.setScalar(s) : l.set(s);
524
524
  }
525
525
  },
526
526
  parentNode(e) {
@@ -535,9 +535,9 @@ const { logError: Z } = B(), nt = {
535
535
  setScopeId: () => void 0,
536
536
  cloneNode: () => void 0,
537
537
  insertStaticContent: () => void 0
538
- }, { render: at } = ce(nt);
539
- q(ye);
540
- const ot = ["data-scene"], st = /* @__PURE__ */ U({
538
+ }, { render: ot } = fe(at);
539
+ q(we);
540
+ const st = ["data-scene"], it = /* @__PURE__ */ U({
541
541
  __name: "TresCanvas",
542
542
  props: {
543
543
  shadows: { type: Boolean, default: void 0 },
@@ -564,101 +564,104 @@ const ot = ["data-scene"], st = /* @__PURE__ */ U({
564
564
  failIfMajorPerformanceCaveat: { type: Boolean, default: void 0 }
565
565
  },
566
566
  setup(e) {
567
- const n = e, { logWarning: t } = B(), r = h(), a = F(new Be());
568
- ne();
569
- const o = fe(), f = (s) => U({
567
+ var m;
568
+ const n = e, { logWarning: t } = B(), r = h(), a = F(new Le());
569
+ ae();
570
+ const o = me(), f = (m = J()) == null ? void 0 : m.appContext.app, i = (l) => U({
570
571
  setup() {
571
- return I("useTres", s), I("extend", q), () => J(ge, null, o != null && o.default ? o.default() : []);
572
+ var v;
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() : []);
572
575
  }
573
- }), i = (s) => {
574
- const m = f(s);
575
- at(J(m), a.value);
576
- }, c = M(() => n.disableRender);
577
- return me(() => {
578
- const s = r, m = tt({
576
+ }), c = (l) => {
577
+ const s = i(l);
578
+ ot(K(s), a.value);
579
+ }, u = k(() => n.disableRender);
580
+ return pe(() => {
581
+ const l = r, s = rt({
579
582
  scene: a.value,
580
- canvas: s,
583
+ canvas: l,
581
584
  windowSize: n.windowSize,
582
- disableRender: c,
585
+ disableRender: u,
583
586
  rendererOptions: n
584
587
  });
585
- et({ scene: a.value, contextParts: m });
586
- const { registerCamera: l, camera: u, cameras: y, deregisterCamera: g } = m;
587
- i(m);
588
- const v = () => {
589
- const w = new W(
588
+ tt({ scene: a.value, contextParts: s });
589
+ const { registerCamera: v, camera: y, cameras: d, deregisterCamera: w } = s;
590
+ c(s);
591
+ const E = () => {
592
+ const C = new W(
590
593
  45,
591
594
  window.innerWidth / window.innerHeight,
592
595
  0.1,
593
596
  1e3
594
597
  );
595
- w.position.set(3, 3, 3), w.lookAt(0, 0, 0), l(w);
596
- const C = D(() => {
597
- y.value.length >= 2 && (w.removeFromParent(), g(w), C == null || C());
598
+ C.position.set(3, 3, 3), C.lookAt(0, 0, 0), v(C);
599
+ const _ = D(() => {
600
+ d.value.length >= 2 && (C.removeFromParent(), w(C), _ == null || _());
598
601
  });
599
602
  };
600
- ee(
603
+ te(
601
604
  () => n.camera,
602
- (w, C) => {
603
- w ? l(w) : C && (C.removeFromParent(), g(C));
605
+ (C, _) => {
606
+ C ? v(C) : _ && (_.removeFromParent(), w(_));
604
607
  },
605
608
  {
606
609
  immediate: !0
607
610
  }
608
- ), u.value || (t(
611
+ ), y.value || (t(
609
612
  "No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."
610
- ), v());
611
- }), (s, m) => (pe(), ve("canvas", {
613
+ ), E());
614
+ }), (l, s) => (ve(), de("canvas", {
612
615
  ref_key: "canvas",
613
616
  ref: r,
614
617
  "data-scene": a.value.uuid,
615
- style: de({
618
+ style: ge({
616
619
  display: "block",
617
620
  width: "100%",
618
621
  height: "100%",
619
- position: s.windowSize ? "fixed" : "relative",
622
+ position: l.windowSize ? "fixed" : "relative",
620
623
  top: 0,
621
624
  left: 0,
622
625
  pointerEvents: "auto",
623
626
  touchAction: "none"
624
627
  })
625
- }, null, 12, ot));
628
+ }, null, 12, st));
626
629
  }
627
- }), it = [
630
+ }), ut = [
628
631
  "TresCanvas",
629
632
  "TresLeches",
630
633
  "TresScene"
631
- ], ut = {
634
+ ], lt = {
632
635
  template: {
633
636
  compilerOptions: {
634
- isCustomElement: (e) => e.startsWith("Tres") && !it.includes(e) || e === "primitive"
637
+ isCustomElement: (e) => e.startsWith("Tres") && !ut.includes(e) || e === "primitive"
635
638
  }
636
639
  }
637
- }, wt = ut, Ct = {
640
+ }, Ct = lt, _t = {
638
641
  install(e) {
639
- e.component("TresCanvas", st);
642
+ e.component("TresCanvas", it);
640
643
  }
641
644
  };
642
645
  export {
643
- st as TresCanvas,
646
+ it as TresCanvas,
644
647
  $ as catalogue,
645
- Ct as default,
648
+ _t as default,
646
649
  q as extend,
647
- mt as isProd,
648
- $e as normalizeColor,
649
- pt as normalizeVectorFlexibleParam,
650
- wt as templateCompilerOptions,
651
- Qe as trasverseObjects,
652
- ze as useCamera,
653
- vt as useLoader,
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
+ dt as useLoader,
654
657
  B as useLogger,
655
- et as usePointerEventHandler,
656
- Ze as useRaycaster,
657
- ne as useRenderLoop,
658
- Ye as useRenderer,
659
- gt as useSeek,
660
- dt as useTexture,
661
- yt as useTres,
662
- rt as useTresContext,
663
- tt as useTresContextProvider
658
+ tt as usePointerEventHandler,
659
+ et as useRaycaster,
660
+ ae as useRenderLoop,
661
+ Qe as useRenderer,
662
+ yt as useSeek,
663
+ gt as useTexture,
664
+ wt as useTres,
665
+ nt as useTresContext,
666
+ rt as useTresContextProvider
664
667
  };
package/dist/tres.umd.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v3.2.0
3
+ * version: v3.2.1-next.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(v,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):(v=typeof globalThis<"u"?globalThis:v||self,u(v.tres={},v.Vue,v.Three,v.VueUseCore))})(this,function(v,u,M,y){"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(M),W=({sizes:e,scene:n})=>{const t=u.ref([]),r=u.computed(()=>t.value[0]),a=(i,f=!1)=>{t.value.some(({uuid:s})=>s===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 M.Camera?i:t.value.find(d=>d.uuid===i);if(!f)return;const s=t.value.filter(({uuid:d})=>d!==f.uuid);t.value=[f,...s]};return u.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(i=>{i instanceof M.PerspectiveCamera&&(i.aspect=e.aspectRatio.value),(i instanceof M.PerspectiveCamera||i instanceof M.OrthographicCamera)&&i.updateProjectionMatrix()})}),n.userData.tres__registerCamera=a,n.userData.tres__deregisterCamera=o,u.onUnmounted(()=>{t.value=[]}),{camera:r,cameras:t,registerCamera:a,deregisterCamera:o,setCameraActive:m}},I=y.createEventHook(),N=y.createEventHook(),F=y.createEventHook(),S=new M.Clock;let B=0,x=0;const{pause:le,resume:ue,isActive:ce}=y.useRafFn(()=>{I.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:I.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 M.Vector3?[e.x,e.y,e.z]:e}function q(e){return e instanceof M.Color?e:Array.isArray(e)?new M.Color(...e):new M.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(M.REVISION.replace("dev","")),T={realistic:{outputColorSpace:M.SRGBColorSpace,toneMapping:M.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:M.PCFSoftShadowMap}}};function X({scene:e,canvas:n,options:t,disableRender:r,contextParts:{sizes:a,camera:o}}){const m=u.computed(()=>({alpha:y.toValue(t.alpha),depth:y.toValue(t.depth),canvas:y.unrefElement(n),context:y.toValue(t.context),stencil:y.toValue(t.stencil),antialias:y.toValue(t.antialias)===void 0?!0:y.toValue(t.antialias),precision:y.toValue(t.precision),powerPreference:y.toValue(t.powerPreference),premultipliedAlpha:y.toValue(t.premultipliedAlpha),preserveDrawingBuffer:y.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:y.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:y.toValue(t.failIfMajorPerformanceCaveat)})),i=u.shallowRef(new M.WebGLRenderer(m.value));u.watch(m,()=>{i.value.dispose(),i.value=new M.WebGLRenderer(m.value)}),u.watchEffect(()=>{i.value.setSize(a.width.value,a.height.value)});const{pixelRatio:f}=y.useDevicePixelRatio();u.watchEffect(()=>{i.value.setPixelRatio(f.value)});const{logError:s}=L(),c=(()=>{const g=new M.WebGLRenderer,_={shadowMap:{enabled:g.shadowMap.enabled,type:g.shadowMap.type},toneMapping:g.toneMapping,toneMappingExposure:g.toneMappingExposure,outputColorSpace:g.outputColorSpace};return g.dispose(),_})();u.watchEffect(()=>{const g=y.toValue(t.preset);g&&(g in T||s(`Renderer Preset must be one of these: ${Object.keys(T).join(", ")}`),U(i.value,T[g]));const _=(O,h)=>{const D=y.toValue(O),z=()=>{if(g)return J(T[g],h)};if(D!==void 0)return D;const w=z();return w!==void 0?w:J(c,h)},b=(O,h)=>ve(i.value,h,_(O,h));b(t.shadows,"shadowMap.enabled"),b(t.toneMapping,"toneMapping"),b(t.shadowMapType,"shadowMap.type"),we<150&&b(!t.useLegacyLights,"physicallyCorrectLights"),b(t.outputColorSpace,"outputColorSpace"),b(t.toneMappingExposure,"toneMappingExposure");const A=_(t.clearColor,"clearColor");A&&i.value.setClearColor(A?q(A):new M.Color(0))});const{pause:l,resume:P,onLoop:C}=G();return C(()=>{o.value&&!y.toValue(r)&&i.value.render(e,o.value)}),P(),u.onUnmounted(()=>{l(),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(s=>new Promise((d,c)=>{m.load(s,l=>{l.scene&&Object.assign(l,Z(l.scene)),d(l)},r,l=>c(o("[useLoader] - Failed to load resource",l)))}));return Q(n)?await Promise.all(f):await f[0]}async function Pe(e){const n=new M.LoadingManager,t=new M.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:s,alphaMap:d,matcap:c}=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:s?await r(s):null,alphaMap:d?await r(d):null,matcap:c?await r(c):null}}}const ee=(e,{renderer:n,camera:t,raycaster:r})=>{const a=u.computed(()=>n.value.domElement),{x:o,y:m}=y.usePointer({target:a}),{width:i,height:f,top:s,left:d}=y.useElementBounding(a),c=({x:w,y:k})=>{if(a.value)return{x:(w-d.value)/i.value*2-1,y:-((k-s.value)/f.value)*2+1}},l=({x:w,y:k})=>{if(t.value)return r.value.setFromCamera(new M.Vector2(w,k),t.value),r.value.intersectObjects(e.value,!1)},P=w=>{const k=c({x:(w==null?void 0:w.clientX)??o.value,y:(w==null?void 0:w.clientY)??m.value});return k?l(k)||[]:[]},C=u.computed(()=>P()),g=y.createEventHook(),_=y.createEventHook(),b=(w,k)=>{w.trigger({event:k,intersects:P(k)})},A=w=>{b(_,w)};let O;const h=w=>{var k;O=(k=P(w)[0])==null?void 0:k.object},D=w=>{var k;w instanceof PointerEvent&&O===((k=P(w)[0])==null?void 0:k.object)&&b(g,w)},z=w=>_.trigger({event:w,intersects:[]});return a.value.addEventListener("pointerup",D),a.value.addEventListener("pointerdown",h),a.value.addEventListener("pointermove",A),a.value.addEventListener("pointerleave",z),u.onUnmounted(()=>{a!=null&&a.value&&(a.value.removeEventListener("pointerup",D),a.value.removeEventListener("pointerdown",h),a.value.removeEventListener("pointermove",A),a.value.removeEventListener("pointerleave",z))}),{intersects:C,onClick:w=>g.on(w).off,onPointerMove:w=>_.on(w).off}};function _e(){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=u.reactive({click:new Map,pointerMove:new Map,pointerEnter:new Map,pointerLeave:new Map}),r=u.ref(new Set),a=l=>{r.value.add(l)},o=l=>{r.value.delete(l)},m=l=>{Object.values(t).forEach(P=>P.delete(l)),o(l)},i=l=>{const{onClick:P,onPointerMove:C,onPointerEnter:g,onPointerLeave:_}=l;P&&t.click.set(l,P),C&&t.pointerMove.set(l,C),g&&t.pointerEnter.set(l,g),_&&t.pointerLeave.set(l,_)};e.userData.tres__registerAtPointerEventHandler=i,e.userData.tres__deregisterAtPointerEventHandler=m,e.userData.tres__registerBlockingObjectAtPointerEventHandler=a,e.userData.tres__deregisterBlockingObjectAtPointerEventHandler=o;const f=u.computed(()=>ge([...Array.from(r.value),...Object.values(t).map(l=>Array.from(l.keys())).flat()],({uuid:l})=>l)),{onClick:s,onPointerMove:d}=ee(f,n);s(({intersects:l,event:P})=>{var C;l.length&&((C=t.click.get(l[0].object))==null||C(l[0],P))});let c;return d(({intersects:l,event:P})=>{var A,O,h,D;const C=(A=l==null?void 0:l[0])==null?void 0:A.object,{pointerLeave:g,pointerEnter:_,pointerMove:b}=t;c&&c!==C&&((O=g.get(c))==null||O(c,P)),C&&(c!==C&&((h=_.get(C))==null||h(l[0],P)),(D=b.get(C))==null||D(l[0],P)),c=C||null}),{registerObject:i,deregisterObject:m}},E=u.ref({}),V=e=>Object.assign(E.value,e);function re({scene:e,canvas:n,windowSize:t,disableRender:r,rendererOptions:a}){const o=u.computed(()=>y.toValue(t)?y.useWindowSize():y.useElementSize(y.toValue(n).parentElement)),m=u.computed(()=>o.value.width.value),i=u.computed(()=>o.value.height.value),f=u.computed(()=>m.value/i.value),s={height:i,width:m,aspectRatio:f},d=u.shallowRef(e),{camera:c,cameras:l,registerCamera:P,deregisterCamera:C,setCameraActive:g}=W({sizes:s,scene:e}),{renderer:_}=X({scene:e,canvas:n,options:a,contextParts:{sizes:s,camera:c},disableRender:r}),b={sizes:s,scene:d,camera:c,cameras:u.readonly(l),renderer:_,raycaster:u.shallowRef(new M.Raycaster),controls:u.ref(null),extend:V,registerCamera:P,setCameraActive:g,deregisterCamera:C};return u.provide("useTres",b),b}function ne(){const e=u.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,s,d;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(m=e==null?void 0:e.__vnode)!=null&&m.type.includes("Controls")&&n===null&&(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";(f=p==null?void 0:(i=p.userData).tres__registerCamera)==null||f.call(i,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";(d=p==null?void 0:(s=p.userData).tres__registerAtPointerEventHandler)==null||d.call(s,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=s=>{var c,l;const d=s;s.userData.tres__materialViaProp||(c=d.material)==null||c.dispose(),s.userData.tres__geometryViaProp||(l=d.geometry)==null||l.dispose()},o=p==null?void 0:p.userData.tres__deregisterAtPointerEventHandler,m=p==null?void 0:p.userData.tres__deregisterBlockingObjectAtPointerEventHandler,i=s=>{var d,c;if(!m)throw"could not find tres__deregisterBlockingObjectAtPointerEventHandler on scene's userData";if((c=p==null?void 0:(d=p.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||c.call(d,s),!o)throw"could not find tres__deregisterAtPointerEventHandler on scene's userData";(s!=null&&s.onClick||s!=null&&s.onPointerMove||s!=null&&s.onPointerEnter||s!=null&&s.onPointerLeave)&&(o==null||o(s))},f=s=>{const d=p==null?void 0:p.userData.tres__deregisterCamera;if(!d)throw"could not find tres__deregisterCamera on scene's userData";s.isCamera&&(d==null||d(s))};r.traverse(s=>{a(s),f(s),i==null||i(s)}),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,s=n;if(e.isObject3D&&s==="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(s),c=f==null?void 0:f[d];if(s==="args"){const P=e,C=t??[],g=r??[],_=e.userData.tres__name||e.type;_&&C.length&&!ye(C,g)&&(f=Object.assign(P,new E.value[_](...r)));return}if(f.type==="BufferGeometry"){if(s==="args")return;f.setAttribute(j(s),new M.BufferAttribute(...r));return}if(s.includes("-")&&c===void 0){const P=s.split("-");c=P.reduce((C,g)=>C[j(g)],f),s=P.pop(),d=s.toLowerCase(),c!=null&&c.set||(f=P.reduce((C,g)=>C[j(g)],f))}let l=r;if(l===""&&(l=!0),Y(c)){Array.isArray(l)?e[d](...l):e[d](l);return}!(c!=null&&c.set)&&!Y(c)?f[d]=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)}},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}=u.createRenderer(be);V(ie);const he=["data-scene"],oe=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){const n=e,{logWarning:t}=L(),r=u.ref(),a=u.shallowRef(new M.Scene);G();const o=u.useSlots(),m=s=>u.defineComponent({setup(){return u.provide("useTres",s),u.provide("extend",V),()=>u.h(u.Fragment,null,o!=null&&o.default?o.default():[])}}),i=s=>{const d=m(s);ke(u.h(d),a.value)},f=u.computed(()=>n.disableRender);return u.onMounted(()=>{const s=r,d=re({scene:a.value,canvas:s,windowSize:n.windowSize,disableRender:f,rendererOptions:n});te({scene:a.value,contextParts:d});const{registerCamera:c,camera:l,cameras:P,deregisterCamera:C}=d;i(d);const g=()=>{const _=new M.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);_.position.set(3,3,3),_.lookAt(0,0,0),c(_);const b=u.watchEffect(()=>{P.value.length>=2&&(_.removeFromParent(),C(_),b==null||b())})};u.watch(()=>n.camera,(_,b)=>{_?c(_):b&&(b.removeFromParent(),C(b))},{immediate:!0}),l.value||(t("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),g())}),(s,d)=>(u.openBlock(),u.createElementBlock("canvas",{ref_key:"canvas",ref:r,"data-scene":a.value.uuid,style:u.normalizeStyle({display:"block",width:"100%",height:"100%",position:s.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none"})},null,12,he))}}),Ae=["TresCanvas","TresLeches","TresScene"],Oe={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!Ae.includes(e)||e==="primitive"}}},De={install(e){e.component("TresCanvas",oe)}};v.TresCanvas=oe,v.catalogue=E,v.default=De,v.extend=V,v.isProd=fe,v.normalizeColor=q,v.normalizeVectorFlexibleParam=me,v.templateCompilerOptions=Oe,v.trasverseObjects=Z,v.useCamera=W,v.useLoader=Ce,v.useLogger=L,v.usePointerEventHandler=te,v.useRaycaster=ee,v.useRenderLoop=G,v.useRenderer=X,v.useSeek=_e,v.useTexture=Pe,v.useTres=Me,v.useTresContext=ne,v.useTresContextProvider=re,Object.defineProperties(v,{__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,_,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(_),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 _.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 _.PerspectiveCamera&&(i.aspect=e.aspectRatio.value),(i instanceof _.PerspectiveCamera||i instanceof _.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 _.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 _.Vector3?[e.x,e.y,e.z]:e}function q(e){return e instanceof _.Color?e:Array.isArray(e)?new _.Color(...e):new _.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(_.REVISION.replace("dev","")),T={realistic:{outputColorSpace:_.SRGBColorSpace,toneMapping:_.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:_.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 _.WebGLRenderer(m.value));c.watch(m,()=>{i.value.dispose(),i.value=new _.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 _.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,O)=>{const D=w.toValue(k),z=()=>{if(v)return J(T[v],O)};if(D!==void 0)return D;const C=z();return C!==void 0?C:J(u,O)},h=(k,O)=>ve(i.value,O,M(k,O));h(t.shadows,"shadowMap.enabled"),h(t.toneMapping,"toneMapping"),h(t.shadowMapType,"shadowMap.type"),we<150&&h(!t.useLegacyLights,"physicallyCorrectLights"),h(t.outputColorSpace,"outputColorSpace"),h(t.toneMappingExposure,"toneMappingExposure");const b=M(t.clearColor,"clearColor");b&&i.value.setClearColor(b?q(b):new _.Color(0))});const{pause:s,resume:g,onLoop:P}=G();return P(()=>{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 Pe(e){const n=new _.LoadingManager,t=new _.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:A})=>{if(a.value)return{x:(C-d.value)/i.value*2-1,y:-((A-l.value)/f.value)*2+1}},s=({x:C,y:A})=>{if(t.value)return r.value.setFromCamera(new _.Vector2(C,A),t.value),r.value.intersectObjects(e.value,!1)},g=C=>{const A=u({x:(C==null?void 0:C.clientX)??o.value,y:(C==null?void 0:C.clientY)??m.value});return A?s(A)||[]:[]},P=c.computed(()=>g()),v=w.createEventHook(),M=w.createEventHook(),h=(C,A)=>{C.trigger({event:A,intersects:g(A)})},b=C=>{h(M,C)};let k;const O=C=>{var A;k=(A=g(C)[0])==null?void 0:A.object},D=C=>{var A;C instanceof PointerEvent&&k===((A=g(C)[0])==null?void 0:A.object)&&h(v,C)},z=C=>M.trigger({event:C,intersects:[]});return a.value.addEventListener("pointerup",D),a.value.addEventListener("pointerdown",O),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",O),a.value.removeEventListener("pointermove",b),a.value.removeEventListener("pointerleave",z))}),{intersects:P,onClick:C=>v.on(C).off,onPointerMove:C=>M.on(C).off}};function _e(){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:P,onPointerEnter:v,onPointerLeave:M}=s;g&&t.click.set(s,g),P&&t.pointerMove.set(s,P),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 P;s.length&&((P=t.click.get(s[0].object))==null||P(s[0],g))});let u;return d(({intersects:s,event:g})=>{var b,k,O,D;const P=(b=s==null?void 0:s[0])==null?void 0:b.object,{pointerLeave:v,pointerEnter:M,pointerMove:h}=t;u&&u!==P&&((k=v.get(u))==null||k(u,g)),P&&(u!==P&&((O=M.get(P))==null||O(s[0],g)),(D=h.get(P))==null||D(s[0],g)),u=P||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:P,setCameraActive:v}=I({sizes:l,scene:e}),{renderer:M}=X({scene:e,canvas:n,options:a,contextParts:{sizes:l,camera:u},disableRender:r}),h={sizes:l,scene:d,camera:u,cameras:c.readonly(s),renderer:M,raycaster:c.shallowRef(new _.Raycaster),controls:c.ref(null),extend:V,registerCamera:g,setCameraActive:v,deregisterCamera:P};return c.provide("useTres",h),h}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;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(m=e==null?void 0:e.__vnode)!=null&&m.type.includes("Controls")&&n===null&&(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";(f=p==null?void 0:(i=p.userData).tres__registerCamera)==null||f.call(i,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";(d=p==null?void 0:(l=p.userData).tres__registerAtPointerEventHandler)==null||d.call(l,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,P=t??[],v=r??[],M=e.userData.tres__name||e.type;M&&P.length&&!ye(P,v)&&(f=Object.assign(g,new E.value[M](...r)));return}if(f.type==="BufferGeometry"){if(l==="args")return;f.setAttribute(j(l),new _.BufferAttribute(...r));return}if(l.includes("-")&&u===void 0){const g=l.split("-");u=g.reduce((P,v)=>P[j(v)],f),l=g.pop(),d=l.toLowerCase(),u!=null&&u.set||(f=g.reduce((P,v)=>P[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 he=["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 _.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:P,cameras:v,deregisterCamera:M}=s;f(s);const h=()=>{const b=new _.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}),P.value||(t("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),h())}),(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,he))}}),Ae=["TresCanvas","TresLeches","TresScene"],Oe={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!Ae.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=Oe,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=_e,y.useTexture=Pe,y.useTres=Me,y.useTresContext=ne,y.useTresContextProvider=re,Object.defineProperties(y,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tresjs/core",
3
3
  "type": "module",
4
- "version": "3.2.0",
4
+ "version": "3.2.1-next.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/)",