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,230 @@
1
+ "use client";
2
+ import {
3
+ Label
4
+ } from "./chunk-H3GYLFHP.js";
5
+ import {
6
+ AlertBanner
7
+ } from "./chunk-ZTVV4KBT.js";
8
+ import {
9
+ eyebrow
10
+ } from "./chunk-MTQOAMDW.js";
11
+ import {
12
+ Button
13
+ } from "./chunk-OWSKP527.js";
14
+ import {
15
+ IconGlyph
16
+ } from "./chunk-YQQ7GDLZ.js";
17
+ import {
18
+ cn
19
+ } from "./chunk-PMGIJMRO.js";
20
+ import {
21
+ AddCircle,
22
+ ProgressActivity,
23
+ QrCode_2
24
+ } from "./chunk-XXH4TYKZ.js";
25
+
26
+ // src/web/components/deposit-pre-generation.tsx
27
+ import { useId } from "react";
28
+ import { jsx, jsxs } from "react/jsx-runtime";
29
+ var ACCOUNT_TITLES = {
30
+ RGB: "RGB & Lightning",
31
+ SPARK: "Spark",
32
+ ARKADE: "Arkade",
33
+ LIQUID: "Liquid"
34
+ };
35
+ var METHOD_META = {
36
+ bitcoin_l1: { label: "Bitcoin address", summary: "Standard on-chain BTC transfer." },
37
+ lightning: { label: "Lightning invoice", summary: "Fast payment over Lightning." },
38
+ spark: { label: "Spark transfer", summary: "Funds land directly in the Spark account." },
39
+ arkade: { label: "Arkade transfer", summary: "Funds land directly in the Arkade account." },
40
+ boarding: { label: "Boarding", summary: "Send on-chain BTC into Arkade." },
41
+ submarine_swap: {
42
+ label: "LN via swap",
43
+ summary: "Uses Arkade as the source account and bridges to Lightning."
44
+ }
45
+ };
46
+ function DepositPreGeneration({
47
+ selectedAsset,
48
+ isBtc,
49
+ network,
50
+ net,
51
+ selectedAccount,
52
+ currentMethod,
53
+ channelsLoading,
54
+ showChannelWarning,
55
+ showLiquidityWarning,
56
+ isAutoGenerate,
57
+ loading,
58
+ usePrivacy,
59
+ setUsePrivacy,
60
+ amount,
61
+ handleAmountChange,
62
+ getUnitLabel,
63
+ generateInvoice,
64
+ needsColorableUtxos = false,
65
+ onOpenCreateUtxos,
66
+ showReceiveSummary = true,
67
+ isNewRgbAsset = false,
68
+ newAssetId = "",
69
+ setNewAssetId,
70
+ colorableUtxoCount
71
+ }) {
72
+ const assetIdInputId = useId();
73
+ const amountId = useId();
74
+ const method = METHOD_META[currentMethod];
75
+ const isRgbOnchain = network === "onchain" && !isBtc;
76
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
77
+ showReceiveSummary && /* @__PURE__ */ jsxs("div", { className: "rounded-2xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card p-3 shadow-card", children: [
78
+ /* @__PURE__ */ jsx("p", { className: cn("text-muted-foreground", eyebrow), children: "Receive Summary" }),
79
+ /* @__PURE__ */ jsxs("div", { className: "mt-2 grid grid-cols-1 gap-2 text-caption", children: [
80
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3", children: [
81
+ /* @__PURE__ */ jsx("span", { className: "text-foreground/55", children: "Asset" }),
82
+ /* @__PURE__ */ jsx("span", { className: "font-bold text-foreground", children: selectedAsset?.ticker ?? (isBtc ? "BTC" : "Asset") })
83
+ ] }),
84
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3", children: [
85
+ /* @__PURE__ */ jsx("span", { className: "text-foreground/55", children: "Destination account" }),
86
+ /* @__PURE__ */ jsx("span", { className: "font-bold text-foreground", children: ACCOUNT_TITLES[selectedAccount] })
87
+ ] }),
88
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3", children: [
89
+ /* @__PURE__ */ jsx("span", { className: "text-foreground/55", children: "Transfer method" }),
90
+ /* @__PURE__ */ jsx("span", { className: "font-bold text-foreground", children: method.label })
91
+ ] }),
92
+ /* @__PURE__ */ jsx("p", { className: "text-tiny text-foreground/55", children: method.summary })
93
+ ] })
94
+ ] }),
95
+ channelsLoading && selectedAccount === "RGB" && currentMethod === "lightning" && !isBtc && /* @__PURE__ */ 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: [
96
+ /* @__PURE__ */ jsx(IconGlyph, { glyph: ProgressActivity, className: "animate-spin text-icon-lg text-secondary-content" }),
97
+ /* @__PURE__ */ jsx("span", { className: "text-caption font-medium text-foreground/60", children: "Checking channel availability..." })
98
+ ] }),
99
+ showChannelWarning && /* @__PURE__ */ jsxs(AlertBanner, { variant: "warning", children: [
100
+ /* @__PURE__ */ jsx("p", { className: "mb-0.5 text-caption font-bold text-warning-fg", children: "No Lightning Channels" }),
101
+ /* @__PURE__ */ jsx("p", { className: "text-tiny text-warning-fg/70", children: "Only on-chain deposits are available." })
102
+ ] }),
103
+ showLiquidityWarning && /* @__PURE__ */ jsxs(AlertBanner, { variant: "warning", children: [
104
+ /* @__PURE__ */ jsx("p", { className: "mb-0.5 text-caption font-bold text-warning-fg", children: "No Inbound Liquidity" }),
105
+ /* @__PURE__ */ jsxs("p", { className: "text-tiny text-warning-fg/70", children: [
106
+ "No channels with inbound capacity for ",
107
+ selectedAsset?.ticker ?? "this asset",
108
+ "."
109
+ ] })
110
+ ] }),
111
+ isAutoGenerate && loading && /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-4 py-10", children: [
112
+ /* @__PURE__ */ jsx("div", { className: cn("flex size-16 items-center justify-center rounded-2xl shadow-raised", net.bg), children: /* @__PURE__ */ jsx(IconGlyph, { glyph: ProgressActivity, className: cn("animate-spin text-icon-4xl", net.text) }) }),
113
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1 text-center", children: [
114
+ /* @__PURE__ */ jsxs("p", { className: "text-caption font-bold text-muted-foreground", children: [
115
+ "Generating ",
116
+ network === "lightning" ? "invoice" : "address",
117
+ "..."
118
+ ] }),
119
+ /* @__PURE__ */ jsxs("p", { className: "text-caption text-foreground/55", children: [
120
+ net.label,
121
+ " network"
122
+ ] })
123
+ ] })
124
+ ] }),
125
+ isRgbOnchain && isNewRgbAsset && setNewAssetId && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
126
+ /* @__PURE__ */ jsx(Label, { htmlFor: assetIdInputId, children: "RGB Asset ID - Optional" }),
127
+ /* @__PURE__ */ jsx(
128
+ "input",
129
+ {
130
+ id: assetIdInputId,
131
+ type: "text",
132
+ value: newAssetId,
133
+ onChange: (event) => setNewAssetId(event.target.value),
134
+ placeholder: "rgb:... (leave empty for any asset)",
135
+ spellCheck: false,
136
+ autoCapitalize: "off",
137
+ 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"
138
+ }
139
+ ),
140
+ /* @__PURE__ */ 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." })
141
+ ] }),
142
+ isRgbOnchain && /* @__PURE__ */ 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: [
143
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3", children: [
144
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
145
+ /* @__PURE__ */ jsx("h4", { className: "text-caption font-bold text-foreground", children: usePrivacy ? "Blinded receive" : "Witness receive" }),
146
+ /* @__PURE__ */ jsx("p", { className: "mt-0.5 text-xxs text-muted-foreground", children: usePrivacy ? "Private - recommended" : "Simpler - less private" })
147
+ ] }),
148
+ /* @__PURE__ */ jsx(
149
+ "button",
150
+ {
151
+ type: "button",
152
+ "aria-label": "Toggle blinded (private) receive",
153
+ className: cn(
154
+ "relative inline-flex h-5 w-9 flex-shrink-0 items-center rounded-full shadow-inner transition-colors",
155
+ usePrivacy ? "bg-primary bg-gradient-primary shadow-glow-primary-soft" : "bg-foreground/10"
156
+ ),
157
+ onClick: () => setUsePrivacy(!usePrivacy),
158
+ children: /* @__PURE__ */ jsx(
159
+ "span",
160
+ {
161
+ className: cn(
162
+ "inline-block h-3.5 w-3.5 rounded-full shadow-md transition-all",
163
+ usePrivacy ? "translate-x-5 bg-black" : "translate-x-0.5 bg-foreground/80"
164
+ )
165
+ }
166
+ )
167
+ }
168
+ )
169
+ ] }),
170
+ /* @__PURE__ */ 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." }),
171
+ usePrivacy && colorableUtxoCount !== void 0 && /* @__PURE__ */ jsxs(
172
+ "div",
173
+ {
174
+ className: cn(
175
+ "flex items-center justify-between rounded-lg px-2.5 py-1.5 text-xxs",
176
+ colorableUtxoCount > 0 ? "bg-success/10 text-success-fg/80" : "bg-warning/10 text-warning-fg/80"
177
+ ),
178
+ children: [
179
+ /* @__PURE__ */ jsx("span", { className: "font-medium", children: "Available colorable UTXOs" }),
180
+ /* @__PURE__ */ jsx("span", { className: "font-bold tabular-nums", children: colorableUtxoCount })
181
+ ]
182
+ }
183
+ ),
184
+ usePrivacy && colorableUtxoCount === 0 && /* @__PURE__ */ 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." })
185
+ ] }),
186
+ network === "onchain" && !isBtc && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
187
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
188
+ /* @__PURE__ */ jsxs(Label, { htmlFor: amountId, children: [
189
+ "Amount (",
190
+ getUnitLabel(),
191
+ ") - Optional"
192
+ ] }),
193
+ selectedAsset && /* @__PURE__ */ jsxs("span", { className: "text-xxs text-foreground/55", children: [
194
+ selectedAsset.precision ?? 0,
195
+ " decimals"
196
+ ] })
197
+ ] }),
198
+ /* @__PURE__ */ jsx(
199
+ "input",
200
+ {
201
+ id: amountId,
202
+ type: "text",
203
+ value: amount,
204
+ onChange: handleAmountChange,
205
+ placeholder: `e.g. 10.00 ${selectedAsset?.ticker ?? ""}`,
206
+ 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 font-bold text-foreground shadow-inner transition-all placeholder:text-muted-foreground focus:ring-primary/50 focus:shadow-glow-primary-soft focus:outline-none",
207
+ inputMode: "decimal"
208
+ }
209
+ )
210
+ ] }),
211
+ needsColorableUtxos && /* @__PURE__ */ jsxs(AlertBanner, { variant: "warning", children: [
212
+ /* @__PURE__ */ jsx("p", { className: "mb-0.5 text-caption font-bold text-warning-fg", children: "Colorable UTXOs Required" }),
213
+ /* @__PURE__ */ 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." })
214
+ ] }),
215
+ !isAutoGenerate && ((needsColorableUtxos || isRgbOnchain && usePrivacy && colorableUtxoCount === 0) && onOpenCreateUtxos ? /* @__PURE__ */ jsx(Button, { variant: "cta", size: "cta", onClick: onOpenCreateUtxos, disabled: loading, children: /* @__PURE__ */ jsxs("span", { className: "flex items-center justify-center gap-2", children: [
216
+ /* @__PURE__ */ jsx(IconGlyph, { glyph: AddCircle, className: "text-icon-md" }),
217
+ "Create Colorable UTXOs"
218
+ ] }) }) : /* @__PURE__ */ jsx(Button, { variant: "cta", size: "cta", onClick: generateInvoice, disabled: loading, children: loading ? /* @__PURE__ */ jsxs("span", { className: "flex items-center justify-center gap-2", children: [
219
+ /* @__PURE__ */ jsx(IconGlyph, { glyph: ProgressActivity, className: "animate-spin text-icon-md" }),
220
+ "Generating..."
221
+ ] }) : /* @__PURE__ */ jsxs("span", { className: "flex items-center justify-center gap-2", children: [
222
+ /* @__PURE__ */ jsx(IconGlyph, { glyph: QrCode_2, className: "text-icon-md" }),
223
+ "Generate Address"
224
+ ] }) }))
225
+ ] });
226
+ }
227
+
228
+ export {
229
+ DepositPreGeneration
230
+ };
@@ -0,0 +1,35 @@
1
+ "use client";
2
+ import {
3
+ cn
4
+ } from "./chunk-PMGIJMRO.js";
5
+
6
+ // src/web/components/list-summary.tsx
7
+ import { jsxs } from "react/jsx-runtime";
8
+ var count = (n, noun) => `${n} ${n === 1 ? noun.replace(/s$/, "") : noun}`;
9
+ function ListSummary({
10
+ noun,
11
+ shown,
12
+ offset,
13
+ total,
14
+ filtersActive = false,
15
+ noTotalNote = ", narrowed by the filters above. The API does not report how many exist in all.",
16
+ className,
17
+ ...rest
18
+ }) {
19
+ let text;
20
+ if (total !== void 0) {
21
+ text = filtersActive ? `Showing ${shown} of ${count(total, noun)}` : count(total, noun);
22
+ } else if (offset !== void 0 && shown > 0) {
23
+ text = `Showing ${noun} ${offset + 1}\u2013${offset + shown}`;
24
+ } else {
25
+ text = `Showing ${count(shown, noun)}`;
26
+ }
27
+ return /* @__PURE__ */ jsxs("p", { "data-slot": "list-summary", className: cn("m-0 text-caption tabular-nums text-muted-foreground", className), ...rest, children: [
28
+ text,
29
+ filtersActive && total === void 0 ? noTotalNote : ""
30
+ ] });
31
+ }
32
+
33
+ export {
34
+ ListSummary
35
+ };
@@ -0,0 +1,220 @@
1
+ "use client";
2
+ import {
3
+ ChartFrame,
4
+ ChartLegend,
5
+ ChartTooltip,
6
+ TICK_FONT,
7
+ axisTextWidth,
8
+ chartLabelIndices,
9
+ chartValueTicks,
10
+ defaultChartFormat,
11
+ nextActiveIndex,
12
+ plotClass,
13
+ seriesColor,
14
+ tooltipText,
15
+ useChartWidth,
16
+ useSeriesVisibility
17
+ } from "./chunk-CXLGQSHM.js";
18
+
19
+ // src/web/components/charts/bar-chart.tsx
20
+ import { useState } from "react";
21
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
22
+ var MAX_BAR = 24;
23
+ var GAP = 2;
24
+ var RADIUS = 4;
25
+ function barPath(x, y, w, h, end) {
26
+ const r = Math.min(RADIUS, w / 2, h / 2);
27
+ if (end === "none" || r <= 0) return `M${x},${y}h${w}v${h}h${-w}Z`;
28
+ if (end === "top") {
29
+ return `M${x},${y + h}V${y + r}Q${x},${y} ${x + r},${y}H${x + w - r}Q${x + w},${y} ${x + w},${y + r}V${y + h}Z`;
30
+ }
31
+ return `M${x},${y}H${x + w - r}Q${x + w},${y} ${x + w},${y + r}V${y + h - r}Q${x + w},${y + h} ${x + w - r},${y + h}H${x}Z`;
32
+ }
33
+ function BarChart({
34
+ data,
35
+ series: allSeries,
36
+ label,
37
+ scaleLabel,
38
+ layout = "grouped",
39
+ orientation = "vertical",
40
+ integer = false,
41
+ formatValue = defaultChartFormat,
42
+ height = 240,
43
+ empty,
44
+ className,
45
+ ...head
46
+ }) {
47
+ const [containerRef, width] = useChartWidth();
48
+ const [active, setActive] = useState(null);
49
+ const visibility = useSeriesVisibility(allSeries.map((s) => s.id));
50
+ const series = allSeries.filter((s) => visibility.isVisible(s.id));
51
+ const slotOf = (id) => allSeries.findIndex((s) => s.id === id);
52
+ const count = data.length;
53
+ if (count === 0 || series.length === 0) return /* @__PURE__ */ jsx(Fragment, { children: empty ?? null });
54
+ const stacked = layout === "stacked";
55
+ const horizontal = orientation === "horizontal";
56
+ const totals = data.map((d) => series.reduce((sum, s) => sum + Math.max(0, d.values[s.id] ?? 0), 0));
57
+ const max = stacked ? Math.max(0, ...totals) : Math.max(0, ...data.flatMap((d) => series.map((s) => d.values[s.id] ?? 0)));
58
+ const ticks = chartValueTicks(max, { integer });
59
+ const tickLabels = ticks.map(formatValue);
60
+ const top = max > 0 ? max : 1;
61
+ const rowHeight = stacked ? 36 : Math.max(36, series.length * (MAX_BAR / 1.5 + GAP) + 16);
62
+ const svgHeight = horizontal ? count * rowHeight + 28 : height;
63
+ const categoryLabelWidth = horizontal ? Math.min(160, axisTextWidth(data.map((d) => d.label)) + 12) : 0;
64
+ const margin = horizontal ? { top: 4, right: 16, bottom: 24, left: categoryLabelWidth } : { top: 12, right: 12, bottom: 26, left: axisTextWidth(tickLabels) + 16 };
65
+ const plotLeft = margin.left;
66
+ const plotRight = width - margin.right;
67
+ const plotTop = margin.top;
68
+ const plotBottom = svgHeight - margin.bottom;
69
+ const plotWidth = Math.max(1, plotRight - plotLeft);
70
+ const plotHeight = Math.max(1, plotBottom - plotTop);
71
+ const bandSize = (horizontal ? plotHeight : plotWidth) / count;
72
+ const valueLength = horizontal ? plotWidth : plotHeight;
73
+ const scale = (value) => Math.max(0, value) / top * valueLength;
74
+ const groupCount = stacked ? 1 : series.length;
75
+ const barThickness = Math.max(2, Math.min(MAX_BAR, (bandSize * 0.7 - GAP * (groupCount - 1)) / groupCount));
76
+ const groupThickness = barThickness * groupCount + GAP * (groupCount - 1);
77
+ const rowsAt = (index) => series.map((s, slot) => ({
78
+ id: s.id,
79
+ label: s.label,
80
+ value: formatValue(data[index].values[s.id] ?? 0),
81
+ color: seriesColor(slotOf(s.id))
82
+ }));
83
+ const onKeyDown = (event) => {
84
+ if (nextActiveIndex(event.key, active, count, { vertical: horizontal }) === void 0) return;
85
+ event.preventDefault();
86
+ setActive((current) => {
87
+ const next = nextActiveIndex(event.key, current, count, { vertical: horizontal });
88
+ return next === void 0 ? current : next;
89
+ });
90
+ };
91
+ const bars = data.map((d, index) => {
92
+ const bandStart = (horizontal ? plotTop : plotLeft) + index * bandSize;
93
+ const groupStart = bandStart + (bandSize - groupThickness) / 2;
94
+ const marks = [];
95
+ let stackBase = 0;
96
+ series.forEach((s, slot) => {
97
+ const value = Math.max(0, d.values[s.id] ?? 0);
98
+ if (value <= 0) return;
99
+ const length = scale(value);
100
+ const offset = stacked ? scale(stackBase) : 0;
101
+ stackBase += value;
102
+ const isLastInStack = !stacked || series.slice(slot + 1).every((next) => (d.values[next.id] ?? 0) <= 0);
103
+ const across = stacked ? groupStart : groupStart + slot * (barThickness + GAP);
104
+ const seam = stacked && offset > 0 ? GAP : 0;
105
+ 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");
106
+ marks.push(/* @__PURE__ */ jsx("path", { "data-series": s.id, d: path, fill: seriesColor(slotOf(s.id)) }, s.id));
107
+ });
108
+ return /* @__PURE__ */ jsxs("g", { "data-category": d.key, opacity: active !== null && active !== index ? 0.55 : 1, children: [
109
+ marks,
110
+ /* @__PURE__ */ jsx(
111
+ "rect",
112
+ {
113
+ x: horizontal ? plotLeft : bandStart,
114
+ y: horizontal ? bandStart : plotTop,
115
+ width: horizontal ? plotWidth : bandSize,
116
+ height: horizontal ? bandSize : plotHeight,
117
+ fill: "transparent",
118
+ onPointerEnter: () => setActive(index)
119
+ }
120
+ )
121
+ ] }, d.key);
122
+ });
123
+ const labelIndices = horizontal ? data.map((_, index) => index) : chartLabelIndices(count, plotWidth / 56);
124
+ const activeDatum = active === null ? null : data[active];
125
+ 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 };
126
+ return /* @__PURE__ */ jsx(
127
+ ChartFrame,
128
+ {
129
+ ...head,
130
+ label,
131
+ className,
132
+ scale: `${scaleLabel} \xB7 linear, from 0`,
133
+ legend: allSeries.length > 1 ? /* @__PURE__ */ jsx(
134
+ ChartLegend,
135
+ {
136
+ items: allSeries.map((s, slot) => ({ id: s.id, label: s.label, color: seriesColor(slot) })),
137
+ ...visibility.legend
138
+ }
139
+ ) : void 0,
140
+ table: {
141
+ columns: [
142
+ horizontal ? "Category" : "Period",
143
+ ...series.map((s) => s.label),
144
+ ...stacked && series.length > 1 ? ["Total"] : []
145
+ ],
146
+ rows: data.map((d, index) => [
147
+ d.detail ?? d.label,
148
+ ...series.map((s) => formatValue(d.values[s.id] ?? 0)),
149
+ ...stacked && series.length > 1 ? [formatValue(totals[index])] : []
150
+ ])
151
+ },
152
+ announcement: activeDatum ? tooltipText(activeDatum.detail ?? activeDatum.label, rowsAt(active)) : void 0,
153
+ children: /* @__PURE__ */ jsxs(
154
+ "div",
155
+ {
156
+ ref: containerRef,
157
+ role: "group",
158
+ "aria-roledescription": "chart",
159
+ "aria-label": `${label}: ${count} categories. Arrow keys move between them.`,
160
+ tabIndex: 0,
161
+ onKeyDown,
162
+ onBlur: () => setActive(null),
163
+ onPointerLeave: () => setActive(null),
164
+ className: plotClass,
165
+ children: [
166
+ /* @__PURE__ */ jsxs("svg", { width: "100%", height: svgHeight, viewBox: `0 0 ${width} ${svgHeight}`, className: "block overflow-visible", "aria-hidden": "true", children: [
167
+ /* @__PURE__ */ jsx("g", { "data-slot": "chart-value-axis", children: ticks.map((tick, index) => {
168
+ const at = horizontal ? plotLeft + scale(tick) : plotBottom - scale(tick);
169
+ return /* @__PURE__ */ jsxs("g", { children: [
170
+ horizontal ? /* @__PURE__ */ jsx("line", { x1: at, x2: at, y1: plotTop, y2: plotBottom, stroke: "var(--border)" }) : /* @__PURE__ */ jsx("line", { x1: plotLeft, x2: plotRight, y1: at, y2: at, stroke: "var(--border)" }),
171
+ /* @__PURE__ */ jsx(
172
+ "text",
173
+ {
174
+ x: horizontal ? at : plotLeft - 8,
175
+ y: horizontal ? plotBottom + 16 : at,
176
+ dy: horizontal ? void 0 : "0.32em",
177
+ textAnchor: horizontal ? index === ticks.length - 1 ? "end" : "middle" : "end",
178
+ fontSize: TICK_FONT,
179
+ fill: "var(--muted-foreground)",
180
+ style: { fontVariantNumeric: "tabular-nums" },
181
+ children: tickLabels[index]
182
+ }
183
+ )
184
+ ] }, tick);
185
+ }) }),
186
+ /* @__PURE__ */ jsx("g", { "data-slot": "chart-bars", children: bars }),
187
+ /* @__PURE__ */ jsx("g", { "data-slot": "chart-category-axis", children: labelIndices.map((index) => /* @__PURE__ */ jsx(
188
+ "text",
189
+ {
190
+ x: horizontal ? plotLeft - 8 : plotLeft + (index + 0.5) * bandSize,
191
+ y: horizontal ? plotTop + (index + 0.5) * bandSize : plotBottom + 18,
192
+ dy: horizontal ? "0.32em" : void 0,
193
+ textAnchor: horizontal ? "end" : "middle",
194
+ fontSize: TICK_FONT,
195
+ fill: "var(--muted-foreground)",
196
+ children: data[index].label
197
+ },
198
+ data[index].key
199
+ )) })
200
+ ] }),
201
+ activeDatum && /* @__PURE__ */ jsx(
202
+ ChartTooltip,
203
+ {
204
+ title: activeDatum.detail ?? activeDatum.label,
205
+ rows: rowsAt(active),
206
+ x: tooltipAnchor.x,
207
+ y: tooltipAnchor.y,
208
+ width
209
+ }
210
+ )
211
+ ]
212
+ }
213
+ )
214
+ }
215
+ );
216
+ }
217
+
218
+ export {
219
+ BarChart
220
+ };
@@ -0,0 +1,159 @@
1
+ "use client";
2
+ import {
3
+ MENU_VISIBLE_ITEMS,
4
+ MenuNoResults,
5
+ MenuSearch,
6
+ countMenuItems,
7
+ filterMenuItems,
8
+ isElementOf
9
+ } from "./chunk-CBE7BT3M.js";
10
+ import {
11
+ fieldSurface
12
+ } from "./chunk-TKRMGN7J.js";
13
+ import {
14
+ ScrollArea
15
+ } from "./chunk-DCUAE6PX.js";
16
+ import {
17
+ IconGlyph
18
+ } from "./chunk-YQQ7GDLZ.js";
19
+ import {
20
+ cn
21
+ } from "./chunk-PMGIJMRO.js";
22
+ import {
23
+ Check,
24
+ ExpandMore
25
+ } from "./chunk-XXH4TYKZ.js";
26
+
27
+ // src/web/primitives/select.tsx
28
+ import * as React from "react";
29
+ import * as SelectPrimitive from "@radix-ui/react-select";
30
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
31
+ var Select = SelectPrimitive.Root;
32
+ var SelectGroup = SelectPrimitive.Group;
33
+ var SelectValue = SelectPrimitive.Value;
34
+ var SelectTrigger = React.forwardRef(({ className, children, compact = false, hug = false, ...props }, ref) => /* @__PURE__ */ jsxs(
35
+ SelectPrimitive.Trigger,
36
+ {
37
+ ref,
38
+ className: cn(
39
+ "group flex items-center justify-between transition-all outline-none",
40
+ compact ? [
41
+ "w-auto gap-1 rounded-2xl bg-foreground/[0.09] px-2 py-1.5 text-caption leading-none shadow-raised backdrop-blur-md",
42
+ "hover-gradient-violet data-[state=open]:bg-secondary/20 data-[state=open]:text-secondary-content"
43
+ ] : [
44
+ hug ? "w-auto" : "w-full",
45
+ "gap-3 px-4 py-3 text-left text-body",
46
+ fieldSurface,
47
+ "data-[state=open]:ring-primary/50"
48
+ ],
49
+ "focus:ring-1 focus:ring-primary/50",
50
+ "disabled:cursor-not-allowed disabled:opacity-50",
51
+ className
52
+ ),
53
+ ...props,
54
+ children: [
55
+ children,
56
+ /* @__PURE__ */ jsx(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx(
57
+ IconGlyph,
58
+ {
59
+ glyph: ExpandMore,
60
+ className: cn(
61
+ "shrink-0 transition-transform duration-200 group-data-[state=open]:rotate-180",
62
+ compact ? "text-icon-xs text-foreground/55 group-data-[state=open]:text-secondary-content" : "text-icon-lg text-muted-foreground group-hover:text-secondary-content group-data-[state=open]:text-secondary-content"
63
+ )
64
+ }
65
+ ) })
66
+ ]
67
+ }
68
+ ));
69
+ SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
70
+ var SELECT_MAX_HEIGHT = "max-h-[204px]";
71
+ var isSelectItem = (element) => isElementOf(SelectItem)(element);
72
+ function SelectBody({ children }) {
73
+ const [query, setQuery] = React.useState("");
74
+ const searchable = countMenuItems(children, isSelectItem) > MENU_VISIBLE_ITEMS;
75
+ const searching = searchable && query.trim() !== "";
76
+ const shown = searching ? filterMenuItems(children, isSelectItem, query) : children;
77
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
78
+ searchable && /* @__PURE__ */ jsx(MenuSearch, { value: query, onChange: setQuery }),
79
+ /* @__PURE__ */ jsxs(
80
+ ScrollArea,
81
+ {
82
+ className: searchable ? "-mr-1.5" : void 0,
83
+ viewportClassName: searchable ? cn(SELECT_MAX_HEIGHT, "pr-1.5") : void 0,
84
+ children: [
85
+ /* @__PURE__ */ jsx(SelectPrimitive.Viewport, { style: { overflow: "visible" }, children: shown }),
86
+ searching && React.Children.count(shown) === 0 && /* @__PURE__ */ jsx(MenuNoResults, {})
87
+ ]
88
+ }
89
+ )
90
+ ] });
91
+ }
92
+ var SelectContent = React.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsx(
93
+ SelectPrimitive.Content,
94
+ {
95
+ ref,
96
+ className: cn(
97
+ "relative min-w-[8rem] overflow-hidden rounded-2xl bg-popover/95 bg-gradient-card p-2 shadow-popover backdrop-blur",
98
+ "z-[var(--z-popover)]",
99
+ position === "popper" && "w-max min-w-[var(--radix-select-trigger-width)]",
100
+ className
101
+ ),
102
+ position,
103
+ sideOffset: 8,
104
+ ...props,
105
+ children: /* @__PURE__ */ jsx(SelectBody, { children })
106
+ }
107
+ ) }));
108
+ SelectContent.displayName = SelectPrimitive.Content.displayName;
109
+ var SelectLabel = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
110
+ SelectPrimitive.Label,
111
+ {
112
+ ref,
113
+ className: cn("px-3 py-1.5 text-caption font-semibold text-secondary-content/80", className),
114
+ ...props
115
+ }
116
+ ));
117
+ SelectLabel.displayName = SelectPrimitive.Label.displayName;
118
+ var SelectItem = React.forwardRef(({ className, children, description, ...props }, ref) => /* @__PURE__ */ jsxs(
119
+ SelectPrimitive.Item,
120
+ {
121
+ ref,
122
+ className: cn(
123
+ "relative flex w-full cursor-pointer whitespace-nowrap select-none items-center justify-between rounded-xl px-3 py-3 text-body outline-none transition-colors",
124
+ "data-[highlighted]:bg-secondary/15",
125
+ "data-[state=checked]:bg-primary/10 data-[state=checked]:font-semibold data-[state=checked]:ring-1 data-[state=checked]:ring-inset data-[state=checked]:ring-primary/40 data-[state=checked]:text-brand",
126
+ "data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
127
+ className
128
+ ),
129
+ ...props,
130
+ children: [
131
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
132
+ /* @__PURE__ */ jsx(SelectPrimitive.ItemText, { children }),
133
+ description && /* @__PURE__ */ jsx("p", { className: "mt-0.5 text-icon-xxs text-muted-foreground", children: description })
134
+ ] }),
135
+ /* @__PURE__ */ jsx(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(IconGlyph, { glyph: Check, className: "text-icon-md text-brand" }) })
136
+ ]
137
+ }
138
+ ));
139
+ SelectItem.displayName = SelectPrimitive.Item.displayName;
140
+ var SelectSeparator = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
141
+ SelectPrimitive.Separator,
142
+ {
143
+ ref,
144
+ className: cn("-mx-1 my-1 h-px bg-border", className),
145
+ ...props
146
+ }
147
+ ));
148
+ SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
149
+
150
+ export {
151
+ Select,
152
+ SelectGroup,
153
+ SelectValue,
154
+ SelectTrigger,
155
+ SelectContent,
156
+ SelectLabel,
157
+ SelectItem,
158
+ SelectSeparator
159
+ };