@tresjs/core 1.3.3 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/tres.js CHANGED
@@ -1,31 +1,31 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v1.3.3
3
+ * version: v1.4.0
4
4
  * (c) 2022
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 V, watch as O, inject as P, ref as T, defineComponent as N, shallowRef as k, reactive as Ce, toRefs as te, provide as b, onBeforeUnmount as Se, h as q } from "vue";
9
- import { useWindowSize as ne, createEventHook as W, useRafFn as Me, resolveUnref as m, useElementSize as xe, useDevicePixelRatio as Ee, unrefElement as F } from "@vueuse/core";
10
- import * as Q from "three";
11
- import { PerspectiveCamera as A, OrthographicCamera as re, Vector3 as Pe, Color as z, Clock as Te, Scene as Re, LoadingManager as Le, TextureLoader as Oe, PCFShadowMap as be, LinearEncoding as X, NoToneMapping as Y, WebGLRenderer as Ae } from "three";
8
+ import { computed as N, watch as O, inject as L, ref as b, defineComponent as k, shallowRef as W, reactive as Ce, toRefs as ne, provide as B, onBeforeUnmount as Se, h as Q } from "vue";
9
+ import { useWindowSize as re, createEventHook as G, useRafFn as Me, resolveUnref as p, useElementSize as xe, useDevicePixelRatio as Ee, unrefElement as U } from "@vueuse/core";
10
+ import * as X from "three";
11
+ import { PerspectiveCamera as $, OrthographicCamera as ae, Vector3 as Pe, Color as j, BufferAttribute as Te, Clock as Re, Scene as Le, LoadingManager as be, TextureLoader as Ae, PCFShadowMap as Oe, LinearEncoding as Y, NoToneMapping as Z, WebGLRenderer as Be } from "three";
12
12
  var $e = /* @__PURE__ */ ((e) => (e.Perspective = "Perspective", e.Orthographic = "Orthographic", e))($e || {});
13
- const M = {
13
+ const E = {
14
14
  cameras: []
15
- }, Be = 45;
16
- let C;
17
- function ae() {
18
- const { width: e, height: t } = ne(), { setState: n } = pe();
19
- function s(r = "Perspective", u) {
20
- if (r === "Perspective") {
21
- const { near: o, far: c, fov: p } = u || {
15
+ }, Ie = 45;
16
+ let S;
17
+ function oe() {
18
+ const { width: e, height: n } = re(), { setState: r } = me();
19
+ function c(t = "Perspective", s) {
20
+ if (t === "Perspective") {
21
+ const { near: u, far: a, fov: o } = s || {
22
22
  near: 0.1,
23
23
  far: 1e3,
24
- fov: Be
24
+ fov: Ie
25
25
  };
26
- C = new A(p, i.value, o, c), M.cameras.push(C);
26
+ S = new $(o, i.value, u, a), E.cameras.push(S);
27
27
  } else {
28
- const { left: o, right: c, top: p, bottom: d, near: w, far: y } = u || {
28
+ const { left: u, right: a, top: o, bottom: h, near: m, far: w } = s || {
29
29
  left: -100,
30
30
  right: 100,
31
31
  top: 100,
@@ -33,300 +33,306 @@ function ae() {
33
33
  near: 0.1,
34
34
  far: 1e3
35
35
  };
36
- C = new re(o, c, p, d, w, y), M.cameras.push(C);
36
+ S = new ae(u, a, o, h, m, w), E.cameras.push(S);
37
37
  }
38
- return M.cameras.push(C), C;
38
+ return E.cameras.push(S), S;
39
39
  }
40
- const i = V(() => e.value / t.value), l = V(() => M.cameras[0]);
40
+ const i = N(() => e.value / n.value), l = N(() => E.cameras[0]);
41
41
  function f() {
42
- l.value instanceof A && (l.value.aspect = i.value), l.value.updateProjectionMatrix();
42
+ l.value instanceof $ && (l.value.aspect = i.value), l.value.updateProjectionMatrix();
43
43
  }
44
- function a(r) {
45
- const u = P("camera");
46
- r && u && (u.value = r, n("camera", u.value)), M.cameras.push(r), r instanceof A && (r.aspect = i.value), r.updateProjectionMatrix();
44
+ function g(t) {
45
+ const s = L("camera");
46
+ t && s && (s.value = t, r("camera", s.value)), E.cameras.push(t), t instanceof $ && (t.aspect = i.value), t.updateProjectionMatrix();
47
47
  }
48
48
  return O(i, f), {
49
49
  activeCamera: l,
50
- createCamera: s,
50
+ createCamera: c,
51
51
  updateCamera: f,
52
- pushCamera: a
52
+ pushCamera: g
53
53
  };
54
54
  }
55
- const Z = "[TresJS ▲ ■ ●] ";
56
- function B() {
57
- function e(s, i) {
58
- console.error(`${Z} ${s}`, i || "");
55
+ const ee = "[TresJS ▲ ■ ●] ";
56
+ function _() {
57
+ function e(c, i) {
58
+ console.error(`${ee} ${c}`, i || "");
59
59
  }
60
- function t(s) {
61
- console.warn(`${Z} ${s}`);
60
+ function n(c) {
61
+ console.warn(`${ee} ${c}`);
62
62
  }
63
- function n(s, i) {
63
+ function r(c, i) {
64
64
  }
65
65
  return {
66
66
  logError: e,
67
- logWarning: t,
68
- logMessage: n
67
+ logWarning: n,
68
+ logMessage: r
69
69
  };
70
70
  }
71
- const E = T({ ...Q, uuid: Q.MathUtils.generateUUID() });
72
- delete E.value.Scene;
73
- let x;
74
- function oe(e, t = "Tres") {
75
- const { logMessage: n, logError: s } = B();
76
- !x && e && (x = e);
77
- const { createComponentInstances: i } = se(t);
71
+ const R = b({ ...X, uuid: X.MathUtils.generateUUID() });
72
+ delete R.value.Scene;
73
+ let P;
74
+ function se(e, n = "Tres") {
75
+ const { logMessage: r, logError: c } = _();
76
+ !P && e && (P = e);
77
+ const { createComponentInstances: i } = ie(n);
78
78
  return {
79
79
  extend: (f) => {
80
80
  if (!f) {
81
- s("No objects provided to extend catalogue");
81
+ c("No objects provided to extend catalogue");
82
82
  return;
83
83
  }
84
- E.value = Object.assign(E.value, f);
85
- const a = i(T(f));
86
- n("Adding objects to catalogue", { objects: f, catalogue: E.value.uuid }), x && a.forEach(([r, u]) => {
87
- x._context.components[r] || x.component(r, u);
84
+ R.value = Object.assign(R.value, f);
85
+ const g = i(b(f));
86
+ r("Adding objects to catalogue", { objects: f, catalogue: R.value.uuid }), P && g.forEach(([t, s]) => {
87
+ P._context.components[t] || P.component(t, s);
88
88
  });
89
89
  },
90
- catalogue: E
90
+ catalogue: R
91
91
  };
92
92
  }
93
- const U = (e) => typeof e < "u", Ie = (e) => typeof e == "function", $ = (e) => !!e && e.constructor === Array;
94
- function _e(e) {
93
+ const T = (e) => typeof e < "u", _e = (e) => typeof e == "function", I = (e) => !!e && e.constructor === Array;
94
+ function De(e) {
95
95
  return typeof e == "number" ? [e, e, e] : e instanceof Pe ? [e.x, e.y, e.z] : e;
96
96
  }
97
- function De(e) {
98
- return e instanceof z ? e : Array.isArray(e) ? new z(...e) : new z(e);
97
+ function Fe(e) {
98
+ return e instanceof j ? e : Array.isArray(e) ? new j(...e) : new j(e);
99
99
  }
100
- const Fe = ["rotation", "scale", "position"];
101
- function se(e) {
102
- const { logMessage: t, logError: n } = B();
103
- function s(a, r) {
104
- U(a) && U(r) && Object.entries(a).forEach(([u, o]) => {
105
- const c = u.replace(/(-\w)/g, (p) => p[1].toUpperCase());
106
- if (!(c === "args" || o === void 0)) {
107
- Fe.includes(c) && o && (o = _e(o)), a.ref && (a.ref = r);
100
+ const ze = ["rotation", "scale", "position"];
101
+ function ie(e) {
102
+ const { logMessage: n, logError: r } = _();
103
+ function c(t, s) {
104
+ T(t) && T(s) && Object.entries(t).forEach(([u, a]) => {
105
+ const o = u.replace(/(-\w)/g, (h) => h[1].toUpperCase());
106
+ s.setAttribute(o, new Te(...a));
107
+ });
108
+ }
109
+ function i(t, s) {
110
+ T(t) && T(s) && Object.entries(t).forEach(([u, a]) => {
111
+ const o = u.replace(/(-\w)/g, (h) => h[1].toUpperCase());
112
+ if (!(o === "args" || a === void 0)) {
113
+ ze.includes(o) && a && (a = De(a)), t.ref && (t.ref = s);
108
114
  try {
109
- if (r[c] && U(r[c].set))
110
- r[c].set(...$(o) ? o : [o]);
115
+ if (s[o] && T(s[o].set))
116
+ s[o].set(...I(a) ? a : [a]);
111
117
  else {
112
- if (o === "" && (o = !0), Ie(r[c])) {
113
- if (u === "center" && !o)
118
+ if (a === "" && (a = !0), _e(s[o])) {
119
+ if (u === "center" && !a)
114
120
  return;
115
- r[c](...$(o) ? o : [o]);
121
+ s[o](...I(a) ? a : [a]);
116
122
  return;
117
123
  }
118
- r[c] = o;
124
+ s[o] = a;
119
125
  }
120
- } catch (p) {
121
- n(`There was an error setting ${c} property`, p);
126
+ } catch (h) {
127
+ r(`There was an error setting ${o} property`, h);
122
128
  }
123
129
  }
124
130
  });
125
131
  }
126
- function i(a) {
127
- var o;
128
- const r = /^Symbol\(Fragment\)$/g, u = /^Symbol\(Text\)$/g;
129
- if (r.test(a.type.toString()))
130
- return a.children.map((c) => i(c));
131
- if (u.test(a.type.toString()))
132
+ function l(t) {
133
+ var a;
134
+ const s = /^Symbol\(Fragment\)$/g, u = /^Symbol\(Text\)$/g;
135
+ if (s.test(t.type.toString()))
136
+ return t.children.map((o) => l(o));
137
+ if (u.test(t.type.toString()))
132
138
  return;
133
139
  {
134
- const c = a.type.name.replace(e, ""), { catalogue: p } = oe(), d = P("catalogue") || p;
140
+ const o = t.type.name.replace(e, ""), { catalogue: h } = se(), m = L("catalogue") || h;
135
141
  let w;
136
- return d && ((o = a == null ? void 0 : a.props) != null && o.args ? d != null && d.value[c] ? w = new d.value[c](...a.props.args) : n(`There is no ${c} in the catalogue`, d == null ? void 0 : d.value.uuid) : w = new d.value[c]()), a != null && a.props && s(a.props, w), w;
142
+ return m && ((a = t == null ? void 0 : t.props) != null && a.args ? m != null && m.value[o] ? w = new m.value[o](...t.props.args) : r(`There is no ${o} in the catalogue`, m == null ? void 0 : m.value.uuid) : w = new m.value[o]()), t != null && t.props && (o === "BufferGeometry" ? c(t.props, w) : i(t.props, w)), w;
137
143
  }
138
144
  }
139
- function l(a, r, u) {
145
+ function f(t, s, u) {
140
146
  if (u.default && (u != null && u.default())) {
141
- const o = u.default().map((c) => i(c));
142
- return new a(...o.flat().filter(Boolean));
147
+ const a = u.default().map((o) => l(o));
148
+ return new t(...a.flat().filter(Boolean));
143
149
  } else
144
- return r.args ? new a(...r.args) : new a();
150
+ return s.args ? new t(...s.args) : new t();
145
151
  }
146
- function f(a) {
147
- return Object.entries(a.value).filter(([r, u]) => {
148
- var o, c;
149
- return (c = (o = u == null ? void 0 : u.prototype) == null ? void 0 : o.constructor) == null ? void 0 : c.toString().includes("class");
150
- }).map(([r, u]) => {
151
- const o = `${e}${r}`, c = N({
152
- name: o,
153
- setup(p, { slots: d, attrs: w, ...y }) {
154
- const { scene: R } = fe(), v = P("local-scene") || R, S = P("catalogue"), { pushCamera: I } = ae();
155
- let h = l(u, w, d);
156
- return s(w, h), (h instanceof A || h instanceof re) && I(h), h.isObject3D && (v == null || v.value.add(h)), v != null && v.value && h.isFog && (v.value.fog = h), y.expose(h), t(o, {
152
+ function g(t) {
153
+ return Object.entries(t.value).filter(([s, u]) => {
154
+ var a, o;
155
+ return (o = (a = u == null ? void 0 : u.prototype) == null ? void 0 : a.constructor) == null ? void 0 : o.toString().includes("class");
156
+ }).map(([s, u]) => {
157
+ const a = `${e}${s}`, o = k({
158
+ name: a,
159
+ setup(h, { slots: m, attrs: w, ...M }) {
160
+ const { scene: D } = pe(), v = L("local-scene") || D, x = L("catalogue"), { pushCamera: C } = oe();
161
+ let y = f(u, w, m);
162
+ return i(w, y), (y instanceof $ || y instanceof ae) && C(y), y.isObject3D && (v == null || v.value.add(y)), v != null && v.value && y.isFog && (v.value.fog = y), M.expose(y), n(a, {
157
163
  sceneuuid: v == null ? void 0 : v.value.uuid,
158
- catalogue: S == null ? void 0 : S.value.uuid,
159
- props: p,
160
- slots: d.default ? d.default() : void 0,
164
+ catalogue: x == null ? void 0 : x.value.uuid,
165
+ props: h,
166
+ slots: m.default ? m.default() : void 0,
161
167
  attrs: w,
162
- ctx: y,
168
+ ctx: M,
163
169
  scene: v
164
170
  }), () => {
165
171
  };
166
172
  }
167
173
  });
168
- return [o, c];
174
+ return [a, o];
169
175
  });
170
176
  }
171
177
  return {
172
- createComponentInstances: f,
173
- processProps: s,
174
- createInstanceFromVNode: i
178
+ createComponentInstances: g,
179
+ processProps: i,
180
+ createInstanceFromVNode: l
175
181
  };
176
182
  }
177
- const ie = W(), ce = W(), ue = W(), ee = new Te(), { pause: ze, resume: Ue, isActive: je } = Me(
183
+ const ce = G(), ue = G(), le = G(), te = new Re(), { pause: Ue, resume: je, isActive: Ve } = Me(
178
184
  () => {
179
- const e = ee.getElapsedTime(), t = ee.getDelta();
180
- ie.trigger({ delta: t, elapsed: e }), ce.trigger({ delta: t, elapsed: e }), ue.trigger({ delta: t, elapsed: e });
185
+ const e = te.getElapsedTime(), n = te.getDelta();
186
+ ce.trigger({ delta: n, elapsed: e }), ue.trigger({ delta: n, elapsed: e }), le.trigger({ delta: n, elapsed: e });
181
187
  },
182
188
  { immediate: !1 }
183
189
  );
184
- function le() {
190
+ function fe() {
185
191
  return {
186
- onBeforeLoop: ie.on,
187
- onLoop: ce.on,
188
- onAfterLoop: ue.on,
189
- pause: ze,
190
- resume: Ue,
191
- isActive: je
192
+ onBeforeLoop: ce.on,
193
+ onLoop: ue.on,
194
+ onAfterLoop: le.on,
195
+ pause: Ue,
196
+ resume: je,
197
+ isActive: Ve
192
198
  };
193
199
  }
194
- const Ve = k(new Re());
195
- function fe() {
200
+ const Ne = W(new Le());
201
+ function pe() {
196
202
  return {
197
- scene: Ve
203
+ scene: Ne
198
204
  };
199
205
  }
200
- function Ne(e) {
201
- const t = { nodes: {}, materials: {} };
202
- return e && e.traverse((n) => {
203
- n.name && (t.nodes[n.name] = n), n.material && !t.materials[n.material.name] && (t.materials[n.material.name] = n.material);
204
- }), t;
206
+ function ke(e) {
207
+ const n = { nodes: {}, materials: {} };
208
+ return e && e.traverse((r) => {
209
+ r.name && (n.nodes[r.name] = r), r.material && !n.materials[r.material.name] && (n.materials[r.material.name] = r.material);
210
+ }), n;
205
211
  }
206
- async function Qe(e, t, n, s, i) {
207
- const { logError: l } = B(), f = new e();
208
- i && i(f), n && n(f);
209
- const r = (Array.isArray(t) ? t : [t]).map(
210
- (u) => new Promise((o, c) => {
212
+ async function Xe(e, n, r, c, i) {
213
+ const { logError: l } = _(), f = new e();
214
+ i && i(f), r && r(f);
215
+ const t = (Array.isArray(n) ? n : [n]).map(
216
+ (s) => new Promise((u, a) => {
211
217
  f.load(
212
- u,
213
- (p) => {
214
- p.scene && Object.assign(p, Ne(p.scene)), o(p);
215
- },
216
218
  s,
217
- (p) => c(l("[useLoader] - Failed to load resource", p))
219
+ (o) => {
220
+ o.scene && Object.assign(o, ke(o.scene)), u(o);
221
+ },
222
+ c,
223
+ (o) => a(l("[useLoader] - Failed to load resource", o))
218
224
  );
219
225
  })
220
226
  );
221
- return $(t) ? await Promise.all(r) : await r[0];
227
+ return I(n) ? await Promise.all(t) : await t[0];
222
228
  }
223
- async function Xe(e) {
224
- const t = new Le(), n = new Oe(t), s = (i) => new Promise((l, f) => {
225
- n.load(
229
+ async function Ye(e) {
230
+ const n = new be(), r = new Ae(n), c = (i) => new Promise((l, f) => {
231
+ r.load(
226
232
  i,
227
- (a) => l(a),
233
+ (g) => l(g),
228
234
  () => null,
229
235
  () => {
230
236
  f(new Error("[useTextures] - Failed to load texture"));
231
237
  }
232
238
  );
233
239
  });
234
- if ($(e)) {
235
- const i = await Promise.all(e.map((l) => s(l)));
240
+ if (I(e)) {
241
+ const i = await Promise.all(e.map((l) => c(l)));
236
242
  return e.length > 1 ? i : i[0];
237
243
  } else {
238
- const { map: i, displacementMap: l, normalMap: f, roughnessMap: a, metalnessMap: r, aoMap: u } = e;
244
+ const { map: i, displacementMap: l, normalMap: f, roughnessMap: g, metalnessMap: t, aoMap: s } = e;
239
245
  return {
240
- map: i ? await s(i) : null,
241
- displacementMap: l ? await s(l) : null,
242
- normalMap: f ? await s(f) : null,
243
- roughnessMap: a ? await s(a) : null,
244
- metalnessMap: r ? await s(r) : null,
245
- aoMap: u ? await s(u) : null
246
+ map: i ? await c(i) : null,
247
+ displacementMap: l ? await c(l) : null,
248
+ normalMap: f ? await c(f) : null,
249
+ roughnessMap: g ? await c(g) : null,
250
+ metalnessMap: t ? await c(t) : null,
251
+ aoMap: s ? await c(s) : null
246
252
  };
247
253
  }
248
254
  }
249
- const L = Ce({});
250
- function pe() {
251
- function e(n) {
252
- return L[n];
255
+ const A = Ce({});
256
+ function me() {
257
+ function e(r) {
258
+ return A[r];
253
259
  }
254
- function t(n, s) {
255
- L[n] = s;
260
+ function n(r, c) {
261
+ A[r] = c;
256
262
  }
257
263
  return {
258
- state: L,
259
- ...te(L),
264
+ state: A,
265
+ ...ne(A),
260
266
  getState: e,
261
- setState: t
267
+ setState: n
262
268
  };
263
269
  }
264
- const g = k(), j = T(!1);
265
- function ke(e, t, n) {
270
+ const d = W(), V = b(!1);
271
+ function We(e, n, r) {
266
272
  const {
267
- alpha: s = !0,
273
+ alpha: c = !0,
268
274
  antialias: i = !0,
269
275
  depth: l,
270
276
  logarithmicDepthBuffer: f,
271
- failIfMajorPerformanceCaveat: a,
272
- precision: r,
273
- premultipliedAlpha: u,
274
- stencil: o,
275
- shadows: c = !1,
276
- shadowMapType: p = be,
277
- physicallyCorrectLights: d = !1,
278
- outputEncoding: w = X,
279
- toneMapping: y = Y,
280
- toneMappingExposure: R = 1,
281
- context: v = void 0,
282
- powerPreference: S = "default",
283
- preserveDrawingBuffer: I = !1,
284
- clearColor: h,
285
- windowSize: me = !1
286
- } = te(n), { width: _, height: D } = m(me) ? ne() : xe(t), { pixelRatio: H } = Ee(), { pause: de, resume: ge } = le(), he = V(() => _.value / D.value), G = () => {
287
- g.value && (g.value.setSize(_.value, D.value), g.value.setPixelRatio(Math.min(H.value, 2)));
277
+ failIfMajorPerformanceCaveat: g,
278
+ precision: t,
279
+ premultipliedAlpha: s,
280
+ stencil: u,
281
+ shadows: a = !1,
282
+ shadowMapType: o = Oe,
283
+ physicallyCorrectLights: h = !1,
284
+ outputEncoding: m = Y,
285
+ toneMapping: w = Z,
286
+ toneMappingExposure: M = 1,
287
+ context: D = void 0,
288
+ powerPreference: v = "default",
289
+ preserveDrawingBuffer: x = !1,
290
+ clearColor: C,
291
+ windowSize: y = !1
292
+ } = ne(r), { width: F, height: z } = p(y) ? re() : xe(n), { pixelRatio: H } = Ee(), { pause: de, resume: ge } = fe(), he = N(() => F.value / z.value), K = () => {
293
+ d.value && (d.value.setSize(F.value, z.value), d.value.setPixelRatio(Math.min(H.value, 2)));
288
294
  }, J = () => {
289
- g.value && (g.value.shadowMap.enabled = m(c), g.value.shadowMap.type = m(p), g.value.toneMapping = m(y) || Y, g.value.toneMappingExposure = m(R), g.value.outputEncoding = m(w) || X, h != null && h.value && g.value.setClearColor(De(m(h))), g.value.physicallyCorrectLights = m(d));
295
+ d.value && (d.value.shadowMap.enabled = p(a), d.value.shadowMap.type = p(o), d.value.toneMapping = p(w) || Z, d.value.toneMappingExposure = p(M), d.value.outputEncoding = p(m) || Y, C != null && C.value && d.value.setClearColor(Fe(p(C))), d.value.physicallyCorrectLights = p(h));
290
296
  }, we = () => {
291
- const K = F(e);
292
- if (g.value || !K)
297
+ const q = U(e);
298
+ if (d.value || !q)
293
299
  return;
294
- g.value = new Ae({
295
- canvas: K,
296
- alpha: m(s),
297
- antialias: m(i),
298
- context: m(v),
299
- depth: m(l),
300
- failIfMajorPerformanceCaveat: m(a),
301
- logarithmicDepthBuffer: m(f),
302
- powerPreference: m(S),
303
- precision: m(r),
304
- stencil: m(o),
305
- preserveDrawingBuffer: m(I),
306
- premultipliedAlpha: m(u)
300
+ d.value = new Be({
301
+ canvas: q,
302
+ alpha: p(c),
303
+ antialias: p(i),
304
+ context: p(D),
305
+ depth: p(l),
306
+ failIfMajorPerformanceCaveat: p(g),
307
+ logarithmicDepthBuffer: p(f),
308
+ powerPreference: p(v),
309
+ precision: p(t),
310
+ stencil: p(u),
311
+ preserveDrawingBuffer: p(x),
312
+ premultipliedAlpha: p(s)
307
313
  });
308
- const { setState: ye } = pe();
309
- ye("renderer", g.value), J(), G(), ge(), j.value = !0;
314
+ const { setState: ye } = me();
315
+ ye("renderer", d.value), J(), K(), ge(), V.value = !0;
310
316
  }, ve = () => {
311
- g.value && (g.value.dispose(), g.value = void 0, j.value = !1, de());
317
+ d.value && (d.value.dispose(), d.value = void 0, V.value = !1, de());
312
318
  };
313
- return O([_, D, H], G), O(
314
- [c, p, w, d, y, R, h],
319
+ return O([F, z, H], K), O(
320
+ [a, o, m, h, w, M, C],
315
321
  J
316
322
  ), O(
317
- () => [e, t],
323
+ () => [e, n],
318
324
  () => {
319
- F(e) && F(t) && we();
325
+ U(e) && U(n) && we();
320
326
  },
321
327
  { immediate: !0, deep: !0 }
322
328
  ), {
323
- renderer: g,
324
- isReady: j,
329
+ renderer: d,
330
+ isReady: V,
325
331
  dispose: ve,
326
332
  aspectRatio: he
327
333
  };
328
334
  }
329
- const We = N({
335
+ const Ge = k({
330
336
  name: "TresCanvas",
331
337
  props: {
332
338
  shadows: Boolean,
@@ -341,14 +347,14 @@ const We = N({
341
347
  clearColor: String,
342
348
  windowSize: Boolean
343
349
  },
344
- setup(e, { slots: t, attrs: n }) {
345
- const { logError: s } = B(), i = T(), l = T(), { renderer: f, dispose: a, aspectRatio: r } = ke(i, l, e), u = k();
346
- return b("camera", u), b("renderer", f), b("aspect-ratio", r), t.default && !t.default().some((o) => o.type.name === "Scene") && s("TresCanvas must contain a Scene component."), t.default && !t.default().some((o) => {
347
- var c;
348
- return (c = o.type.name) == null ? void 0 : c.includes("Camera");
349
- }) && s("Scene must contain a Camera component."), Se(() => a()), () => {
350
- if (t.default)
351
- return q(
350
+ setup(e, { slots: n, attrs: r }) {
351
+ const { logError: c } = _(), i = b(), l = b(), { renderer: f, dispose: g, aspectRatio: t } = We(i, l, e), s = W();
352
+ return B("camera", s), B("renderer", f), B("aspect-ratio", t), n.default && !n.default().some((u) => u.type.name === "Scene") && c("TresCanvas must contain a Scene component."), n.default && !n.default().some((u) => {
353
+ var a;
354
+ return (a = u.type.name) == null ? void 0 : a.includes("Camera");
355
+ }) && c("Scene must contain a Camera component."), Se(() => g()), () => {
356
+ if (n.default)
357
+ return Q(
352
358
  "div",
353
359
  {
354
360
  ref: l,
@@ -356,57 +362,57 @@ const We = N({
356
362
  position: "relative",
357
363
  width: "100%",
358
364
  height: "100vh",
359
- ...n.style
365
+ ...r.style
360
366
  }
361
367
  },
362
368
  [
363
- q("canvas", {
369
+ Q("canvas", {
364
370
  ref: i,
365
371
  style: { width: "100%", height: "100%", position: "absolute", top: 0, left: 0 }
366
372
  }),
367
- t.default()
373
+ n.default()
368
374
  ]
369
375
  );
370
376
  };
371
377
  }
372
- }), He = N({
378
+ }), He = k({
373
379
  name: "Scene",
374
- setup(e, { slots: t }) {
375
- const { scene: n } = fe(), s = P("renderer"), { activeCamera: i } = ae(), { onLoop: l } = le();
376
- return b("local-scene", n), l(() => {
377
- s != null && s.value && (i != null && i.value) && (n != null && n.value) && s.value.render(n == null ? void 0 : n.value, i.value);
380
+ setup(e, { slots: n }) {
381
+ const { scene: r } = pe(), c = L("renderer"), { activeCamera: i } = oe(), { onLoop: l } = fe();
382
+ return B("local-scene", r), l(() => {
383
+ c != null && c.value && (i != null && i.value) && (r != null && r.value) && c.value.render(r == null ? void 0 : r.value, i.value);
378
384
  }), () => {
379
- if (t.default)
380
- return t.default();
385
+ if (n.default)
386
+ return n.default();
381
387
  };
382
388
  }
383
- }), Ye = Symbol("UseTresState"), Ge = "1.3.3", Ze = {
384
- install(e, t) {
385
- const n = (t == null ? void 0 : t.prefix) || "Tres";
386
- e.component(`${n}Canvas`, We), e.component(`${n}Scene`, He);
387
- const { catalogue: s, extend: i } = oe(e, n);
388
- e.provide("catalogue", s), e.provide("extend", i);
389
- const { createComponentInstances: l } = se(n);
390
- l(s).forEach(([a, r]) => {
391
- e.component(a, r);
389
+ }), Ze = Symbol("UseTresState"), Ke = "1.4.0", et = {
390
+ install(e, n) {
391
+ const r = (n == null ? void 0 : n.prefix) || "Tres";
392
+ e.component(`${r}Canvas`, Ge), e.component(`${r}Scene`, He);
393
+ const { catalogue: c, extend: i } = se(e, r);
394
+ e.provide("catalogue", c), e.provide("extend", i);
395
+ const { createComponentInstances: l } = ie(r);
396
+ l(c).forEach(([g, t]) => {
397
+ e.component(g, t);
392
398
  }), window.__TRES__ = {
393
399
  app: e,
394
- version: Ge
400
+ version: Ke
395
401
  };
396
402
  }
397
403
  };
398
404
  export {
399
405
  $e as CameraType,
400
- Ye as UseTresStateSymbol,
401
- Ze as default,
402
- Ne as trasverseObjects,
403
- ae as useCamera,
404
- oe as useCatalogue,
405
- se as useInstanceCreator,
406
- Qe as useLoader,
407
- le as useRenderLoop,
408
- ke as useRenderer,
409
- fe as useScene,
410
- Xe as useTexture,
411
- pe as useTres
406
+ Ze as UseTresStateSymbol,
407
+ et as default,
408
+ ke as trasverseObjects,
409
+ oe as useCamera,
410
+ se as useCatalogue,
411
+ ie as useInstanceCreator,
412
+ Xe as useLoader,
413
+ fe as useRenderLoop,
414
+ We as useRenderer,
415
+ pe as useScene,
416
+ Ye as useTexture,
417
+ me as useTres
412
418
  };
package/dist/tres.umd.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v1.3.3
3
+ * version: v1.4.0
4
4
  * (c) 2022
5
5
  * description: Declarative ThreeJS using Vue Components
6
6
  * author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
7
7
  */
8
- (function(m,i){typeof exports=="object"&&typeof module<"u"?i(exports,require("vue"),require("@vueuse/core"),require("three")):typeof define=="function"&&define.amd?define(["exports","vue","@vueuse/core","three"],i):(m=typeof globalThis<"u"?globalThis:m||self,i(m.tres={},m.Vue,m.VueUseCore,m.Three))})(this,function(m,i,f,g){"use strict";function ne(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const W=ne(g);var q=(e=>(e.Perspective="Perspective",e.Orthographic="Orthographic",e))(q||{});const U={cameras:[]},re=45;let P;function I(){const{width:e,height:t}=f.useWindowSize(),{setState:n}=F();function r(a="Perspective",l){if(a==="Perspective"){const{near:s,far:u,fov:h}=l||{near:.1,far:1e3,fov:re};P=new g.PerspectiveCamera(h,c.value,s,u),U.cameras.push(P)}else{const{left:s,right:u,top:h,bottom:v,near:y,far:M}=l||{left:-100,right:100,top:100,bottom:-100,near:.1,far:1e3};P=new g.OrthographicCamera(s,u,h,v,y,M),U.cameras.push(P)}return U.cameras.push(P),P}const c=i.computed(()=>e.value/t.value),p=i.computed(()=>U.cameras[0]);function d(){p.value instanceof g.PerspectiveCamera&&(p.value.aspect=c.value),p.value.updateProjectionMatrix()}function o(a){const l=i.inject("camera");a&&l&&(l.value=a,n("camera",l.value)),U.cameras.push(a),a instanceof g.PerspectiveCamera&&(a.aspect=c.value),a.updateProjectionMatrix()}return i.watch(c,d),{activeCamera:p,createCamera:r,updateCamera:d,pushCamera:o}}const G="[TresJS ▲ ■ ●] ";function x(){function e(r,c){console.error(`${G} ${r}`,c||"")}function t(r){console.warn(`${G} ${r}`)}function n(r,c){}return{logError:e,logWarning:t,logMessage:n}}const L=i.ref({...W,uuid:W.MathUtils.generateUUID()});delete L.value.Scene;let O;function T(e,t="Tres"){const{logMessage:n,logError:r}=x();!O&&e&&(O=e);const{createComponentInstances:c}=D(t);return{extend:d=>{if(!d){r("No objects provided to extend catalogue");return}L.value=Object.assign(L.value,d);const o=c(i.ref(d));n("Adding objects to catalogue",{objects:d,catalogue:L.value.uuid}),O&&o.forEach(([a,l])=>{O._context.components[a]||O.component(a,l)})},catalogue:L}}const B=e=>typeof e<"u",ae=e=>typeof e=="function",j=e=>!!e&&e.constructor===Array;function oe(e){return typeof e=="number"?[e,e,e]:e instanceof g.Vector3?[e.x,e.y,e.z]:e}function se(e){return e instanceof g.Color?e:Array.isArray(e)?new g.Color(...e):new g.Color(e)}const ie=["rotation","scale","position"];function D(e){const{logMessage:t,logError:n}=x();function r(o,a){B(o)&&B(a)&&Object.entries(o).forEach(([l,s])=>{const u=l.replace(/(-\w)/g,h=>h[1].toUpperCase());if(!(u==="args"||s===void 0)){ie.includes(u)&&s&&(s=oe(s)),o.ref&&(o.ref=a);try{if(a[u]&&B(a[u].set))a[u].set(...j(s)?s:[s]);else{if(s===""&&(s=!0),ae(a[u])){if(l==="center"&&!s)return;a[u](...j(s)?s:[s]);return}a[u]=s}}catch(h){n(`There was an error setting ${u} property`,h)}}})}function c(o){var s;const a=/^Symbol\(Fragment\)$/g,l=/^Symbol\(Text\)$/g;if(a.test(o.type.toString()))return o.children.map(u=>c(u));if(l.test(o.type.toString()))return;{const u=o.type.name.replace(e,""),{catalogue:h}=T(),v=i.inject("catalogue")||h;let y;return v&&((s=o==null?void 0:o.props)!=null&&s.args?v!=null&&v.value[u]?y=new v.value[u](...o.props.args):n(`There is no ${u} in the catalogue`,v==null?void 0:v.value.uuid):y=new v.value[u]),o!=null&&o.props&&r(o.props,y),y}}function p(o,a,l){if(l.default&&(l!=null&&l.default())){const s=l.default().map(u=>c(u));return new o(...s.flat().filter(Boolean))}else return a.args?new o(...a.args):new o}function d(o){return Object.entries(o.value).filter(([a,l])=>{var s,u;return(u=(s=l==null?void 0:l.prototype)==null?void 0:s.constructor)==null?void 0:u.toString().includes("class")}).map(([a,l])=>{const s=`${e}${a}`,u=i.defineComponent({name:s,setup(h,{slots:v,attrs:y,...M}){const{scene:A}=z(),S=i.inject("local-scene")||A,b=i.inject("catalogue"),{pushCamera:k}=I();let C=p(l,y,v);return r(y,C),(C instanceof g.PerspectiveCamera||C instanceof g.OrthographicCamera)&&k(C),C.isObject3D&&(S==null||S.value.add(C)),S!=null&&S.value&&C.isFog&&(S.value.fog=C),M.expose(C),t(s,{sceneuuid:S==null?void 0:S.value.uuid,catalogue:b==null?void 0:b.value.uuid,props:h,slots:v.default?v.default():void 0,attrs:y,ctx:M,scene:S}),()=>{}}});return[s,u]})}return{createComponentInstances:d,processProps:r,createInstanceFromVNode:c}}const J=f.createEventHook(),K=f.createEventHook(),Q=f.createEventHook(),X=new g.Clock,{pause:ce,resume:ue,isActive:le}=f.useRafFn(()=>{const e=X.getElapsedTime(),t=X.getDelta();J.trigger({delta:t,elapsed:e}),K.trigger({delta:t,elapsed:e}),Q.trigger({delta:t,elapsed:e})},{immediate:!1});function $(){return{onBeforeLoop:J.on,onLoop:K.on,onAfterLoop:Q.on,pause:ce,resume:ue,isActive:le}}const fe=i.shallowRef(new g.Scene);function z(){return{scene:fe}}function Y(e){const t={nodes:{},materials:{}};return e&&e.traverse(n=>{n.name&&(t.nodes[n.name]=n),n.material&&!t.materials[n.material.name]&&(t.materials[n.material.name]=n.material)}),t}async function pe(e,t,n,r,c){const{logError:p}=x(),d=new e;c&&c(d),n&&n(d);const a=(Array.isArray(t)?t:[t]).map(l=>new Promise((s,u)=>{d.load(l,h=>{h.scene&&Object.assign(h,Y(h.scene)),s(h)},r,h=>u(p("[useLoader] - Failed to load resource",h)))}));return j(t)?await Promise.all(a):await a[0]}async function de(e){const t=new g.LoadingManager,n=new g.TextureLoader(t),r=c=>new Promise((p,d)=>{n.load(c,o=>p(o),()=>null,()=>{d(new Error("[useTextures] - Failed to load texture"))})});if(j(e)){const c=await Promise.all(e.map(p=>r(p)));return e.length>1?c:c[0]}else{const{map:c,displacementMap:p,normalMap:d,roughnessMap:o,metalnessMap:a,aoMap:l}=e;return{map:c?await r(c):null,displacementMap:p?await r(p):null,normalMap:d?await r(d):null,roughnessMap:o?await r(o):null,metalnessMap:a?await r(a):null,aoMap:l?await r(l):null}}}const _=i.reactive({});function F(){function e(n){return _[n]}function t(n,r){_[n]=r}return{state:_,...i.toRefs(_),getState:e,setState:t}}const w=i.shallowRef(),V=i.ref(!1);function Z(e,t,n){const{alpha:r=!0,antialias:c=!0,depth:p,logarithmicDepthBuffer:d,failIfMajorPerformanceCaveat:o,precision:a,premultipliedAlpha:l,stencil:s,shadows:u=!1,shadowMapType:h=g.PCFShadowMap,physicallyCorrectLights:v=!1,outputEncoding:y=g.LinearEncoding,toneMapping:M=g.NoToneMapping,toneMappingExposure:A=1,context:S=void 0,powerPreference:b="default",preserveDrawingBuffer:k=!1,clearColor:C,windowSize:Ce=!1}=i.toRefs(n),{width:N,height:R}=f.resolveUnref(Ce)?f.useWindowSize():f.useElementSize(t),{pixelRatio:E}=f.useDevicePixelRatio(),{pause:ye,resume:Se}=$(),Me=i.computed(()=>N.value/R.value),H=()=>{w.value&&(w.value.setSize(N.value,R.value),w.value.setPixelRatio(Math.min(E.value,2)))},ee=()=>{w.value&&(w.value.shadowMap.enabled=f.resolveUnref(u),w.value.shadowMap.type=f.resolveUnref(h),w.value.toneMapping=f.resolveUnref(M)||g.NoToneMapping,w.value.toneMappingExposure=f.resolveUnref(A),w.value.outputEncoding=f.resolveUnref(y)||g.LinearEncoding,C!=null&&C.value&&w.value.setClearColor(se(f.resolveUnref(C))),w.value.physicallyCorrectLights=f.resolveUnref(v))},Pe=()=>{const te=f.unrefElement(e);if(w.value||!te)return;w.value=new g.WebGLRenderer({canvas:te,alpha:f.resolveUnref(r),antialias:f.resolveUnref(c),context:f.resolveUnref(S),depth:f.resolveUnref(p),failIfMajorPerformanceCaveat:f.resolveUnref(o),logarithmicDepthBuffer:f.resolveUnref(d),powerPreference:f.resolveUnref(b),precision:f.resolveUnref(a),stencil:f.resolveUnref(s),preserveDrawingBuffer:f.resolveUnref(k),premultipliedAlpha:f.resolveUnref(l)});const{setState:Le}=F();Le("renderer",w.value),ee(),H(),Se(),V.value=!0},Ue=()=>{w.value&&(w.value.dispose(),w.value=void 0,V.value=!1,ye())};return i.watch([N,R,E],H),i.watch([u,h,y,v,M,A,C],ee),i.watch(()=>[e,t],()=>{f.unrefElement(e)&&f.unrefElement(t)&&Pe()},{immediate:!0,deep:!0}),{renderer:w,isReady:V,dispose:Ue,aspectRatio:Me}}const me=i.defineComponent({name:"TresCanvas",props:{shadows:Boolean,shadowMapType:Object,physicallyCorrectLights:Boolean,outputEncoding:Object,toneMapping:Object,toneMappingExposure:Number,context:Object,powerPreference:Object,preserveDrawingBuffer:Boolean,clearColor:String,windowSize:Boolean},setup(e,{slots:t,attrs:n}){const{logError:r}=x(),c=i.ref(),p=i.ref(),{renderer:d,dispose:o,aspectRatio:a}=Z(c,p,e),l=i.shallowRef();return i.provide("camera",l),i.provide("renderer",d),i.provide("aspect-ratio",a),t.default&&!t.default().some(s=>s.type.name==="Scene")&&r("TresCanvas must contain a Scene component."),t.default&&!t.default().some(s=>{var u;return(u=s.type.name)==null?void 0:u.includes("Camera")})&&r("Scene must contain a Camera component."),i.onBeforeUnmount(()=>o()),()=>{if(t.default)return i.h("div",{ref:p,style:{position:"relative",width:"100%",height:"100vh",...n.style}},[i.h("canvas",{ref:c,style:{width:"100%",height:"100%",position:"absolute",top:0,left:0}}),t.default()])}}}),ge=i.defineComponent({name:"Scene",setup(e,{slots:t}){const{scene:n}=z(),r=i.inject("renderer"),{activeCamera:c}=I(),{onLoop:p}=$();return i.provide("local-scene",n),p(()=>{r!=null&&r.value&&(c!=null&&c.value)&&(n!=null&&n.value)&&r.value.render(n==null?void 0:n.value,c.value)}),()=>{if(t.default)return t.default()}}}),he=Symbol("UseTresState"),we="1.3.3",ve={install(e,t){const n=(t==null?void 0:t.prefix)||"Tres";e.component(`${n}Canvas`,me),e.component(`${n}Scene`,ge);const{catalogue:r,extend:c}=T(e,n);e.provide("catalogue",r),e.provide("extend",c);const{createComponentInstances:p}=D(n);p(r).forEach(([o,a])=>{e.component(o,a)}),window.__TRES__={app:e,version:we}}};m.CameraType=q,m.UseTresStateSymbol=he,m.default=ve,m.trasverseObjects=Y,m.useCamera=I,m.useCatalogue=T,m.useInstanceCreator=D,m.useLoader=pe,m.useRenderLoop=$,m.useRenderer=Z,m.useScene=z,m.useTexture=de,m.useTres=F,Object.defineProperties(m,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
8
+ (function(g,i){typeof exports=="object"&&typeof module<"u"?i(exports,require("vue"),require("@vueuse/core"),require("three")):typeof define=="function"&&define.amd?define(["exports","vue","@vueuse/core","three"],i):(g=typeof globalThis<"u"?globalThis:g||self,i(g.tres={},g.Vue,g.VueUseCore,g.Three))})(this,function(g,i,l,m){"use strict";function re(e){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const s=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(n,r,s.get?s:{enumerable:!0,get:()=>e[r]})}}return n.default=e,Object.freeze(n)}const q=re(m);var G=(e=>(e.Perspective="Perspective",e.Orthographic="Orthographic",e))(G||{});const b={cameras:[]},ae=45;let U;function D(){const{width:e,height:n}=l.useWindowSize(),{setState:r}=V();function s(t="Perspective",c){if(t==="Perspective"){const{near:f,far:a,fov:o}=c||{near:.1,far:1e3,fov:ae};U=new m.PerspectiveCamera(o,u.value,f,a),b.cameras.push(U)}else{const{left:f,right:a,top:o,bottom:C,near:w,far:y}=c||{left:-100,right:100,top:100,bottom:-100,near:.1,far:1e3};U=new m.OrthographicCamera(f,a,o,C,w,y),b.cameras.push(U)}return b.cameras.push(U),U}const u=i.computed(()=>e.value/n.value),p=i.computed(()=>b.cameras[0]);function d(){p.value instanceof m.PerspectiveCamera&&(p.value.aspect=u.value),p.value.updateProjectionMatrix()}function v(t){const c=i.inject("camera");t&&c&&(c.value=t,r("camera",c.value)),b.cameras.push(t),t instanceof m.PerspectiveCamera&&(t.aspect=u.value),t.updateProjectionMatrix()}return i.watch(u,d),{activeCamera:p,createCamera:s,updateCamera:d,pushCamera:v}}const K="[TresJS ▲ ■ ●] ";function _(){function e(s,u){console.error(`${K} ${s}`,u||"")}function n(s){console.warn(`${K} ${s}`)}function r(s,u){}return{logError:e,logWarning:n,logMessage:r}}const O=i.ref({...q,uuid:q.MathUtils.generateUUID()});delete O.value.Scene;let L;function T(e,n="Tres"){const{logMessage:r,logError:s}=_();!L&&e&&(L=e);const{createComponentInstances:u}=$(n);return{extend:d=>{if(!d){s("No objects provided to extend catalogue");return}O.value=Object.assign(O.value,d);const v=u(i.ref(d));r("Adding objects to catalogue",{objects:d,catalogue:O.value.uuid}),L&&v.forEach(([t,c])=>{L._context.components[t]||L.component(t,c)})},catalogue:O}}const x=e=>typeof e<"u",oe=e=>typeof e=="function",B=e=>!!e&&e.constructor===Array;function se(e){return typeof e=="number"?[e,e,e]:e instanceof m.Vector3?[e.x,e.y,e.z]:e}function ie(e){return e instanceof m.Color?e:Array.isArray(e)?new m.Color(...e):new m.Color(e)}const ce=["rotation","scale","position"];function $(e){const{logMessage:n,logError:r}=_();function s(t,c){x(t)&&x(c)&&Object.entries(t).forEach(([f,a])=>{const o=f.replace(/(-\w)/g,C=>C[1].toUpperCase());c.setAttribute(o,new m.BufferAttribute(...a))})}function u(t,c){x(t)&&x(c)&&Object.entries(t).forEach(([f,a])=>{const o=f.replace(/(-\w)/g,C=>C[1].toUpperCase());if(!(o==="args"||a===void 0)){ce.includes(o)&&a&&(a=se(a)),t.ref&&(t.ref=c);try{if(c[o]&&x(c[o].set))c[o].set(...B(a)?a:[a]);else{if(a===""&&(a=!0),oe(c[o])){if(f==="center"&&!a)return;c[o](...B(a)?a:[a]);return}c[o]=a}}catch(C){r(`There was an error setting ${o} property`,C)}}})}function p(t){var a;const c=/^Symbol\(Fragment\)$/g,f=/^Symbol\(Text\)$/g;if(c.test(t.type.toString()))return t.children.map(o=>p(o));if(f.test(t.type.toString()))return;{const o=t.type.name.replace(e,""),{catalogue:C}=T(),w=i.inject("catalogue")||C;let y;return w&&((a=t==null?void 0:t.props)!=null&&a.args?w!=null&&w.value[o]?y=new w.value[o](...t.props.args):r(`There is no ${o} in the catalogue`,w==null?void 0:w.value.uuid):y=new w.value[o]),t!=null&&t.props&&(o==="BufferGeometry"?s(t.props,y):u(t.props,y)),y}}function d(t,c,f){if(f.default&&(f!=null&&f.default())){const a=f.default().map(o=>p(o));return new t(...a.flat().filter(Boolean))}else return c.args?new t(...c.args):new t}function v(t){return Object.entries(t.value).filter(([c,f])=>{var a,o;return(o=(a=f==null?void 0:f.prototype)==null?void 0:a.constructor)==null?void 0:o.toString().includes("class")}).map(([c,f])=>{const a=`${e}${c}`,o=i.defineComponent({name:a,setup(C,{slots:w,attrs:y,...j}){const{scene:N}=F(),S=i.inject("local-scene")||N,A=i.inject("catalogue"),{pushCamera:P}=D();let M=d(f,y,w);return u(y,M),(M instanceof m.PerspectiveCamera||M instanceof m.OrthographicCamera)&&P(M),M.isObject3D&&(S==null||S.value.add(M)),S!=null&&S.value&&M.isFog&&(S.value.fog=M),j.expose(M),n(a,{sceneuuid:S==null?void 0:S.value.uuid,catalogue:A==null?void 0:A.value.uuid,props:C,slots:w.default?w.default():void 0,attrs:y,ctx:j,scene:S}),()=>{}}});return[a,o]})}return{createComponentInstances:v,processProps:u,createInstanceFromVNode:p}}const J=l.createEventHook(),Q=l.createEventHook(),X=l.createEventHook(),Y=new m.Clock,{pause:ue,resume:le,isActive:fe}=l.useRafFn(()=>{const e=Y.getElapsedTime(),n=Y.getDelta();J.trigger({delta:n,elapsed:e}),Q.trigger({delta:n,elapsed:e}),X.trigger({delta:n,elapsed:e})},{immediate:!1});function z(){return{onBeforeLoop:J.on,onLoop:Q.on,onAfterLoop:X.on,pause:ue,resume:le,isActive:fe}}const pe=i.shallowRef(new m.Scene);function F(){return{scene:pe}}function Z(e){const n={nodes:{},materials:{}};return e&&e.traverse(r=>{r.name&&(n.nodes[r.name]=r),r.material&&!n.materials[r.material.name]&&(n.materials[r.material.name]=r.material)}),n}async function de(e,n,r,s,u){const{logError:p}=_(),d=new e;u&&u(d),r&&r(d);const t=(Array.isArray(n)?n:[n]).map(c=>new Promise((f,a)=>{d.load(c,o=>{o.scene&&Object.assign(o,Z(o.scene)),f(o)},s,o=>a(p("[useLoader] - Failed to load resource",o)))}));return B(n)?await Promise.all(t):await t[0]}async function me(e){const n=new m.LoadingManager,r=new m.TextureLoader(n),s=u=>new Promise((p,d)=>{r.load(u,v=>p(v),()=>null,()=>{d(new Error("[useTextures] - Failed to load texture"))})});if(B(e)){const u=await Promise.all(e.map(p=>s(p)));return e.length>1?u:u[0]}else{const{map:u,displacementMap:p,normalMap:d,roughnessMap:v,metalnessMap:t,aoMap:c}=e;return{map:u?await s(u):null,displacementMap:p?await s(p):null,normalMap:d?await s(d):null,roughnessMap:v?await s(v):null,metalnessMap:t?await s(t):null,aoMap:c?await s(c):null}}}const I=i.reactive({});function V(){function e(r){return I[r]}function n(r,s){I[r]=s}return{state:I,...i.toRefs(I),getState:e,setState:n}}const h=i.shallowRef(),k=i.ref(!1);function E(e,n,r){const{alpha:s=!0,antialias:u=!0,depth:p,logarithmicDepthBuffer:d,failIfMajorPerformanceCaveat:v,precision:t,premultipliedAlpha:c,stencil:f,shadows:a=!1,shadowMapType:o=m.PCFShadowMap,physicallyCorrectLights:C=!1,outputEncoding:w=m.LinearEncoding,toneMapping:y=m.NoToneMapping,toneMappingExposure:j=1,context:N=void 0,powerPreference:S="default",preserveDrawingBuffer:A=!1,clearColor:P,windowSize:M=!1}=i.toRefs(r),{width:R,height:W}=l.resolveUnref(M)?l.useWindowSize():l.useElementSize(n),{pixelRatio:H}=l.useDevicePixelRatio(),{pause:ye,resume:Se}=z(),Me=i.computed(()=>R.value/W.value),ee=()=>{h.value&&(h.value.setSize(R.value,W.value),h.value.setPixelRatio(Math.min(H.value,2)))},te=()=>{h.value&&(h.value.shadowMap.enabled=l.resolveUnref(a),h.value.shadowMap.type=l.resolveUnref(o),h.value.toneMapping=l.resolveUnref(y)||m.NoToneMapping,h.value.toneMappingExposure=l.resolveUnref(j),h.value.outputEncoding=l.resolveUnref(w)||m.LinearEncoding,P!=null&&P.value&&h.value.setClearColor(ie(l.resolveUnref(P))),h.value.physicallyCorrectLights=l.resolveUnref(C))},Pe=()=>{const ne=l.unrefElement(e);if(h.value||!ne)return;h.value=new m.WebGLRenderer({canvas:ne,alpha:l.resolveUnref(s),antialias:l.resolveUnref(u),context:l.resolveUnref(N),depth:l.resolveUnref(p),failIfMajorPerformanceCaveat:l.resolveUnref(v),logarithmicDepthBuffer:l.resolveUnref(d),powerPreference:l.resolveUnref(S),precision:l.resolveUnref(t),stencil:l.resolveUnref(f),preserveDrawingBuffer:l.resolveUnref(A),premultipliedAlpha:l.resolveUnref(c)});const{setState:be}=V();be("renderer",h.value),te(),ee(),Se(),k.value=!0},Ue=()=>{h.value&&(h.value.dispose(),h.value=void 0,k.value=!1,ye())};return i.watch([R,W,H],ee),i.watch([a,o,w,C,y,j,P],te),i.watch(()=>[e,n],()=>{l.unrefElement(e)&&l.unrefElement(n)&&Pe()},{immediate:!0,deep:!0}),{renderer:h,isReady:k,dispose:Ue,aspectRatio:Me}}const ge=i.defineComponent({name:"TresCanvas",props:{shadows:Boolean,shadowMapType:Object,physicallyCorrectLights:Boolean,outputEncoding:Object,toneMapping:Object,toneMappingExposure:Number,context:Object,powerPreference:Object,preserveDrawingBuffer:Boolean,clearColor:String,windowSize:Boolean},setup(e,{slots:n,attrs:r}){const{logError:s}=_(),u=i.ref(),p=i.ref(),{renderer:d,dispose:v,aspectRatio:t}=E(u,p,e),c=i.shallowRef();return i.provide("camera",c),i.provide("renderer",d),i.provide("aspect-ratio",t),n.default&&!n.default().some(f=>f.type.name==="Scene")&&s("TresCanvas must contain a Scene component."),n.default&&!n.default().some(f=>{var a;return(a=f.type.name)==null?void 0:a.includes("Camera")})&&s("Scene must contain a Camera component."),i.onBeforeUnmount(()=>v()),()=>{if(n.default)return i.h("div",{ref:p,style:{position:"relative",width:"100%",height:"100vh",...r.style}},[i.h("canvas",{ref:u,style:{width:"100%",height:"100%",position:"absolute",top:0,left:0}}),n.default()])}}}),he=i.defineComponent({name:"Scene",setup(e,{slots:n}){const{scene:r}=F(),s=i.inject("renderer"),{activeCamera:u}=D(),{onLoop:p}=z();return i.provide("local-scene",r),p(()=>{s!=null&&s.value&&(u!=null&&u.value)&&(r!=null&&r.value)&&s.value.render(r==null?void 0:r.value,u.value)}),()=>{if(n.default)return n.default()}}}),we=Symbol("UseTresState"),ve="1.4.0",Ce={install(e,n){const r=(n==null?void 0:n.prefix)||"Tres";e.component(`${r}Canvas`,ge),e.component(`${r}Scene`,he);const{catalogue:s,extend:u}=T(e,r);e.provide("catalogue",s),e.provide("extend",u);const{createComponentInstances:p}=$(r);p(s).forEach(([v,t])=>{e.component(v,t)}),window.__TRES__={app:e,version:ve}}};g.CameraType=G,g.UseTresStateSymbol=we,g.default=Ce,g.trasverseObjects=Z,g.useCamera=D,g.useCatalogue=T,g.useInstanceCreator=$,g.useLoader=de,g.useRenderLoop=z,g.useRenderer=E,g.useScene=F,g.useTexture=me,g.useTres=V,Object.defineProperties(g,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
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": "1.3.3",
4
+ "version": "1.4.0",
5
5
  "type": "module",
6
6
  "author": "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",
7
7
  "files": [
@@ -30,7 +30,7 @@
30
30
  "threejs-vue"
31
31
  ],
32
32
  "dependencies": {
33
- "three": "^0.147.0",
33
+ "three": "^0.148.0",
34
34
  "vue": "^3.2.45"
35
35
  },
36
36
  "peerDependencies": {
@@ -54,7 +54,7 @@
54
54
  "rollup-plugin-analyzer": "^4.0.0",
55
55
  "rollup-plugin-visualizer": "^5.8.3",
56
56
  "unplugin-vue-components": "^0.22.12",
57
- "vite": "^4.0.2",
57
+ "vite": "^4.0.3",
58
58
  "vite-plugin-banner": "^0.7.0",
59
59
  "vite-plugin-dts": "^1.7.1",
60
60
  "vite-plugin-glsl": "^1.0.1",