@usefragments/ui 1.7.0 → 2.0.0

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
@@ -67,27 +67,27 @@
67
67
  {
68
68
  "name": "Default",
69
69
  "description": "Confirming action sits last in the row.",
70
- "code": "<ButtonGroup>\n <Button variant=\"secondary\">Cancel</Button>\n <Button variant=\"primary\">Save</Button>\n</ButtonGroup>"
70
+ "code": "<ButtonGroup>\n <Button variant=\"soft\">Cancel</Button>\n <Button variant=\"solid\">Save</Button>\n</ButtonGroup>"
71
71
  },
72
72
  {
73
73
  "name": "Spacing",
74
74
  "description": "Four gap steps, from touching to airy.",
75
- "code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"column\" gap=\"md\">\n <ButtonGroup gap=\"none\">\n <Button variant=\"secondary\" size=\"sm\">None</Button>\n <Button variant=\"secondary\" size=\"sm\">Gap</Button>\n </ButtonGroup>\n <ButtonGroup gap=\"xs\">\n <Button variant=\"secondary\" size=\"sm\">XS</Button>\n <Button variant=\"secondary\" size=\"sm\">Gap</Button>\n </ButtonGroup>\n <ButtonGroup gap=\"sm\">\n <Button variant=\"secondary\" size=\"sm\">SM</Button>\n <Button variant=\"secondary\" size=\"sm\">Gap</Button>\n </ButtonGroup>\n <ButtonGroup gap=\"md\">\n <Button variant=\"secondary\" size=\"sm\">MD</Button>\n <Button variant=\"secondary\" size=\"sm\">Gap</Button>\n </ButtonGroup>\n</Stack>"
75
+ "code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"column\" gap=\"md\">\n <ButtonGroup gap=\"none\">\n <Button variant=\"soft\" size=\"sm\">None</Button>\n <Button variant=\"soft\" size=\"sm\">Gap</Button>\n </ButtonGroup>\n <ButtonGroup gap=\"xs\">\n <Button variant=\"soft\" size=\"sm\">XS</Button>\n <Button variant=\"soft\" size=\"sm\">Gap</Button>\n </ButtonGroup>\n <ButtonGroup gap=\"sm\">\n <Button variant=\"soft\" size=\"sm\">SM</Button>\n <Button variant=\"soft\" size=\"sm\">Gap</Button>\n </ButtonGroup>\n <ButtonGroup gap=\"md\">\n <Button variant=\"soft\" size=\"sm\">MD</Button>\n <Button variant=\"soft\" size=\"sm\">Gap</Button>\n </ButtonGroup>\n</Stack>"
76
76
  },
77
77
  {
78
78
  "name": "Alignment",
79
79
  "description": "Pins the row to the left, centre, or right of its container.",
80
- "code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"column\" gap=\"md\">\n <ButtonGroup align=\"start\">\n <Button variant=\"secondary\" size=\"sm\">Start</Button>\n <Button variant=\"secondary\" size=\"sm\">Aligned</Button>\n </ButtonGroup>\n <ButtonGroup align=\"center\">\n <Button variant=\"secondary\" size=\"sm\">Center</Button>\n <Button variant=\"secondary\" size=\"sm\">Aligned</Button>\n </ButtonGroup>\n <ButtonGroup align=\"end\">\n <Button variant=\"secondary\" size=\"sm\">End</Button>\n <Button variant=\"secondary\" size=\"sm\">Aligned</Button>\n </ButtonGroup>\n</Stack>"
80
+ "code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"column\" gap=\"md\">\n <ButtonGroup align=\"start\">\n <Button variant=\"soft\" size=\"sm\">Start</Button>\n <Button variant=\"soft\" size=\"sm\">Aligned</Button>\n </ButtonGroup>\n <ButtonGroup align=\"center\">\n <Button variant=\"soft\" size=\"sm\">Center</Button>\n <Button variant=\"soft\" size=\"sm\">Aligned</Button>\n </ButtonGroup>\n <ButtonGroup align=\"end\">\n <Button variant=\"soft\" size=\"sm\">End</Button>\n <Button variant=\"soft\" size=\"sm\">Aligned</Button>\n </ButtonGroup>\n</Stack>"
81
81
  },
82
82
  {
83
83
  "name": "Wrapping",
84
84
  "description": "Buttons drop to a second line instead of overflowing.",
85
- "code": "<ButtonGroup wrap>\n <Button variant=\"secondary\" size=\"sm\">Approve</Button>\n <Button variant=\"secondary\" size=\"sm\">Request changes</Button>\n <Button variant=\"secondary\" size=\"sm\">Reassign reviewer</Button>\n <Button variant=\"secondary\" size=\"sm\">Move to backlog</Button>\n <Button variant=\"secondary\" size=\"sm\">Archive</Button>\n</ButtonGroup>"
85
+ "code": "<ButtonGroup wrap>\n <Button variant=\"soft\" size=\"sm\">Approve</Button>\n <Button variant=\"soft\" size=\"sm\">Request changes</Button>\n <Button variant=\"soft\" size=\"sm\">Reassign reviewer</Button>\n <Button variant=\"soft\" size=\"sm\">Move to backlog</Button>\n <Button variant=\"soft\" size=\"sm\">Archive</Button>\n</ButtonGroup>"
86
86
  },
87
87
  {
88
88
  "name": "Form Actions",
89
89
  "description": "Right-aligned pair, named for screen readers.",
90
- "code": "<ButtonGroup align=\"end\" role=\"group\" aria-label=\"Form actions\">\n <Button variant=\"ghost\">Cancel</Button>\n <Button variant=\"primary\">Submit</Button>\n</ButtonGroup>"
90
+ "code": "<ButtonGroup align=\"end\" role=\"group\" aria-label=\"Form actions\">\n <Button variant=\"ghost\">Cancel</Button>\n <Button variant=\"solid\">Submit</Button>\n</ButtonGroup>"
91
91
  }
92
92
  ],
93
93
  "relations": [
@@ -1,3 +1,5 @@
1
+ @use "../../tokens/variables" as *;
2
+ @use "../../tokens/measurements.generated" as measurements;
1
3
  @use "../../recipes/layout";
2
4
 
3
5
  .group {
@@ -7,21 +9,21 @@
7
9
 
8
10
  // Gap sizes
9
11
  .gapNone {
10
- gap: 0;
12
+ gap: var(--fui-raw-space-0, #{measurements.raw-space(0)});
11
13
 
12
14
  > * {
13
15
  position: relative;
14
16
  }
15
17
 
16
18
  > *:not(:first-child) {
17
- margin-inline-start: calc(-1 * var(--fui-stroke-hairline, 1px));
18
- border-top-left-radius: 0;
19
- border-bottom-left-radius: 0;
19
+ margin-inline-start: calc(-1 * var(--fui-stroke-hairline, #{$fui-stroke-hairline}));
20
+ border-start-start-radius: var(--fui-radius-none, #{$fui-radius-none});
21
+ border-end-start-radius: var(--fui-radius-none, #{$fui-radius-none});
20
22
  }
21
23
 
22
24
  > *:not(:last-child) {
23
- border-top-right-radius: 0;
24
- border-bottom-right-radius: 0;
25
+ border-start-end-radius: var(--fui-radius-none, #{$fui-radius-none});
26
+ border-end-end-radius: var(--fui-radius-none, #{$fui-radius-none});
25
27
  }
26
28
 
27
29
  > *:hover,
@@ -1,8 +1,11 @@
1
+ @use "../../tokens/variables" as *;
2
+ @use "../../tokens/measurements.generated" as measurements;
3
+
1
4
  // Deliberately unlayered: this proves ordinary consumer CSS can customize a
2
5
  // layered Card without specificity escalation or priority hacks.
3
6
  .consumerOverride {
4
7
  --fui-card-consumer-fixture: 1;
5
8
 
6
- padding: 29px;
7
- background-color: rgb(9 87 73);
9
+ padding: var(--fui-raw-space-32, #{measurements.raw-space(32)});
10
+ background-color: var(--fui-color-success-bg, #{$fui-color-success-bg});
8
11
  }
@@ -1,5 +1,6 @@
1
1
  @use "../../tokens/variables" as *;
2
2
  @use "../../tokens/mixins" as *;
3
+ @use "../../tokens/measurements.generated" as measurements;
3
4
  @use "../../recipes/action" as action;
4
5
  @use "../../recipes/surface" as surface;
5
6
  @use "../../recipes/typography" as typography;
@@ -7,13 +8,8 @@
7
8
  // The private inset channels are element-scoped signals between a card's own
8
9
  // classes, but custom properties inherit by default — a Card nested inside
9
10
  // another Card (docs previews, dashboard panels) would receive the outer
10
- // card's forced/requested inset and lose its padding. Register them as
11
+ // card's requested inset and lose its padding. Register them as
11
12
  // non-inheriting so each card resolves only its own channels.
12
- @property --_card-root-forced-inset {
13
- syntax: "*";
14
- inherits: false;
15
- }
16
-
17
13
  @property --_card-root-requested-inset {
18
14
  syntax: "*";
19
15
  inherits: false;
@@ -24,15 +20,33 @@
24
20
  inherits: false;
25
21
  }
26
22
 
23
+ // The earned-moment capsule: a tone-tinted hairline, a radial wash from the
24
+ // top-right corner and the softer capsule radius. Any variant can wear it; the
25
+ // tone decides the colour. Reserve it for the few surfaces that earn emphasis
26
+ // (demo banner, upgrade panel, onboarding resume), never for routine content.
27
+ @mixin _capsule($line, $wash) {
28
+ position: relative;
29
+ overflow: hidden;
30
+ border-color: $line;
31
+ border-radius: var(--fui-card-accent-radius, #{$fui-card-accent-radius});
32
+ box-shadow: none;
33
+
34
+ &::before {
35
+ content: "";
36
+ position: absolute;
37
+ inset: 0;
38
+ pointer-events: none;
39
+ background: radial-gradient(90% 70% at 100% -10%, $wash, transparent 62%);
40
+ }
41
+ }
42
+
27
43
  @layer fui.components {
28
44
  .card {
29
45
  @include surface-elevated;
30
46
  @include typography.role("body-compact");
47
+ @include high-contrast-outline;
31
48
 
32
- padding: var(
33
- --_card-root-forced-inset,
34
- var(--_card-root-requested-inset, #{surface.inset("default")})
35
- );
49
+ padding: var(--_card-root-requested-inset, #{surface.inset("default")});
36
50
  color: var(--fui-text-primary, $fui-text-primary);
37
51
  background-color: var(--fui-card-bg, var(--fui-bg-elevated, #{$fui-bg-elevated}));
38
52
  border-color: var(--fui-card-border, var(--fui-border, #{$fui-border}));
@@ -43,34 +57,24 @@
43
57
  border-color var(--fui-transition-fast, $fui-transition-fast),
44
58
  background-color var(--fui-transition-fast, $fui-transition-fast),
45
59
  transform var(--fui-transition-fast, $fui-transition-fast);
46
- }
47
60
 
48
- // Variants
49
- .default {
50
- background-color: var(--fui-card-bg, var(--fui-bg-elevated, #{$fui-bg-elevated}));
51
- border-color: var(--fui-card-border, var(--fui-border, #{$fui-border}));
52
- box-shadow: var(--fui-card-shadow, none);
53
- }
54
-
55
- .outlined {
56
- background-color: transparent;
57
- border-color: var(
58
- --fui-card-outlined-border,
59
- var(--fui-card-border, var(--fui-border-strong, #{$fui-border-strong}))
60
- );
61
- box-shadow: none;
61
+ // A divided header paints full-bleed chrome; clip it to the card radius.
62
+ &:has(> .headerDivided) {
63
+ overflow: hidden;
64
+ }
62
65
  }
63
66
 
64
- .elevated {
67
+ // Variants — the surface only. Colour is the tone's job.
68
+ .solid {
65
69
  background-color: var(--fui-card-bg, var(--fui-bg-elevated, #{$fui-bg-elevated}));
66
70
  border-color: var(--fui-card-border, var(--fui-border, #{$fui-border}));
67
- box-shadow: var(--fui-card-elevated-shadow, var(--fui-card-shadow, none));
71
+ box-shadow: var(--fui-card-shadow, none);
68
72
  }
69
73
 
70
- // Compact metric tile for dashboard grids. It uses the same card radius and
71
- // hairline model as panels, with a quieter fill so adjacent metric tiles read
72
- // as one dashboard system rather than separate hero cards.
73
- .stat {
74
+ // Quiet tint fill: metric tiles and dashboard panels read as one system
75
+ // rather than separate hero cards. Panels add `padding="none"` and let
76
+ // `Card.Header divided` + `Card.Body padding` own their inset.
77
+ .soft {
74
78
  background-color: var(
75
79
  --fui-card-stat-bg,
76
80
  var(
@@ -85,87 +89,36 @@
85
89
  box-shadow: var(--fui-card-stat-shadow, var(--fui-card-shadow, none));
86
90
  }
87
91
 
88
- // Hairline-bordered panel with no root inset — designed for compound use
89
- // with `Card.Header divided` + `Card.Body` inside dashboards. Each region
90
- // owns its spacing so panel headers can be full-bleed with a hairline
91
- // divider underneath. Uses the same surface-agnostic overlay as `.stat`.
92
- // The private forced-inset channel makes this deterministic regardless of the
93
- // `padding` prop or DOM class order.
94
- .panel {
95
- --_card-root-forced-inset: #{surface.inset("panel")};
96
-
97
- background-color: var(
98
- --fui-panel-bg,
99
- var(
100
- --fui-card-bg,
101
- color-mix(in srgb, var(--fui-text-primary, #{$fui-text-primary}) 2%, transparent)
102
- )
103
- );
92
+ .outline {
93
+ background-color: transparent;
104
94
  border-color: var(
105
- --fui-panel-border,
106
- var(--fui-card-border, var(--fui-border, #{$fui-border}))
95
+ --fui-card-outlined-border,
96
+ var(--fui-card-border, var(--fui-border-strong, #{$fui-border-strong}))
107
97
  );
108
- box-shadow: var(--fui-card-panel-shadow, var(--fui-card-shadow, none));
109
- overflow: hidden;
110
- }
111
-
112
- // Accent capsule — the earned-moment surface (demo banner, upgrade panel,
113
- // onboarding resume capsule). Accent-tinted hairline, radial accent wash
114
- // from the top-right corner. Radius matches the default card.
115
- .accent {
116
- position: relative;
117
- overflow: hidden;
118
- background-color: var(--fui-card-accent-bg, #{$fui-card-accent-bg});
119
- border-color: var(--fui-card-accent-border, #{$fui-card-accent-border});
120
- border-radius: var(--fui-card-accent-radius, #{$fui-card-accent-radius});
121
98
  box-shadow: none;
99
+ }
122
100
 
123
- &::before {
124
- content: "";
125
- position: absolute;
126
- inset: 0;
127
- pointer-events: none;
128
- background: radial-gradient(
129
- 90% 70% at 100% -10%,
130
- color-mix(in srgb, var(--fui-color-accent, #{$fui-color-accent}) 13%, transparent),
131
- transparent 62%
132
- );
133
- }
101
+ // Tones — chroma is earned by state: accent = the moment, danger = a merge
102
+ // is held, warning = enforcement lapsed. Neutral is the absence of a class.
103
+ .toneAccent {
104
+ @include _capsule(
105
+ var(--fui-card-accent-border, #{$fui-card-accent-border}),
106
+ color-mix(in srgb, var(--fui-color-accent, #{$fui-color-accent}) 13%, transparent)
107
+ );
134
108
  }
135
109
 
136
- // Accent tones — same capsule, state-coloured hairline + wash. Chroma is
137
- // earned by state (SPEC §4.4): danger = a merge is held, warning =
138
- // enforcement lapsed, neutral = waiting (no wash at all).
139
110
  .toneDanger {
140
- border-color: var(--fui-color-danger-border, #{$fui-color-danger-border});
141
-
142
- &::before {
143
- background: radial-gradient(
144
- 90% 70% at 100% -10%,
145
- var(--fui-color-danger-bg, #{$fui-color-danger-bg}),
146
- transparent 62%
147
- );
148
- }
111
+ @include _capsule(
112
+ var(--fui-color-danger-border, #{$fui-color-danger-border}),
113
+ var(--fui-color-danger-bg, #{$fui-color-danger-bg})
114
+ );
149
115
  }
150
116
 
151
117
  .toneWarning {
152
- border-color: var(--fui-color-warning-border, #{$fui-color-warning-border});
153
-
154
- &::before {
155
- background: radial-gradient(
156
- 90% 70% at 100% -10%,
157
- var(--fui-color-warning-bg, #{$fui-color-warning-bg}),
158
- transparent 62%
159
- );
160
- }
161
- }
162
-
163
- .toneNeutral {
164
- border-color: var(--fui-border, #{$fui-border});
165
-
166
- &::before {
167
- content: none;
168
- }
118
+ @include _capsule(
119
+ var(--fui-color-warning-border, #{$fui-color-warning-border}),
120
+ var(--fui-color-warning-bg, #{$fui-color-warning-bg})
121
+ );
169
122
  }
170
123
 
171
124
  // Padding
@@ -211,32 +164,35 @@
211
164
  background-color: var(--fui-card-active-bg, var(--fui-bg-active, $fui-bg-active));
212
165
  box-shadow: var(
213
166
  --fui-card-active-shadow,
214
- inset 0 1px 2px color-mix(in srgb, black 12%, transparent)
167
+ inset 0 var(--fui-stroke-hairline, #{$fui-stroke-hairline})
168
+ var(--fui-raw-space-2, #{measurements.raw-space(2)})
169
+ color-mix(in srgb, var(--fui-text-primary, #{$fui-text-primary}) 12%, transparent)
215
170
  );
216
171
  }
217
172
  }
218
173
 
219
174
  .header {
220
175
  display: grid;
221
- gap: var(--fui-raw-space-4, 4px);
222
- margin-bottom: var(--fui-raw-space-16, 16px);
176
+ gap: var(--fui-raw-space-4, #{measurements.raw-space(4)});
177
+ margin-bottom: var(--fui-raw-space-16, #{measurements.raw-space(16)});
223
178
  }
224
179
 
225
180
  // Full-bleed panel-header region on the control-md track, canonical inset,
226
181
  // and a hairline bottom divider. No trailing margin — it sits flush above the
227
- // panel body, which manages its own padding. Use inside `variant="panel"`.
182
+ // panel body, which manages its own padding. Use with `padding="none"`.
228
183
  // Title cluster (left) and trailing controls (right) pin to opposite edges —
229
184
  // wrap Title + Description in a stack so space-between has two children.
230
185
  .headerDivided {
231
186
  display: flex;
232
187
  align-items: center;
233
188
  justify-content: space-between;
234
- gap: var(--fui-raw-space-12, 12px);
189
+ gap: var(--fui-raw-space-12, #{measurements.raw-space(12)});
235
190
  min-height: #{action.track("md")};
236
191
  padding: #{surface.inset("compact")};
237
- margin-bottom: 0;
192
+ margin-bottom: var(--fui-raw-space-0, #{measurements.raw-space(0)});
238
193
  background-color: var(--fui-card-header-bg, var(--fui-bg-subtle, #{$fui-bg-subtle}));
239
- border-bottom: var(--fui-stroke-hairline, 1px) solid var(--fui-border, $fui-border);
194
+ border-bottom: var(--fui-stroke-hairline, #{$fui-stroke-hairline}) solid
195
+ var(--fui-border, $fui-border);
240
196
 
241
197
  // Multi-line copy: top-align trailing controls with the title line.
242
198
  &:has(.description) {
@@ -247,21 +203,21 @@
247
203
  .title {
248
204
  @include typography.role("title-sm");
249
205
 
250
- margin: 0;
206
+ margin: var(--fui-raw-space-0, #{measurements.raw-space(0)});
251
207
  color: var(--fui-text-primary, $fui-text-primary);
252
208
  }
253
209
 
254
210
  .description {
255
211
  @include typography.role("body-compact");
256
212
 
257
- margin: 0;
213
+ margin: var(--fui-raw-space-0, #{measurements.raw-space(0)});
258
214
  color: var(--fui-text-secondary, $fui-text-secondary);
259
215
  }
260
216
 
261
217
  .body {
262
218
  @include typography.role("body-compact");
263
219
 
264
- padding: var(--_card-body-inset, 0);
220
+ padding: var(--_card-body-inset, var(--fui-raw-space-0, #{measurements.raw-space(0)}));
265
221
  color: var(--fui-text-primary, $fui-text-primary);
266
222
  }
267
223
 
@@ -284,10 +240,11 @@
284
240
  .footer {
285
241
  display: flex;
286
242
  align-items: center;
287
- gap: var(--fui-raw-space-8, 8px);
288
- margin-top: var(--fui-raw-space-16, 16px);
289
- padding-top: var(--fui-raw-space-16, 16px);
290
- border-top: var(--fui-stroke-hairline, 1px) solid var(--fui-border, $fui-border);
243
+ gap: var(--fui-raw-space-8, #{measurements.raw-space(8)});
244
+ margin-top: var(--fui-raw-space-16, #{measurements.raw-space(16)});
245
+ padding-top: var(--fui-raw-space-16, #{measurements.raw-space(16)});
246
+ border-top: var(--fui-stroke-hairline, #{$fui-stroke-hairline}) solid
247
+ var(--fui-border, $fui-border);
291
248
  }
292
249
 
293
250
  // ============================================
@@ -309,21 +266,4 @@
309
266
  }
310
267
  }
311
268
  }
312
-
313
- // ============================================
314
- // Accessibility: High Contrast Mode
315
- // ============================================
316
-
317
- @media (prefers-contrast: more) {
318
- .card {
319
- border-color: var(--fui-text-primary, $fui-text-primary);
320
- outline: var(--fui-stroke-hairline, 1px) solid var(--fui-text-primary, $fui-text-primary);
321
- outline-offset: calc(-1 * var(--fui-stroke-default, 2px));
322
- }
323
-
324
- .footer {
325
- box-shadow: inset 0 var(--fui-stroke-hairline, 1px) 0
326
- var(--fui-text-primary, $fui-text-primary);
327
- }
328
- }
329
269
  }
@@ -7,36 +7,35 @@ import styles from "./Card.module.scss";
7
7
  // Types
8
8
  // ============================================
9
9
 
10
+ export type CardVariant = "solid" | "soft" | "outline";
11
+ export type CardTone = "neutral" | "accent" | "warning" | "danger";
12
+ export type CardPadding = "none" | "sm" | "md" | "lg";
13
+
10
14
  /**
11
15
  * Card container for grouping related content.
12
16
  * @see https://usefragments.com/components/card
13
17
  */
14
18
  export interface CardProps extends Omit<React.HTMLAttributes<HTMLElement>, "children"> {
15
19
  children: React.ReactNode;
16
- /** Visual style variant. `"outline"` is an alias for `"outlined"`.
20
+ /** Surface chrome.
17
21
  *
18
- * - `default` / `outlined` / `elevated`: general-purpose cards.
19
- * - `stat`: compact metric tile for dashboard grids hairline border,
20
- * panel-subtle surface, tight radius, zero shadow.
21
- * - `panel`: hairline-bordered panel with zero own padding, designed for
22
- * compound use with `Card.Header divided` + `Card.Body` so each region
23
- * manages its own spacing.
24
- * - `accent`: the earned-moment capsule — accent-tinted hairline, radial
25
- * accent wash, soft fixed radius. Reserve for the few surfaces that earn
26
- * emphasis (demo banner, upgrade panel, onboarding resume), never for
27
- * routine content.
28
- * @default "default"
22
+ * - `solid`: the filled, elevated surface for general-purpose cards.
23
+ * - `soft`: quiet tint fill for metric tiles and dashboard panels. Add
24
+ * `padding="none"` and let `Card.Header divided` + `Card.Body padding`
25
+ * own their inset for a panel.
26
+ * - `outline`: transparent with a hairline border, for dense layouts.
27
+ * @default "solid"
29
28
  * @see https://usefragments.com/components/card#variants */
30
- variant?: "default" | "outlined" | "outline" | "elevated" | "stat" | "panel" | "accent";
31
- /** Semantic tone of the `accent` capsule. The wash and hairline follow the
32
- * tone so the same earned-moment idiom can carry state: `danger` (a merge is
33
- * held), `warning` (enforcement lapsed), `neutral` (waiting ink hairline,
34
- * no wash). Ignored for other variants.
35
- * @default "accent" */
36
- tone?: "accent" | "danger" | "warning" | "neutral";
29
+ variant?: CardVariant;
30
+ /** Earned-moment capsule. Any tone other than `neutral` paints a
31
+ * tone-tinted hairline, a radial wash and the capsule radius on top of the
32
+ * variant: `accent` (the moment), `danger` (a merge is held), `warning`
33
+ * (enforcement lapsed). Reserve it for the few surfaces that earn emphasis.
34
+ * @default "neutral" */
35
+ tone?: CardTone;
37
36
  /** Inner padding.
38
37
  * @default "md" */
39
- padding?: "none" | "sm" | "md" | "lg";
38
+ padding?: CardPadding;
40
39
  /** Root element tag.
41
40
  * @default "article" */
42
41
  as?: "article" | "div" | "section";
@@ -46,7 +45,7 @@ export interface CardHeaderProps extends React.HTMLAttributes<HTMLDivElement> {
46
45
  children: React.ReactNode;
47
46
  /** Renders the header as a divided region with a minimum height, canonical
48
47
  * inset, hairline bottom border, and no trailing margin. Used with
49
- * `variant="panel"` for dashboard-style panel headers. */
48
+ * `padding="none"` for dashboard-style panel headers. */
50
49
  divided?: boolean;
51
50
  }
52
51
 
@@ -63,9 +62,9 @@ export interface CardDescriptionProps extends React.HTMLAttributes<HTMLParagraph
63
62
 
64
63
  export interface CardBodyProps extends React.HTMLAttributes<HTMLDivElement> {
65
64
  children: React.ReactNode;
66
- /** Inner padding for body-only spacing, useful with `variant="panel"`.
67
- * Omit when the card root already owns padding. */
68
- padding?: "none" | "sm" | "md" | "lg";
65
+ /** Inner padding for body-only spacing, useful with `padding="none"` on the
66
+ * root. Omit when the card root already owns padding. */
67
+ padding?: CardPadding;
69
68
  }
70
69
 
71
70
  export interface CardFooterProps extends React.HTMLAttributes<HTMLDivElement> {
@@ -77,8 +76,9 @@ export interface CardFooterProps extends React.HTMLAttributes<HTMLDivElement> {
77
76
  // ============================================
78
77
 
79
78
  interface CardContextValue {
80
- variant: "default" | "outlined" | "elevated" | "stat" | "panel" | "accent";
81
- padding: "none" | "sm" | "md" | "lg";
79
+ variant: CardVariant;
80
+ tone: CardTone;
81
+ padding: CardPadding;
82
82
  isInteractive: boolean;
83
83
  }
84
84
 
@@ -110,25 +110,29 @@ function composeEventHandlers<E extends { defaultPrevented: boolean }>(
110
110
  // Components
111
111
  // ============================================
112
112
 
113
- const toneMap = {
114
- accent: undefined,
113
+ const variantMap: Record<CardVariant, string> = {
114
+ solid: styles.solid,
115
+ soft: styles.soft,
116
+ outline: styles.outline,
117
+ };
118
+
119
+ const toneMap: Record<CardTone, string | undefined> = {
120
+ neutral: undefined,
121
+ accent: styles.toneAccent,
115
122
  danger: styles.toneDanger,
116
123
  warning: styles.toneWarning,
117
- neutral: styles.toneNeutral,
118
- } as const;
124
+ };
119
125
 
120
126
  function CardRoot({
121
127
  children,
122
- variant: variantProp = "default",
123
- tone = "accent",
128
+ variant = "solid",
129
+ tone = "neutral",
124
130
  padding = "md",
125
131
  as: Component = "article",
126
132
  className,
127
133
  style,
128
134
  ...htmlProps
129
135
  }: CardProps) {
130
- // Resolve alias: "outline" → "outlined"
131
- const variant = variantProp === "outline" ? "outlined" : variantProp;
132
136
  const { onKeyDown, onKeyUp, role, tabIndex, ...elementProps } = htmlProps;
133
137
 
134
138
  const isInteractive = typeof elementProps.onClick === "function";
@@ -137,8 +141,8 @@ function CardRoot({
137
141
 
138
142
  const classes = [
139
143
  styles.card,
140
- styles[variant],
141
- variant === "accent" && tone !== "accent" && toneMap[tone],
144
+ variantMap[variant],
145
+ toneMap[tone],
142
146
  paddingMap[padding],
143
147
  isInteractive && styles.interactive,
144
148
  className,
@@ -148,6 +152,7 @@ function CardRoot({
148
152
 
149
153
  const contextValue: CardContextValue = {
150
154
  variant,
155
+ tone,
151
156
  padding,
152
157
  isInteractive,
153
158
  };
@@ -1,5 +1,6 @@
1
1
  @use "../../tokens/variables" as *;
2
2
  @use "../../tokens/mixins" as *;
3
+ @use "../../tokens/measurements.generated" as measurements;
3
4
  @use "../../recipes/representation" as representation;
4
5
  @use "../../recipes/typography" as typography;
5
6
 
@@ -57,13 +58,13 @@
57
58
  .tooltipItems {
58
59
  display: flex;
59
60
  flex-direction: column;
60
- gap: var(--_fui-chart-tooltip-item-gap);
61
+ gap: var(--_fui-chart-tooltip-item-gap, var(--fui-raw-space-8, #{measurements.raw-space(8)}));
61
62
  }
62
63
 
63
64
  .tooltipItem {
64
65
  display: flex;
65
66
  align-items: center;
66
- gap: var(--_fui-chart-tooltip-item-gap);
67
+ gap: var(--_fui-chart-tooltip-item-gap, var(--fui-raw-space-8, #{measurements.raw-space(8)}));
67
68
  justify-content: space-between;
68
69
  }
69
70
 
@@ -82,8 +83,8 @@
82
83
  @include representation.chart-marker("dashed");
83
84
 
84
85
  box-sizing: border-box;
85
- border-top: var(--fui-chart-marker-stroke, var(--fui-raw-space-2, 2px)) dashed;
86
- border-radius: 0;
86
+ border-block-start: var(--fui-chart-marker-stroke, var(--fui-raw-space-2, #{measurements.raw-space(2)})) dashed;
87
+ border-radius: var(--fui-radius-none, #{$fui-radius-none});
87
88
  }
88
89
  }
89
90
 
@@ -104,7 +105,7 @@
104
105
  flex-wrap: wrap;
105
106
  align-items: center;
106
107
  justify-content: center;
107
- gap: var(--fui-raw-space-12, 12px);
108
+ gap: var(--fui-raw-space-12, #{measurements.raw-space(12)});
108
109
  padding-block-start: var(--fui-raw-space-8, 8px);
109
110
  }
110
111
 
@@ -16,6 +16,7 @@
16
16
  "disabled: boolean (default: false)",
17
17
  "required: boolean (default: false)",
18
18
  "size: sm|md|lg (default: md)",
19
+ "variant: outline",
19
20
  "label: string",
20
21
  "helperText: string",
21
22
  "description: string",
@@ -76,10 +77,9 @@
76
77
  },
77
78
  "variant": {
78
79
  "type": "enum",
79
- "description": "Visual variant. 'default' is the inline checkbox, 'card' renders as a full-width clickable card with the checkbox tucked inside.",
80
- "default": "default",
80
+ "description": "Chrome. Omit for the inline checkbox beside its label; 'outline' renders a full-width bordered surface with the checkbox tucked inside.",
81
81
  "required": false,
82
- "values": ["default", "card"]
82
+ "values": ["outline"]
83
83
  },
84
84
  "label": {
85
85
  "type": "string",
@@ -217,6 +217,7 @@
217
217
  "onCheckedChange: (checked) => void - change handler",
218
218
  "onChange: (checked) => void - alias for onCheckedChange",
219
219
  "indeterminate: boolean - partial selection state",
220
+ "variant: outline - full-width bordered surface; omit for the inline control",
220
221
  "label: string - checkbox label",
221
222
  "helperText: string - helper text (preferred)",
222
223
  "description: string - deprecated alias for helperText",