kaleido-ui 0.2.6 → 0.2.8

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 (190) hide show
  1. package/dist/web/{chunk-SA6ODI7U.js → chunk-27CY5EHL.js} +8 -8
  2. package/dist/web/{chunk-255X76ZW.js → chunk-2GNXC446.js} +4 -4
  3. package/dist/web/{chunk-I7MYUZ56.js → chunk-2NCH2ZDU.js} +4 -4
  4. package/dist/web/{chunk-SU32VRD7.js → chunk-2OINBKHY.js} +1 -1
  5. package/dist/web/{chunk-ELT34EZJ.js → chunk-2Q5SSNFO.js} +1 -1
  6. package/dist/web/{chunk-ARO323RW.js → chunk-4246Y2F2.js} +11 -11
  7. package/dist/web/{chunk-U4WWGKI5.js → chunk-4QLR4ZNK.js} +13 -13
  8. package/dist/web/{chunk-GPTAAEPK.js → chunk-5BNDC7M4.js} +2 -2
  9. package/dist/web/{chunk-AVJ56TMD.js → chunk-76DAZT7Q.js} +4 -4
  10. package/dist/web/{chunk-M7JNBTLT.js → chunk-7F5GSNHE.js} +1 -1
  11. package/dist/web/{chunk-Z7IFO623.js → chunk-7NS5S2PG.js} +5 -5
  12. package/dist/web/{chunk-CLJMCDUS.js → chunk-A2ZIUJUJ.js} +12 -12
  13. package/dist/web/{chunk-ND6LNJST.js → chunk-A3TKIXSI.js} +11 -11
  14. package/dist/web/{chunk-HLHCPDCZ.js → chunk-A6MSV4MA.js} +4 -4
  15. package/dist/web/{chunk-AMCV2D3Q.js → chunk-C7GGZCRO.js} +1 -1
  16. package/dist/web/{chunk-Y74IX3Z3.js → chunk-CZPNI33A.js} +1 -1
  17. package/dist/web/{chunk-BAV3MTRA.js → chunk-DE4ALHAW.js} +1 -1
  18. package/dist/web/{chunk-SJW4IXDG.js → chunk-DH7VXKGM.js} +9 -9
  19. package/dist/web/{chunk-G2K423HV.js → chunk-DNHRMPKI.js} +6 -6
  20. package/dist/web/{chunk-YPINO6TQ.js → chunk-DXFFYCU3.js} +4 -4
  21. package/dist/web/{chunk-EZ34YRLM.js → chunk-E3YQSYXF.js} +1 -1
  22. package/dist/web/{chunk-7IQ4YJZS.js → chunk-FB23RQN5.js} +1 -1
  23. package/dist/web/{chunk-MUSLMJF3.js → chunk-FWOIRFV5.js} +5 -5
  24. package/dist/web/{chunk-DUIRXCBO.js → chunk-GMJGTSCQ.js} +8 -8
  25. package/dist/web/{chunk-TGYM5AF6.js → chunk-GX7GBHJ6.js} +7 -7
  26. package/dist/web/{chunk-OZB5M3SQ.js → chunk-HDLOPDFX.js} +7 -7
  27. package/dist/web/{chunk-HIIB5NGX.js → chunk-HWKXZNBN.js} +4 -4
  28. package/dist/web/{chunk-UR2Q5DZF.js → chunk-IJHTXDKP.js} +14 -14
  29. package/dist/web/{chunk-Y7G7SETL.js → chunk-IK32AIOS.js} +1 -1
  30. package/dist/web/{chunk-VNNGXLQC.js → chunk-JY73M73T.js} +7 -7
  31. package/dist/web/{chunk-Y4MOWCLO.js → chunk-JYM5NHBA.js} +1 -1
  32. package/dist/web/{chunk-IEEIIE3Q.js → chunk-JZ3BUM5L.js} +13 -13
  33. package/dist/web/{chunk-73BRW657.js → chunk-L2UPQLY7.js} +4 -4
  34. package/dist/web/{chunk-5NCVH6N5.js → chunk-LFAORJQK.js} +2 -2
  35. package/dist/web/{chunk-I6ESLPWR.js → chunk-LPDB7EHH.js} +1 -1
  36. package/dist/web/{chunk-OITKJK5K.js → chunk-LZ6PIXUO.js} +2 -2
  37. package/dist/web/{chunk-6AAKKRZJ.js → chunk-M6RXTQEL.js} +9 -9
  38. package/dist/web/{chunk-KIMCXNLP.js → chunk-NEXA6VGG.js} +1 -1
  39. package/dist/web/{chunk-536NL4X2.js → chunk-NSA777UY.js} +4 -4
  40. package/dist/web/{chunk-KDNTZ2BX.js → chunk-O2TTO5FS.js} +3 -3
  41. package/dist/web/{chunk-7BPEZ3TA.js → chunk-PCKRLEAO.js} +1 -1
  42. package/dist/web/{chunk-XHOWUR5T.js → chunk-PS7Q6MMU.js} +3 -3
  43. package/dist/web/{chunk-QFE2KEC2.js → chunk-PTSOVDKH.js} +3 -3
  44. package/dist/web/{chunk-HLPL5AHD.js → chunk-QBZSLR7U.js} +1 -1
  45. package/dist/web/{chunk-GQBELVPV.js → chunk-QCQRA6L5.js} +4 -4
  46. package/dist/web/{chunk-CRQ6QCAN.js → chunk-QFIGSIXA.js} +10 -10
  47. package/dist/web/{chunk-HSV2WS2C.js → chunk-QRK4J3P3.js} +4 -4
  48. package/dist/web/{chunk-EODZVHEU.js → chunk-R3IIXFGK.js} +3 -3
  49. package/dist/web/{chunk-GJB3GMDE.js → chunk-RIOY4LFJ.js} +1 -1
  50. package/dist/web/{chunk-TCFHLDRK.js → chunk-STH4BGSE.js} +11 -11
  51. package/dist/web/{chunk-MRQXL6NY.js → chunk-STMNX3QT.js} +3 -3
  52. package/dist/web/{chunk-HO65ENYH.js → chunk-TBEKRQGW.js} +1 -1
  53. package/dist/web/{chunk-PIXLIWSO.js → chunk-TMK3SVYI.js} +1 -1
  54. package/dist/web/{chunk-KGBJAITC.js → chunk-TPGNO74K.js} +4 -4
  55. package/dist/web/{chunk-HMHG36RK.js → chunk-UG3GFYTP.js} +1 -1
  56. package/dist/web/{chunk-UNZZVCZY.js → chunk-VUGV3ELU.js} +6 -6
  57. package/dist/web/{chunk-VRMLE4BA.js → chunk-WOAWUXER.js} +3 -3
  58. package/dist/web/{chunk-XB4FFFU6.js → chunk-WWF7IJBF.js} +16 -16
  59. package/dist/web/chunk-X7AOMP24.js +235 -0
  60. package/dist/web/{chunk-BBKINPMF.js → chunk-YCOP3ZRE.js} +7 -7
  61. package/dist/web/{chunk-CSOMNAM5.js → chunk-YNB4SSLD.js} +9 -9
  62. package/dist/web/{chunk-4WUXBF7Q.js → chunk-YTXWYWVD.js} +7 -7
  63. package/dist/web/{chunk-QNT2GSHF.js → chunk-Z5O67WTL.js} +1 -1
  64. package/dist/web/{chunk-BI3WGWOO.js → chunk-ZTVV4KBT.js} +1 -1
  65. package/dist/web/{chunk-XNLQEGBW.js → chunk-ZXCT3Y6P.js} +1 -1
  66. package/dist/web/components/account-capabilities-card.js +10 -10
  67. package/dist/web/components/account-menu.js +5 -5
  68. package/dist/web/components/account-settings-shared.js +9 -9
  69. package/dist/web/components/account-status-tabs.js +6 -6
  70. package/dist/web/components/activity-detail-row.js +10 -10
  71. package/dist/web/components/activity-filter-bar.js +10 -10
  72. package/dist/web/components/activity-list.js +10 -10
  73. package/dist/web/components/activity-network-filters.js +7 -7
  74. package/dist/web/components/activity-row.js +6 -6
  75. package/dist/web/components/activity-type-tabs.js +7 -7
  76. package/dist/web/components/alert-banner.js +5 -5
  77. package/dist/web/components/app-icon.js +5 -5
  78. package/dist/web/components/asset-card.js +10 -10
  79. package/dist/web/components/asset-icon.js +2 -2
  80. package/dist/web/components/asset-selector.js +11 -11
  81. package/dist/web/components/balance-breakdown.js +6 -6
  82. package/dist/web/components/basic-collapsible.js +3 -3
  83. package/dist/web/components/bottom-nav.js +5 -5
  84. package/dist/web/components/bottom-sheet.js +5 -5
  85. package/dist/web/components/btc-unified-receive.js +14 -14
  86. package/dist/web/components/charts/bar-chart.js +10 -10
  87. package/dist/web/components/charts/bar-list.js +10 -10
  88. package/dist/web/components/charts/core.js +9 -9
  89. package/dist/web/components/charts/donut-chart.js +10 -10
  90. package/dist/web/components/charts/index.js +24 -24
  91. package/dist/web/components/charts/line-chart.js +10 -10
  92. package/dist/web/components/charts/meter.js +10 -10
  93. package/dist/web/components/charts/mixed-chart.js +10 -10
  94. package/dist/web/components/charts/scatter-chart.js +10 -10
  95. package/dist/web/components/code-block.js +10 -10
  96. package/dist/web/components/confirm-dialog.js +3 -3
  97. package/dist/web/components/copy-button.js +8 -8
  98. package/dist/web/components/copyable.js +9 -9
  99. package/dist/web/components/date-picker.js +14 -0
  100. package/dist/web/components/date-range-filter.js +3 -3
  101. package/dist/web/components/deposit-asset-selection.js +12 -12
  102. package/dist/web/components/deposit-generated-view.js +10 -10
  103. package/dist/web/components/deposit-invoice-generation.js +21 -21
  104. package/dist/web/components/deposit-network-default-modal.js +3 -3
  105. package/dist/web/components/deposit-pre-generation.js +7 -7
  106. package/dist/web/components/deposit-success-screen.js +9 -9
  107. package/dist/web/components/deposit-ui-shared.js +5 -5
  108. package/dist/web/components/disclosure-card.js +3 -3
  109. package/dist/web/components/error-boundary.js +1 -1
  110. package/dist/web/components/extension-page-frame.js +4 -4
  111. package/dist/web/components/filter-bar.js +4 -4
  112. package/dist/web/components/filter-dropdown.js +3 -3
  113. package/dist/web/components/floating-notice.js +2 -2
  114. package/dist/web/components/info-chip.js +7 -7
  115. package/dist/web/components/info-panel.js +5 -5
  116. package/dist/web/components/inline-selector.js +2 -2
  117. package/dist/web/components/instants-statement.js +9 -9
  118. package/dist/web/components/list-field.js +2 -2
  119. package/dist/web/components/metric-card.js +5 -5
  120. package/dist/web/components/one-time-secret-dialog.js +8 -8
  121. package/dist/web/components/option-selector.js +3 -3
  122. package/dist/web/components/page-header.js +2 -2
  123. package/dist/web/components/page-shell.js +2 -2
  124. package/dist/web/components/pager.js +2 -2
  125. package/dist/web/components/period-select.js +6 -6
  126. package/dist/web/components/query-state.js +6 -6
  127. package/dist/web/components/read-status.js +2 -2
  128. package/dist/web/components/record-list.js +3 -3
  129. package/dist/web/components/recovery-phrase-card.js +9 -9
  130. package/dist/web/components/secret-reveal-card.js +9 -9
  131. package/dist/web/components/setting-item.js +5 -5
  132. package/dist/web/components/settings-tile.js +7 -7
  133. package/dist/web/components/status-badge.js +5 -5
  134. package/dist/web/components/status-icon-badge.js +5 -5
  135. package/dist/web/components/stepper-number-input.js +2 -2
  136. package/dist/web/components/swap-input-card.js +16 -16
  137. package/dist/web/components/swap-step-list.js +2 -2
  138. package/dist/web/components/theme-toggle.js +3 -3
  139. package/dist/web/components/transaction-card.js +6 -6
  140. package/dist/web/components/trend-chart.js +10 -10
  141. package/dist/web/components/value-list.js +9 -9
  142. package/dist/web/components/wallet-asset-list.js +11 -11
  143. package/dist/web/components/withdraw-amount-input.js +4 -4
  144. package/dist/web/components/withdraw-confirmation.js +5 -5
  145. package/dist/web/components/withdraw-destination-input.js +2 -2
  146. package/dist/web/components/withdraw-success.js +2 -2
  147. package/dist/web/icons/index.js +2 -2
  148. package/dist/web/icons/public.js +12 -12
  149. package/dist/web/index.cjs +1038 -828
  150. package/dist/web/index.d.cts +34 -1
  151. package/dist/web/index.d.ts +34 -1
  152. package/dist/web/index.js +366 -362
  153. package/dist/web/primitives/collapsible.js +2 -2
  154. package/dist/web/primitives/dialog.js +2 -2
  155. package/dist/web/primitives/drawer.js +3 -3
  156. package/dist/web/primitives/dropdown-menu.js +3 -3
  157. package/dist/web/primitives/icon-button.js +5 -5
  158. package/dist/web/primitives/icon.js +4 -4
  159. package/dist/web/primitives/menu-search.js +1 -1
  160. package/dist/web/primitives/number-input.js +2 -2
  161. package/dist/web/primitives/select.js +3 -3
  162. package/dist/web/primitives/table.js +3 -3
  163. package/dist/web/primitives/toast.js +2 -2
  164. package/dist/web/primitives/toaster.js +5 -5
  165. package/package.json +1 -1
  166. package/dist/web/{chunk-Y276JDXI.js → chunk-2REWXJEN.js} +4 -4
  167. package/dist/web/{chunk-7L35JISL.js → chunk-2VAS6VYJ.js} +3 -3
  168. package/dist/web/{chunk-7L7DQFHJ.js → chunk-4MLPMRXA.js} +3 -3
  169. package/dist/web/{chunk-7Y7FEBKK.js → chunk-5PZ2XVWL.js} +3 -3
  170. package/dist/web/{chunk-MKMZH4XD.js → chunk-62HIDJCD.js} +3 -3
  171. package/dist/web/{chunk-Q2IXLUSM.js → chunk-6IBQJIHT.js} +3 -3
  172. package/dist/web/{chunk-LXDHO6BZ.js → chunk-6VKWG5FJ.js} +6 -6
  173. package/dist/web/{chunk-Z3H2FQVX.js → chunk-A3XHFJ6J.js} +3 -3
  174. package/dist/web/{chunk-OO7Y5FVA.js → chunk-BY2KCPTX.js} +11 -11
  175. package/dist/web/{chunk-A5LNLZWX.js → chunk-C7YIQDGQ.js} +3 -3
  176. package/dist/web/{chunk-NHOCTXPF.js → chunk-IMER4KGH.js} +3 -3
  177. package/dist/web/{chunk-ESAYAG7H.js → chunk-JWMFTRDC.js} +7 -7
  178. package/dist/web/{chunk-ZDCKYQKS.js → chunk-KIMWCG5N.js} +3 -3
  179. package/dist/web/{chunk-D2ZG6TZM.js → chunk-LZ723UCB.js} +3 -3
  180. package/dist/web/{chunk-RA5YGBRB.js → chunk-RV7Z3B3V.js} +3 -3
  181. package/dist/web/{chunk-U2UWLSDG.js → chunk-SJNOBBU5.js} +3 -3
  182. package/dist/web/{chunk-HBPFGIYS.js → chunk-TCFHH5TE.js} +6 -6
  183. package/dist/web/{chunk-46KGJZSU.js → chunk-UHXOPILM.js} +3 -3
  184. package/dist/web/{chunk-GCOOW7Y6.js → chunk-VYQHGSK6.js} +7 -7
  185. package/dist/web/{chunk-7VDPOFP7.js → chunk-VZF5C3C6.js} +6 -6
  186. package/dist/web/{chunk-NXPVF5WX.js → chunk-WURSWAKE.js} +3 -3
  187. package/dist/web/{chunk-IZCLPO4E.js → chunk-XCQGJYGF.js} +3 -3
  188. package/dist/web/{chunk-YRRZ22OK.js → chunk-Z2SS7UJ4.js} +3 -3
  189. package/dist/web/{chunk-DY72P3EE.js → chunk-ZPNGHBKB.js} +5 -5
  190. package/dist/web/{chunk-SIE2FP2T.js → chunk-ZRIBB4EB.js} +3 -3
@@ -93,6 +93,7 @@ __export(web_exports, {
93
93
  CopyIcon: () => CopyIcon,
94
94
  Copyable: () => Copyable,
95
95
  DEFAULT_AMOUNT_LOCALE: () => DEFAULT_AMOUNT_LOCALE,
96
+ DatePicker: () => DatePicker,
96
97
  DateRangeFilter: () => DateRangeFilter,
97
98
  DepositAssetSelection: () => DepositAssetSelection,
98
99
  DepositGeneratedView: () => DepositGeneratedView,
@@ -1914,10 +1915,9 @@ var DrawerSection = ({ className, label, children, ...props }) => {
1914
1915
  };
1915
1916
  DrawerSection.displayName = "DrawerSection";
1916
1917
  var activeIcon = "[&>span[aria-hidden=true]]:text-status-success";
1917
- var activeRow = cn(
1918
- "bg-primary/10 bg-gradient-active font-semibold text-foreground ring-1 ring-inset ring-primary/40 shadow-nav-active",
1919
- activeIcon
1920
- );
1918
+ var activeRow = cn("bg-primary/15 bg-gradient-active font-semibold text-foreground", activeIcon);
1919
+ var activeGroupRow = cn("bg-primary/[0.06] font-semibold text-foreground", activeIcon);
1920
+ var activeSubRow = cn("bg-primary/[0.14] font-semibold text-brand", activeIcon);
1921
1921
  var idleRow = "text-content-secondary hover-gradient-violet hover:text-foreground hover:shadow-raised";
1922
1922
  var DrawerGroupContext = React12.createContext(false);
1923
1923
  var DrawerNavItem = React12.forwardRef(
@@ -1951,7 +1951,7 @@ var DrawerNavItem = React12.forwardRef(
1951
1951
  title,
1952
1952
  className: cn(
1953
1953
  "flex min-w-0 items-center gap-3 rounded-lg px-4 py-2.5 text-caption transition-all duration-200 focus:outline-none focus-visible:ring-2 focus-visible:ring-ring motion-reduce:transition-none",
1954
- active ? cn("bg-primary/10 bg-gradient-active font-semibold text-brand", activeIcon) : "text-content-secondary hover:translate-x-1 hover-gradient-violet hover:text-foreground motion-reduce:hover:translate-x-0",
1954
+ active ? activeSubRow : "text-content-secondary hover:translate-x-1 hover-gradient-violet hover:text-foreground motion-reduce:hover:translate-x-0",
1955
1955
  className
1956
1956
  ),
1957
1957
  onClick: (event) => {
@@ -2033,7 +2033,7 @@ var DrawerNavGroup = ({
2033
2033
  const rowClass2 = cn(
2034
2034
  "group flex w-full min-w-0 items-center rounded-xl px-4 py-3 text-left transition-all duration-300 hover:scale-[1.02] focus:outline-none focus-visible:ring-2 focus-visible:ring-ring active:scale-95 motion-reduce:transition-none motion-reduce:hover:scale-100",
2035
2035
  collapsed ? "justify-center" : "gap-4",
2036
- active ? activeRow : idleRow
2036
+ active ? collapsed ? activeRow : activeGroupRow : idleRow
2037
2037
  );
2038
2038
  const iconNode = icon && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2039
2039
  "span",
@@ -2052,6 +2052,7 @@ var DrawerNavGroup = ({
2052
2052
  glyph: ChevronRight,
2053
2053
  className: cn(
2054
2054
  "shrink-0 text-icon-md transition-all duration-300 motion-reduce:transition-none",
2055
+ active && "text-brand",
2055
2056
  open && "rotate-90"
2056
2057
  )
2057
2058
  }
@@ -9548,45 +9549,253 @@ function Boundary({ label, value }) {
9548
9549
  ] });
9549
9550
  }
9550
9551
 
9551
- // src/web/components/value-list.tsx
9552
+ // src/web/components/date-picker.tsx
9553
+ var React26 = __toESM(require("react"), 1);
9552
9554
  var import_jsx_runtime98 = require("react/jsx-runtime");
9555
+ var pad = (n) => String(n).padStart(2, "0");
9556
+ var toIso = (d) => `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;
9557
+ function parseIso(value) {
9558
+ const m = /^(\d{4})-(\d{2})-(\d{2})$/.exec(value ?? "");
9559
+ if (!m) return null;
9560
+ const d = new Date(Number(m[1]), Number(m[2]) - 1, Number(m[3]));
9561
+ return toIso(d) === value ? d : null;
9562
+ }
9563
+ var addDays = (d, n) => new Date(d.getFullYear(), d.getMonth(), d.getDate() + n);
9564
+ var startOfMonth = (d) => new Date(d.getFullYear(), d.getMonth(), 1);
9565
+ function DatePicker({
9566
+ value,
9567
+ onChange,
9568
+ placeholder = "Select a date",
9569
+ min,
9570
+ max,
9571
+ disabled,
9572
+ locale = "en-US",
9573
+ weekStartsOn = 1,
9574
+ id,
9575
+ previousMonthLabel = "Previous month",
9576
+ nextMonthLabel = "Next month",
9577
+ clearLabel = "Clear",
9578
+ todayLabel = "Today",
9579
+ className,
9580
+ ...rest
9581
+ }) {
9582
+ const selected = parseIso(value);
9583
+ const minDate = parseIso(min);
9584
+ const maxDate = parseIso(max);
9585
+ const [open, setOpen] = React26.useState(false);
9586
+ const [focused, setFocused] = React26.useState(() => selected ?? /* @__PURE__ */ new Date());
9587
+ const gridRef = React26.useRef(null);
9588
+ const wantFocus = React26.useRef(false);
9589
+ const inRange = (d) => !(minDate && d < minDate) && !(maxDate && d > maxDate);
9590
+ const handleOpenChange = (next) => {
9591
+ if (next) {
9592
+ setFocused(selected ?? /* @__PURE__ */ new Date());
9593
+ wantFocus.current = true;
9594
+ }
9595
+ setOpen(next);
9596
+ };
9597
+ React26.useEffect(() => {
9598
+ if (!open || !wantFocus.current) return;
9599
+ gridRef.current?.querySelector('button[tabindex="0"]')?.focus();
9600
+ }, [open, focused]);
9601
+ const month = startOfMonth(focused);
9602
+ const lead = (month.getDay() - weekStartsOn + 7) % 7;
9603
+ const gridStart = addDays(month, -lead);
9604
+ const days = Array.from({ length: 42 }, (_, i) => addDays(gridStart, i));
9605
+ const rows = [0, 1, 2, 3, 4, 5].filter((r) => days.slice(r * 7, r * 7 + 7).some((d) => d.getMonth() === month.getMonth()));
9606
+ const monthFmt = new Intl.DateTimeFormat(locale, { month: "long", year: "numeric" });
9607
+ const weekdayLong = new Intl.DateTimeFormat(locale, { weekday: "long" });
9608
+ const weekdayShort = new Intl.DateTimeFormat(locale, { weekday: "short" });
9609
+ const dayFull = new Intl.DateTimeFormat(locale, { dateStyle: "full" });
9610
+ const triggerFmt = new Intl.DateTimeFormat(locale, { dateStyle: "medium" });
9611
+ const heads = Array.from({ length: 7 }, (_, i) => addDays(gridStart, i));
9612
+ const move = (next) => {
9613
+ wantFocus.current = true;
9614
+ setFocused(next);
9615
+ };
9616
+ const shiftMonth = (delta) => {
9617
+ const last = new Date(focused.getFullYear(), focused.getMonth() + delta + 1, 0).getDate();
9618
+ move(new Date(focused.getFullYear(), focused.getMonth() + delta, Math.min(focused.getDate(), last)));
9619
+ };
9620
+ const choose = (d) => {
9621
+ if (!inRange(d)) return;
9622
+ onChange(toIso(d));
9623
+ setOpen(false);
9624
+ };
9625
+ const onKeyDown = (event) => {
9626
+ const step = {
9627
+ ArrowLeft: () => addDays(focused, -1),
9628
+ ArrowRight: () => addDays(focused, 1),
9629
+ ArrowUp: () => addDays(focused, -7),
9630
+ ArrowDown: () => addDays(focused, 7),
9631
+ Home: () => addDays(focused, -((focused.getDay() - weekStartsOn + 7) % 7)),
9632
+ End: () => addDays(focused, 6 - (focused.getDay() - weekStartsOn + 7) % 7)
9633
+ };
9634
+ if (event.key === "PageUp" || event.key === "PageDown") {
9635
+ event.preventDefault();
9636
+ shiftMonth(event.key === "PageUp" ? -1 : 1);
9637
+ return;
9638
+ }
9639
+ const next = step[event.key]?.();
9640
+ if (next) {
9641
+ event.preventDefault();
9642
+ move(next);
9643
+ }
9644
+ };
9645
+ const todayIso = toIso(/* @__PURE__ */ new Date());
9646
+ return /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)(Popover, { open, onOpenChange: handleOpenChange, children: [
9647
+ /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)(
9648
+ "button",
9649
+ {
9650
+ type: "button",
9651
+ id,
9652
+ disabled,
9653
+ "aria-label": rest["aria-label"],
9654
+ "data-slot": "date-picker-trigger",
9655
+ className: cn(
9656
+ "flex h-12 w-full items-center justify-between gap-3 px-4 py-3 text-left text-body",
9657
+ fieldSurface,
9658
+ !selected && "text-muted-foreground",
9659
+ className
9660
+ ),
9661
+ children: [
9662
+ /* @__PURE__ */ (0, import_jsx_runtime98.jsx)("span", { className: "truncate", children: selected ? triggerFmt.format(selected) : placeholder }),
9663
+ /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(IconGlyph, { glyph: Event2, "aria-hidden": "true", className: "shrink-0 text-secondary-content" })
9664
+ ]
9665
+ }
9666
+ ) }),
9667
+ /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
9668
+ PopoverContent,
9669
+ {
9670
+ align: "start",
9671
+ className: "w-auto p-3",
9672
+ onOpenAutoFocus: (event) => event.preventDefault(),
9673
+ children: /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("div", { "data-slot": "date-picker", className: "flex flex-col gap-2", children: [
9674
+ /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("div", { className: "flex items-center justify-between gap-2", children: [
9675
+ /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(GlyphButton, { size: "sm", icon: ChevronLeft, label: previousMonthLabel, onClick: () => shiftMonth(-1) }),
9676
+ /* @__PURE__ */ (0, import_jsx_runtime98.jsx)("p", { "aria-live": "polite", className: "m-0 text-caption font-semibold text-foreground", children: monthFmt.format(month) }),
9677
+ /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(GlyphButton, { size: "sm", icon: ChevronRight, label: nextMonthLabel, onClick: () => shiftMonth(1) })
9678
+ ] }),
9679
+ /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)(
9680
+ "div",
9681
+ {
9682
+ ref: gridRef,
9683
+ role: "grid",
9684
+ "aria-label": monthFmt.format(month),
9685
+ onKeyDown,
9686
+ className: "flex flex-col gap-1",
9687
+ children: [
9688
+ /* @__PURE__ */ (0, import_jsx_runtime98.jsx)("div", { role: "row", className: "grid grid-cols-7", children: heads.map((d) => /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
9689
+ "span",
9690
+ {
9691
+ role: "columnheader",
9692
+ "aria-label": weekdayLong.format(d),
9693
+ className: "py-1 text-center text-mini font-medium uppercase tracking-eyebrow text-muted-foreground",
9694
+ children: weekdayShort.format(d).slice(0, 2)
9695
+ },
9696
+ d.getDay()
9697
+ )) }),
9698
+ rows.map((r) => /* @__PURE__ */ (0, import_jsx_runtime98.jsx)("div", { role: "row", className: "grid grid-cols-7 gap-1", children: days.slice(r * 7, r * 7 + 7).map((d) => {
9699
+ const iso = toIso(d);
9700
+ const outside = d.getMonth() !== month.getMonth();
9701
+ const isSelected = iso === value;
9702
+ const isFocused = iso === toIso(focused);
9703
+ const enabled = inRange(d);
9704
+ return /* @__PURE__ */ (0, import_jsx_runtime98.jsx)("span", { role: "gridcell", "aria-selected": isSelected, children: /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
9705
+ "button",
9706
+ {
9707
+ type: "button",
9708
+ tabIndex: isFocused ? 0 : -1,
9709
+ disabled: !enabled,
9710
+ "aria-label": dayFull.format(d),
9711
+ "aria-current": iso === todayIso ? "date" : void 0,
9712
+ "data-date": iso,
9713
+ onClick: () => choose(d),
9714
+ className: cn(
9715
+ "size-9 rounded-xl text-caption tabular-nums transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50 disabled:cursor-not-allowed disabled:opacity-30",
9716
+ isSelected ? "bg-primary font-semibold text-primary-foreground shadow-button-primary" : cn(
9717
+ "hover:bg-foreground/10",
9718
+ outside ? "text-foreground/55" : "text-foreground",
9719
+ iso === todayIso && "font-semibold text-brand"
9720
+ )
9721
+ ),
9722
+ children: d.getDate()
9723
+ }
9724
+ ) }, iso);
9725
+ }) }, r))
9726
+ ]
9727
+ }
9728
+ ),
9729
+ /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("div", { className: "flex items-center justify-between", children: [
9730
+ /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
9731
+ "button",
9732
+ {
9733
+ type: "button",
9734
+ disabled: !selected,
9735
+ onClick: () => {
9736
+ onChange("");
9737
+ setOpen(false);
9738
+ },
9739
+ className: "rounded-lg px-2 py-1 text-caption font-medium text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50 disabled:opacity-40",
9740
+ children: clearLabel
9741
+ }
9742
+ ),
9743
+ /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
9744
+ "button",
9745
+ {
9746
+ type: "button",
9747
+ disabled: !inRange(parseIso(todayIso)),
9748
+ onClick: () => choose(parseIso(todayIso)),
9749
+ className: "rounded-lg px-2 py-1 text-caption font-medium text-brand focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50 disabled:opacity-40",
9750
+ children: todayLabel
9751
+ }
9752
+ )
9753
+ ] })
9754
+ ] })
9755
+ }
9756
+ )
9757
+ ] });
9758
+ }
9759
+
9760
+ // src/web/components/value-list.tsx
9761
+ var import_jsx_runtime99 = require("react/jsx-runtime");
9553
9762
  function ValueList({ values, singular, plural, emptyLabel = "None", defaultOpen = false, className }) {
9554
9763
  if (values.length === 0) {
9555
- return /* @__PURE__ */ (0, import_jsx_runtime98.jsx)("span", { className: cn("text-caption text-muted-foreground", className), children: emptyLabel });
9764
+ return /* @__PURE__ */ (0, import_jsx_runtime99.jsx)("span", { className: cn("text-caption text-muted-foreground", className), children: emptyLabel });
9556
9765
  }
9557
9766
  const summary = `${values.length} ${values.length === 1 ? singular : plural}`;
9558
- return /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)(Collapsible, { defaultOpen, "data-slot": "value-list", className: cn("min-w-0", className), children: [
9559
- /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)(
9767
+ return /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)(Collapsible, { defaultOpen, "data-slot": "value-list", className: cn("min-w-0", className), children: [
9768
+ /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)(
9560
9769
  CollapsibleTrigger,
9561
9770
  {
9562
9771
  type: "button",
9563
9772
  className: "inline-flex items-center gap-1 rounded-lg text-caption font-semibold text-foreground transition-colors hover:text-secondary-content data-[state=open]:text-secondary-content",
9564
9773
  children: [
9565
9774
  summary,
9566
- /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(CollapsibleChevron, {})
9775
+ /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(CollapsibleChevron, {})
9567
9776
  ]
9568
9777
  }
9569
9778
  ),
9570
- /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(CollapsibleContent, { children: /* @__PURE__ */ (0, import_jsx_runtime98.jsx)("ul", { className: "m-0 mt-2 list-none space-y-1 p-0", children: values.map((value, index) => /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("li", { className: "flex items-center gap-1 rounded-xl kui-well px-3 py-1.5", children: [
9571
- /* @__PURE__ */ (0, import_jsx_runtime98.jsx)("span", { className: "min-w-0 select-all break-all font-mono text-caption text-foreground", children: value }),
9572
- /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(CopyButton, { value, label: singular })
9779
+ /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(CollapsibleContent, { children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)("ul", { className: "m-0 mt-2 list-none space-y-1 p-0", children: values.map((value, index) => /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("li", { className: "flex items-center gap-1 rounded-xl kui-well px-3 py-1.5", children: [
9780
+ /* @__PURE__ */ (0, import_jsx_runtime99.jsx)("span", { className: "min-w-0 select-all break-all font-mono text-caption text-foreground", children: value }),
9781
+ /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(CopyButton, { value, label: singular })
9573
9782
  ] }, `${index}-${value}`)) }) })
9574
9783
  ] });
9575
9784
  }
9576
9785
 
9577
9786
  // src/web/components/event-timeline.tsx
9578
- var import_jsx_runtime99 = require("react/jsx-runtime");
9787
+ var import_jsx_runtime100 = require("react/jsx-runtime");
9579
9788
  function EventTimeline({ events, label, className }) {
9580
- return /* @__PURE__ */ (0, import_jsx_runtime99.jsx)("ol", { "aria-label": label, "data-slot": "event-timeline", className: cn("m-0 list-none space-y-1.5 p-0", className), children: events.map((event) => /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)(
9789
+ return /* @__PURE__ */ (0, import_jsx_runtime100.jsx)("ol", { "aria-label": label, "data-slot": "event-timeline", className: cn("m-0 list-none space-y-1.5 p-0", className), children: events.map((event) => /* @__PURE__ */ (0, import_jsx_runtime100.jsxs)(
9581
9790
  "li",
9582
9791
  {
9583
9792
  "data-slot": "event-timeline-item",
9584
9793
  className: "relative flex items-baseline justify-between gap-3 rounded-xl kui-well py-2.5 pl-7 pr-3 before:absolute before:left-3 before:top-1/2 before:size-1.5 before:-translate-y-1/2 before:rounded-full before:bg-primary/60 last:before:bg-primary last:before:shadow-glow-primary-soft",
9585
9794
  children: [
9586
- /* @__PURE__ */ (0, import_jsx_runtime99.jsx)("span", { className: "min-w-0 text-caption font-medium text-foreground", children: event.label }),
9587
- /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("span", { className: "flex shrink-0 items-baseline gap-2 text-caption tabular-nums text-muted-foreground", children: [
9588
- event.duration !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime99.jsx)("span", { "data-slot": "event-timeline-duration", children: event.duration }),
9589
- /* @__PURE__ */ (0, import_jsx_runtime99.jsx)("time", { dateTime: event.dateTime, children: event.timestamp })
9795
+ /* @__PURE__ */ (0, import_jsx_runtime100.jsx)("span", { className: "min-w-0 text-caption font-medium text-foreground", children: event.label }),
9796
+ /* @__PURE__ */ (0, import_jsx_runtime100.jsxs)("span", { className: "flex shrink-0 items-baseline gap-2 text-caption tabular-nums text-muted-foreground", children: [
9797
+ event.duration !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime100.jsx)("span", { "data-slot": "event-timeline-duration", children: event.duration }),
9798
+ /* @__PURE__ */ (0, import_jsx_runtime100.jsx)("time", { dateTime: event.dateTime, children: event.timestamp })
9590
9799
  ] })
9591
9800
  ]
9592
9801
  },
@@ -9596,7 +9805,7 @@ function EventTimeline({ events, label, className }) {
9596
9805
 
9597
9806
  // src/web/components/notice-bar.tsx
9598
9807
  var import_react28 = require("react");
9599
- var import_jsx_runtime100 = require("react/jsx-runtime");
9808
+ var import_jsx_runtime101 = require("react/jsx-runtime");
9600
9809
  var useIsomorphicLayoutEffect2 = typeof window === "undefined" ? import_react28.useEffect : import_react28.useLayoutEffect;
9601
9810
  function NoticeBar({ children, hidden = false, heightVariable = "--kui-notice-height", className }) {
9602
9811
  const ref = (0, import_react28.useRef)(null);
@@ -9625,7 +9834,7 @@ function NoticeBar({ children, hidden = false, heightVariable = "--kui-notice-he
9625
9834
  };
9626
9835
  }, [hidden, heightVariable]);
9627
9836
  if (hidden) return null;
9628
- return /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(
9837
+ return /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(
9629
9838
  "div",
9630
9839
  {
9631
9840
  ref,
@@ -9637,7 +9846,7 @@ function NoticeBar({ children, hidden = false, heightVariable = "--kui-notice-he
9637
9846
  }
9638
9847
 
9639
9848
  // src/web/components/floating-notice.tsx
9640
- var import_jsx_runtime101 = require("react/jsx-runtime");
9849
+ var import_jsx_runtime102 = require("react/jsx-runtime");
9641
9850
  function FloatingNotice({
9642
9851
  children,
9643
9852
  onDismiss,
@@ -9647,7 +9856,7 @@ function FloatingNotice({
9647
9856
  className
9648
9857
  }) {
9649
9858
  const showClose = dismissible && Boolean(onDismiss);
9650
- return /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(
9859
+ return /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(
9651
9860
  "div",
9652
9861
  {
9653
9862
  "data-slot": "floating-notice",
@@ -9656,16 +9865,16 @@ function FloatingNotice({
9656
9865
  "fixed bottom-4 left-1/2 z-[var(--z-modal)] w-[min(32rem,calc(100vw-2rem))] -translate-x-1/2 rounded-2xl bg-card bg-gradient-card-hero shadow-toast",
9657
9866
  className
9658
9867
  ),
9659
- children: /* @__PURE__ */ (0, import_jsx_runtime101.jsxs)("div", { className: "relative", children: [
9868
+ children: /* @__PURE__ */ (0, import_jsx_runtime102.jsxs)("div", { className: "relative", children: [
9660
9869
  children,
9661
- showClose && /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(GlyphButton, { icon: Close, label: dismissLabel, size: "sm", onClick: onDismiss, className: "absolute right-2 top-2" })
9870
+ showClose && /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(GlyphButton, { icon: Close, label: dismissLabel, size: "sm", onClick: onDismiss, className: "absolute right-2 top-2" })
9662
9871
  ] })
9663
9872
  }
9664
9873
  );
9665
9874
  }
9666
9875
 
9667
9876
  // src/web/components/summary-rows.tsx
9668
- var import_jsx_runtime102 = require("react/jsx-runtime");
9877
+ var import_jsx_runtime103 = require("react/jsx-runtime");
9669
9878
  var valueTone = {
9670
9879
  default: "text-foreground",
9671
9880
  primary: "text-brand",
@@ -9680,18 +9889,18 @@ function SummaryRows({ rows, as = "dl", className }) {
9680
9889
  const isDl = as === "dl";
9681
9890
  const Label4 = isDl ? "dt" : "span";
9682
9891
  const Value2 = isDl ? "dd" : "div";
9683
- return /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(
9892
+ return /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(
9684
9893
  List2,
9685
9894
  {
9686
9895
  "data-slot": "summary-rows",
9687
9896
  className: cn("m-0 list-none p-0", className),
9688
9897
  children: rows.map((row, index) => {
9689
9898
  const muted = row.tone === "muted";
9690
- const content = /* @__PURE__ */ (0, import_jsx_runtime102.jsxs)(import_jsx_runtime102.Fragment, { children: [
9691
- /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(Label4, { className: "shrink-0 text-caption text-muted-foreground", children: row.label }),
9692
- /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(DottedLeader, {}),
9693
- /* @__PURE__ */ (0, import_jsx_runtime102.jsxs)(Value2, { className: "m-0 flex min-w-0 max-w-[65%] items-baseline gap-2", children: [
9694
- /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(
9899
+ const content = /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(import_jsx_runtime103.Fragment, { children: [
9900
+ /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Label4, { className: "shrink-0 text-caption text-muted-foreground", children: row.label }),
9901
+ /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(DottedLeader, {}),
9902
+ /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(Value2, { className: "m-0 flex min-w-0 max-w-[65%] items-baseline gap-2", children: [
9903
+ /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(
9695
9904
  "span",
9696
9905
  {
9697
9906
  className: cn(
@@ -9703,7 +9912,7 @@ function SummaryRows({ rows, as = "dl", className }) {
9703
9912
  children: row.value
9704
9913
  }
9705
9914
  ),
9706
- row.hint && /* @__PURE__ */ (0, import_jsx_runtime102.jsx)("span", { className: "shrink-0 text-xxs text-muted-foreground", children: row.hint })
9915
+ row.hint && /* @__PURE__ */ (0, import_jsx_runtime103.jsx)("span", { className: "shrink-0 text-xxs text-muted-foreground", children: row.hint })
9707
9916
  ] })
9708
9917
  ] });
9709
9918
  const rowProps = {
@@ -9711,16 +9920,16 @@ function SummaryRows({ rows, as = "dl", className }) {
9711
9920
  "data-emphasis": row.emphasis ? "true" : void 0,
9712
9921
  className: rowClass
9713
9922
  };
9714
- return isDl ? /* @__PURE__ */ (0, import_jsx_runtime102.jsx)("div", { ...rowProps, children: content }, index) : /* @__PURE__ */ (0, import_jsx_runtime102.jsx)("li", { ...rowProps, children: content }, index);
9923
+ return isDl ? /* @__PURE__ */ (0, import_jsx_runtime103.jsx)("div", { ...rowProps, children: content }, index) : /* @__PURE__ */ (0, import_jsx_runtime103.jsx)("li", { ...rowProps, children: content }, index);
9715
9924
  })
9716
9925
  }
9717
9926
  );
9718
9927
  }
9719
9928
 
9720
9929
  // src/web/components/section-label.tsx
9721
- var import_jsx_runtime103 = require("react/jsx-runtime");
9930
+ var import_jsx_runtime104 = require("react/jsx-runtime");
9722
9931
  function SectionLabel({ children, className }) {
9723
- return /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(
9932
+ return /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(
9724
9933
  "span",
9725
9934
  {
9726
9935
  className: cn("text-mini font-medium uppercase tracking-eyebrow-wide text-muted-foreground", className),
@@ -9730,21 +9939,21 @@ function SectionLabel({ children, className }) {
9730
9939
  }
9731
9940
 
9732
9941
  // src/web/components/section-header.tsx
9733
- var import_jsx_runtime104 = require("react/jsx-runtime");
9942
+ var import_jsx_runtime105 = require("react/jsx-runtime");
9734
9943
  function SectionHeader({
9735
9944
  children,
9736
9945
  right,
9737
9946
  as: Tag = "h2",
9738
9947
  className
9739
9948
  }) {
9740
- return /* @__PURE__ */ (0, import_jsx_runtime104.jsxs)("div", { className: cn("flex items-center justify-between gap-3 px-1", className), children: [
9741
- /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(Tag, { className: cn("text-muted-foreground", eyebrow), children }),
9949
+ return /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)("div", { className: cn("flex items-center justify-between gap-3 px-1", className), children: [
9950
+ /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(Tag, { className: cn("text-muted-foreground", eyebrow), children }),
9742
9951
  right
9743
9952
  ] });
9744
9953
  }
9745
9954
 
9746
9955
  // src/web/components/info-chip.tsx
9747
- var import_jsx_runtime105 = require("react/jsx-runtime");
9956
+ var import_jsx_runtime106 = require("react/jsx-runtime");
9748
9957
  var defaultStatusLabel = {
9749
9958
  success: "Success",
9750
9959
  warning: "Warning",
@@ -9770,7 +9979,7 @@ var statusDotClass = {
9770
9979
  info: "bg-secondary-content"
9771
9980
  };
9772
9981
  function StatusChip2({ status, label, pulse = true, className }) {
9773
- return /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)(
9982
+ return /* @__PURE__ */ (0, import_jsx_runtime106.jsxs)(
9774
9983
  "span",
9775
9984
  {
9776
9985
  "data-slot": "status-chip",
@@ -9781,17 +9990,17 @@ function StatusChip2({ status, label, pulse = true, className }) {
9781
9990
  className
9782
9991
  ),
9783
9992
  children: [
9784
- /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)("span", { "aria-hidden": "true", className: "relative flex size-1.5 shrink-0", children: [
9785
- pulse && /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(
9993
+ /* @__PURE__ */ (0, import_jsx_runtime106.jsxs)("span", { "aria-hidden": "true", className: "relative flex size-1.5 shrink-0", children: [
9994
+ pulse && /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(
9786
9995
  "span",
9787
9996
  {
9788
9997
  "data-slot": "status-chip-pulse",
9789
9998
  className: cn("absolute inset-0 rounded-full opacity-0 motion-safe:animate-ping motion-safe:opacity-75", statusDotClass[status])
9790
9999
  }
9791
10000
  ),
9792
- /* @__PURE__ */ (0, import_jsx_runtime105.jsx)("span", { className: cn("relative size-1.5 rounded-full", statusDotClass[status]) })
10001
+ /* @__PURE__ */ (0, import_jsx_runtime106.jsx)("span", { className: cn("relative size-1.5 rounded-full", statusDotClass[status]) })
9793
10002
  ] }),
9794
- /* @__PURE__ */ (0, import_jsx_runtime105.jsx)("span", { className: "truncate", children: label ?? defaultStatusLabel[status] })
10003
+ /* @__PURE__ */ (0, import_jsx_runtime106.jsx)("span", { className: "truncate", children: label ?? defaultStatusLabel[status] })
9795
10004
  ]
9796
10005
  }
9797
10006
  );
@@ -9811,7 +10020,7 @@ function InfoChip({
9811
10020
  "data-info-kind": dataInfoKind
9812
10021
  }) {
9813
10022
  const readableStatus = status ? statusLabel ?? defaultStatusLabel[status] : null;
9814
- return /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)(
10023
+ return /* @__PURE__ */ (0, import_jsx_runtime106.jsxs)(
9815
10024
  "div",
9816
10025
  {
9817
10026
  "data-slot": "info-chip",
@@ -9823,7 +10032,7 @@ function InfoChip({
9823
10032
  className
9824
10033
  ),
9825
10034
  children: [
9826
- leading && /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(
10035
+ leading && /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(
9827
10036
  "span",
9828
10037
  {
9829
10038
  "aria-hidden": "true",
@@ -9834,10 +10043,10 @@ function InfoChip({
9834
10043
  children: leading
9835
10044
  }
9836
10045
  ),
9837
- /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)("dl", { className: "min-w-0 flex-1", children: [
9838
- /* @__PURE__ */ (0, import_jsx_runtime105.jsx)("dt", { className: cn("truncate text-muted-foreground", eyebrow), children: label }),
9839
- /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)("dd", { className: "mt-0.5 flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1", children: [
9840
- /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(
10046
+ /* @__PURE__ */ (0, import_jsx_runtime106.jsxs)("dl", { className: "min-w-0 flex-1", children: [
10047
+ /* @__PURE__ */ (0, import_jsx_runtime106.jsx)("dt", { className: cn("truncate text-muted-foreground", eyebrow), children: label }),
10048
+ /* @__PURE__ */ (0, import_jsx_runtime106.jsxs)("dd", { className: "mt-0.5 flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1", children: [
10049
+ /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(
9841
10050
  "span",
9842
10051
  {
9843
10052
  className: cn(
@@ -9847,10 +10056,10 @@ function InfoChip({
9847
10056
  children: value
9848
10057
  }
9849
10058
  ),
9850
- status && /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(StatusChip2, { status, label: readableStatus ?? void 0 })
10059
+ status && /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(StatusChip2, { status, label: readableStatus ?? void 0 })
9851
10060
  ] })
9852
10061
  ] }),
9853
- onEdit && /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(GlyphButton, { icon: Edit, label: editLabel, onClick: onEdit, disabled: editDisabled })
10062
+ onEdit && /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(GlyphButton, { icon: Edit, label: editLabel, onClick: onEdit, disabled: editDisabled })
9854
10063
  ]
9855
10064
  }
9856
10065
  );
@@ -9862,12 +10071,12 @@ function NetworkInfoChip({
9862
10071
  iconBasePath,
9863
10072
  ...infoChipProps
9864
10073
  }) {
9865
- return /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(
10074
+ return /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(
9866
10075
  InfoChip,
9867
10076
  {
9868
10077
  ...infoChipProps,
9869
10078
  "data-info-kind": "network",
9870
- leading: /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(NetworkBadge, { network, iconBasePath, size: "md" }),
10079
+ leading: /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(NetworkBadge, { network, iconBasePath, size: "md" }),
9871
10080
  label,
9872
10081
  value
9873
10082
  }
@@ -9881,12 +10090,12 @@ function AssetInfoChip({
9881
10090
  cdnBaseUrl,
9882
10091
  ...infoChipProps
9883
10092
  }) {
9884
- return /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(
10093
+ return /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(
9885
10094
  InfoChip,
9886
10095
  {
9887
10096
  ...infoChipProps,
9888
10097
  "data-info-kind": "asset",
9889
- leading: /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(AssetIcon, { ticker, logoUri, cdnBaseUrl, size: 28 }),
10098
+ leading: /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(AssetIcon, { ticker, logoUri, cdnBaseUrl, size: 28 }),
9890
10099
  label,
9891
10100
  value
9892
10101
  }
@@ -9895,7 +10104,7 @@ function AssetInfoChip({
9895
10104
 
9896
10105
  // src/web/components/error-boundary.tsx
9897
10106
  var import_react29 = require("react");
9898
- var import_jsx_runtime106 = require("react/jsx-runtime");
10107
+ var import_jsx_runtime107 = require("react/jsx-runtime");
9899
10108
  var ErrorBoundary = class extends import_react29.Component {
9900
10109
  constructor(props) {
9901
10110
  super(props);
@@ -9909,11 +10118,11 @@ var ErrorBoundary = class extends import_react29.Component {
9909
10118
  }
9910
10119
  render() {
9911
10120
  if (this.state.hasError) {
9912
- return this.props.fallback ?? /* @__PURE__ */ (0, import_jsx_runtime106.jsxs)("div", { className: "min-h-screen bg-background bg-page-radial text-foreground font-display flex flex-col items-center justify-center p-6 gap-4", children: [
9913
- /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(IconGlyph, { glyph: Error2, className: "text-danger-fg text-icon-5xl" }),
9914
- /* @__PURE__ */ (0, import_jsx_runtime106.jsx)("h2", { className: "text-subhead font-bold", children: "Something went wrong" }),
9915
- /* @__PURE__ */ (0, import_jsx_runtime106.jsx)("p", { className: "text-caption text-muted-foreground text-center", children: this.state.error?.message ?? "An unexpected error occurred." }),
9916
- /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(
10121
+ return this.props.fallback ?? /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)("div", { className: "min-h-screen bg-background bg-page-radial text-foreground font-display flex flex-col items-center justify-center p-6 gap-4", children: [
10122
+ /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(IconGlyph, { glyph: Error2, className: "text-danger-fg text-icon-5xl" }),
10123
+ /* @__PURE__ */ (0, import_jsx_runtime107.jsx)("h2", { className: "text-subhead font-bold", children: "Something went wrong" }),
10124
+ /* @__PURE__ */ (0, import_jsx_runtime107.jsx)("p", { className: "text-caption text-muted-foreground text-center", children: this.state.error?.message ?? "An unexpected error occurred." }),
10125
+ /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(
9917
10126
  "button",
9918
10127
  {
9919
10128
  onClick: () => {
@@ -9931,7 +10140,7 @@ var ErrorBoundary = class extends import_react29.Component {
9931
10140
  };
9932
10141
 
9933
10142
  // src/web/components/recovery-phrase-card.tsx
9934
- var import_jsx_runtime107 = require("react/jsx-runtime");
10143
+ var import_jsx_runtime108 = require("react/jsx-runtime");
9935
10144
  function RecoveryPhraseCard({
9936
10145
  words,
9937
10146
  revealed = false,
@@ -9950,10 +10159,10 @@ function RecoveryPhraseCard({
9950
10159
  const selfCopy = !onCopy && copyValue !== void 0;
9951
10160
  const handleCopy = onCopy ?? (selfCopy ? () => void clipboard.copy(copyValue) : void 0);
9952
10161
  const copied = selfCopy && clipboard.state === "copied";
9953
- return /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)("section", { className: cn("space-y-2", className), children: [
9954
- /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)("div", { className: "flex items-center justify-between px-0.5", children: [
9955
- /* @__PURE__ */ (0, import_jsx_runtime107.jsx)("p", { className: cn("text-muted-foreground", eyebrow), children: title }),
9956
- hasWords && revealed && onRevealChange && /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)(
10162
+ return /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)("section", { className: cn("space-y-2", className), children: [
10163
+ /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)("div", { className: "flex items-center justify-between px-0.5", children: [
10164
+ /* @__PURE__ */ (0, import_jsx_runtime108.jsx)("p", { className: cn("text-muted-foreground", eyebrow), children: title }),
10165
+ hasWords && revealed && onRevealChange && /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)(
9957
10166
  Button,
9958
10167
  {
9959
10168
  type: "button",
@@ -9961,27 +10170,27 @@ function RecoveryPhraseCard({
9961
10170
  size: "xs",
9962
10171
  onClick: () => onRevealChange(!revealed),
9963
10172
  children: [
9964
- /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(IconGlyph, { glyph: VisibilityOff, className: "text-icon-md" }),
10173
+ /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(IconGlyph, { glyph: VisibilityOff, className: "text-icon-md" }),
9965
10174
  "Hide"
9966
10175
  ]
9967
10176
  }
9968
10177
  )
9969
10178
  ] }),
9970
- /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)("div", { className: "relative", children: [
9971
- hasWords ? /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(
10179
+ /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)("div", { className: "relative", children: [
10180
+ hasWords ? /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(
9972
10181
  "div",
9973
10182
  {
9974
10183
  className: cn(
9975
10184
  "grid grid-cols-3 gap-2 transition-all duration-300",
9976
10185
  !revealed && "pointer-events-none select-none blur-sm"
9977
10186
  ),
9978
- children: words.map((word, index) => /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)("div", { className: "flex items-center gap-2 rounded-xl bg-card bg-gradient-card px-3 py-2.5 shadow-raised", children: [
9979
- /* @__PURE__ */ (0, import_jsx_runtime107.jsx)("span", { className: "w-4 shrink-0 text-caption font-bold text-secondary-content", children: index + 1 }),
9980
- /* @__PURE__ */ (0, import_jsx_runtime107.jsx)("span", { className: "font-mono text-body text-foreground", children: word })
10187
+ children: words.map((word, index) => /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)("div", { className: "flex items-center gap-2 rounded-xl bg-card bg-gradient-card px-3 py-2.5 shadow-raised", children: [
10188
+ /* @__PURE__ */ (0, import_jsx_runtime108.jsx)("span", { className: "w-4 shrink-0 text-caption font-bold text-secondary-content", children: index + 1 }),
10189
+ /* @__PURE__ */ (0, import_jsx_runtime108.jsx)("span", { className: "font-mono text-body text-foreground", children: word })
9981
10190
  ] }, `${index}-${word}`))
9982
10191
  }
9983
- ) : /* @__PURE__ */ (0, import_jsx_runtime107.jsx)("div", { className: "rounded-xl bg-warning/10 px-4 py-3 text-body text-warning-fg", children: emptyMessage }),
9984
- hasWords && !revealed && onRevealChange && /* @__PURE__ */ (0, import_jsx_runtime107.jsx)("div", { className: "absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)(
10192
+ ) : /* @__PURE__ */ (0, import_jsx_runtime108.jsx)("div", { className: "rounded-xl bg-warning/10 px-4 py-3 text-body text-warning-fg", children: emptyMessage }),
10193
+ hasWords && !revealed && onRevealChange && /* @__PURE__ */ (0, import_jsx_runtime108.jsx)("div", { className: "absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)(
9985
10194
  Button,
9986
10195
  {
9987
10196
  type: "button",
@@ -9989,13 +10198,13 @@ function RecoveryPhraseCard({
9989
10198
  size: "sm",
9990
10199
  onClick: () => onRevealChange(true),
9991
10200
  children: [
9992
- /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(IconGlyph, { glyph: Visibility, className: "text-icon-lg" }),
10201
+ /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(IconGlyph, { glyph: Visibility, className: "text-icon-lg" }),
9993
10202
  "Tap to reveal"
9994
10203
  ]
9995
10204
  }
9996
10205
  ) })
9997
10206
  ] }),
9998
- hasWords && revealed && handleCopy && /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)(
10207
+ hasWords && revealed && handleCopy && /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)(
9999
10208
  Button,
10000
10209
  {
10001
10210
  type: "button",
@@ -10004,18 +10213,18 @@ function RecoveryPhraseCard({
10004
10213
  onClick: handleCopy,
10005
10214
  className: cn("w-full", copied && "bg-primary/10 bg-gradient-active text-brand ring-primary/40 hover:ring-primary/50"),
10006
10215
  children: [
10007
- /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(IconGlyph, { glyph: copied ? Check : ContentCopy, className: "text-icon-lg" }),
10216
+ /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(IconGlyph, { glyph: copied ? Check : ContentCopy, className: "text-icon-lg" }),
10008
10217
  copied ? copiedLabel : copyLabel
10009
10218
  ]
10010
10219
  }
10011
10220
  ),
10012
- selfCopy && clipboard.state === "failed" && /* @__PURE__ */ (0, import_jsx_runtime107.jsx)("p", { role: "alert", className: "m-0 text-caption text-danger-fg", children: copyFailedMessage }),
10013
- selfCopy && /* @__PURE__ */ (0, import_jsx_runtime107.jsx)("span", { "aria-live": "polite", className: "sr-only", children: copied ? copiedLabel : "" })
10221
+ selfCopy && clipboard.state === "failed" && /* @__PURE__ */ (0, import_jsx_runtime108.jsx)("p", { role: "alert", className: "m-0 text-caption text-danger-fg", children: copyFailedMessage }),
10222
+ selfCopy && /* @__PURE__ */ (0, import_jsx_runtime108.jsx)("span", { "aria-live": "polite", className: "sr-only", children: copied ? copiedLabel : "" })
10014
10223
  ] });
10015
10224
  }
10016
10225
 
10017
10226
  // src/web/components/settings-selector-row.tsx
10018
- var import_jsx_runtime108 = require("react/jsx-runtime");
10227
+ var import_jsx_runtime109 = require("react/jsx-runtime");
10019
10228
  function SettingsSelectorRow({
10020
10229
  icon,
10021
10230
  title,
@@ -10024,9 +10233,9 @@ function SettingsSelectorRow({
10024
10233
  className,
10025
10234
  iconClassName
10026
10235
  }) {
10027
- return /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)("div", { className: cn("flex items-start justify-between gap-3 rounded-2xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card p-5 shadow-card-secondary", className), children: [
10028
- /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)("div", { className: "flex min-w-0 flex-1 items-start gap-3", children: [
10029
- /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(
10236
+ return /* @__PURE__ */ (0, import_jsx_runtime109.jsxs)("div", { className: cn("flex items-start justify-between gap-3 rounded-2xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card p-5 shadow-card-secondary", className), children: [
10237
+ /* @__PURE__ */ (0, import_jsx_runtime109.jsxs)("div", { className: "flex min-w-0 flex-1 items-start gap-3", children: [
10238
+ /* @__PURE__ */ (0, import_jsx_runtime109.jsx)(
10030
10239
  "div",
10031
10240
  {
10032
10241
  className: cn(
@@ -10036,17 +10245,17 @@ function SettingsSelectorRow({
10036
10245
  children: icon
10037
10246
  }
10038
10247
  ),
10039
- /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col", children: [
10040
- /* @__PURE__ */ (0, import_jsx_runtime108.jsx)("span", { className: "text-body font-bold tracking-wide text-foreground", children: title }),
10041
- description && /* @__PURE__ */ (0, import_jsx_runtime108.jsx)("span", { className: "mt-0.5 text-caption font-medium text-muted-foreground", children: description })
10248
+ /* @__PURE__ */ (0, import_jsx_runtime109.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col", children: [
10249
+ /* @__PURE__ */ (0, import_jsx_runtime109.jsx)("span", { className: "text-body font-bold tracking-wide text-foreground", children: title }),
10250
+ description && /* @__PURE__ */ (0, import_jsx_runtime109.jsx)("span", { className: "mt-0.5 text-caption font-medium text-muted-foreground", children: description })
10042
10251
  ] })
10043
10252
  ] }),
10044
- /* @__PURE__ */ (0, import_jsx_runtime108.jsx)("div", { className: "shrink-0", children: control })
10253
+ /* @__PURE__ */ (0, import_jsx_runtime109.jsx)("div", { className: "shrink-0", children: control })
10045
10254
  ] });
10046
10255
  }
10047
10256
 
10048
10257
  // src/web/components/bottom-sheet.tsx
10049
- var import_jsx_runtime109 = require("react/jsx-runtime");
10258
+ var import_jsx_runtime110 = require("react/jsx-runtime");
10050
10259
  function BottomSheet({
10051
10260
  open,
10052
10261
  title,
@@ -10062,7 +10271,7 @@ function BottomSheet({
10062
10271
  const handleBackdropClick = (event) => {
10063
10272
  if (closeOnBackdrop && event.target === event.currentTarget) onClose?.();
10064
10273
  };
10065
- return /* @__PURE__ */ (0, import_jsx_runtime109.jsx)(
10274
+ return /* @__PURE__ */ (0, import_jsx_runtime110.jsx)(
10066
10275
  "div",
10067
10276
  {
10068
10277
  className: cn(
@@ -10070,7 +10279,7 @@ function BottomSheet({
10070
10279
  className
10071
10280
  ),
10072
10281
  onClick: handleBackdropClick,
10073
- children: /* @__PURE__ */ (0, import_jsx_runtime109.jsxs)(
10282
+ children: /* @__PURE__ */ (0, import_jsx_runtime110.jsxs)(
10074
10283
  ScrollArea,
10075
10284
  {
10076
10285
  className: cn(
@@ -10079,13 +10288,13 @@ function BottomSheet({
10079
10288
  ),
10080
10289
  viewportClassName: "max-h-[90vh] px-4 pb-6 pt-5",
10081
10290
  children: [
10082
- /* @__PURE__ */ (0, import_jsx_runtime109.jsx)("div", { className: "-mt-1 flex justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime109.jsx)("div", { className: "h-1 w-10 rounded-full bg-secondary/40" }) }),
10083
- (title || icon) && /* @__PURE__ */ (0, import_jsx_runtime109.jsxs)("div", { className: "mt-4 flex items-center gap-2", children: [
10291
+ /* @__PURE__ */ (0, import_jsx_runtime110.jsx)("div", { className: "-mt-1 flex justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime110.jsx)("div", { className: "h-1 w-10 rounded-full bg-secondary/40" }) }),
10292
+ (title || icon) && /* @__PURE__ */ (0, import_jsx_runtime110.jsxs)("div", { className: "mt-4 flex items-center gap-2", children: [
10084
10293
  icon,
10085
- /* @__PURE__ */ (0, import_jsx_runtime109.jsx)("p", { className: "text-body font-bold text-foreground", children: title })
10294
+ /* @__PURE__ */ (0, import_jsx_runtime110.jsx)("p", { className: "text-body font-bold text-foreground", children: title })
10086
10295
  ] }),
10087
- /* @__PURE__ */ (0, import_jsx_runtime109.jsx)("div", { className: cn((title || icon) && "mt-3"), children }),
10088
- actions && actions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime109.jsx)("div", { className: "mt-4 flex gap-2", children: actions.map((action, index) => /* @__PURE__ */ (0, import_jsx_runtime109.jsxs)(
10296
+ /* @__PURE__ */ (0, import_jsx_runtime110.jsx)("div", { className: cn((title || icon) && "mt-3"), children }),
10297
+ actions && actions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime110.jsx)("div", { className: "mt-4 flex gap-2", children: actions.map((action, index) => /* @__PURE__ */ (0, import_jsx_runtime110.jsxs)(
10089
10298
  Button,
10090
10299
  {
10091
10300
  type: "button",
@@ -10095,7 +10304,7 @@ function BottomSheet({
10095
10304
  onClick: action.onClick,
10096
10305
  disabled: action.disabled,
10097
10306
  children: [
10098
- action.icon && /* @__PURE__ */ (0, import_jsx_runtime109.jsx)(Icon, { name: action.icon, className: "text-icon-md" }),
10307
+ action.icon && /* @__PURE__ */ (0, import_jsx_runtime110.jsx)(Icon, { name: action.icon, className: "text-icon-md" }),
10099
10308
  action.label
10100
10309
  ]
10101
10310
  },
@@ -10109,7 +10318,7 @@ function BottomSheet({
10109
10318
  }
10110
10319
 
10111
10320
  // src/web/components/basic-collapsible.tsx
10112
- var import_jsx_runtime110 = require("react/jsx-runtime");
10321
+ var import_jsx_runtime111 = require("react/jsx-runtime");
10113
10322
  function BasicCollapsible({
10114
10323
  title,
10115
10324
  children,
@@ -10120,7 +10329,7 @@ function BasicCollapsible({
10120
10329
  triggerClassName,
10121
10330
  contentClassName
10122
10331
  }) {
10123
- return /* @__PURE__ */ (0, import_jsx_runtime110.jsxs)(
10332
+ return /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)(
10124
10333
  Collapsible,
10125
10334
  {
10126
10335
  open,
@@ -10129,7 +10338,7 @@ function BasicCollapsible({
10129
10338
  "data-slot": "basic-collapsible",
10130
10339
  className: cn("overflow-hidden rounded-xl bg-surface-inset/40 shadow-raised", className),
10131
10340
  children: [
10132
- /* @__PURE__ */ (0, import_jsx_runtime110.jsxs)(
10341
+ /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)(
10133
10342
  CollapsibleTrigger,
10134
10343
  {
10135
10344
  className: cn(
@@ -10138,18 +10347,18 @@ function BasicCollapsible({
10138
10347
  ),
10139
10348
  children: [
10140
10349
  title,
10141
- /* @__PURE__ */ (0, import_jsx_runtime110.jsx)(CollapsibleChevron, {})
10350
+ /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(CollapsibleChevron, {})
10142
10351
  ]
10143
10352
  }
10144
10353
  ),
10145
- /* @__PURE__ */ (0, import_jsx_runtime110.jsx)(CollapsibleContent, { className: cn("px-3 pb-3 pt-1 text-caption text-muted-foreground", contentClassName), children })
10354
+ /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(CollapsibleContent, { className: cn("px-3 pb-3 pt-1 text-caption text-muted-foreground", contentClassName), children })
10146
10355
  ]
10147
10356
  }
10148
10357
  );
10149
10358
  }
10150
10359
 
10151
10360
  // src/web/components/stepper-number-input.tsx
10152
- var import_jsx_runtime111 = require("react/jsx-runtime");
10361
+ var import_jsx_runtime112 = require("react/jsx-runtime");
10153
10362
  function StepperNumberInput({
10154
10363
  value,
10155
10364
  onChange,
@@ -10166,7 +10375,7 @@ function StepperNumberInput({
10166
10375
  const bounded = max === void 0 ? boundedMin : Math.min(max, boundedMin);
10167
10376
  onChange(Number.isFinite(bounded) ? bounded : min ?? 0);
10168
10377
  };
10169
- return /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)(
10378
+ return /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)(
10170
10379
  "div",
10171
10380
  {
10172
10381
  className: cn(
@@ -10174,7 +10383,7 @@ function StepperNumberInput({
10174
10383
  className
10175
10384
  ),
10176
10385
  children: [
10177
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(
10386
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(
10178
10387
  "button",
10179
10388
  {
10180
10389
  type: "button",
@@ -10182,10 +10391,10 @@ function StepperNumberInput({
10182
10391
  disabled: disabled || min !== void 0 && value <= min,
10183
10392
  onClick: () => clamp(value - step),
10184
10393
  "aria-label": "Decrease",
10185
- children: /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(IconGlyph, { glyph: Remove, className: "text-icon-md" })
10394
+ children: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(IconGlyph, { glyph: Remove, className: "text-icon-md" })
10186
10395
  }
10187
10396
  ),
10188
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(
10397
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(
10189
10398
  "input",
10190
10399
  {
10191
10400
  type: "number",
@@ -10202,7 +10411,7 @@ function StepperNumberInput({
10202
10411
  )
10203
10412
  }
10204
10413
  ),
10205
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(
10414
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(
10206
10415
  "button",
10207
10416
  {
10208
10417
  type: "button",
@@ -10210,7 +10419,7 @@ function StepperNumberInput({
10210
10419
  disabled: disabled || max !== void 0 && value >= max,
10211
10420
  onClick: () => clamp(value + step),
10212
10421
  "aria-label": "Increase",
10213
- children: /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(IconGlyph, { glyph: Add, className: "text-icon-md" })
10422
+ children: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(IconGlyph, { glyph: Add, className: "text-icon-md" })
10214
10423
  }
10215
10424
  )
10216
10425
  ]
@@ -10220,7 +10429,7 @@ function StepperNumberInput({
10220
10429
 
10221
10430
  // src/web/components/metric-card.tsx
10222
10431
  var import_react30 = require("react");
10223
- var import_jsx_runtime112 = require("react/jsx-runtime");
10432
+ var import_jsx_runtime113 = require("react/jsx-runtime");
10224
10433
  var toneClasses2 = {
10225
10434
  primary: "bg-primary/10 text-brand",
10226
10435
  purple: "bg-network-arkade/10 text-network-arkade-fg",
@@ -10250,7 +10459,7 @@ function MetricCard({
10250
10459
  const hasEnd = placement === "end" || !!trend;
10251
10460
  const iconBox = comfortable ? "size-9 rounded-xl shadow-raised" : placement === "end" ? "size-7 rounded-lg" : "size-5 rounded-md";
10252
10461
  const iconGlyph = comfortable ? "text-icon-lg" : placement === "end" ? "text-icon-md" : "text-icon-xs";
10253
- const iconNode = icon ? /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(
10462
+ const iconNode = icon ? /* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
10254
10463
  "span",
10255
10464
  {
10256
10465
  "data-slot": "metric-card-icon",
@@ -10259,11 +10468,11 @@ function MetricCard({
10259
10468
  iconBox,
10260
10469
  toneClasses2[tone]
10261
10470
  ),
10262
- children: typeof icon === "string" ? /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(Icon, { name: icon, className: iconGlyph }) : icon
10471
+ children: typeof icon === "string" ? /* @__PURE__ */ (0, import_jsx_runtime113.jsx)(Icon, { name: icon, className: iconGlyph }) : icon
10263
10472
  }
10264
10473
  ) : null;
10265
- const labelNode = /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("span", { id: labelId, "data-slot": "metric-card-label", className: cn(eyebrow, "text-muted-foreground"), children: label });
10266
- return /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)(
10474
+ const labelNode = /* @__PURE__ */ (0, import_jsx_runtime113.jsx)("span", { id: labelId, "data-slot": "metric-card-label", className: cn(eyebrow, "text-muted-foreground"), children: label });
10475
+ return /* @__PURE__ */ (0, import_jsx_runtime113.jsxs)(
10267
10476
  "div",
10268
10477
  {
10269
10478
  role: "group",
@@ -10277,13 +10486,13 @@ function MetricCard({
10277
10486
  ),
10278
10487
  ...rest,
10279
10488
  children: [
10280
- /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)("div", { className: hasEnd ? "min-w-0 flex-1 space-y-1" : "contents", children: [
10281
- /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)("div", { className: "flex items-center gap-1.5", children: [
10489
+ /* @__PURE__ */ (0, import_jsx_runtime113.jsxs)("div", { className: hasEnd ? "min-w-0 flex-1 space-y-1" : "contents", children: [
10490
+ /* @__PURE__ */ (0, import_jsx_runtime113.jsxs)("div", { className: "flex items-center gap-1.5", children: [
10282
10491
  placement === "label" && iconNode,
10283
10492
  labelNode
10284
10493
  ] }),
10285
- definition && /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("p", { "data-slot": "metric-card-definition", className: "m-0 text-caption text-muted-foreground", children: definition }),
10286
- /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(
10494
+ definition && /* @__PURE__ */ (0, import_jsx_runtime113.jsx)("p", { "data-slot": "metric-card-definition", className: "m-0 text-caption text-muted-foreground", children: definition }),
10495
+ /* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
10287
10496
  "p",
10288
10497
  {
10289
10498
  "data-slot": "metric-card-value",
@@ -10294,8 +10503,8 @@ function MetricCard({
10294
10503
  children: value
10295
10504
  }
10296
10505
  ),
10297
- change && /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("p", { "data-slot": "metric-card-change", className: cn("m-0 tabular-nums text-foreground", comfortable ? "text-caption" : "text-xxs"), children: change }),
10298
- description && /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(
10506
+ change && /* @__PURE__ */ (0, import_jsx_runtime113.jsx)("p", { "data-slot": "metric-card-change", className: cn("m-0 tabular-nums text-foreground", comfortable ? "text-caption" : "text-xxs"), children: change }),
10507
+ description && /* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
10299
10508
  "p",
10300
10509
  {
10301
10510
  "data-slot": "metric-card-description",
@@ -10304,9 +10513,9 @@ function MetricCard({
10304
10513
  }
10305
10514
  )
10306
10515
  ] }),
10307
- hasEnd && /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)("div", { className: "flex shrink-0 flex-col items-end justify-between gap-2", children: [
10516
+ hasEnd && /* @__PURE__ */ (0, import_jsx_runtime113.jsxs)("div", { className: "flex shrink-0 flex-col items-end justify-between gap-2", children: [
10308
10517
  placement === "end" && iconNode,
10309
- trend && /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { "data-slot": "metric-card-trend", className: "min-h-0 flex-1", children: trend })
10518
+ trend && /* @__PURE__ */ (0, import_jsx_runtime113.jsx)("div", { "data-slot": "metric-card-trend", className: "min-h-0 flex-1", children: trend })
10310
10519
  ] })
10311
10520
  ]
10312
10521
  }
@@ -10314,10 +10523,10 @@ function MetricCard({
10314
10523
  }
10315
10524
 
10316
10525
  // src/web/components/copyable.tsx
10317
- var import_jsx_runtime113 = require("react/jsx-runtime");
10526
+ var import_jsx_runtime114 = require("react/jsx-runtime");
10318
10527
  function Copyable({ value, label, children, mono = true, wrap = false, className }) {
10319
- return /* @__PURE__ */ (0, import_jsx_runtime113.jsxs)("span", { "data-slot": "copyable", className: cn("inline-flex min-w-0 max-w-full items-center gap-1", className), children: [
10320
- /* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
10528
+ return /* @__PURE__ */ (0, import_jsx_runtime114.jsxs)("span", { "data-slot": "copyable", className: cn("inline-flex min-w-0 max-w-full items-center gap-1", className), children: [
10529
+ /* @__PURE__ */ (0, import_jsx_runtime114.jsx)(
10321
10530
  "span",
10322
10531
  {
10323
10532
  title: value,
@@ -10325,29 +10534,29 @@ function Copyable({ value, label, children, mono = true, wrap = false, className
10325
10534
  children: children ?? value
10326
10535
  }
10327
10536
  ),
10328
- /* @__PURE__ */ (0, import_jsx_runtime113.jsx)(CopyButton, { value, label })
10537
+ /* @__PURE__ */ (0, import_jsx_runtime114.jsx)(CopyButton, { value, label })
10329
10538
  ] });
10330
10539
  }
10331
10540
 
10332
10541
  // src/web/components/code-block.tsx
10333
- var import_jsx_runtime114 = require("react/jsx-runtime");
10542
+ var import_jsx_runtime115 = require("react/jsx-runtime");
10334
10543
  function CodeBlock({ code, label = "code", language, className }) {
10335
- return /* @__PURE__ */ (0, import_jsx_runtime114.jsxs)(
10544
+ return /* @__PURE__ */ (0, import_jsx_runtime115.jsxs)(
10336
10545
  "figure",
10337
10546
  {
10338
10547
  "data-slot": "code-block",
10339
10548
  "aria-label": label,
10340
10549
  className: cn("relative m-0 min-w-0 overflow-hidden rounded-xl bg-muted/60 shadow-inner ring-1 ring-inset ring-secondary/15", className),
10341
10550
  children: [
10342
- language && /* @__PURE__ */ (0, import_jsx_runtime114.jsx)("figcaption", { className: cn("px-4 pt-3 text-muted-foreground", eyebrow), children: language }),
10343
- /* @__PURE__ */ (0, import_jsx_runtime114.jsx)("div", { className: "absolute right-2 top-2", children: /* @__PURE__ */ (0, import_jsx_runtime114.jsx)(CopyButton, { value: code, label }) }),
10344
- /* @__PURE__ */ (0, import_jsx_runtime114.jsx)(
10551
+ language && /* @__PURE__ */ (0, import_jsx_runtime115.jsx)("figcaption", { className: cn("px-4 pt-3 text-muted-foreground", eyebrow), children: language }),
10552
+ /* @__PURE__ */ (0, import_jsx_runtime115.jsx)("div", { className: "absolute right-2 top-2", children: /* @__PURE__ */ (0, import_jsx_runtime115.jsx)(CopyButton, { value: code, label }) }),
10553
+ /* @__PURE__ */ (0, import_jsx_runtime115.jsx)(
10345
10554
  HorizontalScrollArea,
10346
10555
  {
10347
10556
  className: "my-4 ml-4 mr-12",
10348
10557
  viewportAs: "pre",
10349
10558
  viewportClassName: "m-0 pb-3 font-mono text-caption text-foreground",
10350
- children: /* @__PURE__ */ (0, import_jsx_runtime114.jsx)("code", { children: code })
10559
+ children: /* @__PURE__ */ (0, import_jsx_runtime115.jsx)("code", { children: code })
10351
10560
  }
10352
10561
  )
10353
10562
  ]
@@ -10372,7 +10581,7 @@ var chartScatterSeriesLimit = 3;
10372
10581
 
10373
10582
  // src/web/components/filter-chip-group.tsx
10374
10583
  var import_react31 = require("react");
10375
- var import_jsx_runtime115 = require("react/jsx-runtime");
10584
+ var import_jsx_runtime116 = require("react/jsx-runtime");
10376
10585
  function FilterChipGroup({
10377
10586
  options,
10378
10587
  value,
@@ -10399,7 +10608,7 @@ function FilterChipGroup({
10399
10608
  onChange(target.option.value);
10400
10609
  refs.current[target.index]?.focus();
10401
10610
  };
10402
- return /* @__PURE__ */ (0, import_jsx_runtime115.jsx)(
10611
+ return /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
10403
10612
  "div",
10404
10613
  {
10405
10614
  role: segmented ? "radiogroup" : void 0,
@@ -10413,7 +10622,7 @@ function FilterChipGroup({
10413
10622
  children: options.map((option, index) => {
10414
10623
  const active = option.value === value;
10415
10624
  const iconOnly = option.label === void 0 || option.label === null;
10416
- return /* @__PURE__ */ (0, import_jsx_runtime115.jsxs)(
10625
+ return /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)(
10417
10626
  "button",
10418
10627
  {
10419
10628
  ref: (node) => {
@@ -10441,7 +10650,7 @@ function FilterChipGroup({
10441
10650
  children: [
10442
10651
  option.icon,
10443
10652
  option.label,
10444
- option.count !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime115.jsx)(
10653
+ option.count !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
10445
10654
  "span",
10446
10655
  {
10447
10656
  className: cn(
@@ -10461,7 +10670,7 @@ function FilterChipGroup({
10461
10670
  }
10462
10671
 
10463
10672
  // src/web/components/charts/core.tsx
10464
- var import_jsx_runtime116 = require("react/jsx-runtime");
10673
+ var import_jsx_runtime117 = require("react/jsx-runtime");
10465
10674
  var BAR_GAP = 2;
10466
10675
  var BAR_RADIUS = 4;
10467
10676
  function barPath(x, y, w, h, end) {
@@ -10526,15 +10735,15 @@ function ChartLegend({
10526
10735
  className
10527
10736
  }) {
10528
10737
  const visibleCount = items.filter((item) => !hidden?.has(item.id)).length;
10529
- return /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
10738
+ return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
10530
10739
  "ul",
10531
10740
  {
10532
10741
  "data-slot": "chart-legend",
10533
10742
  className: cn("m-0 flex list-none flex-wrap justify-center gap-x-4 gap-y-1 p-0 text-caption text-foreground", className),
10534
10743
  children: items.map((item) => {
10535
10744
  const off = hidden?.has(item.id) ?? false;
10536
- const key = item.swatch ?? /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(LegendSwatch, { color: item.color, shape: keyShape });
10537
- return /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("li", { className: "flex items-center", children: onToggle ? /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)(
10745
+ const key = item.swatch ?? /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(LegendSwatch, { color: item.color, shape: keyShape });
10746
+ return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("li", { className: "flex items-center", children: onToggle ? /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(
10538
10747
  "button",
10539
10748
  {
10540
10749
  type: "button",
@@ -10551,7 +10760,7 @@ function ChartLegend({
10551
10760
  item.label
10552
10761
  ]
10553
10762
  }
10554
- ) : /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)("span", { className: "flex items-center gap-1.5 px-1.5 py-0.5", children: [
10763
+ ) : /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("span", { className: "flex items-center gap-1.5 px-1.5 py-0.5", children: [
10555
10764
  key,
10556
10765
  item.label
10557
10766
  ] }) }, item.id);
@@ -10577,7 +10786,7 @@ function useSeriesVisibility(ids) {
10577
10786
  };
10578
10787
  }
10579
10788
  function LegendSwatch({ color, shape = "rect" }) {
10580
- return /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("svg", { width: "12", height: "12", "aria-hidden": "true", className: "shrink-0", children: shape === "line" ? /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("line", { x1: "1", x2: "11", y1: "6", y2: "6", stroke: color, strokeWidth: "2", strokeLinecap: "round" }) : shape === "dot" ? /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("circle", { cx: "6", cy: "6", r: "4", fill: color }) : /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("rect", { width: "12", height: "12", rx: "3", fill: color }) });
10789
+ return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("svg", { width: "12", height: "12", "aria-hidden": "true", className: "shrink-0", children: shape === "line" ? /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("line", { x1: "1", x2: "11", y1: "6", y2: "6", stroke: color, strokeWidth: "2", strokeLinecap: "round" }) : shape === "dot" ? /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("circle", { cx: "6", cy: "6", r: "4", fill: color }) : /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("rect", { width: "12", height: "12", rx: "3", fill: color }) });
10581
10790
  }
10582
10791
  function ChartTooltip({
10583
10792
  title,
@@ -10588,7 +10797,7 @@ function ChartTooltip({
10588
10797
  swatch = "line"
10589
10798
  }) {
10590
10799
  const flip = x > width * 0.6;
10591
- return /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)(
10800
+ return /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(
10592
10801
  "div",
10593
10802
  {
10594
10803
  "data-slot": "chart-tooltip",
@@ -10600,11 +10809,11 @@ function ChartTooltip({
10600
10809
  top: Math.max(0, y - 8)
10601
10810
  },
10602
10811
  children: [
10603
- /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("div", { className: "mb-1 font-semibold text-foreground", children: title }),
10604
- /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("ul", { className: "m-0 list-none space-y-0.5 p-0", children: rows.map((row) => /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)("li", { className: "flex items-center gap-2 whitespace-nowrap", children: [
10605
- /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(LegendSwatch, { color: row.color, shape: swatch }),
10606
- /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("span", { className: "font-semibold tabular-nums text-foreground", children: row.value }),
10607
- /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("span", { className: "text-muted-foreground", children: row.label })
10812
+ /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("div", { className: "mb-1 font-semibold text-foreground", children: title }),
10813
+ /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("ul", { className: "m-0 list-none space-y-0.5 p-0", children: rows.map((row) => /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("li", { className: "flex items-center gap-2 whitespace-nowrap", children: [
10814
+ /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(LegendSwatch, { color: row.color, shape: swatch }),
10815
+ /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("span", { className: "font-semibold tabular-nums text-foreground", children: row.value }),
10816
+ /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("span", { className: "text-muted-foreground", children: row.label })
10608
10817
  ] }, row.id)) })
10609
10818
  ]
10610
10819
  }
@@ -10632,8 +10841,8 @@ function nextActiveIndex(key, current, count3, { vertical = false } = {}) {
10632
10841
  }
10633
10842
  }
10634
10843
  var viewOptions = [
10635
- { value: "chart", ariaLabel: "Chart", icon: /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(IconGlyph, { glyph: BarChart, size: "sm" }) },
10636
- { value: "table", ariaLabel: "Table", icon: /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(IconGlyph, { glyph: TableRows, size: "sm" }) }
10844
+ { value: "chart", ariaLabel: "Chart", icon: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(IconGlyph, { glyph: BarChart, size: "sm" }) },
10845
+ { value: "table", ariaLabel: "Table", icon: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(IconGlyph, { glyph: TableRows, size: "sm" }) }
10637
10846
  ];
10638
10847
  var tableOption = viewOptions[1];
10639
10848
  function ChartViewToggle({
@@ -10643,9 +10852,9 @@ function ChartViewToggle({
10643
10852
  chartView,
10644
10853
  onChartViewChange
10645
10854
  }) {
10646
- const options = views && views.length > 0 ? [...views.map((v) => ({ value: v.value, ariaLabel: v.label, icon: /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Icon, { name: v.icon, size: "sm" }) })), tableOption] : viewOptions;
10855
+ const options = views && views.length > 0 ? [...views.map((v) => ({ value: v.value, ariaLabel: v.label, icon: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(Icon, { name: v.icon, size: "sm" }) })), tableOption] : viewOptions;
10647
10856
  const value = view === "table" ? "table" : views && views.length > 0 ? chartView ?? views[0].value : "chart";
10648
- return /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("div", { "data-slot": "chart-view-toggle", className: "shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
10857
+ return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("div", { "data-slot": "chart-view-toggle", className: "shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
10649
10858
  FilterChipGroup,
10650
10859
  {
10651
10860
  variant: "segmented",
@@ -10666,16 +10875,16 @@ function ChartTimeframeMenu({
10666
10875
  onChange
10667
10876
  }) {
10668
10877
  const current = timeframes.find((t) => t.value === value) ?? timeframes[0];
10669
- return /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("div", { "data-slot": "chart-timeframe", className: "shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)(DropdownMenu, { children: [
10670
- /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(GlyphButton, { icon: Event2, label: `Timeframe: ${current.label}` }) }),
10671
- /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(DropdownMenuContent, { className: "min-w-28", children: timeframes.map((t) => /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)(
10878
+ return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("div", { "data-slot": "chart-timeframe", className: "shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(DropdownMenu, { children: [
10879
+ /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(GlyphButton, { icon: Event2, label: `Timeframe: ${current.label}` }) }),
10880
+ /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(DropdownMenuContent, { className: "min-w-28", children: timeframes.map((t) => /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(
10672
10881
  DropdownMenuItem,
10673
10882
  {
10674
10883
  onSelect: () => onChange(t.value),
10675
- icon: /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(IconGlyph, { glyph: Check, className: t.value === current.value ? void 0 : "invisible" }),
10884
+ icon: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(IconGlyph, { glyph: Check, className: t.value === current.value ? void 0 : "invisible" }),
10676
10885
  children: [
10677
10886
  t.label,
10678
- t.value === current.value && /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("span", { className: "sr-only", children: " (current)" })
10887
+ t.value === current.value && /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("span", { className: "sr-only", children: " (current)" })
10679
10888
  ]
10680
10889
  },
10681
10890
  t.value
@@ -10689,8 +10898,8 @@ function ChartFiltersMenu({
10689
10898
  }) {
10690
10899
  const on = filters.filter((f) => active.includes(f.value));
10691
10900
  const toggle = (value) => onChange(active.includes(value) ? active.filter((v) => v !== value) : [...active, value]);
10692
- return /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("div", { "data-slot": "chart-filters", className: "shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)(DropdownMenu, { children: [
10693
- /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
10901
+ return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("div", { "data-slot": "chart-filters", className: "shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(DropdownMenu, { children: [
10902
+ /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
10694
10903
  GlyphButton,
10695
10904
  {
10696
10905
  icon: Tune,
@@ -10698,9 +10907,9 @@ function ChartFiltersMenu({
10698
10907
  label: on.length > 0 ? `Filters: ${on.length} on` : "Filters"
10699
10908
  }
10700
10909
  ) }),
10701
- /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(DropdownMenuContent, { className: "min-w-44", children: filters.map((f) => {
10910
+ /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(DropdownMenuContent, { className: "min-w-44", children: filters.map((f) => {
10702
10911
  const checked = active.includes(f.value);
10703
- return /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
10912
+ return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
10704
10913
  DropdownMenuItem,
10705
10914
  {
10706
10915
  role: "menuitemcheckbox",
@@ -10709,7 +10918,7 @@ function ChartFiltersMenu({
10709
10918
  event.preventDefault();
10710
10919
  toggle(f.value);
10711
10920
  },
10712
- icon: /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(IconGlyph, { glyph: Check, className: checked ? void 0 : "invisible" }),
10921
+ icon: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(IconGlyph, { glyph: Check, className: checked ? void 0 : "invisible" }),
10713
10922
  children: f.label
10714
10923
  },
10715
10924
  f.value
@@ -10735,20 +10944,20 @@ function ChartHeader({
10735
10944
  const showTimeframes = timeframes && timeframes.length > 0 && onTimeframeChange;
10736
10945
  const showFilters = filters && filters.length > 0 && onFiltersChange;
10737
10946
  const hasText = Boolean(title || description);
10738
- return /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)(
10947
+ return /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(
10739
10948
  "div",
10740
10949
  {
10741
10950
  "data-slot": "chart-header",
10742
10951
  className: cn("flex flex-wrap items-start gap-x-4 gap-y-2", hasText ? "justify-between" : "justify-end"),
10743
10952
  children: [
10744
- hasText && /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)("div", { className: "flex min-w-0 flex-col gap-1", children: [
10745
- title && /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("h3", { className: "m-0 text-subhead font-semibold leading-none tracking-tight text-foreground", children: title }),
10746
- description && /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("p", { className: "m-0 text-caption text-muted-foreground", children: description })
10953
+ hasText && /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("div", { className: "flex min-w-0 flex-col gap-1", children: [
10954
+ title && /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("h3", { className: "m-0 text-subhead font-semibold leading-none tracking-tight text-foreground", children: title }),
10955
+ description && /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("p", { className: "m-0 text-caption text-muted-foreground", children: description })
10747
10956
  ] }),
10748
- /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)("div", { className: "flex shrink-0 items-center gap-1", children: [
10749
- (showTimeframes || showFilters) && /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)("div", { className: "flex items-center gap-0.5", children: [
10750
- showFilters && /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(ChartFiltersMenu, { filters, active: activeFilters ?? [], onChange: onFiltersChange }),
10751
- showTimeframes && /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
10957
+ /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("div", { className: "flex shrink-0 items-center gap-1", children: [
10958
+ (showTimeframes || showFilters) && /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("div", { className: "flex items-center gap-0.5", children: [
10959
+ showFilters && /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(ChartFiltersMenu, { filters, active: activeFilters ?? [], onChange: onFiltersChange }),
10960
+ showTimeframes && /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
10752
10961
  ChartTimeframeMenu,
10753
10962
  {
10754
10963
  timeframes,
@@ -10757,7 +10966,7 @@ function ChartHeader({
10757
10966
  }
10758
10967
  )
10759
10968
  ] }),
10760
- /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
10969
+ /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
10761
10970
  ChartViewToggle,
10762
10971
  {
10763
10972
  view,
@@ -10773,13 +10982,13 @@ function ChartHeader({
10773
10982
  );
10774
10983
  }
10775
10984
  function ChartLegendRow({ children }) {
10776
- return /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("div", { "data-slot": "chart-legend-row", children });
10985
+ return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("div", { "data-slot": "chart-legend-row", children });
10777
10986
  }
10778
10987
  function ChartDataTable({ label, table }) {
10779
- return /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)(Table, { children: [
10780
- /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("caption", { className: "sr-only", children: label }),
10781
- /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(TableHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(TableRow, { children: table.columns.map((column, index) => /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(TableHead, { className: index > 0 ? "text-right" : void 0, children: column }, index)) }) }),
10782
- /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(TableBody, { children: table.rows.map((row, rowIndex) => /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(TableRow, { children: row.map((cell, cellIndex) => /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(TableCell, { className: cellIndex > 0 ? "text-right tabular-nums" : void 0, children: cell }, cellIndex)) }, rowIndex)) })
10988
+ return /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(Table, { children: [
10989
+ /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("caption", { className: "sr-only", children: label }),
10990
+ /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(TableHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(TableRow, { children: table.columns.map((column, index) => /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(TableHead, { className: index > 0 ? "text-right" : void 0, children: column }, index)) }) }),
10991
+ /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(TableBody, { children: table.rows.map((row, rowIndex) => /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(TableRow, { children: row.map((cell, cellIndex) => /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(TableCell, { className: cellIndex > 0 ? "text-right tabular-nums" : void 0, children: cell }, cellIndex)) }, rowIndex)) })
10783
10992
  ] });
10784
10993
  }
10785
10994
  function ChartFrame({
@@ -10793,18 +11002,18 @@ function ChartFrame({
10793
11002
  ...head
10794
11003
  }) {
10795
11004
  const [view, setView] = (0, import_react32.useState)("chart");
10796
- return /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)("figure", { "data-slot": "chart", "aria-label": label, className: cn("m-0 min-w-0 space-y-3", className), children: [
10797
- scale && /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("p", { "data-slot": "chart-scale", className: "sr-only", children: scale }),
10798
- /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(ChartHeader, { ...head, view, onViewChange: setView }),
10799
- view === "chart" ? children : /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(ChartDataTable, { label, table }),
10800
- view === "chart" && legend && /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(ChartLegendRow, { children: legend }),
10801
- /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("p", { "aria-live": "polite", className: "sr-only", children: announcement ?? "" })
11005
+ return /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("figure", { "data-slot": "chart", "aria-label": label, className: cn("m-0 min-w-0 space-y-3", className), children: [
11006
+ scale && /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("p", { "data-slot": "chart-scale", className: "sr-only", children: scale }),
11007
+ /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(ChartHeader, { ...head, view, onViewChange: setView }),
11008
+ view === "chart" ? children : /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(ChartDataTable, { label, table }),
11009
+ view === "chart" && legend && /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(ChartLegendRow, { children: legend }),
11010
+ /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("p", { "aria-live": "polite", className: "sr-only", children: announcement ?? "" })
10802
11011
  ] });
10803
11012
  }
10804
11013
  var plotClass = "relative w-full min-w-0 rounded-xl outline-none transition-shadow duration-200 focus-visible:ring-2 focus-visible:ring-primary/50 focus-visible:shadow-glow-primary-soft";
10805
11014
 
10806
11015
  // src/web/components/trend-chart.tsx
10807
- var import_jsx_runtime117 = require("react/jsx-runtime");
11016
+ var import_jsx_runtime118 = require("react/jsx-runtime");
10808
11017
  var toneFill = {
10809
11018
  // The charts' green, so every chart draws the same one.
10810
11019
  primary: "var(--series-1)",
@@ -10914,7 +11123,7 @@ function TrendChart({
10914
11123
  },
10915
11124
  [active, count3]
10916
11125
  );
10917
- if (count3 === 0) return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(import_jsx_runtime117.Fragment, { children: empty ?? null });
11126
+ if (count3 === 0) return /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(import_jsx_runtime118.Fragment, { children: empty ?? null });
10918
11127
  const textures = series.map((s) => s.texture);
10919
11128
  const totals = points.map(
10920
11129
  (point) => series.reduce((sum, s) => sum + Math.max(0, point.values[s.id] ?? 0), 0)
@@ -10947,15 +11156,15 @@ function TrendChart({
10947
11156
  const activeTitle = activePoint ? activePoint.detail ?? activePoint.label : "";
10948
11157
  const containerWidth = containerRef.current?.clientWidth ?? width;
10949
11158
  const toContainer = width > 0 ? containerWidth / width : 1;
10950
- return /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(
11159
+ return /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)(
10951
11160
  "figure",
10952
11161
  {
10953
11162
  "data-slot": "trend-chart",
10954
11163
  "aria-label": label,
10955
11164
  className: cn("m-0 min-w-0 space-y-2", className),
10956
11165
  children: [
10957
- /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(ChartHeader, { ...head, view, onViewChange: setView }),
10958
- view === "table" && /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
11166
+ /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(ChartHeader, { ...head, view, onViewChange: setView }),
11167
+ view === "table" && /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
10959
11168
  ChartDataTable,
10960
11169
  {
10961
11170
  label,
@@ -10969,8 +11178,8 @@ function TrendChart({
10969
11178
  }
10970
11179
  }
10971
11180
  ),
10972
- /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("p", { id: readoutId, "data-slot": "trend-chart-readout", "aria-live": "polite", className: "sr-only", children: activePoint ? tooltipText(activeTitle, activeRows) : "" }),
10973
- /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(
11181
+ /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("p", { id: readoutId, "data-slot": "trend-chart-readout", "aria-live": "polite", className: "sr-only", children: activePoint ? tooltipText(activeTitle, activeRows) : "" }),
11182
+ /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)(
10974
11183
  "div",
10975
11184
  {
10976
11185
  ref: containerRef,
@@ -10985,7 +11194,7 @@ function TrendChart({
10985
11194
  onBlur: () => setActive(null),
10986
11195
  className: "relative mt-5 w-full min-w-0 rounded-xl outline-none transition-shadow focus-visible:ring-2 focus-visible:ring-primary/50 focus-visible:shadow-glow-primary-soft",
10987
11196
  children: [
10988
- /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(
11197
+ /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)(
10989
11198
  "svg",
10990
11199
  {
10991
11200
  width: "100%",
@@ -10996,11 +11205,11 @@ function TrendChart({
10996
11205
  onPointerLeave: () => setActive(null),
10997
11206
  "aria-hidden": "true",
10998
11207
  children: [
10999
- /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("defs", { children: series.map(
11000
- (s, index) => textures[index] === "hatch" ? /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(Texture, { id: `${idBase}-hatch-${index}`, tone: s.tone, texture: "hatch" }, s.id) : /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(SolidFill, { id: `${idBase}-fill-${index}`, tone: s.tone }, s.id)
11208
+ /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("defs", { children: series.map(
11209
+ (s, index) => textures[index] === "hatch" ? /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(Texture, { id: `${idBase}-hatch-${index}`, tone: s.tone, texture: "hatch" }, s.id) : /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(SolidFill, { id: `${idBase}-fill-${index}`, tone: s.tone }, s.id)
11001
11210
  ) }),
11002
- /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("g", { "data-slot": "trend-chart-y-axis", children: ticks.map((tick, index) => /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("g", { children: [
11003
- /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
11211
+ /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("g", { "data-slot": "trend-chart-y-axis", children: ticks.map((tick, index) => /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)("g", { children: [
11212
+ /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
11004
11213
  "line",
11005
11214
  {
11006
11215
  x1: plotLeft,
@@ -11011,7 +11220,7 @@ function TrendChart({
11011
11220
  strokeDasharray: tick === 0 ? void 0 : "2 3"
11012
11221
  }
11013
11222
  ),
11014
- /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
11223
+ /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
11015
11224
  "text",
11016
11225
  {
11017
11226
  x: plotLeft - 6,
@@ -11025,7 +11234,7 @@ function TrendChart({
11025
11234
  }
11026
11235
  )
11027
11236
  ] }, tick)) }),
11028
- active !== null && /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
11237
+ active !== null && /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
11029
11238
  "rect",
11030
11239
  {
11031
11240
  "data-slot": "trend-chart-active",
@@ -11037,9 +11246,9 @@ function TrendChart({
11037
11246
  opacity: 0.14
11038
11247
  }
11039
11248
  ),
11040
- /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("g", { "data-slot": "trend-chart-bars", children: points.map((point, pointIndex) => {
11249
+ /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("g", { "data-slot": "trend-chart-bars", children: points.map((point, pointIndex) => {
11041
11250
  let base = 0;
11042
- return /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("g", { "data-period": point.key, children: [
11251
+ return /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)("g", { "data-period": point.key, children: [
11043
11252
  series.map((s, seriesIndex) => {
11044
11253
  const value = point.values[s.id] ?? 0;
11045
11254
  if (value <= 0) return null;
@@ -11049,7 +11258,7 @@ function TrendChart({
11049
11258
  base += value;
11050
11259
  const isTop = series.slice(seriesIndex + 1).every((next) => (point.values[next.id] ?? 0) <= 0);
11051
11260
  const hatched = textures[seriesIndex] === "hatch";
11052
- return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
11261
+ return /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
11053
11262
  "path",
11054
11263
  {
11055
11264
  "data-series": s.id,
@@ -11067,7 +11276,7 @@ function TrendChart({
11067
11276
  s.id
11068
11277
  );
11069
11278
  }),
11070
- /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
11279
+ /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
11071
11280
  "rect",
11072
11281
  {
11073
11282
  x: plotLeft + pointIndex * band,
@@ -11080,7 +11289,7 @@ function TrendChart({
11080
11289
  )
11081
11290
  ] }, point.key);
11082
11291
  }) }),
11083
- /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("g", { "data-slot": "trend-chart-x-axis", children: labelIndices.map((index) => /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
11292
+ /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("g", { "data-slot": "trend-chart-x-axis", children: labelIndices.map((index) => /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
11084
11293
  "text",
11085
11294
  {
11086
11295
  x: plotLeft + index * band + band / 2,
@@ -11095,7 +11304,7 @@ function TrendChart({
11095
11304
  ]
11096
11305
  }
11097
11306
  ),
11098
- activePoint && /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
11307
+ activePoint && /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
11099
11308
  ChartTooltip,
11100
11309
  {
11101
11310
  title: activeTitle,
@@ -11109,16 +11318,16 @@ function TrendChart({
11109
11318
  ]
11110
11319
  }
11111
11320
  ),
11112
- view === "chart" && /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(ChartLegendRow, { children: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
11321
+ view === "chart" && /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(ChartLegendRow, { children: /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
11113
11322
  ChartLegend,
11114
11323
  {
11115
11324
  items: styledSeries.map((s, index) => ({
11116
11325
  id: s.id,
11117
11326
  label: s.label,
11118
11327
  color: toneFill[s.tone],
11119
- swatch: /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("svg", { width: "12", height: "12", "aria-hidden": "true", className: "shrink-0", children: [
11120
- /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(Texture, { id: `${idBase}-legend-${index}`, tone: s.tone, texture: s.texture }),
11121
- /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
11328
+ swatch: /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)("svg", { width: "12", height: "12", "aria-hidden": "true", className: "shrink-0", children: [
11329
+ /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(Texture, { id: `${idBase}-legend-${index}`, tone: s.tone, texture: s.texture }),
11330
+ /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
11122
11331
  "rect",
11123
11332
  {
11124
11333
  width: "12",
@@ -11133,7 +11342,7 @@ function TrendChart({
11133
11342
  ...visibility.legend
11134
11343
  }
11135
11344
  ) }),
11136
- /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("p", { "data-slot": "trend-chart-scale", className: "sr-only", children: [
11345
+ /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)("p", { "data-slot": "trend-chart-scale", className: "sr-only", children: [
11137
11346
  scaleLabel,
11138
11347
  " \xB7 linear, from 0"
11139
11348
  ] })
@@ -11142,9 +11351,9 @@ function TrendChart({
11142
11351
  );
11143
11352
  }
11144
11353
  function SolidFill({ id, tone }) {
11145
- return /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("linearGradient", { id, x1: "0", y1: "0", x2: "0", y2: "1", children: [
11146
- /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("stop", { offset: "0%", style: { stopColor: `color-mix(in oklab, ${toneFill[tone]}, white 35%)` } }),
11147
- /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("stop", { offset: "100%", style: { stopColor: toneFill[tone] } })
11354
+ return /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)("linearGradient", { id, x1: "0", y1: "0", x2: "0", y2: "1", children: [
11355
+ /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("stop", { offset: "0%", style: { stopColor: `color-mix(in oklab, ${toneFill[tone]}, white 35%)` } }),
11356
+ /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("stop", { offset: "100%", style: { stopColor: toneFill[tone] } })
11148
11357
  ] });
11149
11358
  }
11150
11359
  function Texture({
@@ -11153,15 +11362,15 @@ function Texture({
11153
11362
  texture
11154
11363
  }) {
11155
11364
  if (texture !== "hatch") return null;
11156
- return /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("pattern", { id, width: "4", height: "4", patternUnits: "userSpaceOnUse", patternTransform: "rotate(45)", children: [
11157
- /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("rect", { width: "4", height: "4", fill: toneFill[tone], opacity: 0.25 }),
11158
- /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("rect", { width: "2", height: "4", fill: toneFill[tone] })
11365
+ return /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)("pattern", { id, width: "4", height: "4", patternUnits: "userSpaceOnUse", patternTransform: "rotate(45)", children: [
11366
+ /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("rect", { width: "4", height: "4", fill: toneFill[tone], opacity: 0.25 }),
11367
+ /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("rect", { width: "2", height: "4", fill: toneFill[tone] })
11159
11368
  ] });
11160
11369
  }
11161
11370
 
11162
11371
  // src/web/components/charts/line-chart.tsx
11163
11372
  var import_react34 = require("react");
11164
- var import_jsx_runtime118 = require("react/jsx-runtime");
11373
+ var import_jsx_runtime119 = require("react/jsx-runtime");
11165
11374
  var MARGIN2 = { top: 12, right: 16, bottom: 26, left: 8 };
11166
11375
  function LineChart({
11167
11376
  data,
@@ -11183,7 +11392,7 @@ function LineChart({
11183
11392
  const series = allSeries.filter((s) => visibility.isVisible(s.id));
11184
11393
  const slotOf = (id) => allSeries.findIndex((s) => s.id === id);
11185
11394
  const count3 = data.length;
11186
- if (count3 === 0 || series.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(import_jsx_runtime118.Fragment, { children: empty ?? null });
11395
+ if (count3 === 0 || series.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(import_jsx_runtime119.Fragment, { children: empty ?? null });
11187
11396
  const max = Math.max(0, ...data.flatMap((d) => series.map((s) => d.values[s.id] ?? 0)));
11188
11397
  const ticks = chartValueTicks(max, { integer });
11189
11398
  const tickLabels = ticks.map(formatValue);
@@ -11220,14 +11429,14 @@ function LineChart({
11220
11429
  });
11221
11430
  };
11222
11431
  const activeDatum = active === null ? null : data[active];
11223
- return /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
11432
+ return /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
11224
11433
  ChartFrame,
11225
11434
  {
11226
11435
  ...head,
11227
11436
  label,
11228
11437
  className,
11229
11438
  scale: `${scaleLabel} \xB7 linear, from 0`,
11230
- legend: allSeries.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
11439
+ legend: allSeries.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
11231
11440
  ChartLegend,
11232
11441
  {
11233
11442
  keyShape: "line",
@@ -11240,7 +11449,7 @@ function LineChart({
11240
11449
  rows: data.map((d) => [d.detail ?? d.label, ...series.map((s) => formatValue(d.values[s.id] ?? 0))])
11241
11450
  },
11242
11451
  announcement: activeDatum ? tooltipText(activeDatum.detail ?? activeDatum.label, rowsAt(active)) : void 0,
11243
- children: /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)(
11452
+ children: /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)(
11244
11453
  "div",
11245
11454
  {
11246
11455
  ref: containerRef,
@@ -11252,7 +11461,7 @@ function LineChart({
11252
11461
  onBlur: () => setActive(null),
11253
11462
  className: plotClass,
11254
11463
  children: [
11255
- /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)(
11464
+ /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)(
11256
11465
  "svg",
11257
11466
  {
11258
11467
  width: "100%",
@@ -11263,13 +11472,13 @@ function LineChart({
11263
11472
  onPointerMove,
11264
11473
  onPointerLeave: () => setActive(null),
11265
11474
  children: [
11266
- showArea && /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("defs", { children: /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)("linearGradient", { id: `${idBase}-wash`, x1: "0", x2: "0", y1: "0", y2: "1", children: [
11267
- /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("stop", { offset: "0", stopColor: seriesColor(0), stopOpacity: "0.14" }),
11268
- /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("stop", { offset: "1", stopColor: seriesColor(0), stopOpacity: "0.04" })
11475
+ showArea && /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("defs", { children: /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)("linearGradient", { id: `${idBase}-wash`, x1: "0", x2: "0", y1: "0", y2: "1", children: [
11476
+ /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("stop", { offset: "0", stopColor: seriesColor(0), stopOpacity: "0.14" }),
11477
+ /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("stop", { offset: "1", stopColor: seriesColor(0), stopOpacity: "0.04" })
11269
11478
  ] }) }),
11270
- /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("g", { "data-slot": "chart-y-axis", children: ticks.map((tick, index) => /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)("g", { children: [
11271
- /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("line", { x1: plotLeft, x2: plotRight, y1: y(tick), y2: y(tick), stroke: "var(--border)" }),
11272
- /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
11479
+ /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("g", { "data-slot": "chart-y-axis", children: ticks.map((tick, index) => /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)("g", { children: [
11480
+ /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("line", { x1: plotLeft, x2: plotRight, y1: y(tick), y2: y(tick), stroke: "var(--border)" }),
11481
+ /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
11273
11482
  "text",
11274
11483
  {
11275
11484
  x: plotLeft - 8,
@@ -11283,7 +11492,7 @@ function LineChart({
11283
11492
  }
11284
11493
  )
11285
11494
  ] }, tick)) }),
11286
- showArea && /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
11495
+ showArea && /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
11287
11496
  "path",
11288
11497
  {
11289
11498
  "data-slot": "chart-area",
@@ -11291,7 +11500,7 @@ function LineChart({
11291
11500
  fill: `url(#${idBase}-wash)`
11292
11501
  }
11293
11502
  ),
11294
- /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("g", { "data-slot": "chart-lines", children: series.map((s, slot) => /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
11503
+ /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("g", { "data-slot": "chart-lines", children: series.map((s, slot) => /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
11295
11504
  "path",
11296
11505
  {
11297
11506
  "data-series": s.id,
@@ -11304,7 +11513,7 @@ function LineChart({
11304
11513
  },
11305
11514
  s.id
11306
11515
  )) }),
11307
- /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("g", { "data-slot": "chart-end-markers", children: series.map((s, slot) => /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
11516
+ /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("g", { "data-slot": "chart-end-markers", children: series.map((s, slot) => /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
11308
11517
  "circle",
11309
11518
  {
11310
11519
  cx: x(count3 - 1),
@@ -11316,9 +11525,9 @@ function LineChart({
11316
11525
  },
11317
11526
  s.id
11318
11527
  )) }),
11319
- active !== null && /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)("g", { "data-slot": "chart-crosshair", children: [
11320
- /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("line", { x1: x(active), x2: x(active), y1: plotTop, y2: plotBottom, stroke: "var(--muted-foreground)", strokeWidth: 1 }),
11321
- series.map((s, slot) => /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
11528
+ active !== null && /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)("g", { "data-slot": "chart-crosshair", children: [
11529
+ /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("line", { x1: x(active), x2: x(active), y1: plotTop, y2: plotBottom, stroke: "var(--muted-foreground)", strokeWidth: 1 }),
11530
+ series.map((s, slot) => /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
11322
11531
  "circle",
11323
11532
  {
11324
11533
  cx: x(active),
@@ -11331,7 +11540,7 @@ function LineChart({
11331
11540
  s.id
11332
11541
  ))
11333
11542
  ] }),
11334
- /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("g", { "data-slot": "chart-x-axis", children: labelIndices.map((index) => /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
11543
+ /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("g", { "data-slot": "chart-x-axis", children: labelIndices.map((index) => /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
11335
11544
  "text",
11336
11545
  {
11337
11546
  x: x(index),
@@ -11346,7 +11555,7 @@ function LineChart({
11346
11555
  ]
11347
11556
  }
11348
11557
  ),
11349
- activeDatum && /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
11558
+ activeDatum && /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
11350
11559
  ChartTooltip,
11351
11560
  {
11352
11561
  title: activeDatum.detail ?? activeDatum.label,
@@ -11363,12 +11572,12 @@ function LineChart({
11363
11572
  );
11364
11573
  }
11365
11574
  function AreaChart2(props) {
11366
- return /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(LineChart, { ...props, area: true, className: cn(props.className) });
11575
+ return /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(LineChart, { ...props, area: true, className: cn(props.className) });
11367
11576
  }
11368
11577
 
11369
11578
  // src/web/components/charts/bar-chart.tsx
11370
11579
  var import_react35 = require("react");
11371
- var import_jsx_runtime119 = require("react/jsx-runtime");
11580
+ var import_jsx_runtime120 = require("react/jsx-runtime");
11372
11581
  var MAX_BAR = 24;
11373
11582
  var GAP = BAR_GAP;
11374
11583
  function BarChart2({
@@ -11391,7 +11600,7 @@ function BarChart2({
11391
11600
  const series = allSeries.filter((s) => visibility.isVisible(s.id));
11392
11601
  const slotOf = (id) => allSeries.findIndex((s) => s.id === id);
11393
11602
  const count3 = data.length;
11394
- if (count3 === 0 || series.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(import_jsx_runtime119.Fragment, { children: empty ?? null });
11603
+ if (count3 === 0 || series.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(import_jsx_runtime120.Fragment, { children: empty ?? null });
11395
11604
  const stacked = layout === "stacked";
11396
11605
  const horizontal = orientation === "horizontal";
11397
11606
  const totals = data.map((d) => series.reduce((sum, s) => sum + Math.max(0, d.values[s.id] ?? 0), 0));
@@ -11444,11 +11653,11 @@ function BarChart2({
11444
11653
  const across = stacked ? groupStart : groupStart + slot * (barThickness + GAP);
11445
11654
  const seam = stacked && offset > 0 ? GAP : 0;
11446
11655
  const path = horizontal ? barPath(plotLeft + offset + seam, across, Math.max(0.5, length - seam), barThickness, isLastInStack ? "right" : "none") : barPath(across, plotBottom - offset - length, barThickness, Math.max(0.5, length - seam), isLastInStack ? "top" : "none");
11447
- marks.push(/* @__PURE__ */ (0, import_jsx_runtime119.jsx)("path", { "data-series": s.id, d: path, fill: seriesColor(slotOf(s.id)) }, s.id));
11656
+ marks.push(/* @__PURE__ */ (0, import_jsx_runtime120.jsx)("path", { "data-series": s.id, d: path, fill: seriesColor(slotOf(s.id)) }, s.id));
11448
11657
  });
11449
- return /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)("g", { "data-category": d.key, opacity: active !== null && active !== index ? 0.55 : 1, children: [
11658
+ return /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)("g", { "data-category": d.key, opacity: active !== null && active !== index ? 0.55 : 1, children: [
11450
11659
  marks,
11451
- /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
11660
+ /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
11452
11661
  "rect",
11453
11662
  {
11454
11663
  x: horizontal ? plotLeft : bandStart,
@@ -11464,14 +11673,14 @@ function BarChart2({
11464
11673
  const labelIndices = horizontal ? data.map((_, index) => index) : chartLabelIndices(count3, plotWidth / 56);
11465
11674
  const activeDatum = active === null ? null : data[active];
11466
11675
  const tooltipAnchor = active === null ? { x: 0, y: 0 } : horizontal ? { x: plotLeft + scale(stacked ? totals[active] : Math.max(...series.map((s) => data[active].values[s.id] ?? 0))), y: plotTop + active * bandSize } : { x: plotLeft + (active + 0.5) * bandSize, y: plotTop };
11467
- return /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
11676
+ return /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
11468
11677
  ChartFrame,
11469
11678
  {
11470
11679
  ...head,
11471
11680
  label,
11472
11681
  className,
11473
11682
  scale: `${scaleLabel} \xB7 linear, from 0`,
11474
- legend: allSeries.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
11683
+ legend: allSeries.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
11475
11684
  ChartLegend,
11476
11685
  {
11477
11686
  items: allSeries.map((s, slot) => ({ id: s.id, label: s.label, color: seriesColor(slot) })),
@@ -11491,7 +11700,7 @@ function BarChart2({
11491
11700
  ])
11492
11701
  },
11493
11702
  announcement: activeDatum ? tooltipText(activeDatum.detail ?? activeDatum.label, rowsAt(active)) : void 0,
11494
- children: /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)(
11703
+ children: /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)(
11495
11704
  "div",
11496
11705
  {
11497
11706
  ref: containerRef,
@@ -11504,12 +11713,12 @@ function BarChart2({
11504
11713
  onPointerLeave: () => setActive(null),
11505
11714
  className: plotClass,
11506
11715
  children: [
11507
- /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)("svg", { width: "100%", height: svgHeight, viewBox: `0 0 ${width} ${svgHeight}`, className: "block overflow-visible", "aria-hidden": "true", children: [
11508
- /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("g", { "data-slot": "chart-value-axis", children: ticks.map((tick, index) => {
11716
+ /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)("svg", { width: "100%", height: svgHeight, viewBox: `0 0 ${width} ${svgHeight}`, className: "block overflow-visible", "aria-hidden": "true", children: [
11717
+ /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("g", { "data-slot": "chart-value-axis", children: ticks.map((tick, index) => {
11509
11718
  const at = horizontal ? plotLeft + scale(tick) : plotBottom - scale(tick);
11510
- return /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)("g", { children: [
11511
- horizontal ? /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("line", { x1: at, x2: at, y1: plotTop, y2: plotBottom, stroke: "var(--border)" }) : /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("line", { x1: plotLeft, x2: plotRight, y1: at, y2: at, stroke: "var(--border)" }),
11512
- /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
11719
+ return /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)("g", { children: [
11720
+ horizontal ? /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("line", { x1: at, x2: at, y1: plotTop, y2: plotBottom, stroke: "var(--border)" }) : /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("line", { x1: plotLeft, x2: plotRight, y1: at, y2: at, stroke: "var(--border)" }),
11721
+ /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
11513
11722
  "text",
11514
11723
  {
11515
11724
  x: horizontal ? at : plotLeft - 8,
@@ -11524,8 +11733,8 @@ function BarChart2({
11524
11733
  )
11525
11734
  ] }, tick);
11526
11735
  }) }),
11527
- /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("g", { "data-slot": "chart-bars", children: bars }),
11528
- /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("g", { "data-slot": "chart-category-axis", children: labelIndices.map((index) => /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
11736
+ /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("g", { "data-slot": "chart-bars", children: bars }),
11737
+ /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("g", { "data-slot": "chart-category-axis", children: labelIndices.map((index) => /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
11529
11738
  "text",
11530
11739
  {
11531
11740
  x: horizontal ? plotLeft - 8 : plotLeft + (index + 0.5) * bandSize,
@@ -11539,7 +11748,7 @@ function BarChart2({
11539
11748
  data[index].key
11540
11749
  )) })
11541
11750
  ] }),
11542
- activeDatum && /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
11751
+ activeDatum && /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
11543
11752
  ChartTooltip,
11544
11753
  {
11545
11754
  title: activeDatum.detail ?? activeDatum.label,
@@ -11558,7 +11767,7 @@ function BarChart2({
11558
11767
 
11559
11768
  // src/web/components/charts/mixed-chart.tsx
11560
11769
  var import_react36 = require("react");
11561
- var import_jsx_runtime120 = require("react/jsx-runtime");
11770
+ var import_jsx_runtime121 = require("react/jsx-runtime");
11562
11771
  var MARK_VIEWS = {
11563
11772
  bar: { value: "bar", label: "Bars", icon: "bar_chart" },
11564
11773
  stacked: { value: "stacked", label: "Stacked bars", icon: "stacked_bar_chart" },
@@ -11571,12 +11780,12 @@ var MAX_BAR_GROUP = 56;
11571
11780
  var ALL_MARKS = ["bar", "stacked", "line", "area", "dots"];
11572
11781
  function MarkSwatch({ mark, color }) {
11573
11782
  if (mark === "area") {
11574
- return /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)("svg", { width: "12", height: "12", "aria-hidden": "true", className: "shrink-0", children: [
11575
- /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("rect", { width: "12", height: "12", rx: "3", fill: color, fillOpacity: "0.25" }),
11576
- /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("line", { x1: "1", x2: "11", y1: "3", y2: "3", stroke: color, strokeWidth: "2", strokeLinecap: "round" })
11783
+ return /* @__PURE__ */ (0, import_jsx_runtime121.jsxs)("svg", { width: "12", height: "12", "aria-hidden": "true", className: "shrink-0", children: [
11784
+ /* @__PURE__ */ (0, import_jsx_runtime121.jsx)("rect", { width: "12", height: "12", rx: "3", fill: color, fillOpacity: "0.25" }),
11785
+ /* @__PURE__ */ (0, import_jsx_runtime121.jsx)("line", { x1: "1", x2: "11", y1: "3", y2: "3", stroke: color, strokeWidth: "2", strokeLinecap: "round" })
11577
11786
  ] });
11578
11787
  }
11579
- return /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(LegendSwatch, { color, shape: mark === "line" ? "line" : mark === "dots" ? "dot" : "rect" });
11788
+ return /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(LegendSwatch, { color, shape: mark === "line" ? "line" : mark === "dots" ? "dot" : "rect" });
11580
11789
  }
11581
11790
  function MixedChart({
11582
11791
  data,
@@ -11600,7 +11809,7 @@ function MixedChart({
11600
11809
  const series = allSeries.filter((s) => visibility.isVisible(s.id));
11601
11810
  const colorOf = (id) => seriesColor(allSeries.findIndex((s) => s.id === id));
11602
11811
  const count3 = data.length;
11603
- if (count3 === 0 || allSeries.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(import_jsx_runtime120.Fragment, { children: empty ?? null });
11812
+ if (count3 === 0 || allSeries.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(import_jsx_runtime121.Fragment, { children: empty ?? null });
11604
11813
  const totals = data.map((d) => series.reduce((sum, s) => sum + Math.max(0, d.values[s.id] ?? 0), 0));
11605
11814
  const max = mark === "stacked" ? Math.max(0, ...totals) : Math.max(0, ...data.flatMap((d) => series.map((s) => d.values[s.id] ?? 0)));
11606
11815
  const ticks = chartValueTicks(max, { integer });
@@ -11639,7 +11848,7 @@ function MixedChart({
11639
11848
  });
11640
11849
  };
11641
11850
  const activeDatum = active === null ? null : data[active];
11642
- const strokeFor = (s) => /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
11851
+ const strokeFor = (s) => /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
11643
11852
  "path",
11644
11853
  {
11645
11854
  "data-series": s.id,
@@ -11663,7 +11872,7 @@ function MixedChart({
11663
11872
  const bottom = mark === "stacked" ? y(stackTop) : plotBottom;
11664
11873
  if (mark === "stacked") stackTop += value;
11665
11874
  const barTop = mark === "stacked" ? y(stackTop) : y(value);
11666
- return /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
11875
+ return /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
11667
11876
  "rect",
11668
11877
  {
11669
11878
  "data-series": s.id,
@@ -11681,11 +11890,11 @@ function MixedChart({
11681
11890
  });
11682
11891
  }
11683
11892
  if (mark === "dots") {
11684
- return series.map((s) => /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("g", { "data-series": s.id, "data-mark": "dots", children: data.map((d, index) => /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("circle", { cx: x(index), cy: y(d.values[s.id] ?? 0), r: 4, fill: colorOf(s.id), stroke: "var(--card)", strokeWidth: 1.5 }, d.key)) }, s.id));
11893
+ return series.map((s) => /* @__PURE__ */ (0, import_jsx_runtime121.jsx)("g", { "data-series": s.id, "data-mark": "dots", children: data.map((d, index) => /* @__PURE__ */ (0, import_jsx_runtime121.jsx)("circle", { cx: x(index), cy: y(d.values[s.id] ?? 0), r: 4, fill: colorOf(s.id), stroke: "var(--card)", strokeWidth: 1.5 }, d.key)) }, s.id));
11685
11894
  }
11686
11895
  if (mark === "area") {
11687
- return /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)(import_jsx_runtime120.Fragment, { children: [
11688
- series.map((s) => /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
11896
+ return /* @__PURE__ */ (0, import_jsx_runtime121.jsxs)(import_jsx_runtime121.Fragment, { children: [
11897
+ series.map((s) => /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
11689
11898
  "path",
11690
11899
  {
11691
11900
  d: `${pathFor(s.id)}L${x(count3 - 1)},${plotBottom}L${x(0)},${plotBottom}Z`,
@@ -11698,7 +11907,7 @@ function MixedChart({
11698
11907
  }
11699
11908
  return series.map(strokeFor);
11700
11909
  };
11701
- return /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
11910
+ return /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
11702
11911
  ChartFrame,
11703
11912
  {
11704
11913
  ...head,
@@ -11708,14 +11917,14 @@ function MixedChart({
11708
11917
  label,
11709
11918
  className,
11710
11919
  scale: `${scaleLabel} \xB7 linear, from 0`,
11711
- legend: /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
11920
+ legend: /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
11712
11921
  ChartLegend,
11713
11922
  {
11714
11923
  items: allSeries.map((s) => ({
11715
11924
  id: s.id,
11716
11925
  label: s.label,
11717
11926
  color: colorOf(s.id),
11718
- swatch: /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(MarkSwatch, { mark, color: colorOf(s.id) })
11927
+ swatch: /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(MarkSwatch, { mark, color: colorOf(s.id) })
11719
11928
  })),
11720
11929
  ...visibility.legend
11721
11930
  }
@@ -11725,7 +11934,7 @@ function MixedChart({
11725
11934
  rows: data.map((d) => [d.detail ?? d.label, ...allSeries.map((s) => formatValue(d.values[s.id] ?? 0))])
11726
11935
  },
11727
11936
  announcement: activeDatum ? tooltipText(activeDatum.detail ?? activeDatum.label, rowsAt(active)) : void 0,
11728
- children: /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)(
11937
+ children: /* @__PURE__ */ (0, import_jsx_runtime121.jsxs)(
11729
11938
  "div",
11730
11939
  {
11731
11940
  ref: containerRef,
@@ -11737,7 +11946,7 @@ function MixedChart({
11737
11946
  onBlur: () => setActive(null),
11738
11947
  className: plotClass,
11739
11948
  children: [
11740
- /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)(
11949
+ /* @__PURE__ */ (0, import_jsx_runtime121.jsxs)(
11741
11950
  "svg",
11742
11951
  {
11743
11952
  width: "100%",
@@ -11748,13 +11957,13 @@ function MixedChart({
11748
11957
  onPointerMove,
11749
11958
  onPointerLeave: () => setActive(null),
11750
11959
  children: [
11751
- /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("defs", { children: mark === "area" && series.map((s) => /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)("linearGradient", { id: `${idBase}-wash-${s.id}`, x1: "0", x2: "0", y1: "0", y2: "1", children: [
11752
- /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("stop", { offset: "0", stopColor: colorOf(s.id), stopOpacity: "0.22" }),
11753
- /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("stop", { offset: "1", stopColor: colorOf(s.id), stopOpacity: "0.03" })
11960
+ /* @__PURE__ */ (0, import_jsx_runtime121.jsx)("defs", { children: mark === "area" && series.map((s) => /* @__PURE__ */ (0, import_jsx_runtime121.jsxs)("linearGradient", { id: `${idBase}-wash-${s.id}`, x1: "0", x2: "0", y1: "0", y2: "1", children: [
11961
+ /* @__PURE__ */ (0, import_jsx_runtime121.jsx)("stop", { offset: "0", stopColor: colorOf(s.id), stopOpacity: "0.22" }),
11962
+ /* @__PURE__ */ (0, import_jsx_runtime121.jsx)("stop", { offset: "1", stopColor: colorOf(s.id), stopOpacity: "0.03" })
11754
11963
  ] }, s.id)) }),
11755
- /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("g", { "data-slot": "chart-y-axis", children: ticks.map((tick, index) => /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)("g", { children: [
11756
- /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("line", { x1: plotLeft, x2: plotRight, y1: y(tick), y2: y(tick), stroke: "var(--border)" }),
11757
- /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
11964
+ /* @__PURE__ */ (0, import_jsx_runtime121.jsx)("g", { "data-slot": "chart-y-axis", children: ticks.map((tick, index) => /* @__PURE__ */ (0, import_jsx_runtime121.jsxs)("g", { children: [
11965
+ /* @__PURE__ */ (0, import_jsx_runtime121.jsx)("line", { x1: plotLeft, x2: plotRight, y1: y(tick), y2: y(tick), stroke: "var(--border)" }),
11966
+ /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
11758
11967
  "text",
11759
11968
  {
11760
11969
  x: plotLeft - 8,
@@ -11768,7 +11977,7 @@ function MixedChart({
11768
11977
  }
11769
11978
  )
11770
11979
  ] }, tick)) }),
11771
- active !== null && /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
11980
+ active !== null && /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
11772
11981
  "rect",
11773
11982
  {
11774
11983
  "data-slot": "chart-active-band",
@@ -11780,8 +11989,8 @@ function MixedChart({
11780
11989
  fillOpacity: 0.08
11781
11990
  }
11782
11991
  ),
11783
- /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("g", { "data-slot": "chart-marks", "data-view": mark, children: marksLayer() }),
11784
- active !== null && /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("g", { "data-slot": "chart-crosshair", children: (mark === "bar" || mark === "stacked" ? [] : series).map((s) => /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
11992
+ /* @__PURE__ */ (0, import_jsx_runtime121.jsx)("g", { "data-slot": "chart-marks", "data-view": mark, children: marksLayer() }),
11993
+ active !== null && /* @__PURE__ */ (0, import_jsx_runtime121.jsx)("g", { "data-slot": "chart-crosshair", children: (mark === "bar" || mark === "stacked" ? [] : series).map((s) => /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
11785
11994
  "circle",
11786
11995
  {
11787
11996
  cx: x(active),
@@ -11793,7 +12002,7 @@ function MixedChart({
11793
12002
  },
11794
12003
  s.id
11795
12004
  )) }),
11796
- /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("g", { "data-slot": "chart-x-axis", children: labelIndices.map((index) => /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
12005
+ /* @__PURE__ */ (0, import_jsx_runtime121.jsx)("g", { "data-slot": "chart-x-axis", children: labelIndices.map((index) => /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
11797
12006
  "text",
11798
12007
  {
11799
12008
  x: x(index),
@@ -11808,7 +12017,7 @@ function MixedChart({
11808
12017
  ]
11809
12018
  }
11810
12019
  ),
11811
- activeDatum && /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
12020
+ activeDatum && /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
11812
12021
  ChartTooltip,
11813
12022
  {
11814
12023
  title: activeDatum.detail ?? activeDatum.label,
@@ -11826,7 +12035,7 @@ function MixedChart({
11826
12035
  }
11827
12036
 
11828
12037
  // src/web/components/charts/bar-list.tsx
11829
- var import_jsx_runtime121 = require("react/jsx-runtime");
12038
+ var import_jsx_runtime122 = require("react/jsx-runtime");
11830
12039
  function BarList({
11831
12040
  items,
11832
12041
  label,
@@ -11839,7 +12048,7 @@ function BarList({
11839
12048
  className,
11840
12049
  ...head
11841
12050
  }) {
11842
- if (items.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(import_jsx_runtime121.Fragment, { children: empty ?? null });
12051
+ if (items.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime122.jsx)(import_jsx_runtime122.Fragment, { children: empty ?? null });
11843
12052
  const rows = sort === "desc" ? [...items].sort((a, b) => b.value - a.value) : items;
11844
12053
  const top = Math.max(max ?? 0, ...rows.map((item) => item.value), 0) || 1;
11845
12054
  const sum = rows.reduce((acc, item) => acc + Math.max(0, item.value), 0);
@@ -11847,7 +12056,7 @@ function BarList({
11847
12056
  const framed = head.title !== void 0 || (head.timeframes?.length ?? 0) > 0;
11848
12057
  const label_ = labelWidth ? `minmax(0,${labelWidth})` : "auto";
11849
12058
  const wideColumns = showPercent ? `${label_} 1fr auto auto` : `${label_} 1fr auto`;
11850
- const list = /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
12059
+ const list = /* @__PURE__ */ (0, import_jsx_runtime122.jsx)(
11851
12060
  "ol",
11852
12061
  {
11853
12062
  "data-slot": "bar-list",
@@ -11862,7 +12071,7 @@ function BarList({
11862
12071
  style: { "--bar-list-columns": wideColumns },
11863
12072
  children: rows.map((item) => {
11864
12073
  const share = Math.max(0, item.value) / top;
11865
- return /* @__PURE__ */ (0, import_jsx_runtime121.jsxs)(
12074
+ return /* @__PURE__ */ (0, import_jsx_runtime122.jsxs)(
11866
12075
  "li",
11867
12076
  {
11868
12077
  "data-slot": "bar-list-row",
@@ -11873,13 +12082,13 @@ function BarList({
11873
12082
  "sm:col-span-full sm:grid-cols-subgrid sm:items-center sm:gap-y-0"
11874
12083
  ),
11875
12084
  children: [
11876
- /* @__PURE__ */ (0, import_jsx_runtime121.jsx)("span", { className: cn("min-w-0 truncate text-muted-foreground", !labelWidth && "sm:max-w-[10rem]"), children: item.label }),
11877
- /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
12085
+ /* @__PURE__ */ (0, import_jsx_runtime122.jsx)("span", { className: cn("min-w-0 truncate text-muted-foreground", !labelWidth && "sm:max-w-[10rem]"), children: item.label }),
12086
+ /* @__PURE__ */ (0, import_jsx_runtime122.jsx)(
11878
12087
  "span",
11879
12088
  {
11880
12089
  className: "order-last col-span-full h-2 overflow-hidden rounded-full bg-primary/15 shadow-inner sm:order-none sm:col-span-1",
11881
12090
  "aria-hidden": "true",
11882
- children: /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
12091
+ children: /* @__PURE__ */ (0, import_jsx_runtime122.jsx)(
11883
12092
  "span",
11884
12093
  {
11885
12094
  className: "block h-full rounded-full bg-primary bg-gradient-primary",
@@ -11892,8 +12101,8 @@ function BarList({
11892
12101
  )
11893
12102
  }
11894
12103
  ),
11895
- /* @__PURE__ */ (0, import_jsx_runtime121.jsx)("span", { className: "whitespace-nowrap text-right font-semibold tabular-nums text-foreground", children: item.valueText ?? formatValue(item.value) }),
11896
- showPercent && /* @__PURE__ */ (0, import_jsx_runtime121.jsx)("span", { className: "text-right tabular-nums text-muted-foreground", children: percentOf(item) })
12104
+ /* @__PURE__ */ (0, import_jsx_runtime122.jsx)("span", { className: "whitespace-nowrap text-right font-semibold tabular-nums text-foreground", children: item.valueText ?? formatValue(item.value) }),
12105
+ showPercent && /* @__PURE__ */ (0, import_jsx_runtime122.jsx)("span", { className: "text-right tabular-nums text-muted-foreground", children: percentOf(item) })
11897
12106
  ]
11898
12107
  },
11899
12108
  item.id
@@ -11902,7 +12111,7 @@ function BarList({
11902
12111
  }
11903
12112
  );
11904
12113
  if (!framed) return list;
11905
- return /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
12114
+ return /* @__PURE__ */ (0, import_jsx_runtime122.jsx)(
11906
12115
  ChartFrame,
11907
12116
  {
11908
12117
  ...head,
@@ -11925,7 +12134,7 @@ function formatPercent(fraction) {
11925
12134
 
11926
12135
  // src/web/components/charts/donut-chart.tsx
11927
12136
  var import_react37 = require("react");
11928
- var import_jsx_runtime122 = require("react/jsx-runtime");
12137
+ var import_jsx_runtime123 = require("react/jsx-runtime");
11929
12138
  var OTHER_ID = "__other";
11930
12139
  function foldSegments(segments) {
11931
12140
  const positive = segments.filter((s) => s.value > 0);
@@ -11963,7 +12172,7 @@ function DonutChart({
11963
12172
  const visibility = useSeriesVisibility(allParts.map((part) => part.id));
11964
12173
  const parts = allParts.filter((part) => visibility.isVisible(part.id));
11965
12174
  const total = parts.reduce((sum, s) => sum + s.value, 0);
11966
- if (parts.length === 0 || total <= 0) return /* @__PURE__ */ (0, import_jsx_runtime122.jsx)(import_jsx_runtime122.Fragment, { children: empty ?? null });
12175
+ if (parts.length === 0 || total <= 0) return /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(import_jsx_runtime123.Fragment, { children: empty ?? null });
11967
12176
  const cx = size / 2;
11968
12177
  const cy = size / 2;
11969
12178
  const outer = size / 2 - 2;
@@ -11989,13 +12198,13 @@ function DonutChart({
11989
12198
  return next === void 0 ? current : next;
11990
12199
  });
11991
12200
  };
11992
- return /* @__PURE__ */ (0, import_jsx_runtime122.jsx)(
12201
+ return /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(
11993
12202
  ChartFrame,
11994
12203
  {
11995
12204
  ...head,
11996
12205
  label,
11997
12206
  className,
11998
- legend: /* @__PURE__ */ (0, import_jsx_runtime122.jsx)(
12207
+ legend: /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(
11999
12208
  ChartLegend,
12000
12209
  {
12001
12210
  items: allParts.map((part) => ({
@@ -12014,7 +12223,7 @@ function DonutChart({
12014
12223
  ]
12015
12224
  },
12016
12225
  announcement: activePart ? `${activePart.label}: ${formatValue(activePart.value)}, ${share(activePart.value)}` : void 0,
12017
- children: /* @__PURE__ */ (0, import_jsx_runtime122.jsx)(
12226
+ children: /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(
12018
12227
  "div",
12019
12228
  {
12020
12229
  role: "group",
@@ -12025,8 +12234,8 @@ function DonutChart({
12025
12234
  onBlur: () => setActive(null),
12026
12235
  onPointerLeave: () => setActive(null),
12027
12236
  className: `${plotClass} flex justify-center py-4`,
12028
- children: /* @__PURE__ */ (0, import_jsx_runtime122.jsxs)("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, "aria-hidden": "true", className: "block max-w-full", children: [
12029
- arcs.map(({ part, start, end }, index) => /* @__PURE__ */ (0, import_jsx_runtime122.jsx)(
12237
+ children: /* @__PURE__ */ (0, import_jsx_runtime123.jsxs)("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, "aria-hidden": "true", className: "block max-w-full", children: [
12238
+ arcs.map(({ part, start, end }, index) => /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(
12030
12239
  "path",
12031
12240
  {
12032
12241
  "data-segment": part.id,
@@ -12037,7 +12246,7 @@ function DonutChart({
12037
12246
  },
12038
12247
  part.id
12039
12248
  )),
12040
- /* @__PURE__ */ (0, import_jsx_runtime122.jsx)(
12249
+ /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(
12041
12250
  "text",
12042
12251
  {
12043
12252
  x: cx,
@@ -12049,7 +12258,7 @@ function DonutChart({
12049
12258
  children: formatValue(activePart ? activePart.value : total)
12050
12259
  }
12051
12260
  ),
12052
- /* @__PURE__ */ (0, import_jsx_runtime122.jsx)("text", { x: cx, y: cy + 16, textAnchor: "middle", fontSize: 11, fill: "var(--muted-foreground)", children: activePart ? `${activePart.label} \xB7 ${share(activePart.value)}` : totalLabel })
12261
+ /* @__PURE__ */ (0, import_jsx_runtime123.jsx)("text", { x: cx, y: cy + 16, textAnchor: "middle", fontSize: 11, fill: "var(--muted-foreground)", children: activePart ? `${activePart.label} \xB7 ${share(activePart.value)}` : totalLabel })
12053
12262
  ] })
12054
12263
  }
12055
12264
  )
@@ -12059,7 +12268,7 @@ function DonutChart({
12059
12268
 
12060
12269
  // src/web/components/charts/scatter-chart.tsx
12061
12270
  var import_react38 = require("react");
12062
- var import_jsx_runtime123 = require("react/jsx-runtime");
12271
+ var import_jsx_runtime124 = require("react/jsx-runtime");
12063
12272
  var MARGIN4 = { top: 12, right: 16, bottom: 40, left: 8 };
12064
12273
  var HIT_RADIUS = 12;
12065
12274
  function ScatterChart({
@@ -12085,7 +12294,7 @@ function ScatterChart({
12085
12294
  );
12086
12295
  }
12087
12296
  const points = series.flatMap((s) => s.points.map((p) => ({ ...p, slot: slotOf(s.id), seriesLabel: s.label }))).sort((a, b) => a.x - b.x);
12088
- if (points.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(import_jsx_runtime123.Fragment, { children: empty ?? null });
12297
+ if (points.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(import_jsx_runtime124.Fragment, { children: empty ?? null });
12089
12298
  const xMax = Math.max(0, ...points.map((p) => p.x));
12090
12299
  const yMax = Math.max(0, ...points.map((p) => p.y));
12091
12300
  const xTicks = chartValueTicks(xMax);
@@ -12124,14 +12333,14 @@ function ScatterChart({
12124
12333
  };
12125
12334
  const activePoint = active === null ? null : points[active];
12126
12335
  const describe = (p) => `${p.label ?? p.seriesLabel}: ${xLabel} ${formatX(p.x)}, ${yLabel} ${formatY(p.y)}`;
12127
- return /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(
12336
+ return /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
12128
12337
  ChartFrame,
12129
12338
  {
12130
12339
  ...head,
12131
12340
  label,
12132
12341
  className,
12133
12342
  scale: `${yLabel} against ${xLabel} \xB7 both linear, from 0`,
12134
- legend: allSeries.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(
12343
+ legend: allSeries.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
12135
12344
  ChartLegend,
12136
12345
  {
12137
12346
  keyShape: "dot",
@@ -12144,7 +12353,7 @@ function ScatterChart({
12144
12353
  rows: points.map((p) => [p.label ?? p.id, p.seriesLabel, formatX(p.x), formatY(p.y)])
12145
12354
  },
12146
12355
  announcement: activePoint ? describe(activePoint) : void 0,
12147
- children: /* @__PURE__ */ (0, import_jsx_runtime123.jsxs)(
12356
+ children: /* @__PURE__ */ (0, import_jsx_runtime124.jsxs)(
12148
12357
  "div",
12149
12358
  {
12150
12359
  ref: containerRef,
@@ -12156,7 +12365,7 @@ function ScatterChart({
12156
12365
  onBlur: () => setActive(null),
12157
12366
  className: plotClass,
12158
12367
  children: [
12159
- /* @__PURE__ */ (0, import_jsx_runtime123.jsxs)(
12368
+ /* @__PURE__ */ (0, import_jsx_runtime124.jsxs)(
12160
12369
  "svg",
12161
12370
  {
12162
12371
  width: "100%",
@@ -12167,13 +12376,13 @@ function ScatterChart({
12167
12376
  onPointerMove,
12168
12377
  onPointerLeave: () => setActive(null),
12169
12378
  children: [
12170
- /* @__PURE__ */ (0, import_jsx_runtime123.jsx)("g", { "data-slot": "chart-y-axis", children: yTicks.map((tick, index) => /* @__PURE__ */ (0, import_jsx_runtime123.jsxs)("g", { children: [
12171
- /* @__PURE__ */ (0, import_jsx_runtime123.jsx)("line", { x1: plotLeft, x2: plotRight, y1: sy(tick), y2: sy(tick), stroke: "var(--border)" }),
12172
- /* @__PURE__ */ (0, import_jsx_runtime123.jsx)("text", { x: plotLeft - 8, y: sy(tick), dy: "0.32em", textAnchor: "end", fontSize: TICK_FONT, fill: "var(--muted-foreground)", style: { fontVariantNumeric: "tabular-nums" }, children: yTickLabels[index] })
12379
+ /* @__PURE__ */ (0, import_jsx_runtime124.jsx)("g", { "data-slot": "chart-y-axis", children: yTicks.map((tick, index) => /* @__PURE__ */ (0, import_jsx_runtime124.jsxs)("g", { children: [
12380
+ /* @__PURE__ */ (0, import_jsx_runtime124.jsx)("line", { x1: plotLeft, x2: plotRight, y1: sy(tick), y2: sy(tick), stroke: "var(--border)" }),
12381
+ /* @__PURE__ */ (0, import_jsx_runtime124.jsx)("text", { x: plotLeft - 8, y: sy(tick), dy: "0.32em", textAnchor: "end", fontSize: TICK_FONT, fill: "var(--muted-foreground)", style: { fontVariantNumeric: "tabular-nums" }, children: yTickLabels[index] })
12173
12382
  ] }, tick)) }),
12174
- /* @__PURE__ */ (0, import_jsx_runtime123.jsxs)("g", { "data-slot": "chart-x-axis", children: [
12175
- /* @__PURE__ */ (0, import_jsx_runtime123.jsx)("line", { x1: plotLeft, x2: plotRight, y1: plotBottom, y2: plotBottom, stroke: "var(--border)" }),
12176
- xTicks.map((tick, index) => /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(
12383
+ /* @__PURE__ */ (0, import_jsx_runtime124.jsxs)("g", { "data-slot": "chart-x-axis", children: [
12384
+ /* @__PURE__ */ (0, import_jsx_runtime124.jsx)("line", { x1: plotLeft, x2: plotRight, y1: plotBottom, y2: plotBottom, stroke: "var(--border)" }),
12385
+ xTicks.map((tick, index) => /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
12177
12386
  "text",
12178
12387
  {
12179
12388
  x: sx(tick),
@@ -12186,12 +12395,12 @@ function ScatterChart({
12186
12395
  },
12187
12396
  tick
12188
12397
  )),
12189
- /* @__PURE__ */ (0, import_jsx_runtime123.jsxs)("text", { x: plotRight, y: plotBottom + 34, textAnchor: "end", fontSize: TICK_FONT, fill: "var(--muted-foreground)", children: [
12398
+ /* @__PURE__ */ (0, import_jsx_runtime124.jsxs)("text", { x: plotRight, y: plotBottom + 34, textAnchor: "end", fontSize: TICK_FONT, fill: "var(--muted-foreground)", children: [
12190
12399
  xLabel,
12191
12400
  " \u2192"
12192
12401
  ] })
12193
12402
  ] }),
12194
- /* @__PURE__ */ (0, import_jsx_runtime123.jsx)("g", { "data-slot": "chart-points", children: points.map((p, index) => /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(
12403
+ /* @__PURE__ */ (0, import_jsx_runtime124.jsx)("g", { "data-slot": "chart-points", children: points.map((p, index) => /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
12195
12404
  "circle",
12196
12405
  {
12197
12406
  "data-series": allSeries[p.slot].id,
@@ -12208,7 +12417,7 @@ function ScatterChart({
12208
12417
  ]
12209
12418
  }
12210
12419
  ),
12211
- activePoint && /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(
12420
+ activePoint && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
12212
12421
  ChartTooltip,
12213
12422
  {
12214
12423
  title: activePoint.label ?? activePoint.seriesLabel,
@@ -12230,7 +12439,7 @@ function ScatterChart({
12230
12439
 
12231
12440
  // src/web/components/charts/sparkline.tsx
12232
12441
  var import_react39 = require("react");
12233
- var import_jsx_runtime124 = require("react/jsx-runtime");
12442
+ var import_jsx_runtime125 = require("react/jsx-runtime");
12234
12443
  function Sparkline({ values, label, width = 96, height = 28, pulse = false, tone = "default", className }) {
12235
12444
  const fill = height === "fill";
12236
12445
  const boxRef = (0, import_react39.useRef)(null);
@@ -12250,13 +12459,13 @@ function Sparkline({ values, label, width = 96, height = 28, pulse = false, tone
12250
12459
  const min = Math.min(...values);
12251
12460
  const max = Math.max(...values);
12252
12461
  const span = max - min || 1;
12253
- const pad = 4;
12254
- const x = (index) => pad + index / (values.length - 1) * (width - pad * 2);
12255
- const y = (value) => h - pad - (value - min) / span * (h - pad * 2);
12462
+ const pad2 = 4;
12463
+ const x = (index) => pad2 + index / (values.length - 1) * (width - pad2 * 2);
12464
+ const y = (value) => h - pad2 - (value - min) / span * (h - pad2 * 2);
12256
12465
  const d = values.map((value, index) => `${index === 0 ? "M" : "L"}${x(index).toFixed(1)},${y(value).toFixed(1)}`).join("");
12257
12466
  const last = values.length - 1;
12258
12467
  const dot = tone === "negative" ? "var(--color-danger)" : "var(--series-1)";
12259
- const svg = /* @__PURE__ */ (0, import_jsx_runtime124.jsxs)(
12468
+ const svg = /* @__PURE__ */ (0, import_jsx_runtime125.jsxs)(
12260
12469
  "svg",
12261
12470
  {
12262
12471
  "data-slot": "sparkline",
@@ -12267,8 +12476,8 @@ function Sparkline({ values, label, width = 96, height = 28, pulse = false, tone
12267
12476
  viewBox: `0 0 ${width} ${h}`,
12268
12477
  className: cn("block shrink-0 overflow-visible", !fill && className, fill && "absolute inset-y-0 right-0"),
12269
12478
  children: [
12270
- /* @__PURE__ */ (0, import_jsx_runtime124.jsx)("path", { d, fill: "none", stroke: "var(--muted-foreground)", strokeWidth: 1.5, strokeLinejoin: "round", strokeLinecap: "round" }),
12271
- pulse && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
12479
+ /* @__PURE__ */ (0, import_jsx_runtime125.jsx)("path", { d, fill: "none", stroke: "var(--muted-foreground)", strokeWidth: 1.5, strokeLinejoin: "round", strokeLinecap: "round" }),
12480
+ pulse && /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(
12272
12481
  "circle",
12273
12482
  {
12274
12483
  "data-slot": "sparkline-pulse",
@@ -12281,16 +12490,16 @@ function Sparkline({ values, label, width = 96, height = 28, pulse = false, tone
12281
12490
  style: { transformBox: "fill-box", transformOrigin: "center" }
12282
12491
  }
12283
12492
  ),
12284
- /* @__PURE__ */ (0, import_jsx_runtime124.jsx)("circle", { cx: x(last), cy: y(values[last]), r: 4, fill: dot, stroke: "var(--card)", strokeWidth: 2 })
12493
+ /* @__PURE__ */ (0, import_jsx_runtime125.jsx)("circle", { cx: x(last), cy: y(values[last]), r: 4, fill: dot, stroke: "var(--card)", strokeWidth: 2 })
12285
12494
  ]
12286
12495
  }
12287
12496
  );
12288
12497
  if (!fill) return svg;
12289
- return /* @__PURE__ */ (0, import_jsx_runtime124.jsx)("span", { ref: boxRef, className: cn("relative block h-full", className), style: { width }, children: svg });
12498
+ return /* @__PURE__ */ (0, import_jsx_runtime125.jsx)("span", { ref: boxRef, className: cn("relative block h-full", className), style: { width }, children: svg });
12290
12499
  }
12291
12500
 
12292
12501
  // src/web/components/charts/meter.tsx
12293
- var import_jsx_runtime125 = require("react/jsx-runtime");
12502
+ var import_jsx_runtime126 = require("react/jsx-runtime");
12294
12503
  function Meter({
12295
12504
  label,
12296
12505
  value,
@@ -12305,19 +12514,19 @@ function Meter({
12305
12514
  const fill = { normal: "bg-primary bg-gradient-primary", warning: "bg-warning bg-gradient-warning", danger: "bg-danger bg-gradient-danger" }[state];
12306
12515
  const track = { normal: "bg-primary/15", warning: "bg-warning/15", danger: "bg-danger/15" }[state];
12307
12516
  const percent = Math.round(ratio * 100);
12308
- return /* @__PURE__ */ (0, import_jsx_runtime125.jsxs)("div", { "data-slot": "meter", "data-state": state, className: cn("space-y-1.5", className), children: [
12309
- /* @__PURE__ */ (0, import_jsx_runtime125.jsxs)("div", { className: "flex items-baseline justify-between gap-3 text-caption", children: [
12310
- /* @__PURE__ */ (0, import_jsx_runtime125.jsx)("span", { className: "text-muted-foreground", children: label }),
12311
- /* @__PURE__ */ (0, import_jsx_runtime125.jsxs)("span", { className: "font-semibold tabular-nums text-foreground", children: [
12517
+ return /* @__PURE__ */ (0, import_jsx_runtime126.jsxs)("div", { "data-slot": "meter", "data-state": state, className: cn("space-y-1.5", className), children: [
12518
+ /* @__PURE__ */ (0, import_jsx_runtime126.jsxs)("div", { className: "flex items-baseline justify-between gap-3 text-caption", children: [
12519
+ /* @__PURE__ */ (0, import_jsx_runtime126.jsx)("span", { className: "text-muted-foreground", children: label }),
12520
+ /* @__PURE__ */ (0, import_jsx_runtime126.jsxs)("span", { className: "font-semibold tabular-nums text-foreground", children: [
12312
12521
  formatValue(value),
12313
12522
  " ",
12314
- /* @__PURE__ */ (0, import_jsx_runtime125.jsxs)("span", { className: "font-normal text-muted-foreground", children: [
12523
+ /* @__PURE__ */ (0, import_jsx_runtime126.jsxs)("span", { className: "font-normal text-muted-foreground", children: [
12315
12524
  "/ ",
12316
12525
  formatValue(max)
12317
12526
  ] })
12318
12527
  ] })
12319
12528
  ] }),
12320
- /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(
12529
+ /* @__PURE__ */ (0, import_jsx_runtime126.jsx)(
12321
12530
  "div",
12322
12531
  {
12323
12532
  role: "meter",
@@ -12327,18 +12536,18 @@ function Meter({
12327
12536
  "aria-valuetext": `${formatValue(value)} of ${formatValue(max)}, ${percent}%`,
12328
12537
  "aria-label": typeof label === "string" ? label : void 0,
12329
12538
  className: cn("h-2 overflow-hidden rounded-full shadow-inner", track),
12330
- children: /* @__PURE__ */ (0, import_jsx_runtime125.jsx)("div", { className: cn("h-full rounded-full transition-[width] duration-300 motion-reduce:transition-none", fill), style: { width: `${ratio * 100}%` } })
12539
+ children: /* @__PURE__ */ (0, import_jsx_runtime126.jsx)("div", { className: cn("h-full rounded-full transition-[width] duration-300 motion-reduce:transition-none", fill), style: { width: `${ratio * 100}%` } })
12331
12540
  }
12332
12541
  ),
12333
- state !== "normal" && /* @__PURE__ */ (0, import_jsx_runtime125.jsxs)("p", { className: cn("m-0 flex items-center gap-1 text-caption", state === "danger" ? "text-danger-fg" : "text-warning-fg"), children: [
12334
- /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(IconGlyph, { glyph: state === "danger" ? Error2 : Warning, className: "text-icon-sm" }),
12542
+ state !== "normal" && /* @__PURE__ */ (0, import_jsx_runtime126.jsxs)("p", { className: cn("m-0 flex items-center gap-1 text-caption", state === "danger" ? "text-danger-fg" : "text-warning-fg"), children: [
12543
+ /* @__PURE__ */ (0, import_jsx_runtime126.jsx)(IconGlyph, { glyph: state === "danger" ? Error2 : Warning, className: "text-icon-sm" }),
12335
12544
  state === "danger" ? `Almost full \xB7 ${percent}%` : `Getting full \xB7 ${percent}%`
12336
12545
  ] })
12337
12546
  ] });
12338
12547
  }
12339
12548
 
12340
12549
  // src/web/components/activity-row.tsx
12341
- var import_jsx_runtime126 = require("react/jsx-runtime");
12550
+ var import_jsx_runtime127 = require("react/jsx-runtime");
12342
12551
  var directionUi = {
12343
12552
  inbound: { icon: "south_west", iconClass: "bg-primary/20 text-brand", amountClass: "text-brand", sign: "+" },
12344
12553
  outbound: { icon: "north_east", iconClass: "bg-foreground/10 text-muted-foreground", amountClass: "text-foreground", sign: "-" },
@@ -12358,29 +12567,29 @@ function ActivityRow({
12358
12567
  className
12359
12568
  }) {
12360
12569
  const ui = directionUi[direction];
12361
- const content = /* @__PURE__ */ (0, import_jsx_runtime126.jsxs)(import_jsx_runtime126.Fragment, { children: [
12362
- /* @__PURE__ */ (0, import_jsx_runtime126.jsxs)("div", { className: "flex min-w-0 items-center gap-3", children: [
12363
- /* @__PURE__ */ (0, import_jsx_runtime126.jsx)(
12570
+ const content = /* @__PURE__ */ (0, import_jsx_runtime127.jsxs)(import_jsx_runtime127.Fragment, { children: [
12571
+ /* @__PURE__ */ (0, import_jsx_runtime127.jsxs)("div", { className: "flex min-w-0 items-center gap-3", children: [
12572
+ /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(
12364
12573
  StatusIconBadge,
12365
12574
  {
12366
12575
  status,
12367
- icon: /* @__PURE__ */ (0, import_jsx_runtime126.jsx)("div", { className: cn("flex size-10 items-center justify-center rounded-xl shadow-inner", ui.iconClass), children: typeof icon === "string" || !icon ? /* @__PURE__ */ (0, import_jsx_runtime126.jsx)(Icon, { name: icon ?? ui.icon, className: "text-icon-xl" }) : icon })
12576
+ icon: /* @__PURE__ */ (0, import_jsx_runtime127.jsx)("div", { className: cn("flex size-10 items-center justify-center rounded-xl shadow-inner", ui.iconClass), children: typeof icon === "string" || !icon ? /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(Icon, { name: icon ?? ui.icon, className: "text-icon-xl" }) : icon })
12368
12577
  }
12369
12578
  ),
12370
- /* @__PURE__ */ (0, import_jsx_runtime126.jsxs)("div", { className: "flex min-w-0 flex-col", children: [
12371
- /* @__PURE__ */ (0, import_jsx_runtime126.jsxs)("div", { className: "flex min-w-0 items-center gap-1.5", children: [
12372
- /* @__PURE__ */ (0, import_jsx_runtime126.jsx)("span", { className: "truncate text-body font-bold tracking-wide text-foreground", children: title }),
12579
+ /* @__PURE__ */ (0, import_jsx_runtime127.jsxs)("div", { className: "flex min-w-0 flex-col", children: [
12580
+ /* @__PURE__ */ (0, import_jsx_runtime127.jsxs)("div", { className: "flex min-w-0 items-center gap-1.5", children: [
12581
+ /* @__PURE__ */ (0, import_jsx_runtime127.jsx)("span", { className: "truncate text-body font-bold tracking-wide text-foreground", children: title }),
12373
12582
  networkBadge
12374
12583
  ] }),
12375
- timestamp && /* @__PURE__ */ (0, import_jsx_runtime126.jsx)("div", { className: "mt-1 flex items-center gap-2", children: /* @__PURE__ */ (0, import_jsx_runtime126.jsx)("span", { className: "text-xxs text-muted-foreground", children: timestamp }) })
12584
+ timestamp && /* @__PURE__ */ (0, import_jsx_runtime127.jsx)("div", { className: "mt-1 flex items-center gap-2", children: /* @__PURE__ */ (0, import_jsx_runtime127.jsx)("span", { className: "text-xxs text-muted-foreground", children: timestamp }) })
12376
12585
  ] })
12377
12586
  ] }),
12378
- /* @__PURE__ */ (0, import_jsx_runtime126.jsxs)("div", { className: "shrink-0 text-right", children: [
12379
- /* @__PURE__ */ (0, import_jsx_runtime126.jsxs)("p", { className: cn("text-body font-bold tracking-wide", ui.amountClass), children: [
12587
+ /* @__PURE__ */ (0, import_jsx_runtime127.jsxs)("div", { className: "shrink-0 text-right", children: [
12588
+ /* @__PURE__ */ (0, import_jsx_runtime127.jsxs)("p", { className: cn("text-body font-bold tracking-wide", ui.amountClass), children: [
12380
12589
  ui.sign,
12381
12590
  amount
12382
12591
  ] }),
12383
- unit && /* @__PURE__ */ (0, import_jsx_runtime126.jsx)("p", { className: cn("mt-0.5 text-muted-foreground", eyebrow), children: unit })
12592
+ unit && /* @__PURE__ */ (0, import_jsx_runtime127.jsx)("p", { className: cn("mt-0.5 text-muted-foreground", eyebrow), children: unit })
12384
12593
  ] })
12385
12594
  ] });
12386
12595
  const rowClassName = cn(
@@ -12389,13 +12598,13 @@ function ActivityRow({
12389
12598
  className
12390
12599
  );
12391
12600
  if (onClick) {
12392
- return /* @__PURE__ */ (0, import_jsx_runtime126.jsx)("button", { type: "button", onClick, className: rowClassName, children: content });
12601
+ return /* @__PURE__ */ (0, import_jsx_runtime127.jsx)("button", { type: "button", onClick, className: rowClassName, children: content });
12393
12602
  }
12394
- return /* @__PURE__ */ (0, import_jsx_runtime126.jsx)("div", { className: rowClassName, children: content });
12603
+ return /* @__PURE__ */ (0, import_jsx_runtime127.jsx)("div", { className: rowClassName, children: content });
12395
12604
  }
12396
12605
 
12397
12606
  // src/web/components/secret-reveal-card.tsx
12398
- var import_jsx_runtime127 = require("react/jsx-runtime");
12607
+ var import_jsx_runtime128 = require("react/jsx-runtime");
12399
12608
  function SecretRevealCard({
12400
12609
  value,
12401
12610
  revealed,
@@ -12414,9 +12623,9 @@ function SecretRevealCard({
12414
12623
  const selfCopy = !onCopy && copyValue !== void 0;
12415
12624
  const handleCopy = onCopy ?? (selfCopy ? () => void clipboard.copy(copyValue) : void 0);
12416
12625
  const copied = selfCopy && clipboard.state === "copied";
12417
- return /* @__PURE__ */ (0, import_jsx_runtime127.jsxs)("div", { className: cn("space-y-3", className), children: [
12418
- /* @__PURE__ */ (0, import_jsx_runtime127.jsxs)("div", { className: "relative", children: [
12419
- /* @__PURE__ */ (0, import_jsx_runtime127.jsx)("div", { className: "rounded-xl bg-card/55 bg-gradient-card px-3 py-3 shadow-inner ring-1 ring-inset ring-secondary/15 backdrop-blur-xl backdrop-saturate-150", children: /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(
12626
+ return /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)("div", { className: cn("space-y-3", className), children: [
12627
+ /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)("div", { className: "relative", children: [
12628
+ /* @__PURE__ */ (0, import_jsx_runtime128.jsx)("div", { className: "rounded-xl bg-card/55 bg-gradient-card px-3 py-3 shadow-inner ring-1 ring-inset ring-secondary/15 backdrop-blur-xl backdrop-saturate-150", children: /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(
12420
12629
  "p",
12421
12630
  {
12422
12631
  className: cn(
@@ -12428,17 +12637,17 @@ function SecretRevealCard({
12428
12637
  children: value
12429
12638
  }
12430
12639
  ) }),
12431
- !revealed && /* @__PURE__ */ (0, import_jsx_runtime127.jsx)("div", { className: "absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime127.jsxs)(Button, { type: "button", variant: "surface", size: "sm", onClick: () => onRevealChange(true), children: [
12432
- /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(IconGlyph, { glyph: Visibility, className: "text-icon-lg" }),
12640
+ !revealed && /* @__PURE__ */ (0, import_jsx_runtime128.jsx)("div", { className: "absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)(Button, { type: "button", variant: "surface", size: "sm", onClick: () => onRevealChange(true), children: [
12641
+ /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(IconGlyph, { glyph: Visibility, className: "text-icon-lg" }),
12433
12642
  revealLabel
12434
12643
  ] }) })
12435
12644
  ] }),
12436
- revealed && /* @__PURE__ */ (0, import_jsx_runtime127.jsxs)("div", { className: "flex gap-2", children: [
12437
- /* @__PURE__ */ (0, import_jsx_runtime127.jsxs)(Button, { type: "button", variant: "surface", className: "flex-1", onClick: () => onRevealChange(false), children: [
12438
- /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(IconGlyph, { glyph: VisibilityOff, className: "text-icon-lg" }),
12645
+ revealed && /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)("div", { className: "flex gap-2", children: [
12646
+ /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)(Button, { type: "button", variant: "surface", className: "flex-1", onClick: () => onRevealChange(false), children: [
12647
+ /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(IconGlyph, { glyph: VisibilityOff, className: "text-icon-lg" }),
12439
12648
  hideLabel
12440
12649
  ] }),
12441
- handleCopy && /* @__PURE__ */ (0, import_jsx_runtime127.jsxs)(
12650
+ handleCopy && /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)(
12442
12651
  Button,
12443
12652
  {
12444
12653
  type: "button",
@@ -12446,19 +12655,19 @@ function SecretRevealCard({
12446
12655
  onClick: handleCopy,
12447
12656
  className: cn("flex-1", copied && "bg-primary/10 bg-gradient-active text-brand ring-primary/40 hover:ring-primary/50"),
12448
12657
  children: [
12449
- /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(IconGlyph, { glyph: copied ? Check : ContentCopy, className: "text-icon-lg" }),
12658
+ /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(IconGlyph, { glyph: copied ? Check : ContentCopy, className: "text-icon-lg" }),
12450
12659
  copied ? copiedLabel : copyLabel
12451
12660
  ]
12452
12661
  }
12453
12662
  )
12454
12663
  ] }),
12455
- selfCopy && clipboard.state === "failed" && /* @__PURE__ */ (0, import_jsx_runtime127.jsx)("p", { role: "alert", className: "m-0 text-caption text-danger-fg", children: copyFailedMessage }),
12456
- selfCopy && /* @__PURE__ */ (0, import_jsx_runtime127.jsx)("span", { "aria-live": "polite", className: "sr-only", children: copied ? copiedLabel : "" })
12664
+ selfCopy && clipboard.state === "failed" && /* @__PURE__ */ (0, import_jsx_runtime128.jsx)("p", { role: "alert", className: "m-0 text-caption text-danger-fg", children: copyFailedMessage }),
12665
+ selfCopy && /* @__PURE__ */ (0, import_jsx_runtime128.jsx)("span", { "aria-live": "polite", className: "sr-only", children: copied ? copiedLabel : "" })
12457
12666
  ] });
12458
12667
  }
12459
12668
 
12460
12669
  // src/web/components/settings-section-card.tsx
12461
- var import_jsx_runtime128 = require("react/jsx-runtime");
12670
+ var import_jsx_runtime129 = require("react/jsx-runtime");
12462
12671
  function SettingsSectionCard({
12463
12672
  icon,
12464
12673
  title,
@@ -12468,18 +12677,18 @@ function SettingsSectionCard({
12468
12677
  className,
12469
12678
  bodyClassName
12470
12679
  }) {
12471
- return /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)("section", { className: cn("space-y-4 rounded-xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card p-4 shadow-card-secondary", className), children: [
12472
- /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)("div", { className: "flex items-start justify-between gap-4", children: [
12473
- /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)("div", { className: "flex min-w-0 flex-1 items-start gap-3", children: [
12474
- icon && /* @__PURE__ */ (0, import_jsx_runtime128.jsx)("div", { className: "flex size-10 shrink-0 items-center justify-center rounded-xl bg-secondary/15 text-secondary-content", children: icon }),
12475
- /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)("div", { className: "min-w-0 flex-1", children: [
12476
- /* @__PURE__ */ (0, import_jsx_runtime128.jsx)("h2", { className: "text-body font-bold text-foreground", children: title }),
12477
- description && /* @__PURE__ */ (0, import_jsx_runtime128.jsx)("p", { className: "mt-1 text-caption text-muted-foreground", children: description })
12680
+ return /* @__PURE__ */ (0, import_jsx_runtime129.jsxs)("section", { className: cn("space-y-4 rounded-xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card p-4 shadow-card-secondary", className), children: [
12681
+ /* @__PURE__ */ (0, import_jsx_runtime129.jsxs)("div", { className: "flex items-start justify-between gap-4", children: [
12682
+ /* @__PURE__ */ (0, import_jsx_runtime129.jsxs)("div", { className: "flex min-w-0 flex-1 items-start gap-3", children: [
12683
+ icon && /* @__PURE__ */ (0, import_jsx_runtime129.jsx)("div", { className: "flex size-10 shrink-0 items-center justify-center rounded-xl bg-secondary/15 text-secondary-content", children: icon }),
12684
+ /* @__PURE__ */ (0, import_jsx_runtime129.jsxs)("div", { className: "min-w-0 flex-1", children: [
12685
+ /* @__PURE__ */ (0, import_jsx_runtime129.jsx)("h2", { className: "text-body font-bold text-foreground", children: title }),
12686
+ description && /* @__PURE__ */ (0, import_jsx_runtime129.jsx)("p", { className: "mt-1 text-caption text-muted-foreground", children: description })
12478
12687
  ] })
12479
12688
  ] }),
12480
12689
  badge
12481
12690
  ] }),
12482
- /* @__PURE__ */ (0, import_jsx_runtime128.jsx)("div", { className: bodyClassName, children })
12691
+ /* @__PURE__ */ (0, import_jsx_runtime129.jsx)("div", { className: bodyClassName, children })
12483
12692
  ] });
12484
12693
  }
12485
12694
  var badgeToneClass = {
@@ -12496,7 +12705,7 @@ var badgeToneClass = {
12496
12705
  outline: "border border-border bg-transparent text-foreground"
12497
12706
  };
12498
12707
  function ToneBadge({ children, tone = "muted", case: letterCase = "upper", className }) {
12499
- return /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(
12708
+ return /* @__PURE__ */ (0, import_jsx_runtime129.jsx)(
12500
12709
  "span",
12501
12710
  {
12502
12711
  "data-slot": "tone-badge",
@@ -12512,7 +12721,7 @@ function ToneBadge({ children, tone = "muted", case: letterCase = "upper", class
12512
12721
  }
12513
12722
 
12514
12723
  // src/web/components/selectable-card.tsx
12515
- var import_jsx_runtime129 = require("react/jsx-runtime");
12724
+ var import_jsx_runtime130 = require("react/jsx-runtime");
12516
12725
  function SelectableCard({
12517
12726
  selected,
12518
12727
  onClick,
@@ -12524,28 +12733,28 @@ function SelectableCard({
12524
12733
  children,
12525
12734
  className
12526
12735
  }) {
12527
- const content = /* @__PURE__ */ (0, import_jsx_runtime129.jsxs)("div", { className: "flex items-start justify-between gap-3", children: [
12528
- /* @__PURE__ */ (0, import_jsx_runtime129.jsxs)("div", { className: "flex min-w-0 flex-1 items-start gap-3", children: [
12529
- indicator && /* @__PURE__ */ (0, import_jsx_runtime129.jsx)(
12736
+ const content = /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("div", { className: "flex items-start justify-between gap-3", children: [
12737
+ /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("div", { className: "flex min-w-0 flex-1 items-start gap-3", children: [
12738
+ indicator && /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
12530
12739
  "div",
12531
12740
  {
12532
12741
  className: cn(
12533
12742
  "mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full border-2 transition-colors",
12534
12743
  selected ? "border-primary bg-primary bg-gradient-primary shadow-glow-primary-soft" : "border-secondary/40"
12535
12744
  ),
12536
- children: selected && /* @__PURE__ */ (0, import_jsx_runtime129.jsx)("div", { className: "size-2 rounded-full bg-white" })
12745
+ children: selected && /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("div", { className: "size-2 rounded-full bg-white" })
12537
12746
  }
12538
12747
  ),
12539
- /* @__PURE__ */ (0, import_jsx_runtime129.jsxs)("div", { className: "min-w-0 flex-1", children: [
12540
- /* @__PURE__ */ (0, import_jsx_runtime129.jsxs)("div", { className: "flex flex-wrap items-center gap-2", children: [
12541
- /* @__PURE__ */ (0, import_jsx_runtime129.jsx)("span", { className: "text-body font-bold text-foreground", children: title }),
12748
+ /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("div", { className: "min-w-0 flex-1", children: [
12749
+ /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("div", { className: "flex flex-wrap items-center gap-2", children: [
12750
+ /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("span", { className: "text-body font-bold text-foreground", children: title }),
12542
12751
  badge
12543
12752
  ] }),
12544
- description && /* @__PURE__ */ (0, import_jsx_runtime129.jsx)("p", { className: "mt-0.5 text-caption leading-relaxed text-muted-foreground", children: description }),
12753
+ description && /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("p", { className: "mt-0.5 text-caption leading-relaxed text-muted-foreground", children: description }),
12545
12754
  children
12546
12755
  ] })
12547
12756
  ] }),
12548
- preview && /* @__PURE__ */ (0, import_jsx_runtime129.jsx)("div", { className: "shrink-0 text-right", children: preview })
12757
+ preview && /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("div", { className: "shrink-0 text-right", children: preview })
12549
12758
  ] });
12550
12759
  const cardClassName = cn(
12551
12760
  "w-full rounded-2xl border border-transparent bg-card p-4 text-left transition-all duration-200",
@@ -12553,14 +12762,14 @@ function SelectableCard({
12553
12762
  className
12554
12763
  );
12555
12764
  if (onClick) {
12556
- return /* @__PURE__ */ (0, import_jsx_runtime129.jsx)("button", { type: "button", onClick, className: cardClassName, children: content });
12765
+ return /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("button", { type: "button", onClick, className: cardClassName, children: content });
12557
12766
  }
12558
- return /* @__PURE__ */ (0, import_jsx_runtime129.jsx)("div", { className: cardClassName, children: content });
12767
+ return /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("div", { className: cardClassName, children: content });
12559
12768
  }
12560
12769
 
12561
12770
  // src/web/components/mobile-hero-animation.tsx
12562
12771
  var import_react40 = require("react");
12563
- var import_jsx_runtime130 = require("react/jsx-runtime");
12772
+ var import_jsx_runtime131 = require("react/jsx-runtime");
12564
12773
  var PROTOCOLS = [
12565
12774
  { name: "Bitcoin", network: "Bitcoin", iconSuffix: "bitcoin/bitcoin-logo.svg" },
12566
12775
  { name: "Lightning", network: "LN", iconSuffix: "lightning/lightning.svg" },
@@ -12619,15 +12828,15 @@ var MobileHeroAnimation = ({
12619
12828
  }, []);
12620
12829
  const anim = !reducedMotion && isVisible;
12621
12830
  const scale = size / 280;
12622
- return /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)(
12831
+ return /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)(
12623
12832
  "div",
12624
12833
  {
12625
12834
  ref: containerRef,
12626
12835
  className,
12627
12836
  style: { position: "relative", width: size, height: size },
12628
12837
  children: [
12629
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("style", { children: KEYFRAMES }),
12630
- /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("div", { style: {
12838
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("style", { children: KEYFRAMES }),
12839
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("div", { style: {
12631
12840
  position: "absolute",
12632
12841
  top: 0,
12633
12842
  left: 0,
@@ -12636,7 +12845,7 @@ var MobileHeroAnimation = ({
12636
12845
  transformOrigin: "top left",
12637
12846
  transform: scale !== 1 ? `scale(${scale})` : void 0
12638
12847
  }, children: [
12639
- /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)(
12848
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)(
12640
12849
  "svg",
12641
12850
  {
12642
12851
  viewBox: "0 0 280 280",
@@ -12645,34 +12854,34 @@ var MobileHeroAnimation = ({
12645
12854
  style: { position: "absolute", inset: 0 },
12646
12855
  xmlns: "http://www.w3.org/2000/svg",
12647
12856
  children: [
12648
- /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("defs", { children: [
12649
- /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("radialGradient", { id: "mh-center-glow", cx: "50%", cy: "50%", r: "50%", children: [
12650
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("stop", { offset: "0%", stopColor: "#0e9dff", stopOpacity: "0.3" }),
12651
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("stop", { offset: "40%", stopColor: "#8a5cf6", stopOpacity: "0.15" }),
12652
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("stop", { offset: "100%", stopColor: "transparent", stopOpacity: "0" })
12857
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("defs", { children: [
12858
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("radialGradient", { id: "mh-center-glow", cx: "50%", cy: "50%", r: "50%", children: [
12859
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "0%", stopColor: "#0e9dff", stopOpacity: "0.3" }),
12860
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "40%", stopColor: "#8a5cf6", stopOpacity: "0.15" }),
12861
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "100%", stopColor: "transparent", stopOpacity: "0" })
12653
12862
  ] }),
12654
- /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("linearGradient", { id: "mh-gp", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
12655
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("stop", { offset: "0%", stopColor: "#22c55e" }),
12656
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("stop", { offset: "100%", stopColor: "#8a5cf6" })
12863
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("linearGradient", { id: "mh-gp", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
12864
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "0%", stopColor: "#22c55e" }),
12865
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "100%", stopColor: "#8a5cf6" })
12657
12866
  ] }),
12658
- /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("linearGradient", { id: "mh-bp", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
12659
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("stop", { offset: "0%", stopColor: "#0e9dff" }),
12660
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("stop", { offset: "100%", stopColor: "#8a5cf6" })
12867
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("linearGradient", { id: "mh-bp", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
12868
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "0%", stopColor: "#0e9dff" }),
12869
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "100%", stopColor: "#8a5cf6" })
12661
12870
  ] }),
12662
- /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("filter", { id: "mh-glow", x: "-50%", y: "-50%", width: "200%", height: "200%", children: [
12663
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("feGaussianBlur", { stdDeviation: "2.5", result: "blur" }),
12664
- /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("feMerge", { children: [
12665
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("feMergeNode", { in: "blur" }),
12666
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("feMergeNode", { in: "SourceGraphic" })
12871
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("filter", { id: "mh-glow", x: "-50%", y: "-50%", width: "200%", height: "200%", children: [
12872
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("feGaussianBlur", { stdDeviation: "2.5", result: "blur" }),
12873
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("feMerge", { children: [
12874
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("feMergeNode", { in: "blur" }),
12875
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("feMergeNode", { in: "SourceGraphic" })
12667
12876
  ] })
12668
12877
  ] })
12669
12878
  ] }),
12670
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("circle", { cx: C, cy: C, r: ORBIT_R, fill: "none", stroke: "#0e9dff", strokeWidth: "1", strokeOpacity: "0.25", opacity: "0.4", children: anim && /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)(import_jsx_runtime130.Fragment, { children: [
12671
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("animate", { attributeName: "r", values: `${ORBIT_R};${Math.round(ORBIT_R * 1.12)};${ORBIT_R}`, dur: "2.5s", repeatCount: "indefinite" }),
12672
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("animate", { attributeName: "opacity", values: "0.4;0;0.4", dur: "2.5s", repeatCount: "indefinite" })
12879
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("circle", { cx: C, cy: C, r: ORBIT_R, fill: "none", stroke: "#0e9dff", strokeWidth: "1", strokeOpacity: "0.25", opacity: "0.4", children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)(import_jsx_runtime131.Fragment, { children: [
12880
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "r", values: `${ORBIT_R};${Math.round(ORBIT_R * 1.12)};${ORBIT_R}`, dur: "2.5s", repeatCount: "indefinite" }),
12881
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0.4;0;0.4", dur: "2.5s", repeatCount: "indefinite" })
12673
12882
  ] }) }),
12674
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("circle", { cx: C, cy: C, r: 80, fill: "none", stroke: "rgba(255,255,255,0.1)", strokeWidth: "1", strokeDasharray: "4 4" }),
12675
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
12883
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("circle", { cx: C, cy: C, r: 80, fill: "none", stroke: "rgba(255,255,255,0.1)", strokeWidth: "1", strokeDasharray: "4 4" }),
12884
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
12676
12885
  "g",
12677
12886
  {
12678
12887
  style: {
@@ -12690,8 +12899,8 @@ var MobileHeroAnimation = ({
12690
12899
  const y2 = C + dy * (ORBIT_R - BADGE_HALF);
12691
12900
  const color = PROTOCOL_COLORS[protocol.network] ?? "#ffffff";
12692
12901
  const dur = `${2 + i * 0.3}s`;
12693
- return /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("g", { children: [
12694
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
12902
+ return /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { children: [
12903
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
12695
12904
  "line",
12696
12905
  {
12697
12906
  x1,
@@ -12702,30 +12911,30 @@ var MobileHeroAnimation = ({
12702
12911
  strokeWidth: "0.8",
12703
12912
  strokeDasharray: "2 4",
12704
12913
  opacity: "0.25",
12705
- children: anim && /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("animate", { attributeName: "stroke-dashoffset", from: "0", to: "-12", dur: `${1.5 + i * 0.2}s`, repeatCount: "indefinite" })
12914
+ children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "stroke-dashoffset", from: "0", to: "-12", dur: `${1.5 + i * 0.2}s`, repeatCount: "indefinite" })
12706
12915
  }
12707
12916
  ),
12708
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("circle", { r: "2", fill: color, opacity: "0", children: anim && /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)(import_jsx_runtime130.Fragment, { children: [
12709
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("animate", { attributeName: "cx", values: `${x1};${x2}`, dur, repeatCount: "indefinite" }),
12710
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("animate", { attributeName: "cy", values: `${y1};${y2}`, dur, repeatCount: "indefinite" }),
12711
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("animate", { attributeName: "opacity", values: "0;0.85;0", dur, repeatCount: "indefinite" }),
12712
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("animate", { attributeName: "r", values: "1.5;2.5;1.5", dur, repeatCount: "indefinite" })
12917
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("circle", { r: "2", fill: color, opacity: "0", children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)(import_jsx_runtime131.Fragment, { children: [
12918
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "cx", values: `${x1};${x2}`, dur, repeatCount: "indefinite" }),
12919
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "cy", values: `${y1};${y2}`, dur, repeatCount: "indefinite" }),
12920
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0;0.85;0", dur, repeatCount: "indefinite" }),
12921
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "r", values: "1.5;2.5;1.5", dur, repeatCount: "indefinite" })
12713
12922
  ] }) })
12714
12923
  ] }, `line-${i}`);
12715
12924
  })
12716
12925
  }
12717
12926
  ),
12718
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("circle", { cx: C, cy: C, r: "42", fill: "url(#mh-center-glow)", children: anim && /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("animate", { attributeName: "r", values: "38;46;38", dur: "4s", repeatCount: "indefinite" }) }),
12719
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("circle", { cx: C, cy: C, r: "29", fill: "none", stroke: "url(#mh-bp)", strokeWidth: "1", opacity: "0", children: anim && /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)(import_jsx_runtime130.Fragment, { children: [
12720
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("animate", { attributeName: "r", values: "27;38", dur: "3s", repeatCount: "indefinite" }),
12721
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("animate", { attributeName: "opacity", values: "0.4;0", dur: "3s", repeatCount: "indefinite" })
12927
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("circle", { cx: C, cy: C, r: "42", fill: "url(#mh-center-glow)", children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "r", values: "38;46;38", dur: "4s", repeatCount: "indefinite" }) }),
12928
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("circle", { cx: C, cy: C, r: "29", fill: "none", stroke: "url(#mh-bp)", strokeWidth: "1", opacity: "0", children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)(import_jsx_runtime131.Fragment, { children: [
12929
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "r", values: "27;38", dur: "3s", repeatCount: "indefinite" }),
12930
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0.4;0", dur: "3s", repeatCount: "indefinite" })
12722
12931
  ] }) }),
12723
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("circle", { cx: C, cy: C, r: "27", fill: "none", stroke: "url(#mh-gp)", strokeWidth: "0.8", opacity: "0", children: anim && /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)(import_jsx_runtime130.Fragment, { children: [
12724
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("animate", { attributeName: "r", values: "27;36", dur: "3s", repeatCount: "indefinite", begin: "1.5s" }),
12725
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("animate", { attributeName: "opacity", values: "0.3;0", dur: "3s", repeatCount: "indefinite", begin: "1.5s" })
12932
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("circle", { cx: C, cy: C, r: "27", fill: "none", stroke: "url(#mh-gp)", strokeWidth: "0.8", opacity: "0", children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)(import_jsx_runtime131.Fragment, { children: [
12933
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "r", values: "27;36", dur: "3s", repeatCount: "indefinite", begin: "1.5s" }),
12934
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0.3;0", dur: "3s", repeatCount: "indefinite", begin: "1.5s" })
12726
12935
  ] }) }),
12727
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("g", { transform: `translate(${C},${C})`, children: /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("g", { children: [
12728
- anim && /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
12936
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("g", { transform: `translate(${C},${C})`, children: /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { children: [
12937
+ anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
12729
12938
  "animateTransform",
12730
12939
  {
12731
12940
  attributeName: "transform",
@@ -12737,13 +12946,13 @@ var MobileHeroAnimation = ({
12737
12946
  additive: "sum"
12738
12947
  }
12739
12948
  ),
12740
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("path", { d: hexPath(34), fill: "none", stroke: "url(#mh-gp)", strokeWidth: "1.5", opacity: "0.4", filter: "url(#mh-glow)", children: anim && /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)(import_jsx_runtime130.Fragment, { children: [
12741
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("animate", { attributeName: "opacity", values: "0.3;0.65;0.3", dur: "3s", repeatCount: "indefinite" }),
12742
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("animate", { attributeName: "stroke-width", values: "1.5;2.5;1.5", dur: "3s", repeatCount: "indefinite" })
12949
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: hexPath(34), fill: "none", stroke: "url(#mh-gp)", strokeWidth: "1.5", opacity: "0.4", filter: "url(#mh-glow)", children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)(import_jsx_runtime131.Fragment, { children: [
12950
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0.3;0.65;0.3", dur: "3s", repeatCount: "indefinite" }),
12951
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "stroke-width", values: "1.5;2.5;1.5", dur: "3s", repeatCount: "indefinite" })
12743
12952
  ] }) })
12744
12953
  ] }) }),
12745
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("g", { transform: `translate(${C},${C})`, children: /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("g", { children: [
12746
- anim && /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
12954
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("g", { transform: `translate(${C},${C})`, children: /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { children: [
12955
+ anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
12747
12956
  "animateTransform",
12748
12957
  {
12749
12958
  attributeName: "transform",
@@ -12755,19 +12964,19 @@ var MobileHeroAnimation = ({
12755
12964
  additive: "sum"
12756
12965
  }
12757
12966
  ),
12758
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("path", { d: hexPath(32), fill: "rgba(10,15,30,0.75)", stroke: "rgba(255,255,255,0.08)", strokeWidth: "0.5" })
12967
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: hexPath(32), fill: "rgba(10,15,30,0.75)", stroke: "rgba(255,255,255,0.08)", strokeWidth: "0.5" })
12759
12968
  ] }) }),
12760
- /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("g", { transform: `translate(${C - 18.8},${C - 18.8}) scale(0.0912)`, children: [
12761
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("path", { d: "M137.306 411.865H0.000244141L68.6795 343.29L137.306 411.865Z", fill: "#6F32FF" }),
12762
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("path", { d: "M0 0H137.306L68.6267 68.574L0 0Z", fill: "#6F32FF" }),
12763
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("path", { d: "M137.148 274.559H274.455L411.708 411.866H274.401L137.148 274.559Z", fill: "#17B581" }),
12764
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("path", { d: "M137.149 274.559L68.6274 205.933L137.201 137.306L274.455 137.411L205.776 206.038L274.456 274.559H137.149Z", fill: "#15E99A" }),
12765
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("path", { d: "M274.479 0.104797H411.786L274.533 137.411H137.226L274.479 0.104797Z", fill: "#17B581" })
12969
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { transform: `translate(${C - 18.8},${C - 18.8}) scale(0.0912)`, children: [
12970
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: "M137.306 411.865H0.000244141L68.6795 343.29L137.306 411.865Z", fill: "#6F32FF" }),
12971
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: "M0 0H137.306L68.6267 68.574L0 0Z", fill: "#6F32FF" }),
12972
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: "M137.148 274.559H274.455L411.708 411.866H274.401L137.148 274.559Z", fill: "#17B581" }),
12973
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: "M137.149 274.559L68.6274 205.933L137.201 137.306L274.455 137.411L205.776 206.038L274.456 274.559H137.149Z", fill: "#15E99A" }),
12974
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: "M274.479 0.104797H411.786L274.533 137.411H137.226L274.479 0.104797Z", fill: "#17B581" })
12766
12975
  ] })
12767
12976
  ]
12768
12977
  }
12769
12978
  ),
12770
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("div", { style: {
12979
+ /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("div", { style: {
12771
12980
  position: "absolute",
12772
12981
  inset: 0,
12773
12982
  width: 280,
@@ -12778,7 +12987,7 @@ var MobileHeroAnimation = ({
12778
12987
  const x = C + Math.cos(angle) * ORBIT_R - BADGE_HALF;
12779
12988
  const y = C + Math.sin(angle) * ORBIT_R - BADGE_HALF;
12780
12989
  const color = PROTOCOL_COLORS[protocol.network] ?? "#ffffff";
12781
- return /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
12990
+ return /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
12782
12991
  "div",
12783
12992
  {
12784
12993
  style: {
@@ -12789,7 +12998,7 @@ var MobileHeroAnimation = ({
12789
12998
  height: BADGE_SIZE,
12790
12999
  animation: anim ? "mha-counter-spin 20s linear infinite" : "none"
12791
13000
  },
12792
- children: /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("div", { style: {
13001
+ children: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("div", { style: {
12793
13002
  width: "100%",
12794
13003
  height: "100%",
12795
13004
  borderRadius: "50%",
@@ -12800,7 +13009,7 @@ var MobileHeroAnimation = ({
12800
13009
  display: "flex",
12801
13010
  alignItems: "center",
12802
13011
  justifyContent: "center"
12803
- }, children: /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
13012
+ }, children: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
12804
13013
  "img",
12805
13014
  {
12806
13015
  src: iconBasePath ? `${iconBasePath}/${protocol.iconSuffix}` : protocolIcons[protocol.network] ?? protocol.iconSuffix,
@@ -12821,7 +13030,7 @@ var MobileHeroAnimation = ({
12821
13030
 
12822
13031
  // src/web/components/kaleidoscope-hero-animation.tsx
12823
13032
  var import_react41 = require("react");
12824
- var import_jsx_runtime131 = require("react/jsx-runtime");
13033
+ var import_jsx_runtime132 = require("react/jsx-runtime");
12825
13034
  var PROTOCOLS2 = [
12826
13035
  { name: "Bitcoin L1", network: "L1", color: "#F7931A", glowColor: "rgba(247,147,26,0.5)" },
12827
13036
  { name: "Lightning", network: "LN", color: "#fbbf24", glowColor: "rgba(251,191,36,0.5)" },
@@ -12926,13 +13135,13 @@ var KaleidoScopeHeroAnimation = ({
12926
13135
  const angle = Math.PI * 2 * i / 7 - Math.PI / 2;
12927
13136
  return { x: c + orbitR * Math.cos(angle), y: c + orbitR * Math.sin(angle) };
12928
13137
  });
12929
- return /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
13138
+ return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
12930
13139
  "div",
12931
13140
  {
12932
13141
  ref: containerRef,
12933
13142
  className: `relative ${className}`,
12934
13143
  style: size ? { width: size, height: size } : void 0,
12935
- children: /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)(
13144
+ children: /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(
12936
13145
  "svg",
12937
13146
  {
12938
13147
  viewBox: "0 0 500 500",
@@ -12941,60 +13150,60 @@ var KaleidoScopeHeroAnimation = ({
12941
13150
  xmlns: "http://www.w3.org/2000/svg",
12942
13151
  className: "overflow-visible",
12943
13152
  children: [
12944
- /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("defs", { children: [
12945
- /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("linearGradient", { id: "kh-grad-a", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
12946
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "0%", children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "stop-color", values: "#22c55e;#8a5cf6;#06b6d4;#F7931A;#22c55e", dur: "10s", repeatCount: "indefinite" }) }),
12947
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "100%", children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "stop-color", values: "#8a5cf6;#F7931A;#22c55e;#06b6d4;#8a5cf6", dur: "10s", repeatCount: "indefinite" }) })
13153
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("defs", { children: [
13154
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("linearGradient", { id: "kh-grad-a", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
13155
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "0%", children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "stop-color", values: "#22c55e;#8a5cf6;#06b6d4;#F7931A;#22c55e", dur: "10s", repeatCount: "indefinite" }) }),
13156
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "100%", children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "stop-color", values: "#8a5cf6;#F7931A;#22c55e;#06b6d4;#8a5cf6", dur: "10s", repeatCount: "indefinite" }) })
12948
13157
  ] }),
12949
- /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("linearGradient", { id: "kh-grad-b", x1: "100%", y1: "0%", x2: "0%", y2: "100%", children: [
12950
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "0%", children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "stop-color", values: "#06b6d4;#22c55e;#F7931A;#8a5cf6;#06b6d4", dur: "8s", repeatCount: "indefinite" }) }),
12951
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "100%", children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "stop-color", values: "#F7931A;#06b6d4;#8a5cf6;#22c55e;#F7931A", dur: "8s", repeatCount: "indefinite" }) })
13158
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("linearGradient", { id: "kh-grad-b", x1: "100%", y1: "0%", x2: "0%", y2: "100%", children: [
13159
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "0%", children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "stop-color", values: "#06b6d4;#22c55e;#F7931A;#8a5cf6;#06b6d4", dur: "8s", repeatCount: "indefinite" }) }),
13160
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "100%", children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "stop-color", values: "#F7931A;#06b6d4;#8a5cf6;#22c55e;#F7931A", dur: "8s", repeatCount: "indefinite" }) })
12952
13161
  ] }),
12953
- /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("linearGradient", { id: "kh-grad-c", x1: "50%", y1: "0%", x2: "50%", y2: "100%", children: [
12954
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "0%", children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "stop-color", values: "#0e9dff;#8a5cf6;#15E99A;#0e9dff", dur: "6s", repeatCount: "indefinite" }) }),
12955
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "100%", children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "stop-color", values: "#8a5cf6;#15E99A;#0e9dff;#8a5cf6", dur: "6s", repeatCount: "indefinite" }) })
13162
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("linearGradient", { id: "kh-grad-c", x1: "50%", y1: "0%", x2: "50%", y2: "100%", children: [
13163
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "0%", children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "stop-color", values: "#0e9dff;#8a5cf6;#15E99A;#0e9dff", dur: "6s", repeatCount: "indefinite" }) }),
13164
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "100%", children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "stop-color", values: "#8a5cf6;#15E99A;#0e9dff;#8a5cf6", dur: "6s", repeatCount: "indefinite" }) })
12956
13165
  ] }),
12957
- /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("linearGradient", { id: "kh-gp", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
12958
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "0%", stopColor: "#22c55e" }),
12959
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "100%", stopColor: "#8a5cf6" })
13166
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("linearGradient", { id: "kh-gp", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
13167
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "0%", stopColor: "#22c55e" }),
13168
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "100%", stopColor: "#8a5cf6" })
12960
13169
  ] }),
12961
- /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("linearGradient", { id: "kh-oc", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
12962
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "0%", stopColor: "#F7931A" }),
12963
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "100%", stopColor: "#06b6d4" })
13170
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("linearGradient", { id: "kh-oc", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
13171
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "0%", stopColor: "#F7931A" }),
13172
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "100%", stopColor: "#06b6d4" })
12964
13173
  ] }),
12965
- /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("linearGradient", { id: "kh-bp", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
12966
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "0%", stopColor: "#0e9dff" }),
12967
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "100%", stopColor: "#8a5cf6" })
13174
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("linearGradient", { id: "kh-bp", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
13175
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "0%", stopColor: "#0e9dff" }),
13176
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "100%", stopColor: "#8a5cf6" })
12968
13177
  ] }),
12969
- /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("radialGradient", { id: "kh-center-glow", cx: "50%", cy: "50%", r: "50%", children: [
12970
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "0%", stopColor: "#0e9dff", stopOpacity: "0.3" }),
12971
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "40%", stopColor: "#8a5cf6", stopOpacity: "0.15" }),
12972
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "100%", stopColor: "transparent", stopOpacity: "0" })
13178
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("radialGradient", { id: "kh-center-glow", cx: "50%", cy: "50%", r: "50%", children: [
13179
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "0%", stopColor: "#0e9dff", stopOpacity: "0.3" }),
13180
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "40%", stopColor: "#8a5cf6", stopOpacity: "0.15" }),
13181
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "100%", stopColor: "transparent", stopOpacity: "0" })
12973
13182
  ] }),
12974
- /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("radialGradient", { id: "kh-haze", cx: "50%", cy: "50%", r: "50%", children: [
12975
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "0%", stopColor: "transparent", stopOpacity: "0" }),
12976
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "60%", stopColor: "#0e9dff", stopOpacity: "0.03" }),
12977
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "100%", stopColor: "#8a5cf6", stopOpacity: "0.06" })
13183
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("radialGradient", { id: "kh-haze", cx: "50%", cy: "50%", r: "50%", children: [
13184
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "0%", stopColor: "transparent", stopOpacity: "0" }),
13185
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "60%", stopColor: "#0e9dff", stopOpacity: "0.03" }),
13186
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "100%", stopColor: "#8a5cf6", stopOpacity: "0.06" })
12978
13187
  ] }),
12979
- /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("filter", { id: "kh-glow", x: "-50%", y: "-50%", width: "200%", height: "200%", children: [
12980
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("feGaussianBlur", { stdDeviation: "3", result: "blur" }),
12981
- /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("feMerge", { children: [
12982
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("feMergeNode", { in: "blur" }),
12983
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("feMergeNode", { in: "SourceGraphic" })
13188
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("filter", { id: "kh-glow", x: "-50%", y: "-50%", width: "200%", height: "200%", children: [
13189
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("feGaussianBlur", { stdDeviation: "3", result: "blur" }),
13190
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("feMerge", { children: [
13191
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("feMergeNode", { in: "blur" }),
13192
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("feMergeNode", { in: "SourceGraphic" })
12984
13193
  ] })
12985
13194
  ] }),
12986
- /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("filter", { id: "kh-glow-lg", x: "-50%", y: "-50%", width: "200%", height: "200%", children: [
12987
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("feGaussianBlur", { stdDeviation: "8", result: "blur" }),
12988
- /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("feMerge", { children: [
12989
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("feMergeNode", { in: "blur" }),
12990
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("feMergeNode", { in: "SourceGraphic" })
13195
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("filter", { id: "kh-glow-lg", x: "-50%", y: "-50%", width: "200%", height: "200%", children: [
13196
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("feGaussianBlur", { stdDeviation: "8", result: "blur" }),
13197
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("feMerge", { children: [
13198
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("feMergeNode", { in: "blur" }),
13199
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("feMergeNode", { in: "SourceGraphic" })
12991
13200
  ] })
12992
13201
  ] })
12993
13202
  ] }),
12994
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("circle", { cx: c, cy: c, r: "248", fill: "url(#kh-haze)" }),
12995
- /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { transform: px(20), children: [
12996
- /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { children: [
12997
- anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
13203
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("circle", { cx: c, cy: c, r: "248", fill: "url(#kh-haze)" }),
13204
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { transform: px(20), children: [
13205
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { children: [
13206
+ anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
12998
13207
  "animateTransform",
12999
13208
  {
13000
13209
  attributeName: "transform",
@@ -13007,14 +13216,14 @@ var KaleidoScopeHeroAnimation = ({
13007
13216
  ),
13008
13217
  Array.from({ length: 6 }, (_, i) => {
13009
13218
  const a = Math.PI / 3 * i;
13010
- return /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { transform: `translate(${c + outerR1 * Math.cos(a)},${c + outerR1 * Math.sin(a)})`, children: [
13011
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: hexPath2(40), fill: "url(#kh-grad-a)", opacity: 0.08 + i % 3 * 0.04 }),
13012
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: hexPath2(40), fill: "none", stroke: "url(#kh-grad-a)", strokeWidth: "0.5", opacity: 0.15, children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0.1;0.25;0.1", dur: `${4 + i * 0.3}s`, repeatCount: "indefinite" }) })
13219
+ return /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { transform: `translate(${c + outerR1 * Math.cos(a)},${c + outerR1 * Math.sin(a)})`, children: [
13220
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: hexPath2(40), fill: "url(#kh-grad-a)", opacity: 0.08 + i % 3 * 0.04 }),
13221
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: hexPath2(40), fill: "none", stroke: "url(#kh-grad-a)", strokeWidth: "0.5", opacity: 0.15, children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.1;0.25;0.1", dur: `${4 + i * 0.3}s`, repeatCount: "indefinite" }) })
13013
13222
  ] }, `ha-${i}`);
13014
13223
  }),
13015
13224
  Array.from({ length: 6 }, (_, i) => {
13016
13225
  const a = Math.PI / 3 * i + Math.PI / 6;
13017
- return /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
13226
+ return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
13018
13227
  "path",
13019
13228
  {
13020
13229
  d: triPath(14),
@@ -13027,7 +13236,7 @@ var KaleidoScopeHeroAnimation = ({
13027
13236
  }),
13028
13237
  Array.from({ length: 12 }, (_, i) => {
13029
13238
  const a = Math.PI / 6 * i;
13030
- return /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
13239
+ return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
13031
13240
  "circle",
13032
13241
  {
13033
13242
  cx: c + outerR1 * 0.92 * Math.cos(a),
@@ -13035,14 +13244,14 @@ var KaleidoScopeHeroAnimation = ({
13035
13244
  r: "1.5",
13036
13245
  fill: "url(#kh-grad-a)",
13037
13246
  opacity: "0.15",
13038
- children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0.08;0.25;0.08", dur: `${2 + i % 3 * 0.7}s`, repeatCount: "indefinite" })
13247
+ children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.08;0.25;0.08", dur: `${2 + i % 3 * 0.7}s`, repeatCount: "indefinite" })
13039
13248
  },
13040
13249
  `od-${i}`
13041
13250
  );
13042
13251
  })
13043
13252
  ] }),
13044
- /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { children: [
13045
- anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
13253
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { children: [
13254
+ anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
13046
13255
  "animateTransform",
13047
13256
  {
13048
13257
  attributeName: "transform",
@@ -13055,28 +13264,28 @@ var KaleidoScopeHeroAnimation = ({
13055
13264
  ),
13056
13265
  Array.from({ length: 6 }, (_, i) => {
13057
13266
  const a = Math.PI / 3 * i + Math.PI / 6;
13058
- return /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { transform: `translate(${c + outerR2 * Math.cos(a)},${c + outerR2 * Math.sin(a)})`, children: [
13059
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: hexPath2(30), fill: "url(#kh-grad-b)", opacity: 0.06 + i % 2 * 0.04 }),
13060
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: hexPath2(30), fill: "none", stroke: "url(#kh-grad-b)", strokeWidth: "0.5", opacity: 0.12 })
13267
+ return /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { transform: `translate(${c + outerR2 * Math.cos(a)},${c + outerR2 * Math.sin(a)})`, children: [
13268
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: hexPath2(30), fill: "url(#kh-grad-b)", opacity: 0.06 + i % 2 * 0.04 }),
13269
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: hexPath2(30), fill: "none", stroke: "url(#kh-grad-b)", strokeWidth: "0.5", opacity: 0.12 })
13061
13270
  ] }, `hb-${i}`);
13062
13271
  }),
13063
13272
  Array.from({ length: 6 }, (_, i) => {
13064
13273
  const a = Math.PI / 3 * i;
13065
- return /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
13274
+ return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
13066
13275
  "path",
13067
13276
  {
13068
13277
  d: diamondPath(8, 16),
13069
13278
  transform: `translate(${c + outerR2 * 0.85 * Math.cos(a)},${c + outerR2 * 0.85 * Math.sin(a)}) rotate(${i * 60})`,
13070
13279
  fill: "url(#kh-grad-b)",
13071
13280
  opacity: "0.08",
13072
- children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0.05;0.15;0.05", dur: `${3.5 + i * 0.4}s`, repeatCount: "indefinite" })
13281
+ children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.05;0.15;0.05", dur: `${3.5 + i * 0.4}s`, repeatCount: "indefinite" })
13073
13282
  },
13074
13283
  `db-${i}`
13075
13284
  );
13076
13285
  })
13077
13286
  ] }),
13078
- /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { children: [
13079
- anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
13287
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { children: [
13288
+ anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
13080
13289
  "animateTransform",
13081
13290
  {
13082
13291
  attributeName: "transform",
@@ -13090,23 +13299,23 @@ var KaleidoScopeHeroAnimation = ({
13090
13299
  Array.from({ length: 12 }, (_, i) => {
13091
13300
  const a = Math.PI / 6 * i;
13092
13301
  const r = outerR1 * (0.6 + i % 2 * 0.15);
13093
- return /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
13302
+ return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
13094
13303
  "path",
13095
13304
  {
13096
13305
  d: triPath(10),
13097
13306
  transform: `translate(${c + r * Math.cos(a)},${c + r * Math.sin(a)}) rotate(${i * 30 + 15})`,
13098
13307
  fill: "url(#kh-grad-c)",
13099
13308
  opacity: "0.05",
13100
- children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0.03;0.1;0.03", dur: `${5 + i % 4 * 0.8}s`, repeatCount: "indefinite" })
13309
+ children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.03;0.1;0.03", dur: `${5 + i % 4 * 0.8}s`, repeatCount: "indefinite" })
13101
13310
  },
13102
13311
  `tc-${i}`
13103
13312
  );
13104
13313
  })
13105
13314
  ] })
13106
13315
  ] }),
13107
- /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { transform: px(14), children: [
13108
- /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { children: [
13109
- anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
13316
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { transform: px(14), children: [
13317
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { children: [
13318
+ anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
13110
13319
  "animateTransform",
13111
13320
  {
13112
13321
  attributeName: "transform",
@@ -13119,9 +13328,9 @@ var KaleidoScopeHeroAnimation = ({
13119
13328
  ),
13120
13329
  Array.from({ length: 12 }, (_, i) => {
13121
13330
  const a = Math.PI / 6 * i;
13122
- return /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { transform: `translate(${c + midR * Math.cos(a)},${c + midR * Math.sin(a)})`, children: [
13123
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: hexPath2(12), fill: "url(#kh-grad-c)", opacity: 0.08 + i % 3 * 0.03 }),
13124
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: hexPath2(12), fill: "none", stroke: "url(#kh-grad-c)", strokeWidth: "0.4", opacity: "0.12", children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0.08;0.2;0.08", dur: `${3 + i % 4 * 0.5}s`, repeatCount: "indefinite" }) })
13331
+ return /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { transform: `translate(${c + midR * Math.cos(a)},${c + midR * Math.sin(a)})`, children: [
13332
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: hexPath2(12), fill: "url(#kh-grad-c)", opacity: 0.08 + i % 3 * 0.03 }),
13333
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: hexPath2(12), fill: "none", stroke: "url(#kh-grad-c)", strokeWidth: "0.4", opacity: "0.12", children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.08;0.2;0.08", dur: `${3 + i % 4 * 0.5}s`, repeatCount: "indefinite" }) })
13125
13334
  ] }, `mh-${i}`);
13126
13335
  })
13127
13336
  ] }),
@@ -13132,7 +13341,7 @@ var KaleidoScopeHeroAnimation = ({
13132
13341
  const y1 = c + midR * Math.sin(a1);
13133
13342
  const x2 = c + midR * Math.cos(a2);
13134
13343
  const y2 = c + midR * Math.sin(a2);
13135
- return /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
13344
+ return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
13136
13345
  "path",
13137
13346
  {
13138
13347
  d: `M${x1},${y1} Q${c},${c} ${x2},${y2}`,
@@ -13141,17 +13350,17 @@ var KaleidoScopeHeroAnimation = ({
13141
13350
  strokeWidth: "0.5",
13142
13351
  strokeDasharray: "3 5",
13143
13352
  opacity: "0.1",
13144
- children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "stroke-dashoffset", from: "0", to: "-16", dur: `${3 + i * 0.2}s`, repeatCount: "indefinite" })
13353
+ children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "stroke-dashoffset", from: "0", to: "-16", dur: `${3 + i * 0.2}s`, repeatCount: "indefinite" })
13145
13354
  },
13146
13355
  `arc-${i}`
13147
13356
  );
13148
13357
  })
13149
13358
  ] }),
13150
- /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { transform: px(10), children: [
13151
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("circle", { cx: c, cy: c, r: orbitR, fill: "none", stroke: "rgba(255,255,255,0.05)", strokeWidth: "1", strokeDasharray: "3 5", children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animateTransform", { attributeName: "transform", type: "rotate", from: `0 ${c} ${c}`, to: `360 ${c} ${c}`, dur: "90s", repeatCount: "indefinite" }) }),
13152
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("circle", { cx: c, cy: c, r: orbitR + 4, fill: "none", stroke: "rgba(255,255,255,0.03)", strokeWidth: "0.5" }),
13153
- /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { children: [
13154
- anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
13359
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { transform: px(10), children: [
13360
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("circle", { cx: c, cy: c, r: orbitR, fill: "none", stroke: "rgba(255,255,255,0.05)", strokeWidth: "1", strokeDasharray: "3 5", children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animateTransform", { attributeName: "transform", type: "rotate", from: `0 ${c} ${c}`, to: `360 ${c} ${c}`, dur: "90s", repeatCount: "indefinite" }) }),
13361
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("circle", { cx: c, cy: c, r: orbitR + 4, fill: "none", stroke: "rgba(255,255,255,0.03)", strokeWidth: "0.5" }),
13362
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { children: [
13363
+ anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
13155
13364
  "animateTransform",
13156
13365
  {
13157
13366
  attributeName: "transform",
@@ -13166,8 +13375,8 @@ var KaleidoScopeHeroAnimation = ({
13166
13375
  const angle = Math.atan2(pos.y - c, pos.x - c);
13167
13376
  const dx = Math.cos(angle);
13168
13377
  const dy = Math.sin(angle);
13169
- return /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { children: [
13170
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
13378
+ return /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { children: [
13379
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
13171
13380
  "line",
13172
13381
  {
13173
13382
  x1: c + dx * 52,
@@ -13178,14 +13387,14 @@ var KaleidoScopeHeroAnimation = ({
13178
13387
  strokeWidth: "0.8",
13179
13388
  strokeDasharray: "2 4",
13180
13389
  opacity: "0.2",
13181
- children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "stroke-dashoffset", from: "0", to: "-12", dur: `${1.5 + i * 0.2}s`, repeatCount: "indefinite" })
13390
+ children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "stroke-dashoffset", from: "0", to: "-12", dur: `${1.5 + i * 0.2}s`, repeatCount: "indefinite" })
13182
13391
  }
13183
13392
  ),
13184
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("circle", { r: "2.5", fill: PROTOCOLS2[i].color, opacity: "0", children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)(import_jsx_runtime131.Fragment, { children: [
13185
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "cx", values: `${c + dx * 52};${pos.x}`, dur: `${2 + i * 0.3}s`, repeatCount: "indefinite" }),
13186
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "cy", values: `${c + dy * 52};${pos.y}`, dur: `${2 + i * 0.3}s`, repeatCount: "indefinite" }),
13187
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0;0.8;0", dur: `${2 + i * 0.3}s`, repeatCount: "indefinite" }),
13188
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "r", values: "1.5;3;1.5", dur: `${2 + i * 0.3}s`, repeatCount: "indefinite" })
13393
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("circle", { r: "2.5", fill: PROTOCOLS2[i].color, opacity: "0", children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(import_jsx_runtime132.Fragment, { children: [
13394
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "cx", values: `${c + dx * 52};${pos.x}`, dur: `${2 + i * 0.3}s`, repeatCount: "indefinite" }),
13395
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "cy", values: `${c + dy * 52};${pos.y}`, dur: `${2 + i * 0.3}s`, repeatCount: "indefinite" }),
13396
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0;0.8;0", dur: `${2 + i * 0.3}s`, repeatCount: "indefinite" }),
13397
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "r", values: "1.5;3;1.5", dur: `${2 + i * 0.3}s`, repeatCount: "indefinite" })
13189
13398
  ] }) })
13190
13399
  ] }, `conn-${i}`);
13191
13400
  }),
@@ -13193,14 +13402,14 @@ var KaleidoScopeHeroAnimation = ({
13193
13402
  const pos = iconPositions[i];
13194
13403
  const labelWidth = Math.max(proto.name.length * 5.5 + 10, 32);
13195
13404
  const isHovered = hoveredProtocol === proto.name;
13196
- return /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("g", { transform: `translate(${pos.x},${pos.y})`, children: /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)(
13405
+ return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("g", { transform: `translate(${pos.x},${pos.y})`, children: /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(
13197
13406
  "g",
13198
13407
  {
13199
13408
  onMouseEnter: () => setHoveredProtocol(proto.name),
13200
13409
  onMouseLeave: () => setHoveredProtocol(null),
13201
13410
  style: { cursor: "pointer" },
13202
13411
  children: [
13203
- anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
13412
+ anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
13204
13413
  "animateTransform",
13205
13414
  {
13206
13415
  attributeName: "transform",
@@ -13211,7 +13420,7 @@ var KaleidoScopeHeroAnimation = ({
13211
13420
  repeatCount: "indefinite"
13212
13421
  }
13213
13422
  ),
13214
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
13423
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
13215
13424
  "circle",
13216
13425
  {
13217
13426
  cx: "0",
@@ -13221,13 +13430,13 @@ var KaleidoScopeHeroAnimation = ({
13221
13430
  stroke: proto.color,
13222
13431
  strokeWidth: "1",
13223
13432
  opacity: "0",
13224
- children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)(import_jsx_runtime131.Fragment, { children: [
13225
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "r", values: `${iconR};${iconR + 12}`, dur: `${3 + i * 0.5}s`, repeatCount: "indefinite", begin: `${i * 0.4}s` }),
13226
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0.5;0", dur: `${3 + i * 0.5}s`, repeatCount: "indefinite", begin: `${i * 0.4}s` })
13433
+ children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(import_jsx_runtime132.Fragment, { children: [
13434
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "r", values: `${iconR};${iconR + 12}`, dur: `${3 + i * 0.5}s`, repeatCount: "indefinite", begin: `${i * 0.4}s` }),
13435
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.5;0", dur: `${3 + i * 0.5}s`, repeatCount: "indefinite", begin: `${i * 0.4}s` })
13227
13436
  ] })
13228
13437
  }
13229
13438
  ),
13230
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
13439
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
13231
13440
  "circle",
13232
13441
  {
13233
13442
  cx: "0",
@@ -13237,10 +13446,10 @@ var KaleidoScopeHeroAnimation = ({
13237
13446
  stroke: proto.color,
13238
13447
  strokeWidth: "1",
13239
13448
  opacity: "0.15",
13240
- children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0.15;0.4;0.15", dur: `${3 + i * 0.4}s`, repeatCount: "indefinite" })
13449
+ children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.15;0.4;0.15", dur: `${3 + i * 0.4}s`, repeatCount: "indefinite" })
13241
13450
  }
13242
13451
  ),
13243
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
13452
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
13244
13453
  "circle",
13245
13454
  {
13246
13455
  cx: "0",
@@ -13250,10 +13459,10 @@ var KaleidoScopeHeroAnimation = ({
13250
13459
  stroke: proto.color,
13251
13460
  strokeWidth: "1.5",
13252
13461
  opacity: "0.25",
13253
- children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0.2;0.5;0.2", dur: `${2.5 + i * 0.3}s`, repeatCount: "indefinite" })
13462
+ children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.2;0.5;0.2", dur: `${2.5 + i * 0.3}s`, repeatCount: "indefinite" })
13254
13463
  }
13255
13464
  ),
13256
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
13465
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
13257
13466
  "circle",
13258
13467
  {
13259
13468
  cx: "0",
@@ -13264,8 +13473,8 @@ var KaleidoScopeHeroAnimation = ({
13264
13473
  strokeWidth: "1"
13265
13474
  }
13266
13475
  ),
13267
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("circle", { cx: "0", cy: "0", r: iconR - 2, fill: proto.color, opacity: "0.06" }),
13268
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("foreignObject", { x: -iconR, y: -iconR, width: iconR * 2, height: iconR * 2, children: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
13476
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("circle", { cx: "0", cy: "0", r: iconR - 2, fill: proto.color, opacity: "0.06" }),
13477
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("foreignObject", { x: -iconR, y: -iconR, width: iconR * 2, height: iconR * 2, children: /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
13269
13478
  NetworkBadge,
13270
13479
  {
13271
13480
  network: proto.network,
@@ -13273,8 +13482,8 @@ var KaleidoScopeHeroAnimation = ({
13273
13482
  className: "w-full h-full"
13274
13483
  }
13275
13484
  ) }),
13276
- /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { opacity: isHovered ? 1 : 0, style: { transition: "opacity 0.2s ease" }, children: [
13277
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
13485
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { opacity: isHovered ? 1 : 0, style: { transition: "opacity 0.2s ease" }, children: [
13486
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
13278
13487
  "rect",
13279
13488
  {
13280
13489
  x: -labelWidth / 2,
@@ -13288,7 +13497,7 @@ var KaleidoScopeHeroAnimation = ({
13288
13497
  strokeOpacity: 0.4
13289
13498
  }
13290
13499
  ),
13291
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
13500
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
13292
13501
  "text",
13293
13502
  {
13294
13503
  x: "0",
@@ -13308,9 +13517,9 @@ var KaleidoScopeHeroAnimation = ({
13308
13517
  })
13309
13518
  ] })
13310
13519
  ] }),
13311
- /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { transform: px(5), children: [
13312
- /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { children: [
13313
- anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
13520
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { transform: px(5), children: [
13521
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { children: [
13522
+ anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
13314
13523
  "animateTransform",
13315
13524
  {
13316
13525
  attributeName: "transform",
@@ -13323,28 +13532,28 @@ var KaleidoScopeHeroAnimation = ({
13323
13532
  ),
13324
13533
  Array.from({ length: 6 }, (_, i) => {
13325
13534
  const a = Math.PI / 3 * i;
13326
- return /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
13535
+ return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
13327
13536
  "path",
13328
13537
  {
13329
13538
  d: diamondPath(10, 22),
13330
13539
  transform: `translate(${c + innerR * Math.cos(a)},${c + innerR * Math.sin(a)}) rotate(${i * 60})`,
13331
13540
  fill: "url(#kh-gp)",
13332
13541
  opacity: "0.15",
13333
- children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0.1;0.28;0.1", dur: `${2.8 + i * 0.35}s`, repeatCount: "indefinite" })
13542
+ children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.1;0.28;0.1", dur: `${2.8 + i * 0.35}s`, repeatCount: "indefinite" })
13334
13543
  },
13335
13544
  `d-${i}`
13336
13545
  );
13337
13546
  }),
13338
13547
  Array.from({ length: 6 }, (_, i) => {
13339
13548
  const a = Math.PI / 3 * i + Math.PI / 6;
13340
- return /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
13549
+ return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
13341
13550
  "path",
13342
13551
  {
13343
13552
  d: triPath(8),
13344
13553
  transform: `translate(${c + innerR * 0.75 * Math.cos(a)},${c + innerR * 0.75 * Math.sin(a)}) rotate(${i * 60 + 30})`,
13345
13554
  fill: "url(#kh-oc)",
13346
13555
  opacity: "0.1",
13347
- children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0.06;0.18;0.06", dur: `${3.2 + i * 0.3}s`, repeatCount: "indefinite" })
13556
+ children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.06;0.18;0.06", dur: `${3.2 + i * 0.3}s`, repeatCount: "indefinite" })
13348
13557
  },
13349
13558
  `it-${i}`
13350
13559
  );
@@ -13352,7 +13561,7 @@ var KaleidoScopeHeroAnimation = ({
13352
13561
  Array.from({ length: 12 }, (_, i) => {
13353
13562
  const a = Math.PI / 6 * i;
13354
13563
  const r = innerR * (i % 2 === 0 ? 0.55 : 0.65);
13355
- return /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
13564
+ return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
13356
13565
  "circle",
13357
13566
  {
13358
13567
  cx: c + r * Math.cos(a),
@@ -13360,14 +13569,14 @@ var KaleidoScopeHeroAnimation = ({
13360
13569
  r: i % 2 === 0 ? 2 : 1.5,
13361
13570
  fill: "url(#kh-oc)",
13362
13571
  opacity: "0.2",
13363
- children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0.1;0.35;0.1", dur: `${2 + i % 4 * 0.5}s`, repeatCount: "indefinite" })
13572
+ children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.1;0.35;0.1", dur: `${2 + i % 4 * 0.5}s`, repeatCount: "indefinite" })
13364
13573
  },
13365
13574
  `id-${i}`
13366
13575
  );
13367
13576
  })
13368
13577
  ] }),
13369
- /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { children: [
13370
- anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
13578
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { children: [
13579
+ anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
13371
13580
  "animateTransform",
13372
13581
  {
13373
13582
  attributeName: "transform",
@@ -13380,27 +13589,27 @@ var KaleidoScopeHeroAnimation = ({
13380
13589
  ),
13381
13590
  Array.from({ length: 6 }, (_, i) => {
13382
13591
  const a = Math.PI / 3 * i + Math.PI / 6;
13383
- return /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
13592
+ return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
13384
13593
  "path",
13385
13594
  {
13386
13595
  d: hexPath2(6),
13387
13596
  transform: `translate(${c + innerR * 0.42 * Math.cos(a)},${c + innerR * 0.42 * Math.sin(a)})`,
13388
13597
  fill: "url(#kh-bp)",
13389
13598
  opacity: "0.1",
13390
- children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0.06;0.18;0.06", dur: `${2.5 + i * 0.3}s`, repeatCount: "indefinite" })
13599
+ children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.06;0.18;0.06", dur: `${2.5 + i * 0.3}s`, repeatCount: "indefinite" })
13391
13600
  },
13392
13601
  `ih-${i}`
13393
13602
  );
13394
13603
  })
13395
13604
  ] })
13396
13605
  ] }),
13397
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("g", { transform: px(18), children: Array.from({ length: 16 }, (_, i) => {
13606
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("g", { transform: px(18), children: Array.from({ length: 16 }, (_, i) => {
13398
13607
  const a = Math.PI * 2 * i / 16;
13399
13608
  const baseR = 60 + i % 4 * 45;
13400
13609
  const x = c + baseR * Math.cos(a);
13401
13610
  const y = c + baseR * Math.sin(a);
13402
13611
  const colors2 = ["#0e9dff", "#8a5cf6", "#22c55e", "#F7931A", "#06b6d4", "#15E99A"];
13403
- return /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
13612
+ return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
13404
13613
  "circle",
13405
13614
  {
13406
13615
  cx: x,
@@ -13408,26 +13617,26 @@ var KaleidoScopeHeroAnimation = ({
13408
13617
  r: 1 + i % 3 * 0.5,
13409
13618
  fill: colors2[i % colors2.length],
13410
13619
  opacity: "0",
13411
- children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)(import_jsx_runtime131.Fragment, { children: [
13412
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0;0.6;0", dur: `${3 + i % 5 * 0.8}s`, repeatCount: "indefinite", begin: `${i % 7 * 0.5}s` }),
13413
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "cx", values: `${x};${x + Math.cos(a) * 15}`, dur: `${4 + i % 3 * 1.5}s`, repeatCount: "indefinite", begin: `${i % 7 * 0.5}s` }),
13414
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "cy", values: `${y};${y + Math.sin(a) * 15}`, dur: `${4 + i % 3 * 1.5}s`, repeatCount: "indefinite", begin: `${i % 7 * 0.5}s` })
13620
+ children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(import_jsx_runtime132.Fragment, { children: [
13621
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0;0.6;0", dur: `${3 + i % 5 * 0.8}s`, repeatCount: "indefinite", begin: `${i % 7 * 0.5}s` }),
13622
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "cx", values: `${x};${x + Math.cos(a) * 15}`, dur: `${4 + i % 3 * 1.5}s`, repeatCount: "indefinite", begin: `${i % 7 * 0.5}s` }),
13623
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "cy", values: `${y};${y + Math.sin(a) * 15}`, dur: `${4 + i % 3 * 1.5}s`, repeatCount: "indefinite", begin: `${i % 7 * 0.5}s` })
13415
13624
  ] })
13416
13625
  },
13417
13626
  `p-${i}`
13418
13627
  );
13419
13628
  }) }),
13420
- /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { children: [
13421
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("circle", { cx: c, cy: c, r: "75", fill: "url(#kh-center-glow)", children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "r", values: "70;80;70", dur: "4s", repeatCount: "indefinite" }) }),
13422
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("circle", { cx: c, cy: c, r: "52", fill: "none", stroke: "url(#kh-bp)", strokeWidth: "1", opacity: "0", children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)(import_jsx_runtime131.Fragment, { children: [
13423
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "r", values: "48;65", dur: "3s", repeatCount: "indefinite" }),
13424
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0.4;0", dur: "3s", repeatCount: "indefinite" })
13629
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { children: [
13630
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("circle", { cx: c, cy: c, r: "75", fill: "url(#kh-center-glow)", children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "r", values: "70;80;70", dur: "4s", repeatCount: "indefinite" }) }),
13631
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("circle", { cx: c, cy: c, r: "52", fill: "none", stroke: "url(#kh-bp)", strokeWidth: "1", opacity: "0", children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(import_jsx_runtime132.Fragment, { children: [
13632
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "r", values: "48;65", dur: "3s", repeatCount: "indefinite" }),
13633
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.4;0", dur: "3s", repeatCount: "indefinite" })
13425
13634
  ] }) }),
13426
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("circle", { cx: c, cy: c, r: "48", fill: "none", stroke: "url(#kh-gp)", strokeWidth: "0.8", opacity: "0", children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)(import_jsx_runtime131.Fragment, { children: [
13427
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "r", values: "48;60", dur: "3s", repeatCount: "indefinite", begin: "1.5s" }),
13428
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0.3;0", dur: "3s", repeatCount: "indefinite", begin: "1.5s" })
13635
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("circle", { cx: c, cy: c, r: "48", fill: "none", stroke: "url(#kh-gp)", strokeWidth: "0.8", opacity: "0", children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(import_jsx_runtime132.Fragment, { children: [
13636
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "r", values: "48;60", dur: "3s", repeatCount: "indefinite", begin: "1.5s" }),
13637
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.3;0", dur: "3s", repeatCount: "indefinite", begin: "1.5s" })
13429
13638
  ] }) }),
13430
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
13639
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
13431
13640
  "path",
13432
13641
  {
13433
13642
  d: hexPath2(50),
@@ -13437,13 +13646,13 @@ var KaleidoScopeHeroAnimation = ({
13437
13646
  strokeWidth: "1.5",
13438
13647
  opacity: "0.4",
13439
13648
  filter: "url(#kh-glow)",
13440
- children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)(import_jsx_runtime131.Fragment, { children: [
13441
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0.3;0.65;0.3", dur: "3s", repeatCount: "indefinite" }),
13442
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "stroke-width", values: "1.5;2.5;1.5", dur: "3s", repeatCount: "indefinite" })
13649
+ children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(import_jsx_runtime132.Fragment, { children: [
13650
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.3;0.65;0.3", dur: "3s", repeatCount: "indefinite" }),
13651
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "stroke-width", values: "1.5;2.5;1.5", dur: "3s", repeatCount: "indefinite" })
13443
13652
  ] })
13444
13653
  }
13445
13654
  ),
13446
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
13655
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
13447
13656
  "path",
13448
13657
  {
13449
13658
  d: hexPath2(46),
@@ -13453,21 +13662,21 @@ var KaleidoScopeHeroAnimation = ({
13453
13662
  strokeWidth: "0.5"
13454
13663
  }
13455
13664
  ),
13456
- /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { transform: `translate(${c - 34},${c - 34}) scale(0.325)`, children: [
13457
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: "M69.7141 207.3H0.908203L35.3243 172.936L69.7141 207.3Z", fill: "#6F32FF" }),
13458
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: "M138.441 0.96106V69.767L104.078 35.3508L138.441 0.96106Z", fill: "#17B581" }),
13459
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: "M138.415 138.547V207.352L104.051 172.936L138.415 138.547Z", fill: "#17B581" }),
13460
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: "M138.441 69.7406V0.96106L172.804 35.3772L138.441 69.767V69.7406Z", fill: "#17B581" }),
13461
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: "M69.6614 138.494V69.6879L104.025 104.104L69.6614 138.494Z", fill: "#15E99A" }),
13462
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: "M69.6615 69.7142V138.52L35.2981 104.104L69.6615 69.7142Z", fill: "#15E99A" }),
13463
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: "M138.467 207.379V138.573L172.831 172.989L138.467 207.379Z", fill: "#17B581" }),
13464
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: "M0.908203 0.908325H69.7141L35.298 35.2718L0.908203 0.908325Z", fill: "#6F32FF" }),
13465
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: "M207.22 207.3H138.415L172.831 172.936L207.22 207.3Z", fill: "#17B581" }),
13466
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: "M138.415 0.987427H207.22L172.804 35.3509L138.415 0.987427Z", fill: "#17B581" }),
13467
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: "M138.467 69.7143H69.6614L104.078 35.3508L138.467 69.7143Z", fill: "#17B581" }),
13468
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: "M69.635 138.494H138.441L104.025 172.857L69.635 138.494Z", fill: "#17B581" }),
13469
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: "M138.415 138.494H69.635L104.025 104.157L138.388 138.494H138.415Z", fill: "#15E99A" }),
13470
- /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: "M138.415 69.7142L104.051 104.051L69.6614 69.7142H138.441H138.415Z", fill: "#15E99A" })
13665
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { transform: `translate(${c - 34},${c - 34}) scale(0.325)`, children: [
13666
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M69.7141 207.3H0.908203L35.3243 172.936L69.7141 207.3Z", fill: "#6F32FF" }),
13667
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M138.441 0.96106V69.767L104.078 35.3508L138.441 0.96106Z", fill: "#17B581" }),
13668
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M138.415 138.547V207.352L104.051 172.936L138.415 138.547Z", fill: "#17B581" }),
13669
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M138.441 69.7406V0.96106L172.804 35.3772L138.441 69.767V69.7406Z", fill: "#17B581" }),
13670
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M69.6614 138.494V69.6879L104.025 104.104L69.6614 138.494Z", fill: "#15E99A" }),
13671
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M69.6615 69.7142V138.52L35.2981 104.104L69.6615 69.7142Z", fill: "#15E99A" }),
13672
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M138.467 207.379V138.573L172.831 172.989L138.467 207.379Z", fill: "#17B581" }),
13673
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M0.908203 0.908325H69.7141L35.298 35.2718L0.908203 0.908325Z", fill: "#6F32FF" }),
13674
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M207.22 207.3H138.415L172.831 172.936L207.22 207.3Z", fill: "#17B581" }),
13675
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M138.415 0.987427H207.22L172.804 35.3509L138.415 0.987427Z", fill: "#17B581" }),
13676
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M138.467 69.7143H69.6614L104.078 35.3508L138.467 69.7143Z", fill: "#17B581" }),
13677
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M69.635 138.494H138.441L104.025 172.857L69.635 138.494Z", fill: "#17B581" }),
13678
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M138.415 138.494H69.635L104.025 104.157L138.388 138.494H138.415Z", fill: "#15E99A" }),
13679
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M138.415 69.7142L104.051 104.051L69.6614 69.7142H138.441H138.415Z", fill: "#15E99A" })
13471
13680
  ] })
13472
13681
  ] })
13473
13682
  ]
@@ -13478,7 +13687,7 @@ var KaleidoScopeHeroAnimation = ({
13478
13687
  };
13479
13688
 
13480
13689
  // src/web/components/deposit-success-screen.tsx
13481
- var import_jsx_runtime132 = require("react/jsx-runtime");
13690
+ var import_jsx_runtime133 = require("react/jsx-runtime");
13482
13691
  function DepositSuccessScreen({
13483
13692
  handleDone,
13484
13693
  displayTicker,
@@ -13491,20 +13700,20 @@ function DepositSuccessScreen({
13491
13700
  const isInstant = network === "lightning" || network === "spark";
13492
13701
  const title = isInstant ? "Payment Received!" : "Deposit Detected!";
13493
13702
  const subtitle = isInstant ? `Your ${displayTicker} has arrived via ${networkLabel}.` : `Incoming deposit detected via ${networkLabel}. Funds will be available after confirmation.`;
13494
- return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("div", { className: "flex h-screen flex-col overflow-hidden bg-background bg-page-radial font-display text-foreground", children: /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("div", { className: "flex flex-1 flex-col items-center justify-center p-6 text-center", children: [
13495
- /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("div", { className: "relative mb-8", children: [
13496
- /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("div", { className: "absolute inset-0 scale-150 animate-pulse rounded-full bg-secondary/25 blur-2xl" }),
13497
- /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("div", { className: "relative flex size-20 items-center justify-center rounded-full bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card-hero shadow-glow-brand", children: /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(IconGlyph, { glyph: CheckCircle, className: "size-12 text-brand animate-in zoom-in-50 duration-500" }) })
13703
+ return /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("div", { className: "flex h-screen flex-col overflow-hidden bg-background bg-page-radial font-display text-foreground", children: /* @__PURE__ */ (0, import_jsx_runtime133.jsxs)("div", { className: "flex flex-1 flex-col items-center justify-center p-6 text-center", children: [
13704
+ /* @__PURE__ */ (0, import_jsx_runtime133.jsxs)("div", { className: "relative mb-8", children: [
13705
+ /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("div", { className: "absolute inset-0 scale-150 animate-pulse rounded-full bg-secondary/25 blur-2xl" }),
13706
+ /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("div", { className: "relative flex size-20 items-center justify-center rounded-full bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card-hero shadow-glow-brand", children: /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(IconGlyph, { glyph: CheckCircle, className: "size-12 text-brand animate-in zoom-in-50 duration-500" }) })
13498
13707
  ] }),
13499
- /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("h1", { className: "mb-2 text-headline font-bold text-gradient-brand", children: title }),
13500
- /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("p", { className: "mb-8 max-w-[260px] text-caption leading-relaxed text-muted-foreground", children: subtitle }),
13501
- /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("div", { className: "mb-10 flex items-center gap-3 rounded-2xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card-hero px-4 py-3 shadow-card", children: [
13502
- /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(AssetIcon, { ticker: displayTicker, size: 36 }),
13503
- /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("div", { className: "text-left", children: [
13504
- /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("p", { className: "text-body font-bold text-foreground", children: displayTicker }),
13505
- /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("p", { className: "text-caption text-foreground/55", children: selectedAsset?.name ?? displayTicker })
13708
+ /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("h1", { className: "mb-2 text-headline font-bold text-gradient-brand", children: title }),
13709
+ /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("p", { className: "mb-8 max-w-[260px] text-caption leading-relaxed text-muted-foreground", children: subtitle }),
13710
+ /* @__PURE__ */ (0, import_jsx_runtime133.jsxs)("div", { className: "mb-10 flex items-center gap-3 rounded-2xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card-hero px-4 py-3 shadow-card", children: [
13711
+ /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(AssetIcon, { ticker: displayTicker, size: 36 }),
13712
+ /* @__PURE__ */ (0, import_jsx_runtime133.jsxs)("div", { className: "text-left", children: [
13713
+ /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("p", { className: "text-body font-bold text-foreground", children: displayTicker }),
13714
+ /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("p", { className: "text-caption text-foreground/55", children: selectedAsset?.name ?? displayTicker })
13506
13715
  ] }),
13507
- /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(
13716
+ /* @__PURE__ */ (0, import_jsx_runtime133.jsxs)(
13508
13717
  "div",
13509
13718
  {
13510
13719
  className: cn(
@@ -13514,27 +13723,27 @@ function DepositSuccessScreen({
13514
13723
  ),
13515
13724
  children: [
13516
13725
  net.icon,
13517
- /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("span", { children: networkLabel })
13726
+ /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("span", { children: networkLabel })
13518
13727
  ]
13519
13728
  }
13520
13729
  )
13521
13730
  ] }),
13522
- /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(Button, { variant: "cta", size: "cta", onClick: handleDone, children: [
13523
- /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(IconGlyph, { glyph: AccountBalanceWallet, className: "text-icon-lg" }),
13731
+ /* @__PURE__ */ (0, import_jsx_runtime133.jsxs)(Button, { variant: "cta", size: "cta", onClick: handleDone, children: [
13732
+ /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(IconGlyph, { glyph: AccountBalanceWallet, className: "text-icon-lg" }),
13524
13733
  "Back to Wallet"
13525
13734
  ] })
13526
13735
  ] }) });
13527
13736
  }
13528
13737
 
13529
13738
  // src/web/components/deposit-network-default-modal.tsx
13530
- var import_jsx_runtime133 = require("react/jsx-runtime");
13739
+ var import_jsx_runtime134 = require("react/jsx-runtime");
13531
13740
  var NETWORK_OPTIONS = {
13532
13741
  RGB: {
13533
13742
  network: "onchain",
13534
13743
  account: "RGB",
13535
13744
  label: "On-chain / Lightning",
13536
13745
  description: "Classic Bitcoin address or Lightning invoice via the RLN node.",
13537
- icon: /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(OnchainNetworkIcon, { className: "size-5" }),
13746
+ icon: /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(OnchainNetworkIcon, { className: "size-5" }),
13538
13747
  accentBg: "bg-network-bitcoin/10",
13539
13748
  accentBorder: "border-network-bitcoin/30",
13540
13749
  accentText: "text-network-bitcoin-fg"
@@ -13544,7 +13753,7 @@ var NETWORK_OPTIONS = {
13544
13753
  account: "SPARK",
13545
13754
  label: "Spark",
13546
13755
  description: "Receive directly into your Spark account. Fast and free.",
13547
- icon: /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("img", { src: "/icons/spark/Asterisk/Spark Asterisk White.svg", alt: "", className: "kui-mono-icon h-[18px]" }),
13756
+ icon: /* @__PURE__ */ (0, import_jsx_runtime134.jsx)("img", { src: "/icons/spark/Asterisk/Spark Asterisk White.svg", alt: "", className: "kui-mono-icon h-[18px]" }),
13548
13757
  accentBg: "bg-info/10",
13549
13758
  accentBorder: "border-info/30",
13550
13759
  accentText: "text-info-fg"
@@ -13554,7 +13763,7 @@ var NETWORK_OPTIONS = {
13554
13763
  account: "ARKADE",
13555
13764
  label: "Arkade",
13556
13765
  description: "Receive directly into your Arkade account. Low fees, near-instant settlement.",
13557
- icon: /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("img", { src: "/icons/arkade/arkade-icon.svg", alt: "", className: "h-[18px]" }),
13766
+ icon: /* @__PURE__ */ (0, import_jsx_runtime134.jsx)("img", { src: "/icons/arkade/arkade-icon.svg", alt: "", className: "h-[18px]" }),
13558
13767
  accentBg: "bg-network-arkade/10",
13559
13768
  accentBorder: "border-network-arkade/30",
13560
13769
  accentText: "text-network-arkade-fg"
@@ -13566,7 +13775,7 @@ var NETWORK_OPTIONS = {
13566
13775
  account: "LIQUID",
13567
13776
  label: "Liquid",
13568
13777
  description: "Receive L-BTC or a Liquid asset (USDt) via a confidential Liquid address.",
13569
- icon: /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(LiquidNetworkIcon, { className: "h-[18px] w-[18px]" }),
13778
+ icon: /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(LiquidNetworkIcon, { className: "h-[18px] w-[18px]" }),
13570
13779
  accentBg: "bg-network-liquid/10",
13571
13780
  accentBorder: "border-network-liquid/30",
13572
13781
  accentText: "text-network-liquid-fg"
@@ -13581,20 +13790,20 @@ function DepositNetworkDefaultModal({
13581
13790
  }) {
13582
13791
  if (!open) return null;
13583
13792
  const options = availableAccounts.map((id) => NETWORK_OPTIONS[id]).filter(Boolean);
13584
- return /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("div", { className: "fixed inset-0 z-50 flex items-end justify-center bg-background/80 backdrop-blur-lg", children: /* @__PURE__ */ (0, import_jsx_runtime133.jsxs)("div", { className: "w-full space-y-4 rounded-t-2xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card-hero px-4 pb-7 pt-5 shadow-popover animate-in slide-in-from-bottom-4 duration-200", children: [
13585
- /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("div", { className: "-mt-1 mb-1 flex justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("div", { className: "h-1 w-10 rounded-full bg-secondary/40" }) }),
13586
- /* @__PURE__ */ (0, import_jsx_runtime133.jsxs)("div", { children: [
13587
- /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("p", { className: "text-body font-bold text-foreground", children: "Choose your default network" }),
13588
- /* @__PURE__ */ (0, import_jsx_runtime133.jsxs)("p", { className: "mt-0.5 text-tiny text-foreground/55", children: [
13793
+ return /* @__PURE__ */ (0, import_jsx_runtime134.jsx)("div", { className: "fixed inset-0 z-50 flex items-end justify-center bg-background/80 backdrop-blur-lg", children: /* @__PURE__ */ (0, import_jsx_runtime134.jsxs)("div", { className: "w-full space-y-4 rounded-t-2xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card-hero px-4 pb-7 pt-5 shadow-popover animate-in slide-in-from-bottom-4 duration-200", children: [
13794
+ /* @__PURE__ */ (0, import_jsx_runtime134.jsx)("div", { className: "-mt-1 mb-1 flex justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime134.jsx)("div", { className: "h-1 w-10 rounded-full bg-secondary/40" }) }),
13795
+ /* @__PURE__ */ (0, import_jsx_runtime134.jsxs)("div", { children: [
13796
+ /* @__PURE__ */ (0, import_jsx_runtime134.jsx)("p", { className: "text-body font-bold text-foreground", children: "Choose your default network" }),
13797
+ /* @__PURE__ */ (0, import_jsx_runtime134.jsxs)("p", { className: "mt-0.5 text-tiny text-foreground/55", children: [
13589
13798
  "Pick how you would like to receive",
13590
13799
  " ",
13591
- /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("span", { className: "font-semibold text-muted-foreground", children: assetTicker }),
13800
+ /* @__PURE__ */ (0, import_jsx_runtime134.jsx)("span", { className: "font-semibold text-muted-foreground", children: assetTicker }),
13592
13801
  " by default. You can always switch in the deposit screen."
13593
13802
  ] })
13594
13803
  ] }),
13595
- /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("div", { className: "space-y-2", children: options.map((option) => {
13804
+ /* @__PURE__ */ (0, import_jsx_runtime134.jsx)("div", { className: "space-y-2", children: options.map((option) => {
13596
13805
  const isSuggested = option.account === suggestedAccount;
13597
- return /* @__PURE__ */ (0, import_jsx_runtime133.jsxs)(
13806
+ return /* @__PURE__ */ (0, import_jsx_runtime134.jsxs)(
13598
13807
  "button",
13599
13808
  {
13600
13809
  type: "button",
@@ -13604,7 +13813,7 @@ function DepositNetworkDefaultModal({
13604
13813
  isSuggested ? cn(option.accentBg, "shadow-glow-violet-soft ring-1 ring-inset ring-secondary/50") : "bg-muted/40 shadow-raised hover-gradient-violet"
13605
13814
  ),
13606
13815
  children: [
13607
- /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(
13816
+ /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(
13608
13817
  "div",
13609
13818
  {
13610
13819
  className: cn(
@@ -13615,10 +13824,10 @@ function DepositNetworkDefaultModal({
13615
13824
  children: option.icon
13616
13825
  }
13617
13826
  ),
13618
- /* @__PURE__ */ (0, import_jsx_runtime133.jsxs)("div", { className: "min-w-0 flex-1", children: [
13619
- /* @__PURE__ */ (0, import_jsx_runtime133.jsxs)("div", { className: "flex items-center gap-2", children: [
13620
- /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("span", { className: cn("text-caption font-bold", isSuggested ? option.accentText : "text-foreground"), children: option.label }),
13621
- isSuggested && /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(
13827
+ /* @__PURE__ */ (0, import_jsx_runtime134.jsxs)("div", { className: "min-w-0 flex-1", children: [
13828
+ /* @__PURE__ */ (0, import_jsx_runtime134.jsxs)("div", { className: "flex items-center gap-2", children: [
13829
+ /* @__PURE__ */ (0, import_jsx_runtime134.jsx)("span", { className: cn("text-caption font-bold", isSuggested ? option.accentText : "text-foreground"), children: option.label }),
13830
+ isSuggested && /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(
13622
13831
  "span",
13623
13832
  {
13624
13833
  className: cn(
@@ -13631,9 +13840,9 @@ function DepositNetworkDefaultModal({
13631
13840
  }
13632
13841
  )
13633
13842
  ] }),
13634
- /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("p", { className: "mt-0.5 text-xxs leading-snug text-foreground/55", children: option.description })
13843
+ /* @__PURE__ */ (0, import_jsx_runtime134.jsx)("p", { className: "mt-0.5 text-xxs leading-snug text-foreground/55", children: option.description })
13635
13844
  ] }),
13636
- /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(
13845
+ /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(
13637
13846
  IconGlyph,
13638
13847
  {
13639
13848
  glyph: ChevronRight,
@@ -13653,7 +13862,7 @@ function DepositNetworkDefaultModal({
13653
13862
 
13654
13863
  // src/web/components/btc-unified-receive.tsx
13655
13864
  var import_react42 = require("react");
13656
- var import_jsx_runtime134 = require("react/jsx-runtime");
13865
+ var import_jsx_runtime135 = require("react/jsx-runtime");
13657
13866
  function formatSatsForRow(value) {
13658
13867
  if (!value || value <= 0 || !Number.isFinite(value)) return null;
13659
13868
  return `${value.toLocaleString("en-US")} sats`;
@@ -13687,14 +13896,14 @@ function BtcUnifiedReceive({
13687
13896
  setInvoiceStatus(null);
13688
13897
  setAccountReceiveResult(null);
13689
13898
  };
13690
- return /* @__PURE__ */ (0, import_jsx_runtime134.jsxs)("div", { className: "space-y-3 animate-in fade-in zoom-in-95 duration-300", children: [
13691
- /* @__PURE__ */ (0, import_jsx_runtime134.jsxs)("div", { className: "flex flex-col items-center gap-3", children: [
13692
- /* @__PURE__ */ (0, import_jsx_runtime134.jsxs)("div", { className: "relative flex flex-col items-center p-2", children: [
13693
- /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(QrCode, { value: accountReceiveResult.qrValue, size: 200, tone: "onDark" }),
13694
- isInvoicePaid && /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(PaidOverlay, {})
13899
+ return /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "space-y-3 animate-in fade-in zoom-in-95 duration-300", children: [
13900
+ /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "flex flex-col items-center gap-3", children: [
13901
+ /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "relative flex flex-col items-center p-2", children: [
13902
+ /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(QrCode, { value: accountReceiveResult.qrValue, size: 200, tone: "onDark" }),
13903
+ isInvoicePaid && /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(PaidOverlay, {})
13695
13904
  ] }),
13696
- /* @__PURE__ */ (0, import_jsx_runtime134.jsxs)("div", { className: "flex items-center justify-center gap-2.5", children: [
13697
- /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(
13905
+ /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "flex items-center justify-center gap-2.5", children: [
13906
+ /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(
13698
13907
  GlyphButton,
13699
13908
  {
13700
13909
  label: `Copy ${accountReceiveResult.qrLabel}`,
@@ -13704,8 +13913,8 @@ function BtcUnifiedReceive({
13704
13913
  onClick: () => void copyToClipboard(accountReceiveResult.qrValue)
13705
13914
  }
13706
13915
  ),
13707
- showRegenerate && /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(GlyphButton, { label: "New address", variant: "surface", size: "lg", icon: Refresh, onClick: handleNewAddress }),
13708
- /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(
13916
+ showRegenerate && /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(GlyphButton, { label: "New address", variant: "surface", size: "lg", icon: Refresh, onClick: handleNewAddress }),
13917
+ /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(
13709
13918
  GlyphButton,
13710
13919
  {
13711
13920
  label: "Edit amount and description",
@@ -13717,7 +13926,7 @@ function BtcUnifiedReceive({
13717
13926
  )
13718
13927
  ] })
13719
13928
  ] }),
13720
- invoiceStatus && /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(
13929
+ invoiceStatus && /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(
13721
13930
  InvoiceStatusBanner,
13722
13931
  {
13723
13932
  isInvoicePending,
@@ -13726,11 +13935,11 @@ function BtcUnifiedReceive({
13726
13935
  invoiceStatus
13727
13936
  }
13728
13937
  ),
13729
- /* @__PURE__ */ (0, import_jsx_runtime134.jsxs)("div", { className: "space-y-1.5", children: [
13730
- /* @__PURE__ */ (0, import_jsx_runtime134.jsx)("p", { className: cn("text-muted-foreground", eyebrow), children: "Available Addresses" }),
13938
+ /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "space-y-1.5", children: [
13939
+ /* @__PURE__ */ (0, import_jsx_runtime135.jsx)("p", { className: cn("text-muted-foreground", eyebrow), children: "Available Addresses" }),
13731
13940
  accountReceiveResult.addresses.map((address) => {
13732
13941
  const network = NETWORK_CONFIG[address.network];
13733
- return /* @__PURE__ */ (0, import_jsx_runtime134.jsxs)(
13942
+ return /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)(
13734
13943
  "div",
13735
13944
  {
13736
13945
  className: cn(
@@ -13740,35 +13949,35 @@ function BtcUnifiedReceive({
13740
13949
  style: { borderLeftWidth: 3, borderLeftColor: network.color },
13741
13950
  onClick: () => void copyToClipboard(address.value),
13742
13951
  children: [
13743
- /* @__PURE__ */ (0, import_jsx_runtime134.jsx)("div", { className: cn("flex size-5 flex-shrink-0 items-center justify-center rounded-md", network.bg), children: network.icon }),
13744
- /* @__PURE__ */ (0, import_jsx_runtime134.jsxs)("div", { className: "min-w-0 flex-1", children: [
13745
- /* @__PURE__ */ (0, import_jsx_runtime134.jsxs)("div", { className: "flex items-center gap-1.5", children: [
13746
- /* @__PURE__ */ (0, import_jsx_runtime134.jsx)("p", { className: cn(eyebrow, network.text), children: address.label }),
13952
+ /* @__PURE__ */ (0, import_jsx_runtime135.jsx)("div", { className: cn("flex size-5 flex-shrink-0 items-center justify-center rounded-md", network.bg), children: network.icon }),
13953
+ /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "min-w-0 flex-1", children: [
13954
+ /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "flex items-center gap-1.5", children: [
13955
+ /* @__PURE__ */ (0, import_jsx_runtime135.jsx)("p", { className: cn(eyebrow, network.text), children: address.label }),
13747
13956
  (() => {
13748
13957
  const amountLabel = formatSatsForRow(address.amountSats);
13749
- return amountLabel ? /* @__PURE__ */ (0, import_jsx_runtime134.jsx)("span", { className: "rounded-full bg-secondary/15 px-1.5 py-0.5 text-tiny font-bold tabular-nums text-secondary-content", children: amountLabel }) : null;
13958
+ return amountLabel ? /* @__PURE__ */ (0, import_jsx_runtime135.jsx)("span", { className: "rounded-full bg-secondary/15 px-1.5 py-0.5 text-tiny font-bold tabular-nums text-secondary-content", children: amountLabel }) : null;
13750
13959
  })()
13751
13960
  ] }),
13752
- /* @__PURE__ */ (0, import_jsx_runtime134.jsx)("p", { className: "mt-0.5 truncate font-mono text-tiny text-muted-foreground", children: address.value.length > 50 ? `${address.value.slice(0, 18)}...${address.value.slice(-14)}` : address.value })
13961
+ /* @__PURE__ */ (0, import_jsx_runtime135.jsx)("p", { className: "mt-0.5 truncate font-mono text-tiny text-muted-foreground", children: address.value.length > 50 ? `${address.value.slice(0, 18)}...${address.value.slice(-14)}` : address.value })
13753
13962
  ] }),
13754
- /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(CopyIcon, { copied: copied === address.value })
13963
+ /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(CopyIcon, { copied: copied === address.value })
13755
13964
  ]
13756
13965
  },
13757
13966
  address.network
13758
13967
  );
13759
13968
  })
13760
13969
  ] }),
13761
- /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(
13970
+ /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(
13762
13971
  BottomSheet,
13763
13972
  {
13764
13973
  open: showEdit,
13765
13974
  title: "Edit request",
13766
- icon: /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(IconGlyph, { glyph: Edit, size: "md" }),
13975
+ icon: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(IconGlyph, { glyph: Edit, size: "md" }),
13767
13976
  onClose: () => setShowEdit(false),
13768
- children: /* @__PURE__ */ (0, import_jsx_runtime134.jsxs)("div", { className: "space-y-4", children: [
13769
- /* @__PURE__ */ (0, import_jsx_runtime134.jsxs)("div", { className: "flex flex-col gap-2", children: [
13770
- /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(Label3, { htmlFor: amountId, children: "Amount (optional)" }),
13771
- /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(
13977
+ children: /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "space-y-4", children: [
13978
+ /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "flex flex-col gap-2", children: [
13979
+ /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(Label3, { htmlFor: amountId, children: "Amount (optional)" }),
13980
+ /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(
13772
13981
  "input",
13773
13982
  {
13774
13983
  id: amountId,
@@ -13780,14 +13989,14 @@ function BtcUnifiedReceive({
13780
13989
  inputMode: "decimal"
13781
13990
  }
13782
13991
  ),
13783
- amount && loading && /* @__PURE__ */ (0, import_jsx_runtime134.jsxs)("p", { className: "flex items-center gap-1 text-xxs text-warning-fg/70", children: [
13784
- /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(IconGlyph, { glyph: ProgressActivity, className: "animate-spin text-icon-xxs" }),
13992
+ amount && loading && /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("p", { className: "flex items-center gap-1 text-xxs text-warning-fg/70", children: [
13993
+ /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(IconGlyph, { glyph: ProgressActivity, className: "animate-spin text-icon-xxs" }),
13785
13994
  "Updating invoice..."
13786
13995
  ] })
13787
13996
  ] }),
13788
- onDescriptionChange && /* @__PURE__ */ (0, import_jsx_runtime134.jsxs)("div", { className: "flex flex-col gap-2", children: [
13789
- /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(Label3, { htmlFor: descriptionId, children: "Description (optional)" }),
13790
- /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(
13997
+ onDescriptionChange && /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "flex flex-col gap-2", children: [
13998
+ /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(Label3, { htmlFor: descriptionId, children: "Description (optional)" }),
13999
+ /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(
13791
14000
  "input",
13792
14001
  {
13793
14002
  id: descriptionId,
@@ -13799,7 +14008,7 @@ function BtcUnifiedReceive({
13799
14008
  }
13800
14009
  )
13801
14010
  ] }),
13802
- /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(Button, { variant: "cta", className: "w-full", onClick: () => setShowEdit(false), children: "Done" })
14011
+ /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(Button, { variant: "cta", className: "w-full", onClick: () => setShowEdit(false), children: "Done" })
13803
14012
  ] })
13804
14013
  }
13805
14014
  )
@@ -13808,7 +14017,7 @@ function BtcUnifiedReceive({
13808
14017
 
13809
14018
  // src/web/components/deposit-generated-view.tsx
13810
14019
  var import_react43 = require("react");
13811
- var import_jsx_runtime135 = require("react/jsx-runtime");
14020
+ var import_jsx_runtime136 = require("react/jsx-runtime");
13812
14021
  function parseAssetAmount(amountString, asset) {
13813
14022
  const value = Number(amountString);
13814
14023
  if (!Number.isFinite(value)) return 0;
@@ -13851,10 +14060,10 @@ function DepositGeneratedView({
13851
14060
  }) {
13852
14061
  const btcAmountId = (0, import_react43.useId)();
13853
14062
  const assetAmountId = (0, import_react43.useId)();
13854
- return /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "space-y-3 animate-in fade-in zoom-in-95 duration-300", children: [
13855
- (network === "lightning" || network === "arkade" && arkSubMode === "ark") && isBtc && /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "flex flex-col gap-2 rounded-xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card p-2.5 shadow-card", children: [
13856
- /* @__PURE__ */ (0, import_jsx_runtime135.jsx)("div", { className: "flex items-center justify-between px-1", children: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(Label3, { htmlFor: btcAmountId, children: "Specify amount (optional)" }) }),
13857
- /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(
14063
+ return /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "space-y-3 animate-in fade-in zoom-in-95 duration-300", children: [
14064
+ (network === "lightning" || network === "arkade" && arkSubMode === "ark") && isBtc && /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "flex flex-col gap-2 rounded-xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card p-2.5 shadow-card", children: [
14065
+ /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("div", { className: "flex items-center justify-between px-1", children: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(Label3, { htmlFor: btcAmountId, children: "Specify amount (optional)" }) }),
14066
+ /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(
13858
14067
  "input",
13859
14068
  {
13860
14069
  id: btcAmountId,
@@ -13866,16 +14075,16 @@ function DepositGeneratedView({
13866
14075
  inputMode: "decimal"
13867
14076
  }
13868
14077
  ),
13869
- amount && /* @__PURE__ */ (0, import_jsx_runtime135.jsx)("p", { className: "text-xxs text-warning-fg/70", children: loading ? /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("span", { className: "flex items-center gap-1", children: [
13870
- /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(IconGlyph, { glyph: ProgressActivity, className: "animate-spin text-icon-xxs" }),
14078
+ amount && /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("p", { className: "text-xxs text-warning-fg/70", children: loading ? /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("span", { className: "flex items-center gap-1", children: [
14079
+ /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(IconGlyph, { glyph: ProgressActivity, className: "animate-spin text-icon-xxs" }),
13871
14080
  "Updating ",
13872
14081
  network === "arkade" ? "URI" : "invoice",
13873
14082
  "..."
13874
14083
  ] }) : network === "arkade" ? `Unified URI for ${amount} ${getUnitLabel()}` : `Invoice for ${amount} ${getUnitLabel()}` })
13875
14084
  ] }),
13876
- network === "lightning" && !isBtc && /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "flex flex-col gap-2 rounded-xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card p-2.5 shadow-card", children: [
13877
- /* @__PURE__ */ (0, import_jsx_runtime135.jsx)("div", { className: "flex items-center justify-between px-1", children: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(Label3, { htmlFor: assetAmountId, children: "Specify amount (optional)" }) }),
13878
- /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(
14085
+ network === "lightning" && !isBtc && /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "flex flex-col gap-2 rounded-xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card p-2.5 shadow-card", children: [
14086
+ /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("div", { className: "flex items-center justify-between px-1", children: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(Label3, { htmlFor: assetAmountId, children: "Specify amount (optional)" }) }),
14087
+ /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(
13879
14088
  "input",
13880
14089
  {
13881
14090
  id: assetAmountId,
@@ -13887,25 +14096,25 @@ function DepositGeneratedView({
13887
14096
  inputMode: "decimal"
13888
14097
  }
13889
14098
  ),
13890
- amount && /* @__PURE__ */ (0, import_jsx_runtime135.jsx)("p", { className: "text-xxs text-warning-fg/70", children: loading ? /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("span", { className: "flex items-center gap-1", children: [
13891
- /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(IconGlyph, { glyph: ProgressActivity, className: "animate-spin text-icon-xxs" }),
14099
+ amount && /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("p", { className: "text-xxs text-warning-fg/70", children: loading ? /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("span", { className: "flex items-center gap-1", children: [
14100
+ /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(IconGlyph, { glyph: ProgressActivity, className: "animate-spin text-icon-xxs" }),
13892
14101
  "Updating invoice..."
13893
14102
  ] }) : `Invoice for ${amount} ${getUnitLabel()}` }),
13894
- amount && maxDepositAmount > 0 && parseAssetAmount(amount, selectedAsset) > maxDepositAmount && /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("p", { className: "rounded-lg bg-danger/10 px-2.5 py-1.5 text-xxs text-danger-fg", children: [
14103
+ amount && maxDepositAmount > 0 && parseAssetAmount(amount, selectedAsset) > maxDepositAmount && /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("p", { className: "rounded-lg bg-danger/10 px-2.5 py-1.5 text-xxs text-danger-fg", children: [
13895
14104
  "Exceeds max: ",
13896
14105
  formatAssetAmount(maxDepositAmount, selectedAsset),
13897
14106
  " ",
13898
14107
  getUnitLabel()
13899
14108
  ] })
13900
14109
  ] }),
13901
- /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "flex flex-col items-center gap-3", children: [
13902
- /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)(
14110
+ /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "flex flex-col items-center gap-3", children: [
14111
+ /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)(
13903
14112
  "div",
13904
14113
  {
13905
14114
  className: "relative flex flex-col items-center rounded-2xl bg-white p-3.5 transition-all",
13906
14115
  style: net.qrGlow,
13907
14116
  children: [
13908
- showQrNetworkBadge && network !== "spark" && network !== "arkade" && /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)(
14117
+ showQrNetworkBadge && network !== "spark" && network !== "arkade" && /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)(
13909
14118
  "div",
13910
14119
  {
13911
14120
  className: cn(
@@ -13914,21 +14123,21 @@ function DepositGeneratedView({
13914
14123
  ),
13915
14124
  children: [
13916
14125
  net.icon,
13917
- /* @__PURE__ */ (0, import_jsx_runtime135.jsx)("span", { children: net.label })
14126
+ /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("span", { children: net.label })
13918
14127
  ]
13919
14128
  }
13920
14129
  ),
13921
- /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(QrCode, { value: address, size: 188 }),
13922
- isInvoicePaid && /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(PaidOverlay, {}),
14130
+ /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(QrCode, { value: address, size: 188 }),
14131
+ isInvoicePaid && /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(PaidOverlay, {}),
13923
14132
  loading && !isInvoicePaid && // Loading scrim — sits over the QR while a fresh address/invoice
13924
14133
  // is being fetched (e.g. after the New Address button).
13925
- /* @__PURE__ */ (0, import_jsx_runtime135.jsx)("div", { className: "absolute inset-0 flex items-center justify-center rounded-2xl bg-foreground/80 backdrop-blur-sm", children: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(IconGlyph, { glyph: ProgressActivity, className: "animate-spin text-icon-3xl text-network-bitcoin-fg" }) })
14134
+ /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("div", { className: "absolute inset-0 flex items-center justify-center rounded-2xl bg-foreground/80 backdrop-blur-sm", children: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(IconGlyph, { glyph: ProgressActivity, className: "animate-spin text-icon-3xl text-network-bitcoin-fg" }) })
13926
14135
  ]
13927
14136
  }
13928
14137
  ),
13929
14138
  (() => {
13930
14139
  const isAddressCopied = copied === address;
13931
- return /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)(
14140
+ return /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)(
13932
14141
  "button",
13933
14142
  {
13934
14143
  type: "button",
@@ -13942,14 +14151,14 @@ function DepositGeneratedView({
13942
14151
  void copyToClipboard(address);
13943
14152
  },
13944
14153
  children: [
13945
- /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(IconGlyph, { glyph: isAddressCopied ? Check : ContentCopy, size: "xs" }),
14154
+ /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(IconGlyph, { glyph: isAddressCopied ? Check : ContentCopy, size: "xs" }),
13946
14155
  isAddressCopied ? "Copied" : network === "lightning" ? "Copy Invoice" : "Copy Address"
13947
14156
  ]
13948
14157
  }
13949
14158
  );
13950
14159
  })()
13951
14160
  ] }),
13952
- network === "lightning" && invoiceStatus && /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(
14161
+ network === "lightning" && invoiceStatus && /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(
13953
14162
  InvoiceStatusBanner,
13954
14163
  {
13955
14164
  isInvoicePending,
@@ -13958,7 +14167,7 @@ function DepositGeneratedView({
13958
14167
  invoiceStatus
13959
14168
  }
13960
14169
  ),
13961
- /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)(
14170
+ /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)(
13962
14171
  "div",
13963
14172
  {
13964
14173
  "data-testid": "deposit-generated-address",
@@ -13969,16 +14178,16 @@ function DepositGeneratedView({
13969
14178
  ),
13970
14179
  onClick: () => void copyToClipboard(address),
13971
14180
  children: [
13972
- /* @__PURE__ */ (0, import_jsx_runtime135.jsx)("div", { className: cn("flex size-5 flex-shrink-0 items-center justify-center rounded-md", net.bg), children: net.icon }),
13973
- /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "min-w-0 flex-1", children: [
13974
- /* @__PURE__ */ (0, import_jsx_runtime135.jsx)("p", { className: cn(eyebrow, net.text), children: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)("span", { "data-testid": "deposit-address-label", children: addressLabel }) }),
13975
- /* @__PURE__ */ (0, import_jsx_runtime135.jsx)("p", { className: "mt-0.5 truncate font-mono text-tiny text-muted-foreground", children: address.length > 50 ? `${address.slice(0, 18)}...${address.slice(-14)}` : address })
14181
+ /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("div", { className: cn("flex size-5 flex-shrink-0 items-center justify-center rounded-md", net.bg), children: net.icon }),
14182
+ /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "min-w-0 flex-1", children: [
14183
+ /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("p", { className: cn(eyebrow, net.text), children: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("span", { "data-testid": "deposit-address-label", children: addressLabel }) }),
14184
+ /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("p", { className: "mt-0.5 truncate font-mono text-tiny text-muted-foreground", children: address.length > 50 ? `${address.slice(0, 18)}...${address.slice(-14)}` : address })
13976
14185
  ] }),
13977
- /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(CopyIcon, { copied: copied === address })
14186
+ /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(CopyIcon, { copied: copied === address })
13978
14187
  ]
13979
14188
  }
13980
14189
  ),
13981
- recipientId && /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)(
14190
+ recipientId && /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)(
13982
14191
  "div",
13983
14192
  {
13984
14193
  className: cn(
@@ -13987,16 +14196,16 @@ function DepositGeneratedView({
13987
14196
  ),
13988
14197
  onClick: () => void copyToClipboard(recipientId),
13989
14198
  children: [
13990
- /* @__PURE__ */ (0, import_jsx_runtime135.jsx)("div", { className: "flex size-5 flex-shrink-0 items-center justify-center rounded-md bg-primary/15", children: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(IconGlyph, { glyph: Person, size: "xs", className: "text-brand" }) }),
13991
- /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "min-w-0 flex-1", children: [
13992
- /* @__PURE__ */ (0, import_jsx_runtime135.jsx)("p", { className: cn("text-brand", eyebrow), children: "Recipient ID" }),
13993
- /* @__PURE__ */ (0, import_jsx_runtime135.jsx)("p", { className: "mt-0.5 truncate font-mono text-tiny text-muted-foreground", children: recipientId.length > 50 ? `${recipientId.slice(0, 18)}...${recipientId.slice(-14)}` : recipientId })
14199
+ /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("div", { className: "flex size-5 flex-shrink-0 items-center justify-center rounded-md bg-primary/15", children: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(IconGlyph, { glyph: Person, size: "xs", className: "text-brand" }) }),
14200
+ /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "min-w-0 flex-1", children: [
14201
+ /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("p", { className: cn("text-brand", eyebrow), children: "Recipient ID" }),
14202
+ /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("p", { className: "mt-0.5 truncate font-mono text-tiny text-muted-foreground", children: recipientId.length > 50 ? `${recipientId.slice(0, 18)}...${recipientId.slice(-14)}` : recipientId })
13994
14203
  ] }),
13995
- /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(CopyIcon, { copied: copied === recipientId })
14204
+ /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(CopyIcon, { copied: copied === recipientId })
13996
14205
  ]
13997
14206
  }
13998
14207
  ),
13999
- showRegenerate && /* @__PURE__ */ (0, import_jsx_runtime135.jsx)("div", { className: "flex justify-center pt-1", children: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(
14208
+ showRegenerate && /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("div", { className: "flex justify-center pt-1", children: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(
14000
14209
  GlyphButton,
14001
14210
  {
14002
14211
  label: `New ${network === "lightning" ? "invoice" : "address"}`,
@@ -14012,7 +14221,7 @@ function DepositGeneratedView({
14012
14221
  setAmount("");
14013
14222
  setInvoiceStatus(null);
14014
14223
  },
14015
- icon: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(IconGlyph, { glyph: Refresh, "aria-hidden": "true", className: cn(loading && "animate-spin motion-reduce:animate-none") })
14224
+ icon: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(IconGlyph, { glyph: Refresh, "aria-hidden": "true", className: cn(loading && "animate-spin motion-reduce:animate-none") })
14016
14225
  }
14017
14226
  ) })
14018
14227
  ] });
@@ -14020,7 +14229,7 @@ function DepositGeneratedView({
14020
14229
 
14021
14230
  // src/web/components/deposit-pre-generation.tsx
14022
14231
  var import_react44 = require("react");
14023
- var import_jsx_runtime136 = require("react/jsx-runtime");
14232
+ var import_jsx_runtime137 = require("react/jsx-runtime");
14024
14233
  var ACCOUNT_TITLES = {
14025
14234
  RGB: "RGB & Lightning",
14026
14235
  SPARK: "Spark",
@@ -14068,58 +14277,58 @@ function DepositPreGeneration({
14068
14277
  const amountId = (0, import_react44.useId)();
14069
14278
  const method = METHOD_META2[currentMethod];
14070
14279
  const isRgbOnchain = network === "onchain" && !isBtc;
14071
- return /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "space-y-3", children: [
14072
- showReceiveSummary && /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "rounded-2xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card p-3 shadow-card", children: [
14073
- /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("p", { className: cn("text-muted-foreground", eyebrow), children: "Receive Summary" }),
14074
- /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "mt-2 grid grid-cols-1 gap-2 text-caption", children: [
14075
- /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [
14076
- /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("span", { className: "text-foreground/55", children: "Asset" }),
14077
- /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("span", { className: "font-bold text-foreground", children: selectedAsset?.ticker ?? (isBtc ? "BTC" : "Asset") })
14280
+ return /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "space-y-3", children: [
14281
+ showReceiveSummary && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "rounded-2xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card p-3 shadow-card", children: [
14282
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: cn("text-muted-foreground", eyebrow), children: "Receive Summary" }),
14283
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "mt-2 grid grid-cols-1 gap-2 text-caption", children: [
14284
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [
14285
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "text-foreground/55", children: "Asset" }),
14286
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "font-bold text-foreground", children: selectedAsset?.ticker ?? (isBtc ? "BTC" : "Asset") })
14078
14287
  ] }),
14079
- /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [
14080
- /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("span", { className: "text-foreground/55", children: "Destination account" }),
14081
- /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("span", { className: "font-bold text-foreground", children: ACCOUNT_TITLES[selectedAccount] })
14288
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [
14289
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "text-foreground/55", children: "Destination account" }),
14290
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "font-bold text-foreground", children: ACCOUNT_TITLES[selectedAccount] })
14082
14291
  ] }),
14083
- /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [
14084
- /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("span", { className: "text-foreground/55", children: "Transfer method" }),
14085
- /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("span", { className: "font-bold text-foreground", children: method.label })
14292
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [
14293
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "text-foreground/55", children: "Transfer method" }),
14294
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "font-bold text-foreground", children: method.label })
14086
14295
  ] }),
14087
- /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("p", { className: "text-tiny text-foreground/55", children: method.summary })
14296
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "text-tiny text-foreground/55", children: method.summary })
14088
14297
  ] })
14089
14298
  ] }),
14090
- channelsLoading && selectedAccount === "RGB" && currentMethod === "lightning" && !isBtc && /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "flex items-center gap-2.5 rounded-xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card p-3 shadow-card", children: [
14091
- /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(IconGlyph, { glyph: ProgressActivity, className: "animate-spin text-icon-lg text-secondary-content" }),
14092
- /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("span", { className: "text-caption font-medium text-foreground/60", children: "Checking channel availability..." })
14299
+ channelsLoading && selectedAccount === "RGB" && currentMethod === "lightning" && !isBtc && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex items-center gap-2.5 rounded-xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card p-3 shadow-card", children: [
14300
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(IconGlyph, { glyph: ProgressActivity, className: "animate-spin text-icon-lg text-secondary-content" }),
14301
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "text-caption font-medium text-foreground/60", children: "Checking channel availability..." })
14093
14302
  ] }),
14094
- showChannelWarning && /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)(AlertBanner, { variant: "warning", children: [
14095
- /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("p", { className: "mb-0.5 text-caption font-bold text-warning-fg", children: "No Lightning Channels" }),
14096
- /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("p", { className: "text-tiny text-warning-fg/70", children: "Only on-chain deposits are available." })
14303
+ showChannelWarning && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(AlertBanner, { variant: "warning", children: [
14304
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "mb-0.5 text-caption font-bold text-warning-fg", children: "No Lightning Channels" }),
14305
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "text-tiny text-warning-fg/70", children: "Only on-chain deposits are available." })
14097
14306
  ] }),
14098
- showLiquidityWarning && /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)(AlertBanner, { variant: "warning", children: [
14099
- /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("p", { className: "mb-0.5 text-caption font-bold text-warning-fg", children: "No Inbound Liquidity" }),
14100
- /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("p", { className: "text-tiny text-warning-fg/70", children: [
14307
+ showLiquidityWarning && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(AlertBanner, { variant: "warning", children: [
14308
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "mb-0.5 text-caption font-bold text-warning-fg", children: "No Inbound Liquidity" }),
14309
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("p", { className: "text-tiny text-warning-fg/70", children: [
14101
14310
  "No channels with inbound capacity for ",
14102
14311
  selectedAsset?.ticker ?? "this asset",
14103
14312
  "."
14104
14313
  ] })
14105
14314
  ] }),
14106
- isAutoGenerate && loading && /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "flex flex-col items-center gap-4 py-10", children: [
14107
- /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("div", { className: cn("flex size-16 items-center justify-center rounded-2xl shadow-raised", net.bg), children: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(IconGlyph, { glyph: ProgressActivity, className: cn("animate-spin text-icon-4xl", net.text) }) }),
14108
- /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "space-y-1 text-center", children: [
14109
- /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("p", { className: "text-caption font-bold text-muted-foreground", children: [
14315
+ isAutoGenerate && loading && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex flex-col items-center gap-4 py-10", children: [
14316
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("div", { className: cn("flex size-16 items-center justify-center rounded-2xl shadow-raised", net.bg), children: /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(IconGlyph, { glyph: ProgressActivity, className: cn("animate-spin text-icon-4xl", net.text) }) }),
14317
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "space-y-1 text-center", children: [
14318
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("p", { className: "text-caption font-bold text-muted-foreground", children: [
14110
14319
  "Generating ",
14111
14320
  network === "lightning" ? "invoice" : "address",
14112
14321
  "..."
14113
14322
  ] }),
14114
- /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("p", { className: "text-caption text-foreground/55", children: [
14323
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("p", { className: "text-caption text-foreground/55", children: [
14115
14324
  net.label,
14116
14325
  " network"
14117
14326
  ] })
14118
14327
  ] })
14119
14328
  ] }),
14120
- isRgbOnchain && isNewRgbAsset && setNewAssetId && /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "flex flex-col gap-2", children: [
14121
- /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(Label3, { htmlFor: assetIdInputId, children: "RGB Asset ID - Optional" }),
14122
- /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(
14329
+ isRgbOnchain && isNewRgbAsset && setNewAssetId && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex flex-col gap-2", children: [
14330
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(Label3, { htmlFor: assetIdInputId, children: "RGB Asset ID - Optional" }),
14331
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(
14123
14332
  "input",
14124
14333
  {
14125
14334
  id: assetIdInputId,
@@ -14132,15 +14341,15 @@ function DepositPreGeneration({
14132
14341
  className: "w-full rounded-xl bg-card/55 bg-gradient-card ring-1 ring-inset ring-secondary/15 hover:ring-secondary/35 px-3 py-2.5 font-mono text-caption text-foreground shadow-inner transition-all placeholder:text-muted-foreground focus:ring-primary/50 focus:shadow-glow-primary-soft focus:outline-none"
14133
14342
  }
14134
14343
  ),
14135
- /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("p", { className: "text-xxs text-foreground/55", children: "Enter a specific asset ID to receive it, or leave empty to accept any RGB asset to this invoice." })
14344
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "text-xxs text-foreground/55", children: "Enter a specific asset ID to receive it, or leave empty to accept any RGB asset to this invoice." })
14136
14345
  ] }),
14137
- isRgbOnchain && /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "space-y-2.5 rounded-xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card p-3 shadow-card", children: [
14138
- /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [
14139
- /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "min-w-0 flex-1", children: [
14140
- /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("h4", { className: "text-caption font-bold text-foreground", children: usePrivacy ? "Blinded receive" : "Witness receive" }),
14141
- /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("p", { className: "mt-0.5 text-xxs text-muted-foreground", children: usePrivacy ? "Private - recommended" : "Simpler - less private" })
14346
+ isRgbOnchain && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "space-y-2.5 rounded-xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card p-3 shadow-card", children: [
14347
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [
14348
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "min-w-0 flex-1", children: [
14349
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("h4", { className: "text-caption font-bold text-foreground", children: usePrivacy ? "Blinded receive" : "Witness receive" }),
14350
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "mt-0.5 text-xxs text-muted-foreground", children: usePrivacy ? "Private - recommended" : "Simpler - less private" })
14142
14351
  ] }),
14143
- /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(
14352
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(
14144
14353
  "button",
14145
14354
  {
14146
14355
  type: "button",
@@ -14150,7 +14359,7 @@ function DepositPreGeneration({
14150
14359
  usePrivacy ? "bg-primary bg-gradient-primary shadow-glow-primary-soft" : "bg-foreground/10"
14151
14360
  ),
14152
14361
  onClick: () => setUsePrivacy(!usePrivacy),
14153
- children: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(
14362
+ children: /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(
14154
14363
  "span",
14155
14364
  {
14156
14365
  className: cn(
@@ -14162,8 +14371,8 @@ function DepositPreGeneration({
14162
14371
  }
14163
14372
  )
14164
14373
  ] }),
14165
- /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("p", { className: "text-tiny leading-relaxed text-foreground/55", children: usePrivacy ? "Blinded: the sender never sees which UTXO you receive into. Spends one of your colorable UTXOs as the receiving slot." : "Witness: the sender creates the receiving UTXO for you. No colorable UTXO needed, but the sender sees the receiving output." }),
14166
- usePrivacy && colorableUtxoCount !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)(
14374
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "text-tiny leading-relaxed text-foreground/55", children: usePrivacy ? "Blinded: the sender never sees which UTXO you receive into. Spends one of your colorable UTXOs as the receiving slot." : "Witness: the sender creates the receiving UTXO for you. No colorable UTXO needed, but the sender sees the receiving output." }),
14375
+ usePrivacy && colorableUtxoCount !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(
14167
14376
  "div",
14168
14377
  {
14169
14378
  className: cn(
@@ -14171,26 +14380,26 @@ function DepositPreGeneration({
14171
14380
  colorableUtxoCount > 0 ? "bg-success/10 text-success-fg/80" : "bg-warning/10 text-warning-fg/80"
14172
14381
  ),
14173
14382
  children: [
14174
- /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("span", { className: "font-medium", children: "Available colorable UTXOs" }),
14175
- /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("span", { className: "font-bold tabular-nums", children: colorableUtxoCount })
14383
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "font-medium", children: "Available colorable UTXOs" }),
14384
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "font-bold tabular-nums", children: colorableUtxoCount })
14176
14385
  ]
14177
14386
  }
14178
14387
  ),
14179
- usePrivacy && colorableUtxoCount === 0 && /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("p", { className: "text-tiny text-warning-fg/70", children: "None available \u2014 create a colorable UTXO below to receive privately, or switch off privacy to use a witness receive." })
14388
+ usePrivacy && colorableUtxoCount === 0 && /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "text-tiny text-warning-fg/70", children: "None available \u2014 create a colorable UTXO below to receive privately, or switch off privacy to use a witness receive." })
14180
14389
  ] }),
14181
- network === "onchain" && !isBtc && /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "flex flex-col gap-2", children: [
14182
- /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "flex items-center justify-between", children: [
14183
- /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)(Label3, { htmlFor: amountId, children: [
14390
+ network === "onchain" && !isBtc && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex flex-col gap-2", children: [
14391
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex items-center justify-between", children: [
14392
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(Label3, { htmlFor: amountId, children: [
14184
14393
  "Amount (",
14185
14394
  getUnitLabel(),
14186
14395
  ") - Optional"
14187
14396
  ] }),
14188
- selectedAsset && /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("span", { className: "text-xxs text-foreground/55", children: [
14397
+ selectedAsset && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("span", { className: "text-xxs text-foreground/55", children: [
14189
14398
  selectedAsset.precision ?? 0,
14190
14399
  " decimals"
14191
14400
  ] })
14192
14401
  ] }),
14193
- /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(
14402
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(
14194
14403
  "input",
14195
14404
  {
14196
14405
  id: amountId,
@@ -14203,18 +14412,18 @@ function DepositPreGeneration({
14203
14412
  }
14204
14413
  )
14205
14414
  ] }),
14206
- needsColorableUtxos && /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)(AlertBanner, { variant: "warning", children: [
14207
- /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("p", { className: "mb-0.5 text-caption font-bold text-warning-fg", children: "Colorable UTXOs Required" }),
14208
- /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("p", { className: "text-tiny text-warning-fg/70", children: "To receive RGB assets on-chain you need at least one uncolored UTXO. Create some now and the invoice will be generated automatically." })
14415
+ needsColorableUtxos && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(AlertBanner, { variant: "warning", children: [
14416
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "mb-0.5 text-caption font-bold text-warning-fg", children: "Colorable UTXOs Required" }),
14417
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "text-tiny text-warning-fg/70", children: "To receive RGB assets on-chain you need at least one uncolored UTXO. Create some now and the invoice will be generated automatically." })
14209
14418
  ] }),
14210
- !isAutoGenerate && ((needsColorableUtxos || isRgbOnchain && usePrivacy && colorableUtxoCount === 0) && onOpenCreateUtxos ? /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(Button, { variant: "cta", size: "cta", onClick: onOpenCreateUtxos, disabled: loading, children: /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("span", { className: "flex items-center justify-center gap-2", children: [
14211
- /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(IconGlyph, { glyph: AddCircle, className: "text-icon-md" }),
14419
+ !isAutoGenerate && ((needsColorableUtxos || isRgbOnchain && usePrivacy && colorableUtxoCount === 0) && onOpenCreateUtxos ? /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(Button, { variant: "cta", size: "cta", onClick: onOpenCreateUtxos, disabled: loading, children: /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("span", { className: "flex items-center justify-center gap-2", children: [
14420
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(IconGlyph, { glyph: AddCircle, className: "text-icon-md" }),
14212
14421
  "Create Colorable UTXOs"
14213
- ] }) }) : /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(Button, { variant: "cta", size: "cta", onClick: generateInvoice, disabled: loading, children: loading ? /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("span", { className: "flex items-center justify-center gap-2", children: [
14214
- /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(IconGlyph, { glyph: ProgressActivity, className: "animate-spin text-icon-md" }),
14422
+ ] }) }) : /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(Button, { variant: "cta", size: "cta", onClick: generateInvoice, disabled: loading, children: loading ? /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("span", { className: "flex items-center justify-center gap-2", children: [
14423
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(IconGlyph, { glyph: ProgressActivity, className: "animate-spin text-icon-md" }),
14215
14424
  "Generating..."
14216
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("span", { className: "flex items-center justify-center gap-2", children: [
14217
- /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(IconGlyph, { glyph: QrCode_2, className: "text-icon-md" }),
14425
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("span", { className: "flex items-center justify-center gap-2", children: [
14426
+ /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(IconGlyph, { glyph: QrCode_2, className: "text-icon-md" }),
14218
14427
  "Generate Address"
14219
14428
  ] }) }))
14220
14429
  ] });
@@ -14222,7 +14431,7 @@ function DepositPreGeneration({
14222
14431
 
14223
14432
  // src/web/components/deposit-asset-selection.tsx
14224
14433
  var import_react45 = require("react");
14225
- var import_jsx_runtime137 = require("react/jsx-runtime");
14434
+ var import_jsx_runtime138 = require("react/jsx-runtime");
14226
14435
  var ADD_ASSET_SUBTITLE = {
14227
14436
  RGB: "RGB asset on Bitcoin",
14228
14437
  SPARK: "Spark-native asset",
@@ -14311,9 +14520,9 @@ function DepositAssetSelection({
14311
14520
  titleHoverClass: "group-hover:text-network-liquid-fg"
14312
14521
  }
14313
14522
  ].filter((option) => option.enabled);
14314
- return /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "relative flex h-screen flex-col overflow-hidden bg-background bg-page-radial pt-16 font-display text-foreground", children: [
14315
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("div", { className: "absolute left-4 top-4 z-30", children: /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(GlyphButton, { icon: ArrowBack, label: "Go back", size: "lg", onClick: () => setCurrentView("dashboard") }) }),
14316
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("div", { className: "flex-shrink-0 px-5 pb-3 pt-4", children: /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(
14523
+ return /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "relative flex h-screen flex-col overflow-hidden bg-background bg-page-radial pt-16 font-display text-foreground", children: [
14524
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "absolute left-4 top-4 z-30", children: /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(GlyphButton, { icon: ArrowBack, label: "Go back", size: "lg", onClick: () => setCurrentView("dashboard") }) }),
14525
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "flex-shrink-0 px-5 pb-3 pt-4", children: /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(
14317
14526
  DotPagination,
14318
14527
  {
14319
14528
  count: 2,
@@ -14321,8 +14530,8 @@ function DepositAssetSelection({
14321
14530
  ariaLabel: "Deposit step 1 of 2: select asset"
14322
14531
  }
14323
14532
  ) }),
14324
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("div", { className: "flex-shrink-0 px-5 pb-3", children: /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "relative", children: [
14325
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(
14533
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "flex-shrink-0 px-5 pb-3", children: /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "relative", children: [
14534
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(
14326
14535
  IconGlyph,
14327
14536
  {
14328
14537
  glyph: Search,
@@ -14330,7 +14539,7 @@ function DepositAssetSelection({
14330
14539
  className: "absolute left-3 top-1/2 -translate-y-1/2 text-secondary-content"
14331
14540
  }
14332
14541
  ),
14333
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(
14542
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(
14334
14543
  "input",
14335
14544
  {
14336
14545
  autoFocus: true,
@@ -14343,8 +14552,8 @@ function DepositAssetSelection({
14343
14552
  }
14344
14553
  )
14345
14554
  ] }) }),
14346
- /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(ScrollArea, { className: "min-h-0 flex-1", viewportClassName: "space-y-1.5 px-5 pb-3", children: [
14347
- btcAsset && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(
14555
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)(ScrollArea, { className: "min-h-0 flex-1", viewportClassName: "space-y-1.5 px-5 pb-3", children: [
14556
+ btcAsset && /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)(
14348
14557
  "button",
14349
14558
  {
14350
14559
  type: "button",
@@ -14352,28 +14561,28 @@ function DepositAssetSelection({
14352
14561
  className: "group flex w-full min-w-0 items-center gap-3 overflow-hidden rounded-2xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card px-4 py-3 text-body shadow-card transition-all duration-200 hover-gradient-violet hover:shadow-card-hover",
14353
14562
  onClick: () => onSelectAsset(btcAsset),
14354
14563
  children: [
14355
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(AssetIcon, { ticker: "BTC", size: 40, className: "flex-shrink-0" }),
14356
- /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "min-w-0 flex-1 text-left", children: [
14357
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("div", { className: "font-bold tracking-wide text-foreground transition-colors group-hover:text-secondary-content", children: "Bitcoin" }),
14358
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("div", { className: "mt-0.5 text-caption text-foreground/55", children: "Choose destination account next" })
14564
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(AssetIcon, { ticker: "BTC", size: 40, className: "flex-shrink-0" }),
14565
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "min-w-0 flex-1 text-left", children: [
14566
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "font-bold tracking-wide text-foreground transition-colors group-hover:text-secondary-content", children: "Bitcoin" }),
14567
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "mt-0.5 text-caption text-foreground/55", children: "Choose destination account next" })
14359
14568
  ] }),
14360
- /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "hidden min-w-0 max-w-[42%] flex-shrink flex-wrap justify-end gap-1 min-[380px]:flex", children: [
14361
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(NetworkBadge, { network: "L1", size: "sm" }),
14362
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(NetworkBadge, { network: "LN", size: "sm" }),
14363
- isSparkConnected && /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(NetworkBadge, { network: "Spark", size: "sm" }),
14364
- isArkadeConnected && /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(NetworkBadge, { network: "Arkade", size: "sm" }),
14365
- isLiquidConnected && /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(NetworkBadge, { network: "Liquid", size: "sm" })
14569
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "hidden min-w-0 max-w-[42%] flex-shrink flex-wrap justify-end gap-1 min-[380px]:flex", children: [
14570
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(NetworkBadge, { network: "L1", size: "sm" }),
14571
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(NetworkBadge, { network: "LN", size: "sm" }),
14572
+ isSparkConnected && /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(NetworkBadge, { network: "Spark", size: "sm" }),
14573
+ isArkadeConnected && /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(NetworkBadge, { network: "Arkade", size: "sm" }),
14574
+ isLiquidConnected && /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(NetworkBadge, { network: "Liquid", size: "sm" })
14366
14575
  ] }),
14367
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(IconGlyph, { glyph: ArrowForward, className: "flex-shrink-0 text-icon-md text-foreground/20 transition-colors group-hover:text-secondary-content" })
14576
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(IconGlyph, { glyph: ArrowForward, className: "flex-shrink-0 text-icon-md text-foreground/20 transition-colors group-hover:text-secondary-content" })
14368
14577
  ]
14369
14578
  }
14370
14579
  ),
14371
- noResults ? /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "py-8 text-center text-caption text-foreground/55", children: [
14580
+ noResults ? /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "py-8 text-center text-caption text-foreground/55", children: [
14372
14581
  'No assets match "',
14373
14582
  searchQuery,
14374
14583
  '"'
14375
- ] }) : ownedAssetsCount > 0 ? /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "space-y-1.5 pt-1", children: [
14376
- /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(
14584
+ ] }) : ownedAssetsCount > 0 ? /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "space-y-1.5 pt-1", children: [
14585
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)(
14377
14586
  "button",
14378
14587
  {
14379
14588
  type: "button",
@@ -14386,17 +14595,17 @@ function DepositAssetSelection({
14386
14595
  isSearching && "cursor-default"
14387
14596
  ),
14388
14597
  children: [
14389
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: cn("text-muted-foreground", eyebrow), children: "Your assets" }),
14390
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "inline-flex size-5 items-center justify-center rounded-full bg-secondary bg-gradient-violet text-tiny font-bold text-white shadow-button-violet", children: ownedAssetsCount }),
14391
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("div", { className: "flex-1" }),
14392
- !isSearching && /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(IconGlyph, { glyph: showOwnedAssets ? ExpandLess : ExpandMore, size: "md", className: "text-secondary-content" })
14598
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("span", { className: cn("text-muted-foreground", eyebrow), children: "Your assets" }),
14599
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("span", { className: "inline-flex size-5 items-center justify-center rounded-full bg-secondary bg-gradient-violet text-tiny font-bold text-white shadow-button-violet", children: ownedAssetsCount }),
14600
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "flex-1" }),
14601
+ !isSearching && /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(IconGlyph, { glyph: showOwnedAssets ? ExpandLess : ExpandMore, size: "md", className: "text-secondary-content" })
14393
14602
  ]
14394
14603
  }
14395
14604
  ),
14396
- showOwnedAssets && /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("div", { className: "space-y-1.5 duration-200 animate-in fade-in slide-in-from-top-1", children: ownedAssets.map((asset) => {
14605
+ showOwnedAssets && /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "space-y-1.5 duration-200 animate-in fade-in slide-in-from-top-1", children: ownedAssets.map((asset) => {
14397
14606
  const protocolBadge = asset.accountId ? PROTOCOL_BADGE[asset.accountId] : null;
14398
14607
  const balance = asset.balance ?? 0;
14399
- return /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(
14608
+ return /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)(
14400
14609
  "button",
14401
14610
  {
14402
14611
  type: "button",
@@ -14404,11 +14613,11 @@ function DepositAssetSelection({
14404
14613
  className: "group flex w-full min-w-0 items-center gap-3 overflow-hidden rounded-2xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card px-4 py-3 text-body shadow-card transition-all duration-200 hover-gradient-violet hover:shadow-card-hover",
14405
14614
  onClick: () => onSelectAsset(asset),
14406
14615
  children: [
14407
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(AssetIcon, { ticker: asset.ticker, size: 40, className: "flex-shrink-0" }),
14408
- /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "min-w-0 flex-1 text-left", children: [
14409
- /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex min-w-0 items-center gap-1.5", children: [
14410
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "truncate font-bold tracking-wide text-foreground transition-colors group-hover:text-secondary-content", children: asset.ticker }),
14411
- protocolBadge && /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(
14616
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(AssetIcon, { ticker: asset.ticker, size: 40, className: "flex-shrink-0" }),
14617
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "min-w-0 flex-1 text-left", children: [
14618
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "flex min-w-0 items-center gap-1.5", children: [
14619
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("span", { className: "truncate font-bold tracking-wide text-foreground transition-colors group-hover:text-secondary-content", children: asset.ticker }),
14620
+ protocolBadge && /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(
14412
14621
  "span",
14413
14622
  {
14414
14623
  className: cn(
@@ -14420,36 +14629,36 @@ function DepositAssetSelection({
14420
14629
  }
14421
14630
  )
14422
14631
  ] }),
14423
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("div", { className: "mt-0.5 truncate text-caption text-foreground/55", children: asset.name ?? "Asset" })
14632
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "mt-0.5 truncate text-caption text-foreground/55", children: asset.name ?? "Asset" })
14424
14633
  ] }),
14425
- balance > 0 && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex-shrink-0 text-right", children: [
14426
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("div", { className: "text-caption font-bold tabular-nums text-foreground", children: formatAssetBalance(asset) }),
14427
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("div", { className: cn("mt-0.5 text-foreground/55", eyebrow), children: asset.ticker })
14634
+ balance > 0 && /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "flex-shrink-0 text-right", children: [
14635
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "text-caption font-bold tabular-nums text-foreground", children: formatAssetBalance(asset) }),
14636
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: cn("mt-0.5 text-foreground/55", eyebrow), children: asset.ticker })
14428
14637
  ] }),
14429
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(IconGlyph, { glyph: ArrowForward, className: "flex-shrink-0 text-icon-sm text-foreground/20 transition-colors group-hover:text-secondary-content" })
14638
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(IconGlyph, { glyph: ArrowForward, className: "flex-shrink-0 text-icon-sm text-foreground/20 transition-colors group-hover:text-secondary-content" })
14430
14639
  ]
14431
14640
  },
14432
14641
  asset.asset_id
14433
14642
  );
14434
14643
  }) })
14435
14644
  ] }) : null,
14436
- !searchQuery && /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("div", { className: "pb-1 pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(
14645
+ !searchQuery && /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "pb-1 pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)(
14437
14646
  "button",
14438
14647
  {
14439
14648
  type: "button",
14440
14649
  onClick: () => setCurrentView("bridge"),
14441
14650
  className: "group flex w-full items-center gap-3 rounded-2xl bg-gradient-to-r from-secondary/20 to-primary/10 p-3 shadow-card transition-all duration-200 hover:from-secondary/30 hover:to-primary/15 hover:shadow-card-hover",
14442
14651
  children: [
14443
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("div", { className: "flex size-10 shrink-0 items-center justify-center rounded-xl bg-secondary bg-gradient-violet text-white shadow-button-violet", children: /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(IconGlyph, { glyph: SwapCalls, className: "text-icon-lg" }) }),
14444
- /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex-1 text-left", children: [
14445
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "text-body font-semibold text-foreground transition-colors group-hover:text-secondary-content", children: "Bridge from another chain" }),
14446
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "text-xxs leading-tight text-foreground/55", children: "USDC, USDT, ETH, SOL via Flashnet" })
14652
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "flex size-10 shrink-0 items-center justify-center rounded-xl bg-secondary bg-gradient-violet text-white shadow-button-violet", children: /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(IconGlyph, { glyph: SwapCalls, className: "text-icon-lg" }) }),
14653
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "flex-1 text-left", children: [
14654
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("p", { className: "text-body font-semibold text-foreground transition-colors group-hover:text-secondary-content", children: "Bridge from another chain" }),
14655
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("p", { className: "text-xxs leading-tight text-foreground/55", children: "USDC, USDT, ETH, SOL via Flashnet" })
14447
14656
  ] }),
14448
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(IconGlyph, { glyph: ArrowForward, className: "text-icon-lg text-foreground/55 transition-colors group-hover:text-secondary-content" })
14657
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(IconGlyph, { glyph: ArrowForward, className: "text-icon-lg text-foreground/55 transition-colors group-hover:text-secondary-content" })
14449
14658
  ]
14450
14659
  }
14451
14660
  ) }),
14452
- !searchQuery && newAssetOptions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("div", { className: "pb-1 pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(
14661
+ !searchQuery && newAssetOptions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "pb-1 pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)(
14453
14662
  "button",
14454
14663
  {
14455
14664
  type: "button",
@@ -14457,27 +14666,27 @@ function DepositAssetSelection({
14457
14666
  onClick: () => setShowAddAssetModal(true),
14458
14667
  className: "group flex w-full items-center gap-3 rounded-2xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card p-3 shadow-card transition-all duration-200 hover-gradient-violet hover:shadow-card-hover",
14459
14668
  children: [
14460
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("div", { className: "flex size-10 shrink-0 items-center justify-center rounded-xl bg-secondary/15 text-secondary-content", children: /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(IconGlyph, { glyph: Add, size: "md" }) }),
14461
- /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex-1 text-left", children: [
14462
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "text-body font-semibold text-foreground transition-colors group-hover:text-secondary-content", children: "Add an asset" }),
14463
- /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("p", { className: "text-xxs leading-tight text-foreground/55", children: [
14669
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "flex size-10 shrink-0 items-center justify-center rounded-xl bg-secondary/15 text-secondary-content", children: /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(IconGlyph, { glyph: Add, size: "md" }) }),
14670
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "flex-1 text-left", children: [
14671
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("p", { className: "text-body font-semibold text-foreground transition-colors group-hover:text-secondary-content", children: "Add an asset" }),
14672
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("p", { className: "text-xxs leading-tight text-foreground/55", children: [
14464
14673
  "Receive a new ",
14465
14674
  newAssetOptions.map((o) => o.ticker).join(", "),
14466
14675
  " asset"
14467
14676
  ] })
14468
14677
  ] }),
14469
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(IconGlyph, { glyph: ArrowForward, className: "text-icon-lg text-foreground/55 transition-colors group-hover:text-secondary-content" })
14678
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(IconGlyph, { glyph: ArrowForward, className: "text-icon-lg text-foreground/55 transition-colors group-hover:text-secondary-content" })
14470
14679
  ]
14471
14680
  }
14472
14681
  ) })
14473
14682
  ] }),
14474
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(
14683
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(
14475
14684
  BottomSheet,
14476
14685
  {
14477
14686
  open: showAddAssetModal,
14478
14687
  title: "Add an asset",
14479
14688
  onClose: () => setShowAddAssetModal(false),
14480
- children: /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("div", { className: "space-y-2", children: newAssetOptions.map((option) => /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(
14689
+ children: /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "space-y-2", children: newAssetOptions.map((option) => /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)(
14481
14690
  "button",
14482
14691
  {
14483
14692
  type: "button",
@@ -14491,12 +14700,12 @@ function DepositAssetSelection({
14491
14700
  handleAddNewAsset(option.account);
14492
14701
  },
14493
14702
  children: [
14494
- option.account === "LIQUID" ? /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "flex size-9 shrink-0 items-center justify-center rounded-full bg-network-liquid/10", children: /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(LiquidNetworkIcon, { className: "size-5" }) }) : /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(AssetIcon, { ticker: option.ticker, size: 36, className: "flex-shrink-0" }),
14495
- /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "min-w-0 flex-1", children: [
14496
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("div", { className: cn("text-body font-bold tracking-wide text-foreground", option.titleHoverClass), children: option.title }),
14497
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("div", { className: "mt-0.5 text-xxs text-foreground/55", children: ADD_ASSET_SUBTITLE[option.account] })
14703
+ option.account === "LIQUID" ? /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("span", { className: "flex size-9 shrink-0 items-center justify-center rounded-full bg-network-liquid/10", children: /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(LiquidNetworkIcon, { className: "size-5" }) }) : /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(AssetIcon, { ticker: option.ticker, size: 36, className: "flex-shrink-0" }),
14704
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "min-w-0 flex-1", children: [
14705
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: cn("text-body font-bold tracking-wide text-foreground", option.titleHoverClass), children: option.title }),
14706
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "mt-0.5 text-xxs text-foreground/55", children: ADD_ASSET_SUBTITLE[option.account] })
14498
14707
  ] }),
14499
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(IconGlyph, { glyph: Add, size: "sm", className: "text-foreground/55 transition-colors group-hover:text-foreground/60" })
14708
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(IconGlyph, { glyph: Add, size: "sm", className: "text-foreground/55 transition-colors group-hover:text-foreground/60" })
14500
14709
  ]
14501
14710
  },
14502
14711
  option.account
@@ -14507,7 +14716,7 @@ function DepositAssetSelection({
14507
14716
  }
14508
14717
 
14509
14718
  // src/web/components/deposit-invoice-generation.tsx
14510
- var import_jsx_runtime138 = require("react/jsx-runtime");
14719
+ var import_jsx_runtime139 = require("react/jsx-runtime");
14511
14720
  var ACCOUNT_TITLES2 = {
14512
14721
  RGB: "RGB & Lightning",
14513
14722
  SPARK: "Spark",
@@ -14666,7 +14875,7 @@ function DepositInvoiceGeneration({
14666
14875
  if (nextMethod) applyMethodSelection(account, nextMethod);
14667
14876
  };
14668
14877
  if (depositDetected) {
14669
- return /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(
14878
+ return /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
14670
14879
  DepositSuccessScreen,
14671
14880
  {
14672
14881
  handleDone,
@@ -14683,15 +14892,15 @@ function DepositInvoiceGeneration({
14683
14892
  const showChannelWarning = selectedAccount === "RGB" && network === "lightning" && !channelsLoading && channels.length === 0 && !isSparkConnected;
14684
14893
  const showLiquidityWarning = !isSparkLightning && network === "lightning" && maxDepositAmount === 0 && !channelsLoading && !isBtc;
14685
14894
  const isNewRgbAsset = isNewAsset && assetFamily === "RGB";
14686
- return /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "relative flex h-screen flex-col overflow-hidden bg-background bg-page-radial pt-16 font-display text-foreground", children: [
14687
- /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "absolute left-4 top-4 z-30", children: /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(GlyphButton, { icon: ArrowBack, label: "Go back", size: "lg", onClick: handleBack }) }),
14895
+ return /* @__PURE__ */ (0, import_jsx_runtime139.jsxs)("div", { className: "relative flex h-screen flex-col overflow-hidden bg-background bg-page-radial pt-16 font-display text-foreground", children: [
14896
+ /* @__PURE__ */ (0, import_jsx_runtime139.jsx)("div", { className: "absolute left-4 top-4 z-30", children: /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(GlyphButton, { icon: ArrowBack, label: "Go back", size: "lg", onClick: handleBack }) }),
14688
14897
  (() => {
14689
14898
  const hideDestinationRail = isNewAsset && (network === "spark" || network === "arkade");
14690
14899
  if (hideDestinationRail) return null;
14691
- return /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "flex-shrink-0 px-4 py-2", children: /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "space-y-2", children: [
14692
- /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { children: [
14693
- /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("p", { className: cn("text-muted-foreground", eyebrow), children: "Destination Account" }),
14694
- /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "mt-1.5 flex gap-1.5 overflow-x-auto no-scrollbar", children: availableAccounts.map((account) => /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(
14900
+ return /* @__PURE__ */ (0, import_jsx_runtime139.jsx)("div", { className: "flex-shrink-0 px-4 py-2", children: /* @__PURE__ */ (0, import_jsx_runtime139.jsxs)("div", { className: "space-y-2", children: [
14901
+ /* @__PURE__ */ (0, import_jsx_runtime139.jsxs)("div", { children: [
14902
+ /* @__PURE__ */ (0, import_jsx_runtime139.jsx)("p", { className: cn("text-muted-foreground", eyebrow), children: "Destination Account" }),
14903
+ /* @__PURE__ */ (0, import_jsx_runtime139.jsx)("div", { className: "mt-1.5 flex gap-1.5 overflow-x-auto no-scrollbar", children: availableAccounts.map((account) => /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
14695
14904
  AccountChoiceChip,
14696
14905
  {
14697
14906
  account,
@@ -14716,9 +14925,9 @@ function DepositInvoiceGeneration({
14716
14925
  account
14717
14926
  )) })
14718
14927
  ] }),
14719
- !isBtc && !(isNewAsset && (network === "spark" || network === "arkade")) && /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { children: [
14720
- /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("p", { className: cn("text-muted-foreground", eyebrow), children: "Transfer Method" }),
14721
- /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "mt-1.5 flex gap-1.5 overflow-x-auto no-scrollbar", children: methodOptions.map(({ method, enabled, disabledReason }) => /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(
14928
+ !isBtc && !(isNewAsset && (network === "spark" || network === "arkade")) && /* @__PURE__ */ (0, import_jsx_runtime139.jsxs)("div", { children: [
14929
+ /* @__PURE__ */ (0, import_jsx_runtime139.jsx)("p", { className: cn("text-muted-foreground", eyebrow), children: "Transfer Method" }),
14930
+ /* @__PURE__ */ (0, import_jsx_runtime139.jsx)("div", { className: "mt-1.5 flex gap-1.5 overflow-x-auto no-scrollbar", children: methodOptions.map(({ method, enabled, disabledReason }) => /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
14722
14931
  MethodChoiceChip,
14723
14932
  {
14724
14933
  method,
@@ -14732,7 +14941,7 @@ function DepositInvoiceGeneration({
14732
14941
  ] })
14733
14942
  ] }) });
14734
14943
  })(),
14735
- /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(ScrollArea, { className: "flex-1", viewportAs: "main", viewportClassName: "space-y-2.5 px-4 py-2.5", children: isBtc && accountReceiveResult ? /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(
14944
+ /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(ScrollArea, { className: "flex-1", viewportAs: "main", viewportClassName: "space-y-2.5 px-4 py-2.5", children: isBtc && accountReceiveResult ? /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
14736
14945
  BtcUnifiedReceive,
14737
14946
  {
14738
14947
  btcSelectedAccount,
@@ -14752,15 +14961,15 @@ function DepositInvoiceGeneration({
14752
14961
  setAccountReceiveResult,
14753
14962
  handleDone
14754
14963
  }
14755
- ) : isBtc && !accountReceiveResult && loading ? /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "flex flex-col items-center gap-4 py-10", children: [
14756
- /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(
14964
+ ) : isBtc && !accountReceiveResult && loading ? /* @__PURE__ */ (0, import_jsx_runtime139.jsxs)("div", { className: "flex flex-col items-center gap-4 py-10", children: [
14965
+ /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
14757
14966
  "div",
14758
14967
  {
14759
14968
  className: cn(
14760
14969
  "flex size-16 items-center justify-center rounded-2xl shadow-raised",
14761
14970
  NETWORK_CONFIG[btcSelectedAccount === "SPARK" ? "spark" : btcSelectedAccount === "ARKADE" ? "arkade" : "onchain"].bg
14762
14971
  ),
14763
- children: /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(
14972
+ children: /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
14764
14973
  IconGlyph,
14765
14974
  {
14766
14975
  glyph: ProgressActivity,
@@ -14772,11 +14981,11 @@ function DepositInvoiceGeneration({
14772
14981
  )
14773
14982
  }
14774
14983
  ),
14775
- /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "space-y-1 text-center", children: [
14776
- /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("p", { className: "text-caption font-bold text-muted-foreground", children: "Generating addresses..." }),
14777
- /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("p", { className: "text-caption text-foreground/55", children: ACCOUNT_TITLES2[btcSelectedAccount] })
14984
+ /* @__PURE__ */ (0, import_jsx_runtime139.jsxs)("div", { className: "space-y-1 text-center", children: [
14985
+ /* @__PURE__ */ (0, import_jsx_runtime139.jsx)("p", { className: "text-caption font-bold text-muted-foreground", children: "Generating addresses..." }),
14986
+ /* @__PURE__ */ (0, import_jsx_runtime139.jsx)("p", { className: "text-caption text-foreground/55", children: ACCOUNT_TITLES2[btcSelectedAccount] })
14778
14987
  ] })
14779
- ] }) : !address ? /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(
14988
+ ] }) : !address ? /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
14780
14989
  DepositPreGeneration,
14781
14990
  {
14782
14991
  selectedAsset,
@@ -14800,7 +15009,7 @@ function DepositInvoiceGeneration({
14800
15009
  onOpenCreateUtxos,
14801
15010
  showReceiveSummary: !isNewRgbAsset
14802
15011
  }
14803
- ) : /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(
15012
+ ) : /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
14804
15013
  DepositGeneratedView,
14805
15014
  {
14806
15015
  network,
@@ -14896,6 +15105,7 @@ function DepositInvoiceGeneration({
14896
15105
  CopyIcon,
14897
15106
  Copyable,
14898
15107
  DEFAULT_AMOUNT_LOCALE,
15108
+ DatePicker,
14899
15109
  DateRangeFilter,
14900
15110
  DepositAssetSelection,
14901
15111
  DepositGeneratedView,