@tresjs/core 4.2.6 → 4.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/tres.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v4.2.6
3
+ * version: v4.2.7
4
4
  * (c) 2024
5
5
  * description: Declarative ThreeJS using Vue Components
6
6
  * author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
@@ -12,13 +12,16 @@ import { ref as H, computed as V, watchEffect as Te, onUnmounted as K, shallowRe
12
12
  import * as et from "three";
13
13
  import { PerspectiveCamera as we, Camera as Dt, Clock as tt, Vector3 as Se, Color as Z, Scene as nt, MathUtils as rt, MeshBasicMaterial as ot, DoubleSide as jt, REVISION as Bt, SRGBColorSpace as It, ACESFilmicToneMapping as st, PCFSoftShadowMap as Ht, NoToneMapping as $t, WebGLRenderer as he, TextureLoader as Ut, Vector2 as ge, Raycaster as Ft, BufferAttribute as Wt, Object3D as Nt, Line as zt, BufferGeometry as $e, Float32BufferAttribute as Ue, LineBasicMaterial as Gt, Mesh as Vt, BackSide as Yt, DirectionalLightHelper as qt, PointLightHelper as Jt, SpotLightHelper as Kt, HemisphereLightHelper as Qt, ArrowHelper as Xt } from "three";
14
14
  import { createEventHook as j, useRafFn as it, toValue as k, unrefElement as Zt, useDevicePixelRatio as en, usePointer as tn, useElementBounding as nn, useWindowSize as rn, useElementSize as on, refDebounced as Fe, tryOnScopeDispose as sn, useFps as an, useMemory as ln } from "@vueuse/core";
15
- const cn = "@tresjs/core", un = "module", fn = "4.2.6", dn = "pnpm@9.1.4", pn = "Declarative ThreeJS using Vue Components", mn = "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)", hn = "MIT", gn = [
15
+ const cn = "@tresjs/core", un = "module", fn = "4.2.7", dn = "pnpm@9.1.4", pn = "Declarative ThreeJS using Vue Components", mn = "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)", hn = "MIT", gn = {
16
+ type: "git",
17
+ url: "git+https://github.com/Tresjs/tres.git"
18
+ }, vn = [
16
19
  "vue",
17
20
  "3d",
18
21
  "threejs",
19
22
  "three",
20
23
  "threejs-vue"
21
- ], vn = !1, yn = {
24
+ ], yn = !1, _n = {
22
25
  ".": {
23
26
  types: "./dist/index.d.ts",
24
27
  import: "./dist/tres.js",
@@ -37,12 +40,12 @@ const cn = "@tresjs/core", un = "module", fn = "4.2.6", dn = "pnpm@9.1.4", pn =
37
40
  types: "./dist/src/utils/index.d.ts"
38
41
  },
39
42
  "./*": "./*"
40
- }, _n = "./dist/tres.js", wn = "./dist/tres.js", bn = "./dist/index.d.ts", Pn = [
43
+ }, wn = "./dist/tres.js", bn = "./dist/tres.js", Pn = "./dist/index.d.ts", Cn = [
41
44
  "*.d.ts",
42
45
  "dist"
43
- ], Cn = {
46
+ ], Mn = {
44
47
  access: "public"
45
- }, Mn = {
48
+ }, En = {
46
49
  dev: "cd playground && npm run dev",
47
50
  build: "vite build",
48
51
  playground: "cd playground && npm run dev",
@@ -59,14 +62,14 @@ const cn = "@tresjs/core", un = "module", fn = "4.2.6", dn = "pnpm@9.1.4", pn =
59
62
  "docs:preview": "vitepress preview docs",
60
63
  "docs:contributors": "esno scripts/update-contributors.ts",
61
64
  prepare: "node .husky/install.mjs"
62
- }, En = {
65
+ }, Tn = {
63
66
  three: ">=0.133",
64
67
  vue: ">=3.4"
65
- }, Tn = {
68
+ }, Sn = {
66
69
  "@alvarosabu/utils": "^3.2.0",
67
70
  "@vue/devtools-api": "^6.6.3",
68
71
  "@vueuse/core": "^10.11.0"
69
- }, Sn = {
72
+ }, An = {
70
73
  "@release-it/conventional-changelog": "^8.0.1",
71
74
  "@stackblitz/sdk": "^1.11.0",
72
75
  "@tresjs/cientos": "3.9.0",
@@ -107,7 +110,7 @@ const cn = "@tresjs/core", un = "module", fn = "4.2.6", dn = "pnpm@9.1.4", pn =
107
110
  vitest: "^2.0.2",
108
111
  vue: "^3.4.31",
109
112
  "vue-demi": "^0.14.8"
110
- }, An = {
113
+ }, xn = {
111
114
  name: cn,
112
115
  type: un,
113
116
  version: fn,
@@ -115,18 +118,19 @@ const cn = "@tresjs/core", un = "module", fn = "4.2.6", dn = "pnpm@9.1.4", pn =
115
118
  description: pn,
116
119
  author: mn,
117
120
  license: hn,
118
- keywords: gn,
119
- sideEffects: vn,
120
- exports: yn,
121
- main: _n,
122
- module: wn,
123
- types: bn,
124
- files: Pn,
125
- publishConfig: Cn,
126
- scripts: Mn,
127
- peerDependencies: En,
128
- dependencies: Tn,
129
- devDependencies: Sn
121
+ repository: gn,
122
+ keywords: vn,
123
+ sideEffects: yn,
124
+ exports: _n,
125
+ main: wn,
126
+ module: bn,
127
+ types: Pn,
128
+ files: Cn,
129
+ publishConfig: Mn,
130
+ scripts: En,
131
+ peerDependencies: Tn,
132
+ dependencies: Sn,
133
+ devDependencies: An
130
134
  };
131
135
  function be(e) {
132
136
  return typeof e > "u";
@@ -134,7 +138,7 @@ function be(e) {
134
138
  function de(e) {
135
139
  return Array.isArray(e);
136
140
  }
137
- function xn(e) {
141
+ function kn(e) {
138
142
  return typeof e == "number";
139
143
  }
140
144
  function at(e) {
@@ -152,28 +156,28 @@ function N(e) {
152
156
  function We(e) {
153
157
  return U(e) && "isCamera" in e && !!e.isCamera;
154
158
  }
155
- function kn(e) {
159
+ function Ln(e) {
156
160
  return U(e) && "isBufferGeometry" in e && !!e.isBufferGeometry;
157
161
  }
158
- function Ln(e) {
162
+ function Rn(e) {
159
163
  return U(e) && "isMaterial" in e && !!e.isMaterial;
160
164
  }
161
- function Rn(e) {
165
+ function On(e) {
162
166
  return U(e) && "isLight" in e && !!e.isLight;
163
167
  }
164
- function On(e) {
168
+ function Dn(e) {
165
169
  return U(e) && "isFog" in e && !!e.isFog;
166
170
  }
167
- function Dn(e) {
171
+ function jn(e) {
168
172
  return U(e) && "isScene" in e && !!e.isScene;
169
173
  }
170
174
  function oe(e) {
171
- return N(e) || kn(e) || Ln(e) || On(e);
175
+ return N(e) || Ln(e) || Rn(e) || Dn(e);
172
176
  }
173
- function jn(e) {
177
+ function Bn(e) {
174
178
  return U(e) && !!e.isPrimitive;
175
179
  }
176
- const Bn = ({ sizes: e }) => {
180
+ const In = ({ sizes: e }) => {
177
181
  const t = H([]), n = V(
178
182
  () => t.value[0]
179
183
  ), r = (i) => {
@@ -197,7 +201,7 @@ const Bn = ({ sizes: e }) => {
197
201
  };
198
202
  return Te(() => {
199
203
  e.aspectRatio.value && t.value.forEach((i) => {
200
- !i.manual && (i instanceof we || In(i)) && (i instanceof we ? i.aspect = e.aspectRatio.value : (i.left = e.width.value * -0.5, i.right = e.width.value * 0.5, i.top = e.height.value * 0.5, i.bottom = e.height.value * -0.5), i.updateProjectionMatrix());
204
+ !i.manual && (i instanceof we || Hn(i)) && (i instanceof we ? i.aspect = e.aspectRatio.value : (i.left = e.width.value * -0.5, i.right = e.width.value * 0.5, i.top = e.height.value * 0.5, i.bottom = e.height.value * -0.5), i.updateProjectionMatrix());
201
205
  });
202
206
  }), K(() => {
203
207
  t.value = [];
@@ -209,12 +213,12 @@ const Bn = ({ sizes: e }) => {
209
213
  setCameraActive: r
210
214
  };
211
215
  };
212
- function In(e) {
216
+ function Hn(e) {
213
217
  return e.hasOwnProperty("isOrthographicCamera") && e.isOrthographicCamera;
214
218
  }
215
219
  const lt = j(), ct = j(), Ae = j(), ee = new tt();
216
220
  let ue = 0, fe = 0;
217
- const { pause: Hn, resume: Ne, isActive: $n } = it(
221
+ const { pause: $n, resume: Ne, isActive: Un } = it(
218
222
  () => {
219
223
  lt.trigger({ delta: ue, elapsed: fe, clock: ee }), ct.trigger({ delta: ue, elapsed: fe, clock: ee }), Ae.trigger({ delta: ue, elapsed: fe, clock: ee });
220
224
  },
@@ -224,14 +228,14 @@ Ae.on(() => {
224
228
  ue = ee.getDelta(), fe = ee.getElapsedTime();
225
229
  });
226
230
  let ze = !1;
227
- const Ur = () => (ze || (ze = !0, Ne()), {
231
+ const Fr = () => (ze || (ze = !0, Ne()), {
228
232
  onBeforeLoop: lt.on,
229
233
  onLoop: ct.on,
230
234
  onAfterLoop: Ae.on,
231
- pause: Hn,
235
+ pause: $n,
232
236
  resume: Ne,
233
- isActive: $n
234
- }), Fr = !0, se = "[TresJS ▲ ■ ●] ";
237
+ isActive: Un
238
+ }), Wr = !0, se = "[TresJS ▲ ■ ●] ";
235
239
  function Y() {
236
240
  function e(...r) {
237
241
  typeof r[0] == "string" ? r[0] = se + r[0] : r.unshift(se), console.error(...r);
@@ -247,13 +251,13 @@ function Y() {
247
251
  logMessage: n
248
252
  };
249
253
  }
250
- function Wr(e) {
254
+ function Nr(e) {
251
255
  return typeof e == "number" ? [e, e, e] : e instanceof Se ? [e.x, e.y, e.z] : e;
252
256
  }
253
- function Un(e) {
257
+ function Fn(e) {
254
258
  return e instanceof Z ? e : Array.isArray(e) ? new Z(...e) : new Z(e);
255
259
  }
256
- class Fn extends et.Mesh {
260
+ class Wn extends et.Mesh {
257
261
  constructor(...n) {
258
262
  super(...n);
259
263
  me(this, "type", "HightlightMesh");
@@ -269,18 +273,18 @@ const ut = (e, t) => {
269
273
  for (const n of Object.keys(t))
270
274
  t[n] instanceof Object && Object.assign(t[n], ut(e[n], t[n]));
271
275
  return Object.assign(e || {}, t), e;
272
- }, Wn = "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", Nn = /* @__PURE__ */ Vn(Wn);
276
+ }, Nn = "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", zn = /* @__PURE__ */ Yn(Nn);
273
277
  function Ge(e) {
274
278
  return e && e.nodeType === 1;
275
279
  }
276
280
  function ie(e) {
277
281
  return e.replace(/-([a-z])/g, (t, n) => n.toUpperCase());
278
282
  }
279
- const zn = /\B([A-Z])/g;
280
- function Gn(e) {
281
- return e.replace(zn, "-$1").toLowerCase();
283
+ const Gn = /\B([A-Z])/g;
284
+ function Vn(e) {
285
+ return e.replace(Gn, "-$1").toLowerCase();
282
286
  }
283
- function Vn(e, t) {
287
+ function Yn(e, t) {
284
288
  const n = /* @__PURE__ */ Object.create(null), r = e.split(",");
285
289
  for (let s = 0; s < r.length; s++)
286
290
  n[r[s]] = !0;
@@ -291,7 +295,7 @@ const Ve = (e, t) => {
291
295
  return;
292
296
  const n = Array.isArray(t) ? t : t.match(/([^[.\]])+/g);
293
297
  return n == null ? void 0 : n.reduce((r, s) => r && r[s], e);
294
- }, Yn = (e, t, n) => {
298
+ }, qn = (e, t, n) => {
295
299
  const r = Array.isArray(t) ? t : t.match(/([^[.\]])+/g);
296
300
  r && r.reduce((s, l, i) => (s[l] === void 0 && (s[l] = {}), i === r.length - 1 && (s[l] = n), s[l]), e);
297
301
  };
@@ -312,7 +316,7 @@ function ft(e, t) {
312
316
  return !1;
313
317
  return !0;
314
318
  }
315
- function qn(e, t) {
319
+ function Jn(e, t) {
316
320
  if (!Array.isArray(e) || !Array.isArray(t) || e.length !== t.length)
317
321
  return !1;
318
322
  for (let n = 0; n < e.length; n++)
@@ -320,8 +324,8 @@ function qn(e, t) {
320
324
  return !1;
321
325
  return !0;
322
326
  }
323
- const Jn = Array.isArray;
324
- function Kn(e, t, n, r) {
327
+ const Kn = Array.isArray;
328
+ function Qn(e, t, n, r) {
325
329
  const s = (c) => {
326
330
  if (c.uuid === t)
327
331
  return c;
@@ -346,7 +350,7 @@ function Kn(e, t, n, r) {
346
350
  const a = n[n.length - 1];
347
351
  i[a] !== void 0 ? i[a] = r : console.warn(`Property path is not valid: ${n.join(".")}`);
348
352
  }
349
- function Qn(e) {
353
+ function Xn(e) {
350
354
  const t = new ot({
351
355
  color: 11003607,
352
356
  // Highlight color, e.g., yellow
@@ -357,18 +361,18 @@ function Qn(e) {
357
361
  side: jt
358
362
  // To e
359
363
  });
360
- return new Fn(e.geometry.clone(), t);
364
+ return new Wn(e.geometry.clone(), t);
361
365
  }
362
- function Xn(e) {
366
+ function Zn(e) {
363
367
  var n;
364
368
  let t = e.value;
365
369
  return e.value && ((n = e.value) != null && n.isMesh) && (t = e.value.position), Array.isArray(e.value) && (t = new Se(...t)), t;
366
370
  }
367
- function Zn(e) {
371
+ function er(e) {
368
372
  return "map" in e;
369
373
  }
370
374
  function Ye(e) {
371
- Zn(e) && e.map && e.map.dispose(), e.dispose();
375
+ er(e) && e.map && e.map.dispose(), e.dispose();
372
376
  }
373
377
  function dt(e) {
374
378
  var n, r;
@@ -377,7 +381,7 @@ function dt(e) {
377
381
  e && ((r = e.dispose) == null || r.call(e)), s.geometry && (s.geometry.dispose(), delete s.geometry), Array.isArray(s.material) ? (s.material.forEach((l) => Ye(l)), delete s.material) : s.material && (Ye(s.material), delete s.material);
378
382
  }
379
383
  }
380
- function er(e, t) {
384
+ function tr(e, t) {
381
385
  let n = 0;
382
386
  for (let r = 0; r < e.length; r++)
383
387
  t(e[r], r) && (e[n] = e[r], n++);
@@ -398,7 +402,7 @@ function qe(...e) {
398
402
  return e.map((t, n) => n === 0 ? t : t.charAt(0).toUpperCase() + t.slice(1)).join("");
399
403
  }
400
404
  const Je = /-\d+$/;
401
- function tr(e, t, n) {
405
+ function nr(e, t, n) {
402
406
  if (at(n)) {
403
407
  if (Je.test(n)) {
404
408
  const l = n.replace(Je, ""), { target: i, key: a } = Pe(e, l);
@@ -414,7 +418,7 @@ function tr(e, t, n) {
414
418
  } else
415
419
  t.__tres.previousAttach = n(e, t);
416
420
  }
417
- function nr(e, t, n) {
421
+ function rr(e, t, n) {
418
422
  var r, s, l;
419
423
  if (at(n)) {
420
424
  const { target: i, key: a } = Pe(e, n), c = t.__tres.previousAttach;
@@ -442,7 +446,7 @@ function pt(e) {
442
446
  const t = (n = e == null ? void 0 : e.__tres) == null ? void 0 : n.root;
443
447
  t && t.render && t.render.canBeInvalidated.value && t.invalidate();
444
448
  }
445
- function rr(e, t, n) {
449
+ function or(e, t, n) {
446
450
  var s;
447
451
  if (!G(e.setPixelRatio))
448
452
  return;
@@ -450,10 +454,10 @@ function rr(e, t, n) {
450
454
  if (de(n) && n.length >= 2) {
451
455
  const [l, i] = n;
452
456
  r = rt.clamp(t, l, i);
453
- } else xn(n) ? r = n : r = t;
457
+ } else kn(n) ? r = n : r = t;
454
458
  r !== ((s = e.getPixelRatio) == null ? void 0 : s.call(e)) && e.setPixelRatio(r);
455
459
  }
456
- function or(e, t, n, r, s) {
460
+ function sr(e, t, n, r, s) {
457
461
  const l = [...t.__tres.objects], i = Q(t);
458
462
  if (e = Q(e), i === e)
459
463
  return !0;
@@ -470,12 +474,12 @@ function or(e, t, n, r, s) {
470
474
  return !0;
471
475
  }
472
476
  function Q(e) {
473
- return jn(e) ? (e.object.__tres = e.__tres, e.object) : e;
477
+ return Bn(e) ? (e.object.__tres = e.__tres, e.object) : e;
474
478
  }
475
479
  function mt(e, t) {
476
480
  var r, s, l, i;
477
481
  const n = ((r = e.__tres) == null ? void 0 : r.parent) || t.scene.value;
478
- e.__tres && (e.__tres.parent = null), n && n.__tres && "objects" in n.__tres && er(n.__tres.objects, (a) => a !== e), (s = e.__tres) != null && s.attach ? nr(n, e, e.__tres.attach) : ((i = (l = e.parent) == null ? void 0 : l.remove) == null || i.call(l, Q(e)), e.parent = null);
482
+ e.__tres && (e.__tres.parent = null), n && n.__tres && "objects" in n.__tres && tr(n.__tres.objects, (a) => a !== e), (s = e.__tres) != null && s.attach ? rr(n, e, e.__tres.attach) : ((i = (l = e.parent) == null ? void 0 : l.remove) == null || i.call(l, Q(e)), e.parent = null);
479
483
  }
480
484
  function ht(e, t) {
481
485
  var n;
@@ -484,7 +488,7 @@ function ht(e, t) {
484
488
  t.deregisterCamera(r), (s = t.eventManager) == null || s.deregisterPointerMissedObject(r);
485
489
  }), t.deregisterCamera(e), pt(e);
486
490
  }
487
- const sr = Number.parseInt(Bt.replace("dev", "")), ae = {
491
+ const ir = Number.parseInt(Bt.replace("dev", "")), ae = {
488
492
  realistic: {
489
493
  shadows: !0,
490
494
  physicallyCorrectLights: !0,
@@ -501,7 +505,7 @@ const sr = Number.parseInt(Bt.replace("dev", "")), ae = {
501
505
  toneMappingExposure: 1
502
506
  }
503
507
  };
504
- function ir({
508
+ function ar({
505
509
  canvas: e,
506
510
  options: t,
507
511
  contextParts: { sizes: n, render: r, invalidate: s, advance: l }
@@ -546,7 +550,7 @@ function ir({
546
550
  l();
547
551
  }, 100), Te(() => {
548
552
  const g = k(t.preset);
549
- g && (g in ae || u(`Renderer Preset must be one of these: ${Object.keys(ae).join(", ")}`), ut(a.value, ae[g])), rr(a.value, o.value, k(t.dpr)), h === "always" && (r.frames.value = Math.max(1, r.frames.value));
553
+ g && (g in ae || u(`Renderer Preset must be one of these: ${Object.keys(ae).join(", ")}`), ut(a.value, ae[g])), or(a.value, o.value, k(t.dpr)), h === "always" && (r.frames.value = Math.max(1, r.frames.value));
550
554
  const b = (C, M) => {
551
555
  const P = k(C), E = () => {
552
556
  if (g)
@@ -556,11 +560,11 @@ function ir({
556
560
  return P;
557
561
  const S = E();
558
562
  return S !== void 0 ? S : Ve(f, M);
559
- }, y = (C, M) => Yn(a.value, M, b(C, M));
560
- y(t.shadows, "shadowMap.enabled"), y(t.toneMapping ?? st, "toneMapping"), y(t.shadowMapType, "shadowMap.type"), sr < 150 && y(!t.useLegacyLights, "physicallyCorrectLights"), y(t.outputColorSpace, "outputColorSpace"), y(t.toneMappingExposure, "toneMappingExposure");
563
+ }, y = (C, M) => qn(a.value, M, b(C, M));
564
+ y(t.shadows, "shadowMap.enabled"), y(t.toneMapping ?? st, "toneMapping"), y(t.shadowMapType, "shadowMap.type"), ir < 150 && y(!t.useLegacyLights, "physicallyCorrectLights"), y(t.outputColorSpace, "outputColorSpace"), y(t.toneMappingExposure, "toneMappingExposure");
561
565
  const d = b(t.clearColor, "clearColor");
562
566
  d && a.value.setClearColor(
563
- d ? Un(d) : new Z(0)
567
+ d ? Fn(d) : new Z(0)
564
568
  // default clear color is not easily/efficiently retrievable from three
565
569
  );
566
570
  }), K(() => {
@@ -569,14 +573,14 @@ function ir({
569
573
  renderer: a
570
574
  };
571
575
  }
572
- const ar = (e) => !!e && e.constructor === Array;
573
- function lr(e) {
576
+ const lr = (e) => !!e && e.constructor === Array;
577
+ function cr(e) {
574
578
  const t = { nodes: {}, materials: {} };
575
579
  return e && e.traverse((n) => {
576
580
  n.name && (t.nodes[n.name] = n), n.material && !t.materials[n.material.name] && (t.materials[n.material.name] = n.material);
577
581
  }), t;
578
582
  }
579
- async function Nr(e, t, n, r, s) {
583
+ async function zr(e, t, n, r, s) {
580
584
  const { logError: l } = Y(), i = new e();
581
585
  s && s(i), n && n(i);
582
586
  const c = (Array.isArray(t) ? t : [t]).map(
@@ -585,16 +589,16 @@ async function Nr(e, t, n, r, s) {
585
589
  o,
586
590
  (f) => {
587
591
  const h = f;
588
- h.scene && Object.assign(h, lr(h.scene)), u(h);
592
+ h.scene && Object.assign(h, cr(h.scene)), u(h);
589
593
  },
590
594
  r,
591
595
  (f) => v(l("[useLoader] - Failed to load resource", f))
592
596
  );
593
597
  })
594
598
  );
595
- return ar(t) ? await Promise.all(c) : await c[0];
599
+ return lr(t) ? await Promise.all(c) : await c[0];
596
600
  }
597
- async function zr(e, t) {
601
+ async function Gr(e, t) {
598
602
  const n = new Ut(t), r = (s) => new Promise((l, i) => {
599
603
  n.load(
600
604
  s,
@@ -605,7 +609,7 @@ async function zr(e, t) {
605
609
  }
606
610
  );
607
611
  });
608
- if (Jn(e)) {
612
+ if (Kn(e)) {
609
613
  const s = await Promise.all(e.map((l) => r(l)));
610
614
  return e.length > 1 ? s : s[0];
611
615
  } else {
@@ -631,7 +635,7 @@ async function zr(e, t) {
631
635
  };
632
636
  }
633
637
  }
634
- const cr = (e, t) => {
638
+ const ur = (e, t) => {
635
639
  const n = V(() => t.renderer.value.domElement), r = $([]), { x: s, y: l } = tn({ target: n });
636
640
  let i = 0;
637
641
  const { width: a, height: c, top: o, left: u } = nn(n), v = ({ x: m, y: T }) => {
@@ -710,7 +714,7 @@ const cr = (e, t) => {
710
714
  forceUpdate: p
711
715
  };
712
716
  };
713
- function Gr() {
717
+ function Vr() {
714
718
  const { logWarning: e } = Y();
715
719
  function t(l, i, a) {
716
720
  let c = null;
@@ -746,11 +750,11 @@ function xe(e) {
746
750
  }
747
751
  }), t;
748
752
  }
749
- function ur(e) {
753
+ function fr(e) {
750
754
  return (e / 1024).toFixed(2);
751
755
  }
752
756
  const Ce = H({}), Me = (e) => Object.assign(Ce.value, e);
753
- function fr(e, t, n) {
757
+ function dr(e, t, n) {
754
758
  var L;
755
759
  const r = $(), s = $();
756
760
  e && (r.value = e), t && (s.value = t);
@@ -779,7 +783,7 @@ function fr(e, t, n) {
779
783
  let R = B.parent;
780
784
  for (; R !== null && !w.stopPropagating && !x.includes(R); )
781
785
  w.eventObject = R, c(R[p], w), x.push(R), R = R.parent;
782
- const ne = Gn(p.slice(2));
786
+ const ne = Vn(p.slice(2));
783
787
  n(ne, { intersection: O, event: w });
784
788
  }
785
789
  }
@@ -793,7 +797,7 @@ function fr(e, t, n) {
793
797
  onPointerMissed: y,
794
798
  onWheel: d,
795
799
  forceUpdate: C
796
- } = cr(a, t);
800
+ } = ur(a, t);
797
801
  b((p) => o("onPointerUp", p)), g((p) => o("onPointerDown", p)), u((p) => o("onClick", p)), v((p) => o("onDoubleClick", p)), f((p) => o("onContextMenu", p)), d((p) => o("onWheel", p));
798
802
  let M = [];
799
803
  h((p) => {
@@ -843,7 +847,7 @@ function fr(e, t, n) {
843
847
  deregisterPointerMissedObject: A
844
848
  };
845
849
  }
846
- function dr(e, t, n = 10) {
850
+ function pr(e, t, n = 10) {
847
851
  const r = k(e) ? rn() : on(V(() => k(t).parentElement)), s = ye(Fe(r.width, n)), l = ye(Fe(r.height, n)), i = V(() => s.value / l.value);
848
852
  return {
849
853
  height: l,
@@ -877,7 +881,7 @@ function ve() {
877
881
  return e.size;
878
882
  } };
879
883
  }
880
- function pr() {
884
+ function mr() {
881
885
  let e = !0, t = !0, n = !1;
882
886
  const r = new tt(!1), s = H(r.running), l = H(!1);
883
887
  let i;
@@ -952,7 +956,7 @@ function pr() {
952
956
  setReady: (_) => e = _
953
957
  };
954
958
  }
955
- function mr(e, t, n = 100) {
959
+ function hr(e, t, n = 100) {
956
960
  n = n <= 0 ? 100 : n;
957
961
  const r = j(), s = /* @__PURE__ */ new Set();
958
962
  let l = !1, i = !1, a = null;
@@ -985,7 +989,7 @@ const te = /* @__PURE__ */ new WeakMap();
985
989
  function gt(e) {
986
990
  if (e = e || pe(), te.has(e))
987
991
  return te.get(e);
988
- const t = 100, n = Date.now(), l = mr(() => {
992
+ const t = 100, n = Date.now(), l = hr(() => {
989
993
  if (Date.now() - n >= t)
990
994
  return !0;
991
995
  {
@@ -995,12 +999,12 @@ function gt(e) {
995
999
  }, e);
996
1000
  return te.set(e, l), l;
997
1001
  }
998
- function Vr(e) {
1002
+ function Yr(e) {
999
1003
  const t = pe();
1000
1004
  if (t)
1001
1005
  return te.has(t) ? te.get(t).on(e) : gt(t).on(e);
1002
1006
  }
1003
- function hr({
1007
+ function gr({
1004
1008
  scene: e,
1005
1009
  canvas: t,
1006
1010
  windowSize: n,
@@ -1008,13 +1012,13 @@ function hr({
1008
1012
  rendererOptions: s,
1009
1013
  emit: l
1010
1014
  }) {
1011
- const i = $(e), a = dr(n, t), {
1015
+ const i = $(e), a = pr(n, t), {
1012
1016
  camera: c,
1013
1017
  cameras: o,
1014
1018
  registerCamera: u,
1015
1019
  deregisterCamera: v,
1016
1020
  setCameraActive: f
1017
- } = Bn({ sizes: a, scene: e }), h = {
1021
+ } = In({ sizes: a, scene: e }), h = {
1018
1022
  mode: H(s.renderMode || "always"),
1019
1023
  priority: H(0),
1020
1024
  frames: H(0),
@@ -1027,7 +1031,7 @@ function hr({
1027
1031
  function b() {
1028
1032
  s.renderMode === "manual" && (h.frames.value = 1);
1029
1033
  }
1030
- const { renderer: y } = ir(
1034
+ const { renderer: y } = ar(
1031
1035
  {
1032
1036
  scene: e,
1033
1037
  canvas: t,
@@ -1064,7 +1068,7 @@ function hr({
1064
1068
  registerCamera: u,
1065
1069
  setCameraActive: f,
1066
1070
  deregisterCamera: v,
1067
- loop: pr()
1071
+ loop: mr()
1068
1072
  };
1069
1073
  _e("useTres", d), d.scene.value.__tres = {
1070
1074
  root: d
@@ -1073,7 +1077,7 @@ function hr({
1073
1077
  }, "render");
1074
1078
  const { on: C, cancel: M } = gt(d);
1075
1079
  d.loop.setReady(!1), d.loop.start(), C(() => {
1076
- l("ready", d), d.loop.setReady(!0), fr(e, d, l);
1080
+ l("ready", d), d.loop.setReady(!0), dr(e, d, l);
1077
1081
  }), K(() => {
1078
1082
  M(), d.loop.stop();
1079
1083
  });
@@ -1096,8 +1100,8 @@ function pe() {
1096
1100
  throw new Error("useTresContext must be used together with useTresContextProvider");
1097
1101
  return e;
1098
1102
  }
1099
- const Yr = pe;
1100
- function qr() {
1103
+ const qr = pe;
1104
+ function Jr() {
1101
1105
  const {
1102
1106
  camera: e,
1103
1107
  scene: t,
@@ -1137,7 +1141,7 @@ function qr() {
1137
1141
  onAfterRender: u
1138
1142
  };
1139
1143
  }
1140
- function gr(e, t = {}, n = {}) {
1144
+ function vr(e, t = {}, n = {}) {
1141
1145
  let r = e;
1142
1146
  const s = (a) => {
1143
1147
  r = a;
@@ -1171,10 +1175,10 @@ const { logError: Ke } = Y(), Qe = [
1171
1175
  "onPointerMissed",
1172
1176
  "onLostPointerCapture",
1173
1177
  "onWheel"
1174
- ], vr = (e) => {
1178
+ ], yr = (e) => {
1175
1179
  const t = e.scene.value;
1176
1180
  function n(o, u, v, f) {
1177
- if (f || (f = {}), f.args || (f.args = []), o === "template" || Nn(o))
1181
+ if (f || (f = {}), f.args || (f.args = []), o === "template" || zn(o))
1178
1182
  return null;
1179
1183
  let h = o.replace("Tres", ""), g;
1180
1184
  if (o === "primitive") {
@@ -1182,7 +1186,7 @@ const { logError: Ke } = Y(), Qe = [
1182
1186
  "Tres primitives need an 'object' prop, whose value is an object or shallowRef<object>"
1183
1187
  ), h = f.object.type;
1184
1188
  const b = {};
1185
- g = gr(
1189
+ g = vr(
1186
1190
  f.object,
1187
1191
  {
1188
1192
  object: (d) => d,
@@ -1191,7 +1195,7 @@ const { logError: Ke } = Y(), Qe = [
1191
1195
  },
1192
1196
  {
1193
1197
  object: (d, C, M, P) => {
1194
- or(d, M, P, { patchProp: l, remove: s, insert: r }, e);
1198
+ sr(d, M, P, { patchProp: l, remove: s, insert: r }, e);
1195
1199
  },
1196
1200
  __tres: (d) => {
1197
1201
  Object.assign(b, d);
@@ -1219,7 +1223,7 @@ const { logError: Ke } = Y(), Qe = [
1219
1223
  return;
1220
1224
  u = u || t;
1221
1225
  const v = o.__tres ? o : z(o, {}, e), f = u.__tres ? u : z(u, {}, e);
1222
- o = Q(v), u = Q(f), o.__tres && ((h = o.__tres) == null ? void 0 : h.eventCount) > 0 && ((g = e.eventManager) == null || g.registerObject(o)), e.registerCamera(o), (b = e.eventManager) == null || b.registerPointerMissedObject(o), v.__tres.attach ? tr(f, v, v.__tres.attach) : N(o) && N(f) && (f.add(o), o.dispatchEvent({ type: "added" })), v.__tres.parent = f, f.__tres.objects && !f.__tres.objects.includes(v) && f.__tres.objects.push(v);
1226
+ o = Q(v), u = Q(f), o.__tres && ((h = o.__tres) == null ? void 0 : h.eventCount) > 0 && ((g = e.eventManager) == null || g.registerObject(o)), e.registerCamera(o), (b = e.eventManager) == null || b.registerPointerMissedObject(o), v.__tres.attach ? nr(f, v, v.__tres.attach) : N(o) && N(f) && (f.add(o), o.dispatchEvent({ type: "added" })), v.__tres.parent = f, f.__tres.objects && !f.__tres.objects.includes(v) && f.__tres.objects.push(v);
1223
1227
  }
1224
1228
  function s(o, u) {
1225
1229
  var g, b, y, d;
@@ -1229,7 +1233,7 @@ const { logError: Ke } = Y(), Qe = [
1229
1233
  const v = (y = o.__tres) == null ? void 0 : y.dispose;
1230
1234
  be(v) || (v === null ? u = !1 : u = v);
1231
1235
  const f = (d = o.__tres) == null ? void 0 : d.primitive, h = u === "default" ? !f : !!u;
1232
- if (o.__tres && "objects" in o.__tres && [...o.__tres.objects].forEach((C) => s(C, u)), h && o.children && [...o.children].forEach((C) => s(C, u)), mt(o, e), ht(o, e), h && !Dn(o)) {
1236
+ if (o.__tres && "objects" in o.__tres && [...o.__tres.objects].forEach((C) => s(C, u)), h && o.children && [...o.children].forEach((C) => s(C, u)), mt(o, e), ht(o, e), h && !jn(o)) {
1233
1237
  if (G(u))
1234
1238
  u(o);
1235
1239
  else if (G(o.dispose))
@@ -1262,7 +1266,7 @@ const { logError: Ke } = Y(), Qe = [
1262
1266
  let b = ie(g), y = h == null ? void 0 : h[b];
1263
1267
  if (g === "args") {
1264
1268
  const P = o, E = v ?? [], S = f ?? [], _ = ((M = o.__tres) == null ? void 0 : M.type) || o.type;
1265
- _ && E.length && !qn(E, S) && (h = Object.assign(
1269
+ _ && E.length && !Jn(E, S) && (h = Object.assign(
1266
1270
  P,
1267
1271
  new Ce.value[_](...f)
1268
1272
  ));
@@ -1318,22 +1322,22 @@ const { logError: Ke } = Y(), Qe = [
1318
1322
  insertStaticContent: () => void 0
1319
1323
  };
1320
1324
  };
1321
- function yr() {
1325
+ function _r() {
1322
1326
  return vt().__VUE_DEVTOOLS_GLOBAL_HOOK__;
1323
1327
  }
1324
1328
  function vt() {
1325
1329
  return typeof navigator < "u" && typeof window < "u" ? window : typeof globalThis < "u" ? globalThis : {};
1326
1330
  }
1327
- const _r = typeof Proxy == "function", wr = "devtools-plugin:setup", br = "plugin:settings:set";
1331
+ const wr = typeof Proxy == "function", br = "devtools-plugin:setup", Pr = "plugin:settings:set";
1328
1332
  let q, Ee;
1329
- function Pr() {
1333
+ function Cr() {
1330
1334
  var e;
1331
1335
  return q !== void 0 || (typeof window < "u" && window.performance ? (q = !0, Ee = window.performance) : typeof globalThis < "u" && (!((e = globalThis.perf_hooks) === null || e === void 0) && e.performance) ? (q = !0, Ee = globalThis.perf_hooks.performance) : q = !1), q;
1332
1336
  }
1333
- function Cr() {
1334
- return Pr() ? Ee.now() : Date.now();
1337
+ function Mr() {
1338
+ return Cr() ? Ee.now() : Date.now();
1335
1339
  }
1336
- class Mr {
1340
+ class Er {
1337
1341
  constructor(t, n) {
1338
1342
  this.target = null, this.targetQueue = [], this.onQueue = [], this.plugin = t, this.hook = n;
1339
1343
  const r = {};
@@ -1361,9 +1365,9 @@ class Mr {
1361
1365
  l = i;
1362
1366
  },
1363
1367
  now() {
1364
- return Cr();
1368
+ return Mr();
1365
1369
  }
1366
- }, n && n.on(br, (i, a) => {
1370
+ }, n && n.on(Pr, (i, a) => {
1367
1371
  i === this.plugin.id && this.fallbacks.setSettings(a);
1368
1372
  }), this.proxiedOn = new Proxy({}, {
1369
1373
  get: (i, a) => this.target ? this.target.on[a] : (...c) => {
@@ -1395,12 +1399,12 @@ class Mr {
1395
1399
  n.resolve(await this.target[n.method](...n.args));
1396
1400
  }
1397
1401
  }
1398
- function Er(e, t) {
1399
- const n = e, r = vt(), s = yr(), l = _r && n.enableEarlyProxy;
1402
+ function Tr(e, t) {
1403
+ const n = e, r = vt(), s = _r(), l = wr && n.enableEarlyProxy;
1400
1404
  if (s && (r.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__ || !l))
1401
- s.emit(wr, e, t);
1405
+ s.emit(br, e, t);
1402
1406
  else {
1403
- const i = l ? new Mr(n, s) : null;
1407
+ const i = l ? new Er(n, s) : null;
1404
1408
  (r.__VUE_DEVTOOLS_PLUGINS__ = r.__VUE_DEVTOOLS_PLUGINS__ || []).push({
1405
1409
  pluginDescriptor: n,
1406
1410
  setupFn: t,
@@ -1408,7 +1412,7 @@ function Er(e, t) {
1408
1412
  }), i && t(i.proxiedTarget);
1409
1413
  }
1410
1414
  }
1411
- function Tr(e, t) {
1415
+ function Sr(e, t) {
1412
1416
  const n = `▲ ■ ●${e}`;
1413
1417
  typeof Xe == "function" ? Xe(n, t) : console.log(n);
1414
1418
  }
@@ -1429,11 +1433,11 @@ const yt = (e) => {
1429
1433
  });
1430
1434
  const n = xe(e);
1431
1435
  return n > 0 && t.tags.push({
1432
- label: `${ur(n)} KB`,
1436
+ label: `${fr(n)} KB`,
1433
1437
  textColor: 15707189,
1434
1438
  backgroundColor: 16775644,
1435
1439
  tooltip: "Memory usage"
1436
- }), e.type.includes("Light") && (Rn(e) && t.tags.push({
1440
+ }), e.type.includes("Light") && (On(e) && t.tags.push({
1437
1441
  label: `${e.intensity}`,
1438
1442
  textColor: 9738662,
1439
1443
  backgroundColor: 16316922,
@@ -1463,22 +1467,22 @@ function _t(e, t, n = "") {
1463
1467
  t.children.push(s), _t(r, s, n);
1464
1468
  });
1465
1469
  }
1466
- const Sr = [], X = "tres:inspector", Ar = Et({
1470
+ const Ar = [], X = "tres:inspector", xr = Et({
1467
1471
  sceneGraph: null
1468
1472
  });
1469
- function xr(e, t) {
1470
- Er(
1473
+ function kr(e, t) {
1474
+ Tr(
1471
1475
  {
1472
1476
  id: "dev.esm.tres",
1473
1477
  label: "TresJS 🪐",
1474
1478
  logo: "https://raw.githubusercontent.com/Tresjs/tres/main/public/favicon.svg",
1475
1479
  packageName: "tresjs",
1476
1480
  homepage: "https://tresjs.org",
1477
- componentStateTypes: Sr,
1481
+ componentStateTypes: Ar,
1478
1482
  app: e
1479
1483
  },
1480
1484
  (n) => {
1481
- typeof n.now != "function" && Tr(
1485
+ typeof n.now != "function" && Sr(
1482
1486
  "You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html."
1483
1487
  ), n.addInspector({
1484
1488
  id: X,
@@ -1492,7 +1496,7 @@ function xr(e, t) {
1492
1496
  }, 5e3), n.on.getInspectorTree((l) => {
1493
1497
  if (l.inspectorId === X) {
1494
1498
  const i = yt(t.scene.value);
1495
- _t(t.scene.value, i, l.filter), Ar.sceneGraph = i, l.rootNodes = [i];
1499
+ _t(t.scene.value, i, l.filter), xr.sceneGraph = i, l.rootNodes = [i];
1496
1500
  }
1497
1501
  });
1498
1502
  let r = null, s = null;
@@ -1503,7 +1507,7 @@ function xr(e, t) {
1503
1507
  if (!a)
1504
1508
  return;
1505
1509
  if (s && r && r.parent && s.remove(r), a.isMesh) {
1506
- const c = Qn(a);
1510
+ const c = Xn(a);
1507
1511
  a.add(c), r = c, s = a;
1508
1512
  }
1509
1513
  l.state = {
@@ -1526,12 +1530,12 @@ function xr(e, t) {
1526
1530
  }))) || []);
1527
1531
  }
1528
1532
  }), n.on.editInspectorState((l) => {
1529
- l.inspectorId === X && Kn(t.scene.value, l.nodeId, l.path, l.state.value);
1533
+ l.inspectorId === X && Qn(t.scene.value, l.nodeId, l.path, l.state.value);
1530
1534
  });
1531
1535
  }
1532
1536
  );
1533
1537
  }
1534
- const kr = ["data-scene", "data-tres"], Lr = /* @__PURE__ */ Be({
1538
+ const Lr = ["data-scene", "data-tres"], Rr = /* @__PURE__ */ Be({
1535
1539
  __name: "TresCanvas",
1536
1540
  props: {
1537
1541
  shadows: { type: Boolean, default: void 0 },
@@ -1583,10 +1587,10 @@ const kr = ["data-scene", "data-tres"], Lr = /* @__PURE__ */ Be({
1583
1587
  setup() {
1584
1588
  var P;
1585
1589
  const M = (P = Ie()) == null ? void 0 : P.appContext;
1586
- return M && (M.app = o), _e("useTres", d), _e("extend", Me), typeof window < "u" && xr(M == null ? void 0 : M.app, d), () => He(Ot, null, C ? [] : l.default());
1590
+ return M && (M.app = o), _e("useTres", d), _e("extend", Me), typeof window < "u" && kr(M == null ? void 0 : M.app, d), () => He(Ot, null, C ? [] : l.default());
1587
1591
  }
1588
1592
  }), v = (d, C = !1) => {
1589
- const M = u(d, C), { render: P } = Rt(vr(d));
1593
+ const M = u(d, C), { render: P } = Rt(yr(d));
1590
1594
  P(He(M), c.value);
1591
1595
  }, f = (d, C = !1) => {
1592
1596
  dt(d.scene.value), C && (d.renderer.value.dispose(), d.renderer.value.renderLists.dispose(), d.renderer.value.forceContextLoss()), c.value.__tres = {
@@ -1599,7 +1603,7 @@ const kr = ["data-scene", "data-tres"], Lr = /* @__PURE__ */ Be({
1599
1603
  };
1600
1604
  return St(() => {
1601
1605
  const d = a;
1602
- g.value = hr({
1606
+ g.value = gr({
1603
1607
  scene: c.value,
1604
1608
  canvas: d,
1605
1609
  windowSize: r.windowSize ?? !1,
@@ -1637,7 +1641,7 @@ const kr = ["data-scene", "data-tres"], Lr = /* @__PURE__ */ Be({
1637
1641
  ref: a,
1638
1642
  "data-scene": c.value.uuid,
1639
1643
  class: kt(d.$attrs.class),
1640
- "data-tres": `tresjs ${J(An).version}`,
1644
+ "data-tres": `tresjs ${J(xn).version}`,
1641
1645
  style: Lt({
1642
1646
  display: "block",
1643
1647
  width: "100%",
@@ -1649,19 +1653,19 @@ const kr = ["data-scene", "data-tres"], Lr = /* @__PURE__ */ Be({
1649
1653
  touchAction: "none",
1650
1654
  ...d.$attrs.style
1651
1655
  })
1652
- }, null, 14, kr));
1656
+ }, null, 14, Lr));
1653
1657
  }
1654
- }), Rr = [
1658
+ }), Or = [
1655
1659
  "TresCanvas",
1656
1660
  "TresLeches",
1657
1661
  "TresScene"
1658
- ], Or = {
1662
+ ], Dr = {
1659
1663
  template: {
1660
1664
  compilerOptions: {
1661
- isCustomElement: (e) => e.startsWith("Tres") && !Rr.includes(e) || e === "primitive"
1665
+ isCustomElement: (e) => e.startsWith("Tres") && !Or.includes(e) || e === "primitive"
1662
1666
  }
1663
1667
  }
1664
- }, Jr = Or, Kr = {
1668
+ }, Kr = Dr, Qr = {
1665
1669
  mounted: (e, t) => {
1666
1670
  if (t.arg) {
1667
1671
  console.log(`v-log:${t.arg}`, e[t.arg]);
@@ -1695,19 +1699,19 @@ class wt extends zt {
1695
1699
  }
1696
1700
  const { logWarning: Ze } = Y();
1697
1701
  let le, W;
1698
- const Dr = {
1702
+ const jr = {
1699
1703
  DirectionalLight: qt,
1700
1704
  PointLight: Jt,
1701
1705
  SpotLight: Kt,
1702
1706
  HemisphereLight: Qt,
1703
1707
  RectAreaLight: wt
1704
- }, Qr = {
1708
+ }, Xr = {
1705
1709
  mounted: (e) => {
1706
1710
  if (!e.isLight) {
1707
1711
  Ze(`${e.type} is not a light`);
1708
1712
  return;
1709
1713
  }
1710
- le = Dr[e.type], e.parent.add(new le(e, 1, e.color.getHex()));
1714
+ le = jr[e.type], e.parent.add(new le(e, 1, e.color.getHex()));
1711
1715
  },
1712
1716
  updated: (e) => {
1713
1717
  W = e.parent.children.find((t) => t instanceof le), !(W instanceof wt) && W.update();
@@ -1719,14 +1723,14 @@ const Dr = {
1719
1723
  }
1720
1724
  W = e.parent.children.find((t) => t instanceof le), W && W.dispose && W.dispose(), e.parent.remove(W);
1721
1725
  }
1722
- }, { logWarning: jr } = Y();
1726
+ }, { logWarning: Br } = Y();
1723
1727
  let I = null;
1724
- const Xr = {
1728
+ const Zr = {
1725
1729
  updated: (e, t) => {
1726
1730
  var s;
1727
- const n = Xn(t);
1731
+ const n = Zn(t);
1728
1732
  if (!n) {
1729
- jr(`v-distance-to: problem with binding value: ${t.value}`);
1733
+ Br(`v-distance-to: problem with binding value: ${t.value}`);
1730
1734
  return;
1731
1735
  }
1732
1736
  I && (I.dispose(), e.parent.remove(I));
@@ -1742,38 +1746,38 @@ const Xr = {
1742
1746
  unmounted: (e) => {
1743
1747
  I == null || I.dispose(), e.parent.remove(I);
1744
1748
  }
1745
- }, Zr = {
1749
+ }, eo = {
1746
1750
  install(e) {
1747
- e.component("TresCanvas", Lr);
1751
+ e.component("TresCanvas", Rr);
1748
1752
  }
1749
1753
  };
1750
1754
  export {
1751
- Lr as TresCanvas,
1755
+ Rr as TresCanvas,
1752
1756
  Ce as catalogue,
1753
- pr as createRenderLoop,
1754
- Zr as default,
1757
+ mr as createRenderLoop,
1758
+ eo as default,
1755
1759
  dt as dispose,
1756
1760
  Me as extend,
1757
- Fr as isProd,
1758
- Un as normalizeColor,
1759
- Wr as normalizeVectorFlexibleParam,
1760
- Vr as onTresReady,
1761
- Jr as templateCompilerOptions,
1762
- lr as trasverseObjects,
1763
- Bn as useCamera,
1764
- Nr as useLoader,
1761
+ Wr as isProd,
1762
+ Fn as normalizeColor,
1763
+ Nr as normalizeVectorFlexibleParam,
1764
+ Yr as onTresReady,
1765
+ Kr as templateCompilerOptions,
1766
+ cr as trasverseObjects,
1767
+ In as useCamera,
1768
+ zr as useLoader,
1765
1769
  Y as useLogger,
1766
- qr as useLoop,
1767
- cr as useRaycaster,
1768
- Ur as useRenderLoop,
1769
- ir as useRenderer,
1770
- Gr as useSeek,
1771
- zr as useTexture,
1772
- Yr as useTres,
1770
+ Jr as useLoop,
1771
+ ur as useRaycaster,
1772
+ Fr as useRenderLoop,
1773
+ ar as useRenderer,
1774
+ Vr as useSeek,
1775
+ Gr as useTexture,
1776
+ qr as useTres,
1773
1777
  pe as useTresContext,
1774
- hr as useTresContextProvider,
1775
- fr as useTresEventManager,
1776
- Xr as vDistanceTo,
1777
- Qr as vLightHelper,
1778
- Kr as vLog
1778
+ gr as useTresContextProvider,
1779
+ dr as useTresEventManager,
1780
+ Zr as vDistanceTo,
1781
+ Xr as vLightHelper,
1782
+ Qr as vLog
1779
1783
  };
package/dist/tres.umd.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v4.2.6
3
+ * version: v4.2.7
4
4
  * (c) 2024
5
5
  * description: Declarative ThreeJS using Vue Components
6
6
  * author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
7
7
  */
8
- (function(b,p){typeof exports=="object"&&typeof module<"u"?p(exports,require("vue"),require("three"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","three","@vueuse/core"],p):(b=typeof globalThis<"u"?globalThis:b||self,p(b.tres={},b.Vue,b.Three,b.VueUseCore))})(this,function(b,p,y,C){"use strict";var _n=Object.defineProperty;var wn=(b,p,y)=>p in b?_n(b,p,{enumerable:!0,configurable:!0,writable:!0,value:y}):b[p]=y;var ye=(b,p,y)=>wn(b,typeof p!="symbol"?p+"":p,y);function it(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const _e=it(y),at={name:"@tresjs/core",type:"module",version:"4.2.6",packageManager:"pnpm@9.1.4",description:"Declarative ThreeJS using Vue Components",author:"Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",license:"MIT",keywords:["vue","3d","threejs","three","threejs-vue"],sideEffects:!1,exports:{".":{types:"./dist/index.d.ts",import:"./dist/tres.js",require:"./dist/tres.umd.cjs"},"./components":{types:"./dist/src/components/index.d.ts"},"./composables":{types:"./dist/src/composables/index.d.ts"},"./types":{types:"./dist/src/types/index.d.ts"},"./utils":{types:"./dist/src/utils/index.d.ts"},"./*":"./*"},main:"./dist/tres.js",module:"./dist/tres.js",types:"./dist/index.d.ts",files:["*.d.ts","dist"],publishConfig:{access:"public"},scripts:{dev:"cd playground && npm run dev",build:"vite build",playground:"cd playground && npm run dev",test:"vitest","test:ci":"vitest run","test:ui":"vitest --ui --coverage.enabled=true",release:"release-it",coverage:"vitest run --coverage",lint:"eslint .","lint:fix":"eslint . --fix","docs:dev":"vitepress dev docs","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs","docs:preview":"vitepress preview docs","docs:contributors":"esno scripts/update-contributors.ts",prepare:"node .husky/install.mjs"},peerDependencies:{three:">=0.133",vue:">=3.4"},dependencies:{"@alvarosabu/utils":"^3.2.0","@vue/devtools-api":"^6.6.3","@vueuse/core":"^10.11.0"},devDependencies:{"@release-it/conventional-changelog":"^8.0.1","@stackblitz/sdk":"^1.11.0","@tresjs/cientos":"3.9.0","@tresjs/eslint-config":"^1.1.0","@types/three":"^0.166.0","@typescript-eslint/eslint-plugin":"^7.16.0","@typescript-eslint/parser":"^7.16.0","@vitejs/plugin-vue":"^5.0.5","@vitest/coverage-c8":"^0.33.0","@vitest/coverage-v8":"^2.0.2","@vitest/ui":"^2.0.2","@vue/test-utils":"^2.4.6",eslint:"^9.6.0","eslint-plugin-vue":"^9.27.0",esno:"^4.7.0",gsap:"^3.12.5",husky:"^9.0.11",jsdom:"^24.1.0",kolorist:"^1.8.0",ohmyfetch:"^0.4.21",pathe:"^1.1.2","release-it":"^17.5.0","rollup-plugin-analyzer":"^4.0.0","rollup-plugin-copy":"^3.5.0","rollup-plugin-visualizer":"^5.12.0",sponsorkit:"^0.14.6",three:"^0.166.1",unocss:"^0.61.3",unplugin:"^1.11.0","unplugin-vue-components":"^0.27.2",vite:"^5.3.3","vite-plugin-banner":"^0.7.1","vite-plugin-dts":"3.9.1","vite-plugin-inspect":"^0.8.4","vite-plugin-require-transform":"^1.0.21","vite-svg-loader":"^5.1.0",vitepress:"1.3.0",vitest:"^2.0.2",vue:"^3.4.31","vue-demi":"^0.14.8"}};function fe(e){return typeof e>"u"}function Z(e){return Array.isArray(e)}function lt(e){return typeof e=="number"}function we(e){return typeof e=="string"}function G(e){return typeof e=="function"}function U(e){return e===Object(e)&&!Z(e)&&!G(e)}function F(e){return U(e)&&"isObject3D"in e&&!!e.isObject3D}function be(e){return U(e)&&"isCamera"in e&&!!e.isCamera}function ct(e){return U(e)&&"isBufferGeometry"in e&&!!e.isBufferGeometry}function ut(e){return U(e)&&"isMaterial"in e&&!!e.isMaterial}function ft(e){return U(e)&&"isLight"in e&&!!e.isLight}function dt(e){return U(e)&&"isFog"in e&&!!e.isFog}function pt(e){return U(e)&&"isScene"in e&&!!e.isScene}function ee(e){return F(e)||ct(e)||ut(e)||dt(e)}function mt(e){return U(e)&&!!e.isPrimitive}const Ce=({sizes:e})=>{const t=p.ref([]),n=p.computed(()=>t.value[0]),r=i=>{const a=i instanceof y.Camera?i:t.value.find(o=>o.uuid===i);if(!a)return;const c=t.value.filter(({uuid:o})=>o!==a.uuid);t.value=[a,...c]},s=(i,a=!1)=>{if(be(i)){const c=i;if(t.value.some(({uuid:o})=>o===c.uuid))return;a?r(c):t.value.push(c)}},l=i=>{if(be(i)){const a=i;t.value=t.value.filter(({uuid:c})=>c!==a.uuid)}};return p.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(i=>{!i.manual&&(i instanceof y.PerspectiveCamera||ht(i))&&(i instanceof y.PerspectiveCamera?i.aspect=e.aspectRatio.value:(i.left=e.width.value*-.5,i.right=e.width.value*.5,i.top=e.height.value*.5,i.bottom=e.height.value*-.5),i.updateProjectionMatrix())})}),p.onUnmounted(()=>{t.value=[]}),{camera:n,cameras:t,registerCamera:s,deregisterCamera:l,setCameraActive:r}};function ht(e){return e.hasOwnProperty("isOrthographicCamera")&&e.isOrthographicCamera}const Me=C.createEventHook(),Pe=C.createEventHook(),de=C.createEventHook(),K=new y.Clock;let te=0,ne=0;const{pause:gt,resume:Se,isActive:vt}=C.useRafFn(()=>{Me.trigger({delta:te,elapsed:ne,clock:K}),Pe.trigger({delta:te,elapsed:ne,clock:K}),de.trigger({delta:te,elapsed:ne,clock:K})},{immediate:!1});de.on(()=>{te=K.getDelta(),ne=K.getElapsedTime()});let ke=!1;const yt=()=>(ke||(ke=!0,Se()),{onBeforeLoop:Me.on,onLoop:Pe.on,onAfterLoop:de.on,pause:gt,resume:Se,isActive:vt}),_t=!0,re="[TresJS ▲ ■ ●] ";function W(){function e(...r){typeof r[0]=="string"?r[0]=re+r[0]:r.unshift(re),console.error(...r)}function t(...r){typeof r[0]=="string"?r[0]=re+r[0]:r.unshift(re),console.warn(...r)}function n(r,s){}return{logError:e,logWarning:t,logMessage:n}}function wt(e){return typeof e=="number"?[e,e,e]:e instanceof y.Vector3?[e.x,e.y,e.z]:e}function Ae(e){return e instanceof y.Color?e:Array.isArray(e)?new y.Color(...e):new y.Color(e)}class bt extends _e.Mesh{constructor(...n){super(...n);ye(this,"type","HightlightMesh");ye(this,"createTime");this.createTime=Date.now()}onBeforeRender(){const r=(Date.now()-this.createTime)/1e3,i=1+.07*Math.sin(2.5*r);this.scale.set(i,i,i)}}const Le=(e,t)=>{for(const n of Object.keys(t))t[n]instanceof Object&&Object.assign(t[n],Le(e[n],t[n]));return Object.assign(e||{},t),e},Ct=St("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 Oe(e){return e&&e.nodeType===1}function oe(e){return e.replace(/-([a-z])/g,(t,n)=>n.toUpperCase())}const Mt=/\B([A-Z])/g;function Pt(e){return e.replace(Mt,"-$1").toLowerCase()}function St(e,t){const n=Object.create(null),r=e.split(",");for(let s=0;s<r.length;s++)n[r[s]]=!0;return s=>!!n[s]}const De=(e,t)=>{if(!t)return;const n=Array.isArray(t)?t:t.match(/([^[.\]])+/g);return n==null?void 0:n.reduce((r,s)=>r&&r[s],e)},kt=(e,t,n)=>{const r=Array.isArray(t)?t:t.match(/([^[.\]])+/g);r&&r.reduce((s,l,i)=>(s[l]===void 0&&(s[l]={}),i===r.length-1&&(s[l]=n),s[l]),e)};function je(e,t){if(Oe(e)&&Oe(t)){const s=e.attributes,l=t.attributes;return s.length!==l.length?!1:Array.from(s).every(({name:i,value:a})=>t.getAttribute(i)===a)}if(e===t)return!0;if(e===null||typeof e!="object"||t===null||typeof t!="object")return!1;const n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(const s of n)if(!r.includes(s)||!je(e[s],t[s]))return!1;return!0}function At(e,t){if(!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!je(e[n],t[n]))return!1;return!0}const Lt=Array.isArray;function Ot(e,t,n,r){const s=c=>{if(c.uuid===t)return c;for(const o of c.children){const u=s(o);if(u)return u}},l=s(e);if(!l){console.warn("Object with UUID not found in the scene.");return}let i=l;for(let c=0;c<n.length-1;c++)if(i[n[c]]!==void 0)i=i[n[c]];else{console.warn(`Property path is not valid: ${n.join(".")}`);return}const a=n[n.length-1];i[a]!==void 0?i[a]=r:console.warn(`Property path is not valid: ${n.join(".")}`)}function Dt(e){const t=new y.MeshBasicMaterial({color:11003607,transparent:!0,opacity:.2,depthTest:!1,side:y.DoubleSide});return new bt(e.geometry.clone(),t)}function jt(e){var n;let t=e.value;return e.value&&((n=e.value)!=null&&n.isMesh)&&(t=e.value.position),Array.isArray(e.value)&&(t=new y.Vector3(...t)),t}function Tt(e){return"map"in e}function Te(e){Tt(e)&&e.map&&e.map.dispose(),e.dispose()}function pe(e){var n,r;if(e.parent&&((n=e.removeFromParent)==null||n.call(e)),delete e.__tres,[...e.children].forEach(s=>pe(s)),!(e instanceof y.Scene)){const s=e;e&&((r=e.dispose)==null||r.call(e)),s.geometry&&(s.geometry.dispose(),delete s.geometry),Array.isArray(s.material)?(s.material.forEach(l=>Te(l)),delete s.material):s.material&&(Te(s.material),delete s.material)}}function xt(e,t){let n=0;for(let r=0;r<e.length;r++)t(e[r],r)&&(e[n]=e[r],n++);return e.length=n,e}function me(e,t){let n=e;if(t.includes("-")){const r=t.split("-");let s=r.shift();for(;n&&r.length;)s in n?(n=n[s],s=r.shift()):s=xe(s,r.shift());return{target:n,key:xe(s,...r)}}else return{target:n,key:t}}function xe(...e){return e.map((t,n)=>n===0?t:t.charAt(0).toUpperCase()+t.slice(1)).join("")}const Be=/-\d+$/;function Bt(e,t,n){if(we(n)){if(Be.test(n)){const l=n.replace(Be,""),{target:i,key:a}=me(e,l);if(!Array.isArray(i[a])){const c=i[a],o=[];o.__tresDetach=()=>{o.every(u=>fe(u))&&(i[a]=c)},i[a]=o}}const{target:r,key:s}=me(e,n);t.__tres.previousAttach=r[s],r[s]=Y(t)}else t.__tres.previousAttach=n(e,t)}function It(e,t,n){var r,s,l;if(we(n)){const{target:i,key:a}=me(e,n),c=t.__tres.previousAttach;c===void 0?delete i[a]:i[a]=c,"__tresDetach"in i&&i.__tresDetach()}else(s=(r=t.__tres)==null?void 0:r.previousAttach)==null||s.call(r,e,t);(l=t.__tres)==null||delete l.previousAttach}function q(e,t,n){const r=e;return r.__tres={type:"unknown",eventCount:0,root:n,handlers:{},memoizedProps:{},objects:[],parent:null,previousAttach:null,...t},r.__tres.attach||(r.isMaterial?r.__tres.attach="material":r.isBufferGeometry?r.__tres.attach="geometry":r.isFog&&(r.__tres.attach="fog")),r}function Ie(e){var n;const t=(n=e==null?void 0:e.__tres)==null?void 0:n.root;t&&t.render&&t.render.canBeInvalidated.value&&t.invalidate()}function Fn(e){}function Rt(e,t,n){var s;if(!G(e.setPixelRatio))return;let r=0;if(Z(n)&&n.length>=2){const[l,i]=n;r=y.MathUtils.clamp(t,l,i)}else lt(n)?r=n:r=t;r!==((s=e.getPixelRatio)==null?void 0:s.call(e))&&e.setPixelRatio(r)}function Et(e,t,n,r,s){const l=[...t.__tres.objects],i=Y(t);if(e=Y(e),i===e)return!0;const a=q(e,t.__tres??{},s),c=t.parent??t.__tres.parent??null,o={...t.__tres.memoizedProps};delete o.object;for(const u of l)Re(u,s),Ee(u,s);i.__tres.objects=[],r.remove(t);for(const[u,_]of Object.entries(o))r.patchProp(a,u,a[u],_);n(e),r.insert(t,c);for(const u of l)r.insert(u,t);return!0}function Y(e){return mt(e)?(e.object.__tres=e.__tres,e.object):e}function Re(e,t){var r,s,l,i;const n=((r=e.__tres)==null?void 0:r.parent)||t.scene.value;e.__tres&&(e.__tres.parent=null),n&&n.__tres&&"objects"in n.__tres&&xt(n.__tres.objects,a=>a!==e),(s=e.__tres)!=null&&s.attach?It(n,e,e.__tres.attach):((i=(l=e.parent)==null?void 0:l.remove)==null||i.call(l,Y(e)),e.parent=null)}function Ee(e,t){var n;(n=e.traverse)==null||n.call(e,r=>{var s;t.deregisterCamera(r),(s=t.eventManager)==null||s.deregisterPointerMissedObject(r)}),t.deregisterCamera(e),Ie(e)}const $t=Number.parseInt(y.REVISION.replace("dev","")),se={realistic:{shadows:!0,physicallyCorrectLights:!0,outputColorSpace:y.SRGBColorSpace,toneMapping:y.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:y.PCFSoftShadowMap}},flat:{toneMapping:y.NoToneMapping,toneMappingExposure:1}};function $e({canvas:e,options:t,contextParts:{sizes:n,render:r,invalidate:s,advance:l}}){const i=p.computed(()=>({alpha:C.toValue(t.alpha)??!0,depth:C.toValue(t.depth),canvas:C.unrefElement(e),context:C.toValue(t.context),stencil:C.toValue(t.stencil),antialias:C.toValue(t.antialias)??!0,precision:C.toValue(t.precision),powerPreference:C.toValue(t.powerPreference),premultipliedAlpha:C.toValue(t.premultipliedAlpha),preserveDrawingBuffer:C.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:C.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:C.toValue(t.failIfMajorPerformanceCaveat)})),a=p.shallowRef(new y.WebGLRenderer(i.value));function c(){t.renderMode==="on-demand"&&s()}p.watch(i,()=>{a.value.dispose(),a.value=new y.WebGLRenderer(i.value),c()}),p.watch([n.width,n.height],()=>{a.value.setSize(n.width.value,n.height.value),c()},{immediate:!0}),p.watch(()=>t.clearColor,c);const{pixelRatio:o}=C.useDevicePixelRatio(),{logError:u}=W(),f=(()=>{const v=new y.WebGLRenderer,S={shadowMap:{enabled:v.shadowMap.enabled,type:v.shadowMap.type},toneMapping:v.toneMapping,toneMappingExposure:v.toneMappingExposure,outputColorSpace:v.outputColorSpace};return v.dispose(),S})(),g=C.toValue(t.renderMode);return g==="on-demand"&&s(),g==="manual"&&setTimeout(()=>{l()},100),p.watchEffect(()=>{const v=C.toValue(t.preset);v&&(v in se||u(`Renderer Preset must be one of these: ${Object.keys(se).join(", ")}`),Le(a.value,se[v])),Rt(a.value,o.value,C.toValue(t.dpr)),g==="always"&&(r.frames.value=Math.max(1,r.frames.value));const S=(A,L)=>{const k=C.toValue(A),O=()=>{if(v)return De(se[v],L)};if(k!==void 0)return k;const j=O();return j!==void 0?j:De(f,L)},w=(A,L)=>kt(a.value,L,S(A,L));w(t.shadows,"shadowMap.enabled"),w(t.toneMapping??y.ACESFilmicToneMapping,"toneMapping"),w(t.shadowMapType,"shadowMap.type"),$t<150&&w(!t.useLegacyLights,"physicallyCorrectLights"),w(t.outputColorSpace,"outputColorSpace"),w(t.toneMappingExposure,"toneMappingExposure");const d=S(t.clearColor,"clearColor");d&&a.value.setClearColor(d?Ae(d):new y.Color(0))}),p.onUnmounted(()=>{a.value.dispose(),a.value.forceContextLoss()}),{renderer:a}}const Ut=e=>!!e&&e.constructor===Array;function Ue(e){const t={nodes:{},materials:{}};return e&&e.traverse(n=>{n.name&&(t.nodes[n.name]=n),n.material&&!t.materials[n.material.name]&&(t.materials[n.material.name]=n.material)}),t}async function Vt(e,t,n,r,s){const{logError:l}=W(),i=new e;s&&s(i),n&&n(i);const c=(Array.isArray(t)?t:[t]).map(o=>new Promise((u,_)=>{i.load(o,f=>{const g=f;g.scene&&Object.assign(g,Ue(g.scene)),u(g)},r,f=>_(l("[useLoader] - Failed to load resource",f)))}));return Ut(t)?await Promise.all(c):await c[0]}async function Ft(e,t){const n=new y.TextureLoader(t),r=s=>new Promise((l,i)=>{n.load(s,a=>l(a),()=>null,()=>{i(new Error("[useTextures] - Failed to load texture"))})});if(Lt(e)){const s=await Promise.all(e.map(l=>r(l)));return e.length>1?s:s[0]}else{const{map:s,displacementMap:l,normalMap:i,roughnessMap:a,metalnessMap:c,aoMap:o,alphaMap:u,matcap:_}=e;return{map:s?await r(s):null,displacementMap:l?await r(l):null,normalMap:i?await r(i):null,roughnessMap:a?await r(a):null,metalnessMap:c?await r(c):null,aoMap:o?await r(o):null,alphaMap:u?await r(u):null,matcap:_?await r(_):null}}}const Ve=(e,t)=>{const n=p.computed(()=>t.renderer.value.domElement),r=p.shallowRef([]),{x:s,y:l}=C.usePointer({target:n});let i=0;const{width:a,height:c,top:o,left:u}=C.useElementBounding(n),_=({x:h,y:D})=>{if(n.value)return{x:(h-u.value)/a.value*2-1,y:-((D-o.value)/c.value)*2+1}},f=({x:h,y:D})=>{if(t.camera.value)return t.raycaster.value.setFromCamera(new y.Vector2(h,D),t.camera.value),r.value=t.raycaster.value.intersectObjects(e.value,!0),r.value},g=h=>{const D=_({x:(h==null?void 0:h.clientX)??s.value,y:(h==null?void 0:h.clientY)??l.value});return D?f(D)||[]:[]},v=C.createEventHook(),S=C.createEventHook(),w=C.createEventHook(),d=C.createEventHook(),A=C.createEventHook(),L=C.createEventHook(),k=C.createEventHook(),O=C.createEventHook();function j(h){const D={};for(const z in h)typeof z!="function"&&(D[z]=h[z]);return D}const M=(h,D)=>{var rt,ot,st;const z=j(D),ue=new y.Vector3(D==null?void 0:D.clientX,D==null?void 0:D.clientY,0).unproject((rt=t.camera)==null?void 0:rt.value);h.trigger({...z,intersections:r.value,unprojectedPoint:ue,ray:(ot=t.raycaster)==null?void 0:ot.value.ray,camera:(st=t.camera)==null?void 0:st.value,sourceEvent:D,delta:i,stopPropagating:!1})};let T;const B=h=>{g(h),M(w,h),T=h},m=()=>{T&&B(T)};let P,x,E;const R=h=>{var D;P=(D=r.value[0])==null?void 0:D.object,i=0,x=new y.Vector2((h==null?void 0:h.clientX)??s.value,(h==null?void 0:h.clientY)??l.value),M(A,h)};let $,I=!1;const ce=h=>{var D,z,ue;h instanceof PointerEvent&&(r.value.length===0&&M(L,h),P===((D=r.value[0])==null?void 0:D.object)&&(E=new y.Vector2((h==null?void 0:h.clientX)??s.value,(h==null?void 0:h.clientY)??l.value),i=x==null?void 0:x.distanceTo(E),h.button===0?(M(v,h),$===((z=r.value[0])==null?void 0:z.object)?I=!0:($=(ue=r.value[0])==null?void 0:ue.object,I=!1)):h.button===2&&M(k,h)),M(d,h))},et=h=>{I&&(M(S,h),$=void 0,I=!1)},tt=h=>M(w,h),nt=h=>M(O,h);return n.value.addEventListener("pointerup",ce),n.value.addEventListener("pointerdown",R),n.value.addEventListener("pointermove",B),n.value.addEventListener("pointerleave",tt),n.value.addEventListener("dblclick",et),n.value.addEventListener("wheel",nt),p.onUnmounted(()=>{n!=null&&n.value&&(n.value.removeEventListener("pointerup",ce),n.value.removeEventListener("pointerdown",R),n.value.removeEventListener("pointermove",B),n.value.removeEventListener("pointerleave",tt),n.value.removeEventListener("dblclick",et),n.value.removeEventListener("wheel",nt))}),{intersects:r,onClick:h=>v.on(h).off,onDblClick:h=>S.on(h).off,onContextMenu:h=>k.on(h).off,onPointerMove:h=>w.on(h).off,onPointerUp:h=>d.on(h).off,onPointerDown:h=>A.on(h).off,onPointerMissed:h=>L.on(h).off,onWheel:h=>O.on(h).off,forceUpdate:m}};function Wt(){const{logWarning:e}=W();function t(l,i,a){let c=null;return l.traverse(o=>{o[i]===a&&(c=o)}),c||e(`Child with ${i} '${a}' not found.`),c}function n(l,i,a){const c=[];return l.traverse(o=>{o[i].includes(a)&&c.push(o)}),c.length||e(`Children with ${i} '${a}' not found.`),c}function r(l,i){return t(l,"name",i)}function s(l,i){return n(l,"name",i)}return{seek:t,seekByName:r,seekAll:n,seekAllByName:s}}function he(e){let t=0;return e.traverse(n=>{if(n.isMesh&&n.geometry&&n.type!=="HightlightMesh"){const r=n.geometry,s=r.attributes.position.count*3*Float32Array.BYTES_PER_ELEMENT,l=r.index?r.index.count*Uint32Array.BYTES_PER_ELEMENT:0,i=r.attributes.normal?r.attributes.normal.count*3*Float32Array.BYTES_PER_ELEMENT:0,a=r.attributes.uv?r.attributes.uv.count*2*Float32Array.BYTES_PER_ELEMENT:0,c=s+l+i+a;t+=c}}),t}function Nt(e){return(e/1024).toFixed(2)}const ie=p.ref({}),ae=e=>Object.assign(ie.value,e);function Fe(e,t,n){var B;const r=p.shallowRef(),s=p.shallowRef();e&&(r.value=e),t&&(s.value=t);const l=m=>{var P;return((P=m.__tres)==null?void 0:P.eventCount)>0},i=m=>{var P;return((P=m.children)==null?void 0:P.some(x=>i(x)))||l(m)},a=p.shallowRef(((B=r.value)==null?void 0:B.children).filter(i)||[]);function c(m,P){if(Array.isArray(m))for(const x of m)x(P);typeof m=="function"&&m(P)}function o(m,P){const x=[],E=()=>P.stopPropagating=!0;P.stopPropagation=E;for(const R of P==null?void 0:P.intersections){if(P.stopPropagating)return;P={...P,...R};const{object:$}=R;P.eventObject=$,c($[m],P),x.push($);let I=$.parent;for(;I!==null&&!P.stopPropagating&&!x.includes(I);)P.eventObject=I,c(I[m],P),x.push(I),I=I.parent;const ce=Pt(m.slice(2));n(ce,{intersection:R,event:P})}}const{onClick:u,onDblClick:_,onContextMenu:f,onPointerMove:g,onPointerDown:v,onPointerUp:S,onPointerMissed:w,onWheel:d,forceUpdate:A}=Ve(a,t);S(m=>o("onPointerUp",m)),v(m=>o("onPointerDown",m)),u(m=>o("onClick",m)),_(m=>o("onDoubleClick",m)),f(m=>o("onContextMenu",m)),d(m=>o("onWheel",m));let L=[];g(m=>{const P=m.intersections.map(({object:E})=>E),x=m.intersections;L.forEach(({object:E})=>{P.includes(E)||(m.intersections=L,o("onPointerLeave",m),o("onPointerOut",m))}),m.intersections=x,m.intersections.forEach(({object:E})=>{L.includes(E)||(o("onPointerEnter",m),o("onPointerOver",m))}),o("onPointerMove",m),L=m.intersections});const k=[];w(m=>{const P=()=>m.stopPropagating=!0;m.stopPropagation=P,k.forEach(x=>{m.stopPropagating||(m.eventObject=x,c(x.onPointerMissed,m))}),n("pointer-missed",{event:m})});function O(m){ee(m)&&F(m)&&a.value.push(m)}function j(m){if(ee(m)&&F(m)){const P=a.value.indexOf(m);P>-1&&a.value.splice(P,1)}}function M(m){ee(m)&&F(m)&&m.onPointerMissed&&k.push(m)}function T(m){if(ee(m)&&F(m)){const P=k.indexOf(m);P>-1&&k.splice(P,1)}}return t.eventManager={forceUpdate:A,registerObject:O,deregisterObject:j,registerPointerMissedObject:M,deregisterPointerMissedObject:T},{forceUpdate:A,registerObject:O,deregisterObject:j,registerPointerMissedObject:M,deregisterPointerMissedObject:T}}function zt(e,t,n=10){const r=C.toValue(e)?C.useWindowSize():C.useElementSize(p.computed(()=>C.toValue(t).parentElement)),s=p.readonly(C.refDebounced(r.width,n)),l=p.readonly(C.refDebounced(r.height,n)),i=p.computed(()=>s.value/l.value);return{height:l,width:s,aspectRatio:i}}function ge(){const e=new Map,t=new Set;let n=0,r=!1;const s=()=>{const o=Array.from(e.entries()).sort((u,_)=>{const f=u[1].priority-_[1].priority;return f===0?u[1].addI-_[1].addI:f});t.clear(),o.forEach(u=>t.add(u[0]))},l=o=>{e.delete(o),t.delete(o)};return{on:(o,u=0)=>{e.set(o,{priority:u,addI:n++});const _=()=>l(o);return C.tryOnScopeDispose(_),r=!0,{off:_}},off:l,trigger:(...o)=>{r&&(s(),r=!1),t.forEach(u=>u(...o))},dispose:()=>{e.clear(),t.clear()},get count(){return e.size}}}function We(){let e=!0,t=!0,n=!1;const r=new y.Clock(!1),s=p.ref(r.running),l=p.ref(!1);let i;const a=y.MathUtils.generateUUID();let c=null;const o=ge(),u=ge(),_=ge();j();let f={};function g(M){f=M}function v(M,T,B=0){switch(T){case"before":return o.on(M,B);case"render":return c||(c=M),u.dispose(),u.on(M);case"after":return _.on(M,B)}}function S(){t&&(t=!1,j(),O())}function w(){t=!0,j(),cancelAnimationFrame(i)}function d(){n=!1,j()}function A(){n=!0,j()}function L(){l.value=!0}function k(){l.value=!1}function O(){if(!e){i=requestAnimationFrame(O);return}const M=r.getDelta(),T=r.getElapsedTime(),B={camera:p.unref(f.camera),scene:p.unref(f.scene),renderer:p.unref(f.renderer),raycaster:p.unref(f.raycaster),controls:p.unref(f.controls),invalidate:f.invalidate,advance:f.advance},m={delta:M,elapsed:T,clock:r,...B};s.value&&o.trigger(m),l.value||(u.count?u.trigger(m):c&&c(m)),s.value&&_.trigger(m),i=requestAnimationFrame(O)}function j(){const M=!t&&!n;r.running!==M&&(r.running?r.stop():r.start()),s.value=r.running}return{loopId:a,register:(M,T,B)=>v(M,T,B),start:S,stop:w,pause:A,resume:d,pauseRender:L,resumeRender:k,isRenderPaused:l,isActive:s,setContext:g,setReady:M=>e=M}}function Gt(e,t,n=100){n=n<=0?100:n;const r=C.createEventHook(),s=new Set;let l=!1,i=!1,a=null;function c(){a&&clearTimeout(a),!i&&!l&&e()?(r.trigger(t),s.forEach(f=>f()),s.clear(),l=!0):!i&&!l&&(a=setTimeout(c,n))}function o(){i=!0,a&&clearTimeout(a)}c();const u=(f,...g)=>{f(...g)};return{on:f=>{if(l)return u(f,t),{off:()=>{}};{const g=r.on(f);return s.add(g.off),r.on(f)}},off:r.off,trigger:r.trigger,cancel:o}}const Q=new WeakMap;function Ne(e){if(e=e||X(),Q.has(e))return Q.get(e);const t=100,n=Date.now(),l=Gt(()=>{if(Date.now()-n>=t)return!0;{const i=e.renderer.value,a=(i==null?void 0:i.domElement)||{width:0,height:0};return!!(i&&a.width>0&&a.height>0)}},e);return Q.set(e,l),l}function qt(e){const t=X();if(t)return Q.has(t)?Q.get(t).on(e):Ne(t).on(e)}function ze({scene:e,canvas:t,windowSize:n,disableRender:r,rendererOptions:s,emit:l}){const i=p.shallowRef(e),a=zt(n,t),{camera:c,cameras:o,registerCamera:u,deregisterCamera:_,setCameraActive:f}=Ce({sizes:a,scene:e}),g={mode:p.ref(s.renderMode||"always"),priority:p.ref(0),frames:p.ref(0),maxFrames:60,canBeInvalidated:p.computed(()=>g.mode.value==="on-demand"&&g.frames.value===0)};function v(R=1){s.renderMode==="on-demand"&&(g.frames.value=Math.min(g.maxFrames,g.frames.value+R))}function S(){s.renderMode==="manual"&&(g.frames.value=1)}const{renderer:w}=$e({scene:e,canvas:t,options:s,emit:l,contextParts:{sizes:a,camera:c,render:g,invalidate:v,advance:S},disableRender:r}),d={sizes:a,scene:i,camera:c,cameras:p.readonly(o),renderer:w,raycaster:p.shallowRef(new y.Raycaster),controls:p.ref(null),perf:{maxFrames:160,fps:{value:0,accumulator:[]},memory:{currentMem:0,allocatedMem:0,accumulator:[]}},render:g,advance:S,extend:ae,invalidate:v,registerCamera:u,setCameraActive:f,deregisterCamera:_,loop:We()};p.provide("useTres",d),d.scene.value.__tres={root:d},d.loop.register(()=>{c.value&&g.frames.value>0&&(w.value.render(e,c.value),l("render",d.renderer.value)),g.priority.value=0,g.mode.value==="always"?g.frames.value=1:g.frames.value=Math.max(0,g.frames.value-1)},"render");const{on:A,cancel:L}=Ne(d);d.loop.setReady(!1),d.loop.start(),A(()=>{l("ready",d),d.loop.setReady(!0),Fe(e,d,l)}),p.onUnmounted(()=>{L(),d.loop.stop()});const k=100,O=C.useFps({every:k}),{isSupported:j,memory:M}=C.useMemory({interval:k}),T=160;let B=performance.now();const m=({timestamp:R})=>{d.scene.value&&(d.perf.memory.allocatedMem=he(d.scene.value)),R-B>=k&&(B=R,d.perf.fps.accumulator.push(O.value),d.perf.fps.accumulator.length>T&&d.perf.fps.accumulator.shift(),d.perf.fps.value=O.value,j.value&&M.value&&(d.perf.memory.accumulator.push(M.value.usedJSHeapSize/1024/1024),d.perf.memory.accumulator.length>T&&d.perf.memory.accumulator.shift(),d.perf.memory.currentMem=d.perf.memory.accumulator.reduce(($,I)=>$+I,0)/d.perf.memory.accumulator.length))};let P=0;const x=1,{pause:E}=C.useRafFn(({delta:R})=>{window.__TRES__DEVTOOLS__&&(m({timestamp:performance.now()}),P+=R,P>=x&&(window.__TRES__DEVTOOLS__.cb(d),P=0))},{immediate:!0});return p.onUnmounted(()=>{E()}),d}function X(){const e=p.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const Yt=X;function Jt(){const{camera:e,scene:t,renderer:n,loop:r,raycaster:s,controls:l,invalidate:i,advance:a}=X();r.setContext({camera:e,scene:t,renderer:n,raycaster:s,controls:l,invalidate:i,advance:a});function c(_,f=0){return r.register(_,"before",f)}function o(_){return r.register(_,"render")}function u(_,f=0){return r.register(_,"after",f)}return{pause:r.pause,resume:r.resume,pauseRender:r.pauseRender,resumeRender:r.resumeRender,isActive:r.isActive,onBeforeRender:c,render:o,onAfterRender:u}}function Kt(e,t={},n={}){let r=e;const s=a=>{r=a};let l=new Proxy({},{});const i={has(a,c){return c in t||c in r},get(a,c,o){return c in t?t[c](r):r[c]},set(a,c,o){return n[c]?n[c](o,r,l,s):r[c]=o,!0}};return l=new Proxy({},i),l}const{logError:Ge}=W(),qe=["onClick","onContextMenu","onPointerMove","onPointerEnter","onPointerLeave","onPointerOver","onPointerOut","onDoubleClick","onPointerDown","onPointerUp","onPointerCancel","onPointerMissed","onLostPointerCapture","onWheel"],Qt=e=>{const t=e.scene.value;function n(o,u,_,f){if(f||(f={}),f.args||(f.args=[]),o==="template"||Ct(o))return null;let g=o.replace("Tres",""),v;if(o==="primitive"){(!U(f.object)||p.isRef(f.object))&&Ge("Tres primitives need an 'object' prop, whose value is an object or shallowRef<object>"),g=f.object.type;const S={};v=Kt(f.object,{object:d=>d,isPrimitive:()=>!0,__tres:()=>S},{object:(d,A,L,k)=>{Et(d,L,k,{patchProp:l,remove:s,insert:r},e)},__tres:d=>{Object.assign(S,d)}})}else{const S=ie.value[g];S||Ge(`${g} is not defined on the THREE namespace. Use extend to add it to the catalog.`),v=new S(...f.args)}return v?(v.isCamera&&(f!=null&&f.position||v.position.set(3,3,3),f!=null&&f.lookAt||v.lookAt(0,0,0)),v=q(v,{...v.__tres,type:g,memoizedProps:f,eventCount:0,primitive:o==="primitive",attach:f.attach},e),v):null}function r(o,u){var g,v,S;if(!o)return;u=u||t;const _=o.__tres?o:q(o,{},e),f=u.__tres?u:q(u,{},e);o=Y(_),u=Y(f),o.__tres&&((g=o.__tres)==null?void 0:g.eventCount)>0&&((v=e.eventManager)==null||v.registerObject(o)),e.registerCamera(o),(S=e.eventManager)==null||S.registerPointerMissedObject(o),_.__tres.attach?Bt(f,_,_.__tres.attach):F(o)&&F(f)&&(f.add(o),o.dispatchEvent({type:"added"})),_.__tres.parent=f,f.__tres.objects&&!f.__tres.objects.includes(_)&&f.__tres.objects.push(_)}function s(o,u){var v,S,w,d;if(!o)return;o!=null&&o.__tres&&((v=o.__tres)==null?void 0:v.eventCount)>0&&((S=e.eventManager)==null||S.deregisterObject(o)),u=fe(u)?"default":u;const _=(w=o.__tres)==null?void 0:w.dispose;fe(_)||(_===null?u=!1:u=_);const f=(d=o.__tres)==null?void 0:d.primitive,g=u==="default"?!f:!!u;if(o.__tres&&"objects"in o.__tres&&[...o.__tres.objects].forEach(A=>s(A,u)),g&&o.children&&[...o.children].forEach(A=>s(A,u)),Re(o,e),Ee(o,e),g&&!pt(o)){if(G(u))u(o);else if(G(o.dispose))try{o.dispose()}catch{}}"__tres"in o&&delete o.__tres}function l(o,u,_,f){var A,L;if(!o)return;let g=o,v=u;if(o.__tres&&(o.__tres.memoizedProps[u]=f),u==="attach"){const k=((A=o.__tres)==null?void 0:A.parent)||o.parent;s(o),q(o,{attach:f},e),k&&r(o,k);return}if(u==="dispose"){o.__tres||(o=q(o,{},e)),o.__tres.dispose=f;return}if(F(o)&&v==="blocks-pointer-events"){f||f===""?o[v]=f:delete o[v];return}qe.includes(u)&&o.__tres&&(o.__tres.eventCount+=1);let S=oe(v),w=g==null?void 0:g[S];if(v==="args"){const k=o,O=_??[],j=f??[],M=((L=o.__tres)==null?void 0:L.type)||o.type;M&&O.length&&!At(O,j)&&(g=Object.assign(k,new ie.value[M](...f)));return}if(g.type==="BufferGeometry"){if(v==="args")return;g.setAttribute(oe(v),new y.BufferAttribute(...f));return}if(v.includes("-")&&w===void 0){const k=v.split("-");w=k.reduce((O,j)=>O[oe(j)],g),v=k.pop(),S=v,w!=null&&w.set||(g=k.reduce((O,j)=>O[oe(j)],g))}let d=f;if(d===""&&(d=!0),G(w)){qe.includes(u)||(Z(d)?o[S](...d):o[S](d)),S.startsWith("on")&&G(d)&&(g[S]=d);return}!(w!=null&&w.set)&&!G(w)?g[S]=d:w.constructor===d.constructor&&(w!=null&&w.copy)?w==null||w.copy(d):Z(d)?w.set(...d):!w.isColor&&w.setScalar?w.setScalar(d):w.set(d),Ie(o)}function i(o){var u;return((u=o==null?void 0:o.__tres)==null?void 0:u.parent)||null}function a(o){const u=q(new y.Object3D,{type:"Comment"},e);return u.name=o,u}function c(o){var g;const u=i(o),_=((g=u==null?void 0:u.__tres)==null?void 0:g.objects)||[],f=_.indexOf(o);return f<0||f>=_.length-1?null:_[f+1]}return{insert:r,remove:s,createElement:n,patchProp:l,parentNode:i,createText:()=>void 0,createComment:a,setText:()=>void 0,setElementText:()=>void 0,nextSibling:c,querySelector:()=>void 0,setScopeId:()=>void 0,cloneNode:()=>void 0,insertStaticContent:()=>void 0}};function Xt(){return Ye().__VUE_DEVTOOLS_GLOBAL_HOOK__}function Ye(){return typeof navigator<"u"&&typeof window<"u"?window:typeof globalThis<"u"?globalThis:{}}const Ht=typeof Proxy=="function",Zt="devtools-plugin:setup",en="plugin:settings:set";let J,ve;function tn(){var e;return J!==void 0||(typeof window<"u"&&window.performance?(J=!0,ve=window.performance):typeof globalThis<"u"&&(!((e=globalThis.perf_hooks)===null||e===void 0)&&e.performance)?(J=!0,ve=globalThis.perf_hooks.performance):J=!1),J}function nn(){return tn()?ve.now():Date.now()}class rn{constructor(t,n){this.target=null,this.targetQueue=[],this.onQueue=[],this.plugin=t,this.hook=n;const r={};if(t.settings)for(const i in t.settings){const a=t.settings[i];r[i]=a.defaultValue}const s=`__vue-devtools-plugin-settings__${t.id}`;let l=Object.assign({},r);try{const i=localStorage.getItem(s),a=JSON.parse(i);Object.assign(l,a)}catch{}this.fallbacks={getSettings(){return l},setSettings(i){try{localStorage.setItem(s,JSON.stringify(i))}catch{}l=i},now(){return nn()}},n&&n.on(en,(i,a)=>{i===this.plugin.id&&this.fallbacks.setSettings(a)}),this.proxiedOn=new Proxy({},{get:(i,a)=>this.target?this.target.on[a]:(...c)=>{this.onQueue.push({method:a,args:c})}}),this.proxiedTarget=new Proxy({},{get:(i,a)=>this.target?this.target[a]:a==="on"?this.proxiedOn:Object.keys(this.fallbacks).includes(a)?(...c)=>(this.targetQueue.push({method:a,args:c,resolve:()=>{}}),this.fallbacks[a](...c)):(...c)=>new Promise(o=>{this.targetQueue.push({method:a,args:c,resolve:o})})})}async setRealTarget(t){this.target=t;for(const n of this.onQueue)this.target.on[n.method](...n.args);for(const n of this.targetQueue)n.resolve(await this.target[n.method](...n.args))}}function on(e,t){const n=e,r=Ye(),s=Xt(),l=Ht&&n.enableEarlyProxy;if(s&&(r.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__||!l))s.emit(Zt,e,t);else{const i=l?new rn(n,s):null;(r.__VUE_DEVTOOLS_PLUGINS__=r.__VUE_DEVTOOLS_PLUGINS__||[]).push({pluginDescriptor:n,setupFn:t,proxy:i}),i&&t(i.proxiedTarget)}}function sn(e,t){const n=`▲ ■ ●${e}`;typeof Je=="function"?Je(n,t):console.log(n)}function Je(e,t){throw new Error(e+t)}const Ke=e=>{const t={id:e.uuid,label:e.type,children:[],tags:[]};e.name!==""&&t.tags.push({label:e.name,textColor:5750629,backgroundColor:15793395});const n=he(e);return n>0&&t.tags.push({label:`${Nt(n)} KB`,textColor:15707189,backgroundColor:16775644,tooltip:"Memory usage"}),e.type.includes("Light")&&(ft(e)&&t.tags.push({label:`${e.intensity}`,textColor:9738662,backgroundColor:16316922,tooltip:"Intensity"}),t.tags.push({label:`#${new y.Color(e.color).getHexString()}`,textColor:9738662,backgroundColor:16316922,tooltip:"Color"})),e.type.includes("Camera")&&(t.tags.push({label:`${e.fov}°`,textColor:9738662,backgroundColor:16316922,tooltip:"Field of view"}),t.tags.push({label:`x: ${Math.round(e.position.x)} y: ${Math.round(e.position.y)} z: ${Math.round(e.position.z)}`,textColor:9738662,backgroundColor:16316922,tooltip:"Position"})),t};function Qe(e,t,n=""){e.children.forEach(r=>{if(r.type==="HightlightMesh"||n&&!r.type.includes(n)&&!r.name.includes(n))return;const s=Ke(r);t.children.push(s),Qe(r,s,n)})}const an=[],H="tres:inspector",ln=p.reactive({sceneGraph:null});function cn(e,t){on({id:"dev.esm.tres",label:"TresJS 🪐",logo:"https://raw.githubusercontent.com/Tresjs/tres/main/public/favicon.svg",packageName:"tresjs",homepage:"https://tresjs.org",componentStateTypes:an,app:e},n=>{typeof n.now!="function"&&sn("You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html."),n.addInspector({id:H,label:"TresJS 🪐",icon:"account_tree",treeFilterPlaceholder:"Search instances"}),setInterval(()=>{n.sendInspectorTree(H)},1e3),setInterval(()=>{n.notifyComponentUpdate()},5e3),n.on.getInspectorTree(l=>{if(l.inspectorId===H){const i=Ke(t.scene.value);Qe(t.scene.value,i,l.filter),ln.sceneGraph=i,l.rootNodes=[i]}});let r=null,s=null;n.on.getInspectorState(l=>{var i;if(l.inspectorId===H){const[a]=t.scene.value.getObjectsByProperty("uuid",l.nodeId);if(!a)return;if(s&&r&&r.parent&&s.remove(r),a.isMesh){const c=Dt(a);a.add(c),r=c,s=a}l.state={object:Object.entries(a).map(([c,o])=>c==="children"?{key:c,value:o.filter(u=>u.type!=="HightlightMesh")}:{key:c,value:o,editable:!0}).filter(({key:c})=>c!=="parent")},a.isScene&&(l.state.info={memory:he(a),objects:a.children.length,calls:t.renderer.value.info.render.calls,triangles:t.renderer.value.info.render.triangles,points:t.renderer.value.info.render.points,lines:t.renderer.value.info.render.lines},l.state.programs=((i=t.renderer.value.info.programs)==null?void 0:i.map(c=>({key:c.name,value:{...c,vertexShader:c.vertexShader,attributes:c.getAttributes(),uniforms:c.getUniforms()}})))||[])}}),n.on.editInspectorState(l=>{l.inspectorId===H&&Ot(t.scene.value,l.nodeId,l.path,l.state.value)})})}const un=["data-scene","data-tres"],Xe=p.defineComponent({__name:"TresCanvas",props:{shadows:{type:Boolean,default:void 0},clearColor:{},toneMapping:{},shadowMapType:{},useLegacyLights:{type:Boolean,default:void 0},outputColorSpace:{},toneMappingExposure:{},renderMode:{default:"always"},dpr:{},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}},emits:["render","click","double-click","context-menu","pointer-move","pointer-up","pointer-down","pointer-enter","pointer-leave","pointer-over","pointer-out","pointer-missed","wheel","ready"],setup(e,{expose:t,emit:n}){var w;const r=e,s=n,l=p.useSlots(),{logWarning:i}=W(),a=p.ref(),c=p.shallowRef(new y.Scene),o=(w=p.getCurrentInstance())==null?void 0:w.appContext.app;ae(_e);const u=(d,A=!1)=>p.defineComponent({setup(){var k;const L=(k=p.getCurrentInstance())==null?void 0:k.appContext;return L&&(L.app=o),p.provide("useTres",d),p.provide("extend",ae),typeof window<"u"&&cn(L==null?void 0:L.app,d),()=>p.h(p.Fragment,null,A?[]:l.default())}}),_=(d,A=!1)=>{const L=u(d,A),{render:k}=p.createRenderer(Qt(d));k(p.h(L),c.value)},f=(d,A=!1)=>{pe(d.scene.value),A&&(d.renderer.value.dispose(),d.renderer.value.renderLists.dispose(),d.renderer.value.forceContextLoss()),c.value.__tres={root:d}},g=p.computed(()=>r.disableRender),v=p.shallowRef(null);t({context:v,dispose:()=>f(v.value,!0)});const S=()=>{f(v.value),_(v.value,!0)};return p.onMounted(()=>{const d=a;v.value=ze({scene:c.value,canvas:d,windowSize:r.windowSize??!1,disableRender:g.value??!1,rendererOptions:r,emit:s});const{registerCamera:A,camera:L,cameras:k,deregisterCamera:O}=v.value;_(v.value);const j=()=>{const M=new y.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);M.position.set(3,3,3),M.lookAt(0,0,0),A(M);const T=p.watchEffect(()=>{k.value.length>=2&&(M.removeFromParent(),O(M),T==null||T())})};p.watch(()=>r.camera,(M,T)=>{M&&A(M),T&&(T.removeFromParent(),O(T))},{immediate:!0}),L.value||(i("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),j())}),p.onUnmounted(S),(d,A)=>(p.openBlock(),p.createElementBlock("canvas",{ref_key:"canvas",ref:a,"data-scene":c.value.uuid,class:p.normalizeClass(d.$attrs.class),"data-tres":`tresjs ${p.unref(at).version}`,style:p.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,un))}}),fn=["TresCanvas","TresLeches","TresScene"],dn={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!fn.includes(e)||e==="primitive"}}},pn={mounted:(e,t)=>{if(t.arg){console.log(`v-log:${t.arg}`,e[t.arg]);return}console.log("v-log",e)}};class He extends y.Line{constructor(t,n){const r=[1,1,0,-1,1,0,-1,-1,0,1,-1,0,1,1,0],s=new y.BufferGeometry;s.setAttribute("position",new y.Float32BufferAttribute(r,3)),s.computeBoundingSphere();const l=new y.LineBasicMaterial({fog:!1});super(s,l),this.light=t,this.color=n,this.type="RectAreaLightHelper";const i=[1,1,0,-1,1,0,-1,-1,0,1,1,0,-1,-1,0,1,-1,0],a=new y.BufferGeometry;a.setAttribute("position",new y.Float32BufferAttribute(i,3)),a.computeBoundingSphere(),this.add(new y.Mesh(a,new y.MeshBasicMaterial({side:y.BackSide,fog:!1})))}updateMatrixWorld(){if(this.scale.set(.5*this.light.width,.5*this.light.height,1),this.color!==void 0)this.material.color.set(this.color),this.children[0].material.color.set(this.color);else{this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);const t=this.material.color,n=Math.max(t.r,t.g,t.b);n>1&&t.multiplyScalar(1/n),this.children[0].material.color.copy(this.material.color)}this.matrixWorld.extractRotation(this.light.matrixWorld).scale(this.scale).copyPosition(this.light.matrixWorld),this.children[0].matrixWorld.copy(this.matrixWorld)}dispose(){this.geometry.dispose(),this.material.dispose(),this.children[0].geometry.dispose(),this.children[0].material.dispose()}}const{logWarning:Ze}=W();let le,N;const mn={DirectionalLight:y.DirectionalLightHelper,PointLight:y.PointLightHelper,SpotLight:y.SpotLightHelper,HemisphereLight:y.HemisphereLightHelper,RectAreaLight:He},hn={mounted:e=>{if(!e.isLight){Ze(`${e.type} is not a light`);return}le=mn[e.type],e.parent.add(new le(e,1,e.color.getHex()))},updated:e=>{N=e.parent.children.find(t=>t instanceof le),!(N instanceof He)&&N.update()},unmounted:e=>{if(!e.isLight){Ze(`${e.type} is not a light`);return}N=e.parent.children.find(t=>t instanceof le),N&&N.dispose&&N.dispose(),e.parent.remove(N)}},{logWarning:gn}=W();let V=null;const vn={updated:(e,t)=>{var s;const n=jt(t);if(!n){gn(`v-distance-to: problem with binding value: ${t.value}`);return}V&&(V.dispose(),e.parent.remove(V));const r=n.clone().sub(e.position);r.normalize(),V=new y.ArrowHelper(r,e.position,e.position.distanceTo(n),16776960),e.parent.add(V),console.table([["Distance:",e.position.distanceTo(n)],[`origin: ${e.name||e.type}`,`x:${e.position.x}, y:${e.position.y}, z:${(s=e.position)==null?void 0:s.z}`],[`Destiny: ${e.name||e.type}`,`x:${n.x}, y:${n.y}, z:${n==null?void 0:n.z}`]])},unmounted:e=>{V==null||V.dispose(),e.parent.remove(V)}},yn={install(e){e.component("TresCanvas",Xe)}};b.TresCanvas=Xe,b.catalogue=ie,b.createRenderLoop=We,b.default=yn,b.dispose=pe,b.extend=ae,b.isProd=_t,b.normalizeColor=Ae,b.normalizeVectorFlexibleParam=wt,b.onTresReady=qt,b.templateCompilerOptions=dn,b.trasverseObjects=Ue,b.useCamera=Ce,b.useLoader=Vt,b.useLogger=W,b.useLoop=Jt,b.useRaycaster=Ve,b.useRenderLoop=yt,b.useRenderer=$e,b.useSeek=Wt,b.useTexture=Ft,b.useTres=Yt,b.useTresContext=X,b.useTresContextProvider=ze,b.useTresEventManager=Fe,b.vDistanceTo=vn,b.vLightHelper=hn,b.vLog=pn,Object.defineProperties(b,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
8
+ (function(b,p){typeof exports=="object"&&typeof module<"u"?p(exports,require("vue"),require("three"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","three","@vueuse/core"],p):(b=typeof globalThis<"u"?globalThis:b||self,p(b.tres={},b.Vue,b.Three,b.VueUseCore))})(this,function(b,p,y,C){"use strict";var _n=Object.defineProperty;var wn=(b,p,y)=>p in b?_n(b,p,{enumerable:!0,configurable:!0,writable:!0,value:y}):b[p]=y;var ye=(b,p,y)=>wn(b,typeof p!="symbol"?p+"":p,y);function it(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const _e=it(y),at={name:"@tresjs/core",type:"module",version:"4.2.7",packageManager:"pnpm@9.1.4",description:"Declarative ThreeJS using Vue Components",author:"Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",license:"MIT",repository:{type:"git",url:"git+https://github.com/Tresjs/tres.git"},keywords:["vue","3d","threejs","three","threejs-vue"],sideEffects:!1,exports:{".":{types:"./dist/index.d.ts",import:"./dist/tres.js",require:"./dist/tres.umd.cjs"},"./components":{types:"./dist/src/components/index.d.ts"},"./composables":{types:"./dist/src/composables/index.d.ts"},"./types":{types:"./dist/src/types/index.d.ts"},"./utils":{types:"./dist/src/utils/index.d.ts"},"./*":"./*"},main:"./dist/tres.js",module:"./dist/tres.js",types:"./dist/index.d.ts",files:["*.d.ts","dist"],publishConfig:{access:"public"},scripts:{dev:"cd playground && npm run dev",build:"vite build",playground:"cd playground && npm run dev",test:"vitest","test:ci":"vitest run","test:ui":"vitest --ui --coverage.enabled=true",release:"release-it",coverage:"vitest run --coverage",lint:"eslint .","lint:fix":"eslint . --fix","docs:dev":"vitepress dev docs","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs","docs:preview":"vitepress preview docs","docs:contributors":"esno scripts/update-contributors.ts",prepare:"node .husky/install.mjs"},peerDependencies:{three:">=0.133",vue:">=3.4"},dependencies:{"@alvarosabu/utils":"^3.2.0","@vue/devtools-api":"^6.6.3","@vueuse/core":"^10.11.0"},devDependencies:{"@release-it/conventional-changelog":"^8.0.1","@stackblitz/sdk":"^1.11.0","@tresjs/cientos":"3.9.0","@tresjs/eslint-config":"^1.1.0","@types/three":"^0.166.0","@typescript-eslint/eslint-plugin":"^7.16.0","@typescript-eslint/parser":"^7.16.0","@vitejs/plugin-vue":"^5.0.5","@vitest/coverage-c8":"^0.33.0","@vitest/coverage-v8":"^2.0.2","@vitest/ui":"^2.0.2","@vue/test-utils":"^2.4.6",eslint:"^9.6.0","eslint-plugin-vue":"^9.27.0",esno:"^4.7.0",gsap:"^3.12.5",husky:"^9.0.11",jsdom:"^24.1.0",kolorist:"^1.8.0",ohmyfetch:"^0.4.21",pathe:"^1.1.2","release-it":"^17.5.0","rollup-plugin-analyzer":"^4.0.0","rollup-plugin-copy":"^3.5.0","rollup-plugin-visualizer":"^5.12.0",sponsorkit:"^0.14.6",three:"^0.166.1",unocss:"^0.61.3",unplugin:"^1.11.0","unplugin-vue-components":"^0.27.2",vite:"^5.3.3","vite-plugin-banner":"^0.7.1","vite-plugin-dts":"3.9.1","vite-plugin-inspect":"^0.8.4","vite-plugin-require-transform":"^1.0.21","vite-svg-loader":"^5.1.0",vitepress:"1.3.0",vitest:"^2.0.2",vue:"^3.4.31","vue-demi":"^0.14.8"}};function fe(e){return typeof e>"u"}function Z(e){return Array.isArray(e)}function lt(e){return typeof e=="number"}function we(e){return typeof e=="string"}function G(e){return typeof e=="function"}function U(e){return e===Object(e)&&!Z(e)&&!G(e)}function F(e){return U(e)&&"isObject3D"in e&&!!e.isObject3D}function be(e){return U(e)&&"isCamera"in e&&!!e.isCamera}function ct(e){return U(e)&&"isBufferGeometry"in e&&!!e.isBufferGeometry}function ut(e){return U(e)&&"isMaterial"in e&&!!e.isMaterial}function ft(e){return U(e)&&"isLight"in e&&!!e.isLight}function dt(e){return U(e)&&"isFog"in e&&!!e.isFog}function pt(e){return U(e)&&"isScene"in e&&!!e.isScene}function ee(e){return F(e)||ct(e)||ut(e)||dt(e)}function mt(e){return U(e)&&!!e.isPrimitive}const Ce=({sizes:e})=>{const t=p.ref([]),n=p.computed(()=>t.value[0]),r=i=>{const a=i instanceof y.Camera?i:t.value.find(o=>o.uuid===i);if(!a)return;const c=t.value.filter(({uuid:o})=>o!==a.uuid);t.value=[a,...c]},s=(i,a=!1)=>{if(be(i)){const c=i;if(t.value.some(({uuid:o})=>o===c.uuid))return;a?r(c):t.value.push(c)}},l=i=>{if(be(i)){const a=i;t.value=t.value.filter(({uuid:c})=>c!==a.uuid)}};return p.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(i=>{!i.manual&&(i instanceof y.PerspectiveCamera||ht(i))&&(i instanceof y.PerspectiveCamera?i.aspect=e.aspectRatio.value:(i.left=e.width.value*-.5,i.right=e.width.value*.5,i.top=e.height.value*.5,i.bottom=e.height.value*-.5),i.updateProjectionMatrix())})}),p.onUnmounted(()=>{t.value=[]}),{camera:n,cameras:t,registerCamera:s,deregisterCamera:l,setCameraActive:r}};function ht(e){return e.hasOwnProperty("isOrthographicCamera")&&e.isOrthographicCamera}const Me=C.createEventHook(),Pe=C.createEventHook(),de=C.createEventHook(),K=new y.Clock;let te=0,ne=0;const{pause:gt,resume:Se,isActive:vt}=C.useRafFn(()=>{Me.trigger({delta:te,elapsed:ne,clock:K}),Pe.trigger({delta:te,elapsed:ne,clock:K}),de.trigger({delta:te,elapsed:ne,clock:K})},{immediate:!1});de.on(()=>{te=K.getDelta(),ne=K.getElapsedTime()});let ke=!1;const yt=()=>(ke||(ke=!0,Se()),{onBeforeLoop:Me.on,onLoop:Pe.on,onAfterLoop:de.on,pause:gt,resume:Se,isActive:vt}),_t=!0,re="[TresJS ▲ ■ ●] ";function W(){function e(...r){typeof r[0]=="string"?r[0]=re+r[0]:r.unshift(re),console.error(...r)}function t(...r){typeof r[0]=="string"?r[0]=re+r[0]:r.unshift(re),console.warn(...r)}function n(r,s){}return{logError:e,logWarning:t,logMessage:n}}function wt(e){return typeof e=="number"?[e,e,e]:e instanceof y.Vector3?[e.x,e.y,e.z]:e}function Ae(e){return e instanceof y.Color?e:Array.isArray(e)?new y.Color(...e):new y.Color(e)}class bt extends _e.Mesh{constructor(...n){super(...n);ye(this,"type","HightlightMesh");ye(this,"createTime");this.createTime=Date.now()}onBeforeRender(){const r=(Date.now()-this.createTime)/1e3,i=1+.07*Math.sin(2.5*r);this.scale.set(i,i,i)}}const Le=(e,t)=>{for(const n of Object.keys(t))t[n]instanceof Object&&Object.assign(t[n],Le(e[n],t[n]));return Object.assign(e||{},t),e},Ct=St("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 Oe(e){return e&&e.nodeType===1}function oe(e){return e.replace(/-([a-z])/g,(t,n)=>n.toUpperCase())}const Mt=/\B([A-Z])/g;function Pt(e){return e.replace(Mt,"-$1").toLowerCase()}function St(e,t){const n=Object.create(null),r=e.split(",");for(let s=0;s<r.length;s++)n[r[s]]=!0;return s=>!!n[s]}const De=(e,t)=>{if(!t)return;const n=Array.isArray(t)?t:t.match(/([^[.\]])+/g);return n==null?void 0:n.reduce((r,s)=>r&&r[s],e)},kt=(e,t,n)=>{const r=Array.isArray(t)?t:t.match(/([^[.\]])+/g);r&&r.reduce((s,l,i)=>(s[l]===void 0&&(s[l]={}),i===r.length-1&&(s[l]=n),s[l]),e)};function je(e,t){if(Oe(e)&&Oe(t)){const s=e.attributes,l=t.attributes;return s.length!==l.length?!1:Array.from(s).every(({name:i,value:a})=>t.getAttribute(i)===a)}if(e===t)return!0;if(e===null||typeof e!="object"||t===null||typeof t!="object")return!1;const n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(const s of n)if(!r.includes(s)||!je(e[s],t[s]))return!1;return!0}function At(e,t){if(!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!je(e[n],t[n]))return!1;return!0}const Lt=Array.isArray;function Ot(e,t,n,r){const s=c=>{if(c.uuid===t)return c;for(const o of c.children){const u=s(o);if(u)return u}},l=s(e);if(!l){console.warn("Object with UUID not found in the scene.");return}let i=l;for(let c=0;c<n.length-1;c++)if(i[n[c]]!==void 0)i=i[n[c]];else{console.warn(`Property path is not valid: ${n.join(".")}`);return}const a=n[n.length-1];i[a]!==void 0?i[a]=r:console.warn(`Property path is not valid: ${n.join(".")}`)}function Dt(e){const t=new y.MeshBasicMaterial({color:11003607,transparent:!0,opacity:.2,depthTest:!1,side:y.DoubleSide});return new bt(e.geometry.clone(),t)}function jt(e){var n;let t=e.value;return e.value&&((n=e.value)!=null&&n.isMesh)&&(t=e.value.position),Array.isArray(e.value)&&(t=new y.Vector3(...t)),t}function Tt(e){return"map"in e}function Te(e){Tt(e)&&e.map&&e.map.dispose(),e.dispose()}function pe(e){var n,r;if(e.parent&&((n=e.removeFromParent)==null||n.call(e)),delete e.__tres,[...e.children].forEach(s=>pe(s)),!(e instanceof y.Scene)){const s=e;e&&((r=e.dispose)==null||r.call(e)),s.geometry&&(s.geometry.dispose(),delete s.geometry),Array.isArray(s.material)?(s.material.forEach(l=>Te(l)),delete s.material):s.material&&(Te(s.material),delete s.material)}}function xt(e,t){let n=0;for(let r=0;r<e.length;r++)t(e[r],r)&&(e[n]=e[r],n++);return e.length=n,e}function me(e,t){let n=e;if(t.includes("-")){const r=t.split("-");let s=r.shift();for(;n&&r.length;)s in n?(n=n[s],s=r.shift()):s=xe(s,r.shift());return{target:n,key:xe(s,...r)}}else return{target:n,key:t}}function xe(...e){return e.map((t,n)=>n===0?t:t.charAt(0).toUpperCase()+t.slice(1)).join("")}const Be=/-\d+$/;function Bt(e,t,n){if(we(n)){if(Be.test(n)){const l=n.replace(Be,""),{target:i,key:a}=me(e,l);if(!Array.isArray(i[a])){const c=i[a],o=[];o.__tresDetach=()=>{o.every(u=>fe(u))&&(i[a]=c)},i[a]=o}}const{target:r,key:s}=me(e,n);t.__tres.previousAttach=r[s],r[s]=Y(t)}else t.__tres.previousAttach=n(e,t)}function It(e,t,n){var r,s,l;if(we(n)){const{target:i,key:a}=me(e,n),c=t.__tres.previousAttach;c===void 0?delete i[a]:i[a]=c,"__tresDetach"in i&&i.__tresDetach()}else(s=(r=t.__tres)==null?void 0:r.previousAttach)==null||s.call(r,e,t);(l=t.__tres)==null||delete l.previousAttach}function q(e,t,n){const r=e;return r.__tres={type:"unknown",eventCount:0,root:n,handlers:{},memoizedProps:{},objects:[],parent:null,previousAttach:null,...t},r.__tres.attach||(r.isMaterial?r.__tres.attach="material":r.isBufferGeometry?r.__tres.attach="geometry":r.isFog&&(r.__tres.attach="fog")),r}function Ie(e){var n;const t=(n=e==null?void 0:e.__tres)==null?void 0:n.root;t&&t.render&&t.render.canBeInvalidated.value&&t.invalidate()}function Wn(e){}function Rt(e,t,n){var s;if(!G(e.setPixelRatio))return;let r=0;if(Z(n)&&n.length>=2){const[l,i]=n;r=y.MathUtils.clamp(t,l,i)}else lt(n)?r=n:r=t;r!==((s=e.getPixelRatio)==null?void 0:s.call(e))&&e.setPixelRatio(r)}function Et(e,t,n,r,s){const l=[...t.__tres.objects],i=Y(t);if(e=Y(e),i===e)return!0;const a=q(e,t.__tres??{},s),c=t.parent??t.__tres.parent??null,o={...t.__tres.memoizedProps};delete o.object;for(const u of l)Re(u,s),Ee(u,s);i.__tres.objects=[],r.remove(t);for(const[u,_]of Object.entries(o))r.patchProp(a,u,a[u],_);n(e),r.insert(t,c);for(const u of l)r.insert(u,t);return!0}function Y(e){return mt(e)?(e.object.__tres=e.__tres,e.object):e}function Re(e,t){var r,s,l,i;const n=((r=e.__tres)==null?void 0:r.parent)||t.scene.value;e.__tres&&(e.__tres.parent=null),n&&n.__tres&&"objects"in n.__tres&&xt(n.__tres.objects,a=>a!==e),(s=e.__tres)!=null&&s.attach?It(n,e,e.__tres.attach):((i=(l=e.parent)==null?void 0:l.remove)==null||i.call(l,Y(e)),e.parent=null)}function Ee(e,t){var n;(n=e.traverse)==null||n.call(e,r=>{var s;t.deregisterCamera(r),(s=t.eventManager)==null||s.deregisterPointerMissedObject(r)}),t.deregisterCamera(e),Ie(e)}const $t=Number.parseInt(y.REVISION.replace("dev","")),se={realistic:{shadows:!0,physicallyCorrectLights:!0,outputColorSpace:y.SRGBColorSpace,toneMapping:y.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:y.PCFSoftShadowMap}},flat:{toneMapping:y.NoToneMapping,toneMappingExposure:1}};function $e({canvas:e,options:t,contextParts:{sizes:n,render:r,invalidate:s,advance:l}}){const i=p.computed(()=>({alpha:C.toValue(t.alpha)??!0,depth:C.toValue(t.depth),canvas:C.unrefElement(e),context:C.toValue(t.context),stencil:C.toValue(t.stencil),antialias:C.toValue(t.antialias)??!0,precision:C.toValue(t.precision),powerPreference:C.toValue(t.powerPreference),premultipliedAlpha:C.toValue(t.premultipliedAlpha),preserveDrawingBuffer:C.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:C.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:C.toValue(t.failIfMajorPerformanceCaveat)})),a=p.shallowRef(new y.WebGLRenderer(i.value));function c(){t.renderMode==="on-demand"&&s()}p.watch(i,()=>{a.value.dispose(),a.value=new y.WebGLRenderer(i.value),c()}),p.watch([n.width,n.height],()=>{a.value.setSize(n.width.value,n.height.value),c()},{immediate:!0}),p.watch(()=>t.clearColor,c);const{pixelRatio:o}=C.useDevicePixelRatio(),{logError:u}=W(),f=(()=>{const v=new y.WebGLRenderer,S={shadowMap:{enabled:v.shadowMap.enabled,type:v.shadowMap.type},toneMapping:v.toneMapping,toneMappingExposure:v.toneMappingExposure,outputColorSpace:v.outputColorSpace};return v.dispose(),S})(),g=C.toValue(t.renderMode);return g==="on-demand"&&s(),g==="manual"&&setTimeout(()=>{l()},100),p.watchEffect(()=>{const v=C.toValue(t.preset);v&&(v in se||u(`Renderer Preset must be one of these: ${Object.keys(se).join(", ")}`),Le(a.value,se[v])),Rt(a.value,o.value,C.toValue(t.dpr)),g==="always"&&(r.frames.value=Math.max(1,r.frames.value));const S=(A,L)=>{const k=C.toValue(A),O=()=>{if(v)return De(se[v],L)};if(k!==void 0)return k;const j=O();return j!==void 0?j:De(f,L)},w=(A,L)=>kt(a.value,L,S(A,L));w(t.shadows,"shadowMap.enabled"),w(t.toneMapping??y.ACESFilmicToneMapping,"toneMapping"),w(t.shadowMapType,"shadowMap.type"),$t<150&&w(!t.useLegacyLights,"physicallyCorrectLights"),w(t.outputColorSpace,"outputColorSpace"),w(t.toneMappingExposure,"toneMappingExposure");const d=S(t.clearColor,"clearColor");d&&a.value.setClearColor(d?Ae(d):new y.Color(0))}),p.onUnmounted(()=>{a.value.dispose(),a.value.forceContextLoss()}),{renderer:a}}const Ut=e=>!!e&&e.constructor===Array;function Ue(e){const t={nodes:{},materials:{}};return e&&e.traverse(n=>{n.name&&(t.nodes[n.name]=n),n.material&&!t.materials[n.material.name]&&(t.materials[n.material.name]=n.material)}),t}async function Vt(e,t,n,r,s){const{logError:l}=W(),i=new e;s&&s(i),n&&n(i);const c=(Array.isArray(t)?t:[t]).map(o=>new Promise((u,_)=>{i.load(o,f=>{const g=f;g.scene&&Object.assign(g,Ue(g.scene)),u(g)},r,f=>_(l("[useLoader] - Failed to load resource",f)))}));return Ut(t)?await Promise.all(c):await c[0]}async function Ft(e,t){const n=new y.TextureLoader(t),r=s=>new Promise((l,i)=>{n.load(s,a=>l(a),()=>null,()=>{i(new Error("[useTextures] - Failed to load texture"))})});if(Lt(e)){const s=await Promise.all(e.map(l=>r(l)));return e.length>1?s:s[0]}else{const{map:s,displacementMap:l,normalMap:i,roughnessMap:a,metalnessMap:c,aoMap:o,alphaMap:u,matcap:_}=e;return{map:s?await r(s):null,displacementMap:l?await r(l):null,normalMap:i?await r(i):null,roughnessMap:a?await r(a):null,metalnessMap:c?await r(c):null,aoMap:o?await r(o):null,alphaMap:u?await r(u):null,matcap:_?await r(_):null}}}const Ve=(e,t)=>{const n=p.computed(()=>t.renderer.value.domElement),r=p.shallowRef([]),{x:s,y:l}=C.usePointer({target:n});let i=0;const{width:a,height:c,top:o,left:u}=C.useElementBounding(n),_=({x:h,y:D})=>{if(n.value)return{x:(h-u.value)/a.value*2-1,y:-((D-o.value)/c.value)*2+1}},f=({x:h,y:D})=>{if(t.camera.value)return t.raycaster.value.setFromCamera(new y.Vector2(h,D),t.camera.value),r.value=t.raycaster.value.intersectObjects(e.value,!0),r.value},g=h=>{const D=_({x:(h==null?void 0:h.clientX)??s.value,y:(h==null?void 0:h.clientY)??l.value});return D?f(D)||[]:[]},v=C.createEventHook(),S=C.createEventHook(),w=C.createEventHook(),d=C.createEventHook(),A=C.createEventHook(),L=C.createEventHook(),k=C.createEventHook(),O=C.createEventHook();function j(h){const D={};for(const z in h)typeof z!="function"&&(D[z]=h[z]);return D}const M=(h,D)=>{var rt,ot,st;const z=j(D),ue=new y.Vector3(D==null?void 0:D.clientX,D==null?void 0:D.clientY,0).unproject((rt=t.camera)==null?void 0:rt.value);h.trigger({...z,intersections:r.value,unprojectedPoint:ue,ray:(ot=t.raycaster)==null?void 0:ot.value.ray,camera:(st=t.camera)==null?void 0:st.value,sourceEvent:D,delta:i,stopPropagating:!1})};let T;const B=h=>{g(h),M(w,h),T=h},m=()=>{T&&B(T)};let P,x,E;const R=h=>{var D;P=(D=r.value[0])==null?void 0:D.object,i=0,x=new y.Vector2((h==null?void 0:h.clientX)??s.value,(h==null?void 0:h.clientY)??l.value),M(A,h)};let $,I=!1;const ce=h=>{var D,z,ue;h instanceof PointerEvent&&(r.value.length===0&&M(L,h),P===((D=r.value[0])==null?void 0:D.object)&&(E=new y.Vector2((h==null?void 0:h.clientX)??s.value,(h==null?void 0:h.clientY)??l.value),i=x==null?void 0:x.distanceTo(E),h.button===0?(M(v,h),$===((z=r.value[0])==null?void 0:z.object)?I=!0:($=(ue=r.value[0])==null?void 0:ue.object,I=!1)):h.button===2&&M(k,h)),M(d,h))},et=h=>{I&&(M(S,h),$=void 0,I=!1)},tt=h=>M(w,h),nt=h=>M(O,h);return n.value.addEventListener("pointerup",ce),n.value.addEventListener("pointerdown",R),n.value.addEventListener("pointermove",B),n.value.addEventListener("pointerleave",tt),n.value.addEventListener("dblclick",et),n.value.addEventListener("wheel",nt),p.onUnmounted(()=>{n!=null&&n.value&&(n.value.removeEventListener("pointerup",ce),n.value.removeEventListener("pointerdown",R),n.value.removeEventListener("pointermove",B),n.value.removeEventListener("pointerleave",tt),n.value.removeEventListener("dblclick",et),n.value.removeEventListener("wheel",nt))}),{intersects:r,onClick:h=>v.on(h).off,onDblClick:h=>S.on(h).off,onContextMenu:h=>k.on(h).off,onPointerMove:h=>w.on(h).off,onPointerUp:h=>d.on(h).off,onPointerDown:h=>A.on(h).off,onPointerMissed:h=>L.on(h).off,onWheel:h=>O.on(h).off,forceUpdate:m}};function Wt(){const{logWarning:e}=W();function t(l,i,a){let c=null;return l.traverse(o=>{o[i]===a&&(c=o)}),c||e(`Child with ${i} '${a}' not found.`),c}function n(l,i,a){const c=[];return l.traverse(o=>{o[i].includes(a)&&c.push(o)}),c.length||e(`Children with ${i} '${a}' not found.`),c}function r(l,i){return t(l,"name",i)}function s(l,i){return n(l,"name",i)}return{seek:t,seekByName:r,seekAll:n,seekAllByName:s}}function he(e){let t=0;return e.traverse(n=>{if(n.isMesh&&n.geometry&&n.type!=="HightlightMesh"){const r=n.geometry,s=r.attributes.position.count*3*Float32Array.BYTES_PER_ELEMENT,l=r.index?r.index.count*Uint32Array.BYTES_PER_ELEMENT:0,i=r.attributes.normal?r.attributes.normal.count*3*Float32Array.BYTES_PER_ELEMENT:0,a=r.attributes.uv?r.attributes.uv.count*2*Float32Array.BYTES_PER_ELEMENT:0,c=s+l+i+a;t+=c}}),t}function Nt(e){return(e/1024).toFixed(2)}const ie=p.ref({}),ae=e=>Object.assign(ie.value,e);function Fe(e,t,n){var B;const r=p.shallowRef(),s=p.shallowRef();e&&(r.value=e),t&&(s.value=t);const l=m=>{var P;return((P=m.__tres)==null?void 0:P.eventCount)>0},i=m=>{var P;return((P=m.children)==null?void 0:P.some(x=>i(x)))||l(m)},a=p.shallowRef(((B=r.value)==null?void 0:B.children).filter(i)||[]);function c(m,P){if(Array.isArray(m))for(const x of m)x(P);typeof m=="function"&&m(P)}function o(m,P){const x=[],E=()=>P.stopPropagating=!0;P.stopPropagation=E;for(const R of P==null?void 0:P.intersections){if(P.stopPropagating)return;P={...P,...R};const{object:$}=R;P.eventObject=$,c($[m],P),x.push($);let I=$.parent;for(;I!==null&&!P.stopPropagating&&!x.includes(I);)P.eventObject=I,c(I[m],P),x.push(I),I=I.parent;const ce=Pt(m.slice(2));n(ce,{intersection:R,event:P})}}const{onClick:u,onDblClick:_,onContextMenu:f,onPointerMove:g,onPointerDown:v,onPointerUp:S,onPointerMissed:w,onWheel:d,forceUpdate:A}=Ve(a,t);S(m=>o("onPointerUp",m)),v(m=>o("onPointerDown",m)),u(m=>o("onClick",m)),_(m=>o("onDoubleClick",m)),f(m=>o("onContextMenu",m)),d(m=>o("onWheel",m));let L=[];g(m=>{const P=m.intersections.map(({object:E})=>E),x=m.intersections;L.forEach(({object:E})=>{P.includes(E)||(m.intersections=L,o("onPointerLeave",m),o("onPointerOut",m))}),m.intersections=x,m.intersections.forEach(({object:E})=>{L.includes(E)||(o("onPointerEnter",m),o("onPointerOver",m))}),o("onPointerMove",m),L=m.intersections});const k=[];w(m=>{const P=()=>m.stopPropagating=!0;m.stopPropagation=P,k.forEach(x=>{m.stopPropagating||(m.eventObject=x,c(x.onPointerMissed,m))}),n("pointer-missed",{event:m})});function O(m){ee(m)&&F(m)&&a.value.push(m)}function j(m){if(ee(m)&&F(m)){const P=a.value.indexOf(m);P>-1&&a.value.splice(P,1)}}function M(m){ee(m)&&F(m)&&m.onPointerMissed&&k.push(m)}function T(m){if(ee(m)&&F(m)){const P=k.indexOf(m);P>-1&&k.splice(P,1)}}return t.eventManager={forceUpdate:A,registerObject:O,deregisterObject:j,registerPointerMissedObject:M,deregisterPointerMissedObject:T},{forceUpdate:A,registerObject:O,deregisterObject:j,registerPointerMissedObject:M,deregisterPointerMissedObject:T}}function zt(e,t,n=10){const r=C.toValue(e)?C.useWindowSize():C.useElementSize(p.computed(()=>C.toValue(t).parentElement)),s=p.readonly(C.refDebounced(r.width,n)),l=p.readonly(C.refDebounced(r.height,n)),i=p.computed(()=>s.value/l.value);return{height:l,width:s,aspectRatio:i}}function ge(){const e=new Map,t=new Set;let n=0,r=!1;const s=()=>{const o=Array.from(e.entries()).sort((u,_)=>{const f=u[1].priority-_[1].priority;return f===0?u[1].addI-_[1].addI:f});t.clear(),o.forEach(u=>t.add(u[0]))},l=o=>{e.delete(o),t.delete(o)};return{on:(o,u=0)=>{e.set(o,{priority:u,addI:n++});const _=()=>l(o);return C.tryOnScopeDispose(_),r=!0,{off:_}},off:l,trigger:(...o)=>{r&&(s(),r=!1),t.forEach(u=>u(...o))},dispose:()=>{e.clear(),t.clear()},get count(){return e.size}}}function We(){let e=!0,t=!0,n=!1;const r=new y.Clock(!1),s=p.ref(r.running),l=p.ref(!1);let i;const a=y.MathUtils.generateUUID();let c=null;const o=ge(),u=ge(),_=ge();j();let f={};function g(M){f=M}function v(M,T,B=0){switch(T){case"before":return o.on(M,B);case"render":return c||(c=M),u.dispose(),u.on(M);case"after":return _.on(M,B)}}function S(){t&&(t=!1,j(),O())}function w(){t=!0,j(),cancelAnimationFrame(i)}function d(){n=!1,j()}function A(){n=!0,j()}function L(){l.value=!0}function k(){l.value=!1}function O(){if(!e){i=requestAnimationFrame(O);return}const M=r.getDelta(),T=r.getElapsedTime(),B={camera:p.unref(f.camera),scene:p.unref(f.scene),renderer:p.unref(f.renderer),raycaster:p.unref(f.raycaster),controls:p.unref(f.controls),invalidate:f.invalidate,advance:f.advance},m={delta:M,elapsed:T,clock:r,...B};s.value&&o.trigger(m),l.value||(u.count?u.trigger(m):c&&c(m)),s.value&&_.trigger(m),i=requestAnimationFrame(O)}function j(){const M=!t&&!n;r.running!==M&&(r.running?r.stop():r.start()),s.value=r.running}return{loopId:a,register:(M,T,B)=>v(M,T,B),start:S,stop:w,pause:A,resume:d,pauseRender:L,resumeRender:k,isRenderPaused:l,isActive:s,setContext:g,setReady:M=>e=M}}function Gt(e,t,n=100){n=n<=0?100:n;const r=C.createEventHook(),s=new Set;let l=!1,i=!1,a=null;function c(){a&&clearTimeout(a),!i&&!l&&e()?(r.trigger(t),s.forEach(f=>f()),s.clear(),l=!0):!i&&!l&&(a=setTimeout(c,n))}function o(){i=!0,a&&clearTimeout(a)}c();const u=(f,...g)=>{f(...g)};return{on:f=>{if(l)return u(f,t),{off:()=>{}};{const g=r.on(f);return s.add(g.off),r.on(f)}},off:r.off,trigger:r.trigger,cancel:o}}const Q=new WeakMap;function Ne(e){if(e=e||X(),Q.has(e))return Q.get(e);const t=100,n=Date.now(),l=Gt(()=>{if(Date.now()-n>=t)return!0;{const i=e.renderer.value,a=(i==null?void 0:i.domElement)||{width:0,height:0};return!!(i&&a.width>0&&a.height>0)}},e);return Q.set(e,l),l}function qt(e){const t=X();if(t)return Q.has(t)?Q.get(t).on(e):Ne(t).on(e)}function ze({scene:e,canvas:t,windowSize:n,disableRender:r,rendererOptions:s,emit:l}){const i=p.shallowRef(e),a=zt(n,t),{camera:c,cameras:o,registerCamera:u,deregisterCamera:_,setCameraActive:f}=Ce({sizes:a,scene:e}),g={mode:p.ref(s.renderMode||"always"),priority:p.ref(0),frames:p.ref(0),maxFrames:60,canBeInvalidated:p.computed(()=>g.mode.value==="on-demand"&&g.frames.value===0)};function v(R=1){s.renderMode==="on-demand"&&(g.frames.value=Math.min(g.maxFrames,g.frames.value+R))}function S(){s.renderMode==="manual"&&(g.frames.value=1)}const{renderer:w}=$e({scene:e,canvas:t,options:s,emit:l,contextParts:{sizes:a,camera:c,render:g,invalidate:v,advance:S},disableRender:r}),d={sizes:a,scene:i,camera:c,cameras:p.readonly(o),renderer:w,raycaster:p.shallowRef(new y.Raycaster),controls:p.ref(null),perf:{maxFrames:160,fps:{value:0,accumulator:[]},memory:{currentMem:0,allocatedMem:0,accumulator:[]}},render:g,advance:S,extend:ae,invalidate:v,registerCamera:u,setCameraActive:f,deregisterCamera:_,loop:We()};p.provide("useTres",d),d.scene.value.__tres={root:d},d.loop.register(()=>{c.value&&g.frames.value>0&&(w.value.render(e,c.value),l("render",d.renderer.value)),g.priority.value=0,g.mode.value==="always"?g.frames.value=1:g.frames.value=Math.max(0,g.frames.value-1)},"render");const{on:A,cancel:L}=Ne(d);d.loop.setReady(!1),d.loop.start(),A(()=>{l("ready",d),d.loop.setReady(!0),Fe(e,d,l)}),p.onUnmounted(()=>{L(),d.loop.stop()});const k=100,O=C.useFps({every:k}),{isSupported:j,memory:M}=C.useMemory({interval:k}),T=160;let B=performance.now();const m=({timestamp:R})=>{d.scene.value&&(d.perf.memory.allocatedMem=he(d.scene.value)),R-B>=k&&(B=R,d.perf.fps.accumulator.push(O.value),d.perf.fps.accumulator.length>T&&d.perf.fps.accumulator.shift(),d.perf.fps.value=O.value,j.value&&M.value&&(d.perf.memory.accumulator.push(M.value.usedJSHeapSize/1024/1024),d.perf.memory.accumulator.length>T&&d.perf.memory.accumulator.shift(),d.perf.memory.currentMem=d.perf.memory.accumulator.reduce(($,I)=>$+I,0)/d.perf.memory.accumulator.length))};let P=0;const x=1,{pause:E}=C.useRafFn(({delta:R})=>{window.__TRES__DEVTOOLS__&&(m({timestamp:performance.now()}),P+=R,P>=x&&(window.__TRES__DEVTOOLS__.cb(d),P=0))},{immediate:!0});return p.onUnmounted(()=>{E()}),d}function X(){const e=p.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const Yt=X;function Jt(){const{camera:e,scene:t,renderer:n,loop:r,raycaster:s,controls:l,invalidate:i,advance:a}=X();r.setContext({camera:e,scene:t,renderer:n,raycaster:s,controls:l,invalidate:i,advance:a});function c(_,f=0){return r.register(_,"before",f)}function o(_){return r.register(_,"render")}function u(_,f=0){return r.register(_,"after",f)}return{pause:r.pause,resume:r.resume,pauseRender:r.pauseRender,resumeRender:r.resumeRender,isActive:r.isActive,onBeforeRender:c,render:o,onAfterRender:u}}function Kt(e,t={},n={}){let r=e;const s=a=>{r=a};let l=new Proxy({},{});const i={has(a,c){return c in t||c in r},get(a,c,o){return c in t?t[c](r):r[c]},set(a,c,o){return n[c]?n[c](o,r,l,s):r[c]=o,!0}};return l=new Proxy({},i),l}const{logError:Ge}=W(),qe=["onClick","onContextMenu","onPointerMove","onPointerEnter","onPointerLeave","onPointerOver","onPointerOut","onDoubleClick","onPointerDown","onPointerUp","onPointerCancel","onPointerMissed","onLostPointerCapture","onWheel"],Qt=e=>{const t=e.scene.value;function n(o,u,_,f){if(f||(f={}),f.args||(f.args=[]),o==="template"||Ct(o))return null;let g=o.replace("Tres",""),v;if(o==="primitive"){(!U(f.object)||p.isRef(f.object))&&Ge("Tres primitives need an 'object' prop, whose value is an object or shallowRef<object>"),g=f.object.type;const S={};v=Kt(f.object,{object:d=>d,isPrimitive:()=>!0,__tres:()=>S},{object:(d,A,L,k)=>{Et(d,L,k,{patchProp:l,remove:s,insert:r},e)},__tres:d=>{Object.assign(S,d)}})}else{const S=ie.value[g];S||Ge(`${g} is not defined on the THREE namespace. Use extend to add it to the catalog.`),v=new S(...f.args)}return v?(v.isCamera&&(f!=null&&f.position||v.position.set(3,3,3),f!=null&&f.lookAt||v.lookAt(0,0,0)),v=q(v,{...v.__tres,type:g,memoizedProps:f,eventCount:0,primitive:o==="primitive",attach:f.attach},e),v):null}function r(o,u){var g,v,S;if(!o)return;u=u||t;const _=o.__tres?o:q(o,{},e),f=u.__tres?u:q(u,{},e);o=Y(_),u=Y(f),o.__tres&&((g=o.__tres)==null?void 0:g.eventCount)>0&&((v=e.eventManager)==null||v.registerObject(o)),e.registerCamera(o),(S=e.eventManager)==null||S.registerPointerMissedObject(o),_.__tres.attach?Bt(f,_,_.__tres.attach):F(o)&&F(f)&&(f.add(o),o.dispatchEvent({type:"added"})),_.__tres.parent=f,f.__tres.objects&&!f.__tres.objects.includes(_)&&f.__tres.objects.push(_)}function s(o,u){var v,S,w,d;if(!o)return;o!=null&&o.__tres&&((v=o.__tres)==null?void 0:v.eventCount)>0&&((S=e.eventManager)==null||S.deregisterObject(o)),u=fe(u)?"default":u;const _=(w=o.__tres)==null?void 0:w.dispose;fe(_)||(_===null?u=!1:u=_);const f=(d=o.__tres)==null?void 0:d.primitive,g=u==="default"?!f:!!u;if(o.__tres&&"objects"in o.__tres&&[...o.__tres.objects].forEach(A=>s(A,u)),g&&o.children&&[...o.children].forEach(A=>s(A,u)),Re(o,e),Ee(o,e),g&&!pt(o)){if(G(u))u(o);else if(G(o.dispose))try{o.dispose()}catch{}}"__tres"in o&&delete o.__tres}function l(o,u,_,f){var A,L;if(!o)return;let g=o,v=u;if(o.__tres&&(o.__tres.memoizedProps[u]=f),u==="attach"){const k=((A=o.__tres)==null?void 0:A.parent)||o.parent;s(o),q(o,{attach:f},e),k&&r(o,k);return}if(u==="dispose"){o.__tres||(o=q(o,{},e)),o.__tres.dispose=f;return}if(F(o)&&v==="blocks-pointer-events"){f||f===""?o[v]=f:delete o[v];return}qe.includes(u)&&o.__tres&&(o.__tres.eventCount+=1);let S=oe(v),w=g==null?void 0:g[S];if(v==="args"){const k=o,O=_??[],j=f??[],M=((L=o.__tres)==null?void 0:L.type)||o.type;M&&O.length&&!At(O,j)&&(g=Object.assign(k,new ie.value[M](...f)));return}if(g.type==="BufferGeometry"){if(v==="args")return;g.setAttribute(oe(v),new y.BufferAttribute(...f));return}if(v.includes("-")&&w===void 0){const k=v.split("-");w=k.reduce((O,j)=>O[oe(j)],g),v=k.pop(),S=v,w!=null&&w.set||(g=k.reduce((O,j)=>O[oe(j)],g))}let d=f;if(d===""&&(d=!0),G(w)){qe.includes(u)||(Z(d)?o[S](...d):o[S](d)),S.startsWith("on")&&G(d)&&(g[S]=d);return}!(w!=null&&w.set)&&!G(w)?g[S]=d:w.constructor===d.constructor&&(w!=null&&w.copy)?w==null||w.copy(d):Z(d)?w.set(...d):!w.isColor&&w.setScalar?w.setScalar(d):w.set(d),Ie(o)}function i(o){var u;return((u=o==null?void 0:o.__tres)==null?void 0:u.parent)||null}function a(o){const u=q(new y.Object3D,{type:"Comment"},e);return u.name=o,u}function c(o){var g;const u=i(o),_=((g=u==null?void 0:u.__tres)==null?void 0:g.objects)||[],f=_.indexOf(o);return f<0||f>=_.length-1?null:_[f+1]}return{insert:r,remove:s,createElement:n,patchProp:l,parentNode:i,createText:()=>void 0,createComment:a,setText:()=>void 0,setElementText:()=>void 0,nextSibling:c,querySelector:()=>void 0,setScopeId:()=>void 0,cloneNode:()=>void 0,insertStaticContent:()=>void 0}};function Xt(){return Ye().__VUE_DEVTOOLS_GLOBAL_HOOK__}function Ye(){return typeof navigator<"u"&&typeof window<"u"?window:typeof globalThis<"u"?globalThis:{}}const Ht=typeof Proxy=="function",Zt="devtools-plugin:setup",en="plugin:settings:set";let J,ve;function tn(){var e;return J!==void 0||(typeof window<"u"&&window.performance?(J=!0,ve=window.performance):typeof globalThis<"u"&&(!((e=globalThis.perf_hooks)===null||e===void 0)&&e.performance)?(J=!0,ve=globalThis.perf_hooks.performance):J=!1),J}function nn(){return tn()?ve.now():Date.now()}class rn{constructor(t,n){this.target=null,this.targetQueue=[],this.onQueue=[],this.plugin=t,this.hook=n;const r={};if(t.settings)for(const i in t.settings){const a=t.settings[i];r[i]=a.defaultValue}const s=`__vue-devtools-plugin-settings__${t.id}`;let l=Object.assign({},r);try{const i=localStorage.getItem(s),a=JSON.parse(i);Object.assign(l,a)}catch{}this.fallbacks={getSettings(){return l},setSettings(i){try{localStorage.setItem(s,JSON.stringify(i))}catch{}l=i},now(){return nn()}},n&&n.on(en,(i,a)=>{i===this.plugin.id&&this.fallbacks.setSettings(a)}),this.proxiedOn=new Proxy({},{get:(i,a)=>this.target?this.target.on[a]:(...c)=>{this.onQueue.push({method:a,args:c})}}),this.proxiedTarget=new Proxy({},{get:(i,a)=>this.target?this.target[a]:a==="on"?this.proxiedOn:Object.keys(this.fallbacks).includes(a)?(...c)=>(this.targetQueue.push({method:a,args:c,resolve:()=>{}}),this.fallbacks[a](...c)):(...c)=>new Promise(o=>{this.targetQueue.push({method:a,args:c,resolve:o})})})}async setRealTarget(t){this.target=t;for(const n of this.onQueue)this.target.on[n.method](...n.args);for(const n of this.targetQueue)n.resolve(await this.target[n.method](...n.args))}}function on(e,t){const n=e,r=Ye(),s=Xt(),l=Ht&&n.enableEarlyProxy;if(s&&(r.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__||!l))s.emit(Zt,e,t);else{const i=l?new rn(n,s):null;(r.__VUE_DEVTOOLS_PLUGINS__=r.__VUE_DEVTOOLS_PLUGINS__||[]).push({pluginDescriptor:n,setupFn:t,proxy:i}),i&&t(i.proxiedTarget)}}function sn(e,t){const n=`▲ ■ ●${e}`;typeof Je=="function"?Je(n,t):console.log(n)}function Je(e,t){throw new Error(e+t)}const Ke=e=>{const t={id:e.uuid,label:e.type,children:[],tags:[]};e.name!==""&&t.tags.push({label:e.name,textColor:5750629,backgroundColor:15793395});const n=he(e);return n>0&&t.tags.push({label:`${Nt(n)} KB`,textColor:15707189,backgroundColor:16775644,tooltip:"Memory usage"}),e.type.includes("Light")&&(ft(e)&&t.tags.push({label:`${e.intensity}`,textColor:9738662,backgroundColor:16316922,tooltip:"Intensity"}),t.tags.push({label:`#${new y.Color(e.color).getHexString()}`,textColor:9738662,backgroundColor:16316922,tooltip:"Color"})),e.type.includes("Camera")&&(t.tags.push({label:`${e.fov}°`,textColor:9738662,backgroundColor:16316922,tooltip:"Field of view"}),t.tags.push({label:`x: ${Math.round(e.position.x)} y: ${Math.round(e.position.y)} z: ${Math.round(e.position.z)}`,textColor:9738662,backgroundColor:16316922,tooltip:"Position"})),t};function Qe(e,t,n=""){e.children.forEach(r=>{if(r.type==="HightlightMesh"||n&&!r.type.includes(n)&&!r.name.includes(n))return;const s=Ke(r);t.children.push(s),Qe(r,s,n)})}const an=[],H="tres:inspector",ln=p.reactive({sceneGraph:null});function cn(e,t){on({id:"dev.esm.tres",label:"TresJS 🪐",logo:"https://raw.githubusercontent.com/Tresjs/tres/main/public/favicon.svg",packageName:"tresjs",homepage:"https://tresjs.org",componentStateTypes:an,app:e},n=>{typeof n.now!="function"&&sn("You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html."),n.addInspector({id:H,label:"TresJS 🪐",icon:"account_tree",treeFilterPlaceholder:"Search instances"}),setInterval(()=>{n.sendInspectorTree(H)},1e3),setInterval(()=>{n.notifyComponentUpdate()},5e3),n.on.getInspectorTree(l=>{if(l.inspectorId===H){const i=Ke(t.scene.value);Qe(t.scene.value,i,l.filter),ln.sceneGraph=i,l.rootNodes=[i]}});let r=null,s=null;n.on.getInspectorState(l=>{var i;if(l.inspectorId===H){const[a]=t.scene.value.getObjectsByProperty("uuid",l.nodeId);if(!a)return;if(s&&r&&r.parent&&s.remove(r),a.isMesh){const c=Dt(a);a.add(c),r=c,s=a}l.state={object:Object.entries(a).map(([c,o])=>c==="children"?{key:c,value:o.filter(u=>u.type!=="HightlightMesh")}:{key:c,value:o,editable:!0}).filter(({key:c})=>c!=="parent")},a.isScene&&(l.state.info={memory:he(a),objects:a.children.length,calls:t.renderer.value.info.render.calls,triangles:t.renderer.value.info.render.triangles,points:t.renderer.value.info.render.points,lines:t.renderer.value.info.render.lines},l.state.programs=((i=t.renderer.value.info.programs)==null?void 0:i.map(c=>({key:c.name,value:{...c,vertexShader:c.vertexShader,attributes:c.getAttributes(),uniforms:c.getUniforms()}})))||[])}}),n.on.editInspectorState(l=>{l.inspectorId===H&&Ot(t.scene.value,l.nodeId,l.path,l.state.value)})})}const un=["data-scene","data-tres"],Xe=p.defineComponent({__name:"TresCanvas",props:{shadows:{type:Boolean,default:void 0},clearColor:{},toneMapping:{},shadowMapType:{},useLegacyLights:{type:Boolean,default:void 0},outputColorSpace:{},toneMappingExposure:{},renderMode:{default:"always"},dpr:{},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}},emits:["render","click","double-click","context-menu","pointer-move","pointer-up","pointer-down","pointer-enter","pointer-leave","pointer-over","pointer-out","pointer-missed","wheel","ready"],setup(e,{expose:t,emit:n}){var w;const r=e,s=n,l=p.useSlots(),{logWarning:i}=W(),a=p.ref(),c=p.shallowRef(new y.Scene),o=(w=p.getCurrentInstance())==null?void 0:w.appContext.app;ae(_e);const u=(d,A=!1)=>p.defineComponent({setup(){var k;const L=(k=p.getCurrentInstance())==null?void 0:k.appContext;return L&&(L.app=o),p.provide("useTres",d),p.provide("extend",ae),typeof window<"u"&&cn(L==null?void 0:L.app,d),()=>p.h(p.Fragment,null,A?[]:l.default())}}),_=(d,A=!1)=>{const L=u(d,A),{render:k}=p.createRenderer(Qt(d));k(p.h(L),c.value)},f=(d,A=!1)=>{pe(d.scene.value),A&&(d.renderer.value.dispose(),d.renderer.value.renderLists.dispose(),d.renderer.value.forceContextLoss()),c.value.__tres={root:d}},g=p.computed(()=>r.disableRender),v=p.shallowRef(null);t({context:v,dispose:()=>f(v.value,!0)});const S=()=>{f(v.value),_(v.value,!0)};return p.onMounted(()=>{const d=a;v.value=ze({scene:c.value,canvas:d,windowSize:r.windowSize??!1,disableRender:g.value??!1,rendererOptions:r,emit:s});const{registerCamera:A,camera:L,cameras:k,deregisterCamera:O}=v.value;_(v.value);const j=()=>{const M=new y.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);M.position.set(3,3,3),M.lookAt(0,0,0),A(M);const T=p.watchEffect(()=>{k.value.length>=2&&(M.removeFromParent(),O(M),T==null||T())})};p.watch(()=>r.camera,(M,T)=>{M&&A(M),T&&(T.removeFromParent(),O(T))},{immediate:!0}),L.value||(i("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),j())}),p.onUnmounted(S),(d,A)=>(p.openBlock(),p.createElementBlock("canvas",{ref_key:"canvas",ref:a,"data-scene":c.value.uuid,class:p.normalizeClass(d.$attrs.class),"data-tres":`tresjs ${p.unref(at).version}`,style:p.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,un))}}),fn=["TresCanvas","TresLeches","TresScene"],dn={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!fn.includes(e)||e==="primitive"}}},pn={mounted:(e,t)=>{if(t.arg){console.log(`v-log:${t.arg}`,e[t.arg]);return}console.log("v-log",e)}};class He extends y.Line{constructor(t,n){const r=[1,1,0,-1,1,0,-1,-1,0,1,-1,0,1,1,0],s=new y.BufferGeometry;s.setAttribute("position",new y.Float32BufferAttribute(r,3)),s.computeBoundingSphere();const l=new y.LineBasicMaterial({fog:!1});super(s,l),this.light=t,this.color=n,this.type="RectAreaLightHelper";const i=[1,1,0,-1,1,0,-1,-1,0,1,1,0,-1,-1,0,1,-1,0],a=new y.BufferGeometry;a.setAttribute("position",new y.Float32BufferAttribute(i,3)),a.computeBoundingSphere(),this.add(new y.Mesh(a,new y.MeshBasicMaterial({side:y.BackSide,fog:!1})))}updateMatrixWorld(){if(this.scale.set(.5*this.light.width,.5*this.light.height,1),this.color!==void 0)this.material.color.set(this.color),this.children[0].material.color.set(this.color);else{this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);const t=this.material.color,n=Math.max(t.r,t.g,t.b);n>1&&t.multiplyScalar(1/n),this.children[0].material.color.copy(this.material.color)}this.matrixWorld.extractRotation(this.light.matrixWorld).scale(this.scale).copyPosition(this.light.matrixWorld),this.children[0].matrixWorld.copy(this.matrixWorld)}dispose(){this.geometry.dispose(),this.material.dispose(),this.children[0].geometry.dispose(),this.children[0].material.dispose()}}const{logWarning:Ze}=W();let le,N;const mn={DirectionalLight:y.DirectionalLightHelper,PointLight:y.PointLightHelper,SpotLight:y.SpotLightHelper,HemisphereLight:y.HemisphereLightHelper,RectAreaLight:He},hn={mounted:e=>{if(!e.isLight){Ze(`${e.type} is not a light`);return}le=mn[e.type],e.parent.add(new le(e,1,e.color.getHex()))},updated:e=>{N=e.parent.children.find(t=>t instanceof le),!(N instanceof He)&&N.update()},unmounted:e=>{if(!e.isLight){Ze(`${e.type} is not a light`);return}N=e.parent.children.find(t=>t instanceof le),N&&N.dispose&&N.dispose(),e.parent.remove(N)}},{logWarning:gn}=W();let V=null;const vn={updated:(e,t)=>{var s;const n=jt(t);if(!n){gn(`v-distance-to: problem with binding value: ${t.value}`);return}V&&(V.dispose(),e.parent.remove(V));const r=n.clone().sub(e.position);r.normalize(),V=new y.ArrowHelper(r,e.position,e.position.distanceTo(n),16776960),e.parent.add(V),console.table([["Distance:",e.position.distanceTo(n)],[`origin: ${e.name||e.type}`,`x:${e.position.x}, y:${e.position.y}, z:${(s=e.position)==null?void 0:s.z}`],[`Destiny: ${e.name||e.type}`,`x:${n.x}, y:${n.y}, z:${n==null?void 0:n.z}`]])},unmounted:e=>{V==null||V.dispose(),e.parent.remove(V)}},yn={install(e){e.component("TresCanvas",Xe)}};b.TresCanvas=Xe,b.catalogue=ie,b.createRenderLoop=We,b.default=yn,b.dispose=pe,b.extend=ae,b.isProd=_t,b.normalizeColor=Ae,b.normalizeVectorFlexibleParam=wt,b.onTresReady=qt,b.templateCompilerOptions=dn,b.trasverseObjects=Ue,b.useCamera=Ce,b.useLoader=Vt,b.useLogger=W,b.useLoop=Jt,b.useRaycaster=Ve,b.useRenderLoop=yt,b.useRenderer=$e,b.useSeek=Wt,b.useTexture=Ft,b.useTres=Yt,b.useTresContext=X,b.useTresContextProvider=ze,b.useTresEventManager=Fe,b.vDistanceTo=vn,b.vLightHelper=hn,b.vLog=pn,Object.defineProperties(b,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
package/package.json CHANGED
@@ -1,11 +1,15 @@
1
1
  {
2
2
  "name": "@tresjs/core",
3
3
  "type": "module",
4
- "version": "4.2.6",
4
+ "version": "4.2.7",
5
5
  "packageManager": "pnpm@9.1.4",
6
6
  "description": "Declarative ThreeJS using Vue Components",
7
7
  "author": "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",
8
8
  "license": "MIT",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/Tresjs/tres.git"
12
+ },
9
13
  "keywords": [
10
14
  "vue",
11
15
  "3d",