@ikonai/sdk-react-ui 1.7.0 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import { IkonUiCore as e, LiveSnapshotCache as t, UiStreamStore as n, UiStreamStore as r, isPrerenderVisible as i, prefetchBootSnapshot as a } from "@ikonai/sdk-ui";
2
- import { AccessDeniedError as o, AppStartupFailedError as s, AuthenticationError as c, IKON_INSPECT_MODE_CHANGED_EVENT as l, IKON_PARAM_OAUTH_CODE as u, IKON_PARAM_OAUTH_PKCE as d, IKON_PARAM_OAUTH_PROVIDER as f, IKON_PARAM_OAUTH_TOKEN as p, IkonClient as m, LogLevel as h, ProvisioningTimeoutError as g, ServerFullError as _, ServerUnavailableError as ee, SessionNotFoundError as v, abortSignalTimeout as y, adoptPkceVerifierFromUrl as b, clearLoginPrompt as x, createLogger as S, createPkceChallenge as te, deriveAuthUrl as C, deriveBackendType as ne, deriveCrossOriginAuthUrl as re, extractUserIdFromToken as ie, getDebugOverlayParam as w, getLangParam as ae, getLoginPromptState as T, getOrCreateDeviceId as oe, getSameOriginAuthUrl as E, getSignedOutParam as se, getUrlWithoutSession as ce, isCloudEnvironment as le, isDebugModeEnabled as ue, isEmbedded as de, isInspectModeEnabled as fe, onEmbeddedOAuthResult as pe, parseUrlParams as me, randomUuid as he, reportConnectTimeline as ge, restorePkceVerifier as _e, setLoginPromptRequired as ve, startEmbeddedOAuthSignIn as ye, subscribeLoginPrompt as be, subscribeToLogEvents as xe, takePkceVerifier as Se } from "@ikonai/sdk";
3
- import { Fragment as Ce, createContext as we, memo as D, use as Te, useCallback as O, useEffect as k, useLayoutEffect as A, useMemo as j, useReducer as Ee, useRef as M, useState as N, useSyncExternalStore as De } from "react";
4
- import { Fragment as Oe, jsx as P, jsxs as F } from "react/jsx-runtime";
2
+ import { AccessDeniedError as o, AppStartupFailedError as s, AuthenticationError as c, DEFAULT_LOCAL_SERVER_HOST as l, DEFAULT_LOCAL_SERVER_PORT as u, DEFAULT_SLOW_CONNECTION_THRESHOLD_MS as d, IKON_INSPECT_MODE_CHANGED_EVENT as f, IKON_PARAM_OAUTH_CODE as p, IKON_PARAM_OAUTH_PKCE as m, IKON_PARAM_OAUTH_PROVIDER as h, IKON_PARAM_OAUTH_TOKEN as g, IkonClient as _, LogLevel as v, ProvisioningTimeoutError as y, ServerFullError as ee, ServerUnavailableError as te, SessionNotFoundError as b, abortSignalTimeout as x, adoptPkceVerifierFromUrl as ne, clearLoginPrompt as re, createLogger as S, createPkceChallenge as ie, deriveAuthUrl as C, deriveBackendType as ae, deriveCrossOriginAuthUrl as oe, extractUserIdFromToken as se, getDebugOverlayParam as w, getLangParam as ce, getLoginPromptState as T, getOrCreateDeviceId as le, getSameOriginAuthUrl as E, getSignedOutParam as ue, getUrlWithoutSession as de, isCloudEnvironment as fe, isDebugModeEnabled as pe, isEmbedded as me, isInspectModeEnabled as he, onEmbeddedOAuthResult as ge, parseUrlParams as _e, randomUuid as ve, reportConnectTimeline as ye, restorePkceVerifier as be, setLoginPromptRequired as xe, startEmbeddedOAuthSignIn as Se, subscribeLoginPrompt as Ce, subscribeToLogEvents as we, takePkceVerifier as Te } from "@ikonai/sdk";
3
+ import { Fragment as Ee, createContext as De, memo as D, use as Oe, useCallback as O, useEffect as k, useLayoutEffect as A, useMemo as j, useReducer as ke, useRef as M, useState as N, useSyncExternalStore as Ae } from "react";
4
+ import { Fragment as je, jsx as P, jsxs as F } from "react/jsx-runtime";
5
5
  //#region src/renderer/use-root-view.ts
6
- function ke(e, t) {
7
- let n = De((t) => e.subscribe(t), () => {
6
+ function Me(e, t) {
7
+ let n = Ae((t) => e.subscribe(t), () => {
8
8
  let n = e.getSnapshot(), r = t ?? n.rootViewId, i = r ? n.views.get(r) : void 0;
9
9
  return `${r ?? ""}:${i?.id ?? ""}`;
10
10
  }, () => {
@@ -22,7 +22,7 @@ function ke(e, t) {
22
22
  //#endregion
23
23
  //#region src/renderer/use-ui-node.ts
24
24
  function I(e, t) {
25
- let n = De((n) => e.subscribeNode(t, n), () => e.getNodeVersion(t), () => e.getNodeVersion(t));
25
+ let n = Ae((n) => e.subscribeNode(t, n), () => e.getNodeVersion(t), () => e.getNodeVersion(t));
26
26
  return j(() => e.getNode(t), [
27
27
  e,
28
28
  t,
@@ -31,8 +31,8 @@ function I(e, t) {
31
31
  }
32
32
  //#endregion
33
33
  //#region src/renderer/ui-renderer.tsx
34
- var Ae = S("UIRenderer");
35
- function je(e) {
34
+ var Ne = S("UIRenderer");
35
+ function Pe(e) {
36
36
  if (e === void 0) return "{}";
37
37
  if (typeof e == "string") return e;
38
38
  try {
@@ -41,33 +41,35 @@ function je(e) {
41
41
  return "{}";
42
42
  }
43
43
  }
44
- function Me(e) {
44
+ function Fe(e) {
45
45
  let t = e.styleIds;
46
46
  return Array.isArray(t) ? t : [];
47
47
  }
48
- var Ne = 1500;
49
- function Pe(e) {
48
+ var Ie = 1500, Le = 8e3;
49
+ function Re(e) {
50
50
  let [t, n] = N(0);
51
51
  return k(() => {
52
52
  if (e.subscribe) return e.subscribe(() => n((e) => e + 1));
53
53
  }, [e]), t;
54
54
  }
55
- function Fe({ nodeType: e, nodeId: t, context: n, className: r }) {
56
- let [i, a] = N(!1), o = I(n.store, t), s = Pe(n.library), c = j(() => o ? n.library.resolve(o) : void 0, [
55
+ function ze({ nodeType: e, nodeId: t, context: n, className: r }) {
56
+ let [i, a] = N(!1), [o, s] = N(!1), c = I(n.store, t), l = Re(n.library), u = j(() => c ? n.library.resolve(c) : void 0, [
57
57
  n.library,
58
- o,
59
- s
58
+ c,
59
+ l
60
60
  ]);
61
61
  return k(() => {
62
- let e = setTimeout(() => a(!0), Ne);
63
- return () => clearTimeout(e);
62
+ let e = setTimeout(() => a(!0), Ie), t = setTimeout(() => s(!0), Le);
63
+ return () => {
64
+ clearTimeout(e), clearTimeout(t);
65
+ };
64
66
  }, [e]), k(() => {
65
- !i || c || Ae.error(`No React resolver is registered for node type '${e}', so it renders as an error placeholder instead of the component you expected. A custom node needs all four parts: (1) the React component, (2) a resolver that matches '${e}', (3) a registerModule(...) call for it in app.tsx, and (4) the C# view.AddNode("${e}", ...) extension. Prefer native view.* components where they fit.`);
67
+ !o || u || Ne.error(`No React resolver is registered for node type '${e}', so it renders as an error placeholder instead of the component you expected. A custom node needs all four parts: (1) the React component, (2) a resolver that matches '${e}', (3) a registerModule(...) call for it in app.tsx, and (4) the C# view.AddNode("${e}", ...) extension. Prefer native view.* components where they fit.`);
66
68
  }, [
67
- i,
68
- c,
69
+ o,
70
+ u,
69
71
  e
70
- ]), c ? /* @__PURE__ */ P(c, {
72
+ ]), u ? /* @__PURE__ */ P(u, {
71
73
  nodeId: t,
72
74
  context: n,
73
75
  className: r
@@ -75,6 +77,7 @@ function Fe({ nodeType: e, nodeId: t, context: n, className: r }) {
75
77
  "data-ikon-node-id": t,
76
78
  "data-ikon-unresolved-node": e,
77
79
  role: "alert",
80
+ className: r,
78
81
  style: {
79
82
  padding: "12px 16px",
80
83
  border: "2px dashed #ef4444",
@@ -87,69 +90,69 @@ function Fe({ nodeType: e, nodeId: t, context: n, className: r }) {
87
90
  children: `Unregistered node type: ${e}\nNo React resolver is registered for it — register the component's module in app.tsx (see the console for details).`
88
91
  }) : null;
89
92
  }
90
- function Ie(e) {
93
+ function Be(e) {
91
94
  let t = e.children;
92
95
  return Array.isArray(t) ? t : [];
93
96
  }
94
- function Le(e, t) {
97
+ function Ve(e, t) {
95
98
  return e.nodeId === t.nodeId && e.context === t.context;
96
99
  }
97
- function Re(e) {
100
+ function He(e) {
98
101
  if (e.length === 0) return "";
99
102
  if (e.length === 1) return e[0].id;
100
103
  let t = e[0].id;
101
104
  for (let n = 1; n < e.length; n++) t += "," + e[n].id;
102
105
  return t;
103
106
  }
104
- var ze = D(function e({ nodeId: t, context: n }) {
105
- let r = I(n.store, t), i = r ? Ie(r) : [], a = Re(i), o = j(() => i.length === 0 ? null : i.map((t) => /* @__PURE__ */ P(e, {
107
+ var L = D(function e({ nodeId: t, context: n }) {
108
+ let r = I(n.store, t), i = r ? Be(r) : [], a = He(i), o = j(() => i.length === 0 ? null : i.map((t) => /* @__PURE__ */ P(e, {
106
109
  nodeId: t.id,
107
110
  context: n
108
111
  }, t.id)), [a, n]);
109
112
  if (!r) return null;
110
- if (r.type === "root") return /* @__PURE__ */ P(Ce, { children: o }, r.id);
111
- let s = Me(r), c = s.length > 0 ? s.join(" ") : void 0, l = n.library.resolve(r);
113
+ if (r.type === "root") return /* @__PURE__ */ P(Ee, { children: o }, r.id);
114
+ let s = Fe(r), c = s.length > 0 ? s.join(" ") : void 0, l = n.library.resolve(r);
112
115
  return l ? /* @__PURE__ */ P(l, {
113
116
  nodeId: t,
114
117
  context: n,
115
118
  className: c
116
- }) : /* @__PURE__ */ P(Fe, {
119
+ }) : /* @__PURE__ */ P(ze, {
117
120
  nodeType: r.type,
118
121
  nodeId: r.id,
119
122
  context: n,
120
123
  className: c
121
124
  });
122
- }, Le);
123
- function L(e, t) {
124
- return !Array.isArray(e) || e.length === 0 ? null : e.map((e) => /* @__PURE__ */ P(ze, {
125
+ }, Ve);
126
+ function Ue(e, t) {
127
+ return !Array.isArray(e) || e.length === 0 ? null : e.map((e) => /* @__PURE__ */ P(L, {
125
128
  nodeId: e.id,
126
129
  context: t
127
130
  }, e.id));
128
131
  }
129
- function Be(e, t) {
132
+ function We(e, t) {
130
133
  return e.store === t.store && e.library === t.library && e.viewId === t.viewId && e.emptyFallback === t.emptyFallback;
131
134
  }
132
- var Ve = D(function({ store: e, library: t, viewId: n, emptyFallback: r = null, onAction: i, client: a, video: o }) {
133
- let { rootViewId: s, rootNodeId: c } = ke(e, n), l = M(i);
135
+ var Ge = D(function({ store: e, library: t, viewId: n, emptyFallback: r = null, onAction: i, client: a, video: o }) {
136
+ let { rootViewId: s, rootNodeId: c } = Me(e, n), l = M(i);
134
137
  l.current = i;
135
138
  let u = M(a);
136
139
  u.current = a;
137
140
  let d = M(o);
138
141
  d.current = o;
139
- let f = O((e, t) => {
142
+ let f = O((e, t, n) => {
140
143
  if (!e) return;
141
- let n = je(t);
142
- l.current?.(e, n);
144
+ let r = Pe(t);
145
+ l.current?.(e, r, n);
143
146
  }, []), p = j(() => {
144
147
  let n = {
145
148
  store: e,
146
149
  library: t,
147
150
  handlerCache: e.handlerCache,
148
151
  getPayload: (t) => e.getSnapshot().payloads.get(t),
149
- renderChildren: (e) => L(e, n),
152
+ renderChildren: (e) => Ue(e, n),
150
153
  renderView: (t) => {
151
154
  let r = e.getSnapshot().views.get(t);
152
- return r ? /* @__PURE__ */ P(ze, {
155
+ return r ? /* @__PURE__ */ P(L, {
153
156
  nodeId: r.id,
154
157
  context: n
155
158
  }) : null;
@@ -171,12 +174,12 @@ var Ve = D(function({ store: e, library: t, viewId: n, emptyFallback: r = null,
171
174
  return !s || !c ? r : /* @__PURE__ */ P("div", {
172
175
  "data-ikon-view-id": s,
173
176
  style: { display: "contents" },
174
- children: /* @__PURE__ */ P(ze, {
177
+ children: /* @__PURE__ */ P(L, {
175
178
  nodeId: c,
176
179
  context: p
177
180
  })
178
181
  });
179
- }, Be), He = class {
182
+ }, We), Ke = class {
180
183
  fallback;
181
184
  renderers = /* @__PURE__ */ new Map();
182
185
  listeners = /* @__PURE__ */ new Set();
@@ -201,27 +204,27 @@ var Ve = D(function({ store: e, library: t, viewId: n, emptyFallback: r = null,
201
204
  for (let e of this.listeners) e();
202
205
  }
203
206
  };
204
- function Ue(e, t) {
205
- return new He(Object.entries(e), t);
207
+ function qe(e, t) {
208
+ return new Ke(Object.entries(e), t);
206
209
  }
207
210
  //#endregion
208
211
  //#region src/renderer/use-ui-store.ts
209
- function We(e) {
210
- return De((t) => e.subscribe(t), () => e.getSnapshot(), () => e.getSnapshot());
212
+ function Je(e) {
213
+ return Ae((t) => e.subscribe(t), () => e.getSnapshot(), () => e.getSnapshot());
211
214
  }
212
215
  //#endregion
213
216
  //#region src/inspect/inspect-overlay.tsx
214
- function Ge() {
215
- let [e, t] = N(fe), n = M(!1);
217
+ function Ye() {
218
+ let [e, t] = N(he), n = M(!1);
216
219
  return k(() => {
217
220
  if (e) return;
218
221
  let r = () => {
219
- fe() && t(!0);
222
+ he() && t(!0);
220
223
  }, i = (e) => {
221
224
  e.data?.type === "ikon-inspect-mode" && e.data.enabled && (n.current = !0, t(!0));
222
225
  };
223
- return window.addEventListener(l, r), window.addEventListener("message", i), () => {
224
- window.removeEventListener(l, r), window.removeEventListener("message", i);
226
+ return window.addEventListener(f, r), window.addEventListener("message", i), () => {
227
+ window.removeEventListener(f, r), window.removeEventListener("message", i);
225
228
  };
226
229
  }, [e]), k(() => {
227
230
  if (!e) return;
@@ -351,11 +354,11 @@ function Ge() {
351
354
  }
352
355
  //#endregion
353
356
  //#region src/surface.tsx
354
- var Ke = S("IkonUiSurface"), qe = "ikon-ui";
355
- function R(e, t) {
357
+ var Xe = S("IkonUiSurface"), R = "ikon-ui";
358
+ function Ze(e, t) {
356
359
  return e === t;
357
360
  }
358
- var Je = D(function({ stores: e, registry: t, category: n = qe, onAction: r, client: i }) {
361
+ var z = D(function({ stores: e, registry: t, category: n = R, onAction: r, client: i }) {
359
362
  let a = j(() => Array.from(e.keys()).sort().join(","), [e]), o = M(r);
360
363
  o.current = r;
361
364
  let s = M(i);
@@ -364,7 +367,7 @@ var Je = D(function({ stores: e, registry: t, category: n = qe, onAction: r, cli
364
367
  let t = [];
365
368
  for (let [r, i] of e) {
366
369
  let e = i.store.getSnapshot();
367
- R(i.category, n) && (!e.rootViewId || !e.views.has(e.rootViewId) || t.push({
370
+ Ze(i.category, n) && (!e.rootViewId || !e.views.has(e.rootViewId) || t.push({
368
371
  key: r,
369
372
  store: i.store
370
373
  }));
@@ -376,15 +379,15 @@ var Je = D(function({ stores: e, registry: t, category: n = qe, onAction: r, cli
376
379
  a
377
380
  ]), l = M(!1), u = c.length > 0;
378
381
  return k(() => {
379
- u && !l.current && (l.current = !0, Ke.debug("First UI render"));
380
- }, [u]), u ? /* @__PURE__ */ F(Oe, { children: [/* @__PURE__ */ P(Ge, {}), c.map(({ key: e, store: n }) => /* @__PURE__ */ P(Ve, {
382
+ u && !l.current && (l.current = !0, Xe.debug("First UI render"));
383
+ }, [u]), u ? /* @__PURE__ */ F(je, { children: [/* @__PURE__ */ P(Ye, {}), c.map(({ key: e, store: n }) => /* @__PURE__ */ P(Ge, {
381
384
  store: n,
382
385
  library: t,
383
386
  onAction: o.current,
384
387
  client: s.current,
385
388
  video: s.current?.media?.video
386
389
  }, e))] }) : null;
387
- }), Ye = class {
390
+ }), Qe = class {
388
391
  core;
389
392
  ownsCore;
390
393
  stores = /* @__PURE__ */ new Map();
@@ -456,7 +459,7 @@ var Je = D(function({ stores: e, registry: t, category: n = qe, onAction: r, cli
456
459
  let t = this.stores.get(e);
457
460
  if (t) return t;
458
461
  let n = {
459
- category: qe,
462
+ category: R,
460
463
  store: new r()
461
464
  };
462
465
  return this.stores.set(e, n), n;
@@ -476,13 +479,13 @@ var Je = D(function({ stores: e, registry: t, category: n = qe, onAction: r, cli
476
479
  };
477
480
  //#endregion
478
481
  //#region src/base/base-div.tsx
479
- function Xe(e) {
482
+ function $e(e) {
480
483
  if (typeof e == "string") {
481
484
  let t = e.trim();
482
485
  return t.length > 0 ? t : void 0;
483
486
  }
484
487
  }
485
- function z(e) {
488
+ function B(e) {
486
489
  if (typeof e == "string") {
487
490
  let t = e.trim();
488
491
  return t.length > 0 ? t : void 0;
@@ -492,7 +495,7 @@ function z(e) {
492
495
  return t.length > 0 ? t.join(" ") : void 0;
493
496
  }
494
497
  }
495
- function Ze(...e) {
498
+ function V(...e) {
496
499
  let t = "";
497
500
  for (let n of e) if (n) {
498
501
  let e = n.trim();
@@ -500,8 +503,8 @@ function Ze(...e) {
500
503
  }
501
504
  return t || void 0;
502
505
  }
503
- var B = /* @__PURE__ */ new WeakMap(), Qe = {};
504
- function $e(e) {
506
+ var H = /* @__PURE__ */ new WeakMap(), et = {};
507
+ function tt(e) {
505
508
  let t = {};
506
509
  for (let n of e.split(";")) {
507
510
  let e = n.indexOf(":");
@@ -513,28 +516,28 @@ function $e(e) {
513
516
  }
514
517
  return t;
515
518
  }
516
- function et(e, t) {
519
+ function nt(e, t) {
517
520
  let n = e && typeof e == "object" ? e : void 0;
518
521
  return t ? {
519
522
  ...n ?? {},
520
523
  cursor: t
521
524
  } : n;
522
525
  }
523
- function V(e) {
524
- if (!e) return Qe;
525
- let t = B.get(e);
526
+ function rt(e) {
527
+ if (!e) return et;
528
+ let t = H.get(e);
526
529
  if (t) return t;
527
530
  let n = {};
528
531
  for (let [t, r] of Object.entries(e)) if (r != null) {
529
532
  if (t === "style" && typeof r == "string") {
530
- n[t] = $e(r);
533
+ n[t] = tt(r);
531
534
  continue;
532
535
  }
533
536
  (typeof r == "string" || typeof r == "number" || typeof r == "boolean") && (n[t] = r);
534
537
  }
535
- return B.set(e, n), n;
538
+ return H.set(e, n), n;
536
539
  }
537
- function tt(e) {
540
+ function U(e) {
538
541
  let t = e.parentElement;
539
542
  for (; t;) {
540
543
  let e = window.getComputedStyle(t).overflowY;
@@ -543,18 +546,18 @@ function tt(e) {
543
546
  }
544
547
  return null;
545
548
  }
546
- var H = 1.5;
547
- function U(e, t, n) {
549
+ var it = 1.5;
550
+ function at(e, t, n) {
548
551
  requestAnimationFrame(() => {
549
- let r = e.getBoundingClientRect(), i = t.getBoundingClientRect(), a = e.scrollTop + (i.bottom - r.bottom) + 16, o = Math.abs(a - e.scrollTop), s = n ?? (o > e.clientHeight * H ? "auto" : "smooth");
552
+ let r = e.getBoundingClientRect(), i = t.getBoundingClientRect(), a = e.scrollTop + (i.bottom - r.bottom) + 16, o = Math.abs(a - e.scrollTop), s = n ?? (o > e.clientHeight * it ? "auto" : "smooth");
550
553
  "scrollBehavior" in document.documentElement.style ? e.scrollTo({
551
554
  top: a,
552
555
  behavior: s
553
556
  }) : e.scrollTop = a;
554
557
  });
555
558
  }
556
- var nt = 3e3;
557
- function rt(e, t) {
559
+ var ot = 3e3;
560
+ function st(e, t) {
558
561
  if (typeof ResizeObserver > "u") return () => void 0;
559
562
  let n = !1, r = () => {
560
563
  n = !0;
@@ -562,32 +565,32 @@ function rt(e, t) {
562
565
  e.addEventListener("wheel", r, i), e.addEventListener("touchmove", r, i), e.addEventListener("keydown", r, i);
563
566
  let a = e.scrollHeight, o = new ResizeObserver(() => {
564
567
  let r = e.scrollHeight > a;
565
- a = e.scrollHeight, !(!r || n || !ct(e)) && U(e, t, "auto");
568
+ a = e.scrollHeight, !(!r || n || !ft(e)) && at(e, t, "auto");
566
569
  });
567
570
  for (let t of Array.from(e.children)) o.observe(t);
568
- let s = setTimeout(r, nt);
571
+ let s = setTimeout(r, ot);
569
572
  return () => {
570
573
  clearTimeout(s), o.disconnect(), e.removeEventListener("wheel", r), e.removeEventListener("touchmove", r), e.removeEventListener("keydown", r);
571
574
  };
572
575
  }
573
- var it = "data-ikon-scroll-indicator", at = .15, ot = "data-ikon-at-bottom";
574
- function st(e) {
575
- return Math.max(e.clientHeight * at, 20);
576
+ var ct = "data-ikon-scroll-indicator", lt = .15, ut = "data-ikon-at-bottom";
577
+ function dt(e) {
578
+ return Math.max(e.clientHeight * lt, 20);
576
579
  }
577
- function ct(e) {
578
- return e.getAttribute(ot) !== "false";
580
+ function ft(e) {
581
+ return e.getAttribute(ut) !== "false";
579
582
  }
580
- function lt(e) {
581
- e.getAttribute(ot) === null && (e.setAttribute(ot, "true"), e.addEventListener("scroll", () => {
582
- let { scrollTop: t, scrollHeight: n, clientHeight: r } = e, i = n - t - r <= st(e);
583
- e.setAttribute(ot, i ? "true" : "false");
583
+ function pt(e) {
584
+ e.getAttribute(ut) === null && (e.setAttribute(ut, "true"), e.addEventListener("scroll", () => {
585
+ let { scrollTop: t, scrollHeight: n, clientHeight: r } = e, i = n - t - r <= dt(e);
586
+ e.setAttribute(ut, i ? "true" : "false");
584
587
  }, { passive: !0 }));
585
588
  }
586
- function ut(e) {
587
- let t = e.parentElement ?? e, n = t.querySelector(`[${it}]`);
589
+ function mt(e) {
590
+ let t = e.parentElement ?? e, n = t.querySelector(`[${ct}]`);
588
591
  if (n) return n;
589
592
  let r = document.createElement("button");
590
- return r.setAttribute(it, "true"), r.setAttribute("aria-label", "Scroll to latest"), r.textContent = "↓", Object.assign(r.style, {
593
+ return r.setAttribute(ct, "true"), r.setAttribute("aria-label", "Scroll to latest"), r.textContent = "↓", Object.assign(r.style, {
591
594
  position: "absolute",
592
595
  bottom: "12px",
593
596
  left: "50%",
@@ -615,36 +618,37 @@ function ut(e) {
615
618
  r.style.opacity = "0.9";
616
619
  }), t.appendChild(r), r;
617
620
  }
618
- function dt(e, t) {
619
- let n = ut(e);
621
+ function ht(e, t) {
622
+ let n = mt(e);
620
623
  n.style.display = "flex";
621
624
  let r = () => {
622
- U(e, t), n.style.display = "none";
625
+ at(e, t), n.style.display = "none";
623
626
  }, i = () => {
624
627
  let { scrollTop: t, scrollHeight: r, clientHeight: i } = e;
625
- r - t - i <= st(e) && (n.style.display = "none");
628
+ r - t - i <= dt(e) && (n.style.display = "none");
626
629
  };
627
630
  return n.addEventListener("click", r), e.addEventListener("scroll", i, { passive: !0 }), () => {
628
631
  n.removeEventListener("click", r), e.removeEventListener("scroll", i);
629
632
  };
630
633
  }
631
- function ft() {
634
+ function gt() {
632
635
  let e = D(function({ nodeId: e, context: t }) {
633
- let n = I(t.store, e), r = M(null), i = z(n?.props?.targetViewId), a = n?.props?.focusOnly, o = typeof a == "boolean" ? a : void 0, s = z(n?.props?.priority), c = z(n?.props?.key), l = n?.props?.preciseGeneratedAt;
636
+ let n = I(t.store, e), r = M(null), i = B(n?.props?.targetViewId), a = n?.props?.focusOnly, o = typeof a == "boolean" ? a : void 0, s = B(n?.props?.priority), c = B(n?.props?.key), l = n?.props?.preciseGeneratedAt;
634
637
  return k(() => {
635
638
  if (typeof document > "u") return;
636
639
  let e = r.current;
637
640
  if (!e || i && e.closest("[data-ikon-view-id]")?.getAttribute("data-ikon-view-id") !== i) return;
638
641
  let t, n;
639
642
  if (o !== !0) {
640
- let r = tt(e);
641
- if (r) if (lt(r), s === "Polite" && !ct(r)) t = dt(r, e);
642
- else {
643
- let t = (r.parentElement ?? r).querySelector(`[${it}]`);
644
- t && (t.style.display = "none"), U(r, e), n = rt(r, e);
645
- }
646
- else typeof e.scrollIntoView == "function" && requestAnimationFrame(() => {
647
- let t = e.getBoundingClientRect().top, n = typeof window < "u" ? window.innerHeight : 0, r = Math.abs(t) > n * H ? "auto" : "smooth";
643
+ let r = U(e);
644
+ if (r) {
645
+ if (pt(r), s === "Polite" && !ft(r)) t = ht(r, e);
646
+ else {
647
+ let t = (r.parentElement ?? r).querySelector(`[${ct}]`);
648
+ t && (t.style.display = "none"), at(r, e), n = st(r, e);
649
+ }
650
+ } else typeof e.scrollIntoView == "function" && requestAnimationFrame(() => {
651
+ let t = e.getBoundingClientRect().top, n = typeof window < "u" ? window.innerHeight : 0, r = Math.abs(t) > n * it ? "auto" : "smooth";
648
652
  try {
649
653
  e.scrollIntoView({
650
654
  behavior: r,
@@ -689,15 +693,15 @@ function ft() {
689
693
  if (t === "std.focus-hint") return e;
690
694
  };
691
695
  }
692
- function pt() {
696
+ function _t() {
693
697
  let e = D(function({ nodeId: e, context: t, className: n }) {
694
- let r = I(t.store, e), i = Xe(r?.props?.onInvokeId), a = O(() => {
698
+ let r = I(t.store, e), i = $e(r?.props?.onInvokeId), a = O(() => {
695
699
  i && t.dispatchAction(i);
696
700
  }, [i, t]);
697
701
  if (!r) return null;
698
- let o = V(r.props);
702
+ let o = rt(r.props);
699
703
  delete o.onInvokeId;
700
- let s = Ze(z(r.props?.className), n), c = r.children?.length ? t.renderChildren(r.children) : void 0;
704
+ let s = V(B(r.props?.className), n), c = r.children?.length ? t.renderChildren(r.children) : void 0;
701
705
  return /* @__PURE__ */ P("div", {
702
706
  ...o,
703
707
  "data-ikon-node-id": r.id,
@@ -709,7 +713,7 @@ function pt() {
709
713
  onKeyDown: i ? (e) => {
710
714
  (e.key === "Enter" || e.key === " ") && (e.preventDefault(), a());
711
715
  } : void 0,
712
- style: et(o.style, i ? "pointer" : void 0),
716
+ style: nt(o.style, i ? "pointer" : void 0),
713
717
  children: c
714
718
  });
715
719
  });
@@ -717,11 +721,11 @@ function pt() {
717
721
  if (t === "std.div") return e;
718
722
  };
719
723
  }
720
- function mt() {
724
+ function vt() {
721
725
  let e = D(function({ nodeId: e, context: t, className: n }) {
722
726
  let r = I(t.store, e);
723
727
  if (!r) return null;
724
- let i = V(r.props), a = Ze("relative", z(r.props?.className), n), o = r.children?.length ? t.renderChildren(r.children) : void 0;
728
+ let i = rt(r.props), a = V("relative", B(r.props?.className), n), o = r.children?.length ? t.renderChildren(r.children) : void 0;
725
729
  return /* @__PURE__ */ P("div", {
726
730
  ...i,
727
731
  "data-ikon-node-id": r.id,
@@ -734,11 +738,11 @@ function mt() {
734
738
  if (t === "std.stack") return e;
735
739
  };
736
740
  }
737
- function ht() {
741
+ function yt() {
738
742
  let e = D(function({ nodeId: e, context: t, className: n }) {
739
743
  let r = I(t.store, e);
740
744
  if (!r) return null;
741
- let i = V(r.props), a = Ze("absolute", z(r.props?.className), n), o = r.children?.length ? t.renderChildren(r.children) : void 0;
745
+ let i = rt(r.props), a = V("absolute", B(r.props?.className), n), o = r.children?.length ? t.renderChildren(r.children) : void 0;
742
746
  return /* @__PURE__ */ P("div", {
743
747
  ...i,
744
748
  "data-ikon-node-id": r.id,
@@ -751,23 +755,23 @@ function ht() {
751
755
  if (t === "std.layer") return e;
752
756
  };
753
757
  }
754
- function gt() {
758
+ function bt() {
755
759
  return [
756
- pt(),
757
- mt(),
758
- ht(),
759
- ft()
760
+ _t(),
761
+ vt(),
762
+ yt(),
763
+ gt()
760
764
  ];
761
765
  }
762
766
  //#endregion
763
767
  //#region src/base/base-module.ts
764
- var _t = "base", vt = async () => gt();
765
- function yt(e) {
766
- e.registerModule(_t, vt);
768
+ var xt = "base", St = async () => bt();
769
+ function Ct(e) {
770
+ e.registerModule(xt, St);
767
771
  }
768
772
  //#endregion
769
773
  //#region src/media/audio-player.tsx
770
- function bt(e) {
774
+ function wt(e) {
771
775
  if (typeof e == "string") {
772
776
  let t = e.trim();
773
777
  return t.length > 0 ? t : void 0;
@@ -777,17 +781,17 @@ function bt(e) {
777
781
  return t.length > 0 ? t.join(" ") : void 0;
778
782
  }
779
783
  }
780
- function xt(...e) {
784
+ function Tt(...e) {
781
785
  let t = [];
782
786
  for (let n of e) n && n.trim() && t.push(n.trim());
783
787
  return t.length > 0 ? t.join(" ") : void 0;
784
788
  }
785
- function St(e) {
789
+ function Et(e) {
786
790
  if (typeof e != "string") return;
787
791
  let t = e.trim();
788
792
  return t.length > 0 ? t : void 0;
789
793
  }
790
- function Ct(e) {
794
+ function Dt(e) {
791
795
  if (typeof e == "boolean") return e;
792
796
  if (typeof e == "string") {
793
797
  let t = e.trim().toLowerCase();
@@ -795,13 +799,13 @@ function Ct(e) {
795
799
  if (t === "false") return !1;
796
800
  }
797
801
  }
798
- function wt() {
802
+ function Ot() {
799
803
  let e = D(function({ nodeId: e, context: t, className: n }) {
800
- let r = I(t.store, e), i = M(null), a = r ? Ct(r.props?.autoplay) : void 0, o = r ? St(r.props?.src) : void 0;
804
+ let r = I(t.store, e), i = M(null), a = r ? Dt(r.props?.autoplay) : void 0, o = r ? Et(r.props?.src) : void 0;
801
805
  if (k(() => {
802
806
  a && i.current && i.current.play().catch(() => {});
803
807
  }, [a, o]), !r) return null;
804
- let s = xt(bt(r.props?.className), n), c = St(r.props?.preload), l = Ct(r.props?.controls), u = Ct(r.props?.loop), d = Ct(r.props?.muted);
808
+ let s = Tt(wt(r.props?.className), n), c = Et(r.props?.preload), l = Dt(r.props?.controls), u = Dt(r.props?.loop), d = Dt(r.props?.muted);
805
809
  return /* @__PURE__ */ P("audio", {
806
810
  ref: i,
807
811
  src: o,
@@ -821,7 +825,7 @@ function wt() {
821
825
  }
822
826
  //#endregion
823
827
  //#region src/media/video-stream-view.tsx
824
- var Tt = S("IkonVideoStreamView"), Et = D(function({ client: e, streamId: t, className: n, style: r, width: i, height: a, attributes: o, getPlayback: s }) {
828
+ var kt = S("IkonVideoStreamView"), At = D(function({ client: e, streamId: t, className: n, style: r, width: i, height: a, attributes: o, getPlayback: s }) {
825
829
  let c = M(null), l = M(null), [, u] = N(0);
826
830
  k(() => {
827
831
  if (e?.isWebRtcEnabled) return e.addWebRtcTrackMapListener((e) => {
@@ -837,14 +841,14 @@ var Tt = S("IkonVideoStreamView"), Et = D(function({ client: e, streamId: t, cla
837
841
  let e = o();
838
842
  if (!e) {
839
843
  if (a++ >= 50) {
840
- Tt.warn(`Gave up attaching the canvas for stream ${t}: video playback never became available`);
844
+ kt.warn(`Gave up attaching the canvas for stream ${t}: video playback never became available`);
841
845
  return;
842
846
  }
843
847
  i = setTimeout(l, 100);
844
848
  return;
845
849
  }
846
850
  e.attachCanvas(t, n).catch((e) => {
847
- Tt.error(`Failed to attach the canvas for stream ${t}, it will stay blank: ${String(e)}`);
851
+ kt.error(`Failed to attach the canvas for stream ${t}, it will stay blank: ${String(e)}`);
848
852
  });
849
853
  };
850
854
  return l(), () => {
@@ -882,7 +886,7 @@ var Tt = S("IkonVideoStreamView"), Et = D(function({ client: e, streamId: t, cla
882
886
  });
883
887
  //#endregion
884
888
  //#region src/media/video-canvas.tsx
885
- function Dt(e) {
889
+ function jt(e) {
886
890
  if (typeof e == "string") {
887
891
  let t = e.trim();
888
892
  return t.length > 0 ? t : void 0;
@@ -892,52 +896,68 @@ function Dt(e) {
892
896
  return t.length > 0 ? t.join(" ") : void 0;
893
897
  }
894
898
  }
895
- function Ot(...e) {
899
+ function Mt(...e) {
896
900
  let t = [];
897
901
  for (let n of e) n && n.trim() && t.push(n.trim());
898
902
  return t.length > 0 ? t.join(" ") : void 0;
899
903
  }
900
- function kt(e) {
904
+ function Nt(e) {
901
905
  if (typeof e == "number" && Number.isFinite(e)) return Math.floor(e);
902
906
  if (typeof e == "string" && e.trim().length > 0) {
903
907
  let t = Number(e);
904
908
  if (Number.isFinite(t)) return Math.floor(t);
905
909
  }
906
910
  }
907
- function At(e) {
911
+ function Pt(e) {
908
912
  if (typeof e != "string") return;
909
913
  let t = e.trim();
910
914
  return t.length > 0 ? t : void 0;
911
915
  }
912
- var jt = "std.video-canvas", Mt = "std.video-url-player";
913
- function Nt() {
916
+ var Ft = "std.video-canvas", It = "std.video-url-player";
917
+ function Lt() {
914
918
  let e = D(function({ nodeId: e, context: t, className: n }) {
915
- let r = I(t.store, e), i = r ? At(r.props?.streamId) : void 0, a = r ? kt(r.props?.width) : void 0, o = r ? kt(r.props?.height) : void 0, s = r ? Ot(Dt(r.props?.className), n) : n, c = O(() => t.video ?? t.client?.media?.video, [t]);
916
- return r ? /* @__PURE__ */ P(Et, {
919
+ let r = I(t.store, e), i = r ? Pt(r.props?.streamId) : void 0, a = r ? Pt(r.props?.onTapId) : void 0, o = r ? Nt(r.props?.width) : void 0, s = r ? Nt(r.props?.height) : void 0, c = r ? Mt(jt(r.props?.className), n) : n, l = O(() => t.video ?? t.client?.media?.video, [t]), u = O((e) => {
920
+ if (!a) return;
921
+ let n = e.target.getBoundingClientRect();
922
+ n.width <= 0 || n.height <= 0 || t.dispatchAction(a, {
923
+ x: Math.min(1, Math.max(0, (e.clientX - n.left) / n.width)),
924
+ y: Math.min(1, Math.max(0, (e.clientY - n.top) / n.height))
925
+ });
926
+ }, [a, t]);
927
+ if (!r) return null;
928
+ let d = /* @__PURE__ */ P(At, {
917
929
  client: t.client,
918
930
  streamId: i,
919
- className: s,
920
- width: a,
921
- height: o,
922
- getPlayback: c,
931
+ className: c,
932
+ width: o,
933
+ height: s,
934
+ getPlayback: l,
923
935
  attributes: {
924
936
  "data-ikon-node-id": r.id,
925
937
  ...r.sourceMarker ? { "data-ikon-source": r.sourceMarker } : {}
926
938
  }
927
- }) : null;
939
+ });
940
+ return a ? /* @__PURE__ */ P("div", {
941
+ style: {
942
+ display: "contents",
943
+ cursor: "pointer"
944
+ },
945
+ onPointerUp: u,
946
+ children: d
947
+ }) : d;
928
948
  });
929
949
  return ({ type: t }) => {
930
950
  if (t === "std.video-canvas") return e;
931
951
  };
932
952
  }
933
- function Pt() {
953
+ function Rt() {
934
954
  return [
935
- Nt(),
936
- It(),
937
- wt()
955
+ Lt(),
956
+ Bt(),
957
+ Ot()
938
958
  ];
939
959
  }
940
- function Ft(e) {
960
+ function zt(e) {
941
961
  if (typeof e == "boolean") return e;
942
962
  if (typeof e == "string") {
943
963
  let t = e.trim().toLowerCase();
@@ -945,13 +965,13 @@ function Ft(e) {
945
965
  if (t === "false") return !1;
946
966
  }
947
967
  }
948
- function It() {
968
+ function Bt() {
949
969
  let e = D(function({ nodeId: e, context: t, className: n }) {
950
- let r = I(t.store, e), i = M(null), a = r ? Ft(r.props?.autoplay) : void 0, o = r ? At(r.props?.src) : void 0;
970
+ let r = I(t.store, e), i = M(null), a = r ? zt(r.props?.autoplay) : void 0, o = r ? Pt(r.props?.src) : void 0;
951
971
  if (k(() => {
952
972
  a && i.current && i.current.play().catch(() => {});
953
973
  }, [a, o]), !r) return null;
954
- let s = Ot(Dt(r.props?.className), n), c = At(r.props?.poster), l = Ft(r.props?.controls), u = Ft(r.props?.loop), d = Ft(r.props?.muted), f = Ft(r.props?.playsInline), p = kt(r.props?.width), m = kt(r.props?.height), h = r.children?.length ? t.renderChildren(r.children) : void 0;
974
+ let s = Mt(jt(r.props?.className), n), c = Pt(r.props?.poster), l = zt(r.props?.controls), u = zt(r.props?.loop), d = zt(r.props?.muted), f = zt(r.props?.playsInline), p = Nt(r.props?.width), m = Nt(r.props?.height), h = r.children?.length ? t.renderChildren(r.children) : void 0;
955
975
  return /* @__PURE__ */ P("video", {
956
976
  ref: i,
957
977
  src: o,
@@ -975,20 +995,20 @@ function It() {
975
995
  }
976
996
  //#endregion
977
997
  //#region src/media/media-module.ts
978
- var Lt = "media", Rt = async () => Pt();
979
- function zt(e) {
980
- e.registerModule(Lt, Rt);
998
+ var Vt = "media", Ht = async () => Rt();
999
+ function Ut(e) {
1000
+ e.registerModule(Vt, Ht);
981
1001
  }
982
1002
  //#endregion
983
1003
  //#region src/shadertoy/shadertoy-gl.ts
984
- var Bt = "#version 300 es\nin vec4 a_position;\nvoid main() {\n gl_Position = a_position;\n}\n", Vt = 4;
985
- function Ht(e, t) {
1004
+ var Wt = "#version 300 es\nin vec4 a_position;\nvoid main() {\n gl_Position = a_position;\n}\n", Gt = 4;
1005
+ function Kt(e, t) {
986
1006
  return RegExp(`\\buniform\\s+\\w+\\s+${t}\\s*;`, "g").test(e);
987
1007
  }
988
- function Ut(e, t) {
1008
+ function qt(e, t) {
989
1009
  let n = [];
990
1010
  for (let [r, i] of Object.entries(t)) {
991
- if (Ht(e, r)) continue;
1011
+ if (Kt(e, r)) continue;
992
1012
  let t;
993
1013
  switch (i.type) {
994
1014
  case "float":
@@ -1046,7 +1066,7 @@ void main() {
1046
1066
  }
1047
1067
  `;
1048
1068
  }
1049
- var Wt = class {
1069
+ var Jt = class {
1050
1070
  gl;
1051
1071
  program = null;
1052
1072
  positionBuffer = null;
@@ -1062,7 +1082,7 @@ var Wt = class {
1062
1082
  mouseClickY = 0;
1063
1083
  channels = [];
1064
1084
  channelResolution = /* @__PURE__ */ new Float32Array(12);
1065
- channelTime = new Float32Array(Vt);
1085
+ channelTime = new Float32Array(Gt);
1066
1086
  lastError = null;
1067
1087
  currentShaderSource = "";
1068
1088
  constructor(e) {
@@ -1097,7 +1117,7 @@ var Wt = class {
1097
1117
  }
1098
1118
  initializeChannels() {
1099
1119
  let e = this.gl;
1100
- for (let t = 0; t < Vt; t++) {
1120
+ for (let t = 0; t < Gt; t++) {
1101
1121
  let t = e.createTexture();
1102
1122
  e.bindTexture(e.TEXTURE_2D, t), e.texImage2D(e.TEXTURE_2D, 0, e.RGBA, 1, 1, 0, e.RGBA, e.UNSIGNED_BYTE, new Uint8Array([
1103
1123
  0,
@@ -1114,7 +1134,7 @@ var Wt = class {
1114
1134
  e.bindTexture(e.TEXTURE_2D, null);
1115
1135
  }
1116
1136
  setChannels(e) {
1117
- for (let t = 0; t < Vt; t++) {
1137
+ for (let t = 0; t < Gt; t++) {
1118
1138
  let n = e[t] ?? null, r = this.channels[t];
1119
1139
  if (r.url !== n) {
1120
1140
  if (r.url = n, !n) {
@@ -1145,9 +1165,9 @@ var Wt = class {
1145
1165
  }
1146
1166
  compile(e, t = {}) {
1147
1167
  this.lastError = null, this.customUniforms = t, this.currentShaderSource = e;
1148
- let n = this.gl, r = this.compileShader(n.VERTEX_SHADER, Bt);
1168
+ let n = this.gl, r = this.compileShader(n.VERTEX_SHADER, Wt);
1149
1169
  if (!r) return !1;
1150
- let i = Ut(e, t), a = this.compileShader(n.FRAGMENT_SHADER, i);
1170
+ let i = qt(e, t), a = this.compileShader(n.FRAGMENT_SHADER, i);
1151
1171
  if (!a) return n.deleteShader(r), !1;
1152
1172
  let o = n.createProgram();
1153
1173
  return o ? (n.attachShader(o, r), n.attachShader(o, a), n.linkProgram(o), n.deleteShader(r), n.deleteShader(a), n.getProgramParameter(o, n.LINK_STATUS) ? (this.program && n.deleteProgram(this.program), this.program = o, this.cacheUniformLocations(), !0) : (this.lastError = n.getProgramInfoLog(o) || "Program link failed", n.deleteProgram(o), !1)) : (this.lastError = "Failed to create program", n.deleteShader(r), n.deleteShader(a), !1);
@@ -1171,7 +1191,7 @@ var Wt = class {
1171
1191
  "iMouse",
1172
1192
  "iDate"
1173
1193
  ]) this.uniformLocations.set(t, e.getUniformLocation(this.program, t));
1174
- for (let t = 0; t < Vt; t++) this.uniformLocations.set(`iChannel${t}`, e.getUniformLocation(this.program, `iChannel${t}`));
1194
+ for (let t = 0; t < Gt; t++) this.uniformLocations.set(`iChannel${t}`, e.getUniformLocation(this.program, `iChannel${t}`));
1175
1195
  this.uniformLocations.set("iChannelResolution", e.getUniformLocation(this.program, "iChannelResolution[0]")), this.uniformLocations.set("iChannelTime", e.getUniformLocation(this.program, "iChannelTime[0]"));
1176
1196
  for (let t of Object.keys(this.customUniforms)) this.uniformLocations.set(t, e.getUniformLocation(this.program, t));
1177
1197
  }
@@ -1203,7 +1223,7 @@ var Wt = class {
1203
1223
  let t = /* @__PURE__ */ new Date();
1204
1224
  e.uniform4f(p, t.getFullYear(), t.getMonth(), t.getDate(), t.getHours() * 3600 + t.getMinutes() * 60 + t.getSeconds() + t.getMilliseconds() / 1e3);
1205
1225
  }
1206
- for (let t = 0; t < Vt; t++) {
1226
+ for (let t = 0; t < Gt; t++) {
1207
1227
  e.activeTexture(e.TEXTURE0 + t), e.bindTexture(e.TEXTURE_2D, this.channels[t].texture);
1208
1228
  let n = this.uniformLocations.get(`iChannel${t}`);
1209
1229
  n && e.uniform1i(n, t);
@@ -1253,7 +1273,7 @@ var Wt = class {
1253
1273
  };
1254
1274
  //#endregion
1255
1275
  //#region src/shadertoy/shadertoy-renderer.tsx
1256
- function Gt(e) {
1276
+ function Yt(e) {
1257
1277
  if (typeof e == "string") {
1258
1278
  let t = e.trim();
1259
1279
  return t.length > 0 ? t : void 0;
@@ -1263,22 +1283,22 @@ function Gt(e) {
1263
1283
  return t.length > 0 ? t.join(" ") : void 0;
1264
1284
  }
1265
1285
  }
1266
- function Kt(...e) {
1286
+ function Xt(...e) {
1267
1287
  let t = [];
1268
1288
  for (let n of e) n && n.trim() && t.push(n.trim());
1269
1289
  return t.length > 0 ? t.join(" ") : void 0;
1270
1290
  }
1271
- function qt(e) {
1291
+ function Zt(e) {
1272
1292
  if (typeof e == "number" && Number.isFinite(e)) return Math.floor(e);
1273
1293
  if (typeof e == "string" && e.trim().length > 0) {
1274
1294
  let t = Number(e);
1275
1295
  if (Number.isFinite(t)) return Math.floor(t);
1276
1296
  }
1277
1297
  }
1278
- function Jt(e) {
1298
+ function Qt(e) {
1279
1299
  return typeof e == "string" ? e : "";
1280
1300
  }
1281
- function Yt(e) {
1301
+ function $t(e) {
1282
1302
  if (typeof e == "boolean") return e;
1283
1303
  if (typeof e == "string") {
1284
1304
  let t = e.trim().toLowerCase();
@@ -1286,7 +1306,7 @@ function Yt(e) {
1286
1306
  if (t === "false") return !1;
1287
1307
  }
1288
1308
  }
1289
- function Xt(e) {
1309
+ function en(e) {
1290
1310
  if (!e || typeof e != "object") return {};
1291
1311
  let t = {}, n = e;
1292
1312
  for (let [e, r] of Object.entries(n)) {
@@ -1306,10 +1326,10 @@ function Xt(e) {
1306
1326
  }
1307
1327
  return t;
1308
1328
  }
1309
- function Zt(e) {
1329
+ function tn(e) {
1310
1330
  return Array.isArray(e) ? e.map((e) => typeof e == "string" ? e : null) : [];
1311
1331
  }
1312
- function Qt(e, t) {
1332
+ function nn(e, t) {
1313
1333
  let n = Object.keys(e), r = Object.keys(t);
1314
1334
  if (n.length !== r.length) return !1;
1315
1335
  for (let r of n) {
@@ -1323,8 +1343,8 @@ function Qt(e, t) {
1323
1343
  }
1324
1344
  return !0;
1325
1345
  }
1326
- var $t = "std.shadertoy-canvas";
1327
- function en() {
1346
+ var rn = "std.shadertoy-canvas";
1347
+ function an() {
1328
1348
  let e = D(function({ nodeId: e, context: t, className: n }) {
1329
1349
  let r = I(t.store, e), i = M(null), a = M(null), o = M(null), s = M(0), c = M(""), l = M({}), u = M({
1330
1350
  x: 0,
@@ -1332,12 +1352,12 @@ function en() {
1332
1352
  clickX: 0,
1333
1353
  clickY: 0,
1334
1354
  isDown: !1
1335
- }), d = r ? Jt(r.props?.shaderSource) : "", f = r ? qt(r.props?.fps) ?? 60 : 60, p = r?.props?.uniforms, m = j(() => Xt(p), [p]), h = r?.props?.channels, g = j(() => Zt(h), [h]), _ = r ? Yt(r.props?.enableMouse) ?? !0 : !0, ee = r ? qt(r.props?.width) : void 0, v = r ? qt(r.props?.height) : void 0, y = r ? Kt(Gt(r.props?.className), n) : n;
1355
+ }), d = r ? Qt(r.props?.shaderSource) : "", f = r ? Zt(r.props?.fps) ?? 60 : 60, p = r?.props?.uniforms, m = j(() => en(p), [p]), h = r?.props?.channels, g = j(() => tn(h), [h]), _ = r ? $t(r.props?.enableMouse) ?? !0 : !0, v = r ? Zt(r.props?.width) : void 0, y = r ? Zt(r.props?.height) : void 0, ee = r ? Xt(Yt(r.props?.className), n) : n;
1336
1356
  k(() => {
1337
1357
  let e = i.current;
1338
1358
  if (e) {
1339
1359
  try {
1340
- let t = new Wt(e);
1360
+ let t = new Jt(e);
1341
1361
  a.current = t;
1342
1362
  } catch (e) {
1343
1363
  console.error("[ShadertoyRenderer] Failed to create WebGL2 context:", e);
@@ -1348,14 +1368,16 @@ function en() {
1348
1368
  }
1349
1369
  }, []), k(() => {
1350
1370
  let e = a.current;
1351
- if (!(!e || !d) && c.current !== d) if (e.compile(d, m)) c.current = d, l.current = m;
1352
- else {
1353
- let t = e.getError();
1354
- console.error("[ShadertoyRenderer] Shader compilation failed:", t);
1371
+ if (!(!e || !d) && c.current !== d) {
1372
+ if (e.compile(d, m)) c.current = d, l.current = m;
1373
+ else {
1374
+ let t = e.getError();
1375
+ console.error("[ShadertoyRenderer] Shader compilation failed:", t);
1376
+ }
1355
1377
  }
1356
1378
  }, [d, m]), k(() => {
1357
1379
  let e = a.current;
1358
- !e || !c.current || Qt(l.current, m) || (e.setCustomUniforms(m), l.current = m);
1380
+ !e || !c.current || nn(l.current, m) || (e.setCustomUniforms(m), l.current = m);
1359
1381
  }, [m]), k(() => {
1360
1382
  let e = a.current;
1361
1383
  e && e.setChannels(g);
@@ -1370,32 +1392,32 @@ function en() {
1370
1392
  o.current !== null && (cancelAnimationFrame(o.current), o.current = null);
1371
1393
  };
1372
1394
  }, [f]);
1373
- let b = O((e) => {
1395
+ let te = O((e) => {
1374
1396
  if (!_) return;
1375
1397
  let t = i.current, n = a.current;
1376
1398
  if (!t || !n) return;
1377
1399
  let r = window.devicePixelRatio || 1, o = t.getBoundingClientRect(), s = (e.clientX - o.left) * r, c = (o.height - (e.clientY - o.top)) * r;
1378
1400
  u.current.x = s, u.current.y = c, n.setMouse(s, c, u.current.clickX, u.current.clickY);
1379
- }, [_]), x = O((e) => {
1401
+ }, [_]), b = O((e) => {
1380
1402
  if (!_) return;
1381
1403
  let t = i.current, n = a.current;
1382
1404
  if (!t || !n) return;
1383
1405
  let r = window.devicePixelRatio || 1, o = t.getBoundingClientRect(), s = (e.clientX - o.left) * r, c = (o.height - (e.clientY - o.top)) * r;
1384
1406
  u.current.isDown = !0, u.current.clickX = s, u.current.clickY = c, n.setMouse(s, c, s, c);
1385
- }, [_]), S = O(() => {
1407
+ }, [_]), x = O(() => {
1386
1408
  _ && (u.current.isDown = !1, u.current.clickX = -Math.abs(u.current.clickX));
1387
1409
  }, [_]);
1388
1410
  return r ? /* @__PURE__ */ P("canvas", {
1389
1411
  ref: i,
1390
1412
  "data-ikon-node-id": r.id,
1391
1413
  "data-ikon-source": r.sourceMarker,
1392
- className: y,
1393
- ...ee ? { width: ee } : {},
1394
- ...v ? { height: v } : {},
1395
- onMouseMove: b,
1396
- onMouseDown: x,
1397
- onMouseUp: S,
1398
- onMouseLeave: S
1414
+ className: ee,
1415
+ ...v ? { width: v } : {},
1416
+ ...y ? { height: y } : {},
1417
+ onMouseMove: te,
1418
+ onMouseDown: b,
1419
+ onMouseUp: x,
1420
+ onMouseLeave: x
1399
1421
  }) : null;
1400
1422
  });
1401
1423
  return ({ type: t }) => {
@@ -1404,13 +1426,13 @@ function en() {
1404
1426
  }
1405
1427
  //#endregion
1406
1428
  //#region src/shadertoy/shadertoy-module.ts
1407
- var tn = "shadertoy", nn = async () => en();
1408
- function rn(e) {
1409
- e.registerModule(tn, nn);
1429
+ var on = "shadertoy", sn = async () => an();
1430
+ function cn(e) {
1431
+ e.registerModule(on, sn);
1410
1432
  }
1411
1433
  //#endregion
1412
1434
  //#region src/ikon-ui-registry.ts
1413
- var an = S("UIRegistry"), on = class {
1435
+ var ln = S("UIRegistry"), un = class {
1414
1436
  baseResolvers = [];
1415
1437
  moduleLoaders = /* @__PURE__ */ new Map();
1416
1438
  moduleResolvers = /* @__PURE__ */ new Map();
@@ -1436,14 +1458,14 @@ var an = S("UIRegistry"), on = class {
1436
1458
  async loadRegisteredModules() {
1437
1459
  let e = !1;
1438
1460
  for (let [t, n] of this.moduleLoaders.entries()) if (!this.moduleResolvers.has(t)) try {
1439
- let r = ln(await n());
1461
+ let r = pn(await n());
1440
1462
  this.moduleResolvers.set(t, r), e = !0;
1441
1463
  } catch (e) {
1442
- an.error(`[IkonUiRegistry] Failed to load module '${t}'.`, e);
1464
+ ln.error(`[IkonUiRegistry] Failed to load module '${t}'.`, e);
1443
1465
  }
1444
1466
  let t = [];
1445
1467
  for (let e of this.moduleLoaders.keys()) this.moduleResolvers.has(e) && t.push(e);
1446
- return un(t, this.activeModuleOrder) || (this.activeModuleOrder = t, e = !0), e && this.notify(), e;
1468
+ return mn(t, this.activeModuleOrder) || (this.activeModuleOrder = t, e = !0), e && this.notify(), e;
1447
1469
  }
1448
1470
  resolve(e) {
1449
1471
  for (let t of this.baseResolvers) {
@@ -1453,7 +1475,7 @@ var an = S("UIRegistry"), on = class {
1453
1475
  for (let t of this.activeModuleOrder) {
1454
1476
  let n = this.moduleResolvers.get(t);
1455
1477
  if (!n) {
1456
- an.warn(`Missing resolvers for module ${t}`);
1478
+ ln.warn(`Missing resolvers for module ${t}`);
1457
1479
  continue;
1458
1480
  }
1459
1481
  for (let t of n) {
@@ -1466,25 +1488,25 @@ var an = S("UIRegistry"), on = class {
1466
1488
  for (let e of this.listeners) e();
1467
1489
  }
1468
1490
  };
1469
- function sn() {
1470
- let e = new on();
1471
- return yt(e), zt(e), rn(e), e.loadRegisteredModules(), e;
1491
+ function dn() {
1492
+ let e = new un();
1493
+ return Ct(e), Ut(e), cn(e), e.loadRegisteredModules(), e;
1472
1494
  }
1473
- function cn(e) {
1495
+ function fn(e) {
1474
1496
  return Array.isArray(e) ? e : [e];
1475
1497
  }
1476
- function ln(e) {
1477
- return e ? cn(e).flatMap((e) => e ? Array.isArray(e) ? e.filter(Boolean) : [e] : []) : [];
1498
+ function pn(e) {
1499
+ return e ? fn(e).flatMap((e) => e ? Array.isArray(e) ? e.filter(Boolean) : [e] : []) : [];
1478
1500
  }
1479
- function un(e, t) {
1501
+ function mn(e, t) {
1480
1502
  if (e.length !== t.length) return !1;
1481
1503
  for (let n = 0; n < e.length; n += 1) if (e[n] !== t[n]) return !1;
1482
1504
  return !0;
1483
1505
  }
1484
1506
  //#endregion
1485
1507
  //#region src/parallax-view.tsx
1486
- function dn({ mount: e, stores: t, registry: n, client: r, onAction: i }) {
1487
- return /* @__PURE__ */ P(Je, {
1508
+ function hn({ mount: e, stores: t, registry: n, client: r, onAction: i }) {
1509
+ return /* @__PURE__ */ P(z, {
1488
1510
  stores: t,
1489
1511
  registry: n,
1490
1512
  category: e,
@@ -1494,7 +1516,7 @@ function dn({ mount: e, stores: t, registry: n, client: r, onAction: i }) {
1494
1516
  }
1495
1517
  //#endregion
1496
1518
  //#region src/motion/motion-controller.ts
1497
- var fn = S("MotionController"), pn = {
1519
+ var gn = S("MotionController"), _n = {
1498
1520
  ease: [
1499
1521
  .25,
1500
1522
  .1,
@@ -1667,17 +1689,17 @@ var fn = S("MotionController"), pn = {
1667
1689
  function W(e) {
1668
1690
  return e <= 0 ? 0 : e >= 1 ? 1 : e;
1669
1691
  }
1670
- function mn(e) {
1692
+ function vn(e) {
1671
1693
  if (e == null) return;
1672
1694
  let t = e.trim();
1673
1695
  if (!t) return;
1674
1696
  let n = Number.parseFloat(t);
1675
1697
  return Number.isFinite(n) ? n : void 0;
1676
1698
  }
1677
- function hn(e) {
1699
+ function yn(e) {
1678
1700
  return typeof CSS < "u" && CSS.escape ? CSS.escape(e) : e.replace(/[^a-zA-Z0-9_-]/g, (e) => `\\${e}`);
1679
1701
  }
1680
- function gn(e, t, n, r) {
1702
+ function bn(e, t, n, r) {
1681
1703
  let i = 1 / 10, a = /* @__PURE__ */ new Float32Array(11);
1682
1704
  function o(e, t, n) {
1683
1705
  return ((3 * t - 3 * n + 1) * e + (3 * n - 6 * t)) * e * e + 3 * t * e;
@@ -1711,34 +1733,34 @@ function gn(e, t, n, r) {
1711
1733
  for (let t = 0; t < 11; t += 1) a[t] = o(t * i, e, n);
1712
1734
  return (e) => e <= 0 ? 0 : e >= 1 ? 1 : o(u(e), t, r);
1713
1735
  }
1714
- function _n(e) {
1736
+ function xn(e) {
1715
1737
  let t = /steps\(\s*([0-9]+)\s*(?:,\s*([a-z-]+)\s*)?\)/i.exec(e);
1716
1738
  if (!t) return (e) => W(e);
1717
1739
  let n = Math.max(1, parseInt(t[1], 10)), r = (t[2] ?? "end").toLowerCase();
1718
1740
  return r === "start" || r === "jump-start" ? (e) => W(Math.ceil(e * n) / n) : r === "none" || r === "jump-none" ? (e) => W(Math.round(e * n) / n) : r === "both" || r === "jump-both" ? (e) => W((Math.floor(e * n) + .5) / n) : (e) => W(Math.floor(e * n) / n);
1719
1741
  }
1720
- function vn(e) {
1742
+ function Sn(e) {
1721
1743
  if (!e) return (e) => W(e);
1722
1744
  let t = e.trim().toLowerCase();
1723
1745
  if (!t || t === "linear") return (e) => W(e);
1724
- if (pn[t]) {
1725
- let [e, n, r, i] = pn[t], a = gn(e, n, r, i);
1746
+ if (_n[t]) {
1747
+ let [e, n, r, i] = _n[t], a = bn(e, n, r, i);
1726
1748
  return (e) => W(a(W(e)));
1727
1749
  }
1728
1750
  if (t.startsWith("cubic-bezier(") && t.endsWith(")")) {
1729
1751
  let e = t.slice(13, -1).split(",").map((e) => Number.parseFloat(e.trim()));
1730
1752
  if (e.length === 4 && e.every((e) => Number.isFinite(e))) {
1731
- let [t, n, r, i] = e, a = gn(t, n, r, i);
1753
+ let [t, n, r, i] = e, a = bn(t, n, r, i);
1732
1754
  return (e) => W(a(W(e)));
1733
1755
  }
1734
1756
  }
1735
1757
  if (t.startsWith("steps(") && t.endsWith(")")) {
1736
- let e = _n(t);
1758
+ let e = xn(t);
1737
1759
  return (t) => e(W(t));
1738
1760
  }
1739
1761
  return (e) => W(e);
1740
1762
  }
1741
- function yn(e) {
1763
+ function Cn(e) {
1742
1764
  if (!e) return;
1743
1765
  let t = /(-?\d+(?:\.\d+)?)\s*\.\.\s*(-?\d+(?:\.\d+)?)\s*->\s*(-?\d+(?:\.\d+)?)\s*\.\.\s*(-?\d+(?:\.\d+)?)/.exec(e);
1744
1766
  if (!t) return;
@@ -1755,7 +1777,7 @@ function yn(e) {
1755
1777
  outEnd: a
1756
1778
  };
1757
1779
  }
1758
- var bn = new class {
1780
+ var wn = new class {
1759
1781
  bindingsByStyle = /* @__PURE__ */ new Map();
1760
1782
  observer;
1761
1783
  observeScheduled = !1;
@@ -1766,7 +1788,7 @@ var bn = new class {
1766
1788
  globalCleanups = /* @__PURE__ */ new Set();
1767
1789
  registerStyle(e, t) {
1768
1790
  if (!e) return;
1769
- let n = this.parseMetadata(t);
1791
+ let n = this.parseMetadata(e, t);
1770
1792
  if (!n) {
1771
1793
  this.bindingsByStyle.delete(e), this.cleanupStyle(e);
1772
1794
  return;
@@ -1780,32 +1802,43 @@ var bn = new class {
1780
1802
  for (let e of Array.from(this.globalCleanups)) try {
1781
1803
  e();
1782
1804
  } catch (e) {
1783
- fn.warn("Failed to cleanup binding listener", e);
1805
+ gn.warn("Failed to cleanup binding listener", e);
1784
1806
  }
1785
1807
  this.globalCleanups.clear(), this.elementStates.clear(), this.styleToElements.clear(), this.bindingsByStyle.clear(), this.pendingScanStyles.clear(), this.scanScheduled = !1, this.observer &&= (this.observer.disconnect(), void 0);
1786
1808
  }
1787
- parseMetadata(e) {
1788
- if (e) try {
1789
- let t = (JSON.parse(e).motionBindings ?? []).map((e) => this.parseBinding(e)).filter((e) => e !== void 0);
1790
- return t.length === 0 ? void 0 : { bindings: t };
1809
+ parseMetadata(e, t) {
1810
+ if (t) try {
1811
+ let n = JSON.parse(t).motionBindings ?? [], r = n.map((t) => this.parseBinding(e, t)).filter((e) => e !== void 0);
1812
+ if (r.length === 0) {
1813
+ n.length > 0 && gn.warn(`Style ${e} declares ${n.length} motion binding(s) but none are usable; it will not animate`);
1814
+ return;
1815
+ }
1816
+ return { bindings: r };
1791
1817
  } catch (e) {
1792
- fn.warn("Failed to parse motion metadata", e);
1818
+ gn.warn("Failed to parse motion metadata", e);
1793
1819
  return;
1794
1820
  }
1795
1821
  }
1796
- parseBinding(e) {
1797
- let t = e.source?.trim();
1798
- if (!t) return;
1799
- let n = mn(e.min) ?? 0, r = mn(e.max), i = r === void 0 ? n + 100 : r, a = (e.clamp ?? "clamp").trim().toLowerCase(), o = !!e.reverse, s = vn(e.ease), c = yn(e.map), l = e.targetId?.trim() || void 0;
1800
- if (!(Number.isNaN(n) || Number.isNaN(i))) return {
1801
- source: t.toLowerCase(),
1802
- min: n,
1803
- max: i,
1804
- clamp: a === "freeze-start" || a === "freeze-end" || a === "unclamped" ? a : "clamp",
1805
- reverse: o,
1806
- ease: s,
1807
- map: c,
1808
- targetId: l
1822
+ parseBinding(e, t) {
1823
+ let n = t.source?.trim();
1824
+ if (!n) {
1825
+ gn.warn(`Style ${e} has a motion binding with no source; discarding it`);
1826
+ return;
1827
+ }
1828
+ let r = vn(t.min) ?? 0, i = vn(t.max), a = i === void 0 ? r + 100 : i, o = (t.clamp ?? "clamp").trim().toLowerCase(), s = !!t.reverse, c = Sn(t.ease), l = Cn(t.map), u = t.targetId?.trim() || void 0;
1829
+ if (Number.isNaN(r) || Number.isNaN(a)) {
1830
+ gn.warn(`Style ${e} has a motion binding on '${n}' with an unreadable range; discarding it`);
1831
+ return;
1832
+ }
1833
+ return {
1834
+ source: n.toLowerCase(),
1835
+ min: r,
1836
+ max: a,
1837
+ clamp: o === "freeze-start" || o === "freeze-end" || o === "unclamped" ? o : "clamp",
1838
+ reverse: s,
1839
+ ease: c,
1840
+ map: l,
1841
+ targetId: u
1809
1842
  };
1810
1843
  }
1811
1844
  ensureObserver() {
@@ -1842,7 +1875,7 @@ var bn = new class {
1842
1875
  scanExistingNodes(e) {
1843
1876
  let t = this.bindingsByStyle.get(e);
1844
1877
  if (!t || typeof document > "u") return;
1845
- let n = `.${hn(e)}`;
1878
+ let n = `.${yn(e)}`;
1846
1879
  document.querySelectorAll(n).forEach((n) => this.applyStyleToElement(n, e, t));
1847
1880
  }
1848
1881
  applyStyleToElement(e, t, n) {
@@ -1878,7 +1911,7 @@ var bn = new class {
1878
1911
  }
1879
1912
  resolveScrollContainer(e, t) {
1880
1913
  if (t.targetId) {
1881
- let e = `[data-ikon-motion-source="${hn(t.targetId)}"]`, n = typeof document < "u" ? document.querySelector(e) : null;
1914
+ let e = `[data-ikon-motion-source="${yn(t.targetId)}"]`, n = typeof document < "u" ? document.querySelector(e) : null;
1882
1915
  if (n) return n;
1883
1916
  }
1884
1917
  return e.closest("[data-ikon-view-type=\"scroll-view\"]");
@@ -1933,7 +1966,7 @@ var bn = new class {
1933
1966
  try {
1934
1967
  e();
1935
1968
  } catch (e) {
1936
- fn.warn("Failed to cleanup listener", e);
1969
+ gn.warn("Failed to cleanup listener", e);
1937
1970
  }
1938
1971
  this.globalCleanups.delete(e);
1939
1972
  }
@@ -1973,26 +2006,26 @@ var bn = new class {
1973
2006
  }();
1974
2007
  //#endregion
1975
2008
  //#region src/use-ikon-styles.ts
1976
- function xn(e) {
2009
+ function Tn(e) {
1977
2010
  let t = M(/* @__PURE__ */ new Map()), n = O(({ styleId: e, css: n, common: r }) => {
1978
2011
  if (!(!e || typeof document > "u")) {
1979
2012
  if (n) {
1980
2013
  let r = t.current.get(e);
1981
2014
  r || (r = document.createElement("style"), r.setAttribute("data-ikon-style-id", e), document.head.appendChild(r), t.current.set(e, r)), r.textContent = n;
1982
2015
  }
1983
- bn.registerStyle(e, r);
2016
+ wn.registerStyle(e, r);
1984
2017
  }
1985
2018
  }, []), r = O((e) => {
1986
2019
  if (!(typeof document > "u")) for (let n of e) {
1987
2020
  let e = t.current.get(n);
1988
- e && (e.remove(), t.current.delete(n)), bn.unregisterStyle(n);
2021
+ e && (e.remove(), t.current.delete(n)), wn.unregisterStyle(n);
1989
2022
  }
1990
2023
  }, []), i = O(() => {
1991
2024
  if (typeof document < "u") {
1992
2025
  for (let e of t.current.values()) e.remove();
1993
2026
  t.current.clear();
1994
2027
  }
1995
- bn.reset();
2028
+ wn.reset();
1996
2029
  }, []);
1997
2030
  return k(() => {
1998
2031
  if (!e) return;
@@ -2014,7 +2047,7 @@ function xn(e) {
2014
2047
  }
2015
2048
  //#endregion
2016
2049
  //#region src/use-ikon-ui-stores.ts
2017
- function Sn(e) {
2050
+ function En(e) {
2018
2051
  let t = [];
2019
2052
  for (let [n, r] of e) {
2020
2053
  let e = r.store.getSnapshot(), i = e.rootViewId && e.views.has(e.rootViewId);
@@ -2022,7 +2055,7 @@ function Sn(e) {
2022
2055
  }
2023
2056
  return t.sort(), t.join(",");
2024
2057
  }
2025
- function Cn(e) {
2058
+ function Dn(e) {
2026
2059
  let [t, n] = N(), r = M("");
2027
2060
  return k(() => {
2028
2061
  if (!e) {
@@ -2030,7 +2063,7 @@ function Cn(e) {
2030
2063
  return;
2031
2064
  }
2032
2065
  let t = () => {
2033
- let t = e.getStores(), i = Sn(t);
2066
+ let t = e.getStores(), i = En(t);
2034
2067
  i !== r.current && (r.current = i, n(t));
2035
2068
  };
2036
2069
  return t(), e.subscribe(t);
@@ -2038,7 +2071,7 @@ function Cn(e) {
2038
2071
  }
2039
2072
  //#endregion
2040
2073
  //#region src/media/use-sibling-client.ts
2041
- function wn(e, t, n) {
2074
+ function On(e, t, n) {
2042
2075
  let [r, i] = N(null), [a, o] = N(null), s = M(n);
2043
2076
  s.current = n;
2044
2077
  let c = t ? JSON.stringify(Object.entries(t).sort(([e], [t]) => e < t ? -1 : +(e > t))) : null;
@@ -2059,8 +2092,8 @@ function wn(e, t, n) {
2059
2092
  }
2060
2093
  //#endregion
2061
2094
  //#region src/media/use-media-capture.ts
2062
- var Tn = S("IkonMediaCaptureHooks");
2063
- function En(e, t, n, r) {
2095
+ var kn = S("IkonMediaCaptureHooks");
2096
+ function An(e, t, n, r) {
2064
2097
  let [i, a] = N(null), o = M(r);
2065
2098
  return o.current = r, k(() => {
2066
2099
  if (!e || !t) return;
@@ -2075,7 +2108,7 @@ function En(e, t, n, r) {
2075
2108
  try {
2076
2109
  i = await o.current(t);
2077
2110
  } catch (e) {
2078
- r || (Tn.error(`${n} capture start failed: ${String(e)}`), a(e instanceof Error ? e : Error(String(e))));
2111
+ r || (kn.error(`${n} capture start failed: ${String(e)}`), a(e instanceof Error ? e : Error(String(e))));
2079
2112
  return;
2080
2113
  }
2081
2114
  r && i.stop();
@@ -2089,17 +2122,17 @@ function En(e, t, n, r) {
2089
2122
  n
2090
2123
  ]), { error: i };
2091
2124
  }
2092
- function Dn(e, t, n) {
2125
+ function jn(e, t, n) {
2093
2126
  let r = M(n);
2094
- return r.current = n, En(e, t, "microphone", O((e) => e.audio.startMic(r.current ?? {}), []));
2127
+ return r.current = n, An(e, t, "microphone", O((e) => e.audio.startMic(r.current ?? {}), []));
2095
2128
  }
2096
- function On(e, t, n) {
2129
+ function Mn(e, t, n) {
2097
2130
  let r = M(n);
2098
- return r.current = n, En(e, t, "camera", O((e) => e.video.startCamera(r.current), []));
2131
+ return r.current = n, An(e, t, "camera", O((e) => e.video.startCamera(r.current), []));
2099
2132
  }
2100
- function kn(e, t, n) {
2133
+ function Nn(e, t, n) {
2101
2134
  let r = M(n);
2102
- return r.current = n, En(e, t, "screen", O((e) => e.video.startScreen(r.current), []));
2135
+ return r.current = n, An(e, t, "screen", O((e) => e.video.startScreen(r.current), []));
2103
2136
  }
2104
2137
  //#endregion
2105
2138
  //#region src/shared/render-motion-letters.tsx
@@ -2110,7 +2143,7 @@ var G = {
2110
2143
  Line: 4,
2111
2144
  Paragraph: 8,
2112
2145
  Emoji: 16
2113
- }, An = [
2146
+ }, Pn = [
2114
2147
  {
2115
2148
  flag: G.Letter,
2116
2149
  hints: [
@@ -2159,16 +2192,16 @@ var G = {
2159
2192
  "[data-emoji]"
2160
2193
  ]
2161
2194
  }
2162
- ], jn = G.Letter | G.Word | G.Line | G.Paragraph | G.Emoji, Mn = G.Letter | G.Word | G.Line | G.Paragraph, Nn = /* @__PURE__ */ new Map(), Pn = 16384;
2163
- function Fn(e, t) {
2164
- if (!e || e.length > Pn) return e;
2165
- let n = lr(t), r = K(n, G.Emoji), i = n & Mn;
2195
+ ], Fn = G.Letter | G.Word | G.Line | G.Paragraph | G.Emoji, In = G.Letter | G.Word | G.Line | G.Paragraph, Ln = /* @__PURE__ */ new Map(), Rn = 16384;
2196
+ function zn(e, t) {
2197
+ if (!e || e.length > Rn) return e;
2198
+ let n = mr(t), r = ur(n, G.Emoji), i = n & In;
2166
2199
  if (i === G.None && !r) return e;
2167
2200
  let a = e.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
2168
- if (i === G.None) return sr(a);
2169
- let o = ir(a);
2170
- if (o.length === 0) return r ? sr(a) : e;
2171
- let s = ar(o), c = {
2201
+ if (i === G.None) return fr(a);
2202
+ let o = cr(a);
2203
+ if (o.length === 0) return r ? fr(a) : e;
2204
+ let s = lr(o), c = {
2172
2205
  letter: 0,
2173
2206
  word: 0,
2174
2207
  line: 0,
@@ -2177,58 +2210,58 @@ function Fn(e, t) {
2177
2210
  emoji: 0
2178
2211
  }, l = [];
2179
2212
  for (let e of s) {
2180
- let t = In(e, n, c);
2213
+ let t = Bn(e, n, c);
2181
2214
  l.push(...t);
2182
2215
  }
2183
2216
  return l;
2184
2217
  }
2185
- function In(e, t, n) {
2218
+ function Bn(e, t, n) {
2186
2219
  let r = [];
2187
2220
  for (let i of e) {
2188
- let e = Ln(i, t, n);
2221
+ let e = Vn(i, t, n);
2189
2222
  r.push(...e);
2190
2223
  }
2191
- if (K(t, G.Paragraph)) {
2224
+ if (ur(t, G.Paragraph)) {
2192
2225
  let e = n.paragraph++;
2193
2226
  return [/* @__PURE__ */ P("span", {
2194
2227
  "data-motion-paragraph": !0,
2195
- style: or(e),
2228
+ style: dr(e),
2196
2229
  children: r
2197
2230
  }, `motion-paragraph-${e}`)];
2198
2231
  }
2199
2232
  return r;
2200
2233
  }
2201
- function Ln(e, t, n) {
2202
- let r = Rn(e.text, t, n), i = [];
2203
- if (K(t, G.Line)) {
2234
+ function Vn(e, t, n) {
2235
+ let r = Hn(e.text, t, n), i = [];
2236
+ if (ur(t, G.Line)) {
2204
2237
  let e = n.line++;
2205
2238
  i.push(/* @__PURE__ */ P("span", {
2206
2239
  "data-motion-line": !0,
2207
- style: or(e),
2240
+ style: dr(e),
2208
2241
  children: r
2209
2242
  }, `motion-line-${e}`));
2210
2243
  } else i.push(...r);
2211
2244
  for (let t = 0; t < e.breaks; t++) i.push(/* @__PURE__ */ P("br", {}, `motion-break-${n.br++}`));
2212
2245
  return i;
2213
2246
  }
2214
- function Rn(e, t, n) {
2247
+ function Hn(e, t, n) {
2215
2248
  if (!e) return [];
2216
- let r = K(t, G.Word), i = [], a = /(\s+)/g, o = 0, s;
2249
+ let r = ur(t, G.Word), i = [], a = /(\s+)/g, o = 0, s;
2217
2250
  for (; (s = a.exec(e)) !== null;) {
2218
2251
  if (s.index > o) {
2219
2252
  let a = e.slice(o, s.index);
2220
- i.push(zn(a, n, t, r));
2253
+ i.push(Un(a, n, t, r));
2221
2254
  }
2222
2255
  i.push(s[0]), o = s.index + s[0].length;
2223
2256
  }
2224
2257
  if (o < e.length) {
2225
2258
  let a = e.slice(o);
2226
- i.push(zn(a, n, t, r));
2259
+ i.push(Un(a, n, t, r));
2227
2260
  }
2228
2261
  return i;
2229
2262
  }
2230
- function zn(e, t, n, r) {
2231
- let i = t.word++, a = Vn(e, n, t), o = `motion-word-${i}`, s = Bn(i, r);
2263
+ function Un(e, t, n, r) {
2264
+ let i = t.word++, a = Gn(e, n, t), o = `motion-word-${i}`, s = Wn(i, r);
2232
2265
  return r ? /* @__PURE__ */ P("span", {
2233
2266
  "data-motion-word": !0,
2234
2267
  style: s,
@@ -2238,25 +2271,25 @@ function zn(e, t, n, r) {
2238
2271
  children: a
2239
2272
  }, o);
2240
2273
  }
2241
- function Bn(e, t) {
2274
+ function Wn(e, t) {
2242
2275
  return t ? {
2243
- ...or(e),
2276
+ ...dr(e),
2244
2277
  whiteSpace: "nowrap"
2245
2278
  } : { whiteSpace: "nowrap" };
2246
2279
  }
2247
- function Vn(e, t, n) {
2280
+ function Gn(e, t, n) {
2248
2281
  if (!e) return [];
2249
- let r = K(t, G.Letter), i = K(t, G.Emoji);
2282
+ let r = ur(t, G.Letter), i = ur(t, G.Emoji);
2250
2283
  if (!r) {
2251
2284
  if (!i) return [e];
2252
- let t = Hn(e);
2285
+ let t = Kn(e);
2253
2286
  if (t.length === 0) return [e];
2254
- let { nodes: r } = cr(t, n);
2287
+ let { nodes: r } = pr(t, n);
2255
2288
  return r;
2256
2289
  }
2257
- let a = [], o = Hn(e);
2290
+ let a = [], o = Kn(e);
2258
2291
  for (let e of o) {
2259
- let t = n.letter++, r = `motion-letter-${t}`, o = or(t);
2292
+ let t = n.letter++, r = `motion-letter-${t}`, o = dr(t);
2260
2293
  if (e === "\n") {
2261
2294
  a.push(/* @__PURE__ */ P("span", {
2262
2295
  "data-motion-letter": !0,
@@ -2265,7 +2298,7 @@ function Vn(e, t, n) {
2265
2298
  }, r));
2266
2299
  continue;
2267
2300
  }
2268
- let s = i && tr(e) ? { "data-motion-emoji": !0 } : void 0, c = e === " " ? "\xA0" : e;
2301
+ let s = i && ar(e) ? { "data-motion-emoji": !0 } : void 0, c = e === " " ? "\xA0" : e;
2269
2302
  a.push(/* @__PURE__ */ P("span", {
2270
2303
  "data-motion-letter": !0,
2271
2304
  style: o,
@@ -2275,46 +2308,46 @@ function Vn(e, t, n) {
2275
2308
  }
2276
2309
  return a;
2277
2310
  }
2278
- function Hn(e) {
2311
+ function Kn(e) {
2279
2312
  if (!e) return [];
2280
- let t = Wn();
2281
- return t ? Array.from(t.segment(e), (e) => e.segment) : Gn(e);
2313
+ let t = Jn();
2314
+ return t ? Array.from(t.segment(e), (e) => e.segment) : Yn(e);
2282
2315
  }
2283
- var Un;
2284
- function Wn() {
2285
- return Un === void 0 && (Un = typeof Intl < "u" && typeof Intl.Segmenter == "function" ? new Intl.Segmenter(void 0, { granularity: "grapheme" }) : null), Un;
2316
+ var qn;
2317
+ function Jn() {
2318
+ return qn === void 0 && (qn = typeof Intl < "u" && typeof Intl.Segmenter == "function" ? new Intl.Segmenter(void 0, { granularity: "grapheme" }) : null), qn;
2286
2319
  }
2287
- function Gn(e) {
2320
+ function Yn(e) {
2288
2321
  let t = [], n = Array.from(e), r = "";
2289
2322
  for (let e = 0; e < n.length; e++) {
2290
2323
  let i = n[e], a = n[e + 1];
2291
- r += i, !(a && Kn(i, a)) && (t.push(r), r = "");
2324
+ r += i, !(a && Xn(i, a)) && (t.push(r), r = "");
2292
2325
  }
2293
2326
  return r && t.push(r), t;
2294
2327
  }
2295
- function Kn(e, t) {
2296
- return t ? !!(qn(e) || qn(t) || Qn(t) || Jn(t) || Yn(t) || Xn(e) && Xn(t)) : !1;
2328
+ function Xn(e, t) {
2329
+ return t ? !!(Zn(e) || Zn(t) || nr(t) || Qn(t) || $n(t) || er(e) && er(t)) : !1;
2297
2330
  }
2298
- function qn(e) {
2331
+ function Zn(e) {
2299
2332
  return e.codePointAt(0) === 8205;
2300
2333
  }
2301
- function Jn(e) {
2334
+ function Qn(e) {
2302
2335
  let t = e.codePointAt(0);
2303
2336
  return t === void 0 ? !1 : t >= 65024 && t <= 65039 || t >= 917760 && t <= 917999;
2304
2337
  }
2305
- function Yn(e) {
2338
+ function $n(e) {
2306
2339
  let t = e.codePointAt(0);
2307
2340
  return t !== void 0 && t >= 127995 && t <= 127999;
2308
2341
  }
2309
- function Xn(e) {
2342
+ function er(e) {
2310
2343
  let t = e.codePointAt(0);
2311
2344
  return t !== void 0 && t >= 127462 && t <= 127487;
2312
2345
  }
2313
- var Zn;
2314
- function Qn(e) {
2315
- return e ? (Zn ||= $n(), Zn(e)) : !1;
2346
+ var tr;
2347
+ function nr(e) {
2348
+ return e ? (tr ||= rr(), tr(e)) : !1;
2316
2349
  }
2317
- function $n() {
2350
+ function rr() {
2318
2351
  try {
2319
2352
  let e = /\p{Mark}/u;
2320
2353
  return (t) => e.test(t);
@@ -2325,19 +2358,19 @@ function $n() {
2325
2358
  };
2326
2359
  }
2327
2360
  }
2328
- var er;
2329
- function tr(e) {
2330
- return e ? (er ||= nr(), er(e)) : !1;
2361
+ var ir;
2362
+ function ar(e) {
2363
+ return e ? (ir ||= or(), ir(e)) : !1;
2331
2364
  }
2332
- function nr() {
2365
+ function or() {
2333
2366
  try {
2334
2367
  let e = /\p{Extended_Pictographic}/u;
2335
2368
  return (t) => e.test(t);
2336
2369
  } catch {
2337
- return rr;
2370
+ return sr;
2338
2371
  }
2339
2372
  }
2340
- function rr(e) {
2373
+ function sr(e) {
2341
2374
  if (!e) return !1;
2342
2375
  for (let t of Array.from(e)) {
2343
2376
  let e = t.codePointAt(0);
@@ -2345,7 +2378,7 @@ function rr(e) {
2345
2378
  }
2346
2379
  return !1;
2347
2380
  }
2348
- function ir(e) {
2381
+ function cr(e) {
2349
2382
  let t = [], n = "", r = 0;
2350
2383
  for (let i = 0; i < e.length; i++) {
2351
2384
  let a = e[i];
@@ -2363,16 +2396,16 @@ function ir(e) {
2363
2396
  breaks: r
2364
2397
  }), t;
2365
2398
  }
2366
- function ar(e) {
2399
+ function lr(e) {
2367
2400
  if (e.length === 0) return [];
2368
2401
  let t = [], n = [];
2369
2402
  for (let r of e) n.push(r), r.breaks >= 2 && (t.push(n), n = []);
2370
2403
  return n.length > 0 && t.push(n), t;
2371
2404
  }
2372
- function K(e, t) {
2405
+ function ur(e, t) {
2373
2406
  return (e & t) === t;
2374
2407
  }
2375
- function or(e) {
2408
+ function dr(e) {
2376
2409
  return {
2377
2410
  "--tw-motion-seq-index": e.toString(),
2378
2411
  backgroundColor: "inherit",
@@ -2389,19 +2422,19 @@ function or(e) {
2389
2422
  WebkitTextFillColor: "inherit"
2390
2423
  };
2391
2424
  }
2392
- function sr(e) {
2425
+ function fr(e) {
2393
2426
  if (!e) return e;
2394
- let t = Hn(e);
2427
+ let t = Kn(e);
2395
2428
  if (t.length === 0) return e;
2396
- let { nodes: n, sawEmoji: r } = cr(t);
2429
+ let { nodes: n, sawEmoji: r } = pr(t);
2397
2430
  return r ? n.length === 1 ? n[0] ?? e : n : e;
2398
2431
  }
2399
- function cr(e, t) {
2432
+ function pr(e, t) {
2400
2433
  let n = [], r = "", i = !1, a = t?.emoji ?? 0, o = () => {
2401
2434
  r &&= (n.push(r), "");
2402
2435
  };
2403
2436
  for (let s of e) {
2404
- if (tr(s)) {
2437
+ if (ar(s)) {
2405
2438
  i = !0, o();
2406
2439
  let e = `motion-emoji-${t ? t.emoji++ : a++}`;
2407
2440
  n.push(/* @__PURE__ */ P("span", {
@@ -2420,16 +2453,16 @@ function cr(e, t) {
2420
2453
  sawEmoji: !1
2421
2454
  };
2422
2455
  }
2423
- function lr(e) {
2456
+ function mr(e) {
2424
2457
  if (!e) return G.None;
2425
2458
  let t = e.trim();
2426
2459
  if (!t) return G.None;
2427
- let n = Nn.get(t);
2460
+ let n = Ln.get(t);
2428
2461
  if (typeof n == "number") return n;
2429
2462
  if (typeof document > "u") return G.None;
2430
2463
  let r = t.split(/\s+/).filter(Boolean);
2431
2464
  if (r.length === 0) return G.None;
2432
- let i = r.map((e) => `.${dr(e)}`).map((e) => RegExp(`(^|[^a-zA-Z0-9_-])${fr(e)}(?![a-zA-Z0-9_-])`)), a = G.None, o = !1;
2465
+ let i = r.map((e) => `.${gr(e)}`).map((e) => RegExp(`(^|[^a-zA-Z0-9_-])${_r(e)}(?![a-zA-Z0-9_-])`)), a = G.None, o = !1;
2433
2466
  for (let e of Array.from(document.styleSheets)) {
2434
2467
  let t;
2435
2468
  try {
@@ -2437,13 +2470,13 @@ function lr(e) {
2437
2470
  } catch {
2438
2471
  continue;
2439
2472
  }
2440
- let n = ur(t, i);
2441
- if (n.mask && (a |= n.mask, a === jn)) break;
2473
+ let n = hr(t, i);
2474
+ if (n.mask && (a |= n.mask, a === Fn)) break;
2442
2475
  o ||= n.sawStyleRule;
2443
2476
  }
2444
- return (a !== G.None || o) && Nn.set(t, a), a;
2477
+ return (a !== G.None || o) && Ln.set(t, a), a;
2445
2478
  }
2446
- function ur(e, t) {
2479
+ function hr(e, t) {
2447
2480
  if (!e) return {
2448
2481
  mask: G.None,
2449
2482
  sawStyleRule: !1
@@ -2456,14 +2489,14 @@ function ur(e, t) {
2456
2489
  let e = a.selectorText ?? "";
2457
2490
  if (!e || !t.some((t) => t.test(e))) continue;
2458
2491
  r = !0;
2459
- for (let t of An) t.hints.some((t) => e.includes(t)) && (n |= t.flag);
2460
- if (n === jn) return {
2492
+ for (let t of Pn) t.hints.some((t) => e.includes(t)) && (n |= t.flag);
2493
+ if (n === Fn) return {
2461
2494
  mask: n,
2462
2495
  sawStyleRule: !0
2463
2496
  };
2464
2497
  } else if ("cssRules" in a) {
2465
- let e = ur(a.cssRules, t);
2466
- if (e.mask && (n |= e.mask, n === jn)) return {
2498
+ let e = hr(a.cssRules, t);
2499
+ if (e.mask && (n |= e.mask, n === Fn)) return {
2467
2500
  mask: n,
2468
2501
  sawStyleRule: !0
2469
2502
  };
@@ -2476,16 +2509,16 @@ function ur(e, t) {
2476
2509
  sawStyleRule: r
2477
2510
  };
2478
2511
  }
2479
- function dr(e) {
2512
+ function gr(e) {
2480
2513
  return typeof CSS < "u" && typeof CSS.escape == "function" ? CSS.escape(e) : e.replace(/[^a-zA-Z0-9_-]/g, (e) => `\\${e}`);
2481
2514
  }
2482
- function fr(e) {
2515
+ function _r(e) {
2483
2516
  return e.replace(/[.*+?^${}()|[\]\\]/g, (e) => `\\${e}`);
2484
2517
  }
2485
2518
  //#endregion
2486
2519
  //#region src/auth/storage.ts
2487
- var pr = "ikon-auth-session", mr = "ikon-auth-refreshable", hr = "ikon-auth-auto-login-attempted-run", gr = 6048e5, _r = 6e4;
2488
- function vr(e) {
2520
+ var vr = "ikon-auth-session", yr = "ikon-auth-refreshable", br = "ikon-auth-auto-login-attempted-run", xr = 6048e5, Sr = 6e4;
2521
+ function Cr(e) {
2489
2522
  try {
2490
2523
  let t = e.split(".");
2491
2524
  if (t.length !== 3) return;
@@ -2495,105 +2528,105 @@ function vr(e) {
2495
2528
  return;
2496
2529
  }
2497
2530
  }
2498
- function yr(e) {
2499
- let t = vr(e);
2500
- return !t || typeof t.exp == "number" && Date.now() >= t.exp * 1e3 - _r;
2531
+ function wr(e) {
2532
+ let t = Cr(e);
2533
+ return !t || typeof t.exp == "number" && Date.now() >= t.exp * 1e3 - Sr;
2501
2534
  }
2502
- function br(e) {
2503
- let t = vr(e)?.exp;
2535
+ function Tr(e) {
2536
+ let t = Cr(e)?.exp;
2504
2537
  return typeof t == "number" ? (/* @__PURE__ */ new Date(t * 1e3)).toISOString() : void 0;
2505
2538
  }
2506
- function q(e) {
2539
+ function K(e) {
2507
2540
  try {
2508
- localStorage.setItem(pr, JSON.stringify(e));
2541
+ localStorage.setItem(vr, JSON.stringify(e));
2509
2542
  } catch {
2510
2543
  console.warn("Failed to save auth session to localStorage");
2511
2544
  }
2512
2545
  }
2513
- function xr() {
2546
+ function Er() {
2514
2547
  try {
2515
- let e = localStorage.getItem(pr);
2548
+ let e = localStorage.getItem(vr);
2516
2549
  if (!e) return null;
2517
2550
  let t = JSON.parse(e);
2518
- return Date.now() - t.authenticatedAt > gr || yr(t.token) ? (kr(), null) : t;
2551
+ return Date.now() - t.authenticatedAt > xr || wr(t.token) ? (Pr(), null) : t;
2519
2552
  } catch {
2520
2553
  return console.warn("Failed to load auth session from localStorage"), null;
2521
2554
  }
2522
2555
  }
2523
- function Sr() {
2556
+ function Dr() {
2524
2557
  try {
2525
- let e = localStorage.getItem(pr);
2558
+ let e = localStorage.getItem(vr);
2526
2559
  if (!e) return !1;
2527
2560
  let t = JSON.parse(e);
2528
- return t.provider === "dev" && yr(t.token);
2561
+ return t.provider === "dev" && wr(t.token);
2529
2562
  } catch {
2530
2563
  return !1;
2531
2564
  }
2532
2565
  }
2533
- function Cr(e) {
2566
+ function Or(e) {
2534
2567
  try {
2535
- localStorage.removeItem(pr), localStorage.setItem(mr, JSON.stringify(e));
2568
+ localStorage.removeItem(vr), localStorage.setItem(yr, JSON.stringify(e));
2536
2569
  } catch {
2537
2570
  console.warn("Failed to save the auth session marker to localStorage");
2538
2571
  }
2539
2572
  }
2540
- function wr() {
2573
+ function kr() {
2541
2574
  try {
2542
- let e = localStorage.getItem(mr);
2575
+ let e = localStorage.getItem(yr);
2543
2576
  if (!e) return null;
2544
2577
  let t = JSON.parse(e);
2545
- return Date.now() - t.renewedAt > gr ? (Er(), null) : t;
2578
+ return Date.now() - t.renewedAt > xr ? (jr(), null) : t;
2546
2579
  } catch {
2547
2580
  return console.warn("Failed to load the auth session marker from localStorage"), null;
2548
2581
  }
2549
2582
  }
2550
- function Tr() {
2551
- let e = wr();
2552
- e && Cr({
2583
+ function Ar() {
2584
+ let e = kr();
2585
+ e && Or({
2553
2586
  ...e,
2554
2587
  renewedAt: Date.now()
2555
2588
  });
2556
2589
  }
2557
- function Er() {
2590
+ function jr() {
2558
2591
  try {
2559
- localStorage.removeItem(mr);
2592
+ localStorage.removeItem(yr);
2560
2593
  } catch {
2561
2594
  console.warn("Failed to clear the auth session marker from localStorage");
2562
2595
  }
2563
2596
  }
2564
- function Dr() {
2565
- xr()?.provider === "anonymous" && kr(), wr()?.provider === "anonymous" && Er();
2597
+ function Mr() {
2598
+ Er()?.provider === "anonymous" && Pr(), kr()?.provider === "anonymous" && jr();
2566
2599
  }
2567
- function Or() {
2600
+ function Nr() {
2568
2601
  try {
2569
2602
  let e = typeof window < "u" ? new URLSearchParams(window.location.search) : void 0;
2570
2603
  if (e?.get("ikon_token") || e?.get("ikon_code")) return !0;
2571
2604
  } catch {}
2572
- let e = xr()?.provider ?? wr()?.provider;
2605
+ let e = Er()?.provider ?? kr()?.provider;
2573
2606
  return e !== void 0 && e !== "anonymous";
2574
2607
  }
2575
- function kr() {
2608
+ function Pr() {
2576
2609
  try {
2577
- localStorage.removeItem(pr);
2610
+ localStorage.removeItem(vr);
2578
2611
  } catch {
2579
2612
  console.warn("Failed to clear auth session from localStorage");
2580
2613
  }
2581
2614
  }
2582
- function Ar(e) {
2615
+ function Fr(e) {
2583
2616
  if (e) try {
2584
- sessionStorage.setItem(hr, e);
2617
+ sessionStorage.setItem(br, e);
2585
2618
  } catch {
2586
2619
  console.warn("Failed to record auto-login attempt in sessionStorage");
2587
2620
  }
2588
2621
  }
2589
- function jr() {
2622
+ function Ir() {
2590
2623
  try {
2591
- return sessionStorage.getItem(hr);
2624
+ return sessionStorage.getItem(br);
2592
2625
  } catch {
2593
2626
  return null;
2594
2627
  }
2595
2628
  }
2596
- function J(e) {
2629
+ function q(e) {
2597
2630
  return {
2598
2631
  id: "",
2599
2632
  provider: e.provider,
@@ -2604,8 +2637,8 @@ function J(e) {
2604
2637
  }
2605
2638
  //#endregion
2606
2639
  //#region src/auth/auth-service.ts
2607
- var Mr = 15e3, Nr = 15e3, Y = S("AuthService");
2608
- async function Pr(e) {
2640
+ var Lr = 15e3, Rr = 15e3, J = S("AuthService");
2641
+ async function zr(e) {
2609
2642
  try {
2610
2643
  return await fetch(e, {
2611
2644
  method: "GET",
@@ -2615,35 +2648,48 @@ async function Pr(e) {
2615
2648
  return `no-cors probe ALSO FAILED (${e instanceof Error ? e.name : "Error"}) → origin is unreachable: TLS handshake / certificate, DNS, or network (old browser may not trust this host's cert)`;
2616
2649
  }
2617
2650
  }
2618
- var Fr = "x-ikon-auth-service";
2619
- function Ir(e) {
2620
- if (e.headers.get(Fr) !== null) return !1;
2651
+ var Br = "x-ikon-auth-service";
2652
+ function Vr(e) {
2653
+ if (e.headers.get(Br) !== null) return !1;
2621
2654
  if (e.status === 404 || e.status === 405) return !0;
2622
2655
  let t = e.headers.get("content-type") ?? "";
2623
2656
  return e.status === 200 && t.includes("text/html");
2624
2657
  }
2625
- async function X(e, t, n) {
2626
- let r = `${e}${t}`, i = E(), a = i !== null && e === i, o = a ? await re() : i, s = o !== null && o !== e ? `${o}${t}` : null, c;
2658
+ async function Y(e, t, n) {
2659
+ let r = `${e}${t}`, i = E(), a = i !== null && e === i, o = a ? await oe() : i, s = o !== null && o !== e ? `${o}${t}` : null, c;
2627
2660
  try {
2628
2661
  c = await fetch(r, n);
2629
2662
  } catch (i) {
2630
2663
  let a = i instanceof Error ? `${i.name}: ${i.message}` : String(i);
2631
2664
  if (!s) {
2632
- let n = await Pr(e);
2633
- throw Y.error(`Auth request ${t} could not reach ${r} — ${a}. ${n}`), Error(`Auth request could not reach ${r} (${a}). ${n}`, { cause: i });
2665
+ let n = await zr(e);
2666
+ throw J.error(`Auth request ${t} could not reach ${r} — ${a}. ${n}`), Error(`Auth request could not reach ${r} (${a}). ${n}`, { cause: i });
2634
2667
  }
2635
- Y.warn(`Auth request ${t} could not reach ${r} (${a}); falling back to ${s}`);
2668
+ J.warn(`Auth request ${t} could not reach ${r} (${a}); falling back to ${s}`);
2636
2669
  try {
2637
2670
  return await fetch(s, n);
2638
2671
  } catch (n) {
2639
- let i = n instanceof Error ? `${n.name}: ${n.message}` : String(n), o = await Pr(e);
2640
- throw Y.error(`Auth request ${t} failed on both ${r} (${a}) and ${s} (${i}). ${o}`), Error(`Auth request unreachable: ${r} (${a}) and ${s} (${i})`, { cause: n });
2672
+ let i = n instanceof Error ? `${n.name}: ${n.message}` : String(n), o = await zr(e);
2673
+ throw J.error(`Auth request ${t} failed on both ${r} (${a}) and ${s} (${i}). ${o}`), Error(`Auth request unreachable: ${r} (${a}) and ${s} (${i})`, { cause: n });
2641
2674
  }
2642
2675
  }
2643
- return a && s !== null && Ir(c) ? (Y.warn(`Auth request ${t} got a non-auth-service answer from ${r} (${c.status}); this LB has no /ikon/auth route, falling back to ${s}`), fetch(s, n)) : c;
2676
+ return a && s !== null && Vr(c) ? (J.warn(`Auth request ${t} got a non-auth-service answer from ${r} (${c.status}); this LB has no /ikon/auth route, falling back to ${s}`), fetch(s, n)) : c;
2677
+ }
2678
+ async function Hr(e, t) {
2679
+ let n;
2680
+ try {
2681
+ n = await e.json();
2682
+ } catch (e) {
2683
+ throw Error(`${t} returned a body that is not JSON`, { cause: e });
2684
+ }
2685
+ if (typeof n.token != "string" || n.token.length === 0) throw Error(`${t} returned no token`);
2686
+ return {
2687
+ token: n.token,
2688
+ ...typeof n.expiresAt == "string" && n.expiresAt.length > 0 ? { expiresAt: n.expiresAt } : {}
2689
+ };
2644
2690
  }
2645
- async function Lr(e, t, n) {
2646
- let r = oe(), i = n === "guest" ? "anonymous" : n, a = {
2691
+ async function Ur(e, t, n) {
2692
+ let r = le(), i = n === "guest" ? "anonymous" : n, a = {
2647
2693
  method: "POST",
2648
2694
  headers: { "Content-Type": "application/json" },
2649
2695
  body: JSON.stringify({
@@ -2652,73 +2698,73 @@ async function Lr(e, t, n) {
2652
2698
  ...i ? { method: i } : {}
2653
2699
  })
2654
2700
  }, o = typeof window < "u" ? window.location.origin : "?";
2655
- Y.debug(`Anonymous auth: POST ${t}/anonymous (space=${e}, origin=${o})`);
2656
- let s = await X(t, "/anonymous", a);
2701
+ J.debug(`Anonymous auth: POST ${t}/anonymous (space=${e}, origin=${o})`);
2702
+ let s = await Y(t, "/anonymous", a);
2657
2703
  if (!s.ok) {
2658
2704
  let e = await s.text().catch(() => "Unknown error");
2659
- throw Y.error(`Anonymous auth HTTP ${s.status} from ${s.url}: ${e}`), Error(`Anonymous auth failed: ${s.status} ${e}`);
2705
+ throw J.error(`Anonymous auth HTTP ${s.status} from ${s.url}: ${e}`), Error(`Anonymous auth failed: ${s.status} ${e}`);
2660
2706
  }
2661
- let { token: c } = await s.json(), l = {
2707
+ let { token: c } = await Hr(s, `Anonymous auth for space ${e}`), l = {
2662
2708
  token: c,
2663
2709
  provider: "anonymous",
2664
2710
  authenticatedAt: Date.now()
2665
2711
  };
2666
- return q(l), l;
2712
+ return K(l), l;
2667
2713
  }
2668
- async function Rr({ email: e, spaceId: t, authUrl: n }) {
2669
- let r = await X(n, "/email/send", {
2714
+ async function Wr({ email: e, spaceId: t, authUrl: n }) {
2715
+ let r = await Y(n, "/email/send", {
2670
2716
  method: "POST",
2671
2717
  headers: { "Content-Type": "application/json" },
2672
2718
  body: JSON.stringify({
2673
2719
  email: e.trim(),
2674
2720
  space: t
2675
2721
  }),
2676
- signal: y(Mr)
2722
+ signal: x(Lr)
2677
2723
  });
2678
2724
  if (!r.ok) {
2679
2725
  let e = await r.text().catch(() => "Failed to send login code");
2680
2726
  throw Error(e);
2681
2727
  }
2682
2728
  }
2683
- async function zr({ email: e, code: t, authUrl: n }) {
2684
- let r = await X(n, "/email/code", {
2729
+ async function Gr({ email: e, code: t, authUrl: n }) {
2730
+ let r = await Y(n, "/email/code", {
2685
2731
  method: "POST",
2686
2732
  headers: { "Content-Type": "application/json" },
2687
2733
  body: JSON.stringify({
2688
2734
  email: e.trim(),
2689
2735
  code: t.trim()
2690
2736
  }),
2691
- signal: y(Mr)
2737
+ signal: x(Lr)
2692
2738
  });
2693
2739
  if (!r.ok) {
2694
2740
  let e = await r.text().catch(() => "Invalid code");
2695
2741
  throw Error(e);
2696
2742
  }
2697
- let { token: i } = await r.json(), a = {
2743
+ let { token: i } = await Hr(r, "Login-code verification"), a = {
2698
2744
  token: i,
2699
2745
  provider: "email",
2700
2746
  authenticatedAt: Date.now()
2701
2747
  };
2702
- return q(a), a;
2748
+ return K(a), a;
2703
2749
  }
2704
- function Br() {
2705
- let e = new URLSearchParams(window.location.search), t = e.get(p), n = e.get(f);
2750
+ function Kr() {
2751
+ let e = new URLSearchParams(window.location.search), t = e.get(g), n = e.get(h);
2706
2752
  return t && n ? {
2707
2753
  token: t,
2708
2754
  provider: n
2709
2755
  } : null;
2710
2756
  }
2711
- function Vr() {
2712
- let e = new URLSearchParams(window.location.search), t = e.get(u), n = e.get(f);
2757
+ function qr() {
2758
+ let e = new URLSearchParams(window.location.search), t = e.get(p), n = e.get(h);
2713
2759
  return t && n ? {
2714
2760
  code: t,
2715
2761
  provider: n
2716
2762
  } : null;
2717
2763
  }
2718
- async function Hr(e, t, n) {
2719
- let r = Se();
2764
+ async function Jr(e, t, n) {
2765
+ let r = Te();
2720
2766
  if (!r) throw Error("This sign-in was started in a different browser or tab");
2721
- let i = await X(await C(n), "/oauth/exchange", {
2767
+ let i = await Y(await C(n), "/oauth/exchange", {
2722
2768
  method: "POST",
2723
2769
  headers: { "Content-Type": "application/json" },
2724
2770
  body: JSON.stringify({
@@ -2726,37 +2772,38 @@ async function Hr(e, t, n) {
2726
2772
  codeVerifier: r,
2727
2773
  supportsRefresh: !0
2728
2774
  }),
2729
- signal: y(Mr)
2775
+ signal: x(Lr)
2730
2776
  });
2731
2777
  if (!i.ok) throw Error("Could not complete the sign-in");
2732
- let { token: a, expiresAt: o } = await i.json(), s = {
2778
+ let { token: a, expiresAt: o } = await Hr(i, `OAuth code exchange for ${t}`), s = {
2733
2779
  token: a,
2734
2780
  provider: t,
2735
2781
  authenticatedAt: Date.now(),
2736
2782
  expiresAt: o
2737
2783
  };
2738
- return o ? Cr({
2784
+ return o ? Or({
2739
2785
  provider: t,
2740
2786
  authenticatedAt: s.authenticatedAt,
2741
2787
  renewedAt: s.authenticatedAt
2742
- }) : q(s), s;
2788
+ }) : K(s), s;
2743
2789
  }
2744
- async function Ur(e) {
2790
+ async function Yr(e) {
2745
2791
  let t = E();
2746
2792
  if (t === null) return null;
2747
2793
  let n;
2748
2794
  try {
2749
2795
  n = await fetch(`${t}/session/refresh`, {
2750
2796
  method: "POST",
2751
- signal: y(Nr)
2797
+ signal: x(Rr)
2752
2798
  });
2753
2799
  } catch (e) {
2754
2800
  let n = e instanceof Error ? `${e.name}: ${e.message}` : String(e);
2755
- throw Y.warn(`Session renewal could not reach ${t}/session/refresh (${n})`), Error(`Session renewal could not reach the auth service (${n})`, { cause: e });
2801
+ throw J.warn(`Session renewal could not reach ${t}/session/refresh (${n})`), Error(`Session renewal could not reach the auth service (${n})`, { cause: e });
2756
2802
  }
2757
2803
  if (n.status === 401) return null;
2758
2804
  if (!n.ok) throw Error(`Session renewal failed: ${n.status}`);
2759
- let { token: r, expiresAt: i } = await n.json();
2805
+ let { token: r, expiresAt: i } = await Hr(n, "Session renewal");
2806
+ if (!i) throw Error("Session renewal returned a token with no expiry");
2760
2807
  return {
2761
2808
  token: r,
2762
2809
  provider: e.provider,
@@ -2764,25 +2811,25 @@ async function Ur(e) {
2764
2811
  expiresAt: i
2765
2812
  };
2766
2813
  }
2767
- function Wr() {
2814
+ function Xr() {
2768
2815
  let e = new URLSearchParams(window.location.search), t = e.get("error");
2769
2816
  return t ? {
2770
2817
  code: t,
2771
- provider: e.get(f)
2818
+ provider: e.get(h)
2772
2819
  } : null;
2773
2820
  }
2774
- function Gr() {
2775
- return se();
2821
+ function Zr() {
2822
+ return ue();
2776
2823
  }
2777
- var Kr = {
2824
+ var Qr = {
2778
2825
  google: "Google",
2779
2826
  facebook: "Facebook",
2780
2827
  apple: "Apple",
2781
2828
  microsoft: "Microsoft",
2782
2829
  signicat: "eID"
2783
2830
  };
2784
- function qr(e, t, n) {
2785
- let r = t ? Kr[t] ?? t : "this provider";
2831
+ function $r(e, t, n) {
2832
+ let r = t ? Qr[t] ?? t : "this provider";
2786
2833
  switch (e) {
2787
2834
  case "account_exists_unverified_email": {
2788
2835
  let e = `This email address already has an account on this app that uses a different sign-in method. For security, ${r} sign-in can't be connected to it automatically.`;
@@ -2793,24 +2840,24 @@ function qr(e, t, n) {
2793
2840
  default: return e;
2794
2841
  }
2795
2842
  }
2796
- function Jr() {
2843
+ function ei() {
2797
2844
  let e = new URLSearchParams(window.location.search);
2798
2845
  for (let t of [
2846
+ g,
2799
2847
  p,
2800
- u,
2801
- f,
2848
+ h,
2802
2849
  "error",
2803
- d
2850
+ m
2804
2851
  ]) e.delete(t);
2805
2852
  let t = e.toString();
2806
2853
  window.history.replaceState({}, "", t.length > 0 ? `${window.location.pathname}?${t}` : window.location.pathname);
2807
2854
  }
2808
- async function Yr(e, t, n, r) {
2809
- let i = r ?? window.location.origin + window.location.pathname + window.location.search, a = await te(), o = a ? `&code_challenge=${encodeURIComponent(a)}` : "";
2855
+ async function ti(e, t, n, r) {
2856
+ let i = r ?? window.location.origin + window.location.pathname + window.location.search, a = await ie(), o = a ? `&code_challenge=${encodeURIComponent(a)}` : "";
2810
2857
  return `${n}/oauth/${e}?space=${encodeURIComponent(t)}&return=${encodeURIComponent(i)}${o}`;
2811
2858
  }
2812
- async function Xr(e) {
2813
- let t = await X(e, "/passkey/registration/options", {
2859
+ async function ni(e) {
2860
+ let t = await Y(e, "/passkey/registration/options", {
2814
2861
  method: "POST",
2815
2862
  headers: { "Content-Type": "application/json" }
2816
2863
  });
@@ -2820,8 +2867,8 @@ async function Xr(e) {
2820
2867
  }
2821
2868
  return t.json();
2822
2869
  }
2823
- async function Zr(e, t, n) {
2824
- let r = await X(e, "/passkey/registration/verify", {
2870
+ async function ri(e, t, n) {
2871
+ let r = await Y(e, "/passkey/registration/verify", {
2825
2872
  method: "POST",
2826
2873
  headers: { "Content-Type": "application/json" },
2827
2874
  body: JSON.stringify({
@@ -2833,15 +2880,15 @@ async function Zr(e, t, n) {
2833
2880
  let e = await r.text().catch(() => "Registration verification failed");
2834
2881
  throw Error(e);
2835
2882
  }
2836
- let { token: i } = await r.json(), a = {
2883
+ let { token: i } = await Hr(r, "Passkey registration verification"), a = {
2837
2884
  token: i,
2838
2885
  provider: "passkey",
2839
2886
  authenticatedAt: Date.now()
2840
2887
  };
2841
- return q(a), a;
2888
+ return K(a), a;
2842
2889
  }
2843
- async function Qr(e, t) {
2844
- let n = await X(e, "/passkey/authentication/options", {
2890
+ async function ii(e, t) {
2891
+ let n = await Y(e, "/passkey/authentication/options", {
2845
2892
  method: "POST",
2846
2893
  headers: { "Content-Type": "application/json" },
2847
2894
  body: JSON.stringify({ email: t })
@@ -2852,8 +2899,8 @@ async function Qr(e, t) {
2852
2899
  }
2853
2900
  return n.json();
2854
2901
  }
2855
- async function $r(e, t) {
2856
- let n = await X(e, "/passkey/authentication/verify", {
2902
+ async function ai(e, t) {
2903
+ let n = await Y(e, "/passkey/authentication/verify", {
2857
2904
  method: "POST",
2858
2905
  headers: { "Content-Type": "application/json" },
2859
2906
  body: JSON.stringify({ response: t })
@@ -2862,60 +2909,61 @@ async function $r(e, t) {
2862
2909
  let e = await n.text().catch(() => "Authentication verification failed");
2863
2910
  throw Error(e);
2864
2911
  }
2865
- let { token: r } = await n.json(), i = {
2912
+ let { token: r } = await Hr(n, "Passkey authentication verification"), i = {
2866
2913
  token: r,
2867
2914
  provider: "passkey",
2868
2915
  authenticatedAt: Date.now()
2869
2916
  };
2870
- return q(i), i;
2917
+ return K(i), i;
2871
2918
  }
2872
- async function ei(e, t) {
2919
+ async function oi(e, t) {
2873
2920
  try {
2874
- await X(await C(t), "/logout", {
2921
+ await Y(await C(t), "/logout", {
2875
2922
  method: "POST",
2876
2923
  headers: { Authorization: `Bearer ${e}` },
2877
- signal: y(Mr)
2924
+ signal: x(Lr)
2878
2925
  });
2879
2926
  } catch {}
2880
2927
  }
2881
2928
  //#endregion
2882
2929
  //#region ../../node_modules/@simplewebauthn/browser/esm/helpers/bufferToBase64URLString.js
2883
- function Z(e) {
2930
+ function X(e) {
2884
2931
  let t = new Uint8Array(e), n = "";
2885
2932
  for (let e of t) n += String.fromCharCode(e);
2886
2933
  return btoa(n).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
2887
2934
  }
2888
2935
  //#endregion
2889
2936
  //#region ../../node_modules/@simplewebauthn/browser/esm/helpers/base64URLStringToBuffer.js
2890
- function ti(e) {
2937
+ function si(e) {
2891
2938
  let t = e.replace(/-/g, "+").replace(/_/g, "/"), n = (4 - t.length % 4) % 4, r = t.padEnd(t.length + n, "="), i = atob(r), a = new ArrayBuffer(i.length), o = new Uint8Array(a);
2892
2939
  for (let e = 0; e < i.length; e++) o[e] = i.charCodeAt(e);
2893
2940
  return a;
2894
2941
  }
2895
2942
  //#endregion
2896
2943
  //#region ../../node_modules/@simplewebauthn/browser/esm/helpers/browserSupportsWebAuthn.js
2897
- function ni() {
2898
- return ri.stubThis(globalThis?.PublicKeyCredential !== void 0 && typeof globalThis.PublicKeyCredential == "function");
2944
+ function ci() {
2945
+ return li.stubThis(globalThis?.PublicKeyCredential !== void 0 && typeof globalThis.PublicKeyCredential == "function");
2899
2946
  }
2900
- var ri = { stubThis: (e) => e };
2947
+ var li = { stubThis: (e) => e };
2901
2948
  //#endregion
2902
2949
  //#region ../../node_modules/@simplewebauthn/browser/esm/helpers/toPublicKeyCredentialDescriptor.js
2903
- function ii(e) {
2950
+ function ui(e) {
2904
2951
  let { id: t } = e;
2905
2952
  return {
2906
2953
  ...e,
2907
- id: ti(t),
2908
- transports: e.transports
2954
+ id: si(t),
2955
+ transports: e.transports,
2956
+ type: e.type
2909
2957
  };
2910
2958
  }
2911
2959
  //#endregion
2912
2960
  //#region ../../node_modules/@simplewebauthn/browser/esm/helpers/isValidDomain.js
2913
- function ai(e) {
2961
+ function di(e) {
2914
2962
  return e === "localhost" || /^((xn--[a-z0-9-]+|[a-z0-9]+(-[a-z0-9]+)*)\.)+([a-z]{2,}|xn--[a-z0-9-]+)$/i.test(e);
2915
2963
  }
2916
2964
  //#endregion
2917
2965
  //#region ../../node_modules/@simplewebauthn/browser/esm/helpers/webAuthnError.js
2918
- var Q = class extends Error {
2966
+ var Z = class extends Error {
2919
2967
  constructor({ message: e, code: t, cause: n, name: r }) {
2920
2968
  super(e, { cause: n }), Object.defineProperty(this, "code", {
2921
2969
  enumerable: !0,
@@ -2927,76 +2975,76 @@ var Q = class extends Error {
2927
2975
  };
2928
2976
  //#endregion
2929
2977
  //#region ../../node_modules/@simplewebauthn/browser/esm/helpers/identifyRegistrationError.js
2930
- function oi({ error: e, options: t }) {
2978
+ function fi({ error: e, options: t }) {
2931
2979
  let { publicKey: n } = t;
2932
2980
  if (!n) throw Error("options was missing required publicKey property");
2933
2981
  if (e.name === "AbortError") {
2934
- if (t.signal instanceof AbortSignal) return new Q({
2982
+ if (t.signal instanceof AbortSignal) return new Z({
2935
2983
  message: "Registration ceremony was sent an abort signal",
2936
2984
  code: "ERROR_CEREMONY_ABORTED",
2937
2985
  cause: e
2938
2986
  });
2939
2987
  } else if (e.name === "ConstraintError") {
2940
- if (n.authenticatorSelection?.requireResidentKey === !0) return new Q({
2988
+ if (n.authenticatorSelection?.requireResidentKey === !0) return new Z({
2941
2989
  message: "Discoverable credentials were required but no available authenticator supported it",
2942
2990
  code: "ERROR_AUTHENTICATOR_MISSING_DISCOVERABLE_CREDENTIAL_SUPPORT",
2943
2991
  cause: e
2944
2992
  });
2945
- if (t.mediation === "conditional" && n.authenticatorSelection?.userVerification === "required") return new Q({
2993
+ if (t.mediation === "conditional" && n.authenticatorSelection?.userVerification === "required") return new Z({
2946
2994
  message: "User verification was required during automatic registration but it could not be performed",
2947
2995
  code: "ERROR_AUTO_REGISTER_USER_VERIFICATION_FAILURE",
2948
2996
  cause: e
2949
2997
  });
2950
- if (n.authenticatorSelection?.userVerification === "required") return new Q({
2998
+ if (n.authenticatorSelection?.userVerification === "required") return new Z({
2951
2999
  message: "User verification was required but no available authenticator supported it",
2952
3000
  code: "ERROR_AUTHENTICATOR_MISSING_USER_VERIFICATION_SUPPORT",
2953
3001
  cause: e
2954
3002
  });
2955
- } else if (e.name === "InvalidStateError") return new Q({
3003
+ } else if (e.name === "InvalidStateError") return new Z({
2956
3004
  message: "The authenticator was previously registered",
2957
3005
  code: "ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED",
2958
3006
  cause: e
2959
3007
  });
2960
- else if (e.name === "NotAllowedError") return new Q({
3008
+ else if (e.name === "NotAllowedError") return new Z({
2961
3009
  message: e.message,
2962
3010
  code: "ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",
2963
3011
  cause: e
2964
3012
  });
2965
- else if (e.name === "NotSupportedError") return n.pubKeyCredParams.filter((e) => e.type === "public-key").length === 0 ? new Q({
3013
+ else if (e.name === "NotSupportedError") return n.pubKeyCredParams.filter((e) => e.type === "public-key").length === 0 ? new Z({
2966
3014
  message: "No entry in pubKeyCredParams was of type \"public-key\"",
2967
3015
  code: "ERROR_MALFORMED_PUBKEYCREDPARAMS",
2968
3016
  cause: e
2969
- }) : new Q({
3017
+ }) : new Z({
2970
3018
  message: "No available authenticator supported any of the specified pubKeyCredParams algorithms",
2971
3019
  code: "ERROR_AUTHENTICATOR_NO_SUPPORTED_PUBKEYCREDPARAMS_ALG",
2972
3020
  cause: e
2973
3021
  });
2974
3022
  else if (e.name === "SecurityError") {
2975
3023
  let t = globalThis.location.hostname;
2976
- if (!ai(t)) return new Q({
3024
+ if (!di(t)) return new Z({
2977
3025
  message: `${globalThis.location.hostname} is an invalid domain`,
2978
3026
  code: "ERROR_INVALID_DOMAIN",
2979
3027
  cause: e
2980
3028
  });
2981
- if (n.rp.id !== t) return new Q({
3029
+ if (n.rp.id !== t) return new Z({
2982
3030
  message: `The RP ID "${n.rp.id}" is invalid for this domain`,
2983
3031
  code: "ERROR_INVALID_RP_ID",
2984
3032
  cause: e
2985
3033
  });
2986
3034
  } else if (e.name === "TypeError") {
2987
- if (n.user.id.byteLength < 1 || n.user.id.byteLength > 64) return new Q({
3035
+ if (n.user.id.byteLength < 1 || n.user.id.byteLength > 64) return new Z({
2988
3036
  message: "User ID was not between 1 and 64 characters",
2989
3037
  code: "ERROR_INVALID_USER_ID_LENGTH",
2990
3038
  cause: e
2991
3039
  });
2992
- } else if (e.name === "UnknownError") return new Q({
3040
+ } else if (e.name === "UnknownError") return new Z({
2993
3041
  message: "The authenticator was unable to process the specified options, or could not create a new credential",
2994
3042
  code: "ERROR_AUTHENTICATOR_GENERAL_ERROR",
2995
3043
  cause: e
2996
3044
  });
2997
3045
  return e;
2998
3046
  }
2999
- var si = new class {
3047
+ var pi = new class {
3000
3048
  constructor() {
3001
3049
  Object.defineProperty(this, "controller", {
3002
3050
  enumerable: !0,
@@ -3019,31 +3067,31 @@ var si = new class {
3019
3067
  e.name = "AbortError", this.controller.abort(e), this.controller = void 0;
3020
3068
  }
3021
3069
  }
3022
- }(), ci = ["cross-platform", "platform"];
3023
- function li(e) {
3024
- if (e && !(ci.indexOf(e) < 0)) return e;
3070
+ }(), mi = ["cross-platform", "platform"];
3071
+ function hi(e) {
3072
+ if (e && !(mi.indexOf(e) < 0)) return e;
3025
3073
  }
3026
3074
  //#endregion
3027
3075
  //#region ../../node_modules/@simplewebauthn/browser/esm/methods/startRegistration.js
3028
- async function ui(e) {
3076
+ async function gi(e) {
3029
3077
  !e.optionsJSON && e.challenge && (console.warn("startRegistration() was not called correctly. It will try to continue with the provided options, but this call should be refactored to use the expected call structure instead. See https://simplewebauthn.dev/docs/packages/browser#typeerror-cannot-read-properties-of-undefined-reading-challenge for more information."), e = { optionsJSON: e });
3030
3078
  let { optionsJSON: t, useAutoRegister: n = !1 } = e;
3031
- if (!ni()) throw Error("WebAuthn is not supported in this browser");
3079
+ if (!ci()) throw Error("WebAuthn is not supported in this browser");
3032
3080
  let r = {
3033
3081
  ...t,
3034
- challenge: ti(t.challenge),
3082
+ challenge: si(t.challenge),
3035
3083
  user: {
3036
3084
  ...t.user,
3037
- id: ti(t.user.id)
3085
+ id: si(t.user.id)
3038
3086
  },
3039
- excludeCredentials: t.excludeCredentials?.map(ii)
3087
+ excludeCredentials: t.excludeCredentials?.map(ui)
3040
3088
  }, i = {};
3041
- n && (i.mediation = "conditional"), i.publicKey = r, i.signal = si.createNewAbortSignal();
3089
+ n && (i.mediation = "conditional"), i.publicKey = r, i.signal = pi.createNewAbortSignal();
3042
3090
  let a;
3043
3091
  try {
3044
3092
  a = await navigator.credentials.create(i);
3045
3093
  } catch (e) {
3046
- throw oi({
3094
+ throw fi({
3047
3095
  error: e,
3048
3096
  options: i
3049
3097
  });
@@ -3055,27 +3103,27 @@ async function ui(e) {
3055
3103
  if (typeof c.getPublicKeyAlgorithm == "function") try {
3056
3104
  d = c.getPublicKeyAlgorithm();
3057
3105
  } catch (e) {
3058
- di("getPublicKeyAlgorithm()", e);
3106
+ _i("getPublicKeyAlgorithm()", e);
3059
3107
  }
3060
3108
  let f;
3061
3109
  if (typeof c.getPublicKey == "function") try {
3062
3110
  let e = c.getPublicKey();
3063
- e !== null && (f = Z(e));
3111
+ e !== null && (f = X(e));
3064
3112
  } catch (e) {
3065
- di("getPublicKey()", e);
3113
+ _i("getPublicKey()", e);
3066
3114
  }
3067
3115
  let p;
3068
3116
  if (typeof c.getAuthenticatorData == "function") try {
3069
- p = Z(c.getAuthenticatorData());
3117
+ p = X(c.getAuthenticatorData());
3070
3118
  } catch (e) {
3071
- di("getAuthenticatorData()", e);
3119
+ _i("getAuthenticatorData()", e);
3072
3120
  }
3073
3121
  return {
3074
3122
  id: o,
3075
- rawId: Z(s),
3123
+ rawId: X(s),
3076
3124
  response: {
3077
- attestationObject: Z(c.attestationObject),
3078
- clientDataJSON: Z(c.clientDataJSON),
3125
+ attestationObject: X(c.attestationObject),
3126
+ clientDataJSON: X(c.clientDataJSON),
3079
3127
  transports: u,
3080
3128
  publicKeyAlgorithm: d,
3081
3129
  publicKey: f,
@@ -3083,49 +3131,49 @@ async function ui(e) {
3083
3131
  },
3084
3132
  type: l,
3085
3133
  clientExtensionResults: a.getClientExtensionResults(),
3086
- authenticatorAttachment: li(a.authenticatorAttachment)
3134
+ authenticatorAttachment: hi(a.authenticatorAttachment)
3087
3135
  };
3088
3136
  }
3089
- function di(e, t) {
3137
+ function _i(e, t) {
3090
3138
  console.warn(`The browser extension that intercepted this WebAuthn API call incorrectly implemented ${e}. You should report this error to them.\n`, t);
3091
3139
  }
3092
3140
  //#endregion
3093
3141
  //#region ../../node_modules/@simplewebauthn/browser/esm/helpers/browserSupportsWebAuthnAutofill.js
3094
- function fi() {
3095
- if (!ni()) return pi.stubThis(new Promise((e) => e(!1)));
3142
+ function vi() {
3143
+ if (!ci()) return yi.stubThis(new Promise((e) => e(!1)));
3096
3144
  let e = globalThis.PublicKeyCredential;
3097
- return e?.isConditionalMediationAvailable === void 0 ? pi.stubThis(new Promise((e) => e(!1))) : pi.stubThis(e.isConditionalMediationAvailable());
3145
+ return e?.isConditionalMediationAvailable === void 0 ? yi.stubThis(new Promise((e) => e(!1))) : yi.stubThis(e.isConditionalMediationAvailable());
3098
3146
  }
3099
- var pi = { stubThis: (e) => e };
3147
+ var yi = { stubThis: (e) => e };
3100
3148
  //#endregion
3101
3149
  //#region ../../node_modules/@simplewebauthn/browser/esm/helpers/identifyAuthenticationError.js
3102
- function mi({ error: e, options: t }) {
3150
+ function bi({ error: e, options: t }) {
3103
3151
  let { publicKey: n } = t;
3104
3152
  if (!n) throw Error("options was missing required publicKey property");
3105
3153
  if (e.name === "AbortError") {
3106
- if (t.signal instanceof AbortSignal) return new Q({
3154
+ if (t.signal instanceof AbortSignal) return new Z({
3107
3155
  message: "Authentication ceremony was sent an abort signal",
3108
3156
  code: "ERROR_CEREMONY_ABORTED",
3109
3157
  cause: e
3110
3158
  });
3111
- } else if (e.name === "NotAllowedError") return new Q({
3159
+ } else if (e.name === "NotAllowedError") return new Z({
3112
3160
  message: e.message,
3113
3161
  code: "ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",
3114
3162
  cause: e
3115
3163
  });
3116
3164
  else if (e.name === "SecurityError") {
3117
3165
  let t = globalThis.location.hostname;
3118
- if (!ai(t)) return new Q({
3166
+ if (!di(t)) return new Z({
3119
3167
  message: `${globalThis.location.hostname} is an invalid domain`,
3120
3168
  code: "ERROR_INVALID_DOMAIN",
3121
3169
  cause: e
3122
3170
  });
3123
- if (n.rpId !== t) return new Q({
3171
+ if (n.rpId !== t) return new Z({
3124
3172
  message: `The RP ID "${n.rpId}" is invalid for this domain`,
3125
3173
  code: "ERROR_INVALID_RP_ID",
3126
3174
  cause: e
3127
3175
  });
3128
- } else if (e.name === "UnknownError") return new Q({
3176
+ } else if (e.name === "UnknownError") return new Z({
3129
3177
  message: "The authenticator was unable to process the specified options, or could not create a new assertion signature",
3130
3178
  code: "ERROR_AUTHENTICATOR_GENERAL_ERROR",
3131
3179
  cause: e
@@ -3134,65 +3182,65 @@ function mi({ error: e, options: t }) {
3134
3182
  }
3135
3183
  //#endregion
3136
3184
  //#region ../../node_modules/@simplewebauthn/browser/esm/methods/startAuthentication.js
3137
- async function hi(e) {
3185
+ async function xi(e) {
3138
3186
  !e.optionsJSON && e.challenge && (console.warn("startAuthentication() was not called correctly. It will try to continue with the provided options, but this call should be refactored to use the expected call structure instead. See https://simplewebauthn.dev/docs/packages/browser#typeerror-cannot-read-properties-of-undefined-reading-challenge for more information."), e = { optionsJSON: e });
3139
3187
  let { optionsJSON: t, useBrowserAutofill: n = !1, verifyBrowserAutofillInput: r = !0 } = e;
3140
- if (!ni()) throw Error("WebAuthn is not supported in this browser");
3188
+ if (!ci()) throw Error("WebAuthn is not supported in this browser");
3141
3189
  let i;
3142
- t.allowCredentials?.length !== 0 && (i = t.allowCredentials?.map(ii));
3190
+ t.allowCredentials?.length !== 0 && (i = t.allowCredentials?.map(ui));
3143
3191
  let a = {
3144
3192
  ...t,
3145
- challenge: ti(t.challenge),
3193
+ challenge: si(t.challenge),
3146
3194
  allowCredentials: i
3147
3195
  }, o = {};
3148
3196
  if (n) {
3149
- if (!await fi()) throw Error("Browser does not support WebAuthn autofill");
3197
+ if (!await vi()) throw Error("Browser does not support WebAuthn autofill");
3150
3198
  if (document.querySelectorAll("input[autocomplete$='webauthn']").length < 1 && r) throw Error("No <input> with \"webauthn\" as the only or last value in its `autocomplete` attribute was detected");
3151
3199
  o.mediation = "conditional", a.allowCredentials = [];
3152
3200
  }
3153
- o.publicKey = a, o.signal = si.createNewAbortSignal();
3201
+ o.publicKey = a, o.signal = pi.createNewAbortSignal();
3154
3202
  let s;
3155
3203
  try {
3156
3204
  s = await navigator.credentials.get(o);
3157
3205
  } catch (e) {
3158
- throw mi({
3206
+ throw bi({
3159
3207
  error: e,
3160
3208
  options: o
3161
3209
  });
3162
3210
  }
3163
3211
  if (!s) throw Error("Authentication was not completed");
3164
3212
  let { id: c, rawId: l, response: u, type: d } = s, f;
3165
- return u.userHandle && (f = Z(u.userHandle)), {
3213
+ return u.userHandle && (f = X(u.userHandle)), {
3166
3214
  id: c,
3167
- rawId: Z(l),
3215
+ rawId: X(l),
3168
3216
  response: {
3169
- authenticatorData: Z(u.authenticatorData),
3170
- clientDataJSON: Z(u.clientDataJSON),
3171
- signature: Z(u.signature),
3217
+ authenticatorData: X(u.authenticatorData),
3218
+ clientDataJSON: X(u.clientDataJSON),
3219
+ signature: X(u.signature),
3172
3220
  userHandle: f
3173
3221
  },
3174
3222
  type: d,
3175
3223
  clientExtensionResults: s.getClientExtensionResults(),
3176
- authenticatorAttachment: li(s.authenticatorAttachment)
3224
+ authenticatorAttachment: hi(s.authenticatorAttachment)
3177
3225
  };
3178
3226
  }
3179
3227
  //#endregion
3180
3228
  //#region src/auth/auth-context.tsx
3181
- var gi = "/dev-login-token", _i = "X-Ikon-Dev-Login-Run";
3182
- async function vi(e) {
3229
+ var Si = "/dev-login-token", Ci = "X-Ikon-Dev-Login-Run";
3230
+ async function wi(e) {
3183
3231
  let t = typeof window < "u" ? window.__IKON_LOCAL_IKON_SERVER_CONFIG__ : void 0;
3184
3232
  if (!(!t?.enabled || !t.host || !t.port)) try {
3185
- let n = await fetch(`https://${t.host}:${t.port}${gi}`, {
3233
+ let n = await fetch(`https://${t.host}:${t.port}${Si}`, {
3186
3234
  cache: "no-store",
3187
- headers: { [_i]: e }
3235
+ headers: { [Ci]: e }
3188
3236
  });
3189
3237
  return n.ok && (await n.json()).token || void 0;
3190
3238
  } catch {
3191
3239
  return;
3192
3240
  }
3193
3241
  }
3194
- var yi = we(null), bi = 12e4, xi = 6e4;
3195
- function Si({ children: e, config: n }) {
3242
+ var Ti = De(null), Ei = 12e4, Di = 6e4;
3243
+ function Oi({ children: e, config: n }) {
3196
3244
  let [r, i] = N({
3197
3245
  isAuthenticated: !1,
3198
3246
  isLoading: !0,
@@ -3202,9 +3250,9 @@ function Si({ children: e, config: n }) {
3202
3250
  if (!c.current) {
3203
3251
  c.current = !0;
3204
3252
  try {
3205
- let t = await Ur(e);
3253
+ let t = await Yr(e);
3206
3254
  if (t === null) {
3207
- Er(), i({
3255
+ jr(), i({
3208
3256
  isAuthenticated: !1,
3209
3257
  isLoading: !1,
3210
3258
  user: null,
@@ -3212,10 +3260,10 @@ function Si({ children: e, config: n }) {
3212
3260
  });
3213
3261
  return;
3214
3262
  }
3215
- Tr(), i({
3263
+ Ar(), i({
3216
3264
  isAuthenticated: !0,
3217
3265
  isLoading: !1,
3218
- user: J(t),
3266
+ user: q(t),
3219
3267
  error: null
3220
3268
  });
3221
3269
  } catch {} finally {
@@ -3226,28 +3274,28 @@ function Si({ children: e, config: n }) {
3226
3274
  k(() => {
3227
3275
  (() => {
3228
3276
  if (s.current) return;
3229
- let e = n.devLoginRunId, t = !!e && jr() === e && !Sr();
3230
- e && !Gr() && Ar(e);
3231
- let r = !!n.devLoginToken && !!e && !t && !Gr();
3232
- o || Dr();
3233
- let c = Wr();
3277
+ let e = n.devLoginRunId, t = !!e && Ir() === e && !Dr();
3278
+ e && !Zr() && Fr(e);
3279
+ let r = !!n.devLoginToken && !!e && !t && !Zr();
3280
+ o || Mr();
3281
+ let c = Xr();
3234
3282
  if (c) {
3235
- Jr(), i({
3283
+ ei(), i({
3236
3284
  isAuthenticated: !1,
3237
3285
  isLoading: !1,
3238
3286
  user: null,
3239
- error: qr(c.code, c.provider, { emailSignInAvailable: a })
3287
+ error: $r(c.code, c.provider, { emailSignInAvailable: a })
3240
3288
  });
3241
3289
  return;
3242
3290
  }
3243
- b();
3244
- let l = Vr();
3291
+ ne();
3292
+ let l = qr();
3245
3293
  if (l) {
3246
- s.current = !0, Jr(), Hr(l.code, l.provider, n.authUrl).then((e) => {
3294
+ s.current = !0, ei(), Jr(l.code, l.provider, n.authUrl).then((e) => {
3247
3295
  i({
3248
3296
  isAuthenticated: !0,
3249
3297
  isLoading: !1,
3250
- user: J(e),
3298
+ user: q(e),
3251
3299
  error: null
3252
3300
  });
3253
3301
  }).catch((e) => {
@@ -3260,26 +3308,26 @@ function Si({ children: e, config: n }) {
3260
3308
  });
3261
3309
  return;
3262
3310
  }
3263
- let u = Br();
3311
+ let u = Kr();
3264
3312
  if (u) {
3265
3313
  let e = {
3266
3314
  token: u.token,
3267
3315
  provider: u.provider,
3268
3316
  authenticatedAt: Date.now()
3269
3317
  };
3270
- q(e), Jr(), i({
3318
+ K(e), ei(), i({
3271
3319
  isAuthenticated: !0,
3272
3320
  isLoading: !1,
3273
- user: J(e),
3321
+ user: q(e),
3274
3322
  error: null
3275
3323
  });
3276
3324
  return;
3277
3325
  }
3278
- let d = wr();
3326
+ let d = kr();
3279
3327
  if (d) {
3280
- s.current = !0, Ur(d).then((e) => {
3328
+ s.current = !0, Yr(d).then((e) => {
3281
3329
  if (e === null) {
3282
- Er(), i({
3330
+ jr(), i({
3283
3331
  isAuthenticated: !1,
3284
3332
  isLoading: !1,
3285
3333
  user: null,
@@ -3287,10 +3335,10 @@ function Si({ children: e, config: n }) {
3287
3335
  });
3288
3336
  return;
3289
3337
  }
3290
- Tr(), i({
3338
+ Ar(), i({
3291
3339
  isAuthenticated: !0,
3292
3340
  isLoading: !1,
3293
- user: J(e),
3341
+ user: q(e),
3294
3342
  error: null
3295
3343
  });
3296
3344
  }).catch(() => {
@@ -3303,12 +3351,12 @@ function Si({ children: e, config: n }) {
3303
3351
  });
3304
3352
  return;
3305
3353
  }
3306
- let f = xr();
3354
+ let f = Er();
3307
3355
  if (f && !(r && f.provider === "anonymous")) {
3308
3356
  i({
3309
3357
  isAuthenticated: !0,
3310
3358
  isLoading: !1,
3311
- user: J(f),
3359
+ user: q(f),
3312
3360
  error: null
3313
3361
  });
3314
3362
  return;
@@ -3319,21 +3367,21 @@ function Si({ children: e, config: n }) {
3319
3367
  token: e,
3320
3368
  provider: "dev",
3321
3369
  authenticatedAt: Date.now(),
3322
- expiresAt: br(e)
3370
+ expiresAt: Tr(e)
3323
3371
  };
3324
- q(t), i({
3372
+ K(t), i({
3325
3373
  isAuthenticated: !0,
3326
3374
  isLoading: !1,
3327
- user: J(t),
3375
+ user: q(t),
3328
3376
  error: null
3329
3377
  });
3330
3378
  };
3331
- if (!yr(n.devLoginToken)) {
3379
+ if (!wr(n.devLoginToken)) {
3332
3380
  t(n.devLoginToken);
3333
3381
  return;
3334
3382
  }
3335
- vi(e).then((e) => {
3336
- if (e && !yr(e)) {
3383
+ wi(e).then((e) => {
3384
+ if (e && !wr(e)) {
3337
3385
  t(e);
3338
3386
  return;
3339
3387
  }
@@ -3360,12 +3408,12 @@ function Si({ children: e, config: n }) {
3360
3408
  a,
3361
3409
  o
3362
3410
  ]), k(() => {
3363
- if (n.spaceId) return pe(n.spaceId, (e) => {
3364
- s.current = !0, e.codeVerifier && _e(e.codeVerifier), Hr(e.code, e.provider, n.authUrl).then((e) => {
3411
+ if (n.spaceId) return ge(n.spaceId, (e) => {
3412
+ s.current = !0, e.codeVerifier && be(e.codeVerifier), Jr(e.code, e.provider, n.authUrl).then((e) => {
3365
3413
  i({
3366
3414
  isAuthenticated: !0,
3367
3415
  isLoading: !1,
3368
- user: J(e),
3416
+ user: q(e),
3369
3417
  error: null
3370
3418
  });
3371
3419
  }).catch((e) => {
@@ -3380,9 +3428,9 @@ function Si({ children: e, config: n }) {
3380
3428
  }, [n.spaceId, n.authUrl]), k(() => {
3381
3429
  let e = r.user?.expiresAt;
3382
3430
  if (!e || r.user?.provider === "dev") return;
3383
- let t = wr();
3431
+ let t = kr();
3384
3432
  if (!t) return;
3385
- let n = Date.parse(e) - bi, i = setTimeout(() => void l(t), Math.max(0, n - Date.now())), a = () => {
3433
+ let n = Date.parse(e) - Ei, i = setTimeout(() => void l(t), Math.max(0, n - Date.now())), a = () => {
3386
3434
  document.visibilityState === "visible" && Date.now() >= n && l(t);
3387
3435
  };
3388
3436
  return document.addEventListener("visibilitychange", a), () => {
@@ -3398,25 +3446,25 @@ function Si({ children: e, config: n }) {
3398
3446
  if (!e) return;
3399
3447
  let t = r.user.expiresAt;
3400
3448
  if (!t) return;
3401
- let a = r.user.token, o = Date.parse(t) - bi, s, c = !1, l = !1, u = async () => {
3449
+ let a = r.user.token, o = Date.parse(t) - Ei, s, c = !1, l = !1, u = async () => {
3402
3450
  if (c || l) return;
3403
3451
  l = !0;
3404
- let t = await vi(e);
3452
+ let t = await wi(e);
3405
3453
  if (l = !1, c) return;
3406
- if (!t || t === a || yr(t)) {
3407
- s = setTimeout(() => void u(), xi);
3454
+ if (!t || t === a || wr(t)) {
3455
+ s = setTimeout(() => void u(), Di);
3408
3456
  return;
3409
3457
  }
3410
3458
  let n = {
3411
3459
  token: t,
3412
3460
  provider: "dev",
3413
3461
  authenticatedAt: Date.now(),
3414
- expiresAt: br(t)
3462
+ expiresAt: Tr(t)
3415
3463
  };
3416
- q(n), i({
3464
+ K(n), i({
3417
3465
  isAuthenticated: !0,
3418
3466
  isLoading: !1,
3419
- user: J(n),
3467
+ user: q(n),
3420
3468
  error: null
3421
3469
  });
3422
3470
  };
@@ -3458,11 +3506,11 @@ function Si({ children: e, config: n }) {
3458
3506
  isLoading: !0
3459
3507
  }));
3460
3508
  try {
3461
- let r = await Lr(n.spaceId, t, e);
3509
+ let r = await Ur(n.spaceId, t, e);
3462
3510
  i({
3463
3511
  isAuthenticated: !0,
3464
3512
  isLoading: !1,
3465
- user: J(r),
3513
+ user: q(r),
3466
3514
  error: null
3467
3515
  });
3468
3516
  } catch (e) {
@@ -3481,11 +3529,11 @@ function Si({ children: e, config: n }) {
3481
3529
  error: null
3482
3530
  }));
3483
3531
  try {
3484
- let e = await hi({ optionsJSON: await Qr(t) }), n = await $r(t, e);
3532
+ let e = await xi({ optionsJSON: await ii(t) }), n = await ai(t, e);
3485
3533
  i({
3486
3534
  isAuthenticated: !0,
3487
3535
  isLoading: !1,
3488
- user: J(n),
3536
+ user: q(n),
3489
3537
  error: null
3490
3538
  });
3491
3539
  } catch (e) {
@@ -3498,22 +3546,22 @@ function Si({ children: e, config: n }) {
3498
3546
  return;
3499
3547
  }
3500
3548
  if (e === "email") throw Error("login('email') is not supported. Use requestEmailCode()/submitEmailCode() from useAuth() instead.");
3501
- if (de()) {
3502
- await ye(e, n.spaceId) || i((e) => ({
3549
+ if (me()) {
3550
+ await Se(e, n.spaceId) || i((e) => ({
3503
3551
  ...e,
3504
3552
  isLoading: !1,
3505
3553
  error: "The sign-in window did not complete. Allow pop-ups for this site and try again."
3506
3554
  }));
3507
3555
  return;
3508
3556
  }
3509
- window.location.href = await Yr(e, n.spaceId, t);
3557
+ window.location.href = await ti(e, n.spaceId, t);
3510
3558
  }, [n.authUrl, n.spaceId]), d = O(async (e) => {
3511
3559
  if (!n.spaceId) throw i((e) => ({
3512
3560
  ...e,
3513
3561
  error: "Space ID is not configured"
3514
3562
  })), Error("Space ID is not configured");
3515
3563
  let t = await C(n.authUrl);
3516
- await Rr({
3564
+ await Wr({
3517
3565
  email: e,
3518
3566
  spaceId: n.spaceId,
3519
3567
  authUrl: t
@@ -3525,7 +3573,7 @@ function Si({ children: e, config: n }) {
3525
3573
  error: null
3526
3574
  }));
3527
3575
  try {
3528
- let r = await zr({
3576
+ let r = await Gr({
3529
3577
  email: e,
3530
3578
  code: t,
3531
3579
  authUrl: await C(n.authUrl)
@@ -3533,7 +3581,7 @@ function Si({ children: e, config: n }) {
3533
3581
  i({
3534
3582
  isAuthenticated: !0,
3535
3583
  isLoading: !1,
3536
- user: J(r),
3584
+ user: q(r),
3537
3585
  error: null
3538
3586
  });
3539
3587
  } catch (e) {
@@ -3546,7 +3594,7 @@ function Si({ children: e, config: n }) {
3546
3594
  }
3547
3595
  }, [n.authUrl]), p = O(() => {
3548
3596
  let e = r.user?.token;
3549
- e && ei(e, n.authUrl), kr(), Er(), t.clearAll(), i({
3597
+ e && oi(e, n.authUrl), Pr(), jr(), t.clearAll(), i({
3550
3598
  isAuthenticated: !1,
3551
3599
  isLoading: !1,
3552
3600
  user: null,
@@ -3560,11 +3608,11 @@ function Si({ children: e, config: n }) {
3560
3608
  error: null
3561
3609
  }));
3562
3610
  try {
3563
- let n = await Zr(t, await ui({ optionsJSON: await Xr(t) }), e);
3611
+ let n = await ri(t, await gi({ optionsJSON: await ni(t) }), e);
3564
3612
  i({
3565
3613
  isAuthenticated: !0,
3566
3614
  isLoading: !1,
3567
- user: J(n),
3615
+ user: q(n),
3568
3616
  error: null
3569
3617
  });
3570
3618
  } catch (e) {
@@ -3591,37 +3639,38 @@ function Si({ children: e, config: n }) {
3591
3639
  d,
3592
3640
  f
3593
3641
  ]);
3594
- return /* @__PURE__ */ P(yi, {
3642
+ return /* @__PURE__ */ P(Ti, {
3595
3643
  value: g,
3596
3644
  children: e
3597
3645
  });
3598
3646
  }
3599
- function Ci() {
3600
- let e = Te(yi);
3647
+ function ki() {
3648
+ let e = Oe(Ti);
3601
3649
  if (!e) throw Error("useAuth must be used within an AuthProvider");
3602
3650
  return e;
3603
3651
  }
3604
- function wi() {
3605
- return Te(yi);
3652
+ function Ai() {
3653
+ return Oe(Ti);
3606
3654
  }
3607
3655
  //#endregion
3608
3656
  //#region src/auth/oauth-continuation.ts
3609
- var Ti = "ikon-oauth", Ei = "ikon-oauth-continue", Di = "ikon-oauth-continue-attempts", Oi = 5, ki = 6e5;
3610
- function Ai() {
3657
+ var ji = "ikon-oauth", Mi = "ikon-oauth-continue", Ni = "ikon-oauth-continue-attempts", Pi = 5, Fi = 6e5;
3658
+ function Ii() {
3611
3659
  if (typeof window > "u") return !1;
3612
- let e = new URL(window.location.href).searchParams.get(Ti);
3613
- return e ? (Ii(e), !0) : Fi() !== null;
3660
+ let e = new URL(window.location.href).searchParams.get(ji);
3661
+ return e ? (Wi(e), !0) : Ui() !== null;
3614
3662
  }
3615
- function ji() {
3616
- return Mi() !== null;
3663
+ function Li() {
3664
+ return Ri() !== null;
3617
3665
  }
3618
- function Mi() {
3619
- return typeof window > "u" ? null : new URL(window.location.href).searchParams.get("ikon-oauth") ?? Fi();
3666
+ function Ri() {
3667
+ return typeof window > "u" ? null : new URL(window.location.href).searchParams.get("ikon-oauth") ?? Ui();
3620
3668
  }
3621
- async function Ni(e) {
3622
- let t = Mi();
3623
- if (!t) return !1;
3624
- if (!e) return Pi() < Oi ? (console.warn("[ikon] Waiting for the signed-in session before continuing the authorization that sent you here."), !1) : (Li(), console.warn("[ikon] Gave up continuing the authorization that sent you here: no signed-in session became readable. Start the connection again from the application."), !1);
3669
+ var zi = "You are not allowed to connect an application to this app with this account.";
3670
+ async function Bi(e) {
3671
+ let t = Ri();
3672
+ if (!t) return { status: "pending" };
3673
+ if (!e) return Hi() < Pi ? (console.warn("[ikon] Waiting for the signed-in session before continuing the authorization that sent you here."), { status: "pending" }) : (Gi(), console.warn("[ikon] Gave up continuing the authorization that sent you here: no signed-in session became readable. Start the connection again from the application."), { status: "pending" });
3625
3674
  try {
3626
3675
  let n = await fetch("/ikon/oauth/continue", {
3627
3676
  method: "POST",
@@ -3631,68 +3680,89 @@ async function Ni(e) {
3631
3680
  },
3632
3681
  body: JSON.stringify({ continueId: t })
3633
3682
  });
3634
- if (!n.ok) return Li(), console.warn(`[ikon] Could not continue the authorization that sent you here (${n.status}). Start the connection again from the application.`), !1;
3683
+ if (!n.ok) {
3684
+ if (Gi(), n.status === 403) {
3685
+ let e = await Vi(n);
3686
+ return console.warn(`[ikon] The authorization that sent you here was refused: ${e}`), {
3687
+ status: "refused",
3688
+ message: e
3689
+ };
3690
+ }
3691
+ return console.warn(`[ikon] Could not continue the authorization that sent you here (${n.status}). Start the connection again from the application.`), { status: "pending" };
3692
+ }
3635
3693
  let { consentUrl: r } = await n.json();
3636
- return r ? (Li(), window.location.href = r, !0) : (Li(), console.warn("[ikon] The authorization that sent you here returned no consent step. Start the connection again from the application."), !1);
3694
+ return r ? (Gi(), window.location.href = r, { status: "handed-off" }) : (Gi(), console.warn("[ikon] The authorization that sent you here returned no consent step. Start the connection again from the application."), { status: "pending" });
3637
3695
  } catch {
3638
- return !1;
3696
+ return { status: "pending" };
3639
3697
  }
3640
3698
  }
3641
- function Pi() {
3699
+ async function Vi(e) {
3642
3700
  try {
3643
- let e = Number(sessionStorage.getItem(Di) ?? "0") + 1;
3644
- return sessionStorage.setItem(Di, String(e)), e;
3701
+ let t = await e.json(), n = Array.isArray(t?.message) ? t.message.join(", ") : t?.message;
3702
+ return typeof n == "string" && n.trim().length > 0 ? n : zi;
3645
3703
  } catch {
3646
- return Oi;
3704
+ return zi;
3647
3705
  }
3648
3706
  }
3649
- function Fi() {
3707
+ function Hi() {
3650
3708
  try {
3651
- let e = sessionStorage.getItem(Ei);
3709
+ let e = Number(sessionStorage.getItem(Ni) ?? "0") + 1;
3710
+ return sessionStorage.setItem(Ni, String(e)), e;
3711
+ } catch {
3712
+ return Pi;
3713
+ }
3714
+ }
3715
+ function Ui() {
3716
+ try {
3717
+ let e = sessionStorage.getItem(Mi);
3652
3718
  if (!e) return null;
3653
3719
  let { id: t, at: n } = JSON.parse(e);
3654
- return !t || typeof n != "number" || Date.now() - n > ki ? (Li(), null) : t;
3720
+ return !t || typeof n != "number" || Date.now() - n > Fi ? (Gi(), null) : t;
3655
3721
  } catch {
3656
- return Li(), null;
3722
+ return Gi(), null;
3657
3723
  }
3658
3724
  }
3659
- function Ii(e) {
3725
+ function Wi(e) {
3660
3726
  try {
3661
- sessionStorage.setItem(Ei, JSON.stringify({
3727
+ sessionStorage.setItem(Mi, JSON.stringify({
3662
3728
  id: e,
3663
3729
  at: Date.now()
3664
3730
  }));
3665
3731
  } catch {}
3666
3732
  }
3667
- function Li() {
3733
+ function Gi() {
3668
3734
  try {
3669
- sessionStorage.removeItem(Ei), sessionStorage.removeItem(Di);
3735
+ sessionStorage.removeItem(Mi), sessionStorage.removeItem(Ni);
3670
3736
  } catch {}
3671
3737
  try {
3672
3738
  let e = new URL(window.location.href);
3673
- e.searchParams.has("ikon-oauth") && (e.searchParams.delete(Ti), window.history.replaceState(null, "", e.toString()));
3739
+ e.searchParams.has("ikon-oauth") && (e.searchParams.delete(ji), window.history.replaceState(null, "", e.toString()));
3674
3740
  } catch {}
3675
3741
  }
3676
3742
  //#endregion
3677
3743
  //#region src/auth/use-auth-guard.ts
3678
- function Ri(e) {
3679
- let { config: t, guestUrlParam: n } = e, { state: r, login: i, getToken: a } = Ci(), o = M(!1), s = M(!1), c = De(be, T, T), l = c.required;
3744
+ function Ki(e) {
3745
+ let { config: t, guestUrlParam: n } = e, { state: r, login: i, getToken: a } = ki(), o = M(!1), s = M(!1), c = M(null), l = Ae(Ce, T, T), u = l.required;
3680
3746
  k(() => {
3681
- Ai() && ve("An application is asking to act as you. Sign in to review what it wants.");
3747
+ Ii() && xe("An application is asking to act as you. Sign in to review what it wants.");
3682
3748
  }, []), k(() => {
3683
- if (!(!l || !r.isAuthenticated || !r.user || r.user.provider === "anonymous")) {
3684
- if (!ji()) {
3685
- x();
3749
+ if (!(!u || !r.isAuthenticated || !r.user || r.user.provider === "anonymous")) {
3750
+ if (!Li()) {
3751
+ c.current || re();
3686
3752
  return;
3687
3753
  }
3688
- s.current || (s.current = !0, Ni(a()).then((e) => {
3689
- (e || !ji()) && x();
3754
+ s.current || (s.current = !0, Bi(a()).then((e) => {
3755
+ if (e.status === "refused") {
3756
+ c.current = e.message, xe(e.message);
3757
+ return;
3758
+ }
3759
+ (e.status === "handed-off" || !Li()) && re();
3690
3760
  }).finally(() => {
3691
3761
  s.current = !1;
3692
3762
  }));
3693
3763
  }
3694
3764
  }, [
3695
- l,
3765
+ u,
3696
3766
  r.isAuthenticated,
3697
3767
  r.user,
3698
3768
  a
@@ -3701,7 +3771,7 @@ function Ri(e) {
3701
3771
  let e = t.methods.includes("global") ? "global" : t.methods.includes("guest") ? "guest" : null;
3702
3772
  if (!e) return;
3703
3773
  let a = new URLSearchParams(window.location.search), s = a.get(n);
3704
- if (s === "true" || s === "1" || s === "" || Gr()) {
3774
+ if (s === "true" || s === "1" || s === "" || Zr()) {
3705
3775
  a.delete(n);
3706
3776
  let t = a.toString(), r = window.location.pathname + (t ? `?${t}` : "");
3707
3777
  window.history.replaceState({}, "", r), o.current = !0, i(e);
@@ -3713,30 +3783,30 @@ function Ri(e) {
3713
3783
  t.methods,
3714
3784
  i
3715
3785
  ]);
3716
- let u = t.methods.includes("guest") || t.methods.includes("global"), d = r.isAuthenticated && (u || r.user?.provider !== "anonymous"), f = !!t.requireSignIn && !d;
3786
+ let d = t.methods.includes("guest") || t.methods.includes("global"), f = r.isAuthenticated && (d || r.user?.provider !== "anonymous"), p = !!t.requireSignIn && !f;
3717
3787
  return {
3718
- shouldRenderChildren: !f && !l,
3788
+ shouldRenderChildren: !p && !u,
3719
3789
  isCheckingAuth: r.isLoading,
3720
3790
  isAuthenticated: r.isAuthenticated,
3721
3791
  error: r.error,
3722
- isLoginPrompt: l && !f,
3723
- dismissLoginPrompt: x,
3724
- loginPromptReason: l ? c.reason : null
3792
+ isLoginPrompt: u && !p,
3793
+ dismissLoginPrompt: re,
3794
+ loginPromptReason: u ? l.reason : null
3725
3795
  };
3726
3796
  }
3727
3797
  //#endregion
3728
3798
  //#region src/debug/debug-overlay.tsx
3729
- var zi = (() => {
3799
+ var qi = (() => {
3730
3800
  try {
3731
3801
  return w();
3732
3802
  } catch {
3733
3803
  return !1;
3734
3804
  }
3735
- })(), Bi = Date.now(), $ = [], Vi = 300;
3736
- function Hi(e) {
3737
- $.push(`[+${((Date.now() - Bi) / 1e3).toFixed(1)}s] ${e}`), $.length > Vi && $.shift();
3805
+ })(), Ji = Date.now(), Q = [], Yi = 300;
3806
+ function Xi(e) {
3807
+ Q.push(`[+${((Date.now() - Ji) / 1e3).toFixed(1)}s] ${e}`), Q.length > Yi && Q.shift();
3738
3808
  }
3739
- function Ui(e) {
3809
+ function Zi(e) {
3740
3810
  if (typeof e == "string") return e;
3741
3811
  if (e instanceof Error) return `${e.name}: ${e.message}`;
3742
3812
  try {
@@ -3745,10 +3815,10 @@ function Ui(e) {
3745
3815
  return String(e);
3746
3816
  }
3747
3817
  }
3748
- var Wi = !1;
3749
- function Gi() {
3750
- if (Wi || typeof window > "u") return;
3751
- Wi = !0, window.addEventListener("error", (e) => Hi(`window.error: ${e.message} @ ${e.filename ?? "?"}:${e.lineno ?? "?"}:${e.colno ?? "?"}`)), window.addEventListener("unhandledrejection", (e) => Hi(`unhandledRejection: ${Ui(e.reason)}`));
3818
+ var Qi = !1;
3819
+ function $i() {
3820
+ if (Qi || typeof window > "u") return;
3821
+ Qi = !0, window.addEventListener("error", (e) => Xi(`window.error: ${e.message} @ ${e.filename ?? "?"}:${e.lineno ?? "?"}:${e.colno ?? "?"}`)), window.addEventListener("unhandledrejection", (e) => Xi(`unhandledRejection: ${Zi(e.reason)}`));
3752
3822
  let e = console;
3753
3823
  for (let t of [
3754
3824
  "error",
@@ -3759,17 +3829,17 @@ function Gi() {
3759
3829
  let n = e[t]?.bind(console) ?? (() => void 0);
3760
3830
  e[t] = (...e) => {
3761
3831
  try {
3762
- Hi(`console.${t}: ${e.map(Ui).join(" ")}`);
3832
+ Xi(`console.${t}: ${e.map(Zi).join(" ")}`);
3763
3833
  } catch {}
3764
3834
  n(...e);
3765
3835
  };
3766
3836
  }
3767
3837
  try {
3768
- xe((e) => Hi(`${e.levelName} [${e.component}] ${e.message}`), { minLevel: h.DEBUG });
3838
+ we((e) => Xi(`${e.levelName} [${e.component}] ${e.message}`), { minLevel: v.DEBUG });
3769
3839
  } catch {}
3770
3840
  }
3771
- zi && Gi();
3772
- function Ki() {
3841
+ qi && $i();
3842
+ function ea() {
3773
3843
  let e = !1;
3774
3844
  try {
3775
3845
  let t = URL.createObjectURL(new Blob([""]));
@@ -3779,11 +3849,11 @@ function Ki() {
3779
3849
  } catch {}
3780
3850
  return e;
3781
3851
  }
3782
- function qi() {
3852
+ function ta() {
3783
3853
  let e = globalThis;
3784
3854
  return [
3785
3855
  `Worker=${typeof Worker < "u"}`,
3786
- `moduleWorker=${Ki()}`,
3856
+ `moduleWorker=${ea()}`,
3787
3857
  `WebSocket=${typeof WebSocket < "u"}`,
3788
3858
  `WebTransport=${e.WebTransport !== void 0}`,
3789
3859
  `RTCPeerConnection=${typeof RTCPeerConnection < "u"}`,
@@ -3796,14 +3866,14 @@ function qi() {
3796
3866
  `online=${typeof navigator < "u" ? navigator.onLine : "?"}`
3797
3867
  ].join(" ");
3798
3868
  }
3799
- function Ji(e) {
3869
+ function na(e) {
3800
3870
  return /ERROR|error:|Rejection/.test(e) ? "#f88" : /WARN|warn:/.test(e) ? "#fc6" : "#9d9";
3801
3871
  }
3802
- function Yi({ state: e = "", forceVisible: t = !1 }) {
3803
- let n = zi || t, r = e === "connected" || e === "reconnecting", [, i] = Ee((e) => e + 1, 0), [a, o] = N(!0);
3872
+ function ra({ state: e = "", forceVisible: t = !1 }) {
3873
+ let n = qi || t, r = e === "connected" || e === "reconnecting", [, i] = ke((e) => e + 1, 0), [a, o] = N(!0);
3804
3874
  return k(() => {
3805
3875
  if (!n) return;
3806
- Gi();
3876
+ $i();
3807
3877
  let e = setInterval(i, 1e3);
3808
3878
  return () => clearInterval(e);
3809
3879
  }, [n]), n ? r && a ? /* @__PURE__ */ F("button", {
@@ -3823,7 +3893,7 @@ function Yi({ state: e = "", forceVisible: t = !1 }) {
3823
3893
  },
3824
3894
  children: [
3825
3895
  "🐞 debug (",
3826
- $.length,
3896
+ Q.length,
3827
3897
  ")"
3828
3898
  ]
3829
3899
  }) : /* @__PURE__ */ F("div", {
@@ -3857,9 +3927,9 @@ function Yi({ state: e = "", forceVisible: t = !1 }) {
3857
3927
  "Ikon debug overlay — state: ",
3858
3928
  e || "?",
3859
3929
  ", +",
3860
- Math.round((Date.now() - Bi) / 1e3),
3930
+ Math.round((Date.now() - Ji) / 1e3),
3861
3931
  "s, ",
3862
- $.length,
3932
+ Q.length,
3863
3933
  " entries",
3864
3934
  r && /* @__PURE__ */ P("button", {
3865
3935
  type: "button",
@@ -3898,7 +3968,7 @@ function Yi({ state: e = "", forceVisible: t = !1 }) {
3898
3968
  color: "#8cf",
3899
3969
  marginBottom: "4px"
3900
3970
  },
3901
- children: qi()
3971
+ children: ta()
3902
3972
  }),
3903
3973
  /* @__PURE__ */ P("div", {
3904
3974
  style: {
@@ -3907,9 +3977,9 @@ function Yi({ state: e = "", forceVisible: t = !1 }) {
3907
3977
  },
3908
3978
  children: typeof window < "u" ? `viewport=${window.innerWidth}x${window.innerHeight} dpr=${window.devicePixelRatio}` : ""
3909
3979
  }),
3910
- /* @__PURE__ */ P("div", { children: $.length === 0 ? "(nothing captured yet)" : $.map((e, t) => /* @__PURE__ */ P("div", {
3980
+ /* @__PURE__ */ P("div", { children: Q.length === 0 ? "(nothing captured yet)" : Q.map((e, t) => /* @__PURE__ */ P("div", {
3911
3981
  style: {
3912
- color: Ji(e),
3982
+ color: na(e),
3913
3983
  wordBreak: "break-all"
3914
3984
  },
3915
3985
  children: e
@@ -3919,7 +3989,7 @@ function Yi({ state: e = "", forceVisible: t = !1 }) {
3919
3989
  }
3920
3990
  //#endregion
3921
3991
  //#region src/app/connection-state-renderer.tsx
3922
- function Xi({ connectionState: e, error: t, isReady: n, isConnectingSlow: r, stores: i, registry: a, client: o, onAction: s, renderIdle: c, renderConnecting: l, renderConnectingSlow: u, renderConnected: d, renderOffline: f, renderError: p }) {
3992
+ function ia({ connectionState: e, error: t, isReady: n, isConnectingSlow: r, stores: i, registry: a, client: o, onAction: s, renderIdle: c, renderConnecting: l, renderConnectingSlow: u, renderConnected: d, renderOffline: f, renderError: p }) {
3923
3993
  let m = M(!1), h = (() => {
3924
3994
  switch (e) {
3925
3995
  case "waitingForExternalConnectUrl":
@@ -3945,252 +4015,252 @@ function Xi({ connectionState: e, error: t, isReady: n, isConnectingSlow: r, sto
3945
4015
  default: return null;
3946
4016
  }
3947
4017
  })();
3948
- return /* @__PURE__ */ F(Oe, { children: [h, /* @__PURE__ */ P(Yi, { state: e })] });
4018
+ return /* @__PURE__ */ F(je, { children: [h, /* @__PURE__ */ P(ra, { state: e })] });
3949
4019
  }
3950
4020
  //#endregion
3951
4021
  //#region src/app/boot-snapshot-variant.ts
3952
- function Zi(e, t) {
4022
+ function aa(e, t) {
3953
4023
  return e === !1 ? !1 : t ? "signed-in" : "guest";
3954
4024
  }
3955
4025
  //#endregion
3956
4026
  //#region src/app/use-ikon-app.ts
3957
- var Qi = S("useIkonApp");
3958
- function $i() {
4027
+ var oa = S("useIkonApp");
4028
+ function sa() {
3959
4029
  if (typeof window < "u" && window.__IKON_AUTH_CONFIG__) return window.__IKON_AUTH_CONFIG__;
3960
4030
  }
3961
- function ea() {
4031
+ function ca() {
3962
4032
  if (typeof window < "u" && window.__IKON_LOCAL_IKON_SERVER_CONFIG__) return window.__IKON_LOCAL_IKON_SERVER_CONFIG__;
3963
4033
  }
3964
- function ta(e, t) {
4034
+ function la(e, t) {
3965
4035
  return {
3966
4036
  ...e,
3967
4037
  ...t ?? {}
3968
4038
  };
3969
4039
  }
3970
- function na(e) {
3971
- return e?.token ? `${e.provider}:${ie(e.token) ?? e.token}` : null;
4040
+ function ua(e) {
4041
+ return e?.token ? `${e.provider}:${se(e.token) ?? e.token}` : null;
3972
4042
  }
3973
- function ra(e) {
3974
- let { authConfig: n, modules: r, parameters: l, timeouts: u, backgroundAudio: d, webRtc: f, audio: p, video: h, websocket: y, webtransport: b, httpstream: x, proxy: S, liveSnapshot: te, bootSnapshot: re } = e, w = n === void 0 ? $i() ?? null : n, ae = ea(), T = wi(), oe = !!T && T.state.isLoading, E = M(null), se = M(null), ce = M(null), ue = M(!1), de = M(!1), fe = M(d), pe = M(u), he = M(f), _e = M(p), ve = M(h), ye = M(y), be = M(b), xe = M(x), Se = M(S), Ce = M(te), we = M(re), D = M("local"), Te = M(void 0);
3975
- fe.current = d, pe.current = u, he.current = f, _e.current = p, ve.current = h, ye.current = y, be.current = b, xe.current = x, Se.current = S, Ce.current = te, we.current = re;
3976
- let [A, Ee] = N("connecting"), [De, Oe] = N(!1), [P, F] = N(!1), [ke, I] = N(null), [Ae, je] = N(null), [Me, Ne] = N(!1), [Pe, Fe] = N(!1), [Ie, Le] = N(!1), [Re, ze] = N(null), [L, Be] = N(null), [Ve, He] = N(!1), Ue = M(!1), [We, Ge] = N(0), [Ke, qe] = N(0), R = j(() => {
4043
+ function da(e) {
4044
+ let { authConfig: n, modules: r, parameters: f, timeouts: p, backgroundAudio: m, webRtc: h, audio: g, video: v, websocket: x, webtransport: ne, httpstream: re, proxy: S, liveSnapshot: ie, bootSnapshot: oe } = e, w = n === void 0 ? sa() ?? null : n, ce = ca(), T = Ai(), le = !!T && T.state.isLoading, E = M(null), ue = M(null), de = M(null), pe = M(!1), me = M(!1), he = M(m), ge = M(p), ve = M(h), be = M(g), xe = M(v), Se = M(x), Ce = M(ne), we = M(re), Te = M(S), Ee = M(ie), De = M(oe), D = M("local"), Oe = M(void 0);
4045
+ he.current = m, ge.current = p, ve.current = h, be.current = g, xe.current = v, Se.current = x, Ce.current = ne, we.current = re, Te.current = S, Ee.current = ie, De.current = oe;
4046
+ let [A, ke] = N("connecting"), [Ae, je] = N(!1), [P, F] = N(!1), [Me, I] = N(null), [Ne, Pe] = N(null), [Fe, Ie] = N(!1), [Le, Re] = N(!1), [ze, Be] = N(!1), [Ve, He] = N(null), [L, Ue] = N(null), [We, Ge] = N(!1), Ke = M(!1), [qe, Je] = N(0), [Ye, Xe] = N(0), R = j(() => {
3977
4047
  try {
3978
- return me();
4048
+ return _e();
3979
4049
  } catch {
3980
4050
  return { parameters: {} };
3981
4051
  }
3982
- }, []), Je = JSON.stringify(l ?? {}), Xe = j(() => ta(R.parameters, l), [R.parameters, Je]), z = (w?.methods?.length ?? 0) > 0, Ze = Zi(re, z && Or());
3983
- Ze !== !1 && !i() && a(Ze);
3984
- let B = j(() => {
4052
+ }, []), Ze = JSON.stringify(f ?? {}), z = j(() => la(R.parameters, f), [R.parameters, Ze]), $e = (w?.methods?.length ?? 0) > 0, B = aa(oe, $e && Nr());
4053
+ B !== !1 && !i() && a(B);
4054
+ let V = j(() => {
3985
4055
  if (!w?.spaceId) return null;
3986
4056
  let e = T?.state.user;
3987
4057
  return e ? {
3988
4058
  token: e.token,
3989
4059
  provider: e.provider,
3990
4060
  authenticatedAt: e.authenticatedAt
3991
- } : xr();
4061
+ } : Er();
3992
4062
  }, [
3993
4063
  w?.spaceId,
3994
- We,
4064
+ qe,
3995
4065
  T?.state.isLoading,
3996
4066
  T?.state.isAuthenticated,
3997
4067
  T?.state.user?.token
3998
- ]), Qe = ae?.enabled ?? !1, $e = ae?.host ?? "localhost", et = ae?.port ?? 8443, V = !oe && !!w && !B && !w.requireSignIn && !!w.spaceId && (le() || Qe);
3999
- V && !L && !Ve && !Ue.current && (Ue.current = !0, C(w.authUrl).then((e) => Lr(w.spaceId, e)).then((e) => {
4000
- Be(e.token), He(!0);
4068
+ ]), H = ce?.enabled ?? !1, et = ce?.host ?? l, tt = ce?.port ?? u, nt = !le && !!w && !V && !w.requireSignIn && !!w.spaceId && (fe() || H);
4069
+ nt && !L && !We && !Ke.current && (Ke.current = !0, C(w.authUrl).then((e) => Ur(w.spaceId, e)).then((e) => {
4070
+ Ue(e.token), Ge(!0);
4001
4071
  }).catch((e) => {
4002
- Qi.error("Anonymous auth failed:", e), Ue.current = !1, Qe ? He(!0) : I(e instanceof Error ? e.message : "Anonymous auth failed");
4072
+ oa.error("Anonymous auth failed:", e), Ke.current = !1, H ? Ge(!0) : I(e instanceof Error ? e.message : "Anonymous auth failed");
4003
4073
  }));
4004
- let tt = na(B), H = M(void 0);
4005
- H.current = B?.token ?? void 0;
4006
- let U = j(() => {
4007
- if (oe) return null;
4008
- if (Qe) {
4009
- if (V && !Ve) return null;
4010
- let e = H.current ?? L ?? void 0, t = e ? ie(e) ?? void 0 : void 0;
4074
+ let rt = ua(V), U = M(void 0);
4075
+ U.current = V?.token ?? void 0;
4076
+ let it = j(() => {
4077
+ if (le) return null;
4078
+ if (H) {
4079
+ if (nt && !We) return null;
4080
+ let e = U.current ?? L ?? void 0, t = e ? se(e) ?? void 0 : void 0;
4011
4081
  return { local: {
4012
- host: $e,
4013
- httpsPort: et,
4082
+ host: et,
4083
+ httpsPort: tt,
4014
4084
  userId: t,
4015
- token: H.current,
4085
+ token: U.current,
4016
4086
  identityToken: e,
4017
4087
  spaceId: w?.spaceId,
4018
4088
  backendUrl: w?.backendUrl,
4019
4089
  authUrl: w?.authUrl,
4020
- parameters: Xe
4090
+ parameters: z
4021
4091
  } };
4022
4092
  }
4023
- return H.current && w?.spaceId ? { sessionToken: {
4024
- token: H.current,
4093
+ return U.current && w?.spaceId ? { sessionToken: {
4094
+ token: U.current,
4025
4095
  spaceId: w.spaceId,
4026
- backendType: ne(),
4096
+ backendType: ae(),
4027
4097
  sessionIdentityHash: R.sessionIdentityHash,
4028
- parameters: Xe
4098
+ parameters: z
4029
4099
  } } : L && w?.spaceId ? { sessionToken: {
4030
4100
  token: L,
4031
4101
  spaceId: w.spaceId,
4032
- backendType: ne(),
4102
+ backendType: ae(),
4033
4103
  sessionIdentityHash: R.sessionIdentityHash,
4034
- parameters: Xe
4035
- } } : le() ? null : { local: {
4036
- host: $e,
4037
- httpsPort: et,
4104
+ parameters: z
4105
+ } } : fe() ? null : { local: {
4106
+ host: et,
4107
+ httpsPort: tt,
4038
4108
  spaceId: w?.spaceId,
4039
4109
  backendUrl: w?.backendUrl,
4040
4110
  authUrl: w?.authUrl,
4041
- parameters: Xe
4111
+ parameters: z
4042
4112
  } };
4043
4113
  }, [
4044
- oe,
4045
- Qe,
4046
- $e,
4114
+ le,
4115
+ H,
4047
4116
  et,
4048
4117
  tt,
4118
+ rt,
4049
4119
  w?.spaceId,
4050
4120
  w?.backendUrl,
4051
4121
  w?.authUrl,
4052
4122
  L,
4053
- V,
4054
- Ve,
4123
+ nt,
4124
+ We,
4055
4125
  R.sessionIdentityHash,
4056
- Xe
4126
+ z
4057
4127
  ]);
4058
- D.current = w?.spaceId ?? "local", Te.current = B?.token ?? L ?? void 0, xn(Re);
4059
- let nt = Cn(Re);
4128
+ D.current = w?.spaceId ?? "local", Oe.current = V?.token ?? L ?? void 0, Tn(Ve);
4129
+ let at = Dn(Ve);
4060
4130
  k(() => {
4061
- if (!ue.current) {
4062
- if (ue.current = !0, ce.current = sn(), r) for (let e of r) e(ce.current);
4063
- ce.current.loadRegisteredModules().catch((e) => {
4064
- Qi.error("Failed to load UI modules", e);
4131
+ if (!pe.current) {
4132
+ if (pe.current = !0, de.current = dn(), r) for (let e of r) e(de.current);
4133
+ de.current.loadRegisteredModules().catch((e) => {
4134
+ oa.error("Failed to load UI modules", e);
4065
4135
  });
4066
4136
  }
4067
4137
  }, []), k(() => {
4068
- if (!U) return;
4069
- let e = new m({
4070
- ...U,
4071
- timeouts: pe.current,
4072
- audio: _e.current !== void 0 || fe.current ? {
4073
- enabled: _e.current,
4074
- ...fe.current ? { background: {
4138
+ if (!it) return;
4139
+ let e = new _({
4140
+ ...it,
4141
+ timeouts: ge.current,
4142
+ audio: be.current !== void 0 || he.current ? {
4143
+ enabled: be.current,
4144
+ ...he.current ? { background: {
4075
4145
  allowOnDesktop: !0,
4076
4146
  allowOnMobile: !0
4077
4147
  } } : {}
4078
4148
  } : void 0,
4079
- video: ve.current === void 0 ? void 0 : { enabled: ve.current },
4149
+ video: xe.current === void 0 ? void 0 : { enabled: xe.current },
4080
4150
  mediaSession: {
4081
4151
  title: document.title || void 0,
4082
4152
  artist: document.title || void 0
4083
4153
  },
4084
- webRtc: he.current === !1 ? { enabled: !1 } : void 0,
4085
- websocket: ye.current,
4086
- webtransport: be.current,
4087
- httpstream: xe.current,
4088
- proxy: Se.current,
4154
+ webRtc: ve.current === !1 ? { enabled: !1 } : void 0,
4155
+ websocket: Se.current,
4156
+ webtransport: Ce.current,
4157
+ httpstream: we.current,
4158
+ proxy: Te.current,
4089
4159
  onConnectionStateChange: (e) => {
4090
- Ee(e);
4160
+ ke(e);
4091
4161
  },
4092
4162
  onError: (e) => {
4093
4163
  I(e.message);
4094
4164
  }
4095
4165
  });
4096
4166
  E.current = e;
4097
- let n = Ce.current ?? !0, r = Te.current, i = r ? ie(r) ?? null : null, a = n && i ? {
4167
+ let n = Ee.current ?? !0, r = Oe.current, i = r ? se(r) ?? null : null, a = n && i ? {
4098
4168
  enabled: !0,
4099
4169
  appId: D.current,
4100
4170
  userId: i
4101
- } : void 0, l = B != null && B.provider !== "anonymous", u = z && (l || Or()), d = new Ye({
4171
+ } : void 0, l = V != null && V.provider !== "anonymous", u = $e && (l || Nr()), d = new Qe({
4102
4172
  client: e,
4103
4173
  liveSnapshot: a,
4104
- bootSnapshot: Zi(we.current, u)
4174
+ bootSnapshot: aa(De.current, u)
4105
4175
  });
4106
- se.current = d, ze(d), F(!1);
4176
+ ue.current = d, He(d), F(!1);
4107
4177
  let f = d.subscribeToUiUpdates(() => {
4108
- F(!0), ge();
4178
+ F(!0), ye();
4109
4179
  });
4110
4180
  return e.connect().catch((e) => {
4111
- if (Qi.error("Connection failed:", e), e instanceof o) {
4112
- je(e.reason);
4181
+ if (oa.error("Connection failed:", e), e instanceof o) {
4182
+ Pe(e.reason);
4113
4183
  return;
4114
4184
  }
4115
- if (e instanceof _) {
4116
- Ne(!0);
4185
+ if (e instanceof ee) {
4186
+ Ie(!0);
4117
4187
  return;
4118
4188
  }
4119
- if (e instanceof v) {
4120
- Fe(!0);
4189
+ if (e instanceof b) {
4190
+ Re(!0);
4121
4191
  return;
4122
4192
  }
4123
- if (!(e instanceof ee)) {
4193
+ if (!(e instanceof te)) {
4124
4194
  if (e instanceof s) {
4125
- Le(!0);
4195
+ Be(!0);
4126
4196
  return;
4127
4197
  }
4128
- e instanceof g || e instanceof c && !de.current && (de.current = !0, Qi.warn("Auth session appears stale, clearing and retrying"), t.clearAll(), T ? T.logout() : (kr(), Ge((e) => e + 1)));
4198
+ e instanceof y || e instanceof c && !me.current && (me.current = !0, oa.warn("Auth session appears stale, clearing and retrying"), t.clearAll(), T ? T.logout() : (Pr(), Je((e) => e + 1)));
4129
4199
  }
4130
4200
  }), () => {
4131
- f(), e.disconnect(), E.current = null, d.dispose(), se.current = null;
4201
+ f(), e.disconnect(), E.current = null, d.dispose(), ue.current = null;
4132
4202
  };
4133
- }, [U, Ke]), k(() => {
4134
- let e = B?.token, t = E.current;
4203
+ }, [it, Ye]), k(() => {
4204
+ let e = V?.token, t = E.current;
4135
4205
  if (!(!e || !t)) {
4136
4206
  if (t.connectionState === "offline" && !t.serverStopped) {
4137
- qe((e) => e + 1);
4207
+ Xe((e) => e + 1);
4138
4208
  return;
4139
4209
  }
4140
4210
  t.updateAuthToken(e);
4141
4211
  }
4142
- }, [B?.token]);
4143
- let rt = O((e, t) => {
4144
- let n = typeof t == "string" ? t : JSON.stringify(t ?? {});
4145
- E.current?.sendActionCall(e, n);
4212
+ }, [V?.token]);
4213
+ let ot = O((e, t, n) => {
4214
+ let r = typeof t == "string" ? t : JSON.stringify(t ?? {});
4215
+ E.current?.sendActionCall(e, r, n);
4146
4216
  }, []);
4147
4217
  k(() => {
4148
- if (A !== "connecting") {
4149
- Oe(!1);
4218
+ if (A !== "connecting" && A !== "waitingForExternalConnectUrl") {
4219
+ je(!1);
4150
4220
  return;
4151
4221
  }
4152
- let e = E.current?.slowConnectionThresholdMs ?? 5e3, t = setTimeout(() => Oe(!0), e);
4222
+ let e = E.current?.slowConnectionThresholdMs ?? d, t = setTimeout(() => je(!0), e);
4153
4223
  return () => clearTimeout(t);
4154
4224
  }, [A]);
4155
- let it = A === "connected" || A === "reconnecting", at = P && A !== "offline";
4225
+ let st = A === "connected" || A === "reconnecting", ct = P && A !== "offline";
4156
4226
  return k(() => {
4157
- typeof document > "u" || (document.documentElement.dataset.ikonLive = String(at));
4158
- }, [at]), {
4227
+ typeof document > "u" || (document.documentElement.dataset.ikonLive = String(ct));
4228
+ }, [ct]), {
4159
4229
  connectionState: A,
4160
- error: ke,
4161
- accessDeniedReason: Ae,
4162
- isServerFull: Me,
4163
- isSessionExpired: Pe,
4164
- isStartupFailed: Ie,
4165
- stores: nt,
4230
+ error: Me,
4231
+ accessDeniedReason: Ne,
4232
+ isServerFull: Fe,
4233
+ isSessionExpired: Le,
4234
+ isStartupFailed: ze,
4235
+ stores: at,
4166
4236
  client: E.current,
4167
- registry: ce.current,
4237
+ registry: de.current,
4168
4238
  clientRef: E,
4169
- uiRef: se,
4170
- registryRef: ce,
4171
- onAction: rt,
4172
- isReady: it,
4173
- isLive: at,
4239
+ uiRef: ue,
4240
+ registryRef: de,
4241
+ onAction: ot,
4242
+ isReady: st,
4243
+ isLive: ct,
4174
4244
  brandingRequired: E.current?.brandingRequired ?? !1,
4175
- isConnectingSlow: De,
4245
+ isConnectingSlow: Ae,
4176
4246
  webRtcVideoStreams: E.current?.webRtcVideoStreams ?? /* @__PURE__ */ new Map(),
4177
4247
  webRtcTrackMap: E.current?.webRtcTrackMap ?? /* @__PURE__ */ new Map()
4178
4248
  };
4179
4249
  }
4180
4250
  //#endregion
4181
4251
  //#region src/hooks/use-toasts.ts
4182
- var ia = 0;
4183
- function aa(e = 5, t = 5e3) {
4252
+ var fa = 0;
4253
+ function pa(e = 5, t = 5e3) {
4184
4254
  let [n, r] = N([]), i = M(/* @__PURE__ */ new Map()), a = O((e) => {
4185
4255
  let t = i.current.get(e);
4186
4256
  t && (clearTimeout(t), i.current.delete(e)), r((t) => t.filter((t) => t.id !== e));
4187
4257
  }, []);
4188
4258
  return k(() => {
4189
- let n = i.current, o = xe((i) => {
4190
- if (!ue()) return;
4191
- let o = `toast-${++ia}`, s = {
4259
+ let n = i.current, o = we((i) => {
4260
+ if (!pe()) return;
4261
+ let o = `toast-${++fa}`, s = {
4192
4262
  id: o,
4193
- level: i.level === h.ERROR ? "error" : "warn",
4263
+ level: i.level === v.ERROR ? "error" : "warn",
4194
4264
  message: i.message,
4195
4265
  component: i.component
4196
4266
  };
@@ -4199,7 +4269,7 @@ function aa(e = 5, t = 5e3) {
4199
4269
  a(o);
4200
4270
  }, t);
4201
4271
  n.set(o, c);
4202
- }, { minLevel: h.WARN });
4272
+ }, { minLevel: v.WARN });
4203
4273
  return () => {
4204
4274
  o();
4205
4275
  for (let e of n.values()) clearTimeout(e);
@@ -4216,7 +4286,7 @@ function aa(e = 5, t = 5e3) {
4216
4286
  }
4217
4287
  //#endregion
4218
4288
  //#region src/hooks/use-ikon-reactive.ts
4219
- function oa(e, t, n) {
4289
+ function ma(e, t, n) {
4220
4290
  let [r, i] = N(n);
4221
4291
  return k(() => {
4222
4292
  if (!e) return;
@@ -4234,7 +4304,7 @@ function oa(e, t, n) {
4234
4304
  }
4235
4305
  //#endregion
4236
4306
  //#region src/hooks/use-reactive.ts
4237
- function sa(e, t, n) {
4307
+ function ha(e, t, n) {
4238
4308
  let [r, i] = N(null);
4239
4309
  return k(() => {
4240
4310
  if (!e) return;
@@ -4246,48 +4316,48 @@ function sa(e, t, n) {
4246
4316
  }), () => {
4247
4317
  n = !1;
4248
4318
  };
4249
- }, [e, t]), oa(r ? e : null, r ?? "", n);
4319
+ }, [e, t]), ma(r ? e : null, r ?? "", n);
4250
4320
  }
4251
4321
  //#endregion
4252
4322
  //#region src/app/use-ikon-debug.ts
4253
- var ca = S("IkonDebug"), la = {
4323
+ var $ = S("IkonDebug"), ga = {
4254
4324
  Digit1: "connecting",
4255
4325
  Digit2: "connected",
4256
4326
  Digit3: "reconnecting",
4257
4327
  Digit4: "offline",
4258
4328
  Digit5: "offline",
4259
4329
  Digit0: "clear"
4260
- }, ua = "Digit5", da = "Digit6", fa = "Synthetic debug error (Ctrl+Shift+5)", pa = "Synthetic debug access-denied (Ctrl+Shift+6)", ma = 5e3;
4261
- function ha(e) {
4262
- let t = ue(), [n, r] = N(null), [i, a] = N(!1), [o, s] = N(null), [c, l] = N(null), [u, d] = N(!1), [f, p] = N(!1), [m, h] = N(!1);
4330
+ }, _a = "Digit5", va = "Digit6", ya = "Synthetic debug error (Ctrl+Shift+5)", ba = "Synthetic debug access-denied (Ctrl+Shift+6)", xa = 5e3;
4331
+ function Sa(e) {
4332
+ let t = pe(), [n, r] = N(null), [i, a] = N(!1), [o, s] = N(null), [c, l] = N(null), [u, d] = N(!1), [f, p] = N(!1), [m, h] = N(!1);
4263
4333
  return k(() => {
4264
4334
  if (!t) return;
4265
4335
  let e = (e) => {
4266
4336
  if (!e.ctrlKey || !e.shiftKey) return;
4267
4337
  if (e.code === "KeyE") {
4268
- e.preventDefault(), d((e) => (ca.warn(`Empty-stores override: ${e ? "off" : "on"}`), !e));
4338
+ e.preventDefault(), d((e) => ($.warn(`Empty-stores override: ${e ? "off" : "on"}`), !e));
4269
4339
  return;
4270
4340
  }
4271
4341
  if (e.code === "Digit7") {
4272
- e.preventDefault(), p((e) => (ca.warn(`Branding-banner override: ${e ? "off" : "on"}`), !e));
4342
+ e.preventDefault(), p((e) => ($.warn(`Branding-banner override: ${e ? "off" : "on"}`), !e));
4273
4343
  return;
4274
4344
  }
4275
4345
  if (e.code === "Digit8") {
4276
- e.preventDefault(), h((e) => (ca.warn(`Debug-overlay override: ${e ? "off" : "on"}`), !e));
4346
+ e.preventDefault(), h((e) => ($.warn(`Debug-overlay override: ${e ? "off" : "on"}`), !e));
4277
4347
  return;
4278
4348
  }
4279
- if (e.code === da) {
4280
- e.preventDefault(), l(pa), r(null), s(null), ca.warn("Forced access denied");
4349
+ if (e.code === va) {
4350
+ e.preventDefault(), l(ba), r(null), s(null), $.warn("Forced access denied");
4281
4351
  return;
4282
4352
  }
4283
- let t = la[e.code];
4353
+ let t = ga[e.code];
4284
4354
  if (t === void 0) return;
4285
4355
  if (e.preventDefault(), t === "clear") {
4286
- r(null), s(null), l(null), ca.warn("Cleared forced state");
4356
+ r(null), s(null), l(null), $.warn("Cleared forced state");
4287
4357
  return;
4288
4358
  }
4289
- let n = e.code === ua;
4290
- r(t), s(n ? fa : null), l(null), ca.warn(`Forced state: ${t}${n ? " (with error)" : ""}`);
4359
+ let n = e.code === _a;
4360
+ r(t), s(n ? ya : null), l(null), $.warn(`Forced state: ${t}${n ? " (with error)" : ""}`);
4291
4361
  };
4292
4362
  return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
4293
4363
  }, [t]), k(() => {
@@ -4295,7 +4365,7 @@ function ha(e) {
4295
4365
  a(!1);
4296
4366
  return;
4297
4367
  }
4298
- let e = setTimeout(() => a(!0), ma);
4368
+ let e = setTimeout(() => a(!0), xa);
4299
4369
  return () => clearTimeout(e);
4300
4370
  }, [n]), !t || n === null && !u && c === null && !f && !m ? {
4301
4371
  app: e,
@@ -4326,64 +4396,64 @@ function ha(e) {
4326
4396
  }
4327
4397
  //#endregion
4328
4398
  //#region src/app/ikon-app.tsx
4329
- function ga(e, t) {
4399
+ function Ca(e, t) {
4330
4400
  return e === void 0 ? null : typeof e == "function" ? e(t) : e;
4331
4401
  }
4332
- function _a(e) {
4402
+ function wa(e) {
4333
4403
  return e === void 0 ? null : typeof e == "function" ? e() : e;
4334
4404
  }
4335
- function va(e, t) {
4405
+ function Ta(e, t) {
4336
4406
  return e === void 0 ? null : typeof e == "function" ? e(t) : e;
4337
4407
  }
4338
- function ya(e, t) {
4408
+ function Ea(e, t) {
4339
4409
  return e === void 0 ? null : typeof e == "function" ? e(t) : e;
4340
4410
  }
4341
- function ba(e) {
4342
- let { connectingOverlay: t, reconnectingOverlay: n, offlineOverlay: r, accessDeniedScreen: i, ...a } = e, o = ha(a), { app: s } = o, { connectionState: c, isConnectingSlow: l, stores: u, registry: d, client: f, onAction: p, isReady: m, error: h, accessDeniedReason: g, brandingRequired: _ } = s, ee = _ || o.forcedBranding, v = M(null);
4343
- u && d && (m || u.size > 0) && (v.current = {
4411
+ function Da(e) {
4412
+ let { connectingOverlay: t, reconnectingOverlay: n, offlineOverlay: r, accessDeniedScreen: i, ...a } = e, o = Sa(a), { app: s } = o, { connectionState: c, isConnectingSlow: l, stores: u, registry: d, client: f, onAction: p, isReady: m, error: h, accessDeniedReason: g, brandingRequired: _ } = s, v = _ || o.forcedBranding, y = M(null);
4413
+ u && d && (m || u.size > 0) && (y.current = {
4344
4414
  stores: u,
4345
4415
  registry: d,
4346
4416
  client: f
4347
4417
  });
4348
- let y = v.current != null || !!g;
4418
+ let ee = y.current != null || !!g;
4349
4419
  if (A(() => {
4350
- !y || typeof document > "u" || document.querySelectorAll("[data-ikon-prerender]").forEach((e) => e.remove());
4351
- }, [y]), g) return ya(i, g);
4352
- let b = v.current, x;
4420
+ !ee || typeof document > "u" || document.querySelectorAll("[data-ikon-prerender]").forEach((e) => e.remove());
4421
+ }, [ee]), g) return Ea(i, g);
4422
+ let te = y.current, b;
4353
4423
  switch (c) {
4354
4424
  case "waitingForExternalConnectUrl":
4355
4425
  case "connecting":
4356
- x = ga(t, l);
4426
+ b = Ca(t, l);
4357
4427
  break;
4358
4428
  case "reconnecting":
4359
- x = _a(n);
4429
+ b = wa(n);
4360
4430
  break;
4361
4431
  case "offline":
4362
- x = va(r, h);
4432
+ b = Ta(r, h);
4363
4433
  break;
4364
- default: x = null;
4434
+ default: b = null;
4365
4435
  }
4366
- return /* @__PURE__ */ F(Oe, { children: [
4367
- b && /* @__PURE__ */ P(Je, {
4368
- stores: b.stores,
4369
- registry: b.registry,
4370
- client: b.client,
4436
+ return /* @__PURE__ */ F(je, { children: [
4437
+ te && /* @__PURE__ */ P(z, {
4438
+ stores: te.stores,
4439
+ registry: te.registry,
4440
+ client: te.client,
4371
4441
  onAction: p
4372
4442
  }),
4373
- x,
4374
- ee && /* @__PURE__ */ P(Sa, {}),
4375
- /* @__PURE__ */ P(Ca, {}),
4376
- /* @__PURE__ */ P(Yi, {
4443
+ b,
4444
+ v && /* @__PURE__ */ P(ka, {}),
4445
+ /* @__PURE__ */ P(Aa, {}),
4446
+ /* @__PURE__ */ P(ra, {
4377
4447
  state: c,
4378
4448
  forceVisible: o.forcedDebugOverlay
4379
4449
  })
4380
4450
  ] });
4381
4451
  }
4382
- var xa = "https://ikonai.com";
4383
- function Sa() {
4452
+ var Oa = "https://ikonai.com";
4453
+ function ka() {
4384
4454
  return /* @__PURE__ */ F("a", {
4385
4455
  className: "ikon-branding-banner",
4386
- href: xa,
4456
+ href: Oa,
4387
4457
  target: "_blank",
4388
4458
  rel: "noopener noreferrer",
4389
4459
  style: {
@@ -4413,17 +4483,17 @@ function Sa() {
4413
4483
  })]
4414
4484
  });
4415
4485
  }
4416
- function Ca() {
4417
- let { toasts: e, dismissToast: t } = aa();
4486
+ function Aa() {
4487
+ let { toasts: e, dismissToast: t } = pa();
4418
4488
  return e.length === 0 ? null : /* @__PURE__ */ P("div", {
4419
4489
  className: "ikon-toast-overlay",
4420
- children: e.map((e) => /* @__PURE__ */ P(wa, {
4490
+ children: e.map((e) => /* @__PURE__ */ P(ja, {
4421
4491
  toast: e,
4422
4492
  onDismiss: t
4423
4493
  }, e.id))
4424
4494
  });
4425
4495
  }
4426
- function wa({ toast: e, onDismiss: t }) {
4496
+ function ja({ toast: e, onDismiss: t }) {
4427
4497
  return /* @__PURE__ */ F("div", {
4428
4498
  className: `ikon-toast-overlay-chip ikon-toast-overlay-chip--${e.level}`,
4429
4499
  onClick: () => t(e.id),
@@ -4449,9 +4519,9 @@ function wa({ toast: e, onDismiss: t }) {
4449
4519
  }
4450
4520
  //#endregion
4451
4521
  //#region src/app/connection-recovery.ts
4452
- function Ta({ isSessionExpired: e }) {
4522
+ function Ma({ isSessionExpired: e }) {
4453
4523
  if (e) {
4454
- let e = ce();
4524
+ let e = de();
4455
4525
  if (e) return {
4456
4526
  kind: "freshSession",
4457
4527
  run: () => {
@@ -4468,37 +4538,37 @@ function Ta({ isSessionExpired: e }) {
4468
4538
  }
4469
4539
  //#endregion
4470
4540
  //#region src/i18n/i18n.tsx
4471
- var Ea = we(null);
4472
- function Da(e, t) {
4541
+ var Na = De(null);
4542
+ function Pa(e, t) {
4473
4543
  return t ? e.replace(/\{(\w+)\}/g, (e, n) => t[n] ?? `{${n}}`) : e;
4474
4544
  }
4475
- function Oa(e, t) {
4476
- let n = ae();
4545
+ function Fa(e, t) {
4546
+ let n = ce();
4477
4547
  if (n && e.includes(n)) return n;
4478
4548
  let r = navigator.language.split("-")[0];
4479
4549
  return e.includes(r) ? r : t && e.includes(t) ? t : "en";
4480
4550
  }
4481
- function ka(e, t, n) {
4482
- return t ? Oa(e, n) : n && e.includes(n) ? n : "en";
4551
+ function Ia(e, t, n) {
4552
+ return t ? Fa(e, n) : n && e.includes(n) ? n : "en";
4483
4553
  }
4484
- function Aa({ children: e, translations: t, defaultLanguage: n, detectLanguage: r = !1 }) {
4485
- let i = ka(Object.keys(t), r, n), a = t[i] ?? t.en, o = j(() => ({
4554
+ function La({ children: e, translations: t, defaultLanguage: n, detectLanguage: r = !1 }) {
4555
+ let i = Ia(Object.keys(t), r, n), a = t[i] ?? t.en, o = j(() => ({
4486
4556
  t: (e, t) => {
4487
4557
  let n = a[e];
4488
- return Da(n, t);
4558
+ return Pa(n, t);
4489
4559
  },
4490
4560
  locale: i,
4491
4561
  translations: a
4492
4562
  }), [a, i]);
4493
- return /* @__PURE__ */ P(Ea, {
4563
+ return /* @__PURE__ */ P(Na, {
4494
4564
  value: o,
4495
4565
  children: e
4496
4566
  });
4497
4567
  }
4498
- function ja() {
4499
- let e = Te(Ea);
4568
+ function Ra() {
4569
+ let e = Oe(Na);
4500
4570
  if (!e) throw Error("useI18n must be used within an I18nProvider");
4501
4571
  return e;
4502
4572
  }
4503
4573
  //#endregion
4504
- export { Si as AuthProvider, Xi as ConnectionStateRenderer, zi as DEBUG_OVERLAY_ENABLED, Yi as DebugOverlay, Aa as I18nProvider, _t as IKON_UI_BASE_MODULE, Lt as IKON_UI_MEDIA_MODULE, tn as IKON_UI_SHADERTOY_MODULE, $t as IKON_UI_SHADERTOY_TYPE, qe as IKON_UI_STREAM_CATEGORY, jt as IKON_UI_VIDEO_CANVAS_TYPE, Mt as IKON_UI_VIDEO_URL_PLAYER_TYPE, ba as IkonApp, Ye as IkonUi, on as IkonUiRegistry, Je as IkonUiSurface, Ge as InspectOverlay, dn as ParallaxView, He as UiComponentRegistry, Ve as UiRenderer, n as UiStreamStore, Et as VideoStreamView, Lr as authenticateAnonymous, Yr as buildOAuthRedirectUrl, kr as clearAuthSession, Jr as clearOAuthParams, gt as createBaseResolvers, Ue as createComponentLibrary, sn as createIkonUiRegistry, Pt as createMediaResolvers, en as createShadertoyRendererResolver, Ta as getConnectionRecovery, R as isIkonUiCategoryMatch, xr as loadAuthSession, vt as loadBaseModule, Rt as loadMediaModule, nn as loadShadertoyModule, Br as parseOAuthCallback, Wr as parseOAuthError, he as randomUuid, yt as registerBaseModule, zt as registerMediaModule, rn as registerShadertoyModule, L as renderChildren, Fn as renderMotionLetters, q as saveAuthSession, Rr as sendLoginCode, J as sessionToUser, Ci as useAuth, Ri as useAuthGuard, wi as useAuthOptional, On as useCameraCapture, ja as useI18n, ra as useIkonApp, ha as useIkonDebug, oa as useIkonReactive, xn as useIkonStyles, Cn as useIkonUiStores, Dn as useMicrophoneCapture, sa as useReactive, kn as useScreenCapture, wn as useSiblingClient, aa as useToasts, I as useUiNode, We as useUiStore, zr as verifyLoginCode };
4574
+ export { Oi as AuthProvider, ia as ConnectionStateRenderer, qi as DEBUG_OVERLAY_ENABLED, ra as DebugOverlay, La as I18nProvider, xt as IKON_UI_BASE_MODULE, Vt as IKON_UI_MEDIA_MODULE, on as IKON_UI_SHADERTOY_MODULE, rn as IKON_UI_SHADERTOY_TYPE, R as IKON_UI_STREAM_CATEGORY, Ft as IKON_UI_VIDEO_CANVAS_TYPE, It as IKON_UI_VIDEO_URL_PLAYER_TYPE, Da as IkonApp, Qe as IkonUi, un as IkonUiRegistry, z as IkonUiSurface, Ye as InspectOverlay, hn as ParallaxView, Ke as UiComponentRegistry, Ge as UiRenderer, n as UiStreamStore, At as VideoStreamView, Ur as authenticateAnonymous, ti as buildOAuthRedirectUrl, Pr as clearAuthSession, ei as clearOAuthParams, bt as createBaseResolvers, qe as createComponentLibrary, dn as createIkonUiRegistry, Rt as createMediaResolvers, an as createShadertoyRendererResolver, Ma as getConnectionRecovery, Ze as isIkonUiCategoryMatch, Er as loadAuthSession, St as loadBaseModule, Ht as loadMediaModule, sn as loadShadertoyModule, Kr as parseOAuthCallback, Xr as parseOAuthError, ve as randomUuid, Ct as registerBaseModule, Ut as registerMediaModule, cn as registerShadertoyModule, Ue as renderChildren, zn as renderMotionLetters, K as saveAuthSession, Wr as sendLoginCode, q as sessionToUser, ki as useAuth, Ki as useAuthGuard, Ai as useAuthOptional, Mn as useCameraCapture, Ra as useI18n, da as useIkonApp, Sa as useIkonDebug, ma as useIkonReactive, Tn as useIkonStyles, Dn as useIkonUiStores, jn as useMicrophoneCapture, ha as useReactive, Nn as useScreenCapture, On as useSiblingClient, pa as useToasts, I as useUiNode, Je as useUiStore, Gr as verifyLoginCode };