@usefragments/ui 1.7.0 → 2.0.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 (551) hide show
  1. package/README.md +54 -66
  2. package/dist/assets/nav-glyph.cjs +139 -0
  3. package/dist/assets/nav-glyph.d.ts +28 -0
  4. package/dist/assets/nav-glyph.d.ts.map +1 -0
  5. package/dist/assets/nav-glyph.js +139 -0
  6. package/dist/assets/nav-glyph.module.scss.cjs +71 -0
  7. package/dist/assets/nav-glyph.module.scss.js +71 -0
  8. package/dist/assets/ui.css +4975 -4959
  9. package/dist/blocks/components/StatsCard.d.ts +1 -1
  10. package/dist/blocks/components/StatsCard.d.ts.map +1 -1
  11. package/dist/codeblock.cjs +23 -16
  12. package/dist/codeblock.js +16 -9
  13. package/dist/colorpicker.cjs +1 -0
  14. package/dist/colorpicker.js +1 -0
  15. package/dist/components/Accordion/Accordion.module.scss.cjs +8 -8
  16. package/dist/components/Accordion/Accordion.module.scss.js +8 -8
  17. package/dist/components/Alert/Alert.module.scss.cjs +21 -21
  18. package/dist/components/Alert/Alert.module.scss.js +21 -21
  19. package/dist/components/Alert/index.cjs +14 -8
  20. package/dist/components/Alert/index.d.ts +9 -9
  21. package/dist/components/Alert/index.d.ts.map +1 -1
  22. package/dist/components/Alert/index.js +14 -8
  23. package/dist/components/AppShell/AppShell.module.scss.cjs +14 -14
  24. package/dist/components/AppShell/AppShell.module.scss.js +14 -14
  25. package/dist/components/AppShell/index.cjs +2 -2
  26. package/dist/components/AppShell/index.js +2 -2
  27. package/dist/components/Avatar/Avatar.module.scss.cjs +14 -14
  28. package/dist/components/Avatar/Avatar.module.scss.js +14 -14
  29. package/dist/components/Badge/Badge.module.scss.cjs +33 -31
  30. package/dist/components/Badge/Badge.module.scss.js +33 -31
  31. package/dist/components/Badge/index.cjs +13 -3
  32. package/dist/components/Badge/index.d.ts +18 -13
  33. package/dist/components/Badge/index.d.ts.map +1 -1
  34. package/dist/components/Badge/index.js +13 -3
  35. package/dist/components/BentoGrid/BentoGrid.module.scss.cjs +14 -14
  36. package/dist/components/BentoGrid/BentoGrid.module.scss.js +14 -14
  37. package/dist/components/Box/Box.module.scss.cjs +152 -152
  38. package/dist/components/Box/Box.module.scss.js +152 -152
  39. package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.cjs +11 -8
  40. package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.js +11 -8
  41. package/dist/components/Breadcrumbs/index.cjs +1 -1
  42. package/dist/components/Breadcrumbs/index.d.ts.map +1 -1
  43. package/dist/components/Breadcrumbs/index.js +1 -1
  44. package/dist/components/Button/Button.module.scss.cjs +36 -27
  45. package/dist/components/Button/Button.module.scss.js +36 -27
  46. package/dist/components/Button/index.cjs +20 -4
  47. package/dist/components/Button/index.d.ts +18 -10
  48. package/dist/components/Button/index.d.ts.map +1 -1
  49. package/dist/components/Button/index.js +20 -4
  50. package/dist/components/ButtonGroup/ButtonGroup.module.scss.cjs +15 -15
  51. package/dist/components/ButtonGroup/ButtonGroup.module.scss.js +15 -15
  52. package/dist/components/Card/Card.module.scss.cjs +27 -34
  53. package/dist/components/Card/Card.module.scss.js +27 -34
  54. package/dist/components/Card/index.cjs +13 -8
  55. package/dist/components/Card/index.d.ts +23 -25
  56. package/dist/components/Card/index.d.ts.map +1 -1
  57. package/dist/components/Card/index.js +13 -8
  58. package/dist/components/Chart/Chart.module.scss.cjs +15 -15
  59. package/dist/components/Chart/Chart.module.scss.js +15 -15
  60. package/dist/components/Checkbox/Checkbox.module.scss.cjs +11 -11
  61. package/dist/components/Checkbox/Checkbox.module.scss.js +11 -11
  62. package/dist/components/Checkbox/index.cjs +2 -2
  63. package/dist/components/Checkbox/index.d.ts +4 -6
  64. package/dist/components/Checkbox/index.d.ts.map +1 -1
  65. package/dist/components/Checkbox/index.js +2 -2
  66. package/dist/components/Chip/Chip.module.scss.cjs +19 -19
  67. package/dist/components/Chip/Chip.module.scss.js +19 -19
  68. package/dist/components/Chip/index.cjs +1 -2
  69. package/dist/components/Chip/index.d.ts +8 -3
  70. package/dist/components/Chip/index.d.ts.map +1 -1
  71. package/dist/components/Chip/index.js +1 -2
  72. package/dist/components/CodeBlock/CodeBlock.module.scss.cjs +22 -22
  73. package/dist/components/CodeBlock/CodeBlock.module.scss.js +22 -22
  74. package/dist/components/CodeBlock/index.d.ts +3 -2
  75. package/dist/components/CodeBlock/index.d.ts.map +1 -1
  76. package/dist/components/Collapsible/Collapsible.module.scss.cjs +9 -9
  77. package/dist/components/Collapsible/Collapsible.module.scss.js +9 -9
  78. package/dist/components/ColorPicker/ColorPicker.module.scss.cjs +14 -14
  79. package/dist/components/ColorPicker/ColorPicker.module.scss.js +14 -14
  80. package/dist/components/ColorPicker/index.d.ts.map +1 -1
  81. package/dist/components/Combobox/Combobox.module.scss.cjs +21 -21
  82. package/dist/components/Combobox/Combobox.module.scss.js +21 -21
  83. package/dist/components/Combobox/index.cjs +9 -5
  84. package/dist/components/Combobox/index.d.ts.map +1 -1
  85. package/dist/components/Combobox/index.js +9 -5
  86. package/dist/components/Command/Command.module.scss.cjs +14 -11
  87. package/dist/components/Command/Command.module.scss.js +14 -11
  88. package/dist/components/Command/index.cjs +2 -1
  89. package/dist/components/Command/index.d.ts +6 -1
  90. package/dist/components/Command/index.d.ts.map +1 -1
  91. package/dist/components/Command/index.js +2 -1
  92. package/dist/components/ConversationList/ConversationList.module.scss.cjs +10 -10
  93. package/dist/components/ConversationList/ConversationList.module.scss.js +10 -10
  94. package/dist/components/ConversationList/index.cjs +2 -2
  95. package/dist/components/ConversationList/index.js +2 -2
  96. package/dist/components/DataTable/DataTable.module.scss.cjs +31 -28
  97. package/dist/components/DataTable/DataTable.module.scss.js +31 -28
  98. package/dist/components/DataTable/DataTable.virtual.d.ts.map +1 -1
  99. package/dist/components/DatePicker/DatePicker.module.scss.cjs +33 -33
  100. package/dist/components/DatePicker/DatePicker.module.scss.js +33 -33
  101. package/dist/components/DatePicker/index.d.ts.map +1 -1
  102. package/dist/components/Dialog/Dialog.module.scss.cjs +14 -14
  103. package/dist/components/Dialog/Dialog.module.scss.js +14 -14
  104. package/dist/components/Dialog/index.cjs +2 -2
  105. package/dist/components/Dialog/index.d.ts +5 -4
  106. package/dist/components/Dialog/index.d.ts.map +1 -1
  107. package/dist/components/Dialog/index.js +2 -2
  108. package/dist/components/Drawer/Drawer.module.scss.cjs +39 -39
  109. package/dist/components/Drawer/Drawer.module.scss.js +40 -40
  110. package/dist/components/Drawer/index.cjs +2 -2
  111. package/dist/components/Drawer/index.d.ts +5 -4
  112. package/dist/components/Drawer/index.d.ts.map +1 -1
  113. package/dist/components/Drawer/index.js +2 -2
  114. package/dist/components/Editor/Editor.module.scss.cjs +17 -17
  115. package/dist/components/Editor/Editor.module.scss.js +17 -17
  116. package/dist/components/EmptyState/EmptyState.module.scss.cjs +11 -11
  117. package/dist/components/EmptyState/EmptyState.module.scss.js +11 -11
  118. package/dist/components/EmptyState/index.cjs +9 -4
  119. package/dist/components/EmptyState/index.d.ts +8 -5
  120. package/dist/components/EmptyState/index.d.ts.map +1 -1
  121. package/dist/components/EmptyState/index.js +9 -4
  122. package/dist/components/Field/Field.module.scss.cjs +5 -5
  123. package/dist/components/Field/Field.module.scss.js +5 -5
  124. package/dist/components/Fieldset/Fieldset.module.scss.cjs +3 -3
  125. package/dist/components/Fieldset/Fieldset.module.scss.js +3 -3
  126. package/dist/components/Grid/Grid.module.scss.cjs +54 -54
  127. package/dist/components/Grid/Grid.module.scss.js +54 -54
  128. package/dist/components/Header/Header.module.scss.cjs +33 -33
  129. package/dist/components/Header/Header.module.scss.js +33 -33
  130. package/dist/components/Icon/Icon.module.scss.cjs +30 -33
  131. package/dist/components/Icon/Icon.module.scss.js +30 -33
  132. package/dist/components/Icon/index.cjs +15 -14
  133. package/dist/components/Icon/index.d.ts +23 -12
  134. package/dist/components/Icon/index.d.ts.map +1 -1
  135. package/dist/components/Icon/index.js +15 -14
  136. package/dist/components/IconButton/IconButton.module.scss.cjs +12 -12
  137. package/dist/components/IconButton/IconButton.module.scss.js +12 -12
  138. package/dist/components/IconButton/index.d.ts +4 -4
  139. package/dist/components/IconButton/index.d.ts.map +1 -1
  140. package/dist/components/Input/Input.module.scss.cjs +15 -21
  141. package/dist/components/Input/Input.module.scss.js +15 -21
  142. package/dist/components/Input/index.cjs +2 -14
  143. package/dist/components/Input/index.d.ts +0 -2
  144. package/dist/components/Input/index.d.ts.map +1 -1
  145. package/dist/components/Input/index.js +2 -14
  146. package/dist/components/Link/Link.module.scss.cjs +24 -16
  147. package/dist/components/Link/Link.module.scss.js +24 -16
  148. package/dist/components/Link/index.cjs +13 -2
  149. package/dist/components/Link/index.d.ts +10 -3
  150. package/dist/components/Link/index.d.ts.map +1 -1
  151. package/dist/components/Link/index.js +13 -2
  152. package/dist/components/List/List.module.scss.cjs +23 -19
  153. package/dist/components/List/List.module.scss.js +23 -19
  154. package/dist/components/List/index.cjs +7 -7
  155. package/dist/components/List/index.d.ts +10 -7
  156. package/dist/components/List/index.d.ts.map +1 -1
  157. package/dist/components/List/index.js +7 -7
  158. package/dist/components/Listbox/Listbox.module.scss.cjs +8 -8
  159. package/dist/components/Listbox/Listbox.module.scss.js +8 -8
  160. package/dist/components/Loading/Loading.module.scss.cjs +30 -30
  161. package/dist/components/Loading/Loading.module.scss.js +30 -30
  162. package/dist/components/Loading/index.cjs +5 -5
  163. package/dist/components/Loading/index.d.ts +8 -7
  164. package/dist/components/Loading/index.d.ts.map +1 -1
  165. package/dist/components/Loading/index.js +5 -5
  166. package/dist/components/Markdown/Markdown.module.scss.cjs +1 -1
  167. package/dist/components/Markdown/Markdown.module.scss.js +1 -1
  168. package/dist/components/Menu/Menu.module.scss.cjs +14 -14
  169. package/dist/components/Menu/Menu.module.scss.js +14 -14
  170. package/dist/components/Message/Message.module.scss.cjs +20 -20
  171. package/dist/components/Message/Message.module.scss.js +20 -20
  172. package/dist/components/Message/index.cjs +1 -1
  173. package/dist/components/Message/index.d.ts +1 -1
  174. package/dist/components/Message/index.js +1 -1
  175. package/dist/components/NavigationMenu/NavigationMenu.module.scss.cjs +29 -29
  176. package/dist/components/NavigationMenu/NavigationMenu.module.scss.js +29 -29
  177. package/dist/components/Pagination/Pagination.module.scss.cjs +10 -10
  178. package/dist/components/Pagination/Pagination.module.scss.js +10 -10
  179. package/dist/components/Popover/Popover.module.scss.cjs +10 -10
  180. package/dist/components/Popover/Popover.module.scss.js +10 -10
  181. package/dist/components/Progress/Progress.module.scss.cjs +28 -25
  182. package/dist/components/Progress/Progress.module.scss.js +28 -25
  183. package/dist/components/Progress/index.cjs +21 -12
  184. package/dist/components/Progress/index.d.ts +10 -6
  185. package/dist/components/Progress/index.d.ts.map +1 -1
  186. package/dist/components/Progress/index.js +21 -12
  187. package/dist/components/Prompt/Prompt.module.scss.cjs +30 -30
  188. package/dist/components/Prompt/Prompt.module.scss.js +30 -30
  189. package/dist/components/Prompt/index.cjs +7 -7
  190. package/dist/components/Prompt/index.d.ts +11 -9
  191. package/dist/components/Prompt/index.d.ts.map +1 -1
  192. package/dist/components/Prompt/index.js +7 -7
  193. package/dist/components/RadioGroup/RadioGroup.module.scss.cjs +20 -17
  194. package/dist/components/RadioGroup/RadioGroup.module.scss.js +20 -17
  195. package/dist/components/RadioGroup/index.cjs +10 -5
  196. package/dist/components/RadioGroup/index.d.ts +11 -7
  197. package/dist/components/RadioGroup/index.d.ts.map +1 -1
  198. package/dist/components/RadioGroup/index.js +10 -5
  199. package/dist/components/ScrollArea/ScrollArea.module.scss.cjs +5 -5
  200. package/dist/components/ScrollArea/ScrollArea.module.scss.js +5 -5
  201. package/dist/components/Select/Select.module.scss.cjs +21 -21
  202. package/dist/components/Select/Select.module.scss.js +21 -21
  203. package/dist/components/Select/index.cjs +26 -20
  204. package/dist/components/Select/index.d.ts +5 -5
  205. package/dist/components/Select/index.d.ts.map +1 -1
  206. package/dist/components/Select/index.js +26 -20
  207. package/dist/components/Separator/Separator.module.scss.cjs +25 -19
  208. package/dist/components/Separator/Separator.module.scss.js +25 -19
  209. package/dist/components/Separator/index.cjs +10 -8
  210. package/dist/components/Separator/index.d.ts +4 -2
  211. package/dist/components/Separator/index.d.ts.map +1 -1
  212. package/dist/components/Separator/index.js +10 -8
  213. package/dist/components/Sidebar/Sidebar.module.scss.cjs +43 -43
  214. package/dist/components/Sidebar/Sidebar.module.scss.js +43 -43
  215. package/dist/components/Sidebar/index.cjs +3 -3
  216. package/dist/components/Sidebar/index.js +3 -3
  217. package/dist/components/Skeleton/Skeleton.module.scss.cjs +46 -46
  218. package/dist/components/Skeleton/Skeleton.module.scss.js +46 -46
  219. package/dist/components/Skeleton/index.cjs +7 -7
  220. package/dist/components/Skeleton/index.d.ts +8 -7
  221. package/dist/components/Skeleton/index.d.ts.map +1 -1
  222. package/dist/components/Skeleton/index.js +7 -7
  223. package/dist/components/Slider/Slider.module.scss.cjs +12 -12
  224. package/dist/components/Slider/Slider.module.scss.js +12 -12
  225. package/dist/components/Switch/Switch.module.scss.cjs +9 -9
  226. package/dist/components/Switch/Switch.module.scss.js +9 -9
  227. package/dist/components/Table/Table.module.scss.cjs +15 -15
  228. package/dist/components/Table/Table.module.scss.js +15 -15
  229. package/dist/components/TableOfContents/TableOfContents.module.scss.cjs +15 -15
  230. package/dist/components/TableOfContents/TableOfContents.module.scss.js +15 -15
  231. package/dist/components/TableOfContents/index.cjs +1 -1
  232. package/dist/components/TableOfContents/index.js +1 -1
  233. package/dist/components/Tabs/Tabs.module.scss.cjs +18 -18
  234. package/dist/components/Tabs/Tabs.module.scss.js +18 -18
  235. package/dist/components/Tabs/index.cjs +5 -6
  236. package/dist/components/Tabs/index.d.ts +8 -6
  237. package/dist/components/Tabs/index.d.ts.map +1 -1
  238. package/dist/components/Tabs/index.js +5 -6
  239. package/dist/components/Text/Text.module.scss.cjs +105 -105
  240. package/dist/components/Text/Text.module.scss.js +105 -105
  241. package/dist/components/Text/index.cjs +5 -9
  242. package/dist/components/Text/index.d.ts +15 -11
  243. package/dist/components/Text/index.d.ts.map +1 -1
  244. package/dist/components/Text/index.js +5 -9
  245. package/dist/components/Textarea/Textarea.module.scss.cjs +22 -28
  246. package/dist/components/Textarea/Textarea.module.scss.js +22 -28
  247. package/dist/components/Textarea/index.cjs +3 -10
  248. package/dist/components/Textarea/index.d.ts +0 -2
  249. package/dist/components/Textarea/index.d.ts.map +1 -1
  250. package/dist/components/Textarea/index.js +3 -10
  251. package/dist/components/Theme/index.cjs +20 -4
  252. package/dist/components/Theme/index.d.ts +6 -12
  253. package/dist/components/Theme/index.d.ts.map +1 -1
  254. package/dist/components/Theme/index.js +20 -4
  255. package/dist/components/ThemeToggle/ThemeButton.cjs +51 -0
  256. package/dist/components/ThemeToggle/ThemeButton.d.ts +16 -0
  257. package/dist/components/ThemeToggle/ThemeButton.d.ts.map +1 -0
  258. package/dist/components/ThemeToggle/ThemeButton.js +34 -0
  259. package/dist/components/ThemeToggle/ThemeToggle.module.scss.cjs +6 -9
  260. package/dist/components/ThemeToggle/ThemeToggle.module.scss.js +6 -9
  261. package/dist/components/ThemeToggle/icons.cjs +48 -0
  262. package/dist/components/ThemeToggle/icons.d.ts +10 -0
  263. package/dist/components/ThemeToggle/icons.d.ts.map +1 -0
  264. package/dist/components/ThemeToggle/icons.js +48 -0
  265. package/dist/components/ThemeToggle/index.cjs +5 -74
  266. package/dist/components/ThemeToggle/index.d.ts +5 -8
  267. package/dist/components/ThemeToggle/index.d.ts.map +1 -1
  268. package/dist/components/ThemeToggle/index.js +3 -72
  269. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.cjs +18 -15
  270. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.js +18 -15
  271. package/dist/components/ThinkingIndicator/index.cjs +7 -8
  272. package/dist/components/ThinkingIndicator/index.d.ts +6 -5
  273. package/dist/components/ThinkingIndicator/index.d.ts.map +1 -1
  274. package/dist/components/ThinkingIndicator/index.js +7 -8
  275. package/dist/components/Toast/Toast.module.scss.cjs +28 -29
  276. package/dist/components/Toast/Toast.module.scss.js +29 -30
  277. package/dist/components/Toast/index.cjs +28 -30
  278. package/dist/components/Toast/index.d.ts +9 -8
  279. package/dist/components/Toast/index.d.ts.map +1 -1
  280. package/dist/components/Toast/index.js +28 -30
  281. package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs +21 -19
  282. package/dist/components/ToggleGroup/ToggleGroup.module.scss.js +22 -20
  283. package/dist/components/ToggleGroup/index.cjs +4 -5
  284. package/dist/components/ToggleGroup/index.d.ts +7 -6
  285. package/dist/components/ToggleGroup/index.d.ts.map +1 -1
  286. package/dist/components/ToggleGroup/index.js +4 -5
  287. package/dist/components/Tooltip/Tooltip.module.scss.cjs +3 -3
  288. package/dist/components/Tooltip/Tooltip.module.scss.js +3 -3
  289. package/dist/components/VisuallyHidden/VisuallyHidden.module.scss.cjs +1 -1
  290. package/dist/components/VisuallyHidden/VisuallyHidden.module.scss.js +1 -1
  291. package/dist/data-table-virtual.cjs +3 -2
  292. package/dist/data-table-virtual.js +3 -2
  293. package/dist/data-table.cjs +1 -1
  294. package/dist/data-table.js +1 -1
  295. package/dist/datepicker.cjs +23 -11
  296. package/dist/datepicker.js +23 -11
  297. package/dist/index.cjs +5 -1
  298. package/dist/index.d.ts +8 -8
  299. package/dist/index.d.ts.map +1 -1
  300. package/dist/index.js +6 -2
  301. package/dist/measurements/generated.cjs +37 -93
  302. package/dist/measurements/generated.d.ts +37 -92
  303. package/dist/measurements/generated.d.ts.map +1 -1
  304. package/dist/measurements/generated.js +37 -93
  305. package/dist/measurements/index.d.ts +1 -1
  306. package/dist/measurements/index.d.ts.map +1 -1
  307. package/dist/utils/seed-derivation.cjs +0 -1
  308. package/dist/utils/seed-derivation.d.ts +1 -3
  309. package/dist/utils/seed-derivation.d.ts.map +1 -1
  310. package/dist/utils/seed-derivation.js +0 -1
  311. package/dist/utils/theme-presets.cjs +5 -10
  312. package/dist/utils/theme-presets.d.ts +1 -2
  313. package/dist/utils/theme-presets.d.ts.map +1 -1
  314. package/dist/utils/theme-presets.js +5 -10
  315. package/fragments.json +1 -1
  316. package/package.json +5 -8
  317. package/src/assets/nav-glyph.module.scss +166 -0
  318. package/src/assets/nav-glyph.tsx +188 -0
  319. package/src/components/Accordion/Accordion.module.scss +5 -3
  320. package/src/components/Alert/Alert.contract.json +18 -18
  321. package/src/components/Alert/Alert.module.scss +50 -64
  322. package/src/components/Alert/index.tsx +24 -17
  323. package/src/components/AppShell/AppShell.contract.json +7 -7
  324. package/src/components/AppShell/AppShell.module.scss +49 -17
  325. package/src/components/AppShell/index.tsx +2 -2
  326. package/src/components/Avatar/Avatar.module.scss +0 -1
  327. package/src/components/Badge/Badge.contract.json +58 -22
  328. package/src/components/Badge/Badge.module.scss +72 -47
  329. package/src/components/Badge/index.tsx +34 -17
  330. package/src/components/BentoGrid/BentoGrid.module.scss +4 -8
  331. package/src/components/Box/Box.module.scss +7 -6
  332. package/src/components/Breadcrumbs/Breadcrumbs.module.scss +15 -5
  333. package/src/components/Breadcrumbs/index.tsx +5 -1
  334. package/src/components/Button/Button.module.scss +261 -186
  335. package/src/components/Button/index.tsx +41 -28
  336. package/src/components/ButtonGroup/ButtonGroup.contract.json +5 -5
  337. package/src/components/ButtonGroup/ButtonGroup.module.scss +8 -6
  338. package/src/components/Card/Card.consumer-fixture.module.scss +5 -2
  339. package/src/components/Card/Card.module.scss +73 -133
  340. package/src/components/Card/index.tsx +41 -36
  341. package/src/components/Chart/Chart.module.scss +6 -5
  342. package/src/components/Checkbox/Checkbox.contract.json +4 -3
  343. package/src/components/Checkbox/Checkbox.module.scss +16 -32
  344. package/src/components/Checkbox/index.tsx +6 -8
  345. package/src/components/Chip/Chip.contract.json +10 -10
  346. package/src/components/Chip/Chip.module.scss +23 -22
  347. package/src/components/Chip/index.tsx +10 -6
  348. package/src/components/CodeBlock/CodeBlock.module.scss +47 -70
  349. package/src/components/CodeBlock/index.tsx +23 -16
  350. package/src/components/Collapsible/Collapsible.module.scss +1 -7
  351. package/src/components/ColorPicker/ColorPicker.module.scss +20 -13
  352. package/src/components/ColorPicker/index.tsx +1 -0
  353. package/src/components/Combobox/Combobox.module.scss +16 -19
  354. package/src/components/Combobox/index.tsx +10 -1
  355. package/src/components/Command/Command.contract.json +7 -1
  356. package/src/components/Command/Command.module.scss +19 -21
  357. package/src/components/Command/index.tsx +7 -1
  358. package/src/components/ComponentDefaults/ComponentDefaults.contract.json +91 -0
  359. package/src/components/ConversationList/ConversationList.module.scss +2 -3
  360. package/src/components/ConversationList/index.tsx +2 -2
  361. package/src/components/DataTable/DataTable.module.scss +12 -9
  362. package/src/components/DataTable/DataTable.virtual.tsx +3 -2
  363. package/src/components/DataTable/index.tsx +1 -1
  364. package/src/components/DatePicker/DatePicker.module.scss +32 -42
  365. package/src/components/DatePicker/index.tsx +18 -7
  366. package/src/components/Dialog/Dialog.module.scss +23 -29
  367. package/src/components/Dialog/index.tsx +7 -5
  368. package/src/components/Drawer/Drawer.contract.json +6 -6
  369. package/src/components/Drawer/Drawer.module.scss +123 -64
  370. package/src/components/Drawer/index.tsx +7 -5
  371. package/src/components/Editor/Editor.contract.json +1 -1
  372. package/src/components/Editor/Editor.module.scss +26 -13
  373. package/src/components/EmptyState/EmptyState.contract.json +6 -6
  374. package/src/components/EmptyState/EmptyState.module.scss +31 -23
  375. package/src/components/EmptyState/index.tsx +17 -9
  376. package/src/components/Field/Field.module.scss +2 -1
  377. package/src/components/Fieldset/Fieldset.module.scss +5 -4
  378. package/src/components/Form/Form.contract.json +4 -4
  379. package/src/components/Grid/Grid.module.scss +2 -2
  380. package/src/components/Header/Header.contract.json +2 -2
  381. package/src/components/Header/Header.module.scss +24 -36
  382. package/src/components/Icon/Icon.contract.json +19 -23
  383. package/src/components/Icon/Icon.module.scss +13 -12
  384. package/src/components/Icon/index.tsx +31 -31
  385. package/src/components/IconButton/IconButton.contract.json +8 -8
  386. package/src/components/IconButton/IconButton.module.scss +13 -4
  387. package/src/components/IconButton/index.tsx +4 -4
  388. package/src/components/Input/Input.contract.json +0 -13
  389. package/src/components/Input/Input.module.scss +4 -54
  390. package/src/components/Input/index.tsx +2 -18
  391. package/src/components/Link/Link.contract.json +19 -11
  392. package/src/components/Link/Link.module.scss +24 -10
  393. package/src/components/Link/index.tsx +26 -5
  394. package/src/components/List/List.contract.json +11 -11
  395. package/src/components/List/List.module.scss +10 -5
  396. package/src/components/List/index.tsx +17 -13
  397. package/src/components/Listbox/Listbox.module.scss +14 -20
  398. package/src/components/Loading/Loading.contract.json +6 -6
  399. package/src/components/Loading/Loading.module.scss +29 -26
  400. package/src/components/Loading/index.tsx +13 -12
  401. package/src/components/Markdown/Markdown.module.scss +2 -1
  402. package/src/components/Menu/Menu.contract.json +5 -5
  403. package/src/components/Menu/Menu.module.scss +11 -10
  404. package/src/components/Message/Message.contract.json +5 -5
  405. package/src/components/Message/Message.module.scss +8 -6
  406. package/src/components/Message/index.tsx +2 -2
  407. package/src/components/NavigationMenu/NavigationMenu.module.scss +22 -67
  408. package/src/components/Pagination/Pagination.module.scss +7 -14
  409. package/src/components/Popover/Popover.contract.json +4 -4
  410. package/src/components/Popover/Popover.module.scss +24 -23
  411. package/src/components/Progress/Progress.contract.json +11 -11
  412. package/src/components/Progress/Progress.module.scss +13 -8
  413. package/src/components/Progress/index.tsx +34 -16
  414. package/src/components/Prompt/Prompt.contract.json +12 -12
  415. package/src/components/Prompt/Prompt.module.scss +40 -47
  416. package/src/components/Prompt/index.tsx +17 -15
  417. package/src/components/RadioGroup/RadioGroup.contract.json +6 -4
  418. package/src/components/RadioGroup/RadioGroup.module.scss +38 -32
  419. package/src/components/RadioGroup/index.tsx +23 -10
  420. package/src/components/ScrollArea/ScrollArea.module.scss +30 -33
  421. package/src/components/Select/Select.module.scss +19 -18
  422. package/src/components/Select/index.tsx +26 -24
  423. package/src/components/Separator/Separator.contract.json +10 -10
  424. package/src/components/Separator/Separator.module.scss +24 -40
  425. package/src/components/Separator/index.tsx +16 -11
  426. package/src/components/Sidebar/Sidebar.contract.json +1 -1
  427. package/src/components/Sidebar/Sidebar.module.scss +92 -95
  428. package/src/components/Sidebar/index.tsx +3 -3
  429. package/src/components/Skeleton/Skeleton.contract.json +9 -9
  430. package/src/components/Skeleton/Skeleton.module.scss +23 -16
  431. package/src/components/Skeleton/index.tsx +16 -15
  432. package/src/components/Slider/Slider.module.scss +6 -19
  433. package/src/components/Stack/Stack.contract.json +1 -1
  434. package/src/components/Stack/Stack.module.scss +13 -12
  435. package/src/components/Switch/Switch.module.scss +44 -35
  436. package/src/components/Table/Table.module.scss +9 -13
  437. package/src/components/TableOfContents/TableOfContents.module.scss +12 -18
  438. package/src/components/TableOfContents/index.tsx +1 -1
  439. package/src/components/Tabs/Tabs.contract.json +14 -14
  440. package/src/components/Tabs/Tabs.module.scss +27 -31
  441. package/src/components/Tabs/index.tsx +15 -12
  442. package/src/components/Text/Text.contract.json +36 -14
  443. package/src/components/Text/Text.module.scss +19 -20
  444. package/src/components/Text/index.tsx +23 -21
  445. package/src/components/Textarea/Textarea.contract.json +0 -13
  446. package/src/components/Textarea/Textarea.module.scss +24 -52
  447. package/src/components/Textarea/index.tsx +3 -14
  448. package/src/components/Theme/Theme.contract.json +9 -8
  449. package/src/components/Theme/index.tsx +39 -12
  450. package/src/components/ThemeToggle/ThemeButton.tsx +49 -0
  451. package/src/components/ThemeToggle/ThemeToggle.module.scss +21 -44
  452. package/src/components/ThemeToggle/icons.tsx +46 -0
  453. package/src/components/ThemeToggle/index.tsx +8 -90
  454. package/src/components/ThinkingIndicator/ThinkingIndicator.contract.json +11 -10
  455. package/src/components/ThinkingIndicator/ThinkingIndicator.module.scss +9 -7
  456. package/src/components/ThinkingIndicator/index.tsx +12 -14
  457. package/src/components/Toast/Toast.contract.json +29 -13
  458. package/src/components/Toast/Toast.module.scss +49 -104
  459. package/src/components/Toast/index.tsx +39 -34
  460. package/src/components/ToggleGroup/ToggleGroup.contract.json +13 -13
  461. package/src/components/ToggleGroup/ToggleGroup.module.scss +16 -46
  462. package/src/components/ToggleGroup/index.tsx +11 -11
  463. package/src/components/Tooltip/Tooltip.contract.json +3 -3
  464. package/src/components/Tooltip/Tooltip.module.scss +16 -10
  465. package/src/components/VisuallyHidden/VisuallyHidden.module.scss +4 -14
  466. package/src/index.ts +14 -10
  467. package/src/measurements/MeasurementTargets.module.scss +6 -7
  468. package/src/measurements/generated.ts +38 -96
  469. package/src/measurements/index.ts +0 -1
  470. package/src/measurements/measurements.json +37 -116
  471. package/src/recipes/_action.scss +4 -4
  472. package/src/recipes/_boolean-range.scss +9 -5
  473. package/src/recipes/_feedback.scss +17 -16
  474. package/src/recipes/_field.scss +28 -20
  475. package/src/recipes/_navigation.scss +84 -29
  476. package/src/recipes/_overlay.scss +143 -43
  477. package/src/recipes/_popup.scss +46 -36
  478. package/src/recipes/_prose.scss +35 -23
  479. package/src/recipes/_representation.scss +10 -9
  480. package/src/recipes/_segmented.scss +1 -1
  481. package/src/recipes/_table-chrome.scss +27 -16
  482. package/src/recipes/_target.scss +2 -4
  483. package/src/recipes/_typography.scss +10 -0
  484. package/src/styles/globals.scss +14 -9
  485. package/src/tokens/_component-properties.scss +19 -1
  486. package/src/tokens/_computed.scss +27 -33
  487. package/src/tokens/_measurements.catalog.generated.css +58 -45
  488. package/src/tokens/_measurements.generated.scss +107 -250
  489. package/src/tokens/_mixins.scss +42 -40
  490. package/src/tokens/_palettes.scss +1 -1
  491. package/src/tokens/_property-registrations.scss +9 -0
  492. package/src/tokens/_seeds.scss +1 -12
  493. package/src/tokens/_variables.scss +71 -59
  494. package/src/utils/seed-derivation.ts +1 -8
  495. package/src/utils/theme-presets.ts +5 -12
  496. package/dist/blocks/AccountSettings.block.d.ts +0 -3
  497. package/dist/blocks/AccountSettings.block.d.ts.map +0 -1
  498. package/dist/blocks/ActivityFeedSkeleton.block.d.ts +0 -3
  499. package/dist/blocks/ActivityFeedSkeleton.block.d.ts.map +0 -1
  500. package/dist/blocks/BlogEditor.block.d.ts +0 -3
  501. package/dist/blocks/BlogEditor.block.d.ts.map +0 -1
  502. package/dist/blocks/ChatInterface.block.d.ts +0 -3
  503. package/dist/blocks/ChatInterface.block.d.ts.map +0 -1
  504. package/dist/blocks/ChatMessages.block.d.ts +0 -3
  505. package/dist/blocks/ChatMessages.block.d.ts.map +0 -1
  506. package/dist/blocks/CheckoutForm.block.d.ts +0 -3
  507. package/dist/blocks/CheckoutForm.block.d.ts.map +0 -1
  508. package/dist/blocks/CommandPalette.block.d.ts +0 -3
  509. package/dist/blocks/CommandPalette.block.d.ts.map +0 -1
  510. package/dist/blocks/ContactForm.block.d.ts +0 -3
  511. package/dist/blocks/ContactForm.block.d.ts.map +0 -1
  512. package/dist/blocks/DashboardPage.block.d.ts +0 -3
  513. package/dist/blocks/DashboardPage.block.d.ts.map +0 -1
  514. package/dist/blocks/DashboardSkeleton.block.d.ts +0 -3
  515. package/dist/blocks/DashboardSkeleton.block.d.ts.map +0 -1
  516. package/dist/blocks/DataTable.block.d.ts +0 -3
  517. package/dist/blocks/DataTable.block.d.ts.map +0 -1
  518. package/dist/blocks/EmptyState.block.d.ts +0 -3
  519. package/dist/blocks/EmptyState.block.d.ts.map +0 -1
  520. package/dist/blocks/FAQSection.block.d.ts +0 -3
  521. package/dist/blocks/FAQSection.block.d.ts.map +0 -1
  522. package/dist/blocks/FeatureGrid.block.d.ts +0 -3
  523. package/dist/blocks/FeatureGrid.block.d.ts.map +0 -1
  524. package/dist/blocks/HeroSection.block.d.ts +0 -3
  525. package/dist/blocks/HeroSection.block.d.ts.map +0 -1
  526. package/dist/blocks/NavigationHeader.block.d.ts +0 -3
  527. package/dist/blocks/NavigationHeader.block.d.ts.map +0 -1
  528. package/dist/blocks/PaginatedTable.block.d.ts +0 -3
  529. package/dist/blocks/PaginatedTable.block.d.ts.map +0 -1
  530. package/dist/blocks/PricingComparison.block.d.ts +0 -3
  531. package/dist/blocks/PricingComparison.block.d.ts.map +0 -1
  532. package/dist/blocks/ProductCard.block.d.ts +0 -3
  533. package/dist/blocks/ProductCard.block.d.ts.map +0 -1
  534. package/dist/blocks/RegistrationForm.block.d.ts +0 -3
  535. package/dist/blocks/RegistrationForm.block.d.ts.map +0 -1
  536. package/dist/blocks/SettingsDrawer.block.d.ts +0 -3
  537. package/dist/blocks/SettingsDrawer.block.d.ts.map +0 -1
  538. package/dist/blocks/SettingsPanel.block.d.ts +0 -3
  539. package/dist/blocks/SettingsPanel.block.d.ts.map +0 -1
  540. package/dist/blocks/ShoppingCart.block.d.ts +0 -3
  541. package/dist/blocks/ShoppingCart.block.d.ts.map +0 -1
  542. package/dist/blocks/StatsCardSkeleton.block.d.ts +0 -3
  543. package/dist/blocks/StatsCardSkeleton.block.d.ts.map +0 -1
  544. package/dist/blocks/TableSkeleton.block.d.ts +0 -3
  545. package/dist/blocks/TableSkeleton.block.d.ts.map +0 -1
  546. package/dist/blocks/ThinkingStates.block.d.ts +0 -3
  547. package/dist/blocks/ThinkingStates.block.d.ts.map +0 -1
  548. package/dist/components/Toggle/index.d.ts +0 -3
  549. package/dist/components/Toggle/index.d.ts.map +0 -1
  550. package/src/components/Toggle/index.ts +0 -7
  551. package/src/tokens/_density.scss +0 -85
@@ -50,13 +50,11 @@ export interface RadioGroupProps extends Omit<
50
50
  /** Size variant */
51
51
  size?: "sm" | "md" | "lg";
52
52
  /**
53
- * Visual variant.
54
- * - `default`: inline radio circle next to a label (form-control style).
55
- * - `card`: each item is a full-width clickable card with the radio circle
56
- * tucked inside. Useful for high-stakes choices, surveys, plan pickers.
57
- * @default "default"
53
+ * Chrome. Omit it for the inline radio circle next to a label (form-control
54
+ * style); `outline` renders each item as a full-width bordered surface with
55
+ * the radio circle tucked inside high-stakes choices, surveys, plan pickers.
58
56
  */
59
- variant?: "default" | "card";
57
+ variant?: "outline";
60
58
  /** Class applied to the outer wrapper (label + group + error) */
61
59
  wrapperClassName?: string;
62
60
  /** Class applied to the inner radio group container */
@@ -76,6 +74,12 @@ export interface RadioItemProps {
76
74
  helperText?: string;
77
75
  /** @deprecated Use helperText instead. Description text below the label. */
78
76
  description?: string;
77
+ /**
78
+ * A value at the end of the row, on the label's line — a price, a count,
79
+ * a date. Read by the label's accessible name, so keep it short and put
80
+ * the explanation in `helperText`.
81
+ */
82
+ trailing?: React.ReactNode;
79
83
  /** Whether this item is disabled */
80
84
  disabled?: boolean;
81
85
  /** Accessible name for icon-only mode */
@@ -97,7 +101,7 @@ export interface RadioItemProps {
97
101
  // ============================================
98
102
 
99
103
  const RadioSizeContext = React.createContext<ControlSize>("md");
100
- const RadioVariantContext = React.createContext<"default" | "card">("default");
104
+ const RadioVariantContext = React.createContext<"outline" | undefined>(undefined);
101
105
 
102
106
  // ============================================
103
107
  // Radio Item Component
@@ -108,6 +112,7 @@ function RadioItem({
108
112
  label,
109
113
  helperText,
110
114
  description,
115
+ trailing,
111
116
  disabled = false,
112
117
  "aria-label": ariaLabel,
113
118
  "aria-labelledby": ariaLabelledBy,
@@ -122,6 +127,7 @@ function RadioItem({
122
127
  const id = React.useId();
123
128
  const labelId = label ? `radio-label-${id}` : undefined;
124
129
  const descriptionId = resolvedHelperText ? `radio-desc-${id}` : undefined;
130
+ const trailingId = trailing != null ? `radio-trailing-${id}` : undefined;
125
131
 
126
132
  const radioClasses = [
127
133
  styles.radio,
@@ -134,7 +140,7 @@ function RadioItem({
134
140
 
135
141
  const wrapperClasses = [
136
142
  styles.itemWrapper,
137
- variant === "card" && styles.itemWrapperCard,
143
+ variant === "outline" && styles.itemWrapperOutline,
138
144
  className,
139
145
  ]
140
146
  .filter(Boolean)
@@ -162,13 +168,14 @@ function RadioItem({
162
168
  className={wrapperClasses}
163
169
  data-disabled={disabled || undefined}
164
170
  data-has-description={resolvedHelperText ? true : undefined}
171
+ data-has-trailing={trailing != null ? true : undefined}
165
172
  data-size={size}
166
173
  >
167
174
  <BaseRadio.Root
168
175
  value={value}
169
176
  disabled={disabled}
170
177
  aria-label={ariaLabel}
171
- aria-labelledby={mergeAriaIds(ariaLabelledBy, labelId)}
178
+ aria-labelledby={mergeAriaIds(ariaLabelledBy, labelId, trailingId)}
172
179
  aria-describedby={mergeAriaIds(ariaDescribedBy, descriptionId)}
173
180
  data-size={size}
174
181
  className={radioClasses}
@@ -185,6 +192,11 @@ function RadioItem({
185
192
  </span>
186
193
  )}
187
194
  </div>
195
+ {trailing != null && (
196
+ <span id={trailingId} className={styles.trailing}>
197
+ {trailing}
198
+ </span>
199
+ )}
188
200
  </label>
189
201
  );
190
202
  }
@@ -210,7 +222,7 @@ const RadioGroupRoot = React.forwardRef<HTMLDivElement, RadioGroupProps>(functio
210
222
  helperText,
211
223
  error,
212
224
  size: sizeProp,
213
- variant = "default",
225
+ variant,
214
226
  wrapperClassName,
215
227
  groupClassName,
216
228
  groupId,
@@ -266,6 +278,7 @@ const RadioGroupRoot = React.forwardRef<HTMLDivElement, RadioGroupProps>(functio
266
278
  aria-describedby={mergeAriaIds(ariaDescribedBy, errorId, helperId)}
267
279
  data-size={size}
268
280
  data-invalid={hasError || undefined}
281
+ aria-invalid={hasError || undefined}
269
282
  className={groupClasses}
270
283
  >
271
284
  {children}
@@ -1,46 +1,43 @@
1
1
  @use "../../tokens/measurements.generated" as measurements;
2
2
  @use "../../tokens/variables" as *;
3
3
 
4
+ $_track-size: measurements.raw-space(6);
5
+ $_inline-fade: measurements.raw-space(48);
6
+ $_block-fade: measurements.raw-space(32);
7
+ $_mask-none: linear-gradient(black, black);
8
+
4
9
  .root {
5
- --fui-scrollarea-track-size: var(--fui-raw-space-6, #{measurements.raw-space(6)});
6
- --fui-scrollarea-inline-fade: var(--fui-raw-space-48, #{measurements.raw-space(48)});
7
- --fui-scrollarea-block-fade: var(--fui-raw-space-32, #{measurements.raw-space(32)});
8
- --_fui-scrollarea-track-size: var(
9
- --fui-scrollarea-track-size,
10
- var(--fui-raw-space-6, #{measurements.raw-space(6)})
11
- );
12
- --_fui-scrollarea-inline-fade: var(
13
- --fui-scrollarea-inline-fade,
14
- var(--fui-raw-space-48, #{measurements.raw-space(48)})
15
- );
16
- --_fui-scrollarea-block-fade: var(
17
- --fui-scrollarea-block-fade,
18
- var(--fui-raw-space-32, #{measurements.raw-space(32)})
19
- );
10
+ --_fui-scrollarea-track-size: var(--fui-raw-space-6, #{$_track-size});
11
+ --_fui-scrollarea-inline-fade: var(--fui-raw-space-48, #{$_inline-fade});
12
+ --_fui-scrollarea-block-fade: var(--fui-raw-space-32, #{$_block-fade});
20
13
 
21
14
  position: relative;
22
15
  overflow: hidden;
23
16
  }
24
17
 
25
18
  .viewport {
26
- --_fui-scrollarea-inline-mask: linear-gradient(black, black);
27
- --_fui-scrollarea-block-mask: linear-gradient(black, black);
19
+ --_fui-scrollarea-inline-mask: #{$_mask-none};
20
+ --_fui-scrollarea-block-mask: #{$_mask-none};
28
21
 
29
22
  inline-size: 100%;
30
23
  block-size: 100%;
31
24
  overflow: hidden;
32
25
  scrollbar-width: thin;
33
26
  scrollbar-color: transparent transparent;
34
- mask-image: var(--_fui-scrollarea-inline-mask), var(--_fui-scrollarea-block-mask);
27
+ mask-image:
28
+ var(--_fui-scrollarea-inline-mask, #{$_mask-none}),
29
+ var(--_fui-scrollarea-block-mask, #{$_mask-none});
35
30
  mask-repeat: no-repeat;
36
31
  mask-size: 100% 100%;
37
32
  mask-composite: intersect;
38
- -webkit-mask-image: var(--_fui-scrollarea-inline-mask), var(--_fui-scrollarea-block-mask);
33
+ -webkit-mask-image:
34
+ var(--_fui-scrollarea-inline-mask, #{$_mask-none}),
35
+ var(--_fui-scrollarea-block-mask, #{$_mask-none});
39
36
  -webkit-mask-composite: source-in;
40
37
 
41
38
  &::-webkit-scrollbar {
42
- width: var(--_fui-scrollarea-track-size);
43
- height: var(--_fui-scrollarea-track-size);
39
+ width: var(--_fui-scrollarea-track-size, #{$_track-size});
40
+ height: var(--_fui-scrollarea-track-size, #{$_track-size});
44
41
  }
45
42
 
46
43
  &::-webkit-scrollbar-track {
@@ -84,18 +81,18 @@
84
81
 
85
82
  .horizontal:not([data-scroll-x="none"]),
86
83
  .both:not([data-scroll-x="none"]) {
87
- scroll-padding-inline: var(--_fui-scrollarea-inline-fade);
84
+ scroll-padding-inline: var(--_fui-scrollarea-inline-fade, #{$_inline-fade});
88
85
  }
89
86
 
90
87
  .vertical:not([data-scroll-y="none"]),
91
88
  .both:not([data-scroll-y="none"]) {
92
- scroll-padding-block: var(--_fui-scrollarea-block-fade);
89
+ scroll-padding-block: var(--_fui-scrollarea-block-fade, #{$_block-fade});
93
90
  }
94
91
 
95
92
  .viewport[data-scroll-x="end"] {
96
93
  --_fui-scrollarea-inline-mask: linear-gradient(
97
94
  to right,
98
- black calc(100% - var(--_fui-scrollarea-inline-fade)),
95
+ black calc(100% - var(--_fui-scrollarea-inline-fade, #{$_inline-fade})),
99
96
  transparent
100
97
  );
101
98
  }
@@ -104,7 +101,7 @@
104
101
  --_fui-scrollarea-inline-mask: linear-gradient(
105
102
  to right,
106
103
  transparent,
107
- black var(--_fui-scrollarea-inline-fade)
104
+ black var(--_fui-scrollarea-inline-fade, #{$_inline-fade})
108
105
  );
109
106
  }
110
107
 
@@ -112,8 +109,8 @@
112
109
  --_fui-scrollarea-inline-mask: linear-gradient(
113
110
  to right,
114
111
  transparent,
115
- black var(--_fui-scrollarea-inline-fade),
116
- black calc(100% - var(--_fui-scrollarea-inline-fade)),
112
+ black var(--_fui-scrollarea-inline-fade, #{$_inline-fade}),
113
+ black calc(100% - var(--_fui-scrollarea-inline-fade, #{$_inline-fade})),
117
114
  transparent
118
115
  );
119
116
  }
@@ -122,14 +119,14 @@
122
119
  --_fui-scrollarea-inline-mask: linear-gradient(
123
120
  to right,
124
121
  transparent,
125
- black var(--_fui-scrollarea-inline-fade)
122
+ black var(--_fui-scrollarea-inline-fade, #{$_inline-fade})
126
123
  );
127
124
  }
128
125
 
129
126
  .viewport[data-scroll-x="start"]:dir(rtl) {
130
127
  --_fui-scrollarea-inline-mask: linear-gradient(
131
128
  to right,
132
- black calc(100% - var(--_fui-scrollarea-inline-fade)),
129
+ black calc(100% - var(--_fui-scrollarea-inline-fade, #{$_inline-fade})),
133
130
  transparent
134
131
  );
135
132
  }
@@ -137,7 +134,7 @@
137
134
  .viewport[data-scroll-y="end"] {
138
135
  --_fui-scrollarea-block-mask: linear-gradient(
139
136
  to bottom,
140
- black calc(100% - var(--_fui-scrollarea-block-fade)),
137
+ black calc(100% - var(--_fui-scrollarea-block-fade, #{$_block-fade})),
141
138
  transparent
142
139
  );
143
140
  }
@@ -146,7 +143,7 @@
146
143
  --_fui-scrollarea-block-mask: linear-gradient(
147
144
  to bottom,
148
145
  transparent,
149
- black var(--_fui-scrollarea-block-fade)
146
+ black var(--_fui-scrollarea-block-fade, #{$_block-fade})
150
147
  );
151
148
  }
152
149
 
@@ -154,8 +151,8 @@
154
151
  --_fui-scrollarea-block-mask: linear-gradient(
155
152
  to bottom,
156
153
  transparent,
157
- black var(--_fui-scrollarea-block-fade),
158
- black calc(100% - var(--_fui-scrollarea-block-fade)),
154
+ black var(--_fui-scrollarea-block-fade, #{$_block-fade}),
155
+ black calc(100% - var(--_fui-scrollarea-block-fade, #{$_block-fade})),
159
156
  transparent
160
157
  );
161
158
  }
@@ -37,9 +37,25 @@
37
37
  min-width: layout.measure("field-minimum");
38
38
  text-align: left;
39
39
 
40
+ &:focus-visible,
40
41
  &[data-popup-open] {
41
- border-color: var(--fui-field-border-focus, $fui-color-accent);
42
+ @include field.focus-state;
42
43
  }
44
+
45
+ .wrapper[data-invalid] & {
46
+ @include field.invalid-state;
47
+
48
+ // Focused while invalid keeps the danger edge and takes the danger ring,
49
+ // the same pairing Input and Textarea render. Without it the ring stays
50
+ // accent-coloured and the control reads half-valid at the moment the user
51
+ // is actually in it.
52
+ &:focus-visible,
53
+ &[data-popup-open] {
54
+ @include field.invalid-focus-state;
55
+ }
56
+ }
57
+
58
+ @include high-contrast-outline;
43
59
  }
44
60
 
45
61
  // Trigger size variants
@@ -94,7 +110,7 @@
94
110
  &:disabled,
95
111
  &[data-disabled] {
96
112
  background-color: transparent;
97
- opacity: 0.5;
113
+ opacity: var(--fui-opacity-disabled, #{$fui-opacity-disabled});
98
114
  }
99
115
  }
100
116
 
@@ -169,7 +185,7 @@
169
185
 
170
186
  // Positioner — z-index must exceed Dialog positioner (51)
171
187
  .positioner {
172
- z-index: 52;
188
+ z-index: var(--fui-overlay-layer-anchored, #{$fui-overlay-layer-anchored});
173
189
  outline: none;
174
190
  }
175
191
 
@@ -253,21 +269,6 @@
253
269
  @include popup.group-label;
254
270
  }
255
271
 
256
- // ============================================
257
- // Accessibility: High Contrast Mode
258
- // ============================================
259
-
260
- @media (prefers-contrast: more) {
261
- .trigger {
262
- border-width: var(--fui-stroke-default, 2px);
263
- border-color: var(--fui-text-primary, $fui-text-primary);
264
-
265
- &[data-popup-open] {
266
- border-color: var(--fui-color-accent, $fui-color-accent);
267
- }
268
- }
269
- }
270
-
271
272
  // ============================================
272
273
  // Accessibility: Reduced Motion
273
274
  // ============================================
@@ -4,10 +4,7 @@ import * as React from "react";
4
4
  import { Select as BaseSelect } from "@base-ui/react/select";
5
5
  import { useResolvedControlSize } from "../ComponentDefaults";
6
6
  import { mergeAriaIds, useFormFieldIds, type FormFieldProps } from "../../utils/aria";
7
- import {
8
- POPUP_OFFSET_PX,
9
- resolvePopupViewportRows,
10
- } from "../../recipes/popup";
7
+ import { POPUP_OFFSET_PX, resolvePopupViewportRows } from "../../recipes/popup";
11
8
  import styles from "./Select.module.scss";
12
9
 
13
10
  // ============================================
@@ -16,7 +13,7 @@ import styles from "./Select.module.scss";
16
13
 
17
14
  export type SelectValue = string;
18
15
 
19
- export type SelectVariant = "field" | "ghost";
16
+ export type SelectVariant = "outline" | "ghost";
20
17
 
21
18
  export interface SelectOption {
22
19
  value: SelectValue;
@@ -68,10 +65,10 @@ export interface SelectProps extends FormFieldProps {
68
65
  /** Size variant.
69
66
  * @default "md" */
70
67
  size?: "sm" | "md" | "lg";
71
- /** Visual treatment. `ghost` drops the field shell for a compact, borderless
72
- * control — for toolbars and dense rows, where a bordered field reads as a
73
- * form. Pair with `size="sm"`.
74
- * @default "field" */
68
+ /** Chrome. `outline` is the bordered field shell; `ghost` drops it for a
69
+ * compact, borderless control — for toolbars and dense rows, where a bordered
70
+ * field reads as a form. Pair with `size="sm"`.
71
+ * @default "outline" */
75
72
  variant?: SelectVariant;
76
73
  /** Wrapper class name */
77
74
  className?: string;
@@ -163,6 +160,9 @@ interface SelectContextValue {
163
160
  unregisterItem: (value: SelectValue) => void;
164
161
  size: "sm" | "md" | "lg";
165
162
  variant: SelectVariant;
163
+ /** Mirrors the wrapper's `data-invalid` onto the trigger as `aria-invalid`,
164
+ * so assistive tech hears the state the danger edge is painting. */
165
+ invalid?: boolean;
166
166
  /** Items built from the `options` prop, so a custom composition can put the
167
167
  * trigger where it wants without having to re-render the list itself — and
168
168
  * without losing whatever the root knows about an option that a bare label
@@ -175,7 +175,7 @@ const SelectContext = React.createContext<SelectContextValue>({
175
175
  registerItem: () => {},
176
176
  unregisterItem: () => {},
177
177
  size: "md",
178
- variant: "field",
178
+ variant: "outline",
179
179
  optionItems: null,
180
180
  });
181
181
 
@@ -234,7 +234,7 @@ const SelectRoot = React.forwardRef<HTMLDivElement, SelectProps>(function Select
234
234
  helperText,
235
235
  error,
236
236
  size: sizeProp,
237
- variant = "field",
237
+ variant = "outline",
238
238
  className,
239
239
  }: SelectProps,
240
240
  ref
@@ -320,6 +320,12 @@ const SelectRoot = React.forwardRef<HTMLDivElement, SelectProps>(function Select
320
320
  return merged;
321
321
  }, [declaredItems, items]);
322
322
 
323
+ const { helperId, errorId, hasError, errorMessage } = useFormFieldIds("select", {
324
+ label,
325
+ helperText,
326
+ error,
327
+ });
328
+
323
329
  const contextValue = React.useMemo(
324
330
  () => ({
325
331
  placeholder,
@@ -330,6 +336,7 @@ const SelectRoot = React.forwardRef<HTMLDivElement, SelectProps>(function Select
330
336
  size,
331
337
  variant,
332
338
  optionItems,
339
+ invalid: hasError,
333
340
  }),
334
341
  [
335
342
  placeholder,
@@ -340,27 +347,18 @@ const SelectRoot = React.forwardRef<HTMLDivElement, SelectProps>(function Select
340
347
  size,
341
348
  variant,
342
349
  optionItems,
350
+ hasError,
343
351
  ]
344
352
  );
345
353
 
346
- const { helperId, errorId, hasError, errorMessage } = useFormFieldIds("select", {
347
- label,
348
- helperText,
349
- error,
350
- });
351
-
352
- const wrapperClasses = [
353
- styles.wrapper,
354
- variant === "ghost" && styles.wrapperGhost,
355
- className,
356
- ]
354
+ const wrapperClasses = [styles.wrapper, variant === "ghost" && styles.wrapperGhost, className]
357
355
  .filter(Boolean)
358
356
  .join(" ");
359
357
  const helperClasses = [styles.helper, hasError && styles.helperError].filter(Boolean).join(" ");
360
358
 
361
359
  return (
362
360
  <SelectContext.Provider value={contextValue}>
363
- <div ref={ref} className={wrapperClasses}>
361
+ <div ref={ref} className={wrapperClasses} data-invalid={hasError || undefined}>
364
362
  <BaseSelect.Root
365
363
  value={value !== undefined || readOnly ? selectedValue : undefined}
366
364
  defaultValue={value === undefined && !readOnly ? defaultValue : undefined}
@@ -427,7 +425,11 @@ function SelectTrigger({
427
425
  (placeholderText ? <span className={styles.placeholder}>{placeholderText}</span> : null);
428
426
 
429
427
  return (
430
- <BaseSelect.Trigger {...htmlProps} className={classes}>
428
+ <BaseSelect.Trigger
429
+ {...htmlProps}
430
+ className={classes}
431
+ aria-invalid={context.invalid || undefined}
432
+ >
431
433
  {children ?? (
432
434
  <>
433
435
  {icon && <span className={styles.triggerIcon}>{icon}</span>}
@@ -9,7 +9,7 @@
9
9
  "exportName": "Separator",
10
10
  "propsSummary": [
11
11
  "orientation: horizontal|vertical (default: horizontal)",
12
- "spacing: none|sm|md|lg (default: none)",
12
+ "gap: none|xs|sm|md|lg|xl (default: none)",
13
13
  "soft: boolean (default: false)",
14
14
  "label: string",
15
15
  "style: object"
@@ -22,12 +22,12 @@
22
22
  "required": false,
23
23
  "values": ["horizontal", "vertical"]
24
24
  },
25
- "spacing": {
25
+ "gap": {
26
26
  "type": "enum",
27
- "description": "Margin around the separator",
27
+ "description": "Breathing room around the rule",
28
28
  "default": "none",
29
29
  "required": false,
30
- "values": ["none", "sm", "md", "lg"]
30
+ "values": ["none", "xs", "sm", "md", "lg", "xl"]
31
31
  },
32
32
  "soft": {
33
33
  "type": "boolean",
@@ -72,12 +72,12 @@
72
72
  {
73
73
  "name": "Default",
74
74
  "description": "Standard and soft weights, one above the other.",
75
- "code": "import { Box } from '@/components/Box';\nimport { Separator } from '@/components/Separator';\nimport { Text } from '@/components/Text';\n\n<Box width=\"100%\">\n <Text>Standard weight</Text>\n <Separator spacing=\"md\" />\n <Text>Soft weight</Text>\n <Separator soft spacing=\"md\" />\n <Text>Below</Text>\n</Box>"
75
+ "code": "import { Box } from '@/components/Box';\nimport { Separator } from '@/components/Separator';\nimport { Text } from '@/components/Text';\n\n<Box width=\"100%\">\n <Text>Standard weight</Text>\n <Separator gap=\"md\" />\n <Text>Soft weight</Text>\n <Separator soft gap=\"md\" />\n <Text>Below</Text>\n</Box>"
76
76
  },
77
77
  {
78
78
  "name": "With Label",
79
79
  "description": "A label sits inside the rule for a major break.",
80
- "code": "import { Box } from '@/components/Box';\nimport { Separator } from '@/components/Separator';\nimport { Text } from '@/components/Text';\n\n<Box width=\"100%\">\n <Text>First section</Text>\n <Separator label=\"Or\" spacing=\"md\" />\n <Text>Second section</Text>\n</Box>"
80
+ "code": "import { Box } from '@/components/Box';\nimport { Separator } from '@/components/Separator';\nimport { Text } from '@/components/Text';\n\n<Box width=\"100%\">\n <Text>First section</Text>\n <Separator label=\"Or\" gap=\"md\" />\n <Text>Second section</Text>\n</Box>"
81
81
  },
82
82
  {
83
83
  "name": "Vertical",
@@ -85,9 +85,9 @@
85
85
  "code": "import { Box } from '@/components/Box';\nimport { Separator } from '@/components/Separator';\nimport { Stack } from '@/components/Stack';\nimport { Text } from '@/components/Text';\n\n<Stack direction=\"row\" align=\"center\" gap=\"md\" style={{ height: '40px' }}>\n <Text>Item 1</Text>\n <Separator orientation=\"vertical\" />\n <Text>Item 2</Text>\n <Separator orientation=\"vertical\" />\n <Text>Item 3</Text>\n</Stack>"
86
86
  },
87
87
  {
88
- "name": "Spacing Options",
89
- "description": "spacing sets the breathing room around the rule.",
90
- "code": "import { Box } from '@/components/Box';\nimport { Separator } from '@/components/Separator';\nimport { Text } from '@/components/Text';\n\n<Box width=\"100%\">\n <Text>none</Text>\n <Separator spacing=\"none\" />\n <Text>sm</Text>\n <Separator spacing=\"sm\" />\n <Text>md</Text>\n <Separator spacing=\"md\" />\n <Text>lg</Text>\n <Separator spacing=\"lg\" />\n <Text>End</Text>\n</Box>"
88
+ "name": "Gap Options",
89
+ "description": "gap sets the breathing room around the rule.",
90
+ "code": "import { Box } from '@/components/Box';\nimport { Separator } from '@/components/Separator';\nimport { Text } from '@/components/Text';\n\n<Box width=\"100%\">\n <Text>none</Text>\n <Separator gap=\"none\" />\n <Text>sm</Text>\n <Separator gap=\"sm\" />\n <Text>md</Text>\n <Separator gap=\"md\" />\n <Text>lg</Text>\n <Separator gap=\"lg\" />\n <Text>End</Text>\n</Box>"
91
91
  }
92
92
  ],
93
93
  "relations": [
@@ -100,7 +100,7 @@
100
100
  "contract": {
101
101
  "propsSummary": [
102
102
  "orientation: horizontal|vertical - direction",
103
- "spacing: none|sm|md|lg - margin",
103
+ "gap: none|xs|sm|md|lg|xl - breathing room",
104
104
  "soft: boolean - lighter appearance",
105
105
  "label: string - centered label text"
106
106
  ],
@@ -1,6 +1,7 @@
1
1
  @use "../../recipes/layout";
2
2
  @use "../../recipes/typography";
3
3
  @use "../../tokens/variables" as *;
4
+ @use "../../tokens/measurements.generated" as measurements;
4
5
 
5
6
  .separator {
6
7
  flex-shrink: 0;
@@ -9,25 +10,25 @@
9
10
 
10
11
  // Horizontal (default)
11
12
  .horizontal {
12
- width: 100%;
13
+ inline-size: 100%;
13
14
 
14
15
  .line {
15
16
  display: block;
16
- width: 100%;
17
- height: var(--fui-stroke-hairline, 1px);
17
+ inline-size: 100%;
18
+ block-size: var(--fui-stroke-hairline, #{$fui-stroke-hairline});
18
19
  background-color: var(--fui-border, $fui-border);
19
20
  }
20
21
  }
21
22
 
22
23
  // Vertical
23
24
  .vertical {
24
- height: auto;
25
+ block-size: auto;
25
26
  align-self: stretch;
26
27
 
27
28
  .line {
28
29
  display: block;
29
- width: var(--fui-stroke-hairline, 1px);
30
- height: 100%;
30
+ inline-size: var(--fui-stroke-hairline, #{$fui-stroke-hairline});
31
+ block-size: 100%;
31
32
  background-color: var(--fui-border, $fui-border);
32
33
  }
33
34
  }
@@ -43,7 +44,7 @@
43
44
  &::after {
44
45
  content: "";
45
46
  flex: 1;
46
- height: var(--fui-stroke-hairline, 1px);
47
+ block-size: var(--fui-stroke-hairline, #{$fui-stroke-hairline});
47
48
  background-color: var(--fui-border, $fui-border);
48
49
  }
49
50
  }
@@ -52,51 +53,34 @@
52
53
  @include typography.role("ui-compact");
53
54
 
54
55
  color: var(--fui-text-tertiary, $fui-text-tertiary);
55
- text-transform: uppercase;
56
56
  white-space: nowrap;
57
57
  }
58
58
 
59
- // Spacing variants
60
- .spacingNone {
61
- padding: 0;
59
+ // Gap: breathing room on the cross axis of the rule.
60
+ .gapNone {
61
+ padding: var(--fui-raw-space-0, #{measurements.raw-space(0)});
62
62
  }
63
63
 
64
- .spacingSm {
65
- &.horizontal {
66
- padding-block: layout.gap("sm");
67
- }
68
-
69
- &.vertical {
70
- padding-inline: layout.gap("sm");
71
- }
72
- }
73
-
74
- .spacingMd {
75
- &.horizontal {
76
- padding-block: layout.gap("md");
77
- }
78
-
79
- &.vertical {
80
- padding-inline: layout.gap("md");
81
- }
82
- }
83
-
84
- .spacingLg {
85
- &.horizontal {
86
- padding-block: layout.gap("lg");
87
- }
64
+ @each $gap, $class in ("xs": "gapXs", "sm": "gapSm", "md": "gapMd", "lg": "gapLg", "xl": "gapXl") {
65
+ .#{$class} {
66
+ &.horizontal,
67
+ &.withLabel {
68
+ padding-block: layout.gap($gap);
69
+ }
88
70
 
89
- &.vertical {
90
- padding-inline: layout.gap("lg");
71
+ &.vertical {
72
+ padding-inline: layout.gap($gap);
73
+ }
91
74
  }
92
75
  }
93
76
 
94
- // Soft variant (lighter color)
77
+ // Soft: half-weight rule for quieter breaks. Shares the disabled opacity step
78
+ // (0.5) — there is no dedicated soft-rule token yet.
95
79
  .soft {
96
- opacity: 0.5;
80
+ opacity: var(--fui-opacity-disabled, #{$fui-opacity-disabled});
97
81
 
98
82
  &.withLabel::before,
99
83
  &.withLabel::after {
100
- opacity: 0.5;
84
+ opacity: var(--fui-opacity-disabled, #{$fui-opacity-disabled});
101
85
  }
102
86
  }