@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,5 +1,6 @@
1
1
  @use '../../tokens/variables' as *;
2
2
  @use '../../tokens/mixins' as *;
3
+ @use '../../tokens/measurements.generated' as measurements;
3
4
  @use '../../recipes/action';
4
5
  @use '../../recipes/layout';
5
6
 
@@ -22,8 +23,8 @@
22
23
  align-items: center;
23
24
  gap: layout.gap("xs");
24
25
  list-style: none;
25
- margin: 0;
26
- padding: 0;
26
+ margin: var(--fui-raw-space-0, #{measurements.raw-space(0)});
27
+ padding: var(--fui-raw-space-0, #{measurements.raw-space(0)});
27
28
  }
28
29
 
29
30
  // ============================================
@@ -52,19 +53,21 @@
52
53
 
53
54
  // Active page
54
55
  .itemActive {
55
- background-color: var(--fui-bg-active, $fui-bg-active);
56
+ background-color: var(--fui-control-selected-bg, $fui-bg-active);
56
57
  color: var(--fui-text-primary, $fui-text-primary);
57
58
  font-weight: var(--fui-font-weight-semibold, $fui-font-weight-semibold);
58
59
 
59
60
  &:hover:not(:disabled) {
60
- background-color: var(--fui-bg-active, $fui-bg-active);
61
+ background-color: var(--fui-control-selected-bg, $fui-bg-active);
61
62
  }
63
+
64
+ @include high-contrast-outline;
62
65
  }
63
66
 
64
67
  // Disabled state (prev/next at boundaries)
65
68
  .itemDisabled {
66
- opacity: 0.5;
67
- cursor: not-allowed;
69
+ @include disabled-state;
70
+
68
71
  pointer-events: none;
69
72
  }
70
73
 
@@ -107,13 +110,3 @@
107
110
  @include action.glyph("lg");
108
111
  }
109
112
 
110
- // ============================================
111
- // Accessibility: High Contrast Mode
112
- // ============================================
113
-
114
- @media (prefers-contrast: more) {
115
- .itemActive {
116
- outline: var(--fui-stroke-default, 2px) solid var(--fui-text-primary, $fui-text-primary);
117
- outline-offset: calc(-1 * var(--fui-stroke-default, 2px));
118
- }
119
- }
@@ -1,15 +1,9 @@
1
1
  {
2
2
  "$schema": "https://usefragments.com/schemas/contract.v1.json",
3
3
  "name": "Popover",
4
- "description": "Rich content overlay anchored to a trigger element. Use for forms, detailed information, or interactive content that should stay in context.",
5
- "category": "feedback",
6
- "tags": [
7
- "popover",
8
- "overlay",
9
- "dropdown",
10
- "floating",
11
- "contextual"
12
- ],
4
+ "description": "Anchors interactive content to a trigger without blocking the page.",
5
+ "category": "overlays",
6
+ "tags": ["popover", "overlay", "dropdown", "floating", "contextual"],
13
7
  "status": "stable",
14
8
  "sourcePath": "src/components/Popover/index.tsx",
15
9
  "exportName": "Popover",
@@ -51,24 +45,23 @@
51
45
  },
52
46
  "usage": {
53
47
  "when": [
54
- "Inline editing forms",
55
- "Rich preview content",
56
- "Filter panels",
57
- "Date/color pickers",
58
- "Content that needs more space than a tooltip"
48
+ "Editing a value in place",
49
+ "Previews richer than a line of text",
50
+ "Filter and picker panels",
51
+ "Content that outgrows a tooltip"
59
52
  ],
60
53
  "whenNot": [
61
- "Simple hints (use Tooltip)",
62
- "Action lists (use Menu)",
63
- "Blocking user interaction (use Dialog)",
64
- "System notifications (use Toast or Alert)"
54
+ "A short hint (use Tooltip)",
55
+ "A list of actions (use Menu)",
56
+ "Anything that must block the page (use Dialog)",
57
+ "Feedback the user does not act on (use Toast or Alert)"
65
58
  ],
66
59
  "guidelines": [
67
- "Keep popover content focused and minimal",
68
- "Include a clear way to close (X button or action buttons)",
69
- "Position to avoid covering important content",
70
- "Use arrow to visually connect popover to trigger",
71
- "Popover.Trigger and Popover.Close support asChild for links/router-link components (single valid element child required)"
60
+ "One job per panel",
61
+ "Always give the user a visible way out",
62
+ "Pick a side that does not cover what the user just clicked",
63
+ "Add the arrow when the trigger is not obvious",
64
+ "asChild on Trigger and Close needs a single element child"
72
65
  ],
73
66
  "accessibility": [
74
67
  "Focus is moved to popover content on open",
@@ -79,27 +72,27 @@
79
72
  "examples": [
80
73
  {
81
74
  "name": "Default",
82
- "description": "Basic popover with content",
83
- "code": "<Popover>\n <Popover.Trigger asChild>\n <Button variant=\"secondary\">Open Popover</Button>\n </Popover.Trigger>\n <Popover.Content>\n <Popover.Close />\n <Popover.Title>Popover Title</Popover.Title>\n <Popover.Description>\n This is a popover with some content. It can contain text, forms, or other elements.\n </Popover.Description>\n </Popover.Content>\n</Popover>"
75
+ "description": "Title, body, and a close control.",
76
+ "code": "<Popover>\n <Popover.Trigger asChild>\n <Button variant=\"soft\">Open Popover</Button>\n </Popover.Trigger>\n <Popover.Content>\n <Popover.Close />\n <Popover.Title>Popover Title</Popover.Title>\n <Popover.Description>\n This is a popover with some content. It can contain text, forms, or other elements.\n </Popover.Description>\n </Popover.Content>\n</Popover>"
84
77
  },
85
78
  {
86
79
  "name": "With Form",
87
- "description": "Popover containing a form",
88
- "code": "<Popover>\n <Popover.Trigger asChild>\n <Button variant=\"secondary\">Edit Name</Button>\n </Popover.Trigger>\n <Popover.Content size=\"sm\">\n <Popover.Close />\n <Popover.Title>Edit Name</Popover.Title>\n <Popover.Body>\n <Input label=\"Display Name\" placeholder=\"Enter name\" />\n </Popover.Body>\n <Popover.Footer>\n <Popover.Close asChild>\n <Button variant=\"secondary\" size=\"sm\">Cancel</Button>\n </Popover.Close>\n <Button variant=\"primary\" size=\"sm\">Save</Button>\n </Popover.Footer>\n </Popover.Content>\n</Popover>"
80
+ "description": "Enough room to edit a value in place.",
81
+ "code": "<Popover>\n <Popover.Trigger asChild>\n <Button variant=\"soft\">Edit Name</Button>\n </Popover.Trigger>\n <Popover.Content size=\"sm\">\n <Popover.Close />\n <Popover.Title>Edit Name</Popover.Title>\n <Popover.Body>\n <Input label=\"Display Name\" placeholder=\"Enter name\" />\n </Popover.Body>\n <Popover.Footer>\n <Popover.Close asChild>\n <Button variant=\"soft\" size=\"sm\">Cancel</Button>\n </Popover.Close>\n <Button variant=\"solid\" size=\"sm\">Save</Button>\n </Popover.Footer>\n </Popover.Content>\n</Popover>"
89
82
  },
90
83
  {
91
84
  "name": "With Arrow",
92
- "description": "Popover with pointing arrow",
93
- "code": "<Popover>\n <Popover.Trigger asChild>\n <Button variant=\"secondary\">Info</Button>\n </Popover.Trigger>\n <Popover.Content arrow>\n <Popover.Title>Quick Tip</Popover.Title>\n <Popover.Description>\n This popover has an arrow pointing to its trigger element.\n </Popover.Description>\n </Popover.Content>\n</Popover>"
85
+ "description": "The arrow ties the panel back to its trigger.",
86
+ "code": "<Popover>\n <Popover.Trigger asChild>\n <Button variant=\"soft\">Info</Button>\n </Popover.Trigger>\n <Popover.Content arrow>\n <Popover.Title>Quick Tip</Popover.Title>\n <Popover.Description>\n This popover has an arrow pointing to its trigger element.\n </Popover.Description>\n </Popover.Content>\n</Popover>"
94
87
  },
95
88
  {
96
89
  "name": "Positions",
97
- "description": "Popover on different sides",
98
- "code": "<div style={{ display: 'flex', gap: '16px', padding: '60px' }}>\n <Popover>\n <Popover.Trigger asChild>\n <Button variant=\"secondary\">Top</Button>\n </Popover.Trigger>\n <Popover.Content side=\"top\" size=\"sm\">\n <Popover.Description>Popover on top</Popover.Description>\n </Popover.Content>\n </Popover>\n <Popover>\n <Popover.Trigger asChild>\n <Button variant=\"secondary\">Bottom</Button>\n </Popover.Trigger>\n <Popover.Content side=\"bottom\" size=\"sm\">\n <Popover.Description>Popover on bottom</Popover.Description>\n </Popover.Content>\n </Popover>\n</div>"
90
+ "description": "Flips to the opposite side when space runs out.",
91
+ "code": "<div style={{ display: 'flex', gap: '16px', padding: '60px' }}>\n <Popover>\n <Popover.Trigger asChild>\n <Button variant=\"soft\">Top</Button>\n </Popover.Trigger>\n <Popover.Content side=\"top\" size=\"sm\">\n <Popover.Description>Popover on top</Popover.Description>\n </Popover.Content>\n </Popover>\n <Popover>\n <Popover.Trigger asChild>\n <Button variant=\"soft\">Bottom</Button>\n </Popover.Trigger>\n <Popover.Content side=\"bottom\" size=\"sm\">\n <Popover.Description>Popover on bottom</Popover.Description>\n </Popover.Content>\n </Popover>\n</div>"
99
92
  },
100
93
  {
101
94
  "name": "Link Trigger",
102
- "description": "Use asChild with a non-button trigger element",
95
+ "description": "asChild lets a link open it.",
103
96
  "code": "<Popover>\n <Popover.Trigger asChild>\n <a href=\"#popover-help\">Open help</a>\n </Popover.Trigger>\n <Popover.Content size=\"sm\">\n <Popover.Description>Popover trigger can be an anchor when using asChild.</Popover.Description>\n </Popover.Content>\n</Popover>"
104
97
  }
105
98
  ],
@@ -128,27 +121,12 @@
128
121
  "Popover.Trigger / Popover.Close asChild support non-button children",
129
122
  "Popover.Content side: top|bottom|left|right - position"
130
123
  ],
131
- "a11yRules": [
132
- "A11Y_POPOVER_FOCUS",
133
- "A11Y_POPOVER_ESCAPE",
134
- "A11Y_TARGET_SIZE_MIN"
135
- ]
124
+ "a11yRules": ["A11Y_POPOVER_FOCUS", "A11Y_POPOVER_ESCAPE", "A11Y_TARGET_SIZE_MIN"]
136
125
  },
137
126
  "ai": {
138
127
  "compositionPattern": "compound",
139
- "subComponents": [
140
- "Trigger",
141
- "Content",
142
- "Close",
143
- "Title",
144
- "Description",
145
- "Body",
146
- "Footer"
147
- ],
148
- "requiredChildren": [
149
- "Trigger",
150
- "Content"
151
- ],
128
+ "subComponents": ["Trigger", "Content", "Close", "Title", "Description", "Body", "Footer"],
129
+ "requiredChildren": ["Trigger", "Content"],
152
130
  "commonPatterns": [
153
131
  "<Popover><Popover.Trigger asChild><Button>Open</Button></Popover.Trigger><Popover.Content><Popover.Close /><Popover.Title>{title}</Popover.Title><Popover.Description>{description}</Popover.Description></Popover.Content></Popover>",
154
132
  "<Popover><Popover.Trigger asChild><a href=\"#help\">Open help</a></Popover.Trigger><Popover.Content>...</Popover.Content></Popover>"
@@ -1,10 +1,11 @@
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;
4
5
  @use "../../recipes/overlay" as overlay;
5
6
 
6
7
  .positioner {
7
- z-index: var(--fui-overlay-layer-anchored, 52);
8
+ z-index: var(--fui-overlay-layer-anchored, #{$fui-overlay-layer-anchored});
8
9
  outline: none;
9
10
  }
10
11
 
@@ -13,7 +14,7 @@
13
14
 
14
15
  position: relative;
15
16
  opacity: 0;
16
- transform: scale(0.95) translateY(-$fui-anim-offset-sm);
17
+ transform: scale(0.95) translateY(calc(-1 * var(--fui-anim-offset-sm, #{$fui-anim-offset-sm})));
17
18
  transform-origin: var(--transform-origin);
18
19
  transition:
19
20
  opacity var(--fui-transition-fast, $fui-transition-fast),
@@ -26,21 +27,22 @@
26
27
 
27
28
  &[data-starting-style] {
28
29
  opacity: 0;
29
- transform: scale(0.95) translateY(-$fui-anim-offset-sm);
30
+ transform: scale(0.95) translateY(calc(-1 * var(--fui-anim-offset-sm, #{$fui-anim-offset-sm})));
30
31
  }
31
32
 
32
33
  &[data-ending-style] {
33
34
  opacity: 0;
34
- transform: scale(0.95) translateY($fui-anim-offset-sm);
35
+ transform: scale(0.95) translateY(var(--fui-anim-offset-sm, #{$fui-anim-offset-sm}));
35
36
  }
36
37
 
37
38
  &[data-side="top"] {
38
39
  &[data-starting-style] {
39
- transform: scale(0.95) translateY($fui-anim-offset-sm);
40
+ transform: scale(0.95) translateY(var(--fui-anim-offset-sm, #{$fui-anim-offset-sm}));
40
41
  }
41
42
 
42
43
  &[data-ending-style] {
43
- transform: scale(0.95) translateY(-$fui-anim-offset-sm);
44
+ transform: scale(0.95)
45
+ translateY(calc(-1 * var(--fui-anim-offset-sm, #{$fui-anim-offset-sm})));
44
46
  }
45
47
  }
46
48
 
@@ -64,14 +66,16 @@
64
66
  .title {
65
67
  @include overlay.anchored-title;
66
68
 
67
- margin: 0 0 var(--fui-feedback-text-gap, var(--fui-raw-space-4, 4px));
69
+ margin: var(--fui-raw-space-0, #{measurements.raw-space(0)})
70
+ var(--fui-raw-space-0, #{measurements.raw-space(0)})
71
+ var(--fui-feedback-text-gap, var(--fui-raw-space-4, #{measurements.raw-space(4)}));
68
72
  color: var(--fui-text-primary, $fui-text-primary);
69
73
  }
70
74
 
71
75
  .description {
72
76
  @include overlay.description;
73
77
 
74
- margin: 0;
78
+ margin: var(--fui-raw-space-0, #{measurements.raw-space(0)});
75
79
  color: var(--fui-text-secondary, $fui-text-secondary);
76
80
  }
77
81
 
@@ -79,24 +83,12 @@
79
83
  @include button-reset;
80
84
  @include interactive-base;
81
85
  @include overlay.close;
82
-
83
- border-radius: var(--fui-radius-sm, $fui-radius-sm);
84
- color: var(--fui-text-tertiary, $fui-text-tertiary);
85
-
86
- &:hover {
87
- background-color: var(--fui-bg-hover, $fui-bg-hover);
88
- color: var(--fui-text-primary, $fui-text-primary);
89
- }
90
-
91
- svg {
92
- inline-size: action.icon-size("sm");
93
- block-size: action.icon-size("sm");
94
- }
95
86
  }
96
87
 
97
88
  .popup:has(.close) .title {
98
89
  padding-inline-end: calc(
99
- #{action.track("sm")} + var(--fui-overlay-section-gap, var(--fui-raw-space-8, 8px))
90
+ #{action.track("sm")} +
91
+ var(--fui-overlay-section-gap, var(--fui-raw-space-8, #{measurements.raw-space(8)}))
100
92
  );
101
93
  }
102
94
 
@@ -104,7 +96,7 @@
104
96
  @include overlay.arrow-box;
105
97
 
106
98
  background-color: var(--fui-bg-elevated, $fui-bg-elevated);
107
- border: var(--fui-stroke-hairline, 1px) solid var(--fui-border, $fui-border);
99
+ border: var(--fui-stroke-hairline, #{$fui-stroke-hairline}) solid var(--fui-border, $fui-border);
108
100
 
109
101
  &[data-side="top"] {
110
102
  border-top: none;
@@ -128,17 +120,27 @@
128
120
  }
129
121
 
130
122
  .body {
131
- margin-block-start: var(--fui-overlay-section-gap, var(--fui-raw-space-8, 8px));
123
+ margin-block-start: var(
124
+ --fui-overlay-section-gap,
125
+ var(--fui-raw-space-8, #{measurements.raw-space(8)})
126
+ );
132
127
  }
133
128
 
134
129
  .footer {
135
130
  display: flex;
136
131
  align-items: center;
137
132
  justify-content: flex-end;
138
- gap: var(--fui-overlay-section-gap, var(--fui-raw-space-8, 8px));
139
- margin-block-start: var(--fui-overlay-section-gap, var(--fui-raw-space-8, 8px));
140
- padding-block-start: var(--fui-overlay-section-gap, var(--fui-raw-space-8, 8px));
141
- border-top: var(--fui-stroke-hairline, 1px) solid var(--fui-border, $fui-border);
133
+ gap: var(--fui-overlay-section-gap, var(--fui-raw-space-8, #{measurements.raw-space(8)}));
134
+ margin-block-start: var(
135
+ --fui-overlay-section-gap,
136
+ var(--fui-raw-space-8, #{measurements.raw-space(8)})
137
+ );
138
+ padding-block-start: var(
139
+ --fui-overlay-section-gap,
140
+ var(--fui-raw-space-8, #{measurements.raw-space(8)})
141
+ );
142
+ border-top: var(--fui-stroke-hairline, #{$fui-stroke-hairline}) solid
143
+ var(--fui-border, $fui-border);
142
144
  }
143
145
 
144
146
  @media (prefers-reduced-motion: reduce) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://usefragments.com/schemas/contract.v1.json",
3
3
  "name": "Progress",
4
- "description": "Visual indicator of task completion or loading state. Available in linear and circular variants.",
4
+ "description": "Shows how far along a task is, as a bar or a ring.",
5
5
  "category": "feedback",
6
6
  "tags": ["progress", "loading", "indicator", "percentage", "status"],
7
7
  "status": "stable",
@@ -12,7 +12,7 @@
12
12
  "min: number (default: 0)",
13
13
  "max: number (default: 100)",
14
14
  "size: sm|md|lg (default: md)",
15
- "variant: default|neutral|success|warning|danger (default: default)",
15
+ "tone: accent|neutral|success|warning|danger (default: accent)",
16
16
  "role: progressbar|meter (default: progressbar)",
17
17
  "label: string",
18
18
  "showValue: boolean (default: false)",
@@ -44,12 +44,12 @@
44
44
  "required": false,
45
45
  "values": ["sm", "md", "lg"]
46
46
  },
47
- "variant": {
47
+ "tone": {
48
48
  "type": "enum",
49
- "description": "Color variant",
50
- "default": "default",
49
+ "description": "Colour. accent is the plain bar; neutral reads as a meter whose maximum is not a success; success, warning and danger carry state.",
50
+ "default": "accent",
51
51
  "required": false,
52
- "values": ["default", "neutral", "success", "warning", "danger"]
52
+ "values": ["accent", "neutral", "success", "warning", "danger"]
53
53
  },
54
54
  "label": {
55
55
  "type": "string",
@@ -70,56 +70,60 @@
70
70
  },
71
71
  "usage": {
72
72
  "when": [
73
- "Showing upload/download progress",
74
- "Displaying task completion percentage",
75
- "Form completion indicators",
76
- "Loading states with known duration"
73
+ "Upload and download progress",
74
+ "Percentage of a task finished",
75
+ "How much of a form is filled in",
76
+ "Waits where you know the duration"
77
77
  ],
78
78
  "whenNot": [
79
- "Unknown loading duration (use Spinner)",
80
- "Step-based progress (use Stepper)",
81
- "Status without percentage (use Badge)"
79
+ "You cannot say how long — use Loading",
80
+ "Discrete steps use a stepper",
81
+ "Status with no number — use Badge"
82
82
  ],
83
83
  "guidelines": [
84
- "Use determinate progress when you know the completion percentage",
85
- "Use indeterminate for unknown durations",
86
- "Include a label for context when the purpose isnt obvious",
87
- "Use appropriate color variants for success/warning/danger states",
88
- "Use variant=\"neutral\" with role=\"meter\" for magnitude or distribution values where reaching the maximum is not a success state",
89
- "Determinate values are clamped to the min/max range for display"
84
+ "Pass a value when you know the percentage; pass null when you do not",
85
+ "Add a label whenever the bar alone leaves the purpose unclear",
86
+ "success, warning, and danger carry state, not decoration",
87
+ "tone=\"neutral\" with role=\"meter\" for a magnitude where full is not success",
88
+ "Values outside min and max are clamped before display"
90
89
  ],
91
90
  "accessibility": [
92
- "Uses role=\"progressbar\" with aria-valuenow",
93
- "Accepts role=\"meter\" for scalar measurements within a known range",
94
- "Label is associated with the progress bar",
95
- "State changes are announced to screen readers"
91
+ "Reports role=\"progressbar\" with aria-valuenow",
92
+ "role=\"meter\" is accepted for scalar readings inside a known range",
93
+ "The label is tied to the bar",
94
+ "Value changes are announced as they happen"
96
95
  ]
97
96
  },
98
97
  "examples": [
99
98
  {
100
99
  "name": "Default",
101
- "description": "Basic progress bar with percentage",
102
- "code": "<Progress value={60} label=\"Uploading...\" showValue />"
100
+ "description": "Determinate bar with its percentage spelled out.",
101
+ "code": "<Progress value={60} label=\"Uploading…\" showValue />"
103
102
  },
104
103
  {
105
- "name": "Variants",
106
- "description": "Different color variants for different states",
107
- "code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '16px', width: '300px' }}>\n <Progress value={75} variant=\"default\" label=\"Processing\" showValue />\n <Progress value={100} variant=\"success\" label=\"Complete\" showValue />\n <Progress value={80} variant=\"warning\" label=\"Almost full\" showValue />\n <Progress value={95} variant=\"danger\" label=\"Storage critical\" showValue />\n</div>"
104
+ "name": "Tones",
105
+ "description": "Colour carries state: normal, done, tight, critical.",
106
+ "code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"column\" gap=\"md\">\n <Progress value={75} tone=\"accent\" label=\"Processing\" showValue />\n <Progress value={100} tone=\"success\" label=\"Complete\" showValue />\n <Progress value={80} tone=\"warning\" label=\"Almost full\" showValue />\n <Progress value={95} tone=\"danger\" label=\"Storage critical\" showValue />\n</Stack>"
107
+ },
108
+ {
109
+ "name": "Meter",
110
+ "description": "A reading where hitting the top is not a win.",
111
+ "code": "<Progress\n value={42}\n tone=\"neutral\"\n role=\"meter\"\n label=\"Seats used\"\n showValue\n/>"
108
112
  },
109
113
  {
110
114
  "name": "Sizes",
111
- "description": "Different progress bar sizes",
112
- "code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '16px', width: '300px' }}>\n <Progress value={50} size=\"sm\" label=\"Small\" />\n <Progress value={50} size=\"md\" label=\"Medium\" />\n <Progress value={50} size=\"lg\" label=\"Large\" />\n</div>"
115
+ "description": "Thin for table rows, thick when the bar is the point.",
116
+ "code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"column\" gap=\"md\">\n <Progress value={50} size=\"sm\" label=\"Small\" />\n <Progress value={50} size=\"md\" label=\"Medium\" />\n <Progress value={50} size=\"lg\" label=\"Large\" />\n</Stack>"
113
117
  },
114
118
  {
115
119
  "name": "Indeterminate",
116
- "description": "Loading state with unknown duration",
117
- "code": "<Progress value={null} label=\"Loading...\" />"
120
+ "description": "value={null} sweeps instead of filling.",
121
+ "code": "<Progress value={null} label=\"Loading…\" />"
118
122
  },
119
123
  {
120
124
  "name": "Circular",
121
- "description": "Circular progress indicator",
122
- "code": "<div style={{ display: 'flex', gap: '24px', alignItems: 'center' }}>\n <CircularProgress value={25} size=\"sm\" />\n <CircularProgress value={50} size=\"md\" showValue />\n <CircularProgress value={75} size=\"lg\" showValue variant=\"success\" />\n <CircularProgress value={null} size=\"md\" />\n</div>"
125
+ "description": "Same value in a ring, for tiles and compact chrome.",
126
+ "code": "import { CircularProgress } from '@/components/Progress';\nimport { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"lg\" align=\"center\">\n <CircularProgress value={25} size=\"sm\" />\n <CircularProgress value={50} size=\"md\" showValue />\n <CircularProgress value={75} size=\"lg\" showValue tone=\"success\" />\n <CircularProgress value={null} size=\"md\" />\n</Stack>"
123
127
  }
124
128
  ],
125
129
  "relations": [
@@ -138,7 +142,7 @@
138
142
  "propsSummary": [
139
143
  "value: number|null - progress percentage (null for indeterminate)",
140
144
  "size: sm|md|lg - bar thickness",
141
- "variant: default|success|warning|danger - color",
145
+ "tone: accent|neutral|success|warning|danger - colour",
142
146
  "label: string - descriptive label",
143
147
  "showValue: boolean - display percentage",
144
148
  "Determinate display values are clamped (and invalid min/max ranges render as 0%)"
@@ -35,7 +35,7 @@
35
35
  .track {
36
36
  position: relative;
37
37
  inline-size: 100%;
38
- block-size: var(--_progress-track-size);
38
+ block-size: var(--_progress-track-size, var(--fui-raw-space-6, #{measurements.raw-space(6)}));
39
39
  overflow: hidden;
40
40
  background-color: var(--fui-bg-tertiary, $fui-bg-tertiary);
41
41
  border-radius: var(--fui-radius-full, $fui-radius-full);
@@ -70,7 +70,7 @@
70
70
  transition: inline-size var(--fui-transition-normal, $fui-transition-normal);
71
71
  }
72
72
 
73
- // Color variants
73
+ // Tones (accent is the absence of a tone class)
74
74
  .indicatorNeutral {
75
75
  background-color: var(--fui-text-tertiary, $fui-text-tertiary);
76
76
  }
@@ -90,7 +90,7 @@
90
90
  // Indeterminate animation
91
91
  .indicatorIndeterminate {
92
92
  inline-size: 50%;
93
- animation: indeterminate 1.5s ease-in-out infinite;
93
+ animation: indeterminate var(--fui-duration-pulse, $fui-duration-pulse) ease-in-out infinite;
94
94
  }
95
95
 
96
96
  @keyframes indeterminate {
@@ -105,14 +105,15 @@
105
105
  }
106
106
  }
107
107
 
108
- // Circular progress variant
108
+ // Circular progress. The ring geometry (`--fui-progress-diameter`, `--fui-progress-dash-*`)
109
+ // is authored on the instance from geometry.ts; the md ring is the fallback.
109
110
  .circular {
110
111
  position: relative;
111
112
  display: inline-flex;
112
113
  align-items: center;
113
114
  justify-content: center;
114
- inline-size: var(--_progress-diameter);
115
- block-size: var(--_progress-diameter);
115
+ inline-size: var(--fui-progress-diameter, var(--fui-raw-space-48, #{measurements.raw-space(48)}));
116
+ block-size: var(--fui-progress-diameter, var(--fui-raw-space-48, #{measurements.raw-space(48)}));
116
117
  }
117
118
 
118
119
  .circularSvg {
@@ -134,6 +135,10 @@
134
135
  transition: stroke-dashoffset var(--fui-transition-normal, $fui-transition-normal);
135
136
  }
136
137
 
138
+ .circularIndicatorNeutral {
139
+ stroke: var(--fui-text-tertiary, $fui-text-tertiary);
140
+ }
141
+
137
142
  .circularIndicatorSuccess {
138
143
  stroke: var(--fui-color-success-text, $fui-color-success-text);
139
144
  }
@@ -147,19 +152,20 @@
147
152
  }
148
153
 
149
154
  .circularIndicatorIndeterminate {
150
- animation: circularIndeterminate 1.5s ease-in-out infinite;
155
+ animation: circularIndeterminate var(--fui-duration-pulse, $fui-duration-pulse) ease-in-out
156
+ infinite;
151
157
  }
152
158
 
153
159
  @keyframes circularIndeterminate {
154
160
  0% {
155
- stroke-dashoffset: var(--_progress-dash-full);
161
+ stroke-dashoffset: var(--fui-progress-dash-full, var(--fui-raw-space-0, #{measurements.raw-space(0)}));
156
162
  transform: rotate(0deg);
157
163
  }
158
164
  50% {
159
- stroke-dashoffset: var(--_progress-dash-quarter);
165
+ stroke-dashoffset: var(--fui-progress-dash-quarter, var(--fui-raw-space-0, #{measurements.raw-space(0)}));
160
166
  }
161
167
  100% {
162
- stroke-dashoffset: var(--_progress-dash-full);
168
+ stroke-dashoffset: var(--fui-progress-dash-full, var(--fui-raw-space-0, #{measurements.raw-space(0)}));
163
169
  transform: rotate(360deg);
164
170
  }
165
171
  }
@@ -13,6 +13,8 @@ import styles from "./Progress.module.scss";
13
13
  // Types
14
14
  // ============================================
15
15
 
16
+ export type ProgressTone = "accent" | "neutral" | "success" | "warning" | "danger";
17
+
16
18
  export interface ProgressProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "defaultValue"> {
17
19
  /** Current progress value (0-100). Null for indeterminate. */
18
20
  value?: number | null;
@@ -22,8 +24,10 @@ export interface ProgressProps extends Omit<React.HTMLAttributes<HTMLDivElement>
22
24
  max?: number;
23
25
  /** Size of the progress bar */
24
26
  size?: ProgressSize;
25
- /** Color variant */
26
- variant?: "default" | "neutral" | "success" | "warning" | "danger";
27
+ /** Colour. `accent` is the plain bar; `neutral` reads as a meter whose
28
+ * maximum is not a success; the semantic tones carry state.
29
+ * @default "accent" */
30
+ tone?: ProgressTone;
27
31
  /** Label text */
28
32
  label?: string;
29
33
  /** Show percentage value */
@@ -37,14 +41,31 @@ export interface CircularProgressProps extends React.HTMLAttributes<HTMLDivEleme
37
41
  value?: number | null;
38
42
  /** Size of the circular progress */
39
43
  size?: ProgressSize;
40
- /** Color variant */
41
- variant?: "default" | "success" | "warning" | "danger";
44
+ /** Colour, same axis as the bar.
45
+ * @default "accent" */
46
+ tone?: ProgressTone;
42
47
  /** Show percentage in center */
43
48
  showValue?: boolean;
44
49
  /** Stroke width */
45
50
  strokeWidth?: number;
46
51
  }
47
52
 
53
+ const INDICATOR_TONE_CLASS: Record<ProgressTone, string | undefined> = {
54
+ accent: undefined,
55
+ neutral: styles.indicatorNeutral,
56
+ success: styles.indicatorSuccess,
57
+ warning: styles.indicatorWarning,
58
+ danger: styles.indicatorDanger,
59
+ };
60
+
61
+ const CIRCULAR_TONE_CLASS: Record<ProgressTone, string | undefined> = {
62
+ accent: undefined,
63
+ neutral: styles.circularIndicatorNeutral,
64
+ success: styles.circularIndicatorSuccess,
65
+ warning: styles.circularIndicatorWarning,
66
+ danger: styles.circularIndicatorDanger,
67
+ };
68
+
48
69
  // ============================================
49
70
  // Horizontal progress bar
50
71
  // ============================================
@@ -54,7 +75,7 @@ function ProgressRoot({
54
75
  min = 0,
55
76
  max = 100,
56
77
  size = "md",
57
- variant = "default",
78
+ tone = "accent",
58
79
  label,
59
80
  showValue = false,
60
81
  formatValue,
@@ -88,10 +109,7 @@ function ProgressRoot({
88
109
 
89
110
  const indicatorClasses = [
90
111
  styles.indicator,
91
- variant === "neutral" && styles.indicatorNeutral,
92
- variant === "success" && styles.indicatorSuccess,
93
- variant === "warning" && styles.indicatorWarning,
94
- variant === "danger" && styles.indicatorDanger,
112
+ INDICATOR_TONE_CLASS[tone],
95
113
  isIndeterminate && styles.indicatorIndeterminate,
96
114
  ]
97
115
  .filter(Boolean)
@@ -140,7 +158,7 @@ function ProgressRoot({
140
158
  function CircularProgressRoot({
141
159
  value = null,
142
160
  size = "md",
143
- variant = "default",
161
+ tone = "accent",
144
162
  showValue = false,
145
163
  strokeWidth: customStrokeWidth,
146
164
  className,
@@ -163,9 +181,7 @@ function CircularProgressRoot({
163
181
 
164
182
  const indicatorClasses = [
165
183
  styles.circularIndicator,
166
- variant === "success" && styles.circularIndicatorSuccess,
167
- variant === "warning" && styles.circularIndicatorWarning,
168
- variant === "danger" && styles.circularIndicatorDanger,
184
+ CIRCULAR_TONE_CLASS[tone],
169
185
  isIndeterminate && styles.circularIndicatorIndeterminate,
170
186
  ]
171
187
  .filter(Boolean)
@@ -176,10 +192,12 @@ function CircularProgressRoot({
176
192
  // Default value text for screen readers
177
193
  const effectiveValueText =
178
194
  ariaValueText || (isIndeterminate ? "Loading" : `${Math.round(percentage)} percent`);
195
+ // The ring geometry is authored on the instance through the public
196
+ // `--fui-progress-*` properties (declared in tokens/_component-properties.scss).
179
197
  const circularStyle = {
180
- "--_progress-diameter": `${geometry.diameter}px`,
181
- "--_progress-dash-full": circumference,
182
- "--_progress-dash-quarter": circumference / 4,
198
+ "--fui-progress-diameter": `${geometry.diameter}px`,
199
+ "--fui-progress-dash-full": circumference,
200
+ "--fui-progress-dash-quarter": circumference / 4,
183
201
  ...styleProp,
184
202
  } as React.CSSProperties;
185
203