@hadoku/watchparty-ui 0.45.30 → 0.45.31

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.
@@ -8,7 +8,7 @@ import { z as u } from "zod";
8
8
  import { createPrefsClient as al, getDeviceId as il, DEVICE_ID_KEY as ol } from "@wolffm/prefs-client";
9
9
  var uo = (e) => {
10
10
  throw TypeError(e);
11
- }, sl = (e, t, r) => t.has(e) || uo("Cannot " + r), wn = (e, t, r) => (sl(e, t, "read from private field"), r ? r.call(e) : t.get(e)), ll = (e, t, r) => t.has(e) ? uo("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(e) : t.set(e, r), Ga = "popstate";
11
+ }, sl = (e, t, r) => t.has(e) || uo("Cannot " + r), _n = (e, t, r) => (sl(e, t, "read from private field"), r ? r.call(e) : t.get(e)), ll = (e, t, r) => t.has(e) ? uo("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(e) : t.set(e, r), Ga = "popstate";
12
12
  function cl(e = {}) {
13
13
  function t(n, a) {
14
14
  let { pathname: i, search: o, hash: s } = n.location;
@@ -178,8 +178,8 @@ var Vt, Ya = class {
178
178
  * value was set
179
179
  */
180
180
  get(e) {
181
- if (wn(this, Vt).has(e))
182
- return wn(this, Vt).get(e);
181
+ if (_n(this, Vt).has(e))
182
+ return _n(this, Vt).get(e);
183
183
  if (e.defaultValue !== void 0)
184
184
  return e.defaultValue;
185
185
  throw new Error("No value found for context");
@@ -193,7 +193,7 @@ var Vt, Ya = class {
193
193
  * @returns {void}
194
194
  */
195
195
  set(e, t) {
196
- wn(this, Vt).set(e, t);
196
+ _n(this, Vt).set(e, t);
197
197
  }
198
198
  };
199
199
  Vt = /* @__PURE__ */ new WeakMap();
@@ -395,11 +395,11 @@ function xl(e, t) {
395
395
  function Cl(e, t, r = !1) {
396
396
  let { routesMeta: n } = e, a = {}, i = "/", o = [];
397
397
  for (let s = 0; s < n.length; ++s) {
398
- let l = n[s], c = s === n.length - 1, f = i === "/" ? t : t.slice(i.length) || "/", h = Xr(
398
+ let l = n[s], c = s === n.length - 1, f = i === "/" ? t : t.slice(i.length) || "/", h = Jr(
399
399
  { path: l.relativePath, caseSensitive: l.caseSensitive, end: c },
400
400
  f
401
401
  ), g = l.route;
402
- if (!h && c && r && !n[n.length - 1].route.index && (h = Xr(
402
+ if (!h && c && r && !n[n.length - 1].route.index && (h = Jr(
403
403
  {
404
404
  path: l.relativePath,
405
405
  caseSensitive: l.caseSensitive,
@@ -420,7 +420,7 @@ function Cl(e, t, r = !1) {
420
420
  }
421
421
  return o;
422
422
  }
423
- function Xr(e, t) {
423
+ function Jr(e, t) {
424
424
  typeof e == "string" && (e = { path: e, caseSensitive: !1, end: !0 });
425
425
  let [r, n] = kl(
426
426
  e.path,
@@ -480,7 +480,7 @@ function Pl({
480
480
  }) {
481
481
  return t === "/" ? e : He([e, t]);
482
482
  }
483
- var mo = /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i, tn = (e) => mo.test(e);
483
+ var mo = /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i, rn = (e) => mo.test(e);
484
484
  function Ml(e, t = "/") {
485
485
  let {
486
486
  pathname: r,
@@ -488,7 +488,7 @@ function Ml(e, t = "/") {
488
488
  hash: a = ""
489
489
  } = typeof e == "string" ? ut(e) : e, i;
490
490
  if (r)
491
- if (tn(r))
491
+ if (rn(r))
492
492
  i = r;
493
493
  else {
494
494
  if (r.includes("//")) {
@@ -514,7 +514,7 @@ function Qa(e, t) {
514
514
  a === ".." ? r.length > 1 && r.pop() : a !== "." && r.push(a);
515
515
  }), r.length > 1 ? r.join("/") : "/";
516
516
  }
517
- function _n(e, t, r, n) {
517
+ function En(e, t, r, n) {
518
518
  return `Cannot include a '${e}' character in a manually specified \`to.${t}\` field [${JSON.stringify(
519
519
  n
520
520
  )}]. Please separate it out to the \`to.${r}\` field. Alternatively you may provide the full path as a string in <Link to="..."> and the router will parse it for you.`;
@@ -534,13 +534,13 @@ function ta(e, t, r, n = !1) {
534
534
  let a;
535
535
  typeof e == "string" ? a = ut(e) : (a = { ...e }, Y(
536
536
  !a.pathname || !a.pathname.includes("?"),
537
- _n("?", "pathname", "search", a)
537
+ En("?", "pathname", "search", a)
538
538
  ), Y(
539
539
  !a.pathname || !a.pathname.includes("#"),
540
- _n("#", "pathname", "hash", a)
540
+ En("#", "pathname", "hash", a)
541
541
  ), Y(
542
542
  !a.search || !a.search.includes("#"),
543
- _n("#", "search", "hash", a)
543
+ En("#", "search", "hash", a)
544
544
  ));
545
545
  let i = e === "" || a.pathname === "", o = i ? "/" : a.pathname, s;
546
546
  if (o == null)
@@ -783,7 +783,7 @@ var wo = [
783
783
  ), zl = [
784
784
  "GET",
785
785
  ...wo
786
- ], Hl = new Set(zl), _o = /* @__PURE__ */ new Set([301, 302, 303, 307, 308]), ql = /* @__PURE__ */ new Set([307, 308]), En = {
786
+ ], Hl = new Set(zl), _o = /* @__PURE__ */ new Set([301, 302, 303, 307, 308]), ql = /* @__PURE__ */ new Set([307, 308]), Sn = {
787
787
  state: "idle",
788
788
  location: void 0,
789
789
  formMethod: void 0,
@@ -857,11 +857,11 @@ function Gl(e) {
857
857
  (R) => m[R.route.id] !== void 0
858
858
  );
859
859
  E = _.slice(0, b + 1).every(
860
- (R) => !$n(R.route, d, m)
860
+ (R) => !Fn(R.route, d, m)
861
861
  );
862
862
  } else
863
863
  E = _.every(
864
- (b) => !$n(b.route, d, m)
864
+ (b) => !Fn(b.route, d, m)
865
865
  );
866
866
  }
867
867
  else {
@@ -878,7 +878,7 @@ function Gl(e) {
878
878
  location: e.history.location,
879
879
  matches: _,
880
880
  initialized: E,
881
- navigation: En,
881
+ navigation: Sn,
882
882
  // Don't restore on initial updateState() if we were SSR'd
883
883
  restoreScrollPosition: e.hydrationData != null ? !1 : null,
884
884
  preventScrollReset: !1,
@@ -939,7 +939,7 @@ function Gl(e) {
939
939
  }), V;
940
940
  }
941
941
  function mr() {
942
- g && g(), W && W(), y.clear(), U && U.abort(), p.fetchers.forEach((d, m) => yn(m)), p.blockers.forEach((d, m) => Ba(m));
942
+ g && g(), W && W(), y.clear(), U && U.abort(), p.fetchers.forEach((d, m) => vn(m)), p.blockers.forEach((d, m) => Ba(m));
943
943
  }
944
944
  function Nt(d) {
945
945
  return y.add(d), () => y.delete(d);
@@ -967,7 +967,7 @@ function Gl(e) {
967
967
  viewTransitionOpts: m.viewTransitionOpts,
968
968
  flushSync: m.flushSync === !0
969
969
  })
970
- ), b.forEach((k) => yn(k)), R.forEach((k) => p.fetchers.delete(k));
970
+ ), b.forEach((k) => vn(k)), R.forEach((k) => p.fetchers.delete(k));
971
971
  }
972
972
  function Ge(d, m, { flushSync: b } = {}) {
973
973
  let R = p.actionData != null && p.navigation.formMethod != null && be(p.navigation.formMethod) && p.navigation.state === "loading" && d.state?._isRedirect !== !0, k;
@@ -1007,7 +1007,7 @@ function Gl(e) {
1007
1007
  historyAction: P,
1008
1008
  location: d,
1009
1009
  initialized: !0,
1010
- navigation: En,
1010
+ navigation: Sn,
1011
1011
  revalidation: "idle",
1012
1012
  restoreScrollPosition: I,
1013
1013
  preventScrollReset: O,
@@ -1025,7 +1025,7 @@ function Gl(e) {
1025
1025
  let ee = $.promise;
1026
1026
  return e.history.go(d), ee;
1027
1027
  }
1028
- let b = Nn(
1028
+ let b = $n(
1029
1029
  p.location,
1030
1030
  p.matches,
1031
1031
  c,
@@ -1079,8 +1079,8 @@ function Gl(e) {
1079
1079
  callSiteDefaultShouldRevalidate: m && m.unstable_defaultShouldRevalidate
1080
1080
  });
1081
1081
  }
1082
- function hn() {
1083
- ft || (ft = pi()), gn(), me({ revalidation: "loading" });
1082
+ function pn() {
1083
+ ft || (ft = pi()), yn(), me({ revalidation: "loading" });
1084
1084
  let d = ft.promise;
1085
1085
  return p.navigation.state === "submitting" ? d : p.navigation.state === "idle" ? (je(p.historyAction, p.location, {
1086
1086
  startUninterruptedRevalidation: !0
@@ -1106,7 +1106,7 @@ function Gl(e) {
1106
1106
  }
1107
1107
  let I = wr(L, R, m.pathname);
1108
1108
  if (I.active && I.matches && (L = I.matches), !L) {
1109
- let { error: he, notFoundMatches: _e, route: ie } = vn(
1109
+ let { error: he, notFoundMatches: _e, route: ie } = bn(
1110
1110
  m.pathname
1111
1111
  );
1112
1112
  Ge(
@@ -1160,7 +1160,7 @@ function Gl(e) {
1160
1160
  return;
1161
1161
  }
1162
1162
  }
1163
- L = he.matches || L, q = he.pendingActionResult, k = Sn(m, b.submission), M = !1, I.active = !1, O = xt(
1163
+ L = he.matches || L, q = he.pendingActionResult, k = Rn(m, b.submission), M = !1, I.active = !1, O = xt(
1164
1164
  e.history,
1165
1165
  O.url,
1166
1166
  O.signal
@@ -1194,7 +1194,7 @@ function Gl(e) {
1194
1194
  }));
1195
1195
  }
1196
1196
  async function gr(d, m, b, R, k, L, M, I = {}) {
1197
- gn();
1197
+ yn();
1198
1198
  let O = pc(m, b);
1199
1199
  if (me({ navigation: O }, { flushSync: I.flushSync === !0 }), L) {
1200
1200
  let D = await _r(
@@ -1232,7 +1232,7 @@ function Gl(e) {
1232
1232
  } else if (D.matches)
1233
1233
  R = D.matches;
1234
1234
  else {
1235
- let { notFoundMatches: Z, error: ee, route: ge } = vn(
1235
+ let { notFoundMatches: Z, error: ee, route: ge } = bn(
1236
1236
  m.pathname
1237
1237
  );
1238
1238
  return {
@@ -1311,7 +1311,7 @@ function Gl(e) {
1311
1311
  };
1312
1312
  }
1313
1313
  async function yr(d, m, b, R, k, L, M, I, O, N, q, D, Z) {
1314
- let ee = L || Sn(m, M), ge = M || I || hi(ee), he = !H && !N;
1314
+ let ee = L || Rn(m, M), ge = M || I || hi(ee), he = !H && !N;
1315
1315
  if (k) {
1316
1316
  if (he) {
1317
1317
  let ve = vr(D);
@@ -1354,7 +1354,7 @@ function Gl(e) {
1354
1354
  } else if (J.matches)
1355
1355
  b = J.matches;
1356
1356
  else {
1357
- let { error: ve, notFoundMatches: Rt, route: gt } = vn(
1357
+ let { error: ve, notFoundMatches: Rt, route: gt } = bn(
1358
1358
  m.pathname
1359
1359
  );
1360
1360
  return {
@@ -1413,7 +1413,7 @@ function Gl(e) {
1413
1413
  let ve = vr(D);
1414
1414
  ve !== void 0 && (J.actionData = ve);
1415
1415
  }
1416
- ke.length > 0 && (J.fetchers = pn(ke)), me(J, { flushSync: q });
1416
+ ke.length > 0 && (J.fetchers = mn(ke)), me(J, { flushSync: q });
1417
1417
  }
1418
1418
  ke.forEach((J) => {
1419
1419
  Xe(J.key), J.controller && G.set(J.key, J.controller);
@@ -1444,7 +1444,7 @@ function Gl(e) {
1444
1444
  return pe.add(ze.key), await ht(d, ze.result, !0, {
1445
1445
  replace: O
1446
1446
  }), { shortCircuited: !0 };
1447
- let { loaderData: bn, errors: Ut } = ci(
1447
+ let { loaderData: wn, errors: Ut } = ci(
1448
1448
  p,
1449
1449
  b,
1450
1450
  Ft,
@@ -1456,7 +1456,7 @@ function Gl(e) {
1456
1456
  let mt = Fa(), Er = Ua(ce), Sr = mt || Er || ke.length > 0;
1457
1457
  return {
1458
1458
  matches: b,
1459
- loaderData: bn,
1459
+ loaderData: wn,
1460
1460
  errors: Ut,
1461
1461
  ...Sr ? { fetchers: new Map(p.fetchers) } : {}
1462
1462
  };
@@ -1469,7 +1469,7 @@ function Gl(e) {
1469
1469
  if (p.actionData)
1470
1470
  return Object.keys(p.actionData).length === 0 ? null : p.actionData;
1471
1471
  }
1472
- function pn(d) {
1472
+ function mn(d) {
1473
1473
  return d.forEach((m) => {
1474
1474
  let b = p.fetchers.get(m.key), R = jt(
1475
1475
  void 0,
@@ -1478,9 +1478,9 @@ function Gl(e) {
1478
1478
  p.fetchers.set(m.key, R);
1479
1479
  }), new Map(p.fetchers);
1480
1480
  }
1481
- async function mn(d, m, b, R) {
1481
+ async function gn(d, m, b, R) {
1482
1482
  Xe(d);
1483
- let k = (R && R.flushSync) === !0, L = l || s, M = Nn(
1483
+ let k = (R && R.flushSync) === !0, L = l || s, M = $n(
1484
1484
  p.location,
1485
1485
  p.matches,
1486
1486
  c,
@@ -1535,7 +1535,7 @@ function Gl(e) {
1535
1535
  );
1536
1536
  }
1537
1537
  async function js(d, m, b, R, k, L, M, I, O, N) {
1538
- gn(), we.delete(d);
1538
+ yn(), we.delete(d);
1539
1539
  let q = p.fetchers.get(d);
1540
1540
  Ke(d, mc(O, q), {
1541
1541
  flushSync: M
@@ -1634,8 +1634,8 @@ function Gl(e) {
1634
1634
  Y(at, "Didn't find any matches after fetcher action");
1635
1635
  let ze = ++se;
1636
1636
  Te.set(d, ze);
1637
- let bn = jt(O, ie.data);
1638
- p.fetchers.set(d, bn);
1637
+ let wn = jt(O, ie.data);
1638
+ p.fetchers.set(d, wn);
1639
1639
  let { dsMatches: Ut, revalidatingFetchers: mt } = ri(
1640
1640
  pt,
1641
1641
  k,
@@ -1823,7 +1823,7 @@ function Gl(e) {
1823
1823
  let ge = !1;
1824
1824
  if (m.response.headers.has("X-Remix-Reload-Document"))
1825
1825
  ge = !0;
1826
- else if (tn(I)) {
1826
+ else if (rn(I)) {
1827
1827
  const he = fo(I, !0);
1828
1828
  ge = // Hard reload if it's an absolute URL to a new origin
1829
1829
  he.origin !== t.location.origin || // Hard reload if it's an absolute URL that does not match our basename
@@ -1849,7 +1849,7 @@ function Gl(e) {
1849
1849
  enableViewTransition: b ? Q : void 0
1850
1850
  });
1851
1851
  else {
1852
- let ge = Sn(
1852
+ let ge = Rn(
1853
1853
  O,
1854
1854
  R
1855
1855
  );
@@ -1947,7 +1947,7 @@ function Gl(e) {
1947
1947
  fetcherResults: I
1948
1948
  };
1949
1949
  }
1950
- function gn() {
1950
+ function yn() {
1951
1951
  ae = !0, we.forEach((d, m) => {
1952
1952
  G.has(m) && ye.add(m), Xe(m);
1953
1953
  });
@@ -1960,7 +1960,7 @@ function Gl(e) {
1960
1960
  }
1961
1961
  function Ye(d, m, b, R = {}) {
1962
1962
  let k = ot(p.matches, m);
1963
- yn(d), me(
1963
+ vn(d), me(
1964
1964
  {
1965
1965
  errors: {
1966
1966
  [k.route.id]: b
@@ -1976,7 +1976,7 @@ function Gl(e) {
1976
1976
  function Hs(d, m) {
1977
1977
  Xe(d, m?.reason), Ke(d, Ze(null));
1978
1978
  }
1979
- function yn(d) {
1979
+ function vn(d) {
1980
1980
  let m = p.fetchers.get(d);
1981
1981
  G.has(d) && !(m && m.state === "loading" && Te.has(d)) && Xe(d), we.delete(d), Te.delete(d), pe.delete(d), fe.delete(d), ye.delete(d), p.fetchers.delete(d);
1982
1982
  }
@@ -2039,12 +2039,12 @@ function Gl(e) {
2039
2039
  if (!(M && M.state === "proceeding") && L({ currentLocation: d, nextLocation: m, historyAction: b }))
2040
2040
  return k;
2041
2041
  }
2042
- function vn(d) {
2042
+ function bn(d) {
2043
2043
  let m = Ae(404, { pathname: d }), b = l || s, { matches: R, route: k } = Tr(b);
2044
2044
  return { notFoundMatches: R, route: k, error: m };
2045
2045
  }
2046
2046
  function Ws(d, m, b) {
2047
- if (S = d, v = m, T = b || null, !x && p.navigation === En) {
2047
+ if (S = d, v = m, T = b || null, !x && p.navigation === Sn) {
2048
2048
  x = !0;
2049
2049
  let R = Ha(p.location, p.matches);
2050
2050
  R != null && me({ restoreScrollPosition: R });
@@ -2189,8 +2189,8 @@ function Gl(e) {
2189
2189
  subscribe: Nt,
2190
2190
  enableScrollRestoration: Ws,
2191
2191
  navigate: nt,
2192
- fetch: mn,
2193
- revalidate: hn,
2192
+ fetch: gn,
2193
+ revalidate: pn,
2194
2194
  // Passthrough to history-aware createHref used by useHref so we get proper
2195
2195
  // hash-aware URLs in DOM paths
2196
2196
  createHref: (d) => e.history.createHref(d),
@@ -2217,7 +2217,7 @@ function Gl(e) {
2217
2217
  function Kl(e) {
2218
2218
  return e != null && ("formData" in e && e.formData != null || "body" in e && e.body !== void 0);
2219
2219
  }
2220
- function Nn(e, t, r, n, a, i) {
2220
+ function $n(e, t, r, n, a, i) {
2221
2221
  let o, s;
2222
2222
  if (a) {
2223
2223
  o = [];
@@ -2309,9 +2309,9 @@ function ti(e, t, r) {
2309
2309
  );
2310
2310
  let s, l;
2311
2311
  if (r.formData)
2312
- s = Un(r.formData), l = r.formData;
2312
+ s = Bn(r.formData), l = r.formData;
2313
2313
  else if (r.body instanceof FormData)
2314
- s = Un(r.body), l = r.body;
2314
+ s = Bn(r.body), l = r.body;
2315
2315
  else if (r.body instanceof URLSearchParams)
2316
2316
  s = r.body, l = li(s);
2317
2317
  else if (r.body == null)
@@ -2354,12 +2354,12 @@ function ri(e, t, r, n, a, i, o, s, l, c, f, h, g, y, S, T, v, x, _, A, B) {
2354
2354
  actionStatus: $
2355
2355
  }, Q = dr(o), oe = o.map((H, ae) => {
2356
2356
  let { route: ye } = H, G = null;
2357
- if (P != null && ae > P ? G = !1 : ye.lazy ? G = !0 : ra(ye) ? f ? G = $n(
2357
+ if (P != null && ae > P ? G = !1 : ye.lazy ? G = !0 : ra(ye) ? f ? G = Fn(
2358
2358
  ye,
2359
2359
  i.loaderData,
2360
2360
  i.errors
2361
2361
  ) : Yl(i.loaderData, i.matches[ae], H) && (G = !0) : G = !1, G !== null)
2362
- return Fn(
2362
+ return Un(
2363
2363
  r,
2364
2364
  n,
2365
2365
  e,
@@ -2375,7 +2375,7 @@ function ri(e, t, r, n, a, i, o, s, l, c, f, h, g, y, S, T, v, x, _, A, B) {
2375
2375
  ...U,
2376
2376
  defaultShouldRevalidate: se
2377
2377
  }, Te = Xt(H, ce);
2378
- return Fn(
2378
+ return Un(
2379
2379
  r,
2380
2380
  n,
2381
2381
  e,
@@ -2465,7 +2465,7 @@ function ri(e, t, r, n, a, i, o, s, l, c, f, h, g, y, S, T, v, x, _, A, B) {
2465
2465
  function ra(e) {
2466
2466
  return e.loader != null || e.middleware != null && e.middleware.length > 0;
2467
2467
  }
2468
- function $n(e, t, r) {
2468
+ function Fn(e, t, r) {
2469
2469
  if (e.lazy)
2470
2470
  return !0;
2471
2471
  if (!ra(e))
@@ -2771,7 +2771,7 @@ function ko(e, t, r, n, a) {
2771
2771
  handler: o.lazyHandlerPromise
2772
2772
  };
2773
2773
  }
2774
- function Fn(e, t, r, n, a, i, o, s, l = null, c) {
2774
+ function Un(e, t, r, n, a, i, o, s, l = null, c) {
2775
2775
  let f = !1, h = ko(
2776
2776
  e,
2777
2777
  t,
@@ -2821,7 +2821,7 @@ function kt(e, t, r, n, a, i, o, s = null) {
2821
2821
  i
2822
2822
  ),
2823
2823
  resolve: () => Promise.resolve({ type: "data", result: void 0 })
2824
- } : Fn(
2824
+ } : Un(
2825
2825
  e,
2826
2826
  t,
2827
2827
  r,
@@ -3000,12 +3000,12 @@ function ac(e, t, r, n, a) {
3000
3000
  if (Y(
3001
3001
  i,
3002
3002
  "Redirects returned/thrown from loaders/actions must have a Location header"
3003
- ), !tn(i)) {
3003
+ ), !rn(i)) {
3004
3004
  let o = n.slice(
3005
3005
  0,
3006
3006
  n.findIndex((s) => s.route.id === r) + 1
3007
3007
  );
3008
- i = Nn(
3008
+ i = $n(
3009
3009
  new URL(t.url),
3010
3010
  o,
3011
3011
  a,
@@ -3028,7 +3028,7 @@ function si(e, t, r, n) {
3028
3028
  // eslint-disable-next-line no-script-url
3029
3029
  "javascript:"
3030
3030
  ];
3031
- if (tn(e)) {
3031
+ if (rn(e)) {
3032
3032
  let i = e, o = i.startsWith("//") ? new URL(t.protocol + i) : new URL(i);
3033
3033
  if (a.includes(o.protocol))
3034
3034
  throw new Error("Invalid redirect location");
@@ -3048,11 +3048,11 @@ function xt(e, t, r, n) {
3048
3048
  let a = e.createURL(Ao(t)).toString(), i = { signal: r };
3049
3049
  if (n && be(n.formMethod)) {
3050
3050
  let { formMethod: o, formEncType: s } = n;
3051
- i.method = o.toUpperCase(), s === "application/json" ? (i.headers = new Headers({ "Content-Type": s }), i.body = JSON.stringify(n.json)) : s === "text/plain" ? i.body = n.text : s === "application/x-www-form-urlencoded" && n.formData ? i.body = Un(n.formData) : i.body = n.formData;
3051
+ i.method = o.toUpperCase(), s === "application/json" ? (i.headers = new Headers({ "Content-Type": s }), i.body = JSON.stringify(n.json)) : s === "text/plain" ? i.body = n.text : s === "application/x-www-form-urlencoded" && n.formData ? i.body = Bn(n.formData) : i.body = n.formData;
3052
3052
  }
3053
3053
  return new Request(a, i);
3054
3054
  }
3055
- function Un(e) {
3055
+ function Bn(e) {
3056
3056
  let t = new URLSearchParams();
3057
3057
  for (let [r, n] of e.entries())
3058
3058
  t.append(r, typeof n == "string" ? n : n.name);
@@ -3268,7 +3268,7 @@ function hi(e) {
3268
3268
  };
3269
3269
  }
3270
3270
  }
3271
- function Sn(e, t) {
3271
+ function Rn(e, t) {
3272
3272
  return t ? {
3273
3273
  state: "loading",
3274
3274
  location: e,
@@ -3423,10 +3423,10 @@ var Le = w.createContext(
3423
3423
  null
3424
3424
  );
3425
3425
  Le.displayName = "Navigation";
3426
- var rn = w.createContext(
3426
+ var nn = w.createContext(
3427
3427
  null
3428
3428
  );
3429
- rn.displayName = "Location";
3429
+ nn.displayName = "Location";
3430
3430
  var We = w.createContext({
3431
3431
  outlet: null,
3432
3432
  matches: [],
@@ -3471,7 +3471,7 @@ function Rc(e, { relative: t } = {}) {
3471
3471
  return r !== "/" && (s = i === "/" ? r : He([r, i])), n.createHref({ pathname: s, search: o, hash: a });
3472
3472
  }
3473
3473
  function hr() {
3474
- return w.useContext(rn) != null;
3474
+ return w.useContext(nn) != null;
3475
3475
  }
3476
3476
  function dt() {
3477
3477
  return Y(
@@ -3479,7 +3479,7 @@ function dt() {
3479
3479
  // TODO: This error is probably because they somehow have 2 versions of the
3480
3480
  // router loaded. We can help them understand how to avoid that.
3481
3481
  "useLocation() may be used only in the context of a <Router> component."
3482
- ), w.useContext(rn).location;
3482
+ ), w.useContext(nn).location;
3483
3483
  }
3484
3484
  var Lo = "You should call navigate() in a React.useEffect(), not when your component is first rendered.";
3485
3485
  function Oo(e) {
@@ -3660,7 +3660,7 @@ var Pc = /* @__PURE__ */ w.createElement(Ac, null), Do = class extends w.Compone
3660
3660
  }
3661
3661
  };
3662
3662
  Do.contextType = Po;
3663
- var Rn = /* @__PURE__ */ new WeakMap();
3663
+ var Tn = /* @__PURE__ */ new WeakMap();
3664
3664
  function Mc({
3665
3665
  children: e,
3666
3666
  error: t
@@ -3669,10 +3669,10 @@ function Mc({
3669
3669
  if (typeof t == "object" && t && "digest" in t && typeof t.digest == "string") {
3670
3670
  let n = Ec(t.digest);
3671
3671
  if (n) {
3672
- let a = Rn.get(t);
3672
+ let a = Tn.get(t);
3673
3673
  if (a) throw a;
3674
3674
  let i = vo(n.location, r);
3675
- if (yo && !Rn.get(t))
3675
+ if (yo && !Tn.get(t))
3676
3676
  if (i.isExternal || n.reloadDocument)
3677
3677
  window.location.href = i.absoluteURL || i.to;
3678
3678
  else {
@@ -3681,7 +3681,7 @@ function Mc({
3681
3681
  replace: n.replace
3682
3682
  })
3683
3683
  );
3684
- throw Rn.set(t, o), o;
3684
+ throw Tn.set(t, o), o;
3685
3685
  }
3686
3686
  return /* @__PURE__ */ w.createElement(
3687
3687
  "meta",
@@ -4105,20 +4105,20 @@ function Yc({
4105
4105
  return ue(
4106
4106
  S != null,
4107
4107
  `<Router basename="${s}"> is not able to match the URL "${c}${f}${h}" because it does not start with the basename, so the <Router> won't render anything.`
4108
- ), S == null ? null : /* @__PURE__ */ w.createElement(Le.Provider, { value: l }, /* @__PURE__ */ w.createElement(rn.Provider, { children: t, value: S }));
4108
+ ), S == null ? null : /* @__PURE__ */ w.createElement(Le.Provider, { value: l }, /* @__PURE__ */ w.createElement(nn.Provider, { children: t, value: S }));
4109
4109
  }
4110
4110
  var $r = "get", Fr = "application/x-www-form-urlencoded";
4111
- function nn(e) {
4111
+ function an(e) {
4112
4112
  return typeof HTMLElement < "u" && e instanceof HTMLElement;
4113
4113
  }
4114
4114
  function Xc(e) {
4115
- return nn(e) && e.tagName.toLowerCase() === "button";
4115
+ return an(e) && e.tagName.toLowerCase() === "button";
4116
4116
  }
4117
4117
  function Jc(e) {
4118
- return nn(e) && e.tagName.toLowerCase() === "form";
4118
+ return an(e) && e.tagName.toLowerCase() === "form";
4119
4119
  }
4120
4120
  function Qc(e) {
4121
- return nn(e) && e.tagName.toLowerCase() === "input";
4121
+ return an(e) && e.tagName.toLowerCase() === "input";
4122
4122
  }
4123
4123
  function Zc(e) {
4124
4124
  return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey);
@@ -4147,7 +4147,7 @@ var ru = /* @__PURE__ */ new Set([
4147
4147
  "multipart/form-data",
4148
4148
  "text/plain"
4149
4149
  ]);
4150
- function Tn(e) {
4150
+ function xn(e) {
4151
4151
  return e != null && !ru.has(e) ? (ue(
4152
4152
  !1,
4153
4153
  `"${e}" is not a valid \`encType\` for \`<Form>\`/\`<fetcher.Form>\` and will default to "${Fr}"`
@@ -4157,7 +4157,7 @@ function nu(e, t) {
4157
4157
  let r, n, a, i, o;
4158
4158
  if (Jc(e)) {
4159
4159
  let s = e.getAttribute("action");
4160
- n = s ? Ie(s, t) : null, r = e.getAttribute("method") || $r, a = Tn(e.getAttribute("enctype")) || Fr, i = new FormData(e);
4160
+ n = s ? Ie(s, t) : null, r = e.getAttribute("method") || $r, a = xn(e.getAttribute("enctype")) || Fr, i = new FormData(e);
4161
4161
  } else if (Xc(e) || Qc(e) && (e.type === "submit" || e.type === "image")) {
4162
4162
  let s = e.form;
4163
4163
  if (s == null)
@@ -4165,7 +4165,7 @@ function nu(e, t) {
4165
4165
  'Cannot submit a <button> or <input type="submit"> without a <form>'
4166
4166
  );
4167
4167
  let l = e.getAttribute("formaction") || s.getAttribute("action");
4168
- if (n = l ? Ie(l, t) : null, r = e.getAttribute("formmethod") || s.getAttribute("method") || $r, a = Tn(e.getAttribute("formenctype")) || Tn(s.getAttribute("enctype")) || Fr, i = new FormData(s, e), !tu()) {
4168
+ if (n = l ? Ie(l, t) : null, r = e.getAttribute("formmethod") || s.getAttribute("method") || $r, a = xn(e.getAttribute("formenctype")) || xn(s.getAttribute("enctype")) || Fr, i = new FormData(s, e), !tu()) {
4169
4169
  let { name: c, type: f, value: h } = e;
4170
4170
  if (f === "image") {
4171
4171
  let g = c ? `${c}.` : "";
@@ -4173,7 +4173,7 @@ function nu(e, t) {
4173
4173
  } else c && i.append(c, h);
4174
4174
  }
4175
4175
  } else {
4176
- if (nn(e))
4176
+ if (an(e))
4177
4177
  throw new Error(
4178
4178
  'Cannot submit element that is not <form>, <button>, or <input type="submit|image">'
4179
4179
  );
@@ -4507,7 +4507,7 @@ function _u(e) {
4507
4507
  r[n] = a;
4508
4508
  return r;
4509
4509
  }
4510
- var Uo = /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i, Jr = w.forwardRef(
4510
+ var Uo = /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i, Qr = w.forwardRef(
4511
4511
  function({
4512
4512
  onClick: t,
4513
4513
  discover: r = "render",
@@ -4559,7 +4559,7 @@ var Uo = /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i, Jr = w.forwardRef(
4559
4559
  return B && !x ? /* @__PURE__ */ w.createElement(w.Fragment, null, $, /* @__PURE__ */ w.createElement(pu, { page: A })) : $;
4560
4560
  }
4561
4561
  );
4562
- Jr.displayName = "Link";
4562
+ Qr.displayName = "Link";
4563
4563
  var Eu = w.forwardRef(
4564
4564
  function({
4565
4565
  "aria-current": t = "page",
@@ -4590,7 +4590,7 @@ var Eu = w.forwardRef(
4590
4590
  ].filter(Boolean).join(" ");
4591
4591
  let j = typeof i == "function" ? i(p) : i;
4592
4592
  return /* @__PURE__ */ w.createElement(
4593
- Jr,
4593
+ Qr,
4594
4594
  {
4595
4595
  ...c,
4596
4596
  "aria-current": P,
@@ -4770,7 +4770,7 @@ function Pu(e, { relative: t } = {}) {
4770
4770
  if (!r.isTransitioning)
4771
4771
  return !1;
4772
4772
  let i = Ie(r.currentLocation.pathname, n) || r.currentLocation.pathname, o = Ie(r.nextLocation.pathname, n) || r.nextLocation.pathname;
4773
- return Xr(a.pathname, o) != null || Xr(a.pathname, i) != null;
4773
+ return Jr(a.pathname, o) != null || Jr(a.pathname, i) != null;
4774
4774
  }
4775
4775
  function Mu(e) {
4776
4776
  return /* @__PURE__ */ w.createElement(Wc, { flushSync: el.flushSync, ...e });
@@ -4801,10 +4801,10 @@ const Ei = (e) => {
4801
4801
  function Ho(e) {
4802
4802
  return typeof e == "string" && zo.test(e);
4803
4803
  }
4804
- const an = 8080, da = 5173, Qp = 80, Nu = "/watchparty/ws", $u = 500, Zp = 1e3, fa = 4, em = 3e3, qo = typeof process < "u" && process.env ? process.env : {};
4804
+ const on = 8080, da = 5173, Zp = 80, Nu = "/watchparty/ws", $u = 500, em = 1e3, fa = 4, tm = 3e3, qo = typeof process < "u" && process.env ? process.env : {};
4805
4805
  qo.PRODUCTION_UI_URL;
4806
4806
  qo.PRODUCTION_SERVER_URL;
4807
- const Ur = u.enum(["S", "A", "B", "C", "D", "F"]), tm = ["S", "A", "B", "C", "D", "F"], Si = 2e4, Fu = 300;
4807
+ const Ur = u.enum(["S", "A", "B", "C", "D", "F"]), rm = ["S", "A", "B", "C", "D", "F"], Si = 2e4, Fu = 300;
4808
4808
  u.object({
4809
4809
  name: u.string().min(1).max(32).optional(),
4810
4810
  sprite: u.string().min(1).max(32).optional(),
@@ -5219,7 +5219,7 @@ function Zu(e) {
5219
5219
  function ya(e) {
5220
5220
  return !!e && It.includes(e);
5221
5221
  }
5222
- const rm = 4, nm = 3e4, am = 5e3, im = 2e3, om = 5e3, sm = 2e3, lm = 5e3, cm = 2e3, um = 1e4, dm = 10, fm = 2e3, hm = 3, pm = 50, mm = 3, gm = 3e4, ym = 2e4, vm = 99999, ed = 5e3, td = "output_frag.mp4", Ri = "/healthz", Yo = { mode: "off", percent: 0 }, rd = ["off", "on", "ab"];
5222
+ const nm = 4, am = 3e4, im = 5e3, om = 2e3, sm = 5e3, lm = 2e3, cm = 5e3, um = 2e3, dm = 1e4, fm = 10, hm = 2e3, pm = 3, mm = 50, gm = 3, ym = 3e4, vm = 2e4, bm = 99999, ed = 5e3, td = "output_frag.mp4", Ri = "/healthz", Yo = { mode: "off", percent: 0 }, rd = ["off", "on", "ab"];
5223
5223
  function nd(e) {
5224
5224
  return typeof e == "string" && rd.includes(e);
5225
5225
  }
@@ -5365,8 +5365,8 @@ u.object({
5365
5365
  id: u.string().regex(/^\d{1,12}$/)
5366
5366
  });
5367
5367
  u.object({ series: u.string(), title: u.string() });
5368
- const bm = 2, wm = 100;
5369
- var xn = {
5368
+ const wm = 2, _m = 100;
5369
+ var Cn = {
5370
5370
  image: 10 * 1024 * 1024,
5371
5371
  audio: 50 * 1024 * 1024
5372
5372
  }, vd = [
@@ -5397,7 +5397,7 @@ function es(e) {
5397
5397
  const t = e.toLowerCase();
5398
5398
  return vd.includes(t) ? "image" : bd.includes(t) || t in wd ? "audio" : null;
5399
5399
  }
5400
- var _d = 24, _m = 250, Jt = class extends Error {
5400
+ var _d = 24, Em = 250, Jt = class extends Error {
5401
5401
  reason;
5402
5402
  /** HTTP status, when there was a response. */
5403
5403
  status;
@@ -5468,7 +5468,7 @@ function Cd(e) {
5468
5468
  const t = e.type ? es(e.type) : null;
5469
5469
  if (e.type && !t)
5470
5470
  throw new Jt("unsupported-type", `${e.type} is not an accepted image or audio format`);
5471
- const r = t ? xn[t] : Math.max(xn.image, xn.audio);
5471
+ const r = t ? Cn[t] : Math.max(Cn.image, Cn.audio);
5472
5472
  if (e.size > r)
5473
5473
  throw new Jt("too-large", `File is ${e.size} bytes; the maximum is ${r}`);
5474
5474
  }
@@ -5543,12 +5543,12 @@ function Ad(e) {
5543
5543
  }
5544
5544
  };
5545
5545
  }
5546
- function Em(e, t = ["image"]) {
5546
+ function Sm(e, t = ["image"]) {
5547
5547
  if (!e) return [];
5548
5548
  const r = (i) => ts(i, t), n = e.files ? Array.from(e.files) : [];
5549
5549
  return n.length > 0 ? n.filter(r) : (e.items ? Array.from(e.items) : []).filter((i) => i.kind === "file").map((i) => i.getAsFile()).filter((i) => i !== null).filter(r);
5550
5550
  }
5551
- function Sm(e, t = ["image"]) {
5551
+ function Rm(e, t = ["image"]) {
5552
5552
  return e?.files ? Array.from(e.files).filter((r) => ts(r, t)) : [];
5553
5553
  }
5554
5554
  function ts(e, t) {
@@ -5556,7 +5556,7 @@ function ts(e, t) {
5556
5556
  const r = es(e.type);
5557
5557
  return r !== null && t.includes(r);
5558
5558
  }
5559
- async function Rm(e) {
5559
+ async function Tm(e) {
5560
5560
  const t = globalThis.createImageBitmap;
5561
5561
  if (typeof t != "function") return null;
5562
5562
  try {
@@ -5577,11 +5577,11 @@ function Md() {
5577
5577
  const e = ns();
5578
5578
  return (!kr || kr.base !== e) && (kr = { base: e, client: Ad({ cdnBase: e }) }), kr.client;
5579
5579
  }
5580
- function Tm(e) {
5580
+ function xm(e) {
5581
5581
  return !Ho(e) || !ns() ? null : Md().urlFor(e);
5582
5582
  }
5583
5583
  const Qt = {
5584
- serverOrigin: `http://localhost:${an}`,
5584
+ serverOrigin: `http://localhost:${on}`,
5585
5585
  defaultRoomKey: "dev-room",
5586
5586
  cdnBase: jo
5587
5587
  };
@@ -5602,7 +5602,7 @@ function Ld() {
5602
5602
  function is(e) {
5603
5603
  return e.serverOrigin?.replace(/\/$/, "") || "";
5604
5604
  }
5605
- function on() {
5605
+ function sn() {
5606
5606
  return is(Lt());
5607
5607
  }
5608
5608
  const Ot = {
@@ -5611,7 +5611,7 @@ const Ot = {
5611
5611
  REPORT_LOGS_FLAG: "wp:reportLogs",
5612
5612
  voteKey: (e, t, r) => `watchparty_vote:${e}:${t}:${r}`
5613
5613
  };
5614
- function sn() {
5614
+ function ln() {
5615
5615
  try {
5616
5616
  return globalThis.localStorage ?? null;
5617
5617
  } catch {
@@ -5620,14 +5620,14 @@ function sn() {
5620
5620
  }
5621
5621
  function Ue(e) {
5622
5622
  try {
5623
- return sn()?.getItem(e) ?? null;
5623
+ return ln()?.getItem(e) ?? null;
5624
5624
  } catch {
5625
5625
  return null;
5626
5626
  }
5627
5627
  }
5628
5628
  function ba(e, t) {
5629
5629
  try {
5630
- const r = sn();
5630
+ const r = ln();
5631
5631
  return r ? (r.setItem(e, t), !0) : !1;
5632
5632
  } catch {
5633
5633
  return !1;
@@ -5635,7 +5635,7 @@ function ba(e, t) {
5635
5635
  }
5636
5636
  function Od() {
5637
5637
  try {
5638
- const e = sn();
5638
+ const e = ln();
5639
5639
  if (!e) return [];
5640
5640
  const t = [];
5641
5641
  for (let r = 0; r < e.length; r++) {
@@ -5647,9 +5647,9 @@ function Od() {
5647
5647
  return [];
5648
5648
  }
5649
5649
  }
5650
- function Qr(e) {
5650
+ function Zr(e) {
5651
5651
  try {
5652
- sn()?.removeItem(e);
5652
+ ln()?.removeItem(e);
5653
5653
  } catch {
5654
5654
  }
5655
5655
  }
@@ -5659,7 +5659,7 @@ function Dd(e) {
5659
5659
  }
5660
5660
  const os = /* @__PURE__ */ new Map();
5661
5661
  let ss = !1;
5662
- function ln(e, t) {
5662
+ function cn(e, t) {
5663
5663
  os.set(e, t), ss && ls(e, t);
5664
5664
  }
5665
5665
  function Nd() {
@@ -5670,7 +5670,7 @@ function ls(e, t) {
5670
5670
  typeof window > "u" || (window[e] = t);
5671
5671
  }
5672
5672
  const Zt = [], $d = 500;
5673
- let jr = [], Bn = null;
5673
+ let jr = [], jn = null;
5674
5674
  const Fd = 1e3, Ud = 200;
5675
5675
  let ir = null;
5676
5676
  function cs(e) {
@@ -5679,7 +5679,7 @@ function cs(e) {
5679
5679
  function us() {
5680
5680
  return Ue(Ot.REPORT_LOGS_FLAG) === "true";
5681
5681
  }
5682
- function jn() {
5682
+ function zn() {
5683
5683
  if (typeof window > "u") return !1;
5684
5684
  if (window.__WP_DEBUG__ || new URLSearchParams(window.location.search).get("debug") === "true") return !0;
5685
5685
  const t = Ue(Ot.DEBUG_FLAG);
@@ -5703,7 +5703,7 @@ function jd() {
5703
5703
  function zd(e) {
5704
5704
  Zt.push(e), Zt.length > $d && Zt.shift();
5705
5705
  }
5706
- const Cn = {
5706
+ const kn = {
5707
5707
  debug: "color: #64748b; font-weight: normal;",
5708
5708
  warn: "color: #f59e0b; font-weight: bold;",
5709
5709
  error: "color: #ef4444; font-weight: bold;",
@@ -5726,16 +5726,16 @@ function wa(e, t, r, n, a, i, o) {
5726
5726
  timestamp: Date.now()
5727
5727
  };
5728
5728
  if (zd(s), (r || us()) && Ci(s), !n) {
5729
- if (!jn()) return;
5729
+ if (!zn()) return;
5730
5730
  const f = Bd();
5731
5731
  if (f && !f.has(a.toLowerCase())) return;
5732
5732
  }
5733
5733
  const l = jd(), c = o !== void 0 ? " " + Hd(o) : "";
5734
5734
  t(
5735
5735
  `%c[${l}]%c [${a}]%c ${i}${c}`,
5736
- Cn.time,
5737
- Cn.category,
5738
- Cn[e]
5736
+ kn.time,
5737
+ kn.category,
5738
+ kn[e]
5739
5739
  );
5740
5740
  }
5741
5741
  function C(e, t, r) {
@@ -5758,7 +5758,7 @@ function Wd(e) {
5758
5758
  ba(Ot.DEBUG_FLAG, t), console.log("[wp] Debug mode enabled");
5759
5759
  }
5760
5760
  function Gd() {
5761
- Qr(Ot.DEBUG_FLAG), console.log("[wp] Debug mode disabled");
5761
+ Zr(Ot.DEBUG_FLAG), console.log("[wp] Debug mode disabled");
5762
5762
  }
5763
5763
  const Kd = 1024, Yd = 5e4;
5764
5764
  function ds(e) {
@@ -5779,7 +5779,7 @@ function ds(e) {
5779
5779
  return "[unserializable]";
5780
5780
  }
5781
5781
  }
5782
- function xm(e, t, r, n) {
5782
+ function Cm(e, t, r, n) {
5783
5783
  try {
5784
5784
  console.warn(`[${t}] ${r}`, n ?? "");
5785
5785
  } catch {
@@ -5789,7 +5789,7 @@ function xm(e, t, r, n) {
5789
5789
  let i = Lt().serverOrigin || "";
5790
5790
  if ((i === "/" || !i) && typeof window < "u") {
5791
5791
  const l = window.location;
5792
- i = (l.hostname === "localhost" || l.hostname === "127.0.0.1") && l.port === String(da) ? `${l.protocol}//${l.hostname}:${an}` : l.origin;
5792
+ i = (l.hostname === "localhost" || l.hostname === "127.0.0.1") && l.port === String(da) ? `${l.protocol}//${l.hostname}:${on}` : l.origin;
5793
5793
  }
5794
5794
  const o = `${i.replace(/\/$/, "")}/api/client-log`, s = JSON.stringify({ logs: [{
5795
5795
  level: e,
@@ -5809,12 +5809,12 @@ function xm(e, t, r, n) {
5809
5809
  async function Xd() {
5810
5810
  if (jr.length === 0) return;
5811
5811
  const e = jr;
5812
- jr = [], Bn = null;
5812
+ jr = [], jn = null;
5813
5813
  try {
5814
5814
  let r = Lt().serverOrigin || "";
5815
5815
  if ((r === "/" || !r) && typeof window < "u") {
5816
5816
  const s = window.location;
5817
- (s.hostname === "localhost" || s.hostname === "127.0.0.1") && s.port === String(da) ? r = `${s.protocol}//${s.hostname}:${an}` : r = s.origin;
5817
+ (s.hostname === "localhost" || s.hostname === "127.0.0.1") && s.port === String(da) ? r = `${s.protocol}//${s.hostname}:${on}` : r = s.origin;
5818
5818
  }
5819
5819
  const n = `${r.replace(/\/$/, "")}/api/client-log`, a = e.map((s) => ({
5820
5820
  level: s.level,
@@ -5846,9 +5846,9 @@ async function Xd() {
5846
5846
  }
5847
5847
  }
5848
5848
  function Ci(e) {
5849
- if (jr.push(e), !Bn) {
5849
+ if (jr.push(e), !jn) {
5850
5850
  const t = us() ? Ud : Fd;
5851
- Bn = setTimeout(() => {
5851
+ jn = setTimeout(() => {
5852
5852
  Xd();
5853
5853
  }, t);
5854
5854
  }
@@ -5856,7 +5856,7 @@ function Ci(e) {
5856
5856
  function $e(e) {
5857
5857
  return e instanceof Error ? { error: e.message, name: e.name } : { error: String(e), name: typeof e };
5858
5858
  }
5859
- ln("__wpDebug", {
5859
+ cn("__wpDebug", {
5860
5860
  enable: Wd,
5861
5861
  disable: Gd,
5862
5862
  history: qd,
@@ -5875,7 +5875,7 @@ function Jd() {
5875
5875
  const e = Lt().serverOrigin.replace(/\/$/, ""), t = await fetch(`${e}/media/sprites/names.json`, { cache: "no-cache" });
5876
5876
  if (!t.ok) return;
5877
5877
  const r = await t.json();
5878
- or = r, ln("__DISPLAY_NAMES__", r), C("characters", "Loaded display names", r);
5878
+ or = r, cn("__DISPLAY_NAMES__", r), C("characters", "Loaded display names", r);
5879
5879
  } catch (e) {
5880
5880
  C("characters", "display names fetch failed (degrading to sprite IDs)", $e(e));
5881
5881
  }
@@ -5894,7 +5894,7 @@ const Se = {
5894
5894
  name: null,
5895
5895
  accountId: null
5896
5896
  };
5897
- function cn() {
5897
+ function un() {
5898
5898
  return Se.accountId ? Se.accountId : Se.resolved && Se.userType === "public" ? "anon" : null;
5899
5899
  }
5900
5900
  function Qd(e) {
@@ -5914,14 +5914,14 @@ const Ai = {
5914
5914
  function Zd(e, t) {
5915
5915
  return (Ai[e] ?? -1) >= Ai[t];
5916
5916
  }
5917
- function Cm() {
5917
+ function km() {
5918
5918
  return Zd(Se.userType, "service");
5919
5919
  }
5920
- function un() {
5920
+ function dn() {
5921
5921
  return Se.accountId ?? "public";
5922
5922
  }
5923
5923
  function ef() {
5924
- return cn() ?? "unscoped";
5924
+ return un() ?? "unscoped";
5925
5925
  }
5926
5926
  async function tf() {
5927
5927
  if (Se.userType === "public") return null;
@@ -5969,15 +5969,15 @@ const rf = u.object({
5969
5969
  appId: "watchparty",
5970
5970
  schema: rf
5971
5971
  }), nf = /* @__PURE__ */ new Set(["theme", "themeMode"]);
5972
- function Zr(e) {
5973
- const t = cn();
5972
+ function en(e) {
5973
+ const t = un();
5974
5974
  return t ? `prefs-cache:${t}:${e}` : null;
5975
5975
  }
5976
5976
  function af() {
5977
- return cn() === null;
5977
+ return un() === null;
5978
5978
  }
5979
5979
  function Pi(e) {
5980
- const t = Zr(e);
5980
+ const t = en(e);
5981
5981
  if (!t) return {};
5982
5982
  const r = Ue(t);
5983
5983
  if (!r) return {};
@@ -5990,7 +5990,7 @@ function Pi(e) {
5990
5990
  function of() {
5991
5991
  let e = 0;
5992
5992
  for (const t of Od()) {
5993
- const r = t.startsWith("prefs-cache:") && t.endsWith(":watchparty"), n = t === en || t.startsWith(`${en}:`) && !t.endsWith(":_serverSynced_v1");
5993
+ const r = t.startsWith("prefs-cache:") && t.endsWith(":watchparty"), n = t === tn || t.startsWith(`${tn}:`) && !t.endsWith(":_serverSynced_v1");
5994
5994
  if (!r && !n) continue;
5995
5995
  const a = Ue(t);
5996
5996
  if (!a) continue;
@@ -6012,7 +6012,7 @@ const Mi = /* @__PURE__ */ new Set();
6012
6012
  function _a() {
6013
6013
  if (af())
6014
6014
  return C("preferences", "Boot read deferred — session pending, identity unresolved"), {};
6015
- const e = Pi("portfolio"), t = Pi("watchparty"), r = Object.keys(e).length > 0 ? e : ps ?? {}, n = Object.keys(t).length > 0 ? t : ms ?? {}, a = un() || "public";
6015
+ const e = Pi("portfolio"), t = Pi("watchparty"), r = Object.keys(e).length > 0 ? e : ps ?? {}, n = Object.keys(t).length > 0 ? t : ms ?? {}, a = dn() || "public";
6016
6016
  if (Mi.has(a))
6017
6017
  return C("preferences", "Loaded (sync, SDK-only after first read)", {
6018
6018
  uid: a,
@@ -6036,7 +6036,7 @@ function _a() {
6036
6036
  }
6037
6037
  let gs = !1;
6038
6038
  function sf() {
6039
- const e = un();
6039
+ const e = dn();
6040
6040
  return !e || e === "public";
6041
6041
  }
6042
6042
  function Je(e, t) {
@@ -6062,7 +6062,7 @@ function lf() {
6062
6062
  } catch (o) {
6063
6063
  re("preferences", "inline rehydrate after SDK read failed", { err: o?.message });
6064
6064
  }
6065
- const r = Zr("portfolio"), n = Zr("watchparty"), a = r ? Ue(r) : null, i = n ? Ue(n) : null;
6065
+ const r = en("portfolio"), n = en("watchparty"), a = r ? Ue(r) : null, i = n ? Ue(n) : null;
6066
6066
  return C("preferences", "sdk.read", {
6067
6067
  themeKeys: Object.keys(e ?? {}),
6068
6068
  appKeys: Object.keys(t ?? {}),
@@ -6080,14 +6080,14 @@ function lf() {
6080
6080
  }
6081
6081
  })(), Pr);
6082
6082
  }
6083
- const en = "watchparty_preferences";
6083
+ const tn = "watchparty_preferences";
6084
6084
  of();
6085
- function zn() {
6086
- const e = un();
6087
- return !e || e === "public" ? en : `${en}:${e}`;
6085
+ function Hn() {
6086
+ const e = dn();
6087
+ return !e || e === "public" ? tn : `${tn}:${e}`;
6088
6088
  }
6089
6089
  function ys() {
6090
- const e = Ue(zn());
6090
+ const e = Ue(Hn());
6091
6091
  if (!e) return null;
6092
6092
  try {
6093
6093
  const t = JSON.parse(e);
@@ -6097,7 +6097,7 @@ function ys() {
6097
6097
  }
6098
6098
  }
6099
6099
  function Li() {
6100
- Qr(zn()), Qr(`${zn()}:_serverSynced_v1`);
6100
+ Zr(Hn()), Zr(`${Hn()}:_serverSynced_v1`);
6101
6101
  }
6102
6102
  async function cf(e, t) {
6103
6103
  const r = ys();
@@ -6129,7 +6129,7 @@ async function cf(e, t) {
6129
6129
  }
6130
6130
  let Oi = !1;
6131
6131
  function Di(e, t) {
6132
- const r = Zr(e);
6132
+ const r = en(e);
6133
6133
  if (r)
6134
6134
  try {
6135
6135
  const n = {
@@ -6157,7 +6157,7 @@ function Ni(e) {
6157
6157
  }).catch((t) => re("preferences", "store import failed", { reason: e, err: t?.message }));
6158
6158
  }
6159
6159
  const vs = 320, $i = 240, uf = 640;
6160
- function kn(e, t) {
6160
+ function An(e, t) {
6161
6161
  if (!Number.isFinite(e)) return vs;
6162
6162
  let r = uf;
6163
6163
  return r = Math.max(r, $i), Math.round(Math.min(r, Math.max($i, e)));
@@ -6172,7 +6172,7 @@ const Qe = _a(), z = Du((e, t) => ({
6172
6172
  chat: [],
6173
6173
  chatCollapsed: Qe.chatCollapsed ?? !1,
6174
6174
  chromeChatCollapsed: Qe.chromeChatCollapsed ?? !1,
6175
- chromeChatWidth: kn(Qe.chromeChatWidth ?? vs),
6175
+ chromeChatWidth: An(Qe.chromeChatWidth ?? vs),
6176
6176
  // Hardcoded on for everyone — the per-user toggle was removed from the
6177
6177
  // control bar; FloatingChat + toggleFloatingChat code is kept for future
6178
6178
  // re-enablement but the value is no longer user-controllable.
@@ -6285,7 +6285,7 @@ const Qe = _a(), z = Du((e, t) => ({
6285
6285
  return Je("chromeChatCollapsed", n), { chromeChatCollapsed: n };
6286
6286
  }),
6287
6287
  setChromeChatWidth: (r) => e(() => {
6288
- const n = kn(r);
6288
+ const n = An(r);
6289
6289
  return Je("chromeChatWidth", n), { chromeChatWidth: n };
6290
6290
  }),
6291
6291
  toggleFloatingChat: () => e((r) => {
@@ -6383,7 +6383,7 @@ const Qe = _a(), z = Du((e, t) => ({
6383
6383
  setRoomKeyType: (r) => e({ roomKeyType: r }),
6384
6384
  rehydrateFromPrefs: () => e((r) => {
6385
6385
  const n = _a(), a = {};
6386
- if (n.chatCollapsed !== void 0 && (a.chatCollapsed = n.chatCollapsed), n.chromeChatCollapsed !== void 0 && (a.chromeChatCollapsed = n.chromeChatCollapsed), n.chromeChatWidth !== void 0 && (a.chromeChatWidth = kn(n.chromeChatWidth)), ["volume", "muted", "preferredAudioLang", "subtitlesEnabled", "subtitleStyle"].some((s) => n[s] !== void 0)) {
6386
+ if (n.chatCollapsed !== void 0 && (a.chatCollapsed = n.chatCollapsed), n.chromeChatCollapsed !== void 0 && (a.chromeChatCollapsed = n.chromeChatCollapsed), n.chromeChatWidth !== void 0 && (a.chromeChatWidth = An(n.chromeChatWidth)), ["volume", "muted", "preferredAudioLang", "subtitlesEnabled", "subtitleStyle"].some((s) => n[s] !== void 0)) {
6387
6387
  const s = { ...r.mediaPrefs };
6388
6388
  n.volume !== void 0 && (s.volume = n.volume), n.muted !== void 0 && (s.muted = n.muted), n.preferredAudioLang !== void 0 && (s.preferredAudioLang = n.preferredAudioLang), n.subtitlesEnabled !== void 0 && (s.subtitlesEnabled = n.subtitlesEnabled), n.subtitleStyle !== void 0 && ["classic", "cinema", "minimal", "contrast"].includes(n.subtitleStyle) && (s.subtitleStyle = n.subtitleStyle), a.mediaPrefs = s;
6389
6389
  }
@@ -6391,7 +6391,7 @@ const Qe = _a(), z = Du((e, t) => ({
6391
6391
  }),
6392
6392
  setSidebarTab: (r) => e((n) => n.sidebarTab === r && r !== "chat" ? { sidebarTab: "chat" } : { sidebarTab: r, chatCollapsed: !1 })
6393
6393
  }));
6394
- ln("__ZUSTAND_STORE__", z);
6394
+ cn("__ZUSTAND_STORE__", z);
6395
6395
  const bs = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
6396
6396
  __proto__: null,
6397
6397
  useAppStore: z
@@ -6439,8 +6439,8 @@ function ws() {
6439
6439
  let j;
6440
6440
  p ? j = 0.92 + Math.random() * 0.08 : P ? j = 0.85 + Math.random() * 0.15 : j = 0.05 + Math.random() ** 2.2 * 0.75;
6441
6441
  const U = (yr, vr) => {
6442
- const pn = Math.random(), mn = Math.random();
6443
- return yr + (pn + mn) / 2 * (vr - yr);
6442
+ const mn = Math.random(), gn = Math.random();
6443
+ return yr + (mn + gn) / 2 * (vr - yr);
6444
6444
  };
6445
6445
  let Q = U(0.9, 1.4) + j ** 1.2 * (p ? 5.5 : P ? 4 : 3.2);
6446
6446
  const oe = U(0.85, 1.25);
@@ -6455,8 +6455,8 @@ function ws() {
6455
6455
  G *= 1 + 0.18 * Math.max(se, ce), p && G < 1.25 && (G = 1.25 + Math.random() * 0.4);
6456
6456
  const Te = r.width, pe = r.height, we = 0.18 + Math.random() * 0.28, Re = p || Math.random() < 0.18, fe = p ? 0.55 : $ ? 0.38 : Math.max(0.1, 0.28 - we * 0.25), Be = H * (fe + Math.random() * (1 - fe)), St = H * (fe + Math.random() * (1 - fe)), ft = (p ? 130 : $ ? 160 : 120) + Math.random() * (p ? 140 : 150), mr = Math.min(1, G / 2.5), Nt = 10, Ge = 120 - Nt;
6457
6457
  let nt = Math.random();
6458
- const hn = 0.8 + mr * 1.4;
6459
- nt = Math.pow(nt, hn);
6458
+ const pn = 0.8 + mr * 1.4;
6459
+ nt = Math.pow(nt, pn);
6460
6460
  const je = (1 - mr) * ((40 - Nt) / Ge);
6461
6461
  nt = nt * (1 - je) + je;
6462
6462
  const gr = (Nt + nt * Ge) * 1e3;
@@ -6606,167 +6606,562 @@ function ws() {
6606
6606
  }
6607
6607
  );
6608
6608
  }
6609
- const hf = 0.3, pf = 0.82, Tt = 24, mf = 32;
6610
- function gf(e) {
6609
+ var hf = ["effect", "gradient", "font", "overlay", "message"], K = (e, t, r, n = {}) => ({ id: `${e}.${t}`, slot: e, label: r, ...n }), Ee = { hidden: !0 }, Ea = [
6610
+ K("effect", "glint", "Glint"),
6611
+ K("effect", "aura", "Aura"),
6612
+ K("effect", "hop", "Hop"),
6613
+ K("effect", "outline", "Outline"),
6614
+ K("effect", "twinkle", "Twinkle", { earn: "Bronze or better in a Major" }),
6615
+ K("gradient", "gild", "Gilded"),
6616
+ K("gradient", "gloss", "Gloss"),
6617
+ K("gradient", "split", "Split"),
6618
+ K("gradient", "brushed", "Brushed"),
6619
+ K("gradient", "lumen", "Lumen"),
6620
+ K("font", "script", "Script"),
6621
+ K("font", "surf", "Surf"),
6622
+ K("font", "gothic", "Gothic"),
6623
+ K("font", "runic", "Runic"),
6624
+ K("font", "arcade", "Arcade"),
6625
+ K("font", "caps", "Small caps", Ee),
6626
+ K("font", "wide", "Wide", Ee),
6627
+ K("font", "corsair", "Corsair", Ee),
6628
+ K("font", "metal", "Metal", Ee),
6629
+ K("font", "comic", "Comic", Ee),
6630
+ K("font", "circuit", "Circuit", Ee),
6631
+ K("font", "hover", "Hover", Ee),
6632
+ K("font", "retro", "Retro", Ee),
6633
+ K("font", "pixel", "Pixel", Ee),
6634
+ K("overlay", "crown", "Crown", {
6635
+ earn: "Win a Major",
6636
+ art: {
6637
+ file: "crown.webp",
6638
+ top: -40,
6639
+ width: 70,
6640
+ tilt: -8,
6641
+ pixel: !1,
6642
+ visible: [0.027, 0.137, 0.973, 0.863]
6643
+ }
6644
+ }),
6645
+ K("overlay", "halo", "Halo", {
6646
+ art: {
6647
+ file: "halo.webp",
6648
+ top: -34,
6649
+ width: 76,
6650
+ tilt: 0,
6651
+ pixel: !0,
6652
+ visible: [0.033, 0.333, 0.967, 0.667]
6653
+ }
6654
+ }),
6655
+ K("overlay", "flowers", "Flower crown", {
6656
+ art: {
6657
+ file: "flowers.webp",
6658
+ top: -22,
6659
+ width: 96,
6660
+ tilt: 0,
6661
+ pixel: !1,
6662
+ visible: [0.027, 0.258, 0.969, 0.746]
6663
+ }
6664
+ }),
6665
+ K("overlay", "petals", "Petals"),
6666
+ K("overlay", "horns", "Horns", {
6667
+ ...Ee,
6668
+ art: {
6669
+ file: "horns.webp",
6670
+ top: -26,
6671
+ width: 100,
6672
+ tilt: 0,
6673
+ pixel: !0,
6674
+ visible: [0.033, 0.133, 0.967, 0.867]
6675
+ }
6676
+ }),
6677
+ K("overlay", "runes", "Runes", Ee),
6678
+ K("overlay", "comet", "Comet", Ee),
6679
+ K("overlay", "shine", "Shine", Ee),
6680
+ K("overlay", "glow", "Glow", Ee),
6681
+ K("message", "type", "Typewriter"),
6682
+ K("message", "decode", "Decode", { earn: "Silver or better in a Major" }),
6683
+ K("message", "cascade", "Cascade"),
6684
+ K("message", "words", "Word by word"),
6685
+ K("message", "bubble", "Bubble", Ee),
6686
+ K("message", "drift", "Drift")
6687
+ ], qn = new Map(
6688
+ Ea.map((e) => [e.id, e])
6689
+ );
6690
+ Ea.filter(
6691
+ (e) => e.earn !== void 0 && !e.hidden
6692
+ );
6693
+ var _s = { x: 0, y: 0, r: 0, s: 100, flip: !1, back: !1 }, Ht = {
6694
+ x: [-60, 60],
6695
+ y: [-60, 100],
6696
+ r: [-45, 45],
6697
+ s: [70, 140]
6698
+ };
6699
+ function Vn(e, t) {
6700
+ const [r, n, a, i] = e.visible, o = t.flip ? 1 - a : r, s = t.flip ? 1 - r : a, l = 50 - e.width / 2, c = e.top, f = e.width, h = l + f * 0.5, g = c + f * 0.6, y = l + f / 2, S = c + f / 2, T = e.tilt * Math.PI / 180, v = t.r * Math.PI / 180, x = t.s / 100, _ = [], A = [];
6701
+ for (const [B, E] of [
6702
+ [o, n],
6703
+ [s, n],
6704
+ [o, i],
6705
+ [s, i]
6706
+ ]) {
6707
+ const V = l + B * f, p = c + E * f, P = y + (V - y) * Math.cos(T) - (p - S) * Math.sin(T), $ = S + (V - y) * Math.sin(T) + (p - S) * Math.cos(T), j = (P - h) * x, U = ($ - g) * x;
6708
+ _.push(h + t.x + j * Math.cos(v) - U * Math.sin(v)), A.push(g + t.y + j * Math.sin(v) + U * Math.cos(v));
6709
+ }
6710
+ return {
6711
+ left: Math.min(..._),
6712
+ top: Math.min(...A),
6713
+ right: Math.max(..._),
6714
+ bottom: Math.max(...A)
6715
+ };
6716
+ }
6717
+ var pf = Ea.filter((e) => !!e.art), mf = {
6718
+ left: -25,
6719
+ top: Math.floor(Math.min(...pf.map((e) => Vn(e.art, _s).top))),
6720
+ right: 125,
6721
+ bottom: 110
6722
+ }, Mr = (e, [t, r]) => Math.min(r, Math.max(t, e));
6723
+ function gf(e, t) {
6724
+ const r = (s, l) => typeof s == "number" && Number.isFinite(s) ? s : l, n = {
6725
+ x: Math.round(Mr(r(t.x, 0), Ht.x)),
6726
+ y: Math.round(Mr(r(t.y, 0), Ht.y)),
6727
+ r: Math.round(Mr(r(t.r, 0), Ht.r)),
6728
+ s: Math.round(Mr(r(t.s, 100), Ht.s)),
6729
+ flip: t.flip === !0,
6730
+ back: t.back === !0
6731
+ }, a = mf;
6732
+ let i = Vn(e, n);
6733
+ const o = Math.min(
6734
+ (a.right - a.left - 2) / (i.right - i.left),
6735
+ (a.bottom - a.top - 2) / (i.bottom - i.top)
6736
+ );
6737
+ return o < 1 && (n.s = Math.max(Ht.s[0], Math.floor(n.s * o)), i = Vn(e, n)), n.x += Math.ceil(Math.max(0, a.left - i.left)) - Math.ceil(Math.max(0, i.right - a.right)), n.y += Math.ceil(Math.max(0, a.top - i.top)) - Math.ceil(Math.max(0, i.bottom - a.bottom)), n;
6738
+ }
6739
+ function yf(e) {
6740
+ if (!e || typeof e != "object") return;
6741
+ const t = e, r = {};
6742
+ for (const a of hf) {
6743
+ const i = t[a], o = typeof i == "string" ? qn.get(i) : void 0;
6744
+ o && !o.hidden && o.slot === a && (r[a] = o.id);
6745
+ }
6746
+ const n = r.overlay ? qn.get(r.overlay)?.art : void 0;
6747
+ return n && t.placement && typeof t.placement == "object" && (r.placement = gf(n, t.placement)), Object.keys(r).length ? r : void 0;
6748
+ }
6749
+ var vf = 0.3, bf = 0.82, Tt = 24, wf = 32;
6750
+ function _f(e) {
6611
6751
  let t = 0, r = 0, n = 0, a = 0;
6612
6752
  for (let i = 0; i + 3 < e.length; i += 4) {
6613
6753
  const o = e[i + 3];
6614
- o < mf || (t += e[i] * o, r += e[i + 1] * o, n += e[i + 2] * o, a += o);
6754
+ o < wf || (t += e[i] * o, r += e[i + 1] * o, n += e[i + 2] * o, a += o);
6615
6755
  }
6616
- return a === 0 ? null : yf(t / a, r / a, n / a);
6756
+ return a === 0 ? null : Ef(t / a, r / a, n / a);
6617
6757
  }
6618
- function yf(e, t, r) {
6619
- const [n, a, i] = vf(e / 255, t / 255, r / 255), o = Math.min(pf, Math.max(hf, i)), [s, l, c] = bf(n, a, o), f = (h) => Math.round(h * 255).toString(16).padStart(2, "0");
6758
+ function Ef(e, t, r) {
6759
+ const [n, a, i] = Sf(e / 255, t / 255, r / 255), o = Math.min(bf, Math.max(vf, i)), [s, l, c] = Rf(n, a, o), f = (h) => Math.round(h * 255).toString(16).padStart(2, "0");
6620
6760
  return `#${f(s)}${f(l)}${f(c)}`;
6621
6761
  }
6622
- function vf(e, t, r) {
6762
+ function Sf(e, t, r) {
6623
6763
  const n = Math.max(e, t, r), a = Math.min(e, t, r), i = (n + a) / 2;
6624
6764
  if (n === a) return [0, 0, i];
6625
6765
  const o = n - a, s = i > 0.5 ? o / (2 - n - a) : o / (n + a);
6626
6766
  let l;
6627
6767
  return n === e ? l = (t - r) / o + (t < r ? 6 : 0) : n === t ? l = (r - e) / o + 2 : l = (e - t) / o + 4, [l / 6, s, i];
6628
6768
  }
6629
- function bf(e, t, r) {
6769
+ function Rf(e, t, r) {
6630
6770
  if (t === 0) return [r, r, r];
6631
6771
  const n = r < 0.5 ? r * (1 + t) : r + t - r * t, a = 2 * r - n, i = (o) => (o < 0 && (o += 1), o > 1 && (o -= 1), o < 1 / 6 ? a + (n - a) * 6 * o : o < 1 / 2 ? n : o < 2 / 3 ? a + (n - a) * (2 / 3 - o) * 6 : a);
6632
6772
  return [i(e + 1 / 3), i(e), i(e - 1 / 3)];
6633
6773
  }
6634
- const Hn = /* @__PURE__ */ new Map(), An = /* @__PURE__ */ new Set(), qn = /* @__PURE__ */ new Set();
6635
- function wf() {
6636
- for (const e of qn) e();
6774
+ var zr = /* @__PURE__ */ new Map(), Pn = /* @__PURE__ */ new Map(), Wn = /* @__PURE__ */ new Set();
6775
+ function Tf(e) {
6776
+ return zr.get(e);
6637
6777
  }
6638
- function _f(e) {
6639
- if (Hn.has(e) || An.has(e) || typeof Image > "u" || typeof document > "u") return;
6640
- An.add(e);
6641
- const t = new Image();
6642
- t.crossOrigin = "anonymous", t.referrerPolicy = "no-referrer";
6643
- const r = (n) => {
6644
- An.delete(e), Hn.set(e, n), wf();
6778
+ function xf(e) {
6779
+ return Wn.add(e), () => {
6780
+ Wn.delete(e);
6645
6781
  };
6646
- t.onload = () => {
6647
- try {
6782
+ }
6783
+ function Cf(e) {
6784
+ if (zr.has(e)) return Promise.resolve(zr.get(e) ?? null);
6785
+ const t = Pn.get(e);
6786
+ if (t) return t;
6787
+ const r = kf(e).then((n) => {
6788
+ Pn.delete(e), zr.set(e, n);
6789
+ for (const a of Wn) a();
6790
+ return n;
6791
+ });
6792
+ return Pn.set(e, r), r;
6793
+ }
6794
+ function kf(e) {
6795
+ return typeof Image > "u" || typeof document > "u" ? Promise.resolve(null) : new Promise((t) => {
6796
+ const r = new Image();
6797
+ r.crossOrigin = "anonymous", r.referrerPolicy = "no-referrer", r.onload = () => {
6648
6798
  const n = document.createElement("canvas");
6649
6799
  n.width = Tt, n.height = Tt;
6650
6800
  const a = n.getContext("2d", { willReadFrequently: !0 });
6651
6801
  if (!a) {
6652
- r(null);
6802
+ t(null);
6653
6803
  return;
6654
6804
  }
6655
- a.drawImage(t, 0, 0, Tt, Tt), r(gf(a.getImageData(0, 0, Tt, Tt).data));
6656
- } catch (n) {
6657
- C("avatar", "picture colour unreadable", { url: e, error: n instanceof Error ? n.message : String(n) }), r(null);
6658
- }
6659
- }, t.onerror = () => r(null), t.src = e;
6660
- }
6661
- function Ef(e) {
6662
- return qn.add(e), () => qn.delete(e);
6663
- }
6664
- function Sf(e, t) {
6665
- if (t) {
6666
- const r = Hn.get(t);
6667
- if (r) return r;
6668
- }
6669
- return fs(e);
6670
- }
6671
- function Rf(e, t) {
6672
- return bt(() => {
6673
- t && _f(t);
6674
- }, [t]), co(Ef, () => Sf(e, t), () => fs(e));
6675
- }
6676
- function Tf({ sprite: e, url: t, alt: r = "", className: n, style: a, fallback: i }) {
6677
- const [o, s] = yt(null);
6678
- if (t && t !== o)
6679
- return /* @__PURE__ */ F(
6680
- "img",
6681
- {
6682
- src: t,
6683
- alt: r,
6684
- referrerPolicy: "no-referrer",
6685
- className: n,
6686
- style: a,
6687
- draggable: !1,
6688
- onError: () => s(t)
6805
+ a.drawImage(r, 0, 0, Tt, Tt);
6806
+ try {
6807
+ t(_f(a.getImageData(0, 0, Tt, Tt).data));
6808
+ } catch (i) {
6809
+ console.debug("[prefs-client] picture colour unreadable", e, i), t(null);
6689
6810
  }
6690
- );
6691
- const l = hs(e);
6692
- return l ? /* @__PURE__ */ F("img", { src: l, alt: r, crossOrigin: "anonymous", className: n, style: a, draggable: !1 }) : /* @__PURE__ */ F(lo, { children: i });
6693
- }
6694
- const xf = "hadoku://library";
6695
- function Cf(e = typeof navigator < "u" ? navigator.userAgent : void 0) {
6696
- return e !== void 0 && /(^|\s)HadokuApp\/\S/.test(e);
6697
- }
6698
- const kf = 5e3;
6699
- function Fi(e) {
6700
- return e.slice().sort(
6701
- (t, r) => (r.users?.length ?? 0) - (t.users?.length ?? 0) || t.room_id.localeCompare(r.room_id)
6702
- );
6811
+ }, r.onerror = () => t(null), r.src = e;
6812
+ });
6703
6813
  }
6814
+ var Sa = "/cosmetics", Fi = "hadoku-cosmetics", Pe = (e) => e.replace(
6815
+ /[&<>"']/g,
6816
+ (t) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" })[t]
6817
+ ), tr = (e) => e ? e.slice(e.indexOf(".") + 1) : "none";
6704
6818
  function Af(e) {
6705
- return e.room_id.split("-").map((t) => t.charAt(0).toUpperCase() + t.slice(1)).join(" ");
6819
+ const t = e.s / 100 * (e.flip ? -1 : 1);
6820
+ return `translate(calc(var(--hc-sz) * ${(e.x / 100).toFixed(3)}),calc(var(--hc-sz) * ${(e.y / 100).toFixed(3)})) rotate(${e.r}deg) scale(${t.toFixed(3)},${(e.s / 100).toFixed(3)})`;
6706
6821
  }
6707
- function Pf({ user: e }) {
6708
- const t = Rf(e.sprite_id, e.avatar_url);
6709
- return /* @__PURE__ */ De("span", { className: "relative -ml-2 first:ml-0 group/av", children: [
6710
- /* @__PURE__ */ F(
6711
- "span",
6712
- {
6713
- className: "block h-10 w-10 rounded-full border-2 overflow-hidden bg-bg-card transition-transform duration-150 group-hover/av:scale-110 group-hover/av:z-10 shadow-md",
6714
- style: { borderColor: t },
6715
- children: /* @__PURE__ */ F(
6716
- Tf,
6717
- {
6718
- sprite: e.sprite_id,
6719
- url: e.avatar_url,
6720
- alt: e.name,
6721
- className: "h-full w-full object-cover",
6722
- fallback: /* @__PURE__ */ F("span", { className: "flex h-full w-full items-center justify-center text-[13px] font-semibold text-text-secondary", children: e.name.slice(0, 1).toUpperCase() })
6723
- }
6724
- )
6725
- }
6726
- ),
6727
- /* @__PURE__ */ F(
6728
- "span",
6729
- {
6730
- role: "tooltip",
6731
- className: "pointer-events-none absolute bottom-full left-1/2 mb-1.5 -translate-x-1/2 whitespace-nowrap rounded-md bg-bg-card/95 backdrop-blur px-2 py-1 text-[11px] font-medium text-text shadow-lg border border-border opacity-0 scale-95 group-hover/av:opacity-100 group-hover/av:scale-100 transition-all duration-150 z-20",
6732
- children: e.name
6733
- }
6734
- )
6735
- ] });
6822
+ var Pf = /* @__PURE__ */ new Set(["hop"]);
6823
+ function Am(e, t, r = {}) {
6824
+ const n = tr(t?.effect), a = tr(t?.gradient), i = tr(t?.font), o = Pe(e), s = Pf.has(n), l = s ? `<span class="hc-tx">${[...e].map(
6825
+ (y, S) => `<span class="hc-ch" style="--hc-i:${S}"><span class="hc-c">${y === " " ? "&nbsp;" : Pe(y)}</span></span>`
6826
+ ).join("")}</span>` : `<span class="hc-tx">${o}</span>`, c = (y) => `<span class="hc-lyr${y}" aria-hidden="true">${o}</span>`;
6827
+ let f = "", h = "";
6828
+ return (n === "aura" || n === "outline") && (f += c(" hc-g")), n === "glint" && (h += `<span class="hc-win" aria-hidden="true">${c("")}</span>`), n === "twinkle" && (h += [
6829
+ [-6, -25, 0],
6830
+ [52, 55, 0.95],
6831
+ [94, -15, 1.9]
6832
+ ].map(
6833
+ ([y, S, T]) => `<i class="hc-tw" aria-hidden="true" style="left:${y}%;top:${S}%;animation-delay:${T}s"></i>`
6834
+ ).join("")), `<span class="${`hc-name hc-fx-${n} hc-gr-${a} hc-font-${i}${s ? " hc-split" : ""}${r.large ? " hc-large" : ""}`}">${f}${l}${h}</span>`;
6736
6835
  }
6737
- function Mf({ room: e }) {
6738
- const t = e.users ?? [], r = t.length;
6739
- return /* @__PURE__ */ De("li", { className: "flex items-stretch gap-2", children: [
6740
- /* @__PURE__ */ F(
6741
- Jr,
6742
- {
6743
- to: `/room/${encodeURIComponent(e.viewer_key)}`,
6744
- className: "flex-1 block no-underline rounded-lg border border-border bg-bg-card/40 backdrop-blur-sm px-5 py-4 transition-all duration-150 hover:border-border-light hover:-translate-y-px hover:bg-bg-card/55 focus:outline-none focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/40",
6745
- children: /* @__PURE__ */ De("div", { className: "flex items-center justify-between gap-4", children: [
6746
- /* @__PURE__ */ F("div", { className: "text-xl font-medium tracking-wide text-text no-underline", children: Af(e) }),
6747
- r > 0 && /* @__PURE__ */ F("div", { className: "flex shrink-0", children: t.map((n, a) => /* @__PURE__ */ F(Pf, { user: n }, `${n.name}-${a}`)) })
6748
- ] })
6749
- }
6750
- ),
6751
- e.leader_key && !e.leader_occupied && /* @__PURE__ */ F(
6752
- Jr,
6753
- {
6754
- to: `/room/${encodeURIComponent(e.leader_key)}`,
6755
- title: "Join as leader",
6756
- className: "flex items-center px-4 rounded-lg border border-primary/50 bg-primary/10 text-sm font-medium text-text no-underline transition-all duration-150 hover:bg-primary/20 hover:border-primary hover:-translate-y-px focus:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",
6757
- children: "Leader"
6758
- }
6759
- )
6760
- ] });
6836
+ var Mf = (() => {
6837
+ let e = "";
6838
+ for (let t = 0; t < 12; t++)
6839
+ e += `<g transform="rotate(${t * 30} 50 50)"><path d="M50 3 l2.5 4 -2.5 4 -2.5 -4z" fill="currentColor" opacity="${t % 3 ? 0.55 : 1}"/></g>`;
6840
+ return `<svg viewBox="0 0 100 100" aria-hidden="true"><circle cx="50" cy="50" r="44" fill="none" stroke="currentColor" stroke-width="1" stroke-dasharray="3 5" opacity=".7"/>${e}</svg>`;
6841
+ })();
6842
+ function Pm(e, t = Sa) {
6843
+ const r = e?.overlay;
6844
+ if (!r) return "";
6845
+ const n = qn.get(r)?.art;
6846
+ if (n) {
6847
+ const a = e?.placement ?? _s;
6848
+ return `<span class="hc-ol hc-art${n.pixel ? " hc-px" : ""}" data-hc-art="${Pe(r)}" style="left:${50 - n.width / 2}%;top:${n.top}%;width:${n.width}%;z-index:${a.back ? 0 : 3}"><span class="hc-adj" style="transform:${Af(a)}"><img alt="" draggable="false" style="--hc-tilt:${n.tilt}deg" src="${Pe(`${t}/art/${n.file}`)}"></span></span>`;
6849
+ }
6850
+ switch (tr(r)) {
6851
+ case "runes":
6852
+ return `<span class="hc-ol hc-runes">${Mf}</span>`;
6853
+ case "comet":
6854
+ return '<span class="hc-ol hc-comet"></span>';
6855
+ case "shine":
6856
+ return '<span class="hc-ol hc-clip"><span class="hc-band"></span></span>';
6857
+ case "glow":
6858
+ return '<span class="hc-ol hc-glow"></span>';
6859
+ case "petals":
6860
+ return [15, 40, 62, 85].map(
6861
+ (a, i) => `<i class="hc-ol hc-petal" style="left:${a}%;animation-delay:${(i * 0.85).toFixed(2)}s"></i>`
6862
+ ).join("");
6863
+ default:
6864
+ return "";
6865
+ }
6761
6866
  }
6762
- function If() {
6763
- const e = Ld(), [t, r] = yt([]), [n, a] = yt(!0), [i, o] = yt(null), [s, l] = yt(0), [c, f] = yt(e.serverOrigin);
6764
- e.serverOrigin !== c && (f(e.serverOrigin), a(!0), o(null));
6867
+ var Ui = "!<>-_/[]{}=+*^?#%&01", Bi = /* @__PURE__ */ new Set(["type", "decode", "cascade"]), ji = 1400, If = 160;
6868
+ function Mm(e, t, r = {}) {
6869
+ let n = tr(t?.message);
6870
+ if (n === "none") return `<span class="hc-msg">${Pe(e)}</span>`;
6871
+ const a = e.split(/\s+/).filter(Boolean);
6872
+ Bi.has(n) && e.length > If && (n = "words");
6873
+ const i = r.keep ? " data-hc-keep" : "";
6874
+ let o, s;
6875
+ if (Bi.has(n)) {
6876
+ s = Math.min(38, ji / Math.max(1, e.length));
6877
+ let l = 0;
6878
+ const c = () => Ui[Math.floor(Math.random() * Ui.length)];
6879
+ o = a.map(
6880
+ (g) => `<span class="hc-w">${[...g].map((y) => {
6881
+ const S = l++;
6882
+ return n === "decode" ? `<span class="hc-ch" style="--hc-i:${S}" data-g="${Pe(c())}" data-h="${Pe(c())}"><span class="hc-r">${Pe(y)}</span></span>` : `<span class="hc-ch" style="--hc-i:${S}">${Pe(y)}</span>`;
6883
+ }).join("")}</span>`
6884
+ ).join(" "), n === "type" && (o += `<span class="hc-caret" style="--hc-i:${l}"></span>`);
6885
+ const f = n === "type" ? "hc-caret" : n === "decode" ? "hc-r" : "hc-ch", h = o.lastIndexOf(`<span class="${f}"`);
6886
+ o = `${o.slice(0, h)}<span data-hc-last class="${f}"${o.slice(h + `<span class="${f}"`.length)}`;
6887
+ } else
6888
+ s = Math.min(90, ji / Math.max(1, a.length)), o = a.map(
6889
+ (l, c) => `<span class="hc-w" style="--hc-i:${c}"${c === a.length - 1 ? " data-hc-last" : ""}>${Pe(l)}</span>`
6890
+ ).join(" ");
6891
+ return `<span class="hc-msg hc-mt-${n}" style="--hc-step:${s.toFixed(1)}ms" data-text="${Pe(e)}"${i}><span class="hc-sr">${Pe(e)}</span><span aria-hidden="true">${o}</span></span>`;
6892
+ }
6893
+ function Lf(e) {
6894
+ const t = e.target;
6895
+ if (e.pseudoElement || !t?.hasAttribute?.("data-hc-last")) return;
6896
+ const r = t.closest(".hc-msg");
6897
+ !r || r.hasAttribute("data-hc-keep") || (r.className = "hc-msg", r.removeAttribute("style"), r.textContent = r.getAttribute("data-text") ?? "");
6898
+ }
6899
+ var zi = {
6900
+ script: {
6901
+ file: "caveat",
6902
+ family: "Caveat",
6903
+ generic: "cursive",
6904
+ css: "font-weight:700;font-size:1.3em;line-height:1"
6905
+ },
6906
+ surf: {
6907
+ file: "pacifico",
6908
+ family: "Pacifico",
6909
+ generic: "cursive",
6910
+ css: "font-weight:400;font-size:1.02em;line-height:1.1"
6911
+ },
6912
+ gothic: {
6913
+ file: "gothic",
6914
+ family: "Grenze Gotisch",
6915
+ generic: "serif",
6916
+ css: "font-weight:600;font-size:1.15em"
6917
+ },
6918
+ runic: { file: "uncial", family: "Uncial Antiqua", generic: "serif", css: "font-weight:400" },
6919
+ corsair: {
6920
+ file: "pirata",
6921
+ family: "Pirata One",
6922
+ generic: "serif",
6923
+ css: "font-weight:400;font-size:1.12em;letter-spacing:.02em"
6924
+ },
6925
+ metal: {
6926
+ file: "metal",
6927
+ family: "Metal Mania",
6928
+ generic: "cursive",
6929
+ css: "font-weight:400;font-size:1.12em;letter-spacing:.02em"
6930
+ },
6931
+ comic: {
6932
+ file: "bangers",
6933
+ family: "Bangers",
6934
+ generic: "cursive",
6935
+ css: "font-weight:400;font-size:1.15em;letter-spacing:.05em"
6936
+ },
6937
+ circuit: {
6938
+ file: "orbitron",
6939
+ family: "Orbitron",
6940
+ generic: "sans-serif",
6941
+ css: "font-weight:700;letter-spacing:.03em"
6942
+ },
6943
+ hover: {
6944
+ file: "audiowide",
6945
+ family: "Audiowide",
6946
+ generic: "sans-serif",
6947
+ css: "font-weight:400;font-size:.92em"
6948
+ },
6949
+ retro: { file: "righteous", family: "Righteous", generic: "sans-serif", css: "font-weight:400" },
6950
+ arcade: {
6951
+ file: "bungee",
6952
+ family: "Bungee",
6953
+ generic: "sans-serif",
6954
+ css: "font-weight:400;font-size:.9em"
6955
+ },
6956
+ pixel: {
6957
+ file: "pixel",
6958
+ family: "Press Start 2P",
6959
+ generic: "monospace",
6960
+ css: "font-weight:400;font-size:.62em;line-height:1.6"
6961
+ }
6962
+ };
6963
+ function Of(e = Sa) {
6964
+ const t = Object.entries(zi).map(
6965
+ ([n, a]) => `@font-face{font-family:"hc-${n}";src:url("${e}/fonts/${a.file}.woff2") format("woff2");font-display:swap}`
6966
+ ).join(`
6967
+ `), r = Object.entries(zi).map(([n, a]) => `.hc-font-${n}{font-family:"hc-${n}","${a.family}",${a.generic};${a.css}}`).join(`
6968
+ `);
6969
+ return `${t}
6970
+ /* Colours: everything derives from the character colour. */
6971
+ .hc-name,.hc-av,.hc-msg{--hc-b:var(--hc-base,currentColor);--hc-hi:color-mix(in oklch,var(--hc-b),white 50%);--hc-lo:color-mix(in oklch,var(--hc-b),black 50%);--hc-glow:color-mix(in oklch,var(--hc-b) 75%,transparent)}
6972
+
6973
+ /* --- name ---
6974
+ Bleed: a gradient is a background clipped to the letters, and a background covers only the box; script
6975
+ swashes reach outside it. So the text box and every layer over it get room on all sides, cancelled by a
6976
+ negative margin so nothing moves. */
6977
+ .hc-name{--hc-bx:.4em;--hc-by:.3em;--hc-grad:none;position:relative;display:inline-block;white-space:nowrap;color:var(--hc-b);font-weight:700;line-height:1.25}
6978
+ .hc-name.hc-large{font-size:1.6em}
6979
+ .hc-name .hc-tx{position:relative;z-index:1;display:inline-block;padding:var(--hc-by) var(--hc-bx);margin:calc(-1 * var(--hc-by)) calc(-1 * var(--hc-bx))}
6980
+ .hc-name .hc-lyr{position:absolute;left:calc(-1 * var(--hc-bx));top:calc(-1 * var(--hc-by));padding:var(--hc-by) var(--hc-bx);pointer-events:none;white-space:nowrap}
6981
+ .hc-name .hc-win{position:absolute;inset:calc(-1 * var(--hc-by)) calc(-1 * var(--hc-bx));overflow:hidden}
6982
+ .hc-name .hc-win .hc-lyr{left:0;top:0}
6983
+ .hc-name .hc-ch,.hc-name .hc-c{display:inline-block}
6984
+ .hc-gr-gild{--hc-grad:linear-gradient(180deg,var(--hc-hi) 0%,var(--hc-b) 55%,var(--hc-lo) 100%)}
6985
+ .hc-gr-gloss{--hc-grad:linear-gradient(180deg,color-mix(in oklch,var(--hc-hi),white 35%) 0%,var(--hc-hi) 36%,color-mix(in oklch,var(--hc-hi),var(--hc-b)) 48%,var(--hc-b) 60%,var(--hc-lo) 100%)}
6986
+ .hc-gr-split{--hc-grad:linear-gradient(180deg,var(--hc-hi) 0 52%,var(--hc-b) 52% 100%)}
6987
+ .hc-gr-brushed{--hc-grad:repeating-linear-gradient(90deg,transparent 0 1px,color-mix(in oklch,var(--hc-hi) 40%,transparent) 1px 2px),linear-gradient(180deg,var(--hc-hi),var(--hc-b) 55%,var(--hc-lo))}
6988
+ .hc-gr-lumen{--hc-grad:radial-gradient(ellipse 60% 90% at 50% 35%,var(--hc-hi),var(--hc-b) 55%,var(--hc-lo) 100%)}
6989
+ .hc-name:not(.hc-gr-none) .hc-tx{background:var(--hc-grad);-webkit-background-clip:text;background-clip:text;color:transparent}
6990
+ .hc-name.hc-split:not(.hc-gr-none) .hc-tx{background:none}
6991
+ .hc-name.hc-split:not(.hc-gr-none) .hc-tx .hc-c{padding:var(--hc-by) var(--hc-bx);margin:calc(-1 * var(--hc-by)) calc(-1 * var(--hc-bx));background:var(--hc-grad);-webkit-background-clip:text;background-clip:text;color:transparent}
6992
+ .hc-fx-glint .hc-win{z-index:3;animation:hc-win-go 4.5s cubic-bezier(.4,0,.2,1) infinite;-webkit-mask-image:linear-gradient(100deg,transparent 35%,#000 50%,transparent 65%);mask-image:linear-gradient(100deg,transparent 35%,#000 50%,transparent 65%)}
6993
+ .hc-fx-glint .hc-win .hc-lyr{color:var(--hc-hi);animation:hc-win-back 4.5s cubic-bezier(.4,0,.2,1) infinite}
6994
+ @keyframes hc-win-go{0%{transform:translateX(-100%)}55%,100%{transform:translateX(100%)}}
6995
+ @keyframes hc-win-back{0%{transform:translateX(100%)}55%,100%{transform:translateX(-100%)}}
6996
+ .hc-fx-aura .hc-lyr.hc-g{color:transparent;text-shadow:0 0 6px var(--hc-glow),0 0 14px var(--hc-glow);animation:hc-breathe 3s ease-in-out infinite}
6997
+ .hc-fx-outline .hc-lyr.hc-g{color:transparent;-webkit-text-stroke:3px var(--hc-hi);animation:hc-breathe 3.6s ease-in-out infinite}
6998
+ @keyframes hc-breathe{0%,100%{opacity:.25}50%{opacity:1}}
6999
+ .hc-fx-hop .hc-c{animation:hc-hop 3.6s ease-in-out calc(var(--hc-i) * 45ms) infinite}
7000
+ @keyframes hc-hop{0%,14%,100%{transform:none}5%{transform:translateY(-4px)}10%{transform:translateY(.5px)}}
7001
+ .hc-fx-twinkle .hc-tw{position:absolute;width:7px;height:7px;z-index:3;pointer-events:none;background:linear-gradient(var(--hc-hi),var(--hc-hi)) center/1.4px 100% no-repeat,linear-gradient(90deg,var(--hc-hi),var(--hc-hi)) center/100% 1.4px no-repeat;animation:hc-star 2.8s ease-in-out infinite both}
7002
+ @keyframes hc-star{0%,100%{opacity:0;transform:scale(.3) rotate(0deg)}25%{opacity:1;transform:scale(1) rotate(45deg)}50%{opacity:0;transform:scale(.3) rotate(90deg)}}
7003
+ .hc-font-caps{font-variant:small-caps;letter-spacing:.08em}
7004
+ .hc-font-wide{letter-spacing:.22em;font-weight:600;text-transform:uppercase;font-size:.82em}
7005
+ ${r}
7006
+
7007
+ /* --- avatar --- */
7008
+ .hc-av{--hc-sz:40px;position:relative;display:inline-block;width:var(--hc-sz);height:var(--hc-sz);flex:none;isolation:isolate;vertical-align:middle}
7009
+ .hc-av .hc-pic{position:absolute;inset:0;border-radius:50%;overflow:hidden;z-index:1;background:color-mix(in oklch,var(--hc-b) 30%,transparent)}
7010
+ .hc-av .hc-pic img{width:100%;height:100%;display:block;object-fit:cover;image-rendering:pixelated}
7011
+ .hc-av .hc-ol{position:absolute;pointer-events:none}
7012
+ .hc-ol.hc-art{display:block}
7013
+ .hc-ol.hc-art .hc-adj{display:block;position:relative;transform-origin:50% 60%}
7014
+ .hc-ol.hc-art img{display:block;width:100%;height:auto;filter:drop-shadow(0 1px 1px rgba(0,0,0,.45));animation:hc-art-bob 3.4s ease-in-out infinite;-webkit-user-drag:none;user-select:none}
7015
+ .hc-ol.hc-art.hc-px img{image-rendering:pixelated}
7016
+ @keyframes hc-art-bob{0%,100%{transform:rotate(var(--hc-tilt,0deg)) translateY(0)}50%{transform:rotate(var(--hc-tilt,0deg)) translateY(-2px)}}
7017
+ .hc-ol.hc-runes{inset:-9px;z-index:2;color:var(--hc-hi);animation:hc-turn 14s linear infinite}
7018
+ .hc-ol.hc-runes svg{width:100%;height:100%;display:block}
7019
+ @keyframes hc-turn{to{transform:rotate(360deg)}}
7020
+ .hc-ol.hc-comet{inset:-6px;z-index:2;border-radius:50%;background:conic-gradient(from 0deg,transparent 0 270deg,color-mix(in oklch,var(--hc-hi) 10%,transparent) 300deg,var(--hc-hi) 358deg,transparent 360deg);-webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 3px),#000 calc(100% - 3px));mask:radial-gradient(farthest-side,transparent calc(100% - 3px),#000 calc(100% - 3px));animation:hc-turn 2.4s linear infinite}
7021
+ .hc-ol.hc-clip{inset:0;border-radius:50%;overflow:hidden;z-index:2}
7022
+ .hc-ol .hc-band{position:absolute;top:-30%;left:0;width:45%;height:160%;background:linear-gradient(90deg,transparent,color-mix(in oklch,var(--hc-hi) 70%,transparent),transparent);transform:translateX(-130%) rotate(20deg);animation:hc-band 5s ease-in-out infinite}
7023
+ @keyframes hc-band{0%{transform:translateX(-130%) rotate(20deg)}45%,100%{transform:translateX(260%) rotate(20deg)}}
7024
+ .hc-ol.hc-glow{inset:-30%;border-radius:50%;z-index:0;background:radial-gradient(circle,var(--hc-glow) 0,transparent 65%);animation:hc-glowp 3.2s ease-in-out infinite}
7025
+ @keyframes hc-glowp{0%,100%{opacity:.35;transform:scale(.92)}50%{opacity:.9;transform:scale(1.04)}}
7026
+ .hc-ol.hc-petal{top:-8%;height:100%;width:5px;z-index:2;animation:hc-fall 3.4s linear infinite both}
7027
+ .hc-ol.hc-petal::after{content:"";position:absolute;left:0;top:0;width:5px;height:7px;border-radius:5px 0;background:#f7b6c8;transform:rotate(35deg)}
7028
+ @keyframes hc-fall{0%{transform:translate(0,0);opacity:0}12%{opacity:.9}100%{transform:translate(-6px,100%);opacity:0}}
7029
+
7030
+ /* --- message reveal: fill backwards only; the page swaps back to plain text when it ends --- */
7031
+ .hc-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
7032
+ .hc-msg .hc-w{display:inline-block;white-space:nowrap}
7033
+ .hc-msg .hc-ch{display:inline-block}
7034
+ .hc-mt-type .hc-ch{animation:hc-in .01s linear calc(var(--hc-i) * var(--hc-step)) backwards}
7035
+ .hc-mt-type .hc-caret{display:inline-block;width:2px;height:1em;margin-left:2px;vertical-align:-2px;background:var(--hc-b);opacity:0;animation:hc-caret 1.5s steps(1) calc(var(--hc-i) * var(--hc-step)) backwards}
7036
+ @keyframes hc-caret{0%{opacity:0}1%{opacity:1}20%{opacity:0}40%{opacity:1}60%{opacity:0}80%{opacity:1}100%{opacity:0}}
7037
+ .hc-mt-cascade .hc-ch{animation:hc-drop .35s cubic-bezier(.3,1.5,.5,1) calc(var(--hc-i) * var(--hc-step)) backwards}
7038
+ .hc-mt-decode .hc-ch{position:relative}
7039
+ .hc-mt-decode .hc-ch .hc-r{display:inline-block;animation:hc-in .01s linear calc(var(--hc-i) * var(--hc-step) + 260ms) backwards}
7040
+ .hc-mt-decode .hc-ch::before,.hc-mt-decode .hc-ch::after{position:absolute;left:0;top:0;color:var(--hc-b);opacity:0;animation:hc-dec-a .26s steps(1) calc(var(--hc-i) * var(--hc-step)) backwards}
7041
+ .hc-mt-decode .hc-ch::before{content:attr(data-g)}
7042
+ .hc-mt-decode .hc-ch::after{content:attr(data-h);animation-name:hc-dec-b}
7043
+ @keyframes hc-dec-a{0%{opacity:.85}50%,100%{opacity:0}}
7044
+ @keyframes hc-dec-b{0%{opacity:0}50%{opacity:.85}100%{opacity:0}}
7045
+ .hc-mt-words .hc-w{animation:hc-rise .4s ease-out calc(var(--hc-i) * var(--hc-step)) backwards}
7046
+ .hc-mt-bubble .hc-w{animation:hc-pop .35s cubic-bezier(.3,1.6,.5,1) calc(var(--hc-i) * var(--hc-step)) backwards}
7047
+ .hc-mt-drift .hc-w{animation:hc-slide .45s cubic-bezier(.2,.8,.2,1) calc(var(--hc-i) * var(--hc-step)) backwards}
7048
+ @keyframes hc-in{from{opacity:0}to{opacity:1}}
7049
+ @keyframes hc-drop{0%{transform:translateY(-10px);opacity:0}100%{transform:none;opacity:1}}
7050
+ @keyframes hc-rise{0%{transform:translateY(10px);opacity:0}100%{transform:none;opacity:1}}
7051
+ @keyframes hc-pop{0%{transform:scale(.6);opacity:0}100%{transform:scale(1);opacity:1}}
7052
+ @keyframes hc-slide{0%{transform:translateX(-18px);opacity:0}100%{transform:none;opacity:1}}
7053
+
7054
+ .hc-idle .hc-name,.hc-idle .hc-name *,.hc-idle .hc-av *,.hc-idle .hc-av *::after{animation-play-state:paused!important}
7055
+ @media (prefers-reduced-motion:reduce){.hc-name *,.hc-av *,.hc-av *::after,.hc-msg *,.hc-msg *::before,.hc-msg *::after{animation:none!important}}
7056
+ `;
7057
+ }
7058
+ function Im(e = document, t = Sa) {
7059
+ if (e.getElementById(Fi)) return;
7060
+ const r = e.createElement("style");
7061
+ r.id = Fi, r.textContent = Of(t), e.head.appendChild(r), e.addEventListener("animationend", Lf);
7062
+ }
7063
+ function Df(e, t) {
7064
+ return (t ? Tf(t) : null) ?? fs(e);
7065
+ }
7066
+ function Nf(e, t) {
7067
+ return bt(() => {
7068
+ t && Cf(t);
7069
+ }, [t]), co(xf, () => Df(e, t), () => fs(e));
7070
+ }
7071
+ function $f({ sprite: e, url: t, alt: r = "", className: n, style: a, fallback: i }) {
7072
+ const [o, s] = yt(null);
7073
+ if (t && t !== o)
7074
+ return /* @__PURE__ */ F(
7075
+ "img",
7076
+ {
7077
+ src: t,
7078
+ alt: r,
7079
+ referrerPolicy: "no-referrer",
7080
+ className: n,
7081
+ style: a,
7082
+ draggable: !1,
7083
+ onError: () => s(t)
7084
+ }
7085
+ );
7086
+ const l = hs(e);
7087
+ return l ? /* @__PURE__ */ F("img", { src: l, alt: r, crossOrigin: "anonymous", className: n, style: a, draggable: !1 }) : /* @__PURE__ */ F(lo, { children: i });
7088
+ }
7089
+ const Ff = "hadoku://library";
7090
+ function Uf(e = typeof navigator < "u" ? navigator.userAgent : void 0) {
7091
+ return e !== void 0 && /(^|\s)HadokuApp\/\S/.test(e);
7092
+ }
7093
+ const Bf = 5e3;
7094
+ function Hi(e) {
7095
+ return e.slice().sort(
7096
+ (t, r) => (r.users?.length ?? 0) - (t.users?.length ?? 0) || t.room_id.localeCompare(r.room_id)
7097
+ );
7098
+ }
7099
+ function jf(e) {
7100
+ return e.room_id.split("-").map((t) => t.charAt(0).toUpperCase() + t.slice(1)).join(" ");
7101
+ }
7102
+ function zf({ user: e }) {
7103
+ const t = Nf(e.sprite_id, e.avatar_url);
7104
+ return /* @__PURE__ */ De("span", { className: "relative -ml-2 first:ml-0 group/av", children: [
7105
+ /* @__PURE__ */ F(
7106
+ "span",
7107
+ {
7108
+ className: "block h-10 w-10 rounded-full border-2 overflow-hidden bg-bg-card transition-transform duration-150 group-hover/av:scale-110 group-hover/av:z-10 shadow-md",
7109
+ style: { borderColor: t },
7110
+ children: /* @__PURE__ */ F(
7111
+ $f,
7112
+ {
7113
+ sprite: e.sprite_id,
7114
+ url: e.avatar_url,
7115
+ alt: e.name,
7116
+ className: "h-full w-full object-cover",
7117
+ fallback: /* @__PURE__ */ F("span", { className: "flex h-full w-full items-center justify-center text-[13px] font-semibold text-text-secondary", children: e.name.slice(0, 1).toUpperCase() })
7118
+ }
7119
+ )
7120
+ }
7121
+ ),
7122
+ /* @__PURE__ */ F(
7123
+ "span",
7124
+ {
7125
+ role: "tooltip",
7126
+ className: "pointer-events-none absolute bottom-full left-1/2 mb-1.5 -translate-x-1/2 whitespace-nowrap rounded-md bg-bg-card/95 backdrop-blur px-2 py-1 text-[11px] font-medium text-text shadow-lg border border-border opacity-0 scale-95 group-hover/av:opacity-100 group-hover/av:scale-100 transition-all duration-150 z-20",
7127
+ children: e.name
7128
+ }
7129
+ )
7130
+ ] });
7131
+ }
7132
+ function Hf({ room: e }) {
7133
+ const t = e.users ?? [], r = t.length;
7134
+ return /* @__PURE__ */ De("li", { className: "flex items-stretch gap-2", children: [
7135
+ /* @__PURE__ */ F(
7136
+ Qr,
7137
+ {
7138
+ to: `/room/${encodeURIComponent(e.viewer_key)}`,
7139
+ className: "flex-1 block no-underline rounded-lg border border-border bg-bg-card/40 backdrop-blur-sm px-5 py-4 transition-all duration-150 hover:border-border-light hover:-translate-y-px hover:bg-bg-card/55 focus:outline-none focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/40",
7140
+ children: /* @__PURE__ */ De("div", { className: "flex items-center justify-between gap-4", children: [
7141
+ /* @__PURE__ */ F("div", { className: "text-xl font-medium tracking-wide text-text no-underline", children: jf(e) }),
7142
+ r > 0 && /* @__PURE__ */ F("div", { className: "flex shrink-0", children: t.map((n, a) => /* @__PURE__ */ F(zf, { user: n }, `${n.name}-${a}`)) })
7143
+ ] })
7144
+ }
7145
+ ),
7146
+ e.leader_key && !e.leader_occupied && /* @__PURE__ */ F(
7147
+ Qr,
7148
+ {
7149
+ to: `/room/${encodeURIComponent(e.leader_key)}`,
7150
+ title: "Join as leader",
7151
+ className: "flex items-center px-4 rounded-lg border border-primary/50 bg-primary/10 text-sm font-medium text-text no-underline transition-all duration-150 hover:bg-primary/20 hover:border-primary hover:-translate-y-px focus:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",
7152
+ children: "Leader"
7153
+ }
7154
+ )
7155
+ ] });
7156
+ }
7157
+ function qf() {
7158
+ const e = Ld(), [t, r] = yt([]), [n, a] = yt(!0), [i, o] = yt(null), [s, l] = yt(0), [c, f] = yt(e.serverOrigin);
7159
+ e.serverOrigin !== c && (f(e.serverOrigin), a(!0), o(null));
6765
7160
  const h = () => {
6766
7161
  a(!0), o(null), l((g) => g + 1);
6767
7162
  };
6768
7163
  return bt(() => {
6769
- const g = Math.random().toString(36).slice(2, 8), y = new AbortController(), S = on();
7164
+ const g = Math.random().toString(36).slice(2, 8), y = new AbortController(), S = sn();
6770
7165
  let T = !1, v = null, x = !1;
6771
7166
  C("home", "rooms-effect: mount", {
6772
7167
  effectId: g,
@@ -6784,7 +7179,7 @@ function If() {
6784
7179
  });
6785
7180
  }, 1e4), A = (E) => {
6786
7181
  const V = Date.now();
6787
- C("home", "rooms-effect: fetch-start", { effectId: g, attempt: E }), fetch(`${S}/api/rooms${jn() ? "?debug=1" : ""}`, {
7182
+ C("home", "rooms-effect: fetch-start", { effectId: g, attempt: E }), fetch(`${S}/api/rooms${zn() ? "?debug=1" : ""}`, {
6788
7183
  cache: "no-store",
6789
7184
  signal: y.signal
6790
7185
  }).then((p) => p.ok ? p.json() : Promise.reject(new Error(`HTTP ${p.status}`))).then((p) => {
@@ -6794,7 +7189,7 @@ function If() {
6794
7189
  attempt: E,
6795
7190
  elapsedMs: P,
6796
7191
  roomCount: (p.rooms ?? []).length
6797
- }), r(Fi(p.rooms || [])), o(null), a(!1), x = !0, clearTimeout(_);
7192
+ }), r(Hi(p.rooms || [])), o(null), a(!1), x = !0, clearTimeout(_);
6798
7193
  }).catch((p) => {
6799
7194
  const P = Date.now() - V, $ = p instanceof Error ? p.message : void 0;
6800
7195
  if (p instanceof Error && p.name === "AbortError") {
@@ -6817,14 +7212,14 @@ function If() {
6817
7212
  };
6818
7213
  A(1);
6819
7214
  const B = setInterval(() => {
6820
- fetch(`${S}/api/rooms${jn() ? "?debug=1" : ""}`, {
7215
+ fetch(`${S}/api/rooms${zn() ? "?debug=1" : ""}`, {
6821
7216
  cache: "no-store",
6822
7217
  signal: y.signal
6823
7218
  }).then((E) => E.ok ? E.json() : null).then((E) => {
6824
- E && r(Fi(E.rooms || []));
7219
+ E && r(Hi(E.rooms || []));
6825
7220
  }).catch(() => {
6826
7221
  });
6827
- }, kf);
7222
+ }, Bf);
6828
7223
  return () => {
6829
7224
  C("home", "rooms-effect: cleanup", {
6830
7225
  effectId: g,
@@ -6851,14 +7246,14 @@ function If() {
6851
7246
  children: "Retry"
6852
7247
  }
6853
7248
  )
6854
- ] }) : t.length === 0 ? /* @__PURE__ */ F("div", { className: "text-text-secondary text-sm px-1 py-3", children: "No rooms available." }) : /* @__PURE__ */ F(lo, { children: /* @__PURE__ */ F("ul", { className: "list-none p-0 m-0 space-y-2", children: t.map((g) => /* @__PURE__ */ F(Mf, { room: g }, g.viewer_key)) }) })
7249
+ ] }) : t.length === 0 ? /* @__PURE__ */ F("div", { className: "text-text-secondary text-sm px-1 py-3", children: "No rooms available." }) : /* @__PURE__ */ F(lo, { children: /* @__PURE__ */ F("ul", { className: "list-none p-0 m-0 space-y-2", children: t.map((g) => /* @__PURE__ */ F(Hf, { room: g }, g.viewer_key)) }) })
6855
7250
  ] }),
6856
- Cf() && /* @__PURE__ */ De("div", { className: "w-full max-w-md z-10", children: [
7251
+ Uf() && /* @__PURE__ */ De("div", { className: "w-full max-w-md z-10", children: [
6857
7252
  /* @__PURE__ */ F("h2", { className: "text-xs uppercase tracking-[0.2em] text-text-muted/70 mb-3 px-1", children: "On this phone" }),
6858
7253
  /* @__PURE__ */ De(
6859
7254
  "a",
6860
7255
  {
6861
- href: xf,
7256
+ href: Ff,
6862
7257
  className: "block no-underline rounded-lg border border-border bg-bg-card/40 backdrop-blur-sm px-5 py-4 transition-all duration-150 hover:border-border-light hover:-translate-y-px hover:bg-bg-card/55 focus:outline-none focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/40",
6863
7258
  children: [
6864
7259
  /* @__PURE__ */ F("div", { className: "text-xl font-medium tracking-wide text-text", children: "Library" }),
@@ -6869,18 +7264,18 @@ function If() {
6869
7264
  ] })
6870
7265
  ] });
6871
7266
  }
6872
- function Lf() {
7267
+ function Vf() {
6873
7268
  return /* @__PURE__ */ De("div", { className: "fixed inset-0 bg-black", children: [
6874
7269
  /* @__PURE__ */ F(ws, {}),
6875
7270
  /* @__PURE__ */ F("div", { className: "absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ F("div", { className: "text-center", children: /* @__PURE__ */ F("h1", { className: "text-4xl font-bold text-white mb-4", children: "API is sleeping..." }) }) })
6876
7271
  ] });
6877
7272
  }
6878
- const Of = "watchparty_fragment_delivery", Df = /^[0-9a-f]{64}$/, Nf = /^[A-Za-z0-9_.-]+$/;
6879
- function $f(e) {
6880
- return !(!e || !e.baseUrl || e.baseUrl.endsWith("/") || !Df.test(e.token) || e.trackId !== void 0 && !Nf.test(e.trackId));
7273
+ const Wf = "watchparty_fragment_delivery", Gf = /^[0-9a-f]{64}$/, Kf = /^[A-Za-z0-9_.-]+$/;
7274
+ function Yf(e) {
7275
+ return !(!e || !e.baseUrl || e.baseUrl.endsWith("/") || !Gf.test(e.token) || e.trackId !== void 0 && !Kf.test(e.trackId));
6881
7276
  }
6882
- function km(e, t) {
6883
- if (!$f(e)) return null;
7277
+ function Lm(e, t) {
7278
+ if (!Yf(e)) return null;
6884
7279
  let r;
6885
7280
  if (t === "init")
6886
7281
  r = "init";
@@ -6891,7 +7286,7 @@ function km(e, t) {
6891
7286
  const n = e.trackId ? `audio/${e.trackId}/` : "";
6892
7287
  return `${e.baseUrl}/v/${e.token}/${n}${r}`;
6893
7288
  }
6894
- function Ff() {
7289
+ function Xf() {
6895
7290
  if (typeof window > "u") return null;
6896
7291
  try {
6897
7292
  const e = new URLSearchParams(window.location.search).get("fragmentDelivery");
@@ -6899,35 +7294,35 @@ function Ff() {
6899
7294
  if (e === "0" || e === "false") return !1;
6900
7295
  } catch {
6901
7296
  }
6902
- return Dd(Of);
7297
+ return Dd(Wf);
6903
7298
  }
6904
- let Ea = { ...Yo }, zr = null, _s = !1;
6905
- const Ui = "watchparty_delivery_client_id";
6906
- function Uf() {
6907
- const e = Ue(Ui);
7299
+ let Ra = { ...Yo }, Hr = null, Es = !1;
7300
+ const qi = "watchparty_delivery_client_id";
7301
+ function Jf() {
7302
+ const e = Ue(qi);
6908
7303
  if (e) return e;
6909
7304
  const t = globalThis.crypto?.randomUUID?.() ?? `d${Math.random().toString(36).slice(2)}`;
6910
- return ba(Ui, t) ? t : "";
7305
+ return ba(qi, t) ? t : "";
6911
7306
  }
6912
- function Bf(e) {
6913
- Ea = Xo(e), _s || (zr = null);
7307
+ function Qf(e) {
7308
+ Ra = Xo(e), Es || (Hr = null);
6914
7309
  }
6915
- function jf() {
6916
- return { ...Ea };
7310
+ function Zf() {
7311
+ return { ...Ra };
6917
7312
  }
6918
- function Es() {
6919
- return zr === null && (zr = id(Ea, Uf(), Ff())), zr;
7313
+ function Ss() {
7314
+ return Hr === null && (Hr = id(Ra, Jf(), Xf())), Hr;
6920
7315
  }
6921
- let Bi = !1;
6922
- async function zf(e) {
6923
- if (!Bi) {
6924
- Bi = !0;
7316
+ let Vi = !1;
7317
+ async function eh(e) {
7318
+ if (!Vi) {
7319
+ Vi = !0;
6925
7320
  for (let t = 0; t < 2; t++) {
6926
7321
  try {
6927
7322
  const r = await fetch(`${e}/api/flags`, { cache: "no-store" });
6928
7323
  if (r.ok) {
6929
7324
  const n = await r.json();
6930
- Bf(n?.fragment_delivery), C("app", "Delivery flag loaded", { ...jf(), attempt: t });
7325
+ Qf(n?.fragment_delivery), C("app", "Delivery flag loaded", { ...Zf(), attempt: t });
6931
7326
  return;
6932
7327
  }
6933
7328
  } catch {
@@ -6937,54 +7332,54 @@ async function zf(e) {
6937
7332
  re("app", "Delivery flag fetch failed; staying on the default delivery path");
6938
7333
  }
6939
7334
  }
6940
- function Hf() {
6941
- return Es();
7335
+ function th() {
7336
+ return Ss();
6942
7337
  }
6943
- function Am() {
6944
- const e = Es();
6945
- return _s = !0, e === "fragment";
7338
+ function Om() {
7339
+ const e = Ss();
7340
+ return Es = !0, e === "fragment";
6946
7341
  }
6947
- let Sa = md;
6948
- const Vn = /* @__PURE__ */ new Set();
6949
- function qf(e) {
6950
- Sa = e;
6951
- for (const t of Vn) t();
7342
+ let Ta = md;
7343
+ const Gn = /* @__PURE__ */ new Set();
7344
+ function rh(e) {
7345
+ Ta = e;
7346
+ for (const t of Gn) t();
6952
7347
  }
6953
- function Vf(e) {
7348
+ function nh(e) {
6954
7349
  const t = pd.safeParse(e?.games);
6955
7350
  if (!t.success)
6956
7351
  return re("game", "Game catalog rejected; keeping the current list", { issues: t.error.issues.length }), !1;
6957
7352
  const r = t.data;
6958
- return qf(r), !0;
7353
+ return rh(r), !0;
6959
7354
  }
6960
- let ji = !1;
6961
- async function Wf(e) {
6962
- if (!ji) {
6963
- ji = !0;
7355
+ let Wi = !1;
7356
+ async function ah(e) {
7357
+ if (!Wi) {
7358
+ Wi = !0;
6964
7359
  try {
6965
7360
  const t = await fetch(`${e}/api/games`, { cache: "no-store" });
6966
7361
  if (!t.ok) {
6967
7362
  re("game", "Game catalog fetch failed; using the default list", { status: t.status });
6968
7363
  return;
6969
7364
  }
6970
- Vf(await t.json()) && C("game", "Game catalog loaded", { games: Sa.map((r) => r.id) });
7365
+ nh(await t.json()) && C("game", "Game catalog loaded", { games: Ta.map((r) => r.id) });
6971
7366
  } catch (t) {
6972
7367
  re("game", "Game catalog fetch failed; using the default list", $e(t));
6973
7368
  }
6974
7369
  }
6975
7370
  }
6976
- function Gf() {
6977
- return Sa;
7371
+ function ih() {
7372
+ return Ta;
6978
7373
  }
6979
- function Kf(e) {
6980
- return Vn.add(e), () => {
6981
- Vn.delete(e);
7374
+ function oh(e) {
7375
+ return Gn.add(e), () => {
7376
+ Gn.delete(e);
6982
7377
  };
6983
7378
  }
6984
- function Pm() {
6985
- return co(Kf, Gf);
7379
+ function Dm() {
7380
+ return co(oh, ih);
6986
7381
  }
6987
- function Yf(e) {
7382
+ function sh(e) {
6988
7383
  return st.lazy(async () => {
6989
7384
  try {
6990
7385
  return await e();
@@ -6998,35 +7393,35 @@ function Yf(e) {
6998
7393
  }
6999
7394
  });
7000
7395
  }
7001
- const Xf = ["demo-room"];
7002
- function Jf(e) {
7003
- return e ? Xf.some((t) => e === t || e.startsWith(t + "-")) : !1;
7396
+ const lh = ["demo-room"];
7397
+ function ch(e) {
7398
+ return e ? lh.some((t) => e === t || e.startsWith(t + "-")) : !1;
7004
7399
  }
7005
- function Qf(e) {
7400
+ function uh(e) {
7006
7401
  if (!(e.hostname === "hadoku.me")) return null;
7007
7402
  if (e.requireAuth) {
7008
7403
  if (ki() !== "public") return null;
7009
7404
  const n = e.pathname + (e.search || "");
7010
7405
  return `/auth?return=${encodeURIComponent(n)}`;
7011
7406
  }
7012
- if (!e.roomKey || Jf(e.roomKey) || ki() !== "public") return null;
7407
+ if (!e.roomKey || ch(e.roomKey) || ki() !== "public") return null;
7013
7408
  const r = e.pathname + (e.search || "");
7014
7409
  return `/auth?return=${encodeURIComponent(r)}`;
7015
7410
  }
7016
- const zi = Yf(() => import("./Room-CQy_wCnX.js").then((e) => e.R));
7017
- function Hi() {
7411
+ const Gi = sh(() => import("./Room-DjbNxzkP.js").then((e) => e.R));
7412
+ function Ki() {
7018
7413
  return /* @__PURE__ */ F("div", { className: "flex-1 flex items-center justify-center bg-black", children: /* @__PURE__ */ F("div", { className: "text-text-secondary text-sm", children: "Loading room..." }) });
7019
7414
  }
7020
- function Zf() {
7021
- const e = dt(), t = Cc(), r = Qf({
7415
+ function dh() {
7416
+ const e = dt(), t = Cc(), r = uh({
7022
7417
  roomKey: t.roomKey,
7023
7418
  hostname: window.location.hostname,
7024
7419
  pathname: window.location.pathname,
7025
7420
  search: window.location.search
7026
7421
  });
7027
- return r ? (window.location.replace(r), null) : t.roomKey ? /* @__PURE__ */ F(st.Suspense, { fallback: /* @__PURE__ */ F(Hi, {}), children: /* @__PURE__ */ F(zi, {}) }) : e.pathname === "/" || e.pathname === "" ? /* @__PURE__ */ F(If, {}) : e.pathname.startsWith("/room") ? /* @__PURE__ */ F(st.Suspense, { fallback: /* @__PURE__ */ F(Hi, {}), children: /* @__PURE__ */ F(zi, {}) }) : /* @__PURE__ */ F("div", { className: "p-6", children: "Not Found" });
7422
+ return r ? (window.location.replace(r), null) : t.roomKey ? /* @__PURE__ */ F(st.Suspense, { fallback: /* @__PURE__ */ F(Ki, {}), children: /* @__PURE__ */ F(Gi, {}) }) : e.pathname === "/" || e.pathname === "" ? /* @__PURE__ */ F(qf, {}) : e.pathname.startsWith("/room") ? /* @__PURE__ */ F(st.Suspense, { fallback: /* @__PURE__ */ F(Ki, {}), children: /* @__PURE__ */ F(Gi, {}) }) : /* @__PURE__ */ F("div", { className: "p-6", children: "Not Found" });
7028
7423
  }
7029
- function Pn(e) {
7424
+ function Mn(e) {
7030
7425
  const [t, r] = yt(!1), n = {
7031
7426
  serverOrigin: e.serverOrigin || Qt.serverOrigin,
7032
7427
  defaultRoomKey: e.defaultRoomKey || Qt.defaultRoomKey,
@@ -7043,7 +7438,7 @@ function Pn(e) {
7043
7438
  signal: i.signal
7044
7439
  });
7045
7440
  if (i.signal.aborted) return;
7046
- l.ok ? (C("app", "API health check passed"), zf(a), Wf(a)) : (tt("app", "API health check failed", { status: l.status }), r(!0));
7441
+ l.ok ? (C("app", "API health check passed"), eh(a), ah(a)) : (tt("app", "API health check failed", { status: l.status }), r(!0));
7047
7442
  } catch (l) {
7048
7443
  if (l?.name === "AbortError") return;
7049
7444
  tt("app", "API unreachable", { url: s, error: l }), r(!0);
@@ -7081,45 +7476,45 @@ function Pn(e) {
7081
7476
  "requestIdleCallback" in window ? window.requestIdleCallback(i, { timeout: 2e3 }) : setTimeout(i, 600);
7082
7477
  }
7083
7478
  document.readyState === "complete" ? o() : window.addEventListener("load", o, { once: !0 });
7084
- }, []), t ? /* @__PURE__ */ F(Lf, {}) : (
7479
+ }, []), t ? /* @__PURE__ */ F(Vf, {}) : (
7085
7480
  // HadokuThemeRoot must sit above everything that reads the theme —
7086
7481
  // <HadokuThemePicker> in ChatPanel throws without it, by design, so a
7087
7482
  // missing provider is a mount-time error rather than a silently wrong
7088
7483
  // theme. It also applies data-theme, which this app previously did through
7089
7484
  // its own useTheme() call.
7090
7485
  /* @__PURE__ */ F(tl, { children: /* @__PURE__ */ F(as.Provider, { value: n, children: /* @__PURE__ */ De("div", { className: "h-screen flex flex-col bg-bg", children: [
7091
- /* @__PURE__ */ F("main", { className: "flex-1 w-full overflow-hidden min-h-0 flex flex-col", children: /* @__PURE__ */ F(Zf, {}) }),
7486
+ /* @__PURE__ */ F("main", { className: "flex-1 w-full overflow-hidden min-h-0 flex flex-col", children: /* @__PURE__ */ F(dh, {}) }),
7092
7487
  /* @__PURE__ */ F(df, {})
7093
7488
  ] }) }) })
7094
7489
  );
7095
7490
  }
7096
- function eh({ basename: e = "/watchparty", appProps: t } = {}) {
7491
+ function fh({ basename: e = "/watchparty", appProps: t } = {}) {
7097
7492
  const r = t ?? {}, n = [
7098
- { path: "/", element: /* @__PURE__ */ F(Pn, { ...r }) },
7099
- { path: "/room/:roomKey", element: /* @__PURE__ */ F(Pn, { ...r }) },
7100
- { path: "/:roomKey", element: /* @__PURE__ */ F(Pn, { ...r }) }
7493
+ { path: "/", element: /* @__PURE__ */ F(Mn, { ...r }) },
7494
+ { path: "/room/:roomKey", element: /* @__PURE__ */ F(Mn, { ...r }) },
7495
+ { path: "/:roomKey", element: /* @__PURE__ */ F(Mn, { ...r }) }
7101
7496
  ];
7102
7497
  return bu(n, { basename: e });
7103
7498
  }
7104
- let Hr;
7105
- function Ss() {
7499
+ let qr;
7500
+ function Rs() {
7106
7501
  return Ue(ol) || void 0;
7107
7502
  }
7108
- function th() {
7109
- if (Hr) return;
7110
- const e = Ss();
7503
+ function hh() {
7504
+ if (qr) return;
7505
+ const e = Rs();
7111
7506
  if (e) {
7112
- Hr = e;
7507
+ qr = e;
7113
7508
  return;
7114
7509
  }
7115
7510
  il().then((t) => {
7116
- t && (Hr = t);
7511
+ t && (qr = t);
7117
7512
  }).catch(() => {
7118
7513
  C("identity", "device id unavailable — joining without one");
7119
7514
  });
7120
7515
  }
7121
- function rh() {
7122
- return Hr ??= Ss();
7516
+ function ph() {
7517
+ return qr ??= Rs();
7123
7518
  }
7124
7519
  const Ve = /* @__PURE__ */ Object.create(null);
7125
7520
  Ve.open = "0";
@@ -7129,83 +7524,83 @@ Ve.pong = "3";
7129
7524
  Ve.message = "4";
7130
7525
  Ve.upgrade = "5";
7131
7526
  Ve.noop = "6";
7132
- const qr = /* @__PURE__ */ Object.create(null);
7527
+ const Vr = /* @__PURE__ */ Object.create(null);
7133
7528
  Object.keys(Ve).forEach((e) => {
7134
- qr[Ve[e]] = e;
7529
+ Vr[Ve[e]] = e;
7135
7530
  });
7136
- const Wn = { type: "error", data: "parser error" }, Rs = typeof Blob == "function" || typeof Blob < "u" && Object.prototype.toString.call(Blob) === "[object BlobConstructor]", Ts = typeof ArrayBuffer == "function", xs = (e) => typeof ArrayBuffer.isView == "function" ? ArrayBuffer.isView(e) : e && e.buffer instanceof ArrayBuffer, Ra = ({ type: e, data: t }, r, n) => Rs && t instanceof Blob ? r ? n(t) : qi(t, n) : Ts && (t instanceof ArrayBuffer || xs(t)) ? r ? n(t) : qi(new Blob([t]), n) : n(Ve[e] + (t || "")), qi = (e, t) => {
7531
+ const Kn = { type: "error", data: "parser error" }, Ts = typeof Blob == "function" || typeof Blob < "u" && Object.prototype.toString.call(Blob) === "[object BlobConstructor]", xs = typeof ArrayBuffer == "function", Cs = (e) => typeof ArrayBuffer.isView == "function" ? ArrayBuffer.isView(e) : e && e.buffer instanceof ArrayBuffer, xa = ({ type: e, data: t }, r, n) => Ts && t instanceof Blob ? r ? n(t) : Yi(t, n) : xs && (t instanceof ArrayBuffer || Cs(t)) ? r ? n(t) : Yi(new Blob([t]), n) : n(Ve[e] + (t || "")), Yi = (e, t) => {
7137
7532
  const r = new FileReader();
7138
7533
  return r.onload = function() {
7139
7534
  const n = r.result.split(",")[1];
7140
7535
  t("b" + (n || ""));
7141
7536
  }, r.readAsDataURL(e);
7142
7537
  };
7143
- function Vi(e) {
7538
+ function Xi(e) {
7144
7539
  return e instanceof Uint8Array ? e : e instanceof ArrayBuffer ? new Uint8Array(e) : new Uint8Array(e.buffer, e.byteOffset, e.byteLength);
7145
7540
  }
7146
- let Mn;
7147
- function nh(e, t) {
7148
- if (Rs && e.data instanceof Blob)
7149
- return e.data.arrayBuffer().then(Vi).then(t);
7150
- if (Ts && (e.data instanceof ArrayBuffer || xs(e.data)))
7151
- return t(Vi(e.data));
7152
- Ra(e, !1, (r) => {
7153
- Mn || (Mn = new TextEncoder()), t(Mn.encode(r));
7541
+ let In;
7542
+ function mh(e, t) {
7543
+ if (Ts && e.data instanceof Blob)
7544
+ return e.data.arrayBuffer().then(Xi).then(t);
7545
+ if (xs && (e.data instanceof ArrayBuffer || Cs(e.data)))
7546
+ return t(Xi(e.data));
7547
+ xa(e, !1, (r) => {
7548
+ In || (In = new TextEncoder()), t(In.encode(r));
7154
7549
  });
7155
7550
  }
7156
- const Wi = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", Gt = typeof Uint8Array > "u" ? [] : new Uint8Array(256);
7157
- for (let e = 0; e < Wi.length; e++)
7158
- Gt[Wi.charCodeAt(e)] = e;
7159
- const ah = (e) => {
7551
+ const Ji = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", Gt = typeof Uint8Array > "u" ? [] : new Uint8Array(256);
7552
+ for (let e = 0; e < Ji.length; e++)
7553
+ Gt[Ji.charCodeAt(e)] = e;
7554
+ const gh = (e) => {
7160
7555
  let t = e.length * 0.75, r = e.length, n, a = 0, i, o, s, l;
7161
7556
  e[e.length - 1] === "=" && (t--, e[e.length - 2] === "=" && t--);
7162
7557
  const c = new ArrayBuffer(t), f = new Uint8Array(c);
7163
7558
  for (n = 0; n < r; n += 4)
7164
7559
  i = Gt[e.charCodeAt(n)], o = Gt[e.charCodeAt(n + 1)], s = Gt[e.charCodeAt(n + 2)], l = Gt[e.charCodeAt(n + 3)], f[a++] = i << 2 | o >> 4, f[a++] = (o & 15) << 4 | s >> 2, f[a++] = (s & 3) << 6 | l & 63;
7165
7560
  return c;
7166
- }, ih = typeof ArrayBuffer == "function", Ta = (e, t) => {
7561
+ }, yh = typeof ArrayBuffer == "function", Ca = (e, t) => {
7167
7562
  if (typeof e != "string")
7168
7563
  return {
7169
7564
  type: "message",
7170
- data: Cs(e, t)
7565
+ data: ks(e, t)
7171
7566
  };
7172
7567
  const r = e.charAt(0);
7173
7568
  return r === "b" ? {
7174
7569
  type: "message",
7175
- data: oh(e.substring(1), t)
7176
- } : qr[r] ? e.length > 1 ? {
7177
- type: qr[r],
7570
+ data: vh(e.substring(1), t)
7571
+ } : Vr[r] ? e.length > 1 ? {
7572
+ type: Vr[r],
7178
7573
  data: e.substring(1)
7179
7574
  } : {
7180
- type: qr[r]
7181
- } : Wn;
7182
- }, oh = (e, t) => {
7183
- if (ih) {
7184
- const r = ah(e);
7185
- return Cs(r, t);
7575
+ type: Vr[r]
7576
+ } : Kn;
7577
+ }, vh = (e, t) => {
7578
+ if (yh) {
7579
+ const r = gh(e);
7580
+ return ks(r, t);
7186
7581
  } else
7187
7582
  return { base64: !0, data: e };
7188
- }, Cs = (e, t) => t === "blob" ? e instanceof Blob ? e : new Blob([e]) : e instanceof ArrayBuffer ? e : e.buffer, ks = "", sh = (e, t) => {
7583
+ }, ks = (e, t) => t === "blob" ? e instanceof Blob ? e : new Blob([e]) : e instanceof ArrayBuffer ? e : e.buffer, As = "", bh = (e, t) => {
7189
7584
  const r = e.length, n = new Array(r);
7190
7585
  let a = 0;
7191
7586
  e.forEach((i, o) => {
7192
- Ra(i, !1, (s) => {
7193
- n[o] = s, ++a === r && t(n.join(ks));
7587
+ xa(i, !1, (s) => {
7588
+ n[o] = s, ++a === r && t(n.join(As));
7194
7589
  });
7195
7590
  });
7196
- }, lh = (e, t) => {
7197
- const r = e.split(ks), n = [];
7591
+ }, wh = (e, t) => {
7592
+ const r = e.split(As), n = [];
7198
7593
  for (let a = 0; a < r.length; a++) {
7199
- const i = Ta(r[a], t);
7594
+ const i = Ca(r[a], t);
7200
7595
  if (n.push(i), i.type === "error")
7201
7596
  break;
7202
7597
  }
7203
7598
  return n;
7204
7599
  };
7205
- function ch() {
7600
+ function _h() {
7206
7601
  return new TransformStream({
7207
7602
  transform(e, t) {
7208
- nh(e, (r) => {
7603
+ mh(e, (r) => {
7209
7604
  const n = r.length;
7210
7605
  let a;
7211
7606
  if (n < 126)
@@ -7224,11 +7619,11 @@ function ch() {
7224
7619
  }
7225
7620
  });
7226
7621
  }
7227
- let In;
7228
- function Mr(e) {
7622
+ let Ln;
7623
+ function Ir(e) {
7229
7624
  return e.reduce((t, r) => t + r.length, 0);
7230
7625
  }
7231
- function Ir(e, t) {
7626
+ function Lr(e, t) {
7232
7627
  if (e[0].length === t)
7233
7628
  return e.shift();
7234
7629
  const r = new Uint8Array(t);
@@ -7237,51 +7632,51 @@ function Ir(e, t) {
7237
7632
  r[a] = e[0][n++], n === e[0].length && (e.shift(), n = 0);
7238
7633
  return e.length && n < e[0].length && (e[0] = e[0].slice(n)), r;
7239
7634
  }
7240
- function uh(e, t) {
7241
- In || (In = new TextDecoder());
7635
+ function Eh(e, t) {
7636
+ Ln || (Ln = new TextDecoder());
7242
7637
  const r = [];
7243
7638
  let n = 0, a = -1, i = !1;
7244
7639
  return new TransformStream({
7245
7640
  transform(o, s) {
7246
7641
  for (r.push(o); ; ) {
7247
7642
  if (n === 0) {
7248
- if (Mr(r) < 1)
7643
+ if (Ir(r) < 1)
7249
7644
  break;
7250
- const l = Ir(r, 1);
7645
+ const l = Lr(r, 1);
7251
7646
  i = (l[0] & 128) === 128, a = l[0] & 127, a < 126 ? n = 3 : a === 126 ? n = 1 : n = 2;
7252
7647
  } else if (n === 1) {
7253
- if (Mr(r) < 2)
7648
+ if (Ir(r) < 2)
7254
7649
  break;
7255
- const l = Ir(r, 2);
7650
+ const l = Lr(r, 2);
7256
7651
  a = new DataView(l.buffer, l.byteOffset, l.length).getUint16(0), n = 3;
7257
7652
  } else if (n === 2) {
7258
- if (Mr(r) < 8)
7653
+ if (Ir(r) < 8)
7259
7654
  break;
7260
- const l = Ir(r, 8), c = new DataView(l.buffer, l.byteOffset, l.length), f = c.getUint32(0);
7655
+ const l = Lr(r, 8), c = new DataView(l.buffer, l.byteOffset, l.length), f = c.getUint32(0);
7261
7656
  if (f > Math.pow(2, 21) - 1) {
7262
- s.enqueue(Wn);
7657
+ s.enqueue(Kn);
7263
7658
  break;
7264
7659
  }
7265
7660
  a = f * Math.pow(2, 32) + c.getUint32(4), n = 3;
7266
7661
  } else {
7267
- if (Mr(r) < a)
7662
+ if (Ir(r) < a)
7268
7663
  break;
7269
- const l = Ir(r, a);
7270
- s.enqueue(Ta(i ? l : In.decode(l), t)), n = 0;
7664
+ const l = Lr(r, a);
7665
+ s.enqueue(Ca(i ? l : Ln.decode(l), t)), n = 0;
7271
7666
  }
7272
7667
  if (a === 0 || a > e) {
7273
- s.enqueue(Wn);
7668
+ s.enqueue(Kn);
7274
7669
  break;
7275
7670
  }
7276
7671
  }
7277
7672
  }
7278
7673
  });
7279
7674
  }
7280
- const As = 4;
7675
+ const Ps = 4;
7281
7676
  function de(e) {
7282
- if (e) return dh(e);
7677
+ if (e) return Sh(e);
7283
7678
  }
7284
- function dh(e) {
7679
+ function Sh(e) {
7285
7680
  for (var t in de.prototype)
7286
7681
  e[t] = de.prototype[t];
7287
7682
  return e;
@@ -7327,34 +7722,34 @@ de.prototype.listeners = function(e) {
7327
7722
  de.prototype.hasListeners = function(e) {
7328
7723
  return !!this.listeners(e).length;
7329
7724
  };
7330
- const dn = typeof Promise == "function" && typeof Promise.resolve == "function" ? (t) => Promise.resolve().then(t) : (t, r) => r(t, 0), Me = typeof self < "u" ? self : typeof window < "u" ? window : Function("return this")(), fh = "arraybuffer";
7331
- function Ps(e, ...t) {
7725
+ const fn = typeof Promise == "function" && typeof Promise.resolve == "function" ? (t) => Promise.resolve().then(t) : (t, r) => r(t, 0), Me = typeof self < "u" ? self : typeof window < "u" ? window : Function("return this")(), Rh = "arraybuffer";
7726
+ function Ms(e, ...t) {
7332
7727
  return t.reduce((r, n) => (e.hasOwnProperty(n) && (r[n] = e[n]), r), {});
7333
7728
  }
7334
- const hh = Me.setTimeout, ph = Me.clearTimeout;
7335
- function fn(e, t) {
7336
- t.useNativeTimers ? (e.setTimeoutFn = hh.bind(Me), e.clearTimeoutFn = ph.bind(Me)) : (e.setTimeoutFn = Me.setTimeout.bind(Me), e.clearTimeoutFn = Me.clearTimeout.bind(Me));
7729
+ const Th = Me.setTimeout, xh = Me.clearTimeout;
7730
+ function hn(e, t) {
7731
+ t.useNativeTimers ? (e.setTimeoutFn = Th.bind(Me), e.clearTimeoutFn = xh.bind(Me)) : (e.setTimeoutFn = Me.setTimeout.bind(Me), e.clearTimeoutFn = Me.clearTimeout.bind(Me));
7337
7732
  }
7338
- const mh = 1.33;
7339
- function gh(e) {
7340
- return typeof e == "string" ? yh(e) : Math.ceil((e.byteLength || e.size) * mh);
7733
+ const Ch = 1.33;
7734
+ function kh(e) {
7735
+ return typeof e == "string" ? Ah(e) : Math.ceil((e.byteLength || e.size) * Ch);
7341
7736
  }
7342
- function yh(e) {
7737
+ function Ah(e) {
7343
7738
  let t = 0, r = 0;
7344
7739
  for (let n = 0, a = e.length; n < a; n++)
7345
7740
  t = e.charCodeAt(n), t < 128 ? r += 1 : t < 2048 ? r += 2 : t < 55296 || t >= 57344 ? r += 3 : (n++, r += 4);
7346
7741
  return r;
7347
7742
  }
7348
- function Ms() {
7743
+ function Is() {
7349
7744
  return Date.now().toString(36).substring(3) + Math.random().toString(36).substring(2, 5);
7350
7745
  }
7351
- function vh(e) {
7746
+ function Ph(e) {
7352
7747
  let t = "";
7353
7748
  for (let r in e)
7354
7749
  e.hasOwnProperty(r) && (t.length && (t += "&"), t += encodeURIComponent(r) + "=" + encodeURIComponent(e[r]));
7355
7750
  return t;
7356
7751
  }
7357
- function bh(e) {
7752
+ function Mh(e) {
7358
7753
  let t = {}, r = e.split("&");
7359
7754
  for (let n = 0, a = r.length; n < a; n++) {
7360
7755
  let i = r[n].split("=");
@@ -7362,12 +7757,12 @@ function bh(e) {
7362
7757
  }
7363
7758
  return t;
7364
7759
  }
7365
- class wh extends Error {
7760
+ class Ih extends Error {
7366
7761
  constructor(t, r, n) {
7367
7762
  super(t), this.description = r, this.context = n, this.type = "TransportError";
7368
7763
  }
7369
7764
  }
7370
- class xa extends de {
7765
+ class ka extends de {
7371
7766
  /**
7372
7767
  * Transport abstract constructor.
7373
7768
  *
@@ -7375,7 +7770,7 @@ class xa extends de {
7375
7770
  * @protected
7376
7771
  */
7377
7772
  constructor(t) {
7378
- super(), this.writable = !1, fn(this, t), this.opts = t, this.query = t.query, this.socket = t.socket, this.supportsBinary = !t.forceBase64;
7773
+ super(), this.writable = !1, hn(this, t), this.opts = t, this.query = t.query, this.socket = t.socket, this.supportsBinary = !t.forceBase64;
7379
7774
  }
7380
7775
  /**
7381
7776
  * Emits an error.
@@ -7387,7 +7782,7 @@ class xa extends de {
7387
7782
  * @protected
7388
7783
  */
7389
7784
  onError(t, r, n) {
7390
- return super.emitReserved("error", new wh(t, r, n)), this;
7785
+ return super.emitReserved("error", new Ih(t, r, n)), this;
7391
7786
  }
7392
7787
  /**
7393
7788
  * Opens the transport.
@@ -7424,7 +7819,7 @@ class xa extends de {
7424
7819
  * @protected
7425
7820
  */
7426
7821
  onData(t) {
7427
- const r = Ta(t, this.socket.binaryType);
7822
+ const r = Ca(t, this.socket.binaryType);
7428
7823
  this.onPacket(r);
7429
7824
  }
7430
7825
  /**
@@ -7461,11 +7856,11 @@ class xa extends de {
7461
7856
  return this.opts.port && (this.opts.secure && +(this.opts.port !== 443) || !this.opts.secure && Number(this.opts.port) !== 80) ? ":" + this.opts.port : "";
7462
7857
  }
7463
7858
  _query(t) {
7464
- const r = vh(t);
7859
+ const r = Ph(t);
7465
7860
  return r.length ? "?" + r : "";
7466
7861
  }
7467
7862
  }
7468
- class _h extends xa {
7863
+ class Lh extends ka {
7469
7864
  constructor() {
7470
7865
  super(...arguments), this._polling = !1;
7471
7866
  }
@@ -7521,7 +7916,7 @@ class _h extends xa {
7521
7916
  return this.onClose({ description: "transport closed by the server" }), !1;
7522
7917
  this.onPacket(n);
7523
7918
  };
7524
- lh(t, this.socket.binaryType).forEach(r), this.readyState !== "closed" && (this._polling = !1, this.emitReserved("pollComplete"), this.readyState === "open" && this._poll());
7919
+ wh(t, this.socket.binaryType).forEach(r), this.readyState !== "closed" && (this._polling = !1, this.emitReserved("pollComplete"), this.readyState === "open" && this._poll());
7525
7920
  }
7526
7921
  /**
7527
7922
  * For polling, send a close packet.
@@ -7541,7 +7936,7 @@ class _h extends xa {
7541
7936
  * @protected
7542
7937
  */
7543
7938
  write(t) {
7544
- this.writable = !1, sh(t, (r) => {
7939
+ this.writable = !1, bh(t, (r) => {
7545
7940
  this.doWrite(r, () => {
7546
7941
  this.writable = !0, this.emitReserved("drain");
7547
7942
  });
@@ -7554,18 +7949,18 @@ class _h extends xa {
7554
7949
  */
7555
7950
  uri() {
7556
7951
  const t = this.opts.secure ? "https" : "http", r = this.query || {};
7557
- return this.opts.timestampRequests !== !1 && (r[this.opts.timestampParam] = Ms()), !this.supportsBinary && !r.sid && (r.b64 = 1), this.createUri(t, r);
7952
+ return this.opts.timestampRequests !== !1 && (r[this.opts.timestampParam] = Is()), !this.supportsBinary && !r.sid && (r.b64 = 1), this.createUri(t, r);
7558
7953
  }
7559
7954
  }
7560
- let Is = !1;
7955
+ let Ls = !1;
7561
7956
  try {
7562
- Is = typeof XMLHttpRequest < "u" && "withCredentials" in new XMLHttpRequest();
7957
+ Ls = typeof XMLHttpRequest < "u" && "withCredentials" in new XMLHttpRequest();
7563
7958
  } catch {
7564
7959
  }
7565
- const Eh = Is;
7566
- function Sh() {
7960
+ const Oh = Ls;
7961
+ function Dh() {
7567
7962
  }
7568
- class Rh extends _h {
7963
+ class Nh extends Lh {
7569
7964
  /**
7570
7965
  * XHR Polling constructor.
7571
7966
  *
@@ -7607,7 +8002,7 @@ class Rh extends _h {
7607
8002
  }), this.pollXhr = t;
7608
8003
  }
7609
8004
  }
7610
- let At = class Vr extends de {
8005
+ let At = class Wr extends de {
7611
8006
  /**
7612
8007
  * Request constructor
7613
8008
  *
@@ -7615,7 +8010,7 @@ let At = class Vr extends de {
7615
8010
  * @package
7616
8011
  */
7617
8012
  constructor(t, r, n) {
7618
- super(), this.createRequest = t, fn(this, n), this._opts = n, this._method = n.method || "GET", this._uri = r, this._data = n.data !== void 0 ? n.data : null, this._create();
8013
+ super(), this.createRequest = t, hn(this, n), this._opts = n, this._method = n.method || "GET", this._uri = r, this._data = n.data !== void 0 ? n.data : null, this._create();
7619
8014
  }
7620
8015
  /**
7621
8016
  * Creates the XHR object and sends the request.
@@ -7624,7 +8019,7 @@ let At = class Vr extends de {
7624
8019
  */
7625
8020
  _create() {
7626
8021
  var t;
7627
- const r = Ps(this._opts, "agent", "pfx", "key", "passphrase", "cert", "ca", "ciphers", "rejectUnauthorized", "autoUnref");
8022
+ const r = Ms(this._opts, "agent", "pfx", "key", "passphrase", "cert", "ca", "ciphers", "rejectUnauthorized", "autoUnref");
7628
8023
  r.xdomain = !!this._opts.xd;
7629
8024
  const n = this._xhr = this.createRequest(r);
7630
8025
  try {
@@ -7661,7 +8056,7 @@ let At = class Vr extends de {
7661
8056
  }, 0);
7662
8057
  return;
7663
8058
  }
7664
- typeof document < "u" && (this._index = Vr.requestsCount++, Vr.requests[this._index] = this);
8059
+ typeof document < "u" && (this._index = Wr.requestsCount++, Wr.requests[this._index] = this);
7665
8060
  }
7666
8061
  /**
7667
8062
  * Called upon error.
@@ -7678,12 +8073,12 @@ let At = class Vr extends de {
7678
8073
  */
7679
8074
  _cleanup(t) {
7680
8075
  if (!(typeof this._xhr > "u" || this._xhr === null)) {
7681
- if (this._xhr.onreadystatechange = Sh, t)
8076
+ if (this._xhr.onreadystatechange = Dh, t)
7682
8077
  try {
7683
8078
  this._xhr.abort();
7684
8079
  } catch {
7685
8080
  }
7686
- typeof document < "u" && delete Vr.requests[this._index], this._xhr = null;
8081
+ typeof document < "u" && delete Wr.requests[this._index], this._xhr = null;
7687
8082
  }
7688
8083
  }
7689
8084
  /**
@@ -7708,36 +8103,36 @@ At.requestsCount = 0;
7708
8103
  At.requests = {};
7709
8104
  if (typeof document < "u") {
7710
8105
  if (typeof attachEvent == "function")
7711
- attachEvent("onunload", Gi);
8106
+ attachEvent("onunload", Qi);
7712
8107
  else if (typeof addEventListener == "function") {
7713
8108
  const e = "onpagehide" in Me ? "pagehide" : "unload";
7714
- addEventListener(e, Gi, !1);
8109
+ addEventListener(e, Qi, !1);
7715
8110
  }
7716
8111
  }
7717
- function Gi() {
8112
+ function Qi() {
7718
8113
  for (let e in At.requests)
7719
8114
  At.requests.hasOwnProperty(e) && At.requests[e].abort();
7720
8115
  }
7721
- const Th = (function() {
7722
- const e = Ls({
8116
+ const $h = (function() {
8117
+ const e = Os({
7723
8118
  xdomain: !1
7724
8119
  });
7725
8120
  return e && e.responseType !== null;
7726
8121
  })();
7727
- class xh extends Rh {
8122
+ class Fh extends Nh {
7728
8123
  constructor(t) {
7729
8124
  super(t);
7730
8125
  const r = t && t.forceBase64;
7731
- this.supportsBinary = Th && !r;
8126
+ this.supportsBinary = $h && !r;
7732
8127
  }
7733
8128
  request(t = {}) {
7734
- return Object.assign(t, { xd: this.xd }, this.opts), new At(Ls, this.uri(), t);
8129
+ return Object.assign(t, { xd: this.xd }, this.opts), new At(Os, this.uri(), t);
7735
8130
  }
7736
8131
  }
7737
- function Ls(e) {
8132
+ function Os(e) {
7738
8133
  const t = e.xdomain;
7739
8134
  try {
7740
- if (typeof XMLHttpRequest < "u" && (!t || Eh))
8135
+ if (typeof XMLHttpRequest < "u" && (!t || Oh))
7741
8136
  return new XMLHttpRequest();
7742
8137
  } catch {
7743
8138
  }
@@ -7747,13 +8142,13 @@ function Ls(e) {
7747
8142
  } catch {
7748
8143
  }
7749
8144
  }
7750
- const Os = typeof navigator < "u" && typeof navigator.product == "string" && navigator.product.toLowerCase() === "reactnative";
7751
- class Ch extends xa {
8145
+ const Ds = typeof navigator < "u" && typeof navigator.product == "string" && navigator.product.toLowerCase() === "reactnative";
8146
+ class Uh extends ka {
7752
8147
  get name() {
7753
8148
  return "websocket";
7754
8149
  }
7755
8150
  doOpen() {
7756
- const t = this.uri(), r = this.opts.protocols, n = Os ? {} : Ps(this.opts, "agent", "perMessageDeflate", "pfx", "key", "passphrase", "cert", "ca", "ciphers", "rejectUnauthorized", "localAddress", "protocolVersion", "origin", "maxPayload", "family", "checkServerIdentity");
8151
+ const t = this.uri(), r = this.opts.protocols, n = Ds ? {} : Ms(this.opts, "agent", "perMessageDeflate", "pfx", "key", "passphrase", "cert", "ca", "ciphers", "rejectUnauthorized", "localAddress", "protocolVersion", "origin", "maxPayload", "family", "checkServerIdentity");
7757
8152
  this.opts.extraHeaders && (n.headers = this.opts.extraHeaders);
7758
8153
  try {
7759
8154
  this.ws = this.createSocket(t, r, n);
@@ -7779,12 +8174,12 @@ class Ch extends xa {
7779
8174
  this.writable = !1;
7780
8175
  for (let r = 0; r < t.length; r++) {
7781
8176
  const n = t[r], a = r === t.length - 1;
7782
- Ra(n, this.supportsBinary, (i) => {
8177
+ xa(n, this.supportsBinary, (i) => {
7783
8178
  try {
7784
8179
  this.doWrite(n, i);
7785
8180
  } catch {
7786
8181
  }
7787
- a && dn(() => {
8182
+ a && fn(() => {
7788
8183
  this.writable = !0, this.emitReserved("drain");
7789
8184
  }, this.setTimeoutFn);
7790
8185
  });
@@ -7801,19 +8196,19 @@ class Ch extends xa {
7801
8196
  */
7802
8197
  uri() {
7803
8198
  const t = this.opts.secure ? "wss" : "ws", r = this.query || {};
7804
- return this.opts.timestampRequests && (r[this.opts.timestampParam] = Ms()), this.supportsBinary || (r.b64 = 1), this.createUri(t, r);
8199
+ return this.opts.timestampRequests && (r[this.opts.timestampParam] = Is()), this.supportsBinary || (r.b64 = 1), this.createUri(t, r);
7805
8200
  }
7806
8201
  }
7807
- const Ln = Me.WebSocket || Me.MozWebSocket;
7808
- class kh extends Ch {
8202
+ const On = Me.WebSocket || Me.MozWebSocket;
8203
+ class Bh extends Uh {
7809
8204
  createSocket(t, r, n) {
7810
- return Os ? new Ln(t, r, n) : r ? new Ln(t, r) : new Ln(t);
8205
+ return Ds ? new On(t, r, n) : r ? new On(t, r) : new On(t);
7811
8206
  }
7812
8207
  doWrite(t, r) {
7813
8208
  this.ws.send(r);
7814
8209
  }
7815
8210
  }
7816
- class Ah extends xa {
8211
+ class jh extends ka {
7817
8212
  get name() {
7818
8213
  return "webtransport";
7819
8214
  }
@@ -7829,7 +8224,7 @@ class Ah extends xa {
7829
8224
  this.onError("webtransport error", t);
7830
8225
  }), this._transport.ready.then(() => {
7831
8226
  this._transport.createBidirectionalStream().then((t) => {
7832
- const r = uh(Number.MAX_SAFE_INTEGER, this.socket.binaryType), n = t.readable.pipeThrough(r).getReader(), a = ch();
8227
+ const r = Eh(Number.MAX_SAFE_INTEGER, this.socket.binaryType), n = t.readable.pipeThrough(r).getReader(), a = _h();
7833
8228
  a.readable.pipeTo(t.writable), this._writer = a.writable.getWriter();
7834
8229
  const i = () => {
7835
8230
  n.read().then(({ done: s, value: l }) => {
@@ -7848,7 +8243,7 @@ class Ah extends xa {
7848
8243
  for (let r = 0; r < t.length; r++) {
7849
8244
  const n = t[r], a = r === t.length - 1;
7850
8245
  this._writer.write(n).then(() => {
7851
- a && dn(() => {
8246
+ a && fn(() => {
7852
8247
  this.writable = !0, this.emitReserved("drain");
7853
8248
  }, this.setTimeoutFn);
7854
8249
  });
@@ -7859,11 +8254,11 @@ class Ah extends xa {
7859
8254
  (t = this._transport) === null || t === void 0 || t.close();
7860
8255
  }
7861
8256
  }
7862
- const Ph = {
7863
- websocket: kh,
7864
- webtransport: Ah,
7865
- polling: xh
7866
- }, Mh = /^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/, Ih = [
8257
+ const zh = {
8258
+ websocket: Bh,
8259
+ webtransport: jh,
8260
+ polling: Fh
8261
+ }, Hh = /^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/, qh = [
7867
8262
  "source",
7868
8263
  "protocol",
7869
8264
  "authority",
@@ -7879,29 +8274,29 @@ const Ph = {
7879
8274
  "query",
7880
8275
  "anchor"
7881
8276
  ];
7882
- function Gn(e) {
8277
+ function Yn(e) {
7883
8278
  if (e.length > 8e3)
7884
8279
  throw "URI too long";
7885
8280
  const t = e, r = e.indexOf("["), n = e.indexOf("]");
7886
8281
  r != -1 && n != -1 && (e = e.substring(0, r) + e.substring(r, n).replace(/:/g, ";") + e.substring(n, e.length));
7887
- let a = Mh.exec(e || ""), i = {}, o = 14;
8282
+ let a = Hh.exec(e || ""), i = {}, o = 14;
7888
8283
  for (; o--; )
7889
- i[Ih[o]] = a[o] || "";
7890
- return r != -1 && n != -1 && (i.source = t, i.host = i.host.substring(1, i.host.length - 1).replace(/;/g, ":"), i.authority = i.authority.replace("[", "").replace("]", "").replace(/;/g, ":"), i.ipv6uri = !0), i.pathNames = Lh(i, i.path), i.queryKey = Oh(i, i.query), i;
8284
+ i[qh[o]] = a[o] || "";
8285
+ return r != -1 && n != -1 && (i.source = t, i.host = i.host.substring(1, i.host.length - 1).replace(/;/g, ":"), i.authority = i.authority.replace("[", "").replace("]", "").replace(/;/g, ":"), i.ipv6uri = !0), i.pathNames = Vh(i, i.path), i.queryKey = Wh(i, i.query), i;
7891
8286
  }
7892
- function Lh(e, t) {
8287
+ function Vh(e, t) {
7893
8288
  const r = /\/{2,9}/g, n = t.replace(r, "/").split("/");
7894
8289
  return (t.slice(0, 1) == "/" || t.length === 0) && n.splice(0, 1), t.slice(-1) == "/" && n.splice(n.length - 1, 1), n;
7895
8290
  }
7896
- function Oh(e, t) {
8291
+ function Wh(e, t) {
7897
8292
  const r = {};
7898
8293
  return t.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function(n, a, i) {
7899
8294
  a && (r[a] = i);
7900
8295
  }), r;
7901
8296
  }
7902
- const Kn = typeof addEventListener == "function" && typeof removeEventListener == "function", Wr = [];
7903
- Kn && addEventListener("offline", () => {
7904
- Wr.forEach((e) => e());
8297
+ const Xn = typeof addEventListener == "function" && typeof removeEventListener == "function", Gr = [];
8298
+ Xn && addEventListener("offline", () => {
8299
+ Gr.forEach((e) => e());
7905
8300
  }, !1);
7906
8301
  class ct extends de {
7907
8302
  /**
@@ -7911,11 +8306,11 @@ class ct extends de {
7911
8306
  * @param {Object} opts - options
7912
8307
  */
7913
8308
  constructor(t, r) {
7914
- if (super(), this.binaryType = fh, this.writeBuffer = [], this._prevBufferLen = 0, this._pingInterval = -1, this._pingTimeout = -1, this._maxPayload = -1, this._pingTimeoutTime = 1 / 0, t && typeof t == "object" && (r = t, t = null), t) {
7915
- const n = Gn(t);
8309
+ if (super(), this.binaryType = Rh, this.writeBuffer = [], this._prevBufferLen = 0, this._pingInterval = -1, this._pingTimeout = -1, this._maxPayload = -1, this._pingTimeoutTime = 1 / 0, t && typeof t == "object" && (r = t, t = null), t) {
8310
+ const n = Yn(t);
7916
8311
  r.hostname = n.host, r.secure = n.protocol === "https" || n.protocol === "wss", r.port = n.port, n.query && (r.query = n.query);
7917
- } else r.host && (r.hostname = Gn(r.host).host);
7918
- fn(this, r), this.secure = r.secure != null ? r.secure : typeof location < "u" && location.protocol === "https:", r.hostname && !r.port && (r.port = this.secure ? "443" : "80"), this.hostname = r.hostname || (typeof location < "u" ? location.hostname : "localhost"), this.port = r.port || (typeof location < "u" && location.port ? location.port : this.secure ? "443" : "80"), this.transports = [], this._transportsByName = {}, r.transports.forEach((n) => {
8312
+ } else r.host && (r.hostname = Yn(r.host).host);
8313
+ hn(this, r), this.secure = r.secure != null ? r.secure : typeof location < "u" && location.protocol === "https:", r.hostname && !r.port && (r.port = this.secure ? "443" : "80"), this.hostname = r.hostname || (typeof location < "u" ? location.hostname : "localhost"), this.port = r.port || (typeof location < "u" && location.port ? location.port : this.secure ? "443" : "80"), this.transports = [], this._transportsByName = {}, r.transports.forEach((n) => {
7919
8314
  const a = n.prototype.name;
7920
8315
  this.transports.push(a), this._transportsByName[a] = n;
7921
8316
  }), this.opts = Object.assign({
@@ -7932,13 +8327,13 @@ class ct extends de {
7932
8327
  },
7933
8328
  transportOptions: {},
7934
8329
  closeOnBeforeunload: !1
7935
- }, r), this.opts.path = this.opts.path.replace(/\/$/, "") + (this.opts.addTrailingSlash ? "/" : ""), typeof this.opts.query == "string" && (this.opts.query = bh(this.opts.query)), Kn && (this.opts.closeOnBeforeunload && (this._beforeunloadEventListener = () => {
8330
+ }, r), this.opts.path = this.opts.path.replace(/\/$/, "") + (this.opts.addTrailingSlash ? "/" : ""), typeof this.opts.query == "string" && (this.opts.query = Mh(this.opts.query)), Xn && (this.opts.closeOnBeforeunload && (this._beforeunloadEventListener = () => {
7936
8331
  this.transport && (this.transport.removeAllListeners(), this.transport.close());
7937
8332
  }, addEventListener("beforeunload", this._beforeunloadEventListener, !1)), this.hostname !== "localhost" && (this._offlineEventListener = () => {
7938
8333
  this._onClose("transport close", {
7939
8334
  description: "network connection lost"
7940
8335
  });
7941
- }, Wr.push(this._offlineEventListener))), this.opts.withCredentials && (this._cookieJar = void 0), this._open();
8336
+ }, Gr.push(this._offlineEventListener))), this.opts.withCredentials && (this._cookieJar = void 0), this._open();
7942
8337
  }
7943
8338
  /**
7944
8339
  * Creates transport of the given type.
@@ -7949,7 +8344,7 @@ class ct extends de {
7949
8344
  */
7950
8345
  createTransport(t) {
7951
8346
  const r = Object.assign({}, this.opts.query);
7952
- r.EIO = As, r.transport = t, this.id && (r.sid = this.id);
8347
+ r.EIO = Ps, r.transport = t, this.id && (r.sid = this.id);
7953
8348
  const n = Object.assign({}, this.opts, {
7954
8349
  query: r,
7955
8350
  socket: this,
@@ -8067,7 +8462,7 @@ class ct extends de {
8067
8462
  let r = 1;
8068
8463
  for (let n = 0; n < this.writeBuffer.length; n++) {
8069
8464
  const a = this.writeBuffer[n].data;
8070
- if (a && (r += gh(a)), n > 0 && r > this._maxPayload)
8465
+ if (a && (r += kh(a)), n > 0 && r > this._maxPayload)
8071
8466
  return this.writeBuffer.slice(0, n);
8072
8467
  r += 2;
8073
8468
  }
@@ -8087,7 +8482,7 @@ class ct extends de {
8087
8482
  if (!this._pingTimeoutTime)
8088
8483
  return !0;
8089
8484
  const t = Date.now() > this._pingTimeoutTime;
8090
- return t && (this._pingTimeoutTime = 0, dn(() => {
8485
+ return t && (this._pingTimeoutTime = 0, fn(() => {
8091
8486
  this._onClose("ping timeout");
8092
8487
  }, this.setTimeoutFn)), t;
8093
8488
  }
@@ -8165,16 +8560,16 @@ class ct extends de {
8165
8560
  */
8166
8561
  _onClose(t, r) {
8167
8562
  if (this.readyState === "opening" || this.readyState === "open" || this.readyState === "closing") {
8168
- if (this.clearTimeoutFn(this._pingTimeoutTimer), this.transport.removeAllListeners("close"), this.transport.close(), this.transport.removeAllListeners(), Kn && (this._beforeunloadEventListener && removeEventListener("beforeunload", this._beforeunloadEventListener, !1), this._offlineEventListener)) {
8169
- const n = Wr.indexOf(this._offlineEventListener);
8170
- n !== -1 && Wr.splice(n, 1);
8563
+ if (this.clearTimeoutFn(this._pingTimeoutTimer), this.transport.removeAllListeners("close"), this.transport.close(), this.transport.removeAllListeners(), Xn && (this._beforeunloadEventListener && removeEventListener("beforeunload", this._beforeunloadEventListener, !1), this._offlineEventListener)) {
8564
+ const n = Gr.indexOf(this._offlineEventListener);
8565
+ n !== -1 && Gr.splice(n, 1);
8171
8566
  }
8172
8567
  this.readyState = "closed", this.id = null, this.emitReserved("close", t, r), this.writeBuffer = [], this._prevBufferLen = 0;
8173
8568
  }
8174
8569
  }
8175
8570
  }
8176
- ct.protocol = As;
8177
- class Dh extends ct {
8571
+ ct.protocol = Ps;
8572
+ class Gh extends ct {
8178
8573
  constructor() {
8179
8574
  super(...arguments), this._upgrades = [];
8180
8575
  }
@@ -8246,67 +8641,67 @@ class Dh extends ct {
8246
8641
  return r;
8247
8642
  }
8248
8643
  }
8249
- let Nh = class extends Dh {
8644
+ let Kh = class extends Gh {
8250
8645
  constructor(t, r = {}) {
8251
8646
  const n = typeof t == "object" ? t : r;
8252
- (!n.transports || n.transports && typeof n.transports[0] == "string") && (n.transports = (n.transports || ["polling", "websocket", "webtransport"]).map((a) => Ph[a]).filter((a) => !!a)), super(t, n);
8647
+ (!n.transports || n.transports && typeof n.transports[0] == "string") && (n.transports = (n.transports || ["polling", "websocket", "webtransport"]).map((a) => zh[a]).filter((a) => !!a)), super(t, n);
8253
8648
  }
8254
8649
  };
8255
- function $h(e, t = "", r) {
8650
+ function Yh(e, t = "", r) {
8256
8651
  let n = e;
8257
- r = r || typeof location < "u" && location, e == null && (e = r.protocol + "//" + r.host), typeof e == "string" && (e.charAt(0) === "/" && (e.charAt(1) === "/" ? e = r.protocol + e : e = r.host + e), /^(https?|wss?):\/\//.test(e) || (typeof r < "u" ? e = r.protocol + "//" + e : e = "https://" + e), n = Gn(e)), n.port || (/^(http|ws)$/.test(n.protocol) ? n.port = "80" : /^(http|ws)s$/.test(n.protocol) && (n.port = "443")), n.path = n.path || "/";
8652
+ r = r || typeof location < "u" && location, e == null && (e = r.protocol + "//" + r.host), typeof e == "string" && (e.charAt(0) === "/" && (e.charAt(1) === "/" ? e = r.protocol + e : e = r.host + e), /^(https?|wss?):\/\//.test(e) || (typeof r < "u" ? e = r.protocol + "//" + e : e = "https://" + e), n = Yn(e)), n.port || (/^(http|ws)$/.test(n.protocol) ? n.port = "80" : /^(http|ws)s$/.test(n.protocol) && (n.port = "443")), n.path = n.path || "/";
8258
8653
  const i = n.host.indexOf(":") !== -1 ? "[" + n.host + "]" : n.host;
8259
8654
  return n.id = n.protocol + "://" + i + ":" + n.port + t, n.href = n.protocol + "://" + i + (r && r.port === n.port ? "" : ":" + n.port), n;
8260
8655
  }
8261
- const Fh = typeof ArrayBuffer == "function", Uh = (e) => typeof ArrayBuffer.isView == "function" ? ArrayBuffer.isView(e) : e.buffer instanceof ArrayBuffer, Ds = Object.prototype.toString, Bh = typeof Blob == "function" || typeof Blob < "u" && Ds.call(Blob) === "[object BlobConstructor]", jh = typeof File == "function" || typeof File < "u" && Ds.call(File) === "[object FileConstructor]";
8262
- function Ca(e) {
8263
- return Fh && (e instanceof ArrayBuffer || Uh(e)) || Bh && e instanceof Blob || jh && e instanceof File;
8656
+ const Xh = typeof ArrayBuffer == "function", Jh = (e) => typeof ArrayBuffer.isView == "function" ? ArrayBuffer.isView(e) : e.buffer instanceof ArrayBuffer, Ns = Object.prototype.toString, Qh = typeof Blob == "function" || typeof Blob < "u" && Ns.call(Blob) === "[object BlobConstructor]", Zh = typeof File == "function" || typeof File < "u" && Ns.call(File) === "[object FileConstructor]";
8657
+ function Aa(e) {
8658
+ return Xh && (e instanceof ArrayBuffer || Jh(e)) || Qh && e instanceof Blob || Zh && e instanceof File;
8264
8659
  }
8265
- function Gr(e, t) {
8660
+ function Kr(e, t) {
8266
8661
  if (!e || typeof e != "object")
8267
8662
  return !1;
8268
8663
  if (Array.isArray(e)) {
8269
8664
  for (let r = 0, n = e.length; r < n; r++)
8270
- if (Gr(e[r]))
8665
+ if (Kr(e[r]))
8271
8666
  return !0;
8272
8667
  return !1;
8273
8668
  }
8274
- if (Ca(e))
8669
+ if (Aa(e))
8275
8670
  return !0;
8276
8671
  if (e.toJSON && typeof e.toJSON == "function" && arguments.length === 1)
8277
- return Gr(e.toJSON(), !0);
8672
+ return Kr(e.toJSON(), !0);
8278
8673
  for (const r in e)
8279
- if (Object.prototype.hasOwnProperty.call(e, r) && Gr(e[r]))
8674
+ if (Object.prototype.hasOwnProperty.call(e, r) && Kr(e[r]))
8280
8675
  return !0;
8281
8676
  return !1;
8282
8677
  }
8283
- function zh(e) {
8678
+ function ep(e) {
8284
8679
  const t = [], r = e.data, n = e;
8285
- return n.data = Yn(r, t), n.attachments = t.length, { packet: n, buffers: t };
8680
+ return n.data = Jn(r, t), n.attachments = t.length, { packet: n, buffers: t };
8286
8681
  }
8287
- function Yn(e, t) {
8682
+ function Jn(e, t) {
8288
8683
  if (!e)
8289
8684
  return e;
8290
- if (Ca(e)) {
8685
+ if (Aa(e)) {
8291
8686
  const r = { _placeholder: !0, num: t.length };
8292
8687
  return t.push(e), r;
8293
8688
  } else if (Array.isArray(e)) {
8294
8689
  const r = new Array(e.length);
8295
8690
  for (let n = 0; n < e.length; n++)
8296
- r[n] = Yn(e[n], t);
8691
+ r[n] = Jn(e[n], t);
8297
8692
  return r;
8298
8693
  } else if (typeof e == "object" && !(e instanceof Date)) {
8299
8694
  const r = {};
8300
8695
  for (const n in e)
8301
- Object.prototype.hasOwnProperty.call(e, n) && (r[n] = Yn(e[n], t));
8696
+ Object.prototype.hasOwnProperty.call(e, n) && (r[n] = Jn(e[n], t));
8302
8697
  return r;
8303
8698
  }
8304
8699
  return e;
8305
8700
  }
8306
- function Hh(e, t) {
8307
- return e.data = Xn(e.data, t), delete e.attachments, e;
8701
+ function tp(e, t) {
8702
+ return e.data = Qn(e.data, t), delete e.attachments, e;
8308
8703
  }
8309
- function Xn(e, t) {
8704
+ function Qn(e, t) {
8310
8705
  if (!e)
8311
8706
  return e;
8312
8707
  if (e && e._placeholder === !0) {
@@ -8315,13 +8710,13 @@ function Xn(e, t) {
8315
8710
  throw new Error("illegal attachments");
8316
8711
  } else if (Array.isArray(e))
8317
8712
  for (let r = 0; r < e.length; r++)
8318
- e[r] = Xn(e[r], t);
8713
+ e[r] = Qn(e[r], t);
8319
8714
  else if (typeof e == "object")
8320
8715
  for (const r in e)
8321
- Object.prototype.hasOwnProperty.call(e, r) && (e[r] = Xn(e[r], t));
8716
+ Object.prototype.hasOwnProperty.call(e, r) && (e[r] = Qn(e[r], t));
8322
8717
  return e;
8323
8718
  }
8324
- const qh = [
8719
+ const rp = [
8325
8720
  "connect",
8326
8721
  "connect_error",
8327
8722
  "disconnect",
@@ -8329,12 +8724,12 @@ const qh = [
8329
8724
  "newListener",
8330
8725
  "removeListener"
8331
8726
  // used by the Node.js EventEmitter
8332
- ], Vh = 5;
8727
+ ], np = 5;
8333
8728
  var X;
8334
8729
  (function(e) {
8335
8730
  e[e.CONNECT = 0] = "CONNECT", e[e.DISCONNECT = 1] = "DISCONNECT", e[e.EVENT = 2] = "EVENT", e[e.ACK = 3] = "ACK", e[e.CONNECT_ERROR = 4] = "CONNECT_ERROR", e[e.BINARY_EVENT = 5] = "BINARY_EVENT", e[e.BINARY_ACK = 6] = "BINARY_ACK";
8336
8731
  })(X || (X = {}));
8337
- class Wh {
8732
+ class ap {
8338
8733
  /**
8339
8734
  * Encoder constructor
8340
8735
  *
@@ -8350,7 +8745,7 @@ class Wh {
8350
8745
  * @param {Object} obj - packet object
8351
8746
  */
8352
8747
  encode(t) {
8353
- return (t.type === X.EVENT || t.type === X.ACK) && Gr(t) ? this.encodeAsBinary({
8748
+ return (t.type === X.EVENT || t.type === X.ACK) && Kr(t) ? this.encodeAsBinary({
8354
8749
  type: t.type === X.EVENT ? X.BINARY_EVENT : X.BINARY_ACK,
8355
8750
  nsp: t.nsp,
8356
8751
  data: t.data,
@@ -8370,14 +8765,14 @@ class Wh {
8370
8765
  * a list of buffers.
8371
8766
  */
8372
8767
  encodeAsBinary(t) {
8373
- const r = zh(t), n = this.encodeAsString(r.packet), a = r.buffers;
8768
+ const r = ep(t), n = this.encodeAsString(r.packet), a = r.buffers;
8374
8769
  return a.unshift(n), a;
8375
8770
  }
8376
8771
  }
8377
- function Ki(e) {
8772
+ function Zi(e) {
8378
8773
  return Object.prototype.toString.call(e) === "[object Object]";
8379
8774
  }
8380
- class ka extends de {
8775
+ class Pa extends de {
8381
8776
  /**
8382
8777
  * Decoder constructor
8383
8778
  *
@@ -8398,8 +8793,8 @@ class ka extends de {
8398
8793
  throw new Error("got plaintext data when reconstructing a packet");
8399
8794
  r = this.decodeString(t);
8400
8795
  const n = r.type === X.BINARY_EVENT;
8401
- n || r.type === X.BINARY_ACK ? (r.type = n ? X.EVENT : X.ACK, this.reconstructor = new Gh(r), r.attachments === 0 && super.emitReserved("decoded", r)) : super.emitReserved("decoded", r);
8402
- } else if (Ca(t) || t.base64)
8796
+ n || r.type === X.BINARY_ACK ? (r.type = n ? X.EVENT : X.ACK, this.reconstructor = new ip(r), r.attachments === 0 && super.emitReserved("decoded", r)) : super.emitReserved("decoded", r);
8797
+ } else if (Aa(t) || t.base64)
8403
8798
  if (this.reconstructor)
8404
8799
  r = this.reconstructor.takeBinaryData(t), r && (this.reconstructor = null, super.emitReserved("decoded", r));
8405
8800
  else
@@ -8452,7 +8847,7 @@ class ka extends de {
8452
8847
  }
8453
8848
  if (t.charAt(++r)) {
8454
8849
  const i = this.tryParse(t.substr(r));
8455
- if (ka.isPayloadValid(n.type, i))
8850
+ if (Pa.isPayloadValid(n.type, i))
8456
8851
  n.data = i;
8457
8852
  else
8458
8853
  throw new Error("invalid payload");
@@ -8469,14 +8864,14 @@ class ka extends de {
8469
8864
  static isPayloadValid(t, r) {
8470
8865
  switch (t) {
8471
8866
  case X.CONNECT:
8472
- return Ki(r);
8867
+ return Zi(r);
8473
8868
  case X.DISCONNECT:
8474
8869
  return r === void 0;
8475
8870
  case X.CONNECT_ERROR:
8476
- return typeof r == "string" || Ki(r);
8871
+ return typeof r == "string" || Zi(r);
8477
8872
  case X.EVENT:
8478
8873
  case X.BINARY_EVENT:
8479
- return Array.isArray(r) && (typeof r[0] == "number" || typeof r[0] == "string" && qh.indexOf(r[0]) === -1);
8874
+ return Array.isArray(r) && (typeof r[0] == "number" || typeof r[0] == "string" && rp.indexOf(r[0]) === -1);
8480
8875
  case X.ACK:
8481
8876
  case X.BINARY_ACK:
8482
8877
  return Array.isArray(r);
@@ -8489,7 +8884,7 @@ class ka extends de {
8489
8884
  this.reconstructor && (this.reconstructor.finishedReconstruction(), this.reconstructor = null);
8490
8885
  }
8491
8886
  }
8492
- class Gh {
8887
+ class ip {
8493
8888
  constructor(t) {
8494
8889
  this.packet = t, this.buffers = [], this.reconPack = t;
8495
8890
  }
@@ -8503,7 +8898,7 @@ class Gh {
8503
8898
  */
8504
8899
  takeBinaryData(t) {
8505
8900
  if (this.buffers.push(t), this.buffers.length === this.reconPack.attachments) {
8506
- const r = Hh(this.reconPack, this.buffers);
8901
+ const r = tp(this.reconPack, this.buffers);
8507
8902
  return this.finishedReconstruction(), r;
8508
8903
  }
8509
8904
  return null;
@@ -8515,21 +8910,21 @@ class Gh {
8515
8910
  this.reconPack = null, this.buffers = [];
8516
8911
  }
8517
8912
  }
8518
- const Kh = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
8913
+ const op = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
8519
8914
  __proto__: null,
8520
- Decoder: ka,
8521
- Encoder: Wh,
8915
+ Decoder: Pa,
8916
+ Encoder: ap,
8522
8917
  get PacketType() {
8523
8918
  return X;
8524
8919
  },
8525
- protocol: Vh
8920
+ protocol: np
8526
8921
  }, Symbol.toStringTag, { value: "Module" }));
8527
8922
  function Oe(e, t, r) {
8528
8923
  return e.on(t, r), function() {
8529
8924
  e.off(t, r);
8530
8925
  };
8531
8926
  }
8532
- const Yh = Object.freeze({
8927
+ const sp = Object.freeze({
8533
8928
  connect: 1,
8534
8929
  connect_error: 1,
8535
8930
  disconnect: 1,
@@ -8538,7 +8933,7 @@ const Yh = Object.freeze({
8538
8933
  newListener: 1,
8539
8934
  removeListener: 1
8540
8935
  });
8541
- class Ns extends de {
8936
+ class $s extends de {
8542
8937
  /**
8543
8938
  * `Socket` constructor.
8544
8939
  */
@@ -8654,7 +9049,7 @@ class Ns extends de {
8654
9049
  */
8655
9050
  emit(t, ...r) {
8656
9051
  var n, a, i;
8657
- if (Yh.hasOwnProperty(t))
9052
+ if (sp.hasOwnProperty(t))
8658
9053
  throw new Error('"' + t.toString() + '" is a reserved event name');
8659
9054
  if (r.unshift(t), this._opts.retries && !this.flags.fromQueue && !this.flags.volatile)
8660
9055
  return this._addToQueue(r), this;
@@ -9153,15 +9548,15 @@ Dt.prototype.setMax = function(e) {
9153
9548
  Dt.prototype.setJitter = function(e) {
9154
9549
  this.jitter = e;
9155
9550
  };
9156
- class Jn extends de {
9551
+ class Zn extends de {
9157
9552
  constructor(t, r) {
9158
9553
  var n;
9159
- super(), this.nsps = {}, this.subs = [], t && typeof t == "object" && (r = t, t = void 0), r = r || {}, r.path = r.path || "/socket.io", this.opts = r, fn(this, r), this.reconnection(r.reconnection !== !1), this.reconnectionAttempts(r.reconnectionAttempts || 1 / 0), this.reconnectionDelay(r.reconnectionDelay || 1e3), this.reconnectionDelayMax(r.reconnectionDelayMax || 5e3), this.randomizationFactor((n = r.randomizationFactor) !== null && n !== void 0 ? n : 0.5), this.backoff = new Dt({
9554
+ super(), this.nsps = {}, this.subs = [], t && typeof t == "object" && (r = t, t = void 0), r = r || {}, r.path = r.path || "/socket.io", this.opts = r, hn(this, r), this.reconnection(r.reconnection !== !1), this.reconnectionAttempts(r.reconnectionAttempts || 1 / 0), this.reconnectionDelay(r.reconnectionDelay || 1e3), this.reconnectionDelayMax(r.reconnectionDelayMax || 5e3), this.randomizationFactor((n = r.randomizationFactor) !== null && n !== void 0 ? n : 0.5), this.backoff = new Dt({
9160
9555
  min: this.reconnectionDelay(),
9161
9556
  max: this.reconnectionDelayMax(),
9162
9557
  jitter: this.randomizationFactor()
9163
9558
  }), this.timeout(r.timeout == null ? 2e4 : r.timeout), this._readyState = "closed", this.uri = t;
9164
- const a = r.parser || Kh;
9559
+ const a = r.parser || op;
9165
9560
  this.encoder = new a.Encoder(), this.decoder = new a.Decoder(), this._autoConnect = r.autoConnect !== !1, this._autoConnect && this.open();
9166
9561
  }
9167
9562
  reconnection(t) {
@@ -9204,7 +9599,7 @@ class Jn extends de {
9204
9599
  open(t) {
9205
9600
  if (~this._readyState.indexOf("open"))
9206
9601
  return this;
9207
- this.engine = new Nh(this.uri, this.opts);
9602
+ this.engine = new Kh(this.uri, this.opts);
9208
9603
  const r = this.engine, n = this;
9209
9604
  this._readyState = "opening", this.skipReconnect = !1;
9210
9605
  const a = Oe(r, "open", function() {
@@ -9274,7 +9669,7 @@ class Jn extends de {
9274
9669
  * @private
9275
9670
  */
9276
9671
  ondecoded(t) {
9277
- dn(() => {
9672
+ fn(() => {
9278
9673
  this.emitReserved("packet", t);
9279
9674
  }, this.setTimeoutFn);
9280
9675
  }
@@ -9294,7 +9689,7 @@ class Jn extends de {
9294
9689
  */
9295
9690
  socket(t, r) {
9296
9691
  let n = this.nsps[t];
9297
- return n ? this._autoConnect && !n.active && n.connect() : (n = new Ns(this, t, r), this.nsps[t] = n), n;
9692
+ return n ? this._autoConnect && !n.active && n.connect() : (n = new $s(this, t, r), this.nsps[t] = n), n;
9298
9693
  }
9299
9694
  /**
9300
9695
  * Called upon a socket close.
@@ -9348,465 +9743,76 @@ class Jn extends de {
9348
9743
  * Called when:
9349
9744
  *
9350
9745
  * - the low-level engine is closed
9351
- * - the parser encountered a badly formatted packet
9352
- * - all sockets are disconnected
9353
- *
9354
- * @private
9355
- */
9356
- onclose(t, r) {
9357
- var n;
9358
- this.cleanup(), (n = this.engine) === null || n === void 0 || n.close(), this.backoff.reset(), this._readyState = "closed", this.emitReserved("close", t, r), this._reconnection && !this.skipReconnect && this.reconnect();
9359
- }
9360
- /**
9361
- * Attempt a reconnection.
9362
- *
9363
- * @private
9364
- */
9365
- reconnect() {
9366
- if (this._reconnecting || this.skipReconnect)
9367
- return this;
9368
- const t = this;
9369
- if (this.backoff.attempts >= this._reconnectionAttempts)
9370
- this.backoff.reset(), this.emitReserved("reconnect_failed"), this._reconnecting = !1;
9371
- else {
9372
- const r = this.backoff.duration();
9373
- this._reconnecting = !0;
9374
- const n = this.setTimeoutFn(() => {
9375
- t.skipReconnect || (this.emitReserved("reconnect_attempt", t.backoff.attempts), !t.skipReconnect && t.open((a) => {
9376
- a ? (t._reconnecting = !1, t.reconnect(), this.emitReserved("reconnect_error", a)) : t.onreconnect();
9377
- }));
9378
- }, r);
9379
- this.opts.autoUnref && n.unref(), this.subs.push(() => {
9380
- this.clearTimeoutFn(n);
9381
- });
9382
- }
9383
- }
9384
- /**
9385
- * Called upon successful reconnect.
9386
- *
9387
- * @private
9388
- */
9389
- onreconnect() {
9390
- const t = this.backoff.attempts;
9391
- this._reconnecting = !1, this.backoff.reset(), this.emitReserved("reconnect", t);
9392
- }
9393
- }
9394
- const Ht = {};
9395
- function Kr(e, t) {
9396
- typeof e == "object" && (t = e, e = void 0), t = t || {};
9397
- const r = $h(e, t.path || "/socket.io"), n = r.source, a = r.id, i = r.path, o = Ht[a] && i in Ht[a].nsps, s = t.forceNew || t["force new connection"] || t.multiplex === !1 || o;
9398
- let l;
9399
- return s ? l = new Jn(n, t) : (Ht[a] || (Ht[a] = new Jn(n, t)), l = Ht[a]), r.query && !t.query && (t.query = r.queryKey), l.socket(r.path, t);
9400
- }
9401
- Object.assign(Kr, {
9402
- Manager: Jn,
9403
- Socket: Ns,
9404
- io: Kr,
9405
- connect: Kr
9406
- });
9407
- var Xh = ["effect", "gradient", "font", "overlay", "message"], K = (e, t, r, n = {}) => ({ id: `${e}.${t}`, slot: e, label: r, ...n }), Ee = { hidden: !0 }, Aa = [
9408
- K("effect", "glint", "Glint"),
9409
- K("effect", "aura", "Aura"),
9410
- K("effect", "hop", "Hop"),
9411
- K("effect", "outline", "Outline"),
9412
- K("effect", "twinkle", "Twinkle", { earn: "Bronze or better in a Major" }),
9413
- K("gradient", "gild", "Gilded"),
9414
- K("gradient", "gloss", "Gloss"),
9415
- K("gradient", "split", "Split"),
9416
- K("gradient", "brushed", "Brushed"),
9417
- K("gradient", "lumen", "Lumen"),
9418
- K("font", "script", "Script"),
9419
- K("font", "surf", "Surf"),
9420
- K("font", "gothic", "Gothic"),
9421
- K("font", "runic", "Runic"),
9422
- K("font", "arcade", "Arcade"),
9423
- K("font", "caps", "Small caps", Ee),
9424
- K("font", "wide", "Wide", Ee),
9425
- K("font", "corsair", "Corsair", Ee),
9426
- K("font", "metal", "Metal", Ee),
9427
- K("font", "comic", "Comic", Ee),
9428
- K("font", "circuit", "Circuit", Ee),
9429
- K("font", "hover", "Hover", Ee),
9430
- K("font", "retro", "Retro", Ee),
9431
- K("font", "pixel", "Pixel", Ee),
9432
- K("overlay", "crown", "Crown", {
9433
- earn: "Win a Major",
9434
- art: {
9435
- file: "crown.webp",
9436
- top: -40,
9437
- width: 70,
9438
- tilt: -8,
9439
- pixel: !1,
9440
- visible: [0.027, 0.137, 0.973, 0.863]
9441
- }
9442
- }),
9443
- K("overlay", "halo", "Halo", {
9444
- art: {
9445
- file: "halo.webp",
9446
- top: -34,
9447
- width: 76,
9448
- tilt: 0,
9449
- pixel: !0,
9450
- visible: [0.033, 0.333, 0.967, 0.667]
9451
- }
9452
- }),
9453
- K("overlay", "flowers", "Flower crown", {
9454
- art: {
9455
- file: "flowers.webp",
9456
- top: -22,
9457
- width: 96,
9458
- tilt: 0,
9459
- pixel: !1,
9460
- visible: [0.027, 0.258, 0.969, 0.746]
9461
- }
9462
- }),
9463
- K("overlay", "petals", "Petals"),
9464
- K("overlay", "horns", "Horns", {
9465
- ...Ee,
9466
- art: {
9467
- file: "horns.webp",
9468
- top: -26,
9469
- width: 100,
9470
- tilt: 0,
9471
- pixel: !0,
9472
- visible: [0.033, 0.133, 0.967, 0.867]
9473
- }
9474
- }),
9475
- K("overlay", "runes", "Runes", Ee),
9476
- K("overlay", "comet", "Comet", Ee),
9477
- K("overlay", "shine", "Shine", Ee),
9478
- K("overlay", "glow", "Glow", Ee),
9479
- K("message", "type", "Typewriter"),
9480
- K("message", "decode", "Decode", { earn: "Silver or better in a Major" }),
9481
- K("message", "cascade", "Cascade"),
9482
- K("message", "words", "Word by word"),
9483
- K("message", "bubble", "Bubble", Ee),
9484
- K("message", "drift", "Drift")
9485
- ], Qn = new Map(
9486
- Aa.map((e) => [e.id, e])
9487
- );
9488
- Aa.filter(
9489
- (e) => e.earn !== void 0 && !e.hidden
9490
- );
9491
- var $s = { x: 0, y: 0, r: 0, s: 100, flip: !1, back: !1 }, qt = {
9492
- x: [-60, 60],
9493
- y: [-60, 100],
9494
- r: [-45, 45],
9495
- s: [70, 140]
9496
- };
9497
- function Zn(e, t) {
9498
- const [r, n, a, i] = e.visible, o = t.flip ? 1 - a : r, s = t.flip ? 1 - r : a, l = 50 - e.width / 2, c = e.top, f = e.width, h = l + f * 0.5, g = c + f * 0.6, y = l + f / 2, S = c + f / 2, T = e.tilt * Math.PI / 180, v = t.r * Math.PI / 180, x = t.s / 100, _ = [], A = [];
9499
- for (const [B, E] of [
9500
- [o, n],
9501
- [s, n],
9502
- [o, i],
9503
- [s, i]
9504
- ]) {
9505
- const V = l + B * f, p = c + E * f, P = y + (V - y) * Math.cos(T) - (p - S) * Math.sin(T), $ = S + (V - y) * Math.sin(T) + (p - S) * Math.cos(T), j = (P - h) * x, U = ($ - g) * x;
9506
- _.push(h + t.x + j * Math.cos(v) - U * Math.sin(v)), A.push(g + t.y + j * Math.sin(v) + U * Math.cos(v));
9507
- }
9508
- return {
9509
- left: Math.min(..._),
9510
- top: Math.min(...A),
9511
- right: Math.max(..._),
9512
- bottom: Math.max(...A)
9513
- };
9514
- }
9515
- var Jh = Aa.filter((e) => !!e.art), Qh = {
9516
- left: -25,
9517
- top: Math.floor(Math.min(...Jh.map((e) => Zn(e.art, $s).top))),
9518
- right: 125,
9519
- bottom: 110
9520
- }, Lr = (e, [t, r]) => Math.min(r, Math.max(t, e));
9521
- function Zh(e, t) {
9522
- const r = (s, l) => typeof s == "number" && Number.isFinite(s) ? s : l, n = {
9523
- x: Math.round(Lr(r(t.x, 0), qt.x)),
9524
- y: Math.round(Lr(r(t.y, 0), qt.y)),
9525
- r: Math.round(Lr(r(t.r, 0), qt.r)),
9526
- s: Math.round(Lr(r(t.s, 100), qt.s)),
9527
- flip: t.flip === !0,
9528
- back: t.back === !0
9529
- }, a = Qh;
9530
- let i = Zn(e, n);
9531
- const o = Math.min(
9532
- (a.right - a.left - 2) / (i.right - i.left),
9533
- (a.bottom - a.top - 2) / (i.bottom - i.top)
9534
- );
9535
- return o < 1 && (n.s = Math.max(qt.s[0], Math.floor(n.s * o)), i = Zn(e, n)), n.x += Math.ceil(Math.max(0, a.left - i.left)) - Math.ceil(Math.max(0, i.right - a.right)), n.y += Math.ceil(Math.max(0, a.top - i.top)) - Math.ceil(Math.max(0, i.bottom - a.bottom)), n;
9536
- }
9537
- function ep(e) {
9538
- if (!e || typeof e != "object") return;
9539
- const t = e, r = {};
9540
- for (const a of Xh) {
9541
- const i = t[a], o = typeof i == "string" ? Qn.get(i) : void 0;
9542
- o && !o.hidden && o.slot === a && (r[a] = o.id);
9543
- }
9544
- const n = r.overlay ? Qn.get(r.overlay)?.art : void 0;
9545
- return n && t.placement && typeof t.placement == "object" && (r.placement = Zh(n, t.placement)), Object.keys(r).length ? r : void 0;
9546
- }
9547
- var Pa = "/cosmetics", Yi = "hadoku-cosmetics", Pe = (e) => e.replace(
9548
- /[&<>"']/g,
9549
- (t) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" })[t]
9550
- ), tr = (e) => e ? e.slice(e.indexOf(".") + 1) : "none";
9551
- function tp(e) {
9552
- const t = e.s / 100 * (e.flip ? -1 : 1);
9553
- return `translate(calc(var(--hc-sz) * ${(e.x / 100).toFixed(3)}),calc(var(--hc-sz) * ${(e.y / 100).toFixed(3)})) rotate(${e.r}deg) scale(${t.toFixed(3)},${(e.s / 100).toFixed(3)})`;
9554
- }
9555
- var rp = /* @__PURE__ */ new Set(["hop"]);
9556
- function Im(e, t, r = {}) {
9557
- const n = tr(t?.effect), a = tr(t?.gradient), i = tr(t?.font), o = Pe(e), s = rp.has(n), l = s ? `<span class="hc-tx">${[...e].map(
9558
- (y, S) => `<span class="hc-ch" style="--hc-i:${S}"><span class="hc-c">${y === " " ? "&nbsp;" : Pe(y)}</span></span>`
9559
- ).join("")}</span>` : `<span class="hc-tx">${o}</span>`, c = (y) => `<span class="hc-lyr${y}" aria-hidden="true">${o}</span>`;
9560
- let f = "", h = "";
9561
- return (n === "aura" || n === "outline") && (f += c(" hc-g")), n === "glint" && (h += `<span class="hc-win" aria-hidden="true">${c("")}</span>`), n === "twinkle" && (h += [
9562
- [-6, -25, 0],
9563
- [52, 55, 0.95],
9564
- [94, -15, 1.9]
9565
- ].map(
9566
- ([y, S, T]) => `<i class="hc-tw" aria-hidden="true" style="left:${y}%;top:${S}%;animation-delay:${T}s"></i>`
9567
- ).join("")), `<span class="${`hc-name hc-fx-${n} hc-gr-${a} hc-font-${i}${s ? " hc-split" : ""}${r.large ? " hc-large" : ""}`}">${f}${l}${h}</span>`;
9568
- }
9569
- var np = (() => {
9570
- let e = "";
9571
- for (let t = 0; t < 12; t++)
9572
- e += `<g transform="rotate(${t * 30} 50 50)"><path d="M50 3 l2.5 4 -2.5 4 -2.5 -4z" fill="currentColor" opacity="${t % 3 ? 0.55 : 1}"/></g>`;
9573
- return `<svg viewBox="0 0 100 100" aria-hidden="true"><circle cx="50" cy="50" r="44" fill="none" stroke="currentColor" stroke-width="1" stroke-dasharray="3 5" opacity=".7"/>${e}</svg>`;
9574
- })();
9575
- function Lm(e, t = Pa) {
9576
- const r = e?.overlay;
9577
- if (!r) return "";
9578
- const n = Qn.get(r)?.art;
9579
- if (n) {
9580
- const a = e?.placement ?? $s;
9581
- return `<span class="hc-ol hc-art${n.pixel ? " hc-px" : ""}" data-hc-art="${Pe(r)}" style="left:${50 - n.width / 2}%;top:${n.top}%;width:${n.width}%;z-index:${a.back ? 0 : 3}"><span class="hc-adj" style="transform:${tp(a)}"><img alt="" draggable="false" style="--hc-tilt:${n.tilt}deg" src="${Pe(`${t}/art/${n.file}`)}"></span></span>`;
9582
- }
9583
- switch (tr(r)) {
9584
- case "runes":
9585
- return `<span class="hc-ol hc-runes">${np}</span>`;
9586
- case "comet":
9587
- return '<span class="hc-ol hc-comet"></span>';
9588
- case "shine":
9589
- return '<span class="hc-ol hc-clip"><span class="hc-band"></span></span>';
9590
- case "glow":
9591
- return '<span class="hc-ol hc-glow"></span>';
9592
- case "petals":
9593
- return [15, 40, 62, 85].map(
9594
- (a, i) => `<i class="hc-ol hc-petal" style="left:${a}%;animation-delay:${(i * 0.85).toFixed(2)}s"></i>`
9595
- ).join("");
9596
- default:
9597
- return "";
9746
+ * - the parser encountered a badly formatted packet
9747
+ * - all sockets are disconnected
9748
+ *
9749
+ * @private
9750
+ */
9751
+ onclose(t, r) {
9752
+ var n;
9753
+ this.cleanup(), (n = this.engine) === null || n === void 0 || n.close(), this.backoff.reset(), this._readyState = "closed", this.emitReserved("close", t, r), this._reconnection && !this.skipReconnect && this.reconnect();
9598
9754
  }
9599
- }
9600
- var Xi = "!<>-_/[]{}=+*^?#%&01", Ji = /* @__PURE__ */ new Set(["type", "decode", "cascade"]), Qi = 1400, ap = 160;
9601
- function Om(e, t, r = {}) {
9602
- let n = tr(t?.message);
9603
- if (n === "none") return `<span class="hc-msg">${Pe(e)}</span>`;
9604
- const a = e.split(/\s+/).filter(Boolean);
9605
- Ji.has(n) && e.length > ap && (n = "words");
9606
- const i = r.keep ? " data-hc-keep" : "";
9607
- let o, s;
9608
- if (Ji.has(n)) {
9609
- s = Math.min(38, Qi / Math.max(1, e.length));
9610
- let l = 0;
9611
- const c = () => Xi[Math.floor(Math.random() * Xi.length)];
9612
- o = a.map(
9613
- (g) => `<span class="hc-w">${[...g].map((y) => {
9614
- const S = l++;
9615
- return n === "decode" ? `<span class="hc-ch" style="--hc-i:${S}" data-g="${Pe(c())}" data-h="${Pe(c())}"><span class="hc-r">${Pe(y)}</span></span>` : `<span class="hc-ch" style="--hc-i:${S}">${Pe(y)}</span>`;
9616
- }).join("")}</span>`
9617
- ).join(" "), n === "type" && (o += `<span class="hc-caret" style="--hc-i:${l}"></span>`);
9618
- const f = n === "type" ? "hc-caret" : n === "decode" ? "hc-r" : "hc-ch", h = o.lastIndexOf(`<span class="${f}"`);
9619
- o = `${o.slice(0, h)}<span data-hc-last class="${f}"${o.slice(h + `<span class="${f}"`.length)}`;
9620
- } else
9621
- s = Math.min(90, Qi / Math.max(1, a.length)), o = a.map(
9622
- (l, c) => `<span class="hc-w" style="--hc-i:${c}"${c === a.length - 1 ? " data-hc-last" : ""}>${Pe(l)}</span>`
9623
- ).join(" ");
9624
- return `<span class="hc-msg hc-mt-${n}" style="--hc-step:${s.toFixed(1)}ms" data-text="${Pe(e)}"${i}><span class="hc-sr">${Pe(e)}</span><span aria-hidden="true">${o}</span></span>`;
9625
- }
9626
- function ip(e) {
9627
- const t = e.target;
9628
- if (e.pseudoElement || !t?.hasAttribute?.("data-hc-last")) return;
9629
- const r = t.closest(".hc-msg");
9630
- !r || r.hasAttribute("data-hc-keep") || (r.className = "hc-msg", r.removeAttribute("style"), r.textContent = r.getAttribute("data-text") ?? "");
9631
- }
9632
- var Zi = {
9633
- script: {
9634
- file: "caveat",
9635
- family: "Caveat",
9636
- generic: "cursive",
9637
- css: "font-weight:700;font-size:1.3em;line-height:1"
9638
- },
9639
- surf: {
9640
- file: "pacifico",
9641
- family: "Pacifico",
9642
- generic: "cursive",
9643
- css: "font-weight:400;font-size:1.02em;line-height:1.1"
9644
- },
9645
- gothic: {
9646
- file: "gothic",
9647
- family: "Grenze Gotisch",
9648
- generic: "serif",
9649
- css: "font-weight:600;font-size:1.15em"
9650
- },
9651
- runic: { file: "uncial", family: "Uncial Antiqua", generic: "serif", css: "font-weight:400" },
9652
- corsair: {
9653
- file: "pirata",
9654
- family: "Pirata One",
9655
- generic: "serif",
9656
- css: "font-weight:400;font-size:1.12em;letter-spacing:.02em"
9657
- },
9658
- metal: {
9659
- file: "metal",
9660
- family: "Metal Mania",
9661
- generic: "cursive",
9662
- css: "font-weight:400;font-size:1.12em;letter-spacing:.02em"
9663
- },
9664
- comic: {
9665
- file: "bangers",
9666
- family: "Bangers",
9667
- generic: "cursive",
9668
- css: "font-weight:400;font-size:1.15em;letter-spacing:.05em"
9669
- },
9670
- circuit: {
9671
- file: "orbitron",
9672
- family: "Orbitron",
9673
- generic: "sans-serif",
9674
- css: "font-weight:700;letter-spacing:.03em"
9675
- },
9676
- hover: {
9677
- file: "audiowide",
9678
- family: "Audiowide",
9679
- generic: "sans-serif",
9680
- css: "font-weight:400;font-size:.92em"
9681
- },
9682
- retro: { file: "righteous", family: "Righteous", generic: "sans-serif", css: "font-weight:400" },
9683
- arcade: {
9684
- file: "bungee",
9685
- family: "Bungee",
9686
- generic: "sans-serif",
9687
- css: "font-weight:400;font-size:.9em"
9688
- },
9689
- pixel: {
9690
- file: "pixel",
9691
- family: "Press Start 2P",
9692
- generic: "monospace",
9693
- css: "font-weight:400;font-size:.62em;line-height:1.6"
9755
+ /**
9756
+ * Attempt a reconnection.
9757
+ *
9758
+ * @private
9759
+ */
9760
+ reconnect() {
9761
+ if (this._reconnecting || this.skipReconnect)
9762
+ return this;
9763
+ const t = this;
9764
+ if (this.backoff.attempts >= this._reconnectionAttempts)
9765
+ this.backoff.reset(), this.emitReserved("reconnect_failed"), this._reconnecting = !1;
9766
+ else {
9767
+ const r = this.backoff.duration();
9768
+ this._reconnecting = !0;
9769
+ const n = this.setTimeoutFn(() => {
9770
+ t.skipReconnect || (this.emitReserved("reconnect_attempt", t.backoff.attempts), !t.skipReconnect && t.open((a) => {
9771
+ a ? (t._reconnecting = !1, t.reconnect(), this.emitReserved("reconnect_error", a)) : t.onreconnect();
9772
+ }));
9773
+ }, r);
9774
+ this.opts.autoUnref && n.unref(), this.subs.push(() => {
9775
+ this.clearTimeoutFn(n);
9776
+ });
9777
+ }
9778
+ }
9779
+ /**
9780
+ * Called upon successful reconnect.
9781
+ *
9782
+ * @private
9783
+ */
9784
+ onreconnect() {
9785
+ const t = this.backoff.attempts;
9786
+ this._reconnecting = !1, this.backoff.reset(), this.emitReserved("reconnect", t);
9694
9787
  }
9695
- };
9696
- function op(e = Pa) {
9697
- const t = Object.entries(Zi).map(
9698
- ([n, a]) => `@font-face{font-family:"hc-${n}";src:url("${e}/fonts/${a.file}.woff2") format("woff2");font-display:swap}`
9699
- ).join(`
9700
- `), r = Object.entries(Zi).map(([n, a]) => `.hc-font-${n}{font-family:"hc-${n}","${a.family}",${a.generic};${a.css}}`).join(`
9701
- `);
9702
- return `${t}
9703
- /* Colours: everything derives from the character colour. */
9704
- .hc-name,.hc-av,.hc-msg{--hc-b:var(--hc-base,currentColor);--hc-hi:color-mix(in oklch,var(--hc-b),white 50%);--hc-lo:color-mix(in oklch,var(--hc-b),black 50%);--hc-glow:color-mix(in oklch,var(--hc-b) 75%,transparent)}
9705
-
9706
- /* --- name ---
9707
- Bleed: a gradient is a background clipped to the letters, and a background covers only the box; script
9708
- swashes reach outside it. So the text box and every layer over it get room on all sides, cancelled by a
9709
- negative margin so nothing moves. */
9710
- .hc-name{--hc-bx:.4em;--hc-by:.3em;--hc-grad:none;position:relative;display:inline-block;white-space:nowrap;color:var(--hc-b);font-weight:700;line-height:1.25}
9711
- .hc-name.hc-large{font-size:1.6em}
9712
- .hc-name .hc-tx{position:relative;z-index:1;display:inline-block;padding:var(--hc-by) var(--hc-bx);margin:calc(-1 * var(--hc-by)) calc(-1 * var(--hc-bx))}
9713
- .hc-name .hc-lyr{position:absolute;left:calc(-1 * var(--hc-bx));top:calc(-1 * var(--hc-by));padding:var(--hc-by) var(--hc-bx);pointer-events:none;white-space:nowrap}
9714
- .hc-name .hc-win{position:absolute;inset:calc(-1 * var(--hc-by)) calc(-1 * var(--hc-bx));overflow:hidden}
9715
- .hc-name .hc-win .hc-lyr{left:0;top:0}
9716
- .hc-name .hc-ch,.hc-name .hc-c{display:inline-block}
9717
- .hc-gr-gild{--hc-grad:linear-gradient(180deg,var(--hc-hi) 0%,var(--hc-b) 55%,var(--hc-lo) 100%)}
9718
- .hc-gr-gloss{--hc-grad:linear-gradient(180deg,color-mix(in oklch,var(--hc-hi),white 35%) 0%,var(--hc-hi) 36%,color-mix(in oklch,var(--hc-hi),var(--hc-b)) 48%,var(--hc-b) 60%,var(--hc-lo) 100%)}
9719
- .hc-gr-split{--hc-grad:linear-gradient(180deg,var(--hc-hi) 0 52%,var(--hc-b) 52% 100%)}
9720
- .hc-gr-brushed{--hc-grad:repeating-linear-gradient(90deg,transparent 0 1px,color-mix(in oklch,var(--hc-hi) 40%,transparent) 1px 2px),linear-gradient(180deg,var(--hc-hi),var(--hc-b) 55%,var(--hc-lo))}
9721
- .hc-gr-lumen{--hc-grad:radial-gradient(ellipse 60% 90% at 50% 35%,var(--hc-hi),var(--hc-b) 55%,var(--hc-lo) 100%)}
9722
- .hc-name:not(.hc-gr-none) .hc-tx{background:var(--hc-grad);-webkit-background-clip:text;background-clip:text;color:transparent}
9723
- .hc-name.hc-split:not(.hc-gr-none) .hc-tx{background:none}
9724
- .hc-name.hc-split:not(.hc-gr-none) .hc-tx .hc-c{padding:var(--hc-by) var(--hc-bx);margin:calc(-1 * var(--hc-by)) calc(-1 * var(--hc-bx));background:var(--hc-grad);-webkit-background-clip:text;background-clip:text;color:transparent}
9725
- .hc-fx-glint .hc-win{z-index:3;animation:hc-win-go 4.5s cubic-bezier(.4,0,.2,1) infinite;-webkit-mask-image:linear-gradient(100deg,transparent 35%,#000 50%,transparent 65%);mask-image:linear-gradient(100deg,transparent 35%,#000 50%,transparent 65%)}
9726
- .hc-fx-glint .hc-win .hc-lyr{color:var(--hc-hi);animation:hc-win-back 4.5s cubic-bezier(.4,0,.2,1) infinite}
9727
- @keyframes hc-win-go{0%{transform:translateX(-100%)}55%,100%{transform:translateX(100%)}}
9728
- @keyframes hc-win-back{0%{transform:translateX(100%)}55%,100%{transform:translateX(-100%)}}
9729
- .hc-fx-aura .hc-lyr.hc-g{color:transparent;text-shadow:0 0 6px var(--hc-glow),0 0 14px var(--hc-glow);animation:hc-breathe 3s ease-in-out infinite}
9730
- .hc-fx-outline .hc-lyr.hc-g{color:transparent;-webkit-text-stroke:3px var(--hc-hi);animation:hc-breathe 3.6s ease-in-out infinite}
9731
- @keyframes hc-breathe{0%,100%{opacity:.25}50%{opacity:1}}
9732
- .hc-fx-hop .hc-c{animation:hc-hop 3.6s ease-in-out calc(var(--hc-i) * 45ms) infinite}
9733
- @keyframes hc-hop{0%,14%,100%{transform:none}5%{transform:translateY(-4px)}10%{transform:translateY(.5px)}}
9734
- .hc-fx-twinkle .hc-tw{position:absolute;width:7px;height:7px;z-index:3;pointer-events:none;background:linear-gradient(var(--hc-hi),var(--hc-hi)) center/1.4px 100% no-repeat,linear-gradient(90deg,var(--hc-hi),var(--hc-hi)) center/100% 1.4px no-repeat;animation:hc-star 2.8s ease-in-out infinite both}
9735
- @keyframes hc-star{0%,100%{opacity:0;transform:scale(.3) rotate(0deg)}25%{opacity:1;transform:scale(1) rotate(45deg)}50%{opacity:0;transform:scale(.3) rotate(90deg)}}
9736
- .hc-font-caps{font-variant:small-caps;letter-spacing:.08em}
9737
- .hc-font-wide{letter-spacing:.22em;font-weight:600;text-transform:uppercase;font-size:.82em}
9738
- ${r}
9739
-
9740
- /* --- avatar --- */
9741
- .hc-av{--hc-sz:40px;position:relative;display:inline-block;width:var(--hc-sz);height:var(--hc-sz);flex:none;isolation:isolate;vertical-align:middle}
9742
- .hc-av .hc-pic{position:absolute;inset:0;border-radius:50%;overflow:hidden;z-index:1;background:color-mix(in oklch,var(--hc-b) 30%,transparent)}
9743
- .hc-av .hc-pic img{width:100%;height:100%;display:block;object-fit:cover;image-rendering:pixelated}
9744
- .hc-av .hc-ol{position:absolute;pointer-events:none}
9745
- .hc-ol.hc-art{display:block}
9746
- .hc-ol.hc-art .hc-adj{display:block;position:relative;transform-origin:50% 60%}
9747
- .hc-ol.hc-art img{display:block;width:100%;height:auto;filter:drop-shadow(0 1px 1px rgba(0,0,0,.45));animation:hc-art-bob 3.4s ease-in-out infinite;-webkit-user-drag:none;user-select:none}
9748
- .hc-ol.hc-art.hc-px img{image-rendering:pixelated}
9749
- @keyframes hc-art-bob{0%,100%{transform:rotate(var(--hc-tilt,0deg)) translateY(0)}50%{transform:rotate(var(--hc-tilt,0deg)) translateY(-2px)}}
9750
- .hc-ol.hc-runes{inset:-9px;z-index:2;color:var(--hc-hi);animation:hc-turn 14s linear infinite}
9751
- .hc-ol.hc-runes svg{width:100%;height:100%;display:block}
9752
- @keyframes hc-turn{to{transform:rotate(360deg)}}
9753
- .hc-ol.hc-comet{inset:-6px;z-index:2;border-radius:50%;background:conic-gradient(from 0deg,transparent 0 270deg,color-mix(in oklch,var(--hc-hi) 10%,transparent) 300deg,var(--hc-hi) 358deg,transparent 360deg);-webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 3px),#000 calc(100% - 3px));mask:radial-gradient(farthest-side,transparent calc(100% - 3px),#000 calc(100% - 3px));animation:hc-turn 2.4s linear infinite}
9754
- .hc-ol.hc-clip{inset:0;border-radius:50%;overflow:hidden;z-index:2}
9755
- .hc-ol .hc-band{position:absolute;top:-30%;left:0;width:45%;height:160%;background:linear-gradient(90deg,transparent,color-mix(in oklch,var(--hc-hi) 70%,transparent),transparent);transform:translateX(-130%) rotate(20deg);animation:hc-band 5s ease-in-out infinite}
9756
- @keyframes hc-band{0%{transform:translateX(-130%) rotate(20deg)}45%,100%{transform:translateX(260%) rotate(20deg)}}
9757
- .hc-ol.hc-glow{inset:-30%;border-radius:50%;z-index:0;background:radial-gradient(circle,var(--hc-glow) 0,transparent 65%);animation:hc-glowp 3.2s ease-in-out infinite}
9758
- @keyframes hc-glowp{0%,100%{opacity:.35;transform:scale(.92)}50%{opacity:.9;transform:scale(1.04)}}
9759
- .hc-ol.hc-petal{top:-8%;height:100%;width:5px;z-index:2;animation:hc-fall 3.4s linear infinite both}
9760
- .hc-ol.hc-petal::after{content:"";position:absolute;left:0;top:0;width:5px;height:7px;border-radius:5px 0;background:#f7b6c8;transform:rotate(35deg)}
9761
- @keyframes hc-fall{0%{transform:translate(0,0);opacity:0}12%{opacity:.9}100%{transform:translate(-6px,100%);opacity:0}}
9762
-
9763
- /* --- message reveal: fill backwards only; the page swaps back to plain text when it ends --- */
9764
- .hc-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
9765
- .hc-msg .hc-w{display:inline-block;white-space:nowrap}
9766
- .hc-msg .hc-ch{display:inline-block}
9767
- .hc-mt-type .hc-ch{animation:hc-in .01s linear calc(var(--hc-i) * var(--hc-step)) backwards}
9768
- .hc-mt-type .hc-caret{display:inline-block;width:2px;height:1em;margin-left:2px;vertical-align:-2px;background:var(--hc-b);opacity:0;animation:hc-caret 1.5s steps(1) calc(var(--hc-i) * var(--hc-step)) backwards}
9769
- @keyframes hc-caret{0%{opacity:0}1%{opacity:1}20%{opacity:0}40%{opacity:1}60%{opacity:0}80%{opacity:1}100%{opacity:0}}
9770
- .hc-mt-cascade .hc-ch{animation:hc-drop .35s cubic-bezier(.3,1.5,.5,1) calc(var(--hc-i) * var(--hc-step)) backwards}
9771
- .hc-mt-decode .hc-ch{position:relative}
9772
- .hc-mt-decode .hc-ch .hc-r{display:inline-block;animation:hc-in .01s linear calc(var(--hc-i) * var(--hc-step) + 260ms) backwards}
9773
- .hc-mt-decode .hc-ch::before,.hc-mt-decode .hc-ch::after{position:absolute;left:0;top:0;color:var(--hc-b);opacity:0;animation:hc-dec-a .26s steps(1) calc(var(--hc-i) * var(--hc-step)) backwards}
9774
- .hc-mt-decode .hc-ch::before{content:attr(data-g)}
9775
- .hc-mt-decode .hc-ch::after{content:attr(data-h);animation-name:hc-dec-b}
9776
- @keyframes hc-dec-a{0%{opacity:.85}50%,100%{opacity:0}}
9777
- @keyframes hc-dec-b{0%{opacity:0}50%{opacity:.85}100%{opacity:0}}
9778
- .hc-mt-words .hc-w{animation:hc-rise .4s ease-out calc(var(--hc-i) * var(--hc-step)) backwards}
9779
- .hc-mt-bubble .hc-w{animation:hc-pop .35s cubic-bezier(.3,1.6,.5,1) calc(var(--hc-i) * var(--hc-step)) backwards}
9780
- .hc-mt-drift .hc-w{animation:hc-slide .45s cubic-bezier(.2,.8,.2,1) calc(var(--hc-i) * var(--hc-step)) backwards}
9781
- @keyframes hc-in{from{opacity:0}to{opacity:1}}
9782
- @keyframes hc-drop{0%{transform:translateY(-10px);opacity:0}100%{transform:none;opacity:1}}
9783
- @keyframes hc-rise{0%{transform:translateY(10px);opacity:0}100%{transform:none;opacity:1}}
9784
- @keyframes hc-pop{0%{transform:scale(.6);opacity:0}100%{transform:scale(1);opacity:1}}
9785
- @keyframes hc-slide{0%{transform:translateX(-18px);opacity:0}100%{transform:none;opacity:1}}
9786
-
9787
- .hc-idle .hc-name,.hc-idle .hc-name *,.hc-idle .hc-av *,.hc-idle .hc-av *::after{animation-play-state:paused!important}
9788
- @media (prefers-reduced-motion:reduce){.hc-name *,.hc-av *,.hc-av *::after,.hc-msg *,.hc-msg *::before,.hc-msg *::after{animation:none!important}}
9789
- `;
9790
9788
  }
9791
- function Dm(e = document, t = Pa) {
9792
- if (e.getElementById(Yi)) return;
9793
- const r = e.createElement("style");
9794
- r.id = Yi, r.textContent = op(t), e.head.appendChild(r), e.addEventListener("animationend", ip);
9789
+ const qt = {};
9790
+ function Yr(e, t) {
9791
+ typeof e == "object" && (t = e, e = void 0), t = t || {};
9792
+ const r = Yh(e, t.path || "/socket.io"), n = r.source, a = r.id, i = r.path, o = qt[a] && i in qt[a].nsps, s = t.forceNew || t["force new connection"] || t.multiplex === !1 || o;
9793
+ let l;
9794
+ return s ? l = new Zn(n, t) : (qt[a] || (qt[a] = new Zn(n, t)), l = qt[a]), r.query && !t.query && (t.query = r.queryKey), l.socket(r.path, t);
9795
9795
  }
9796
- function Nm(e) {
9797
- const r = `${on()}/media/${e}`.replace(/\\/g, "/");
9796
+ Object.assign(Yr, {
9797
+ Manager: Zn,
9798
+ Socket: $s,
9799
+ io: Yr,
9800
+ connect: Yr
9801
+ });
9802
+ function $m(e) {
9803
+ const r = `${sn()}/media/${e}`.replace(/\\/g, "/");
9798
9804
  return { mediaUrl: `${r}/${td}`, indexUrl: `${r}/index.json` };
9799
9805
  }
9800
- function sp(e) {
9801
- return `${on()}/media/${e}`.replace(/\\/g, "/");
9806
+ function lp(e) {
9807
+ return `${sn()}/media/${e}`.replace(/\\/g, "/");
9802
9808
  }
9803
- function lp(e, t) {
9804
- return sp(t ?? `${e}/poster.jpg`);
9809
+ function cp(e, t) {
9810
+ return lp(t ?? `${e}/poster.jpg`);
9805
9811
  }
9806
9812
  function Fs(e) {
9807
- return `${on()}${e}`.replace(/\\/g, "/");
9813
+ return `${sn()}${e}`.replace(/\\/g, "/");
9808
9814
  }
9809
- async function cp(e) {
9815
+ async function up(e) {
9810
9816
  try {
9811
9817
  const t = await fetch(Fs("/api/tierlist"));
9812
9818
  if (!t.ok)
@@ -9822,19 +9828,19 @@ async function cp(e) {
9822
9828
  }
9823
9829
  }
9824
9830
  let eo = !1;
9825
- function $m() {
9831
+ function Fm() {
9826
9832
  if (eo || typeof Image > "u") return;
9827
9833
  const e = z.getState().tierlist;
9828
9834
  if (!(!e || e.items.length === 0)) {
9829
9835
  eo = !0;
9830
9836
  for (const t of e.items) {
9831
9837
  const r = new Image();
9832
- r.decoding = "async", r.src = lp(t.id, t.thumbnail);
9838
+ r.decoding = "async", r.src = cp(t.id, t.thumbnail);
9833
9839
  }
9834
9840
  C("tierlist", "Warming posters", { count: e.items.length });
9835
9841
  }
9836
9842
  }
9837
- async function Fm(e) {
9843
+ async function Um(e) {
9838
9844
  z.getState().setTierlistSaving(!0);
9839
9845
  try {
9840
9846
  const r = await fetch(Fs("/api/tierlist/me"), {
@@ -9852,18 +9858,18 @@ async function Fm(e) {
9852
9858
  z.getState().setTierlistSaving(!1);
9853
9859
  }
9854
9860
  }
9855
- function up() {
9861
+ function dp() {
9856
9862
  const e = z.getState(), t = new Set(Object.values(e.roster).map((i) => i.sprite).filter(Boolean)), r = It.find((i) => !t.has(i));
9857
9863
  if (!r)
9858
9864
  return re("socket", "sprite_taken: no available sprites to retry with"), null;
9859
9865
  const n = !!e.name && !_t(e.name), a = n ? e.name : sr(r);
9860
9866
  return C("socket", "sprite_taken: retrying with next available", { from: e.sprite, to: r, name: a, keptCustomName: n }), e.setSessionIdentity(a, r), { name: a, sprite: r };
9861
9867
  }
9862
- function dp(e) {
9868
+ function fp(e) {
9863
9869
  const t = z.getState(), r = e ? t.roster[e] : void 0;
9864
9870
  return !r || !!r.sprite && r.sprite === t.sprite;
9865
9871
  }
9866
- var fp = "https://hadoku.me/prefs", to = "hadoku-avatar-link", hp = "hadoku-avatar-link", ro = "hadoku-avatar-link-popup";
9872
+ var hp = "https://hadoku.me/prefs", to = "hadoku-avatar-link", pp = "hadoku-avatar-link", ro = "hadoku-avatar-link-popup";
9867
9873
  function no(e) {
9868
9874
  try {
9869
9875
  e ? sessionStorage.setItem(ro, "1") : sessionStorage.removeItem(ro);
@@ -9876,21 +9882,21 @@ var lr = class extends Error {
9876
9882
  }
9877
9883
  status;
9878
9884
  };
9879
- async function pp(e) {
9885
+ async function mp(e) {
9880
9886
  if (!e.ok) {
9881
9887
  const t = await e.json().catch(() => null);
9882
9888
  throw new lr(e.status, t?.message ?? `HTTP ${e.status}`);
9883
9889
  }
9884
9890
  return await e.json();
9885
9891
  }
9886
- function mp(e = {}) {
9887
- const t = `${e.baseUrl ?? fp}/api/v1/_avatar`, r = e.fetch ?? fetch, n = (s, l = {}) => r(`${t}${s}`, { credentials: "include", ...l }).then(pp), a = (s, l, c) => n(s, {
9892
+ function gp(e = {}) {
9893
+ const t = `${e.baseUrl ?? hp}/api/v1/_avatar`, r = e.fetch ?? fetch, n = (s, l = {}) => r(`${t}${s}`, { credentials: "include", ...l }).then(mp), a = (s, l, c) => n(s, {
9888
9894
  method: l,
9889
9895
  ...c === void 0 ? {} : { headers: { "Content-Type": "application/json" }, body: JSON.stringify(c) }
9890
9896
  }), i = () => n("");
9891
9897
  async function o(s) {
9892
9898
  no(!0);
9893
- const l = window.open("about:blank", hp, "popup,width=520,height=760");
9899
+ const l = window.open("about:blank", pp, "popup,width=520,height=760");
9894
9900
  if (no(!1), !l)
9895
9901
  throw new lr(0, "The sign-in window was blocked: allow pop-ups for hadoku.me");
9896
9902
  let c;
@@ -9952,15 +9958,15 @@ function mp(e = {}) {
9952
9958
  };
9953
9959
  }
9954
9960
  const ao = "hadoku:avatar";
9955
- function gp(e) {
9961
+ function yp(e) {
9956
9962
  const t = e?.sprite ?? e?.avatar?.sprite ?? null;
9957
9963
  return ya(t) ? t : null;
9958
9964
  }
9959
- async function Um(e = {}) {
9965
+ async function Bm(e = {}) {
9960
9966
  const t = e.fetch ?? (typeof fetch > "u" ? void 0 : fetch), r = typeof window > "u" ? void 0 : window.location?.origin, n = e.baseUrl ?? (r ? `${r}/prefs` : void 0);
9961
9967
  if (!t || !n) return null;
9962
9968
  try {
9963
- const a = await mp({ baseUrl: n, fetch: t }).get(), i = gp(a);
9969
+ const a = await gp({ baseUrl: n, fetch: t }).get(), i = yp(a);
9964
9970
  return C("avatar", "Requested character from prefs-api", { sprite: i }), i;
9965
9971
  } catch (a) {
9966
9972
  return a instanceof lr && (a.status === 401 || a.status === 403 || a.status === 404) ? C("avatar", "No avatar settings here (signed out, or no prefs-api on this origin)", { status: a.status }) : re("avatar", "Avatar settings read failed — keeping the auto-assigned character", {
@@ -9976,7 +9982,7 @@ function io(e) {
9976
9982
  const n = !!(t.me.clientId && t.roster[t.me.clientId]?.registryName) || !t.name || !_t(t.name) ? t.name : sr(e);
9977
9983
  return t.setSessionIdentity(n, e), !0;
9978
9984
  }
9979
- function Bm(e, t = typeof window > "u" ? void 0 : window) {
9985
+ function jm(e, t = typeof window > "u" ? void 0 : window) {
9980
9986
  if (!t) return () => {
9981
9987
  };
9982
9988
  const r = (n) => {
@@ -9985,76 +9991,76 @@ function Bm(e, t = typeof window > "u" ? void 0 : window) {
9985
9991
  };
9986
9992
  return t.addEventListener(ao, r), () => t.removeEventListener(ao, r);
9987
9993
  }
9988
- const yp = 10;
9989
- function vp(e = typeof window < "u" ? window : void 0) {
9994
+ const vp = 10;
9995
+ function bp(e = typeof window < "u" ? window : void 0) {
9990
9996
  if (!e) return { framed: !1, depth: 0 };
9991
9997
  try {
9992
9998
  let t = 0, r = e;
9993
- for (; r !== r.parent && t < yp; )
9999
+ for (; r !== r.parent && t < vp; )
9994
10000
  t++, r = r.parent;
9995
10001
  return { framed: e.top ? e.top !== e.self : t > 0, depth: t };
9996
10002
  } catch {
9997
10003
  return { framed: !1, depth: 0 };
9998
10004
  }
9999
10005
  }
10000
- function bp(e, t, r) {
10006
+ function wp(e, t, r) {
10001
10007
  const n = !!e.name && !r(e.name) && (!t || r(t.name || "")), a = !!e.avatarId && (!t || t.avatarId !== e.avatarId);
10002
10008
  if (!n && !a)
10003
10009
  return null;
10004
10010
  const i = {};
10005
10011
  return n && (i.name = e.name), a && (i.avatarId = e.avatarId), i;
10006
10012
  }
10007
- function wp(e, t) {
10013
+ function _p(e, t) {
10008
10014
  let r = 0;
10009
10015
  for (const n of e.videos) {
10010
10016
  const a = Ot.voteKey(t, e.id, n.mediaId);
10011
- globalThis.localStorage?.getItem(a) != null && r++, Qr(a);
10017
+ globalThis.localStorage?.getItem(a) != null && r++, Zr(a);
10012
10018
  }
10013
10019
  return r;
10014
10020
  }
10015
- const _p = 2e4, Ep = 1e4;
10016
- function Sp() {
10021
+ const Ep = 2e4, Sp = 1e4;
10022
+ function Rp() {
10017
10023
  return { unansweredSince: null, lastPongAt: null, lastTickAt: null };
10018
10024
  }
10019
- function Rp(e, t) {
10025
+ function Tp(e, t) {
10020
10026
  e.lastPongAt = t, e.unansweredSince = null;
10021
10027
  }
10022
- function Tp(e, t, r) {
10023
- const n = e.lastTickAt !== null && t - e.lastTickAt > Ep;
10024
- return e.lastTickAt = t, r ? n || e.unansweredSince === null ? (e.unansweredSince = t, !1) : t - e.unansweredSince > _p : (e.unansweredSince = null, !1);
10028
+ function xp(e, t, r) {
10029
+ const n = e.lastTickAt !== null && t - e.lastTickAt > Sp;
10030
+ return e.lastTickAt = t, r ? n || e.unansweredSince === null ? (e.unansweredSince = t, !1) : t - e.unansweredSince > Ep : (e.unansweredSince = null, !1);
10025
10031
  }
10026
10032
  function Us(e, t) {
10027
10033
  return e.lastPongAt === null ? void 0 : Math.max(0, t - e.lastPongAt);
10028
10034
  }
10029
- let te = null, Ne = null, Yr = null, Fe = null, rt = null;
10030
- const xp = kp(), wt = Sp();
10031
- let Or = null, On = null, oo = 0, Ma = null, cr = !1, Ia = !1, Kt = !1, La = null;
10032
- function jm(e) {
10035
+ let te = null, Ne = null, Xr = null, Fe = null, rt = null;
10036
+ const Cp = Ap(), wt = Rp();
10037
+ let Or = null, Dn = null, oo = 0, Ma = null, cr = !1, Ia = !1, Kt = !1, La = null;
10038
+ function zm(e) {
10033
10039
  const t = Ce(), r = z.getState();
10034
10040
  if (r.me.clientId && r.roster[r.me.clientId])
10035
10041
  return (e.name || e.sprite) && (C("socket", "Identity update (already joined)", { name: e.name, sprite: e.sprite }), t.emit(ne.IDENTITY_UPDATE, { name: e.name, sprite: e.sprite })), t;
10036
- const n = Cp(e);
10042
+ const n = kp(e);
10037
10043
  return rt = n, Ma = { name: n.name, sprite: n.sprite }, t.connected ? (C("socket", "Emitting join", n), t.emit(ne.JOIN, n)) : t.once("connect", () => {
10038
10044
  C("socket", "Emitting join", n), t.emit(ne.JOIN, n);
10039
10045
  }), t;
10040
10046
  }
10041
- function Cp(e) {
10047
+ function kp(e) {
10042
10048
  return {
10043
10049
  room_key: e.room_key,
10044
10050
  name: e.name,
10045
10051
  sprite: e.sprite,
10046
10052
  // Entry-path telemetry — see lib/embedContext.ts. Sent on every join AND
10047
10053
  // rejoin (lastJoinPayload carries it), so a reconnect keeps the attribution.
10048
- embed: vp(),
10049
- delivery_arm: Hf(),
10054
+ embed: bp(),
10055
+ delivery_arm: th(),
10050
10056
  // Identity tier input — see lib/deviceId.ts. Sent on every join AND rejoin
10051
10057
  // (lastJoinPayload carries it) so a reconnect lands on the same
10052
10058
  // ParticipantId rather than minting a new person.
10053
- device_id: rh(),
10054
- tab_id: xp
10059
+ device_id: ph(),
10060
+ tab_id: Cp
10055
10061
  };
10056
10062
  }
10057
- function kp() {
10063
+ function Ap() {
10058
10064
  const e = globalThis.crypto;
10059
10065
  if (e && typeof e.randomUUID == "function") return e.randomUUID();
10060
10066
  const t = new Uint8Array(16);
@@ -10062,7 +10068,7 @@ function kp() {
10062
10068
  else for (let r = 0; r < t.length; r++) t[r] = Math.floor(Math.random() * 256);
10063
10069
  return Array.from(t, (r) => r.toString(16).padStart(2, "0")).join("");
10064
10070
  }
10065
- function zm() {
10071
+ function Hm() {
10066
10072
  return Us(wt, Date.now());
10067
10073
  }
10068
10074
  function Ce() {
@@ -10070,18 +10076,18 @@ function Ce() {
10070
10076
  let t = Lt().serverOrigin || "/";
10071
10077
  if (t === "/" && typeof window < "u") {
10072
10078
  const n = window.location;
10073
- (n.hostname === "localhost" || n.hostname === "127.0.0.1") && n.port === String(da) && (t = `${n.protocol}//${n.hostname}:${an}`, C("socket", "Using dev fallback origin", { origin: t }));
10079
+ (n.hostname === "localhost" || n.hostname === "127.0.0.1") && n.port === String(da) && (t = `${n.protocol}//${n.hostname}:${on}`, C("socket", "Using dev fallback origin", { origin: t }));
10074
10080
  }
10075
10081
  const r = new URL(t.startsWith("http") ? t : `${window.location.origin}${t}`).origin;
10076
- te = Kr(r, { path: Nu, transports: ["websocket", "polling"] }), C("socket", "Socket initialized", { origin: t }), ln("__SOCKET__", te), Fe && (clearTimeout(Fe), Fe = null), Ne = null, Yr = setInterval(() => {
10077
- if (Tp(wt, Date.now(), !!te?.connected)) {
10082
+ te = Yr(r, { path: Nu, transports: ["websocket", "polling"] }), C("socket", "Socket initialized", { origin: t }), cn("__SOCKET__", te), Fe && (clearTimeout(Fe), Fe = null), Ne = null, Xr = setInterval(() => {
10083
+ if (xp(wt, Date.now(), !!te?.connected)) {
10078
10084
  re("socket", "PONG-WATCHDOG no time_pong for 20s — replacing the connection", {
10079
10085
  sid: te?.id,
10080
10086
  lastPongAgeMs: Us(wt, Date.now()) ?? null
10081
- }), On = "pong-watchdog", wt.unansweredSince = null, te?.io.engine?.close();
10087
+ }), Dn = "pong-watchdog", wt.unansweredSince = null, te?.io.engine?.close();
10082
10088
  return;
10083
10089
  }
10084
- Up();
10090
+ Bp();
10085
10091
  }, ed), te.on("connect", () => {
10086
10092
  Ia = !1;
10087
10093
  const n = te?.id;
@@ -10117,12 +10123,12 @@ function Ce() {
10117
10123
  } else Kt && re("socket", "Reconnected — no join payload, not re-joining any room");
10118
10124
  Kt = !0;
10119
10125
  }), te.on("disconnect", (n) => {
10120
- cs(null), Or = { reason: On ?? n, at: Date.now() }, On = null, C("socket", "Disconnected", { reason: n });
10121
- }), te.on("connect_error", (n) => tt("socket", "Connection error", { message: n?.message })), te.on("reconnect_attempt", (n) => re("socket", "Reconnect attempt", { attempt: n })), te.on("reconnect_failed", () => tt("socket", "Reconnect failed")), Fp(te);
10126
+ cs(null), Or = { reason: Dn ?? n, at: Date.now() }, Dn = null, C("socket", "Disconnected", { reason: n });
10127
+ }), te.on("connect_error", (n) => tt("socket", "Connection error", { message: n?.message })), te.on("reconnect_attempt", (n) => re("socket", "Reconnect attempt", { attempt: n })), te.on("reconnect_failed", () => tt("socket", "Reconnect failed")), Up(te);
10122
10128
  }
10123
10129
  return te;
10124
10130
  }
10125
- function Dn(e) {
10131
+ function Nn(e) {
10126
10132
  return e.play_state === "playing" || e.playing === !0;
10127
10133
  }
10128
10134
  function so(e, t) {
@@ -10142,17 +10148,17 @@ function so(e, t) {
10142
10148
  systemType: e.systemType
10143
10149
  };
10144
10150
  }
10145
- function Ap(e) {
10151
+ function Pp(e) {
10146
10152
  e.on(ne.SNAPSHOT, (t) => {
10147
10153
  e.emit(ma.SYNC), z.getState().applySnapshot({
10148
10154
  roomId: t.room_id ?? null,
10149
10155
  mediaId: t.media_id ?? null,
10150
10156
  playheadMs: t.playhead_ms || 0,
10151
- playing: Dn(t),
10157
+ playing: Nn(t),
10152
10158
  serverSeq: t.server_seq || 0,
10153
10159
  leaderId: t.leader_id || null
10154
10160
  }), z.getState().name || C("socket", "Deferring identity to presence event (snapshot carries no roster)");
10155
- const r = z.getState(), n = te?.id, i = (n ? r.roster[n] : void 0) ?? Ma, o = bp(
10161
+ const r = z.getState(), n = te?.id, i = (n ? r.roster[n] : void 0) ?? Ma, o = wp(
10156
10162
  { name: r.name, avatarId: r.sprite },
10157
10163
  i ? { name: i.name, avatarId: i.sprite ?? null } : void 0,
10158
10164
  // A join that carried no name counts as a default one, so a name that
@@ -10169,7 +10175,7 @@ function Ap(e) {
10169
10175
  C("socket", "Received snapshot", {
10170
10176
  mediaId: t.media_id ?? null,
10171
10177
  playheadMs: t.playhead_ms || 0,
10172
- playing: Dn(t),
10178
+ playing: Nn(t),
10173
10179
  leaderId: t.leader_id || null,
10174
10180
  serverSeq: t.server_seq || 0,
10175
10181
  rosterSize: Object.keys(r.roster).length
@@ -10182,7 +10188,7 @@ function Ap(e) {
10182
10188
  }
10183
10189
  r.updateControlState({
10184
10190
  playheadMs: t.playhead_ms,
10185
- playing: Dn(t),
10191
+ playing: Nn(t),
10186
10192
  serverSeq: t.server_seq,
10187
10193
  leaderId: t.leader_id ?? r.snapshot.leaderId
10188
10194
  }), C("socket", "Control broadcast received", {
@@ -10195,7 +10201,7 @@ function Ap(e) {
10195
10201
  }), e.on(ne.CONTROL_ACK, (t) => {
10196
10202
  typeof t?.client_seq == "number" && typeof t?.server_seq == "number" && C("socket", "Control ack received", t);
10197
10203
  }), e.on(ne.TIME_PONG, (t) => {
10198
- if (Rp(wt, Date.now()), Ne && Ne.ts) {
10204
+ if (Tp(wt, Date.now()), Ne && Ne.ts) {
10199
10205
  const r = Date.now() - Ne.ts;
10200
10206
  z.getState().addRttSample(r, t?.server_ts, Ne.ts), Ne = null, Fe && (clearTimeout(Fe), Fe = null), C("socket", "Time sync RTT", { rtt: r, offset: z.getState().drift.offsetMs });
10201
10207
  }
@@ -10205,11 +10211,11 @@ function Ap(e) {
10205
10211
  z.getState().setReadiness({ mediaId: r, ready: i, readyCount: n, total: a }), C("socket", "Ready state received", { mediaId: r, readyCount: n, total: a, ready: i });
10206
10212
  });
10207
10213
  }
10208
- function Pp(e) {
10209
- const t = ep(e);
10214
+ function Mp(e) {
10215
+ const t = yf(e);
10210
10216
  return t ? { cosmetics: t } : {};
10211
10217
  }
10212
- function Mp(e) {
10218
+ function Ip(e) {
10213
10219
  e.on(ne.PRESENCE, (t) => {
10214
10220
  if (!t) return;
10215
10221
  if (Array.isArray(t.users)) {
@@ -10223,7 +10229,7 @@ function Mp(e) {
10223
10229
  isLeader: s.is_leader,
10224
10230
  ...s.registry_name ? { registryName: !0 } : {},
10225
10231
  ...s.avatar_url ? { avatarUrl: s.avatar_url } : {},
10226
- ...Pp(s.cosmetics)
10232
+ ...Mp(s.cosmetics)
10227
10233
  };
10228
10234
  const a = z.getState(), i = te?.id, o = i ? n[i] : void 0;
10229
10235
  if (o?.registryName)
@@ -10245,7 +10251,7 @@ function Mp(e) {
10245
10251
  }
10246
10252
  });
10247
10253
  }
10248
- function Ip(e) {
10254
+ function Lp(e) {
10249
10255
  e.on(ne.CHAT_BROADCAST, (t) => {
10250
10256
  const r = { ...so(t, t.server_seq), live: !0 };
10251
10257
  z.getState().appendChat(r), C("chat", "Message received", r);
@@ -10255,7 +10261,7 @@ function Ip(e) {
10255
10261
  z.getState().setChat(r), C("chat", "History loaded", { count: r.length });
10256
10262
  });
10257
10263
  }
10258
- function Lp(e) {
10264
+ function Op(e) {
10259
10265
  e.on(et.STATE, (t) => {
10260
10266
  z.getState().applyPlaylistState({
10261
10267
  playlist: t?.playlist ?? null,
@@ -10268,63 +10274,63 @@ function Lp(e) {
10268
10274
  z.getState().setPlaylistResults(t ?? null), C("playlist", "Results received", { playlistId: t?.playlist?.id, update: t?.update === !0 });
10269
10275
  }), e.on(et.VOTES_CLEARED, (t) => {
10270
10276
  if (!t?.playlistId || !Array.isArray(t.mediaIds)) return;
10271
- const r = wp(
10277
+ const r = _p(
10272
10278
  { id: t.playlistId, videos: t.mediaIds.map((a) => ({ mediaId: a })) },
10273
10279
  ef()
10274
10280
  ), n = z.getState();
10275
10281
  n.playlist?.id === t.playlistId && n.applyPlaylistState({ playlist: n.playlist, activeIndex: n.activePlaylistIndex, myVotes: {} }), C("playlist", "Votes cleared by leader", { playlistId: t.playlistId, removed: r });
10276
10282
  });
10277
10283
  }
10278
- function Op(e) {
10284
+ function Dp(e) {
10279
10285
  e.on(Yu.UPDATED, () => {
10280
- C("tierlist", "Someone saved — refreshing the board"), cp(!1);
10286
+ C("tierlist", "Someone saved — refreshing the board"), up(!1);
10281
10287
  });
10282
10288
  }
10283
- function Dp(e) {
10289
+ function Np(e) {
10284
10290
  e.on(pa.STATE, (t) => {
10285
10291
  if (!t || typeof t.active != "boolean") return;
10286
10292
  const r = Array.isArray(t.ready) ? t.ready.filter((n) => typeof n == "string") : [];
10287
10293
  z.getState().setReadyCheckState({ active: t.active, ready: r }), C("ready-check", "State received", { active: t.active, readyCount: r.length });
10288
10294
  });
10289
10295
  }
10290
- function Hm() {
10296
+ function qm() {
10291
10297
  te?.emit(pa.START, {});
10292
10298
  }
10293
- function qm(e) {
10299
+ function Vm(e) {
10294
10300
  te?.emit(pa.TOGGLE, { ready: e });
10295
10301
  }
10296
- function Np(e) {
10302
+ function $p(e) {
10297
10303
  e.on(ma.ACTIVE, (t) => {
10298
10304
  const r = typeof t?.gameId == "string" ? t.gameId : null;
10299
10305
  z.getState().setActiveGameId(r), C("game", "game_active", { gameId: r });
10300
10306
  });
10301
10307
  }
10302
- function Vm(e) {
10308
+ function Wm(e) {
10303
10309
  te?.emit(ma.SELECT, { gameId: e });
10304
10310
  }
10305
- function $p(e) {
10311
+ function Fp(e) {
10306
10312
  e.on(ne.HEALTH_SNAPSHOT, (t) => {
10307
10313
  z.getState().setHealthSnapshot(t);
10308
10314
  }), e.on(ne.BUFFER_STATUS, (t) => {
10309
10315
  z.getState().setBufferStatus(t);
10310
10316
  });
10311
10317
  }
10312
- function Fp(e) {
10313
- Ap(e), Mp(e), Ip(e), $p(e), Lp(e), Op(e), Dp(e), Np(e), e.on(ne.ERROR, (t) => {
10318
+ function Up(e) {
10319
+ Pp(e), Ip(e), Lp(e), Fp(e), Op(e), Dp(e), Np(e), $p(e), e.on(ne.ERROR, (t) => {
10314
10320
  const r = t?.code || "error/unknown";
10315
10321
  if (r === "conflict" && t?.message === "sprite_held_by_you") {
10316
10322
  Ia = !0, C("socket", "sprite held by this account's other connection: keeping the server-assigned sprite");
10317
10323
  return;
10318
10324
  }
10319
10325
  if (r === "conflict" && t?.message === "sprite_taken") {
10320
- if (dp(te?.id)) {
10326
+ if (fp(te?.id)) {
10321
10327
  C("socket", "sprite_taken: stale, the server already has our sprite");
10322
10328
  return;
10323
10329
  }
10324
10330
  cr = !0;
10325
10331
  let o;
10326
10332
  try {
10327
- o = up();
10333
+ o = dp();
10328
10334
  } finally {
10329
10335
  cr = !1;
10330
10336
  }
@@ -10355,15 +10361,15 @@ function Fp(e) {
10355
10361
  (r.startsWith("auth/") ? re : tt)("socket", `Server error: ${a}`, { code: r, raw: t }), z.getState().pushToast("error", a);
10356
10362
  });
10357
10363
  }
10358
- function Wm(e, t) {
10364
+ function Gm(e, t) {
10359
10365
  Ce().emit(ne.CHAT_SEND, t?.length ? { text: e, images: t } : { text: e });
10360
10366
  }
10361
- function Up() {
10367
+ function Bp() {
10362
10368
  Ne || (Ne = { ts: Date.now() }, Ce().emit(ne.TIME_PING, {}), Fe = setTimeout(() => {
10363
10369
  Ne && (C("socket", "Time ping timed out after 10s, clearing inflight"), Ne = null), Fe = null;
10364
10370
  }, 1e4));
10365
10371
  }
10366
- function Gm(e) {
10372
+ function Km(e) {
10367
10373
  const t = z.getState(), r = t.me.clientId;
10368
10374
  if (!r || !t.roster[r]) {
10369
10375
  io(e), C("socket", "Avatar change before join: the join will carry it", { sprite: e });
@@ -10378,7 +10384,7 @@ function Gm(e) {
10378
10384
  const n = z.getState(), a = { avatar: !0 };
10379
10385
  n.sprite && n.sprite !== t.sprite && (a.sprite = n.sprite), n.name && n.name !== t.name && (a.name = n.name), C("socket", "Sending avatar change", a), Ce().emit(ne.IDENTITY_UPDATE, a);
10380
10386
  }
10381
- function Km(e, t) {
10387
+ function Ym(e, t) {
10382
10388
  const r = {};
10383
10389
  e && (r.name = e), !(!r.name && !r.sprite) && (C("socket", "Sending identity update", r), Ce().emit(ne.IDENTITY_UPDATE, r));
10384
10390
  }
@@ -10394,14 +10400,14 @@ z.subscribe((e, t) => {
10394
10400
  const o = {};
10395
10401
  a && (o.name = e.name, Dr.name = e.name), i && (o.sprite = e.sprite, Dr.sprite = e.sprite), C("socket", "Identity reassert (store change)", o), te?.connected ? te.emit(ne.IDENTITY_UPDATE, o) : Ce().emit(ne.IDENTITY_UPDATE, o);
10396
10402
  });
10397
- function Bp() {
10398
- Yr && (clearInterval(Yr), Yr = null), Fe && (clearTimeout(Fe), Fe = null), Ne = null, wt.unansweredSince = null, wt.lastTickAt = null;
10399
- }
10400
10403
  function jp() {
10401
- C("socket", "clearJoinState called", { hadPayload: rt !== null, room_key: rt?.room_key }), rt = null, Kt = !1, La = null;
10404
+ Xr && (clearInterval(Xr), Xr = null), Fe && (clearTimeout(Fe), Fe = null), Ne = null, wt.unansweredSince = null, wt.lastTickAt = null;
10402
10405
  }
10403
10406
  function zp() {
10404
- C("socket", "leaveRoom called", { room_key: rt?.room_key }), jp(), Bp(), te && (te.disconnect(), te = null), z.setState({
10407
+ C("socket", "clearJoinState called", { hadPayload: rt !== null, room_key: rt?.room_key }), rt = null, Kt = !1, La = null;
10408
+ }
10409
+ function Hp() {
10410
+ C("socket", "leaveRoom called", { room_key: rt?.room_key }), zp(), jp(), te && (te.disconnect(), te = null), z.setState({
10405
10411
  me: { clientId: null, nextClientSeq: 1 },
10406
10412
  roster: {},
10407
10413
  snapshot: { roomId: null, mediaId: null, playheadMs: 0, playing: !1, serverSeq: 0, leaderId: null },
@@ -10416,53 +10422,53 @@ function zp() {
10416
10422
  activeGameId: null
10417
10423
  });
10418
10424
  }
10419
- function Ym(e) {
10425
+ function Xm(e) {
10420
10426
  C("playlist", "Emitting playlist_load", { playlistId: e }), Ce().emit(et.LOAD, { playlistId: e });
10421
10427
  }
10422
- function Xm(e) {
10428
+ function Jm(e) {
10423
10429
  C("playlist", "Emitting playlist_select", { index: e }), Ce().emit(et.SELECT, { index: e });
10424
10430
  }
10425
- function Jm(e, t, r) {
10431
+ function Qm(e, t, r) {
10426
10432
  C("playlist", "Emitting playlist_vote_update", { playlistId: e, mediaId: t, vote: r }), Ce().emit(et.VOTE_UPDATE, { playlistId: e, mediaId: t, vote: r });
10427
10433
  }
10428
- function Qm() {
10434
+ function Zm() {
10429
10435
  C("chat", "Emitting recap_request"), Ce().emit("recap_request");
10430
10436
  }
10431
- function Zm() {
10437
+ function eg() {
10432
10438
  C("playlist", "Emitting playlist_reveal_request"), Ce().emit(et.REVEAL_REQUEST, {});
10433
10439
  }
10434
- function eg(e) {
10440
+ function tg(e) {
10435
10441
  C("playlist", "Emitting playlist_vote_remove", { voterKey: e }), Ce().emit(et.VOTE_REMOVE, { voterKey: e });
10436
10442
  }
10437
- function tg(e) {
10443
+ function rg(e) {
10438
10444
  La = e, Ce().emit(ne.CLIENT_READY, { media_id: e }), C("socket", "client_ready emitted", { mediaId: e });
10439
10445
  }
10440
- function Hp(e) {
10446
+ function qp(e) {
10441
10447
  if (!e || e === "/" || document.querySelector(`link[rel="preconnect"][href="${e}"]`)) return;
10442
10448
  const t = document.createElement("link");
10443
10449
  t.rel = "preconnect", t.href = e, t.crossOrigin = "anonymous", document.head.appendChild(t);
10444
10450
  }
10445
- function qp(e, t, r) {
10451
+ function Vp(e, t, r) {
10446
10452
  const n = Zs(e), a = r ? /* @__PURE__ */ F(st.StrictMode, { children: t }) : t;
10447
10453
  return n.render(a), n;
10448
10454
  }
10449
10455
  let Pt = null, Mt = null;
10450
10456
  const Bs = import.meta.url.replace(/[^/]*$/, "");
10451
- function Vp(e) {
10457
+ function Wp(e) {
10452
10458
  return !e.filename || !e.filename.startsWith(Bs) ? !1 : !/^ResizeObserver loop/.test(e.message ?? "");
10453
10459
  }
10454
- function rg(e, t = {}) {
10460
+ function ng(e, t = {}) {
10455
10461
  const { basename: r, strictMode: n = !1, ...a } = t;
10456
10462
  Nd(), Id({
10457
10463
  serverOrigin: a.serverOrigin,
10458
10464
  defaultRoomKey: a.defaultRoomKey,
10459
10465
  cdnBase: a.cdnBase
10460
- }), th(), Qd({
10466
+ }), hh(), Qd({
10461
10467
  userType: a.userType,
10462
10468
  userId: a.userId
10463
10469
  }), z.getState().rehydrateFromPrefs();
10464
10470
  try {
10465
- const c = un() || "public", f = cn(), h = typeof localStorage < "u" ? localStorage : null, g = h?.getItem("watchparty_preferences"), y = h && c !== "public" ? h.getItem(`watchparty_preferences:${c}`) : null, S = f ? h?.getItem(`prefs-cache:${f}:portfolio`) : null, T = f ? h?.getItem(`prefs-cache:${f}:watchparty`) : null, v = z.getState();
10471
+ const c = dn() || "public", f = un(), h = typeof localStorage < "u" ? localStorage : null, g = h?.getItem("watchparty_preferences"), y = h && c !== "public" ? h.getItem(`watchparty_preferences:${c}`) : null, S = f ? h?.getItem(`prefs-cache:${f}:portfolio`) : null, T = f ? h?.getItem(`prefs-cache:${f}:watchparty`) : null, v = z.getState();
10466
10472
  C("boot", "prefs.beacon", {
10467
10473
  uid: c,
10468
10474
  sdkUid: f,
@@ -10481,129 +10487,129 @@ function rg(e, t = {}) {
10481
10487
  }).catch((c) => re("boot", "prefs sync threw", $e(c))), Pt || (Pt = (c) => {
10482
10488
  tt("app", "Unhandled promise rejection", { reason: String(c.reason) });
10483
10489
  }, window.addEventListener("unhandledrejection", Pt)), Mt || (Mt = (c) => {
10484
- Vp(c) && tt("app", "Uncaught error", {
10490
+ Wp(c) && tt("app", "Uncaught error", {
10485
10491
  message: c.message,
10486
10492
  source: `${c.filename.slice(Bs.length)}:${c.lineno}:${c.colno}`,
10487
10493
  stack: c.error instanceof Error ? c.error.stack?.slice(0, 1500) : void 0
10488
10494
  });
10489
- }, window.addEventListener("error", Mt)), a.serverOrigin && Hp(a.serverOrigin);
10495
+ }, window.addEventListener("error", Mt)), a.serverOrigin && qp(a.serverOrigin);
10490
10496
  const i = _a().theme;
10491
10497
  i && rl.includes(i) && nl(i), Jd().catch((c) => re("boot", "display names load threw", $e(c))), e.__watchparty?.root.unmount();
10492
- const o = eh({
10498
+ const o = fh({
10493
10499
  basename: r,
10494
10500
  appProps: a
10495
- }), l = { root: qp(e, /* @__PURE__ */ F(Mu, { router: o }), n) };
10501
+ }), l = { root: Vp(e, /* @__PURE__ */ F(Mu, { router: o }), n) };
10496
10502
  return e.__watchparty = l, o;
10497
10503
  }
10498
- function ng(e) {
10504
+ function ag(e) {
10499
10505
  const t = e.__watchparty;
10500
- t && (t.root.unmount(), delete e.__watchparty, zp(), Pt && (window.removeEventListener("unhandledrejection", Pt), Pt = null), Mt && (window.removeEventListener("error", Mt), Mt = null));
10506
+ t && (t.root.unmount(), delete e.__watchparty, Hp(), Pt && (window.removeEventListener("unhandledrejection", Pt), Pt = null), Mt && (window.removeEventListener("error", Mt), Mt = null));
10501
10507
  }
10502
10508
  export {
10503
- nm as $,
10504
- Tf as A,
10509
+ am as $,
10510
+ $f as A,
10505
10511
  _a as B,
10506
10512
  Jt as C,
10507
10513
  fa as D,
10508
10514
  ki as E,
10509
- un as F,
10510
- Vm as G,
10511
- om as H,
10512
- im as I,
10513
- ln as J,
10514
- qm as K,
10515
- Jr as L,
10516
- xn as M,
10517
- Hm as N,
10518
- am as O,
10519
- cp as P,
10520
- Fm as Q,
10521
- lp as R,
10522
- _m as S,
10523
- tm as T,
10524
- Bm as U,
10525
- gp as V,
10526
- Gm as W,
10515
+ dn as F,
10516
+ Wm as G,
10517
+ sm as H,
10518
+ om as I,
10519
+ cn as J,
10520
+ Vm as K,
10521
+ Qr as L,
10522
+ Cn as M,
10523
+ qm as N,
10524
+ im as O,
10525
+ up as P,
10526
+ Um as Q,
10527
+ cp as R,
10528
+ Em as S,
10529
+ rm as T,
10530
+ jm as U,
10531
+ yp as V,
10532
+ Km as W,
10527
10533
  $e as X,
10528
- on as Y,
10534
+ sn as Y,
10529
10535
  Ce as Z,
10530
10536
  ne as _,
10531
- Sm as a,
10532
- dm as a0,
10533
- Am as a1,
10534
- km as a2,
10535
- hm as a3,
10536
- fm as a4,
10537
- lm as a5,
10538
- rm as a6,
10539
- ym as a7,
10540
- mm as a8,
10541
- gm as a9,
10542
- wm as aA,
10543
- Ym as aB,
10544
- Cm as aC,
10537
+ Rm as a,
10538
+ fm as a0,
10539
+ Om as a1,
10540
+ Lm as a2,
10541
+ pm as a3,
10542
+ hm as a4,
10543
+ cm as a5,
10544
+ nm as a6,
10545
+ vm as a7,
10546
+ gm as a8,
10547
+ ym as a9,
10548
+ _m as aA,
10549
+ Xm as aB,
10550
+ km as aC,
10545
10551
  ya as aD,
10546
- eg as aE,
10552
+ tg as aE,
10547
10553
  Ot as aF,
10548
10554
  ef as aG,
10549
10555
  Ue as aH,
10550
- Jm as aI,
10551
- Zm as aJ,
10552
- Xm as aK,
10556
+ Qm as aI,
10557
+ eg as aJ,
10558
+ Jm as aK,
10553
10559
  ba as aL,
10554
- rg as aM,
10555
- ng as aN,
10556
- eh as aO,
10557
- pm as aa,
10558
- xm as ab,
10559
- em as ac,
10560
- zm as ad,
10561
- Hf as ae,
10560
+ ng as aM,
10561
+ ag as aN,
10562
+ fh as aO,
10563
+ mm as aa,
10564
+ Cm as ab,
10565
+ tm as ac,
10566
+ Hm as ad,
10567
+ th as ae,
10562
10568
  Ld as af,
10563
10569
  is as ag,
10564
- sm as ah,
10565
- cm as ai,
10566
- Qp as aj,
10567
- Nm as ak,
10568
- vm as al,
10569
- sp as am,
10570
+ lm as ah,
10571
+ um as ai,
10572
+ Zp as aj,
10573
+ $m as ak,
10574
+ bm as al,
10575
+ lp as am,
10570
10576
  td as an,
10571
- um as ao,
10572
- tg as ap,
10577
+ dm as ao,
10578
+ rg as ap,
10573
10579
  as as aq,
10574
10580
  Lt as ar,
10575
10581
  ws as as,
10576
10582
  Cc as at,
10577
10583
  Jd as au,
10578
10584
  lf as av,
10579
- Um as aw,
10580
- jm as ax,
10581
- jn as ay,
10582
- bm as az,
10583
- Dm as b,
10584
- Lm as c,
10585
+ Bm as aw,
10586
+ zm as ax,
10587
+ zn as ay,
10588
+ wm as az,
10589
+ Im as b,
10590
+ Pm as c,
10585
10591
  C as d,
10586
10592
  tt as e,
10587
- Em as f,
10593
+ Sm as f,
10588
10594
  Md as g,
10589
- Rf as h,
10595
+ Nf as h,
10590
10596
  Ho as i,
10591
- Om as j,
10597
+ Mm as j,
10592
10598
  es as k,
10593
- $m as l,
10594
- Rm as m,
10595
- Im as n,
10596
- Qm as o,
10597
- Zp as p,
10599
+ Fm as l,
10600
+ Tm as m,
10601
+ Am as n,
10602
+ Zm as o,
10603
+ em as p,
10598
10604
  $u as q,
10599
- Tm as r,
10600
- Wm as s,
10601
- Pm as t,
10605
+ xm as r,
10606
+ Gm as s,
10607
+ Dm as t,
10602
10608
  z as u,
10603
- zp as v,
10609
+ Hp as v,
10604
10610
  re as w,
10605
- Km as x,
10606
- Yf as y,
10611
+ Ym as x,
10612
+ sh as y,
10607
10613
  dd as z
10608
10614
  };
10609
- //# sourceMappingURL=index-CXl-xAUD.js.map
10615
+ //# sourceMappingURL=index-ByvPQ_Xq.js.map