@usefragments/ui 1.6.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 (685) hide show
  1. package/README.md +54 -66
  2. package/dist/assets/fragments-wordmark.cjs +2 -2
  3. package/dist/assets/fragments-wordmark.d.ts.map +1 -1
  4. package/dist/assets/fragments-wordmark.js +2 -2
  5. package/dist/assets/nav-glyph.cjs +139 -0
  6. package/dist/assets/nav-glyph.d.ts +28 -0
  7. package/dist/assets/nav-glyph.d.ts.map +1 -0
  8. package/dist/assets/nav-glyph.js +139 -0
  9. package/dist/assets/nav-glyph.module.scss.cjs +71 -0
  10. package/dist/assets/nav-glyph.module.scss.js +71 -0
  11. package/dist/assets/ui.css +6885 -6308
  12. package/dist/blocks/components/StatsCard.d.ts +1 -1
  13. package/dist/blocks/components/StatsCard.d.ts.map +1 -1
  14. package/dist/chart.cjs +24 -6
  15. package/dist/chart.js +24 -6
  16. package/dist/codeblock.cjs +76 -43
  17. package/dist/codeblock.js +71 -38
  18. package/dist/colorpicker.cjs +4 -1
  19. package/dist/colorpicker.js +4 -1
  20. package/dist/components/Accordion/Accordion.module.scss.cjs +8 -8
  21. package/dist/components/Accordion/Accordion.module.scss.js +8 -8
  22. package/dist/components/Alert/Alert.module.scss.cjs +23 -20
  23. package/dist/components/Alert/Alert.module.scss.js +23 -20
  24. package/dist/components/Alert/index.cjs +20 -8
  25. package/dist/components/Alert/index.d.ts +17 -11
  26. package/dist/components/Alert/index.d.ts.map +1 -1
  27. package/dist/components/Alert/index.js +20 -8
  28. package/dist/components/AppShell/AppShell.module.scss.cjs +14 -14
  29. package/dist/components/AppShell/AppShell.module.scss.js +14 -14
  30. package/dist/components/AppShell/index.cjs +2 -2
  31. package/dist/components/AppShell/index.js +2 -2
  32. package/dist/components/Avatar/Avatar.module.scss.cjs +14 -14
  33. package/dist/components/Avatar/Avatar.module.scss.js +14 -14
  34. package/dist/components/Badge/Badge.module.scss.cjs +33 -31
  35. package/dist/components/Badge/Badge.module.scss.js +33 -31
  36. package/dist/components/Badge/index.cjs +13 -3
  37. package/dist/components/Badge/index.d.ts +18 -13
  38. package/dist/components/Badge/index.d.ts.map +1 -1
  39. package/dist/components/Badge/index.js +13 -3
  40. package/dist/components/BentoGrid/BentoGrid.module.scss.cjs +14 -14
  41. package/dist/components/BentoGrid/BentoGrid.module.scss.js +14 -14
  42. package/dist/components/Box/Box.module.scss.cjs +152 -152
  43. package/dist/components/Box/Box.module.scss.js +152 -152
  44. package/dist/components/Box/index.cjs +64 -75
  45. package/dist/components/Box/index.d.ts +16 -16
  46. package/dist/components/Box/index.d.ts.map +1 -1
  47. package/dist/components/Box/index.js +64 -75
  48. package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.cjs +11 -8
  49. package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.js +11 -8
  50. package/dist/components/Breadcrumbs/index.cjs +1 -1
  51. package/dist/components/Breadcrumbs/index.d.ts.map +1 -1
  52. package/dist/components/Breadcrumbs/index.js +1 -1
  53. package/dist/components/Button/Button.module.scss.cjs +36 -27
  54. package/dist/components/Button/Button.module.scss.js +36 -27
  55. package/dist/components/Button/index.cjs +20 -4
  56. package/dist/components/Button/index.d.ts +18 -10
  57. package/dist/components/Button/index.d.ts.map +1 -1
  58. package/dist/components/Button/index.js +20 -4
  59. package/dist/components/ButtonGroup/ButtonGroup.module.scss.cjs +15 -15
  60. package/dist/components/ButtonGroup/ButtonGroup.module.scss.js +15 -15
  61. package/dist/components/Card/Card.module.scss.cjs +31 -26
  62. package/dist/components/Card/Card.module.scss.js +32 -27
  63. package/dist/components/Card/index.cjs +16 -3
  64. package/dist/components/Card/index.d.ts +23 -15
  65. package/dist/components/Card/index.d.ts.map +1 -1
  66. package/dist/components/Card/index.js +16 -3
  67. package/dist/components/Chart/Chart.module.scss.cjs +15 -15
  68. package/dist/components/Chart/Chart.module.scss.js +15 -15
  69. package/dist/components/Chart/index.d.ts.map +1 -1
  70. package/dist/components/Checkbox/Checkbox.module.scss.cjs +11 -11
  71. package/dist/components/Checkbox/Checkbox.module.scss.js +11 -11
  72. package/dist/components/Checkbox/index.cjs +4 -4
  73. package/dist/components/Checkbox/index.d.ts +4 -6
  74. package/dist/components/Checkbox/index.d.ts.map +1 -1
  75. package/dist/components/Checkbox/index.js +4 -4
  76. package/dist/components/Chip/Chip.module.scss.cjs +19 -19
  77. package/dist/components/Chip/Chip.module.scss.js +19 -19
  78. package/dist/components/Chip/index.cjs +3 -3
  79. package/dist/components/Chip/index.d.ts +8 -3
  80. package/dist/components/Chip/index.d.ts.map +1 -1
  81. package/dist/components/Chip/index.js +3 -3
  82. package/dist/components/CodeBlock/CodeBlock.module.scss.cjs +26 -23
  83. package/dist/components/CodeBlock/CodeBlock.module.scss.js +26 -23
  84. package/dist/components/CodeBlock/css-variables-theme.cjs +98 -0
  85. package/dist/components/CodeBlock/css-variables-theme.d.ts +27 -0
  86. package/dist/components/CodeBlock/css-variables-theme.d.ts.map +1 -0
  87. package/dist/components/CodeBlock/css-variables-theme.js +98 -0
  88. package/dist/components/CodeBlock/index.d.ts +20 -5
  89. package/dist/components/CodeBlock/index.d.ts.map +1 -1
  90. package/dist/components/Collapsible/Collapsible.module.scss.cjs +9 -9
  91. package/dist/components/Collapsible/Collapsible.module.scss.js +9 -9
  92. package/dist/components/ColorPicker/ColorPicker.module.scss.cjs +14 -14
  93. package/dist/components/ColorPicker/ColorPicker.module.scss.js +14 -14
  94. package/dist/components/ColorPicker/index.d.ts.map +1 -1
  95. package/dist/components/Combobox/Combobox.module.scss.cjs +21 -21
  96. package/dist/components/Combobox/Combobox.module.scss.js +21 -21
  97. package/dist/components/Combobox/index.cjs +26 -6
  98. package/dist/components/Combobox/index.d.ts.map +1 -1
  99. package/dist/components/Combobox/index.js +26 -6
  100. package/dist/components/Command/Command.module.scss.cjs +14 -11
  101. package/dist/components/Command/Command.module.scss.js +14 -11
  102. package/dist/components/Command/index.cjs +28 -16
  103. package/dist/components/Command/index.d.ts +8 -3
  104. package/dist/components/Command/index.d.ts.map +1 -1
  105. package/dist/components/Command/index.js +28 -16
  106. package/dist/components/ConversationList/ConversationList.module.scss.cjs +10 -10
  107. package/dist/components/ConversationList/ConversationList.module.scss.js +10 -10
  108. package/dist/components/ConversationList/index.cjs +2 -2
  109. package/dist/components/ConversationList/index.js +2 -2
  110. package/dist/components/DataTable/DataTable.icons.cjs +6 -33
  111. package/dist/components/DataTable/DataTable.icons.d.ts.map +1 -1
  112. package/dist/components/DataTable/DataTable.icons.js +6 -33
  113. package/dist/components/DataTable/DataTable.module.scss.cjs +31 -28
  114. package/dist/components/DataTable/DataTable.module.scss.js +31 -28
  115. package/dist/components/DataTable/DataTable.virtual.d.ts.map +1 -1
  116. package/dist/components/DataTable/index.d.ts.map +1 -1
  117. package/dist/components/DatePicker/DatePicker.module.scss.cjs +33 -33
  118. package/dist/components/DatePicker/DatePicker.module.scss.js +33 -33
  119. package/dist/components/DatePicker/index.d.ts.map +1 -1
  120. package/dist/components/Dialog/Dialog.module.scss.cjs +14 -14
  121. package/dist/components/Dialog/Dialog.module.scss.js +14 -14
  122. package/dist/components/Dialog/index.cjs +13 -16
  123. package/dist/components/Dialog/index.d.ts +11 -10
  124. package/dist/components/Dialog/index.d.ts.map +1 -1
  125. package/dist/components/Dialog/index.js +13 -16
  126. package/dist/components/Drawer/Drawer.module.scss.cjs +39 -39
  127. package/dist/components/Drawer/Drawer.module.scss.js +40 -40
  128. package/dist/components/Drawer/index.cjs +2 -2
  129. package/dist/components/Drawer/index.d.ts +5 -4
  130. package/dist/components/Drawer/index.d.ts.map +1 -1
  131. package/dist/components/Drawer/index.js +2 -2
  132. package/dist/components/Editor/Editor.module.scss.cjs +17 -17
  133. package/dist/components/Editor/Editor.module.scss.js +17 -17
  134. package/dist/components/Editor/index.d.ts +10 -10
  135. package/dist/components/Editor/index.d.ts.map +1 -1
  136. package/dist/components/EmptyState/EmptyState.module.scss.cjs +11 -8
  137. package/dist/components/EmptyState/EmptyState.module.scss.js +11 -8
  138. package/dist/components/EmptyState/index.cjs +13 -6
  139. package/dist/components/EmptyState/index.d.ts +13 -5
  140. package/dist/components/EmptyState/index.d.ts.map +1 -1
  141. package/dist/components/EmptyState/index.js +13 -6
  142. package/dist/components/Field/Field.module.scss.cjs +5 -5
  143. package/dist/components/Field/Field.module.scss.js +5 -5
  144. package/dist/components/Field/index.cjs +9 -1
  145. package/dist/components/Field/index.d.ts.map +1 -1
  146. package/dist/components/Field/index.js +9 -1
  147. package/dist/components/Fieldset/Fieldset.module.scss.cjs +3 -3
  148. package/dist/components/Fieldset/Fieldset.module.scss.js +3 -3
  149. package/dist/components/Grid/Grid.module.scss.cjs +54 -54
  150. package/dist/components/Grid/Grid.module.scss.js +54 -54
  151. package/dist/components/Grid/index.cjs +1 -1
  152. package/dist/components/Grid/index.js +1 -1
  153. package/dist/components/Header/Header.module.scss.cjs +33 -33
  154. package/dist/components/Header/Header.module.scss.js +33 -33
  155. package/dist/components/Header/index.cjs +17 -38
  156. package/dist/components/Header/index.d.ts +15 -11
  157. package/dist/components/Header/index.d.ts.map +1 -1
  158. package/dist/components/Header/index.js +17 -38
  159. package/dist/components/Icon/Icon.module.scss.cjs +30 -33
  160. package/dist/components/Icon/Icon.module.scss.js +30 -33
  161. package/dist/components/Icon/index.cjs +15 -14
  162. package/dist/components/Icon/index.d.ts +23 -12
  163. package/dist/components/Icon/index.d.ts.map +1 -1
  164. package/dist/components/Icon/index.js +15 -14
  165. package/dist/components/IconButton/IconButton.module.scss.cjs +12 -12
  166. package/dist/components/IconButton/IconButton.module.scss.js +12 -12
  167. package/dist/components/IconButton/index.cjs +2 -1
  168. package/dist/components/IconButton/index.d.ts +4 -4
  169. package/dist/components/IconButton/index.d.ts.map +1 -1
  170. package/dist/components/IconButton/index.js +2 -1
  171. package/dist/components/Image/Image.module.scss.cjs +27 -27
  172. package/dist/components/Image/Image.module.scss.js +27 -27
  173. package/dist/components/Input/Input.module.scss.cjs +15 -21
  174. package/dist/components/Input/Input.module.scss.js +15 -21
  175. package/dist/components/Input/index.cjs +2 -14
  176. package/dist/components/Input/index.d.ts +0 -2
  177. package/dist/components/Input/index.d.ts.map +1 -1
  178. package/dist/components/Input/index.js +2 -14
  179. package/dist/components/Link/Link.module.scss.cjs +26 -14
  180. package/dist/components/Link/Link.module.scss.js +26 -14
  181. package/dist/components/Link/index.cjs +13 -2
  182. package/dist/components/Link/index.d.ts +11 -4
  183. package/dist/components/Link/index.d.ts.map +1 -1
  184. package/dist/components/Link/index.js +13 -2
  185. package/dist/components/List/List.module.scss.cjs +23 -19
  186. package/dist/components/List/List.module.scss.js +23 -19
  187. package/dist/components/List/index.cjs +7 -7
  188. package/dist/components/List/index.d.ts +10 -7
  189. package/dist/components/List/index.d.ts.map +1 -1
  190. package/dist/components/List/index.js +7 -7
  191. package/dist/components/Listbox/Listbox.module.scss.cjs +8 -8
  192. package/dist/components/Listbox/Listbox.module.scss.js +8 -8
  193. package/dist/components/Loading/Loading.module.scss.cjs +34 -34
  194. package/dist/components/Loading/Loading.module.scss.js +34 -34
  195. package/dist/components/Loading/index.cjs +5 -5
  196. package/dist/components/Loading/index.d.ts +8 -7
  197. package/dist/components/Loading/index.d.ts.map +1 -1
  198. package/dist/components/Loading/index.js +5 -5
  199. package/dist/components/Markdown/Markdown.module.scss.cjs +1 -1
  200. package/dist/components/Markdown/Markdown.module.scss.js +1 -1
  201. package/dist/components/Markdown/index.d.ts +2 -2
  202. package/dist/components/Markdown/index.d.ts.map +1 -1
  203. package/dist/components/Menu/Menu.module.scss.cjs +14 -14
  204. package/dist/components/Menu/Menu.module.scss.js +14 -14
  205. package/dist/components/Message/Message.module.scss.cjs +20 -20
  206. package/dist/components/Message/Message.module.scss.js +20 -20
  207. package/dist/components/Message/index.cjs +1 -1
  208. package/dist/components/Message/index.d.ts +1 -1
  209. package/dist/components/Message/index.js +1 -1
  210. package/dist/components/NavigationMenu/NavigationMenu.module.scss.cjs +34 -31
  211. package/dist/components/NavigationMenu/NavigationMenu.module.scss.js +34 -31
  212. package/dist/components/NavigationMenu/index.cjs +32 -15
  213. package/dist/components/NavigationMenu/index.d.ts +12 -6
  214. package/dist/components/NavigationMenu/index.d.ts.map +1 -1
  215. package/dist/components/NavigationMenu/index.js +32 -15
  216. package/dist/components/Pagination/Pagination.module.scss.cjs +10 -10
  217. package/dist/components/Pagination/Pagination.module.scss.js +10 -10
  218. package/dist/components/Popover/Popover.module.scss.cjs +10 -10
  219. package/dist/components/Popover/Popover.module.scss.js +10 -10
  220. package/dist/components/Progress/Progress.module.scss.cjs +28 -25
  221. package/dist/components/Progress/Progress.module.scss.js +28 -25
  222. package/dist/components/Progress/index.cjs +21 -12
  223. package/dist/components/Progress/index.d.ts +10 -6
  224. package/dist/components/Progress/index.d.ts.map +1 -1
  225. package/dist/components/Progress/index.js +21 -12
  226. package/dist/components/Prompt/Prompt.module.scss.cjs +30 -30
  227. package/dist/components/Prompt/Prompt.module.scss.js +30 -30
  228. package/dist/components/Prompt/index.cjs +7 -7
  229. package/dist/components/Prompt/index.d.ts +11 -9
  230. package/dist/components/Prompt/index.d.ts.map +1 -1
  231. package/dist/components/Prompt/index.js +7 -7
  232. package/dist/components/RadioGroup/RadioGroup.module.scss.cjs +20 -17
  233. package/dist/components/RadioGroup/RadioGroup.module.scss.js +20 -17
  234. package/dist/components/RadioGroup/index.cjs +10 -5
  235. package/dist/components/RadioGroup/index.d.ts +11 -7
  236. package/dist/components/RadioGroup/index.d.ts.map +1 -1
  237. package/dist/components/RadioGroup/index.js +10 -5
  238. package/dist/components/ScrollArea/ScrollArea.module.scss.cjs +5 -5
  239. package/dist/components/ScrollArea/ScrollArea.module.scss.js +5 -5
  240. package/dist/components/ScrollArea/index.d.ts +4 -4
  241. package/dist/components/ScrollArea/index.d.ts.map +1 -1
  242. package/dist/components/ScrollArea/scroll-state.d.ts +5 -5
  243. package/dist/components/Select/Select.module.scss.cjs +21 -21
  244. package/dist/components/Select/Select.module.scss.js +21 -21
  245. package/dist/components/Select/index.cjs +26 -20
  246. package/dist/components/Select/index.d.ts +5 -5
  247. package/dist/components/Select/index.d.ts.map +1 -1
  248. package/dist/components/Select/index.js +26 -20
  249. package/dist/components/Separator/Separator.module.scss.cjs +25 -19
  250. package/dist/components/Separator/Separator.module.scss.js +25 -19
  251. package/dist/components/Separator/index.cjs +10 -8
  252. package/dist/components/Separator/index.d.ts +4 -2
  253. package/dist/components/Separator/index.d.ts.map +1 -1
  254. package/dist/components/Separator/index.js +10 -8
  255. package/dist/components/Sidebar/Sidebar.module.scss.cjs +43 -43
  256. package/dist/components/Sidebar/Sidebar.module.scss.js +43 -43
  257. package/dist/components/Sidebar/index.cjs +15 -38
  258. package/dist/components/Sidebar/index.d.ts +19 -19
  259. package/dist/components/Sidebar/index.d.ts.map +1 -1
  260. package/dist/components/Sidebar/index.js +15 -38
  261. package/dist/components/Skeleton/Skeleton.module.scss.cjs +50 -46
  262. package/dist/components/Skeleton/Skeleton.module.scss.js +50 -46
  263. package/dist/components/Skeleton/index.cjs +7 -7
  264. package/dist/components/Skeleton/index.d.ts +8 -7
  265. package/dist/components/Skeleton/index.d.ts.map +1 -1
  266. package/dist/components/Skeleton/index.js +7 -7
  267. package/dist/components/Slider/Slider.module.scss.cjs +12 -12
  268. package/dist/components/Slider/Slider.module.scss.js +12 -12
  269. package/dist/components/Stack/Stack.module.scss.cjs +25 -25
  270. package/dist/components/Stack/Stack.module.scss.js +25 -25
  271. package/dist/components/Stack/index.cjs +1 -1
  272. package/dist/components/Stack/index.js +1 -1
  273. package/dist/components/Switch/Switch.module.scss.cjs +9 -9
  274. package/dist/components/Switch/Switch.module.scss.js +9 -9
  275. package/dist/components/Table/Table.module.scss.cjs +19 -19
  276. package/dist/components/Table/Table.module.scss.js +19 -19
  277. package/dist/components/TableOfContents/TableOfContents.module.scss.cjs +15 -15
  278. package/dist/components/TableOfContents/TableOfContents.module.scss.js +15 -15
  279. package/dist/components/TableOfContents/index.cjs +14 -10
  280. package/dist/components/TableOfContents/index.d.ts +5 -3
  281. package/dist/components/TableOfContents/index.d.ts.map +1 -1
  282. package/dist/components/TableOfContents/index.js +14 -10
  283. package/dist/components/Tabs/Tabs.module.scss.cjs +18 -18
  284. package/dist/components/Tabs/Tabs.module.scss.js +18 -18
  285. package/dist/components/Tabs/index.cjs +30 -11
  286. package/dist/components/Tabs/index.d.ts +8 -6
  287. package/dist/components/Tabs/index.d.ts.map +1 -1
  288. package/dist/components/Tabs/index.js +30 -11
  289. package/dist/components/Text/Text.module.scss.cjs +109 -97
  290. package/dist/components/Text/Text.module.scss.js +109 -97
  291. package/dist/components/Text/index.cjs +45 -41
  292. package/dist/components/Text/index.d.ts +24 -19
  293. package/dist/components/Text/index.d.ts.map +1 -1
  294. package/dist/components/Text/index.js +45 -41
  295. package/dist/components/Textarea/Textarea.module.scss.cjs +22 -28
  296. package/dist/components/Textarea/Textarea.module.scss.js +22 -28
  297. package/dist/components/Textarea/index.cjs +3 -10
  298. package/dist/components/Textarea/index.d.ts +0 -2
  299. package/dist/components/Textarea/index.d.ts.map +1 -1
  300. package/dist/components/Textarea/index.js +3 -10
  301. package/dist/components/Theme/index.cjs +22 -5
  302. package/dist/components/Theme/index.d.ts +6 -12
  303. package/dist/components/Theme/index.d.ts.map +1 -1
  304. package/dist/components/Theme/index.js +22 -5
  305. package/dist/components/ThemeToggle/ThemeButton.cjs +51 -0
  306. package/dist/components/ThemeToggle/ThemeButton.d.ts +16 -0
  307. package/dist/components/ThemeToggle/ThemeButton.d.ts.map +1 -0
  308. package/dist/components/ThemeToggle/ThemeButton.js +34 -0
  309. package/dist/components/ThemeToggle/ThemeToggle.module.scss.cjs +6 -6
  310. package/dist/components/ThemeToggle/ThemeToggle.module.scss.js +6 -6
  311. package/dist/components/ThemeToggle/icons.cjs +48 -0
  312. package/dist/components/ThemeToggle/icons.d.ts +10 -0
  313. package/dist/components/ThemeToggle/icons.d.ts.map +1 -0
  314. package/dist/components/ThemeToggle/icons.js +48 -0
  315. package/dist/components/ThemeToggle/index.cjs +6 -50
  316. package/dist/components/ThemeToggle/index.d.ts +5 -3
  317. package/dist/components/ThemeToggle/index.d.ts.map +1 -1
  318. package/dist/components/ThemeToggle/index.js +3 -47
  319. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.cjs +18 -15
  320. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.js +18 -15
  321. package/dist/components/ThinkingIndicator/index.cjs +7 -8
  322. package/dist/components/ThinkingIndicator/index.d.ts +6 -5
  323. package/dist/components/ThinkingIndicator/index.d.ts.map +1 -1
  324. package/dist/components/ThinkingIndicator/index.js +7 -8
  325. package/dist/components/Toast/Toast.module.scss.cjs +28 -29
  326. package/dist/components/Toast/Toast.module.scss.js +29 -30
  327. package/dist/components/Toast/index.cjs +28 -30
  328. package/dist/components/Toast/index.d.ts +9 -8
  329. package/dist/components/Toast/index.d.ts.map +1 -1
  330. package/dist/components/Toast/index.js +28 -30
  331. package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs +21 -19
  332. package/dist/components/ToggleGroup/ToggleGroup.module.scss.js +22 -20
  333. package/dist/components/ToggleGroup/index.cjs +4 -5
  334. package/dist/components/ToggleGroup/index.d.ts +7 -6
  335. package/dist/components/ToggleGroup/index.d.ts.map +1 -1
  336. package/dist/components/ToggleGroup/index.js +4 -5
  337. package/dist/components/Tooltip/Tooltip.module.scss.cjs +3 -3
  338. package/dist/components/Tooltip/Tooltip.module.scss.js +3 -3
  339. package/dist/components/Tooltip/index.cjs +24 -40
  340. package/dist/components/Tooltip/index.d.ts +4 -4
  341. package/dist/components/Tooltip/index.d.ts.map +1 -1
  342. package/dist/components/Tooltip/index.js +24 -40
  343. package/dist/components/VisuallyHidden/VisuallyHidden.module.scss.cjs +1 -1
  344. package/dist/components/VisuallyHidden/VisuallyHidden.module.scss.js +1 -1
  345. package/dist/components/VisuallyHidden/index.d.ts +2 -2
  346. package/dist/data-table-virtual.cjs +3 -2
  347. package/dist/data-table-virtual.js +3 -2
  348. package/dist/data-table.cjs +3 -2
  349. package/dist/data-table.js +3 -2
  350. package/dist/datepicker.cjs +26 -13
  351. package/dist/datepicker.js +26 -13
  352. package/dist/editor.cjs +68 -28
  353. package/dist/editor.js +68 -28
  354. package/dist/index.cjs +6 -2
  355. package/dist/index.d.ts +9 -9
  356. package/dist/index.d.ts.map +1 -1
  357. package/dist/index.js +8 -4
  358. package/dist/markdown.cjs +21 -29
  359. package/dist/markdown.js +21 -29
  360. package/dist/measurements/generated.cjs +46 -94
  361. package/dist/measurements/generated.d.ts +44 -92
  362. package/dist/measurements/generated.d.ts.map +1 -1
  363. package/dist/measurements/generated.js +46 -94
  364. package/dist/measurements/index.d.ts +1 -1
  365. package/dist/measurements/index.d.ts.map +1 -1
  366. package/dist/utils/a11y.cjs +5 -2
  367. package/dist/utils/a11y.d.ts +5 -5
  368. package/dist/utils/a11y.d.ts.map +1 -1
  369. package/dist/utils/a11y.js +5 -2
  370. package/dist/utils/canonical-stamp.cjs +2 -8
  371. package/dist/utils/canonical-stamp.d.ts.map +1 -1
  372. package/dist/utils/canonical-stamp.js +1 -7
  373. package/dist/utils/css-warning.cjs +1 -1
  374. package/dist/utils/css-warning.js +1 -1
  375. package/dist/utils/env.cjs +17 -0
  376. package/dist/utils/env.d.ts +3 -0
  377. package/dist/utils/env.d.ts.map +1 -0
  378. package/dist/utils/env.js +17 -0
  379. package/dist/utils/keyboard-shortcuts.cjs +3 -10
  380. package/dist/utils/keyboard-shortcuts.d.ts +4 -4
  381. package/dist/utils/keyboard-shortcuts.d.ts.map +1 -1
  382. package/dist/utils/keyboard-shortcuts.js +3 -10
  383. package/dist/utils/seed-derivation.cjs +10 -7
  384. package/dist/utils/seed-derivation.d.ts +1 -3
  385. package/dist/utils/seed-derivation.d.ts.map +1 -1
  386. package/dist/utils/seed-derivation.js +10 -7
  387. package/dist/utils/theme-presets.cjs +5 -10
  388. package/dist/utils/theme-presets.d.ts +1 -2
  389. package/dist/utils/theme-presets.d.ts.map +1 -1
  390. package/dist/utils/theme-presets.js +5 -10
  391. package/fragments.json +1 -1
  392. package/package.json +9 -10
  393. package/src/assets/fragments-logo.tsx +2 -2
  394. package/src/assets/fragments-wordmark.tsx +4 -2
  395. package/src/assets/nav-glyph.module.scss +166 -0
  396. package/src/assets/nav-glyph.tsx +188 -0
  397. package/src/components/Accordion/Accordion.contract.json +24 -48
  398. package/src/components/Accordion/Accordion.module.scss +5 -3
  399. package/src/components/Alert/Alert.contract.json +49 -65
  400. package/src/components/Alert/Alert.module.scss +57 -47
  401. package/src/components/Alert/index.tsx +72 -39
  402. package/src/components/AppShell/AppShell.contract.json +34 -51
  403. package/src/components/AppShell/AppShell.module.scss +99 -54
  404. package/src/components/AppShell/index.tsx +2 -2
  405. package/src/components/Avatar/Avatar.contract.json +31 -48
  406. package/src/components/Avatar/Avatar.module.scss +4 -2
  407. package/src/components/Badge/Badge.contract.json +86 -55
  408. package/src/components/Badge/Badge.module.scss +80 -48
  409. package/src/components/Badge/index.tsx +34 -17
  410. package/src/components/BentoGrid/BentoGrid.contract.json +21 -45
  411. package/src/components/BentoGrid/BentoGrid.module.scss +4 -8
  412. package/src/components/Box/Box.contract.json +40 -148
  413. package/src/components/Box/Box.module.scss +7 -6
  414. package/src/components/Box/index.tsx +92 -99
  415. package/src/components/Breadcrumbs/Breadcrumbs.contract.json +21 -34
  416. package/src/components/Breadcrumbs/Breadcrumbs.module.scss +27 -12
  417. package/src/components/Breadcrumbs/index.tsx +5 -1
  418. package/src/components/Button/Button.module.scss +261 -185
  419. package/src/components/Button/index.tsx +41 -28
  420. package/src/components/ButtonGroup/ButtonGroup.contract.json +34 -49
  421. package/src/components/ButtonGroup/ButtonGroup.module.scss +8 -6
  422. package/src/components/Card/Card.consumer-fixture.module.scss +5 -2
  423. package/src/components/Card/Card.module.scss +97 -76
  424. package/src/components/Card/index.tsx +44 -20
  425. package/src/components/Chart/Chart.contract.json +21 -29
  426. package/src/components/Chart/Chart.module.scss +6 -5
  427. package/src/components/Chart/index.tsx +36 -6
  428. package/src/components/Checkbox/Checkbox.contract.json +28 -27
  429. package/src/components/Checkbox/Checkbox.module.scss +47 -54
  430. package/src/components/Checkbox/index.tsx +10 -10
  431. package/src/components/Chip/Chip.contract.json +38 -45
  432. package/src/components/Chip/Chip.module.scss +24 -23
  433. package/src/components/Chip/index.tsx +12 -7
  434. package/src/components/CodeBlock/CodeBlock.contract.json +46 -76
  435. package/src/components/CodeBlock/CodeBlock.module.scss +75 -73
  436. package/src/components/CodeBlock/css-variables-theme.ts +102 -0
  437. package/src/components/CodeBlock/index.tsx +114 -51
  438. package/src/components/Collapsible/Collapsible.contract.json +21 -36
  439. package/src/components/Collapsible/Collapsible.module.scss +1 -7
  440. package/src/components/ColorPicker/ColorPicker.contract.json +29 -48
  441. package/src/components/ColorPicker/ColorPicker.module.scss +34 -24
  442. package/src/components/ColorPicker/index.tsx +6 -1
  443. package/src/components/Combobox/Combobox.contract.json +36 -37
  444. package/src/components/Combobox/Combobox.module.scss +16 -19
  445. package/src/components/Combobox/index.tsx +41 -6
  446. package/src/components/Command/Command.contract.json +28 -44
  447. package/src/components/Command/Command.module.scss +19 -21
  448. package/src/components/Command/index.tsx +64 -47
  449. package/src/components/ComponentDefaults/ComponentDefaults.contract.json +91 -0
  450. package/src/components/ConversationList/ConversationList.contract.json +27 -32
  451. package/src/components/ConversationList/ConversationList.module.scss +2 -3
  452. package/src/components/ConversationList/index.tsx +2 -2
  453. package/src/components/DataTable/DataTable.icons.tsx +4 -21
  454. package/src/components/DataTable/DataTable.module.scss +24 -17
  455. package/src/components/DataTable/DataTable.virtual.tsx +3 -2
  456. package/src/components/DataTable/index.tsx +9 -8
  457. package/src/components/DatePicker/DatePicker.contract.json +27 -28
  458. package/src/components/DatePicker/DatePicker.module.scss +41 -44
  459. package/src/components/DatePicker/index.tsx +23 -9
  460. package/src/components/Dialog/Dialog.module.scss +26 -32
  461. package/src/components/Dialog/index.tsx +51 -39
  462. package/src/components/Drawer/Drawer.contract.json +28 -42
  463. package/src/components/Drawer/Drawer.module.scss +123 -64
  464. package/src/components/Drawer/index.tsx +7 -5
  465. package/src/components/Editor/Editor.contract.json +32 -49
  466. package/src/components/Editor/Editor.module.scss +60 -25
  467. package/src/components/Editor/index.tsx +240 -179
  468. package/src/components/EmptyState/EmptyState.contract.json +33 -45
  469. package/src/components/EmptyState/EmptyState.module.scss +37 -21
  470. package/src/components/EmptyState/index.tsx +56 -23
  471. package/src/components/Field/Field.contract.json +28 -46
  472. package/src/components/Field/Field.module.scss +2 -1
  473. package/src/components/Field/index.tsx +5 -1
  474. package/src/components/Fieldset/Fieldset.contract.json +21 -38
  475. package/src/components/Fieldset/Fieldset.module.scss +15 -7
  476. package/src/components/Form/Form.contract.json +23 -23
  477. package/src/components/Grid/Grid.contract.json +28 -64
  478. package/src/components/Grid/Grid.module.scss +2 -2
  479. package/src/components/Grid/index.tsx +10 -10
  480. package/src/components/Header/Header.contract.json +31 -67
  481. package/src/components/Header/Header.module.scss +57 -54
  482. package/src/components/Header/index.tsx +134 -122
  483. package/src/components/Icon/Icon.contract.json +37 -81
  484. package/src/components/Icon/Icon.module.scss +13 -12
  485. package/src/components/Icon/index.tsx +31 -31
  486. package/src/components/IconButton/IconButton.contract.json +37 -21
  487. package/src/components/IconButton/IconButton.module.scss +19 -11
  488. package/src/components/IconButton/index.tsx +6 -5
  489. package/src/components/Image/Image.contract.json +23 -56
  490. package/src/components/Input/Input.contract.json +25 -44
  491. package/src/components/Input/Input.module.scss +6 -55
  492. package/src/components/Input/index.tsx +2 -18
  493. package/src/components/Link/Link.contract.json +46 -58
  494. package/src/components/Link/Link.module.scss +41 -10
  495. package/src/components/Link/index.tsx +27 -6
  496. package/src/components/List/List.contract.json +33 -62
  497. package/src/components/List/List.module.scss +10 -5
  498. package/src/components/List/index.tsx +17 -13
  499. package/src/components/Listbox/Listbox.contract.json +21 -37
  500. package/src/components/Listbox/Listbox.module.scss +14 -20
  501. package/src/components/Loading/Loading.contract.json +41 -65
  502. package/src/components/Loading/Loading.module.scss +37 -31
  503. package/src/components/Loading/index.tsx +15 -14
  504. package/src/components/Main/Main.contract.json +17 -9
  505. package/src/components/Markdown/Markdown.contract.json +22 -43
  506. package/src/components/Markdown/Markdown.module.scss +45 -6
  507. package/src/components/Markdown/index.tsx +48 -49
  508. package/src/components/Menu/Menu.contract.json +30 -46
  509. package/src/components/Menu/Menu.module.scss +32 -16
  510. package/src/components/Message/Message.contract.json +31 -54
  511. package/src/components/Message/Message.module.scss +18 -9
  512. package/src/components/Message/index.tsx +2 -2
  513. package/src/components/NavigationMenu/NavigationMenu.contract.json +36 -45
  514. package/src/components/NavigationMenu/NavigationMenu.module.scss +66 -66
  515. package/src/components/NavigationMenu/index.tsx +105 -81
  516. package/src/components/Pagination/Pagination.contract.json +22 -40
  517. package/src/components/Pagination/Pagination.module.scss +9 -16
  518. package/src/components/Popover/Popover.contract.json +28 -50
  519. package/src/components/Popover/Popover.module.scss +30 -28
  520. package/src/components/Progress/Progress.contract.json +39 -35
  521. package/src/components/Progress/Progress.module.scss +16 -10
  522. package/src/components/Progress/index.tsx +34 -16
  523. package/src/components/Prompt/Prompt.contract.json +40 -56
  524. package/src/components/Prompt/Prompt.module.scss +49 -48
  525. package/src/components/Prompt/index.tsx +17 -15
  526. package/src/components/RadioGroup/RadioGroup.contract.json +29 -28
  527. package/src/components/RadioGroup/RadioGroup.module.scss +50 -45
  528. package/src/components/RadioGroup/index.tsx +23 -10
  529. package/src/components/ScrollArea/ScrollArea.contract.json +18 -19
  530. package/src/components/ScrollArea/ScrollArea.module.scss +45 -48
  531. package/src/components/ScrollArea/index.tsx +16 -16
  532. package/src/components/ScrollArea/scroll-state.ts +24 -24
  533. package/src/components/Select/Select.module.scss +20 -19
  534. package/src/components/Select/index.tsx +26 -24
  535. package/src/components/Separator/Separator.contract.json +29 -53
  536. package/src/components/Separator/Separator.module.scss +24 -40
  537. package/src/components/Separator/index.tsx +16 -11
  538. package/src/components/Sidebar/Sidebar.contract.json +35 -67
  539. package/src/components/Sidebar/Sidebar.module.scss +94 -88
  540. package/src/components/Sidebar/index.tsx +167 -167
  541. package/src/components/Skeleton/Skeleton.contract.json +34 -60
  542. package/src/components/Skeleton/Skeleton.module.scss +50 -26
  543. package/src/components/Skeleton/index.tsx +16 -15
  544. package/src/components/Slider/Slider.contract.json +27 -39
  545. package/src/components/Slider/Slider.module.scss +9 -22
  546. package/src/components/Stack/Stack.contract.json +30 -57
  547. package/src/components/Stack/Stack.module.scss +26 -24
  548. package/src/components/Stack/index.tsx +3 -3
  549. package/src/components/Switch/Switch.contract.json +33 -46
  550. package/src/components/Switch/Switch.module.scss +106 -59
  551. package/src/components/Table/Table.contract.json +28 -46
  552. package/src/components/Table/Table.module.scss +24 -16
  553. package/src/components/TableOfContents/TableOfContents.contract.json +34 -21
  554. package/src/components/TableOfContents/TableOfContents.module.scss +17 -13
  555. package/src/components/TableOfContents/index.tsx +27 -10
  556. package/src/components/Tabs/Tabs.contract.json +35 -56
  557. package/src/components/Tabs/Tabs.module.scss +27 -31
  558. package/src/components/Tabs/index.tsx +30 -15
  559. package/src/components/Text/Text.contract.json +52 -72
  560. package/src/components/Text/Text.module.scss +34 -18
  561. package/src/components/Text/index.tsx +123 -83
  562. package/src/components/Textarea/Textarea.contract.json +24 -55
  563. package/src/components/Textarea/Textarea.module.scss +22 -52
  564. package/src/components/Textarea/index.tsx +3 -14
  565. package/src/components/Theme/Theme.contract.json +35 -53
  566. package/src/components/Theme/index.tsx +41 -13
  567. package/src/components/ThemeToggle/ThemeButton.tsx +49 -0
  568. package/src/components/ThemeToggle/ThemeToggle.module.scss +20 -27
  569. package/src/components/ThemeToggle/icons.tsx +46 -0
  570. package/src/components/ThemeToggle/index.tsx +9 -55
  571. package/src/components/ThinkingIndicator/ThinkingIndicator.contract.json +34 -50
  572. package/src/components/ThinkingIndicator/ThinkingIndicator.module.scss +9 -7
  573. package/src/components/ThinkingIndicator/index.tsx +12 -14
  574. package/src/components/Toast/Toast.contract.json +55 -49
  575. package/src/components/Toast/Toast.module.scss +50 -105
  576. package/src/components/Toast/index.tsx +39 -34
  577. package/src/components/ToggleGroup/ToggleGroup.contract.json +39 -40
  578. package/src/components/ToggleGroup/ToggleGroup.module.scss +30 -27
  579. package/src/components/ToggleGroup/index.tsx +11 -11
  580. package/src/components/Tooltip/Tooltip.contract.json +31 -52
  581. package/src/components/Tooltip/Tooltip.module.scss +16 -10
  582. package/src/components/Tooltip/index.tsx +19 -24
  583. package/src/components/VisuallyHidden/VisuallyHidden.contract.json +22 -44
  584. package/src/components/VisuallyHidden/VisuallyHidden.module.scss +4 -14
  585. package/src/components/VisuallyHidden/index.tsx +5 -5
  586. package/src/index.ts +16 -12
  587. package/src/measurements/MeasurementTargets.module.scss +6 -7
  588. package/src/measurements/generated.ts +46 -97
  589. package/src/measurements/index.ts +0 -1
  590. package/src/measurements/measurements.json +44 -116
  591. package/src/recipes/_action.scss +4 -4
  592. package/src/recipes/_boolean-range.scss +12 -16
  593. package/src/recipes/_feedback.scss +17 -16
  594. package/src/recipes/_field.scss +28 -16
  595. package/src/recipes/_layout.scss +14 -7
  596. package/src/recipes/_navigation.scss +84 -29
  597. package/src/recipes/_overlay.scss +143 -43
  598. package/src/recipes/_popup.scss +54 -34
  599. package/src/recipes/_prose.scss +48 -28
  600. package/src/recipes/_representation.scss +10 -9
  601. package/src/recipes/_segmented.scss +1 -1
  602. package/src/recipes/_table-chrome.scss +42 -17
  603. package/src/recipes/_target.scss +2 -4
  604. package/src/recipes/_typography.scss +10 -0
  605. package/src/scss.d.ts +1 -1
  606. package/src/styles/globals.scss +31 -25
  607. package/src/tokens/_component-properties.scss +19 -1
  608. package/src/tokens/_computed.scss +32 -49
  609. package/src/tokens/_derive.scss +112 -210
  610. package/src/tokens/_measurements.catalog.generated.css +62 -44
  611. package/src/tokens/_measurements.generated.scss +119 -249
  612. package/src/tokens/_mixins.scss +49 -48
  613. package/src/tokens/_palettes.scss +39 -167
  614. package/src/tokens/_property-registrations.scss +9 -0
  615. package/src/tokens/_seeds.scss +20 -31
  616. package/src/tokens/_variables.scss +251 -94
  617. package/src/utils/a11y.tsx +69 -69
  618. package/src/utils/aria.ts +3 -3
  619. package/src/utils/canonical-stamp.ts +2 -12
  620. package/src/utils/css-warning.ts +7 -7
  621. package/src/utils/env.ts +25 -0
  622. package/src/utils/keyboard-shortcuts.ts +131 -126
  623. package/src/utils/seed-derivation.ts +11 -14
  624. package/src/utils/theme-presets.ts +5 -12
  625. package/dist/blocks/AccountSettings.block.d.ts +0 -3
  626. package/dist/blocks/AccountSettings.block.d.ts.map +0 -1
  627. package/dist/blocks/ActivityFeedSkeleton.block.d.ts +0 -3
  628. package/dist/blocks/ActivityFeedSkeleton.block.d.ts.map +0 -1
  629. package/dist/blocks/BlogEditor.block.d.ts +0 -3
  630. package/dist/blocks/BlogEditor.block.d.ts.map +0 -1
  631. package/dist/blocks/ChatInterface.block.d.ts +0 -3
  632. package/dist/blocks/ChatInterface.block.d.ts.map +0 -1
  633. package/dist/blocks/ChatMessages.block.d.ts +0 -3
  634. package/dist/blocks/ChatMessages.block.d.ts.map +0 -1
  635. package/dist/blocks/CheckoutForm.block.d.ts +0 -3
  636. package/dist/blocks/CheckoutForm.block.d.ts.map +0 -1
  637. package/dist/blocks/CommandPalette.block.d.ts +0 -3
  638. package/dist/blocks/CommandPalette.block.d.ts.map +0 -1
  639. package/dist/blocks/ContactForm.block.d.ts +0 -3
  640. package/dist/blocks/ContactForm.block.d.ts.map +0 -1
  641. package/dist/blocks/DashboardPage.block.d.ts +0 -3
  642. package/dist/blocks/DashboardPage.block.d.ts.map +0 -1
  643. package/dist/blocks/DashboardSkeleton.block.d.ts +0 -3
  644. package/dist/blocks/DashboardSkeleton.block.d.ts.map +0 -1
  645. package/dist/blocks/DataTable.block.d.ts +0 -3
  646. package/dist/blocks/DataTable.block.d.ts.map +0 -1
  647. package/dist/blocks/EmptyState.block.d.ts +0 -3
  648. package/dist/blocks/EmptyState.block.d.ts.map +0 -1
  649. package/dist/blocks/FAQSection.block.d.ts +0 -3
  650. package/dist/blocks/FAQSection.block.d.ts.map +0 -1
  651. package/dist/blocks/FeatureGrid.block.d.ts +0 -3
  652. package/dist/blocks/FeatureGrid.block.d.ts.map +0 -1
  653. package/dist/blocks/HeroSection.block.d.ts +0 -3
  654. package/dist/blocks/HeroSection.block.d.ts.map +0 -1
  655. package/dist/blocks/NavigationHeader.block.d.ts +0 -3
  656. package/dist/blocks/NavigationHeader.block.d.ts.map +0 -1
  657. package/dist/blocks/PaginatedTable.block.d.ts +0 -3
  658. package/dist/blocks/PaginatedTable.block.d.ts.map +0 -1
  659. package/dist/blocks/PricingComparison.block.d.ts +0 -3
  660. package/dist/blocks/PricingComparison.block.d.ts.map +0 -1
  661. package/dist/blocks/ProductCard.block.d.ts +0 -3
  662. package/dist/blocks/ProductCard.block.d.ts.map +0 -1
  663. package/dist/blocks/RegistrationForm.block.d.ts +0 -3
  664. package/dist/blocks/RegistrationForm.block.d.ts.map +0 -1
  665. package/dist/blocks/SettingsDrawer.block.d.ts +0 -3
  666. package/dist/blocks/SettingsDrawer.block.d.ts.map +0 -1
  667. package/dist/blocks/SettingsPanel.block.d.ts +0 -3
  668. package/dist/blocks/SettingsPanel.block.d.ts.map +0 -1
  669. package/dist/blocks/ShoppingCart.block.d.ts +0 -3
  670. package/dist/blocks/ShoppingCart.block.d.ts.map +0 -1
  671. package/dist/blocks/StatsCardSkeleton.block.d.ts +0 -3
  672. package/dist/blocks/StatsCardSkeleton.block.d.ts.map +0 -1
  673. package/dist/blocks/TableSkeleton.block.d.ts +0 -3
  674. package/dist/blocks/TableSkeleton.block.d.ts.map +0 -1
  675. package/dist/blocks/ThinkingStates.block.d.ts +0 -3
  676. package/dist/blocks/ThinkingStates.block.d.ts.map +0 -1
  677. package/dist/components/Toggle/index.d.ts +0 -3
  678. package/dist/components/Toggle/index.d.ts.map +0 -1
  679. package/src/components/Button/Button.contract.json +0 -218
  680. package/src/components/Card/Card.contract.json +0 -175
  681. package/src/components/DataTable/DataTable.contract.json +0 -302
  682. package/src/components/Dialog/Dialog.contract.json +0 -159
  683. package/src/components/Select/Select.contract.json +0 -259
  684. package/src/components/Toggle/index.ts +0 -7
  685. package/src/tokens/_density.scss +0 -85
@@ -1,14 +1,9 @@
1
1
  {
2
2
  "$schema": "https://usefragments.com/schemas/contract.v1.json",
3
3
  "name": "Avatar",
4
- "description": "Visual representation of a user or entity",
4
+ "description": "Shows who someone is their photo, or their initials when there is none.",
5
5
  "category": "display",
6
- "tags": [
7
- "user",
8
- "profile",
9
- "image",
10
- "identity"
11
- ],
6
+ "tags": ["user", "profile", "image", "identity"],
12
7
  "status": "stable",
13
8
  "sourcePath": "src/components/Avatar/index.tsx",
14
9
  "exportName": "Avatar",
@@ -52,13 +47,7 @@
52
47
  "description": "Size variant",
53
48
  "default": "md",
54
49
  "required": false,
55
- "values": [
56
- "xs",
57
- "sm",
58
- "md",
59
- "lg",
60
- "xl"
61
- ]
50
+ "values": ["xs", "sm", "md", "lg", "xl"]
62
51
  },
63
52
  "customSize": {
64
53
  "type": "union",
@@ -70,10 +59,7 @@
70
59
  "description": "Shape variant",
71
60
  "default": "circle",
72
61
  "required": false,
73
- "values": [
74
- "circle",
75
- "square"
76
- ]
62
+ "values": ["circle", "square"]
77
63
  },
78
64
  "color": {
79
65
  "type": "string",
@@ -98,66 +84,67 @@
98
84
  },
99
85
  "usage": {
100
86
  "when": [
101
- "Displaying user profile pictures",
102
- "Showing team member lists",
103
- "Representing entities in lists or cards",
104
- "User identification in comments or messages"
87
+ "A row, comment, or card needs to say who",
88
+ "Several people belong to one thing — use Avatar.Group"
105
89
  ],
106
90
  "whenNot": [
107
- "Decorative images (use Image)",
108
- "Logo display (use Logo component)",
109
- "Large profile headers (use custom layout)"
91
+ "The picture is content, not identity (use Image)",
92
+ "A profile hero at display size (build the layout yourself)"
110
93
  ],
111
94
  "guidelines": [
112
- "Always provide alt text or name for accessibility",
113
- "Use consistent sizes within the same context",
114
- "Provide fallback initials when image may not load",
115
- "Use Avatar.Group for multiple avatars in a row",
116
- "Use imageProps for advanced img attributes (loading, decoding, referrerPolicy, etc.)"
95
+ "Pass name even when you pass src — it is the fallback and the label",
96
+ "Hold one size per context; mixed sizes read as a mistake",
97
+ "Avatar.Group max caps the stack and counts the rest",
98
+ "imageProps carries loading, decoding, referrerPolicy"
117
99
  ],
118
100
  "accessibility": [
119
- "Include meaningful alt text describing the user",
120
- "Initials should be derived from name for screen readers",
121
- "Decorative avatars should have empty alt"
101
+ "alt describes the person, not the word \"avatar\"",
102
+ "Initials come from name, so screen readers get the whole name",
103
+ "Purely decorative? Pass alt=\"\""
122
104
  ]
123
105
  },
124
106
  "examples": [
125
107
  {
126
108
  "name": "Default",
127
- "description": "Avatar with image",
109
+ "description": "A photo, cropped to the circle and centred.",
128
110
  "code": "import { Avatar } from '@/components/Avatar';\n\n<Avatar\n src=\"https://i.pravatar.cc/150?u=jane\"\n alt=\"Jane Doe\"\n name=\"Jane Doe\"\n/>"
129
111
  },
130
112
  {
131
113
  "name": "With Initials",
132
- "description": "Fallback when no image is provided",
114
+ "description": "No src, so the name collapses to initials.",
133
115
  "code": "import { Avatar } from '@/components/Avatar';\n\n<Avatar name=\"John Smith\" />"
134
116
  },
135
117
  {
136
118
  "name": "Sizes",
137
- "description": "Available size options",
119
+ "description": "Five steps, xs through xl — pick one per context and stick to it.",
138
120
  "code": "import { Avatar } from '@/components/Avatar';\nimport { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"sm\" align=\"center\" wrap>\n <Avatar name=\"XS\" size=\"xs\" />\n <Avatar name=\"SM\" size=\"sm\" />\n <Avatar name=\"MD\" size=\"md\" />\n <Avatar name=\"LG\" size=\"lg\" />\n <Avatar name=\"XL\" size=\"xl\" />\n</Stack>"
139
121
  },
140
122
  {
141
123
  "name": "Custom Size",
142
- "description": "Set an exact avatar size",
124
+ "description": "customSize takes any number when the scale does not fit.",
143
125
  "code": "import { Avatar } from '@/components/Avatar';\n\n<Avatar name=\"Conan McNicholl\" customSize={36} />"
144
126
  },
145
127
  {
146
128
  "name": "Square Shape",
147
- "description": "Square variant for app icons or brands",
129
+ "description": "Squares read as products or orgs, circles as people.",
148
130
  "code": "import { Avatar } from '@/components/Avatar';\n\n<Avatar name=\"App\" shape=\"square\" />"
149
131
  },
150
132
  {
151
133
  "name": "Group",
152
- "description": "Multiple avatars stacked together",
134
+ "description": "Overlapping stack with a count for whoever did not fit.",
153
135
  "code": "import { Avatar } from '@/components/Avatar';\n\n<Avatar.Group max={3} size=\"md\">\n <Avatar name=\"Alice Johnson\" />\n <Avatar name=\"Bob Smith\" />\n <Avatar name=\"Carol Williams\" />\n <Avatar name=\"David Brown\" />\n <Avatar name=\"Eve Davis\" />\n</Avatar.Group>"
154
136
  }
155
137
  ],
156
138
  "relations": [
157
139
  {
158
- "component": "Avatar",
159
- "relationship": "parent",
160
- "note": "Use Avatar.Group for stacked avatar displays"
140
+ "component": "Image",
141
+ "relationship": "alternative",
142
+ "note": "Use Image for content pictures that are not a person or entity"
143
+ },
144
+ {
145
+ "component": "Badge",
146
+ "relationship": "sibling",
147
+ "note": "Pair with Badge to show presence or role beside a name"
161
148
  }
162
149
  ],
163
150
  "contract": {
@@ -170,15 +157,11 @@
170
157
  "imageProps: ImgHTMLAttributes - advanced img attributes",
171
158
  "shape: circle|square (default: circle)"
172
159
  ],
173
- "a11yRules": [
174
- "A11Y_IMG_ALT"
175
- ]
160
+ "a11yRules": ["A11Y_IMG_ALT"]
176
161
  },
177
162
  "ai": {
178
163
  "compositionPattern": "compound",
179
- "subComponents": [
180
- "Group"
181
- ]
164
+ "subComponents": ["Group"]
182
165
  },
183
166
  "provenance": {
184
167
  "source": "migrated",
@@ -50,7 +50,6 @@
50
50
  .initials {
51
51
  font-weight: var(--fui-font-weight-medium, $fui-font-weight-medium);
52
52
  color: var(--avatar-initials-color, var(--fui-text-inverse, $fui-text-inverse));
53
- text-transform: uppercase;
54
53
  line-height: 1;
55
54
  }
56
55
 
@@ -84,7 +83,10 @@
84
83
  }
85
84
  }
86
85
 
87
- .groupItem:last-child {
86
+ // Must match the specificity of `.group .<size>.groupItem` above (and follow it
87
+ // in source order), otherwise the leading avatar keeps its negative margin and
88
+ // the whole stack sits offset from the content around it.
89
+ .group .groupItem:last-child {
88
90
  margin-inline-start: 0;
89
91
  }
90
92
 
@@ -1,15 +1,22 @@
1
1
  {
2
2
  "$schema": "https://usefragments.com/schemas/contract.v1.json",
3
3
  "name": "Badge",
4
- "description": "Compact label for status, counts, or categorization. Draws attention to metadata without dominating the layout.",
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
  },
@@ -87,71 +116,66 @@
87
116
  },
88
117
  "usage": {
89
118
  "when": [
90
- "Showing item status (active, pending, archived)",
91
- "Displaying counts or quantities inline",
92
- "Categorizing or tagging content",
93
- "Highlighting new or updated items"
119
+ "Marking item status: active, pending, archived",
120
+ "Showing a count inline",
121
+ "Tagging or categorising content",
122
+ "Flagging what is new or changed"
94
123
  ],
95
124
  "whenNot": [
96
- "Conveying critical errors (use Alert instead)",
97
- "Long-form status messages (use Alert)",
98
- "Interactive filtering (use Chip/ToggleGroup)",
99
- "Navigation labels (use Tabs or links)"
125
+ "Real errors that need attention — use Alert",
126
+ "Anything longer than a few words — use Alert",
127
+ "Clickable filters use Chip or ToggleGroup",
128
+ "View switching use Tabs or links"
100
129
  ],
101
130
  "guidelines": [
102
- "Keep badge text under 20 characters",
103
- "Use dot variant for live status indicators",
104
- "Pair success/error variants with meaningful labels, not just colors",
105
- "Semantic status badges are borderless pills using shared semantic bg/text tokens",
106
- "Use onRemove for user-created tags only, not system-generated badges",
107
- "Badges are not announced as live status updates by default; use announce for screen-reader status announcements when appropriate"
131
+ "Under 20 characters",
132
+ "dot for live status; add dotPulse only while it is still changing",
133
+ "Semantic tones are borderless soft pills on shared status tokens",
134
+ "outline pairs with dotColor; ghost pairs with active for filter chrome",
135
+ "onRemove for user-created tags only, never system labels"
108
136
  ],
109
137
  "accessibility": [
110
- "Badge text must be meaningful without relying on color alone",
111
- "Removable badges must have accessible dismiss button labels",
112
- "Avoid using badges as the sole indicator of important state changes"
138
+ "The text must carry the meaning colour alone never does",
139
+ "Removable badges need a named dismiss button",
140
+ "Badges are silent to screen readers unless you pass announce",
141
+ "Do not make a badge the only signal that something changed"
113
142
  ]
114
143
  },
115
144
  "examples": [
116
145
  {
117
- "name": "Default",
118
- "description": "Neutral badge for general labels",
119
- "code": "import { Badge } from '@/components/Badge';\n\n<Badge>Default</Badge>"
120
- },
121
- {
122
- "name": "Status Variants",
123
- "description": "All severity variants for different contexts",
124
- "code": "import { Badge } from '@/components/Badge';\nimport { 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>"
125
- },
126
- {
127
- "name": "Delivery Status",
128
- "description": "Reference status pills with deep semantic fill and bright text",
129
- "code": "import { Badge } from '@/components/Badge';\nimport { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"sm\" wrap>\n <Badge variant=\"success\" size=\"lg\">Delivered</Badge>\n <Badge variant=\"error\" size=\"lg\">Bounced</Badge>\n</Stack>"
146
+ "name": "Tones",
147
+ "description": "Neutral through info, on shared status tokens.",
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>"
130
149
  },
131
150
  {
132
151
  "name": "With Dot",
133
- "description": "Live status indicators using dot prefix",
134
- "code": "import { Badge } from '@/components/Badge';\nimport { 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</Stack>"
152
+ "description": "Leading dot for live state; it breathes while still moving.",
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>"
135
154
  },
136
155
  {
137
- "name": "Announced Status",
138
- "description": "Opt into screen-reader status announcement behavior",
139
- "code": "import { Badge } from '@/components/Badge';\n\n<Badge variant=\"success\" announce>Saved</Badge>"
156
+ "name": "Outline and Ghost",
157
+ "description": "Hairline metadata pill, and filter chrome that marks the active one.",
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>"
140
159
  },
141
160
  {
142
161
  "name": "Outline",
143
- "description": "Minimal bordered badge for neutral emphasis",
144
- "code": "import { Badge } from '@/components/Badge';\n\n<Badge variant=\"outline\">Outline</Badge>"
162
+ "description": "Bordered and transparent, when a fill would shout.",
163
+ "code": "<Badge variant=\"outline\">Outline</Badge>"
145
164
  },
146
165
  {
147
- "name": "Small Size",
148
- "description": "Compact badges for dense UIs",
149
- "code": "import { Badge } from '@/components/Badge';\nimport { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"sm\" align=\"center\" wrap>\n <Badge size=\"sm\" variant=\"info\">v2.1</Badge>\n <Badge size=\"sm\" variant=\"success\">Stable</Badge>\n <Badge size=\"md\" variant=\"info\">Standard</Badge>\n</Stack>"
166
+ "name": "Sizes",
167
+ "description": "sm for dense tables, lg for reference status pills.",
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>"
150
169
  },
151
170
  {
152
171
  "name": "Removable",
153
- "description": "User-created tags that can be dismissed",
154
- "code": "import { Badge } from '@/components/Badge';\nimport { 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>"
172
+ "description": "Dismissible tags the user added themselves.",
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>"
174
+ },
175
+ {
176
+ "name": "Announced Status",
177
+ "description": "Looks the same, but screen readers now hear the change.",
178
+ "code": "<Badge tone=\"success\" announce>Saved</Badge>"
155
179
  }
156
180
  ],
157
181
  "relations": [
@@ -169,20 +193,27 @@
169
193
  "contract": {
170
194
  "propsSummary": [
171
195
  "children: ReactNode - badge label (required)",
172
- "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",
173
198
  "size: sm|md|lg - badge size",
174
199
  "dot: boolean - show status dot indicator",
175
200
  "dotPulse: boolean - breathe the dot for an in-progress state (respects prefers-reduced-motion)",
176
201
  "dotColor: string - color for the leading status dot",
177
- "active: boolean - marks variant=\"dim\" as the selected filter",
202
+ "active: boolean - marks variant=\"ghost\" as the selected filter",
178
203
  "onRemove: () => void - makes badge removable",
179
204
  "announce: boolean - opt into role=\"status\" + auto status aria-label"
180
205
  ],
181
- "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
+ ]
182
211
  },
183
212
  "ai": {
184
213
  "compositionPattern": "compound",
185
- "subComponents": ["Root"]
214
+ "subComponents": [
215
+ "Root"
216
+ ]
186
217
  },
187
218
  "provenance": {
188
219
  "source": "migrated",
@@ -1,16 +1,24 @@
1
1
  @use "../../tokens/variables" as *;
2
+ @use "../../tokens/mixins" as *;
3
+ @use "../../tokens/measurements.generated" as measurements;
2
4
  @use "../../recipes/action" as action;
3
5
  @use "../../recipes/representation" as representation;
4
6
  @use "../../recipes/target" as target;
5
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.
6
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
+
7
15
  display: inline-flex;
8
16
  align-items: center;
9
17
  box-sizing: border-box;
10
18
  inline-size: max-content;
11
- gap: var(--fui-raw-space-4, 4px);
12
- padding-block: 0;
13
- 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;
14
22
  border-radius: var(--fui-badge-radius, var(--fui-radius-lg, #{$fui-radius-lg}));
15
23
  white-space: nowrap;
16
24
  }
@@ -19,65 +27,84 @@
19
27
  .sm {
20
28
  @include representation.badge("sm");
21
29
 
22
- padding-inline: var(--fui-raw-space-4, 4px);
30
+ padding-inline: var(--fui-raw-space-4, #{measurements.raw-space(4)});
23
31
  }
24
32
 
25
33
  .md {
26
34
  @include representation.badge("md");
27
35
 
28
- padding-inline: var(--fui-raw-space-6, 6px);
36
+ padding-inline: var(--fui-raw-space-6, #{measurements.raw-space(6)});
29
37
  }
30
38
 
31
39
  .lg {
32
40
  @include representation.badge("lg");
33
41
 
34
- padding-inline: var(--fui-raw-space-8, 8px);
42
+ padding-inline: var(--fui-raw-space-8, #{measurements.raw-space(8)});
35
43
  }
36
44
 
37
- // Variants
38
- .default {
39
- background-color: var(--fui-bg-tertiary, $fui-bg-tertiary);
40
- 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
+ );
41
58
  }
42
59
 
43
- .success {
44
- background: var(--fui-color-success-bg, $fui-color-success-bg);
45
- 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});
46
65
  }
47
66
 
48
- .warning {
49
- background: var(--fui-color-warning-bg, $fui-color-warning-bg);
50
- 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);
51
72
  }
52
73
 
53
- .error {
54
- background: var(--fui-color-danger-bg, $fui-color-danger-bg);
55
- 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);
56
76
  }
57
77
 
58
- .info {
59
- background: var(--fui-color-info-bg, $fui-color-info-bg);
60
- 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);
61
80
  }
62
81
 
63
- .outline {
64
- background-color: transparent;
65
- color: var(--fui-text-primary, $fui-text-primary);
66
- 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);
67
84
  }
68
85
 
69
- .label {
70
- border: var(--fui-stroke-hairline, 1px) solid var(--fui-border, $fui-border);
71
- border-radius: var(--fui-radius-sm, $fui-radius-sm);
86
+ .toneDanger {
87
+ @include _tone("danger", $fui-color-danger, $fui-color-danger-text, $fui-color-danger-border);
88
+ }
89
+
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 {
72
97
  background-color: transparent;
73
- 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}));
74
100
  }
75
101
 
76
- .dim {
77
- border: var(--fui-stroke-hairline, 1px) solid transparent;
78
- 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});
79
106
  background-color: transparent;
80
- color: var(--fui-text-secondary, $fui-text-secondary);
107
+ color: var(--_badge-ink, var(--fui-text-secondary, #{$fui-text-secondary}));
81
108
  transition:
82
109
  color var(--fui-transition-fast, $fui-transition-fast),
83
110
  border-color var(--fui-transition-fast, $fui-transition-fast),
@@ -85,21 +112,21 @@
85
112
 
86
113
  &.active {
87
114
  border-color: var(--fui-border, $fui-border);
88
- background-color: var(--fui-bg-hover, $fui-bg-hover);
115
+ background-color: var(--fui-control-selected-bg, $fui-bg-active);
89
116
  color: var(--fui-text-primary, $fui-text-primary);
90
117
  }
91
118
  }
92
119
 
93
120
  .dot {
94
- inline-size: var(--fui-raw-space-6, 6px);
95
- block-size: var(--fui-raw-space-6, 6px);
96
- 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});
97
124
  background-color: var(--fui-badge-dot-color, currentColor);
98
125
  flex-shrink: 0;
99
126
 
100
127
  .sm & {
101
- inline-size: var(--fui-raw-space-4, 4px);
102
- 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)});
103
130
  }
104
131
  }
105
132
 
@@ -109,12 +136,12 @@
109
136
  // motion the component has. Opacity only: nothing reflows, and a reader who has
110
137
  // asked for less motion loses the breathing and keeps the badge.
111
138
  .dotPulse {
112
- animation: fui-badge-dot-pulse 1.6s ease-in-out infinite;
139
+ animation: fui-badge-dot-pulse var(--fui-duration-pulse, $fui-duration-pulse) ease-in-out infinite;
113
140
  }
114
141
 
115
142
  @keyframes fui-badge-dot-pulse {
116
143
  50% {
117
- opacity: 0.35;
144
+ opacity: var(--fui-opacity-disabled, #{$fui-opacity-disabled});
118
145
  }
119
146
  }
120
147
 
@@ -147,7 +174,7 @@
147
174
  }
148
175
 
149
176
  .badge:has(.remove) {
150
- padding-inline-end: var(--fui-raw-space-4, 4px);
177
+ padding-inline-end: var(--fui-raw-space-4, #{measurements.raw-space(4)});
151
178
  }
152
179
 
153
180
  .remove {
@@ -157,16 +184,21 @@
157
184
 
158
185
  inline-size: 1em;
159
186
  block-size: 1em;
160
- margin-inline-start: calc(-1 * var(--fui-raw-space-2, 2px));
161
- 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)});
162
189
  border: 0;
163
190
  background: transparent;
164
- color: inherit;
165
- opacity: 0.6;
191
+ color: color-mix(in srgb, currentColor 60%, transparent);
166
192
  border-radius: var(--fui-radius-full, $fui-radius-full);
167
193
  cursor: pointer;
168
194
 
169
195
  &:hover {
170
- opacity: 1;
196
+ color: currentColor;
197
+ }
198
+
199
+ &:focus-visible {
200
+ @include focus-ring;
201
+
202
+ color: currentColor;
171
203
  }
172
204
  }