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,73 @@
1
+ "use client";
2
+ import {
3
+ AssetIcon
4
+ } from "./chunk-SGXLWU4V.js";
5
+ import {
6
+ NETWORK_CONFIG
7
+ } from "./chunk-W4G74KFZ.js";
8
+ import {
9
+ Button
10
+ } from "./chunk-OWSKP527.js";
11
+ import {
12
+ IconGlyph
13
+ } from "./chunk-YQQ7GDLZ.js";
14
+ import {
15
+ cn
16
+ } from "./chunk-PMGIJMRO.js";
17
+ import {
18
+ AccountBalanceWallet,
19
+ CheckCircle
20
+ } from "./chunk-XXH4TYKZ.js";
21
+
22
+ // src/web/components/deposit-success-screen.tsx
23
+ import { jsx, jsxs } from "react/jsx-runtime";
24
+ function DepositSuccessScreen({
25
+ handleDone,
26
+ displayTicker,
27
+ selectedAsset,
28
+ network,
29
+ arkSubMode = "ark"
30
+ }) {
31
+ const net = NETWORK_CONFIG[network];
32
+ const networkLabel = network === "arkade" ? arkSubMode === "boarding" ? "Arkade Boarding" : "Arkade" : net.label;
33
+ const isInstant = network === "lightning" || network === "spark";
34
+ const title = isInstant ? "Payment Received!" : "Deposit Detected!";
35
+ const subtitle = isInstant ? `Your ${displayTicker} has arrived via ${networkLabel}.` : `Incoming deposit detected via ${networkLabel}. Funds will be available after confirmation.`;
36
+ return /* @__PURE__ */ jsx("div", { className: "flex h-screen flex-col overflow-hidden bg-background bg-page-radial font-display text-foreground", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-1 flex-col items-center justify-center p-6 text-center", children: [
37
+ /* @__PURE__ */ jsxs("div", { className: "relative mb-8", children: [
38
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0 scale-150 animate-pulse rounded-full bg-secondary/25 blur-2xl" }),
39
+ /* @__PURE__ */ 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__ */ jsx(IconGlyph, { glyph: CheckCircle, className: "size-12 text-brand animate-in zoom-in-50 duration-500" }) })
40
+ ] }),
41
+ /* @__PURE__ */ jsx("h1", { className: "mb-2 text-headline font-bold text-gradient-brand", children: title }),
42
+ /* @__PURE__ */ jsx("p", { className: "mb-8 max-w-[260px] text-caption leading-relaxed text-muted-foreground", children: subtitle }),
43
+ /* @__PURE__ */ 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: [
44
+ /* @__PURE__ */ jsx(AssetIcon, { ticker: displayTicker, size: 36 }),
45
+ /* @__PURE__ */ jsxs("div", { className: "text-left", children: [
46
+ /* @__PURE__ */ jsx("p", { className: "text-body font-bold text-foreground", children: displayTicker }),
47
+ /* @__PURE__ */ jsx("p", { className: "text-caption text-foreground/55", children: selectedAsset?.name ?? displayTicker })
48
+ ] }),
49
+ /* @__PURE__ */ jsxs(
50
+ "div",
51
+ {
52
+ className: cn(
53
+ "ml-1 flex items-center gap-1 rounded-full px-2.5 py-1 text-xxs font-bold",
54
+ net.bg,
55
+ net.text
56
+ ),
57
+ children: [
58
+ net.icon,
59
+ /* @__PURE__ */ jsx("span", { children: networkLabel })
60
+ ]
61
+ }
62
+ )
63
+ ] }),
64
+ /* @__PURE__ */ jsxs(Button, { variant: "cta", size: "cta", onClick: handleDone, children: [
65
+ /* @__PURE__ */ jsx(IconGlyph, { glyph: AccountBalanceWallet, className: "text-icon-lg" }),
66
+ "Back to Wallet"
67
+ ] })
68
+ ] }) });
69
+ }
70
+
71
+ export {
72
+ DepositSuccessScreen
73
+ };
@@ -0,0 +1,90 @@
1
+ "use client";
2
+ import {
3
+ Collapsible,
4
+ CollapsibleChevron,
5
+ CollapsibleContent,
6
+ CollapsibleTrigger
7
+ } from "./chunk-Q2IXLUSM.js";
8
+ import {
9
+ Button
10
+ } from "./chunk-OWSKP527.js";
11
+ import {
12
+ IconGlyph
13
+ } from "./chunk-YQQ7GDLZ.js";
14
+ import {
15
+ cn
16
+ } from "./chunk-PMGIJMRO.js";
17
+ import {
18
+ Tune
19
+ } from "./chunk-XXH4TYKZ.js";
20
+ import {
21
+ useIsNarrow
22
+ } from "./chunk-MTQ22SKE.js";
23
+
24
+ // src/web/components/filter-bar.tsx
25
+ import { useState } from "react";
26
+ import { jsx, jsxs } from "react/jsx-runtime";
27
+ function activeFiltersLabel(count) {
28
+ return `${count} ${count === 1 ? "filter" : "filters"} applied`;
29
+ }
30
+ var defaultCountLabel = (count) => count > 0 ? `${count} active` : "none";
31
+ function FilterBar({
32
+ activeCount,
33
+ onClear,
34
+ children,
35
+ activeLabel = activeFiltersLabel,
36
+ clearLabel = "Clear all",
37
+ filtersLabel = "Filters",
38
+ countLabel = defaultCountLabel,
39
+ defaultOpen = false,
40
+ align = "start",
41
+ className
42
+ }) {
43
+ const narrow = useIsNarrow();
44
+ const [open, setOpen] = useState(defaultOpen);
45
+ const clear = activeCount > 0 && onClear ? /* @__PURE__ */ jsx(Button, { type: "button", variant: "ghost", size: "sm", onClick: onClear, children: clearLabel }) : null;
46
+ if (narrow) {
47
+ return /* @__PURE__ */ jsxs(Collapsible, { open, onOpenChange: setOpen, "data-slot": "filter-bar", "data-layout": "narrow", className: cn("space-y-3", className), children: [
48
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
49
+ /* @__PURE__ */ jsxs(
50
+ CollapsibleTrigger,
51
+ {
52
+ type: "button",
53
+ "aria-label": `${filtersLabel}, ${countLabel(activeCount)}`,
54
+ className: "inline-flex h-9 items-center gap-2 rounded-xl bg-muted/40 px-3 text-caption font-semibold text-foreground shadow-raised hover-gradient-violet data-[state=open]:bg-secondary/15 data-[state=open]:text-secondary-content",
55
+ children: [
56
+ /* @__PURE__ */ jsx(IconGlyph, { glyph: Tune, className: "text-icon-md" }),
57
+ filtersLabel,
58
+ activeCount > 0 && /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "rounded-full bg-primary/15 px-1.5 text-xxs font-bold text-brand", children: activeCount }),
59
+ /* @__PURE__ */ jsx(CollapsibleChevron, {})
60
+ ]
61
+ }
62
+ ),
63
+ clear
64
+ ] }),
65
+ /* @__PURE__ */ jsx(CollapsibleContent, { className: "flex flex-col gap-3", children })
66
+ ] });
67
+ }
68
+ return /* @__PURE__ */ jsxs(
69
+ "div",
70
+ {
71
+ "data-slot": "filter-bar",
72
+ "data-layout": "wide",
73
+ className: cn("flex flex-wrap items-end gap-3", align === "end" && "justify-end", className),
74
+ children: [
75
+ children,
76
+ activeCount > 0 && // Its own line under the filters, never squeezed in beside them.
77
+ // The count belongs to the controls above it: a tighter gap than theirs.
78
+ /* @__PURE__ */ jsxs("div", { className: cn("-mt-1.5 flex basis-full items-center gap-2", align === "end" && "justify-end"), children: [
79
+ /* @__PURE__ */ jsx("span", { className: "text-caption text-muted-foreground", children: activeLabel(activeCount) }),
80
+ clear
81
+ ] })
82
+ ]
83
+ }
84
+ );
85
+ }
86
+
87
+ export {
88
+ activeFiltersLabel,
89
+ FilterBar
90
+ };
@@ -0,0 +1,84 @@
1
+ "use client";
2
+ import {
3
+ cn
4
+ } from "./chunk-PMGIJMRO.js";
5
+
6
+ // src/web/primitives/switch.tsx
7
+ import * as React from "react";
8
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
9
+ var Switch = React.forwardRef(
10
+ ({
11
+ checked = false,
12
+ onCheckedChange,
13
+ disabled = false,
14
+ className,
15
+ icons,
16
+ id,
17
+ title,
18
+ "aria-label": ariaLabel,
19
+ "aria-labelledby": ariaLabelledBy,
20
+ "aria-describedby": ariaDescribedBy,
21
+ "data-slot": dataSlot = "switch",
22
+ "data-mode": dataMode
23
+ }, ref) => {
24
+ const glyph = (on) => cn(
25
+ "relative z-10 flex size-7 items-center justify-center transition-colors duration-300",
26
+ checked === on ? "text-brand" : "text-muted-foreground group-hover:text-foreground/80"
27
+ );
28
+ return /* @__PURE__ */ jsxs(
29
+ "button",
30
+ {
31
+ ref,
32
+ id,
33
+ type: "button",
34
+ role: "switch",
35
+ "aria-checked": checked,
36
+ "aria-label": ariaLabel,
37
+ "aria-labelledby": ariaLabelledBy,
38
+ "aria-describedby": ariaDescribedBy,
39
+ title,
40
+ "data-slot": dataSlot,
41
+ "data-mode": dataMode,
42
+ "data-state": checked ? "checked" : "unchecked",
43
+ disabled,
44
+ onClick: () => onCheckedChange?.(!checked),
45
+ className: cn(
46
+ // The base: an inset track and a raised card thumb. Only the off track
47
+ // is ringed in violet: on light it would otherwise have no edge.
48
+ "group relative inline-flex shrink-0 cursor-pointer items-center rounded-full p-1 shadow-inner transition-all duration-300",
49
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50 focus-visible:shadow-glow-primary-soft",
50
+ "disabled:pointer-events-none disabled:opacity-50",
51
+ // The wide track is 18 steps: p-1 + two size-7 glyphs + p-1 leaves 2 between
52
+ // them, so the thumb's 9-step slide lands exactly on the second glyph.
53
+ icons ? "h-9 w-18" : "h-6 w-11",
54
+ !icons && checked ? "bg-primary bg-gradient-primary" : "bg-foreground/8 ring-1 ring-inset ring-secondary/20",
55
+ className
56
+ ),
57
+ children: [
58
+ /* @__PURE__ */ jsx(
59
+ "span",
60
+ {
61
+ "aria-hidden": "true",
62
+ className: cn(
63
+ "pointer-events-none absolute left-1 top-1 rounded-full shadow-raised transition-transform duration-300 ease-out motion-reduce:transition-none",
64
+ icons ? "size-7" : "size-4",
65
+ // Compact and off, a card thumb would vanish into the track.
66
+ !icons && !checked ? "bg-secondary-content" : "bg-card bg-gradient-card",
67
+ checked && (icons ? "translate-x-9" : "translate-x-5")
68
+ )
69
+ }
70
+ ),
71
+ icons && /* @__PURE__ */ jsxs(Fragment, { children: [
72
+ /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: glyph(false), children: icons.off }),
73
+ /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: cn(glyph(true), "ml-auto"), children: icons.on })
74
+ ] })
75
+ ]
76
+ }
77
+ );
78
+ }
79
+ );
80
+ Switch.displayName = "Switch";
81
+
82
+ export {
83
+ Switch
84
+ };
@@ -0,0 +1,83 @@
1
+ "use client";
2
+ import {
3
+ AppIcon
4
+ } from "./chunk-I2N3HZ4M.js";
5
+ import {
6
+ eyebrow
7
+ } from "./chunk-MTQOAMDW.js";
8
+ import {
9
+ ArkadeNetworkIcon,
10
+ LightningNetworkIcon,
11
+ OnchainNetworkIcon,
12
+ SparkNetworkIcon
13
+ } from "./chunk-WBW5E6LC.js";
14
+ import {
15
+ cn
16
+ } from "./chunk-PMGIJMRO.js";
17
+
18
+ // src/web/components/activity-network-filters.tsx
19
+ import { jsx, jsxs } from "react/jsx-runtime";
20
+ function getActivityNetworkFilterIcon(filter) {
21
+ switch (filter) {
22
+ case "onchain":
23
+ return /* @__PURE__ */ jsx(OnchainNetworkIcon, { className: "size-3.5" });
24
+ case "lightning":
25
+ return /* @__PURE__ */ jsx(LightningNetworkIcon, { className: "size-3.5", alt: "" });
26
+ case "spark":
27
+ return /* @__PURE__ */ jsx(SparkNetworkIcon, { className: "size-3.5", alt: "" });
28
+ case "arkade":
29
+ return /* @__PURE__ */ jsx(ArkadeNetworkIcon, { className: "size-3.5 rounded", alt: "" });
30
+ default:
31
+ return /* @__PURE__ */ jsx(AppIcon, { name: "allNetworks", size: "xs", className: "size-icon-sm" });
32
+ }
33
+ }
34
+ function ActivityNetworkFilters({
35
+ filters,
36
+ activeFilter,
37
+ onChange,
38
+ className,
39
+ ariaLabel = "Filter activity by network"
40
+ }) {
41
+ if (filters.length <= 1) return null;
42
+ return /* @__PURE__ */ jsx(
43
+ "div",
44
+ {
45
+ role: "group",
46
+ "aria-label": ariaLabel,
47
+ className: cn("flex gap-1.5 overflow-x-auto pb-0.5 no-scrollbar", className),
48
+ children: filters.map((filter) => {
49
+ const isActive = activeFilter === filter.value;
50
+ return /* @__PURE__ */ jsxs(
51
+ "button",
52
+ {
53
+ type: "button",
54
+ "aria-pressed": isActive,
55
+ onClick: () => onChange(filter.value),
56
+ className: cn(
57
+ "flex shrink-0 items-center gap-1 rounded-full px-2.5 py-1.5 transition-all",
58
+ eyebrow,
59
+ isActive ? "bg-primary bg-gradient-primary text-primary-foreground shadow-button-primary" : "bg-foreground/5 text-muted-foreground hover-gradient-violet hover:text-secondary-content"
60
+ ),
61
+ children: [
62
+ /* @__PURE__ */ jsx(
63
+ "span",
64
+ {
65
+ "aria-hidden": true,
66
+ className: "flex size-3 items-center justify-center",
67
+ children: filter.icon ?? getActivityNetworkFilterIcon(filter.value)
68
+ }
69
+ ),
70
+ filter.label
71
+ ]
72
+ },
73
+ filter.value
74
+ );
75
+ })
76
+ }
77
+ );
78
+ }
79
+
80
+ export {
81
+ getActivityNetworkFilterIcon,
82
+ ActivityNetworkFilters
83
+ };
@@ -0,0 +1,38 @@
1
+ "use client";
2
+ import {
3
+ Switch
4
+ } from "./chunk-QRFFLA3N.js";
5
+ import {
6
+ cn
7
+ } from "./chunk-PMGIJMRO.js";
8
+
9
+ // src/web/components/switch-row.tsx
10
+ import { jsx, jsxs } from "react/jsx-runtime";
11
+ function SwitchRow({
12
+ label,
13
+ description,
14
+ checked,
15
+ disabled,
16
+ onCheckedChange,
17
+ className
18
+ }) {
19
+ return /* @__PURE__ */ jsxs("div", { className: cn("flex items-start justify-between gap-3 rounded-xl bg-muted/40 p-3 shadow-raised transition-colors hover-gradient-violet", className), children: [
20
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
21
+ /* @__PURE__ */ jsx("p", { className: "text-body font-medium text-foreground", children: label }),
22
+ description && /* @__PURE__ */ jsx("p", { className: "mt-0.5 text-caption leading-snug text-muted-foreground", children: description })
23
+ ] }),
24
+ /* @__PURE__ */ jsx(
25
+ Switch,
26
+ {
27
+ checked,
28
+ disabled,
29
+ onCheckedChange,
30
+ "aria-label": label
31
+ }
32
+ )
33
+ ] });
34
+ }
35
+
36
+ export {
37
+ SwitchRow
38
+ };
@@ -0,0 +1,50 @@
1
+ "use client";
2
+ import {
3
+ cn
4
+ } from "./chunk-PMGIJMRO.js";
5
+
6
+ // src/web/components/notice-bar.tsx
7
+ import { useEffect, useLayoutEffect, useRef } from "react";
8
+ import { jsx } from "react/jsx-runtime";
9
+ var useIsomorphicLayoutEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
10
+ function NoticeBar({ children, hidden = false, heightVariable = "--kui-notice-height", className }) {
11
+ const ref = useRef(null);
12
+ useIsomorphicLayoutEffect(() => {
13
+ const element = ref.current;
14
+ const root = typeof document === "undefined" ? null : document.documentElement;
15
+ if (!root) return;
16
+ if (hidden || !element) {
17
+ root.style.removeProperty(heightVariable);
18
+ return;
19
+ }
20
+ const publish = () => root.style.setProperty(heightVariable, `${Math.round(element.getBoundingClientRect().height)}px`);
21
+ publish();
22
+ let cleanup;
23
+ if (typeof ResizeObserver !== "undefined") {
24
+ const observer = new ResizeObserver(publish);
25
+ observer.observe(element);
26
+ cleanup = () => observer.disconnect();
27
+ } else {
28
+ window.addEventListener("resize", publish);
29
+ cleanup = () => window.removeEventListener("resize", publish);
30
+ }
31
+ return () => {
32
+ cleanup();
33
+ root.style.removeProperty(heightVariable);
34
+ };
35
+ }, [hidden, heightVariable]);
36
+ if (hidden) return null;
37
+ return /* @__PURE__ */ jsx(
38
+ "div",
39
+ {
40
+ ref,
41
+ "data-slot": "notice-bar",
42
+ className: cn("fixed inset-x-0 top-0 z-[var(--z-popover)] bg-background/90 bg-gradient-card px-4 py-2 shadow-raised backdrop-blur-xl backdrop-saturate-150", className),
43
+ children
44
+ }
45
+ );
46
+ }
47
+
48
+ export {
49
+ NoticeBar
50
+ };
@@ -0,0 +1,106 @@
1
+ "use client";
2
+ import {
3
+ IconGlyph
4
+ } from "./chunk-YQQ7GDLZ.js";
5
+ import {
6
+ cn
7
+ } from "./chunk-PMGIJMRO.js";
8
+ import {
9
+ Check,
10
+ Close,
11
+ Help
12
+ } from "./chunk-XXH4TYKZ.js";
13
+
14
+ // src/web/components/swap-step-list.tsx
15
+ import { jsx, jsxs } from "react/jsx-runtime";
16
+ var defaultStatusLabels = {
17
+ done: "Done",
18
+ active: "In progress",
19
+ pending: "To do",
20
+ failed: "Failed",
21
+ unknown: "Cannot be checked"
22
+ };
23
+ var dotClass = {
24
+ done: "bg-primary bg-gradient-primary text-background shadow-glow-primary-soft",
25
+ active: "bg-secondary bg-gradient-brand text-white shadow-glow-violet",
26
+ pending: "bg-secondary/15 text-secondary-content ring-1 ring-inset ring-secondary/25",
27
+ failed: "bg-danger/20 text-danger-fg",
28
+ unknown: "bg-foreground/8 text-muted-foreground ring-1 ring-inset ring-foreground/10"
29
+ };
30
+ var labelClass = {
31
+ done: "text-foreground",
32
+ active: "text-foreground",
33
+ pending: "text-muted-foreground",
34
+ failed: "text-danger-fg",
35
+ unknown: "text-foreground"
36
+ };
37
+ function SwapStepList({ steps, connector = true, statusLabels, className }) {
38
+ const labels = { ...defaultStatusLabels, ...statusLabels };
39
+ return (
40
+ // A checklist's items stand alone, so a hairline rule separates them where
41
+ // a flow has its rail.
42
+ /* @__PURE__ */ jsx(
43
+ "div",
44
+ {
45
+ "data-slot": "swap-step-list",
46
+ className: cn("flex flex-col", !connector && "divide-y divide-divider/35", className),
47
+ children: steps.map((step, index) => {
48
+ const isLast = index === steps.length - 1;
49
+ return /* @__PURE__ */ jsxs(
50
+ "div",
51
+ {
52
+ "data-slot": "swap-step",
53
+ "data-status": step.status,
54
+ className: cn("flex gap-3", !connector && "py-3 first:pt-0 last:pb-0"),
55
+ children: [
56
+ /* @__PURE__ */ jsxs("div", { className: "flex w-5 shrink-0 flex-col items-center", children: [
57
+ /* @__PURE__ */ jsx(
58
+ "span",
59
+ {
60
+ "aria-hidden": true,
61
+ className: cn(
62
+ "flex size-5 items-center justify-center rounded-full text-xxs font-bold",
63
+ dotClass[step.status],
64
+ step.status === "active" && "animate-pulse"
65
+ ),
66
+ children: step.status === "done" ? /* @__PURE__ */ jsx(IconGlyph, { glyph: Check, className: "text-icon-sm" }) : step.status === "failed" ? /* @__PURE__ */ jsx(IconGlyph, { glyph: Close, className: "text-icon-sm" }) : step.status === "unknown" ? /* @__PURE__ */ jsx(IconGlyph, { glyph: Help, className: "text-icon-sm" }) : index + 1
67
+ }
68
+ ),
69
+ connector && !isLast && /* @__PURE__ */ jsx(
70
+ "span",
71
+ {
72
+ "aria-hidden": true,
73
+ className: cn(
74
+ "mt-1 w-0.5 flex-1",
75
+ step.status === "done" ? "bg-primary/60" : step.status === "active" ? "bg-secondary/40" : "bg-secondary/15"
76
+ )
77
+ }
78
+ )
79
+ ] }),
80
+ /* @__PURE__ */ jsxs("div", { className: cn("min-w-0 flex-1", connector && !isLast ? "pb-4" : "pb-0"), children: [
81
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
82
+ /* @__PURE__ */ jsxs("p", { className: cn("text-body font-medium", labelClass[step.status]), children: [
83
+ /* @__PURE__ */ jsxs("span", { className: "sr-only", children: [
84
+ labels[step.status],
85
+ ": "
86
+ ] }),
87
+ step.label
88
+ ] }),
89
+ step.badges
90
+ ] }),
91
+ step.description && /* @__PURE__ */ jsx("p", { className: "mt-0.5 text-caption leading-snug text-muted-foreground", children: step.description }),
92
+ step.action && /* @__PURE__ */ jsx("div", { className: "mt-2", children: step.action })
93
+ ] })
94
+ ]
95
+ },
96
+ step.id
97
+ );
98
+ })
99
+ }
100
+ )
101
+ );
102
+ }
103
+
104
+ export {
105
+ SwapStepList
106
+ };
@@ -0,0 +1,141 @@
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/bottom-nav.tsx
10
+ import { useLayoutEffect, useRef } from "react";
11
+ import { jsx, jsxs } from "react/jsx-runtime";
12
+ function BottomNav({
13
+ activeView,
14
+ items,
15
+ onChange,
16
+ position = "fixed",
17
+ className
18
+ }) {
19
+ const trackRef = useRef(null);
20
+ const blobRef = useRef(null);
21
+ const buttonRefs = useRef(/* @__PURE__ */ new Map());
22
+ const placed = useRef(null);
23
+ useLayoutEffect(() => {
24
+ const blob = blobRef.current;
25
+ const button = activeView !== void 0 ? buttonRefs.current.get(activeView) : void 0;
26
+ if (!blob) return;
27
+ if (!button) {
28
+ blob.style.opacity = "0";
29
+ placed.current = null;
30
+ return;
31
+ }
32
+ const to = { x: button.offsetLeft, w: button.offsetWidth };
33
+ const from = placed.current;
34
+ blob.style.opacity = "1";
35
+ blob.style.width = `${to.w}px`;
36
+ blob.style.transform = `translateX(${to.x}px)`;
37
+ placed.current = to;
38
+ const reduce = window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;
39
+ if (!from || reduce || from.x === to.x && from.w === to.w) return;
40
+ if (typeof blob.animate !== "function") return;
41
+ const frame = (center, width, scaleY = 1) => `translateX(${center - width / 2}px) scaleY(${scaleY})`;
42
+ const fromC = from.x + from.w / 2;
43
+ const toC = to.x + to.w / 2;
44
+ const midC = (fromC + toC) / 2;
45
+ const pinched = Math.min(from.w, to.w) * 0.68;
46
+ const swollen = to.w * 1.08;
47
+ blob.animate(
48
+ [
49
+ { transform: frame(fromC, from.w), width: `${from.w}px`, offset: 0 },
50
+ { transform: frame(midC, pinched, 0.72), width: `${pinched}px`, offset: 0.45, easing: "cubic-bezier(0.2, 0.8, 0.3, 1)" },
51
+ { transform: frame(toC, swollen, 1.04), width: `${swollen}px`, offset: 0.78, easing: "ease-out" },
52
+ { transform: frame(toC, to.w), width: `${to.w}px`, offset: 1 }
53
+ ],
54
+ { duration: 560, easing: "cubic-bezier(0.45, 0, 0.25, 1)" }
55
+ );
56
+ }, [activeView, items.length]);
57
+ useLayoutEffect(() => {
58
+ const track = trackRef.current;
59
+ if (!track || typeof ResizeObserver === "undefined") return;
60
+ const observer = new ResizeObserver(() => {
61
+ const blob = blobRef.current;
62
+ const button = activeView !== void 0 ? buttonRefs.current.get(activeView) : void 0;
63
+ if (!blob || !button) return;
64
+ blob.style.width = `${button.offsetWidth}px`;
65
+ blob.style.transform = `translateX(${button.offsetLeft}px)`;
66
+ placed.current = { x: button.offsetLeft, w: button.offsetWidth };
67
+ });
68
+ observer.observe(track);
69
+ return () => observer.disconnect();
70
+ }, [activeView]);
71
+ return /* @__PURE__ */ jsx(
72
+ "nav",
73
+ {
74
+ className: cn(
75
+ "w-[90%] max-w-[21.25rem] rounded-full bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card shadow-card-secondary",
76
+ position === "fixed" ? "fixed bottom-6 left-1/2 z-[var(--z-nav)] -translate-x-1/2" : "relative",
77
+ className
78
+ ),
79
+ children: /* @__PURE__ */ jsxs("div", { ref: trackRef, className: "relative flex items-center justify-around px-0 py-2", children: [
80
+ /* @__PURE__ */ jsx(
81
+ "span",
82
+ {
83
+ ref: blobRef,
84
+ "aria-hidden": true,
85
+ className: "pointer-events-none absolute left-0 top-2 h-[3.25rem] rounded-full bg-primary bg-gradient-primary opacity-0 shadow-button-primary"
86
+ }
87
+ ),
88
+ items.map(({ id, label, icon, iconName, testId }) => {
89
+ const isActive = activeView === id;
90
+ return /* @__PURE__ */ jsxs(
91
+ "button",
92
+ {
93
+ ref: (node) => {
94
+ if (node) buttonRefs.current.set(id, node);
95
+ else buttonRefs.current.delete(id);
96
+ },
97
+ type: "button",
98
+ onClick: () => onChange(id),
99
+ "data-testid": testId ?? `bottom-nav-${id}`,
100
+ className: cn(
101
+ "relative z-10 flex h-[3.25rem] w-[4rem] flex-col items-center justify-center rounded-full transition-all duration-300",
102
+ isActive ? "text-primary-foreground" : "text-muted-foreground hover-gradient-violet hover:text-secondary-content active:scale-95"
103
+ ),
104
+ children: [
105
+ iconName ? /* @__PURE__ */ jsxs("div", { className: "relative size-icon-nav", children: [
106
+ /* @__PURE__ */ jsx(
107
+ Icon,
108
+ {
109
+ name: iconName,
110
+ className: cn(
111
+ "absolute inset-0 size-icon-nav transition-all duration-300",
112
+ isActive ? "opacity-0 scale-75" : "opacity-100 scale-100"
113
+ )
114
+ }
115
+ ),
116
+ /* @__PURE__ */ jsx(
117
+ Icon,
118
+ {
119
+ name: iconName,
120
+ filled: true,
121
+ className: cn(
122
+ "absolute inset-0 size-icon-nav transition-all duration-300",
123
+ isActive ? "opacity-100 scale-100" : "opacity-0 scale-75"
124
+ )
125
+ }
126
+ )
127
+ ] }) : icon ?? null,
128
+ /* @__PURE__ */ jsx("span", { className: "mt-0.5 max-w-full truncate text-xxs font-semibold leading-none transition-colors duration-300", children: label })
129
+ ]
130
+ },
131
+ id
132
+ );
133
+ })
134
+ ] })
135
+ }
136
+ );
137
+ }
138
+
139
+ export {
140
+ BottomNav
141
+ };