mirage-engine 0.3.8 → 0.3.9
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/mirage-engine.js +412 -395
- package/dist/mirage-engine.umd.js +11 -11
- package/package.json +4 -4
package/dist/mirage-engine.js
CHANGED
|
@@ -12,20 +12,20 @@ var ae = (s, e, t) => e in s ? _e(s, e, { enumerable: !0, configurable: !0, writ
|
|
|
12
12
|
}, be = (s, e) => Fe(s, Ne(e));
|
|
13
13
|
var u = (s, e, t) => (ae(s, typeof e != "symbol" ? e + "" : e, t), t);
|
|
14
14
|
var we = (s, e, t) => new Promise((r, i) => {
|
|
15
|
-
var
|
|
15
|
+
var c = (a) => {
|
|
16
16
|
try {
|
|
17
|
-
|
|
17
|
+
o(t.next(a));
|
|
18
18
|
} catch (l) {
|
|
19
19
|
i(l);
|
|
20
20
|
}
|
|
21
|
-
}, n = (
|
|
21
|
+
}, n = (a) => {
|
|
22
22
|
try {
|
|
23
|
-
|
|
23
|
+
o(t.throw(a));
|
|
24
24
|
} catch (l) {
|
|
25
25
|
i(l);
|
|
26
26
|
}
|
|
27
|
-
},
|
|
28
|
-
|
|
27
|
+
}, o = (a) => a.done ? r(a.value) : Promise.resolve(a.value).then(c, n);
|
|
28
|
+
o((t = t.apply(s, e)).next());
|
|
29
29
|
});
|
|
30
30
|
import * as y from "three";
|
|
31
31
|
const Le = {
|
|
@@ -54,12 +54,12 @@ const Le = {
|
|
|
54
54
|
CAPTURE_8: "8",
|
|
55
55
|
CAPTURE_9: "9",
|
|
56
56
|
CAPTURE_10: "10"
|
|
57
|
-
},
|
|
57
|
+
}, O = {
|
|
58
58
|
NAME: "data-mirage-travel",
|
|
59
59
|
KEY: "mirageTravel",
|
|
60
60
|
VALUES: xe,
|
|
61
61
|
MAX_LAYERS: Object.keys(xe).length - 1
|
|
62
|
-
},
|
|
62
|
+
}, z = {
|
|
63
63
|
NAME: "data-mirage-filter",
|
|
64
64
|
KEY: "mirageFilter",
|
|
65
65
|
VALUES: Le
|
|
@@ -142,32 +142,32 @@ class Me {
|
|
|
142
142
|
this.pendingMask |= q, this.isDomDirty = !0, this.scrollTimer = null;
|
|
143
143
|
}, 150)), this.pendingStyles.size > 0 && (this.onStyleChange.forEach((r) => r(this.pendingStyles)), this.pendingStyles.clear()), this.onRender.forEach((r) => r()), requestAnimationFrame(this.renderLoop);
|
|
144
144
|
});
|
|
145
|
-
var i,
|
|
145
|
+
var i, c;
|
|
146
146
|
this.target = e;
|
|
147
147
|
const r = (i = t.resizeDebounce) != null ? i : !0;
|
|
148
148
|
r === !1 ? this.resizeConfig = { enabled: !1, delay: 0 } : r === !0 ? this.resizeConfig = { enabled: !0, delay: 150 } : this.resizeConfig = {
|
|
149
149
|
enabled: !0,
|
|
150
|
-
delay: (
|
|
150
|
+
delay: (c = r.delay) != null ? c : 150,
|
|
151
151
|
onStart: r.onStart,
|
|
152
152
|
onEnd: r.onEnd
|
|
153
153
|
}, this.observer = new MutationObserver((n) => {
|
|
154
|
-
let
|
|
155
|
-
for (const
|
|
156
|
-
if (
|
|
157
|
-
|
|
154
|
+
let o = re;
|
|
155
|
+
for (const a of n)
|
|
156
|
+
if (a.type === "childList")
|
|
157
|
+
o |= ie, a.removedNodes.length > 0 && a.removedNodes.forEach((l) => {
|
|
158
158
|
l instanceof HTMLElement && this.pendingDeletions.add(l);
|
|
159
159
|
});
|
|
160
|
-
else if (
|
|
161
|
-
if (
|
|
162
|
-
|
|
163
|
-
const l =
|
|
160
|
+
else if (a.type === "attributes")
|
|
161
|
+
if (a.attributeName === "style") {
|
|
162
|
+
o |= q | Z;
|
|
163
|
+
const l = a.target, d = He(l.style);
|
|
164
164
|
this.pendingStyles.set(l, d);
|
|
165
165
|
} else
|
|
166
|
-
|
|
166
|
+
a.attributeName === "class" ? o |= q | Z : a.attributeName && a.attributeName.startsWith("data-") && (o |= q | Z, a.attributeName.startsWith("data-mirage") && (o |= ie));
|
|
167
167
|
else
|
|
168
|
-
|
|
169
|
-
if (
|
|
170
|
-
if (this.pendingMask |=
|
|
168
|
+
a.type === "characterData" && (o |= ce | q);
|
|
169
|
+
if (o !== re) {
|
|
170
|
+
if (this.pendingMask |= o, o & ie) {
|
|
171
171
|
this.clearTimers(), this.isDomDirty = !0;
|
|
172
172
|
return;
|
|
173
173
|
}
|
|
@@ -197,7 +197,7 @@ const W = 1, K = 2, D = {
|
|
|
197
197
|
SELECTED: 1,
|
|
198
198
|
getCaptureLayer: (s) => 31 - s,
|
|
199
199
|
HIDDEN: 31
|
|
200
|
-
}, Ce = Object.values(
|
|
200
|
+
}, Ce = Object.values(z.VALUES);
|
|
201
201
|
class Ae {
|
|
202
202
|
/**
|
|
203
203
|
* Calculates or retrieves the exact alphabetic baseline (in pixels) for the given font.
|
|
@@ -215,13 +215,13 @@ class Ae {
|
|
|
215
215
|
return 0;
|
|
216
216
|
const t = document.createElement("div"), r = document.createElement("span"), i = document.createElement("img");
|
|
217
217
|
t.style.visibility = "hidden", t.style.position = "absolute", t.style.top = "0px", t.style.left = "0px", t.style.font = e, t.style.margin = "0", t.style.padding = "0", t.style.border = "none", r.style.margin = "0", r.style.padding = "0", r.style.border = "none", r.style.lineHeight = "normal", i.width = 1, i.height = 1, i.style.verticalAlign = "baseline", r.appendChild(document.createTextNode("Hidden Text")), t.appendChild(r), t.appendChild(i), document.body.appendChild(t);
|
|
218
|
-
const
|
|
219
|
-
return document.body.removeChild(t),
|
|
218
|
+
const c = i.offsetTop - r.offsetTop;
|
|
219
|
+
return document.body.removeChild(t), c;
|
|
220
220
|
}
|
|
221
221
|
}
|
|
222
222
|
u(Ae, "cache", /* @__PURE__ */ new Map());
|
|
223
223
|
class Pe extends y.MeshBasicMaterial {
|
|
224
|
-
constructor(t, r, i,
|
|
224
|
+
constructor(t, r, i, c, n = 2) {
|
|
225
225
|
super({
|
|
226
226
|
transparent: !0,
|
|
227
227
|
side: y.FrontSide,
|
|
@@ -232,34 +232,34 @@ class Pe extends y.MeshBasicMaterial {
|
|
|
232
232
|
u(this, "qualityFactor");
|
|
233
233
|
if (this.canvas = document.createElement("canvas"), this.ctx = this.canvas.getContext("2d"), !this.ctx)
|
|
234
234
|
throw new Error("[Mirage] Failed to create canvas context");
|
|
235
|
-
this.qualityFactor = n, this.map = new y.CanvasTexture(this.canvas), this.map.colorSpace = y.LinearSRGBColorSpace, this.map.minFilter = y.LinearFilter, this.map.magFilter = y.LinearFilter, this.updateText(t, r, i,
|
|
235
|
+
this.qualityFactor = n, this.map = new y.CanvasTexture(this.canvas), this.map.colorSpace = y.LinearSRGBColorSpace, this.map.minFilter = y.LinearFilter, this.map.magFilter = y.LinearFilter, this.updateText(t, r, i, c);
|
|
236
236
|
}
|
|
237
237
|
wrapText(t, r) {
|
|
238
238
|
const i = t.split(`
|
|
239
|
-
`),
|
|
239
|
+
`), c = [];
|
|
240
240
|
return i.forEach((n) => {
|
|
241
|
-
const
|
|
242
|
-
if (
|
|
243
|
-
|
|
241
|
+
const o = n.match(/[^\s\-]+\-?|\-|\s+/g) || [];
|
|
242
|
+
if (o.length === 0) {
|
|
243
|
+
c.push("");
|
|
244
244
|
return;
|
|
245
245
|
}
|
|
246
|
-
let
|
|
247
|
-
for (let l = 1; l <
|
|
248
|
-
const d =
|
|
249
|
-
this.ctx.measureText(
|
|
246
|
+
let a = o[0];
|
|
247
|
+
for (let l = 1; l < o.length; l++) {
|
|
248
|
+
const d = o[l];
|
|
249
|
+
this.ctx.measureText(a + d).width <= r + 2 ? a += d : (a && c.push(a), a = d.trimStart());
|
|
250
250
|
}
|
|
251
|
-
|
|
252
|
-
}),
|
|
251
|
+
a && c.push(a);
|
|
252
|
+
}), c;
|
|
253
253
|
}
|
|
254
|
-
updateText(t, r, i,
|
|
254
|
+
updateText(t, r, i, c, n) {
|
|
255
255
|
n !== void 0 && (this.qualityFactor = n);
|
|
256
|
-
const
|
|
257
|
-
this.canvas.width !== l || this.canvas.height !== d ? (this.canvas.width = l, this.canvas.height = d) : this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height), this.ctx.setTransform(
|
|
256
|
+
const a = (window.devicePixelRatio || 1) * this.qualityFactor, l = i * a, d = c * a;
|
|
257
|
+
this.canvas.width !== l || this.canvas.height !== d ? (this.canvas.width = l, this.canvas.height = d) : this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height), this.ctx.setTransform(a, 0, 0, a, 0, 0), this.ctx.font = r.font, this.ctx.fillStyle = r.color, this.ctx.textBaseline = "alphabetic", this.ctx.globalAlpha = 1;
|
|
258
258
|
const h = this.wrapText(t, i), f = r.lineHeight, p = Ae.getBaseline(r.font);
|
|
259
|
-
h.forEach((g,
|
|
260
|
-
const x =
|
|
261
|
-
let
|
|
262
|
-
r.textAlign === "center" ?
|
|
259
|
+
h.forEach((g, m) => {
|
|
260
|
+
const x = m * f + p;
|
|
261
|
+
let S = 0;
|
|
262
|
+
r.textAlign === "center" ? S = i / 2 : r.textAlign === "right" && (S = i), this.ctx.textAlign = r.textAlign, this.ctx.fillText(g, S, x);
|
|
263
263
|
}), this.map && (this.map.needsUpdate = !0);
|
|
264
264
|
}
|
|
265
265
|
dispose() {
|
|
@@ -279,8 +279,8 @@ function ee(s) {
|
|
|
279
279
|
/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\)/
|
|
280
280
|
);
|
|
281
281
|
if (e) {
|
|
282
|
-
const t = parseInt(e[1], 10), r = parseInt(e[2], 10), i = parseInt(e[3], 10),
|
|
283
|
-
return { color: new y.Color(`rgb(${t}, ${r}, ${i})`), alpha:
|
|
282
|
+
const t = parseInt(e[1], 10), r = parseInt(e[2], 10), i = parseInt(e[3], 10), c = e[4] !== void 0 ? parseFloat(e[4]) : 1;
|
|
283
|
+
return { color: new y.Color(`rgb(${t}, ${r}, ${i})`), alpha: c };
|
|
284
284
|
}
|
|
285
285
|
return { color: new y.Color(s), alpha: 1 };
|
|
286
286
|
}
|
|
@@ -288,16 +288,16 @@ function Ge(s) {
|
|
|
288
288
|
const e = [];
|
|
289
289
|
let t = "", r = 0;
|
|
290
290
|
for (let i = 0; i < s.length; i++) {
|
|
291
|
-
const
|
|
292
|
-
if (
|
|
291
|
+
const c = s[i];
|
|
292
|
+
if (c === "(")
|
|
293
293
|
r++;
|
|
294
|
-
else if (
|
|
294
|
+
else if (c === ")")
|
|
295
295
|
r--;
|
|
296
|
-
else if (
|
|
296
|
+
else if (c === "," && r === 0) {
|
|
297
297
|
e.push(t.trim()), t = "";
|
|
298
298
|
continue;
|
|
299
299
|
}
|
|
300
|
-
t +=
|
|
300
|
+
t += c;
|
|
301
301
|
}
|
|
302
302
|
return t && e.push(t.trim()), e;
|
|
303
303
|
}
|
|
@@ -308,47 +308,47 @@ function $e(s) {
|
|
|
308
308
|
if (!e)
|
|
309
309
|
return null;
|
|
310
310
|
const t = e[1], r = Ge(t);
|
|
311
|
-
let i = Math.PI,
|
|
311
|
+
let i = Math.PI, c = 0;
|
|
312
312
|
const n = r[0].trim();
|
|
313
313
|
if (n.startsWith("to "))
|
|
314
|
-
n === "to top" ? i = 0 : n === "to right" ? i = Math.PI / 2 : n === "to bottom" ? i = Math.PI : n === "to left" ? i = Math.PI * 1.5 : n === "to top right" || n === "to right top" ? i = Math.PI / 4 : n === "to bottom right" || n === "to right bottom" ? i = Math.PI * 0.75 : n === "to bottom left" || n === "to left bottom" ? i = Math.PI * 1.25 : (n === "to top left" || n === "to left top") && (i = Math.PI * 1.75),
|
|
314
|
+
n === "to top" ? i = 0 : n === "to right" ? i = Math.PI / 2 : n === "to bottom" ? i = Math.PI : n === "to left" ? i = Math.PI * 1.5 : n === "to top right" || n === "to right top" ? i = Math.PI / 4 : n === "to bottom right" || n === "to right bottom" ? i = Math.PI * 0.75 : n === "to bottom left" || n === "to left bottom" ? i = Math.PI * 1.25 : (n === "to top left" || n === "to left top") && (i = Math.PI * 1.75), c = 1;
|
|
315
315
|
else if (n.endsWith("deg") || n.endsWith("rad") || n.endsWith("turn")) {
|
|
316
|
-
const
|
|
317
|
-
n.endsWith("deg") ? i =
|
|
316
|
+
const a = parseFloat(n);
|
|
317
|
+
n.endsWith("deg") ? i = a * (Math.PI / 180) : n.endsWith("rad") ? i = a : n.endsWith("turn") && (i = a * Math.PI * 2), c = 1;
|
|
318
318
|
}
|
|
319
|
-
const
|
|
320
|
-
for (let
|
|
321
|
-
const l = r[
|
|
319
|
+
const o = [];
|
|
320
|
+
for (let a = c; a < r.length && !(o.length >= 8); a++) {
|
|
321
|
+
const l = r[a].trim(), d = l.lastIndexOf(" ");
|
|
322
322
|
let h = l, f = null;
|
|
323
323
|
if (d !== -1 && !l.endsWith(")")) {
|
|
324
324
|
const g = l.substring(d + 1);
|
|
325
325
|
(g.endsWith("%") || g.endsWith("px") || !isNaN(parseFloat(g))) && (h = l.substring(0, d).trim(), f = g);
|
|
326
326
|
}
|
|
327
327
|
const p = ee(h);
|
|
328
|
-
|
|
328
|
+
o.push({
|
|
329
329
|
color: p.color,
|
|
330
330
|
alpha: p.alpha,
|
|
331
331
|
rawStop: f,
|
|
332
332
|
stop: 0
|
|
333
333
|
});
|
|
334
334
|
}
|
|
335
|
-
if (
|
|
336
|
-
for (let l = 0; l <
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
let
|
|
340
|
-
for (let l = 1; l <
|
|
341
|
-
if (
|
|
342
|
-
const d = l -
|
|
335
|
+
if (o.length > 0) {
|
|
336
|
+
for (let l = 0; l < o.length; l++)
|
|
337
|
+
o[l].rawStop !== null && (o[l].stop = parseFloat(o[l].rawStop) / 100);
|
|
338
|
+
o[0].rawStop === null && (o[0].stop = 0), o.length > 1 && o[o.length - 1].rawStop === null && (o[o.length - 1].stop = 1);
|
|
339
|
+
let a = 0;
|
|
340
|
+
for (let l = 1; l < o.length; l++)
|
|
341
|
+
if (o[l].rawStop !== null || l === o.length - 1) {
|
|
342
|
+
const d = l - a;
|
|
343
343
|
if (d > 1) {
|
|
344
|
-
const h = a
|
|
344
|
+
const h = o[a].stop, p = (o[l].stop - h) / d;
|
|
345
345
|
for (let g = 1; g < d; g++)
|
|
346
|
-
a
|
|
346
|
+
o[a + g].stop = h + p * g;
|
|
347
347
|
}
|
|
348
|
-
|
|
348
|
+
a = l;
|
|
349
349
|
}
|
|
350
350
|
}
|
|
351
|
-
return { angle: i, stops:
|
|
351
|
+
return { angle: i, stops: o };
|
|
352
352
|
}
|
|
353
353
|
const qe = `varying vec2 vUv;
|
|
354
354
|
varying vec4 vScreenPos;
|
|
@@ -513,22 +513,22 @@ baseColor = blendSrcOver(baseColor, texColor);`, Te = {
|
|
|
513
513
|
};
|
|
514
514
|
function Ze(s, e, t, r = null, i) {
|
|
515
515
|
var E;
|
|
516
|
-
const
|
|
516
|
+
const c = r !== null || !!s.imageSrc;
|
|
517
517
|
let n = "";
|
|
518
|
-
const
|
|
518
|
+
const o = {};
|
|
519
519
|
if (i != null && i.uniforms)
|
|
520
|
-
for (const [
|
|
521
|
-
typeof
|
|
522
|
-
`,
|
|
523
|
-
`,
|
|
524
|
-
`,
|
|
525
|
-
`,
|
|
526
|
-
`,
|
|
527
|
-
const
|
|
520
|
+
for (const [b, w] of Object.entries(i.uniforms))
|
|
521
|
+
typeof w == "number" ? (n += `uniform float ${b};
|
|
522
|
+
`, o[b] = { value: w }) : Array.isArray(w) ? w.length === 2 ? (n += `uniform vec2 ${b};
|
|
523
|
+
`, o[b] = { value: new y.Vector2(...w) }) : w.length === 3 ? (n += `uniform vec3 ${b};
|
|
524
|
+
`, o[b] = { value: new y.Vector3(...w) }) : w.length === 4 && (n += `uniform vec4 ${b};
|
|
525
|
+
`, o[b] = { value: new y.Vector4(...w) }) : (n += `uniform float ${b};
|
|
526
|
+
`, o[b] = { value: w });
|
|
527
|
+
const a = i !== void 0, l = (c || a ? Se.declChunk : "") + `
|
|
528
528
|
` + n, d = `vec2 screenUv = (vScreenPos.xy / vScreenPos.w) * 0.5 + 0.5;
|
|
529
529
|
`, h = s.isTraveler ? `vec2 resultUv = screenUv;
|
|
530
530
|
` : `vec2 resultUv = vUv * uTextureRepeat + uTextureOffset;
|
|
531
|
-
`, f =
|
|
531
|
+
`, f = c || a ? d + h + ((i == null ? void 0 : i.uvModifier) || "") : "", p = c || a ? Se.baseColorChunk : "", g = (i == null ? void 0 : i.colorModifier) || "", m = Te.fragmentShader.replace("#INJECT_DECLARATIONS", l).replace("#INJECT_UV_MODIFIER", f).replace("#INJECT_BASE_COLOR", p).replace("#INJECT_COLOR_MODIFIER", g), x = ee(s.backgroundColor), S = ee(s.borderColor), L = {
|
|
532
532
|
uSize: { value: new y.Vector2(e, t) },
|
|
533
533
|
uBgColor: {
|
|
534
534
|
value: new y.Vector4(
|
|
@@ -540,10 +540,10 @@ function Ze(s, e, t, r = null, i) {
|
|
|
540
540
|
},
|
|
541
541
|
uBorderColor: {
|
|
542
542
|
value: new y.Vector4(
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
543
|
+
S.color.r,
|
|
544
|
+
S.color.g,
|
|
545
|
+
S.color.b,
|
|
546
|
+
S.alpha
|
|
547
547
|
)
|
|
548
548
|
},
|
|
549
549
|
uBorderRadius: { value: new y.Vector4(0, 0, 0, 0) },
|
|
@@ -559,24 +559,24 @@ function Ze(s, e, t, r = null, i) {
|
|
|
559
559
|
},
|
|
560
560
|
uGradientStops: { value: new Float32Array(8) }
|
|
561
561
|
};
|
|
562
|
-
De(
|
|
563
|
-
const
|
|
564
|
-
uniforms: $($({},
|
|
562
|
+
De(L.uBorderRadius.value, s.borderRadius, Math.min(e, t)), c && (L.uTexture.value = r);
|
|
563
|
+
const T = new y.ShaderMaterial({
|
|
564
|
+
uniforms: $($({}, L), o),
|
|
565
565
|
vertexShader: Te.vertexShader,
|
|
566
|
-
fragmentShader:
|
|
566
|
+
fragmentShader: m,
|
|
567
567
|
transparent: !0,
|
|
568
568
|
side: y.FrontSide
|
|
569
569
|
// for better performance
|
|
570
570
|
});
|
|
571
|
-
return s.backgroundImage && le(
|
|
571
|
+
return s.backgroundImage && le(T, { backgroundImage: s.backgroundImage }), T;
|
|
572
572
|
}
|
|
573
573
|
function et(s, e, t, r, i) {
|
|
574
|
-
const
|
|
574
|
+
const c = J(e.borderWidth);
|
|
575
575
|
le(s, {
|
|
576
576
|
width: t,
|
|
577
577
|
height: r,
|
|
578
578
|
borderRadius: e.borderRadius,
|
|
579
|
-
borderWidth:
|
|
579
|
+
borderWidth: c,
|
|
580
580
|
backgroundColor: e.backgroundColor,
|
|
581
581
|
borderColor: e.borderColor,
|
|
582
582
|
opacity: e.opacity,
|
|
@@ -585,7 +585,7 @@ function et(s, e, t, r, i) {
|
|
|
585
585
|
});
|
|
586
586
|
}
|
|
587
587
|
function le(s, e) {
|
|
588
|
-
var r, i,
|
|
588
|
+
var r, i, c;
|
|
589
589
|
if (e.width !== void 0 && e.height !== void 0 && s.uniforms.uSize.value.set(e.width, e.height), e.borderRadius !== void 0) {
|
|
590
590
|
const n = e.width !== void 0 && e.height !== void 0 ? Math.min(e.width, e.height) : Math.min(s.uniforms.uSize.value.x, s.uniforms.uSize.value.y);
|
|
591
591
|
De(s.uniforms.uBorderRadius.value, e.borderRadius, n);
|
|
@@ -645,9 +645,9 @@ function le(s, e) {
|
|
|
645
645
|
e.opacity !== void 0 && (s.uniforms.uOpacity.value = e.opacity), e.bgOpacity !== void 0 && (s.uniforms.uBgColor.value.w = e.bgOpacity), e.borderOpacity !== void 0 && (s.uniforms.uBorderColor.value.w = e.borderOpacity), s.uniforms.uTexture && e.texture !== void 0 && (s.uniforms.uTexture.value = e.texture);
|
|
646
646
|
const t = e.texture !== void 0 ? e.texture : (r = s.uniforms.uTexture) == null ? void 0 : r.value;
|
|
647
647
|
if (t && (t.image instanceof ImageBitmap || t.image instanceof HTMLImageElement || t.image instanceof HTMLCanvasElement)) {
|
|
648
|
-
const n = t.image.naturalWidth || t.image.videoWidth || t.image.width,
|
|
649
|
-
if (n &&
|
|
650
|
-
const d = n /
|
|
648
|
+
const n = t.image.naturalWidth || t.image.videoWidth || t.image.width, o = t.image.naturalHeight || t.image.videoHeight || t.image.height, a = (i = e.width) != null ? i : s.uniforms.uSize.value.x, l = (c = e.height) != null ? c : s.uniforms.uSize.value.y;
|
|
649
|
+
if (n && o && a && l) {
|
|
650
|
+
const d = n / o, h = a / l;
|
|
651
651
|
if (d > h) {
|
|
652
652
|
const f = h / d;
|
|
653
653
|
s.uniforms.uTextureRepeat.value.set(f, 1), s.uniforms.uTextureOffset.value.set((1 - f) / 2, 0);
|
|
@@ -662,17 +662,17 @@ function le(s, e) {
|
|
|
662
662
|
const n = $e(e.backgroundImage);
|
|
663
663
|
if (n) {
|
|
664
664
|
s.uniforms.uGradientCount.value = n.stops.length, s.uniforms.uGradientAngle.value = n.angle;
|
|
665
|
-
for (let
|
|
666
|
-
if (
|
|
667
|
-
const
|
|
668
|
-
s.uniforms.uGradientColors.value[
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
), s.uniforms.uGradientStops.value[
|
|
665
|
+
for (let o = 0; o < 8; o++)
|
|
666
|
+
if (o < n.stops.length) {
|
|
667
|
+
const a = n.stops[o];
|
|
668
|
+
s.uniforms.uGradientColors.value[o].set(
|
|
669
|
+
a.color.r,
|
|
670
|
+
a.color.g,
|
|
671
|
+
a.color.b,
|
|
672
|
+
a.alpha
|
|
673
|
+
), s.uniforms.uGradientStops.value[o] = a.stop;
|
|
674
674
|
} else
|
|
675
|
-
s.uniforms.uGradientColors.value[
|
|
675
|
+
s.uniforms.uGradientColors.value[o].set(0, 0, 0, 0), s.uniforms.uGradientStops.value[o] = 1;
|
|
676
676
|
} else
|
|
677
677
|
s.uniforms.uGradientCount.value = 0;
|
|
678
678
|
}
|
|
@@ -680,7 +680,7 @@ function le(s, e) {
|
|
|
680
680
|
n !== "width" && n !== "height" && n !== "borderRadius" && n !== "borderWidth" && n !== "backgroundColor" && n !== "borderColor" && n !== "opacity" && n !== "bgOpacity" && n !== "borderOpacity" && n !== "texture" && n !== "backgroundImage" && s.uniforms[n] !== void 0 && (s.uniforms[n].value !== void 0 && s.uniforms[n].value !== null && typeof s.uniforms[n].value.set == "function" ? Array.isArray(e[n]) ? s.uniforms[n].value.set(...e[n]) : e[n] !== void 0 && (e[n].copy ? s.uniforms[n].value.copy(e[n]) : s.uniforms[n].value = e[n]) : s.uniforms[n].value = e[n]);
|
|
681
681
|
}
|
|
682
682
|
function De(s, e, t = 0) {
|
|
683
|
-
var
|
|
683
|
+
var a, l, d, h;
|
|
684
684
|
if (e == null) {
|
|
685
685
|
s.set(0, 0, 0, 0);
|
|
686
686
|
return;
|
|
@@ -693,37 +693,37 @@ function De(s, e, t = 0) {
|
|
|
693
693
|
s.set(e[0], e[1], e[2], e[3]);
|
|
694
694
|
return;
|
|
695
695
|
}
|
|
696
|
-
const r = e.split("/")[0].trim().split(/\s+/), i = J(r[0], t),
|
|
697
|
-
s.set(i,
|
|
696
|
+
const r = e.split("/")[0].trim().split(/\s+/), i = J(r[0], t), c = J((a = r[1]) != null ? a : r[0], t), n = J((l = r[2]) != null ? l : r[0], t), o = J((h = (d = r[3]) != null ? d : r[1]) != null ? h : r[0], t);
|
|
697
|
+
s.set(i, c, n, o);
|
|
698
698
|
}
|
|
699
|
-
const
|
|
700
|
-
create(s, e, t, r, i,
|
|
699
|
+
const X = {
|
|
700
|
+
create(s, e, t, r, i, c = 2, n = null, o) {
|
|
701
701
|
return s === "BOX" ? Ze(
|
|
702
702
|
e,
|
|
703
703
|
r,
|
|
704
704
|
i,
|
|
705
705
|
n,
|
|
706
|
-
|
|
706
|
+
o
|
|
707
707
|
) : s === "TEXT" ? new Pe(
|
|
708
708
|
t || "",
|
|
709
709
|
e,
|
|
710
710
|
r,
|
|
711
711
|
i,
|
|
712
|
-
|
|
712
|
+
c
|
|
713
713
|
) : new y.MeshBasicMaterial({ visible: !1 });
|
|
714
714
|
},
|
|
715
|
-
update(s, e, t, r, i,
|
|
715
|
+
update(s, e, t, r, i, c, n = 2, o) {
|
|
716
716
|
e === "BOX" ? et(
|
|
717
717
|
s,
|
|
718
718
|
t,
|
|
719
719
|
i,
|
|
720
|
-
|
|
721
|
-
|
|
720
|
+
c,
|
|
721
|
+
o
|
|
722
722
|
) : e === "TEXT" && s.updateText(
|
|
723
723
|
r || "",
|
|
724
724
|
t,
|
|
725
725
|
i,
|
|
726
|
-
|
|
726
|
+
c,
|
|
727
727
|
n
|
|
728
728
|
);
|
|
729
729
|
},
|
|
@@ -741,8 +741,8 @@ class tt {
|
|
|
741
741
|
this.onUpdate = e, t && (this.observer = new IntersectionObserver(
|
|
742
742
|
(r) => {
|
|
743
743
|
for (const i of r) {
|
|
744
|
-
const
|
|
745
|
-
i.isIntersecting ? this.loadTexture(
|
|
744
|
+
const c = i.target;
|
|
745
|
+
i.isIntersecting ? this.loadTexture(c) : this.disposeTexture(c);
|
|
746
746
|
}
|
|
747
747
|
},
|
|
748
748
|
{ rootMargin: "300px" }
|
|
@@ -766,9 +766,9 @@ class tt {
|
|
|
766
766
|
try {
|
|
767
767
|
let r;
|
|
768
768
|
if (t.startsWith("data:image/svg+xml"))
|
|
769
|
-
r = yield new Promise((
|
|
770
|
-
const
|
|
771
|
-
|
|
769
|
+
r = yield new Promise((c, n) => {
|
|
770
|
+
const o = new Image();
|
|
771
|
+
o.onload = () => c(o), o.onerror = n, o.src = t;
|
|
772
772
|
});
|
|
773
773
|
else {
|
|
774
774
|
const n = yield (yield fetch(t)).blob();
|
|
@@ -818,21 +818,21 @@ class rt {
|
|
|
818
818
|
u(this, "registry");
|
|
819
819
|
u(this, "targetRect");
|
|
820
820
|
u(this, "travelersByLayer", Array.from(
|
|
821
|
-
{ length:
|
|
821
|
+
{ length: O.MAX_LAYERS },
|
|
822
822
|
() => /* @__PURE__ */ new Set()
|
|
823
823
|
));
|
|
824
824
|
u(this, "textureManager");
|
|
825
825
|
// private meshMap: Map<HTMLElement, THREE.Mesh> = new Map();
|
|
826
826
|
u(this, "fixedMeshes", /* @__PURE__ */ new Set());
|
|
827
|
-
var
|
|
828
|
-
this.target = e, this.mountContainer = r, this.registry = i, this.mode = (
|
|
827
|
+
var o, a, l, d, h;
|
|
828
|
+
this.target = e, this.mountContainer = r, this.registry = i, this.mode = (o = t.mode) != null ? o : "overlay", this.canvasSize = (a = t.canvasSize) != null ? a : "viewport", this.clipArea = (l = t.travelerClipArea) != null ? l : 1, this.targetLayer = (d = t.layer) != null ? d : "base", this.textureManager = new tt((f, p) => {
|
|
829
829
|
const g = this.registry.get(f);
|
|
830
|
-
g && g.material instanceof y.ShaderMaterial &&
|
|
830
|
+
g && g.material instanceof y.ShaderMaterial && X.forceUpdateUniforms(g.material, { texture: p });
|
|
831
831
|
}, this.isViewport), this.canvas = document.createElement("canvas"), this.scene = new y.Scene(), this.targetRect = this.target.getBoundingClientRect();
|
|
832
|
-
const
|
|
832
|
+
const c = this.isViewport ? window.innerWidth + this.overscan * 2 : this.targetRect.width, n = this.isViewport ? window.innerHeight + this.overscan * 2 : this.targetRect.height;
|
|
833
833
|
this.camera = new y.OrthographicCamera(
|
|
834
|
-
|
|
835
|
-
|
|
834
|
+
c / -2,
|
|
835
|
+
c / 2,
|
|
836
836
|
n / 2,
|
|
837
837
|
n / -2,
|
|
838
838
|
1,
|
|
@@ -843,7 +843,7 @@ class rt {
|
|
|
843
843
|
antialias: !0
|
|
844
844
|
// [new]
|
|
845
845
|
// premultipliedAlpha: true
|
|
846
|
-
}), y.ColorManagement.enabled = !1, this.renderer.outputColorSpace = y.LinearSRGBColorSpace, this.renderer.setPixelRatio(window.devicePixelRatio), this.renderer.setSize(
|
|
846
|
+
}), y.ColorManagement.enabled = !1, this.renderer.outputColorSpace = y.LinearSRGBColorSpace, this.renderer.setPixelRatio(window.devicePixelRatio), this.renderer.setSize(c, n), this.applyTextQuality((h = t.quality) != null ? h : "medium");
|
|
847
847
|
}
|
|
848
848
|
get isViewport() {
|
|
849
849
|
return this.mode === "overlay" && this.canvasSize === "viewport";
|
|
@@ -852,7 +852,7 @@ class rt {
|
|
|
852
852
|
return typeof this.targetLayer == "number" ? this.targetLayer : this.targetLayer === "selected" ? D.SELECTED : D.BASE;
|
|
853
853
|
}
|
|
854
854
|
createRenderTarget() {
|
|
855
|
-
for (let e = 0; e <
|
|
855
|
+
for (let e = 0; e < O.MAX_LAYERS; e++) {
|
|
856
856
|
const t = this.isViewport ? window.innerWidth + this.overscan * 2 : this.targetRect.width, r = this.isViewport ? window.innerHeight + this.overscan * 2 : this.targetRect.height;
|
|
857
857
|
this.renderTargets.push(
|
|
858
858
|
new y.WebGLRenderTarget(
|
|
@@ -899,12 +899,12 @@ class rt {
|
|
|
899
899
|
updateUniforms(e, t) {
|
|
900
900
|
const r = this.registry.get(e);
|
|
901
901
|
r && (r.traverse((i) => {
|
|
902
|
-
i.isMesh && i.material &&
|
|
902
|
+
i.isMesh && i.material && X.forceUpdateUniforms(
|
|
903
903
|
i.material,
|
|
904
904
|
t
|
|
905
905
|
);
|
|
906
906
|
}), r.userData.nativeMesh && r.userData.nativeMesh.traverse((i) => {
|
|
907
|
-
i.isMesh && i.material &&
|
|
907
|
+
i.isMesh && i.material && X.forceUpdateUniforms(
|
|
908
908
|
i.material,
|
|
909
909
|
t
|
|
910
910
|
);
|
|
@@ -920,8 +920,8 @@ class rt {
|
|
|
920
920
|
this.camera.left = e / -2, this.camera.right = e / 2, this.camera.top = t / 2, this.camera.bottom = t / -2, this.camera.updateProjectionMatrix();
|
|
921
921
|
}
|
|
922
922
|
syncScene(e, t) {
|
|
923
|
-
const r = this.target.getBoundingClientRect(), i = this.isViewport ? window.innerWidth + this.overscan * 2 : r.width,
|
|
924
|
-
|
|
923
|
+
const r = this.target.getBoundingClientRect(), i = this.isViewport ? window.innerWidth + this.overscan * 2 : r.width, c = this.isViewport ? window.innerHeight + this.overscan * 2 : r.height, n = this.isViewport ? this.canvas.clientWidth : this.targetRect.width, o = this.isViewport ? this.canvas.clientHeight : this.targetRect.height, a = Math.abs(i - n) > 0.1 || Math.abs(c - o) > 0.1, l = this.mode === "overlay" && (Math.abs(r.top - this.targetRect.top) > 0.1 || Math.abs(r.left - this.targetRect.left) > 0.1);
|
|
924
|
+
a ? (this.targetRect = r, this.setSize(i, c), this.updateCanvasLayout()) : l ? (this.targetRect = r, this.updateCanvasLayout()) : this.targetRect = r, this.renderOrder = 0, this.reconcileNode(e), t.size > 0 && t.forEach((d) => {
|
|
925
925
|
const h = this.registry.get(d);
|
|
926
926
|
if (h) {
|
|
927
927
|
this.scene.remove(h);
|
|
@@ -940,31 +940,31 @@ class rt {
|
|
|
940
940
|
// => 이후 activeElements를 이용하여 mesh를 정리!!!+ map에서도 삭제
|
|
941
941
|
// private reconcileNode(node: SceneNode, activeElements: Set<HTMLElement>) {
|
|
942
942
|
reconcileNode(e) {
|
|
943
|
-
var i;
|
|
943
|
+
var i, c;
|
|
944
944
|
let t = this.registry.get(e.element);
|
|
945
945
|
const r = JSON.stringify(e.shaderHooks || null);
|
|
946
946
|
if (t && t.userData.shaderHash !== r && (this.scene.remove(t), t.geometry.dispose(), t.material instanceof y.Material && t.material.dispose(), this.registry.remove(e.element), t = void 0), !t) {
|
|
947
|
-
const
|
|
947
|
+
const n = new y.PlaneGeometry(1, 1), o = e.isTraveler ? (i = this.renderTargets[e.captureLayer - 2]) == null ? void 0 : i.texture : this.textureManager.get(e.element), a = X.create(
|
|
948
948
|
"BOX",
|
|
949
949
|
e.styles,
|
|
950
950
|
"",
|
|
951
951
|
e.rect.width,
|
|
952
952
|
e.rect.height,
|
|
953
953
|
this.qualityFactor,
|
|
954
|
-
|
|
954
|
+
o,
|
|
955
955
|
e.shaderHooks
|
|
956
956
|
);
|
|
957
|
-
t = new y.Mesh(
|
|
957
|
+
t = new y.Mesh(n, a), e.type === "TEXT" && (t.name = "BG_MESH"), this.scene.add(t), this.registry.register(e.element, t), t.userData.baseMaterial = a, t.userData.domElement = e.element, t.userData.shaderHash = r;
|
|
958
958
|
}
|
|
959
|
-
if (this.updateMeshProperties(t, e), this.updateMeshLayers(t, e), e.isTraveler)
|
|
960
|
-
for (let
|
|
961
|
-
|
|
959
|
+
if ((c = e.nativeStyles) != null && c.transform ? t.userData.nativeTransform = e.nativeStyles.transform : t.userData.nativeTransform = void 0, this.updateMeshProperties(t, e), this.updateMeshLayers(t, e), e.isTraveler)
|
|
960
|
+
for (let n = 0; n < O.MAX_LAYERS; n++)
|
|
961
|
+
n === e.captureLayer - 2 ? this.travelersByLayer[n].add(t) : this.travelersByLayer[n].delete(t);
|
|
962
962
|
else
|
|
963
|
-
for (const
|
|
964
|
-
|
|
963
|
+
for (const n of this.travelersByLayer)
|
|
964
|
+
n.delete(t);
|
|
965
965
|
if (e.isFixed ? this.fixedMeshes.add(t) : this.fixedMeshes.delete(t), e.styles.imageSrc ? this.textureManager.register(e.element, e.styles.imageSrc) : this.textureManager.unregister(e.element), e.type === "BOX")
|
|
966
|
-
for (const
|
|
967
|
-
this.reconcileNode(
|
|
966
|
+
for (const n of e.children)
|
|
967
|
+
this.reconcileNode(n);
|
|
968
968
|
else
|
|
969
969
|
e.type === "TEXT" && (this.reconcileTextChild(t, e, !1), t.userData.nativeMesh && e.nativeStyles && this.reconcileTextChild(
|
|
970
970
|
t.userData.nativeMesh,
|
|
@@ -976,34 +976,34 @@ class rt {
|
|
|
976
976
|
var l;
|
|
977
977
|
const i = t.textLines || [
|
|
978
978
|
{ text: t.textContent || "", rect: t.rect }
|
|
979
|
-
],
|
|
980
|
-
if (t.dirtyMask & ce || n !==
|
|
979
|
+
], c = r ? t.nativeStyles : t.textStyles, n = JSON.stringify(c) + t.textContent + i.map((d) => d.text).join("|"), o = (l = e.userData) == null ? void 0 : l.textChildStyleHash;
|
|
980
|
+
if (t.dirtyMask & ce || n !== o) {
|
|
981
981
|
e.children.filter(
|
|
982
982
|
(g) => g.name.startsWith("TEXT_CHILD")
|
|
983
983
|
).forEach((g) => {
|
|
984
984
|
var x;
|
|
985
|
-
const
|
|
986
|
-
(x =
|
|
985
|
+
const m = g;
|
|
986
|
+
(x = m.material.map) == null || x.dispose(), m.geometry.dispose(), e.remove(m);
|
|
987
987
|
});
|
|
988
988
|
const h = t.rect, f = h.x + h.width / 2, p = h.y + h.height / 2;
|
|
989
|
-
i.forEach((g,
|
|
990
|
-
const x =
|
|
989
|
+
i.forEach((g, m) => {
|
|
990
|
+
const x = X.create(
|
|
991
991
|
"TEXT",
|
|
992
|
-
|
|
992
|
+
c,
|
|
993
993
|
g.text,
|
|
994
994
|
g.rect.width,
|
|
995
995
|
g.rect.height,
|
|
996
996
|
this.qualityFactor
|
|
997
|
-
),
|
|
998
|
-
|
|
999
|
-
const
|
|
1000
|
-
|
|
1001
|
-
const
|
|
1002
|
-
|
|
1003
|
-
t.rect.width === 0 ? 0 :
|
|
1004
|
-
t.rect.height === 0 ? 0 :
|
|
997
|
+
), S = new y.PlaneGeometry(1, 1), L = new y.Mesh(S, x);
|
|
998
|
+
L.name = `TEXT_CHILD_${m}`;
|
|
999
|
+
const T = t.rect.width === 0 ? 1 : g.rect.width / t.rect.width, E = t.rect.height === 0 ? 1 : g.rect.height / t.rect.height;
|
|
1000
|
+
L.scale.set(T, E, 1);
|
|
1001
|
+
const b = g.rect.x + g.rect.width / 2, w = g.rect.y + g.rect.height / 2, k = b - f, U = -(w - p);
|
|
1002
|
+
L.position.set(
|
|
1003
|
+
t.rect.width === 0 ? 0 : k / t.rect.width,
|
|
1004
|
+
t.rect.height === 0 ? 0 : U / t.rect.height,
|
|
1005
1005
|
5e-3
|
|
1006
|
-
), e.add(
|
|
1006
|
+
), e.add(L);
|
|
1007
1007
|
}), e.userData.textChildStyleHash = n;
|
|
1008
1008
|
}
|
|
1009
1009
|
e.children.forEach((d) => {
|
|
@@ -1015,46 +1015,46 @@ class rt {
|
|
|
1015
1015
|
for (let p = t.captureLayer; p < t.nativeLayer; p++)
|
|
1016
1016
|
h.layers.enable(D.getCaptureLayer(p));
|
|
1017
1017
|
else if (r && t.nativeLayer !== void 0)
|
|
1018
|
-
for (let p = Math.max(t.captureLayer, t.nativeLayer); p <=
|
|
1018
|
+
for (let p = Math.max(t.captureLayer, t.nativeLayer); p <= O.MAX_LAYERS + 1; p++)
|
|
1019
1019
|
h.layers.enable(D.getCaptureLayer(p));
|
|
1020
1020
|
else
|
|
1021
|
-
for (let p = t.captureLayer; p <=
|
|
1021
|
+
for (let p = t.captureLayer; p <= O.MAX_LAYERS + 1; p++)
|
|
1022
1022
|
h.layers.enable(D.getCaptureLayer(p));
|
|
1023
1023
|
});
|
|
1024
1024
|
}
|
|
1025
1025
|
updateMeshProperties(e, t) {
|
|
1026
|
-
var
|
|
1027
|
-
const { rect: r, styles: i } = t,
|
|
1026
|
+
var T, E, b;
|
|
1027
|
+
const { rect: r, styles: i } = t, c = this.renderer.getPixelRatio(), n = this.renderer.domElement.width / c, o = this.renderer.domElement.height / c;
|
|
1028
1028
|
e.material = e.userData.baseMaterial, e.scale.set(r.width, r.height, 1), e.userData.domRect = {
|
|
1029
1029
|
x: r.x,
|
|
1030
1030
|
y: r.y,
|
|
1031
1031
|
width: r.width,
|
|
1032
1032
|
height: r.height
|
|
1033
1033
|
};
|
|
1034
|
-
const
|
|
1034
|
+
const a = 1e-3;
|
|
1035
1035
|
this.renderOrder++;
|
|
1036
1036
|
const l = this.targetRect.left + window.scrollX, d = this.targetRect.top + window.scrollY;
|
|
1037
1037
|
let h, f;
|
|
1038
1038
|
if (this.isViewport)
|
|
1039
1039
|
h = r.x - window.innerWidth / 2 + r.width / 2, f = -r.y + window.innerHeight / 2 - r.height / 2;
|
|
1040
1040
|
else {
|
|
1041
|
-
const
|
|
1042
|
-
h =
|
|
1041
|
+
const w = r.x - l, k = r.y - d;
|
|
1042
|
+
h = w - n / 2 + r.width / 2, f = -k + o / 2 - r.height / 2;
|
|
1043
1043
|
}
|
|
1044
1044
|
e.position.set(
|
|
1045
1045
|
h,
|
|
1046
1046
|
f,
|
|
1047
|
-
i.zIndex + this.renderOrder *
|
|
1047
|
+
i.zIndex + this.renderOrder * a
|
|
1048
1048
|
);
|
|
1049
1049
|
const p = r.x, g = r.y;
|
|
1050
1050
|
e.userData.basePosition = { x: h, y: f }, e.userData.originalBasePosition = { x: h, y: f }, e.userData.baseSize = { width: r.width, height: r.height }, e.userData.baseDOM = { x: p, y: g }, e.userData.isFixed = t.isFixed, e.userData.initialScroll = { x: window.scrollX, y: window.scrollY };
|
|
1051
|
-
const
|
|
1052
|
-
let
|
|
1051
|
+
const m = t.element.nodeType === Node.TEXT_NODE ? t.element.parentElement : t.element, x = window.getComputedStyle(m);
|
|
1052
|
+
let S = 0, L = 0;
|
|
1053
1053
|
if (x.transform && x.transform !== "none") {
|
|
1054
|
-
const
|
|
1055
|
-
|
|
1054
|
+
const w = new DOMMatrix(x.transform);
|
|
1055
|
+
S = w.m41, L = w.m42;
|
|
1056
1056
|
}
|
|
1057
|
-
if (e.userData.baseTransform = { x:
|
|
1057
|
+
if (e.userData.baseTransform = { x: S, y: L }, delete e.userData.originRatioX, delete e.userData.originRatioY, X.update(
|
|
1058
1058
|
e.userData.baseMaterial,
|
|
1059
1059
|
"BOX",
|
|
1060
1060
|
i,
|
|
@@ -1062,10 +1062,10 @@ class rt {
|
|
|
1062
1062
|
r.width,
|
|
1063
1063
|
r.height,
|
|
1064
1064
|
this.qualityFactor,
|
|
1065
|
-
t.isTraveler ? (
|
|
1065
|
+
t.isTraveler ? (T = this.renderTargets[t.captureLayer - 2]) == null ? void 0 : T.texture : this.textureManager.get(t.element)
|
|
1066
1066
|
), t.nativeStyles && t.nativeRect) {
|
|
1067
1067
|
if (!e.userData.nativeMesh) {
|
|
1068
|
-
const
|
|
1068
|
+
const B = X.create(
|
|
1069
1069
|
"BOX",
|
|
1070
1070
|
t.nativeStyles,
|
|
1071
1071
|
"",
|
|
@@ -1074,30 +1074,30 @@ class rt {
|
|
|
1074
1074
|
this.qualityFactor,
|
|
1075
1075
|
t.isTraveler ? (E = this.renderTargets[t.captureLayer - 2]) == null ? void 0 : E.texture : this.textureManager.get(t.element),
|
|
1076
1076
|
t.shaderHooks
|
|
1077
|
-
), G = new y.Mesh(e.geometry,
|
|
1077
|
+
), G = new y.Mesh(e.geometry, B);
|
|
1078
1078
|
t.type === "TEXT" && (G.name = "BG_MESH"), this.scene.add(G), e.userData.nativeMesh = G;
|
|
1079
1079
|
}
|
|
1080
|
-
const
|
|
1081
|
-
let
|
|
1080
|
+
const w = e.userData.nativeMesh;
|
|
1081
|
+
let k, U;
|
|
1082
1082
|
if (this.isViewport)
|
|
1083
|
-
|
|
1083
|
+
k = t.nativeRect.x - window.innerWidth / 2 + t.nativeRect.width / 2, U = -t.nativeRect.y + window.innerHeight / 2 - t.nativeRect.height / 2;
|
|
1084
1084
|
else {
|
|
1085
|
-
const
|
|
1086
|
-
|
|
1085
|
+
const B = t.nativeRect.x - l, G = t.nativeRect.y - d;
|
|
1086
|
+
k = B - n / 2 + t.nativeRect.width / 2, U = -G + o / 2 - t.nativeRect.height / 2;
|
|
1087
1087
|
}
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
t.nativeStyles.zIndex + this.renderOrder *
|
|
1092
|
-
),
|
|
1093
|
-
|
|
1088
|
+
w.scale.set(t.nativeRect.width, t.nativeRect.height, 1), w.position.set(
|
|
1089
|
+
k,
|
|
1090
|
+
U,
|
|
1091
|
+
t.nativeStyles.zIndex + this.renderOrder * a
|
|
1092
|
+
), X.update(
|
|
1093
|
+
w.material,
|
|
1094
1094
|
"BOX",
|
|
1095
1095
|
t.nativeStyles,
|
|
1096
1096
|
"",
|
|
1097
1097
|
t.nativeRect.width,
|
|
1098
1098
|
t.nativeRect.height,
|
|
1099
1099
|
this.qualityFactor,
|
|
1100
|
-
t.isTraveler ? (
|
|
1100
|
+
t.isTraveler ? (b = this.renderTargets[t.captureLayer - 2]) == null ? void 0 : b.texture : this.textureManager.get(t.element)
|
|
1101
1101
|
);
|
|
1102
1102
|
} else
|
|
1103
1103
|
e.userData.nativeMesh && (this.scene.remove(e.userData.nativeMesh), e.userData.nativeMesh.material instanceof y.Material && e.userData.nativeMesh.material.dispose(), delete e.userData.nativeMesh);
|
|
@@ -1107,33 +1107,33 @@ class rt {
|
|
|
1107
1107
|
if (e.layers.set(r), t.visibility & K && e.layers.enable(D.SELECTED), e.userData.nativeMesh && t.nativeLayer !== void 0) {
|
|
1108
1108
|
const i = e.userData.nativeMesh;
|
|
1109
1109
|
if (i.layers.set(D.HIDDEN), t.visibility & W) {
|
|
1110
|
-
for (let
|
|
1111
|
-
e.layers.enable(D.getCaptureLayer(
|
|
1112
|
-
for (let
|
|
1113
|
-
i.layers.enable(D.getCaptureLayer(
|
|
1110
|
+
for (let c = t.captureLayer; c < t.nativeLayer; c++)
|
|
1111
|
+
e.layers.enable(D.getCaptureLayer(c));
|
|
1112
|
+
for (let c = Math.max(t.captureLayer, t.nativeLayer); c <= O.MAX_LAYERS + 1; c++)
|
|
1113
|
+
i.layers.enable(D.getCaptureLayer(c));
|
|
1114
1114
|
}
|
|
1115
1115
|
} else if (t.visibility & W)
|
|
1116
|
-
for (let i = t.captureLayer; i <=
|
|
1116
|
+
for (let i = t.captureLayer; i <= O.MAX_LAYERS + 1; i++)
|
|
1117
1117
|
e.layers.enable(D.getCaptureLayer(i));
|
|
1118
1118
|
}
|
|
1119
1119
|
captureRenderTarget(e, t, r) {
|
|
1120
1120
|
if (e.size === 0 || !r)
|
|
1121
1121
|
return;
|
|
1122
|
-
const i = new y.Color(),
|
|
1122
|
+
const i = new y.Color(), c = this.renderer.getClearAlpha();
|
|
1123
1123
|
this.renderer.getClearColor(i), this.renderer.setClearColor(0, 0), this.renderer.setRenderTarget(r), this.renderer.clear(), this.renderer.autoClear = !1, this.renderer.setScissorTest(!0), this.camera.layers.set(t);
|
|
1124
|
-
const n = new y.Vector3(),
|
|
1124
|
+
const n = new y.Vector3(), o = this.isViewport ? window.innerWidth + this.overscan * 2 : this.targetRect.width, a = this.isViewport ? window.innerHeight + this.overscan * 2 : this.targetRect.height, l = this.renderer.getPixelRatio();
|
|
1125
1125
|
for (const d of e) {
|
|
1126
1126
|
n.setFromMatrixPosition(d.matrixWorld), n.project(this.camera);
|
|
1127
|
-
const h = (n.x + 1) / 2 *
|
|
1127
|
+
const h = (n.x + 1) / 2 * o, f = (n.y + 1) / 2 * a;
|
|
1128
1128
|
let p = 0, g = 1;
|
|
1129
1129
|
typeof this.clipArea == "number" ? g = this.clipArea : this.clipArea.endsWith("%") ? g = parseFloat(this.clipArea) / 100 : this.clipArea.endsWith("px") && (p = parseFloat(this.clipArea));
|
|
1130
|
-
const
|
|
1131
|
-
this.renderer.setScissor(
|
|
1130
|
+
const m = d.scale.x * g + 0.5, x = d.scale.y * g + 0.5, S = h - m / 2, L = f - x / 2, T = (S * this.qualityFactor - p) / l, E = (L * this.qualityFactor - p) / l, b = (m * this.qualityFactor + p * 2) / l, w = (x * this.qualityFactor + p * 2) / l;
|
|
1131
|
+
this.renderer.setScissor(T, E, b, w), this.renderer.render(this.scene, this.camera);
|
|
1132
1132
|
}
|
|
1133
|
-
this.renderer.setScissorTest(!1), this.renderer.autoClear = !0, this.renderer.setRenderTarget(null), this.camera.layers.set(this.getSceneLayer()), this.renderer.setClearColor(i,
|
|
1133
|
+
this.renderer.setScissorTest(!1), this.renderer.autoClear = !0, this.renderer.setRenderTarget(null), this.camera.layers.set(this.getSceneLayer()), this.renderer.setClearColor(i, c);
|
|
1134
1134
|
}
|
|
1135
1135
|
render() {
|
|
1136
|
-
for (let e = 0; e <
|
|
1136
|
+
for (let e = 0; e < O.MAX_LAYERS; e++) {
|
|
1137
1137
|
const t = e + 1;
|
|
1138
1138
|
this.captureRenderTarget(
|
|
1139
1139
|
this.travelersByLayer[e],
|
|
@@ -1144,23 +1144,23 @@ class rt {
|
|
|
1144
1144
|
this.renderer.render(this.scene, this.camera);
|
|
1145
1145
|
}
|
|
1146
1146
|
syncMeshesByDOM() {
|
|
1147
|
-
const e = this.targetRect.left + window.scrollX, t = this.targetRect.top + window.scrollY, r = this.renderer.getPixelRatio(), i = this.renderer.domElement.width / r,
|
|
1147
|
+
const e = this.targetRect.left + window.scrollX, t = this.targetRect.top + window.scrollY, r = this.renderer.getPixelRatio(), i = this.renderer.domElement.width / r, c = this.renderer.domElement.height / r;
|
|
1148
1148
|
this.scene.children.forEach((n) => {
|
|
1149
|
-
const
|
|
1150
|
-
if (!
|
|
1149
|
+
const o = n;
|
|
1150
|
+
if (!o.userData || !o.userData.domElement)
|
|
1151
1151
|
return;
|
|
1152
|
-
const
|
|
1153
|
-
if (!
|
|
1152
|
+
const a = o.userData.domElement;
|
|
1153
|
+
if (!a.isConnected)
|
|
1154
1154
|
return;
|
|
1155
1155
|
let l;
|
|
1156
|
-
if (
|
|
1156
|
+
if (a.nodeType === Node.TEXT_NODE) {
|
|
1157
1157
|
const h = document.createRange();
|
|
1158
|
-
h.selectNode(
|
|
1158
|
+
h.selectNode(a), l = h.getBoundingClientRect();
|
|
1159
1159
|
} else
|
|
1160
|
-
l =
|
|
1161
|
-
const d =
|
|
1160
|
+
l = a.getBoundingClientRect();
|
|
1161
|
+
const d = o.userData.domRect;
|
|
1162
1162
|
if (!d || Math.abs(l.x - d.x) > 0.5 || Math.abs(l.y - d.y) > 0.5 || Math.abs(l.width - d.width) > 0.5 || Math.abs(l.height - d.height) > 0.5) {
|
|
1163
|
-
|
|
1163
|
+
o.userData.domRect = {
|
|
1164
1164
|
x: l.x,
|
|
1165
1165
|
y: l.y,
|
|
1166
1166
|
width: l.width,
|
|
@@ -1171,14 +1171,30 @@ class rt {
|
|
|
1171
1171
|
h = l.x - window.innerWidth / 2 + l.width / 2, f = -l.y + window.innerHeight / 2 - l.height / 2;
|
|
1172
1172
|
else {
|
|
1173
1173
|
const p = l.x - e, g = l.y - t;
|
|
1174
|
-
h = p - i / 2 + l.width / 2, f = -g +
|
|
1174
|
+
h = p - i / 2 + l.width / 2, f = -g + c / 2 - l.height / 2;
|
|
1175
1175
|
}
|
|
1176
|
-
if (
|
|
1176
|
+
if (o.position.setX(h), o.position.setY(f), o.scale.set(l.width, l.height, 1), o.updateMatrixWorld(), o.material instanceof y.ShaderMaterial && X.forceUpdateUniforms(o.material, {
|
|
1177
1177
|
width: l.width,
|
|
1178
1178
|
height: l.height
|
|
1179
|
-
}),
|
|
1180
|
-
const p =
|
|
1181
|
-
|
|
1179
|
+
}), o.userData.nativeMesh) {
|
|
1180
|
+
const p = o.userData.nativeMesh;
|
|
1181
|
+
let g = l.width, m = l.height, x = h, S = f;
|
|
1182
|
+
if (o.userData.nativeTransform) {
|
|
1183
|
+
const L = o.userData.nativeTransform, T = L.match(/scale\(([\d.]+%?)\)/);
|
|
1184
|
+
if (T) {
|
|
1185
|
+
let b = parseFloat(T[1]);
|
|
1186
|
+
T[1].includes("%") && (b /= 100), g *= b, m *= b;
|
|
1187
|
+
}
|
|
1188
|
+
const E = L.match(/translate\(([^,]+),\s*([^)]+)\)/);
|
|
1189
|
+
if (E) {
|
|
1190
|
+
const b = E[1].trim(), w = E[2].trim();
|
|
1191
|
+
let k = parseFloat(b);
|
|
1192
|
+
b.includes("%") && (k = k / 100 * l.width);
|
|
1193
|
+
let U = parseFloat(w);
|
|
1194
|
+
w.includes("%") && (U = U / 100 * l.height), x += k, S -= U;
|
|
1195
|
+
}
|
|
1196
|
+
}
|
|
1197
|
+
p.position.setX(x), p.position.setY(S), p.scale.set(g, m, 1), p.updateMatrixWorld();
|
|
1182
1198
|
}
|
|
1183
1199
|
}
|
|
1184
1200
|
});
|
|
@@ -1186,7 +1202,7 @@ class rt {
|
|
|
1186
1202
|
}
|
|
1187
1203
|
function it(s) {
|
|
1188
1204
|
const e = s.textContent || "", t = [];
|
|
1189
|
-
let r = "", i = null,
|
|
1205
|
+
let r = "", i = null, c = -1;
|
|
1190
1206
|
const n = (l, d) => {
|
|
1191
1207
|
for (let h = 0; h < l.length; h++) {
|
|
1192
1208
|
const f = l[h], p = document.createRange();
|
|
@@ -1196,7 +1212,7 @@ function it(s) {
|
|
|
1196
1212
|
r += f;
|
|
1197
1213
|
continue;
|
|
1198
1214
|
}
|
|
1199
|
-
|
|
1215
|
+
c === -1 || Math.abs(g.top - c) > g.height / 2 ? (r && i && t.push({
|
|
1200
1216
|
text: r,
|
|
1201
1217
|
rect: {
|
|
1202
1218
|
left: i.left,
|
|
@@ -1209,26 +1225,26 @@ function it(s) {
|
|
|
1209
1225
|
top: g.top,
|
|
1210
1226
|
right: g.right,
|
|
1211
1227
|
bottom: g.bottom
|
|
1212
|
-
},
|
|
1228
|
+
}, c = g.top) : (r += f, i && (i.left = Math.min(i.left, g.left), i.top = Math.min(i.top, g.top), i.right = Math.max(i.right, g.right), i.bottom = Math.max(
|
|
1213
1229
|
i.bottom,
|
|
1214
1230
|
g.bottom
|
|
1215
1231
|
)));
|
|
1216
1232
|
}
|
|
1217
|
-
},
|
|
1218
|
-
let
|
|
1219
|
-
for (const l of
|
|
1233
|
+
}, o = e.match(/[^\s\-]+\-?|\-|\s+/g) || [];
|
|
1234
|
+
let a = 0;
|
|
1235
|
+
for (const l of o) {
|
|
1220
1236
|
const d = document.createRange();
|
|
1221
|
-
d.setStart(s,
|
|
1237
|
+
d.setStart(s, a), d.setEnd(s, a + l.length);
|
|
1222
1238
|
const h = d.getClientRects();
|
|
1223
1239
|
if (h.length > 1)
|
|
1224
|
-
n(l,
|
|
1240
|
+
n(l, a);
|
|
1225
1241
|
else {
|
|
1226
1242
|
const f = h.length === 1 ? h[0] : d.getBoundingClientRect();
|
|
1227
1243
|
if (f.width === 0 && f.height === 0) {
|
|
1228
|
-
r += l,
|
|
1244
|
+
r += l, a += l.length;
|
|
1229
1245
|
continue;
|
|
1230
1246
|
}
|
|
1231
|
-
|
|
1247
|
+
c === -1 || Math.abs(f.top - c) > f.height / 2 ? (r && i && t.push({
|
|
1232
1248
|
text: r,
|
|
1233
1249
|
rect: {
|
|
1234
1250
|
left: i.left,
|
|
@@ -1241,12 +1257,12 @@ function it(s) {
|
|
|
1241
1257
|
top: f.top,
|
|
1242
1258
|
right: f.right,
|
|
1243
1259
|
bottom: f.bottom
|
|
1244
|
-
},
|
|
1260
|
+
}, c = f.top) : (r += l, i && (i.left = Math.min(i.left, f.left), i.top = Math.min(i.top, f.top), i.right = Math.max(i.right, f.right), i.bottom = Math.max(
|
|
1245
1261
|
i.bottom,
|
|
1246
1262
|
f.bottom
|
|
1247
1263
|
)));
|
|
1248
1264
|
}
|
|
1249
|
-
|
|
1265
|
+
a += l.length;
|
|
1250
1266
|
}
|
|
1251
1267
|
return r && i && t.push({
|
|
1252
1268
|
text: r,
|
|
@@ -1276,241 +1292,241 @@ function Re(s) {
|
|
|
1276
1292
|
letterSpacing: r
|
|
1277
1293
|
};
|
|
1278
1294
|
}
|
|
1279
|
-
function ke(s, e = q | Z | Ye | ce | ie, t, r = 1, i = 0,
|
|
1295
|
+
function ke(s, e = q | Z | Ye | ce | ie, t, r = 1, i = 0, c = 2, n, o) {
|
|
1280
1296
|
var de, ue, fe, ge, pe, me;
|
|
1281
1297
|
if (s.nodeType === Node.TEXT_NODE) {
|
|
1282
|
-
const
|
|
1283
|
-
if (!
|
|
1298
|
+
const v = s;
|
|
1299
|
+
if (!v.textContent || !v.textContent.trim())
|
|
1284
1300
|
return null;
|
|
1285
|
-
const
|
|
1286
|
-
if (
|
|
1301
|
+
const M = v.textContent.replace(/\s+/g, " ");
|
|
1302
|
+
if (M.length === 0)
|
|
1287
1303
|
return null;
|
|
1288
|
-
const
|
|
1289
|
-
if (
|
|
1304
|
+
const I = it(v);
|
|
1305
|
+
if (I.length === 0)
|
|
1290
1306
|
return null;
|
|
1291
|
-
const
|
|
1292
|
-
if (!
|
|
1307
|
+
const F = v.parentElement, A = F ? window.getComputedStyle(F) : null;
|
|
1308
|
+
if (!A)
|
|
1293
1309
|
return null;
|
|
1294
|
-
const V = Math.min(...
|
|
1310
|
+
const V = Math.min(...I.map((C) => C.rect.left)), _ = Math.min(...I.map((C) => C.rect.top)), H = Math.max(...I.map((C) => C.rect.left + C.rect.width)), R = Math.max(...I.map((C) => C.rect.top + C.rect.height));
|
|
1295
1311
|
return {
|
|
1296
1312
|
id: Math.random().toString(36).substring(2, 9),
|
|
1297
1313
|
type: "TEXT",
|
|
1298
|
-
element:
|
|
1314
|
+
element: v,
|
|
1299
1315
|
rect: {
|
|
1300
1316
|
x: V + window.scrollX,
|
|
1301
|
-
y:
|
|
1317
|
+
y: _ + window.scrollY,
|
|
1302
1318
|
width: H - V,
|
|
1303
|
-
height:
|
|
1319
|
+
height: R - _
|
|
1304
1320
|
},
|
|
1305
1321
|
styles: {
|
|
1306
1322
|
backgroundColor: "transparent",
|
|
1307
1323
|
backgroundImage: "",
|
|
1308
|
-
opacity:
|
|
1309
|
-
zIndex: (isNaN(parseInt(
|
|
1324
|
+
opacity: F && F.dataset[P.KEY] === P.VALUES.HIDE ? 1 : parseFloat(A.opacity),
|
|
1325
|
+
zIndex: (isNaN(parseInt(A.zIndex)) ? 0 : parseInt(A.zIndex)) + i,
|
|
1310
1326
|
borderRadius: "0px",
|
|
1311
1327
|
borderColor: "transparent",
|
|
1312
1328
|
borderWidth: "0px",
|
|
1313
1329
|
isTraveler: !1
|
|
1314
1330
|
},
|
|
1315
|
-
textContent:
|
|
1316
|
-
textLines:
|
|
1317
|
-
text:
|
|
1331
|
+
textContent: M,
|
|
1332
|
+
textLines: I.map((C) => ({
|
|
1333
|
+
text: C.text.trim(),
|
|
1318
1334
|
rect: {
|
|
1319
|
-
x:
|
|
1320
|
-
y:
|
|
1321
|
-
width:
|
|
1322
|
-
height:
|
|
1335
|
+
x: C.rect.left + window.scrollX,
|
|
1336
|
+
y: C.rect.top + window.scrollY,
|
|
1337
|
+
width: C.rect.width,
|
|
1338
|
+
height: C.rect.height
|
|
1323
1339
|
}
|
|
1324
1340
|
})),
|
|
1325
|
-
textStyles: Re(
|
|
1341
|
+
textStyles: Re(A),
|
|
1326
1342
|
dirtyMask: e,
|
|
1327
1343
|
visibility: t,
|
|
1328
1344
|
isTraveler: !1,
|
|
1329
1345
|
captureLayer: r,
|
|
1330
|
-
isFixed:
|
|
1346
|
+
isFixed: A.position === "fixed",
|
|
1331
1347
|
nativeLayer: n,
|
|
1332
|
-
nativeStyles:
|
|
1348
|
+
nativeStyles: o ? $($({
|
|
1333
1349
|
backgroundColor: "transparent",
|
|
1334
1350
|
backgroundImage: "",
|
|
1335
|
-
opacity:
|
|
1336
|
-
zIndex: (isNaN(parseInt(
|
|
1351
|
+
opacity: F && F.dataset[P.KEY] === P.VALUES.HIDE ? 1 : parseFloat(A.opacity),
|
|
1352
|
+
zIndex: (isNaN(parseInt(A.zIndex)) ? 0 : parseInt(A.zIndex)) + i,
|
|
1337
1353
|
borderRadius: "0px",
|
|
1338
1354
|
borderColor: "transparent",
|
|
1339
1355
|
borderWidth: "0px",
|
|
1340
1356
|
isTraveler: !1
|
|
1341
|
-
}, Re(
|
|
1342
|
-
nativeRect:
|
|
1357
|
+
}, Re(A)), o) : void 0,
|
|
1358
|
+
nativeRect: o ? {
|
|
1343
1359
|
x: V + window.scrollX,
|
|
1344
|
-
y:
|
|
1360
|
+
y: _ + window.scrollY,
|
|
1345
1361
|
width: H - V,
|
|
1346
|
-
height:
|
|
1362
|
+
height: R - _
|
|
1347
1363
|
} : void 0,
|
|
1348
1364
|
children: []
|
|
1349
1365
|
};
|
|
1350
1366
|
}
|
|
1351
1367
|
if (s.nodeType !== Node.ELEMENT_NODE)
|
|
1352
1368
|
return null;
|
|
1353
|
-
const
|
|
1369
|
+
const a = s, l = a.dataset[z.KEY];
|
|
1354
1370
|
let d = t, h = t;
|
|
1355
1371
|
if (l) {
|
|
1356
|
-
const
|
|
1357
|
-
for (const
|
|
1358
|
-
if (!Ce.includes(
|
|
1372
|
+
const v = new Set(l.split(/\s+/));
|
|
1373
|
+
for (const M of v)
|
|
1374
|
+
if (!Ce.includes(M))
|
|
1359
1375
|
throw new Error(
|
|
1360
|
-
`[MirageEngine] Invalid filter token: '${
|
|
1376
|
+
`[MirageEngine] Invalid filter token: '${M}'. Expected one of: 'include-tree', 'exclude-tree', 'include-self', 'exclude-self', 'end'.`
|
|
1361
1377
|
);
|
|
1362
|
-
if (
|
|
1378
|
+
if (v.has(z.VALUES.END))
|
|
1363
1379
|
return null;
|
|
1364
|
-
if (
|
|
1380
|
+
if (v.has(z.VALUES.INCLUDE_TREE) && v.has(z.VALUES.EXCLUDE_TREE))
|
|
1365
1381
|
throw new Error(
|
|
1366
1382
|
"[MirageEngine] Conflicting filters: 'include-tree' and 'exclude-tree' cannot be used together on the same element."
|
|
1367
1383
|
);
|
|
1368
|
-
if (
|
|
1384
|
+
if (v.has(z.VALUES.INCLUDE_SELF) && v.has(z.VALUES.EXCLUDE_SELF))
|
|
1369
1385
|
throw new Error(
|
|
1370
1386
|
"[MirageEngine] Conflicting filters: 'include-self' and 'exclude-self' cannot be used together on the same element."
|
|
1371
1387
|
);
|
|
1372
|
-
|
|
1388
|
+
v.has(z.VALUES.INCLUDE_TREE) ? d = d | W : v.has(z.VALUES.EXCLUDE_TREE) && (d = d & ~W), h = d, v.has(z.VALUES.INCLUDE_SELF) ? h = h | W : v.has(z.VALUES.EXCLUDE_SELF) && (h = h & ~W);
|
|
1373
1389
|
}
|
|
1374
|
-
const f =
|
|
1390
|
+
const f = a.dataset[Y.KEY];
|
|
1375
1391
|
if (f) {
|
|
1376
|
-
const
|
|
1377
|
-
for (const
|
|
1378
|
-
if (!Ce.includes(
|
|
1392
|
+
const v = new Set(f.split(/\s+/));
|
|
1393
|
+
for (const M of v)
|
|
1394
|
+
if (!Ce.includes(M))
|
|
1379
1395
|
throw new Error(
|
|
1380
|
-
`[MirageEngine] Invalid select token: '${
|
|
1396
|
+
`[MirageEngine] Invalid select token: '${M}'. Expected one of: 'include-tree', 'exclude-tree', 'include-self', 'exclude-self', 'end'.`
|
|
1381
1397
|
);
|
|
1382
|
-
if (
|
|
1398
|
+
if (v.has(Y.VALUES.END))
|
|
1383
1399
|
return null;
|
|
1384
|
-
if (
|
|
1400
|
+
if (v.has(Y.VALUES.INCLUDE_TREE) && v.has(Y.VALUES.EXCLUDE_TREE))
|
|
1385
1401
|
throw new Error(
|
|
1386
1402
|
"[MirageEngine] Conflicting selects: 'include-tree' and 'exclude-tree' cannot be used together on the same element."
|
|
1387
1403
|
);
|
|
1388
|
-
if (
|
|
1404
|
+
if (v.has(Y.VALUES.INCLUDE_SELF) && v.has(Y.VALUES.EXCLUDE_SELF))
|
|
1389
1405
|
throw new Error(
|
|
1390
1406
|
"[MirageEngine] Conflicting selects: 'include-self' and 'exclude-self' cannot be used together on the same element."
|
|
1391
1407
|
);
|
|
1392
|
-
|
|
1408
|
+
v.has(Y.VALUES.INCLUDE_TREE) ? d = d | K : v.has(Y.VALUES.EXCLUDE_TREE) && (d = d & ~K), h = d, v.has(Y.VALUES.INCLUDE_SELF) ? h = h | K : v.has(Y.VALUES.EXCLUDE_SELF) && (h = h & ~K);
|
|
1393
1409
|
}
|
|
1394
|
-
const p =
|
|
1395
|
-
let g = !1,
|
|
1410
|
+
const p = a.dataset[O.KEY];
|
|
1411
|
+
let g = !1, m = o ? $({}, o) : {}, x = n;
|
|
1396
1412
|
if (p) {
|
|
1397
|
-
let
|
|
1398
|
-
const
|
|
1399
|
-
let
|
|
1400
|
-
if (
|
|
1401
|
-
|
|
1402
|
-
const
|
|
1413
|
+
let v = 1;
|
|
1414
|
+
const M = p.indexOf("{"), I = p.lastIndexOf("}");
|
|
1415
|
+
let F = p;
|
|
1416
|
+
if (M !== -1 && I !== -1 && I > M) {
|
|
1417
|
+
F = p.substring(0, M).trim();
|
|
1418
|
+
const R = p.substring(M, I + 1);
|
|
1403
1419
|
try {
|
|
1404
|
-
|
|
1405
|
-
} catch (
|
|
1420
|
+
m = new Function("return " + R)();
|
|
1421
|
+
} catch (C) {
|
|
1406
1422
|
console.warn(
|
|
1407
|
-
`[MirageEngine] Failed to parse travel styles JSON: ${
|
|
1423
|
+
`[MirageEngine] Failed to parse travel styles JSON: ${R}`
|
|
1408
1424
|
);
|
|
1409
1425
|
}
|
|
1410
1426
|
}
|
|
1411
|
-
const
|
|
1427
|
+
const A = F.split(/\s+/);
|
|
1412
1428
|
let V = !1;
|
|
1413
|
-
const
|
|
1414
|
-
if (
|
|
1429
|
+
const _ = A.indexOf(O.VALUES.TRAVELER);
|
|
1430
|
+
if (_ !== -1) {
|
|
1415
1431
|
g = !0, V = !0;
|
|
1416
|
-
const
|
|
1417
|
-
if (
|
|
1418
|
-
|
|
1432
|
+
const R = A[_ + 1];
|
|
1433
|
+
if (R && !isNaN(parseInt(R, 10)))
|
|
1434
|
+
v = parseInt(R, 10);
|
|
1419
1435
|
else {
|
|
1420
|
-
const
|
|
1421
|
-
|
|
1436
|
+
const C = A.find((j) => !isNaN(parseInt(j, 10)));
|
|
1437
|
+
C && (v = parseInt(C, 10));
|
|
1422
1438
|
}
|
|
1423
1439
|
}
|
|
1424
|
-
const H =
|
|
1440
|
+
const H = A.indexOf(O.VALUES.NATIVE);
|
|
1425
1441
|
if (H !== -1) {
|
|
1426
|
-
const
|
|
1427
|
-
if (
|
|
1428
|
-
x = parseInt(
|
|
1442
|
+
const R = A[H + 1];
|
|
1443
|
+
if (R && !isNaN(parseInt(R, 10)))
|
|
1444
|
+
x = parseInt(R, 10);
|
|
1429
1445
|
else if (!g) {
|
|
1430
|
-
const
|
|
1431
|
-
|
|
1446
|
+
const C = A.find((j) => !isNaN(parseInt(j, 10)));
|
|
1447
|
+
C && (x = parseInt(C, 10));
|
|
1432
1448
|
}
|
|
1433
1449
|
}
|
|
1434
1450
|
if (V) {
|
|
1435
|
-
const
|
|
1436
|
-
if (
|
|
1451
|
+
const R = v + 1;
|
|
1452
|
+
if (R < r)
|
|
1437
1453
|
throw new Error(
|
|
1438
|
-
`[MirageEngine] Traveler layer (${
|
|
1454
|
+
`[MirageEngine] Traveler layer (${v}) cannot be smaller than inherited capture layer (${r - 1}).`
|
|
1439
1455
|
);
|
|
1440
|
-
r = Math.min(
|
|
1456
|
+
r = Math.min(R, O.MAX_LAYERS + 1);
|
|
1441
1457
|
}
|
|
1442
1458
|
}
|
|
1443
|
-
const
|
|
1444
|
-
let
|
|
1445
|
-
|
|
1446
|
-
const
|
|
1447
|
-
if (
|
|
1459
|
+
const S = a.dataset[Ve.KEY];
|
|
1460
|
+
let L;
|
|
1461
|
+
S && (L = JSON.parse(S));
|
|
1462
|
+
const T = a.getBoundingClientRect(), E = window.getComputedStyle(a);
|
|
1463
|
+
if (T.width === 0 || T.height === 0 || E.display === "none")
|
|
1448
1464
|
return null;
|
|
1449
|
-
let
|
|
1450
|
-
|
|
1451
|
-
const
|
|
1452
|
-
let
|
|
1453
|
-
if (
|
|
1454
|
-
|
|
1455
|
-
else if (
|
|
1456
|
-
const
|
|
1457
|
-
const
|
|
1465
|
+
let b = a.getAttribute("data-mid");
|
|
1466
|
+
b || (b = Math.random().toString(36).substring(2, 11), a.setAttribute("data-mid", b));
|
|
1467
|
+
const w = parseInt(E.zIndex), k = (isNaN(w) ? 0 : w) + i;
|
|
1468
|
+
let U;
|
|
1469
|
+
if (a.tagName === "IMG")
|
|
1470
|
+
U = a.src;
|
|
1471
|
+
else if (a.tagName.toLowerCase() === "svg") {
|
|
1472
|
+
const v = a.cloneNode(!0), M = m == null ? void 0 : m.color, I = m == null ? void 0 : m.fill, F = m == null ? void 0 : m.stroke, A = m == null ? void 0 : m.opacity, V = (C, j) => {
|
|
1473
|
+
const N = window.getComputedStyle(C), Q = j, Be = N.fill === N.color, Oe = N.stroke === N.color, se = I || (Be ? M : void 0) || N.fill;
|
|
1458
1474
|
se && se !== "none" && (Q.style.fill = se);
|
|
1459
|
-
const ne =
|
|
1460
|
-
ne && ne !== "none" && (Q.style.stroke = ne),
|
|
1461
|
-
const ve =
|
|
1475
|
+
const ne = F || (Oe ? M : void 0) || N.stroke;
|
|
1476
|
+
ne && ne !== "none" && (Q.style.stroke = ne), N.strokeWidth && N.strokeWidth !== "0px" && (Q.style.strokeWidth = N.strokeWidth);
|
|
1477
|
+
const ve = M || N.color;
|
|
1462
1478
|
ve && (Q.style.color = ve);
|
|
1463
|
-
const oe =
|
|
1479
|
+
const oe = A || N.opacity;
|
|
1464
1480
|
oe && oe !== "1" && (Q.style.opacity = oe);
|
|
1465
|
-
for (let te = 0; te <
|
|
1466
|
-
V(
|
|
1481
|
+
for (let te = 0; te < C.children.length; te++)
|
|
1482
|
+
V(C.children[te], j.children[te]);
|
|
1467
1483
|
};
|
|
1468
|
-
V(
|
|
1469
|
-
const
|
|
1470
|
-
|
|
1471
|
-
let
|
|
1472
|
-
|
|
1484
|
+
V(a, v);
|
|
1485
|
+
const _ = a.getBoundingClientRect(), H = window.devicePixelRatio * c;
|
|
1486
|
+
v.hasAttribute("viewBox") || v.setAttribute("viewBox", `0 0 ${_.width} ${_.height}`), v.setAttribute("width", (_.width * H).toString()), v.setAttribute("height", (_.height * H).toString());
|
|
1487
|
+
let R = new XMLSerializer().serializeToString(v);
|
|
1488
|
+
R.includes("xmlns=") || (R = R.replace(
|
|
1473
1489
|
"<svg",
|
|
1474
1490
|
'<svg xmlns="http://www.w3.org/2000/svg"'
|
|
1475
|
-
)),
|
|
1491
|
+
)), U = `data:image/svg+xml;utf8,${encodeURIComponent(R)}`;
|
|
1476
1492
|
} else if (E.backgroundImage && E.backgroundImage !== "none") {
|
|
1477
|
-
const
|
|
1478
|
-
|
|
1493
|
+
const v = E.backgroundImage.match(/url\(['"]?(.*?)['"]?\)/);
|
|
1494
|
+
v && (U = v[1]);
|
|
1479
1495
|
}
|
|
1480
|
-
const
|
|
1496
|
+
const B = {
|
|
1481
1497
|
backgroundColor: E.backgroundColor,
|
|
1482
1498
|
backgroundImage: E.backgroundImage,
|
|
1483
|
-
opacity:
|
|
1484
|
-
zIndex:
|
|
1499
|
+
opacity: a.dataset[P.KEY] === P.VALUES.HIDE ? 1 : parseFloat(E.opacity),
|
|
1500
|
+
zIndex: k,
|
|
1485
1501
|
borderRadius: E.borderRadius,
|
|
1486
1502
|
borderColor: E.borderColor,
|
|
1487
1503
|
borderWidth: E.borderWidth,
|
|
1488
|
-
imageSrc:
|
|
1504
|
+
imageSrc: U,
|
|
1489
1505
|
isTraveler: g
|
|
1490
|
-
}, G =
|
|
1506
|
+
}, G = B;
|
|
1491
1507
|
let Ie, Ue;
|
|
1492
1508
|
const he = [];
|
|
1493
|
-
return
|
|
1494
|
-
const
|
|
1495
|
-
|
|
1509
|
+
return a.tagName.toLowerCase() !== "svg" && Array.from(a.childNodes).forEach((v) => {
|
|
1510
|
+
const M = v.nodeType === Node.TEXT_NODE ? h : d, I = ke(
|
|
1511
|
+
v,
|
|
1496
1512
|
e,
|
|
1497
|
-
|
|
1513
|
+
M,
|
|
1498
1514
|
r,
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1515
|
+
k,
|
|
1516
|
+
c,
|
|
1517
|
+
v.nodeType === Node.TEXT_NODE ? x : void 0,
|
|
1518
|
+
v.nodeType === Node.TEXT_NODE && Object.keys(m).length > 0 ? m : void 0
|
|
1503
1519
|
);
|
|
1504
|
-
|
|
1520
|
+
I && he.push(I);
|
|
1505
1521
|
}), {
|
|
1506
|
-
id:
|
|
1522
|
+
id: b,
|
|
1507
1523
|
type: "BOX",
|
|
1508
|
-
element:
|
|
1524
|
+
element: a,
|
|
1509
1525
|
rect: {
|
|
1510
|
-
x:
|
|
1511
|
-
y:
|
|
1512
|
-
width:
|
|
1513
|
-
height:
|
|
1526
|
+
x: T.left + window.scrollX,
|
|
1527
|
+
y: T.top + window.scrollY,
|
|
1528
|
+
width: T.width,
|
|
1529
|
+
height: T.height
|
|
1514
1530
|
},
|
|
1515
1531
|
styles: G,
|
|
1516
1532
|
textContent: Ie,
|
|
@@ -1520,42 +1536,43 @@ function ke(s, e = q | Z | Ye | ce | ie, t, r = 1, i = 0, o = 2, n, a) {
|
|
|
1520
1536
|
isTraveler: g,
|
|
1521
1537
|
captureLayer: r,
|
|
1522
1538
|
nativeLayer: x,
|
|
1523
|
-
nativeStyles: x !== void 0 ? be($({},
|
|
1524
|
-
backgroundColor: (de =
|
|
1525
|
-
backgroundImage: (ue =
|
|
1526
|
-
opacity: (fe =
|
|
1527
|
-
zIndex:
|
|
1528
|
-
borderRadius: (ge =
|
|
1529
|
-
borderColor: (pe =
|
|
1530
|
-
borderWidth: (me =
|
|
1531
|
-
isTraveler:
|
|
1539
|
+
nativeStyles: x !== void 0 ? be($({}, B), {
|
|
1540
|
+
backgroundColor: (de = m.backgroundColor) != null ? de : B.backgroundColor,
|
|
1541
|
+
backgroundImage: (ue = m.backgroundImage) != null ? ue : B.backgroundImage,
|
|
1542
|
+
opacity: (fe = m.opacity) != null ? fe : B.opacity,
|
|
1543
|
+
zIndex: m.zIndex !== void 0 ? m.zIndex + k : B.zIndex,
|
|
1544
|
+
borderRadius: (ge = m.borderRadius) != null ? ge : B.borderRadius,
|
|
1545
|
+
borderColor: (pe = m.borderColor) != null ? pe : B.borderColor,
|
|
1546
|
+
borderWidth: (me = m.borderWidth) != null ? me : B.borderWidth,
|
|
1547
|
+
isTraveler: B.isTraveler,
|
|
1548
|
+
transform: m.transform
|
|
1532
1549
|
}) : void 0,
|
|
1533
1550
|
nativeRect: x !== void 0 ? {
|
|
1534
|
-
x:
|
|
1535
|
-
y:
|
|
1536
|
-
width:
|
|
1537
|
-
height:
|
|
1551
|
+
x: m.x !== void 0 ? parseFloat(m.x) : T.left + window.scrollX,
|
|
1552
|
+
y: m.y !== void 0 ? parseFloat(m.y) : T.top + window.scrollY,
|
|
1553
|
+
width: m.width !== void 0 ? parseFloat(m.width) : T.width,
|
|
1554
|
+
height: m.height !== void 0 ? parseFloat(m.height) : T.height
|
|
1538
1555
|
} : void 0,
|
|
1539
1556
|
isFixed: E.position === "fixed",
|
|
1540
1557
|
children: he,
|
|
1541
|
-
shaderHooks:
|
|
1558
|
+
shaderHooks: L
|
|
1542
1559
|
};
|
|
1543
1560
|
}
|
|
1544
1561
|
function st(s, e) {
|
|
1545
1562
|
e.size !== 0 && e.forEach((t, r) => {
|
|
1546
|
-
var
|
|
1563
|
+
var c, n, o, a;
|
|
1547
1564
|
const i = s.get(r);
|
|
1548
|
-
!i || !i.userData.basePosition || (
|
|
1565
|
+
!i || !i.userData.basePosition || (X.forceUpdateUniforms(i.material, {
|
|
1549
1566
|
backgroundColor: t.backgroundColor,
|
|
1550
1567
|
backgroundImage: t.backgroundImage,
|
|
1551
1568
|
opacity: t.opacity,
|
|
1552
|
-
borderRadius: (n = t.borderRadius) != null ? n : (
|
|
1569
|
+
borderRadius: (n = t.borderRadius) != null ? n : (c = i.userData.baseStyles) == null ? void 0 : c.borderRadius
|
|
1553
1570
|
// width and height are no longer updated here, they are updated in syncMeshesByDOM
|
|
1554
|
-
}), i.userData.nativeMesh &&
|
|
1571
|
+
}), i.userData.nativeMesh && X.forceUpdateUniforms(i.userData.nativeMesh.material, {
|
|
1555
1572
|
backgroundColor: t.backgroundColor,
|
|
1556
1573
|
backgroundImage: t.backgroundImage,
|
|
1557
1574
|
opacity: t.opacity,
|
|
1558
|
-
borderRadius: (
|
|
1575
|
+
borderRadius: (a = t.borderRadius) != null ? a : (o = i.userData.baseStyles) == null ? void 0 : o.borderRadius
|
|
1559
1576
|
}));
|
|
1560
1577
|
});
|
|
1561
1578
|
}
|
|
@@ -1568,19 +1585,19 @@ class nt {
|
|
|
1568
1585
|
u(this, "tracker");
|
|
1569
1586
|
this.target = e, this.renderer = t, this.registry = r, this.tracker = new Me(e, {
|
|
1570
1587
|
resizeDebounce: i.resizeDebounce
|
|
1571
|
-
}), this.tracker.onLayoutChange.add((
|
|
1572
|
-
document.querySelector(`[${
|
|
1573
|
-
const
|
|
1588
|
+
}), this.tracker.onLayoutChange.add((c, n) => {
|
|
1589
|
+
document.querySelector(`[${O.NAME}~='${O.VALUES.TRAVELER}']`) !== null && !this.isTravelEnabled && (this.isTravelEnabled = !0, this.renderer.createRenderTarget());
|
|
1590
|
+
const a = ke(
|
|
1574
1591
|
this.target,
|
|
1575
|
-
|
|
1592
|
+
c,
|
|
1576
1593
|
W,
|
|
1577
1594
|
1,
|
|
1578
1595
|
0,
|
|
1579
1596
|
this.renderer.qualityFactor
|
|
1580
1597
|
);
|
|
1581
|
-
|
|
1582
|
-
}), this.tracker.onStyleChange.add((
|
|
1583
|
-
st(this.registry,
|
|
1598
|
+
a && this.renderer.syncScene(a, n);
|
|
1599
|
+
}), this.tracker.onStyleChange.add((c) => {
|
|
1600
|
+
st(this.registry, c);
|
|
1584
1601
|
}), this.tracker.onRender.add(() => {
|
|
1585
1602
|
this.renderer.syncMeshesByDOM(), this.renderer.render();
|
|
1586
1603
|
});
|
|
@@ -1623,17 +1640,17 @@ class at {
|
|
|
1623
1640
|
u(this, "syncer");
|
|
1624
1641
|
u(this, "target");
|
|
1625
1642
|
u(this, "registry");
|
|
1626
|
-
var i,
|
|
1643
|
+
var i, c, n;
|
|
1627
1644
|
if (this.target = e, this.registry = new ot(), !document.getElementById("mirage-engine-styles")) {
|
|
1628
|
-
const
|
|
1629
|
-
|
|
1645
|
+
const o = document.createElement("style");
|
|
1646
|
+
o.id = "mirage-engine-styles", o.textContent = `
|
|
1630
1647
|
[${P.NAME}="${P.VALUES.HIDE}"] {
|
|
1631
1648
|
opacity: 0 !important;
|
|
1632
1649
|
}
|
|
1633
|
-
`, document.head.appendChild(
|
|
1650
|
+
`, document.head.appendChild(o);
|
|
1634
1651
|
}
|
|
1635
1652
|
let r;
|
|
1636
|
-
if (t.mode === "duplicate" ? r = (
|
|
1653
|
+
if (t.mode === "duplicate" ? r = (c = (i = t.container) != null ? i : this.target.parentElement) != null ? c : void 0 : r = (n = this.target.parentElement) != null ? n : void 0, !r)
|
|
1637
1654
|
throw new Error("[Mirage] Cannot find a container (parent or option).");
|
|
1638
1655
|
this.renderer = new rt(
|
|
1639
1656
|
this.target,
|
|
@@ -1672,10 +1689,10 @@ class at {
|
|
|
1672
1689
|
ArrowUp: !1,
|
|
1673
1690
|
ArrowDown: !1
|
|
1674
1691
|
};
|
|
1675
|
-
window.addEventListener("keydown", (
|
|
1676
|
-
t[
|
|
1677
|
-
}), window.addEventListener("keyup", (
|
|
1678
|
-
t[
|
|
1692
|
+
window.addEventListener("keydown", (c) => {
|
|
1693
|
+
t[c.key] !== void 0 && (t[c.key] = !0);
|
|
1694
|
+
}), window.addEventListener("keyup", (c) => {
|
|
1695
|
+
t[c.key] !== void 0 && (t[c.key] = !1);
|
|
1679
1696
|
});
|
|
1680
1697
|
const r = 2, i = () => {
|
|
1681
1698
|
requestAnimationFrame(i), t.ArrowRight && e.position.setX(e.position.x + r), t.ArrowLeft && e.position.setX(e.position.x - r), t.ArrowUp && e.position.setY(e.position.y + r), t.ArrowDown && e.position.setY(e.position.y - r);
|
|
@@ -1722,8 +1739,8 @@ class ct {
|
|
|
1722
1739
|
const e = document.querySelectorAll(this.frontSelector);
|
|
1723
1740
|
this.frontLayer && e.forEach((t) => {
|
|
1724
1741
|
var n;
|
|
1725
|
-
const r = t.getBoundingClientRect(), i = window.getComputedStyle(t),
|
|
1726
|
-
|
|
1742
|
+
const r = t.getBoundingClientRect(), i = window.getComputedStyle(t), c = document.createElement("div");
|
|
1743
|
+
c.className = "sand-placeholder", Object.assign(c.style, {
|
|
1727
1744
|
display: i.display === "inline" ? "inline-block" : i.display,
|
|
1728
1745
|
width: `${r.width}px`,
|
|
1729
1746
|
height: `${r.height}px`,
|
|
@@ -1734,14 +1751,14 @@ class ct {
|
|
|
1734
1751
|
marginRight: i.marginRight,
|
|
1735
1752
|
visibility: "hidden",
|
|
1736
1753
|
pointerEvents: "none"
|
|
1737
|
-
}), (n = t.parentNode) == null || n.insertBefore(
|
|
1754
|
+
}), (n = t.parentNode) == null || n.insertBefore(c, t), this.frontLayer.appendChild(t), Object.assign(t.style, {
|
|
1738
1755
|
position: "fixed",
|
|
1739
1756
|
margin: "0",
|
|
1740
1757
|
boxSizing: "border-box",
|
|
1741
1758
|
width: `${r.width}px`,
|
|
1742
1759
|
height: `${r.height}px`,
|
|
1743
1760
|
pointerEvents: "auto"
|
|
1744
|
-
}), this.items.push({ placeholder:
|
|
1761
|
+
}), this.items.push({ placeholder: c, original: t });
|
|
1745
1762
|
});
|
|
1746
1763
|
}
|
|
1747
1764
|
setupHooks() {
|