mirage-engine 0.3.2 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,34 +1,34 @@
1
- var Fe = Object.defineProperty, _e = Object.defineProperties;
1
+ var _e = Object.defineProperty, ze = Object.defineProperties;
2
2
  var Xe = Object.getOwnPropertyDescriptors;
3
- var Ce = Object.getOwnPropertySymbols;
4
- var ze = Object.prototype.hasOwnProperty, Ne = Object.prototype.propertyIsEnumerable;
5
- var ge = (s, e, t) => e in s ? Fe(s, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : s[e] = t, G = (s, e) => {
3
+ var Ee = Object.getOwnPropertySymbols;
4
+ var Ne = Object.prototype.hasOwnProperty, Ye = Object.prototype.propertyIsEnumerable;
5
+ var ge = (s, e, t) => e in s ? _e(s, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : s[e] = t, G = (s, e) => {
6
6
  for (var t in e || (e = {}))
7
- ze.call(e, t) && ge(s, t, e[t]);
8
- if (Ce)
9
- for (var t of Ce(e))
10
- Ne.call(e, t) && ge(s, t, e[t]);
7
+ Ne.call(e, t) && ge(s, t, e[t]);
8
+ if (Ee)
9
+ for (var t of Ee(e))
10
+ Ye.call(e, t) && ge(s, t, e[t]);
11
11
  return s;
12
- }, pe = (s, e) => _e(s, Xe(e));
13
- var h = (s, e, t) => (ge(s, typeof e != "symbol" ? e + "" : e, t), t);
14
- var we = (s, e, t) => new Promise((i, r) => {
15
- var c = (o) => {
12
+ }, pe = (s, e) => ze(s, Xe(e));
13
+ var d = (s, e, t) => (ge(s, typeof e != "symbol" ? e + "" : e, t), t);
14
+ var Ce = (s, e, t) => new Promise((i, r) => {
15
+ var o = (a) => {
16
16
  try {
17
- a(t.next(o));
17
+ c(t.next(a));
18
18
  } catch (l) {
19
19
  r(l);
20
20
  }
21
- }, n = (o) => {
21
+ }, n = (a) => {
22
22
  try {
23
- a(t.throw(o));
23
+ c(t.throw(a));
24
24
  } catch (l) {
25
25
  r(l);
26
26
  }
27
- }, a = (o) => o.done ? i(o.value) : Promise.resolve(o.value).then(c, n);
28
- a((t = t.apply(s, e)).next());
27
+ }, c = (a) => a.done ? i(a.value) : Promise.resolve(a.value).then(o, n);
28
+ c((t = t.apply(s, e)).next());
29
29
  });
30
- import * as b from "three";
31
- const De = {
30
+ import * as y from "three";
31
+ const Ae = {
32
32
  INCLUDE_TREE: "include-tree",
33
33
  EXCLUDE_TREE: "exclude-tree",
34
34
  INCLUDE_SELF: "include-self",
@@ -48,7 +48,7 @@ const De = {
48
48
  CAPTURE_3: "3",
49
49
  CAPTURE_4: "4",
50
50
  CAPTURE_5: "5"
51
- }, U = {
51
+ }, F = {
52
52
  NAME: "data-mirage-travel",
53
53
  KEY: "mirageTravel",
54
54
  VALUES: Te,
@@ -56,12 +56,12 @@ const De = {
56
56
  }, N = {
57
57
  NAME: "data-mirage-filter",
58
58
  KEY: "mirageFilter",
59
- VALUES: De
60
- }, Y = {
59
+ VALUES: Ae
60
+ }, V = {
61
61
  NAME: "data-mirage-select",
62
62
  KEY: "mirageSelect",
63
- VALUES: De
64
- }, Ye = {
63
+ VALUES: Ae
64
+ }, Ve = {
65
65
  NAME: "data-mirage-shader",
66
66
  KEY: "mirageShader"
67
67
  }, Se = {
@@ -70,7 +70,7 @@ const De = {
70
70
  VALUES: {
71
71
  FRONT: "front"
72
72
  }
73
- }, he = 0, j = 1, ae = 2, Ve = 4, ye = 8, be = 16;
73
+ }, he = 0, q = 1, ne = 2, We = 4, ve = 8, ye = 16;
74
74
  function Pe(s) {
75
75
  const e = s.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);
76
76
  return e ? {
@@ -79,7 +79,7 @@ function Pe(s) {
79
79
  b: parseInt(e[3]) / 255
80
80
  } : { r: 1, g: 1, b: 1 };
81
81
  }
82
- function We(s) {
82
+ function He(s) {
83
83
  const e = {};
84
84
  if (s.opacity && (e.opacity = parseFloat(s.opacity)), s.backgroundColor && s.backgroundColor !== "rgba(0, 0, 0, 0)") {
85
85
  const t = Pe(s.backgroundColor);
@@ -91,34 +91,34 @@ function We(s) {
91
91
  }
92
92
  return e;
93
93
  }
94
- class Ae {
94
+ class ke {
95
95
  constructor(e, t) {
96
- h(this, "target");
97
- h(this, "observer");
98
- h(this, "pendingDeletions", /* @__PURE__ */ new Set());
99
- h(this, "pendingStyles", /* @__PURE__ */ new Map());
100
- h(this, "isDomDirty", !1);
101
- h(this, "isRunning", !1);
102
- h(this, "pendingMask", he);
103
- h(this, "mutationTimer", null);
104
- h(this, "cssTimer", null);
105
- h(this, "resizeConfig");
106
- h(this, "resizeTimer", null);
107
- h(this, "isResizing", !1);
108
- h(this, "lastScrollX", 0);
109
- h(this, "lastScrollY", 0);
110
- h(this, "scrollTimer", null);
111
- h(this, "onBeforeRender", /* @__PURE__ */ new Set());
112
- h(this, "onLayoutChange", /* @__PURE__ */ new Set());
113
- h(this, "onStyleChange", /* @__PURE__ */ new Set());
114
- h(this, "onScrollChange", /* @__PURE__ */ new Set());
115
- h(this, "onRender", /* @__PURE__ */ new Set());
116
- h(this, "onTransitionFinished", (e) => {
117
- this.target.contains(e.target) && this.mutationTimer === null && (this.cssTimer && clearTimeout(this.cssTimer), this.pendingStyles.size == 0 && (this.pendingMask |= j | ae, this.cssTimer = window.setTimeout(() => {
96
+ d(this, "target");
97
+ d(this, "observer");
98
+ d(this, "pendingDeletions", /* @__PURE__ */ new Set());
99
+ d(this, "pendingStyles", /* @__PURE__ */ new Map());
100
+ d(this, "isDomDirty", !1);
101
+ d(this, "isRunning", !1);
102
+ d(this, "pendingMask", he);
103
+ d(this, "mutationTimer", null);
104
+ d(this, "cssTimer", null);
105
+ d(this, "resizeConfig");
106
+ d(this, "resizeTimer", null);
107
+ d(this, "isResizing", !1);
108
+ d(this, "lastScrollX", 0);
109
+ d(this, "lastScrollY", 0);
110
+ d(this, "scrollTimer", null);
111
+ d(this, "onBeforeRender", /* @__PURE__ */ new Set());
112
+ d(this, "onLayoutChange", /* @__PURE__ */ new Set());
113
+ d(this, "onStyleChange", /* @__PURE__ */ new Set());
114
+ d(this, "onScrollChange", /* @__PURE__ */ new Set());
115
+ d(this, "onRender", /* @__PURE__ */ new Set());
116
+ d(this, "onTransitionFinished", (e) => {
117
+ this.target.contains(e.target) && this.mutationTimer === null && (this.cssTimer && clearTimeout(this.cssTimer), this.pendingStyles.size == 0 && (this.pendingMask |= q | ne, this.cssTimer = window.setTimeout(() => {
118
118
  this.isDomDirty = !0, this.cssTimer = null;
119
119
  }, 50)));
120
120
  });
121
- h(this, "onWindowResize", () => {
121
+ d(this, "onWindowResize", () => {
122
122
  if (!this.resizeConfig.enabled) {
123
123
  this.isDomDirty = !0;
124
124
  return;
@@ -127,41 +127,41 @@ class Ae {
127
127
  this.isDomDirty = !0, this.resizeConfig.onEnd && this.resizeConfig.onEnd(), this.isResizing = !1, this.resizeTimer = null;
128
128
  }, this.resizeConfig.delay);
129
129
  });
130
- h(this, "renderLoop", () => {
130
+ d(this, "renderLoop", () => {
131
131
  if (!this.isRunning)
132
132
  return;
133
133
  this.onBeforeRender.forEach((i) => i()), this.isDomDirty && (this.isDomDirty = !1, this.onLayoutChange.forEach((i) => i(this.pendingMask, this.pendingDeletions)), this.pendingDeletions.clear(), this.pendingMask = he);
134
134
  const e = window.scrollX, t = window.scrollY;
135
135
  (e !== this.lastScrollX || t !== this.lastScrollY) && (this.onScrollChange.forEach((i) => i(e, t)), this.lastScrollX = e, this.lastScrollY = t, this.scrollTimer && clearTimeout(this.scrollTimer), this.scrollTimer = window.setTimeout(() => {
136
- this.pendingMask |= j, this.isDomDirty = !0, this.scrollTimer = null;
136
+ this.pendingMask |= q, this.isDomDirty = !0, this.scrollTimer = null;
137
137
  }, 150)), this.pendingStyles.size > 0 && (this.onStyleChange.forEach((i) => i(this.pendingStyles)), this.pendingStyles.clear()), this.onRender.forEach((i) => i()), requestAnimationFrame(this.renderLoop);
138
138
  });
139
- var r, c;
139
+ var r, o;
140
140
  this.target = e;
141
141
  const i = (r = t.resizeDebounce) != null ? r : !0;
142
142
  i === !1 ? this.resizeConfig = { enabled: !1, delay: 0 } : i === !0 ? this.resizeConfig = { enabled: !0, delay: 150 } : this.resizeConfig = {
143
143
  enabled: !0,
144
- delay: (c = i.delay) != null ? c : 150,
144
+ delay: (o = i.delay) != null ? o : 150,
145
145
  onStart: i.onStart,
146
146
  onEnd: i.onEnd
147
147
  }, this.observer = new MutationObserver((n) => {
148
- let a = he;
149
- for (const o of n)
150
- if (o.type === "childList")
151
- a |= ye, o.removedNodes.length > 0 && o.removedNodes.forEach((l) => {
148
+ let c = he;
149
+ for (const a of n)
150
+ if (a.type === "childList")
151
+ c |= ve, a.removedNodes.length > 0 && a.removedNodes.forEach((l) => {
152
152
  l instanceof HTMLElement && this.pendingDeletions.add(l);
153
153
  });
154
- else if (o.type === "attributes")
155
- if (o.attributeName === "style") {
156
- a |= j | ae;
157
- const l = o.target, d = We(l.style);
158
- this.pendingStyles.set(l, d);
154
+ else if (a.type === "attributes")
155
+ if (a.attributeName === "style") {
156
+ c |= q | ne;
157
+ const l = a.target, u = He(l.style);
158
+ this.pendingStyles.set(l, u);
159
159
  } else
160
- (o.attributeName === "class" || o.attributeName && o.attributeName.startsWith("data-")) && (a |= j | ae);
160
+ (a.attributeName === "class" || a.attributeName && a.attributeName.startsWith("data-")) && (c |= q | ne);
161
161
  else
162
- o.type === "characterData" && (a |= be | j);
163
- if (a !== he) {
164
- if (this.pendingMask |= a, a & ye) {
162
+ a.type === "characterData" && (c |= ye | q);
163
+ if (c !== he) {
164
+ if (this.pendingMask |= c, c & ve) {
165
165
  this.clearTimers(), this.isDomDirty = !0;
166
166
  return;
167
167
  }
@@ -186,13 +186,13 @@ class Ae {
186
186
  this.mutationTimer && (clearTimeout(this.mutationTimer), this.mutationTimer = null), this.cssTimer && (clearTimeout(this.cssTimer), this.cssTimer = null), this.scrollTimer && (clearTimeout(this.scrollTimer), this.scrollTimer = null);
187
187
  }
188
188
  }
189
- const V = 1, Z = 2, A = {
189
+ const W = 1, j = 2, k = {
190
190
  BASE: 0,
191
191
  SELECTED: 1,
192
192
  getCaptureLayer: (s) => 31 - s,
193
193
  HIDDEN: 31
194
194
  }, Le = Object.values(N.VALUES);
195
- class ke {
195
+ class Ie {
196
196
  /**
197
197
  * Calculates or retrieves the exact alphabetic baseline (in pixels) for the given font.
198
198
  * @param font CSS font shorthand string (e.g., "400 16px Inter")
@@ -209,145 +209,145 @@ class ke {
209
209
  return 0;
210
210
  const t = document.createElement("div"), i = document.createElement("span"), r = document.createElement("img");
211
211
  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", i.style.margin = "0", i.style.padding = "0", i.style.border = "none", i.style.lineHeight = "normal", r.width = 1, r.height = 1, r.style.verticalAlign = "baseline", i.appendChild(document.createTextNode("Hidden Text")), t.appendChild(i), t.appendChild(r), document.body.appendChild(t);
212
- const c = r.offsetTop - i.offsetTop;
213
- return document.body.removeChild(t), c;
212
+ const o = r.offsetTop - i.offsetTop;
213
+ return document.body.removeChild(t), o;
214
214
  }
215
215
  }
216
- h(ke, "cache", /* @__PURE__ */ new Map());
217
- class He extends b.MeshBasicMaterial {
218
- constructor(t, i, r, c, n = 2) {
216
+ d(Ie, "cache", /* @__PURE__ */ new Map());
217
+ class Ge extends y.MeshBasicMaterial {
218
+ constructor(t, i, r, o, n = 2) {
219
219
  super({
220
220
  transparent: !0,
221
- side: b.FrontSide,
221
+ side: y.FrontSide,
222
222
  color: 16777215
223
223
  });
224
- h(this, "canvas");
225
- h(this, "ctx");
226
- h(this, "qualityFactor");
224
+ d(this, "canvas");
225
+ d(this, "ctx");
226
+ d(this, "qualityFactor");
227
227
  if (this.canvas = document.createElement("canvas"), this.ctx = this.canvas.getContext("2d"), !this.ctx)
228
228
  throw new Error("[Mirage] Failed to create canvas context");
229
- this.qualityFactor = n, this.map = new b.CanvasTexture(this.canvas), this.map.colorSpace = b.LinearSRGBColorSpace, this.map.minFilter = b.LinearFilter, this.map.magFilter = b.LinearFilter, this.updateText(t, i, r, c);
229
+ 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, i, r, o);
230
230
  }
231
231
  wrapText(t, i) {
232
232
  const r = t.split(`
233
- `), c = [];
233
+ `), o = [];
234
234
  return r.forEach((n) => {
235
- const a = n.match(/[^\s\-]+\-?|\-|\s+/g) || [];
236
- if (a.length === 0) {
237
- c.push("");
235
+ const c = n.match(/[^\s\-]+\-?|\-|\s+/g) || [];
236
+ if (c.length === 0) {
237
+ o.push("");
238
238
  return;
239
239
  }
240
- let o = a[0];
241
- for (let l = 1; l < a.length; l++) {
242
- const d = a[l];
243
- this.ctx.measureText(o + d).width <= i + 2 ? o += d : (o && c.push(o), o = d.trimStart());
240
+ let a = c[0];
241
+ for (let l = 1; l < c.length; l++) {
242
+ const u = c[l];
243
+ this.ctx.measureText(a + u).width <= i + 2 ? a += u : (a && o.push(a), a = u.trimStart());
244
244
  }
245
- o && c.push(o);
246
- }), c;
245
+ a && o.push(a);
246
+ }), o;
247
247
  }
248
- updateText(t, i, r, c, n) {
248
+ updateText(t, i, r, o, n) {
249
249
  n !== void 0 && (this.qualityFactor = n);
250
- const o = (window.devicePixelRatio || 1) * this.qualityFactor, l = r * o, d = c * o;
251
- 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(o, 0, 0, o, 0, 0), this.ctx.font = i.font, this.ctx.fillStyle = i.color, this.ctx.textBaseline = "alphabetic", this.ctx.globalAlpha = 1;
252
- const f = this.wrapText(t, r), y = i.lineHeight, p = ke.getBaseline(i.font);
253
- f.forEach((u, g) => {
254
- const w = g * y + p;
255
- let R = 0;
256
- i.textAlign === "center" ? R = r / 2 : i.textAlign === "right" && (R = r), this.ctx.textAlign = i.textAlign, this.ctx.fillText(u, R, w);
250
+ const a = (window.devicePixelRatio || 1) * this.qualityFactor, l = r * a, u = o * a;
251
+ this.canvas.width !== l || this.canvas.height !== u ? (this.canvas.width = l, this.canvas.height = u) : this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height), this.ctx.setTransform(a, 0, 0, a, 0, 0), this.ctx.font = i.font, this.ctx.fillStyle = i.color, this.ctx.textBaseline = "alphabetic", this.ctx.globalAlpha = 1;
252
+ const h = this.wrapText(t, r), f = i.lineHeight, v = Ie.getBaseline(i.font);
253
+ h.forEach((g, p) => {
254
+ const E = p * f + v;
255
+ let L = 0;
256
+ i.textAlign === "center" ? L = r / 2 : i.textAlign === "right" && (L = r), this.ctx.textAlign = i.textAlign, this.ctx.fillText(g, L, E);
257
257
  }), this.map && (this.map.needsUpdate = !0);
258
258
  }
259
259
  dispose() {
260
260
  this.map && this.map.dispose(), super.dispose();
261
261
  }
262
262
  }
263
- function ee(s) {
263
+ function K(s) {
264
264
  return typeof s == "number" ? s : parseFloat(s) || 0;
265
265
  }
266
- function ce(s) {
266
+ function oe(s) {
267
267
  if (!s || s === "transparent")
268
- return { color: new b.Color(16777215), alpha: 0 };
268
+ return { color: new y.Color(16777215), alpha: 0 };
269
269
  const e = s.match(
270
270
  /rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\)/
271
271
  );
272
272
  if (e) {
273
- const t = parseInt(e[1], 10), i = parseInt(e[2], 10), r = parseInt(e[3], 10), c = e[4] !== void 0 ? parseFloat(e[4]) : 1;
274
- return { color: new b.Color(`rgb(${t}, ${i}, ${r})`), alpha: c };
273
+ const t = parseInt(e[1], 10), i = parseInt(e[2], 10), r = parseInt(e[3], 10), o = e[4] !== void 0 ? parseFloat(e[4]) : 1;
274
+ return { color: new y.Color(`rgb(${t}, ${i}, ${r})`), alpha: o };
275
275
  }
276
- return { color: new b.Color(s), alpha: 1 };
276
+ return { color: new y.Color(s), alpha: 1 };
277
277
  }
278
- function Ge(s) {
278
+ function $e(s) {
279
279
  const e = [];
280
280
  let t = "", i = 0;
281
281
  for (let r = 0; r < s.length; r++) {
282
- const c = s[r];
283
- if (c === "(")
282
+ const o = s[r];
283
+ if (o === "(")
284
284
  i++;
285
- else if (c === ")")
285
+ else if (o === ")")
286
286
  i--;
287
- else if (c === "," && i === 0) {
287
+ else if (o === "," && i === 0) {
288
288
  e.push(t.trim()), t = "";
289
289
  continue;
290
290
  }
291
- t += c;
291
+ t += o;
292
292
  }
293
293
  return t && e.push(t.trim()), e;
294
294
  }
295
- function $e(s) {
295
+ function qe(s) {
296
296
  if (!s || typeof s != "string" || !s.includes("linear-gradient"))
297
297
  return null;
298
298
  const e = s.match(/linear-gradient\((.*)\)/);
299
299
  if (!e)
300
300
  return null;
301
- const t = e[1], i = Ge(t);
302
- let r = Math.PI, c = 0;
301
+ const t = e[1], i = $e(t);
302
+ let r = Math.PI, o = 0;
303
303
  const n = i[0].trim();
304
304
  if (n.startsWith("to "))
305
- n === "to top" ? r = 0 : n === "to right" ? r = Math.PI / 2 : n === "to bottom" ? r = Math.PI : n === "to left" ? r = Math.PI * 1.5 : n === "to top right" || n === "to right top" ? r = Math.PI / 4 : n === "to bottom right" || n === "to right bottom" ? r = Math.PI * 0.75 : n === "to bottom left" || n === "to left bottom" ? r = Math.PI * 1.25 : (n === "to top left" || n === "to left top") && (r = Math.PI * 1.75), c = 1;
305
+ n === "to top" ? r = 0 : n === "to right" ? r = Math.PI / 2 : n === "to bottom" ? r = Math.PI : n === "to left" ? r = Math.PI * 1.5 : n === "to top right" || n === "to right top" ? r = Math.PI / 4 : n === "to bottom right" || n === "to right bottom" ? r = Math.PI * 0.75 : n === "to bottom left" || n === "to left bottom" ? r = Math.PI * 1.25 : (n === "to top left" || n === "to left top") && (r = Math.PI * 1.75), o = 1;
306
306
  else if (n.endsWith("deg") || n.endsWith("rad") || n.endsWith("turn")) {
307
- const o = parseFloat(n);
308
- n.endsWith("deg") ? r = o * (Math.PI / 180) : n.endsWith("rad") ? r = o : n.endsWith("turn") && (r = o * Math.PI * 2), c = 1;
309
- }
310
- const a = [];
311
- for (let o = c; o < i.length && !(a.length >= 8); o++) {
312
- const l = i[o].trim(), d = l.lastIndexOf(" ");
313
- let f = l, y = null;
314
- if (d !== -1 && !l.endsWith(")")) {
315
- const u = l.substring(d + 1);
316
- (u.endsWith("%") || u.endsWith("px") || !isNaN(parseFloat(u))) && (f = l.substring(0, d).trim(), y = u);
307
+ const a = parseFloat(n);
308
+ n.endsWith("deg") ? r = a * (Math.PI / 180) : n.endsWith("rad") ? r = a : n.endsWith("turn") && (r = a * Math.PI * 2), o = 1;
309
+ }
310
+ const c = [];
311
+ for (let a = o; a < i.length && !(c.length >= 8); a++) {
312
+ const l = i[a].trim(), u = l.lastIndexOf(" ");
313
+ let h = l, f = null;
314
+ if (u !== -1 && !l.endsWith(")")) {
315
+ const g = l.substring(u + 1);
316
+ (g.endsWith("%") || g.endsWith("px") || !isNaN(parseFloat(g))) && (h = l.substring(0, u).trim(), f = g);
317
317
  }
318
- const p = ce(f);
319
- a.push({
320
- color: p.color,
321
- alpha: p.alpha,
322
- rawStop: y,
318
+ const v = oe(h);
319
+ c.push({
320
+ color: v.color,
321
+ alpha: v.alpha,
322
+ rawStop: f,
323
323
  stop: 0
324
324
  });
325
325
  }
326
- if (a.length > 0) {
327
- for (let l = 0; l < a.length; l++)
328
- a[l].rawStop !== null && (a[l].stop = parseFloat(a[l].rawStop) / 100);
329
- a[0].rawStop === null && (a[0].stop = 0), a.length > 1 && a[a.length - 1].rawStop === null && (a[a.length - 1].stop = 1);
330
- let o = 0;
331
- for (let l = 1; l < a.length; l++)
332
- if (a[l].rawStop !== null || l === a.length - 1) {
333
- const d = l - o;
334
- if (d > 1) {
335
- const f = a[o].stop, p = (a[l].stop - f) / d;
336
- for (let u = 1; u < d; u++)
337
- a[o + u].stop = f + p * u;
326
+ if (c.length > 0) {
327
+ for (let l = 0; l < c.length; l++)
328
+ c[l].rawStop !== null && (c[l].stop = parseFloat(c[l].rawStop) / 100);
329
+ c[0].rawStop === null && (c[0].stop = 0), c.length > 1 && c[c.length - 1].rawStop === null && (c[c.length - 1].stop = 1);
330
+ let a = 0;
331
+ for (let l = 1; l < c.length; l++)
332
+ if (c[l].rawStop !== null || l === c.length - 1) {
333
+ const u = l - a;
334
+ if (u > 1) {
335
+ const h = c[a].stop, v = (c[l].stop - h) / u;
336
+ for (let g = 1; g < u; g++)
337
+ c[a + g].stop = h + v * g;
338
338
  }
339
- o = l;
339
+ a = l;
340
340
  }
341
341
  }
342
- return { angle: r, stops: a };
342
+ return { angle: r, stops: c };
343
343
  }
344
- const qe = `varying vec2 vUv;
344
+ const je = `varying vec2 vUv;
345
345
  varying vec4 vScreenPos;
346
346
  void main() {
347
347
  vUv = uv;
348
348
  gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
349
349
  vScreenPos = gl_Position;
350
- }`, je = `varying vec2 vUv;
350
+ }`, Ke = `varying vec2 vUv;
351
351
  uniform vec2 uSize;
352
352
  uniform vec4 uBorderRadius;
353
353
  uniform float uBorderWidth;
@@ -476,85 +476,85 @@ void main() {
476
476
 
477
477
  // #include <colorspace_fragment>
478
478
  }
479
- `, Ke = `uniform sampler2D uTexture;
479
+ `, Je = `uniform sampler2D uTexture;
480
480
  varying vec4 vScreenPos;
481
481
  uniform vec2 uTextureRepeat;
482
- uniform vec2 uTextureOffset;`, Je = `vec2 screenUv = (vScreenPos.xy / vScreenPos.w) * 0.5 + 0.5;
482
+ uniform vec2 uTextureOffset;`, Qe = `vec2 screenUv = (vScreenPos.xy / vScreenPos.w) * 0.5 + 0.5;
483
483
  vec2 resultUv = screenUv;
484
484
 
485
- `, Qe = `vec4 texColor = texture2D(uTexture, resultUv);
485
+ `, Ze = `vec4 texColor = texture2D(uTexture, resultUv);
486
486
  baseColor = blendSrcOver(baseColor, texColor);`, Re = {
487
- vertexShader: qe,
488
- fragmentShader: je
487
+ vertexShader: je,
488
+ fragmentShader: Ke
489
489
  }, me = {
490
- declChunk: Ke,
491
- uvChunk: Je,
492
- baseColorChunk: Qe
490
+ declChunk: Je,
491
+ uvChunk: Qe,
492
+ baseColorChunk: Ze
493
493
  };
494
- function Ze(s, e, t, i = null, r) {
495
- var L;
496
- const c = i !== null || !!s.imageSrc;
494
+ function et(s, e, t, i = null, r) {
495
+ var R;
496
+ const o = i !== null || !!s.imageSrc;
497
497
  let n = "";
498
- const a = {};
498
+ const c = {};
499
499
  if (r != null && r.uniforms)
500
- for (const [E, x] of Object.entries(r.uniforms))
501
- typeof x == "number" ? (n += `uniform float ${E};
502
- `, a[E] = { value: x }) : Array.isArray(x) ? x.length === 2 ? (n += `uniform vec2 ${E};
503
- `, a[E] = { value: new b.Vector2(...x) }) : x.length === 3 ? (n += `uniform vec3 ${E};
504
- `, a[E] = { value: new b.Vector3(...x) }) : x.length === 4 && (n += `uniform vec4 ${E};
505
- `, a[E] = { value: new b.Vector4(...x) }) : (n += `uniform float ${E};
506
- `, a[E] = { value: x });
507
- const o = (c ? me.declChunk : "") + `
500
+ for (const [x, w] of Object.entries(r.uniforms))
501
+ typeof w == "number" ? (n += `uniform float ${x};
502
+ `, c[x] = { value: w }) : Array.isArray(w) ? w.length === 2 ? (n += `uniform vec2 ${x};
503
+ `, c[x] = { value: new y.Vector2(...w) }) : w.length === 3 ? (n += `uniform vec3 ${x};
504
+ `, c[x] = { value: new y.Vector3(...w) }) : w.length === 4 && (n += `uniform vec4 ${x};
505
+ `, c[x] = { value: new y.Vector4(...w) }) : (n += `uniform float ${x};
506
+ `, c[x] = { value: w });
507
+ const a = (o ? me.declChunk : "") + `
508
508
  ` + n, l = s.isTraveler ? me.uvChunk : `vec2 resultUv = vUv * uTextureRepeat + uTextureOffset;
509
- `, d = c ? l + ((r == null ? void 0 : r.uvModifier) || "") : "", f = c ? me.baseColorChunk : "", y = (r == null ? void 0 : r.colorModifier) || "", p = Re.fragmentShader.replace("#INJECT_DECLARATIONS", o).replace("#INJECT_UV_MODIFIER", d).replace("#INJECT_BASE_COLOR", f).replace("#INJECT_COLOR_MODIFIER", y), u = ce(s.backgroundColor), g = ce(s.borderColor), w = {
510
- uSize: { value: new b.Vector2(e, t) },
509
+ `, u = o ? l + ((r == null ? void 0 : r.uvModifier) || "") : "", h = o ? me.baseColorChunk : "", f = (r == null ? void 0 : r.colorModifier) || "", v = Re.fragmentShader.replace("#INJECT_DECLARATIONS", a).replace("#INJECT_UV_MODIFIER", u).replace("#INJECT_BASE_COLOR", h).replace("#INJECT_COLOR_MODIFIER", f), g = oe(s.backgroundColor), p = oe(s.borderColor), E = {
510
+ uSize: { value: new y.Vector2(e, t) },
511
511
  uBgColor: {
512
- value: new b.Vector4(
513
- u.color.r,
514
- u.color.g,
515
- u.color.b,
516
- u.alpha
517
- )
518
- },
519
- uBorderColor: {
520
- value: new b.Vector4(
512
+ value: new y.Vector4(
521
513
  g.color.r,
522
514
  g.color.g,
523
515
  g.color.b,
524
516
  g.alpha
525
517
  )
526
518
  },
527
- uBorderRadius: { value: new b.Vector4(0, 0, 0, 0) },
528
- uBorderWidth: { value: ee(s.borderWidth) },
529
- uOpacity: { value: (L = s.opacity) != null ? L : 1 },
519
+ uBorderColor: {
520
+ value: new y.Vector4(
521
+ p.color.r,
522
+ p.color.g,
523
+ p.color.b,
524
+ p.alpha
525
+ )
526
+ },
527
+ uBorderRadius: { value: new y.Vector4(0, 0, 0, 0) },
528
+ uBorderWidth: { value: K(s.borderWidth) },
529
+ uOpacity: { value: (R = s.opacity) != null ? R : 1 },
530
530
  uTexture: { value: null },
531
- uTextureRepeat: { value: new b.Vector2(1, 1) },
532
- uTextureOffset: { value: new b.Vector2(0, 0) },
531
+ uTextureRepeat: { value: new y.Vector2(1, 1) },
532
+ uTextureOffset: { value: new y.Vector2(0, 0) },
533
533
  uGradientCount: { value: 0 },
534
534
  uGradientAngle: { value: 0 },
535
535
  uGradientColors: {
536
- value: Array.from({ length: 8 }, () => new b.Vector4(0, 0, 0, 0))
536
+ value: Array.from({ length: 8 }, () => new y.Vector4(0, 0, 0, 0))
537
537
  },
538
538
  uGradientStops: { value: new Float32Array(8) }
539
539
  };
540
- Ie(w.uBorderRadius.value, s.borderRadius), c && (w.uTexture.value = i);
541
- const R = new b.ShaderMaterial({
542
- uniforms: G(G({}, w), a),
540
+ Be(E.uBorderRadius.value, s.borderRadius), o && (E.uTexture.value = i);
541
+ const L = new y.ShaderMaterial({
542
+ uniforms: G(G({}, E), c),
543
543
  vertexShader: Re.vertexShader,
544
- fragmentShader: p,
544
+ fragmentShader: v,
545
545
  transparent: !0,
546
- side: b.FrontSide
546
+ side: y.FrontSide
547
547
  // for better performance
548
548
  });
549
- return s.backgroundImage && ve(R, { backgroundImage: s.backgroundImage }), R;
549
+ return s.backgroundImage && be(L, { backgroundImage: s.backgroundImage }), L;
550
550
  }
551
- function et(s, e, t, i, r) {
552
- const c = ee(e.borderWidth);
553
- ve(s, {
551
+ function tt(s, e, t, i, r) {
552
+ const o = K(e.borderWidth);
553
+ be(s, {
554
554
  width: t,
555
555
  height: i,
556
556
  borderRadius: e.borderRadius,
557
- borderWidth: c,
557
+ borderWidth: o,
558
558
  backgroundColor: e.backgroundColor,
559
559
  borderColor: e.borderColor,
560
560
  opacity: e.opacity,
@@ -562,9 +562,9 @@ function et(s, e, t, i, r) {
562
562
  backgroundImage: e.backgroundImage
563
563
  });
564
564
  }
565
- function ve(s, e) {
566
- var i, r, c;
567
- if (e.width !== void 0 && e.height !== void 0 && s.uniforms.uSize.value.set(e.width, e.height), e.borderRadius !== void 0 && Ie(s.uniforms.uBorderRadius.value, e.borderRadius), e.borderWidth !== void 0 && (s.uniforms.uBorderWidth.value = e.borderWidth), e.backgroundColor !== void 0)
565
+ function be(s, e) {
566
+ var i, r, o;
567
+ if (e.width !== void 0 && e.height !== void 0 && s.uniforms.uSize.value.set(e.width, e.height), e.borderRadius !== void 0 && Be(s.uniforms.uBorderRadius.value, e.borderRadius), e.borderWidth !== void 0 && (s.uniforms.uBorderWidth.value = e.borderWidth), e.backgroundColor !== void 0)
568
568
  if (Array.isArray(e.backgroundColor)) {
569
569
  const n = s.uniforms.uBgColor.value.w;
570
570
  s.uniforms.uBgColor.value.set(
@@ -574,7 +574,7 @@ function ve(s, e) {
574
574
  n
575
575
  );
576
576
  } else if (typeof e.backgroundColor == "string") {
577
- const n = ce(e.backgroundColor);
577
+ const n = oe(e.backgroundColor);
578
578
  s.uniforms.uBgColor.value.set(
579
579
  n.color.r,
580
580
  n.color.g,
@@ -600,7 +600,7 @@ function ve(s, e) {
600
600
  n
601
601
  );
602
602
  } else if (typeof e.borderColor == "string") {
603
- const n = ce(e.borderColor);
603
+ const n = oe(e.borderColor);
604
604
  s.uniforms.uBorderColor.value.set(
605
605
  n.color.r,
606
606
  n.color.g,
@@ -619,42 +619,42 @@ function ve(s, e) {
619
619
  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);
620
620
  const t = e.texture !== void 0 ? e.texture : (i = s.uniforms.uTexture) == null ? void 0 : i.value;
621
621
  if (t && (t.image instanceof ImageBitmap || t.image instanceof HTMLImageElement || t.image instanceof HTMLCanvasElement)) {
622
- const n = t.image.width, a = t.image.height, o = (r = e.width) != null ? r : s.uniforms.uSize.value.x, l = (c = e.height) != null ? c : s.uniforms.uSize.value.y;
623
- if (n && a && o && l) {
624
- const d = n / a, f = o / l;
625
- if (d > f) {
626
- const y = f / d;
627
- s.uniforms.uTextureRepeat.value.set(y, 1), s.uniforms.uTextureOffset.value.set((1 - y) / 2, 0);
622
+ const n = t.image.width, c = t.image.height, a = (r = e.width) != null ? r : s.uniforms.uSize.value.x, l = (o = e.height) != null ? o : s.uniforms.uSize.value.y;
623
+ if (n && c && a && l) {
624
+ const u = n / c, h = a / l;
625
+ if (u > h) {
626
+ const f = h / u;
627
+ s.uniforms.uTextureRepeat.value.set(f, 1), s.uniforms.uTextureOffset.value.set((1 - f) / 2, 0);
628
628
  } else {
629
- const y = d / f;
630
- s.uniforms.uTextureRepeat.value.set(1, y), s.uniforms.uTextureOffset.value.set(0, (1 - y) / 2);
629
+ const f = u / h;
630
+ s.uniforms.uTextureRepeat.value.set(1, f), s.uniforms.uTextureOffset.value.set(0, (1 - f) / 2);
631
631
  }
632
632
  }
633
633
  } else
634
634
  s.uniforms.uTextureRepeat && (s.uniforms.uTextureRepeat.value.set(1, 1), s.uniforms.uTextureOffset.value.set(0, 0));
635
635
  if (e.backgroundImage !== void 0) {
636
- const n = $e(e.backgroundImage);
636
+ const n = qe(e.backgroundImage);
637
637
  if (n) {
638
638
  s.uniforms.uGradientCount.value = n.stops.length, s.uniforms.uGradientAngle.value = n.angle;
639
- for (let a = 0; a < 8; a++)
640
- if (a < n.stops.length) {
641
- const o = n.stops[a];
642
- s.uniforms.uGradientColors.value[a].set(
643
- o.color.r,
644
- o.color.g,
645
- o.color.b,
646
- o.alpha
647
- ), s.uniforms.uGradientStops.value[a] = o.stop;
639
+ for (let c = 0; c < 8; c++)
640
+ if (c < n.stops.length) {
641
+ const a = n.stops[c];
642
+ s.uniforms.uGradientColors.value[c].set(
643
+ a.color.r,
644
+ a.color.g,
645
+ a.color.b,
646
+ a.alpha
647
+ ), s.uniforms.uGradientStops.value[c] = a.stop;
648
648
  } else
649
- s.uniforms.uGradientColors.value[a].set(0, 0, 0, 0), s.uniforms.uGradientStops.value[a] = 1;
649
+ s.uniforms.uGradientColors.value[c].set(0, 0, 0, 0), s.uniforms.uGradientStops.value[c] = 1;
650
650
  } else
651
651
  s.uniforms.uGradientCount.value = 0;
652
652
  }
653
653
  for (const n of Object.keys(e))
654
654
  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]);
655
655
  }
656
- function Ie(s, e) {
657
- var a, o, l, d;
656
+ function Be(s, e) {
657
+ var c, a, l, u;
658
658
  if (e == null) {
659
659
  s.set(0, 0, 0, 0);
660
660
  return;
@@ -667,71 +667,71 @@ function Ie(s, e) {
667
667
  s.set(e[0], e[1], e[2], e[3]);
668
668
  return;
669
669
  }
670
- const t = e.split("/")[0].trim().split(/\s+/), i = ee(t[0]), r = ee((a = t[1]) != null ? a : t[0]), c = ee((o = t[2]) != null ? o : t[0]), n = ee((d = (l = t[3]) != null ? l : t[1]) != null ? d : t[0]);
671
- s.set(i, r, c, n);
670
+ const t = e.split("/")[0].trim().split(/\s+/), i = K(t[0]), r = K((c = t[1]) != null ? c : t[0]), o = K((a = t[2]) != null ? a : t[0]), n = K((u = (l = t[3]) != null ? l : t[1]) != null ? u : t[0]);
671
+ s.set(i, r, o, n);
672
672
  }
673
673
  const H = {
674
- create(s, e, t, i, r, c = 2, n = null, a) {
675
- return s === "BOX" ? Ze(
674
+ create(s, e, t, i, r, o = 2, n = null, c) {
675
+ return s === "BOX" ? et(
676
676
  e,
677
677
  i,
678
678
  r,
679
679
  n,
680
- a
681
- ) : s === "TEXT" ? new He(
680
+ c
681
+ ) : s === "TEXT" ? new Ge(
682
682
  t || "",
683
683
  e,
684
684
  i,
685
685
  r,
686
- c
687
- ) : new b.MeshBasicMaterial({ visible: !1 });
686
+ o
687
+ ) : new y.MeshBasicMaterial({ visible: !1 });
688
688
  },
689
- update(s, e, t, i, r, c, n = 2, a) {
690
- e === "BOX" ? et(
689
+ update(s, e, t, i, r, o, n = 2, c) {
690
+ e === "BOX" ? tt(
691
691
  s,
692
692
  t,
693
693
  r,
694
- c,
695
- a
694
+ o,
695
+ c
696
696
  ) : e === "TEXT" && s.updateText(
697
697
  i || "",
698
698
  t,
699
699
  r,
700
- c,
700
+ o,
701
701
  n
702
702
  );
703
703
  },
704
704
  forceUpdateUniforms(s, e) {
705
- ve(s, e);
705
+ be(s, e);
706
706
  }
707
707
  };
708
- class tt {
709
- constructor(e) {
710
- h(this, "observer");
711
- h(this, "textures", /* @__PURE__ */ new WeakMap());
712
- h(this, "loadStatus", /* @__PURE__ */ new WeakMap());
713
- h(this, "elementUrls", /* @__PURE__ */ new WeakMap());
714
- h(this, "onUpdate");
715
- this.onUpdate = e, this.observer = new IntersectionObserver(
716
- (t) => {
717
- for (const i of t) {
718
- const r = i.target;
719
- i.isIntersecting ? this.loadTexture(r) : this.disposeTexture(r);
708
+ class rt {
709
+ constructor(e, t = !0) {
710
+ d(this, "observer");
711
+ d(this, "textures", /* @__PURE__ */ new WeakMap());
712
+ d(this, "loadStatus", /* @__PURE__ */ new WeakMap());
713
+ d(this, "elementUrls", /* @__PURE__ */ new WeakMap());
714
+ d(this, "onUpdate");
715
+ this.onUpdate = e, t && (this.observer = new IntersectionObserver(
716
+ (i) => {
717
+ for (const r of i) {
718
+ const o = r.target;
719
+ r.isIntersecting ? this.loadTexture(o) : this.disposeTexture(o);
720
720
  }
721
721
  },
722
722
  { rootMargin: "300px" }
723
- );
723
+ ));
724
724
  }
725
725
  register(e, t) {
726
726
  if (e.nodeType !== Node.ELEMENT_NODE)
727
727
  return;
728
- this.elementUrls.get(e) !== t && (this.elementUrls.set(e, t), this.observer.unobserve(e), this.observer.observe(e));
728
+ this.elementUrls.get(e) !== t && (this.elementUrls.set(e, t), this.observer ? (this.observer.unobserve(e), this.observer.observe(e)) : this.loadTexture(e));
729
729
  }
730
730
  unregister(e) {
731
- e.nodeType === Node.ELEMENT_NODE && this.observer.unobserve(e), this.disposeTexture(e), this.elementUrls.delete(e), this.loadStatus.delete(e);
731
+ e.nodeType === Node.ELEMENT_NODE && this.observer && this.observer.unobserve(e), this.disposeTexture(e), this.elementUrls.delete(e), this.loadStatus.delete(e);
732
732
  }
733
733
  loadTexture(e) {
734
- return we(this, null, function* () {
734
+ return Ce(this, null, function* () {
735
735
  if (this.loadStatus.get(e) || this.textures.has(e))
736
736
  return;
737
737
  const t = this.elementUrls.get(e);
@@ -740,9 +740,9 @@ class tt {
740
740
  try {
741
741
  let i;
742
742
  if (t.startsWith("data:image/svg+xml"))
743
- i = yield new Promise((c, n) => {
744
- const a = new Image();
745
- a.onload = () => c(a), a.onerror = n, a.src = t;
743
+ i = yield new Promise((o, n) => {
744
+ const c = new Image();
745
+ c.onload = () => o(c), c.onerror = n, c.src = t;
746
746
  });
747
747
  else {
748
748
  const n = yield (yield fetch(t)).blob();
@@ -752,8 +752,8 @@ class tt {
752
752
  "close" in i && i.close();
753
753
  return;
754
754
  }
755
- const r = new b.Texture(i);
756
- i instanceof HTMLImageElement || (r.flipY = !1), r.colorSpace = b.LinearSRGBColorSpace, r.needsUpdate = !0, this.textures.set(e, r), this.onUpdate(e, r);
755
+ const r = new y.Texture(i);
756
+ i instanceof HTMLImageElement || (r.flipY = !1), r.colorSpace = y.LinearSRGBColorSpace, r.needsUpdate = !0, this.textures.set(e, r), this.onUpdate(e, r);
757
757
  } catch (i) {
758
758
  console.warn("[MirageEngine] Failed to load texture:", t, i);
759
759
  } finally {
@@ -770,71 +770,78 @@ class tt {
770
770
  return this.textures.get(e);
771
771
  }
772
772
  disposeAll() {
773
- this.observer.disconnect();
773
+ this.observer && this.observer.disconnect();
774
774
  }
775
775
  }
776
- class rt {
776
+ class it {
777
777
  constructor(e, t, i, r) {
778
- h(this, "canvas");
779
- h(this, "scene");
780
- h(this, "camera");
781
- h(this, "renderer");
782
- h(this, "renderTargets", []);
783
- h(this, "renderOrder", 0);
784
- h(this, "qualityFactor", 2);
785
- h(this, "mode", "overlay");
786
- h(this, "clipArea", 1);
787
- h(this, "targetLayer", "base");
788
- h(this, "target");
789
- h(this, "mountContainer");
790
- h(this, "registry");
791
- h(this, "targetRect");
792
- h(this, "travelersByLayer", Array.from(
793
- { length: U.MAX_LAYERS },
778
+ d(this, "canvas");
779
+ d(this, "scene");
780
+ d(this, "camera");
781
+ d(this, "renderer");
782
+ d(this, "renderTargets", []);
783
+ d(this, "renderOrder", 0);
784
+ d(this, "qualityFactor", 2);
785
+ d(this, "mode", "overlay");
786
+ d(this, "canvasSize", "viewport");
787
+ d(this, "clipArea", 1);
788
+ d(this, "targetLayer", "base");
789
+ d(this, "overscan", 200);
790
+ d(this, "target");
791
+ d(this, "mountContainer");
792
+ d(this, "registry");
793
+ d(this, "targetRect");
794
+ d(this, "travelersByLayer", Array.from(
795
+ { length: F.MAX_LAYERS },
794
796
  () => /* @__PURE__ */ new Set()
795
797
  ));
796
- h(this, "textureManager");
798
+ d(this, "textureManager");
797
799
  // private meshMap: Map<HTMLElement, THREE.Mesh> = new Map();
798
- h(this, "fixedMeshes", /* @__PURE__ */ new Set());
799
- var a, o, l, d;
800
- this.target = e, this.mountContainer = i, this.registry = r, this.textureManager = new tt((f, y) => {
801
- const p = this.registry.get(f);
802
- p && p.material instanceof b.ShaderMaterial && H.forceUpdateUniforms(p.material, { texture: y });
803
- }), this.mode = (a = t.mode) != null ? a : "overlay", this.clipArea = (o = t.travelerClipArea) != null ? o : 1, this.targetLayer = (l = t.layer) != null ? l : "base", this.canvas = document.createElement("canvas"), this.scene = new b.Scene(), this.targetRect = this.target.getBoundingClientRect();
804
- const c = this.targetRect.width, n = this.targetRect.height;
805
- this.camera = new b.OrthographicCamera(
806
- c / -2,
807
- c / 2,
800
+ d(this, "fixedMeshes", /* @__PURE__ */ new Set());
801
+ var c, a, l, u, h;
802
+ this.target = e, this.mountContainer = i, this.registry = r, this.mode = (c = t.mode) != null ? c : "overlay", this.canvasSize = (a = t.canvasSize) != null ? a : "viewport", this.clipArea = (l = t.travelerClipArea) != null ? l : 1, this.targetLayer = (u = t.layer) != null ? u : "base", this.textureManager = new rt((f, v) => {
803
+ const g = this.registry.get(f);
804
+ g && g.material instanceof y.ShaderMaterial && H.forceUpdateUniforms(g.material, { texture: v });
805
+ }, this.isViewport), this.canvas = document.createElement("canvas"), this.scene = new y.Scene(), this.targetRect = this.target.getBoundingClientRect();
806
+ const o = this.isViewport ? window.innerWidth + this.overscan * 2 : this.targetRect.width, n = this.isViewport ? window.innerHeight + this.overscan * 2 : this.targetRect.height;
807
+ this.camera = new y.OrthographicCamera(
808
+ o / -2,
809
+ o / 2,
808
810
  n / 2,
809
811
  n / -2,
810
812
  1,
811
813
  1e3
812
- ), this.camera.position.z = 100, this.camera.layers.set(this.getSceneLayer()), this.renderer = new b.WebGLRenderer({
814
+ ), this.camera.position.z = 100, this.camera.layers.set(this.getSceneLayer()), this.renderer = new y.WebGLRenderer({
813
815
  canvas: this.canvas,
814
816
  alpha: !0,
815
817
  antialias: !0
816
818
  // [new]
817
819
  // premultipliedAlpha: true
818
- }), b.ColorManagement.enabled = !1, this.renderer.outputColorSpace = b.LinearSRGBColorSpace, this.renderer.setPixelRatio(window.devicePixelRatio), this.renderer.setSize(c, n), this.applyTextQuality((d = t.quality) != null ? d : "medium");
820
+ }), y.ColorManagement.enabled = !1, this.renderer.outputColorSpace = y.LinearSRGBColorSpace, this.renderer.setPixelRatio(window.devicePixelRatio), this.renderer.setSize(o, n), this.applyTextQuality((h = t.quality) != null ? h : "medium");
821
+ }
822
+ get isViewport() {
823
+ return this.mode === "overlay" && this.canvasSize === "viewport";
819
824
  }
820
825
  getSceneLayer() {
821
- return typeof this.targetLayer == "number" ? this.targetLayer : this.targetLayer === "selected" ? A.SELECTED : A.BASE;
826
+ return typeof this.targetLayer == "number" ? this.targetLayer : this.targetLayer === "selected" ? k.SELECTED : k.BASE;
822
827
  }
823
828
  createRenderTarget() {
824
- for (let e = 0; e < U.MAX_LAYERS; e++)
829
+ for (let e = 0; e < F.MAX_LAYERS; e++) {
830
+ const t = this.isViewport ? window.innerWidth + this.overscan * 2 : this.targetRect.width, i = this.isViewport ? window.innerHeight + this.overscan * 2 : this.targetRect.height;
825
831
  this.renderTargets.push(
826
- new b.WebGLRenderTarget(
827
- this.targetRect.width * this.qualityFactor,
828
- this.targetRect.height * this.qualityFactor,
832
+ new y.WebGLRenderTarget(
833
+ t * this.qualityFactor,
834
+ i * this.qualityFactor,
829
835
  {
830
- minFilter: b.LinearFilter,
831
- magFilter: b.LinearFilter,
832
- format: b.RGBAFormat,
836
+ minFilter: y.LinearFilter,
837
+ magFilter: y.LinearFilter,
838
+ format: y.RGBAFormat,
833
839
  stencilBuffer: !1,
834
840
  depthBuffer: !0
835
841
  }
836
842
  )
837
843
  );
844
+ }
838
845
  }
839
846
  applyTextQuality(e) {
840
847
  if (typeof e == "number") {
@@ -860,7 +867,8 @@ class rt {
860
867
  this.mountContainer.prepend(this.canvas), this.canvas.style.pointerEvents = this.mode === "overlay" ? "none" : "auto", this.updateCanvasLayout();
861
868
  }
862
869
  updateCanvasLayout() {
863
- this.canvas.style.width = `${this.targetRect.width}px`, this.canvas.style.height = `${this.targetRect.height}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 = "absolute", this.canvas.style.top = `${this.target.offsetTop}px`, this.canvas.style.left = `${this.target.offsetLeft}px`, this.canvas.style.display = "block");
870
+ const e = this.isViewport ? window.innerWidth + this.overscan * 2 : this.targetRect.width, t = this.isViewport ? window.innerHeight + this.overscan * 2 : this.targetRect.height;
871
+ 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");
864
872
  }
865
873
  updateUniforms(e, t) {
866
874
  const i = this.registry.get(e);
@@ -886,16 +894,16 @@ class rt {
886
894
  this.camera.left = e / -2, this.camera.right = e / 2, this.camera.top = t / 2, this.camera.bottom = t / -2, this.camera.updateProjectionMatrix();
887
895
  }
888
896
  syncScene(e, t) {
889
- const i = this.target.getBoundingClientRect(), r = Math.abs(i.width - this.targetRect.width) > 0.1 || Math.abs(i.height - this.targetRect.height) > 0.1, c = this.mode === "overlay" && (Math.abs(i.top - this.targetRect.top) > 0.1 || Math.abs(i.left - this.targetRect.left) > 0.1);
890
- r ? (this.targetRect = i, this.setSize(this.targetRect.width, this.targetRect.height), this.updateCanvasLayout()) : c ? (this.targetRect = i, this.updateCanvasLayout()) : this.targetRect = i, this.renderOrder = 0, this.reconcileNode(e), t.size > 0 && t.forEach((n) => {
891
- const a = this.registry.get(n);
892
- if (a) {
893
- this.scene.remove(a);
894
- for (const o of this.travelersByLayer)
895
- o.delete(a);
896
- this.fixedMeshes.delete(a), a.geometry.dispose(), a.userData.nativeMesh && (this.scene.remove(a.userData.nativeMesh), Array.isArray(a.userData.nativeMesh.material) ? a.userData.nativeMesh.material.forEach((o) => o.dispose()) : a.userData.nativeMesh.material.dispose(), a.userData.nativeMesh.geometry.dispose()), a.traverse((o) => {
897
- o instanceof b.Mesh && (o.geometry && o.geometry.dispose(), o.material && (Array.isArray(o.material) ? o.material.forEach((l) => l.dispose()) : o.material.dispose()));
898
- }), this.registry.remove(n), this.textureManager.unregister(n);
897
+ const i = this.target.getBoundingClientRect(), r = this.isViewport ? window.innerWidth + this.overscan * 2 : i.width, o = this.isViewport ? window.innerHeight + this.overscan * 2 : i.height, n = this.isViewport ? this.canvas.clientWidth : this.targetRect.width, c = this.isViewport ? this.canvas.clientHeight : this.targetRect.height, a = Math.abs(r - n) > 0.1 || Math.abs(o - c) > 0.1, l = this.mode === "overlay" && (Math.abs(i.top - this.targetRect.top) > 0.1 || Math.abs(i.left - this.targetRect.left) > 0.1);
898
+ a ? (this.targetRect = i, this.setSize(r, o), this.updateCanvasLayout()) : l ? (this.targetRect = i, this.updateCanvasLayout()) : this.targetRect = i, this.renderOrder = 0, this.reconcileNode(e), t.size > 0 && t.forEach((u) => {
899
+ const h = this.registry.get(u);
900
+ if (h) {
901
+ this.scene.remove(h);
902
+ for (const f of this.travelersByLayer)
903
+ f.delete(h);
904
+ 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((f) => f.dispose()) : h.userData.nativeMesh.material.dispose(), h.userData.nativeMesh.geometry.dispose()), h.traverse((f) => {
905
+ f instanceof y.Mesh && (f.geometry && f.geometry.dispose(), f.material && (Array.isArray(f.material) ? f.material.forEach((v) => v.dispose()) : f.material.dispose()));
906
+ }), this.registry.remove(u), this.textureManager.unregister(u);
899
907
  }
900
908
  });
901
909
  }
@@ -907,20 +915,20 @@ class rt {
907
915
  var i;
908
916
  let t = this.registry.get(e.element);
909
917
  if (!t) {
910
- const r = new b.PlaneGeometry(1, 1), c = e.isTraveler ? (i = this.renderTargets[e.captureLayer - 2]) == null ? void 0 : i.texture : this.textureManager.get(e.element), n = H.create(
918
+ const r = new y.PlaneGeometry(1, 1), o = e.isTraveler ? (i = this.renderTargets[e.captureLayer - 2]) == null ? void 0 : i.texture : this.textureManager.get(e.element), n = H.create(
911
919
  "BOX",
912
920
  e.styles,
913
921
  "",
914
922
  e.rect.width,
915
923
  e.rect.height,
916
924
  this.qualityFactor,
917
- c,
925
+ o,
918
926
  e.shaderHooks
919
927
  );
920
- t = new b.Mesh(r, n), e.type === "TEXT" && (t.name = "BG_MESH"), this.scene.add(t), this.registry.register(e.element, t), t.userData.baseMaterial = n;
928
+ t = new y.Mesh(r, n), e.type === "TEXT" && (t.name = "BG_MESH"), this.scene.add(t), this.registry.register(e.element, t), t.userData.baseMaterial = n;
921
929
  }
922
930
  if (this.updateMeshProperties(t, e), this.updateMeshLayers(t, e), e.isTraveler)
923
- for (let r = 0; r < U.MAX_LAYERS; r++)
931
+ for (let r = 0; r < F.MAX_LAYERS; r++)
924
932
  r === e.captureLayer - 2 ? this.travelersByLayer[r].add(t) : this.travelersByLayer[r].delete(t);
925
933
  else
926
934
  for (const r of this.travelersByLayer)
@@ -935,76 +943,83 @@ class rt {
935
943
  var l;
936
944
  const r = t.textLines || [
937
945
  { text: t.textContent || "", rect: t.rect }
938
- ], c = i ? t.nativeStyles : t.textStyles, n = JSON.stringify(c) + t.textContent + r.map((d) => d.text).join("|"), a = (l = e.userData) == null ? void 0 : l.textChildStyleHash;
939
- if (t.dirtyMask & be || n !== a) {
946
+ ], o = i ? t.nativeStyles : t.textStyles, n = JSON.stringify(o) + t.textContent + r.map((u) => u.text).join("|"), c = (l = e.userData) == null ? void 0 : l.textChildStyleHash;
947
+ if (t.dirtyMask & ye || n !== c) {
940
948
  e.children.filter(
941
- (u) => u.name.startsWith("TEXT_CHILD")
942
- ).forEach((u) => {
943
- var w;
944
- const g = u;
945
- (w = g.material.map) == null || w.dispose(), g.geometry.dispose(), e.remove(g);
949
+ (g) => g.name.startsWith("TEXT_CHILD")
950
+ ).forEach((g) => {
951
+ var E;
952
+ const p = g;
953
+ (E = p.material.map) == null || E.dispose(), p.geometry.dispose(), e.remove(p);
946
954
  });
947
- const f = t.rect, y = f.x + f.width / 2, p = f.y + f.height / 2;
948
- r.forEach((u, g) => {
949
- const w = H.create(
955
+ const h = t.rect, f = h.x + h.width / 2, v = h.y + h.height / 2;
956
+ r.forEach((g, p) => {
957
+ const E = H.create(
950
958
  "TEXT",
951
- c,
952
- u.text,
953
- u.rect.width,
954
- u.rect.height,
959
+ o,
960
+ g.text,
961
+ g.rect.width,
962
+ g.rect.height,
955
963
  this.qualityFactor
956
- ), R = new b.PlaneGeometry(1, 1), L = new b.Mesh(R, w);
957
- L.name = `TEXT_CHILD_${g}`;
958
- const E = t.rect.width === 0 ? 1 : u.rect.width / t.rect.width, x = t.rect.height === 0 ? 1 : u.rect.height / t.rect.height;
959
- L.scale.set(E, x, 1);
960
- const B = u.rect.x + u.rect.width / 2, F = u.rect.y + u.rect.height / 2, X = B - y, D = -(F - p);
961
- L.position.set(
962
- t.rect.width === 0 ? 0 : X / t.rect.width,
963
- t.rect.height === 0 ? 0 : D / t.rect.height,
964
+ ), L = new y.PlaneGeometry(1, 1), R = new y.Mesh(L, E);
965
+ R.name = `TEXT_CHILD_${p}`;
966
+ const x = t.rect.width === 0 ? 1 : g.rect.width / t.rect.width, w = t.rect.height === 0 ? 1 : g.rect.height / t.rect.height;
967
+ R.scale.set(x, w, 1);
968
+ const B = g.rect.x + g.rect.width / 2, M = g.rect.y + g.rect.height / 2, O = B - f, _ = -(M - v);
969
+ R.position.set(
970
+ t.rect.width === 0 ? 0 : O / t.rect.width,
971
+ t.rect.height === 0 ? 0 : _ / t.rect.height,
964
972
  5e-3
965
- ), e.add(L);
973
+ ), e.add(R);
966
974
  }), e.userData.textChildStyleHash = n;
967
975
  }
968
- e.children.forEach((d) => {
969
- if (!d.name.startsWith("TEXT_CHILD"))
976
+ e.children.forEach((u) => {
977
+ if (!u.name.startsWith("TEXT_CHILD"))
970
978
  return;
971
- const f = d, y = t.visibility & V ? A.BASE : A.HIDDEN;
972
- if (f.layers.set(y), t.visibility & Z && f.layers.enable(A.SELECTED), t.visibility & V)
979
+ const h = u, f = t.visibility & W ? k.BASE : k.HIDDEN;
980
+ if (h.layers.set(f), t.visibility & j && h.layers.enable(k.SELECTED), t.visibility & W)
973
981
  if (!i && t.nativeLayer !== void 0 && t.nativeStyles !== void 0)
974
- for (let p = t.captureLayer; p < t.nativeLayer; p++)
975
- f.layers.enable(A.getCaptureLayer(p));
982
+ for (let v = t.captureLayer; v < t.nativeLayer; v++)
983
+ h.layers.enable(k.getCaptureLayer(v));
976
984
  else if (i && t.nativeLayer !== void 0)
977
- for (let p = Math.max(t.captureLayer, t.nativeLayer); p <= U.MAX_LAYERS + 1; p++)
978
- f.layers.enable(A.getCaptureLayer(p));
985
+ for (let v = Math.max(t.captureLayer, t.nativeLayer); v <= F.MAX_LAYERS + 1; v++)
986
+ h.layers.enable(k.getCaptureLayer(v));
979
987
  else
980
- for (let p = t.captureLayer; p <= U.MAX_LAYERS + 1; p++)
981
- f.layers.enable(A.getCaptureLayer(p));
988
+ for (let v = t.captureLayer; v <= F.MAX_LAYERS + 1; v++)
989
+ h.layers.enable(k.getCaptureLayer(v));
982
990
  });
983
991
  }
984
992
  updateMeshProperties(e, t) {
985
- var B, F, X;
986
- const { rect: i, styles: r } = t, c = this.renderer.getPixelRatio(), n = this.renderer.domElement.width / c, a = this.renderer.domElement.height / c;
993
+ var x, w, B;
994
+ const { rect: i, styles: r } = t, o = this.renderer.getPixelRatio(), n = this.renderer.domElement.width / o, c = this.renderer.domElement.height / o;
987
995
  e.material = e.userData.baseMaterial, e.scale.set(i.width, i.height, 1), e.userData.domRect = pe(G({}, i), {
988
996
  width: i.width,
989
997
  height: i.height
990
998
  });
991
- const o = 1e-3;
999
+ const a = 1e-3;
992
1000
  this.renderOrder++;
993
- const l = this.targetRect.left + window.scrollX, d = this.targetRect.top + window.scrollY, f = i.x - l, y = i.y - d, p = f - n / 2 + i.width / 2, u = -y + a / 2 - i.height / 2;
1001
+ const l = this.targetRect.left + window.scrollX, u = this.targetRect.top + window.scrollY;
1002
+ let h, f;
1003
+ if (this.isViewport)
1004
+ h = i.x - window.innerWidth / 2 + i.width / 2, f = -i.y + window.innerHeight / 2 - i.height / 2;
1005
+ else {
1006
+ const M = i.x - l, O = i.y - u;
1007
+ h = M - n / 2 + i.width / 2, f = -O + c / 2 - i.height / 2;
1008
+ }
994
1009
  e.position.set(
995
- p,
996
- u,
997
- r.zIndex + this.renderOrder * o
1010
+ h,
1011
+ f,
1012
+ r.zIndex + this.renderOrder * a
998
1013
  );
999
- const g = i.x, w = i.y;
1000
- e.userData.basePosition = { x: p, y: u }, e.userData.originalBasePosition = { x: p, y: u }, e.userData.baseSize = { width: i.width, height: i.height }, e.userData.baseDOM = { x: g, y: w }, e.userData.isFixed = t.isFixed, e.userData.initialScroll = { x: window.scrollX, y: window.scrollY };
1001
- const R = t.element.nodeType === Node.TEXT_NODE ? t.element.parentElement : t.element, L = window.getComputedStyle(R);
1002
- let E = 0, x = 0;
1003
- if (L.transform && L.transform !== "none") {
1004
- const D = new DOMMatrix(L.transform);
1005
- E = D.m41, x = D.m42;
1014
+ const v = i.x, g = i.y;
1015
+ e.userData.basePosition = { x: h, y: f }, e.userData.originalBasePosition = { x: h, y: f }, e.userData.baseSize = { width: i.width, height: i.height }, e.userData.baseDOM = { x: v, y: g }, e.userData.isFixed = t.isFixed, e.userData.initialScroll = { x: window.scrollX, y: window.scrollY };
1016
+ const p = t.element.nodeType === Node.TEXT_NODE ? t.element.parentElement : t.element, E = window.getComputedStyle(p);
1017
+ let L = 0, R = 0;
1018
+ if (E.transform && E.transform !== "none") {
1019
+ const M = new DOMMatrix(E.transform);
1020
+ L = M.m41, R = M.m42;
1006
1021
  }
1007
- if (e.userData.baseTransform = { x: E, y: x }, delete e.userData.originRatioX, delete e.userData.originRatioY, H.update(
1022
+ if (e.userData.baseTransform = { x: L, y: R }, delete e.userData.originRatioX, delete e.userData.originRatioY, H.update(
1008
1023
  e.userData.baseMaterial,
1009
1024
  "BOX",
1010
1025
  r,
@@ -1012,94 +1027,104 @@ class rt {
1012
1027
  i.width,
1013
1028
  i.height,
1014
1029
  this.qualityFactor,
1015
- t.isTraveler ? (B = this.renderTargets[t.captureLayer - 2]) == null ? void 0 : B.texture : this.textureManager.get(t.element)
1030
+ t.isTraveler ? (x = this.renderTargets[t.captureLayer - 2]) == null ? void 0 : x.texture : this.textureManager.get(t.element)
1016
1031
  ), t.nativeStyles && t.nativeRect) {
1017
1032
  if (!e.userData.nativeMesh) {
1018
- const q = H.create(
1033
+ const A = H.create(
1019
1034
  "BOX",
1020
1035
  t.nativeStyles,
1021
1036
  "",
1022
1037
  t.nativeRect.width,
1023
1038
  t.nativeRect.height,
1024
1039
  this.qualityFactor,
1025
- t.isTraveler ? (F = this.renderTargets[t.captureLayer - 2]) == null ? void 0 : F.texture : this.textureManager.get(t.element),
1040
+ t.isTraveler ? (w = this.renderTargets[t.captureLayer - 2]) == null ? void 0 : w.texture : this.textureManager.get(t.element),
1026
1041
  t.shaderHooks
1027
- ), P = new b.Mesh(e.geometry, q);
1028
- t.type === "TEXT" && (P.name = "BG_MESH"), this.scene.add(P), e.userData.nativeMesh = P;
1042
+ ), Y = new y.Mesh(e.geometry, A);
1043
+ t.type === "TEXT" && (Y.name = "BG_MESH"), this.scene.add(Y), e.userData.nativeMesh = Y;
1029
1044
  }
1030
- const D = e.userData.nativeMesh, k = t.nativeRect.x - l, K = t.nativeRect.y - d, J = k - n / 2 + t.nativeRect.width / 2, Q = -K + a / 2 - t.nativeRect.height / 2;
1031
- D.scale.set(t.nativeRect.width, t.nativeRect.height, 1), D.position.set(
1032
- J,
1033
- Q,
1034
- t.nativeStyles.zIndex + this.renderOrder * o
1045
+ const M = e.userData.nativeMesh;
1046
+ let O, _;
1047
+ if (this.isViewport)
1048
+ O = t.nativeRect.x - window.innerWidth / 2 + t.nativeRect.width / 2, _ = -t.nativeRect.y + window.innerHeight / 2 - t.nativeRect.height / 2;
1049
+ else {
1050
+ const A = t.nativeRect.x - l, Y = t.nativeRect.y - u;
1051
+ O = A - n / 2 + t.nativeRect.width / 2, _ = -Y + c / 2 - t.nativeRect.height / 2;
1052
+ }
1053
+ M.scale.set(t.nativeRect.width, t.nativeRect.height, 1), M.position.set(
1054
+ O,
1055
+ _,
1056
+ t.nativeStyles.zIndex + this.renderOrder * a
1035
1057
  ), H.update(
1036
- D.material,
1058
+ M.material,
1037
1059
  "BOX",
1038
1060
  t.nativeStyles,
1039
1061
  "",
1040
1062
  t.nativeRect.width,
1041
1063
  t.nativeRect.height,
1042
1064
  this.qualityFactor,
1043
- t.isTraveler ? (X = this.renderTargets[t.captureLayer - 2]) == null ? void 0 : X.texture : this.textureManager.get(t.element)
1065
+ t.isTraveler ? (B = this.renderTargets[t.captureLayer - 2]) == null ? void 0 : B.texture : this.textureManager.get(t.element)
1044
1066
  );
1045
1067
  } else
1046
- e.userData.nativeMesh && (this.scene.remove(e.userData.nativeMesh), e.userData.nativeMesh.material instanceof b.Material && e.userData.nativeMesh.material.dispose(), delete e.userData.nativeMesh);
1068
+ 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);
1047
1069
  }
1048
1070
  updateMeshLayers(e, t) {
1049
- const i = t.visibility & V ? A.BASE : A.HIDDEN;
1050
- if (e.layers.set(i), t.visibility & Z && e.layers.enable(A.SELECTED), e.userData.nativeMesh && t.nativeLayer !== void 0) {
1071
+ const i = t.visibility & W ? k.BASE : k.HIDDEN;
1072
+ if (e.layers.set(i), t.visibility & j && e.layers.enable(k.SELECTED), e.userData.nativeMesh && t.nativeLayer !== void 0) {
1051
1073
  const r = e.userData.nativeMesh;
1052
- if (r.layers.set(A.HIDDEN), t.visibility & V) {
1053
- for (let c = t.captureLayer; c < t.nativeLayer; c++)
1054
- e.layers.enable(A.getCaptureLayer(c));
1055
- for (let c = Math.max(t.captureLayer, t.nativeLayer); c <= U.MAX_LAYERS + 1; c++)
1056
- r.layers.enable(A.getCaptureLayer(c));
1074
+ if (r.layers.set(k.HIDDEN), t.visibility & W) {
1075
+ for (let o = t.captureLayer; o < t.nativeLayer; o++)
1076
+ e.layers.enable(k.getCaptureLayer(o));
1077
+ for (let o = Math.max(t.captureLayer, t.nativeLayer); o <= F.MAX_LAYERS + 1; o++)
1078
+ r.layers.enable(k.getCaptureLayer(o));
1057
1079
  }
1058
- } else if (t.visibility & V)
1059
- for (let r = t.captureLayer; r <= U.MAX_LAYERS + 1; r++)
1060
- e.layers.enable(A.getCaptureLayer(r));
1080
+ } else if (t.visibility & W)
1081
+ for (let r = t.captureLayer; r <= F.MAX_LAYERS + 1; r++)
1082
+ e.layers.enable(k.getCaptureLayer(r));
1061
1083
  }
1062
1084
  captureRenderTarget(e, t, i) {
1063
1085
  if (e.size === 0 || !i)
1064
1086
  return;
1065
- const r = new b.Color(), c = this.renderer.getClearAlpha();
1087
+ const r = new y.Color(), o = this.renderer.getClearAlpha();
1066
1088
  this.renderer.getClearColor(r), this.renderer.setClearColor(0, 0), this.renderer.setRenderTarget(i), this.renderer.clear(), this.renderer.autoClear = !1, this.renderer.setScissorTest(!0), this.camera.layers.set(t);
1067
- const n = new b.Vector3(), a = this.targetRect.width, o = this.targetRect.height, l = this.renderer.getPixelRatio();
1068
- for (const d of e) {
1069
- n.setFromMatrixPosition(d.matrixWorld), n.project(this.camera);
1070
- const f = (n.x + 1) / 2 * a, y = (n.y + 1) / 2 * o;
1071
- let p = 0, u = 1;
1072
- typeof this.clipArea == "number" ? u = this.clipArea : this.clipArea.endsWith("%") ? u = parseFloat(this.clipArea) / 100 : this.clipArea.endsWith("px") && (p = parseFloat(this.clipArea));
1073
- const g = d.scale.x * u + 0.5, w = d.scale.y * u + 0.5, R = f - g / 2, L = y - w / 2, E = (R * this.qualityFactor - p) / l, x = (L * this.qualityFactor - p) / l, B = (g * this.qualityFactor + p * 2) / l, F = (w * this.qualityFactor + p * 2) / l;
1074
- this.renderer.setScissor(E, x, B, F), this.renderer.render(this.scene, this.camera);
1089
+ const n = new y.Vector3(), c = 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();
1090
+ for (const u of e) {
1091
+ n.setFromMatrixPosition(u.matrixWorld), n.project(this.camera);
1092
+ const h = (n.x + 1) / 2 * c, f = (n.y + 1) / 2 * a;
1093
+ let v = 0, g = 1;
1094
+ typeof this.clipArea == "number" ? g = this.clipArea : this.clipArea.endsWith("%") ? g = parseFloat(this.clipArea) / 100 : this.clipArea.endsWith("px") && (v = parseFloat(this.clipArea));
1095
+ const p = u.scale.x * g + 0.5, E = u.scale.y * g + 0.5, L = h - p / 2, R = f - E / 2, x = (L * this.qualityFactor - v) / l, w = (R * this.qualityFactor - v) / l, B = (p * this.qualityFactor + v * 2) / l, M = (E * this.qualityFactor + v * 2) / l;
1096
+ this.renderer.setScissor(x, w, B, M), this.renderer.render(this.scene, this.camera);
1075
1097
  }
1076
- this.renderer.setScissorTest(!1), this.renderer.autoClear = !0, this.renderer.setRenderTarget(null), this.camera.layers.set(this.getSceneLayer()), this.renderer.setClearColor(r, c);
1098
+ this.renderer.setScissorTest(!1), this.renderer.autoClear = !0, this.renderer.setRenderTarget(null), this.camera.layers.set(this.getSceneLayer()), this.renderer.setClearColor(r, o);
1077
1099
  }
1078
1100
  render() {
1079
- for (let e = 0; e < U.MAX_LAYERS; e++) {
1101
+ for (let e = 0; e < F.MAX_LAYERS; e++) {
1080
1102
  const t = e + 1;
1081
1103
  this.captureRenderTarget(
1082
1104
  this.travelersByLayer[e],
1083
- A.getCaptureLayer(t),
1105
+ k.getCaptureLayer(t),
1084
1106
  this.renderTargets[e]
1085
1107
  );
1086
1108
  }
1087
1109
  this.renderer.render(this.scene, this.camera);
1088
1110
  }
1111
+ updateCameraScroll(e, t) {
1112
+ this.isViewport && (this.camera.position.x = e, this.camera.position.y = -t, this.camera.updateMatrixWorld());
1113
+ }
1089
1114
  }
1090
- function it(s) {
1115
+ function st(s) {
1091
1116
  const e = s.textContent || "", t = [];
1092
- let i = "", r = null, c = -1;
1093
- const n = (l, d) => {
1094
- for (let f = 0; f < l.length; f++) {
1095
- const y = l[f], p = document.createRange();
1096
- p.setStart(s, d + f), p.setEnd(s, d + f + 1);
1097
- const u = p.getBoundingClientRect();
1098
- if (u.width === 0 && u.height === 0) {
1099
- i += y;
1117
+ let i = "", r = null, o = -1;
1118
+ const n = (l, u) => {
1119
+ for (let h = 0; h < l.length; h++) {
1120
+ const f = l[h], v = document.createRange();
1121
+ v.setStart(s, u + h), v.setEnd(s, u + h + 1);
1122
+ const g = v.getBoundingClientRect();
1123
+ if (g.width === 0 && g.height === 0) {
1124
+ i += f;
1100
1125
  continue;
1101
1126
  }
1102
- c === -1 || Math.abs(u.top - c) > u.height / 2 ? (i && r && t.push({
1127
+ o === -1 || Math.abs(g.top - o) > g.height / 2 ? (i && r && t.push({
1103
1128
  text: i,
1104
1129
  rect: {
1105
1130
  left: r.left,
@@ -1107,31 +1132,31 @@ function it(s) {
1107
1132
  width: r.right - r.left,
1108
1133
  height: r.bottom - r.top
1109
1134
  }
1110
- }), i = y, r = {
1111
- left: u.left,
1112
- top: u.top,
1113
- right: u.right,
1114
- bottom: u.bottom
1115
- }, c = u.top) : (i += y, r && (r.left = Math.min(r.left, u.left), r.top = Math.min(r.top, u.top), r.right = Math.max(r.right, u.right), r.bottom = Math.max(
1135
+ }), i = f, r = {
1136
+ left: g.left,
1137
+ top: g.top,
1138
+ right: g.right,
1139
+ bottom: g.bottom
1140
+ }, o = g.top) : (i += f, r && (r.left = Math.min(r.left, g.left), r.top = Math.min(r.top, g.top), r.right = Math.max(r.right, g.right), r.bottom = Math.max(
1116
1141
  r.bottom,
1117
- u.bottom
1142
+ g.bottom
1118
1143
  )));
1119
1144
  }
1120
- }, a = e.match(/[^\s\-]+\-?|\-|\s+/g) || [];
1121
- let o = 0;
1122
- for (const l of a) {
1123
- const d = document.createRange();
1124
- d.setStart(s, o), d.setEnd(s, o + l.length);
1125
- const f = d.getClientRects();
1126
- if (f.length > 1)
1127
- n(l, o);
1145
+ }, c = e.match(/[^\s\-]+\-?|\-|\s+/g) || [];
1146
+ let a = 0;
1147
+ for (const l of c) {
1148
+ const u = document.createRange();
1149
+ u.setStart(s, a), u.setEnd(s, a + l.length);
1150
+ const h = u.getClientRects();
1151
+ if (h.length > 1)
1152
+ n(l, a);
1128
1153
  else {
1129
- const y = f.length === 1 ? f[0] : d.getBoundingClientRect();
1130
- if (y.width === 0 && y.height === 0) {
1131
- i += l, o += l.length;
1154
+ const f = h.length === 1 ? h[0] : u.getBoundingClientRect();
1155
+ if (f.width === 0 && f.height === 0) {
1156
+ i += l, a += l.length;
1132
1157
  continue;
1133
1158
  }
1134
- c === -1 || Math.abs(y.top - c) > y.height / 2 ? (i && r && t.push({
1159
+ o === -1 || Math.abs(f.top - o) > f.height / 2 ? (i && r && t.push({
1135
1160
  text: i,
1136
1161
  rect: {
1137
1162
  left: r.left,
@@ -1140,16 +1165,16 @@ function it(s) {
1140
1165
  height: r.bottom - r.top
1141
1166
  }
1142
1167
  }), i = l, r = {
1143
- left: y.left,
1144
- top: y.top,
1145
- right: y.right,
1146
- bottom: y.bottom
1147
- }, c = y.top) : (i += l, r && (r.left = Math.min(r.left, y.left), r.top = Math.min(r.top, y.top), r.right = Math.max(r.right, y.right), r.bottom = Math.max(
1168
+ left: f.left,
1169
+ top: f.top,
1170
+ right: f.right,
1171
+ bottom: f.bottom
1172
+ }, o = f.top) : (i += l, r && (r.left = Math.min(r.left, f.left), r.top = Math.min(r.top, f.top), r.right = Math.max(r.right, f.right), r.bottom = Math.max(
1148
1173
  r.bottom,
1149
- y.bottom
1174
+ f.bottom
1150
1175
  )));
1151
1176
  }
1152
- o += l.length;
1177
+ a += l.length;
1153
1178
  }
1154
1179
  return i && r && t.push({
1155
1180
  text: i,
@@ -1179,8 +1204,8 @@ function Me(s) {
1179
1204
  letterSpacing: i
1180
1205
  };
1181
1206
  }
1182
- function Be(s, e = j | ae | Ve | be | ye, t, i = 1, r = 0, c = 2, n, a) {
1183
- var P, te, re, ie, se, ne;
1207
+ function Oe(s, e = q | ne | We | ye | ve, t, i = 1, r = 0, o = 2, n, c) {
1208
+ var Q, Z, ee, te, re, ie;
1184
1209
  if (s.nodeType === Node.TEXT_NODE) {
1185
1210
  const m = s;
1186
1211
  if (!m.textContent || !m.textContent.trim())
@@ -1188,22 +1213,22 @@ function Be(s, e = j | ae | Ve | be | ye, t, i = 1, r = 0, c = 2, n, a) {
1188
1213
  const T = m.textContent.replace(/\s+/g, " ");
1189
1214
  if (T.length === 0)
1190
1215
  return null;
1191
- const M = it(m);
1192
- if (M.length === 0)
1216
+ const D = st(m);
1217
+ if (D.length === 0)
1193
1218
  return null;
1194
1219
  const I = m.parentElement, S = I ? window.getComputedStyle(I) : null;
1195
1220
  if (!S)
1196
1221
  return null;
1197
- const O = Math.min(...M.map((v) => v.rect.left)), C = Math.min(...M.map((v) => v.rect.top)), _ = Math.max(...M.map((v) => v.rect.left + v.rect.width)), W = Math.max(...M.map((v) => v.rect.top + v.rect.height));
1222
+ const U = Math.min(...D.map((b) => b.rect.left)), C = Math.min(...D.map((b) => b.rect.top)), z = Math.max(...D.map((b) => b.rect.left + b.rect.width)), P = Math.max(...D.map((b) => b.rect.top + b.rect.height));
1198
1223
  return {
1199
1224
  id: Math.random().toString(36).substring(2, 9),
1200
1225
  type: "TEXT",
1201
1226
  element: m,
1202
1227
  rect: {
1203
- x: O + window.scrollX,
1228
+ x: U + window.scrollX,
1204
1229
  y: C + window.scrollY,
1205
- width: _ - O,
1206
- height: W - C
1230
+ width: z - U,
1231
+ height: P - C
1207
1232
  },
1208
1233
  styles: {
1209
1234
  backgroundColor: "transparent",
@@ -1216,13 +1241,13 @@ function Be(s, e = j | ae | Ve | be | ye, t, i = 1, r = 0, c = 2, n, a) {
1216
1241
  isTraveler: !1
1217
1242
  },
1218
1243
  textContent: T,
1219
- textLines: M.map((v) => ({
1220
- text: v.text.trim(),
1244
+ textLines: D.map((b) => ({
1245
+ text: b.text.trim(),
1221
1246
  rect: {
1222
- x: v.rect.left + window.scrollX,
1223
- y: v.rect.top + window.scrollY,
1224
- width: v.rect.width,
1225
- height: v.rect.height
1247
+ x: b.rect.left + window.scrollX,
1248
+ y: b.rect.top + window.scrollY,
1249
+ width: b.rect.width,
1250
+ height: b.rect.height
1226
1251
  }
1227
1252
  })),
1228
1253
  textStyles: Me(S),
@@ -1232,7 +1257,7 @@ function Be(s, e = j | ae | Ve | be | ye, t, i = 1, r = 0, c = 2, n, a) {
1232
1257
  captureLayer: i,
1233
1258
  isFixed: S.position === "fixed",
1234
1259
  nativeLayer: n,
1235
- nativeStyles: a ? G(G({
1260
+ nativeStyles: c ? G(G({
1236
1261
  backgroundColor: "transparent",
1237
1262
  backgroundImage: "",
1238
1263
  opacity: I && I.dataset[$.KEY] === $.VALUES.HIDE ? 1 : parseFloat(S.opacity),
@@ -1241,20 +1266,20 @@ function Be(s, e = j | ae | Ve | be | ye, t, i = 1, r = 0, c = 2, n, a) {
1241
1266
  borderColor: "transparent",
1242
1267
  borderWidth: "0px",
1243
1268
  isTraveler: !1
1244
- }, Me(S)), a) : void 0,
1245
- nativeRect: a ? {
1246
- x: O + window.scrollX,
1269
+ }, Me(S)), c) : void 0,
1270
+ nativeRect: c ? {
1271
+ x: U + window.scrollX,
1247
1272
  y: C + window.scrollY,
1248
- width: _ - O,
1249
- height: W - C
1273
+ width: z - U,
1274
+ height: P - C
1250
1275
  } : void 0,
1251
1276
  children: []
1252
1277
  };
1253
1278
  }
1254
1279
  if (s.nodeType !== Node.ELEMENT_NODE)
1255
1280
  return null;
1256
- const o = s, l = o.dataset[N.KEY];
1257
- let d = t, f = t;
1281
+ const a = s, l = a.dataset[N.KEY];
1282
+ let u = t, h = t;
1258
1283
  if (l) {
1259
1284
  const m = new Set(l.split(/\s+/));
1260
1285
  for (const T of m)
@@ -1272,233 +1297,233 @@ function Be(s, e = j | ae | Ve | be | ye, t, i = 1, r = 0, c = 2, n, a) {
1272
1297
  throw new Error(
1273
1298
  "[MirageEngine] Conflicting filters: 'include-self' and 'exclude-self' cannot be used together on the same element."
1274
1299
  );
1275
- m.has(N.VALUES.INCLUDE_TREE) ? d = d | V : m.has(N.VALUES.EXCLUDE_TREE) && (d = d & ~V), f = d, m.has(N.VALUES.INCLUDE_SELF) ? f = f | V : m.has(N.VALUES.EXCLUDE_SELF) && (f = f & ~V);
1300
+ m.has(N.VALUES.INCLUDE_TREE) ? u = u | W : m.has(N.VALUES.EXCLUDE_TREE) && (u = u & ~W), h = u, m.has(N.VALUES.INCLUDE_SELF) ? h = h | W : m.has(N.VALUES.EXCLUDE_SELF) && (h = h & ~W);
1276
1301
  }
1277
- const y = o.dataset[Y.KEY];
1278
- if (y) {
1279
- const m = new Set(y.split(/\s+/));
1302
+ const f = a.dataset[V.KEY];
1303
+ if (f) {
1304
+ const m = new Set(f.split(/\s+/));
1280
1305
  for (const T of m)
1281
1306
  if (!Le.includes(T))
1282
1307
  throw new Error(
1283
1308
  `[MirageEngine] Invalid select token: '${T}'. Expected one of: 'include-tree', 'exclude-tree', 'include-self', 'exclude-self', 'end'.`
1284
1309
  );
1285
- if (m.has(Y.VALUES.END))
1310
+ if (m.has(V.VALUES.END))
1286
1311
  return null;
1287
- if (m.has(Y.VALUES.INCLUDE_TREE) && m.has(Y.VALUES.EXCLUDE_TREE))
1312
+ if (m.has(V.VALUES.INCLUDE_TREE) && m.has(V.VALUES.EXCLUDE_TREE))
1288
1313
  throw new Error(
1289
1314
  "[MirageEngine] Conflicting selects: 'include-tree' and 'exclude-tree' cannot be used together on the same element."
1290
1315
  );
1291
- if (m.has(Y.VALUES.INCLUDE_SELF) && m.has(Y.VALUES.EXCLUDE_SELF))
1316
+ if (m.has(V.VALUES.INCLUDE_SELF) && m.has(V.VALUES.EXCLUDE_SELF))
1292
1317
  throw new Error(
1293
1318
  "[MirageEngine] Conflicting selects: 'include-self' and 'exclude-self' cannot be used together on the same element."
1294
1319
  );
1295
- m.has(Y.VALUES.INCLUDE_TREE) ? d = d | Z : m.has(Y.VALUES.EXCLUDE_TREE) && (d = d & ~Z), f = d, m.has(Y.VALUES.INCLUDE_SELF) ? f = f | Z : m.has(Y.VALUES.EXCLUDE_SELF) && (f = f & ~Z);
1320
+ m.has(V.VALUES.INCLUDE_TREE) ? u = u | j : m.has(V.VALUES.EXCLUDE_TREE) && (u = u & ~j), h = u, m.has(V.VALUES.INCLUDE_SELF) ? h = h | j : m.has(V.VALUES.EXCLUDE_SELF) && (h = h & ~j);
1296
1321
  }
1297
- const p = o.dataset[U.KEY];
1298
- let u = !1, g = a ? G({}, a) : {}, w = n;
1299
- if (p) {
1322
+ const v = a.dataset[F.KEY];
1323
+ let g = !1, p = c ? G({}, c) : {}, E = n;
1324
+ if (v) {
1300
1325
  let m = 1;
1301
- const T = p.indexOf("{"), M = p.lastIndexOf("}");
1302
- let I = p;
1303
- if (T !== -1 && M !== -1 && M > T) {
1304
- I = p.substring(0, T).trim();
1305
- const C = p.substring(T, M + 1);
1326
+ const T = v.indexOf("{"), D = v.lastIndexOf("}");
1327
+ let I = v;
1328
+ if (T !== -1 && D !== -1 && D > T) {
1329
+ I = v.substring(0, T).trim();
1330
+ const C = v.substring(T, D + 1);
1306
1331
  try {
1307
- g = new Function("return " + C)();
1308
- } catch (_) {
1332
+ p = new Function("return " + C)();
1333
+ } catch (z) {
1309
1334
  console.warn(
1310
1335
  `[MirageEngine] Failed to parse travel styles JSON: ${C}`
1311
1336
  );
1312
1337
  }
1313
1338
  }
1314
1339
  const S = I.split(/\s+/);
1315
- let O = !1;
1316
- if (S.includes(U.VALUES.TRAVELER)) {
1317
- u = !0, O = !0;
1318
- const C = S.find((_) => !isNaN(parseInt(_, 10)));
1340
+ let U = !1;
1341
+ if (S.includes(F.VALUES.TRAVELER)) {
1342
+ g = !0, U = !0;
1343
+ const C = S.find((z) => !isNaN(parseInt(z, 10)));
1319
1344
  C && (m = parseInt(C, 10));
1320
- } else if (S.includes(U.VALUES.NATIVE)) {
1321
- u = !1;
1322
- const C = S.find((_) => !isNaN(parseInt(_, 10)));
1323
- C && (w = parseInt(C, 10));
1345
+ } else if (S.includes(F.VALUES.NATIVE)) {
1346
+ g = !1;
1347
+ const C = S.find((z) => !isNaN(parseInt(z, 10)));
1348
+ C && (E = parseInt(C, 10));
1324
1349
  }
1325
- if (O) {
1350
+ if (U) {
1326
1351
  const C = m + 1;
1327
1352
  if (C < i)
1328
1353
  throw new Error(
1329
1354
  `[MirageEngine] Traveler layer (${m}) cannot be smaller than inherited capture layer (${i - 1}).`
1330
1355
  );
1331
- i = Math.min(C, U.MAX_LAYERS + 1);
1356
+ i = Math.min(C, F.MAX_LAYERS + 1);
1332
1357
  }
1333
1358
  }
1334
- const R = o.dataset[Ye.KEY];
1335
- let L;
1336
- R && (L = JSON.parse(R));
1337
- const E = o.getBoundingClientRect(), x = window.getComputedStyle(o);
1338
- if (E.width === 0 || E.height === 0 || x.display === "none")
1359
+ const L = a.dataset[Ve.KEY];
1360
+ let R;
1361
+ L && (R = JSON.parse(L));
1362
+ const x = a.getBoundingClientRect(), w = window.getComputedStyle(a);
1363
+ if (x.width === 0 || x.height === 0 || w.display === "none")
1339
1364
  return null;
1340
- let B = o.getAttribute("data-mid");
1341
- B || (B = Math.random().toString(36).substring(2, 11), o.setAttribute("data-mid", B));
1342
- const F = parseInt(x.zIndex), X = (isNaN(F) ? 0 : F) + r;
1343
- let D;
1344
- if (o.tagName === "IMG")
1345
- D = o.src;
1346
- else if (o.tagName.toLowerCase() === "svg") {
1347
- const m = o.cloneNode(!0), T = g == null ? void 0 : g.color, M = g == null ? void 0 : g.fill, I = g == null ? void 0 : g.stroke, S = g == null ? void 0 : g.opacity, O = (v, xe) => {
1348
- const z = window.getComputedStyle(v), oe = xe, Oe = z.fill === z.color, Ue = z.stroke === z.color, de = M || (Oe ? T : void 0) || z.fill;
1349
- de && de !== "none" && (oe.style.fill = de);
1350
- const ue = I || (Ue ? T : void 0) || z.stroke;
1351
- ue && ue !== "none" && (oe.style.stroke = ue), z.strokeWidth && z.strokeWidth !== "0px" && (oe.style.strokeWidth = z.strokeWidth);
1352
- const Ee = T || z.color;
1353
- Ee && (oe.style.color = Ee);
1354
- const fe = S || z.opacity;
1355
- fe && fe !== "1" && (oe.style.opacity = fe);
1356
- for (let le = 0; le < v.children.length; le++)
1357
- O(v.children[le], xe.children[le]);
1365
+ let B = a.getAttribute("data-mid");
1366
+ B || (B = Math.random().toString(36).substring(2, 11), a.setAttribute("data-mid", B));
1367
+ const M = parseInt(w.zIndex), O = (isNaN(M) ? 0 : M) + r;
1368
+ let _;
1369
+ if (a.tagName === "IMG")
1370
+ _ = a.src;
1371
+ else if (a.tagName.toLowerCase() === "svg") {
1372
+ const m = a.cloneNode(!0), T = p == null ? void 0 : p.color, D = p == null ? void 0 : p.fill, I = p == null ? void 0 : p.stroke, S = p == null ? void 0 : p.opacity, U = (b, we) => {
1373
+ const X = window.getComputedStyle(b), se = we, Ue = X.fill === X.color, Fe = X.stroke === X.color, de = D || (Ue ? T : void 0) || X.fill;
1374
+ de && de !== "none" && (se.style.fill = de);
1375
+ const ue = I || (Fe ? T : void 0) || X.stroke;
1376
+ ue && ue !== "none" && (se.style.stroke = ue), X.strokeWidth && X.strokeWidth !== "0px" && (se.style.strokeWidth = X.strokeWidth);
1377
+ const xe = T || X.color;
1378
+ xe && (se.style.color = xe);
1379
+ const fe = S || X.opacity;
1380
+ fe && fe !== "1" && (se.style.opacity = fe);
1381
+ for (let le = 0; le < b.children.length; le++)
1382
+ U(b.children[le], we.children[le]);
1358
1383
  };
1359
- O(o, m);
1360
- const C = o.getBoundingClientRect(), _ = window.devicePixelRatio * c;
1361
- m.hasAttribute("viewBox") || m.setAttribute("viewBox", `0 0 ${C.width} ${C.height}`), m.setAttribute("width", (C.width * _).toString()), m.setAttribute("height", (C.height * _).toString());
1362
- let W = new XMLSerializer().serializeToString(m);
1363
- W.includes("xmlns=") || (W = W.replace(
1384
+ U(a, m);
1385
+ const C = a.getBoundingClientRect(), z = window.devicePixelRatio * o;
1386
+ m.hasAttribute("viewBox") || m.setAttribute("viewBox", `0 0 ${C.width} ${C.height}`), m.setAttribute("width", (C.width * z).toString()), m.setAttribute("height", (C.height * z).toString());
1387
+ let P = new XMLSerializer().serializeToString(m);
1388
+ P.includes("xmlns=") || (P = P.replace(
1364
1389
  "<svg",
1365
1390
  '<svg xmlns="http://www.w3.org/2000/svg"'
1366
- )), D = `data:image/svg+xml;utf8,${encodeURIComponent(W)}`;
1367
- } else if (x.backgroundImage && x.backgroundImage !== "none") {
1368
- const m = x.backgroundImage.match(/url\(['"]?(.*?)['"]?\)/);
1369
- m && (D = m[1]);
1370
- }
1371
- const k = {
1372
- backgroundColor: x.backgroundColor,
1373
- backgroundImage: x.backgroundImage,
1374
- opacity: o.dataset[$.KEY] === $.VALUES.HIDE ? 1 : parseFloat(x.opacity),
1375
- zIndex: X,
1376
- borderRadius: x.borderRadius,
1377
- borderColor: x.borderColor,
1378
- borderWidth: x.borderWidth,
1379
- imageSrc: D,
1380
- isTraveler: u
1381
- }, K = k;
1382
- let J, Q;
1383
- const q = [];
1384
- return o.tagName.toLowerCase() !== "svg" && Array.from(o.childNodes).forEach((m) => {
1385
- const T = m.nodeType === Node.TEXT_NODE ? f : d, M = Be(
1391
+ )), _ = `data:image/svg+xml;utf8,${encodeURIComponent(P)}`;
1392
+ } else if (w.backgroundImage && w.backgroundImage !== "none") {
1393
+ const m = w.backgroundImage.match(/url\(['"]?(.*?)['"]?\)/);
1394
+ m && (_ = m[1]);
1395
+ }
1396
+ const A = {
1397
+ backgroundColor: w.backgroundColor,
1398
+ backgroundImage: w.backgroundImage,
1399
+ opacity: a.dataset[$.KEY] === $.VALUES.HIDE ? 1 : parseFloat(w.opacity),
1400
+ zIndex: O,
1401
+ borderRadius: w.borderRadius,
1402
+ borderColor: w.borderColor,
1403
+ borderWidth: w.borderWidth,
1404
+ imageSrc: _,
1405
+ isTraveler: g
1406
+ }, Y = A;
1407
+ let ae, ce;
1408
+ const J = [];
1409
+ return a.tagName.toLowerCase() !== "svg" && Array.from(a.childNodes).forEach((m) => {
1410
+ const T = m.nodeType === Node.TEXT_NODE ? h : u, D = Oe(
1386
1411
  m,
1387
1412
  e,
1388
1413
  T,
1389
1414
  i,
1390
- X,
1391
- c,
1392
- w,
1393
- m.nodeType === Node.TEXT_NODE && Object.keys(g).length > 0 ? g : void 0
1415
+ O,
1416
+ o,
1417
+ E,
1418
+ m.nodeType === Node.TEXT_NODE && Object.keys(p).length > 0 ? p : void 0
1394
1419
  );
1395
- M && q.push(M);
1420
+ D && J.push(D);
1396
1421
  }), {
1397
1422
  id: B,
1398
1423
  type: "BOX",
1399
- element: o,
1424
+ element: a,
1400
1425
  rect: {
1401
- x: E.left + window.scrollX,
1402
- y: E.top + window.scrollY,
1403
- width: E.width,
1404
- height: E.height
1426
+ x: x.left + window.scrollX,
1427
+ y: x.top + window.scrollY,
1428
+ width: x.width,
1429
+ height: x.height
1405
1430
  },
1406
- styles: K,
1407
- textContent: J,
1408
- textStyles: Q,
1431
+ styles: Y,
1432
+ textContent: ae,
1433
+ textStyles: ce,
1409
1434
  dirtyMask: e,
1410
- visibility: f,
1411
- isTraveler: u,
1435
+ visibility: h,
1436
+ isTraveler: g,
1412
1437
  captureLayer: i,
1413
- nativeLayer: w,
1414
- nativeStyles: w !== void 0 ? pe(G({}, k), {
1415
- backgroundColor: (P = g.backgroundColor) != null ? P : k.backgroundColor,
1416
- backgroundImage: (te = g.backgroundImage) != null ? te : k.backgroundImage,
1417
- opacity: (re = g.opacity) != null ? re : k.opacity,
1418
- zIndex: g.zIndex !== void 0 ? g.zIndex + X : k.zIndex,
1419
- borderRadius: (ie = g.borderRadius) != null ? ie : k.borderRadius,
1420
- borderColor: (se = g.borderColor) != null ? se : k.borderColor,
1421
- borderWidth: (ne = g.borderWidth) != null ? ne : k.borderWidth,
1422
- isTraveler: k.isTraveler
1438
+ nativeLayer: E,
1439
+ nativeStyles: E !== void 0 ? pe(G({}, A), {
1440
+ backgroundColor: (Q = p.backgroundColor) != null ? Q : A.backgroundColor,
1441
+ backgroundImage: (Z = p.backgroundImage) != null ? Z : A.backgroundImage,
1442
+ opacity: (ee = p.opacity) != null ? ee : A.opacity,
1443
+ zIndex: p.zIndex !== void 0 ? p.zIndex + O : A.zIndex,
1444
+ borderRadius: (te = p.borderRadius) != null ? te : A.borderRadius,
1445
+ borderColor: (re = p.borderColor) != null ? re : A.borderColor,
1446
+ borderWidth: (ie = p.borderWidth) != null ? ie : A.borderWidth,
1447
+ isTraveler: A.isTraveler
1423
1448
  }) : void 0,
1424
- nativeRect: w !== void 0 ? {
1425
- x: g.x !== void 0 ? parseFloat(g.x) : E.left + window.scrollX,
1426
- y: g.y !== void 0 ? parseFloat(g.y) : E.top + window.scrollY,
1427
- width: g.width !== void 0 ? parseFloat(g.width) : E.width,
1428
- height: g.height !== void 0 ? parseFloat(g.height) : E.height
1449
+ nativeRect: E !== void 0 ? {
1450
+ x: p.x !== void 0 ? parseFloat(p.x) : x.left + window.scrollX,
1451
+ y: p.y !== void 0 ? parseFloat(p.y) : x.top + window.scrollY,
1452
+ width: p.width !== void 0 ? parseFloat(p.width) : x.width,
1453
+ height: p.height !== void 0 ? parseFloat(p.height) : x.height
1429
1454
  } : void 0,
1430
- isFixed: x.position === "fixed",
1431
- children: q,
1432
- shaderHooks: L
1455
+ isFixed: w.position === "fixed",
1456
+ children: J,
1457
+ shaderHooks: R
1433
1458
  };
1434
1459
  }
1435
- function st(s, e) {
1460
+ function nt(s, e) {
1436
1461
  e.size !== 0 && e.forEach((t, i) => {
1437
- var B, F, X, D, k, K, J, Q, q, P, te, re, ie, se, ne, m, T, M;
1462
+ var B, M, O, _, A, Y, ae, ce, J, Q, Z, ee, te, re, ie, m, T, D;
1438
1463
  const r = s.get(i);
1439
1464
  if (!r || !r.userData.basePosition)
1440
1465
  return;
1441
- let { x: c, y: n } = r.userData.basePosition;
1442
- const { width: a, height: o } = r.userData.baseSize, l = (B = t.width) != null ? B : a, d = (F = t.height) != null ? F : o, f = l - a, y = d - o;
1443
- if (t.width !== void 0 && r.userData.originRatioX === void 0 && Math.abs(f) > 0.1) {
1444
- const I = i.getBoundingClientRect(), S = (X = t.x) != null ? X : 0, O = (k = (D = r.userData.baseTransform) == null ? void 0 : D.x) != null ? k : 0, C = r.userData.isFixed ? 0 : window.scrollX;
1445
- let v = -(I.left + C - S + O - r.userData.baseDOM.x) / f;
1446
- Math.abs(v) < 0.05 ? v = 0 : Math.abs(v - 1) < 0.05 ? v = 1 : Math.abs(v - 0.5) < 0.05 && (v = 0.5), r.userData.originRatioX = v;
1466
+ let { x: o, y: n } = r.userData.basePosition;
1467
+ const { width: c, height: a } = r.userData.baseSize, l = (B = t.width) != null ? B : c, u = (M = t.height) != null ? M : a, h = l - c, f = u - a;
1468
+ if (t.width !== void 0 && r.userData.originRatioX === void 0 && Math.abs(h) > 0.1) {
1469
+ const I = i.getBoundingClientRect(), S = (O = t.x) != null ? O : 0, U = (A = (_ = r.userData.baseTransform) == null ? void 0 : _.x) != null ? A : 0, C = r.userData.isFixed ? 0 : window.scrollX;
1470
+ let b = -(I.left + C - S + U - r.userData.baseDOM.x) / h;
1471
+ Math.abs(b) < 0.05 ? b = 0 : Math.abs(b - 1) < 0.05 ? b = 1 : Math.abs(b - 0.5) < 0.05 && (b = 0.5), r.userData.originRatioX = b;
1447
1472
  }
1448
- if (t.height !== void 0 && r.userData.originRatioY === void 0 && Math.abs(y) > 0.1) {
1449
- const I = i.getBoundingClientRect(), S = (K = t.y) != null ? K : 0, O = (Q = (J = r.userData.baseTransform) == null ? void 0 : J.y) != null ? Q : 0, C = r.userData.isFixed ? 0 : window.scrollY;
1450
- let v = -(I.top + C - S + O - r.userData.baseDOM.y) / y;
1451
- Math.abs(v) < 0.05 ? v = 0 : Math.abs(v - 1) < 0.05 ? v = 1 : Math.abs(v - 0.5) < 0.05 && (v = 0.5), r.userData.originRatioY = v;
1473
+ if (t.height !== void 0 && r.userData.originRatioY === void 0 && Math.abs(f) > 0.1) {
1474
+ const I = i.getBoundingClientRect(), S = (Y = t.y) != null ? Y : 0, U = (ce = (ae = r.userData.baseTransform) == null ? void 0 : ae.y) != null ? ce : 0, C = r.userData.isFixed ? 0 : window.scrollY;
1475
+ let b = -(I.top + C - S + U - r.userData.baseDOM.y) / f;
1476
+ Math.abs(b) < 0.05 ? b = 0 : Math.abs(b - 1) < 0.05 ? b = 1 : Math.abs(b - 0.5) < 0.05 && (b = 0.5), r.userData.originRatioY = b;
1452
1477
  }
1453
- const p = (q = r.userData.originRatioX) != null ? q : 0.5, u = (P = r.userData.originRatioY) != null ? P : 0.5, g = f * (0.5 - p), w = y * (0.5 - u), R = (re = (te = r.userData.baseTransform) == null ? void 0 : te.x) != null ? re : 0, L = (se = (ie = r.userData.baseTransform) == null ? void 0 : ie.y) != null ? se : 0, E = ((ne = t.x) != null ? ne : R) - R, x = ((m = t.y) != null ? m : L) - L;
1454
- r.position.setX(c + g + E), r.position.setY(n - (w + x)), r.scale.set(l, d, 1), H.forceUpdateUniforms(r.material, {
1478
+ const v = (J = r.userData.originRatioX) != null ? J : 0.5, g = (Q = r.userData.originRatioY) != null ? Q : 0.5, p = h * (0.5 - v), E = f * (0.5 - g), L = (ee = (Z = r.userData.baseTransform) == null ? void 0 : Z.x) != null ? ee : 0, R = (re = (te = r.userData.baseTransform) == null ? void 0 : te.y) != null ? re : 0, x = ((ie = t.x) != null ? ie : L) - L, w = ((m = t.y) != null ? m : R) - R;
1479
+ r.position.setX(o + p + x), r.position.setY(n - (E + w)), r.scale.set(l, u, 1), H.forceUpdateUniforms(r.material, {
1455
1480
  backgroundColor: t.backgroundColor,
1456
1481
  backgroundImage: t.backgroundImage,
1457
1482
  opacity: t.opacity,
1458
- borderRadius: (M = t.borderRadius) != null ? M : (T = r.userData.baseStyles) == null ? void 0 : T.borderRadius,
1483
+ borderRadius: (D = t.borderRadius) != null ? D : (T = r.userData.baseStyles) == null ? void 0 : T.borderRadius,
1459
1484
  width: l,
1460
- height: d
1485
+ height: u
1461
1486
  });
1462
1487
  });
1463
1488
  }
1464
- function nt(s, e, t) {
1489
+ function De(s, e, t) {
1465
1490
  s.forEach((i) => {
1466
1491
  if (i.userData.isFixed && i.userData.initialScroll && i.userData.originalBasePosition) {
1467
- const r = e - i.userData.initialScroll.x, c = t - i.userData.initialScroll.y;
1468
- i.userData.basePosition.x = i.userData.originalBasePosition.x + r, i.userData.basePosition.y = i.userData.originalBasePosition.y - c, i.position.x = i.userData.basePosition.x, i.position.y = i.userData.basePosition.y;
1492
+ const r = e - i.userData.initialScroll.x, o = t - i.userData.initialScroll.y;
1493
+ i.userData.basePosition.x = i.userData.originalBasePosition.x + r, i.userData.basePosition.y = i.userData.originalBasePosition.y - o, i.position.x = i.userData.basePosition.x, i.position.y = i.userData.basePosition.y;
1469
1494
  }
1470
1495
  });
1471
1496
  }
1472
1497
  class ot {
1473
1498
  constructor(e, t, i, r) {
1474
- h(this, "target");
1475
- h(this, "renderer");
1476
- h(this, "registry");
1477
- h(this, "isTravelEnabled", !1);
1478
- h(this, "tracker");
1479
- this.target = e, this.renderer = t, this.registry = i, this.tracker = new Ae(e, {
1499
+ d(this, "target");
1500
+ d(this, "renderer");
1501
+ d(this, "registry");
1502
+ d(this, "isTravelEnabled", !1);
1503
+ d(this, "tracker");
1504
+ this.target = e, this.renderer = t, this.registry = i, this.tracker = new ke(e, {
1480
1505
  resizeDebounce: r.resizeDebounce
1481
- }), this.tracker.onLayoutChange.add((c, n) => {
1482
- document.querySelector(`[${U.NAME}~='${U.VALUES.TRAVELER}']`) !== null && !this.isTravelEnabled && (this.isTravelEnabled = !0, this.renderer.createRenderTarget());
1483
- const o = Be(
1506
+ }), this.tracker.onLayoutChange.add((o, n) => {
1507
+ document.querySelector(`[${F.NAME}~='${F.VALUES.TRAVELER}']`) !== null && !this.isTravelEnabled && (this.isTravelEnabled = !0, this.renderer.createRenderTarget());
1508
+ const a = Oe(
1484
1509
  this.target,
1485
- c,
1486
- V,
1510
+ o,
1511
+ W,
1487
1512
  1,
1488
1513
  0,
1489
1514
  this.renderer.qualityFactor
1490
1515
  );
1491
- o && this.renderer.syncScene(o, n);
1492
- }), this.tracker.onScrollChange.add((c, n) => {
1493
- nt(this.renderer.fixedMeshes, c, n);
1494
- }), this.tracker.onStyleChange.add((c) => {
1495
- st(this.registry, c);
1516
+ a && this.renderer.syncScene(a, n);
1517
+ }), this.tracker.onScrollChange.add((o, n) => {
1518
+ De(this.renderer.fixedMeshes, o, n), this.renderer.updateCameraScroll(o, n);
1519
+ }), this.tracker.onStyleChange.add((o) => {
1520
+ nt(this.registry, o);
1496
1521
  }), this.tracker.onRender.add(() => {
1497
1522
  this.renderer.render();
1498
1523
  });
1499
1524
  }
1500
1525
  start() {
1501
- this.tracker.start();
1526
+ this.tracker.start(), De(this.renderer.fixedMeshes, window.scrollX, window.scrollY), this.renderer.updateCameraScroll(window.scrollX, window.scrollY);
1502
1527
  }
1503
1528
  stop() {
1504
1529
  this.tracker.stop();
@@ -1506,7 +1531,7 @@ class ot {
1506
1531
  }
1507
1532
  class at {
1508
1533
  constructor() {
1509
- h(this, "store");
1534
+ d(this, "store");
1510
1535
  this.store = /* @__PURE__ */ new WeakMap();
1511
1536
  }
1512
1537
  register(e, t) {
@@ -1531,23 +1556,23 @@ class at {
1531
1556
  }
1532
1557
  class ct {
1533
1558
  constructor(e, t) {
1534
- h(this, "renderer");
1535
- h(this, "syncer");
1536
- h(this, "target");
1537
- h(this, "registry");
1538
- var r, c, n;
1559
+ d(this, "renderer");
1560
+ d(this, "syncer");
1561
+ d(this, "target");
1562
+ d(this, "registry");
1563
+ var r, o, n;
1539
1564
  if (this.target = e, this.registry = new at(), !document.getElementById("mirage-engine-styles")) {
1540
- const a = document.createElement("style");
1541
- a.id = "mirage-engine-styles", a.textContent = `
1565
+ const c = document.createElement("style");
1566
+ c.id = "mirage-engine-styles", c.textContent = `
1542
1567
  [${$.NAME}="${$.VALUES.HIDE}"] {
1543
1568
  opacity: 0 !important;
1544
1569
  }
1545
- `, document.head.appendChild(a);
1570
+ `, document.head.appendChild(c);
1546
1571
  }
1547
1572
  let i;
1548
- if (t.mode === "duplicate" ? i = (c = (r = t.container) != null ? r : this.target.parentElement) != null ? c : void 0 : i = (n = this.target.parentElement) != null ? n : void 0, !i)
1573
+ if (t.mode === "duplicate" ? i = (o = (r = t.container) != null ? r : this.target.parentElement) != null ? o : void 0 : i = (n = this.target.parentElement) != null ? n : void 0, !i)
1549
1574
  throw new Error("[Mirage] Cannot find a container (parent or option).");
1550
- this.renderer = new rt(
1575
+ this.renderer = new it(
1551
1576
  this.target,
1552
1577
  t,
1553
1578
  i,
@@ -1584,10 +1609,10 @@ class ct {
1584
1609
  ArrowUp: !1,
1585
1610
  ArrowDown: !1
1586
1611
  };
1587
- window.addEventListener("keydown", (c) => {
1588
- t[c.key] !== void 0 && (t[c.key] = !0);
1589
- }), window.addEventListener("keyup", (c) => {
1590
- t[c.key] !== void 0 && (t[c.key] = !1);
1612
+ window.addEventListener("keydown", (o) => {
1613
+ t[o.key] !== void 0 && (t[o.key] = !0);
1614
+ }), window.addEventListener("keyup", (o) => {
1615
+ t[o.key] !== void 0 && (t[o.key] = !1);
1591
1616
  });
1592
1617
  const i = 2, r = () => {
1593
1618
  requestAnimationFrame(r), t.ArrowRight && e.position.setX(e.position.x + i), t.ArrowLeft && e.position.setX(e.position.x - i), t.ArrowUp && e.position.setY(e.position.y + i), t.ArrowDown && e.position.setY(e.position.y - i);
@@ -1597,14 +1622,14 @@ class ct {
1597
1622
  }
1598
1623
  class lt {
1599
1624
  constructor(e = {}) {
1600
- h(this, "frontSelector");
1601
- h(this, "midLayerElement");
1602
- h(this, "items", []);
1603
- h(this, "isInitialized", !1);
1604
- h(this, "midLayer", null);
1605
- h(this, "frontLayer", null);
1606
- h(this, "tracker", null);
1607
- this.frontSelector = e.frontSelector || ".front", this.midLayerElement = e.midLayerElement || null, this.items = [], this.isInitialized = !1, this.tracker = new Ae(document.body, e.trackerConfig || { resizeDebounce: !0 });
1625
+ d(this, "frontSelector");
1626
+ d(this, "midLayerElement");
1627
+ d(this, "items", []);
1628
+ d(this, "isInitialized", !1);
1629
+ d(this, "midLayer", null);
1630
+ d(this, "frontLayer", null);
1631
+ d(this, "tracker", null);
1632
+ this.frontSelector = e.frontSelector || ".front", this.midLayerElement = e.midLayerElement || null, this.items = [], this.isInitialized = !1, this.tracker = new ke(document.body, e.trackerConfig || { resizeDebounce: !0 });
1608
1633
  }
1609
1634
  init() {
1610
1635
  var e;
@@ -1634,8 +1659,8 @@ class lt {
1634
1659
  const e = document.querySelectorAll(this.frontSelector);
1635
1660
  this.frontLayer && e.forEach((t) => {
1636
1661
  var n;
1637
- const i = t.getBoundingClientRect(), r = window.getComputedStyle(t), c = document.createElement("div");
1638
- c.className = "sand-placeholder", Object.assign(c.style, {
1662
+ const i = t.getBoundingClientRect(), r = window.getComputedStyle(t), o = document.createElement("div");
1663
+ o.className = "sand-placeholder", Object.assign(o.style, {
1639
1664
  display: r.display === "inline" ? "inline-block" : r.display,
1640
1665
  width: `${i.width}px`,
1641
1666
  height: `${i.height}px`,
@@ -1646,14 +1671,14 @@ class lt {
1646
1671
  marginRight: r.marginRight,
1647
1672
  visibility: "hidden",
1648
1673
  pointerEvents: "none"
1649
- }), (n = t.parentNode) == null || n.insertBefore(c, t), this.frontLayer.appendChild(t), Object.assign(t.style, {
1674
+ }), (n = t.parentNode) == null || n.insertBefore(o, t), this.frontLayer.appendChild(t), Object.assign(t.style, {
1650
1675
  position: "fixed",
1651
1676
  margin: "0",
1652
1677
  boxSizing: "border-box",
1653
1678
  width: `${i.width}px`,
1654
1679
  height: `${i.height}px`,
1655
1680
  pointerEvents: "auto"
1656
- }), this.items.push({ placeholder: c, original: t });
1681
+ }), this.items.push({ placeholder: o, original: t });
1657
1682
  });
1658
1683
  }
1659
1684
  setupHooks() {
@@ -1668,8 +1693,8 @@ class lt {
1668
1693
  }
1669
1694
  class dt {
1670
1695
  constructor(e, t) {
1671
- h(this, "_engine");
1672
- h(this, "_sandwich");
1696
+ d(this, "_engine");
1697
+ d(this, "_sandwich");
1673
1698
  if (!e)
1674
1699
  throw new Error("[Mirage] Target element is required.");
1675
1700
  if (this._engine = new ct(e, t), t.sandwich !== !1) {