@tresjs/core 2.4.0-next.2 → 2.4.0-next.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/composables/useCamera/index.d.ts +1 -2
- package/dist/tres.js +132 -135
- package/dist/tres.umd.cjs +2 -2
- package/package.json +1 -1
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { ComputedRef } from "vue";
|
|
2
2
|
export declare function useCamera(sizes: any): {
|
|
3
|
-
cameras: import("vue").
|
|
3
|
+
cameras: import("vue").ShallowReactive<TresCamera[]>;
|
|
4
4
|
camera: ComputedRef<any>;
|
|
5
5
|
addCamera: (camera: TresCamera, active?: boolean) => void;
|
|
6
6
|
setCameraToActive: (cameraId: string) => void;
|
|
7
|
-
clearCameras: () => void;
|
|
8
7
|
};
|
package/dist/tres.js
CHANGED
|
@@ -1,55 +1,52 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* name: @tresjs/core
|
|
3
|
-
* version: v2.4.0-next.
|
|
3
|
+
* version: v2.4.0-next.3
|
|
4
4
|
* (c) 2023
|
|
5
5
|
* description: Declarative ThreeJS using Vue Components
|
|
6
6
|
* author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
|
|
7
7
|
*/
|
|
8
|
-
import {
|
|
8
|
+
import { shallowReactive as $, computed as A, watchEffect as U, shallowRef as j, ref as Y, toRefs as oe, watch as W, provide as ae, inject as re, onUnmounted as ie, reactive as Te, readonly as z, createRenderer as Ce, defineComponent as Pe, useSlots as _e, onMounted as xe, openBlock as he, createElementBlock as Ae, normalizeStyle as Re } from "vue";
|
|
9
9
|
import * as Se from "three";
|
|
10
|
-
import { PerspectiveCamera as se, Clock as Le, Vector3 as Oe, Color as G, SRGBColorSpace as ke, ACESFilmicToneMapping as Ie, PCFSoftShadowMap as Be, PCFShadowMap as De, LinearSRGBColorSpace as
|
|
11
|
-
import { createEventHook as
|
|
10
|
+
import { PerspectiveCamera as se, Clock as Le, Vector3 as Oe, Color as G, SRGBColorSpace as ke, ACESFilmicToneMapping as Ie, PCFSoftShadowMap as Be, PCFShadowMap as De, LinearSRGBColorSpace as X, NoToneMapping as Q, WebGLRenderer as je, LoadingManager as Ve, TextureLoader as ze, Raycaster as Ge, Vector2 as He, BufferAttribute as Fe, Scene as Ne } from "three";
|
|
11
|
+
import { createEventHook as R, useRafFn as We, useDevicePixelRatio as $e, unrefElement as Z, toValue as m, usePointer as Ue, useElementBounding as Ye, useWindowSize as qe, useElementSize as Ke } from "@vueuse/core";
|
|
12
12
|
function Je(e) {
|
|
13
|
-
const n =
|
|
14
|
-
function t(
|
|
15
|
-
n.
|
|
13
|
+
const n = $([]), o = A(() => n.find((i) => i.userData.IS_ACTIVE_CAMERA));
|
|
14
|
+
function t(i, s = !0) {
|
|
15
|
+
n.push(i), s && r(i.uuid);
|
|
16
16
|
}
|
|
17
|
-
function r(
|
|
18
|
-
const
|
|
19
|
-
|
|
17
|
+
function r(i) {
|
|
18
|
+
const s = n.find((a) => a.uuid === i);
|
|
19
|
+
s && (n.forEach((a) => a.userData.IS_ACTIVE_CAMERA = !1), s.userData.IS_ACTIVE_CAMERA = !0);
|
|
20
20
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
var c;
|
|
26
|
-
(c = e.aspectRatio) != null && c.value && (console.log("camera watcher aspectRatio", e.aspectRatio.value), n.value.forEach((a) => {
|
|
27
|
-
a instanceof se && (a.aspect = e.aspectRatio.value), a.updateProjectionMatrix();
|
|
21
|
+
return U(() => {
|
|
22
|
+
var i;
|
|
23
|
+
(i = e.aspectRatio) != null && i.value && (console.log("camera watcher aspectRatio", e.aspectRatio.value), n.forEach((s) => {
|
|
24
|
+
s instanceof se && (s.aspect = e.aspectRatio.value), s.updateProjectionMatrix();
|
|
28
25
|
}));
|
|
29
26
|
}), {
|
|
30
27
|
cameras: n,
|
|
31
28
|
camera: o,
|
|
32
29
|
addCamera: t,
|
|
33
|
-
setCameraToActive: r
|
|
34
|
-
clearCameras
|
|
30
|
+
setCameraToActive: r
|
|
31
|
+
/* clearCameras, */
|
|
35
32
|
};
|
|
36
33
|
}
|
|
37
|
-
const ce =
|
|
38
|
-
let
|
|
34
|
+
const ce = R(), ue = R(), q = R(), h = new Le();
|
|
35
|
+
let B = 0, D = 0;
|
|
39
36
|
const { pause: Xe, resume: Qe, isActive: Ze } = We(
|
|
40
37
|
() => {
|
|
41
|
-
ce.trigger({ delta:
|
|
38
|
+
ce.trigger({ delta: B, elapsed: D, clock: h }), ue.trigger({ delta: B, elapsed: D, clock: h }), q.trigger({ delta: B, elapsed: D, clock: h });
|
|
42
39
|
},
|
|
43
40
|
{ immediate: !1 }
|
|
44
41
|
);
|
|
45
|
-
|
|
46
|
-
|
|
42
|
+
q.on(() => {
|
|
43
|
+
B = h.getDelta(), D = h.getElapsedTime();
|
|
47
44
|
});
|
|
48
45
|
function fe() {
|
|
49
46
|
return {
|
|
50
47
|
onBeforeLoop: ce.on,
|
|
51
48
|
onLoop: ue.on,
|
|
52
|
-
onAfterLoop:
|
|
49
|
+
onAfterLoop: q.on,
|
|
53
50
|
pause: Xe,
|
|
54
51
|
resume: Qe,
|
|
55
52
|
isActive: Ze
|
|
@@ -75,30 +72,30 @@ const H = {
|
|
|
75
72
|
for (const o of Object.keys(n))
|
|
76
73
|
n[o] instanceof Object && Object.assign(n[o], le(e[o], n[o]));
|
|
77
74
|
return Object.assign(e || {}, n), e;
|
|
78
|
-
}, tt = "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", nt = /* @__PURE__ */
|
|
79
|
-
function
|
|
75
|
+
}, tt = "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", nt = /* @__PURE__ */ ot(tt);
|
|
76
|
+
function I(e) {
|
|
80
77
|
return e.replace(/-([a-z])/g, (n, o) => o.toUpperCase());
|
|
81
78
|
}
|
|
82
|
-
function
|
|
79
|
+
function ot(e, n) {
|
|
83
80
|
const o = /* @__PURE__ */ Object.create(null), t = e.split(",");
|
|
84
81
|
for (let r = 0; r < t.length; r++)
|
|
85
82
|
o[t[r]] = !0;
|
|
86
83
|
return n ? (r) => !!o[r.toLowerCase()] : (r) => !!o[r];
|
|
87
84
|
}
|
|
88
|
-
const
|
|
85
|
+
const at = (e, n) => {
|
|
89
86
|
const o = /* @__PURE__ */ new Set(), t = [];
|
|
90
87
|
for (const r of e) {
|
|
91
88
|
const i = n(r);
|
|
92
89
|
o.has(i) || (o.add(i), t.push(r));
|
|
93
90
|
}
|
|
94
91
|
return t;
|
|
95
|
-
}, _t = !0,
|
|
92
|
+
}, _t = !0, ee = "[TresJS ▲ ■ ●] ";
|
|
96
93
|
function P() {
|
|
97
94
|
function e(t, r) {
|
|
98
|
-
console.error(`${
|
|
95
|
+
console.error(`${ee} ${t}`, r || "");
|
|
99
96
|
}
|
|
100
97
|
function n(t) {
|
|
101
|
-
console.warn(`${
|
|
98
|
+
console.warn(`${ee} ${t}`);
|
|
102
99
|
}
|
|
103
100
|
function o(t, r) {
|
|
104
101
|
}
|
|
@@ -109,11 +106,11 @@ function P() {
|
|
|
109
106
|
};
|
|
110
107
|
}
|
|
111
108
|
function rt(e, n, o) {
|
|
112
|
-
const t =
|
|
109
|
+
const t = j(), r = Y(!1), {
|
|
113
110
|
alpha: i = !0,
|
|
114
|
-
antialias:
|
|
111
|
+
antialias: s = !0,
|
|
115
112
|
depth: a,
|
|
116
|
-
logarithmicDepthBuffer:
|
|
113
|
+
logarithmicDepthBuffer: c,
|
|
117
114
|
failIfMajorPerformanceCaveat: u,
|
|
118
115
|
precision: l,
|
|
119
116
|
premultipliedAlpha: p,
|
|
@@ -121,55 +118,55 @@ function rt(e, n, o) {
|
|
|
121
118
|
shadows: M = !1,
|
|
122
119
|
shadowMapType: E = De,
|
|
123
120
|
useLegacyLights: b = !1,
|
|
124
|
-
outputColorSpace: g =
|
|
125
|
-
toneMapping: y =
|
|
121
|
+
outputColorSpace: g = X,
|
|
122
|
+
toneMapping: y = Q,
|
|
126
123
|
toneMappingExposure: _ = 1,
|
|
127
|
-
context:
|
|
128
|
-
powerPreference:
|
|
129
|
-
preserveDrawingBuffer:
|
|
130
|
-
clearColor:
|
|
124
|
+
context: S = void 0,
|
|
125
|
+
powerPreference: L = "default",
|
|
126
|
+
preserveDrawingBuffer: O = !1,
|
|
127
|
+
clearColor: C,
|
|
131
128
|
windowSize: f = !1,
|
|
132
129
|
preset: v = void 0
|
|
133
|
-
} =
|
|
134
|
-
t.value && (t.value.setSize(V.width.value, V.height.value), t.value.setPixelRatio(Math.min(
|
|
135
|
-
},
|
|
130
|
+
} = oe(o), { cameras: Et, setRenderer: ge, sizes: V } = n, { logError: we, logWarning: yt } = P(), { pixelRatio: k } = $e(), { pause: be, resume: Ee } = fe(), K = () => {
|
|
131
|
+
t.value && (t.value.setSize(V.width.value, V.height.value), t.value.setPixelRatio(Math.min(k.value, 2)));
|
|
132
|
+
}, J = () => {
|
|
136
133
|
if (!t.value)
|
|
137
134
|
return;
|
|
138
|
-
const
|
|
139
|
-
if (
|
|
140
|
-
|
|
135
|
+
const T = m(v);
|
|
136
|
+
if (T) {
|
|
137
|
+
T in H || we("Renderer Preset must be one of these: " + Object.keys(H).join(", ")), le(t.value, H[T]);
|
|
141
138
|
return;
|
|
142
139
|
}
|
|
143
|
-
t.value.shadowMap.enabled = m(M), t.value.shadowMap.type = m(E), t.value.toneMapping = m(y) ||
|
|
140
|
+
t.value.shadowMap.enabled = m(M), t.value.shadowMap.type = m(E), t.value.toneMapping = m(y) || Q, t.value.toneMappingExposure = m(_), t.value.outputColorSpace = m(g) || X, C != null && C.value && t.value.setClearColor(et(m(C))), t.value.useLegacyLights = m(b);
|
|
144
141
|
}, ye = () => {
|
|
145
|
-
const
|
|
146
|
-
console.count("init renderer"),
|
|
147
|
-
canvas:
|
|
142
|
+
const T = Z(e);
|
|
143
|
+
console.count("init renderer"), T && (t.value = new je({
|
|
144
|
+
canvas: T,
|
|
148
145
|
alpha: m(i),
|
|
149
|
-
antialias: m(
|
|
150
|
-
context: m(
|
|
146
|
+
antialias: m(s),
|
|
147
|
+
context: m(S),
|
|
151
148
|
depth: m(a),
|
|
152
149
|
failIfMajorPerformanceCaveat: m(u),
|
|
153
|
-
logarithmicDepthBuffer: m(
|
|
154
|
-
powerPreference: m(
|
|
150
|
+
logarithmicDepthBuffer: m(c),
|
|
151
|
+
powerPreference: m(L),
|
|
155
152
|
precision: m(l),
|
|
156
153
|
stencil: m(d),
|
|
157
|
-
preserveDrawingBuffer: m(
|
|
154
|
+
preserveDrawingBuffer: m(O),
|
|
158
155
|
premultipliedAlpha: m(p)
|
|
159
|
-
}), ge(t.value),
|
|
156
|
+
}), ge(t.value), J(), K(), Ee(), r.value = !0);
|
|
160
157
|
}, Me = () => {
|
|
161
158
|
t.value && (t.value.dispose(), t.value = void 0, r.value = !1, be());
|
|
162
159
|
};
|
|
163
|
-
return
|
|
164
|
-
var
|
|
165
|
-
((
|
|
160
|
+
return U(() => {
|
|
161
|
+
var T;
|
|
162
|
+
((T = V.aspectRatio) != null && T.value || k != null && k.value) && K();
|
|
166
163
|
}), W(
|
|
167
|
-
[M, E, g, b, y, _,
|
|
168
|
-
|
|
164
|
+
[M, E, g, b, y, _, C],
|
|
165
|
+
J
|
|
169
166
|
), W(
|
|
170
167
|
e,
|
|
171
168
|
() => {
|
|
172
|
-
|
|
169
|
+
Z(e) && ye();
|
|
173
170
|
},
|
|
174
171
|
{ immediate: !0, deep: !0 }
|
|
175
172
|
), {
|
|
@@ -178,7 +175,7 @@ function rt(e, n, o) {
|
|
|
178
175
|
dispose: Me
|
|
179
176
|
};
|
|
180
177
|
}
|
|
181
|
-
const
|
|
178
|
+
const te = (e) => typeof e == "function", de = (e) => !!e && e.constructor === Array;
|
|
182
179
|
function it(e) {
|
|
183
180
|
const n = { nodes: {}, materials: {} };
|
|
184
181
|
return e && e.traverse((o) => {
|
|
@@ -186,11 +183,11 @@ function it(e) {
|
|
|
186
183
|
}), n;
|
|
187
184
|
}
|
|
188
185
|
async function xt(e, n, o, t, r) {
|
|
189
|
-
const { logError: i } = P(),
|
|
190
|
-
r && r(
|
|
191
|
-
const
|
|
186
|
+
const { logError: i } = P(), s = new e();
|
|
187
|
+
r && r(s), o && o(s);
|
|
188
|
+
const c = (Array.isArray(n) ? n : [n]).map(
|
|
192
189
|
(u) => new Promise((l, p) => {
|
|
193
|
-
|
|
190
|
+
s.load(
|
|
194
191
|
u,
|
|
195
192
|
(d) => {
|
|
196
193
|
d.scene && Object.assign(d, it(d.scene)), l(d);
|
|
@@ -200,16 +197,16 @@ async function xt(e, n, o, t, r) {
|
|
|
200
197
|
);
|
|
201
198
|
})
|
|
202
199
|
);
|
|
203
|
-
return de(n) ? await Promise.all(
|
|
200
|
+
return de(n) ? await Promise.all(c) : await c[0];
|
|
204
201
|
}
|
|
205
202
|
async function ht(e) {
|
|
206
|
-
const n = new Ve(), o = new ze(n), t = (r) => new Promise((i,
|
|
203
|
+
const n = new Ve(), o = new ze(n), t = (r) => new Promise((i, s) => {
|
|
207
204
|
o.load(
|
|
208
205
|
r,
|
|
209
206
|
(a) => i(a),
|
|
210
207
|
() => null,
|
|
211
208
|
() => {
|
|
212
|
-
|
|
209
|
+
s(new Error("[useTextures] - Failed to load texture"));
|
|
213
210
|
}
|
|
214
211
|
);
|
|
215
212
|
});
|
|
@@ -220,9 +217,9 @@ async function ht(e) {
|
|
|
220
217
|
const {
|
|
221
218
|
map: r,
|
|
222
219
|
displacementMap: i,
|
|
223
|
-
normalMap:
|
|
220
|
+
normalMap: s,
|
|
224
221
|
roughnessMap: a,
|
|
225
|
-
metalnessMap:
|
|
222
|
+
metalnessMap: c,
|
|
226
223
|
aoMap: u,
|
|
227
224
|
alphaMap: l,
|
|
228
225
|
matcap: p
|
|
@@ -230,9 +227,9 @@ async function ht(e) {
|
|
|
230
227
|
return {
|
|
231
228
|
map: r ? await t(r) : null,
|
|
232
229
|
displacementMap: i ? await t(i) : null,
|
|
233
|
-
normalMap:
|
|
230
|
+
normalMap: s ? await t(s) : null,
|
|
234
231
|
roughnessMap: a ? await t(a) : null,
|
|
235
|
-
metalnessMap:
|
|
232
|
+
metalnessMap: c ? await t(c) : null,
|
|
236
233
|
aoMap: u ? await t(u) : null,
|
|
237
234
|
alphaMap: l ? await t(l) : null,
|
|
238
235
|
matcap: p ? await t(p) : null
|
|
@@ -246,7 +243,7 @@ function st() {
|
|
|
246
243
|
}
|
|
247
244
|
const me = Symbol();
|
|
248
245
|
function At() {
|
|
249
|
-
const e =
|
|
246
|
+
const e = $({
|
|
250
247
|
uuid: st(),
|
|
251
248
|
camera: void 0,
|
|
252
249
|
cameras: [],
|
|
@@ -264,14 +261,14 @@ function At() {
|
|
|
264
261
|
}
|
|
265
262
|
const t = {
|
|
266
263
|
state: e,
|
|
267
|
-
...
|
|
264
|
+
...oe(e),
|
|
268
265
|
getState: n,
|
|
269
266
|
setState: o
|
|
270
267
|
};
|
|
271
|
-
return
|
|
268
|
+
return ae(me, t), t;
|
|
272
269
|
}
|
|
273
270
|
const ct = () => re(me, {
|
|
274
|
-
state:
|
|
271
|
+
state: $({
|
|
275
272
|
camera: void 0,
|
|
276
273
|
cameras: [],
|
|
277
274
|
canvas: void 0,
|
|
@@ -280,14 +277,14 @@ const ct = () => re(me, {
|
|
|
280
277
|
pointerEventHandler: void 0
|
|
281
278
|
})
|
|
282
279
|
}), ut = (e) => {
|
|
283
|
-
const { state: n } = ct(), o =
|
|
280
|
+
const { state: n } = ct(), o = A(() => {
|
|
284
281
|
var f;
|
|
285
282
|
return (f = n.canvas) == null ? void 0 : f.value;
|
|
286
|
-
}), { x: t, y: r } = Ue({ target: o }), { width: i, height:
|
|
283
|
+
}), { x: t, y: r } = Ue({ target: o }), { width: i, height: s, top: a, left: c } = Ye(o), u = new Ge(), l = ({ x: f, y: v }) => {
|
|
287
284
|
if (o.value)
|
|
288
285
|
return {
|
|
289
|
-
x: (f -
|
|
290
|
-
y: -((v - a.value) /
|
|
286
|
+
x: (f - c.value) / i.value * 2 - 1,
|
|
287
|
+
y: -((v - a.value) / s.value) * 2 + 1
|
|
291
288
|
};
|
|
292
289
|
}, p = ({ x: f, y: v }) => {
|
|
293
290
|
if (n.camera)
|
|
@@ -298,23 +295,23 @@ const ct = () => re(me, {
|
|
|
298
295
|
y: (f == null ? void 0 : f.clientY) ?? r.value
|
|
299
296
|
});
|
|
300
297
|
return v ? p(v) || [] : [];
|
|
301
|
-
}, M =
|
|
298
|
+
}, M = A(() => d()), E = R(), b = R(), g = (f, v) => {
|
|
302
299
|
f.trigger({ event: v, intersects: d(v) });
|
|
303
300
|
}, y = (f) => {
|
|
304
301
|
g(b, f);
|
|
305
302
|
};
|
|
306
303
|
let _;
|
|
307
|
-
const
|
|
304
|
+
const S = (f) => {
|
|
308
305
|
var v;
|
|
309
306
|
_ = (v = d(f)[0]) == null ? void 0 : v.object;
|
|
310
|
-
},
|
|
307
|
+
}, L = (f) => {
|
|
311
308
|
var v;
|
|
312
309
|
f instanceof PointerEvent && _ === ((v = d(f)[0]) == null ? void 0 : v.object) && g(E, f);
|
|
313
|
-
},
|
|
314
|
-
o != null && o.value && (o.value.addEventListener("pointerup",
|
|
310
|
+
}, O = (f) => b.trigger({ event: f, intersects: [] }), C = U(() => {
|
|
311
|
+
o != null && o.value && (o.value.addEventListener("pointerup", L), o.value.addEventListener("pointerdown", S), o.value.addEventListener("pointermove", y), o.value.addEventListener("pointerleave", O), C());
|
|
315
312
|
});
|
|
316
313
|
return ie(() => {
|
|
317
|
-
o != null && o.value && (o.value.removeEventListener("pointerup",
|
|
314
|
+
o != null && o.value && (o.value.removeEventListener("pointerup", L), o.value.removeEventListener("pointerdown", S), o.value.removeEventListener("pointermove", y), o.value.removeEventListener("pointerleave", O));
|
|
318
315
|
}), {
|
|
319
316
|
intersects: M,
|
|
320
317
|
onClick: (f) => E.on(f).off,
|
|
@@ -324,10 +321,10 @@ const ct = () => re(me, {
|
|
|
324
321
|
function Rt() {
|
|
325
322
|
const { logWarning: e } = P();
|
|
326
323
|
function n(t, r, i) {
|
|
327
|
-
let
|
|
324
|
+
let s = null;
|
|
328
325
|
return t.traverse((a) => {
|
|
329
|
-
a[r] === i && (
|
|
330
|
-
}),
|
|
326
|
+
a[r] === i && (s = a);
|
|
327
|
+
}), s || e(`Child with ${r} '${i}' not found.`), s;
|
|
331
328
|
}
|
|
332
329
|
function o(t, r) {
|
|
333
330
|
return n(t, "name", r);
|
|
@@ -338,35 +335,35 @@ function Rt() {
|
|
|
338
335
|
};
|
|
339
336
|
}
|
|
340
337
|
const St = () => {
|
|
341
|
-
const e =
|
|
338
|
+
const e = Te({
|
|
342
339
|
click: /* @__PURE__ */ new Map(),
|
|
343
340
|
pointerMove: /* @__PURE__ */ new Map(),
|
|
344
341
|
pointerEnter: /* @__PURE__ */ new Map(),
|
|
345
342
|
pointerLeave: /* @__PURE__ */ new Map()
|
|
346
343
|
}), n = (a) => {
|
|
347
|
-
Object.values(e).forEach((
|
|
344
|
+
Object.values(e).forEach((c) => c.delete(a));
|
|
348
345
|
}, o = (a) => {
|
|
349
|
-
const { onClick:
|
|
350
|
-
|
|
346
|
+
const { onClick: c, onPointerMove: u, onPointerEnter: l, onPointerLeave: p } = a;
|
|
347
|
+
c && e.click.set(a, c), u && e.pointerMove.set(a, u), l && e.pointerEnter.set(a, l), p && e.pointerLeave.set(a, p), a.addEventListener("removed", () => {
|
|
351
348
|
a.traverse((d) => {
|
|
352
349
|
n(d);
|
|
353
350
|
}), n(a);
|
|
354
351
|
});
|
|
355
|
-
}, t =
|
|
356
|
-
() =>
|
|
352
|
+
}, t = A(
|
|
353
|
+
() => at(
|
|
357
354
|
Object.values(e).map((a) => Array.from(a.keys())).flat(),
|
|
358
355
|
({ uuid: a }) => a
|
|
359
356
|
)
|
|
360
357
|
), { onClick: r, onPointerMove: i } = ut(t);
|
|
361
|
-
r(({ intersects: a, event:
|
|
358
|
+
r(({ intersects: a, event: c }) => {
|
|
362
359
|
var u;
|
|
363
|
-
a.length && ((u = e.click.get(a[0].object)) == null || u(a[0],
|
|
360
|
+
a.length && ((u = e.click.get(a[0].object)) == null || u(a[0], c));
|
|
364
361
|
});
|
|
365
|
-
let
|
|
366
|
-
return i(({ intersects: a, event:
|
|
362
|
+
let s;
|
|
363
|
+
return i(({ intersects: a, event: c }) => {
|
|
367
364
|
var M, E, b, g;
|
|
368
365
|
const u = (M = a == null ? void 0 : a[0]) == null ? void 0 : M.object, { pointerLeave: l, pointerEnter: p, pointerMove: d } = e;
|
|
369
|
-
|
|
366
|
+
s && s !== u && ((E = l.get(s)) == null || E(s, c)), u && (s !== u && ((b = p.get(u)) == null || b(a[0], c)), (g = d.get(u)) == null || g(a[0], c)), s = u || null;
|
|
370
367
|
}), {
|
|
371
368
|
registerObject: o,
|
|
372
369
|
deregisterObject: n
|
|
@@ -375,25 +372,25 @@ const St = () => {
|
|
|
375
372
|
function lt(e, n, o) {
|
|
376
373
|
var b;
|
|
377
374
|
e || ft("A scene most be provided to the TresProvider");
|
|
378
|
-
const { width: t, height: r } = m(o.windowSize) == !0 || m(o.windowSize) === "" || m(o.windowSize) === "true" || n.value === void 0 ? qe() : Ke((b = n.value) == null ? void 0 : b.parentElement), i =
|
|
375
|
+
const { width: t, height: r } = m(o.windowSize) == !0 || m(o.windowSize) === "" || m(o.windowSize) === "true" || n.value === void 0 ? qe() : Ke((b = n.value) == null ? void 0 : b.parentElement), i = A(() => t.value / r.value), s = {
|
|
379
376
|
height: r,
|
|
380
377
|
width: t,
|
|
381
378
|
aspectRatio: i
|
|
382
|
-
}, a =
|
|
379
|
+
}, a = j(e), { camera: c, cameras: u, addCamera: l, setCameraToActive: p } = Je(s), d = j(null);
|
|
383
380
|
function M(g) {
|
|
384
381
|
d.value || (d.value = g);
|
|
385
382
|
}
|
|
386
383
|
const E = {
|
|
387
384
|
scene: z(a),
|
|
388
385
|
cameras: z(u),
|
|
389
|
-
camera:
|
|
386
|
+
camera: c,
|
|
390
387
|
addCamera: l,
|
|
391
388
|
setCameraToActive: p,
|
|
392
389
|
renderer: z(d),
|
|
393
390
|
setRenderer: M,
|
|
394
|
-
sizes:
|
|
391
|
+
sizes: s
|
|
395
392
|
};
|
|
396
|
-
return
|
|
393
|
+
return ae("useTres", E), E;
|
|
397
394
|
}
|
|
398
395
|
function Lt() {
|
|
399
396
|
const e = re("useTres");
|
|
@@ -401,47 +398,47 @@ function Lt() {
|
|
|
401
398
|
throw new Error("useTresContext must be used within a TresProvider");
|
|
402
399
|
return e;
|
|
403
400
|
}
|
|
404
|
-
const pe =
|
|
401
|
+
const pe = Y({}), ve = (e) => void Object.assign(pe.value, e), F = {
|
|
405
402
|
GEOMETRY_VIA_PROP: "tres__geometryViaProp",
|
|
406
403
|
MATERIAL_VIA_PROP: "tres__materialViaProp",
|
|
407
404
|
REGISTER_AT_POINTER_EVENT_HANDLER: "tres__registerAtPointerEventHandler"
|
|
408
405
|
};
|
|
409
406
|
let N = null, x = null;
|
|
410
|
-
const { logError:
|
|
407
|
+
const { logError: ne } = P(), dt = {
|
|
411
408
|
createElement(e, n, o, t) {
|
|
412
|
-
var
|
|
409
|
+
var c, u;
|
|
413
410
|
if (t || (t = {}), t.args || (t.args = []), e === "template" || nt(e))
|
|
414
411
|
return null;
|
|
415
412
|
let r = e.replace("Tres", ""), i;
|
|
416
413
|
if (e === "primitive") {
|
|
417
|
-
(t == null ? void 0 : t.object) === void 0 &&
|
|
414
|
+
(t == null ? void 0 : t.object) === void 0 && ne("Tres primitives need a prop 'object'");
|
|
418
415
|
const l = t.object;
|
|
419
416
|
r = l.type, i = Object.assign(l, { type: r, attach: t.attach, primitive: !0 });
|
|
420
417
|
} else {
|
|
421
418
|
const l = pe.value[r];
|
|
422
|
-
l ||
|
|
419
|
+
l || ne(`${r} is not defined on the THREE namespace. Use extend to add it to the catalog.`), i = new l(...t.args);
|
|
423
420
|
}
|
|
424
421
|
i.isCamera && (t != null && t.position || i.position.set(3, 3, 3), t != null && t.lookAt || i.lookAt(0, 0, 0)), (t == null ? void 0 : t.attach) === void 0 && (i.isMaterial ? i.attach = "material" : i.isBufferGeometry && (i.attach = "geometry"));
|
|
425
|
-
const { GEOMETRY_VIA_PROP:
|
|
426
|
-
return i.isObject3D && ((
|
|
422
|
+
const { GEOMETRY_VIA_PROP: s, MATERIAL_VIA_PROP: a } = F;
|
|
423
|
+
return i.isObject3D && ((c = t == null ? void 0 : t.material) != null && c.isMaterial && (i.userData[a] = !0), (u = t == null ? void 0 : t.geometry) != null && u.isBufferGeometry && (i.userData[s] = !0)), i;
|
|
427
424
|
},
|
|
428
425
|
insert(e, n) {
|
|
429
|
-
var o, t, r, i,
|
|
426
|
+
var o, t, r, i, s, a, c;
|
|
430
427
|
if (n && n.isScene && (x = n), (((o = e == null ? void 0 : e.__vnode) == null ? void 0 : o.type) === "TresGroup" || ((t = e == null ? void 0 : e.__vnode) == null ? void 0 : t.type) === "TresObject3D") && n === null && !((i = (r = e == null ? void 0 : e.__vnode) == null ? void 0 : r.ctx) != null && i.asyncResolved)) {
|
|
431
428
|
N = e;
|
|
432
429
|
return;
|
|
433
430
|
} else
|
|
434
|
-
(
|
|
435
|
-
n || (n = N), e != null && e.isObject3D && (n != null && n.isObject3D) ? (n.add(e), e.dispatchEvent({ type: "added" }), (
|
|
431
|
+
(s = e == null ? void 0 : e.__vnode) != null && s.type.includes("Controls") && n === null && (N = x);
|
|
432
|
+
n || (n = N), e != null && e.isObject3D && (n != null && n.isObject3D) ? (n.add(e), e.dispatchEvent({ type: "added" }), (c = (a = x == null ? void 0 : x.userData) == null ? void 0 : a[F.REGISTER_AT_POINTER_EVENT_HANDLER]) == null || c.call(a, e)) : 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));
|
|
436
433
|
},
|
|
437
434
|
remove(e) {
|
|
438
435
|
var n, o;
|
|
439
436
|
if (e) {
|
|
440
437
|
if (e.isObject3D) {
|
|
441
438
|
const t = e, r = (i) => {
|
|
442
|
-
var
|
|
443
|
-
const { GEOMETRY_VIA_PROP:
|
|
444
|
-
i.userData[a] || (
|
|
439
|
+
var c, u;
|
|
440
|
+
const { GEOMETRY_VIA_PROP: s, MATERIAL_VIA_PROP: a } = F;
|
|
441
|
+
i.userData[a] || (c = i.material) == null || c.dispose(), i.userData[s] || (u = i.geometry) == null || u.dispose();
|
|
445
442
|
};
|
|
446
443
|
t.traverse((i) => {
|
|
447
444
|
r(i);
|
|
@@ -452,26 +449,26 @@ const { logError: te } = P(), dt = {
|
|
|
452
449
|
},
|
|
453
450
|
patchProp(e, n, o, t) {
|
|
454
451
|
if (e) {
|
|
455
|
-
let r = e, i = n,
|
|
452
|
+
let r = e, i = n, s = I(i), a = r == null ? void 0 : r[s];
|
|
456
453
|
if (r.type === "BufferGeometry") {
|
|
457
454
|
if (i === "args")
|
|
458
455
|
return;
|
|
459
456
|
r.setAttribute(
|
|
460
|
-
|
|
457
|
+
I(i),
|
|
461
458
|
new Fe(...t)
|
|
462
459
|
);
|
|
463
460
|
return;
|
|
464
461
|
}
|
|
465
462
|
if (i.includes("-") && a === void 0) {
|
|
466
463
|
const u = i.split("-");
|
|
467
|
-
a = u.reduce((l, p) => l[
|
|
464
|
+
a = u.reduce((l, p) => l[I(p)], r), i = u.pop(), s = i.toLowerCase(), a != null && a.set || (r = u.reduce((l, p) => l[I(p)], r));
|
|
468
465
|
}
|
|
469
|
-
let
|
|
470
|
-
if (
|
|
471
|
-
Array.isArray(
|
|
466
|
+
let c = t;
|
|
467
|
+
if (c === "" && (c = !0), te(a)) {
|
|
468
|
+
Array.isArray(c) ? e[s](...c) : e[s](c);
|
|
472
469
|
return;
|
|
473
470
|
}
|
|
474
|
-
!(a != null && a.set) && !
|
|
471
|
+
!(a != null && a.set) && !te(a) ? r[s] = c : a.constructor === c.constructor && (a != null && a.copy) ? a == null || a.copy(c) : Array.isArray(c) ? a.set(...c) : !a.isColor && a.setScalar ? a.setScalar(c) : a.set(c);
|
|
475
472
|
}
|
|
476
473
|
},
|
|
477
474
|
parentNode(e) {
|
|
@@ -486,7 +483,7 @@ const { logError: te } = P(), dt = {
|
|
|
486
483
|
setScopeId: () => void 0,
|
|
487
484
|
cloneNode: () => void 0,
|
|
488
485
|
insertStaticContent: () => void 0
|
|
489
|
-
}, { createApp: mt } =
|
|
486
|
+
}, { createApp: mt } = Ce(dt), pt = (e) => {
|
|
490
487
|
const n = mt(o);
|
|
491
488
|
function o() {
|
|
492
489
|
return e && e.default ? e.default() : [];
|
|
@@ -513,15 +510,15 @@ const vt = ["data-scene"], gt = /* @__PURE__ */ Pe({
|
|
|
513
510
|
camera: {}
|
|
514
511
|
},
|
|
515
512
|
setup(e) {
|
|
516
|
-
const n = e, { logWarning: o } = P(), t =
|
|
513
|
+
const n = e, { logWarning: o } = P(), t = Y(), r = j(new Ne()), { onLoop: i } = fe(), s = _e();
|
|
517
514
|
function a() {
|
|
518
|
-
const
|
|
515
|
+
const c = lt(r.value, t, n), { addCamera: u, camera: l, clearCameras: p } = c;
|
|
519
516
|
let d;
|
|
520
517
|
function M() {
|
|
521
|
-
d = pt(
|
|
518
|
+
d = pt(s), d.provide("useTres", c), d.provide("extend", ve), d.mount(r.value), b();
|
|
522
519
|
}
|
|
523
520
|
M();
|
|
524
|
-
const { renderer: E } = rt(t,
|
|
521
|
+
const { renderer: E } = rt(t, c, n);
|
|
525
522
|
n.camera && u(n.camera), i(() => {
|
|
526
523
|
var g;
|
|
527
524
|
l.value && n.disableRender !== !0 && ((g = E.value) == null || g.render(r.value, l.value));
|
|
@@ -546,7 +543,7 @@ const vt = ["data-scene"], gt = /* @__PURE__ */ Pe({
|
|
|
546
543
|
return xe(() => {
|
|
547
544
|
a();
|
|
548
545
|
}), ie(() => {
|
|
549
|
-
}), (
|
|
546
|
+
}), (c, u) => (he(), Ae("canvas", {
|
|
550
547
|
ref_key: "canvas",
|
|
551
548
|
ref: t,
|
|
552
549
|
"data-scene": r.value.uuid,
|
|
@@ -554,7 +551,7 @@ const vt = ["data-scene"], gt = /* @__PURE__ */ Pe({
|
|
|
554
551
|
display: "block",
|
|
555
552
|
width: "100%",
|
|
556
553
|
height: "100%",
|
|
557
|
-
position:
|
|
554
|
+
position: c.windowSize ? "fixed" : "relative",
|
|
558
555
|
top: 0,
|
|
559
556
|
left: 0,
|
|
560
557
|
pointerEvents: "auto",
|
package/dist/tres.umd.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* name: @tresjs/core
|
|
3
|
-
* version: v2.4.0-next.
|
|
3
|
+
* version: v2.4.0-next.3
|
|
4
4
|
* (c) 2023
|
|
5
5
|
* description: Declarative ThreeJS using Vue Components
|
|
6
6
|
* author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
|
|
7
7
|
*/
|
|
8
|
-
(function(d,u){typeof exports=="object"&&typeof module<"u"?u(exports,require("vue"),require("three"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","three","@vueuse/core"],u):(d=typeof globalThis<"u"?globalThis:d||self,u(d.tres={},d.Vue,d.Three,d.VueUseCore))})(this,function(d,u,g,f){"use strict";function ue(e){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const a in e)if(a!=="default"){const t=Object.getOwnPropertyDescriptor(e,a);Object.defineProperty(n,a,t.get?t:{enumerable:!0,get:()=>e[a]})}}return n.default=e,Object.freeze(n)}const le=ue(g);function Y(e){const n=u.shallowRef([]),a=u.computed(()=>n.value.find(c=>c.userData.IS_ACTIVE_CAMERA));function t(c,o=!0){n.value.push(c),o&&r(c.uuid)}function r(c){const o=n.value.find(s=>s.uuid===c);o&&(n.value.forEach(s=>s.userData.IS_ACTIVE_CAMERA=!1),o.userData.IS_ACTIVE_CAMERA=!0)}function i(){n.value=[]}return u.watchEffect(()=>{var c;(c=e.aspectRatio)!=null&&c.value&&(console.log("camera watcher aspectRatio",e.aspectRatio.value),n.value.forEach(o=>{o instanceof g.PerspectiveCamera&&(o.aspect=e.aspectRatio.value),o.updateProjectionMatrix()}))}),{cameras:n,camera:a,addCamera:t,setCameraToActive:r,clearCameras:i}}const K=f.createEventHook(),X=f.createEventHook(),I=f.createEventHook(),E=new g.Clock;let R=0,x=0;const{pause:fe,resume:de,isActive:me}=f.useRafFn(()=>{K.trigger({delta:R,elapsed:x,clock:E}),X.trigger({delta:R,elapsed:x,clock:E}),I.trigger({delta:R,elapsed:x,clock:E})},{immediate:!1});I.on(()=>{R=E.getDelta(),x=E.getElapsedTime()});function z(){return{onBeforeLoop:K.on,onLoop:X.on,onAfterLoop:I.on,pause:fe,resume:de,isActive:me}}function pe(e){return typeof e=="number"?[e,e,e]:e instanceof g.Vector3?[e.x,e.y,e.z]:e}function J(e){return e instanceof g.Color?e:Array.isArray(e)?new g.Color(...e):new g.Color(e)}const G={realistic:{outputColorSpace:g.SRGBColorSpace,toneMapping:g.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:g.PCFSoftShadowMap}}},Q=(e,n)=>{for(const a of Object.keys(n))n[a]instanceof Object&&Object.assign(n[a],Q(e[a],n[a]));return Object.assign(e||{},n),e},ve=ge("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 k(e){return e.replace(/-([a-z])/g,(n,a)=>a.toUpperCase())}function ge(e,n){const a=Object.create(null),t=e.split(",");for(let r=0;r<t.length;r++)a[t[r]]=!0;return n?r=>!!a[r.toLowerCase()]:r=>!!a[r]}const we=(e,n)=>{const a=new Set,t=[];for(const r of e){const i=n(r);a.has(i)||(a.add(i),t.push(r))}return t},be=!0,Z="[TresJS ▲ ■ ●] ";function A(){function e(t,r){console.error(`${Z} ${t}`,r||"")}function n(t){console.warn(`${Z} ${t}`)}function a(t,r){}return{logError:e,logWarning:n,logMessage:a}}function H(e,n,a){const t=u.shallowRef(),r=u.ref(!1),{alpha:i=!0,antialias:c=!0,depth:o,logarithmicDepthBuffer:s,failIfMajorPerformanceCaveat:l,precision:p,premultipliedAlpha:w,stencil:v,shadows:_=!1,shadowMapType:M=g.PCFShadowMap,useLegacyLights:h=!1,outputColorSpace:C=g.LinearSRGBColorSpace,toneMapping:P=g.NoToneMapping,toneMappingExposure:O=1,context:V=void 0,powerPreference:j="default",preserveDrawingBuffer:B=!1,clearColor:S,windowSize:m=!1,preset:b=void 0}=u.toRefs(a),{cameras:Ue,setRenderer:je,sizes:q}=n,{logError:Be,logWarning:$e}=A(),{pixelRatio:D}=f.useDevicePixelRatio(),{pause:De,resume:Ie}=z(),se=()=>{t.value&&(t.value.setSize(q.width.value,q.height.value),t.value.setPixelRatio(Math.min(D.value,2)))},ce=()=>{if(!t.value)return;const T=f.toValue(b);if(T){T in G||Be("Renderer Preset must be one of these: "+Object.keys(G).join(", ")),Q(t.value,G[T]);return}t.value.shadowMap.enabled=f.toValue(_),t.value.shadowMap.type=f.toValue(M),t.value.toneMapping=f.toValue(P)||g.NoToneMapping,t.value.toneMappingExposure=f.toValue(O),t.value.outputColorSpace=f.toValue(C)||g.LinearSRGBColorSpace,S!=null&&S.value&&t.value.setClearColor(J(f.toValue(S))),t.value.useLegacyLights=f.toValue(h)},ze=()=>{const T=f.unrefElement(e);console.count("init renderer"),T&&(t.value=new g.WebGLRenderer({canvas:T,alpha:f.toValue(i),antialias:f.toValue(c),context:f.toValue(V),depth:f.toValue(o),failIfMajorPerformanceCaveat:f.toValue(l),logarithmicDepthBuffer:f.toValue(s),powerPreference:f.toValue(j),precision:f.toValue(p),stencil:f.toValue(v),preserveDrawingBuffer:f.toValue(B),premultipliedAlpha:f.toValue(w)}),je(t.value),ce(),se(),Ie(),r.value=!0)},Ge=()=>{t.value&&(t.value.dispose(),t.value=void 0,r.value=!1,De())};return u.watchEffect(()=>{var T;((T=q.aspectRatio)!=null&&T.value||D!=null&&D.value)&&se()}),u.watch([_,M,C,h,P,O,S],ce),u.watch(e,()=>{f.unrefElement(e)&&ze()},{immediate:!0,deep:!0}),{renderer:t,isReady:r,dispose:Ge}}const ee=e=>typeof e=="function",te=e=>!!e&&e.constructor===Array;function ne(e){const n={nodes:{},materials:{}};return e&&e.traverse(a=>{a.name&&(n.nodes[a.name]=a),a.material&&!n.materials[a.material.name]&&(n.materials[a.material.name]=a.material)}),n}async function ye(e,n,a,t,r){const{logError:i}=A(),c=new e;r&&r(c),a&&a(c);const s=(Array.isArray(n)?n:[n]).map(l=>new Promise((p,w)=>{c.load(l,v=>{v.scene&&Object.assign(v,ne(v.scene)),p(v)},t,v=>w(i("[useLoader] - Failed to load resource",v)))}));return te(n)?await Promise.all(s):await s[0]}async function Ce(e){const n=new g.LoadingManager,a=new g.TextureLoader(n),t=r=>new Promise((i,c)=>{a.load(r,o=>i(o),()=>null,()=>{c(new Error("[useTextures] - Failed to load texture"))})});if(te(e)){const r=await Promise.all(e.map(i=>t(i)));return e.length>1?r:r[0]}else{const{map:r,displacementMap:i,normalMap:c,roughnessMap:o,metalnessMap:s,aoMap:l,alphaMap:p,matcap:w}=e;return{map:r?await t(r):null,displacementMap:i?await t(i):null,normalMap:c?await t(c):null,roughnessMap:o?await t(o):null,metalnessMap:s?await t(s):null,aoMap:l?await t(l):null,alphaMap:p?await t(p):null,matcap:w?await t(w):null}}}const y=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];function he(){const e=Math.random()*4294967295|0,n=Math.random()*4294967295|0,a=Math.random()*4294967295|0,t=Math.random()*4294967295|0;return(y[e&255]+y[e>>8&255]+y[e>>16&255]+y[e>>24&255]+"-"+y[n&255]+y[n>>8&255]+"-"+y[n>>16&15|64]+y[n>>24&255]+"-"+y[a&63|128]+y[a>>8&255]+"-"+y[a>>16&255]+y[a>>24&255]+y[t&255]+y[t>>8&255]+y[t>>16&255]+y[t>>24&255]).toLowerCase()}const N=Symbol();function Me(){const e=u.shallowReactive({uuid:he(),camera:void 0,cameras:[],canvas:void 0,scene:void 0,renderer:void 0,aspectRatio:void 0,pointerEventHandler:void 0});function n(r){return e[r]}function a(r,i){e[r]=i}const t={state:e,...u.toRefs(e),getState:n,setState:a};return u.provide(N,t),t}const ae=()=>u.inject(N,{state:u.shallowReactive({camera:void 0,cameras:[],canvas:void 0,scene:void 0,renderer:void 0,pointerEventHandler:void 0})}),oe=e=>{const{state:n}=ae(),a=u.computed(()=>{var m;return(m=n.canvas)==null?void 0:m.value}),{x:t,y:r}=f.usePointer({target:a}),{width:i,height:c,top:o,left:s}=f.useElementBounding(a),l=new g.Raycaster,p=({x:m,y:b})=>{if(a.value)return{x:(m-s.value)/i.value*2-1,y:-((b-o.value)/c.value)*2+1}},w=({x:m,y:b})=>{if(n.camera)return l.setFromCamera(new g.Vector2(m,b),n.camera),l.intersectObjects(e.value,!1)},v=m=>{const b=p({x:(m==null?void 0:m.clientX)??t.value,y:(m==null?void 0:m.clientY)??r.value});return b?w(b)||[]:[]},_=u.computed(()=>v()),M=f.createEventHook(),h=f.createEventHook(),C=(m,b)=>{m.trigger({event:b,intersects:v(b)})},P=m=>{C(h,m)};let O;const V=m=>{var b;O=(b=v(m)[0])==null?void 0:b.object},j=m=>{var b;m instanceof PointerEvent&&O===((b=v(m)[0])==null?void 0:b.object)&&C(M,m)},B=m=>h.trigger({event:m,intersects:[]}),S=u.watchEffect(()=>{a!=null&&a.value&&(a.value.addEventListener("pointerup",j),a.value.addEventListener("pointerdown",V),a.value.addEventListener("pointermove",P),a.value.addEventListener("pointerleave",B),S())});return u.onUnmounted(()=>{a!=null&&a.value&&(a.value.removeEventListener("pointerup",j),a.value.removeEventListener("pointerdown",V),a.value.removeEventListener("pointermove",P),a.value.removeEventListener("pointerleave",B))}),{intersects:_,onClick:m=>M.on(m).off,onPointerMove:m=>h.on(m).off}};function Pe(){const{logWarning:e}=A();function n(t,r,i){let c=null;return t.traverse(o=>{o[r]===i&&(c=o)}),c||e(`Child with ${r} '${i}' not found.`),c}function a(t,r){return n(t,"name",r)}return{seek:n,seekByName:a}}const _e=()=>{const e=u.reactive({click:new Map,pointerMove:new Map,pointerEnter:new Map,pointerLeave:new Map}),n=o=>{Object.values(e).forEach(s=>s.delete(o))},a=o=>{const{onClick:s,onPointerMove:l,onPointerEnter:p,onPointerLeave:w}=o;s&&e.click.set(o,s),l&&e.pointerMove.set(o,l),p&&e.pointerEnter.set(o,p),w&&e.pointerLeave.set(o,w),o.addEventListener("removed",()=>{o.traverse(v=>{n(v)}),n(o)})},t=u.computed(()=>we(Object.values(e).map(o=>Array.from(o.keys())).flat(),({uuid:o})=>o)),{onClick:r,onPointerMove:i}=oe(t);r(({intersects:o,event:s})=>{var l;o.length&&((l=e.click.get(o[0].object))==null||l(o[0],s))});let c;return i(({intersects:o,event:s})=>{var _,M,h,C;const l=(_=o==null?void 0:o[0])==null?void 0:_.object,{pointerLeave:p,pointerEnter:w,pointerMove:v}=e;c&&c!==l&&((M=p.get(c))==null||M(c,s)),l&&(c!==l&&((h=w.get(l))==null||h(o[0],s)),(C=v.get(l))==null||C(o[0],s)),c=l||null}),{registerObject:a,deregisterObject:n}},{logError:Te}=A();function Ae(e,n,a){var h;e||Te("A scene most be provided to the TresProvider");const{width:t,height:r}=f.toValue(a.windowSize)==!0||f.toValue(a.windowSize)===""||f.toValue(a.windowSize)==="true"||n.value===void 0?f.useWindowSize():f.useElementSize((h=n.value)==null?void 0:h.parentElement),i=u.computed(()=>t.value/r.value),c={height:r,width:t,aspectRatio:i},o=u.shallowRef(e),{camera:s,cameras:l,addCamera:p,setCameraToActive:w}=Y(c),v=u.shallowRef(null);function _(C){v.value||(v.value=C)}const M={scene:u.readonly(o),cameras:u.readonly(l),camera:s,addCamera:p,setCameraToActive:w,renderer:u.readonly(v),setRenderer:_,sizes:c};return u.provide("useTres",M),M}function Se(){const e=u.inject("useTres");if(!e)throw new Error("useTresContext must be used within a TresProvider");return e}const F=u.ref({}),W=e=>void Object.assign(F.value,e),U={GEOMETRY_VIA_PROP:"tres__geometryViaProp",MATERIAL_VIA_PROP:"tres__materialViaProp",REGISTER_AT_POINTER_EVENT_HANDLER:"tres__registerAtPointerEventHandler"};function Fe(e){}let $=null,L=null;const{logError:re}=A(),Ee={createElement(e,n,a,t){var s,l;if(t||(t={}),t.args||(t.args=[]),e==="template"||ve(e))return null;let r=e.replace("Tres",""),i;if(e==="primitive"){(t==null?void 0:t.object)===void 0&&re("Tres primitives need a prop 'object'");const p=t.object;r=p.type,i=Object.assign(p,{type:r,attach:t.attach,primitive:!0})}else{const p=F.value[r];p||re(`${r} is not defined on the THREE namespace. Use extend to add it to the catalog.`),i=new p(...t.args)}i.isCamera&&(t!=null&&t.position||i.position.set(3,3,3),t!=null&&t.lookAt||i.lookAt(0,0,0)),(t==null?void 0:t.attach)===void 0&&(i.isMaterial?i.attach="material":i.isBufferGeometry&&(i.attach="geometry"));const{GEOMETRY_VIA_PROP:c,MATERIAL_VIA_PROP:o}=U;return i.isObject3D&&((s=t==null?void 0:t.material)!=null&&s.isMaterial&&(i.userData[o]=!0),(l=t==null?void 0:t.geometry)!=null&&l.isBufferGeometry&&(i.userData[c]=!0)),i},insert(e,n){var a,t,r,i,c,o,s;if(n&&n.isScene&&(L=n),(((a=e==null?void 0:e.__vnode)==null?void 0:a.type)==="TresGroup"||((t=e==null?void 0:e.__vnode)==null?void 0:t.type)==="TresObject3D")&&n===null&&!((i=(r=e==null?void 0:e.__vnode)==null?void 0:r.ctx)!=null&&i.asyncResolved)){$=e;return}else(c=e==null?void 0:e.__vnode)!=null&&c.type.includes("Controls")&&n===null&&($=L);n||(n=$),e!=null&&e.isObject3D&&(n!=null&&n.isObject3D)?(n.add(e),e.dispatchEvent({type:"added"}),(s=(o=L==null?void 0:L.userData)==null?void 0:o[U.REGISTER_AT_POINTER_EVENT_HANDLER])==null||s.call(o,e)):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,a;if(e){if(e.isObject3D){const t=e,r=i=>{var s,l;const{GEOMETRY_VIA_PROP:c,MATERIAL_VIA_PROP:o}=U;i.userData[o]||(s=i.material)==null||s.dispose(),i.userData[c]||(l=i.geometry)==null||l.dispose()};t.traverse(i=>{r(i)}),r(t)}(n=e.removeFromParent)==null||n.call(e),(a=e.dispose)==null||a.call(e)}},patchProp(e,n,a,t){if(e){let r=e,i=n,c=k(i),o=r==null?void 0:r[c];if(r.type==="BufferGeometry"){if(i==="args")return;r.setAttribute(k(i),new g.BufferAttribute(...t));return}if(i.includes("-")&&o===void 0){const l=i.split("-");o=l.reduce((p,w)=>p[k(w)],r),i=l.pop(),c=i.toLowerCase(),o!=null&&o.set||(r=l.reduce((p,w)=>p[k(w)],r))}let s=t;if(s===""&&(s=!0),ee(o)){Array.isArray(s)?e[c](...s):e[c](s);return}!(o!=null&&o.set)&&!ee(o)?r[c]=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:Le}=u.createRenderer(Ee),Oe=e=>{const n=Le(a);function a(){return e&&e.default?e.default():[]}return n};W(le);const Re=["data-scene"],ie=u.defineComponent({__name:"TresCanvas",props:{shadows:{type:Boolean},shadowMapType:{},useLegacyLights:{type:Boolean},outputColorSpace:{},toneMapping:{},toneMappingExposure:{},context:{},powerPreference:{},preserveDrawingBuffer:{type:Boolean},clearColor:{},windowSize:{type:Boolean},preset:{},disableRender:{type:Boolean},camera:{}},setup(e){const n=e,{logWarning:a}=A(),t=u.ref(),r=u.shallowRef(new g.Scene),{onLoop:i}=z(),c=u.useSlots();function o(){const s=Ae(r.value,t,n),{addCamera:l,camera:p,clearCameras:w}=s;let v;function _(){v=Oe(c),v.provide("useTres",s),v.provide("extend",W),v.mount(r.value),h()}_();const{renderer:M}=H(t,s,n);n.camera&&l(n.camera),i(()=>{var C;p.value&&n.disableRender!==!0&&((C=M.value)==null||C.render(r.value,p.value))});function h(){const C=r.value.getObjectByProperty("isCamera",!0);if(C)l(C);else{a("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene.");const P=new g.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);P.position.set(3,3,3),P.lookAt(0,0,0),l(P)}u.watch(()=>n.camera,P=>{P&&(w(),l(P))})}}return u.onMounted(()=>{o()}),u.onUnmounted(()=>{}),(s,l)=>(u.openBlock(),u.createElementBlock("canvas",{ref_key:"canvas",ref:t,"data-scene":r.value.uuid,style:u.normalizeStyle({display:"block",width:"100%",height:"100%",position:s.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none",zIndex:1})},null,12,Re))}}),xe=["TresCanvas","TresLeches","TresScene"],ke={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!xe.includes(e)||e==="primitive"}}},Ve={install(e){e.component("TresCanvas",ie)}};d.TRES_CONTEXT_KEY=N,d.TresCanvas=ie,d.catalogue=F,d.default=Ve,d.extend=W,d.isProd=be,d.normalizeColor=J,d.normalizeVectorFlexibleParam=pe,d.templateCompilerOptions=ke,d.trasverseObjects=ne,d.useCamera=Y,d.useLoader=ye,d.useLogger=A,d.usePointerEventHandler=_e,d.useRaycaster=oe,d.useRenderLoop=z,d.useRenderer=H,d.useSeek=Pe,d.useTexture=Ce,d.useTres=ae,d.useTresContext=Se,d.useTresProvider=Me,Object.defineProperties(d,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
|
8
|
+
(function(d,u){typeof exports=="object"&&typeof module<"u"?u(exports,require("vue"),require("three"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","three","@vueuse/core"],u):(d=typeof globalThis<"u"?globalThis:d||self,u(d.tres={},d.Vue,d.Three,d.VueUseCore))})(this,function(d,u,g,f){"use strict";function ue(e){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const a in e)if(a!=="default"){const t=Object.getOwnPropertyDescriptor(e,a);Object.defineProperty(n,a,t.get?t:{enumerable:!0,get:()=>e[a]})}}return n.default=e,Object.freeze(n)}const le=ue(g);function Y(e){const n=u.shallowReactive([]),a=u.computed(()=>n.find(i=>i.userData.IS_ACTIVE_CAMERA));function t(i,s=!0){n.push(i),s&&r(i.uuid)}function r(i){const s=n.find(o=>o.uuid===i);s&&(n.forEach(o=>o.userData.IS_ACTIVE_CAMERA=!1),s.userData.IS_ACTIVE_CAMERA=!0)}return u.watchEffect(()=>{var i;(i=e.aspectRatio)!=null&&i.value&&(console.log("camera watcher aspectRatio",e.aspectRatio.value),n.forEach(s=>{s instanceof g.PerspectiveCamera&&(s.aspect=e.aspectRatio.value),s.updateProjectionMatrix()}))}),{cameras:n,camera:a,addCamera:t,setCameraToActive:r}}const K=f.createEventHook(),X=f.createEventHook(),I=f.createEventHook(),E=new g.Clock;let R=0,x=0;const{pause:fe,resume:de,isActive:me}=f.useRafFn(()=>{K.trigger({delta:R,elapsed:x,clock:E}),X.trigger({delta:R,elapsed:x,clock:E}),I.trigger({delta:R,elapsed:x,clock:E})},{immediate:!1});I.on(()=>{R=E.getDelta(),x=E.getElapsedTime()});function z(){return{onBeforeLoop:K.on,onLoop:X.on,onAfterLoop:I.on,pause:fe,resume:de,isActive:me}}function pe(e){return typeof e=="number"?[e,e,e]:e instanceof g.Vector3?[e.x,e.y,e.z]:e}function J(e){return e instanceof g.Color?e:Array.isArray(e)?new g.Color(...e):new g.Color(e)}const G={realistic:{outputColorSpace:g.SRGBColorSpace,toneMapping:g.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:g.PCFSoftShadowMap}}},Q=(e,n)=>{for(const a of Object.keys(n))n[a]instanceof Object&&Object.assign(n[a],Q(e[a],n[a]));return Object.assign(e||{},n),e},ve=ge("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 k(e){return e.replace(/-([a-z])/g,(n,a)=>a.toUpperCase())}function ge(e,n){const a=Object.create(null),t=e.split(",");for(let r=0;r<t.length;r++)a[t[r]]=!0;return n?r=>!!a[r.toLowerCase()]:r=>!!a[r]}const we=(e,n)=>{const a=new Set,t=[];for(const r of e){const i=n(r);a.has(i)||(a.add(i),t.push(r))}return t},be=!0,Z="[TresJS ▲ ■ ●] ";function A(){function e(t,r){console.error(`${Z} ${t}`,r||"")}function n(t){console.warn(`${Z} ${t}`)}function a(t,r){}return{logError:e,logWarning:n,logMessage:a}}function H(e,n,a){const t=u.shallowRef(),r=u.ref(!1),{alpha:i=!0,antialias:s=!0,depth:o,logarithmicDepthBuffer:c,failIfMajorPerformanceCaveat:l,precision:p,premultipliedAlpha:w,stencil:v,shadows:_=!1,shadowMapType:M=g.PCFShadowMap,useLegacyLights:h=!1,outputColorSpace:C=g.LinearSRGBColorSpace,toneMapping:P=g.NoToneMapping,toneMappingExposure:O=1,context:V=void 0,powerPreference:j="default",preserveDrawingBuffer:B=!1,clearColor:S,windowSize:m=!1,preset:b=void 0}=u.toRefs(a),{cameras:Ue,setRenderer:je,sizes:q}=n,{logError:Be,logWarning:$e}=A(),{pixelRatio:D}=f.useDevicePixelRatio(),{pause:De,resume:Ie}=z(),se=()=>{t.value&&(t.value.setSize(q.width.value,q.height.value),t.value.setPixelRatio(Math.min(D.value,2)))},ce=()=>{if(!t.value)return;const T=f.toValue(b);if(T){T in G||Be("Renderer Preset must be one of these: "+Object.keys(G).join(", ")),Q(t.value,G[T]);return}t.value.shadowMap.enabled=f.toValue(_),t.value.shadowMap.type=f.toValue(M),t.value.toneMapping=f.toValue(P)||g.NoToneMapping,t.value.toneMappingExposure=f.toValue(O),t.value.outputColorSpace=f.toValue(C)||g.LinearSRGBColorSpace,S!=null&&S.value&&t.value.setClearColor(J(f.toValue(S))),t.value.useLegacyLights=f.toValue(h)},ze=()=>{const T=f.unrefElement(e);console.count("init renderer"),T&&(t.value=new g.WebGLRenderer({canvas:T,alpha:f.toValue(i),antialias:f.toValue(s),context:f.toValue(V),depth:f.toValue(o),failIfMajorPerformanceCaveat:f.toValue(l),logarithmicDepthBuffer:f.toValue(c),powerPreference:f.toValue(j),precision:f.toValue(p),stencil:f.toValue(v),preserveDrawingBuffer:f.toValue(B),premultipliedAlpha:f.toValue(w)}),je(t.value),ce(),se(),Ie(),r.value=!0)},Ge=()=>{t.value&&(t.value.dispose(),t.value=void 0,r.value=!1,De())};return u.watchEffect(()=>{var T;((T=q.aspectRatio)!=null&&T.value||D!=null&&D.value)&&se()}),u.watch([_,M,C,h,P,O,S],ce),u.watch(e,()=>{f.unrefElement(e)&&ze()},{immediate:!0,deep:!0}),{renderer:t,isReady:r,dispose:Ge}}const ee=e=>typeof e=="function",te=e=>!!e&&e.constructor===Array;function ne(e){const n={nodes:{},materials:{}};return e&&e.traverse(a=>{a.name&&(n.nodes[a.name]=a),a.material&&!n.materials[a.material.name]&&(n.materials[a.material.name]=a.material)}),n}async function ye(e,n,a,t,r){const{logError:i}=A(),s=new e;r&&r(s),a&&a(s);const c=(Array.isArray(n)?n:[n]).map(l=>new Promise((p,w)=>{s.load(l,v=>{v.scene&&Object.assign(v,ne(v.scene)),p(v)},t,v=>w(i("[useLoader] - Failed to load resource",v)))}));return te(n)?await Promise.all(c):await c[0]}async function Ce(e){const n=new g.LoadingManager,a=new g.TextureLoader(n),t=r=>new Promise((i,s)=>{a.load(r,o=>i(o),()=>null,()=>{s(new Error("[useTextures] - Failed to load texture"))})});if(te(e)){const r=await Promise.all(e.map(i=>t(i)));return e.length>1?r:r[0]}else{const{map:r,displacementMap:i,normalMap:s,roughnessMap:o,metalnessMap:c,aoMap:l,alphaMap:p,matcap:w}=e;return{map:r?await t(r):null,displacementMap:i?await t(i):null,normalMap:s?await t(s):null,roughnessMap:o?await t(o):null,metalnessMap:c?await t(c):null,aoMap:l?await t(l):null,alphaMap:p?await t(p):null,matcap:w?await t(w):null}}}const y=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];function he(){const e=Math.random()*4294967295|0,n=Math.random()*4294967295|0,a=Math.random()*4294967295|0,t=Math.random()*4294967295|0;return(y[e&255]+y[e>>8&255]+y[e>>16&255]+y[e>>24&255]+"-"+y[n&255]+y[n>>8&255]+"-"+y[n>>16&15|64]+y[n>>24&255]+"-"+y[a&63|128]+y[a>>8&255]+"-"+y[a>>16&255]+y[a>>24&255]+y[t&255]+y[t>>8&255]+y[t>>16&255]+y[t>>24&255]).toLowerCase()}const N=Symbol();function Me(){const e=u.shallowReactive({uuid:he(),camera:void 0,cameras:[],canvas:void 0,scene:void 0,renderer:void 0,aspectRatio:void 0,pointerEventHandler:void 0});function n(r){return e[r]}function a(r,i){e[r]=i}const t={state:e,...u.toRefs(e),getState:n,setState:a};return u.provide(N,t),t}const ae=()=>u.inject(N,{state:u.shallowReactive({camera:void 0,cameras:[],canvas:void 0,scene:void 0,renderer:void 0,pointerEventHandler:void 0})}),oe=e=>{const{state:n}=ae(),a=u.computed(()=>{var m;return(m=n.canvas)==null?void 0:m.value}),{x:t,y:r}=f.usePointer({target:a}),{width:i,height:s,top:o,left:c}=f.useElementBounding(a),l=new g.Raycaster,p=({x:m,y:b})=>{if(a.value)return{x:(m-c.value)/i.value*2-1,y:-((b-o.value)/s.value)*2+1}},w=({x:m,y:b})=>{if(n.camera)return l.setFromCamera(new g.Vector2(m,b),n.camera),l.intersectObjects(e.value,!1)},v=m=>{const b=p({x:(m==null?void 0:m.clientX)??t.value,y:(m==null?void 0:m.clientY)??r.value});return b?w(b)||[]:[]},_=u.computed(()=>v()),M=f.createEventHook(),h=f.createEventHook(),C=(m,b)=>{m.trigger({event:b,intersects:v(b)})},P=m=>{C(h,m)};let O;const V=m=>{var b;O=(b=v(m)[0])==null?void 0:b.object},j=m=>{var b;m instanceof PointerEvent&&O===((b=v(m)[0])==null?void 0:b.object)&&C(M,m)},B=m=>h.trigger({event:m,intersects:[]}),S=u.watchEffect(()=>{a!=null&&a.value&&(a.value.addEventListener("pointerup",j),a.value.addEventListener("pointerdown",V),a.value.addEventListener("pointermove",P),a.value.addEventListener("pointerleave",B),S())});return u.onUnmounted(()=>{a!=null&&a.value&&(a.value.removeEventListener("pointerup",j),a.value.removeEventListener("pointerdown",V),a.value.removeEventListener("pointermove",P),a.value.removeEventListener("pointerleave",B))}),{intersects:_,onClick:m=>M.on(m).off,onPointerMove:m=>h.on(m).off}};function Pe(){const{logWarning:e}=A();function n(t,r,i){let s=null;return t.traverse(o=>{o[r]===i&&(s=o)}),s||e(`Child with ${r} '${i}' not found.`),s}function a(t,r){return n(t,"name",r)}return{seek:n,seekByName:a}}const _e=()=>{const e=u.reactive({click:new Map,pointerMove:new Map,pointerEnter:new Map,pointerLeave:new Map}),n=o=>{Object.values(e).forEach(c=>c.delete(o))},a=o=>{const{onClick:c,onPointerMove:l,onPointerEnter:p,onPointerLeave:w}=o;c&&e.click.set(o,c),l&&e.pointerMove.set(o,l),p&&e.pointerEnter.set(o,p),w&&e.pointerLeave.set(o,w),o.addEventListener("removed",()=>{o.traverse(v=>{n(v)}),n(o)})},t=u.computed(()=>we(Object.values(e).map(o=>Array.from(o.keys())).flat(),({uuid:o})=>o)),{onClick:r,onPointerMove:i}=oe(t);r(({intersects:o,event:c})=>{var l;o.length&&((l=e.click.get(o[0].object))==null||l(o[0],c))});let s;return i(({intersects:o,event:c})=>{var _,M,h,C;const l=(_=o==null?void 0:o[0])==null?void 0:_.object,{pointerLeave:p,pointerEnter:w,pointerMove:v}=e;s&&s!==l&&((M=p.get(s))==null||M(s,c)),l&&(s!==l&&((h=w.get(l))==null||h(o[0],c)),(C=v.get(l))==null||C(o[0],c)),s=l||null}),{registerObject:a,deregisterObject:n}},{logError:Te}=A();function Ae(e,n,a){var h;e||Te("A scene most be provided to the TresProvider");const{width:t,height:r}=f.toValue(a.windowSize)==!0||f.toValue(a.windowSize)===""||f.toValue(a.windowSize)==="true"||n.value===void 0?f.useWindowSize():f.useElementSize((h=n.value)==null?void 0:h.parentElement),i=u.computed(()=>t.value/r.value),s={height:r,width:t,aspectRatio:i},o=u.shallowRef(e),{camera:c,cameras:l,addCamera:p,setCameraToActive:w}=Y(s),v=u.shallowRef(null);function _(C){v.value||(v.value=C)}const M={scene:u.readonly(o),cameras:u.readonly(l),camera:c,addCamera:p,setCameraToActive:w,renderer:u.readonly(v),setRenderer:_,sizes:s};return u.provide("useTres",M),M}function Se(){const e=u.inject("useTres");if(!e)throw new Error("useTresContext must be used within a TresProvider");return e}const F=u.ref({}),W=e=>void Object.assign(F.value,e),U={GEOMETRY_VIA_PROP:"tres__geometryViaProp",MATERIAL_VIA_PROP:"tres__materialViaProp",REGISTER_AT_POINTER_EVENT_HANDLER:"tres__registerAtPointerEventHandler"};function Fe(e){}let $=null,L=null;const{logError:re}=A(),Ee={createElement(e,n,a,t){var c,l;if(t||(t={}),t.args||(t.args=[]),e==="template"||ve(e))return null;let r=e.replace("Tres",""),i;if(e==="primitive"){(t==null?void 0:t.object)===void 0&&re("Tres primitives need a prop 'object'");const p=t.object;r=p.type,i=Object.assign(p,{type:r,attach:t.attach,primitive:!0})}else{const p=F.value[r];p||re(`${r} is not defined on the THREE namespace. Use extend to add it to the catalog.`),i=new p(...t.args)}i.isCamera&&(t!=null&&t.position||i.position.set(3,3,3),t!=null&&t.lookAt||i.lookAt(0,0,0)),(t==null?void 0:t.attach)===void 0&&(i.isMaterial?i.attach="material":i.isBufferGeometry&&(i.attach="geometry"));const{GEOMETRY_VIA_PROP:s,MATERIAL_VIA_PROP:o}=U;return i.isObject3D&&((c=t==null?void 0:t.material)!=null&&c.isMaterial&&(i.userData[o]=!0),(l=t==null?void 0:t.geometry)!=null&&l.isBufferGeometry&&(i.userData[s]=!0)),i},insert(e,n){var a,t,r,i,s,o,c;if(n&&n.isScene&&(L=n),(((a=e==null?void 0:e.__vnode)==null?void 0:a.type)==="TresGroup"||((t=e==null?void 0:e.__vnode)==null?void 0:t.type)==="TresObject3D")&&n===null&&!((i=(r=e==null?void 0:e.__vnode)==null?void 0:r.ctx)!=null&&i.asyncResolved)){$=e;return}else(s=e==null?void 0:e.__vnode)!=null&&s.type.includes("Controls")&&n===null&&($=L);n||(n=$),e!=null&&e.isObject3D&&(n!=null&&n.isObject3D)?(n.add(e),e.dispatchEvent({type:"added"}),(c=(o=L==null?void 0:L.userData)==null?void 0:o[U.REGISTER_AT_POINTER_EVENT_HANDLER])==null||c.call(o,e)):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,a;if(e){if(e.isObject3D){const t=e,r=i=>{var c,l;const{GEOMETRY_VIA_PROP:s,MATERIAL_VIA_PROP:o}=U;i.userData[o]||(c=i.material)==null||c.dispose(),i.userData[s]||(l=i.geometry)==null||l.dispose()};t.traverse(i=>{r(i)}),r(t)}(n=e.removeFromParent)==null||n.call(e),(a=e.dispose)==null||a.call(e)}},patchProp(e,n,a,t){if(e){let r=e,i=n,s=k(i),o=r==null?void 0:r[s];if(r.type==="BufferGeometry"){if(i==="args")return;r.setAttribute(k(i),new g.BufferAttribute(...t));return}if(i.includes("-")&&o===void 0){const l=i.split("-");o=l.reduce((p,w)=>p[k(w)],r),i=l.pop(),s=i.toLowerCase(),o!=null&&o.set||(r=l.reduce((p,w)=>p[k(w)],r))}let c=t;if(c===""&&(c=!0),ee(o)){Array.isArray(c)?e[s](...c):e[s](c);return}!(o!=null&&o.set)&&!ee(o)?r[s]=c:o.constructor===c.constructor&&(o!=null&&o.copy)?o==null||o.copy(c):Array.isArray(c)?o.set(...c):!o.isColor&&o.setScalar?o.setScalar(c):o.set(c)}},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:Le}=u.createRenderer(Ee),Oe=e=>{const n=Le(a);function a(){return e&&e.default?e.default():[]}return n};W(le);const Re=["data-scene"],ie=u.defineComponent({__name:"TresCanvas",props:{shadows:{type:Boolean},shadowMapType:{},useLegacyLights:{type:Boolean},outputColorSpace:{},toneMapping:{},toneMappingExposure:{},context:{},powerPreference:{},preserveDrawingBuffer:{type:Boolean},clearColor:{},windowSize:{type:Boolean},preset:{},disableRender:{type:Boolean},camera:{}},setup(e){const n=e,{logWarning:a}=A(),t=u.ref(),r=u.shallowRef(new g.Scene),{onLoop:i}=z(),s=u.useSlots();function o(){const c=Ae(r.value,t,n),{addCamera:l,camera:p,clearCameras:w}=c;let v;function _(){v=Oe(s),v.provide("useTres",c),v.provide("extend",W),v.mount(r.value),h()}_();const{renderer:M}=H(t,c,n);n.camera&&l(n.camera),i(()=>{var C;p.value&&n.disableRender!==!0&&((C=M.value)==null||C.render(r.value,p.value))});function h(){const C=r.value.getObjectByProperty("isCamera",!0);if(C)l(C);else{a("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene.");const P=new g.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);P.position.set(3,3,3),P.lookAt(0,0,0),l(P)}u.watch(()=>n.camera,P=>{P&&(w(),l(P))})}}return u.onMounted(()=>{o()}),u.onUnmounted(()=>{}),(c,l)=>(u.openBlock(),u.createElementBlock("canvas",{ref_key:"canvas",ref:t,"data-scene":r.value.uuid,style:u.normalizeStyle({display:"block",width:"100%",height:"100%",position:c.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none",zIndex:1})},null,12,Re))}}),xe=["TresCanvas","TresLeches","TresScene"],ke={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!xe.includes(e)||e==="primitive"}}},Ve={install(e){e.component("TresCanvas",ie)}};d.TRES_CONTEXT_KEY=N,d.TresCanvas=ie,d.catalogue=F,d.default=Ve,d.extend=W,d.isProd=be,d.normalizeColor=J,d.normalizeVectorFlexibleParam=pe,d.templateCompilerOptions=ke,d.trasverseObjects=ne,d.useCamera=Y,d.useLoader=ye,d.useLogger=A,d.usePointerEventHandler=_e,d.useRaycaster=oe,d.useRenderLoop=z,d.useRenderer=H,d.useSeek=Pe,d.useTexture=Ce,d.useTres=ae,d.useTresContext=Se,d.useTresProvider=Me,Object.defineProperties(d,{__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": "2.4.0-next.
|
|
4
|
+
"version": "2.4.0-next.3",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "pnpm@8.3.1",
|
|
7
7
|
"author": "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",
|