@tresjs/core 3.6.0-next.0 → 3.6.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.
@@ -30,6 +30,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
30
30
  failIfMajorPerformanceCaveat: undefined;
31
31
  }>, {
32
32
  context: Ref<TresContext | null> | import("vue").ShallowRef<TresContext | null>;
33
+ dispose: () => void;
33
34
  }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<TresCanvasProps>, {
34
35
  alpha: undefined;
35
36
  depth: undefined;
@@ -1052,9 +1052,7 @@ export declare const useCamera: ({ sizes, scene }: Pick<TresContext, "sizes"> &
1052
1052
  clone: () => import("three").AnimationClip;
1053
1053
  toJSON: (clip: import("three").AnimationClip) => any;
1054
1054
  }[];
1055
- userData: {
1056
- [key: string]: any;
1057
- };
1055
+ userData: Record<string, any>;
1058
1056
  customDepthMaterial?: {
1059
1057
  alphaHash: boolean;
1060
1058
  alphaTest: number;
@@ -1259,7 +1257,7 @@ export declare const useCamera: ({ sizes, scene }: Pick<TresContext, "sizes"> &
1259
1257
  uuid: string;
1260
1258
  vertexColors: boolean;
1261
1259
  visible: boolean;
1262
- userData: any;
1260
+ userData: Record<string, any>;
1263
1261
  version: number;
1264
1262
  clone: () => import("three").Material;
1265
1263
  copy: (material: import("three").Material) => import("three").Material;
@@ -1494,7 +1492,7 @@ export declare const useCamera: ({ sizes, scene }: Pick<TresContext, "sizes"> &
1494
1492
  uuid: string;
1495
1493
  vertexColors: boolean;
1496
1494
  visible: boolean;
1497
- userData: any;
1495
+ userData: Record<string, any>;
1498
1496
  version: number;
1499
1497
  clone: () => import("three").Material;
1500
1498
  copy: (material: import("three").Material) => import("three").Material;
@@ -1525,6 +1523,8 @@ export declare const useCamera: ({ sizes, scene }: Pick<TresContext, "sizes"> &
1525
1523
  dispose: {};
1526
1524
  }[T_6]) => void;
1527
1525
  } | undefined;
1526
+ onBeforeShadow: (renderer: import("three").WebGLRenderer, scene: import("three").Scene, shadowCamera: Camera, geometry: import("three").BufferGeometry<import("three").NormalBufferAttributes>, depthMaterial: import("three").Material, group: import("three").Group<import("three").Object3DEventMap>) => void;
1527
+ onAfterShadow: (renderer: import("three").WebGLRenderer, scene: import("three").Scene, shadowCamera: Camera, geometry: import("three").BufferGeometry<import("three").NormalBufferAttributes>, depthMaterial: import("three").Material, group: import("three").Group<import("three").Object3DEventMap>) => void;
1528
1528
  onBeforeRender: (renderer: import("three").WebGLRenderer, scene: import("three").Scene, camera: Camera, geometry: import("three").BufferGeometry<import("three").NormalBufferAttributes>, material: import("three").Material, group: import("three").Group<import("three").Object3DEventMap>) => void;
1529
1529
  onAfterRender: (renderer: import("three").WebGLRenderer, scene: import("three").Scene, camera: Camera, geometry: import("three").BufferGeometry<import("three").NormalBufferAttributes>, material: import("three").Material, group: import("three").Group<import("three").Object3DEventMap>) => void;
1530
1530
  applyMatrix4: (matrix: import("three").Matrix4) => void;
@@ -1556,7 +1556,7 @@ export declare const useCamera: ({ sizes, scene }: Pick<TresContext, "sizes"> &
1556
1556
  getObjectById: (id: number) => import("three").Object3D<import("three").Object3DEventMap> | undefined;
1557
1557
  getObjectByName: (name: string) => import("three").Object3D<import("three").Object3DEventMap> | undefined;
1558
1558
  getObjectByProperty: (name: string, value: any) => import("three").Object3D<import("three").Object3DEventMap> | undefined;
1559
- getObjectsByProperty: (name: string, value: any) => import("three").Object3D<import("three").Object3DEventMap>[];
1559
+ getObjectsByProperty: (name: string, value: any, optionalTarget?: import("three").Object3D<import("three").Object3DEventMap>[] | undefined) => import("three").Object3D<import("three").Object3DEventMap>[];
1560
1560
  getWorldPosition: (target: import("three").Vector3) => import("three").Vector3;
1561
1561
  getWorldQuaternion: (target: import("three").Quaternion) => import("three").Quaternion;
1562
1562
  getWorldScale: (target: import("three").Vector3) => import("three").Vector3;
@@ -2440,9 +2440,7 @@ export declare const useCamera: ({ sizes, scene }: Pick<TresContext, "sizes"> &
2440
2440
  clone: () => import("three").AnimationClip;
2441
2441
  toJSON: (clip: import("three").AnimationClip) => any;
2442
2442
  }[];
2443
- userData: {
2444
- [key: string]: any;
2445
- };
2443
+ userData: Record<string, any>;
2446
2444
  customDepthMaterial?: {
2447
2445
  alphaHash: boolean;
2448
2446
  alphaTest: number;
@@ -2647,7 +2645,7 @@ export declare const useCamera: ({ sizes, scene }: Pick<TresContext, "sizes"> &
2647
2645
  uuid: string;
2648
2646
  vertexColors: boolean;
2649
2647
  visible: boolean;
2650
- userData: any;
2648
+ userData: Record<string, any>;
2651
2649
  version: number;
2652
2650
  clone: () => import("three").Material;
2653
2651
  copy: (material: import("three").Material) => import("three").Material;
@@ -2882,7 +2880,7 @@ export declare const useCamera: ({ sizes, scene }: Pick<TresContext, "sizes"> &
2882
2880
  uuid: string;
2883
2881
  vertexColors: boolean;
2884
2882
  visible: boolean;
2885
- userData: any;
2883
+ userData: Record<string, any>;
2886
2884
  version: number;
2887
2885
  clone: () => import("three").Material;
2888
2886
  copy: (material: import("three").Material) => import("three").Material;
@@ -2913,6 +2911,8 @@ export declare const useCamera: ({ sizes, scene }: Pick<TresContext, "sizes"> &
2913
2911
  dispose: {};
2914
2912
  }[T_6]) => void;
2915
2913
  } | undefined;
2914
+ onBeforeShadow: (renderer: import("three").WebGLRenderer, scene: import("three").Scene, shadowCamera: Camera, geometry: import("three").BufferGeometry<import("three").NormalBufferAttributes>, depthMaterial: import("three").Material, group: import("three").Group<import("three").Object3DEventMap>) => void;
2915
+ onAfterShadow: (renderer: import("three").WebGLRenderer, scene: import("three").Scene, shadowCamera: Camera, geometry: import("three").BufferGeometry<import("three").NormalBufferAttributes>, depthMaterial: import("three").Material, group: import("three").Group<import("three").Object3DEventMap>) => void;
2916
2916
  onBeforeRender: (renderer: import("three").WebGLRenderer, scene: import("three").Scene, camera: Camera, geometry: import("three").BufferGeometry<import("three").NormalBufferAttributes>, material: import("three").Material, group: import("three").Group<import("three").Object3DEventMap>) => void;
2917
2917
  onAfterRender: (renderer: import("three").WebGLRenderer, scene: import("three").Scene, camera: Camera, geometry: import("three").BufferGeometry<import("three").NormalBufferAttributes>, material: import("three").Material, group: import("three").Group<import("three").Object3DEventMap>) => void;
2918
2918
  applyMatrix4: (matrix: import("three").Matrix4) => void;
@@ -2944,7 +2944,7 @@ export declare const useCamera: ({ sizes, scene }: Pick<TresContext, "sizes"> &
2944
2944
  getObjectById: (id: number) => import("three").Object3D<import("three").Object3DEventMap> | undefined;
2945
2945
  getObjectByName: (name: string) => import("three").Object3D<import("three").Object3DEventMap> | undefined;
2946
2946
  getObjectByProperty: (name: string, value: any) => import("three").Object3D<import("three").Object3DEventMap> | undefined;
2947
- getObjectsByProperty: (name: string, value: any) => import("three").Object3D<import("three").Object3DEventMap>[];
2947
+ getObjectsByProperty: (name: string, value: any, optionalTarget?: import("three").Object3D<import("three").Object3DEventMap>[] | undefined) => import("three").Object3D<import("three").Object3DEventMap>[];
2948
2948
  getWorldPosition: (target: import("three").Vector3) => import("three").Vector3;
2949
2949
  getWorldQuaternion: (target: import("three").Quaternion) => import("three").Quaternion;
2950
2950
  getWorldScale: (target: import("three").Vector3) => import("three").Vector3;
@@ -3809,9 +3809,7 @@ export declare const useCamera: ({ sizes, scene }: Pick<TresContext, "sizes"> &
3809
3809
  clone: () => import("three").AnimationClip;
3810
3810
  toJSON: (clip: import("three").AnimationClip) => any;
3811
3811
  }[];
3812
- userData: {
3813
- [key: string]: any;
3814
- };
3812
+ userData: Record<string, any>;
3815
3813
  customDepthMaterial?: {
3816
3814
  alphaHash: boolean;
3817
3815
  alphaTest: number;
@@ -4016,7 +4014,7 @@ export declare const useCamera: ({ sizes, scene }: Pick<TresContext, "sizes"> &
4016
4014
  uuid: string;
4017
4015
  vertexColors: boolean;
4018
4016
  visible: boolean;
4019
- userData: any;
4017
+ userData: Record<string, any>;
4020
4018
  version: number;
4021
4019
  clone: () => import("three").Material;
4022
4020
  copy: (material: import("three").Material) => import("three").Material;
@@ -4251,7 +4249,7 @@ export declare const useCamera: ({ sizes, scene }: Pick<TresContext, "sizes"> &
4251
4249
  uuid: string;
4252
4250
  vertexColors: boolean;
4253
4251
  visible: boolean;
4254
- userData: any;
4252
+ userData: Record<string, any>;
4255
4253
  version: number;
4256
4254
  clone: () => import("three").Material;
4257
4255
  copy: (material: import("three").Material) => import("three").Material;
@@ -4282,6 +4280,8 @@ export declare const useCamera: ({ sizes, scene }: Pick<TresContext, "sizes"> &
4282
4280
  dispose: {};
4283
4281
  }[T_6]) => void;
4284
4282
  } | undefined;
4283
+ onBeforeShadow: (renderer: import("three").WebGLRenderer, scene: import("three").Scene, shadowCamera: Camera, geometry: import("three").BufferGeometry<import("three").NormalBufferAttributes>, depthMaterial: import("three").Material, group: import("three").Group<import("three").Object3DEventMap>) => void;
4284
+ onAfterShadow: (renderer: import("three").WebGLRenderer, scene: import("three").Scene, shadowCamera: Camera, geometry: import("three").BufferGeometry<import("three").NormalBufferAttributes>, depthMaterial: import("three").Material, group: import("three").Group<import("three").Object3DEventMap>) => void;
4285
4285
  onBeforeRender: (renderer: import("three").WebGLRenderer, scene: import("three").Scene, camera: Camera, geometry: import("three").BufferGeometry<import("three").NormalBufferAttributes>, material: import("three").Material, group: import("three").Group<import("three").Object3DEventMap>) => void;
4286
4286
  onAfterRender: (renderer: import("three").WebGLRenderer, scene: import("three").Scene, camera: Camera, geometry: import("three").BufferGeometry<import("three").NormalBufferAttributes>, material: import("three").Material, group: import("three").Group<import("three").Object3DEventMap>) => void;
4287
4287
  applyMatrix4: (matrix: import("three").Matrix4) => void;
@@ -4313,7 +4313,7 @@ export declare const useCamera: ({ sizes, scene }: Pick<TresContext, "sizes"> &
4313
4313
  getObjectById: (id: number) => import("three").Object3D<import("three").Object3DEventMap> | undefined;
4314
4314
  getObjectByName: (name: string) => import("three").Object3D<import("three").Object3DEventMap> | undefined;
4315
4315
  getObjectByProperty: (name: string, value: any) => import("three").Object3D<import("three").Object3DEventMap> | undefined;
4316
- getObjectsByProperty: (name: string, value: any) => import("three").Object3D<import("three").Object3DEventMap>[];
4316
+ getObjectsByProperty: (name: string, value: any, optionalTarget?: import("three").Object3D<import("three").Object3DEventMap>[] | undefined) => import("three").Object3D<import("three").Object3DEventMap>[];
4317
4317
  getWorldPosition: (target: import("three").Vector3) => import("three").Vector3;
4318
4318
  getWorldQuaternion: (target: import("three").Quaternion) => import("three").Quaternion;
4319
4319
  getWorldScale: (target: import("three").Vector3) => import("three").Vector3;
package/dist/tres.js CHANGED
@@ -1,27 +1,27 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v3.6.0-next.0
3
+ * version: v3.6.0
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 S, computed as k, watchEffect as D, onUnmounted as $, shallowRef as L, watch as re, reactive as pe, readonly as ve, provide as V, inject as de, createRenderer as ge, defineComponent as q, useSlots as ye, getCurrentInstance as J, onMounted as we, openBlock as Ee, createElementBlock as _e, normalizeClass as Ce, normalizeStyle as Me, h as K, Fragment as he } from "vue";
8
+ import { ref as B, computed as b, watchEffect as D, onUnmounted as $, shallowRef as L, watch as re, reactive as pe, readonly as de, provide as V, inject as ve, createRenderer as ge, defineComponent as q, useSlots as ye, getCurrentInstance as J, onMounted as we, openBlock as Ee, createElementBlock as Ce, normalizeClass as _e, normalizeStyle as Me, h as K, Fragment as he } from "vue";
9
9
  import * as Pe from "three";
10
- import { PerspectiveCamera as G, OrthographicCamera as Ae, Camera as ke, Clock as be, Vector3 as De, Color as F, REVISION as Te, SRGBColorSpace as Le, ACESFilmicToneMapping as xe, PCFSoftShadowMap as Se, WebGLRenderer as I, LoadingManager as Be, TextureLoader as Oe, Vector2 as Re, Raycaster as He, BufferAttribute as Fe, Scene as je } from "three";
11
- import { createEventHook as x, useRafFn as ne, toValue as h, unrefElement as ze, useDevicePixelRatio as $e, usePointer as Ne, useElementBounding as Ie, useWindowSize as Ve, useElementSize as Ge, useFps as We, useMemory as Ue } from "@vueuse/core";
10
+ import { PerspectiveCamera as G, OrthographicCamera as Ae, Camera as ke, Clock as be, Vector3 as De, Color as F, REVISION as Te, SRGBColorSpace as Le, ACESFilmicToneMapping as Se, PCFSoftShadowMap as Be, WebGLRenderer as I, LoadingManager as xe, TextureLoader as Oe, Vector2 as Re, Raycaster as He, BufferAttribute as Fe, Scene as je } from "three";
11
+ import { createEventHook as S, useRafFn as ne, toValue as M, unrefElement as ze, useDevicePixelRatio as $e, usePointer as Ne, useElementBounding as Ie, useWindowSize as Ve, useElementSize as Ge, useFps as We, useMemory as Ue } from "@vueuse/core";
12
12
  const Ye = ({ sizes: e, scene: a }) => {
13
- const t = S([]), r = k(
13
+ const t = B([]), r = b(
14
14
  () => t.value[0]
15
- ), n = (s, c = !1) => {
16
- t.value.some(({ uuid: i }) => i === s.uuid) || (c ? l(s) : t.value.push(s));
15
+ ), n = (s, l = !1) => {
16
+ t.value.some(({ uuid: i }) => i === s.uuid) || (l ? c(s) : t.value.push(s));
17
17
  }, o = (s) => {
18
- t.value = t.value.filter(({ uuid: c }) => c !== s.uuid);
19
- }, l = (s) => {
20
- const c = s instanceof ke ? s : t.value.find((p) => p.uuid === s);
21
- if (!c)
18
+ t.value = t.value.filter(({ uuid: l }) => l !== s.uuid);
19
+ }, c = (s) => {
20
+ const l = s instanceof ke ? s : t.value.find((p) => p.uuid === s);
21
+ if (!l)
22
22
  return;
23
- const i = t.value.filter(({ uuid: p }) => p !== c.uuid);
24
- t.value = [c, ...i];
23
+ const i = t.value.filter(({ uuid: p }) => p !== l.uuid);
24
+ t.value = [l, ...i];
25
25
  };
26
26
  return D(() => {
27
27
  e.aspectRatio.value && t.value.forEach((s) => {
@@ -34,9 +34,9 @@ const Ye = ({ sizes: e, scene: a }) => {
34
34
  cameras: t,
35
35
  registerCamera: n,
36
36
  deregisterCamera: o,
37
- setCameraActive: l
37
+ setCameraActive: c
38
38
  };
39
- }, ae = x(), oe = x(), U = x(), T = new be();
39
+ }, ae = S(), oe = S(), U = S(), T = new be();
40
40
  let j = 0, z = 0;
41
41
  const { pause: qe, resume: Je, isActive: Ke } = ne(
42
42
  () => {
@@ -55,7 +55,7 @@ const se = () => ({
55
55
  resume: Je,
56
56
  isActive: Ke
57
57
  }), Pt = !0, X = "[TresJS ▲ ■ ●] ";
58
- function B() {
58
+ function x() {
59
59
  function e(r, n) {
60
60
  console.error(`${X} ${r}`, n || "");
61
61
  }
@@ -107,12 +107,12 @@ const tt = (e, a) => {
107
107
  return t == null ? void 0 : t.reduce((r, n) => r && r[n], e);
108
108
  }, rt = (e, a, t) => {
109
109
  const r = Array.isArray(a) ? a : a.match(/([^[.\]])+/g);
110
- r && r.reduce((n, o, l) => (n[o] === void 0 && (n[o] = {}), l === r.length - 1 && (n[o] = t), n[o]), e);
110
+ r && r.reduce((n, o, c) => (n[o] === void 0 && (n[o] = {}), c === r.length - 1 && (n[o] = t), n[o]), e);
111
111
  };
112
112
  function ue(e, a) {
113
113
  if (Q(e) && Q(a)) {
114
114
  const n = e.attributes, o = a.attributes;
115
- return n.length !== o.length ? !1 : Array.from(n).every(({ name: l, value: s }) => a.getAttribute(l) === s);
115
+ return n.length !== o.length ? !1 : Array.from(n).every(({ name: c, value: s }) => a.getAttribute(c) === s);
116
116
  }
117
117
  if (e === a)
118
118
  return !0;
@@ -139,11 +139,11 @@ const at = Array.isArray, ot = Number.parseInt(Te.replace("dev", "")), H = {
139
139
  shadows: !0,
140
140
  physicallyCorrectLights: !0,
141
141
  outputColorSpace: Le,
142
- toneMapping: xe,
142
+ toneMapping: Se,
143
143
  toneMappingExposure: 3,
144
144
  shadowMap: {
145
145
  enabled: !0,
146
- type: Se
146
+ type: Be
147
147
  }
148
148
  }
149
149
  };
@@ -154,65 +154,65 @@ function st({
154
154
  disableRender: r,
155
155
  contextParts: { sizes: n, camera: o }
156
156
  }) {
157
- const l = k(() => ({
158
- alpha: h(t.alpha),
159
- depth: h(t.depth),
157
+ const c = b(() => ({
158
+ alpha: M(t.alpha),
159
+ depth: M(t.depth),
160
160
  canvas: ze(a),
161
- context: h(t.context),
162
- stencil: h(t.stencil),
163
- antialias: h(t.antialias) === void 0 ? !0 : h(t.antialias),
164
- precision: h(t.precision),
165
- powerPreference: h(t.powerPreference),
166
- premultipliedAlpha: h(t.premultipliedAlpha),
167
- preserveDrawingBuffer: h(t.preserveDrawingBuffer),
168
- logarithmicDepthBuffer: h(t.logarithmicDepthBuffer),
169
- failIfMajorPerformanceCaveat: h(t.failIfMajorPerformanceCaveat)
170
- })), s = L(new I(l.value));
171
- re(l, () => {
172
- s.value.dispose(), s.value = new I(l.value);
161
+ context: M(t.context),
162
+ stencil: M(t.stencil),
163
+ antialias: M(t.antialias) === void 0 ? !0 : M(t.antialias),
164
+ precision: M(t.precision),
165
+ powerPreference: M(t.powerPreference),
166
+ premultipliedAlpha: M(t.premultipliedAlpha),
167
+ preserveDrawingBuffer: M(t.preserveDrawingBuffer),
168
+ logarithmicDepthBuffer: M(t.logarithmicDepthBuffer),
169
+ failIfMajorPerformanceCaveat: M(t.failIfMajorPerformanceCaveat)
170
+ })), s = L(new I(c.value));
171
+ re(c, () => {
172
+ s.value.dispose(), s.value = new I(c.value);
173
173
  }), D(() => {
174
174
  s.value.setSize(n.width.value, n.height.value);
175
175
  });
176
- const { pixelRatio: c } = $e();
176
+ const { pixelRatio: l } = $e();
177
177
  D(() => {
178
- s.value.setPixelRatio(c.value);
178
+ s.value.setPixelRatio(l.value);
179
179
  });
180
- const { logError: i } = B(), f = (() => {
181
- const d = new I(), C = {
180
+ const { logError: i } = x(), f = (() => {
181
+ const m = new I(), w = {
182
182
  shadowMap: {
183
- enabled: d.shadowMap.enabled,
184
- type: d.shadowMap.type
183
+ enabled: m.shadowMap.enabled,
184
+ type: m.shadowMap.type
185
185
  },
186
- toneMapping: d.toneMapping,
187
- toneMappingExposure: d.toneMappingExposure,
188
- outputColorSpace: d.outputColorSpace
186
+ toneMapping: m.toneMapping,
187
+ toneMappingExposure: m.toneMappingExposure,
188
+ outputColorSpace: m.outputColorSpace
189
189
  };
190
- return d.dispose(), C;
190
+ return m.dispose(), w;
191
191
  })();
192
192
  D(() => {
193
- const d = h(t.preset);
194
- d && (d in H || i(`Renderer Preset must be one of these: ${Object.keys(H).join(", ")}`), ie(s.value, H[d]));
195
- const C = (E, _) => {
196
- const A = h(E), b = () => {
197
- if (d)
198
- return Z(H[d], _);
193
+ const m = M(t.preset);
194
+ m && (m in H || i(`Renderer Preset must be one of these: ${Object.keys(H).join(", ")}`), ie(s.value, H[m]));
195
+ const w = (P, A) => {
196
+ const C = M(P), k = () => {
197
+ if (m)
198
+ return Z(H[m], A);
199
199
  };
200
- if (A !== void 0)
201
- return A;
202
- const g = b();
203
- return g !== void 0 ? g : Z(f, _);
204
- }, w = (E, _) => rt(s.value, _, C(E, _));
205
- w(t.shadows, "shadowMap.enabled"), w(t.toneMapping, "toneMapping"), w(t.shadowMapType, "shadowMap.type"), ot < 150 && w(!t.useLegacyLights, "physicallyCorrectLights"), w(t.outputColorSpace, "outputColorSpace"), w(t.toneMappingExposure, "toneMappingExposure");
206
- const P = C(t.clearColor, "clearColor");
207
- P && s.value.setClearColor(
208
- P ? Xe(P) : new F(0)
200
+ if (C !== void 0)
201
+ return C;
202
+ const g = k();
203
+ return g !== void 0 ? g : Z(f, A);
204
+ }, d = (P, A) => rt(s.value, A, w(P, A));
205
+ d(t.shadows, "shadowMap.enabled"), d(t.toneMapping, "toneMapping"), d(t.shadowMapType, "shadowMap.type"), ot < 150 && d(!t.useLegacyLights, "physicallyCorrectLights"), d(t.outputColorSpace, "outputColorSpace"), d(t.toneMappingExposure, "toneMappingExposure");
206
+ const h = w(t.clearColor, "clearColor");
207
+ h && s.value.setClearColor(
208
+ h ? Xe(h) : new F(0)
209
209
  // default clear color is not easily/efficiently retrievable from three
210
210
  );
211
211
  });
212
- const { pause: u, resume: m, onLoop: v } = se();
213
- return v(() => {
214
- o.value && !h(r) && s.value.render(e, o.value);
215
- }), m(), $(() => {
212
+ const { pause: u, resume: v, onLoop: E } = se();
213
+ return E(() => {
214
+ o.value && !M(r) && s.value.render(e, o.value);
215
+ }), v(), $(() => {
216
216
  u(), s.value.dispose(), s.value.forceContextLoss();
217
217
  }), {
218
218
  renderer: s
@@ -226,11 +226,11 @@ function ut(e) {
226
226
  }), a;
227
227
  }
228
228
  async function kt(e, a, t, r, n) {
229
- const { logError: o } = B(), l = new e();
230
- n && n(l), t && t(l);
231
- const c = (Array.isArray(a) ? a : [a]).map(
229
+ const { logError: o } = x(), c = new e();
230
+ n && n(c), t && t(c);
231
+ const l = (Array.isArray(a) ? a : [a]).map(
232
232
  (i) => new Promise((p, f) => {
233
- l.load(
233
+ c.load(
234
234
  i,
235
235
  (u) => {
236
236
  u.scene && Object.assign(u, ut(u.scene)), p(u);
@@ -240,16 +240,16 @@ async function kt(e, a, t, r, n) {
240
240
  );
241
241
  })
242
242
  );
243
- return it(a) ? await Promise.all(c) : await c[0];
243
+ return it(a) ? await Promise.all(l) : await l[0];
244
244
  }
245
245
  async function bt(e) {
246
- const a = new Be(), t = new Oe(a), r = (n) => new Promise((o, l) => {
246
+ const a = new xe(), t = new Oe(a), r = (n) => new Promise((o, c) => {
247
247
  t.load(
248
248
  n,
249
249
  (s) => o(s),
250
250
  () => null,
251
251
  () => {
252
- l(new Error("[useTextures] - Failed to load texture"));
252
+ c(new Error("[useTextures] - Failed to load texture"));
253
253
  }
254
254
  );
255
255
  });
@@ -260,9 +260,9 @@ async function bt(e) {
260
260
  const {
261
261
  map: n,
262
262
  displacementMap: o,
263
- normalMap: l,
263
+ normalMap: c,
264
264
  roughnessMap: s,
265
- metalnessMap: c,
265
+ metalnessMap: l,
266
266
  aoMap: i,
267
267
  alphaMap: p,
268
268
  matcap: f
@@ -270,9 +270,9 @@ async function bt(e) {
270
270
  return {
271
271
  map: n ? await r(n) : null,
272
272
  displacementMap: o ? await r(o) : null,
273
- normalMap: l ? await r(l) : null,
273
+ normalMap: c ? await r(c) : null,
274
274
  roughnessMap: s ? await r(s) : null,
275
- metalnessMap: c ? await r(c) : null,
275
+ metalnessMap: l ? await r(l) : null,
276
276
  aoMap: i ? await r(i) : null,
277
277
  alphaMap: p ? await r(p) : null,
278
278
  matcap: f ? await r(f) : null
@@ -280,61 +280,61 @@ async function bt(e) {
280
280
  }
281
281
  }
282
282
  const lt = (e, { renderer: a, camera: t, raycaster: r }) => {
283
- const n = k(() => a.value.domElement), { x: o, y: l } = Ne({ target: n }), { width: s, height: c, top: i, left: p } = Ie(n), f = ({ x: g, y: M }) => {
283
+ const n = b(() => a.value.domElement), { x: o, y: c } = Ne({ target: n }), { width: s, height: l, top: i, left: p } = Ie(n), f = ({ x: g, y: _ }) => {
284
284
  if (n.value)
285
285
  return {
286
286
  x: (g - p.value) / s.value * 2 - 1,
287
- y: -((M - i.value) / c.value) * 2 + 1
287
+ y: -((_ - i.value) / l.value) * 2 + 1
288
288
  };
289
- }, u = ({ x: g, y: M }) => {
289
+ }, u = ({ x: g, y: _ }) => {
290
290
  if (t.value)
291
- return r.value.setFromCamera(new Re(g, M), t.value), r.value.intersectObjects(e.value, !1);
292
- }, m = (g) => {
293
- const M = f({
291
+ return r.value.setFromCamera(new Re(g, _), t.value), r.value.intersectObjects(e.value, !1);
292
+ }, v = (g) => {
293
+ const _ = f({
294
294
  x: (g == null ? void 0 : g.clientX) ?? o.value,
295
- y: (g == null ? void 0 : g.clientY) ?? l.value
295
+ y: (g == null ? void 0 : g.clientY) ?? c.value
296
296
  });
297
- return M ? u(M) || [] : [];
298
- }, v = k(() => m()), d = x(), C = x(), w = (g, M) => {
299
- g.trigger({ event: M, intersects: m(M) });
300
- }, P = (g) => {
301
- w(C, g);
297
+ return _ ? u(_) || [] : [];
298
+ }, E = b(() => v()), m = S(), w = S(), d = (g, _) => {
299
+ g.trigger({ event: _, intersects: v(_) });
300
+ }, h = (g) => {
301
+ d(w, g);
302
302
  };
303
- let E;
304
- const _ = (g) => {
305
- var M;
306
- E = (M = m(g)[0]) == null ? void 0 : M.object;
307
- }, A = (g) => {
308
- var M;
309
- g instanceof PointerEvent && E === ((M = m(g)[0]) == null ? void 0 : M.object) && w(d, g);
310
- }, b = (g) => C.trigger({ event: g, intersects: [] });
311
- return n.value.addEventListener("pointerup", A), n.value.addEventListener("pointerdown", _), n.value.addEventListener("pointermove", P), n.value.addEventListener("pointerleave", b), $(() => {
312
- n != null && n.value && (n.value.removeEventListener("pointerup", A), n.value.removeEventListener("pointerdown", _), n.value.removeEventListener("pointermove", P), n.value.removeEventListener("pointerleave", b));
303
+ let P;
304
+ const A = (g) => {
305
+ var _;
306
+ P = (_ = v(g)[0]) == null ? void 0 : _.object;
307
+ }, C = (g) => {
308
+ var _;
309
+ g instanceof PointerEvent && P === ((_ = v(g)[0]) == null ? void 0 : _.object) && d(m, g);
310
+ }, k = (g) => w.trigger({ event: g, intersects: [] });
311
+ return n.value.addEventListener("pointerup", C), n.value.addEventListener("pointerdown", A), n.value.addEventListener("pointermove", h), n.value.addEventListener("pointerleave", k), $(() => {
312
+ n != null && n.value && (n.value.removeEventListener("pointerup", C), n.value.removeEventListener("pointerdown", A), n.value.removeEventListener("pointermove", h), n.value.removeEventListener("pointerleave", k));
313
313
  }), {
314
- intersects: v,
315
- onClick: (g) => d.on(g).off,
316
- onPointerMove: (g) => C.on(g).off
314
+ intersects: E,
315
+ onClick: (g) => m.on(g).off,
316
+ onPointerMove: (g) => w.on(g).off
317
317
  };
318
318
  };
319
319
  function Dt() {
320
- const { logWarning: e } = B();
321
- function a(o, l, s) {
322
- let c = null;
320
+ const { logWarning: e } = x();
321
+ function a(o, c, s) {
322
+ let l = null;
323
323
  return o.traverse((i) => {
324
- i[l] === s && (c = i);
325
- }), c || e(`Child with ${l} '${s}' not found.`), c;
324
+ i[c] === s && (l = i);
325
+ }), l || e(`Child with ${c} '${s}' not found.`), l;
326
326
  }
327
- function t(o, l, s) {
328
- const c = [];
327
+ function t(o, c, s) {
328
+ const l = [];
329
329
  return o.traverse((i) => {
330
- i[l].includes(s) && c.push(i);
331
- }), c.length || e(`Children with ${l} '${s}' not found.`), c;
330
+ i[c].includes(s) && l.push(i);
331
+ }), l.length || e(`Children with ${c} '${s}' not found.`), l;
332
332
  }
333
- function r(o, l) {
334
- return a(o, "name", l);
333
+ function r(o, c) {
334
+ return a(o, "name", c);
335
335
  }
336
- function n(o, l) {
337
- return t(o, "name", l);
336
+ function n(o, c) {
337
+ return t(o, "name", c);
338
338
  }
339
339
  return {
340
340
  seek: a,
@@ -349,18 +349,18 @@ const ct = ({ scene: e, contextParts: a }) => {
349
349
  pointerMove: /* @__PURE__ */ new Map(),
350
350
  pointerEnter: /* @__PURE__ */ new Map(),
351
351
  pointerLeave: /* @__PURE__ */ new Map()
352
- }), r = S(/* @__PURE__ */ new Set()), n = (u) => {
352
+ }), r = B(/* @__PURE__ */ new Set()), n = (u) => {
353
353
  r.value.add(u);
354
354
  }, o = (u) => {
355
355
  r.value.delete(u);
356
- }, l = (u) => {
357
- Object.values(t).forEach((m) => m.delete(u)), o(u);
356
+ }, c = (u) => {
357
+ Object.values(t).forEach((v) => v.delete(u)), o(u);
358
358
  }, s = (u) => {
359
- const { onClick: m, onPointerMove: v, onPointerEnter: d, onPointerLeave: C } = u;
360
- m && t.click.set(u, m), v && t.pointerMove.set(u, v), d && t.pointerEnter.set(u, d), C && t.pointerLeave.set(u, C);
359
+ const { onClick: v, onPointerMove: E, onPointerEnter: m, onPointerLeave: w } = u;
360
+ v && t.click.set(u, v), E && t.pointerMove.set(u, E), m && t.pointerEnter.set(u, m), w && t.pointerLeave.set(u, w);
361
361
  };
362
- e.userData.tres__registerAtPointerEventHandler = s, e.userData.tres__deregisterAtPointerEventHandler = l, e.userData.tres__registerBlockingObjectAtPointerEventHandler = n, e.userData.tres__deregisterBlockingObjectAtPointerEventHandler = o;
363
- const c = k(
362
+ e.userData.tres__registerAtPointerEventHandler = s, e.userData.tres__deregisterAtPointerEventHandler = c, e.userData.tres__registerBlockingObjectAtPointerEventHandler = n, e.userData.tres__deregisterBlockingObjectAtPointerEventHandler = o;
363
+ const l = b(
364
364
  () => tt(
365
365
  [
366
366
  ...Array.from(r.value),
@@ -368,31 +368,31 @@ const ct = ({ scene: e, contextParts: a }) => {
368
368
  ],
369
369
  ({ uuid: u }) => u
370
370
  )
371
- ), { onClick: i, onPointerMove: p } = lt(c, a);
372
- i(({ intersects: u, event: m }) => {
373
- var v;
374
- u.length && ((v = t.click.get(u[0].object)) == null || v(u[0], m));
371
+ ), { onClick: i, onPointerMove: p } = lt(l, a);
372
+ i(({ intersects: u, event: v }) => {
373
+ var E;
374
+ u.length && ((E = t.click.get(u[0].object)) == null || E(u[0], v));
375
375
  });
376
376
  let f;
377
- return p(({ intersects: u, event: m }) => {
378
- var P, E, _, A;
379
- const v = (P = u == null ? void 0 : u[0]) == null ? void 0 : P.object, { pointerLeave: d, pointerEnter: C, pointerMove: w } = t;
380
- f && f !== v && ((E = d.get(f)) == null || E(f, m)), v && (f !== v && ((_ = C.get(v)) == null || _(u[0], m)), (A = w.get(v)) == null || A(u[0], m)), f = v || null;
377
+ return p(({ intersects: u, event: v }) => {
378
+ var h, P, A, C;
379
+ const E = (h = u == null ? void 0 : u[0]) == null ? void 0 : h.object, { pointerLeave: m, pointerEnter: w, pointerMove: d } = t;
380
+ f && f !== E && ((P = m.get(f)) == null || P(f, v)), E && (f !== E && ((A = w.get(E)) == null || A(u[0], v)), (C = d.get(E)) == null || C(u[0], v)), f = E || null;
381
381
  }), {
382
382
  registerObject: s,
383
- deregisterObject: l
383
+ deregisterObject: c
384
384
  };
385
385
  };
386
386
  function ft(e) {
387
387
  let a = 0;
388
388
  return e.traverse((t) => {
389
389
  if (t.isMesh && t.geometry) {
390
- const r = t.geometry, n = r.attributes.position.count * 3 * Float32Array.BYTES_PER_ELEMENT, o = r.index ? r.index.count * Uint32Array.BYTES_PER_ELEMENT : 0, l = r.attributes.normal ? r.attributes.normal.count * 3 * Float32Array.BYTES_PER_ELEMENT : 0, s = r.attributes.uv ? r.attributes.uv.count * 2 * Float32Array.BYTES_PER_ELEMENT : 0, c = n + o + l + s;
391
- a += c;
390
+ const r = t.geometry, n = r.attributes.position.count * 3 * Float32Array.BYTES_PER_ELEMENT, o = r.index ? r.index.count * Uint32Array.BYTES_PER_ELEMENT : 0, c = r.attributes.normal ? r.attributes.normal.count * 3 * Float32Array.BYTES_PER_ELEMENT : 0, s = r.attributes.uv ? r.attributes.uv.count * 2 * Float32Array.BYTES_PER_ELEMENT : 0, l = n + o + c + s;
391
+ a += l;
392
392
  }
393
393
  }), a;
394
394
  }
395
- const W = S({}), Y = (e) => Object.assign(W.value, e);
395
+ const W = B({}), Y = (e) => Object.assign(W.value, e);
396
396
  function mt({
397
397
  scene: e,
398
398
  canvas: a,
@@ -400,19 +400,19 @@ function mt({
400
400
  disableRender: r,
401
401
  rendererOptions: n
402
402
  }) {
403
- const o = k(
404
- () => h(t) ? Ve() : Ge(h(a).parentElement)
405
- ), l = k(() => o.value.width.value), s = k(() => o.value.height.value), c = k(() => l.value / s.value), i = {
403
+ const o = b(
404
+ () => M(t) ? Ve() : Ge(M(a).parentElement)
405
+ ), c = b(() => o.value.width.value), s = b(() => o.value.height.value), l = b(() => c.value / s.value), i = {
406
406
  height: s,
407
- width: l,
408
- aspectRatio: c
407
+ width: c,
408
+ aspectRatio: l
409
409
  }, p = L(e), {
410
410
  camera: f,
411
411
  cameras: u,
412
- registerCamera: m,
413
- deregisterCamera: v,
414
- setCameraActive: d
415
- } = Ye({ sizes: i, scene: e }), { renderer: C } = st(
412
+ registerCamera: v,
413
+ deregisterCamera: E,
414
+ setCameraActive: m
415
+ } = Ye({ sizes: i, scene: e }), { renderer: w } = st(
416
416
  {
417
417
  scene: e,
418
418
  canvas: a,
@@ -420,14 +420,14 @@ function mt({
420
420
  contextParts: { sizes: i, camera: f },
421
421
  disableRender: r
422
422
  }
423
- ), w = {
423
+ ), d = {
424
424
  sizes: i,
425
425
  scene: p,
426
426
  camera: f,
427
- cameras: ve(u),
428
- renderer: C,
427
+ cameras: de(u),
428
+ renderer: w,
429
429
  raycaster: L(new He()),
430
- controls: S(null),
430
+ controls: B(null),
431
431
  perf: {
432
432
  maxFrames: 160,
433
433
  fps: {
@@ -441,53 +441,53 @@ function mt({
441
441
  }
442
442
  },
443
443
  extend: Y,
444
- registerCamera: m,
445
- setCameraActive: d,
446
- deregisterCamera: v
444
+ registerCamera: v,
445
+ setCameraActive: m,
446
+ deregisterCamera: E
447
447
  };
448
- V("useTres", w);
449
- const P = 100, E = We({ every: P }), { isSupported: _, memory: A } = Ue({ interval: P }), b = 160;
448
+ V("useTres", d);
449
+ const h = 100, P = We({ every: h }), { isSupported: A, memory: C } = Ue({ interval: h }), k = 160;
450
450
  let g = performance.now();
451
- const M = ({ timestamp: O }) => {
452
- w.scene.value && (w.perf.memory.allocatedMem = ft(w.scene.value)), O - g >= P && (g = O, w.perf.fps.accumulator.push(E.value), w.perf.fps.accumulator.length > b && w.perf.fps.accumulator.shift(), w.perf.fps.value = E.value, _.value && A.value && (w.perf.memory.accumulator.push(A.value.usedJSHeapSize / 1024 / 1024), w.perf.memory.accumulator.length > b && w.perf.memory.accumulator.shift(), w.perf.memory.currentMem = w.perf.memory.accumulator.reduce((fe, me) => fe + me, 0) / w.perf.memory.accumulator.length));
451
+ const _ = ({ timestamp: O }) => {
452
+ d.scene.value && (d.perf.memory.allocatedMem = ft(d.scene.value)), O - g >= h && (g = O, d.perf.fps.accumulator.push(P.value), d.perf.fps.accumulator.length > k && d.perf.fps.accumulator.shift(), d.perf.fps.value = P.value, A.value && C.value && (d.perf.memory.accumulator.push(C.value.usedJSHeapSize / 1024 / 1024), d.perf.memory.accumulator.length > k && d.perf.memory.accumulator.shift(), d.perf.memory.currentMem = d.perf.memory.accumulator.reduce((fe, me) => fe + me, 0) / d.perf.memory.accumulator.length));
453
453
  };
454
454
  let N = 0;
455
- const le = 1, { pause: ce, resume: _t } = ne(({ delta: O }) => {
456
- window.__TRES__DEVTOOLS__ && (M({ timestamp: performance.now() }), N += O, N >= le && (window.__TRES__DEVTOOLS__.cb(w), N = 0));
455
+ const le = 1, { pause: ce, resume: Ct } = ne(({ delta: O }) => {
456
+ window.__TRES__DEVTOOLS__ && (_({ timestamp: performance.now() }), N += O, N >= le && (window.__TRES__DEVTOOLS__.cb(d), N = 0));
457
457
  }, { immediate: !0 });
458
458
  return $(() => {
459
459
  ce();
460
- }), w;
460
+ }), d;
461
461
  }
462
462
  function pt() {
463
- const e = de("useTres");
463
+ const e = ve("useTres");
464
464
  if (!e)
465
465
  throw new Error("useTresContext must be used together with useTresContextProvider");
466
466
  return e;
467
467
  }
468
468
  const Tt = pt;
469
469
  let y = null;
470
- const { logError: te } = B(), vt = {
470
+ const { logError: te } = x(), dt = {
471
471
  createElement(e, a, t, r) {
472
- var l, s;
472
+ var c, s;
473
473
  if (r || (r = {}), r.args || (r.args = []), e === "template" || Ze(e))
474
474
  return null;
475
475
  let n = e.replace("Tres", ""), o;
476
476
  if (e === "primitive") {
477
477
  (r == null ? void 0 : r.object) === void 0 && te("Tres primitives need a prop 'object'");
478
- const c = r.object;
479
- n = c.type, o = Object.assign(c, { type: n, attach: r.attach, primitive: !0 });
478
+ const l = r.object;
479
+ n = l.type, o = Object.assign(l, { type: n, attach: r.attach, primitive: !0 });
480
480
  } else {
481
- const c = W.value[n];
482
- c || te(`${n} is not defined on the THREE namespace. Use extend to add it to the catalog.`), o = new c(...r.args);
481
+ const l = W.value[n];
482
+ l || te(`${n} is not defined on the THREE namespace. Use extend to add it to the catalog.`), o = new l(...r.args);
483
483
  }
484
- return o.isCamera && (r != null && r.position || o.position.set(3, 3, 3), r != null && r.lookAt || o.lookAt(0, 0, 0)), (r == null ? void 0 : r.attach) === void 0 && (o.isMaterial ? o.attach = "material" : o.isBufferGeometry && (o.attach = "geometry")), o.isObject3D && ((l = r == null ? void 0 : r.material) != null && l.isMaterial && (o.userData.tres__materialViaProp = !0), (s = r == null ? void 0 : r.geometry) != null && s.isBufferGeometry && (o.userData.tres__geometryViaProp = !0)), o.userData = {
484
+ return o.isCamera && (r != null && r.position || o.position.set(3, 3, 3), r != null && r.lookAt || o.lookAt(0, 0, 0)), (r == null ? void 0 : r.attach) === void 0 && (o.isMaterial ? o.attach = "material" : o.isBufferGeometry && (o.attach = "geometry")), o.isObject3D && ((c = r == null ? void 0 : r.material) != null && c.isMaterial && (o.userData.tres__materialViaProp = !0), (s = r == null ? void 0 : r.geometry) != null && s.isBufferGeometry && (o.userData.tres__geometryViaProp = !0)), o.userData = {
485
485
  ...o.userData,
486
486
  tres__name: n
487
487
  }, o;
488
488
  },
489
489
  insert(e, a) {
490
- var r, n, o, l;
490
+ var r, n, o, c;
491
491
  a && a.isScene && (y = a);
492
492
  const t = a || y;
493
493
  if (e != null && e.isObject3D) {
@@ -499,7 +499,7 @@ const { logError: te } = B(), vt = {
499
499
  if (e != null && e.onClick || e != null && e.onPointerMove || e != null && e.onPointerEnter || e != null && e.onPointerLeave) {
500
500
  if (!(y != null && y.userData.tres__registerAtPointerEventHandler))
501
501
  throw "could not find tres__registerAtPointerEventHandler on scene's userData";
502
- (l = y == null ? void 0 : (o = y.userData).tres__registerAtPointerEventHandler) == null || l.call(o, e);
502
+ (c = y == null ? void 0 : (o = y.userData).tres__registerAtPointerEventHandler) == null || c.call(o, e);
503
503
  }
504
504
  }
505
505
  e != null && e.isObject3D && (t != null && t.isObject3D) ? (t.add(e), e.dispatchEvent({ type: "added" })) : e != null && e.isFog ? t.fog = e : typeof (e == null ? void 0 : e.attach) == "string" && (e.__previousAttach = e[t == null ? void 0 : t.attach], t && (t[e.attach] = e));
@@ -511,60 +511,60 @@ const { logError: te } = B(), vt = {
511
511
  const r = e, n = (i) => {
512
512
  var f, u;
513
513
  const p = i;
514
- i.userData.tres__materialViaProp || (f = p.material) == null || f.dispose(), i.userData.tres__geometryViaProp || (u = p.geometry) == null || u.dispose();
515
- }, o = y == null ? void 0 : y.userData.tres__deregisterAtPointerEventHandler, l = y == null ? void 0 : y.userData.tres__deregisterBlockingObjectAtPointerEventHandler, s = (i) => {
514
+ i.userData.tres__materialViaProp || ((f = p.material) == null || f.dispose(), p.material = void 0), i.userData.tres__geometryViaProp || ((u = p.geometry) == null || u.dispose(), p.geometry = void 0);
515
+ }, o = y == null ? void 0 : y.userData.tres__deregisterAtPointerEventHandler, c = y == null ? void 0 : y.userData.tres__deregisterBlockingObjectAtPointerEventHandler, s = (i) => {
516
516
  var p, f;
517
- if (!l)
517
+ if (!c)
518
518
  throw "could not find tres__deregisterBlockingObjectAtPointerEventHandler on scene's userData";
519
519
  if ((f = y == null ? void 0 : (p = y.userData).tres__deregisterBlockingObjectAtPointerEventHandler) == null || f.call(p, i), !o)
520
520
  throw "could not find tres__deregisterAtPointerEventHandler on scene's userData";
521
521
  (i != null && i.onClick || i != null && i.onPointerMove || i != null && i.onPointerEnter || i != null && i.onPointerLeave) && (o == null || o(i));
522
- }, c = (i) => {
522
+ }, l = (i) => {
523
523
  const p = y == null ? void 0 : y.userData.tres__deregisterCamera;
524
524
  if (!p)
525
525
  throw "could not find tres__deregisterCamera on scene's userData";
526
526
  i.isCamera && (p == null || p(i));
527
527
  };
528
- r.traverse((i) => {
529
- n(i), c(i), s == null || s(i);
530
- }), n(r), c(r), s == null || s(r);
528
+ (a = e.removeFromParent) == null || a.call(e), r.traverse((i) => {
529
+ n(i), l(i), s == null || s(i);
530
+ }), n(r), l(r), s == null || s(r);
531
531
  }
532
- (a = e.removeFromParent) == null || a.call(e), (t = e.dispose) == null || t.call(e);
532
+ (t = e.dispose) == null || t.call(e);
533
533
  }
534
534
  },
535
535
  patchProp(e, a, t, r) {
536
- var n, o, l, s;
536
+ var n, o, c, s;
537
537
  if (e) {
538
- let c = e, i = a;
538
+ let l = e, i = a;
539
539
  if (e.isObject3D && i === "blocks-pointer-events") {
540
- r || r === "" ? (o = y == null ? void 0 : (n = y.userData).tres__registerBlockingObjectAtPointerEventHandler) == null || o.call(n, e) : (s = y == null ? void 0 : (l = y.userData).tres__deregisterBlockingObjectAtPointerEventHandler) == null || s.call(l, e);
540
+ r || r === "" ? (o = y == null ? void 0 : (n = y.userData).tres__registerBlockingObjectAtPointerEventHandler) == null || o.call(n, e) : (s = y == null ? void 0 : (c = y.userData).tres__deregisterBlockingObjectAtPointerEventHandler) == null || s.call(c, e);
541
541
  return;
542
542
  }
543
- let p = R(i), f = c == null ? void 0 : c[p];
543
+ let p = R(i), f = l == null ? void 0 : l[p];
544
544
  if (i === "args") {
545
- const m = e, v = t ?? [], d = r ?? [], C = e.userData.tres__name || e.type;
546
- C && v.length && !nt(v, d) && (c = Object.assign(m, new W.value[C](...r)));
545
+ const v = e, E = t ?? [], m = r ?? [], w = e.userData.tres__name || e.type;
546
+ w && E.length && !nt(E, m) && (l = Object.assign(v, new W.value[w](...r)));
547
547
  return;
548
548
  }
549
- if (c.type === "BufferGeometry") {
549
+ if (l.type === "BufferGeometry") {
550
550
  if (i === "args")
551
551
  return;
552
- c.setAttribute(
552
+ l.setAttribute(
553
553
  R(i),
554
554
  new Fe(...r)
555
555
  );
556
556
  return;
557
557
  }
558
558
  if (i.includes("-") && f === void 0) {
559
- const m = i.split("-");
560
- f = m.reduce((v, d) => v[R(d)], c), i = m.pop(), p = i.toLowerCase(), f != null && f.set || (c = m.reduce((v, d) => v[R(d)], c));
559
+ const v = i.split("-");
560
+ f = v.reduce((E, m) => E[R(m)], l), i = v.pop(), p = i.toLowerCase(), f != null && f.set || (l = v.reduce((E, m) => E[R(m)], l));
561
561
  }
562
562
  let u = r;
563
563
  if (u === "" && (u = !0), ee(f)) {
564
564
  Array.isArray(u) ? e[p](...u) : e[p](u);
565
565
  return;
566
566
  }
567
- !(f != null && f.set) && !ee(f) ? c[p] = u : f.constructor === u.constructor && (f != null && f.copy) ? f == null || f.copy(u) : Array.isArray(u) ? f.set(...u) : !f.isColor && f.setScalar ? f.setScalar(u) : f.set(u);
567
+ !(f != null && f.set) && !ee(f) ? l[p] = u : f.constructor === u.constructor && (f != null && f.copy) ? f == null || f.copy(u) : Array.isArray(u) ? f.set(...u) : !f.isColor && f.setScalar ? f.setScalar(u) : f.set(u);
568
568
  }
569
569
  },
570
570
  parentNode(e) {
@@ -579,7 +579,7 @@ const { logError: te } = B(), vt = {
579
579
  setScopeId: () => void 0,
580
580
  cloneNode: () => void 0,
581
581
  insertStaticContent: () => void 0
582
- }, { render: dt } = ge(vt);
582
+ }, { render: vt } = ge(dt);
583
583
  Y(Pe);
584
584
  const gt = ["data-scene"], yt = /* @__PURE__ */ q({
585
585
  __name: "TresCanvas",
@@ -608,58 +608,58 @@ const gt = ["data-scene"], yt = /* @__PURE__ */ q({
608
608
  failIfMajorPerformanceCaveat: { type: Boolean, default: void 0 }
609
609
  },
610
610
  setup(e, { expose: a }) {
611
- var u;
612
- const t = e, { logWarning: r } = B(), n = S(), o = L(new je());
613
- se();
614
- const l = ye(), s = (u = J()) == null ? void 0 : u.appContext.app, c = (m) => q({
611
+ var E;
612
+ const t = e, { logWarning: r } = x(), n = B(), o = L(new je()), { resume: c } = se(), s = ye(), l = (E = J()) == null ? void 0 : E.appContext.app, i = (m) => q({
615
613
  setup() {
616
614
  var d;
617
- const v = (d = J()) == null ? void 0 : d.appContext;
618
- return v && (v.app = s), V("useTres", m), V("extend", Y), () => K(he, null, l != null && l.default ? l.default() : []);
615
+ const w = (d = J()) == null ? void 0 : d.appContext;
616
+ return w && (w.app = l), V("useTres", m), V("extend", Y), () => K(he, null, s != null && s.default ? s.default() : []);
619
617
  }
620
- }), i = (m) => {
621
- const v = c(m);
622
- dt(K(v), o.value);
623
- }, p = k(() => t.disableRender), f = L(null);
624
- return a({ context: f }), we(() => {
618
+ }), p = (m) => {
619
+ const w = i(m);
620
+ vt(K(w), o.value);
621
+ }, f = (m, w = !1) => {
622
+ o.value.children = [], w && (m.renderer.value.dispose(), m.renderer.value.renderLists.dispose(), m.renderer.value.forceContextLoss()), p(m), c();
623
+ }, u = b(() => t.disableRender), v = L(null);
624
+ return a({ context: v, dispose: () => f(v.value, !0) }), we(() => {
625
625
  const m = n;
626
- f.value = mt({
626
+ v.value = mt({
627
627
  scene: o.value,
628
628
  canvas: m,
629
629
  windowSize: t.windowSize,
630
- disableRender: p,
630
+ disableRender: u,
631
631
  rendererOptions: t
632
- }), ct({ scene: o.value, contextParts: f.value });
633
- const { registerCamera: v, camera: d, cameras: C, deregisterCamera: w } = f.value;
634
- i(f.value);
635
- const P = () => {
636
- const E = new G(
632
+ }), ct({ scene: o.value, contextParts: v.value });
633
+ const { registerCamera: w, camera: d, cameras: h, deregisterCamera: P } = v.value;
634
+ p(v.value);
635
+ const A = () => {
636
+ const C = new G(
637
637
  45,
638
638
  window.innerWidth / window.innerHeight,
639
639
  0.1,
640
640
  1e3
641
641
  );
642
- E.position.set(3, 3, 3), E.lookAt(0, 0, 0), v(E);
643
- const _ = D(() => {
644
- C.value.length >= 2 && (E.removeFromParent(), w(E), _ == null || _());
642
+ C.position.set(3, 3, 3), C.lookAt(0, 0, 0), w(C);
643
+ const k = D(() => {
644
+ h.value.length >= 2 && (C.removeFromParent(), P(C), k == null || k());
645
645
  });
646
646
  };
647
647
  re(
648
648
  () => t.camera,
649
- (E, _) => {
650
- E && v(E), _ && (_.removeFromParent(), w(_));
649
+ (C, k) => {
650
+ C && w(C), k && (k.removeFromParent(), P(k));
651
651
  },
652
652
  {
653
653
  immediate: !0
654
654
  }
655
655
  ), d.value || (r(
656
656
  "No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."
657
- ), P());
658
- }), (m, v) => (Ee(), _e("canvas", {
657
+ ), A());
658
+ }), (m, w) => (Ee(), Ce("canvas", {
659
659
  ref_key: "canvas",
660
660
  ref: n,
661
661
  "data-scene": o.value.uuid,
662
- class: Ce(m.$attrs.class),
662
+ class: _e(m.$attrs.class),
663
663
  style: Me({
664
664
  display: "block",
665
665
  width: "100%",
@@ -683,7 +683,7 @@ const gt = ["data-scene"], yt = /* @__PURE__ */ q({
683
683
  isCustomElement: (e) => e.startsWith("Tres") && !wt.includes(e) || e === "primitive"
684
684
  }
685
685
  }
686
- }, Lt = Et, xt = {
686
+ }, Lt = Et, St = {
687
687
  install(e) {
688
688
  e.component("TresCanvas", yt);
689
689
  }
@@ -691,7 +691,7 @@ const gt = ["data-scene"], yt = /* @__PURE__ */ q({
691
691
  export {
692
692
  yt as TresCanvas,
693
693
  W as catalogue,
694
- xt as default,
694
+ St as default,
695
695
  Y as extend,
696
696
  Pt as isProd,
697
697
  Xe as normalizeColor,
@@ -700,7 +700,7 @@ export {
700
700
  ut as trasverseObjects,
701
701
  Ye as useCamera,
702
702
  kt as useLoader,
703
- B as useLogger,
703
+ x as useLogger,
704
704
  ct as usePointerEventHandler,
705
705
  lt as useRaycaster,
706
706
  se as useRenderLoop,
package/dist/tres.umd.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v3.6.0-next.0
3
+ * version: v3.6.0
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(_,u){typeof exports=="object"&&typeof module<"u"?u(exports,require("vue"),require("three"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","three","@vueuse/core"],u):(_=typeof globalThis<"u"?globalThis:_||self,u(_.tres={},_.Vue,_.Three,_.VueUseCore))})(this,function(_,u,P,y){"use strict";function se(e){const a=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(a,t,r.get?r:{enumerable:!0,get:()=>e[t]})}}return a.default=e,Object.freeze(a)}const ie=se(P),G=({sizes:e,scene:a})=>{const t=u.ref([]),r=u.computed(()=>t.value[0]),n=(s,f=!1)=>{t.value.some(({uuid:i})=>i===s.uuid)||(f?c(s):t.value.push(s))},o=s=>{t.value=t.value.filter(({uuid:f})=>f!==s.uuid)},c=s=>{const f=s instanceof P.Camera?s:t.value.find(p=>p.uuid===s);if(!f)return;const i=t.value.filter(({uuid:p})=>p!==f.uuid);t.value=[f,...i]};return u.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(s=>{s instanceof P.PerspectiveCamera&&(s.aspect=e.aspectRatio.value),(s instanceof P.PerspectiveCamera||s instanceof P.OrthographicCamera)&&s.updateProjectionMatrix()})}),a.userData.tres__registerCamera=n,a.userData.tres__deregisterCamera=o,u.onUnmounted(()=>{t.value=[]}),{camera:r,cameras:t,registerCamera:n,deregisterCamera:o,setCameraActive:c}},I=y.createEventHook(),W=y.createEventHook(),z=y.createEventHook(),E=new P.Clock;let B=0,T=0;const{pause:le,resume:ue,isActive:ce}=y.useRafFn(()=>{I.trigger({delta:B,elapsed:T,clock:E}),W.trigger({delta:B,elapsed:T,clock:E}),z.trigger({delta:B,elapsed:T,clock:E})},{immediate:!1});z.on(()=>{B=E.getDelta(),T=E.getElapsedTime()});const N=()=>({onBeforeLoop:I.on,onLoop:W.on,onAfterLoop:z.on,pause:le,resume:ue,isActive:ce}),fe=!0,U="[TresJS ▲ ■ ●] ";function S(){function e(r,n){console.error(`${U} ${r}`,n||"")}function a(r){console.warn(`${U} ${r}`)}function t(r,n){}return{logError:e,logWarning:a,logMessage:t}}function me(e){return typeof e=="number"?[e,e,e]:e instanceof P.Vector3?[e.x,e.y,e.z]:e}function q(e){return e instanceof P.Color?e:Array.isArray(e)?new P.Color(...e):new P.Color(e)}const Y=(e,a)=>{for(const t of Object.keys(a))a[t]instanceof Object&&Object.assign(a[t],Y(e[t],a[t]));return Object.assign(e||{},a),e},de=pe("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot");function H(e){return e&&e.nodeType===1}function x(e){return e.replace(/-([a-z])/g,(a,t)=>t.toUpperCase())}function pe(e,a){const t=Object.create(null),r=e.split(",");for(let n=0;n<r.length;n++)t[r[n]]=!0;return a?n=>!!t[n.toLowerCase()]:n=>!!t[n]}const ge=(e,a)=>{const t=new Set,r=[];for(const n of e){const o=a(n);t.has(o)||(t.add(o),r.push(n))}return r},J=(e,a)=>{if(!a)return;const t=Array.isArray(a)?a:a.match(/([^[.\]])+/g);return t==null?void 0:t.reduce((r,n)=>r&&r[n],e)},ve=(e,a,t)=>{const r=Array.isArray(a)?a:a.match(/([^[.\]])+/g);r&&r.reduce((n,o,c)=>(n[o]===void 0&&(n[o]={}),c===r.length-1&&(n[o]=t),n[o]),e)};function K(e,a){if(H(e)&&H(a)){const n=e.attributes,o=a.attributes;return n.length!==o.length?!1:Array.from(n).every(({name:c,value:s})=>a.getAttribute(c)===s)}if(e===a)return!0;if(e===null||typeof e!="object"||a===null||typeof a!="object")return!1;const t=Object.keys(e),r=Object.keys(a);if(t.length!==r.length)return!1;for(const n of t)if(!r.includes(n)||!K(e[n],a[n]))return!1;return!0}function ye(e,a){if(!Array.isArray(e)||!Array.isArray(a)||e.length!==a.length)return!1;for(let t=0;t<e.length;t++)if(!K(e[t],a[t]))return!1;return!0}const we=Array.isArray,Ce=Number.parseInt(P.REVISION.replace("dev","")),V={realistic:{shadows:!0,physicallyCorrectLights:!0,outputColorSpace:P.SRGBColorSpace,toneMapping:P.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:P.PCFSoftShadowMap}}};function X({scene:e,canvas:a,options:t,disableRender:r,contextParts:{sizes:n,camera:o}}){const c=u.computed(()=>({alpha:y.toValue(t.alpha),depth:y.toValue(t.depth),canvas:y.unrefElement(a),context:y.toValue(t.context),stencil:y.toValue(t.stencil),antialias:y.toValue(t.antialias)===void 0?!0:y.toValue(t.antialias),precision:y.toValue(t.precision),powerPreference:y.toValue(t.powerPreference),premultipliedAlpha:y.toValue(t.premultipliedAlpha),preserveDrawingBuffer:y.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:y.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:y.toValue(t.failIfMajorPerformanceCaveat)})),s=u.shallowRef(new P.WebGLRenderer(c.value));u.watch(c,()=>{s.value.dispose(),s.value=new P.WebGLRenderer(c.value)}),u.watchEffect(()=>{s.value.setSize(n.width.value,n.height.value)});const{pixelRatio:f}=y.useDevicePixelRatio();u.watchEffect(()=>{s.value.setPixelRatio(f.value)});const{logError:i}=S(),m=(()=>{const v=new P.WebGLRenderer,b={shadowMap:{enabled:v.shadowMap.enabled,type:v.shadowMap.type},toneMapping:v.toneMapping,toneMappingExposure:v.toneMappingExposure,outputColorSpace:v.outputColorSpace};return v.dispose(),b})();u.watchEffect(()=>{const v=y.toValue(t.preset);v&&(v in V||i(`Renderer Preset must be one of these: ${Object.keys(V).join(", ")}`),Y(s.value,V[v]));const b=(M,A)=>{const D=y.toValue(M),O=()=>{if(v)return J(V[v],A)};if(D!==void 0)return D;const C=O();return C!==void 0?C:J(m,A)},h=(M,A)=>ve(s.value,A,b(M,A));h(t.shadows,"shadowMap.enabled"),h(t.toneMapping,"toneMapping"),h(t.shadowMapType,"shadowMap.type"),Ce<150&&h(!t.useLegacyLights,"physicallyCorrectLights"),h(t.outputColorSpace,"outputColorSpace"),h(t.toneMappingExposure,"toneMappingExposure");const L=b(t.clearColor,"clearColor");L&&s.value.setClearColor(L?q(L):new P.Color(0))});const{pause:l,resume:d,onLoop:g}=N();return g(()=>{o.value&&!y.toValue(r)&&s.value.render(e,o.value)}),d(),u.onUnmounted(()=>{l(),s.value.dispose(),s.value.forceContextLoss()}),{renderer:s}}const Q=e=>typeof e=="function",he=e=>!!e&&e.constructor===Array;function Z(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 _e(e,a,t,r,n){const{logError:o}=S(),c=new e;n&&n(c),t&&t(c);const f=(Array.isArray(a)?a:[a]).map(i=>new Promise((p,m)=>{c.load(i,l=>{l.scene&&Object.assign(l,Z(l.scene)),p(l)},r,l=>m(o("[useLoader] - Failed to load resource",l)))}));return he(a)?await Promise.all(f):await f[0]}async function Pe(e){const a=new P.LoadingManager,t=new P.TextureLoader(a),r=n=>new Promise((o,c)=>{t.load(n,s=>o(s),()=>null,()=>{c(new Error("[useTextures] - Failed to load texture"))})});if(we(e)){const n=await Promise.all(e.map(o=>r(o)));return e.length>1?n:n[0]}else{const{map:n,displacementMap:o,normalMap:c,roughnessMap:s,metalnessMap:f,aoMap:i,alphaMap:p,matcap:m}=e;return{map:n?await r(n):null,displacementMap:o?await r(o):null,normalMap:c?await r(c):null,roughnessMap:s?await r(s):null,metalnessMap:f?await r(f):null,aoMap:i?await r(i):null,alphaMap:p?await r(p):null,matcap:m?await r(m):null}}}const ee=(e,{renderer:a,camera:t,raycaster:r})=>{const n=u.computed(()=>a.value.domElement),{x:o,y:c}=y.usePointer({target:n}),{width:s,height:f,top:i,left:p}=y.useElementBounding(n),m=({x:C,y:k})=>{if(n.value)return{x:(C-p.value)/s.value*2-1,y:-((k-i.value)/f.value)*2+1}},l=({x:C,y:k})=>{if(t.value)return r.value.setFromCamera(new P.Vector2(C,k),t.value),r.value.intersectObjects(e.value,!1)},d=C=>{const k=m({x:(C==null?void 0:C.clientX)??o.value,y:(C==null?void 0:C.clientY)??c.value});return k?l(k)||[]:[]},g=u.computed(()=>d()),v=y.createEventHook(),b=y.createEventHook(),h=(C,k)=>{C.trigger({event:k,intersects:d(k)})},L=C=>{h(b,C)};let M;const A=C=>{var k;M=(k=d(C)[0])==null?void 0:k.object},D=C=>{var k;C instanceof PointerEvent&&M===((k=d(C)[0])==null?void 0:k.object)&&h(v,C)},O=C=>b.trigger({event:C,intersects:[]});return n.value.addEventListener("pointerup",D),n.value.addEventListener("pointerdown",A),n.value.addEventListener("pointermove",L),n.value.addEventListener("pointerleave",O),u.onUnmounted(()=>{n!=null&&n.value&&(n.value.removeEventListener("pointerup",D),n.value.removeEventListener("pointerdown",A),n.value.removeEventListener("pointermove",L),n.value.removeEventListener("pointerleave",O))}),{intersects:g,onClick:C=>v.on(C).off,onPointerMove:C=>b.on(C).off}};function Me(){const{logWarning:e}=S();function a(o,c,s){let f=null;return o.traverse(i=>{i[c]===s&&(f=i)}),f||e(`Child with ${c} '${s}' not found.`),f}function t(o,c,s){const f=[];return o.traverse(i=>{i[c].includes(s)&&f.push(i)}),f.length||e(`Children with ${c} '${s}' not found.`),f}function r(o,c){return a(o,"name",c)}function n(o,c){return t(o,"name",c)}return{seek:a,seekByName:r,seekAll:t,seekAllByName:n}}const te=({scene:e,contextParts:a})=>{const t=u.reactive({click:new Map,pointerMove:new Map,pointerEnter:new Map,pointerLeave:new Map}),r=u.ref(new Set),n=l=>{r.value.add(l)},o=l=>{r.value.delete(l)},c=l=>{Object.values(t).forEach(d=>d.delete(l)),o(l)},s=l=>{const{onClick:d,onPointerMove:g,onPointerEnter:v,onPointerLeave:b}=l;d&&t.click.set(l,d),g&&t.pointerMove.set(l,g),v&&t.pointerEnter.set(l,v),b&&t.pointerLeave.set(l,b)};e.userData.tres__registerAtPointerEventHandler=s,e.userData.tres__deregisterAtPointerEventHandler=c,e.userData.tres__registerBlockingObjectAtPointerEventHandler=n,e.userData.tres__deregisterBlockingObjectAtPointerEventHandler=o;const f=u.computed(()=>ge([...Array.from(r.value),...Object.values(t).map(l=>Array.from(l.keys())).flat()],({uuid:l})=>l)),{onClick:i,onPointerMove:p}=ee(f,a);i(({intersects:l,event:d})=>{var g;l.length&&((g=t.click.get(l[0].object))==null||g(l[0],d))});let m;return p(({intersects:l,event:d})=>{var L,M,A,D;const g=(L=l==null?void 0:l[0])==null?void 0:L.object,{pointerLeave:v,pointerEnter:b,pointerMove:h}=t;m&&m!==g&&((M=v.get(m))==null||M(m,d)),g&&(m!==g&&((A=b.get(g))==null||A(l[0],d)),(D=h.get(g))==null||D(l[0],d)),m=g||null}),{registerObject:s,deregisterObject:c}};function Ae(e){let a=0;return e.traverse(t=>{if(t.isMesh&&t.geometry){const r=t.geometry,n=r.attributes.position.count*3*Float32Array.BYTES_PER_ELEMENT,o=r.index?r.index.count*Uint32Array.BYTES_PER_ELEMENT:0,c=r.attributes.normal?r.attributes.normal.count*3*Float32Array.BYTES_PER_ELEMENT:0,s=r.attributes.uv?r.attributes.uv.count*2*Float32Array.BYTES_PER_ELEMENT:0,f=n+o+c+s;a+=f}}),a}const j=u.ref({}),F=e=>Object.assign(j.value,e);function re({scene:e,canvas:a,windowSize:t,disableRender:r,rendererOptions:n}){const o=u.computed(()=>y.toValue(t)?y.useWindowSize():y.useElementSize(y.toValue(a).parentElement)),c=u.computed(()=>o.value.width.value),s=u.computed(()=>o.value.height.value),f=u.computed(()=>c.value/s.value),i={height:s,width:c,aspectRatio:f},p=u.shallowRef(e),{camera:m,cameras:l,registerCamera:d,deregisterCamera:g,setCameraActive:v}=G({sizes:i,scene:e}),{renderer:b}=X({scene:e,canvas:a,options:n,contextParts:{sizes:i,camera:m},disableRender:r}),h={sizes:i,scene:p,camera:m,cameras:u.readonly(l),renderer:b,raycaster:u.shallowRef(new P.Raycaster),controls:u.ref(null),perf:{maxFrames:160,fps:{value:0,accumulator:[]},memory:{currentMem:0,allocatedMem:0,accumulator:[]}},extend:F,registerCamera:d,setCameraActive:v,deregisterCamera:g};u.provide("useTres",h);const L=100,M=y.useFps({every:L}),{isSupported:A,memory:D}=y.useMemory({interval:L}),O=160;let C=performance.now();const k=({timestamp:R})=>{h.scene.value&&(h.perf.memory.allocatedMem=Ae(h.scene.value)),R-C>=L&&(C=R,h.perf.fps.accumulator.push(M.value),h.perf.fps.accumulator.length>O&&h.perf.fps.accumulator.shift(),h.perf.fps.value=M.value,A.value&&D.value&&(h.perf.memory.accumulator.push(D.value.usedJSHeapSize/1024/1024),h.perf.memory.accumulator.length>O&&h.perf.memory.accumulator.shift(),h.perf.memory.currentMem=h.perf.memory.accumulator.reduce((xe,Ve)=>xe+Ve,0)/h.perf.memory.accumulator.length))};let $=0;const Be=1,{pause:Te,resume:ze}=y.useRafFn(({delta:R})=>{window.__TRES__DEVTOOLS__&&(k({timestamp:performance.now()}),$+=R,$>=Be&&(window.__TRES__DEVTOOLS__.cb(h),$=0))},{immediate:!0});return u.onUnmounted(()=>{Te()}),h}function ne(){const e=u.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const be=ne;function Fe(e){}let w=null;const{logError:ae}=S(),ke={createElement(e,a,t,r){var c,s;if(r||(r={}),r.args||(r.args=[]),e==="template"||de(e))return null;let n=e.replace("Tres",""),o;if(e==="primitive"){(r==null?void 0:r.object)===void 0&&ae("Tres primitives need a prop 'object'");const f=r.object;n=f.type,o=Object.assign(f,{type:n,attach:r.attach,primitive:!0})}else{const f=j.value[n];f||ae(`${n} is not defined on the THREE namespace. Use extend to add it to the catalog.`),o=new f(...r.args)}return o.isCamera&&(r!=null&&r.position||o.position.set(3,3,3),r!=null&&r.lookAt||o.lookAt(0,0,0)),(r==null?void 0:r.attach)===void 0&&(o.isMaterial?o.attach="material":o.isBufferGeometry&&(o.attach="geometry")),o.isObject3D&&((c=r==null?void 0:r.material)!=null&&c.isMaterial&&(o.userData.tres__materialViaProp=!0),(s=r==null?void 0:r.geometry)!=null&&s.isBufferGeometry&&(o.userData.tres__geometryViaProp=!0)),o.userData={...o.userData,tres__name:n},o},insert(e,a){var r,n,o,c;a&&a.isScene&&(w=a);const t=a||w;if(e!=null&&e.isObject3D){if(e!=null&&e.isCamera){if(!(w!=null&&w.userData.tres__registerCamera))throw"could not find tres__registerCamera on scene's userData";(n=w==null?void 0:(r=w.userData).tres__registerCamera)==null||n.call(r,e)}if(e!=null&&e.onClick||e!=null&&e.onPointerMove||e!=null&&e.onPointerEnter||e!=null&&e.onPointerLeave){if(!(w!=null&&w.userData.tres__registerAtPointerEventHandler))throw"could not find tres__registerAtPointerEventHandler on scene's userData";(c=w==null?void 0:(o=w.userData).tres__registerAtPointerEventHandler)==null||c.call(o,e)}}e!=null&&e.isObject3D&&(t!=null&&t.isObject3D)?(t.add(e),e.dispatchEvent({type:"added"})):e!=null&&e.isFog?t.fog=e:typeof(e==null?void 0:e.attach)=="string"&&(e.__previousAttach=e[t==null?void 0:t.attach],t&&(t[e.attach]=e))},remove(e){var a,t;if(e){if(e.isObject3D){const r=e,n=i=>{var m,l;const p=i;i.userData.tres__materialViaProp||(m=p.material)==null||m.dispose(),i.userData.tres__geometryViaProp||(l=p.geometry)==null||l.dispose()},o=w==null?void 0:w.userData.tres__deregisterAtPointerEventHandler,c=w==null?void 0:w.userData.tres__deregisterBlockingObjectAtPointerEventHandler,s=i=>{var p,m;if(!c)throw"could not find tres__deregisterBlockingObjectAtPointerEventHandler on scene's userData";if((m=w==null?void 0:(p=w.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||m.call(p,i),!o)throw"could not find tres__deregisterAtPointerEventHandler on scene's userData";(i!=null&&i.onClick||i!=null&&i.onPointerMove||i!=null&&i.onPointerEnter||i!=null&&i.onPointerLeave)&&(o==null||o(i))},f=i=>{const p=w==null?void 0:w.userData.tres__deregisterCamera;if(!p)throw"could not find tres__deregisterCamera on scene's userData";i.isCamera&&(p==null||p(i))};r.traverse(i=>{n(i),f(i),s==null||s(i)}),n(r),f(r),s==null||s(r)}(a=e.removeFromParent)==null||a.call(e),(t=e.dispose)==null||t.call(e)}},patchProp(e,a,t,r){var n,o,c,s;if(e){let f=e,i=a;if(e.isObject3D&&i==="blocks-pointer-events"){r||r===""?(o=w==null?void 0:(n=w.userData).tres__registerBlockingObjectAtPointerEventHandler)==null||o.call(n,e):(s=w==null?void 0:(c=w.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||s.call(c,e);return}let p=x(i),m=f==null?void 0:f[p];if(i==="args"){const d=e,g=t??[],v=r??[],b=e.userData.tres__name||e.type;b&&g.length&&!ye(g,v)&&(f=Object.assign(d,new j.value[b](...r)));return}if(f.type==="BufferGeometry"){if(i==="args")return;f.setAttribute(x(i),new P.BufferAttribute(...r));return}if(i.includes("-")&&m===void 0){const d=i.split("-");m=d.reduce((g,v)=>g[x(v)],f),i=d.pop(),p=i.toLowerCase(),m!=null&&m.set||(f=d.reduce((g,v)=>g[x(v)],f))}let l=r;if(l===""&&(l=!0),Q(m)){Array.isArray(l)?e[p](...l):e[p](l);return}!(m!=null&&m.set)&&!Q(m)?f[p]=l:m.constructor===l.constructor&&(m!=null&&m.copy)?m==null||m.copy(l):Array.isArray(l)?m.set(...l):!m.isColor&&m.setScalar?m.setScalar(l):m.set(l)}},parentNode(e){return(e==null?void 0:e.parent)||null},createText:()=>void 0,createComment:()=>void 0,setText:()=>void 0,setElementText:()=>void 0,nextSibling:()=>void 0,querySelector:()=>void 0,setScopeId:()=>void 0,cloneNode:()=>void 0,insertStaticContent:()=>void 0},{render:Le}=u.createRenderer(ke);F(ie);const De=["data-scene"],oe=u.defineComponent({__name:"TresCanvas",props:{shadows:{type:Boolean,default:void 0},clearColor:{},toneMapping:{},shadowMapType:{},useLegacyLights:{type:Boolean,default:void 0},outputColorSpace:{},toneMappingExposure:{},camera:{},preset:{},windowSize:{type:Boolean,default:void 0},disableRender:{type:Boolean,default:void 0},context:{},precision:{},alpha:{type:Boolean,default:void 0},premultipliedAlpha:{type:Boolean},antialias:{type:Boolean,default:void 0},stencil:{type:Boolean,default:void 0},preserveDrawingBuffer:{type:Boolean,default:void 0},powerPreference:{},depth:{type:Boolean,default:void 0},logarithmicDepthBuffer:{type:Boolean,default:void 0},failIfMajorPerformanceCaveat:{type:Boolean,default:void 0}},setup(e,{expose:a}){var l;const t=e,{logWarning:r}=S(),n=u.ref(),o=u.shallowRef(new P.Scene);N();const c=u.useSlots(),s=(l=u.getCurrentInstance())==null?void 0:l.appContext.app,f=d=>u.defineComponent({setup(){var v;const g=(v=u.getCurrentInstance())==null?void 0:v.appContext;return g&&(g.app=s),u.provide("useTres",d),u.provide("extend",F),()=>u.h(u.Fragment,null,c!=null&&c.default?c.default():[])}}),i=d=>{const g=f(d);Le(u.h(g),o.value)},p=u.computed(()=>t.disableRender),m=u.shallowRef(null);return a({context:m}),u.onMounted(()=>{const d=n;m.value=re({scene:o.value,canvas:d,windowSize:t.windowSize,disableRender:p,rendererOptions:t}),te({scene:o.value,contextParts:m.value});const{registerCamera:g,camera:v,cameras:b,deregisterCamera:h}=m.value;i(m.value);const L=()=>{const M=new P.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);M.position.set(3,3,3),M.lookAt(0,0,0),g(M);const A=u.watchEffect(()=>{b.value.length>=2&&(M.removeFromParent(),h(M),A==null||A())})};u.watch(()=>t.camera,(M,A)=>{M&&g(M),A&&(A.removeFromParent(),h(A))},{immediate:!0}),v.value||(r("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),L())}),(d,g)=>(u.openBlock(),u.createElementBlock("canvas",{ref_key:"canvas",ref:n,"data-scene":o.value.uuid,class:u.normalizeClass(d.$attrs.class),style:u.normalizeStyle({display:"block",width:"100%",height:"100%",position:d.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none",...d.$attrs.style})},null,14,De))}}),Oe=["TresCanvas","TresLeches","TresScene"],Se={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!Oe.includes(e)||e==="primitive"}}},Ee={install(e){e.component("TresCanvas",oe)}};_.TresCanvas=oe,_.catalogue=j,_.default=Ee,_.extend=F,_.isProd=fe,_.normalizeColor=q,_.normalizeVectorFlexibleParam=me,_.templateCompilerOptions=Se,_.trasverseObjects=Z,_.useCamera=G,_.useLoader=_e,_.useLogger=S,_.usePointerEventHandler=te,_.useRaycaster=ee,_.useRenderLoop=N,_.useRenderer=X,_.useSeek=Me,_.useTexture=Pe,_.useTres=be,_.useTresContext=ne,_.useTresContextProvider=re,Object.defineProperties(_,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
8
+ (function(h,u){typeof exports=="object"&&typeof module<"u"?u(exports,require("vue"),require("three"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","three","@vueuse/core"],u):(h=typeof globalThis<"u"?globalThis:h||self,u(h.tres={},h.Vue,h.Three,h.VueUseCore))})(this,function(h,u,M,v){"use strict";function se(e){const a=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(a,t,r.get?r:{enumerable:!0,get:()=>e[t]})}}return a.default=e,Object.freeze(a)}const ie=se(M),G=({sizes:e,scene:a})=>{const t=u.ref([]),r=u.computed(()=>t.value[0]),n=(s,c=!1)=>{t.value.some(({uuid:i})=>i===s.uuid)||(c?f(s):t.value.push(s))},o=s=>{t.value=t.value.filter(({uuid:c})=>c!==s.uuid)},f=s=>{const c=s instanceof M.Camera?s:t.value.find(p=>p.uuid===s);if(!c)return;const i=t.value.filter(({uuid:p})=>p!==c.uuid);t.value=[c,...i]};return u.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(s=>{s instanceof M.PerspectiveCamera&&(s.aspect=e.aspectRatio.value),(s instanceof M.PerspectiveCamera||s instanceof M.OrthographicCamera)&&s.updateProjectionMatrix()})}),a.userData.tres__registerCamera=n,a.userData.tres__deregisterCamera=o,u.onUnmounted(()=>{t.value=[]}),{camera:r,cameras:t,registerCamera:n,deregisterCamera:o,setCameraActive:f}},I=v.createEventHook(),W=v.createEventHook(),z=v.createEventHook(),E=new M.Clock;let B=0,T=0;const{pause:le,resume:ue,isActive:ce}=v.useRafFn(()=>{I.trigger({delta:B,elapsed:T,clock:E}),W.trigger({delta:B,elapsed:T,clock:E}),z.trigger({delta:B,elapsed:T,clock:E})},{immediate:!1});z.on(()=>{B=E.getDelta(),T=E.getElapsedTime()});const N=()=>({onBeforeLoop:I.on,onLoop:W.on,onAfterLoop:z.on,pause:le,resume:ue,isActive:ce}),fe=!0,U="[TresJS ▲ ■ ●] ";function S(){function e(r,n){console.error(`${U} ${r}`,n||"")}function a(r){console.warn(`${U} ${r}`)}function t(r,n){}return{logError:e,logWarning:a,logMessage:t}}function me(e){return typeof e=="number"?[e,e,e]:e instanceof M.Vector3?[e.x,e.y,e.z]:e}function q(e){return e instanceof M.Color?e:Array.isArray(e)?new M.Color(...e):new M.Color(e)}const Y=(e,a)=>{for(const t of Object.keys(a))a[t]instanceof Object&&Object.assign(a[t],Y(e[t],a[t]));return Object.assign(e||{},a),e},de=pe("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot");function H(e){return e&&e.nodeType===1}function x(e){return e.replace(/-([a-z])/g,(a,t)=>t.toUpperCase())}function pe(e,a){const t=Object.create(null),r=e.split(",");for(let n=0;n<r.length;n++)t[r[n]]=!0;return a?n=>!!t[n.toLowerCase()]:n=>!!t[n]}const ge=(e,a)=>{const t=new Set,r=[];for(const n of e){const o=a(n);t.has(o)||(t.add(o),r.push(n))}return r},J=(e,a)=>{if(!a)return;const t=Array.isArray(a)?a:a.match(/([^[.\]])+/g);return t==null?void 0:t.reduce((r,n)=>r&&r[n],e)},ve=(e,a,t)=>{const r=Array.isArray(a)?a:a.match(/([^[.\]])+/g);r&&r.reduce((n,o,f)=>(n[o]===void 0&&(n[o]={}),f===r.length-1&&(n[o]=t),n[o]),e)};function K(e,a){if(H(e)&&H(a)){const n=e.attributes,o=a.attributes;return n.length!==o.length?!1:Array.from(n).every(({name:f,value:s})=>a.getAttribute(f)===s)}if(e===a)return!0;if(e===null||typeof e!="object"||a===null||typeof a!="object")return!1;const t=Object.keys(e),r=Object.keys(a);if(t.length!==r.length)return!1;for(const n of t)if(!r.includes(n)||!K(e[n],a[n]))return!1;return!0}function ye(e,a){if(!Array.isArray(e)||!Array.isArray(a)||e.length!==a.length)return!1;for(let t=0;t<e.length;t++)if(!K(e[t],a[t]))return!1;return!0}const we=Array.isArray,Ce=Number.parseInt(M.REVISION.replace("dev","")),V={realistic:{shadows:!0,physicallyCorrectLights:!0,outputColorSpace:M.SRGBColorSpace,toneMapping:M.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:M.PCFSoftShadowMap}}};function X({scene:e,canvas:a,options:t,disableRender:r,contextParts:{sizes:n,camera:o}}){const f=u.computed(()=>({alpha:v.toValue(t.alpha),depth:v.toValue(t.depth),canvas:v.unrefElement(a),context:v.toValue(t.context),stencil:v.toValue(t.stencil),antialias:v.toValue(t.antialias)===void 0?!0:v.toValue(t.antialias),precision:v.toValue(t.precision),powerPreference:v.toValue(t.powerPreference),premultipliedAlpha:v.toValue(t.premultipliedAlpha),preserveDrawingBuffer:v.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:v.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:v.toValue(t.failIfMajorPerformanceCaveat)})),s=u.shallowRef(new M.WebGLRenderer(f.value));u.watch(f,()=>{s.value.dispose(),s.value=new M.WebGLRenderer(f.value)}),u.watchEffect(()=>{s.value.setSize(n.width.value,n.height.value)});const{pixelRatio:c}=v.useDevicePixelRatio();u.watchEffect(()=>{s.value.setPixelRatio(c.value)});const{logError:i}=S(),m=(()=>{const d=new M.WebGLRenderer,_={shadowMap:{enabled:d.shadowMap.enabled,type:d.shadowMap.type},toneMapping:d.toneMapping,toneMappingExposure:d.toneMappingExposure,outputColorSpace:d.outputColorSpace};return d.dispose(),_})();u.watchEffect(()=>{const d=v.toValue(t.preset);d&&(d in V||i(`Renderer Preset must be one of these: ${Object.keys(V).join(", ")}`),Y(s.value,V[d]));const _=(L,D)=>{const A=v.toValue(L),O=()=>{if(d)return J(V[d],D)};if(A!==void 0)return A;const C=O();return C!==void 0?C:J(m,D)},g=(L,D)=>ve(s.value,D,_(L,D));g(t.shadows,"shadowMap.enabled"),g(t.toneMapping,"toneMapping"),g(t.shadowMapType,"shadowMap.type"),Ce<150&&g(!t.useLegacyLights,"physicallyCorrectLights"),g(t.outputColorSpace,"outputColorSpace"),g(t.toneMappingExposure,"toneMappingExposure");const k=_(t.clearColor,"clearColor");k&&s.value.setClearColor(k?q(k):new M.Color(0))});const{pause:l,resume:w,onLoop:P}=N();return P(()=>{o.value&&!v.toValue(r)&&s.value.render(e,o.value)}),w(),u.onUnmounted(()=>{l(),s.value.dispose(),s.value.forceContextLoss()}),{renderer:s}}const Q=e=>typeof e=="function",he=e=>!!e&&e.constructor===Array;function Z(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 _e(e,a,t,r,n){const{logError:o}=S(),f=new e;n&&n(f),t&&t(f);const c=(Array.isArray(a)?a:[a]).map(i=>new Promise((p,m)=>{f.load(i,l=>{l.scene&&Object.assign(l,Z(l.scene)),p(l)},r,l=>m(o("[useLoader] - Failed to load resource",l)))}));return he(a)?await Promise.all(c):await c[0]}async function Pe(e){const a=new M.LoadingManager,t=new M.TextureLoader(a),r=n=>new Promise((o,f)=>{t.load(n,s=>o(s),()=>null,()=>{f(new Error("[useTextures] - Failed to load texture"))})});if(we(e)){const n=await Promise.all(e.map(o=>r(o)));return e.length>1?n:n[0]}else{const{map:n,displacementMap:o,normalMap:f,roughnessMap:s,metalnessMap:c,aoMap:i,alphaMap:p,matcap:m}=e;return{map:n?await r(n):null,displacementMap:o?await r(o):null,normalMap:f?await r(f):null,roughnessMap:s?await r(s):null,metalnessMap:c?await r(c):null,aoMap:i?await r(i):null,alphaMap:p?await r(p):null,matcap:m?await r(m):null}}}const ee=(e,{renderer:a,camera:t,raycaster:r})=>{const n=u.computed(()=>a.value.domElement),{x:o,y:f}=v.usePointer({target:n}),{width:s,height:c,top:i,left:p}=v.useElementBounding(n),m=({x:C,y:b})=>{if(n.value)return{x:(C-p.value)/s.value*2-1,y:-((b-i.value)/c.value)*2+1}},l=({x:C,y:b})=>{if(t.value)return r.value.setFromCamera(new M.Vector2(C,b),t.value),r.value.intersectObjects(e.value,!1)},w=C=>{const b=m({x:(C==null?void 0:C.clientX)??o.value,y:(C==null?void 0:C.clientY)??f.value});return b?l(b)||[]:[]},P=u.computed(()=>w()),d=v.createEventHook(),_=v.createEventHook(),g=(C,b)=>{C.trigger({event:b,intersects:w(b)})},k=C=>{g(_,C)};let L;const D=C=>{var b;L=(b=w(C)[0])==null?void 0:b.object},A=C=>{var b;C instanceof PointerEvent&&L===((b=w(C)[0])==null?void 0:b.object)&&g(d,C)},O=C=>_.trigger({event:C,intersects:[]});return n.value.addEventListener("pointerup",A),n.value.addEventListener("pointerdown",D),n.value.addEventListener("pointermove",k),n.value.addEventListener("pointerleave",O),u.onUnmounted(()=>{n!=null&&n.value&&(n.value.removeEventListener("pointerup",A),n.value.removeEventListener("pointerdown",D),n.value.removeEventListener("pointermove",k),n.value.removeEventListener("pointerleave",O))}),{intersects:P,onClick:C=>d.on(C).off,onPointerMove:C=>_.on(C).off}};function Me(){const{logWarning:e}=S();function a(o,f,s){let c=null;return o.traverse(i=>{i[f]===s&&(c=i)}),c||e(`Child with ${f} '${s}' not found.`),c}function t(o,f,s){const c=[];return o.traverse(i=>{i[f].includes(s)&&c.push(i)}),c.length||e(`Children with ${f} '${s}' not found.`),c}function r(o,f){return a(o,"name",f)}function n(o,f){return t(o,"name",f)}return{seek:a,seekByName:r,seekAll:t,seekAllByName:n}}const te=({scene:e,contextParts:a})=>{const t=u.reactive({click:new Map,pointerMove:new Map,pointerEnter:new Map,pointerLeave:new Map}),r=u.ref(new Set),n=l=>{r.value.add(l)},o=l=>{r.value.delete(l)},f=l=>{Object.values(t).forEach(w=>w.delete(l)),o(l)},s=l=>{const{onClick:w,onPointerMove:P,onPointerEnter:d,onPointerLeave:_}=l;w&&t.click.set(l,w),P&&t.pointerMove.set(l,P),d&&t.pointerEnter.set(l,d),_&&t.pointerLeave.set(l,_)};e.userData.tres__registerAtPointerEventHandler=s,e.userData.tres__deregisterAtPointerEventHandler=f,e.userData.tres__registerBlockingObjectAtPointerEventHandler=n,e.userData.tres__deregisterBlockingObjectAtPointerEventHandler=o;const c=u.computed(()=>ge([...Array.from(r.value),...Object.values(t).map(l=>Array.from(l.keys())).flat()],({uuid:l})=>l)),{onClick:i,onPointerMove:p}=ee(c,a);i(({intersects:l,event:w})=>{var P;l.length&&((P=t.click.get(l[0].object))==null||P(l[0],w))});let m;return p(({intersects:l,event:w})=>{var k,L,D,A;const P=(k=l==null?void 0:l[0])==null?void 0:k.object,{pointerLeave:d,pointerEnter:_,pointerMove:g}=t;m&&m!==P&&((L=d.get(m))==null||L(m,w)),P&&(m!==P&&((D=_.get(P))==null||D(l[0],w)),(A=g.get(P))==null||A(l[0],w)),m=P||null}),{registerObject:s,deregisterObject:f}};function Ae(e){let a=0;return e.traverse(t=>{if(t.isMesh&&t.geometry){const r=t.geometry,n=r.attributes.position.count*3*Float32Array.BYTES_PER_ELEMENT,o=r.index?r.index.count*Uint32Array.BYTES_PER_ELEMENT:0,f=r.attributes.normal?r.attributes.normal.count*3*Float32Array.BYTES_PER_ELEMENT:0,s=r.attributes.uv?r.attributes.uv.count*2*Float32Array.BYTES_PER_ELEMENT:0,c=n+o+f+s;a+=c}}),a}const j=u.ref({}),F=e=>Object.assign(j.value,e);function re({scene:e,canvas:a,windowSize:t,disableRender:r,rendererOptions:n}){const o=u.computed(()=>v.toValue(t)?v.useWindowSize():v.useElementSize(v.toValue(a).parentElement)),f=u.computed(()=>o.value.width.value),s=u.computed(()=>o.value.height.value),c=u.computed(()=>f.value/s.value),i={height:s,width:f,aspectRatio:c},p=u.shallowRef(e),{camera:m,cameras:l,registerCamera:w,deregisterCamera:P,setCameraActive:d}=G({sizes:i,scene:e}),{renderer:_}=X({scene:e,canvas:a,options:n,contextParts:{sizes:i,camera:m},disableRender:r}),g={sizes:i,scene:p,camera:m,cameras:u.readonly(l),renderer:_,raycaster:u.shallowRef(new M.Raycaster),controls:u.ref(null),perf:{maxFrames:160,fps:{value:0,accumulator:[]},memory:{currentMem:0,allocatedMem:0,accumulator:[]}},extend:F,registerCamera:w,setCameraActive:d,deregisterCamera:P};u.provide("useTres",g);const k=100,L=v.useFps({every:k}),{isSupported:D,memory:A}=v.useMemory({interval:k}),O=160;let C=performance.now();const b=({timestamp:R})=>{g.scene.value&&(g.perf.memory.allocatedMem=Ae(g.scene.value)),R-C>=k&&(C=R,g.perf.fps.accumulator.push(L.value),g.perf.fps.accumulator.length>O&&g.perf.fps.accumulator.shift(),g.perf.fps.value=L.value,D.value&&A.value&&(g.perf.memory.accumulator.push(A.value.usedJSHeapSize/1024/1024),g.perf.memory.accumulator.length>O&&g.perf.memory.accumulator.shift(),g.perf.memory.currentMem=g.perf.memory.accumulator.reduce((xe,Ve)=>xe+Ve,0)/g.perf.memory.accumulator.length))};let $=0;const Be=1,{pause:Te,resume:ze}=v.useRafFn(({delta:R})=>{window.__TRES__DEVTOOLS__&&(b({timestamp:performance.now()}),$+=R,$>=Be&&(window.__TRES__DEVTOOLS__.cb(g),$=0))},{immediate:!0});return u.onUnmounted(()=>{Te()}),g}function ne(){const e=u.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const be=ne;function Fe(e){}let y=null;const{logError:ae}=S(),ke={createElement(e,a,t,r){var f,s;if(r||(r={}),r.args||(r.args=[]),e==="template"||de(e))return null;let n=e.replace("Tres",""),o;if(e==="primitive"){(r==null?void 0:r.object)===void 0&&ae("Tres primitives need a prop 'object'");const c=r.object;n=c.type,o=Object.assign(c,{type:n,attach:r.attach,primitive:!0})}else{const c=j.value[n];c||ae(`${n} is not defined on the THREE namespace. Use extend to add it to the catalog.`),o=new c(...r.args)}return o.isCamera&&(r!=null&&r.position||o.position.set(3,3,3),r!=null&&r.lookAt||o.lookAt(0,0,0)),(r==null?void 0:r.attach)===void 0&&(o.isMaterial?o.attach="material":o.isBufferGeometry&&(o.attach="geometry")),o.isObject3D&&((f=r==null?void 0:r.material)!=null&&f.isMaterial&&(o.userData.tres__materialViaProp=!0),(s=r==null?void 0:r.geometry)!=null&&s.isBufferGeometry&&(o.userData.tres__geometryViaProp=!0)),o.userData={...o.userData,tres__name:n},o},insert(e,a){var r,n,o,f;a&&a.isScene&&(y=a);const t=a||y;if(e!=null&&e.isObject3D){if(e!=null&&e.isCamera){if(!(y!=null&&y.userData.tres__registerCamera))throw"could not find tres__registerCamera on scene's userData";(n=y==null?void 0:(r=y.userData).tres__registerCamera)==null||n.call(r,e)}if(e!=null&&e.onClick||e!=null&&e.onPointerMove||e!=null&&e.onPointerEnter||e!=null&&e.onPointerLeave){if(!(y!=null&&y.userData.tres__registerAtPointerEventHandler))throw"could not find tres__registerAtPointerEventHandler on scene's userData";(f=y==null?void 0:(o=y.userData).tres__registerAtPointerEventHandler)==null||f.call(o,e)}}e!=null&&e.isObject3D&&(t!=null&&t.isObject3D)?(t.add(e),e.dispatchEvent({type:"added"})):e!=null&&e.isFog?t.fog=e:typeof(e==null?void 0:e.attach)=="string"&&(e.__previousAttach=e[t==null?void 0:t.attach],t&&(t[e.attach]=e))},remove(e){var a,t;if(e){if(e.isObject3D){const r=e,n=i=>{var m,l;const p=i;i.userData.tres__materialViaProp||((m=p.material)==null||m.dispose(),p.material=void 0),i.userData.tres__geometryViaProp||((l=p.geometry)==null||l.dispose(),p.geometry=void 0)},o=y==null?void 0:y.userData.tres__deregisterAtPointerEventHandler,f=y==null?void 0:y.userData.tres__deregisterBlockingObjectAtPointerEventHandler,s=i=>{var p,m;if(!f)throw"could not find tres__deregisterBlockingObjectAtPointerEventHandler on scene's userData";if((m=y==null?void 0:(p=y.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||m.call(p,i),!o)throw"could not find tres__deregisterAtPointerEventHandler on scene's userData";(i!=null&&i.onClick||i!=null&&i.onPointerMove||i!=null&&i.onPointerEnter||i!=null&&i.onPointerLeave)&&(o==null||o(i))},c=i=>{const p=y==null?void 0:y.userData.tres__deregisterCamera;if(!p)throw"could not find tres__deregisterCamera on scene's userData";i.isCamera&&(p==null||p(i))};(a=e.removeFromParent)==null||a.call(e),r.traverse(i=>{n(i),c(i),s==null||s(i)}),n(r),c(r),s==null||s(r)}(t=e.dispose)==null||t.call(e)}},patchProp(e,a,t,r){var n,o,f,s;if(e){let c=e,i=a;if(e.isObject3D&&i==="blocks-pointer-events"){r||r===""?(o=y==null?void 0:(n=y.userData).tres__registerBlockingObjectAtPointerEventHandler)==null||o.call(n,e):(s=y==null?void 0:(f=y.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||s.call(f,e);return}let p=x(i),m=c==null?void 0:c[p];if(i==="args"){const w=e,P=t??[],d=r??[],_=e.userData.tres__name||e.type;_&&P.length&&!ye(P,d)&&(c=Object.assign(w,new j.value[_](...r)));return}if(c.type==="BufferGeometry"){if(i==="args")return;c.setAttribute(x(i),new M.BufferAttribute(...r));return}if(i.includes("-")&&m===void 0){const w=i.split("-");m=w.reduce((P,d)=>P[x(d)],c),i=w.pop(),p=i.toLowerCase(),m!=null&&m.set||(c=w.reduce((P,d)=>P[x(d)],c))}let l=r;if(l===""&&(l=!0),Q(m)){Array.isArray(l)?e[p](...l):e[p](l);return}!(m!=null&&m.set)&&!Q(m)?c[p]=l:m.constructor===l.constructor&&(m!=null&&m.copy)?m==null||m.copy(l):Array.isArray(l)?m.set(...l):!m.isColor&&m.setScalar?m.setScalar(l):m.set(l)}},parentNode(e){return(e==null?void 0:e.parent)||null},createText:()=>void 0,createComment:()=>void 0,setText:()=>void 0,setElementText:()=>void 0,nextSibling:()=>void 0,querySelector:()=>void 0,setScopeId:()=>void 0,cloneNode:()=>void 0,insertStaticContent:()=>void 0},{render:Le}=u.createRenderer(ke);F(ie);const De=["data-scene"],oe=u.defineComponent({__name:"TresCanvas",props:{shadows:{type:Boolean,default:void 0},clearColor:{},toneMapping:{},shadowMapType:{},useLegacyLights:{type:Boolean,default:void 0},outputColorSpace:{},toneMappingExposure:{},camera:{},preset:{},windowSize:{type:Boolean,default:void 0},disableRender:{type:Boolean,default:void 0},context:{},precision:{},alpha:{type:Boolean,default:void 0},premultipliedAlpha:{type:Boolean},antialias:{type:Boolean,default:void 0},stencil:{type:Boolean,default:void 0},preserveDrawingBuffer:{type:Boolean,default:void 0},powerPreference:{},depth:{type:Boolean,default:void 0},logarithmicDepthBuffer:{type:Boolean,default:void 0},failIfMajorPerformanceCaveat:{type:Boolean,default:void 0}},setup(e,{expose:a}){var P;const t=e,{logWarning:r}=S(),n=u.ref(),o=u.shallowRef(new M.Scene),{resume:f}=N(),s=u.useSlots(),c=(P=u.getCurrentInstance())==null?void 0:P.appContext.app,i=d=>u.defineComponent({setup(){var g;const _=(g=u.getCurrentInstance())==null?void 0:g.appContext;return _&&(_.app=c),u.provide("useTres",d),u.provide("extend",F),()=>u.h(u.Fragment,null,s!=null&&s.default?s.default():[])}}),p=d=>{const _=i(d);Le(u.h(_),o.value)},m=(d,_=!1)=>{o.value.children=[],_&&(d.renderer.value.dispose(),d.renderer.value.renderLists.dispose(),d.renderer.value.forceContextLoss()),p(d),f()},l=u.computed(()=>t.disableRender),w=u.shallowRef(null);return a({context:w,dispose:()=>m(w.value,!0)}),u.onMounted(()=>{const d=n;w.value=re({scene:o.value,canvas:d,windowSize:t.windowSize,disableRender:l,rendererOptions:t}),te({scene:o.value,contextParts:w.value});const{registerCamera:_,camera:g,cameras:k,deregisterCamera:L}=w.value;p(w.value);const D=()=>{const A=new M.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);A.position.set(3,3,3),A.lookAt(0,0,0),_(A);const O=u.watchEffect(()=>{k.value.length>=2&&(A.removeFromParent(),L(A),O==null||O())})};u.watch(()=>t.camera,(A,O)=>{A&&_(A),O&&(O.removeFromParent(),L(O))},{immediate:!0}),g.value||(r("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),D())}),(d,_)=>(u.openBlock(),u.createElementBlock("canvas",{ref_key:"canvas",ref:n,"data-scene":o.value.uuid,class:u.normalizeClass(d.$attrs.class),style:u.normalizeStyle({display:"block",width:"100%",height:"100%",position:d.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none",...d.$attrs.style})},null,14,De))}}),Oe=["TresCanvas","TresLeches","TresScene"],Se={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!Oe.includes(e)||e==="primitive"}}},Ee={install(e){e.component("TresCanvas",oe)}};h.TresCanvas=oe,h.catalogue=j,h.default=Ee,h.extend=F,h.isProd=fe,h.normalizeColor=q,h.normalizeVectorFlexibleParam=me,h.templateCompilerOptions=Se,h.trasverseObjects=Z,h.useCamera=G,h.useLoader=_e,h.useLogger=S,h.usePointerEventHandler=te,h.useRaycaster=ee,h.useRenderLoop=N,h.useRenderer=X,h.useSeek=Me,h.useTexture=Pe,h.useTres=be,h.useTresContext=ne,h.useTresContextProvider=re,Object.defineProperties(h,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tresjs/core",
3
3
  "type": "module",
4
- "version": "3.6.0-next.0",
4
+ "version": "3.6.0",
5
5
  "packageManager": "pnpm@8.10.2",
6
6
  "description": "Declarative ThreeJS using Vue Components",
7
7
  "author": "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",
@@ -66,45 +66,45 @@
66
66
  },
67
67
  "dependencies": {
68
68
  "@alvarosabu/utils": "^3.1.1",
69
- "@vueuse/core": "^10.5.0"
69
+ "@vueuse/core": "^10.7.0"
70
70
  },
71
71
  "devDependencies": {
72
72
  "@release-it/conventional-changelog": "^8.0.1",
73
73
  "@stackblitz/sdk": "^1.9.0",
74
74
  "@tresjs/cientos": "3.6.0",
75
75
  "@tresjs/eslint-config-vue": "^0.2.1",
76
- "@types/three": "^0.158.3",
77
- "@typescript-eslint/eslint-plugin": "^6.13.0",
78
- "@typescript-eslint/parser": "^6.13.0",
79
- "@vitejs/plugin-vue": "^4.5.0",
76
+ "@types/three": "^0.159.0",
77
+ "@typescript-eslint/eslint-plugin": "^6.14.0",
78
+ "@typescript-eslint/parser": "^6.14.0",
79
+ "@vitejs/plugin-vue": "^4.5.2",
80
80
  "@vitest/coverage-c8": "^0.33.0",
81
- "@vitest/ui": "^0.34.6",
82
- "@vue/test-utils": "^2.4.2",
83
- "eslint": "^8.54.0",
84
- "eslint-plugin-vue": "^9.18.1",
81
+ "@vitest/ui": "^1.0.4",
82
+ "@vue/test-utils": "^2.4.3",
83
+ "eslint": "^8.55.0",
84
+ "eslint-plugin-vue": "^9.19.2",
85
85
  "esno": "^4.0.0",
86
- "gsap": "^3.12.2",
87
- "jsdom": "^23.0.0",
86
+ "gsap": "^3.12.3",
87
+ "jsdom": "^23.0.1",
88
88
  "kolorist": "^1.8.0",
89
89
  "ohmyfetch": "^0.4.21",
90
90
  "pathe": "^1.1.1",
91
- "release-it": "^17.0.0",
91
+ "release-it": "^17.0.1",
92
92
  "rollup-plugin-analyzer": "^4.0.0",
93
93
  "rollup-plugin-copy": "^3.5.0",
94
- "rollup-plugin-visualizer": "^5.9.3",
95
- "three": "^0.158.0",
96
- "unocss": "^0.57.7",
94
+ "rollup-plugin-visualizer": "^5.11.0",
95
+ "three": "^0.159.0",
96
+ "unocss": "^0.58.0",
97
97
  "unplugin": "^1.5.1",
98
- "unplugin-vue-components": "^0.25.2",
99
- "vite": "^5.0.2",
98
+ "unplugin-vue-components": "^0.26.0",
99
+ "vite": "^5.0.8",
100
100
  "vite-plugin-banner": "^0.7.1",
101
- "vite-plugin-dts": "3.6.3",
102
- "vite-plugin-inspect": "^0.8.0",
101
+ "vite-plugin-dts": "3.6.4",
102
+ "vite-plugin-inspect": "^0.8.1",
103
103
  "vite-plugin-require-transform": "^1.0.21",
104
104
  "vite-svg-loader": "^5.1.0",
105
105
  "vitepress": "1.0.0-rc.31",
106
- "vitest": "^0.34.6",
107
- "vue": "^3.3.9",
106
+ "vitest": "^1.0.4",
107
+ "vue": "^3.3.11",
108
108
  "vue-demi": "^0.14.6"
109
109
  }
110
110
  }