@tresjs/core 3.2.1-next.1 → 3.2.1-next.3

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,11 +1,11 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v3.2.1-next.1
3
+ * version: v3.2.1-next.3
4
4
  * (c) 2023
5
5
  * description: Declarative ThreeJS using Vue Components
6
6
  * author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
7
7
  */
8
- import { ref as h, computed as A, watchEffect as D, onUnmounted as N, shallowRef as F, watch as te, reactive as ue, readonly as le, provide as I, inject as ce, createRenderer as fe, defineComponent as U, useSlots as me, getCurrentInstance as J, onMounted as pe, openBlock as ve, createElementBlock as de, normalizeStyle as ge, h as K, Fragment as ye } from "vue";
8
+ import { ref as h, computed as A, watchEffect as D, onUnmounted as N, shallowRef as F, watch as te, reactive as ue, readonly as le, provide as I, inject as ce, createRenderer as fe, defineComponent as U, useSlots as pe, getCurrentInstance as J, onMounted as me, openBlock as ve, createElementBlock as de, normalizeStyle as ge, h as K, Fragment as ye } from "vue";
9
9
  import * as we from "three";
10
10
  import { PerspectiveCamera as W, OrthographicCamera as Ce, Camera as _e, Clock as Pe, Vector3 as Ee, Color as R, REVISION as Me, SRGBColorSpace as Ae, ACESFilmicToneMapping as be, PCFSoftShadowMap as ke, WebGLRenderer as z, LoadingManager as De, TextureLoader as Oe, Vector2 as xe, Raycaster as he, BufferAttribute as Be, Scene as Le } from "three";
11
11
  import { createEventHook as x, useRafFn as Te, toValue as P, unrefElement as Se, useDevicePixelRatio as Re, usePointer as je, useElementBounding as He, useWindowSize as Fe, useElementSize as ze } from "@vueuse/core";
@@ -17,10 +17,10 @@ const Ge = ({ sizes: e, scene: n }) => {
17
17
  }, o = (s) => {
18
18
  t.value = t.value.filter(({ uuid: c }) => c !== s.uuid);
19
19
  }, f = (s) => {
20
- const c = s instanceof _e ? s : t.value.find((m) => m.uuid === s);
20
+ const c = s instanceof _e ? s : t.value.find((p) => p.uuid === s);
21
21
  if (!c)
22
22
  return;
23
- const i = t.value.filter(({ uuid: m }) => m !== c.uuid);
23
+ const i = t.value.filter(({ uuid: p }) => p !== c.uuid);
24
24
  t.value = [c, ...i];
25
25
  };
26
26
  return D(() => {
@@ -54,7 +54,7 @@ const ae = () => ({
54
54
  pause: Ie,
55
55
  resume: We,
56
56
  isActive: $e
57
- }), pt = !0, X = "[TresJS ▲ ■ ●] ";
57
+ }), mt = !0, X = "[TresJS ▲ ■ ●] ";
58
58
  function B() {
59
59
  function e(r, a) {
60
60
  console.error(`${X} ${r}`, a || "");
@@ -227,11 +227,11 @@ async function dt(e, n, t, r, a) {
227
227
  const { logError: o } = B(), f = new e();
228
228
  a && a(f), t && t(f);
229
229
  const c = (Array.isArray(n) ? n : [n]).map(
230
- (i) => new Promise((m, u) => {
230
+ (i) => new Promise((p, u) => {
231
231
  f.load(
232
232
  i,
233
233
  (l) => {
234
- l.scene && Object.assign(l, Ze(l.scene)), m(l);
234
+ l.scene && Object.assign(l, Ze(l.scene)), p(l);
235
235
  },
236
236
  r,
237
237
  (l) => u(o("[useLoader] - Failed to load resource", l))
@@ -262,7 +262,7 @@ async function gt(e) {
262
262
  roughnessMap: s,
263
263
  metalnessMap: c,
264
264
  aoMap: i,
265
- alphaMap: m,
265
+ alphaMap: p,
266
266
  matcap: u
267
267
  } = e;
268
268
  return {
@@ -272,16 +272,16 @@ async function gt(e) {
272
272
  roughnessMap: s ? await r(s) : null,
273
273
  metalnessMap: c ? await r(c) : null,
274
274
  aoMap: i ? await r(i) : null,
275
- alphaMap: m ? await r(m) : null,
275
+ alphaMap: p ? await r(p) : null,
276
276
  matcap: u ? await r(u) : null
277
277
  };
278
278
  }
279
279
  }
280
280
  const et = (e, { renderer: n, camera: t, raycaster: r }) => {
281
- const a = A(() => n.value.domElement), { x: o, y: f } = je({ target: a }), { width: s, height: c, top: i, left: m } = He(a), u = ({ x: d, y: E }) => {
281
+ const a = A(() => n.value.domElement), { x: o, y: f } = je({ target: a }), { width: s, height: c, top: i, left: p } = He(a), u = ({ x: d, y: E }) => {
282
282
  if (a.value)
283
283
  return {
284
- x: (d - m.value) / s.value * 2 - 1,
284
+ x: (d - p.value) / s.value * 2 - 1,
285
285
  y: -((E - i.value) / c.value) * 2 + 1
286
286
  };
287
287
  }, l = ({ x: d, y: E }) => {
@@ -355,13 +355,13 @@ const tt = ({ scene: e, contextParts: n }) => {
355
355
  ],
356
356
  ({ uuid: l }) => l
357
357
  )
358
- ), { onClick: i, onPointerMove: m } = et(c, n);
358
+ ), { onClick: i, onPointerMove: p } = et(c, n);
359
359
  i(({ intersects: l, event: g }) => {
360
360
  var y;
361
361
  l.length && ((y = t.click.get(l[0].object)) == null || y(l[0], g));
362
362
  });
363
363
  let u;
364
- return m(({ intersects: l, event: g }) => {
364
+ return p(({ intersects: l, event: g }) => {
365
365
  var _, b, M, k;
366
366
  const y = (_ = l == null ? void 0 : l[0]) == null ? void 0 : _.object, { pointerLeave: v, pointerEnter: C, pointerMove: w } = t;
367
367
  u && u !== y && ((b = v.get(u)) == null || b(u, g)), y && (u !== y && ((M = C.get(y)) == null || M(l[0], g)), (k = w.get(y)) == null || k(l[0], g)), u = y || null;
@@ -383,7 +383,7 @@ function rt({
383
383
  height: s,
384
384
  width: f,
385
385
  aspectRatio: c
386
- }, m = F(e), {
386
+ }, p = F(e), {
387
387
  camera: u,
388
388
  cameras: l,
389
389
  registerCamera: g,
@@ -399,7 +399,7 @@ function rt({
399
399
  }
400
400
  ), w = {
401
401
  sizes: i,
402
- scene: m,
402
+ scene: p,
403
403
  camera: u,
404
404
  cameras: le(l),
405
405
  renderer: C,
@@ -419,7 +419,7 @@ function nt() {
419
419
  return e;
420
420
  }
421
421
  const wt = nt;
422
- let G = null, p = null;
422
+ let G = null, m = null;
423
423
  const { logError: ee } = B(), at = {
424
424
  createElement(e, n, t, r) {
425
425
  var f, s;
@@ -440,22 +440,22 @@ const { logError: ee } = B(), at = {
440
440
  }, o;
441
441
  },
442
442
  insert(e, n) {
443
- var t, r, a, o, f, s, c, i, m;
444
- if (n && n.isScene && (p = n), (((t = e == null ? void 0 : e.__vnode) == null ? void 0 : t.type) === "TresGroup" || ((r = e == null ? void 0 : e.__vnode) == null ? void 0 : r.type) === "TresObject3D") && n === null && !((o = (a = e == null ? void 0 : e.__vnode) == null ? void 0 : a.ctx) != null && o.asyncResolved)) {
443
+ var t, r, a, o, f, s, c, i, p;
444
+ if (n && n.isScene && (m = n), (((t = e == null ? void 0 : e.__vnode) == null ? void 0 : t.type) === "TresGroup" || ((r = e == null ? void 0 : e.__vnode) == null ? void 0 : r.type) === "TresObject3D") && n === null && !((o = (a = e == null ? void 0 : e.__vnode) == null ? void 0 : a.ctx) != null && o.asyncResolved)) {
445
445
  G = e;
446
446
  return;
447
447
  } else
448
- (f = e == null ? void 0 : e.__vnode) != null && f.type.includes("Controls") && n === null && (G = p);
448
+ (f = e == null ? void 0 : e.__vnode) != null && f.type.includes("Controls") && n === null && (G = m);
449
449
  if (n || (n = G), e != null && e.isObject3D) {
450
450
  if (e != null && e.isCamera) {
451
- if (!(p != null && p.userData.tres__registerCamera))
451
+ if (!(m != null && m.userData.tres__registerCamera))
452
452
  throw "could not find tres__registerCamera on scene's userData";
453
- (c = p == null ? void 0 : (s = p.userData).tres__registerCamera) == null || c.call(s, e);
453
+ (c = m == null ? void 0 : (s = m.userData).tres__registerCamera) == null || c.call(s, e);
454
454
  }
455
455
  if (e != null && e.onClick || e != null && e.onPointerMove || e != null && e.onPointerEnter || e != null && e.onPointerLeave) {
456
- if (!(p != null && p.userData.tres__registerAtPointerEventHandler))
456
+ if (!(m != null && m.userData.tres__registerAtPointerEventHandler))
457
457
  throw "could not find tres__registerAtPointerEventHandler on scene's userData";
458
- (m = p == null ? void 0 : (i = p.userData).tres__registerAtPointerEventHandler) == null || m.call(i, e);
458
+ (p = m == null ? void 0 : (i = m.userData).tres__registerAtPointerEventHandler) == null || p.call(i, e);
459
459
  }
460
460
  }
461
461
  e != null && e.isObject3D && (n != null && n.isObject3D) ? (n.add(e), e.dispatchEvent({ type: "added" })) : e != null && e.isFog ? n.fog = e : typeof (e == null ? void 0 : e.attach) == "string" && (e.__previousAttach = e[n == null ? void 0 : n.attach], n && (n[e.attach] = e));
@@ -466,20 +466,20 @@ const { logError: ee } = B(), at = {
466
466
  if (e.isObject3D) {
467
467
  const r = e, a = (i) => {
468
468
  var u, l;
469
- const m = i;
470
- i.userData.tres__materialViaProp || (u = m.material) == null || u.dispose(), i.userData.tres__geometryViaProp || (l = m.geometry) == null || l.dispose();
471
- }, o = p == null ? void 0 : p.userData.tres__deregisterAtPointerEventHandler, f = p == null ? void 0 : p.userData.tres__deregisterBlockingObjectAtPointerEventHandler, s = (i) => {
472
- var m, u;
469
+ const p = i;
470
+ i.userData.tres__materialViaProp || (u = p.material) == null || u.dispose(), i.userData.tres__geometryViaProp || (l = p.geometry) == null || l.dispose();
471
+ }, o = m == null ? void 0 : m.userData.tres__deregisterAtPointerEventHandler, f = m == null ? void 0 : m.userData.tres__deregisterBlockingObjectAtPointerEventHandler, s = (i) => {
472
+ var p, u;
473
473
  if (!f)
474
474
  throw "could not find tres__deregisterBlockingObjectAtPointerEventHandler on scene's userData";
475
- if ((u = p == null ? void 0 : (m = p.userData).tres__deregisterBlockingObjectAtPointerEventHandler) == null || u.call(m, i), !o)
475
+ if ((u = m == null ? void 0 : (p = m.userData).tres__deregisterBlockingObjectAtPointerEventHandler) == null || u.call(p, i), !o)
476
476
  throw "could not find tres__deregisterAtPointerEventHandler on scene's userData";
477
477
  (i != null && i.onClick || i != null && i.onPointerMove || i != null && i.onPointerEnter || i != null && i.onPointerLeave) && (o == null || o(i));
478
478
  }, c = (i) => {
479
- const m = p == null ? void 0 : p.userData.tres__deregisterCamera;
480
- if (!m)
479
+ const p = m == null ? void 0 : m.userData.tres__deregisterCamera;
480
+ if (!p)
481
481
  throw "could not find tres__deregisterCamera on scene's userData";
482
- i.isCamera && (m == null || m(i));
482
+ i.isCamera && (p == null || p(i));
483
483
  };
484
484
  r.traverse((i) => {
485
485
  a(i), c(i), s == null || s(i);
@@ -493,10 +493,10 @@ const { logError: ee } = B(), at = {
493
493
  if (e) {
494
494
  let c = e, i = n;
495
495
  if (e.isObject3D && i === "blocks-pointer-events") {
496
- r || r === "" ? (o = p == null ? void 0 : (a = p.userData).tres__registerBlockingObjectAtPointerEventHandler) == null || o.call(a, e) : (s = p == null ? void 0 : (f = p.userData).tres__deregisterBlockingObjectAtPointerEventHandler) == null || s.call(f, e);
496
+ r || r === "" ? (o = m == null ? void 0 : (a = m.userData).tres__registerBlockingObjectAtPointerEventHandler) == null || o.call(a, e) : (s = m == null ? void 0 : (f = m.userData).tres__deregisterBlockingObjectAtPointerEventHandler) == null || s.call(f, e);
497
497
  return;
498
498
  }
499
- let m = T(i), u = c == null ? void 0 : c[m];
499
+ let p = T(i), u = c == null ? void 0 : c[p];
500
500
  if (i === "args") {
501
501
  const g = e, y = t ?? [], v = r ?? [], C = e.userData.tres__name || e.type;
502
502
  C && y.length && !Xe(y, v) && (c = Object.assign(g, new $.value[C](...r)));
@@ -513,14 +513,14 @@ const { logError: ee } = B(), at = {
513
513
  }
514
514
  if (i.includes("-") && u === void 0) {
515
515
  const g = i.split("-");
516
- u = g.reduce((y, v) => y[T(v)], c), i = g.pop(), m = i.toLowerCase(), u != null && u.set || (c = g.reduce((y, v) => y[T(v)], c));
516
+ u = g.reduce((y, v) => y[T(v)], c), i = g.pop(), p = i.toLowerCase(), u != null && u.set || (c = g.reduce((y, v) => y[T(v)], c));
517
517
  }
518
518
  let l = r;
519
519
  if (l === "" && (l = !0), Z(u)) {
520
- Array.isArray(l) ? e[m](...l) : e[m](l);
520
+ Array.isArray(l) ? e[p](...l) : e[p](l);
521
521
  return;
522
522
  }
523
- !(u != null && u.set) && !Z(u) ? c[m] = l : u.constructor === l.constructor && (u != null && u.copy) ? u == null || u.copy(l) : Array.isArray(l) ? u.set(...l) : !u.isColor && u.setScalar ? u.setScalar(l) : u.set(l);
523
+ !(u != null && u.set) && !Z(u) ? c[p] = l : u.constructor === l.constructor && (u != null && u.copy) ? u == null || u.copy(l) : Array.isArray(l) ? u.set(...l) : !u.isColor && u.setScalar ? u.setScalar(l) : u.set(l);
524
524
  }
525
525
  },
526
526
  parentNode(e) {
@@ -566,19 +566,19 @@ const st = ["data-scene"], it = /* @__PURE__ */ U({
566
566
  setup(e) {
567
567
  const n = e, { logWarning: t } = B(), r = h(), a = F(new Le());
568
568
  ae();
569
- const o = me(), f = J(), s = (m) => U({
569
+ const o = pe(), f = J(), s = (p) => U({
570
570
  setup() {
571
571
  const u = J();
572
- return Object.assign(u.appContext, f.appContext), Object.assign(u.provides, u.appContext.provides), I("useTres", m), I("extend", q), () => K(ye, null, o != null && o.default ? o.default() : []);
572
+ return u.appContext.app = f.appContext.app, Object.assign(u.provides, u.appContext.provides), I("useTres", p), I("extend", q), () => K(ye, null, o != null && o.default ? o.default() : []);
573
573
  }
574
- }), c = (m) => {
575
- const u = s(m);
574
+ }), c = (p) => {
575
+ const u = s(p);
576
576
  ot(K(u), a.value);
577
577
  }, i = A(() => n.disableRender);
578
- return pe(() => {
579
- const m = r, u = rt({
578
+ return me(() => {
579
+ const p = r, u = rt({
580
580
  scene: a.value,
581
- canvas: m,
581
+ canvas: p,
582
582
  windowSize: n.windowSize,
583
583
  disableRender: i,
584
584
  rendererOptions: n
@@ -609,7 +609,7 @@ const st = ["data-scene"], it = /* @__PURE__ */ U({
609
609
  ), g.value || (t(
610
610
  "No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."
611
611
  ), C());
612
- }), (m, u) => (ve(), de("canvas", {
612
+ }), (p, u) => (ve(), de("canvas", {
613
613
  ref_key: "canvas",
614
614
  ref: r,
615
615
  "data-scene": a.value.uuid,
@@ -617,7 +617,7 @@ const st = ["data-scene"], it = /* @__PURE__ */ U({
617
617
  display: "block",
618
618
  width: "100%",
619
619
  height: "100%",
620
- position: m.windowSize ? "fixed" : "relative",
620
+ position: p.windowSize ? "fixed" : "relative",
621
621
  top: 0,
622
622
  left: 0,
623
623
  pointerEvents: "auto",
@@ -645,7 +645,7 @@ export {
645
645
  $ as catalogue,
646
646
  _t as default,
647
647
  q as extend,
648
- pt as isProd,
648
+ mt as isProd,
649
649
  Ne as normalizeColor,
650
650
  vt as normalizeVectorFlexibleParam,
651
651
  Ct as templateCompilerOptions,
package/dist/tres.umd.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v3.2.1-next.1
3
+ * version: v3.2.1-next.3
4
4
  * (c) 2023
5
5
  * description: Declarative ThreeJS using Vue Components
6
6
  * author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
7
7
  */
8
- (function(v,c){typeof exports=="object"&&typeof module<"u"?c(exports,require("vue"),require("three"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","three","@vueuse/core"],c):(v=typeof globalThis<"u"?globalThis:v||self,c(v.tres={},v.Vue,v.Three,v.VueUseCore))})(this,function(v,c,_,y){"use strict";function se(e){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,r.get?r:{enumerable:!0,get:()=>e[t]})}}return n.default=e,Object.freeze(n)}const ie=se(_),I=({sizes:e,scene:n})=>{const t=c.ref([]),r=c.computed(()=>t.value[0]),a=(s,f=!1)=>{t.value.some(({uuid:i})=>i===s.uuid)||(f?m(s):t.value.push(s))},o=s=>{t.value=t.value.filter(({uuid:f})=>f!==s.uuid)},m=s=>{const f=s instanceof _.Camera?s:t.value.find(d=>d.uuid===s);if(!f)return;const i=t.value.filter(({uuid:d})=>d!==f.uuid);t.value=[f,...i]};return c.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(s=>{s instanceof _.PerspectiveCamera&&(s.aspect=e.aspectRatio.value),(s instanceof _.PerspectiveCamera||s instanceof _.OrthographicCamera)&&s.updateProjectionMatrix()})}),n.userData.tres__registerCamera=a,n.userData.tres__deregisterCamera=o,c.onUnmounted(()=>{t.value=[]}),{camera:r,cameras:t,registerCamera:a,deregisterCamera:o,setCameraActive:m}},W=y.createEventHook(),N=y.createEventHook(),F=y.createEventHook(),S=new _.Clock;let B=0,x=0;const{pause:le,resume:ue,isActive:ce}=y.useRafFn(()=>{W.trigger({delta:B,elapsed:x,clock:S}),N.trigger({delta:B,elapsed:x,clock:S}),F.trigger({delta:B,elapsed:x,clock:S})},{immediate:!1});F.on(()=>{B=S.getDelta(),x=S.getElapsedTime()});const G=()=>({onBeforeLoop:W.on,onLoop:N.on,onAfterLoop:F.on,pause:le,resume:ue,isActive:ce}),fe=!0,$="[TresJS ▲ ■ ●] ";function L(){function e(r,a){console.error(`${$} ${r}`,a||"")}function n(r){console.warn(`${$} ${r}`)}function t(r,a){}return{logError:e,logWarning:n,logMessage:t}}function me(e){return typeof e=="number"?[e,e,e]:e instanceof _.Vector3?[e.x,e.y,e.z]:e}function q(e){return e instanceof _.Color?e:Array.isArray(e)?new _.Color(...e):new _.Color(e)}const U=(e,n)=>{for(const t of Object.keys(n))n[t]instanceof Object&&Object.assign(n[t],U(e[t],n[t]));return Object.assign(e||{},n),e},de=pe("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot");function H(e){return e&&e.nodeType===1}function j(e){return e.replace(/-([a-z])/g,(n,t)=>t.toUpperCase())}function pe(e,n){const t=Object.create(null),r=e.split(",");for(let a=0;a<r.length;a++)t[r[a]]=!0;return n?a=>!!t[a.toLowerCase()]:a=>!!t[a]}const ge=(e,n)=>{const t=new Set,r=[];for(const a of e){const o=n(a);t.has(o)||(t.add(o),r.push(a))}return r},J=(e,n)=>{if(!n)return;const t=Array.isArray(n)?n:n.match(/([^[.\]])+/g);return t==null?void 0:t.reduce((r,a)=>r&&r[a],e)},ve=(e,n,t)=>{const r=Array.isArray(n)?n:n.match(/([^[.\]])+/g);r&&r.reduce((a,o,m)=>(a[o]===void 0&&(a[o]={}),m===r.length-1&&(a[o]=t),a[o]),e)};function K(e,n){if(H(e)&&H(n)){const a=e.attributes,o=n.attributes;return a.length!==o.length?!1:Array.from(a).every(({name:m,value:s})=>n.getAttribute(m)===s)}if(e===n)return!0;if(e===null||typeof e!="object"||n===null||typeof n!="object")return!1;const t=Object.keys(e),r=Object.keys(n);if(t.length!==r.length)return!1;for(const a of t)if(!r.includes(a)||!K(e[a],n[a]))return!1;return!0}function ye(e,n){if(!Array.isArray(e)||!Array.isArray(n)||e.length!==n.length)return!1;for(let t=0;t<e.length;t++)if(!K(e[t],n[t]))return!1;return!0}const we=Number.parseInt(_.REVISION.replace("dev","")),T={realistic:{outputColorSpace:_.SRGBColorSpace,toneMapping:_.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:_.PCFSoftShadowMap}}};function X({scene:e,canvas:n,options:t,disableRender:r,contextParts:{sizes:a,camera:o}}){const m=c.computed(()=>({alpha:y.toValue(t.alpha),depth:y.toValue(t.depth),canvas:y.unrefElement(n),context:y.toValue(t.context),stencil:y.toValue(t.stencil),antialias:y.toValue(t.antialias)===void 0?!0:y.toValue(t.antialias),precision:y.toValue(t.precision),powerPreference:y.toValue(t.powerPreference),premultipliedAlpha:y.toValue(t.premultipliedAlpha),preserveDrawingBuffer:y.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:y.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:y.toValue(t.failIfMajorPerformanceCaveat)})),s=c.shallowRef(new _.WebGLRenderer(m.value));c.watch(m,()=>{s.value.dispose(),s.value=new _.WebGLRenderer(m.value)}),c.watchEffect(()=>{s.value.setSize(a.width.value,a.height.value)});const{pixelRatio:f}=y.useDevicePixelRatio();c.watchEffect(()=>{s.value.setPixelRatio(f.value)});const{logError:i}=L(),l=(()=>{const g=new _.WebGLRenderer,b={shadowMap:{enabled:g.shadowMap.enabled,type:g.shadowMap.type},toneMapping:g.toneMapping,toneMappingExposure:g.toneMappingExposure,outputColorSpace:g.outputColorSpace};return g.dispose(),b})();c.watchEffect(()=>{const g=y.toValue(t.preset);g&&(g in T||i(`Renderer Preset must be one of these: ${Object.keys(T).join(", ")}`),U(s.value,T[g]));const b=(A,O)=>{const D=y.toValue(A),z=()=>{if(g)return J(T[g],O)};if(D!==void 0)return D;const w=z();return w!==void 0?w:J(l,O)},M=(A,O)=>ve(s.value,O,b(A,O));M(t.shadows,"shadowMap.enabled"),M(t.toneMapping,"toneMapping"),M(t.shadowMapType,"shadowMap.type"),we<150&&M(!t.useLegacyLights,"physicallyCorrectLights"),M(t.outputColorSpace,"outputColorSpace"),M(t.toneMappingExposure,"toneMappingExposure");const k=b(t.clearColor,"clearColor");k&&s.value.setClearColor(k?q(k):new _.Color(0))});const{pause:u,resume:C,onLoop:P}=G();return P(()=>{o.value&&!y.toValue(r)&&s.value.render(e,o.value)}),C(),c.onUnmounted(()=>{u(),s.value.dispose(),s.value.forceContextLoss()}),{renderer:s}}const Y=e=>typeof e=="function",Q=e=>!!e&&e.constructor===Array;function Z(e){const n={nodes:{},materials:{}};return e&&e.traverse(t=>{t.name&&(n.nodes[t.name]=t),t.material&&!n.materials[t.material.name]&&(n.materials[t.material.name]=t.material)}),n}async function Ce(e,n,t,r,a){const{logError:o}=L(),m=new e;a&&a(m),t&&t(m);const f=(Array.isArray(n)?n:[n]).map(i=>new Promise((d,l)=>{m.load(i,u=>{u.scene&&Object.assign(u,Z(u.scene)),d(u)},r,u=>l(o("[useLoader] - Failed to load resource",u)))}));return Q(n)?await Promise.all(f):await f[0]}async function Pe(e){const n=new _.LoadingManager,t=new _.TextureLoader(n),r=a=>new Promise((o,m)=>{t.load(a,s=>o(s),()=>null,()=>{m(new Error("[useTextures] - Failed to load texture"))})});if(Q(e)){const a=await Promise.all(e.map(o=>r(o)));return e.length>1?a:a[0]}else{const{map:a,displacementMap:o,normalMap:m,roughnessMap:s,metalnessMap:f,aoMap:i,alphaMap:d,matcap:l}=e;return{map:a?await r(a):null,displacementMap:o?await r(o):null,normalMap:m?await r(m):null,roughnessMap:s?await r(s):null,metalnessMap:f?await r(f):null,aoMap:i?await r(i):null,alphaMap:d?await r(d):null,matcap:l?await r(l):null}}}const ee=(e,{renderer:n,camera:t,raycaster:r})=>{const a=c.computed(()=>n.value.domElement),{x:o,y:m}=y.usePointer({target:a}),{width:s,height:f,top:i,left:d}=y.useElementBounding(a),l=({x:w,y:h})=>{if(a.value)return{x:(w-d.value)/s.value*2-1,y:-((h-i.value)/f.value)*2+1}},u=({x:w,y:h})=>{if(t.value)return r.value.setFromCamera(new _.Vector2(w,h),t.value),r.value.intersectObjects(e.value,!1)},C=w=>{const h=l({x:(w==null?void 0:w.clientX)??o.value,y:(w==null?void 0:w.clientY)??m.value});return h?u(h)||[]:[]},P=c.computed(()=>C()),g=y.createEventHook(),b=y.createEventHook(),M=(w,h)=>{w.trigger({event:h,intersects:C(h)})},k=w=>{M(b,w)};let A;const O=w=>{var h;A=(h=C(w)[0])==null?void 0:h.object},D=w=>{var h;w instanceof PointerEvent&&A===((h=C(w)[0])==null?void 0:h.object)&&M(g,w)},z=w=>b.trigger({event:w,intersects:[]});return a.value.addEventListener("pointerup",D),a.value.addEventListener("pointerdown",O),a.value.addEventListener("pointermove",k),a.value.addEventListener("pointerleave",z),c.onUnmounted(()=>{a!=null&&a.value&&(a.value.removeEventListener("pointerup",D),a.value.removeEventListener("pointerdown",O),a.value.removeEventListener("pointermove",k),a.value.removeEventListener("pointerleave",z))}),{intersects:P,onClick:w=>g.on(w).off,onPointerMove:w=>b.on(w).off}};function _e(){const{logWarning:e}=L();function n(r,a,o){let m=null;return r.traverse(s=>{s[a]===o&&(m=s)}),m||e(`Child with ${a} '${o}' not found.`),m}function t(r,a){return n(r,"name",a)}return{seek:n,seekByName:t}}const te=({scene:e,contextParts:n})=>{const t=c.reactive({click:new Map,pointerMove:new Map,pointerEnter:new Map,pointerLeave:new Map}),r=c.ref(new Set),a=u=>{r.value.add(u)},o=u=>{r.value.delete(u)},m=u=>{Object.values(t).forEach(C=>C.delete(u)),o(u)},s=u=>{const{onClick:C,onPointerMove:P,onPointerEnter:g,onPointerLeave:b}=u;C&&t.click.set(u,C),P&&t.pointerMove.set(u,P),g&&t.pointerEnter.set(u,g),b&&t.pointerLeave.set(u,b)};e.userData.tres__registerAtPointerEventHandler=s,e.userData.tres__deregisterAtPointerEventHandler=m,e.userData.tres__registerBlockingObjectAtPointerEventHandler=a,e.userData.tres__deregisterBlockingObjectAtPointerEventHandler=o;const f=c.computed(()=>ge([...Array.from(r.value),...Object.values(t).map(u=>Array.from(u.keys())).flat()],({uuid:u})=>u)),{onClick:i,onPointerMove:d}=ee(f,n);i(({intersects:u,event:C})=>{var P;u.length&&((P=t.click.get(u[0].object))==null||P(u[0],C))});let l;return d(({intersects:u,event:C})=>{var k,A,O,D;const P=(k=u==null?void 0:u[0])==null?void 0:k.object,{pointerLeave:g,pointerEnter:b,pointerMove:M}=t;l&&l!==P&&((A=g.get(l))==null||A(l,C)),P&&(l!==P&&((O=b.get(P))==null||O(u[0],C)),(D=M.get(P))==null||D(u[0],C)),l=P||null}),{registerObject:s,deregisterObject:m}},E=c.ref({}),V=e=>Object.assign(E.value,e);function re({scene:e,canvas:n,windowSize:t,disableRender:r,rendererOptions:a}){const o=c.computed(()=>y.toValue(t)?y.useWindowSize():y.useElementSize(y.toValue(n).parentElement)),m=c.computed(()=>o.value.width.value),s=c.computed(()=>o.value.height.value),f=c.computed(()=>m.value/s.value),i={height:s,width:m,aspectRatio:f},d=c.shallowRef(e),{camera:l,cameras:u,registerCamera:C,deregisterCamera:P,setCameraActive:g}=I({sizes:i,scene:e}),{renderer:b}=X({scene:e,canvas:n,options:a,contextParts:{sizes:i,camera:l},disableRender:r}),M={sizes:i,scene:d,camera:l,cameras:c.readonly(u),renderer:b,raycaster:c.shallowRef(new _.Raycaster),controls:c.ref(null),extend:V,registerCamera:C,setCameraActive:g,deregisterCamera:P};return c.provide("useTres",M),M}function ne(){const e=c.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const Me=ne;function Se(e){}let R=null,p=null;const{logError:ae}=L(),be={createElement(e,n,t,r){var m,s;if(r||(r={}),r.args||(r.args=[]),e==="template"||de(e))return null;let a=e.replace("Tres",""),o;if(e==="primitive"){(r==null?void 0:r.object)===void 0&&ae("Tres primitives need a prop 'object'");const f=r.object;a=f.type,o=Object.assign(f,{type:a,attach:r.attach,primitive:!0})}else{const f=E.value[a];f||ae(`${a} is not defined on the THREE namespace. Use extend to add it to the catalog.`),o=new f(...r.args)}return o.isCamera&&(r!=null&&r.position||o.position.set(3,3,3),r!=null&&r.lookAt||o.lookAt(0,0,0)),(r==null?void 0:r.attach)===void 0&&(o.isMaterial?o.attach="material":o.isBufferGeometry&&(o.attach="geometry")),o.isObject3D&&((m=r==null?void 0:r.material)!=null&&m.isMaterial&&(o.userData.tres__materialViaProp=!0),(s=r==null?void 0:r.geometry)!=null&&s.isBufferGeometry&&(o.userData.tres__geometryViaProp=!0)),o.userData={...o.userData,tres__name:a},o},insert(e,n){var t,r,a,o,m,s,f,i,d;if(n&&n.isScene&&(p=n),(((t=e==null?void 0:e.__vnode)==null?void 0:t.type)==="TresGroup"||((r=e==null?void 0:e.__vnode)==null?void 0:r.type)==="TresObject3D")&&n===null&&!((o=(a=e==null?void 0:e.__vnode)==null?void 0:a.ctx)!=null&&o.asyncResolved)){R=e;return}else(m=e==null?void 0:e.__vnode)!=null&&m.type.includes("Controls")&&n===null&&(R=p);if(n||(n=R),e!=null&&e.isObject3D){if(e!=null&&e.isCamera){if(!(p!=null&&p.userData.tres__registerCamera))throw"could not find tres__registerCamera on scene's userData";(f=p==null?void 0:(s=p.userData).tres__registerCamera)==null||f.call(s,e)}if(e!=null&&e.onClick||e!=null&&e.onPointerMove||e!=null&&e.onPointerEnter||e!=null&&e.onPointerLeave){if(!(p!=null&&p.userData.tres__registerAtPointerEventHandler))throw"could not find tres__registerAtPointerEventHandler on scene's userData";(d=p==null?void 0:(i=p.userData).tres__registerAtPointerEventHandler)==null||d.call(i,e)}}e!=null&&e.isObject3D&&(n!=null&&n.isObject3D)?(n.add(e),e.dispatchEvent({type:"added"})):e!=null&&e.isFog?n.fog=e:typeof(e==null?void 0:e.attach)=="string"&&(e.__previousAttach=e[n==null?void 0:n.attach],n&&(n[e.attach]=e))},remove(e){var n,t;if(e){if(e.isObject3D){const r=e,a=i=>{var l,u;const d=i;i.userData.tres__materialViaProp||(l=d.material)==null||l.dispose(),i.userData.tres__geometryViaProp||(u=d.geometry)==null||u.dispose()},o=p==null?void 0:p.userData.tres__deregisterAtPointerEventHandler,m=p==null?void 0:p.userData.tres__deregisterBlockingObjectAtPointerEventHandler,s=i=>{var d,l;if(!m)throw"could not find tres__deregisterBlockingObjectAtPointerEventHandler on scene's userData";if((l=p==null?void 0:(d=p.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||l.call(d,i),!o)throw"could not find tres__deregisterAtPointerEventHandler on scene's userData";(i!=null&&i.onClick||i!=null&&i.onPointerMove||i!=null&&i.onPointerEnter||i!=null&&i.onPointerLeave)&&(o==null||o(i))},f=i=>{const d=p==null?void 0:p.userData.tres__deregisterCamera;if(!d)throw"could not find tres__deregisterCamera on scene's userData";i.isCamera&&(d==null||d(i))};r.traverse(i=>{a(i),f(i),s==null||s(i)}),a(r),f(r),s==null||s(r)}(n=e.removeFromParent)==null||n.call(e),(t=e.dispose)==null||t.call(e)}},patchProp(e,n,t,r){var a,o,m,s;if(e){let f=e,i=n;if(e.isObject3D&&i==="blocks-pointer-events"){r||r===""?(o=p==null?void 0:(a=p.userData).tres__registerBlockingObjectAtPointerEventHandler)==null||o.call(a,e):(s=p==null?void 0:(m=p.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||s.call(m,e);return}let d=j(i),l=f==null?void 0:f[d];if(i==="args"){const C=e,P=t??[],g=r??[],b=e.userData.tres__name||e.type;b&&P.length&&!ye(P,g)&&(f=Object.assign(C,new E.value[b](...r)));return}if(f.type==="BufferGeometry"){if(i==="args")return;f.setAttribute(j(i),new _.BufferAttribute(...r));return}if(i.includes("-")&&l===void 0){const C=i.split("-");l=C.reduce((P,g)=>P[j(g)],f),i=C.pop(),d=i.toLowerCase(),l!=null&&l.set||(f=C.reduce((P,g)=>P[j(g)],f))}let u=r;if(u===""&&(u=!0),Y(l)){Array.isArray(u)?e[d](...u):e[d](u);return}!(l!=null&&l.set)&&!Y(l)?f[d]=u:l.constructor===u.constructor&&(l!=null&&l.copy)?l==null||l.copy(u):Array.isArray(u)?l.set(...u):!l.isColor&&l.setScalar?l.setScalar(u):l.set(u)}},parentNode(e){return(e==null?void 0:e.parent)||null},createText:()=>void 0,createComment:()=>void 0,setText:()=>void 0,setElementText:()=>void 0,nextSibling:()=>void 0,querySelector:()=>void 0,setScopeId:()=>void 0,cloneNode:()=>void 0,insertStaticContent:()=>void 0},{render:ke}=c.createRenderer(be);V(ie);const he=["data-scene"],oe=c.defineComponent({__name:"TresCanvas",props:{shadows:{type:Boolean,default:void 0},clearColor:{},toneMapping:{},shadowMapType:{},useLegacyLights:{type:Boolean,default:void 0},outputColorSpace:{},toneMappingExposure:{},camera:{},preset:{},windowSize:{type:Boolean,default:void 0},disableRender:{type:Boolean,default:void 0},context:{},precision:{},alpha:{type:Boolean,default:void 0},premultipliedAlpha:{type:Boolean},antialias:{type:Boolean,default:void 0},stencil:{type:Boolean,default:void 0},preserveDrawingBuffer:{type:Boolean,default:void 0},powerPreference:{},depth:{type:Boolean,default:void 0},logarithmicDepthBuffer:{type:Boolean,default:void 0},failIfMajorPerformanceCaveat:{type:Boolean,default:void 0}},setup(e){const n=e,{logWarning:t}=L(),r=c.ref(),a=c.shallowRef(new _.Scene);G();const o=c.useSlots(),m=c.getCurrentInstance(),s=d=>c.defineComponent({setup(){const l=c.getCurrentInstance();return Object.assign(l.appContext,m.appContext),Object.assign(l.provides,l.appContext.provides),c.provide("useTres",d),c.provide("extend",V),()=>c.h(c.Fragment,null,o!=null&&o.default?o.default():[])}}),f=d=>{const l=s(d);ke(c.h(l),a.value)},i=c.computed(()=>n.disableRender);return c.onMounted(()=>{const d=r,l=re({scene:a.value,canvas:d,windowSize:n.windowSize,disableRender:i,rendererOptions:n});te({scene:a.value,contextParts:l});const{registerCamera:u,camera:C,cameras:P,deregisterCamera:g}=l;f(l);const b=()=>{const M=new _.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);M.position.set(3,3,3),M.lookAt(0,0,0),u(M);const k=c.watchEffect(()=>{P.value.length>=2&&(M.removeFromParent(),g(M),k==null||k())})};c.watch(()=>n.camera,(M,k)=>{M?u(M):k&&(k.removeFromParent(),g(k))},{immediate:!0}),C.value||(t("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),b())}),(d,l)=>(c.openBlock(),c.createElementBlock("canvas",{ref_key:"canvas",ref:r,"data-scene":a.value.uuid,style:c.normalizeStyle({display:"block",width:"100%",height:"100%",position:d.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none"})},null,12,he))}}),Oe=["TresCanvas","TresLeches","TresScene"],Ae={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!Oe.includes(e)||e==="primitive"}}},De={install(e){e.component("TresCanvas",oe)}};v.TresCanvas=oe,v.catalogue=E,v.default=De,v.extend=V,v.isProd=fe,v.normalizeColor=q,v.normalizeVectorFlexibleParam=me,v.templateCompilerOptions=Ae,v.trasverseObjects=Z,v.useCamera=I,v.useLoader=Ce,v.useLogger=L,v.usePointerEventHandler=te,v.useRaycaster=ee,v.useRenderLoop=G,v.useRenderer=X,v.useSeek=_e,v.useTexture=Pe,v.useTres=Me,v.useTresContext=ne,v.useTresContextProvider=re,Object.defineProperties(v,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
8
+ (function(v,c){typeof exports=="object"&&typeof module<"u"?c(exports,require("vue"),require("three"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","three","@vueuse/core"],c):(v=typeof globalThis<"u"?globalThis:v||self,c(v.tres={},v.Vue,v.Three,v.VueUseCore))})(this,function(v,c,_,y){"use strict";function se(e){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,r.get?r:{enumerable:!0,get:()=>e[t]})}}return n.default=e,Object.freeze(n)}const ie=se(_),I=({sizes:e,scene:n})=>{const t=c.ref([]),r=c.computed(()=>t.value[0]),a=(s,f=!1)=>{t.value.some(({uuid:i})=>i===s.uuid)||(f?m(s):t.value.push(s))},o=s=>{t.value=t.value.filter(({uuid:f})=>f!==s.uuid)},m=s=>{const f=s instanceof _.Camera?s:t.value.find(d=>d.uuid===s);if(!f)return;const i=t.value.filter(({uuid:d})=>d!==f.uuid);t.value=[f,...i]};return c.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(s=>{s instanceof _.PerspectiveCamera&&(s.aspect=e.aspectRatio.value),(s instanceof _.PerspectiveCamera||s instanceof _.OrthographicCamera)&&s.updateProjectionMatrix()})}),n.userData.tres__registerCamera=a,n.userData.tres__deregisterCamera=o,c.onUnmounted(()=>{t.value=[]}),{camera:r,cameras:t,registerCamera:a,deregisterCamera:o,setCameraActive:m}},W=y.createEventHook(),N=y.createEventHook(),F=y.createEventHook(),S=new _.Clock;let B=0,x=0;const{pause:le,resume:ue,isActive:ce}=y.useRafFn(()=>{W.trigger({delta:B,elapsed:x,clock:S}),N.trigger({delta:B,elapsed:x,clock:S}),F.trigger({delta:B,elapsed:x,clock:S})},{immediate:!1});F.on(()=>{B=S.getDelta(),x=S.getElapsedTime()});const G=()=>({onBeforeLoop:W.on,onLoop:N.on,onAfterLoop:F.on,pause:le,resume:ue,isActive:ce}),fe=!0,$="[TresJS ▲ ■ ●] ";function L(){function e(r,a){console.error(`${$} ${r}`,a||"")}function n(r){console.warn(`${$} ${r}`)}function t(r,a){}return{logError:e,logWarning:n,logMessage:t}}function me(e){return typeof e=="number"?[e,e,e]:e instanceof _.Vector3?[e.x,e.y,e.z]:e}function q(e){return e instanceof _.Color?e:Array.isArray(e)?new _.Color(...e):new _.Color(e)}const U=(e,n)=>{for(const t of Object.keys(n))n[t]instanceof Object&&Object.assign(n[t],U(e[t],n[t]));return Object.assign(e||{},n),e},de=pe("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot");function H(e){return e&&e.nodeType===1}function j(e){return e.replace(/-([a-z])/g,(n,t)=>t.toUpperCase())}function pe(e,n){const t=Object.create(null),r=e.split(",");for(let a=0;a<r.length;a++)t[r[a]]=!0;return n?a=>!!t[a.toLowerCase()]:a=>!!t[a]}const ge=(e,n)=>{const t=new Set,r=[];for(const a of e){const o=n(a);t.has(o)||(t.add(o),r.push(a))}return r},J=(e,n)=>{if(!n)return;const t=Array.isArray(n)?n:n.match(/([^[.\]])+/g);return t==null?void 0:t.reduce((r,a)=>r&&r[a],e)},ve=(e,n,t)=>{const r=Array.isArray(n)?n:n.match(/([^[.\]])+/g);r&&r.reduce((a,o,m)=>(a[o]===void 0&&(a[o]={}),m===r.length-1&&(a[o]=t),a[o]),e)};function K(e,n){if(H(e)&&H(n)){const a=e.attributes,o=n.attributes;return a.length!==o.length?!1:Array.from(a).every(({name:m,value:s})=>n.getAttribute(m)===s)}if(e===n)return!0;if(e===null||typeof e!="object"||n===null||typeof n!="object")return!1;const t=Object.keys(e),r=Object.keys(n);if(t.length!==r.length)return!1;for(const a of t)if(!r.includes(a)||!K(e[a],n[a]))return!1;return!0}function ye(e,n){if(!Array.isArray(e)||!Array.isArray(n)||e.length!==n.length)return!1;for(let t=0;t<e.length;t++)if(!K(e[t],n[t]))return!1;return!0}const we=Number.parseInt(_.REVISION.replace("dev","")),T={realistic:{outputColorSpace:_.SRGBColorSpace,toneMapping:_.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:_.PCFSoftShadowMap}}};function X({scene:e,canvas:n,options:t,disableRender:r,contextParts:{sizes:a,camera:o}}){const m=c.computed(()=>({alpha:y.toValue(t.alpha),depth:y.toValue(t.depth),canvas:y.unrefElement(n),context:y.toValue(t.context),stencil:y.toValue(t.stencil),antialias:y.toValue(t.antialias)===void 0?!0:y.toValue(t.antialias),precision:y.toValue(t.precision),powerPreference:y.toValue(t.powerPreference),premultipliedAlpha:y.toValue(t.premultipliedAlpha),preserveDrawingBuffer:y.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:y.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:y.toValue(t.failIfMajorPerformanceCaveat)})),s=c.shallowRef(new _.WebGLRenderer(m.value));c.watch(m,()=>{s.value.dispose(),s.value=new _.WebGLRenderer(m.value)}),c.watchEffect(()=>{s.value.setSize(a.width.value,a.height.value)});const{pixelRatio:f}=y.useDevicePixelRatio();c.watchEffect(()=>{s.value.setPixelRatio(f.value)});const{logError:i}=L(),l=(()=>{const g=new _.WebGLRenderer,b={shadowMap:{enabled:g.shadowMap.enabled,type:g.shadowMap.type},toneMapping:g.toneMapping,toneMappingExposure:g.toneMappingExposure,outputColorSpace:g.outputColorSpace};return g.dispose(),b})();c.watchEffect(()=>{const g=y.toValue(t.preset);g&&(g in T||i(`Renderer Preset must be one of these: ${Object.keys(T).join(", ")}`),U(s.value,T[g]));const b=(O,A)=>{const D=y.toValue(O),z=()=>{if(g)return J(T[g],A)};if(D!==void 0)return D;const w=z();return w!==void 0?w:J(l,A)},M=(O,A)=>ve(s.value,A,b(O,A));M(t.shadows,"shadowMap.enabled"),M(t.toneMapping,"toneMapping"),M(t.shadowMapType,"shadowMap.type"),we<150&&M(!t.useLegacyLights,"physicallyCorrectLights"),M(t.outputColorSpace,"outputColorSpace"),M(t.toneMappingExposure,"toneMappingExposure");const k=b(t.clearColor,"clearColor");k&&s.value.setClearColor(k?q(k):new _.Color(0))});const{pause:u,resume:C,onLoop:P}=G();return P(()=>{o.value&&!y.toValue(r)&&s.value.render(e,o.value)}),C(),c.onUnmounted(()=>{u(),s.value.dispose(),s.value.forceContextLoss()}),{renderer:s}}const Y=e=>typeof e=="function",Q=e=>!!e&&e.constructor===Array;function Z(e){const n={nodes:{},materials:{}};return e&&e.traverse(t=>{t.name&&(n.nodes[t.name]=t),t.material&&!n.materials[t.material.name]&&(n.materials[t.material.name]=t.material)}),n}async function Ce(e,n,t,r,a){const{logError:o}=L(),m=new e;a&&a(m),t&&t(m);const f=(Array.isArray(n)?n:[n]).map(i=>new Promise((d,l)=>{m.load(i,u=>{u.scene&&Object.assign(u,Z(u.scene)),d(u)},r,u=>l(o("[useLoader] - Failed to load resource",u)))}));return Q(n)?await Promise.all(f):await f[0]}async function Pe(e){const n=new _.LoadingManager,t=new _.TextureLoader(n),r=a=>new Promise((o,m)=>{t.load(a,s=>o(s),()=>null,()=>{m(new Error("[useTextures] - Failed to load texture"))})});if(Q(e)){const a=await Promise.all(e.map(o=>r(o)));return e.length>1?a:a[0]}else{const{map:a,displacementMap:o,normalMap:m,roughnessMap:s,metalnessMap:f,aoMap:i,alphaMap:d,matcap:l}=e;return{map:a?await r(a):null,displacementMap:o?await r(o):null,normalMap:m?await r(m):null,roughnessMap:s?await r(s):null,metalnessMap:f?await r(f):null,aoMap:i?await r(i):null,alphaMap:d?await r(d):null,matcap:l?await r(l):null}}}const ee=(e,{renderer:n,camera:t,raycaster:r})=>{const a=c.computed(()=>n.value.domElement),{x:o,y:m}=y.usePointer({target:a}),{width:s,height:f,top:i,left:d}=y.useElementBounding(a),l=({x:w,y:h})=>{if(a.value)return{x:(w-d.value)/s.value*2-1,y:-((h-i.value)/f.value)*2+1}},u=({x:w,y:h})=>{if(t.value)return r.value.setFromCamera(new _.Vector2(w,h),t.value),r.value.intersectObjects(e.value,!1)},C=w=>{const h=l({x:(w==null?void 0:w.clientX)??o.value,y:(w==null?void 0:w.clientY)??m.value});return h?u(h)||[]:[]},P=c.computed(()=>C()),g=y.createEventHook(),b=y.createEventHook(),M=(w,h)=>{w.trigger({event:h,intersects:C(h)})},k=w=>{M(b,w)};let O;const A=w=>{var h;O=(h=C(w)[0])==null?void 0:h.object},D=w=>{var h;w instanceof PointerEvent&&O===((h=C(w)[0])==null?void 0:h.object)&&M(g,w)},z=w=>b.trigger({event:w,intersects:[]});return a.value.addEventListener("pointerup",D),a.value.addEventListener("pointerdown",A),a.value.addEventListener("pointermove",k),a.value.addEventListener("pointerleave",z),c.onUnmounted(()=>{a!=null&&a.value&&(a.value.removeEventListener("pointerup",D),a.value.removeEventListener("pointerdown",A),a.value.removeEventListener("pointermove",k),a.value.removeEventListener("pointerleave",z))}),{intersects:P,onClick:w=>g.on(w).off,onPointerMove:w=>b.on(w).off}};function _e(){const{logWarning:e}=L();function n(r,a,o){let m=null;return r.traverse(s=>{s[a]===o&&(m=s)}),m||e(`Child with ${a} '${o}' not found.`),m}function t(r,a){return n(r,"name",a)}return{seek:n,seekByName:t}}const te=({scene:e,contextParts:n})=>{const t=c.reactive({click:new Map,pointerMove:new Map,pointerEnter:new Map,pointerLeave:new Map}),r=c.ref(new Set),a=u=>{r.value.add(u)},o=u=>{r.value.delete(u)},m=u=>{Object.values(t).forEach(C=>C.delete(u)),o(u)},s=u=>{const{onClick:C,onPointerMove:P,onPointerEnter:g,onPointerLeave:b}=u;C&&t.click.set(u,C),P&&t.pointerMove.set(u,P),g&&t.pointerEnter.set(u,g),b&&t.pointerLeave.set(u,b)};e.userData.tres__registerAtPointerEventHandler=s,e.userData.tres__deregisterAtPointerEventHandler=m,e.userData.tres__registerBlockingObjectAtPointerEventHandler=a,e.userData.tres__deregisterBlockingObjectAtPointerEventHandler=o;const f=c.computed(()=>ge([...Array.from(r.value),...Object.values(t).map(u=>Array.from(u.keys())).flat()],({uuid:u})=>u)),{onClick:i,onPointerMove:d}=ee(f,n);i(({intersects:u,event:C})=>{var P;u.length&&((P=t.click.get(u[0].object))==null||P(u[0],C))});let l;return d(({intersects:u,event:C})=>{var k,O,A,D;const P=(k=u==null?void 0:u[0])==null?void 0:k.object,{pointerLeave:g,pointerEnter:b,pointerMove:M}=t;l&&l!==P&&((O=g.get(l))==null||O(l,C)),P&&(l!==P&&((A=b.get(P))==null||A(u[0],C)),(D=M.get(P))==null||D(u[0],C)),l=P||null}),{registerObject:s,deregisterObject:m}},E=c.ref({}),V=e=>Object.assign(E.value,e);function re({scene:e,canvas:n,windowSize:t,disableRender:r,rendererOptions:a}){const o=c.computed(()=>y.toValue(t)?y.useWindowSize():y.useElementSize(y.toValue(n).parentElement)),m=c.computed(()=>o.value.width.value),s=c.computed(()=>o.value.height.value),f=c.computed(()=>m.value/s.value),i={height:s,width:m,aspectRatio:f},d=c.shallowRef(e),{camera:l,cameras:u,registerCamera:C,deregisterCamera:P,setCameraActive:g}=I({sizes:i,scene:e}),{renderer:b}=X({scene:e,canvas:n,options:a,contextParts:{sizes:i,camera:l},disableRender:r}),M={sizes:i,scene:d,camera:l,cameras:c.readonly(u),renderer:b,raycaster:c.shallowRef(new _.Raycaster),controls:c.ref(null),extend:V,registerCamera:C,setCameraActive:g,deregisterCamera:P};return c.provide("useTres",M),M}function ne(){const e=c.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const Me=ne;function Se(e){}let R=null,p=null;const{logError:ae}=L(),be={createElement(e,n,t,r){var m,s;if(r||(r={}),r.args||(r.args=[]),e==="template"||de(e))return null;let a=e.replace("Tres",""),o;if(e==="primitive"){(r==null?void 0:r.object)===void 0&&ae("Tres primitives need a prop 'object'");const f=r.object;a=f.type,o=Object.assign(f,{type:a,attach:r.attach,primitive:!0})}else{const f=E.value[a];f||ae(`${a} is not defined on the THREE namespace. Use extend to add it to the catalog.`),o=new f(...r.args)}return o.isCamera&&(r!=null&&r.position||o.position.set(3,3,3),r!=null&&r.lookAt||o.lookAt(0,0,0)),(r==null?void 0:r.attach)===void 0&&(o.isMaterial?o.attach="material":o.isBufferGeometry&&(o.attach="geometry")),o.isObject3D&&((m=r==null?void 0:r.material)!=null&&m.isMaterial&&(o.userData.tres__materialViaProp=!0),(s=r==null?void 0:r.geometry)!=null&&s.isBufferGeometry&&(o.userData.tres__geometryViaProp=!0)),o.userData={...o.userData,tres__name:a},o},insert(e,n){var t,r,a,o,m,s,f,i,d;if(n&&n.isScene&&(p=n),(((t=e==null?void 0:e.__vnode)==null?void 0:t.type)==="TresGroup"||((r=e==null?void 0:e.__vnode)==null?void 0:r.type)==="TresObject3D")&&n===null&&!((o=(a=e==null?void 0:e.__vnode)==null?void 0:a.ctx)!=null&&o.asyncResolved)){R=e;return}else(m=e==null?void 0:e.__vnode)!=null&&m.type.includes("Controls")&&n===null&&(R=p);if(n||(n=R),e!=null&&e.isObject3D){if(e!=null&&e.isCamera){if(!(p!=null&&p.userData.tres__registerCamera))throw"could not find tres__registerCamera on scene's userData";(f=p==null?void 0:(s=p.userData).tres__registerCamera)==null||f.call(s,e)}if(e!=null&&e.onClick||e!=null&&e.onPointerMove||e!=null&&e.onPointerEnter||e!=null&&e.onPointerLeave){if(!(p!=null&&p.userData.tres__registerAtPointerEventHandler))throw"could not find tres__registerAtPointerEventHandler on scene's userData";(d=p==null?void 0:(i=p.userData).tres__registerAtPointerEventHandler)==null||d.call(i,e)}}e!=null&&e.isObject3D&&(n!=null&&n.isObject3D)?(n.add(e),e.dispatchEvent({type:"added"})):e!=null&&e.isFog?n.fog=e:typeof(e==null?void 0:e.attach)=="string"&&(e.__previousAttach=e[n==null?void 0:n.attach],n&&(n[e.attach]=e))},remove(e){var n,t;if(e){if(e.isObject3D){const r=e,a=i=>{var l,u;const d=i;i.userData.tres__materialViaProp||(l=d.material)==null||l.dispose(),i.userData.tres__geometryViaProp||(u=d.geometry)==null||u.dispose()},o=p==null?void 0:p.userData.tres__deregisterAtPointerEventHandler,m=p==null?void 0:p.userData.tres__deregisterBlockingObjectAtPointerEventHandler,s=i=>{var d,l;if(!m)throw"could not find tres__deregisterBlockingObjectAtPointerEventHandler on scene's userData";if((l=p==null?void 0:(d=p.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||l.call(d,i),!o)throw"could not find tres__deregisterAtPointerEventHandler on scene's userData";(i!=null&&i.onClick||i!=null&&i.onPointerMove||i!=null&&i.onPointerEnter||i!=null&&i.onPointerLeave)&&(o==null||o(i))},f=i=>{const d=p==null?void 0:p.userData.tres__deregisterCamera;if(!d)throw"could not find tres__deregisterCamera on scene's userData";i.isCamera&&(d==null||d(i))};r.traverse(i=>{a(i),f(i),s==null||s(i)}),a(r),f(r),s==null||s(r)}(n=e.removeFromParent)==null||n.call(e),(t=e.dispose)==null||t.call(e)}},patchProp(e,n,t,r){var a,o,m,s;if(e){let f=e,i=n;if(e.isObject3D&&i==="blocks-pointer-events"){r||r===""?(o=p==null?void 0:(a=p.userData).tres__registerBlockingObjectAtPointerEventHandler)==null||o.call(a,e):(s=p==null?void 0:(m=p.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||s.call(m,e);return}let d=j(i),l=f==null?void 0:f[d];if(i==="args"){const C=e,P=t??[],g=r??[],b=e.userData.tres__name||e.type;b&&P.length&&!ye(P,g)&&(f=Object.assign(C,new E.value[b](...r)));return}if(f.type==="BufferGeometry"){if(i==="args")return;f.setAttribute(j(i),new _.BufferAttribute(...r));return}if(i.includes("-")&&l===void 0){const C=i.split("-");l=C.reduce((P,g)=>P[j(g)],f),i=C.pop(),d=i.toLowerCase(),l!=null&&l.set||(f=C.reduce((P,g)=>P[j(g)],f))}let u=r;if(u===""&&(u=!0),Y(l)){Array.isArray(u)?e[d](...u):e[d](u);return}!(l!=null&&l.set)&&!Y(l)?f[d]=u:l.constructor===u.constructor&&(l!=null&&l.copy)?l==null||l.copy(u):Array.isArray(u)?l.set(...u):!l.isColor&&l.setScalar?l.setScalar(u):l.set(u)}},parentNode(e){return(e==null?void 0:e.parent)||null},createText:()=>void 0,createComment:()=>void 0,setText:()=>void 0,setElementText:()=>void 0,nextSibling:()=>void 0,querySelector:()=>void 0,setScopeId:()=>void 0,cloneNode:()=>void 0,insertStaticContent:()=>void 0},{render:ke}=c.createRenderer(be);V(ie);const he=["data-scene"],oe=c.defineComponent({__name:"TresCanvas",props:{shadows:{type:Boolean,default:void 0},clearColor:{},toneMapping:{},shadowMapType:{},useLegacyLights:{type:Boolean,default:void 0},outputColorSpace:{},toneMappingExposure:{},camera:{},preset:{},windowSize:{type:Boolean,default:void 0},disableRender:{type:Boolean,default:void 0},context:{},precision:{},alpha:{type:Boolean,default:void 0},premultipliedAlpha:{type:Boolean},antialias:{type:Boolean,default:void 0},stencil:{type:Boolean,default:void 0},preserveDrawingBuffer:{type:Boolean,default:void 0},powerPreference:{},depth:{type:Boolean,default:void 0},logarithmicDepthBuffer:{type:Boolean,default:void 0},failIfMajorPerformanceCaveat:{type:Boolean,default:void 0}},setup(e){const n=e,{logWarning:t}=L(),r=c.ref(),a=c.shallowRef(new _.Scene);G();const o=c.useSlots(),m=c.getCurrentInstance(),s=d=>c.defineComponent({setup(){const l=c.getCurrentInstance();return l.appContext.app=m.appContext.app,Object.assign(l.provides,l.appContext.provides),c.provide("useTres",d),c.provide("extend",V),()=>c.h(c.Fragment,null,o!=null&&o.default?o.default():[])}}),f=d=>{const l=s(d);ke(c.h(l),a.value)},i=c.computed(()=>n.disableRender);return c.onMounted(()=>{const d=r,l=re({scene:a.value,canvas:d,windowSize:n.windowSize,disableRender:i,rendererOptions:n});te({scene:a.value,contextParts:l});const{registerCamera:u,camera:C,cameras:P,deregisterCamera:g}=l;f(l);const b=()=>{const M=new _.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);M.position.set(3,3,3),M.lookAt(0,0,0),u(M);const k=c.watchEffect(()=>{P.value.length>=2&&(M.removeFromParent(),g(M),k==null||k())})};c.watch(()=>n.camera,(M,k)=>{M?u(M):k&&(k.removeFromParent(),g(k))},{immediate:!0}),C.value||(t("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),b())}),(d,l)=>(c.openBlock(),c.createElementBlock("canvas",{ref_key:"canvas",ref:r,"data-scene":a.value.uuid,style:c.normalizeStyle({display:"block",width:"100%",height:"100%",position:d.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none"})},null,12,he))}}),Ae=["TresCanvas","TresLeches","TresScene"],Oe={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!Ae.includes(e)||e==="primitive"}}},De={install(e){e.component("TresCanvas",oe)}};v.TresCanvas=oe,v.catalogue=E,v.default=De,v.extend=V,v.isProd=fe,v.normalizeColor=q,v.normalizeVectorFlexibleParam=me,v.templateCompilerOptions=Oe,v.trasverseObjects=Z,v.useCamera=I,v.useLoader=Ce,v.useLogger=L,v.usePointerEventHandler=te,v.useRaycaster=ee,v.useRenderLoop=G,v.useRenderer=X,v.useSeek=_e,v.useTexture=Pe,v.useTres=Me,v.useTresContext=ne,v.useTresContextProvider=re,Object.defineProperties(v,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tresjs/core",
3
3
  "type": "module",
4
- "version": "3.2.1-next.1",
4
+ "version": "3.2.1-next.3",
5
5
  "packageManager": "pnpm@8.3.1",
6
6
  "description": "Declarative ThreeJS using Vue Components",
7
7
  "author": "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",