@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,4 +1,5 @@
1
1
  import * as BaseUi from '@base-ui/react/drawer'
2
+ import { useRender } from '@base-ui/react/use-render'
2
3
  import {
3
4
  type ComponentPropsWithRef,
4
5
  createContext,
@@ -8,9 +9,12 @@ import {
8
9
  } from 'react'
9
10
  import type * as zyzz from 'zyzz'
10
11
  import { keyframes } from 'zyzz/web'
11
- import { style, variants } from '../zyzz.config.js'
12
+ import { style, variants, vars } from '../zyzz.config.js'
13
+ import * as TabBar from './internal/TabBar.js'
14
+ import * as Text from './internal/Text.js'
12
15
 
13
16
  type Context = {
17
+ collapse: boolean
14
18
  container: HTMLDivElement | null
15
19
  handle: BaseUi.Drawer.Handle<unknown>
16
20
  open: boolean
@@ -19,10 +23,11 @@ type Context = {
19
23
 
20
24
  const context = createContext<Context | undefined>(undefined)
21
25
 
22
- const compactQuery = '(max-width: 1023px)'
26
+ // The sidebar opens as a drawer below 1024px, or below 768px when it collapses to its icons from
27
+ // 768px to 1023px. The breakpoints are literals because media queries cannot read CSS variables.
28
+ function useCompact(collapse: boolean) {
29
+ const compactQuery = collapse ? '(max-width: 767px)' : '(max-width: 1023px)'
23
30
 
24
- // The viewport breakpoint is a literal because media queries cannot read CSS variables.
25
- function useCompact() {
26
31
  return useSyncExternalStore(
27
32
  (notify) => {
28
33
  const query = window.matchMedia(compactQuery)
@@ -42,7 +47,8 @@ function useShell() {
42
47
 
43
48
  /**
44
49
  * Application frame with a sticky sidebar beside a content column. `align="center"` centers both
45
- * on wide viewports, and `align="start"` pins the sidebar left with content filling the rest.
50
+ * on wide viewports, with the sidebar fill to the start edge and the header bar to the end edge.
51
+ * `align="start"` pins the sidebar left with content filling the rest.
46
52
  * Below 1024px the sidebar moves into a drawer that `AppShell.Trigger` opens from the right edge.
47
53
  *
48
54
  * - Name the `Sidebar` with `aria-label`. It labels the `aside` on wide viewports and the drawer
@@ -69,11 +75,23 @@ function useShell() {
69
75
  * @see {@link https://www.w3.org/WAI/WCAG22/Understanding/focus-order.html | WCAG 2.2 Focus Order}
70
76
  */
71
77
  export namespace AppShell {
72
- /** Page header row holding the title, actions and the compact-viewport `Trigger`. */
78
+ /**
79
+ * Renders the 56px page header bar at the top of `Main`, in the fill of the sidebar with a bottom
80
+ * border, holding the title, actions and the compact-viewport `Trigger`. It spans the full width
81
+ * of `Main`. With `align="center"` on wide viewports, its fill and border continue to the end
82
+ * edge. A `Main` that scrolls itself clips them at its own edge, so scroll the root instead when
83
+ * the shell fills a fixed-height region.
84
+ */
73
85
  export function Header(props: Header.Props) {
74
86
  const { className, vars, ...attributes } = props
75
87
 
76
- return <header {...attributes} {...styles.header({ className, style: props.style, vars })} />
88
+ return (
89
+ <header
90
+ {...attributes}
91
+ {...styles.header({ className, style: props.style, vars })}
92
+ data-app-shell-header=""
93
+ />
94
+ )
77
95
  }
78
96
 
79
97
  export namespace Header {
@@ -99,7 +117,9 @@ export namespace AppShell {
99
117
  export function Root(props: Root.Props) {
100
118
  const {
101
119
  align,
120
+ children,
102
121
  className,
122
+ collapse = false,
103
123
  defaultOpen = false,
104
124
  onOpenChange,
105
125
  open,
@@ -108,6 +128,7 @@ export namespace AppShell {
108
128
  ...attributes
109
129
  } = props
110
130
  const [handle] = useState(() => BaseUi.Drawer.createHandle<unknown>())
131
+ const [tabBar] = useState(TabBar.create)
111
132
  const [uncontrolled, setUncontrolled] = useState(defaultOpen)
112
133
  const [container, setContainer] = useState<HTMLDivElement | null>(null)
113
134
  const current = open ?? uncontrolled
@@ -115,6 +136,7 @@ export namespace AppShell {
115
136
  return (
116
137
  <context.Provider
117
138
  value={{
139
+ collapse,
118
140
  container,
119
141
  handle,
120
142
  open: current,
@@ -127,13 +149,19 @@ export namespace AppShell {
127
149
  <div
128
150
  {...attributes}
129
151
  {...styles.root({ align, className, style: props.style, vars })}
152
+ data-app-shell-collapse={collapse ? '' : undefined}
130
153
  data-state={current ? 'open' : 'closed'}
131
154
  ref={(node) => {
132
155
  setContainer(node)
133
156
  if (typeof ref === 'function') ref(node)
134
157
  else if (ref) ref.current = node
135
158
  }}
136
- />
159
+ >
160
+ <TabBar.Context.Provider value={tabBar}>
161
+ {children}
162
+ <BottomBar />
163
+ </TabBar.Context.Provider>
164
+ </div>
137
165
  </context.Provider>
138
166
  )
139
167
  }
@@ -141,6 +169,14 @@ export namespace AppShell {
141
169
  export namespace Root {
142
170
  export type Props = ComponentPropsWithRef<'div'> &
143
171
  zyzz.Props.Variants<typeof styles.root> & {
172
+ /**
173
+ * Collapses the inline sidebar to a 64px column of icons from 768px to 1023px, and opens
174
+ * the drawer only below 768px. Give every `SidebarMenu.Item` an icon as its first child.
175
+ * Absent, the sidebar opens as a drawer below 1024px.
176
+ * @default false
177
+ */
178
+ collapse?: boolean | undefined
179
+
144
180
  /**
145
181
  * Initial drawer state when `open` is uncontrolled.
146
182
  * @default false
@@ -156,7 +192,7 @@ export namespace AppShell {
156
192
  }
157
193
 
158
194
  /**
159
- * Renders a sticky `aside` from 1024px, `var(--sidebar-width, 16.25rem)` wide. Below that it
195
+ * Renders a sticky `aside` from 1024px, `var(--sidebar-width, 16rem)` wide. Below that it
160
196
  * renders a modal Base UI drawer popup as an `aside` with the dialog role, which takes focus on
161
197
  * open, returns it to the trigger on close, and dismisses with Escape, the backdrop or a swipe
162
198
  * right. Server rendering always emits the wide layout.
@@ -164,10 +200,18 @@ export namespace AppShell {
164
200
  export function Sidebar(props: Sidebar.Props) {
165
201
  const { className, vars, ...attributes } = props
166
202
  const shell = useShell()
167
- const compact = useCompact()
203
+ const compact = useCompact(shell.collapse)
168
204
  const sidebar = styles.sidebar({ className, style: props.style, vars })
169
205
 
170
- if (!compact) return <aside {...attributes} {...styles.inline(sidebar)} />
206
+ if (!compact)
207
+ return (
208
+ <aside
209
+ {...attributes}
210
+ {...styles.inline(sidebar)}
211
+ data-app-shell-rail={shell.collapse ? '' : undefined}
212
+ data-app-shell-sidebar="inline"
213
+ />
214
+ )
171
215
 
172
216
  return (
173
217
  <BaseUi.Drawer.Root
@@ -176,7 +220,8 @@ export namespace AppShell {
176
220
  open={shell.open}
177
221
  swipeDirection="right"
178
222
  >
179
- <BaseUi.Drawer.Portal container={shell.container}>
223
+ {/* The closed drawer stays mounted, so its items register in the bottom bar. */}
224
+ <BaseUi.Drawer.Portal container={shell.container} keepMounted>
180
225
  <BaseUi.Drawer.Backdrop {...styles.backdrop()} />
181
226
  <BaseUi.Drawer.Viewport {...styles.viewport()}>
182
227
  <BaseUi.Drawer.Popup
@@ -206,6 +251,7 @@ export namespace AppShell {
206
251
  zyzz.Props.Variants<typeof styles.sidebarBody>
207
252
  }
208
253
 
254
+ /** The bottom of the sidebar, such as the account menu. It stays at the bottom edge. */
209
255
  export function SidebarFooter(props: SidebarFooter.Props) {
210
256
  const { className, vars, ...attributes } = props
211
257
 
@@ -219,6 +265,7 @@ export namespace AppShell {
219
265
  zyzz.Props.Variants<typeof styles.sidebarFooter>
220
266
  }
221
267
 
268
+ /** The top of the sidebar, such as the product or project switcher. */
222
269
  export function SidebarHeader(props: SidebarHeader.Props) {
223
270
  const { className, vars, ...attributes } = props
224
271
 
@@ -277,6 +324,54 @@ export namespace AppShell {
277
324
  }
278
325
  }
279
326
 
327
+ /**
328
+ * Repeats the `SidebarMenu.Item`s that set `tabBar` in a bar fixed to the bottom edge below 768px:
329
+ * `tab` items as icons in a pill `<nav>`, then each `action` item as a floating action button.
330
+ * Renders nothing while no item sets `tabBar`.
331
+ */
332
+ function BottomBar() {
333
+ const store = use(TabBar.Context)!
334
+ const entries = useSyncExternalStore(store.subscribe, store.snapshot, store.snapshot)
335
+ const tabs = entries.filter(([, entry]) => entry.variant === 'tab')
336
+ const actions = entries.filter(([, entry]) => entry.variant === 'action')
337
+
338
+ if (entries.length === 0) return null
339
+
340
+ return (
341
+ <div {...styles.bottomBar()} data-app-shell-bottom-bar="">
342
+ {tabs.length > 0 && (
343
+ <nav aria-label="Main" {...styles.tabBar()}>
344
+ {tabs.map(([id, entry]) => (
345
+ <BottomBarItem entry={entry} key={id} />
346
+ ))}
347
+ </nav>
348
+ )}
349
+ {actions.map(([id, entry]) => (
350
+ <BottomBarItem entry={entry} key={id} />
351
+ ))}
352
+ </div>
353
+ )
354
+ }
355
+
356
+ /**
357
+ * Renders the element of a `SidebarMenu.Item` with the attributes and `render` of the item, and
358
+ * shows only its first element, such as its icon. Its text stays in the accessible name.
359
+ */
360
+ function BottomBarItem(props: { entry: TabBar.Entry }) {
361
+ const { entry } = props
362
+
363
+ return useRender({
364
+ defaultTagName: 'a',
365
+ props: {
366
+ ...entry.attributes,
367
+ 'aria-current': entry.active ? 'page' : undefined,
368
+ ...(entry.variant === 'tab' ? styles.tab({ active: entry.active }) : styles.action()),
369
+ children: Text.wrap(entry.children, styles.label()),
370
+ },
371
+ render: entry.render,
372
+ })
373
+ }
374
+
280
375
  const fadeIn = keyframes(
281
376
  { from: { opacity: 0 }, to: { opacity: 1 } },
282
377
  { id: 'tds/web/app-shell/fade-in' },
@@ -288,9 +383,56 @@ const fadeOut = keyframes(
288
383
  )
289
384
 
290
385
  namespace styles {
386
+ // The 56px circle of the Platform Floating Action Button, filled like the primary button.
387
+ export const action = style(
388
+ {
389
+ alignItems: 'center',
390
+ backgroundColor: 'inverse.background.primary',
391
+ borderRadius: 'full',
392
+ boxShadow: 'large',
393
+ boxSizing: 'border-box',
394
+ color: 'inverse.content.primary',
395
+ cornerShape: 'round',
396
+ cursor: 'pointer',
397
+ display: 'flex',
398
+ flexShrink: '0 !custom',
399
+ height: '56',
400
+ justifyContent: 'center',
401
+ outlineColor: 'transparent !custom',
402
+ outlineOffset: '2',
403
+ outlineStyle: 'solid !custom',
404
+ outlineWidth: '2',
405
+ position: 'relative',
406
+ textDecoration: 'none !custom',
407
+ transitionDuration: '160',
408
+ transitionProperty: 'background-color, outline-color, scale !custom',
409
+ transitionTimingFunction: 'snappy',
410
+ width: '56',
411
+ selectors: {
412
+ '& > :first-child': { flexShrink: '0 !custom', fontSize: '24' },
413
+ '& > :not(:first-child)': {
414
+ clipPath: 'inset(50%) !custom',
415
+ height: '1px !custom',
416
+ overflow: 'hidden',
417
+ position: 'absolute',
418
+ whiteSpace: 'nowrap',
419
+ width: '1px !custom',
420
+ },
421
+ '&:active': { scale: 'press', transitionDuration: '100' },
422
+ '&:focus-visible': { outlineColor: 'border.focus' },
423
+ '&:hover': { backgroundColor: 'action.primary.fill.hover' },
424
+ },
425
+ '@media (prefers-reduced-motion: reduce)': {
426
+ transitionProperty: 'background-color, outline-color !custom',
427
+ selectors: { '&:active': { scale: 'none !custom' } },
428
+ },
429
+ },
430
+ { id: 'tds/web/app-shell/action' },
431
+ )
432
+
291
433
  export const backdrop = style(
292
434
  {
293
- backgroundColor: 'black',
435
+ backgroundColor: 'neutral.100',
294
436
  inset: '0',
295
437
  opacity: '0.6 !custom',
296
438
  position: 'fixed',
@@ -310,6 +452,7 @@ namespace styles {
310
452
  {
311
453
  backgroundColor: 'currentColor !custom',
312
454
  borderRadius: 'full',
455
+ cornerShape: 'round',
313
456
  height: '2',
314
457
  insetInlineStart: '0',
315
458
  position: 'absolute',
@@ -334,6 +477,22 @@ namespace styles {
334
477
  { id: 'tds/web/app-shell/bar' },
335
478
  )
336
479
 
480
+ // Floats over the content, inset by the 24px page margin of the Mobile layout and 16px from the
481
+ // bottom edge. It sits below the drawer and its backdrop.
482
+ export const bottomBar = style(
483
+ {
484
+ alignItems: 'center',
485
+ bottom: 'calc(1rem + env(safe-area-inset-bottom)) !custom',
486
+ columnGap: '12',
487
+ display: 'none',
488
+ insetInline: '24',
489
+ position: 'fixed',
490
+ zIndex: '39 !custom',
491
+ '@media (max-width: 767px)': { display: 'flex' },
492
+ },
493
+ { id: 'tds/web/app-shell/bottom-bar' },
494
+ )
495
+
337
496
  export const bars = style(
338
497
  { display: 'block', height: '16', position: 'relative', width: '16' },
339
498
  { id: 'tds/web/app-shell/bars' },
@@ -341,7 +500,7 @@ namespace styles {
341
500
 
342
501
  export const drawer = style(
343
502
  {
344
- borderInlineStartColor: 'grayAlpha.200',
503
+ borderInlineStartColor: 'line.secondary',
345
504
  borderInlineStartStyle: 'solid',
346
505
  borderInlineStartWidth: '1px !custom',
347
506
  height: '100% !custom',
@@ -359,6 +518,9 @@ namespace styles {
359
518
  },
360
519
  '&[data-starting-style]': { transform: 'translateX(100%) !custom' },
361
520
  '&[data-swiping]': { transitionDuration: '0', userSelect: 'none' },
521
+ // The closed drawer stays mounted with the `hidden` attribute, which the flex layout of
522
+ // the sidebar would override.
523
+ '&[hidden]': { display: 'none !custom' },
362
524
  },
363
525
  '@media (prefers-reduced-motion: reduce)': {
364
526
  transitionProperty: 'opacity !custom',
@@ -373,19 +535,33 @@ namespace styles {
373
535
  { id: 'tds/web/app-shell/drawer' },
374
536
  )
375
537
 
538
+ // The bar bleeds into the padding of `Main`, so it spans the column and starts at its top edge.
539
+ // The header takes the fill of the sidebar, so the two frame the page.
376
540
  export const header = variants(
377
541
  {
378
542
  base: {
379
543
  alignItems: 'center',
544
+ backgroundColor: 'background.sidebar',
545
+ borderBottomColor: 'line.secondary',
546
+ borderBottomStyle: 'solid',
547
+ borderBottomWidth: '1px !custom',
548
+ boxSizing: 'border-box',
380
549
  columnGap: '8',
381
550
  display: 'flex',
382
551
  justifyContent: 'space-between',
383
552
  marginBottom: '24',
553
+ marginInline: '-16',
554
+ marginTop: '-20',
555
+ minHeight: '56',
384
556
  minWidth: '0',
385
- // Below 1024px the fixed trigger covers the top-right corner, so header actions end 8px
386
- // before it: its 40px plus 16px inset, less the main column's own side padding.
387
- '@media (max-width: 1023px)': { paddingInlineEnd: '48' },
388
- '@media (min-width: 640px) and (max-width: 1023px)': { paddingInlineEnd: '32' },
557
+ paddingInline: '16',
558
+ '@media (min-width: 640px)': { marginInline: '-2rem !custom', paddingInline: '24' },
559
+ // Below 1024px the fixed trigger covers the end of the bar, so header actions end 8px
560
+ // before it: its 40px plus its 16px inset. A collapsed sidebar hides it from 768px.
561
+ '@media (max-width: 1023px)': { paddingInlineEnd: '64' },
562
+ '@media (min-width: 768px) and (max-width: 1023px)': {
563
+ selectors: { '[data-app-shell-collapse] > main > &': { paddingInlineEnd: '24' } },
564
+ },
389
565
  },
390
566
  },
391
567
  { id: 'tds/web/app-shell/header' },
@@ -413,23 +589,50 @@ namespace styles {
413
589
  {
414
590
  base: {
415
591
  backgroundColor: 'background.primary',
416
- color: 'foreground',
592
+ color: 'content.primary',
417
593
  display: 'flex',
418
594
  minHeight: '100dvh !custom',
419
595
  position: 'relative',
420
- typography: 'copy.14',
596
+ typography: 'body.b2',
421
597
  selectors: {
422
- // Equal gutters center the sidebar and content column on wide viewports.
598
+ // Equal gutters center the sidebar and content column on wide viewports. The start
599
+ // gutter takes the fill of the sidebar, so the sidebar reaches the start edge.
423
600
  '&::after, &::before': { content: '"" !custom', flex: '1 !custom' },
601
+ '&::before': { backgroundColor: 'background.sidebar' },
424
602
  },
425
603
  '@media (max-width: 1023px)': {
426
604
  selectors: { '&::after, &::before': { display: 'none !custom' } },
427
605
  },
606
+ // The bottom bar covers the end of the page, so content can scroll clear of it: 16px
607
+ // below the bar, its 56px, and 16px above it.
608
+ '@media (max-width: 767px)': {
609
+ selectors: {
610
+ '&:has(> [data-app-shell-bottom-bar]) > main': {
611
+ paddingBottom: 'calc(5.5rem + env(safe-area-inset-bottom)) !custom',
612
+ },
613
+ },
614
+ },
428
615
  },
429
616
  defaultVariants: { align: 'center' },
430
617
  variants: {
431
618
  align: {
432
- center: {},
619
+ // The header bar continues across the end gutter as the outset of a border image, which
620
+ // is ink overflow. It adds no scroll and changes no layout, and a scrolling `Main` clips
621
+ // it at its own edge. The image draws the fill and the 1px bottom border of the header.
622
+ // The outset takes the gutter from the viewport width, since the root of an application
623
+ // frame spans the viewport.
624
+ center: {
625
+ '@media (min-width: 1024px)': {
626
+ selectors: {
627
+ '& > main > [data-app-shell-header]': {
628
+ borderImageOutset: `0 max(0px, calc((100vw - var(--sidebar-width, 16rem) - ${vars.container['1024']}) / 2)) 0 0 !custom`,
629
+ borderImageSlice: '0 fill !custom',
630
+ borderImageSource: `linear-gradient(${vars.color.background.sidebar} calc(100% - 1px), ${vars.color.line.secondary} 0) !custom`,
631
+ borderImageWidth: '0 !custom',
632
+ },
633
+ },
634
+ },
635
+ },
433
636
  start: {
434
637
  selectors: {
435
638
  '&::after, &::before': { display: 'none !custom' },
@@ -445,33 +648,52 @@ namespace styles {
445
648
  export const sidebar = variants(
446
649
  {
447
650
  base: {
448
- backgroundColor: 'background.primary',
651
+ backgroundColor: 'background.sidebar',
449
652
  boxSizing: 'border-box',
450
653
  display: 'flex',
451
654
  flexDirection: 'column',
452
655
  flexShrink: '0 !custom',
453
656
  minHeight: '0',
454
- paddingBottom: '20',
455
- paddingInline: '10',
456
- rowGap: '24',
657
+ paddingBottom: '16',
658
+ paddingInline: '12',
659
+ rowGap: '16',
457
660
  },
458
661
  },
459
662
  { id: 'tds/web/app-shell/sidebar' },
460
663
  )
461
664
 
665
+ // Keeps the label of a bottom bar item in its accessible name without painting it.
666
+ export const label = style(
667
+ {
668
+ clipPath: 'inset(50%) !custom',
669
+ height: '1px !custom',
670
+ overflow: 'hidden',
671
+ position: 'absolute',
672
+ whiteSpace: 'nowrap',
673
+ width: '1px !custom',
674
+ },
675
+ { id: 'tds/web/app-shell/label' },
676
+ )
677
+
462
678
  // Follows `sidebar`, so its compact `display: none` overrides the sidebar's `display: flex` in
463
679
  // server-rendered markup, which always emits the wide layout.
464
680
  export const inline = style(
465
681
  {
466
- borderInlineEndColor: 'grayAlpha.200',
682
+ borderInlineEndColor: 'line.secondary',
467
683
  borderInlineEndStyle: 'solid',
468
684
  borderInlineEndWidth: '1px !custom',
469
685
  height: '100dvh !custom',
470
686
  insetBlockStart: '0',
471
687
  overflowY: 'auto',
472
688
  position: 'sticky',
473
- width: 'var(--sidebar-width, 16.25rem) !custom',
689
+ width: 'var(--sidebar-width, 16rem) !custom',
474
690
  '@media (max-width: 1023px)': { display: 'none !custom' },
691
+ // A collapsed sidebar stays inline as a column of icons, which `SidebarMenu` centers.
692
+ '@media (min-width: 768px) and (max-width: 1023px)': {
693
+ selectors: {
694
+ '&[data-app-shell-rail]': { display: 'flex !custom', width: '4rem !custom' },
695
+ },
696
+ },
475
697
  },
476
698
  { id: 'tds/web/app-shell/inline' },
477
699
  )
@@ -479,20 +701,33 @@ namespace styles {
479
701
  export const sidebarBody = variants(
480
702
  {
481
703
  base: {
704
+ // Custom string values only take literal CSS, so the thumb color reaches `scrollbarColor` through a property.
705
+ '--tds-sidebar-scrollbar-thumb': `${vars.color.line.primary}`,
482
706
  flex: '1 !custom',
483
707
  // Bleeding into the sidebar's inline padding puts the scrollbar at the sidebar edge.
484
- marginInline: '-10',
708
+ marginInline: '-12',
485
709
  minHeight: '0',
486
710
  overflowY: 'auto',
487
711
  overscrollBehavior: 'contain',
488
- paddingInline: '10',
712
+ paddingInline: '12',
713
+ // A transparent track leaves only the thin thumb over the sidebar fill.
714
+ scrollbarColor: 'var(--tds-sidebar-scrollbar-thumb) transparent !custom',
489
715
  // Classic scrollbars keep their own lane instead of covering content at the edge.
490
716
  scrollbarGutter: 'stable',
491
717
  scrollbarWidth: 'thin',
718
+ // The collapsed sidebar has no room for a scrollbar lane beside its 40px icons.
719
+ '@media (min-width: 768px) and (max-width: 1023px)': {
720
+ selectors: {
721
+ '[data-app-shell-rail] &': {
722
+ scrollbarGutter: 'auto !custom',
723
+ scrollbarWidth: 'none !custom',
724
+ },
725
+ },
726
+ },
492
727
  selectors: {
493
728
  // Curtains fade content into the sidebar at whichever end has more to scroll.
494
729
  '&::after, &::before': {
495
- backgroundColor: 'background.primary',
730
+ backgroundColor: 'background.sidebar',
496
731
  content: '"" !custom',
497
732
  display: 'block',
498
733
  height: '24',
@@ -530,23 +765,107 @@ namespace styles {
530
765
  { id: 'tds/web/app-shell/sidebar-body' },
531
766
  )
532
767
 
768
+ // The automatic top margin keeps the footer at the bottom edge when no `SidebarBody` grows.
533
769
  export const sidebarFooter = variants(
534
- { base: { display: 'flex', flexDirection: 'column', flexShrink: '0 !custom', rowGap: '12' } },
770
+ {
771
+ base: {
772
+ display: 'flex',
773
+ flexDirection: 'column',
774
+ flexShrink: '0 !custom',
775
+ marginTop: 'auto !custom',
776
+ rowGap: '8',
777
+ },
778
+ },
535
779
  { id: 'tds/web/app-shell/sidebar-footer' },
536
780
  )
537
781
 
538
782
  export const sidebarHeader = variants(
539
- { base: { flexShrink: '0 !custom', paddingTop: '20' } },
783
+ { base: { flexShrink: '0 !custom', paddingTop: '16' } },
540
784
  { id: 'tds/web/app-shell/sidebar-header' },
541
785
  )
542
786
 
787
+ // An icon-only item of the Platform Tab Bar, which fills its share of the pill.
788
+ export const tab = variants(
789
+ {
790
+ base: {
791
+ alignItems: 'center',
792
+ borderRadius: 'full',
793
+ boxSizing: 'border-box',
794
+ color: 'content.secondary',
795
+ cornerShape: 'round',
796
+ cursor: 'pointer',
797
+ display: 'flex',
798
+ flex: '1 !custom',
799
+ height: '100% !custom',
800
+ justifyContent: 'center',
801
+ minWidth: '0',
802
+ outlineColor: 'transparent !custom',
803
+ outlineOffset: '-2',
804
+ outlineStyle: 'solid !custom',
805
+ outlineWidth: '2',
806
+ position: 'relative',
807
+ textDecoration: 'none !custom',
808
+ transitionDuration: '160',
809
+ transitionProperty: 'background-color, color, outline-color, scale !custom',
810
+ transitionTimingFunction: 'snappy',
811
+ selectors: {
812
+ '& > :first-child': { flexShrink: '0 !custom', fontSize: '24' },
813
+ '& > :not(:first-child)': {
814
+ clipPath: 'inset(50%) !custom',
815
+ height: '1px !custom',
816
+ overflow: 'hidden',
817
+ position: 'absolute',
818
+ whiteSpace: 'nowrap',
819
+ width: '1px !custom',
820
+ },
821
+ '&:active': { scale: 'press', transitionDuration: '100' },
822
+ '&:focus-visible': { outlineColor: 'border.focus' },
823
+ '&:hover': { color: 'content.primary' },
824
+ },
825
+ '@media (prefers-reduced-motion: reduce)': {
826
+ transitionProperty: 'background-color, color, outline-color !custom',
827
+ selectors: { '&:active': { scale: 'none !custom' } },
828
+ },
829
+ },
830
+ defaultVariants: { active: false },
831
+ variants: {
832
+ active: {
833
+ false: {},
834
+ true: { backgroundColor: 'container.regular', color: 'content.primary' },
835
+ },
836
+ },
837
+ },
838
+ { id: 'tds/web/app-shell/tab' },
839
+ )
840
+
841
+ // The 56px pill of the Platform Tab Bar, which takes the width beside the action button.
842
+ export const tabBar = style(
843
+ {
844
+ alignItems: 'center',
845
+ backgroundColor: 'background.secondary',
846
+ borderColor: 'line.secondary',
847
+ borderRadius: 'full',
848
+ borderStyle: 'solid',
849
+ borderWidth: 'regular',
850
+ boxShadow: 'regular',
851
+ boxSizing: 'border-box',
852
+ cornerShape: 'round',
853
+ display: 'flex',
854
+ flex: '1 !custom',
855
+ height: '56',
856
+ minWidth: '0',
857
+ padding: '4',
858
+ },
859
+ { id: 'tds/web/app-shell/tab-bar' },
860
+ )
861
+
543
862
  export const title = variants(
544
863
  {
545
864
  base: {
546
- color: 'foreground',
865
+ color: 'content.primary',
547
866
  margin: '0',
548
867
  minWidth: '0',
549
- typography: 'heading.24',
868
+ typography: 'heading.h2',
550
869
  },
551
870
  },
552
871
  { id: 'tds/web/app-shell/title' },
@@ -556,18 +875,19 @@ namespace styles {
556
875
  {
557
876
  base: {
558
877
  alignItems: 'center',
559
- backgroundColor: 'background.surface',
560
- borderColor: 'grayAlpha.200',
878
+ backgroundColor: 'background.elevated',
879
+ borderColor: 'line.secondary',
561
880
  borderRadius: 'full',
562
881
  borderStyle: 'solid',
563
- borderWidth: '1',
564
- boxShadow: 'raised',
882
+ borderWidth: 'regular',
565
883
  boxSizing: 'border-box',
566
- color: 'foreground',
884
+ color: 'content.primary',
885
+ cornerShape: 'round',
567
886
  cursor: 'pointer',
568
887
  display: 'inline-flex',
569
888
  height: '40',
570
- insetBlockStart: '16',
889
+ // Centers the button on the 56px header bar.
890
+ insetBlockStart: '8',
571
891
  insetInlineEnd: '16',
572
892
  justifyContent: 'center',
573
893
  outlineColor: 'transparent !custom',
@@ -584,8 +904,8 @@ namespace styles {
584
904
  zIndex: 'modal',
585
905
  selectors: {
586
906
  '&:active': { transform: 'scale(0.96) !custom' },
587
- '&:focus-visible': { outlineColor: 'blue.700', outlineOffset: '2' },
588
- '&:hover': { backgroundColor: 'gray.100' },
907
+ '&:focus-visible': { outlineColor: 'border.focus', outlineOffset: '2' },
908
+ '&:hover': { backgroundColor: 'container.regular' },
589
909
  // While open, the button rides out with the drawer and rests 8px outside its left edge,
590
910
  // so the close mark never covers the sidebar. The width matches the drawer's.
591
911
  '&[data-popup-open]': {
@@ -595,6 +915,9 @@ namespace styles {
595
915
  },
596
916
  },
597
917
  '@media (min-width: 1024px)': { display: 'none !custom' },
918
+ '@media (min-width: 768px) and (max-width: 1023px)': {
919
+ selectors: { '[data-app-shell-collapse] &': { display: 'none !custom' } },
920
+ },
598
921
  '@media (prefers-reduced-motion: reduce)': {
599
922
  transitionProperty: 'background-color, outline-color, outline-offset !custom',
600
923
  selectors: { '&:active': { transform: 'none !custom' } },
@@ -611,6 +934,7 @@ namespace styles {
611
934
  justifyContent: 'flex-end',
612
935
  position: 'fixed',
613
936
  zIndex: 'popover',
937
+ selectors: { '&[hidden]': { display: 'none !custom' } },
614
938
  },
615
939
  { id: 'tds/web/app-shell/viewport' },
616
940
  )