@tempoxyz/ds 0.3.1 → 0.3.4

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 (347) hide show
  1. package/README.md +7 -0
  2. package/dist/web/components/Accordion.css +1 -1
  3. package/dist/web/components/Accordion.js.zyzz.json +1 -1
  4. package/dist/web/components/AddressCard.css +1 -0
  5. package/dist/web/components/AddressCard.d.ts +85 -0
  6. package/dist/web/components/AddressCard.d.ts.map +1 -0
  7. package/dist/web/components/AddressCard.js +79 -0
  8. package/dist/web/components/AddressCard.js.map +1 -0
  9. package/dist/web/components/AddressCard.js.zyzz.json +1 -0
  10. package/dist/web/components/AgentLogo.js +1 -1
  11. package/dist/web/components/AgentLogo.js.map +1 -1
  12. package/dist/web/components/AgentLogo.js.zyzz.json +1 -1
  13. package/dist/web/components/Alert.css +1 -1
  14. package/dist/web/components/Alert.js.zyzz.json +1 -1
  15. package/dist/web/components/AlertDialog.js.zyzz.json +1 -1
  16. package/dist/web/components/Amount.css +1 -1
  17. package/dist/web/components/Amount.js.zyzz.json +1 -1
  18. package/dist/web/components/AmountInput.css +1 -1
  19. package/dist/web/components/AmountInput.d.ts +1 -1
  20. package/dist/web/components/AmountInput.d.ts.map +1 -1
  21. package/dist/web/components/AmountInput.js.zyzz.json +1 -1
  22. package/dist/web/components/AppShell.css +1 -1
  23. package/dist/web/components/AppShell.d.ts +21 -3
  24. package/dist/web/components/AppShell.d.ts.map +1 -1
  25. package/dist/web/components/AppShell.js +74 -32
  26. package/dist/web/components/AppShell.js.map +1 -1
  27. package/dist/web/components/AppShell.js.zyzz.json +1 -1
  28. package/dist/web/components/AssetChip.css +1 -1
  29. package/dist/web/components/AssetChip.d.ts.map +1 -1
  30. package/dist/web/components/AssetChip.js.map +1 -1
  31. package/dist/web/components/AssetChip.js.zyzz.json +1 -1
  32. package/dist/web/components/Autocomplete.js.zyzz.json +1 -1
  33. package/dist/web/components/Avatar.css +1 -1
  34. package/dist/web/components/Avatar.d.ts +68 -6
  35. package/dist/web/components/Avatar.d.ts.map +1 -1
  36. package/dist/web/components/Avatar.js +27 -7
  37. package/dist/web/components/Avatar.js.map +1 -1
  38. package/dist/web/components/Avatar.js.zyzz.json +1 -1
  39. package/dist/web/components/Badge.css +1 -1
  40. package/dist/web/components/Badge.d.ts +48 -0
  41. package/dist/web/components/Badge.d.ts.map +1 -1
  42. package/dist/web/components/Badge.js +5 -3
  43. package/dist/web/components/Badge.js.map +1 -1
  44. package/dist/web/components/Badge.js.zyzz.json +1 -1
  45. package/dist/web/components/Banner.js.zyzz.json +1 -1
  46. package/dist/web/components/BarChart.css +1 -1
  47. package/dist/web/components/BarChart.js.zyzz.json +1 -1
  48. package/dist/web/components/Breadcrumbs.css +1 -1
  49. package/dist/web/components/Breadcrumbs.js.zyzz.json +1 -1
  50. package/dist/web/components/Button.css +1 -1
  51. package/dist/web/components/Button.d.ts +72 -6
  52. package/dist/web/components/Button.d.ts.map +1 -1
  53. package/dist/web/components/Button.js +5 -3
  54. package/dist/web/components/Button.js.map +1 -1
  55. package/dist/web/components/Button.js.zyzz.json +1 -1
  56. package/dist/web/components/ButtonGroup.js.zyzz.json +1 -1
  57. package/dist/web/components/Calendar.css +1 -1
  58. package/dist/web/components/Calendar.js.zyzz.json +1 -1
  59. package/dist/web/components/Callout.css +1 -0
  60. package/dist/web/components/Callout.d.ts +23 -0
  61. package/dist/web/components/Callout.d.ts.map +1 -0
  62. package/dist/web/components/Callout.js +26 -0
  63. package/dist/web/components/Callout.js.map +1 -0
  64. package/dist/web/components/Callout.js.zyzz.json +1 -0
  65. package/dist/web/components/Checkbox.css +1 -1
  66. package/dist/web/components/Checkbox.js.zyzz.json +1 -1
  67. package/dist/web/components/CheckboxGroup.js.zyzz.json +1 -1
  68. package/dist/web/components/ChoiceGroup.css +1 -1
  69. package/dist/web/components/ChoiceGroup.d.ts +17 -10
  70. package/dist/web/components/ChoiceGroup.d.ts.map +1 -1
  71. package/dist/web/components/ChoiceGroup.js +5 -5
  72. package/dist/web/components/ChoiceGroup.js.map +1 -1
  73. package/dist/web/components/ChoiceGroup.js.zyzz.json +1 -1
  74. package/dist/web/components/Choicebox.css +1 -1
  75. package/dist/web/components/Choicebox.js.zyzz.json +1 -1
  76. package/dist/web/components/Code.css +1 -0
  77. package/dist/web/components/Code.d.ts +25 -0
  78. package/dist/web/components/Code.d.ts.map +1 -0
  79. package/dist/web/components/Code.js +28 -0
  80. package/dist/web/components/Code.js.map +1 -0
  81. package/dist/web/components/Code.js.zyzz.json +1 -0
  82. package/dist/web/components/Combobox.css +1 -1
  83. package/dist/web/components/Combobox.js.zyzz.json +1 -1
  84. package/dist/web/components/Container.js.zyzz.json +1 -1
  85. package/dist/web/components/CopyButton.d.ts +8 -1
  86. package/dist/web/components/CopyButton.d.ts.map +1 -1
  87. package/dist/web/components/CopyButton.js.map +1 -1
  88. package/dist/web/components/CopyButton.js.zyzz.json +1 -1
  89. package/dist/web/components/DatePicker.css +1 -1
  90. package/dist/web/components/DatePicker.js.zyzz.json +1 -1
  91. package/dist/web/components/Dialog.css +1 -1
  92. package/dist/web/components/Dialog.d.ts.map +1 -1
  93. package/dist/web/components/Dialog.js +1 -0
  94. package/dist/web/components/Dialog.js.map +1 -1
  95. package/dist/web/components/Dialog.js.zyzz.json +1 -1
  96. package/dist/web/components/Drawer.js.zyzz.json +1 -1
  97. package/dist/web/components/Empty.css +1 -1
  98. package/dist/web/components/Empty.js.zyzz.json +1 -1
  99. package/dist/web/components/Field.css +1 -1
  100. package/dist/web/components/Field.d.ts +41 -5
  101. package/dist/web/components/Field.d.ts.map +1 -1
  102. package/dist/web/components/Field.js +19 -13
  103. package/dist/web/components/Field.js.map +1 -1
  104. package/dist/web/components/Field.js.zyzz.json +1 -1
  105. package/dist/web/components/Fieldset.js.zyzz.json +1 -1
  106. package/dist/web/components/Frame.css +1 -1
  107. package/dist/web/components/Frame.js.zyzz.json +1 -1
  108. package/dist/web/components/Gauge.js.zyzz.json +1 -1
  109. package/dist/web/components/GetStartedVisual.css +1 -0
  110. package/dist/web/components/GetStartedVisual.d.ts +59 -0
  111. package/dist/web/components/GetStartedVisual.d.ts.map +1 -0
  112. package/dist/web/components/GetStartedVisual.js +31 -0
  113. package/dist/web/components/GetStartedVisual.js.map +1 -0
  114. package/dist/web/components/GetStartedVisual.js.zyzz.json +1 -0
  115. package/dist/web/components/Grid.js.zyzz.json +1 -1
  116. package/dist/web/components/HeroVisual.css +1 -0
  117. package/dist/web/components/HeroVisual.d.ts +96 -0
  118. package/dist/web/components/HeroVisual.d.ts.map +1 -0
  119. package/dist/web/components/HeroVisual.js +202 -0
  120. package/dist/web/components/HeroVisual.js.map +1 -0
  121. package/dist/web/components/HeroVisual.js.zyzz.json +1 -0
  122. package/dist/web/components/Hex.css +1 -1
  123. package/dist/web/components/Hex.js.zyzz.json +1 -1
  124. package/dist/web/components/IconTile.js.zyzz.json +1 -1
  125. package/dist/web/components/Identicon.js.zyzz.json +1 -1
  126. package/dist/web/components/Inline.js.zyzz.json +1 -1
  127. package/dist/web/components/Inset.js.zyzz.json +1 -1
  128. package/dist/web/components/Kbd.css +1 -1
  129. package/dist/web/components/Kbd.d.ts +8 -7
  130. package/dist/web/components/Kbd.d.ts.map +1 -1
  131. package/dist/web/components/Kbd.js +1 -1
  132. package/dist/web/components/Kbd.js.map +1 -1
  133. package/dist/web/components/Kbd.js.zyzz.json +1 -1
  134. package/dist/web/components/ListGroup.css +1 -1
  135. package/dist/web/components/ListGroup.d.ts +35 -65
  136. package/dist/web/components/ListGroup.d.ts.map +1 -1
  137. package/dist/web/components/ListGroup.js +9 -10
  138. package/dist/web/components/ListGroup.js.map +1 -1
  139. package/dist/web/components/ListGroup.js.zyzz.json +1 -1
  140. package/dist/web/components/LoadingDots.js.zyzz.json +1 -1
  141. package/dist/web/components/Menu.css +1 -1
  142. package/dist/web/components/Menu.js.zyzz.json +1 -1
  143. package/dist/web/components/NativeSelect.css +1 -0
  144. package/dist/web/components/NativeSelect.d.ts +50 -0
  145. package/dist/web/components/NativeSelect.d.ts.map +1 -0
  146. package/dist/web/components/NativeSelect.js +50 -0
  147. package/dist/web/components/NativeSelect.js.map +1 -0
  148. package/dist/web/components/NativeSelect.js.zyzz.json +1 -0
  149. package/dist/web/components/NetworkLogo.js.zyzz.json +1 -1
  150. package/dist/web/components/NumberField.css +1 -1
  151. package/dist/web/components/NumberField.js.zyzz.json +1 -1
  152. package/dist/web/components/OtpField.css +1 -1
  153. package/dist/web/components/OtpField.js.zyzz.json +1 -1
  154. package/dist/web/components/Pagination.css +1 -1
  155. package/dist/web/components/Pagination.js.zyzz.json +1 -1
  156. package/dist/web/components/Popover.css +1 -1
  157. package/dist/web/components/Popover.js.zyzz.json +1 -1
  158. package/dist/web/components/Progress.css +1 -1
  159. package/dist/web/components/Progress.d.ts +1 -1
  160. package/dist/web/components/Progress.d.ts.map +1 -1
  161. package/dist/web/components/Progress.js +2 -1
  162. package/dist/web/components/Progress.js.map +1 -1
  163. package/dist/web/components/Progress.js.zyzz.json +1 -1
  164. package/dist/web/components/Qr.js.zyzz.json +1 -1
  165. package/dist/web/components/RadioGroup.css +1 -1
  166. package/dist/web/components/RadioGroup.d.ts +1 -1
  167. package/dist/web/components/RadioGroup.js.zyzz.json +1 -1
  168. package/dist/web/components/SecretValue.css +1 -1
  169. package/dist/web/components/SecretValue.js.zyzz.json +1 -1
  170. package/dist/web/components/Select.css +1 -1
  171. package/dist/web/components/Select.d.ts +1 -1
  172. package/dist/web/components/Select.d.ts.map +1 -1
  173. package/dist/web/components/Select.js.map +1 -1
  174. package/dist/web/components/Select.js.zyzz.json +1 -1
  175. package/dist/web/components/Separator.css +1 -1
  176. package/dist/web/components/Separator.js.zyzz.json +1 -1
  177. package/dist/web/components/SidebarMenu.css +1 -1
  178. package/dist/web/components/SidebarMenu.d.ts +8 -2
  179. package/dist/web/components/SidebarMenu.d.ts.map +1 -1
  180. package/dist/web/components/SidebarMenu.js +10 -10
  181. package/dist/web/components/SidebarMenu.js.map +1 -1
  182. package/dist/web/components/SidebarMenu.js.zyzz.json +1 -1
  183. package/dist/web/components/Skeleton.js.zyzz.json +1 -1
  184. package/dist/web/components/Slider.css +1 -1
  185. package/dist/web/components/Slider.js.zyzz.json +1 -1
  186. package/dist/web/components/Snippet.css +1 -1
  187. package/dist/web/components/Snippet.js.zyzz.json +1 -1
  188. package/dist/web/components/Spinner.js.zyzz.json +1 -1
  189. package/dist/web/components/SplitBar.css +1 -1
  190. package/dist/web/components/SplitBar.js.zyzz.json +1 -1
  191. package/dist/web/components/SplitButton.css +1 -1
  192. package/dist/web/components/SplitButton.d.ts +3 -1
  193. package/dist/web/components/SplitButton.d.ts.map +1 -1
  194. package/dist/web/components/SplitButton.js +2 -2
  195. package/dist/web/components/SplitButton.js.map +1 -1
  196. package/dist/web/components/SplitButton.js.zyzz.json +1 -1
  197. package/dist/web/components/Stack.js.zyzz.json +1 -1
  198. package/dist/web/components/StatusChip.css +1 -1
  199. package/dist/web/components/StatusChip.js.zyzz.json +1 -1
  200. package/dist/web/components/StatusIndicator.css +1 -0
  201. package/dist/web/components/StatusIndicator.d.ts +74 -0
  202. package/dist/web/components/StatusIndicator.d.ts.map +1 -0
  203. package/dist/web/components/StatusIndicator.js +32 -0
  204. package/dist/web/components/StatusIndicator.js.map +1 -0
  205. package/dist/web/components/StatusIndicator.js.zyzz.json +1 -0
  206. package/dist/web/components/StatusRow.css +1 -1
  207. package/dist/web/components/StatusRow.js.zyzz.json +1 -1
  208. package/dist/web/components/Stepper.js.zyzz.json +1 -1
  209. package/dist/web/components/SuccessHero.css +1 -0
  210. package/dist/web/components/SuccessHero.d.ts +74 -0
  211. package/dist/web/components/SuccessHero.d.ts.map +1 -0
  212. package/dist/web/components/SuccessHero.js +167 -0
  213. package/dist/web/components/SuccessHero.js.map +1 -0
  214. package/dist/web/components/SuccessHero.js.zyzz.json +1 -0
  215. package/dist/web/components/Surface.css +1 -1
  216. package/dist/web/components/Surface.d.ts +3 -2
  217. package/dist/web/components/Surface.d.ts.map +1 -1
  218. package/dist/web/components/Surface.js +2 -2
  219. package/dist/web/components/Surface.js.map +1 -1
  220. package/dist/web/components/Surface.js.zyzz.json +1 -1
  221. package/dist/web/components/Switch.css +1 -1
  222. package/dist/web/components/Switch.d.ts +6 -6
  223. package/dist/web/components/Switch.d.ts.map +1 -1
  224. package/dist/web/components/Switch.js +3 -2
  225. package/dist/web/components/Switch.js.map +1 -1
  226. package/dist/web/components/Switch.js.zyzz.json +1 -1
  227. package/dist/web/components/Table.css +1 -1
  228. package/dist/web/components/Table.d.ts +85 -0
  229. package/dist/web/components/Table.d.ts.map +1 -1
  230. package/dist/web/components/Table.js +14 -6
  231. package/dist/web/components/Table.js.map +1 -1
  232. package/dist/web/components/Table.js.zyzz.json +1 -1
  233. package/dist/web/components/Tabs.css +1 -1
  234. package/dist/web/components/Tabs.d.ts +183 -6
  235. package/dist/web/components/Tabs.d.ts.map +1 -1
  236. package/dist/web/components/Tabs.js +18 -13
  237. package/dist/web/components/Tabs.js.map +1 -1
  238. package/dist/web/components/Tabs.js.zyzz.json +1 -1
  239. package/dist/web/components/TempoLogo.js +1 -1
  240. package/dist/web/components/TempoLogo.js.map +1 -1
  241. package/dist/web/components/TempoLogo.js.zyzz.json +1 -1
  242. package/dist/web/components/TextInput.css +1 -1
  243. package/dist/web/components/TextInput.d.ts +80 -2
  244. package/dist/web/components/TextInput.d.ts.map +1 -1
  245. package/dist/web/components/TextInput.js +19 -7
  246. package/dist/web/components/TextInput.js.map +1 -1
  247. package/dist/web/components/TextInput.js.zyzz.json +1 -1
  248. package/dist/web/components/Textarea.css +1 -1
  249. package/dist/web/components/Textarea.d.ts +7 -1
  250. package/dist/web/components/Textarea.d.ts.map +1 -1
  251. package/dist/web/components/Textarea.js +3 -2
  252. package/dist/web/components/Textarea.js.map +1 -1
  253. package/dist/web/components/Textarea.js.zyzz.json +1 -1
  254. package/dist/web/components/Toast.css +1 -1
  255. package/dist/web/components/Toast.d.ts +16 -3
  256. package/dist/web/components/Toast.d.ts.map +1 -1
  257. package/dist/web/components/Toast.js +29 -17
  258. package/dist/web/components/Toast.js.map +1 -1
  259. package/dist/web/components/Toast.js.zyzz.json +1 -1
  260. package/dist/web/components/Token.css +1 -1
  261. package/dist/web/components/Token.js.zyzz.json +1 -1
  262. package/dist/web/components/TokenLogo.js.zyzz.json +1 -1
  263. package/dist/web/components/Tooltip.css +1 -1
  264. package/dist/web/components/Tooltip.d.ts.map +1 -1
  265. package/dist/web/components/Tooltip.js +3 -2
  266. package/dist/web/components/Tooltip.js.map +1 -1
  267. package/dist/web/components/Tooltip.js.zyzz.json +1 -1
  268. package/dist/web/components/VerificationCode.css +1 -1
  269. package/dist/web/components/VerificationCode.js.zyzz.json +1 -1
  270. package/dist/web/components/Visual.js.zyzz.json +1 -1
  271. package/dist/web/components/internal/Field.css +1 -1
  272. package/dist/web/components/internal/Field.js.zyzz.json +1 -1
  273. package/dist/web/components/internal/GetStartedArtwork.d.ts +10 -0
  274. package/dist/web/components/internal/GetStartedArtwork.d.ts.map +1 -0
  275. package/dist/web/components/internal/GetStartedArtwork.js +11 -0
  276. package/dist/web/components/internal/GetStartedArtwork.js.map +1 -0
  277. package/dist/web/components/internal/InputGroup.js.zyzz.json +1 -1
  278. package/dist/web/components/internal/Listbox.css +1 -1
  279. package/dist/web/components/internal/Listbox.js.zyzz.json +1 -1
  280. package/dist/web/components/internal/Streaks.css +1 -0
  281. package/dist/web/components/internal/Streaks.d.ts +48 -0
  282. package/dist/web/components/internal/Streaks.d.ts.map +1 -0
  283. package/dist/web/components/internal/Streaks.js +48 -0
  284. package/dist/web/components/internal/Streaks.js.map +1 -0
  285. package/dist/web/components/internal/Streaks.js.zyzz.json +1 -0
  286. package/dist/web/components/internal/TabBar.d.ts +7 -3
  287. package/dist/web/components/internal/TabBar.d.ts.map +1 -1
  288. package/dist/web/components/internal/TabBar.js.map +1 -1
  289. package/dist/web/index.d.ts +8 -0
  290. package/dist/web/index.d.ts.map +1 -1
  291. package/dist/web/index.js +8 -0
  292. package/dist/web/index.js.map +1 -1
  293. package/dist/web/index.js.zyzz.json +1 -1
  294. package/dist/web/vars.d.ts +27 -5
  295. package/dist/web/vars.d.ts.map +1 -1
  296. package/dist/web/vars.js.map +1 -1
  297. package/dist/web/vars.js.zyzz.json +1 -1
  298. package/dist/web/zyzz.config.d.ts +135 -25
  299. package/dist/web/zyzz.config.d.ts.map +1 -1
  300. package/dist/web/zyzz.config.js.zyzz.json +1 -1
  301. package/package.json +1 -1
  302. package/src/web/README.md +1 -1
  303. package/src/web/components/AddressCard.tsx +216 -0
  304. package/src/web/components/AgentLogo.tsx +1 -1
  305. package/src/web/components/AmountInput.tsx +1 -1
  306. package/src/web/components/AppShell.tsx +127 -31
  307. package/src/web/components/AssetChip.tsx +4 -1
  308. package/src/web/components/Avatar.tsx +73 -6
  309. package/src/web/components/Badge.tsx +39 -3
  310. package/src/web/components/Button.tsx +64 -11
  311. package/src/web/components/Callout.tsx +45 -0
  312. package/src/web/components/ChoiceGroup.tsx +26 -12
  313. package/src/web/components/Code.tsx +42 -0
  314. package/src/web/components/CopyButton.tsx +8 -4
  315. package/src/web/components/Dialog.tsx +2 -1
  316. package/src/web/components/Field.tsx +53 -20
  317. package/src/web/components/GetStartedVisual.tsx +66 -0
  318. package/src/web/components/HeroVisual.tsx +304 -0
  319. package/src/web/components/Kbd.tsx +16 -9
  320. package/src/web/components/ListGroup.tsx +47 -81
  321. package/src/web/components/NativeSelect.tsx +167 -0
  322. package/src/web/components/Progress.tsx +3 -2
  323. package/src/web/components/RadioGroup.tsx +1 -1
  324. package/src/web/components/Select.tsx +2 -1
  325. package/src/web/components/SidebarMenu.tsx +9 -4
  326. package/src/web/components/SplitButton.tsx +11 -4
  327. package/src/web/components/StatusIndicator.tsx +94 -0
  328. package/src/web/components/SuccessHero.tsx +249 -0
  329. package/src/web/components/Surface.tsx +5 -3
  330. package/src/web/components/Switch.tsx +18 -25
  331. package/src/web/components/Table.tsx +69 -1
  332. package/src/web/components/Tabs.tsx +172 -10
  333. package/src/web/components/TempoLogo.tsx +1 -1
  334. package/src/web/components/TextInput.tsx +87 -5
  335. package/src/web/components/Textarea.tsx +9 -1
  336. package/src/web/components/Toast.tsx +67 -34
  337. package/src/web/components/Tooltip.tsx +6 -4
  338. package/src/web/components/internal/GetStartedArtwork.tsx +356 -0
  339. package/src/web/components/internal/Streaks.tsx +173 -0
  340. package/src/web/components/internal/TabBar.ts +7 -3
  341. package/src/web/components/visuals/GetStartedConnect.svg +36 -0
  342. package/src/web/components/visuals/GetStartedFunds.svg +31 -0
  343. package/src/web/components/visuals/GetStartedPasskey.svg +34 -0
  344. package/src/web/components/visuals/README.md +15 -0
  345. package/src/web/index.ts +8 -0
  346. package/src/web/logos/README.md +1 -1
  347. package/src/web/vars.ts +20 -9
@@ -0,0 +1,249 @@
1
+ /**
2
+ * The dark confirmation card that closes an agent or wallet setup flow, with animated streaks
3
+ * behind a title block and an action.
4
+ * @module
5
+ */
6
+ import type { ComponentPropsWithRef } from 'react'
7
+ import type * as zyzz from 'zyzz'
8
+ import { style } from '../zyzz.config.js'
9
+ import type { Layer, Streak } from './internal/Streaks.js'
10
+ import { Streaks } from './internal/Streaks.js'
11
+
12
+ /**
13
+ * A dark 520px confirmation card for the end of a setup flow. Streaks slide in behind a bottom row
14
+ * of a `SuccessHero.Body` and an action, such as a `Button`. `flow` selects the artwork of the
15
+ * agent or wallet flow. The card keeps its dark colors in both color schemes and renders its
16
+ * content in the dark scheme, so a default `Button` fills light.
17
+ *
18
+ * - Show it once, after the flow funds the agent or wallet, in place of the steps.
19
+ * - Lead with a caption that names what finished, and keep the title to a short sentence.
20
+ * - Use `HeroVisual` beside the steps while the flow runs.
21
+ *
22
+ * @example
23
+ * <SuccessHero flow="agent">
24
+ * <SuccessHero.Body>
25
+ * <SuccessHero.Caption>CLAUDE · FUNDED</SuccessHero.Caption>
26
+ * <SuccessHero.Title>You’re ready to go.</SuccessHero.Title>
27
+ * <SuccessHero.Description>$10.00 for Claude to spend.</SuccessHero.Description>
28
+ * </SuccessHero.Body>
29
+ * <Button size="large">Done</Button>
30
+ * </SuccessHero>
31
+ *
32
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/svg | MDN svg element}
33
+ * @see {@link https://www.w3.org/WAI/WCAG22/Understanding/non-text-content.html | WCAG 2.2 Non-text Content}
34
+ */
35
+ export function SuccessHero(props: SuccessHero.Props) {
36
+ const { children, className, flow = 'agent', vars, ...attributes } = props
37
+
38
+ return (
39
+ <div {...attributes} {...styles.hero({ className, style: props.style, vars })}>
40
+ <Streaks height={520} layers={flows[flow]} trails={trails} width={1056} />
41
+ <div {...styles.content()}>{children}</div>
42
+ </div>
43
+ )
44
+ }
45
+
46
+ export namespace SuccessHero {
47
+ export type Props = ComponentPropsWithRef<'div'> &
48
+ zyzz.Props.Variants<typeof styles.hero> & {
49
+ /**
50
+ * Setup flow that the card confirms. `agent` adds the orange trails of the agent.
51
+ * @default 'agent'
52
+ */
53
+ flow?: keyof typeof flows | undefined
54
+ }
55
+
56
+ /** Stacks the caption, title, and description at the start of the bottom row. */
57
+ export function Body(props: Body.Props) {
58
+ const { className, vars, ...attributes } = props
59
+
60
+ return <div {...attributes} {...styles.body({ className, style: props.style, vars })} />
61
+ }
62
+
63
+ export namespace Body {
64
+ export type Props = ComponentPropsWithRef<'div'> & zyzz.Props.Variants<typeof styles.body>
65
+ }
66
+
67
+ /** A short label above the title that names what finished, such as the funded agent. */
68
+ export function Caption(props: Caption.Props) {
69
+ const { className, vars, ...attributes } = props
70
+
71
+ return <p {...attributes} {...styles.caption({ className, style: props.style, vars })} />
72
+ }
73
+
74
+ export namespace Caption {
75
+ export type Props = ComponentPropsWithRef<'p'> & zyzz.Props.Variants<typeof styles.caption>
76
+ }
77
+
78
+ /** One line of detail under the title, such as the amount and its expiry. */
79
+ export function Description(props: Description.Props) {
80
+ const { className, vars, ...attributes } = props
81
+
82
+ return <p {...attributes} {...styles.description({ className, style: props.style, vars })} />
83
+ }
84
+
85
+ export namespace Description {
86
+ export type Props = ComponentPropsWithRef<'p'> & zyzz.Props.Variants<typeof styles.description>
87
+ }
88
+
89
+ /** The display title of the card, rendered as an `h2`. */
90
+ export function Title(props: Title.Props) {
91
+ const { className, vars, ...attributes } = props
92
+
93
+ return <h2 {...attributes} {...styles.title({ className, style: props.style, vars })} />
94
+ }
95
+
96
+ export namespace Title {
97
+ export type Props = ComponentPropsWithRef<'h2'> & zyzz.Props.Variants<typeof styles.title>
98
+ }
99
+ }
100
+
101
+ // The streaks of the Figma Success Hero, measured from its 1056 by 520px frame.
102
+ const trails = {
103
+ agent: [
104
+ [214.81, 252.26, 573.73, 2, 'orange', 0.65, 0],
105
+ [144.8, 229.65, 625.43, 3, 'orange', 0.57, 0],
106
+ [123.05, 211.83, 429.03, 3, 'orange', 0.79, 0],
107
+ [204.99, 275.55, 398, 1, 'orange', 0.45, 1],
108
+ [435.07, 237.42, 670.01, 3, 'orange', 0.83, 0],
109
+ [-39.01, 297.89, 531.81, 1, 'orange', 0.52, 1],
110
+ [203.75, 269.57, 467.14, 2, 'orange', 0.49, 0],
111
+ [-54.29, 243.1, 473.44, 1, 'orange', 0.79, 0],
112
+ [600.32, 222.7, 576.86, 1, 'orange', 0.55, 1],
113
+ [73.3, 296.42, 738.02, 3, 'orange', 0.79, 1],
114
+ [565.98, 290.92, 549.88, 1, 'orange', 0.63, 1],
115
+ [112.48, 290.95, 481.65, 2, 'orange', 0.75, 0],
116
+ ],
117
+ agentSpark: [
118
+ [-107.41, 288.32, 619.07, 2, 'orange', 0.95, 2],
119
+ [492.26, 250.81, 605.29, 2, 'orange', 0.7, 0],
120
+ [552.7, 272.69, 614.22, 1, 'orange', 0.88, 2],
121
+ [724.14, 261.81, 562.64, 2, 'orange', 0.9, 0],
122
+ [489.05, 252.08, 567.95, 1, 'orange', 0.88, 0],
123
+ [185.83, 244.76, 648.01, 2, 'orange', 0.94, 1],
124
+ ],
125
+ agentTrail: [
126
+ [-68.62, 305.64, 639.78, 1, 'white', 0.35, 0],
127
+ [539.45, 350.15, 684.28, 1, 'white', 0.24, 2],
128
+ [517.58, 175.25, 446.06, 1, 'white', 0.41, 0],
129
+ [232.22, 272.23, 679.31, 3, 'white', 0.38, 0],
130
+ [-91.22, 352.64, 663.42, 3, 'sky', 0.44, 2],
131
+ [580.08, 299.14, 426, 2, 'sky', 0.2, 1],
132
+ [245.71, 235.13, 441.76, 2, 'sky', 0.49, 1],
133
+ [652.04, 349.18, 525.21, 1, 'sky', 0.23, 0],
134
+ [165.13, 184.86, 419.33, 1, 'sky', 0.21, 2],
135
+ [256.36, 205.67, 497.14, 1, 'white', 0.21, 0],
136
+ [196.73, 298, 636.47, 1, 'sky', 0.24, 2],
137
+ [-84.62, 172.37, 684, 1, 'white', 0.2, 1],
138
+ [552.28, 180.56, 545.63, 1, 'blue', 0.35, 0],
139
+ [351.9, 191.33, 714.6, 3, 'sky', 0.21, 0],
140
+ [239.51, 200.63, 721.09, 2, 'white', 0.47, 2],
141
+ [238.33, 287.12, 387.71, 1, 'white', 0.34, 1],
142
+ ],
143
+ path: [
144
+ [51.57, 281.45, 459.64, 3, 'white', 0.16, 1],
145
+ [34.35, 337.45, 590.96, 1, 'white', 0.1, 0],
146
+ [257.61, 349, 466.81, 1, 'white', 0.16, 1],
147
+ [321.17, 189, 483.3, 1, 'white', 0.13, 1],
148
+ [38.51, 356.11, 647.79, 2, 'white', 0.17, 2],
149
+ [605.26, 221.35, 613.76, 2, 'white', 0.13, 0],
150
+ [131.29, 322.1, 611.77, 1, 'white', 0.11, 1],
151
+ [276.07, 204.68, 384.04, 2, 'white', 0.18, 0],
152
+ [617.62, 162.92, 580.16, 1, 'white', 0.15, 1],
153
+ [573.09, 336.04, 650.09, 1, 'white', 0.09, 2],
154
+ [550.96, 299, 669.11, 3, 'white', 0.13, 0],
155
+ [534.54, 256.65, 703.33, 1, 'white', 0.14, 2],
156
+ [642.76, 269.72, 622.62, 1, 'white', 0.12, 0],
157
+ [377.62, 158.2, 655.19, 2, 'white', 0.14, 2],
158
+ [520.13, 340.55, 737.02, 2, 'white', 0.11, 2],
159
+ [288.36, 297.08, 728.44, 3, 'white', 0.09, 1],
160
+ [285.11, 299.18, 530.54, 1, 'white', 0.17, 1],
161
+ [155.72, 268.74, 553.14, 1, 'white', 0.08, 2],
162
+ ],
163
+ wallet: [
164
+ [-12.78, 294.04, 645.79, 3, 'white', 0.45, 1],
165
+ [167.32, 176.11, 588.83, 2, 'white', 0.29, 2],
166
+ [227.04, 294.55, 716.4, 2, 'blue', 0.46, 0],
167
+ [-10.11, 168.69, 402.48, 2, 'blue', 0.35, 2],
168
+ [24.14, 296.69, 528.42, 1, 'sky', 0.49, 2],
169
+ [309.96, 245.44, 382.78, 2, 'sky', 0.5, 2],
170
+ [249.52, 282.36, 473.05, 3, 'white', 0.38, 0],
171
+ [634.65, 172.86, 529.91, 2, 'white', 0.48, 1],
172
+ [-119.23, 235.19, 438.61, 2, 'white', 0.21, 1],
173
+ [-53.39, 313.9, 676.84, 1, 'sky', 0.27, 0],
174
+ [244.77, 279.38, 610.74, 1, 'white', 0.48, 0],
175
+ [223.86, 244.43, 400, 2, 'sky', 0.43, 1],
176
+ [10.71, 246.26, 653.95, 1, 'white', 0.31, 1],
177
+ [111.68, 235.77, 593.39, 1, 'blue', 0.33, 0],
178
+ [80.56, 252.4, 560.4, 1, 'blue', 0.5, 1],
179
+ [685.46, 299.39, 585.79, 1, 'white', 0.41, 2],
180
+ [144.52, 251.39, 467.95, 2, 'sky', 0.24, 2],
181
+ [304.95, 182.11, 390.92, 1, 'sky', 0.4, 2],
182
+ ],
183
+ } as const satisfies Record<string, readonly Streak[]>
184
+
185
+ const flows = {
186
+ agent: [
187
+ ['path', 18],
188
+ ['agent', 12],
189
+ ['agentTrail', 16],
190
+ ['agentSpark', 6],
191
+ ],
192
+ wallet: [
193
+ ['path', 18],
194
+ ['wallet', 18],
195
+ ],
196
+ } as const satisfies Record<string, readonly Layer<keyof typeof trails>[]>
197
+
198
+ namespace styles {
199
+ export const body = style(
200
+ { display: 'flex', flexDirection: 'column', minWidth: '0', rowGap: '12' },
201
+ { id: 'tds/web/success-hero/body' },
202
+ )
203
+
204
+ // Figma draws the caption at 50% white, which no variable holds.
205
+ export const caption = style(
206
+ { color: '#ffffff80 !custom', margin: '0', typography: 'body.b3Strong' },
207
+ { id: 'tds/web/success-hero/caption' },
208
+ )
209
+
210
+ export const content = style(
211
+ {
212
+ alignItems: 'flex-end',
213
+ columnGap: '32',
214
+ display: 'flex',
215
+ justifyContent: 'space-between',
216
+ marginBlockStart: 'auto !custom',
217
+ position: 'relative',
218
+ },
219
+ { id: 'tds/web/success-hero/content' },
220
+ )
221
+
222
+ // Figma draws the description at 60% white, which no variable holds.
223
+ export const description = style(
224
+ { color: '#ffffff99 !custom', margin: '0', typography: 'body.b2' },
225
+ { id: 'tds/web/success-hero/description' },
226
+ )
227
+
228
+ // The card is dark in both schemes, so its content renders in the dark scheme.
229
+ export const hero = style(
230
+ {
231
+ borderRadius: 'sm',
232
+ boxSizing: 'border-box',
233
+ colorScheme: 'dark !custom',
234
+ display: 'flex',
235
+ flexDirection: 'column',
236
+ isolation: 'isolate !custom',
237
+ minHeight: '32.5rem !custom',
238
+ overflow: 'hidden',
239
+ padding: '48',
240
+ position: 'relative',
241
+ },
242
+ { id: 'tds/web/success-hero' },
243
+ )
244
+
245
+ export const title = style(
246
+ { color: 'overlay.content.primary', margin: '0', typography: 'display.d1' },
247
+ { id: 'tds/web/success-hero/title' },
248
+ )
249
+ }
@@ -256,9 +256,11 @@ namespace styles {
256
256
  '& > [data-list-group][data-variant="plain"] > [data-divider]:has([role="meter"])': {
257
257
  paddingBlock: '10',
258
258
  },
259
- // The rows already reach the surface's edges, so their fills draw no bleed past them.
260
- '& > [data-list-group][data-variant="plain"] > [data-divider]:is(:hover, :active)': {
261
- boxShadow: 'none !custom',
259
+ // The rows already reach the surface's edges, so their highlight fills the row without a
260
+ // bleed and follows its corners.
261
+ '& > [data-list-group][data-variant="plain"] > [data-divider]::after': {
262
+ borderRadius: 'inherit !custom',
263
+ insetInline: '0',
262
264
  },
263
265
  // After a header, the list rises by the 14px above the text of a one-line row, so the
264
266
  // text keeps the header's 20px gap. After other content, the list keeps its place, so its
@@ -76,40 +76,33 @@ export namespace Switch {
76
76
  }
77
77
 
78
78
  namespace styles {
79
+ // The thumb is a pill, 16px wider than tall at medium, as the Platform switch draws it.
79
80
  export const thumb = style(
80
81
  {
81
- backgroundColor: 'neutral.000',
82
+ backgroundColor: 'inverse.content.primary',
82
83
  borderRadius: 'full',
83
- boxShadow: 'small',
84
84
  cornerShape: 'round',
85
85
  flexShrink: '0 !custom',
86
- height: '24px !custom',
86
+ height: '20',
87
87
  // The thumb stretches its width while pressed, which a transform would distort.
88
88
  transitionDuration: '240',
89
- transitionProperty: 'background-color, box-shadow, translate, width',
89
+ transitionProperty: 'background-color, translate, width',
90
90
  transitionTimingFunction: 'overshoot',
91
- width: '24px !custom',
91
+ width: '36',
92
92
  selectors: {
93
- '&[data-checked]': {
94
- backgroundColor: 'background.elevated',
95
- boxShadow: 'none !custom',
96
- translate: '22px 0 !custom',
97
- },
98
- '[data-size="large"] > &': { height: '32', width: '32' },
93
+ '&[data-checked]': { translate: '20' },
94
+ '[data-size="large"] > &': { height: '32', width: '56' },
99
95
  '[data-size="large"] > &[data-checked]': { translate: '32' },
100
- '[data-size="large"]:active:not([data-disabled]) > &': { width: '36' },
96
+ '[data-size="large"]:active:not([data-disabled]) > &': { width: '60px !custom' },
101
97
  '[data-size="large"]:active:not([data-disabled]) > &[data-checked]': { translate: '28' },
102
- '[data-size="medium"]:active:not([data-disabled]) > &': { width: '30px !custom' },
103
- '[data-size="medium"]:active:not([data-disabled]) > &[data-checked]': {
104
- translate: '16px 0 !custom',
105
- },
106
- '[data-size="small"] > &': { height: '20', width: '20' },
98
+ '[data-size="medium"]:active:not([data-disabled]) > &': { width: '40' },
99
+ '[data-size="medium"]:active:not([data-disabled]) > &[data-checked]': { translate: '16' },
107
100
  '[data-size="small"] > &[data-checked]': { translate: '16' },
108
- '[data-size="small"]:active:not([data-disabled]) > &': { width: '24' },
101
+ '[data-size="small"]:active:not([data-disabled]) > &': { width: '40' },
109
102
  '[data-size="small"]:active:not([data-disabled]) > &[data-checked]': { translate: '12' },
110
103
  },
111
104
  '@media (prefers-reduced-motion: reduce)': {
112
- transitionProperty: 'background-color, box-shadow',
105
+ transitionProperty: 'background-color',
113
106
  },
114
107
  },
115
108
  { id: 'tds/web/switch/thumb' },
@@ -138,7 +131,7 @@ namespace styles {
138
131
  '&::after': { content: '"" !custom', inset: '-8', position: 'absolute' },
139
132
  '&:focus-visible': { outlineColor: 'border.focus', outlineOffset: '2' },
140
133
  '&:hover:not([data-disabled]):not([data-checked])': { backgroundColor: 'line.primary' },
141
- '&[data-checked]': { backgroundColor: 'content.primary' },
134
+ '&[data-checked]': { backgroundColor: 'content.accent' },
142
135
  '&[data-checked]:hover:not([data-disabled])': { opacity: 'hover' },
143
136
  '&[data-disabled]': { cursor: 'default', opacity: 'disabled' },
144
137
  '&[data-invalid]': {
@@ -153,12 +146,12 @@ namespace styles {
153
146
  },
154
147
  defaultVariants: { size: 'medium' },
155
148
  variants: {
149
+ // The padding, thumb width, checked translation and padding of each size add up to the
150
+ // track width. Medium is the 64 by 28px Platform switch.
156
151
  size: {
157
- large: { height: '40', padding: '4', width: '72' },
158
- // The track, thumb, and checked translation of each size add up exactly, so a size uses
159
- // tokens or px throughout. Medium stays in px, since its 3px padding has no spacing step.
160
- medium: { height: '30px !custom', padding: '3px !custom', width: '52px !custom' },
161
- small: { height: '24', padding: '2', width: '40' },
152
+ large: { height: '40', padding: '4', width: '96px !custom' },
153
+ medium: { height: '28', padding: '4', width: '64' },
154
+ small: { height: '24', padding: '2', width: '56' },
162
155
  },
163
156
  },
164
157
  },
@@ -19,6 +19,8 @@ import { style, variants, vars } from '../zyzz.config.js'
19
19
  * - For a sortable column, set `aria-sort` on its `Table.HeaderCell` and put a `Table.SortButton`
20
20
  * in it.
21
21
  * - With `interactive`, make each clickable row reachable by keyboard through a link or button.
22
+ * - For copy rather than data, set `variant="dense"` for a row of labels over rows of details, or
23
+ * `variant="simple"` for rows of a title beside a paragraph.
22
24
  *
23
25
  * @example
24
26
  * <Table>
@@ -166,9 +168,14 @@ export namespace Table {
166
168
  * dividers, and `interactive` to fill a hovered row and outline a focus-visible one. An
167
169
  * interactive table clips each body row to its 12px corners, so a popup in a cell renders in a
168
170
  * portal.
171
+ *
172
+ * `variant` sets the data table by default. `dense` sets equal columns of Pilat copy: header cells
173
+ * in the primary color over body rows that each draw a line above. `simple` sets rows that each
174
+ * draw a line above a row header in 40% of the width beside a paragraph. Both pad rows 16px above
175
+ * and below, keep 16px between columns, and take no `size` or `dividers`.
169
176
  */
170
177
  export function Root(props: Root.Props) {
171
- const { className, dividers, interactive, size, vars, ...attributes } = props
178
+ const { className, dividers, interactive, size, variant, vars, ...attributes } = props
172
179
 
173
180
  // `Surface` reads the size to inset the last row's text by its own padding.
174
181
  return (
@@ -181,6 +188,7 @@ export namespace Table {
181
188
  interactive,
182
189
  size,
183
190
  style: props.style,
191
+ variant,
184
192
  vars,
185
193
  })}
186
194
  />
@@ -380,6 +388,7 @@ namespace styles {
380
388
  dividers: true,
381
389
  interactive: false,
382
390
  size: 'medium',
391
+ variant: 'data',
383
392
  },
384
393
  variants: {
385
394
  // A row draws its divider in the 1px that its cells leave below their padding, inset by
@@ -464,6 +473,65 @@ namespace styles {
464
473
  selectors: { '& :is(td, th)': { paddingBlock: '4' }, '& td': { height: '32' } },
465
474
  },
466
475
  },
476
+ // Dense and simple tables set copy rather than data. Their rows pad cells 16px above and
477
+ // below, and a cell draws the line above its row in its top padding. Columns sit 16px apart,
478
+ // without padding at the edges of a row. They override the heights, dividers and edge
479
+ // padding of the data table, and the Pilat family follows its typography set.
480
+ variant: {
481
+ data: {},
482
+ dense: {
483
+ tableLayout: 'fixed',
484
+ selectors: {
485
+ '& :is(td, th)': {
486
+ boxShadow: `inset 0 ${vars.borderWidth.regular} 0 ${vars.color.line.secondary} !custom`,
487
+ height: 'auto !custom',
488
+ paddingBlock: '16',
489
+ paddingInline: '8',
490
+ textAlign: 'start',
491
+ typography: 'body.b2Strong',
492
+ fontFamily: 'heading',
493
+ },
494
+ '& thead :is(td, th)': {
495
+ boxShadow: 'none !custom',
496
+ color: 'content.primary',
497
+ paddingBlockStart: '0',
498
+ typography: 'body.b2Strong',
499
+ fontFamily: 'heading',
500
+ },
501
+ '& tbody tr:last-child > :is(td, th)': { paddingBlockEnd: '0' },
502
+ '& tbody tr:not(:last-child) > :is(td, th)': { borderBlockEnd: 'none !custom' },
503
+ '& tbody tr:not(:last-child)::after': { display: 'none' },
504
+ '& tr > :first-child': { paddingInlineStart: '0' },
505
+ '& tr > :last-child': { paddingInlineEnd: '0' },
506
+ '& tr > :last-child:not([data-justify])': { textAlign: 'start' },
507
+ },
508
+ },
509
+ simple: {
510
+ tableLayout: 'fixed',
511
+ selectors: {
512
+ '& :is(td, th)': {
513
+ boxShadow: `inset 0 ${vars.borderWidth.regular} 0 ${vars.color.line.primary} !custom`,
514
+ height: 'auto !custom',
515
+ paddingBlock: '16',
516
+ paddingInline: '8',
517
+ textAlign: 'start',
518
+ typography: 'body.b2',
519
+ verticalAlign: 'top',
520
+ },
521
+ '& th': {
522
+ boxSizing: 'border-box',
523
+ color: 'content.primary',
524
+ typography: 'body.b2Strong',
525
+ width: '40% !custom',
526
+ },
527
+ '& tbody tr:not(:last-child) > :is(td, th)': { borderBlockEnd: 'none !custom' },
528
+ '& tbody tr:not(:last-child)::after': { display: 'none' },
529
+ '& tr > :first-child': { paddingInlineStart: '0' },
530
+ '& tr > :last-child': { paddingInlineEnd: '0' },
531
+ '& tr > :last-child:not([data-justify])': { textAlign: 'start' },
532
+ },
533
+ },
534
+ },
467
535
  },
468
536
  },
469
537
  { id: 'tds/web/table/root' },