@tresjs/core 3.0.0 → 3.0.1
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.
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Camera, Raycaster, Scene, WebGLRenderer } from 'three';
|
|
1
|
+
import { Camera, EventDispatcher, Raycaster, Scene, WebGLRenderer } from 'three';
|
|
2
2
|
import { UseRendererOptions } from '../useRenderer';
|
|
3
3
|
import type { ComputedRef, DeepReadonly, MaybeRef, MaybeRefOrGetter, Ref, ShallowRef } from 'vue';
|
|
4
4
|
export type TresContext = {
|
|
@@ -7,6 +7,10 @@ export type TresContext = {
|
|
|
7
7
|
cameras: DeepReadonly<Ref<Camera[]>>;
|
|
8
8
|
renderer: ShallowRef<WebGLRenderer>;
|
|
9
9
|
raycaster: ShallowRef<Raycaster>;
|
|
10
|
+
controls: Ref<(EventDispatcher & {
|
|
11
|
+
enabled: boolean;
|
|
12
|
+
}) | null>;
|
|
13
|
+
extend: (objects: any) => void;
|
|
10
14
|
addCamera: (camera: Camera) => void;
|
|
11
15
|
removeCamera: (camera: Camera) => void;
|
|
12
16
|
setCameraActive: (cameraOrUuid: Camera | string) => void;
|
package/dist/tres.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* name: @tresjs/core
|
|
3
|
-
* version: v3.0.
|
|
3
|
+
* version: v3.0.1
|
|
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
|
|
8
|
+
import { ref as H, computed as _, watchEffect as b, onUnmounted as j, shallowRef as z, watch as K, reactive as re, readonly as ne, provide as ae, inject as oe, createRenderer as se, defineComponent as ie, useSlots as ue, onMounted as le, openBlock as ce, createElementBlock as fe, normalizeStyle as me } from "vue";
|
|
9
9
|
import * as pe from "three";
|
|
10
|
-
import { PerspectiveCamera as
|
|
10
|
+
import { PerspectiveCamera as W, OrthographicCamera as ve, Camera as de, Clock as ge, SRGBColorSpace as we, ACESFilmicToneMapping as ye, PCFSoftShadowMap as Ce, Vector3 as Pe, Color as O, WebGLRenderer as V, LoadingManager as Me, TextureLoader as _e, Vector2 as Ee, Raycaster as xe, BufferAttribute as Le, Scene as Te } from "three";
|
|
11
11
|
import { createEventHook as A, useRafFn as be, toValue as y, unrefElement as De, useDevicePixelRatio as Ae, usePointer as ke, useElementBounding as Se, useWindowSize as he, useElementSize as Be } from "@vueuse/core";
|
|
12
|
-
const
|
|
13
|
-
const t =
|
|
12
|
+
const X = H({}), $ = (e) => void Object.assign(X.value, e), N = (e) => typeof e == "function", Y = (e) => !!e && e.constructor === Array, Oe = ({ sizes: e, scene: a }) => {
|
|
13
|
+
const t = H([]), n = _(
|
|
14
14
|
() => t.value[0]
|
|
15
15
|
), r = (o, s = !1) => {
|
|
16
16
|
t.value.some(({ uuid: u }) => u === o.uuid) || (s ? l(o) : t.value.push(o));
|
|
@@ -25,7 +25,7 @@ const K = W({}), X = (e) => void Object.assign(K.value, e), I = (e) => typeof e
|
|
|
25
25
|
};
|
|
26
26
|
return b(() => {
|
|
27
27
|
e.aspectRatio.value && t.value.forEach((o) => {
|
|
28
|
-
o instanceof
|
|
28
|
+
o instanceof W && (o.aspect = e.aspectRatio.value), (o instanceof W || o instanceof ve) && o.updateProjectionMatrix();
|
|
29
29
|
});
|
|
30
30
|
}), a.userData.tres__registerCamera = r, a.userData.tres__deregisterCamera = i, j(() => {
|
|
31
31
|
t.value = [];
|
|
@@ -36,21 +36,21 @@ const K = W({}), X = (e) => void Object.assign(K.value, e), I = (e) => typeof e
|
|
|
36
36
|
removeCamera: i,
|
|
37
37
|
setCameraActive: l
|
|
38
38
|
};
|
|
39
|
-
}, Q = A(), Z = A(),
|
|
39
|
+
}, Q = A(), Z = A(), I = A(), D = new ge();
|
|
40
40
|
let R = 0, F = 0;
|
|
41
41
|
const { pause: Re, resume: Fe, isActive: ze } = be(
|
|
42
42
|
() => {
|
|
43
|
-
Q.trigger({ delta: R, elapsed: F, clock: D }), Z.trigger({ delta: R, elapsed: F, clock: D }),
|
|
43
|
+
Q.trigger({ delta: R, elapsed: F, clock: D }), Z.trigger({ delta: R, elapsed: F, clock: D }), I.trigger({ delta: R, elapsed: F, clock: D });
|
|
44
44
|
},
|
|
45
45
|
{ immediate: !1 }
|
|
46
46
|
);
|
|
47
|
-
|
|
47
|
+
I.on(() => {
|
|
48
48
|
R = D.getDelta(), F = D.getElapsedTime();
|
|
49
49
|
});
|
|
50
50
|
const ee = () => ({
|
|
51
51
|
onBeforeLoop: Q.on,
|
|
52
52
|
onLoop: Z.on,
|
|
53
|
-
onAfterLoop:
|
|
53
|
+
onAfterLoop: I.on,
|
|
54
54
|
pause: Re,
|
|
55
55
|
resume: Fe,
|
|
56
56
|
isActive: ze
|
|
@@ -85,7 +85,7 @@ const We = (e, a) => {
|
|
|
85
85
|
t.has(i) || (t.add(i), n.push(r));
|
|
86
86
|
}
|
|
87
87
|
return n;
|
|
88
|
-
},
|
|
88
|
+
}, q = (e, a) => {
|
|
89
89
|
if (!a)
|
|
90
90
|
return;
|
|
91
91
|
const t = Array.isArray(a) ? a : a.match(/([^[.\]])+/g);
|
|
@@ -93,13 +93,13 @@ const We = (e, a) => {
|
|
|
93
93
|
}, je = (e, a, t) => {
|
|
94
94
|
const n = Array.isArray(a) ? a : a.match(/([^[.\]])+/g);
|
|
95
95
|
n && n.reduce((r, i, l) => (r[i] === void 0 && (r[i] = {}), l === n.length - 1 && (r[i] = t), r[i]), e);
|
|
96
|
-
}, st = !0,
|
|
96
|
+
}, st = !0, U = "[TresJS ▲ ■ ●] ";
|
|
97
97
|
function k() {
|
|
98
98
|
function e(n, r) {
|
|
99
|
-
console.error(`${
|
|
99
|
+
console.error(`${U} ${n}`, r || "");
|
|
100
100
|
}
|
|
101
101
|
function a(n) {
|
|
102
|
-
console.warn(`${
|
|
102
|
+
console.warn(`${U} ${n}`);
|
|
103
103
|
}
|
|
104
104
|
function t(n, r) {
|
|
105
105
|
}
|
|
@@ -138,9 +138,9 @@ function Ie({
|
|
|
138
138
|
preserveDrawingBuffer: y(t.preserveDrawingBuffer),
|
|
139
139
|
logarithmicDepthBuffer: y(t.logarithmicDepthBuffer),
|
|
140
140
|
failIfMajorPerformanceCaveat: y(t.failIfMajorPerformanceCaveat)
|
|
141
|
-
})), o = z(new
|
|
142
|
-
|
|
143
|
-
o.value.dispose(), o.value = new
|
|
141
|
+
})), o = z(new V(l.value));
|
|
142
|
+
K(l, () => {
|
|
143
|
+
o.value.dispose(), o.value = new V(l.value);
|
|
144
144
|
}), b(() => {
|
|
145
145
|
o.value.setSize(r.width.value, r.height.value);
|
|
146
146
|
});
|
|
@@ -149,7 +149,7 @@ function Ie({
|
|
|
149
149
|
o.value.setPixelRatio(s.value);
|
|
150
150
|
});
|
|
151
151
|
const { logError: u } = k(), f = (() => {
|
|
152
|
-
const p = new
|
|
152
|
+
const p = new V(), d = {
|
|
153
153
|
shadowMap: {
|
|
154
154
|
enabled: p.shadowMap.enabled,
|
|
155
155
|
type: p.shadowMap.type
|
|
@@ -167,12 +167,12 @@ function Ie({
|
|
|
167
167
|
const d = (L, x) => {
|
|
168
168
|
const T = y(L), S = () => {
|
|
169
169
|
if (p)
|
|
170
|
-
return
|
|
170
|
+
return q(h[p], x);
|
|
171
171
|
};
|
|
172
172
|
if (T !== void 0)
|
|
173
173
|
return T;
|
|
174
174
|
const m = S();
|
|
175
|
-
return m !== void 0 ? m :
|
|
175
|
+
return m !== void 0 ? m : q(f, x);
|
|
176
176
|
}, v = (L, x) => je(o.value, x, d(L, x));
|
|
177
177
|
v(t.shadows, "shadowMap.enabled"), v(t.toneMapping, "toneMapping"), v(t.shadowMapType, "shadowMap.type"), v(t.useLegacyLights, "useLegacyLights"), v(t.outputColorSpace, "outputColorSpace"), v(t.toneMappingExposure, "toneMappingExposure");
|
|
178
178
|
const E = d(t.clearColor, "clearColor");
|
|
@@ -370,6 +370,8 @@ function Je({
|
|
|
370
370
|
cameras: ne(w),
|
|
371
371
|
renderer: d,
|
|
372
372
|
raycaster: z(new xe()),
|
|
373
|
+
controls: H(null),
|
|
374
|
+
extend: $,
|
|
373
375
|
addCamera: C,
|
|
374
376
|
removeCamera: M,
|
|
375
377
|
setCameraActive: p
|
|
@@ -383,31 +385,31 @@ function Ke() {
|
|
|
383
385
|
return e;
|
|
384
386
|
}
|
|
385
387
|
const ft = Ke;
|
|
386
|
-
let
|
|
387
|
-
const { logError:
|
|
388
|
+
let G = null, g = null;
|
|
389
|
+
const { logError: J } = k(), Xe = {
|
|
388
390
|
createElement(e, a, t, n) {
|
|
389
391
|
var l, o;
|
|
390
392
|
if (n || (n = {}), n.args || (n.args = []), e === "template" || Ve(e))
|
|
391
393
|
return null;
|
|
392
394
|
let r = e.replace("Tres", ""), i;
|
|
393
395
|
if (e === "primitive") {
|
|
394
|
-
(n == null ? void 0 : n.object) === void 0 &&
|
|
396
|
+
(n == null ? void 0 : n.object) === void 0 && J("Tres primitives need a prop 'object'");
|
|
395
397
|
const s = n.object;
|
|
396
398
|
r = s.type, i = Object.assign(s, { type: r, attach: n.attach, primitive: !0 });
|
|
397
399
|
} else {
|
|
398
|
-
const s =
|
|
399
|
-
s ||
|
|
400
|
+
const s = X.value[r];
|
|
401
|
+
s || J(`${r} is not defined on the THREE namespace. Use extend to add it to the catalog.`), i = new s(...n.args);
|
|
400
402
|
}
|
|
401
403
|
return i.isCamera && (n != null && n.position || i.position.set(3, 3, 3), n != null && n.lookAt || i.lookAt(0, 0, 0)), (n == null ? void 0 : n.attach) === void 0 && (i.isMaterial ? i.attach = "material" : i.isBufferGeometry && (i.attach = "geometry")), i.isObject3D && ((l = n == null ? void 0 : n.material) != null && l.isMaterial && (i.userData.tres__materialViaProp = !0), (o = n == null ? void 0 : n.geometry) != null && o.isBufferGeometry && (i.userData.tres__geometryViaProp = !0)), i;
|
|
402
404
|
},
|
|
403
405
|
insert(e, a) {
|
|
404
406
|
var t, n, r, i, l, o, s, u, c;
|
|
405
407
|
if (a && a.isScene && (g = a), (((t = e == null ? void 0 : e.__vnode) == null ? void 0 : t.type) === "TresGroup" || ((n = e == null ? void 0 : e.__vnode) == null ? void 0 : n.type) === "TresObject3D") && a === null && !((i = (r = e == null ? void 0 : e.__vnode) == null ? void 0 : r.ctx) != null && i.asyncResolved)) {
|
|
406
|
-
|
|
408
|
+
G = e;
|
|
407
409
|
return;
|
|
408
410
|
} else
|
|
409
|
-
(l = e == null ? void 0 : e.__vnode) != null && l.type.includes("Controls") && a === null && (
|
|
410
|
-
if (a || (a =
|
|
411
|
+
(l = e == null ? void 0 : e.__vnode) != null && l.type.includes("Controls") && a === null && (G = g);
|
|
412
|
+
if (a || (a = G), e != null && e.isObject3D) {
|
|
411
413
|
if (e != null && e.isCamera) {
|
|
412
414
|
if (!(g != null && g.userData.tres__registerCamera))
|
|
413
415
|
throw "could not find tres__registerCamera on scene's userData";
|
|
@@ -463,11 +465,11 @@ const { logError: U } = k(), Xe = {
|
|
|
463
465
|
o = u.reduce((c, f) => c[B(f)], r), i = u.pop(), l = i.toLowerCase(), o != null && o.set || (r = u.reduce((c, f) => c[B(f)], r));
|
|
464
466
|
}
|
|
465
467
|
let s = n;
|
|
466
|
-
if (s === "" && (s = !0),
|
|
468
|
+
if (s === "" && (s = !0), N(o)) {
|
|
467
469
|
Array.isArray(s) ? e[l](...s) : e[l](s);
|
|
468
470
|
return;
|
|
469
471
|
}
|
|
470
|
-
!(o != null && o.set) && !
|
|
472
|
+
!(o != null && o.set) && !N(o) ? r[l] = s : o.constructor === s.constructor && (o != null && o.copy) ? o == null || o.copy(s) : Array.isArray(s) ? o.set(...s) : !o.isColor && o.setScalar ? o.setScalar(s) : o.set(s);
|
|
471
473
|
}
|
|
472
474
|
},
|
|
473
475
|
parentNode(e) {
|
|
@@ -489,7 +491,7 @@ const { logError: U } = k(), Xe = {
|
|
|
489
491
|
}
|
|
490
492
|
return a;
|
|
491
493
|
};
|
|
492
|
-
|
|
494
|
+
$(pe);
|
|
493
495
|
const Ze = ["data-scene"], et = /* @__PURE__ */ ie({
|
|
494
496
|
__name: "TresCanvas",
|
|
495
497
|
props: {
|
|
@@ -517,12 +519,12 @@ const Ze = ["data-scene"], et = /* @__PURE__ */ ie({
|
|
|
517
519
|
failIfMajorPerformanceCaveat: { type: Boolean }
|
|
518
520
|
},
|
|
519
521
|
setup(e) {
|
|
520
|
-
const a = e, { logWarning: t } = k(), n =
|
|
522
|
+
const a = e, { logWarning: t } = k(), n = H(), r = z(new Te());
|
|
521
523
|
ee();
|
|
522
524
|
const i = ue();
|
|
523
525
|
let l;
|
|
524
526
|
const o = (u) => {
|
|
525
|
-
l = Qe(i), l.provide("useTres", u), l.provide("extend",
|
|
527
|
+
l = Qe(i), l.provide("useTres", u), l.provide("extend", $), l.mount(r.value);
|
|
526
528
|
}, s = _(() => a.disableRender);
|
|
527
529
|
return le(() => {
|
|
528
530
|
const u = n, c = Je({
|
|
@@ -536,7 +538,7 @@ const Ze = ["data-scene"], et = /* @__PURE__ */ ie({
|
|
|
536
538
|
const { addCamera: f, camera: w, cameras: C, removeCamera: M } = c;
|
|
537
539
|
o(c);
|
|
538
540
|
const p = () => {
|
|
539
|
-
const d = new
|
|
541
|
+
const d = new W(45, window.innerWidth / window.innerHeight, 0.1, 1e3);
|
|
540
542
|
d.position.set(3, 3, 3), d.lookAt(0, 0, 0), f(d);
|
|
541
543
|
const v = b(
|
|
542
544
|
() => {
|
|
@@ -544,7 +546,7 @@ const Ze = ["data-scene"], et = /* @__PURE__ */ ie({
|
|
|
544
546
|
}
|
|
545
547
|
);
|
|
546
548
|
};
|
|
547
|
-
|
|
549
|
+
K(() => a.camera, (d, v) => {
|
|
548
550
|
d ? f(d) : v && (v.removeFromParent(), M(v));
|
|
549
551
|
}, {
|
|
550
552
|
immediate: !0
|
|
@@ -585,9 +587,9 @@ const Ze = ["data-scene"], et = /* @__PURE__ */ ie({
|
|
|
585
587
|
};
|
|
586
588
|
export {
|
|
587
589
|
et as TresCanvas,
|
|
588
|
-
|
|
590
|
+
X as catalogue,
|
|
589
591
|
pt as default,
|
|
590
|
-
|
|
592
|
+
$ as extend,
|
|
591
593
|
st as isProd,
|
|
592
594
|
$e as normalizeColor,
|
|
593
595
|
it as normalizeVectorFlexibleParam,
|
package/dist/tres.umd.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* name: @tresjs/core
|
|
3
|
-
* version: v3.0.
|
|
3
|
+
* version: v3.0.1
|
|
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(p,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):(p=typeof globalThis<"u"?globalThis:p||self,c(p.tres={},p.Vue,p.Three,p.VueUseCore))})(this,function(p,c,g,d){"use strict";function ae(e){const a=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(a,t,n.get?n:{enumerable:!0,get:()=>e[t]})}}return a.default=e,Object.freeze(a)}const oe=ae(g),z=c.ref({}),j=e=>void Object.assign(z.value,e),W=e=>typeof e=="function",$=e=>!!e&&e.constructor===Array,q=({sizes:e,scene:a})=>{const t=c.ref([]),n=c.computed(()=>t.value[0]),r=(o,s=!1)=>{t.value.some(({uuid:u})=>u===o.uuid)||(s?l(o):t.value.push(o))},i=o=>{t.value=t.value.filter(({uuid:s})=>s!==o.uuid)},l=o=>{const s=o instanceof g.Camera?o:t.value.find(f=>f.uuid===o);if(!s)return;const u=t.value.filter(({uuid:f})=>f!==s.uuid);t.value=[s,...u]};return c.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(o=>{o instanceof g.PerspectiveCamera&&(o.aspect=e.aspectRatio.value),(o instanceof g.PerspectiveCamera||o instanceof g.OrthographicCamera)&&o.updateProjectionMatrix()})}),a.userData.tres__registerCamera=r,a.userData.tres__deregisterCamera=i,c.onUnmounted(()=>{t.value=[]}),{camera:n,cameras:t,addCamera:r,removeCamera:i,setCameraActive:l}},I=d.createEventHook(),N=d.createEventHook(),F=d.createEventHook(),A=new g.Clock;let x=0,B=0;const{pause:se,resume:ie,isActive:ue}=d.useRafFn(()=>{I.trigger({delta:x,elapsed:B,clock:A}),N.trigger({delta:x,elapsed:B,clock:A}),F.trigger({delta:x,elapsed:B,clock:A})},{immediate:!1});F.on(()=>{x=A.getDelta(),B=A.getElapsedTime()});const G=()=>({onBeforeLoop:I.on,onLoop:N.on,onAfterLoop:F.on,pause:se,resume:ie,isActive:ue}),V={realistic:{outputColorSpace:g.SRGBColorSpace,toneMapping:g.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:g.PCFSoftShadowMap}}},U=(e,a)=>{for(const t of Object.keys(a))a[t]instanceof Object&&Object.assign(a[t],U(e[t],a[t]));return Object.assign(e||{},a),e},le=ce("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot");function T(e){return e.replace(/-([a-z])/g,(a,t)=>t.toUpperCase())}function ce(e,a){const t=Object.create(null),n=e.split(",");for(let r=0;r<n.length;r++)t[n[r]]=!0;return a?r=>!!t[r.toLowerCase()]:r=>!!t[r]}const fe=(e,a)=>{const t=new Set,n=[];for(const r of e){const i=a(r);t.has(i)||(t.add(i),n.push(r))}return n},J=(e,a)=>{if(!a)return;const t=Array.isArray(a)?a:a.match(/([^[.\]])+/g);return t==null?void 0:t.reduce((n,r)=>n&&n[r],e)},me=(e,a,t)=>{const n=Array.isArray(a)?a:a.match(/([^[.\]])+/g);n&&n.reduce((r,i,l)=>(r[i]===void 0&&(r[i]={}),l===n.length-1&&(r[i]=t),r[i]),e)},pe=!0,K="[TresJS ▲ ■ ●] ";function S(){function e(n,r){console.error(`${K} ${n}`,r||"")}function a(n){console.warn(`${K} ${n}`)}function t(n,r){}return{logError:e,logWarning:a,logMessage:t}}function de(e){return typeof e=="number"?[e,e,e]:e instanceof g.Vector3?[e.x,e.y,e.z]:e}function X(e){return e instanceof g.Color?e:Array.isArray(e)?new g.Color(...e):new g.Color(e)}function Y({scene:e,canvas:a,options:t,disableRender:n,contextParts:{sizes:r,camera:i}}){const l=c.computed(()=>({alpha:d.toValue(t.alpha),depth:d.toValue(t.depth),canvas:d.unrefElement(a),context:d.toValue(t.context),stencil:d.toValue(t.stencil),antialias:d.toValue(t.antialias)===void 0?!0:d.toValue(t.antialias),precision:d.toValue(t.precision),powerPreference:d.toValue(t.powerPreference),premultipliedAlpha:d.toValue(t.premultipliedAlpha),preserveDrawingBuffer:d.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:d.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:d.toValue(t.failIfMajorPerformanceCaveat)})),o=c.shallowRef(new g.WebGLRenderer(l.value));c.watch(l,()=>{o.value.dispose(),o.value=new g.WebGLRenderer(l.value)}),c.watchEffect(()=>{o.value.setSize(r.width.value,r.height.value)});const{pixelRatio:s}=d.useDevicePixelRatio();c.watchEffect(()=>{o.value.setPixelRatio(s.value)});const{logError:u}=S(),m=(()=>{const w=new g.WebGLRenderer,C={shadowMap:{enabled:w.shadowMap.enabled,type:w.shadowMap.type},toneMapping:w.toneMapping,toneMappingExposure:w.toneMappingExposure,outputColorSpace:w.outputColorSpace,useLegacyLights:w.useLegacyLights};return w.dispose(),C})();c.watchEffect(()=>{const w=d.toValue(t.preset);w&&(w in V||u("Renderer Preset must be one of these: "+Object.keys(V).join(", ")),U(o.value,V[w]));const C=(D,k)=>{const O=d.toValue(D),E=()=>{if(w)return J(V[w],k)};if(O!==void 0)return O;const v=E();return v!==void 0?v:J(m,k)},y=(D,k)=>me(o.value,k,C(D,k));y(t.shadows,"shadowMap.enabled"),y(t.toneMapping,"toneMapping"),y(t.shadowMapType,"shadowMap.type"),y(t.useLegacyLights,"useLegacyLights"),y(t.outputColorSpace,"outputColorSpace"),y(t.toneMappingExposure,"toneMappingExposure");const h=C(t.clearColor,"clearColor");h&&o.value.setClearColor(h?X(h):new g.Color(0))});const{pause:M,resume:_,onLoop:b}=G();return b(()=>{i.value&&!d.toValue(n)&&o.value.render(e,i.value)}),_(),c.onUnmounted(()=>{M(),o.value.dispose(),o.value.forceContextLoss()}),{renderer:o}}function Q(e){const a={nodes:{},materials:{}};return e&&e.traverse(t=>{t.name&&(a.nodes[t.name]=t),t.material&&!a.materials[t.material.name]&&(a.materials[t.material.name]=t.material)}),a}async function ve(e,a,t,n,r){const{logError:i}=S(),l=new e;r&&r(l),t&&t(l);const s=(Array.isArray(a)?a:[a]).map(u=>new Promise((f,m)=>{l.load(u,M=>{M.scene&&Object.assign(M,Q(M.scene)),f(M)},n,M=>m(i("[useLoader] - Failed to load resource",M)))}));return $(a)?await Promise.all(s):await s[0]}async function ge(e){const a=new g.LoadingManager,t=new g.TextureLoader(a),n=r=>new Promise((i,l)=>{t.load(r,o=>i(o),()=>null,()=>{l(new Error("[useTextures] - Failed to load texture"))})});if($(e)){const r=await Promise.all(e.map(i=>n(i)));return e.length>1?r:r[0]}else{const{map:r,displacementMap:i,normalMap:l,roughnessMap:o,metalnessMap:s,aoMap:u,alphaMap:f,matcap:m}=e;return{map:r?await n(r):null,displacementMap:i?await n(i):null,normalMap:l?await n(l):null,roughnessMap:o?await n(o):null,metalnessMap:s?await n(s):null,aoMap:u?await n(u):null,alphaMap:f?await n(f):null,matcap:m?await n(m):null}}}const Z=(e,{renderer:a,camera:t,raycaster:n})=>{const r=c.computed(()=>a.value.domElement),{x:i,y:l}=d.usePointer({target:r}),{width:o,height:s,top:u,left:f}=d.useElementBounding(r),m=({x:v,y:L})=>{if(r.value)return{x:(v-f.value)/o.value*2-1,y:-((L-u.value)/s.value)*2+1}},M=({x:v,y:L})=>{if(t.value)return n.value.setFromCamera(new g.Vector2(v,L),t.value),n.value.intersectObjects(e.value,!1)},_=v=>{const L=m({x:(v==null?void 0:v.clientX)??i.value,y:(v==null?void 0:v.clientY)??l.value});return L?M(L)||[]:[]},b=c.computed(()=>_()),w=d.createEventHook(),C=d.createEventHook(),y=(v,L)=>{v.trigger({event:L,intersects:_(L)})},h=v=>{y(C,v)};let D;const k=v=>{var L;D=(L=_(v)[0])==null?void 0:L.object},O=v=>{var L;v instanceof PointerEvent&&D===((L=_(v)[0])==null?void 0:L.object)&&y(w,v)},E=v=>C.trigger({event:v,intersects:[]});return r.value.addEventListener("pointerup",O),r.value.addEventListener("pointerdown",k),r.value.addEventListener("pointermove",h),r.value.addEventListener("pointerleave",E),c.onUnmounted(()=>{r!=null&&r.value&&(r.value.removeEventListener("pointerup",O),r.value.removeEventListener("pointerdown",k),r.value.removeEventListener("pointermove",h),r.value.removeEventListener("pointerleave",E))}),{intersects:b,onClick:v=>w.on(v).off,onPointerMove:v=>C.on(v).off}};function we(){const{logWarning:e}=S();function a(n,r,i){let l=null;return n.traverse(o=>{o[r]===i&&(l=o)}),l||e(`Child with ${r} '${i}' not found.`),l}function t(n,r){return a(n,"name",r)}return{seek:a,seekByName:t}}const H=({scene:e,contextParts:a})=>{const t=c.reactive({click:new Map,pointerMove:new Map,pointerEnter:new Map,pointerLeave:new Map}),n=u=>{Object.values(t).forEach(f=>f.delete(u))},r=u=>{const{onClick:f,onPointerMove:m,onPointerEnter:M,onPointerLeave:_}=u;f&&t.click.set(u,f),m&&t.pointerMove.set(u,m),M&&t.pointerEnter.set(u,M),_&&t.pointerLeave.set(u,_)};e.userData.tres__registerAtPointerEventHandler=r,e.userData.tres__deregisterAtPointerEventHandler=n;const i=c.computed(()=>fe(Object.values(t).map(u=>Array.from(u.keys())).flat(),({uuid:u})=>u)),{onClick:l,onPointerMove:o}=Z(i,a);l(({intersects:u,event:f})=>{var m;u.length&&((m=t.click.get(u[0].object))==null||m(u[0],f))});let s;return o(({intersects:u,event:f})=>{var w,C,y,h;const m=(w=u==null?void 0:u[0])==null?void 0:w.object,{pointerLeave:M,pointerEnter:_,pointerMove:b}=t;s&&s!==m&&((C=M.get(s))==null||C(s,f)),m&&(s!==m&&((y=_.get(m))==null||y(u[0],f)),(h=b.get(m))==null||h(u[0],f)),s=m||null}),{registerObject:r,deregisterObject:n}};function ee({scene:e,canvas:a,windowSize:t,disableRender:n,rendererOptions:r}){const i=c.computed(()=>d.toValue(t)?d.useWindowSize():d.useElementSize(d.toValue(a).parentElement)),l=c.computed(()=>i.value.width.value),o=c.computed(()=>i.value.height.value),s=c.computed(()=>l.value/o.value),u={height:o,width:l,aspectRatio:s},f=c.shallowRef(e),{camera:m,cameras:M,addCamera:_,removeCamera:b,setCameraActive:w}=q({sizes:u,scene:e}),{renderer:C}=Y({scene:e,canvas:a,options:r,contextParts:{sizes:u,camera:m},disableRender:n}),y={sizes:u,scene:f,camera:m,cameras:c.readonly(M),renderer:C,raycaster:c.shallowRef(new g.Raycaster),addCamera:_,removeCamera:b,setCameraActive:w};return c.provide("useTres",y),y}function te(){const e=c.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const ye=te;function Se(e){}let R=null,P=null;const{logError:ne}=S(),Ce={createElement(e,a,t,n){var l,o;if(n||(n={}),n.args||(n.args=[]),e==="template"||le(e))return null;let r=e.replace("Tres",""),i;if(e==="primitive"){(n==null?void 0:n.object)===void 0&&ne("Tres primitives need a prop 'object'");const s=n.object;r=s.type,i=Object.assign(s,{type:r,attach:n.attach,primitive:!0})}else{const s=z.value[r];s||ne(`${r} is not defined on the THREE namespace. Use extend to add it to the catalog.`),i=new s(...n.args)}return i.isCamera&&(n!=null&&n.position||i.position.set(3,3,3),n!=null&&n.lookAt||i.lookAt(0,0,0)),(n==null?void 0:n.attach)===void 0&&(i.isMaterial?i.attach="material":i.isBufferGeometry&&(i.attach="geometry")),i.isObject3D&&((l=n==null?void 0:n.material)!=null&&l.isMaterial&&(i.userData.tres__materialViaProp=!0),(o=n==null?void 0:n.geometry)!=null&&o.isBufferGeometry&&(i.userData.tres__geometryViaProp=!0)),i},insert(e,a){var t,n,r,i,l,o,s,u,f;if(a&&a.isScene&&(P=a),(((t=e==null?void 0:e.__vnode)==null?void 0:t.type)==="TresGroup"||((n=e==null?void 0:e.__vnode)==null?void 0:n.type)==="TresObject3D")&&a===null&&!((i=(r=e==null?void 0:e.__vnode)==null?void 0:r.ctx)!=null&&i.asyncResolved)){R=e;return}else(l=e==null?void 0:e.__vnode)!=null&&l.type.includes("Controls")&&a===null&&(R=P);if(a||(a=R),e!=null&&e.isObject3D){if(e!=null&&e.isCamera){if(!(P!=null&&P.userData.tres__registerCamera))throw"could not find tres__registerCamera on scene's userData";(s=P==null?void 0:(o=P.userData).tres__registerCamera)==null||s.call(o,e)}if(e!=null&&e.onClick||e!=null&&e.onPointerMove||e!=null&&e.onPointerEnter||e!=null&&e.onPointerLeave){if(!(P!=null&&P.userData.tres__registerAtPointerEventHandler))throw"could not find tres__registerAtPointerEventHandler on scene's userData";(f=P==null?void 0:(u=P.userData).tres__registerAtPointerEventHandler)==null||f.call(u,e)}}e!=null&&e.isObject3D&&(a!=null&&a.isObject3D)?(a.add(e),e.dispatchEvent({type:"added"})):e!=null&&e.isFog?a.fog=e:typeof(e==null?void 0:e.attach)=="string"&&(e.__previousAttach=e[a==null?void 0:a.attach],a&&(a[e.attach]=e))},remove(e){var a,t;if(e){if(e.isObject3D){const n=e,r=s=>{var f,m;const u=s;s.userData.tres__materialViaProp||(f=u.material)==null||f.dispose(),s.userData.tres__geometryViaProp||(m=u.geometry)==null||m.dispose()},i=P==null?void 0:P.userData.tres__deregisterAtPointerEventHandler,l=s=>{if(!i)throw"could not find tres__deregisterAtPointerEventHandler on scene's userData";(s!=null&&s.onClick||s!=null&&s.onPointerMove||s!=null&&s.onPointerEnter||s!=null&&s.onPointerLeave)&&(i==null||i(s))},o=s=>{const u=P==null?void 0:P.userData.tres__deregisterCamera;if(!u)throw"could not find tres__deregisterCamera on scene's userData";s.isCamera&&(u==null||u(s))};n.traverse(s=>{r(s),o(s),l==null||l(s)}),r(n),o(n),l==null||l(n)}(a=e.removeFromParent)==null||a.call(e),(t=e.dispose)==null||t.call(e)}},patchProp(e,a,t,n){if(e){let r=e,i=a,l=T(i),o=r==null?void 0:r[l];if(r.type==="BufferGeometry"){if(i==="args")return;r.setAttribute(T(i),new g.BufferAttribute(...n));return}if(i.includes("-")&&o===void 0){const u=i.split("-");o=u.reduce((f,m)=>f[T(m)],r),i=u.pop(),l=i.toLowerCase(),o!=null&&o.set||(r=u.reduce((f,m)=>f[T(m)],r))}let s=n;if(s===""&&(s=!0),W(o)){Array.isArray(s)?e[l](...s):e[l](s);return}!(o!=null&&o.set)&&!W(o)?r[l]=s:o.constructor===s.constructor&&(o!=null&&o.copy)?o==null||o.copy(s):Array.isArray(s)?o.set(...s):!o.isColor&&o.setScalar?o.setScalar(s):o.set(s)}},parentNode(e){return(e==null?void 0:e.parent)||null},createText:()=>void 0,createComment:()=>void 0,setText:()=>void 0,setElementText:()=>void 0,nextSibling:()=>void 0,querySelector:()=>void 0,setScopeId:()=>void 0,cloneNode:()=>void 0,insertStaticContent:()=>void 0},{createApp:Pe}=c.createRenderer(Ce),Me=e=>{const a=Pe(t);function t(){return e&&e.default?e.default():[]}return a};j(oe);const _e=["data-scene"],re=c.defineComponent({__name:"TresCanvas",props:{shadows:{type:Boolean},clearColor:{},toneMapping:{},shadowMapType:{},useLegacyLights:{type:Boolean},outputColorSpace:{},toneMappingExposure:{},windowSize:{type:Boolean},preset:{},disableRender:{type:Boolean},camera:{},context:{},precision:{},alpha:{type:Boolean,default:!1},premultipliedAlpha:{type:Boolean},antialias:{type:Boolean,default:!0},stencil:{type:Boolean,default:!0},preserveDrawingBuffer:{type:Boolean,default:!1},powerPreference:{},depth:{type:Boolean,default:!0},logarithmicDepthBuffer:{type:Boolean},failIfMajorPerformanceCaveat:{type:Boolean}},setup(e){const a=e,{logWarning:t}=S(),n=c.ref(),r=c.shallowRef(new g.Scene);G();const i=c.useSlots();let l;const o=u=>{l=Me(i),l.provide("useTres",u),l.provide("extend",j),l.mount(r.value)},s=c.computed(()=>a.disableRender);return c.onMounted(()=>{const u=n,f=ee({scene:r.value,canvas:u,windowSize:a.windowSize,disableRender:s,rendererOptions:a});H({scene:r.value,contextParts:f});const{addCamera:m,camera:M,cameras:_,removeCamera:b}=f;o(f);const w=()=>{const C=new g.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);C.position.set(3,3,3),C.lookAt(0,0,0),m(C);const y=c.watchEffect(()=>{_.value.length>=2&&(C.removeFromParent(),b(C),y==null||y())})};c.watch(()=>a.camera,(C,y)=>{C?m(C):y&&(y.removeFromParent(),b(y))},{immediate:!0}),M.value||(t("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),w())}),(u,f)=>(c.openBlock(),c.createElementBlock("canvas",{ref_key:"canvas",ref:n,"data-scene":r.value.uuid,style:c.normalizeStyle({display:"block",width:"100%",height:"100%",position:u.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none",zIndex:1})},null,12,_e))}}),Le=["TresCanvas","TresLeches","TresScene"],be={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!Le.includes(e)||e==="primitive"}}},he={install(e){e.component("TresCanvas",re)}};p.TresCanvas=re,p.catalogue=z,p.default=he,p.extend=j,p.isProd=pe,p.normalizeColor=X,p.normalizeVectorFlexibleParam=de,p.templateCompilerOptions=be,p.trasverseObjects=Q,p.useCamera=q,p.useLoader=ve,p.useLogger=S,p.usePointerEventHandler=H,p.useRaycaster=Z,p.useRenderLoop=G,p.useRenderer=Y,p.useSeek=we,p.useTexture=ge,p.useTres=ye,p.useTresContext=te,p.useTresContextProvider=ee,Object.defineProperties(p,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
|
8
|
+
(function(p,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):(p=typeof globalThis<"u"?globalThis:p||self,c(p.tres={},p.Vue,p.Three,p.VueUseCore))})(this,function(p,c,g,d){"use strict";function ae(e){const a=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(a,t,n.get?n:{enumerable:!0,get:()=>e[t]})}}return a.default=e,Object.freeze(a)}const oe=ae(g),j=c.ref({}),x=e=>void Object.assign(j.value,e),W=e=>typeof e=="function",$=e=>!!e&&e.constructor===Array,q=({sizes:e,scene:a})=>{const t=c.ref([]),n=c.computed(()=>t.value[0]),r=(o,s=!1)=>{t.value.some(({uuid:u})=>u===o.uuid)||(s?l(o):t.value.push(o))},i=o=>{t.value=t.value.filter(({uuid:s})=>s!==o.uuid)},l=o=>{const s=o instanceof g.Camera?o:t.value.find(f=>f.uuid===o);if(!s)return;const u=t.value.filter(({uuid:f})=>f!==s.uuid);t.value=[s,...u]};return c.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(o=>{o instanceof g.PerspectiveCamera&&(o.aspect=e.aspectRatio.value),(o instanceof g.PerspectiveCamera||o instanceof g.OrthographicCamera)&&o.updateProjectionMatrix()})}),a.userData.tres__registerCamera=r,a.userData.tres__deregisterCamera=i,c.onUnmounted(()=>{t.value=[]}),{camera:n,cameras:t,addCamera:r,removeCamera:i,setCameraActive:l}},I=d.createEventHook(),N=d.createEventHook(),F=d.createEventHook(),A=new g.Clock;let B=0,V=0;const{pause:se,resume:ie,isActive:ue}=d.useRafFn(()=>{I.trigger({delta:B,elapsed:V,clock:A}),N.trigger({delta:B,elapsed:V,clock:A}),F.trigger({delta:B,elapsed:V,clock:A})},{immediate:!1});F.on(()=>{B=A.getDelta(),V=A.getElapsedTime()});const G=()=>({onBeforeLoop:I.on,onLoop:N.on,onAfterLoop:F.on,pause:se,resume:ie,isActive:ue}),T={realistic:{outputColorSpace:g.SRGBColorSpace,toneMapping:g.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:g.PCFSoftShadowMap}}},U=(e,a)=>{for(const t of Object.keys(a))a[t]instanceof Object&&Object.assign(a[t],U(e[t],a[t]));return Object.assign(e||{},a),e},le=ce("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 E(e){return e.replace(/-([a-z])/g,(a,t)=>t.toUpperCase())}function ce(e,a){const t=Object.create(null),n=e.split(",");for(let r=0;r<n.length;r++)t[n[r]]=!0;return a?r=>!!t[r.toLowerCase()]:r=>!!t[r]}const fe=(e,a)=>{const t=new Set,n=[];for(const r of e){const i=a(r);t.has(i)||(t.add(i),n.push(r))}return n},J=(e,a)=>{if(!a)return;const t=Array.isArray(a)?a:a.match(/([^[.\]])+/g);return t==null?void 0:t.reduce((n,r)=>n&&n[r],e)},me=(e,a,t)=>{const n=Array.isArray(a)?a:a.match(/([^[.\]])+/g);n&&n.reduce((r,i,l)=>(r[i]===void 0&&(r[i]={}),l===n.length-1&&(r[i]=t),r[i]),e)},pe=!0,K="[TresJS ▲ ■ ●] ";function S(){function e(n,r){console.error(`${K} ${n}`,r||"")}function a(n){console.warn(`${K} ${n}`)}function t(n,r){}return{logError:e,logWarning:a,logMessage:t}}function de(e){return typeof e=="number"?[e,e,e]:e instanceof g.Vector3?[e.x,e.y,e.z]:e}function X(e){return e instanceof g.Color?e:Array.isArray(e)?new g.Color(...e):new g.Color(e)}function Y({scene:e,canvas:a,options:t,disableRender:n,contextParts:{sizes:r,camera:i}}){const l=c.computed(()=>({alpha:d.toValue(t.alpha),depth:d.toValue(t.depth),canvas:d.unrefElement(a),context:d.toValue(t.context),stencil:d.toValue(t.stencil),antialias:d.toValue(t.antialias)===void 0?!0:d.toValue(t.antialias),precision:d.toValue(t.precision),powerPreference:d.toValue(t.powerPreference),premultipliedAlpha:d.toValue(t.premultipliedAlpha),preserveDrawingBuffer:d.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:d.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:d.toValue(t.failIfMajorPerformanceCaveat)})),o=c.shallowRef(new g.WebGLRenderer(l.value));c.watch(l,()=>{o.value.dispose(),o.value=new g.WebGLRenderer(l.value)}),c.watchEffect(()=>{o.value.setSize(r.width.value,r.height.value)});const{pixelRatio:s}=d.useDevicePixelRatio();c.watchEffect(()=>{o.value.setPixelRatio(s.value)});const{logError:u}=S(),m=(()=>{const w=new g.WebGLRenderer,C={shadowMap:{enabled:w.shadowMap.enabled,type:w.shadowMap.type},toneMapping:w.toneMapping,toneMappingExposure:w.toneMappingExposure,outputColorSpace:w.outputColorSpace,useLegacyLights:w.useLegacyLights};return w.dispose(),C})();c.watchEffect(()=>{const w=d.toValue(t.preset);w&&(w in T||u("Renderer Preset must be one of these: "+Object.keys(T).join(", ")),U(o.value,T[w]));const C=(D,k)=>{const O=d.toValue(D),z=()=>{if(w)return J(T[w],k)};if(O!==void 0)return O;const v=z();return v!==void 0?v:J(m,k)},y=(D,k)=>me(o.value,k,C(D,k));y(t.shadows,"shadowMap.enabled"),y(t.toneMapping,"toneMapping"),y(t.shadowMapType,"shadowMap.type"),y(t.useLegacyLights,"useLegacyLights"),y(t.outputColorSpace,"outputColorSpace"),y(t.toneMappingExposure,"toneMappingExposure");const h=C(t.clearColor,"clearColor");h&&o.value.setClearColor(h?X(h):new g.Color(0))});const{pause:M,resume:_,onLoop:b}=G();return b(()=>{i.value&&!d.toValue(n)&&o.value.render(e,i.value)}),_(),c.onUnmounted(()=>{M(),o.value.dispose(),o.value.forceContextLoss()}),{renderer:o}}function Q(e){const a={nodes:{},materials:{}};return e&&e.traverse(t=>{t.name&&(a.nodes[t.name]=t),t.material&&!a.materials[t.material.name]&&(a.materials[t.material.name]=t.material)}),a}async function ve(e,a,t,n,r){const{logError:i}=S(),l=new e;r&&r(l),t&&t(l);const s=(Array.isArray(a)?a:[a]).map(u=>new Promise((f,m)=>{l.load(u,M=>{M.scene&&Object.assign(M,Q(M.scene)),f(M)},n,M=>m(i("[useLoader] - Failed to load resource",M)))}));return $(a)?await Promise.all(s):await s[0]}async function ge(e){const a=new g.LoadingManager,t=new g.TextureLoader(a),n=r=>new Promise((i,l)=>{t.load(r,o=>i(o),()=>null,()=>{l(new Error("[useTextures] - Failed to load texture"))})});if($(e)){const r=await Promise.all(e.map(i=>n(i)));return e.length>1?r:r[0]}else{const{map:r,displacementMap:i,normalMap:l,roughnessMap:o,metalnessMap:s,aoMap:u,alphaMap:f,matcap:m}=e;return{map:r?await n(r):null,displacementMap:i?await n(i):null,normalMap:l?await n(l):null,roughnessMap:o?await n(o):null,metalnessMap:s?await n(s):null,aoMap:u?await n(u):null,alphaMap:f?await n(f):null,matcap:m?await n(m):null}}}const Z=(e,{renderer:a,camera:t,raycaster:n})=>{const r=c.computed(()=>a.value.domElement),{x:i,y:l}=d.usePointer({target:r}),{width:o,height:s,top:u,left:f}=d.useElementBounding(r),m=({x:v,y:L})=>{if(r.value)return{x:(v-f.value)/o.value*2-1,y:-((L-u.value)/s.value)*2+1}},M=({x:v,y:L})=>{if(t.value)return n.value.setFromCamera(new g.Vector2(v,L),t.value),n.value.intersectObjects(e.value,!1)},_=v=>{const L=m({x:(v==null?void 0:v.clientX)??i.value,y:(v==null?void 0:v.clientY)??l.value});return L?M(L)||[]:[]},b=c.computed(()=>_()),w=d.createEventHook(),C=d.createEventHook(),y=(v,L)=>{v.trigger({event:L,intersects:_(L)})},h=v=>{y(C,v)};let D;const k=v=>{var L;D=(L=_(v)[0])==null?void 0:L.object},O=v=>{var L;v instanceof PointerEvent&&D===((L=_(v)[0])==null?void 0:L.object)&&y(w,v)},z=v=>C.trigger({event:v,intersects:[]});return r.value.addEventListener("pointerup",O),r.value.addEventListener("pointerdown",k),r.value.addEventListener("pointermove",h),r.value.addEventListener("pointerleave",z),c.onUnmounted(()=>{r!=null&&r.value&&(r.value.removeEventListener("pointerup",O),r.value.removeEventListener("pointerdown",k),r.value.removeEventListener("pointermove",h),r.value.removeEventListener("pointerleave",z))}),{intersects:b,onClick:v=>w.on(v).off,onPointerMove:v=>C.on(v).off}};function we(){const{logWarning:e}=S();function a(n,r,i){let l=null;return n.traverse(o=>{o[r]===i&&(l=o)}),l||e(`Child with ${r} '${i}' not found.`),l}function t(n,r){return a(n,"name",r)}return{seek:a,seekByName:t}}const H=({scene:e,contextParts:a})=>{const t=c.reactive({click:new Map,pointerMove:new Map,pointerEnter:new Map,pointerLeave:new Map}),n=u=>{Object.values(t).forEach(f=>f.delete(u))},r=u=>{const{onClick:f,onPointerMove:m,onPointerEnter:M,onPointerLeave:_}=u;f&&t.click.set(u,f),m&&t.pointerMove.set(u,m),M&&t.pointerEnter.set(u,M),_&&t.pointerLeave.set(u,_)};e.userData.tres__registerAtPointerEventHandler=r,e.userData.tres__deregisterAtPointerEventHandler=n;const i=c.computed(()=>fe(Object.values(t).map(u=>Array.from(u.keys())).flat(),({uuid:u})=>u)),{onClick:l,onPointerMove:o}=Z(i,a);l(({intersects:u,event:f})=>{var m;u.length&&((m=t.click.get(u[0].object))==null||m(u[0],f))});let s;return o(({intersects:u,event:f})=>{var w,C,y,h;const m=(w=u==null?void 0:u[0])==null?void 0:w.object,{pointerLeave:M,pointerEnter:_,pointerMove:b}=t;s&&s!==m&&((C=M.get(s))==null||C(s,f)),m&&(s!==m&&((y=_.get(m))==null||y(u[0],f)),(h=b.get(m))==null||h(u[0],f)),s=m||null}),{registerObject:r,deregisterObject:n}};function ee({scene:e,canvas:a,windowSize:t,disableRender:n,rendererOptions:r}){const i=c.computed(()=>d.toValue(t)?d.useWindowSize():d.useElementSize(d.toValue(a).parentElement)),l=c.computed(()=>i.value.width.value),o=c.computed(()=>i.value.height.value),s=c.computed(()=>l.value/o.value),u={height:o,width:l,aspectRatio:s},f=c.shallowRef(e),{camera:m,cameras:M,addCamera:_,removeCamera:b,setCameraActive:w}=q({sizes:u,scene:e}),{renderer:C}=Y({scene:e,canvas:a,options:r,contextParts:{sizes:u,camera:m},disableRender:n}),y={sizes:u,scene:f,camera:m,cameras:c.readonly(M),renderer:C,raycaster:c.shallowRef(new g.Raycaster),controls:c.ref(null),extend:x,addCamera:_,removeCamera:b,setCameraActive:w};return c.provide("useTres",y),y}function te(){const e=c.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const ye=te;function Se(e){}let R=null,P=null;const{logError:ne}=S(),Ce={createElement(e,a,t,n){var l,o;if(n||(n={}),n.args||(n.args=[]),e==="template"||le(e))return null;let r=e.replace("Tres",""),i;if(e==="primitive"){(n==null?void 0:n.object)===void 0&&ne("Tres primitives need a prop 'object'");const s=n.object;r=s.type,i=Object.assign(s,{type:r,attach:n.attach,primitive:!0})}else{const s=j.value[r];s||ne(`${r} is not defined on the THREE namespace. Use extend to add it to the catalog.`),i=new s(...n.args)}return i.isCamera&&(n!=null&&n.position||i.position.set(3,3,3),n!=null&&n.lookAt||i.lookAt(0,0,0)),(n==null?void 0:n.attach)===void 0&&(i.isMaterial?i.attach="material":i.isBufferGeometry&&(i.attach="geometry")),i.isObject3D&&((l=n==null?void 0:n.material)!=null&&l.isMaterial&&(i.userData.tres__materialViaProp=!0),(o=n==null?void 0:n.geometry)!=null&&o.isBufferGeometry&&(i.userData.tres__geometryViaProp=!0)),i},insert(e,a){var t,n,r,i,l,o,s,u,f;if(a&&a.isScene&&(P=a),(((t=e==null?void 0:e.__vnode)==null?void 0:t.type)==="TresGroup"||((n=e==null?void 0:e.__vnode)==null?void 0:n.type)==="TresObject3D")&&a===null&&!((i=(r=e==null?void 0:e.__vnode)==null?void 0:r.ctx)!=null&&i.asyncResolved)){R=e;return}else(l=e==null?void 0:e.__vnode)!=null&&l.type.includes("Controls")&&a===null&&(R=P);if(a||(a=R),e!=null&&e.isObject3D){if(e!=null&&e.isCamera){if(!(P!=null&&P.userData.tres__registerCamera))throw"could not find tres__registerCamera on scene's userData";(s=P==null?void 0:(o=P.userData).tres__registerCamera)==null||s.call(o,e)}if(e!=null&&e.onClick||e!=null&&e.onPointerMove||e!=null&&e.onPointerEnter||e!=null&&e.onPointerLeave){if(!(P!=null&&P.userData.tres__registerAtPointerEventHandler))throw"could not find tres__registerAtPointerEventHandler on scene's userData";(f=P==null?void 0:(u=P.userData).tres__registerAtPointerEventHandler)==null||f.call(u,e)}}e!=null&&e.isObject3D&&(a!=null&&a.isObject3D)?(a.add(e),e.dispatchEvent({type:"added"})):e!=null&&e.isFog?a.fog=e:typeof(e==null?void 0:e.attach)=="string"&&(e.__previousAttach=e[a==null?void 0:a.attach],a&&(a[e.attach]=e))},remove(e){var a,t;if(e){if(e.isObject3D){const n=e,r=s=>{var f,m;const u=s;s.userData.tres__materialViaProp||(f=u.material)==null||f.dispose(),s.userData.tres__geometryViaProp||(m=u.geometry)==null||m.dispose()},i=P==null?void 0:P.userData.tres__deregisterAtPointerEventHandler,l=s=>{if(!i)throw"could not find tres__deregisterAtPointerEventHandler on scene's userData";(s!=null&&s.onClick||s!=null&&s.onPointerMove||s!=null&&s.onPointerEnter||s!=null&&s.onPointerLeave)&&(i==null||i(s))},o=s=>{const u=P==null?void 0:P.userData.tres__deregisterCamera;if(!u)throw"could not find tres__deregisterCamera on scene's userData";s.isCamera&&(u==null||u(s))};n.traverse(s=>{r(s),o(s),l==null||l(s)}),r(n),o(n),l==null||l(n)}(a=e.removeFromParent)==null||a.call(e),(t=e.dispose)==null||t.call(e)}},patchProp(e,a,t,n){if(e){let r=e,i=a,l=E(i),o=r==null?void 0:r[l];if(r.type==="BufferGeometry"){if(i==="args")return;r.setAttribute(E(i),new g.BufferAttribute(...n));return}if(i.includes("-")&&o===void 0){const u=i.split("-");o=u.reduce((f,m)=>f[E(m)],r),i=u.pop(),l=i.toLowerCase(),o!=null&&o.set||(r=u.reduce((f,m)=>f[E(m)],r))}let s=n;if(s===""&&(s=!0),W(o)){Array.isArray(s)?e[l](...s):e[l](s);return}!(o!=null&&o.set)&&!W(o)?r[l]=s:o.constructor===s.constructor&&(o!=null&&o.copy)?o==null||o.copy(s):Array.isArray(s)?o.set(...s):!o.isColor&&o.setScalar?o.setScalar(s):o.set(s)}},parentNode(e){return(e==null?void 0:e.parent)||null},createText:()=>void 0,createComment:()=>void 0,setText:()=>void 0,setElementText:()=>void 0,nextSibling:()=>void 0,querySelector:()=>void 0,setScopeId:()=>void 0,cloneNode:()=>void 0,insertStaticContent:()=>void 0},{createApp:Pe}=c.createRenderer(Ce),Me=e=>{const a=Pe(t);function t(){return e&&e.default?e.default():[]}return a};x(oe);const _e=["data-scene"],re=c.defineComponent({__name:"TresCanvas",props:{shadows:{type:Boolean},clearColor:{},toneMapping:{},shadowMapType:{},useLegacyLights:{type:Boolean},outputColorSpace:{},toneMappingExposure:{},windowSize:{type:Boolean},preset:{},disableRender:{type:Boolean},camera:{},context:{},precision:{},alpha:{type:Boolean,default:!1},premultipliedAlpha:{type:Boolean},antialias:{type:Boolean,default:!0},stencil:{type:Boolean,default:!0},preserveDrawingBuffer:{type:Boolean,default:!1},powerPreference:{},depth:{type:Boolean,default:!0},logarithmicDepthBuffer:{type:Boolean},failIfMajorPerformanceCaveat:{type:Boolean}},setup(e){const a=e,{logWarning:t}=S(),n=c.ref(),r=c.shallowRef(new g.Scene);G();const i=c.useSlots();let l;const o=u=>{l=Me(i),l.provide("useTres",u),l.provide("extend",x),l.mount(r.value)},s=c.computed(()=>a.disableRender);return c.onMounted(()=>{const u=n,f=ee({scene:r.value,canvas:u,windowSize:a.windowSize,disableRender:s,rendererOptions:a});H({scene:r.value,contextParts:f});const{addCamera:m,camera:M,cameras:_,removeCamera:b}=f;o(f);const w=()=>{const C=new g.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);C.position.set(3,3,3),C.lookAt(0,0,0),m(C);const y=c.watchEffect(()=>{_.value.length>=2&&(C.removeFromParent(),b(C),y==null||y())})};c.watch(()=>a.camera,(C,y)=>{C?m(C):y&&(y.removeFromParent(),b(y))},{immediate:!0}),M.value||(t("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),w())}),(u,f)=>(c.openBlock(),c.createElementBlock("canvas",{ref_key:"canvas",ref:n,"data-scene":r.value.uuid,style:c.normalizeStyle({display:"block",width:"100%",height:"100%",position:u.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none",zIndex:1})},null,12,_e))}}),Le=["TresCanvas","TresLeches","TresScene"],be={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!Le.includes(e)||e==="primitive"}}},he={install(e){e.component("TresCanvas",re)}};p.TresCanvas=re,p.catalogue=j,p.default=he,p.extend=x,p.isProd=pe,p.normalizeColor=X,p.normalizeVectorFlexibleParam=de,p.templateCompilerOptions=be,p.trasverseObjects=Q,p.useCamera=q,p.useLoader=ve,p.useLogger=S,p.usePointerEventHandler=H,p.useRaycaster=Z,p.useRenderLoop=G,p.useRenderer=Y,p.useSeek=we,p.useTexture=ge,p.useTres=ye,p.useTresContext=te,p.useTresContextProvider=ee,Object.defineProperties(p,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tresjs/core",
|
|
3
3
|
"description": "Declarative ThreeJS using Vue Components",
|
|
4
|
-
"version": "3.0.
|
|
4
|
+
"version": "3.0.1",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "pnpm@8.3.1",
|
|
7
7
|
"author": "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",
|