@tresjs/core 1.4.0 → 1.5.0

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