@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
@@ -3,13 +3,20 @@
3
3
  "name": "Badge",
4
4
  "description": "Labels a status, count, or category without pulling focus.",
5
5
  "category": "display",
6
- "tags": ["status", "label", "tag", "count", "chip"],
6
+ "tags": [
7
+ "status",
8
+ "label",
9
+ "tag",
10
+ "count",
11
+ "chip"
12
+ ],
7
13
  "status": "stable",
8
14
  "sourcePath": "src/components/Badge/index.tsx",
9
15
  "exportName": "Badge",
10
16
  "propsSummary": [
11
17
  "children: node (required)",
12
- "variant: default|success|warning|error|info|outline|label|dim (default: default)",
18
+ "variant: soft|outline|ghost (default: soft)",
19
+ "tone: neutral|accent|info|success|warning|danger (default: neutral)",
13
20
  "size: sm|md|lg (default: md)",
14
21
  "dot: boolean (default: false)",
15
22
  "dotPulse: boolean (default: false)",
@@ -28,17 +35,39 @@
28
35
  },
29
36
  "variant": {
30
37
  "type": "enum",
31
- "description": "Visual style indicating severity or category. `label` is a hairline-bordered metadata pill (pair with dotColor); `dim` is transparent filter-pill chrome (pair with active).",
32
- "default": "default",
38
+ "description": "Chrome family. `soft` is the tinted pill; `outline` is a hairline metadata pill (pair with dotColor); `ghost` is transparent filter chrome (pair with active).",
39
+ "default": "soft",
40
+ "required": false,
41
+ "values": [
42
+ "soft",
43
+ "outline",
44
+ "ghost"
45
+ ]
46
+ },
47
+ "tone": {
48
+ "type": "enum",
49
+ "description": "Colour on the shared status ramp; `neutral` is the plain badge.",
50
+ "default": "neutral",
33
51
  "required": false,
34
- "values": ["default", "success", "warning", "error", "info", "outline", "label", "dim"]
52
+ "values": [
53
+ "neutral",
54
+ "accent",
55
+ "info",
56
+ "success",
57
+ "warning",
58
+ "danger"
59
+ ]
35
60
  },
36
61
  "size": {
37
62
  "type": "enum",
38
63
  "description": "Badge size",
39
64
  "default": "md",
40
65
  "required": false,
41
- "values": ["sm", "md", "lg"]
66
+ "values": [
67
+ "sm",
68
+ "md",
69
+ "lg"
70
+ ]
42
71
  },
43
72
  "dot": {
44
73
  "type": "boolean",
@@ -54,7 +83,7 @@
54
83
  },
55
84
  "dotColor": {
56
85
  "type": "string",
57
- "description": "Color for the leading status dot. Applies to variant=\"label\" (and the generic dot prop). Accepts any CSS color including CSS custom properties.",
86
+ "description": "Color for the leading status dot. Accepts any CSS color including CSS custom properties.",
58
87
  "required": false
59
88
  },
60
89
  "icon": {
@@ -64,7 +93,7 @@
64
93
  },
65
94
  "active": {
66
95
  "type": "boolean",
67
- "description": "Marks variant=\"dim\" as the currently selected filter. Has no effect on other variants.",
96
+ "description": "Marks variant=\"ghost\" as the currently selected filter. Has no effect on other variants.",
68
97
  "default": "false",
69
98
  "required": false
70
99
  },
@@ -101,8 +130,8 @@
101
130
  "guidelines": [
102
131
  "Under 20 characters",
103
132
  "dot for live status; add dotPulse only while it is still changing",
104
- "Semantic variants are borderless pills on shared status tokens",
105
- "label pairs with dotColor; dim pairs with active for filter chrome",
133
+ "Semantic tones are borderless soft pills on shared status tokens",
134
+ "outline pairs with dotColor; ghost pairs with active for filter chrome",
106
135
  "onRemove for user-created tags only, never system labels"
107
136
  ],
108
137
  "accessibility": [
@@ -114,19 +143,19 @@
114
143
  },
115
144
  "examples": [
116
145
  {
117
- "name": "Status Variants",
146
+ "name": "Tones",
118
147
  "description": "Neutral through info, on shared status tokens.",
119
- "code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"sm\" wrap>\n <Badge variant=\"default\">Default</Badge>\n <Badge variant=\"success\">Active</Badge>\n <Badge variant=\"warning\">Pending</Badge>\n <Badge variant=\"error\">Failed</Badge>\n <Badge variant=\"info\">New</Badge>\n</Stack>"
148
+ "code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"sm\" wrap>\n <Badge>Neutral</Badge>\n <Badge tone=\"success\">Active</Badge>\n <Badge tone=\"warning\">Pending</Badge>\n <Badge tone=\"danger\">Failed</Badge>\n <Badge tone=\"info\">New</Badge>\n</Stack>"
120
149
  },
121
150
  {
122
151
  "name": "With Dot",
123
152
  "description": "Leading dot for live state; it breathes while still moving.",
124
- "code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"sm\" wrap>\n <Badge variant=\"success\" dot>Online</Badge>\n <Badge variant=\"warning\" dot>Away</Badge>\n <Badge variant=\"error\" dot>Offline</Badge>\n <Badge variant=\"info\" dot dotPulse>Syncing</Badge>\n</Stack>"
153
+ "code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"sm\" wrap>\n <Badge tone=\"success\" dot>Online</Badge>\n <Badge tone=\"warning\" dot>Away</Badge>\n <Badge tone=\"danger\" dot>Offline</Badge>\n <Badge tone=\"info\" dot dotPulse>Syncing</Badge>\n</Stack>"
125
154
  },
126
155
  {
127
- "name": "Label and Filter",
156
+ "name": "Outline and Ghost",
128
157
  "description": "Hairline metadata pill, and filter chrome that marks the active one.",
129
- "code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"sm\" wrap>\n <Badge variant=\"label\" dotColor=\"var(--fui-color-accent)\">Design</Badge>\n <Badge variant=\"label\" dotColor=\"var(--fui-color-success)\">Shipped</Badge>\n <Badge variant=\"dim\" active>All</Badge>\n <Badge variant=\"dim\">Archived</Badge>\n</Stack>"
158
+ "code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"sm\" wrap>\n <Badge variant=\"outline\" dotColor=\"var(--fui-color-accent)\">Design</Badge>\n <Badge variant=\"outline\" dotColor=\"var(--fui-color-success)\">Shipped</Badge>\n <Badge variant=\"ghost\" active>All</Badge>\n <Badge variant=\"ghost\">Archived</Badge>\n</Stack>"
130
159
  },
131
160
  {
132
161
  "name": "Outline",
@@ -136,17 +165,17 @@
136
165
  {
137
166
  "name": "Sizes",
138
167
  "description": "sm for dense tables, lg for reference status pills.",
139
- "code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"sm\" align=\"center\" wrap>\n <Badge variant=\"success\" size=\"sm\">Small</Badge>\n <Badge variant=\"success\" size=\"md\">Medium</Badge>\n <Badge variant=\"success\" size=\"lg\">Large</Badge>\n</Stack>"
168
+ "code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"sm\" align=\"center\" wrap>\n <Badge tone=\"success\" size=\"sm\">Small</Badge>\n <Badge tone=\"success\" size=\"md\">Medium</Badge>\n <Badge tone=\"success\" size=\"lg\">Large</Badge>\n</Stack>"
140
169
  },
141
170
  {
142
171
  "name": "Removable",
143
172
  "description": "Dismissible tags the user added themselves.",
144
- "code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"sm\" wrap>\n <Badge variant=\"info\" onRemove={() => {}}>React</Badge>\n <Badge variant=\"info\" onRemove={() => {}}>TypeScript</Badge>\n <Badge variant=\"info\" onRemove={() => {}}>CSS</Badge>\n</Stack>"
173
+ "code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"sm\" wrap>\n <Badge tone=\"info\" onRemove={() => {}}>React</Badge>\n <Badge tone=\"info\" onRemove={() => {}}>TypeScript</Badge>\n <Badge tone=\"info\" onRemove={() => {}}>CSS</Badge>\n</Stack>"
145
174
  },
146
175
  {
147
176
  "name": "Announced Status",
148
177
  "description": "Looks the same, but screen readers now hear the change.",
149
- "code": "<Badge variant=\"success\" announce>Saved</Badge>"
178
+ "code": "<Badge tone=\"success\" announce>Saved</Badge>"
150
179
  }
151
180
  ],
152
181
  "relations": [
@@ -164,20 +193,27 @@
164
193
  "contract": {
165
194
  "propsSummary": [
166
195
  "children: ReactNode - badge label (required)",
167
- "variant: default|success|warning|error|info|outline|label|dim - visual style",
196
+ "variant: soft|outline|ghost - chrome family",
197
+ "tone: neutral|accent|info|success|warning|danger - colour",
168
198
  "size: sm|md|lg - badge size",
169
199
  "dot: boolean - show status dot indicator",
170
200
  "dotPulse: boolean - breathe the dot for an in-progress state (respects prefers-reduced-motion)",
171
201
  "dotColor: string - color for the leading status dot",
172
- "active: boolean - marks variant=\"dim\" as the selected filter",
202
+ "active: boolean - marks variant=\"ghost\" as the selected filter",
173
203
  "onRemove: () => void - makes badge removable",
174
204
  "announce: boolean - opt into role=\"status\" + auto status aria-label"
175
205
  ],
176
- "a11yRules": ["A11Y_BADGE_CONTRAST", "A11Y_BADGE_DISMISS", "A11Y_TARGET_SIZE_MIN"]
206
+ "a11yRules": [
207
+ "A11Y_BADGE_CONTRAST",
208
+ "A11Y_BADGE_DISMISS",
209
+ "A11Y_TARGET_SIZE_MIN"
210
+ ]
177
211
  },
178
212
  "ai": {
179
213
  "compositionPattern": "compound",
180
- "subComponents": ["Root"]
214
+ "subComponents": [
215
+ "Root"
216
+ ]
181
217
  },
182
218
  "provenance": {
183
219
  "source": "migrated",
@@ -1,17 +1,24 @@
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/representation" as representation;
5
6
  @use "../../recipes/target" as target;
6
7
 
8
+ // Tone publishes three channels (tint, ink, line); the variant decides which
9
+ // one paints the surface. Neutral is the absence of a tone class.
7
10
  .badge {
11
+ --_badge-tint: var(--fui-bg-tertiary, #{$fui-bg-tertiary});
12
+ --_badge-ink: var(--fui-text-secondary, #{$fui-text-secondary});
13
+ --_badge-line: var(--fui-border-strong, #{$fui-border-strong});
14
+
8
15
  display: inline-flex;
9
16
  align-items: center;
10
17
  box-sizing: border-box;
11
18
  inline-size: max-content;
12
- gap: var(--fui-raw-space-4, 4px);
13
- padding-block: 0;
14
- border: 0;
19
+ gap: var(--fui-raw-space-4, #{measurements.raw-space(4)});
20
+ padding-block: var(--fui-raw-space-0, #{measurements.raw-space(0)});
21
+ border: var(--fui-stroke-hairline, #{$fui-stroke-hairline}) solid transparent;
15
22
  border-radius: var(--fui-badge-radius, var(--fui-radius-lg, #{$fui-radius-lg}));
16
23
  white-space: nowrap;
17
24
  }
@@ -20,65 +27,84 @@
20
27
  .sm {
21
28
  @include representation.badge("sm");
22
29
 
23
- padding-inline: var(--fui-raw-space-4, 4px);
30
+ padding-inline: var(--fui-raw-space-4, #{measurements.raw-space(4)});
24
31
  }
25
32
 
26
33
  .md {
27
34
  @include representation.badge("md");
28
35
 
29
- padding-inline: var(--fui-raw-space-6, 6px);
36
+ padding-inline: var(--fui-raw-space-6, #{measurements.raw-space(6)});
30
37
  }
31
38
 
32
39
  .lg {
33
40
  @include representation.badge("lg");
34
41
 
35
- padding-inline: var(--fui-raw-space-8, 8px);
42
+ padding-inline: var(--fui-raw-space-8, #{measurements.raw-space(8)});
36
43
  }
37
44
 
38
- // Variants
39
- .default {
40
- background-color: var(--fui-bg-tertiary, $fui-bg-tertiary);
41
- color: var(--fui-text-secondary, $fui-text-secondary);
45
+ // Tones. The semantic `-bg` tokens are panel tints (Alert, Toast: a large
46
+ // area where 10–15% of the seed is right). A badge is a few glyphs wide and
47
+ // is the one place a state becomes a colour, so its fill mixes the seed
48
+ // itself, harder, and harder again in the dark where a faint tint sinks into
49
+ // the page. The ink stays the contrast-derived text token.
50
+ $_tint-light: 24%;
51
+ $_tint-dark: 28%;
52
+
53
+ @mixin _tint($seed-var, $seed) {
54
+ --_badge-tint: light-dark(
55
+ color-mix(in srgb, var(#{$seed-var}, #{$seed}) #{$_tint-light}, transparent),
56
+ color-mix(in srgb, var(#{$seed-var}, #{$seed}) #{$_tint-dark}, transparent)
57
+ );
42
58
  }
43
59
 
44
- .success {
45
- background: var(--fui-color-success-bg, $fui-color-success-bg);
46
- color: var(--fui-color-success-text, $fui-color-success-text);
60
+ @mixin _tone($tone, $seed, $text, $border) {
61
+ @include _tint(--fui-color-#{$tone}, $seed);
62
+
63
+ --_badge-ink: var(--fui-color-#{$tone}-text, #{$text});
64
+ --_badge-line: var(--fui-color-#{$tone}-border, #{$border});
47
65
  }
48
66
 
49
- .warning {
50
- background: var(--fui-color-warning-bg, $fui-color-warning-bg);
51
- color: var(--fui-color-warning-text, $fui-color-warning-text);
67
+ .toneAccent {
68
+ @include _tint(--fui-color-accent, $fui-color-accent);
69
+
70
+ --_badge-ink: var(--fui-color-accent, #{$fui-color-accent});
71
+ --_badge-line: color-mix(in srgb, var(--fui-color-accent, #{$fui-color-accent}) 48%, transparent);
52
72
  }
53
73
 
54
- .error {
55
- background: var(--fui-color-danger-bg, $fui-color-danger-bg);
56
- color: var(--fui-color-danger-text, $fui-color-danger-text);
74
+ .toneInfo {
75
+ @include _tone("info", $fui-color-info, $fui-color-info-text, $fui-color-info-border);
57
76
  }
58
77
 
59
- .info {
60
- background: var(--fui-color-info-bg, $fui-color-info-bg);
61
- color: var(--fui-color-info-text, $fui-color-info-text);
78
+ .toneSuccess {
79
+ @include _tone("success", $fui-color-success, $fui-color-success-text, $fui-color-success-border);
62
80
  }
63
81
 
64
- .outline {
65
- background-color: transparent;
66
- color: var(--fui-text-primary, $fui-text-primary);
67
- border: var(--fui-stroke-hairline, 1px) solid var(--fui-border-strong, $fui-border-strong);
82
+ .toneWarning {
83
+ @include _tone("warning", $fui-color-warning, $fui-color-warning-text, $fui-color-warning-border);
84
+ }
85
+
86
+ .toneDanger {
87
+ @include _tone("danger", $fui-color-danger, $fui-color-danger-text, $fui-color-danger-border);
68
88
  }
69
89
 
70
- .label {
71
- border: var(--fui-stroke-hairline, 1px) solid var(--fui-border, $fui-border);
72
- border-radius: var(--fui-radius-sm, $fui-radius-sm);
90
+ // Variants
91
+ .soft {
92
+ background-color: var(--_badge-tint, var(--fui-bg-tertiary, #{$fui-bg-tertiary}));
93
+ color: var(--_badge-ink, var(--fui-text-secondary, #{$fui-text-secondary}));
94
+ }
95
+
96
+ .outline {
73
97
  background-color: transparent;
74
- color: var(--fui-text-secondary, $fui-text-secondary);
98
+ border-color: var(--_badge-line, var(--fui-border-strong, #{$fui-border-strong}));
99
+ color: var(--_badge-ink, var(--fui-text-secondary, #{$fui-text-secondary}));
75
100
  }
76
101
 
77
- .dim {
78
- border: var(--fui-stroke-hairline, 1px) solid transparent;
79
- border-radius: var(--fui-radius-sm, $fui-radius-sm);
102
+ // Filter-pill chrome: transparent at rest, `active` wears the shared selected
103
+ // surface. Tones colour the ink only.
104
+ .ghost {
105
+ border-radius: var(--fui-radius-l3, #{$fui-radius-l3});
80
106
  background-color: transparent;
81
- color: var(--fui-text-secondary, $fui-text-secondary);
107
+ color: var(--_badge-ink, var(--fui-text-secondary, #{$fui-text-secondary}));
82
108
  transition:
83
109
  color var(--fui-transition-fast, $fui-transition-fast),
84
110
  border-color var(--fui-transition-fast, $fui-transition-fast),
@@ -92,15 +118,15 @@
92
118
  }
93
119
 
94
120
  .dot {
95
- inline-size: var(--fui-raw-space-6, 6px);
96
- block-size: var(--fui-raw-space-6, 6px);
97
- border-radius: 50%;
121
+ inline-size: var(--fui-raw-space-6, #{measurements.raw-space(6)});
122
+ block-size: var(--fui-raw-space-6, #{measurements.raw-space(6)});
123
+ border-radius: var(--fui-radius-full, #{$fui-radius-full});
98
124
  background-color: var(--fui-badge-dot-color, currentColor);
99
125
  flex-shrink: 0;
100
126
 
101
127
  .sm & {
102
- inline-size: var(--fui-raw-space-4, 4px);
103
- block-size: var(--fui-raw-space-4, 4px);
128
+ inline-size: var(--fui-raw-space-4, #{measurements.raw-space(4)});
129
+ block-size: var(--fui-raw-space-4, #{measurements.raw-space(4)});
104
130
  }
105
131
  }
106
132
 
@@ -115,7 +141,7 @@
115
141
 
116
142
  @keyframes fui-badge-dot-pulse {
117
143
  50% {
118
- opacity: 0.35;
144
+ opacity: var(--fui-opacity-disabled, #{$fui-opacity-disabled});
119
145
  }
120
146
  }
121
147
 
@@ -148,7 +174,7 @@
148
174
  }
149
175
 
150
176
  .badge:has(.remove) {
151
- padding-inline-end: var(--fui-raw-space-4, 4px);
177
+ padding-inline-end: var(--fui-raw-space-4, #{measurements.raw-space(4)});
152
178
  }
153
179
 
154
180
  .remove {
@@ -158,22 +184,21 @@
158
184
 
159
185
  inline-size: 1em;
160
186
  block-size: 1em;
161
- margin-inline-start: calc(-1 * var(--fui-raw-space-2, 2px));
162
- padding: 0;
187
+ margin-inline-start: calc(-1 * var(--fui-raw-space-2, #{measurements.raw-space(2)}));
188
+ padding: var(--fui-raw-space-0, #{measurements.raw-space(0)});
163
189
  border: 0;
164
190
  background: transparent;
165
- color: inherit;
166
- opacity: 0.6;
191
+ color: color-mix(in srgb, currentColor 60%, transparent);
167
192
  border-radius: var(--fui-radius-full, $fui-radius-full);
168
193
  cursor: pointer;
169
194
 
170
195
  &:hover {
171
- opacity: 1;
196
+ color: currentColor;
172
197
  }
173
198
 
174
199
  &:focus-visible {
175
200
  @include focus-ring;
176
201
 
177
- opacity: 1;
202
+ color: currentColor;
178
203
  }
179
204
  }
@@ -8,19 +8,25 @@ import styles from "./Badge.module.scss";
8
8
  * Badge for status indicators, labels, and counts.
9
9
  * @see https://usefragments.com/components/badge
10
10
  */
11
+ export type BadgeVariant = "soft" | "outline" | "ghost";
12
+ export type BadgeTone = "neutral" | "accent" | "info" | "success" | "warning" | "danger";
13
+
11
14
  export interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {
12
15
  children: React.ReactNode;
13
- /** Visual style variant.
16
+ /** Chrome family.
14
17
  *
15
- * - `default` / semantic / `outline`: pill-shaped status badges for
16
- * tags, counts, or state.
17
- * - `label`: hairline-bordered label on the shared control floor for
18
- * metadata pills inside dense dashboard rows. Pair with `dotColor`.
19
- * - `dim`: transparent 32px filter-pill chrome used
20
- * for toolbar filter chips. Pair with `active` to mark the selected one.
21
- * @default "default"
18
+ * - `soft` (default): tinted pill for tags, counts, or state.
19
+ * - `outline`: hairline-bordered, transparent — metadata pills inside
20
+ * dense rows. Pair with `dotColor`.
21
+ * - `ghost`: transparent filter-pill chrome for toolbar filters. Pair with
22
+ * `active` to mark the selected one.
23
+ * @default "soft"
22
24
  * @see https://usefragments.com/components/badge#variants */
23
- variant?: "default" | "success" | "warning" | "error" | "info" | "outline" | "label" | "dim";
25
+ variant?: BadgeVariant;
26
+ /** Colour. `neutral` is the plain badge; the semantic tones paint the
27
+ * shared status ramp.
28
+ * @default "neutral" */
29
+ tone?: BadgeTone;
24
30
  /** Badge size.
25
31
  * @default "md" */
26
32
  size?: "sm" | "md" | "lg";
@@ -29,13 +35,13 @@ export interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {
29
35
  /** Breathe the status dot, for a state that is still happening rather than
30
36
  * one that has settled. Respects `prefers-reduced-motion`. */
31
37
  dotPulse?: boolean;
32
- /** Color for the leading status dot. Applies to `variant="label"` (and the
33
- * generic `dot` prop). Accepts any CSS color including CSS custom properties. */
38
+ /** Color for the leading status dot. Accepts any CSS color including CSS
39
+ * custom properties. */
34
40
  dotColor?: string;
35
41
  /** Icon element rendered before the label */
36
42
  icon?: React.ReactNode;
37
- /** Marks `variant="dim"` as the currently selected filter. Has no effect on
38
- * other variants. */
43
+ /** Marks `variant="ghost"` as the currently selected filter. Has no effect
44
+ * on other variants. */
39
45
  active?: boolean;
40
46
  /** Makes the badge removable. Called when dismiss button is clicked. */
41
47
  onRemove?: () => void;
@@ -44,10 +50,20 @@ export interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {
44
50
  announce?: boolean;
45
51
  }
46
52
 
53
+ const TONE_CLASS: Record<BadgeTone, string | undefined> = {
54
+ neutral: undefined,
55
+ accent: styles.toneAccent,
56
+ info: styles.toneInfo,
57
+ success: styles.toneSuccess,
58
+ warning: styles.toneWarning,
59
+ danger: styles.toneDanger,
60
+ };
61
+
47
62
  const BadgeRoot = React.forwardRef<HTMLSpanElement, BadgeProps>(function Badge(
48
63
  {
49
64
  children,
50
- variant = "default",
65
+ variant = "soft",
66
+ tone = "neutral",
51
67
  size = "md",
52
68
  dot = false,
53
69
  dotPulse = false,
@@ -68,7 +84,8 @@ const BadgeRoot = React.forwardRef<HTMLSpanElement, BadgeProps>(function Badge(
68
84
  styles.badge,
69
85
  styles[size],
70
86
  styles[variant],
71
- active && variant === "dim" && styles.active,
87
+ TONE_CLASS[tone],
88
+ active && variant === "ghost" && styles.active,
72
89
  className,
73
90
  ]
74
91
  .filter(Boolean)
@@ -81,8 +98,8 @@ const BadgeRoot = React.forwardRef<HTMLSpanElement, BadgeProps>(function Badge(
81
98
  // For status badges, include the status in the aria-label if not provided
82
99
  const effectiveAriaLabel =
83
100
  ariaLabel ||
84
- (announce && variant !== "default" && variant !== "outline"
85
- ? `${variant}: ${typeof children === "string" ? children : ""}`
101
+ (announce && tone !== "neutral"
102
+ ? `${tone}: ${typeof children === "string" ? children : ""}`
86
103
  : undefined);
87
104
 
88
105
  return (
@@ -83,8 +83,8 @@
83
83
  --_col-span: var(--bento-col-span, 1);
84
84
  --_row-span: var(--bento-row-span, 1);
85
85
 
86
- grid-column: span var(--_col-span);
87
- grid-row: span var(--_row-span);
86
+ grid-column: span var(--_col-span, var(--bento-col-span, 1));
87
+ grid-row: span var(--_row-span, var(--bento-row-span, 1));
88
88
 
89
89
  @include breakpoint-sm {
90
90
  --_col-span: var(--bento-col-span-sm, var(--bento-col-span, 1));
@@ -129,12 +129,8 @@
129
129
  // Accessibility: High Contrast Mode
130
130
  // ============================================
131
131
 
132
- @media (prefers-contrast: more) {
133
- .item {
134
- border-color: var(--fui-text-primary, $fui-text-primary);
135
- outline: var(--fui-stroke-hairline, 1px) solid var(--fui-text-primary, $fui-text-primary);
136
- outline-offset: calc(-1 * var(--fui-stroke-default, 2px));
137
- }
132
+ .item {
133
+ @include high-contrast-outline;
138
134
  }
139
135
 
140
136
  // ============================================
@@ -1,5 +1,6 @@
1
1
  @use "../../recipes/layout";
2
2
  @use "../../tokens/variables" as *;
3
+ @use "../../tokens/measurements.generated" as measurements;
3
4
 
4
5
  .box {
5
6
  box-sizing: border-box;
@@ -181,7 +182,7 @@
181
182
 
182
183
  // Border radius
183
184
  .rounded-none {
184
- border-radius: 0;
185
+ border-radius: var(--fui-radius-none, #{$fui-radius-none});
185
186
  }
186
187
  .rounded-sm {
187
188
  border-radius: var(--fui-radius-sm, $fui-radius-sm);
@@ -198,21 +199,21 @@
198
199
 
199
200
  // Border
200
201
  .border {
201
- border: var(--fui-stroke-hairline, 1px) solid var(--fui-border, $fui-border);
202
+ border: var(--fui-stroke-hairline, #{$fui-stroke-hairline}) solid var(--fui-border, $fui-border);
202
203
  }
203
204
 
204
205
  // Directional borders
205
206
  .borderTop {
206
- border-top: var(--fui-stroke-hairline, 1px) solid var(--fui-border, $fui-border);
207
+ border-top: var(--fui-stroke-hairline, #{$fui-stroke-hairline}) solid var(--fui-border, $fui-border);
207
208
  }
208
209
  .borderBottom {
209
- border-bottom: var(--fui-stroke-hairline, 1px) solid var(--fui-border, $fui-border);
210
+ border-bottom: var(--fui-stroke-hairline, #{$fui-stroke-hairline}) solid var(--fui-border, $fui-border);
210
211
  }
211
212
  .borderLeft {
212
- border-left: var(--fui-stroke-hairline, 1px) solid var(--fui-border, $fui-border);
213
+ border-left: var(--fui-stroke-hairline, #{$fui-stroke-hairline}) solid var(--fui-border, $fui-border);
213
214
  }
214
215
  .borderRight {
215
- border-right: var(--fui-stroke-hairline, 1px) solid var(--fui-border, $fui-border);
216
+ border-right: var(--fui-stroke-hairline, #{$fui-stroke-hairline}) solid var(--fui-border, $fui-border);
216
217
  }
217
218
 
218
219
  // Border color
@@ -1,6 +1,8 @@
1
1
  @use "../../tokens/variables" as *;
2
+ @use "../../tokens/measurements.generated" as measurements;
2
3
  @use "../../tokens/mixins" as *;
3
4
  @use "../../recipes/action" as action;
5
+ @use "../../recipes/layout" as layout;
4
6
  @use "../../recipes/target" as target;
5
7
  @use "../../recipes/typography" as typography;
6
8
 
@@ -16,8 +18,8 @@
16
18
  flex-wrap: wrap;
17
19
  gap: var(--fui-space-1, $fui-space-1);
18
20
  list-style: none;
19
- margin: 0;
20
- padding: 0;
21
+ margin: var(--fui-raw-space-0, #{measurements.raw-space(0)});
22
+ padding: var(--fui-raw-space-0, #{measurements.raw-space(0)});
21
23
  }
22
24
 
23
25
  // Individual breadcrumb item (li)
@@ -42,7 +44,7 @@
42
44
  text-overflow: ellipsis;
43
45
  // Intentional truncation width: one long crumb must not push the rest of the
44
46
  // trail off screen. Keep in sync with .current below.
45
- max-width: 200px;
47
+ max-width: layout.measure("menu-min");
46
48
  border-radius: var(--fui-radius-sm, $fui-radius-sm);
47
49
  transition:
48
50
  color var(--fui-transition-fast, $fui-transition-fast),
@@ -58,6 +60,14 @@
58
60
  }
59
61
  }
60
62
 
63
+ // Plain item: a child that is its own control (menu trigger, picker)
64
+ .content {
65
+ display: inline-flex;
66
+ align-items: center;
67
+ gap: var(--fui-space-1, $fui-space-1);
68
+ min-width: 0;
69
+ }
70
+
61
71
  // Current page (not a link)
62
72
  .current {
63
73
  display: inline-flex;
@@ -69,7 +79,7 @@
69
79
  overflow: hidden;
70
80
  text-overflow: ellipsis;
71
81
  // Intentional truncation width — matches .link above.
72
- max-width: 200px;
82
+ max-width: layout.measure("menu-min");
73
83
  }
74
84
 
75
85
  // Separator between items
@@ -92,7 +102,7 @@
92
102
  align-items: center;
93
103
  justify-content: center;
94
104
  background: none;
95
- border: var(--fui-stroke-hairline, 1px) solid var(--fui-border, $fui-border);
105
+ border: var(--fui-stroke-hairline, #{$fui-stroke-hairline}) solid var(--fui-border, $fui-border);
96
106
  border-radius: var(--fui-radius-sm, $fui-radius-sm);
97
107
  color: var(--fui-text-secondary, $fui-text-secondary);
98
108
  cursor: pointer;
@@ -171,9 +171,13 @@ function BreadcrumbsItem({
171
171
  );
172
172
  }
173
173
 
174
+ // Neither a link nor the current page: the child is its own control (a
175
+ // menu trigger, a picker). It gets the item's layout and nothing more — the
176
+ // link's hover and enlarged hit-area would sit over the child and take its
177
+ // clicks.
174
178
  return (
175
179
  <li className={classes} {...htmlProps}>
176
- <span className={styles.link}>
180
+ <span className={styles.content}>
177
181
  {iconEl}
178
182
  {children}
179
183
  </span>