@tresjs/core 3.2.1 → 3.2.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/composables/useTexture/index.d.ts +62 -6
- package/dist/tres.js +149 -149
- package/dist/tres.umd.cjs +2 -2
- package/dist/utils/index.d.ts +4 -0
- package/package.json +1 -1
|
@@ -19,7 +19,63 @@ export interface PBRTextureMaps {
|
|
|
19
19
|
[key: string]: Texture | null;
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
|
-
*
|
|
22
|
+
* Map of textures to load that can be passed to `useTexture()`.
|
|
23
|
+
*/
|
|
24
|
+
export interface PBRUseTextureMap {
|
|
25
|
+
map?: string;
|
|
26
|
+
displacementMap?: string;
|
|
27
|
+
normalMap?: string;
|
|
28
|
+
roughnessMap?: string;
|
|
29
|
+
metalnessMap?: string;
|
|
30
|
+
aoMap?: string;
|
|
31
|
+
alphaMap?: string;
|
|
32
|
+
matcap?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Loads a single texture.
|
|
36
|
+
*
|
|
37
|
+
* ```ts
|
|
38
|
+
* import { useTexture } from 'tres'
|
|
39
|
+
*
|
|
40
|
+
* const matcapTexture = await useTexture(['path/to/texture.png'])
|
|
41
|
+
* ```
|
|
42
|
+
* Then you can use the texture in your material.
|
|
43
|
+
*
|
|
44
|
+
* ```vue
|
|
45
|
+
* <TresMeshMatcapMaterial :matcap="matcapTexture" />
|
|
46
|
+
* ```
|
|
47
|
+
* @see https://tresjs.org/examples/load-textures.html
|
|
48
|
+
* @export
|
|
49
|
+
* @param paths
|
|
50
|
+
* @return A promise of the resulting texture
|
|
51
|
+
*/
|
|
52
|
+
export declare function useTexture(paths: readonly [string]): Promise<Texture>;
|
|
53
|
+
/**
|
|
54
|
+
* Loads multiple textures.
|
|
55
|
+
*
|
|
56
|
+
* ```ts
|
|
57
|
+
* import { useTexture } from 'tres'
|
|
58
|
+
*
|
|
59
|
+
* const [texture1, texture2] = await useTexture([
|
|
60
|
+
* 'path/to/texture1.png',
|
|
61
|
+
* 'path/to/texture2.png',
|
|
62
|
+
* ])
|
|
63
|
+
* ```
|
|
64
|
+
* Then you can use the texture in your material.
|
|
65
|
+
*
|
|
66
|
+
* ```vue
|
|
67
|
+
* <TresMeshStandardMaterial map="texture1" />
|
|
68
|
+
* ```
|
|
69
|
+
* @see https://tresjs.org/examples/load-textures.html
|
|
70
|
+
* @export
|
|
71
|
+
* @param paths
|
|
72
|
+
* @return A promise of the resulting textures
|
|
73
|
+
*/
|
|
74
|
+
export declare function useTexture<T extends string[]>(paths: [...T]): Promise<{
|
|
75
|
+
[K in keyof T]: Texture;
|
|
76
|
+
}>;
|
|
77
|
+
/**
|
|
78
|
+
* Loads a PBR texture map.
|
|
23
79
|
*
|
|
24
80
|
* ```ts
|
|
25
81
|
* import { useTexture } from 'tres'
|
|
@@ -39,9 +95,9 @@ export interface PBRTextureMaps {
|
|
|
39
95
|
* ```
|
|
40
96
|
* @see https://tresjs.org/examples/load-textures.html
|
|
41
97
|
* @export
|
|
42
|
-
* @param
|
|
43
|
-
* @return
|
|
98
|
+
* @param paths
|
|
99
|
+
* @return A promise of the resulting pbr texture map
|
|
44
100
|
*/
|
|
45
|
-
export declare function useTexture(paths:
|
|
46
|
-
[
|
|
47
|
-
}
|
|
101
|
+
export declare function useTexture<TextureMap extends PBRUseTextureMap>(paths: TextureMap): Promise<{
|
|
102
|
+
[K in keyof Required<PBRUseTextureMap>]: K extends keyof TextureMap ? Texture : null;
|
|
103
|
+
}>;
|
package/dist/tres.js
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* name: @tresjs/core
|
|
3
|
-
* version: v3.2.
|
|
3
|
+
* version: v3.2.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
|
|
9
|
-
import * as
|
|
10
|
-
import { PerspectiveCamera as
|
|
11
|
-
import { createEventHook as O, useRafFn as Te, toValue as P, unrefElement as
|
|
12
|
-
const
|
|
13
|
-
const t =
|
|
8
|
+
import { ref as B, computed as k, watchEffect as D, onUnmounted as N, shallowRef as F, watch as te, reactive as ie, readonly as ue, provide as I, inject as le, createRenderer as ce, defineComponent as U, useSlots as fe, getCurrentInstance as J, onMounted as me, openBlock as pe, createElementBlock as ve, normalizeStyle as ge, h as K, Fragment as de } from "vue";
|
|
9
|
+
import * as ye from "three";
|
|
10
|
+
import { PerspectiveCamera as $, OrthographicCamera as we, Camera as Ce, Clock as _e, Vector3 as Pe, Color as R, REVISION as Ee, SRGBColorSpace as Me, ACESFilmicToneMapping as Ae, PCFSoftShadowMap as ke, WebGLRenderer as z, LoadingManager as be, TextureLoader as De, Vector2 as xe, Raycaster as Oe, BufferAttribute as Be, Scene as Le } from "three";
|
|
11
|
+
import { createEventHook as O, useRafFn as Te, toValue as P, unrefElement as he, useDevicePixelRatio as Se, usePointer as Re, useElementBounding as je, useWindowSize as He, useElementSize as Fe } from "@vueuse/core";
|
|
12
|
+
const ze = ({ sizes: e, scene: n }) => {
|
|
13
|
+
const t = B([]), r = k(
|
|
14
14
|
() => t.value[0]
|
|
15
15
|
), a = (i, c = !1) => {
|
|
16
16
|
t.value.some(({ uuid: u }) => u === i.uuid) || (c ? f(i) : t.value.push(i));
|
|
17
17
|
}, o = (i) => {
|
|
18
18
|
t.value = t.value.filter(({ uuid: c }) => c !== i.uuid);
|
|
19
19
|
}, f = (i) => {
|
|
20
|
-
const c = i instanceof
|
|
20
|
+
const c = i instanceof Ce ? i : t.value.find((m) => m.uuid === i);
|
|
21
21
|
if (!c)
|
|
22
22
|
return;
|
|
23
23
|
const u = t.value.filter(({ uuid: m }) => m !== c.uuid);
|
|
@@ -25,7 +25,7 @@ const Ge = ({ sizes: e, scene: n }) => {
|
|
|
25
25
|
};
|
|
26
26
|
return D(() => {
|
|
27
27
|
e.aspectRatio.value && t.value.forEach((i) => {
|
|
28
|
-
i instanceof
|
|
28
|
+
i instanceof $ && (i.aspect = e.aspectRatio.value), (i instanceof $ || i instanceof we) && i.updateProjectionMatrix();
|
|
29
29
|
});
|
|
30
30
|
}), n.userData.tres__registerCamera = a, n.userData.tres__deregisterCamera = o, N(() => {
|
|
31
31
|
t.value = [];
|
|
@@ -36,9 +36,9 @@ const Ge = ({ sizes: e, scene: n }) => {
|
|
|
36
36
|
deregisterCamera: o,
|
|
37
37
|
setCameraActive: f
|
|
38
38
|
};
|
|
39
|
-
}, re = O(), ne = O(), V = O(), x = new
|
|
39
|
+
}, re = O(), ne = O(), V = O(), x = new _e();
|
|
40
40
|
let j = 0, H = 0;
|
|
41
|
-
const { pause:
|
|
41
|
+
const { pause: Ge, resume: Ie, isActive: $e } = Te(
|
|
42
42
|
() => {
|
|
43
43
|
re.trigger({ delta: j, elapsed: H, clock: x }), ne.trigger({ delta: j, elapsed: H, clock: x }), V.trigger({ delta: j, elapsed: H, clock: x });
|
|
44
44
|
},
|
|
@@ -51,11 +51,11 @@ const ae = () => ({
|
|
|
51
51
|
onBeforeLoop: re.on,
|
|
52
52
|
onLoop: ne.on,
|
|
53
53
|
onAfterLoop: V.on,
|
|
54
|
-
pause:
|
|
55
|
-
resume:
|
|
54
|
+
pause: Ge,
|
|
55
|
+
resume: Ie,
|
|
56
56
|
isActive: $e
|
|
57
|
-
}),
|
|
58
|
-
function
|
|
57
|
+
}), vt = !0, X = "[TresJS ▲ ■ ●] ";
|
|
58
|
+
function L() {
|
|
59
59
|
function e(r, a) {
|
|
60
60
|
console.error(`${X} ${r}`, a || "");
|
|
61
61
|
}
|
|
@@ -70,30 +70,30 @@ function B() {
|
|
|
70
70
|
logMessage: t
|
|
71
71
|
};
|
|
72
72
|
}
|
|
73
|
-
function
|
|
74
|
-
return typeof e == "number" ? [e, e, e] : e instanceof
|
|
73
|
+
function gt(e) {
|
|
74
|
+
return typeof e == "number" ? [e, e, e] : e instanceof Pe ? [e.x, e.y, e.z] : e;
|
|
75
75
|
}
|
|
76
|
-
function
|
|
76
|
+
function We(e) {
|
|
77
77
|
return e instanceof R ? e : Array.isArray(e) ? new R(...e) : new R(e);
|
|
78
78
|
}
|
|
79
79
|
const oe = (e, n) => {
|
|
80
80
|
for (const t of Object.keys(n))
|
|
81
81
|
n[t] instanceof Object && Object.assign(n[t], oe(e[t], n[t]));
|
|
82
82
|
return Object.assign(e || {}, n), e;
|
|
83
|
-
},
|
|
83
|
+
}, Ne = "html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot", Ve = /* @__PURE__ */ qe(Ne);
|
|
84
84
|
function Y(e) {
|
|
85
85
|
return e && e.nodeType === 1;
|
|
86
86
|
}
|
|
87
|
-
function
|
|
87
|
+
function h(e) {
|
|
88
88
|
return e.replace(/-([a-z])/g, (n, t) => t.toUpperCase());
|
|
89
89
|
}
|
|
90
|
-
function
|
|
90
|
+
function qe(e, n) {
|
|
91
91
|
const t = /* @__PURE__ */ Object.create(null), r = e.split(",");
|
|
92
92
|
for (let a = 0; a < r.length; a++)
|
|
93
93
|
t[r[a]] = !0;
|
|
94
94
|
return n ? (a) => !!t[a.toLowerCase()] : (a) => !!t[a];
|
|
95
95
|
}
|
|
96
|
-
const
|
|
96
|
+
const Ue = (e, n) => {
|
|
97
97
|
const t = /* @__PURE__ */ new Set(), r = [];
|
|
98
98
|
for (const a of e) {
|
|
99
99
|
const o = n(a);
|
|
@@ -105,7 +105,7 @@ const Je = (e, n) => {
|
|
|
105
105
|
return;
|
|
106
106
|
const t = Array.isArray(n) ? n : n.match(/([^[.\]])+/g);
|
|
107
107
|
return t == null ? void 0 : t.reduce((r, a) => r && r[a], e);
|
|
108
|
-
},
|
|
108
|
+
}, Je = (e, n, t) => {
|
|
109
109
|
const r = Array.isArray(n) ? n : n.match(/([^[.\]])+/g);
|
|
110
110
|
r && r.reduce((a, o, f) => (a[o] === void 0 && (a[o] = {}), f === r.length - 1 && (a[o] = t), a[o]), e);
|
|
111
111
|
};
|
|
@@ -126,7 +126,7 @@ function se(e, n) {
|
|
|
126
126
|
return !1;
|
|
127
127
|
return !0;
|
|
128
128
|
}
|
|
129
|
-
function
|
|
129
|
+
function Ke(e, n) {
|
|
130
130
|
if (!Array.isArray(e) || !Array.isArray(n) || e.length !== n.length)
|
|
131
131
|
return !1;
|
|
132
132
|
for (let t = 0; t < e.length; t++)
|
|
@@ -134,14 +134,14 @@ function Xe(e, n) {
|
|
|
134
134
|
return !1;
|
|
135
135
|
return !0;
|
|
136
136
|
}
|
|
137
|
-
const Ye = Number.parseInt(
|
|
137
|
+
const Xe = Array.isArray, Ye = Number.parseInt(Ee.replace("dev", "")), S = {
|
|
138
138
|
realistic: {
|
|
139
|
-
outputColorSpace:
|
|
140
|
-
toneMapping:
|
|
139
|
+
outputColorSpace: Me,
|
|
140
|
+
toneMapping: Ae,
|
|
141
141
|
toneMappingExposure: 3,
|
|
142
142
|
shadowMap: {
|
|
143
143
|
enabled: !0,
|
|
144
|
-
type:
|
|
144
|
+
type: ke
|
|
145
145
|
}
|
|
146
146
|
}
|
|
147
147
|
};
|
|
@@ -155,7 +155,7 @@ function Qe({
|
|
|
155
155
|
const f = k(() => ({
|
|
156
156
|
alpha: P(t.alpha),
|
|
157
157
|
depth: P(t.depth),
|
|
158
|
-
canvas:
|
|
158
|
+
canvas: he(n),
|
|
159
159
|
context: P(t.context),
|
|
160
160
|
stencil: P(t.stencil),
|
|
161
161
|
antialias: P(t.antialias) === void 0 ? !0 : P(t.antialias),
|
|
@@ -171,39 +171,39 @@ function Qe({
|
|
|
171
171
|
}), D(() => {
|
|
172
172
|
i.value.setSize(a.width.value, a.height.value);
|
|
173
173
|
});
|
|
174
|
-
const { pixelRatio: c } =
|
|
174
|
+
const { pixelRatio: c } = Se();
|
|
175
175
|
D(() => {
|
|
176
176
|
i.value.setPixelRatio(c.value);
|
|
177
177
|
});
|
|
178
|
-
const { logError: u } =
|
|
179
|
-
const
|
|
178
|
+
const { logError: u } = L(), l = (() => {
|
|
179
|
+
const g = new z(), w = {
|
|
180
180
|
shadowMap: {
|
|
181
|
-
enabled:
|
|
182
|
-
type:
|
|
181
|
+
enabled: g.shadowMap.enabled,
|
|
182
|
+
type: g.shadowMap.type
|
|
183
183
|
},
|
|
184
|
-
toneMapping:
|
|
185
|
-
toneMappingExposure:
|
|
186
|
-
outputColorSpace:
|
|
184
|
+
toneMapping: g.toneMapping,
|
|
185
|
+
toneMappingExposure: g.toneMappingExposure,
|
|
186
|
+
outputColorSpace: g.outputColorSpace
|
|
187
187
|
};
|
|
188
|
-
return
|
|
188
|
+
return g.dispose(), w;
|
|
189
189
|
})();
|
|
190
190
|
D(() => {
|
|
191
|
-
const
|
|
192
|
-
|
|
191
|
+
const g = P(t.preset);
|
|
192
|
+
g && (g in S || u(`Renderer Preset must be one of these: ${Object.keys(S).join(", ")}`), oe(i.value, S[g]));
|
|
193
193
|
const w = (_, A) => {
|
|
194
|
-
const b = P(_),
|
|
195
|
-
if (
|
|
196
|
-
return Q(S[
|
|
194
|
+
const b = P(_), T = () => {
|
|
195
|
+
if (g)
|
|
196
|
+
return Q(S[g], A);
|
|
197
197
|
};
|
|
198
198
|
if (b !== void 0)
|
|
199
199
|
return b;
|
|
200
|
-
const
|
|
201
|
-
return
|
|
202
|
-
}, E = (_, A) =>
|
|
200
|
+
const d = T();
|
|
201
|
+
return d !== void 0 ? d : Q(l, A);
|
|
202
|
+
}, E = (_, A) => Je(i.value, A, w(_, A));
|
|
203
203
|
E(t.shadows, "shadowMap.enabled"), E(t.toneMapping, "toneMapping"), E(t.shadowMapType, "shadowMap.type"), Ye < 150 && E(!t.useLegacyLights, "physicallyCorrectLights"), E(t.outputColorSpace, "outputColorSpace"), E(t.toneMappingExposure, "toneMappingExposure");
|
|
204
204
|
const C = w(t.clearColor, "clearColor");
|
|
205
205
|
C && i.value.setClearColor(
|
|
206
|
-
C ?
|
|
206
|
+
C ? We(C) : new R(0)
|
|
207
207
|
// default clear color is not easily/efficiently retrievable from three
|
|
208
208
|
);
|
|
209
209
|
});
|
|
@@ -216,32 +216,32 @@ function Qe({
|
|
|
216
216
|
renderer: i
|
|
217
217
|
};
|
|
218
218
|
}
|
|
219
|
-
const Z = (e) => typeof e == "function",
|
|
220
|
-
function
|
|
219
|
+
const Z = (e) => typeof e == "function", Ze = (e) => !!e && e.constructor === Array;
|
|
220
|
+
function et(e) {
|
|
221
221
|
const n = { nodes: {}, materials: {} };
|
|
222
222
|
return e && e.traverse((t) => {
|
|
223
223
|
t.name && (n.nodes[t.name] = t), t.material && !n.materials[t.material.name] && (n.materials[t.material.name] = t.material);
|
|
224
224
|
}), n;
|
|
225
225
|
}
|
|
226
226
|
async function dt(e, n, t, r, a) {
|
|
227
|
-
const { logError: o } =
|
|
227
|
+
const { logError: o } = L(), f = new e();
|
|
228
228
|
a && a(f), t && t(f);
|
|
229
229
|
const c = (Array.isArray(n) ? n : [n]).map(
|
|
230
230
|
(u) => new Promise((m, l) => {
|
|
231
231
|
f.load(
|
|
232
232
|
u,
|
|
233
233
|
(s) => {
|
|
234
|
-
s.scene && Object.assign(s,
|
|
234
|
+
s.scene && Object.assign(s, et(s.scene)), m(s);
|
|
235
235
|
},
|
|
236
236
|
r,
|
|
237
237
|
(s) => l(o("[useLoader] - Failed to load resource", s))
|
|
238
238
|
);
|
|
239
239
|
})
|
|
240
240
|
);
|
|
241
|
-
return
|
|
241
|
+
return Ze(n) ? await Promise.all(c) : await c[0];
|
|
242
242
|
}
|
|
243
|
-
async function
|
|
244
|
-
const n = new
|
|
243
|
+
async function yt(e) {
|
|
244
|
+
const n = new be(), t = new De(n), r = (a) => new Promise((o, f) => {
|
|
245
245
|
t.load(
|
|
246
246
|
a,
|
|
247
247
|
(i) => o(i),
|
|
@@ -251,7 +251,7 @@ async function gt(e) {
|
|
|
251
251
|
}
|
|
252
252
|
);
|
|
253
253
|
});
|
|
254
|
-
if (
|
|
254
|
+
if (Xe(e)) {
|
|
255
255
|
const a = await Promise.all(e.map((o) => r(o)));
|
|
256
256
|
return e.length > 1 ? a : a[0];
|
|
257
257
|
} else {
|
|
@@ -277,45 +277,45 @@ async function gt(e) {
|
|
|
277
277
|
};
|
|
278
278
|
}
|
|
279
279
|
}
|
|
280
|
-
const
|
|
281
|
-
const a = k(() => n.value.domElement), { x: o, y: f } =
|
|
280
|
+
const tt = (e, { renderer: n, camera: t, raycaster: r }) => {
|
|
281
|
+
const a = k(() => n.value.domElement), { x: o, y: f } = Re({ target: a }), { width: i, height: c, top: u, left: m } = je(a), l = ({ x: d, y: M }) => {
|
|
282
282
|
if (a.value)
|
|
283
283
|
return {
|
|
284
|
-
x: (
|
|
284
|
+
x: (d - m.value) / i.value * 2 - 1,
|
|
285
285
|
y: -((M - u.value) / c.value) * 2 + 1
|
|
286
286
|
};
|
|
287
|
-
}, s = ({ x:
|
|
287
|
+
}, s = ({ x: d, y: M }) => {
|
|
288
288
|
if (t.value)
|
|
289
|
-
return r.value.setFromCamera(new
|
|
290
|
-
}, v = (
|
|
289
|
+
return r.value.setFromCamera(new xe(d, M), t.value), r.value.intersectObjects(e.value, !1);
|
|
290
|
+
}, v = (d) => {
|
|
291
291
|
const M = l({
|
|
292
|
-
x: (
|
|
293
|
-
y: (
|
|
292
|
+
x: (d == null ? void 0 : d.clientX) ?? o.value,
|
|
293
|
+
y: (d == null ? void 0 : d.clientY) ?? f.value
|
|
294
294
|
});
|
|
295
295
|
return M ? s(M) || [] : [];
|
|
296
|
-
}, y = k(() => v()),
|
|
297
|
-
|
|
298
|
-
}, C = (
|
|
299
|
-
E(w,
|
|
296
|
+
}, y = k(() => v()), g = O(), w = O(), E = (d, M) => {
|
|
297
|
+
d.trigger({ event: M, intersects: v(M) });
|
|
298
|
+
}, C = (d) => {
|
|
299
|
+
E(w, d);
|
|
300
300
|
};
|
|
301
301
|
let _;
|
|
302
|
-
const A = (
|
|
302
|
+
const A = (d) => {
|
|
303
303
|
var M;
|
|
304
|
-
_ = (M = v(
|
|
305
|
-
}, b = (
|
|
304
|
+
_ = (M = v(d)[0]) == null ? void 0 : M.object;
|
|
305
|
+
}, b = (d) => {
|
|
306
306
|
var M;
|
|
307
|
-
|
|
308
|
-
},
|
|
309
|
-
return a.value.addEventListener("pointerup", b), a.value.addEventListener("pointerdown", A), a.value.addEventListener("pointermove", C), a.value.addEventListener("pointerleave",
|
|
310
|
-
a != null && a.value && (a.value.removeEventListener("pointerup", b), a.value.removeEventListener("pointerdown", A), a.value.removeEventListener("pointermove", C), a.value.removeEventListener("pointerleave",
|
|
307
|
+
d instanceof PointerEvent && _ === ((M = v(d)[0]) == null ? void 0 : M.object) && E(g, d);
|
|
308
|
+
}, T = (d) => w.trigger({ event: d, intersects: [] });
|
|
309
|
+
return a.value.addEventListener("pointerup", b), a.value.addEventListener("pointerdown", A), a.value.addEventListener("pointermove", C), a.value.addEventListener("pointerleave", T), N(() => {
|
|
310
|
+
a != null && a.value && (a.value.removeEventListener("pointerup", b), a.value.removeEventListener("pointerdown", A), a.value.removeEventListener("pointermove", C), a.value.removeEventListener("pointerleave", T));
|
|
311
311
|
}), {
|
|
312
312
|
intersects: y,
|
|
313
|
-
onClick: (
|
|
314
|
-
onPointerMove: (
|
|
313
|
+
onClick: (d) => g.on(d).off,
|
|
314
|
+
onPointerMove: (d) => w.on(d).off
|
|
315
315
|
};
|
|
316
316
|
};
|
|
317
|
-
function
|
|
318
|
-
const { logWarning: e } =
|
|
317
|
+
function wt() {
|
|
318
|
+
const { logWarning: e } = L();
|
|
319
319
|
function n(r, a, o) {
|
|
320
320
|
let f = null;
|
|
321
321
|
return r.traverse((i) => {
|
|
@@ -330,32 +330,32 @@ function yt() {
|
|
|
330
330
|
seekByName: t
|
|
331
331
|
};
|
|
332
332
|
}
|
|
333
|
-
const
|
|
334
|
-
const t =
|
|
333
|
+
const rt = ({ scene: e, contextParts: n }) => {
|
|
334
|
+
const t = ie({
|
|
335
335
|
click: /* @__PURE__ */ new Map(),
|
|
336
336
|
pointerMove: /* @__PURE__ */ new Map(),
|
|
337
337
|
pointerEnter: /* @__PURE__ */ new Map(),
|
|
338
338
|
pointerLeave: /* @__PURE__ */ new Map()
|
|
339
|
-
}), r =
|
|
339
|
+
}), r = B(/* @__PURE__ */ new Set()), a = (s) => {
|
|
340
340
|
r.value.add(s);
|
|
341
341
|
}, o = (s) => {
|
|
342
342
|
r.value.delete(s);
|
|
343
343
|
}, f = (s) => {
|
|
344
344
|
Object.values(t).forEach((v) => v.delete(s)), o(s);
|
|
345
345
|
}, i = (s) => {
|
|
346
|
-
const { onClick: v, onPointerMove: y, onPointerEnter:
|
|
347
|
-
v && t.click.set(s, v), y && t.pointerMove.set(s, y),
|
|
346
|
+
const { onClick: v, onPointerMove: y, onPointerEnter: g, onPointerLeave: w } = s;
|
|
347
|
+
v && t.click.set(s, v), y && t.pointerMove.set(s, y), g && t.pointerEnter.set(s, g), w && t.pointerLeave.set(s, w);
|
|
348
348
|
};
|
|
349
349
|
e.userData.tres__registerAtPointerEventHandler = i, e.userData.tres__deregisterAtPointerEventHandler = f, e.userData.tres__registerBlockingObjectAtPointerEventHandler = a, e.userData.tres__deregisterBlockingObjectAtPointerEventHandler = o;
|
|
350
350
|
const c = k(
|
|
351
|
-
() =>
|
|
351
|
+
() => Ue(
|
|
352
352
|
[
|
|
353
353
|
...Array.from(r.value),
|
|
354
354
|
...Object.values(t).map((s) => Array.from(s.keys())).flat()
|
|
355
355
|
],
|
|
356
356
|
({ uuid: s }) => s
|
|
357
357
|
)
|
|
358
|
-
), { onClick: u, onPointerMove: m } =
|
|
358
|
+
), { onClick: u, onPointerMove: m } = tt(c, n);
|
|
359
359
|
u(({ intersects: s, event: v }) => {
|
|
360
360
|
var y;
|
|
361
361
|
s.length && ((y = t.click.get(s[0].object)) == null || y(s[0], v));
|
|
@@ -363,14 +363,14 @@ const tt = ({ scene: e, contextParts: n }) => {
|
|
|
363
363
|
let l;
|
|
364
364
|
return m(({ intersects: s, event: v }) => {
|
|
365
365
|
var C, _, A, b;
|
|
366
|
-
const y = (C = s == null ? void 0 : s[0]) == null ? void 0 : C.object, { pointerLeave:
|
|
367
|
-
l && l !== y && ((_ =
|
|
366
|
+
const y = (C = s == null ? void 0 : s[0]) == null ? void 0 : C.object, { pointerLeave: g, pointerEnter: w, pointerMove: E } = t;
|
|
367
|
+
l && l !== y && ((_ = g.get(l)) == null || _(l, v)), y && (l !== y && ((A = w.get(y)) == null || A(s[0], v)), (b = E.get(y)) == null || b(s[0], v)), l = y || null;
|
|
368
368
|
}), {
|
|
369
369
|
registerObject: i,
|
|
370
370
|
deregisterObject: f
|
|
371
371
|
};
|
|
372
|
-
},
|
|
373
|
-
function
|
|
372
|
+
}, W = B({}), q = (e) => Object.assign(W.value, e);
|
|
373
|
+
function nt({
|
|
374
374
|
scene: e,
|
|
375
375
|
canvas: n,
|
|
376
376
|
windowSize: t,
|
|
@@ -378,7 +378,7 @@ function rt({
|
|
|
378
378
|
rendererOptions: a
|
|
379
379
|
}) {
|
|
380
380
|
const o = k(
|
|
381
|
-
() => P(t) ?
|
|
381
|
+
() => P(t) ? He() : Fe(P(n).parentElement)
|
|
382
382
|
), f = k(() => o.value.width.value), i = k(() => o.value.height.value), c = k(() => f.value / i.value), u = {
|
|
383
383
|
height: i,
|
|
384
384
|
width: f,
|
|
@@ -388,8 +388,8 @@ function rt({
|
|
|
388
388
|
cameras: s,
|
|
389
389
|
registerCamera: v,
|
|
390
390
|
deregisterCamera: y,
|
|
391
|
-
setCameraActive:
|
|
392
|
-
} =
|
|
391
|
+
setCameraActive: g
|
|
392
|
+
} = ze({ sizes: u, scene: e }), { renderer: w } = Qe(
|
|
393
393
|
{
|
|
394
394
|
scene: e,
|
|
395
395
|
canvas: n,
|
|
@@ -401,29 +401,29 @@ function rt({
|
|
|
401
401
|
sizes: u,
|
|
402
402
|
scene: m,
|
|
403
403
|
camera: l,
|
|
404
|
-
cameras:
|
|
404
|
+
cameras: ue(s),
|
|
405
405
|
renderer: w,
|
|
406
|
-
raycaster: F(new
|
|
407
|
-
controls:
|
|
406
|
+
raycaster: F(new Oe()),
|
|
407
|
+
controls: B(null),
|
|
408
408
|
extend: q,
|
|
409
409
|
registerCamera: v,
|
|
410
|
-
setCameraActive:
|
|
410
|
+
setCameraActive: g,
|
|
411
411
|
deregisterCamera: y
|
|
412
412
|
};
|
|
413
413
|
return I("useTres", E), E;
|
|
414
414
|
}
|
|
415
|
-
function
|
|
416
|
-
const e =
|
|
415
|
+
function at() {
|
|
416
|
+
const e = le("useTres");
|
|
417
417
|
if (!e)
|
|
418
418
|
throw new Error("useTresContext must be used together with useTresContextProvider");
|
|
419
419
|
return e;
|
|
420
420
|
}
|
|
421
|
-
const
|
|
421
|
+
const Ct = at;
|
|
422
422
|
let G = null, p = null;
|
|
423
|
-
const { logError: ee } =
|
|
423
|
+
const { logError: ee } = L(), ot = {
|
|
424
424
|
createElement(e, n, t, r) {
|
|
425
425
|
var f, i;
|
|
426
|
-
if (r || (r = {}), r.args || (r.args = []), e === "template" ||
|
|
426
|
+
if (r || (r = {}), r.args || (r.args = []), e === "template" || Ve(e))
|
|
427
427
|
return null;
|
|
428
428
|
let a = e.replace("Tres", ""), o;
|
|
429
429
|
if (e === "primitive") {
|
|
@@ -431,7 +431,7 @@ const { logError: ee } = B(), at = {
|
|
|
431
431
|
const c = r.object;
|
|
432
432
|
a = c.type, o = Object.assign(c, { type: a, attach: r.attach, primitive: !0 });
|
|
433
433
|
} else {
|
|
434
|
-
const c =
|
|
434
|
+
const c = W.value[a];
|
|
435
435
|
c || ee(`${a} is not defined on the THREE namespace. Use extend to add it to the catalog.`), o = new c(...r.args);
|
|
436
436
|
}
|
|
437
437
|
return o.isCamera && (r != null && r.position || o.position.set(3, 3, 3), r != null && r.lookAt || o.lookAt(0, 0, 0)), (r == null ? void 0 : r.attach) === void 0 && (o.isMaterial ? o.attach = "material" : o.isBufferGeometry && (o.attach = "geometry")), o.isObject3D && ((f = r == null ? void 0 : r.material) != null && f.isMaterial && (o.userData.tres__materialViaProp = !0), (i = r == null ? void 0 : r.geometry) != null && i.isBufferGeometry && (o.userData.tres__geometryViaProp = !0)), o.userData = {
|
|
@@ -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, i, c, u, m;
|
|
443
|
+
var t, r, a, o, f, i, c, u, m, l;
|
|
444
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)) {
|
|
445
445
|
G = e;
|
|
446
446
|
return;
|
|
447
447
|
} else
|
|
448
|
-
(f = e == null ? void 0 : e.__vnode) != null && f.type.includes("Controls")
|
|
448
|
+
n === null && ((f = e == null ? void 0 : e.__vnode) != null && f.type.includes("Controls") || (i = e == null ? void 0 : e.__vnode) != null && i.type.includes("Helper")) && (G = p);
|
|
449
449
|
if (n || (n = G), e != null && e.isObject3D) {
|
|
450
450
|
if (e != null && e.isCamera) {
|
|
451
451
|
if (!(p != null && p.userData.tres__registerCamera))
|
|
452
452
|
throw "could not find tres__registerCamera on scene's userData";
|
|
453
|
-
(
|
|
453
|
+
(u = p == null ? void 0 : (c = p.userData).tres__registerCamera) == null || u.call(c, e);
|
|
454
454
|
}
|
|
455
455
|
if (e != null && e.onClick || e != null && e.onPointerMove || e != null && e.onPointerEnter || e != null && e.onPointerLeave) {
|
|
456
456
|
if (!(p != null && p.userData.tres__registerAtPointerEventHandler))
|
|
457
457
|
throw "could not find tres__registerAtPointerEventHandler on scene's userData";
|
|
458
|
-
(
|
|
458
|
+
(l = p == null ? void 0 : (m = p.userData).tres__registerAtPointerEventHandler) == null || l.call(m, 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));
|
|
@@ -496,24 +496,24 @@ const { logError: ee } = B(), at = {
|
|
|
496
496
|
r || r === "" ? (o = p == null ? void 0 : (a = p.userData).tres__registerBlockingObjectAtPointerEventHandler) == null || o.call(a, e) : (i = p == null ? void 0 : (f = p.userData).tres__deregisterBlockingObjectAtPointerEventHandler) == null || i.call(f, e);
|
|
497
497
|
return;
|
|
498
498
|
}
|
|
499
|
-
let m =
|
|
499
|
+
let m = h(u), l = c == null ? void 0 : c[m];
|
|
500
500
|
if (u === "args") {
|
|
501
|
-
const v = e, y = t ?? [],
|
|
502
|
-
w && y.length && !
|
|
501
|
+
const v = e, y = t ?? [], g = r ?? [], w = e.userData.tres__name || e.type;
|
|
502
|
+
w && y.length && !Ke(y, g) && (c = Object.assign(v, new W.value[w](...r)));
|
|
503
503
|
return;
|
|
504
504
|
}
|
|
505
505
|
if (c.type === "BufferGeometry") {
|
|
506
506
|
if (u === "args")
|
|
507
507
|
return;
|
|
508
508
|
c.setAttribute(
|
|
509
|
-
|
|
509
|
+
h(u),
|
|
510
510
|
new Be(...r)
|
|
511
511
|
);
|
|
512
512
|
return;
|
|
513
513
|
}
|
|
514
514
|
if (u.includes("-") && l === void 0) {
|
|
515
515
|
const v = u.split("-");
|
|
516
|
-
l = v.reduce((y,
|
|
516
|
+
l = v.reduce((y, g) => y[h(g)], c), u = v.pop(), m = u.toLowerCase(), l != null && l.set || (c = v.reduce((y, g) => y[h(g)], c));
|
|
517
517
|
}
|
|
518
518
|
let s = r;
|
|
519
519
|
if (s === "" && (s = !0), Z(l)) {
|
|
@@ -535,9 +535,9 @@ const { logError: ee } = B(), at = {
|
|
|
535
535
|
setScopeId: () => void 0,
|
|
536
536
|
cloneNode: () => void 0,
|
|
537
537
|
insertStaticContent: () => void 0
|
|
538
|
-
}, { render:
|
|
539
|
-
q(
|
|
540
|
-
const
|
|
538
|
+
}, { render: st } = ce(ot);
|
|
539
|
+
q(ye);
|
|
540
|
+
const it = ["data-scene"], ut = /* @__PURE__ */ U({
|
|
541
541
|
__name: "TresCanvas",
|
|
542
542
|
props: {
|
|
543
543
|
shadows: { type: Boolean, default: void 0 },
|
|
@@ -565,31 +565,31 @@ const st = ["data-scene"], it = /* @__PURE__ */ U({
|
|
|
565
565
|
},
|
|
566
566
|
setup(e) {
|
|
567
567
|
var m;
|
|
568
|
-
const n = e, { logWarning: t } =
|
|
568
|
+
const n = e, { logWarning: t } = L(), r = B(), a = F(new Le());
|
|
569
569
|
ae();
|
|
570
|
-
const o =
|
|
570
|
+
const o = fe(), f = (m = J()) == null ? void 0 : m.appContext.app, i = (l) => U({
|
|
571
571
|
setup() {
|
|
572
572
|
var v;
|
|
573
573
|
const s = (v = J()) == null ? void 0 : v.appContext;
|
|
574
|
-
return s && (s.app = f), I("useTres", l), I("extend", q), () => K(
|
|
574
|
+
return s && (s.app = f), I("useTres", l), I("extend", q), () => K(de, null, o != null && o.default ? o.default() : []);
|
|
575
575
|
}
|
|
576
576
|
}), c = (l) => {
|
|
577
577
|
const s = i(l);
|
|
578
|
-
|
|
578
|
+
st(K(s), a.value);
|
|
579
579
|
}, u = k(() => n.disableRender);
|
|
580
|
-
return
|
|
581
|
-
const l = r, s =
|
|
580
|
+
return me(() => {
|
|
581
|
+
const l = r, s = nt({
|
|
582
582
|
scene: a.value,
|
|
583
583
|
canvas: l,
|
|
584
584
|
windowSize: n.windowSize,
|
|
585
585
|
disableRender: u,
|
|
586
586
|
rendererOptions: n
|
|
587
587
|
});
|
|
588
|
-
|
|
589
|
-
const { registerCamera: v, camera: y, cameras:
|
|
588
|
+
rt({ scene: a.value, contextParts: s });
|
|
589
|
+
const { registerCamera: v, camera: y, cameras: g, deregisterCamera: w } = s;
|
|
590
590
|
c(s);
|
|
591
591
|
const E = () => {
|
|
592
|
-
const C = new
|
|
592
|
+
const C = new $(
|
|
593
593
|
45,
|
|
594
594
|
window.innerWidth / window.innerHeight,
|
|
595
595
|
0.1,
|
|
@@ -597,13 +597,13 @@ const st = ["data-scene"], it = /* @__PURE__ */ U({
|
|
|
597
597
|
);
|
|
598
598
|
C.position.set(3, 3, 3), C.lookAt(0, 0, 0), v(C);
|
|
599
599
|
const _ = D(() => {
|
|
600
|
-
|
|
600
|
+
g.value.length >= 2 && (C.removeFromParent(), w(C), _ == null || _());
|
|
601
601
|
});
|
|
602
602
|
};
|
|
603
603
|
te(
|
|
604
604
|
() => n.camera,
|
|
605
605
|
(C, _) => {
|
|
606
|
-
C
|
|
606
|
+
C && v(C), _ && (_.removeFromParent(), w(_));
|
|
607
607
|
},
|
|
608
608
|
{
|
|
609
609
|
immediate: !0
|
|
@@ -611,7 +611,7 @@ const st = ["data-scene"], it = /* @__PURE__ */ U({
|
|
|
611
611
|
), y.value || (t(
|
|
612
612
|
"No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."
|
|
613
613
|
), E());
|
|
614
|
-
}), (l, s) => (
|
|
614
|
+
}), (l, s) => (pe(), ve("canvas", {
|
|
615
615
|
ref_key: "canvas",
|
|
616
616
|
ref: r,
|
|
617
617
|
"data-scene": a.value.uuid,
|
|
@@ -625,43 +625,43 @@ const st = ["data-scene"], it = /* @__PURE__ */ U({
|
|
|
625
625
|
pointerEvents: "auto",
|
|
626
626
|
touchAction: "none"
|
|
627
627
|
})
|
|
628
|
-
}, null, 12,
|
|
628
|
+
}, null, 12, it));
|
|
629
629
|
}
|
|
630
|
-
}),
|
|
630
|
+
}), lt = [
|
|
631
631
|
"TresCanvas",
|
|
632
632
|
"TresLeches",
|
|
633
633
|
"TresScene"
|
|
634
|
-
],
|
|
634
|
+
], ct = {
|
|
635
635
|
template: {
|
|
636
636
|
compilerOptions: {
|
|
637
|
-
isCustomElement: (e) => e.startsWith("Tres") && !
|
|
637
|
+
isCustomElement: (e) => e.startsWith("Tres") && !lt.includes(e) || e === "primitive"
|
|
638
638
|
}
|
|
639
639
|
}
|
|
640
|
-
},
|
|
640
|
+
}, _t = ct, Pt = {
|
|
641
641
|
install(e) {
|
|
642
|
-
e.component("TresCanvas",
|
|
642
|
+
e.component("TresCanvas", ut);
|
|
643
643
|
}
|
|
644
644
|
};
|
|
645
645
|
export {
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
646
|
+
ut as TresCanvas,
|
|
647
|
+
W as catalogue,
|
|
648
|
+
Pt as default,
|
|
649
649
|
q as extend,
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
650
|
+
vt as isProd,
|
|
651
|
+
We as normalizeColor,
|
|
652
|
+
gt as normalizeVectorFlexibleParam,
|
|
653
|
+
_t as templateCompilerOptions,
|
|
654
|
+
et as trasverseObjects,
|
|
655
|
+
ze as useCamera,
|
|
656
656
|
dt as useLoader,
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
657
|
+
L as useLogger,
|
|
658
|
+
rt as usePointerEventHandler,
|
|
659
|
+
tt as useRaycaster,
|
|
660
660
|
ae as useRenderLoop,
|
|
661
661
|
Qe as useRenderer,
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
662
|
+
wt as useSeek,
|
|
663
|
+
yt as useTexture,
|
|
664
|
+
Ct as useTres,
|
|
665
|
+
at as useTresContext,
|
|
666
|
+
nt as useTresContextProvider
|
|
667
667
|
};
|
package/dist/tres.umd.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* name: @tresjs/core
|
|
3
|
-
* version: v3.2.
|
|
3
|
+
* version: v3.2.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(y,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):(y=typeof globalThis<"u"?globalThis:y||self,c(y.tres={},y.Vue,y.Three,y.VueUseCore))})(this,function(y,c,_,w){"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=(i,f=!1)=>{t.value.some(({uuid:l})=>l===i.uuid)||(f?m(i):t.value.push(i))},o=i=>{t.value=t.value.filter(({uuid:f})=>f!==i.uuid)},m=i=>{const f=i instanceof _.Camera?i:t.value.find(d=>d.uuid===i);if(!f)return;const l=t.value.filter(({uuid:d})=>d!==f.uuid);t.value=[f,...l]};return c.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(i=>{i instanceof _.PerspectiveCamera&&(i.aspect=e.aspectRatio.value),(i instanceof _.PerspectiveCamera||i instanceof _.OrthographicCamera)&&i.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=w.createEventHook(),N=w.createEventHook(),F=w.createEventHook(),S=new _.Clock;let B=0,x=0;const{pause:le,resume:ue,isActive:ce}=w.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:i})=>n.getAttribute(m)===i)}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:w.toValue(t.alpha),depth:w.toValue(t.depth),canvas:w.unrefElement(n),context:w.toValue(t.context),stencil:w.toValue(t.stencil),antialias:w.toValue(t.antialias)===void 0?!0:w.toValue(t.antialias),precision:w.toValue(t.precision),powerPreference:w.toValue(t.powerPreference),premultipliedAlpha:w.toValue(t.premultipliedAlpha),preserveDrawingBuffer:w.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:w.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:w.toValue(t.failIfMajorPerformanceCaveat)})),i=c.shallowRef(new _.WebGLRenderer(m.value));c.watch(m,()=>{i.value.dispose(),i.value=new _.WebGLRenderer(m.value)}),c.watchEffect(()=>{i.value.setSize(a.width.value,a.height.value)});const{pixelRatio:f}=w.useDevicePixelRatio();c.watchEffect(()=>{i.value.setPixelRatio(f.value)});const{logError:l}=L(),u=(()=>{const v=new _.WebGLRenderer,M={shadowMap:{enabled:v.shadowMap.enabled,type:v.shadowMap.type},toneMapping:v.toneMapping,toneMappingExposure:v.toneMappingExposure,outputColorSpace:v.outputColorSpace};return v.dispose(),M})();c.watchEffect(()=>{const v=w.toValue(t.preset);v&&(v in T||l(`Renderer Preset must be one of these: ${Object.keys(T).join(", ")}`),U(i.value,T[v]));const M=(k,O)=>{const D=w.toValue(k),z=()=>{if(v)return J(T[v],O)};if(D!==void 0)return D;const C=z();return C!==void 0?C:J(u,O)},h=(k,O)=>ve(i.value,O,M(k,O));h(t.shadows,"shadowMap.enabled"),h(t.toneMapping,"toneMapping"),h(t.shadowMapType,"shadowMap.type"),we<150&&h(!t.useLegacyLights,"physicallyCorrectLights"),h(t.outputColorSpace,"outputColorSpace"),h(t.toneMappingExposure,"toneMappingExposure");const b=M(t.clearColor,"clearColor");b&&i.value.setClearColor(b?q(b):new _.Color(0))});const{pause:s,resume:g,onLoop:P}=G();return P(()=>{o.value&&!w.toValue(r)&&i.value.render(e,o.value)}),g(),c.onUnmounted(()=>{s(),i.value.dispose(),i.value.forceContextLoss()}),{renderer:i}}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(l=>new Promise((d,u)=>{m.load(l,s=>{s.scene&&Object.assign(s,Z(s.scene)),d(s)},r,s=>u(o("[useLoader] - Failed to load resource",s)))}));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,i=>o(i),()=>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:i,metalnessMap:f,aoMap:l,alphaMap:d,matcap:u}=e;return{map:a?await r(a):null,displacementMap:o?await r(o):null,normalMap:m?await r(m):null,roughnessMap:i?await r(i):null,metalnessMap:f?await r(f):null,aoMap:l?await r(l):null,alphaMap:d?await r(d):null,matcap:u?await r(u):null}}}const ee=(e,{renderer:n,camera:t,raycaster:r})=>{const a=c.computed(()=>n.value.domElement),{x:o,y:m}=w.usePointer({target:a}),{width:i,height:f,top:l,left:d}=w.useElementBounding(a),u=({x:C,y:A})=>{if(a.value)return{x:(C-d.value)/i.value*2-1,y:-((A-l.value)/f.value)*2+1}},s=({x:C,y:A})=>{if(t.value)return r.value.setFromCamera(new _.Vector2(C,A),t.value),r.value.intersectObjects(e.value,!1)},g=C=>{const A=u({x:(C==null?void 0:C.clientX)??o.value,y:(C==null?void 0:C.clientY)??m.value});return A?s(A)||[]:[]},P=c.computed(()=>g()),v=w.createEventHook(),M=w.createEventHook(),h=(C,A)=>{C.trigger({event:A,intersects:g(A)})},b=C=>{h(M,C)};let k;const O=C=>{var A;k=(A=g(C)[0])==null?void 0:A.object},D=C=>{var A;C instanceof PointerEvent&&k===((A=g(C)[0])==null?void 0:A.object)&&h(v,C)},z=C=>M.trigger({event:C,intersects:[]});return a.value.addEventListener("pointerup",D),a.value.addEventListener("pointerdown",O),a.value.addEventListener("pointermove",b),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",b),a.value.removeEventListener("pointerleave",z))}),{intersects:P,onClick:C=>v.on(C).off,onPointerMove:C=>M.on(C).off}};function _e(){const{logWarning:e}=L();function n(r,a,o){let m=null;return r.traverse(i=>{i[a]===o&&(m=i)}),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=s=>{r.value.add(s)},o=s=>{r.value.delete(s)},m=s=>{Object.values(t).forEach(g=>g.delete(s)),o(s)},i=s=>{const{onClick:g,onPointerMove:P,onPointerEnter:v,onPointerLeave:M}=s;g&&t.click.set(s,g),P&&t.pointerMove.set(s,P),v&&t.pointerEnter.set(s,v),M&&t.pointerLeave.set(s,M)};e.userData.tres__registerAtPointerEventHandler=i,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(s=>Array.from(s.keys())).flat()],({uuid:s})=>s)),{onClick:l,onPointerMove:d}=ee(f,n);l(({intersects:s,event:g})=>{var P;s.length&&((P=t.click.get(s[0].object))==null||P(s[0],g))});let u;return d(({intersects:s,event:g})=>{var b,k,O,D;const P=(b=s==null?void 0:s[0])==null?void 0:b.object,{pointerLeave:v,pointerEnter:M,pointerMove:h}=t;u&&u!==P&&((k=v.get(u))==null||k(u,g)),P&&(u!==P&&((O=M.get(P))==null||O(s[0],g)),(D=h.get(P))==null||D(s[0],g)),u=P||null}),{registerObject:i,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(()=>w.toValue(t)?w.useWindowSize():w.useElementSize(w.toValue(n).parentElement)),m=c.computed(()=>o.value.width.value),i=c.computed(()=>o.value.height.value),f=c.computed(()=>m.value/i.value),l={height:i,width:m,aspectRatio:f},d=c.shallowRef(e),{camera:u,cameras:s,registerCamera:g,deregisterCamera:P,setCameraActive:v}=I({sizes:l,scene:e}),{renderer:M}=X({scene:e,canvas:n,options:a,contextParts:{sizes:l,camera:u},disableRender:r}),h={sizes:l,scene:d,camera:u,cameras:c.readonly(s),renderer:M,raycaster:c.shallowRef(new _.Raycaster),controls:c.ref(null),extend:V,registerCamera:g,setCameraActive:v,deregisterCamera:P};return c.provide("useTres",h),h}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,i;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),(i=r==null?void 0:r.geometry)!=null&&i.isBufferGeometry&&(o.userData.tres__geometryViaProp=!0)),o.userData={...o.userData,tres__name:a},o},insert(e,n){var t,r,a,o,m,i,f,l,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:(i=p.userData).tres__registerCamera)==null||f.call(i,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:(l=p.userData).tres__registerAtPointerEventHandler)==null||d.call(l,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=l=>{var u,s;const d=l;l.userData.tres__materialViaProp||(u=d.material)==null||u.dispose(),l.userData.tres__geometryViaProp||(s=d.geometry)==null||s.dispose()},o=p==null?void 0:p.userData.tres__deregisterAtPointerEventHandler,m=p==null?void 0:p.userData.tres__deregisterBlockingObjectAtPointerEventHandler,i=l=>{var d,u;if(!m)throw"could not find tres__deregisterBlockingObjectAtPointerEventHandler on scene's userData";if((u=p==null?void 0:(d=p.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||u.call(d,l),!o)throw"could not find tres__deregisterAtPointerEventHandler on scene's userData";(l!=null&&l.onClick||l!=null&&l.onPointerMove||l!=null&&l.onPointerEnter||l!=null&&l.onPointerLeave)&&(o==null||o(l))},f=l=>{const d=p==null?void 0:p.userData.tres__deregisterCamera;if(!d)throw"could not find tres__deregisterCamera on scene's userData";l.isCamera&&(d==null||d(l))};r.traverse(l=>{a(l),f(l),i==null||i(l)}),a(r),f(r),i==null||i(r)}(n=e.removeFromParent)==null||n.call(e),(t=e.dispose)==null||t.call(e)}},patchProp(e,n,t,r){var a,o,m,i;if(e){let f=e,l=n;if(e.isObject3D&&l==="blocks-pointer-events"){r||r===""?(o=p==null?void 0:(a=p.userData).tres__registerBlockingObjectAtPointerEventHandler)==null||o.call(a,e):(i=p==null?void 0:(m=p.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||i.call(m,e);return}let d=j(l),u=f==null?void 0:f[d];if(l==="args"){const g=e,P=t??[],v=r??[],M=e.userData.tres__name||e.type;M&&P.length&&!ye(P,v)&&(f=Object.assign(g,new E.value[M](...r)));return}if(f.type==="BufferGeometry"){if(l==="args")return;f.setAttribute(j(l),new _.BufferAttribute(...r));return}if(l.includes("-")&&u===void 0){const g=l.split("-");u=g.reduce((P,v)=>P[j(v)],f),l=g.pop(),d=l.toLowerCase(),u!=null&&u.set||(f=g.reduce((P,v)=>P[j(v)],f))}let s=r;if(s===""&&(s=!0),Y(u)){Array.isArray(s)?e[d](...s):e[d](s);return}!(u!=null&&u.set)&&!Y(u)?f[d]=s:u.constructor===s.constructor&&(u!=null&&u.copy)?u==null||u.copy(s):Array.isArray(s)?u.set(...s):!u.isColor&&u.setScalar?u.setScalar(s):u.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},{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){var d;const n=e,{logWarning:t}=L(),r=c.ref(),a=c.shallowRef(new _.Scene);G();const o=c.useSlots(),m=(d=c.getCurrentInstance())==null?void 0:d.appContext.app,i=u=>c.defineComponent({setup(){var g;const s=(g=c.getCurrentInstance())==null?void 0:g.appContext;return s&&(s.app=m),c.provide("useTres",u),c.provide("extend",V),()=>c.h(c.Fragment,null,o!=null&&o.default?o.default():[])}}),f=u=>{const s=i(u);ke(c.h(s),a.value)},l=c.computed(()=>n.disableRender);return c.onMounted(()=>{const u=r,s=re({scene:a.value,canvas:u,windowSize:n.windowSize,disableRender:l,rendererOptions:n});te({scene:a.value,contextParts:s});const{registerCamera:g,camera:P,cameras:v,deregisterCamera:M}=s;f(s);const h=()=>{const b=new _.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);b.position.set(3,3,3),b.lookAt(0,0,0),g(b);const k=c.watchEffect(()=>{v.value.length>=2&&(b.removeFromParent(),M(b),k==null||k())})};c.watch(()=>n.camera,(b,k)=>{b?g(b):k&&(k.removeFromParent(),M(k))},{immediate:!0}),P.value||(t("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),h())}),(u,s)=>(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:u.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)}};y.TresCanvas=oe,y.catalogue=E,y.default=De,y.extend=V,y.isProd=fe,y.normalizeColor=q,y.normalizeVectorFlexibleParam=me,y.templateCompilerOptions=Oe,y.trasverseObjects=Z,y.useCamera=I,y.useLoader=Ce,y.useLogger=L,y.usePointerEventHandler=te,y.useRaycaster=ee,y.useRenderLoop=G,y.useRenderer=X,y.useSeek=_e,y.useTexture=Pe,y.useTres=Me,y.useTresContext=ne,y.useTresContextProvider=re,Object.defineProperties(y,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
|
8
|
+
(function(y,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):(y=typeof globalThis<"u"?globalThis:y||self,c(y.tres={},y.Vue,y.Three,y.VueUseCore))})(this,function(y,c,P,w){"use strict";function oe(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 se=oe(P),I=({sizes:e,scene:n})=>{const t=c.ref([]),r=c.computed(()=>t.value[0]),a=(i,f=!1)=>{t.value.some(({uuid:l})=>l===i.uuid)||(f?m(i):t.value.push(i))},o=i=>{t.value=t.value.filter(({uuid:f})=>f!==i.uuid)},m=i=>{const f=i instanceof P.Camera?i:t.value.find(d=>d.uuid===i);if(!f)return;const l=t.value.filter(({uuid:d})=>d!==f.uuid);t.value=[f,...l]};return c.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(i=>{i instanceof P.PerspectiveCamera&&(i.aspect=e.aspectRatio.value),(i instanceof P.PerspectiveCamera||i instanceof P.OrthographicCamera)&&i.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=w.createEventHook(),$=w.createEventHook(),F=w.createEventHook(),S=new P.Clock;let B=0,x=0;const{pause:ie,resume:le,isActive:ue}=w.useRafFn(()=>{W.trigger({delta:B,elapsed:x,clock:S}),$.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:$.on,onAfterLoop:F.on,pause:ie,resume:le,isActive:ue}),ce=!0,N="[TresJS ▲ ■ ●] ";function L(){function e(r,a){console.error(`${N} ${r}`,a||"")}function n(r){console.warn(`${N} ${r}`)}function t(r,a){}return{logError:e,logWarning:n,logMessage:t}}function fe(e){return typeof e=="number"?[e,e,e]:e instanceof P.Vector3?[e.x,e.y,e.z]:e}function q(e){return e instanceof P.Color?e:Array.isArray(e)?new P.Color(...e):new P.Color(e)}const 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},me=de("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 de(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 pe=(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)},ge=(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:i})=>n.getAttribute(m)===i)}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 ve(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 ye=Array.isArray,we=Number.parseInt(P.REVISION.replace("dev","")),T={realistic:{outputColorSpace:P.SRGBColorSpace,toneMapping:P.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:P.PCFSoftShadowMap}}};function X({scene:e,canvas:n,options:t,disableRender:r,contextParts:{sizes:a,camera:o}}){const m=c.computed(()=>({alpha:w.toValue(t.alpha),depth:w.toValue(t.depth),canvas:w.unrefElement(n),context:w.toValue(t.context),stencil:w.toValue(t.stencil),antialias:w.toValue(t.antialias)===void 0?!0:w.toValue(t.antialias),precision:w.toValue(t.precision),powerPreference:w.toValue(t.powerPreference),premultipliedAlpha:w.toValue(t.premultipliedAlpha),preserveDrawingBuffer:w.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:w.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:w.toValue(t.failIfMajorPerformanceCaveat)})),i=c.shallowRef(new P.WebGLRenderer(m.value));c.watch(m,()=>{i.value.dispose(),i.value=new P.WebGLRenderer(m.value)}),c.watchEffect(()=>{i.value.setSize(a.width.value,a.height.value)});const{pixelRatio:f}=w.useDevicePixelRatio();c.watchEffect(()=>{i.value.setPixelRatio(f.value)});const{logError:l}=L(),u=(()=>{const v=new P.WebGLRenderer,M={shadowMap:{enabled:v.shadowMap.enabled,type:v.shadowMap.type},toneMapping:v.toneMapping,toneMappingExposure:v.toneMappingExposure,outputColorSpace:v.outputColorSpace};return v.dispose(),M})();c.watchEffect(()=>{const v=w.toValue(t.preset);v&&(v in T||l(`Renderer Preset must be one of these: ${Object.keys(T).join(", ")}`),U(i.value,T[v]));const M=(k,h)=>{const D=w.toValue(k),z=()=>{if(v)return J(T[v],h)};if(D!==void 0)return D;const C=z();return C!==void 0?C:J(u,h)},A=(k,h)=>ge(i.value,h,M(k,h));A(t.shadows,"shadowMap.enabled"),A(t.toneMapping,"toneMapping"),A(t.shadowMapType,"shadowMap.type"),we<150&&A(!t.useLegacyLights,"physicallyCorrectLights"),A(t.outputColorSpace,"outputColorSpace"),A(t.toneMappingExposure,"toneMappingExposure");const b=M(t.clearColor,"clearColor");b&&i.value.setClearColor(b?q(b):new P.Color(0))});const{pause:s,resume:g,onLoop:_}=G();return _(()=>{o.value&&!w.toValue(r)&&i.value.render(e,o.value)}),g(),c.onUnmounted(()=>{s(),i.value.dispose(),i.value.forceContextLoss()}),{renderer:i}}const Y=e=>typeof e=="function",Ce=e=>!!e&&e.constructor===Array;function Q(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 _e(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(l=>new Promise((d,u)=>{m.load(l,s=>{s.scene&&Object.assign(s,Q(s.scene)),d(s)},r,s=>u(o("[useLoader] - Failed to load resource",s)))}));return Ce(n)?await Promise.all(f):await f[0]}async function Pe(e){const n=new P.LoadingManager,t=new P.TextureLoader(n),r=a=>new Promise((o,m)=>{t.load(a,i=>o(i),()=>null,()=>{m(new Error("[useTextures] - Failed to load texture"))})});if(ye(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:i,metalnessMap:f,aoMap:l,alphaMap:d,matcap:u}=e;return{map:a?await r(a):null,displacementMap:o?await r(o):null,normalMap:m?await r(m):null,roughnessMap:i?await r(i):null,metalnessMap:f?await r(f):null,aoMap:l?await r(l):null,alphaMap:d?await r(d):null,matcap:u?await r(u):null}}}const Z=(e,{renderer:n,camera:t,raycaster:r})=>{const a=c.computed(()=>n.value.domElement),{x:o,y:m}=w.usePointer({target:a}),{width:i,height:f,top:l,left:d}=w.useElementBounding(a),u=({x:C,y:O})=>{if(a.value)return{x:(C-d.value)/i.value*2-1,y:-((O-l.value)/f.value)*2+1}},s=({x:C,y:O})=>{if(t.value)return r.value.setFromCamera(new P.Vector2(C,O),t.value),r.value.intersectObjects(e.value,!1)},g=C=>{const O=u({x:(C==null?void 0:C.clientX)??o.value,y:(C==null?void 0:C.clientY)??m.value});return O?s(O)||[]:[]},_=c.computed(()=>g()),v=w.createEventHook(),M=w.createEventHook(),A=(C,O)=>{C.trigger({event:O,intersects:g(O)})},b=C=>{A(M,C)};let k;const h=C=>{var O;k=(O=g(C)[0])==null?void 0:O.object},D=C=>{var O;C instanceof PointerEvent&&k===((O=g(C)[0])==null?void 0:O.object)&&A(v,C)},z=C=>M.trigger({event:C,intersects:[]});return a.value.addEventListener("pointerup",D),a.value.addEventListener("pointerdown",h),a.value.addEventListener("pointermove",b),a.value.addEventListener("pointerleave",z),c.onUnmounted(()=>{a!=null&&a.value&&(a.value.removeEventListener("pointerup",D),a.value.removeEventListener("pointerdown",h),a.value.removeEventListener("pointermove",b),a.value.removeEventListener("pointerleave",z))}),{intersects:_,onClick:C=>v.on(C).off,onPointerMove:C=>M.on(C).off}};function Me(){const{logWarning:e}=L();function n(r,a,o){let m=null;return r.traverse(i=>{i[a]===o&&(m=i)}),m||e(`Child with ${a} '${o}' not found.`),m}function t(r,a){return n(r,"name",a)}return{seek:n,seekByName:t}}const ee=({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=s=>{r.value.add(s)},o=s=>{r.value.delete(s)},m=s=>{Object.values(t).forEach(g=>g.delete(s)),o(s)},i=s=>{const{onClick:g,onPointerMove:_,onPointerEnter:v,onPointerLeave:M}=s;g&&t.click.set(s,g),_&&t.pointerMove.set(s,_),v&&t.pointerEnter.set(s,v),M&&t.pointerLeave.set(s,M)};e.userData.tres__registerAtPointerEventHandler=i,e.userData.tres__deregisterAtPointerEventHandler=m,e.userData.tres__registerBlockingObjectAtPointerEventHandler=a,e.userData.tres__deregisterBlockingObjectAtPointerEventHandler=o;const f=c.computed(()=>pe([...Array.from(r.value),...Object.values(t).map(s=>Array.from(s.keys())).flat()],({uuid:s})=>s)),{onClick:l,onPointerMove:d}=Z(f,n);l(({intersects:s,event:g})=>{var _;s.length&&((_=t.click.get(s[0].object))==null||_(s[0],g))});let u;return d(({intersects:s,event:g})=>{var b,k,h,D;const _=(b=s==null?void 0:s[0])==null?void 0:b.object,{pointerLeave:v,pointerEnter:M,pointerMove:A}=t;u&&u!==_&&((k=v.get(u))==null||k(u,g)),_&&(u!==_&&((h=M.get(_))==null||h(s[0],g)),(D=A.get(_))==null||D(s[0],g)),u=_||null}),{registerObject:i,deregisterObject:m}},E=c.ref({}),V=e=>Object.assign(E.value,e);function te({scene:e,canvas:n,windowSize:t,disableRender:r,rendererOptions:a}){const o=c.computed(()=>w.toValue(t)?w.useWindowSize():w.useElementSize(w.toValue(n).parentElement)),m=c.computed(()=>o.value.width.value),i=c.computed(()=>o.value.height.value),f=c.computed(()=>m.value/i.value),l={height:i,width:m,aspectRatio:f},d=c.shallowRef(e),{camera:u,cameras:s,registerCamera:g,deregisterCamera:_,setCameraActive:v}=I({sizes:l,scene:e}),{renderer:M}=X({scene:e,canvas:n,options:a,contextParts:{sizes:l,camera:u},disableRender:r}),A={sizes:l,scene:d,camera:u,cameras:c.readonly(s),renderer:M,raycaster:c.shallowRef(new P.Raycaster),controls:c.ref(null),extend:V,registerCamera:g,setCameraActive:v,deregisterCamera:_};return c.provide("useTres",A),A}function re(){const e=c.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const be=re;function Be(e){}let R=null,p=null;const{logError:ne}=L(),ke={createElement(e,n,t,r){var m,i;if(r||(r={}),r.args||(r.args=[]),e==="template"||me(e))return null;let a=e.replace("Tres",""),o;if(e==="primitive"){(r==null?void 0:r.object)===void 0&&ne("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||ne(`${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),(i=r==null?void 0:r.geometry)!=null&&i.isBufferGeometry&&(o.userData.tres__geometryViaProp=!0)),o.userData={...o.userData,tres__name:a},o},insert(e,n){var t,r,a,o,m,i,f,l,d,u;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 n===null&&((m=e==null?void 0:e.__vnode)!=null&&m.type.includes("Controls")||(i=e==null?void 0:e.__vnode)!=null&&i.type.includes("Helper"))&&(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";(l=p==null?void 0:(f=p.userData).tres__registerCamera)==null||l.call(f,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";(u=p==null?void 0:(d=p.userData).tres__registerAtPointerEventHandler)==null||u.call(d,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=l=>{var u,s;const d=l;l.userData.tres__materialViaProp||(u=d.material)==null||u.dispose(),l.userData.tres__geometryViaProp||(s=d.geometry)==null||s.dispose()},o=p==null?void 0:p.userData.tres__deregisterAtPointerEventHandler,m=p==null?void 0:p.userData.tres__deregisterBlockingObjectAtPointerEventHandler,i=l=>{var d,u;if(!m)throw"could not find tres__deregisterBlockingObjectAtPointerEventHandler on scene's userData";if((u=p==null?void 0:(d=p.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||u.call(d,l),!o)throw"could not find tres__deregisterAtPointerEventHandler on scene's userData";(l!=null&&l.onClick||l!=null&&l.onPointerMove||l!=null&&l.onPointerEnter||l!=null&&l.onPointerLeave)&&(o==null||o(l))},f=l=>{const d=p==null?void 0:p.userData.tres__deregisterCamera;if(!d)throw"could not find tres__deregisterCamera on scene's userData";l.isCamera&&(d==null||d(l))};r.traverse(l=>{a(l),f(l),i==null||i(l)}),a(r),f(r),i==null||i(r)}(n=e.removeFromParent)==null||n.call(e),(t=e.dispose)==null||t.call(e)}},patchProp(e,n,t,r){var a,o,m,i;if(e){let f=e,l=n;if(e.isObject3D&&l==="blocks-pointer-events"){r||r===""?(o=p==null?void 0:(a=p.userData).tres__registerBlockingObjectAtPointerEventHandler)==null||o.call(a,e):(i=p==null?void 0:(m=p.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||i.call(m,e);return}let d=j(l),u=f==null?void 0:f[d];if(l==="args"){const g=e,_=t??[],v=r??[],M=e.userData.tres__name||e.type;M&&_.length&&!ve(_,v)&&(f=Object.assign(g,new E.value[M](...r)));return}if(f.type==="BufferGeometry"){if(l==="args")return;f.setAttribute(j(l),new P.BufferAttribute(...r));return}if(l.includes("-")&&u===void 0){const g=l.split("-");u=g.reduce((_,v)=>_[j(v)],f),l=g.pop(),d=l.toLowerCase(),u!=null&&u.set||(f=g.reduce((_,v)=>_[j(v)],f))}let s=r;if(s===""&&(s=!0),Y(u)){Array.isArray(s)?e[d](...s):e[d](s);return}!(u!=null&&u.set)&&!Y(u)?f[d]=s:u.constructor===s.constructor&&(u!=null&&u.copy)?u==null||u.copy(s):Array.isArray(s)?u.set(...s):!u.isColor&&u.setScalar?u.setScalar(s):u.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},{render:Ae}=c.createRenderer(ke);V(se);const Oe=["data-scene"],ae=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){var d;const n=e,{logWarning:t}=L(),r=c.ref(),a=c.shallowRef(new P.Scene);G();const o=c.useSlots(),m=(d=c.getCurrentInstance())==null?void 0:d.appContext.app,i=u=>c.defineComponent({setup(){var g;const s=(g=c.getCurrentInstance())==null?void 0:g.appContext;return s&&(s.app=m),c.provide("useTres",u),c.provide("extend",V),()=>c.h(c.Fragment,null,o!=null&&o.default?o.default():[])}}),f=u=>{const s=i(u);Ae(c.h(s),a.value)},l=c.computed(()=>n.disableRender);return c.onMounted(()=>{const u=r,s=te({scene:a.value,canvas:u,windowSize:n.windowSize,disableRender:l,rendererOptions:n});ee({scene:a.value,contextParts:s});const{registerCamera:g,camera:_,cameras:v,deregisterCamera:M}=s;f(s);const A=()=>{const b=new P.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);b.position.set(3,3,3),b.lookAt(0,0,0),g(b);const k=c.watchEffect(()=>{v.value.length>=2&&(b.removeFromParent(),M(b),k==null||k())})};c.watch(()=>n.camera,(b,k)=>{b&&g(b),k&&(k.removeFromParent(),M(k))},{immediate:!0}),_.value||(t("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),A())}),(u,s)=>(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:u.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none"})},null,12,Oe))}}),he=["TresCanvas","TresLeches","TresScene"],De={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!he.includes(e)||e==="primitive"}}},Le={install(e){e.component("TresCanvas",ae)}};y.TresCanvas=ae,y.catalogue=E,y.default=Le,y.extend=V,y.isProd=ce,y.normalizeColor=q,y.normalizeVectorFlexibleParam=fe,y.templateCompilerOptions=De,y.trasverseObjects=Q,y.useCamera=I,y.useLoader=_e,y.useLogger=L,y.usePointerEventHandler=ee,y.useRaycaster=Z,y.useRenderLoop=G,y.useRenderer=X,y.useSeek=Me,y.useTexture=Pe,y.useTres=be,y.useTresContext=re,y.useTresContextProvider=te,Object.defineProperties(y,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -9,3 +9,7 @@ export declare const get: <T>(obj: any, path: string | string[]) => T | undefine
|
|
|
9
9
|
export declare const set: (obj: any, path: string | string[], value: any) => void;
|
|
10
10
|
export declare function deepEqual(a: any, b: any): boolean;
|
|
11
11
|
export declare function deepArrayEqual(arr1: any[], arr2: any[]): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* TypeSafe version of Array.isArray
|
|
14
|
+
*/
|
|
15
|
+
export declare const isArray: (a: any) => a is any[] | readonly any[];
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tresjs/core",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "3.2.
|
|
4
|
+
"version": "3.2.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/)",
|