@tresjs/core 3.1.0-next.0 → 3.1.0-next.1

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