@tempoxyz/ds 0.3.0 → 0.3.2

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 (361) hide show
  1. package/dist/web/components/Accordion.css +1 -1
  2. package/dist/web/components/Accordion.js.zyzz.json +1 -1
  3. package/dist/web/components/AddressCard.css +1 -0
  4. package/dist/web/components/AddressCard.d.ts +85 -0
  5. package/dist/web/components/AddressCard.d.ts.map +1 -0
  6. package/dist/web/components/AddressCard.js +79 -0
  7. package/dist/web/components/AddressCard.js.map +1 -0
  8. package/dist/web/components/AddressCard.js.zyzz.json +1 -0
  9. package/dist/web/components/AgentLogo.js +1 -1
  10. package/dist/web/components/AgentLogo.js.map +1 -1
  11. package/dist/web/components/AgentLogo.js.zyzz.json +1 -1
  12. package/dist/web/components/Alert.css +1 -1
  13. package/dist/web/components/Alert.d.ts +7 -2
  14. package/dist/web/components/Alert.d.ts.map +1 -1
  15. package/dist/web/components/Alert.js +12 -7
  16. package/dist/web/components/Alert.js.map +1 -1
  17. package/dist/web/components/Alert.js.zyzz.json +1 -1
  18. package/dist/web/components/AlertDialog.js.zyzz.json +1 -1
  19. package/dist/web/components/Amount.css +1 -1
  20. package/dist/web/components/Amount.js.zyzz.json +1 -1
  21. package/dist/web/components/AmountInput.css +1 -1
  22. package/dist/web/components/AmountInput.d.ts +1 -1
  23. package/dist/web/components/AmountInput.d.ts.map +1 -1
  24. package/dist/web/components/AmountInput.js.zyzz.json +1 -1
  25. package/dist/web/components/AppShell.css +1 -1
  26. package/dist/web/components/AppShell.d.ts +128 -2
  27. package/dist/web/components/AppShell.d.ts.map +1 -1
  28. package/dist/web/components/AppShell.js +122 -32
  29. package/dist/web/components/AppShell.js.map +1 -1
  30. package/dist/web/components/AppShell.js.zyzz.json +1 -1
  31. package/dist/web/components/AssetChip.css +1 -1
  32. package/dist/web/components/AssetChip.d.ts.map +1 -1
  33. package/dist/web/components/AssetChip.js.map +1 -1
  34. package/dist/web/components/AssetChip.js.zyzz.json +1 -1
  35. package/dist/web/components/Autocomplete.js.zyzz.json +1 -1
  36. package/dist/web/components/Avatar.css +1 -1
  37. package/dist/web/components/Avatar.d.ts +68 -6
  38. package/dist/web/components/Avatar.d.ts.map +1 -1
  39. package/dist/web/components/Avatar.js +27 -7
  40. package/dist/web/components/Avatar.js.map +1 -1
  41. package/dist/web/components/Avatar.js.zyzz.json +1 -1
  42. package/dist/web/components/Badge.css +1 -1
  43. package/dist/web/components/Badge.d.ts +49 -1
  44. package/dist/web/components/Badge.d.ts.map +1 -1
  45. package/dist/web/components/Badge.js +5 -3
  46. package/dist/web/components/Badge.js.map +1 -1
  47. package/dist/web/components/Badge.js.zyzz.json +1 -1
  48. package/dist/web/components/Banner.css +1 -1
  49. package/dist/web/components/Banner.js.zyzz.json +1 -1
  50. package/dist/web/components/BarChart.css +1 -1
  51. package/dist/web/components/BarChart.js.zyzz.json +1 -1
  52. package/dist/web/components/Breadcrumbs.css +1 -1
  53. package/dist/web/components/Breadcrumbs.js.zyzz.json +1 -1
  54. package/dist/web/components/Button.css +1 -1
  55. package/dist/web/components/Button.d.ts +82 -12
  56. package/dist/web/components/Button.d.ts.map +1 -1
  57. package/dist/web/components/Button.js +6 -3
  58. package/dist/web/components/Button.js.map +1 -1
  59. package/dist/web/components/Button.js.zyzz.json +1 -1
  60. package/dist/web/components/ButtonGroup.js.zyzz.json +1 -1
  61. package/dist/web/components/Calendar.css +1 -1
  62. package/dist/web/components/Calendar.js.zyzz.json +1 -1
  63. package/dist/web/components/Callout.css +1 -0
  64. package/dist/web/components/Callout.d.ts +23 -0
  65. package/dist/web/components/Callout.d.ts.map +1 -0
  66. package/dist/web/components/Callout.js +26 -0
  67. package/dist/web/components/Callout.js.map +1 -0
  68. package/dist/web/components/Callout.js.zyzz.json +1 -0
  69. package/dist/web/components/Checkbox.css +1 -1
  70. package/dist/web/components/Checkbox.js.zyzz.json +1 -1
  71. package/dist/web/components/CheckboxGroup.js.zyzz.json +1 -1
  72. package/dist/web/components/ChoiceGroup.css +1 -1
  73. package/dist/web/components/ChoiceGroup.d.ts +17 -10
  74. package/dist/web/components/ChoiceGroup.d.ts.map +1 -1
  75. package/dist/web/components/ChoiceGroup.js +5 -5
  76. package/dist/web/components/ChoiceGroup.js.map +1 -1
  77. package/dist/web/components/ChoiceGroup.js.zyzz.json +1 -1
  78. package/dist/web/components/Choicebox.css +1 -1
  79. package/dist/web/components/Choicebox.js.zyzz.json +1 -1
  80. package/dist/web/components/Code.css +1 -0
  81. package/dist/web/components/Code.d.ts +25 -0
  82. package/dist/web/components/Code.d.ts.map +1 -0
  83. package/dist/web/components/Code.js +28 -0
  84. package/dist/web/components/Code.js.map +1 -0
  85. package/dist/web/components/Code.js.zyzz.json +1 -0
  86. package/dist/web/components/Combobox.css +1 -1
  87. package/dist/web/components/Combobox.js.zyzz.json +1 -1
  88. package/dist/web/components/Container.js.zyzz.json +1 -1
  89. package/dist/web/components/CopyButton.d.ts +8 -1
  90. package/dist/web/components/CopyButton.d.ts.map +1 -1
  91. package/dist/web/components/CopyButton.js.map +1 -1
  92. package/dist/web/components/CopyButton.js.zyzz.json +1 -1
  93. package/dist/web/components/DatePicker.css +1 -1
  94. package/dist/web/components/DatePicker.js.zyzz.json +1 -1
  95. package/dist/web/components/Dialog.css +1 -1
  96. package/dist/web/components/Dialog.d.ts.map +1 -1
  97. package/dist/web/components/Dialog.js +2 -1
  98. package/dist/web/components/Dialog.js.map +1 -1
  99. package/dist/web/components/Dialog.js.zyzz.json +1 -1
  100. package/dist/web/components/Drawer.js.zyzz.json +1 -1
  101. package/dist/web/components/Empty.css +1 -1
  102. package/dist/web/components/Empty.js.zyzz.json +1 -1
  103. package/dist/web/components/Field.css +1 -1
  104. package/dist/web/components/Field.d.ts +41 -5
  105. package/dist/web/components/Field.d.ts.map +1 -1
  106. package/dist/web/components/Field.js +19 -13
  107. package/dist/web/components/Field.js.map +1 -1
  108. package/dist/web/components/Field.js.zyzz.json +1 -1
  109. package/dist/web/components/Fieldset.js.zyzz.json +1 -1
  110. package/dist/web/components/Frame.css +1 -1
  111. package/dist/web/components/Frame.js.zyzz.json +1 -1
  112. package/dist/web/components/Gauge.js.zyzz.json +1 -1
  113. package/dist/web/components/GetStartedVisual.css +1 -0
  114. package/dist/web/components/GetStartedVisual.d.ts +59 -0
  115. package/dist/web/components/GetStartedVisual.d.ts.map +1 -0
  116. package/dist/web/components/GetStartedVisual.js +31 -0
  117. package/dist/web/components/GetStartedVisual.js.map +1 -0
  118. package/dist/web/components/GetStartedVisual.js.zyzz.json +1 -0
  119. package/dist/web/components/Grid.js.zyzz.json +1 -1
  120. package/dist/web/components/HeroVisual.css +1 -0
  121. package/dist/web/components/HeroVisual.d.ts +96 -0
  122. package/dist/web/components/HeroVisual.d.ts.map +1 -0
  123. package/dist/web/components/HeroVisual.js +202 -0
  124. package/dist/web/components/HeroVisual.js.map +1 -0
  125. package/dist/web/components/HeroVisual.js.zyzz.json +1 -0
  126. package/dist/web/components/Hex.css +1 -1
  127. package/dist/web/components/Hex.js.zyzz.json +1 -1
  128. package/dist/web/components/IconTile.css +1 -1
  129. package/dist/web/components/IconTile.js.zyzz.json +1 -1
  130. package/dist/web/components/Identicon.js.zyzz.json +1 -1
  131. package/dist/web/components/Inline.js.zyzz.json +1 -1
  132. package/dist/web/components/Inset.js.zyzz.json +1 -1
  133. package/dist/web/components/Kbd.css +1 -1
  134. package/dist/web/components/Kbd.d.ts +8 -7
  135. package/dist/web/components/Kbd.d.ts.map +1 -1
  136. package/dist/web/components/Kbd.js +1 -1
  137. package/dist/web/components/Kbd.js.map +1 -1
  138. package/dist/web/components/Kbd.js.zyzz.json +1 -1
  139. package/dist/web/components/ListGroup.css +1 -1
  140. package/dist/web/components/ListGroup.d.ts +39 -22
  141. package/dist/web/components/ListGroup.d.ts.map +1 -1
  142. package/dist/web/components/ListGroup.js +24 -21
  143. package/dist/web/components/ListGroup.js.map +1 -1
  144. package/dist/web/components/ListGroup.js.zyzz.json +1 -1
  145. package/dist/web/components/LoadingDots.js.zyzz.json +1 -1
  146. package/dist/web/components/Menu.css +1 -1
  147. package/dist/web/components/Menu.js.zyzz.json +1 -1
  148. package/dist/web/components/NativeSelect.css +1 -0
  149. package/dist/web/components/NativeSelect.d.ts +50 -0
  150. package/dist/web/components/NativeSelect.d.ts.map +1 -0
  151. package/dist/web/components/NativeSelect.js +50 -0
  152. package/dist/web/components/NativeSelect.js.map +1 -0
  153. package/dist/web/components/NativeSelect.js.zyzz.json +1 -0
  154. package/dist/web/components/NetworkLogo.js.zyzz.json +1 -1
  155. package/dist/web/components/NumberField.css +1 -1
  156. package/dist/web/components/NumberField.js.zyzz.json +1 -1
  157. package/dist/web/components/OtpField.css +1 -1
  158. package/dist/web/components/OtpField.js.zyzz.json +1 -1
  159. package/dist/web/components/Pagination.css +1 -1
  160. package/dist/web/components/Pagination.js.zyzz.json +1 -1
  161. package/dist/web/components/Popover.css +1 -1
  162. package/dist/web/components/Popover.js.zyzz.json +1 -1
  163. package/dist/web/components/Progress.css +1 -1
  164. package/dist/web/components/Progress.d.ts +1 -1
  165. package/dist/web/components/Progress.d.ts.map +1 -1
  166. package/dist/web/components/Progress.js +2 -1
  167. package/dist/web/components/Progress.js.map +1 -1
  168. package/dist/web/components/Progress.js.zyzz.json +1 -1
  169. package/dist/web/components/Qr.js.zyzz.json +1 -1
  170. package/dist/web/components/RadioGroup.css +1 -1
  171. package/dist/web/components/RadioGroup.d.ts +1 -1
  172. package/dist/web/components/RadioGroup.js.zyzz.json +1 -1
  173. package/dist/web/components/SecretValue.css +1 -1
  174. package/dist/web/components/SecretValue.js.zyzz.json +1 -1
  175. package/dist/web/components/Select.css +1 -1
  176. package/dist/web/components/Select.d.ts +1 -1
  177. package/dist/web/components/Select.d.ts.map +1 -1
  178. package/dist/web/components/Select.js +2 -2
  179. package/dist/web/components/Select.js.map +1 -1
  180. package/dist/web/components/Select.js.zyzz.json +1 -1
  181. package/dist/web/components/Separator.css +1 -1
  182. package/dist/web/components/Separator.js.zyzz.json +1 -1
  183. package/dist/web/components/SidebarMenu.css +1 -1
  184. package/dist/web/components/SidebarMenu.d.ts +60 -2
  185. package/dist/web/components/SidebarMenu.d.ts.map +1 -1
  186. package/dist/web/components/SidebarMenu.js +47 -16
  187. package/dist/web/components/SidebarMenu.js.map +1 -1
  188. package/dist/web/components/SidebarMenu.js.zyzz.json +1 -1
  189. package/dist/web/components/Skeleton.css +1 -1
  190. package/dist/web/components/Skeleton.js.zyzz.json +1 -1
  191. package/dist/web/components/Slider.css +1 -1
  192. package/dist/web/components/Slider.js.zyzz.json +1 -1
  193. package/dist/web/components/Snippet.css +1 -1
  194. package/dist/web/components/Snippet.js.zyzz.json +1 -1
  195. package/dist/web/components/Spinner.js.zyzz.json +1 -1
  196. package/dist/web/components/SplitBar.css +1 -1
  197. package/dist/web/components/SplitBar.js.zyzz.json +1 -1
  198. package/dist/web/components/SplitButton.css +1 -1
  199. package/dist/web/components/SplitButton.d.ts +3 -1
  200. package/dist/web/components/SplitButton.d.ts.map +1 -1
  201. package/dist/web/components/SplitButton.js +2 -2
  202. package/dist/web/components/SplitButton.js.map +1 -1
  203. package/dist/web/components/SplitButton.js.zyzz.json +1 -1
  204. package/dist/web/components/Stack.js.zyzz.json +1 -1
  205. package/dist/web/components/StatusChip.css +1 -1
  206. package/dist/web/components/StatusChip.js.zyzz.json +1 -1
  207. package/dist/web/components/StatusIndicator.css +1 -0
  208. package/dist/web/components/StatusIndicator.d.ts +74 -0
  209. package/dist/web/components/StatusIndicator.d.ts.map +1 -0
  210. package/dist/web/components/StatusIndicator.js +32 -0
  211. package/dist/web/components/StatusIndicator.js.map +1 -0
  212. package/dist/web/components/StatusIndicator.js.zyzz.json +1 -0
  213. package/dist/web/components/StatusRow.css +1 -1
  214. package/dist/web/components/StatusRow.js.zyzz.json +1 -1
  215. package/dist/web/components/Stepper.js.zyzz.json +1 -1
  216. package/dist/web/components/SuccessHero.css +1 -0
  217. package/dist/web/components/SuccessHero.d.ts +74 -0
  218. package/dist/web/components/SuccessHero.d.ts.map +1 -0
  219. package/dist/web/components/SuccessHero.js +167 -0
  220. package/dist/web/components/SuccessHero.js.map +1 -0
  221. package/dist/web/components/SuccessHero.js.zyzz.json +1 -0
  222. package/dist/web/components/Surface.css +1 -1
  223. package/dist/web/components/Surface.d.ts +86 -0
  224. package/dist/web/components/Surface.d.ts.map +1 -1
  225. package/dist/web/components/Surface.js +6 -3
  226. package/dist/web/components/Surface.js.map +1 -1
  227. package/dist/web/components/Surface.js.zyzz.json +1 -1
  228. package/dist/web/components/Switch.css +1 -1
  229. package/dist/web/components/Switch.d.ts +6 -6
  230. package/dist/web/components/Switch.d.ts.map +1 -1
  231. package/dist/web/components/Switch.js +3 -2
  232. package/dist/web/components/Switch.js.map +1 -1
  233. package/dist/web/components/Switch.js.zyzz.json +1 -1
  234. package/dist/web/components/Table.css +1 -1
  235. package/dist/web/components/Table.d.ts +85 -0
  236. package/dist/web/components/Table.d.ts.map +1 -1
  237. package/dist/web/components/Table.js +14 -6
  238. package/dist/web/components/Table.js.map +1 -1
  239. package/dist/web/components/Table.js.zyzz.json +1 -1
  240. package/dist/web/components/Tabs.css +1 -1
  241. package/dist/web/components/Tabs.d.ts +183 -6
  242. package/dist/web/components/Tabs.d.ts.map +1 -1
  243. package/dist/web/components/Tabs.js +18 -13
  244. package/dist/web/components/Tabs.js.map +1 -1
  245. package/dist/web/components/Tabs.js.zyzz.json +1 -1
  246. package/dist/web/components/TempoLogo.js +1 -1
  247. package/dist/web/components/TempoLogo.js.map +1 -1
  248. package/dist/web/components/TempoLogo.js.zyzz.json +1 -1
  249. package/dist/web/components/TextInput.css +1 -1
  250. package/dist/web/components/TextInput.d.ts +80 -2
  251. package/dist/web/components/TextInput.d.ts.map +1 -1
  252. package/dist/web/components/TextInput.js +19 -7
  253. package/dist/web/components/TextInput.js.map +1 -1
  254. package/dist/web/components/TextInput.js.zyzz.json +1 -1
  255. package/dist/web/components/Textarea.css +1 -1
  256. package/dist/web/components/Textarea.d.ts +7 -1
  257. package/dist/web/components/Textarea.d.ts.map +1 -1
  258. package/dist/web/components/Textarea.js +3 -2
  259. package/dist/web/components/Textarea.js.map +1 -1
  260. package/dist/web/components/Textarea.js.zyzz.json +1 -1
  261. package/dist/web/components/Toast.css +1 -1
  262. package/dist/web/components/Toast.d.ts +16 -3
  263. package/dist/web/components/Toast.d.ts.map +1 -1
  264. package/dist/web/components/Toast.js +29 -17
  265. package/dist/web/components/Toast.js.map +1 -1
  266. package/dist/web/components/Toast.js.zyzz.json +1 -1
  267. package/dist/web/components/Token.css +1 -1
  268. package/dist/web/components/Token.js.zyzz.json +1 -1
  269. package/dist/web/components/TokenLogo.js.zyzz.json +1 -1
  270. package/dist/web/components/Tooltip.css +1 -1
  271. package/dist/web/components/Tooltip.d.ts.map +1 -1
  272. package/dist/web/components/Tooltip.js +3 -2
  273. package/dist/web/components/Tooltip.js.map +1 -1
  274. package/dist/web/components/Tooltip.js.zyzz.json +1 -1
  275. package/dist/web/components/VerificationCode.css +1 -1
  276. package/dist/web/components/VerificationCode.js.zyzz.json +1 -1
  277. package/dist/web/components/Visual.js.zyzz.json +1 -1
  278. package/dist/web/components/internal/Field.css +1 -1
  279. package/dist/web/components/internal/Field.js.zyzz.json +1 -1
  280. package/dist/web/components/internal/GetStartedArtwork.d.ts +10 -0
  281. package/dist/web/components/internal/GetStartedArtwork.d.ts.map +1 -0
  282. package/dist/web/components/internal/GetStartedArtwork.js +11 -0
  283. package/dist/web/components/internal/GetStartedArtwork.js.map +1 -0
  284. package/dist/web/components/internal/InputGroup.css +1 -1
  285. package/dist/web/components/internal/InputGroup.js.zyzz.json +1 -1
  286. package/dist/web/components/internal/Listbox.css +1 -1
  287. package/dist/web/components/internal/Listbox.js.zyzz.json +1 -1
  288. package/dist/web/components/internal/Streaks.css +1 -0
  289. package/dist/web/components/internal/Streaks.d.ts +48 -0
  290. package/dist/web/components/internal/Streaks.d.ts.map +1 -0
  291. package/dist/web/components/internal/Streaks.js +48 -0
  292. package/dist/web/components/internal/Streaks.js.map +1 -0
  293. package/dist/web/components/internal/Streaks.js.zyzz.json +1 -0
  294. package/dist/web/components/internal/TabBar.d.ts +37 -0
  295. package/dist/web/components/internal/TabBar.d.ts.map +1 -0
  296. package/dist/web/components/internal/TabBar.js +30 -0
  297. package/dist/web/components/internal/TabBar.js.map +1 -0
  298. package/dist/web/components/internal/Text.d.ts +9 -0
  299. package/dist/web/components/internal/Text.d.ts.map +1 -0
  300. package/dist/web/components/internal/Text.js +35 -0
  301. package/dist/web/components/internal/Text.js.map +1 -0
  302. package/dist/web/index.d.ts +8 -0
  303. package/dist/web/index.d.ts.map +1 -1
  304. package/dist/web/index.js +8 -0
  305. package/dist/web/index.js.map +1 -1
  306. package/dist/web/index.js.zyzz.json +1 -1
  307. package/dist/web/vars.d.ts +51 -6
  308. package/dist/web/vars.d.ts.map +1 -1
  309. package/dist/web/vars.js.map +1 -1
  310. package/dist/web/vars.js.zyzz.json +1 -1
  311. package/dist/web/zyzz.config.d.ts +255 -30
  312. package/dist/web/zyzz.config.d.ts.map +1 -1
  313. package/dist/web/zyzz.config.js.zyzz.json +1 -1
  314. package/package.json +1 -1
  315. package/src/web/components/AddressCard.tsx +216 -0
  316. package/src/web/components/AgentLogo.tsx +1 -1
  317. package/src/web/components/Alert.tsx +25 -5
  318. package/src/web/components/AmountInput.tsx +1 -1
  319. package/src/web/components/AppShell.tsx +383 -22
  320. package/src/web/components/AssetChip.tsx +4 -1
  321. package/src/web/components/Avatar.tsx +73 -6
  322. package/src/web/components/Badge.tsx +43 -5
  323. package/src/web/components/Button.tsx +78 -21
  324. package/src/web/components/Callout.tsx +45 -0
  325. package/src/web/components/ChoiceGroup.tsx +26 -12
  326. package/src/web/components/Code.tsx +42 -0
  327. package/src/web/components/CopyButton.tsx +8 -4
  328. package/src/web/components/Dialog.tsx +9 -2
  329. package/src/web/components/Field.tsx +53 -20
  330. package/src/web/components/GetStartedVisual.tsx +66 -0
  331. package/src/web/components/HeroVisual.tsx +304 -0
  332. package/src/web/components/Kbd.tsx +16 -9
  333. package/src/web/components/ListGroup.tsx +75 -28
  334. package/src/web/components/NativeSelect.tsx +167 -0
  335. package/src/web/components/Progress.tsx +3 -2
  336. package/src/web/components/RadioGroup.tsx +1 -1
  337. package/src/web/components/Select.tsx +4 -1
  338. package/src/web/components/SidebarMenu.tsx +106 -7
  339. package/src/web/components/SplitButton.tsx +11 -4
  340. package/src/web/components/StatusIndicator.tsx +94 -0
  341. package/src/web/components/SuccessHero.tsx +249 -0
  342. package/src/web/components/Surface.tsx +107 -1
  343. package/src/web/components/Switch.tsx +18 -25
  344. package/src/web/components/Table.tsx +69 -1
  345. package/src/web/components/Tabs.tsx +172 -10
  346. package/src/web/components/TempoLogo.tsx +1 -1
  347. package/src/web/components/TextInput.tsx +87 -5
  348. package/src/web/components/Textarea.tsx +9 -1
  349. package/src/web/components/Toast.tsx +67 -34
  350. package/src/web/components/Tooltip.tsx +6 -4
  351. package/src/web/components/internal/GetStartedArtwork.tsx +356 -0
  352. package/src/web/components/internal/Streaks.tsx +173 -0
  353. package/src/web/components/internal/TabBar.ts +56 -0
  354. package/src/web/components/internal/Text.ts +39 -0
  355. package/src/web/components/visuals/GetStartedConnect.svg +36 -0
  356. package/src/web/components/visuals/GetStartedFunds.svg +31 -0
  357. package/src/web/components/visuals/GetStartedPasskey.svg +34 -0
  358. package/src/web/components/visuals/README.md +15 -0
  359. package/src/web/index.ts +8 -0
  360. package/src/web/logos/README.md +1 -1
  361. package/src/web/vars.ts +34 -10
@@ -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' },
@@ -4,13 +4,15 @@ import type * as zyzz from 'zyzz'
4
4
  import { style, variants, vars } from '../zyzz.config.js'
5
5
 
6
6
  /**
7
- * An underlined `role="tablist"` that switches between `role="tabpanel"` views, built on Base UI
8
- * Tabs. Arrow keys move focus between tabs and wrap at the ends. Enter or Space activates the
7
+ * An underlined or pill `role="tablist"` that switches between `role="tabpanel"` views, built on
8
+ * Base UI Tabs. Arrow keys move focus between tabs and wrap at the ends. Enter or Space activates the
9
9
  * focused tab unless `activateOnFocus` is set on `List`.
10
10
  *
11
11
  * - Use for switching views of related content. Use links for page navigation.
12
12
  * - Name the list with `aria-label` or `aria-labelledby`.
13
13
  * - Keep tab labels short and parallel, such as Overview, Activity and Settings.
14
+ * - Set `variant="pill"` on `List` for filled pill tabs, such as a row of filters. Pill tabs mark
15
+ * the active tab with its fill and take no `Indicator`.
14
16
  *
15
17
  * @example
16
18
  * <Tabs.Root defaultValue="overview">
@@ -32,7 +34,8 @@ import { style, variants, vars } from '../zyzz.config.js'
32
34
  export namespace Tabs {
33
35
  /**
34
36
  * The 2px bar along the bottom of the active tab, which slides to each tab and matches its
35
- * width. Place it inside `List` after the tabs. It ignores pointer events.
37
+ * width. Place it inside an underline `List` after the tabs. A pill `List` hides it. It ignores
38
+ * pointer events.
36
39
  */
37
40
  export function Indicator(props: Indicator.Props) {
38
41
  const { className, vars, ...attributes } = props
@@ -50,17 +53,19 @@ export namespace Tabs {
50
53
  }
51
54
 
52
55
  /**
53
- * The `role="tablist"` row, with 4px between tabs. `size` sets the height of the tabs to 32, 40
54
- * or 56px, and `expand` stretches the tabs to equal widths across the row. The row scrolls
55
- * horizontally when tabs overflow.
56
+ * The `role="tablist"` row. `variant` sets underline tabs, 4px apart, or filled pill tabs, 8px
57
+ * apart. `size` sets the height of underline tabs to 32, 40 or 56px, and of pill tabs to 32, 40
58
+ * or 48px. `appearance` sets the fills of pill tabs for the surface under them. `expand`
59
+ * stretches the tabs to equal widths across the row. The row scrolls horizontally when tabs
60
+ * overflow.
56
61
  */
57
62
  export function List(props: List.Props) {
58
- const { className, expand, size, vars, ...attributes } = props
63
+ const { appearance, className, expand, size, variant, vars, ...attributes } = props
59
64
 
60
65
  return (
61
66
  <BaseUi.Tabs.List
62
67
  {...attributes}
63
- {...styles.list({ className, expand, size, style: props.style, vars })}
68
+ {...styles.list({ appearance, className, expand, size, style: props.style, variant, vars })}
64
69
  />
65
70
  )
66
71
  }
@@ -206,8 +211,128 @@ namespace styles {
206
211
  padding: '4',
207
212
  position: 'relative',
208
213
  },
209
- defaultVariants: { expand: false, size: 'medium' },
214
+ // The pill sizes follow the Platform Tab: 48, 40 and 32px, padded by 32, 24 and 16px, with
215
+ // a label in Pilat at the size and weight of B2 Strong, or of B3 Strong for small. Each
216
+ // family follows its typography set, which sets the family of the body.
217
+ compoundVariants: [
218
+ {
219
+ when: { size: 'large', variant: 'pill' },
220
+ style: {
221
+ selectors: {
222
+ '& > [role="tab"]': {
223
+ height: '48',
224
+ paddingInline: '32',
225
+ typography: 'body.b2Strong',
226
+ fontFamily: 'heading',
227
+ },
228
+ '& > [role="tab"]:is([data-active], [data-active]:hover)': {
229
+ typography: 'body.b2Strong',
230
+ fontFamily: 'heading',
231
+ },
232
+ '& > [role="tab"] [data-reserve]': {
233
+ typography: 'body.b2Strong',
234
+ fontFamily: 'heading',
235
+ },
236
+ },
237
+ },
238
+ },
239
+ {
240
+ when: { size: 'medium', variant: 'pill' },
241
+ style: { selectors: { '& > [role="tab"]': { paddingInline: '24' } } },
242
+ },
243
+ {
244
+ when: { size: 'small', variant: 'pill' },
245
+ style: {
246
+ selectors: {
247
+ '& > [role="tab"]': {
248
+ paddingInline: '16',
249
+ typography: 'body.b3Strong',
250
+ fontFamily: 'heading',
251
+ },
252
+ '& > [role="tab"]:is([data-active], [data-active]:hover)': {
253
+ typography: 'body.b3Strong',
254
+ fontFamily: 'heading',
255
+ },
256
+ '& > [role="tab"] [data-reserve]': {
257
+ typography: 'body.b3Strong',
258
+ fontFamily: 'heading',
259
+ },
260
+ },
261
+ },
262
+ },
263
+ // Each appearance fills the resting tab with the container of its surface, and the active
264
+ // tab with the opposite background and text. The active selector also matches the hovered
265
+ // active tab, so it outranks the hover color of a tab.
266
+ {
267
+ when: { appearance: 'base', variant: 'pill' },
268
+ style: {
269
+ selectors: {
270
+ '& > [role="tab"]': {
271
+ backgroundColor: 'container.regular',
272
+ color: 'content.primary',
273
+ },
274
+ '& > [role="tab"]:hover:not([data-disabled], [data-active])': {
275
+ backgroundColor: 'container.strong',
276
+ color: 'content.primary',
277
+ },
278
+ '& > [role="tab"]:is([data-active], [data-active]:hover)': {
279
+ backgroundColor: 'inverse.background.primary',
280
+ color: 'inverse.content.primary',
281
+ },
282
+ },
283
+ },
284
+ },
285
+ // The focus ring of the page blends into an inverse surface, so an inverse tab draws its
286
+ // ring in the inverse text color.
287
+ {
288
+ when: { appearance: 'inverse', variant: 'pill' },
289
+ style: {
290
+ selectors: {
291
+ '& > [role="tab"]': {
292
+ backgroundColor: 'inverse.container.regular',
293
+ color: 'inverse.content.primary',
294
+ },
295
+ '& > [role="tab"]:hover:not([data-disabled], [data-active])': {
296
+ color: 'inverse.content.primary',
297
+ },
298
+ '& > [role="tab"]:focus-visible': { outlineColor: 'inverse.content.primary' },
299
+ '& > [role="tab"]:is([data-active], [data-active]:hover)': {
300
+ backgroundColor: 'background.primary',
301
+ color: 'content.primary',
302
+ },
303
+ },
304
+ },
305
+ },
306
+ // The overlay fills and text keep the same colors in both schemes. Hover lightens the fill.
307
+ {
308
+ when: { appearance: 'overlay', variant: 'pill' },
309
+ style: {
310
+ selectors: {
311
+ '& > [role="tab"]': {
312
+ backgroundColor: 'overlay.container.regular',
313
+ color: 'overlay.content.primary',
314
+ },
315
+ '& > [role="tab"]:hover:not([data-disabled], [data-active])': {
316
+ backgroundColor: 'overlay.action.secondary.fill.hover',
317
+ color: 'overlay.content.primary',
318
+ },
319
+ '& > [role="tab"]:is([data-active], [data-active]:hover)': {
320
+ backgroundColor: 'background.primary',
321
+ color: 'content.primary',
322
+ },
323
+ },
324
+ },
325
+ },
326
+ ],
327
+ defaultVariants: { appearance: 'base', expand: false, size: 'medium', variant: 'underline' },
210
328
  variants: {
329
+ /**
330
+ * The surface under pill tabs: the page for `base`, an inverse surface for `inverse`, and
331
+ * an image or video for `overlay`. Underline tabs ignore it.
332
+ *
333
+ * @default 'base'
334
+ */
335
+ appearance: { base: {}, inverse: {}, overlay: {} },
211
336
  expand: {
212
337
  false: {},
213
338
  true: {
@@ -215,7 +340,7 @@ namespace styles {
215
340
  selectors: { '& > [role="tab"]': { flex: '1 !custom' } },
216
341
  },
217
342
  },
218
- // The shared control scale: 32, 40 and 56px. The 40px tab matches the TDPS Tab, which
343
+ // The shared control scale: 32, 40 and 56px. The 40px tab matches the Platform Tab, which
219
344
  // has no other size. Small keeps its padding and label, and large pads a B1 label by 12px.
220
345
  size: {
221
346
  large: {
@@ -228,6 +353,43 @@ namespace styles {
228
353
  medium: { selectors: { '& > [role="tab"]': { height: '40' } } },
229
354
  small: { selectors: { '& > [role="tab"]': { height: '32' } } },
230
355
  },
356
+ // Pill tabs keep one weight, so the active tab changes only its fill and text color. They
357
+ // keep an 80px minimum width and center their label.
358
+ variant: {
359
+ pill: {
360
+ columnGap: '8',
361
+ selectors: {
362
+ '& > [role="tab"]': {
363
+ alignItems: 'center',
364
+ borderRadius: 'full',
365
+ cornerShape: 'round',
366
+ minWidth: '5rem !custom',
367
+ outlineOffset: '2',
368
+ transitionProperty: 'background-color, color, outline-color, scale',
369
+ typography: 'body.b2Strong',
370
+ fontFamily: 'heading',
371
+ },
372
+ '& > [role="tab"]:is([data-active], [data-active]:hover)': {
373
+ typography: 'body.b2Strong',
374
+ fontFamily: 'heading',
375
+ },
376
+ '& > [role="tab"] [data-reserve]': {
377
+ typography: 'body.b2Strong',
378
+ fontFamily: 'heading',
379
+ },
380
+ // The fill marks the active tab, so the list hides the underline indicator.
381
+ '& > span:not([role="tab"])': { display: 'none' },
382
+ },
383
+ '@media (prefers-reduced-motion: reduce)': {
384
+ selectors: {
385
+ '& > [role="tab"]': {
386
+ transitionProperty: 'background-color, color, outline-color',
387
+ },
388
+ },
389
+ },
390
+ },
391
+ underline: {},
392
+ },
231
393
  },
232
394
  },
233
395
  { id: 'tds/web/tabs/list' },
@@ -2,7 +2,7 @@ import type { ComponentPropsWithRef } from 'react'
2
2
  import type * as zyzz from 'zyzz'
3
3
  import { variants } from '../zyzz.config.js'
4
4
 
5
- // The Tempo Logo exports from the TDPS page of Web-Wallet, drawn in `currentColor`.
5
+ // The Tempo Logo exports from TPDS 1.0 Platform, drawn in `currentColor`.
6
6
  const artwork = {
7
7
  mark: {
8
8
  paths: ['M6.88 20H1.413L6.48 4.533H0L1.413 0H19.466L18.053 4.533H11.92L6.88 20Z'],
@@ -1,7 +1,7 @@
1
1
  import * as BaseUi from '@base-ui/react/input'
2
2
  import { type ComponentPropsWithRef, useContext, useMemo, useRef } from 'react'
3
3
  import type * as zyzz from 'zyzz'
4
- import { style } from '../zyzz.config.js'
4
+ import { style, variants } from '../zyzz.config.js'
5
5
  import * as InputGroup from './internal/InputGroup.js'
6
6
 
7
7
  /**
@@ -9,7 +9,8 @@ import * as InputGroup from './internal/InputGroup.js'
9
9
  * place it inside `Field.Root` to get a label, description and error. Focus turns the field
10
10
  * elevated with a 1px border. `invalid` fills it red and `success` ends it with a check, each also
11
11
  * inherited from `Field.Root`. Entering either state after mount plays a one-shot nudge or pop.
12
- * For search, put a `Search` icon in `Prefix` and add `Clear`.
12
+ * For search, put a `Search` icon in `Prefix` and add `Clear`. `size="large"` draws the 52px
13
+ * search bar, and `appearance="overlay"` draws the field over an image or video.
13
14
  *
14
15
  * - Give every control a visible `Field.Label`. A placeholder is not a label.
15
16
  * - Set `autoComplete`, `inputMode` and `type` so browsers and keyboards can help fill the field.
@@ -34,9 +35,20 @@ import * as InputGroup from './internal/InputGroup.js'
34
35
  export namespace TextInput {
35
36
  /** The field surface, rendered as a `div` that holds the other parts. */
36
37
  export function Group(props: Group.Props) {
37
- const { className, invalid = false, ref, success = false, variant, vars, ...attributes } = props
38
+ const {
39
+ appearance,
40
+ className,
41
+ invalid = false,
42
+ ref,
43
+ size,
44
+ success = false,
45
+ variant,
46
+ vars,
47
+ ...attributes
48
+ } = props
38
49
  const control = useRef<HTMLInputElement | null>(null)
39
50
  const element = useRef<HTMLDivElement | null>(null)
51
+ const surface = styles.group({ appearance, className, size })
40
52
  const context = useMemo(() => ({ control, invalid }), [invalid])
41
53
 
42
54
  InputGroup.useEntrance(element)
@@ -45,7 +57,13 @@ export namespace TextInput {
45
57
  <InputGroup.Context.Provider value={context}>
46
58
  <div
47
59
  {...attributes}
48
- {...InputGroup.styles.group({ className, style: props.style, variant, vars })}
60
+ {...surface}
61
+ {...InputGroup.styles.group({
62
+ className: surface.className,
63
+ style: props.style,
64
+ variant,
65
+ vars,
66
+ })}
49
67
  data-invalid={invalid || undefined}
50
68
  data-success={success || undefined}
51
69
  ref={(node) => {
@@ -60,7 +78,8 @@ export namespace TextInput {
60
78
 
61
79
  export namespace Group {
62
80
  export type Props = ComponentPropsWithRef<'div'> &
63
- zyzz.Props.Variants<typeof InputGroup.styles.group> & {
81
+ zyzz.Props.Variants<typeof InputGroup.styles.group> &
82
+ zyzz.Props.Variants<typeof styles.group> & {
64
83
  /**
65
84
  * Fills the field red and sets `aria-invalid` on `TextInput.Control`.
66
85
  *
@@ -254,6 +273,69 @@ namespace styles {
254
273
  { id: 'tds/web/text-input/clear' },
255
274
  )
256
275
 
276
+ /**
277
+ * The surface and size of `TextInput.Group`, applied over the shared field. The rules repeat the
278
+ * element type, so they outrank the shared rules of the same state.
279
+ */
280
+ export const group = variants(
281
+ {
282
+ base: {
283
+ // A field in a large `Field.Root` insets its content 20px, as the Platform text input does.
284
+ selectors: { '[data-field-size="large"] > &:is(div)': { paddingInline: '20' } },
285
+ },
286
+ // The search bar on the page draws its icons in the primary color.
287
+ compoundVariants: [
288
+ {
289
+ when: { appearance: 'base', size: 'large' },
290
+ style: { selectors: { '& > span > svg': { color: 'content.primary' } } },
291
+ },
292
+ ],
293
+ defaultVariants: { appearance: 'base', size: 'medium' },
294
+ variants: {
295
+ /**
296
+ * The surface under the field: the page for `base`, and an image or video for `overlay`.
297
+ * The overlay fill and text keep the same colors in both schemes, and hover lightens the
298
+ * fill.
299
+ *
300
+ * @default 'base'
301
+ */
302
+ appearance: {
303
+ base: {},
304
+ overlay: {
305
+ selectors: {
306
+ '&:is(div)': {
307
+ backgroundColor: 'overlay.container.regular',
308
+ color: 'overlay.content.primary',
309
+ },
310
+ '&:is(div):hover:not(:has(input:disabled))': {
311
+ backgroundColor: 'overlay.action.secondary.fill.hover',
312
+ },
313
+ '& > input, & > input::placeholder, & > span, & > span > svg, & > button': {
314
+ color: 'overlay.content.primary',
315
+ },
316
+ },
317
+ },
318
+ },
319
+ /**
320
+ * The height of the field. `medium` is the 48px text field. `large` is the 52px search
321
+ * bar, which insets its content 20px, rounds at `sm` and draws 20px icons.
322
+ *
323
+ * @default 'medium'
324
+ */
325
+ size: {
326
+ large: {
327
+ selectors: {
328
+ '&:is(div)': { borderRadius: 'sm', height: '52', paddingInline: '20' },
329
+ '& > span > svg': { fontSize: '20' },
330
+ },
331
+ },
332
+ medium: {},
333
+ },
334
+ },
335
+ },
336
+ { id: 'tds/web/text-input/surface' },
337
+ )
338
+
257
339
  // The group carries the type, so the control inherits it. Browsers reset the tracking of a form
258
340
  // control, so it inherits that too.
259
341
  export const control = style(
@@ -6,7 +6,8 @@ import { variants } from '../zyzz.config.js'
6
6
  /**
7
7
  * A native `textarea` registered as the control of the enclosing `Field.Root`, which supplies its
8
8
  * label, description, error and disabled state. It defaults to three rows with vertical resizing,
9
- * and `variant="outlined"` draws a 1px line instead of the fill.
9
+ * and `variant="outlined"` draws a 1px line instead of the fill. In a large `Field.Root`, it
10
+ * insets its text 20px from the sides and 16px from the top, and is at least 80px tall.
10
11
  *
11
12
  * - Use it for multi-line answers. Set `rows` to the expected length of the answer.
12
13
  * - `resize="auto"` grows the box with its content through `field-sizing`. Browsers without that
@@ -85,6 +86,13 @@ namespace styles {
85
86
  cursor: 'default',
86
87
  },
87
88
  '&:disabled::placeholder': { color: 'content.subtle' },
89
+ // The Platform text input draws its multi-line field 80px tall, with the text 16px from
90
+ // the top inside the 1px border.
91
+ '[data-field-size="large"] > &': {
92
+ minHeight: '80',
93
+ paddingBlock: '15px !custom',
94
+ paddingInline: '20',
95
+ },
88
96
  },
89
97
  '@media (forced-colors: active)': {
90
98
  outlineStyle: 'none !custom',