@tempoxyz/ds 0.2.0 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (428) hide show
  1. package/README.md +36 -0
  2. package/dist/mobile/components/Avatar.d.ts +1 -1
  3. package/dist/mobile/components/Avatar.d.ts.map +1 -1
  4. package/dist/mobile/components/Avatar.js.map +1 -1
  5. package/dist/mobile/components/Button.d.ts +2 -2
  6. package/dist/mobile/components/Button.d.ts.map +1 -1
  7. package/dist/mobile/components/Button.js +6 -2
  8. package/dist/mobile/components/Button.js.map +1 -1
  9. package/dist/mobile/components/CodeInput.d.ts +1 -1
  10. package/dist/mobile/components/CodeInput.d.ts.map +1 -1
  11. package/dist/mobile/components/CodeInput.js.map +1 -1
  12. package/dist/mobile/components/IconButton.d.ts +2 -2
  13. package/dist/mobile/components/IconButton.d.ts.map +1 -1
  14. package/dist/mobile/components/IconButton.js +6 -2
  15. package/dist/mobile/components/IconButton.js.map +1 -1
  16. package/dist/mobile/components/Skeleton.d.ts.map +1 -1
  17. package/dist/mobile/components/Skeleton.js.map +1 -1
  18. package/dist/mobile/components/Spinner.d.ts +4 -4
  19. package/dist/mobile/components/Spinner.d.ts.map +1 -1
  20. package/dist/mobile/components/Spinner.js +3 -3
  21. package/dist/mobile/components/Spinner.js.map +1 -1
  22. package/dist/mobile/components/TextButton.d.ts.map +1 -1
  23. package/dist/mobile/components/TextButton.js +7 -2
  24. package/dist/mobile/components/TextButton.js.map +1 -1
  25. package/dist/mobile/components/TextInput.d.ts.map +1 -1
  26. package/dist/mobile/components/TextInput.js +1 -1
  27. package/dist/mobile/components/TextInput.js.map +1 -1
  28. package/dist/mobile/components/Toast.d.ts +1 -1
  29. package/dist/mobile/components/Toast.d.ts.map +1 -1
  30. package/dist/mobile/components/Toast.js +1 -1
  31. package/dist/mobile/components/Toast.js.map +1 -1
  32. package/dist/mobile/components/Toggle.d.ts +2 -2
  33. package/dist/mobile/components/Toggle.js +2 -2
  34. package/dist/mobile/components/Toggle.js.map +1 -1
  35. package/dist/mobile/vars.d.ts +24 -0
  36. package/dist/mobile/vars.d.ts.map +1 -1
  37. package/dist/mobile/vars.js +12 -0
  38. package/dist/mobile/vars.js.map +1 -1
  39. package/dist/mobile/zyzz.config.d.ts +96 -0
  40. package/dist/mobile/zyzz.config.d.ts.map +1 -1
  41. package/dist/oxlint/index.d.ts +43 -0
  42. package/dist/oxlint/index.d.ts.map +1 -0
  43. package/dist/oxlint/index.js +68 -0
  44. package/dist/oxlint/index.js.map +1 -0
  45. package/dist/oxlint/internal/Imports.d.ts +22 -0
  46. package/dist/oxlint/internal/Imports.d.ts.map +1 -0
  47. package/dist/oxlint/internal/Imports.js +52 -0
  48. package/dist/oxlint/internal/Imports.js.map +1 -0
  49. package/dist/oxlint/rules/NoCrossSurface.d.ts +16 -0
  50. package/dist/oxlint/rules/NoCrossSurface.d.ts.map +1 -0
  51. package/dist/oxlint/rules/NoCrossSurface.js +55 -0
  52. package/dist/oxlint/rules/NoCrossSurface.js.map +1 -0
  53. package/dist/oxlint/rules/NoInternalImports.d.ts +8 -0
  54. package/dist/oxlint/rules/NoInternalImports.d.ts.map +1 -0
  55. package/dist/oxlint/rules/NoInternalImports.js +22 -0
  56. package/dist/oxlint/rules/NoInternalImports.js.map +1 -0
  57. package/dist/oxlint/rules/NoRawValues.d.ts +9 -0
  58. package/dist/oxlint/rules/NoRawValues.d.ts.map +1 -0
  59. package/dist/oxlint/rules/NoRawValues.js +73 -0
  60. package/dist/oxlint/rules/NoRawValues.js.map +1 -0
  61. package/dist/oxlint/rules/PreferComponent.d.ts +16 -0
  62. package/dist/oxlint/rules/PreferComponent.d.ts.map +1 -0
  63. package/dist/oxlint/rules/PreferComponent.js +92 -0
  64. package/dist/oxlint/rules/PreferComponent.js.map +1 -0
  65. package/dist/oxlint/rules/RequireAccessibleName.d.ts +9 -0
  66. package/dist/oxlint/rules/RequireAccessibleName.d.ts.map +1 -0
  67. package/dist/oxlint/rules/RequireAccessibleName.js +104 -0
  68. package/dist/oxlint/rules/RequireAccessibleName.js.map +1 -0
  69. package/dist/web/components/Accordion.css +1 -1
  70. package/dist/web/components/Accordion.d.ts +7 -7
  71. package/dist/web/components/Accordion.js.map +1 -1
  72. package/dist/web/components/Accordion.js.zyzz.json +1 -1
  73. package/dist/web/components/AlertDialog.css +1 -1
  74. package/dist/web/components/AlertDialog.d.ts.map +1 -1
  75. package/dist/web/components/AlertDialog.js +1 -1
  76. package/dist/web/components/AlertDialog.js.map +1 -1
  77. package/dist/web/components/AlertDialog.js.zyzz.json +1 -1
  78. package/dist/web/components/Amount.d.ts +10 -3
  79. package/dist/web/components/Amount.d.ts.map +1 -1
  80. package/dist/web/components/Amount.js +19 -9
  81. package/dist/web/components/Amount.js.map +1 -1
  82. package/dist/web/components/Amount.js.zyzz.json +1 -1
  83. package/dist/web/components/AmountInput.css +1 -1
  84. package/dist/web/components/AmountInput.d.ts +15 -2
  85. package/dist/web/components/AmountInput.d.ts.map +1 -1
  86. package/dist/web/components/AmountInput.js +43 -12
  87. package/dist/web/components/AmountInput.js.map +1 -1
  88. package/dist/web/components/AmountInput.js.zyzz.json +1 -1
  89. package/dist/web/components/AppShell.css +1 -1
  90. package/dist/web/components/AppShell.d.ts +10 -10
  91. package/dist/web/components/AppShell.js.map +1 -1
  92. package/dist/web/components/AppShell.js.zyzz.json +1 -1
  93. package/dist/web/components/Autocomplete.js.zyzz.json +1 -1
  94. package/dist/web/components/Avatar.css +1 -1
  95. package/dist/web/components/Avatar.d.ts +3 -3
  96. package/dist/web/components/Avatar.js.map +1 -1
  97. package/dist/web/components/Avatar.js.zyzz.json +1 -1
  98. package/dist/web/components/Banner.css +1 -1
  99. package/dist/web/components/Banner.js +3 -3
  100. package/dist/web/components/Banner.js.map +1 -1
  101. package/dist/web/components/Banner.js.zyzz.json +1 -1
  102. package/dist/web/components/Breadcrumbs.css +1 -1
  103. package/dist/web/components/Breadcrumbs.d.ts +4 -4
  104. package/dist/web/components/Breadcrumbs.js.map +1 -1
  105. package/dist/web/components/Breadcrumbs.js.zyzz.json +1 -1
  106. package/dist/web/components/Button.css +1 -1
  107. package/dist/web/components/Button.d.ts +12 -11
  108. package/dist/web/components/Button.d.ts.map +1 -1
  109. package/dist/web/components/Button.js +2 -2
  110. package/dist/web/components/Button.js.map +1 -1
  111. package/dist/web/components/Button.js.zyzz.json +1 -1
  112. package/dist/web/components/Calendar.css +1 -1
  113. package/dist/web/components/Calendar.d.ts.map +1 -1
  114. package/dist/web/components/Calendar.js +7 -5
  115. package/dist/web/components/Calendar.js.map +1 -1
  116. package/dist/web/components/Calendar.js.zyzz.json +1 -1
  117. package/dist/web/components/Callout.css +1 -1
  118. package/dist/web/components/Callout.d.ts +6 -6
  119. package/dist/web/components/Callout.d.ts.map +1 -1
  120. package/dist/web/components/Callout.js +5 -2
  121. package/dist/web/components/Callout.js.map +1 -1
  122. package/dist/web/components/Callout.js.zyzz.json +1 -1
  123. package/dist/web/components/Checkbox.css +1 -1
  124. package/dist/web/components/Checkbox.d.ts +8 -8
  125. package/dist/web/components/Checkbox.js.map +1 -1
  126. package/dist/web/components/Checkbox.js.zyzz.json +1 -1
  127. package/dist/web/components/CheckboxGroup.js.zyzz.json +1 -1
  128. package/dist/web/components/ChoiceGroup.css +1 -1
  129. package/dist/web/components/ChoiceGroup.d.ts +2 -2
  130. package/dist/web/components/ChoiceGroup.d.ts.map +1 -1
  131. package/dist/web/components/ChoiceGroup.js +2 -2
  132. package/dist/web/components/ChoiceGroup.js.map +1 -1
  133. package/dist/web/components/ChoiceGroup.js.zyzz.json +1 -1
  134. package/dist/web/components/Choicebox.css +1 -1
  135. package/dist/web/components/Choicebox.d.ts +4 -4
  136. package/dist/web/components/Choicebox.js +1 -1
  137. package/dist/web/components/Choicebox.js.map +1 -1
  138. package/dist/web/components/Choicebox.js.zyzz.json +1 -1
  139. package/dist/web/components/Combobox.css +1 -1
  140. package/dist/web/components/Combobox.js.map +1 -1
  141. package/dist/web/components/Combobox.js.zyzz.json +1 -1
  142. package/dist/web/components/Container.js.zyzz.json +1 -1
  143. package/dist/web/components/CopyButton.js.zyzz.json +1 -1
  144. package/dist/web/components/DatePicker.css +1 -1
  145. package/dist/web/components/DatePicker.d.ts +20 -20
  146. package/dist/web/components/DatePicker.d.ts.map +1 -1
  147. package/dist/web/components/DatePicker.js +2 -2
  148. package/dist/web/components/DatePicker.js.map +1 -1
  149. package/dist/web/components/DatePicker.js.zyzz.json +1 -1
  150. package/dist/web/components/Dialog.css +1 -1
  151. package/dist/web/components/Dialog.d.ts.map +1 -1
  152. package/dist/web/components/Dialog.js +3 -3
  153. package/dist/web/components/Dialog.js.map +1 -1
  154. package/dist/web/components/Dialog.js.zyzz.json +1 -1
  155. package/dist/web/components/Drawer.css +1 -1
  156. package/dist/web/components/Drawer.js +2 -2
  157. package/dist/web/components/Drawer.js.map +1 -1
  158. package/dist/web/components/Drawer.js.zyzz.json +1 -1
  159. package/dist/web/components/Empty.js.zyzz.json +1 -1
  160. package/dist/web/components/Field.css +1 -1
  161. package/dist/web/components/Field.d.ts +7 -0
  162. package/dist/web/components/Field.d.ts.map +1 -1
  163. package/dist/web/components/Field.js +25 -3
  164. package/dist/web/components/Field.js.map +1 -1
  165. package/dist/web/components/Field.js.zyzz.json +1 -1
  166. package/dist/web/components/Fieldset.js.zyzz.json +1 -1
  167. package/dist/web/components/Frame.css +1 -1
  168. package/dist/web/components/Frame.d.ts +27 -10
  169. package/dist/web/components/Frame.d.ts.map +1 -1
  170. package/dist/web/components/Frame.js +12 -5
  171. package/dist/web/components/Frame.js.map +1 -1
  172. package/dist/web/components/Frame.js.zyzz.json +1 -1
  173. package/dist/web/components/Gauge.css +1 -1
  174. package/dist/web/components/Gauge.js.map +1 -1
  175. package/dist/web/components/Gauge.js.zyzz.json +1 -1
  176. package/dist/web/components/Grid.js.zyzz.json +1 -1
  177. package/dist/web/components/Hex.css +1 -1
  178. package/dist/web/components/Hex.d.ts +5 -5
  179. package/dist/web/components/Hex.js +1 -1
  180. package/dist/web/components/Hex.js.map +1 -1
  181. package/dist/web/components/Hex.js.zyzz.json +1 -1
  182. package/dist/web/components/IconChip.css +1 -1
  183. package/dist/web/components/IconChip.d.ts +1 -1
  184. package/dist/web/components/IconChip.js.map +1 -1
  185. package/dist/web/components/IconChip.js.zyzz.json +1 -1
  186. package/dist/web/components/Identicon.js.zyzz.json +1 -1
  187. package/dist/web/components/Inline.js.zyzz.json +1 -1
  188. package/dist/web/components/Input.css +1 -1
  189. package/dist/web/components/Input.js.map +1 -1
  190. package/dist/web/components/Input.js.zyzz.json +1 -1
  191. package/dist/web/components/Inset.js.zyzz.json +1 -1
  192. package/dist/web/components/Kbd.css +1 -1
  193. package/dist/web/components/Kbd.d.ts +32 -10
  194. package/dist/web/components/Kbd.d.ts.map +1 -1
  195. package/dist/web/components/Kbd.js +55 -13
  196. package/dist/web/components/Kbd.js.map +1 -1
  197. package/dist/web/components/Kbd.js.zyzz.json +1 -1
  198. package/dist/web/components/LoadingDots.css +1 -1
  199. package/dist/web/components/LoadingDots.d.ts +2 -2
  200. package/dist/web/components/LoadingDots.js.map +1 -1
  201. package/dist/web/components/LoadingDots.js.zyzz.json +1 -1
  202. package/dist/web/components/Menu.css +1 -1
  203. package/dist/web/components/Menu.d.ts +11 -11
  204. package/dist/web/components/Menu.d.ts.map +1 -1
  205. package/dist/web/components/Menu.js +2 -2
  206. package/dist/web/components/Menu.js.map +1 -1
  207. package/dist/web/components/Menu.js.zyzz.json +1 -1
  208. package/dist/web/components/NumberField.css +1 -1
  209. package/dist/web/components/NumberField.js +1 -1
  210. package/dist/web/components/NumberField.js.map +1 -1
  211. package/dist/web/components/NumberField.js.zyzz.json +1 -1
  212. package/dist/web/components/OtpField.css +1 -1
  213. package/dist/web/components/OtpField.d.ts.map +1 -1
  214. package/dist/web/components/OtpField.js +1 -1
  215. package/dist/web/components/OtpField.js.map +1 -1
  216. package/dist/web/components/OtpField.js.zyzz.json +1 -1
  217. package/dist/web/components/Pagination.css +1 -1
  218. package/dist/web/components/Pagination.d.ts +13 -13
  219. package/dist/web/components/Pagination.js +1 -1
  220. package/dist/web/components/Pagination.js.map +1 -1
  221. package/dist/web/components/Pagination.js.zyzz.json +1 -1
  222. package/dist/web/components/Popover.css +1 -1
  223. package/dist/web/components/Popover.d.ts.map +1 -1
  224. package/dist/web/components/Popover.js +1 -1
  225. package/dist/web/components/Popover.js.map +1 -1
  226. package/dist/web/components/Popover.js.zyzz.json +1 -1
  227. package/dist/web/components/Progress.css +1 -1
  228. package/dist/web/components/Progress.js.map +1 -1
  229. package/dist/web/components/Progress.js.zyzz.json +1 -1
  230. package/dist/web/components/Qr.js.zyzz.json +1 -1
  231. package/dist/web/components/RadioGroup.css +1 -1
  232. package/dist/web/components/RadioGroup.d.ts +4 -4
  233. package/dist/web/components/RadioGroup.js.map +1 -1
  234. package/dist/web/components/RadioGroup.js.zyzz.json +1 -1
  235. package/dist/web/components/Rows.css +1 -1
  236. package/dist/web/components/Rows.d.ts +7 -7
  237. package/dist/web/components/Rows.d.ts.map +1 -1
  238. package/dist/web/components/Rows.js +3 -3
  239. package/dist/web/components/Rows.js.map +1 -1
  240. package/dist/web/components/Rows.js.zyzz.json +1 -1
  241. package/dist/web/components/SecretValue.css +1 -1
  242. package/dist/web/components/SecretValue.d.ts +4 -4
  243. package/dist/web/components/SecretValue.js +1 -1
  244. package/dist/web/components/SecretValue.js.map +1 -1
  245. package/dist/web/components/SecretValue.js.zyzz.json +1 -1
  246. package/dist/web/components/Select.css +1 -1
  247. package/dist/web/components/Select.js.map +1 -1
  248. package/dist/web/components/Select.js.zyzz.json +1 -1
  249. package/dist/web/components/Separator.js.zyzz.json +1 -1
  250. package/dist/web/components/SidebarMenu.css +1 -1
  251. package/dist/web/components/SidebarMenu.d.ts +11 -11
  252. package/dist/web/components/SidebarMenu.d.ts.map +1 -1
  253. package/dist/web/components/SidebarMenu.js +1 -1
  254. package/dist/web/components/SidebarMenu.js.map +1 -1
  255. package/dist/web/components/SidebarMenu.js.zyzz.json +1 -1
  256. package/dist/web/components/Skeleton.js.zyzz.json +1 -1
  257. package/dist/web/components/Slider.css +1 -1
  258. package/dist/web/components/Slider.d.ts.map +1 -1
  259. package/dist/web/components/Slider.js.map +1 -1
  260. package/dist/web/components/Slider.js.zyzz.json +1 -1
  261. package/dist/web/components/Snippet.css +1 -1
  262. package/dist/web/components/Snippet.d.ts +4 -4
  263. package/dist/web/components/Snippet.js +2 -2
  264. package/dist/web/components/Snippet.js.map +1 -1
  265. package/dist/web/components/Snippet.js.zyzz.json +1 -1
  266. package/dist/web/components/Spinner.js.zyzz.json +1 -1
  267. package/dist/web/components/SplitButton.css +1 -1
  268. package/dist/web/components/SplitButton.d.ts.map +1 -1
  269. package/dist/web/components/SplitButton.js +1 -1
  270. package/dist/web/components/SplitButton.js.map +1 -1
  271. package/dist/web/components/SplitButton.js.zyzz.json +1 -1
  272. package/dist/web/components/Stack.js.zyzz.json +1 -1
  273. package/dist/web/components/Stepper.css +1 -1
  274. package/dist/web/components/Stepper.d.ts +1 -1
  275. package/dist/web/components/Stepper.js.map +1 -1
  276. package/dist/web/components/Stepper.js.zyzz.json +1 -1
  277. package/dist/web/components/Surface.css +1 -1
  278. package/dist/web/components/Surface.d.ts +46 -46
  279. package/dist/web/components/Surface.js +2 -2
  280. package/dist/web/components/Surface.js.map +1 -1
  281. package/dist/web/components/Surface.js.zyzz.json +1 -1
  282. package/dist/web/components/Switch.css +1 -1
  283. package/dist/web/components/Switch.d.ts +14 -14
  284. package/dist/web/components/Switch.d.ts.map +1 -1
  285. package/dist/web/components/Switch.js.map +1 -1
  286. package/dist/web/components/Switch.js.zyzz.json +1 -1
  287. package/dist/web/components/Table.css +1 -1
  288. package/dist/web/components/Table.d.ts +10 -7
  289. package/dist/web/components/Table.d.ts.map +1 -1
  290. package/dist/web/components/Table.js +5 -2
  291. package/dist/web/components/Table.js.map +1 -1
  292. package/dist/web/components/Table.js.zyzz.json +1 -1
  293. package/dist/web/components/Tabs.css +1 -1
  294. package/dist/web/components/Tabs.d.ts +14 -14
  295. package/dist/web/components/Tabs.js +1 -1
  296. package/dist/web/components/Tabs.js.map +1 -1
  297. package/dist/web/components/Tabs.js.zyzz.json +1 -1
  298. package/dist/web/components/Tag.css +1 -1
  299. package/dist/web/components/Tag.d.ts +10 -10
  300. package/dist/web/components/Tag.js +1 -1
  301. package/dist/web/components/Tag.js.map +1 -1
  302. package/dist/web/components/Tag.js.zyzz.json +1 -1
  303. package/dist/web/components/Textarea.css +1 -1
  304. package/dist/web/components/Textarea.d.ts +15 -15
  305. package/dist/web/components/Textarea.js.map +1 -1
  306. package/dist/web/components/Textarea.js.zyzz.json +1 -1
  307. package/dist/web/components/Toast.css +1 -1
  308. package/dist/web/components/Toast.d.ts.map +1 -1
  309. package/dist/web/components/Toast.js +7 -3
  310. package/dist/web/components/Toast.js.map +1 -1
  311. package/dist/web/components/Toast.js.zyzz.json +1 -1
  312. package/dist/web/components/Token.js.zyzz.json +1 -1
  313. package/dist/web/components/Tooltip.css +1 -1
  314. package/dist/web/components/Tooltip.d.ts.map +1 -1
  315. package/dist/web/components/Tooltip.js +1 -1
  316. package/dist/web/components/Tooltip.js.map +1 -1
  317. package/dist/web/components/Tooltip.js.zyzz.json +1 -1
  318. package/dist/web/components/internal/Field.css +1 -1
  319. package/dist/web/components/internal/Field.d.ts +7 -7
  320. package/dist/web/components/internal/Field.js.map +1 -1
  321. package/dist/web/components/internal/Field.js.zyzz.json +1 -1
  322. package/dist/web/components/internal/InputGroup.css +1 -1
  323. package/dist/web/components/internal/InputGroup.d.ts +12 -12
  324. package/dist/web/components/internal/InputGroup.d.ts.map +1 -1
  325. package/dist/web/components/internal/InputGroup.js +1 -1
  326. package/dist/web/components/internal/InputGroup.js.map +1 -1
  327. package/dist/web/components/internal/InputGroup.js.zyzz.json +1 -1
  328. package/dist/web/components/internal/Listbox.css +1 -1
  329. package/dist/web/components/internal/Listbox.d.ts +9 -9
  330. package/dist/web/components/internal/Listbox.d.ts.map +1 -1
  331. package/dist/web/components/internal/Listbox.js +1 -1
  332. package/dist/web/components/internal/Listbox.js.map +1 -1
  333. package/dist/web/components/internal/Listbox.js.zyzz.json +1 -1
  334. package/dist/web/icons/BadgeX.d.ts.map +1 -1
  335. package/dist/web/icons/BadgeX.js.map +1 -1
  336. package/dist/web/icons/InfinityIcon.d.ts.map +1 -1
  337. package/dist/web/icons/InfinityIcon.js.map +1 -1
  338. package/dist/web/icons/LightMode.d.ts.map +1 -1
  339. package/dist/web/icons/LightMode.js.map +1 -1
  340. package/dist/web/icons/OctagonAlert.d.ts.map +1 -1
  341. package/dist/web/icons/OctagonAlert.js.map +1 -1
  342. package/dist/web/icons/Unlink.d.ts.map +1 -1
  343. package/dist/web/icons/Unlink.js.map +1 -1
  344. package/dist/web/index.js.zyzz.json +1 -1
  345. package/dist/web/vars.d.ts +91 -0
  346. package/dist/web/vars.d.ts.map +1 -1
  347. package/dist/web/vars.js.map +1 -1
  348. package/dist/web/vars.js.zyzz.json +1 -1
  349. package/dist/web/zyzz.config.d.ts +455 -0
  350. package/dist/web/zyzz.config.d.ts.map +1 -1
  351. package/dist/web/zyzz.config.js.zyzz.json +1 -1
  352. package/package.json +7 -1
  353. package/src/mobile/components/Avatar.tsx +2 -2
  354. package/src/mobile/components/Button.tsx +6 -3
  355. package/src/mobile/components/CodeInput.tsx +2 -2
  356. package/src/mobile/components/IconButton.tsx +6 -3
  357. package/src/mobile/components/Skeleton.tsx +1 -1
  358. package/src/mobile/components/Spinner.tsx +4 -5
  359. package/src/mobile/components/TextButton.tsx +6 -2
  360. package/src/mobile/components/TextInput.tsx +1 -1
  361. package/src/mobile/components/Toast.tsx +1 -2
  362. package/src/mobile/components/Toggle.tsx +2 -2
  363. package/src/mobile/vars.ts +14 -0
  364. package/src/oxlint/index.ts +89 -0
  365. package/src/oxlint/internal/Imports.ts +68 -0
  366. package/src/oxlint/rules/NoCrossSurface.ts +71 -0
  367. package/src/oxlint/rules/NoInternalImports.ts +25 -0
  368. package/src/oxlint/rules/NoRawValues.ts +76 -0
  369. package/src/oxlint/rules/PreferComponent.ts +113 -0
  370. package/src/oxlint/rules/RequireAccessibleName.ts +132 -0
  371. package/src/web/components/Accordion.tsx +8 -8
  372. package/src/web/components/AlertDialog.tsx +11 -8
  373. package/src/web/components/Amount.tsx +29 -9
  374. package/src/web/components/AmountInput.tsx +60 -24
  375. package/src/web/components/AppShell.tsx +23 -23
  376. package/src/web/components/Avatar.tsx +3 -3
  377. package/src/web/components/Banner.tsx +16 -16
  378. package/src/web/components/Breadcrumbs.tsx +4 -4
  379. package/src/web/components/Button.tsx +15 -12
  380. package/src/web/components/Calendar.tsx +10 -11
  381. package/src/web/components/Callout.tsx +19 -16
  382. package/src/web/components/Checkbox.tsx +9 -9
  383. package/src/web/components/ChoiceGroup.tsx +13 -14
  384. package/src/web/components/Choicebox.tsx +21 -21
  385. package/src/web/components/Combobox.tsx +3 -3
  386. package/src/web/components/DatePicker.tsx +25 -25
  387. package/src/web/components/Dialog.tsx +28 -19
  388. package/src/web/components/Drawer.tsx +8 -8
  389. package/src/web/components/Field.tsx +46 -11
  390. package/src/web/components/Frame.tsx +30 -9
  391. package/src/web/components/Gauge.tsx +1 -1
  392. package/src/web/components/Hex.tsx +5 -5
  393. package/src/web/components/IconChip.tsx +1 -1
  394. package/src/web/components/Input.tsx +11 -11
  395. package/src/web/components/Kbd.tsx +77 -21
  396. package/src/web/components/LoadingDots.tsx +4 -4
  397. package/src/web/components/Menu.tsx +17 -14
  398. package/src/web/components/NumberField.tsx +17 -17
  399. package/src/web/components/OtpField.tsx +14 -6
  400. package/src/web/components/Pagination.tsx +13 -13
  401. package/src/web/components/Popover.tsx +14 -11
  402. package/src/web/components/Progress.tsx +2 -2
  403. package/src/web/components/RadioGroup.tsx +11 -11
  404. package/src/web/components/Rows.tsx +8 -9
  405. package/src/web/components/SecretValue.tsx +4 -4
  406. package/src/web/components/Select.tsx +2 -2
  407. package/src/web/components/SidebarMenu.tsx +14 -15
  408. package/src/web/components/Slider.tsx +6 -7
  409. package/src/web/components/Snippet.tsx +9 -9
  410. package/src/web/components/SplitButton.tsx +17 -5
  411. package/src/web/components/Stepper.tsx +1 -1
  412. package/src/web/components/Surface.tsx +47 -47
  413. package/src/web/components/Switch.tsx +21 -23
  414. package/src/web/components/Table.tsx +11 -7
  415. package/src/web/components/Tabs.tsx +14 -14
  416. package/src/web/components/Tag.tsx +12 -12
  417. package/src/web/components/Textarea.tsx +15 -15
  418. package/src/web/components/Toast.tsx +28 -21
  419. package/src/web/components/Tooltip.tsx +12 -9
  420. package/src/web/components/internal/Field.ts +20 -20
  421. package/src/web/components/internal/InputGroup.ts +13 -14
  422. package/src/web/components/internal/Listbox.ts +19 -16
  423. package/src/web/icons/BadgeX.tsx +1 -1
  424. package/src/web/icons/InfinityIcon.tsx +1 -1
  425. package/src/web/icons/LightMode.tsx +1 -1
  426. package/src/web/icons/OctagonAlert.tsx +1 -1
  427. package/src/web/icons/Unlink.tsx +1 -1
  428. package/src/web/vars.ts +81 -2
@@ -1,24 +1,60 @@
1
- import type { ComponentPropsWithRef } from 'react'
1
+ import { type ComponentPropsWithRef, useSyncExternalStore } from 'react'
2
2
  import type * as zyzz from 'zyzz'
3
3
  import { style, variants } from '../zyzz.config.js'
4
4
 
5
- const modifiers = [
6
- ['ctrl', '⌃', 'Control'],
7
- ['alt', '⌥', 'Option'],
8
- ['shift', '⇧', 'Shift'],
9
- ['meta', '⌘', 'Command'],
10
- ] as const
5
+ // Each platform lists its modifiers in its own conventional order, as label and spoken name.
6
+ const modifiers = {
7
+ apple: [
8
+ ['ctrl', '⌃', 'Control'],
9
+ ['alt', '⌥', 'Option'],
10
+ ['shift', '⇧', 'Shift'],
11
+ ['meta', '⌘', 'Command'],
12
+ ],
13
+ linux: [
14
+ ['meta', 'Super', 'Super'],
15
+ ['ctrl', 'Ctrl', 'Control'],
16
+ ['alt', 'Alt', 'Alt'],
17
+ ['shift', 'Shift', 'Shift'],
18
+ ],
19
+ windows: [
20
+ ['meta', 'Win', 'Windows'],
21
+ ['ctrl', 'Ctrl', 'Control'],
22
+ ['alt', 'Alt', 'Alt'],
23
+ ['shift', 'Shift', 'Shift'],
24
+ ],
25
+ } as const
26
+
27
+ // The server snapshot keeps server and hydration markup identical. React then re-renders with the
28
+ // browser's platform.
29
+ function usePlatform(): keyof typeof modifiers {
30
+ return useSyncExternalStore(
31
+ () => () => {},
32
+ () => {
33
+ if (/Macintosh|iPad|iPhone|iPod/.test(navigator.userAgent)) return 'apple'
34
+ return navigator.userAgent.includes('Windows') ? 'windows' : 'linux'
35
+ },
36
+ () => 'apple',
37
+ )
38
+ }
11
39
 
12
40
  /**
13
- * Shows a key or shortcut in a native `kbd` element. Each modifier prop adds its glyph before the
14
- * children, always in the order Control, Option, Shift, Command. Glyphs are hidden from assistive
15
- * tech, which reads the visually hidden name instead, so `<Kbd meta>K</Kbd>` reads as `Command K`.
41
+ * Shows a key or shortcut in a native `kbd` element. Each modifier prop adds a label before the
42
+ * children in the platform's conventional order: glyphs ordered Control, Option, Shift, Command on
43
+ * Apple platforms, and names ordered Win (Super on Linux), Ctrl, Alt, Shift elsewhere. Labels are
44
+ * hidden from assistive tech, which reads the visually hidden name instead, so `<Kbd mod>K</Kbd>`
45
+ * reads as `Command K` on a Mac and `Control K` on Windows.
46
+ *
47
+ * Without `platform`, the server and hydration render Apple glyphs, then the client switches to the
48
+ * browser's platform. If the request identifies the platform, such as in the `Sec-CH-UA-Platform`
49
+ * header, map it to `apple`, `linux`, or `windows` and pass it as `platform`, so the markup never
50
+ * changes. Any other value falls back to the browser's platform.
16
51
  *
17
52
  * - Pass the main key as children and modifiers as props, rather than typing glyphs into children.
53
+ * - Use `mod` for shortcuts that take Command on Apple platforms and Ctrl elsewhere.
18
54
  * - Single-character shortcuts need a way to turn them off or remap them.
19
55
  *
20
56
  * @example
21
- * <Kbd meta shift>
57
+ * <Kbd mod shift>
22
58
  * P
23
59
  * </Kbd>
24
60
  *
@@ -27,16 +63,27 @@ const modifiers = [
27
63
  * @see {@link https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html | WCAG 2.2 Info and Relationships}
28
64
  */
29
65
  export function Kbd(props: Kbd.Props) {
30
- const { alt, children, className, ctrl, meta, shift, size, vars, ...attributes } = props
31
- const active = { alt, ctrl, meta, shift }
66
+ const detected = usePlatform()
67
+ const { alt, children, className, ctrl, meta, mod, platform, shift, size, vars, ...attributes } =
68
+ props
69
+ // Untyped data, such as a raw `Sec-CH-UA-Platform` header, can hold any value, including inherited
70
+ // keys such as `toString`. Every value outside `modifiers` falls back to detection.
71
+ const resolved =
72
+ platform !== undefined && Object.hasOwn(modifiers, platform) ? platform : detected
73
+ const active = {
74
+ alt,
75
+ ctrl: ctrl || (mod && resolved !== 'apple'),
76
+ meta: meta || (mod && resolved === 'apple'),
77
+ shift,
78
+ }
32
79
 
33
80
  return (
34
81
  <kbd {...attributes} {...styles.kbd({ className, size, style: props.style, vars })}>
35
- {modifiers.map(
36
- ([key, glyph, name]) =>
82
+ {modifiers[resolved].map(
83
+ ([key, label, name]) =>
37
84
  active[key] && (
38
85
  <span key={key}>
39
- <span aria-hidden="true">{glyph}</span>
86
+ <span aria-hidden="true">{label}</span>
40
87
  <span {...styles.hidden()}>{name} </span>
41
88
  </span>
42
89
  ),
@@ -49,13 +96,22 @@ export function Kbd(props: Kbd.Props) {
49
96
  export namespace Kbd {
50
97
  export type Props = ComponentPropsWithRef<'kbd'> &
51
98
  zyzz.Props.Variants<typeof styles.kbd> & {
52
- /** Adds `⌥`, read as `Option`. */
99
+ /** Adds `⌥` (Option) on Apple platforms and Alt elsewhere. */
53
100
  alt?: boolean | undefined
54
- /** Adds `⌃`, read as `Control`. */
101
+ /** Adds `⌃` (Control) on Apple platforms and Ctrl elsewhere. */
55
102
  ctrl?: boolean | undefined
56
- /** Adds `⌘`, read as `Command`. */
103
+ /** Adds `⌘` (Command) on Apple platforms, Win on Windows, and Super on Linux. */
57
104
  meta?: boolean | undefined
58
- /** Adds `⇧`, read as `Shift`. */
105
+ /** Adds the primary shortcut modifier: `⌘` (Command) on Apple platforms and Ctrl elsewhere. */
106
+ mod?: boolean | undefined
107
+ /**
108
+ * Selects the modifier labels, names and order. Defaults to the browser's platform, read after
109
+ * hydration, and to `apple` on the server. Browsers on other platforms, such as Android or
110
+ * ChromeOS, use the `linux` names. Any other value, such as a raw `Sec-CH-UA-Platform` header,
111
+ * falls back to the default.
112
+ */
113
+ platform?: keyof typeof modifiers | undefined
114
+ /** Adds `⇧` (Shift) on Apple platforms and Shift elsewhere. */
59
115
  shift?: boolean | undefined
60
116
  }
61
117
  }
@@ -95,7 +151,7 @@ namespace styles {
95
151
  medium: {
96
152
  height: '24',
97
153
  minWidth: '24',
98
- paddingInline: '6px !custom',
154
+ paddingInline: '6',
99
155
  typography: 'label.12',
100
156
  },
101
157
  small: { height: '20', minWidth: '20', paddingInline: '4', typography: 'label.12' },
@@ -60,8 +60,8 @@ namespace styles {
60
60
  selectors: {
61
61
  '&:nth-child(2)': { animationDelay: '160ms !custom' },
62
62
  '&:nth-child(3)': { animationDelay: '320ms !custom' },
63
- '[data-size="large"] &': { height: '6px !custom', width: '6px !custom' },
64
- '[data-size="small"] &': { height: '3px !custom', width: '3px !custom' },
63
+ '[data-size="large"] &': { height: '6', width: '6' },
64
+ '[data-size="small"] &': { height: '2', width: '2' },
65
65
  },
66
66
  '@media (prefers-reduced-motion: reduce)': {
67
67
  animation: 'none !custom',
@@ -77,9 +77,9 @@ namespace styles {
77
77
  defaultVariants: { size: 'medium' },
78
78
  variants: {
79
79
  size: {
80
- large: { columnGap: '6px !custom' },
80
+ large: { columnGap: '6' },
81
81
  medium: { columnGap: '4' },
82
- small: { columnGap: '3px !custom' },
82
+ small: { columnGap: '2' },
83
83
  },
84
84
  },
85
85
  },
@@ -306,7 +306,7 @@ export namespace styles {
306
306
 
307
307
  export const groupLabel = style(
308
308
  {
309
- color: 'gray.700',
309
+ color: 'gray.900',
310
310
  paddingBlock: '8',
311
311
  paddingInline: '12',
312
312
  typography: 'label.12',
@@ -319,7 +319,7 @@ export namespace styles {
319
319
  base: {
320
320
  alignItems: 'center',
321
321
  // Concentric with the popup: its 16px radius minus its 6px padding.
322
- borderRadius: '10px !custom',
322
+ borderRadius: '10',
323
323
  boxSizing: 'border-box',
324
324
  color: 'foreground',
325
325
  columnGap: '8',
@@ -329,13 +329,13 @@ export namespace styles {
329
329
  outline: 'none !custom',
330
330
  paddingInline: '12',
331
331
  textDecoration: 'none !custom',
332
- transitionDuration: '120ms',
332
+ transitionDuration: '120',
333
333
  transitionProperty: 'background-color, color, opacity',
334
334
  transitionTimingFunction: 'snappy',
335
335
  typography: 'label.14.strong',
336
336
  userSelect: 'none',
337
337
  selectors: {
338
- '&[data-disabled]': { opacity: '0.4 !custom', pointerEvents: 'none' },
338
+ '&[data-disabled]': { opacity: 'disabled', pointerEvents: 'none' },
339
339
  '&[data-highlighted]': { backgroundColor: 'grayAlpha.100' },
340
340
  '&[data-popup-open]': { backgroundColor: 'grayAlpha.100' },
341
341
  },
@@ -355,7 +355,7 @@ export namespace styles {
355
355
  export const popup = variants(
356
356
  {
357
357
  base: {
358
- backgroundColor: 'light-dark(#fff, #1f1e1e) !custom',
358
+ backgroundColor: 'background.raised',
359
359
  borderRadius: '16',
360
360
  boxShadow: 'popover',
361
361
  boxSizing: 'border-box',
@@ -364,24 +364,27 @@ export namespace styles {
364
364
  minWidth: '224',
365
365
  outline: 'none !custom',
366
366
  overflowY: 'auto',
367
- padding: '6px !custom',
367
+ padding: '6',
368
368
  transformOrigin: 'var(--transform-origin) !custom',
369
- transitionDuration: '200ms',
370
- transitionProperty: 'opacity, transform',
369
+ transitionDuration: '200',
370
+ transitionProperty: 'opacity, scale',
371
371
  transitionTimingFunction: 'snappy',
372
372
  typography: 'copy.14',
373
373
  selectors: {
374
374
  '&[data-ending-style]': {
375
375
  opacity: '0 !custom',
376
- transform: 'scale(0.96) !custom',
377
- transitionDuration: '140ms',
376
+ scale: 'enter',
377
+ transitionDuration: '140',
378
+ },
379
+ '&[data-starting-style]': {
380
+ opacity: '0 !custom',
381
+ scale: 'enter',
378
382
  },
379
- '&[data-starting-style]': { opacity: '0 !custom', transform: 'scale(0.96) !custom' },
380
383
  },
381
384
  '@media (prefers-reduced-motion: reduce)': {
382
385
  transitionProperty: 'opacity',
383
386
  selectors: {
384
- '&[data-ending-style], &[data-starting-style]': { transform: 'none !custom' },
387
+ '&[data-ending-style], &[data-starting-style]': { scale: 'none !custom' },
385
388
  },
386
389
  },
387
390
  },
@@ -410,7 +413,7 @@ export namespace styles {
410
413
  { id: 'tds/web/menu/popup' },
411
414
  )
412
415
 
413
- export const positioner = style({ zIndex: '50 !custom' }, { id: 'tds/web/menu/positioner' })
416
+ export const positioner = style({ zIndex: 'popover' }, { id: 'tds/web/menu/positioner' })
414
417
 
415
418
  export const separator = style(
416
419
  {
@@ -424,7 +427,7 @@ export namespace styles {
424
427
 
425
428
  export const shortcut = style(
426
429
  {
427
- color: 'gray.700',
430
+ color: 'gray.900',
428
431
  marginInlineStart: 'auto !custom',
429
432
  paddingInlineStart: '16',
430
433
  typography: 'label.13',
@@ -206,7 +206,7 @@ namespace styles {
206
206
  padding: '0',
207
207
  textAlign: 'center',
208
208
  selectors: {
209
- '&::placeholder': { color: 'gray.700' },
209
+ '&::placeholder': { color: 'gray.900' },
210
210
  '[data-typing] > &': { color: 'inherit !custom' },
211
211
  },
212
212
  },
@@ -248,37 +248,37 @@ namespace styles {
248
248
  height: '36',
249
249
  justifyContent: 'center',
250
250
  outlineColor: 'transparent !custom',
251
- outlineOffset: '2px !custom',
251
+ outlineOffset: '2',
252
252
  outlineStyle: 'solid !custom',
253
- outlineWidth: '2px !custom',
253
+ outlineWidth: '2',
254
254
  padding: '0',
255
- transitionDuration: '160ms !custom',
256
- transitionProperty: 'background-color, opacity, outline-color, transform !custom',
255
+ transitionDuration: '160',
256
+ transitionProperty: 'background-color, opacity, outline-color, scale !custom',
257
257
  transitionTimingFunction: 'snappy',
258
258
  width: '36',
259
259
  selectors: {
260
260
  '&:active:not(:disabled)': {
261
261
  backgroundColor: 'grayAlpha.400',
262
- transform: 'scale(0.94) !custom',
263
- transitionDuration: '100ms !custom',
262
+ scale: 'press',
263
+ transitionDuration: '100',
264
264
  },
265
- '&:disabled': { cursor: 'default', opacity: '0.4 !custom' },
265
+ '&:disabled': { cursor: 'default', opacity: 'disabled' },
266
266
  '&:focus-visible': { outlineColor: 'blue.700' },
267
267
  '&:hover:not(:disabled)': { backgroundColor: 'grayAlpha.300' },
268
- '[data-size="large"] > &:first-child': { marginInlineStart: '-10px !custom' },
269
- '[data-size="large"] > &:last-child': { marginInlineEnd: '-10px !custom' },
268
+ '[data-size="large"] > &:first-child': { marginInlineStart: '-10' },
269
+ '[data-size="large"] > &:last-child': { marginInlineEnd: '-10' },
270
270
  '[data-size="large"][data-variant="outlined"] > &:first-child': {
271
- marginInlineStart: '-14px !custom',
271
+ marginInlineStart: '-14',
272
272
  },
273
273
  '[data-size="large"][data-variant="outlined"] > &:last-child': {
274
- marginInlineEnd: '-14px !custom',
274
+ marginInlineEnd: '-14',
275
275
  },
276
276
  '[data-size="medium"] > &': { fontSize: '14', height: '28', width: '28' },
277
- '[data-size="medium"] > &:first-child': { marginInlineStart: '-10px !custom' },
278
- '[data-size="medium"] > &:last-child': { marginInlineEnd: '-10px !custom' },
277
+ '[data-size="medium"] > &:first-child': { marginInlineStart: '-10' },
278
+ '[data-size="medium"] > &:last-child': { marginInlineEnd: '-10' },
279
279
  '[data-size="small"] > &': { fontSize: '12', height: '24', width: '24' },
280
- '[data-size="small"] > &:first-child': { marginInlineStart: '-8px !custom' },
281
- '[data-size="small"] > &:last-child': { marginInlineEnd: '-8px !custom' },
280
+ '[data-size="small"] > &:first-child': { marginInlineStart: '-8' },
281
+ '[data-size="small"] > &:last-child': { marginInlineEnd: '-8' },
282
282
  '[data-variant="filled"]:is([data-size="large"], [data-size="medium"]) > &': {
283
283
  borderRadius: '6',
284
284
  },
@@ -290,7 +290,7 @@ namespace styles {
290
290
  },
291
291
  '@media (prefers-reduced-motion: reduce)': {
292
292
  transitionProperty: 'background-color, opacity, outline-color !custom',
293
- selectors: { '&:active:not(:disabled)': { transform: 'none !custom' } },
293
+ selectors: { '&:active:not(:disabled)': { scale: 'none !custom' } },
294
294
  },
295
295
  },
296
296
  { id: 'tds/web/number-field/stepper' },
@@ -138,25 +138,27 @@ namespace styles {
138
138
  boxSizing: 'border-box',
139
139
  caretColor: 'blue.700',
140
140
  color: 'foreground',
141
- // Every state keeps this stroke width. Focus differs by color and its offset ring.
141
+ // Every state keeps this stroke width. Invalid and success rings sit inside the slot, so
142
+ // adjacent rings keep the full gap between slots. Focus differs by color and its offset ring.
142
143
  outlineColor: 'transparent !custom',
143
- outlineOffset: '0px !custom',
144
+ outlineOffset: '0',
144
145
  outlineStyle: 'solid !custom',
145
- outlineWidth: '2px !custom',
146
+ outlineWidth: '2',
146
147
  padding: '0',
147
148
  textAlign: 'center',
148
- transitionDuration: '200ms',
149
+ transitionDuration: '200',
149
150
  transitionProperty: 'background-color, color, opacity, outline-color, outline-offset, scale',
150
151
  transitionTimingFunction: 'overshoot',
151
152
  selectors: {
152
- '&:disabled': { opacity: '0.4 !custom' },
153
+ '&:disabled': { opacity: 'disabled' },
153
154
  '&:focus': { scale: '1.06 !custom' },
154
- '&:focus-visible': { outlineColor: 'blue.700', outlineOffset: '2px !custom' },
155
+ '&:focus-visible': { outlineColor: 'blue.700', outlineOffset: '2' },
155
156
  '&:hover:not(:disabled)': { backgroundColor: 'grayAlpha.200' },
156
157
  '&[data-invalid], [data-invalid] &': {
157
158
  caretColor: 'red.900',
158
159
  color: 'red.900',
159
160
  outlineColor: 'red.800',
161
+ outlineOffset: '-2px !custom',
160
162
  },
161
163
  '[data-success] &': {
162
164
  animation: `${pop} 320ms ${vars.ease.overshoot} both !custom`,
@@ -165,10 +167,16 @@ namespace styles {
165
167
  caretColor: 'green.900',
166
168
  color: 'green.900',
167
169
  outlineColor: 'green.700',
170
+ outlineOffset: '-2px !custom',
168
171
  },
169
172
  '[data-success] &:hover:not(:disabled)': {
170
173
  backgroundColor: 'light-dark(rgb(19 169 99 / 0.18), rgb(19 169 99 / 0.24)) !custom',
171
174
  },
175
+ // Keyboard focus keeps its offset ring on an invalid or successful slot.
176
+ '&[data-invalid]:focus-visible, [data-invalid] &:focus-visible, [data-success] &:focus-visible':
177
+ {
178
+ outlineOffset: '2px !custom',
179
+ },
172
180
  // Delays follow the `animation` shorthand above, which would otherwise reset them.
173
181
  '[data-success] &:nth-child(2)': { animationDelay: '40ms !custom' },
174
182
  '[data-success] &:nth-child(3)': { animationDelay: '80ms !custom' },
@@ -202,21 +202,21 @@ namespace styles {
202
202
  justifyContent: 'center',
203
203
  minWidth: '40',
204
204
  outlineColor: 'transparent !custom',
205
- outlineOffset: '0px !custom',
205
+ outlineOffset: '0',
206
206
  outlineStyle: 'solid !custom',
207
- outlineWidth: '2px !custom',
207
+ outlineWidth: '2',
208
208
  paddingInline: '12',
209
209
  textDecoration: 'none !custom',
210
- transitionDuration: '160ms',
210
+ transitionDuration: '160',
211
211
  transitionProperty: 'background-color, color, outline-color, outline-offset, transform',
212
212
  transitionTimingFunction: 'snappy',
213
213
  // Weight overrides the typography token, so it stays after it.
214
214
  typography: 'button.14',
215
215
  selectors: {
216
216
  '&:active:is(a)': { transform: 'scale(0.96) !custom' },
217
- '&:focus-visible': { outlineColor: 'blue.700', outlineOffset: '2px !custom' },
217
+ '&:focus-visible': { outlineColor: 'blue.700', outlineOffset: '2' },
218
218
  '&:hover:is(a)': { backgroundColor: 'grayAlpha.100' },
219
- '&[data-ellipsis]': { color: 'gray.700', cursor: 'default' },
219
+ '&[data-ellipsis]': { color: 'gray.900', cursor: 'default' },
220
220
  },
221
221
  '@media (prefers-reduced-motion: reduce)': {
222
222
  transitionProperty: 'background-color, color, outline-color',
@@ -285,25 +285,25 @@ namespace styles {
285
285
  display: 'inline-flex',
286
286
  height: '40',
287
287
  outlineColor: 'transparent !custom',
288
- outlineOffset: '0px !custom',
288
+ outlineOffset: '0',
289
289
  outlineStyle: 'solid !custom',
290
- outlineWidth: '2px !custom',
290
+ outlineWidth: '2',
291
291
  paddingInline: '16',
292
292
  textDecoration: 'none !custom',
293
- transitionDuration: '160ms',
294
- transitionProperty: 'background-color, opacity, outline-color, outline-offset, transform',
293
+ transitionDuration: '160',
294
+ transitionProperty: 'background-color, opacity, outline-color, outline-offset, scale',
295
295
  transitionTimingFunction: 'snappy',
296
296
  // Weight overrides the typography token, so it stays after it.
297
297
  typography: 'button.14',
298
298
  selectors: {
299
- '&:active:not([aria-disabled])': { transform: 'scale(0.98) !custom' },
300
- '&:focus-visible': { outlineColor: 'blue.700', outlineOffset: '2px !custom' },
299
+ '&:active:not([aria-disabled])': { scale: 'press' },
300
+ '&:focus-visible': { outlineColor: 'blue.700', outlineOffset: '2' },
301
301
  '&:hover:not([aria-disabled])': { backgroundColor: 'grayAlpha.200' },
302
- '&[aria-disabled]': { cursor: 'default', opacity: '0.4 !custom' },
302
+ '&[aria-disabled]': { cursor: 'default', opacity: 'disabled' },
303
303
  },
304
304
  '@media (prefers-reduced-motion: reduce)': {
305
305
  transitionProperty: 'background-color, opacity, outline-color',
306
- selectors: { '&:active:not([aria-disabled])': { transform: 'none !custom' } },
306
+ selectors: { '&:active:not([aria-disabled])': { scale: 'none !custom' } },
307
307
  },
308
308
  },
309
309
  },
@@ -154,12 +154,12 @@ export namespace Popover {
154
154
  namespace styles {
155
155
  export const arrow = style(
156
156
  {
157
- color: 'light-dark(#fff, #1f1e1e) !custom',
157
+ color: 'background.raised',
158
158
  display: 'flex',
159
159
  selectors: {
160
160
  '&[data-side="bottom"]': { top: '-10px !custom' },
161
- '&[data-side="left"]': { right: '-15px !custom', rotate: '90deg !custom' },
162
- '&[data-side="right"]': { left: '-15px !custom', rotate: '-90deg !custom' },
161
+ '&[data-side="left"]': { right: '-14px !custom', rotate: '90deg !custom' },
162
+ '&[data-side="right"]': { left: '-14px !custom', rotate: '-90deg !custom' },
163
163
  '&[data-side="top"]': { bottom: '-10px !custom', rotate: '180deg !custom' },
164
164
  },
165
165
  },
@@ -173,7 +173,7 @@ namespace styles {
173
173
 
174
174
  export const popup = style(
175
175
  {
176
- backgroundColor: 'light-dark(#fff, #1f1e1e) !custom',
176
+ backgroundColor: 'background.raised',
177
177
  borderRadius: '16',
178
178
  boxShadow: 'popover',
179
179
  boxSizing: 'border-box',
@@ -182,30 +182,33 @@ namespace styles {
182
182
  outline: 'none !custom',
183
183
  padding: '24',
184
184
  transformOrigin: 'var(--transform-origin) !custom',
185
- transitionDuration: '200ms',
186
- transitionProperty: 'opacity, transform',
185
+ transitionDuration: '200',
186
+ transitionProperty: 'opacity, scale',
187
187
  transitionTimingFunction: 'snappy',
188
188
  typography: 'copy.14',
189
189
  width: 'max-content !custom',
190
190
  selectors: {
191
191
  '&[data-ending-style]': {
192
192
  opacity: '0 !custom',
193
- transform: 'scale(0.96) !custom',
194
- transitionDuration: '140ms',
193
+ scale: 'enter',
194
+ transitionDuration: '140',
195
+ },
196
+ '&[data-starting-style]': {
197
+ opacity: '0 !custom',
198
+ scale: 'enter',
195
199
  },
196
- '&[data-starting-style]': { opacity: '0 !custom', transform: 'scale(0.96) !custom' },
197
200
  },
198
201
  '@media (prefers-reduced-motion: reduce)': {
199
202
  transitionProperty: 'opacity',
200
203
  selectors: {
201
- '&[data-ending-style], &[data-starting-style]': { transform: 'none !custom' },
204
+ '&[data-ending-style], &[data-starting-style]': { scale: 'none !custom' },
202
205
  },
203
206
  },
204
207
  },
205
208
  { id: 'tds/web/popover/popup' },
206
209
  )
207
210
 
208
- export const positioner = style({ zIndex: '50 !custom' }, { id: 'tds/web/popover/positioner' })
211
+ export const positioner = style({ zIndex: 'popover' }, { id: 'tds/web/popover/positioner' })
209
212
 
210
213
  export const title = style(
211
214
  {
@@ -137,7 +137,7 @@ namespace styles {
137
137
  borderRadius: 'full',
138
138
  height: '100% !custom',
139
139
  // Base UI sets the width inline, and scaling it would distort the rounded ends.
140
- transitionDuration: '240ms',
140
+ transitionDuration: '240',
141
141
  transitionProperty: 'width',
142
142
  transitionTimingFunction: 'spring',
143
143
 
@@ -153,7 +153,7 @@ namespace styles {
153
153
  selectors: {
154
154
  '&[data-indeterminate]': {
155
155
  animation: 'none !custom',
156
- opacity: '0.4 !custom',
156
+ opacity: 'disabled',
157
157
  width: '100% !custom',
158
158
  },
159
159
  },
@@ -105,13 +105,13 @@ namespace styles {
105
105
  medium: {
106
106
  selectors: {
107
107
  '& [role="radio"]': { height: '20', width: '20' },
108
- '& [role="radio"] > span': { height: '7px !custom', width: '7px !custom' },
108
+ '& [role="radio"] > span': { height: '8', width: '8' },
109
109
  },
110
110
  },
111
111
  small: {
112
112
  selectors: {
113
113
  '& [role="radio"]': { height: '16', width: '16' },
114
- '& [role="radio"] > span': { height: '6px !custom', width: '6px !custom' },
114
+ '& [role="radio"] > span': { height: '6', width: '6' },
115
115
  },
116
116
  },
117
117
  },
@@ -125,7 +125,7 @@ namespace styles {
125
125
  backgroundColor: 'background.surface',
126
126
  borderRadius: 'full',
127
127
  height: '8',
128
- transitionDuration: '200ms',
128
+ transitionDuration: '200',
129
129
  transitionProperty: 'opacity, transform',
130
130
  transitionTimingFunction: 'overshoot',
131
131
  width: '8',
@@ -157,30 +157,30 @@ namespace styles {
157
157
  height: '24',
158
158
  justifyContent: 'center',
159
159
  outlineColor: 'transparent !custom',
160
- outlineOffset: '0px !custom',
160
+ outlineOffset: '0',
161
161
  outlineStyle: 'solid !custom',
162
- outlineWidth: '2px !custom',
162
+ outlineWidth: '2',
163
163
  padding: '0',
164
164
  position: 'relative',
165
- transitionDuration: '160ms',
165
+ transitionDuration: '160',
166
166
  transitionProperty: 'background-color, opacity, outline-color, outline-offset, transform',
167
167
  transitionTimingFunction: 'snappy',
168
168
  width: '24',
169
169
  selectors: {
170
- '&::after': { content: '"" !custom', inset: '-10px !custom', position: 'absolute' },
170
+ '&::after': { content: '"" !custom', inset: '-10', position: 'absolute' },
171
171
  '&:active:not([data-disabled])': { transform: 'scale(0.96) !custom' },
172
- '&:focus-visible': { outlineColor: 'blue.700', outlineOffset: '2px !custom' },
172
+ '&:focus-visible': { outlineColor: 'blue.700', outlineOffset: '2' },
173
173
  '&:hover:not([data-disabled])': { backgroundColor: 'grayAlpha.400' },
174
174
  '&[data-checked]': { backgroundColor: 'foreground' },
175
175
  '&[data-checked]:hover:not([data-disabled])': {
176
176
  backgroundColor: 'foreground',
177
- opacity: '0.86 !custom',
177
+ opacity: 'hover',
178
178
  },
179
- '&[data-disabled]': { cursor: 'default', opacity: '0.4 !custom' },
179
+ '&[data-disabled]': { cursor: 'default', opacity: 'disabled' },
180
180
  '&[data-invalid]': {
181
181
  outlineColor: 'red.800',
182
182
  outlineStyle: 'solid !custom',
183
- outlineWidth: '1px !custom',
183
+ outlineWidth: '1',
184
184
  },
185
185
  },
186
186
  '@media (prefers-reduced-motion: reduce)': {
@@ -328,7 +328,7 @@ namespace styles {
328
328
  {
329
329
  color: 'gray.700',
330
330
  flexShrink: '0 !custom',
331
- transitionDuration: '240ms',
331
+ transitionDuration: '240',
332
332
  transitionProperty: 'transform',
333
333
  transitionTimingFunction: 'spring',
334
334
  '@media (prefers-reduced-motion: reduce)': { transitionProperty: 'none' },
@@ -344,8 +344,7 @@ namespace styles {
344
344
  export const label = variants(
345
345
  {
346
346
  base: {
347
- // gray.800 in light mode, where gray.900 reads close to the value text, and gray.900 in dark.
348
- color: 'light-dark(#7d7d7d, #bcbbbb) !custom',
347
+ color: 'gray.900',
349
348
  flexShrink: '0 !custom',
350
349
  marginInlineEnd: 'auto !custom',
351
350
  },
@@ -359,7 +358,7 @@ namespace styles {
359
358
  boxSizing: 'border-box',
360
359
  color: 'gray.900',
361
360
  padding: '16',
362
- transitionDuration: '200ms',
361
+ transitionDuration: '200',
363
362
  transitionProperty: 'opacity, transform',
364
363
  transitionTimingFunction: 'snappy',
365
364
  typography: 'copy.14',
@@ -452,13 +451,13 @@ namespace styles {
452
451
  display: 'flex',
453
452
  font: 'inherit !custom',
454
453
  outlineColor: 'transparent !custom',
455
- outlineOffset: '0px !custom',
454
+ outlineOffset: '0',
456
455
  outlineStyle: 'solid !custom',
457
- outlineWidth: '2px !custom',
456
+ outlineWidth: '2',
458
457
  paddingBlock: '8',
459
458
  textAlign: 'start',
460
459
  textDecoration: 'none !custom',
461
- transitionDuration: '160ms',
460
+ transitionDuration: '160',
462
461
  transitionProperty: 'background-color, opacity, outline-color, outline-offset',
463
462
  transitionTimingFunction: 'snappy',
464
463
  width: '100% !custom',
@@ -472,9 +471,9 @@ namespace styles {
472
471
  },
473
472
  '&:is(button, a[href], [role="button"]):focus-visible': {
474
473
  outlineColor: 'blue.700',
475
- outlineOffset: '-2px !custom',
474
+ outlineOffset: '-2',
476
475
  },
477
- '&:disabled, &[aria-disabled="true"]': { cursor: 'default', opacity: '0.4 !custom' },
476
+ '&:disabled, &[aria-disabled="true"]': { cursor: 'default', opacity: 'disabled' },
478
477
  '&[aria-expanded="true"] [data-indicator]': { transform: 'rotate(180deg) !custom' },
479
478
  },
480
479
  '@media (prefers-reduced-motion: reduce)': {