@tresjs/core 3.1.0-next.0 → 3.1.0-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/tres.js +317 -298
- package/dist/tres.umd.cjs +2 -2
- package/dist/utils/index.d.ts +1 -0
- package/package.json +1 -1
package/dist/tres.js
CHANGED
|
@@ -1,173 +1,187 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* name: @tresjs/core
|
|
3
|
-
* version: v3.1.0-next.
|
|
3
|
+
* version: v3.1.0-next.1
|
|
4
4
|
* (c) 2023
|
|
5
5
|
* description: Declarative ThreeJS using Vue Components
|
|
6
6
|
* author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
|
|
7
7
|
*/
|
|
8
|
-
import { computed as M, ref as
|
|
9
|
-
import * as
|
|
10
|
-
import { PerspectiveCamera as W, OrthographicCamera as
|
|
11
|
-
import { createEventHook as
|
|
12
|
-
const
|
|
13
|
-
var
|
|
14
|
-
const
|
|
15
|
-
() =>
|
|
16
|
-
),
|
|
17
|
-
|
|
18
|
-
}, f = (
|
|
19
|
-
n.value.remove(
|
|
20
|
-
}, o = (
|
|
21
|
-
const c =
|
|
8
|
+
import { computed as M, ref as z, watchEffect as O, triggerRef as G, shallowRef as N, watch as V, onUnmounted as ue, watchPostEffect as le, reactive as ce, readonly as fe, provide as ee, inject as me, createRenderer as pe, defineComponent as q, useSlots as ve, h as U, Fragment as ge, openBlock as de, createElementBlock as ye, normalizeStyle as we } from "vue";
|
|
9
|
+
import * as Ce from "three";
|
|
10
|
+
import { PerspectiveCamera as W, OrthographicCamera as Pe, Camera as Me, Clock as _e, SRGBColorSpace as Ee, ACESFilmicToneMapping as Le, PCFSoftShadowMap as xe, Vector3 as Ae, Color as B, WebGLRenderer as H, LoadingManager as he, TextureLoader as De, Vector2 as ke, Raycaster as Te, BufferAttribute as be, Scene as Se } from "three";
|
|
11
|
+
import { createEventHook as D, useRafFn as Oe, toValue as d, unrefElement as Be, useDevicePixelRatio as Re, usePointer as Fe, useElementBounding as ze, useWindowSize as He, useElementSize as je } from "@vueuse/core";
|
|
12
|
+
const Ge = ({ sizes: e, scene: n }) => {
|
|
13
|
+
var i, l;
|
|
14
|
+
const r = M(() => n.value.children.filter((u) => u.isCamera)), a = z(((l = (i = r.value) == null ? void 0 : i[0]) == null ? void 0 : l.uuid) ?? ""), t = M(
|
|
15
|
+
() => r.value.find((u) => u.uuid === a.value) ?? r.value.at(0)
|
|
16
|
+
), s = (u, c = !1) => {
|
|
17
|
+
r.value.some(({ uuid: p }) => p === u.uuid) || (n.value.add(u), G(n), c && o(u));
|
|
18
|
+
}, f = (u) => {
|
|
19
|
+
n.value.remove(u), G(n);
|
|
20
|
+
}, o = (u) => {
|
|
21
|
+
const c = u instanceof Me ? u.uuid : u;
|
|
22
22
|
c && (a.value = c);
|
|
23
23
|
};
|
|
24
24
|
return O(() => {
|
|
25
|
-
e.aspectRatio.value &&
|
|
26
|
-
|
|
25
|
+
e.aspectRatio.value && r.value.forEach((u) => {
|
|
26
|
+
u instanceof W && (u.aspect = e.aspectRatio.value), (u instanceof W || u instanceof Pe) && u.updateProjectionMatrix();
|
|
27
27
|
});
|
|
28
|
-
}), n.value.userData.tres__registerCamera =
|
|
29
|
-
camera:
|
|
30
|
-
cameras:
|
|
31
|
-
addCamera:
|
|
28
|
+
}), n.value.userData.tres__registerCamera = s, n.value.userData.tres__deregisterCamera = f, {
|
|
29
|
+
camera: t,
|
|
30
|
+
cameras: r,
|
|
31
|
+
addCamera: s,
|
|
32
32
|
removeCamera: f,
|
|
33
33
|
setCameraActive: o
|
|
34
34
|
};
|
|
35
|
-
},
|
|
35
|
+
}, te = D(), re = D(), I = D(), h = new _e();
|
|
36
36
|
let R = 0, F = 0;
|
|
37
|
-
const { pause:
|
|
37
|
+
const { pause: Ve, resume: We, isActive: $e } = Oe(
|
|
38
38
|
() => {
|
|
39
|
-
|
|
39
|
+
te.trigger({ delta: R, elapsed: F, clock: h }), re.trigger({ delta: R, elapsed: F, clock: h }), I.trigger({ delta: R, elapsed: F, clock: h });
|
|
40
40
|
},
|
|
41
41
|
{ immediate: !1 }
|
|
42
42
|
);
|
|
43
|
-
|
|
43
|
+
I.on(() => {
|
|
44
44
|
R = h.getDelta(), F = h.getElapsedTime();
|
|
45
45
|
});
|
|
46
|
-
const
|
|
47
|
-
onBeforeLoop:
|
|
48
|
-
onLoop:
|
|
49
|
-
onAfterLoop:
|
|
50
|
-
pause:
|
|
51
|
-
resume:
|
|
52
|
-
isActive:
|
|
53
|
-
}),
|
|
46
|
+
const ne = () => ({
|
|
47
|
+
onBeforeLoop: te.on,
|
|
48
|
+
onLoop: re.on,
|
|
49
|
+
onAfterLoop: I.on,
|
|
50
|
+
pause: Ve,
|
|
51
|
+
resume: We,
|
|
52
|
+
isActive: $e
|
|
53
|
+
}), b = {
|
|
54
54
|
realistic: {
|
|
55
|
-
outputColorSpace:
|
|
56
|
-
toneMapping:
|
|
55
|
+
outputColorSpace: Ee,
|
|
56
|
+
toneMapping: Le,
|
|
57
57
|
toneMappingExposure: 3,
|
|
58
58
|
shadowMap: {
|
|
59
59
|
enabled: !0,
|
|
60
|
-
type:
|
|
60
|
+
type: xe
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
|
-
},
|
|
64
|
-
for (const
|
|
65
|
-
n[
|
|
63
|
+
}, ae = (e, n) => {
|
|
64
|
+
for (const r of Object.keys(n))
|
|
65
|
+
n[r] instanceof Object && Object.assign(n[r], ae(e[r], n[r]));
|
|
66
66
|
return Object.assign(e || {}, n), e;
|
|
67
|
-
},
|
|
67
|
+
}, 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", Ie = /* @__PURE__ */ qe(Ne);
|
|
68
|
+
function J(e) {
|
|
69
|
+
return e && e.nodeType === 1;
|
|
70
|
+
}
|
|
68
71
|
function S(e) {
|
|
69
|
-
return e.replace(/-([a-z])/g, (n,
|
|
72
|
+
return e.replace(/-([a-z])/g, (n, r) => r.toUpperCase());
|
|
70
73
|
}
|
|
71
|
-
function
|
|
72
|
-
const
|
|
73
|
-
for (let
|
|
74
|
-
|
|
75
|
-
return n ? (
|
|
74
|
+
function qe(e, n) {
|
|
75
|
+
const r = /* @__PURE__ */ Object.create(null), a = e.split(",");
|
|
76
|
+
for (let t = 0; t < a.length; t++)
|
|
77
|
+
r[a[t]] = !0;
|
|
78
|
+
return n ? (t) => !!r[t.toLowerCase()] : (t) => !!r[t];
|
|
76
79
|
}
|
|
77
|
-
const
|
|
78
|
-
const
|
|
79
|
-
for (const
|
|
80
|
-
const
|
|
81
|
-
|
|
80
|
+
const Ue = (e, n) => {
|
|
81
|
+
const r = /* @__PURE__ */ new Set(), a = [];
|
|
82
|
+
for (const t of e) {
|
|
83
|
+
const s = n(t);
|
|
84
|
+
r.has(s) || (r.add(s), a.push(t));
|
|
82
85
|
}
|
|
83
86
|
return a;
|
|
84
|
-
},
|
|
87
|
+
}, K = (e, n) => {
|
|
85
88
|
if (!n)
|
|
86
89
|
return;
|
|
87
|
-
const
|
|
88
|
-
return
|
|
89
|
-
},
|
|
90
|
+
const r = Array.isArray(n) ? n : n.match(/([^[.\]])+/g);
|
|
91
|
+
return r == null ? void 0 : r.reduce((a, t) => a && a[t], e);
|
|
92
|
+
}, Je = (e, n, r) => {
|
|
90
93
|
const a = Array.isArray(n) ? n : n.match(/([^[.\]])+/g);
|
|
91
|
-
a && a.reduce((
|
|
94
|
+
a && a.reduce((t, s, f) => (t[s] === void 0 && (t[s] = {}), f === a.length - 1 && (t[s] = r), t[s]), e);
|
|
92
95
|
};
|
|
93
|
-
function
|
|
96
|
+
function oe(e, n) {
|
|
97
|
+
if (J(e) && J(n)) {
|
|
98
|
+
const t = e.attributes, s = n.attributes;
|
|
99
|
+
if (t.length !== s.length)
|
|
100
|
+
return !1;
|
|
101
|
+
for (let f = 0; f < t.length; f++) {
|
|
102
|
+
const { name: o, value: i } = t[f];
|
|
103
|
+
if (n.getAttribute(o) !== i)
|
|
104
|
+
return !1;
|
|
105
|
+
}
|
|
106
|
+
return !0;
|
|
107
|
+
}
|
|
94
108
|
if (e === n)
|
|
95
109
|
return !0;
|
|
96
110
|
if (e === null || typeof e != "object" || n === null || typeof n != "object")
|
|
97
111
|
return !1;
|
|
98
|
-
const
|
|
99
|
-
if (
|
|
112
|
+
const r = Object.keys(e), a = Object.keys(n);
|
|
113
|
+
if (r.length !== a.length)
|
|
100
114
|
return !1;
|
|
101
|
-
for (const
|
|
102
|
-
if (!a.includes(
|
|
115
|
+
for (const t of r)
|
|
116
|
+
if (!a.includes(t) || !oe(e[t], n[t]))
|
|
103
117
|
return !1;
|
|
104
118
|
return !0;
|
|
105
119
|
}
|
|
106
|
-
function
|
|
120
|
+
function X(e, n) {
|
|
107
121
|
if (!Array.isArray(e) || !Array.isArray(n) || e.length !== n.length)
|
|
108
122
|
return !1;
|
|
109
|
-
for (let
|
|
110
|
-
if (!
|
|
123
|
+
for (let r = 0; r < e.length; r++)
|
|
124
|
+
if (!oe(e[r], n[r]))
|
|
111
125
|
return !1;
|
|
112
126
|
return !0;
|
|
113
127
|
}
|
|
114
|
-
const
|
|
115
|
-
function
|
|
116
|
-
function e(a,
|
|
117
|
-
console.error(`${
|
|
128
|
+
const ft = !0, Y = "[TresJS ▲ ■ ●] ";
|
|
129
|
+
function k() {
|
|
130
|
+
function e(a, t) {
|
|
131
|
+
console.error(`${Y} ${a}`, t || "");
|
|
118
132
|
}
|
|
119
133
|
function n(a) {
|
|
120
|
-
console.warn(`${
|
|
134
|
+
console.warn(`${Y} ${a}`);
|
|
121
135
|
}
|
|
122
|
-
function
|
|
136
|
+
function r(a, t) {
|
|
123
137
|
}
|
|
124
138
|
return {
|
|
125
139
|
logError: e,
|
|
126
140
|
logWarning: n,
|
|
127
|
-
logMessage:
|
|
141
|
+
logMessage: r
|
|
128
142
|
};
|
|
129
143
|
}
|
|
130
|
-
function
|
|
131
|
-
return typeof e == "number" ? [e, e, e] : e instanceof
|
|
144
|
+
function mt(e) {
|
|
145
|
+
return typeof e == "number" ? [e, e, e] : e instanceof Ae ? [e.x, e.y, e.z] : e;
|
|
132
146
|
}
|
|
133
|
-
function
|
|
147
|
+
function Ke(e) {
|
|
134
148
|
return e instanceof B ? e : Array.isArray(e) ? new B(...e) : new B(e);
|
|
135
149
|
}
|
|
136
|
-
function
|
|
150
|
+
function Xe({
|
|
137
151
|
scene: e,
|
|
138
152
|
canvas: n,
|
|
139
|
-
options:
|
|
153
|
+
options: r,
|
|
140
154
|
disableRender: a,
|
|
141
|
-
contextParts: { sizes:
|
|
155
|
+
contextParts: { sizes: t, camera: s }
|
|
142
156
|
}) {
|
|
143
157
|
const f = M(() => ({
|
|
144
|
-
alpha:
|
|
145
|
-
depth:
|
|
146
|
-
canvas:
|
|
147
|
-
context:
|
|
148
|
-
stencil:
|
|
149
|
-
antialias:
|
|
158
|
+
alpha: d(r.alpha),
|
|
159
|
+
depth: d(r.depth),
|
|
160
|
+
canvas: Be(n),
|
|
161
|
+
context: d(r.context),
|
|
162
|
+
stencil: d(r.stencil),
|
|
163
|
+
antialias: d(r.antialias) === void 0 ? (
|
|
150
164
|
// an opinionated default of tres
|
|
151
165
|
!0
|
|
152
|
-
) :
|
|
153
|
-
precision:
|
|
154
|
-
powerPreference:
|
|
155
|
-
premultipliedAlpha:
|
|
156
|
-
preserveDrawingBuffer:
|
|
157
|
-
logarithmicDepthBuffer:
|
|
158
|
-
failIfMajorPerformanceCaveat:
|
|
159
|
-
})), o =
|
|
166
|
+
) : d(r.antialias),
|
|
167
|
+
precision: d(r.precision),
|
|
168
|
+
powerPreference: d(r.powerPreference),
|
|
169
|
+
premultipliedAlpha: d(r.premultipliedAlpha),
|
|
170
|
+
preserveDrawingBuffer: d(r.preserveDrawingBuffer),
|
|
171
|
+
logarithmicDepthBuffer: d(r.logarithmicDepthBuffer),
|
|
172
|
+
failIfMajorPerformanceCaveat: d(r.failIfMajorPerformanceCaveat)
|
|
173
|
+
})), o = N(new H(f.value));
|
|
160
174
|
V(f, () => {
|
|
161
|
-
o.value.dispose(), o.value = new
|
|
175
|
+
o.value.dispose(), o.value = new H(f.value);
|
|
162
176
|
}), O(() => {
|
|
163
|
-
o.value.setSize(
|
|
177
|
+
o.value.setSize(t.width.value, t.height.value);
|
|
164
178
|
});
|
|
165
|
-
const { pixelRatio:
|
|
179
|
+
const { pixelRatio: i } = Re();
|
|
166
180
|
O(() => {
|
|
167
|
-
o.value.setPixelRatio(
|
|
181
|
+
o.value.setPixelRatio(i.value);
|
|
168
182
|
});
|
|
169
|
-
const { logError:
|
|
170
|
-
const v = new
|
|
183
|
+
const { logError: l } = k(), c = (() => {
|
|
184
|
+
const v = new H(), C = {
|
|
171
185
|
shadowMap: {
|
|
172
186
|
enabled: v.shadowMap.enabled,
|
|
173
187
|
type: v.shadowMap.type
|
|
@@ -180,112 +194,112 @@ function Ke({
|
|
|
180
194
|
return v.dispose(), C;
|
|
181
195
|
})();
|
|
182
196
|
O(() => {
|
|
183
|
-
const v =
|
|
184
|
-
v && (v in
|
|
197
|
+
const v = d(r.preset);
|
|
198
|
+
v && (v in b || l("Renderer Preset must be one of these: " + Object.keys(b).join(", ")), ae(o.value, b[v]));
|
|
185
199
|
const C = (x, E) => {
|
|
186
|
-
const A =
|
|
200
|
+
const A = d(x), T = () => {
|
|
187
201
|
if (v)
|
|
188
|
-
return
|
|
202
|
+
return K(b[v], E);
|
|
189
203
|
};
|
|
190
204
|
if (A !== void 0)
|
|
191
205
|
return A;
|
|
192
206
|
const m = T();
|
|
193
|
-
return m !== void 0 ? m :
|
|
194
|
-
}, y = (x, E) =>
|
|
195
|
-
y(
|
|
196
|
-
const _ = C(
|
|
207
|
+
return m !== void 0 ? m : K(c, E);
|
|
208
|
+
}, y = (x, E) => Je(o.value, E, C(x, E));
|
|
209
|
+
y(r.shadows, "shadowMap.enabled"), y(r.toneMapping, "toneMapping"), y(r.shadowMapType, "shadowMap.type"), y(r.useLegacyLights, "useLegacyLights"), y(r.outputColorSpace, "outputColorSpace"), y(r.toneMappingExposure, "toneMappingExposure");
|
|
210
|
+
const _ = C(r.clearColor, "clearColor");
|
|
197
211
|
_ && o.value.setClearColor(
|
|
198
|
-
_ ?
|
|
212
|
+
_ ? Ke(_) : new B(0)
|
|
199
213
|
// default clear color is not easily/efficiently retrievable from three
|
|
200
214
|
);
|
|
201
215
|
});
|
|
202
|
-
const { pause: p, resume: P, onLoop: L } =
|
|
216
|
+
const { pause: p, resume: P, onLoop: L } = ne();
|
|
203
217
|
return L(() => {
|
|
204
|
-
|
|
205
|
-
}), P(),
|
|
218
|
+
s.value && !d(a) && o.value.render(e.value, s.value);
|
|
219
|
+
}), P(), ue(() => {
|
|
206
220
|
p(), o.value.dispose(), o.value.forceContextLoss();
|
|
207
221
|
}), {
|
|
208
222
|
renderer: o
|
|
209
223
|
};
|
|
210
224
|
}
|
|
211
|
-
const
|
|
212
|
-
function
|
|
225
|
+
const Q = (e) => typeof e == "function", se = (e) => !!e && e.constructor === Array;
|
|
226
|
+
function Ye(e) {
|
|
213
227
|
const n = { nodes: {}, materials: {} };
|
|
214
|
-
return e && e.traverse((
|
|
215
|
-
|
|
228
|
+
return e && e.traverse((r) => {
|
|
229
|
+
r.name && (n.nodes[r.name] = r), r.material && !n.materials[r.material.name] && (n.materials[r.material.name] = r.material);
|
|
216
230
|
}), n;
|
|
217
231
|
}
|
|
218
|
-
async function
|
|
219
|
-
const { logError:
|
|
220
|
-
|
|
221
|
-
const
|
|
222
|
-
(
|
|
232
|
+
async function pt(e, n, r, a, t) {
|
|
233
|
+
const { logError: s } = k(), f = new e();
|
|
234
|
+
t && t(f), r && r(f);
|
|
235
|
+
const i = (Array.isArray(n) ? n : [n]).map(
|
|
236
|
+
(l) => new Promise((u, c) => {
|
|
223
237
|
f.load(
|
|
224
|
-
|
|
238
|
+
l,
|
|
225
239
|
(p) => {
|
|
226
|
-
p.scene && Object.assign(p,
|
|
240
|
+
p.scene && Object.assign(p, Ye(p.scene)), u(p);
|
|
227
241
|
},
|
|
228
242
|
a,
|
|
229
|
-
(p) => c(
|
|
243
|
+
(p) => c(s("[useLoader] - Failed to load resource", p))
|
|
230
244
|
);
|
|
231
245
|
})
|
|
232
246
|
);
|
|
233
|
-
return
|
|
247
|
+
return se(n) ? await Promise.all(i) : await i[0];
|
|
234
248
|
}
|
|
235
|
-
async function
|
|
236
|
-
const n = new
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
(o) =>
|
|
249
|
+
async function vt(e) {
|
|
250
|
+
const n = new he(), r = new De(n), a = (t) => new Promise((s, f) => {
|
|
251
|
+
r.load(
|
|
252
|
+
t,
|
|
253
|
+
(o) => s(o),
|
|
240
254
|
() => null,
|
|
241
255
|
() => {
|
|
242
256
|
f(new Error("[useTextures] - Failed to load texture"));
|
|
243
257
|
}
|
|
244
258
|
);
|
|
245
259
|
});
|
|
246
|
-
if (
|
|
247
|
-
const
|
|
248
|
-
return e.length > 1 ?
|
|
260
|
+
if (se(e)) {
|
|
261
|
+
const t = await Promise.all(e.map((s) => a(s)));
|
|
262
|
+
return e.length > 1 ? t : t[0];
|
|
249
263
|
} else {
|
|
250
264
|
const {
|
|
251
|
-
map:
|
|
252
|
-
displacementMap:
|
|
265
|
+
map: t,
|
|
266
|
+
displacementMap: s,
|
|
253
267
|
normalMap: f,
|
|
254
268
|
roughnessMap: o,
|
|
255
|
-
metalnessMap:
|
|
256
|
-
aoMap:
|
|
257
|
-
alphaMap:
|
|
269
|
+
metalnessMap: i,
|
|
270
|
+
aoMap: l,
|
|
271
|
+
alphaMap: u,
|
|
258
272
|
matcap: c
|
|
259
273
|
} = e;
|
|
260
274
|
return {
|
|
261
|
-
map:
|
|
262
|
-
displacementMap:
|
|
275
|
+
map: t ? await a(t) : null,
|
|
276
|
+
displacementMap: s ? await a(s) : null,
|
|
263
277
|
normalMap: f ? await a(f) : null,
|
|
264
278
|
roughnessMap: o ? await a(o) : null,
|
|
265
|
-
metalnessMap:
|
|
266
|
-
aoMap:
|
|
267
|
-
alphaMap:
|
|
279
|
+
metalnessMap: i ? await a(i) : null,
|
|
280
|
+
aoMap: l ? await a(l) : null,
|
|
281
|
+
alphaMap: u ? await a(u) : null,
|
|
268
282
|
matcap: c ? await a(c) : null
|
|
269
283
|
};
|
|
270
284
|
}
|
|
271
285
|
}
|
|
272
|
-
const
|
|
273
|
-
const
|
|
274
|
-
if (
|
|
286
|
+
const Qe = (e, { renderer: n, camera: r, raycaster: a }) => {
|
|
287
|
+
const t = M(() => n.value.domElement), { x: s, y: f } = Fe({ target: t }), { width: o, height: i, top: l, left: u } = ze(t), c = ({ x: m, y: w }) => {
|
|
288
|
+
if (t.value)
|
|
275
289
|
return {
|
|
276
|
-
x: (m -
|
|
277
|
-
y: -((w -
|
|
290
|
+
x: (m - u.value) / o.value * 2 - 1,
|
|
291
|
+
y: -((w - l.value) / i.value) * 2 + 1
|
|
278
292
|
};
|
|
279
293
|
}, p = ({ x: m, y: w }) => {
|
|
280
|
-
if (
|
|
281
|
-
return a.value.setFromCamera(new
|
|
294
|
+
if (r.value)
|
|
295
|
+
return a.value.setFromCamera(new ke(m, w), r.value), a.value.intersectObjects(e.value, !1);
|
|
282
296
|
}, P = (m) => {
|
|
283
297
|
const w = c({
|
|
284
|
-
x: (m == null ? void 0 : m.clientX) ??
|
|
298
|
+
x: (m == null ? void 0 : m.clientX) ?? s.value,
|
|
285
299
|
y: (m == null ? void 0 : m.clientY) ?? f.value
|
|
286
300
|
});
|
|
287
301
|
return w ? p(w) || [] : [];
|
|
288
|
-
}, L = M(() => P()), v =
|
|
302
|
+
}, L = M(() => P()), v = D(), C = D(), y = (m, w) => {
|
|
289
303
|
m.trigger({ event: w, intersects: P(w) });
|
|
290
304
|
}, _ = (m) => {
|
|
291
305
|
y(C, m);
|
|
@@ -298,9 +312,9 @@ const Ye = (e, { renderer: n, camera: t, raycaster: a }) => {
|
|
|
298
312
|
var w;
|
|
299
313
|
m instanceof PointerEvent && x === ((w = P(m)[0]) == null ? void 0 : w.object) && y(v, m);
|
|
300
314
|
}, T = (m) => C.trigger({ event: m, intersects: [] });
|
|
301
|
-
return
|
|
302
|
-
|
|
303
|
-
|
|
315
|
+
return le((m) => {
|
|
316
|
+
t.value && (t.value.addEventListener("pointerup", A), t.value.addEventListener("pointerdown", E), t.value.addEventListener("pointermove", _), t.value.addEventListener("pointerleave", T), m(() => {
|
|
317
|
+
t != null && t.value && (t.value.removeEventListener("pointerup", A), t.value.removeEventListener("pointerdown", E), t.value.removeEventListener("pointermove", _), t.value.removeEventListener("pointerleave", T));
|
|
304
318
|
}));
|
|
305
319
|
}), {
|
|
306
320
|
intersects: L,
|
|
@@ -308,197 +322,202 @@ const Ye = (e, { renderer: n, camera: t, raycaster: a }) => {
|
|
|
308
322
|
onPointerMove: (m) => C.on(m).off
|
|
309
323
|
};
|
|
310
324
|
};
|
|
311
|
-
function
|
|
312
|
-
const { logWarning: e } =
|
|
313
|
-
function n(a,
|
|
325
|
+
function gt() {
|
|
326
|
+
const { logWarning: e } = k();
|
|
327
|
+
function n(a, t, s) {
|
|
314
328
|
let f = null;
|
|
315
329
|
return a.traverse((o) => {
|
|
316
|
-
o[
|
|
317
|
-
}), f || e(`Child with ${
|
|
330
|
+
o[t] === s && (f = o);
|
|
331
|
+
}), f || e(`Child with ${t} '${s}' not found.`), f;
|
|
318
332
|
}
|
|
319
|
-
function
|
|
320
|
-
return n(a, "name",
|
|
333
|
+
function r(a, t) {
|
|
334
|
+
return n(a, "name", t);
|
|
321
335
|
}
|
|
322
336
|
return {
|
|
323
337
|
seek: n,
|
|
324
|
-
seekByName:
|
|
338
|
+
seekByName: r
|
|
325
339
|
};
|
|
326
340
|
}
|
|
327
|
-
const
|
|
328
|
-
const
|
|
341
|
+
const Ze = ({ scene: e, contextParts: n }) => {
|
|
342
|
+
const r = ce({
|
|
329
343
|
click: /* @__PURE__ */ new Map(),
|
|
330
344
|
pointerMove: /* @__PURE__ */ new Map(),
|
|
331
345
|
pointerEnter: /* @__PURE__ */ new Map(),
|
|
332
346
|
pointerLeave: /* @__PURE__ */ new Map()
|
|
333
|
-
}), a = (
|
|
334
|
-
Object.values(
|
|
335
|
-
},
|
|
336
|
-
const { onClick:
|
|
337
|
-
|
|
347
|
+
}), a = (l) => {
|
|
348
|
+
Object.values(r).forEach((u) => u.delete(l));
|
|
349
|
+
}, t = (l) => {
|
|
350
|
+
const { onClick: u, onPointerMove: c, onPointerEnter: p, onPointerLeave: P } = l;
|
|
351
|
+
u && r.click.set(l, u), c && r.pointerMove.set(l, c), p && r.pointerEnter.set(l, p), P && r.pointerLeave.set(l, P);
|
|
338
352
|
};
|
|
339
|
-
e.userData.tres__registerAtPointerEventHandler =
|
|
340
|
-
const
|
|
341
|
-
() =>
|
|
342
|
-
Object.values(
|
|
343
|
-
({ uuid:
|
|
353
|
+
e.userData.tres__registerAtPointerEventHandler = t, e.userData.tres__deregisterAtPointerEventHandler = a;
|
|
354
|
+
const s = M(
|
|
355
|
+
() => Ue(
|
|
356
|
+
Object.values(r).map((l) => Array.from(l.keys())).flat(),
|
|
357
|
+
({ uuid: l }) => l
|
|
344
358
|
)
|
|
345
|
-
), { onClick: f, onPointerMove: o } =
|
|
346
|
-
f(({ intersects:
|
|
359
|
+
), { onClick: f, onPointerMove: o } = Qe(s, n);
|
|
360
|
+
f(({ intersects: l, event: u }) => {
|
|
347
361
|
var c;
|
|
348
|
-
|
|
362
|
+
l.length && ((c = r.click.get(l[0].object)) == null || c(l[0], u));
|
|
349
363
|
});
|
|
350
|
-
let
|
|
351
|
-
return o(({ intersects:
|
|
364
|
+
let i;
|
|
365
|
+
return o(({ intersects: l, event: u }) => {
|
|
352
366
|
var v, C, y, _;
|
|
353
|
-
const c = (v =
|
|
354
|
-
|
|
367
|
+
const c = (v = l == null ? void 0 : l[0]) == null ? void 0 : v.object, { pointerLeave: p, pointerEnter: P, pointerMove: L } = r;
|
|
368
|
+
i && i !== c && ((C = p.get(i)) == null || C(i, u)), c && (i !== c && ((y = P.get(c)) == null || y(l[0], u)), (_ = L.get(c)) == null || _(l[0], u)), i = c || null;
|
|
355
369
|
}), {
|
|
356
|
-
registerObject:
|
|
370
|
+
registerObject: t,
|
|
357
371
|
deregisterObject: a
|
|
358
372
|
};
|
|
359
|
-
}, $ =
|
|
360
|
-
function
|
|
373
|
+
}, $ = z({}), ie = (e) => void Object.assign($.value, e);
|
|
374
|
+
function et({
|
|
361
375
|
scene: e,
|
|
362
376
|
canvas: n,
|
|
363
|
-
windowSize:
|
|
377
|
+
windowSize: r,
|
|
364
378
|
disableRender: a,
|
|
365
|
-
rendererOptions:
|
|
379
|
+
rendererOptions: t
|
|
366
380
|
}) {
|
|
367
|
-
const
|
|
381
|
+
const s = M(
|
|
368
382
|
() => {
|
|
369
383
|
var y;
|
|
370
|
-
return
|
|
384
|
+
return d(r) ? He() : je((y = d(n)) == null ? void 0 : y.parentElement);
|
|
371
385
|
}
|
|
372
|
-
), f = M(() =>
|
|
386
|
+
), f = M(() => s.value.width.value), o = M(() => s.value.height.value), i = M(() => f.value / o.value), l = {
|
|
373
387
|
height: o,
|
|
374
388
|
width: f,
|
|
375
|
-
aspectRatio:
|
|
389
|
+
aspectRatio: i
|
|
376
390
|
}, {
|
|
377
|
-
camera:
|
|
391
|
+
camera: u,
|
|
378
392
|
cameras: c,
|
|
379
393
|
addCamera: p,
|
|
380
394
|
removeCamera: P,
|
|
381
395
|
setCameraActive: L
|
|
382
|
-
} =
|
|
396
|
+
} = Ge({ sizes: l, scene: e }), { renderer: v } = Xe(
|
|
383
397
|
{
|
|
384
398
|
scene: e,
|
|
385
399
|
canvas: n,
|
|
386
|
-
options:
|
|
387
|
-
contextParts: { sizes:
|
|
400
|
+
options: t,
|
|
401
|
+
contextParts: { sizes: l, camera: u },
|
|
388
402
|
disableRender: a
|
|
389
403
|
}
|
|
390
404
|
), C = {
|
|
391
|
-
sizes:
|
|
405
|
+
sizes: l,
|
|
392
406
|
scene: e,
|
|
393
|
-
camera:
|
|
394
|
-
cameras:
|
|
407
|
+
camera: u,
|
|
408
|
+
cameras: fe(c),
|
|
395
409
|
renderer: v,
|
|
396
|
-
raycaster:
|
|
397
|
-
controls:
|
|
398
|
-
extend:
|
|
410
|
+
raycaster: N(new Te()),
|
|
411
|
+
controls: z(null),
|
|
412
|
+
extend: ie,
|
|
399
413
|
addCamera: p,
|
|
400
414
|
removeCamera: P,
|
|
401
415
|
setCameraActive: L
|
|
402
416
|
};
|
|
403
|
-
return
|
|
417
|
+
return ee("useTres", C), C;
|
|
404
418
|
}
|
|
405
|
-
function
|
|
406
|
-
const e =
|
|
419
|
+
function tt() {
|
|
420
|
+
const e = me("useTres");
|
|
407
421
|
if (!e)
|
|
408
422
|
throw new Error("useTresContext must be used together with useTresContextProvider");
|
|
409
423
|
return e;
|
|
410
424
|
}
|
|
411
|
-
const dt =
|
|
412
|
-
let
|
|
413
|
-
const { logError:
|
|
414
|
-
createElement(e, n,
|
|
425
|
+
const dt = tt;
|
|
426
|
+
let j = null, g = null;
|
|
427
|
+
const { logError: Z } = k(), rt = {
|
|
428
|
+
createElement(e, n, r, a) {
|
|
415
429
|
var f, o;
|
|
416
|
-
if (a || (a = {}), a.args || (a.args = []), e === "template" ||
|
|
430
|
+
if (a || (a = {}), a.args || (a.args = []), e === "template" || Ie(e))
|
|
417
431
|
return null;
|
|
418
|
-
let
|
|
432
|
+
let t = e.replace("Tres", ""), s;
|
|
419
433
|
if (e === "primitive") {
|
|
420
|
-
(a == null ? void 0 : a.object) === void 0 &&
|
|
421
|
-
const
|
|
422
|
-
|
|
434
|
+
(a == null ? void 0 : a.object) === void 0 && Z("Tres primitives need a prop 'object'");
|
|
435
|
+
const i = a.object;
|
|
436
|
+
t = i.type, s = Object.assign(i, { type: t, attach: a.attach, primitive: !0 });
|
|
423
437
|
} else {
|
|
424
|
-
const
|
|
425
|
-
|
|
438
|
+
const i = $.value[t];
|
|
439
|
+
i || Z(`${t} is not defined on the THREE namespace. Use extend to add it to the catalog.`), s = new i(...a.args);
|
|
426
440
|
}
|
|
427
|
-
return
|
|
441
|
+
return s.isCamera && (a != null && a.position || s.position.set(3, 3, 3), a != null && a.lookAt || s.lookAt(0, 0, 0)), (a == null ? void 0 : a.attach) === void 0 && (s.isMaterial ? s.attach = "material" : s.isBufferGeometry && (s.attach = "geometry")), s.isObject3D && ((f = a == null ? void 0 : a.material) != null && f.isMaterial && (s.userData.tres__materialViaProp = !0), (o = a == null ? void 0 : a.geometry) != null && o.isBufferGeometry && (s.userData.tres__geometryViaProp = !0)), s.userData || (s.userData = {}), s.userData.tres__name = t, s;
|
|
428
442
|
},
|
|
429
443
|
insert(e, n) {
|
|
430
|
-
var
|
|
431
|
-
if (n && n.isScene && (
|
|
432
|
-
|
|
444
|
+
var r, a, t, s, f, o, i, l, u;
|
|
445
|
+
if (n && n.isScene && (g = n), (((r = e == null ? void 0 : e.__vnode) == null ? void 0 : r.type) === "TresGroup" || ((a = e == null ? void 0 : e.__vnode) == null ? void 0 : a.type) === "TresObject3D") && n === null && !((s = (t = e == null ? void 0 : e.__vnode) == null ? void 0 : t.ctx) != null && s.asyncResolved)) {
|
|
446
|
+
j = e;
|
|
433
447
|
return;
|
|
434
448
|
} else
|
|
435
|
-
(f = e == null ? void 0 : e.__vnode) != null && f.type.includes("Controls") && n === null && (
|
|
436
|
-
if (n || (n =
|
|
449
|
+
(f = e == null ? void 0 : e.__vnode) != null && f.type.includes("Controls") && n === null && (j = g);
|
|
450
|
+
if (n || (n = j), e != null && e.isObject3D) {
|
|
437
451
|
if (e != null && e.isCamera) {
|
|
438
|
-
if (!(
|
|
452
|
+
if (!(g != null && g.userData.tres__registerCamera))
|
|
439
453
|
throw "could not find tres__registerCamera on scene's userData";
|
|
440
|
-
(
|
|
454
|
+
(i = g == null ? void 0 : (o = g.userData).tres__registerCamera) == null || i.call(o, e);
|
|
441
455
|
}
|
|
442
456
|
if (e != null && e.onClick || e != null && e.onPointerMove || e != null && e.onPointerEnter || e != null && e.onPointerLeave) {
|
|
443
|
-
if (!(
|
|
457
|
+
if (!(g != null && g.userData.tres__registerAtPointerEventHandler))
|
|
444
458
|
throw "could not find tres__registerAtPointerEventHandler on scene's userData";
|
|
445
|
-
(
|
|
459
|
+
(u = g == null ? void 0 : (l = g.userData).tres__registerAtPointerEventHandler) == null || u.call(l, e);
|
|
446
460
|
}
|
|
447
461
|
}
|
|
448
462
|
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));
|
|
449
463
|
},
|
|
450
464
|
remove(e) {
|
|
451
|
-
var n,
|
|
465
|
+
var n, r;
|
|
452
466
|
if (e) {
|
|
453
467
|
if (e.isObject3D) {
|
|
454
|
-
const a = e,
|
|
455
|
-
var
|
|
456
|
-
const
|
|
457
|
-
|
|
458
|
-
},
|
|
459
|
-
if (!
|
|
468
|
+
const a = e, t = (i) => {
|
|
469
|
+
var u, c;
|
|
470
|
+
const l = i;
|
|
471
|
+
i.userData.tres__materialViaProp || (u = l.material) == null || u.dispose(), i.userData.tres__geometryViaProp || (c = l.geometry) == null || c.dispose();
|
|
472
|
+
}, s = g == null ? void 0 : g.userData.tres__deregisterAtPointerEventHandler, f = (i) => {
|
|
473
|
+
if (!s)
|
|
460
474
|
throw "could not find tres__deregisterAtPointerEventHandler on scene's userData";
|
|
461
|
-
(
|
|
462
|
-
}, o = (
|
|
463
|
-
const
|
|
464
|
-
if (!
|
|
475
|
+
(i != null && i.onClick || i != null && i.onPointerMove || i != null && i.onPointerEnter || i != null && i.onPointerLeave) && (s == null || s(i));
|
|
476
|
+
}, o = (i) => {
|
|
477
|
+
const l = g == null ? void 0 : g.userData.tres__deregisterCamera;
|
|
478
|
+
if (!l)
|
|
465
479
|
throw "could not find tres__deregisterCamera on scene's userData";
|
|
466
|
-
|
|
480
|
+
i.isCamera && (l == null || l(i));
|
|
467
481
|
};
|
|
468
|
-
a.traverse((
|
|
469
|
-
|
|
470
|
-
}),
|
|
482
|
+
a.traverse((i) => {
|
|
483
|
+
t(i), o(i), f == null || f(i);
|
|
484
|
+
}), t(a), o(a), f == null || f(a);
|
|
471
485
|
}
|
|
472
|
-
(n = e.removeFromParent) == null || n.call(e), (
|
|
486
|
+
(n = e.removeFromParent) == null || n.call(e), (r = e.dispose) == null || r.call(e);
|
|
473
487
|
}
|
|
474
488
|
},
|
|
475
|
-
patchProp(e, n,
|
|
489
|
+
patchProp(e, n, r, a) {
|
|
476
490
|
if (e) {
|
|
477
|
-
let
|
|
478
|
-
if (
|
|
479
|
-
const
|
|
480
|
-
|
|
491
|
+
let t = e, s = n, f = S(s), o = t == null ? void 0 : t[f];
|
|
492
|
+
if (s === "args") {
|
|
493
|
+
const l = e, u = r ?? [], c = a ?? [], p = e.userData.tres__name || e.type;
|
|
494
|
+
console.log("replacing", {
|
|
495
|
+
instanceName: p,
|
|
496
|
+
args: c,
|
|
497
|
+
prevArgs: u,
|
|
498
|
+
diff: !X(u, c)
|
|
499
|
+
}), p && !X(u, c) && (t = Object.assign(l, new $.value[p](...a)));
|
|
481
500
|
return;
|
|
482
501
|
}
|
|
483
|
-
if (
|
|
484
|
-
if (
|
|
502
|
+
if (t.type === "BufferGeometry") {
|
|
503
|
+
if (s === "args")
|
|
485
504
|
return;
|
|
486
|
-
|
|
487
|
-
S(
|
|
505
|
+
t.setAttribute(
|
|
506
|
+
S(s),
|
|
488
507
|
new be(...a)
|
|
489
508
|
);
|
|
490
509
|
return;
|
|
491
510
|
}
|
|
492
|
-
if (
|
|
493
|
-
const
|
|
494
|
-
o =
|
|
511
|
+
if (s.includes("-") && o === void 0) {
|
|
512
|
+
const l = s.split("-");
|
|
513
|
+
o = l.reduce((u, c) => u[S(c)], t), s = l.pop(), f = s.toLowerCase(), o != null && o.set || (t = l.reduce((u, c) => u[S(c)], t));
|
|
495
514
|
}
|
|
496
|
-
let
|
|
497
|
-
if (
|
|
498
|
-
Array.isArray(
|
|
515
|
+
let i = a;
|
|
516
|
+
if (i === "" && (i = !0), Q(o)) {
|
|
517
|
+
Array.isArray(i) ? e[f](...i) : e[f](i);
|
|
499
518
|
return;
|
|
500
519
|
}
|
|
501
|
-
!(o != null && o.set) && !
|
|
520
|
+
!(o != null && o.set) && !Q(o) ? t[f] = i : o.constructor === i.constructor && (o != null && o.copy) ? o == null || o.copy(i) : Array.isArray(i) ? o.set(...i) : !o.isColor && o.setScalar ? o.setScalar(i) : o.set(i);
|
|
502
521
|
}
|
|
503
522
|
},
|
|
504
523
|
parentNode(e) {
|
|
@@ -513,9 +532,9 @@ const { logError: Y } = b(), tt = {
|
|
|
513
532
|
setScopeId: () => void 0,
|
|
514
533
|
cloneNode: () => void 0,
|
|
515
534
|
insertStaticContent: () => void 0
|
|
516
|
-
}, { render:
|
|
517
|
-
|
|
518
|
-
const
|
|
535
|
+
}, { render: nt } = pe(rt);
|
|
536
|
+
ie(Ce);
|
|
537
|
+
const at = ["data-scene"], ot = /* @__PURE__ */ q({
|
|
519
538
|
__name: "TresCanvas",
|
|
520
539
|
props: {
|
|
521
540
|
shadows: { type: Boolean },
|
|
@@ -542,42 +561,42 @@ const nt = ["data-scene"], at = /* @__PURE__ */ q({
|
|
|
542
561
|
failIfMajorPerformanceCaveat: { type: Boolean }
|
|
543
562
|
},
|
|
544
563
|
setup(e) {
|
|
545
|
-
const n = e, { logWarning:
|
|
546
|
-
|
|
547
|
-
const
|
|
548
|
-
scene:
|
|
564
|
+
const n = e, { logWarning: r } = k(), a = z(), t = N(new Se());
|
|
565
|
+
ne();
|
|
566
|
+
const s = ve(), f = M(() => n.disableRender), o = et({
|
|
567
|
+
scene: t,
|
|
549
568
|
canvas: a,
|
|
550
569
|
windowSize: M(() => n.windowSize),
|
|
551
570
|
disableRender: f,
|
|
552
571
|
rendererOptions: n
|
|
553
572
|
});
|
|
554
|
-
|
|
555
|
-
const
|
|
573
|
+
Ze({ scene: t.value, contextParts: o });
|
|
574
|
+
const i = q({
|
|
556
575
|
setup() {
|
|
557
|
-
return
|
|
576
|
+
return ee("useTres", o), () => U(ge, null, s && s.default ? s.default() : []);
|
|
558
577
|
}
|
|
559
|
-
}),
|
|
560
|
-
const c =
|
|
561
|
-
|
|
578
|
+
}), l = () => {
|
|
579
|
+
const c = t.value;
|
|
580
|
+
nt(U(i), c), G(t);
|
|
562
581
|
};
|
|
563
582
|
V(a, (c) => {
|
|
564
|
-
c && (
|
|
583
|
+
c && (l(), !o.camera.value && !n.camera && (r(
|
|
565
584
|
"No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."
|
|
566
|
-
),
|
|
585
|
+
), u()));
|
|
567
586
|
}), V(() => n.camera, (c, p) => {
|
|
568
587
|
c ? o.addCamera(c, !0) : p && (p.removeFromParent(), o.removeCamera(p));
|
|
569
588
|
}, {
|
|
570
589
|
immediate: !0
|
|
571
590
|
});
|
|
572
|
-
const
|
|
591
|
+
const u = () => {
|
|
573
592
|
const c = new W(45, window.innerWidth / window.innerHeight, 0.1, 1e3);
|
|
574
593
|
c.position.set(3, 3, 3), c.lookAt(0, 0, 0), o.addCamera(c), o.cameras.value.length >= 2 && (c.removeFromParent(), o.removeCamera(c));
|
|
575
594
|
};
|
|
576
|
-
return (c, p) => (
|
|
595
|
+
return (c, p) => (de(), ye("canvas", {
|
|
577
596
|
ref_key: "canvas",
|
|
578
597
|
ref: a,
|
|
579
|
-
"data-scene":
|
|
580
|
-
style:
|
|
598
|
+
"data-scene": t.value.uuid,
|
|
599
|
+
style: we({
|
|
581
600
|
display: "block",
|
|
582
601
|
width: "100%",
|
|
583
602
|
height: "100%",
|
|
@@ -588,43 +607,43 @@ const nt = ["data-scene"], at = /* @__PURE__ */ q({
|
|
|
588
607
|
touchAction: "none",
|
|
589
608
|
zIndex: 1
|
|
590
609
|
})
|
|
591
|
-
}, null, 12,
|
|
610
|
+
}, null, 12, at));
|
|
592
611
|
}
|
|
593
|
-
}),
|
|
612
|
+
}), st = [
|
|
594
613
|
"TresCanvas",
|
|
595
614
|
"TresLeches",
|
|
596
615
|
"TresScene"
|
|
597
|
-
],
|
|
616
|
+
], it = {
|
|
598
617
|
template: {
|
|
599
618
|
compilerOptions: {
|
|
600
|
-
isCustomElement: (e) => e.startsWith("Tres") && !
|
|
619
|
+
isCustomElement: (e) => e.startsWith("Tres") && !st.includes(e) || e === "primitive"
|
|
601
620
|
}
|
|
602
621
|
}
|
|
603
|
-
},
|
|
622
|
+
}, yt = it, wt = {
|
|
604
623
|
install(e) {
|
|
605
|
-
e.component("TresCanvas",
|
|
624
|
+
e.component("TresCanvas", ot);
|
|
606
625
|
}
|
|
607
626
|
};
|
|
608
627
|
export {
|
|
609
|
-
|
|
628
|
+
ot as TresCanvas,
|
|
610
629
|
$ as catalogue,
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
630
|
+
wt as default,
|
|
631
|
+
ie as extend,
|
|
632
|
+
ft as isProd,
|
|
633
|
+
Ke as normalizeColor,
|
|
634
|
+
mt as normalizeVectorFlexibleParam,
|
|
635
|
+
yt as templateCompilerOptions,
|
|
636
|
+
Ye as trasverseObjects,
|
|
637
|
+
Ge as useCamera,
|
|
638
|
+
pt as useLoader,
|
|
639
|
+
k as useLogger,
|
|
640
|
+
Ze as usePointerEventHandler,
|
|
641
|
+
Qe as useRaycaster,
|
|
642
|
+
ne as useRenderLoop,
|
|
643
|
+
Xe as useRenderer,
|
|
644
|
+
gt as useSeek,
|
|
645
|
+
vt as useTexture,
|
|
627
646
|
dt as useTres,
|
|
628
|
-
|
|
629
|
-
|
|
647
|
+
tt as useTresContext,
|
|
648
|
+
et as useTresContextProvider
|
|
630
649
|
};
|
package/dist/tres.umd.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* name: @tresjs/core
|
|
3
|
-
* version: v3.1.0-next.
|
|
3
|
+
* version: v3.1.0-next.1
|
|
4
4
|
* (c) 2023
|
|
5
5
|
* description: Declarative ThreeJS using Vue Components
|
|
6
6
|
* author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
|
|
7
7
|
*/
|
|
8
|
-
(function(d,f){typeof exports=="object"&&typeof module<"u"?f(exports,require("vue"),require("three"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","three","@vueuse/core"],f):(d=typeof globalThis<"u"?globalThis:d||self,f(d.tres={},d.Vue,d.Three,d.VueUseCore))})(this,function(d,f,v,g){"use strict";function oe(e){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:()=>e[t]})}}return r.default=e,Object.freeze(r)}const se=oe(v),W=({sizes:e,scene:r})=>{var s,u;const t=f.computed(()=>r.value.children.filter(l=>l.isCamera)),n=f.ref(((u=(s=t.value)==null?void 0:s[0])==null?void 0:u.uuid)??""),a=f.computed(()=>t.value.find(l=>l.uuid===n.value)??t.value.at(0)),i=(l,c=!1)=>{t.value.some(({uuid:y})=>y===l.uuid)||(r.value.add(l),f.triggerRef(r),c&&o(l))},m=l=>{r.value.remove(l),f.triggerRef(r)},o=l=>{const c=l instanceof v.Camera?l.uuid:l;c&&(n.value=c)};return f.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(l=>{l instanceof v.PerspectiveCamera&&(l.aspect=e.aspectRatio.value),(l instanceof v.PerspectiveCamera||l instanceof v.OrthographicCamera)&&l.updateProjectionMatrix()})}),r.value.userData.tres__registerCamera=i,r.value.userData.tres__deregisterCamera=m,{camera:a,cameras:t,addCamera:i,removeCamera:m,setCameraActive:o}},$=g.createEventHook(),q=g.createEventHook(),z=g.createEventHook(),D=new v.Clock;let B=0,x=0;const{pause:ie,resume:ue,isActive:le}=g.useRafFn(()=>{$.trigger({delta:B,elapsed:x,clock:D}),q.trigger({delta:B,elapsed:x,clock:D}),z.trigger({delta:B,elapsed:x,clock:D})},{immediate:!1});z.on(()=>{B=D.getDelta(),x=D.getElapsedTime()});const F=()=>({onBeforeLoop:$.on,onLoop:q.on,onAfterLoop:z.on,pause:ie,resume:ue,isActive:le}),T={realistic:{outputColorSpace:v.SRGBColorSpace,toneMapping:v.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:v.PCFSoftShadowMap}}},N=(e,r)=>{for(const t of Object.keys(r))r[t]instanceof Object&&Object.assign(r[t],N(e[t],r[t]));return Object.assign(e||{},r),e},ce=fe("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 V(e){return e.replace(/-([a-z])/g,(r,t)=>t.toUpperCase())}function fe(e,r){const t=Object.create(null),n=e.split(",");for(let a=0;a<n.length;a++)t[n[a]]=!0;return r?a=>!!t[a.toLowerCase()]:a=>!!t[a]}const me=(e,r)=>{const t=new Set,n=[];for(const a of e){const i=r(a);t.has(i)||(t.add(i),n.push(a))}return n},I=(e,r)=>{if(!r)return;const t=Array.isArray(r)?r:r.match(/([^[.\]])+/g);return t==null?void 0:t.reduce((n,a)=>n&&n[a],e)},pe=(e,r,t)=>{const n=Array.isArray(r)?r:r.match(/([^[.\]])+/g);n&&n.reduce((a,i,m)=>(a[i]===void 0&&(a[i]={}),m===n.length-1&&(a[i]=t),a[i]),e)};function U(e,r){if(e===r)return!0;if(e===null||typeof e!="object"||r===null||typeof r!="object")return!1;const t=Object.keys(e),n=Object.keys(r);if(t.length!==n.length)return!1;for(const a of t)if(!n.includes(a)||!U(e[a],r[a]))return!1;return!0}function de(e,r){if(!Array.isArray(e)||!Array.isArray(r)||e.length!==r.length)return!1;for(let t=0;t<e.length;t++)if(!U(e[t],r[t]))return!1;return!0}const ge=!0,J="[TresJS ▲ ■ ●] ";function A(){function e(n,a){console.error(`${J} ${n}`,a||"")}function r(n){console.warn(`${J} ${n}`)}function t(n,a){}return{logError:e,logWarning:r,logMessage:t}}function ve(e){return typeof e=="number"?[e,e,e]:e instanceof v.Vector3?[e.x,e.y,e.z]:e}function K(e){return e instanceof v.Color?e:Array.isArray(e)?new v.Color(...e):new v.Color(e)}function X({scene:e,canvas:r,options:t,disableRender:n,contextParts:{sizes:a,camera:i}}){const m=f.computed(()=>({alpha:g.toValue(t.alpha),depth:g.toValue(t.depth),canvas:g.unrefElement(r),context:g.toValue(t.context),stencil:g.toValue(t.stencil),antialias:g.toValue(t.antialias)===void 0?!0:g.toValue(t.antialias),precision:g.toValue(t.precision),powerPreference:g.toValue(t.powerPreference),premultipliedAlpha:g.toValue(t.premultipliedAlpha),preserveDrawingBuffer:g.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:g.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:g.toValue(t.failIfMajorPerformanceCaveat)})),o=f.shallowRef(new v.WebGLRenderer(m.value));f.watch(m,()=>{o.value.dispose(),o.value=new v.WebGLRenderer(m.value)}),f.watchEffect(()=>{o.value.setSize(a.width.value,a.height.value)});const{pixelRatio:s}=g.useDevicePixelRatio();f.watchEffect(()=>{o.value.setPixelRatio(s.value)});const{logError:u}=A(),c=(()=>{const w=new v.WebGLRenderer,_={shadowMap:{enabled:w.shadowMap.enabled,type:w.shadowMap.type},toneMapping:w.toneMapping,toneMappingExposure:w.toneMappingExposure,outputColorSpace:w.outputColorSpace,useLegacyLights:w.useLegacyLights};return w.dispose(),_})();f.watchEffect(()=>{const w=g.toValue(t.preset);w&&(w in T||u("Renderer Preset must be one of these: "+Object.keys(T).join(", ")),N(o.value,T[w]));const _=(S,b)=>{const O=g.toValue(S),E=()=>{if(w)return I(T[w],b)};if(O!==void 0)return O;const p=E();return p!==void 0?p:I(c,b)},P=(S,b)=>pe(o.value,b,_(S,b));P(t.shadows,"shadowMap.enabled"),P(t.toneMapping,"toneMapping"),P(t.shadowMapType,"shadowMap.type"),P(t.useLegacyLights,"useLegacyLights"),P(t.outputColorSpace,"outputColorSpace"),P(t.toneMappingExposure,"toneMappingExposure");const L=_(t.clearColor,"clearColor");L&&o.value.setClearColor(L?K(L):new v.Color(0))});const{pause:y,resume:h,onLoop:k}=F();return k(()=>{i.value&&!g.toValue(n)&&o.value.render(e.value,i.value)}),h(),f.onUnmounted(()=>{y(),o.value.dispose(),o.value.forceContextLoss()}),{renderer:o}}const Y=e=>typeof e=="function",Q=e=>!!e&&e.constructor===Array;function Z(e){const r={nodes:{},materials:{}};return e&&e.traverse(t=>{t.name&&(r.nodes[t.name]=t),t.material&&!r.materials[t.material.name]&&(r.materials[t.material.name]=t.material)}),r}async function ye(e,r,t,n,a){const{logError:i}=A(),m=new e;a&&a(m),t&&t(m);const s=(Array.isArray(r)?r:[r]).map(u=>new Promise((l,c)=>{m.load(u,y=>{y.scene&&Object.assign(y,Z(y.scene)),l(y)},n,y=>c(i("[useLoader] - Failed to load resource",y)))}));return Q(r)?await Promise.all(s):await s[0]}async function we(e){const r=new v.LoadingManager,t=new v.TextureLoader(r),n=a=>new Promise((i,m)=>{t.load(a,o=>i(o),()=>null,()=>{m(new Error("[useTextures] - Failed to load texture"))})});if(Q(e)){const a=await Promise.all(e.map(i=>n(i)));return e.length>1?a:a[0]}else{const{map:a,displacementMap:i,normalMap:m,roughnessMap:o,metalnessMap:s,aoMap:u,alphaMap:l,matcap:c}=e;return{map:a?await n(a):null,displacementMap:i?await n(i):null,normalMap:m?await n(m):null,roughnessMap:o?await n(o):null,metalnessMap:s?await n(s):null,aoMap:u?await n(u):null,alphaMap:l?await n(l):null,matcap:c?await n(c):null}}}const H=(e,{renderer:r,camera:t,raycaster:n})=>{const a=f.computed(()=>r.value.domElement),{x:i,y:m}=g.usePointer({target:a}),{width:o,height:s,top:u,left:l}=g.useElementBounding(a),c=({x:p,y:M})=>{if(a.value)return{x:(p-l.value)/o.value*2-1,y:-((M-u.value)/s.value)*2+1}},y=({x:p,y:M})=>{if(t.value)return n.value.setFromCamera(new v.Vector2(p,M),t.value),n.value.intersectObjects(e.value,!1)},h=p=>{const M=c({x:(p==null?void 0:p.clientX)??i.value,y:(p==null?void 0:p.clientY)??m.value});return M?y(M)||[]:[]},k=f.computed(()=>h()),w=g.createEventHook(),_=g.createEventHook(),P=(p,M)=>{p.trigger({event:M,intersects:h(M)})},L=p=>{P(_,p)};let S;const b=p=>{var M;S=(M=h(p)[0])==null?void 0:M.object},O=p=>{var M;p instanceof PointerEvent&&S===((M=h(p)[0])==null?void 0:M.object)&&P(w,p)},E=p=>_.trigger({event:p,intersects:[]});return f.watchPostEffect(p=>{a.value&&(a.value.addEventListener("pointerup",O),a.value.addEventListener("pointerdown",b),a.value.addEventListener("pointermove",L),a.value.addEventListener("pointerleave",E),p(()=>{a!=null&&a.value&&(a.value.removeEventListener("pointerup",O),a.value.removeEventListener("pointerdown",b),a.value.removeEventListener("pointermove",L),a.value.removeEventListener("pointerleave",E))}))}),{intersects:k,onClick:p=>w.on(p).off,onPointerMove:p=>_.on(p).off}};function Ce(){const{logWarning:e}=A();function r(n,a,i){let m=null;return n.traverse(o=>{o[a]===i&&(m=o)}),m||e(`Child with ${a} '${i}' not found.`),m}function t(n,a){return r(n,"name",a)}return{seek:r,seekByName:t}}const ee=({scene:e,contextParts:r})=>{const t=f.reactive({click:new Map,pointerMove:new Map,pointerEnter:new Map,pointerLeave:new Map}),n=u=>{Object.values(t).forEach(l=>l.delete(u))},a=u=>{const{onClick:l,onPointerMove:c,onPointerEnter:y,onPointerLeave:h}=u;l&&t.click.set(u,l),c&&t.pointerMove.set(u,c),y&&t.pointerEnter.set(u,y),h&&t.pointerLeave.set(u,h)};e.userData.tres__registerAtPointerEventHandler=a,e.userData.tres__deregisterAtPointerEventHandler=n;const i=f.computed(()=>me(Object.values(t).map(u=>Array.from(u.keys())).flat(),({uuid:u})=>u)),{onClick:m,onPointerMove:o}=H(i,r);m(({intersects:u,event:l})=>{var c;u.length&&((c=t.click.get(u[0].object))==null||c(u[0],l))});let s;return o(({intersects:u,event:l})=>{var w,_,P,L;const c=(w=u==null?void 0:u[0])==null?void 0:w.object,{pointerLeave:y,pointerEnter:h,pointerMove:k}=t;s&&s!==c&&((_=y.get(s))==null||_(s,l)),c&&(s!==c&&((P=h.get(c))==null||P(u[0],l)),(L=k.get(c))==null||L(u[0],l)),s=c||null}),{registerObject:a,deregisterObject:n}},j=f.ref({}),G=e=>void Object.assign(j.value,e);function te({scene:e,canvas:r,windowSize:t,disableRender:n,rendererOptions:a}){const i=f.computed(()=>{var P;return g.toValue(t)?g.useWindowSize():g.useElementSize((P=g.toValue(r))==null?void 0:P.parentElement)}),m=f.computed(()=>i.value.width.value),o=f.computed(()=>i.value.height.value),s=f.computed(()=>m.value/o.value),u={height:o,width:m,aspectRatio:s},{camera:l,cameras:c,addCamera:y,removeCamera:h,setCameraActive:k}=W({sizes:u,scene:e}),{renderer:w}=X({scene:e,canvas:r,options:a,contextParts:{sizes:u,camera:l},disableRender:n}),_={sizes:u,scene:e,camera:l,cameras:f.readonly(c),renderer:w,raycaster:f.shallowRef(new v.Raycaster),controls:f.ref(null),extend:G,addCamera:y,removeCamera:h,setCameraActive:k};return f.provide("useTres",_),_}function re(){const e=f.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const Pe=re;function Se(e){}let R=null,C=null;const{logError:ne}=A(),Me={createElement(e,r,t,n){var m,o;if(n||(n={}),n.args||(n.args=[]),e==="template"||ce(e))return null;let a=e.replace("Tres",""),i;if(e==="primitive"){(n==null?void 0:n.object)===void 0&&ne("Tres primitives need a prop 'object'");const s=n.object;a=s.type,i=Object.assign(s,{type:a,attach:n.attach,primitive:!0})}else{const s=j.value[a];s||ne(`${a} is not defined on the THREE namespace. Use extend to add it to the catalog.`),i=new s(...n.args)}return i.isCamera&&(n!=null&&n.position||i.position.set(3,3,3),n!=null&&n.lookAt||i.lookAt(0,0,0)),(n==null?void 0:n.attach)===void 0&&(i.isMaterial?i.attach="material":i.isBufferGeometry&&(i.attach="geometry")),i.isObject3D&&((m=n==null?void 0:n.material)!=null&&m.isMaterial&&(i.userData.tres__materialViaProp=!0),(o=n==null?void 0:n.geometry)!=null&&o.isBufferGeometry&&(i.userData.tres__geometryViaProp=!0)),i},insert(e,r){var t,n,a,i,m,o,s,u,l;if(r&&r.isScene&&(C=r),(((t=e==null?void 0:e.__vnode)==null?void 0:t.type)==="TresGroup"||((n=e==null?void 0:e.__vnode)==null?void 0:n.type)==="TresObject3D")&&r===null&&!((i=(a=e==null?void 0:e.__vnode)==null?void 0:a.ctx)!=null&&i.asyncResolved)){R=e;return}else(m=e==null?void 0:e.__vnode)!=null&&m.type.includes("Controls")&&r===null&&(R=C);if(r||(r=R),e!=null&&e.isObject3D){if(e!=null&&e.isCamera){if(!(C!=null&&C.userData.tres__registerCamera))throw"could not find tres__registerCamera on scene's userData";(s=C==null?void 0:(o=C.userData).tres__registerCamera)==null||s.call(o,e)}if(e!=null&&e.onClick||e!=null&&e.onPointerMove||e!=null&&e.onPointerEnter||e!=null&&e.onPointerLeave){if(!(C!=null&&C.userData.tres__registerAtPointerEventHandler))throw"could not find tres__registerAtPointerEventHandler on scene's userData";(l=C==null?void 0:(u=C.userData).tres__registerAtPointerEventHandler)==null||l.call(u,e)}}e!=null&&e.isObject3D&&(r!=null&&r.isObject3D)?(r.add(e),e.dispatchEvent({type:"added"})):e!=null&&e.isFog?r.fog=e:typeof(e==null?void 0:e.attach)=="string"&&(e.__previousAttach=e[r==null?void 0:r.attach],r&&(r[e.attach]=e))},remove(e){var r,t;if(e){if(e.isObject3D){const n=e,a=s=>{var l,c;const u=s;s.userData.tres__materialViaProp||(l=u.material)==null||l.dispose(),s.userData.tres__geometryViaProp||(c=u.geometry)==null||c.dispose()},i=C==null?void 0:C.userData.tres__deregisterAtPointerEventHandler,m=s=>{if(!i)throw"could not find tres__deregisterAtPointerEventHandler on scene's userData";(s!=null&&s.onClick||s!=null&&s.onPointerMove||s!=null&&s.onPointerEnter||s!=null&&s.onPointerLeave)&&(i==null||i(s))},o=s=>{const u=C==null?void 0:C.userData.tres__deregisterCamera;if(!u)throw"could not find tres__deregisterCamera on scene's userData";s.isCamera&&(u==null||u(s))};n.traverse(s=>{a(s),o(s),m==null||m(s)}),a(n),o(n),m==null||m(n)}(r=e.removeFromParent)==null||r.call(e),(t=e.dispose)==null||t.call(e)}},patchProp(e,r,t,n){if(e){let a=e,i=r,m=V(i),o=a==null?void 0:a[m];if(i==="args"){const u=e,l=t??[],c=n??[];e.type&&!de(l,c)&&(a=Object.assign(u,new j.value[e.type](...n)));return}if(a.type==="BufferGeometry"){if(i==="args")return;a.setAttribute(V(i),new v.BufferAttribute(...n));return}if(i.includes("-")&&o===void 0){const u=i.split("-");o=u.reduce((l,c)=>l[V(c)],a),i=u.pop(),m=i.toLowerCase(),o!=null&&o.set||(a=u.reduce((l,c)=>l[V(c)],a))}let s=n;if(s===""&&(s=!0),Y(o)){Array.isArray(s)?e[m](...s):e[m](s);return}!(o!=null&&o.set)&&!Y(o)?a[m]=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},{render:_e}=f.createRenderer(Me);G(se);const he=["data-scene"],ae=f.defineComponent({__name:"TresCanvas",props:{shadows:{type:Boolean},clearColor:{},toneMapping:{},shadowMapType:{},useLegacyLights:{type:Boolean},outputColorSpace:{},toneMappingExposure:{},windowSize:{type:Boolean},preset:{},disableRender:{type:Boolean},camera:{},context:{},precision:{},alpha:{type:Boolean,default:!1},premultipliedAlpha:{type:Boolean},antialias:{type:Boolean,default:!0},stencil:{type:Boolean,default:!0},preserveDrawingBuffer:{type:Boolean,default:!1},powerPreference:{},depth:{type:Boolean,default:!0},logarithmicDepthBuffer:{type:Boolean},failIfMajorPerformanceCaveat:{type:Boolean}},setup(e){const r=e,{logWarning:t}=A(),n=f.ref(),a=f.shallowRef(new v.Scene);F();const i=f.useSlots(),m=f.computed(()=>r.disableRender),o=te({scene:a,canvas:n,windowSize:f.computed(()=>r.windowSize),disableRender:m,rendererOptions:r});ee({scene:a.value,contextParts:o});const s=f.defineComponent({setup(){return f.provide("useTres",o),()=>f.h(f.Fragment,null,i&&i.default?i.default():[])}}),u=()=>{const c=a.value;_e(f.h(s),c),f.triggerRef(a)};f.watch(n,c=>{c&&(u(),!o.camera.value&&!r.camera&&(t("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),l()))}),f.watch(()=>r.camera,(c,y)=>{c?o.addCamera(c,!0):y&&(y.removeFromParent(),o.removeCamera(y))},{immediate:!0});const l=()=>{const c=new v.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);c.position.set(3,3,3),c.lookAt(0,0,0),o.addCamera(c),o.cameras.value.length>=2&&(c.removeFromParent(),o.removeCamera(c))};return(c,y)=>(f.openBlock(),f.createElementBlock("canvas",{ref_key:"canvas",ref:n,"data-scene":a.value.uuid,style:f.normalizeStyle({display:"block",width:"100%",height:"100%",position:c.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none",zIndex:1})},null,12,he))}}),Le=["TresCanvas","TresLeches","TresScene"],be={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!Le.includes(e)||e==="primitive"}}},ke={install(e){e.component("TresCanvas",ae)}};d.TresCanvas=ae,d.catalogue=j,d.default=ke,d.extend=G,d.isProd=ge,d.normalizeColor=K,d.normalizeVectorFlexibleParam=ve,d.templateCompilerOptions=be,d.trasverseObjects=Z,d.useCamera=W,d.useLoader=ye,d.useLogger=A,d.usePointerEventHandler=ee,d.useRaycaster=H,d.useRenderLoop=F,d.useRenderer=X,d.useSeek=Ce,d.useTexture=we,d.useTres=Pe,d.useTresContext=re,d.useTresContextProvider=te,Object.defineProperties(d,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
|
8
|
+
(function(d,m){typeof exports=="object"&&typeof module<"u"?m(exports,require("vue"),require("three"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","three","@vueuse/core"],m):(d=typeof globalThis<"u"?globalThis:d||self,m(d.tres={},d.Vue,d.Three,d.VueUseCore))})(this,function(d,m,y,g){"use strict";function ie(e){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const a=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,a.get?a:{enumerable:!0,get:()=>e[t]})}}return r.default=e,Object.freeze(r)}const ue=ie(y),W=({sizes:e,scene:r})=>{var i,l;const t=m.computed(()=>r.value.children.filter(u=>u.isCamera)),a=m.ref(((l=(i=t.value)==null?void 0:i[0])==null?void 0:l.uuid)??""),n=m.computed(()=>t.value.find(u=>u.uuid===a.value)??t.value.at(0)),s=(u,f=!1)=>{t.value.some(({uuid:v})=>v===u.uuid)||(r.value.add(u),m.triggerRef(r),f&&o(u))},c=u=>{r.value.remove(u),m.triggerRef(r)},o=u=>{const f=u instanceof y.Camera?u.uuid:u;f&&(a.value=f)};return m.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(u=>{u instanceof y.PerspectiveCamera&&(u.aspect=e.aspectRatio.value),(u instanceof y.PerspectiveCamera||u instanceof y.OrthographicCamera)&&u.updateProjectionMatrix()})}),r.value.userData.tres__registerCamera=s,r.value.userData.tres__deregisterCamera=c,{camera:n,cameras:t,addCamera:s,removeCamera:c,setCameraActive:o}},$=g.createEventHook(),q=g.createEventHook(),z=g.createEventHook(),O=new y.Clock;let B=0,x=0;const{pause:le,resume:fe,isActive:ce}=g.useRafFn(()=>{$.trigger({delta:B,elapsed:x,clock:O}),q.trigger({delta:B,elapsed:x,clock:O}),z.trigger({delta:B,elapsed:x,clock:O})},{immediate:!1});z.on(()=>{B=O.getDelta(),x=O.getElapsedTime()});const F=()=>({onBeforeLoop:$.on,onLoop:q.on,onAfterLoop:z.on,pause:le,resume:fe,isActive:ce}),T={realistic:{outputColorSpace:y.SRGBColorSpace,toneMapping:y.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:y.PCFSoftShadowMap}}},N=(e,r)=>{for(const t of Object.keys(r))r[t]instanceof Object&&Object.assign(r[t],N(e[t],r[t]));return Object.assign(e||{},r),e},me=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 I(e){return e&&e.nodeType===1}function V(e){return e.replace(/-([a-z])/g,(r,t)=>t.toUpperCase())}function pe(e,r){const t=Object.create(null),a=e.split(",");for(let n=0;n<a.length;n++)t[a[n]]=!0;return r?n=>!!t[n.toLowerCase()]:n=>!!t[n]}const de=(e,r)=>{const t=new Set,a=[];for(const n of e){const s=r(n);t.has(s)||(t.add(s),a.push(n))}return a},U=(e,r)=>{if(!r)return;const t=Array.isArray(r)?r:r.match(/([^[.\]])+/g);return t==null?void 0:t.reduce((a,n)=>a&&a[n],e)},ge=(e,r,t)=>{const a=Array.isArray(r)?r:r.match(/([^[.\]])+/g);a&&a.reduce((n,s,c)=>(n[s]===void 0&&(n[s]={}),c===a.length-1&&(n[s]=t),n[s]),e)};function J(e,r){if(I(e)&&I(r)){const n=e.attributes,s=r.attributes;if(n.length!==s.length)return!1;for(let c=0;c<n.length;c++){const{name:o,value:i}=n[c];if(r.getAttribute(o)!==i)return!1}return!0}if(e===r)return!0;if(e===null||typeof e!="object"||r===null||typeof r!="object")return!1;const t=Object.keys(e),a=Object.keys(r);if(t.length!==a.length)return!1;for(const n of t)if(!a.includes(n)||!J(e[n],r[n]))return!1;return!0}function K(e,r){if(!Array.isArray(e)||!Array.isArray(r)||e.length!==r.length)return!1;for(let t=0;t<e.length;t++)if(!J(e[t],r[t]))return!1;return!0}const ve=!0,X="[TresJS ▲ ■ ●] ";function A(){function e(a,n){console.error(`${X} ${a}`,n||"")}function r(a){console.warn(`${X} ${a}`)}function t(a,n){}return{logError:e,logWarning:r,logMessage:t}}function ye(e){return typeof e=="number"?[e,e,e]:e instanceof y.Vector3?[e.x,e.y,e.z]:e}function Y(e){return e instanceof y.Color?e:Array.isArray(e)?new y.Color(...e):new y.Color(e)}function Q({scene:e,canvas:r,options:t,disableRender:a,contextParts:{sizes:n,camera:s}}){const c=m.computed(()=>({alpha:g.toValue(t.alpha),depth:g.toValue(t.depth),canvas:g.unrefElement(r),context:g.toValue(t.context),stencil:g.toValue(t.stencil),antialias:g.toValue(t.antialias)===void 0?!0:g.toValue(t.antialias),precision:g.toValue(t.precision),powerPreference:g.toValue(t.powerPreference),premultipliedAlpha:g.toValue(t.premultipliedAlpha),preserveDrawingBuffer:g.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:g.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:g.toValue(t.failIfMajorPerformanceCaveat)})),o=m.shallowRef(new y.WebGLRenderer(c.value));m.watch(c,()=>{o.value.dispose(),o.value=new y.WebGLRenderer(c.value)}),m.watchEffect(()=>{o.value.setSize(n.width.value,n.height.value)});const{pixelRatio:i}=g.useDevicePixelRatio();m.watchEffect(()=>{o.value.setPixelRatio(i.value)});const{logError:l}=A(),f=(()=>{const w=new y.WebGLRenderer,M={shadowMap:{enabled:w.shadowMap.enabled,type:w.shadowMap.type},toneMapping:w.toneMapping,toneMappingExposure:w.toneMappingExposure,outputColorSpace:w.outputColorSpace,useLegacyLights:w.useLegacyLights};return w.dispose(),M})();m.watchEffect(()=>{const w=g.toValue(t.preset);w&&(w in T||l("Renderer Preset must be one of these: "+Object.keys(T).join(", ")),N(o.value,T[w]));const M=(D,b)=>{const S=g.toValue(D),j=()=>{if(w)return U(T[w],b)};if(S!==void 0)return S;const p=j();return p!==void 0?p:U(f,b)},P=(D,b)=>ge(o.value,b,M(D,b));P(t.shadows,"shadowMap.enabled"),P(t.toneMapping,"toneMapping"),P(t.shadowMapType,"shadowMap.type"),P(t.useLegacyLights,"useLegacyLights"),P(t.outputColorSpace,"outputColorSpace"),P(t.toneMappingExposure,"toneMappingExposure");const L=M(t.clearColor,"clearColor");L&&o.value.setClearColor(L?Y(L):new y.Color(0))});const{pause:v,resume:h,onLoop:k}=F();return k(()=>{s.value&&!g.toValue(a)&&o.value.render(e.value,s.value)}),h(),m.onUnmounted(()=>{v(),o.value.dispose(),o.value.forceContextLoss()}),{renderer:o}}const Z=e=>typeof e=="function",H=e=>!!e&&e.constructor===Array;function ee(e){const r={nodes:{},materials:{}};return e&&e.traverse(t=>{t.name&&(r.nodes[t.name]=t),t.material&&!r.materials[t.material.name]&&(r.materials[t.material.name]=t.material)}),r}async function we(e,r,t,a,n){const{logError:s}=A(),c=new e;n&&n(c),t&&t(c);const i=(Array.isArray(r)?r:[r]).map(l=>new Promise((u,f)=>{c.load(l,v=>{v.scene&&Object.assign(v,ee(v.scene)),u(v)},a,v=>f(s("[useLoader] - Failed to load resource",v)))}));return H(r)?await Promise.all(i):await i[0]}async function Ce(e){const r=new y.LoadingManager,t=new y.TextureLoader(r),a=n=>new Promise((s,c)=>{t.load(n,o=>s(o),()=>null,()=>{c(new Error("[useTextures] - Failed to load texture"))})});if(H(e)){const n=await Promise.all(e.map(s=>a(s)));return e.length>1?n:n[0]}else{const{map:n,displacementMap:s,normalMap:c,roughnessMap:o,metalnessMap:i,aoMap:l,alphaMap:u,matcap:f}=e;return{map:n?await a(n):null,displacementMap:s?await a(s):null,normalMap:c?await a(c):null,roughnessMap:o?await a(o):null,metalnessMap:i?await a(i):null,aoMap:l?await a(l):null,alphaMap:u?await a(u):null,matcap:f?await a(f):null}}}const te=(e,{renderer:r,camera:t,raycaster:a})=>{const n=m.computed(()=>r.value.domElement),{x:s,y:c}=g.usePointer({target:n}),{width:o,height:i,top:l,left:u}=g.useElementBounding(n),f=({x:p,y:_})=>{if(n.value)return{x:(p-u.value)/o.value*2-1,y:-((_-l.value)/i.value)*2+1}},v=({x:p,y:_})=>{if(t.value)return a.value.setFromCamera(new y.Vector2(p,_),t.value),a.value.intersectObjects(e.value,!1)},h=p=>{const _=f({x:(p==null?void 0:p.clientX)??s.value,y:(p==null?void 0:p.clientY)??c.value});return _?v(_)||[]:[]},k=m.computed(()=>h()),w=g.createEventHook(),M=g.createEventHook(),P=(p,_)=>{p.trigger({event:_,intersects:h(_)})},L=p=>{P(M,p)};let D;const b=p=>{var _;D=(_=h(p)[0])==null?void 0:_.object},S=p=>{var _;p instanceof PointerEvent&&D===((_=h(p)[0])==null?void 0:_.object)&&P(w,p)},j=p=>M.trigger({event:p,intersects:[]});return m.watchPostEffect(p=>{n.value&&(n.value.addEventListener("pointerup",S),n.value.addEventListener("pointerdown",b),n.value.addEventListener("pointermove",L),n.value.addEventListener("pointerleave",j),p(()=>{n!=null&&n.value&&(n.value.removeEventListener("pointerup",S),n.value.removeEventListener("pointerdown",b),n.value.removeEventListener("pointermove",L),n.value.removeEventListener("pointerleave",j))}))}),{intersects:k,onClick:p=>w.on(p).off,onPointerMove:p=>M.on(p).off}};function Pe(){const{logWarning:e}=A();function r(a,n,s){let c=null;return a.traverse(o=>{o[n]===s&&(c=o)}),c||e(`Child with ${n} '${s}' not found.`),c}function t(a,n){return r(a,"name",n)}return{seek:r,seekByName:t}}const re=({scene:e,contextParts:r})=>{const t=m.reactive({click:new Map,pointerMove:new Map,pointerEnter:new Map,pointerLeave:new Map}),a=l=>{Object.values(t).forEach(u=>u.delete(l))},n=l=>{const{onClick:u,onPointerMove:f,onPointerEnter:v,onPointerLeave:h}=l;u&&t.click.set(l,u),f&&t.pointerMove.set(l,f),v&&t.pointerEnter.set(l,v),h&&t.pointerLeave.set(l,h)};e.userData.tres__registerAtPointerEventHandler=n,e.userData.tres__deregisterAtPointerEventHandler=a;const s=m.computed(()=>de(Object.values(t).map(l=>Array.from(l.keys())).flat(),({uuid:l})=>l)),{onClick:c,onPointerMove:o}=te(s,r);c(({intersects:l,event:u})=>{var f;l.length&&((f=t.click.get(l[0].object))==null||f(l[0],u))});let i;return o(({intersects:l,event:u})=>{var w,M,P,L;const f=(w=l==null?void 0:l[0])==null?void 0:w.object,{pointerLeave:v,pointerEnter:h,pointerMove:k}=t;i&&i!==f&&((M=v.get(i))==null||M(i,u)),f&&(i!==f&&((P=h.get(f))==null||P(l[0],u)),(L=k.get(f))==null||L(l[0],u)),i=f||null}),{registerObject:n,deregisterObject:a}},E=m.ref({}),G=e=>void Object.assign(E.value,e);function ne({scene:e,canvas:r,windowSize:t,disableRender:a,rendererOptions:n}){const s=m.computed(()=>{var P;return g.toValue(t)?g.useWindowSize():g.useElementSize((P=g.toValue(r))==null?void 0:P.parentElement)}),c=m.computed(()=>s.value.width.value),o=m.computed(()=>s.value.height.value),i=m.computed(()=>c.value/o.value),l={height:o,width:c,aspectRatio:i},{camera:u,cameras:f,addCamera:v,removeCamera:h,setCameraActive:k}=W({sizes:l,scene:e}),{renderer:w}=Q({scene:e,canvas:r,options:n,contextParts:{sizes:l,camera:u},disableRender:a}),M={sizes:l,scene:e,camera:u,cameras:m.readonly(f),renderer:w,raycaster:m.shallowRef(new y.Raycaster),controls:m.ref(null),extend:G,addCamera:v,removeCamera:h,setCameraActive:k};return m.provide("useTres",M),M}function ae(){const e=m.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const _e=ae;function Oe(e){}let R=null,C=null;const{logError:oe}=A(),Me={createElement(e,r,t,a){var c,o;if(a||(a={}),a.args||(a.args=[]),e==="template"||me(e))return null;let n=e.replace("Tres",""),s;if(e==="primitive"){(a==null?void 0:a.object)===void 0&&oe("Tres primitives need a prop 'object'");const i=a.object;n=i.type,s=Object.assign(i,{type:n,attach:a.attach,primitive:!0})}else{const i=E.value[n];i||oe(`${n} is not defined on the THREE namespace. Use extend to add it to the catalog.`),s=new i(...a.args)}return s.isCamera&&(a!=null&&a.position||s.position.set(3,3,3),a!=null&&a.lookAt||s.lookAt(0,0,0)),(a==null?void 0:a.attach)===void 0&&(s.isMaterial?s.attach="material":s.isBufferGeometry&&(s.attach="geometry")),s.isObject3D&&((c=a==null?void 0:a.material)!=null&&c.isMaterial&&(s.userData.tres__materialViaProp=!0),(o=a==null?void 0:a.geometry)!=null&&o.isBufferGeometry&&(s.userData.tres__geometryViaProp=!0)),s.userData||(s.userData={}),s.userData.tres__name=n,s},insert(e,r){var t,a,n,s,c,o,i,l,u;if(r&&r.isScene&&(C=r),(((t=e==null?void 0:e.__vnode)==null?void 0:t.type)==="TresGroup"||((a=e==null?void 0:e.__vnode)==null?void 0:a.type)==="TresObject3D")&&r===null&&!((s=(n=e==null?void 0:e.__vnode)==null?void 0:n.ctx)!=null&&s.asyncResolved)){R=e;return}else(c=e==null?void 0:e.__vnode)!=null&&c.type.includes("Controls")&&r===null&&(R=C);if(r||(r=R),e!=null&&e.isObject3D){if(e!=null&&e.isCamera){if(!(C!=null&&C.userData.tres__registerCamera))throw"could not find tres__registerCamera on scene's userData";(i=C==null?void 0:(o=C.userData).tres__registerCamera)==null||i.call(o,e)}if(e!=null&&e.onClick||e!=null&&e.onPointerMove||e!=null&&e.onPointerEnter||e!=null&&e.onPointerLeave){if(!(C!=null&&C.userData.tres__registerAtPointerEventHandler))throw"could not find tres__registerAtPointerEventHandler on scene's userData";(u=C==null?void 0:(l=C.userData).tres__registerAtPointerEventHandler)==null||u.call(l,e)}}e!=null&&e.isObject3D&&(r!=null&&r.isObject3D)?(r.add(e),e.dispatchEvent({type:"added"})):e!=null&&e.isFog?r.fog=e:typeof(e==null?void 0:e.attach)=="string"&&(e.__previousAttach=e[r==null?void 0:r.attach],r&&(r[e.attach]=e))},remove(e){var r,t;if(e){if(e.isObject3D){const a=e,n=i=>{var u,f;const l=i;i.userData.tres__materialViaProp||(u=l.material)==null||u.dispose(),i.userData.tres__geometryViaProp||(f=l.geometry)==null||f.dispose()},s=C==null?void 0:C.userData.tres__deregisterAtPointerEventHandler,c=i=>{if(!s)throw"could not find tres__deregisterAtPointerEventHandler on scene's userData";(i!=null&&i.onClick||i!=null&&i.onPointerMove||i!=null&&i.onPointerEnter||i!=null&&i.onPointerLeave)&&(s==null||s(i))},o=i=>{const l=C==null?void 0:C.userData.tres__deregisterCamera;if(!l)throw"could not find tres__deregisterCamera on scene's userData";i.isCamera&&(l==null||l(i))};a.traverse(i=>{n(i),o(i),c==null||c(i)}),n(a),o(a),c==null||c(a)}(r=e.removeFromParent)==null||r.call(e),(t=e.dispose)==null||t.call(e)}},patchProp(e,r,t,a){if(e){let n=e,s=r,c=V(s),o=n==null?void 0:n[c];if(s==="args"){const l=e,u=t??[],f=a??[],v=e.userData.tres__name||e.type;console.log("replacing",{instanceName:v,args:f,prevArgs:u,diff:!K(u,f)}),v&&!K(u,f)&&(n=Object.assign(l,new E.value[v](...a)));return}if(n.type==="BufferGeometry"){if(s==="args")return;n.setAttribute(V(s),new y.BufferAttribute(...a));return}if(s.includes("-")&&o===void 0){const l=s.split("-");o=l.reduce((u,f)=>u[V(f)],n),s=l.pop(),c=s.toLowerCase(),o!=null&&o.set||(n=l.reduce((u,f)=>u[V(f)],n))}let i=a;if(i===""&&(i=!0),Z(o)){Array.isArray(i)?e[c](...i):e[c](i);return}!(o!=null&&o.set)&&!Z(o)?n[c]=i:o.constructor===i.constructor&&(o!=null&&o.copy)?o==null||o.copy(i):Array.isArray(i)?o.set(...i):!o.isColor&&o.setScalar?o.setScalar(i):o.set(i)}},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:he}=m.createRenderer(Me);G(ue);const Le=["data-scene"],se=m.defineComponent({__name:"TresCanvas",props:{shadows:{type:Boolean},clearColor:{},toneMapping:{},shadowMapType:{},useLegacyLights:{type:Boolean},outputColorSpace:{},toneMappingExposure:{},windowSize:{type:Boolean},preset:{},disableRender:{type:Boolean},camera:{},context:{},precision:{},alpha:{type:Boolean,default:!1},premultipliedAlpha:{type:Boolean},antialias:{type:Boolean,default:!0},stencil:{type:Boolean,default:!0},preserveDrawingBuffer:{type:Boolean,default:!1},powerPreference:{},depth:{type:Boolean,default:!0},logarithmicDepthBuffer:{type:Boolean},failIfMajorPerformanceCaveat:{type:Boolean}},setup(e){const r=e,{logWarning:t}=A(),a=m.ref(),n=m.shallowRef(new y.Scene);F();const s=m.useSlots(),c=m.computed(()=>r.disableRender),o=ne({scene:n,canvas:a,windowSize:m.computed(()=>r.windowSize),disableRender:c,rendererOptions:r});re({scene:n.value,contextParts:o});const i=m.defineComponent({setup(){return m.provide("useTres",o),()=>m.h(m.Fragment,null,s&&s.default?s.default():[])}}),l=()=>{const f=n.value;he(m.h(i),f),m.triggerRef(n)};m.watch(a,f=>{f&&(l(),!o.camera.value&&!r.camera&&(t("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),u()))}),m.watch(()=>r.camera,(f,v)=>{f?o.addCamera(f,!0):v&&(v.removeFromParent(),o.removeCamera(v))},{immediate:!0});const u=()=>{const f=new y.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);f.position.set(3,3,3),f.lookAt(0,0,0),o.addCamera(f),o.cameras.value.length>=2&&(f.removeFromParent(),o.removeCamera(f))};return(f,v)=>(m.openBlock(),m.createElementBlock("canvas",{ref_key:"canvas",ref:a,"data-scene":n.value.uuid,style:m.normalizeStyle({display:"block",width:"100%",height:"100%",position:f.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none",zIndex:1})},null,12,Le))}}),be=["TresCanvas","TresLeches","TresScene"],ke={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!be.includes(e)||e==="primitive"}}},Ae={install(e){e.component("TresCanvas",se)}};d.TresCanvas=se,d.catalogue=E,d.default=Ae,d.extend=G,d.isProd=ve,d.normalizeColor=Y,d.normalizeVectorFlexibleParam=ye,d.templateCompilerOptions=ke,d.trasverseObjects=ee,d.useCamera=W,d.useLoader=we,d.useLogger=A,d.usePointerEventHandler=re,d.useRaycaster=te,d.useRenderLoop=F,d.useRenderer=Q,d.useSeek=Pe,d.useTexture=Ce,d.useTres=_e,d.useTresContext=ae,d.useTresContextProvider=ne,Object.defineProperties(d,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export declare function toSetMethodName(key: string): string;
|
|
2
2
|
export declare const merge: (target: any, source: any) => any;
|
|
3
3
|
export declare const isHTMLTag: (key: string) => boolean;
|
|
4
|
+
export declare function isDOMElement(obj: any): obj is HTMLElement;
|
|
4
5
|
export declare function kebabToCamel(str: string): string;
|
|
5
6
|
export declare function makeMap(str: string, expectsLowerCase?: boolean): (key: string) => boolean;
|
|
6
7
|
export declare const uniqueBy: <T, K>(array: T[], iteratee: (value: T) => K) => T[];
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tresjs/core",
|
|
3
3
|
"description": "Declarative ThreeJS using Vue Components",
|
|
4
|
-
"version": "3.1.0-next.
|
|
4
|
+
"version": "3.1.0-next.1",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "pnpm@8.3.1",
|
|
7
7
|
"author": "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",
|