@mirage-engine/core 0.3.7 → 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/CHANGELOG.md +18 -0
- package/dist/mirage-engine.js +639 -585
- package/dist/mirage-engine.umd.js +27 -14
- package/dist/src/types/attributes.d.ts +10 -0
- package/package.json +3 -3
- package/src/dom/Extractor.ts +19 -12
- package/src/renderer/Renderer.ts +43 -3
- package/src/types/attributes.ts +5 -0
package/dist/mirage-engine.js
CHANGED
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
var
|
|
1
|
+
var Be = Object.defineProperty, Oe = Object.defineProperties;
|
|
2
2
|
var Fe = Object.getOwnPropertyDescriptors;
|
|
3
3
|
var ye = Object.getOwnPropertySymbols;
|
|
4
4
|
var _e = Object.prototype.hasOwnProperty, Ne = Object.prototype.propertyIsEnumerable;
|
|
5
|
-
var
|
|
5
|
+
var ae = (s, e, t) => e in s ? Be(s, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : s[e] = t, q = (s, e) => {
|
|
6
6
|
for (var t in e || (e = {}))
|
|
7
|
-
_e.call(e, t) &&
|
|
7
|
+
_e.call(e, t) && ae(s, t, e[t]);
|
|
8
8
|
if (ye)
|
|
9
9
|
for (var t of ye(e))
|
|
10
|
-
Ne.call(e, t) &&
|
|
10
|
+
Ne.call(e, t) && ae(s, t, e[t]);
|
|
11
11
|
return s;
|
|
12
|
-
},
|
|
13
|
-
var g = (s, e, t) => (
|
|
14
|
-
var
|
|
15
|
-
var
|
|
12
|
+
}, be = (s, e) => Oe(s, Fe(e));
|
|
13
|
+
var g = (s, e, t) => (ae(s, typeof e != "symbol" ? e + "" : e, t), t);
|
|
14
|
+
var we = (s, e, t) => new Promise((r, i) => {
|
|
15
|
+
var l = (a) => {
|
|
16
16
|
try {
|
|
17
|
-
o(t.next(
|
|
18
|
-
} catch (
|
|
19
|
-
|
|
17
|
+
o(t.next(a));
|
|
18
|
+
} catch (c) {
|
|
19
|
+
i(c);
|
|
20
20
|
}
|
|
21
|
-
}, n = (
|
|
21
|
+
}, n = (a) => {
|
|
22
22
|
try {
|
|
23
|
-
o(t.throw(
|
|
24
|
-
} catch (
|
|
25
|
-
|
|
23
|
+
o(t.throw(a));
|
|
24
|
+
} catch (c) {
|
|
25
|
+
i(c);
|
|
26
26
|
}
|
|
27
|
-
}, o = (
|
|
27
|
+
}, o = (a) => a.done ? r(a.value) : Promise.resolve(a.value).then(l, n);
|
|
28
28
|
o((t = t.apply(s, e)).next());
|
|
29
29
|
});
|
|
30
|
-
import * as
|
|
30
|
+
import * as y from "three";
|
|
31
31
|
const Re = {
|
|
32
32
|
INCLUDE_TREE: "include-tree",
|
|
33
33
|
EXCLUDE_TREE: "exclude-tree",
|
|
34
34
|
INCLUDE_SELF: "include-self",
|
|
35
35
|
EXCLUDE_SELF: "exclude-self",
|
|
36
36
|
END: "end"
|
|
37
|
-
},
|
|
37
|
+
}, P = {
|
|
38
38
|
NAME: "data-mirage-dom",
|
|
39
39
|
KEY: "mirageDom",
|
|
40
40
|
VALUES: {
|
|
@@ -48,13 +48,18 @@ const Re = {
|
|
|
48
48
|
CAPTURE_2: "2",
|
|
49
49
|
CAPTURE_3: "3",
|
|
50
50
|
CAPTURE_4: "4",
|
|
51
|
-
CAPTURE_5: "5"
|
|
52
|
-
|
|
51
|
+
CAPTURE_5: "5",
|
|
52
|
+
CAPTURE_6: "6",
|
|
53
|
+
CAPTURE_7: "7",
|
|
54
|
+
CAPTURE_8: "8",
|
|
55
|
+
CAPTURE_9: "9",
|
|
56
|
+
CAPTURE_10: "10"
|
|
57
|
+
}, O = {
|
|
53
58
|
NAME: "data-mirage-travel",
|
|
54
59
|
KEY: "mirageTravel",
|
|
55
60
|
VALUES: xe,
|
|
56
61
|
MAX_LAYERS: Object.keys(xe).length - 1
|
|
57
|
-
},
|
|
62
|
+
}, X = {
|
|
58
63
|
NAME: "data-mirage-filter",
|
|
59
64
|
KEY: "mirageFilter",
|
|
60
65
|
VALUES: Re
|
|
@@ -71,7 +76,7 @@ const Re = {
|
|
|
71
76
|
VALUES: {
|
|
72
77
|
FRONT: "front"
|
|
73
78
|
}
|
|
74
|
-
},
|
|
79
|
+
}, re = 0, $ = 1, Z = 2, ze = 4, ie = 8, ce = 16;
|
|
75
80
|
function Ve(s) {
|
|
76
81
|
const e = s.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);
|
|
77
82
|
return e ? {
|
|
@@ -100,7 +105,7 @@ class We {
|
|
|
100
105
|
g(this, "pendingStyles", /* @__PURE__ */ new Map());
|
|
101
106
|
g(this, "isDomDirty", !1);
|
|
102
107
|
g(this, "isRunning", !1);
|
|
103
|
-
g(this, "pendingMask",
|
|
108
|
+
g(this, "pendingMask", re);
|
|
104
109
|
g(this, "mutationTimer", null);
|
|
105
110
|
g(this, "cssTimer", null);
|
|
106
111
|
g(this, "resizeConfig");
|
|
@@ -115,7 +120,7 @@ class We {
|
|
|
115
120
|
g(this, "onScrollChange", /* @__PURE__ */ new Set());
|
|
116
121
|
g(this, "onRender", /* @__PURE__ */ new Set());
|
|
117
122
|
g(this, "onTransitionFinished", (e) => {
|
|
118
|
-
this.target.contains(e.target) && this.mutationTimer === null && (this.cssTimer && clearTimeout(this.cssTimer), this.pendingStyles.size == 0 && (this.pendingMask |= $ |
|
|
123
|
+
this.target.contains(e.target) && this.mutationTimer === null && (this.cssTimer && clearTimeout(this.cssTimer), this.pendingStyles.size == 0 && (this.pendingMask |= $ | Z, this.cssTimer = window.setTimeout(() => {
|
|
119
124
|
this.isDomDirty = !0, this.cssTimer = null;
|
|
120
125
|
}, 50)));
|
|
121
126
|
});
|
|
@@ -131,38 +136,38 @@ class We {
|
|
|
131
136
|
g(this, "renderLoop", () => {
|
|
132
137
|
if (!this.isRunning)
|
|
133
138
|
return;
|
|
134
|
-
this.onBeforeRender.forEach((
|
|
139
|
+
this.onBeforeRender.forEach((r) => r()), this.isDomDirty && (this.isDomDirty = !1, this.onLayoutChange.forEach((r) => r(this.pendingMask, this.pendingDeletions)), this.pendingDeletions.clear(), this.pendingMask = re);
|
|
135
140
|
const e = window.scrollX, t = window.scrollY;
|
|
136
|
-
(e !== this.lastScrollX || t !== this.lastScrollY) && (this.onScrollChange.forEach((
|
|
141
|
+
(e !== this.lastScrollX || t !== this.lastScrollY) && (this.onScrollChange.forEach((r) => r(e, t)), this.lastScrollX = e, this.lastScrollY = t, this.scrollTimer && clearTimeout(this.scrollTimer), this.scrollTimer = window.setTimeout(() => {
|
|
137
142
|
this.pendingMask |= $, this.isDomDirty = !0, this.scrollTimer = null;
|
|
138
|
-
}, 150)), this.pendingStyles.size > 0 && (this.onStyleChange.forEach((
|
|
143
|
+
}, 150)), this.pendingStyles.size > 0 && (this.onStyleChange.forEach((r) => r(this.pendingStyles)), this.pendingStyles.clear()), this.onRender.forEach((r) => r()), requestAnimationFrame(this.renderLoop);
|
|
139
144
|
});
|
|
140
|
-
var
|
|
145
|
+
var i, l;
|
|
141
146
|
this.target = e;
|
|
142
|
-
const
|
|
143
|
-
|
|
147
|
+
const r = (i = t.resizeDebounce) != null ? i : !0;
|
|
148
|
+
r === !1 ? this.resizeConfig = { enabled: !1, delay: 0 } : r === !0 ? this.resizeConfig = { enabled: !0, delay: 150 } : this.resizeConfig = {
|
|
144
149
|
enabled: !0,
|
|
145
|
-
delay: (
|
|
146
|
-
onStart:
|
|
147
|
-
onEnd:
|
|
150
|
+
delay: (l = r.delay) != null ? l : 150,
|
|
151
|
+
onStart: r.onStart,
|
|
152
|
+
onEnd: r.onEnd
|
|
148
153
|
}, this.observer = new MutationObserver((n) => {
|
|
149
|
-
let o =
|
|
150
|
-
for (const
|
|
151
|
-
if (
|
|
152
|
-
o |=
|
|
153
|
-
|
|
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((c) => {
|
|
158
|
+
c instanceof HTMLElement && this.pendingDeletions.add(c);
|
|
154
159
|
});
|
|
155
|
-
else if (
|
|
156
|
-
if (
|
|
157
|
-
o |= $ |
|
|
158
|
-
const
|
|
159
|
-
this.pendingStyles.set(
|
|
160
|
+
else if (a.type === "attributes")
|
|
161
|
+
if (a.attributeName === "style") {
|
|
162
|
+
o |= $ | Z;
|
|
163
|
+
const c = a.target, d = Ye(c.style);
|
|
164
|
+
this.pendingStyles.set(c, d);
|
|
160
165
|
} else
|
|
161
|
-
|
|
166
|
+
a.attributeName === "class" ? o |= $ | Z : a.attributeName && a.attributeName.startsWith("data-") && (o |= $ | Z, a.attributeName.startsWith("data-mirage") && (o |= ie));
|
|
162
167
|
else
|
|
163
|
-
|
|
164
|
-
if (o !==
|
|
165
|
-
if (this.pendingMask |= o, o &
|
|
168
|
+
a.type === "characterData" && (o |= ce | $);
|
|
169
|
+
if (o !== re) {
|
|
170
|
+
if (this.pendingMask |= o, o & ie) {
|
|
166
171
|
this.clearTimers(), this.isDomDirty = !0;
|
|
167
172
|
return;
|
|
168
173
|
}
|
|
@@ -187,12 +192,12 @@ class We {
|
|
|
187
192
|
this.mutationTimer && (clearTimeout(this.mutationTimer), this.mutationTimer = null), this.cssTimer && (clearTimeout(this.cssTimer), this.cssTimer = null), this.scrollTimer && (clearTimeout(this.scrollTimer), this.scrollTimer = null);
|
|
188
193
|
}
|
|
189
194
|
}
|
|
190
|
-
const W = 1,
|
|
195
|
+
const W = 1, K = 2, ct = 0, A = {
|
|
191
196
|
BASE: 0,
|
|
192
197
|
SELECTED: 1,
|
|
193
198
|
getCaptureLayer: (s) => 31 - s,
|
|
194
199
|
HIDDEN: 31
|
|
195
|
-
},
|
|
200
|
+
}, Ee = Object.values(X.VALUES);
|
|
196
201
|
class Le {
|
|
197
202
|
/**
|
|
198
203
|
* Calculates or retrieves the exact alphabetic baseline (in pixels) for the given font.
|
|
@@ -208,18 +213,18 @@ class Le {
|
|
|
208
213
|
static calculateBaselineFromDOM(e) {
|
|
209
214
|
if (typeof document == "undefined")
|
|
210
215
|
return 0;
|
|
211
|
-
const t = document.createElement("div"),
|
|
212
|
-
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",
|
|
213
|
-
const
|
|
214
|
-
return document.body.removeChild(t),
|
|
216
|
+
const t = document.createElement("div"), r = document.createElement("span"), i = document.createElement("img");
|
|
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 l = i.offsetTop - r.offsetTop;
|
|
219
|
+
return document.body.removeChild(t), l;
|
|
215
220
|
}
|
|
216
221
|
}
|
|
217
222
|
g(Le, "cache", /* @__PURE__ */ new Map());
|
|
218
|
-
class He extends
|
|
219
|
-
constructor(t,
|
|
223
|
+
class He extends y.MeshBasicMaterial {
|
|
224
|
+
constructor(t, r, i, l, n = 2) {
|
|
220
225
|
super({
|
|
221
226
|
transparent: !0,
|
|
222
|
-
side:
|
|
227
|
+
side: y.FrontSide,
|
|
223
228
|
color: 16777215
|
|
224
229
|
});
|
|
225
230
|
g(this, "canvas");
|
|
@@ -227,69 +232,72 @@ class He extends b.MeshBasicMaterial {
|
|
|
227
232
|
g(this, "qualityFactor");
|
|
228
233
|
if (this.canvas = document.createElement("canvas"), this.ctx = this.canvas.getContext("2d"), !this.ctx)
|
|
229
234
|
throw new Error("[Mirage] Failed to create canvas context");
|
|
230
|
-
this.qualityFactor = n, this.map = new
|
|
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, l);
|
|
231
236
|
}
|
|
232
|
-
wrapText(t,
|
|
233
|
-
const
|
|
234
|
-
`),
|
|
235
|
-
return
|
|
237
|
+
wrapText(t, r) {
|
|
238
|
+
const i = t.split(`
|
|
239
|
+
`), l = [];
|
|
240
|
+
return i.forEach((n) => {
|
|
236
241
|
const o = n.match(/[^\s\-]+\-?|\-|\s+/g) || [];
|
|
237
242
|
if (o.length === 0) {
|
|
238
|
-
|
|
243
|
+
l.push("");
|
|
239
244
|
return;
|
|
240
245
|
}
|
|
241
|
-
let
|
|
242
|
-
for (let
|
|
243
|
-
const d = o[
|
|
244
|
-
this.ctx.measureText(
|
|
246
|
+
let a = o[0];
|
|
247
|
+
for (let c = 1; c < o.length; c++) {
|
|
248
|
+
const d = o[c];
|
|
249
|
+
this.ctx.measureText(a + d).width <= r + 2 ? a += d : (a && l.push(a), a = d.trimStart());
|
|
245
250
|
}
|
|
246
|
-
|
|
247
|
-
}),
|
|
251
|
+
a && l.push(a);
|
|
252
|
+
}), l;
|
|
248
253
|
}
|
|
249
|
-
updateText(t,
|
|
254
|
+
updateText(t, r, i, l, n) {
|
|
250
255
|
n !== void 0 && (this.qualityFactor = n);
|
|
251
|
-
const
|
|
252
|
-
this.canvas.width !==
|
|
253
|
-
const h = this.wrapText(t,
|
|
256
|
+
const a = (window.devicePixelRatio || 1) * this.qualityFactor, c = i * a, d = l * a;
|
|
257
|
+
this.canvas.width !== c || this.canvas.height !== d ? (this.canvas.width = c, 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
|
+
const h = this.wrapText(t, i), u = r.lineHeight, p = Le.getBaseline(r.font);
|
|
254
259
|
h.forEach((f, m) => {
|
|
255
|
-
const
|
|
256
|
-
let
|
|
257
|
-
|
|
260
|
+
const x = m * u + 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(f, S, x);
|
|
258
263
|
}), this.map && (this.map.needsUpdate = !0);
|
|
259
264
|
}
|
|
260
265
|
dispose() {
|
|
261
266
|
this.map && this.map.dispose(), super.dispose();
|
|
262
267
|
}
|
|
263
268
|
}
|
|
264
|
-
function
|
|
265
|
-
|
|
269
|
+
function J(s, e = 0) {
|
|
270
|
+
if (typeof s == "number")
|
|
271
|
+
return s;
|
|
272
|
+
const t = parseFloat(s) || 0;
|
|
273
|
+
return typeof s == "string" && s.includes("%") ? t / 100 * e : t;
|
|
266
274
|
}
|
|
267
|
-
function
|
|
275
|
+
function ee(s) {
|
|
268
276
|
if (!s || s === "transparent")
|
|
269
|
-
return { color: new
|
|
277
|
+
return { color: new y.Color(16777215), alpha: 0 };
|
|
270
278
|
const e = s.match(
|
|
271
279
|
/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\)/
|
|
272
280
|
);
|
|
273
281
|
if (e) {
|
|
274
|
-
const t = parseInt(e[1], 10),
|
|
275
|
-
return { color: new
|
|
282
|
+
const t = parseInt(e[1], 10), r = parseInt(e[2], 10), i = parseInt(e[3], 10), l = e[4] !== void 0 ? parseFloat(e[4]) : 1;
|
|
283
|
+
return { color: new y.Color(`rgb(${t}, ${r}, ${i})`), alpha: l };
|
|
276
284
|
}
|
|
277
|
-
return { color: new
|
|
285
|
+
return { color: new y.Color(s), alpha: 1 };
|
|
278
286
|
}
|
|
279
287
|
function Pe(s) {
|
|
280
288
|
const e = [];
|
|
281
|
-
let t = "",
|
|
282
|
-
for (let
|
|
283
|
-
const
|
|
284
|
-
if (
|
|
285
|
-
|
|
286
|
-
else if (
|
|
287
|
-
|
|
288
|
-
else if (
|
|
289
|
+
let t = "", r = 0;
|
|
290
|
+
for (let i = 0; i < s.length; i++) {
|
|
291
|
+
const l = s[i];
|
|
292
|
+
if (l === "(")
|
|
293
|
+
r++;
|
|
294
|
+
else if (l === ")")
|
|
295
|
+
r--;
|
|
296
|
+
else if (l === "," && r === 0) {
|
|
289
297
|
e.push(t.trim()), t = "";
|
|
290
298
|
continue;
|
|
291
299
|
}
|
|
292
|
-
t +=
|
|
300
|
+
t += l;
|
|
293
301
|
}
|
|
294
302
|
return t && e.push(t.trim()), e;
|
|
295
303
|
}
|
|
@@ -299,24 +307,24 @@ function Ge(s) {
|
|
|
299
307
|
const e = s.match(/linear-gradient\((.*)\)/);
|
|
300
308
|
if (!e)
|
|
301
309
|
return null;
|
|
302
|
-
const t = e[1],
|
|
303
|
-
let
|
|
304
|
-
const n =
|
|
310
|
+
const t = e[1], r = Pe(t);
|
|
311
|
+
let i = Math.PI, l = 0;
|
|
312
|
+
const n = r[0].trim();
|
|
305
313
|
if (n.startsWith("to "))
|
|
306
|
-
n === "to top" ?
|
|
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), l = 1;
|
|
307
315
|
else if (n.endsWith("deg") || n.endsWith("rad") || n.endsWith("turn")) {
|
|
308
|
-
const
|
|
309
|
-
n.endsWith("deg") ?
|
|
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), l = 1;
|
|
310
318
|
}
|
|
311
319
|
const o = [];
|
|
312
|
-
for (let
|
|
313
|
-
const
|
|
314
|
-
let h =
|
|
315
|
-
if (d !== -1 && !
|
|
316
|
-
const f =
|
|
317
|
-
(f.endsWith("%") || f.endsWith("px") || !isNaN(parseFloat(f))) && (h =
|
|
320
|
+
for (let a = l; a < r.length && !(o.length >= 8); a++) {
|
|
321
|
+
const c = r[a].trim(), d = c.lastIndexOf(" ");
|
|
322
|
+
let h = c, u = null;
|
|
323
|
+
if (d !== -1 && !c.endsWith(")")) {
|
|
324
|
+
const f = c.substring(d + 1);
|
|
325
|
+
(f.endsWith("%") || f.endsWith("px") || !isNaN(parseFloat(f))) && (h = c.substring(0, d).trim(), u = f);
|
|
318
326
|
}
|
|
319
|
-
const p =
|
|
327
|
+
const p = ee(h);
|
|
320
328
|
o.push({
|
|
321
329
|
color: p.color,
|
|
322
330
|
alpha: p.alpha,
|
|
@@ -325,22 +333,22 @@ function Ge(s) {
|
|
|
325
333
|
});
|
|
326
334
|
}
|
|
327
335
|
if (o.length > 0) {
|
|
328
|
-
for (let
|
|
329
|
-
o[
|
|
336
|
+
for (let c = 0; c < o.length; c++)
|
|
337
|
+
o[c].rawStop !== null && (o[c].stop = parseFloat(o[c].rawStop) / 100);
|
|
330
338
|
o[0].rawStop === null && (o[0].stop = 0), o.length > 1 && o[o.length - 1].rawStop === null && (o[o.length - 1].stop = 1);
|
|
331
|
-
let
|
|
332
|
-
for (let
|
|
333
|
-
if (o[
|
|
334
|
-
const d =
|
|
339
|
+
let a = 0;
|
|
340
|
+
for (let c = 1; c < o.length; c++)
|
|
341
|
+
if (o[c].rawStop !== null || c === o.length - 1) {
|
|
342
|
+
const d = c - a;
|
|
335
343
|
if (d > 1) {
|
|
336
|
-
const h = o[
|
|
344
|
+
const h = o[a].stop, p = (o[c].stop - h) / d;
|
|
337
345
|
for (let f = 1; f < d; f++)
|
|
338
|
-
o[
|
|
346
|
+
o[a + f].stop = h + p * f;
|
|
339
347
|
}
|
|
340
|
-
|
|
348
|
+
a = c;
|
|
341
349
|
}
|
|
342
350
|
}
|
|
343
|
-
return { angle:
|
|
351
|
+
return { angle: i, stops: o };
|
|
344
352
|
}
|
|
345
353
|
const qe = `varying vec2 vUv;
|
|
346
354
|
varying vec4 vScreenPos;
|
|
@@ -431,6 +439,18 @@ void main() {
|
|
|
431
439
|
vec2 p = (vUv - 0.5) * uSize;
|
|
432
440
|
vec2 halfSize = uSize * 0.5;
|
|
433
441
|
|
|
442
|
+
// CSS Proportional Border-Radius Clamping
|
|
443
|
+
float tl = uBorderRadius.x;
|
|
444
|
+
float tr = uBorderRadius.y;
|
|
445
|
+
float br = uBorderRadius.z;
|
|
446
|
+
float bl = uBorderRadius.w;
|
|
447
|
+
float fTop = uSize.x / max(tl + tr, 0.0001);
|
|
448
|
+
float fBottom = uSize.x / max(bl + br, 0.0001);
|
|
449
|
+
float fLeft = uSize.y / max(tl + bl, 0.0001);
|
|
450
|
+
float fRight = uSize.y / max(tr + br, 0.0001);
|
|
451
|
+
float f = min(1.0, min(min(fTop, fBottom), min(fLeft, fRight)));
|
|
452
|
+
vec4 clampedRadius = uBorderRadius * f;
|
|
453
|
+
|
|
434
454
|
#INJECT_UV_MODIFIER
|
|
435
455
|
|
|
436
456
|
// color decision pipeline
|
|
@@ -444,9 +464,8 @@ void main() {
|
|
|
444
464
|
#INJECT_BASE_COLOR
|
|
445
465
|
|
|
446
466
|
// Hybrid SDF
|
|
447
|
-
vec2 xRadii = mix(
|
|
467
|
+
vec2 xRadii = mix(clampedRadius.xw, clampedRadius.yz, step(0.0, p.x));
|
|
448
468
|
float r = mix(xRadii.y, xRadii.x, step(0.0, p.y));
|
|
449
|
-
r = min(r, min(halfSize.x, halfSize.y));
|
|
450
469
|
|
|
451
470
|
float d = sdRoundedBox(p, halfSize, r);
|
|
452
471
|
|
|
@@ -484,88 +503,94 @@ uniform vec2 uTextureOffset;`, Ke = `vec2 screenUv = (vScreenPos.xy / vScreenPos
|
|
|
484
503
|
vec2 resultUv = screenUv;
|
|
485
504
|
|
|
486
505
|
`, Je = `vec4 texColor = texture2D(uTexture, resultUv);
|
|
487
|
-
baseColor = blendSrcOver(baseColor, texColor);`,
|
|
506
|
+
baseColor = blendSrcOver(baseColor, texColor);`, Ce = {
|
|
488
507
|
vertexShader: qe,
|
|
489
508
|
fragmentShader: $e
|
|
490
|
-
},
|
|
509
|
+
}, Te = {
|
|
491
510
|
declChunk: je,
|
|
492
511
|
uvChunk: Ke,
|
|
493
512
|
baseColorChunk: Je
|
|
494
513
|
};
|
|
495
|
-
function Qe(s, e, t,
|
|
496
|
-
var
|
|
497
|
-
const
|
|
514
|
+
function Qe(s, e, t, r = null, i) {
|
|
515
|
+
var E;
|
|
516
|
+
const l = r !== null || !!s.imageSrc;
|
|
498
517
|
let n = "";
|
|
499
518
|
const o = {};
|
|
500
|
-
if (
|
|
501
|
-
for (const [
|
|
502
|
-
typeof
|
|
503
|
-
`, o[
|
|
504
|
-
`, o[
|
|
505
|
-
`, o[
|
|
506
|
-
`, o[
|
|
507
|
-
`, o[
|
|
508
|
-
const c = (a ?
|
|
509
|
-
` + n,
|
|
510
|
-
`,
|
|
511
|
-
|
|
519
|
+
if (i != null && i.uniforms)
|
|
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, c = (l || a ? Te.declChunk : "") + `
|
|
528
|
+
` + n, d = `vec2 screenUv = (vScreenPos.xy / vScreenPos.w) * 0.5 + 0.5;
|
|
529
|
+
`, h = s.isTraveler ? `vec2 resultUv = screenUv;
|
|
530
|
+
` : `vec2 resultUv = vUv * uTextureRepeat + uTextureOffset;
|
|
531
|
+
`, u = l || a ? d + h + ((i == null ? void 0 : i.uvModifier) || "") : "", p = l || a ? Te.baseColorChunk : "", f = (i == null ? void 0 : i.colorModifier) || "", m = Ce.fragmentShader.replace("#INJECT_DECLARATIONS", c).replace("#INJECT_UV_MODIFIER", u).replace("#INJECT_BASE_COLOR", p).replace("#INJECT_COLOR_MODIFIER", f), x = ee(s.backgroundColor), S = ee(s.borderColor), L = {
|
|
532
|
+
uSize: { value: new y.Vector2(e, t) },
|
|
512
533
|
uBgColor: {
|
|
513
|
-
value: new
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
534
|
+
value: new y.Vector4(
|
|
535
|
+
x.color.r,
|
|
536
|
+
x.color.g,
|
|
537
|
+
x.color.b,
|
|
538
|
+
x.alpha
|
|
518
539
|
)
|
|
519
540
|
},
|
|
520
541
|
uBorderColor: {
|
|
521
|
-
value: new
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
542
|
+
value: new y.Vector4(
|
|
543
|
+
S.color.r,
|
|
544
|
+
S.color.g,
|
|
545
|
+
S.color.b,
|
|
546
|
+
S.alpha
|
|
526
547
|
)
|
|
527
548
|
},
|
|
528
|
-
uBorderRadius: { value: new
|
|
529
|
-
uBorderWidth: { value:
|
|
530
|
-
uOpacity: { value: (
|
|
549
|
+
uBorderRadius: { value: new y.Vector4(0, 0, 0, 0) },
|
|
550
|
+
uBorderWidth: { value: J(s.borderWidth) },
|
|
551
|
+
uOpacity: { value: (E = s.opacity) != null ? E : 1 },
|
|
531
552
|
uTexture: { value: null },
|
|
532
|
-
uTextureRepeat: { value: new
|
|
533
|
-
uTextureOffset: { value: new
|
|
553
|
+
uTextureRepeat: { value: new y.Vector2(1, 1) },
|
|
554
|
+
uTextureOffset: { value: new y.Vector2(0, 0) },
|
|
534
555
|
uGradientCount: { value: 0 },
|
|
535
556
|
uGradientAngle: { value: 0 },
|
|
536
557
|
uGradientColors: {
|
|
537
|
-
value: Array.from({ length: 8 }, () => new
|
|
558
|
+
value: Array.from({ length: 8 }, () => new y.Vector4(0, 0, 0, 0))
|
|
538
559
|
},
|
|
539
560
|
uGradientStops: { value: new Float32Array(8) }
|
|
540
561
|
};
|
|
541
|
-
Me(
|
|
542
|
-
const
|
|
543
|
-
uniforms: q(q({},
|
|
544
|
-
vertexShader:
|
|
545
|
-
fragmentShader:
|
|
562
|
+
Me(L.uBorderRadius.value, s.borderRadius, Math.min(e, t)), l && (L.uTexture.value = r);
|
|
563
|
+
const T = new y.ShaderMaterial({
|
|
564
|
+
uniforms: q(q({}, L), o),
|
|
565
|
+
vertexShader: Ce.vertexShader,
|
|
566
|
+
fragmentShader: m,
|
|
546
567
|
transparent: !0,
|
|
547
|
-
side:
|
|
568
|
+
side: y.FrontSide
|
|
548
569
|
// for better performance
|
|
549
570
|
});
|
|
550
|
-
return s.backgroundImage && le(
|
|
571
|
+
return s.backgroundImage && le(T, { backgroundImage: s.backgroundImage }), T;
|
|
551
572
|
}
|
|
552
|
-
function Ze(s, e, t,
|
|
553
|
-
const
|
|
573
|
+
function Ze(s, e, t, r, i) {
|
|
574
|
+
const l = J(e.borderWidth);
|
|
554
575
|
le(s, {
|
|
555
576
|
width: t,
|
|
556
|
-
height:
|
|
577
|
+
height: r,
|
|
557
578
|
borderRadius: e.borderRadius,
|
|
558
|
-
borderWidth:
|
|
579
|
+
borderWidth: l,
|
|
559
580
|
backgroundColor: e.backgroundColor,
|
|
560
581
|
borderColor: e.borderColor,
|
|
561
582
|
opacity: e.opacity,
|
|
562
|
-
texture:
|
|
583
|
+
texture: i,
|
|
563
584
|
backgroundImage: e.backgroundImage
|
|
564
585
|
});
|
|
565
586
|
}
|
|
566
587
|
function le(s, e) {
|
|
567
|
-
var
|
|
568
|
-
if (e.width !== void 0 && e.height !== void 0 && s.uniforms.uSize.value.set(e.width, e.height), e.borderRadius !== void 0
|
|
588
|
+
var r, i, l;
|
|
589
|
+
if (e.width !== void 0 && e.height !== void 0 && s.uniforms.uSize.value.set(e.width, e.height), e.borderRadius !== void 0) {
|
|
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
|
+
Me(s.uniforms.uBorderRadius.value, e.borderRadius, n);
|
|
592
|
+
}
|
|
593
|
+
if (e.borderWidth !== void 0 && (s.uniforms.uBorderWidth.value = e.borderWidth), e.backgroundColor !== void 0)
|
|
569
594
|
if (Array.isArray(e.backgroundColor)) {
|
|
570
595
|
const n = s.uniforms.uBgColor.value.w;
|
|
571
596
|
s.uniforms.uBgColor.value.set(
|
|
@@ -575,7 +600,7 @@ function le(s, e) {
|
|
|
575
600
|
n
|
|
576
601
|
);
|
|
577
602
|
} else if (typeof e.backgroundColor == "string") {
|
|
578
|
-
const n =
|
|
603
|
+
const n = ee(e.backgroundColor);
|
|
579
604
|
s.uniforms.uBgColor.value.set(
|
|
580
605
|
n.color.r,
|
|
581
606
|
n.color.g,
|
|
@@ -601,7 +626,7 @@ function le(s, e) {
|
|
|
601
626
|
n
|
|
602
627
|
);
|
|
603
628
|
} else if (typeof e.borderColor == "string") {
|
|
604
|
-
const n =
|
|
629
|
+
const n = ee(e.borderColor);
|
|
605
630
|
s.uniforms.uBorderColor.value.set(
|
|
606
631
|
n.color.r,
|
|
607
632
|
n.color.g,
|
|
@@ -618,11 +643,11 @@ function le(s, e) {
|
|
|
618
643
|
);
|
|
619
644
|
}
|
|
620
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);
|
|
621
|
-
const t = e.texture !== void 0 ? e.texture : (
|
|
646
|
+
const t = e.texture !== void 0 ? e.texture : (r = s.uniforms.uTexture) == null ? void 0 : r.value;
|
|
622
647
|
if (t && (t.image instanceof ImageBitmap || t.image instanceof HTMLImageElement || t.image instanceof HTMLCanvasElement)) {
|
|
623
|
-
const n = t.image.naturalWidth || t.image.videoWidth || t.image.width, o = t.image.naturalHeight || t.image.videoHeight || t.image.height,
|
|
624
|
-
if (n && o &&
|
|
625
|
-
const d = n / o, h =
|
|
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, c = (l = e.height) != null ? l : s.uniforms.uSize.value.y;
|
|
649
|
+
if (n && o && a && c) {
|
|
650
|
+
const d = n / o, h = a / c;
|
|
626
651
|
if (d > h) {
|
|
627
652
|
const u = h / d;
|
|
628
653
|
s.uniforms.uTextureRepeat.value.set(u, 1), s.uniforms.uTextureOffset.value.set((1 - u) / 2, 0);
|
|
@@ -639,13 +664,13 @@ function le(s, e) {
|
|
|
639
664
|
s.uniforms.uGradientCount.value = n.stops.length, s.uniforms.uGradientAngle.value = n.angle;
|
|
640
665
|
for (let o = 0; o < 8; o++)
|
|
641
666
|
if (o < n.stops.length) {
|
|
642
|
-
const
|
|
667
|
+
const a = n.stops[o];
|
|
643
668
|
s.uniforms.uGradientColors.value[o].set(
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
), s.uniforms.uGradientStops.value[o] =
|
|
669
|
+
a.color.r,
|
|
670
|
+
a.color.g,
|
|
671
|
+
a.color.b,
|
|
672
|
+
a.alpha
|
|
673
|
+
), s.uniforms.uGradientStops.value[o] = a.stop;
|
|
649
674
|
} else
|
|
650
675
|
s.uniforms.uGradientColors.value[o].set(0, 0, 0, 0), s.uniforms.uGradientStops.value[o] = 1;
|
|
651
676
|
} else
|
|
@@ -654,8 +679,8 @@ function le(s, e) {
|
|
|
654
679
|
for (const n of Object.keys(e))
|
|
655
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]);
|
|
656
681
|
}
|
|
657
|
-
function Me(s, e) {
|
|
658
|
-
var
|
|
682
|
+
function Me(s, e, t = 0) {
|
|
683
|
+
var a, c, d, h;
|
|
659
684
|
if (e == null) {
|
|
660
685
|
s.set(0, 0, 0, 0);
|
|
661
686
|
return;
|
|
@@ -668,37 +693,37 @@ function Me(s, e) {
|
|
|
668
693
|
s.set(e[0], e[1], e[2], e[3]);
|
|
669
694
|
return;
|
|
670
695
|
}
|
|
671
|
-
const
|
|
672
|
-
s.set(i,
|
|
696
|
+
const r = e.split("/")[0].trim().split(/\s+/), i = J(r[0], t), l = J((a = r[1]) != null ? a : r[0], t), n = J((c = r[2]) != null ? c : r[0], t), o = J((h = (d = r[3]) != null ? d : r[1]) != null ? h : r[0], t);
|
|
697
|
+
s.set(i, l, n, o);
|
|
673
698
|
}
|
|
674
|
-
const
|
|
675
|
-
create(s, e, t,
|
|
699
|
+
const z = {
|
|
700
|
+
create(s, e, t, r, i, l = 2, n = null, o) {
|
|
676
701
|
return s === "BOX" ? Qe(
|
|
677
702
|
e,
|
|
678
|
-
i,
|
|
679
703
|
r,
|
|
704
|
+
i,
|
|
680
705
|
n,
|
|
681
706
|
o
|
|
682
707
|
) : s === "TEXT" ? new He(
|
|
683
708
|
t || "",
|
|
684
709
|
e,
|
|
685
|
-
i,
|
|
686
710
|
r,
|
|
687
|
-
|
|
688
|
-
|
|
711
|
+
i,
|
|
712
|
+
l
|
|
713
|
+
) : new y.MeshBasicMaterial({ visible: !1 });
|
|
689
714
|
},
|
|
690
|
-
update(s, e, t,
|
|
715
|
+
update(s, e, t, r, i, l, n = 2, o) {
|
|
691
716
|
e === "BOX" ? Ze(
|
|
692
717
|
s,
|
|
693
718
|
t,
|
|
694
|
-
|
|
695
|
-
|
|
719
|
+
i,
|
|
720
|
+
l,
|
|
696
721
|
o
|
|
697
722
|
) : e === "TEXT" && s.updateText(
|
|
698
|
-
|
|
723
|
+
r || "",
|
|
699
724
|
t,
|
|
700
|
-
|
|
701
|
-
|
|
725
|
+
i,
|
|
726
|
+
l,
|
|
702
727
|
n
|
|
703
728
|
);
|
|
704
729
|
},
|
|
@@ -714,10 +739,10 @@ class et {
|
|
|
714
739
|
g(this, "elementUrls", /* @__PURE__ */ new WeakMap());
|
|
715
740
|
g(this, "onUpdate");
|
|
716
741
|
this.onUpdate = e, t && (this.observer = new IntersectionObserver(
|
|
717
|
-
(
|
|
718
|
-
for (const
|
|
719
|
-
const
|
|
720
|
-
|
|
742
|
+
(r) => {
|
|
743
|
+
for (const i of r) {
|
|
744
|
+
const l = i.target;
|
|
745
|
+
i.isIntersecting ? this.loadTexture(l) : this.disposeTexture(l);
|
|
721
746
|
}
|
|
722
747
|
},
|
|
723
748
|
{ rootMargin: "300px" }
|
|
@@ -732,31 +757,31 @@ class et {
|
|
|
732
757
|
e.nodeType === Node.ELEMENT_NODE && this.observer && this.observer.unobserve(e), this.disposeTexture(e), this.elementUrls.delete(e), this.loadStatus.delete(e);
|
|
733
758
|
}
|
|
734
759
|
loadTexture(e) {
|
|
735
|
-
return
|
|
760
|
+
return we(this, null, function* () {
|
|
736
761
|
if (this.loadStatus.get(e) || this.textures.has(e))
|
|
737
762
|
return;
|
|
738
763
|
const t = this.elementUrls.get(e);
|
|
739
764
|
if (t) {
|
|
740
765
|
this.loadStatus.set(e, !0);
|
|
741
766
|
try {
|
|
742
|
-
let
|
|
767
|
+
let r;
|
|
743
768
|
if (t.startsWith("data:image/svg+xml"))
|
|
744
|
-
|
|
769
|
+
r = yield new Promise((l, n) => {
|
|
745
770
|
const o = new Image();
|
|
746
|
-
o.onload = () =>
|
|
771
|
+
o.onload = () => l(o), o.onerror = n, o.src = t;
|
|
747
772
|
});
|
|
748
773
|
else {
|
|
749
774
|
const n = yield (yield fetch(t)).blob();
|
|
750
|
-
|
|
775
|
+
r = yield createImageBitmap(n, { imageOrientation: "flipY" });
|
|
751
776
|
}
|
|
752
777
|
if (this.elementUrls.get(e) !== t) {
|
|
753
|
-
"close" in
|
|
778
|
+
"close" in r && r.close();
|
|
754
779
|
return;
|
|
755
780
|
}
|
|
756
|
-
const
|
|
757
|
-
|
|
758
|
-
} catch (
|
|
759
|
-
console.warn("[MirageEngine] Failed to load texture:", t,
|
|
781
|
+
const i = new y.Texture(r);
|
|
782
|
+
r instanceof HTMLImageElement || (i.flipY = !1), i.colorSpace = y.LinearSRGBColorSpace, i.needsUpdate = !0, this.textures.set(e, i), this.onUpdate(e, i);
|
|
783
|
+
} catch (r) {
|
|
784
|
+
console.warn("[MirageEngine] Failed to load texture:", t, r);
|
|
760
785
|
} finally {
|
|
761
786
|
this.elementUrls.has(e) && this.loadStatus.set(e, !1);
|
|
762
787
|
}
|
|
@@ -775,7 +800,7 @@ class et {
|
|
|
775
800
|
}
|
|
776
801
|
}
|
|
777
802
|
class tt {
|
|
778
|
-
constructor(e, t,
|
|
803
|
+
constructor(e, t, r, i) {
|
|
779
804
|
g(this, "canvas");
|
|
780
805
|
g(this, "scene");
|
|
781
806
|
g(this, "camera");
|
|
@@ -793,50 +818,50 @@ class tt {
|
|
|
793
818
|
g(this, "registry");
|
|
794
819
|
g(this, "targetRect");
|
|
795
820
|
g(this, "travelersByLayer", Array.from(
|
|
796
|
-
{ length:
|
|
821
|
+
{ length: O.MAX_LAYERS },
|
|
797
822
|
() => /* @__PURE__ */ new Set()
|
|
798
823
|
));
|
|
799
824
|
g(this, "textureManager");
|
|
800
825
|
// private meshMap: Map<HTMLElement, THREE.Mesh> = new Map();
|
|
801
826
|
g(this, "fixedMeshes", /* @__PURE__ */ new Set());
|
|
802
|
-
var o,
|
|
803
|
-
this.target = e, this.mountContainer =
|
|
827
|
+
var o, a, c, 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 = (c = t.travelerClipArea) != null ? c : 1, this.targetLayer = (d = t.layer) != null ? d : "base", this.textureManager = new et((u, p) => {
|
|
804
829
|
const f = this.registry.get(u);
|
|
805
|
-
f && f.material instanceof
|
|
806
|
-
}, this.isViewport), this.canvas = document.createElement("canvas"), this.scene = new
|
|
807
|
-
const
|
|
808
|
-
this.camera = new
|
|
809
|
-
|
|
810
|
-
|
|
830
|
+
f && f.material instanceof y.ShaderMaterial && z.forceUpdateUniforms(f.material, { texture: p });
|
|
831
|
+
}, this.isViewport), this.canvas = document.createElement("canvas"), this.scene = new y.Scene(), this.targetRect = this.target.getBoundingClientRect();
|
|
832
|
+
const l = this.isViewport ? window.innerWidth + this.overscan * 2 : this.targetRect.width, n = this.isViewport ? window.innerHeight + this.overscan * 2 : this.targetRect.height;
|
|
833
|
+
this.camera = new y.OrthographicCamera(
|
|
834
|
+
l / -2,
|
|
835
|
+
l / 2,
|
|
811
836
|
n / 2,
|
|
812
837
|
n / -2,
|
|
813
838
|
1,
|
|
814
839
|
1e3
|
|
815
|
-
), this.camera.position.z = 100, this.camera.layers.set(this.getSceneLayer()), this.renderer = new
|
|
840
|
+
), this.camera.position.z = 100, this.camera.layers.set(this.getSceneLayer()), this.renderer = new y.WebGLRenderer({
|
|
816
841
|
canvas: this.canvas,
|
|
817
842
|
alpha: !0,
|
|
818
843
|
antialias: !0
|
|
819
844
|
// [new]
|
|
820
845
|
// premultipliedAlpha: true
|
|
821
|
-
}),
|
|
846
|
+
}), y.ColorManagement.enabled = !1, this.renderer.outputColorSpace = y.LinearSRGBColorSpace, this.renderer.setPixelRatio(window.devicePixelRatio), this.renderer.setSize(l, n), this.applyTextQuality((h = t.quality) != null ? h : "medium");
|
|
822
847
|
}
|
|
823
848
|
get isViewport() {
|
|
824
849
|
return this.mode === "overlay" && this.canvasSize === "viewport";
|
|
825
850
|
}
|
|
826
851
|
getSceneLayer() {
|
|
827
|
-
return typeof this.targetLayer == "number" ? this.targetLayer : this.targetLayer === "selected" ?
|
|
852
|
+
return typeof this.targetLayer == "number" ? this.targetLayer : this.targetLayer === "selected" ? A.SELECTED : A.BASE;
|
|
828
853
|
}
|
|
829
854
|
createRenderTarget() {
|
|
830
|
-
for (let e = 0; e <
|
|
831
|
-
const t = this.isViewport ? window.innerWidth + this.overscan * 2 : this.targetRect.width,
|
|
855
|
+
for (let e = 0; e < O.MAX_LAYERS; e++) {
|
|
856
|
+
const t = this.isViewport ? window.innerWidth + this.overscan * 2 : this.targetRect.width, r = this.isViewport ? window.innerHeight + this.overscan * 2 : this.targetRect.height;
|
|
832
857
|
this.renderTargets.push(
|
|
833
|
-
new
|
|
858
|
+
new y.WebGLRenderTarget(
|
|
834
859
|
t * this.qualityFactor,
|
|
835
|
-
|
|
860
|
+
r * this.qualityFactor,
|
|
836
861
|
{
|
|
837
|
-
minFilter:
|
|
838
|
-
magFilter:
|
|
839
|
-
format:
|
|
862
|
+
minFilter: y.LinearFilter,
|
|
863
|
+
magFilter: y.LinearFilter,
|
|
864
|
+
format: y.RGBAFormat,
|
|
840
865
|
stencilBuffer: !1,
|
|
841
866
|
depthBuffer: !0
|
|
842
867
|
}
|
|
@@ -872,15 +897,15 @@ class tt {
|
|
|
872
897
|
this.canvas.style.width = `${e}px`, this.canvas.style.height = `${t}px`, this.mode === "duplicate" ? (this.canvas.style.position = "", this.canvas.style.top = "", this.canvas.style.left = "", this.canvas.style.display = "block") : (this.canvas.style.position = this.isViewport ? "fixed" : "absolute", this.canvas.style.top = this.isViewport ? `-${this.overscan}px` : `${this.target.offsetTop}px`, this.canvas.style.left = this.isViewport ? `-${this.overscan}px` : `${this.target.offsetLeft}px`, this.canvas.style.display = "block");
|
|
873
898
|
}
|
|
874
899
|
updateUniforms(e, t) {
|
|
875
|
-
const
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
900
|
+
const r = this.registry.get(e);
|
|
901
|
+
r && (r.traverse((i) => {
|
|
902
|
+
i.isMesh && i.material && z.forceUpdateUniforms(
|
|
903
|
+
i.material,
|
|
879
904
|
t
|
|
880
905
|
);
|
|
881
|
-
}),
|
|
882
|
-
|
|
883
|
-
|
|
906
|
+
}), r.userData.nativeMesh && r.userData.nativeMesh.traverse((i) => {
|
|
907
|
+
i.isMesh && i.material && z.forceUpdateUniforms(
|
|
908
|
+
i.material,
|
|
884
909
|
t
|
|
885
910
|
);
|
|
886
911
|
}));
|
|
@@ -890,13 +915,13 @@ class tt {
|
|
|
890
915
|
}
|
|
891
916
|
setSize(e, t) {
|
|
892
917
|
this.renderer.setSize(e, t);
|
|
893
|
-
for (const
|
|
894
|
-
|
|
918
|
+
for (const r of this.renderTargets)
|
|
919
|
+
r.setSize(e * this.qualityFactor, t * this.qualityFactor);
|
|
895
920
|
this.camera.left = e / -2, this.camera.right = e / 2, this.camera.top = t / 2, this.camera.bottom = t / -2, this.camera.updateProjectionMatrix();
|
|
896
921
|
}
|
|
897
922
|
syncScene(e, t) {
|
|
898
|
-
const
|
|
899
|
-
|
|
923
|
+
const r = this.target.getBoundingClientRect(), i = this.isViewport ? window.innerWidth + this.overscan * 2 : r.width, l = 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(l - o) > 0.1, c = 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, l), this.updateCanvasLayout()) : c ? (this.targetRect = r, this.updateCanvasLayout()) : this.targetRect = r, this.renderOrder = 0, this.reconcileNode(e), t.size > 0 && t.forEach((d) => {
|
|
900
925
|
const h = this.registry.get(d);
|
|
901
926
|
if (h) {
|
|
902
927
|
this.scene.remove(h);
|
|
@@ -905,7 +930,7 @@ class tt {
|
|
|
905
930
|
this.fixedMeshes.delete(h), h.geometry.dispose(), h.userData.nativeMesh && (this.scene.remove(h.userData.nativeMesh), Array.isArray(h.userData.nativeMesh.material) ? h.userData.nativeMesh.material.forEach(
|
|
906
931
|
(u) => u.dispose()
|
|
907
932
|
) : h.userData.nativeMesh.material.dispose(), h.userData.nativeMesh.geometry.dispose()), h.traverse((u) => {
|
|
908
|
-
u instanceof
|
|
933
|
+
u instanceof y.Mesh && (u.geometry && u.geometry.dispose(), u.material && (Array.isArray(u.material) ? u.material.forEach((p) => p.dispose()) : u.material.dispose()));
|
|
909
934
|
}), this.registry.remove(d), this.textureManager.unregister(d);
|
|
910
935
|
}
|
|
911
936
|
});
|
|
@@ -915,31 +940,31 @@ class tt {
|
|
|
915
940
|
// => 이후 activeElements를 이용하여 mesh를 정리!!!+ map에서도 삭제
|
|
916
941
|
// private reconcileNode(node: SceneNode, activeElements: Set<HTMLElement>) {
|
|
917
942
|
reconcileNode(e) {
|
|
918
|
-
var
|
|
943
|
+
var i, l;
|
|
919
944
|
let t = this.registry.get(e.element);
|
|
920
|
-
const
|
|
921
|
-
if (t && t.userData.shaderHash !==
|
|
922
|
-
const
|
|
945
|
+
const r = JSON.stringify(e.shaderHooks || null);
|
|
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 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 = z.create(
|
|
923
948
|
"BOX",
|
|
924
949
|
e.styles,
|
|
925
950
|
"",
|
|
926
951
|
e.rect.width,
|
|
927
952
|
e.rect.height,
|
|
928
953
|
this.qualityFactor,
|
|
929
|
-
|
|
954
|
+
o,
|
|
930
955
|
e.shaderHooks
|
|
931
956
|
);
|
|
932
|
-
t = new
|
|
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;
|
|
933
958
|
}
|
|
934
|
-
if (this.updateMeshProperties(t, e), this.updateMeshLayers(t, e), e.isTraveler)
|
|
935
|
-
for (let
|
|
936
|
-
|
|
959
|
+
if ((l = e.nativeStyles) != null && l.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);
|
|
937
962
|
else
|
|
938
|
-
for (const
|
|
939
|
-
|
|
963
|
+
for (const n of this.travelersByLayer)
|
|
964
|
+
n.delete(t);
|
|
940
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")
|
|
941
|
-
for (const
|
|
942
|
-
this.reconcileNode(
|
|
966
|
+
for (const n of e.children)
|
|
967
|
+
this.reconcileNode(n);
|
|
943
968
|
else
|
|
944
969
|
e.type === "TEXT" && (this.reconcileTextChild(t, e, !1), t.userData.nativeMesh && e.nativeStyles && this.reconcileTextChild(
|
|
945
970
|
t.userData.nativeMesh,
|
|
@@ -947,213 +972,229 @@ class tt {
|
|
|
947
972
|
!0
|
|
948
973
|
));
|
|
949
974
|
}
|
|
950
|
-
reconcileTextChild(e, t,
|
|
951
|
-
var
|
|
952
|
-
const
|
|
975
|
+
reconcileTextChild(e, t, r) {
|
|
976
|
+
var c;
|
|
977
|
+
const i = t.textLines || [
|
|
953
978
|
{ text: t.textContent || "", rect: t.rect }
|
|
954
|
-
],
|
|
979
|
+
], l = r ? t.nativeStyles : t.textStyles, n = JSON.stringify(l) + t.textContent + i.map((d) => d.text).join("|"), o = (c = e.userData) == null ? void 0 : c.textChildStyleHash;
|
|
955
980
|
if (t.dirtyMask & ce || n !== o) {
|
|
956
981
|
e.children.filter(
|
|
957
982
|
(f) => f.name.startsWith("TEXT_CHILD")
|
|
958
983
|
).forEach((f) => {
|
|
959
|
-
var
|
|
984
|
+
var x;
|
|
960
985
|
const m = f;
|
|
961
|
-
(
|
|
986
|
+
(x = m.material.map) == null || x.dispose(), m.geometry.dispose(), e.remove(m);
|
|
962
987
|
});
|
|
963
988
|
const h = t.rect, u = h.x + h.width / 2, p = h.y + h.height / 2;
|
|
964
|
-
|
|
965
|
-
const
|
|
989
|
+
i.forEach((f, m) => {
|
|
990
|
+
const x = z.create(
|
|
966
991
|
"TEXT",
|
|
967
|
-
|
|
992
|
+
l,
|
|
968
993
|
f.text,
|
|
969
994
|
f.rect.width,
|
|
970
995
|
f.rect.height,
|
|
971
996
|
this.qualityFactor
|
|
972
|
-
),
|
|
973
|
-
|
|
974
|
-
const
|
|
975
|
-
|
|
976
|
-
const
|
|
977
|
-
|
|
978
|
-
t.rect.width === 0 ? 0 :
|
|
979
|
-
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 : f.rect.width / t.rect.width, E = t.rect.height === 0 ? 1 : f.rect.height / t.rect.height;
|
|
1000
|
+
L.scale.set(T, E, 1);
|
|
1001
|
+
const b = f.rect.x + f.rect.width / 2, w = f.rect.y + f.rect.height / 2, I = b - u, U = -(w - p);
|
|
1002
|
+
L.position.set(
|
|
1003
|
+
t.rect.width === 0 ? 0 : I / t.rect.width,
|
|
1004
|
+
t.rect.height === 0 ? 0 : U / t.rect.height,
|
|
980
1005
|
5e-3
|
|
981
|
-
), e.add(
|
|
1006
|
+
), e.add(L);
|
|
982
1007
|
}), e.userData.textChildStyleHash = n;
|
|
983
1008
|
}
|
|
984
1009
|
e.children.forEach((d) => {
|
|
985
1010
|
if (!d.name.startsWith("TEXT_CHILD"))
|
|
986
1011
|
return;
|
|
987
|
-
const h = d, u = t.visibility & W ?
|
|
988
|
-
if (h.layers.set(u), t.visibility &
|
|
989
|
-
if (!
|
|
1012
|
+
const h = d, u = t.visibility & W ? A.BASE : A.HIDDEN;
|
|
1013
|
+
if (h.layers.set(u), t.visibility & K && h.layers.enable(A.SELECTED), t.visibility & W)
|
|
1014
|
+
if (!r && t.nativeLayer !== void 0 && t.nativeStyles !== void 0)
|
|
990
1015
|
for (let p = t.captureLayer; p < t.nativeLayer; p++)
|
|
991
|
-
h.layers.enable(
|
|
992
|
-
else if (
|
|
993
|
-
for (let p = Math.max(t.captureLayer, t.nativeLayer); p <=
|
|
994
|
-
h.layers.enable(
|
|
1016
|
+
h.layers.enable(A.getCaptureLayer(p));
|
|
1017
|
+
else if (r && t.nativeLayer !== void 0)
|
|
1018
|
+
for (let p = Math.max(t.captureLayer, t.nativeLayer); p <= O.MAX_LAYERS + 1; p++)
|
|
1019
|
+
h.layers.enable(A.getCaptureLayer(p));
|
|
995
1020
|
else
|
|
996
|
-
for (let p = t.captureLayer; p <=
|
|
997
|
-
h.layers.enable(
|
|
1021
|
+
for (let p = t.captureLayer; p <= O.MAX_LAYERS + 1; p++)
|
|
1022
|
+
h.layers.enable(A.getCaptureLayer(p));
|
|
998
1023
|
});
|
|
999
1024
|
}
|
|
1000
1025
|
updateMeshProperties(e, t) {
|
|
1001
|
-
var
|
|
1002
|
-
const { rect:
|
|
1003
|
-
e.material = e.userData.baseMaterial, e.scale.set(
|
|
1004
|
-
x:
|
|
1005
|
-
y:
|
|
1006
|
-
width:
|
|
1007
|
-
height:
|
|
1026
|
+
var T, E, b;
|
|
1027
|
+
const { rect: r, styles: i } = t, l = this.renderer.getPixelRatio(), n = this.renderer.domElement.width / l, o = this.renderer.domElement.height / l;
|
|
1028
|
+
e.material = e.userData.baseMaterial, e.scale.set(r.width, r.height, 1), e.userData.domRect = {
|
|
1029
|
+
x: r.x,
|
|
1030
|
+
y: r.y,
|
|
1031
|
+
width: r.width,
|
|
1032
|
+
height: r.height
|
|
1008
1033
|
};
|
|
1009
|
-
const
|
|
1034
|
+
const a = 1e-3;
|
|
1010
1035
|
this.renderOrder++;
|
|
1011
|
-
const
|
|
1036
|
+
const c = this.targetRect.left + window.scrollX, d = this.targetRect.top + window.scrollY;
|
|
1012
1037
|
let h, u;
|
|
1013
1038
|
if (this.isViewport)
|
|
1014
|
-
h =
|
|
1039
|
+
h = r.x - window.innerWidth / 2 + r.width / 2, u = -r.y + window.innerHeight / 2 - r.height / 2;
|
|
1015
1040
|
else {
|
|
1016
|
-
const
|
|
1017
|
-
h =
|
|
1041
|
+
const w = r.x - c, I = r.y - d;
|
|
1042
|
+
h = w - n / 2 + r.width / 2, u = -I + o / 2 - r.height / 2;
|
|
1018
1043
|
}
|
|
1019
1044
|
e.position.set(
|
|
1020
1045
|
h,
|
|
1021
1046
|
u,
|
|
1022
|
-
|
|
1047
|
+
i.zIndex + this.renderOrder * a
|
|
1023
1048
|
);
|
|
1024
|
-
const p =
|
|
1025
|
-
e.userData.basePosition = { x: h, y: u }, e.userData.originalBasePosition = { x: h, y: u }, e.userData.baseSize = { width:
|
|
1026
|
-
const m = t.element.nodeType === Node.TEXT_NODE ? t.element.parentElement : t.element,
|
|
1027
|
-
let
|
|
1028
|
-
if (
|
|
1029
|
-
const
|
|
1030
|
-
|
|
1049
|
+
const p = r.x, f = r.y;
|
|
1050
|
+
e.userData.basePosition = { x: h, y: u }, e.userData.originalBasePosition = { x: h, y: u }, e.userData.baseSize = { width: r.width, height: r.height }, e.userData.baseDOM = { x: p, y: f }, e.userData.isFixed = t.isFixed, e.userData.initialScroll = { x: window.scrollX, y: window.scrollY };
|
|
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
|
+
if (x.transform && x.transform !== "none") {
|
|
1054
|
+
const w = new DOMMatrix(x.transform);
|
|
1055
|
+
S = w.m41, L = w.m42;
|
|
1031
1056
|
}
|
|
1032
|
-
if (e.userData.baseTransform = { x:
|
|
1057
|
+
if (e.userData.baseTransform = { x: S, y: L }, delete e.userData.originRatioX, delete e.userData.originRatioY, z.update(
|
|
1033
1058
|
e.userData.baseMaterial,
|
|
1034
1059
|
"BOX",
|
|
1035
|
-
|
|
1060
|
+
i,
|
|
1036
1061
|
"",
|
|
1037
|
-
|
|
1038
|
-
|
|
1062
|
+
r.width,
|
|
1063
|
+
r.height,
|
|
1039
1064
|
this.qualityFactor,
|
|
1040
|
-
t.isTraveler ? (
|
|
1065
|
+
t.isTraveler ? (T = this.renderTargets[t.captureLayer - 2]) == null ? void 0 : T.texture : this.textureManager.get(t.element)
|
|
1041
1066
|
), t.nativeStyles && t.nativeRect) {
|
|
1042
1067
|
if (!e.userData.nativeMesh) {
|
|
1043
|
-
const
|
|
1068
|
+
const B = z.create(
|
|
1044
1069
|
"BOX",
|
|
1045
1070
|
t.nativeStyles,
|
|
1046
1071
|
"",
|
|
1047
1072
|
t.nativeRect.width,
|
|
1048
1073
|
t.nativeRect.height,
|
|
1049
1074
|
this.qualityFactor,
|
|
1050
|
-
t.isTraveler ? (
|
|
1075
|
+
t.isTraveler ? (E = this.renderTargets[t.captureLayer - 2]) == null ? void 0 : E.texture : this.textureManager.get(t.element),
|
|
1051
1076
|
t.shaderHooks
|
|
1052
|
-
),
|
|
1053
|
-
t.type === "TEXT" && (
|
|
1077
|
+
), G = new y.Mesh(e.geometry, B);
|
|
1078
|
+
t.type === "TEXT" && (G.name = "BG_MESH"), this.scene.add(G), e.userData.nativeMesh = G;
|
|
1054
1079
|
}
|
|
1055
|
-
const
|
|
1056
|
-
let
|
|
1080
|
+
const w = e.userData.nativeMesh;
|
|
1081
|
+
let I, U;
|
|
1057
1082
|
if (this.isViewport)
|
|
1058
|
-
|
|
1083
|
+
I = t.nativeRect.x - window.innerWidth / 2 + t.nativeRect.width / 2, U = -t.nativeRect.y + window.innerHeight / 2 - t.nativeRect.height / 2;
|
|
1059
1084
|
else {
|
|
1060
|
-
const
|
|
1061
|
-
|
|
1085
|
+
const B = t.nativeRect.x - c, G = t.nativeRect.y - d;
|
|
1086
|
+
I = B - n / 2 + t.nativeRect.width / 2, U = -G + o / 2 - t.nativeRect.height / 2;
|
|
1062
1087
|
}
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
t.nativeStyles.zIndex + this.renderOrder *
|
|
1067
|
-
),
|
|
1068
|
-
|
|
1088
|
+
w.scale.set(t.nativeRect.width, t.nativeRect.height, 1), w.position.set(
|
|
1089
|
+
I,
|
|
1090
|
+
U,
|
|
1091
|
+
t.nativeStyles.zIndex + this.renderOrder * a
|
|
1092
|
+
), z.update(
|
|
1093
|
+
w.material,
|
|
1069
1094
|
"BOX",
|
|
1070
1095
|
t.nativeStyles,
|
|
1071
1096
|
"",
|
|
1072
1097
|
t.nativeRect.width,
|
|
1073
1098
|
t.nativeRect.height,
|
|
1074
1099
|
this.qualityFactor,
|
|
1075
|
-
t.isTraveler ? (
|
|
1100
|
+
t.isTraveler ? (b = this.renderTargets[t.captureLayer - 2]) == null ? void 0 : b.texture : this.textureManager.get(t.element)
|
|
1076
1101
|
);
|
|
1077
1102
|
} else
|
|
1078
|
-
e.userData.nativeMesh && (this.scene.remove(e.userData.nativeMesh), e.userData.nativeMesh.material instanceof
|
|
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);
|
|
1079
1104
|
}
|
|
1080
1105
|
updateMeshLayers(e, t) {
|
|
1081
|
-
const
|
|
1082
|
-
if (e.layers.set(
|
|
1083
|
-
const
|
|
1084
|
-
if (
|
|
1085
|
-
for (let
|
|
1086
|
-
e.layers.enable(
|
|
1087
|
-
for (let
|
|
1088
|
-
|
|
1106
|
+
const r = t.visibility & W ? A.BASE : A.HIDDEN;
|
|
1107
|
+
if (e.layers.set(r), t.visibility & K && e.layers.enable(A.SELECTED), e.userData.nativeMesh && t.nativeLayer !== void 0) {
|
|
1108
|
+
const i = e.userData.nativeMesh;
|
|
1109
|
+
if (i.layers.set(A.HIDDEN), t.visibility & W) {
|
|
1110
|
+
for (let l = t.captureLayer; l < t.nativeLayer; l++)
|
|
1111
|
+
e.layers.enable(A.getCaptureLayer(l));
|
|
1112
|
+
for (let l = Math.max(t.captureLayer, t.nativeLayer); l <= O.MAX_LAYERS + 1; l++)
|
|
1113
|
+
i.layers.enable(A.getCaptureLayer(l));
|
|
1089
1114
|
}
|
|
1090
1115
|
} else if (t.visibility & W)
|
|
1091
|
-
for (let
|
|
1092
|
-
e.layers.enable(
|
|
1116
|
+
for (let i = t.captureLayer; i <= O.MAX_LAYERS + 1; i++)
|
|
1117
|
+
e.layers.enable(A.getCaptureLayer(i));
|
|
1093
1118
|
}
|
|
1094
|
-
captureRenderTarget(e, t,
|
|
1095
|
-
if (e.size === 0 || !
|
|
1119
|
+
captureRenderTarget(e, t, r) {
|
|
1120
|
+
if (e.size === 0 || !r)
|
|
1096
1121
|
return;
|
|
1097
|
-
const
|
|
1098
|
-
this.renderer.getClearColor(
|
|
1099
|
-
const n = new
|
|
1122
|
+
const i = new y.Color(), l = this.renderer.getClearAlpha();
|
|
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(), o = this.isViewport ? window.innerWidth + this.overscan * 2 : this.targetRect.width, a = this.isViewport ? window.innerHeight + this.overscan * 2 : this.targetRect.height, c = this.renderer.getPixelRatio();
|
|
1100
1125
|
for (const d of e) {
|
|
1101
1126
|
n.setFromMatrixPosition(d.matrixWorld), n.project(this.camera);
|
|
1102
|
-
const h = (n.x + 1) / 2 * o, u = (n.y + 1) / 2 *
|
|
1127
|
+
const h = (n.x + 1) / 2 * o, u = (n.y + 1) / 2 * a;
|
|
1103
1128
|
let p = 0, f = 1;
|
|
1104
1129
|
typeof this.clipArea == "number" ? f = this.clipArea : this.clipArea.endsWith("%") ? f = parseFloat(this.clipArea) / 100 : this.clipArea.endsWith("px") && (p = parseFloat(this.clipArea));
|
|
1105
|
-
const m = d.scale.x * f + 0.5,
|
|
1106
|
-
this.renderer.setScissor(
|
|
1130
|
+
const m = d.scale.x * f + 0.5, x = d.scale.y * f + 0.5, S = h - m / 2, L = u - x / 2, T = (S * this.qualityFactor - p) / c, E = (L * this.qualityFactor - p) / c, b = (m * this.qualityFactor + p * 2) / c, w = (x * this.qualityFactor + p * 2) / c;
|
|
1131
|
+
this.renderer.setScissor(T, E, b, w), this.renderer.render(this.scene, this.camera);
|
|
1107
1132
|
}
|
|
1108
|
-
this.renderer.setScissorTest(!1), this.renderer.autoClear = !0, this.renderer.setRenderTarget(null), this.camera.layers.set(this.getSceneLayer()), this.renderer.setClearColor(
|
|
1133
|
+
this.renderer.setScissorTest(!1), this.renderer.autoClear = !0, this.renderer.setRenderTarget(null), this.camera.layers.set(this.getSceneLayer()), this.renderer.setClearColor(i, l);
|
|
1109
1134
|
}
|
|
1110
1135
|
render() {
|
|
1111
|
-
for (let e = 0; e <
|
|
1136
|
+
for (let e = 0; e < O.MAX_LAYERS; e++) {
|
|
1112
1137
|
const t = e + 1;
|
|
1113
1138
|
this.captureRenderTarget(
|
|
1114
1139
|
this.travelersByLayer[e],
|
|
1115
|
-
|
|
1140
|
+
A.getCaptureLayer(t),
|
|
1116
1141
|
this.renderTargets[e]
|
|
1117
1142
|
);
|
|
1118
1143
|
}
|
|
1119
1144
|
this.renderer.render(this.scene, this.camera);
|
|
1120
1145
|
}
|
|
1121
1146
|
syncMeshesByDOM() {
|
|
1122
|
-
const e = this.targetRect.left + window.scrollX, t = this.targetRect.top + window.scrollY,
|
|
1147
|
+
const e = this.targetRect.left + window.scrollX, t = this.targetRect.top + window.scrollY, r = this.renderer.getPixelRatio(), i = this.renderer.domElement.width / r, l = this.renderer.domElement.height / r;
|
|
1123
1148
|
this.scene.children.forEach((n) => {
|
|
1124
1149
|
const o = n;
|
|
1125
1150
|
if (!o.userData || !o.userData.domElement)
|
|
1126
1151
|
return;
|
|
1127
|
-
const
|
|
1128
|
-
if (!
|
|
1152
|
+
const a = o.userData.domElement;
|
|
1153
|
+
if (!a.isConnected)
|
|
1129
1154
|
return;
|
|
1130
|
-
let
|
|
1131
|
-
if (
|
|
1155
|
+
let c;
|
|
1156
|
+
if (a.nodeType === Node.TEXT_NODE) {
|
|
1132
1157
|
const h = document.createRange();
|
|
1133
|
-
h.selectNode(
|
|
1158
|
+
h.selectNode(a), c = h.getBoundingClientRect();
|
|
1134
1159
|
} else
|
|
1135
|
-
|
|
1160
|
+
c = a.getBoundingClientRect();
|
|
1136
1161
|
const d = o.userData.domRect;
|
|
1137
|
-
if (!d || Math.abs(
|
|
1162
|
+
if (!d || Math.abs(c.x - d.x) > 0.5 || Math.abs(c.y - d.y) > 0.5 || Math.abs(c.width - d.width) > 0.5 || Math.abs(c.height - d.height) > 0.5) {
|
|
1138
1163
|
o.userData.domRect = {
|
|
1139
|
-
x:
|
|
1140
|
-
y:
|
|
1141
|
-
width:
|
|
1142
|
-
height:
|
|
1164
|
+
x: c.x,
|
|
1165
|
+
y: c.y,
|
|
1166
|
+
width: c.width,
|
|
1167
|
+
height: c.height
|
|
1143
1168
|
};
|
|
1144
1169
|
let h, u;
|
|
1145
1170
|
if (this.isViewport)
|
|
1146
|
-
h =
|
|
1171
|
+
h = c.x - window.innerWidth / 2 + c.width / 2, u = -c.y + window.innerHeight / 2 - c.height / 2;
|
|
1147
1172
|
else {
|
|
1148
|
-
const p =
|
|
1149
|
-
h = p -
|
|
1173
|
+
const p = c.x - e, f = c.y - t;
|
|
1174
|
+
h = p - i / 2 + c.width / 2, u = -f + l / 2 - c.height / 2;
|
|
1150
1175
|
}
|
|
1151
|
-
if (o.position.setX(h), o.position.setY(u), o.scale.set(
|
|
1152
|
-
width:
|
|
1153
|
-
height:
|
|
1176
|
+
if (o.position.setX(h), o.position.setY(u), o.scale.set(c.width, c.height, 1), o.updateMatrixWorld(), o.material instanceof y.ShaderMaterial && z.forceUpdateUniforms(o.material, {
|
|
1177
|
+
width: c.width,
|
|
1178
|
+
height: c.height
|
|
1154
1179
|
}), o.userData.nativeMesh) {
|
|
1155
1180
|
const p = o.userData.nativeMesh;
|
|
1156
|
-
|
|
1181
|
+
let f = c.width, m = c.height, x = h, S = u;
|
|
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), f *= 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 I = parseFloat(b);
|
|
1192
|
+
b.includes("%") && (I = I / 100 * c.width);
|
|
1193
|
+
let U = parseFloat(w);
|
|
1194
|
+
w.includes("%") && (U = U / 100 * c.height), x += I, S -= U;
|
|
1195
|
+
}
|
|
1196
|
+
}
|
|
1197
|
+
p.position.setX(x), p.position.setY(S), p.scale.set(f, m, 1), p.updateMatrixWorld();
|
|
1157
1198
|
}
|
|
1158
1199
|
}
|
|
1159
1200
|
});
|
|
@@ -1161,86 +1202,86 @@ class tt {
|
|
|
1161
1202
|
}
|
|
1162
1203
|
function rt(s) {
|
|
1163
1204
|
const e = s.textContent || "", t = [];
|
|
1164
|
-
let
|
|
1165
|
-
const n = (
|
|
1166
|
-
for (let h = 0; h <
|
|
1167
|
-
const u =
|
|
1205
|
+
let r = "", i = null, l = -1;
|
|
1206
|
+
const n = (c, d) => {
|
|
1207
|
+
for (let h = 0; h < c.length; h++) {
|
|
1208
|
+
const u = c[h], p = document.createRange();
|
|
1168
1209
|
p.setStart(s, d + h), p.setEnd(s, d + h + 1);
|
|
1169
1210
|
const f = p.getBoundingClientRect();
|
|
1170
1211
|
if (f.width === 0 && f.height === 0) {
|
|
1171
|
-
|
|
1212
|
+
r += u;
|
|
1172
1213
|
continue;
|
|
1173
1214
|
}
|
|
1174
|
-
|
|
1175
|
-
text:
|
|
1215
|
+
l === -1 || Math.abs(f.top - l) > f.height / 2 ? (r && i && t.push({
|
|
1216
|
+
text: r,
|
|
1176
1217
|
rect: {
|
|
1177
|
-
left:
|
|
1178
|
-
top:
|
|
1179
|
-
width:
|
|
1180
|
-
height:
|
|
1218
|
+
left: i.left,
|
|
1219
|
+
top: i.top,
|
|
1220
|
+
width: i.right - i.left,
|
|
1221
|
+
height: i.bottom - i.top
|
|
1181
1222
|
}
|
|
1182
|
-
}),
|
|
1223
|
+
}), r = u, i = {
|
|
1183
1224
|
left: f.left,
|
|
1184
1225
|
top: f.top,
|
|
1185
1226
|
right: f.right,
|
|
1186
1227
|
bottom: f.bottom
|
|
1187
|
-
},
|
|
1188
|
-
|
|
1228
|
+
}, l = f.top) : (r += u, 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(
|
|
1229
|
+
i.bottom,
|
|
1189
1230
|
f.bottom
|
|
1190
1231
|
)));
|
|
1191
1232
|
}
|
|
1192
1233
|
}, o = e.match(/[^\s\-]+\-?|\-|\s+/g) || [];
|
|
1193
|
-
let
|
|
1194
|
-
for (const
|
|
1234
|
+
let a = 0;
|
|
1235
|
+
for (const c of o) {
|
|
1195
1236
|
const d = document.createRange();
|
|
1196
|
-
d.setStart(s,
|
|
1237
|
+
d.setStart(s, a), d.setEnd(s, a + c.length);
|
|
1197
1238
|
const h = d.getClientRects();
|
|
1198
1239
|
if (h.length > 1)
|
|
1199
|
-
n(
|
|
1240
|
+
n(c, a);
|
|
1200
1241
|
else {
|
|
1201
1242
|
const u = h.length === 1 ? h[0] : d.getBoundingClientRect();
|
|
1202
1243
|
if (u.width === 0 && u.height === 0) {
|
|
1203
|
-
|
|
1244
|
+
r += c, a += c.length;
|
|
1204
1245
|
continue;
|
|
1205
1246
|
}
|
|
1206
|
-
|
|
1207
|
-
text:
|
|
1247
|
+
l === -1 || Math.abs(u.top - l) > u.height / 2 ? (r && i && t.push({
|
|
1248
|
+
text: r,
|
|
1208
1249
|
rect: {
|
|
1209
|
-
left:
|
|
1210
|
-
top:
|
|
1211
|
-
width:
|
|
1212
|
-
height:
|
|
1250
|
+
left: i.left,
|
|
1251
|
+
top: i.top,
|
|
1252
|
+
width: i.right - i.left,
|
|
1253
|
+
height: i.bottom - i.top
|
|
1213
1254
|
}
|
|
1214
|
-
}),
|
|
1255
|
+
}), r = c, i = {
|
|
1215
1256
|
left: u.left,
|
|
1216
1257
|
top: u.top,
|
|
1217
1258
|
right: u.right,
|
|
1218
1259
|
bottom: u.bottom
|
|
1219
|
-
},
|
|
1220
|
-
|
|
1260
|
+
}, l = u.top) : (r += c, i && (i.left = Math.min(i.left, u.left), i.top = Math.min(i.top, u.top), i.right = Math.max(i.right, u.right), i.bottom = Math.max(
|
|
1261
|
+
i.bottom,
|
|
1221
1262
|
u.bottom
|
|
1222
1263
|
)));
|
|
1223
1264
|
}
|
|
1224
|
-
|
|
1265
|
+
a += c.length;
|
|
1225
1266
|
}
|
|
1226
|
-
return
|
|
1227
|
-
text:
|
|
1267
|
+
return r && i && t.push({
|
|
1268
|
+
text: r,
|
|
1228
1269
|
rect: {
|
|
1229
|
-
left:
|
|
1230
|
-
top:
|
|
1231
|
-
width:
|
|
1232
|
-
height:
|
|
1270
|
+
left: i.left,
|
|
1271
|
+
top: i.top,
|
|
1272
|
+
width: i.right - i.left,
|
|
1273
|
+
height: i.bottom - i.top
|
|
1233
1274
|
}
|
|
1234
1275
|
}), t.filter(
|
|
1235
|
-
(
|
|
1276
|
+
(c) => c.text.trim().length > 0 && c.rect.width > 0 && c.rect.height > 0
|
|
1236
1277
|
);
|
|
1237
1278
|
}
|
|
1238
1279
|
function Se(s) {
|
|
1239
1280
|
const e = parseFloat(s.fontSize);
|
|
1240
1281
|
let t = parseFloat(s.lineHeight);
|
|
1241
1282
|
isNaN(t) && (t = e * 1.2);
|
|
1242
|
-
let
|
|
1243
|
-
return isNaN(
|
|
1283
|
+
let r = parseFloat(s.letterSpacing);
|
|
1284
|
+
return isNaN(r) && (r = 0), {
|
|
1244
1285
|
font: `${s.fontStyle} ${s.fontWeight} ${s.fontSize} ${s.fontFamily}`,
|
|
1245
1286
|
fontSize: s.fontSize,
|
|
1246
1287
|
color: s.color,
|
|
@@ -1248,111 +1289,111 @@ function Se(s) {
|
|
|
1248
1289
|
textBaseline: "alphabetic",
|
|
1249
1290
|
direction: s.direction || "inherit",
|
|
1250
1291
|
lineHeight: t,
|
|
1251
|
-
letterSpacing:
|
|
1292
|
+
letterSpacing: r
|
|
1252
1293
|
};
|
|
1253
1294
|
}
|
|
1254
|
-
function
|
|
1295
|
+
function De(s, e = $ | Z | ze | ce | ie, t, r = 1, i = 0, l = 2, n, o) {
|
|
1255
1296
|
var de, ue, fe, ge, pe, me;
|
|
1256
1297
|
if (s.nodeType === Node.TEXT_NODE) {
|
|
1257
1298
|
const v = s;
|
|
1258
1299
|
if (!v.textContent || !v.textContent.trim())
|
|
1259
1300
|
return null;
|
|
1260
|
-
const
|
|
1261
|
-
if (
|
|
1301
|
+
const M = v.textContent.replace(/\s+/g, " ");
|
|
1302
|
+
if (M.length === 0)
|
|
1262
1303
|
return null;
|
|
1263
|
-
const
|
|
1264
|
-
if (
|
|
1304
|
+
const k = rt(v);
|
|
1305
|
+
if (k.length === 0)
|
|
1265
1306
|
return null;
|
|
1266
|
-
const
|
|
1267
|
-
if (!
|
|
1307
|
+
const _ = v.parentElement, D = _ ? window.getComputedStyle(_) : null;
|
|
1308
|
+
if (!D)
|
|
1268
1309
|
return null;
|
|
1269
|
-
const
|
|
1310
|
+
const V = Math.min(...k.map((C) => C.rect.left)), F = Math.min(...k.map((C) => C.rect.top)), H = Math.max(...k.map((C) => C.rect.left + C.rect.width)), R = Math.max(...k.map((C) => C.rect.top + C.rect.height));
|
|
1270
1311
|
return {
|
|
1271
1312
|
id: Math.random().toString(36).substring(2, 9),
|
|
1272
1313
|
type: "TEXT",
|
|
1273
1314
|
element: v,
|
|
1274
1315
|
rect: {
|
|
1275
|
-
x:
|
|
1276
|
-
y:
|
|
1277
|
-
width:
|
|
1278
|
-
height:
|
|
1316
|
+
x: V + window.scrollX,
|
|
1317
|
+
y: F + window.scrollY,
|
|
1318
|
+
width: H - V,
|
|
1319
|
+
height: R - F
|
|
1279
1320
|
},
|
|
1280
1321
|
styles: {
|
|
1281
1322
|
backgroundColor: "transparent",
|
|
1282
1323
|
backgroundImage: "",
|
|
1283
|
-
opacity:
|
|
1284
|
-
zIndex: (isNaN(parseInt(
|
|
1324
|
+
opacity: _ && _.dataset[P.KEY] === P.VALUES.HIDE ? 1 : parseFloat(D.opacity),
|
|
1325
|
+
zIndex: (isNaN(parseInt(D.zIndex)) ? 0 : parseInt(D.zIndex)) + i,
|
|
1285
1326
|
borderRadius: "0px",
|
|
1286
1327
|
borderColor: "transparent",
|
|
1287
1328
|
borderWidth: "0px",
|
|
1288
1329
|
isTraveler: !1
|
|
1289
1330
|
},
|
|
1290
|
-
textContent:
|
|
1291
|
-
textLines:
|
|
1292
|
-
text:
|
|
1331
|
+
textContent: M,
|
|
1332
|
+
textLines: k.map((C) => ({
|
|
1333
|
+
text: C.text.trim(),
|
|
1293
1334
|
rect: {
|
|
1294
|
-
x:
|
|
1295
|
-
y:
|
|
1296
|
-
width:
|
|
1297
|
-
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
|
|
1298
1339
|
}
|
|
1299
1340
|
})),
|
|
1300
|
-
textStyles: Se(
|
|
1341
|
+
textStyles: Se(D),
|
|
1301
1342
|
dirtyMask: e,
|
|
1302
1343
|
visibility: t,
|
|
1303
1344
|
isTraveler: !1,
|
|
1304
|
-
captureLayer:
|
|
1305
|
-
isFixed:
|
|
1345
|
+
captureLayer: r,
|
|
1346
|
+
isFixed: D.position === "fixed",
|
|
1306
1347
|
nativeLayer: n,
|
|
1307
1348
|
nativeStyles: o ? q(q({
|
|
1308
1349
|
backgroundColor: "transparent",
|
|
1309
1350
|
backgroundImage: "",
|
|
1310
|
-
opacity:
|
|
1311
|
-
zIndex: (isNaN(parseInt(
|
|
1351
|
+
opacity: _ && _.dataset[P.KEY] === P.VALUES.HIDE ? 1 : parseFloat(D.opacity),
|
|
1352
|
+
zIndex: (isNaN(parseInt(D.zIndex)) ? 0 : parseInt(D.zIndex)) + i,
|
|
1312
1353
|
borderRadius: "0px",
|
|
1313
1354
|
borderColor: "transparent",
|
|
1314
1355
|
borderWidth: "0px",
|
|
1315
1356
|
isTraveler: !1
|
|
1316
|
-
}, Se(
|
|
1357
|
+
}, Se(D)), o) : void 0,
|
|
1317
1358
|
nativeRect: o ? {
|
|
1318
|
-
x:
|
|
1319
|
-
y:
|
|
1320
|
-
width:
|
|
1321
|
-
height:
|
|
1359
|
+
x: V + window.scrollX,
|
|
1360
|
+
y: F + window.scrollY,
|
|
1361
|
+
width: H - V,
|
|
1362
|
+
height: R - F
|
|
1322
1363
|
} : void 0,
|
|
1323
1364
|
children: []
|
|
1324
1365
|
};
|
|
1325
1366
|
}
|
|
1326
1367
|
if (s.nodeType !== Node.ELEMENT_NODE)
|
|
1327
1368
|
return null;
|
|
1328
|
-
const
|
|
1369
|
+
const a = s, c = a.dataset[X.KEY];
|
|
1329
1370
|
let d = t, h = t;
|
|
1330
|
-
if (
|
|
1331
|
-
const v = new Set(
|
|
1332
|
-
for (const
|
|
1333
|
-
if (!
|
|
1371
|
+
if (c) {
|
|
1372
|
+
const v = new Set(c.split(/\s+/));
|
|
1373
|
+
for (const M of v)
|
|
1374
|
+
if (!Ee.includes(M))
|
|
1334
1375
|
throw new Error(
|
|
1335
|
-
`[MirageEngine] Invalid filter token: '${
|
|
1376
|
+
`[MirageEngine] Invalid filter token: '${M}'. Expected one of: 'include-tree', 'exclude-tree', 'include-self', 'exclude-self', 'end'.`
|
|
1336
1377
|
);
|
|
1337
|
-
if (v.has(
|
|
1378
|
+
if (v.has(X.VALUES.END))
|
|
1338
1379
|
return null;
|
|
1339
|
-
if (v.has(
|
|
1380
|
+
if (v.has(X.VALUES.INCLUDE_TREE) && v.has(X.VALUES.EXCLUDE_TREE))
|
|
1340
1381
|
throw new Error(
|
|
1341
1382
|
"[MirageEngine] Conflicting filters: 'include-tree' and 'exclude-tree' cannot be used together on the same element."
|
|
1342
1383
|
);
|
|
1343
|
-
if (v.has(
|
|
1384
|
+
if (v.has(X.VALUES.INCLUDE_SELF) && v.has(X.VALUES.EXCLUDE_SELF))
|
|
1344
1385
|
throw new Error(
|
|
1345
1386
|
"[MirageEngine] Conflicting filters: 'include-self' and 'exclude-self' cannot be used together on the same element."
|
|
1346
1387
|
);
|
|
1347
|
-
v.has(
|
|
1388
|
+
v.has(X.VALUES.INCLUDE_TREE) ? d = d | W : v.has(X.VALUES.EXCLUDE_TREE) && (d = d & ~W), h = d, v.has(X.VALUES.INCLUDE_SELF) ? h = h | W : v.has(X.VALUES.EXCLUDE_SELF) && (h = h & ~W);
|
|
1348
1389
|
}
|
|
1349
|
-
const u =
|
|
1390
|
+
const u = a.dataset[Y.KEY];
|
|
1350
1391
|
if (u) {
|
|
1351
1392
|
const v = new Set(u.split(/\s+/));
|
|
1352
|
-
for (const
|
|
1353
|
-
if (!
|
|
1393
|
+
for (const M of v)
|
|
1394
|
+
if (!Ee.includes(M))
|
|
1354
1395
|
throw new Error(
|
|
1355
|
-
`[MirageEngine] Invalid select token: '${
|
|
1396
|
+
`[MirageEngine] Invalid select token: '${M}'. Expected one of: 'include-tree', 'exclude-tree', 'include-self', 'exclude-self', 'end'.`
|
|
1356
1397
|
);
|
|
1357
1398
|
if (v.has(Y.VALUES.END))
|
|
1358
1399
|
return null;
|
|
@@ -1364,186 +1405,199 @@ function Ae(s, e = $ | Q | ze | ce | re, t, i = 1, r = 0, a = 2, n, o) {
|
|
|
1364
1405
|
throw new Error(
|
|
1365
1406
|
"[MirageEngine] Conflicting selects: 'include-self' and 'exclude-self' cannot be used together on the same element."
|
|
1366
1407
|
);
|
|
1367
|
-
v.has(Y.VALUES.INCLUDE_TREE) ? d = d |
|
|
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);
|
|
1368
1409
|
}
|
|
1369
|
-
const p =
|
|
1370
|
-
let f = !1, m = o ? q({}, o) : {},
|
|
1410
|
+
const p = a.dataset[O.KEY];
|
|
1411
|
+
let f = !1, m = o ? q({}, o) : {}, x = n;
|
|
1371
1412
|
if (p) {
|
|
1372
1413
|
let v = 1;
|
|
1373
|
-
const
|
|
1374
|
-
let
|
|
1375
|
-
if (
|
|
1376
|
-
|
|
1377
|
-
const
|
|
1414
|
+
const M = p.indexOf("{"), k = p.lastIndexOf("}");
|
|
1415
|
+
let _ = p;
|
|
1416
|
+
if (M !== -1 && k !== -1 && k > M) {
|
|
1417
|
+
_ = p.substring(0, M).trim();
|
|
1418
|
+
const R = p.substring(M, k + 1);
|
|
1378
1419
|
try {
|
|
1379
|
-
m = new Function("return " +
|
|
1380
|
-
} catch (
|
|
1420
|
+
m = new Function("return " + R)();
|
|
1421
|
+
} catch (C) {
|
|
1381
1422
|
console.warn(
|
|
1382
|
-
`[MirageEngine] Failed to parse travel styles JSON: ${
|
|
1423
|
+
`[MirageEngine] Failed to parse travel styles JSON: ${R}`
|
|
1383
1424
|
);
|
|
1384
1425
|
}
|
|
1385
1426
|
}
|
|
1386
|
-
const
|
|
1387
|
-
let
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1427
|
+
const D = _.split(/\s+/);
|
|
1428
|
+
let V = !1;
|
|
1429
|
+
const F = D.indexOf(O.VALUES.TRAVELER);
|
|
1430
|
+
if (F !== -1) {
|
|
1431
|
+
f = !0, V = !0;
|
|
1432
|
+
const R = D[F + 1];
|
|
1433
|
+
if (R && !isNaN(parseInt(R, 10)))
|
|
1434
|
+
v = parseInt(R, 10);
|
|
1435
|
+
else {
|
|
1436
|
+
const C = D.find((j) => !isNaN(parseInt(j, 10)));
|
|
1437
|
+
C && (v = parseInt(C, 10));
|
|
1438
|
+
}
|
|
1439
|
+
}
|
|
1440
|
+
const H = D.indexOf(O.VALUES.NATIVE);
|
|
1441
|
+
if (H !== -1) {
|
|
1442
|
+
const R = D[H + 1];
|
|
1443
|
+
if (R && !isNaN(parseInt(R, 10)))
|
|
1444
|
+
x = parseInt(R, 10);
|
|
1445
|
+
else if (!f) {
|
|
1446
|
+
const C = D.find((j) => !isNaN(parseInt(j, 10)));
|
|
1447
|
+
C && (x = parseInt(C, 10));
|
|
1448
|
+
}
|
|
1396
1449
|
}
|
|
1397
|
-
if (
|
|
1398
|
-
const
|
|
1399
|
-
if (
|
|
1450
|
+
if (V) {
|
|
1451
|
+
const R = v + 1;
|
|
1452
|
+
if (R < r)
|
|
1400
1453
|
throw new Error(
|
|
1401
|
-
`[MirageEngine] Traveler layer (${v}) cannot be smaller than inherited capture layer (${
|
|
1454
|
+
`[MirageEngine] Traveler layer (${v}) cannot be smaller than inherited capture layer (${r - 1}).`
|
|
1402
1455
|
);
|
|
1403
|
-
|
|
1456
|
+
r = Math.min(R, O.MAX_LAYERS + 1);
|
|
1404
1457
|
}
|
|
1405
1458
|
}
|
|
1406
|
-
const
|
|
1407
|
-
let
|
|
1408
|
-
|
|
1409
|
-
const
|
|
1410
|
-
if (
|
|
1459
|
+
const S = a.dataset[Xe.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")
|
|
1411
1464
|
return null;
|
|
1412
|
-
let
|
|
1413
|
-
|
|
1414
|
-
const
|
|
1415
|
-
let
|
|
1416
|
-
if (
|
|
1417
|
-
|
|
1418
|
-
else if (
|
|
1419
|
-
const v =
|
|
1420
|
-
const
|
|
1421
|
-
|
|
1422
|
-
const
|
|
1423
|
-
|
|
1424
|
-
const
|
|
1425
|
-
|
|
1426
|
-
const
|
|
1427
|
-
|
|
1428
|
-
for (let
|
|
1429
|
-
|
|
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), I = (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, k = m == null ? void 0 : m.fill, _ = m == null ? void 0 : m.stroke, D = m == null ? void 0 : m.opacity, V = (C, j) => {
|
|
1473
|
+
const N = window.getComputedStyle(C), Q = j, ke = N.fill === N.color, Ue = N.stroke === N.color, se = k || (ke ? M : void 0) || N.fill;
|
|
1474
|
+
se && se !== "none" && (Q.style.fill = se);
|
|
1475
|
+
const ne = _ || (Ue ? 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;
|
|
1478
|
+
ve && (Q.style.color = ve);
|
|
1479
|
+
const oe = D || N.opacity;
|
|
1480
|
+
oe && oe !== "1" && (Q.style.opacity = oe);
|
|
1481
|
+
for (let te = 0; te < C.children.length; te++)
|
|
1482
|
+
V(C.children[te], j.children[te]);
|
|
1430
1483
|
};
|
|
1431
|
-
|
|
1432
|
-
const
|
|
1433
|
-
v.hasAttribute("viewBox") || v.setAttribute("viewBox", `0 0 ${
|
|
1434
|
-
let
|
|
1435
|
-
|
|
1484
|
+
V(a, v);
|
|
1485
|
+
const F = a.getBoundingClientRect(), H = window.devicePixelRatio * l;
|
|
1486
|
+
v.hasAttribute("viewBox") || v.setAttribute("viewBox", `0 0 ${F.width} ${F.height}`), v.setAttribute("width", (F.width * H).toString()), v.setAttribute("height", (F.height * H).toString());
|
|
1487
|
+
let R = new XMLSerializer().serializeToString(v);
|
|
1488
|
+
R.includes("xmlns=") || (R = R.replace(
|
|
1436
1489
|
"<svg",
|
|
1437
1490
|
'<svg xmlns="http://www.w3.org/2000/svg"'
|
|
1438
|
-
)),
|
|
1439
|
-
} else if (
|
|
1440
|
-
const v =
|
|
1441
|
-
v && (
|
|
1442
|
-
}
|
|
1443
|
-
const
|
|
1444
|
-
backgroundColor:
|
|
1445
|
-
backgroundImage:
|
|
1446
|
-
opacity:
|
|
1447
|
-
zIndex:
|
|
1448
|
-
borderRadius:
|
|
1449
|
-
borderColor:
|
|
1450
|
-
borderWidth:
|
|
1451
|
-
imageSrc:
|
|
1491
|
+
)), U = `data:image/svg+xml;utf8,${encodeURIComponent(R)}`;
|
|
1492
|
+
} else if (E.backgroundImage && E.backgroundImage !== "none") {
|
|
1493
|
+
const v = E.backgroundImage.match(/url\(['"]?(.*?)['"]?\)/);
|
|
1494
|
+
v && (U = v[1]);
|
|
1495
|
+
}
|
|
1496
|
+
const B = {
|
|
1497
|
+
backgroundColor: E.backgroundColor,
|
|
1498
|
+
backgroundImage: E.backgroundImage,
|
|
1499
|
+
opacity: a.dataset[P.KEY] === P.VALUES.HIDE ? 1 : parseFloat(E.opacity),
|
|
1500
|
+
zIndex: I,
|
|
1501
|
+
borderRadius: E.borderRadius,
|
|
1502
|
+
borderColor: E.borderColor,
|
|
1503
|
+
borderWidth: E.borderWidth,
|
|
1504
|
+
imageSrc: U,
|
|
1452
1505
|
isTraveler: f
|
|
1453
|
-
},
|
|
1454
|
-
let
|
|
1506
|
+
}, G = B;
|
|
1507
|
+
let Ae, Ie;
|
|
1455
1508
|
const he = [];
|
|
1456
|
-
return
|
|
1457
|
-
const
|
|
1509
|
+
return a.tagName.toLowerCase() !== "svg" && Array.from(a.childNodes).forEach((v) => {
|
|
1510
|
+
const M = v.nodeType === Node.TEXT_NODE ? h : d, k = De(
|
|
1458
1511
|
v,
|
|
1459
1512
|
e,
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1513
|
+
M,
|
|
1514
|
+
r,
|
|
1515
|
+
I,
|
|
1516
|
+
l,
|
|
1517
|
+
v.nodeType === Node.TEXT_NODE ? x : void 0,
|
|
1465
1518
|
v.nodeType === Node.TEXT_NODE && Object.keys(m).length > 0 ? m : void 0
|
|
1466
1519
|
);
|
|
1467
|
-
|
|
1520
|
+
k && he.push(k);
|
|
1468
1521
|
}), {
|
|
1469
|
-
id:
|
|
1522
|
+
id: b,
|
|
1470
1523
|
type: "BOX",
|
|
1471
|
-
element:
|
|
1524
|
+
element: a,
|
|
1472
1525
|
rect: {
|
|
1473
|
-
x:
|
|
1474
|
-
y:
|
|
1475
|
-
width:
|
|
1476
|
-
height:
|
|
1526
|
+
x: T.left + window.scrollX,
|
|
1527
|
+
y: T.top + window.scrollY,
|
|
1528
|
+
width: T.width,
|
|
1529
|
+
height: T.height
|
|
1477
1530
|
},
|
|
1478
|
-
styles:
|
|
1479
|
-
textContent:
|
|
1531
|
+
styles: G,
|
|
1532
|
+
textContent: Ae,
|
|
1480
1533
|
textStyles: Ie,
|
|
1481
1534
|
dirtyMask: e,
|
|
1482
1535
|
visibility: h,
|
|
1483
1536
|
isTraveler: f,
|
|
1484
|
-
captureLayer:
|
|
1485
|
-
nativeLayer:
|
|
1486
|
-
nativeStyles:
|
|
1487
|
-
backgroundColor: (de = m.backgroundColor) != null ? de :
|
|
1488
|
-
backgroundImage: (ue = m.backgroundImage) != null ? ue :
|
|
1489
|
-
opacity: (fe = m.opacity) != null ? fe :
|
|
1490
|
-
zIndex: m.zIndex !== void 0 ? m.zIndex +
|
|
1491
|
-
borderRadius: (ge = m.borderRadius) != null ? ge :
|
|
1492
|
-
borderColor: (pe = m.borderColor) != null ? pe :
|
|
1493
|
-
borderWidth: (me = m.borderWidth) != null ? me :
|
|
1494
|
-
isTraveler:
|
|
1537
|
+
captureLayer: r,
|
|
1538
|
+
nativeLayer: x,
|
|
1539
|
+
nativeStyles: x !== void 0 ? be(q({}, 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 + I : 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
|
|
1495
1549
|
}) : void 0,
|
|
1496
|
-
nativeRect:
|
|
1497
|
-
x: m.x !== void 0 ? parseFloat(m.x) :
|
|
1498
|
-
y: m.y !== void 0 ? parseFloat(m.y) :
|
|
1499
|
-
width: m.width !== void 0 ? parseFloat(m.width) :
|
|
1500
|
-
height: m.height !== void 0 ? parseFloat(m.height) :
|
|
1550
|
+
nativeRect: x !== void 0 ? {
|
|
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
|
|
1501
1555
|
} : void 0,
|
|
1502
|
-
isFixed:
|
|
1556
|
+
isFixed: E.position === "fixed",
|
|
1503
1557
|
children: he,
|
|
1504
|
-
shaderHooks:
|
|
1558
|
+
shaderHooks: L
|
|
1505
1559
|
};
|
|
1506
1560
|
}
|
|
1507
1561
|
function it(s, e) {
|
|
1508
|
-
e.size !== 0 && e.forEach((t,
|
|
1509
|
-
var
|
|
1510
|
-
const
|
|
1511
|
-
!
|
|
1562
|
+
e.size !== 0 && e.forEach((t, r) => {
|
|
1563
|
+
var l, n, o, a;
|
|
1564
|
+
const i = s.get(r);
|
|
1565
|
+
!i || !i.userData.basePosition || (z.forceUpdateUniforms(i.material, {
|
|
1512
1566
|
backgroundColor: t.backgroundColor,
|
|
1513
1567
|
backgroundImage: t.backgroundImage,
|
|
1514
1568
|
opacity: t.opacity,
|
|
1515
|
-
borderRadius: (n = t.borderRadius) != null ? n : (
|
|
1569
|
+
borderRadius: (n = t.borderRadius) != null ? n : (l = i.userData.baseStyles) == null ? void 0 : l.borderRadius
|
|
1516
1570
|
// width and height are no longer updated here, they are updated in syncMeshesByDOM
|
|
1517
|
-
}),
|
|
1571
|
+
}), i.userData.nativeMesh && z.forceUpdateUniforms(i.userData.nativeMesh.material, {
|
|
1518
1572
|
backgroundColor: t.backgroundColor,
|
|
1519
1573
|
backgroundImage: t.backgroundImage,
|
|
1520
1574
|
opacity: t.opacity,
|
|
1521
|
-
borderRadius: (
|
|
1575
|
+
borderRadius: (a = t.borderRadius) != null ? a : (o = i.userData.baseStyles) == null ? void 0 : o.borderRadius
|
|
1522
1576
|
}));
|
|
1523
1577
|
});
|
|
1524
1578
|
}
|
|
1525
1579
|
class st {
|
|
1526
|
-
constructor(e, t,
|
|
1580
|
+
constructor(e, t, r, i) {
|
|
1527
1581
|
g(this, "target");
|
|
1528
1582
|
g(this, "renderer");
|
|
1529
1583
|
g(this, "registry");
|
|
1530
1584
|
g(this, "isTravelEnabled", !1);
|
|
1531
1585
|
g(this, "tracker");
|
|
1532
|
-
this.target = e, this.renderer = t, this.registry =
|
|
1533
|
-
resizeDebounce:
|
|
1534
|
-
}), this.tracker.onLayoutChange.add((
|
|
1535
|
-
document.querySelector(`[${
|
|
1536
|
-
const
|
|
1586
|
+
this.target = e, this.renderer = t, this.registry = r, this.tracker = new We(e, {
|
|
1587
|
+
resizeDebounce: i.resizeDebounce
|
|
1588
|
+
}), this.tracker.onLayoutChange.add((l, n) => {
|
|
1589
|
+
document.querySelector(`[${O.NAME}~='${O.VALUES.TRAVELER}']`) !== null && !this.isTravelEnabled && (this.isTravelEnabled = !0, this.renderer.createRenderTarget());
|
|
1590
|
+
const a = De(
|
|
1537
1591
|
this.target,
|
|
1538
|
-
|
|
1592
|
+
l,
|
|
1539
1593
|
W,
|
|
1540
1594
|
1,
|
|
1541
1595
|
0,
|
|
1542
1596
|
this.renderer.qualityFactor
|
|
1543
1597
|
);
|
|
1544
|
-
|
|
1545
|
-
}), this.tracker.onStyleChange.add((
|
|
1546
|
-
it(this.registry,
|
|
1598
|
+
a && this.renderer.syncScene(a, n);
|
|
1599
|
+
}), this.tracker.onStyleChange.add((l) => {
|
|
1600
|
+
it(this.registry, l);
|
|
1547
1601
|
}), this.tracker.onRender.add(() => {
|
|
1548
1602
|
this.renderer.syncMeshesByDOM(), this.renderer.render();
|
|
1549
1603
|
});
|
|
@@ -1586,22 +1640,22 @@ class lt {
|
|
|
1586
1640
|
g(this, "syncer");
|
|
1587
1641
|
g(this, "target");
|
|
1588
1642
|
g(this, "registry");
|
|
1589
|
-
var
|
|
1643
|
+
var i, l, n;
|
|
1590
1644
|
if (this.target = e, this.registry = new nt(), !document.getElementById("mirage-engine-styles")) {
|
|
1591
1645
|
const o = document.createElement("style");
|
|
1592
1646
|
o.id = "mirage-engine-styles", o.textContent = `
|
|
1593
|
-
[${
|
|
1647
|
+
[${P.NAME}="${P.VALUES.HIDE}"] {
|
|
1594
1648
|
opacity: 0 !important;
|
|
1595
1649
|
}
|
|
1596
1650
|
`, document.head.appendChild(o);
|
|
1597
1651
|
}
|
|
1598
|
-
let
|
|
1599
|
-
if (t.mode === "duplicate" ?
|
|
1652
|
+
let r;
|
|
1653
|
+
if (t.mode === "duplicate" ? r = (l = (i = t.container) != null ? i : this.target.parentElement) != null ? l : void 0 : r = (n = this.target.parentElement) != null ? n : void 0, !r)
|
|
1600
1654
|
throw new Error("[Mirage] Cannot find a container (parent or option).");
|
|
1601
1655
|
this.renderer = new tt(
|
|
1602
1656
|
this.target,
|
|
1603
1657
|
t,
|
|
1604
|
-
|
|
1658
|
+
r,
|
|
1605
1659
|
this.registry
|
|
1606
1660
|
), this.renderer.mount(), this.syncer = new st(this.target, this.renderer, this.registry, t);
|
|
1607
1661
|
}
|
|
@@ -1635,35 +1689,35 @@ class lt {
|
|
|
1635
1689
|
ArrowUp: !1,
|
|
1636
1690
|
ArrowDown: !1
|
|
1637
1691
|
};
|
|
1638
|
-
window.addEventListener("keydown", (
|
|
1639
|
-
t[
|
|
1640
|
-
}), window.addEventListener("keyup", (
|
|
1641
|
-
t[
|
|
1692
|
+
window.addEventListener("keydown", (l) => {
|
|
1693
|
+
t[l.key] !== void 0 && (t[l.key] = !0);
|
|
1694
|
+
}), window.addEventListener("keyup", (l) => {
|
|
1695
|
+
t[l.key] !== void 0 && (t[l.key] = !1);
|
|
1642
1696
|
});
|
|
1643
|
-
const
|
|
1644
|
-
requestAnimationFrame(
|
|
1697
|
+
const r = 2, i = () => {
|
|
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);
|
|
1645
1699
|
};
|
|
1646
|
-
|
|
1700
|
+
i();
|
|
1647
1701
|
}
|
|
1648
1702
|
}
|
|
1649
1703
|
export {
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1704
|
+
Ee as ALLOWED_FILTERS,
|
|
1705
|
+
P as ATTR_DOM,
|
|
1706
|
+
X as ATTR_FILTER,
|
|
1653
1707
|
at as ATTR_SANDWICH,
|
|
1654
1708
|
Y as ATTR_SELECT,
|
|
1655
1709
|
Xe as ATTR_SHADER,
|
|
1656
|
-
|
|
1710
|
+
O as ATTR_TRAVEL,
|
|
1657
1711
|
ce as DIRTY_CONTENT,
|
|
1658
|
-
|
|
1712
|
+
re as DIRTY_NONE,
|
|
1659
1713
|
$ as DIRTY_RECT,
|
|
1660
|
-
|
|
1661
|
-
|
|
1714
|
+
ie as DIRTY_STRUCTURE,
|
|
1715
|
+
Z as DIRTY_STYLE,
|
|
1662
1716
|
ze as DIRTY_ZINDEX,
|
|
1663
1717
|
ct as EXCLUDED,
|
|
1664
1718
|
lt as Engine,
|
|
1665
|
-
|
|
1666
|
-
|
|
1719
|
+
K as SELECT_LAYER,
|
|
1720
|
+
A as THREE_LAYERS,
|
|
1667
1721
|
xe as TRAVEL_VALUES,
|
|
1668
1722
|
We as Tracker,
|
|
1669
1723
|
W as USER_LAYER,
|