@tempoxyz/ds 0.2.6 → 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 (652) hide show
  1. package/README.md +2 -0
  2. package/dist/fonts/JetBrainsMono-Bold-latin.woff2 +0 -0
  3. package/dist/fonts/JetBrainsMono-Bold-other.woff2 +0 -0
  4. package/dist/fonts/JetBrainsMono-Bold.woff2 +0 -0
  5. package/dist/fonts/JetBrainsMono-Medium-latin.woff2 +0 -0
  6. package/dist/fonts/JetBrainsMono-Medium-other.woff2 +0 -0
  7. package/dist/fonts/JetBrainsMono-Medium.woff2 +0 -0
  8. package/dist/fonts/JetBrainsMono-Regular-latin.woff2 +0 -0
  9. package/dist/fonts/JetBrainsMono-Regular-other.woff2 +0 -0
  10. package/dist/fonts/JetBrainsMono-Regular.woff2 +0 -0
  11. package/dist/fonts/JetBrainsMono-SemiBold-latin.woff2 +0 -0
  12. package/dist/fonts/JetBrainsMono-SemiBold-other.woff2 +0 -0
  13. package/dist/fonts/JetBrainsMono-SemiBold.woff2 +0 -0
  14. package/dist/fonts/Pilat-Black-latin.woff2 +0 -0
  15. package/dist/fonts/Pilat-Black-other.woff2 +0 -0
  16. package/dist/fonts/Pilat-Black.woff2 +0 -0
  17. package/dist/fonts/Pilat-Bold-latin.woff2 +0 -0
  18. package/dist/fonts/Pilat-Bold-other.woff2 +0 -0
  19. package/dist/fonts/Pilat-Bold.woff2 +0 -0
  20. package/dist/fonts/Pilat-Book-latin.woff2 +0 -0
  21. package/dist/fonts/Pilat-Book-other.woff2 +0 -0
  22. package/dist/fonts/Pilat-Book.woff2 +0 -0
  23. package/dist/fonts/Pilat-Demi-latin.woff2 +0 -0
  24. package/dist/fonts/Pilat-Demi-other.woff2 +0 -0
  25. package/dist/fonts/Pilat-Demi.woff2 +0 -0
  26. package/dist/fonts/Pilat-Heavy-latin.woff2 +0 -0
  27. package/dist/fonts/Pilat-Heavy-other.woff2 +0 -0
  28. package/dist/fonts/Pilat-Heavy.woff2 +0 -0
  29. package/dist/fonts/Pilat-Light-latin.woff2 +0 -0
  30. package/dist/fonts/Pilat-Light-other.woff2 +0 -0
  31. package/dist/fonts/Pilat-Light.woff2 +0 -0
  32. package/dist/fonts/Pilat-Regular-latin.woff2 +0 -0
  33. package/dist/fonts/Pilat-Regular-other.woff2 +0 -0
  34. package/dist/fonts/Pilat-Regular.woff2 +0 -0
  35. package/dist/fonts/Pilat-Thin-latin.woff2 +0 -0
  36. package/dist/fonts/Pilat-Thin-other.woff2 +0 -0
  37. package/dist/fonts/Pilat-Thin.woff2 +0 -0
  38. package/dist/oxlint/rules/PreferComponent.js +6 -6
  39. package/dist/oxlint/rules/PreferComponent.js.map +1 -1
  40. package/dist/web/components/Accordion.css +1 -1
  41. package/dist/web/components/Accordion.d.ts +7 -7
  42. package/dist/web/components/Accordion.js.map +1 -1
  43. package/dist/web/components/Accordion.js.zyzz.json +1 -1
  44. package/dist/web/components/AgentLogo.css +1 -0
  45. package/dist/web/components/AgentLogo.d.ts +206 -0
  46. package/dist/web/components/AgentLogo.d.ts.map +1 -0
  47. package/dist/web/components/AgentLogo.js +86 -0
  48. package/dist/web/components/AgentLogo.js.map +1 -0
  49. package/dist/web/components/AgentLogo.js.zyzz.json +1 -0
  50. package/dist/web/components/Alert.css +1 -0
  51. package/dist/web/components/Alert.d.ts +156 -0
  52. package/dist/web/components/Alert.d.ts.map +1 -0
  53. package/dist/web/components/Alert.js +92 -0
  54. package/dist/web/components/Alert.js.map +1 -0
  55. package/dist/web/components/Alert.js.zyzz.json +1 -0
  56. package/dist/web/components/AlertDialog.d.ts +40 -28
  57. package/dist/web/components/AlertDialog.d.ts.map +1 -1
  58. package/dist/web/components/AlertDialog.js +31 -36
  59. package/dist/web/components/AlertDialog.js.map +1 -1
  60. package/dist/web/components/AlertDialog.js.zyzz.json +1 -1
  61. package/dist/web/components/Amount.css +1 -1
  62. package/dist/web/components/Amount.d.ts +5 -5
  63. package/dist/web/components/Amount.d.ts.map +1 -1
  64. package/dist/web/components/Amount.js.map +1 -1
  65. package/dist/web/components/Amount.js.zyzz.json +1 -1
  66. package/dist/web/components/AmountInput.css +1 -1
  67. package/dist/web/components/AmountInput.d.ts +20 -39
  68. package/dist/web/components/AmountInput.d.ts.map +1 -1
  69. package/dist/web/components/AmountInput.js +31 -37
  70. package/dist/web/components/AmountInput.js.map +1 -1
  71. package/dist/web/components/AmountInput.js.zyzz.json +1 -1
  72. package/dist/web/components/AppShell.css +1 -1
  73. package/dist/web/components/AppShell.d.ts +65 -29
  74. package/dist/web/components/AppShell.d.ts.map +1 -1
  75. package/dist/web/components/AppShell.js +31 -19
  76. package/dist/web/components/AppShell.js.map +1 -1
  77. package/dist/web/components/AppShell.js.zyzz.json +1 -1
  78. package/dist/web/components/AssetChip.css +1 -0
  79. package/dist/web/components/AssetChip.d.ts +38 -0
  80. package/dist/web/components/AssetChip.d.ts.map +1 -0
  81. package/dist/web/components/AssetChip.js +47 -0
  82. package/dist/web/components/AssetChip.js.map +1 -0
  83. package/dist/web/components/AssetChip.js.zyzz.json +1 -0
  84. package/dist/web/components/Autocomplete.d.ts +2 -2
  85. package/dist/web/components/Autocomplete.js +4 -4
  86. package/dist/web/components/Autocomplete.js.map +1 -1
  87. package/dist/web/components/Autocomplete.js.zyzz.json +1 -1
  88. package/dist/web/components/Avatar.css +1 -1
  89. package/dist/web/components/Avatar.d.ts +40 -115
  90. package/dist/web/components/Avatar.d.ts.map +1 -1
  91. package/dist/web/components/Avatar.js +19 -32
  92. package/dist/web/components/Avatar.js.map +1 -1
  93. package/dist/web/components/Avatar.js.zyzz.json +1 -1
  94. package/dist/web/components/Badge.css +1 -0
  95. package/dist/web/components/Badge.d.ts +134 -0
  96. package/dist/web/components/Badge.d.ts.map +1 -0
  97. package/dist/web/components/Badge.js +38 -0
  98. package/dist/web/components/Badge.js.map +1 -0
  99. package/dist/web/components/Badge.js.zyzz.json +1 -0
  100. package/dist/web/components/Banner.css +1 -1
  101. package/dist/web/components/Banner.d.ts +12 -12
  102. package/dist/web/components/Banner.d.ts.map +1 -1
  103. package/dist/web/components/Banner.js +5 -5
  104. package/dist/web/components/Banner.js.map +1 -1
  105. package/dist/web/components/Banner.js.zyzz.json +1 -1
  106. package/dist/web/components/BarChart.css +1 -0
  107. package/dist/web/components/BarChart.d.ts +155 -0
  108. package/dist/web/components/BarChart.d.ts.map +1 -0
  109. package/dist/web/components/BarChart.js +119 -0
  110. package/dist/web/components/BarChart.js.map +1 -0
  111. package/dist/web/components/BarChart.js.zyzz.json +1 -0
  112. package/dist/web/components/Breadcrumbs.css +1 -1
  113. package/dist/web/components/Breadcrumbs.d.ts +6 -6
  114. package/dist/web/components/Breadcrumbs.js.map +1 -1
  115. package/dist/web/components/Breadcrumbs.js.zyzz.json +1 -1
  116. package/dist/web/components/Button.css +1 -1
  117. package/dist/web/components/Button.d.ts +166 -35
  118. package/dist/web/components/Button.d.ts.map +1 -1
  119. package/dist/web/components/Button.js +13 -9
  120. package/dist/web/components/Button.js.map +1 -1
  121. package/dist/web/components/Button.js.zyzz.json +1 -1
  122. package/dist/web/components/ButtonGroup.css +1 -0
  123. package/dist/web/components/ButtonGroup.d.ts +56 -0
  124. package/dist/web/components/ButtonGroup.d.ts.map +1 -0
  125. package/dist/web/components/ButtonGroup.js +33 -0
  126. package/dist/web/components/ButtonGroup.js.map +1 -0
  127. package/dist/web/components/ButtonGroup.js.zyzz.json +1 -0
  128. package/dist/web/components/Calendar.css +1 -1
  129. package/dist/web/components/Calendar.d.ts.map +1 -1
  130. package/dist/web/components/Calendar.js +7 -7
  131. package/dist/web/components/Calendar.js.map +1 -1
  132. package/dist/web/components/Calendar.js.zyzz.json +1 -1
  133. package/dist/web/components/Checkbox.css +1 -1
  134. package/dist/web/components/Checkbox.d.ts +11 -11
  135. package/dist/web/components/Checkbox.d.ts.map +1 -1
  136. package/dist/web/components/Checkbox.js +4 -1
  137. package/dist/web/components/Checkbox.js.map +1 -1
  138. package/dist/web/components/Checkbox.js.zyzz.json +1 -1
  139. package/dist/web/components/CheckboxGroup.js.zyzz.json +1 -1
  140. package/dist/web/components/ChoiceGroup.css +1 -1
  141. package/dist/web/components/ChoiceGroup.d.ts +44 -16
  142. package/dist/web/components/ChoiceGroup.d.ts.map +1 -1
  143. package/dist/web/components/ChoiceGroup.js +32 -8
  144. package/dist/web/components/ChoiceGroup.js.map +1 -1
  145. package/dist/web/components/ChoiceGroup.js.zyzz.json +1 -1
  146. package/dist/web/components/Choicebox.css +1 -1
  147. package/dist/web/components/Choicebox.d.ts +9 -9
  148. package/dist/web/components/Choicebox.d.ts.map +1 -1
  149. package/dist/web/components/Choicebox.js +6 -6
  150. package/dist/web/components/Choicebox.js.map +1 -1
  151. package/dist/web/components/Choicebox.js.zyzz.json +1 -1
  152. package/dist/web/components/Combobox.css +1 -1
  153. package/dist/web/components/Combobox.d.ts +2 -2
  154. package/dist/web/components/Combobox.d.ts.map +1 -1
  155. package/dist/web/components/Combobox.js +8 -8
  156. package/dist/web/components/Combobox.js.map +1 -1
  157. package/dist/web/components/Combobox.js.zyzz.json +1 -1
  158. package/dist/web/components/Container.js.zyzz.json +1 -1
  159. package/dist/web/components/CopyButton.js +1 -1
  160. package/dist/web/components/CopyButton.js.map +1 -1
  161. package/dist/web/components/CopyButton.js.zyzz.json +1 -1
  162. package/dist/web/components/DatePicker.css +1 -1
  163. package/dist/web/components/DatePicker.d.ts +37 -56
  164. package/dist/web/components/DatePicker.d.ts.map +1 -1
  165. package/dist/web/components/DatePicker.js +7 -7
  166. package/dist/web/components/DatePicker.js.map +1 -1
  167. package/dist/web/components/DatePicker.js.zyzz.json +1 -1
  168. package/dist/web/components/Dialog.css +1 -1
  169. package/dist/web/components/Dialog.d.ts +189 -20
  170. package/dist/web/components/Dialog.d.ts.map +1 -1
  171. package/dist/web/components/Dialog.js +93 -26
  172. package/dist/web/components/Dialog.js.map +1 -1
  173. package/dist/web/components/Dialog.js.zyzz.json +1 -1
  174. package/dist/web/components/Drawer.css +1 -1
  175. package/dist/web/components/Drawer.d.ts +7 -2
  176. package/dist/web/components/Drawer.d.ts.map +1 -1
  177. package/dist/web/components/Drawer.js +12 -6
  178. package/dist/web/components/Drawer.js.map +1 -1
  179. package/dist/web/components/Drawer.js.zyzz.json +1 -1
  180. package/dist/web/components/Empty.css +1 -1
  181. package/dist/web/components/Empty.d.ts +2 -0
  182. package/dist/web/components/Empty.d.ts.map +1 -1
  183. package/dist/web/components/Empty.js +5 -3
  184. package/dist/web/components/Empty.js.map +1 -1
  185. package/dist/web/components/Empty.js.zyzz.json +1 -1
  186. package/dist/web/components/Field.css +1 -1
  187. package/dist/web/components/Field.d.ts +16 -21
  188. package/dist/web/components/Field.d.ts.map +1 -1
  189. package/dist/web/components/Field.js +38 -36
  190. package/dist/web/components/Field.js.map +1 -1
  191. package/dist/web/components/Field.js.zyzz.json +1 -1
  192. package/dist/web/components/Fieldset.css +1 -1
  193. package/dist/web/components/Fieldset.d.ts +9 -18
  194. package/dist/web/components/Fieldset.d.ts.map +1 -1
  195. package/dist/web/components/Fieldset.js +11 -14
  196. package/dist/web/components/Fieldset.js.map +1 -1
  197. package/dist/web/components/Fieldset.js.zyzz.json +1 -1
  198. package/dist/web/components/Frame.css +1 -1
  199. package/dist/web/components/Frame.d.ts +13 -19
  200. package/dist/web/components/Frame.d.ts.map +1 -1
  201. package/dist/web/components/Frame.js +8 -8
  202. package/dist/web/components/Frame.js.map +1 -1
  203. package/dist/web/components/Frame.js.zyzz.json +1 -1
  204. package/dist/web/components/Gauge.css +1 -1
  205. package/dist/web/components/Gauge.d.ts +2 -2
  206. package/dist/web/components/Gauge.d.ts.map +1 -1
  207. package/dist/web/components/Gauge.js.map +1 -1
  208. package/dist/web/components/Gauge.js.zyzz.json +1 -1
  209. package/dist/web/components/Grid.js.zyzz.json +1 -1
  210. package/dist/web/components/Hex.css +1 -1
  211. package/dist/web/components/Hex.d.ts +11 -53
  212. package/dist/web/components/Hex.d.ts.map +1 -1
  213. package/dist/web/components/Hex.js +5 -7
  214. package/dist/web/components/Hex.js.map +1 -1
  215. package/dist/web/components/Hex.js.zyzz.json +1 -1
  216. package/dist/web/components/IconTile.css +1 -0
  217. package/dist/web/components/IconTile.d.ts +62 -0
  218. package/dist/web/components/IconTile.d.ts.map +1 -0
  219. package/dist/web/components/IconTile.js +28 -0
  220. package/dist/web/components/IconTile.js.map +1 -0
  221. package/dist/web/components/IconTile.js.zyzz.json +1 -0
  222. package/dist/web/components/Identicon.css +1 -1
  223. package/dist/web/components/Identicon.d.ts +1 -8
  224. package/dist/web/components/Identicon.d.ts.map +1 -1
  225. package/dist/web/components/Identicon.js +1 -4
  226. package/dist/web/components/Identicon.js.map +1 -1
  227. package/dist/web/components/Identicon.js.zyzz.json +1 -1
  228. package/dist/web/components/Inline.js.zyzz.json +1 -1
  229. package/dist/web/components/Inset.js.zyzz.json +1 -1
  230. package/dist/web/components/Kbd.css +1 -1
  231. package/dist/web/components/Kbd.d.ts +7 -7
  232. package/dist/web/components/Kbd.js.map +1 -1
  233. package/dist/web/components/Kbd.js.zyzz.json +1 -1
  234. package/dist/web/components/ListGroup.css +1 -0
  235. package/dist/web/components/ListGroup.d.ts +483 -0
  236. package/dist/web/components/ListGroup.d.ts.map +1 -0
  237. package/dist/web/components/ListGroup.js +266 -0
  238. package/dist/web/components/ListGroup.js.map +1 -0
  239. package/dist/web/components/ListGroup.js.zyzz.json +1 -0
  240. package/dist/web/components/LoadingDots.css +1 -1
  241. package/dist/web/components/LoadingDots.d.ts.map +1 -1
  242. package/dist/web/components/LoadingDots.js +2 -2
  243. package/dist/web/components/LoadingDots.js.map +1 -1
  244. package/dist/web/components/LoadingDots.js.zyzz.json +1 -1
  245. package/dist/web/components/Menu.css +1 -1
  246. package/dist/web/components/Menu.d.ts +39 -20
  247. package/dist/web/components/Menu.d.ts.map +1 -1
  248. package/dist/web/components/Menu.js +12 -7
  249. package/dist/web/components/Menu.js.map +1 -1
  250. package/dist/web/components/Menu.js.zyzz.json +1 -1
  251. package/dist/web/components/NetworkLogo.css +1 -0
  252. package/dist/web/components/NetworkLogo.d.ts +58 -0
  253. package/dist/web/components/NetworkLogo.d.ts.map +1 -0
  254. package/dist/web/components/NetworkLogo.js +40 -0
  255. package/dist/web/components/NetworkLogo.js.map +1 -0
  256. package/dist/web/components/NetworkLogo.js.zyzz.json +1 -0
  257. package/dist/web/components/NumberField.css +1 -1
  258. package/dist/web/components/NumberField.d.ts +3 -3
  259. package/dist/web/components/NumberField.d.ts.map +1 -1
  260. package/dist/web/components/NumberField.js +5 -5
  261. package/dist/web/components/NumberField.js.map +1 -1
  262. package/dist/web/components/NumberField.js.zyzz.json +1 -1
  263. package/dist/web/components/OtpField.css +1 -1
  264. package/dist/web/components/OtpField.d.ts +8 -68
  265. package/dist/web/components/OtpField.d.ts.map +1 -1
  266. package/dist/web/components/OtpField.js +12 -9
  267. package/dist/web/components/OtpField.js.map +1 -1
  268. package/dist/web/components/OtpField.js.zyzz.json +1 -1
  269. package/dist/web/components/Pagination.css +1 -1
  270. package/dist/web/components/Pagination.d.ts +16 -14
  271. package/dist/web/components/Pagination.d.ts.map +1 -1
  272. package/dist/web/components/Pagination.js +3 -3
  273. package/dist/web/components/Pagination.js.map +1 -1
  274. package/dist/web/components/Pagination.js.zyzz.json +1 -1
  275. package/dist/web/components/Popover.css +1 -1
  276. package/dist/web/components/Popover.js.map +1 -1
  277. package/dist/web/components/Popover.js.zyzz.json +1 -1
  278. package/dist/web/components/Progress.css +1 -1
  279. package/dist/web/components/Progress.d.ts +2 -2
  280. package/dist/web/components/Progress.d.ts.map +1 -1
  281. package/dist/web/components/Progress.js +5 -5
  282. package/dist/web/components/Progress.js.map +1 -1
  283. package/dist/web/components/Progress.js.zyzz.json +1 -1
  284. package/dist/web/components/Qr.css +1 -1
  285. package/dist/web/components/Qr.d.ts +1 -1
  286. package/dist/web/components/Qr.js.map +1 -1
  287. package/dist/web/components/Qr.js.zyzz.json +1 -1
  288. package/dist/web/components/RadioGroup.css +1 -1
  289. package/dist/web/components/RadioGroup.d.ts.map +1 -1
  290. package/dist/web/components/RadioGroup.js +2 -2
  291. package/dist/web/components/RadioGroup.js.map +1 -1
  292. package/dist/web/components/RadioGroup.js.zyzz.json +1 -1
  293. package/dist/web/components/SecretValue.css +1 -1
  294. package/dist/web/components/SecretValue.d.ts +7 -7
  295. package/dist/web/components/SecretValue.js +1 -1
  296. package/dist/web/components/SecretValue.js.map +1 -1
  297. package/dist/web/components/SecretValue.js.zyzz.json +1 -1
  298. package/dist/web/components/Select.css +1 -1
  299. package/dist/web/components/Select.d.ts +64 -2
  300. package/dist/web/components/Select.d.ts.map +1 -1
  301. package/dist/web/components/Select.js +24 -7
  302. package/dist/web/components/Select.js.map +1 -1
  303. package/dist/web/components/Select.js.zyzz.json +1 -1
  304. package/dist/web/components/Separator.css +1 -1
  305. package/dist/web/components/Separator.d.ts +17 -3
  306. package/dist/web/components/Separator.d.ts.map +1 -1
  307. package/dist/web/components/Separator.js +40 -5
  308. package/dist/web/components/Separator.js.map +1 -1
  309. package/dist/web/components/Separator.js.zyzz.json +1 -1
  310. package/dist/web/components/SidebarMenu.css +1 -1
  311. package/dist/web/components/SidebarMenu.d.ts +186 -39
  312. package/dist/web/components/SidebarMenu.d.ts.map +1 -1
  313. package/dist/web/components/SidebarMenu.js +90 -18
  314. package/dist/web/components/SidebarMenu.js.map +1 -1
  315. package/dist/web/components/SidebarMenu.js.zyzz.json +1 -1
  316. package/dist/web/components/Skeleton.css +1 -1
  317. package/dist/web/components/Skeleton.d.ts +5 -3
  318. package/dist/web/components/Skeleton.d.ts.map +1 -1
  319. package/dist/web/components/Skeleton.js +1 -1
  320. package/dist/web/components/Skeleton.js.map +1 -1
  321. package/dist/web/components/Skeleton.js.zyzz.json +1 -1
  322. package/dist/web/components/Slider.css +1 -1
  323. package/dist/web/components/Slider.d.ts.map +1 -1
  324. package/dist/web/components/Slider.js +5 -5
  325. package/dist/web/components/Slider.js.map +1 -1
  326. package/dist/web/components/Slider.js.zyzz.json +1 -1
  327. package/dist/web/components/Snippet.css +1 -1
  328. package/dist/web/components/Snippet.d.ts +27 -65
  329. package/dist/web/components/Snippet.d.ts.map +1 -1
  330. package/dist/web/components/Snippet.js +47 -10
  331. package/dist/web/components/Snippet.js.map +1 -1
  332. package/dist/web/components/Snippet.js.zyzz.json +1 -1
  333. package/dist/web/components/Spinner.css +1 -1
  334. package/dist/web/components/Spinner.d.ts +25 -16
  335. package/dist/web/components/Spinner.d.ts.map +1 -1
  336. package/dist/web/components/Spinner.js +11 -6
  337. package/dist/web/components/Spinner.js.map +1 -1
  338. package/dist/web/components/Spinner.js.zyzz.json +1 -1
  339. package/dist/web/components/SplitBar.css +1 -0
  340. package/dist/web/components/SplitBar.d.ts +99 -0
  341. package/dist/web/components/SplitBar.d.ts.map +1 -0
  342. package/dist/web/components/SplitBar.js +49 -0
  343. package/dist/web/components/SplitBar.js.map +1 -0
  344. package/dist/web/components/SplitBar.js.zyzz.json +1 -0
  345. package/dist/web/components/SplitButton.css +1 -1
  346. package/dist/web/components/SplitButton.d.ts +4 -1
  347. package/dist/web/components/SplitButton.d.ts.map +1 -1
  348. package/dist/web/components/SplitButton.js +2 -2
  349. package/dist/web/components/SplitButton.js.map +1 -1
  350. package/dist/web/components/SplitButton.js.zyzz.json +1 -1
  351. package/dist/web/components/Stack.js.zyzz.json +1 -1
  352. package/dist/web/components/StatusChip.css +1 -0
  353. package/dist/web/components/StatusChip.d.ts +162 -0
  354. package/dist/web/components/StatusChip.d.ts.map +1 -0
  355. package/dist/web/components/StatusChip.js +37 -0
  356. package/dist/web/components/StatusChip.js.map +1 -0
  357. package/dist/web/components/StatusChip.js.zyzz.json +1 -0
  358. package/dist/web/components/StatusRow.css +1 -0
  359. package/dist/web/components/StatusRow.d.ts +121 -0
  360. package/dist/web/components/StatusRow.d.ts.map +1 -0
  361. package/dist/web/components/StatusRow.js +75 -0
  362. package/dist/web/components/StatusRow.js.map +1 -0
  363. package/dist/web/components/StatusRow.js.zyzz.json +1 -0
  364. package/dist/web/components/Stepper.css +1 -1
  365. package/dist/web/components/Stepper.d.ts +10 -7
  366. package/dist/web/components/Stepper.d.ts.map +1 -1
  367. package/dist/web/components/Stepper.js +5 -4
  368. package/dist/web/components/Stepper.js.map +1 -1
  369. package/dist/web/components/Stepper.js.zyzz.json +1 -1
  370. package/dist/web/components/Surface.css +1 -1
  371. package/dist/web/components/Surface.d.ts +56 -119
  372. package/dist/web/components/Surface.d.ts.map +1 -1
  373. package/dist/web/components/Surface.js +16 -9
  374. package/dist/web/components/Surface.js.map +1 -1
  375. package/dist/web/components/Surface.js.zyzz.json +1 -1
  376. package/dist/web/components/Switch.css +1 -1
  377. package/dist/web/components/Switch.d.ts +14 -18
  378. package/dist/web/components/Switch.d.ts.map +1 -1
  379. package/dist/web/components/Switch.js +13 -15
  380. package/dist/web/components/Switch.js.map +1 -1
  381. package/dist/web/components/Switch.js.zyzz.json +1 -1
  382. package/dist/web/components/Table.css +1 -1
  383. package/dist/web/components/Table.d.ts +152 -67
  384. package/dist/web/components/Table.d.ts.map +1 -1
  385. package/dist/web/components/Table.js +92 -24
  386. package/dist/web/components/Table.js.map +1 -1
  387. package/dist/web/components/Table.js.zyzz.json +1 -1
  388. package/dist/web/components/Tabs.css +1 -1
  389. package/dist/web/components/Tabs.d.ts +49 -42
  390. package/dist/web/components/Tabs.d.ts.map +1 -1
  391. package/dist/web/components/Tabs.js +45 -14
  392. package/dist/web/components/Tabs.js.map +1 -1
  393. package/dist/web/components/Tabs.js.zyzz.json +1 -1
  394. package/dist/web/components/TempoLogo.css +1 -0
  395. package/dist/web/components/TempoLogo.d.ts +47 -0
  396. package/dist/web/components/TempoLogo.d.ts.map +1 -0
  397. package/dist/web/components/TempoLogo.js +48 -0
  398. package/dist/web/components/TempoLogo.js.map +1 -0
  399. package/dist/web/components/TempoLogo.js.zyzz.json +1 -0
  400. package/dist/web/components/TextInput.css +1 -0
  401. package/dist/web/components/{Input.d.ts → TextInput.d.ts} +27 -18
  402. package/dist/web/components/TextInput.d.ts.map +1 -0
  403. package/dist/web/components/TextInput.js +138 -0
  404. package/dist/web/components/TextInput.js.map +1 -0
  405. package/dist/web/components/TextInput.js.zyzz.json +1 -0
  406. package/dist/web/components/Textarea.css +1 -1
  407. package/dist/web/components/Textarea.d.ts +29 -74
  408. package/dist/web/components/Textarea.d.ts.map +1 -1
  409. package/dist/web/components/Textarea.js +5 -12
  410. package/dist/web/components/Textarea.js.map +1 -1
  411. package/dist/web/components/Textarea.js.zyzz.json +1 -1
  412. package/dist/web/components/Toast.css +1 -1
  413. package/dist/web/components/Toast.d.ts +4 -4
  414. package/dist/web/components/Toast.d.ts.map +1 -1
  415. package/dist/web/components/Toast.js +9 -9
  416. package/dist/web/components/Toast.js.map +1 -1
  417. package/dist/web/components/Toast.js.zyzz.json +1 -1
  418. package/dist/web/components/Token.css +1 -1
  419. package/dist/web/components/Token.d.ts +32 -90
  420. package/dist/web/components/Token.d.ts.map +1 -1
  421. package/dist/web/components/Token.js +27 -89
  422. package/dist/web/components/Token.js.map +1 -1
  423. package/dist/web/components/Token.js.zyzz.json +1 -1
  424. package/dist/web/components/TokenLogo.css +1 -0
  425. package/dist/web/components/TokenLogo.d.ts +117 -0
  426. package/dist/web/components/TokenLogo.d.ts.map +1 -0
  427. package/dist/web/components/TokenLogo.js +112 -0
  428. package/dist/web/components/TokenLogo.js.map +1 -0
  429. package/dist/web/components/TokenLogo.js.zyzz.json +1 -0
  430. package/dist/web/components/Tooltip.css +1 -1
  431. package/dist/web/components/Tooltip.js.map +1 -1
  432. package/dist/web/components/Tooltip.js.zyzz.json +1 -1
  433. package/dist/web/components/VerificationCode.css +1 -0
  434. package/dist/web/components/VerificationCode.d.ts +47 -0
  435. package/dist/web/components/VerificationCode.d.ts.map +1 -0
  436. package/dist/web/components/VerificationCode.js +55 -0
  437. package/dist/web/components/VerificationCode.js.map +1 -0
  438. package/dist/web/components/VerificationCode.js.zyzz.json +1 -0
  439. package/dist/web/components/Visual.css +1 -0
  440. package/dist/web/components/Visual.d.ts +65 -0
  441. package/dist/web/components/Visual.d.ts.map +1 -0
  442. package/dist/web/components/Visual.js +51 -0
  443. package/dist/web/components/Visual.js.map +1 -0
  444. package/dist/web/components/Visual.js.zyzz.json +1 -0
  445. package/dist/web/components/internal/Field.css +1 -1
  446. package/dist/web/components/internal/Field.d.ts +41 -87
  447. package/dist/web/components/internal/Field.d.ts.map +1 -1
  448. package/dist/web/components/internal/Field.js +8 -7
  449. package/dist/web/components/internal/Field.js.map +1 -1
  450. package/dist/web/components/internal/Field.js.zyzz.json +1 -1
  451. package/dist/web/components/internal/InputGroup.css +1 -1
  452. package/dist/web/components/internal/InputGroup.d.ts +38 -99
  453. package/dist/web/components/internal/InputGroup.d.ts.map +1 -1
  454. package/dist/web/components/internal/InputGroup.js +6 -6
  455. package/dist/web/components/internal/InputGroup.js.map +1 -1
  456. package/dist/web/components/internal/InputGroup.js.zyzz.json +1 -1
  457. package/dist/web/components/internal/Listbox.css +1 -1
  458. package/dist/web/components/internal/Listbox.d.ts +8 -8
  459. package/dist/web/components/internal/Listbox.js.map +1 -1
  460. package/dist/web/components/internal/Listbox.js.zyzz.json +1 -1
  461. package/dist/web/components/internal/RowDisabled.d.ts +3 -0
  462. package/dist/web/components/internal/RowDisabled.d.ts.map +1 -0
  463. package/dist/web/components/internal/RowDisabled.js +9 -0
  464. package/dist/web/components/internal/RowDisabled.js.map +1 -0
  465. package/dist/web/components/internal/RowsSize.d.ts +2 -3
  466. package/dist/web/components/internal/RowsSize.d.ts.map +1 -1
  467. package/dist/web/components/internal/RowsSize.js +3 -3
  468. package/dist/web/components/internal/RowsSize.js.map +1 -1
  469. package/dist/web/index.d.ts +18 -6
  470. package/dist/web/index.d.ts.map +1 -1
  471. package/dist/web/index.js +18 -6
  472. package/dist/web/index.js.map +1 -1
  473. package/dist/web/index.js.zyzz.json +1 -1
  474. package/dist/web/vars.d.ts +591 -706
  475. package/dist/web/vars.d.ts.map +1 -1
  476. package/dist/web/vars.js +7 -6
  477. package/dist/web/vars.js.map +1 -1
  478. package/dist/web/vars.js.zyzz.json +1 -1
  479. package/dist/web/zyzz.config.d.ts +2933 -3513
  480. package/dist/web/zyzz.config.d.ts.map +1 -1
  481. package/dist/web/zyzz.config.js +29 -3
  482. package/dist/web/zyzz.config.js.map +1 -1
  483. package/dist/web/zyzz.config.js.zyzz.json +1 -1
  484. package/package.json +149 -5
  485. package/src/fonts/JetBrainsMono-Bold-latin.woff2 +0 -0
  486. package/src/fonts/JetBrainsMono-Bold-other.woff2 +0 -0
  487. package/src/fonts/JetBrainsMono-Bold.woff2 +0 -0
  488. package/src/fonts/JetBrainsMono-Medium-latin.woff2 +0 -0
  489. package/src/fonts/JetBrainsMono-Medium-other.woff2 +0 -0
  490. package/src/fonts/JetBrainsMono-Medium.woff2 +0 -0
  491. package/src/fonts/{Geist-OFL.txt → JetBrainsMono-OFL.txt} +4 -3
  492. package/src/fonts/JetBrainsMono-Regular-latin.woff2 +0 -0
  493. package/src/fonts/JetBrainsMono-Regular-other.woff2 +0 -0
  494. package/src/fonts/JetBrainsMono-Regular.woff2 +0 -0
  495. package/src/fonts/JetBrainsMono-SemiBold-latin.woff2 +0 -0
  496. package/src/fonts/JetBrainsMono-SemiBold-other.woff2 +0 -0
  497. package/src/fonts/JetBrainsMono-SemiBold.woff2 +0 -0
  498. package/src/fonts/Pilat-Black-latin.woff2 +0 -0
  499. package/src/fonts/Pilat-Black-other.woff2 +0 -0
  500. package/src/fonts/Pilat-Black.woff2 +0 -0
  501. package/src/fonts/Pilat-Bold-latin.woff2 +0 -0
  502. package/src/fonts/Pilat-Bold-other.woff2 +0 -0
  503. package/src/fonts/Pilat-Bold.woff2 +0 -0
  504. package/src/fonts/Pilat-Book-latin.woff2 +0 -0
  505. package/src/fonts/Pilat-Book-other.woff2 +0 -0
  506. package/src/fonts/Pilat-Book.woff2 +0 -0
  507. package/src/fonts/Pilat-Demi-latin.woff2 +0 -0
  508. package/src/fonts/Pilat-Demi-other.woff2 +0 -0
  509. package/src/fonts/Pilat-Demi.woff2 +0 -0
  510. package/src/fonts/Pilat-Heavy-latin.woff2 +0 -0
  511. package/src/fonts/Pilat-Heavy-other.woff2 +0 -0
  512. package/src/fonts/Pilat-Heavy.woff2 +0 -0
  513. package/src/fonts/Pilat-Light-latin.woff2 +0 -0
  514. package/src/fonts/Pilat-Light-other.woff2 +0 -0
  515. package/src/fonts/Pilat-Light.woff2 +0 -0
  516. package/src/fonts/Pilat-Regular-latin.woff2 +0 -0
  517. package/src/fonts/Pilat-Regular-other.woff2 +0 -0
  518. package/src/fonts/Pilat-Regular.woff2 +0 -0
  519. package/src/fonts/Pilat-Thin-latin.woff2 +0 -0
  520. package/src/fonts/Pilat-Thin-other.woff2 +0 -0
  521. package/src/fonts/Pilat-Thin.woff2 +0 -0
  522. package/src/fonts/README.md +15 -2
  523. package/src/oxlint/rules/PreferComponent.ts +6 -6
  524. package/src/web/README.md +7 -7
  525. package/src/web/components/Accordion.tsx +8 -8
  526. package/src/web/components/AgentLogo.tsx +330 -0
  527. package/src/web/components/Alert.tsx +301 -0
  528. package/src/web/components/AlertDialog.tsx +47 -111
  529. package/src/web/components/Amount.tsx +6 -6
  530. package/src/web/components/AmountInput.tsx +59 -134
  531. package/src/web/components/AppShell.tsx +95 -36
  532. package/src/web/components/AssetChip.tsx +110 -0
  533. package/src/web/components/Autocomplete.tsx +4 -4
  534. package/src/web/components/Avatar.tsx +42 -119
  535. package/src/web/components/Badge.tsx +120 -0
  536. package/src/web/components/Banner.tsx +13 -11
  537. package/src/web/components/BarChart.tsx +427 -0
  538. package/src/web/components/Breadcrumbs.tsx +7 -7
  539. package/src/web/components/Button.tsx +156 -42
  540. package/src/web/components/ButtonGroup.tsx +59 -0
  541. package/src/web/components/Calendar.tsx +15 -13
  542. package/src/web/components/Checkbox.tsx +14 -11
  543. package/src/web/components/ChoiceGroup.tsx +107 -26
  544. package/src/web/components/Choicebox.tsx +30 -28
  545. package/src/web/components/Combobox.tsx +10 -8
  546. package/src/web/components/CopyButton.tsx +1 -1
  547. package/src/web/components/DatePicker.tsx +42 -61
  548. package/src/web/components/Dialog.tsx +267 -71
  549. package/src/web/components/Drawer.tsx +45 -18
  550. package/src/web/components/Empty.tsx +13 -8
  551. package/src/web/components/Field.tsx +78 -132
  552. package/src/web/components/Fieldset.tsx +16 -37
  553. package/src/web/components/Frame.tsx +13 -20
  554. package/src/web/components/Gauge.tsx +4 -4
  555. package/src/web/components/Hex.tsx +13 -56
  556. package/src/web/components/IconTile.tsx +57 -0
  557. package/src/web/components/Identicon.tsx +1 -10
  558. package/src/web/components/Kbd.tsx +8 -8
  559. package/src/web/components/ListGroup.tsx +776 -0
  560. package/src/web/components/LoadingDots.tsx +1 -0
  561. package/src/web/components/Menu.tsx +50 -35
  562. package/src/web/components/NetworkLogo.tsx +208 -0
  563. package/src/web/components/NumberField.tsx +18 -33
  564. package/src/web/components/OtpField.tsx +51 -102
  565. package/src/web/components/Pagination.tsx +16 -14
  566. package/src/web/components/Popover.tsx +8 -8
  567. package/src/web/components/Progress.tsx +7 -5
  568. package/src/web/components/Qr.tsx +1 -1
  569. package/src/web/components/RadioGroup.tsx +9 -7
  570. package/src/web/components/SecretValue.tsx +11 -11
  571. package/src/web/components/Select.tsx +87 -26
  572. package/src/web/components/Separator.tsx +95 -7
  573. package/src/web/components/SidebarMenu.tsx +294 -51
  574. package/src/web/components/Skeleton.tsx +5 -5
  575. package/src/web/components/Slider.tsx +12 -6
  576. package/src/web/components/Snippet.tsx +134 -75
  577. package/src/web/components/Spinner.tsx +38 -12
  578. package/src/web/components/SplitBar.tsx +158 -0
  579. package/src/web/components/SplitButton.tsx +26 -17
  580. package/src/web/components/StatusChip.tsx +138 -0
  581. package/src/web/components/StatusRow.tsx +162 -0
  582. package/src/web/components/Stepper.tsx +11 -8
  583. package/src/web/components/Surface.tsx +70 -95
  584. package/src/web/components/Switch.tsx +25 -29
  585. package/src/web/components/Table.tsx +281 -70
  586. package/src/web/components/Tabs.tsx +93 -50
  587. package/src/web/components/TempoLogo.tsx +89 -0
  588. package/src/web/components/{Input.tsx → TextInput.tsx} +87 -118
  589. package/src/web/components/Textarea.tsx +33 -78
  590. package/src/web/components/Toast.tsx +24 -22
  591. package/src/web/components/Token.tsx +106 -172
  592. package/src/web/components/TokenLogo.tsx +217 -0
  593. package/src/web/components/Tooltip.tsx +3 -3
  594. package/src/web/components/VerificationCode.tsx +97 -0
  595. package/src/web/components/Visual.tsx +166 -0
  596. package/src/web/components/internal/Field.ts +63 -72
  597. package/src/web/components/internal/InputGroup.ts +44 -101
  598. package/src/web/components/internal/Listbox.ts +20 -20
  599. package/src/web/components/internal/RowDisabled.ts +9 -0
  600. package/src/web/components/internal/RowsSize.ts +3 -5
  601. package/src/web/components/visuals/Passkey.svg +21 -0
  602. package/src/web/index.ts +18 -6
  603. package/src/web/logos/Base.svg +10 -0
  604. package/src/web/logos/Ethereum.svg +16 -0
  605. package/src/web/logos/HyperEVM.svg +27 -0
  606. package/src/web/logos/Polygon.svg +15 -0
  607. package/src/web/logos/README.md +14 -0
  608. package/src/web/logos/Solana.svg +11 -0
  609. package/src/web/logos/Tempo.svg +11 -0
  610. package/src/web/vars.ts +480 -534
  611. package/src/web/zyzz.config.ts +255 -12
  612. package/dist/fonts/GeistMono-Variable.woff2 +0 -0
  613. package/dist/web/components/AlertDialog.css +0 -1
  614. package/dist/web/components/Callout.css +0 -1
  615. package/dist/web/components/Callout.d.ts +0 -161
  616. package/dist/web/components/Callout.d.ts.map +0 -1
  617. package/dist/web/components/Callout.js +0 -83
  618. package/dist/web/components/Callout.js.map +0 -1
  619. package/dist/web/components/Callout.js.zyzz.json +0 -1
  620. package/dist/web/components/IconChip.css +0 -1
  621. package/dist/web/components/IconChip.d.ts +0 -53
  622. package/dist/web/components/IconChip.d.ts.map +0 -1
  623. package/dist/web/components/IconChip.js +0 -27
  624. package/dist/web/components/IconChip.js.map +0 -1
  625. package/dist/web/components/IconChip.js.zyzz.json +0 -1
  626. package/dist/web/components/Input.css +0 -1
  627. package/dist/web/components/Input.d.ts.map +0 -1
  628. package/dist/web/components/Input.js +0 -118
  629. package/dist/web/components/Input.js.map +0 -1
  630. package/dist/web/components/Input.js.zyzz.json +0 -1
  631. package/dist/web/components/Rows.css +0 -1
  632. package/dist/web/components/Rows.d.ts +0 -484
  633. package/dist/web/components/Rows.d.ts.map +0 -1
  634. package/dist/web/components/Rows.js +0 -171
  635. package/dist/web/components/Rows.js.map +0 -1
  636. package/dist/web/components/Rows.js.zyzz.json +0 -1
  637. package/dist/web/components/Tag.css +0 -1
  638. package/dist/web/components/Tag.d.ts +0 -171
  639. package/dist/web/components/Tag.d.ts.map +0 -1
  640. package/dist/web/components/Tag.js +0 -52
  641. package/dist/web/components/Tag.js.map +0 -1
  642. package/dist/web/components/Tag.js.zyzz.json +0 -1
  643. package/dist/web/components/internal/FieldVariant.d.ts +0 -4
  644. package/dist/web/components/internal/FieldVariant.d.ts.map +0 -1
  645. package/dist/web/components/internal/FieldVariant.js +0 -4
  646. package/dist/web/components/internal/FieldVariant.js.map +0 -1
  647. package/src/fonts/GeistMono-Variable.woff2 +0 -0
  648. package/src/web/components/Callout.tsx +0 -241
  649. package/src/web/components/IconChip.tsx +0 -54
  650. package/src/web/components/Rows.tsx +0 -588
  651. package/src/web/components/Tag.tsx +0 -149
  652. package/src/web/components/internal/FieldVariant.ts +0 -6
@@ -0,0 +1,120 @@
1
+ import { useRender } from '@base-ui/react/use-render'
2
+ import type { ComponentPropsWithRef } from 'react'
3
+ import type * as zyzz from 'zyzz'
4
+ import { variants } from '../zyzz.config.js'
5
+
6
+ /**
7
+ * A compact label for a status or category, rendered as a `span` at least 80px wide. Pass
8
+ * `render`, such as `<button type="button" />` or an `a` element, to make it interactive. Those
9
+ * badges keep the badge look and add pointer, focus-visible and press feedback.
10
+ *
11
+ * - Keep the text to a word or two that names a status or attribute, such as Testnet.
12
+ * - Place it next to a title or row value. Use `inverse` for one recommended option.
13
+ * - Render a static badge for display. Reach for `render` only when the badge performs an action.
14
+ *
15
+ * @example
16
+ * <Badge size="small" variant="outlined">
17
+ * Testnet
18
+ * </Badge>
19
+ *
20
+ * @see {@link https://base-ui.com/react/utils/use-render | Base UI useRender}
21
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/span | MDN span element}
22
+ * @see {@link https://www.w3.org/WAI/WCAG22/Understanding/contrast-minimum.html | WCAG 2.2 Contrast (Minimum)}
23
+ */
24
+ export function Badge(props: Badge.Props) {
25
+ const { className, ref, render, size, variant, vars, ...attributes } = props
26
+
27
+ return useRender({
28
+ defaultTagName: 'span',
29
+ props: {
30
+ ...attributes,
31
+ ...styles.badge({ className, size, style: props.style, variant, vars }),
32
+ },
33
+ ref,
34
+ render,
35
+ })
36
+ }
37
+
38
+ export namespace Badge {
39
+ export type Props = ComponentPropsWithRef<'span'> &
40
+ zyzz.Props.Variants<typeof styles.badge> & { render?: useRender.RenderProp | undefined }
41
+ }
42
+
43
+ namespace styles {
44
+ export const badge = variants(
45
+ {
46
+ base: {
47
+ alignItems: 'center',
48
+ border: '1px solid !custom',
49
+ borderColor: 'transparent !custom',
50
+ borderRadius: '2xs',
51
+ boxSizing: 'border-box',
52
+ columnGap: '4',
53
+ display: 'inline-flex',
54
+ height: '32',
55
+ justifyContent: 'center',
56
+ minWidth: '80',
57
+ // The 1px border sits inside the padding, so every style keeps Figma's width.
58
+ paddingInline: 'calc(0.75rem - 1px) !custom',
59
+ typography: 'body.b2',
60
+ whiteSpace: 'nowrap',
61
+ selectors: {
62
+ '& > svg': { flexShrink: '0 !custom', height: '16', width: '16' },
63
+ // Button and link badges keep the badge look and add only pointer, focus and press feedback.
64
+ '&:is(button, a)': {
65
+ cursor: 'pointer',
66
+ outlineColor: 'transparent !custom',
67
+ outlineOffset: '0',
68
+ outlineStyle: 'solid !custom',
69
+ outlineWidth: '2',
70
+ textDecoration: 'none !custom',
71
+ transitionDuration: '160',
72
+ transitionProperty: 'opacity, outline-color, outline-offset, scale',
73
+ transitionTimingFunction: 'snappy',
74
+ },
75
+ '&:is(button, a):active': { scale: 'press' },
76
+ '&:is(button, a):focus-visible': {
77
+ outlineColor: 'border.focus',
78
+ outlineOffset: '2',
79
+ },
80
+ '&:is(button, a):hover': { opacity: '0.8 !custom' },
81
+ '&:is(button):disabled': { cursor: 'default', opacity: 'disabled' },
82
+ },
83
+ '@media (prefers-reduced-motion: reduce)': {
84
+ selectors: {
85
+ '&:is(button, a)': { transitionProperty: 'opacity, outline-color' },
86
+ '&:is(button, a):active': { scale: 'none !custom' },
87
+ },
88
+ },
89
+ },
90
+ defaultVariants: { size: 'medium', variant: 'soft' },
91
+ variants: {
92
+ size: {
93
+ medium: {},
94
+ small: {
95
+ // Platform has no 6px radius step, so the literal takes the squircle scale of the steps.
96
+ borderRadius: 'calc(0.375rem * var(--tds-corner-scale, 1)) !custom',
97
+ height: '28',
98
+ paddingInline: 'calc(0.5rem - 1px) !custom',
99
+ typography: 'body.b3',
100
+ selectors: { '& > svg': { height: '12', width: '12' } },
101
+ },
102
+ },
103
+ variant: {
104
+ // The accent text follows the inverse content color, which turns black in dark mode.
105
+ accent: { backgroundColor: 'accent.blue.background', color: 'inverse.content.primary' },
106
+ elevated: { backgroundColor: 'background.elevated', color: 'content.primary' },
107
+ // The inverse fill stays dark in both schemes, so its text stays white.
108
+ inverse: { backgroundColor: 'inverse.background.secondary', color: 'neutral.000' },
109
+ outlined: {
110
+ backgroundColor: 'transparent !custom',
111
+ borderColor: 'line.secondary',
112
+ color: 'content.primary',
113
+ },
114
+ soft: { backgroundColor: 'container.regular', color: 'content.primary' },
115
+ },
116
+ },
117
+ },
118
+ { id: 'tds/web/badge' },
119
+ )
120
+ }
@@ -8,7 +8,7 @@ import { style, variants } from '../zyzz.config.js'
8
8
  * A full-width strip for a system or page-wide message, rendered as a plain `div` with no live
9
9
  * region. Add `role="status"` or `role="alert"` only when the banner appears after the page loads.
10
10
  *
11
- * - Use it for messages about the whole product or page. Use `Callout` for a note tied to content.
11
+ * - Use it for messages about the whole product or page. Use `Alert` for a note tied to content.
12
12
  * - State severity in the text. `intent` color alone does not reach every reader.
13
13
  * - `Dismiss` only renders the button. Remove the banner in its `onClick`.
14
14
  *
@@ -97,6 +97,7 @@ namespace styles {
97
97
  border: 'none !custom',
98
98
  borderRadius: 'full',
99
99
  color: 'inherit !custom',
100
+ cornerShape: 'round',
100
101
  cursor: 'pointer',
101
102
  display: 'inline-flex',
102
103
  flexShrink: '0 !custom',
@@ -114,11 +115,11 @@ namespace styles {
114
115
  transitionDuration: '160',
115
116
  transitionProperty: 'outline-color, outline-offset, text-decoration-color, scale',
116
117
  transitionTimingFunction: 'snappy',
117
- typography: 'copy.14.strong',
118
+ typography: 'body.b2Strong',
118
119
  whiteSpace: 'nowrap',
119
120
  selectors: {
120
121
  '&:active': { scale: 'press' },
121
- '&:focus-visible': { outlineColor: 'blue.700', outlineOffset: '2' },
122
+ '&:focus-visible': { outlineColor: 'border.focus', outlineOffset: '2' },
122
123
  '&:hover': { textDecorationColor: 'transparent !custom' },
123
124
  },
124
125
  '@media (prefers-reduced-motion: reduce)': {
@@ -141,17 +142,17 @@ namespace styles {
141
142
  paddingBlock: '8',
142
143
  paddingInline: '16',
143
144
  position: 'relative',
144
- typography: 'copy.14',
145
+ typography: 'body.b2',
145
146
  width: '100% !custom',
146
147
  },
147
148
  defaultVariants: { intent: 'neutral' },
148
149
  variants: {
149
150
  intent: {
150
- info: { backgroundColor: 'blue.100', color: 'blue.900' },
151
- negative: { backgroundColor: 'red.100', color: 'red.900' },
152
- neutral: { backgroundColor: 'grayAlpha.100', color: 'foreground' },
153
- positive: { backgroundColor: 'green.100', color: 'green.900' },
154
- warning: { backgroundColor: 'amber.100', color: 'amber.900' },
151
+ info: { backgroundColor: 'container.regular', color: 'content.primary' },
152
+ negative: { backgroundColor: 'container.negative', color: 'content.negative' },
153
+ neutral: { backgroundColor: 'container.regular', color: 'content.primary' },
154
+ positive: { backgroundColor: 'container.positive', color: 'content.positive' },
155
+ warning: { backgroundColor: 'container.warning', color: 'content.warning' },
155
156
  },
156
157
  },
157
158
  },
@@ -170,6 +171,7 @@ namespace styles {
170
171
  border: 'none !custom',
171
172
  borderRadius: 'full',
172
173
  color: 'inherit !custom',
174
+ cornerShape: 'round',
173
175
  cursor: 'pointer',
174
176
  display: 'inline-flex',
175
177
  flexShrink: '0 !custom',
@@ -191,8 +193,8 @@ namespace styles {
191
193
  width: '32',
192
194
  selectors: {
193
195
  '&:active': { scale: 'press' },
194
- '&:focus-visible': { outlineColor: 'blue.700', outlineOffset: '2' },
195
- '&:hover': { backgroundColor: 'grayAlpha.200' },
196
+ '&:focus-visible': { outlineColor: 'border.focus', outlineOffset: '2' },
197
+ '&:hover': { backgroundColor: 'container.strong' },
196
198
  },
197
199
  '@media (prefers-reduced-motion: reduce)': {
198
200
  transitionProperty: 'background-color, outline-color',
@@ -0,0 +1,427 @@
1
+ import type { ComponentPropsWithRef, ReactNode } from 'react'
2
+ import { useSyncExternalStore } from 'react'
3
+ import * as Recharts from 'recharts'
4
+ import type * as zyzz from 'zyzz'
5
+ import { style, variants } from '../zyzz.config.js'
6
+
7
+ const reducedMotion = '(prefers-reduced-motion: reduce)'
8
+
9
+ /**
10
+ * A stacked bar chart of values over time, such as the spend of each agent per day, built on
11
+ * Recharts. Each `series` stacks in its own color, in order from the baseline. A value axis with
12
+ * three ticks leads the plot, the `index` labels the bars below it, and a legend names each series
13
+ * under the chart. Hovering a bar, or moving to it with the arrow keys, shows a `BarChart.Tooltip`
14
+ * with the value of each series.
15
+ *
16
+ * - Name the chart with `aria-label`, or with `aria-labelledby` pointing at its heading.
17
+ * - Give each series a color that stays the same wherever it appears, such as an agent's brand color.
18
+ * - Format values with `format`, which the axis, the tooltip, and the total share.
19
+ * - Offer the same values as a `Table` when people need to read each one.
20
+ *
21
+ * @example
22
+ * <BarChart
23
+ * aria-label="Spend by agent"
24
+ * data={[{ claude: 1.2, codex: 0.4, day: 'Oct 1' }]}
25
+ * format={(value) => `$${value}`}
26
+ * index="day"
27
+ * series={[
28
+ * { color: '#d97757', key: 'claude', label: 'Claude' },
29
+ * { color: '#10a37f', key: 'codex', label: 'Codex' },
30
+ * ]}
31
+ * />
32
+ *
33
+ * @see {@link https://recharts.github.io/en-US/api/BarChart/ | Recharts BarChart}
34
+ * @see {@link https://www.w3.org/WAI/WCAG22/Understanding/non-text-content.html | WCAG 2.2 Non-text Content}
35
+ * @see {@link https://www.w3.org/WAI/WCAG22/Understanding/use-of-color.html | WCAG 2.2 Use of Color}
36
+ */
37
+ export function BarChart<const datum extends BarChart.Datum>(props: BarChart.Props<datum>) {
38
+ const {
39
+ className,
40
+ data,
41
+ format = String,
42
+ height = 198,
43
+ index,
44
+ series,
45
+ ticks,
46
+ vars,
47
+ ...attributes
48
+ } = props
49
+ const reduced = useReducedMotion()
50
+ const value = (entry: datum, key: string) => Number(entry[key] ?? 0)
51
+ // Recharts infers its data type from a key of the generic datum and cannot resolve it, so the
52
+ // axis and the bars read their keys as strings.
53
+ const category: string = index
54
+ const peak = Math.max(
55
+ 0,
56
+ ...data.map((entry) => series.reduce((sum, item) => sum + value(entry, item.key), 0)),
57
+ )
58
+ const step = niceStep(peak / 2)
59
+
60
+ return (
61
+ <div role="figure" {...attributes} {...styles.root({ className, style: props.style, vars })}>
62
+ <Recharts.BarChart
63
+ accessibilityLayer
64
+ barCategoryGap={3}
65
+ data={[...data]}
66
+ height={height}
67
+ margin={{ bottom: 0, left: 0, right: 0, top: 0 }}
68
+ responsive
69
+ width="100%"
70
+ >
71
+ <Recharts.CartesianGrid strokeDasharray="2 4" vertical={false} />
72
+ <Recharts.YAxis
73
+ axisLine={false}
74
+ // Three even ticks round the scale up from the tallest bar.
75
+ domain={[0, step * 2]}
76
+ tickFormatter={(tick: number) => format(tick)}
77
+ tickLine={false}
78
+ tickMargin={10}
79
+ tickSize={0}
80
+ ticks={[0, step, Number((step * 2).toPrecision(12))]}
81
+ width={54}
82
+ />
83
+ <Recharts.XAxis
84
+ axisLine={false}
85
+ dataKey={category}
86
+ height={28}
87
+ tickLine={false}
88
+ tickMargin={12}
89
+ tickSize={0}
90
+ {...(ticks ? { interval: 0, ticks: [...ticks] } : { interval: 'preserveStartEnd' })}
91
+ />
92
+ <Recharts.Tooltip
93
+ content={(content) => {
94
+ // Each payload entry carries the datum of the hovered bar, which two bars can share
95
+ // a label with.
96
+ const entry: datum | undefined = content.payload?.[0]?.payload
97
+ if (!content.active || !entry) return null
98
+
99
+ const items = series.map((item) => ({
100
+ color: item.color,
101
+ label: item.label,
102
+ value: format(value(entry, item.key)),
103
+ }))
104
+ const total = series.reduce((sum, item) => sum + value(entry, item.key), 0)
105
+ return <Tooltip items={items} label={String(content.label)} total={format(total)} />
106
+ }}
107
+ cursor={styles.cursor()}
108
+ isAnimationActive={false}
109
+ />
110
+ {/* A day without spend keeps a 2px stub at the baseline, under the bars of the others. */}
111
+ <Recharts.Bar
112
+ dataKey={() => 0}
113
+ isAnimationActive={false}
114
+ legendType="none"
115
+ minPointSize={2}
116
+ shape={(shape: Recharts.BarShapeProps) => (
117
+ <rect
118
+ {...styles.stub()}
119
+ height={2}
120
+ width={shape.width}
121
+ x={shape.x}
122
+ y={(shape.y ?? 0) + (shape.height ?? 0) - 2}
123
+ />
124
+ )}
125
+ stackId="total"
126
+ tooltipType="none"
127
+ />
128
+ {series.map((item: BarChart.Series) => (
129
+ <Recharts.Bar
130
+ animationDuration={300}
131
+ animationEasing="ease-out"
132
+ dataKey={item.key}
133
+ fill={item.color}
134
+ isAnimationActive={!reduced}
135
+ key={item.key}
136
+ name={item.label}
137
+ shape={segment}
138
+ stackId="total"
139
+ />
140
+ ))}
141
+ </Recharts.BarChart>
142
+ <div {...styles.legend()}>
143
+ {series.map((item) => (
144
+ <span key={item.key} {...styles.entry()}>
145
+ <span
146
+ aria-hidden="true"
147
+ {...styles.swatch({ style: { backgroundColor: item.color } })}
148
+ />
149
+ {item.label}
150
+ </span>
151
+ ))}
152
+ </div>
153
+ </div>
154
+ )
155
+ }
156
+
157
+ export namespace BarChart {
158
+ /** One bar: the value of each series, and the label of the bar under `index`. */
159
+ export type Datum = Record<string, number | string>
160
+
161
+ export type Props<datum extends Datum = Datum> = Omit<ComponentPropsWithRef<'div'>, 'children'> &
162
+ zyzz.Props.Variants<typeof styles.root> & {
163
+ /**
164
+ * One entry per bar, in order along the axis. Each series value is zero or more, since the
165
+ * series stack up from a zero baseline and the value axis starts at zero.
166
+ */
167
+ data: readonly datum[]
168
+ /**
169
+ * Formats a value for the axis, the tooltip, and the total, such as `(value) => `$${value}``.
170
+ *
171
+ * @default String
172
+ */
173
+ format?: ((value: number) => string) | undefined
174
+ /**
175
+ * Height in px of the plot and the axis under it. The legend adds 28px.
176
+ *
177
+ * @default 198
178
+ */
179
+ height?: number | undefined
180
+ /** Key of the label of each bar, such as `day`. */
181
+ index: keyof datum & string
182
+ /**
183
+ * The stacked series, from the baseline up, which the legend lists in the same order. Each
184
+ * key names a field with a number in every datum.
185
+ */
186
+ series: readonly Series<NumericKey<datum>>[]
187
+ /** Labels under the axis, such as every seventh day. Recharts picks them when absent. */
188
+ ticks?: readonly string[] | undefined
189
+ }
190
+
191
+ /** The keys of a datum whose values are numbers, or every key of a datum typed by `Datum`. */
192
+ export type NumericKey<datum extends Datum> = string extends keyof datum
193
+ ? string
194
+ : { [key in keyof datum]: datum[key] extends number ? key : never }[keyof datum] & string
195
+
196
+ /** One stacked series. */
197
+ export type Series<key extends string = string> = {
198
+ /** Fill of the series, such as the brand color of an agent. */
199
+ color: string
200
+ /** Key of the series' value in each datum. */
201
+ key: key
202
+ /** Name of the series in the legend and the tooltip. */
203
+ label: string
204
+ }
205
+
206
+ /**
207
+ * The card that names a bar and lists the value of each series in it, which the chart shows on
208
+ * hover. Render it alone to show the values of a bar elsewhere.
209
+ */
210
+ export function Tooltip(props: Tooltip.Props) {
211
+ const { className, items, label, total, vars, ...attributes } = props
212
+
213
+ return (
214
+ <div {...attributes} {...styles.tooltip({ className, style: props.style, vars })}>
215
+ <div {...styles.header()}>
216
+ <span>{label}</span>
217
+ {total !== undefined && <span>{total}</span>}
218
+ </div>
219
+ <ul {...styles.rows()}>
220
+ {items.map((item, position) => (
221
+ <li key={position} {...styles.row()}>
222
+ <span
223
+ aria-hidden="true"
224
+ {...styles.swatch({ style: { backgroundColor: item.color } })}
225
+ />
226
+ <span {...styles.series()}>{item.label}</span>
227
+ <span {...styles.value()}>{item.value}</span>
228
+ </li>
229
+ ))}
230
+ </ul>
231
+ </div>
232
+ )
233
+ }
234
+
235
+ export namespace Tooltip {
236
+ /** One series in the tooltip. */
237
+ export type Item = {
238
+ /** Color of the series, as its bars fill. */
239
+ color: string
240
+ /** Name of the series. */
241
+ label: ReactNode
242
+ /** Formatted value of the series in the bar. */
243
+ value: ReactNode
244
+ }
245
+
246
+ export type Props = Omit<ComponentPropsWithRef<'div'>, 'children'> &
247
+ zyzz.Props.Variants<typeof styles.tooltip> & {
248
+ /** The series in the bar, from the baseline up. */
249
+ items: readonly Item[]
250
+ /** Label of the bar, such as its day. */
251
+ label: ReactNode
252
+ /** Formatted total of the bar, at the end of the header. Absent, the header shows the label alone. */
253
+ total?: ReactNode | undefined
254
+ }
255
+ }
256
+ }
257
+
258
+ /**
259
+ * Returns the smallest step of 1, 2, 2.5, or 5 times a power of ten that is at least `target`. An
260
+ * empty chart steps by 0.5, so its scale reaches 1.
261
+ */
262
+ function niceStep(target: number) {
263
+ if (!(target > 0)) return 0.5
264
+
265
+ const power = 10 ** Math.floor(Math.log10(target))
266
+ const factor = [1, 2, 2.5, 5, 10].find((entry) => entry * power >= target) ?? 10
267
+ return Number((factor * power).toPrecision(12))
268
+ }
269
+
270
+ /** The bar of a tooltip-less series stacks 1px below the one above it, so segments stay apart. */
271
+ function segment(shape: Recharts.BarShapeProps) {
272
+ const height = Math.max((shape.height ?? 0) - 1, 0)
273
+
274
+ return (
275
+ <rect
276
+ fill={shape.fill}
277
+ height={height}
278
+ width={shape.width}
279
+ x={shape.x}
280
+ y={(shape.y ?? 0) + (shape.height ?? 0) - height}
281
+ />
282
+ )
283
+ }
284
+
285
+ /** Whether the reader asks for reduced motion, which skips the bars' growth on load. */
286
+ function useReducedMotion() {
287
+ return useSyncExternalStore(
288
+ (notify) => {
289
+ const query = window.matchMedia(reducedMotion)
290
+ query.addEventListener('change', notify)
291
+ return () => query.removeEventListener('change', notify)
292
+ },
293
+ () => window.matchMedia(reducedMotion).matches,
294
+ () => true,
295
+ )
296
+ }
297
+
298
+ const Tooltip = BarChart.Tooltip
299
+
300
+ namespace styles {
301
+ export const cursor = style({ fill: 'container.regular' }, { id: 'tds/web/bar-chart/cursor' })
302
+
303
+ export const entry = style(
304
+ { alignItems: 'center', columnGap: '6', display: 'inline-flex', whiteSpace: 'nowrap' },
305
+ { id: 'tds/web/bar-chart/entry' },
306
+ )
307
+
308
+ export const header = style(
309
+ {
310
+ color: 'content.primary',
311
+ columnGap: '12',
312
+ display: 'flex',
313
+ justifyContent: 'space-between',
314
+ typography: 'body.b3Strong',
315
+ },
316
+ { id: 'tds/web/bar-chart/header' },
317
+ )
318
+
319
+ // The legend sits 12px under the axis labels, 16px between its entries.
320
+ export const legend = style(
321
+ {
322
+ color: 'content.secondary',
323
+ columnGap: '16',
324
+ display: 'flex',
325
+ flexWrap: 'wrap',
326
+ marginBlockStart: '12',
327
+ rowGap: '4',
328
+ typography: 'body.b3',
329
+ },
330
+ { id: 'tds/web/bar-chart/legend' },
331
+ )
332
+
333
+ // Recharts draws the grid and the axis labels in SVG, so their paint comes from these selectors.
334
+ // An SVG text paints with `fill`, and takes `color` too so that `currentColor` matches it.
335
+ export const root = variants(
336
+ {
337
+ base: {
338
+ display: 'flex',
339
+ flexDirection: 'column',
340
+ minWidth: '0',
341
+ selectors: {
342
+ '& .recharts-cartesian-axis-tick-value': {
343
+ color: 'content.tertiary',
344
+ fill: 'currentColor !custom',
345
+ typography: 'body.b3',
346
+ },
347
+ '& .recharts-cartesian-grid-horizontal line': { stroke: 'line.secondary' },
348
+ '& .recharts-surface': { outline: 'none !custom', overflow: 'visible' },
349
+ '& .recharts-wrapper:focus-visible': {
350
+ borderRadius: '3xs',
351
+ outlineColor: 'border.focus',
352
+ outlineOffset: '2',
353
+ outlineStyle: 'solid !custom',
354
+ outlineWidth: '2',
355
+ },
356
+ },
357
+ },
358
+ },
359
+ { id: 'tds/web/bar-chart' },
360
+ )
361
+
362
+ export const row = style(
363
+ { alignItems: 'center', columnGap: '8', display: 'flex' },
364
+ { id: 'tds/web/bar-chart/row' },
365
+ )
366
+
367
+ export const rows = style(
368
+ {
369
+ display: 'flex',
370
+ flexDirection: 'column',
371
+ listStyle: 'none',
372
+ margin: '0',
373
+ marginBlockStart: '8',
374
+ padding: '0',
375
+ rowGap: '4',
376
+ },
377
+ { id: 'tds/web/bar-chart/rows' },
378
+ )
379
+
380
+ export const series = style(
381
+ {
382
+ color: 'content.secondary',
383
+ flexGrow: '1 !custom',
384
+ minWidth: '0',
385
+ overflow: 'hidden',
386
+ textOverflow: 'ellipsis',
387
+ whiteSpace: 'nowrap',
388
+ },
389
+ { id: 'tds/web/bar-chart/series' },
390
+ )
391
+
392
+ export const stub = style({ fill: 'container.strong' }, { id: 'tds/web/bar-chart/stub' })
393
+
394
+ // A swatch keeps a 2px corner, which no radius token sets.
395
+ export const swatch = style(
396
+ {
397
+ borderRadius: 'calc(0.125rem * var(--tds-corner-scale, 1)) !custom',
398
+ flexShrink: '0 !custom',
399
+ height: '8',
400
+ width: '8',
401
+ },
402
+ { id: 'tds/web/bar-chart/swatch' },
403
+ )
404
+
405
+ // Figma pads the 16px corner of the tooltip by 12px, below the radius, which keeps its rows dense.
406
+ export const tooltip = variants(
407
+ {
408
+ base: {
409
+ backgroundColor: 'background.elevated',
410
+ borderRadius: 'sm',
411
+ boxShadow: 'regular',
412
+ boxSizing: 'border-box',
413
+ color: 'content.primary',
414
+ padding: '12',
415
+ pointerEvents: 'none',
416
+ typography: 'body.b3',
417
+ width: '200',
418
+ },
419
+ },
420
+ { id: 'tds/web/bar-chart/tooltip' },
421
+ )
422
+
423
+ export const value = style(
424
+ { color: 'content.primary', flexShrink: '0 !custom' },
425
+ { id: 'tds/web/bar-chart/value' },
426
+ )
427
+ }
@@ -98,8 +98,8 @@ namespace styles {
98
98
  export const link = variants(
99
99
  {
100
100
  base: {
101
- borderRadius: '6',
102
- color: 'gray.900',
101
+ borderRadius: '2xs',
102
+ color: 'content.secondary',
103
103
  outlineColor: 'transparent !custom',
104
104
  outlineOffset: '0',
105
105
  outlineStyle: 'solid !custom',
@@ -109,15 +109,15 @@ namespace styles {
109
109
  transitionProperty: 'color, outline-color, outline-offset',
110
110
  transitionTimingFunction: 'snappy',
111
111
  // Weight overrides the typography token, so it stays after it.
112
- typography: 'copy.14',
112
+ typography: 'body.b2',
113
113
  selectors: {
114
- '&:focus-visible': { outlineColor: 'blue.700', outlineOffset: '2' },
115
- '&:hover:is(a)': { color: 'foreground' },
114
+ '&:focus-visible': { outlineColor: 'border.focus', outlineOffset: '2' },
115
+ '&:hover:is(a)': { color: 'content.primary' },
116
116
  },
117
117
  '@media (prefers-reduced-motion: reduce)': { transitionProperty: 'color, outline-color' },
118
118
  },
119
119
  defaultVariants: { current: false },
120
- variants: { current: { false: {}, true: { color: 'foreground' } } },
120
+ variants: { current: { false: {}, true: { color: 'content.primary' } } },
121
121
  },
122
122
  { id: 'tds/web/breadcrumbs/link' },
123
123
  )
@@ -141,7 +141,7 @@ namespace styles {
141
141
  export const separator = style(
142
142
  {
143
143
  alignItems: 'center',
144
- color: 'gray.700',
144
+ color: 'content.tertiary',
145
145
  display: 'inline-flex',
146
146
  fontSize: '16',
147
147
  },