@tresjs/core 1.3.3 → 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.3.3
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 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 { 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
+ import * as X 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 M = {
13
+ const T = {
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 x;
17
+ function oe() {
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
- fov: Be
24
+ fov: Ie
25
25
  };
26
- C = new A(p, i.value, o, c), M.cameras.push(C);
26
+ x = new I(u, (e == null ? void 0 : e.value) || 1, t, c), T.cameras.push(x);
27
27
  } else {
28
- const { left: o, right: c, top: p, bottom: d, near: w, far: y } = u || {
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,300 +33,318 @@ 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
+ x = new ae(t, c, u, a, s, p), T.cameras.push(x);
37
37
  }
38
- return M.cameras.push(C), C;
38
+ return T.cameras.push(x), x;
39
39
  }
40
- const i = V(() => e.value / t.value), l = V(() => M.cameras[0]);
41
- function f() {
42
- l.value instanceof A && (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 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 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: s,
51
- updateCamera: f,
52
- pushCamera: a
48
+ return e && O(e, i), {
49
+ activeCamera: o,
50
+ createCamera: r,
51
+ updateCamera: i,
52
+ pushCamera: f
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 D() {
57
+ function e(o, i) {
58
+ console.error(`${ee} ${o}`, i || "");
59
59
  }
60
- function t(s) {
61
- console.warn(`${Z} ${s}`);
60
+ function n(o) {
61
+ console.warn(`${ee} ${o}`);
62
62
  }
63
- function n(s, i) {
63
+ function r(o, 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 A = b({ ...X, uuid: X.MathUtils.generateUUID() });
72
+ delete A.value.Scene;
73
+ let L;
74
+ function se(e, n = "Tres") {
75
+ const { logMessage: r, logError: o } = D();
76
+ !L && e && (L = e);
77
+ const { createComponentInstances: i } = ie(n);
78
78
  return {
79
- extend: (f) => {
80
- if (!f) {
81
- s("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
- 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
+ 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: E
90
+ catalogue: A
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 R = (e) => typeof e < "u", _e = (e) => typeof e == "function", _ = (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) {
97
+ function Fe(e) {
98
98
  return e instanceof z ? e : Array.isArray(e) ? new z(...e) : new z(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 } = 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
+ });
108
+ }
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);
108
114
  try {
109
- if (r[c] && U(r[c].set))
110
- r[c].set(...$(o) ? o : [o]);
115
+ if (c[s] && R(c[s].set))
116
+ c[s].set(..._(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(c[s])) {
119
+ if (u === "center" && !a)
114
120
  return;
115
- r[c](...$(o) ? o : [o]);
121
+ c[s](..._(a) ? a : [a]);
116
122
  return;
117
123
  }
118
- r[c] = o;
124
+ c[s] = a;
119
125
  }
120
126
  } catch (p) {
121
- n(`There was an error setting ${c} property`, p);
127
+ r(`There was an error setting ${s} property`, p);
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 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
+ 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;
135
- 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;
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;
137
149
  }
138
150
  }
139
- function l(a, r, u) {
151
+ function l(t, c, u) {
140
152
  if (u.default && (u != null && u.default())) {
141
- const o = u.default().map((c) => i(c));
142
- return new a(...o.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));
143
161
  } else
144
- return r.args ? new a(...r.args) : new a();
162
+ return c.args ? new t(...c.args) : new t();
145
163
  }
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, {
157
- sceneuuid: v == null ? void 0 : v.value.uuid,
158
- catalogue: S == null ? void 0 : S.value.uuid,
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({
170
+ name: a,
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,
159
177
  props: p,
160
- slots: d.default ? d.default() : void 0,
161
- attrs: w,
162
- ctx: y,
163
- scene: v
178
+ slots: C.default ? C.default() : void 0,
179
+ attrs: h,
180
+ ctx: v,
181
+ scene: w
164
182
  }), () => {
165
183
  };
166
184
  }
167
185
  });
168
- return [o, c];
186
+ return [a, s];
169
187
  });
170
188
  }
171
189
  return {
172
- createComponentInstances: f,
173
- processProps: s,
174
- createInstanceFromVNode: i
190
+ createComponentInstances: m,
191
+ processProps: i,
192
+ createInstanceFromVNode: f
175
193
  };
176
194
  }
177
- const ie = W(), ce = W(), ue = W(), ee = new Te(), { pause: ze, resume: Ue, isActive: je } = Me(
195
+ const ce = N(), ue = N(), le = N(), te = new Le(), { pause: Ue, resume: Ve, isActive: je } = Se(
178
196
  () => {
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 });
197
+ const e = te.getElapsedTime(), n = te.getDelta();
198
+ ce.trigger({ delta: n, elapsed: e }), ue.trigger({ delta: n, elapsed: e }), le.trigger({ delta: n, elapsed: e });
181
199
  },
182
200
  { immediate: !1 }
183
201
  );
184
- function le() {
202
+ function fe() {
185
203
  return {
186
- onBeforeLoop: ie.on,
187
- onLoop: ce.on,
188
- onAfterLoop: ue.on,
189
- pause: ze,
190
- resume: Ue,
204
+ onBeforeLoop: ce.on,
205
+ onLoop: ue.on,
206
+ onAfterLoop: le.on,
207
+ pause: Ue,
208
+ resume: Ve,
191
209
  isActive: je
192
210
  };
193
211
  }
194
- const Ve = k(new Re());
195
- function fe() {
212
+ const Ne = j(new Re());
213
+ function pe() {
196
214
  return {
197
- scene: Ve
215
+ scene: Ne
198
216
  };
199
217
  }
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;
218
+ function ke(e) {
219
+ const n = { nodes: {}, materials: {} };
220
+ return e && e.traverse((r) => {
221
+ r.name && (n.nodes[r.name] = r), r.material && !n.materials[r.material.name] && (n.materials[r.material.name] = r.material);
222
+ }), n;
205
223
  }
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) => {
211
- f.load(
212
- u,
213
- (p) => {
214
- p.scene && Object.assign(p, Ne(p.scene)), o(p);
224
+ async function Xe(e, n, r, o, i) {
225
+ const { logError: f } = D(), l = new e();
226
+ i && i(l), r && r(l);
227
+ const t = (Array.isArray(n) ? n : [n]).map(
228
+ (c) => new Promise((u, a) => {
229
+ l.load(
230
+ c,
231
+ (s) => {
232
+ s.scene && Object.assign(s, ke(s.scene)), u(s);
215
233
  },
216
- s,
217
- (p) => c(l("[useLoader] - Failed to load resource", p))
234
+ o,
235
+ (s) => a(f("[useLoader] - Failed to load resource", s))
218
236
  );
219
237
  })
220
238
  );
221
- return $(t) ? await Promise.all(r) : await r[0];
239
+ return _(n) ? await Promise.all(t) : await t[0];
222
240
  }
223
- async function Xe(e) {
224
- const t = new Le(), n = new Oe(t), s = (i) => new Promise((l, f) => {
225
- n.load(
241
+ async function Ye(e) {
242
+ const n = new Ae(), r = new be(n), o = (i) => new Promise((f, l) => {
243
+ r.load(
226
244
  i,
227
- (a) => l(a),
245
+ (m) => f(m),
228
246
  () => null,
229
247
  () => {
230
- f(new Error("[useTextures] - Failed to load texture"));
248
+ l(new Error("[useTextures] - Failed to load texture"));
231
249
  }
232
250
  );
233
251
  });
234
- if ($(e)) {
235
- const i = await Promise.all(e.map((l) => s(l)));
252
+ if (_(e)) {
253
+ const i = await Promise.all(e.map((f) => o(f)));
236
254
  return e.length > 1 ? i : i[0];
237
255
  } else {
238
- const { map: i, displacementMap: l, normalMap: f, roughnessMap: a, metalnessMap: r, aoMap: u } = e;
256
+ const { map: i, displacementMap: f, normalMap: l, roughnessMap: m, metalnessMap: t, aoMap: c } = e;
239
257
  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
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
246
264
  };
247
265
  }
248
266
  }
249
- const L = Ce({});
250
- function pe() {
251
- function e(n) {
252
- return L[n];
267
+ const B = ye({});
268
+ function me() {
269
+ function e(r) {
270
+ return B[r];
253
271
  }
254
- function t(n, s) {
255
- L[n] = s;
272
+ function n(r, o) {
273
+ B[r] = o;
256
274
  }
257
275
  return {
258
- state: L,
259
- ...te(L),
276
+ state: B,
277
+ ...re(B),
260
278
  getState: e,
261
- setState: t
279
+ setState: n
262
280
  };
263
281
  }
264
- const g = k(), j = T(!1);
265
- function ke(e, t, n) {
282
+ const g = j(), U = b(!1);
283
+ function We(e, n, r) {
266
284
  const {
267
- alpha: s = !0,
285
+ alpha: o = !0,
268
286
  antialias: i = !0,
269
- depth: l,
270
- 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)));
287
+ depth: f,
288
+ logarithmicDepthBuffer: l,
289
+ failIfMajorPerformanceCaveat: m,
290
+ precision: t,
291
+ premultipliedAlpha: c,
292
+ stencil: u,
293
+ shadows: a = !1,
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,
303
+ windowSize: y = !1
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)));
288
306
  }, 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));
290
- }, we = () => {
291
- const K = F(e);
292
- if (g.value || !K)
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)
293
311
  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)
312
+ g.value = new Oe({
313
+ canvas: q,
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)
307
325
  });
308
- const { setState: ye } = pe();
309
- ye("renderer", g.value), J(), G(), ge(), j.value = !0;
310
- }, ve = () => {
311
- g.value && (g.value.dispose(), g.value = void 0, j.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());
312
330
  };
313
- return O([_, D, H], G), O(
314
- [c, p, w, d, y, R, h],
331
+ return O([H, G], K), O(
332
+ [a, s, C, p, h, v, S],
315
333
  J
316
334
  ), O(
317
- () => [e, t],
335
+ () => [e, n],
318
336
  () => {
319
- F(e) && F(t) && we();
337
+ F(e) && F(n) && he();
320
338
  },
321
339
  { immediate: !0, deep: !0 }
322
340
  ), {
323
341
  renderer: g,
324
- isReady: j,
325
- dispose: ve,
326
- aspectRatio: he
342
+ isReady: U,
343
+ dispose: we,
344
+ aspectRatio: H
327
345
  };
328
346
  }
329
- const We = N({
347
+ const Ge = V({
330
348
  name: "TresCanvas",
331
349
  props: {
332
350
  shadows: Boolean,
@@ -339,74 +357,82 @@ const We = N({
339
357
  powerPreference: Object,
340
358
  preserveDrawingBuffer: Boolean,
341
359
  clearColor: String,
342
- windowSize: Boolean
360
+ windowSize: { type: Boolean, default: !1 }
343
361
  },
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(
362
+ setup(e, { slots: n, attrs: r }) {
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) => {
367
+ var a;
368
+ return (a = u.type.name) == null ? void 0 : a.includes("Camera");
369
+ }) && o("Scene must contain a Camera component."), Ce(() => m()), () => {
370
+ if (n.default)
371
+ return Q(
352
372
  "div",
353
373
  {
354
- ref: l,
374
+ ref: f,
355
375
  style: {
356
376
  position: "relative",
357
377
  width: "100%",
358
378
  height: "100vh",
359
- ...n.style
379
+ ...r.style
360
380
  }
361
381
  },
362
382
  [
363
- q("canvas", {
383
+ Q("canvas", {
364
384
  ref: i,
365
- 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
+ }
366
392
  }),
367
- t.default()
393
+ n.default()
368
394
  ]
369
395
  );
370
396
  };
371
397
  }
372
- }), He = N({
398
+ }), He = V({
373
399
  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);
400
+ setup(e, { slots: n }) {
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);
378
404
  }), () => {
379
- if (t.default)
380
- return t.default();
405
+ if (n.default)
406
+ return n.default();
381
407
  };
382
408
  }
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);
409
+ }), Ze = Symbol("UseTresState"), Ke = "1.5.0", et = {
410
+ install(e, n) {
411
+ const r = (n == null ? void 0 : n.prefix) || "Tres";
412
+ e.component(`${r}Canvas`, Ge), e.component(`${r}Scene`, He);
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);
392
418
  }), window.__TRES__ = {
393
419
  app: e,
394
- version: Ge
420
+ version: Ke
395
421
  };
396
422
  }
397
423
  };
398
424
  export {
399
425
  $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
426
+ Ze as UseTresStateSymbol,
427
+ et as default,
428
+ ke as trasverseObjects,
429
+ oe as useCamera,
430
+ se as useCatalogue,
431
+ ie as useInstanceCreator,
432
+ Xe as useLoader,
433
+ fe as useRenderLoop,
434
+ We as useRenderer,
435
+ pe as useScene,
436
+ Ye as useTexture,
437
+ me as useTres
412
438
  };
package/dist/tres.umd.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v1.3.3
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(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(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.3.3",
4
+ "version": "1.5.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": {
@@ -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",
@@ -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",