eidotter 0.37.1 → 0.37.2

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.
Files changed (43) hide show
  1. package/LICENSE.md +3 -3
  2. package/dist/components/Brand/components/Wordmark.d.ts +1 -1
  3. package/dist/components/Brand/components/Wordmark.js +1 -1
  4. package/dist/components/CalendarHeatmap/components/CalendarHeatmap.d.ts +40 -0
  5. package/dist/components/CalendarHeatmap/components/CalendarHeatmap.js +84 -0
  6. package/dist/components/CalendarHeatmap/components/index.d.ts +2 -0
  7. package/dist/components/CalendarHeatmap/components/index.js +1 -0
  8. package/dist/components/CalendarHeatmap/index.d.ts +2 -0
  9. package/dist/components/CalendarHeatmap/index.js +1 -0
  10. package/dist/components/CommandPrompt/components/CommandPrompt.js +1 -1
  11. package/dist/components/HoldToComplete/components/HoldToComplete.d.ts +30 -0
  12. package/dist/components/HoldToComplete/components/HoldToComplete.js +145 -0
  13. package/dist/components/HoldToComplete/components/index.d.ts +2 -0
  14. package/dist/components/HoldToComplete/components/index.js +1 -0
  15. package/dist/components/HoldToComplete/index.d.ts +2 -0
  16. package/dist/components/HoldToComplete/index.js +1 -0
  17. package/dist/components/InlineExpand/components/InlineExpand.d.ts +1 -1
  18. package/dist/components/InlineExpand/components/InlineExpand.js +30 -2
  19. package/dist/components/ProgressRing/components/ProgressRing.d.ts +35 -0
  20. package/dist/components/ProgressRing/components/ProgressRing.js +34 -0
  21. package/dist/components/ProgressRing/components/index.d.ts +2 -0
  22. package/dist/components/ProgressRing/components/index.js +1 -0
  23. package/dist/components/ProgressRing/index.d.ts +2 -0
  24. package/dist/components/ProgressRing/index.js +1 -0
  25. package/dist/components/TimelineContainer/components/TimelineContainer.js +1 -1
  26. package/dist/components/registry.d.ts +1 -1
  27. package/dist/components/registry.js +422 -16
  28. package/dist/eidotter.css +1 -1
  29. package/dist/index.d.ts +6 -0
  30. package/dist/index.es.js +1790 -501
  31. package/dist/index.umd.js +3 -3
  32. package/package.json +12 -4
  33. package/src/styles/dos-utilities.css +15 -6
  34. package/src/styles/fonts/JetBrainsMonoNerdFont-Bold.woff2 +0 -0
  35. package/src/styles/fonts/JetBrainsMonoNerdFont-Medium.woff2 +0 -0
  36. package/src/styles/fonts/JetBrainsMonoNerdFont-Regular.woff2 +0 -0
  37. package/src/styles/fonts/JetBrainsMonoNerdFont-SemiBold.woff2 +0 -0
  38. package/src/styles/fonts/JetBrainsMonoNerdFont_OFL.txt +93 -0
  39. package/src/styles/fonts.css +50 -3
  40. package/src/styles/tokens.css +9 -4
  41. package/tailwind.preset.cjs +9 -1
  42. package/src/styles/fonts/Flexi_IBM_VGA_LICENSE.txt +0 -428
  43. package/src/styles/fonts/Flexi_IBM_VGA_True.ttf +0 -0
package/dist/index.es.js CHANGED
@@ -395,7 +395,7 @@ function Ie(e) {
395
395
  if (!(e instanceof t.HTMLElement) && !(e instanceof t.SVGElement)) return !1;
396
396
  let { display: n, visibility: r } = e.style, i = n !== "none" && r !== "hidden" && r !== "collapse";
397
397
  if (i) {
398
- let { getComputedStyle: t } = e.ownerDocument.defaultView, { display: n, visibility: r } = t(e);
398
+ let { getComputedStyle: t } = be(e), { display: n, visibility: r } = t(e);
399
399
  i = n !== "none" && r !== "hidden" && r !== "collapse";
400
400
  }
401
401
  return i;
@@ -435,7 +435,7 @@ function Ue(e) {
435
435
  function We(e) {
436
436
  let t = e;
437
437
  for (; t != null;) {
438
- if (t instanceof t.ownerDocument.defaultView.HTMLElement && t.inert) return !0;
438
+ if (t instanceof be(t).HTMLElement && t.inert) return !0;
439
439
  t = t.parentElement;
440
440
  }
441
441
  return !1;
@@ -635,15 +635,23 @@ function kt(e) {
635
635
  let t = be(e), n = H(e);
636
636
  if (vt.get(t)) return;
637
637
  let r = t.HTMLElement.prototype.focus;
638
- t.HTMLElement.prototype.focus = function() {
639
- yt = !0, r.apply(this, arguments);
640
- }, n.addEventListener("keydown", wt, !0), n.addEventListener("keyup", wt, !0), n.addEventListener("click", Et, !0), t.addEventListener("focus", Dt, !0), t.addEventListener("blur", Ot, !1), typeof PointerEvent < "u" ? (n.addEventListener("pointerdown", Tt, !0), n.addEventListener("pointermove", Tt, !0), n.addEventListener("pointerup", Tt, !0)) : process.env.NODE_ENV === "test" && (n.addEventListener("mousedown", Tt, !0), n.addEventListener("mousemove", Tt, !0), n.addEventListener("mouseup", Tt, !0)), t.addEventListener("beforeunload", () => {
638
+ Reflect.defineProperty(t.HTMLElement.prototype, "focus", {
639
+ configurable: !0,
640
+ writable: !0,
641
+ value: function() {
642
+ yt = !0, r.apply(this, arguments);
643
+ }
644
+ }), n.addEventListener("keydown", wt, !0), n.addEventListener("keyup", wt, !0), n.addEventListener("click", Et, !0), t.addEventListener("focus", Dt, !0), t.addEventListener("blur", Ot, !1), typeof PointerEvent < "u" ? (n.addEventListener("pointerdown", Tt, !0), n.addEventListener("pointermove", Tt, !0), n.addEventListener("pointerup", Tt, !0)) : process.env.NODE_ENV === "test" && (n.addEventListener("mousedown", Tt, !0), n.addEventListener("mousemove", Tt, !0), n.addEventListener("mouseup", Tt, !0)), t.addEventListener("beforeunload", () => {
641
645
  At(e);
642
646
  }, { once: !0 }), vt.set(t, { focus: r });
643
647
  }
644
648
  var At = (e, t) => {
645
649
  let n = be(e), r = H(e);
646
- t && r.removeEventListener("DOMContentLoaded", t), vt.has(n) && (n.HTMLElement.prototype.focus = vt.get(n).focus, r.removeEventListener("keydown", wt, !0), r.removeEventListener("keyup", wt, !0), r.removeEventListener("click", Et, !0), n.removeEventListener("focus", Dt, !0), n.removeEventListener("blur", Ot, !1), typeof PointerEvent < "u" ? (r.removeEventListener("pointerdown", Tt, !0), r.removeEventListener("pointermove", Tt, !0), r.removeEventListener("pointerup", Tt, !0)) : process.env.NODE_ENV === "test" && (r.removeEventListener("mousedown", Tt, !0), r.removeEventListener("mousemove", Tt, !0), r.removeEventListener("mouseup", Tt, !0)), vt.delete(n));
650
+ t && r.removeEventListener("DOMContentLoaded", t), vt.has(n) && (Reflect.defineProperty(n.HTMLElement.prototype, "focus", {
651
+ configurable: !0,
652
+ writable: !0,
653
+ value: vt.get(n).focus
654
+ }), r.removeEventListener("keydown", wt, !0), r.removeEventListener("keyup", wt, !0), r.removeEventListener("click", Et, !0), n.removeEventListener("focus", Dt, !0), n.removeEventListener("blur", Ot, !1), typeof PointerEvent < "u" ? (r.removeEventListener("pointerdown", Tt, !0), r.removeEventListener("pointermove", Tt, !0), r.removeEventListener("pointerup", Tt, !0)) : process.env.NODE_ENV === "test" && (r.removeEventListener("mousedown", Tt, !0), r.removeEventListener("mousemove", Tt, !0), r.removeEventListener("mouseup", Tt, !0)), vt.delete(n));
647
655
  };
648
656
  function jt(e) {
649
657
  let t = H(e), n;
@@ -1372,7 +1380,7 @@ function Fn(e) {
1372
1380
  t && process.env.NODE_ENV !== "production" ? console.error("stopPropagation is now the default behavior for events in React Spectrum. You can use continuePropagation() to revert this behavior.") : t = !0;
1373
1381
  },
1374
1382
  continuePropagation() {
1375
- t = !1;
1383
+ t = !1, typeof n.continuePropagation == "function" && n.continuePropagation();
1376
1384
  },
1377
1385
  isPropagationStopped() {
1378
1386
  return t;
@@ -2666,7 +2674,7 @@ function Vi(e, t, n) {
2666
2674
  function Hi(e, t, n) {
2667
2675
  let { validationBehavior: r, focus: i } = e;
2668
2676
  C(() => {
2669
- if (r === "native" && n?.current && !n.current.disabled) {
2677
+ if (r === "native" && n?.current && "setCustomValidity" in n.current && !n.current.disabled) {
2670
2678
  let e = t.realtimeValidation.isInvalid ? t.realtimeValidation.validationErrors.join(" ") || "Invalid value." : "";
2671
2679
  n.current.setCustomValidity(e), n.current.hasAttribute("title") || (n.current.title = ""), t.realtimeValidation.isInvalid || t.updateValidation(Wi(n.current));
2672
2680
  }
@@ -3544,19 +3552,41 @@ function Ga(e) {
3544
3552
  let { keyboardDelegate: t, selectionManager: n, onTypeSelect: r } = e, i = f({
3545
3553
  search: "",
3546
3554
  timeout: void 0
3547
- }).current;
3548
- return { typeSelectProps: { onKeyDownCapture: t.getKeyForSearch ? (e) => {
3549
- let a = Ka(e.key);
3550
- if (!(!a || e.ctrlKey || e.metaKey || !U(e.currentTarget, G(e)) || i.search.length === 0 && a === " ")) {
3551
- if (a === " " && i.search.trim().length > 0 && (e.preventDefault(), "continuePropagation" in e || e.stopPropagation()), i.search += a, t.getKeyForSearch != null) {
3552
- let e = t.getKeyForSearch(i.search, n.focusedKey);
3553
- e ??= t.getKeyForSearch(i.search), e != null && (n.setFocusedKey(e), r && r(e));
3555
+ });
3556
+ return s(() => {
3557
+ let e = i.current.timeout;
3558
+ return () => {
3559
+ clearTimeout(e);
3560
+ };
3561
+ }, [i]), { typeSelectProps: {
3562
+ onKeyDownCapture: t.getKeyForSearch ? (e) => {
3563
+ if (i.current.search.length > 0 && e.key === " ") {
3564
+ if (e.preventDefault(), (!("continuePropagation" in e) || "continuePropagation" in e && !e.isPropagationStopped()) && e.stopPropagation(), i.current.search += " ", t.getKeyForSearch != null) {
3565
+ let e = t.getKeyForSearch(i.current.search, n.focusedKey);
3566
+ e ??= t.getKeyForSearch(i.current.search), e != null && (n.setFocusedKey(e), r && r(e));
3567
+ }
3568
+ clearTimeout(i.current.timeout), i.current.timeout = setTimeout(() => {
3569
+ i.current.search = "";
3570
+ }, Wa);
3554
3571
  }
3555
- clearTimeout(i.timeout), i.timeout = setTimeout(() => {
3556
- i.search = "";
3557
- }, Wa);
3558
- }
3559
- } : void 0 } };
3572
+ } : void 0,
3573
+ onKeyDown: t.getKeyForSearch ? (e) => {
3574
+ let a = Ka(e.key);
3575
+ if (!(!a || e.ctrlKey || e.metaKey || e.altKey || !U(e.currentTarget, G(e)) || i.current.search.length === 0 && a === " ")) {
3576
+ if (i.current.search += a, t.getKeyForSearch != null) {
3577
+ let a = t.getKeyForSearch(i.current.search, n.focusedKey);
3578
+ if (a ??= t.getKeyForSearch(i.current.search), a != null) n.setFocusedKey(a), r && r(a), e.preventDefault(), "continuePropagation" in e || e.stopPropagation();
3579
+ else {
3580
+ i.current.search = "", clearTimeout(i.current.timeout), i.current.timeout = void 0;
3581
+ return;
3582
+ }
3583
+ }
3584
+ clearTimeout(i.current.timeout), i.current.timeout = setTimeout(() => {
3585
+ i.current.search = "";
3586
+ }, Wa);
3587
+ }
3588
+ } : void 0
3589
+ } };
3560
3590
  }
3561
3591
  function Ka(e) {
3562
3592
  return e.length === 1 || !/^[A-Z]/i.test(e) ? e : "";
@@ -3574,7 +3604,7 @@ function qa(e, t) {
3574
3604
  //#endregion
3575
3605
  //#region node_modules/react-aria/dist/private/selection/useSelectableCollection.mjs
3576
3606
  function Ja(e) {
3577
- let { selectionManager: t, keyboardDelegate: n, ref: r, autoFocus: i = !1, shouldFocusWrap: a = !1, disallowEmptySelection: o = !1, disallowSelectAll: c = !1, escapeKeyBehavior: l = "clearSelection", selectOnFocus: u = t.selectionBehavior === "replace", disallowTypeAhead: d = !1, shouldUseVirtualFocus: p, allowsTabNavigation: m = !1, scrollRef: h = r, linkBehavior: g = "action" } = e, { direction: v } = tn(), y = dt(), b = (e) => {
3607
+ let { selectionManager: t, keyboardDelegate: n, ref: r, autoFocus: i = !1, shouldFocusWrap: a = !1, disallowEmptySelection: o = !1, disallowSelectAll: c = !1, escapeKeyBehavior: l = "clearSelection", selectOnFocus: u = t.selectionBehavior === "replace", disallowTypeAhead: d = !1, shouldUseVirtualFocus: p, allowsTabNavigation: m = !1, scrollRef: h = r, linkBehavior: g = "action", UNSTABLE_focusOnEntry: v } = e, { direction: y } = tn(), b = dt(), x = (e) => {
3578
3608
  if (e.altKey && e.key === "Tab" && e.preventDefault(), !r.current || !U(r.current, G(e))) return;
3579
3609
  let i = (n, i) => {
3580
3610
  if (n != null) {
@@ -3583,7 +3613,7 @@ function Ja(e) {
3583
3613
  t.setFocusedKey(n, i);
3584
3614
  });
3585
3615
  let a = Ba(r, n), o = t.getItemProps(n);
3586
- a && y.open(a, e, o.href, o.routerOptions);
3616
+ a && b.open(a, e, o.href, o.routerOptions);
3587
3617
  return;
3588
3618
  }
3589
3619
  if (t.setFocusedKey(n, i), t.isLink(n) && g === "override") return;
@@ -3606,13 +3636,13 @@ function Ja(e) {
3606
3636
  case "ArrowLeft":
3607
3637
  if (n.getKeyLeftOf) {
3608
3638
  let r = t.focusedKey == null ? n.getFirstKey?.() : n.getKeyLeftOf?.(t.focusedKey);
3609
- r == null && a && (r = v === "rtl" ? n.getFirstKey?.(t.focusedKey) : n.getLastKey?.(t.focusedKey)), r != null && (e.preventDefault(), i(r, v === "rtl" ? "first" : "last"));
3639
+ r == null && a && (r = y === "rtl" ? n.getFirstKey?.(t.focusedKey) : n.getLastKey?.(t.focusedKey)), r != null && (e.preventDefault(), i(r, y === "rtl" ? "first" : "last"));
3610
3640
  }
3611
3641
  break;
3612
3642
  case "ArrowRight":
3613
3643
  if (n.getKeyRightOf) {
3614
3644
  let r = t.focusedKey == null ? n.getFirstKey?.() : n.getKeyRightOf?.(t.focusedKey);
3615
- r == null && a && (r = v === "rtl" ? n.getLastKey?.(t.focusedKey) : n.getFirstKey?.(t.focusedKey)), r != null && (e.preventDefault(), i(r, v === "rtl" ? "last" : "first"));
3645
+ r == null && a && (r = y === "rtl" ? n.getLastKey?.(t.focusedKey) : n.getFirstKey?.(t.focusedKey)), r != null && (e.preventDefault(), i(r, y === "rtl" ? "last" : "first"));
3616
3646
  }
3617
3647
  break;
3618
3648
  case "Home":
@@ -3662,55 +3692,57 @@ function Ja(e) {
3662
3692
  break;
3663
3693
  }
3664
3694
  }
3665
- }, x = f({
3695
+ }, S = f({
3666
3696
  top: 0,
3667
3697
  left: 0
3668
3698
  });
3669
3699
  Ut(h, "scroll", () => {
3670
- x.current = {
3700
+ S.current = {
3671
3701
  top: h.current?.scrollTop ?? 0,
3672
3702
  left: h.current?.scrollLeft ?? 0
3673
3703
  };
3674
3704
  });
3675
- let S = (e) => {
3705
+ let C = (e) => {
3676
3706
  if (t.isFocused) {
3677
3707
  U(e.currentTarget, G(e)) || t.setFocused(!1);
3678
3708
  return;
3679
3709
  }
3680
- if (U(e.currentTarget, G(e))) {
3681
- if (t.setFocused(!0), t.focusedKey == null) {
3682
- let r = (e) => {
3683
- e != null && (t.setFocusedKey(e), u && !t.isSelected(e) && t.replaceSelection(e));
3684
- }, i = e.relatedTarget;
3685
- i && e.currentTarget.compareDocumentPosition(i) & Node.DOCUMENT_POSITION_FOLLOWING ? r(t.lastSelectedKey ?? n.getLastKey?.()) : r(t.firstSelectedKey ?? n.getFirstKey?.());
3686
- } else h.current && (h.current.scrollTop = x.current.top, h.current.scrollLeft = x.current.left);
3687
- if (t.focusedKey != null && h.current) {
3688
- let e = Ba(r, t.focusedKey);
3689
- e instanceof HTMLElement && (!Te(e) && !p && Ae(e), Nt() === "keyboard" && yi(e, { containingElement: r.current }));
3690
- }
3710
+ if (!U(e.currentTarget, G(e))) return;
3711
+ let i = Nt();
3712
+ t.setFocused(!0);
3713
+ let a = (e) => {
3714
+ e != null && (t.setFocusedKey(e), u && !t.isSelected(e) && t.replaceSelection(e));
3715
+ };
3716
+ if (v && (i === "keyboard" || i === "virtual")) a(v === "first" ? n.getFirstKey?.() : n.getLastKey?.());
3717
+ else if (t.focusedKey == null) {
3718
+ let r = e.relatedTarget;
3719
+ r && e.currentTarget.compareDocumentPosition(r) & Node.DOCUMENT_POSITION_FOLLOWING ? a(t.lastSelectedKey ?? n.getLastKey?.()) : a(t.firstSelectedKey ?? n.getFirstKey?.());
3720
+ } else h.current && (h.current.scrollTop = S.current.top, h.current.scrollLeft = S.current.left);
3721
+ if (t.focusedKey != null && h.current) {
3722
+ let e = Ba(r, t.focusedKey);
3723
+ e instanceof HTMLElement && (!Te(e) && !p && Ae(e), (i === "keyboard" || v && i === "virtual") && yi(e, { containingElement: r.current }));
3691
3724
  }
3692
- }, C = (e) => {
3725
+ }, w = (e) => {
3693
3726
  U(e.currentTarget, e.relatedTarget) || t.setFocused(!1);
3694
- }, w = f(!1);
3727
+ }, T = f(!1);
3695
3728
  Ut(r, ye, p ? (e) => {
3696
3729
  let { detail: n } = e;
3697
- e.stopPropagation(), t.setFocused(!0), n?.focusStrategy === "first" && (w.current = !0);
3698
- } : void 0), qa(() => {
3699
- if (w.current) {
3700
- let e = n.getFirstKey?.() ?? null;
3701
- if (e == null) {
3702
- let e = W();
3703
- Ee(r.current), Oe(e, null), t.collection.size > 0 && (w.current = !1);
3704
- } else t.setFocusedKey(e), w.current = !1;
3705
- }
3706
- }, [t.collection]), qa(() => {
3707
- t.collection.size > 0 && (w.current = !1);
3730
+ e.stopPropagation(), t.setFocused(!0), n?.focusStrategy === "first" && (T.current = !0);
3731
+ } : void 0);
3732
+ let E = n.getFirstKey?.() ?? null;
3733
+ qa(() => {
3734
+ if (T.current) if (E == null) {
3735
+ let e = W();
3736
+ Ee(r.current), Oe(e, null), t.collection.size > 0 && (T.current = !1);
3737
+ } else t.setFocusedKey(E), T.current = !1;
3738
+ }, [E, t.collection.size]), qa(() => {
3739
+ t.collection.size > 0 && (T.current = !1);
3708
3740
  }, [t.focusedKey]), Ut(r, ve, p ? (e) => {
3709
3741
  e.stopPropagation(), t.setFocused(!1), e.detail?.clearFocusKey && t.setFocusedKey(null);
3710
3742
  } : void 0);
3711
- let T = f(i), E = f(!1);
3743
+ let D = f(i), O = f(!1);
3712
3744
  s(() => {
3713
- if (T.current) {
3745
+ if (D.current) {
3714
3746
  let e = null;
3715
3747
  i === "first" && (e = n.getFirstKey?.() ?? null), i === "last" && (e = n.getLastKey?.() ?? null);
3716
3748
  let a = t.selectedKeys;
@@ -3720,42 +3752,42 @@ function Ja(e) {
3720
3752
  break;
3721
3753
  }
3722
3754
  }
3723
- t.setFocused(!0), t.setFocusedKey(e), e == null && !p && r.current && Nn(r.current), t.collection.size > 0 && (T.current = !1, E.current = !0);
3755
+ t.setFocused(!0), t.setFocusedKey(e), e == null && !p && r.current && Nn(r.current), t.collection.size > 0 && (D.current = !1, O.current = !0);
3724
3756
  }
3725
3757
  });
3726
- let D = f(t.focusedKey), O = f(null);
3758
+ let k = f(t.focusedKey), A = f(null);
3727
3759
  s(() => {
3728
- if (t.isFocused && t.focusedKey != null && (t.focusedKey !== D.current || E.current) && h.current && r.current) {
3760
+ if (t.isFocused && t.focusedKey != null && (t.focusedKey !== k.current || O.current) && h.current && r.current) {
3729
3761
  let e = Nt(), n = Ba(r, t.focusedKey);
3730
3762
  if (!(n instanceof HTMLElement)) return;
3731
- (e === "keyboard" || E.current) && (O.current && cancelAnimationFrame(O.current), O.current = requestAnimationFrame(() => {
3763
+ (e === "keyboard" || O.current) && (A.current && cancelAnimationFrame(A.current), A.current = requestAnimationFrame(() => {
3732
3764
  h.current && (vi(h.current, n), e !== "virtual" && yi(n, { containingElement: r.current }));
3733
3765
  }));
3734
3766
  }
3735
- !p && t.isFocused && t.focusedKey == null && D.current != null && r.current && Nn(r.current), D.current = t.focusedKey, E.current = !1;
3767
+ !p && t.isFocused && t.focusedKey == null && k.current != null && r.current && Nn(r.current), k.current = t.focusedKey, O.current = !1;
3736
3768
  }), s(() => () => {
3737
- O.current && cancelAnimationFrame(O.current);
3769
+ A.current && cancelAnimationFrame(A.current);
3738
3770
  }, []), Ut(r, "react-aria-focus-scope-restore", (e) => {
3739
3771
  e.preventDefault(), t.setFocused(!0);
3740
3772
  });
3741
- let k = {
3742
- onKeyDown: b,
3743
- onFocus: S,
3744
- onBlur: C,
3773
+ let j = {
3774
+ onKeyDown: x,
3775
+ onFocus: C,
3776
+ onBlur: w,
3745
3777
  onMouseDown(e) {
3746
3778
  h.current === G(e) && e.preventDefault();
3747
3779
  }
3748
- }, { typeSelectProps: A } = Ga({
3780
+ }, { typeSelectProps: M } = Ga({
3749
3781
  keyboardDelegate: n,
3750
3782
  selectionManager: t
3751
3783
  });
3752
- d || (k = z(A, k));
3753
- let j;
3754
- p || (j = t.focusedKey == null ? 0 : -1);
3755
- let M = Ha(t.collection);
3756
- return { collectionProps: z(k, {
3757
- tabIndex: j,
3758
- "data-collection": M
3784
+ d || (j = z(M, j));
3785
+ let N;
3786
+ p || (N = t.focusedKey == null ? 0 : -1);
3787
+ let P = Ha(t.collection);
3788
+ return { collectionProps: z(j, {
3789
+ tabIndex: N,
3790
+ "data-collection": P
3759
3791
  }) };
3760
3792
  }
3761
3793
  //#endregion
@@ -5384,14 +5416,14 @@ var ic = class {
5384
5416
  let t = e;
5385
5417
  do
5386
5418
  t = this.collection.getKeyAfter(t), t ??= this.collection.getFirstKey();
5387
- while (t != null && this.isDisabled(t));
5419
+ while (t != null && this.isDisabled(t) && t !== e);
5388
5420
  return t;
5389
5421
  }
5390
5422
  getPreviousKey(e) {
5391
5423
  let t = e;
5392
5424
  do
5393
5425
  t = this.collection.getKeyBefore(t), t ??= this.collection.getLastKey();
5394
- while (t != null && this.isDisabled(t));
5426
+ while (t != null && this.isDisabled(t) && t !== e);
5395
5427
  return t;
5396
5428
  }
5397
5429
  };
@@ -7783,7 +7815,7 @@ var pu = ({ prompt: e = "C:\\>", onCommand: t, autoFocus: n = !1, className: r =
7783
7815
  placeholder: i,
7784
7816
  disabled: a,
7785
7817
  "aria-label": "Command input",
7786
- size: o.length || 1
7818
+ size: o.length || i?.length || 1
7787
7819
  }), /* @__PURE__ */ b("span", {
7788
7820
  className: "command-prompt__cursor",
7789
7821
  "aria-hidden": "true",
@@ -7910,11 +7942,263 @@ var xu = r(({ value: e = 0, max: t = 100, indeterminate: n = !1, variant: r = "d
7910
7942
  });
7911
7943
  xu.displayName = "Progress";
7912
7944
  //#endregion
7945
+ //#region src/components/ProgressRing/components/ProgressRing.tsx
7946
+ var Su = (e, t, n) => Math.min(n, Math.max(t, e)), Cu = r(({ value: e = 0, max: t = 100, size: n = 64, thickness: r = 8, segments: i = 16, color: a, showLabel: o = !1, glow: s = !1, className: c, "aria-label": l, ...u }, d) => {
7947
+ let f = Math.max(1, Math.floor(i)), p = Su(t === 0 ? 0 : e / t, 0, 1), m = Math.floor(p * f), h = Math.round(m / f * 100), g = (n - r) / 2, _ = n / 2, v = n / 2, y = 2 * Math.PI * g, S = y / f, C = Math.max(2, S / 6), w = Math.max(.5, S - C), T = a ?? "currentColor", E = Array.from({ length: f }, (e, t) => {
7948
+ let n = t < m;
7949
+ return /* @__PURE__ */ b("circle", {
7950
+ cx: _,
7951
+ cy: v,
7952
+ r: g,
7953
+ fill: "none",
7954
+ stroke: T,
7955
+ strokeWidth: r,
7956
+ strokeLinecap: "butt",
7957
+ strokeOpacity: n ? 1 : .18,
7958
+ strokeDasharray: `0 ${t * S} ${w} ${y}`,
7959
+ className: $("eidotter-progress-ring__seg", n && "eidotter-progress-ring__seg--filled")
7960
+ }, t);
7961
+ });
7962
+ return /* @__PURE__ */ x("div", {
7963
+ ref: d,
7964
+ className: $("eidotter-progress-ring", s && "eidotter-progress-ring--glow", c),
7965
+ style: {
7966
+ width: n,
7967
+ height: n
7968
+ },
7969
+ role: "progressbar",
7970
+ "aria-valuenow": h,
7971
+ "aria-valuemin": 0,
7972
+ "aria-valuemax": 100,
7973
+ "aria-label": l ?? `Progress: ${h}%`,
7974
+ ...u,
7975
+ children: [/* @__PURE__ */ b("svg", {
7976
+ width: n,
7977
+ height: n,
7978
+ viewBox: `0 0 ${n} ${n}`,
7979
+ "aria-hidden": "true",
7980
+ focusable: "false",
7981
+ children: /* @__PURE__ */ b("g", {
7982
+ transform: `rotate(-90 ${_} ${v})`,
7983
+ children: E
7984
+ })
7985
+ }), o && /* @__PURE__ */ x("span", {
7986
+ className: "eidotter-progress-ring__label font-dos",
7987
+ children: [h, "%"]
7988
+ })]
7989
+ });
7990
+ });
7991
+ Cu.displayName = "ProgressRing";
7992
+ //#endregion
7993
+ //#region src/components/CalendarHeatmap/components/CalendarHeatmap.tsx
7994
+ var wu = {
7995
+ success: "█",
7996
+ fail: "░",
7997
+ skip: "·",
7998
+ pending: "▒",
7999
+ empty: " "
8000
+ }, Tu = [
8001
+ "success",
8002
+ "fail",
8003
+ "skip",
8004
+ "pending"
8005
+ ], Eu = {
8006
+ success: "DONE",
8007
+ fail: "MISS",
8008
+ skip: "OFF",
8009
+ pending: "TODAY"
8010
+ }, Du = [
8011
+ "MO",
8012
+ "TU",
8013
+ "WE",
8014
+ "TH",
8015
+ "FR",
8016
+ "SA",
8017
+ "SU"
8018
+ ], Ou = [
8019
+ "SU",
8020
+ "MO",
8021
+ "TU",
8022
+ "WE",
8023
+ "TH",
8024
+ "FR",
8025
+ "SA"
8026
+ ], ku = [
8027
+ "January",
8028
+ "February",
8029
+ "March",
8030
+ "April",
8031
+ "May",
8032
+ "June",
8033
+ "July",
8034
+ "August",
8035
+ "September",
8036
+ "October",
8037
+ "November",
8038
+ "December"
8039
+ ], Au = {
8040
+ sm: "eidotter-calendar-heatmap--sm",
8041
+ md: "eidotter-calendar-heatmap--md",
8042
+ lg: "eidotter-calendar-heatmap--lg"
8043
+ }, ju = (e) => String(e).padStart(2, "0"), Mu = r(({ month: e, statuses: t = {}, defaultStatus: n = "skip", weekStart: r = "monday", size: i = "md", successColor: a, showLegend: o = !0, legendLabels: s, glyphs: c, className: l, "aria-label": u, ...d }, f) => {
8044
+ let p = Number(e.slice(0, 4)), m = Number(e.slice(5, 7)) - 1, h = Number.isFinite(p) && m >= 0 && m <= 11, g = {
8045
+ ...wu,
8046
+ ...c
8047
+ }, _ = {
8048
+ ...Eu,
8049
+ ...s
8050
+ }, v = [], y = 0, S = 0;
8051
+ if (h) {
8052
+ let e = new Date(Date.UTC(p, m + 1, 0)).getUTCDate(), i = new Date(Date.UTC(p, m, 1)).getUTCDay(), a = r === "monday" ? (i + 6) % 7 : i, o = [];
8053
+ for (let e = 0; e < a; e++) o.push({
8054
+ key: `lead-${e}`,
8055
+ day: 0,
8056
+ status: "empty"
8057
+ });
8058
+ for (let r = 1; r <= e; r++) {
8059
+ let e = `${p}-${ju(m + 1)}-${ju(r)}`, i = t[e] ?? n;
8060
+ i === "success" && y++, i === "fail" && S++, o.push({
8061
+ key: e,
8062
+ day: r,
8063
+ status: i
8064
+ });
8065
+ }
8066
+ for (; o.length % 7 != 0;) o.push({
8067
+ key: `trail-${o.length}`,
8068
+ day: 0,
8069
+ status: "empty"
8070
+ });
8071
+ for (let e = 0; e < o.length; e += 7) v.push(o.slice(e, e + 7));
8072
+ }
8073
+ let C = r === "monday" ? Du : Ou, w = h ? `${ku[m]} ${p}` : e, T = u ?? `${w}: ${y} done, ${S} missed`, E = a ? { "--heatmap-success": a } : void 0;
8074
+ return /* @__PURE__ */ x("div", {
8075
+ ref: f,
8076
+ className: $("eidotter-calendar-heatmap font-dos", Au[i], l),
8077
+ style: E,
8078
+ ...d,
8079
+ children: [/* @__PURE__ */ x("div", {
8080
+ className: "eidotter-calendar-heatmap__grid",
8081
+ role: "img",
8082
+ "aria-label": T,
8083
+ children: [/* @__PURE__ */ b("div", {
8084
+ className: "eidotter-calendar-heatmap__row",
8085
+ "aria-hidden": "true",
8086
+ children: C.map((e) => /* @__PURE__ */ b("span", {
8087
+ className: "eidotter-calendar-heatmap__cell eidotter-calendar-heatmap__head",
8088
+ children: e
8089
+ }, e))
8090
+ }), v.map((e, t) => /* @__PURE__ */ b("div", {
8091
+ className: "eidotter-calendar-heatmap__row",
8092
+ "aria-hidden": "true",
8093
+ children: e.map((e) => /* @__PURE__ */ b("span", {
8094
+ className: $("eidotter-calendar-heatmap__cell", `eidotter-calendar-heatmap__cell--${e.status}`),
8095
+ children: g[e.status]
8096
+ }, e.key))
8097
+ }, t))]
8098
+ }), o && /* @__PURE__ */ b("div", {
8099
+ className: "eidotter-calendar-heatmap__legend",
8100
+ "aria-hidden": "true",
8101
+ children: Tu.map((e) => /* @__PURE__ */ x("span", {
8102
+ className: `eidotter-calendar-heatmap__cell--${e}`,
8103
+ children: [
8104
+ g[e],
8105
+ " ",
8106
+ _[e]
8107
+ ]
8108
+ }, e))
8109
+ })]
8110
+ });
8111
+ });
8112
+ Mu.displayName = "CalendarHeatmap";
8113
+ //#endregion
8114
+ //#region src/components/HoldToComplete/components/HoldToComplete.tsx
8115
+ var Nu = (e) => e * e, Pu = .02, Fu = 120, Iu = r(({ onHold: e, onTap: t, onHoldProgress: n, holdDuration: r = 700, ringColor: i, ringScale: o = .72, disabled: c = !1, "aria-label": l, className: u, children: d }, m) => {
8116
+ let [h, g] = p(0), [_, v] = p(0), y = f(null), S = f(null), C = f(0), w = f(0), T = f(0), E = f(0), D = f(r), O = f(!1), k = f(e), A = f(n);
8117
+ k.current = e, A.current = n;
8118
+ let j = a((e) => {
8119
+ C.current = e, g(e), A.current?.(e);
8120
+ }, []), M = a(() => {
8121
+ S.current != null && (cancelAnimationFrame(S.current), S.current = null);
8122
+ }, []), N = a((e) => {
8123
+ let t = e - E.current, n = D.current, r = n <= 0 ? 1 : Math.min(1, t / n), i = T.current === 1 ? Nu(r) : r;
8124
+ if (j(w.current + (T.current - w.current) * i), r >= 1) {
8125
+ S.current = null, T.current === 1 && (O.current = !0, j(0), k.current());
8126
+ return;
8127
+ }
8128
+ S.current = requestAnimationFrame(N);
8129
+ }, [j]), P = a((e, t) => {
8130
+ M(), w.current = C.current, T.current = e, D.current = t, E.current = typeof performance < "u" ? performance.now() : 0, S.current = requestAnimationFrame(N);
8131
+ }, [M, N]), ee = a((e) => {
8132
+ if (!c) {
8133
+ try {
8134
+ e.currentTarget.setPointerCapture?.(e.pointerId);
8135
+ } catch {}
8136
+ O.current = !1, j(0), P(1, r);
8137
+ }
8138
+ }, [
8139
+ c,
8140
+ r,
8141
+ P,
8142
+ j
8143
+ ]), F = a(() => {
8144
+ if (!O.current) {
8145
+ if (C.current <= 0) {
8146
+ M();
8147
+ return;
8148
+ }
8149
+ Ql() ? (M(), j(0)) : P(0, Fu);
8150
+ }
8151
+ }, [
8152
+ P,
8153
+ M,
8154
+ j
8155
+ ]), te = a(() => {
8156
+ c || (O.current || t?.(), O.current = !1);
8157
+ }, [c, t]), ne = a((t) => {
8158
+ c || t.repeat || (t.key === "Enter" || t.key === " ") && (t.preventDefault(), e());
8159
+ }, [c, e]);
8160
+ s(() => {
8161
+ let e = y.current;
8162
+ if (!e) return;
8163
+ let t = () => v(Math.min(e.clientWidth, e.clientHeight));
8164
+ if (t(), typeof ResizeObserver < "u") {
8165
+ let n = new ResizeObserver(t);
8166
+ return n.observe(e), () => n.disconnect();
8167
+ }
8168
+ }, []), s(() => M, [M]);
8169
+ let re = a((e) => {
8170
+ y.current = e, typeof m == "function" ? m(e) : m && (m.current = e);
8171
+ }, [m]), ie = h > Pu && _ > 0;
8172
+ return /* @__PURE__ */ x("div", {
8173
+ ref: re,
8174
+ className: $("eidotter-hold", c && "eidotter-hold--disabled", u),
8175
+ role: "button",
8176
+ tabIndex: c ? -1 : 0,
8177
+ "aria-label": l,
8178
+ "aria-disabled": c || void 0,
8179
+ onPointerDown: ee,
8180
+ onPointerUp: F,
8181
+ onPointerCancel: F,
8182
+ onClick: te,
8183
+ onKeyDown: ne,
8184
+ children: [d, ie && /* @__PURE__ */ b("div", {
8185
+ className: "eidotter-hold__overlay",
8186
+ children: /* @__PURE__ */ b(Cu, {
8187
+ value: h * 100,
8188
+ size: Math.floor(_ * o),
8189
+ color: i,
8190
+ "aria-label": "Hold progress"
8191
+ })
8192
+ })]
8193
+ });
8194
+ });
8195
+ Iu.displayName = "HoldToComplete";
8196
+ //#endregion
7913
8197
  //#region src/components/Input/components/Input.tsx
7914
- var Su = {
8198
+ var Lu = {
7915
8199
  default: "eidotter-input--default",
7916
8200
  error: "eidotter-input--error"
7917
- }, Cu = r(({ variant: e = "default", label: t, description: n, errorMessage: r, disabled: i, className: a, onChange: o, isRequired: s, ...c }, l) => {
8201
+ }, Ru = r(({ variant: e = "default", label: t, description: n, errorMessage: r, disabled: i, className: a, onChange: o, isRequired: s, ...c }, l) => {
7918
8202
  let u = e === "error";
7919
8203
  return /* @__PURE__ */ x(bc, {
7920
8204
  isDisabled: i,
@@ -7928,7 +8212,7 @@ var Su = {
7928
8212
  }),
7929
8213
  /* @__PURE__ */ b(sa, {
7930
8214
  ref: l,
7931
- className: $("w-full bg-transparent text-dos-text-brand font-dos text-base p-2", "border-2 border-dos-border-default outline-none box-border", "eidotter-input", Su[e] || Su.default, i && "eidotter-input--disabled"),
8215
+ className: $("w-full bg-transparent text-dos-text-brand font-dos text-base p-2", "border-2 border-dos-border-default outline-none box-border", "eidotter-input", Lu[e] || Lu.default, i && "eidotter-input--disabled"),
7932
8216
  onChange: o,
7933
8217
  ...c
7934
8218
  }),
@@ -7945,10 +8229,10 @@ var Su = {
7945
8229
  ]
7946
8230
  });
7947
8231
  });
7948
- Cu.displayName = "Input";
8232
+ Ru.displayName = "Input";
7949
8233
  //#endregion
7950
8234
  //#region src/components/Terminal/components/Terminal.tsx
7951
- var wu = ({ size: e = "md", title: t = "MS-DOS Terminal", state: n = "active", resizable: r = !0, minimizable: i = !1, maximizable: a = !1, closeable: o = !1, children: c, onMinimize: l, onMaximize: u, onClose: d, onFocus: m, className: h = "", autoFocus: g = !1 }) => {
8235
+ var zu = ({ size: e = "md", title: t = "MS-DOS Terminal", state: n = "active", resizable: r = !0, minimizable: i = !1, maximizable: a = !1, closeable: o = !1, children: c, onMinimize: l, onMaximize: u, onClose: d, onFocus: m, className: h = "", autoFocus: g = !1 }) => {
7952
8236
  let _ = {
7953
8237
  sm: "small",
7954
8238
  md: "medium",
@@ -8059,17 +8343,17 @@ var wu = ({ size: e = "md", title: t = "MS-DOS Terminal", state: n = "active", r
8059
8343
  })
8060
8344
  ]
8061
8345
  });
8062
- }, Tu = {
8346
+ }, Bu = {
8063
8347
  sm: "eidotter-tabs--sm",
8064
8348
  md: "eidotter-tabs--md",
8065
8349
  lg: "eidotter-tabs--lg",
8066
8350
  small: "eidotter-tabs--sm",
8067
8351
  medium: "eidotter-tabs--md",
8068
8352
  large: "eidotter-tabs--lg"
8069
- }, Eu = {
8353
+ }, Vu = {
8070
8354
  underline: "eidotter-tabs--underline",
8071
8355
  pills: "eidotter-tabs--pills"
8072
- }, Du = r(({ tabs: e, variant: t = "underline", size: n = "md", activeTab: r, defaultActiveTab: i, onSelectionChange: o, onTabChange: s, className: c, ...u }, d) => {
8356
+ }, Hu = r(({ tabs: e, variant: t = "underline", size: n = "md", activeTab: r, defaultActiveTab: i, onSelectionChange: o, onTabChange: s, className: c, ...u }, d) => {
8073
8357
  let m = f(null), h = f(r ?? i ?? e[0]?.id ?? ""), [g, _] = p(r ?? i ?? e[0]?.id ?? ""), v = o ?? s, y = a((e) => {
8074
8358
  let t = String(e), n = r ?? h.current;
8075
8359
  h.current = t, _(t), v?.(t, n);
@@ -8093,7 +8377,7 @@ var wu = ({ size: e = "md", title: t = "MS-DOS Terminal", state: n = "active", r
8093
8377
  selectedKey: r,
8094
8378
  defaultSelectedKey: i ?? e[0]?.id,
8095
8379
  onSelectionChange: y,
8096
- className: $("eidotter-tabs", Eu[t], Tu[n] || Tu.md, c),
8380
+ className: $("eidotter-tabs", Vu[t], Bu[n] || Bu.md, c),
8097
8381
  children: [/* @__PURE__ */ x("div", {
8098
8382
  ref: m,
8099
8383
  className: "relative",
@@ -8116,16 +8400,16 @@ var wu = ({ size: e = "md", title: t = "MS-DOS Terminal", state: n = "active", r
8116
8400
  }, e.id))]
8117
8401
  });
8118
8402
  });
8119
- Du.displayName = "Tabs";
8403
+ Hu.displayName = "Tabs";
8120
8404
  //#endregion
8121
8405
  //#region src/components/Badge/components/Badge.tsx
8122
- var Ou = {
8406
+ var Uu = {
8123
8407
  sm: "text-dos-text-xs px-2 py-0.5 min-h-6 gap-1",
8124
8408
  md: "text-dos-text-sm px-2.5 py-1 min-h-7 gap-1.5",
8125
8409
  lg: "text-dos-text-md px-3 py-1.5 min-h-8 gap-1.5",
8126
8410
  small: "text-dos-text-xs px-2 py-0.5 min-h-6 gap-1",
8127
8411
  medium: "text-dos-text-sm px-2.5 py-1 min-h-7 gap-1.5"
8128
- }, ku = {
8412
+ }, Wu = {
8129
8413
  default: "eidotter-badge--default",
8130
8414
  success: "eidotter-badge--success",
8131
8415
  warning: "eidotter-badge--warning",
@@ -8139,9 +8423,9 @@ var Ou = {
8139
8423
  purple: "eidotter-badge--info",
8140
8424
  pink: "eidotter-badge--error",
8141
8425
  orange: "eidotter-badge--warning"
8142
- }, Au = r(({ variant: e = "default", size: t = "md", dot: n = !1, children: r, className: i, ...a }, o) => /* @__PURE__ */ x("span", {
8426
+ }, Gu = r(({ variant: e = "default", size: t = "md", dot: n = !1, children: r, className: i, ...a }, o) => /* @__PURE__ */ x("span", {
8143
8427
  ref: o,
8144
- className: $("inline-flex items-center justify-center", "font-dos leading-none whitespace-nowrap select-none", "uppercase tracking-wider", "rounded-dos-sm", "eidotter-badge", Ou[t] || Ou.md, ku[e] || ku.default, i),
8428
+ className: $("inline-flex items-center justify-center", "font-dos leading-none whitespace-nowrap select-none", "uppercase tracking-wider", "rounded-dos-sm", "eidotter-badge", Uu[t] || Uu.md, Wu[e] || Wu.default, i),
8145
8429
  "data-variant": e,
8146
8430
  ...a,
8147
8431
  children: [n && /* @__PURE__ */ b("span", {
@@ -8152,10 +8436,10 @@ var Ou = {
8152
8436
  children: r
8153
8437
  })]
8154
8438
  }));
8155
- Au.displayName = "Badge";
8439
+ Gu.displayName = "Badge";
8156
8440
  //#endregion
8157
8441
  //#region src/components/Switch/components/Switch.tsx
8158
- var ju = r(({ checked: e, defaultChecked: t = !1, onChange: n, onCheckedChange: r, disabled: i = !1, size: a = "md", type: o = "default", label: s, name: c, value: l, className: u, ...d }, f) => /* @__PURE__ */ b(Zs, {
8442
+ var Ku = r(({ checked: e, defaultChecked: t = !1, onChange: n, onCheckedChange: r, disabled: i = !1, size: a = "md", type: o = "default", label: s, name: c, value: l, className: u, ...d }, f) => /* @__PURE__ */ b(Zs, {
8159
8443
  ref: f,
8160
8444
  isSelected: e,
8161
8445
  defaultSelected: t,
@@ -8175,10 +8459,10 @@ var ju = r(({ checked: e, defaultChecked: t = !1, onChange: n, onCheckedChange:
8175
8459
  children: s
8176
8460
  })] })
8177
8461
  }));
8178
- ju.displayName = "Switch";
8462
+ Ku.displayName = "Switch";
8179
8463
  //#endregion
8180
8464
  //#region src/components/Breadcrumb/components/Breadcrumb.tsx
8181
- var Mu = "eidotter-breadcrumb__link inline-flex items-center gap-1 text-dos-text-accent opacity-70 no-underline", Nu = ({ trail: e = [], currentLabel: t, showBackArrow: n = !0, separator: r = "/", linkComponent: i, className: a }) => {
8465
+ var qu = "eidotter-breadcrumb__link inline-flex items-center gap-1 text-dos-text-accent opacity-70 no-underline", Ju = ({ trail: e = [], currentLabel: t, showBackArrow: n = !0, separator: r = "/", linkComponent: i, className: a }) => {
8182
8466
  let o = (e, t) => {
8183
8467
  let r = /* @__PURE__ */ x(y, { children: [n && t && /* @__PURE__ */ b("span", {
8184
8468
  className: "text-[1em] leading-none",
@@ -8186,15 +8470,15 @@ var Mu = "eidotter-breadcrumb__link inline-flex items-center gap-1 text-dos-text
8186
8470
  children: "<"
8187
8471
  }), /* @__PURE__ */ b("span", { children: e.label })] });
8188
8472
  return e.onClick ? /* @__PURE__ */ b(K, {
8189
- className: $(Mu, "bg-transparent border-0 cursor-pointer font-[inherit] p-0"),
8473
+ className: $(qu, "bg-transparent border-0 cursor-pointer font-[inherit] p-0"),
8190
8474
  onPress: e.onClick,
8191
8475
  children: r
8192
8476
  }) : e.href ? b(i || "a", {
8193
8477
  href: e.href,
8194
- className: Mu,
8478
+ className: qu,
8195
8479
  children: r
8196
8480
  }) : /* @__PURE__ */ b("span", {
8197
- className: Mu,
8481
+ className: qu,
8198
8482
  children: r
8199
8483
  });
8200
8484
  };
@@ -8234,18 +8518,18 @@ var Mu = "eidotter-breadcrumb__link inline-flex items-center gap-1 text-dos-text
8234
8518
  ]
8235
8519
  })
8236
8520
  });
8237
- }, Pu = "eidotter:retro-boot", Fu = "1", Iu = (e) => {
8521
+ }, Yu = "eidotter:retro-boot", Xu = "1", Zu = (e) => {
8238
8522
  if (typeof window > "u") return !1;
8239
8523
  try {
8240
- return window.sessionStorage.getItem(e) === Fu;
8524
+ return window.sessionStorage.getItem(e) === Xu;
8241
8525
  } catch {
8242
8526
  return !1;
8243
8527
  }
8244
- }, Lu = (e) => {
8528
+ }, Qu = (e) => {
8245
8529
  if (!(typeof window > "u")) try {
8246
- window.sessionStorage.setItem(e, Fu);
8530
+ window.sessionStorage.setItem(e, Xu);
8247
8531
  } catch {}
8248
- }, Ru = ({ scanlines: e = !0, glow: t = !0, flicker: n = !0, bloom: r = !1, powered: i = !0, boot: a = !1, bootOnce: o = !1, bootStorageKey: c = Pu, intensity: l = 1, className: u, onPowerStateChange: d, onPowerOn: m, onPowerOff: h, onBootComplete: g }) => {
8532
+ }, $u = ({ scanlines: e = !0, glow: t = !0, flicker: n = !0, bloom: r = !1, powered: i = !0, boot: a = !1, bootOnce: o = !1, bootStorageKey: c = Yu, intensity: l = 1, className: u, onPowerStateChange: d, onPowerOn: m, onPowerOff: h, onBootComplete: g }) => {
8249
8533
  let _ = f(i), [v, S] = p(i ? "on" : "off"), [C, w] = p(a && !o), T = f(!1), E = f(c), D = f(g);
8250
8534
  s(() => {
8251
8535
  D.current = g;
@@ -8253,11 +8537,11 @@ var Mu = "eidotter-breadcrumb__link inline-flex items-center gap-1 text-dos-text
8253
8537
  let O = () => {
8254
8538
  T.current || (T.current = !0, D.current?.());
8255
8539
  }, k = () => {
8256
- w(!1), o && Lu(E.current), O();
8540
+ w(!1), o && Qu(E.current), O();
8257
8541
  };
8258
8542
  s(() => {
8259
8543
  if (!(!a || !o)) {
8260
- if (Iu(E.current)) {
8544
+ if (Zu(E.current)) {
8261
8545
  O();
8262
8546
  return;
8263
8547
  }
@@ -8313,32 +8597,32 @@ var Mu = "eidotter-breadcrumb__link inline-flex items-center gap-1 text-dos-text
8313
8597
  ]
8314
8598
  })]
8315
8599
  });
8316
- }, zu = {
8600
+ }, ed = {
8317
8601
  sm: "small",
8318
8602
  md: "medium",
8319
8603
  lg: "large",
8320
8604
  small: "small",
8321
8605
  medium: "medium",
8322
8606
  large: "large"
8323
- }, Bu = {
8607
+ }, td = {
8324
8608
  circle: "eidotter-timeline-node--circle",
8325
8609
  square: "eidotter-timeline-node--square",
8326
8610
  diamond: "eidotter-timeline-node--diamond"
8327
- }, Vu = {
8611
+ }, nd = {
8328
8612
  default: "eidotter-timeline-node--default",
8329
8613
  primary: "eidotter-timeline-node--primary",
8330
8614
  secondary: "eidotter-timeline-node--secondary",
8331
8615
  accent: "eidotter-timeline-node--accent"
8332
- }, Hu = {
8616
+ }, rd = {
8333
8617
  left: "eidotter-timeline-node--label-left",
8334
8618
  right: "eidotter-timeline-node--label-right",
8335
8619
  top: "eidotter-timeline-node--label-top",
8336
8620
  bottom: "eidotter-timeline-node--label-bottom"
8337
- }, Uu = r(({ shape: e = "circle", variant: t = "default", isActive: n = !1, label: r, labelPosition: i = "right", size: a = "md", className: o, onClick: s, ...c }, l) => {
8338
- let u = zu[a] ?? "medium";
8621
+ }, id = r(({ shape: e = "circle", variant: t = "default", isActive: n = !1, label: r, labelPosition: i = "right", size: a = "md", className: o, onClick: s, ...c }, l) => {
8622
+ let u = ed[a] ?? "medium";
8339
8623
  return /* @__PURE__ */ x("div", {
8340
8624
  ref: l,
8341
- className: $("inline-flex items-center gap-2 font-dos", "eidotter-timeline-node", Bu[e], Vu[t], `eidotter-timeline-node--${u}`, Hu[i], n && "eidotter-timeline-node--active", s && "eidotter-timeline-node--interactive", o),
8625
+ className: $("inline-flex items-center gap-2 font-dos", "eidotter-timeline-node", td[e], nd[t], `eidotter-timeline-node--${u}`, rd[i], n && "eidotter-timeline-node--active", s && "eidotter-timeline-node--interactive", o),
8342
8626
  onClick: () => {
8343
8627
  s && s();
8344
8628
  },
@@ -8373,10 +8657,10 @@ var Mu = "eidotter-breadcrumb__link inline-flex items-center gap-1 text-dos-text
8373
8657
  ]
8374
8658
  });
8375
8659
  });
8376
- Uu.displayName = "TimelineNode";
8660
+ id.displayName = "TimelineNode";
8377
8661
  //#endregion
8378
8662
  //#region src/components/TimelineContainer/components/types.ts
8379
- var Wu = [
8663
+ var ad = [
8380
8664
  "year",
8381
8665
  "month",
8382
8666
  "day",
@@ -8384,12 +8668,12 @@ var Wu = [
8384
8668
  ];
8385
8669
  //#endregion
8386
8670
  //#region src/components/TimelineContainer/components/useDrillDown.ts
8387
- function Gu({ zoomLevel: e, defaultZoomLevel: t = "month", onZoomChange: n } = {}) {
8671
+ function od({ zoomLevel: e, defaultZoomLevel: t = "month", onZoomChange: n } = {}) {
8388
8672
  let r = e === void 0, [i, o] = p(t), [c, l] = p([]), u = f(r);
8389
8673
  s(() => {
8390
8674
  u.current && !r && l([]), u.current = r;
8391
8675
  }, [r]);
8392
- let d = e ?? i, m = Wu.indexOf(d), h = m < Wu.length - 1, g = m > 0, _ = c.length > 0 ? c[c.length - 1].periodStart : null, v = f(r), y = f(h), b = f(m), x = f(c), S = f(n);
8676
+ let d = e ?? i, m = ad.indexOf(d), h = m < ad.length - 1, g = m > 0, _ = c.length > 0 ? c[c.length - 1].periodStart : null, v = f(r), y = f(h), b = f(m), x = f(c), S = f(n);
8393
8677
  s(() => {
8394
8678
  v.current = r, y.current = h, b.current = m, x.current = c, S.current = n;
8395
8679
  });
@@ -8405,7 +8689,7 @@ function Gu({ zoomLevel: e, defaultZoomLevel: t = "month", onZoomChange: n } = {
8405
8689
  isDrillDownEnabled: r,
8406
8690
  drillDown: a((e, t) => {
8407
8691
  if (!v.current || !y.current) return;
8408
- let n = Wu[b.current + 1];
8692
+ let n = ad[b.current + 1];
8409
8693
  n !== void 0 && (l((n) => [...n, {
8410
8694
  periodStart: e,
8411
8695
  label: t
@@ -8413,7 +8697,7 @@ function Gu({ zoomLevel: e, defaultZoomLevel: t = "month", onZoomChange: n } = {
8413
8697
  }, [C]),
8414
8698
  drillUp: a(() => {
8415
8699
  if (!v.current || x.current.length === 0) return;
8416
- let e = Wu[b.current - 1];
8700
+ let e = ad[b.current - 1];
8417
8701
  e !== void 0 && (l((e) => e.slice(0, -1)), C(e));
8418
8702
  }, [C]),
8419
8703
  reset: a(() => {
@@ -8423,7 +8707,7 @@ function Gu({ zoomLevel: e, defaultZoomLevel: t = "month", onZoomChange: n } = {
8423
8707
  }
8424
8708
  //#endregion
8425
8709
  //#region src/components/TimelineContainer/components/useSelection.ts
8426
- function Ku({ selectedEntryId: e, defaultSelectedEntryId: t = null, onSelectEntry: n } = {}) {
8710
+ function sd({ selectedEntryId: e, defaultSelectedEntryId: t = null, onSelectEntry: n } = {}) {
8427
8711
  let [r, i] = p(t), o = e !== void 0, c = e === void 0 ? r : e, l = f(c), u = f(o), d = f(n);
8428
8712
  s(() => {
8429
8713
  l.current = c, u.current = o, d.current = n;
@@ -8449,7 +8733,7 @@ function Ku({ selectedEntryId: e, defaultSelectedEntryId: t = null, onSelectEntr
8449
8733
  }
8450
8734
  //#endregion
8451
8735
  //#region src/components/TimelineContainer/components/timelineUtils.ts
8452
- var qu = [
8736
+ var cd = [
8453
8737
  "January",
8454
8738
  "February",
8455
8739
  "March",
@@ -8462,7 +8746,7 @@ var qu = [
8462
8746
  "October",
8463
8747
  "November",
8464
8748
  "December"
8465
- ], Ju = [
8749
+ ], ld = [
8466
8750
  "Jan",
8467
8751
  "Feb",
8468
8752
  "Mar",
@@ -8476,48 +8760,48 @@ var qu = [
8476
8760
  "Nov",
8477
8761
  "Dec"
8478
8762
  ];
8479
- function Yu(e) {
8763
+ function ud(e) {
8480
8764
  return new Date(e).getUTCFullYear();
8481
8765
  }
8482
- function Xu(e) {
8766
+ function dd(e) {
8483
8767
  return new Date(e).getUTCMonth();
8484
8768
  }
8485
- function Zu(e) {
8769
+ function fd(e) {
8486
8770
  return new Date(e).getUTCDate();
8487
8771
  }
8488
- function Qu(e) {
8772
+ function pd(e) {
8489
8773
  return new Date(e).getUTCHours();
8490
8774
  }
8491
- function $u(e) {
8775
+ function md(e) {
8492
8776
  return String(e);
8493
8777
  }
8494
- function ed(e, t) {
8495
- return `${qu[t]} ${e}`;
8778
+ function hd(e, t) {
8779
+ return `${cd[t]} ${e}`;
8496
8780
  }
8497
- function td(e, t, n) {
8498
- return `${Ju[t]} ${n}`;
8781
+ function gd(e, t, n) {
8782
+ return `${ld[t]} ${n}`;
8499
8783
  }
8500
- function nd(e, t, n, r) {
8784
+ function _d(e, t, n, r) {
8501
8785
  let i = r >= 12 ? "pm" : "am", a = r === 0 ? 12 : r > 12 ? r - 12 : r;
8502
- return `${Ju[t]} ${n}, ${a}${i}`;
8786
+ return `${ld[t]} ${n}, ${a}${i}`;
8503
8787
  }
8504
- function rd(e) {
8505
- let t = new Date(e), n = Ju[t.getUTCMonth()], r = t.getUTCDate(), i = t.getUTCFullYear(), a = t.getUTCHours(), o = t.getUTCMinutes(), s = a >= 12 ? "pm" : "am";
8788
+ function vd(e) {
8789
+ let t = new Date(e), n = ld[t.getUTCMonth()], r = t.getUTCDate(), i = t.getUTCFullYear(), a = t.getUTCHours(), o = t.getUTCMinutes(), s = a >= 12 ? "pm" : "am";
8506
8790
  return `${n} ${r}, ${i} at ${a === 0 ? 12 : a > 12 ? a - 12 : a}${o > 0 ? `:${String(o).padStart(2, "0")}` : ""}${s}`;
8507
8791
  }
8508
- function id(e) {
8792
+ function yd(e) {
8509
8793
  return new Date(Date.UTC(e, 0, 1)).toISOString();
8510
8794
  }
8511
- function ad(e, t) {
8795
+ function bd(e, t) {
8512
8796
  return new Date(Date.UTC(e, t, 1)).toISOString();
8513
8797
  }
8514
- function od(e, t, n) {
8798
+ function xd(e, t, n) {
8515
8799
  return new Date(Date.UTC(e, t, n)).toISOString();
8516
8800
  }
8517
- function sd(e, t, n, r) {
8801
+ function Sd(e, t, n, r) {
8518
8802
  return new Date(Date.UTC(e, t, n, r)).toISOString();
8519
8803
  }
8520
- function cd(e, t, n, r, i) {
8804
+ function Cd(e, t, n, r, i) {
8521
8805
  let a = /* @__PURE__ */ new Map(), o = [];
8522
8806
  for (let n of e) {
8523
8807
  let e = t(n), r = a.get(e);
@@ -8534,32 +8818,32 @@ function cd(e, t, n, r, i) {
8534
8818
  entries: a.get(e) ?? []
8535
8819
  }));
8536
8820
  }
8537
- function ld(e) {
8538
- return String(Yu(e.date));
8821
+ function wd(e) {
8822
+ return String(ud(e.date));
8539
8823
  }
8540
- function ud(e) {
8541
- let t = Yu(e.date), n = Xu(e.date);
8824
+ function Td(e) {
8825
+ let t = ud(e.date), n = dd(e.date);
8542
8826
  return `${t}-${String(n).padStart(2, "0")}`;
8543
8827
  }
8544
- function dd(e) {
8545
- let t = Yu(e.date), n = Xu(e.date), r = Zu(e.date);
8828
+ function Ed(e) {
8829
+ let t = ud(e.date), n = dd(e.date), r = fd(e.date);
8546
8830
  return `${t}-${String(n).padStart(2, "0")}-${String(r).padStart(2, "0")}`;
8547
8831
  }
8548
- function fd(e) {
8549
- let t = Yu(e.date), n = Xu(e.date), r = Zu(e.date), i = Qu(e.date);
8832
+ function Dd(e) {
8833
+ let t = ud(e.date), n = dd(e.date), r = fd(e.date), i = pd(e.date);
8550
8834
  return `${t}-${String(n).padStart(2, "0")}-${String(r).padStart(2, "0")}-${String(i).padStart(2, "0")}`;
8551
8835
  }
8552
- function pd(e) {
8836
+ function Od(e) {
8553
8837
  return { year: parseInt(e) };
8554
8838
  }
8555
- function md(e) {
8839
+ function kd(e) {
8556
8840
  let [t, n] = e.split("-");
8557
8841
  return {
8558
8842
  year: parseInt(t),
8559
8843
  month: parseInt(n)
8560
8844
  };
8561
8845
  }
8562
- function hd(e) {
8846
+ function Ad(e) {
8563
8847
  let [t, n, r] = e.split("-");
8564
8848
  return {
8565
8849
  year: parseInt(t),
@@ -8567,7 +8851,7 @@ function hd(e) {
8567
8851
  day: parseInt(r)
8568
8852
  };
8569
8853
  }
8570
- function gd(e) {
8854
+ function jd(e) {
8571
8855
  let [t, n, r, i] = e.split("-");
8572
8856
  return {
8573
8857
  year: parseInt(t),
@@ -8576,56 +8860,56 @@ function gd(e) {
8576
8860
  hour: parseInt(i)
8577
8861
  };
8578
8862
  }
8579
- var _d = {
8863
+ var Md = {
8580
8864
  year: 4,
8581
8865
  month: 7,
8582
8866
  day: 10
8583
8867
  };
8584
- function vd(e, t, n) {
8868
+ function Nd(e, t, n) {
8585
8869
  if (t === null || n === "hour") return e;
8586
- let r = _d[n];
8870
+ let r = Md[n];
8587
8871
  if (r === void 0) return e;
8588
8872
  let i = t.slice(0, r);
8589
8873
  return e.filter((e) => e.periodStart.slice(0, r) === i);
8590
8874
  }
8591
- function yd(e, t, n = "desc") {
8875
+ function Pd(e, t, n = "desc") {
8592
8876
  if (e.length === 0) return [];
8593
8877
  let r = e.filter((e) => !isNaN(new Date(e.date).getTime()));
8594
8878
  if (r.length === 0) return [];
8595
8879
  switch (t) {
8596
- case "year": return cd(r, ld, (e) => {
8597
- let { year: t } = pd(e);
8598
- return $u(t);
8880
+ case "year": return Cd(r, wd, (e) => {
8881
+ let { year: t } = Od(e);
8882
+ return md(t);
8599
8883
  }, (e) => {
8600
- let { year: t } = pd(e);
8601
- return id(t);
8884
+ let { year: t } = Od(e);
8885
+ return yd(t);
8602
8886
  }, n);
8603
- case "month": return cd(r, ud, (e) => {
8604
- let { year: t, month: n } = md(e);
8605
- return ed(t, n);
8887
+ case "month": return Cd(r, Td, (e) => {
8888
+ let { year: t, month: n } = kd(e);
8889
+ return hd(t, n);
8606
8890
  }, (e) => {
8607
- let { year: t, month: n } = md(e);
8608
- return ad(t, n);
8891
+ let { year: t, month: n } = kd(e);
8892
+ return bd(t, n);
8609
8893
  }, n);
8610
- case "day": return cd(r, dd, (e) => {
8611
- let { year: t, month: n, day: r } = hd(e);
8612
- return td(t, n, r);
8894
+ case "day": return Cd(r, Ed, (e) => {
8895
+ let { year: t, month: n, day: r } = Ad(e);
8896
+ return gd(t, n, r);
8613
8897
  }, (e) => {
8614
- let { year: t, month: n, day: r } = hd(e);
8615
- return od(t, n, r);
8898
+ let { year: t, month: n, day: r } = Ad(e);
8899
+ return xd(t, n, r);
8616
8900
  }, n);
8617
- case "hour": return cd(r, fd, (e) => {
8618
- let { year: t, month: n, day: r, hour: i } = gd(e);
8619
- return nd(t, n, r, i);
8901
+ case "hour": return Cd(r, Dd, (e) => {
8902
+ let { year: t, month: n, day: r, hour: i } = jd(e);
8903
+ return _d(t, n, r, i);
8620
8904
  }, (e) => {
8621
- let { year: t, month: n, day: r, hour: i } = gd(e);
8622
- return sd(t, n, r, i);
8905
+ let { year: t, month: n, day: r, hour: i } = jd(e);
8906
+ return Sd(t, n, r, i);
8623
8907
  }, n);
8624
8908
  }
8625
8909
  }
8626
8910
  //#endregion
8627
8911
  //#region src/components/TimelineContainer/components/ZoomControls.tsx
8628
- var bd = ({ zoomLevel: e, canZoomIn: t, canZoomOut: n, onZoomIn: r, onZoomOut: i, onReset: a, breadcrumbs: o = [], onBreadcrumbClick: s }) => {
8912
+ var Fd = ({ zoomLevel: e, canZoomIn: t, canZoomOut: n, onZoomIn: r, onZoomOut: i, onReset: a, breadcrumbs: o = [], onBreadcrumbClick: s }) => {
8629
8913
  let c = o.length > 0;
8630
8914
  return /* @__PURE__ */ x("div", {
8631
8915
  className: "timeline-zoom-controls",
@@ -8640,7 +8924,7 @@ var bd = ({ zoomLevel: e, canZoomIn: t, canZoomOut: n, onZoomIn: r, onZoomOut: i
8640
8924
  "aria-label": "Zoom out",
8641
8925
  children: "[-]"
8642
8926
  }),
8643
- c ? /* @__PURE__ */ b(Nu, {
8927
+ c ? /* @__PURE__ */ b(Ju, {
8644
8928
  trail: [{
8645
8929
  label: "ALL",
8646
8930
  onClick: a
@@ -8656,7 +8940,7 @@ var bd = ({ zoomLevel: e, canZoomIn: t, canZoomOut: n, onZoomIn: r, onZoomOut: i
8656
8940
  className: "timeline-zoom-controls__level",
8657
8941
  onPress: a,
8658
8942
  "aria-label": `Current zoom: ${e}. Click to reset.`,
8659
- children: /* @__PURE__ */ b(Au, {
8943
+ children: /* @__PURE__ */ b(Gu, {
8660
8944
  variant: "accent",
8661
8945
  size: "medium",
8662
8946
  children: e.toUpperCase()
@@ -8672,7 +8956,7 @@ var bd = ({ zoomLevel: e, canZoomIn: t, canZoomOut: n, onZoomIn: r, onZoomOut: i
8672
8956
  })
8673
8957
  ]
8674
8958
  });
8675
- }, xd = ({ children: e }) => /* @__PURE__ */ x("div", {
8959
+ }, Id = ({ children: e }) => /* @__PURE__ */ x("div", {
8676
8960
  className: "timeline-axis",
8677
8961
  children: [/* @__PURE__ */ b("div", {
8678
8962
  className: "timeline-axis__line",
@@ -8681,7 +8965,7 @@ var bd = ({ zoomLevel: e, canZoomIn: t, canZoomOut: n, onZoomIn: r, onZoomOut: i
8681
8965
  className: "timeline-axis__content",
8682
8966
  children: e
8683
8967
  })]
8684
- }), Sd = e.memo(({ buckets: e, onBucketClick: t }) => /* @__PURE__ */ b("div", {
8968
+ }), Ld = e.memo(({ buckets: e, onBucketClick: t }) => /* @__PURE__ */ b("div", {
8685
8969
  className: "timeline-view timeline-view--year",
8686
8970
  role: "list",
8687
8971
  children: e.map((e) => /* @__PURE__ */ b("div", {
@@ -8692,7 +8976,7 @@ var bd = ({ zoomLevel: e, canZoomIn: t, canZoomOut: n, onZoomIn: r, onZoomOut: i
8692
8976
  onPress: () => t(e),
8693
8977
  children: [/* @__PURE__ */ b("div", {
8694
8978
  className: "timeline-view__node",
8695
- children: /* @__PURE__ */ b(Uu, {
8979
+ children: /* @__PURE__ */ b(id, {
8696
8980
  shape: "circle",
8697
8981
  size: "medium",
8698
8982
  variant: "default",
@@ -8701,7 +8985,7 @@ var bd = ({ zoomLevel: e, canZoomIn: t, canZoomOut: n, onZoomIn: r, onZoomOut: i
8701
8985
  })
8702
8986
  }), /* @__PURE__ */ b("div", {
8703
8987
  className: "timeline-view__content",
8704
- children: /* @__PURE__ */ x(Au, {
8988
+ children: /* @__PURE__ */ x(Gu, {
8705
8989
  variant: "default",
8706
8990
  size: "small",
8707
8991
  children: [
@@ -8713,7 +8997,7 @@ var bd = ({ zoomLevel: e, canZoomIn: t, canZoomOut: n, onZoomIn: r, onZoomOut: i
8713
8997
  })]
8714
8998
  }) : /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b("div", {
8715
8999
  className: "timeline-view__node",
8716
- children: /* @__PURE__ */ b(Uu, {
9000
+ children: /* @__PURE__ */ b(id, {
8717
9001
  shape: "circle",
8718
9002
  size: "medium",
8719
9003
  variant: "default",
@@ -8722,7 +9006,7 @@ var bd = ({ zoomLevel: e, canZoomIn: t, canZoomOut: n, onZoomIn: r, onZoomOut: i
8722
9006
  })
8723
9007
  }), /* @__PURE__ */ b("div", {
8724
9008
  className: "timeline-view__content",
8725
- children: /* @__PURE__ */ x(Au, {
9009
+ children: /* @__PURE__ */ x(Gu, {
8726
9010
  variant: "default",
8727
9011
  size: "small",
8728
9012
  children: [
@@ -8734,10 +9018,10 @@ var bd = ({ zoomLevel: e, canZoomIn: t, canZoomOut: n, onZoomIn: r, onZoomOut: i
8734
9018
  })] })
8735
9019
  }, e.periodStart))
8736
9020
  }));
8737
- Sd.displayName = "YearView";
9021
+ Ld.displayName = "YearView";
8738
9022
  //#endregion
8739
9023
  //#region src/components/Lightbox/components/Lightbox.tsx
8740
- var Cd = ({ images: t, initialIndex: n = 0, isOpen: r, onClose: i, onIndexChange: o }) => {
9024
+ var Rd = ({ images: t, initialIndex: n = 0, isOpen: r, onClose: i, onIndexChange: o }) => {
8741
9025
  let c = t.length === 0 ? 0 : Math.max(0, Math.min(n, t.length - 1)), [l, u] = p(c);
8742
9026
  s(() => {
8743
9027
  r && u(c);
@@ -8837,19 +9121,19 @@ var Cd = ({ images: t, initialIndex: n = 0, isOpen: r, onClose: i, onIndexChange
8837
9121
  })
8838
9122
  });
8839
9123
  };
8840
- Cd.displayName = "Lightbox";
9124
+ Rd.displayName = "Lightbox";
8841
9125
  //#endregion
8842
9126
  //#region src/utils/isSafeHref.ts
8843
- var wd = /^(?:https?:|mailto:)/i;
8844
- function Td(e) {
9127
+ var zd = /^(?:https?:|mailto:)/i;
9128
+ function Bd(e) {
8845
9129
  if (typeof e != "string") return !1;
8846
9130
  let t = e.trim();
8847
- return t.length === 0 ? !1 : /^[a-z][a-z0-9+\-.]*:/i.test(t) ? wd.test(t) : !0;
9131
+ return t.length === 0 ? !1 : /^[a-z][a-z0-9+\-.]*:/i.test(t) ? zd.test(t) : !0;
8848
9132
  }
8849
9133
  //#endregion
8850
9134
  //#region src/components/TimelineContainer/components/variants/TimelineEntryCardImage.tsx
8851
- var Ed = ({ entry: e, isExpanded: t, onSelect: n }) => {
8852
- let [r, i] = p(!1), { image: a } = e, o = a.thumbnail || a.src, c = a.link && Td(a.link) ? a.link : void 0;
9135
+ var Vd = ({ entry: e, isExpanded: t, onSelect: n }) => {
9136
+ let [r, i] = p(!1), { image: a } = e, o = a.thumbnail || a.src, c = a.link && Bd(a.link) ? a.link : void 0;
8853
9137
  return s(() => {
8854
9138
  t || i(!1);
8855
9139
  }, [t]), c ? /* @__PURE__ */ x("a", {
@@ -8897,13 +9181,13 @@ var Ed = ({ entry: e, isExpanded: t, onSelect: n }) => {
8897
9181
  height: a.height
8898
9182
  })
8899
9183
  }),
8900
- /* @__PURE__ */ b(Cd, {
9184
+ /* @__PURE__ */ b(Rd, {
8901
9185
  images: [a],
8902
9186
  isOpen: r,
8903
9187
  onClose: () => i(!1)
8904
9188
  })
8905
9189
  ] });
8906
- }, Dd = ({ entry: e, isExpanded: t, onSelect: n }) => {
9190
+ }, Hd = ({ entry: e, isExpanded: t, onSelect: n }) => {
8907
9191
  let [r, i] = p({ phase: "grid" });
8908
9192
  if (s(() => {
8909
9193
  t || i({ phase: "grid" });
@@ -8917,7 +9201,7 @@ var Ed = ({ entry: e, isExpanded: t, onSelect: n }) => {
8917
9201
  children: "No images."
8918
9202
  })] });
8919
9203
  let a = (e, t) => {
8920
- t.link && Td(t.link) || i((t) => t.phase === "focused" && t.index === e ? {
9204
+ t.link && Bd(t.link) || i((t) => t.phase === "focused" && t.index === e ? {
8921
9205
  phase: "lightbox",
8922
9206
  index: e
8923
9207
  } : {
@@ -8938,13 +9222,13 @@ var Ed = ({ entry: e, isExpanded: t, onSelect: n }) => {
8938
9222
  /* @__PURE__ */ b("div", {
8939
9223
  className: "eidotter-timeline-card-gallery__grid",
8940
9224
  role: "list",
8941
- children: e.images.map((e, t) => /* @__PURE__ */ b(Od, {
9225
+ children: e.images.map((e, t) => /* @__PURE__ */ b(Ud, {
8942
9226
  image: e,
8943
9227
  isFocused: o === t,
8944
9228
  onClick: () => a(t, e)
8945
9229
  }, t))
8946
9230
  }),
8947
- /* @__PURE__ */ b(Cd, {
9231
+ /* @__PURE__ */ b(Rd, {
8948
9232
  images: e.images,
8949
9233
  isOpen: r.phase === "lightbox",
8950
9234
  initialIndex: r.phase === "lightbox" ? r.index : 0,
@@ -8962,8 +9246,8 @@ var Ed = ({ entry: e, isExpanded: t, onSelect: n }) => {
8962
9246
  }
8963
9247
  })
8964
9248
  ] });
8965
- }, Od = ({ image: e, isFocused: t, onClick: n }) => {
8966
- let r = e.thumbnail || e.src, i = e.link && Td(e.link) ? e.link : void 0;
9249
+ }, Ud = ({ image: e, isFocused: t, onClick: n }) => {
9250
+ let r = e.thumbnail || e.src, i = e.link && Bd(e.link) ? e.link : void 0;
8967
9251
  return i ? /* @__PURE__ */ b("div", {
8968
9252
  role: "listitem",
8969
9253
  className: "eidotter-timeline-card-gallery__cell eidotter-timeline-card-gallery__cell--link",
@@ -8996,39 +9280,39 @@ var Ed = ({ entry: e, isExpanded: t, onSelect: n }) => {
8996
9280
  })
8997
9281
  })
8998
9282
  });
8999
- }, kd = e.memo(({ entry: e, isSelected: t, isExpanded: n = !1, onSelect: r, footer: i, children: a }) => /* @__PURE__ */ x("div", {
9283
+ }, Wd = e.memo(({ entry: e, isSelected: t, isExpanded: n = !1, onSelect: r, footer: i, children: a }) => /* @__PURE__ */ x("div", {
9000
9284
  className: $("eidotter-timeline-card", t && "eidotter-timeline-card--selected", n && "eidotter-timeline-card--expanded"),
9001
- children: [Ad(e, n, r, a), i && /* @__PURE__ */ b("div", {
9285
+ children: [Gd(e, n, r, a), i && /* @__PURE__ */ b("div", {
9002
9286
  className: "eidotter-timeline-card__footer",
9003
9287
  children: i
9004
9288
  })]
9005
9289
  }));
9006
- kd.displayName = "TimelineEntryCard";
9007
- function Ad(e, t, n, r) {
9290
+ Wd.displayName = "TimelineEntryCard";
9291
+ function Gd(e, t, n, r) {
9008
9292
  switch (e.kind) {
9009
- case "text": return /* @__PURE__ */ b(Md, {
9293
+ case "text": return /* @__PURE__ */ b(qd, {
9010
9294
  entry: e,
9011
9295
  isExpanded: t,
9012
9296
  onSelect: n,
9013
9297
  children: r
9014
9298
  });
9015
- case "image": return /* @__PURE__ */ b(Ed, {
9299
+ case "image": return /* @__PURE__ */ b(Vd, {
9016
9300
  entry: e,
9017
9301
  isExpanded: t,
9018
9302
  onSelect: n
9019
9303
  });
9020
- case "gallery": return /* @__PURE__ */ b(Dd, {
9304
+ case "gallery": return /* @__PURE__ */ b(Hd, {
9021
9305
  entry: e,
9022
9306
  isExpanded: t,
9023
9307
  onSelect: n
9024
9308
  });
9025
- default: return jd(e);
9309
+ default: return Kd(e);
9026
9310
  }
9027
9311
  }
9028
- function jd(e) {
9312
+ function Kd(e) {
9029
9313
  throw Error(`TimelineEntryCard: unhandled entry kind: ${JSON.stringify(e)}`);
9030
9314
  }
9031
- var Md = ({ entry: e, isExpanded: t, onSelect: n, children: r }) => {
9315
+ var qd = ({ entry: e, isExpanded: t, onSelect: n, children: r }) => {
9032
9316
  let i = typeof e.content == "string", a = e.content != null;
9033
9317
  return /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ x(K, {
9034
9318
  className: "eidotter-timeline-card__trigger",
@@ -9066,7 +9350,7 @@ var Md = ({ entry: e, isExpanded: t, onSelect: n, children: r }) => {
9066
9350
  children: e.content
9067
9351
  })
9068
9352
  })] });
9069
- }, Nd = e.memo(({ buckets: t, selectedEntryId: n, onEntrySelect: r, onBucketClick: i, renderEntry: a }) => /* @__PURE__ */ b("div", {
9353
+ }, Jd = e.memo(({ buckets: t, selectedEntryId: n, onEntrySelect: r, onBucketClick: i, renderEntry: a }) => /* @__PURE__ */ b("div", {
9070
9354
  className: "timeline-view timeline-view--month",
9071
9355
  role: "list",
9072
9356
  children: t.map((t) => /* @__PURE__ */ x("div", {
@@ -9074,7 +9358,7 @@ var Md = ({ entry: e, isExpanded: t, onSelect: n, children: r }) => {
9074
9358
  role: "listitem",
9075
9359
  children: [/* @__PURE__ */ b("div", {
9076
9360
  className: "timeline-view__node",
9077
- children: /* @__PURE__ */ b(Uu, {
9361
+ children: /* @__PURE__ */ b(id, {
9078
9362
  shape: "circle",
9079
9363
  size: "medium",
9080
9364
  variant: "default",
@@ -9085,7 +9369,7 @@ var Md = ({ entry: e, isExpanded: t, onSelect: n, children: r }) => {
9085
9369
  }), /* @__PURE__ */ b("div", {
9086
9370
  className: "timeline-view__content",
9087
9371
  children: t.entries.map((t) => {
9088
- let i = n === t.id, o = () => /* @__PURE__ */ b(kd, {
9372
+ let i = n === t.id, o = () => /* @__PURE__ */ b(Wd, {
9089
9373
  entry: t,
9090
9374
  isSelected: i,
9091
9375
  isExpanded: i,
@@ -9100,23 +9384,23 @@ var Md = ({ entry: e, isExpanded: t, onSelect: n, children: r }) => {
9100
9384
  })]
9101
9385
  }, t.periodStart))
9102
9386
  }));
9103
- Nd.displayName = "MonthView";
9387
+ Jd.displayName = "MonthView";
9104
9388
  //#endregion
9105
9389
  //#region src/components/Tag/components/Tag.tsx
9106
- var Pd = {
9390
+ var Yd = {
9107
9391
  sm: "text-dos-text-xs px-2 py-0.5 min-h-6 gap-1",
9108
9392
  md: "text-dos-text-sm px-2.5 py-1 min-h-7 gap-1.5",
9109
9393
  lg: "text-dos-text-md px-3 py-1.5 min-h-8 gap-1.5",
9110
9394
  small: "text-dos-text-xs px-2 py-0.5 min-h-6 gap-1",
9111
9395
  medium: "text-dos-text-sm px-2.5 py-1 min-h-7 gap-1.5"
9112
- }, Fd = ({ children: e, variant: t = "default", size: n = "md", color: r, selected: i = !1, closeable: a = !1, disabled: o = !1, onClick: s, onClose: c, className: l, "aria-label": u, ...d }) => {
9396
+ }, Xd = ({ children: e, variant: t = "default", size: n = "md", color: r, selected: i = !1, closeable: a = !1, disabled: o = !1, onClick: s, onClose: c, className: l, "aria-label": u, ...d }) => {
9113
9397
  let f = !!s && !o, { isClosing: p, triggerClose: m, handleAnimationEnd: h } = $l("tag-exit", c), g = (e) => {
9114
9398
  o || ((e.key === "Enter" || e.key === " ") && s && (e.preventDefault(), s(e)), (e.key === "Delete" || e.key === "Backspace") && a && c && (e.preventDefault(), m()));
9115
9399
  }, _ = () => {
9116
9400
  o || m();
9117
9401
  }, v = r ? { "--tag-color": "var(" + r + ")" } : void 0;
9118
9402
  return /* @__PURE__ */ x("span", {
9119
- className: $("inline-flex items-center justify-center", "font-dos leading-none whitespace-nowrap select-none", "rounded-dos-sm uppercase tracking-wider", Pd[n] || Pd.md, "eidotter-tag", "eidotter-tag--" + t, i && "eidotter-tag--selected", o && "opacity-50 cursor-not-allowed", p && "eidotter-tag--closing", f && "cursor-pointer", l),
9403
+ className: $("inline-flex items-center justify-center", "font-dos leading-none whitespace-nowrap select-none", "rounded-dos-sm uppercase tracking-wider", Yd[n] || Yd.md, "eidotter-tag", "eidotter-tag--" + t, i && "eidotter-tag--selected", o && "opacity-50 cursor-not-allowed", p && "eidotter-tag--closing", f && "cursor-pointer", l),
9120
9404
  style: v,
9121
9405
  onClick: f ? (e) => !o && s?.(e) : void 0,
9122
9406
  onKeyDown: g,
@@ -9142,17 +9426,17 @@ var Pd = {
9142
9426
  children: "[x]"
9143
9427
  })]
9144
9428
  });
9145
- }, Id = {
9429
+ }, Zd = {
9146
9430
  tight: "gap-1",
9147
9431
  normal: "gap-2",
9148
9432
  loose: "gap-3"
9149
- }, Ld = ({ children: e, gap: t = "normal", wrap: n = !0, className: r, "aria-label": i, ...a }) => /* @__PURE__ */ b("div", {
9150
- className: $("flex", n ? "flex-wrap" : "flex-nowrap", Id[t] || Id.normal, r),
9433
+ }, Qd = ({ children: e, gap: t = "normal", wrap: n = !0, className: r, "aria-label": i, ...a }) => /* @__PURE__ */ b("div", {
9434
+ className: $("flex", n ? "flex-wrap" : "flex-nowrap", Zd[t] || Zd.normal, r),
9151
9435
  role: "group",
9152
9436
  "aria-label": i,
9153
9437
  ...a,
9154
9438
  children: e
9155
- }), Rd = e.memo(({ buckets: t, selectedEntryId: n, onEntrySelect: r, renderEntry: i }) => /* @__PURE__ */ b("div", {
9439
+ }), $d = e.memo(({ buckets: t, selectedEntryId: n, onEntrySelect: r, renderEntry: i }) => /* @__PURE__ */ b("div", {
9156
9440
  className: "timeline-view timeline-view--day",
9157
9441
  role: "list",
9158
9442
  children: t.map((t) => /* @__PURE__ */ x("div", {
@@ -9160,7 +9444,7 @@ var Pd = {
9160
9444
  role: "listitem",
9161
9445
  children: [/* @__PURE__ */ b("div", {
9162
9446
  className: "timeline-view__node",
9163
- children: /* @__PURE__ */ b(Uu, {
9447
+ children: /* @__PURE__ */ b(id, {
9164
9448
  shape: "circle",
9165
9449
  size: "medium",
9166
9450
  variant: "default",
@@ -9170,15 +9454,15 @@ var Pd = {
9170
9454
  }), /* @__PURE__ */ b("div", {
9171
9455
  className: "timeline-view__content",
9172
9456
  children: t.entries.map((t) => {
9173
- let a = n === t.id, o = () => /* @__PURE__ */ b(kd, {
9457
+ let a = n === t.id, o = () => /* @__PURE__ */ b(Wd, {
9174
9458
  entry: t,
9175
9459
  isSelected: a,
9176
9460
  isExpanded: a,
9177
9461
  onSelect: r,
9178
- footer: t.tags && t.tags.length > 0 ? /* @__PURE__ */ b(Ld, {
9462
+ footer: t.tags && t.tags.length > 0 ? /* @__PURE__ */ b(Qd, {
9179
9463
  gap: "tight",
9180
9464
  "aria-label": `Tags for ${t.title}`,
9181
- children: t.tags.map((e) => /* @__PURE__ */ b(Fd, {
9465
+ children: t.tags.map((e) => /* @__PURE__ */ b(Xd, {
9182
9466
  size: "small",
9183
9467
  variant: "outlined",
9184
9468
  children: e
@@ -9194,10 +9478,10 @@ var Pd = {
9194
9478
  })]
9195
9479
  }, t.periodStart))
9196
9480
  }));
9197
- Rd.displayName = "DayView";
9481
+ $d.displayName = "DayView";
9198
9482
  //#endregion
9199
9483
  //#region src/components/TimelineContainer/components/views/HourView.tsx
9200
- var zd = e.memo(({ buckets: t, selectedEntryId: n, onEntrySelect: r, renderEntry: i }) => /* @__PURE__ */ b("div", {
9484
+ var ef = e.memo(({ buckets: t, selectedEntryId: n, onEntrySelect: r, renderEntry: i }) => /* @__PURE__ */ b("div", {
9201
9485
  className: "timeline-view timeline-view--hour",
9202
9486
  role: "list",
9203
9487
  children: t.map((t) => /* @__PURE__ */ x("div", {
@@ -9205,7 +9489,7 @@ var zd = e.memo(({ buckets: t, selectedEntryId: n, onEntrySelect: r, renderEntry
9205
9489
  role: "listitem",
9206
9490
  children: [/* @__PURE__ */ b("div", {
9207
9491
  className: "timeline-view__node",
9208
- children: /* @__PURE__ */ b(Uu, {
9492
+ children: /* @__PURE__ */ b(id, {
9209
9493
  shape: "circle",
9210
9494
  size: "medium",
9211
9495
  variant: "default",
@@ -9215,22 +9499,22 @@ var zd = e.memo(({ buckets: t, selectedEntryId: n, onEntrySelect: r, renderEntry
9215
9499
  }), /* @__PURE__ */ b("div", {
9216
9500
  className: "timeline-view__content",
9217
9501
  children: t.entries.map((t) => {
9218
- let a = n === t.id, o = () => /* @__PURE__ */ x(kd, {
9502
+ let a = n === t.id, o = () => /* @__PURE__ */ x(Wd, {
9219
9503
  entry: t,
9220
9504
  isSelected: a,
9221
9505
  isExpanded: !0,
9222
9506
  onSelect: r,
9223
9507
  footer: /* @__PURE__ */ x("div", {
9224
9508
  className: "timeline-view__entry-footer",
9225
- children: [t.tags && t.tags.length > 0 && /* @__PURE__ */ b(Ld, {
9509
+ children: [t.tags && t.tags.length > 0 && /* @__PURE__ */ b(Qd, {
9226
9510
  gap: "tight",
9227
9511
  "aria-label": `Tags for ${t.title}`,
9228
- children: t.tags.map((e) => /* @__PURE__ */ b(Fd, {
9512
+ children: t.tags.map((e) => /* @__PURE__ */ b(Xd, {
9229
9513
  size: "small",
9230
9514
  variant: "outlined",
9231
9515
  children: e
9232
9516
  }, e))
9233
- }), t.type && /* @__PURE__ */ b(Au, {
9517
+ }), t.type && /* @__PURE__ */ b(Gu, {
9234
9518
  variant: "default",
9235
9519
  size: "small",
9236
9520
  children: t.type
@@ -9239,7 +9523,7 @@ var zd = e.memo(({ buckets: t, selectedEntryId: n, onEntrySelect: r, renderEntry
9239
9523
  children: [/* @__PURE__ */ b("time", {
9240
9524
  className: "timeline-view__timestamp",
9241
9525
  dateTime: t.date,
9242
- children: rd(t.date)
9526
+ children: vd(t.date)
9243
9527
  }), t.kind === "text" && t.content !== void 0 && /* @__PURE__ */ b("div", {
9244
9528
  className: "timeline-view__entry-content",
9245
9529
  children: t.content
@@ -9254,29 +9538,29 @@ var zd = e.memo(({ buckets: t, selectedEntryId: n, onEntrySelect: r, renderEntry
9254
9538
  })]
9255
9539
  }, t.periodStart))
9256
9540
  }));
9257
- zd.displayName = "HourView";
9541
+ ef.displayName = "HourView";
9258
9542
  //#endregion
9259
9543
  //#region src/components/TimelineContainer/components/TimelineContent.tsx
9260
- var Bd = ({ zoomLevel: e, buckets: t, selectedEntryId: n, onEntrySelect: r, onBucketClick: i, renderEntry: a }) => {
9544
+ var tf = ({ zoomLevel: e, buckets: t, selectedEntryId: n, onEntrySelect: r, onBucketClick: i, renderEntry: a }) => {
9261
9545
  switch (e) {
9262
- case "year": return /* @__PURE__ */ b(Sd, {
9546
+ case "year": return /* @__PURE__ */ b(Ld, {
9263
9547
  buckets: t,
9264
9548
  onBucketClick: i
9265
9549
  });
9266
- case "month": return /* @__PURE__ */ b(Nd, {
9550
+ case "month": return /* @__PURE__ */ b(Jd, {
9267
9551
  buckets: t,
9268
9552
  selectedEntryId: n,
9269
9553
  onEntrySelect: r,
9270
9554
  onBucketClick: i,
9271
9555
  renderEntry: a
9272
9556
  });
9273
- case "day": return /* @__PURE__ */ b(Rd, {
9557
+ case "day": return /* @__PURE__ */ b($d, {
9274
9558
  buckets: t,
9275
9559
  selectedEntryId: n,
9276
9560
  onEntrySelect: r,
9277
9561
  renderEntry: a
9278
9562
  });
9279
- case "hour": return /* @__PURE__ */ b(zd, {
9563
+ case "hour": return /* @__PURE__ */ b(ef, {
9280
9564
  buckets: t,
9281
9565
  selectedEntryId: n,
9282
9566
  onEntrySelect: r,
@@ -9284,7 +9568,7 @@ var Bd = ({ zoomLevel: e, buckets: t, selectedEntryId: n, onEntrySelect: r, onBu
9284
9568
  });
9285
9569
  default: return e;
9286
9570
  }
9287
- }, Vd = ({ entries: e, selectedEntryId: t, onSelect: n, onDeselect: r, renderEntry: i, formatDate: o }) => {
9571
+ }, nf = ({ entries: e, selectedEntryId: t, onSelect: n, onDeselect: r, renderEntry: i, formatDate: o }) => {
9288
9572
  let c = e.find((e) => e.id === t) ?? null, l = f(null), u = f(null), d = f(t);
9289
9573
  s(() => {
9290
9574
  let e = d.current;
@@ -9329,7 +9613,7 @@ var Bd = ({ zoomLevel: e, buckets: t, selectedEntryId: n, onEntrySelect: r, onBu
9329
9613
  children: [/* @__PURE__ */ b("span", {
9330
9614
  className: "eidotter-timeline-md__rail-node",
9331
9615
  "aria-hidden": "true",
9332
- children: /* @__PURE__ */ b(Uu, {
9616
+ children: /* @__PURE__ */ b(id, {
9333
9617
  shape: "circle",
9334
9618
  size: "sm",
9335
9619
  variant: "default",
@@ -9363,7 +9647,7 @@ var Bd = ({ zoomLevel: e, buckets: t, selectedEntryId: n, onEntrySelect: r, onBu
9363
9647
  }), /* @__PURE__ */ b("div", {
9364
9648
  className: "eidotter-timeline-md__detail-body",
9365
9649
  children: ((e) => {
9366
- let t = () => /* @__PURE__ */ b(kd, {
9650
+ let t = () => /* @__PURE__ */ b(Wd, {
9367
9651
  entry: e,
9368
9652
  isSelected: !0,
9369
9653
  isExpanded: !0
@@ -9382,19 +9666,19 @@ var Bd = ({ zoomLevel: e, buckets: t, selectedEntryId: n, onEntrySelect: r, onBu
9382
9666
  })]
9383
9667
  });
9384
9668
  };
9385
- Vd.displayName = "MasterDetailLayout";
9669
+ nf.displayName = "MasterDetailLayout";
9386
9670
  //#endregion
9387
9671
  //#region src/components/TimelineContainer/components/TimelineContainer.tsx
9388
- var Hd = ({ entries: e, mode: t = "interactive", zoomLevel: n, defaultZoomLevel: r = "month", onZoomChange: i, selectedEntryId: o, defaultSelectedEntryId: c, onSelectEntry: l, sortOrder: d = "desc", scrollToZoom: m = !0, keyboardShortcuts: h = !0, renderEntry: g, pageSize: _ = 10, onLoadMore: v, ...y }) => {
9389
- let S = t === "static", C = t === "feed", w = S || C, T = t === "master-detail", E = f(null), D = f(null), [O, k] = p(""), { zoomLevel: A, canZoomIn: j, canZoomOut: M, breadcrumbs: N, currentPeriod: P, isDrillDownEnabled: ee, drillDown: F, drillUp: te, reset: ne } = Gu({
9672
+ var rf = ({ entries: e, mode: t = "interactive", zoomLevel: n, defaultZoomLevel: r = "month", onZoomChange: i, selectedEntryId: o, defaultSelectedEntryId: c, onSelectEntry: l, sortOrder: d = "desc", scrollToZoom: m = !0, keyboardShortcuts: h = !0, renderEntry: g, pageSize: _ = 10, onLoadMore: v, ...y }) => {
9673
+ let S = t === "static", C = t === "feed", w = S || C, T = t === "master-detail", E = f(null), D = f(null), [O, k] = p(""), { zoomLevel: A, canZoomIn: j, canZoomOut: M, breadcrumbs: N, currentPeriod: P, isDrillDownEnabled: ee, drillDown: F, drillUp: te, reset: ne } = od({
9390
9674
  zoomLevel: n,
9391
9675
  defaultZoomLevel: r,
9392
9676
  onZoomChange: i
9393
- }), { selectedEntryId: re, select: ie, toggle: I, deselect: L } = Ku({
9677
+ }), { selectedEntryId: re, select: ie, toggle: I, deselect: L } = sd({
9394
9678
  selectedEntryId: o,
9395
9679
  defaultSelectedEntryId: c,
9396
9680
  onSelectEntry: l
9397
- }), ae = u(() => yd(e, A, d), [
9681
+ }), ae = u(() => Pd(e, A, d), [
9398
9682
  e,
9399
9683
  A,
9400
9684
  d
@@ -9403,7 +9687,7 @@ var Hd = ({ entries: e, mode: t = "interactive", zoomLevel: n, defaultZoomLevel:
9403
9687
  "month",
9404
9688
  "day",
9405
9689
  "hour"
9406
- ][N.length - 1] : null, R = u(() => P && oe ? vd(ae, P, oe) : ae, [
9690
+ ][N.length - 1] : null, R = u(() => P && oe ? Nd(ae, P, oe) : ae, [
9407
9691
  ae,
9408
9692
  P,
9409
9693
  oe
@@ -9505,7 +9789,7 @@ var Hd = ({ entries: e, mode: t = "interactive", zoomLevel: n, defaultZoomLevel:
9505
9789
  return /* @__PURE__ */ x("div", {
9506
9790
  ref: E,
9507
9791
  ...y,
9508
- className: $("font-dos text-dos-text-brand p-4 min-h-[200px]", "eidotter-timeline-container", S && "eidotter-timeline-container--static", C && "eidotter-timeline-container--feed", T && "eidotter-timeline-container--master-detail", y.className),
9792
+ className: $("font-dos text-dos-text-brand p-4", "eidotter-timeline-container", S && "eidotter-timeline-container--static", C && "eidotter-timeline-container--feed", T && "eidotter-timeline-container--master-detail", y.className),
9509
9793
  role: "region",
9510
9794
  "aria-label": y["aria-label"] ?? "Timeline",
9511
9795
  tabIndex: w || T ? void 0 : 0,
@@ -9517,7 +9801,7 @@ var Hd = ({ entries: e, mode: t = "interactive", zoomLevel: n, defaultZoomLevel:
9517
9801
  "aria-atomic": "true",
9518
9802
  children: O
9519
9803
  }),
9520
- !w && !T && /* @__PURE__ */ b(bd, {
9804
+ !w && !T && /* @__PURE__ */ b(Fd, {
9521
9805
  zoomLevel: A,
9522
9806
  canZoomIn: j,
9523
9807
  canZoomOut: M,
@@ -9536,12 +9820,12 @@ var Hd = ({ entries: e, mode: t = "interactive", zoomLevel: n, defaultZoomLevel:
9536
9820
  className: "eidotter-timeline-container__empty",
9537
9821
  role: "status",
9538
9822
  children: [/* @__PURE__ */ b("p", { children: "C:\\TIMELINE> No entries found." }), /* @__PURE__ */ b("p", { children: "_" })]
9539
- }) : S ? /* @__PURE__ */ b(xd, { children: /* @__PURE__ */ b("div", {
9823
+ }) : S ? /* @__PURE__ */ b(Id, { children: /* @__PURE__ */ b("div", {
9540
9824
  className: "eidotter-timeline-container__static",
9541
9825
  role: "list",
9542
9826
  "aria-label": "Timeline",
9543
9827
  children: B.map((e) => {
9544
- let t = () => /* @__PURE__ */ b(kd, {
9828
+ let t = () => /* @__PURE__ */ b(Wd, {
9545
9829
  entry: e,
9546
9830
  isSelected: !1,
9547
9831
  isExpanded: !0
@@ -9551,7 +9835,7 @@ var Hd = ({ entries: e, mode: t = "interactive", zoomLevel: n, defaultZoomLevel:
9551
9835
  role: "listitem",
9552
9836
  children: [/* @__PURE__ */ b("div", {
9553
9837
  className: "timeline-view__node",
9554
- children: /* @__PURE__ */ b(Uu, {
9838
+ children: /* @__PURE__ */ b(id, {
9555
9839
  shape: "circle",
9556
9840
  size: "medium",
9557
9841
  variant: "default",
@@ -9565,12 +9849,12 @@ var Hd = ({ entries: e, mode: t = "interactive", zoomLevel: n, defaultZoomLevel:
9565
9849
  }) : t()]
9566
9850
  }, e.id);
9567
9851
  })
9568
- }) }) : C ? /* @__PURE__ */ x(xd, { children: [/* @__PURE__ */ b("div", {
9852
+ }) }) : C ? /* @__PURE__ */ x(Id, { children: [/* @__PURE__ */ b("div", {
9569
9853
  className: "eidotter-timeline-container__feed",
9570
9854
  role: "list",
9571
9855
  "aria-label": "Timeline",
9572
9856
  children: fe.map((e) => {
9573
- let t = re === e.id, n = () => /* @__PURE__ */ b(kd, {
9857
+ let t = re === e.id, n = () => /* @__PURE__ */ b(Wd, {
9574
9858
  entry: e,
9575
9859
  isSelected: t,
9576
9860
  isExpanded: t,
@@ -9581,7 +9865,7 @@ var Hd = ({ entries: e, mode: t = "interactive", zoomLevel: n, defaultZoomLevel:
9581
9865
  role: "listitem",
9582
9866
  children: [/* @__PURE__ */ b("div", {
9583
9867
  className: "timeline-view__node",
9584
- children: /* @__PURE__ */ b(Uu, {
9868
+ children: /* @__PURE__ */ b(id, {
9585
9869
  shape: "circle",
9586
9870
  size: "medium",
9587
9871
  variant: "default",
@@ -9601,14 +9885,14 @@ var Hd = ({ entries: e, mode: t = "interactive", zoomLevel: n, defaultZoomLevel:
9601
9885
  onClick: me,
9602
9886
  "aria-label": `Load more entries (showing ${V} of ${B.length})`,
9603
9887
  children: "LOAD MORE..."
9604
- })] }) : T ? /* @__PURE__ */ b(Vd, {
9888
+ })] }) : T ? /* @__PURE__ */ b(nf, {
9605
9889
  entries: B,
9606
9890
  selectedEntryId: re,
9607
9891
  onSelect: ie,
9608
9892
  onDeselect: L,
9609
9893
  renderEntry: g,
9610
9894
  formatDate: ge
9611
- }) : R.length === 0 && P ? /* @__PURE__ */ b(xd, { children: /* @__PURE__ */ x("div", {
9895
+ }) : R.length === 0 && P ? /* @__PURE__ */ b(Id, { children: /* @__PURE__ */ x("div", {
9612
9896
  className: "eidotter-timeline-container__empty",
9613
9897
  role: "status",
9614
9898
  children: [/* @__PURE__ */ x("p", { children: [
@@ -9616,7 +9900,7 @@ var Hd = ({ entries: e, mode: t = "interactive", zoomLevel: n, defaultZoomLevel:
9616
9900
  N[N.length - 1]?.label ?? "this period",
9617
9901
  "."
9618
9902
  ] }), /* @__PURE__ */ b("p", { children: "_" })]
9619
- }) }) : /* @__PURE__ */ b(xd, { children: /* @__PURE__ */ b(Bd, {
9903
+ }) }) : /* @__PURE__ */ b(Id, { children: /* @__PURE__ */ b(tf, {
9620
9904
  zoomLevel: A,
9621
9905
  buckets: R,
9622
9906
  selectedEntryId: re,
@@ -9627,7 +9911,7 @@ var Hd = ({ entries: e, mode: t = "interactive", zoomLevel: n, defaultZoomLevel:
9627
9911
  })
9628
9912
  ]
9629
9913
  });
9630
- }, Ud = r(({ isOpen: e, onOpenChange: t, onClose: n, title: r, children: i, footer: a, className: o }, c) => {
9914
+ }, af = r(({ isOpen: e, onOpenChange: t, onClose: n, title: r, children: i, footer: a, className: o }, c) => {
9631
9915
  let l = f(e), u = f(!1);
9632
9916
  s(() => {
9633
9917
  e !== l.current && (l.current = e, u.current || (t?.(e), e || n?.()), u.current = !1);
@@ -9679,12 +9963,12 @@ var Hd = ({ entries: e, mode: t = "interactive", zoomLevel: n, defaultZoomLevel:
9679
9963
  })
9680
9964
  });
9681
9965
  });
9682
- Ud.displayName = "Modal";
9966
+ af.displayName = "Modal";
9683
9967
  //#endregion
9684
9968
  //#region src/hooks/useTextScramble.ts
9685
- var Wd = "░▒▓█│┤┐└┴┬├─┼", Gd = 4;
9686
- function Kd(e, t) {
9687
- let { speed: n = 40, characters: r = Wd, enabled: i = !0, delay: a = 0 } = t ?? {}, [o, c] = p(() => {
9969
+ var of = "░▒▓█│┤┐└┴┬├─┼", sf = 4;
9970
+ function cf(e, t) {
9971
+ let { speed: n = 40, characters: r = of, enabled: i = !0, delay: a = 0 } = t ?? {}, [o, c] = p(() => {
9688
9972
  if (!i || Ql()) return e;
9689
9973
  let t = "";
9690
9974
  for (let n = 0; n < e.length; n++) e[n] === " " ? t += " " : t += r[Math.floor(Math.random() * r.length)];
@@ -9705,7 +9989,7 @@ function Kd(e, t) {
9705
9989
  return;
9706
9990
  }
9707
9991
  if (a >= n) {
9708
- if (s = i, o++, o >= Gd && (t++, o = 0), t >= e.length) {
9992
+ if (s = i, o++, o >= sf && (t++, o = 0), t >= e.length) {
9709
9993
  c(e), u(!1);
9710
9994
  return;
9711
9995
  }
@@ -9731,7 +10015,7 @@ function Kd(e, t) {
9731
10015
  }
9732
10016
  //#endregion
9733
10017
  //#region src/components/Stat/components/Stat.tsx
9734
- var qd = {
10018
+ var lf = {
9735
10019
  sm: {
9736
10020
  root: "gap-0.5",
9737
10021
  label: "text-dos-text-xs",
@@ -9768,23 +10052,23 @@ var qd = {
9768
10052
  value: "text-dos-display-md",
9769
10053
  trend: "text-dos-text-md"
9770
10054
  }
9771
- }, Jd = {
10055
+ }, uf = {
9772
10056
  up: "text-dos-text-success",
9773
10057
  down: "text-dos-text-error",
9774
10058
  neutral: "text-dos-text-brand"
9775
- }, Yd = {
10059
+ }, df = {
9776
10060
  up: "▲",
9777
10061
  down: "▼",
9778
10062
  neutral: "►"
9779
- }, Xd = {
10063
+ }, ff = {
9780
10064
  up: "increasing",
9781
10065
  down: "decreasing",
9782
10066
  neutral: "unchanged"
9783
- }, Zd = r(({ label: e, value: t, trend: n, trendValue: r, size: i = "md", scramble: a = !1, className: o, ...s }, c) => {
9784
- let { text: l } = Kd(String(t), {
10067
+ }, pf = r(({ label: e, value: t, trend: n, trendValue: r, size: i = "md", scramble: a = !1, className: o, ...s }, c) => {
10068
+ let { text: l } = cf(String(t), {
9785
10069
  speed: 30,
9786
10070
  enabled: a
9787
- }), u = a ? l : String(t), d = qd[i] || qd.md;
10071
+ }), u = a ? l : String(t), d = lf[i] || lf.md;
9788
10072
  return /* @__PURE__ */ x("div", {
9789
10073
  ref: c,
9790
10074
  className: $("flex flex-col font-dos", "eidotter-stat", d.root, o),
@@ -9799,12 +10083,12 @@ var qd = {
9799
10083
  children: u
9800
10084
  }),
9801
10085
  n && /* @__PURE__ */ x("span", {
9802
- className: $("inline-flex items-center gap-1 leading-none", Jd[n], d.trend),
9803
- "aria-label": `Trend: ${Xd[n]}${r ? `, ${r}` : ""}`,
10086
+ className: $("inline-flex items-center gap-1 leading-none", uf[n], d.trend),
10087
+ "aria-label": `Trend: ${ff[n]}${r ? `, ${r}` : ""}`,
9804
10088
  children: [/* @__PURE__ */ b("span", {
9805
10089
  className: "text-[0.8em]",
9806
10090
  "aria-hidden": "true",
9807
- children: Yd[n]
10091
+ children: df[n]
9808
10092
  }), r && /* @__PURE__ */ b("span", {
9809
10093
  className: "tabular-nums",
9810
10094
  children: r
@@ -9813,17 +10097,17 @@ var qd = {
9813
10097
  ]
9814
10098
  });
9815
10099
  });
9816
- Zd.displayName = "Stat";
10100
+ pf.displayName = "Stat";
9817
10101
  //#endregion
9818
10102
  //#region src/components/FilterBar/components/FilterBar.tsx
9819
- var Qd = {
10103
+ var mf = {
9820
10104
  sm: "eidotter-filter-bar--sm",
9821
10105
  md: "eidotter-filter-bar--md",
9822
10106
  lg: "eidotter-filter-bar--lg",
9823
10107
  small: "eidotter-filter-bar--sm",
9824
10108
  medium: "eidotter-filter-bar--md",
9825
10109
  large: "eidotter-filter-bar--lg"
9826
- }, $d = ({ items: e, activeIds: t, defaultActiveIds: n = [], mode: r = "multi", showAll: i = !1, allLabel: o = "All", size: s = "md", onChange: c, className: l, ...u }) => {
10110
+ }, hf = ({ items: e, activeIds: t, defaultActiveIds: n = [], mode: r = "multi", showAll: i = !1, allLabel: o = "All", size: s = "md", onChange: c, className: l, ...u }) => {
9827
10111
  let [d, m] = p(n), h = f(null), g = t !== void 0, _ = g ? t : d, v = e.filter((e) => !e.disabled).map((e) => e.id), y = _.length === 0, S = a((e) => {
9828
10112
  g || m(e), c?.(e);
9829
10113
  }, [g, c]), C = a((e) => {
@@ -9858,7 +10142,7 @@ var Qd = {
9858
10142
  }, [T]), D = i && y ? "__all__" : _.length > 0 ? _[0] : i ? "__all__" : v[0] || null;
9859
10143
  return /* @__PURE__ */ x("div", {
9860
10144
  ref: h,
9861
- className: $("inline-flex flex-wrap items-center gap-1 p-1 font-dos max-w-full", "bg-dos-bg-secondary border border-dos-border-default rounded-dos-sm", "eidotter-filter-bar", Qd[s] || Qd.md, l),
10145
+ className: $("inline-flex flex-wrap items-center gap-1 p-1 font-dos max-w-full", "bg-dos-bg-secondary border border-dos-border-default rounded-dos-sm", "eidotter-filter-bar", mf[s] || mf.md, l),
9862
10146
  role: "toolbar",
9863
10147
  onKeyDown: E,
9864
10148
  ...u,
@@ -9891,7 +10175,7 @@ var Qd = {
9891
10175
  }, e.id);
9892
10176
  })]
9893
10177
  });
9894
- }, ef = (e) => {
10178
+ }, gf = (e) => {
9895
10179
  if (!e) return !1;
9896
10180
  try {
9897
10181
  let t = new URL(e);
@@ -9903,8 +10187,19 @@ var Qd = {
9903
10187
  } catch {
9904
10188
  return !1;
9905
10189
  }
9906
- }, tf = ({ children: e, content: t, defaultExpanded: n = !1, expanded: r, onToggle: i, sources: a = [], className: o, ...s }) => {
9907
- let [l, u] = p(n), [d, m] = p(/* @__PURE__ */ new Set()), h = f(n), g = c(), _ = f(null), v = r !== void 0, y = v ? r : l;
10190
+ };
10191
+ //#endregion
10192
+ //#region src/components/InlineExpand/components/InlineExpand.tsx
10193
+ function _f(e) {
10194
+ try {
10195
+ let { hostname: t } = new URL(e);
10196
+ return `https://www.google.com/s2/favicons?domain=${encodeURIComponent(t)}&sz=32`;
10197
+ } catch {
10198
+ return null;
10199
+ }
10200
+ }
10201
+ var vf = ({ children: e, content: t, defaultExpanded: n = !1, expanded: r, onToggle: i, sources: a = [], className: o, ...s }) => {
10202
+ let [l, u] = p(n), [d, m] = p({}), h = f(n), g = c(), _ = f(null), v = r !== void 0, y = v ? r : l;
9908
10203
  y && (h.current = !0);
9909
10204
  let S = () => {
9910
10205
  let e = !y;
@@ -9944,24 +10239,54 @@ var Qd = {
9944
10239
  className: "eidotter-inline-expand__source-item",
9945
10240
  role: "listitem",
9946
10241
  children: /* @__PURE__ */ x("a", {
9947
- href: ef(e.url) ? e.url : void 0,
10242
+ href: gf(e.url) ? e.url : void 0,
9948
10243
  className: "eidotter-inline-expand__source-link",
9949
10244
  target: "_blank",
9950
10245
  rel: "noopener noreferrer",
9951
10246
  "aria-label": `${e.title} (opens external website)`,
9952
- children: [h.current && e.favicon && ef(e.favicon) && !d.has(e.url) ? /* @__PURE__ */ b("img", {
9953
- className: "eidotter-inline-expand__source-favicon",
9954
- src: e.favicon,
9955
- alt: "",
9956
- width: 16,
9957
- height: 16,
9958
- decoding: "async",
9959
- onError: () => m((t) => new Set(t).add(e.url))
9960
- }) : /* @__PURE__ */ b("span", {
9961
- className: "eidotter-inline-expand__source-icon",
9962
- "aria-hidden": "true",
9963
- children: "[→]"
9964
- }), /* @__PURE__ */ b("span", {
10247
+ children: [(() => {
10248
+ if (!h.current) return /* @__PURE__ */ b("span", {
10249
+ className: "eidotter-inline-expand__source-icon",
10250
+ "aria-hidden": "true",
10251
+ children: "[→]"
10252
+ });
10253
+ let t = d[e.url];
10254
+ if (t === "icon") return /* @__PURE__ */ b("span", {
10255
+ className: "eidotter-inline-expand__source-icon",
10256
+ "aria-hidden": "true",
10257
+ children: "[→]"
10258
+ });
10259
+ let n = !!e.favicon && gf(e.favicon);
10260
+ if (!t && n) return /* @__PURE__ */ b("img", {
10261
+ className: "eidotter-inline-expand__source-favicon",
10262
+ src: e.favicon,
10263
+ alt: "",
10264
+ width: 16,
10265
+ height: 16,
10266
+ decoding: "async",
10267
+ onError: () => m((t) => ({
10268
+ ...t,
10269
+ [e.url]: "google"
10270
+ }))
10271
+ });
10272
+ let r = _f(e.url);
10273
+ return r ? /* @__PURE__ */ b("img", {
10274
+ className: "eidotter-inline-expand__source-favicon",
10275
+ src: r,
10276
+ alt: "",
10277
+ width: 16,
10278
+ height: 16,
10279
+ decoding: "async",
10280
+ onError: () => m((t) => ({
10281
+ ...t,
10282
+ [e.url]: "icon"
10283
+ }))
10284
+ }) : /* @__PURE__ */ b("span", {
10285
+ className: "eidotter-inline-expand__source-icon",
10286
+ "aria-hidden": "true",
10287
+ children: "[→]"
10288
+ });
10289
+ })(), /* @__PURE__ */ b("span", {
9965
10290
  className: "eidotter-inline-expand__source-title",
9966
10291
  children: e.title
9967
10292
  })]
@@ -9971,40 +10296,40 @@ var Qd = {
9971
10296
  })
9972
10297
  })]
9973
10298
  });
9974
- }, nf = {
10299
+ }, yf = {
9975
10300
  horizontal: "h-px w-full",
9976
10301
  vertical: "w-px h-full"
9977
- }, rf = ({ orientation: e = "horizontal", className: t }) => /* @__PURE__ */ b("div", {
10302
+ }, bf = ({ orientation: e = "horizontal", className: t }) => /* @__PURE__ */ b("div", {
9978
10303
  role: "separator",
9979
10304
  "aria-orientation": e,
9980
- className: $("shrink-0 bg-dos-border-default", "eidotter-separator", nf[e], t)
9981
- }), af = {
10305
+ className: $("shrink-0 bg-dos-border-default", "eidotter-separator", yf[e], t)
10306
+ }), xf = {
9982
10307
  default: "text-dos-text-primary",
9983
10308
  error: "text-dos-error",
9984
10309
  warning: "text-dos-warning",
9985
10310
  info: "text-dos-info"
9986
- }, of = ({ title: e, count: t, tone: n = "default", children: r, className: i }) => /* @__PURE__ */ x("h3", {
9987
- className: $("eidotter-section-heading", "font-dos uppercase tracking-wider mb-2 text-dos-text-sm", af[n], i),
10311
+ }, Sf = ({ title: e, count: t, tone: n = "default", children: r, className: i }) => /* @__PURE__ */ x("h3", {
10312
+ className: $("eidotter-section-heading", "font-dos uppercase tracking-wider mb-2 text-dos-text-sm", xf[n], i),
9988
10313
  children: [
9989
10314
  e,
9990
10315
  t !== void 0 && ` (${t})`,
9991
10316
  r
9992
10317
  ]
9993
10318
  });
9994
- of.displayName = "SectionHeading";
10319
+ Sf.displayName = "SectionHeading";
9995
10320
  //#endregion
9996
10321
  //#region src/components/EmptyState/components/EmptyState.tsx
9997
- var sf = {
10322
+ var Cf = {
9998
10323
  default: "text-dos-text-primary",
9999
10324
  error: "text-dos-error",
10000
10325
  warning: "text-dos-warning",
10001
10326
  info: "text-dos-info"
10002
- }, cf = ({ title: e, description: t, tone: n = "default", action: r, className: i }) => /* @__PURE__ */ x("div", {
10327
+ }, wf = ({ title: e, description: t, tone: n = "default", action: r, className: i }) => /* @__PURE__ */ x("div", {
10003
10328
  className: $("eidotter-empty-state", "flex flex-col gap-2 py-6 text-center", i),
10004
10329
  role: "status",
10005
10330
  children: [
10006
10331
  /* @__PURE__ */ b("p", {
10007
- className: $("font-dos text-dos-text-sm", sf[n]),
10332
+ className: $("font-dos text-dos-text-sm", Cf[n]),
10008
10333
  children: e
10009
10334
  }),
10010
10335
  t && /* @__PURE__ */ b("p", {
@@ -10017,14 +10342,14 @@ var sf = {
10017
10342
  })
10018
10343
  ]
10019
10344
  });
10020
- cf.displayName = "EmptyState";
10345
+ wf.displayName = "EmptyState";
10021
10346
  //#endregion
10022
10347
  //#region src/components/ChecklistRow/components/ChecklistRow.tsx
10023
- var lf = {
10348
+ var Tf = {
10024
10349
  default: "text-dos-text-primary",
10025
10350
  muted: "text-dos-text-muted line-through",
10026
10351
  error: "text-dos-error"
10027
- }, uf = ({ checked: e, onToggle: t, disabled: n, pending: r, ariaLabel: i, labelTone: a = "default", label: o, children: s, note: c, leading: l, trailing: u, className: d }) => /* @__PURE__ */ x("div", {
10352
+ }, Ef = ({ checked: e, onToggle: t, disabled: n, pending: r, ariaLabel: i, labelTone: a = "default", label: o, children: s, note: c, leading: l, trailing: u, className: d }) => /* @__PURE__ */ x("div", {
10028
10353
  className: $("eidotter-checklist-row", "flex items-start gap-3 py-2 border-b border-dos-border-disabled", r && "opacity-50", d),
10029
10354
  children: [
10030
10355
  /* @__PURE__ */ b("button", {
@@ -10045,7 +10370,7 @@ var lf = {
10045
10370
  children: l
10046
10371
  }),
10047
10372
  o !== void 0 && /* @__PURE__ */ b("div", {
10048
- className: $("font-dos text-dos-text-sm", lf[a]),
10373
+ className: $("font-dos text-dos-text-sm", Tf[a]),
10049
10374
  children: o
10050
10375
  }),
10051
10376
  s,
@@ -10061,10 +10386,10 @@ var lf = {
10061
10386
  })
10062
10387
  ]
10063
10388
  });
10064
- uf.displayName = "ChecklistRow";
10389
+ Ef.displayName = "ChecklistRow";
10065
10390
  //#endregion
10066
10391
  //#region src/components/CopyButton/components/CopyButton.tsx
10067
- var df = ({ value: e, label: t = "[cp]", copiedLabel: n = "[OK]", title: r = "Copy to clipboard", copiedTitle: i = "Copied!", className: o }) => {
10392
+ var Df = ({ value: e, label: t = "[cp]", copiedLabel: n = "[OK]", title: r = "Copy to clipboard", copiedTitle: i = "Copied!", className: o }) => {
10068
10393
  let [s, c] = p(!1), l = f(null), u = a(() => {
10069
10394
  c(!0), l.current && clearTimeout(l.current), l.current = setTimeout(() => c(!1), 1500);
10070
10395
  }, []), d = a(() => {
@@ -10094,10 +10419,10 @@ var df = ({ value: e, label: t = "[cp]", copiedLabel: n = "[OK]", title: r = "Co
10094
10419
  children: s ? n : t
10095
10420
  });
10096
10421
  };
10097
- df.displayName = "CopyButton";
10422
+ Df.displayName = "CopyButton";
10098
10423
  //#endregion
10099
10424
  //#region src/components/Select/components/Select.tsx
10100
- var ff = ({ value: e, options: t, onChange: n, id: r, disabled: i, className: a, "aria-label": o }) => /* @__PURE__ */ b("select", {
10425
+ var Of = ({ value: e, options: t, onChange: n, id: r, disabled: i, className: a, "aria-label": o }) => /* @__PURE__ */ b("select", {
10101
10426
  id: r,
10102
10427
  "aria-label": o,
10103
10428
  value: e,
@@ -10110,10 +10435,10 @@ var ff = ({ value: e, options: t, onChange: n, id: r, disabled: i, className: a,
10110
10435
  children: e.label
10111
10436
  }, e.value))
10112
10437
  });
10113
- ff.displayName = "Select";
10438
+ Of.displayName = "Select";
10114
10439
  //#endregion
10115
10440
  //#region src/components/LedgerRow/components/LedgerRow.tsx
10116
- var pf = ({ label: e, note: t, value: n, copyValue: r, trailing: i, pending: a, className: o }) => /* @__PURE__ */ x("div", {
10441
+ var kf = ({ label: e, note: t, value: n, copyValue: r, trailing: i, pending: a, className: o }) => /* @__PURE__ */ x("div", {
10117
10442
  className: $("eidotter-ledger-row", "flex items-center gap-3 py-2 border-b border-dos-border-disabled", a && "opacity-50", o),
10118
10443
  children: [/* @__PURE__ */ x("div", {
10119
10444
  className: "flex-1 min-w-0",
@@ -10131,15 +10456,15 @@ var pf = ({ label: e, note: t, value: n, copyValue: r, trailing: i, pending: a,
10131
10456
  className: "font-dos text-dos-text-sm text-dos-text-accent tabular-nums",
10132
10457
  children: n
10133
10458
  }),
10134
- r !== void 0 && /* @__PURE__ */ b(df, { value: r }),
10459
+ r !== void 0 && /* @__PURE__ */ b(Df, { value: r }),
10135
10460
  i
10136
10461
  ]
10137
10462
  })]
10138
10463
  });
10139
- pf.displayName = "LedgerRow";
10464
+ kf.displayName = "LedgerRow";
10140
10465
  //#endregion
10141
10466
  //#region src/components/LabeledProgress/components/LabeledProgress.tsx
10142
- var mf = ({ label: e, value: t, max: n = 100, valueSuffix: r = "%", showValue: i = !0, className: a, "aria-label": o }) => {
10467
+ var Af = ({ label: e, value: t, max: n = 100, valueSuffix: r = "%", showValue: i = !0, className: a, "aria-label": o }) => {
10143
10468
  let s = n === 0 ? 0 : Math.min(100, Math.max(0, Math.round(t / n * 100)));
10144
10469
  return /* @__PURE__ */ x("div", {
10145
10470
  className: $("eidotter-labeled-progress", "flex items-center gap-3", a),
@@ -10167,11 +10492,11 @@ var mf = ({ label: e, value: t, max: n = 100, valueSuffix: r = "%", showValue: i
10167
10492
  ]
10168
10493
  });
10169
10494
  };
10170
- mf.displayName = "LabeledProgress";
10495
+ Af.displayName = "LabeledProgress";
10171
10496
  //#endregion
10172
10497
  //#region src/components/TextScramble/components/TextScramble.tsx
10173
- var hf = r(({ children: e, speed: t, characters: n, delay: r, className: i, ...a }, o) => {
10174
- let { text: s, isScrambling: c } = Kd(e, {
10498
+ var jf = r(({ children: e, speed: t, characters: n, delay: r, className: i, ...a }, o) => {
10499
+ let { text: s, isScrambling: c } = cf(e, {
10175
10500
  speed: t,
10176
10501
  characters: n,
10177
10502
  delay: r
@@ -10183,16 +10508,16 @@ var hf = r(({ children: e, speed: t, characters: n, delay: r, className: i, ...a
10183
10508
  children: s
10184
10509
  });
10185
10510
  });
10186
- hf.displayName = "TextScramble";
10511
+ jf.displayName = "TextScramble";
10187
10512
  //#endregion
10188
10513
  //#region src/components/Nav/components/Nav.tsx
10189
- var gf = {
10514
+ var Mf = {
10190
10515
  retro: "eidotter-nav--retro",
10191
10516
  modern: "eidotter-nav--modern"
10192
- }, _f = ({ items: e, activeHref: t, variant: n = "retro", linkComponent: r, className: i }) => {
10517
+ }, Nf = ({ items: e, activeHref: t, variant: n = "retro", linkComponent: r, className: i }) => {
10193
10518
  let a = r || "a";
10194
10519
  return /* @__PURE__ */ b("nav", {
10195
- className: $("eidotter-nav eidotter-nav--desktop", gf[n], i),
10520
+ className: $("eidotter-nav eidotter-nav--desktop", Mf[n], i),
10196
10521
  "aria-label": "Main navigation",
10197
10522
  children: /* @__PURE__ */ b("ul", {
10198
10523
  className: "eidotter-nav__desktop-list",
@@ -10207,7 +10532,7 @@ var gf = {
10207
10532
  }, e.href))
10208
10533
  })
10209
10534
  });
10210
- }, vf = ({ items: e, activeHref: t, variant: n = "retro", linkComponent: r, className: i }) => {
10535
+ }, Pf = ({ items: e, activeHref: t, variant: n = "retro", linkComponent: r, className: i }) => {
10211
10536
  let [o, c] = p(!1), l = r || "a", u = f(null), d = f(null), m = f(null), h = f(!1), g = a(() => c((e) => !e), []), _ = a(() => c(!1), []);
10212
10537
  return s(() => {
10213
10538
  if (!o) return;
@@ -10218,7 +10543,7 @@ var gf = {
10218
10543
  }, [o, _]), s(() => {
10219
10544
  o ? d.current?.focus() : h.current && u.current?.focus(), h.current = o;
10220
10545
  }, [o]), /* @__PURE__ */ x("div", {
10221
- className: $("eidotter-nav eidotter-nav--mobile", gf[n], i),
10546
+ className: $("eidotter-nav eidotter-nav--mobile", Mf[n], i),
10222
10547
  children: [
10223
10548
  /* @__PURE__ */ b("button", {
10224
10549
  ref: u,
@@ -10275,14 +10600,14 @@ var gf = {
10275
10600
  })
10276
10601
  ]
10277
10602
  });
10278
- }, yf = (e) => /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b(vf, { ...e }), /* @__PURE__ */ b(_f, { ...e })] }), bf = {
10603
+ }, Ff = (e) => /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b(Pf, { ...e }), /* @__PURE__ */ b(Nf, { ...e })] }), If = {
10279
10604
  user: "eidotter-chat-message--user",
10280
10605
  assistant: "eidotter-chat-message--assistant",
10281
10606
  system: "eidotter-chat-message--system"
10282
- }, xf = ({ role: e, content: t, isStreaming: n = !1, userPrefix: r = ">", assistantPrefix: i = "C:\\>", className: a, ...o }) => {
10607
+ }, Lf = ({ role: e, content: t, isStreaming: n = !1, userPrefix: r = ">", assistantPrefix: i = "C:\\>", className: a, ...o }) => {
10283
10608
  let s = e === "user" ? r : e === "assistant" ? i : "";
10284
10609
  return /* @__PURE__ */ x("div", {
10285
- className: $("flex gap-2 font-dos text-dos-text-md leading-[1.4] py-1 whitespace-pre-wrap break-words", bf[e], n && "eidotter-chat-message--streaming", a),
10610
+ className: $("flex gap-2 font-dos text-dos-text-md leading-[1.4] py-1 whitespace-pre-wrap break-words", If[e], n && "eidotter-chat-message--streaming", a),
10286
10611
  ...o,
10287
10612
  children: [
10288
10613
  s && /* @__PURE__ */ b("span", {
@@ -10301,7 +10626,7 @@ var gf = {
10301
10626
  })
10302
10627
  ]
10303
10628
  });
10304
- }, Sf = ({ messages: e, isStreaming: t = !1, userPrefix: n, assistantPrefix: r, className: i, ...a }) => {
10629
+ }, Rf = ({ messages: e, isStreaming: t = !1, userPrefix: n, assistantPrefix: r, className: i, ...a }) => {
10305
10630
  let o = f(null);
10306
10631
  s(() => {
10307
10632
  o.current?.scrollIntoView?.({ behavior: "smooth" });
@@ -10330,7 +10655,7 @@ var gf = {
10330
10655
  className: "flex flex-col",
10331
10656
  children: [e.map((i, a) => {
10332
10657
  let o = t && i.role === "assistant" && a === e.length - 1;
10333
- return /* @__PURE__ */ b(xf, {
10658
+ return /* @__PURE__ */ b(Lf, {
10334
10659
  role: i.role,
10335
10660
  content: i.content,
10336
10661
  isStreaming: o,
@@ -10340,7 +10665,7 @@ var gf = {
10340
10665
  }), /* @__PURE__ */ b("div", { ref: o })]
10341
10666
  })
10342
10667
  });
10343
- }, Cf = ({ onSend: e, prompt: t = ">", placeholder: n, disabled: r = !1, className: i, ...a }) => {
10668
+ }, zf = ({ onSend: e, prompt: t = ">", placeholder: n, disabled: r = !1, className: i, ...a }) => {
10344
10669
  let [o, s] = p(""), c = f(null);
10345
10670
  l(() => {
10346
10671
  let e = c.current;
@@ -10382,30 +10707,30 @@ var gf = {
10382
10707
  })]
10383
10708
  })]
10384
10709
  });
10385
- }, wf = ({ messages: e, onSend: t, isStreaming: n = !1, inputPrompt: r, userPrefix: i, assistantPrefix: a, placeholder: o, disabled: s = !1, className: c, ...l }) => /* @__PURE__ */ x("div", {
10710
+ }, Bf = ({ messages: e, onSend: t, isStreaming: n = !1, inputPrompt: r, userPrefix: i, assistantPrefix: a, placeholder: o, disabled: s = !1, className: c, ...l }) => /* @__PURE__ */ x("div", {
10386
10711
  className: $("flex flex-col h-full min-h-0", c),
10387
10712
  ...l,
10388
- children: [/* @__PURE__ */ b(Sf, {
10713
+ children: [/* @__PURE__ */ b(Rf, {
10389
10714
  className: "flex-1 min-h-0",
10390
10715
  messages: e,
10391
10716
  isStreaming: n,
10392
10717
  userPrefix: i,
10393
10718
  assistantPrefix: a
10394
- }), /* @__PURE__ */ b(Cf, {
10719
+ }), /* @__PURE__ */ b(zf, {
10395
10720
  className: "shrink-0",
10396
10721
  onSend: t,
10397
10722
  prompt: r,
10398
10723
  placeholder: o,
10399
10724
  disabled: s
10400
10725
  })]
10401
- }), Tf = [{
10726
+ }), Vf = [{
10402
10727
  label: "Impressum",
10403
10728
  href: "/impressum"
10404
10729
  }, {
10405
10730
  label: "Datenschutz",
10406
10731
  href: "/datenschutz"
10407
- }], Ef = ({ copyright: t, links: n, linkComponent: r, children: i, className: a, ...o }) => {
10408
- let s = n ?? Tf, c = r ?? "a", l = "eidotter-footer__link text-dos-text-brand no-underline";
10732
+ }], Hf = ({ copyright: t, links: n, linkComponent: r, children: i, className: a, ...o }) => {
10733
+ let s = n ?? Vf, c = r ?? "a", l = "eidotter-footer__link text-dos-text-brand no-underline";
10409
10734
  return /* @__PURE__ */ x("footer", {
10410
10735
  className: $("font-dos text-sm py-4 px-2 text-center", "eidotter-footer", a),
10411
10736
  ...o,
@@ -10443,14 +10768,14 @@ var gf = {
10443
10768
  })
10444
10769
  ]
10445
10770
  });
10446
- }, Df = {
10771
+ }, Uf = {
10447
10772
  retro: "eidotter-header--retro",
10448
10773
  modern: "eidotter-header--modern"
10449
- }, Of = r(({ brandName: e, brandHref: t = "/", items: n, activeHref: r, variant: i = "retro", sticky: a = !0, linkComponent: o, children: s, className: c, ...l }, u) => {
10774
+ }, Wf = r(({ brandName: e, brandHref: t = "/", items: n, activeHref: r, variant: i = "retro", sticky: a = !0, linkComponent: o, children: s, className: c, ...l }, u) => {
10450
10775
  let d = o ?? "a";
10451
10776
  return /* @__PURE__ */ x("header", {
10452
10777
  ref: u,
10453
- className: $("flex items-center justify-between px-4 py-3 font-dos", "eidotter-header", Df[i], a && "sticky top-0 z-50 bg-dos-bg-primary", c),
10778
+ className: $("flex items-center justify-between px-4 py-3 font-dos", "eidotter-header", Uf[i], a && "sticky top-0 z-50 bg-dos-bg-primary", c),
10454
10779
  ...l,
10455
10780
  children: [
10456
10781
  /* @__PURE__ */ b(d, {
@@ -10458,13 +10783,13 @@ var gf = {
10458
10783
  className: $("no-underline text-base font-bold tracking-wide", "eidotter-header__branding"),
10459
10784
  children: s || e
10460
10785
  }),
10461
- /* @__PURE__ */ b(_f, {
10786
+ /* @__PURE__ */ b(Nf, {
10462
10787
  items: n,
10463
10788
  activeHref: r,
10464
10789
  variant: i,
10465
10790
  linkComponent: o
10466
10791
  }),
10467
- /* @__PURE__ */ b(vf, {
10792
+ /* @__PURE__ */ b(Pf, {
10468
10793
  items: n,
10469
10794
  activeHref: r,
10470
10795
  variant: i,
@@ -10473,16 +10798,16 @@ var gf = {
10473
10798
  ]
10474
10799
  });
10475
10800
  });
10476
- Of.displayName = "Header";
10801
+ Wf.displayName = "Header";
10477
10802
  //#endregion
10478
10803
  //#region src/components/Notification/components/Notification.tsx
10479
- var kf = {
10804
+ var Gf = {
10480
10805
  primary: "Info",
10481
10806
  gray: "Info",
10482
10807
  success: "Done",
10483
10808
  warning: "Warning",
10484
10809
  error: "Error"
10485
- }, Af = ({ type: e = "primary", title: t, children: n, actions: r, onClose: i, avatar: a, image: o, progress: c, progressLabel: l, duration: u, showIcon: d = !0, className: f }) => {
10810
+ }, Kf = ({ type: e = "primary", title: t, children: n, actions: r, onClose: i, avatar: a, image: o, progress: c, progressLabel: l, duration: u, showIcon: d = !0, className: f }) => {
10486
10811
  let { isClosing: p, triggerClose: m, handleAnimationEnd: h } = $l("notification-exit", i);
10487
10812
  s(() => {
10488
10813
  if (u == null || !i) return;
@@ -10512,7 +10837,7 @@ var kf = {
10512
10837
  g && /* @__PURE__ */ b("div", {
10513
10838
  className: "eidotter-notification__icon",
10514
10839
  children: /* @__PURE__ */ b(Zl, {
10515
- name: kf[e] || "Info",
10840
+ name: Gf[e] || "Info",
10516
10841
  size: "S",
10517
10842
  "aria-label": `${e} notification`
10518
10843
  })
@@ -10568,7 +10893,7 @@ var kf = {
10568
10893
  };
10569
10894
  //#endregion
10570
10895
  //#region src/components/InlineLink/components/InlineLink.tsx
10571
- function jf(e) {
10896
+ function qf(e) {
10572
10897
  let t = e.trim();
10573
10898
  if (t === "" || /^[#?/]/.test(t)) return t;
10574
10899
  let n = /^([a-z][a-z0-9+\-.]*):/i.exec(t);
@@ -10583,14 +10908,14 @@ function jf(e) {
10583
10908
  "sms"
10584
10909
  ].includes(r) ? t : "#";
10585
10910
  }
10586
- function Mf(e, t) {
10911
+ function Jf(e, t) {
10587
10912
  if (t.length === 0) return e;
10588
10913
  let n = new Set((e ?? "").split(/\s+/).map((e) => e.trim().toLowerCase()).filter(Boolean));
10589
10914
  for (let e of t) n.add(e.toLowerCase());
10590
10915
  return Array.from(n).join(" ");
10591
10916
  }
10592
- var Nf = r(({ children: e, href: t, showGlyph: n = !0, external: r = !1, className: i, target: a, rel: o, ...s }, c) => {
10593
- let l = jf(t), u = a ?? (r ? "_blank" : void 0), d = u === "_blank", f = d ? Mf(o, ["noopener", "noreferrer"]) : o, p = r && d ? "↗" : "▸";
10917
+ var Yf = r(({ children: e, href: t, showGlyph: n = !0, external: r = !1, className: i, target: a, rel: o, ...s }, c) => {
10918
+ let l = qf(t), u = a ?? (r ? "_blank" : void 0), d = u === "_blank", f = d ? Jf(o, ["noopener", "noreferrer"]) : o, p = r && d ? "↗" : "▸";
10594
10919
  return /* @__PURE__ */ x("a", {
10595
10920
  ref: c,
10596
10921
  href: l,
@@ -10608,10 +10933,10 @@ var Nf = r(({ children: e, href: t, showGlyph: n = !0, external: r = !1, classNa
10608
10933
  })]
10609
10934
  });
10610
10935
  });
10611
- Nf.displayName = "InlineLink";
10936
+ Yf.displayName = "InlineLink";
10612
10937
  //#endregion
10613
10938
  //#region src/components/DosFigure/components/DosFigure.tsx
10614
- var Pf = r(({ title: e, resolution: t, subject: n, caption: r, pins: i = [], animated: a = !0, "aria-label": o, className: s }, l) => {
10939
+ var Xf = r(({ title: e, resolution: t, subject: n, caption: r, pins: i = [], animated: a = !0, "aria-label": o, className: s }, l) => {
10615
10940
  let u = c(), d = r ? u : void 0;
10616
10941
  return /* @__PURE__ */ x("figure", {
10617
10942
  ref: l,
@@ -10672,11 +10997,11 @@ var Pf = r(({ title: e, resolution: t, subject: n, caption: r, pins: i = [], ani
10672
10997
  ]
10673
10998
  });
10674
10999
  });
10675
- Pf.displayName = "DosFigure";
11000
+ Xf.displayName = "DosFigure";
10676
11001
  //#endregion
10677
11002
  //#region src/components/CmdPalette/components/CmdPalette.tsx
10678
- var Ff = /* @__PURE__ */ b(y, { children: "↑/↓ NAVIGATE · ↵ OPEN · ESC CLOSE" });
10679
- function If(e) {
11003
+ var Zf = /* @__PURE__ */ b(y, { children: "↑/↓ NAVIGATE · ↵ OPEN · ESC CLOSE" });
11004
+ function Qf(e) {
10680
11005
  let t = e.toLowerCase().split("+").map((e) => e.trim()), n = t[t.length - 1], r = t.includes("mod"), i = t.includes("shift"), a = t.includes("alt");
10681
11006
  return (e) => {
10682
11007
  if (e.key.toLowerCase() !== n) return !1;
@@ -10684,15 +11009,15 @@ function If(e) {
10684
11009
  return !(!(r ? t ? e.metaKey : e.ctrlKey : !(e.metaKey || e.ctrlKey)) || i !== e.shiftKey || a !== e.altKey);
10685
11010
  };
10686
11011
  }
10687
- function Lf(e, t) {
11012
+ function $f(e, t) {
10688
11013
  if (!t) return 0;
10689
11014
  let n = t.toLowerCase(), r = e.label.toLowerCase(), i = (e.keywords || []).map((e) => e.toLowerCase());
10690
11015
  return r.startsWith(n) ? 100 : i.some((e) => e.startsWith(n)) ? 80 : r.includes(n) ? 50 : i.some((e) => e.includes(n)) ? 30 : (e.type || "").toLowerCase().includes(n) ? 10 : -1;
10691
11016
  }
10692
- var Rf = r(({ open: e, onOpenChange: t, items: n, placeholder: r = "SEARCH · TYPE · ▸", hotkey: i = "mod+k", emptyMessage: o = "NO MATCHES", footerHint: l = Ff, renderItem: d, maxResults: m = 20, className: h, "aria-label": g = "Command palette" }, _) => {
11017
+ var ep = r(({ open: e, onOpenChange: t, items: n, placeholder: r = "SEARCH · TYPE · ▸", hotkey: i = "mod+k", emptyMessage: o = "NO MATCHES", footerHint: l = Zf, renderItem: d, maxResults: m = 20, className: h, "aria-label": g = "Command palette" }, _) => {
10693
11018
  let v = c(), S = `${v}-listbox`, [C, w] = p(""), [T, E] = p(0), D = f(null), O = f(null), k = f(!1), A = u(() => C.trim() ? n.map((e) => ({
10694
11019
  item: e,
10695
- score: Lf(e, C.trim())
11020
+ score: $f(e, C.trim())
10696
11021
  })).filter((e) => e.score >= 0).sort((e, t) => t.score - e.score).slice(0, m).map((e) => e.item) : n.slice(0, m), [
10697
11022
  n,
10698
11023
  C,
@@ -10717,7 +11042,7 @@ var Rf = r(({ open: e, onOpenChange: t, items: n, placeholder: r = "SEARCH · TY
10717
11042
  M.current = t;
10718
11043
  }, [t]), s(() => {
10719
11044
  if (i === !1) return;
10720
- let e = If(i), t = (t) => {
11045
+ let e = Qf(i), t = (t) => {
10721
11046
  e(t) && (t.preventDefault(), M.current(!j.current));
10722
11047
  };
10723
11048
  return window.addEventListener("keydown", t), () => window.removeEventListener("keydown", t);
@@ -10826,10 +11151,10 @@ var Rf = r(({ open: e, onOpenChange: t, items: n, placeholder: r = "SEARCH · TY
10826
11151
  })
10827
11152
  });
10828
11153
  });
10829
- Rf.displayName = "CmdPalette";
11154
+ ep.displayName = "CmdPalette";
10830
11155
  //#endregion
10831
11156
  //#region src/components/Brand/components/Logo.tsx
10832
- var zf = r(({ size: e = 32, glow: t = !0, title: n = "eiDotter", className: r, ...i }, a) => {
11157
+ var tp = r(({ size: e = 32, glow: t = !0, title: n = "eiDotter", className: r, ...i }, a) => {
10833
11158
  let o = c(), s = `eidotter-logo-halo-${o}`, l = `eidotter-logo-core-${o}`;
10834
11159
  return /* @__PURE__ */ x("svg", {
10835
11160
  ref: a,
@@ -11053,10 +11378,10 @@ var zf = r(({ size: e = 32, glow: t = !0, title: n = "eiDotter", className: r, .
11053
11378
  ]
11054
11379
  });
11055
11380
  });
11056
- zf.displayName = "Logo";
11381
+ tp.displayName = "Logo";
11057
11382
  //#endregion
11058
11383
  //#region src/components/Brand/components/Wordmark.tsx
11059
- var Bf = r(({ glow: e = !0, className: t, ...n }, r) => /* @__PURE__ */ x("span", {
11384
+ var np = r(({ glow: e = !0, className: t, ...n }, r) => /* @__PURE__ */ x("span", {
11060
11385
  ref: r,
11061
11386
  className: $("eidotter-wordmark font-dos", e && "eidotter-wordmark--glow", t),
11062
11387
  "aria-label": "eiDotter",
@@ -11071,28 +11396,28 @@ var Bf = r(({ glow: e = !0, className: t, ...n }, r) => /* @__PURE__ */ x("span"
11071
11396
  children: "Dotter"
11072
11397
  })]
11073
11398
  }));
11074
- Bf.displayName = "Wordmark";
11399
+ np.displayName = "Wordmark";
11075
11400
  //#endregion
11076
11401
  //#region src/components/Brand/components/BrandLockup.tsx
11077
- var Vf = r(({ logoSize: e = 32, iconOnly: t = !1, wordmarkOnly: n = !1, glow: r = !0, className: i, ...a }, o) => /* @__PURE__ */ x("div", {
11402
+ var rp = r(({ logoSize: e = 32, iconOnly: t = !1, wordmarkOnly: n = !1, glow: r = !0, className: i, ...a }, o) => /* @__PURE__ */ x("div", {
11078
11403
  ref: o,
11079
11404
  className: $("eidotter-brand-lockup inline-flex items-center gap-3", i),
11080
11405
  role: "img",
11081
11406
  "aria-label": "eiDotter",
11082
11407
  ...a,
11083
- children: [!n && /* @__PURE__ */ b(zf, {
11408
+ children: [!n && /* @__PURE__ */ b(tp, {
11084
11409
  size: e,
11085
11410
  glow: r,
11086
11411
  title: ""
11087
- }), !t && /* @__PURE__ */ b(Bf, {
11412
+ }), !t && /* @__PURE__ */ b(np, {
11088
11413
  glow: r,
11089
11414
  "aria-hidden": "true"
11090
11415
  })]
11091
11416
  }));
11092
- Vf.displayName = "BrandLockup";
11417
+ rp.displayName = "BrandLockup";
11093
11418
  //#endregion
11094
11419
  //#region src/components/AIText/components/AIText.tsx
11095
- var Hf = ({ children: e, className: t, title: n = "AI-assisted text — being rewritten" }) => /* @__PURE__ */ x("span", {
11420
+ var ip = ({ children: e, className: t, title: n = "AI-assisted text — being rewritten" }) => /* @__PURE__ */ x("span", {
11096
11421
  "data-provenance": "ai-draft",
11097
11422
  className: $("eidotter-ai-text", t),
11098
11423
  title: n,
@@ -11101,43 +11426,43 @@ var Hf = ({ children: e, className: t, title: n = "AI-assisted text — being re
11101
11426
  children: "AI-assisted: "
11102
11427
  }), e]
11103
11428
  });
11104
- Hf.displayName = "AIText";
11429
+ ip.displayName = "AIText";
11105
11430
  //#endregion
11106
11431
  //#region src/components/Skeleton/components/Skeleton.tsx
11107
- var Uf = "░░░░▒░░░░░░░▒░░░▒▒░░░░░░▒░░░░░░░▒░░░░▒░░", Wf = "▒▒▓▒▒▒▒▓▒▒▒▒▒▓▒▒▒▒▒▒▓▒▒▒▒▓▒▒▒▒▒▓▒▒▒▒▒▓▒", Gf = 6, Kf = {
11432
+ var ap = "░░░░▒░░░░░░░▒░░░▒▒░░░░░░▒░░░░░░░▒░░░░▒░░", op = "▒▒▓▒▒▒▒▓▒▒▒▒▒▓▒▒▒▒▒▒▓▒▒▒▒▓▒▒▒▒▒▓▒▒▒▒▒▓▒", sp = 6, cp = {
11108
11433
  text: 3,
11109
11434
  card: 3,
11110
11435
  figure: 4,
11111
11436
  timeline: 2
11112
- }, qf = ({ dense: e = !1, width: t = "full" }) => /* @__PURE__ */ b("span", {
11437
+ }, lp = ({ dense: e = !1, width: t = "full" }) => /* @__PURE__ */ b("span", {
11113
11438
  className: $("eidotter-skeleton__line", t === "short" && "eidotter-skeleton__line--short", t === "meta" && "eidotter-skeleton__line--meta"),
11114
- children: (e ? Wf : Uf).repeat(Gf)
11439
+ children: (e ? op : ap).repeat(sp)
11115
11440
  });
11116
- function Jf(e, t = !1, n = !0) {
11117
- return Array.from({ length: e }, (r, i) => /* @__PURE__ */ b(qf, {
11441
+ function up(e, t = !1, n = !0) {
11442
+ return Array.from({ length: e }, (r, i) => /* @__PURE__ */ b(lp, {
11118
11443
  dense: t,
11119
11444
  width: n && i === e - 1 && e > 1 ? "short" : "full"
11120
11445
  }, i));
11121
11446
  }
11122
- var Yf = ({ variant: e = "text", lines: t, animated: n = !0, label: r = "Loading", className: i }) => {
11123
- let a = Math.max(1, t ?? Kf[e]), o;
11447
+ var dp = ({ variant: e = "text", lines: t, animated: n = !0, label: r = "Loading", className: i }) => {
11448
+ let a = Math.max(1, t ?? cp[e]), o;
11124
11449
  switch (e) {
11125
11450
  case "card":
11126
- o = /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b(qf, {
11451
+ o = /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b(lp, {
11127
11452
  dense: !0,
11128
11453
  width: "meta"
11129
- }), Jf(a)] });
11454
+ }), up(a)] });
11130
11455
  break;
11131
11456
  case "figure":
11132
- o = Jf(a, !0, !1);
11457
+ o = up(a, !0, !1);
11133
11458
  break;
11134
11459
  case "timeline":
11135
11460
  o = /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b("span", { className: "eidotter-skeleton__marker border-2 border-dos-border-default" }), /* @__PURE__ */ x("span", {
11136
11461
  className: "eidotter-skeleton__entry",
11137
- children: [/* @__PURE__ */ b(qf, { width: "meta" }), Jf(a)]
11462
+ children: [/* @__PURE__ */ b(lp, { width: "meta" }), up(a)]
11138
11463
  })] });
11139
11464
  break;
11140
- default: o = Jf(a);
11465
+ default: o = up(a);
11141
11466
  }
11142
11467
  return /* @__PURE__ */ b("div", {
11143
11468
  role: "status",
@@ -11150,10 +11475,10 @@ var Yf = ({ variant: e = "text", lines: t, animated: n = !0, label: r = "Loading
11150
11475
  })
11151
11476
  });
11152
11477
  };
11153
- Yf.displayName = "Skeleton";
11478
+ dp.displayName = "Skeleton";
11154
11479
  //#endregion
11155
11480
  //#region src/components/LegalPage/components/LegalPage.tsx
11156
- var Xf = ({ title: e, date: t, intro: n, home: r, children: i, className: a, ...o }) => /* @__PURE__ */ x("div", {
11481
+ var fp = ({ title: e, date: t, intro: n, home: r, children: i, className: a, ...o }) => /* @__PURE__ */ x("div", {
11157
11482
  className: $("eidotter-legal-page", a),
11158
11483
  ...o,
11159
11484
  children: [r && /* @__PURE__ */ b("div", {
@@ -11176,13 +11501,13 @@ var Xf = ({ title: e, date: t, intro: n, home: r, children: i, className: a, ...
11176
11501
  className: "eidotter-legal-page__body",
11177
11502
  children: i
11178
11503
  })] })]
11179
- }), Zf = /* @__PURE__ */ x(y, { children: [
11504
+ }), pp = /* @__PURE__ */ x(y, { children: [
11180
11505
  "Haus-Endt-Str. 149A",
11181
11506
  /* @__PURE__ */ b("br", {}),
11182
11507
  "40593 Düsseldorf",
11183
11508
  /* @__PURE__ */ b("br", {}),
11184
11509
  "Deutschland"
11185
- ] }), Qf = "Dominic Kennedy", $f = ({ email: e, address: t = Zf, name: n = Qf }) => /* @__PURE__ */ x("address", { children: [
11510
+ ] }), mp = "Dominic Kennedy", hp = ({ email: e, address: t = pp, name: n = mp }) => /* @__PURE__ */ x("address", { children: [
11186
11511
  n,
11187
11512
  /* @__PURE__ */ b("br", {}),
11188
11513
  t,
@@ -11194,16 +11519,16 @@ var Xf = ({ title: e, date: t, intro: n, home: r, children: i, className: a, ...
11194
11519
  children: e
11195
11520
  })
11196
11521
  ] })
11197
- ] }), ep = (e) => /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b("h2", { children: "Angaben gemäß § 5 DDG" }), /* @__PURE__ */ b($f, { ...e })] }), tp = ({ email: e }) => /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b("h2", { children: "Kontakt" }), /* @__PURE__ */ x("p", { children: ["E-Mail: ", /* @__PURE__ */ b("a", {
11522
+ ] }), gp = (e) => /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b("h2", { children: "Angaben gemäß § 5 DDG" }), /* @__PURE__ */ b(hp, { ...e })] }), _p = ({ email: e }) => /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b("h2", { children: "Kontakt" }), /* @__PURE__ */ x("p", { children: ["E-Mail: ", /* @__PURE__ */ b("a", {
11198
11523
  href: `mailto:${e}`,
11199
11524
  children: e
11200
- })] })] }), np = ({ name: e = Qf }) => /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b("h2", { children: "Inhaltlich verantwortlich (§ 18 Abs. 2 MStV)" }), /* @__PURE__ */ x("address", { children: [
11525
+ })] })] }), vp = ({ name: e = mp }) => /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b("h2", { children: "Inhaltlich verantwortlich (§ 18 Abs. 2 MStV)" }), /* @__PURE__ */ x("address", { children: [
11201
11526
  e,
11202
11527
  /* @__PURE__ */ b("br", {}),
11203
11528
  "Haus-Endt-Str. 149A",
11204
11529
  /* @__PURE__ */ b("br", {}),
11205
11530
  "40593 Düsseldorf"
11206
- ] })] }), rp = () => /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b("h2", { children: "Haftung für Inhalte" }), /* @__PURE__ */ b("p", { children: "Ich erstelle die Inhalte dieser Seiten mit größter Sorgfalt, übernehme jedoch keine Gewähr für Richtigkeit, Vollständigkeit oder Aktualität. Als Diensteanbieter bin ich gemäß § 7 Abs. 1 DDG für eigene Inhalte verantwortlich. Eine Pflicht zur Überwachung fremder Informationen besteht gemäß §§ 8–10 DDG nicht." })] }), ip = () => /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b("h2", { children: "Haftung für Links" }), /* @__PURE__ */ b("p", { children: "Diese Website verlinkt auf externe Seiten Dritter, auf deren Inhalte ich keinen Einfluss habe. Für verlinkte Inhalte haftet der jeweilige Anbieter. Eine dauerhafte Kontrolle ist ohne Anhaltspunkte für Rechtsverletzungen nicht zumutbar. Bei Bekanntwerden von Verstößen entferne ich solche Links umgehend." })] }), ap = ({ email: e, name: t = Qf }) => /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b("h2", { children: "Verantwortlicher" }), /* @__PURE__ */ x("address", { children: [
11531
+ ] })] }), yp = () => /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b("h2", { children: "Haftung für Inhalte" }), /* @__PURE__ */ b("p", { children: "Ich erstelle die Inhalte dieser Seiten mit größter Sorgfalt, übernehme jedoch keine Gewähr für Richtigkeit, Vollständigkeit oder Aktualität. Als Diensteanbieter bin ich gemäß § 7 Abs. 1 DDG für eigene Inhalte verantwortlich. Eine Pflicht zur Überwachung fremder Informationen besteht gemäß §§ 8–10 DDG nicht." })] }), bp = () => /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b("h2", { children: "Haftung für Links" }), /* @__PURE__ */ b("p", { children: "Diese Website verlinkt auf externe Seiten Dritter, auf deren Inhalte ich keinen Einfluss habe. Für verlinkte Inhalte haftet der jeweilige Anbieter. Eine dauerhafte Kontrolle ist ohne Anhaltspunkte für Rechtsverletzungen nicht zumutbar. Bei Bekanntwerden von Verstößen entferne ich solche Links umgehend." })] }), xp = ({ email: e, name: t = mp }) => /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b("h2", { children: "Verantwortlicher" }), /* @__PURE__ */ x("address", { children: [
11207
11532
  t,
11208
11533
  /* @__PURE__ */ b("br", {}),
11209
11534
  "Haus-Endt-Str. 149A",
@@ -11215,14 +11540,14 @@ var Xf = ({ title: e, date: t, intro: n, home: r, children: i, className: a, ...
11215
11540
  href: `mailto:${e}`,
11216
11541
  children: e
11217
11542
  })
11218
- ] })] }), op = () => /* @__PURE__ */ x(y, { children: [
11543
+ ] })] }), Sp = () => /* @__PURE__ */ x(y, { children: [
11219
11544
  /* @__PURE__ */ b("h2", { children: "Hosting" }),
11220
11545
  /* @__PURE__ */ b("p", { children: "Cloudflare Pages stellt diese Website bereit. Beim Seitenaufruf erhebt Cloudflare automatisch technische Zugriffsdaten (darunter Ihre IP-Adresse), um die Seite auszuliefern." }),
11221
11546
  /* @__PURE__ */ b("p", {
11222
11547
  className: "eidotter-legal-page__basis",
11223
11548
  children: "Anbieter: Cloudflare, Inc., 101 Townsend St, San Francisco, CA 94107, USA. Rechtsgrundlage: Art. 6 Abs. 1 lit. f DSGVO (berechtigtes Interesse)."
11224
11549
  })
11225
- ] }), sp = ({ proxyHost: e = "e.dmnc.tech" }) => /* @__PURE__ */ x(y, { children: [
11550
+ ] }), Cp = ({ proxyHost: e = "e.dmnc.tech" }) => /* @__PURE__ */ x(y, { children: [
11226
11551
  /* @__PURE__ */ b("h2", { children: "Webanalyse — PostHog" }),
11227
11552
  /* @__PURE__ */ x("p", { children: [
11228
11553
  "Diese Website nutzt PostHog zur Analyse des Nutzungsverhaltens. PostHog läuft auf EU-Servern (eu.posthog.com). Die Datenübertragung erfolgt über einen Reverse-Proxy auf der Domain ",
@@ -11239,7 +11564,7 @@ var Xf = ({ title: e, date: t, intro: n, home: r, children: i, className: a, ...
11239
11564
  className: "eidotter-legal-page__basis",
11240
11565
  children: "Rechtsgrundlage: Art. 6 Abs. 1 lit. f DSGVO (berechtigtes Interesse)."
11241
11566
  })
11242
- ] }), cp = () => /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b("h2", { children: "Schriftarten" }), /* @__PURE__ */ b("p", { children: "Die Schriftart „Perfect DOS VGA 437“ wird lokal von diesem Server ausgeliefert. Es findet keine Verbindung zu externen Schriftarten-Diensten statt." })] }), lp = () => /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b("h2", { children: "Verschlüsselung" }), /* @__PURE__ */ b("p", { children: "Diese Website nutzt SSL-/TLS-Verschlüsselung. Eine verschlüsselte Verbindung erkennen Sie am „https://“ in der Adresszeile Ihres Browsers." })] }), up = ({ email: e, supervisoryAuthority: t = "die Landesbeauftragte für Datenschutz und Informationsfreiheit Nordrhein-Westfalen" }) => /* @__PURE__ */ x(y, { children: [
11567
+ ] }), wp = () => /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b("h2", { children: "Schriftarten" }), /* @__PURE__ */ b("p", { children: "Die Schriftart „Perfect DOS VGA 437“ wird lokal von diesem Server ausgeliefert. Es findet keine Verbindung zu externen Schriftarten-Diensten statt." })] }), Tp = () => /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b("h2", { children: "Verschlüsselung" }), /* @__PURE__ */ b("p", { children: "Diese Website nutzt SSL-/TLS-Verschlüsselung. Eine verschlüsselte Verbindung erkennen Sie am „https://“ in der Adresszeile Ihres Browsers." })] }), Ep = ({ email: e, supervisoryAuthority: t = "die Landesbeauftragte für Datenschutz und Informationsfreiheit Nordrhein-Westfalen" }) => /* @__PURE__ */ x(y, { children: [
11243
11568
  /* @__PURE__ */ b("h2", { children: "Ihre Rechte" }),
11244
11569
  /* @__PURE__ */ b("p", { children: "Die DSGVO gewährt Ihnen folgende Rechte:" }),
11245
11570
  /* @__PURE__ */ x("ul", { children: [
@@ -11264,7 +11589,7 @@ var Xf = ({ title: e, date: t, intro: n, home: r, children: i, className: a, ...
11264
11589
  t,
11265
11590
  "."
11266
11591
  ] })
11267
- ] }), dp = {
11592
+ ] }), Dp = {
11268
11593
  eidotter: { displayName: "eiDotter" },
11269
11594
  spacewar: { displayName: "Spacewar!" },
11270
11595
  rizomorf: { displayName: "rizomorf" },
@@ -11277,8 +11602,12 @@ var Xf = ({ title: e, date: t, intro: n, home: r, children: i, className: a, ...
11277
11602
  dmnctech: {
11278
11603
  displayName: "dmnc.tech",
11279
11604
  url: "https://dmnc.tech"
11605
+ },
11606
+ tracker: {
11607
+ displayName: "Tracker",
11608
+ url: "https://tracker.dmnc.tech"
11280
11609
  }
11281
- }, fp = {
11610
+ }, Op = {
11282
11611
  Alert: {
11283
11612
  origin: "eidotter",
11284
11613
  consumers: ["rizomorf", "steuerdash"],
@@ -11350,11 +11679,70 @@ var Xf = ({ title: e, date: t, intro: n, home: r, children: i, className: a, ...
11350
11679
  },
11351
11680
  Accordion: {
11352
11681
  origin: "eidotter",
11353
- consumers: ["rizomorf"]
11682
+ consumers: ["rizomorf"],
11683
+ since: "0.2.0",
11684
+ originNote: "Collapsible section with CSS grid expand/collapse — always-in-DOM, transitions grid-template-rows",
11685
+ platforms: {
11686
+ react: {
11687
+ path: "src/components/Accordion",
11688
+ status: "canonical"
11689
+ },
11690
+ swiftui: { status: "planned" }
11691
+ },
11692
+ changelog: [
11693
+ {
11694
+ version: "0.30.0",
11695
+ type: "changed",
11696
+ description: "A11y keyboard focus fixes for accordion trigger"
11697
+ },
11698
+ {
11699
+ version: "0.19.0",
11700
+ type: "changed",
11701
+ description: "Remove 500px expand cap — animate grid-template-rows to natural height"
11702
+ },
11703
+ {
11704
+ version: "0.16.0",
11705
+ type: "changed",
11706
+ description: "Migrate to Tailwind-first (Wave 3 — Accordion, Footer, Tabs, FilterBar)"
11707
+ },
11708
+ {
11709
+ version: "0.9.0",
11710
+ type: "changed",
11711
+ description: "Replace text-primary with cga-amber for theme consistency"
11712
+ },
11713
+ {
11714
+ version: "0.8.0",
11715
+ type: "changed",
11716
+ description: "Design-craft animation polish with phosphor enter effects"
11717
+ },
11718
+ {
11719
+ version: "0.2.0",
11720
+ type: "added",
11721
+ description: "Initial Accordion (Section) — collapsible section, inert attribute, reduced-motion safe"
11722
+ }
11723
+ ]
11354
11724
  },
11355
11725
  AccordionFill: {
11356
11726
  origin: "eidotter",
11357
- consumers: ["rizomorf"]
11727
+ consumers: ["rizomorf"],
11728
+ since: "0.4.0",
11729
+ originNote: "Convenience wrapper around Section — renders a list of sections from a data array",
11730
+ platforms: {
11731
+ react: {
11732
+ path: "src/components/Accordion",
11733
+ status: "canonical"
11734
+ },
11735
+ swiftui: { status: "planned" }
11736
+ },
11737
+ changelog: [{
11738
+ version: "0.16.0",
11739
+ type: "changed",
11740
+ description: "Tailwind-first pass alongside Accordion migration"
11741
+ }, {
11742
+ version: "0.4.0",
11743
+ type: "added",
11744
+ description: "Initial AccordionFill — array-driven Section list"
11745
+ }]
11358
11746
  },
11359
11747
  Badge: {
11360
11748
  origin: "eidotter",
@@ -11431,7 +11819,33 @@ var Xf = ({ title: e, date: t, intro: n, home: r, children: i, className: a, ...
11431
11819
  },
11432
11820
  Breadcrumb: {
11433
11821
  origin: "rizomorf",
11434
- consumers: ["rizomorf"]
11822
+ consumers: ["rizomorf"],
11823
+ since: "0.3.0",
11824
+ originNote: "Trail navigation with configurable separator and optional back-arrow",
11825
+ platforms: {
11826
+ react: {
11827
+ path: "src/components/Breadcrumb",
11828
+ status: "canonical"
11829
+ },
11830
+ swiftui: { status: "planned" }
11831
+ },
11832
+ changelog: [
11833
+ {
11834
+ version: "0.16.0",
11835
+ type: "changed",
11836
+ description: "Migrate to Tailwind-first (Wave 2 — Separator, Stat, Breadcrumb, Progress)"
11837
+ },
11838
+ {
11839
+ version: "0.9.0",
11840
+ type: "changed",
11841
+ description: "Fix trail links invisible on dark backgrounds"
11842
+ },
11843
+ {
11844
+ version: "0.3.0",
11845
+ type: "added",
11846
+ description: "Initial Breadcrumb — trail array, currentLabel, separator, showBackArrow"
11847
+ }
11848
+ ]
11435
11849
  },
11436
11850
  Button: {
11437
11851
  origin: "eidotter",
@@ -11614,141 +12028,971 @@ var Xf = ({ title: e, date: t, intro: n, home: r, children: i, className: a, ...
11614
12028
  },
11615
12029
  Checkbox: {
11616
12030
  origin: "eidotter",
11617
- consumers: ["steuerdash"]
11618
- },
11619
- CommandPrompt: {
11620
- origin: "eidotter",
11621
- consumers: ["rizomorf"]
11622
- },
11623
- Icon: {
11624
- origin: "eidotter",
11625
- consumers: ["rizomorf"]
11626
- },
11627
- Input: {
11628
- origin: "eidotter",
11629
- consumers: ["steuerdash"]
11630
- },
11631
- Lightbox: {
11632
- origin: "eidotter",
11633
- consumers: ["dmnctech"],
11634
- since: "0.22.0",
11635
- originNote: "Fullscreen image viewer extending Modal pattern. Keyboard nav, prev/next, counter, swipe."
11636
- },
11637
- Modal: {
11638
- origin: "eidotter",
11639
- consumers: ["pomodoke-calendar"]
11640
- },
11641
- Progress: {
11642
- origin: "eidotter",
11643
- consumers: ["steuerdash"],
11644
- since: "0.3.0"
11645
- },
11646
- RetroEffects: {
11647
- origin: "spacewar",
11648
- consumers: ["spacewar", "rizomorf"],
11649
- originNote: "CRT scanline/glow effects from Spacewar!"
11650
- },
11651
- Skeleton: {
11652
- origin: "eidotter",
11653
- consumers: ["dmnctech"],
11654
- originNote: "DOS/CGA loading placeholder — shade-character rows (░▒▓) with CRT hum-bar band rolling top→bottom (DMNC-1018)"
11655
- },
11656
- Stat: {
11657
- origin: "steuerdash",
11658
12031
  consumers: ["steuerdash"],
11659
- originNote: "Key-value display created for tax dashboard"
11660
- },
11661
- Switch: {
11662
- origin: "eidotter",
11663
- consumers: []
11664
- },
11665
- FilterBar: {
11666
- origin: "eidotter",
11667
- consumers: ["lifelines", "rizomorf"],
11668
- originNote: "Multi-select toggle group for faceted filtering"
11669
- },
11670
- Tag: {
11671
- origin: "eidotter",
11672
- consumers: ["lifelines", "rizomorf"],
11673
- since: "0.7.0",
11674
- originNote: "Interactive labels for tags, categories, and filter chips",
12032
+ since: "0.3.0",
11675
12033
  variants: {
11676
- "variant:default": {
11677
- description: "Standard tag with subtle background",
11678
- since: "0.7.0",
11679
- usedBy: ["rizomorf"]
11680
- },
11681
- "variant:outlined": {
11682
- description: "Border-only tag",
11683
- since: "0.7.0",
11684
- usedBy: ["lifelines"]
11685
- },
11686
- "variant:filled": {
11687
- description: "Solid background tag",
11688
- since: "0.7.0",
11689
- usedBy: ["rizomorf", "lifelines"]
11690
- },
11691
- "size:small": {
11692
- description: "Compact tag for dense layouts",
11693
- since: "0.7.0"
12034
+ "size:sm": {
12035
+ description: "Compact 16px checkbox for dense forms",
12036
+ since: "0.16.0"
11694
12037
  },
11695
- "size:medium": {
11696
- description: "Standard tag size",
11697
- since: "0.7.0"
12038
+ "size:md": {
12039
+ description: "Standard 20px checkbox",
12040
+ since: "0.3.0",
12041
+ usedBy: ["steuerdash"]
11698
12042
  }
11699
12043
  },
11700
12044
  platforms: {
11701
12045
  react: {
11702
- path: "src/components/Tag",
12046
+ path: "src/components/Checkbox",
11703
12047
  status: "canonical"
11704
12048
  },
11705
12049
  swiftui: { status: "planned" }
11706
12050
  },
11707
12051
  changelog: [
11708
12052
  {
11709
- version: "0.11.0",
12053
+ version: "0.30.0",
11710
12054
  type: "changed",
11711
- description: "Convert font-size to rem tokens for WCAG SC 1.4.4"
12055
+ description: "A11y: remediate Phase 1 audit defects + high-contrast glow gaps"
11712
12056
  },
11713
12057
  {
11714
- version: "0.8.0",
12058
+ version: "0.19.0",
11715
12059
  type: "changed",
11716
- description: "Design-craft animation polish"
12060
+ description: "Replace hardcoded font-size pixels with V.37 dos tokens"
11717
12061
  },
11718
12062
  {
11719
- version: "0.7.0",
11720
- type: "added",
11721
- description: "Initial Tag and TagGroup components"
11722
- }
12063
+ version: "0.16.0",
12064
+ type: "changed",
12065
+ description: "Migrate to React Aria + Tailwind-first (Wave 1); add size:sm variant"
12066
+ },
12067
+ {
12068
+ version: "0.3.0",
12069
+ type: "added",
12070
+ description: "Initial Checkbox — controlled/uncontrolled, indeterminate; BEM CSS implementation"
12071
+ }
12072
+ ]
12073
+ },
12074
+ CommandPrompt: {
12075
+ origin: "eidotter",
12076
+ consumers: ["rizomorf"],
12077
+ since: "0.3.0",
12078
+ originNote: "DOS command-line input — blinking cursor, configurable prompt string, onCommand callback",
12079
+ platforms: { react: {
12080
+ path: "src/components/CommandPrompt",
12081
+ status: "canonical"
12082
+ } },
12083
+ changelog: [
12084
+ {
12085
+ version: "0.30.0",
12086
+ type: "changed",
12087
+ description: "A11y keyboard focus fixes"
12088
+ },
12089
+ {
12090
+ version: "0.18.0",
12091
+ type: "changed",
12092
+ description: "Migrate BEM to Tailwind-first; switch to Flexi IBM VGA font"
12093
+ },
12094
+ {
12095
+ version: "0.3.0",
12096
+ type: "added",
12097
+ description: "Initial CommandPrompt — prompt prop, onCommand, autoFocus, disabled"
12098
+ }
12099
+ ]
12100
+ },
12101
+ Icon: {
12102
+ origin: "eidotter",
12103
+ consumers: ["rizomorf"],
12104
+ since: "0.13.0",
12105
+ originNote: "Thin wrapper around pixelarticons (MIT) + custom PixelX for Close — 12 public names, ICON_MAP",
12106
+ variants: {
12107
+ "name:Info": {
12108
+ description: "Informational circle-i",
12109
+ since: "0.13.0",
12110
+ usedBy: ["rizomorf"]
12111
+ },
12112
+ "name:Warning": {
12113
+ description: "Warning triangle",
12114
+ since: "0.13.0",
12115
+ usedBy: ["rizomorf"]
12116
+ },
12117
+ "name:Error": {
12118
+ description: "Error octagon",
12119
+ since: "0.13.0"
12120
+ },
12121
+ "name:Done": {
12122
+ description: "Checkmark (shares Check glyph)",
12123
+ since: "0.13.0"
12124
+ },
12125
+ "name:Check": {
12126
+ description: "Checkmark",
12127
+ since: "0.13.0"
12128
+ },
12129
+ "name:Close": {
12130
+ description: "Custom pixel-art X mark (no pixelarticons glyph)",
12131
+ since: "0.19.0",
12132
+ usedBy: ["rizomorf"]
12133
+ },
12134
+ "name:Chevron Up": {
12135
+ description: "Up caret",
12136
+ since: "0.13.0"
12137
+ },
12138
+ "name:Chevron Down": {
12139
+ description: "Down caret",
12140
+ since: "0.13.0"
12141
+ },
12142
+ "name:App": {
12143
+ description: "Grid/app launcher",
12144
+ since: "0.13.0"
12145
+ },
12146
+ "name:Cancel": {
12147
+ description: "Minus glyph — window minimize control",
12148
+ since: "0.13.0"
12149
+ },
12150
+ "name:Fullscreen": {
12151
+ description: "Expand to fullscreen",
12152
+ since: "0.13.0"
12153
+ },
12154
+ "name:Add": {
12155
+ description: "Plus / add action",
12156
+ since: "0.13.0"
12157
+ },
12158
+ "size:L": {
12159
+ description: "Large — 56 × 56 px",
12160
+ since: "0.13.0",
12161
+ usedBy: ["rizomorf"]
12162
+ },
12163
+ "size:S": {
12164
+ description: "Small — 24 × 24 px",
12165
+ since: "0.13.0"
12166
+ }
12167
+ },
12168
+ platforms: { react: {
12169
+ path: "src/components/Icon",
12170
+ status: "canonical"
12171
+ } },
12172
+ changelog: [
12173
+ {
12174
+ version: "0.30.0",
12175
+ type: "changed",
12176
+ description: "A11y: fix aria-prohibited-attr on Icon (Phase 1 audit defect)"
12177
+ },
12178
+ {
12179
+ version: "0.30.0",
12180
+ type: "changed",
12181
+ description: "Icon inherits color from context instead of hardcoding amber"
12182
+ },
12183
+ {
12184
+ version: "0.19.0",
12185
+ type: "added",
12186
+ description: "Custom pixel-art X mark for Close (pixelarticons v2 has no standalone X glyph)"
12187
+ },
12188
+ {
12189
+ version: "0.18.0",
12190
+ type: "changed",
12191
+ description: "Swap @untitledui-pro/icons for pixelarticons (MIT) — license compliance"
12192
+ },
12193
+ {
12194
+ version: "0.13.0",
12195
+ type: "added",
12196
+ description: "Initial Icon component — ICON_MAP with 12 public names, size L/S"
12197
+ }
12198
+ ]
12199
+ },
12200
+ Input: {
12201
+ origin: "eidotter",
12202
+ consumers: ["steuerdash"],
12203
+ since: "0.3.0",
12204
+ variants: {
12205
+ "variant:default": {
12206
+ description: "Standard text input with amber focus border",
12207
+ since: "0.3.0",
12208
+ usedBy: ["steuerdash"]
12209
+ },
12210
+ "variant:error": {
12211
+ description: "Error state — red border, errorMessage slot",
12212
+ since: "0.3.0",
12213
+ usedBy: ["steuerdash"]
12214
+ }
12215
+ },
12216
+ platforms: {
12217
+ react: {
12218
+ path: "src/components/Input",
12219
+ status: "canonical"
12220
+ },
12221
+ swiftui: { status: "planned" }
12222
+ },
12223
+ changelog: [
12224
+ {
12225
+ version: "0.17.0",
12226
+ type: "changed",
12227
+ description: "Migrate to React Aria TextField (Wave 5)"
12228
+ },
12229
+ {
12230
+ version: "0.16.0",
12231
+ type: "changed",
12232
+ description: "Migrate to Tailwind-first (Wave 4 — Input, Modal, Nav)"
12233
+ },
12234
+ {
12235
+ version: "0.9.0",
12236
+ type: "changed",
12237
+ description: "Replace text-primary with cga-amber"
12238
+ },
12239
+ {
12240
+ version: "0.3.0",
12241
+ type: "added",
12242
+ description: "Initial Input — label, description, errorMessage, isRequired"
12243
+ }
12244
+ ]
12245
+ },
12246
+ Lightbox: {
12247
+ origin: "eidotter",
12248
+ consumers: ["dmnctech"],
12249
+ since: "0.22.0",
12250
+ originNote: "Fullscreen image viewer extending Modal pattern. Keyboard nav, prev/next, counter, swipe."
12251
+ },
12252
+ Modal: {
12253
+ origin: "eidotter",
12254
+ consumers: ["pomodoke-calendar"],
12255
+ since: "0.3.0",
12256
+ originNote: "DOS-styled dialog built on React Aria ModalOverlay/Modal/Dialog — focus trap, Esc to close, backdrop",
12257
+ platforms: {
12258
+ react: {
12259
+ path: "src/components/Modal",
12260
+ status: "canonical"
12261
+ },
12262
+ swiftui: { status: "planned" }
12263
+ },
12264
+ changelog: [
12265
+ {
12266
+ version: "0.18.0",
12267
+ type: "changed",
12268
+ description: "Normalize event handlers; replace raw <button> with AriaButton for close control"
12269
+ },
12270
+ {
12271
+ version: "0.17.0",
12272
+ type: "changed",
12273
+ description: "Migrate to React Aria ModalOverlay/Modal/Dialog (Wave 5)"
12274
+ },
12275
+ {
12276
+ version: "0.16.0",
12277
+ type: "changed",
12278
+ description: "Migrate to Tailwind-first (Wave 4 — Input, Modal, Nav)"
12279
+ },
12280
+ {
12281
+ version: "0.3.0",
12282
+ type: "added",
12283
+ description: "Initial Modal — isOpen, onOpenChange, title, footer slot"
12284
+ }
12285
+ ]
12286
+ },
12287
+ Progress: {
12288
+ origin: "eidotter",
12289
+ consumers: ["steuerdash"],
12290
+ since: "0.3.0",
12291
+ variants: {
12292
+ "variant:default": {
12293
+ description: "Amber progress bar",
12294
+ since: "0.3.0",
12295
+ usedBy: ["steuerdash"]
12296
+ },
12297
+ "variant:success": {
12298
+ description: "Green completion indicator",
12299
+ since: "0.3.0"
12300
+ },
12301
+ "variant:warning": {
12302
+ description: "Amber warning progress",
12303
+ since: "0.3.0"
12304
+ },
12305
+ "variant:error": {
12306
+ description: "Red error/failed progress",
12307
+ since: "0.3.0"
12308
+ },
12309
+ "size:sm": {
12310
+ description: "Compact single-row bar",
12311
+ since: "0.16.0"
12312
+ },
12313
+ "size:md": {
12314
+ description: "Standard bar height",
12315
+ since: "0.3.0",
12316
+ usedBy: ["steuerdash"]
12317
+ },
12318
+ "size:lg": {
12319
+ description: "Tall bar for prominent display",
12320
+ since: "0.16.0"
12321
+ },
12322
+ "trackStyle:block": {
12323
+ description: "Solid block fill (default)",
12324
+ since: "0.3.0",
12325
+ usedBy: ["steuerdash"]
12326
+ },
12327
+ "trackStyle:bordered": {
12328
+ description: "Outline bar with fill inside",
12329
+ since: "0.3.0"
12330
+ },
12331
+ "trackStyle:gradient": {
12332
+ description: "Gradient fill for smooth visual",
12333
+ since: "0.3.0"
12334
+ }
12335
+ },
12336
+ platforms: {
12337
+ react: {
12338
+ path: "src/components/Progress",
12339
+ status: "canonical"
12340
+ },
12341
+ swiftui: { status: "planned" }
12342
+ },
12343
+ changelog: [{
12344
+ version: "0.16.0",
12345
+ type: "changed",
12346
+ description: "Migrate to Tailwind-first (Wave 2); deprecate size aliases small/medium/large → sm/md/lg"
12347
+ }, {
12348
+ version: "0.3.0",
12349
+ type: "added",
12350
+ description: "Initial Progress — blocks character cells, indeterminate, showLabel, glow prop"
12351
+ }]
12352
+ },
12353
+ RetroEffects: {
12354
+ origin: "spacewar",
12355
+ consumers: ["spacewar", "rizomorf"],
12356
+ since: "0.3.0",
12357
+ originNote: "CRT scanline/glow effects from Spacewar! — compositor-only, prefers-reduced-motion safe",
12358
+ platforms: {
12359
+ react: {
12360
+ path: "src/components/RetroEffects",
12361
+ status: "canonical"
12362
+ },
12363
+ spritekit: {
12364
+ status: "planned",
12365
+ note: "Spacewar uses CRT shader natively; component is React-web-only"
12366
+ }
12367
+ },
12368
+ changelog: [
12369
+ {
12370
+ version: "0.30.0",
12371
+ type: "added",
12372
+ description: "bootOnce — gate CGA turn-on to once per browser tab/session via sessionStorage"
12373
+ },
12374
+ {
12375
+ version: "0.28.0",
12376
+ type: "added",
12377
+ description: "boot prop — CGA monitor turn-on sequence on mount (~650ms); onBootComplete callback"
12378
+ },
12379
+ {
12380
+ version: "0.18.0",
12381
+ type: "changed",
12382
+ description: "Migrate BEM to Tailwind-first"
12383
+ },
12384
+ {
12385
+ version: "0.8.0",
12386
+ type: "changed",
12387
+ description: "Align CRT animation values with design-craft spec"
12388
+ },
12389
+ {
12390
+ version: "0.3.0",
12391
+ type: "added",
12392
+ description: "Initial RetroEffects — scanlines, glow, flicker, bloom, intensity, powered"
12393
+ }
12394
+ ]
12395
+ },
12396
+ Skeleton: {
12397
+ origin: "eidotter",
12398
+ consumers: ["dmnctech"],
12399
+ originNote: "DOS/CGA loading placeholder — shade-character rows (░▒▓) with CRT hum-bar band rolling top→bottom (DMNC-1018)"
12400
+ },
12401
+ Stat: {
12402
+ origin: "steuerdash",
12403
+ consumers: ["steuerdash"],
12404
+ since: "0.3.0",
12405
+ originNote: "Key-value metric display created for tax dashboard — optional trend arrow and TextScramble animation",
12406
+ variants: {
12407
+ "size:sm": {
12408
+ description: "Compact metric for dense dashboards",
12409
+ since: "0.16.0"
12410
+ },
12411
+ "size:md": {
12412
+ description: "Standard metric display",
12413
+ since: "0.3.0",
12414
+ usedBy: ["steuerdash"]
12415
+ },
12416
+ "size:lg": {
12417
+ description: "Hero metric for prominent KPIs",
12418
+ since: "0.16.0",
12419
+ usedBy: ["steuerdash"]
12420
+ },
12421
+ "trend:up": {
12422
+ description: "Upward trend indicator (green arrow)",
12423
+ since: "0.3.0",
12424
+ usedBy: ["steuerdash"]
12425
+ },
12426
+ "trend:down": {
12427
+ description: "Downward trend indicator (red arrow)",
12428
+ since: "0.3.0",
12429
+ usedBy: ["steuerdash"]
12430
+ },
12431
+ "trend:neutral": {
12432
+ description: "No change indicator (muted dash)",
12433
+ since: "0.3.0"
12434
+ }
12435
+ },
12436
+ platforms: {
12437
+ react: {
12438
+ path: "src/components/Stat",
12439
+ status: "canonical"
12440
+ },
12441
+ swiftui: { status: "planned" }
12442
+ },
12443
+ changelog: [
12444
+ {
12445
+ version: "0.19.0",
12446
+ type: "changed",
12447
+ description: "Replace hardcoded font-size pixels with V.37 dos tokens"
12448
+ },
12449
+ {
12450
+ version: "0.16.0",
12451
+ type: "changed",
12452
+ description: "Migrate to Tailwind-first (Wave 2); deprecate size aliases; add size:sm/lg"
12453
+ },
12454
+ {
12455
+ version: "0.3.0",
12456
+ type: "added",
12457
+ description: "Initial Stat — label, value, trend, trendValue, scramble prop"
12458
+ }
12459
+ ]
12460
+ },
12461
+ Switch: {
12462
+ origin: "eidotter",
12463
+ consumers: [],
12464
+ since: "0.3.0",
12465
+ variants: {
12466
+ "size:sm": {
12467
+ description: "Compact 20px toggle for dense layouts",
12468
+ since: "0.16.0"
12469
+ },
12470
+ "size:md": {
12471
+ description: "Standard 24px toggle",
12472
+ since: "0.3.0"
12473
+ },
12474
+ "type:default": {
12475
+ description: "Full-width thumb track",
12476
+ since: "0.3.0"
12477
+ },
12478
+ "type:slim": {
12479
+ description: "Narrow pill track for inline use",
12480
+ since: "0.3.0"
12481
+ }
12482
+ },
12483
+ platforms: {
12484
+ react: {
12485
+ path: "src/components/Switch",
12486
+ status: "canonical"
12487
+ },
12488
+ swiftui: { status: "planned" }
12489
+ },
12490
+ changelog: [
12491
+ {
12492
+ version: "0.16.0",
12493
+ type: "changed",
12494
+ description: "Migrate to React Aria + Tailwind-first (Wave 1); add size:sm variant"
12495
+ },
12496
+ {
12497
+ version: "0.9.0",
12498
+ type: "changed",
12499
+ description: "Replace text-primary with cga-amber"
12500
+ },
12501
+ {
12502
+ version: "0.8.0",
12503
+ type: "changed",
12504
+ description: "Design-craft animation polish — toggle glow transition"
12505
+ },
12506
+ {
12507
+ version: "0.3.0",
12508
+ type: "added",
12509
+ description: "Initial Switch — controlled/uncontrolled, label, type:default/slim"
12510
+ }
12511
+ ]
12512
+ },
12513
+ FilterBar: {
12514
+ origin: "eidotter",
12515
+ consumers: ["lifelines", "rizomorf"],
12516
+ since: "0.7.0",
12517
+ originNote: "Multi-select toggle group for faceted filtering — keyboard nav, showAll, per-item color",
12518
+ variants: {
12519
+ "mode:multi": {
12520
+ description: "Multiple filters selectable simultaneously",
12521
+ since: "0.7.0",
12522
+ usedBy: ["lifelines", "rizomorf"]
12523
+ },
12524
+ "mode:single": {
12525
+ description: "Single active filter (radio behavior)",
12526
+ since: "0.7.0"
12527
+ },
12528
+ "size:sm": {
12529
+ description: "Compact filter chips",
12530
+ since: "0.16.0"
12531
+ },
12532
+ "size:md": {
12533
+ description: "Standard filter chips",
12534
+ since: "0.7.0",
12535
+ usedBy: ["lifelines", "rizomorf"]
12536
+ },
12537
+ "size:lg": {
12538
+ description: "Large filter chips for touch targets",
12539
+ since: "0.16.0"
12540
+ }
12541
+ },
12542
+ platforms: { react: {
12543
+ path: "src/components/FilterBar",
12544
+ status: "canonical"
12545
+ } },
12546
+ changelog: [
12547
+ {
12548
+ version: "0.16.0",
12549
+ type: "changed",
12550
+ description: "Migrate to Tailwind-first (Wave 3); deprecate size aliases"
12551
+ },
12552
+ {
12553
+ version: "0.13.0",
12554
+ type: "changed",
12555
+ description: "Replace raw <button> with AriaButton for filter chips"
12556
+ },
12557
+ {
12558
+ version: "0.7.0",
12559
+ type: "added",
12560
+ description: "Initial FilterBar — multi/single mode, items array, showAll, keyboard nav"
12561
+ }
12562
+ ]
12563
+ },
12564
+ Tag: {
12565
+ origin: "eidotter",
12566
+ consumers: ["lifelines", "rizomorf"],
12567
+ since: "0.7.0",
12568
+ originNote: "Interactive labels for tags, categories, and filter chips",
12569
+ variants: {
12570
+ "variant:default": {
12571
+ description: "Standard tag with subtle background",
12572
+ since: "0.7.0",
12573
+ usedBy: ["rizomorf"]
12574
+ },
12575
+ "variant:outlined": {
12576
+ description: "Border-only tag",
12577
+ since: "0.7.0",
12578
+ usedBy: ["lifelines"]
12579
+ },
12580
+ "variant:filled": {
12581
+ description: "Solid background tag",
12582
+ since: "0.7.0",
12583
+ usedBy: ["rizomorf", "lifelines"]
12584
+ },
12585
+ "size:small": {
12586
+ description: "Compact tag for dense layouts",
12587
+ since: "0.7.0"
12588
+ },
12589
+ "size:medium": {
12590
+ description: "Standard tag size",
12591
+ since: "0.7.0"
12592
+ }
12593
+ },
12594
+ platforms: {
12595
+ react: {
12596
+ path: "src/components/Tag",
12597
+ status: "canonical"
12598
+ },
12599
+ swiftui: { status: "planned" }
12600
+ },
12601
+ changelog: [
12602
+ {
12603
+ version: "0.11.0",
12604
+ type: "changed",
12605
+ description: "Convert font-size to rem tokens for WCAG SC 1.4.4"
12606
+ },
12607
+ {
12608
+ version: "0.8.0",
12609
+ type: "changed",
12610
+ description: "Design-craft animation polish"
12611
+ },
12612
+ {
12613
+ version: "0.7.0",
12614
+ type: "added",
12615
+ description: "Initial Tag and TagGroup components"
12616
+ }
11723
12617
  ]
11724
12618
  },
11725
12619
  Tabs: {
11726
12620
  origin: "eidotter",
11727
- consumers: ["steuerdash"]
12621
+ consumers: ["steuerdash"],
12622
+ since: "0.3.0",
12623
+ variants: {
12624
+ "variant:underline": {
12625
+ description: "Underline indicator tab bar (default)",
12626
+ since: "0.3.0",
12627
+ usedBy: ["steuerdash"]
12628
+ },
12629
+ "variant:pills": {
12630
+ description: "Filled pill tabs",
12631
+ since: "0.3.0"
12632
+ },
12633
+ "size:sm": {
12634
+ description: "Compact tabs for dense layouts",
12635
+ since: "0.16.0"
12636
+ },
12637
+ "size:md": {
12638
+ description: "Standard tab height",
12639
+ since: "0.3.0",
12640
+ usedBy: ["steuerdash"]
12641
+ },
12642
+ "size:lg": {
12643
+ description: "Large touch-friendly tabs",
12644
+ since: "0.16.0"
12645
+ }
12646
+ },
12647
+ platforms: {
12648
+ react: {
12649
+ path: "src/components/Tabs",
12650
+ status: "canonical"
12651
+ },
12652
+ swiftui: { status: "planned" }
12653
+ },
12654
+ changelog: [
12655
+ {
12656
+ version: "0.17.0",
12657
+ type: "changed",
12658
+ description: "Migrate to React Aria TabList/Tab/TabPanel (Wave 5)"
12659
+ },
12660
+ {
12661
+ version: "0.16.0",
12662
+ type: "changed",
12663
+ description: "Migrate to Tailwind-first (Wave 3); deprecate size aliases; JS-measured indicator via ResizeObserver"
12664
+ },
12665
+ {
12666
+ version: "0.11.0",
12667
+ type: "changed",
12668
+ description: "Dynamic text scaling — rem tokens for WCAG SC 1.4.4"
12669
+ },
12670
+ {
12671
+ version: "0.9.0",
12672
+ type: "changed",
12673
+ description: "Replace text-primary with cga-amber"
12674
+ },
12675
+ {
12676
+ version: "0.3.0",
12677
+ type: "added",
12678
+ description: "Initial Tabs — tabs array, activeTab, onSelectionChange, animated indicator"
12679
+ }
12680
+ ]
11728
12681
  },
11729
12682
  Terminal: {
11730
12683
  origin: "eidotter",
11731
- consumers: ["rizomorf"]
12684
+ consumers: ["rizomorf"],
12685
+ since: "0.2.0",
12686
+ originNote: "DOS window frame with px-based bitmap font sizing — legacy BEM, not migrated to Tailwind-first",
12687
+ variants: {
12688
+ "size:sm": {
12689
+ description: "Compact 320px window",
12690
+ since: "0.2.0"
12691
+ },
12692
+ "size:md": {
12693
+ description: "Standard 480px window",
12694
+ since: "0.2.0",
12695
+ usedBy: ["rizomorf"]
12696
+ },
12697
+ "size:lg": {
12698
+ description: "Full-width window",
12699
+ since: "0.2.0"
12700
+ },
12701
+ "state:active": {
12702
+ description: "Focused window with amber title bar",
12703
+ since: "0.2.0",
12704
+ usedBy: ["rizomorf"]
12705
+ },
12706
+ "state:inactive": {
12707
+ description: "Unfocused window with dimmed title bar",
12708
+ since: "0.2.0"
12709
+ },
12710
+ "state:minimized": {
12711
+ description: "Collapsed to title bar only",
12712
+ since: "0.2.0"
12713
+ }
12714
+ },
12715
+ platforms: { react: {
12716
+ path: "src/components/Terminal",
12717
+ status: "canonical"
12718
+ } },
12719
+ changelog: [
12720
+ {
12721
+ version: "0.30.0",
12722
+ type: "changed",
12723
+ description: "A11y keyboard focus fixes for window controls"
12724
+ },
12725
+ {
12726
+ version: "0.18.0",
12727
+ type: "changed",
12728
+ description: "Migrate BEM to Tailwind-first; switch to Flexi IBM VGA font"
12729
+ },
12730
+ {
12731
+ version: "0.14.0",
12732
+ type: "changed",
12733
+ description: "Breaking: minimizable/maximizable/closeable default to false — consumers must opt in"
12734
+ },
12735
+ {
12736
+ version: "0.13.0",
12737
+ type: "changed",
12738
+ description: "Replace raw <button> with AriaButton for window controls"
12739
+ },
12740
+ {
12741
+ version: "0.2.0",
12742
+ type: "added",
12743
+ description: "Initial Terminal — title bar, window controls, resizable, autoFocus, size/state variants"
12744
+ }
12745
+ ]
11732
12746
  },
11733
12747
  TimelineNode: {
11734
12748
  origin: "lifelines",
11735
12749
  consumers: ["lifelines", "rizomorf"],
11736
- originNote: "Timeline markers from Lifelines project"
12750
+ since: "0.4.0",
12751
+ originNote: "Timeline markers extracted from Lifelines — sits on the axis line, content-box sizing",
12752
+ variants: {
12753
+ "shape:circle": {
12754
+ description: "Circular node marker (default)",
12755
+ since: "0.4.0",
12756
+ usedBy: ["lifelines", "rizomorf"]
12757
+ },
12758
+ "shape:square": {
12759
+ description: "Square node marker",
12760
+ since: "0.4.0"
12761
+ },
12762
+ "shape:diamond": {
12763
+ description: "Diamond (rotated square) node marker",
12764
+ since: "0.4.0"
12765
+ },
12766
+ "variant:default": {
12767
+ description: "Muted amber node",
12768
+ since: "0.4.0",
12769
+ usedBy: ["lifelines", "rizomorf"]
12770
+ },
12771
+ "variant:primary": {
12772
+ description: "Full-brightness amber node with phosphor glow",
12773
+ since: "0.4.0",
12774
+ usedBy: ["lifelines"]
12775
+ },
12776
+ "variant:secondary": {
12777
+ description: "Dimmed node for secondary events",
12778
+ since: "0.4.0"
12779
+ },
12780
+ "variant:accent": {
12781
+ description: "CGA accent color node",
12782
+ since: "0.4.0"
12783
+ },
12784
+ "labelPosition:right": {
12785
+ description: "Label to the right of the node (default)",
12786
+ since: "0.4.0",
12787
+ usedBy: ["lifelines", "rizomorf"]
12788
+ },
12789
+ "labelPosition:left": {
12790
+ description: "Label to the left of the node",
12791
+ since: "0.4.0"
12792
+ },
12793
+ "labelPosition:top": {
12794
+ description: "Label above the node",
12795
+ since: "0.4.0"
12796
+ },
12797
+ "labelPosition:bottom": {
12798
+ description: "Label below the node",
12799
+ since: "0.4.0"
12800
+ },
12801
+ "size:sm": {
12802
+ description: "Compact 8px node",
12803
+ since: "0.16.0"
12804
+ },
12805
+ "size:md": {
12806
+ description: "Standard 12px node",
12807
+ since: "0.4.0",
12808
+ usedBy: ["lifelines", "rizomorf"]
12809
+ },
12810
+ "size:lg": {
12811
+ description: "Large 16px node for emphasis",
12812
+ since: "0.16.0"
12813
+ }
12814
+ },
12815
+ platforms: { react: {
12816
+ path: "src/components/TimelineNode",
12817
+ status: "canonical"
12818
+ } },
12819
+ changelog: [
12820
+ {
12821
+ version: "0.35.0",
12822
+ type: "changed",
12823
+ description: "Pin marker box-sizing to content-box so dots stay on the axis line (DMNC-1090)"
12824
+ },
12825
+ {
12826
+ version: "0.30.0",
12827
+ type: "changed",
12828
+ description: "A11y: high-contrast glow gap remediation"
12829
+ },
12830
+ {
12831
+ version: "0.18.0",
12832
+ type: "changed",
12833
+ description: "Migrate BEM to Tailwind-first; switch to Flexi IBM VGA font"
12834
+ },
12835
+ {
12836
+ version: "0.4.0",
12837
+ type: "added",
12838
+ description: "Initial TimelineNode — shape, variant, labelPosition, size, isActive, onClick"
12839
+ }
12840
+ ]
11737
12841
  },
11738
12842
  InlineExpand: {
11739
12843
  origin: "rizomorf",
11740
12844
  consumers: ["rizomorf"],
11741
- originNote: "Inline disclosure widget for expanding text within prose"
12845
+ since: "0.7.0",
12846
+ originNote: "Inline disclosure widget for expanding context within prose — sources with favicon fallback",
12847
+ platforms: { react: {
12848
+ path: "src/components/InlineExpand",
12849
+ status: "canonical"
12850
+ } },
12851
+ changelog: [
12852
+ {
12853
+ version: "0.30.0",
12854
+ type: "changed",
12855
+ description: "Fix behavioral bugs — double-toggle edge case (DMNC-1063)"
12856
+ },
12857
+ {
12858
+ version: "0.18.0",
12859
+ type: "changed",
12860
+ description: "Migrate BEM to Tailwind-first"
12861
+ },
12862
+ {
12863
+ version: "0.8.0",
12864
+ type: "added",
12865
+ description: "sources prop — citation links with Google Favicons API fallback"
12866
+ },
12867
+ {
12868
+ version: "0.7.0",
12869
+ type: "added",
12870
+ description: "Initial InlineExpand — expanded, defaultExpanded, onToggle, content slot"
12871
+ }
12872
+ ]
11742
12873
  },
11743
12874
  Separator: {
11744
12875
  origin: "rizomorf",
11745
12876
  consumers: ["rizomorf"],
11746
- originNote: "Horizontal/vertical divider for content separation"
12877
+ since: "0.8.0",
12878
+ originNote: "Horizontal/vertical divider for content separation — ported from rizomorf",
12879
+ variants: {
12880
+ "orientation:horizontal": {
12881
+ description: "Full-width horizontal rule (default)",
12882
+ since: "0.8.0",
12883
+ usedBy: ["rizomorf"]
12884
+ },
12885
+ "orientation:vertical": {
12886
+ description: "Inline vertical divider for flex/grid rows",
12887
+ since: "0.8.0"
12888
+ }
12889
+ },
12890
+ platforms: { react: {
12891
+ path: "src/components/Separator",
12892
+ status: "canonical"
12893
+ } },
12894
+ changelog: [
12895
+ {
12896
+ version: "0.16.0",
12897
+ type: "changed",
12898
+ description: "Migrate to Tailwind-first (Wave 2)"
12899
+ },
12900
+ {
12901
+ version: "0.9.0",
12902
+ type: "changed",
12903
+ description: "Replace text-primary with cga-amber"
12904
+ },
12905
+ {
12906
+ version: "0.8.0",
12907
+ type: "added",
12908
+ description: "Initial Separator — horizontal/vertical orientation, ported from rizomorf"
12909
+ }
12910
+ ]
11747
12911
  },
11748
12912
  TimelineContainer: {
11749
12913
  origin: "lifelines",
11750
12914
  consumers: ["lifelines"],
11751
- originNote: "Multi-zoom timeline with year/month/day/hour views. Supports interactive, static, and feed modes."
12915
+ since: "0.8.0",
12916
+ originNote: "Multi-zoom timeline with year/month/day/hour views. Supports interactive, static, feed, and master-detail modes.",
12917
+ variants: {
12918
+ "mode:interactive": {
12919
+ description: "Full drill-down with keyboard shortcuts and Ctrl+scroll zoom",
12920
+ since: "0.8.0",
12921
+ usedBy: ["lifelines"]
12922
+ },
12923
+ "mode:static": {
12924
+ description: "Read-only snapshot — no zoom or selection controls",
12925
+ since: "0.8.0"
12926
+ },
12927
+ "mode:feed": {
12928
+ description: "Paginated vertical list with LOAD MORE — append-safe",
12929
+ since: "0.21.0",
12930
+ usedBy: ["lifelines"]
12931
+ },
12932
+ "mode:master-detail": {
12933
+ description: "Split-pane with list rail + detail panel",
12934
+ since: "0.34.0"
12935
+ },
12936
+ "sortOrder:asc": {
12937
+ description: "Oldest entries first",
12938
+ since: "0.8.0"
12939
+ },
12940
+ "sortOrder:desc": {
12941
+ description: "Newest entries first (default)",
12942
+ since: "0.8.0",
12943
+ usedBy: ["lifelines"]
12944
+ }
12945
+ },
12946
+ platforms: { react: {
12947
+ path: "src/components/TimelineContainer",
12948
+ status: "canonical"
12949
+ } },
12950
+ changelog: [
12951
+ {
12952
+ version: "0.34.0",
12953
+ type: "added",
12954
+ description: "master-detail layout mode — split-pane list rail + detail panel (DMNC-878)"
12955
+ },
12956
+ {
12957
+ version: "0.21.0",
12958
+ type: "added",
12959
+ description: "feed mode — pageSize, onLoadMore, DOS-styled LOAD MORE button"
12960
+ },
12961
+ {
12962
+ version: "0.21.0",
12963
+ type: "added",
12964
+ description: "renderEntry prop — pluggable entry renderer with defaultRender() opt-in"
12965
+ },
12966
+ {
12967
+ version: "0.9.0",
12968
+ type: "changed",
12969
+ description: "Responsive layout with CSS container queries"
12970
+ },
12971
+ {
12972
+ version: "0.8.0",
12973
+ type: "added",
12974
+ description: "Initial TimelineContainer — year/month/day/hour drill-down, migrated from Lifelines"
12975
+ }
12976
+ ]
12977
+ },
12978
+ TextScramble: {
12979
+ origin: "eidotter",
12980
+ consumers: [],
12981
+ since: "0.10.0",
12982
+ originNote: "DOS text decode effect — rAF-driven character scramble reveal; used by Stat (scramble prop) and standalone",
12983
+ platforms: { react: {
12984
+ path: "src/components/TextScramble",
12985
+ status: "canonical"
12986
+ } },
12987
+ changelog: [{
12988
+ version: "0.18.0",
12989
+ type: "changed",
12990
+ description: "Migrate BEM to Tailwind-first; adopt cn() and forwardRef"
12991
+ }, {
12992
+ version: "0.10.0",
12993
+ type: "added",
12994
+ description: "Initial TextScramble — children string, speed, characters, delay; rAF-based reveal"
12995
+ }]
11752
12996
  },
11753
12997
  ChatMessage: {
11754
12998
  origin: "eidotter",
@@ -11824,23 +13068,68 @@ var Xf = ({ title: e, date: t, intro: n, home: r, children: i, className: a, ...
11824
13068
  type: "added",
11825
13069
  description: "Initial CmdPalette — generic items with keywords, mod+k global hotkey, custom renderItem, useId() per-instance DOM ids, selected-clamp on items mutation"
11826
13070
  }]
13071
+ },
13072
+ ProgressRing: {
13073
+ origin: "tracker",
13074
+ consumers: ["tracker"],
13075
+ since: "0.37.0",
13076
+ originNote: "16-segment quantized progress ring (SVG). Powers Tracker’s hold-to-complete feedback ring.",
13077
+ platforms: { react: {
13078
+ path: "src/components/ProgressRing",
13079
+ status: "canonical"
13080
+ } },
13081
+ changelog: [{
13082
+ version: "0.37.0",
13083
+ type: "added",
13084
+ description: "Initial ProgressRing — discrete quantized segment arcs, phosphor glow, centre label, currentColor theming"
13085
+ }]
13086
+ },
13087
+ CalendarHeatmap: {
13088
+ origin: "tracker",
13089
+ consumers: ["tracker"],
13090
+ since: "0.37.0",
13091
+ originNote: "Block-character month calendar heatmap (█ ░ · ▒). Domain-agnostic — takes a date→status map, not a domain object.",
13092
+ platforms: { react: {
13093
+ path: "src/components/CalendarHeatmap",
13094
+ status: "canonical"
13095
+ } },
13096
+ changelog: [{
13097
+ version: "0.37.0",
13098
+ type: "added",
13099
+ description: "Initial CalendarHeatmap — UTC date maths, Monday/Sunday week start, legend, successColor override, glyph overrides"
13100
+ }]
13101
+ },
13102
+ HoldToComplete: {
13103
+ origin: "tracker",
13104
+ consumers: ["tracker"],
13105
+ since: "0.37.0",
13106
+ originNote: "Press-and-hold-to-complete interaction with ProgressRing feedback. Pointer + keyboard, reduced-motion aware.",
13107
+ platforms: { react: {
13108
+ path: "src/components/HoldToComplete",
13109
+ status: "canonical"
13110
+ } },
13111
+ changelog: [{
13112
+ version: "0.37.0",
13113
+ type: "added",
13114
+ description: "Initial HoldToComplete — rAF hold animation with accelerating ease, onHoldProgress hook, Enter/Space to complete"
13115
+ }]
11827
13116
  }
11828
13117
  };
11829
- function pp(e) {
11830
- return fp[e];
13118
+ function kp(e) {
13119
+ return Op[e];
11831
13120
  }
11832
- function mp(e) {
11833
- return Object.entries(fp).filter(([, t]) => t.origin === e).map(([e]) => e);
13121
+ function Ap(e) {
13122
+ return Object.entries(Op).filter(([, t]) => t.origin === e).map(([e]) => e);
11834
13123
  }
11835
- function hp(e) {
11836
- return Object.entries(fp).filter(([, t]) => t.consumers.includes(e)).map(([e]) => e);
13124
+ function jp(e) {
13125
+ return Object.entries(Op).filter(([, t]) => t.consumers.includes(e)).map(([e]) => e);
11837
13126
  }
11838
- function gp(e, t) {
11839
- let n = fp[e];
13127
+ function Mp(e, t) {
13128
+ let n = Op[e];
11840
13129
  return n?.variants ? Object.entries(n.variants).filter(([, e]) => e.usedBy?.includes(t)).map(([e]) => e) : [];
11841
13130
  }
11842
- function _p(e) {
11843
- let t = fp[e];
13131
+ function Np(e) {
13132
+ let t = Op[e];
11844
13133
  if (!t?.variants) return {};
11845
13134
  let n = {};
11846
13135
  for (let [e, r] of Object.entries(t.variants)) n[e] = r.usedBy ?? [];
@@ -11848,6 +13137,6 @@ function _p(e) {
11848
13137
  }
11849
13138
  //#endregion
11850
13139
  //#region src/index.ts
11851
- var vp = "0.30.0";
13140
+ var Pp = "0.30.0";
11852
13141
  //#endregion
11853
- export { Hf as AIText, ou as AccordionFill, $f as AddressBlock, iu as Alert, Au as Badge, Vf as BrandLockup, Nu as Breadcrumb, lu as Button, du as Card, wf as ChatContainer, Sf as ChatHistory, Cf as ChatInput, xf as ChatMessage, fu as Checkbox, uf as ChecklistRow, Rf as CmdPalette, pu as CommandPrompt, df as CopyButton, ap as DatenschutzController, lp as DatenschutzEncryption, cp as DatenschutzFonts, op as DatenschutzHosting, sp as DatenschutzPostHog, up as DatenschutzRights, _f as DesktopNav, Pf as DosFigure, cf as EmptyState, $d as FilterBar, Ef as Footer, Of as Header, Zl as Icon, ep as ImpressumAddress, tp as ImpressumContact, rp as ImpressumLiabilityContent, ip as ImpressumLiabilityLinks, np as ImpressumResponsible, tf as InlineExpand, Nf as InlineLink, Cu as Input, mf as LabeledProgress, pf as LedgerRow, Xf as LegalPage, Cd as Lightbox, zf as Logo, vf as MobileNav, Ud as Modal, yf as Nav, Af as Notification, xu as Progress, Ru as RetroEffects, au as Section, of as SectionHeading, ff as Select, rf as Separator, Yf as Skeleton, Zd as Stat, ju as Switch, Du as Tabs, Fd as Tag, Ld as TagGroup, wu as Terminal, hf as TextScramble, Hd as TimelineContainer, Uu as TimelineNode, Bf as Wordmark, Wu as ZOOM_LEVELS, fp as componentRegistry, Tf as defaultLegalLinks, pp as getComponentMeta, hp as getComponentsByConsumer, mp as getComponentsByOrigin, _p as getVariantConsumerMap, gp as getVariantsUsedBy, ef as isSafeUrl, dp as projects, Kd as useTextScramble, vp as version };
13142
+ export { ip as AIText, ou as AccordionFill, hp as AddressBlock, iu as Alert, Gu as Badge, rp as BrandLockup, Ju as Breadcrumb, lu as Button, Mu as CalendarHeatmap, du as Card, Bf as ChatContainer, Rf as ChatHistory, zf as ChatInput, Lf as ChatMessage, fu as Checkbox, Ef as ChecklistRow, ep as CmdPalette, pu as CommandPrompt, Df as CopyButton, xp as DatenschutzController, Tp as DatenschutzEncryption, wp as DatenschutzFonts, Sp as DatenschutzHosting, Cp as DatenschutzPostHog, Ep as DatenschutzRights, Nf as DesktopNav, Xf as DosFigure, wf as EmptyState, hf as FilterBar, Hf as Footer, Wf as Header, Iu as HoldToComplete, Zl as Icon, gp as ImpressumAddress, _p as ImpressumContact, yp as ImpressumLiabilityContent, bp as ImpressumLiabilityLinks, vp as ImpressumResponsible, vf as InlineExpand, Yf as InlineLink, Ru as Input, Af as LabeledProgress, kf as LedgerRow, fp as LegalPage, Rd as Lightbox, tp as Logo, Pf as MobileNav, af as Modal, Ff as Nav, Kf as Notification, xu as Progress, Cu as ProgressRing, $u as RetroEffects, au as Section, Sf as SectionHeading, Of as Select, bf as Separator, dp as Skeleton, pf as Stat, Ku as Switch, Hu as Tabs, Xd as Tag, Qd as TagGroup, zu as Terminal, jf as TextScramble, rf as TimelineContainer, id as TimelineNode, np as Wordmark, ad as ZOOM_LEVELS, Op as componentRegistry, Vf as defaultLegalLinks, kp as getComponentMeta, jp as getComponentsByConsumer, Ap as getComponentsByOrigin, Np as getVariantConsumerMap, Mp as getVariantsUsedBy, gf as isSafeUrl, Dp as projects, cf as useTextScramble, Pp as version };