@tempoxyz/ds 0.2.6 → 0.3.1

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 (662) 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 +161 -0
  52. package/dist/web/components/Alert.d.ts.map +1 -0
  53. package/dist/web/components/Alert.js +97 -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 +172 -28
  74. package/dist/web/components/AppShell.d.ts.map +1 -1
  75. package/dist/web/components/AppShell.js +89 -29
  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 +167 -32
  118. package/dist/web/components/Button.d.ts.map +1 -1
  119. package/dist/web/components/Button.js +14 -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 +530 -0
  236. package/dist/web/components/ListGroup.d.ts.map +1 -0
  237. package/dist/web/components/ListGroup.js +270 -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 +26 -9
  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 +238 -39
  312. package/dist/web/components/SidebarMenu.d.ts.map +1 -1
  313. package/dist/web/components/SidebarMenu.js +123 -20
  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 +123 -101
  372. package/dist/web/components/Surface.d.ts.map +1 -1
  373. package/dist/web/components/Surface.js +20 -10
  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/components/internal/TabBar.d.ts +33 -0
  470. package/dist/web/components/internal/TabBar.d.ts.map +1 -0
  471. package/dist/web/components/internal/TabBar.js +30 -0
  472. package/dist/web/components/internal/TabBar.js.map +1 -0
  473. package/dist/web/components/internal/Text.d.ts +9 -0
  474. package/dist/web/components/internal/Text.d.ts.map +1 -0
  475. package/dist/web/components/internal/Text.js +35 -0
  476. package/dist/web/components/internal/Text.js.map +1 -0
  477. package/dist/web/index.d.ts +18 -6
  478. package/dist/web/index.d.ts.map +1 -1
  479. package/dist/web/index.js +18 -6
  480. package/dist/web/index.js.map +1 -1
  481. package/dist/web/index.js.zyzz.json +1 -1
  482. package/dist/web/vars.d.ts +612 -704
  483. package/dist/web/vars.d.ts.map +1 -1
  484. package/dist/web/vars.js +7 -6
  485. package/dist/web/vars.js.map +1 -1
  486. package/dist/web/vars.js.zyzz.json +1 -1
  487. package/dist/web/zyzz.config.d.ts +3041 -3506
  488. package/dist/web/zyzz.config.d.ts.map +1 -1
  489. package/dist/web/zyzz.config.js +29 -3
  490. package/dist/web/zyzz.config.js.map +1 -1
  491. package/dist/web/zyzz.config.js.zyzz.json +1 -1
  492. package/package.json +149 -5
  493. package/src/fonts/JetBrainsMono-Bold-latin.woff2 +0 -0
  494. package/src/fonts/JetBrainsMono-Bold-other.woff2 +0 -0
  495. package/src/fonts/JetBrainsMono-Bold.woff2 +0 -0
  496. package/src/fonts/JetBrainsMono-Medium-latin.woff2 +0 -0
  497. package/src/fonts/JetBrainsMono-Medium-other.woff2 +0 -0
  498. package/src/fonts/JetBrainsMono-Medium.woff2 +0 -0
  499. package/src/fonts/{Geist-OFL.txt → JetBrainsMono-OFL.txt} +4 -3
  500. package/src/fonts/JetBrainsMono-Regular-latin.woff2 +0 -0
  501. package/src/fonts/JetBrainsMono-Regular-other.woff2 +0 -0
  502. package/src/fonts/JetBrainsMono-Regular.woff2 +0 -0
  503. package/src/fonts/JetBrainsMono-SemiBold-latin.woff2 +0 -0
  504. package/src/fonts/JetBrainsMono-SemiBold-other.woff2 +0 -0
  505. package/src/fonts/JetBrainsMono-SemiBold.woff2 +0 -0
  506. package/src/fonts/Pilat-Black-latin.woff2 +0 -0
  507. package/src/fonts/Pilat-Black-other.woff2 +0 -0
  508. package/src/fonts/Pilat-Black.woff2 +0 -0
  509. package/src/fonts/Pilat-Bold-latin.woff2 +0 -0
  510. package/src/fonts/Pilat-Bold-other.woff2 +0 -0
  511. package/src/fonts/Pilat-Bold.woff2 +0 -0
  512. package/src/fonts/Pilat-Book-latin.woff2 +0 -0
  513. package/src/fonts/Pilat-Book-other.woff2 +0 -0
  514. package/src/fonts/Pilat-Book.woff2 +0 -0
  515. package/src/fonts/Pilat-Demi-latin.woff2 +0 -0
  516. package/src/fonts/Pilat-Demi-other.woff2 +0 -0
  517. package/src/fonts/Pilat-Demi.woff2 +0 -0
  518. package/src/fonts/Pilat-Heavy-latin.woff2 +0 -0
  519. package/src/fonts/Pilat-Heavy-other.woff2 +0 -0
  520. package/src/fonts/Pilat-Heavy.woff2 +0 -0
  521. package/src/fonts/Pilat-Light-latin.woff2 +0 -0
  522. package/src/fonts/Pilat-Light-other.woff2 +0 -0
  523. package/src/fonts/Pilat-Light.woff2 +0 -0
  524. package/src/fonts/Pilat-Regular-latin.woff2 +0 -0
  525. package/src/fonts/Pilat-Regular-other.woff2 +0 -0
  526. package/src/fonts/Pilat-Regular.woff2 +0 -0
  527. package/src/fonts/Pilat-Thin-latin.woff2 +0 -0
  528. package/src/fonts/Pilat-Thin-other.woff2 +0 -0
  529. package/src/fonts/Pilat-Thin.woff2 +0 -0
  530. package/src/fonts/README.md +15 -2
  531. package/src/oxlint/rules/PreferComponent.ts +6 -6
  532. package/src/web/README.md +7 -7
  533. package/src/web/components/Accordion.tsx +8 -8
  534. package/src/web/components/AgentLogo.tsx +330 -0
  535. package/src/web/components/Alert.tsx +321 -0
  536. package/src/web/components/AlertDialog.tsx +47 -111
  537. package/src/web/components/Amount.tsx +6 -6
  538. package/src/web/components/AmountInput.tsx +59 -134
  539. package/src/web/components/AppShell.tsx +367 -43
  540. package/src/web/components/AssetChip.tsx +110 -0
  541. package/src/web/components/Autocomplete.tsx +4 -4
  542. package/src/web/components/Avatar.tsx +42 -119
  543. package/src/web/components/Badge.tsx +122 -0
  544. package/src/web/components/Banner.tsx +13 -11
  545. package/src/web/components/BarChart.tsx +427 -0
  546. package/src/web/components/Breadcrumbs.tsx +7 -7
  547. package/src/web/components/Button.tsx +159 -41
  548. package/src/web/components/ButtonGroup.tsx +59 -0
  549. package/src/web/components/Calendar.tsx +15 -13
  550. package/src/web/components/Checkbox.tsx +14 -11
  551. package/src/web/components/ChoiceGroup.tsx +107 -26
  552. package/src/web/components/Choicebox.tsx +30 -28
  553. package/src/web/components/Combobox.tsx +10 -8
  554. package/src/web/components/CopyButton.tsx +1 -1
  555. package/src/web/components/DatePicker.tsx +42 -61
  556. package/src/web/components/Dialog.tsx +273 -71
  557. package/src/web/components/Drawer.tsx +45 -18
  558. package/src/web/components/Empty.tsx +13 -8
  559. package/src/web/components/Field.tsx +78 -132
  560. package/src/web/components/Fieldset.tsx +16 -37
  561. package/src/web/components/Frame.tsx +13 -20
  562. package/src/web/components/Gauge.tsx +4 -4
  563. package/src/web/components/Hex.tsx +13 -56
  564. package/src/web/components/IconTile.tsx +57 -0
  565. package/src/web/components/Identicon.tsx +1 -10
  566. package/src/web/components/Kbd.tsx +8 -8
  567. package/src/web/components/ListGroup.tsx +857 -0
  568. package/src/web/components/LoadingDots.tsx +1 -0
  569. package/src/web/components/Menu.tsx +50 -35
  570. package/src/web/components/NetworkLogo.tsx +208 -0
  571. package/src/web/components/NumberField.tsx +18 -33
  572. package/src/web/components/OtpField.tsx +51 -102
  573. package/src/web/components/Pagination.tsx +16 -14
  574. package/src/web/components/Popover.tsx +8 -8
  575. package/src/web/components/Progress.tsx +7 -5
  576. package/src/web/components/Qr.tsx +1 -1
  577. package/src/web/components/RadioGroup.tsx +9 -7
  578. package/src/web/components/SecretValue.tsx +11 -11
  579. package/src/web/components/Select.tsx +89 -26
  580. package/src/web/components/Separator.tsx +95 -7
  581. package/src/web/components/SidebarMenu.tsx +390 -53
  582. package/src/web/components/Skeleton.tsx +5 -5
  583. package/src/web/components/Slider.tsx +12 -6
  584. package/src/web/components/Snippet.tsx +134 -75
  585. package/src/web/components/Spinner.tsx +38 -12
  586. package/src/web/components/SplitBar.tsx +158 -0
  587. package/src/web/components/SplitButton.tsx +26 -17
  588. package/src/web/components/StatusChip.tsx +138 -0
  589. package/src/web/components/StatusRow.tsx +162 -0
  590. package/src/web/components/Stepper.tsx +11 -8
  591. package/src/web/components/Surface.tsx +172 -93
  592. package/src/web/components/Switch.tsx +25 -29
  593. package/src/web/components/Table.tsx +281 -70
  594. package/src/web/components/Tabs.tsx +93 -50
  595. package/src/web/components/TempoLogo.tsx +89 -0
  596. package/src/web/components/{Input.tsx → TextInput.tsx} +87 -118
  597. package/src/web/components/Textarea.tsx +33 -78
  598. package/src/web/components/Toast.tsx +24 -22
  599. package/src/web/components/Token.tsx +106 -172
  600. package/src/web/components/TokenLogo.tsx +217 -0
  601. package/src/web/components/Tooltip.tsx +3 -3
  602. package/src/web/components/VerificationCode.tsx +97 -0
  603. package/src/web/components/Visual.tsx +166 -0
  604. package/src/web/components/internal/Field.ts +63 -72
  605. package/src/web/components/internal/InputGroup.ts +44 -101
  606. package/src/web/components/internal/Listbox.ts +20 -20
  607. package/src/web/components/internal/RowDisabled.ts +9 -0
  608. package/src/web/components/internal/RowsSize.ts +3 -5
  609. package/src/web/components/internal/TabBar.ts +52 -0
  610. package/src/web/components/internal/Text.ts +39 -0
  611. package/src/web/components/visuals/Passkey.svg +21 -0
  612. package/src/web/index.ts +18 -6
  613. package/src/web/logos/Base.svg +10 -0
  614. package/src/web/logos/Ethereum.svg +16 -0
  615. package/src/web/logos/HyperEVM.svg +27 -0
  616. package/src/web/logos/Polygon.svg +15 -0
  617. package/src/web/logos/README.md +14 -0
  618. package/src/web/logos/Solana.svg +11 -0
  619. package/src/web/logos/Tempo.svg +11 -0
  620. package/src/web/vars.ts +493 -534
  621. package/src/web/zyzz.config.ts +255 -12
  622. package/dist/fonts/GeistMono-Variable.woff2 +0 -0
  623. package/dist/web/components/AlertDialog.css +0 -1
  624. package/dist/web/components/Callout.css +0 -1
  625. package/dist/web/components/Callout.d.ts +0 -161
  626. package/dist/web/components/Callout.d.ts.map +0 -1
  627. package/dist/web/components/Callout.js +0 -83
  628. package/dist/web/components/Callout.js.map +0 -1
  629. package/dist/web/components/Callout.js.zyzz.json +0 -1
  630. package/dist/web/components/IconChip.css +0 -1
  631. package/dist/web/components/IconChip.d.ts +0 -53
  632. package/dist/web/components/IconChip.d.ts.map +0 -1
  633. package/dist/web/components/IconChip.js +0 -27
  634. package/dist/web/components/IconChip.js.map +0 -1
  635. package/dist/web/components/IconChip.js.zyzz.json +0 -1
  636. package/dist/web/components/Input.css +0 -1
  637. package/dist/web/components/Input.d.ts.map +0 -1
  638. package/dist/web/components/Input.js +0 -118
  639. package/dist/web/components/Input.js.map +0 -1
  640. package/dist/web/components/Input.js.zyzz.json +0 -1
  641. package/dist/web/components/Rows.css +0 -1
  642. package/dist/web/components/Rows.d.ts +0 -484
  643. package/dist/web/components/Rows.d.ts.map +0 -1
  644. package/dist/web/components/Rows.js +0 -171
  645. package/dist/web/components/Rows.js.map +0 -1
  646. package/dist/web/components/Rows.js.zyzz.json +0 -1
  647. package/dist/web/components/Tag.css +0 -1
  648. package/dist/web/components/Tag.d.ts +0 -171
  649. package/dist/web/components/Tag.d.ts.map +0 -1
  650. package/dist/web/components/Tag.js +0 -52
  651. package/dist/web/components/Tag.js.map +0 -1
  652. package/dist/web/components/Tag.js.zyzz.json +0 -1
  653. package/dist/web/components/internal/FieldVariant.d.ts +0 -4
  654. package/dist/web/components/internal/FieldVariant.d.ts.map +0 -1
  655. package/dist/web/components/internal/FieldVariant.js +0 -4
  656. package/dist/web/components/internal/FieldVariant.js.map +0 -1
  657. package/src/fonts/GeistMono-Variable.woff2 +0 -0
  658. package/src/web/components/Callout.tsx +0 -241
  659. package/src/web/components/IconChip.tsx +0 -54
  660. package/src/web/components/Rows.tsx +0 -588
  661. package/src/web/components/Tag.tsx +0 -149
  662. package/src/web/components/internal/FieldVariant.ts +0 -6
@@ -1,17 +1,20 @@
1
- import type { ComponentPropsWithRef } from 'react'
1
+ import { type ComponentPropsWithRef, type ReactNode, useRef } from 'react'
2
2
  import type * as zyzz from 'zyzz'
3
3
  import { style, variants } from '../zyzz.config.js'
4
4
  import { CopyButton } from './CopyButton.js'
5
5
  import { useCopy } from './internal/useCopy.js'
6
6
 
7
7
  /**
8
- * A one-line command or value in a `code` element, with a copy button at the end. A click anywhere
9
- * on the block copies `children` unless an `onClick` handler calls `preventDefault()`. The button
8
+ * A command or value in a `code` element, with a copy button at the top end. A click anywhere on
9
+ * the command copies `children` unless an `onClick` handler calls `preventDefault()`. The button
10
10
  * is the keyboard path and announces `Copied` through a polite status region.
11
11
  *
12
12
  * - Pass only the command text. The `prompt` glyph is decorative, hidden from assistive technology
13
13
  * and never copied.
14
- * - Keep it to one line. Long values scroll horizontally inside the focusable `code` element.
14
+ * - The first word, the program, renders in the primary color, and the arguments after it in the
15
+ * secondary color. Long commands wrap, and wrapped lines align with the arguments.
16
+ * - Pass a `Tabs.List` as `tabs` to switch between commands, such as one per agent. Wrap the
17
+ * snippet in `Tabs.Root`, and pass the command of the active tab as `children`.
15
18
  * - Name the copy button with `labels.copy`, such as `Copy install command`, when a page shows
16
19
  * several snippets. It defaults to `Copy`.
17
20
  *
@@ -24,28 +27,80 @@ import { useCopy } from './internal/useCopy.js'
24
27
  * @see {@link https://www.w3.org/WAI/WCAG22/Understanding/status-messages.html | WCAG 2.2 Status Messages}
25
28
  */
26
29
  export function Snippet(props: Snippet.Props) {
27
- const { children, className, labels, onClick, prompt = '$', size, vars, ...attributes } = props
30
+ const {
31
+ children,
32
+ className,
33
+ labels,
34
+ onClick,
35
+ prompt = '$',
36
+ // The deprecated size has no style, and stays off the element.
37
+ size: _size,
38
+ tabs,
39
+ vars,
40
+ ...attributes
41
+ } = props
42
+ const header = useRef<HTMLDivElement>(null)
28
43
  const state = useCopy(children)
29
44
 
45
+ // The program ends at the first whitespace. The arguments keep that whitespace, so the text
46
+ // reads, selects and copies as one command.
47
+ const [, program = '', rest = ''] = /^(\S*)([\s\S]*)$/.exec(children) ?? []
48
+
49
+ // Each part of the command takes a whole number of pixels, rounded up as the design sizes its
50
+ // texts, and the next part starts 8px after it. Every glyph of the mono face advances by `1ch`,
51
+ // so the margin after a part adds the rest.
52
+ const width = (text: string) => `round(up, ${text.length}ch, 1px)`
53
+ const gap = (text: string) => `calc(${width(text)} + 8px - ${text.length}ch)`
54
+ // Wrapped lines start under the arguments.
55
+ const indent = rest
56
+ ? `calc(${prompt ? `${width(prompt)} + 8px + ` : ''}${width(program)} + 8px)`
57
+ : undefined
58
+
30
59
  return (
31
60
  <div
32
61
  data-copied={state.copied || undefined}
33
62
  {...attributes}
34
63
  onClick={(event) => {
35
64
  onClick?.(event)
36
- if (!event.defaultPrevented) void state.copy()
65
+ // The tabs switch the command, so a click on them does not copy.
66
+ if (event.defaultPrevented || header.current?.contains(event.target as Node)) return
67
+ void state.copy()
37
68
  }}
38
- {...styles.root({ className, size, style: props.style, vars })}
69
+ {...styles.root({ className, style: props.style, vars })}
39
70
  >
40
- {prompt && (
41
- <span aria-hidden="true" {...styles.prompt()}>
42
- {prompt}
43
- </span>
71
+ {tabs && (
72
+ <div ref={header} {...styles.tabs()}>
73
+ {tabs}
74
+ </div>
44
75
  )}
45
- <code {...styles.text()} tabIndex={0}>
46
- {children}
47
- </code>
48
- <CopyButton aria-label={labels?.copy ?? 'Copy'} copied={state.copied} value={children} />
76
+ <div {...styles.command()}>
77
+ <code
78
+ {...styles.text({
79
+ style: indent
80
+ ? { paddingInlineStart: indent, textIndent: `calc(-1 * ${indent})` }
81
+ : undefined,
82
+ })}
83
+ >
84
+ {prompt && (
85
+ <span
86
+ aria-hidden="true"
87
+ {...styles.prompt({ style: { marginInlineEnd: gap(prompt) } })}
88
+ >
89
+ {prompt}
90
+ </span>
91
+ )}
92
+ <span
93
+ {...styles.program({
94
+ // The space before the arguments advances by another `1ch`.
95
+ style: rest ? { marginInlineEnd: `calc(${gap(program)} - 1ch)` } : undefined,
96
+ })}
97
+ >
98
+ {program}
99
+ </span>
100
+ {rest}
101
+ </code>
102
+ <CopyButton aria-label={labels?.copy ?? 'Copy'} copied={state.copied} value={children} />
103
+ </div>
49
104
  </div>
50
105
  )
51
106
  }
@@ -65,89 +120,93 @@ export namespace Snippet {
65
120
  * @default '$'
66
121
  */
67
122
  prompt?: string | false | undefined
123
+ /**
124
+ * Has no effect. The snippet has one size, and its height follows the lines of the command.
125
+ * @deprecated Remove the prop.
126
+ */
127
+ size?: 'large' | 'medium' | 'small' | undefined
128
+ /**
129
+ * A `Tabs.List` shown above the command, inside the border and over a rule. A click on it
130
+ * does not copy. Absent by default.
131
+ */
132
+ tabs?: ReactNode | undefined
68
133
  }
69
134
  }
70
135
 
71
136
  namespace styles {
137
+ // The copy button sits in the corner, and fills on hover anywhere on the command, since a click
138
+ // there copies. The fill selectors outrank the hover and press fills of the button, and the
139
+ // copied fill stays last, so it wins over the hover fill.
140
+ export const command = style(
141
+ {
142
+ alignItems: 'flex-start',
143
+ backgroundColor: 'container.subtle',
144
+ columnGap: '12',
145
+ cursor: 'pointer',
146
+ display: 'flex',
147
+ padding: '16',
148
+ selectors: {
149
+ '& > button': { color: 'content.secondary' },
150
+ '&:active > button:not(:disabled)': { scale: 'press' },
151
+ '&:hover > button:not(:disabled)': { backgroundColor: 'container.strong' },
152
+ '& > button[data-copied]:not(:disabled)': {
153
+ backgroundColor: 'container.positive',
154
+ color: 'content.positive',
155
+ },
156
+ },
157
+ '@media (prefers-reduced-motion: reduce)': {
158
+ selectors: { '&:active > button:not(:disabled)': { scale: 'none !custom' } },
159
+ },
160
+ },
161
+ { id: 'tds/web/snippet/command' },
162
+ )
163
+
164
+ export const program = style({ color: 'content.primary' }, { id: 'tds/web/snippet/program' })
165
+
72
166
  export const prompt = style(
73
- { color: 'gray.900', flexShrink: '0 !custom', userSelect: 'none' },
167
+ { color: 'content.tertiary', userSelect: 'none' },
74
168
  { id: 'tds/web/snippet/prompt' },
75
169
  )
76
170
 
171
+ // The snippet clips the command to its corners.
77
172
  export const root = variants(
78
173
  {
79
174
  base: {
80
- alignItems: 'center',
81
- backgroundColor: 'grayAlpha.100',
175
+ backgroundColor: 'background.elevated',
176
+ borderColor: 'line.secondary',
177
+ borderRadius: 'sm',
178
+ borderStyle: 'solid',
179
+ borderWidth: 'regular',
82
180
  boxSizing: 'border-box',
83
- color: 'gray.900',
84
- columnGap: '8',
85
- cursor: 'pointer',
86
- display: 'flex',
181
+ color: 'content.secondary',
87
182
  minWidth: '0',
183
+ overflow: 'hidden',
88
184
  position: 'relative',
89
- transitionDuration: '200ms, 160ms !custom',
90
- transitionProperty: 'background-color, scale',
91
- transitionTimingFunction: 'snappy',
92
- typography: 'label.14.mono',
93
- selectors: {
94
- // Inner buttons keep their own hover, so the block only reacts beside them.
95
- '&:hover:not(:has(button:hover))': { backgroundColor: 'grayAlpha.200' },
96
- '&:active:not(:has(button:active))': { scale: 'press' },
97
- '&[data-copied]': { backgroundColor: 'green.200' },
98
- },
99
- '@media (prefers-reduced-motion: reduce)': {
100
- transitionProperty: 'background-color',
101
- selectors: { '&:active:not(:has(button:active))': { scale: 'none !custom' } },
102
- },
103
- },
104
- defaultVariants: { size: 'medium' },
105
- variants: {
106
- // Heights and radii match Input: 32, 40 and 56px.
107
- size: {
108
- large: {
109
- borderRadius: '16',
110
- height: '56',
111
- paddingInlineEnd: '8',
112
- paddingInlineStart: '20',
113
- },
114
- medium: {
115
- borderRadius: '12',
116
- height: '40',
117
- paddingInlineEnd: '4',
118
- paddingInlineStart: '16',
119
- },
120
- small: {
121
- borderRadius: '8',
122
- height: '32',
123
- paddingInlineEnd: '4',
124
- paddingInlineStart: '12',
125
- selectors: { '& > button': { height: '24', minWidth: '24', width: '24' } },
126
- },
127
- },
128
185
  },
129
186
  },
130
187
  { id: 'tds/web/snippet' },
131
188
  )
132
189
 
190
+ // The tabs touch the top edge, where the snippet clips, so their focus rings draw inside them.
191
+ export const tabs = style(
192
+ {
193
+ borderBlockEndColor: 'line.secondary',
194
+ borderBlockEndStyle: 'solid',
195
+ borderBlockEndWidth: 'regular',
196
+ paddingInline: '8',
197
+ selectors: { '& [role="tab"]': { outlineOffset: '-2' } },
198
+ },
199
+ { id: 'tds/web/snippet/tabs' },
200
+ )
201
+
202
+ // A one-line command centers on the copy button, and a longer one starts level with it.
133
203
  export const text = style(
134
204
  {
205
+ alignSelf: 'center',
135
206
  flexGrow: '1 !custom',
136
- fontFamily: 'mono',
137
207
  minWidth: '0',
138
- outlineColor: 'transparent !custom',
139
- outlineOffset: '0',
140
- outlineStyle: 'solid !custom',
141
- outlineWidth: '2',
142
- overflowX: 'auto',
143
- transitionDuration: '160',
144
- transitionProperty: 'outline-color, outline-offset',
145
- transitionTimingFunction: 'snappy',
146
- whiteSpace: 'nowrap',
147
- selectors: {
148
- '&:focus-visible': { outlineColor: 'blue.700', outlineOffset: '2' },
149
- },
150
- '@media (prefers-reduced-motion: reduce)': { transitionProperty: 'outline-color' },
208
+ overflowWrap: 'anywhere',
209
+ typography: 'mono.m1',
151
210
  },
152
211
  { id: 'tds/web/snippet/text' },
153
212
  )
@@ -6,15 +6,17 @@ import { style, variants } from '../zyzz.config.js'
6
6
 
7
7
  /**
8
8
  * An indeterminate loading indicator. Renders a Base UI `Progress.Root` with
9
- * `role="progressbar"`, no `aria-valuenow`, and the name `Loading`. The ring draws in
10
- * `currentColor` and stops rotating under `prefers-reduced-motion: reduce`.
9
+ * `role="progressbar"`, no `aria-valuenow`, and the name `Loading`. The arc draws in
10
+ * `currentColor` on a faint track, black in light mode and the text color in dark mode, and stops
11
+ * rotating under `prefers-reduced-motion: reduce`. `elevated` places it on a 44px elevated tile
12
+ * with a shadow.
11
13
  *
12
14
  * - Pass `aria-label` to say what is loading, such as `Loading transactions`.
13
15
  * - Show it only after a short delay, so fast responses do not flash an indicator.
14
16
  * - Prefer `Skeleton` when the shape of the loading content is known.
15
17
  *
16
18
  * @example
17
- * <Spinner aria-label="Loading transactions" size="small" />
19
+ * <Spinner aria-label="Loading transactions" elevated />
18
20
  *
19
21
  * @see {@link https://base-ui.com/react/components/progress | Base UI Progress}
20
22
  * @see {@link https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Roles/progressbar_role | MDN progressbar role}
@@ -22,18 +24,22 @@ import { style, variants } from '../zyzz.config.js'
22
24
  * @see {@link https://www.w3.org/WAI/WCAG22/Understanding/pause-stop-hide.html | WCAG 2.2 Pause, Stop, Hide}
23
25
  */
24
26
  export function Spinner(props: Spinner.Props) {
25
- const { className, size, vars, ...attributes } = props
27
+ const { className, elevated, vars, ...attributes } = props
26
28
 
27
29
  return (
28
30
  <BaseUi.Progress.Root
29
31
  aria-label="Loading"
30
32
  {...attributes}
31
- {...styles.spinner({ className, size, style: props.style, vars })}
33
+ {...styles.spinner({ className, elevated, style: props.style, vars })}
32
34
  value={null}
33
35
  >
34
36
  <svg aria-hidden="true" {...styles.glyph()} fill="none" viewBox="0 0 16 16">
35
- <circle cx="8" cy="8" r="6" stroke="currentColor" strokeOpacity="0.16" strokeWidth="2" />
36
- <path d="M14 8a6 6 0 0 0-6-6" stroke="currentColor" strokeLinecap="round" strokeWidth="2" />
37
+ <circle cx="8" cy="8" r="6" strokeOpacity="0.08" {...styles.track()} />
38
+ <path
39
+ d="M14 7.97422C14 9.3007 13.5642 10.5901 12.7601 11.6425C11.9561 12.6948 10.8287 13.4514 9.55292 13.7947C8.27712 14.138 6.92417 14.0489 5.70391 13.5413C4.48364 13.0337 3.46426 12.1359 2.80386 10.9871C2.14345 9.83835 1.87894 8.50283 2.05134 7.1877C2.22374 5.87257 2.82342 4.65132 3.75737 3.71336C4.69132 2.77539 5.90734 2.17314 7.21685 2"
40
+ stroke="currentColor"
41
+ strokeLinecap="round"
42
+ />
37
43
  </svg>
38
44
  </BaseUi.Progress.Root>
39
45
  )
@@ -63,19 +69,39 @@ namespace styles {
63
69
  export const spinner = variants(
64
70
  {
65
71
  base: {
72
+ alignItems: 'center',
66
73
  color: 'inherit !custom',
67
74
  display: 'inline-flex',
68
75
  flexShrink: '0 !custom',
76
+ height: '16',
77
+ justifyContent: 'center',
78
+ width: '16',
69
79
  },
70
- defaultVariants: { size: 'medium' },
80
+ defaultVariants: { elevated: false },
71
81
  variants: {
72
- size: {
73
- large: { height: '20', width: '20' },
74
- medium: { height: '16', width: '16' },
75
- small: { height: '12', width: '12' },
82
+ // The tile is a 44px square around the 16px ring.
83
+ elevated: {
84
+ false: {},
85
+ true: {
86
+ backgroundColor: 'background.elevated',
87
+ borderRadius: 'xs',
88
+ // Web has no elevated shadow step, so this repeats the Mobile `shadow.elevated` layers, in
89
+ // the order of the Figma Spinner.
90
+ boxShadow: '0 12px 36px #0000000a, 0 8px 32px #0000000a, 0 4px 12px #0000000a !custom',
91
+ height: '44',
92
+ width: '44',
93
+ selectors: { '& > svg': { height: '16', width: '16' } },
94
+ },
76
95
  },
77
96
  },
78
97
  },
79
98
  { id: 'tds/web/spinner' },
80
99
  )
100
+
101
+ // Figma draws the track in black at 8% in every scheme. Its black has no dark value, so the dark
102
+ // track keeps the text color, which stays visible on a dark surface.
103
+ export const track = style(
104
+ { stroke: 'light-dark(#000, currentColor) !custom' },
105
+ { id: 'tds/web/spinner/track' },
106
+ )
81
107
  }
@@ -0,0 +1,158 @@
1
+ import type { ComponentPropsWithRef, ReactNode } from 'react'
2
+ import type * as zyzz from 'zyzz'
3
+ import { style, variants } from '../zyzz.config.js'
4
+
5
+ /**
6
+ * A bar that splits one total between two parts, such as the funds available to a wallet and the
7
+ * funds set aside for its agents, with a legend under it. It renders a `div`. The bar is hidden
8
+ * from assistive technology, so the legend carries each label and value.
9
+ *
10
+ * - Pass the two parts in reading order. The first fills in `content.primary`, and the second in
11
+ * `content.subtle`.
12
+ * - Give each part a `text` with its formatted value, such as `$75.62`.
13
+ * - Use `BarChart` for values over time, and `Progress` for one task.
14
+ *
15
+ * @example
16
+ * <SplitBar
17
+ * items={[
18
+ * { label: 'Available', text: '$75.62', value: 75.62 },
19
+ * { label: 'Agents', text: '$8.58', value: 8.58 },
20
+ * ]}
21
+ * />
22
+ *
23
+ * @see {@link https://www.w3.org/WAI/WCAG22/Understanding/use-of-color.html | WCAG 2.2 Use of Color}
24
+ * @see {@link https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html | WCAG 2.2 Info and Relationships}
25
+ */
26
+ export function SplitBar(props: SplitBar.Props) {
27
+ const { className, items, vars, ...attributes } = props
28
+ const total = items.reduce((sum, item) => sum + Math.max(item.value, 0), 0)
29
+
30
+ return (
31
+ <div {...attributes} {...styles.root({ className, style: props.style, vars })}>
32
+ <div aria-hidden="true" {...styles.track()}>
33
+ {items.map((item, index) =>
34
+ item.value > 0 ? (
35
+ <span
36
+ key={index}
37
+ // Each segment grows by its share of the total. Grow factors that sum to less than 1
38
+ // would leave part of the track unfilled.
39
+ {...styles.segment({
40
+ part: index === 0 ? 'first' : 'second',
41
+ style: { flexGrow: item.value / total },
42
+ })}
43
+ />
44
+ ) : null,
45
+ )}
46
+ </div>
47
+ <div {...styles.legend()}>
48
+ {items.map((item, index) => (
49
+ <span key={index} {...styles.entry()}>
50
+ <span
51
+ aria-hidden="true"
52
+ {...styles.swatch({ part: index === 0 ? 'first' : 'second' })}
53
+ />
54
+ <span {...styles.label()}>{item.label}</span>
55
+ <span {...styles.text()}>{item.text}</span>
56
+ </span>
57
+ ))}
58
+ </div>
59
+ </div>
60
+ )
61
+ }
62
+
63
+ export namespace SplitBar {
64
+ /** One part of the total. */
65
+ export type Item = {
66
+ /** Name of the part in the legend, such as Available. */
67
+ label: ReactNode
68
+ /** Formatted value of the part in the legend, such as `$75.62`. */
69
+ text: ReactNode
70
+ /**
71
+ * Share of the bar, in a unit that both parts share. A part of 0 draws no segment, and the
72
+ * other part fills the track.
73
+ */
74
+ value: number
75
+ }
76
+
77
+ export type Props = Omit<ComponentPropsWithRef<'div'>, 'children'> &
78
+ zyzz.Props.Variants<typeof styles.root> & {
79
+ /** The two parts, in reading order. */
80
+ items: readonly [Item, Item]
81
+ }
82
+ }
83
+
84
+ namespace styles {
85
+ export const entry = style(
86
+ { alignItems: 'center', columnGap: '6', display: 'inline-flex', whiteSpace: 'nowrap' },
87
+ { id: 'tds/web/split-bar/entry' },
88
+ )
89
+
90
+ export const label = style(
91
+ { color: 'content.primary', typography: 'body.b3' },
92
+ { id: 'tds/web/split-bar/label' },
93
+ )
94
+
95
+ // The legend pins its first entry to the start and its last to the end.
96
+ export const legend = style(
97
+ { columnGap: '16', display: 'flex', flexWrap: 'wrap', justifyContent: 'space-between' },
98
+ { id: 'tds/web/split-bar/legend' },
99
+ )
100
+
101
+ export const root = variants(
102
+ { base: { display: 'flex', flexDirection: 'column', rowGap: '10' } },
103
+ { id: 'tds/web/split-bar' },
104
+ )
105
+
106
+ export const segment = variants(
107
+ {
108
+ base: { flexBasis: '0', height: '100% !custom', minWidth: '0' },
109
+ defaultVariants: { part: 'first' },
110
+ variants: {
111
+ part: {
112
+ first: { backgroundColor: 'content.primary' },
113
+ second: { backgroundColor: 'content.subtle' },
114
+ },
115
+ },
116
+ },
117
+ { id: 'tds/web/split-bar/segment' },
118
+ )
119
+
120
+ // A swatch keeps a 2px corner, which no radius token sets.
121
+ export const swatch = variants(
122
+ {
123
+ base: {
124
+ borderRadius: 'calc(0.125rem * var(--tds-corner-scale, 1)) !custom',
125
+ flexShrink: '0 !custom',
126
+ height: '8',
127
+ width: '8',
128
+ },
129
+ defaultVariants: { part: 'first' },
130
+ variants: {
131
+ part: {
132
+ first: { backgroundColor: 'content.primary' },
133
+ second: { backgroundColor: 'content.subtle' },
134
+ },
135
+ },
136
+ },
137
+ { id: 'tds/web/split-bar/swatch' },
138
+ )
139
+
140
+ export const text = style(
141
+ { color: 'content.secondary', typography: 'body.b3' },
142
+ { id: 'tds/web/split-bar/text' },
143
+ )
144
+
145
+ // The track clips the segments to its pill, and leaves 2px of the track between them.
146
+ export const track = style(
147
+ {
148
+ backgroundColor: 'container.strong',
149
+ borderRadius: 'full',
150
+ columnGap: '2',
151
+ cornerShape: 'round',
152
+ display: 'flex',
153
+ height: '8',
154
+ overflow: 'hidden',
155
+ },
156
+ { id: 'tds/web/split-bar/track' },
157
+ )
158
+ }
@@ -52,6 +52,7 @@ export namespace SplitButton {
52
52
  return (
53
53
  <splitContext.Provider value={{ size, variant }}>
54
54
  <div
55
+ data-variant={variant ?? 'primary'}
55
56
  role="group"
56
57
  {...attributes}
57
58
  {...styles.root({ className, style: props.style, vars })}
@@ -63,7 +64,10 @@ export namespace SplitButton {
63
64
  export namespace Root {
64
65
  export type Props = ComponentPropsWithRef<'div'> &
65
66
  zyzz.Props.Variants<typeof styles.root> &
66
- Pick<Button.Props, 'size' | 'variant'>
67
+ Pick<Button.Props, 'variant'> & {
68
+ /** Size of both buttons. The 24px `xsmall` pill can't join a trigger, so it is left out. */
69
+ size?: Exclude<Button.Props['size'], 'xsmall'> | undefined
70
+ }
67
71
  }
68
72
 
69
73
  /** Opens the menu. Pass an `aria-label`, since the default chevron has no text. */
@@ -96,24 +100,17 @@ namespace styles {
96
100
  display: 'inline-flex',
97
101
  selectors: {
98
102
  '& > :first-child': {
99
- borderBottomRightRadius: '0',
100
- borderTopRightRadius: '0',
103
+ borderBottomRightRadius: 'none',
104
+ borderTopRightRadius: 'none',
101
105
  },
102
- // The trigger is a segment of the group, so its outer corners follow the action's size
103
- // radius rather than the circle of an icon button.
106
+ // The trigger is a segment of the group, so its outer corners follow the action's radius
107
+ // and squircle rather than the circle of an icon button.
104
108
  '& > [aria-haspopup]': {
105
- borderBottomLeftRadius: '0',
106
- borderBottomRightRadius: '12',
107
- borderTopLeftRadius: '0',
108
- borderTopRightRadius: '12',
109
- },
110
- '& > [aria-haspopup][data-size="large"]': {
111
- borderBottomRightRadius: '16',
112
- borderTopRightRadius: '16',
113
- },
114
- '& > [aria-haspopup][data-size="small"]': {
115
- borderBottomRightRadius: '8',
116
- borderTopRightRadius: '8',
109
+ borderBottomLeftRadius: 'none',
110
+ borderBottomRightRadius: 'xs',
111
+ borderTopLeftRadius: 'none',
112
+ borderTopRightRadius: 'xs',
113
+ cornerShape: 'squircle',
117
114
  },
118
115
  '& > [aria-haspopup] > svg': {
119
116
  transitionDuration: '240',
@@ -121,6 +118,18 @@ namespace styles {
121
118
  transitionTimingFunction: 'spring',
122
119
  },
123
120
  '& > [data-popup-open] > svg': { transform: 'rotate(180deg) !custom' },
121
+ // A primary trigger takes the fills of the primary action, not the fixed fill of a primary
122
+ // icon button. Each pressed fill follows its hover fill, so it wins while pressed.
123
+ '&[data-variant="primary"] > [aria-haspopup]': {
124
+ backgroundColor: 'inverse.background.primary',
125
+ color: 'inverse.content.primary',
126
+ },
127
+ '&[data-variant="primary"] > [aria-haspopup]:hover:not(:disabled)': {
128
+ backgroundColor: 'action.primary.fill.hover',
129
+ },
130
+ '&[data-variant="primary"] > [aria-haspopup]:active:not(:disabled)': {
131
+ backgroundColor: 'action.primary.fill.pressed',
132
+ },
124
133
  },
125
134
  '@media (prefers-reduced-motion: reduce)': {
126
135
  selectors: { '& > [aria-haspopup] > svg': { transitionProperty: 'none' } },