@tempoxyz/ds 0.2.5 → 0.3.0

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 (735) hide show
  1. package/README.md +2 -0
  2. package/dist/fonts/Inter-cyrillic-ext.woff2 +0 -0
  3. package/dist/fonts/Inter-cyrillic.woff2 +0 -0
  4. package/dist/fonts/Inter-greek-ext.woff2 +0 -0
  5. package/dist/fonts/Inter-greek.woff2 +0 -0
  6. package/dist/fonts/Inter-latin-ext.woff2 +0 -0
  7. package/dist/fonts/Inter-latin.woff2 +0 -0
  8. package/dist/fonts/Inter-symbols.woff2 +0 -0
  9. package/dist/fonts/Inter-vietnamese.woff2 +0 -0
  10. package/dist/fonts/JetBrainsMono-Bold-latin.woff2 +0 -0
  11. package/dist/fonts/JetBrainsMono-Bold-other.woff2 +0 -0
  12. package/dist/fonts/JetBrainsMono-Bold.woff2 +0 -0
  13. package/dist/fonts/JetBrainsMono-Medium-latin.woff2 +0 -0
  14. package/dist/fonts/JetBrainsMono-Medium-other.woff2 +0 -0
  15. package/dist/fonts/JetBrainsMono-Medium.woff2 +0 -0
  16. package/dist/fonts/JetBrainsMono-Regular-latin.woff2 +0 -0
  17. package/dist/fonts/JetBrainsMono-Regular-other.woff2 +0 -0
  18. package/dist/fonts/JetBrainsMono-Regular.woff2 +0 -0
  19. package/dist/fonts/JetBrainsMono-SemiBold-latin.woff2 +0 -0
  20. package/dist/fonts/JetBrainsMono-SemiBold-other.woff2 +0 -0
  21. package/dist/fonts/JetBrainsMono-SemiBold.woff2 +0 -0
  22. package/dist/fonts/Pilat-Black-latin.woff2 +0 -0
  23. package/dist/fonts/Pilat-Black-other.woff2 +0 -0
  24. package/dist/fonts/Pilat-Black.woff2 +0 -0
  25. package/dist/fonts/Pilat-Bold-latin.woff2 +0 -0
  26. package/dist/fonts/Pilat-Bold-other.woff2 +0 -0
  27. package/dist/fonts/Pilat-Bold.woff2 +0 -0
  28. package/dist/fonts/Pilat-Book-latin.woff2 +0 -0
  29. package/dist/fonts/Pilat-Book-other.woff2 +0 -0
  30. package/dist/fonts/Pilat-Book.woff2 +0 -0
  31. package/dist/fonts/Pilat-Demi-latin.woff2 +0 -0
  32. package/dist/fonts/Pilat-Demi-other.woff2 +0 -0
  33. package/dist/fonts/Pilat-Demi.woff2 +0 -0
  34. package/dist/fonts/Pilat-Heavy-latin.woff2 +0 -0
  35. package/dist/fonts/Pilat-Heavy-other.woff2 +0 -0
  36. package/dist/fonts/Pilat-Heavy.woff2 +0 -0
  37. package/dist/fonts/Pilat-Light-latin.woff2 +0 -0
  38. package/dist/fonts/Pilat-Light-other.woff2 +0 -0
  39. package/dist/fonts/Pilat-Light.woff2 +0 -0
  40. package/dist/fonts/Pilat-Regular-latin.woff2 +0 -0
  41. package/dist/fonts/Pilat-Regular-other.woff2 +0 -0
  42. package/dist/fonts/Pilat-Regular.woff2 +0 -0
  43. package/dist/fonts/Pilat-Thin-latin.woff2 +0 -0
  44. package/dist/fonts/Pilat-Thin-other.woff2 +0 -0
  45. package/dist/fonts/Pilat-Thin.woff2 +0 -0
  46. package/dist/mobile/Haptics.d.ts +39 -0
  47. package/dist/mobile/Haptics.d.ts.map +1 -0
  48. package/dist/mobile/Haptics.js +51 -0
  49. package/dist/mobile/Haptics.js.map +1 -0
  50. package/dist/mobile/components/Button.d.ts.map +1 -1
  51. package/dist/mobile/components/Button.js +3 -3
  52. package/dist/mobile/components/Button.js.map +1 -1
  53. package/dist/mobile/components/IconButton.d.ts.map +1 -1
  54. package/dist/mobile/components/IconButton.js +3 -3
  55. package/dist/mobile/components/IconButton.js.map +1 -1
  56. package/dist/mobile/components/Spinner.js +1 -1
  57. package/dist/mobile/components/Spinner.js.map +1 -1
  58. package/dist/mobile/components/TextButton.d.ts.map +1 -1
  59. package/dist/mobile/components/TextButton.js +3 -3
  60. package/dist/mobile/components/TextButton.js.map +1 -1
  61. package/dist/mobile/components/TextInput.js +1 -1
  62. package/dist/mobile/components/TextInput.js.map +1 -1
  63. package/dist/mobile/components/Toast.js +1 -1
  64. package/dist/mobile/components/Toast.js.map +1 -1
  65. package/dist/mobile/components/Toggle.d.ts.map +1 -1
  66. package/dist/mobile/components/Toggle.js +2 -2
  67. package/dist/mobile/components/Toggle.js.map +1 -1
  68. package/dist/mobile/index.d.ts +2 -0
  69. package/dist/mobile/index.d.ts.map +1 -1
  70. package/dist/mobile/index.js +2 -0
  71. package/dist/mobile/index.js.map +1 -1
  72. package/dist/mobile/useColor.d.ts +23 -0
  73. package/dist/mobile/useColor.d.ts.map +1 -0
  74. package/dist/mobile/useColor.js +29 -0
  75. package/dist/mobile/useColor.js.map +1 -0
  76. package/dist/oxlint/rules/PreferComponent.js +6 -6
  77. package/dist/oxlint/rules/PreferComponent.js.map +1 -1
  78. package/dist/web/components/Accordion.css +1 -1
  79. package/dist/web/components/Accordion.d.ts +7 -7
  80. package/dist/web/components/Accordion.js +8 -8
  81. package/dist/web/components/Accordion.js.map +1 -1
  82. package/dist/web/components/Accordion.js.zyzz.json +1 -1
  83. package/dist/web/components/AgentLogo.css +1 -0
  84. package/dist/web/components/AgentLogo.d.ts +206 -0
  85. package/dist/web/components/AgentLogo.d.ts.map +1 -0
  86. package/dist/web/components/AgentLogo.js +86 -0
  87. package/dist/web/components/AgentLogo.js.map +1 -0
  88. package/dist/web/components/AgentLogo.js.zyzz.json +1 -0
  89. package/dist/web/components/Alert.css +1 -0
  90. package/dist/web/components/Alert.d.ts +156 -0
  91. package/dist/web/components/Alert.d.ts.map +1 -0
  92. package/dist/web/components/Alert.js +92 -0
  93. package/dist/web/components/Alert.js.map +1 -0
  94. package/dist/web/components/Alert.js.zyzz.json +1 -0
  95. package/dist/web/components/AlertDialog.d.ts +40 -28
  96. package/dist/web/components/AlertDialog.d.ts.map +1 -1
  97. package/dist/web/components/AlertDialog.js +31 -36
  98. package/dist/web/components/AlertDialog.js.map +1 -1
  99. package/dist/web/components/AlertDialog.js.zyzz.json +1 -1
  100. package/dist/web/components/Amount.css +1 -1
  101. package/dist/web/components/Amount.d.ts +5 -5
  102. package/dist/web/components/Amount.d.ts.map +1 -1
  103. package/dist/web/components/Amount.js +3 -3
  104. package/dist/web/components/Amount.js.map +1 -1
  105. package/dist/web/components/Amount.js.zyzz.json +1 -1
  106. package/dist/web/components/AmountInput.css +1 -1
  107. package/dist/web/components/AmountInput.d.ts +20 -39
  108. package/dist/web/components/AmountInput.d.ts.map +1 -1
  109. package/dist/web/components/AmountInput.js +32 -38
  110. package/dist/web/components/AmountInput.js.map +1 -1
  111. package/dist/web/components/AmountInput.js.zyzz.json +1 -1
  112. package/dist/web/components/AppShell.css +1 -1
  113. package/dist/web/components/AppShell.d.ts +65 -29
  114. package/dist/web/components/AppShell.d.ts.map +1 -1
  115. package/dist/web/components/AppShell.js +33 -21
  116. package/dist/web/components/AppShell.js.map +1 -1
  117. package/dist/web/components/AppShell.js.zyzz.json +1 -1
  118. package/dist/web/components/AssetChip.css +1 -0
  119. package/dist/web/components/AssetChip.d.ts +38 -0
  120. package/dist/web/components/AssetChip.d.ts.map +1 -0
  121. package/dist/web/components/AssetChip.js +47 -0
  122. package/dist/web/components/AssetChip.js.map +1 -0
  123. package/dist/web/components/AssetChip.js.zyzz.json +1 -0
  124. package/dist/web/components/Autocomplete.d.ts +2 -2
  125. package/dist/web/components/Autocomplete.js +4 -4
  126. package/dist/web/components/Autocomplete.js.map +1 -1
  127. package/dist/web/components/Autocomplete.js.zyzz.json +1 -1
  128. package/dist/web/components/Avatar.css +1 -1
  129. package/dist/web/components/Avatar.d.ts +40 -115
  130. package/dist/web/components/Avatar.d.ts.map +1 -1
  131. package/dist/web/components/Avatar.js +19 -34
  132. package/dist/web/components/Avatar.js.map +1 -1
  133. package/dist/web/components/Avatar.js.zyzz.json +1 -1
  134. package/dist/web/components/Badge.css +1 -0
  135. package/dist/web/components/Badge.d.ts +134 -0
  136. package/dist/web/components/Badge.d.ts.map +1 -0
  137. package/dist/web/components/Badge.js +38 -0
  138. package/dist/web/components/Badge.js.map +1 -0
  139. package/dist/web/components/Badge.js.zyzz.json +1 -0
  140. package/dist/web/components/Banner.css +1 -1
  141. package/dist/web/components/Banner.d.ts +12 -12
  142. package/dist/web/components/Banner.d.ts.map +1 -1
  143. package/dist/web/components/Banner.js +6 -6
  144. package/dist/web/components/Banner.js.map +1 -1
  145. package/dist/web/components/Banner.js.zyzz.json +1 -1
  146. package/dist/web/components/BarChart.css +1 -0
  147. package/dist/web/components/BarChart.d.ts +155 -0
  148. package/dist/web/components/BarChart.d.ts.map +1 -0
  149. package/dist/web/components/BarChart.js +119 -0
  150. package/dist/web/components/BarChart.js.map +1 -0
  151. package/dist/web/components/BarChart.js.zyzz.json +1 -0
  152. package/dist/web/components/Breadcrumbs.css +1 -1
  153. package/dist/web/components/Breadcrumbs.d.ts +6 -6
  154. package/dist/web/components/Breadcrumbs.js +6 -6
  155. package/dist/web/components/Breadcrumbs.js.map +1 -1
  156. package/dist/web/components/Breadcrumbs.js.zyzz.json +1 -1
  157. package/dist/web/components/Button.css +1 -1
  158. package/dist/web/components/Button.d.ts +166 -35
  159. package/dist/web/components/Button.d.ts.map +1 -1
  160. package/dist/web/components/Button.js +14 -10
  161. package/dist/web/components/Button.js.map +1 -1
  162. package/dist/web/components/Button.js.zyzz.json +1 -1
  163. package/dist/web/components/ButtonGroup.css +1 -0
  164. package/dist/web/components/ButtonGroup.d.ts +56 -0
  165. package/dist/web/components/ButtonGroup.d.ts.map +1 -0
  166. package/dist/web/components/ButtonGroup.js +33 -0
  167. package/dist/web/components/ButtonGroup.js.map +1 -0
  168. package/dist/web/components/ButtonGroup.js.zyzz.json +1 -0
  169. package/dist/web/components/Calendar.css +1 -1
  170. package/dist/web/components/Calendar.d.ts.map +1 -1
  171. package/dist/web/components/Calendar.js +8 -8
  172. package/dist/web/components/Calendar.js.map +1 -1
  173. package/dist/web/components/Calendar.js.zyzz.json +1 -1
  174. package/dist/web/components/Checkbox.css +1 -1
  175. package/dist/web/components/Checkbox.d.ts +11 -11
  176. package/dist/web/components/Checkbox.d.ts.map +1 -1
  177. package/dist/web/components/Checkbox.js +9 -6
  178. package/dist/web/components/Checkbox.js.map +1 -1
  179. package/dist/web/components/Checkbox.js.zyzz.json +1 -1
  180. package/dist/web/components/CheckboxGroup.css +1 -1
  181. package/dist/web/components/CheckboxGroup.js +1 -1
  182. package/dist/web/components/CheckboxGroup.js.zyzz.json +1 -1
  183. package/dist/web/components/ChoiceGroup.css +1 -1
  184. package/dist/web/components/ChoiceGroup.d.ts +44 -16
  185. package/dist/web/components/ChoiceGroup.d.ts.map +1 -1
  186. package/dist/web/components/ChoiceGroup.js +33 -9
  187. package/dist/web/components/ChoiceGroup.js.map +1 -1
  188. package/dist/web/components/ChoiceGroup.js.zyzz.json +1 -1
  189. package/dist/web/components/Choicebox.css +1 -1
  190. package/dist/web/components/Choicebox.d.ts +9 -9
  191. package/dist/web/components/Choicebox.d.ts.map +1 -1
  192. package/dist/web/components/Choicebox.js +11 -11
  193. package/dist/web/components/Choicebox.js.map +1 -1
  194. package/dist/web/components/Choicebox.js.zyzz.json +1 -1
  195. package/dist/web/components/Combobox.css +1 -1
  196. package/dist/web/components/Combobox.d.ts +2 -2
  197. package/dist/web/components/Combobox.d.ts.map +1 -1
  198. package/dist/web/components/Combobox.js +8 -8
  199. package/dist/web/components/Combobox.js.map +1 -1
  200. package/dist/web/components/Combobox.js.zyzz.json +1 -1
  201. package/dist/web/components/Container.css +1 -1
  202. package/dist/web/components/Container.js +1 -3
  203. package/dist/web/components/Container.js.zyzz.json +1 -1
  204. package/dist/web/components/CopyButton.css +1 -1
  205. package/dist/web/components/CopyButton.js +4 -4
  206. package/dist/web/components/CopyButton.js.map +1 -1
  207. package/dist/web/components/CopyButton.js.zyzz.json +1 -1
  208. package/dist/web/components/DatePicker.css +1 -1
  209. package/dist/web/components/DatePicker.d.ts +37 -56
  210. package/dist/web/components/DatePicker.d.ts.map +1 -1
  211. package/dist/web/components/DatePicker.js +8 -8
  212. package/dist/web/components/DatePicker.js.map +1 -1
  213. package/dist/web/components/DatePicker.js.zyzz.json +1 -1
  214. package/dist/web/components/Dialog.css +1 -1
  215. package/dist/web/components/Dialog.d.ts +189 -20
  216. package/dist/web/components/Dialog.d.ts.map +1 -1
  217. package/dist/web/components/Dialog.js +94 -27
  218. package/dist/web/components/Dialog.js.map +1 -1
  219. package/dist/web/components/Dialog.js.zyzz.json +1 -1
  220. package/dist/web/components/Drawer.css +1 -1
  221. package/dist/web/components/Drawer.d.ts +7 -2
  222. package/dist/web/components/Drawer.d.ts.map +1 -1
  223. package/dist/web/components/Drawer.js +13 -7
  224. package/dist/web/components/Drawer.js.map +1 -1
  225. package/dist/web/components/Drawer.js.zyzz.json +1 -1
  226. package/dist/web/components/Empty.css +1 -1
  227. package/dist/web/components/Empty.d.ts +2 -0
  228. package/dist/web/components/Empty.d.ts.map +1 -1
  229. package/dist/web/components/Empty.js +7 -5
  230. package/dist/web/components/Empty.js.map +1 -1
  231. package/dist/web/components/Empty.js.zyzz.json +1 -1
  232. package/dist/web/components/Field.css +1 -1
  233. package/dist/web/components/Field.d.ts +16 -21
  234. package/dist/web/components/Field.d.ts.map +1 -1
  235. package/dist/web/components/Field.js +38 -36
  236. package/dist/web/components/Field.js.map +1 -1
  237. package/dist/web/components/Field.js.zyzz.json +1 -1
  238. package/dist/web/components/Fieldset.css +1 -1
  239. package/dist/web/components/Fieldset.d.ts +9 -18
  240. package/dist/web/components/Fieldset.d.ts.map +1 -1
  241. package/dist/web/components/Fieldset.js +12 -15
  242. package/dist/web/components/Fieldset.js.map +1 -1
  243. package/dist/web/components/Fieldset.js.zyzz.json +1 -1
  244. package/dist/web/components/Frame.css +1 -1
  245. package/dist/web/components/Frame.d.ts +13 -19
  246. package/dist/web/components/Frame.d.ts.map +1 -1
  247. package/dist/web/components/Frame.js +9 -11
  248. package/dist/web/components/Frame.js.map +1 -1
  249. package/dist/web/components/Frame.js.zyzz.json +1 -1
  250. package/dist/web/components/Gauge.css +1 -1
  251. package/dist/web/components/Gauge.d.ts +2 -2
  252. package/dist/web/components/Gauge.d.ts.map +1 -1
  253. package/dist/web/components/Gauge.js +6 -6
  254. package/dist/web/components/Gauge.js.map +1 -1
  255. package/dist/web/components/Gauge.js.zyzz.json +1 -1
  256. package/dist/web/components/Grid.css +1 -1
  257. package/dist/web/components/Grid.js +1 -3
  258. package/dist/web/components/Grid.js.zyzz.json +1 -1
  259. package/dist/web/components/Hex.css +1 -1
  260. package/dist/web/components/Hex.d.ts +10 -10
  261. package/dist/web/components/Hex.js +6 -6
  262. package/dist/web/components/Hex.js.map +1 -1
  263. package/dist/web/components/Hex.js.zyzz.json +1 -1
  264. package/dist/web/components/IconTile.css +1 -0
  265. package/dist/web/components/IconTile.d.ts +62 -0
  266. package/dist/web/components/IconTile.d.ts.map +1 -0
  267. package/dist/web/components/IconTile.js +28 -0
  268. package/dist/web/components/IconTile.js.map +1 -0
  269. package/dist/web/components/IconTile.js.zyzz.json +1 -0
  270. package/dist/web/components/Identicon.css +1 -1
  271. package/dist/web/components/Identicon.d.ts +1 -0
  272. package/dist/web/components/Identicon.d.ts.map +1 -1
  273. package/dist/web/components/Identicon.js +1 -3
  274. package/dist/web/components/Identicon.js.map +1 -1
  275. package/dist/web/components/Identicon.js.zyzz.json +1 -1
  276. package/dist/web/components/Inline.css +1 -1
  277. package/dist/web/components/Inline.js +1 -3
  278. package/dist/web/components/Inline.js.zyzz.json +1 -1
  279. package/dist/web/components/Inset.css +1 -1
  280. package/dist/web/components/Inset.js +1 -3
  281. package/dist/web/components/Inset.js.zyzz.json +1 -1
  282. package/dist/web/components/Kbd.css +1 -1
  283. package/dist/web/components/Kbd.d.ts +7 -7
  284. package/dist/web/components/Kbd.js +3 -3
  285. package/dist/web/components/Kbd.js.map +1 -1
  286. package/dist/web/components/Kbd.js.zyzz.json +1 -1
  287. package/dist/web/components/ListGroup.css +1 -0
  288. package/dist/web/components/ListGroup.d.ts +483 -0
  289. package/dist/web/components/ListGroup.d.ts.map +1 -0
  290. package/dist/web/components/ListGroup.js +266 -0
  291. package/dist/web/components/ListGroup.js.map +1 -0
  292. package/dist/web/components/ListGroup.js.zyzz.json +1 -0
  293. package/dist/web/components/LoadingDots.css +1 -1
  294. package/dist/web/components/LoadingDots.d.ts.map +1 -1
  295. package/dist/web/components/LoadingDots.js +3 -3
  296. package/dist/web/components/LoadingDots.js.map +1 -1
  297. package/dist/web/components/LoadingDots.js.zyzz.json +1 -1
  298. package/dist/web/components/Menu.css +1 -1
  299. package/dist/web/components/Menu.d.ts +39 -20
  300. package/dist/web/components/Menu.d.ts.map +1 -1
  301. package/dist/web/components/Menu.js +15 -10
  302. package/dist/web/components/Menu.js.map +1 -1
  303. package/dist/web/components/Menu.js.zyzz.json +1 -1
  304. package/dist/web/components/NetworkLogo.css +1 -0
  305. package/dist/web/components/NetworkLogo.d.ts +58 -0
  306. package/dist/web/components/NetworkLogo.d.ts.map +1 -0
  307. package/dist/web/components/NetworkLogo.js +40 -0
  308. package/dist/web/components/NetworkLogo.js.map +1 -0
  309. package/dist/web/components/NetworkLogo.js.zyzz.json +1 -0
  310. package/dist/web/components/NumberField.css +1 -1
  311. package/dist/web/components/NumberField.d.ts +3 -3
  312. package/dist/web/components/NumberField.d.ts.map +1 -1
  313. package/dist/web/components/NumberField.js +8 -8
  314. package/dist/web/components/NumberField.js.map +1 -1
  315. package/dist/web/components/NumberField.js.zyzz.json +1 -1
  316. package/dist/web/components/OtpField.css +1 -1
  317. package/dist/web/components/OtpField.d.ts +8 -68
  318. package/dist/web/components/OtpField.d.ts.map +1 -1
  319. package/dist/web/components/OtpField.js +13 -10
  320. package/dist/web/components/OtpField.js.map +1 -1
  321. package/dist/web/components/OtpField.js.zyzz.json +1 -1
  322. package/dist/web/components/Pagination.css +1 -1
  323. package/dist/web/components/Pagination.d.ts +16 -14
  324. package/dist/web/components/Pagination.d.ts.map +1 -1
  325. package/dist/web/components/Pagination.js +6 -6
  326. package/dist/web/components/Pagination.js.map +1 -1
  327. package/dist/web/components/Pagination.js.zyzz.json +1 -1
  328. package/dist/web/components/Popover.css +1 -1
  329. package/dist/web/components/Popover.js +5 -5
  330. package/dist/web/components/Popover.js.map +1 -1
  331. package/dist/web/components/Popover.js.zyzz.json +1 -1
  332. package/dist/web/components/Progress.css +1 -1
  333. package/dist/web/components/Progress.d.ts +2 -2
  334. package/dist/web/components/Progress.d.ts.map +1 -1
  335. package/dist/web/components/Progress.js +6 -6
  336. package/dist/web/components/Progress.js.map +1 -1
  337. package/dist/web/components/Progress.js.zyzz.json +1 -1
  338. package/dist/web/components/Qr.css +1 -1
  339. package/dist/web/components/Qr.d.ts +1 -1
  340. package/dist/web/components/Qr.js +1 -3
  341. package/dist/web/components/Qr.js.map +1 -1
  342. package/dist/web/components/Qr.js.zyzz.json +1 -1
  343. package/dist/web/components/RadioGroup.css +1 -1
  344. package/dist/web/components/RadioGroup.d.ts.map +1 -1
  345. package/dist/web/components/RadioGroup.js +4 -4
  346. package/dist/web/components/RadioGroup.js.map +1 -1
  347. package/dist/web/components/RadioGroup.js.zyzz.json +1 -1
  348. package/dist/web/components/SecretValue.css +1 -1
  349. package/dist/web/components/SecretValue.d.ts +7 -7
  350. package/dist/web/components/SecretValue.js +4 -4
  351. package/dist/web/components/SecretValue.js.map +1 -1
  352. package/dist/web/components/SecretValue.js.zyzz.json +1 -1
  353. package/dist/web/components/Select.css +1 -1
  354. package/dist/web/components/Select.d.ts +64 -2
  355. package/dist/web/components/Select.d.ts.map +1 -1
  356. package/dist/web/components/Select.js +24 -7
  357. package/dist/web/components/Select.js.map +1 -1
  358. package/dist/web/components/Select.js.zyzz.json +1 -1
  359. package/dist/web/components/Separator.css +1 -1
  360. package/dist/web/components/Separator.d.ts +17 -3
  361. package/dist/web/components/Separator.d.ts.map +1 -1
  362. package/dist/web/components/Separator.js +40 -5
  363. package/dist/web/components/Separator.js.map +1 -1
  364. package/dist/web/components/Separator.js.zyzz.json +1 -1
  365. package/dist/web/components/SidebarMenu.css +1 -1
  366. package/dist/web/components/SidebarMenu.d.ts +186 -39
  367. package/dist/web/components/SidebarMenu.d.ts.map +1 -1
  368. package/dist/web/components/SidebarMenu.js +91 -19
  369. package/dist/web/components/SidebarMenu.js.map +1 -1
  370. package/dist/web/components/SidebarMenu.js.zyzz.json +1 -1
  371. package/dist/web/components/Skeleton.css +1 -1
  372. package/dist/web/components/Skeleton.d.ts +5 -3
  373. package/dist/web/components/Skeleton.d.ts.map +1 -1
  374. package/dist/web/components/Skeleton.js +1 -3
  375. package/dist/web/components/Skeleton.js.map +1 -1
  376. package/dist/web/components/Skeleton.js.zyzz.json +1 -1
  377. package/dist/web/components/Slider.css +1 -1
  378. package/dist/web/components/Slider.d.ts.map +1 -1
  379. package/dist/web/components/Slider.js +6 -6
  380. package/dist/web/components/Slider.js.map +1 -1
  381. package/dist/web/components/Slider.js.zyzz.json +1 -1
  382. package/dist/web/components/Snippet.css +1 -1
  383. package/dist/web/components/Snippet.d.ts +27 -65
  384. package/dist/web/components/Snippet.d.ts.map +1 -1
  385. package/dist/web/components/Snippet.js +48 -11
  386. package/dist/web/components/Snippet.js.map +1 -1
  387. package/dist/web/components/Snippet.js.zyzz.json +1 -1
  388. package/dist/web/components/Spinner.css +1 -1
  389. package/dist/web/components/Spinner.d.ts +25 -16
  390. package/dist/web/components/Spinner.d.ts.map +1 -1
  391. package/dist/web/components/Spinner.js +13 -8
  392. package/dist/web/components/Spinner.js.map +1 -1
  393. package/dist/web/components/Spinner.js.zyzz.json +1 -1
  394. package/dist/web/components/SplitBar.css +1 -0
  395. package/dist/web/components/SplitBar.d.ts +99 -0
  396. package/dist/web/components/SplitBar.d.ts.map +1 -0
  397. package/dist/web/components/SplitBar.js +49 -0
  398. package/dist/web/components/SplitBar.js.map +1 -0
  399. package/dist/web/components/SplitBar.js.zyzz.json +1 -0
  400. package/dist/web/components/SplitButton.css +1 -1
  401. package/dist/web/components/SplitButton.d.ts +4 -1
  402. package/dist/web/components/SplitButton.d.ts.map +1 -1
  403. package/dist/web/components/SplitButton.js +2 -2
  404. package/dist/web/components/SplitButton.js.map +1 -1
  405. package/dist/web/components/SplitButton.js.zyzz.json +1 -1
  406. package/dist/web/components/Stack.css +1 -1
  407. package/dist/web/components/Stack.js +1 -3
  408. package/dist/web/components/Stack.js.zyzz.json +1 -1
  409. package/dist/web/components/StatusChip.css +1 -0
  410. package/dist/web/components/StatusChip.d.ts +162 -0
  411. package/dist/web/components/StatusChip.d.ts.map +1 -0
  412. package/dist/web/components/StatusChip.js +37 -0
  413. package/dist/web/components/StatusChip.js.map +1 -0
  414. package/dist/web/components/StatusChip.js.zyzz.json +1 -0
  415. package/dist/web/components/StatusRow.css +1 -0
  416. package/dist/web/components/StatusRow.d.ts +121 -0
  417. package/dist/web/components/StatusRow.d.ts.map +1 -0
  418. package/dist/web/components/StatusRow.js +75 -0
  419. package/dist/web/components/StatusRow.js.map +1 -0
  420. package/dist/web/components/StatusRow.js.zyzz.json +1 -0
  421. package/dist/web/components/Stepper.css +1 -1
  422. package/dist/web/components/Stepper.d.ts +10 -7
  423. package/dist/web/components/Stepper.d.ts.map +1 -1
  424. package/dist/web/components/Stepper.js +7 -6
  425. package/dist/web/components/Stepper.js.map +1 -1
  426. package/dist/web/components/Stepper.js.zyzz.json +1 -1
  427. package/dist/web/components/Surface.css +1 -1
  428. package/dist/web/components/Surface.d.ts +56 -119
  429. package/dist/web/components/Surface.d.ts.map +1 -1
  430. package/dist/web/components/Surface.js +19 -14
  431. package/dist/web/components/Surface.js.map +1 -1
  432. package/dist/web/components/Surface.js.zyzz.json +1 -1
  433. package/dist/web/components/Switch.css +1 -1
  434. package/dist/web/components/Switch.d.ts +14 -18
  435. package/dist/web/components/Switch.d.ts.map +1 -1
  436. package/dist/web/components/Switch.js +14 -16
  437. package/dist/web/components/Switch.js.map +1 -1
  438. package/dist/web/components/Switch.js.zyzz.json +1 -1
  439. package/dist/web/components/Table.css +1 -1
  440. package/dist/web/components/Table.d.ts +152 -67
  441. package/dist/web/components/Table.d.ts.map +1 -1
  442. package/dist/web/components/Table.js +91 -25
  443. package/dist/web/components/Table.js.map +1 -1
  444. package/dist/web/components/Table.js.zyzz.json +1 -1
  445. package/dist/web/components/Tabs.css +1 -1
  446. package/dist/web/components/Tabs.d.ts +49 -42
  447. package/dist/web/components/Tabs.d.ts.map +1 -1
  448. package/dist/web/components/Tabs.js +44 -15
  449. package/dist/web/components/Tabs.js.map +1 -1
  450. package/dist/web/components/Tabs.js.zyzz.json +1 -1
  451. package/dist/web/components/TempoLogo.css +1 -0
  452. package/dist/web/components/TempoLogo.d.ts +47 -0
  453. package/dist/web/components/TempoLogo.d.ts.map +1 -0
  454. package/dist/web/components/TempoLogo.js +48 -0
  455. package/dist/web/components/TempoLogo.js.map +1 -0
  456. package/dist/web/components/TempoLogo.js.zyzz.json +1 -0
  457. package/dist/web/components/TextInput.css +1 -0
  458. package/dist/web/components/{Input.d.ts → TextInput.d.ts} +27 -18
  459. package/dist/web/components/TextInput.d.ts.map +1 -0
  460. package/dist/web/components/TextInput.js +138 -0
  461. package/dist/web/components/TextInput.js.map +1 -0
  462. package/dist/web/components/TextInput.js.zyzz.json +1 -0
  463. package/dist/web/components/Textarea.css +1 -1
  464. package/dist/web/components/Textarea.d.ts +29 -74
  465. package/dist/web/components/Textarea.d.ts.map +1 -1
  466. package/dist/web/components/Textarea.js +5 -14
  467. package/dist/web/components/Textarea.js.map +1 -1
  468. package/dist/web/components/Textarea.js.zyzz.json +1 -1
  469. package/dist/web/components/Toast.css +1 -1
  470. package/dist/web/components/Toast.d.ts +4 -4
  471. package/dist/web/components/Toast.d.ts.map +1 -1
  472. package/dist/web/components/Toast.js +10 -10
  473. package/dist/web/components/Toast.js.map +1 -1
  474. package/dist/web/components/Toast.js.zyzz.json +1 -1
  475. package/dist/web/components/Token.css +1 -1
  476. package/dist/web/components/Token.d.ts +32 -90
  477. package/dist/web/components/Token.d.ts.map +1 -1
  478. package/dist/web/components/Token.js +26 -90
  479. package/dist/web/components/Token.js.map +1 -1
  480. package/dist/web/components/Token.js.zyzz.json +1 -1
  481. package/dist/web/components/TokenLogo.css +1 -0
  482. package/dist/web/components/TokenLogo.d.ts +117 -0
  483. package/dist/web/components/TokenLogo.d.ts.map +1 -0
  484. package/dist/web/components/TokenLogo.js +112 -0
  485. package/dist/web/components/TokenLogo.js.map +1 -0
  486. package/dist/web/components/TokenLogo.js.zyzz.json +1 -0
  487. package/dist/web/components/Tooltip.css +1 -1
  488. package/dist/web/components/Tooltip.js +2 -2
  489. package/dist/web/components/Tooltip.js.map +1 -1
  490. package/dist/web/components/Tooltip.js.zyzz.json +1 -1
  491. package/dist/web/components/VerificationCode.css +1 -0
  492. package/dist/web/components/VerificationCode.d.ts +47 -0
  493. package/dist/web/components/VerificationCode.d.ts.map +1 -0
  494. package/dist/web/components/VerificationCode.js +55 -0
  495. package/dist/web/components/VerificationCode.js.map +1 -0
  496. package/dist/web/components/VerificationCode.js.zyzz.json +1 -0
  497. package/dist/web/components/Visual.css +1 -0
  498. package/dist/web/components/Visual.d.ts +65 -0
  499. package/dist/web/components/Visual.d.ts.map +1 -0
  500. package/dist/web/components/Visual.js +51 -0
  501. package/dist/web/components/Visual.js.map +1 -0
  502. package/dist/web/components/Visual.js.zyzz.json +1 -0
  503. package/dist/web/components/internal/Field.css +1 -1
  504. package/dist/web/components/internal/Field.d.ts +41 -87
  505. package/dist/web/components/internal/Field.d.ts.map +1 -1
  506. package/dist/web/components/internal/Field.js +9 -8
  507. package/dist/web/components/internal/Field.js.map +1 -1
  508. package/dist/web/components/internal/Field.js.zyzz.json +1 -1
  509. package/dist/web/components/internal/InputGroup.css +1 -1
  510. package/dist/web/components/internal/InputGroup.d.ts +38 -99
  511. package/dist/web/components/internal/InputGroup.d.ts.map +1 -1
  512. package/dist/web/components/internal/InputGroup.js +6 -8
  513. package/dist/web/components/internal/InputGroup.js.map +1 -1
  514. package/dist/web/components/internal/InputGroup.js.zyzz.json +1 -1
  515. package/dist/web/components/internal/Listbox.css +1 -1
  516. package/dist/web/components/internal/Listbox.d.ts +8 -8
  517. package/dist/web/components/internal/Listbox.js +13 -13
  518. package/dist/web/components/internal/Listbox.js.map +1 -1
  519. package/dist/web/components/internal/Listbox.js.zyzz.json +1 -1
  520. package/dist/web/components/internal/RowDisabled.d.ts +3 -0
  521. package/dist/web/components/internal/RowDisabled.d.ts.map +1 -0
  522. package/dist/web/components/internal/RowDisabled.js +9 -0
  523. package/dist/web/components/internal/RowDisabled.js.map +1 -0
  524. package/dist/web/components/internal/RowsSize.d.ts +2 -3
  525. package/dist/web/components/internal/RowsSize.d.ts.map +1 -1
  526. package/dist/web/components/internal/RowsSize.js +3 -3
  527. package/dist/web/components/internal/RowsSize.js.map +1 -1
  528. package/dist/web/index.d.ts +18 -6
  529. package/dist/web/index.d.ts.map +1 -1
  530. package/dist/web/index.js +18 -6
  531. package/dist/web/index.js.map +1 -1
  532. package/dist/web/index.js.zyzz.json +1 -1
  533. package/dist/web/vars.d.ts +591 -699
  534. package/dist/web/vars.d.ts.map +1 -1
  535. package/dist/web/vars.js +7 -6
  536. package/dist/web/vars.js.map +1 -1
  537. package/dist/web/vars.js.zyzz.json +1 -1
  538. package/dist/web/zyzz.config.d.ts +2935 -3480
  539. package/dist/web/zyzz.config.d.ts.map +1 -1
  540. package/dist/web/zyzz.config.js +39 -3
  541. package/dist/web/zyzz.config.js.map +1 -1
  542. package/dist/web/zyzz.config.js.zyzz.json +1 -1
  543. package/package.json +180 -4
  544. package/src/fonts/Inter-cyrillic-ext.woff2 +0 -0
  545. package/src/fonts/Inter-cyrillic.woff2 +0 -0
  546. package/src/fonts/Inter-greek-ext.woff2 +0 -0
  547. package/src/fonts/Inter-greek.woff2 +0 -0
  548. package/src/fonts/Inter-latin-ext.woff2 +0 -0
  549. package/src/fonts/Inter-latin.woff2 +0 -0
  550. package/src/fonts/Inter-symbols.woff2 +0 -0
  551. package/src/fonts/Inter-vietnamese.woff2 +0 -0
  552. package/src/fonts/JetBrainsMono-Bold-latin.woff2 +0 -0
  553. package/src/fonts/JetBrainsMono-Bold-other.woff2 +0 -0
  554. package/src/fonts/JetBrainsMono-Bold.woff2 +0 -0
  555. package/src/fonts/JetBrainsMono-Medium-latin.woff2 +0 -0
  556. package/src/fonts/JetBrainsMono-Medium-other.woff2 +0 -0
  557. package/src/fonts/JetBrainsMono-Medium.woff2 +0 -0
  558. package/src/fonts/{Geist-OFL.txt → JetBrainsMono-OFL.txt} +4 -3
  559. package/src/fonts/JetBrainsMono-Regular-latin.woff2 +0 -0
  560. package/src/fonts/JetBrainsMono-Regular-other.woff2 +0 -0
  561. package/src/fonts/JetBrainsMono-Regular.woff2 +0 -0
  562. package/src/fonts/JetBrainsMono-SemiBold-latin.woff2 +0 -0
  563. package/src/fonts/JetBrainsMono-SemiBold-other.woff2 +0 -0
  564. package/src/fonts/JetBrainsMono-SemiBold.woff2 +0 -0
  565. package/src/fonts/Pilat-Black-latin.woff2 +0 -0
  566. package/src/fonts/Pilat-Black-other.woff2 +0 -0
  567. package/src/fonts/Pilat-Black.woff2 +0 -0
  568. package/src/fonts/Pilat-Bold-latin.woff2 +0 -0
  569. package/src/fonts/Pilat-Bold-other.woff2 +0 -0
  570. package/src/fonts/Pilat-Bold.woff2 +0 -0
  571. package/src/fonts/Pilat-Book-latin.woff2 +0 -0
  572. package/src/fonts/Pilat-Book-other.woff2 +0 -0
  573. package/src/fonts/Pilat-Book.woff2 +0 -0
  574. package/src/fonts/Pilat-Demi-latin.woff2 +0 -0
  575. package/src/fonts/Pilat-Demi-other.woff2 +0 -0
  576. package/src/fonts/Pilat-Demi.woff2 +0 -0
  577. package/src/fonts/Pilat-Heavy-latin.woff2 +0 -0
  578. package/src/fonts/Pilat-Heavy-other.woff2 +0 -0
  579. package/src/fonts/Pilat-Heavy.woff2 +0 -0
  580. package/src/fonts/Pilat-Light-latin.woff2 +0 -0
  581. package/src/fonts/Pilat-Light-other.woff2 +0 -0
  582. package/src/fonts/Pilat-Light.woff2 +0 -0
  583. package/src/fonts/Pilat-Regular-latin.woff2 +0 -0
  584. package/src/fonts/Pilat-Regular-other.woff2 +0 -0
  585. package/src/fonts/Pilat-Regular.woff2 +0 -0
  586. package/src/fonts/Pilat-Thin-latin.woff2 +0 -0
  587. package/src/fonts/Pilat-Thin-other.woff2 +0 -0
  588. package/src/fonts/Pilat-Thin.woff2 +0 -0
  589. package/src/fonts/README.md +22 -1
  590. package/src/mobile/Haptics.ts +55 -0
  591. package/src/mobile/README.md +97 -1
  592. package/src/mobile/components/Button.tsx +3 -3
  593. package/src/mobile/components/IconButton.tsx +3 -3
  594. package/src/mobile/components/Spinner.tsx +1 -1
  595. package/src/mobile/components/TextButton.tsx +3 -3
  596. package/src/mobile/components/TextInput.tsx +1 -1
  597. package/src/mobile/components/Toast.tsx +1 -1
  598. package/src/mobile/components/Toggle.tsx +2 -2
  599. package/src/mobile/index.ts +2 -0
  600. package/src/mobile/useColor.ts +31 -0
  601. package/src/oxlint/rules/PreferComponent.ts +6 -6
  602. package/src/web/README.md +7 -7
  603. package/src/web/components/Accordion.tsx +8 -8
  604. package/src/web/components/AgentLogo.tsx +330 -0
  605. package/src/web/components/Alert.tsx +301 -0
  606. package/src/web/components/AlertDialog.tsx +47 -111
  607. package/src/web/components/Amount.tsx +6 -6
  608. package/src/web/components/AmountInput.tsx +59 -134
  609. package/src/web/components/AppShell.tsx +95 -36
  610. package/src/web/components/AssetChip.tsx +110 -0
  611. package/src/web/components/Autocomplete.tsx +4 -4
  612. package/src/web/components/Avatar.tsx +42 -119
  613. package/src/web/components/Badge.tsx +120 -0
  614. package/src/web/components/Banner.tsx +13 -11
  615. package/src/web/components/BarChart.tsx +427 -0
  616. package/src/web/components/Breadcrumbs.tsx +7 -7
  617. package/src/web/components/Button.tsx +156 -42
  618. package/src/web/components/ButtonGroup.tsx +59 -0
  619. package/src/web/components/Calendar.tsx +15 -13
  620. package/src/web/components/Checkbox.tsx +14 -11
  621. package/src/web/components/ChoiceGroup.tsx +107 -26
  622. package/src/web/components/Choicebox.tsx +30 -28
  623. package/src/web/components/Combobox.tsx +10 -8
  624. package/src/web/components/CopyButton.tsx +1 -1
  625. package/src/web/components/DatePicker.tsx +42 -61
  626. package/src/web/components/Dialog.tsx +267 -71
  627. package/src/web/components/Drawer.tsx +45 -18
  628. package/src/web/components/Empty.tsx +13 -8
  629. package/src/web/components/Field.tsx +78 -132
  630. package/src/web/components/Fieldset.tsx +16 -37
  631. package/src/web/components/Frame.tsx +13 -20
  632. package/src/web/components/Gauge.tsx +4 -4
  633. package/src/web/components/Hex.tsx +11 -11
  634. package/src/web/components/IconTile.tsx +57 -0
  635. package/src/web/components/Identicon.tsx +6 -1
  636. package/src/web/components/Kbd.tsx +8 -8
  637. package/src/web/components/ListGroup.tsx +776 -0
  638. package/src/web/components/LoadingDots.tsx +1 -0
  639. package/src/web/components/Menu.tsx +50 -35
  640. package/src/web/components/NetworkLogo.tsx +208 -0
  641. package/src/web/components/NumberField.tsx +18 -33
  642. package/src/web/components/OtpField.tsx +51 -102
  643. package/src/web/components/Pagination.tsx +16 -14
  644. package/src/web/components/Popover.tsx +8 -8
  645. package/src/web/components/Progress.tsx +7 -5
  646. package/src/web/components/Qr.tsx +1 -1
  647. package/src/web/components/RadioGroup.tsx +9 -7
  648. package/src/web/components/SecretValue.tsx +11 -11
  649. package/src/web/components/Select.tsx +87 -26
  650. package/src/web/components/Separator.tsx +95 -7
  651. package/src/web/components/SidebarMenu.tsx +294 -51
  652. package/src/web/components/Skeleton.tsx +5 -5
  653. package/src/web/components/Slider.tsx +12 -6
  654. package/src/web/components/Snippet.tsx +134 -75
  655. package/src/web/components/Spinner.tsx +38 -12
  656. package/src/web/components/SplitBar.tsx +158 -0
  657. package/src/web/components/SplitButton.tsx +26 -17
  658. package/src/web/components/StatusChip.tsx +138 -0
  659. package/src/web/components/StatusRow.tsx +162 -0
  660. package/src/web/components/Stepper.tsx +11 -8
  661. package/src/web/components/Surface.tsx +70 -95
  662. package/src/web/components/Switch.tsx +25 -29
  663. package/src/web/components/Table.tsx +281 -70
  664. package/src/web/components/Tabs.tsx +93 -50
  665. package/src/web/components/TempoLogo.tsx +89 -0
  666. package/src/web/components/{Input.tsx → TextInput.tsx} +87 -118
  667. package/src/web/components/Textarea.tsx +33 -78
  668. package/src/web/components/Toast.tsx +24 -22
  669. package/src/web/components/Token.tsx +106 -172
  670. package/src/web/components/TokenLogo.tsx +217 -0
  671. package/src/web/components/Tooltip.tsx +3 -3
  672. package/src/web/components/VerificationCode.tsx +97 -0
  673. package/src/web/components/Visual.tsx +166 -0
  674. package/src/web/components/internal/Field.ts +63 -72
  675. package/src/web/components/internal/InputGroup.ts +44 -101
  676. package/src/web/components/internal/Listbox.ts +20 -20
  677. package/src/web/components/internal/RowDisabled.ts +9 -0
  678. package/src/web/components/internal/RowsSize.ts +3 -5
  679. package/src/web/components/visuals/Passkey.svg +21 -0
  680. package/src/web/index.ts +18 -6
  681. package/src/web/logos/Base.svg +10 -0
  682. package/src/web/logos/Ethereum.svg +16 -0
  683. package/src/web/logos/HyperEVM.svg +27 -0
  684. package/src/web/logos/Polygon.svg +15 -0
  685. package/src/web/logos/README.md +14 -0
  686. package/src/web/logos/Solana.svg +11 -0
  687. package/src/web/logos/Tempo.svg +11 -0
  688. package/src/web/vars.ts +481 -526
  689. package/src/web/zyzz.config.ts +326 -12
  690. package/dist/fonts/GeistMono-Variable.woff2 +0 -0
  691. package/dist/mobile/internal/useColor.d.ts +0 -4
  692. package/dist/mobile/internal/useColor.d.ts.map +0 -1
  693. package/dist/mobile/internal/useColor.js +0 -12
  694. package/dist/mobile/internal/useColor.js.map +0 -1
  695. package/dist/web/components/AlertDialog.css +0 -1
  696. package/dist/web/components/Callout.css +0 -1
  697. package/dist/web/components/Callout.d.ts +0 -161
  698. package/dist/web/components/Callout.d.ts.map +0 -1
  699. package/dist/web/components/Callout.js +0 -83
  700. package/dist/web/components/Callout.js.map +0 -1
  701. package/dist/web/components/Callout.js.zyzz.json +0 -1
  702. package/dist/web/components/IconChip.css +0 -1
  703. package/dist/web/components/IconChip.d.ts +0 -53
  704. package/dist/web/components/IconChip.d.ts.map +0 -1
  705. package/dist/web/components/IconChip.js +0 -29
  706. package/dist/web/components/IconChip.js.map +0 -1
  707. package/dist/web/components/IconChip.js.zyzz.json +0 -1
  708. package/dist/web/components/Input.css +0 -1
  709. package/dist/web/components/Input.d.ts.map +0 -1
  710. package/dist/web/components/Input.js +0 -118
  711. package/dist/web/components/Input.js.map +0 -1
  712. package/dist/web/components/Input.js.zyzz.json +0 -1
  713. package/dist/web/components/Rows.css +0 -1
  714. package/dist/web/components/Rows.d.ts +0 -432
  715. package/dist/web/components/Rows.d.ts.map +0 -1
  716. package/dist/web/components/Rows.js +0 -160
  717. package/dist/web/components/Rows.js.map +0 -1
  718. package/dist/web/components/Rows.js.zyzz.json +0 -1
  719. package/dist/web/components/Tag.css +0 -1
  720. package/dist/web/components/Tag.d.ts +0 -171
  721. package/dist/web/components/Tag.d.ts.map +0 -1
  722. package/dist/web/components/Tag.js +0 -52
  723. package/dist/web/components/Tag.js.map +0 -1
  724. package/dist/web/components/Tag.js.zyzz.json +0 -1
  725. package/dist/web/components/internal/FieldVariant.d.ts +0 -4
  726. package/dist/web/components/internal/FieldVariant.d.ts.map +0 -1
  727. package/dist/web/components/internal/FieldVariant.js +0 -4
  728. package/dist/web/components/internal/FieldVariant.js.map +0 -1
  729. package/src/fonts/GeistMono-Variable.woff2 +0 -0
  730. package/src/mobile/internal/useColor.ts +0 -13
  731. package/src/web/components/Callout.tsx +0 -241
  732. package/src/web/components/IconChip.tsx +0 -54
  733. package/src/web/components/Rows.tsx +0 -529
  734. package/src/web/components/Tag.tsx +0 -149
  735. package/src/web/components/internal/FieldVariant.ts +0 -6
@@ -0,0 +1,776 @@
1
+ import * as BaseUiMeter from '@base-ui/react/meter'
2
+ import * as BaseUiRadio from '@base-ui/react/radio'
3
+ import * as BaseUiRadioGroup from '@base-ui/react/radio-group'
4
+ import { useRender } from '@base-ui/react/use-render'
5
+ import type { ComponentPropsWithRef, MouseEvent, ReactNode } from 'react'
6
+ import type * as zyzz from 'zyzz'
7
+ import { ChevronRight } from '../icons/ChevronRight.js'
8
+ import { style, variants } from '../zyzz.config.js'
9
+ import * as RowDisabled from './internal/RowDisabled.js'
10
+ import * as RowsSize from './internal/RowsSize.js'
11
+
12
+ /**
13
+ * A stack of rows for the facts a person checks, the choices they tap, and short checklists.
14
+ * `ListGroup` renders `ListGroup.Root`. A row is a `button` when it has an `action` or `onClick`, any element
15
+ * passed to `render` (such as a link), a `label` around a radio when it has a `value`, and a plain
16
+ * `div` otherwise.
17
+ *
18
+ * - Name each group with a `ListGroup.Heading` placed right before it.
19
+ * - Write row text that names the destination, since the chevron is hidden from assistive
20
+ * technology.
21
+ * - Avoid nesting buttons or links inside a pressable row.
22
+ * - Put rows that pick one option, each with a `value`, in a `ListGroup.RadioGroup`.
23
+ *
24
+ * @example
25
+ * <ListGroup.Heading>Fees</ListGroup.Heading>
26
+ * <ListGroup variant="boxed">
27
+ * <ListGroup.Row>
28
+ * <ListGroup.Label>Network fee</ListGroup.Label>
29
+ * 0.001 USDC
30
+ * </ListGroup.Row>
31
+ * </ListGroup>
32
+ *
33
+ * @see {@link https://base-ui.com/react/utils/use-render | Base UI useRender}
34
+ * @see {@link https://base-ui.com/react/components/meter | Base UI Meter}
35
+ * @see {@link https://base-ui.com/react/components/radio | Base UI Radio}
36
+ * @see {@link https://www.w3.org/WAI/ARIA/apg/patterns/radio/ | WAI-ARIA APG Radio Group pattern}
37
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Roles/list_role | MDN list role}
38
+ * @see {@link https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html | WCAG 2.2 Info and Relationships}
39
+ * @see {@link https://www.w3.org/WAI/WCAG22/Understanding/name-role-value.html | WCAG 2.2 Name, Role, Value}
40
+ * @see {@link https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html | WCAG 2.2 Target Size (Minimum)}
41
+ */
42
+ export function ListGroup(props: ListGroup.Props) {
43
+ return <ListGroup.Root {...props} />
44
+ }
45
+
46
+ export namespace ListGroup {
47
+ export type Props = Root.Props
48
+
49
+ /**
50
+ * Lays out `AssetChip` elements in a row 4px apart, under a `ListGroup.Title` in
51
+ * `ListGroup.Info`, such as the assets that a network supports. It wraps onto more lines when
52
+ * the chips run out of room.
53
+ */
54
+ export function Chips(props: Chips.Props) {
55
+ const { className, vars, ...attributes } = props
56
+
57
+ return <span {...attributes} {...styles.chips({ className, style: props.style, vars })} />
58
+ }
59
+
60
+ export namespace Chips {
61
+ export type Props = ComponentPropsWithRef<'span'> & zyzz.Props.Variants<typeof styles.chips>
62
+ }
63
+
64
+ /** Secondary text under a `ListGroup.Title`, usually inside `ListGroup.Info`. */
65
+ export function Description(props: Description.Props) {
66
+ const { className, vars, ...attributes } = props
67
+
68
+ return (
69
+ <span
70
+ {...attributes}
71
+ data-description=""
72
+ {...styles.description({ className, style: props.style, vars })}
73
+ />
74
+ )
75
+ }
76
+
77
+ export namespace Description {
78
+ export type Props = ComponentPropsWithRef<'span'> &
79
+ zyzz.Props.Variants<typeof styles.description>
80
+ }
81
+
82
+ /**
83
+ * Names the group of rows that follows it, such as Fees or Contacts, with 8px below. Renders a
84
+ * `div`. Pass a heading element through `render`, such as `<h3 />`, when the group starts a
85
+ * section.
86
+ */
87
+ export function Heading(props: Heading.Props) {
88
+ const { className, ref, render, vars, ...attributes } = props
89
+
90
+ return useRender({
91
+ defaultTagName: 'div',
92
+ props: { ...attributes, ...styles.heading({ className, style: props.style, vars }) },
93
+ ref,
94
+ render,
95
+ })
96
+ }
97
+
98
+ export namespace Heading {
99
+ export type Props = useRender.ComponentProps<'div'> & zyzz.Props.Variants<typeof styles.heading>
100
+ }
101
+
102
+ /**
103
+ * A leading 16px icon in `content.tertiary`, such as the globe before a suggested prompt. It sets
104
+ * `aria-hidden`, so the row text carries the meaning.
105
+ */
106
+ export function Icon(props: Icon.Props) {
107
+ const { className, vars, ...attributes } = props
108
+
109
+ return (
110
+ <span
111
+ aria-hidden="true"
112
+ {...attributes}
113
+ {...styles.icon({ className, style: props.style, vars })}
114
+ />
115
+ )
116
+ }
117
+
118
+ export namespace Icon {
119
+ export type Props = ComponentPropsWithRef<'span'> & zyzz.Props.Variants<typeof styles.icon>
120
+ }
121
+
122
+ /**
123
+ * Stacks a `ListGroup.Title` above a `ListGroup.Description`, beside a leading avatar or logo and a
124
+ * trailing control. A row that holds it pads 12px above and below. `large` sets a 16px title 2px
125
+ * above a monospace description, for the row that introduces a `boxed` group, such as a wallet
126
+ * above its address. Defaults to `size="medium"`.
127
+ */
128
+ export function Info(props: Info.Props) {
129
+ const { className, size, vars, ...attributes } = props
130
+
131
+ return (
132
+ <span
133
+ {...attributes}
134
+ data-info=""
135
+ {...styles.info({ className, size, style: props.style, vars })}
136
+ />
137
+ )
138
+ }
139
+
140
+ export namespace Info {
141
+ export type Props = ComponentPropsWithRef<'span'> & zyzz.Props.Variants<typeof styles.info>
142
+ }
143
+
144
+ /** The key of a key-value row. It keeps its width and pushes the content after it to the end. */
145
+ export function Label(props: Label.Props) {
146
+ const { className, vars, ...attributes } = props
147
+
148
+ return (
149
+ <span
150
+ {...attributes}
151
+ data-label=""
152
+ {...styles.label({ className, style: props.style, vars })}
153
+ />
154
+ )
155
+ }
156
+
157
+ export namespace Label {
158
+ export type Props = ComponentPropsWithRef<'span'> & zyzz.Props.Variants<typeof styles.label>
159
+ }
160
+
161
+ /**
162
+ * A 64px bar that fills to `value` between `min` (0) and `max` (100), followed by its value in
163
+ * a 112px column, so the bars of neighboring rows line up. It renders a Base UI `meter`, such as
164
+ * the share of a spending limit that an agent used.
165
+ *
166
+ * - Name it with `aria-label` or `aria-labelledby`, since the row title does not name it.
167
+ * - The visible value is hidden from assistive technology, which reads `aria-valuetext`. Pass
168
+ * `getAriaValueText` to read the same text, such as `0.001 of 10 USDC`.
169
+ *
170
+ * @example
171
+ * <ListGroup.Row>
172
+ * <AgentLogo agent="claude" />
173
+ * <ListGroup.Info>
174
+ * <ListGroup.Title>Claude</ListGroup.Title>
175
+ * </ListGroup.Info>
176
+ * <ListGroup.Meter aria-label="Spending limit used" value={66}>
177
+ * 6.60 USDC
178
+ * </ListGroup.Meter>
179
+ * </ListGroup.Row>
180
+ */
181
+ export function Meter(props: Meter.Props) {
182
+ const { children, className, vars, ...attributes } = props
183
+
184
+ return (
185
+ <BaseUiMeter.Meter.Root
186
+ {...attributes}
187
+ {...styles.meter({ className, style: props.style, vars })}
188
+ >
189
+ <BaseUiMeter.Meter.Track {...styles.meterTrack()}>
190
+ <BaseUiMeter.Meter.Indicator {...styles.meterIndicator()} />
191
+ </BaseUiMeter.Meter.Track>
192
+ <BaseUiMeter.Meter.Value
193
+ {...(children !== undefined && { children: () => children })}
194
+ {...styles.meterValue()}
195
+ />
196
+ </BaseUiMeter.Meter.Root>
197
+ )
198
+ }
199
+
200
+ export namespace Meter {
201
+ export type Props = Omit<ComponentPropsWithRef<'div'>, 'children'> &
202
+ zyzz.Props.Variants<typeof styles.meter> &
203
+ Pick<
204
+ BaseUiMeter.Meter.Root.Props,
205
+ 'format' | 'getAriaValueText' | 'locale' | 'max' | 'min' | 'value'
206
+ > & {
207
+ /** Visible value after the bar, such as an amount. Absent, it shows the percentage of the range. */
208
+ children?: ReactNode | undefined
209
+ }
210
+ }
211
+
212
+ /**
213
+ * Holds the selected `value` of the rows inside it, each a radio with its own `value`, in a
214
+ * `radiogroup` element. The rows stack 12px apart, each in its own bordered block. The group is
215
+ * one Tab stop, and arrow keys move focus and selection together. Pass the choices as a type
216
+ * argument, such as `ListGroup.RadioGroup<'maya' | 'acme'>`, to narrow `value`, `defaultValue`
217
+ * and `onValueChange`.
218
+ *
219
+ * - Name it with `aria-label` or `aria-labelledby`, phrased as the question it answers.
220
+ * - Each row's text becomes the accessible name of its radio.
221
+ *
222
+ * @example
223
+ * <ListGroup.RadioGroup aria-label="Account" defaultValue="maya">
224
+ * <ListGroup.Row value="maya">
225
+ * <ListGroup.Info>
226
+ * <ListGroup.Title>Maya Rao</ListGroup.Title>
227
+ * <ListGroup.Description>maya@studio.co</ListGroup.Description>
228
+ * </ListGroup.Info>
229
+ * </ListGroup.Row>
230
+ * </ListGroup.RadioGroup>
231
+ */
232
+ export function RadioGroup<const value extends string = string>(props: RadioGroup.Props<value>) {
233
+ const { className, vars, ...attributes } = props
234
+
235
+ return (
236
+ <BaseUiRadioGroup.RadioGroup
237
+ {...attributes}
238
+ {...styles.radioGroup({ className, style: props.style, vars })}
239
+ />
240
+ )
241
+ }
242
+
243
+ export namespace RadioGroup {
244
+ export type Props<value extends string = string> = Omit<
245
+ ComponentPropsWithRef<'div'>,
246
+ 'defaultValue' | 'onChange'
247
+ > &
248
+ zyzz.Props.Variants<typeof styles.radioGroup> &
249
+ Pick<
250
+ BaseUiRadioGroup.RadioGroup.Props<NoInfer<value>>,
251
+ | 'defaultValue'
252
+ | 'disabled'
253
+ | 'form'
254
+ | 'inputRef'
255
+ | 'name'
256
+ | 'onValueChange'
257
+ | 'readOnly'
258
+ | 'required'
259
+ | 'value'
260
+ >
261
+ }
262
+
263
+ /**
264
+ * `variant` sets the container. `plain` rows have none and line up with the content around them.
265
+ * `boxed` rows sit in a bordered block with 16px sides and 8px above and below. `spaced` rows
266
+ * sit in the same block with 16px all round, 12px apart, with 14px text and no row padding.
267
+ *
268
+ * Rows are 36px with 12px text, which fits a 32px control. `dividers={false}` drops the line
269
+ * between rows, which `spaced` never draws. Variants default to `dividers`, `variant="plain"`.
270
+ */
271
+ export function Root(props: Root.Props) {
272
+ const { className, dividers, variant, vars, ...attributes } = props
273
+
274
+ return (
275
+ <RowsSize.Context value>
276
+ <div
277
+ {...attributes}
278
+ {...styles.root({ className, dividers, style: props.style, variant, vars })}
279
+ />
280
+ </RowsSize.Context>
281
+ )
282
+ }
283
+
284
+ export namespace Root {
285
+ export type Props = ComponentPropsWithRef<'div'> & zyzz.Props.Variants<typeof styles.root>
286
+ }
287
+
288
+ /**
289
+ * Renders a button when pressable, a `label` around a radio when it has a `value`, or a link or
290
+ * other element through `render`. `ref` and attributes reach that element. Children sit 12px
291
+ * apart, such as an `Avatar`, a `ListGroup.Info` and a trailing `Button`. A pressable row's hover
292
+ * fill covers the row, flush with its content. A static row that holds a control, such as a Copy
293
+ * `Button`, takes the same fill on hover and stays static, so the control is the only target.
294
+ *
295
+ * A row with a `value` is a radio of the `ListGroup.RadioGroup` around it, in a 12px block with
296
+ * 16px sides. A press anywhere on the row selects it, and a 16px ring at its end shows the
297
+ * selection.
298
+ *
299
+ * @example
300
+ * <ListGroup>
301
+ * <ListGroup.Row action="navigation" render={<a href="/activity" />}>
302
+ * Activity
303
+ * </ListGroup.Row>
304
+ * </ListGroup>
305
+ */
306
+ export function Row(props: Row.Props) {
307
+ const {
308
+ action = 'none',
309
+ children,
310
+ className,
311
+ disabled,
312
+ ref,
313
+ render,
314
+ value,
315
+ vars,
316
+ ...attributes
317
+ } = props
318
+ const element = (() => {
319
+ if (value !== undefined) return 'radio'
320
+ if (render !== undefined) return 'render'
321
+ if (action !== 'none' || attributes.onClick !== undefined) return 'button'
322
+ return 'static'
323
+ })()
324
+ const tag = (() => {
325
+ if (element === 'button') return 'button'
326
+ if (element === 'radio') return 'label'
327
+ return 'div'
328
+ })()
329
+
330
+ return useRender({
331
+ defaultTagName: tag,
332
+ props: {
333
+ ...attributes,
334
+ ...(element === 'button' && { disabled, type: 'button' }),
335
+ ...(disabled &&
336
+ (element === 'render' || element === 'static') && { 'aria-disabled': true }),
337
+ // A link or other rendered element has no `disabled` attribute, and the `label` of a radio
338
+ // row takes presses beside its disabled radio, so both ignore the press and keep it from the
339
+ // elements around them. A static row stops the press before it reaches its children, such
340
+ // as a router link, which handle it themselves.
341
+ ...(disabled && (element === 'radio' || element === 'render') && { onClick: ignore }),
342
+ ...(disabled && element === 'static' && { onClickCapture: ignore }),
343
+ ...styles.row({ className, style: props.style, vars }),
344
+ 'data-action': action === 'none' || element === 'radio' ? undefined : action,
345
+ 'data-disabled': disabled || undefined,
346
+ // A radio row draws its own border, so it never takes a divider.
347
+ 'data-divider': element === 'radio' ? undefined : '',
348
+ 'data-radio': element === 'radio' ? '' : undefined,
349
+ children: (
350
+ <>
351
+ {/* A disabled `fieldset` disables the native controls of a static row, which takes
352
+ them out of the Tab order and keeps the row's text perceivable. `Switch` and
353
+ `Checkbox` render a `span`, so they read the row's state from the context. */}
354
+ {element === 'static' ? (
355
+ <fieldset disabled={disabled} role="none" {...styles.content()}>
356
+ <RowDisabled.Context value={Boolean(disabled)}>{children}</RowDisabled.Context>
357
+ </fieldset>
358
+ ) : (
359
+ <span {...styles.content()}>{children}</span>
360
+ )}
361
+ {action === 'navigation' && element !== 'radio' && (
362
+ <ChevronRight {...styles.indicator()} />
363
+ )}
364
+ {element === 'radio' && (
365
+ <BaseUiRadio.Radio.Root disabled={disabled} value={value} {...styles.radio()} />
366
+ )}
367
+ </>
368
+ ),
369
+ },
370
+ ref,
371
+ // A radio row is the `label` of its radio, so another element cannot replace it.
372
+ render: element === 'radio' ? undefined : render,
373
+ })
374
+ }
375
+
376
+ export namespace Row {
377
+ export type Props = Omit<useRender.ComponentProps<'div'>, 'children'> &
378
+ zyzz.Props.Variants<typeof styles.row> & {
379
+ /**
380
+ * `navigation` shows a trailing chevron for a row that opens something, and makes the row a
381
+ * button unless `render` is set. A row with a `value` ignores it.
382
+ * @default 'none'
383
+ */
384
+ action?: 'navigation' | 'none' | undefined
385
+ /** Content of the row, laid out 12px apart. */
386
+ children?: ReactNode | undefined
387
+ /**
388
+ * Dims the row to 40% and disables it: a button row sets `disabled`, a radio row disables
389
+ * its radio and ignores presses, and any other row sets `aria-disabled` and ignores
390
+ * presses. A static row also disables the native controls inside it, such as a Copy
391
+ * `Button`, and every `Switch` and `Checkbox`, which leave the Tab order and ignore presses
392
+ * and input. Its children receive no presses, and its text stays readable.
393
+ * @default false
394
+ */
395
+ disabled?: boolean | undefined
396
+ /**
397
+ * Makes the row a radio of the `ListGroup.RadioGroup` around it, identified by this value.
398
+ * A radio row ignores `render`. Absent, the row is a button, a link or static content.
399
+ */
400
+ value?: string | undefined
401
+ }
402
+ }
403
+
404
+ /** Primary text of a row, usually inside `ListGroup.Info` above a `ListGroup.Description`. */
405
+ export function Title(props: Title.Props) {
406
+ const { className, vars, ...attributes } = props
407
+
408
+ return (
409
+ <span
410
+ {...attributes}
411
+ data-title=""
412
+ {...styles.title({ className, style: props.style, vars })}
413
+ />
414
+ )
415
+ }
416
+
417
+ export namespace Title {
418
+ export type Props = ComponentPropsWithRef<'span'> & zyzz.Props.Variants<typeof styles.title>
419
+ }
420
+ }
421
+
422
+ /** Cancels a press on a disabled row and keeps it from the elements around the row. */
423
+ function ignore(event: MouseEvent<HTMLElement>) {
424
+ event.preventDefault()
425
+ event.stopPropagation()
426
+ }
427
+
428
+ namespace styles {
429
+ export const chips = variants(
430
+ { base: { columnGap: '4', display: 'flex', flexWrap: 'wrap', rowGap: '4' } },
431
+ { id: 'tds/web/list-group/chips' },
432
+ )
433
+
434
+ export const content = style(
435
+ {
436
+ alignItems: 'center',
437
+ // The content of a static row is a `fieldset`, whose border, margin, and padding are reset.
438
+ border: 'none !custom',
439
+ columnGap: '12',
440
+ display: 'flex',
441
+ flexGrow: '1 !custom',
442
+ margin: '0',
443
+ minWidth: '0',
444
+ padding: '0',
445
+ textAlign: 'start',
446
+ },
447
+ { id: 'tds/web/list-group/content' },
448
+ )
449
+
450
+ export const description = variants(
451
+ { base: { color: 'content.secondary', display: 'block', typography: 'body.b3' } },
452
+ { id: 'tds/web/list-group/description' },
453
+ )
454
+
455
+ export const heading = variants(
456
+ {
457
+ base: {
458
+ color: 'content.tertiary',
459
+ display: 'block',
460
+ margin: '0',
461
+ paddingBlockEnd: '8',
462
+ typography: 'body.b3Strong',
463
+ },
464
+ },
465
+ { id: 'tds/web/list-group/heading' },
466
+ )
467
+
468
+ export const icon = variants(
469
+ {
470
+ base: {
471
+ color: 'content.tertiary',
472
+ display: 'inline-flex',
473
+ flexShrink: '0 !custom',
474
+ fontSize: '16',
475
+ selectors: { '& > svg': { height: '16', width: '16' } },
476
+ },
477
+ },
478
+ { id: 'tds/web/list-group/icon' },
479
+ )
480
+
481
+ export const indicator = style(
482
+ { color: 'content.tertiary', flexShrink: '0 !custom', fontSize: '16' },
483
+ { id: 'tds/web/list-group/indicator' },
484
+ )
485
+
486
+ export const info = variants(
487
+ {
488
+ base: {
489
+ display: 'flex',
490
+ flexDirection: 'column',
491
+ flexGrow: '1 !custom',
492
+ minWidth: '0',
493
+ rowGap: '4',
494
+ },
495
+ defaultVariants: { size: 'medium' },
496
+ variants: {
497
+ size: {
498
+ large: {
499
+ rowGap: '2',
500
+ selectors: {
501
+ '& > [data-description]': { typography: 'mono.m1' },
502
+ '& > [data-title]': { typography: 'body.b1Strong' },
503
+ },
504
+ },
505
+ medium: {},
506
+ },
507
+ },
508
+ },
509
+ { id: 'tds/web/list-group/info' },
510
+ )
511
+
512
+ export const label = variants(
513
+ {
514
+ base: {
515
+ color: 'content.secondary',
516
+ flexShrink: '0 !custom',
517
+ marginInlineEnd: 'auto !custom',
518
+ },
519
+ },
520
+ { id: 'tds/web/list-group/label' },
521
+ )
522
+
523
+ export const meter = variants(
524
+ { base: { alignItems: 'center', columnGap: '12', display: 'flex', flexShrink: '0 !custom' } },
525
+ { id: 'tds/web/list-group/meter' },
526
+ )
527
+
528
+ // Base UI sets the width inline. The track clips the square end of the used part.
529
+ export const meterIndicator = style(
530
+ {
531
+ backgroundColor: 'content.primary',
532
+ transitionDuration: '240',
533
+ transitionProperty: 'width',
534
+ transitionTimingFunction: 'spring',
535
+ '@media (prefers-reduced-motion: reduce)': { transitionProperty: 'none' },
536
+ },
537
+ { id: 'tds/web/list-group/meter-indicator' },
538
+ )
539
+
540
+ export const meterTrack = style(
541
+ {
542
+ backgroundColor: 'container.strong',
543
+ borderRadius: 'full',
544
+ cornerShape: 'round',
545
+ flexShrink: '0 !custom',
546
+ height: '4',
547
+ overflow: 'hidden',
548
+ width: '64',
549
+ },
550
+ { id: 'tds/web/list-group/meter-track' },
551
+ )
552
+
553
+ // The value column keeps 112px, so the bars of neighboring rows line up.
554
+ export const meterValue = style(
555
+ {
556
+ color: 'content.primary',
557
+ minWidth: '7rem !custom',
558
+ textAlign: 'end',
559
+ typography: 'body.b3',
560
+ whiteSpace: 'nowrap',
561
+ },
562
+ { id: 'tds/web/list-group/meter-value' },
563
+ )
564
+
565
+ // A 16px ring that thickens from 1.5px to 5px when checked. The row draws the focus ring.
566
+ export const radio = style(
567
+ {
568
+ borderRadius: 'full',
569
+ boxShadow: 'inset 0 0 0 1.5px currentColor !custom',
570
+ boxSizing: 'border-box',
571
+ color: 'line.secondary',
572
+ cornerShape: 'round',
573
+ display: 'block',
574
+ flexShrink: '0 !custom',
575
+ height: '16',
576
+ outline: 'none !custom',
577
+ transitionDuration: '160',
578
+ transitionProperty: 'box-shadow, color',
579
+ transitionTimingFunction: 'snappy',
580
+ width: '16',
581
+ selectors: {
582
+ '&[data-checked]': {
583
+ boxShadow: 'inset 0 0 0 5px currentColor !custom',
584
+ color: 'content.primary',
585
+ },
586
+ },
587
+ '@media (prefers-reduced-motion: reduce)': { transitionProperty: 'color' },
588
+ },
589
+ { id: 'tds/web/list-group/radio' },
590
+ )
591
+
592
+ export const radioGroup = variants(
593
+ {
594
+ base: {
595
+ color: 'content.primary',
596
+ display: 'flex',
597
+ flexDirection: 'column',
598
+ rowGap: '12',
599
+ typography: 'body.b2',
600
+ },
601
+ },
602
+ { id: 'tds/web/list-group/radio-group' },
603
+ )
604
+
605
+ export const root = variants(
606
+ {
607
+ base: {
608
+ boxSizing: 'border-box',
609
+ color: 'content.primary',
610
+ display: 'block',
611
+ typography: 'body.b3',
612
+ selectors: {
613
+ '& [data-divider]': { position: 'relative' },
614
+ '& [data-divider]::before': {
615
+ backgroundColor: 'line.secondary',
616
+ content: '"" !custom',
617
+ height: '1',
618
+ insetBlockStart: '0',
619
+ insetInline: '0',
620
+ pointerEvents: 'none',
621
+ position: 'absolute',
622
+ },
623
+ '& > [data-divider]:first-child::before': { display: 'none' },
624
+ // A title over a description pads 12px, which fits a 40px leading image.
625
+ '& [data-divider]:has([data-info])': { paddingBlock: '12' },
626
+ // A row with a meter pads 10px, which centers a 24px agent logo in 44px.
627
+ '& [data-divider]:has([role="meter"])': { paddingBlock: '10' },
628
+ // A hovered row's fill would otherwise sit between two visible separators.
629
+ '& [data-divider]:is(a[href], button, [role="button"], :has(a[href], button, input, select, textarea)):not(:disabled, [data-disabled]):hover::before':
630
+ { display: 'none' },
631
+ '& [data-divider]:is(a[href], button, [role="button"], :has(a[href], button, input, select, textarea)):not(:disabled, [data-disabled]):hover + [data-divider]::before':
632
+ { display: 'none' },
633
+ },
634
+ },
635
+ defaultVariants: { dividers: true, variant: 'plain' },
636
+ variants: {
637
+ dividers: {
638
+ false: { selectors: { '& [data-divider]::before': { display: 'none' } } },
639
+ true: {},
640
+ },
641
+ // The block keeps a 16px radius with 16px sides, below the usual one and a half times.
642
+ variant: {
643
+ boxed: {
644
+ backgroundColor: 'background.secondary',
645
+ borderColor: 'line.secondary',
646
+ borderRadius: 'sm',
647
+ borderStyle: 'solid',
648
+ borderWidth: 'regular',
649
+ paddingBlock: '8',
650
+ paddingInline: '16',
651
+ selectors: {
652
+ // A large title leads the group from the block's own top padding.
653
+ '& > [data-divider]:first-child:has([data-info][data-size="large"])': {
654
+ paddingBlockStart: '0',
655
+ },
656
+ },
657
+ },
658
+ plain: {},
659
+ spaced: {
660
+ backgroundColor: 'background.secondary',
661
+ borderColor: 'line.secondary',
662
+ borderRadius: 'sm',
663
+ borderStyle: 'solid',
664
+ borderWidth: 'regular',
665
+ display: 'flex',
666
+ flexDirection: 'column',
667
+ padding: '16',
668
+ rowGap: '12',
669
+ typography: 'body.b2',
670
+ selectors: {
671
+ '& [data-divider]::before': { display: 'none' },
672
+ '& [data-divider], & [data-divider]:is(:has([data-info]), :has([role="meter"]))': {
673
+ minHeight: '0',
674
+ paddingBlock: '0',
675
+ },
676
+ },
677
+ },
678
+ },
679
+ },
680
+ },
681
+ { id: 'tds/web/list-group/root' },
682
+ )
683
+
684
+ // 36px, with block padding that leaves room for a 32px control.
685
+ export const row = variants(
686
+ {
687
+ base: {
688
+ alignItems: 'center',
689
+ backgroundColor: 'transparent !custom',
690
+ border: 'none !custom',
691
+ boxSizing: 'border-box',
692
+ color: 'inherit !custom',
693
+ columnGap: '12',
694
+ display: 'flex',
695
+ font: 'inherit !custom',
696
+ minHeight: '36',
697
+ outlineColor: 'transparent !custom',
698
+ outlineOffset: '0',
699
+ outlineStyle: 'solid !custom',
700
+ outlineWidth: '2',
701
+ paddingBlock: '2',
702
+ paddingInline: '0',
703
+ textAlign: 'start',
704
+ textDecoration: 'none !custom',
705
+ transitionDuration: '160',
706
+ transitionProperty: 'background-color, opacity, outline-color, outline-offset',
707
+ transitionTimingFunction: 'snappy',
708
+ width: '100% !custom',
709
+ selectors: {
710
+ // The fill covers the row, flush with its content, as Figma's List Row draws it. A static
711
+ // row that holds a control takes the same fill on hover, without becoming pressable.
712
+ '&:is(a[href], button, [role="button"], :has(a[href], button, input, select, textarea)):not([data-radio])':
713
+ { borderRadius: 'xs' },
714
+ '&:is(a[href], button, [role="button"], :has(a[href], button, input, select, textarea)):not(:disabled, [data-disabled], [data-radio]):hover':
715
+ { backgroundColor: 'container.regular' },
716
+ '&:is(a[href], button, [role="button"]):not(:disabled, [data-disabled])': {
717
+ cursor: 'pointer',
718
+ },
719
+ '&:is(a[href], button, [role="button"]):not(:disabled, [data-disabled]):active': {
720
+ backgroundColor: 'container.strong',
721
+ },
722
+ '&:is(a[href], button, [role="button"]):focus-visible': {
723
+ outlineColor: 'border.focus',
724
+ outlineOffset: '-2',
725
+ },
726
+ // A radio row is a bordered block whose border thickens when checked and focused, as
727
+ // Figma lays out its stroke, so the row grows by 1px a side for focus.
728
+ '&[data-radio]': {
729
+ backgroundColor: 'background.elevated',
730
+ borderColor: 'line.secondary',
731
+ borderRadius: 'xs',
732
+ borderStyle: 'solid',
733
+ borderWidth: 'regular',
734
+ cursor: 'pointer',
735
+ paddingBlock: '12',
736
+ paddingInline: '16',
737
+ transitionProperty: 'background-color, border-color, opacity, scale !custom',
738
+ userSelect: 'none',
739
+ },
740
+ '&[data-radio]:hover:not(:has(> [data-checked], > :focus-visible, > [data-disabled]))': {
741
+ borderColor: 'line.primary',
742
+ },
743
+ '&[data-radio]:has(> [data-checked])': {
744
+ borderColor: 'content.primary',
745
+ borderWidth: '1.5px !custom',
746
+ },
747
+ '&[data-radio]:has(> [data-checked]):hover:not(:has(> [data-disabled]))': {
748
+ backgroundColor: 'container.regular',
749
+ },
750
+ '&[data-radio]:has(> [role="radio"]:focus-visible)': {
751
+ borderColor: 'border.focus',
752
+ borderWidth: 'thick',
753
+ },
754
+ '&[data-radio]:active:not(:has(> [data-disabled]))': { scale: 'press' },
755
+ '&[data-disabled], &[data-radio]:has(> [data-disabled])': {
756
+ cursor: 'default',
757
+ opacity: 'disabled',
758
+ },
759
+ },
760
+ '@media (prefers-reduced-motion: reduce)': {
761
+ transitionProperty: 'background-color, opacity, outline-color',
762
+ selectors: {
763
+ '&[data-radio]': { transitionProperty: 'background-color, border-color, opacity' },
764
+ '&[data-radio]:active': { scale: 'none !custom' },
765
+ },
766
+ },
767
+ },
768
+ },
769
+ { id: 'tds/web/list-group/row' },
770
+ )
771
+
772
+ export const title = variants(
773
+ { base: { color: 'content.primary', display: 'block', typography: 'body.b2Strong' } },
774
+ { id: 'tds/web/list-group/title' },
775
+ )
776
+ }