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