@openmockup-studio/player 0.1.0 → 0.2.0

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,10 +1,10 @@
1
1
  import { t as e } from "./rolldown-runtime-CGnMp29N.js";
2
2
  import { A as t, B as n, D as r, E as i, F as a, G as o, J as s, K as c, N as l, O as u, P as d, Q as f, R as p, S as m, T as h, V as g, X as _, Y as v, Z as y, _ as b, a as x, b as S, c as C, g as w, j as T, l as E, m as D, o as O, q as k, s as A, t as j, u as M, w as N, x as P, y as F, z as I } from "./three-o_76Nw0r.js";
3
- import { C as L, S as R, _ as z, b as B, g as V, h as H, v as U, w as ee, x as W, y as G } from "./device-phone-D__ngcPt.js";
3
+ import { C as L, S as R, T as z, _ as B, b as V, g as H, h as U, v as W, w as G, x as K, y as q } from "./device-phone-DxWL5LkW.js";
4
4
  // ../engine/src/backdrop-math.ts
5
- var K = "#f6f6f4";
5
+ var ee = "#f6f6f4";
6
6
  function te(e, t) {
7
- let n = e.color ?? e.inner ?? e.outer ?? K;
7
+ let n = e.color ?? e.inner ?? e.outer ?? ee;
8
8
  if (e.kind === "image") return t ? {
9
9
  kind: "image",
10
10
  fallback: n
@@ -25,7 +25,7 @@ function te(e, t) {
25
25
  outer: n
26
26
  } : {
27
27
  kind: "flat",
28
- color: t ?? n ?? e.color ?? K
28
+ color: t ?? n ?? e.color ?? ee
29
29
  };
30
30
  }
31
31
  return {
@@ -42,7 +42,7 @@ function ne(e, t) {
42
42
  };
43
43
  }
44
44
  function re(e, t) {
45
- return L(e, t, "cover");
45
+ return G(e, t, "cover");
46
46
  }
47
47
  // ../engine/src/backdrop.ts
48
48
  function ie() {
@@ -100,7 +100,7 @@ function ce(e, t) {
100
100
  e.position.set(t.position[0], t.position[1], t.position[2]), oe.set(t.target[0], t.target[1], t.target[2]).sub(e.position).normalize(), se.set(0, 1, 0).applyAxisAngle(oe, t.roll * ae), e.up.copy(se), e.lookAt(t.target[0], t.target[1], t.target[2]), e.fov !== t.fov && (e.fov = t.fov, e.updateProjectionMatrix());
101
101
  }
102
102
  // ../engine/src/environment/recipes.ts
103
- var q = {
103
+ var le = {
104
104
  studio: {
105
105
  room: [
106
106
  [0, "#55555a"],
@@ -202,17 +202,17 @@ var q = {
202
202
  }
203
203
  }
204
204
  };
205
- function le(e) {
206
- return e !== void 0 && Object.hasOwn(q, e) ? e : "studio";
205
+ function ue(e) {
206
+ return e !== void 0 && Object.hasOwn(le, e) ? e : "studio";
207
207
  }
208
208
  // ../engine/src/environment/studio.ts
209
- function ue(e, t = "studio") {
210
- let n = q[t], i = new I(), a = [], s = fe(1, 256, n.room), c = new o(60, 48, 24), l = new u({
209
+ function de(e, t = "studio") {
210
+ let n = le[t], i = new I(), a = [], s = pe(1, 256, n.room), c = new o(60, 48, 24), l = new u({
211
211
  map: s,
212
212
  side: 1
213
213
  });
214
214
  i.add(new r(c, l)), a.push(s, c, l);
215
- let f = pe("none", n.feather), p = pe("top", n.feather), m = pe("left", n.feather);
215
+ let f = me("none", n.feather), p = me("top", n.feather), m = me("left", n.feather);
216
216
  a.push(f, p, m);
217
217
  let h = (e, t, o, s, c, l) => {
218
218
  let f = new d(t, o), p = new u({
@@ -264,12 +264,12 @@ function ue(e, t = "studio") {
264
264
  for (let e of a) e.dispose();
265
265
  return _;
266
266
  }
267
- function de(e, t) {
267
+ function fe(e, t) {
268
268
  let n = document.createElement("canvas");
269
269
  return n.width = e, n.height = t, [n, n.getContext("2d")];
270
270
  }
271
- function fe(e, t, n) {
272
- let [r, i] = de(e, t);
271
+ function pe(e, t, n) {
272
+ let [r, i] = fe(e, t);
273
273
  if (i) {
274
274
  let r = i.createLinearGradient(0, 0, 0, t);
275
275
  for (let [e, t] of n) r.addColorStop(e, t);
@@ -278,8 +278,8 @@ function fe(e, t, n) {
278
278
  let a = new M(r);
279
279
  return a.colorSpace = p, a;
280
280
  }
281
- function pe(e, t) {
282
- let [n, r] = de(128, 128);
281
+ function me(e, t) {
282
+ let [n, r] = fe(128, 128);
283
283
  if (r) {
284
284
  let n = r.createImageData(128, 128), i = (e, t, n) => {
285
285
  let r = Math.min(1, Math.max(0, (n - e) / (t - e)));
@@ -296,7 +296,7 @@ function pe(e, t) {
296
296
  return new M(n);
297
297
  }
298
298
  // ../engine/src/floor.ts
299
- function me(e, t) {
299
+ function he(e, t) {
300
300
  let n = new b(16777215, .6);
301
301
  n.position.set(.6, 30, 1.2), n.castShadow = !0, n.shadow.mapSize.set(512, 512), Object.assign(n.shadow.camera, {
302
302
  left: -12,
@@ -336,7 +336,7 @@ function me(e, t) {
336
336
  }
337
337
  // ../engine/src/glow.ts
338
338
  var J = 4;
339
- function he(e) {
339
+ function ge(e) {
340
340
  let t = /* @__PURE__ */ new Map(), i = new f(J, J, { type: s }), a = /* @__PURE__ */ new Uint8Array(64), o = new n({
341
341
  uniforms: { map: { value: null } },
342
342
  vertexShader: "\n varying vec2 vUv;\n void main() { vUv = uv; gl_Position = vec4(position.xy, 0.0, 1.0); }\n ",
@@ -407,12 +407,12 @@ function he(e) {
407
407
  }
408
408
  };
409
409
  }
410
- var ge = Math.PI / 180, _e = .25, ve = .012, ye = .016, be = .7, xe = .3, Se = .9, Ce = 5, we = 24, Te = 12, Ee = 24, Y = (e) => typeof e == "number" && e > 0 ? e : 0;
411
- function De(e) {
410
+ var _e = Math.PI / 180, ve = .25, ye = .012, be = .016, xe = .7, Se = .3, Ce = .9, we = 5, Te = 24, Ee = 12, De = 24, Y = (e) => typeof e == "number" && e > 0 ? e : 0;
411
+ function Oe(e) {
412
412
  return Y(e.fisheye) > 0 || Y(e.chromatic) > 0 || Y(e.vignette) > 0 || Y(e.bloom) > 0 || Y(e.grain) > 0 || Y(e.blur) > 0 || Y(e.fade) > 0;
413
413
  }
414
- var X = "\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = vec4(position.xy, 0.0, 1.0);\n }\n", Oe = "\n uniform float camNear;\n uniform float camFar;\n uniform float focus;\n uniform float maxCoc; // blur * MAX_COC * frame height, in pixels\n\n float viewZ(float d) {\n if (d >= 0.99999) return camFar;\n float z = d * 2.0 - 1.0;\n return 2.0 * camNear * camFar / (camFar + camNear - z * (camFar - camNear));\n }\n float cocOf(float d) {\n return maxCoc * clamp(abs(1.0 - focus / viewZ(d)), 0.0, 1.0);\n }\n";
415
- function ke(e, t = 4) {
414
+ var X = "\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = vec4(position.xy, 0.0, 1.0);\n }\n", ke = "\n uniform float camNear;\n uniform float camFar;\n uniform float focus;\n uniform float maxCoc; // blur * MAX_COC * frame height, in pixels\n\n float viewZ(float d) {\n if (d >= 0.99999) return camFar;\n float z = d * 2.0 - 1.0;\n return 2.0 * camNear * camFar / (camFar + camNear - z * (camFar - camNear));\n }\n float cocOf(float d) {\n return maxCoc * clamp(abs(1.0 - focus / viewZ(d)), 0.0, 1.0);\n }\n";
415
+ function Ae(e, t = 4) {
416
416
  let i = 1, a = 1, o = 1, c = new w(1, 1, F), l = new f(1, 1, {
417
417
  type: m,
418
418
  colorSpace: N,
@@ -429,7 +429,7 @@ function ke(e, t = 4) {
429
429
  depthBuffer: !1,
430
430
  count: 2
431
431
  }), y = [];
432
- for (let e = 0; e < Ce; e++) y.push(new f(1, 1, {
432
+ for (let e = 0; e < we; e++) y.push(new f(1, 1, {
433
433
  type: m,
434
434
  colorSpace: N,
435
435
  depthBuffer: !1
@@ -455,7 +455,7 @@ function ke(e, t = 4) {
455
455
  uniform sampler2D tMask;
456
456
  uniform sampler2D tDepth;
457
457
  uniform vec2 texel; // 1 / full-resolution size
458
- ${Oe}
458
+ ${ke}
459
459
  varying vec2 vUv;
460
460
  layout(location = 0) out highp vec4 outColor;
461
461
  layout(location = 1) out highp vec4 outMask;
@@ -480,8 +480,8 @@ function ke(e, t = 4) {
480
480
  vec2 macc = m0;
481
481
  float wsum = 1.0;
482
482
  // Small blurs need few taps; only wide ones pay for the full disc.
483
- float taps = clamp(8.0 + c0 * 0.7, 8.0, float(${we}));
484
- const int N = ${we};
483
+ float taps = clamp(8.0 + c0 * 0.7, 8.0, float(${Te}));
484
+ const int N = ${Te};
485
485
  for (int i = 0; i < N; i++) {
486
486
  if (float(i) >= taps) break;
487
487
  float r = sqrt((float(i) + 0.5) / taps);
@@ -509,8 +509,8 @@ function ke(e, t = 4) {
509
509
  tSrc: { value: l.texture },
510
510
  tSrcMask: { value: p.texture },
511
511
  texel: { value: new v(1, 1) },
512
- threshold: { value: be },
513
- knee: { value: xe }
512
+ threshold: { value: xe },
513
+ knee: { value: Se }
514
514
  },
515
515
  vertexShader: X,
516
516
  fragmentShader: "\n uniform sampler2D tSrc;\n uniform sampler2D tSrcMask; // r: exact pixel, g: display\n uniform vec2 texel; // of the source\n uniform float threshold;\n uniform float knee;\n varying vec2 vUv;\n\n vec3 bright(vec2 uv) {\n vec3 c = min(texture2D(tSrc, uv).rgb, vec3(8.0));\n vec2 m = texture2D(tSrcMask, uv).rg;\n float geometry = 1.0 - m.r * (1.0 - m.g); // 0 on the bare backdrop\n float l = dot(c, vec3(0.2126, 0.7152, 0.0722));\n float rq = clamp(l - threshold + knee, 0.0, 2.0 * knee);\n rq = rq * rq / (4.0 * knee + 1e-4);\n float w = max(rq, l - threshold) / max(l, 1e-4);\n return c * w * geometry;\n }\n\n void main() {\n vec3 s = bright(vUv + texel * vec2(-1.0, -1.0))\n + bright(vUv + texel * vec2( 1.0, -1.0))\n + bright(vUv + texel * vec2(-1.0, 1.0))\n + bright(vUv + texel * vec2( 1.0, 1.0));\n gl_FragColor = vec4(s * 0.25, 1.0);\n }\n "
@@ -584,7 +584,7 @@ function ke(e, t = 4) {
584
584
  uniform float grain;
585
585
  uniform float frame;
586
586
  uniform float fade;
587
- ${Oe}
587
+ ${ke}
588
588
  varying vec2 vUv;
589
589
 
590
590
  // Normalised so r = 1 at the frame corners.
@@ -683,10 +683,10 @@ function ke(e, t = 4) {
683
683
  i = e, a = t, L(o);
684
684
  },
685
685
  render(t, n, r, s, c, u = [], d = 0) {
686
- let f = Y(c.fisheye), m = Y(c.chromatic), v = Y(c.vignette), S = Math.min(1, Y(c.bloom)), w = Math.min(1, Y(c.grain)), T = Math.min(1, Y(c.blur)), O = Math.min(1, Y(c.fade)), k = Y(c.focus), A = T > 0 && k > 0, N = _e * f;
687
- L(1 + N + ve * m + .005);
686
+ let f = Y(c.fisheye), m = Y(c.chromatic), v = Y(c.vignette), S = Math.min(1, Y(c.bloom)), w = Math.min(1, Y(c.grain)), T = Math.min(1, Y(c.blur)), O = Math.min(1, Y(c.fade)), k = Y(c.focus), A = T > 0 && k > 0, N = ve * f;
687
+ L(1 + N + ye * m + .005);
688
688
  let F = n.fov;
689
- n.fov = 2 * Math.atan(Math.tan(F * ge / 2) * o) / ge, n.updateProjectionMatrix(), l.resolveDepthBuffer = A, e.setRenderTarget(l), e.clear(), r.render(e, s), e.render(t, n);
689
+ n.fov = 2 * Math.atan(Math.tan(F * _e / 2) * o) / _e, n.updateProjectionMatrix(), l.resolveDepthBuffer = A, e.setRenderTarget(l), e.clear(), r.render(e, s), e.render(t, n);
690
690
  let I = e.shadowMap.autoUpdate;
691
691
  e.shadowMap.autoUpdate = !1, e.setRenderTarget(p), e.setClearColor(16711680, 1), e.clear();
692
692
  let z = u.filter((e) => e.visible);
@@ -694,9 +694,9 @@ function ke(e, t = 4) {
694
694
  t.overrideMaterial = h, e.render(t, n), n.layers.set(1), t.overrideMaterial = g, e.render(t, n), n.layers.set(0), t.overrideMaterial = null;
695
695
  for (let e of z) e.visible = !0;
696
696
  e.setClearColor(0, 0), e.shadowMap.autoUpdate = I, n.fov = F, n.updateProjectionMatrix();
697
- let B = T * ye * a;
697
+ let B = T * be * a;
698
698
  if (A) {
699
- let e = B >= Te ? 4 : 2;
699
+ let e = B >= Ee ? 4 : 2;
700
700
  e !== M && (M = e, P());
701
701
  let t = b.uniforms;
702
702
  R.set(1 / l.width, 1 / l.height), t.texel.value.copy(R), t.camNear.value = n.near, t.camFar.value = n.far, t.focus.value = k, t.maxCoc.value = B, j(b, _);
@@ -706,7 +706,7 @@ function ke(e, t = 4) {
706
706
  e.tSrc.value = A ? _.textures[0] : l.texture, e.tSrcMask.value = A ? _.textures[1] : p.texture;
707
707
  let t = A ? _ : l;
708
708
  e.texel.value.set(1 / t.width, 1 / t.height), j(x, y[0]);
709
- for (let e = 1; e < Ce; e++) {
709
+ for (let e = 1; e < we; e++) {
710
710
  let t = y[e - 1];
711
711
  C.uniforms.tSrc.value = t.texture, C.uniforms.texel.value.set(1 / t.width, 1 / t.height), j(C, y[e]);
712
712
  }
@@ -716,7 +716,7 @@ function ke(e, t = 4) {
716
716
  }
717
717
  }
718
718
  let V = D.uniforms;
719
- V.overscan.value = o, V.aspect.value = i / a, V.barrel.value = N, V.chromatic.value = ve * m, V.vignette.value = v, V.dofOn.value = +!!A, V.camNear.value = n.near, V.camFar.value = n.far, V.focus.value = k, V.maxCoc.value = B, V.bloomAmount.value = S * Se, V.grain.value = w, V.frame.value = Math.floor(Math.max(0, d) * Ee + 1e-6), V.fade.value = O, e.setRenderTarget(null), e.clear(), j(D, null);
719
+ V.overscan.value = o, V.aspect.value = i / a, V.barrel.value = N, V.chromatic.value = ye * m, V.vignette.value = v, V.dofOn.value = +!!A, V.camNear.value = n.near, V.camFar.value = n.far, V.focus.value = k, V.maxCoc.value = B, V.bloomAmount.value = S * Ce, V.grain.value = w, V.frame.value = Math.floor(Math.max(0, d) * De + 1e-6), V.fade.value = O, e.setRenderTarget(null), e.clear(), j(D, null);
720
720
  },
721
721
  dispose() {
722
722
  l.dispose(), c.dispose(), p.dispose(), _.dispose();
@@ -726,7 +726,7 @@ function ke(e, t = 4) {
726
726
  };
727
727
  }
728
728
  // ../engine/src/set/stone.ts
729
- function Ae(e) {
729
+ function je(e) {
730
730
  let n = new t({
731
731
  color: e,
732
732
  roughness: .72,
@@ -736,7 +736,7 @@ function Ae(e) {
736
736
  e.vertexShader = e.vertexShader.replace("#include <common>", "#include <common>\n attribute float aCavity;\n varying float vCavity;\n varying vec3 vStonePos;").replace("#include <begin_vertex>", "#include <begin_vertex>\n vCavity = aCavity;\n vStonePos = position;"), e.fragmentShader = e.fragmentShader.replace("#include <common>", `#include <common>
737
737
  varying float vCavity;
738
738
  varying vec3 vStonePos;
739
- ${je}
739
+ ${Me}
740
740
  vec3 hash3(vec3 p) {
741
741
  p = vec3(dot(p, vec3(127.1, 311.7, 74.7)), dot(p, vec3(269.5, 183.3, 246.1)), dot(p, vec3(113.5, 271.9, 124.6)));
742
742
  return fract(sin(p) * 43758.5453123);
@@ -805,9 +805,9 @@ function Ae(e) {
805
805
  }`).replace("#include <color_fragment>", "#include <color_fragment>\n float stoneFootprint = length(fwidth(vStonePos));\n vec3 stoneD = stoneDetail(vStonePos, stoneFootprint);\n float stoneH = stoneD.x;\n float mottle = snoise(vStonePos * 0.04 + 3.0) * 0.6 + snoise(vStonePos * 0.17) * 0.3;\n // Mineral speckle: scattered dark grains (light ones bloom into droplets).\n float speck = snoise(vStonePos * 1.7 + 21.0) * lod(0.6, stoneFootprint);\n mottle -= smoothstep(0.55, 0.85, -speck) * 0.3;\n float wear = smoothstep(0.42, 0.15, vCavity);\n float crease = smoothstep(0.55, 0.9, vCavity);\n diffuseColor.rgb *= (0.82 + 0.22 * mottle) * (1.0 + 0.35 * wear) * (1.0 - 0.45 * crease);\n // Millimetre grain in the colour, as any photographed stone has; it is what makes\n // a surface read sharp at a glance.\n float grain = snoise(vStonePos * 3.6 + 40.0) * 0.6 + snoise(vStonePos * 7.5 - 13.0) * 0.4;\n diffuseColor.rgb *= 1.0 + 0.22 * grain * lod(0.3, stoneFootprint);\n // Small-scale contrast: dark hollows and cracks, lighter crowns.\n diffuseColor.rgb *= (1.0 - 0.4 * stoneD.y) * (0.92 + 0.18 * stoneD.z);").replace("#include <roughnessmap_fragment>", "#include <roughnessmap_fragment>\n // Crowns are polished a little by weather; cracks and creases hold dust.\n roughnessFactor = clamp(roughnessFactor - 0.17 * stoneD.z + 0.12 * max(crease, stoneD.y), 0.45, 1.0);").replace("#include <normal_fragment_maps>", "#include <normal_fragment_maps>\n // Height in cm-ish units; the gain sets how deep the grain reads.\n normal = stonePerturb(-vViewPosition, normal, stoneH * 0.5, faceDirection);").replace("#include <aomap_fragment>", "#include <aomap_fragment>\n float stoneAO = mix(1.0, 0.35, crease) * (1.0 - 0.4 * stoneD.y);\n reflectedLight.indirectDiffuse *= stoneAO;\n reflectedLight.indirectSpecular *= stoneAO;");
806
806
  }, n.customProgramCacheKey = () => "openmockup-stone-13", n;
807
807
  }
808
- var je = "\nvec3 mod289(vec3 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }\nvec4 mod289(vec4 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }\nvec4 permute(vec4 x) { return mod289(((x * 34.0) + 10.0) * x); }\nvec4 taylorInvSqrt(vec4 r) { return 1.79284291400159 - 0.85373472095314 * r; }\nfloat snoise(vec3 v) {\n const vec2 C = vec2(1.0 / 6.0, 1.0 / 3.0);\n const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);\n vec3 i = floor(v + dot(v, C.yyy));\n vec3 x0 = v - i + dot(i, C.xxx);\n vec3 g = step(x0.yzx, x0.xyz);\n vec3 l = 1.0 - g;\n vec3 i1 = min(g.xyz, l.zxy);\n vec3 i2 = max(g.xyz, l.zxy);\n vec3 x1 = x0 - i1 + C.xxx;\n vec3 x2 = x0 - i2 + C.yyy;\n vec3 x3 = x0 - D.yyy;\n i = mod289(i);\n vec4 p = permute(permute(permute(i.z + vec4(0.0, i1.z, i2.z, 1.0)) + i.y + vec4(0.0, i1.y, i2.y, 1.0)) + i.x + vec4(0.0, i1.x, i2.x, 1.0));\n float n_ = 0.142857142857;\n vec3 ns = n_ * D.wyz - D.xzx;\n vec4 j = p - 49.0 * floor(p * ns.z * ns.z);\n vec4 x_ = floor(j * ns.z);\n vec4 y_ = floor(j - 7.0 * x_);\n vec4 x = x_ * ns.x + ns.yyyy;\n vec4 y = y_ * ns.x + ns.yyyy;\n vec4 h = 1.0 - abs(x) - abs(y);\n vec4 b0 = vec4(x.xy, y.xy);\n vec4 b1 = vec4(x.zw, y.zw);\n vec4 s0 = floor(b0) * 2.0 + 1.0;\n vec4 s1 = floor(b1) * 2.0 + 1.0;\n vec4 sh = -step(h, vec4(0.0));\n vec4 a0 = b0.xzyw + s0.xzyw * sh.xxyy;\n vec4 a1 = b1.xzyw + s1.xzyw * sh.zzww;\n vec3 p0 = vec3(a0.xy, h.x);\n vec3 p1 = vec3(a0.zw, h.y);\n vec3 p2 = vec3(a1.xy, h.z);\n vec3 p3 = vec3(a1.zw, h.w);\n vec4 norm = taylorInvSqrt(vec4(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3)));\n p0 *= norm.x;\n p1 *= norm.y;\n p2 *= norm.z;\n p3 *= norm.w;\n vec4 m = max(0.5 - vec4(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), 0.0);\n m = m * m;\n return 105.0 * dot(m * m, vec4(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3)));\n}\n";
808
+ var Me = "\nvec3 mod289(vec3 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }\nvec4 mod289(vec4 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }\nvec4 permute(vec4 x) { return mod289(((x * 34.0) + 10.0) * x); }\nvec4 taylorInvSqrt(vec4 r) { return 1.79284291400159 - 0.85373472095314 * r; }\nfloat snoise(vec3 v) {\n const vec2 C = vec2(1.0 / 6.0, 1.0 / 3.0);\n const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);\n vec3 i = floor(v + dot(v, C.yyy));\n vec3 x0 = v - i + dot(i, C.xxx);\n vec3 g = step(x0.yzx, x0.xyz);\n vec3 l = 1.0 - g;\n vec3 i1 = min(g.xyz, l.zxy);\n vec3 i2 = max(g.xyz, l.zxy);\n vec3 x1 = x0 - i1 + C.xxx;\n vec3 x2 = x0 - i2 + C.yyy;\n vec3 x3 = x0 - D.yyy;\n i = mod289(i);\n vec4 p = permute(permute(permute(i.z + vec4(0.0, i1.z, i2.z, 1.0)) + i.y + vec4(0.0, i1.y, i2.y, 1.0)) + i.x + vec4(0.0, i1.x, i2.x, 1.0));\n float n_ = 0.142857142857;\n vec3 ns = n_ * D.wyz - D.xzx;\n vec4 j = p - 49.0 * floor(p * ns.z * ns.z);\n vec4 x_ = floor(j * ns.z);\n vec4 y_ = floor(j - 7.0 * x_);\n vec4 x = x_ * ns.x + ns.yyyy;\n vec4 y = y_ * ns.x + ns.yyyy;\n vec4 h = 1.0 - abs(x) - abs(y);\n vec4 b0 = vec4(x.xy, y.xy);\n vec4 b1 = vec4(x.zw, y.zw);\n vec4 s0 = floor(b0) * 2.0 + 1.0;\n vec4 s1 = floor(b1) * 2.0 + 1.0;\n vec4 sh = -step(h, vec4(0.0));\n vec4 a0 = b0.xzyw + s0.xzyw * sh.xxyy;\n vec4 a1 = b1.xzyw + s1.xzyw * sh.zzww;\n vec3 p0 = vec3(a0.xy, h.x);\n vec3 p1 = vec3(a0.zw, h.y);\n vec3 p2 = vec3(a1.xy, h.z);\n vec3 p3 = vec3(a1.zw, h.w);\n vec4 norm = taylorInvSqrt(vec4(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3)));\n p0 *= norm.x;\n p1 *= norm.y;\n p2 *= norm.z;\n p3 *= norm.w;\n vec4 m = max(0.5 - vec4(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), 0.0);\n m = m * m;\n return 105.0 * dot(m * m, vec4(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3)));\n}\n";
809
809
  // ../engine/src/set/concrete.ts
810
- function Me(e) {
810
+ function Ne(e) {
811
811
  let n = new t({
812
812
  color: e,
813
813
  roughness: .9,
@@ -816,7 +816,7 @@ function Me(e) {
816
816
  return n.onBeforeCompile = (e) => {
817
817
  e.vertexShader = e.vertexShader.replace("#include <common>", "#include <common>\n varying vec3 vConcretePos;").replace("#include <begin_vertex>", "#include <begin_vertex>\n vConcretePos = position;"), e.fragmentShader = e.fragmentShader.replace("#include <common>", `#include <common>
818
818
  varying vec3 vConcretePos;
819
- ${je}
819
+ ${Me}
820
820
  float lod(float wavelength, float footprint) {
821
821
  return 1.0 - smoothstep(wavelength * 0.12, wavelength * 0.45, footprint);
822
822
  }
@@ -839,10 +839,10 @@ function Me(e) {
839
839
  }, n.customProgramCacheKey = () => "openmockup-concrete-4", n;
840
840
  }
841
841
  // ../engine/src/set/block.ts
842
- function Ne({ color: e, subject: t }) {
842
+ function Pe({ color: e, subject: t }) {
843
843
  let n = new P();
844
844
  n.name = "set:block";
845
- let i = Me(e), a = t.getCenter(new _()), o = t.getSize(new _()), s = Math.max(o.x * 3, 90), l = Math.max(o.z * 2.4, 60), u = Math.max(o.y * 6, s), d = t.min.x + o.x * .3, f = t.max.z + .6, p = t.min.y, m = new j(s, u, l, 3, .35), h = new r(m, i);
845
+ let i = Ne(e), a = t.getCenter(new _()), o = t.getSize(new _()), s = Math.max(o.x * 3, 90), l = Math.max(o.z * 2.4, 60), u = Math.max(o.y * 6, s), d = t.min.x + o.x * .3, f = t.max.z + .6, p = t.min.y, m = new j(s, u, l, 3, .35), h = new r(m, i);
846
846
  h.position.set(d + s / 2, p - u / 2, f - l / 2), h.castShadow = !1, h.receiveShadow = !0, n.add(h);
847
847
  let g = Math.max(o.length() * 3.2, 110), v = new c(16184818, 1, g * 4, .62, .85, 2);
848
848
  v.position.set(a.x - g, a.y + g * .25, f - g * .12), v.target.position.set(d, p - o.y, f), v.castShadow = !0, v.shadow.mapSize.set(2048, 2048), v.shadow.camera.near = g * .3, v.shadow.camera.far = g * 3, v.shadow.radius = 6, v.shadow.blurSamples = 16, v.shadow.bias = -2e-4, v.shadow.normalBias = .3;
@@ -860,7 +860,7 @@ function Ne({ color: e, subject: t }) {
860
860
  };
861
861
  }
862
862
  // ../engine/src/set/noise.ts
863
- function Pe(e) {
863
+ function Fe(e) {
864
864
  let t = e * 2654435761 >>> 0 || 1;
865
865
  return () => {
866
866
  t = t + 1831565813 >>> 0;
@@ -868,7 +868,7 @@ function Pe(e) {
868
868
  return e = Math.imul(e ^ e >>> 15, e | 1), e ^= e + Math.imul(e ^ e >>> 7, e | 61), ((e ^ e >>> 14) >>> 0) / 4294967296;
869
869
  };
870
870
  }
871
- var Fe = new Float32Array([
871
+ var Ie = new Float32Array([
872
872
  1,
873
873
  1,
874
874
  0,
@@ -905,9 +905,9 @@ var Fe = new Float32Array([
905
905
  0,
906
906
  -1,
907
907
  -1
908
- ]), Ie = 1 / 3, Z = 1 / 6;
909
- function Le(e) {
910
- let t = Pe(e), n = /* @__PURE__ */ new Uint8Array(256);
908
+ ]), Le = 1 / 3, Z = 1 / 6;
909
+ function Re(e) {
910
+ let t = Fe(e), n = /* @__PURE__ */ new Uint8Array(256);
911
911
  for (let e = 0; e < 256; e++) n[e] = e;
912
912
  for (let e = 255; e > 0; e--) {
913
913
  let r = Math.floor(t() * (e + 1)), i = n[e];
@@ -916,27 +916,27 @@ function Le(e) {
916
916
  let r = /* @__PURE__ */ new Uint8Array(512), i = /* @__PURE__ */ new Uint8Array(512);
917
917
  for (let e = 0; e < 512; e++) r[e] = n[e & 255], i[e] = r[e] % 12;
918
918
  return (e, t, n) => {
919
- let a = (e + t + n) * Ie, o = Math.floor(e + a), s = Math.floor(t + a), c = Math.floor(n + a), l = (o + s + c) * Z, u = e - (o - l), d = t - (s - l), f = n - (c - l), p = 0, m = 0, h = 0, g = 0, _ = 0, v = 0;
919
+ let a = (e + t + n) * Le, o = Math.floor(e + a), s = Math.floor(t + a), c = Math.floor(n + a), l = (o + s + c) * Z, u = e - (o - l), d = t - (s - l), f = n - (c - l), p = 0, m = 0, h = 0, g = 0, _ = 0, v = 0;
920
920
  u >= d ? d >= f ? (p = 1, g = 1, _ = 1) : u >= f ? (p = 1, g = 1, v = 1) : (h = 1, g = 1, v = 1) : d < f ? (h = 1, _ = 1, v = 1) : u < f ? (m = 1, _ = 1, v = 1) : (m = 1, g = 1, _ = 1);
921
- let y = u - p + Z, b = d - m + Z, x = f - h + Z, S = u - g + 2 * Z, C = d - _ + 2 * Z, w = f - v + 2 * Z, T = u - 1 + 3 * Z, E = d - 1 + 3 * Z, D = f - 1 + 3 * Z, O = o & 255, k = s & 255, A = c & 255, j = Re(i[O + r[k + r[A]]], u, d, f), M = Re(i[O + p + r[k + m + r[A + h]]], y, b, x), N = Re(i[O + g + r[k + _ + r[A + v]]], S, C, w), P = Re(i[O + 1 + r[k + 1 + r[A + 1]]], T, E, D);
921
+ let y = u - p + Z, b = d - m + Z, x = f - h + Z, S = u - g + 2 * Z, C = d - _ + 2 * Z, w = f - v + 2 * Z, T = u - 1 + 3 * Z, E = d - 1 + 3 * Z, D = f - 1 + 3 * Z, O = o & 255, k = s & 255, A = c & 255, j = ze(i[O + r[k + r[A]]], u, d, f), M = ze(i[O + p + r[k + m + r[A + h]]], y, b, x), N = ze(i[O + g + r[k + _ + r[A + v]]], S, C, w), P = ze(i[O + 1 + r[k + 1 + r[A + 1]]], T, E, D);
922
922
  return 32 * (j + M + N + P);
923
923
  };
924
924
  }
925
- function Re(e, t, n, r) {
925
+ function ze(e, t, n, r) {
926
926
  let i = .6 - t * t - n * n - r * r;
927
927
  if (i < 0) return 0;
928
928
  i *= i;
929
929
  let a = e * 3;
930
- return i * i * (Fe[a] * t + Fe[a + 1] * n + Fe[a + 2] * r);
930
+ return i * i * (Ie[a] * t + Ie[a + 1] * n + Ie[a + 2] * r);
931
931
  }
932
- function ze(e, t, n, r, i, a = .5) {
932
+ function Be(e, t, n, r, i, a = .5) {
933
933
  let o = 0, s = 1, c = 1, l = 0;
934
934
  for (let u = 0; u < i; u++) o += s * e(t * c, n * c, r * c), l += s, s *= a, c *= 2;
935
935
  return o / l;
936
936
  }
937
937
  // ../engine/src/set/rock.ts
938
- function Be({ seed: e, size: t, detail: n = 5, sides: i = 6, notches: a, relief: o = 1, shape: s = "pillar", color: c }) {
939
- let l = Pe(e), u = Le(e), d = new _(t[0] / 2, t[1] / 2, t[2] / 2), f = Math.hypot(...t), p = Math.min(d.x, d.z) * .03 + .12, m = [], h = l() * Math.PI * 2;
938
+ function Ve({ seed: e, size: t, detail: n = 5, sides: i = 6, notches: a, relief: o = 1, shape: s = "pillar", color: c }) {
939
+ let l = Fe(e), u = Re(e), d = new _(t[0] / 2, t[1] / 2, t[2] / 2), f = Math.hypot(...t), p = Math.min(d.x, d.z) * .03 + .12, m = [], h = l() * Math.PI * 2;
940
940
  for (let e = 0; e < i; e++) {
941
941
  let t = h + (e + (l() - .5) * .5) / i * Math.PI * 2, n = s === "boulder" ? (l() - .5) * 1.6 : (l() - .5) * .08, r = new _(Math.cos(t), n, Math.sin(t)).normalize(), a = Math.hypot(r.x * d.x, r.z * d.z);
942
942
  m.push({
@@ -998,8 +998,8 @@ function Be({ seed: e, size: t, detail: n = 5, sides: i = 6, notches: a, relief:
998
998
  e.half.z
999
999
  ], t * 8));
1000
1000
  let P = new Float64Array(g.length), F = b.x, I = b.z, L = (e, t, n) => {
1001
- let r = Ve(-p * .4, p * .4, e * F + n * I - x);
1002
- for (let e = 0; e < g.length; e++) P[e] = Ve(-p * .3, p * .3, t - g[e]);
1001
+ let r = He(-p * .4, p * .4, e * F + n * I - x);
1002
+ for (let e = 0; e < g.length; e++) P[e] = He(-p * .3, p * .3, t - g[e]);
1003
1003
  let i = -Infinity;
1004
1004
  for (let a = 0; a < m.length; a++) {
1005
1005
  let o = a * 4, s = 0;
@@ -1007,18 +1007,18 @@ function Be({ seed: e, size: t, detail: n = 5, sides: i = 6, notches: a, relief:
1007
1007
  for (let e = 0; e < g.length; e++) s += j[a * g.length + e] * P[e];
1008
1008
  s += M[a] * r;
1009
1009
  }
1010
- i = He(i, e * A[o] + t * A[o + 1] + n * A[o + 2] - (A[o + 3] + s), p);
1010
+ i = Ue(i, e * A[o] + t * A[o + 1] + n * A[o + 2] - (A[o + 3] + s), p);
1011
1011
  }
1012
1012
  for (let r = 0; r < O.length; r++) {
1013
1013
  let a = r * 8, o = e - N[a], s = t - N[a + 1], c = n - N[a + 2], l = N[a + 3], u = N[a + 4], d = Math.abs(o * l + c * u) - N[a + 5], f = Math.abs(s) - N[a + 6], m = Math.abs(-o * u + c * l) - N[a + 7], h = d > 0 ? d : 0, g = f > 0 ? f : 0, _ = m > 0 ? m : 0, v = Math.min(Math.max(d, f, m), 0) + Math.sqrt(h * h + g * g + _ * _);
1014
- i = He(i, -v, p * .6);
1014
+ i = Ue(i, -v, p * .6);
1015
1015
  }
1016
1016
  let a = e / f, s = t / f, c = n / f;
1017
- return i -= ze(u, a * 2.2, s * 2.2, c * 2.2, 3, .5) * f * .007 * o, i -= ze(u, a * 9 + 7.1, s * 9 + 3.3, c * 9 - 2.2, 2, .5) * f * .004 * o, i;
1018
- }, R = (e) => L(e.x, e.y, e.z), { positions: z, indices: B } = We(n), V = z.length / 3, H = new _(), U = new _(), ee = d.length() * 1.5;
1017
+ return i -= Be(u, a * 2.2, s * 2.2, c * 2.2, 3, .5) * f * .007 * o, i -= Be(u, a * 9 + 7.1, s * 9 + 3.3, c * 9 - 2.2, 2, .5) * f * .004 * o, i;
1018
+ }, R = (e) => L(e.x, e.y, e.z), { positions: z, indices: B } = Ge(n), V = z.length / 3, H = new _(), U = new _(), W = d.length() * 1.5;
1019
1019
  for (let e = 0; e < V; e++) {
1020
1020
  H.fromArray(z, e * 3).multiply(d).normalize();
1021
- let t = ee, n = ee;
1021
+ let t = W, n = W;
1022
1022
  for (let e = 0; e < 200 && t > 0; e++) {
1023
1023
  let e = R(U.copy(H).multiplyScalar(t));
1024
1024
  if (e < 0) break;
@@ -1031,27 +1031,27 @@ function Be({ seed: e, size: t, detail: n = 5, sides: i = 6, notches: a, relief:
1031
1031
  }
1032
1032
  U.copy(H).multiplyScalar((r + i) / 2).toArray(z, e * 3);
1033
1033
  }
1034
- Ue(z, B, R, 4);
1035
- let W = new E();
1036
- W.setAttribute("position", new C(z, 3)), W.setIndex(new C(B, 1)), W.computeVertexNormals(), W.setAttribute("aCavity", new C(Ge(W), 1)), W.computeBoundingBox(), W.computeBoundingSphere();
1037
- let G = c === void 0 ? null : Ae(c), K = new r(W, G ?? void 0);
1038
- return K.castShadow = !0, K.receiveShadow = !0, {
1039
- mesh: K,
1034
+ We(z, B, R, 4);
1035
+ let G = new E();
1036
+ G.setAttribute("position", new C(z, 3)), G.setIndex(new C(B, 1)), G.computeVertexNormals(), G.setAttribute("aCavity", new C(Ke(G), 1)), G.computeBoundingBox(), G.computeBoundingSphere();
1037
+ let K = c === void 0 ? null : je(c), q = new r(G, K ?? void 0);
1038
+ return q.castShadow = !0, q.receiveShadow = !0, {
1039
+ mesh: q,
1040
1040
  dispose() {
1041
- W.dispose(), G?.dispose();
1041
+ G.dispose(), K?.dispose();
1042
1042
  }
1043
1043
  };
1044
1044
  }
1045
- function Ve(e, t, n) {
1045
+ function He(e, t, n) {
1046
1046
  let r = Math.min(1, Math.max(0, (n - e) / (t - e)));
1047
1047
  return r * r * (3 - 2 * r);
1048
1048
  }
1049
- function He(e, t, n) {
1049
+ function Ue(e, t, n) {
1050
1050
  if (e === -Infinity) return t;
1051
1051
  let r = Math.min(1, Math.max(0, .5 - .5 * (t - e) / n));
1052
1052
  return t + (e - t) * r + n * r * (1 - r);
1053
1053
  }
1054
- function Ue(e, t, n, r) {
1054
+ function We(e, t, n, r) {
1055
1055
  let i = e.length / 3, a = Array.from({ length: i }, () => []);
1056
1056
  for (let e = 0; e < t.length; e += 3) for (let n = 0; n < 3; n++) {
1057
1057
  let r = t[e + n], i = t[e + (n + 1) % 3];
@@ -1076,7 +1076,7 @@ function Ue(e, t, n, r) {
1076
1076
  e.set(u);
1077
1077
  }
1078
1078
  }
1079
- function We(e) {
1079
+ function Ge(e) {
1080
1080
  let t = (1 + Math.sqrt(5)) / 2, n = [
1081
1081
  -1,
1082
1082
  t,
@@ -1200,7 +1200,7 @@ function We(e) {
1200
1200
  indices: new Uint32Array(r)
1201
1201
  };
1202
1202
  }
1203
- function Ge(e) {
1203
+ function Ke(e) {
1204
1204
  let t = e.getAttribute("position"), n = e.getAttribute("normal"), r = e.getIndex(), i = t.count, a = Array.from({ length: i }, () => /* @__PURE__ */ new Set());
1205
1205
  for (let e = 0; e < r.count; e += 3) {
1206
1206
  let t = r.getX(e), n = r.getX(e + 1), i = r.getX(e + 2);
@@ -1226,12 +1226,12 @@ function Ge(e) {
1226
1226
  return o;
1227
1227
  }
1228
1228
  // ../engine/src/set/crevice.ts
1229
- function Ke({ seed: e, color: t, subject: n }) {
1230
- let r = Pe(e * 7919 + 13), i = new P();
1229
+ function qe({ seed: e, color: t, subject: n }) {
1230
+ let r = Fe(e * 7919 + 13), i = new P();
1231
1231
  i.name = "set:crevice";
1232
- let a = Ae(t), o = [], s = n.getCenter(new _()), l = n.getSize(new _()), u = l.x + Math.max(1.2, l.x * .18) * 2, d = Math.max(l.y * 4.2, u * 6.3), f = u * 3.1, p = Math.max(u * 3, l.z * 6), m = s.y - d * .3;
1232
+ let a = je(t), o = [], s = n.getCenter(new _()), l = n.getSize(new _()), u = l.x + Math.max(1.2, l.x * .18) * 2, d = Math.max(l.y * 4.2, u * 6.3), f = u * 3.1, p = Math.max(u * 3, l.z * 6), m = s.y - d * .3;
1233
1233
  for (let t of [-1, 1]) {
1234
- let n = Be({
1234
+ let n = Ve({
1235
1235
  seed: e * 31 + (t < 0 ? 1 : 2),
1236
1236
  size: [
1237
1237
  f * (.9 + r() * .2),
@@ -1242,12 +1242,12 @@ function Ke({ seed: e, color: t, subject: n }) {
1242
1242
  n.mesh.material = a;
1243
1243
  let c = n.mesh;
1244
1244
  c.rotation.set((r() - .5) * .06, (r() - .5) * .5, -t * (.05 + r() * .04)), c.position.set(s.x + t * (u / 2 + f / 2), m + d / 2, s.z - p * .28), c.updateMatrixWorld(!0);
1245
- let h = qe(c, t, s, l);
1245
+ let h = Je(c, t, s, l);
1246
1246
  h !== null && (c.position.x += s.x + u / 2 * t - h), i.add(c), o.push(n);
1247
1247
  }
1248
1248
  let h = u * .9;
1249
1249
  for (let [t, c] of [[-1, -.3], [1, .35]]) {
1250
- let d = Be({
1250
+ let d = Ve({
1251
1251
  seed: e * 31 + (t < 0 ? 4 : 5),
1252
1252
  size: [
1253
1253
  u * 1.5,
@@ -1260,10 +1260,10 @@ function Ke({ seed: e, color: t, subject: n }) {
1260
1260
  detail: 4
1261
1261
  });
1262
1262
  d.mesh.material = a, d.mesh.rotation.set((r() - .5) * .1, (r() - .5) * .5, -t * (.04 + r() * .06)), d.mesh.position.set(s.x + t * (l.x / 2 + u * .75 - .5), s.y + c * l.y, n.max.z + h * .5 + .8), d.mesh.updateMatrixWorld(!0);
1263
- let f = Je(d.mesh);
1263
+ let f = Ye(d.mesh);
1264
1264
  f !== null && f < n.max.z + .4 && (d.mesh.position.z += n.max.z + .4 - f), i.add(d.mesh), o.push(d);
1265
1265
  }
1266
- let g = Be({
1266
+ let g = Ve({
1267
1267
  seed: e * 31 + 3,
1268
1268
  size: [
1269
1269
  u * 2.2,
@@ -1277,7 +1277,7 @@ function Ke({ seed: e, color: t, subject: n }) {
1277
1277
  detail: 4
1278
1278
  });
1279
1279
  g.mesh.material = a, g.mesh.rotation.set(0, (r() - .5) * .6, (r() - .5) * .15), g.mesh.position.set(s.x, n.min.y, s.z - p * .08), g.mesh.updateMatrixWorld(!0);
1280
- let v = Ye(g.mesh, s, l);
1280
+ let v = Xe(g.mesh, s, l);
1281
1281
  v !== null && (g.mesh.position.y += n.min.y - .15 - v), i.add(g.mesh), o.push(g);
1282
1282
  let y = d, b = new c(15001584, 1, y * 4, .36, .95, 2);
1283
1283
  b.position.set(s.x - y * .7, s.y + y * 1.15, s.z + y * .4), b.target.position.copy(s), b.castShadow = !0, b.shadow.mapSize.set(2048, 2048), b.shadow.camera.near = y * .3, b.shadow.camera.far = y * 3, b.shadow.radius = 3, b.shadow.blurSamples = 12, b.shadow.bias = -2e-4, b.shadow.normalBias = .6;
@@ -1298,37 +1298,37 @@ function Ke({ seed: e, color: t, subject: n }) {
1298
1298
  };
1299
1299
  }
1300
1300
  var Q = new _();
1301
- function qe(e, t, n, r) {
1301
+ function Je(e, t, n, r) {
1302
1302
  let i = e.geometry.getAttribute("position"), a = null;
1303
1303
  for (let o = 0; o < i.count; o++) Q.fromBufferAttribute(i, o).applyMatrix4(e.matrixWorld), !(Math.abs(Q.y - n.y) > r.y * .6 || Math.abs(Q.z - n.z) > Math.max(r.z * 2, 3)) && (a === null || (t < 0 ? Q.x > a : Q.x < a)) && (a = Q.x);
1304
1304
  return a;
1305
1305
  }
1306
- function Je(e) {
1306
+ function Ye(e) {
1307
1307
  let t = e.geometry.getAttribute("position"), n = null;
1308
1308
  for (let r = 0; r < t.count; r++) Q.fromBufferAttribute(t, r).applyMatrix4(e.matrixWorld), (n === null || Q.z < n) && (n = Q.z);
1309
1309
  return n;
1310
1310
  }
1311
- function Ye(e, t, n) {
1311
+ function Xe(e, t, n) {
1312
1312
  let r = e.geometry.getAttribute("position"), i = null;
1313
1313
  for (let a = 0; a < r.count; a++) Q.fromBufferAttribute(r, a).applyMatrix4(e.matrixWorld), !(Math.abs(Q.x - t.x) > n.x * .5 || Math.abs(Q.z - t.z) > Math.max(n.z, 1)) && (i === null || Q.y > i) && (i = Q.y);
1314
1314
  return i;
1315
1315
  }
1316
1316
  // ../engine/src/set/index.ts
1317
- var Xe = {
1318
- crevice: Ke,
1319
- block: Ne
1317
+ var Ze = {
1318
+ crevice: qe,
1319
+ block: Pe
1320
1320
  };
1321
- function Ze(e, t) {
1322
- let n = Xe[e];
1321
+ function Qe(e, t) {
1322
+ let n = Ze[e];
1323
1323
  return n ? n(t) : null;
1324
1324
  }
1325
1325
  // ../engine/src/engine.ts
1326
- var Qe = 2.35, $e = Math.PI / 180, et = {
1326
+ var $e = 2.35, et = Math.PI / 180, tt = {
1327
1327
  kind: "gradient",
1328
1328
  inner: "#f6f6f4",
1329
1329
  outer: "#d5d5d1",
1330
1330
  tone: "light"
1331
- }, tt = {
1331
+ }, nt = {
1332
1332
  fisheye: 0,
1333
1333
  chromatic: 0,
1334
1334
  vignette: 0,
@@ -1338,27 +1338,27 @@ var Qe = 2.35, $e = Math.PI / 180, et = {
1338
1338
  focus: 0,
1339
1339
  fade: 0
1340
1340
  };
1341
- function nt(e) {
1341
+ function rt(e) {
1342
1342
  return e.kind === "image" && e.image ? JSON.stringify(e.image) : null;
1343
1343
  }
1344
- function rt({ canvas: e, alpha: t = !0, quality: n = "preview" }) {
1344
+ function it({ canvas: e, alpha: t = !0, quality: n = "preview" }) {
1345
1345
  let r = new O({
1346
1346
  canvas: e,
1347
1347
  antialias: !0,
1348
1348
  alpha: t
1349
1349
  }), o = typeof window < "u" ? window.devicePixelRatio : 1;
1350
1350
  r.setPixelRatio(n === "export" ? 1 : Math.min(o, 2)), r.setClearColor(0, 0), r.autoClear = !1, r.toneMapping = 7, r.shadowMap.enabled = !0, r.shadowMap.type = 3;
1351
- let s = new I(), c = "studio", u = ue(r, c);
1351
+ let s = new I(), c = "studio", u = de(r, c);
1352
1352
  s.environment = u;
1353
1353
  let d = new l(28, 1, 5, 300);
1354
1354
  d.position.set(0, 1.5, 48);
1355
- let f = me(s, -10.5), p = ie(), m = ke(r, n === "export" ? 8 : 4), h = /* @__PURE__ */ new Map(), g = /* @__PURE__ */ new Map(), y = 0, b = et, x = tt, S = null, C = null, w = 0, T = new v(), E = 0, D = null, k = "", j = new _(), M = new _(), N = he(r), F = [], L = new _();
1355
+ let f = he(s, -10.5), p = ie(), m = Ae(r, n === "export" ? 8 : 4), h = /* @__PURE__ */ new Map(), g = /* @__PURE__ */ new Map(), y = 0, b = tt, x = nt, S = null, C = null, w = 0, T = new v(), E = 0, D = null, k = "", j = new _(), M = new _(), N = ge(r), F = [], L = new _();
1356
1356
  function R(e) {
1357
1357
  let t = u;
1358
- c = e, u = ue(r, e), s.environment = u, t.dispose(), f.light.shadow.radius = q[e].shadow.radius;
1358
+ c = e, u = de(r, e), s.environment = u, t.dispose(), f.light.shadow.radius = le[e].shadow.radius;
1359
1359
  }
1360
- async function z(e, t) {
1361
- let n = nt(e);
1360
+ async function B(e, t) {
1361
+ let n = rt(e);
1362
1362
  if (n === S) return null;
1363
1363
  let i = ++w, a = null;
1364
1364
  return e.image && n && t.resolveBackdrop && (a = await Promise.resolve(t.resolveBackdrop(e.image, { maxAnisotropy: r.capabilities.getMaxAnisotropy() })).catch(() => null)), () => {
@@ -1366,16 +1366,16 @@ function rt({ canvas: e, alpha: t = !0, quality: n = "preview" }) {
1366
1366
  C?.dispose(), C = a, S = n, p.setImage(a?.texture ?? null, a?.aspect);
1367
1367
  };
1368
1368
  }
1369
- function B() {
1369
+ function V() {
1370
1370
  let e = Infinity;
1371
1371
  for (let { build: t, root: n } of h.values()) {
1372
1372
  let r = t.bounds.min.y * n.scale.y + n.position.y;
1373
- e = Math.min(e, r - (t.restsOnFloor ? 0 : Qe));
1373
+ e = Math.min(e, r - (t.restsOnFloor ? 0 : $e));
1374
1374
  }
1375
1375
  return Number.isFinite(e) ? e : null;
1376
1376
  }
1377
- function V() {
1378
- let e = B();
1377
+ function H() {
1378
+ let e = V();
1379
1379
  e !== null && f.setY(e);
1380
1380
  let t = 0;
1381
1381
  for (let { build: e, root: n } of h.values()) {
@@ -1384,10 +1384,10 @@ function rt({ canvas: e, alpha: t = !0, quality: n = "preview" }) {
1384
1384
  }
1385
1385
  t > 0 && f.fit(t);
1386
1386
  }
1387
- function H() {
1388
- ne.forceLensPath || De(x) ? m.render(s, d, p, b, x, [f.ground], E) : (r.setRenderTarget(null), r.clear(), p.render(r, b), r.render(s, d));
1387
+ function U() {
1388
+ te.forceLensPath || Oe(x) ? m.render(s, d, p, b, x, [f.ground], E) : (r.setRenderTarget(null), r.clear(), p.render(r, b), r.render(s, d));
1389
1389
  }
1390
- function U(e, t = `device-${++y}`) {
1390
+ function W(e, t = `device-${++y}`) {
1391
1391
  let n = new P(), r = new P();
1392
1392
  n.add(r), r.add(e.group);
1393
1393
  for (let t of e.screens) t.mesh.layers.enable(1);
@@ -1398,34 +1398,34 @@ function rt({ canvas: e, alpha: t = !0, quality: n = "preview" }) {
1398
1398
  offset: r,
1399
1399
  build: e
1400
1400
  };
1401
- return h.set(t, i), V(), i;
1401
+ return h.set(t, i), H(), i;
1402
1402
  }
1403
- function W(e) {
1403
+ function G(e) {
1404
1404
  let t = h.get(e);
1405
- t && (s.remove(t.root), t.build.dispose(), h.delete(e), V());
1405
+ t && (s.remove(t.root), t.build.dispose(), h.delete(e), H());
1406
1406
  }
1407
- function G() {
1407
+ function K() {
1408
1408
  let e = new A();
1409
1409
  for (let { build: t, root: n } of h.values()) n.visible && e.union(t.bounds.clone().applyMatrix4(new i().compose(n.position, new a(), n.scale)));
1410
1410
  return e.isEmpty() ? null : e;
1411
1411
  }
1412
- function K(e) {
1413
- let t = e.set?.kind ?? "none", n = t === "none" ? null : G();
1412
+ function q(e) {
1413
+ let t = e.set?.kind ?? "none", n = t === "none" ? null : K();
1414
1414
  if (t !== "none" && !n) return;
1415
1415
  let r = n ? n.getSize(M).toArray().map((e) => e.toFixed(1)).join(",") : "", i = `${t}:${e.set?.seed}:${r}`;
1416
- i === k ? D && n && D.group.position.copy(n.getCenter(M)).sub(j) : (k = i, D && (s.remove(D.group), D.dispose()), D = n ? Ze(t, {
1416
+ i === k ? D && n && D.group.position.copy(n.getCenter(M)).sub(j) : (k = i, D && (s.remove(D.group), D.dispose()), D = n ? Qe(t, {
1417
1417
  seed: e.set.seed,
1418
1418
  color: e.set.color,
1419
1419
  subject: n
1420
1420
  }) : null, n && n.getCenter(j), D && s.add(D.group));
1421
1421
  }
1422
- function te(e, { skipCamera: t = !1 } = {}) {
1422
+ function ee(e, { skipCamera: t = !1 } = {}) {
1423
1423
  E = e.time;
1424
1424
  for (let [t, n] of h) {
1425
1425
  let r = e.devices[t];
1426
1426
  if (!r) n.root.visible = !1;
1427
1427
  else {
1428
- n.root.visible = r.visible, n.root.position.set(r.position[0], r.position[1], r.position[2]), n.root.rotation.set(r.rotation[0] * $e, r.rotation[1] * $e, r.rotation[2] * $e), n.root.scale.setScalar(r.scale);
1428
+ n.root.visible = r.visible, n.root.position.set(r.position[0], r.position[1], r.position[2]), n.root.rotation.set(r.rotation[0] * et, r.rotation[1] * et, r.rotation[2] * et), n.root.scale.setScalar(r.scale);
1429
1429
  for (let [e, t] of Object.entries(r.params)) n.build.setParam(e, t);
1430
1430
  n.build.setGlare(r.glare, r.screenFinish);
1431
1431
  }
@@ -1438,12 +1438,12 @@ function rt({ canvas: e, alpha: t = !0, quality: n = "preview" }) {
1438
1438
  };
1439
1439
  }
1440
1440
  b = e.backdrop;
1441
- let n = le(e.environment.preset);
1442
- n !== c && R(n), s.environmentIntensity = e.environment.intensity, s.environmentRotation.y = e.environment.rotation * $e;
1443
- let r = Math.min(1, e.floor.shadow * q[c].shadow.opacity);
1444
- f.setOpacity(r), f.setY(e.floor.y ?? B() ?? f.ground.position.y), K(e), f.setVisible(!D && r > 0), D?.update(e.set, e.environment.intensity), N.update(F, e.environment.glow ?? 0);
1441
+ let n = ue(e.environment.preset);
1442
+ n !== c && R(n), s.environmentIntensity = e.environment.intensity, s.environmentRotation.y = e.environment.rotation * et;
1443
+ let r = Math.min(1, e.floor.shadow * le[c].shadow.opacity);
1444
+ f.setOpacity(r), f.setY(e.floor.y ?? V() ?? f.ground.position.y), q(e), f.setVisible(!D && r > 0), D?.update(e.set, e.environment.intensity), N.update(F, e.environment.glow ?? 0);
1445
1445
  }
1446
- let ne = {
1446
+ let te = {
1447
1447
  renderer: r,
1448
1448
  scene: s,
1449
1449
  camera: d,
@@ -1452,8 +1452,8 @@ function rt({ canvas: e, alpha: t = !0, quality: n = "preview" }) {
1452
1452
  screenSources: g,
1453
1453
  maxAnisotropy: r.capabilities.getMaxAnisotropy(),
1454
1454
  forceLensPath: !1,
1455
- addDevice: U,
1456
- removeDevice: W,
1455
+ addDevice: W,
1456
+ removeDevice: G,
1457
1457
  async loadScene(e, t) {
1458
1458
  let n = new Map(e.screens.map((e) => [e.id, e])), i = [];
1459
1459
  for (let a of e.devices) {
@@ -1470,7 +1470,7 @@ function rt({ canvas: e, alpha: t = !0, quality: n = "preview" }) {
1470
1470
  source: u,
1471
1471
  surface: s,
1472
1472
  fit: l.fit,
1473
- pan: ee(l.offset)
1473
+ pan: z(l.offset)
1474
1474
  });
1475
1475
  }
1476
1476
  i.push({
@@ -1479,12 +1479,12 @@ function rt({ canvas: e, alpha: t = !0, quality: n = "preview" }) {
1479
1479
  sources: o
1480
1480
  });
1481
1481
  }
1482
- let a = await z(e.backdrop, t);
1483
- for (let e of [...h.keys()]) W(e);
1482
+ let a = await B(e.backdrop, t);
1483
+ for (let e of [...h.keys()]) G(e);
1484
1484
  for (let e of g.values()) e.dispose();
1485
1485
  g.clear(), F = [];
1486
1486
  for (let { deviceDoc: e, build: t, sources: n } of i) {
1487
- U(t, e.id);
1487
+ W(t, e.id);
1488
1488
  for (let { screenId: e, source: t, surface: r, fit: i, pan: a } of n) g.set(e, t), r.setTexture(t.texture, t.aspect, i, a);
1489
1489
  for (let e of t.screens) F.push({
1490
1490
  surface: e,
@@ -1494,12 +1494,12 @@ function rt({ canvas: e, alpha: t = !0, quality: n = "preview" }) {
1494
1494
  a?.();
1495
1495
  },
1496
1496
  async loadBackdrop(e, t) {
1497
- (await z(e, t))?.();
1497
+ (await B(e, t))?.();
1498
1498
  },
1499
1499
  setSize(e, t) {
1500
1500
  r.setSize(e, t, !1), r.getDrawingBufferSize(T), m.setSize(T.x, T.y), d.aspect = e / t, d.updateProjectionMatrix();
1501
1501
  },
1502
- applyState: te,
1502
+ applyState: ee,
1503
1503
  async prepareFrame(e) {
1504
1504
  let t = [];
1505
1505
  for (let [n, r] of g) {
@@ -1508,15 +1508,15 @@ function rt({ canvas: e, alpha: t = !0, quality: n = "preview" }) {
1508
1508
  }
1509
1509
  await Promise.all(t);
1510
1510
  },
1511
- render: H,
1511
+ render: U,
1512
1512
  renderFrame(e, t) {
1513
- te(e, t), H();
1513
+ ee(e, t), U();
1514
1514
  },
1515
1515
  start(e) {
1516
1516
  let t = performance.now();
1517
1517
  r.setAnimationLoop((n) => {
1518
1518
  let r = Math.min((n - t) / 1e3, .05);
1519
- t = n, e?.(n, r), H();
1519
+ t = n, e?.(n, r), U();
1520
1520
  });
1521
1521
  },
1522
1522
  stop() {
@@ -1524,38 +1524,38 @@ function rt({ canvas: e, alpha: t = !0, quality: n = "preview" }) {
1524
1524
  },
1525
1525
  renderToCanvas(e) {
1526
1526
  let t = r.getPixelRatio();
1527
- r.setPixelRatio(t * e), r.getDrawingBufferSize(T), m.setSize(T.x, T.y), H();
1527
+ r.setPixelRatio(t * e), r.getDrawingBufferSize(T), m.setSize(T.x, T.y), U();
1528
1528
  let n = document.createElement("canvas");
1529
- return n.width = r.domElement.width, n.height = r.domElement.height, n.getContext("2d")?.drawImage(r.domElement, 0, 0), r.setPixelRatio(t), r.getDrawingBufferSize(T), m.setSize(T.x, T.y), H(), n;
1529
+ return n.width = r.domElement.width, n.height = r.domElement.height, n.getContext("2d")?.drawImage(r.domElement, 0, 0), r.setPixelRatio(t), r.getDrawingBufferSize(T), m.setSize(T.x, T.y), U(), n;
1530
1530
  },
1531
1531
  dispose() {
1532
1532
  r.setAnimationLoop(null);
1533
- for (let e of [...h.keys()]) W(e);
1533
+ for (let e of [...h.keys()]) G(e);
1534
1534
  for (let e of g.values()) e.dispose();
1535
1535
  g.clear(), C?.dispose(), D?.dispose(), N.dispose(), f.dispose(), p.dispose(), m.dispose(), u.dispose(), r.dispose();
1536
1536
  }
1537
1537
  };
1538
- return ne;
1538
+ return te;
1539
1539
  }
1540
1540
  // ../engine/src/media/video.ts
1541
- var it = .0625, at = 16;
1542
- function ot(e) {
1541
+ var at = .0625, ot = 16;
1542
+ function st(e) {
1543
1543
  return {
1544
1544
  start: e?.start,
1545
1545
  playbackRate: e?.playbackRate,
1546
1546
  loop: e?.loop
1547
1547
  };
1548
1548
  }
1549
- function st({ start: e = 0, playbackRate: t = 1, loop: n = !0 } = {}) {
1550
- let r = Number.isFinite(t) && t > 0 ? Math.min(at, Math.max(it, t)) : 1;
1549
+ function ct({ start: e = 0, playbackRate: t = 1, loop: n = !0 } = {}) {
1550
+ let r = Number.isFinite(t) && t > 0 ? Math.min(ot, Math.max(at, t)) : 1;
1551
1551
  return {
1552
1552
  delayMs: Number.isFinite(e) && e > 0 ? e * 1e3 : 0,
1553
1553
  rate: r,
1554
1554
  loop: n
1555
1555
  };
1556
1556
  }
1557
- function ct(e, t = {}) {
1558
- let { delayMs: n, rate: r, loop: i } = st(t);
1557
+ function lt(e, t = {}) {
1558
+ let { delayMs: n, rate: r, loop: i } = ct(t);
1559
1559
  e.loop = i, e.defaultPlaybackRate = r, e.playbackRate = r;
1560
1560
  let a, o, s = () => {
1561
1561
  a = void 0, e.play().catch(() => {
@@ -1567,23 +1567,23 @@ function ct(e, t = {}) {
1567
1567
  };
1568
1568
  }
1569
1569
  // ../engine/src/media/file.ts
1570
- function lt(e, t) {
1570
+ function ut(e, t) {
1571
1571
  return e.colorSpace = p, e.anisotropy = t, e;
1572
1572
  }
1573
1573
  // ../engine/src/media/sample.ts
1574
- function ut(e, t) {
1574
+ function dt(e, t) {
1575
1575
  let n = e > 1, r = n ? 2048 : 1179, i = Math.round(r / e), a = document.createElement("canvas");
1576
1576
  a.width = r, a.height = i;
1577
1577
  let o = a.getContext("2d");
1578
- o && (n ? dt : ft)(o, r, i);
1579
- let s = lt(new M(a), t);
1578
+ o && (n ? ft : pt)(o, r, i);
1579
+ let s = ut(new M(a), t);
1580
1580
  return {
1581
1581
  texture: s,
1582
1582
  aspect: r / i,
1583
1583
  dispose: () => s.dispose()
1584
1584
  };
1585
1585
  }
1586
- function dt(e, t, n) {
1586
+ function ft(e, t, n) {
1587
1587
  let r = (e, t) => `${e} ${t}px ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif`;
1588
1588
  e.textBaseline = "middle";
1589
1589
  let i = e.createLinearGradient(0, 0, t, n);
@@ -1652,7 +1652,7 @@ function dt(e, t, n) {
1652
1652
  e.lineWidth = f * .32, e.lineCap = "round", e.strokeStyle = "rgba(255,255,255,0.1)", e.beginPath(), e.arc(u, d, f, 0, Math.PI * 2), e.stroke(), e.strokeStyle = a, e.beginPath(), e.arc(u, d, f, -Math.PI / 2, -Math.PI / 2 + Math.PI * 2 * i), e.stroke();
1653
1653
  });
1654
1654
  }
1655
- function ft(e, t, n) {
1655
+ function pt(e, t, n) {
1656
1656
  let r = (e, t) => `${e} ${t}px ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif`;
1657
1657
  e.textBaseline = "middle";
1658
1658
  let i = e.createLinearGradient(0, 0, 0, n);
@@ -1724,8 +1724,8 @@ function ft(e, t, n) {
1724
1724
  e.fillStyle = "rgba(255, 255, 255, 0.85)", e.beginPath(), e.roundRect(t / 2 - 140, n - 46, 280, 12, 6), e.fill();
1725
1725
  }
1726
1726
  // ../engine/src/interaction.ts
1727
- function pt({ engine: e, element: t, getDoc: n, overrides: r, onTime: i }) {
1728
- let a = 0, o = 0, s = 0, c = !1, l = 1, u = !1, d = 0, f = 0, p = z, m = z, h = null, g = null, _ = null, v = () => ({
1727
+ function mt({ engine: e, element: t, getDoc: n, overrides: r, onTime: i }) {
1728
+ let a = 0, o = 0, s = 0, c = !1, l = 1, u = !1, d = 0, f = 0, p = B, m = B, h = null, g = null, _ = null, v = () => ({
1729
1729
  ...n().interaction,
1730
1730
  ...r,
1731
1731
  cursor: {
@@ -1736,7 +1736,7 @@ function pt({ engine: e, element: t, getDoc: n, overrides: r, onTime: i }) {
1736
1736
  function y(e) {
1737
1737
  return g && g.timeline === e.timeline || (g = {
1738
1738
  timeline: e.timeline,
1739
- compiled: R(e.timeline)
1739
+ compiled: L(e.timeline)
1740
1740
  }), g.compiled;
1741
1741
  }
1742
1742
  function b(e, t, n) {
@@ -1768,19 +1768,19 @@ function pt({ engine: e, element: t, getDoc: n, overrides: r, onTime: i }) {
1768
1768
  }
1769
1769
  function C(t) {
1770
1770
  a = requestAnimationFrame(C);
1771
- let r = Math.min((t - o) / 1e3, .05) || 0;
1771
+ let s = Math.min((t - o) / 1e3, .05) || 0;
1772
1772
  o = t;
1773
- let s = n(), c = v();
1774
- m = G(m, p, r, c.cursor.smoothing), p = {
1773
+ let c = n(), l = v();
1774
+ m = V(m, p, s, l.cursor.smoothing), p = {
1775
1775
  ...p,
1776
- speed: p.speed * Math.exp(-r * 6)
1776
+ speed: p.speed * Math.exp(-s * 6)
1777
1777
  };
1778
- let l = x(r, s, c);
1779
- i?.(l);
1780
- let u = s.scene.devices.map((e) => e.id), d = [];
1781
- s.interaction.idle.float > 0 && d.push(B(t / 1e3, s.interaction.idle.float, u));
1782
- let f = W(s, l, [], y(s));
1783
- d.push(U(m, c.cursor, t / 1e3, u, f.camera)), e.renderFrame(W(s, l, d, y(s)));
1778
+ let u = x(s, c, l);
1779
+ i?.(u);
1780
+ let d = c.scene.devices.map((e) => e.id), f = [];
1781
+ c.interaction.idle.float > 0 && f.push(K(t / 1e3, c.interaction.idle.float, d));
1782
+ let h = R(c, u, [], y(c));
1783
+ f.push(q(m, l.cursor, t / 1e3, d, h.camera)), r?.cameraZoom && f.push(W(r.cameraZoom, h.camera)), e.renderFrame(R(c, u, f, y(c)));
1784
1784
  }
1785
1785
  let w = (e) => {
1786
1786
  let n = t.getBoundingClientRect(), r = (e.clientX - n.left) / n.width * 2 - 1, i = -((e.clientY - n.top) / n.height * 2 - 1), a = performance.now(), o = p.speed;
@@ -1798,7 +1798,7 @@ function pt({ engine: e, element: t, getDoc: n, overrides: r, onTime: i }) {
1798
1798
  speed: o
1799
1799
  };
1800
1800
  }, T = () => {
1801
- p = z, h = null, u = !1;
1801
+ p = B, h = null, u = !1;
1802
1802
  let e = v();
1803
1803
  e.trigger === "hover" && (e.hover?.reverseOnLeave ?? !0 ? (l = -1, c = !0) : c = !1);
1804
1804
  }, E = () => {
@@ -1826,35 +1826,35 @@ function pt({ engine: e, element: t, getDoc: n, overrides: r, onTime: i }) {
1826
1826
  };
1827
1827
  }
1828
1828
  // ../devices/src/registry.ts
1829
- var mt = {
1830
- phone: () => import("./device-phone-D__ngcPt.js").then((e) => e.t).then((e) => e.phone),
1831
- tablet: () => import("./device-tablet-C89f1GUw.js").then((e) => e.t).then((e) => e.tablet),
1832
- laptop: () => import("./device-laptop-abUqnCPB.js").then((e) => e.t).then((e) => e.laptop),
1833
- monitor: () => import("./device-monitor-DRfsMb1A.js").then((e) => e.t).then((e) => e.monitor),
1834
- watch: () => import("./device-watch-PwEcwA3q.js").then((e) => e.t).then((e) => e.watch)
1835
- }, ht = /* @__PURE__ */ new Map();
1836
- function gt(e) {
1837
- let t = ht.get(e);
1838
- return t || (t = mt[e](), ht.set(e, t)), t;
1839
- }
1829
+ var ht = {
1830
+ phone: () => import("./device-phone-DxWL5LkW.js").then((e) => e.t).then((e) => e.phone),
1831
+ tablet: () => import("./device-tablet-B1JOR7Rf.js").then((e) => e.t).then((e) => e.tablet),
1832
+ laptop: () => import("./device-laptop-DlKLhrO9.js").then((e) => e.t).then((e) => e.laptop),
1833
+ monitor: () => import("./device-monitor-BkXp8a-n.js").then((e) => e.t).then((e) => e.monitor),
1834
+ watch: () => import("./device-watch-9Y7wuyPn.js").then((e) => e.t).then((e) => e.watch)
1835
+ }, gt = /* @__PURE__ */ new Map();
1840
1836
  function _t(e) {
1837
+ let t = gt.get(e);
1838
+ return t || (t = ht[e](), gt.set(e, t)), t;
1839
+ }
1840
+ function vt(e) {
1841
1841
  let t = e.split(".")[0];
1842
- if (!(t in mt)) throw Error(`Unknown device spec '${e}'`);
1842
+ if (!(t in ht)) throw Error(`Unknown device spec '${e}'`);
1843
1843
  return t;
1844
1844
  }
1845
- function vt(e, t, n) {
1845
+ function yt(e, t, n) {
1846
1846
  if (typeof n != "string") return n;
1847
1847
  let r = e.finishes[n] ?? e.finishes[t.finishes[0] ?? ""];
1848
1848
  if (!r) throw Error(`Device '${t.id}' has no finishes`);
1849
1849
  return r;
1850
1850
  }
1851
- async function yt(e, t, n = "high") {
1852
- let r = await gt(_t(e)), i = r.specs[e];
1851
+ async function bt(e, t, n = "high") {
1852
+ let r = await _t(vt(e)), i = r.specs[e];
1853
1853
  if (!i) throw Error(`Unknown device spec '${e}'`);
1854
- return H(r.build(i, vt(r, i, t), n));
1854
+ return U(r.build(i, yt(r, i, t), n));
1855
1855
  }
1856
1856
  // src/media.ts
1857
- function bt(e, t) {
1857
+ function xt(e, t) {
1858
1858
  try {
1859
1859
  return new URL(e, t).href;
1860
1860
  } catch {
@@ -1864,19 +1864,19 @@ function bt(e, t) {
1864
1864
  async function $(e, t) {
1865
1865
  let n = new Image();
1866
1866
  n.crossOrigin = "anonymous", n.src = e, await n.decode();
1867
- let r = lt(new k(n), t);
1867
+ let r = ut(new k(n), t);
1868
1868
  return r.needsUpdate = !0, {
1869
1869
  texture: r,
1870
1870
  aspect: n.naturalWidth / n.naturalHeight,
1871
1871
  dispose: () => r.dispose()
1872
1872
  };
1873
1873
  }
1874
- async function xt(e, t, n) {
1874
+ async function St(e, t, n) {
1875
1875
  let r = document.createElement("video");
1876
1876
  r.crossOrigin = "anonymous", r.muted = !0, r.playsInline = !0, r.preload = "auto", r.src = e, await new Promise((t, n) => {
1877
1877
  r.addEventListener("loadedmetadata", () => t(), { once: !0 }), r.addEventListener("error", () => n(/* @__PURE__ */ Error(`Video failed: ${e}`)), { once: !0 });
1878
1878
  });
1879
- let i = ct(r, ot(n.video)), a = lt(new y(r), t);
1879
+ let i = lt(r, st(n.video)), a = ut(new y(r), t);
1880
1880
  return {
1881
1881
  texture: a,
1882
1882
  aspect: r.videoWidth / r.videoHeight,
@@ -1886,62 +1886,71 @@ async function xt(e, t, n) {
1886
1886
  }
1887
1887
  };
1888
1888
  }
1889
- function St(e, t, n) {
1889
+ function Ct(e, t, n) {
1890
1890
  return {
1891
- buildDevice: (e) => yt(e.spec, e.finish, t),
1891
+ buildDevice: (e) => bt(e.spec, e.finish, t),
1892
1892
  async resolveScreen(t, r, { maxAnisotropy: i, screenAspect: a }) {
1893
1893
  let o = t.media;
1894
- if (n) return t.poster ? $(t.poster, i).catch(() => ut(a, i)) : o?.source === "url" && o.kind === "image" ? $(bt(o.url, e), i).catch(() => null) : ut(a, i);
1895
- if (!o) return ut(a, i);
1894
+ if (n) return t.poster ? $(t.poster, i).catch(() => dt(a, i)) : o?.source === "url" && o.kind === "image" ? $(xt(o.url, e), i).catch(() => null) : dt(a, i);
1895
+ if (!o) return dt(a, i);
1896
1896
  if (o.source === "data") return $(o.dataUrl, i);
1897
1897
  if (o.source === "url") {
1898
- let n = bt(o.url, e);
1899
- return o.kind === "video" ? xt(n, i, t) : $(n, i);
1898
+ let n = xt(o.url, e);
1899
+ return o.kind === "video" ? St(n, i, t) : $(n, i);
1900
1900
  }
1901
- return ut(a, i);
1901
+ return dt(a, i);
1902
1902
  },
1903
1903
  async resolveBackdrop(t, { maxAnisotropy: r }) {
1904
- return n || t.kind !== "image" || t.source === "idb" ? null : $(t.source === "data" ? t.dataUrl : bt(t.url, e), r);
1904
+ return n || t.kind !== "image" || t.source === "idb" ? null : $(t.source === "data" ? t.dataUrl : xt(t.url, e), r);
1905
1905
  }
1906
1906
  };
1907
1907
  }
1908
1908
  // src/runtime.ts
1909
- var Ct = /* @__PURE__ */ e({ mount: () => Et }), wt = (e) => {
1909
+ var wt = /* @__PURE__ */ e({ mount: () => Dt }), Tt = (e) => {
1910
1910
  let t = window;
1911
1911
  t.requestIdleCallback ? t.requestIdleCallback(e, { timeout: 2e3 }) : setTimeout(e, 300);
1912
1912
  };
1913
- function Tt(e) {
1914
- let t = document.createElement("div"), n = e === "dark" ? "#f1f1f3" : "#17181b";
1915
- return t.style.cssText = `position:absolute;inset:0;display:grid;place-items:center;background:${e === "dark" ? "#0d0e11" : "#f4f4f2"};transition:opacity .3s`, t.innerHTML = `<div style="width:28px;height:28px;border-radius:50%;border:2px solid ${n}33;border-top-color:${n};animation:om-spin .8s linear infinite"></div><style>@keyframes om-spin{to{transform:rotate(360deg)}}</style>`, t;
1913
+ function Et(e, t) {
1914
+ let n = document.createElement("div"), r = e === "dark" ? "#f1f1f3" : "#17181b";
1915
+ return n.style.cssText = `position:absolute;inset:0;display:grid;place-items:center;background:${t && t !== "transparent" ? t : e === "dark" ? "#0d0e11" : "#f4f4f2"};transition:opacity .3s`, n.innerHTML = `<div style="width:28px;height:28px;border-radius:50%;border:2px solid ${r}33;border-top-color:${r};animation:om-spin .8s linear infinite"></div><style>@keyframes om-spin{to{transform:rotate(360deg)}}</style>`, n;
1916
1916
  }
1917
- async function Et(e, t, n) {
1917
+ async function Dt(e, t, n) {
1918
1918
  let r = await fetch(n, { credentials: "omit" });
1919
1919
  if (!r.ok) throw Error(`Could not load ${n} (${r.status})`);
1920
- let i = V(await r.json()), a = document.createElement("div");
1921
- a.style.cssText = "position:absolute;inset:0;";
1922
- let o = document.createElement("canvas");
1923
- o.style.cssText = "display:block;width:100%;height:100%;", o.setAttribute("aria-label", i.name), a.append(o), e.append(a);
1924
- let s = t.loader ? Tt(t.theme) : null;
1925
- s && e.append(s);
1926
- let c = rt({
1927
- canvas: o,
1920
+ let i = H(await r.json()), a = t.backgroundColor;
1921
+ a && (i.scene.backdrop = a === "transparent" ? {
1922
+ ...i.scene.backdrop,
1923
+ kind: "transparent"
1924
+ } : {
1925
+ ...i.scene.backdrop,
1926
+ kind: "solid",
1927
+ color: a
1928
+ });
1929
+ let o = document.createElement("div");
1930
+ o.style.cssText = "position:absolute;inset:0;";
1931
+ let s = document.createElement("canvas");
1932
+ s.style.cssText = "display:block;width:100%;height:100%;", s.setAttribute("aria-label", i.name), o.append(s), e.append(o);
1933
+ let c = t.loader ? Et(t.theme, a) : null;
1934
+ c && e.append(c);
1935
+ let l = it({
1936
+ canvas: s,
1928
1937
  quality: "embed"
1929
- }), l = () => c.setSize(e.clientWidth || 1, e.clientHeight || 1), u = new ResizeObserver(l);
1930
- u.observe(e);
1931
- let d = t.progressive ? St(n, "low", !0) : St(n, "high", !1);
1932
- await c.loadScene(i.scene, d), l();
1933
- let f = pt({
1934
- engine: c,
1938
+ }), u = () => l.setSize(e.clientWidth || 1, e.clientHeight || 1), d = new ResizeObserver(u);
1939
+ d.observe(e);
1940
+ let f = t.progressive ? Ct(n, "low", !0) : Ct(n, "high", !1);
1941
+ await l.loadScene(i.scene, f), u();
1942
+ let p = mt({
1943
+ engine: l,
1935
1944
  element: e,
1936
1945
  getDoc: () => i,
1937
1946
  overrides: t.overrides
1938
1947
  });
1939
- f.start(), s && (s.style.opacity = "0", setTimeout(() => s.remove(), 350));
1940
- let p = !1;
1941
- return t.progressive && wt(() => {
1942
- p || c.loadScene(i.scene, St(n, "high", !1));
1948
+ p.start(), c && (c.style.opacity = "0", setTimeout(() => c.remove(), 350));
1949
+ let m = !1;
1950
+ return t.progressive && Tt(() => {
1951
+ m || l.loadScene(i.scene, Ct(n, "high", !1));
1943
1952
  }), { dispose() {
1944
- p = !0, u.disconnect(), f.dispose(), c.dispose(), a.remove(), s?.remove();
1953
+ m = !0, d.disconnect(), p.dispose(), l.dispose(), o.remove(), c?.remove();
1945
1954
  } };
1946
1955
  }
1947
- export { Ct as t };
1956
+ export { wt as t };