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
package/README.md CHANGED
@@ -13,6 +13,7 @@ npm install kaleido-ui
13
13
  | Import | Description |
14
14
  |--------|-------------|
15
15
  | `kaleido-ui` | Web components (Tailwind CSS + Radix UI) |
16
+ | `kaleido-ui/icons` | Every icon glyph as its own export, plus `createIcon` to build an `Icon` that ships only the glyphs you pass it |
16
17
  | `kaleido-ui/tokens` | Platform-agnostic design tokens (zero deps) |
17
18
  | `kaleido-ui/native` | React Native components (WDK + custom) |
18
19
  | `kaleido-ui/css` | CSS variables (light + dark), keyframes, utilities, and the Tailwind v4 `@theme` tokens |
@@ -50,7 +51,7 @@ npm install kaleido-ui
50
51
  // tailwind.config.js
51
52
  module.exports = {
52
53
  presets: [require('kaleido-ui/tailwind')],
53
- content: ['./src/**/*.{ts,tsx}', './node_modules/kaleido-ui/dist/web/*.js'],
54
+ content: ['./src/**/*.{ts,tsx}', './node_modules/kaleido-ui/dist/web/**/*.js'],
54
55
  plugins: [require('tailwindcss-animate')],
55
56
  }
56
57
  ```
@@ -135,9 +136,9 @@ Works in any JS runtime (Node.js, React Native, web) with zero dependencies.
135
136
  ```ts
136
137
  import { colors, typeScale, radius, shadow } from 'kaleido-ui/tokens'
137
138
 
138
- console.log(colors.primary) // '#2BEE79'
139
+ console.log(colors.primary) // '#15E99A'
139
140
  console.log(colors.network.bitcoin) // '#F7931A'
140
- console.log(typeScale.body) // ['15px', '22px']
141
+ console.log(typeScale.body) // ['16px', '24px']
141
142
  ```
142
143
 
143
144
  ## Web Components
@@ -146,16 +147,40 @@ console.log(typeScale.body) // ['15px', '22px']
146
147
 
147
148
  | Component | Description |
148
149
  |-----------|-------------|
149
- | `Button` | 11 variants (default, destructive, outline, secondary, ghost, link, glow, surface, cta, cta-gradient, danger-subtle), 9 sizes |
150
+ | `Button` | 17 variants (default, destructive, outline, secondary, ghost, link, glow, surface, cta, cta-gradient, danger-subtle, danger-quiet, hyperlink, h1, h2, h3, quiet), 11 sizes |
150
151
  | `Card` | Compositional: Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter |
151
152
  | `Input` | Form text input with focus ring |
153
+ | `Select` | Select (Radix): Select, SelectTrigger, SelectContent, SelectItem, etc. Past four items, the list caps its height, scrolls, and shows a search field |
154
+ | `DropdownMenu` | Dropdown menu (Radix): DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, etc. Searchable past four items, like `Select` |
155
+ | `Table` | Table, TableHeader, TableBody, TableRow, TableHead, TableCell, etc. `TableHead` takes `sortable`, `sortDirection` (`'asc' \| 'desc' \| 'none'`) and `onSort`, and sets `aria-sort` |
152
156
  | `Dialog` | Modal dialog (Radix): Dialog, DialogContent, DialogHeader, DialogTitle, etc. |
153
157
  | `Tabs` | Tab navigation (Radix): Tabs, TabsList, TabsTrigger, TabsContent |
154
158
  | `Label` | Form label (Radix) |
155
159
  | `Toast` | Toast notifications (Radix): Toast, ToastProvider, Toaster |
156
- | `Icon` | Material Symbols wrapper with size variants (xs-2xl) |
160
+ | `Icon` | Inline SVG icon by name, with size variants (xs-2xl). Looking a name up means shipping the whole set; see below |
157
161
  | `Icons` | Named icon shortcuts (Icons.Send, Icons.Receive, Icons.Swap, etc.) |
158
162
 
163
+ #### Icons and bundle size
164
+
165
+ The ESM build is one module per component and the package declares no side
166
+ effects, so a bundler keeps only what the app imports. `<Icon name="…">` is the
167
+ exception: any name can come in at runtime, so it carries every glyph (~75 KB
168
+ minified). To ship only the glyphs you draw, import them from `kaleido-ui/icons`
169
+ and build your own `Icon`. It takes the same props and the names you give it:
170
+
171
+ ```tsx
172
+ import { createIcon, Close, Check, CheckCircleFilled } from 'kaleido-ui/icons'
173
+
174
+ export const Icon = createIcon({ close: Close, check: Check }, { check: CheckCircleFilled })
175
+
176
+ <Icon name="close" size="sm" />
177
+ <Icon name="check" filled />
178
+ ```
179
+
180
+ `IconButton icon="close"` looks the name up the same way; `GlyphButton` is the
181
+ same button taking the glyph component (`<GlyphButton icon={Close} label="Close" />`),
182
+ and `IconGlyph` draws one glyph at the icon scale (`<IconGlyph glyph={Close} size="sm" />`).
183
+
159
184
  ### Shared Components
160
185
 
161
186
  | Component | Description |
@@ -173,19 +198,56 @@ console.log(typeScale.body) // ['15px', '22px']
173
198
  | `KaleidoswapLogo` | Full logo, `orientation="horizontal" \| "vertical"`. Wordmark uses `currentColor`; size with `h-* w-auto` |
174
199
  | `KaleidoswapMark` | The K pictogram on its own; size with `size-*` |
175
200
  | `HaloBackdrop` | Decorative drifting brand-colour blobs behind a screen (parent needs `relative isolate`) |
201
+ | `TrendChart` | Line/area trend chart with a chart/table switch; pass `view` + `onViewChange` to control the view from the host, or leave them out |
202
+ | `WithdrawAmountInput` | Amount card for the withdraw flow; `unitSlot` replaces the unit label with your own control (e.g. a unit picker) inside the card |
203
+
204
+ ### Hooks and functions
176
205
 
177
- ### Hooks
206
+ Every function and hook `kaleido-ui` exports. `tests/docs-accuracy.test.tsx`
207
+ fails when one is missing here.
178
208
 
179
209
  | Hook | Description |
180
210
  |------|-------------|
181
- | `useToast` | Toast state management + `toast()` function |
182
- | `useAssetIcon` | Resolves asset ticker to CDN icon URL |
183
-
184
- ### Utilities
185
-
186
- | Export | Description |
187
- |--------|-------------|
211
+ | `useToast` | Toast state management; `toast()` shows one |
212
+ | `useAssetIcon` | Resolves an asset ticker to its CDN icon URL |
213
+ | `useCopyToClipboard` | `{ state: 'idle' \| 'copied' \| 'failed', copy, reset }`: a missing or refused clipboard is `failed`, never `copied` |
214
+ | `useMediaQuery` | Whether a media query matches, kept up to date; `false` on the server and in jsdom |
215
+ | `useIsNarrow` | Narrower than the `sm` breakpoint (40rem): a phone |
216
+ | `useThemeMode` | The light/dark mode on the document root, remembered in localStorage (`kaleido-ui:theme`) |
217
+ | `useDiscardGuard` | For a dialog holding unsaved input: closing asks first when there is something to lose |
218
+ | `useDrawerCollapsed` | Whether the surrounding drawer is folded to its icon rail |
219
+
220
+ | Function | Description |
221
+ |----------|-------------|
188
222
  | `cn()` | `clsx` + `tailwind-merge`, configured with kaleido-ui's custom scales (`text-title`, `text-icon-md`, `rounded-card`, `shadow-glow-*`, `tracking-eyebrow`) so they are not mistaken for colours and dropped. Use it instead of a local `twMerge`. |
223
+ | `toast()` | Shows a toast (see `useToast`) |
224
+ | `applyThemeMode(mode)` | Puts `.dark` or `.light` on the document root, without the hook |
225
+ | `formatAmount(value, { locale, maximumFractionDigits })` | Groups a number in an explicit locale (default `en-US`): the formatter the amount components share |
226
+ | `formatDisplayAmountText(value, { unit, maxDecimals })` | Formats an amount string for display, keeping its unit suffix (`BTC`, `sats`, `mBTC`) and leaving locale-formatted strings intact |
227
+ | `getAssetIconUrl(ticker, cdnBaseUrl?)` | The CDN icon URL for a ticker (what `useAssetIcon` returns, without React) |
228
+ | `getFallbackAssetIconUrl(seed)` | A generated gradient placeholder icon URL for an asset with no CDN icon |
229
+ | `createIcon(outlined, filled?)` | Builds an `Icon` that ships only the glyphs you pass (see above) |
230
+ | `isIconName(value)` | Whether a string names a glyph in the set |
231
+ | `buttonVariants` | `Button`'s variant classes (cva), for an element that must look like a button |
232
+ | `avatarVariants` | `Avatar`'s size classes (cva) |
233
+ | `cardSurface` | The two card surfaces' classes: `primary` (glass card with edge) and `secondary` (no edge, ranks under a primary card) |
234
+ | `networkChipStyle(network)` | A network's chip fill and ink (`{ backgroundColor, color }`), for any surface that stands for that network |
235
+ | `getActivityNetworkFilterIcon(filter)` | The icon element for an activity network filter |
236
+ | `getAccountNetworkLabel(network)` | `'Mainnet'`, `'Testnet'`, `'Regtest'` or `'Signet'` |
237
+ | `getAccountNetworkUi(network)` | Label plus badge and banner classes for an account's network |
238
+ | `getAccountStatusUi(status)` | Label and classes for an account status (`ready`, `offline`, `optional`) |
239
+ | `defaultClassifyError(error)` | `QueryState`'s fallback classifier: a retryable "Could not load" with the error's message |
240
+ | `activeFiltersLabel(count)` | "1 filter applied", "3 filters applied" |
241
+ | `seriesColor(slot)` | The chart series colour for a slot (`var(--series-N)`) |
242
+ | `chartValueTicks(max, { integer })` | Value-axis ticks from zero whose top is the largest value |
243
+ | `chartLabelIndices(count, maxLabels)` | Category indices that get a label: first and last, evenly spaced between |
244
+ | `foldSegments(segments)` | Keeps the largest five donut segments and folds the rest into "Other" |
245
+ | `trendChartTicks(max)` | `TrendChart`'s value-axis ticks (top = peak) |
246
+ | `trendChartLabelIndices(count, maxLabels)` | `TrendChart`'s time-axis label indices |
247
+ | `kaleidoswapMarkArtwork`, `kaleidoswapLogoHorizontalArtwork`, `kaleidoswapLogoVerticalArtwork` | The logo's `viewBox` and paths, for drawing it outside React |
248
+
249
+ The chart helpers are what the chart components use; they are exported for a
250
+ custom chart that should follow the same axis and colour rules.
189
251
 
190
252
  ### Brand utilities (from `kaleido-ui/css`)
191
253
 
@@ -213,12 +275,12 @@ StatusBadge, NetworkBadge, AlertBanner, SectionLabel
213
275
 
214
276
  | Token | Values |
215
277
  |-------|--------|
216
- | `colors` | primary (#2BEE79), surfaces, text, semantic, network, transaction |
217
- | `typeScale` | xxs (10px) through display (36px) |
218
- | `fontFamily` | Geist Sans, Geist Mono |
278
+ | `colors` | primary (#15E99A, dark theme; `lightSemanticColors` for light), surfaces, text, semantic, network, transaction |
279
+ | `typeScale` | mini (10px) through display (38px) |
280
+ | `fontFamily` | Satoshi (display), Geist Mono (mono) |
219
281
  | `fontWeight` | normal (400) through bold (700) |
220
- | `radius` | sm (8px) through full (9999px) |
221
- | `shadow` | glow, glowStrong, glowSubtle, glowAccent |
282
+ | `radius` | xs (2px) through full (9999px), plus card, panel, nav, pill |
283
+ | `shadow` | glow*, glowPrimary*, glowViolet*, card*, raised, button*, popover, toast |
222
284
  | `transition` | fast (150ms), default (200ms), slow (300ms) |
223
285
  | `brandMark` | The logo's three fills (violet, green, mint): paint, never text |
224
286
  | `themedForeground` | Per-theme AA foregrounds (`brand`, `accent-*-fg`, status and network `-fg`) |
@@ -0,0 +1,135 @@
1
+ import * as React$1 from 'react';
2
+ import { SVGProps, ComponentType } from 'react';
3
+ import * as class_variance_authority_types from 'class-variance-authority/types';
4
+ import { VariantProps } from 'class-variance-authority';
5
+ import * as react_jsx_runtime from 'react/jsx-runtime';
6
+
7
+ declare const buttonVariants: (props?: ({
8
+ variant?: "glow" | "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | "surface" | "cta" | "cta-gradient" | "danger-subtle" | "danger-quiet" | "hyperlink" | "h1" | "h2" | "h3" | "quiet" | null | undefined;
9
+ size?: "default" | "cta" | "xs" | "sm" | "lg" | "xl" | "cta-lg" | "icon-sm" | "icon" | "icon-lg" | "icon-xl" | null | undefined;
10
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
11
+ interface ButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
12
+ asChild?: boolean;
13
+ }
14
+ declare const Button: React$1.ForwardRefExoticComponent<ButtonProps & React$1.RefAttributes<HTMLButtonElement>>;
15
+
16
+ type IconGlyphComponent = ComponentType<SVGProps<SVGSVGElement>>;
17
+ type IconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
18
+ interface IconGlyphProps extends SVGProps<SVGSVGElement> {
19
+ glyph: IconGlyphComponent;
20
+ size?: IconSize;
21
+ className?: string;
22
+ }
23
+ /** Draws one glyph component at the icon scale, without the name lookup. */
24
+ declare function IconGlyph({ glyph: Glyph, size, className, ...props }: IconGlyphProps): react_jsx_runtime.JSX.Element;
25
+
26
+ declare const sizes: {
27
+ readonly sm: "icon-sm";
28
+ readonly md: "icon";
29
+ readonly lg: "icon-lg";
30
+ };
31
+ interface GlyphButtonProps extends Omit<ButtonProps, 'size' | 'variant' | 'children' | 'aria-label'> {
32
+ /** What the button does. It is the accessible name and the tooltip; an icon alone names nothing. */
33
+ label: string;
34
+ /** The glyph component (`Close` from `kaleido-ui/icons`), or an element for a glyph that changes (a spinner). */
35
+ icon: IconGlyphComponent | React$1.ReactElement;
36
+ /** sm 32 px for row and inline actions, md 40 px (default) for toolbars and close, lg 50 px for headers and action rows. */
37
+ size?: keyof typeof sizes;
38
+ /**
39
+ * `quiet` (default) for close, back, clear, copy, open; `surface` for an
40
+ * action the screen offers (paste, refresh, edit); `secondary` for the one
41
+ * solid violet action. The danger looks follow Button's names, lightest
42
+ * first: `danger-quiet` tints only on hover, for a row's delete where a
43
+ * filled square would be too loud; `danger-subtle` rests in the danger
44
+ * tint, for an action that deletes or revokes and for the controls of an
45
+ * error surface (a destructive toast's copy and close); `destructive` is
46
+ * the solid red fill, the danger counterpart of `secondary`.
47
+ */
48
+ variant?: 'quiet' | 'surface' | 'secondary' | 'danger-quiet' | 'danger-subtle' | 'destructive';
49
+ /**
50
+ * `square` (default), the rounded square; `circle` for a button that sits on
51
+ * a line or over content rather than in a row, like the swap card's flip.
52
+ */
53
+ shape?: 'square' | 'circle';
54
+ }
55
+ /**
56
+ * `IconButton` for a glyph passed as a component rather than by name, so the
57
+ * bundle carries that glyph and not the whole set.
58
+ */
59
+ declare const GlyphButton: React$1.ForwardRefExoticComponent<GlyphButtonProps & React$1.RefAttributes<HTMLButtonElement>>;
60
+
61
+ type IconName = 'account_balance_wallet' | 'add' | 'add_circle' | 'apps' | 'arrow_back' | 'arrow_circle_up' | 'arrow_downward' | 'arrow_forward' | 'arrow_outward' | 'arrow_upward' | 'autorenew' | 'bolt' | 'bug_report' | 'call_received' | 'cancel' | 'check' | 'check_circle' | 'chevron_left' | 'chevron_right' | 'close' | 'cloud_upload' | 'code' | 'content_copy' | 'content_paste' | 'currency_bitcoin' | 'delete' | 'delete_sweep' | 'description' | 'download' | 'edit' | 'error' | 'expand_less' | 'expand_more' | 'fingerprint' | 'folder_zip' | 'grid_view' | 'help' | 'hexagon' | 'history' | 'hourglass_top' | 'hub' | 'info' | 'inventory_2' | 'ios_share' | 'key' | 'layers' | 'link' | 'lock' | 'lock_open' | 'menu' | 'north_east' | 'open_in_new' | 'person' | 'power_settings_new' | 'qr_code_2' | 'qr_code_scanner' | 'radio_button_unchecked' | 'receipt_long' | 'refresh' | 'remove' | 'remove_circle' | 'restore' | 'rocket_launch' | 'schedule' | 'science' | 'chat_bubble' | 'event' | 'play_arrow' | 'psychology' | 'search' | 'settings' | 'shield' | 'smart_toy' | 'south_west' | 'swap_horiz' | 'swap_vert' | 'sync' | 'sync_alt' | 'timer' | 'timer_off' | 'token' | 'tune' | 'upload' | 'upload_file' | 'verified' | 'visibility' | 'visibility_off' | 'warning' | 'history_toggle_off' | 'payments' | 'toll' | 'trending_up' | 'touch_app' | 'dark_mode' | 'light_mode' | 'palette' | 'keyboard_arrow_up' | 'keyboard_arrow_down' | 'swap_calls' | 'progress_activity' | 'bar_chart' | 'stacked_bar_chart' | 'show_chart' | 'area_chart' | 'scatter_plot' | 'table_rows' | 'language' | 'notifications';
62
+ /**
63
+ * Whether a string names a glyph in the set. Components that take an icon as a
64
+ * string use this to draw it, and draw nothing for an unknown name: printing
65
+ * the name, as a font ligature does without its font, is the one outcome that
66
+ * is always wrong.
67
+ */
68
+ declare const isIconName: (value: unknown) => value is IconName;
69
+
70
+ interface IconProps<N extends string = IconName> extends Omit<IconGlyphProps, 'glyph'> {
71
+ name: N;
72
+ filled?: boolean;
73
+ }
74
+ /**
75
+ * Builds an `Icon` that knows only the glyphs passed in, so a bundle carries
76
+ * those and no others. The default `Icon` is this over the whole set.
77
+ *
78
+ * import { createIcon, Close, Check } from 'kaleido-ui/icons'
79
+ * const Icon = createIcon({ close: Close, check: Check })
80
+ * <Icon name="close" size="sm" />
81
+ */
82
+ declare function createIcon<N extends string>(outlined: Record<N, IconGlyphComponent>, filled?: Partial<Record<N, IconGlyphComponent>>): ({ name, filled: preferFilled, ...props }: IconProps<N>) => react_jsx_runtime.JSX.Element | null;
83
+ declare const Icon: ({ name, filled: preferFilled, ...props }: IconProps<IconName>) => react_jsx_runtime.JSX.Element | null;
84
+ declare const Icons: {
85
+ ArrowBack: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
86
+ ArrowForward: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
87
+ Close: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
88
+ Menu: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
89
+ Send: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
90
+ Receive: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
91
+ Swap: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
92
+ Copy: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
93
+ Paste: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
94
+ Refresh: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
95
+ QrCode: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
96
+ QrScanner: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
97
+ Check: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
98
+ CheckCircle: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
99
+ Error: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
100
+ Warning: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
101
+ Info: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
102
+ Pending: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
103
+ Progress: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
104
+ Wallet: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
105
+ Activity: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
106
+ Settings: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
107
+ Lightning: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
108
+ Bitcoin: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
109
+ Ark: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
110
+ Lock: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
111
+ Unlock: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
112
+ Shield: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
113
+ Key: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
114
+ Fingerprint: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
115
+ Visibility: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
116
+ VisibilityOff: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
117
+ ExpandMore: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
118
+ ExpandLess: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
119
+ ChevronRight: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
120
+ OpenInNew: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
121
+ Search: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
122
+ Add: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
123
+ Download: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
124
+ Upload: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
125
+ Edit: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
126
+ Delete: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
127
+ Timer: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
128
+ Person: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
129
+ Hub: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
130
+ Verified: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
131
+ SmartToy: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
132
+ Psychology: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
133
+ };
134
+
135
+ export { type ButtonProps as B, type GlyphButtonProps as G, type IconName as I, type IconProps as a, Button as b, GlyphButton as c, Icon as d, IconGlyph as e, type IconGlyphComponent as f, type IconGlyphProps as g, type IconSize as h, Icons as i, buttonVariants as j, createIcon as k, isIconName as l };
@@ -0,0 +1,135 @@
1
+ import * as React$1 from 'react';
2
+ import { SVGProps, ComponentType } from 'react';
3
+ import * as class_variance_authority_types from 'class-variance-authority/types';
4
+ import { VariantProps } from 'class-variance-authority';
5
+ import * as react_jsx_runtime from 'react/jsx-runtime';
6
+
7
+ declare const buttonVariants: (props?: ({
8
+ variant?: "glow" | "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | "surface" | "cta" | "cta-gradient" | "danger-subtle" | "danger-quiet" | "hyperlink" | "h1" | "h2" | "h3" | "quiet" | null | undefined;
9
+ size?: "default" | "cta" | "xs" | "sm" | "lg" | "xl" | "cta-lg" | "icon-sm" | "icon" | "icon-lg" | "icon-xl" | null | undefined;
10
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
11
+ interface ButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
12
+ asChild?: boolean;
13
+ }
14
+ declare const Button: React$1.ForwardRefExoticComponent<ButtonProps & React$1.RefAttributes<HTMLButtonElement>>;
15
+
16
+ type IconGlyphComponent = ComponentType<SVGProps<SVGSVGElement>>;
17
+ type IconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
18
+ interface IconGlyphProps extends SVGProps<SVGSVGElement> {
19
+ glyph: IconGlyphComponent;
20
+ size?: IconSize;
21
+ className?: string;
22
+ }
23
+ /** Draws one glyph component at the icon scale, without the name lookup. */
24
+ declare function IconGlyph({ glyph: Glyph, size, className, ...props }: IconGlyphProps): react_jsx_runtime.JSX.Element;
25
+
26
+ declare const sizes: {
27
+ readonly sm: "icon-sm";
28
+ readonly md: "icon";
29
+ readonly lg: "icon-lg";
30
+ };
31
+ interface GlyphButtonProps extends Omit<ButtonProps, 'size' | 'variant' | 'children' | 'aria-label'> {
32
+ /** What the button does. It is the accessible name and the tooltip; an icon alone names nothing. */
33
+ label: string;
34
+ /** The glyph component (`Close` from `kaleido-ui/icons`), or an element for a glyph that changes (a spinner). */
35
+ icon: IconGlyphComponent | React$1.ReactElement;
36
+ /** sm 32 px for row and inline actions, md 40 px (default) for toolbars and close, lg 50 px for headers and action rows. */
37
+ size?: keyof typeof sizes;
38
+ /**
39
+ * `quiet` (default) for close, back, clear, copy, open; `surface` for an
40
+ * action the screen offers (paste, refresh, edit); `secondary` for the one
41
+ * solid violet action. The danger looks follow Button's names, lightest
42
+ * first: `danger-quiet` tints only on hover, for a row's delete where a
43
+ * filled square would be too loud; `danger-subtle` rests in the danger
44
+ * tint, for an action that deletes or revokes and for the controls of an
45
+ * error surface (a destructive toast's copy and close); `destructive` is
46
+ * the solid red fill, the danger counterpart of `secondary`.
47
+ */
48
+ variant?: 'quiet' | 'surface' | 'secondary' | 'danger-quiet' | 'danger-subtle' | 'destructive';
49
+ /**
50
+ * `square` (default), the rounded square; `circle` for a button that sits on
51
+ * a line or over content rather than in a row, like the swap card's flip.
52
+ */
53
+ shape?: 'square' | 'circle';
54
+ }
55
+ /**
56
+ * `IconButton` for a glyph passed as a component rather than by name, so the
57
+ * bundle carries that glyph and not the whole set.
58
+ */
59
+ declare const GlyphButton: React$1.ForwardRefExoticComponent<GlyphButtonProps & React$1.RefAttributes<HTMLButtonElement>>;
60
+
61
+ type IconName = 'account_balance_wallet' | 'add' | 'add_circle' | 'apps' | 'arrow_back' | 'arrow_circle_up' | 'arrow_downward' | 'arrow_forward' | 'arrow_outward' | 'arrow_upward' | 'autorenew' | 'bolt' | 'bug_report' | 'call_received' | 'cancel' | 'check' | 'check_circle' | 'chevron_left' | 'chevron_right' | 'close' | 'cloud_upload' | 'code' | 'content_copy' | 'content_paste' | 'currency_bitcoin' | 'delete' | 'delete_sweep' | 'description' | 'download' | 'edit' | 'error' | 'expand_less' | 'expand_more' | 'fingerprint' | 'folder_zip' | 'grid_view' | 'help' | 'hexagon' | 'history' | 'hourglass_top' | 'hub' | 'info' | 'inventory_2' | 'ios_share' | 'key' | 'layers' | 'link' | 'lock' | 'lock_open' | 'menu' | 'north_east' | 'open_in_new' | 'person' | 'power_settings_new' | 'qr_code_2' | 'qr_code_scanner' | 'radio_button_unchecked' | 'receipt_long' | 'refresh' | 'remove' | 'remove_circle' | 'restore' | 'rocket_launch' | 'schedule' | 'science' | 'chat_bubble' | 'event' | 'play_arrow' | 'psychology' | 'search' | 'settings' | 'shield' | 'smart_toy' | 'south_west' | 'swap_horiz' | 'swap_vert' | 'sync' | 'sync_alt' | 'timer' | 'timer_off' | 'token' | 'tune' | 'upload' | 'upload_file' | 'verified' | 'visibility' | 'visibility_off' | 'warning' | 'history_toggle_off' | 'payments' | 'toll' | 'trending_up' | 'touch_app' | 'dark_mode' | 'light_mode' | 'palette' | 'keyboard_arrow_up' | 'keyboard_arrow_down' | 'swap_calls' | 'progress_activity' | 'bar_chart' | 'stacked_bar_chart' | 'show_chart' | 'area_chart' | 'scatter_plot' | 'table_rows' | 'language' | 'notifications';
62
+ /**
63
+ * Whether a string names a glyph in the set. Components that take an icon as a
64
+ * string use this to draw it, and draw nothing for an unknown name: printing
65
+ * the name, as a font ligature does without its font, is the one outcome that
66
+ * is always wrong.
67
+ */
68
+ declare const isIconName: (value: unknown) => value is IconName;
69
+
70
+ interface IconProps<N extends string = IconName> extends Omit<IconGlyphProps, 'glyph'> {
71
+ name: N;
72
+ filled?: boolean;
73
+ }
74
+ /**
75
+ * Builds an `Icon` that knows only the glyphs passed in, so a bundle carries
76
+ * those and no others. The default `Icon` is this over the whole set.
77
+ *
78
+ * import { createIcon, Close, Check } from 'kaleido-ui/icons'
79
+ * const Icon = createIcon({ close: Close, check: Check })
80
+ * <Icon name="close" size="sm" />
81
+ */
82
+ declare function createIcon<N extends string>(outlined: Record<N, IconGlyphComponent>, filled?: Partial<Record<N, IconGlyphComponent>>): ({ name, filled: preferFilled, ...props }: IconProps<N>) => react_jsx_runtime.JSX.Element | null;
83
+ declare const Icon: ({ name, filled: preferFilled, ...props }: IconProps<IconName>) => react_jsx_runtime.JSX.Element | null;
84
+ declare const Icons: {
85
+ ArrowBack: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
86
+ ArrowForward: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
87
+ Close: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
88
+ Menu: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
89
+ Send: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
90
+ Receive: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
91
+ Swap: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
92
+ Copy: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
93
+ Paste: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
94
+ Refresh: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
95
+ QrCode: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
96
+ QrScanner: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
97
+ Check: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
98
+ CheckCircle: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
99
+ Error: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
100
+ Warning: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
101
+ Info: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
102
+ Pending: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
103
+ Progress: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
104
+ Wallet: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
105
+ Activity: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
106
+ Settings: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
107
+ Lightning: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
108
+ Bitcoin: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
109
+ Ark: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
110
+ Lock: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
111
+ Unlock: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
112
+ Shield: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
113
+ Key: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
114
+ Fingerprint: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
115
+ Visibility: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
116
+ VisibilityOff: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
117
+ ExpandMore: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
118
+ ExpandLess: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
119
+ ChevronRight: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
120
+ OpenInNew: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
121
+ Search: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
122
+ Add: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
123
+ Download: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
124
+ Upload: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
125
+ Edit: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
126
+ Delete: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
127
+ Timer: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
128
+ Person: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
129
+ Hub: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
130
+ Verified: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
131
+ SmartToy: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
132
+ Psychology: (props: Omit<IconProps, "name">) => react_jsx_runtime.JSX.Element;
133
+ };
134
+
135
+ export { type ButtonProps as B, type GlyphButtonProps as G, type IconName as I, type IconProps as a, Button as b, GlyphButton as c, Icon as d, IconGlyph as e, type IconGlyphComponent as f, type IconGlyphProps as g, type IconSize as h, Icons as i, buttonVariants as j, createIcon as k, isIconName as l };
@@ -1435,60 +1435,6 @@ function ModeToggle({ icon, size = 40, onToggle }) {
1435
1435
  );
1436
1436
  }
1437
1437
 
1438
- // src/tokens/app-semantic.ts
1439
- var appSemanticDark = {
1440
- // Near-black ramp with a violet cast (~245 deg, low saturation): the
1441
- // surfaces lean violet, the accents carry the colour — green first.
1442
- "surface-base": "14 13 22",
1443
- // #0E0D16 — deepest bg, sidebar
1444
- "surface-raised": "20 19 30",
1445
- // #14131E — page body bg
1446
- "surface-overlay": "28 26 42",
1447
- // #1C1A2A — card bg
1448
- "surface-elevated": "40 38 56",
1449
- // #282638 — sections inside cards
1450
- "surface-high": "54 51 74",
1451
- // #36334A — hover/active highlights
1452
- // An inset box inside a card (DisclosureCard), used at /40: on dark it is
1453
- // the muted fill; on light a cool grey, so the box still reads on white.
1454
- "surface-inset": "20 19 30",
1455
- // #14131E
1456
- primary: "21 233 154",
1457
- // #15E99A
1458
- "primary-emphasis": "18 201 126",
1459
- // #12C97E
1460
- "primary-foreground": "14 13 22",
1461
- secondary: "111 50 255",
1462
- // #6F32FF — brand violet
1463
- "secondary-emphasis": "84 32 204",
1464
- // #5420CC
1465
- "secondary-foreground": "255 255 255",
1466
- "secondary-content": "164 138 255",
1467
- // #A48AFF — violet text/icons on dark
1468
- "content-primary": "237 236 246",
1469
- // #EDECF6 — cool white
1470
- "content-secondary": "152 149 180",
1471
- // #9895B4
1472
- "content-tertiary": "98 95 124",
1473
- // #625F7C
1474
- "content-inverse": "14 13 22",
1475
- "border-subtle": "38 36 54",
1476
- // #262436
1477
- "border-default": "52 50 72",
1478
- // #343248
1479
- "border-strong": "21 233 154",
1480
- "status-success": "34 197 94",
1481
- "status-danger": "248 113 113",
1482
- "status-warning": "245 158 11",
1483
- "status-info": "56 189 248",
1484
- divider: "86 83 110",
1485
- // #56536E
1486
- // Spark's mark is white on dark, black on light.
1487
- "network-spark": "255 255 255"
1488
- // #FFFFFF
1489
- };
1490
- var appSemanticOrder = Object.keys(appSemanticDark);
1491
-
1492
1438
  // src/tokens/typography.ts
1493
1439
  var fontFamily = {
1494
1440
  display: "'Satoshi', system-ui, -apple-system, sans-serif",
@@ -1618,84 +1564,12 @@ var shadowLight = {
1618
1564
  toast: `0 0 0 1px ${lightInk(0.06)}, 0 10px 28px -10px ${lightInk(0.2)}`
1619
1565
  };
1620
1566
 
1621
- // src/tokens/brand.ts
1622
- var brandMark = {
1623
- violet: "#6F32FF",
1624
- green: "#17B581",
1625
- mint: "#15E99A"
1626
- };
1627
- var themedForeground = {
1628
- light: {
1629
- // Brand green at full saturation (no red), as light as it goes and still
1630
- // clears 4.5:1 on every light surface (4.55:1 on #EFEFF4).
1631
- brand: "#007D49",
1632
- "accent-send-fg": "#6428F0",
1633
- "accent-recv-fg": "#007D49",
1634
- "success-fg": "#076A43",
1635
- // a shade under brand: it also sits on a 14% mint tint
1636
- // Tailwind -800 shades: -700 measured only 3.7 to 4.3:1 on the light ramp.
1637
- "warning-fg": "#92400E",
1638
- "danger-fg": "#991B1B",
1639
- "info-fg": "#1E40AF",
1640
- "network-bitcoin-fg": "#92400E",
1641
- "network-lightning-fg": "#854D0E",
1642
- "network-liquid-fg": "#115E59",
1643
- "network-arkade-fg": "#5B21B6",
1644
- "network-spark-fg": "#0D0C14",
1645
- // Spark is black on light
1646
- "network-rgb-fg": "#991B1B",
1647
- "network-taproot-fg": "#464A69"
1648
- },
1649
- dark: {
1650
- brand: colors.primary,
1651
- "accent-send-fg": "#AD94FB",
1652
- "accent-recv-fg": colors.primary,
1653
- "success-fg": colors.success,
1654
- "warning-fg": colors.warning,
1655
- // danger #E53535 and info #4290FF are 3.0:1 and 3.2:1 on the elevated
1656
- // surface. Same hues, lifted until they clear 4.5:1.
1657
- "danger-fg": "#FF9999",
1658
- "info-fg": "#8BBDFF",
1659
- "network-bitcoin-fg": colors.networkText.bitcoin,
1660
- "network-lightning-fg": colors.networkText.lightning,
1661
- "network-liquid-fg": colors.networkText.liquid,
1662
- // The rgb and arkade *-text tokens dip under 4.5:1 on the elevated
1663
- // surface (3.9 and 4.1), so their -fg twins are lifted a step.
1664
- "network-arkade-fg": "#B49CF5",
1665
- "network-spark-fg": colors.network.spark,
1666
- // and white on dark
1667
- "network-rgb-fg": "#F09490",
1668
- "network-taproot-fg": colors.networkText.taproot
1669
- }
1670
- };
1671
- var themedForegroundOrder = Object.keys(themedForeground.light);
1672
- var halo = {
1673
- primary: colors.tx.receive,
1674
- secondary: brandMark.violet,
1675
- blur: "110px"
1676
- };
1677
- var brandTheme = {
1678
- /** AA-safe light primary: white on it is 6.3:1, it is 5.1:1 on the light ramp. */
1679
- lightPrimary: themedForeground.light.brand,
1680
- /** Lifted dark status colours (see `themedForeground.dark`). */
1681
- darkDanger: themedForeground.dark["danger-fg"],
1682
- darkInfo: themedForeground.dark["info-fg"]
1683
- };
1684
-
1685
1567
  // src/tokens/transitions.ts
1686
1568
  var transition = {
1687
1569
  fast: "150ms ease-out",
1688
1570
  default: "200ms ease-out",
1689
1571
  slow: "300ms ease-out"
1690
1572
  };
1691
-
1692
- // src/tokens/chart.ts
1693
- var chartSeries = {
1694
- /** green, violet, azzurro, then yellow, magenta, orange */
1695
- dark: ["#17b581", "#8374da", "#179fd4", "#b3880f", "#db589e", "#de6907"],
1696
- light: ["#17b581", "#6851c3", "#0f9cd0", "#dea805", "#c34189", "#fe904d"]
1697
- };
1698
- var chartSeriesLimit = chartSeries.dark.length;
1699
1573
  // Annotate the CommonJS export names for ESM import in node:
1700
1574
  0 && (module.exports = {
1701
1575
  ActionButton,