@tresjs/core 2.4.0-next.6 → 2.4.0-next.8

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