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