kaleido-ui 0.2.2 → 0.2.5

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 (318) hide show
  1. package/README.md +80 -18
  2. package/dist/icon-AvUL0Cws.d.cts +135 -0
  3. package/dist/icon-AvUL0Cws.d.ts +135 -0
  4. package/dist/native/index.cjs +0 -126
  5. package/dist/native/index.js +0 -126
  6. package/dist/web/assets/kaleidoswap-brand.js +11 -0
  7. package/dist/web/assets/protocol-icons.js +7 -0
  8. package/dist/web/chunk-25RRZDZ2.js +269 -0
  9. package/dist/web/chunk-2Q5SSNFO.js +63 -0
  10. package/dist/web/chunk-2VKFRAX3.js +39 -0
  11. package/dist/web/chunk-3CHDKHXW.js +150 -0
  12. package/dist/web/chunk-4BTXTIE6.js +126 -0
  13. package/dist/web/chunk-4L55ANVR.js +330 -0
  14. package/dist/web/chunk-4UMKXXAK.js +33 -0
  15. package/dist/web/chunk-536NL4X2.js +89 -0
  16. package/dist/web/chunk-563GMWFT.js +32 -0
  17. package/dist/web/chunk-5GBURTY4.js +33 -0
  18. package/dist/web/chunk-5INE4WNW.js +291 -0
  19. package/dist/web/chunk-5MM5YGGG.js +43 -0
  20. package/dist/web/chunk-5NCVH6N5.js +81 -0
  21. package/dist/web/chunk-5V2KMO56.js +55 -0
  22. package/dist/web/chunk-5WBAFYPH.js +62 -0
  23. package/dist/web/chunk-6PNGSAJB.js +55 -0
  24. package/dist/web/chunk-7L35JISL.js +106 -0
  25. package/dist/web/chunk-7L7DQFHJ.js +85 -0
  26. package/dist/web/chunk-7OE6AXLY.js +27 -0
  27. package/dist/web/chunk-7Y7FEBKK.js +85 -0
  28. package/dist/web/chunk-A6MSV4MA.js +83 -0
  29. package/dist/web/chunk-A7MPRLJL.js +169 -0
  30. package/dist/web/chunk-AMIAAHZM.js +232 -0
  31. package/dist/web/chunk-ASHU5XNR.js +21 -0
  32. package/dist/web/chunk-AU5ZGWGA.js +247 -0
  33. package/dist/web/chunk-AVJ56TMD.js +107 -0
  34. package/dist/web/chunk-AWKCO62W.js +191 -0
  35. package/dist/web/chunk-BGUBHWIO.js +41 -0
  36. package/dist/web/chunk-BYHIH2LP.js +56 -0
  37. package/dist/web/chunk-CBE7BT3M.js +87 -0
  38. package/dist/web/chunk-CJATW6EO.js +108 -0
  39. package/dist/web/chunk-CPIM2QKZ.js +666 -0
  40. package/dist/web/chunk-CRMLYZIX.js +35 -0
  41. package/dist/web/chunk-CXLGQSHM.js +417 -0
  42. package/dist/web/chunk-CXMCWSWC.js +20 -0
  43. package/dist/web/chunk-CXPYTWEC.js +43 -0
  44. package/dist/web/chunk-CZGN7SQH.js +41 -0
  45. package/dist/web/chunk-CZPNI33A.js +31 -0
  46. package/dist/web/chunk-D2ZG6TZM.js +96 -0
  47. package/dist/web/chunk-D5CPIS6B.js +169 -0
  48. package/dist/web/chunk-DCUAE6PX.js +202 -0
  49. package/dist/web/chunk-DUAFJ3CX.js +179 -0
  50. package/dist/web/chunk-DV66AZXI.js +368 -0
  51. package/dist/web/chunk-DY72P3EE.js +86 -0
  52. package/dist/web/chunk-DZMOH67F.js +43 -0
  53. package/dist/web/chunk-EBQ35SOM.js +177 -0
  54. package/dist/web/chunk-EXWE5KM6.js +48 -0
  55. package/dist/web/chunk-F2LIZX5K.js +140 -0
  56. package/dist/web/chunk-FSQV54O4.js +61 -0
  57. package/dist/web/chunk-G26YNXL3.js +82 -0
  58. package/dist/web/chunk-G2MJL3VP.js +54 -0
  59. package/dist/web/chunk-G2ZYNR3W.js +28 -0
  60. package/dist/web/chunk-GEXPB5CG.js +63 -0
  61. package/dist/web/chunk-GX5URFML.js +375 -0
  62. package/dist/web/chunk-GZZ5KVON.js +70 -0
  63. package/dist/web/chunk-H3GYLFHP.js +30 -0
  64. package/dist/web/chunk-HKF7IPXV.js +146 -0
  65. package/dist/web/chunk-HKIYPISK.js +175 -0
  66. package/dist/web/chunk-HLPL5AHD.js +54 -0
  67. package/dist/web/chunk-HO65ENYH.js +99 -0
  68. package/dist/web/chunk-HP25HN7Q.js +69 -0
  69. package/dist/web/chunk-HVKSBEZN.js +98 -0
  70. package/dist/web/chunk-HWKXZNBN.js +74 -0
  71. package/dist/web/chunk-HY3VMT27.js +64 -0
  72. package/dist/web/chunk-I2N3HZ4M.js +60 -0
  73. package/dist/web/chunk-I7KNV2UC.js +109 -0
  74. package/dist/web/chunk-INKE5FS6.js +128 -0
  75. package/dist/web/chunk-IWDBETXQ.js +254 -0
  76. package/dist/web/chunk-IZCLPO4E.js +42 -0
  77. package/dist/web/chunk-JY3H7ZAI.js +41 -0
  78. package/dist/web/chunk-JYM5NHBA.js +80 -0
  79. package/dist/web/chunk-K7JVP24O.js +89 -0
  80. package/dist/web/chunk-KDNYIMGR.js +197 -0
  81. package/dist/web/chunk-KMQN66HU.js +27 -0
  82. package/dist/web/chunk-LOGZGZWN.js +1 -0
  83. package/dist/web/chunk-LPDB7EHH.js +65 -0
  84. package/dist/web/chunk-LSY4DY2I.js +72 -0
  85. package/dist/web/chunk-LYLWGJ4R.js +66 -0
  86. package/dist/web/chunk-MKMZH4XD.js +98 -0
  87. package/dist/web/chunk-MTQ22SKE.js +39 -0
  88. package/dist/web/chunk-MTQOAMDW.js +8 -0
  89. package/dist/web/chunk-NEXA6VGG.js +91 -0
  90. package/dist/web/chunk-NHOCTXPF.js +151 -0
  91. package/dist/web/chunk-NNGVB3US.js +176 -0
  92. package/dist/web/chunk-NXPVF5WX.js +74 -0
  93. package/dist/web/chunk-O2TTO5FS.js +24 -0
  94. package/dist/web/chunk-O4IIYGDL.js +70 -0
  95. package/dist/web/chunk-OI7WX7NE.js +17 -0
  96. package/dist/web/chunk-OWSKP527.js +80 -0
  97. package/dist/web/chunk-OX3J3FYX.js +64 -0
  98. package/dist/web/chunk-OZXDXNMR.js +110 -0
  99. package/dist/web/chunk-PIXLIWSO.js +62 -0
  100. package/dist/web/chunk-PMGIJMRO.js +207 -0
  101. package/dist/web/chunk-Q2IXLUSM.js +56 -0
  102. package/dist/web/chunk-QGWVZ5NG.js +73 -0
  103. package/dist/web/chunk-QLUUM53Z.js +90 -0
  104. package/dist/web/chunk-QRFFLA3N.js +84 -0
  105. package/dist/web/chunk-QTZT7QMI.js +83 -0
  106. package/dist/web/chunk-QXZ2WY3B.js +38 -0
  107. package/dist/web/chunk-R2MV4S4U.js +50 -0
  108. package/dist/web/chunk-RA5YGBRB.js +106 -0
  109. package/dist/web/chunk-RIOY4LFJ.js +141 -0
  110. package/dist/web/chunk-RULT57JR.js +85 -0
  111. package/dist/web/chunk-RWJHJMVJ.js +67 -0
  112. package/dist/web/chunk-RXXYUYBP.js +25 -0
  113. package/dist/web/chunk-SGXLWU4V.js +96 -0
  114. package/dist/web/chunk-SIE2FP2T.js +62 -0
  115. package/dist/web/chunk-STMNX3QT.js +109 -0
  116. package/dist/web/chunk-SUOATMIA.js +113 -0
  117. package/dist/web/chunk-SVYDLG2C.js +558 -0
  118. package/dist/web/chunk-T2NBG4KF.js +276 -0
  119. package/dist/web/chunk-T7CEJV6P.js +66 -0
  120. package/dist/web/chunk-TAA6PO5V.js +63 -0
  121. package/dist/web/chunk-TI7NWMEQ.js +34 -0
  122. package/dist/web/chunk-TJGHAD5O.js +40 -0
  123. package/dist/web/chunk-TKRMGN7J.js +8 -0
  124. package/dist/web/chunk-TS4UYWJJ.js +105 -0
  125. package/dist/web/chunk-TY6SGZC7.js +94 -0
  126. package/dist/web/chunk-U2UWLSDG.js +86 -0
  127. package/dist/web/chunk-UHXOPILM.js +101 -0
  128. package/dist/web/chunk-UXLWWQ4J.js +20 -0
  129. package/dist/web/chunk-UZ4LWR4X.js +26 -0
  130. package/dist/web/chunk-V3UI2XX7.js +444 -0
  131. package/dist/web/chunk-VAMCLWLF.js +403 -0
  132. package/dist/web/chunk-VLZMX43R.js +45 -0
  133. package/dist/web/chunk-VM6AGMYO.js +46 -0
  134. package/dist/web/chunk-VNL2QI5B.js +43 -0
  135. package/dist/web/chunk-VYQHGSK6.js +244 -0
  136. package/dist/web/chunk-W4E2N3UN.js +58 -0
  137. package/dist/web/chunk-W4G74KFZ.js +362 -0
  138. package/dist/web/chunk-WBW5E6LC.js +101 -0
  139. package/dist/web/chunk-WEPSTI3Z.js +83 -0
  140. package/dist/web/chunk-WOAWUXER.js +139 -0
  141. package/dist/web/chunk-X2RA4EG3.js +86 -0
  142. package/dist/web/chunk-X3MYWPNO.js +230 -0
  143. package/dist/web/chunk-XDSOOOYL.js +35 -0
  144. package/dist/web/chunk-XIMTRQZ3.js +220 -0
  145. package/dist/web/chunk-XMUXOKIP.js +159 -0
  146. package/dist/web/chunk-XXH4TYKZ.js +276 -0
  147. package/dist/web/chunk-XYNURYMC.js +129 -0
  148. package/dist/web/chunk-XZQUQOR3.js +48 -0
  149. package/dist/web/chunk-Y2W5YG6Y.js +57 -0
  150. package/dist/web/chunk-YFYAMVTL.js +383 -0
  151. package/dist/web/chunk-YLP46BJK.js +50 -0
  152. package/dist/web/chunk-YMM73FLL.js +84 -0
  153. package/dist/web/chunk-YQDCU7ZL.js +49 -0
  154. package/dist/web/chunk-YQQ7GDLZ.js +30 -0
  155. package/dist/web/chunk-YRRZ22OK.js +139 -0
  156. package/dist/web/chunk-YXVOFEDT.js +85 -0
  157. package/dist/web/chunk-Z3H2FQVX.js +120 -0
  158. package/dist/web/chunk-ZDCKYQKS.js +108 -0
  159. package/dist/web/chunk-ZR32WYJA.js +55 -0
  160. package/dist/web/chunk-ZTVV4KBT.js +28 -0
  161. package/dist/web/components/account-capabilities-card.js +21 -0
  162. package/dist/web/components/account-menu.js +18 -0
  163. package/dist/web/components/account-settings-shared.js +50 -0
  164. package/dist/web/components/account-status-tabs.js +20 -0
  165. package/dist/web/components/action-tile.js +8 -0
  166. package/dist/web/components/activity-detail-row.js +22 -0
  167. package/dist/web/components/activity-filter-bar.js +22 -0
  168. package/dist/web/components/activity-list.js +23 -0
  169. package/dist/web/components/activity-network-filters.js +19 -0
  170. package/dist/web/components/activity-row.js +15 -0
  171. package/dist/web/components/activity-type-tabs.js +17 -0
  172. package/dist/web/components/alert-banner.js +13 -0
  173. package/dist/web/components/amount.js +8 -0
  174. package/dist/web/components/app-icon.js +15 -0
  175. package/dist/web/components/asset-card.js +21 -0
  176. package/dist/web/components/asset-icon.js +10 -0
  177. package/dist/web/components/asset-selector.js +24 -0
  178. package/dist/web/components/balance-breakdown.js +18 -0
  179. package/dist/web/components/basic-collapsible.js +11 -0
  180. package/dist/web/components/bottom-nav.js +13 -0
  181. package/dist/web/components/bottom-sheet.js +15 -0
  182. package/dist/web/components/btc-unified-receive.js +28 -0
  183. package/dist/web/components/charts/bar-chart.js +24 -0
  184. package/dist/web/components/charts/bar-list.js +24 -0
  185. package/dist/web/components/charts/core.js +63 -0
  186. package/dist/web/components/charts/donut-chart.js +26 -0
  187. package/dist/web/components/charts/index.js +72 -0
  188. package/dist/web/components/charts/line-chart.js +26 -0
  189. package/dist/web/components/charts/meter.js +24 -0
  190. package/dist/web/components/charts/mixed-chart.js +24 -0
  191. package/dist/web/components/charts/scatter-chart.js +24 -0
  192. package/dist/web/components/charts/sparkline.js +8 -0
  193. package/dist/web/components/choice-group.js +11 -0
  194. package/dist/web/components/code-block.js +21 -0
  195. package/dist/web/components/confirm-dialog.js +15 -0
  196. package/dist/web/components/copy-button.js +21 -0
  197. package/dist/web/components/copyable.js +20 -0
  198. package/dist/web/components/date-range-filter.js +16 -0
  199. package/dist/web/components/deposit-asset-selection.js +24 -0
  200. package/dist/web/components/deposit-generated-view.js +23 -0
  201. package/dist/web/components/deposit-invoice-generation.js +35 -0
  202. package/dist/web/components/deposit-network-default-modal.js +13 -0
  203. package/dist/web/components/deposit-pre-generation.js +17 -0
  204. package/dist/web/components/deposit-success-screen.js +20 -0
  205. package/dist/web/components/deposit-ui-shared.js +28 -0
  206. package/dist/web/components/disclosure-card.js +11 -0
  207. package/dist/web/components/dotted-leader.js +8 -0
  208. package/dist/web/components/empty-state.js +8 -0
  209. package/dist/web/components/environment-indicator.js +9 -0
  210. package/dist/web/components/error-boundary.js +10 -0
  211. package/dist/web/components/event-timeline.js +8 -0
  212. package/dist/web/components/extension-page-frame.js +15 -0
  213. package/dist/web/components/filter-bar.js +15 -0
  214. package/dist/web/components/filter-chip-group.js +8 -0
  215. package/dist/web/components/filter-dropdown.js +12 -0
  216. package/dist/web/components/floating-notice.js +12 -0
  217. package/dist/web/components/form-field.js +10 -0
  218. package/dist/web/components/halo-backdrop.js +8 -0
  219. package/dist/web/components/info-chip.js +24 -0
  220. package/dist/web/components/info-panel.js +13 -0
  221. package/dist/web/components/inline-selector.js +11 -0
  222. package/dist/web/components/instants-statement.js +20 -0
  223. package/dist/web/components/kaleidoscope-hero-animation.js +11 -0
  224. package/dist/web/components/kaleidoswap-logo.js +12 -0
  225. package/dist/web/components/list-field.js +14 -0
  226. package/dist/web/components/list-summary.js +8 -0
  227. package/dist/web/components/metric-card.js +14 -0
  228. package/dist/web/components/mobile-hero-animation.js +8 -0
  229. package/dist/web/components/network-badge.js +14 -0
  230. package/dist/web/components/network-icon.js +21 -0
  231. package/dist/web/components/network-status-chip.js +11 -0
  232. package/dist/web/components/notice-bar.js +8 -0
  233. package/dist/web/components/one-time-secret-dialog.js +18 -0
  234. package/dist/web/components/option-selector.js +12 -0
  235. package/dist/web/components/page-header.js +12 -0
  236. package/dist/web/components/page-shell.js +18 -0
  237. package/dist/web/components/pager.js +11 -0
  238. package/dist/web/components/period-select.js +20 -0
  239. package/dist/web/components/qr-code.js +10 -0
  240. package/dist/web/components/query-state.js +19 -0
  241. package/dist/web/components/read-status.js +15 -0
  242. package/dist/web/components/record-list.js +17 -0
  243. package/dist/web/components/recovery-phrase-card.js +20 -0
  244. package/dist/web/components/restricted.js +9 -0
  245. package/dist/web/components/secret-reveal-card.js +20 -0
  246. package/dist/web/components/section-header.js +9 -0
  247. package/dist/web/components/section-label.js +8 -0
  248. package/dist/web/components/selectable-card.js +8 -0
  249. package/dist/web/components/setting-item.js +13 -0
  250. package/dist/web/components/settings-section-card.js +11 -0
  251. package/dist/web/components/settings-selector-row.js +8 -0
  252. package/dist/web/components/settings-tile.js +21 -0
  253. package/dist/web/components/skeleton.js +10 -0
  254. package/dist/web/components/status-badge.js +13 -0
  255. package/dist/web/components/status-icon-badge.js +15 -0
  256. package/dist/web/components/stepper-number-input.js +10 -0
  257. package/dist/web/components/summary-rows.js +9 -0
  258. package/dist/web/components/swap-badge.js +11 -0
  259. package/dist/web/components/swap-input-card.js +28 -0
  260. package/dist/web/components/swap-step-list.js +10 -0
  261. package/dist/web/components/switch-row.js +9 -0
  262. package/dist/web/components/theme-toggle.js +12 -0
  263. package/dist/web/components/transaction-card.js +14 -0
  264. package/dist/web/components/trend-chart.js +28 -0
  265. package/dist/web/components/value-list.js +20 -0
  266. package/dist/web/components/wallet-asset-list.js +22 -0
  267. package/dist/web/components/withdraw-amount-input.js +13 -0
  268. package/dist/web/components/withdraw-confirmation.js +17 -0
  269. package/dist/web/components/withdraw-destination-input.js +14 -0
  270. package/dist/web/components/withdraw-invoice-info.js +10 -0
  271. package/dist/web/components/withdraw-route-selector.js +9 -0
  272. package/dist/web/components/withdraw-success.js +12 -0
  273. package/dist/web/hooks/use-asset-icon.js +11 -0
  274. package/dist/web/hooks/use-copy-to-clipboard.js +7 -0
  275. package/dist/web/hooks/use-media-query.js +9 -0
  276. package/dist/web/hooks/use-theme-mode.js +9 -0
  277. package/dist/web/hooks/use-toast.js +11 -0
  278. package/dist/web/icons/filled.js +15 -0
  279. package/dist/web/icons/index.js +13 -0
  280. package/dist/web/icons/outlined.js +221 -0
  281. package/dist/web/icons/public.js +248 -0
  282. package/dist/web/icons.cjs +776 -0
  283. package/dist/web/icons.d.cts +123 -0
  284. package/dist/web/icons.d.ts +123 -0
  285. package/dist/web/index.cjs +2573 -2507
  286. package/dist/web/index.d.cts +32 -110
  287. package/dist/web/index.d.ts +32 -110
  288. package/dist/web/index.js +592 -14464
  289. package/dist/web/primitives/avatar.js +10 -0
  290. package/dist/web/primitives/button.js +10 -0
  291. package/dist/web/primitives/card.js +20 -0
  292. package/dist/web/primitives/collapsible.js +16 -0
  293. package/dist/web/primitives/dialog.js +30 -0
  294. package/dist/web/primitives/dot-pagination.js +8 -0
  295. package/dist/web/primitives/drawer.js +43 -0
  296. package/dist/web/primitives/dropdown-menu.js +28 -0
  297. package/dist/web/primitives/glyph-button.js +10 -0
  298. package/dist/web/primitives/icon-button.js +15 -0
  299. package/dist/web/primitives/icon-glyph.js +8 -0
  300. package/dist/web/primitives/icon.js +16 -0
  301. package/dist/web/primitives/input.js +9 -0
  302. package/dist/web/primitives/label.js +9 -0
  303. package/dist/web/primitives/menu-search.js +20 -0
  304. package/dist/web/primitives/number-input.js +11 -0
  305. package/dist/web/primitives/popover.js +18 -0
  306. package/dist/web/primitives/scroll-area.js +12 -0
  307. package/dist/web/primitives/select.js +27 -0
  308. package/dist/web/primitives/switch.js +8 -0
  309. package/dist/web/primitives/table.js +27 -0
  310. package/dist/web/primitives/tabs.js +14 -0
  311. package/dist/web/primitives/toast.js +24 -0
  312. package/dist/web/primitives/toaster.js +15 -0
  313. package/dist/web/primitives/tooltip.js +10 -0
  314. package/dist/web/utils/amount-display.js +13 -0
  315. package/dist/web/utils/cn.js +7 -0
  316. package/dist/web/utils/field-styles.js +7 -0
  317. package/dist/web/utils/type-roles.js +7 -0
  318. package/package.json +9 -1
@@ -0,0 +1,35 @@
1
+ "use client";
2
+ import {
3
+ cn
4
+ } from "./chunk-PMGIJMRO.js";
5
+
6
+ // src/web/primitives/popover.tsx
7
+ import * as React from "react";
8
+ import * as PopoverPrimitive from "@radix-ui/react-popover";
9
+ import { jsx } from "react/jsx-runtime";
10
+ var Popover = PopoverPrimitive.Root;
11
+ var PopoverTrigger = PopoverPrimitive.Trigger;
12
+ var PopoverAnchor = PopoverPrimitive.Anchor;
13
+ var PopoverClose = PopoverPrimitive.Close;
14
+ var floatingSurface = "z-50 rounded-2xl bg-popover bg-gradient-card-hero text-popover-foreground shadow-popover outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0 data-[state=open]:zoom-in-[0.98] data-[state=closed]:zoom-out-[0.98] motion-reduce:animate-none";
15
+ var PopoverContent = React.forwardRef(({ className, align = "center", sideOffset = 6, ...props }, ref) => /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(
16
+ PopoverPrimitive.Content,
17
+ {
18
+ ref,
19
+ "data-slot": "popover-content",
20
+ align,
21
+ sideOffset,
22
+ className: cn(floatingSurface, "w-72 max-w-[calc(100vw-2rem)] p-4 text-caption", className),
23
+ ...props
24
+ }
25
+ ) }));
26
+ PopoverContent.displayName = PopoverPrimitive.Content.displayName;
27
+
28
+ export {
29
+ Popover,
30
+ PopoverTrigger,
31
+ PopoverAnchor,
32
+ PopoverClose,
33
+ floatingSurface,
34
+ PopoverContent
35
+ };
@@ -0,0 +1,417 @@
1
+ "use client";
2
+ import {
3
+ Table,
4
+ TableBody,
5
+ TableCell,
6
+ TableHead,
7
+ TableHeader,
8
+ TableRow
9
+ } from "./chunk-DUAFJ3CX.js";
10
+ import {
11
+ DropdownMenu,
12
+ DropdownMenuContent,
13
+ DropdownMenuItem,
14
+ DropdownMenuTrigger
15
+ } from "./chunk-UHXOPILM.js";
16
+ import {
17
+ FilterChipGroup
18
+ } from "./chunk-HVKSBEZN.js";
19
+ import {
20
+ formatAmount
21
+ } from "./chunk-VM6AGMYO.js";
22
+ import {
23
+ Icon
24
+ } from "./chunk-A6MSV4MA.js";
25
+ import {
26
+ GlyphButton
27
+ } from "./chunk-JY3H7ZAI.js";
28
+ import {
29
+ IconGlyph
30
+ } from "./chunk-YQQ7GDLZ.js";
31
+ import {
32
+ cn
33
+ } from "./chunk-PMGIJMRO.js";
34
+ import {
35
+ BarChart,
36
+ Check,
37
+ Event,
38
+ TableRows,
39
+ Tune
40
+ } from "./chunk-XXH4TYKZ.js";
41
+
42
+ // src/web/components/charts/core.tsx
43
+ import {
44
+ useEffect,
45
+ useLayoutEffect,
46
+ useMemo,
47
+ useRef,
48
+ useState
49
+ } from "react";
50
+
51
+ // src/tokens/chart.ts
52
+ var chartSeries = {
53
+ /** green, violet, azzurro, then yellow, magenta, orange */
54
+ dark: ["#17b581", "#8374da", "#179fd4", "#b3880f", "#db589e", "#de6907"],
55
+ light: ["#17b581", "#6851c3", "#0f9cd0", "#dea805", "#c34189", "#fe904d"]
56
+ };
57
+ var chartSeriesLimit = chartSeries.dark.length;
58
+ var chartScatterSeriesLimit = 3;
59
+
60
+ // src/web/components/charts/core.tsx
61
+ import { jsx, jsxs } from "react/jsx-runtime";
62
+ var seriesColor = (slot) => `var(--series-${slot % chartSeriesLimit + 1})`;
63
+ var defaultChartFormat = (value) => formatAmount(value);
64
+ var TICK_FONT = 11;
65
+ var axisTextWidth = (labels) => Math.max(0, ...labels.map((label) => label.length)) * TICK_FONT * 0.62;
66
+ function chartValueTicks(max, { integer = false } = {}) {
67
+ if (!Number.isFinite(max) || max <= 0) return [0];
68
+ const rough = max / 4;
69
+ const magnitude = 10 ** Math.floor(Math.log10(rough));
70
+ let step = [1, 2, 5, 10].map((m) => m * magnitude).find((s) => s >= rough) ?? 10 * magnitude;
71
+ if (integer) step = Math.max(1, Math.round(step));
72
+ const ticks = [0];
73
+ for (let value = step; value < max - max * 0.15; value += step) {
74
+ ticks.push(Number(value.toPrecision(12)));
75
+ }
76
+ ticks.push(max);
77
+ return ticks;
78
+ }
79
+ function chartLabelIndices(count, maxLabels) {
80
+ if (count <= 0) return [];
81
+ if (count === 1) return [0];
82
+ const slots = Math.max(2, Math.min(count, Math.floor(maxLabels)));
83
+ const indices = /* @__PURE__ */ new Set();
84
+ for (let slot = 0; slot < slots; slot += 1) {
85
+ indices.add(Math.round(slot * (count - 1) / (slots - 1)));
86
+ }
87
+ return [...indices].sort((a, b) => a - b);
88
+ }
89
+ var useIsomorphicLayoutEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
90
+ function useChartWidth(fallback = 640) {
91
+ const ref = useRef(null);
92
+ const [width, setWidth] = useState(fallback);
93
+ useIsomorphicLayoutEffect(() => {
94
+ const element = ref.current;
95
+ if (!element) return;
96
+ const measured = Math.round(element.getBoundingClientRect().width);
97
+ if (measured > 0) setWidth(measured);
98
+ if (typeof ResizeObserver === "undefined") return;
99
+ const observer = new ResizeObserver(([entry]) => {
100
+ const next = Math.round(entry.contentRect.width);
101
+ if (next > 0) setWidth(next);
102
+ });
103
+ observer.observe(element);
104
+ return () => observer.disconnect();
105
+ }, []);
106
+ return [ref, width];
107
+ }
108
+ function ChartLegend({
109
+ items,
110
+ keyShape = "rect",
111
+ hidden,
112
+ onToggle,
113
+ className
114
+ }) {
115
+ const visibleCount = items.filter((item) => !hidden?.has(item.id)).length;
116
+ return /* @__PURE__ */ jsx(
117
+ "ul",
118
+ {
119
+ "data-slot": "chart-legend",
120
+ className: cn("m-0 flex list-none flex-wrap justify-center gap-x-4 gap-y-1 p-0 text-caption text-foreground", className),
121
+ children: items.map((item) => {
122
+ const off = hidden?.has(item.id) ?? false;
123
+ const key = item.swatch ?? /* @__PURE__ */ jsx(LegendSwatch, { color: item.color, shape: keyShape });
124
+ return /* @__PURE__ */ jsx("li", { className: "flex items-center", children: onToggle ? /* @__PURE__ */ jsxs(
125
+ "button",
126
+ {
127
+ type: "button",
128
+ "aria-pressed": !off,
129
+ disabled: !off && visibleCount <= 1,
130
+ title: off ? "Show" : "Hide",
131
+ onClick: () => onToggle(item.id),
132
+ className: cn(
133
+ "flex items-center gap-1.5 rounded-md px-1.5 py-0.5 text-foreground transition-all hover-gradient-violet focus:outline-none focus-visible:ring-2 focus-visible:ring-primary/50 disabled:cursor-default disabled:hover:bg-none",
134
+ off && "opacity-45 line-through"
135
+ ),
136
+ children: [
137
+ key,
138
+ item.label
139
+ ]
140
+ }
141
+ ) : /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5 px-1.5 py-0.5", children: [
142
+ key,
143
+ item.label
144
+ ] }) }, item.id);
145
+ })
146
+ }
147
+ );
148
+ }
149
+ function useSeriesVisibility(ids) {
150
+ const [hidden, setHidden] = useState(() => /* @__PURE__ */ new Set());
151
+ const onToggle = (id) => setHidden((current) => {
152
+ const next = new Set(current);
153
+ if (next.has(id)) next.delete(id);
154
+ else if (ids.filter((other) => !next.has(other)).length > 1) next.add(id);
155
+ return next;
156
+ });
157
+ const hiddenNow = useMemo(() => {
158
+ const kept = new Set(ids.filter((id) => hidden.has(id)));
159
+ return ids.length > 0 && kept.size >= ids.length ? /* @__PURE__ */ new Set() : kept;
160
+ }, [ids, hidden]);
161
+ return {
162
+ isVisible: (id) => !hiddenNow.has(id),
163
+ legend: { hidden: hiddenNow, onToggle }
164
+ };
165
+ }
166
+ function LegendSwatch({ color, shape = "rect" }) {
167
+ return /* @__PURE__ */ jsx("svg", { width: "12", height: "12", "aria-hidden": "true", className: "shrink-0", children: shape === "line" ? /* @__PURE__ */ jsx("line", { x1: "1", x2: "11", y1: "6", y2: "6", stroke: color, strokeWidth: "2", strokeLinecap: "round" }) : shape === "dot" ? /* @__PURE__ */ jsx("circle", { cx: "6", cy: "6", r: "4", fill: color }) : /* @__PURE__ */ jsx("rect", { width: "12", height: "12", rx: "3", fill: color }) });
168
+ }
169
+ function ChartTooltip({
170
+ title,
171
+ rows,
172
+ x,
173
+ y,
174
+ width,
175
+ swatch = "line"
176
+ }) {
177
+ const flip = x > width * 0.6;
178
+ return /* @__PURE__ */ jsxs(
179
+ "div",
180
+ {
181
+ "data-slot": "chart-tooltip",
182
+ role: "presentation",
183
+ className: "pointer-events-none absolute z-10 min-w-32 rounded-xl bg-popover bg-gradient-card-hero px-3 py-2 text-caption text-popover-foreground shadow-popover",
184
+ style: {
185
+ left: flip ? void 0 : x + 12,
186
+ right: flip ? width - x + 12 : void 0,
187
+ top: Math.max(0, y - 8)
188
+ },
189
+ children: [
190
+ /* @__PURE__ */ jsx("div", { className: "mb-1 font-semibold text-foreground", children: title }),
191
+ /* @__PURE__ */ jsx("ul", { className: "m-0 list-none space-y-0.5 p-0", children: rows.map((row) => /* @__PURE__ */ jsxs("li", { className: "flex items-center gap-2 whitespace-nowrap", children: [
192
+ /* @__PURE__ */ jsx(LegendSwatch, { color: row.color, shape: swatch }),
193
+ /* @__PURE__ */ jsx("span", { className: "font-semibold tabular-nums text-foreground", children: row.value }),
194
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: row.label })
195
+ ] }, row.id)) })
196
+ ]
197
+ }
198
+ );
199
+ }
200
+ var tooltipText = (title, rows) => [title, ...rows.map((row) => `${row.value} ${typeof row.label === "string" ? row.label : ""}`.trim())].join(" \xB7 ");
201
+ function nextActiveIndex(key, current, count, { vertical = false } = {}) {
202
+ if (count === 0) return void 0;
203
+ const at = current ?? -1;
204
+ const forward = vertical ? "ArrowDown" : "ArrowRight";
205
+ const back = vertical ? "ArrowUp" : "ArrowLeft";
206
+ switch (key) {
207
+ case forward:
208
+ return Math.min(count - 1, at + 1);
209
+ case back:
210
+ return at < 0 ? count - 1 : Math.max(0, at - 1);
211
+ case "Home":
212
+ return 0;
213
+ case "End":
214
+ return count - 1;
215
+ case "Escape":
216
+ return null;
217
+ default:
218
+ return void 0;
219
+ }
220
+ }
221
+ var viewOptions = [
222
+ { value: "chart", ariaLabel: "Chart", icon: /* @__PURE__ */ jsx(IconGlyph, { glyph: BarChart, size: "sm" }) },
223
+ { value: "table", ariaLabel: "Table", icon: /* @__PURE__ */ jsx(IconGlyph, { glyph: TableRows, size: "sm" }) }
224
+ ];
225
+ var tableOption = viewOptions[1];
226
+ function ChartViewToggle({
227
+ view,
228
+ onChange,
229
+ views,
230
+ chartView,
231
+ onChartViewChange
232
+ }) {
233
+ const options = views && views.length > 0 ? [...views.map((v) => ({ value: v.value, ariaLabel: v.label, icon: /* @__PURE__ */ jsx(Icon, { name: v.icon, size: "sm" }) })), tableOption] : viewOptions;
234
+ const value = view === "table" ? "table" : views && views.length > 0 ? chartView ?? views[0].value : "chart";
235
+ return /* @__PURE__ */ jsx("div", { "data-slot": "chart-view-toggle", className: "shrink-0", children: /* @__PURE__ */ jsx(
236
+ FilterChipGroup,
237
+ {
238
+ variant: "segmented",
239
+ ariaLabel: "View",
240
+ options,
241
+ value,
242
+ onChange: (next) => {
243
+ if (next === "table") return onChange("table");
244
+ onChange("chart");
245
+ if (views && views.length > 0) onChartViewChange?.(next);
246
+ }
247
+ }
248
+ ) });
249
+ }
250
+ function ChartTimeframeMenu({
251
+ timeframes,
252
+ value,
253
+ onChange
254
+ }) {
255
+ const current = timeframes.find((t) => t.value === value) ?? timeframes[0];
256
+ return /* @__PURE__ */ jsx("div", { "data-slot": "chart-timeframe", className: "shrink-0", children: /* @__PURE__ */ jsxs(DropdownMenu, { children: [
257
+ /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx(GlyphButton, { icon: Event, label: `Timeframe: ${current.label}` }) }),
258
+ /* @__PURE__ */ jsx(DropdownMenuContent, { className: "min-w-28", children: timeframes.map((t) => /* @__PURE__ */ jsxs(
259
+ DropdownMenuItem,
260
+ {
261
+ onSelect: () => onChange(t.value),
262
+ icon: /* @__PURE__ */ jsx(IconGlyph, { glyph: Check, className: t.value === current.value ? void 0 : "invisible" }),
263
+ children: [
264
+ t.label,
265
+ t.value === current.value && /* @__PURE__ */ jsx("span", { className: "sr-only", children: " (current)" })
266
+ ]
267
+ },
268
+ t.value
269
+ )) })
270
+ ] }) });
271
+ }
272
+ function ChartFiltersMenu({
273
+ filters,
274
+ active,
275
+ onChange
276
+ }) {
277
+ const on = filters.filter((f) => active.includes(f.value));
278
+ const toggle = (value) => onChange(active.includes(value) ? active.filter((v) => v !== value) : [...active, value]);
279
+ return /* @__PURE__ */ jsx("div", { "data-slot": "chart-filters", className: "shrink-0", children: /* @__PURE__ */ jsxs(DropdownMenu, { children: [
280
+ /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
281
+ GlyphButton,
282
+ {
283
+ icon: Tune,
284
+ variant: on.length > 0 ? "surface" : "quiet",
285
+ label: on.length > 0 ? `Filters: ${on.length} on` : "Filters"
286
+ }
287
+ ) }),
288
+ /* @__PURE__ */ jsx(DropdownMenuContent, { className: "min-w-44", children: filters.map((f) => {
289
+ const checked = active.includes(f.value);
290
+ return /* @__PURE__ */ jsx(
291
+ DropdownMenuItem,
292
+ {
293
+ role: "menuitemcheckbox",
294
+ "aria-checked": checked,
295
+ onSelect: (event) => {
296
+ event.preventDefault();
297
+ toggle(f.value);
298
+ },
299
+ icon: /* @__PURE__ */ jsx(IconGlyph, { glyph: Check, className: checked ? void 0 : "invisible" }),
300
+ children: f.label
301
+ },
302
+ f.value
303
+ );
304
+ }) })
305
+ ] }) });
306
+ }
307
+ function ChartHeader({
308
+ title,
309
+ description,
310
+ timeframes,
311
+ timeframe,
312
+ onTimeframeChange,
313
+ filters,
314
+ activeFilters,
315
+ onFiltersChange,
316
+ view,
317
+ onViewChange,
318
+ views,
319
+ chartView,
320
+ onChartViewChange
321
+ }) {
322
+ const showTimeframes = timeframes && timeframes.length > 0 && onTimeframeChange;
323
+ const showFilters = filters && filters.length > 0 && onFiltersChange;
324
+ const hasText = Boolean(title || description);
325
+ return /* @__PURE__ */ jsxs(
326
+ "div",
327
+ {
328
+ "data-slot": "chart-header",
329
+ className: cn("flex flex-wrap items-start gap-x-4 gap-y-2", hasText ? "justify-between" : "justify-end"),
330
+ children: [
331
+ hasText && /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-col gap-1", children: [
332
+ title && /* @__PURE__ */ jsx("h3", { className: "m-0 text-subhead font-semibold leading-none tracking-tight text-foreground", children: title }),
333
+ description && /* @__PURE__ */ jsx("p", { className: "m-0 text-caption text-muted-foreground", children: description })
334
+ ] }),
335
+ /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [
336
+ (showTimeframes || showFilters) && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-0.5", children: [
337
+ showFilters && /* @__PURE__ */ jsx(ChartFiltersMenu, { filters, active: activeFilters ?? [], onChange: onFiltersChange }),
338
+ showTimeframes && /* @__PURE__ */ jsx(
339
+ ChartTimeframeMenu,
340
+ {
341
+ timeframes,
342
+ value: timeframe ?? timeframes[0].value,
343
+ onChange: onTimeframeChange
344
+ }
345
+ )
346
+ ] }),
347
+ /* @__PURE__ */ jsx(
348
+ ChartViewToggle,
349
+ {
350
+ view,
351
+ onChange: onViewChange,
352
+ views,
353
+ chartView,
354
+ onChartViewChange
355
+ }
356
+ )
357
+ ] })
358
+ ]
359
+ }
360
+ );
361
+ }
362
+ function ChartLegendRow({ children }) {
363
+ return /* @__PURE__ */ jsx("div", { "data-slot": "chart-legend-row", children });
364
+ }
365
+ function ChartDataTable({ label, table }) {
366
+ return /* @__PURE__ */ jsxs(Table, { children: [
367
+ /* @__PURE__ */ jsx("caption", { className: "sr-only", children: label }),
368
+ /* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsx(TableRow, { children: table.columns.map((column, index) => /* @__PURE__ */ jsx(TableHead, { className: index > 0 ? "text-right" : void 0, children: column }, index)) }) }),
369
+ /* @__PURE__ */ jsx(TableBody, { children: table.rows.map((row, rowIndex) => /* @__PURE__ */ jsx(TableRow, { children: row.map((cell, cellIndex) => /* @__PURE__ */ jsx(TableCell, { className: cellIndex > 0 ? "text-right tabular-nums" : void 0, children: cell }, cellIndex)) }, rowIndex)) })
370
+ ] });
371
+ }
372
+ function ChartFrame({
373
+ label,
374
+ scale,
375
+ legend,
376
+ table,
377
+ announcement,
378
+ children,
379
+ className,
380
+ ...head
381
+ }) {
382
+ const [view, setView] = useState("chart");
383
+ return /* @__PURE__ */ jsxs("figure", { "data-slot": "chart", "aria-label": label, className: cn("m-0 min-w-0 space-y-3", className), children: [
384
+ scale && /* @__PURE__ */ jsx("p", { "data-slot": "chart-scale", className: "sr-only", children: scale }),
385
+ /* @__PURE__ */ jsx(ChartHeader, { ...head, view, onViewChange: setView }),
386
+ view === "chart" ? children : /* @__PURE__ */ jsx(ChartDataTable, { label, table }),
387
+ view === "chart" && legend && /* @__PURE__ */ jsx(ChartLegendRow, { children: legend }),
388
+ /* @__PURE__ */ jsx("p", { "aria-live": "polite", className: "sr-only", children: announcement ?? "" })
389
+ ] });
390
+ }
391
+ 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";
392
+
393
+ export {
394
+ chartSeriesLimit,
395
+ chartScatterSeriesLimit,
396
+ seriesColor,
397
+ defaultChartFormat,
398
+ TICK_FONT,
399
+ axisTextWidth,
400
+ chartValueTicks,
401
+ chartLabelIndices,
402
+ useChartWidth,
403
+ ChartLegend,
404
+ useSeriesVisibility,
405
+ LegendSwatch,
406
+ ChartTooltip,
407
+ tooltipText,
408
+ nextActiveIndex,
409
+ ChartViewToggle,
410
+ ChartTimeframeMenu,
411
+ ChartFiltersMenu,
412
+ ChartHeader,
413
+ ChartLegendRow,
414
+ ChartDataTable,
415
+ ChartFrame,
416
+ plotClass
417
+ };
@@ -0,0 +1,20 @@
1
+ "use client";
2
+ import {
3
+ cn
4
+ } from "./chunk-PMGIJMRO.js";
5
+
6
+ // src/web/components/dotted-leader.tsx
7
+ import { jsx } from "react/jsx-runtime";
8
+ function DottedLeader({ className }) {
9
+ return /* @__PURE__ */ jsx(
10
+ "span",
11
+ {
12
+ "aria-hidden": true,
13
+ className: cn("min-w-4 flex-1 self-center border-b border-solid border-foreground/15", className)
14
+ }
15
+ );
16
+ }
17
+
18
+ export {
19
+ DottedLeader
20
+ };
@@ -0,0 +1,43 @@
1
+ "use client";
2
+ import {
3
+ CopyButton
4
+ } from "./chunk-GEXPB5CG.js";
5
+ import {
6
+ HorizontalScrollArea
7
+ } from "./chunk-DCUAE6PX.js";
8
+ import {
9
+ eyebrow
10
+ } from "./chunk-MTQOAMDW.js";
11
+ import {
12
+ cn
13
+ } from "./chunk-PMGIJMRO.js";
14
+
15
+ // src/web/components/code-block.tsx
16
+ import { jsx, jsxs } from "react/jsx-runtime";
17
+ function CodeBlock({ code, label = "code", language, className }) {
18
+ return /* @__PURE__ */ jsxs(
19
+ "figure",
20
+ {
21
+ "data-slot": "code-block",
22
+ "aria-label": label,
23
+ 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),
24
+ children: [
25
+ language && /* @__PURE__ */ jsx("figcaption", { className: cn("px-4 pt-3 text-muted-foreground", eyebrow), children: language }),
26
+ /* @__PURE__ */ jsx("div", { className: "absolute right-2 top-2", children: /* @__PURE__ */ jsx(CopyButton, { value: code, label }) }),
27
+ /* @__PURE__ */ jsx(
28
+ HorizontalScrollArea,
29
+ {
30
+ className: "my-4 ml-4 mr-12",
31
+ viewportAs: "pre",
32
+ viewportClassName: "m-0 pb-3 font-mono text-caption text-foreground",
33
+ children: /* @__PURE__ */ jsx("code", { children: code })
34
+ }
35
+ )
36
+ ]
37
+ }
38
+ );
39
+ }
40
+
41
+ export {
42
+ CodeBlock
43
+ };
@@ -0,0 +1,41 @@
1
+ "use client";
2
+ import {
3
+ networkChipVars
4
+ } from "./chunk-EBQ35SOM.js";
5
+ import {
6
+ cn
7
+ } from "./chunk-PMGIJMRO.js";
8
+
9
+ // src/web/components/network-status-chip.tsx
10
+ import { jsx, jsxs } from "react/jsx-runtime";
11
+ function NetworkStatusChip({
12
+ icon,
13
+ network,
14
+ dotClassName,
15
+ onClick,
16
+ ariaLabel,
17
+ className
18
+ }) {
19
+ return /* @__PURE__ */ jsxs(
20
+ "button",
21
+ {
22
+ type: "button",
23
+ onClick,
24
+ "aria-label": ariaLabel,
25
+ className: cn(
26
+ "inline-flex items-center gap-1.5 rounded-full px-1.5 py-1 shadow-raised transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50",
27
+ network ? "kui-network-chip" : "bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card hover:bg-accent hover:shadow-glow-violet-soft",
28
+ className
29
+ ),
30
+ style: network ? networkChipVars(network) : void 0,
31
+ children: [
32
+ /* @__PURE__ */ jsx("span", { className: "shrink-0", children: icon }),
33
+ dotClassName && /* @__PURE__ */ jsx("span", { className: cn("size-2 rounded-full", dotClassName) })
34
+ ]
35
+ }
36
+ );
37
+ }
38
+
39
+ export {
40
+ NetworkStatusChip
41
+ };
@@ -0,0 +1,31 @@
1
+ "use client";
2
+ import {
3
+ Icon
4
+ } from "./chunk-A6MSV4MA.js";
5
+ import {
6
+ cn
7
+ } from "./chunk-PMGIJMRO.js";
8
+
9
+ // src/web/components/status-icon-badge.tsx
10
+ import { jsx, jsxs } from "react/jsx-runtime";
11
+ var STATUS_UI = {
12
+ completed: { icon: "check", className: "bg-primary bg-gradient-primary text-primary-foreground" },
13
+ success: { icon: "check", className: "bg-primary bg-gradient-primary text-primary-foreground" },
14
+ failed: { icon: "close", className: "bg-danger text-white" },
15
+ error: { icon: "close", className: "bg-danger text-white" },
16
+ pending: { icon: "schedule", className: "bg-warning text-background" }
17
+ };
18
+ var FALLBACK_UI = { icon: "remove", className: "bg-muted text-muted-foreground" };
19
+ var iconBadgeOverlayClass = "absolute -bottom-0.5 -right-0.5 flex size-4 items-center justify-center rounded-full ring-2 ring-card";
20
+ function StatusIconBadge({ icon, status, className }) {
21
+ const ui = status ? STATUS_UI[status] ?? FALLBACK_UI : null;
22
+ return /* @__PURE__ */ jsxs("div", { className: cn("relative shrink-0", className), children: [
23
+ icon,
24
+ ui && /* @__PURE__ */ jsx("span", { className: cn(iconBadgeOverlayClass, ui.className), children: /* @__PURE__ */ jsx(Icon, { name: ui.icon, className: "size-3" }) })
25
+ ] });
26
+ }
27
+
28
+ export {
29
+ iconBadgeOverlayClass,
30
+ StatusIconBadge
31
+ };
@@ -0,0 +1,96 @@
1
+ "use client";
2
+ import {
3
+ GlyphButton
4
+ } from "./chunk-JY3H7ZAI.js";
5
+ import {
6
+ cn
7
+ } from "./chunk-PMGIJMRO.js";
8
+ import {
9
+ Close
10
+ } from "./chunk-XXH4TYKZ.js";
11
+
12
+ // src/web/primitives/dialog.tsx
13
+ import * as React from "react";
14
+ import * as DialogPrimitive from "@radix-ui/react-dialog";
15
+ import { jsx, jsxs } from "react/jsx-runtime";
16
+ var Dialog = DialogPrimitive.Root;
17
+ var DialogTrigger = DialogPrimitive.Trigger;
18
+ var DialogPortal = DialogPrimitive.Portal;
19
+ var DialogClose = DialogPrimitive.Close;
20
+ var DialogOverlay = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
21
+ DialogPrimitive.Overlay,
22
+ {
23
+ ref,
24
+ className: cn(
25
+ "fixed inset-0 z-50 bg-background/80 bg-page-radial backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
26
+ className
27
+ ),
28
+ ...props
29
+ }
30
+ ));
31
+ DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
32
+ var DialogContent = React.forwardRef(({ className, children, showClose = true, ...props }, ref) => /* @__PURE__ */ jsxs(DialogPortal, { children: [
33
+ /* @__PURE__ */ jsx(DialogOverlay, {}),
34
+ /* @__PURE__ */ jsxs(
35
+ DialogPrimitive.Content,
36
+ {
37
+ ref,
38
+ className: cn(
39
+ // True-center with ZERO positional animation. The -50%/-50% centering
40
+ // lives on the CSS `translate` property ([translate:-50%_-50%]), NOT
41
+ // on `transform` — the tailwindcss-animate keyframes override the
42
+ // whole `transform` property while animating, so any transform-based
43
+ // centering (translate-x-[-50%] + slide-in-from-left-1/2) gets
44
+ // re-interpolated per frame and reads as a drift from the left.
45
+ // With centering out of `transform`, the entrance/exit is purely a
46
+ // fast fade + 0.98↔1 zoom (150ms ease-out) around the dialog's own
47
+ // center. No slide-in/out utilities may ever be added back here.
48
+ // (BottomSheet owns its own slide-up; it does not use this.)
49
+ // Its one edge is the popover shadow's hairline.
50
+ "fixed left-1/2 top-1/2 z-50 grid w-full max-w-sm [translate:-50%_-50%] gap-4 rounded-2xl bg-card bg-gradient-card-hero p-6 shadow-popover duration-150 ease-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0 data-[state=open]:zoom-in-[0.98] data-[state=closed]:zoom-out-[0.98]",
51
+ className
52
+ ),
53
+ ...props,
54
+ children: [
55
+ children,
56
+ showClose && /* @__PURE__ */ jsx(DialogPrimitive.Close, { asChild: true, children: /* @__PURE__ */ jsx(GlyphButton, { icon: Close, label: "Close", size: "sm", className: "absolute right-3 top-3" }) })
57
+ ]
58
+ }
59
+ )
60
+ ] }));
61
+ DialogContent.displayName = DialogPrimitive.Content.displayName;
62
+ var DialogHeader = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("flex flex-col space-y-1.5 text-center sm:text-left", className), ...props });
63
+ DialogHeader.displayName = "DialogHeader";
64
+ var DialogFooter = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("flex flex-col-reverse gap-2 sm:flex-row sm:justify-between", className), ...props });
65
+ DialogFooter.displayName = "DialogFooter";
66
+ var DialogTitle = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
67
+ DialogPrimitive.Title,
68
+ {
69
+ ref,
70
+ className: cn("text-subhead font-semibold leading-none tracking-tight", className),
71
+ ...props
72
+ }
73
+ ));
74
+ DialogTitle.displayName = DialogPrimitive.Title.displayName;
75
+ var DialogDescription = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
76
+ DialogPrimitive.Description,
77
+ {
78
+ ref,
79
+ className: cn("text-caption text-muted-foreground", className),
80
+ ...props
81
+ }
82
+ ));
83
+ DialogDescription.displayName = DialogPrimitive.Description.displayName;
84
+
85
+ export {
86
+ Dialog,
87
+ DialogTrigger,
88
+ DialogPortal,
89
+ DialogClose,
90
+ DialogOverlay,
91
+ DialogContent,
92
+ DialogHeader,
93
+ DialogFooter,
94
+ DialogTitle,
95
+ DialogDescription
96
+ };